[
  {
    "path": ".devcontainer/Dockerfile",
    "content": "# https://github.com/microsoft/vscode-dev-containers/blob/main/containers/python-3/README.md\nARG VARIANT=3.13-bookworm\nFROM mcr.microsoft.com/vscode/devcontainers/python:${VARIANT}\nCOPY requirements.txt /tmp/pip-tmp/\nRUN python3 -m pip install --upgrade pip \\\n  && python3 -m pip install --no-cache-dir -r /tmp/pip-tmp/requirements.txt \\\n  && pipx install pre-commit ruff\n"
  },
  {
    "path": ".devcontainer/README.md",
    "content": "# Development Container\n\nThis is **Devcontainer** configuration to provide a consistent development environment for all contributors.\n\n## Features\n\n- [x] Pre-configured **Python environment**\n- [x] Automatic installation of **pre-commit hooks**\n- [x] **Ruff** linter ready to check your code\n- [x] **Oh My Zsh** with plugins:\n- `zsh-autosuggestions`\n- `zsh-syntax-highlighting`\n\n## Usage\n\n1. Install [**Docker** ](https://www.docker.com/get-started/) and [**Visual Studio Code**](https://code.visualstudio.com/)\n2. Install the **Remote - Containers** extension in VS Code\n\n    - Do `CTRL+P`, paste this command and press `Enter`\n\n        ```shell\n        ext install ms-vscode-remote.remote-containers\n        ```\n3. Open this repository in VS Code\n4. When prompted, click **\"Reopen in Container\"**\n5. Wait for the environment to build and initialize\n\nAfter setup:\n\n- `pre-commit` hooks are installed\n- `ruff` and other tools are available\n- The shell uses Zsh by default\n\n## Tips\n\nTo manually run checks on all files:\n\n```bash\npre-commit run --all-files\n```\n\n> For further information here's [Microsoft tutorial about devcontainers.](https://code.visualstudio.com/docs/devcontainers/tutorial)\n"
  },
  {
    "path": ".devcontainer/devcontainer.json",
    "content": "{\n\t\"name\": \"Python 3\",\n\t\"build\": {\n\t\t\"dockerfile\": \"Dockerfile\",\n\t\t\"context\": \"..\",\n\t\t\"args\": {\n\t\t\t// Update 'VARIANT' to pick a Python version: 3, 3.11, 3.10, 3.9, 3.8\n\t\t\t// Append -bullseye or -buster to pin to an OS version.\n\t\t\t// Use -bullseye variants on local on arm64/Apple Silicon.\n\t\t\t\"VARIANT\": \"3.13-bookworm\"\n\t\t}\n\t},\n\n\t\"postCreateCommand\": \"zsh .devcontainer/post_install\",\n\n\t// Configure tool-specific properties.\n\t\"customizations\": {\n\t\t// Configure properties specific to VS Code.\n\t\t\"vscode\": {\n\t\t\t// Set *default* container specific settings.json values on container create.\n\t\t\t\"settings\": {\n\t\t\t\t\"python.defaultInterpreterPath\": \"/usr/local/bin/python\",\n\t\t\t\t\"python.linting.enabled\": true,\n\t\t\t\t\"python.formatting.blackPath\": \"/usr/local/py-utils/bin/black\",\n\t\t\t\t\"python.linting.mypyPath\": \"/usr/local/py-utils/bin/mypy\",\n\t\t\t\t\"terminal.integrated.defaultProfile.linux\": \"zsh\"\n\t\t\t},\n\n\t\t\t// Add the IDs of extensions you want installed when the container is created.\n\t\t\t\"extensions\": [\n\t\t\t\t\"ms-python.python\",\n\t\t\t\t\"ms-python.vscode-pylance\"\n\t\t\t]\n\t\t}\n\t},\n\n\t// Use 'forwardPorts' to make a list of ports inside the container available locally.\n\t// \"forwardPorts\": [],\n\n\t// Use 'postCreateCommand' to run commands after the container is created.\n\t// \"postCreateCommand\": \"pip3 install --user -r requirements.txt\",\n\n\t// Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root.\n\t\"remoteUser\": \"vscode\"\n}\n"
  },
  {
    "path": ".devcontainer/post_install",
    "content": "#!/usr/bin/env bash\n\necho \"Begin post-installation steps...\"\n\nset -e\n\necho \"Installing pre-commit hooks...\"\npre-commit install\n\necho \"Installing Oh My Zsh plugins...\"\n\n# Install zsh-autosuggestions if not present\nif [ ! -d \"${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions\" ]; then\n  echo \"Cloning zsh-autosuggestions...\"\n  git clone https://github.com/zsh-users/zsh-autosuggestions \\\n    \"${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions\"\nfi\n\n# Install zsh-syntax-highlighting if not present\nif [ ! -d \"${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting\" ]; then\n  echo \"Cloning zsh-syntax-highlighting...\"\n  git clone https://github.com/zsh-users/zsh-syntax-highlighting.git \\\n    \"${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting\"\nfi\n\necho \"Configuring plugins in ~/.zshrc...\"\nsed -i '/^plugins=/c\\plugins=(git zsh-autosuggestions zsh-syntax-highlighting)' ~/.zshrc\n\necho \"Post-installation steps completed successfully. Enjoy!\"\n"
  },
  {
    "path": ".gitattributes",
    "content": "* text=auto\n"
  },
  {
    "path": ".github/CODEOWNERS",
    "content": "# This is a comment.\n# Each line is a file pattern followed by one or more owners.\n\n# More details are here: https://help.github.com/articles/about-codeowners/\n\n# The '*' pattern is global owners.\n\n# Order is important. The last matching pattern has the most precedence.\n\n/.*  @cclauss\n\n# /backtracking/\n\n# /bit_manipulation/\n\n# /blockchain/\n\n# /boolean_algebra/\n\n# /cellular_automata/\n\n# /ciphers/\n\n# /compression/\n\n# /computer_vision/\n\n# /conversions/\n\n# /data_structures/\n\n# /digital_image_processing/\n\n# /divide_and_conquer/\n\n# /dynamic_programming/\n\n# /file_transfer/\n\n# /fuzzy_logic/\n\n# /genetic_algorithm/\n\n# /geodesy/\n\n# /graphics/\n\n# /graphs/\n\n# /greedy_method/\n\n# /hashes/\n\n# /images/\n\n# /linear_algebra/\n\n# /machine_learning/\n\n# /maths/\n\n# /matrix/\n\n# /networking_flow/\n\n# /neural_network/\n\n# /other/\n\n# /project_euler/\n\n# /quantum/\n\n# /scheduling/\n\n# /scripts/\n\n# /searches/\n\n# /sorts/\n\n# /strings/\n\n# /traversals/\n\n/web_programming/  @cclauss\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "content": "name: Bug report\ndescription: Create a bug report to help us address errors in the repository\nlabels: [bug]\nbody:\n  - type: markdown\n    attributes:\n      value: >\n        Before requesting please search [existing issues](https://github.com/TheAlgorithms/Python/labels/bug).\n        Usage questions such as \"How do I...?\"  belong on the\n        [Discord](https://discord.gg/c7MnfGFGa6) and will be closed.\n\n  - type: input\n    attributes:\n      label: \"Repository commit\"\n      description: >\n        The commit hash for `TheAlgorithms/Python` repository. You can get this\n        by running the command `git rev-parse HEAD` locally.\n      placeholder: \"a0b0f414ae134aa1772d33bb930e5a960f9979e8\"\n    validations:\n      required: true\n\n  - type: input\n    attributes:\n      label: \"Python version (python --version)\"\n      placeholder: \"Python 3.10.7\"\n    validations:\n      required: true\n\n  - type: textarea\n    attributes:\n      label: \"Dependencies version (pip freeze)\"\n      description: >\n        This is the output of the command `pip freeze --all`. Note that the\n        actual output might be different as compared to the placeholder text.\n      placeholder: |\n        appnope==0.1.3\n        asttokens==2.0.8\n        backcall==0.2.0\n        ...\n    validations:\n      required: true\n\n  - type: textarea\n    attributes:\n      label: \"Expected behavior\"\n      description: \"Describe the behavior you expect. May include images or videos.\"\n    validations:\n      required: true\n\n  - type: textarea\n    attributes:\n      label: \"Actual behavior\"\n    validations:\n      required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false\ncontact_links:\n  - name: Discord community\n    url: https://discord.gg/c7MnfGFGa6\n    about: Have any questions or need any help? Please contact us via Discord\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yml",
    "content": "name: Feature request\ndescription: Suggest features, propose improvements, discuss new ideas.\nlabels: [enhancement]\nbody:\n  - type: markdown\n    attributes:\n      value: >\n        Before requesting please search [existing issues](https://github.com/TheAlgorithms/Python/labels/enhancement).\n        Do not create issues to implement new algorithms as these will be closed.\n        Usage questions such as \"How do I...?\"  belong on the\n        [Discord](https://discord.gg/c7MnfGFGa6) and will be closed.\n\n  - type: textarea\n    attributes:\n      label: \"Feature description\"\n      description: >\n        This could include new topics or improving any existing implementations.\n    validations:\n      required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/other.yml",
    "content": "name: Other\ndescription: Use this for any other issues. PLEASE do not create blank issues\nlabels: [\"awaiting triage\"]\nbody:\n  - type: textarea\n    id: issuedescription\n    attributes:\n      label: What would you like to share?\n      description: Provide a clear and concise explanation of your issue.\n    validations:\n      required: true\n\n  - type: textarea\n    id: extrainfo\n    attributes:\n      label: Additional information\n      description: Is there anything else we should know about this issue?\n    validations:\n      required: false\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "# Keep GitHub Actions up to date with Dependabot...\n# https://docs.github.com/en/code-security/dependabot/working-with-dependabot/keeping-your-actions-up-to-date-with-dependabot\nversion: 2\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"daily\"\n"
  },
  {
    "path": ".github/pull_request_template.md",
    "content": "### Describe your change:\n\n\n\n* [ ] Add an algorithm?\n* [ ] Fix a bug or typo in an existing algorithm?\n* [ ] Add or change doctests? -- Note: Please avoid changing both code and tests in a single pull request.\n* [ ] Documentation change?\n\n### Checklist:\n* [ ] I have read [CONTRIBUTING.md](https://github.com/TheAlgorithms/Python/blob/master/CONTRIBUTING.md).\n* [ ] This pull request is all my own work -- I have not plagiarized.\n* [ ] I know that pull requests will not be merged if they fail the automated tests.\n* [ ] This PR only changes one algorithm file.  To ease review, please open separate PRs for separate algorithms.\n* [ ] All new Python files are placed inside an existing directory.\n* [ ] All filenames are in all lowercase characters with no spaces or dashes.\n* [ ] All functions and variable names follow Python naming conventions.\n* [ ] All function parameters and return values are annotated with Python [type hints](https://docs.python.org/3/library/typing.html).\n* [ ] All functions have [doctests](https://docs.python.org/3/library/doctest.html) that pass the automated testing.\n* [ ] All new algorithms include at least one URL that points to Wikipedia or another similar explanation.\n* [ ] 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\".\n"
  },
  {
    "path": ".github/stale.yml",
    "content": "# Configuration for probot-stale - https://github.com/probot/stale\n\n# Number of days of inactivity before an Issue or Pull Request becomes stale\ndaysUntilStale: 30\n\n# Number of days of inactivity before an Issue or Pull Request with the stale label is closed.\n# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.\ndaysUntilClose: 7\n\n# Only issues or pull requests with all of these labels are check if stale. Defaults to `[]` (disabled)\nonlyLabels: []\n\n# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable\nexemptLabels:\n  - \"Status: on hold\"\n\n# Set to true to ignore issues in a project (defaults to false)\nexemptProjects: false\n\n# Set to true to ignore issues in a milestone (defaults to false)\nexemptMilestones: false\n\n# Set to true to ignore issues with an assignee (defaults to false)\nexemptAssignees: false\n\n# Label to use when marking as stale\nstaleLabel: stale\n\n# Limit the number of actions per hour, from 1-30. Default is 30\nlimitPerRun: 5\n\n# Comment to post when removing the stale label.\n# unmarkComment: >\n#   Your comment here.\n\n# Optionally, specify configuration settings that are specific to just 'issues' or 'pulls':\npulls:\n  # Comment to post when marking as stale. Set to `false` to disable\n  markComment: >\n    This pull request has been automatically marked as stale because it has not had\n    recent activity. It will be closed if no further activity occurs. Thank you\n    for your contributions.\n\n  # Comment to post when closing a stale Pull Request.\n  closeComment: >\n    Please reopen this pull request once you commit the changes requested\n    or make improvements on the code. If this is not the case and you need\n    some help, feel free to seek help from our [Gitter](https://gitter.im/TheAlgorithms/community)\n    or ping one of the reviewers. Thank you for your contributions!\n\nissues:\n  # Comment to post when marking as stale. Set to `false` to disable\n  markComment: >\n    This issue has been automatically marked as stale because it has not had\n    recent activity. It will be closed if no further activity occurs. Thank you\n    for your contributions.\n\n  # Comment to post when closing a stale Issue.\n  closeComment: >\n    Please reopen this issue once you add more information and updates here.\n    If this is not the case and you need some help, feel free to seek help\n    from our [Gitter](https://gitter.im/TheAlgorithms/community) or ping one of the\n    reviewers. Thank you for your contributions!\n"
  },
  {
    "path": ".github/workflows/build.yml",
    "content": "name: \"build\"\n\non:\n  pull_request:\n  schedule:\n    - cron: \"0 0 * * *\" # Run everyday\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - run: sudo apt-get update && sudo apt-get install -y libhdf5-dev\n      - uses: actions/checkout@v6\n      - uses: astral-sh/setup-uv@v7\n        with:\n          enable-cache: true\n          cache-dependency-glob: uv.lock\n      - uses: actions/setup-python@v6\n        with:\n          python-version: 3.14\n          allow-prereleases: true\n      - run: uv sync --group=test\n      - name: Run tests\n        # TODO: #8818 Re-enable quantum tests\n        run: uv run --with=pytest-run-parallel pytest\n          --iterations=8 --parallel-threads=auto\n          --ignore=computer_vision/cnn_classification.py\n          --ignore=docs/conf.py\n          --ignore=dynamic_programming/k_means_clustering_tensorflow.py\n          --ignore=machine_learning/local_weighted_learning/local_weighted_learning.py\n          --ignore=machine_learning/lstm/lstm_prediction.py\n          --ignore=neural_network/input_data.py\n          --ignore=project_euler/\n          --ignore=quantum/q_fourier_transform.py\n          --ignore=scripts/validate_solutions.py\n          --ignore=web_programming/current_stock_price.py\n          --ignore=web_programming/fetch_anime_and_play.py\n          --cov-report=term-missing:skip-covered\n          --cov=. .\n      - if: ${{ success() }}\n        run: scripts/build_directory_md.py 2>&1 | tee DIRECTORY.md\n"
  },
  {
    "path": ".github/workflows/devcontainer_ci.yml",
    "content": "name: Test DevContainer Build\n\non:\n  push:\n    paths:\n      - \".devcontainer/**\"\n  pull_request:\n    paths:\n      - \".devcontainer/**\"\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v6\n      - uses: devcontainers/ci@v0.3\n        with:\n          push: never\n          runCmd: \"true\"\n"
  },
  {
    "path": ".github/workflows/directory_writer.yml",
    "content": "# The objective of this GitHub Action is to update the DIRECTORY.md file (if needed)\n# when doing a git push\nname: directory_writer\non: [push]\njobs:\n  directory_writer:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v6\n        with:\n          fetch-depth: 0\n      - uses: actions/setup-python@v6\n        with:\n          python-version: 3.14\n          allow-prereleases: true\n      - name: Write DIRECTORY.md\n        run: |\n          scripts/build_directory_md.py 2>&1 | tee DIRECTORY.md\n          git config --global user.name \"$GITHUB_ACTOR\"\n          git config --global user.email \"$GITHUB_ACTOR@users.noreply.github.com\"\n          git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY\n      - name: Update DIRECTORY.md\n        run: |\n          git add DIRECTORY.md\n          git commit -am \"updating DIRECTORY.md\" ||  true\n          git push --force origin HEAD:$GITHUB_REF || true\n"
  },
  {
    "path": ".github/workflows/project_euler.yml",
    "content": "on:\n  pull_request:\n    # Run only if a file is changed within the project_euler directory and related files\n    paths:\n      - \"project_euler/**\"\n      - \".github/workflows/project_euler.yml\"\n      - \"scripts/validate_solutions.py\"\n  schedule:\n    - cron: \"0 0 * * *\" # Run everyday\n\nname: \"Project Euler\"\n\njobs:\n  project-euler:\n    runs-on: ubuntu-latest\n    steps:\n      - run:\n          sudo apt-get update && sudo apt-get install -y libtiff5-dev libjpeg8-dev libopenjp2-7-dev\n          zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python3-tk\n          libharfbuzz-dev libfribidi-dev libxcb1-dev\n          libxml2-dev libxslt-dev\n          libhdf5-dev\n          libopenblas-dev\n      - uses: actions/checkout@v6\n      - uses: astral-sh/setup-uv@v7\n      - uses: actions/setup-python@v6\n        with:\n          python-version: 3.14\n          allow-prereleases: true\n      - run: uv sync --group=euler-validate --group=test\n      - run: uv run pytest --doctest-modules --cov-report=term-missing:skip-covered --cov=project_euler/ project_euler/\n  validate-solutions:\n    runs-on: ubuntu-latest\n    steps:\n      - run:\n          sudo apt-get update && sudo apt-get install -y libtiff5-dev libjpeg8-dev libopenjp2-7-dev\n          zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python3-tk\n          libharfbuzz-dev libfribidi-dev libxcb1-dev\n          libxml2-dev libxslt-dev\n          libhdf5-dev\n          libopenblas-dev\n      - uses: actions/checkout@v6\n      - uses: astral-sh/setup-uv@v7\n      - uses: actions/setup-python@v6\n        with:\n          python-version: 3.14\n          allow-prereleases: true\n      - run: uv sync --group=euler-validate --group=test\n      - run: uv run pytest scripts/validate_solutions.py\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n"
  },
  {
    "path": ".github/workflows/ruff.yml",
    "content": "# https://beta.ruff.rs\nname: ruff\non:\n  push:\n    branches:\n      - master\n  pull_request:\n    branches:\n      - master\njobs:\n  ruff:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v6\n      - uses: astral-sh/setup-uv@v7\n      - run: uvx ruff check --output-format=github .\n"
  },
  {
    "path": ".github/workflows/sphinx.yml",
    "content": "name: sphinx\n\non:\n  # Triggers the workflow on push or pull request events but only for the \"master\" branch\n  push:\n    branches: [\"master\"]\n  pull_request:\n    branches: [\"master\"]\n  # Or manually from the Actions tab\n  workflow_dispatch:\n\n# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages\npermissions:\n  contents: read\n  pages: write\n  id-token: write\n\n# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.\n# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.\nconcurrency:\n  group: \"pages\"\n  cancel-in-progress: false\n\njobs:\n  build_docs:\n    runs-on: ubuntu-24.04-arm\n    steps:\n      - run:\n          sudo apt-get update && sudo apt-get install -y libtiff5-dev libjpeg8-dev libopenjp2-7-dev\n          zlib1g-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl8.6-dev tk8.6-dev python3-tk\n          libharfbuzz-dev libfribidi-dev libxcb1-dev\n          libxml2-dev libxslt-dev\n          libhdf5-dev\n          libopenblas-dev\n      - uses: actions/checkout@v6\n      - uses: astral-sh/setup-uv@v7\n      - uses: actions/setup-python@v6\n        with:\n          python-version: 3.14\n          allow-prereleases: true\n      - run: uv sync --group=docs\n      - uses: actions/configure-pages@v5\n      - run: uv run sphinx-build -c docs . docs/_build/html\n      - uses: actions/upload-pages-artifact@v4\n        with:\n          path: docs/_build/html\n\n  deploy_docs:\n    environment:\n      name: github-pages\n      url: ${{ steps.deployment.outputs.page_url }}\n    if: github.event_name != 'pull_request'\n    needs: build_docs\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/deploy-pages@v4\n        id: deployment\n"
  },
  {
    "path": ".gitignore",
    "content": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py.class\n\n# C extensions\n*.so\n\n# Distribution / packaging\n.Python\nbuild/\ndevelop-eggs/\ndist/\ndownloads/\neggs/\n.eggs/\nlib/\nlib64/\nparts/\nsdist/\nvar/\nwheels/\n*.egg-info/\n.installed.cfg\n*.egg\nMANIFEST\n\n# PyInstaller\n#  Usually these files are written by a Python script from a template\n#  before PyInstaller builds the exe, so as to inject date/other infos into it.\n*.manifest\n*.spec\n\n# Installer logs\npip-log.txt\npip-delete-this-directory.txt\n\n# Unit test / coverage reports\nhtmlcov/\n.tox/\n.coverage\n.coverage.*\n.cache\nnosetests.xml\ncoverage.xml\n*.cover\n.hypothesis/\n.pytest_cache/\n\n# Translations\n*.mo\n*.pot\n\n# Django stuff:\n*.log\nlocal_settings.py\ndb.sqlite3\n\n# Flask stuff:\ninstance/\n.webassets-cache\n\n# Scrapy stuff:\n.scrapy\n\n# Sphinx documentation\ndocs/_build/\n\n# PyBuilder\ntarget/\n\n# Jupyter Notebook\n.ipynb_checkpoints\n\n# pyenv\n.python-version\n\n# celery beat schedule file\ncelerybeat-schedule\n\n# SageMath parsed files\n*.sage.py\n\n# Environments\n.env\n.venv\nenv/\nvenv/\nENV/\nenv.bak/\nvenv.bak/\n\n# Spyder project settings\n.spyderproject\n.spyproject\n\n# Rope project settings\n.ropeproject\n\n# mkdocs documentation\n/site\n\n# mypy\n.mypy_cache/\n\n.DS_Store\n.idea\n.try\n.vscode/\n.vs/\n"
  },
  {
    "path": ".gitpod.yml",
    "content": "tasks:\n  - init: pip3 install -r ./requirements.txt\n"
  },
  {
    "path": ".pre-commit-config.yaml",
    "content": "ci:\n  autoupdate_schedule: monthly\n\nrepos:\n  - repo: https://github.com/pre-commit/pre-commit-hooks\n    rev: v6.0.0\n    hooks:\n      - id: check-executables-have-shebangs\n      - id: check-toml\n      - id: check-yaml\n      - id: end-of-file-fixer\n        types: [python]\n      - id: trailing-whitespace\n      - id: requirements-txt-fixer\n\n  - repo: https://github.com/MarcoGorelli/auto-walrus\n    rev: 0.4.1\n    hooks:\n      - id: auto-walrus\n\n  - repo: https://github.com/astral-sh/ruff-pre-commit\n    rev: v0.14.14\n    hooks:\n      - id: ruff-check\n      - id: ruff-format\n\n  - repo: https://github.com/codespell-project/codespell\n    rev: v2.4.1\n    hooks:\n      - id: codespell\n        additional_dependencies:\n          - tomli\n\n  - repo: https://github.com/tox-dev/pyproject-fmt\n    rev: v2.12.1\n    hooks:\n      - id: pyproject-fmt\n\n  - repo: local\n    hooks:\n      - id: validate-filenames\n        name: Validate filenames\n        entry: ./scripts/validate_filenames.py\n        language: script\n        pass_filenames: false\n\n  - repo: https://github.com/abravalheri/validate-pyproject\n    rev: v0.24.1\n    hooks:\n      - id: validate-pyproject\n\n  - repo: https://github.com/pre-commit/mirrors-mypy\n    rev: v1.19.1\n    hooks:\n      - id: mypy\n        args:\n          - --explicit-package-bases\n          - --ignore-missing-imports\n          - --install-types\n          - --non-interactive\n\n  - repo: https://github.com/pre-commit/mirrors-prettier\n    rev: v4.0.0-alpha.8\n    hooks:\n      - id: prettier\n        types_or: [toml, yaml]\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing guidelines\n\n## Before contributing\n\nWelcome 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).\n\n## Contributing\n\n### Contributor\n\nWe 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:\n\n- You did your work - no plagiarism allowed.\n  - Any plagiarized work will not be merged.\n- Your work will be distributed under [MIT License](LICENSE.md) once your pull request is merged.\n- Your submitted work fulfills or mostly fulfills our styles and standards.\n\n__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.\n\n__Improving comments__ and __writing proper tests__ are also highly welcome.\n\n### Contribution\n\nWe 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.\n\nYour 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.\n\n#### Issues\n\nIf 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.\n\n__Do not__ create an issue to contribute an algorithm. Please submit a pull request instead.\n\nPlease help us keep our issue list small by adding `Fixes #{$ISSUE_NUMBER}` to the description of pull requests that resolve open issues.\nFor example, if your pull request fixes issue #10, then please add the following to its description:\n```\nFixes #10\n```\nGitHub 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.\n\n#### What is an Algorithm?\n\nAn Algorithm is one or more functions (or classes) that:\n* take one or more inputs,\n* perform some internal calculations or data manipulations,\n* return one or more outputs,\n* have minimal side effects (Ex. `print()`, `plot()`, `read()`, `write()`).\n\nAlgorithms should be packaged in a way that would make it easy for readers to put them into larger programs.\n\nAlgorithms should:\n* have intuitive class and function names that make their purpose clear to readers\n* use Python naming conventions and intuitive variable names to ease comprehension\n* be flexible to take different input values\n* have Python type hints for their input parameters and return values\n* raise Python exceptions (`ValueError`, etc.) on erroneous input values\n* have docstrings with clear explanations and/or URLs to source materials\n* contain doctests that test both valid and erroneous input values\n* return all calculation results instead of printing or plotting them\n\nAlgorithms 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.\n\n#### Pre-commit plugin\nUse [pre-commit](https://pre-commit.com/#installation) to automatically format your code to match our coding style:\n\n```bash\npython3 -m pip install pre-commit  # only required the first time\npre-commit install\n```\nThat'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:\n\n```bash\npre-commit run --all-files --show-diff-on-failure\n```\n\n#### Coding Style\n\nWe want your work to be readable by others; therefore, we encourage you to note the following:\n\n- Please write in Python 3.13+. For instance: `print()` is a function in Python 3 so `print \"Hello\"` will *not* work but `print(\"Hello\")` will.\n- 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.\n  - Single letter variable names are *old school* so please avoid them unless their life only spans a few lines.\n  - Expand acronyms because `gcd()` is hard to understand but `greatest_common_divisor()` is not.\n  - 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.\n\n- 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.\n\n- 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,\n\n  ```bash\n  python3 -m pip install black  # only required the first time\n  black .\n  ```\n\n- 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.\n\n  ```bash\n  python3 -m pip install ruff  # only required the first time\n  ruff check\n  ```\n\n- Original code submissions require docstrings or comments to describe your work.\n\n- More on docstrings and comments:\n\n  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.\n\n  The following are considered to be bad and may be requested to be improved:\n\n  ```python\n  x = x + 2\t# increased by 2\n  ```\n\n  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.\n\n  We encourage you to put docstrings inside your functions but please pay attention to the indentation of docstrings. The following is a good example:\n\n  ```python\n  def sum_ab(a, b):\n      \"\"\"\n      Return the sum of two integers a and b.\n      \"\"\"\n      return a + b\n  ```\n\n- 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_.\n\n  ```python\n  def sum_ab(a, b):\n      \"\"\"\n      Return the sum of two integers a and b\n      >>> sum_ab(2, 2)\n      4\n      >>> sum_ab(-2, 3)\n      1\n      >>> sum_ab(4.9, 5.1)\n      10.0\n      \"\"\"\n      return a + b\n  ```\n\n  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:\n\n  ```bash\n  python3 -m doctest -v my_submission.py\n  ```\n\n  The use of the Python built-in `input()` function is __not__ encouraged:\n\n  ```python\n  input('Enter your input:')\n  # Or even worse...\n  input = eval(input(\"Enter your input: \"))\n  ```\n\n  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:\n\n  ```python\n  starting_value = int(input(\"Please enter a starting value: \").strip())\n  ```\n\n  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](https://mypy-lang.org) so run that locally before making your submission.\n\n  ```python\n  def sum_ab(a: int, b: int) -> int:\n      return a + b\n  ```\n\n  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.\n\n- [__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.\n\n- Avoid importing external libraries for basic algorithms. Only use those libraries for complicated algorithms.\n- 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.\n\n#### Other Requirements for Submissions\n- 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.\n- The file extension for code files should be `.py`. Jupyter Notebooks should be submitted to [TheAlgorithms/Jupyter](https://github.com/TheAlgorithms/Jupyter).\n- Strictly use snake_case (underscore_separated) in your file_name, as it will be easy to parse in future using scripts.\n- Please avoid creating new directories if at all possible. Try to fit your work into the existing directory structure.\n- If possible, follow the standard *within* the folder you are submitting to.\n- If you have modified/added code work, make sure the code compiles before submitting.\n- If you have modified/added documentation work, ensure your language is concise and contains no grammar errors.\n- Do not update the README.md or DIRECTORY.md file which will be periodically autogenerated by our GitHub Actions processes.\n- Add a corresponding explanation to [Algorithms-Explanation](https://github.com/TheAlgorithms/Algorithms-Explanation) (Optional but recommended).\n- 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.\n\n- Most importantly,\n  - __Be consistent in the use of these guidelines when submitting.__\n  - __Join__ us on [Discord](https://discord.com/invite/c7MnfGFGa6) and [Gitter](https://gitter.im/TheAlgorithms/community) __now!__\n  - Happy coding!\n\nWriter [@poyea](https://github.com/poyea), Jun 2019.\n"
  },
  {
    "path": "DIRECTORY.md",
    "content": "\n## Audio Filters\n  * [Butterworth Filter](audio_filters/butterworth_filter.py)\n  * [Iir Filter](audio_filters/iir_filter.py)\n  * [Show Response](audio_filters/show_response.py)\n\n## Backtracking\n  * [All Combinations](backtracking/all_combinations.py)\n  * [All Permutations](backtracking/all_permutations.py)\n  * [All Subsequences](backtracking/all_subsequences.py)\n  * [Coloring](backtracking/coloring.py)\n  * [Combination Sum](backtracking/combination_sum.py)\n  * [Crossword Puzzle Solver](backtracking/crossword_puzzle_solver.py)\n  * [Generate Parentheses](backtracking/generate_parentheses.py)\n  * [Generate Parentheses Iterative](backtracking/generate_parentheses_iterative.py)\n  * [Hamiltonian Cycle](backtracking/hamiltonian_cycle.py)\n  * [Knight Tour](backtracking/knight_tour.py)\n  * [Match Word Pattern](backtracking/match_word_pattern.py)\n  * [Minimax](backtracking/minimax.py)\n  * [N Queens](backtracking/n_queens.py)\n  * [N Queens Math](backtracking/n_queens_math.py)\n  * [Power Sum](backtracking/power_sum.py)\n  * [Rat In Maze](backtracking/rat_in_maze.py)\n  * [Sudoku](backtracking/sudoku.py)\n  * [Sum Of Subsets](backtracking/sum_of_subsets.py)\n  * [Word Break](backtracking/word_break.py)\n  * [Word Ladder](backtracking/word_ladder.py)\n  * [Word Search](backtracking/word_search.py)\n\n## Bit Manipulation\n  * [Binary And Operator](bit_manipulation/binary_and_operator.py)\n  * [Binary Coded Decimal](bit_manipulation/binary_coded_decimal.py)\n  * [Binary Count Setbits](bit_manipulation/binary_count_setbits.py)\n  * [Binary Count Trailing Zeros](bit_manipulation/binary_count_trailing_zeros.py)\n  * [Binary Or Operator](bit_manipulation/binary_or_operator.py)\n  * [Binary Shifts](bit_manipulation/binary_shifts.py)\n  * [Binary Twos Complement](bit_manipulation/binary_twos_complement.py)\n  * [Binary Xor Operator](bit_manipulation/binary_xor_operator.py)\n  * [Bitwise Addition Recursive](bit_manipulation/bitwise_addition_recursive.py)\n  * [Count 1S Brian Kernighan Method](bit_manipulation/count_1s_brian_kernighan_method.py)\n  * [Count Number Of One Bits](bit_manipulation/count_number_of_one_bits.py)\n  * [Excess 3 Code](bit_manipulation/excess_3_code.py)\n  * [Find Previous Power Of Two](bit_manipulation/find_previous_power_of_two.py)\n  * [Find Unique Number](bit_manipulation/find_unique_number.py)\n  * [Gray Code Sequence](bit_manipulation/gray_code_sequence.py)\n  * [Highest Set Bit](bit_manipulation/highest_set_bit.py)\n  * [Index Of Rightmost Set Bit](bit_manipulation/index_of_rightmost_set_bit.py)\n  * [Is Even](bit_manipulation/is_even.py)\n  * [Is Power Of Two](bit_manipulation/is_power_of_two.py)\n  * [Largest Pow Of Two Le Num](bit_manipulation/largest_pow_of_two_le_num.py)\n  * [Missing Number](bit_manipulation/missing_number.py)\n  * [Numbers Different Signs](bit_manipulation/numbers_different_signs.py)\n  * [Power Of 4](bit_manipulation/power_of_4.py)\n  * [Reverse Bits](bit_manipulation/reverse_bits.py)\n  * [Single Bit Manipulation Operations](bit_manipulation/single_bit_manipulation_operations.py)\n  * [Swap All Odd And Even Bits](bit_manipulation/swap_all_odd_and_even_bits.py)\n\n## Blockchain\n  * [Diophantine Equation](blockchain/diophantine_equation.py)\n\n## Boolean Algebra\n  * [And Gate](boolean_algebra/and_gate.py)\n  * [Imply Gate](boolean_algebra/imply_gate.py)\n  * [Karnaugh Map Simplification](boolean_algebra/karnaugh_map_simplification.py)\n  * [Multiplexer](boolean_algebra/multiplexer.py)\n  * [Nand Gate](boolean_algebra/nand_gate.py)\n  * [Nimply Gate](boolean_algebra/nimply_gate.py)\n  * [Nor Gate](boolean_algebra/nor_gate.py)\n  * [Not Gate](boolean_algebra/not_gate.py)\n  * [Or Gate](boolean_algebra/or_gate.py)\n  * [Quine Mc Cluskey](boolean_algebra/quine_mc_cluskey.py)\n  * [Xnor Gate](boolean_algebra/xnor_gate.py)\n  * [Xor Gate](boolean_algebra/xor_gate.py)\n\n## Cellular Automata\n  * [Conways Game Of Life](cellular_automata/conways_game_of_life.py)\n  * [Game Of Life](cellular_automata/game_of_life.py)\n  * [Langtons Ant](cellular_automata/langtons_ant.py)\n  * [Nagel Schrekenberg](cellular_automata/nagel_schrekenberg.py)\n  * [One Dimensional](cellular_automata/one_dimensional.py)\n  * [Wa Tor](cellular_automata/wa_tor.py)\n\n## Ciphers\n  * [A1Z26](ciphers/a1z26.py)\n  * [Affine Cipher](ciphers/affine_cipher.py)\n  * [Atbash](ciphers/atbash.py)\n  * [Autokey](ciphers/autokey.py)\n  * [Baconian Cipher](ciphers/baconian_cipher.py)\n  * [Base16](ciphers/base16.py)\n  * [Base32](ciphers/base32.py)\n  * [Base64 Cipher](ciphers/base64_cipher.py)\n  * [Base85](ciphers/base85.py)\n  * [Beaufort Cipher](ciphers/beaufort_cipher.py)\n  * [Bifid](ciphers/bifid.py)\n  * [Brute Force Caesar Cipher](ciphers/brute_force_caesar_cipher.py)\n  * [Caesar Cipher](ciphers/caesar_cipher.py)\n  * [Cryptomath Module](ciphers/cryptomath_module.py)\n  * [Decrypt Caesar With Chi Squared](ciphers/decrypt_caesar_with_chi_squared.py)\n  * [Deterministic Miller Rabin](ciphers/deterministic_miller_rabin.py)\n  * [Diffie](ciphers/diffie.py)\n  * [Diffie Hellman](ciphers/diffie_hellman.py)\n  * [Elgamal Key Generator](ciphers/elgamal_key_generator.py)\n  * [Enigma Machine2](ciphers/enigma_machine2.py)\n  * [Fractionated Morse Cipher](ciphers/fractionated_morse_cipher.py)\n  * [Gronsfeld Cipher](ciphers/gronsfeld_cipher.py)\n  * [Hill Cipher](ciphers/hill_cipher.py)\n  * [Mixed Keyword Cypher](ciphers/mixed_keyword_cypher.py)\n  * [Mono Alphabetic Ciphers](ciphers/mono_alphabetic_ciphers.py)\n  * [Morse Code](ciphers/morse_code.py)\n  * [Onepad Cipher](ciphers/onepad_cipher.py)\n  * [Permutation Cipher](ciphers/permutation_cipher.py)\n  * [Playfair Cipher](ciphers/playfair_cipher.py)\n  * [Polybius](ciphers/polybius.py)\n  * [Porta Cipher](ciphers/porta_cipher.py)\n  * [Rabin Miller](ciphers/rabin_miller.py)\n  * [Rail Fence Cipher](ciphers/rail_fence_cipher.py)\n  * [Rot13](ciphers/rot13.py)\n  * [Rsa Cipher](ciphers/rsa_cipher.py)\n  * [Rsa Factorization](ciphers/rsa_factorization.py)\n  * [Rsa Key Generator](ciphers/rsa_key_generator.py)\n  * [Running Key Cipher](ciphers/running_key_cipher.py)\n  * [Shuffled Shift Cipher](ciphers/shuffled_shift_cipher.py)\n  * [Simple Keyword Cypher](ciphers/simple_keyword_cypher.py)\n  * [Simple Substitution Cipher](ciphers/simple_substitution_cipher.py)\n  * [Transposition Cipher](ciphers/transposition_cipher.py)\n  * [Transposition Cipher Encrypt Decrypt File](ciphers/transposition_cipher_encrypt_decrypt_file.py)\n  * [Trifid Cipher](ciphers/trifid_cipher.py)\n  * [Vernam Cipher](ciphers/vernam_cipher.py)\n  * [Vigenere Cipher](ciphers/vigenere_cipher.py)\n  * [Xor Cipher](ciphers/xor_cipher.py)\n\n## Computer Vision\n  * [Cnn Classification](computer_vision/cnn_classification.py)\n  * [Flip Augmentation](computer_vision/flip_augmentation.py)\n  * [Haralick Descriptors](computer_vision/haralick_descriptors.py)\n  * [Harris Corner](computer_vision/harris_corner.py)\n  * [Horn Schunck](computer_vision/horn_schunck.py)\n  * [Intensity Based Segmentation](computer_vision/intensity_based_segmentation.py)\n  * [Mean Threshold](computer_vision/mean_threshold.py)\n  * [Mosaic Augmentation](computer_vision/mosaic_augmentation.py)\n  * [Pooling Functions](computer_vision/pooling_functions.py)\n\n## Conversions\n  * [Astronomical Length Scale Conversion](conversions/astronomical_length_scale_conversion.py)\n  * [Binary To Decimal](conversions/binary_to_decimal.py)\n  * [Binary To Hexadecimal](conversions/binary_to_hexadecimal.py)\n  * [Binary To Octal](conversions/binary_to_octal.py)\n  * [Convert Number To Words](conversions/convert_number_to_words.py)\n  * [Decimal To Any](conversions/decimal_to_any.py)\n  * [Decimal To Binary](conversions/decimal_to_binary.py)\n  * [Decimal To Hexadecimal](conversions/decimal_to_hexadecimal.py)\n  * [Decimal To Octal](conversions/decimal_to_octal.py)\n  * [Energy Conversions](conversions/energy_conversions.py)\n  * [Excel Title To Column](conversions/excel_title_to_column.py)\n  * [Hex To Bin](conversions/hex_to_bin.py)\n  * [Hexadecimal To Decimal](conversions/hexadecimal_to_decimal.py)\n  * [Ipv4 Conversion](conversions/ipv4_conversion.py)\n  * [Length Conversion](conversions/length_conversion.py)\n  * [Molecular Chemistry](conversions/molecular_chemistry.py)\n  * [Octal To Binary](conversions/octal_to_binary.py)\n  * [Octal To Decimal](conversions/octal_to_decimal.py)\n  * [Octal To Hexadecimal](conversions/octal_to_hexadecimal.py)\n  * [Prefix Conversions](conversions/prefix_conversions.py)\n  * [Prefix Conversions String](conversions/prefix_conversions_string.py)\n  * [Pressure Conversions](conversions/pressure_conversions.py)\n  * [Rectangular To Polar](conversions/rectangular_to_polar.py)\n  * [Rgb Cmyk Conversion](conversions/rgb_cmyk_conversion.py)\n  * [Rgb Hsv Conversion](conversions/rgb_hsv_conversion.py)\n  * [Roman Numerals](conversions/roman_numerals.py)\n  * [Speed Conversions](conversions/speed_conversions.py)\n  * [Temperature Conversions](conversions/temperature_conversions.py)\n  * [Time Conversions](conversions/time_conversions.py)\n  * [Volume Conversions](conversions/volume_conversions.py)\n  * [Weight Conversion](conversions/weight_conversion.py)\n\n## Data Compression\n  * [Burrows Wheeler](data_compression/burrows_wheeler.py)\n  * [Coordinate Compression](data_compression/coordinate_compression.py)\n  * [Huffman](data_compression/huffman.py)\n  * [Lempel Ziv](data_compression/lempel_ziv.py)\n  * [Lempel Ziv Decompress](data_compression/lempel_ziv_decompress.py)\n  * [Lz77](data_compression/lz77.py)\n  * [Peak Signal To Noise Ratio](data_compression/peak_signal_to_noise_ratio.py)\n  * [Run Length Encoding](data_compression/run_length_encoding.py)\n\n## Data Structures\n  * Arrays\n    * [Equilibrium Index In Array](data_structures/arrays/equilibrium_index_in_array.py)\n    * [Find Triplets With 0 Sum](data_structures/arrays/find_triplets_with_0_sum.py)\n    * [Index 2D Array In 1D](data_structures/arrays/index_2d_array_in_1d.py)\n    * [Kth Largest Element](data_structures/arrays/kth_largest_element.py)\n    * [Median Two Array](data_structures/arrays/median_two_array.py)\n    * [Monotonic Array](data_structures/arrays/monotonic_array.py)\n    * [Pairs With Given Sum](data_structures/arrays/pairs_with_given_sum.py)\n    * [Permutations](data_structures/arrays/permutations.py)\n    * [Prefix Sum](data_structures/arrays/prefix_sum.py)\n    * [Product Sum](data_structures/arrays/product_sum.py)\n    * [Rotate Array](data_structures/arrays/rotate_array.py)\n    * [Sparse Table](data_structures/arrays/sparse_table.py)\n    * [Sudoku Solver](data_structures/arrays/sudoku_solver.py)\n  * Binary Tree\n    * [Avl Tree](data_structures/binary_tree/avl_tree.py)\n    * [Basic Binary Tree](data_structures/binary_tree/basic_binary_tree.py)\n    * [Binary Search Tree](data_structures/binary_tree/binary_search_tree.py)\n    * [Binary Search Tree Recursive](data_structures/binary_tree/binary_search_tree_recursive.py)\n    * [Binary Tree Mirror](data_structures/binary_tree/binary_tree_mirror.py)\n    * [Binary Tree Node Sum](data_structures/binary_tree/binary_tree_node_sum.py)\n    * [Binary Tree Path Sum](data_structures/binary_tree/binary_tree_path_sum.py)\n    * [Binary Tree Traversals](data_structures/binary_tree/binary_tree_traversals.py)\n    * [Diameter Of Binary Tree](data_structures/binary_tree/diameter_of_binary_tree.py)\n    * [Diff Views Of Binary Tree](data_structures/binary_tree/diff_views_of_binary_tree.py)\n    * [Distribute Coins](data_structures/binary_tree/distribute_coins.py)\n    * [Fenwick Tree](data_structures/binary_tree/fenwick_tree.py)\n    * [Flatten Binarytree To Linkedlist](data_structures/binary_tree/flatten_binarytree_to_linkedlist.py)\n    * [Floor And Ceiling](data_structures/binary_tree/floor_and_ceiling.py)\n    * [Inorder Tree Traversal 2022](data_structures/binary_tree/inorder_tree_traversal_2022.py)\n    * [Is Sorted](data_structures/binary_tree/is_sorted.py)\n    * [Is Sum Tree](data_structures/binary_tree/is_sum_tree.py)\n    * [Lazy Segment Tree](data_structures/binary_tree/lazy_segment_tree.py)\n    * [Lowest Common Ancestor](data_structures/binary_tree/lowest_common_ancestor.py)\n    * [Maximum Fenwick Tree](data_structures/binary_tree/maximum_fenwick_tree.py)\n    * [Maximum Sum Bst](data_structures/binary_tree/maximum_sum_bst.py)\n    * [Merge Two Binary Trees](data_structures/binary_tree/merge_two_binary_trees.py)\n    * [Mirror Binary Tree](data_structures/binary_tree/mirror_binary_tree.py)\n    * [Non Recursive Segment Tree](data_structures/binary_tree/non_recursive_segment_tree.py)\n    * [Number Of Possible Binary Trees](data_structures/binary_tree/number_of_possible_binary_trees.py)\n    * [Red Black Tree](data_structures/binary_tree/red_black_tree.py)\n    * [Segment Tree](data_structures/binary_tree/segment_tree.py)\n    * [Segment Tree Other](data_structures/binary_tree/segment_tree_other.py)\n    * [Serialize Deserialize Binary Tree](data_structures/binary_tree/serialize_deserialize_binary_tree.py)\n    * [Symmetric Tree](data_structures/binary_tree/symmetric_tree.py)\n    * [Treap](data_structures/binary_tree/treap.py)\n    * [Wavelet Tree](data_structures/binary_tree/wavelet_tree.py)\n  * Disjoint Set\n    * [Alternate Disjoint Set](data_structures/disjoint_set/alternate_disjoint_set.py)\n    * [Disjoint Set](data_structures/disjoint_set/disjoint_set.py)\n  * Hashing\n    * [Bloom Filter](data_structures/hashing/bloom_filter.py)\n    * [Double Hash](data_structures/hashing/double_hash.py)\n    * [Hash Map](data_structures/hashing/hash_map.py)\n    * [Hash Table](data_structures/hashing/hash_table.py)\n    * [Hash Table With Linked List](data_structures/hashing/hash_table_with_linked_list.py)\n    * Number Theory\n      * [Prime Numbers](data_structures/hashing/number_theory/prime_numbers.py)\n    * [Quadratic Probing](data_structures/hashing/quadratic_probing.py)\n    * Tests\n      * [Test Hash Map](data_structures/hashing/tests/test_hash_map.py)\n  * Heap\n    * [Binomial Heap](data_structures/heap/binomial_heap.py)\n    * [Heap](data_structures/heap/heap.py)\n    * [Heap Generic](data_structures/heap/heap_generic.py)\n    * [Max Heap](data_structures/heap/max_heap.py)\n    * [Min Heap](data_structures/heap/min_heap.py)\n    * [Randomized Heap](data_structures/heap/randomized_heap.py)\n    * [Skew Heap](data_structures/heap/skew_heap.py)\n  * Kd Tree\n    * [Build Kdtree](data_structures/kd_tree/build_kdtree.py)\n    * Example\n      * [Example Usage](data_structures/kd_tree/example/example_usage.py)\n      * [Hypercube Points](data_structures/kd_tree/example/hypercube_points.py)\n    * [Kd Node](data_structures/kd_tree/kd_node.py)\n    * [Nearest Neighbour Search](data_structures/kd_tree/nearest_neighbour_search.py)\n    * Tests\n      * [Test Kdtree](data_structures/kd_tree/tests/test_kdtree.py)\n  * Linked List\n    * [Circular Linked List](data_structures/linked_list/circular_linked_list.py)\n    * [Deque Doubly](data_structures/linked_list/deque_doubly.py)\n    * [Doubly Linked List](data_structures/linked_list/doubly_linked_list.py)\n    * [Doubly Linked List Two](data_structures/linked_list/doubly_linked_list_two.py)\n    * [Floyds Cycle Detection](data_structures/linked_list/floyds_cycle_detection.py)\n    * [From Sequence](data_structures/linked_list/from_sequence.py)\n    * [Has Loop](data_structures/linked_list/has_loop.py)\n    * [Is Palindrome](data_structures/linked_list/is_palindrome.py)\n    * [Merge Two Lists](data_structures/linked_list/merge_two_lists.py)\n    * [Middle Element Of Linked List](data_structures/linked_list/middle_element_of_linked_list.py)\n    * [Print Reverse](data_structures/linked_list/print_reverse.py)\n    * [Reverse K Group](data_structures/linked_list/reverse_k_group.py)\n    * [Rotate To The Right](data_structures/linked_list/rotate_to_the_right.py)\n    * [Singly Linked List](data_structures/linked_list/singly_linked_list.py)\n    * [Skip List](data_structures/linked_list/skip_list.py)\n    * [Swap Nodes](data_structures/linked_list/swap_nodes.py)\n  * Queues\n    * [Circular Queue](data_structures/queues/circular_queue.py)\n    * [Circular Queue Linked List](data_structures/queues/circular_queue_linked_list.py)\n    * [Double Ended Queue](data_structures/queues/double_ended_queue.py)\n    * [Linked Queue](data_structures/queues/linked_queue.py)\n    * [Priority Queue Using List](data_structures/queues/priority_queue_using_list.py)\n    * [Queue By List](data_structures/queues/queue_by_list.py)\n    * [Queue By Two Stacks](data_structures/queues/queue_by_two_stacks.py)\n    * [Queue On Pseudo Stack](data_structures/queues/queue_on_pseudo_stack.py)\n  * Stacks\n    * [Balanced Parentheses](data_structures/stacks/balanced_parentheses.py)\n    * [Dijkstras Two Stack Algorithm](data_structures/stacks/dijkstras_two_stack_algorithm.py)\n    * [Infix To Postfix Conversion](data_structures/stacks/infix_to_postfix_conversion.py)\n    * [Infix To Prefix Conversion](data_structures/stacks/infix_to_prefix_conversion.py)\n    * [Largest Rectangle Histogram](data_structures/stacks/largest_rectangle_histogram.py)\n    * [Lexicographical Numbers](data_structures/stacks/lexicographical_numbers.py)\n    * [Next Greater Element](data_structures/stacks/next_greater_element.py)\n    * [Postfix Evaluation](data_structures/stacks/postfix_evaluation.py)\n    * [Prefix Evaluation](data_structures/stacks/prefix_evaluation.py)\n    * [Stack](data_structures/stacks/stack.py)\n    * [Stack Using Two Queues](data_structures/stacks/stack_using_two_queues.py)\n    * [Stack With Doubly Linked List](data_structures/stacks/stack_with_doubly_linked_list.py)\n    * [Stack With Singly Linked List](data_structures/stacks/stack_with_singly_linked_list.py)\n    * [Stock Span Problem](data_structures/stacks/stock_span_problem.py)\n  * Suffix Tree\n    * Example\n      * [Example Usage](data_structures/suffix_tree/example/example_usage.py)\n    * [Suffix Tree](data_structures/suffix_tree/suffix_tree.py)\n    * [Suffix Tree Node](data_structures/suffix_tree/suffix_tree_node.py)\n    * Tests\n      * [Test Suffix Tree](data_structures/suffix_tree/tests/test_suffix_tree.py)\n  * Trie\n    * [Radix Tree](data_structures/trie/radix_tree.py)\n    * [Trie](data_structures/trie/trie.py)\n\n## Digital Image Processing\n  * [Change Brightness](digital_image_processing/change_brightness.py)\n  * [Change Contrast](digital_image_processing/change_contrast.py)\n  * [Convert To Negative](digital_image_processing/convert_to_negative.py)\n  * Dithering\n    * [Burkes](digital_image_processing/dithering/burkes.py)\n  * Edge Detection\n    * [Canny](digital_image_processing/edge_detection/canny.py)\n  * Filters\n    * [Bilateral Filter](digital_image_processing/filters/bilateral_filter.py)\n    * [Convolve](digital_image_processing/filters/convolve.py)\n    * [Gabor Filter](digital_image_processing/filters/gabor_filter.py)\n    * [Gaussian Filter](digital_image_processing/filters/gaussian_filter.py)\n    * [Laplacian Filter](digital_image_processing/filters/laplacian_filter.py)\n    * [Local Binary Pattern](digital_image_processing/filters/local_binary_pattern.py)\n    * [Median Filter](digital_image_processing/filters/median_filter.py)\n    * [Sobel Filter](digital_image_processing/filters/sobel_filter.py)\n  * Histogram Equalization\n    * [Histogram Stretch](digital_image_processing/histogram_equalization/histogram_stretch.py)\n  * [Index Calculation](digital_image_processing/index_calculation.py)\n  * Morphological Operations\n    * [Dilation Operation](digital_image_processing/morphological_operations/dilation_operation.py)\n    * [Erosion Operation](digital_image_processing/morphological_operations/erosion_operation.py)\n  * Resize\n    * [Resize](digital_image_processing/resize/resize.py)\n  * Rotation\n    * [Rotation](digital_image_processing/rotation/rotation.py)\n  * [Sepia](digital_image_processing/sepia.py)\n  * [Test Digital Image Processing](digital_image_processing/test_digital_image_processing.py)\n\n## Divide And Conquer\n  * [Closest Pair Of Points](divide_and_conquer/closest_pair_of_points.py)\n  * [Convex Hull](divide_and_conquer/convex_hull.py)\n  * [Heaps Algorithm](divide_and_conquer/heaps_algorithm.py)\n  * [Heaps Algorithm Iterative](divide_and_conquer/heaps_algorithm_iterative.py)\n  * [Inversions](divide_and_conquer/inversions.py)\n  * [Kth Order Statistic](divide_and_conquer/kth_order_statistic.py)\n  * [Max Difference Pair](divide_and_conquer/max_difference_pair.py)\n  * [Max Subarray](divide_and_conquer/max_subarray.py)\n  * [Mergesort](divide_and_conquer/mergesort.py)\n  * [Peak](divide_and_conquer/peak.py)\n  * [Power](divide_and_conquer/power.py)\n  * [Strassen Matrix Multiplication](divide_and_conquer/strassen_matrix_multiplication.py)\n\n## Docs\n  * [Conf](docs/conf.py)\n\n## Dynamic Programming\n  * [Abbreviation](dynamic_programming/abbreviation.py)\n  * [All Construct](dynamic_programming/all_construct.py)\n  * [Bitmask](dynamic_programming/bitmask.py)\n  * [Catalan Numbers](dynamic_programming/catalan_numbers.py)\n  * [Climbing Stairs](dynamic_programming/climbing_stairs.py)\n  * [Combination Sum Iv](dynamic_programming/combination_sum_iv.py)\n  * [Edit Distance](dynamic_programming/edit_distance.py)\n  * [Factorial](dynamic_programming/factorial.py)\n  * [Fast Fibonacci](dynamic_programming/fast_fibonacci.py)\n  * [Fibonacci](dynamic_programming/fibonacci.py)\n  * [Fizz Buzz](dynamic_programming/fizz_buzz.py)\n  * [Floyd Warshall](dynamic_programming/floyd_warshall.py)\n  * [Integer Partition](dynamic_programming/integer_partition.py)\n  * [Iterating Through Submasks](dynamic_programming/iterating_through_submasks.py)\n  * [K Means Clustering Tensorflow](dynamic_programming/k_means_clustering_tensorflow.py)\n  * [Knapsack](dynamic_programming/knapsack.py)\n  * [Largest Divisible Subset](dynamic_programming/largest_divisible_subset.py)\n  * [Longest Common Subsequence](dynamic_programming/longest_common_subsequence.py)\n  * [Longest Common Substring](dynamic_programming/longest_common_substring.py)\n  * [Longest Increasing Subsequence](dynamic_programming/longest_increasing_subsequence.py)\n  * [Longest Increasing Subsequence Iterative](dynamic_programming/longest_increasing_subsequence_iterative.py)\n  * [Longest Increasing Subsequence O Nlogn](dynamic_programming/longest_increasing_subsequence_o_nlogn.py)\n  * [Longest Palindromic Subsequence](dynamic_programming/longest_palindromic_subsequence.py)\n  * [Matrix Chain Multiplication](dynamic_programming/matrix_chain_multiplication.py)\n  * [Matrix Chain Order](dynamic_programming/matrix_chain_order.py)\n  * [Max Non Adjacent Sum](dynamic_programming/max_non_adjacent_sum.py)\n  * [Max Product Subarray](dynamic_programming/max_product_subarray.py)\n  * [Max Subarray Sum](dynamic_programming/max_subarray_sum.py)\n  * [Min Distance Up Bottom](dynamic_programming/min_distance_up_bottom.py)\n  * [Minimum Coin Change](dynamic_programming/minimum_coin_change.py)\n  * [Minimum Cost Path](dynamic_programming/minimum_cost_path.py)\n  * [Minimum Partition](dynamic_programming/minimum_partition.py)\n  * [Minimum Size Subarray Sum](dynamic_programming/minimum_size_subarray_sum.py)\n  * [Minimum Squares To Represent A Number](dynamic_programming/minimum_squares_to_represent_a_number.py)\n  * [Minimum Steps To One](dynamic_programming/minimum_steps_to_one.py)\n  * [Minimum Tickets Cost](dynamic_programming/minimum_tickets_cost.py)\n  * [Narcissistic Number](dynamic_programming/narcissistic_number.py)\n  * [Optimal Binary Search Tree](dynamic_programming/optimal_binary_search_tree.py)\n  * [Palindrome Partitioning](dynamic_programming/palindrome_partitioning.py)\n  * [Range Sum Query](dynamic_programming/range_sum_query.py)\n  * [Regex Match](dynamic_programming/regex_match.py)\n  * [Rod Cutting](dynamic_programming/rod_cutting.py)\n  * [Smith Waterman](dynamic_programming/smith_waterman.py)\n  * [Subset Generation](dynamic_programming/subset_generation.py)\n  * [Sum Of Subset](dynamic_programming/sum_of_subset.py)\n  * [Trapped Water](dynamic_programming/trapped_water.py)\n  * [Tribonacci](dynamic_programming/tribonacci.py)\n  * [Viterbi](dynamic_programming/viterbi.py)\n  * [Wildcard Matching](dynamic_programming/wildcard_matching.py)\n  * [Word Break](dynamic_programming/word_break.py)\n\n## Electronics\n  * [Apparent Power](electronics/apparent_power.py)\n  * [Builtin Voltage](electronics/builtin_voltage.py)\n  * [Capacitor Equivalence](electronics/capacitor_equivalence.py)\n  * [Carrier Concentration](electronics/carrier_concentration.py)\n  * [Charging Capacitor](electronics/charging_capacitor.py)\n  * [Charging Inductor](electronics/charging_inductor.py)\n  * [Circular Convolution](electronics/circular_convolution.py)\n  * [Coulombs Law](electronics/coulombs_law.py)\n  * [Electric Conductivity](electronics/electric_conductivity.py)\n  * [Electric Power](electronics/electric_power.py)\n  * [Electrical Impedance](electronics/electrical_impedance.py)\n  * [Ic 555 Timer](electronics/ic_555_timer.py)\n  * [Ind Reactance](electronics/ind_reactance.py)\n  * [Ohms Law](electronics/ohms_law.py)\n  * [Real And Reactive Power](electronics/real_and_reactive_power.py)\n  * [Resistor Color Code](electronics/resistor_color_code.py)\n  * [Resistor Equivalence](electronics/resistor_equivalence.py)\n  * [Resonant Frequency](electronics/resonant_frequency.py)\n  * [Wheatstone Bridge](electronics/wheatstone_bridge.py)\n\n## File Transfer\n  * [Receive File](file_transfer/receive_file.py)\n  * [Send File](file_transfer/send_file.py)\n  * Tests\n    * [Test Send File](file_transfer/tests/test_send_file.py)\n\n## Financial\n  * [Equated Monthly Installments](financial/equated_monthly_installments.py)\n  * [Exponential Moving Average](financial/exponential_moving_average.py)\n  * [Interest](financial/interest.py)\n  * [Present Value](financial/present_value.py)\n  * [Price Plus Tax](financial/price_plus_tax.py)\n  * [Simple Moving Average](financial/simple_moving_average.py)\n  * [Straight Line Depreciation](financial/straight_line_depreciation.py)\n  * [Time And Half Pay](financial/time_and_half_pay.py)\n\n## Fractals\n  * [Julia Sets](fractals/julia_sets.py)\n  * [Koch Snowflake](fractals/koch_snowflake.py)\n  * [Mandelbrot](fractals/mandelbrot.py)\n  * [Sierpinski Triangle](fractals/sierpinski_triangle.py)\n  * [Vicsek](fractals/vicsek.py)\n\n## Fuzzy Logic\n  * [Fuzzy Operations](fuzzy_logic/fuzzy_operations.py)\n\n## Genetic Algorithm\n  * [Basic String](genetic_algorithm/basic_string.py)\n\n## Geodesy\n  * [Haversine Distance](geodesy/haversine_distance.py)\n  * [Lamberts Ellipsoidal Distance](geodesy/lamberts_ellipsoidal_distance.py)\n\n## Geometry\n  * [Geometry](geometry/geometry.py)\n  * [Graham Scan](geometry/graham_scan.py)\n  * [Jarvis March](geometry/jarvis_march.py)\n  * Tests\n    * [Test Graham Scan](geometry/tests/test_graham_scan.py)\n    * [Test Jarvis March](geometry/tests/test_jarvis_march.py)\n\n## Graphics\n  * [Bezier Curve](graphics/bezier_curve.py)\n  * [Butterfly Pattern](graphics/butterfly_pattern.py)\n  * [Digital Differential Analyzer Line](graphics/digital_differential_analyzer_line.py)\n  * [Vector3 For 2D Rendering](graphics/vector3_for_2d_rendering.py)\n\n## Graphs\n  * [A Star](graphs/a_star.py)\n  * [Ant Colony Optimization Algorithms](graphs/ant_colony_optimization_algorithms.py)\n  * [Articulation Points](graphs/articulation_points.py)\n  * [Basic Graphs](graphs/basic_graphs.py)\n  * [Bellman Ford](graphs/bellman_ford.py)\n  * [Bi Directional Dijkstra](graphs/bi_directional_dijkstra.py)\n  * [Bidirectional A Star](graphs/bidirectional_a_star.py)\n  * [Bidirectional Breadth First Search](graphs/bidirectional_breadth_first_search.py)\n  * [Bidirectional Search](graphs/bidirectional_search.py)\n  * [Boruvka](graphs/boruvka.py)\n  * [Breadth First Search](graphs/breadth_first_search.py)\n  * [Breadth First Search 2](graphs/breadth_first_search_2.py)\n  * [Breadth First Search Shortest Path](graphs/breadth_first_search_shortest_path.py)\n  * [Breadth First Search Shortest Path 2](graphs/breadth_first_search_shortest_path_2.py)\n  * [Breadth First Search Zero One Shortest Path](graphs/breadth_first_search_zero_one_shortest_path.py)\n  * [Check Bipatrite](graphs/check_bipatrite.py)\n  * [Check Cycle](graphs/check_cycle.py)\n  * [Connected Components](graphs/connected_components.py)\n  * [Deep Clone Graph](graphs/deep_clone_graph.py)\n  * [Depth First Search](graphs/depth_first_search.py)\n  * [Depth First Search 2](graphs/depth_first_search_2.py)\n  * [Dijkstra](graphs/dijkstra.py)\n  * [Dijkstra 2](graphs/dijkstra_2.py)\n  * [Dijkstra Algorithm](graphs/dijkstra_algorithm.py)\n  * [Dijkstra Alternate](graphs/dijkstra_alternate.py)\n  * [Dijkstra Binary Grid](graphs/dijkstra_binary_grid.py)\n  * [Dinic](graphs/dinic.py)\n  * [Directed And Undirected Weighted Graph](graphs/directed_and_undirected_weighted_graph.py)\n  * [Edmonds Karp Multiple Source And Sink](graphs/edmonds_karp_multiple_source_and_sink.py)\n  * [Eulerian Path And Circuit For Undirected Graph](graphs/eulerian_path_and_circuit_for_undirected_graph.py)\n  * [Even Tree](graphs/even_tree.py)\n  * [Finding Bridges](graphs/finding_bridges.py)\n  * [Frequent Pattern Graph Miner](graphs/frequent_pattern_graph_miner.py)\n  * [G Topological Sort](graphs/g_topological_sort.py)\n  * [Gale Shapley Bigraph](graphs/gale_shapley_bigraph.py)\n  * [Graph Adjacency List](graphs/graph_adjacency_list.py)\n  * [Graph Adjacency Matrix](graphs/graph_adjacency_matrix.py)\n  * [Graph List](graphs/graph_list.py)\n  * [Graphs Floyd Warshall](graphs/graphs_floyd_warshall.py)\n  * [Greedy Best First](graphs/greedy_best_first.py)\n  * [Greedy Min Vertex Cover](graphs/greedy_min_vertex_cover.py)\n  * [Kahns Algorithm Long](graphs/kahns_algorithm_long.py)\n  * [Kahns Algorithm Topo](graphs/kahns_algorithm_topo.py)\n  * [Karger](graphs/karger.py)\n  * [Lanczos Eigenvectors](graphs/lanczos_eigenvectors.py)\n  * [Markov Chain](graphs/markov_chain.py)\n  * [Matching Min Vertex Cover](graphs/matching_min_vertex_cover.py)\n  * [Minimum Path Sum](graphs/minimum_path_sum.py)\n  * [Minimum Spanning Tree Boruvka](graphs/minimum_spanning_tree_boruvka.py)\n  * [Minimum Spanning Tree Kruskal](graphs/minimum_spanning_tree_kruskal.py)\n  * [Minimum Spanning Tree Kruskal2](graphs/minimum_spanning_tree_kruskal2.py)\n  * [Minimum Spanning Tree Prims](graphs/minimum_spanning_tree_prims.py)\n  * [Minimum Spanning Tree Prims2](graphs/minimum_spanning_tree_prims2.py)\n  * [Multi Heuristic Astar](graphs/multi_heuristic_astar.py)\n  * [Page Rank](graphs/page_rank.py)\n  * [Prim](graphs/prim.py)\n  * [Random Graph Generator](graphs/random_graph_generator.py)\n  * [Scc Kosaraju](graphs/scc_kosaraju.py)\n  * [Strongly Connected Components](graphs/strongly_connected_components.py)\n  * [Tarjans Scc](graphs/tarjans_scc.py)\n  * Tests\n    * [Test Min Spanning Tree Kruskal](graphs/tests/test_min_spanning_tree_kruskal.py)\n    * [Test Min Spanning Tree Prim](graphs/tests/test_min_spanning_tree_prim.py)\n\n## Greedy Methods\n  * [Best Time To Buy And Sell Stock](greedy_methods/best_time_to_buy_and_sell_stock.py)\n  * [Fractional Cover Problem](greedy_methods/fractional_cover_problem.py)\n  * [Fractional Knapsack](greedy_methods/fractional_knapsack.py)\n  * [Fractional Knapsack 2](greedy_methods/fractional_knapsack_2.py)\n  * [Gas Station](greedy_methods/gas_station.py)\n  * [Minimum Coin Change](greedy_methods/minimum_coin_change.py)\n  * [Minimum Waiting Time](greedy_methods/minimum_waiting_time.py)\n  * [Optimal Merge Pattern](greedy_methods/optimal_merge_pattern.py)\n  * [Smallest Range](greedy_methods/smallest_range.py)\n\n## Hashes\n  * [Adler32](hashes/adler32.py)\n  * [Chaos Machine](hashes/chaos_machine.py)\n  * [Djb2](hashes/djb2.py)\n  * [Elf](hashes/elf.py)\n  * [Enigma Machine](hashes/enigma_machine.py)\n  * [Fletcher16](hashes/fletcher16.py)\n  * [Hamming Code](hashes/hamming_code.py)\n  * [Luhn](hashes/luhn.py)\n  * [Md5](hashes/md5.py)\n  * [Sdbm](hashes/sdbm.py)\n  * [Sha1](hashes/sha1.py)\n  * [Sha256](hashes/sha256.py)\n\n## Knapsack\n  * [Greedy Knapsack](knapsack/greedy_knapsack.py)\n  * [Knapsack](knapsack/knapsack.py)\n  * [Recursive Approach Knapsack](knapsack/recursive_approach_knapsack.py)\n  * Tests\n    * [Test Greedy Knapsack](knapsack/tests/test_greedy_knapsack.py)\n    * [Test Knapsack](knapsack/tests/test_knapsack.py)\n\n## Linear Algebra\n  * [Gaussian Elimination](linear_algebra/gaussian_elimination.py)\n  * [Jacobi Iteration Method](linear_algebra/jacobi_iteration_method.py)\n  * [Lu Decomposition](linear_algebra/lu_decomposition.py)\n  * [Matrix Inversion](linear_algebra/matrix_inversion.py)\n  * Src\n    * [Conjugate Gradient](linear_algebra/src/conjugate_gradient.py)\n    * [Gaussian Elimination Pivoting](linear_algebra/src/gaussian_elimination_pivoting.py)\n    * [Lib](linear_algebra/src/lib.py)\n    * [Polynom For Points](linear_algebra/src/polynom_for_points.py)\n    * [Power Iteration](linear_algebra/src/power_iteration.py)\n    * [Rank Of Matrix](linear_algebra/src/rank_of_matrix.py)\n    * [Rayleigh Quotient](linear_algebra/src/rayleigh_quotient.py)\n    * [Schur Complement](linear_algebra/src/schur_complement.py)\n    * [Test Linear Algebra](linear_algebra/src/test_linear_algebra.py)\n    * [Transformations 2D](linear_algebra/src/transformations_2d.py)\n\n## Linear Programming\n  * [Simplex](linear_programming/simplex.py)\n\n## Machine Learning\n  * [Apriori Algorithm](machine_learning/apriori_algorithm.py)\n  * [Astar](machine_learning/astar.py)\n  * [Automatic Differentiation](machine_learning/automatic_differentiation.py)\n  * [Data Transformations](machine_learning/data_transformations.py)\n  * [Decision Tree](machine_learning/decision_tree.py)\n  * [Dimensionality Reduction](machine_learning/dimensionality_reduction.py)\n  * Forecasting\n    * [Run](machine_learning/forecasting/run.py)\n  * [Frequent Pattern Growth](machine_learning/frequent_pattern_growth.py)\n  * [Gradient Boosting Classifier](machine_learning/gradient_boosting_classifier.py)\n  * [Gradient Descent](machine_learning/gradient_descent.py)\n  * [K Means Clust](machine_learning/k_means_clust.py)\n  * [K Nearest Neighbours](machine_learning/k_nearest_neighbours.py)\n  * [Linear Discriminant Analysis](machine_learning/linear_discriminant_analysis.py)\n  * [Linear Regression](machine_learning/linear_regression.py)\n  * Local Weighted Learning\n    * [Local Weighted Learning](machine_learning/local_weighted_learning/local_weighted_learning.py)\n  * [Logistic Regression](machine_learning/logistic_regression.py)\n  * [Loss Functions](machine_learning/loss_functions.py)\n  * Lstm\n    * [Lstm Prediction](machine_learning/lstm/lstm_prediction.py)\n  * [Mfcc](machine_learning/mfcc.py)\n  * [Multilayer Perceptron Classifier](machine_learning/multilayer_perceptron_classifier.py)\n  * [Polynomial Regression](machine_learning/polynomial_regression.py)\n  * [Principle Component Analysis](machine_learning/principle_component_analysis.py)\n  * [Scoring Functions](machine_learning/scoring_functions.py)\n  * [Self Organizing Map](machine_learning/self_organizing_map.py)\n  * [Sequential Minimum Optimization](machine_learning/sequential_minimum_optimization.py)\n  * [Similarity Search](machine_learning/similarity_search.py)\n  * [Support Vector Machines](machine_learning/support_vector_machines.py)\n  * [T Stochastic Neighbour Embedding](machine_learning/t_stochastic_neighbour_embedding.py)\n  * [Word Frequency Functions](machine_learning/word_frequency_functions.py)\n  * [Xgboost Classifier](machine_learning/xgboost_classifier.py)\n  * [Xgboost Regressor](machine_learning/xgboost_regressor.py)\n\n## Maths\n  * [Abs](maths/abs.py)\n  * [Addition Without Arithmetic](maths/addition_without_arithmetic.py)\n  * [Aliquot Sum](maths/aliquot_sum.py)\n  * [Allocation Number](maths/allocation_number.py)\n  * [Arc Length](maths/arc_length.py)\n  * [Area](maths/area.py)\n  * [Area Under Curve](maths/area_under_curve.py)\n  * [Average Absolute Deviation](maths/average_absolute_deviation.py)\n  * [Average Mean](maths/average_mean.py)\n  * [Average Median](maths/average_median.py)\n  * [Average Mode](maths/average_mode.py)\n  * [Bailey Borwein Plouffe](maths/bailey_borwein_plouffe.py)\n  * [Base Neg2 Conversion](maths/base_neg2_conversion.py)\n  * [Basic Maths](maths/basic_maths.py)\n  * [Binary Exponentiation](maths/binary_exponentiation.py)\n  * [Binary Multiplication](maths/binary_multiplication.py)\n  * [Binomial Coefficient](maths/binomial_coefficient.py)\n  * [Binomial Distribution](maths/binomial_distribution.py)\n  * [Ceil](maths/ceil.py)\n  * [Chebyshev Distance](maths/chebyshev_distance.py)\n  * [Check Polygon](maths/check_polygon.py)\n  * [Chinese Remainder Theorem](maths/chinese_remainder_theorem.py)\n  * [Chudnovsky Algorithm](maths/chudnovsky_algorithm.py)\n  * [Collatz Sequence](maths/collatz_sequence.py)\n  * [Combinations](maths/combinations.py)\n  * [Continued Fraction](maths/continued_fraction.py)\n  * [Decimal Isolate](maths/decimal_isolate.py)\n  * [Decimal To Fraction](maths/decimal_to_fraction.py)\n  * [Dodecahedron](maths/dodecahedron.py)\n  * [Double Factorial](maths/double_factorial.py)\n  * [Dual Number Automatic Differentiation](maths/dual_number_automatic_differentiation.py)\n  * [Entropy](maths/entropy.py)\n  * [Euclidean Distance](maths/euclidean_distance.py)\n  * [Euler Method](maths/euler_method.py)\n  * [Euler Modified](maths/euler_modified.py)\n  * [Eulers Totient](maths/eulers_totient.py)\n  * [Extended Euclidean Algorithm](maths/extended_euclidean_algorithm.py)\n  * [Factorial](maths/factorial.py)\n  * [Factors](maths/factors.py)\n  * [Fast Inverse Sqrt](maths/fast_inverse_sqrt.py)\n  * [Fermat Little Theorem](maths/fermat_little_theorem.py)\n  * [Fibonacci](maths/fibonacci.py)\n  * [Find Max](maths/find_max.py)\n  * [Find Min](maths/find_min.py)\n  * [Floor](maths/floor.py)\n  * [Gamma](maths/gamma.py)\n  * [Gaussian](maths/gaussian.py)\n  * [Gcd Of N Numbers](maths/gcd_of_n_numbers.py)\n  * [Geometric Mean](maths/geometric_mean.py)\n  * [Germain Primes](maths/germain_primes.py)\n  * [Greatest Common Divisor](maths/greatest_common_divisor.py)\n  * [Hardy Ramanujanalgo](maths/hardy_ramanujanalgo.py)\n  * [Integer Square Root](maths/integer_square_root.py)\n  * [Interquartile Range](maths/interquartile_range.py)\n  * [Is Int Palindrome](maths/is_int_palindrome.py)\n  * [Is Ip V4 Address Valid](maths/is_ip_v4_address_valid.py)\n  * [Is Square Free](maths/is_square_free.py)\n  * [Jaccard Similarity](maths/jaccard_similarity.py)\n  * [Joint Probability Distribution](maths/joint_probability_distribution.py)\n  * [Josephus Problem](maths/josephus_problem.py)\n  * [Juggler Sequence](maths/juggler_sequence.py)\n  * [Karatsuba](maths/karatsuba.py)\n  * [Kth Lexicographic Permutation](maths/kth_lexicographic_permutation.py)\n  * [Largest Of Very Large Numbers](maths/largest_of_very_large_numbers.py)\n  * [Least Common Multiple](maths/least_common_multiple.py)\n  * [Line Length](maths/line_length.py)\n  * [Liouville Lambda](maths/liouville_lambda.py)\n  * [Lucas Lehmer Primality Test](maths/lucas_lehmer_primality_test.py)\n  * [Lucas Series](maths/lucas_series.py)\n  * [Maclaurin Series](maths/maclaurin_series.py)\n  * [Manhattan Distance](maths/manhattan_distance.py)\n  * [Matrix Exponentiation](maths/matrix_exponentiation.py)\n  * [Max Sum Sliding Window](maths/max_sum_sliding_window.py)\n  * [Minkowski Distance](maths/minkowski_distance.py)\n  * [Mobius Function](maths/mobius_function.py)\n  * [Modular Division](maths/modular_division.py)\n  * [Modular Exponential](maths/modular_exponential.py)\n  * [Monte Carlo](maths/monte_carlo.py)\n  * [Monte Carlo Dice](maths/monte_carlo_dice.py)\n  * [Number Of Digits](maths/number_of_digits.py)\n  * Numerical Analysis\n    * [Adams Bashforth](maths/numerical_analysis/adams_bashforth.py)\n    * [Bisection](maths/numerical_analysis/bisection.py)\n    * [Bisection 2](maths/numerical_analysis/bisection_2.py)\n    * [Integration By Simpson Approx](maths/numerical_analysis/integration_by_simpson_approx.py)\n    * [Intersection](maths/numerical_analysis/intersection.py)\n    * [Nevilles Method](maths/numerical_analysis/nevilles_method.py)\n    * [Newton Forward Interpolation](maths/numerical_analysis/newton_forward_interpolation.py)\n    * [Newton Raphson](maths/numerical_analysis/newton_raphson.py)\n    * [Numerical Integration](maths/numerical_analysis/numerical_integration.py)\n    * [Proper Fractions](maths/numerical_analysis/proper_fractions.py)\n    * [Runge Kutta](maths/numerical_analysis/runge_kutta.py)\n    * [Runge Kutta Fehlberg 45](maths/numerical_analysis/runge_kutta_fehlberg_45.py)\n    * [Runge Kutta Gills](maths/numerical_analysis/runge_kutta_gills.py)\n    * [Secant Method](maths/numerical_analysis/secant_method.py)\n    * [Simpson Rule](maths/numerical_analysis/simpson_rule.py)\n    * [Square Root](maths/numerical_analysis/square_root.py)\n    * [Weierstrass Method](maths/numerical_analysis/weierstrass_method.py)\n  * [Odd Sieve](maths/odd_sieve.py)\n  * [Perfect Cube](maths/perfect_cube.py)\n  * [Perfect Number](maths/perfect_number.py)\n  * [Perfect Square](maths/perfect_square.py)\n  * [Persistence](maths/persistence.py)\n  * [Pi Generator](maths/pi_generator.py)\n  * [Pi Monte Carlo Estimation](maths/pi_monte_carlo_estimation.py)\n  * [Points Are Collinear 3D](maths/points_are_collinear_3d.py)\n  * [Pollard Rho](maths/pollard_rho.py)\n  * [Polynomial Evaluation](maths/polynomial_evaluation.py)\n  * Polynomials\n    * [Single Indeterminate Operations](maths/polynomials/single_indeterminate_operations.py)\n  * [Power Using Recursion](maths/power_using_recursion.py)\n  * [Prime Check](maths/prime_check.py)\n  * [Prime Factors](maths/prime_factors.py)\n  * [Prime Numbers](maths/prime_numbers.py)\n  * [Prime Sieve Eratosthenes](maths/prime_sieve_eratosthenes.py)\n  * [Primelib](maths/primelib.py)\n  * [Print Multiplication Table](maths/print_multiplication_table.py)\n  * [Pythagoras](maths/pythagoras.py)\n  * [Qr Decomposition](maths/qr_decomposition.py)\n  * [Quadratic Equations Complex Numbers](maths/quadratic_equations_complex_numbers.py)\n  * [Radians](maths/radians.py)\n  * [Radix2 Fft](maths/radix2_fft.py)\n  * [Remove Digit](maths/remove_digit.py)\n  * [Segmented Sieve](maths/segmented_sieve.py)\n  * Series\n    * [Arithmetic](maths/series/arithmetic.py)\n    * [Geometric](maths/series/geometric.py)\n    * [Geometric Series](maths/series/geometric_series.py)\n    * [Harmonic](maths/series/harmonic.py)\n    * [Harmonic Series](maths/series/harmonic_series.py)\n    * [Hexagonal Numbers](maths/series/hexagonal_numbers.py)\n    * [P Series](maths/series/p_series.py)\n  * [Sieve Of Eratosthenes](maths/sieve_of_eratosthenes.py)\n  * [Sigmoid](maths/sigmoid.py)\n  * [Signum](maths/signum.py)\n  * [Simultaneous Linear Equation Solver](maths/simultaneous_linear_equation_solver.py)\n  * [Sin](maths/sin.py)\n  * [Sock Merchant](maths/sock_merchant.py)\n  * [Softmax](maths/softmax.py)\n  * [Solovay Strassen Primality Test](maths/solovay_strassen_primality_test.py)\n  * [Spearman Rank Correlation Coefficient](maths/spearman_rank_correlation_coefficient.py)\n  * Special Numbers\n    * [Armstrong Numbers](maths/special_numbers/armstrong_numbers.py)\n    * [Automorphic Number](maths/special_numbers/automorphic_number.py)\n    * [Bell Numbers](maths/special_numbers/bell_numbers.py)\n    * [Carmichael Number](maths/special_numbers/carmichael_number.py)\n    * [Catalan Number](maths/special_numbers/catalan_number.py)\n    * [Hamming Numbers](maths/special_numbers/hamming_numbers.py)\n    * [Happy Number](maths/special_numbers/happy_number.py)\n    * [Harshad Numbers](maths/special_numbers/harshad_numbers.py)\n    * [Hexagonal Number](maths/special_numbers/hexagonal_number.py)\n    * [Krishnamurthy Number](maths/special_numbers/krishnamurthy_number.py)\n    * [Perfect Number](maths/special_numbers/perfect_number.py)\n    * [Polygonal Numbers](maths/special_numbers/polygonal_numbers.py)\n    * [Pronic Number](maths/special_numbers/pronic_number.py)\n    * [Proth Number](maths/special_numbers/proth_number.py)\n    * [Triangular Numbers](maths/special_numbers/triangular_numbers.py)\n    * [Ugly Numbers](maths/special_numbers/ugly_numbers.py)\n    * [Weird Number](maths/special_numbers/weird_number.py)\n  * [Sum Of Arithmetic Series](maths/sum_of_arithmetic_series.py)\n  * [Sum Of Digits](maths/sum_of_digits.py)\n  * [Sum Of Geometric Progression](maths/sum_of_geometric_progression.py)\n  * [Sum Of Harmonic Series](maths/sum_of_harmonic_series.py)\n  * [Sumset](maths/sumset.py)\n  * [Sylvester Sequence](maths/sylvester_sequence.py)\n  * [Tanh](maths/tanh.py)\n  * [Test Factorial](maths/test_factorial.py)\n  * [Test Prime Check](maths/test_prime_check.py)\n  * [Three Sum](maths/three_sum.py)\n  * [Trapezoidal Rule](maths/trapezoidal_rule.py)\n  * [Triplet Sum](maths/triplet_sum.py)\n  * [Twin Prime](maths/twin_prime.py)\n  * [Two Pointer](maths/two_pointer.py)\n  * [Two Sum](maths/two_sum.py)\n  * [Volume](maths/volume.py)\n  * [Zellers Congruence](maths/zellers_congruence.py)\n\n## Matrix\n  * [Binary Search Matrix](matrix/binary_search_matrix.py)\n  * [Count Islands In Matrix](matrix/count_islands_in_matrix.py)\n  * [Count Negative Numbers In Sorted Matrix](matrix/count_negative_numbers_in_sorted_matrix.py)\n  * [Count Paths](matrix/count_paths.py)\n  * [Cramers Rule 2X2](matrix/cramers_rule_2x2.py)\n  * [Inverse Of Matrix](matrix/inverse_of_matrix.py)\n  * [Largest Square Area In Matrix](matrix/largest_square_area_in_matrix.py)\n  * [Matrix Based Game](matrix/matrix_based_game.py)\n  * [Matrix Class](matrix/matrix_class.py)\n  * [Matrix Equalization](matrix/matrix_equalization.py)\n  * [Matrix Multiplication Recursion](matrix/matrix_multiplication_recursion.py)\n  * [Matrix Operation](matrix/matrix_operation.py)\n  * [Max Area Of Island](matrix/max_area_of_island.py)\n  * [Median Matrix](matrix/median_matrix.py)\n  * [Nth Fibonacci Using Matrix Exponentiation](matrix/nth_fibonacci_using_matrix_exponentiation.py)\n  * [Pascal Triangle](matrix/pascal_triangle.py)\n  * [Rotate Matrix](matrix/rotate_matrix.py)\n  * [Searching In Sorted Matrix](matrix/searching_in_sorted_matrix.py)\n  * [Sherman Morrison](matrix/sherman_morrison.py)\n  * [Spiral Print](matrix/spiral_print.py)\n  * Tests\n    * [Test Matrix Operation](matrix/tests/test_matrix_operation.py)\n  * [Validate Sudoku Board](matrix/validate_sudoku_board.py)\n\n## Networking Flow\n  * [Ford Fulkerson](networking_flow/ford_fulkerson.py)\n  * [Minimum Cut](networking_flow/minimum_cut.py)\n\n## Neural Network\n  * Activation Functions\n    * [Binary Step](neural_network/activation_functions/binary_step.py)\n    * [Exponential Linear Unit](neural_network/activation_functions/exponential_linear_unit.py)\n    * [Gaussian Error Linear Unit](neural_network/activation_functions/gaussian_error_linear_unit.py)\n    * [Leaky Rectified Linear Unit](neural_network/activation_functions/leaky_rectified_linear_unit.py)\n    * [Mish](neural_network/activation_functions/mish.py)\n    * [Rectified Linear Unit](neural_network/activation_functions/rectified_linear_unit.py)\n    * [Scaled Exponential Linear Unit](neural_network/activation_functions/scaled_exponential_linear_unit.py)\n    * [Soboleva Modified Hyperbolic Tangent](neural_network/activation_functions/soboleva_modified_hyperbolic_tangent.py)\n    * [Softplus](neural_network/activation_functions/softplus.py)\n    * [Squareplus](neural_network/activation_functions/squareplus.py)\n    * [Swish](neural_network/activation_functions/swish.py)\n  * [Back Propagation Neural Network](neural_network/back_propagation_neural_network.py)\n  * [Convolution Neural Network](neural_network/convolution_neural_network.py)\n  * [Input Data](neural_network/input_data.py)\n  * [Simple Neural Network](neural_network/simple_neural_network.py)\n  * [Two Hidden Layers Neural Network](neural_network/two_hidden_layers_neural_network.py)\n\n## Other\n  * [Activity Selection](other/activity_selection.py)\n  * [Alternative List Arrange](other/alternative_list_arrange.py)\n  * [Bankers Algorithm](other/bankers_algorithm.py)\n  * [Davis Putnam Logemann Loveland](other/davis_putnam_logemann_loveland.py)\n  * [Doomsday](other/doomsday.py)\n  * [Fischer Yates Shuffle](other/fischer_yates_shuffle.py)\n  * [Gauss Easter](other/gauss_easter.py)\n  * [Graham Scan](other/graham_scan.py)\n  * [Greedy](other/greedy.py)\n  * [Guess The Number Search](other/guess_the_number_search.py)\n  * [H Index](other/h_index.py)\n  * [Least Recently Used](other/least_recently_used.py)\n  * [Lfu Cache](other/lfu_cache.py)\n  * [Linear Congruential Generator](other/linear_congruential_generator.py)\n  * [Lru Cache](other/lru_cache.py)\n  * [Magicdiamondpattern](other/magicdiamondpattern.py)\n  * [Majority Vote Algorithm](other/majority_vote_algorithm.py)\n  * [Maximum Subsequence](other/maximum_subsequence.py)\n  * [Nested Brackets](other/nested_brackets.py)\n  * [Number Container System](other/number_container_system.py)\n  * [Password](other/password.py)\n  * [Quine](other/quine.py)\n  * [Scoring Algorithm](other/scoring_algorithm.py)\n  * [Sdes](other/sdes.py)\n  * [Sliding Window Maximum](other/sliding_window_maximum.py)\n  * [Tower Of Hanoi](other/tower_of_hanoi.py)\n  * [Word Search](other/word_search.py)\n\n## Physics\n  * [Altitude Pressure](physics/altitude_pressure.py)\n  * [Archimedes Principle Of Buoyant Force](physics/archimedes_principle_of_buoyant_force.py)\n  * [Basic Orbital Capture](physics/basic_orbital_capture.py)\n  * [Casimir Effect](physics/casimir_effect.py)\n  * [Center Of Mass](physics/center_of_mass.py)\n  * [Centripetal Force](physics/centripetal_force.py)\n  * [Coulombs Law](physics/coulombs_law.py)\n  * [Doppler Frequency](physics/doppler_frequency.py)\n  * [Escape Velocity](physics/escape_velocity.py)\n  * [Grahams Law](physics/grahams_law.py)\n  * [Horizontal Projectile Motion](physics/horizontal_projectile_motion.py)\n  * [Hubble Parameter](physics/hubble_parameter.py)\n  * [Ideal Gas Law](physics/ideal_gas_law.py)\n  * [In Static Equilibrium](physics/in_static_equilibrium.py)\n  * [Kinetic Energy](physics/kinetic_energy.py)\n  * [Lens Formulae](physics/lens_formulae.py)\n  * [Lorentz Transformation Four Vector](physics/lorentz_transformation_four_vector.py)\n  * [Malus Law](physics/malus_law.py)\n  * [Mass Energy Equivalence](physics/mass_energy_equivalence.py)\n  * [Mirror Formulae](physics/mirror_formulae.py)\n  * [N Body Simulation](physics/n_body_simulation.py)\n  * [Newtons Law Of Gravitation](physics/newtons_law_of_gravitation.py)\n  * [Newtons Second Law Of Motion](physics/newtons_second_law_of_motion.py)\n  * [Orbital Transfer Work](physics/orbital_transfer_work.py)\n  * [Period Of Pendulum](physics/period_of_pendulum.py)\n  * [Photoelectric Effect](physics/photoelectric_effect.py)\n  * [Potential Energy](physics/potential_energy.py)\n  * [Rainfall Intensity](physics/rainfall_intensity.py)\n  * [Reynolds Number](physics/reynolds_number.py)\n  * [Rms Speed Of Molecule](physics/rms_speed_of_molecule.py)\n  * [Shear Stress](physics/shear_stress.py)\n  * [Speed Of Sound](physics/speed_of_sound.py)\n  * [Speeds Of Gas Molecules](physics/speeds_of_gas_molecules.py)\n  * [Terminal Velocity](physics/terminal_velocity.py)\n\n## Project Euler\n  * Problem 001\n    * [Sol1](project_euler/problem_001/sol1.py)\n    * [Sol2](project_euler/problem_001/sol2.py)\n    * [Sol3](project_euler/problem_001/sol3.py)\n    * [Sol4](project_euler/problem_001/sol4.py)\n    * [Sol5](project_euler/problem_001/sol5.py)\n    * [Sol6](project_euler/problem_001/sol6.py)\n    * [Sol7](project_euler/problem_001/sol7.py)\n  * Problem 002\n    * [Sol1](project_euler/problem_002/sol1.py)\n    * [Sol2](project_euler/problem_002/sol2.py)\n    * [Sol3](project_euler/problem_002/sol3.py)\n    * [Sol4](project_euler/problem_002/sol4.py)\n    * [Sol5](project_euler/problem_002/sol5.py)\n  * Problem 003\n    * [Sol1](project_euler/problem_003/sol1.py)\n    * [Sol2](project_euler/problem_003/sol2.py)\n    * [Sol3](project_euler/problem_003/sol3.py)\n  * Problem 004\n    * [Sol1](project_euler/problem_004/sol1.py)\n    * [Sol2](project_euler/problem_004/sol2.py)\n  * Problem 005\n    * [Sol1](project_euler/problem_005/sol1.py)\n    * [Sol2](project_euler/problem_005/sol2.py)\n  * Problem 006\n    * [Sol1](project_euler/problem_006/sol1.py)\n    * [Sol2](project_euler/problem_006/sol2.py)\n    * [Sol3](project_euler/problem_006/sol3.py)\n    * [Sol4](project_euler/problem_006/sol4.py)\n  * Problem 007\n    * [Sol1](project_euler/problem_007/sol1.py)\n    * [Sol2](project_euler/problem_007/sol2.py)\n    * [Sol3](project_euler/problem_007/sol3.py)\n  * Problem 008\n    * [Sol1](project_euler/problem_008/sol1.py)\n    * [Sol2](project_euler/problem_008/sol2.py)\n    * [Sol3](project_euler/problem_008/sol3.py)\n  * Problem 009\n    * [Sol1](project_euler/problem_009/sol1.py)\n    * [Sol2](project_euler/problem_009/sol2.py)\n    * [Sol3](project_euler/problem_009/sol3.py)\n    * [Sol4](project_euler/problem_009/sol4.py)\n  * Problem 010\n    * [Sol1](project_euler/problem_010/sol1.py)\n    * [Sol2](project_euler/problem_010/sol2.py)\n    * [Sol3](project_euler/problem_010/sol3.py)\n  * Problem 011\n    * [Sol1](project_euler/problem_011/sol1.py)\n    * [Sol2](project_euler/problem_011/sol2.py)\n  * Problem 012\n    * [Sol1](project_euler/problem_012/sol1.py)\n    * [Sol2](project_euler/problem_012/sol2.py)\n  * Problem 013\n    * [Sol1](project_euler/problem_013/sol1.py)\n  * Problem 014\n    * [Sol1](project_euler/problem_014/sol1.py)\n    * [Sol2](project_euler/problem_014/sol2.py)\n  * Problem 015\n    * [Sol1](project_euler/problem_015/sol1.py)\n    * [Sol2](project_euler/problem_015/sol2.py)\n  * Problem 016\n    * [Sol1](project_euler/problem_016/sol1.py)\n    * [Sol2](project_euler/problem_016/sol2.py)\n  * Problem 017\n    * [Sol1](project_euler/problem_017/sol1.py)\n  * Problem 018\n    * [Solution](project_euler/problem_018/solution.py)\n  * Problem 019\n    * [Sol1](project_euler/problem_019/sol1.py)\n  * Problem 020\n    * [Sol1](project_euler/problem_020/sol1.py)\n    * [Sol2](project_euler/problem_020/sol2.py)\n    * [Sol3](project_euler/problem_020/sol3.py)\n    * [Sol4](project_euler/problem_020/sol4.py)\n  * Problem 021\n    * [Sol1](project_euler/problem_021/sol1.py)\n  * Problem 022\n    * [Sol1](project_euler/problem_022/sol1.py)\n    * [Sol2](project_euler/problem_022/sol2.py)\n  * Problem 023\n    * [Sol1](project_euler/problem_023/sol1.py)\n  * Problem 024\n    * [Sol1](project_euler/problem_024/sol1.py)\n  * Problem 025\n    * [Sol1](project_euler/problem_025/sol1.py)\n    * [Sol2](project_euler/problem_025/sol2.py)\n    * [Sol3](project_euler/problem_025/sol3.py)\n  * Problem 026\n    * [Sol1](project_euler/problem_026/sol1.py)\n  * Problem 027\n    * [Sol1](project_euler/problem_027/sol1.py)\n  * Problem 028\n    * [Sol1](project_euler/problem_028/sol1.py)\n  * Problem 029\n    * [Sol1](project_euler/problem_029/sol1.py)\n  * Problem 030\n    * [Sol1](project_euler/problem_030/sol1.py)\n  * Problem 031\n    * [Sol1](project_euler/problem_031/sol1.py)\n    * [Sol2](project_euler/problem_031/sol2.py)\n  * Problem 032\n    * [Sol32](project_euler/problem_032/sol32.py)\n  * Problem 033\n    * [Sol1](project_euler/problem_033/sol1.py)\n  * Problem 034\n    * [Sol1](project_euler/problem_034/sol1.py)\n  * Problem 035\n    * [Sol1](project_euler/problem_035/sol1.py)\n  * Problem 036\n    * [Sol1](project_euler/problem_036/sol1.py)\n  * Problem 037\n    * [Sol1](project_euler/problem_037/sol1.py)\n  * Problem 038\n    * [Sol1](project_euler/problem_038/sol1.py)\n  * Problem 039\n    * [Sol1](project_euler/problem_039/sol1.py)\n  * Problem 040\n    * [Sol1](project_euler/problem_040/sol1.py)\n  * Problem 041\n    * [Sol1](project_euler/problem_041/sol1.py)\n  * Problem 042\n    * [Solution42](project_euler/problem_042/solution42.py)\n  * Problem 043\n    * [Sol1](project_euler/problem_043/sol1.py)\n  * Problem 044\n    * [Sol1](project_euler/problem_044/sol1.py)\n  * Problem 045\n    * [Sol1](project_euler/problem_045/sol1.py)\n  * Problem 046\n    * [Sol1](project_euler/problem_046/sol1.py)\n  * Problem 047\n    * [Sol1](project_euler/problem_047/sol1.py)\n  * Problem 048\n    * [Sol1](project_euler/problem_048/sol1.py)\n  * Problem 049\n    * [Sol1](project_euler/problem_049/sol1.py)\n  * Problem 050\n    * [Sol1](project_euler/problem_050/sol1.py)\n  * Problem 051\n    * [Sol1](project_euler/problem_051/sol1.py)\n  * Problem 052\n    * [Sol1](project_euler/problem_052/sol1.py)\n  * Problem 053\n    * [Sol1](project_euler/problem_053/sol1.py)\n  * Problem 054\n    * [Sol1](project_euler/problem_054/sol1.py)\n    * [Test Poker Hand](project_euler/problem_054/test_poker_hand.py)\n  * Problem 055\n    * [Sol1](project_euler/problem_055/sol1.py)\n  * Problem 056\n    * [Sol1](project_euler/problem_056/sol1.py)\n  * Problem 057\n    * [Sol1](project_euler/problem_057/sol1.py)\n  * Problem 058\n    * [Sol1](project_euler/problem_058/sol1.py)\n  * Problem 059\n    * [Sol1](project_euler/problem_059/sol1.py)\n  * Problem 062\n    * [Sol1](project_euler/problem_062/sol1.py)\n  * Problem 063\n    * [Sol1](project_euler/problem_063/sol1.py)\n  * Problem 064\n    * [Sol1](project_euler/problem_064/sol1.py)\n  * Problem 065\n    * [Sol1](project_euler/problem_065/sol1.py)\n  * Problem 067\n    * [Sol1](project_euler/problem_067/sol1.py)\n    * [Sol2](project_euler/problem_067/sol2.py)\n  * Problem 068\n    * [Sol1](project_euler/problem_068/sol1.py)\n  * Problem 069\n    * [Sol1](project_euler/problem_069/sol1.py)\n  * Problem 070\n    * [Sol1](project_euler/problem_070/sol1.py)\n  * Problem 071\n    * [Sol1](project_euler/problem_071/sol1.py)\n  * Problem 072\n    * [Sol1](project_euler/problem_072/sol1.py)\n    * [Sol2](project_euler/problem_072/sol2.py)\n  * Problem 073\n    * [Sol1](project_euler/problem_073/sol1.py)\n  * Problem 074\n    * [Sol1](project_euler/problem_074/sol1.py)\n    * [Sol2](project_euler/problem_074/sol2.py)\n  * Problem 075\n    * [Sol1](project_euler/problem_075/sol1.py)\n  * Problem 076\n    * [Sol1](project_euler/problem_076/sol1.py)\n  * Problem 077\n    * [Sol1](project_euler/problem_077/sol1.py)\n  * Problem 078\n    * [Sol1](project_euler/problem_078/sol1.py)\n  * Problem 079\n    * [Sol1](project_euler/problem_079/sol1.py)\n  * Problem 080\n    * [Sol1](project_euler/problem_080/sol1.py)\n  * Problem 081\n    * [Sol1](project_euler/problem_081/sol1.py)\n  * Problem 082\n    * [Sol1](project_euler/problem_082/sol1.py)\n  * Problem 085\n    * [Sol1](project_euler/problem_085/sol1.py)\n  * Problem 086\n    * [Sol1](project_euler/problem_086/sol1.py)\n  * Problem 087\n    * [Sol1](project_euler/problem_087/sol1.py)\n  * Problem 089\n    * [Sol1](project_euler/problem_089/sol1.py)\n  * Problem 091\n    * [Sol1](project_euler/problem_091/sol1.py)\n  * Problem 092\n    * [Sol1](project_euler/problem_092/sol1.py)\n  * Problem 094\n    * [Sol1](project_euler/problem_094/sol1.py)\n  * Problem 095\n    * [Sol1](project_euler/problem_095/sol1.py)\n  * Problem 097\n    * [Sol1](project_euler/problem_097/sol1.py)\n  * Problem 099\n    * [Sol1](project_euler/problem_099/sol1.py)\n  * Problem 100\n    * [Sol1](project_euler/problem_100/sol1.py)\n  * Problem 101\n    * [Sol1](project_euler/problem_101/sol1.py)\n  * Problem 102\n    * [Sol1](project_euler/problem_102/sol1.py)\n  * Problem 104\n    * [Sol1](project_euler/problem_104/sol1.py)\n  * Problem 107\n    * [Sol1](project_euler/problem_107/sol1.py)\n  * Problem 109\n    * [Sol1](project_euler/problem_109/sol1.py)\n  * Problem 112\n    * [Sol1](project_euler/problem_112/sol1.py)\n  * Problem 113\n    * [Sol1](project_euler/problem_113/sol1.py)\n  * Problem 114\n    * [Sol1](project_euler/problem_114/sol1.py)\n  * Problem 115\n    * [Sol1](project_euler/problem_115/sol1.py)\n  * Problem 116\n    * [Sol1](project_euler/problem_116/sol1.py)\n  * Problem 117\n    * [Sol1](project_euler/problem_117/sol1.py)\n  * Problem 119\n    * [Sol1](project_euler/problem_119/sol1.py)\n  * Problem 120\n    * [Sol1](project_euler/problem_120/sol1.py)\n  * Problem 121\n    * [Sol1](project_euler/problem_121/sol1.py)\n  * Problem 122\n    * [Sol1](project_euler/problem_122/sol1.py)\n  * Problem 123\n    * [Sol1](project_euler/problem_123/sol1.py)\n  * Problem 125\n    * [Sol1](project_euler/problem_125/sol1.py)\n  * Problem 129\n    * [Sol1](project_euler/problem_129/sol1.py)\n  * Problem 131\n    * [Sol1](project_euler/problem_131/sol1.py)\n  * Problem 135\n    * [Sol1](project_euler/problem_135/sol1.py)\n  * Problem 136\n    * [Sol1](project_euler/problem_136/sol1.py)\n  * Problem 144\n    * [Sol1](project_euler/problem_144/sol1.py)\n  * Problem 145\n    * [Sol1](project_euler/problem_145/sol1.py)\n  * Problem 164\n    * [Sol1](project_euler/problem_164/sol1.py)\n  * Problem 173\n    * [Sol1](project_euler/problem_173/sol1.py)\n  * Problem 174\n    * [Sol1](project_euler/problem_174/sol1.py)\n  * Problem 180\n    * [Sol1](project_euler/problem_180/sol1.py)\n  * Problem 187\n    * [Sol1](project_euler/problem_187/sol1.py)\n  * Problem 188\n    * [Sol1](project_euler/problem_188/sol1.py)\n  * Problem 190\n    * [Sol1](project_euler/problem_190/sol1.py)\n  * Problem 191\n    * [Sol1](project_euler/problem_191/sol1.py)\n  * Problem 203\n    * [Sol1](project_euler/problem_203/sol1.py)\n  * Problem 205\n    * [Sol1](project_euler/problem_205/sol1.py)\n  * Problem 206\n    * [Sol1](project_euler/problem_206/sol1.py)\n  * Problem 207\n    * [Sol1](project_euler/problem_207/sol1.py)\n  * Problem 234\n    * [Sol1](project_euler/problem_234/sol1.py)\n  * Problem 301\n    * [Sol1](project_euler/problem_301/sol1.py)\n  * Problem 345\n    * [Sol1](project_euler/problem_345/sol1.py)\n  * Problem 493\n    * [Sol1](project_euler/problem_493/sol1.py)\n  * Problem 551\n    * [Sol1](project_euler/problem_551/sol1.py)\n  * Problem 587\n    * [Sol1](project_euler/problem_587/sol1.py)\n  * Problem 686\n    * [Sol1](project_euler/problem_686/sol1.py)\n  * Problem 800\n    * [Sol1](project_euler/problem_800/sol1.py)\n\n## Quantum\n  * [Q Fourier Transform](quantum/q_fourier_transform.py)\n\n## Scheduling\n  * [First Come First Served](scheduling/first_come_first_served.py)\n  * [Highest Response Ratio Next](scheduling/highest_response_ratio_next.py)\n  * [Job Sequence With Deadline](scheduling/job_sequence_with_deadline.py)\n  * [Job Sequencing With Deadline](scheduling/job_sequencing_with_deadline.py)\n  * [Multi Level Feedback Queue](scheduling/multi_level_feedback_queue.py)\n  * [Non Preemptive Shortest Job First](scheduling/non_preemptive_shortest_job_first.py)\n  * [Round Robin](scheduling/round_robin.py)\n  * [Shortest Job First](scheduling/shortest_job_first.py)\n\n## Searches\n  * [Binary Search](searches/binary_search.py)\n  * [Binary Tree Traversal](searches/binary_tree_traversal.py)\n  * [Double Linear Search](searches/double_linear_search.py)\n  * [Double Linear Search Recursion](searches/double_linear_search_recursion.py)\n  * [Exponential Search](searches/exponential_search.py)\n  * [Fibonacci Search](searches/fibonacci_search.py)\n  * [Hill Climbing](searches/hill_climbing.py)\n  * [Interpolation Search](searches/interpolation_search.py)\n  * [Jump Search](searches/jump_search.py)\n  * [Linear Search](searches/linear_search.py)\n  * [Median Of Medians](searches/median_of_medians.py)\n  * [Quick Select](searches/quick_select.py)\n  * [Sentinel Linear Search](searches/sentinel_linear_search.py)\n  * [Simple Binary Search](searches/simple_binary_search.py)\n  * [Simulated Annealing](searches/simulated_annealing.py)\n  * [Tabu Search](searches/tabu_search.py)\n  * [Ternary Search](searches/ternary_search.py)\n\n## Sorts\n  * [Bead Sort](sorts/bead_sort.py)\n  * [Binary Insertion Sort](sorts/binary_insertion_sort.py)\n  * [Bitonic Sort](sorts/bitonic_sort.py)\n  * [Bogo Sort](sorts/bogo_sort.py)\n  * [Bubble Sort](sorts/bubble_sort.py)\n  * [Bucket Sort](sorts/bucket_sort.py)\n  * [Circle Sort](sorts/circle_sort.py)\n  * [Cocktail Shaker Sort](sorts/cocktail_shaker_sort.py)\n  * [Comb Sort](sorts/comb_sort.py)\n  * [Counting Sort](sorts/counting_sort.py)\n  * [Cycle Sort](sorts/cycle_sort.py)\n  * [Cyclic Sort](sorts/cyclic_sort.py)\n  * [Double Sort](sorts/double_sort.py)\n  * [Dutch National Flag Sort](sorts/dutch_national_flag_sort.py)\n  * [Exchange Sort](sorts/exchange_sort.py)\n  * [External Sort](sorts/external_sort.py)\n  * [Gnome Sort](sorts/gnome_sort.py)\n  * [Heap Sort](sorts/heap_sort.py)\n  * [Insertion Sort](sorts/insertion_sort.py)\n  * [Intro Sort](sorts/intro_sort.py)\n  * [Iterative Merge Sort](sorts/iterative_merge_sort.py)\n  * [Merge Insertion Sort](sorts/merge_insertion_sort.py)\n  * [Merge Sort](sorts/merge_sort.py)\n  * [Msd Radix Sort](sorts/msd_radix_sort.py)\n  * [Natural Sort](sorts/natural_sort.py)\n  * [Odd Even Sort](sorts/odd_even_sort.py)\n  * [Odd Even Transposition Parallel](sorts/odd_even_transposition_parallel.py)\n  * [Odd Even Transposition Single Threaded](sorts/odd_even_transposition_single_threaded.py)\n  * [Pancake Sort](sorts/pancake_sort.py)\n  * [Patience Sort](sorts/patience_sort.py)\n  * [Pigeon Sort](sorts/pigeon_sort.py)\n  * [Pigeonhole Sort](sorts/pigeonhole_sort.py)\n  * [Quick Sort](sorts/quick_sort.py)\n  * [Quick Sort 3 Partition](sorts/quick_sort_3_partition.py)\n  * [Radix Sort](sorts/radix_sort.py)\n  * [Recursive Insertion Sort](sorts/recursive_insertion_sort.py)\n  * [Recursive Mergesort Array](sorts/recursive_mergesort_array.py)\n  * [Recursive Quick Sort](sorts/recursive_quick_sort.py)\n  * [Selection Sort](sorts/selection_sort.py)\n  * [Shell Sort](sorts/shell_sort.py)\n  * [Shrink Shell Sort](sorts/shrink_shell_sort.py)\n  * [Slowsort](sorts/slowsort.py)\n  * [Stalin Sort](sorts/stalin_sort.py)\n  * [Stooge Sort](sorts/stooge_sort.py)\n  * [Strand Sort](sorts/strand_sort.py)\n  * [Tim Sort](sorts/tim_sort.py)\n  * [Topological Sort](sorts/topological_sort.py)\n  * [Tree Sort](sorts/tree_sort.py)\n  * [Unknown Sort](sorts/unknown_sort.py)\n  * [Wiggle Sort](sorts/wiggle_sort.py)\n\n## Strings\n  * [Aho Corasick](strings/aho_corasick.py)\n  * [Alternative String Arrange](strings/alternative_string_arrange.py)\n  * [Anagrams](strings/anagrams.py)\n  * [Autocomplete Using Trie](strings/autocomplete_using_trie.py)\n  * [Barcode Validator](strings/barcode_validator.py)\n  * [Bitap String Match](strings/bitap_string_match.py)\n  * [Boyer Moore Search](strings/boyer_moore_search.py)\n  * [Camel Case To Snake Case](strings/camel_case_to_snake_case.py)\n  * [Can String Be Rearranged As Palindrome](strings/can_string_be_rearranged_as_palindrome.py)\n  * [Capitalize](strings/capitalize.py)\n  * [Check Anagrams](strings/check_anagrams.py)\n  * [Count Vowels](strings/count_vowels.py)\n  * [Credit Card Validator](strings/credit_card_validator.py)\n  * [Damerau Levenshtein Distance](strings/damerau_levenshtein_distance.py)\n  * [Detecting English Programmatically](strings/detecting_english_programmatically.py)\n  * [Dna](strings/dna.py)\n  * [Edit Distance](strings/edit_distance.py)\n  * [Frequency Finder](strings/frequency_finder.py)\n  * [Hamming Distance](strings/hamming_distance.py)\n  * [Indian Phone Validator](strings/indian_phone_validator.py)\n  * [Is Contains Unique Chars](strings/is_contains_unique_chars.py)\n  * [Is Isogram](strings/is_isogram.py)\n  * [Is Pangram](strings/is_pangram.py)\n  * [Is Polish National Id](strings/is_polish_national_id.py)\n  * [Is Spain National Id](strings/is_spain_national_id.py)\n  * [Is Srilankan Phone Number](strings/is_srilankan_phone_number.py)\n  * [Is Valid Email Address](strings/is_valid_email_address.py)\n  * [Jaro Winkler](strings/jaro_winkler.py)\n  * [Join](strings/join.py)\n  * [Knuth Morris Pratt](strings/knuth_morris_pratt.py)\n  * [Levenshtein Distance](strings/levenshtein_distance.py)\n  * [Lower](strings/lower.py)\n  * [Manacher](strings/manacher.py)\n  * [Min Cost String Conversion](strings/min_cost_string_conversion.py)\n  * [Naive String Search](strings/naive_string_search.py)\n  * [Ngram](strings/ngram.py)\n  * [Palindrome](strings/palindrome.py)\n  * [Pig Latin](strings/pig_latin.py)\n  * [Prefix Function](strings/prefix_function.py)\n  * [Rabin Karp](strings/rabin_karp.py)\n  * [Remove Duplicate](strings/remove_duplicate.py)\n  * [Reverse Letters](strings/reverse_letters.py)\n  * [Reverse Words](strings/reverse_words.py)\n  * [Snake Case To Camel Pascal Case](strings/snake_case_to_camel_pascal_case.py)\n  * [Split](strings/split.py)\n  * [String Switch Case](strings/string_switch_case.py)\n  * [Strip](strings/strip.py)\n  * [Text Justification](strings/text_justification.py)\n  * [Title](strings/title.py)\n  * [Top K Frequent Words](strings/top_k_frequent_words.py)\n  * [Upper](strings/upper.py)\n  * [Wave String](strings/wave_string.py)\n  * [Wildcard Pattern Matching](strings/wildcard_pattern_matching.py)\n  * [Word Occurrence](strings/word_occurrence.py)\n  * [Word Patterns](strings/word_patterns.py)\n  * [Z Function](strings/z_function.py)\n\n## Web Programming\n  * [Co2 Emission](web_programming/co2_emission.py)\n  * [Covid Stats Via Xpath](web_programming/covid_stats_via_xpath.py)\n  * [Crawl Google Results](web_programming/crawl_google_results.py)\n  * [Crawl Google Scholar Citation](web_programming/crawl_google_scholar_citation.py)\n  * [Currency Converter](web_programming/currency_converter.py)\n  * [Current Stock Price](web_programming/current_stock_price.py)\n  * [Current Weather](web_programming/current_weather.py)\n  * [Daily Horoscope](web_programming/daily_horoscope.py)\n  * [Download Images From Google Query](web_programming/download_images_from_google_query.py)\n  * [Emails From Url](web_programming/emails_from_url.py)\n  * [Fetch Anime And Play](web_programming/fetch_anime_and_play.py)\n  * [Fetch Bbc News](web_programming/fetch_bbc_news.py)\n  * [Fetch Github Info](web_programming/fetch_github_info.py)\n  * [Fetch Jobs](web_programming/fetch_jobs.py)\n  * [Fetch Quotes](web_programming/fetch_quotes.py)\n  * [Fetch Well Rx Price](web_programming/fetch_well_rx_price.py)\n  * [Get Amazon Product Data](web_programming/get_amazon_product_data.py)\n  * [Get Imdb Top 250 Movies Csv](web_programming/get_imdb_top_250_movies_csv.py)\n  * [Get Ip Geolocation](web_programming/get_ip_geolocation.py)\n  * [Get Top Billionaires](web_programming/get_top_billionaires.py)\n  * [Get Top Hn Posts](web_programming/get_top_hn_posts.py)\n  * [Giphy](web_programming/giphy.py)\n  * [Instagram Crawler](web_programming/instagram_crawler.py)\n  * [Instagram Pic](web_programming/instagram_pic.py)\n  * [Instagram Video](web_programming/instagram_video.py)\n  * [Nasa Data](web_programming/nasa_data.py)\n  * [Open Google Results](web_programming/open_google_results.py)\n  * [Random Anime Character](web_programming/random_anime_character.py)\n  * [Recaptcha Verification](web_programming/recaptcha_verification.py)\n  * [Reddit](web_programming/reddit.py)\n  * [Search Books By Isbn](web_programming/search_books_by_isbn.py)\n  * [Slack Message](web_programming/slack_message.py)\n  * [Test Fetch Github Info](web_programming/test_fetch_github_info.py)\n  * [World Covid19 Stats](web_programming/world_covid19_stats.py)\n"
  },
  {
    "path": "LICENSE.md",
    "content": "## MIT License\n\nCopyright (c) 2016-2022 TheAlgorithms and contributors\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "<div align=\"center\">\n<!-- Title: -->\n  <a href=\"https://github.com/TheAlgorithms/\">\n    <img src=\"https://raw.githubusercontent.com/TheAlgorithms/website/1cd824df116b27029f17c2d1b42d81731f28a920/public/logo.svg\" height=\"100\">\n  </a>\n  <h1><a href=\"https://github.com/TheAlgorithms/\">The Algorithms</a> - Python</h1>\n\n<!-- Labels: -->\n  <!-- First row: -->\n  <a href=\"https://gitpod.io/#https://github.com/TheAlgorithms/Python\">\n    <img src=\"https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod&style=flat-square\" height=\"20\" alt=\"Gitpod Ready-to-Code\">\n  </a>\n  <a href=\"https://github.com/TheAlgorithms/Python/blob/master/CONTRIBUTING.md\">\n    <img src=\"https://img.shields.io/static/v1.svg?label=Contributions&message=Welcome&color=0059b3&style=flat-square\" height=\"20\" alt=\"Contributions Welcome\">\n  </a>\n  <img src=\"https://img.shields.io/github/repo-size/TheAlgorithms/Python.svg?label=Repo%20size&style=flat-square\" height=\"20\">\n  <a href=\"https://the-algorithms.com/discord\">\n    <img src=\"https://img.shields.io/discord/808045925556682782.svg?logo=discord&colorB=7289DA&style=flat-square\" height=\"20\" alt=\"Discord chat\">\n  </a>\n  <a href=\"https://gitter.im/TheAlgorithms/community\">\n    <img src=\"https://img.shields.io/badge/Chat-Gitter-ff69b4.svg?label=Chat&logo=gitter&style=flat-square\" height=\"20\" alt=\"Gitter chat\">\n  </a>\n\n  <!-- Second row: -->\n  <br>\n  <a href=\"https://github.com/TheAlgorithms/Python/actions\">\n    <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\">\n  </a>\n  <a href=\"https://github.com/pre-commit/pre-commit\">\n    <img src=\"https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white&style=flat-square\" height=\"20\" alt=\"pre-commit\">\n  </a>\n  <a href=\"https://docs.astral.sh/ruff/formatter/\">\n    <img src=\"https://img.shields.io/static/v1?label=code%20style&message=ruff&color=black&style=flat-square\" height=\"20\" alt=\"code style: black\">\n  </a>\n\n<!-- Short description: -->\n  <h3>All algorithms implemented in Python - for education 📚</h3>\n</div>\n\nImplementations are for learning purposes only. They may be less efficient than the implementations in the Python standard library. Use them at your discretion.\n\n## 🚀 Getting Started\n\n📋 Read through our [Contribution Guidelines](CONTRIBUTING.md) before you contribute.\n\n## 🌐 Community Channels\n\nWe 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!\n\n## 📜 List of Algorithms\n\nSee our [directory](DIRECTORY.md) for easier navigation and a better overview of the project.\n"
  },
  {
    "path": "audio_filters/README.md",
    "content": "# Audio Filter\n\nAudio filters work on the frequency of an audio signal to attenuate unwanted frequency and amplify wanted ones.\nThey are used within anything related to sound, whether it is radio communication or a hi-fi system.\n\n* <https://www.masteringbox.com/filter-types/>\n* <http://ethanwiner.com/filters.html>\n* <https://en.wikipedia.org/wiki/Audio_filter>\n* <https://en.wikipedia.org/wiki/Electronic_filter>\n"
  },
  {
    "path": "audio_filters/__init__.py",
    "content": ""
  },
  {
    "path": "audio_filters/butterworth_filter.py",
    "content": "from math import cos, sin, sqrt, tau\n\nfrom audio_filters.iir_filter import IIRFilter\n\n\"\"\"\nCreate 2nd-order IIR filters with Butterworth design.\n\nCode based on https://webaudio.github.io/Audio-EQ-Cookbook/audio-eq-cookbook.html\nAlternatively you can use scipy.signal.butter, which should yield the same results.\n\"\"\"\n\n\ndef make_lowpass(\n    frequency: int,\n    samplerate: int,\n    q_factor: float = 1 / sqrt(2),\n) -> IIRFilter:\n    \"\"\"\n    Creates a low-pass filter\n\n    >>> filter = make_lowpass(1000, 48000)\n    >>> filter.a_coeffs + filter.b_coeffs  # doctest: +NORMALIZE_WHITESPACE\n    [1.0922959556412573, -1.9828897227476208, 0.9077040443587427, 0.004277569313094809,\n     0.008555138626189618, 0.004277569313094809]\n    \"\"\"\n    w0 = tau * frequency / samplerate\n    _sin = sin(w0)\n    _cos = cos(w0)\n    alpha = _sin / (2 * q_factor)\n\n    b0 = (1 - _cos) / 2\n    b1 = 1 - _cos\n\n    a0 = 1 + alpha\n    a1 = -2 * _cos\n    a2 = 1 - alpha\n\n    filt = IIRFilter(2)\n    filt.set_coefficients([a0, a1, a2], [b0, b1, b0])\n    return filt\n\n\ndef make_highpass(\n    frequency: int,\n    samplerate: int,\n    q_factor: float = 1 / sqrt(2),\n) -> IIRFilter:\n    \"\"\"\n    Creates a high-pass filter\n\n    >>> filter = make_highpass(1000, 48000)\n    >>> filter.a_coeffs + filter.b_coeffs  # doctest: +NORMALIZE_WHITESPACE\n    [1.0922959556412573, -1.9828897227476208, 0.9077040443587427, 0.9957224306869052,\n     -1.9914448613738105, 0.9957224306869052]\n    \"\"\"\n    w0 = tau * frequency / samplerate\n    _sin = sin(w0)\n    _cos = cos(w0)\n    alpha = _sin / (2 * q_factor)\n\n    b0 = (1 + _cos) / 2\n    b1 = -1 - _cos\n\n    a0 = 1 + alpha\n    a1 = -2 * _cos\n    a2 = 1 - alpha\n\n    filt = IIRFilter(2)\n    filt.set_coefficients([a0, a1, a2], [b0, b1, b0])\n    return filt\n\n\ndef make_bandpass(\n    frequency: int,\n    samplerate: int,\n    q_factor: float = 1 / sqrt(2),\n) -> IIRFilter:\n    \"\"\"\n    Creates a band-pass filter\n\n    >>> filter = make_bandpass(1000, 48000)\n    >>> filter.a_coeffs + filter.b_coeffs  # doctest: +NORMALIZE_WHITESPACE\n    [1.0922959556412573, -1.9828897227476208, 0.9077040443587427, 0.06526309611002579,\n     0, -0.06526309611002579]\n    \"\"\"\n    w0 = tau * frequency / samplerate\n    _sin = sin(w0)\n    _cos = cos(w0)\n    alpha = _sin / (2 * q_factor)\n\n    b0 = _sin / 2\n    b1 = 0\n    b2 = -b0\n\n    a0 = 1 + alpha\n    a1 = -2 * _cos\n    a2 = 1 - alpha\n\n    filt = IIRFilter(2)\n    filt.set_coefficients([a0, a1, a2], [b0, b1, b2])\n    return filt\n\n\ndef make_allpass(\n    frequency: int,\n    samplerate: int,\n    q_factor: float = 1 / sqrt(2),\n) -> IIRFilter:\n    \"\"\"\n    Creates an all-pass filter\n\n    >>> filter = make_allpass(1000, 48000)\n    >>> filter.a_coeffs + filter.b_coeffs  # doctest: +NORMALIZE_WHITESPACE\n    [1.0922959556412573, -1.9828897227476208, 0.9077040443587427, 0.9077040443587427,\n     -1.9828897227476208, 1.0922959556412573]\n    \"\"\"\n    w0 = tau * frequency / samplerate\n    _sin = sin(w0)\n    _cos = cos(w0)\n    alpha = _sin / (2 * q_factor)\n\n    b0 = 1 - alpha\n    b1 = -2 * _cos\n    b2 = 1 + alpha\n\n    filt = IIRFilter(2)\n    filt.set_coefficients([b2, b1, b0], [b0, b1, b2])\n    return filt\n\n\ndef make_peak(\n    frequency: int,\n    samplerate: int,\n    gain_db: float,\n    q_factor: float = 1 / sqrt(2),\n) -> IIRFilter:\n    \"\"\"\n    Creates a peak filter\n\n    >>> filter = make_peak(1000, 48000, 6)\n    >>> filter.a_coeffs + filter.b_coeffs  # doctest: +NORMALIZE_WHITESPACE\n    [1.0653405327119334, -1.9828897227476208, 0.9346594672880666, 1.1303715025601122,\n     -1.9828897227476208, 0.8696284974398878]\n    \"\"\"\n    w0 = tau * frequency / samplerate\n    _sin = sin(w0)\n    _cos = cos(w0)\n    alpha = _sin / (2 * q_factor)\n    big_a = 10 ** (gain_db / 40)\n\n    b0 = 1 + alpha * big_a\n    b1 = -2 * _cos\n    b2 = 1 - alpha * big_a\n    a0 = 1 + alpha / big_a\n    a1 = -2 * _cos\n    a2 = 1 - alpha / big_a\n\n    filt = IIRFilter(2)\n    filt.set_coefficients([a0, a1, a2], [b0, b1, b2])\n    return filt\n\n\ndef make_lowshelf(\n    frequency: int,\n    samplerate: int,\n    gain_db: float,\n    q_factor: float = 1 / sqrt(2),\n) -> IIRFilter:\n    \"\"\"\n    Creates a low-shelf filter\n\n    >>> filter = make_lowshelf(1000, 48000, 6)\n    >>> filter.a_coeffs + filter.b_coeffs  # doctest: +NORMALIZE_WHITESPACE\n    [3.0409336710888786, -5.608870992220748, 2.602157875636628, 3.139954022810743,\n     -5.591841778072785, 2.5201667380627257]\n    \"\"\"\n    w0 = tau * frequency / samplerate\n    _sin = sin(w0)\n    _cos = cos(w0)\n    alpha = _sin / (2 * q_factor)\n    big_a = 10 ** (gain_db / 40)\n    pmc = (big_a + 1) - (big_a - 1) * _cos\n    ppmc = (big_a + 1) + (big_a - 1) * _cos\n    mpc = (big_a - 1) - (big_a + 1) * _cos\n    pmpc = (big_a - 1) + (big_a + 1) * _cos\n    aa2 = 2 * sqrt(big_a) * alpha\n\n    b0 = big_a * (pmc + aa2)\n    b1 = 2 * big_a * mpc\n    b2 = big_a * (pmc - aa2)\n    a0 = ppmc + aa2\n    a1 = -2 * pmpc\n    a2 = ppmc - aa2\n\n    filt = IIRFilter(2)\n    filt.set_coefficients([a0, a1, a2], [b0, b1, b2])\n    return filt\n\n\ndef make_highshelf(\n    frequency: int,\n    samplerate: int,\n    gain_db: float,\n    q_factor: float = 1 / sqrt(2),\n) -> IIRFilter:\n    \"\"\"\n    Creates a high-shelf filter\n\n    >>> filter = make_highshelf(1000, 48000, 6)\n    >>> filter.a_coeffs + filter.b_coeffs  # doctest: +NORMALIZE_WHITESPACE\n    [2.2229172136088806, -3.9587208137297303, 1.7841414181566304, 4.295432981120543,\n     -7.922740859457287, 3.6756456963725253]\n    \"\"\"\n    w0 = tau * frequency / samplerate\n    _sin = sin(w0)\n    _cos = cos(w0)\n    alpha = _sin / (2 * q_factor)\n    big_a = 10 ** (gain_db / 40)\n    pmc = (big_a + 1) - (big_a - 1) * _cos\n    ppmc = (big_a + 1) + (big_a - 1) * _cos\n    mpc = (big_a - 1) - (big_a + 1) * _cos\n    pmpc = (big_a - 1) + (big_a + 1) * _cos\n    aa2 = 2 * sqrt(big_a) * alpha\n\n    b0 = big_a * (ppmc + aa2)\n    b1 = -2 * big_a * pmpc\n    b2 = big_a * (ppmc - aa2)\n    a0 = pmc + aa2\n    a1 = 2 * mpc\n    a2 = pmc - aa2\n\n    filt = IIRFilter(2)\n    filt.set_coefficients([a0, a1, a2], [b0, b1, b2])\n    return filt\n"
  },
  {
    "path": "audio_filters/equal_loudness_filter.py.broken.txt",
    "content": "from json import loads\nfrom pathlib import Path\n\nimport numpy as np\nfrom yulewalker import yulewalk\n\nfrom audio_filters.butterworth_filter import make_highpass\nfrom audio_filters.iir_filter import IIRFilter\n\ndata = loads((Path(__file__).resolve().parent / \"loudness_curve.json\").read_text())\n\n\nclass EqualLoudnessFilter:\n    r\"\"\"\n    An equal-loudness filter which compensates for the human ear's non-linear response\n     to sound.\n    This filter corrects this by cascading a yulewalk filter and a butterworth filter.\n\n    Designed for use with samplerate of 44.1kHz and above. If you're using a lower\n     samplerate, use with caution.\n\n    Code based on matlab implementation at https://bit.ly/3eqh2HU\n    (url shortened for ruff)\n\n    Target curve: https://i.imgur.com/3g2VfaM.png\n    Yulewalk response: https://i.imgur.com/J9LnJ4C.png\n    Butterworth and overall response: https://i.imgur.com/3g2VfaM.png\n\n    Images and original matlab implementation by David Robinson, 2001\n    \"\"\"\n\n    def __init__(self, samplerate: int = 44100) -> None:\n        self.yulewalk_filter = IIRFilter(10)\n        self.butterworth_filter = make_highpass(150, samplerate)\n\n        # pad the data to nyquist\n        curve_freqs = np.array(data[\"frequencies\"] + [max(20000.0, samplerate / 2)])\n        curve_gains = np.array(data[\"gains\"] + [140])\n\n        # Convert to angular frequency\n        freqs_normalized = curve_freqs / samplerate * 2\n        # Invert the curve and normalize to 0dB\n        gains_normalized = np.power(10, (np.min(curve_gains) - curve_gains) / 20)\n\n        # Scipy's `yulewalk` function is a stub, so we're using the\n        #  `yulewalker` library instead.\n        # This function computes the coefficients using a least-squares\n        #  fit to the specified curve.\n        ya, yb = yulewalk(10, freqs_normalized, gains_normalized)\n        self.yulewalk_filter.set_coefficients(ya, yb)\n\n    def process(self, sample: float) -> float:\n        \"\"\"\n        Process a single sample through both filters\n\n        >>> filt = EqualLoudnessFilter()\n        >>> filt.process(0.0)\n        0.0\n        \"\"\"\n        tmp = self.yulewalk_filter.process(sample)\n        return self.butterworth_filter.process(tmp)\n"
  },
  {
    "path": "audio_filters/iir_filter.py",
    "content": "from __future__ import annotations\n\n\nclass IIRFilter:\n    r\"\"\"\n    N-Order IIR filter\n    Assumes working with float samples normalized on [-1, 1]\n\n    ---\n\n    Implementation details:\n    Based on the 2nd-order function from\n    https://en.wikipedia.org/wiki/Digital_biquad_filter,\n    this generalized N-order function was made.\n\n    Using the following transfer function\n        .. math:: H(z)=\\frac{b_{0}+b_{1}z^{-1}+b_{2}z^{-2}+...+b_{k}z^{-k}}\n                  {a_{0}+a_{1}z^{-1}+a_{2}z^{-2}+...+a_{k}z^{-k}}\n\n    we can rewrite this to\n        .. math:: y[n]={\\frac{1}{a_{0}}}\n                  \\left(\\left(b_{0}x[n]+b_{1}x[n-1]+b_{2}x[n-2]+...+b_{k}x[n-k]\\right)-\n                  \\left(a_{1}y[n-1]+a_{2}y[n-2]+...+a_{k}y[n-k]\\right)\\right)\n    \"\"\"\n\n    def __init__(self, order: int) -> None:\n        self.order = order\n\n        # a_{0} ... a_{k}\n        self.a_coeffs = [1.0] + [0.0] * order\n        # b_{0} ... b_{k}\n        self.b_coeffs = [1.0] + [0.0] * order\n\n        # x[n-1] ... x[n-k]\n        self.input_history = [0.0] * self.order\n        # y[n-1] ... y[n-k]\n        self.output_history = [0.0] * self.order\n\n    def set_coefficients(self, a_coeffs: list[float], b_coeffs: list[float]) -> None:\n        \"\"\"\n        Set the coefficients for the IIR filter.\n        These should both be of size `order` + 1.\n        :math:`a_0` may be left out, and it will use 1.0 as default value.\n\n        This method works well with scipy's filter design functions\n\n        >>> # Make a 2nd-order 1000Hz butterworth lowpass filter\n        >>> import scipy.signal\n        >>> b_coeffs, a_coeffs = scipy.signal.butter(2, 1000,\n        ...                                          btype='lowpass',\n        ...                                          fs=48000)\n        >>> filt = IIRFilter(2)\n        >>> filt.set_coefficients(a_coeffs, b_coeffs)\n        \"\"\"\n        if len(a_coeffs) < self.order:\n            a_coeffs = [1.0, *a_coeffs]\n\n        if len(a_coeffs) != self.order + 1:\n            msg = (\n                f\"Expected a_coeffs to have {self.order + 1} elements \"\n                f\"for {self.order}-order filter, got {len(a_coeffs)}\"\n            )\n            raise ValueError(msg)\n\n        if len(b_coeffs) != self.order + 1:\n            msg = (\n                f\"Expected b_coeffs to have {self.order + 1} elements \"\n                f\"for {self.order}-order filter, got {len(a_coeffs)}\"\n            )\n            raise ValueError(msg)\n\n        self.a_coeffs = a_coeffs\n        self.b_coeffs = b_coeffs\n\n    def process(self, sample: float) -> float:\n        \"\"\"\n        Calculate :math:`y[n]`\n\n        >>> filt = IIRFilter(2)\n        >>> filt.process(0)\n        0.0\n        \"\"\"\n        result = 0.0\n\n        # Start at index 1 and do index 0 at the end.\n        for i in range(1, self.order + 1):\n            result += (\n                self.b_coeffs[i] * self.input_history[i - 1]\n                - self.a_coeffs[i] * self.output_history[i - 1]\n            )\n\n        result = (result + self.b_coeffs[0] * sample) / self.a_coeffs[0]\n\n        self.input_history[1:] = self.input_history[:-1]\n        self.output_history[1:] = self.output_history[:-1]\n\n        self.input_history[0] = sample\n        self.output_history[0] = result\n\n        return result\n"
  },
  {
    "path": "audio_filters/loudness_curve.json",
    "content": "{\n  \"_comment\": \"The following is a representative average of the Equal Loudness Contours as measured by Robinson and Dadson, 1956\",\n  \"_doi\": \"10.1088/0508-3443/7/5/302\",\n  \"frequencies\": [\n    0,\n    20,\n    30,\n    40,\n    50,\n    60,\n    70,\n    80,\n    90,\n    100,\n    200,\n    300,\n    400,\n    500,\n    600,\n    700,\n    800,\n    900,\n    1000,\n    1500,\n    2000,\n    2500,\n    3000,\n    3700,\n    4000,\n    5000,\n    6000,\n    7000,\n    8000,\n    9000,\n    10000,\n    12000,\n    15000,\n    20000\n  ],\n  \"gains\": [\n    120,\n    113,\n    103,\n    97,\n    93,\n    91,\n    89,\n    87,\n    86,\n    85,\n    78,\n    76,\n    76,\n    76,\n    76,\n    77,\n    78,\n    79.5,\n    80,\n    79,\n    77,\n    74,\n    71.5,\n    70,\n    70.5,\n    74,\n    79,\n    84,\n    86,\n    86,\n    85,\n    95,\n    110,\n    125\n  ]\n}\n"
  },
  {
    "path": "audio_filters/show_response.py",
    "content": "from __future__ import annotations\n\nfrom abc import abstractmethod\nfrom math import pi\nfrom typing import Protocol\n\nimport matplotlib.pyplot as plt\nimport numpy as np\n\n\nclass FilterType(Protocol):\n    @abstractmethod\n    def process(self, sample: float) -> float:\n        \"\"\"\n        Calculate y[n]\n\n        >>> issubclass(FilterType, Protocol)\n        True\n        \"\"\"\n\n\ndef get_bounds(\n    fft_results: np.ndarray, samplerate: int\n) -> tuple[int | float, int | float]:\n    \"\"\"\n    Get bounds for printing fft results\n\n    >>> import numpy\n    >>> array = numpy.linspace(-20.0, 20.0, 1000)\n    >>> get_bounds(array, 1000)\n    (-20, 20)\n    \"\"\"\n    lowest = min([-20, np.min(fft_results[1 : samplerate // 2 - 1])])\n    highest = max([20, np.max(fft_results[1 : samplerate // 2 - 1])])\n    return lowest, highest\n\n\ndef show_frequency_response(filter_type: FilterType, samplerate: int) -> None:\n    \"\"\"\n    Show frequency response of a filter\n\n    >>> from audio_filters.iir_filter import IIRFilter\n    >>> filt = IIRFilter(4)\n    >>> show_frequency_response(filt, 48000)\n    \"\"\"\n\n    size = 512\n    inputs = [1] + [0] * (size - 1)\n    outputs = [filter_type.process(item) for item in inputs]\n\n    filler = [0] * (samplerate - size)  # zero-padding\n    outputs += filler\n    fft_out = np.abs(np.fft.fft(outputs))\n    fft_db = 20 * np.log10(fft_out)\n\n    # Frequencies on log scale from 24 to nyquist frequency\n    plt.xlim(24, samplerate / 2 - 1)\n    plt.xlabel(\"Frequency (Hz)\")\n    plt.xscale(\"log\")\n\n    # Display within reasonable bounds\n    bounds = get_bounds(fft_db, samplerate)\n    plt.ylim(max([-80, bounds[0]]), min([80, bounds[1]]))\n    plt.ylabel(\"Gain (dB)\")\n\n    plt.plot(fft_db)\n    plt.show()\n\n\ndef show_phase_response(filter_type: FilterType, samplerate: int) -> None:\n    \"\"\"\n    Show phase response of a filter\n\n    >>> from audio_filters.iir_filter import IIRFilter\n    >>> filt = IIRFilter(4)\n    >>> show_phase_response(filt, 48000)\n    \"\"\"\n\n    size = 512\n    inputs = [1] + [0] * (size - 1)\n    outputs = [filter_type.process(item) for item in inputs]\n\n    filler = [0] * (samplerate - size)  # zero-padding\n    outputs += filler\n    fft_out = np.angle(np.fft.fft(outputs))\n\n    # Frequencies on log scale from 24 to nyquist frequency\n    plt.xlim(24, samplerate / 2 - 1)\n    plt.xlabel(\"Frequency (Hz)\")\n    plt.xscale(\"log\")\n\n    plt.ylim(-2 * pi, 2 * pi)\n    plt.ylabel(\"Phase shift (Radians)\")\n    plt.plot(np.unwrap(fft_out, -2 * pi))\n    plt.show()\n"
  },
  {
    "path": "backtracking/README.md",
    "content": "# Backtracking\n\nBacktracking is a way to speed up the search process by removing candidates when they can't be the solution of a problem.\n\n* <https://en.wikipedia.org/wiki/Backtracking>\n* <https://en.wikipedia.org/wiki/Decision_tree_pruning>\n* <https://medium.com/@priyankmistry1999/backtracking-sudoku-6e4439e4825c>\n* <https://www.geeksforgeeks.org/sudoku-backtracking-7/>\n"
  },
  {
    "path": "backtracking/__init__.py",
    "content": ""
  },
  {
    "path": "backtracking/all_combinations.py",
    "content": "\"\"\"\nIn this problem, we want to determine all possible combinations of k\nnumbers out of 1 ... n. We use backtracking to solve this problem.\n\nTime complexity: O(C(n,k)) which is O(n choose k) = O((n!/(k! * (n - k)!))),\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom itertools import combinations\n\n\ndef combination_lists(n: int, k: int) -> list[list[int]]:\n    \"\"\"\n    Generates all possible combinations of k numbers out of 1 ... n using itertools.\n\n    >>> combination_lists(n=4, k=2)\n    [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]\n    \"\"\"\n    return [list(x) for x in combinations(range(1, n + 1), k)]\n\n\ndef generate_all_combinations(n: int, k: int) -> list[list[int]]:\n    \"\"\"\n    Generates all possible combinations of k numbers out of 1 ... n using backtracking.\n\n    >>> generate_all_combinations(n=4, k=2)\n    [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]\n    >>> generate_all_combinations(n=0, k=0)\n    [[]]\n    >>> generate_all_combinations(n=10, k=-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: k must not be negative\n    >>> generate_all_combinations(n=-1, k=10)\n    Traceback (most recent call last):\n        ...\n    ValueError: n must not be negative\n    >>> generate_all_combinations(n=5, k=4)\n    [[1, 2, 3, 4], [1, 2, 3, 5], [1, 2, 4, 5], [1, 3, 4, 5], [2, 3, 4, 5]]\n    >>> generate_all_combinations(n=3, k=3)\n    [[1, 2, 3]]\n    >>> generate_all_combinations(n=3, k=1)\n    [[1], [2], [3]]\n    >>> generate_all_combinations(n=1, k=0)\n    [[]]\n    >>> generate_all_combinations(n=1, k=1)\n    [[1]]\n    >>> from itertools import combinations\n    >>> all(generate_all_combinations(n, k) == combination_lists(n, k)\n    ...     for n in range(1, 6) for k in range(1, 6))\n    True\n    \"\"\"\n    if k < 0:\n        raise ValueError(\"k must not be negative\")\n    if n < 0:\n        raise ValueError(\"n must not be negative\")\n\n    result: list[list[int]] = []\n    create_all_state(1, n, k, [], result)\n    return result\n\n\ndef create_all_state(\n    increment: int,\n    total_number: int,\n    level: int,\n    current_list: list[int],\n    total_list: list[list[int]],\n) -> None:\n    \"\"\"\n    Helper function to recursively build all combinations.\n\n    >>> create_all_state(1, 4, 2, [], result := [])\n    >>> result\n    [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]\n    >>> create_all_state(1, 3, 3, [], result := [])\n    >>> result\n    [[1, 2, 3]]\n    >>> create_all_state(2, 2, 1, [1], result := [])\n    >>> result\n    [[1, 2]]\n    >>> create_all_state(1, 0, 0, [], result := [])\n    >>> result\n    [[]]\n    >>> create_all_state(1, 4, 0, [1, 2], result := [])\n    >>> result\n    [[1, 2]]\n    >>> create_all_state(5, 4, 2, [1, 2], result := [])\n    >>> result\n    []\n    \"\"\"\n    if level == 0:\n        total_list.append(current_list[:])\n        return\n\n    for i in range(increment, total_number - level + 2):\n        current_list.append(i)\n        create_all_state(i + 1, total_number, level - 1, current_list, total_list)\n        current_list.pop()\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    print(generate_all_combinations(n=4, k=2))\n    tests = ((n, k) for n in range(1, 5) for k in range(1, 5))\n    for n, k in tests:\n        print(n, k, generate_all_combinations(n, k) == combination_lists(n, k))\n\n    print(\"Benchmark:\")\n    from timeit import timeit\n\n    for func in (\"combination_lists\", \"generate_all_combinations\"):\n        print(f\"{func:>25}(): {timeit(f'{func}(n=4, k = 2)', globals=globals())}\")\n"
  },
  {
    "path": "backtracking/all_permutations.py",
    "content": "\"\"\"\nIn this problem, we want to determine all possible permutations\nof the given sequence. We use backtracking to solve this problem.\n\nTime complexity: O(n! * n),\nwhere n denotes the length of the given sequence.\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef generate_all_permutations(sequence: list[int | str]) -> None:\n    create_state_space_tree(sequence, [], 0, [0 for i in range(len(sequence))])\n\n\ndef create_state_space_tree(\n    sequence: list[int | str],\n    current_sequence: list[int | str],\n    index: int,\n    index_used: list[int],\n) -> None:\n    \"\"\"\n    Creates a state space tree to iterate through each branch using DFS.\n    We know that each state has exactly len(sequence) - index children.\n    It terminates when it reaches the end of the given sequence.\n\n    :param sequence: The input sequence for which permutations are generated.\n    :param current_sequence: The current permutation being built.\n    :param index: The current index in the sequence.\n    :param index_used: list to track which elements are used in permutation.\n\n    Example 1:\n    >>> sequence = [1, 2, 3]\n    >>> current_sequence = []\n    >>> index_used = [False, False, False]\n    >>> create_state_space_tree(sequence, current_sequence, 0, index_used)\n    [1, 2, 3]\n    [1, 3, 2]\n    [2, 1, 3]\n    [2, 3, 1]\n    [3, 1, 2]\n    [3, 2, 1]\n\n    Example 2:\n    >>> sequence = [\"A\", \"B\", \"C\"]\n    >>> current_sequence = []\n    >>> index_used = [False, False, False]\n    >>> create_state_space_tree(sequence, current_sequence, 0, index_used)\n    ['A', 'B', 'C']\n    ['A', 'C', 'B']\n    ['B', 'A', 'C']\n    ['B', 'C', 'A']\n    ['C', 'A', 'B']\n    ['C', 'B', 'A']\n\n    Example 3:\n    >>> sequence = [1]\n    >>> current_sequence = []\n    >>> index_used = [False]\n    >>> create_state_space_tree(sequence, current_sequence, 0, index_used)\n    [1]\n    \"\"\"\n\n    if index == len(sequence):\n        print(current_sequence)\n        return\n\n    for i in range(len(sequence)):\n        if not index_used[i]:\n            current_sequence.append(sequence[i])\n            index_used[i] = True\n            create_state_space_tree(sequence, current_sequence, index + 1, index_used)\n            current_sequence.pop()\n            index_used[i] = False\n\n\n\"\"\"\nremove the comment to take an input from the user\n\nprint(\"Enter the elements\")\nsequence = list(map(int, input().split()))\n\"\"\"\n\nsequence: list[int | str] = [3, 1, 2, 4]\ngenerate_all_permutations(sequence)\n\nsequence_2: list[int | str] = [\"A\", \"B\", \"C\"]\ngenerate_all_permutations(sequence_2)\n"
  },
  {
    "path": "backtracking/all_subsequences.py",
    "content": "\"\"\"\nIn this problem, we want to determine all possible subsequences\nof the given sequence. We use backtracking to solve this problem.\n\nTime complexity: O(2^n),\nwhere n denotes the length of the given sequence.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom typing import Any\n\n\ndef generate_all_subsequences(sequence: list[Any]) -> None:\n    create_state_space_tree(sequence, [], 0)\n\n\ndef create_state_space_tree(\n    sequence: list[Any], current_subsequence: list[Any], index: int\n) -> None:\n    \"\"\"\n    Creates a state space tree to iterate through each branch using DFS.\n    We know that each state has exactly two children.\n    It terminates when it reaches the end of the given sequence.\n\n    :param sequence: The input sequence for which subsequences are generated.\n    :param current_subsequence: The current subsequence being built.\n    :param index: The current index in the sequence.\n\n    Example:\n    >>> sequence = [3, 2, 1]\n    >>> current_subsequence = []\n    >>> create_state_space_tree(sequence, current_subsequence, 0)\n    []\n    [1]\n    [2]\n    [2, 1]\n    [3]\n    [3, 1]\n    [3, 2]\n    [3, 2, 1]\n\n    >>> sequence = [\"A\", \"B\"]\n    >>> current_subsequence = []\n    >>> create_state_space_tree(sequence, current_subsequence, 0)\n    []\n    ['B']\n    ['A']\n    ['A', 'B']\n\n    >>> sequence = []\n    >>> current_subsequence = []\n    >>> create_state_space_tree(sequence, current_subsequence, 0)\n    []\n\n    >>> sequence = [1, 2, 3, 4]\n    >>> current_subsequence = []\n    >>> create_state_space_tree(sequence, current_subsequence, 0)\n    []\n    [4]\n    [3]\n    [3, 4]\n    [2]\n    [2, 4]\n    [2, 3]\n    [2, 3, 4]\n    [1]\n    [1, 4]\n    [1, 3]\n    [1, 3, 4]\n    [1, 2]\n    [1, 2, 4]\n    [1, 2, 3]\n    [1, 2, 3, 4]\n    \"\"\"\n\n    if index == len(sequence):\n        print(current_subsequence)\n        return\n\n    create_state_space_tree(sequence, current_subsequence, index + 1)\n    current_subsequence.append(sequence[index])\n    create_state_space_tree(sequence, current_subsequence, index + 1)\n    current_subsequence.pop()\n\n\nif __name__ == \"__main__\":\n    seq: list[Any] = [1, 2, 3]\n    generate_all_subsequences(seq)\n\n    seq.clear()\n    seq.extend([\"A\", \"B\", \"C\"])\n    generate_all_subsequences(seq)\n"
  },
  {
    "path": "backtracking/coloring.py",
    "content": "\"\"\"\nGraph Coloring also called \"m coloring problem\"\nconsists of coloring a given graph with at most m colors\nsuch that no adjacent vertices are assigned the same color\n\nWikipedia: https://en.wikipedia.org/wiki/Graph_coloring\n\"\"\"\n\n\ndef valid_coloring(\n    neighbours: list[int], colored_vertices: list[int], color: int\n) -> bool:\n    \"\"\"\n    For each neighbour check if the coloring constraint is satisfied\n    If any of the neighbours fail the constraint return False\n    If all neighbours validate the constraint return True\n\n    >>> neighbours = [0,1,0,1,0]\n    >>> colored_vertices = [0, 2, 1, 2, 0]\n\n    >>> color = 1\n    >>> valid_coloring(neighbours, colored_vertices, color)\n    True\n\n    >>> color = 2\n    >>> valid_coloring(neighbours, colored_vertices, color)\n    False\n    \"\"\"\n    # Does any neighbour not satisfy the constraints\n    return not any(\n        neighbour == 1 and colored_vertices[i] == color\n        for i, neighbour in enumerate(neighbours)\n    )\n\n\ndef util_color(\n    graph: list[list[int]], max_colors: int, colored_vertices: list[int], index: int\n) -> bool:\n    \"\"\"\n    Pseudo-Code\n\n    Base Case:\n    1. Check if coloring is complete\n        1.1 If complete return True (meaning that we successfully colored the graph)\n\n    Recursive Step:\n    2. Iterates over each color:\n        Check if the current coloring is valid:\n            2.1. Color given vertex\n            2.2. Do recursive call, check if this coloring leads to a solution\n            2.4. if current coloring leads to a solution return\n            2.5. Uncolor given vertex\n\n    >>> graph = [[0, 1, 0, 0, 0],\n    ...          [1, 0, 1, 0, 1],\n    ...          [0, 1, 0, 1, 0],\n    ...          [0, 1, 1, 0, 0],\n    ...          [0, 1, 0, 0, 0]]\n    >>> max_colors = 3\n    >>> colored_vertices = [0, 1, 0, 0, 0]\n    >>> index = 3\n\n    >>> util_color(graph, max_colors, colored_vertices, index)\n    True\n\n    >>> max_colors = 2\n    >>> util_color(graph, max_colors, colored_vertices, index)\n    False\n    \"\"\"\n\n    # Base Case\n    if index == len(graph):\n        return True\n\n    # Recursive Step\n    for i in range(max_colors):\n        if valid_coloring(graph[index], colored_vertices, i):\n            # Color current vertex\n            colored_vertices[index] = i\n            # Validate coloring\n            if util_color(graph, max_colors, colored_vertices, index + 1):\n                return True\n            # Backtrack\n            colored_vertices[index] = -1\n    return False\n\n\ndef color(graph: list[list[int]], max_colors: int) -> list[int]:\n    \"\"\"\n    Wrapper function to call subroutine called util_color\n    which will either return True or False.\n    If True is returned colored_vertices list is filled with correct colorings\n\n    >>> graph = [[0, 1, 0, 0, 0],\n    ...          [1, 0, 1, 0, 1],\n    ...          [0, 1, 0, 1, 0],\n    ...          [0, 1, 1, 0, 0],\n    ...          [0, 1, 0, 0, 0]]\n\n    >>> max_colors = 3\n    >>> color(graph, max_colors)\n    [0, 1, 0, 2, 0]\n\n    >>> max_colors = 2\n    >>> color(graph, max_colors)\n    []\n    >>> color([], 2)  # empty graph\n    []\n    >>> color([[0]], 1)  # single node, 1 color\n    [0]\n    >>> color([[0, 1], [1, 0]], 1)  # 2 nodes, 1 color (impossible)\n    []\n    >>> color([[0, 1], [1, 0]], 2)  # 2 nodes, 2 colors (possible)\n    [0, 1]\n    \"\"\"\n    colored_vertices = [-1] * len(graph)\n\n    if util_color(graph, max_colors, colored_vertices, 0):\n        return colored_vertices\n\n    return []\n"
  },
  {
    "path": "backtracking/combination_sum.py",
    "content": "\"\"\"\nIn the Combination Sum problem, we are given a list consisting of distinct integers.\nWe need to find all the combinations whose sum equals to target given.\nWe can use an element more than one.\n\nTime complexity(Average Case): O(n!)\n\nConstraints:\n1 <= candidates.length <= 30\n2 <= candidates[i] <= 40\nAll elements of candidates are distinct.\n1 <= target <= 40\n\"\"\"\n\n\ndef backtrack(\n    candidates: list, path: list, answer: list, target: int, previous_index: int\n) -> None:\n    \"\"\"\n    A recursive function that searches for possible combinations. Backtracks in case\n    of a bigger current combination value than the target value.\n\n    Parameters\n    ----------\n    previous_index: Last index from the previous search\n    target: The value we need to obtain by summing our integers in the path list.\n    answer: A list of possible combinations\n    path: Current combination\n    candidates: A list of integers we can use.\n    \"\"\"\n    if target == 0:\n        answer.append(path.copy())\n    else:\n        for index in range(previous_index, len(candidates)):\n            if target >= candidates[index]:\n                path.append(candidates[index])\n                backtrack(candidates, path, answer, target - candidates[index], index)\n                path.pop(len(path) - 1)\n\n\ndef combination_sum(candidates: list, target: int) -> list:\n    \"\"\"\n    >>> combination_sum([2, 3, 5], 8)\n    [[2, 2, 2, 2], [2, 3, 3], [3, 5]]\n    >>> combination_sum([2, 3, 6, 7], 7)\n    [[2, 2, 3], [7]]\n    >>> combination_sum([-8, 2.3, 0], 1)\n    Traceback (most recent call last):\n        ...\n    ValueError: All elements in candidates must be non-negative\n    >>> combination_sum([], 1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Candidates list should not be empty\n    \"\"\"\n    if not candidates:\n        raise ValueError(\"Candidates list should not be empty\")\n\n    if any(x < 0 for x in candidates):\n        raise ValueError(\"All elements in candidates must be non-negative\")\n\n    path = []  # type: list[int]\n    answer = []  # type: list[int]\n    backtrack(candidates, path, answer, target, 0)\n    return answer\n\n\ndef main() -> None:\n    print(combination_sum([-8, 2.3, 0], 1))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    main()\n"
  },
  {
    "path": "backtracking/crossword_puzzle_solver.py",
    "content": "# https://www.geeksforgeeks.org/solve-crossword-puzzle/\n\n\ndef is_valid(\n    puzzle: list[list[str]], word: str, row: int, col: int, vertical: bool\n) -> bool:\n    \"\"\"\n    Check if a word can be placed at the given position.\n\n    >>> puzzle = [\n    ...     ['', '', '', ''],\n    ...     ['', '', '', ''],\n    ...     ['', '', '', ''],\n    ...     ['', '', '', '']\n    ... ]\n    >>> is_valid(puzzle, 'word', 0, 0, True)\n    True\n    >>> puzzle = [\n    ...     ['', '', '', ''],\n    ...     ['', '', '', ''],\n    ...     ['', '', '', ''],\n    ...     ['', '', '', '']\n    ... ]\n    >>> is_valid(puzzle, 'word', 0, 0, False)\n    True\n    \"\"\"\n    for i in range(len(word)):\n        if vertical:\n            if row + i >= len(puzzle) or puzzle[row + i][col] != \"\":\n                return False\n        elif col + i >= len(puzzle[0]) or puzzle[row][col + i] != \"\":\n            return False\n    return True\n\n\ndef place_word(\n    puzzle: list[list[str]], word: str, row: int, col: int, vertical: bool\n) -> None:\n    \"\"\"\n    Place a word at the given position.\n\n    >>> puzzle = [\n    ...     ['', '', '', ''],\n    ...     ['', '', '', ''],\n    ...     ['', '', '', ''],\n    ...     ['', '', '', '']\n    ... ]\n    >>> place_word(puzzle, 'word', 0, 0, True)\n    >>> puzzle\n    [['w', '', '', ''], ['o', '', '', ''], ['r', '', '', ''], ['d', '', '', '']]\n    \"\"\"\n    for i, char in enumerate(word):\n        if vertical:\n            puzzle[row + i][col] = char\n        else:\n            puzzle[row][col + i] = char\n\n\ndef remove_word(\n    puzzle: list[list[str]], word: str, row: int, col: int, vertical: bool\n) -> None:\n    \"\"\"\n    Remove a word from the given position.\n\n    >>> puzzle = [\n    ...     ['w', '', '', ''],\n    ...     ['o', '', '', ''],\n    ...     ['r', '', '', ''],\n    ...     ['d', '', '', '']\n    ... ]\n    >>> remove_word(puzzle, 'word', 0, 0, True)\n    >>> puzzle\n    [['', '', '', ''], ['', '', '', ''], ['', '', '', ''], ['', '', '', '']]\n    \"\"\"\n    for i in range(len(word)):\n        if vertical:\n            puzzle[row + i][col] = \"\"\n        else:\n            puzzle[row][col + i] = \"\"\n\n\ndef solve_crossword(puzzle: list[list[str]], words: list[str]) -> bool:\n    \"\"\"\n    Solve the crossword puzzle using backtracking.\n\n    >>> puzzle = [\n    ...     ['', '', '', ''],\n    ...     ['', '', '', ''],\n    ...     ['', '', '', ''],\n    ...     ['', '', '', '']\n    ... ]\n\n    >>> words = ['word', 'four', 'more', 'last']\n    >>> solve_crossword(puzzle, words)\n    True\n    >>> puzzle = [\n    ...     ['', '', '', ''],\n    ...     ['', '', '', ''],\n    ...     ['', '', '', ''],\n    ...     ['', '', '', '']\n    ... ]\n    >>> words = ['word', 'four', 'more', 'paragraphs']\n    >>> solve_crossword(puzzle, words)\n    False\n    \"\"\"\n    for row in range(len(puzzle)):\n        for col in range(len(puzzle[0])):\n            if puzzle[row][col] == \"\":\n                for word in words:\n                    for vertical in [True, False]:\n                        if is_valid(puzzle, word, row, col, vertical):\n                            place_word(puzzle, word, row, col, vertical)\n                            words.remove(word)\n                            if solve_crossword(puzzle, words):\n                                return True\n                            words.append(word)\n                            remove_word(puzzle, word, row, col, vertical)\n                return False\n    return True\n\n\nif __name__ == \"__main__\":\n    PUZZLE = [[\"\"] * 3 for _ in range(3)]\n    WORDS = [\"cat\", \"dog\", \"car\"]\n\n    if solve_crossword(PUZZLE, WORDS):\n        print(\"Solution found:\")\n        for row in PUZZLE:\n            print(\" \".join(row))\n    else:\n        print(\"No solution found:\")\n"
  },
  {
    "path": "backtracking/generate_parentheses.py",
    "content": "\"\"\"\nauthor: Aayush Soni\nGiven n pairs of parentheses, write a function to generate all\ncombinations of well-formed parentheses.\nInput: n = 2\nOutput: [\"(())\",\"()()\"]\nLeetcode link: https://leetcode.com/problems/generate-parentheses/description/\n\"\"\"\n\n\ndef backtrack(\n    partial: str, open_count: int, close_count: int, n: int, result: list[str]\n) -> None:\n    \"\"\"\n    Generate valid combinations of balanced parentheses using recursion.\n\n    :param partial: A string representing the current combination.\n    :param open_count: An integer representing the count of open parentheses.\n    :param close_count: An integer representing the count of close parentheses.\n    :param n: An integer representing the total number of pairs.\n    :param result: A list to store valid combinations.\n    :return: None\n\n    This function uses recursion to explore all possible combinations,\n    ensuring that at each step, the parentheses remain balanced.\n\n    Example:\n    >>> result = []\n    >>> backtrack(\"\", 0, 0, 2, result)\n    >>> result\n    ['(())', '()()']\n    \"\"\"\n    if len(partial) == 2 * n:\n        # When the combination is complete, add it to the result.\n        result.append(partial)\n        return\n\n    if open_count < n:\n        # If we can add an open parenthesis, do so, and recurse.\n        backtrack(partial + \"(\", open_count + 1, close_count, n, result)\n\n    if close_count < open_count:\n        # If we can add a close parenthesis (it won't make the combination invalid),\n        # do so, and recurse.\n        backtrack(partial + \")\", open_count, close_count + 1, n, result)\n\n\ndef generate_parenthesis(n: int) -> list[str]:\n    \"\"\"\n    Generate valid combinations of balanced parentheses for a given n.\n\n    :param n: An integer representing the number of pairs of parentheses.\n    :return: A list of strings with valid combinations.\n\n    This function uses a recursive approach to generate the combinations.\n\n    Time Complexity: O(2^(2n)) - In the worst case, we have 2^(2n) combinations.\n    Space Complexity: O(n) - where 'n' is the number of pairs.\n\n    Example 1:\n    >>> generate_parenthesis(3)\n    ['((()))', '(()())', '(())()', '()(())', '()()()']\n\n    Example 2:\n    >>> generate_parenthesis(1)\n    ['()']\n\n    Example 3:\n    >>> generate_parenthesis(0)\n    ['']\n    \"\"\"\n\n    result: list[str] = []\n    backtrack(\"\", 0, 0, n, result)\n    return result\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "backtracking/generate_parentheses_iterative.py",
    "content": "def generate_parentheses_iterative(length: int) -> list[str]:\n    \"\"\"\n    Generate all valid combinations of parentheses (Iterative Approach).\n\n    The algorithm works as follows:\n    1. Initialize an empty list to store the combinations.\n    2. Initialize a stack to keep track of partial combinations.\n    3. Start with empty string and push it on stack along with\n       the counts of '(' and ')'.\n    4. While the stack is not empty:\n        a. Pop a partial combination and its open and close counts from the stack.\n        b. If the combination length is equal to 2*length, add it to the result.\n        c. If open count < length, push new combination with added '(' on stack.\n        d. If close count < open count, push new combination with added ')' on stack.\n    5. Return the result containing all valid combinations.\n\n    Args:\n        length: The desired length of the parentheses combinations\n\n    Returns:\n        A list of strings representing valid combinations of parentheses\n\n    Time Complexity:\n        O(2^(2*length))\n\n    Space Complexity:\n        O(2^(2*length))\n\n    >>> generate_parentheses_iterative(3)\n    ['()()()', '()(())', '(())()', '(()())', '((()))']\n    >>> generate_parentheses_iterative(2)\n    ['()()', '(())']\n    >>> generate_parentheses_iterative(1)\n    ['()']\n    >>> generate_parentheses_iterative(0)\n    ['']\n    \"\"\"\n    if length == 0:\n        return [\"\"]\n\n    result: list[str] = []\n    stack: list[tuple[str, int, int]] = []\n\n    # Each element in stack is a tuple (current_combination, open_count, close_count)\n    stack.append((\"\", 0, 0))\n\n    while stack:\n        current_combination, open_count, close_count = stack.pop()\n\n        if len(current_combination) == 2 * length:\n            result.append(current_combination)\n            continue\n\n        if open_count < length:\n            stack.append((current_combination + \"(\", open_count + 1, close_count))\n\n        if close_count < open_count:\n            stack.append((current_combination + \")\", open_count, close_count + 1))\n\n    return result\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    print(generate_parentheses_iterative(3))\n"
  },
  {
    "path": "backtracking/hamiltonian_cycle.py",
    "content": "\"\"\"\nA Hamiltonian cycle (Hamiltonian circuit) is a graph cycle\nthrough a graph that visits each node exactly once.\nDetermining whether such paths and cycles exist in graphs\nis the 'Hamiltonian path problem', which is NP-complete.\n\nWikipedia: https://en.wikipedia.org/wiki/Hamiltonian_path\n\"\"\"\n\n\ndef valid_connection(\n    graph: list[list[int]], next_ver: int, curr_ind: int, path: list[int]\n) -> bool:\n    \"\"\"\n    Checks whether it is possible to add next into path by validating 2 statements\n    1. There should be path between current and next vertex\n    2. Next vertex should not be in path\n    If both validations succeed we return True, saying that it is possible to connect\n    this vertices, otherwise we return False\n\n    Case 1:Use exact graph as in main function, with initialized values\n    >>> graph = [[0, 1, 0, 1, 0],\n    ...          [1, 0, 1, 1, 1],\n    ...          [0, 1, 0, 0, 1],\n    ...          [1, 1, 0, 0, 1],\n    ...          [0, 1, 1, 1, 0]]\n    >>> path = [0, -1, -1, -1, -1, 0]\n    >>> curr_ind = 1\n    >>> next_ver = 1\n    >>> valid_connection(graph, next_ver, curr_ind, path)\n    True\n\n    Case 2: Same graph, but trying to connect to node that is already in path\n    >>> path = [0, 1, 2, 4, -1, 0]\n    >>> curr_ind = 4\n    >>> next_ver = 1\n    >>> valid_connection(graph, next_ver, curr_ind, path)\n    False\n    \"\"\"\n\n    # 1. Validate that path exists between current and next vertices\n    if graph[path[curr_ind - 1]][next_ver] == 0:\n        return False\n\n    # 2. Validate that next vertex is not already in path\n    return not any(vertex == next_ver for vertex in path)\n\n\ndef util_hamilton_cycle(graph: list[list[int]], path: list[int], curr_ind: int) -> bool:\n    \"\"\"\n    Pseudo-Code\n    Base Case:\n    1. Check if we visited all of vertices\n        1.1 If last visited vertex has path to starting vertex return True either\n            return False\n    Recursive Step:\n    2. Iterate over each vertex\n        Check if next vertex is valid for transiting from current vertex\n            2.1 Remember next vertex as next transition\n            2.2 Do recursive call and check if going to this vertex solves problem\n            2.3 If next vertex leads to solution return True\n            2.4 Else backtrack, delete remembered vertex\n\n    Case 1: Use exact graph as in main function, with initialized values\n    >>> graph = [[0, 1, 0, 1, 0],\n    ...          [1, 0, 1, 1, 1],\n    ...          [0, 1, 0, 0, 1],\n    ...          [1, 1, 0, 0, 1],\n    ...          [0, 1, 1, 1, 0]]\n    >>> path = [0, -1, -1, -1, -1, 0]\n    >>> curr_ind = 1\n    >>> util_hamilton_cycle(graph, path, curr_ind)\n    True\n    >>> path\n    [0, 1, 2, 4, 3, 0]\n\n    Case 2: Use exact graph as in previous case, but in the properties taken from\n        middle of calculation\n    >>> graph = [[0, 1, 0, 1, 0],\n    ...          [1, 0, 1, 1, 1],\n    ...          [0, 1, 0, 0, 1],\n    ...          [1, 1, 0, 0, 1],\n    ...          [0, 1, 1, 1, 0]]\n    >>> path = [0, 1, 2, -1, -1, 0]\n    >>> curr_ind = 3\n    >>> util_hamilton_cycle(graph, path, curr_ind)\n    True\n    >>> path\n    [0, 1, 2, 4, 3, 0]\n    \"\"\"\n\n    # Base Case\n    if curr_ind == len(graph):\n        # return whether path exists between current and starting vertices\n        return graph[path[curr_ind - 1]][path[0]] == 1\n\n    # Recursive Step\n    for next_ver in range(len(graph)):\n        if valid_connection(graph, next_ver, curr_ind, path):\n            # Insert current vertex  into path as next transition\n            path[curr_ind] = next_ver\n            # Validate created path\n            if util_hamilton_cycle(graph, path, curr_ind + 1):\n                return True\n            # Backtrack\n            path[curr_ind] = -1\n    return False\n\n\ndef hamilton_cycle(graph: list[list[int]], start_index: int = 0) -> list[int]:\n    r\"\"\"\n    Wrapper function to call subroutine called util_hamilton_cycle,\n    which will either return array of vertices indicating hamiltonian cycle\n    or an empty list indicating that hamiltonian cycle was not found.\n    Case 1:\n    Following graph consists of 5 edges.\n    If we look closely, we can see that there are multiple Hamiltonian cycles.\n    For example one result is when we iterate like:\n    (0)->(1)->(2)->(4)->(3)->(0)\n\n    (0)---(1)---(2)\n     |   /   \\   |\n     |  /     \\  |\n     | /       \\ |\n     |/         \\|\n    (3)---------(4)\n    >>> graph = [[0, 1, 0, 1, 0],\n    ...          [1, 0, 1, 1, 1],\n    ...          [0, 1, 0, 0, 1],\n    ...          [1, 1, 0, 0, 1],\n    ...          [0, 1, 1, 1, 0]]\n    >>> hamilton_cycle(graph)\n    [0, 1, 2, 4, 3, 0]\n\n    Case 2:\n    Same Graph as it was in Case 1, changed starting index from default to 3\n\n    (0)---(1)---(2)\n     |   /   \\   |\n     |  /     \\  |\n     | /       \\ |\n     |/         \\|\n    (3)---------(4)\n    >>> graph = [[0, 1, 0, 1, 0],\n    ...          [1, 0, 1, 1, 1],\n    ...          [0, 1, 0, 0, 1],\n    ...          [1, 1, 0, 0, 1],\n    ...          [0, 1, 1, 1, 0]]\n    >>> hamilton_cycle(graph, 3)\n    [3, 0, 1, 2, 4, 3]\n\n    Case 3:\n    Following Graph is exactly what it was before, but edge 3-4 is removed.\n    Result is that there is no Hamiltonian Cycle anymore.\n\n    (0)---(1)---(2)\n     |   /   \\   |\n     |  /     \\  |\n     | /       \\ |\n     |/         \\|\n    (3)         (4)\n    >>> graph = [[0, 1, 0, 1, 0],\n    ...          [1, 0, 1, 1, 1],\n    ...          [0, 1, 0, 0, 1],\n    ...          [1, 1, 0, 0, 0],\n    ...          [0, 1, 1, 0, 0]]\n    >>> hamilton_cycle(graph,4)\n    []\n    \"\"\"\n\n    # Initialize path with -1, indicating that we have not visited them yet\n    path = [-1] * (len(graph) + 1)\n    # initialize start and end of path with starting index\n    path[0] = path[-1] = start_index\n    # evaluate and if we find answer return path either return empty array\n    return path if util_hamilton_cycle(graph, path, 1) else []\n"
  },
  {
    "path": "backtracking/knight_tour.py",
    "content": "# Knight Tour Intro: https://www.youtube.com/watch?v=ab_dY3dZFHM\n\nfrom __future__ import annotations\n\n\ndef get_valid_pos(position: tuple[int, int], n: int) -> list[tuple[int, int]]:\n    \"\"\"\n    Find all the valid positions a knight can move to from the current position.\n\n    >>> get_valid_pos((1, 3), 4)\n    [(2, 1), (0, 1), (3, 2)]\n    \"\"\"\n\n    y, x = position\n    positions = [\n        (y + 1, x + 2),\n        (y - 1, x + 2),\n        (y + 1, x - 2),\n        (y - 1, x - 2),\n        (y + 2, x + 1),\n        (y + 2, x - 1),\n        (y - 2, x + 1),\n        (y - 2, x - 1),\n    ]\n    permissible_positions = []\n\n    for inner_position in positions:\n        y_test, x_test = inner_position\n        if 0 <= y_test < n and 0 <= x_test < n:\n            permissible_positions.append(inner_position)\n\n    return permissible_positions\n\n\ndef is_complete(board: list[list[int]]) -> bool:\n    \"\"\"\n    Check if the board (matrix) has been completely filled with non-zero values.\n\n    >>> is_complete([[1]])\n    True\n\n    >>> is_complete([[1, 2], [3, 0]])\n    False\n    \"\"\"\n\n    return not any(elem == 0 for row in board for elem in row)\n\n\ndef open_knight_tour_helper(\n    board: list[list[int]], pos: tuple[int, int], curr: int\n) -> bool:\n    \"\"\"\n    Helper function to solve knight tour problem.\n    \"\"\"\n\n    if is_complete(board):\n        return True\n\n    for position in get_valid_pos(pos, len(board)):\n        y, x = position\n\n        if board[y][x] == 0:\n            board[y][x] = curr + 1\n            if open_knight_tour_helper(board, position, curr + 1):\n                return True\n            board[y][x] = 0\n\n    return False\n\n\ndef open_knight_tour(n: int) -> list[list[int]]:\n    \"\"\"\n    Find the solution for the knight tour problem for a board of size n. Raises\n    ValueError if the tour cannot be performed for the given size.\n\n    >>> open_knight_tour(1)\n    [[1]]\n\n    >>> open_knight_tour(2)\n    Traceback (most recent call last):\n        ...\n    ValueError: Open Knight Tour cannot be performed on a board of size 2\n    \"\"\"\n\n    board = [[0 for i in range(n)] for j in range(n)]\n\n    for i in range(n):\n        for j in range(n):\n            board[i][j] = 1\n            if open_knight_tour_helper(board, (i, j), 1):\n                return board\n            board[i][j] = 0\n\n    msg = f\"Open Knight Tour cannot be performed on a board of size {n}\"\n    raise ValueError(msg)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "backtracking/match_word_pattern.py",
    "content": "def match_word_pattern(pattern: str, input_string: str) -> bool:\n    \"\"\"\n    Determine if a given pattern matches a string using backtracking.\n\n    pattern: The pattern to match.\n    input_string: The string to match against the pattern.\n    return: True if the pattern matches the string, False otherwise.\n\n    >>> match_word_pattern(\"aba\", \"GraphTreesGraph\")\n    True\n\n    >>> match_word_pattern(\"xyx\", \"PythonRubyPython\")\n    True\n\n    >>> match_word_pattern(\"GG\", \"PythonJavaPython\")\n    False\n    \"\"\"\n\n    def backtrack(pattern_index: int, str_index: int) -> bool:\n        \"\"\"\n        >>> backtrack(0, 0)\n        True\n\n        >>> backtrack(0, 1)\n        True\n\n        >>> backtrack(0, 4)\n        False\n        \"\"\"\n        if pattern_index == len(pattern) and str_index == len(input_string):\n            return True\n        if pattern_index == len(pattern) or str_index == len(input_string):\n            return False\n        char = pattern[pattern_index]\n        if char in pattern_map:\n            mapped_str = pattern_map[char]\n            if input_string.startswith(mapped_str, str_index):\n                return backtrack(pattern_index + 1, str_index + len(mapped_str))\n            else:\n                return False\n        for end in range(str_index + 1, len(input_string) + 1):\n            substr = input_string[str_index:end]\n            if substr in str_map:\n                continue\n            pattern_map[char] = substr\n            str_map[substr] = char\n            if backtrack(pattern_index + 1, end):\n                return True\n            del pattern_map[char]\n            del str_map[substr]\n        return False\n\n    pattern_map: dict[str, str] = {}\n    str_map: dict[str, str] = {}\n    return backtrack(0, 0)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "backtracking/minimax.py",
    "content": "\"\"\"\nMinimax helps to achieve maximum score in a game by checking all possible moves\ndepth is current depth in game tree.\n\nnodeIndex is index of current node in scores[].\nif move is of maximizer return true else false\nleaves of game tree is stored in scores[]\nheight is maximum height of Game tree\n\"\"\"\n\nfrom __future__ import annotations\n\nimport math\n\n\ndef minimax(\n    depth: int, node_index: int, is_max: bool, scores: list[int], height: float\n) -> int:\n    \"\"\"\n    This function implements the minimax algorithm, which helps achieve the optimal\n    score for a player in a two-player game by checking all possible moves.\n    If the player is the maximizer, then the score is maximized.\n    If the player is the minimizer, then the score is minimized.\n\n    Parameters:\n    - depth: Current depth in the game tree.\n    - node_index: Index of the current node in the scores list.\n    - is_max: A boolean indicating whether the current move\n              is for the maximizer (True) or minimizer (False).\n    - scores: A list containing the scores of the leaves of the game tree.\n    - height: The maximum height of the game tree.\n\n    Returns:\n    - An integer representing the optimal score for the current player.\n\n    >>> import math\n    >>> scores = [90, 23, 6, 33, 21, 65, 123, 34423]\n    >>> height = math.log(len(scores), 2)\n    >>> minimax(0, 0, True, scores, height)\n    65\n    >>> minimax(-1, 0, True, scores, height)\n    Traceback (most recent call last):\n        ...\n    ValueError: Depth cannot be less than 0\n    >>> minimax(0, 0, True, [], 2)\n    Traceback (most recent call last):\n        ...\n    ValueError: Scores cannot be empty\n    >>> scores = [3, 5, 2, 9, 12, 5, 23, 23]\n    >>> height = math.log(len(scores), 2)\n    >>> minimax(0, 0, True, scores, height)\n    12\n    \"\"\"\n\n    if depth < 0:\n        raise ValueError(\"Depth cannot be less than 0\")\n    if len(scores) == 0:\n        raise ValueError(\"Scores cannot be empty\")\n\n    # Base case: If the current depth equals the height of the tree,\n    # return the score of the current node.\n    if depth == height:\n        return scores[node_index]\n\n    # If it's the maximizer's turn, choose the maximum score\n    # between the two possible moves.\n    if is_max:\n        return max(\n            minimax(depth + 1, node_index * 2, False, scores, height),\n            minimax(depth + 1, node_index * 2 + 1, False, scores, height),\n        )\n\n    # If it's the minimizer's turn, choose the minimum score\n    # between the two possible moves.\n    return min(\n        minimax(depth + 1, node_index * 2, True, scores, height),\n        minimax(depth + 1, node_index * 2 + 1, True, scores, height),\n    )\n\n\ndef main() -> None:\n    # Sample scores and height calculation\n    scores = [90, 23, 6, 33, 21, 65, 123, 34423]\n    height = math.log(len(scores), 2)\n\n    # Calculate and print the optimal value using the minimax algorithm\n    print(\"Optimal value : \", end=\"\")\n    print(minimax(0, 0, True, scores, height))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    main()\n"
  },
  {
    "path": "backtracking/n_queens.py",
    "content": "\"\"\"\n\nThe nqueens problem is of placing N queens on a N * N\nchess board such that no queen can attack any other queens placed\non that chess board.\nThis means that one queen cannot have any other queen on its horizontal, vertical and\ndiagonal lines.\n\n\"\"\"\n\nfrom __future__ import annotations\n\nsolution = []\n\n\ndef is_safe(board: list[list[int]], row: int, column: int) -> bool:\n    \"\"\"\n    This function returns a boolean value True if it is safe to place a queen there\n    considering the current state of the board.\n\n    Parameters:\n    board (2D matrix): The chessboard\n    row, column: Coordinates of the cell on the board\n\n    Returns:\n    Boolean Value\n\n    >>> is_safe([[0, 0, 0], [0, 0, 0], [0, 0, 0]], 1, 1)\n    True\n    >>> is_safe([[0, 1, 0], [0, 0, 0], [0, 0, 0]], 1, 1)\n    False\n    >>> is_safe([[1, 0, 0], [0, 0, 0], [0, 0, 0]], 1, 1)\n    False\n    >>> is_safe([[0, 0, 1], [0, 0, 0], [0, 0, 0]], 1, 1)\n    False\n    >>> is_safe([[1, 0, 0], [0, 0, 0], [0, 0, 0]], 1, 2)\n    True\n    >>> is_safe([[1, 0, 0], [0, 0, 0], [0, 0, 0]], 2, 1)\n    True\n    >>> is_safe([[0, 0, 0], [1, 0, 0], [0, 0, 0]], 0, 2)\n    True\n    >>> is_safe([[0, 0, 0], [1, 0, 0], [0, 0, 0]], 2, 2)\n    True\n    \"\"\"\n\n    n = len(board)  # Size of the board\n\n    # Check if there is any queen in the same upper column,\n    # left upper diagonal and right upper diagonal\n    return (\n        all(board[i][j] != 1 for i, j in zip(range(row), [column] * row))\n        and all(\n            board[i][j] != 1\n            for i, j in zip(range(row - 1, -1, -1), range(column - 1, -1, -1))\n        )\n        and all(\n            board[i][j] != 1\n            for i, j in zip(range(row - 1, -1, -1), range(column + 1, n))\n        )\n    )\n\n\ndef solve(board: list[list[int]], row: int) -> bool:\n    \"\"\"\n    This function creates a state space tree and calls the safe function until it\n    receives a False Boolean and terminates that branch and backtracks to the next\n    possible solution branch.\n    \"\"\"\n    if row >= len(board):\n        \"\"\"\n        If the row number exceeds N, we have a board with a successful combination\n        and that combination is appended to the solution list and the board is printed.\n        \"\"\"\n        solution.append(board)\n        printboard(board)\n        print()\n        return True\n    for i in range(len(board)):\n        \"\"\"\n        For every row, it iterates through each column to check if it is feasible to\n        place a queen there.\n        If all the combinations for that particular branch are successful, the board is\n        reinitialized for the next possible combination.\n        \"\"\"\n        if is_safe(board, row, i):\n            board[row][i] = 1\n            solve(board, row + 1)\n            board[row][i] = 0\n    return False\n\n\ndef printboard(board: list[list[int]]) -> None:\n    \"\"\"\n    Prints the boards that have a successful combination.\n    \"\"\"\n    for i in range(len(board)):\n        for j in range(len(board)):\n            if board[i][j] == 1:\n                print(\"Q\", end=\" \")  # Queen is present\n            else:\n                print(\".\", end=\" \")  # Empty cell\n        print()\n\n\n# Number of queens (e.g., n=8 for an 8x8 board)\nn = 8\nboard = [[0 for i in range(n)] for j in range(n)]\nsolve(board, 0)\nprint(\"The total number of solutions are:\", len(solution))\n"
  },
  {
    "path": "backtracking/n_queens_math.py",
    "content": "r\"\"\"\nProblem:\n\nThe n queens problem is: placing N queens on a N * N chess board such that no queen\ncan attack any other queens placed on that chess board.  This means that one queen\ncannot have any other queen on its horizontal, vertical and diagonal lines.\n\nSolution:\n\nTo solve this problem we will use simple math. First we know the queen can move in all\nthe possible ways, we can simplify it in this: vertical, horizontal, diagonal left and\n diagonal right.\n\nWe can visualize it like this:\n\nleft diagonal = \\\nright diagonal = /\n\nOn a chessboard vertical movement could be the rows and horizontal movement could be\nthe columns.\n\nIn programming we can use an array, and in this array each index could be the rows and\neach value in the array could be the column. For example:\n\n    . Q . .     We have this chessboard with one queen in each column and each queen\n    . . . Q     can't attack to each other.\n    Q . . .     The array for this example would look like this: [1, 3, 0, 2]\n    . . Q .\n\nSo if we use an array and we verify that each value in the array is different to each\nother we know that at least the queens can't attack each other in horizontal and\nvertical.\n\nAt this point we have it halfway completed and we will treat the chessboard as a\nCartesian plane.  Hereinafter we are going to remember basic math, so in the school we\nlearned this formula:\n\n    Slope of a line:\n\n           y2 - y1\n     m = ----------\n          x2 - x1\n\nThis formula allow us to get the slope. For the angles 45º (right diagonal) and 135º\n(left diagonal) this formula gives us m = 1, and m = -1 respectively.\n\nSee::\nhttps://www.enotes.com/homework-help/write-equation-line-that-hits-origin-45-degree-1474860\n\nThen we have this other formula:\n\nSlope intercept:\n\ny = mx + b\n\nb is where the line crosses the Y axis (to get more information see:\nhttps://www.mathsisfun.com/y_intercept.html), if we change the formula to solve for b\nwe would have:\n\ny - mx = b\n\nAnd since we already have the m values for the angles 45º and 135º, this formula would\nlook like this:\n\n45º: y - (1)x = b\n45º: y - x = b\n\n135º: y - (-1)x = b\n135º: y + x = b\n\ny = row\nx = column\n\nApplying these two formulas we can check if a queen in some position is being attacked\nfor another one or vice versa.\n\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef depth_first_search(\n    possible_board: list[int],\n    diagonal_right_collisions: list[int],\n    diagonal_left_collisions: list[int],\n    boards: list[list[str]],\n    n: int,\n) -> None:\n    \"\"\"\n    >>> boards = []\n    >>> depth_first_search([], [], [], boards, 4)\n    >>> for board in boards:\n    ...     print(board)\n    ['. Q . . ', '. . . Q ', 'Q . . . ', '. . Q . ']\n    ['. . Q . ', 'Q . . . ', '. . . Q ', '. Q . . ']\n    \"\"\"\n\n    # Get next row in the current board (possible_board) to fill it with a queen\n    row = len(possible_board)\n\n    # If row is equal to the size of the board it means there are a queen in each row in\n    # the current board (possible_board)\n    if row == n:\n        # We convert the variable possible_board that looks like this: [1, 3, 0, 2] to\n        # this: ['. Q . . ', '. . . Q ', 'Q . . . ', '. . Q . ']\n        boards.append([\". \" * i + \"Q \" + \". \" * (n - 1 - i) for i in possible_board])\n        return\n\n    # We iterate each column in the row to find all possible results in each row\n    for col in range(n):\n        # We apply that we learned previously. First we check that in the current board\n        # (possible_board) there are not other same value because if there is it means\n        # that there are a collision in vertical. Then we apply the two formulas we\n        # learned before:\n        #\n        # 45º: y - x = b or 45: row - col = b\n        # 135º: y + x = b or row + col = b.\n        #\n        # And we verify if the results of this two formulas not exist in their variables\n        # respectively.  (diagonal_right_collisions, diagonal_left_collisions)\n        #\n        # If any or these are True it means there is a collision so we continue to the\n        # next value in the for loop.\n        if (\n            col in possible_board\n            or row - col in diagonal_right_collisions\n            or row + col in diagonal_left_collisions\n        ):\n            continue\n\n        # If it is False we call dfs function again and we update the inputs\n        depth_first_search(\n            [*possible_board, col],\n            [*diagonal_right_collisions, row - col],\n            [*diagonal_left_collisions, row + col],\n            boards,\n            n,\n        )\n\n\ndef n_queens_solution(n: int) -> None:\n    boards: list[list[str]] = []\n    depth_first_search([], [], [], boards, n)\n\n    # Print all the boards\n    for board in boards:\n        for column in board:\n            print(column)\n        print(\"\")\n\n    print(len(boards), \"solutions were found.\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    n_queens_solution(4)\n"
  },
  {
    "path": "backtracking/power_sum.py",
    "content": "\"\"\"\nProblem source: https://www.hackerrank.com/challenges/the-power-sum/problem\nFind the number of ways that a given integer X, can be expressed as the sum\nof the Nth powers of unique, natural numbers. For example, if X=13 and N=2.\nWe have to find all combinations of unique squares adding up to 13.\nThe only solution is 2^2+3^2. Constraints: 1<=X<=1000, 2<=N<=10.\n\"\"\"\n\n\ndef backtrack(\n    needed_sum: int,\n    power: int,\n    current_number: int,\n    current_sum: int,\n    solutions_count: int,\n) -> tuple[int, int]:\n    \"\"\"\n    >>> backtrack(13, 2, 1, 0, 0)\n    (0, 1)\n    >>> backtrack(10, 2, 1, 0, 0)\n    (0, 1)\n    >>> backtrack(10, 3, 1, 0, 0)\n    (0, 0)\n    >>> backtrack(20, 2, 1, 0, 0)\n    (0, 1)\n    >>> backtrack(15, 10, 1, 0, 0)\n    (0, 0)\n    >>> backtrack(16, 2, 1, 0, 0)\n    (0, 1)\n    >>> backtrack(20, 1, 1, 0, 0)\n    (0, 64)\n    \"\"\"\n    if current_sum == needed_sum:\n        # If the sum of the powers is equal to needed_sum, then we have a solution.\n        solutions_count += 1\n        return current_sum, solutions_count\n\n    i_to_n = current_number**power\n    if current_sum + i_to_n <= needed_sum:\n        # If the sum of the powers is less than needed_sum, then continue adding powers.\n        current_sum += i_to_n\n        current_sum, solutions_count = backtrack(\n            needed_sum, power, current_number + 1, current_sum, solutions_count\n        )\n        current_sum -= i_to_n\n    if i_to_n < needed_sum:\n        # If the power of i is less than needed_sum, then try with the next power.\n        current_sum, solutions_count = backtrack(\n            needed_sum, power, current_number + 1, current_sum, solutions_count\n        )\n    return current_sum, solutions_count\n\n\ndef solve(needed_sum: int, power: int) -> int:\n    \"\"\"\n    >>> solve(13, 2)\n    1\n    >>> solve(10, 2)\n    1\n    >>> solve(10, 3)\n    0\n    >>> solve(20, 2)\n    1\n    >>> solve(15, 10)\n    0\n    >>> solve(16, 2)\n    1\n    >>> solve(20, 1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid input\n    needed_sum must be between 1 and 1000, power between 2 and 10.\n    >>> solve(-10, 5)\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid input\n    needed_sum must be between 1 and 1000, power between 2 and 10.\n    \"\"\"\n    if not (1 <= needed_sum <= 1000 and 2 <= power <= 10):\n        raise ValueError(\n            \"Invalid input\\n\"\n            \"needed_sum must be between 1 and 1000, power between 2 and 10.\"\n        )\n\n    return backtrack(needed_sum, power, 1, 0, 0)[1]  # Return the solutions_count\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "backtracking/rat_in_maze.py",
    "content": "from __future__ import annotations\n\n\ndef solve_maze(\n    maze: list[list[int]],\n    source_row: int,\n    source_column: int,\n    destination_row: int,\n    destination_column: int,\n) -> list[list[int]]:\n    \"\"\"\n    This method solves the \"rat in maze\" problem.\n    Parameters :\n        - maze: A two dimensional matrix of zeros and ones.\n        - source_row: The row index of the starting point.\n        - source_column: The column index of the starting point.\n        - destination_row: The row index of the destination point.\n        - destination_column: The column index of the destination point.\n    Returns:\n        - solution: A 2D matrix representing the solution path if it exists.\n    Raises:\n        - ValueError: If no solution exists or if the source or\n            destination coordinates are invalid.\n    Description:\n        This method navigates through a maze represented as an n by n matrix,\n        starting from a specified source cell and\n        aiming to reach a destination cell.\n        The maze consists of walls (1s) and open paths (0s).\n        By providing custom row and column values, the source and destination\n        cells can be adjusted.\n    >>> maze = [[0, 1, 0, 1, 1],\n    ...         [0, 0, 0, 0, 0],\n    ...         [1, 0, 1, 0, 1],\n    ...         [0, 0, 1, 0, 0],\n    ...         [1, 0, 0, 1, 0]]\n    >>> solve_maze(maze,0,0,len(maze)-1,len(maze)-1)    # doctest: +NORMALIZE_WHITESPACE\n    [[0, 1, 1, 1, 1],\n    [0, 0, 0, 0, 1],\n    [1, 1, 1, 0, 1],\n    [1, 1, 1, 0, 0],\n    [1, 1, 1, 1, 0]]\n\n    Note:\n        In the output maze, the zeros (0s) represent one of the possible\n        paths from the source to the destination.\n\n    >>> maze = [[0, 1, 0, 1, 1],\n    ...         [0, 0, 0, 0, 0],\n    ...         [0, 0, 0, 0, 1],\n    ...         [0, 0, 0, 0, 0],\n    ...         [0, 0, 0, 0, 0]]\n    >>> solve_maze(maze,0,0,len(maze)-1,len(maze)-1)    # doctest: +NORMALIZE_WHITESPACE\n    [[0, 1, 1, 1, 1],\n    [0, 1, 1, 1, 1],\n    [0, 1, 1, 1, 1],\n    [0, 1, 1, 1, 1],\n    [0, 0, 0, 0, 0]]\n\n    >>> maze = [[0, 0, 0],\n    ...         [0, 1, 0],\n    ...         [1, 0, 0]]\n    >>> solve_maze(maze,0,0,len(maze)-1,len(maze)-1)    # doctest: +NORMALIZE_WHITESPACE\n    [[0, 0, 0],\n    [1, 1, 0],\n    [1, 1, 0]]\n\n    >>> maze = [[1, 0, 0],\n    ...         [0, 1, 0],\n    ...         [1, 0, 0]]\n    >>> solve_maze(maze,0,1,len(maze)-1,len(maze)-1)    # doctest: +NORMALIZE_WHITESPACE\n    [[1, 0, 0],\n    [1, 1, 0],\n    [1, 1, 0]]\n\n    >>> maze = [[1, 1, 0, 0, 1, 0, 0, 1],\n    ...         [1, 0, 1, 0, 0, 1, 1, 1],\n    ...         [0, 1, 0, 1, 0, 0, 1, 0],\n    ...         [1, 1, 1, 0, 0, 1, 0, 1],\n    ...         [0, 1, 0, 0, 1, 0, 1, 1],\n    ...         [0, 0, 0, 1, 1, 1, 0, 1],\n    ...         [0, 1, 0, 1, 0, 1, 1, 1],\n    ...         [1, 1, 0, 0, 0, 0, 0, 1]]\n    >>> solve_maze(maze,0,2,len(maze)-1,2)  # doctest: +NORMALIZE_WHITESPACE\n    [[1, 1, 0, 0, 1, 1, 1, 1],\n    [1, 1, 1, 0, 0, 1, 1, 1],\n    [1, 1, 1, 1, 0, 1, 1, 1],\n    [1, 1, 1, 0, 0, 1, 1, 1],\n    [1, 1, 0, 0, 1, 1, 1, 1],\n    [1, 1, 0, 1, 1, 1, 1, 1],\n    [1, 1, 0, 1, 1, 1, 1, 1],\n    [1, 1, 0, 1, 1, 1, 1, 1]]\n    >>> maze = [[1, 0, 0],\n    ...         [0, 1, 1],\n    ...         [1, 0, 1]]\n    >>> solve_maze(maze,0,1,len(maze)-1,len(maze)-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: No solution exists!\n\n    >>> maze = [[0, 0],\n    ...         [1, 1]]\n    >>> solve_maze(maze,0,0,len(maze)-1,len(maze)-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: No solution exists!\n\n    >>> maze = [[0, 1],\n    ...         [1, 0]]\n    >>> solve_maze(maze,2,0,len(maze)-1,len(maze)-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid source or destination coordinates\n\n    >>> maze = [[1, 0, 0],\n    ...         [0, 1, 0],\n    ...         [1, 0, 0]]\n    >>> solve_maze(maze,0,1,len(maze),len(maze)-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid source or destination coordinates\n    \"\"\"\n    size = len(maze)\n    # Check if source and destination coordinates are Invalid.\n    if not (0 <= source_row <= size - 1 and 0 <= source_column <= size - 1) or (\n        not (0 <= destination_row <= size - 1 and 0 <= destination_column <= size - 1)\n    ):\n        raise ValueError(\"Invalid source or destination coordinates\")\n    # We need to create solution object to save path.\n    solutions = [[1 for _ in range(size)] for _ in range(size)]\n    solved = run_maze(\n        maze, source_row, source_column, destination_row, destination_column, solutions\n    )\n    if solved:\n        return solutions\n    else:\n        raise ValueError(\"No solution exists!\")\n\n\ndef run_maze(\n    maze: list[list[int]],\n    i: int,\n    j: int,\n    destination_row: int,\n    destination_column: int,\n    solutions: list[list[int]],\n) -> bool:\n    \"\"\"\n    This method is recursive starting from (i, j) and going in one of four directions:\n    up, down, left, right.\n    If a path is found to destination it returns True otherwise it returns False.\n    Parameters\n        maze: A two dimensional matrix of zeros and ones.\n        i, j : coordinates of matrix\n        solutions: A two dimensional matrix of solutions.\n    Returns:\n        Boolean if path is found True, Otherwise False.\n    \"\"\"\n    size = len(maze)\n    # Final check point.\n    if i == destination_row and j == destination_column and maze[i][j] == 0:\n        solutions[i][j] = 0\n        return True\n\n    lower_flag = (not i < 0) and (not j < 0)  # Check lower bounds\n    upper_flag = (i < size) and (j < size)  # Check upper bounds\n\n    if lower_flag and upper_flag:\n        # check for already visited and block points.\n        block_flag = (solutions[i][j]) and (not maze[i][j])\n        if block_flag:\n            # check visited\n            solutions[i][j] = 0\n\n            # check for directions\n            if (\n                run_maze(maze, i + 1, j, destination_row, destination_column, solutions)\n                or run_maze(\n                    maze, i, j + 1, destination_row, destination_column, solutions\n                )\n                or run_maze(\n                    maze, i - 1, j, destination_row, destination_column, solutions\n                )\n                or run_maze(\n                    maze, i, j - 1, destination_row, destination_column, solutions\n                )\n            ):\n                return True\n\n            solutions[i][j] = 1\n            return False\n    return False\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod(optionflags=doctest.NORMALIZE_WHITESPACE)\n"
  },
  {
    "path": "backtracking/sudoku.py",
    "content": "\"\"\"\nGiven a partially filled 9x9 2D array, the objective is to fill a 9x9\nsquare grid with digits numbered 1 to 9, so that every row, column, and\nand each of the nine 3x3 sub-grids contains all of the digits.\n\nThis can be solved using Backtracking and is similar to n-queens.\nWe check to see if a cell is safe or not and recursively call the\nfunction on the next column to see if it returns True. if yes, we\nhave solved the puzzle. else, we backtrack and place another number\nin that cell and repeat this process.\n\"\"\"\n\nfrom __future__ import annotations\n\nMatrix = list[list[int]]\n\n# assigning initial values to the grid\ninitial_grid: Matrix = [\n    [3, 0, 6, 5, 0, 8, 4, 0, 0],\n    [5, 2, 0, 0, 0, 0, 0, 0, 0],\n    [0, 8, 7, 0, 0, 0, 0, 3, 1],\n    [0, 0, 3, 0, 1, 0, 0, 8, 0],\n    [9, 0, 0, 8, 6, 3, 0, 0, 5],\n    [0, 5, 0, 0, 9, 0, 6, 0, 0],\n    [1, 3, 0, 0, 0, 0, 2, 5, 0],\n    [0, 0, 0, 0, 0, 0, 0, 7, 4],\n    [0, 0, 5, 2, 0, 6, 3, 0, 0],\n]\n\n# a grid with no solution\nno_solution: Matrix = [\n    [5, 0, 6, 5, 0, 8, 4, 0, 3],\n    [5, 2, 0, 0, 0, 0, 0, 0, 2],\n    [1, 8, 7, 0, 0, 0, 0, 3, 1],\n    [0, 0, 3, 0, 1, 0, 0, 8, 0],\n    [9, 0, 0, 8, 6, 3, 0, 0, 5],\n    [0, 5, 0, 0, 9, 0, 6, 0, 0],\n    [1, 3, 0, 0, 0, 0, 2, 5, 0],\n    [0, 0, 0, 0, 0, 0, 0, 7, 4],\n    [0, 0, 5, 2, 0, 6, 3, 0, 0],\n]\n\n\ndef is_safe(grid: Matrix, row: int, column: int, n: int) -> bool:\n    \"\"\"\n    This function checks the grid to see if each row,\n    column, and the 3x3 subgrids contain the digit 'n'.\n    It returns False if it is not 'safe' (a duplicate digit\n    is found) else returns True if it is 'safe'\n    \"\"\"\n    for i in range(9):\n        if n in {grid[row][i], grid[i][column]}:\n            return False\n\n    for i in range(3):\n        for j in range(3):\n            if grid[(row - row % 3) + i][(column - column % 3) + j] == n:\n                return False\n\n    return True\n\n\ndef find_empty_location(grid: Matrix) -> tuple[int, int] | None:\n    \"\"\"\n    This function finds an empty location so that we can assign a number\n    for that particular row and column.\n    \"\"\"\n    for i in range(9):\n        for j in range(9):\n            if grid[i][j] == 0:\n                return i, j\n    return None\n\n\ndef sudoku(grid: Matrix) -> Matrix | None:\n    \"\"\"\n    Takes a partially filled-in grid and attempts to assign values to\n    all unassigned locations in such a way to meet the requirements\n    for Sudoku solution (non-duplication across rows, columns, and boxes)\n\n    >>> sudoku(initial_grid)  # doctest: +NORMALIZE_WHITESPACE\n    [[3, 1, 6, 5, 7, 8, 4, 9, 2],\n     [5, 2, 9, 1, 3, 4, 7, 6, 8],\n     [4, 8, 7, 6, 2, 9, 5, 3, 1],\n     [2, 6, 3, 4, 1, 5, 9, 8, 7],\n     [9, 7, 4, 8, 6, 3, 1, 2, 5],\n     [8, 5, 1, 7, 9, 2, 6, 4, 3],\n     [1, 3, 8, 9, 4, 7, 2, 5, 6],\n     [6, 9, 2, 3, 5, 1, 8, 7, 4],\n     [7, 4, 5, 2, 8, 6, 3, 1, 9]]\n     >>> sudoku(no_solution) is None\n     True\n    \"\"\"\n    if location := find_empty_location(grid):\n        row, column = location\n    else:\n        # If the location is ``None``, then the grid is solved.\n        return grid\n\n    for digit in range(1, 10):\n        if is_safe(grid, row, column, digit):\n            grid[row][column] = digit\n\n            if sudoku(grid) is not None:\n                return grid\n\n            grid[row][column] = 0\n\n    return None\n\n\ndef print_solution(grid: Matrix) -> None:\n    \"\"\"\n    A function to print the solution in the form\n    of a 9x9 grid\n    \"\"\"\n    for row in grid:\n        for cell in row:\n            print(cell, end=\" \")\n        print()\n\n\nif __name__ == \"__main__\":\n    # make a copy of grid so that you can compare with the unmodified grid\n    for example_grid in (initial_grid, no_solution):\n        print(\"\\nExample grid:\\n\" + \"=\" * 20)\n        print_solution(example_grid)\n        print(\"\\nExample grid solution:\")\n        solution = sudoku(example_grid)\n        if solution is not None:\n            print_solution(solution)\n        else:\n            print(\"Cannot find a solution.\")\n"
  },
  {
    "path": "backtracking/sum_of_subsets.py",
    "content": "\"\"\"\nThe sum-of-subsets problem states that a set of non-negative integers, and a\nvalue M, determine all possible subsets of the given set whose summation sum\nequal to given M.\n\nSummation of the chosen numbers must be equal to given number M and one number\ncan be used only once.\n\"\"\"\n\n\ndef generate_sum_of_subsets_solutions(nums: list[int], max_sum: int) -> list[list[int]]:\n    \"\"\"\n    The main function. For list of numbers 'nums' find the subsets with sum\n    equal to 'max_sum'\n\n    >>> generate_sum_of_subsets_solutions(nums=[3, 34, 4, 12, 5, 2], max_sum=9)\n    [[3, 4, 2], [4, 5]]\n    >>> generate_sum_of_subsets_solutions(nums=[3, 34, 4, 12, 5, 2], max_sum=3)\n    [[3]]\n    >>> generate_sum_of_subsets_solutions(nums=[3, 34, 4, 12, 5, 2], max_sum=1)\n    []\n    \"\"\"\n\n    result: list[list[int]] = []\n    path: list[int] = []\n    num_index = 0\n    remaining_nums_sum = sum(nums)\n    create_state_space_tree(nums, max_sum, num_index, path, result, remaining_nums_sum)\n    return result\n\n\ndef create_state_space_tree(\n    nums: list[int],\n    max_sum: int,\n    num_index: int,\n    path: list[int],\n    result: list[list[int]],\n    remaining_nums_sum: int,\n) -> None:\n    \"\"\"\n    Creates a state space tree to iterate through each branch using DFS.\n    It terminates the branching of a node when any of the two conditions\n    given below satisfy.\n    This algorithm follows depth-fist-search and backtracks when the node is not\n    branchable.\n\n    >>> path = []\n    >>> result = []\n    >>> create_state_space_tree(\n    ...     nums=[1],\n    ...     max_sum=1,\n    ...     num_index=0,\n    ...     path=path,\n    ...     result=result,\n    ...     remaining_nums_sum=1)\n    >>> path\n    []\n    >>> result\n    [[1]]\n    \"\"\"\n\n    if sum(path) > max_sum or (remaining_nums_sum + sum(path)) < max_sum:\n        return\n    if sum(path) == max_sum:\n        result.append(path)\n        return\n    for index in range(num_index, len(nums)):\n        create_state_space_tree(\n            nums,\n            max_sum,\n            index + 1,\n            [*path, nums[index]],\n            result,\n            remaining_nums_sum - nums[index],\n        )\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "backtracking/word_break.py",
    "content": "\"\"\"\nWord Break Problem is a well-known problem in computer science.\nGiven a string and a dictionary of words, the task is to determine if\nthe string can be segmented into a sequence of one or more dictionary words.\n\nWikipedia: https://en.wikipedia.org/wiki/Word_break_problem\n\"\"\"\n\n\ndef backtrack(input_string: str, word_dict: set[str], start: int) -> bool:\n    \"\"\"\n    Helper function that uses backtracking to determine if a valid\n    word segmentation is possible starting from index 'start'.\n\n    Parameters:\n    input_string (str): The input string to be segmented.\n    word_dict (set[str]): A set of valid dictionary words.\n    start (int): The starting index of the substring to be checked.\n\n    Returns:\n    bool: True if a valid segmentation is possible, otherwise False.\n\n    Example:\n    >>> backtrack(\"leetcode\", {\"leet\", \"code\"}, 0)\n    True\n\n    >>> backtrack(\"applepenapple\", {\"apple\", \"pen\"}, 0)\n    True\n\n    >>> backtrack(\"catsandog\", {\"cats\", \"dog\", \"sand\", \"and\", \"cat\"}, 0)\n    False\n    \"\"\"\n\n    # Base case: if the starting index has reached the end of the string\n    if start == len(input_string):\n        return True\n\n    # Try every possible substring from 'start' to 'end'\n    for end in range(start + 1, len(input_string) + 1):\n        if input_string[start:end] in word_dict and backtrack(\n            input_string, word_dict, end\n        ):\n            return True\n\n    return False\n\n\ndef word_break(input_string: str, word_dict: set[str]) -> bool:\n    \"\"\"\n    Determines if the input string can be segmented into a sequence of\n    valid dictionary words using backtracking.\n\n    Parameters:\n    input_string (str): The input string to segment.\n    word_dict (set[str]): The set of valid words.\n\n    Returns:\n    bool: True if the string can be segmented into valid words, otherwise False.\n\n    Example:\n    >>> word_break(\"leetcode\", {\"leet\", \"code\"})\n    True\n\n    >>> word_break(\"applepenapple\", {\"apple\", \"pen\"})\n    True\n\n    >>> word_break(\"catsandog\", {\"cats\", \"dog\", \"sand\", \"and\", \"cat\"})\n    False\n\n    >>> word_break(\"applepenapple\", {})\n    False\n    \"\"\"\n\n    return backtrack(input_string, word_dict, 0)\n"
  },
  {
    "path": "backtracking/word_ladder.py",
    "content": "\"\"\"\nWord Ladder is a classic problem in computer science.\nThe problem is to transform a start word into an end word\nby changing one letter at a time.\nEach intermediate word must be a valid word from a given list of words.\nThe goal is to find a transformation sequence\nfrom the start word to the end word.\n\nWikipedia: https://en.wikipedia.org/wiki/Word_ladder\n\"\"\"\n\nimport string\n\n\ndef backtrack(\n    current_word: str, path: list[str], end_word: str, word_set: set[str]\n) -> list[str]:\n    \"\"\"\n    Helper function to perform backtracking to find the transformation\n    from the current_word to the end_word.\n\n    Parameters:\n    current_word (str): The current word in the transformation sequence.\n    path (list[str]): The list of transformations from begin_word to current_word.\n    end_word (str): The target word for transformation.\n    word_set (set[str]): The set of valid words for transformation.\n\n    Returns:\n    list[str]: The list of transformations from begin_word to end_word.\n               Returns an empty list if there is no valid\n                transformation from current_word to end_word.\n\n    Example:\n    >>> backtrack(\"hit\", [\"hit\"], \"cog\", {\"hot\", \"dot\", \"dog\", \"lot\", \"log\", \"cog\"})\n    ['hit', 'hot', 'dot', 'lot', 'log', 'cog']\n\n    >>> backtrack(\"hit\", [\"hit\"], \"cog\", {\"hot\", \"dot\", \"dog\", \"lot\", \"log\"})\n    []\n\n    >>> backtrack(\"lead\", [\"lead\"], \"gold\", {\"load\", \"goad\", \"gold\", \"lead\", \"lord\"})\n    ['lead', 'lead', 'load', 'goad', 'gold']\n\n    >>> backtrack(\"game\", [\"game\"], \"code\", {\"came\", \"cage\", \"code\", \"cade\", \"gave\"})\n    ['game', 'came', 'cade', 'code']\n    \"\"\"\n\n    # Base case: If the current word is the end word, return the path\n    if current_word == end_word:\n        return path\n\n    # Try all possible single-letter transformations\n    for i in range(len(current_word)):\n        for c in string.ascii_lowercase:  # Try changing each letter\n            transformed_word = current_word[:i] + c + current_word[i + 1 :]\n            if transformed_word in word_set:\n                word_set.remove(transformed_word)\n                # Recur with the new word added to the path\n                result = backtrack(\n                    transformed_word, [*path, transformed_word], end_word, word_set\n                )\n                if result:  # valid transformation found\n                    return result\n                word_set.add(transformed_word)  # backtrack\n\n    return []  # No valid transformation found\n\n\ndef word_ladder(begin_word: str, end_word: str, word_set: set[str]) -> list[str]:\n    \"\"\"\n    Solve the Word Ladder problem using Backtracking and return\n    the list of transformations from begin_word to end_word.\n\n    Parameters:\n    begin_word (str): The word from which the transformation starts.\n    end_word (str): The target word for transformation.\n    word_list (list[str]): The list of valid words for transformation.\n\n    Returns:\n    list[str]: The list of transformations from begin_word to end_word.\n               Returns an empty list if there is no valid transformation.\n\n    Example:\n    >>> word_ladder(\"hit\", \"cog\", [\"hot\", \"dot\", \"dog\", \"lot\", \"log\", \"cog\"])\n    ['hit', 'hot', 'dot', 'lot', 'log', 'cog']\n\n    >>> word_ladder(\"hit\", \"cog\", [\"hot\", \"dot\", \"dog\", \"lot\", \"log\"])\n    []\n\n    >>> word_ladder(\"lead\", \"gold\", [\"load\", \"goad\", \"gold\", \"lead\", \"lord\"])\n    ['lead', 'lead', 'load', 'goad', 'gold']\n\n    >>> word_ladder(\"game\", \"code\", [\"came\", \"cage\", \"code\", \"cade\", \"gave\"])\n    ['game', 'came', 'cade', 'code']\n    \"\"\"\n\n    if end_word not in word_set:  # no valid transformation possible\n        return []\n\n    # Perform backtracking starting from the begin_word\n    return backtrack(begin_word, [begin_word], end_word, word_set)\n"
  },
  {
    "path": "backtracking/word_search.py",
    "content": "\"\"\"\nAuthor  : Alexander Pantyukhin\nDate    : November 24, 2022\n\nTask:\nGiven an m x n grid of characters board and a string word,\nreturn true if word exists in the grid.\n\nThe word can be constructed from letters of sequentially adjacent cells,\nwhere adjacent cells are horizontally or vertically neighboring.\nThe same letter cell may not be used more than once.\n\nExample:\n\nMatrix:\n---------\n|A|B|C|E|\n|S|F|C|S|\n|A|D|E|E|\n---------\n\nWord:\n\"ABCCED\"\n\nResult:\nTrue\n\nImplementation notes: Use backtracking approach.\nAt each point, check all neighbors to try to find the next letter of the word.\n\nleetcode: https://leetcode.com/problems/word-search/\n\n\"\"\"\n\n\ndef get_point_key(len_board: int, len_board_column: int, row: int, column: int) -> int:\n    \"\"\"\n    Returns the hash key of matrix indexes.\n\n    >>> get_point_key(10, 20, 1, 0)\n    200\n    \"\"\"\n\n    return len_board * len_board_column * row + column\n\n\ndef exits_word(\n    board: list[list[str]],\n    word: str,\n    row: int,\n    column: int,\n    word_index: int,\n    visited_points_set: set[int],\n) -> bool:\n    \"\"\"\n    Return True if it's possible to search the word suffix\n    starting from the word_index.\n\n    >>> exits_word([[\"A\"]], \"B\", 0, 0, 0, set())\n    False\n    \"\"\"\n\n    if board[row][column] != word[word_index]:\n        return False\n\n    if word_index == len(word) - 1:\n        return True\n\n    traverts_directions = [(0, 1), (0, -1), (-1, 0), (1, 0)]\n    len_board = len(board)\n    len_board_column = len(board[0])\n    for direction in traverts_directions:\n        next_i = row + direction[0]\n        next_j = column + direction[1]\n        if not (0 <= next_i < len_board and 0 <= next_j < len_board_column):\n            continue\n\n        key = get_point_key(len_board, len_board_column, next_i, next_j)\n        if key in visited_points_set:\n            continue\n\n        visited_points_set.add(key)\n        if exits_word(board, word, next_i, next_j, word_index + 1, visited_points_set):\n            return True\n\n        visited_points_set.remove(key)\n\n    return False\n\n\ndef word_exists(board: list[list[str]], word: str) -> bool:\n    \"\"\"\n    >>> word_exists([[\"A\",\"B\",\"C\",\"E\"],[\"S\",\"F\",\"C\",\"S\"],[\"A\",\"D\",\"E\",\"E\"]], \"ABCCED\")\n    True\n    >>> word_exists([[\"A\",\"B\",\"C\",\"E\"],[\"S\",\"F\",\"C\",\"S\"],[\"A\",\"D\",\"E\",\"E\"]], \"SEE\")\n    True\n    >>> word_exists([[\"A\",\"B\",\"C\",\"E\"],[\"S\",\"F\",\"C\",\"S\"],[\"A\",\"D\",\"E\",\"E\"]], \"ABCB\")\n    False\n    >>> word_exists([[\"A\"]], \"A\")\n    True\n    >>> word_exists([[\"B\", \"A\", \"A\"], [\"A\", \"A\", \"A\"], [\"A\", \"B\", \"A\"]], \"ABB\")\n    False\n    >>> word_exists([[\"A\"]], 123)\n    Traceback (most recent call last):\n        ...\n    ValueError: The word parameter should be a string of length greater than 0.\n    >>> word_exists([[\"A\"]], \"\")\n    Traceback (most recent call last):\n        ...\n    ValueError: The word parameter should be a string of length greater than 0.\n    >>> word_exists([[]], \"AB\")\n    Traceback (most recent call last):\n        ...\n    ValueError: The board should be a non empty matrix of single chars strings.\n    >>> word_exists([], \"AB\")\n    Traceback (most recent call last):\n        ...\n    ValueError: The board should be a non empty matrix of single chars strings.\n    >>> word_exists([[\"A\"], [21]], \"AB\")\n    Traceback (most recent call last):\n        ...\n    ValueError: The board should be a non empty matrix of single chars strings.\n    \"\"\"\n\n    # Validate board\n    board_error_message = (\n        \"The board should be a non empty matrix of single chars strings.\"\n    )\n\n    len_board = len(board)\n    if not isinstance(board, list) or len(board) == 0:\n        raise ValueError(board_error_message)\n\n    for row in board:\n        if not isinstance(row, list) or len(row) == 0:\n            raise ValueError(board_error_message)\n\n        for item in row:\n            if not isinstance(item, str) or len(item) != 1:\n                raise ValueError(board_error_message)\n\n    # Validate word\n    if not isinstance(word, str) or len(word) == 0:\n        raise ValueError(\n            \"The word parameter should be a string of length greater than 0.\"\n        )\n\n    len_board_column = len(board[0])\n    for i in range(len_board):\n        for j in range(len_board_column):\n            if exits_word(\n                board, word, i, j, 0, {get_point_key(len_board, len_board_column, i, j)}\n            ):\n                return True\n\n    return False\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "bit_manipulation/README.md",
    "content": "# Bit manipulation\n\nBit 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.\n\n* <https://en.wikipedia.org/wiki/Bit_manipulation>\n* <https://docs.python.org/3/reference/expressions.html#binary-bitwise-operations>\n* <https://docs.python.org/3/reference/expressions.html#unary-arithmetic-and-bitwise-operations>\n* <https://docs.python.org/3/library/stdtypes.html#bitwise-operations-on-integer-types>\n* <https://wiki.python.org/moin/BitManipulation>\n* <https://wiki.python.org/moin/BitwiseOperators>\n* <https://www.tutorialspoint.com/python3/bitwise_operators_example.htm>\n"
  },
  {
    "path": "bit_manipulation/__init__.py",
    "content": ""
  },
  {
    "path": "bit_manipulation/binary_and_operator.py",
    "content": "# https://www.tutorialspoint.com/python3/bitwise_operators_example.htm\n\n\ndef binary_and(a: int, b: int) -> str:\n    \"\"\"\n    Take in 2 integers, convert them to binary,\n    return a binary number that is the\n    result of a binary and operation on the integers provided.\n\n    >>> binary_and(25, 32)\n    '0b000000'\n    >>> binary_and(37, 50)\n    '0b100000'\n    >>> binary_and(21, 30)\n    '0b10100'\n    >>> binary_and(58, 73)\n    '0b0001000'\n    >>> binary_and(0, 255)\n    '0b00000000'\n    >>> binary_and(256, 256)\n    '0b100000000'\n    >>> binary_and(0, -1)\n    Traceback (most recent call last):\n        ...\n    ValueError: the value of both inputs must be positive\n    >>> binary_and(0, 1.1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Unknown format code 'b' for object of type 'float'\n    >>> binary_and(\"0\", \"1\")\n    Traceback (most recent call last):\n        ...\n    TypeError: '<' not supported between instances of 'str' and 'int'\n    \"\"\"\n    if a < 0 or b < 0:\n        raise ValueError(\"the value of both inputs must be positive\")\n\n    a_binary = format(a, \"b\")\n    b_binary = format(b, \"b\")\n\n    max_len = max(len(a_binary), len(b_binary))\n\n    return \"0b\" + \"\".join(\n        str(int(char_a == \"1\" and char_b == \"1\"))\n        for char_a, char_b in zip(a_binary.zfill(max_len), b_binary.zfill(max_len))\n    )\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "bit_manipulation/binary_coded_decimal.py",
    "content": "def binary_coded_decimal(number: int) -> str:\n    \"\"\"\n    Find binary coded decimal (bcd) of integer base 10.\n    Each digit of the number is represented by a 4-bit binary.\n    Example:\n    >>> binary_coded_decimal(-2)\n    '0b0000'\n    >>> binary_coded_decimal(-1)\n    '0b0000'\n    >>> binary_coded_decimal(0)\n    '0b0000'\n    >>> binary_coded_decimal(3)\n    '0b0011'\n    >>> binary_coded_decimal(2)\n    '0b0010'\n    >>> binary_coded_decimal(12)\n    '0b00010010'\n    >>> binary_coded_decimal(987)\n    '0b100110000111'\n    \"\"\"\n    return \"0b\" + \"\".join(\n        str(bin(int(digit)))[2:].zfill(4) for digit in str(max(0, number))\n    )\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "bit_manipulation/binary_count_setbits.py",
    "content": "def binary_count_setbits(a: int) -> int:\n    \"\"\"\n    Take in 1 integer, return a number that is\n    the number of 1's in binary representation of that number.\n\n    >>> binary_count_setbits(25)\n    3\n    >>> binary_count_setbits(36)\n    2\n    >>> binary_count_setbits(16)\n    1\n    >>> binary_count_setbits(58)\n    4\n    >>> binary_count_setbits(4294967295)\n    32\n    >>> binary_count_setbits(0)\n    0\n    >>> binary_count_setbits(-10)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input value must be a positive integer\n    >>> binary_count_setbits(0.8)\n    Traceback (most recent call last):\n        ...\n    TypeError: Input value must be a 'int' type\n    >>> binary_count_setbits(\"0\")\n    Traceback (most recent call last):\n        ...\n    TypeError: '<' not supported between instances of 'str' and 'int'\n    \"\"\"\n    if a < 0:\n        raise ValueError(\"Input value must be a positive integer\")\n    elif isinstance(a, float):\n        raise TypeError(\"Input value must be a 'int' type\")\n    return bin(a).count(\"1\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "bit_manipulation/binary_count_trailing_zeros.py",
    "content": "from math import log2\n\n\ndef binary_count_trailing_zeros(a: int) -> int:\n    \"\"\"\n    Take in 1 integer, return a number that is\n    the number of trailing zeros in binary representation of that number.\n\n    >>> binary_count_trailing_zeros(25)\n    0\n    >>> binary_count_trailing_zeros(36)\n    2\n    >>> binary_count_trailing_zeros(16)\n    4\n    >>> binary_count_trailing_zeros(58)\n    1\n    >>> binary_count_trailing_zeros(4294967296)\n    32\n    >>> binary_count_trailing_zeros(0)\n    0\n    >>> binary_count_trailing_zeros(-10)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input value must be a positive integer\n    >>> binary_count_trailing_zeros(0.8)\n    Traceback (most recent call last):\n        ...\n    TypeError: Input value must be a 'int' type\n    >>> binary_count_trailing_zeros(\"0\")\n    Traceback (most recent call last):\n        ...\n    TypeError: '<' not supported between instances of 'str' and 'int'\n    \"\"\"\n    if a < 0:\n        raise ValueError(\"Input value must be a positive integer\")\n    elif isinstance(a, float):\n        raise TypeError(\"Input value must be a 'int' type\")\n    return 0 if (a == 0) else int(log2(a & -a))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "bit_manipulation/binary_or_operator.py",
    "content": "# https://www.tutorialspoint.com/python3/bitwise_operators_example.htm\r\n\r\n\r\ndef binary_or(a: int, b: int) -> str:\r\n    \"\"\"\r\n    Take in 2 integers, convert them to binary, and return a binary number that is the\r\n    result of a binary or operation on the integers provided.\r\n\r\n    >>> binary_or(25, 32)\r\n    '0b111001'\r\n    >>> binary_or(37, 50)\r\n    '0b110111'\r\n    >>> binary_or(21, 30)\r\n    '0b11111'\r\n    >>> binary_or(58, 73)\r\n    '0b1111011'\r\n    >>> binary_or(0, 255)\r\n    '0b11111111'\r\n    >>> binary_or(0, 256)\r\n    '0b100000000'\r\n    >>> binary_or(0, -1)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: the value of both inputs must be positive\r\n    >>> binary_or(0, 1.1)\r\n    Traceback (most recent call last):\r\n        ...\r\n    TypeError: 'float' object cannot be interpreted as an integer\r\n    >>> binary_or(\"0\", \"1\")\r\n    Traceback (most recent call last):\r\n        ...\r\n    TypeError: '<' not supported between instances of 'str' and 'int'\r\n    \"\"\"\r\n    if a < 0 or b < 0:\r\n        raise ValueError(\"the value of both inputs must be positive\")\r\n    a_binary = str(bin(a))[2:]  # remove the leading \"0b\"\r\n    b_binary = str(bin(b))[2:]\r\n    max_len = max(len(a_binary), len(b_binary))\r\n    return \"0b\" + \"\".join(\r\n        str(int(\"1\" in (char_a, char_b)))\r\n        for char_a, char_b in zip(a_binary.zfill(max_len), b_binary.zfill(max_len))\r\n    )\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n"
  },
  {
    "path": "bit_manipulation/binary_shifts.py",
    "content": "# Information on binary shifts:\n# https://docs.python.org/3/library/stdtypes.html#bitwise-operations-on-integer-types\n# https://www.interviewcake.com/concept/java/bit-shift\n\n\ndef logical_left_shift(number: int, shift_amount: int) -> str:\n    \"\"\"\n    Take in 2 positive integers.\n    'number' is the integer to be logically left shifted 'shift_amount' times.\n    i.e. (number << shift_amount)\n    Return the shifted binary representation.\n\n    >>> logical_left_shift(0, 1)\n    '0b00'\n    >>> logical_left_shift(1, 1)\n    '0b10'\n    >>> logical_left_shift(1, 5)\n    '0b100000'\n    >>> logical_left_shift(17, 2)\n    '0b1000100'\n    >>> logical_left_shift(1983, 4)\n    '0b111101111110000'\n    >>> logical_left_shift(1, -1)\n    Traceback (most recent call last):\n        ...\n    ValueError: both inputs must be positive integers\n    \"\"\"\n    if number < 0 or shift_amount < 0:\n        raise ValueError(\"both inputs must be positive integers\")\n\n    binary_number = str(bin(number))\n    binary_number += \"0\" * shift_amount\n    return binary_number\n\n\ndef logical_right_shift(number: int, shift_amount: int) -> str:\n    \"\"\"\n    Take in positive 2 integers.\n    'number' is the integer to be logically right shifted 'shift_amount' times.\n    i.e. (number >>> shift_amount)\n    Return the shifted binary representation.\n\n    >>> logical_right_shift(0, 1)\n    '0b0'\n    >>> logical_right_shift(1, 1)\n    '0b0'\n    >>> logical_right_shift(1, 5)\n    '0b0'\n    >>> logical_right_shift(17, 2)\n    '0b100'\n    >>> logical_right_shift(1983, 4)\n    '0b1111011'\n    >>> logical_right_shift(1, -1)\n    Traceback (most recent call last):\n        ...\n    ValueError: both inputs must be positive integers\n    \"\"\"\n    if number < 0 or shift_amount < 0:\n        raise ValueError(\"both inputs must be positive integers\")\n\n    binary_number = str(bin(number))[2:]\n    if shift_amount >= len(binary_number):\n        return \"0b0\"\n    shifted_binary_number = binary_number[: len(binary_number) - shift_amount]\n    return \"0b\" + shifted_binary_number\n\n\ndef arithmetic_right_shift(number: int, shift_amount: int) -> str:\n    \"\"\"\n    Take in 2 integers.\n    'number' is the integer to be arithmetically right shifted 'shift_amount' times.\n    i.e. (number >> shift_amount)\n    Return the shifted binary representation.\n\n    >>> arithmetic_right_shift(0, 1)\n    '0b00'\n    >>> arithmetic_right_shift(1, 1)\n    '0b00'\n    >>> arithmetic_right_shift(-1, 1)\n    '0b11'\n    >>> arithmetic_right_shift(17, 2)\n    '0b000100'\n    >>> arithmetic_right_shift(-17, 2)\n    '0b111011'\n    >>> arithmetic_right_shift(-1983, 4)\n    '0b111110000100'\n    \"\"\"\n    if number >= 0:  # Get binary representation of positive number\n        binary_number = \"0\" + str(bin(number)).strip(\"-\")[2:]\n    else:  # Get binary (2's complement) representation of negative number\n        binary_number_length = len(bin(number)[3:])  # Find 2's complement of number\n        binary_number = bin(abs(number) - (1 << binary_number_length))[3:]\n        binary_number = (\n            \"1\" + \"0\" * (binary_number_length - len(binary_number)) + binary_number\n        )\n\n    if shift_amount >= len(binary_number):\n        return \"0b\" + binary_number[0] * len(binary_number)\n    return (\n        \"0b\"\n        + binary_number[0] * shift_amount\n        + binary_number[: len(binary_number) - shift_amount]\n    )\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "bit_manipulation/binary_twos_complement.py",
    "content": "# Information on 2's complement: https://en.wikipedia.org/wiki/Two%27s_complement\n\n\ndef twos_complement(number: int) -> str:\n    \"\"\"\n    Take in a negative integer 'number'.\n    Return the two's complement representation of 'number'.\n\n    >>> twos_complement(0)\n    '0b0'\n    >>> twos_complement(-1)\n    '0b11'\n    >>> twos_complement(-5)\n    '0b1011'\n    >>> twos_complement(-17)\n    '0b101111'\n    >>> twos_complement(-207)\n    '0b100110001'\n    >>> twos_complement(1)\n    Traceback (most recent call last):\n        ...\n    ValueError: input must be a negative integer\n    \"\"\"\n    if number > 0:\n        raise ValueError(\"input must be a negative integer\")\n    binary_number_length = len(bin(number)[3:])\n    twos_complement_number = bin(abs(number) - (1 << binary_number_length))[3:]\n    twos_complement_number = (\n        (\n            \"1\"\n            + \"0\" * (binary_number_length - len(twos_complement_number))\n            + twos_complement_number\n        )\n        if number < 0\n        else \"0\"\n    )\n    return \"0b\" + twos_complement_number\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "bit_manipulation/binary_xor_operator.py",
    "content": "# https://www.tutorialspoint.com/python3/bitwise_operators_example.htm\n\n\ndef binary_xor(a: int, b: int) -> str:\n    \"\"\"\n    Take in 2 integers, convert them to binary,\n    return a binary number that is the\n    result of a binary xor operation on the integers provided.\n\n    >>> binary_xor(25, 32)\n    '0b111001'\n    >>> binary_xor(37, 50)\n    '0b010111'\n    >>> binary_xor(21, 30)\n    '0b01011'\n    >>> binary_xor(58, 73)\n    '0b1110011'\n    >>> binary_xor(0, 255)\n    '0b11111111'\n    >>> binary_xor(256, 256)\n    '0b000000000'\n    >>> binary_xor(0, -1)\n    Traceback (most recent call last):\n        ...\n    ValueError: the value of both inputs must be positive\n    >>> binary_xor(0, 1.1)\n    Traceback (most recent call last):\n        ...\n    TypeError: 'float' object cannot be interpreted as an integer\n    >>> binary_xor(\"0\", \"1\")\n    Traceback (most recent call last):\n        ...\n    TypeError: '<' not supported between instances of 'str' and 'int'\n    \"\"\"\n    if a < 0 or b < 0:\n        raise ValueError(\"the value of both inputs must be positive\")\n\n    a_binary = str(bin(a))[2:]  # remove the leading \"0b\"\n    b_binary = str(bin(b))[2:]  # remove the leading \"0b\"\n\n    max_len = max(len(a_binary), len(b_binary))\n\n    return \"0b\" + \"\".join(\n        str(int(char_a != char_b))\n        for char_a, char_b in zip(a_binary.zfill(max_len), b_binary.zfill(max_len))\n    )\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "bit_manipulation/bitwise_addition_recursive.py",
    "content": "\"\"\"\nCalculates the sum of two non-negative integers using bitwise operators\nWikipedia explanation: https://en.wikipedia.org/wiki/Binary_number\n\"\"\"\n\n\ndef bitwise_addition_recursive(number: int, other_number: int) -> int:\n    \"\"\"\n    >>> bitwise_addition_recursive(4, 5)\n    9\n    >>> bitwise_addition_recursive(8, 9)\n    17\n    >>> bitwise_addition_recursive(0, 4)\n    4\n    >>> bitwise_addition_recursive(4.5, 9)\n    Traceback (most recent call last):\n        ...\n    TypeError: Both arguments MUST be integers!\n    >>> bitwise_addition_recursive('4', 9)\n    Traceback (most recent call last):\n        ...\n    TypeError: Both arguments MUST be integers!\n    >>> bitwise_addition_recursive('4.5', 9)\n    Traceback (most recent call last):\n        ...\n    TypeError: Both arguments MUST be integers!\n    >>> bitwise_addition_recursive(-1, 9)\n    Traceback (most recent call last):\n        ...\n    ValueError: Both arguments MUST be non-negative!\n    >>> bitwise_addition_recursive(1, -9)\n    Traceback (most recent call last):\n        ...\n    ValueError: Both arguments MUST be non-negative!\n    \"\"\"\n\n    if not isinstance(number, int) or not isinstance(other_number, int):\n        raise TypeError(\"Both arguments MUST be integers!\")\n\n    if number < 0 or other_number < 0:\n        raise ValueError(\"Both arguments MUST be non-negative!\")\n\n    bitwise_sum = number ^ other_number\n    carry = number & other_number\n\n    if carry == 0:\n        return bitwise_sum\n\n    return bitwise_addition_recursive(bitwise_sum, carry << 1)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "bit_manipulation/count_1s_brian_kernighan_method.py",
    "content": "def get_1s_count(number: int) -> int:\n    \"\"\"\n    Count the number of set bits in a 32 bit integer using Brian Kernighan's way.\n    Ref - https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetKernighan\n    >>> get_1s_count(25)\n    3\n    >>> get_1s_count(37)\n    3\n    >>> get_1s_count(21)\n    3\n    >>> get_1s_count(58)\n    4\n    >>> get_1s_count(0)\n    0\n    >>> get_1s_count(256)\n    1\n    >>> get_1s_count(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input must be a non-negative integer\n    >>> get_1s_count(0.8)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input must be a non-negative integer\n    >>> get_1s_count(\"25\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Input must be a non-negative integer\n    \"\"\"\n    if not isinstance(number, int) or number < 0:\n        raise ValueError(\"Input must be a non-negative integer\")\n\n    count = 0\n    while number:\n        # This way we arrive at next set bit (next 1) instead of looping\n        # through each bit and checking for 1s hence the\n        # loop won't run 32 times it will only run the number of `1` times\n        number &= number - 1\n        count += 1\n    return count\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "bit_manipulation/count_number_of_one_bits.py",
    "content": "from timeit import timeit\n\n\ndef get_set_bits_count_using_brian_kernighans_algorithm(number: int) -> int:\n    \"\"\"\n    Count the number of set bits in a 32 bit integer\n    >>> get_set_bits_count_using_brian_kernighans_algorithm(25)\n    3\n    >>> get_set_bits_count_using_brian_kernighans_algorithm(37)\n    3\n    >>> get_set_bits_count_using_brian_kernighans_algorithm(21)\n    3\n    >>> get_set_bits_count_using_brian_kernighans_algorithm(58)\n    4\n    >>> get_set_bits_count_using_brian_kernighans_algorithm(0)\n    0\n    >>> get_set_bits_count_using_brian_kernighans_algorithm(256)\n    1\n    >>> get_set_bits_count_using_brian_kernighans_algorithm(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: the value of input must not be negative\n    \"\"\"\n    if number < 0:\n        raise ValueError(\"the value of input must not be negative\")\n    result = 0\n    while number:\n        number &= number - 1\n        result += 1\n    return result\n\n\ndef get_set_bits_count_using_modulo_operator(number: int) -> int:\n    \"\"\"\n    Count the number of set bits in a 32 bit integer\n    >>> get_set_bits_count_using_modulo_operator(25)\n    3\n    >>> get_set_bits_count_using_modulo_operator(37)\n    3\n    >>> get_set_bits_count_using_modulo_operator(21)\n    3\n    >>> get_set_bits_count_using_modulo_operator(58)\n    4\n    >>> get_set_bits_count_using_modulo_operator(0)\n    0\n    >>> get_set_bits_count_using_modulo_operator(256)\n    1\n    >>> get_set_bits_count_using_modulo_operator(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: the value of input must not be negative\n    \"\"\"\n    if number < 0:\n        raise ValueError(\"the value of input must not be negative\")\n    result = 0\n    while number:\n        if number % 2 == 1:\n            result += 1\n        number >>= 1\n    return result\n\n\ndef benchmark() -> None:\n    \"\"\"\n    Benchmark code for comparing 2 functions, with different length int values.\n    Brian Kernighan's algorithm is consistently faster than using modulo_operator.\n    \"\"\"\n\n    def do_benchmark(number: int) -> None:\n        setup = \"import __main__ as z\"\n        print(f\"Benchmark when {number = }:\")\n        print(f\"{get_set_bits_count_using_modulo_operator(number) = }\")\n        timing = timeit(\n            f\"z.get_set_bits_count_using_modulo_operator({number})\", setup=setup\n        )\n        print(f\"timeit() runs in {timing} seconds\")\n        print(f\"{get_set_bits_count_using_brian_kernighans_algorithm(number) = }\")\n        timing = timeit(\n            f\"z.get_set_bits_count_using_brian_kernighans_algorithm({number})\",\n            setup=setup,\n        )\n        print(f\"timeit() runs in {timing} seconds\")\n\n    for number in (25, 37, 58, 0):\n        do_benchmark(number)\n        print()\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    benchmark()\n"
  },
  {
    "path": "bit_manipulation/excess_3_code.py",
    "content": "def excess_3_code(number: int) -> str:\n    \"\"\"\n    Find excess-3 code of integer base 10.\n    Add 3 to all digits in a decimal number then convert to a binary-coded decimal.\n    https://en.wikipedia.org/wiki/Excess-3\n\n    >>> excess_3_code(0)\n    '0b0011'\n    >>> excess_3_code(3)\n    '0b0110'\n    >>> excess_3_code(2)\n    '0b0101'\n    >>> excess_3_code(20)\n    '0b01010011'\n    >>> excess_3_code(120)\n    '0b010001010011'\n    \"\"\"\n    num = \"\"\n    for digit in str(max(0, number)):\n        num += str(bin(int(digit) + 3))[2:].zfill(4)\n    return \"0b\" + num\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "bit_manipulation/find_previous_power_of_two.py",
    "content": "def find_previous_power_of_two(number: int) -> int:\n    \"\"\"\n    Find the largest power of two that is less than or equal to a given integer.\n    https://stackoverflow.com/questions/1322510\n\n    >>> [find_previous_power_of_two(i) for i in range(18)]\n    [0, 1, 2, 2, 4, 4, 4, 4, 8, 8, 8, 8, 8, 8, 8, 8, 16, 16]\n    >>> find_previous_power_of_two(-5)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input must be a non-negative integer\n    >>> find_previous_power_of_two(10.5)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input must be a non-negative integer\n    \"\"\"\n    if not isinstance(number, int) or number < 0:\n        raise ValueError(\"Input must be a non-negative integer\")\n    if number == 0:\n        return 0\n    power = 1\n    while power <= number:\n        power <<= 1  # Equivalent to multiplying by 2\n    return power >> 1 if number > 1 else 1\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "bit_manipulation/find_unique_number.py",
    "content": "def find_unique_number(arr: list[int]) -> int:\n    \"\"\"\n    Given a list of integers where every element appears twice except for one,\n    this function returns the element that appears only once using bitwise XOR.\n\n    >>> find_unique_number([1, 1, 2, 2, 3])\n    3\n    >>> find_unique_number([4, 5, 4, 6, 6])\n    5\n    >>> find_unique_number([7])\n    7\n    >>> find_unique_number([10, 20, 10])\n    20\n    >>> find_unique_number([])\n    Traceback (most recent call last):\n        ...\n    ValueError: input list must not be empty\n    >>> find_unique_number([1, 'a', 1])\n    Traceback (most recent call last):\n        ...\n    TypeError: all elements must be integers\n    \"\"\"\n    if not arr:\n        raise ValueError(\"input list must not be empty\")\n    if not all(isinstance(x, int) for x in arr):\n        raise TypeError(\"all elements must be integers\")\n\n    result = 0\n    for num in arr:\n        result ^= num\n    return result\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "bit_manipulation/gray_code_sequence.py",
    "content": "def gray_code(bit_count: int) -> list:\n    \"\"\"\n    Takes in an integer n and returns a n-bit\n    gray code sequence\n    An n-bit gray code sequence is a sequence of 2^n\n    integers where:\n\n    a) Every integer is between [0,2^n -1] inclusive\n    b) The sequence begins with 0\n    c) An integer appears at most one times in the sequence\n    d)The binary representation of every pair of integers differ\n       by exactly one bit\n    e) The binary representation of first and last bit also\n       differ by exactly one bit\n\n    >>> gray_code(2)\n    [0, 1, 3, 2]\n\n    >>> gray_code(1)\n    [0, 1]\n\n    >>> gray_code(3)\n    [0, 1, 3, 2, 6, 7, 5, 4]\n\n    >>> gray_code(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: The given input must be positive\n\n    >>> gray_code(10.6)\n    Traceback (most recent call last):\n        ...\n    TypeError: unsupported operand type(s) for <<: 'int' and 'float'\n    \"\"\"\n\n    # bit count represents no. of bits in the gray code\n    if bit_count < 0:\n        raise ValueError(\"The given input must be positive\")\n\n    # get the generated string sequence\n    sequence = gray_code_sequence_string(bit_count)\n    #\n    # convert them to integers\n    for i in range(len(sequence)):\n        sequence[i] = int(sequence[i], 2)\n\n    return sequence\n\n\ndef gray_code_sequence_string(bit_count: int) -> list:\n    \"\"\"\n    Will output the n-bit grey sequence as a\n    string of bits\n\n    >>> gray_code_sequence_string(2)\n    ['00', '01', '11', '10']\n\n    >>> gray_code_sequence_string(1)\n    ['0', '1']\n    \"\"\"\n\n    # The approach is a recursive one\n    # Base case achieved when either n = 0 or n=1\n    if bit_count == 0:\n        return [\"0\"]\n\n    if bit_count == 1:\n        return [\"0\", \"1\"]\n\n    seq_len = 1 << bit_count  # defines the length of the sequence\n    # 1<< n is equivalent to 2^n\n\n    # recursive answer will generate answer for n-1 bits\n    smaller_sequence = gray_code_sequence_string(bit_count - 1)\n\n    sequence = []\n\n    # append 0 to first half of the smaller sequence generated\n    for i in range(seq_len // 2):\n        generated_no = \"0\" + smaller_sequence[i]\n        sequence.append(generated_no)\n\n    # append 1 to second half ... start from the end of the list\n    for i in reversed(range(seq_len // 2)):\n        generated_no = \"1\" + smaller_sequence[i]\n        sequence.append(generated_no)\n\n    return sequence\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "bit_manipulation/highest_set_bit.py",
    "content": "def get_highest_set_bit_position(number: int) -> int:\n    \"\"\"\n    Returns position of the highest set bit of a number.\n    Ref - https://graphics.stanford.edu/~seander/bithacks.html#IntegerLogObvious\n    >>> get_highest_set_bit_position(25)\n    5\n    >>> get_highest_set_bit_position(37)\n    6\n    >>> get_highest_set_bit_position(1)\n    1\n    >>> get_highest_set_bit_position(4)\n    3\n    >>> get_highest_set_bit_position(0)\n    0\n    >>> get_highest_set_bit_position(0.8)\n    Traceback (most recent call last):\n        ...\n    TypeError: Input value must be an 'int' type\n    \"\"\"\n    if not isinstance(number, int):\n        raise TypeError(\"Input value must be an 'int' type\")\n\n    position = 0\n    while number:\n        position += 1\n        number >>= 1\n\n    return position\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "bit_manipulation/index_of_rightmost_set_bit.py",
    "content": "# Reference: https://www.geeksforgeeks.org/position-of-rightmost-set-bit/\n\n\ndef get_index_of_rightmost_set_bit(number: int) -> int:\n    \"\"\"\n    Take in a positive integer 'number'.\n    Returns the zero-based index of first set bit in that 'number' from right.\n    Returns -1, If no set bit found.\n\n    >>> get_index_of_rightmost_set_bit(0)\n    -1\n    >>> get_index_of_rightmost_set_bit(5)\n    0\n    >>> get_index_of_rightmost_set_bit(36)\n    2\n    >>> get_index_of_rightmost_set_bit(8)\n    3\n    >>> get_index_of_rightmost_set_bit(-18)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input must be a non-negative integer\n    >>> get_index_of_rightmost_set_bit('test')\n    Traceback (most recent call last):\n        ...\n    ValueError: Input must be a non-negative integer\n    >>> get_index_of_rightmost_set_bit(1.25)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input must be a non-negative integer\n    \"\"\"\n\n    if not isinstance(number, int) or number < 0:\n        raise ValueError(\"Input must be a non-negative integer\")\n\n    intermediate = number & ~(number - 1)\n    index = 0\n    while intermediate:\n        intermediate >>= 1\n        index += 1\n    return index - 1\n\n\nif __name__ == \"__main__\":\n    \"\"\"\n    Finding the index of rightmost set bit has some very peculiar use-cases,\n    especially in finding missing or/and repeating numbers in a list of\n    positive integers.\n    \"\"\"\n    import doctest\n\n    doctest.testmod(verbose=True)\n"
  },
  {
    "path": "bit_manipulation/is_even.py",
    "content": "def is_even(number: int) -> bool:\n    \"\"\"\n    return true if the input integer is even\n    Explanation: Lets take a look at the following decimal to binary conversions\n    2 => 10\n    14 => 1110\n    100 => 1100100\n    3 => 11\n    13 => 1101\n    101 => 1100101\n    from the above examples we can observe that\n    for all the odd integers there is always 1 set bit at the end\n    also, 1 in binary can be represented as 001, 00001, or 0000001\n    so for any odd integer n => n&1 is always equals 1 else the integer is even\n\n    >>> is_even(1)\n    False\n    >>> is_even(4)\n    True\n    >>> is_even(9)\n    False\n    >>> is_even(15)\n    False\n    >>> is_even(40)\n    True\n    >>> is_even(100)\n    True\n    >>> is_even(101)\n    False\n    \"\"\"\n    return number & 1 == 0\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "bit_manipulation/is_power_of_two.py",
    "content": "\"\"\"\nAuthor  : Alexander Pantyukhin\nDate    : November 1, 2022\n\nTask:\nGiven a positive int number. Return True if this number is power of 2\nor False otherwise.\n\nImplementation notes: Use bit manipulation.\nFor example if the number is the power of two it's bits representation:\nn     = 0..100..00\nn - 1 = 0..011..11\n\nn & (n - 1) - no intersections = 0\n\"\"\"\n\n\ndef is_power_of_two(number: int) -> bool:\n    \"\"\"\n    Return True if this number is power of 2 or False otherwise.\n\n    >>> is_power_of_two(0)\n    True\n    >>> is_power_of_two(1)\n    True\n    >>> is_power_of_two(2)\n    True\n    >>> is_power_of_two(4)\n    True\n    >>> is_power_of_two(6)\n    False\n    >>> is_power_of_two(8)\n    True\n    >>> is_power_of_two(17)\n    False\n    >>> is_power_of_two(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: number must not be negative\n    >>> is_power_of_two(1.2)\n    Traceback (most recent call last):\n        ...\n    TypeError: unsupported operand type(s) for &: 'float' and 'float'\n\n    # Test all powers of 2 from 0 to 10,000\n    >>> all(is_power_of_two(int(2 ** i)) for i in range(10000))\n    True\n    \"\"\"\n    if number < 0:\n        raise ValueError(\"number must not be negative\")\n    return number & (number - 1) == 0\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "bit_manipulation/largest_pow_of_two_le_num.py",
    "content": "\"\"\"\nAuthor  : Naman Sharma\nDate    : October 2, 2023\n\nTask:\nTo Find the largest power of 2 less than or equal to a given number.\n\nImplementation notes: Use bit manipulation.\nWe start from 1 & left shift the set bit to check if (res<<1)<=number.\nEach left bit shift represents a pow of 2.\n\nFor example:\nnumber: 15\nres:    1   0b1\n        2   0b10\n        4   0b100\n        8   0b1000\n        16  0b10000 (Exit)\n\"\"\"\n\n\ndef largest_pow_of_two_le_num(number: int) -> int:\n    \"\"\"\n    Return the largest power of two less than or equal to a number.\n\n    >>> largest_pow_of_two_le_num(0)\n    0\n    >>> largest_pow_of_two_le_num(1)\n    1\n    >>> largest_pow_of_two_le_num(-1)\n    0\n    >>> largest_pow_of_two_le_num(3)\n    2\n    >>> largest_pow_of_two_le_num(15)\n    8\n    >>> largest_pow_of_two_le_num(99)\n    64\n    >>> largest_pow_of_two_le_num(178)\n    128\n    >>> largest_pow_of_two_le_num(999999)\n    524288\n    >>> largest_pow_of_two_le_num(99.9)\n    Traceback (most recent call last):\n        ...\n    TypeError: Input value must be a 'int' type\n    \"\"\"\n    if isinstance(number, float):\n        raise TypeError(\"Input value must be a 'int' type\")\n    if number <= 0:\n        return 0\n    res = 1\n    while (res << 1) <= number:\n        res <<= 1\n    return res\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "bit_manipulation/missing_number.py",
    "content": "def find_missing_number(nums: list[int]) -> int:\n    \"\"\"\n    Finds the missing number in a list of consecutive integers.\n\n    Args:\n        nums: A list of integers.\n\n    Returns:\n        The missing number.\n\n    Example:\n        >>> find_missing_number([0, 1, 3, 4])\n        2\n        >>> find_missing_number([4, 3, 1, 0])\n        2\n        >>> find_missing_number([-4, -3, -1, 0])\n        -2\n        >>> find_missing_number([-2, 2, 1, 3, 0])\n        -1\n        >>> find_missing_number([1, 3, 4, 5, 6])\n        2\n        >>> find_missing_number([6, 5, 4, 2, 1])\n        3\n        >>> find_missing_number([6, 1, 5, 3, 4])\n        2\n    \"\"\"\n    low = min(nums)\n    high = max(nums)\n    missing_number = high\n\n    for i in range(low, high):\n        missing_number ^= i ^ nums[i - low]\n\n    return missing_number\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "bit_manipulation/numbers_different_signs.py",
    "content": "\"\"\"\nAuthor  : Alexander Pantyukhin\nDate    : November 30, 2022\n\nTask:\nGiven two int numbers. Return True these numbers have opposite signs\nor False otherwise.\n\nImplementation notes: Use bit manipulation.\nUse XOR for two numbers.\n\"\"\"\n\n\ndef different_signs(num1: int, num2: int) -> bool:\n    \"\"\"\n    Return True if numbers have opposite signs False otherwise.\n\n    >>> different_signs(1, -1)\n    True\n    >>> different_signs(1, 1)\n    False\n    >>> different_signs(1000000000000000000000000000, -1000000000000000000000000000)\n    True\n    >>> different_signs(-1000000000000000000000000000, 1000000000000000000000000000)\n    True\n    >>> different_signs(50, 278)\n    False\n    >>> different_signs(0, 2)\n    False\n    >>> different_signs(2, 0)\n    False\n    \"\"\"\n    return num1 ^ num2 < 0\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "bit_manipulation/power_of_4.py",
    "content": "\"\"\"\n\nTask:\nGiven a positive int number. Return True if this number is power of 4\nor False otherwise.\n\nImplementation notes: Use bit manipulation.\nFor example if the number is the power of 2 it's bits representation:\nn     = 0..100..00\nn - 1 = 0..011..11\n\nn & (n - 1) - no intersections = 0\nIf the number is a power of 4 then it should be a power of 2\nand the set bit should be at an odd position.\n\"\"\"\n\n\ndef power_of_4(number: int) -> bool:\n    \"\"\"\n    Return True if this number is power of 4 or False otherwise.\n\n    >>> power_of_4(0)\n    Traceback (most recent call last):\n        ...\n    ValueError: number must be positive\n    >>> power_of_4(1)\n    True\n    >>> power_of_4(2)\n    False\n    >>> power_of_4(4)\n    True\n    >>> power_of_4(6)\n    False\n    >>> power_of_4(8)\n    False\n    >>> power_of_4(17)\n    False\n    >>> power_of_4(64)\n    True\n    >>> power_of_4(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: number must be positive\n    >>> power_of_4(1.2)\n    Traceback (most recent call last):\n        ...\n    TypeError: number must be an integer\n\n    \"\"\"\n    if not isinstance(number, int):\n        raise TypeError(\"number must be an integer\")\n    if number <= 0:\n        raise ValueError(\"number must be positive\")\n    if number & (number - 1) == 0:\n        c = 0\n        while number:\n            c += 1\n            number >>= 1\n        return c % 2 == 1\n    else:\n        return False\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "bit_manipulation/reverse_bits.py",
    "content": "def get_reverse_bit_string(number: int) -> str:\n    \"\"\"\n    Return the reverse bit string of a 32 bit integer\n\n    >>> get_reverse_bit_string(9)\n    '10010000000000000000000000000000'\n    >>> get_reverse_bit_string(43)\n    '11010100000000000000000000000000'\n    >>> get_reverse_bit_string(2873)\n    '10011100110100000000000000000000'\n    >>> get_reverse_bit_string(2550136832)\n    '00000000000000000000000000011001'\n    >>> get_reverse_bit_string(\"this is not a number\")\n    Traceback (most recent call last):\n        ...\n    TypeError: operation can not be conducted on an object of type str\n    \"\"\"\n    if not isinstance(number, int):\n        msg = (\n            \"operation can not be conducted on an object of type \"\n            f\"{type(number).__name__}\"\n        )\n        raise TypeError(msg)\n    bit_string = \"\"\n    for _ in range(32):\n        bit_string += str(number % 2)\n        number >>= 1\n    return bit_string\n\n\ndef reverse_bit(number: int) -> int:\n    \"\"\"\n    Take in a 32 bit integer, reverse its bits, return a 32 bit integer result\n\n    >>> reverse_bit(25)\n    2550136832\n    >>> reverse_bit(37)\n    2751463424\n    >>> reverse_bit(21)\n    2818572288\n    >>> reverse_bit(58)\n    1543503872\n    >>> reverse_bit(0)\n    0\n    >>> reverse_bit(256)\n    8388608\n    >>> reverse_bit(2550136832)\n    25\n    >>> reverse_bit(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: The value of input must be non-negative\n\n    >>> reverse_bit(1.1)\n    Traceback (most recent call last):\n        ...\n    TypeError: Input value must be an 'int' type\n\n    >>> reverse_bit(\"0\")\n    Traceback (most recent call last):\n        ...\n    TypeError: Input value must be an 'int' type\n    \"\"\"\n    if not isinstance(number, int):\n        raise TypeError(\"Input value must be an 'int' type\")\n    if number < 0:\n        raise ValueError(\"The value of input must be non-negative\")\n\n    result = 0\n    # iterator over [0 to 31], since we are dealing with a 32 bit integer\n    for _ in range(32):\n        # left shift the bits by unity\n        result <<= 1\n        # get the end bit\n        end_bit = number & 1\n        # right shift the bits by unity\n        number >>= 1\n        # add that bit to our answer\n        result |= end_bit\n    return result\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "bit_manipulation/single_bit_manipulation_operations.py",
    "content": "#!/usr/bin/env python3\n\n\"\"\"Provide the functionality to manipulate a single bit.\"\"\"\n\n\ndef set_bit(number: int, position: int) -> int:\n    \"\"\"\n    Set the bit at position to 1.\n\n    Details: perform bitwise or for given number and X.\n    Where X is a number with all the bits - zeroes and bit on given\n    position - one.\n\n    >>> set_bit(0b1101, 1) # 0b1111\n    15\n    >>> set_bit(0b0, 5) # 0b100000\n    32\n    >>> set_bit(0b1111, 1) # 0b1111\n    15\n    \"\"\"\n    return number | (1 << position)\n\n\ndef clear_bit(number: int, position: int) -> int:\n    \"\"\"\n    Set the bit at position to 0.\n\n    Details: perform bitwise and for given number and X.\n    Where X is a number with all the bits - ones and bit on given\n    position - zero.\n\n    >>> clear_bit(0b10010, 1) # 0b10000\n    16\n    >>> clear_bit(0b0, 5) # 0b0\n    0\n    \"\"\"\n    return number & ~(1 << position)\n\n\ndef flip_bit(number: int, position: int) -> int:\n    \"\"\"\n    Flip the bit at position.\n\n    Details: perform bitwise xor for given number and X.\n    Where X is a number with all the bits - zeroes and bit on given\n    position - one.\n\n    >>> flip_bit(0b101, 1) # 0b111\n    7\n    >>> flip_bit(0b101, 0) # 0b100\n    4\n    \"\"\"\n    return number ^ (1 << position)\n\n\ndef is_bit_set(number: int, position: int) -> bool:\n    \"\"\"\n    Is the bit at position set?\n\n    Details: Shift the bit at position to be the first (smallest) bit.\n    Then check if the first bit is set by anding the shifted number with 1.\n\n    >>> is_bit_set(0b1010, 0)\n    False\n    >>> is_bit_set(0b1010, 1)\n    True\n    >>> is_bit_set(0b1010, 2)\n    False\n    >>> is_bit_set(0b1010, 3)\n    True\n    >>> is_bit_set(0b0, 17)\n    False\n    \"\"\"\n    return ((number >> position) & 1) == 1\n\n\ndef get_bit(number: int, position: int) -> int:\n    \"\"\"\n    Get the bit at the given position\n\n    Details: perform bitwise and for the given number and X,\n    Where X is a number with all the bits - zeroes and bit on given position - one.\n    If the result is not equal to 0, then the bit on the given position is 1, else 0.\n\n    >>> get_bit(0b1010, 0)\n    0\n    >>> get_bit(0b1010, 1)\n    1\n    >>> get_bit(0b1010, 2)\n    0\n    >>> get_bit(0b1010, 3)\n    1\n    \"\"\"\n    return int((number & (1 << position)) != 0)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "bit_manipulation/swap_all_odd_and_even_bits.py",
    "content": "def show_bits(before: int, after: int) -> str:\n    \"\"\"\n    >>> print(show_bits(0, 0xFFFF))\n        0: 00000000\n    65535: 1111111111111111\n    \"\"\"\n    return f\"{before:>5}: {before:08b}\\n{after:>5}: {after:08b}\"\n\n\ndef swap_odd_even_bits(num: int) -> int:\n    \"\"\"\n    1. We use bitwise AND operations to separate the even bits (0, 2, 4, 6, etc.) and\n       odd bits (1, 3, 5, 7, etc.) in the input number.\n    2. We then right-shift the even bits by 1 position and left-shift the odd bits by\n       1 position to swap them.\n    3. Finally, we combine the swapped even and odd bits using a bitwise OR operation\n       to obtain the final result.\n    >>> print(show_bits(0, swap_odd_even_bits(0)))\n        0: 00000000\n        0: 00000000\n    >>> print(show_bits(1, swap_odd_even_bits(1)))\n        1: 00000001\n        2: 00000010\n    >>> print(show_bits(2, swap_odd_even_bits(2)))\n        2: 00000010\n        1: 00000001\n    >>> print(show_bits(3, swap_odd_even_bits(3)))\n        3: 00000011\n        3: 00000011\n    >>> print(show_bits(4, swap_odd_even_bits(4)))\n        4: 00000100\n        8: 00001000\n    >>> print(show_bits(5, swap_odd_even_bits(5)))\n        5: 00000101\n       10: 00001010\n    >>> print(show_bits(6, swap_odd_even_bits(6)))\n        6: 00000110\n        9: 00001001\n    >>> print(show_bits(23, swap_odd_even_bits(23)))\n       23: 00010111\n       43: 00101011\n    \"\"\"\n    # Get all even bits - 0xAAAAAAAA is a 32-bit number with all even bits set to 1\n    even_bits = num & 0xAAAAAAAA\n\n    # Get all odd bits - 0x55555555 is a 32-bit number with all odd bits set to 1\n    odd_bits = num & 0x55555555\n\n    # Right shift even bits and left shift odd bits and swap them\n    return even_bits >> 1 | odd_bits << 1\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    for i in (-1, 0, 1, 2, 3, 4, 23, 24):\n        print(show_bits(i, swap_odd_even_bits(i)), \"\\n\")\n"
  },
  {
    "path": "blockchain/README.md",
    "content": "# Blockchain\n\nA Blockchain is a type of **distributed ledger** technology (DLT) that consists of a growing list of records, called **blocks**, that are securely linked together using **cryptography**.\n\nLet's break down the terminologies in the above definition. We find below terminologies,\n\n- Digital Ledger Technology (DLT)\n- Blocks\n- Cryptography\n\n## Digital Ledger Technology\n\nBlockchain is also called distributed ledger technology. It is simply the opposite of a centralized database. Firstly, what is a **ledger**? A ledger is a book or collection of accounts that records account transactions.\n\n*Why is Blockchain addressed as a digital ledger if it can record more than account transactions? What other transaction details and information can it hold?*\n\nDigital Ledger Technology is just a ledger that is shared among multiple nodes. This way there exists no need for a central authority to hold the info. Okay, how is it differentiated from a central database and what are their benefits?\n\nSuppose that there is an organization that has 4 branches whose data are stored in a centralized database. So even if one branch needs any data from the ledger it needs approval from the database in charge. And if one hacks the central database he gets to tamper and control all the data.\n\nNow let's assume every branch has a copy of the ledger and then once anything is added to the ledger by any branch it is gonna automatically reflect in all other ledgers available in other branches. This is done using a peer-to-peer network.\n\nThis means that even if information is tampered with 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.\n\n*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?*\n\n## Blocks\n\nIn short, a block is nothing but a collection 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 the working mechanism of blockchain.\n\n## Cryptography\n\nCryptography is the practice and study of secure communication techniques amid adversarial behavior. More broadly, cryptography is the creation and analysis of protocols that prevent third parties or the general public from accessing private messages.\n\n*Which cryptography technology is most widely used in blockchain and why?*\n\nSo, in general, blockchain technology is a distributed record holder that records the information about ownership of an asset. To define precisely,\n> Blockchain is a distributed, immutable ledger that makes it easier to record transactions and track assets in a corporate network.\nAn 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.\n\nSo this is all about the introduction to blockchain technology. To learn more about the topic refer below links....\n* <https://en.wikipedia.org/wiki/Blockchain>\n* <https://en.wikipedia.org/wiki/Chinese_remainder_theorem>\n* <https://en.wikipedia.org/wiki/Diophantine_equation>\n* <https://www.geeksforgeeks.org/modular-division/>\n"
  },
  {
    "path": "blockchain/__init__.py",
    "content": ""
  },
  {
    "path": "blockchain/diophantine_equation.py",
    "content": "from __future__ import annotations\n\nfrom maths.greatest_common_divisor import greatest_common_divisor\n\n\ndef diophantine(a: int, b: int, c: int) -> tuple[float, float]:\n    \"\"\"\n    Diophantine Equation : Given integers a,b,c ( at least one of a and b != 0), the\n    diophantine equation a*x + b*y = c has a solution (where x and y are integers)\n    iff greatest_common_divisor(a,b) divides c.\n\n    GCD ( Greatest Common Divisor ) or HCF ( Highest Common Factor )\n\n    >>> diophantine(10,6,14)\n    (-7.0, 14.0)\n\n    >>> diophantine(391,299,-69)\n    (9.0, -12.0)\n\n    But above equation has one more solution i.e., x = -4, y = 5.\n    That's why we need diophantine all solution function.\n\n    \"\"\"\n\n    assert (\n        c % greatest_common_divisor(a, b) == 0\n    )  # greatest_common_divisor(a,b) is in maths directory\n    (d, x, y) = extended_gcd(a, b)  # extended_gcd(a,b) function implemented below\n    r = c / d\n    return (r * x, r * y)\n\n\ndef diophantine_all_soln(a: int, b: int, c: int, n: int = 2) -> None:\n    \"\"\"\n    Lemma : if n|ab and gcd(a,n) = 1, then n|b.\n\n    Finding All solutions of Diophantine Equations:\n\n    Theorem : Let gcd(a,b) = d, a = d*p, b = d*q. If (x0,y0) is a solution of\n    Diophantine Equation a*x + b*y = c.  a*x0 + b*y0 = c, then all the\n    solutions have the form a(x0 + t*q) + b(y0 - t*p) = c,\n    where t is an arbitrary integer.\n\n    n is the number of solution you want, n = 2 by default\n\n    >>> diophantine_all_soln(10, 6, 14)\n    -7.0 14.0\n    -4.0 9.0\n\n    >>> diophantine_all_soln(10, 6, 14, 4)\n    -7.0 14.0\n    -4.0 9.0\n    -1.0 4.0\n    2.0 -1.0\n\n    >>> diophantine_all_soln(391, 299, -69, n = 4)\n    9.0 -12.0\n    22.0 -29.0\n    35.0 -46.0\n    48.0 -63.0\n\n    \"\"\"\n    (x0, y0) = diophantine(a, b, c)  # Initial value\n    d = greatest_common_divisor(a, b)\n    p = a // d\n    q = b // d\n\n    for i in range(n):\n        x = x0 + i * q\n        y = y0 - i * p\n        print(x, y)\n\n\ndef extended_gcd(a: int, b: int) -> tuple[int, int, int]:\n    \"\"\"\n    Extended Euclid's Algorithm : If d divides a and b and d = a*x + b*y for integers\n    x and y, then d = gcd(a,b)\n\n    >>> extended_gcd(10, 6)\n    (2, -1, 2)\n\n    >>> extended_gcd(7, 5)\n    (1, -2, 3)\n\n    \"\"\"\n    assert a >= 0\n    assert b >= 0\n\n    if b == 0:\n        d, x, y = a, 1, 0\n    else:\n        (d, p, q) = extended_gcd(b, a % b)\n        x = q\n        y = p - q * (a // b)\n\n    assert a % d == 0\n    assert b % d == 0\n    assert d == a * x + b * y\n\n    return (d, x, y)\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod(name=\"diophantine\", verbose=True)\n    testmod(name=\"diophantine_all_soln\", verbose=True)\n    testmod(name=\"extended_gcd\", verbose=True)\n    testmod(name=\"greatest_common_divisor\", verbose=True)\n"
  },
  {
    "path": "boolean_algebra/README.md",
    "content": "# Boolean Algebra\n\nBoolean algebra is used to do arithmetic with bits of values True (1) or False (0).\nThere are three basic operations: 'and', 'or' and 'not'.\n\n* <https://en.wikipedia.org/wiki/Boolean_algebra>\n* <https://plato.stanford.edu/entries/boolalg-math/>\n"
  },
  {
    "path": "boolean_algebra/__init__.py",
    "content": ""
  },
  {
    "path": "boolean_algebra/and_gate.py",
    "content": "\"\"\"\nAn AND Gate is a logic gate in boolean algebra which results to 1 (True) if all the\ninputs are 1 (True), and 0 (False) otherwise.\n\nFollowing is the truth table of a Two Input AND Gate:\n    ------------------------------\n    | Input 1 | Input 2 | Output |\n    ------------------------------\n    |    0    |    0    |    0   |\n    |    0    |    1    |    0   |\n    |    1    |    0    |    0   |\n    |    1    |    1    |    1   |\n    ------------------------------\n\nRefer - https://www.geeksforgeeks.org/logic-gates/\n\"\"\"\n\n\ndef and_gate(input_1: int, input_2: int) -> int:\n    \"\"\"\n    Calculate AND of the input values\n\n    >>> and_gate(0, 0)\n    0\n    >>> and_gate(0, 1)\n    0\n    >>> and_gate(1, 0)\n    0\n    >>> and_gate(1, 1)\n    1\n    \"\"\"\n    return int(input_1 and input_2)\n\n\ndef n_input_and_gate(inputs: list[int]) -> int:\n    \"\"\"\n    Calculate AND of a list of input values\n\n    >>> n_input_and_gate([1, 0, 1, 1, 0])\n    0\n    >>> n_input_and_gate([1, 1, 1, 1, 1])\n    1\n    \"\"\"\n    return int(all(inputs))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "boolean_algebra/imply_gate.py",
    "content": "\"\"\"\nAn IMPLY Gate is a logic gate in boolean algebra which results to 1 if\neither input 1 is 0, or if input 1 is 1, then the output is 1 only if input 2 is 1.\nIt is true if input 1 implies input 2.\n\nFollowing is the truth table of an IMPLY Gate:\n    ------------------------------\n    | Input 1 | Input 2 | Output |\n    ------------------------------\n    |    0    |    0    |    1   |\n    |    0    |    1    |    1   |\n    |    1    |    0    |    0   |\n    |    1    |    1    |    1   |\n    ------------------------------\n\nRefer - https://en.wikipedia.org/wiki/IMPLY_gate\n\"\"\"\n\n\ndef imply_gate(input_1: int, input_2: int) -> int:\n    \"\"\"\n    Calculate IMPLY of the input values\n\n    >>> imply_gate(0, 0)\n    1\n    >>> imply_gate(0, 1)\n    1\n    >>> imply_gate(1, 0)\n    0\n    >>> imply_gate(1, 1)\n    1\n    \"\"\"\n    return int(input_1 == 0 or input_2 == 1)\n\n\ndef recursive_imply_list(input_list: list[int]) -> int:\n    \"\"\"\n    Recursively calculates the implication of a list.\n    Strictly the implication is applied consecutively left to right:\n    ( (a -> b) -> c ) -> d ...\n\n    >>> recursive_imply_list([])\n    Traceback (most recent call last):\n        ...\n    ValueError: Input list must contain at least two elements\n    >>> recursive_imply_list([0])\n    Traceback (most recent call last):\n        ...\n    ValueError: Input list must contain at least two elements\n    >>> recursive_imply_list([1])\n    Traceback (most recent call last):\n        ...\n    ValueError: Input list must contain at least two elements\n    >>> recursive_imply_list([0, 0])\n    1\n    >>> recursive_imply_list([0, 1])\n    1\n    >>> recursive_imply_list([1, 0])\n    0\n    >>> recursive_imply_list([1, 1])\n    1\n    >>> recursive_imply_list([0, 0, 0])\n    0\n    >>> recursive_imply_list([0, 0, 1])\n    1\n    >>> recursive_imply_list([0, 1, 0])\n    0\n    >>> recursive_imply_list([0, 1, 1])\n    1\n    >>> recursive_imply_list([1, 0, 0])\n    1\n    >>> recursive_imply_list([1, 0, 1])\n    1\n    >>> recursive_imply_list([1, 1, 0])\n    0\n    >>> recursive_imply_list([1, 1, 1])\n    1\n    \"\"\"\n    if len(input_list) < 2:\n        raise ValueError(\"Input list must contain at least two elements\")\n    first_implication = imply_gate(input_list[0], input_list[1])\n    if len(input_list) == 2:\n        return first_implication\n    new_list = [first_implication, *input_list[2:]]\n    return recursive_imply_list(new_list)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "boolean_algebra/karnaugh_map_simplification.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/Karnaugh_map\nhttps://www.allaboutcircuits.com/technical-articles/karnaugh-map-boolean-algebraic-simplification-technique\n\"\"\"\n\n\ndef simplify_kmap(kmap: list[list[int]]) -> str:\n    \"\"\"\n    Simplify the Karnaugh map.\n    >>> simplify_kmap(kmap=[[0, 1], [1, 1]])\n    \"A'B + AB' + AB\"\n    >>> simplify_kmap(kmap=[[0, 0], [0, 0]])\n    ''\n    >>> simplify_kmap(kmap=[[0, 1], [1, -1]])\n    \"A'B + AB' + AB\"\n    >>> simplify_kmap(kmap=[[0, 1], [1, 2]])\n    \"A'B + AB' + AB\"\n    >>> simplify_kmap(kmap=[[0, 1], [1, 1.1]])\n    \"A'B + AB' + AB\"\n    >>> simplify_kmap(kmap=[[0, 1], [1, 'a']])\n    \"A'B + AB' + AB\"\n    \"\"\"\n    simplified_f = []\n    for a, row in enumerate(kmap):\n        for b, item in enumerate(row):\n            if item:\n                term = (\"A\" if a else \"A'\") + (\"B\" if b else \"B'\")\n                simplified_f.append(term)\n    return \" + \".join(simplified_f)\n\n\ndef main() -> None:\n    \"\"\"\n    Main function to create and simplify a K-Map.\n\n    >>> main()\n    [0, 1]\n    [1, 1]\n    Simplified Expression:\n    A'B + AB' + AB\n    \"\"\"\n    kmap = [[0, 1], [1, 1]]\n\n    # Manually generate the product of [0, 1] and [0, 1]\n\n    for row in kmap:\n        print(row)\n\n    print(\"Simplified Expression:\")\n    print(simplify_kmap(kmap))\n\n\nif __name__ == \"__main__\":\n    main()\n    print(f\"{simplify_kmap(kmap=[[0, 1], [1, 1]]) = }\")\n"
  },
  {
    "path": "boolean_algebra/multiplexer.py",
    "content": "def mux(input0: int, input1: int, select: int) -> int:\n    \"\"\"\n    Implement a 2-to-1 Multiplexer.\n\n    :param input0: The first input value (0 or 1).\n    :param input1: The second input value (0 or 1).\n    :param select: The select signal (0 or 1) to choose between input0 and input1.\n    :return: The output based on the select signal.  input1 if select else input0.\n\n    https://www.electrically4u.com/solved-problems-on-multiplexer\n    https://en.wikipedia.org/wiki/Multiplexer\n\n    >>> mux(0, 1, 0)\n    0\n    >>> mux(0, 1, 1)\n    1\n    >>> mux(1, 0, 0)\n    1\n    >>> mux(1, 0, 1)\n    0\n    >>> mux(2, 1, 0)\n    Traceback (most recent call last):\n        ...\n    ValueError: Inputs and select signal must be 0 or 1\n    >>> mux(0, -1, 0)\n    Traceback (most recent call last):\n        ...\n    ValueError: Inputs and select signal must be 0 or 1\n    >>> mux(0, 1, 1.1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Inputs and select signal must be 0 or 1\n    \"\"\"\n    if all(i in (0, 1) for i in (input0, input1, select)):\n        return input1 if select else input0\n    raise ValueError(\"Inputs and select signal must be 0 or 1\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "boolean_algebra/nand_gate.py",
    "content": "\"\"\"\r\nA NAND Gate is a logic gate in boolean algebra which results to 0 (False) if both\r\nthe inputs are 1, and 1 (True) otherwise. It's similar to adding\r\na NOT gate along with an AND gate.\r\nFollowing is the truth table of a NAND Gate:\r\n    ------------------------------\r\n    | Input 1 | Input 2 | Output |\r\n    ------------------------------\r\n    |    0    |    0    |    1   |\r\n    |    0    |    1    |    1   |\r\n    |    1    |    0    |    1   |\r\n    |    1    |    1    |    0   |\r\n    ------------------------------\r\nRefer - https://www.geeksforgeeks.org/logic-gates-in-python/\r\n\"\"\"\r\n\r\n\r\ndef nand_gate(input_1: int, input_2: int) -> int:\r\n    \"\"\"\r\n    Calculate NAND of the input values\r\n    >>> nand_gate(0, 0)\r\n    1\r\n    >>> nand_gate(0, 1)\r\n    1\r\n    >>> nand_gate(1, 0)\r\n    1\r\n    >>> nand_gate(1, 1)\r\n    0\r\n    \"\"\"\r\n    return int(not (input_1 and input_2))\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n"
  },
  {
    "path": "boolean_algebra/nimply_gate.py",
    "content": "\"\"\"\nAn NIMPLY Gate is a logic gate in boolean algebra which results to 0 if\neither input 1 is 0, or if input 1 is 1, then it is 0 only if input 2 is 1.\nIt is false if input 1 implies input 2. It is the negated form of imply\n\nFollowing is the truth table of an NIMPLY Gate:\n    ------------------------------\n    | Input 1 | Input 2 | Output |\n    ------------------------------\n    |    0    |    0    |    0   |\n    |    0    |    1    |    0   |\n    |    1    |    0    |    1   |\n    |    1    |    1    |    0   |\n    ------------------------------\n\nRefer - https://en.wikipedia.org/wiki/NIMPLY_gate\n\"\"\"\n\n\ndef nimply_gate(input_1: int, input_2: int) -> int:\n    \"\"\"\n    Calculate NIMPLY of the input values\n\n    >>> nimply_gate(0, 0)\n    0\n    >>> nimply_gate(0, 1)\n    0\n    >>> nimply_gate(1, 0)\n    1\n    >>> nimply_gate(1, 1)\n    0\n    \"\"\"\n    return int(input_1 == 1 and input_2 == 0)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "boolean_algebra/nor_gate.py",
    "content": "\"\"\"\nA NOR Gate is a logic gate in boolean algebra which results in false(0) if any of the\ninputs is 1, and True(1) if all inputs are 0.\nFollowing is the truth table of a NOR Gate:\n    Truth Table of NOR Gate:\n    | Input 1  | Input 2  |  Output  |\n    |    0     |    0     |    1     |\n    |    0     |    1     |    0     |\n    |    1     |    0     |    0     |\n    |    1     |    1     |    0     |\n\n    Code provided by Akshaj Vishwanathan\nhttps://www.geeksforgeeks.org/logic-gates-in-python\n\"\"\"\n\nfrom collections.abc import Callable\n\n\ndef nor_gate(input_1: int, input_2: int) -> int:\n    \"\"\"\n    >>> nor_gate(0, 0)\n    1\n    >>> nor_gate(0, 1)\n    0\n    >>> nor_gate(1, 0)\n    0\n    >>> nor_gate(1, 1)\n    0\n    >>> nor_gate(0.0, 0.0)\n    1\n    >>> nor_gate(0, -7)\n    0\n    \"\"\"\n    return int(input_1 == input_2 == 0)\n\n\ndef truth_table(func: Callable) -> str:\n    \"\"\"\n    >>> print(truth_table(nor_gate))\n    Truth Table of NOR Gate:\n    | Input 1  | Input 2  |  Output  |\n    |    0     |    0     |    1     |\n    |    0     |    1     |    0     |\n    |    1     |    0     |    0     |\n    |    1     |    1     |    0     |\n    \"\"\"\n\n    def make_table_row(items: list | tuple) -> str:\n        \"\"\"\n        >>> make_table_row((\"One\", \"Two\", \"Three\"))\n        '|   One    |   Two    |  Three   |'\n        \"\"\"\n        return f\"| {' | '.join(f'{item:^8}' for item in items)} |\"\n\n    return \"\\n\".join(\n        (\n            \"Truth Table of NOR Gate:\",\n            make_table_row((\"Input 1\", \"Input 2\", \"Output\")),\n            *[make_table_row((i, j, func(i, j))) for i in (0, 1) for j in (0, 1)],\n        )\n    )\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    print(truth_table(nor_gate))\n"
  },
  {
    "path": "boolean_algebra/not_gate.py",
    "content": "\"\"\"\r\nA NOT Gate is a logic gate in boolean algebra which results to 0 (False) if the\r\ninput is high, and 1 (True) if the input is low.\r\nFollowing is the truth table of a XOR Gate:\r\n    ------------------------------\r\n    | Input   |  Output |\r\n    ------------------------------\r\n    |    0    |    1    |\r\n    |    1    |    0    |\r\n    ------------------------------\r\nRefer - https://www.geeksforgeeks.org/logic-gates-in-python/\r\n\"\"\"\r\n\r\n\r\ndef not_gate(input_1: int) -> int:\r\n    \"\"\"\r\n    Calculate NOT of the input values\r\n    >>> not_gate(0)\r\n    1\r\n    >>> not_gate(1)\r\n    0\r\n    \"\"\"\r\n\r\n    return 1 if input_1 == 0 else 0\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n"
  },
  {
    "path": "boolean_algebra/or_gate.py",
    "content": "\"\"\"\r\nAn OR Gate is a logic gate in boolean algebra which results to 0 (False) if both the\r\ninputs are 0, and 1 (True) otherwise.\r\nFollowing is the truth table of an AND Gate:\r\n    ------------------------------\r\n    | Input 1 | Input 2 | Output |\r\n    ------------------------------\r\n    |    0    |    0    |    0   |\r\n    |    0    |    1    |    1   |\r\n    |    1    |    0    |    1   |\r\n    |    1    |    1    |    1   |\r\n    ------------------------------\r\nRefer - https://www.geeksforgeeks.org/logic-gates-in-python/\r\n\"\"\"\r\n\r\n\r\ndef or_gate(input_1: int, input_2: int) -> int:\r\n    \"\"\"\r\n    Calculate OR of the input values\r\n    >>> or_gate(0, 0)\r\n    0\r\n    >>> or_gate(0, 1)\r\n    1\r\n    >>> or_gate(1, 0)\r\n    1\r\n    >>> or_gate(1, 1)\r\n    1\r\n    \"\"\"\r\n    return int((input_1, input_2).count(1) != 0)\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n"
  },
  {
    "path": "boolean_algebra/quine_mc_cluskey.py",
    "content": "from __future__ import annotations\n\nfrom collections.abc import Sequence\nfrom typing import Literal\n\n\ndef compare_string(string1: str, string2: str) -> str | Literal[False]:\n    \"\"\"\n    >>> compare_string('0010','0110')\n    '0_10'\n\n    >>> compare_string('0110','1101')\n    False\n    \"\"\"\n    list1 = list(string1)\n    list2 = list(string2)\n    count = 0\n    for i in range(len(list1)):\n        if list1[i] != list2[i]:\n            count += 1\n            list1[i] = \"_\"\n    if count > 1:\n        return False\n    else:\n        return \"\".join(list1)\n\n\ndef check(binary: list[str]) -> list[str]:\n    \"\"\"\n    >>> check(['0.00.01.5'])\n    ['0.00.01.5']\n    \"\"\"\n    pi = []\n    while True:\n        check1 = [\"$\"] * len(binary)\n        temp = []\n        for i in range(len(binary)):\n            for j in range(i + 1, len(binary)):\n                k = compare_string(binary[i], binary[j])\n                if k is False:\n                    check1[i] = \"*\"\n                    check1[j] = \"*\"\n                    temp.append(\"X\")\n        for i in range(len(binary)):\n            if check1[i] == \"$\":\n                pi.append(binary[i])\n        if len(temp) == 0:\n            return pi\n        binary = list(set(temp))\n\n\ndef decimal_to_binary(no_of_variable: int, minterms: Sequence[float]) -> list[str]:\n    \"\"\"\n    >>> decimal_to_binary(3,[1.5])\n    ['0.00.01.5']\n    \"\"\"\n    temp = []\n    for minterm in minterms:\n        string = \"\"\n        for _ in range(no_of_variable):\n            string = str(minterm % 2) + string\n            minterm //= 2\n        temp.append(string)\n    return temp\n\n\ndef is_for_table(string1: str, string2: str, count: int) -> bool:\n    \"\"\"\n    >>> is_for_table('__1','011',2)\n    True\n\n    >>> is_for_table('01_','001',1)\n    False\n    \"\"\"\n    list1 = list(string1)\n    list2 = list(string2)\n    count_n = sum(item1 != item2 for item1, item2 in zip(list1, list2))\n    return count_n == count\n\n\ndef selection(chart: list[list[int]], prime_implicants: list[str]) -> list[str]:\n    \"\"\"\n    >>> selection([[1]],['0.00.01.5'])\n    ['0.00.01.5']\n\n    >>> selection([[1]],['0.00.01.5'])\n    ['0.00.01.5']\n    \"\"\"\n    temp = []\n    select = [0] * len(chart)\n    for i in range(len(chart[0])):\n        count = sum(row[i] == 1 for row in chart)\n        if count == 1:\n            rem = max(j for j, row in enumerate(chart) if row[i] == 1)\n            select[rem] = 1\n    for i, item in enumerate(select):\n        if item != 1:\n            continue\n        for j in range(len(chart[0])):\n            if chart[i][j] != 1:\n                continue\n            for row in chart:\n                row[j] = 0\n        temp.append(prime_implicants[i])\n    while True:\n        counts = [chart[i].count(1) for i in range(len(chart))]\n        max_n = max(counts)\n        rem = counts.index(max_n)\n\n        if max_n == 0:\n            return temp\n\n        temp.append(prime_implicants[rem])\n\n        for j in range(len(chart[0])):\n            if chart[rem][j] != 1:\n                continue\n            for i in range(len(chart)):\n                chart[i][j] = 0\n\n\ndef prime_implicant_chart(\n    prime_implicants: list[str], binary: list[str]\n) -> list[list[int]]:\n    \"\"\"\n    >>> prime_implicant_chart(['0.00.01.5'],['0.00.01.5'])\n    [[1]]\n    \"\"\"\n    chart = [[0 for x in range(len(binary))] for x in range(len(prime_implicants))]\n    for i in range(len(prime_implicants)):\n        count = prime_implicants[i].count(\"_\")\n        for j in range(len(binary)):\n            if is_for_table(prime_implicants[i], binary[j], count):\n                chart[i][j] = 1\n\n    return chart\n\n\ndef main() -> None:\n    no_of_variable = int(input(\"Enter the no. of variables\\n\"))\n    minterms = [\n        float(x)\n        for x in input(\n            \"Enter the decimal representation of Minterms 'Spaces Separated'\\n\"\n        ).split()\n    ]\n    binary = decimal_to_binary(no_of_variable, minterms)\n\n    prime_implicants = check(binary)\n    print(\"Prime Implicants are:\")\n    print(prime_implicants)\n    chart = prime_implicant_chart(prime_implicants, binary)\n\n    essential_prime_implicants = selection(chart, prime_implicants)\n    print(\"Essential Prime Implicants are:\")\n    print(essential_prime_implicants)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    main()\n"
  },
  {
    "path": "boolean_algebra/xnor_gate.py",
    "content": "\"\"\"\r\nA XNOR Gate is a logic gate in boolean algebra which results to 0 (False) if both the\r\ninputs are different, and 1 (True), if the inputs are same.\r\nIt's similar to adding a NOT gate to an XOR gate\r\n\r\nFollowing is the truth table of a XNOR Gate:\r\n    ------------------------------\r\n    | Input 1 | Input 2 | Output |\r\n    ------------------------------\r\n    |    0    |    0    |    1   |\r\n    |    0    |    1    |    0   |\r\n    |    1    |    0    |    0   |\r\n    |    1    |    1    |    1   |\r\n    ------------------------------\r\nRefer - https://www.geeksforgeeks.org/logic-gates-in-python/\r\n\"\"\"\r\n\r\n\r\ndef xnor_gate(input_1: int, input_2: int) -> int:\r\n    \"\"\"\r\n    Calculate XOR of the input values\r\n    >>> xnor_gate(0, 0)\r\n    1\r\n    >>> xnor_gate(0, 1)\r\n    0\r\n    >>> xnor_gate(1, 0)\r\n    0\r\n    >>> xnor_gate(1, 1)\r\n    1\r\n    \"\"\"\r\n    return 1 if input_1 == input_2 else 0\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n"
  },
  {
    "path": "boolean_algebra/xor_gate.py",
    "content": "\"\"\"\nA XOR Gate is a logic gate in boolean algebra which results to 1 (True) if only one of\nthe two inputs is 1, and 0 (False) if an even number of inputs are 1.\nFollowing is the truth table of a XOR Gate:\n    ------------------------------\n    | Input 1 | Input 2 | Output |\n    ------------------------------\n    |    0    |    0    |    0   |\n    |    0    |    1    |    1   |\n    |    1    |    0    |    1   |\n    |    1    |    1    |    0   |\n    ------------------------------\n\nRefer - https://www.geeksforgeeks.org/logic-gates-in-python/\n\"\"\"\n\n\ndef xor_gate(input_1: int, input_2: int) -> int:\n    \"\"\"\n    calculate xor of the input values\n\n    >>> xor_gate(0, 0)\n    0\n    >>> xor_gate(0, 1)\n    1\n    >>> xor_gate(1, 0)\n    1\n    >>> xor_gate(1, 1)\n    0\n    \"\"\"\n    return (input_1, input_2).count(0) % 2\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "cellular_automata/README.md",
    "content": "# Cellular Automata\n\nCellular automata are a way to simulate the behavior of \"life\", no matter if it is a robot or cell.\nThey usually follow simple rules but can lead to the creation of complex forms.\nThe most popular cellular automaton is Conway's [Game of Life](https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life).\n\n* <https://en.wikipedia.org/wiki/Cellular_automaton>\n* <https://mathworld.wolfram.com/ElementaryCellularAutomaton.html>\n"
  },
  {
    "path": "cellular_automata/__init__.py",
    "content": ""
  },
  {
    "path": "cellular_automata/conways_game_of_life.py",
    "content": "\"\"\"\nConway's Game of Life implemented in Python.\nhttps://en.wikipedia.org/wiki/Conway%27s_Game_of_Life\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom PIL import Image\n\n# Define glider example\nGLIDER = [\n    [0, 1, 0, 0, 0, 0, 0, 0],\n    [0, 0, 1, 0, 0, 0, 0, 0],\n    [1, 1, 1, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0],\n]\n\n# Define blinker example\nBLINKER = [[0, 1, 0], [0, 1, 0], [0, 1, 0]]\n\n\ndef new_generation(cells: list[list[int]]) -> list[list[int]]:\n    \"\"\"\n    Generates the next generation for a given state of Conway's Game of Life.\n    >>> new_generation(BLINKER)\n    [[0, 0, 0], [1, 1, 1], [0, 0, 0]]\n    \"\"\"\n    next_generation = []\n    for i in range(len(cells)):\n        next_generation_row = []\n        for j in range(len(cells[i])):\n            # Get the number of live neighbours\n            neighbour_count = 0\n            if i > 0 and j > 0:\n                neighbour_count += cells[i - 1][j - 1]\n            if i > 0:\n                neighbour_count += cells[i - 1][j]\n            if i > 0 and j < len(cells[i]) - 1:\n                neighbour_count += cells[i - 1][j + 1]\n            if j > 0:\n                neighbour_count += cells[i][j - 1]\n            if j < len(cells[i]) - 1:\n                neighbour_count += cells[i][j + 1]\n            if i < len(cells) - 1 and j > 0:\n                neighbour_count += cells[i + 1][j - 1]\n            if i < len(cells) - 1:\n                neighbour_count += cells[i + 1][j]\n            if i < len(cells) - 1 and j < len(cells[i]) - 1:\n                neighbour_count += cells[i + 1][j + 1]\n\n            # Rules of the game of life (excerpt from Wikipedia):\n            # 1. Any live cell with two or three live neighbours survives.\n            # 2. Any dead cell with three live neighbours becomes a live cell.\n            # 3. All other live cells die in the next generation.\n            #    Similarly, all other dead cells stay dead.\n            alive = cells[i][j] == 1\n            if (alive and 2 <= neighbour_count <= 3) or (\n                not alive and neighbour_count == 3\n            ):\n                next_generation_row.append(1)\n            else:\n                next_generation_row.append(0)\n\n        next_generation.append(next_generation_row)\n    return next_generation\n\n\ndef generate_images(cells: list[list[int]], frames: int) -> list[Image.Image]:\n    \"\"\"\n    Generates a list of images of subsequent Game of Life states.\n    \"\"\"\n    images = []\n    for _ in range(frames):\n        # Create output image\n        img = Image.new(\"RGB\", (len(cells[0]), len(cells)))\n        pixels = img.load()\n\n        # Save cells to image\n        for x in range(len(cells)):\n            for y in range(len(cells[0])):\n                colour = 255 - cells[y][x] * 255\n                pixels[x, y] = (colour, colour, colour)\n\n        # Save image\n        images.append(img)\n        cells = new_generation(cells)\n    return images\n\n\nif __name__ == \"__main__\":\n    images = generate_images(GLIDER, 16)\n    images[0].save(\"out.gif\", save_all=True, append_images=images[1:])\n"
  },
  {
    "path": "cellular_automata/game_of_life.py",
    "content": "\"\"\"Conway's Game Of Life, Author Anurag Kumar(mailto:anuragkumarak95@gmail.com)\n\nRequirements:\n  - numpy\n  - random\n  - time\n  - matplotlib\n\nPython:\n  - 3.5\n\nUsage:\n  - $python3 game_of_life <canvas_size:int>\n\nGame-Of-Life Rules:\n\n 1.\n Any live cell with fewer than two live neighbours\n dies, as if caused by under-population.\n 2.\n Any live cell with two or three live neighbours lives\n on to the next generation.\n 3.\n Any live cell with more than three live neighbours\n dies, as if by over-population.\n 4.\n Any dead cell with exactly three live neighbours be-\n comes a live cell, as if by reproduction.\n\"\"\"\n\nimport random\nimport sys\n\nimport numpy as np\nfrom matplotlib import pyplot as plt\nfrom matplotlib.colors import ListedColormap\n\nusage_doc = \"Usage of script: script_name <size_of_canvas:int>\"\n\nchoice = [0] * 100 + [1] * 10\nrandom.shuffle(choice)\n\n\ndef create_canvas(size: int) -> list[list[bool]]:\n    canvas = [[False for i in range(size)] for j in range(size)]\n    return canvas\n\n\ndef seed(canvas: list[list[bool]]) -> None:\n    for i, row in enumerate(canvas):\n        for j, _ in enumerate(row):\n            canvas[i][j] = bool(random.getrandbits(1))\n\n\ndef run(canvas: list[list[bool]]) -> list[list[bool]]:\n    \"\"\"\n    This function runs the rules of game through all points, and changes their\n    status accordingly.(in the same canvas)\n    @Args:\n    --\n    canvas : canvas of population to run the rules on.\n\n    @returns:\n    --\n    canvas of population after one step\n    \"\"\"\n    current_canvas = np.array(canvas)\n    next_gen_canvas = np.array(create_canvas(current_canvas.shape[0]))\n    for r, row in enumerate(current_canvas):\n        for c, pt in enumerate(row):\n            next_gen_canvas[r][c] = __judge_point(\n                pt, current_canvas[r - 1 : r + 2, c - 1 : c + 2]\n            )\n\n    return next_gen_canvas.tolist()\n\n\ndef __judge_point(pt: bool, neighbours: list[list[bool]]) -> bool:\n    dead = 0\n    alive = 0\n    # finding dead or alive neighbours count.\n    for i in neighbours:\n        for status in i:\n            if status:\n                alive += 1\n            else:\n                dead += 1\n\n    # handling duplicate entry for focus pt.\n    if pt:\n        alive -= 1\n    else:\n        dead -= 1\n\n    # running the rules of game here.\n    state = pt\n    if pt:\n        if alive < 2:\n            state = False\n        elif alive in {2, 3}:\n            state = True\n        elif alive > 3:\n            state = False\n    elif alive == 3:\n        state = True\n\n    return state\n\n\nif __name__ == \"__main__\":\n    if len(sys.argv) != 2:\n        raise Exception(usage_doc)\n\n    canvas_size = int(sys.argv[1])\n    # main working structure of this module.\n    c = create_canvas(canvas_size)\n    seed(c)\n    fig, ax = plt.subplots()\n    fig.show()\n    cmap = ListedColormap([\"w\", \"k\"])\n    try:\n        while True:\n            c = run(c)\n            ax.matshow(c, cmap=cmap)\n            fig.canvas.draw()\n            ax.cla()\n    except KeyboardInterrupt:\n        # do nothing.\n        pass\n"
  },
  {
    "path": "cellular_automata/langtons_ant.py",
    "content": "\"\"\"\nLangton's ant\n\n@ https://en.wikipedia.org/wiki/Langton%27s_ant\n@ https://upload.wikimedia.org/wikipedia/commons/0/09/LangtonsAntAnimated.gif\n\"\"\"\n\nfrom functools import partial\n\nfrom matplotlib import pyplot as plt\nfrom matplotlib.animation import FuncAnimation\n\nWIDTH = 80\nHEIGHT = 80\n\n\nclass LangtonsAnt:\n    \"\"\"\n    Represents the main LangonsAnt algorithm.\n\n    >>> la = LangtonsAnt(2, 2)\n    >>> la.board\n    [[True, True], [True, True]]\n    >>> la.ant_position\n    (1, 1)\n    \"\"\"\n\n    def __init__(self, width: int, height: int) -> None:\n        # Each square is either True or False where True is white and False is black\n        self.board = [[True] * width for _ in range(height)]\n        self.ant_position: tuple[int, int] = (width // 2, height // 2)\n\n        # Initially pointing left (similar to the wikipedia image)\n        # (0 = 0° | 1 = 90° | 2 = 180 ° | 3 = 270°)\n        self.ant_direction: int = 3\n\n    def move_ant(self, axes: plt.Axes | None, display: bool, _frame: int) -> None:\n        \"\"\"\n        Performs three tasks:\n            1. The ant turns either clockwise or anti-clockwise according to the colour\n            of the square that it is currently on. If the square is white, the ant\n            turns clockwise, and if the square is black the ant turns anti-clockwise\n            2. The ant moves one square in the direction that it is currently facing\n            3. The square the ant was previously on is inverted (White -> Black and\n            Black -> White)\n\n        If display is True, the board will also be displayed on the axes\n\n        >>> la = LangtonsAnt(2, 2)\n        >>> la.move_ant(None, True, 0)\n        >>> la.board\n        [[True, True], [True, False]]\n        >>> la.move_ant(None, True, 0)\n        >>> la.board\n        [[True, False], [True, False]]\n        \"\"\"\n        directions = {\n            0: (-1, 0),  # 0°\n            1: (0, 1),  # 90°\n            2: (1, 0),  # 180°\n            3: (0, -1),  # 270°\n        }\n        x, y = self.ant_position\n\n        # Turn clockwise or anti-clockwise according to colour of square\n        if self.board[x][y] is True:\n            # The square is white so turn 90° clockwise\n            self.ant_direction = (self.ant_direction + 1) % 4\n        else:\n            # The square is black so turn 90° anti-clockwise\n            self.ant_direction = (self.ant_direction - 1) % 4\n\n        # Move ant\n        move_x, move_y = directions[self.ant_direction]\n        self.ant_position = (x + move_x, y + move_y)\n\n        # Flip colour of square\n        self.board[x][y] = not self.board[x][y]\n\n        if display and axes:\n            # Display the board on the axes\n            axes.get_xaxis().set_ticks([])\n            axes.get_yaxis().set_ticks([])\n            axes.imshow(self.board, cmap=\"gray\", interpolation=\"nearest\")\n\n    def display(self, frames: int = 100_000) -> None:\n        \"\"\"\n        Displays the board without delay in a matplotlib plot\n        to visually understand and track the ant.\n\n        >>> _ = LangtonsAnt(WIDTH, HEIGHT)\n        \"\"\"\n        fig, ax = plt.subplots()\n        # Assign animation to a variable to prevent it from getting garbage collected\n        self.animation = FuncAnimation(\n            fig, partial(self.move_ant, ax, True), frames=frames, interval=1\n        )\n        plt.show()\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    LangtonsAnt(WIDTH, HEIGHT).display()\n"
  },
  {
    "path": "cellular_automata/nagel_schrekenberg.py",
    "content": "\"\"\"\nSimulate the evolution of a highway with only one road that is a loop.\nThe highway is divided in cells, each cell can have at most one car in it.\nThe highway is a loop so when a car comes to one end, it will come out on the other.\nEach car is represented by its speed (from 0 to 5).\n\nSome information about speed:\n    -1 means that the cell on the highway is empty\n    0 to 5 are the speed of the cars with 0 being the lowest and 5 the highest\n\nhighway: list[int]  Where every position and speed of every car will be stored\nprobability         The probability that a driver will slow down\ninitial_speed       The speed of the cars a the start\nfrequency           How many cells there are between two cars at the start\nmax_speed           The maximum speed a car can go to\nnumber_of_cells     How many cell are there in the highway\nnumber_of_update    How many times will the position be updated\n\nMore information here: https://en.wikipedia.org/wiki/Nagel%E2%80%93Schreckenberg_model\n\nExamples for doctest:\n>>> simulate(construct_highway(6, 3, 0), 2, 0, 2)\n[[0, -1, -1, 0, -1, -1], [-1, 1, -1, -1, 1, -1], [-1, -1, 1, -1, -1, 1]]\n>>> simulate(construct_highway(5, 2, -2), 3, 0, 2)\n[[0, -1, 0, -1, 0], [0, -1, 0, -1, -1], [0, -1, -1, 1, -1], [-1, 1, -1, 0, -1]]\n\"\"\"\n\nfrom random import randint, random\n\n\ndef construct_highway(\n    number_of_cells: int,\n    frequency: int,\n    initial_speed: int,\n    random_frequency: bool = False,\n    random_speed: bool = False,\n    max_speed: int = 5,\n) -> list:\n    \"\"\"\n    Build the highway following the parameters given\n    >>> construct_highway(10, 2, 6)\n    [[6, -1, 6, -1, 6, -1, 6, -1, 6, -1]]\n    >>> construct_highway(10, 10, 2)\n    [[2, -1, -1, -1, -1, -1, -1, -1, -1, -1]]\n    \"\"\"\n\n    highway = [[-1] * number_of_cells]  # Create a highway without any car\n    i = 0\n    initial_speed = max(initial_speed, 0)\n    while i < number_of_cells:\n        highway[0][i] = (\n            randint(0, max_speed) if random_speed else initial_speed\n        )  # Place the cars\n        i += (\n            randint(1, max_speed * 2) if random_frequency else frequency\n        )  # Arbitrary number, may need tuning\n    return highway\n\n\ndef get_distance(highway_now: list, car_index: int) -> int:\n    \"\"\"\n    Get the distance between a car (at index car_index) and the next car\n    >>> get_distance([6, -1, 6, -1, 6], 2)\n    1\n    >>> get_distance([2, -1, -1, -1, 3, 1, 0, 1, 3, 2], 0)\n    3\n    >>> get_distance([-1, -1, -1, -1, 2, -1, -1, -1, 3], -1)\n    4\n    \"\"\"\n\n    distance = 0\n    cells = highway_now[car_index + 1 :]\n    for cell in range(len(cells)):  # May need a better name for this\n        if cells[cell] != -1:  # If the cell is not empty then\n            return distance  # we have the distance we wanted\n        distance += 1\n    # Here if the car is near the end of the highway\n    return distance + get_distance(highway_now, -1)\n\n\ndef update(highway_now: list, probability: float, max_speed: int) -> list:\n    \"\"\"\n    Update the speed of the cars\n    >>> update([-1, -1, -1, -1, -1, 2, -1, -1, -1, -1, 3], 0.0, 5)\n    [-1, -1, -1, -1, -1, 3, -1, -1, -1, -1, 4]\n    >>> update([-1, -1, 2, -1, -1, -1, -1, 3], 0.0, 5)\n    [-1, -1, 3, -1, -1, -1, -1, 1]\n    \"\"\"\n\n    number_of_cells = len(highway_now)\n    # Beforce calculations, the highway is empty\n    next_highway = [-1] * number_of_cells\n\n    for car_index in range(number_of_cells):\n        if highway_now[car_index] != -1:\n            # Add 1 to the current speed of the car and cap the speed\n            next_highway[car_index] = min(highway_now[car_index] + 1, max_speed)\n            # Number of empty cell before the next car\n            dn = get_distance(highway_now, car_index) - 1\n            # We can't have the car causing an accident\n            next_highway[car_index] = min(next_highway[car_index], dn)\n            if random() < probability:\n                # Randomly, a driver will slow down\n                next_highway[car_index] = max(next_highway[car_index] - 1, 0)\n    return next_highway\n\n\ndef simulate(\n    highway: list, number_of_update: int, probability: float, max_speed: int\n) -> list:\n    \"\"\"\n    The main function, it will simulate the evolution of the highway\n    >>> simulate([[-1, 2, -1, -1, -1, 3]], 2, 0.0, 3)\n    [[-1, 2, -1, -1, -1, 3], [-1, -1, -1, 2, -1, 0], [1, -1, -1, 0, -1, -1]]\n    >>> simulate([[-1, 2, -1, 3]], 4, 0.0, 3)\n    [[-1, 2, -1, 3], [-1, 0, -1, 0], [-1, 0, -1, 0], [-1, 0, -1, 0], [-1, 0, -1, 0]]\n    \"\"\"\n\n    number_of_cells = len(highway[0])\n\n    for i in range(number_of_update):\n        next_speeds_calculated = update(highway[i], probability, max_speed)\n        real_next_speeds = [-1] * number_of_cells\n\n        for car_index in range(number_of_cells):\n            speed = next_speeds_calculated[car_index]\n            if speed != -1:\n                # Change the position based on the speed (with % to create the loop)\n                index = (car_index + speed) % number_of_cells\n                # Commit the change of position\n                real_next_speeds[index] = speed\n        highway.append(real_next_speeds)\n\n    return highway\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "cellular_automata/one_dimensional.py",
    "content": "\"\"\"\nReturn an image of 16 generations of one-dimensional cellular automata based on a given\nruleset number\nhttps://mathworld.wolfram.com/ElementaryCellularAutomaton.html\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom PIL import Image\n\n# Define the first generation of cells\n# fmt: off\nCELLS = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,\n          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]\n# fmt: on\n\n\ndef format_ruleset(ruleset: int) -> list[int]:\n    \"\"\"\n    >>> format_ruleset(11100)\n    [0, 0, 0, 1, 1, 1, 0, 0]\n    >>> format_ruleset(0)\n    [0, 0, 0, 0, 0, 0, 0, 0]\n    >>> format_ruleset(11111111)\n    [1, 1, 1, 1, 1, 1, 1, 1]\n    \"\"\"\n    return [int(c) for c in f\"{ruleset:08}\"[:8]]\n\n\ndef new_generation(cells: list[list[int]], rule: list[int], time: int) -> list[int]:\n    population = len(cells[0])  # 31\n    next_generation = []\n    for i in range(population):\n        # Get the neighbors of each cell\n        # Handle neighbours outside bounds by using 0 as their value\n        left_neighbor = 0 if i == 0 else cells[time][i - 1]\n        right_neighbor = 0 if i == population - 1 else cells[time][i + 1]\n        # Define a new cell and add it to the new generation\n        situation = 7 - int(f\"{left_neighbor}{cells[time][i]}{right_neighbor}\", 2)\n        next_generation.append(rule[situation])\n    return next_generation\n\n\ndef generate_image(cells: list[list[int]]) -> Image.Image:\n    \"\"\"\n    Convert the cells into a greyscale PIL.Image.Image and return it to the caller.\n    >>> from random import random\n    >>> cells = [[random() for w in range(31)] for h in range(16)]\n    >>> img = generate_image(cells)\n    >>> isinstance(img, Image.Image)\n    True\n    >>> img.width, img.height\n    (31, 16)\n    \"\"\"\n    # Create the output image\n    img = Image.new(\"RGB\", (len(cells[0]), len(cells)))\n    pixels = img.load()\n    # Generates image\n    for w in range(img.width):\n        for h in range(img.height):\n            color = 255 - int(255 * cells[h][w])\n            pixels[w, h] = (color, color, color)\n    return img\n\n\nif __name__ == \"__main__\":\n    rule_num = bin(int(input(\"Rule:\\n\").strip()))[2:]\n    rule = format_ruleset(int(rule_num))\n    for time in range(16):\n        CELLS.append(new_generation(CELLS, rule, time))\n    img = generate_image(CELLS)\n    # Uncomment to save the image\n    # img.save(f\"rule_{rule_num}.png\")\n    img.show()\n"
  },
  {
    "path": "cellular_automata/wa_tor.py",
    "content": "\"\"\"\nWa-Tor algorithm (1984)\n\n| @ https://en.wikipedia.org/wiki/Wa-Tor\n| @ https://beltoforion.de/en/wator/\n| @ https://beltoforion.de/en/wator/images/wator_medium.webm\n\nThis solution aims to completely remove any systematic approach\nto the Wa-Tor planet, and utilise fully random methods.\n\nThe constants are a working set that allows the Wa-Tor planet\nto result in one of the three possible results.\n\"\"\"\n\nfrom collections.abc import Callable\nfrom random import randint, shuffle\nfrom time import sleep\nfrom typing import Literal\n\nWIDTH = 50  # Width of the Wa-Tor planet\nHEIGHT = 50  # Height of the Wa-Tor planet\n\nPREY_INITIAL_COUNT = 30  # The initial number of prey entities\nPREY_REPRODUCTION_TIME = 5  # The chronons before reproducing\n\nPREDATOR_INITIAL_COUNT = 50  # The initial number of predator entities\n# The initial energy value of predator entities\nPREDATOR_INITIAL_ENERGY_VALUE = 15\n# The energy value provided when consuming prey\nPREDATOR_FOOD_VALUE = 5\nPREDATOR_REPRODUCTION_TIME = 20  # The chronons before reproducing\n\nMAX_ENTITIES = 500  # The max number of organisms on the board\n# The number of entities to delete from the unbalanced side\nDELETE_UNBALANCED_ENTITIES = 50\n\n\nclass Entity:\n    \"\"\"\n    Represents an entity (either prey or predator).\n\n    >>> e = Entity(True, coords=(0, 0))\n    >>> e.prey\n    True\n    >>> e.coords\n    (0, 0)\n    >>> e.alive\n    True\n    \"\"\"\n\n    def __init__(self, prey: bool, coords: tuple[int, int]) -> None:\n        self.prey = prey\n        # The (row, col) pos of the entity\n        self.coords = coords\n\n        self.remaining_reproduction_time = (\n            PREY_REPRODUCTION_TIME if prey else PREDATOR_REPRODUCTION_TIME\n        )\n        self.energy_value = None if prey is True else PREDATOR_INITIAL_ENERGY_VALUE\n        self.alive = True\n\n    def reset_reproduction_time(self) -> None:\n        \"\"\"\n        >>> e = Entity(True, coords=(0, 0))\n        >>> e.reset_reproduction_time()\n        >>> e.remaining_reproduction_time == PREY_REPRODUCTION_TIME\n        True\n        >>> e = Entity(False, coords=(0, 0))\n        >>> e.reset_reproduction_time()\n        >>> e.remaining_reproduction_time == PREDATOR_REPRODUCTION_TIME\n        True\n        \"\"\"\n        self.remaining_reproduction_time = (\n            PREY_REPRODUCTION_TIME if self.prey is True else PREDATOR_REPRODUCTION_TIME\n        )\n\n    def __repr__(self) -> str:\n        \"\"\"\n        >>> Entity(prey=True, coords=(1, 1))\n        Entity(prey=True, coords=(1, 1), remaining_reproduction_time=5)\n        >>> Entity(prey=False, coords=(2, 1))  # doctest: +NORMALIZE_WHITESPACE\n        Entity(prey=False, coords=(2, 1),\n        remaining_reproduction_time=20, energy_value=15)\n        \"\"\"\n        repr_ = (\n            f\"Entity(prey={self.prey}, coords={self.coords}, \"\n            f\"remaining_reproduction_time={self.remaining_reproduction_time}\"\n        )\n        if self.energy_value is not None:\n            repr_ += f\", energy_value={self.energy_value}\"\n        return f\"{repr_})\"\n\n\nclass WaTor:\n    \"\"\"\n    Represents the main Wa-Tor algorithm.\n\n    :attr time_passed: A function that is called every time\n        time passes (a chronon) in order to visually display\n        the new Wa-Tor planet. The `time_passed` function can block\n        using ``time.sleep`` to slow the algorithm progression.\n\n    >>> wt = WaTor(10, 15)\n    >>> wt.width\n    10\n    >>> wt.height\n    15\n    >>> len(wt.planet)\n    15\n    >>> len(wt.planet[0])\n    10\n    >>> len(wt.get_entities()) == PREDATOR_INITIAL_COUNT + PREY_INITIAL_COUNT\n    True\n    \"\"\"\n\n    time_passed: Callable[[\"WaTor\", int], None] | None\n\n    def __init__(self, width: int, height: int) -> None:\n        self.width = width\n        self.height = height\n        self.time_passed = None\n\n        self.planet: list[list[Entity | None]] = [[None] * width for _ in range(height)]\n\n        # Populate planet with predators and prey randomly\n        for _ in range(PREY_INITIAL_COUNT):\n            self.add_entity(prey=True)\n        for _ in range(PREDATOR_INITIAL_COUNT):\n            self.add_entity(prey=False)\n        self.set_planet(self.planet)\n\n    def set_planet(self, planet: list[list[Entity | None]]) -> None:\n        \"\"\"\n        Ease of access for testing\n\n        >>> wt = WaTor(WIDTH, HEIGHT)\n        >>> planet = [\n        ... [None, None, None],\n        ... [None, Entity(True, coords=(1, 1)), None]\n        ... ]\n        >>> wt.set_planet(planet)\n        >>> wt.planet == planet\n        True\n        >>> wt.width\n        3\n        >>> wt.height\n        2\n        \"\"\"\n        self.planet = planet\n        self.width = len(planet[0])\n        self.height = len(planet)\n\n    def add_entity(self, prey: bool) -> None:\n        \"\"\"\n        Adds an entity, making sure the entity does\n        not override another entity\n\n        >>> wt = WaTor(WIDTH, HEIGHT)\n        >>> wt.set_planet([[None, None], [None, None]])\n        >>> wt.add_entity(True)\n        >>> len(wt.get_entities())\n        1\n        >>> wt.add_entity(False)\n        >>> len(wt.get_entities())\n        2\n        \"\"\"\n        while True:\n            row, col = randint(0, self.height - 1), randint(0, self.width - 1)\n            if self.planet[row][col] is None:\n                self.planet[row][col] = Entity(prey=prey, coords=(row, col))\n                return\n\n    def get_entities(self) -> list[Entity]:\n        \"\"\"\n        Returns a list of all the entities within the planet.\n\n        >>> wt = WaTor(WIDTH, HEIGHT)\n        >>> len(wt.get_entities()) == PREDATOR_INITIAL_COUNT + PREY_INITIAL_COUNT\n        True\n        \"\"\"\n        return [entity for column in self.planet for entity in column if entity]\n\n    def balance_predators_and_prey(self) -> None:\n        \"\"\"\n        Balances predators and preys so that prey\n        can not dominate the predators, blocking up\n        space for them to reproduce.\n\n        >>> wt = WaTor(WIDTH, HEIGHT)\n        >>> for i in range(2000):\n        ...     row, col = i // HEIGHT, i % WIDTH\n        ...     wt.planet[row][col] = Entity(True, coords=(row, col))\n        >>> entities = len(wt.get_entities())\n        >>> wt.balance_predators_and_prey()\n        >>> len(wt.get_entities()) == entities\n        False\n        \"\"\"\n        entities = self.get_entities()\n        shuffle(entities)\n\n        if len(entities) >= MAX_ENTITIES - MAX_ENTITIES / 10:\n            prey = [entity for entity in entities if entity.prey]\n            predators = [entity for entity in entities if not entity.prey]\n\n            prey_count, predator_count = len(prey), len(predators)\n\n            entities_to_purge = (\n                prey[:DELETE_UNBALANCED_ENTITIES]\n                if prey_count > predator_count\n                else predators[:DELETE_UNBALANCED_ENTITIES]\n            )\n            for entity in entities_to_purge:\n                self.planet[entity.coords[0]][entity.coords[1]] = None\n\n    def get_surrounding_prey(self, entity: Entity) -> list[Entity]:\n        \"\"\"\n        Returns all the prey entities around (N, S, E, W) a predator entity.\n\n        Subtly different to the `move_and_reproduce`.\n\n        >>> wt = WaTor(WIDTH, HEIGHT)\n        >>> wt.set_planet([\n        ... [None, Entity(True, (0, 1)), None],\n        ... [None, Entity(False, (1, 1)), None],\n        ... [None, Entity(True, (2, 1)), None]])\n        >>> wt.get_surrounding_prey(\n        ... Entity(False, (1, 1)))  # doctest: +NORMALIZE_WHITESPACE\n        [Entity(prey=True, coords=(0, 1), remaining_reproduction_time=5),\n        Entity(prey=True, coords=(2, 1), remaining_reproduction_time=5)]\n        >>> wt.set_planet([[Entity(False, (0, 0))]])\n        >>> wt.get_surrounding_prey(Entity(False, (0, 0)))\n        []\n        >>> wt.set_planet([\n        ... [Entity(True, (0, 0)), Entity(False, (1, 0)), Entity(False, (2, 0))],\n        ... [None, Entity(False, (1, 1)), Entity(True, (2, 1))],\n        ... [None, None, None]])\n        >>> wt.get_surrounding_prey(Entity(False, (1, 0)))\n        [Entity(prey=True, coords=(0, 0), remaining_reproduction_time=5)]\n        \"\"\"\n        row, col = entity.coords\n        adjacent: list[tuple[int, int]] = [\n            (row - 1, col),  # North\n            (row + 1, col),  # South\n            (row, col - 1),  # West\n            (row, col + 1),  # East\n        ]\n\n        return [\n            ent\n            for r, c in adjacent\n            if 0 <= r < self.height\n            and 0 <= c < self.width\n            and (ent := self.planet[r][c]) is not None\n            and ent.prey\n        ]\n\n    def move_and_reproduce(\n        self, entity: Entity, direction_orders: list[Literal[\"N\", \"E\", \"S\", \"W\"]]\n    ) -> None:\n        \"\"\"\n        Attempts to move to an unoccupied neighbouring square\n        in either of the four directions (North, South, East, West).\n        If the move was successful and the `remaining_reproduction_time` is\n        equal to 0, then a new prey or predator can also be created\n        in the previous square.\n\n        :param direction_orders: Ordered list (like priority queue) depicting\n                            order to attempt to move. Removes any systematic\n                            approach of checking neighbouring squares.\n\n        >>> planet = [\n        ... [None, None, None],\n        ... [None, Entity(True, coords=(1, 1)), None],\n        ... [None, None, None]\n        ... ]\n        >>> wt = WaTor(WIDTH, HEIGHT)\n        >>> wt.set_planet(planet)\n        >>> wt.move_and_reproduce(Entity(True, coords=(1, 1)), direction_orders=[\"N\"])\n        >>> wt.planet  # doctest: +NORMALIZE_WHITESPACE\n        [[None, Entity(prey=True, coords=(0, 1), remaining_reproduction_time=4), None],\n        [None, None, None],\n        [None, None, None]]\n        >>> wt.planet[0][0] = Entity(True, coords=(0, 0))\n        >>> wt.move_and_reproduce(Entity(True, coords=(0, 1)),\n        ... direction_orders=[\"N\", \"W\", \"E\", \"S\"])\n        >>> wt.planet  # doctest: +NORMALIZE_WHITESPACE\n        [[Entity(prey=True, coords=(0, 0), remaining_reproduction_time=5), None,\n        Entity(prey=True, coords=(0, 2), remaining_reproduction_time=4)],\n        [None, None, None],\n        [None, None, None]]\n        >>> wt.planet[0][1] = wt.planet[0][2]\n        >>> wt.planet[0][2] = None\n        >>> wt.move_and_reproduce(Entity(True, coords=(0, 1)),\n        ... direction_orders=[\"N\", \"W\", \"S\", \"E\"])\n        >>> wt.planet  # doctest: +NORMALIZE_WHITESPACE\n        [[Entity(prey=True, coords=(0, 0), remaining_reproduction_time=5), None, None],\n        [None, Entity(prey=True, coords=(1, 1), remaining_reproduction_time=4), None],\n        [None, None, None]]\n\n        >>> wt = WaTor(WIDTH, HEIGHT)\n        >>> reproducable_entity = Entity(False, coords=(0, 1))\n        >>> reproducable_entity.remaining_reproduction_time = 0\n        >>> wt.planet = [[None, reproducable_entity]]\n        >>> wt.move_and_reproduce(reproducable_entity,\n        ... direction_orders=[\"N\", \"W\", \"S\", \"E\"])\n        >>> wt.planet  # doctest: +NORMALIZE_WHITESPACE\n        [[Entity(prey=False, coords=(0, 0),\n        remaining_reproduction_time=20, energy_value=15),\n        Entity(prey=False, coords=(0, 1), remaining_reproduction_time=20,\n        energy_value=15)]]\n        \"\"\"\n        row, col = coords = entity.coords\n\n        adjacent_squares: dict[Literal[\"N\", \"E\", \"S\", \"W\"], tuple[int, int]] = {\n            \"N\": (row - 1, col),  # North\n            \"S\": (row + 1, col),  # South\n            \"W\": (row, col - 1),  # West\n            \"E\": (row, col + 1),  # East\n        }\n        # Weight adjacent locations\n        adjacent: list[tuple[int, int]] = []\n        for order in direction_orders:\n            adjacent.append(adjacent_squares[order])\n\n        for r, c in adjacent:\n            if (\n                0 <= r < self.height\n                and 0 <= c < self.width\n                and self.planet[r][c] is None\n            ):\n                # Move entity to empty adjacent square\n                self.planet[r][c] = entity\n                self.planet[row][col] = None\n                entity.coords = (r, c)\n                break\n\n        # (2.) See if it possible to reproduce in previous square\n        if coords != entity.coords and entity.remaining_reproduction_time <= 0:\n            # Check if the entities on the planet is less than the max limit\n            if len(self.get_entities()) < MAX_ENTITIES:\n                # Reproduce in previous square\n                self.planet[row][col] = Entity(prey=entity.prey, coords=coords)\n                entity.reset_reproduction_time()\n        else:\n            entity.remaining_reproduction_time -= 1\n\n    def perform_prey_actions(\n        self, entity: Entity, direction_orders: list[Literal[\"N\", \"E\", \"S\", \"W\"]]\n    ) -> None:\n        \"\"\"\n        Performs the actions for a prey entity\n\n        For prey the rules are:\n            1. At each chronon, a prey moves randomly to one of the adjacent unoccupied\n               squares. If there are no free squares, no movement takes place.\n            2. Once a prey has survived a certain number of chronons it may reproduce.\n               This is done as it moves to a neighbouring square,\n               leaving behind a new prey in its old position.\n               Its reproduction time is also reset to zero.\n\n        >>> wt = WaTor(WIDTH, HEIGHT)\n        >>> reproducable_entity = Entity(True, coords=(0, 1))\n        >>> reproducable_entity.remaining_reproduction_time = 0\n        >>> wt.planet = [[None, reproducable_entity]]\n        >>> wt.perform_prey_actions(reproducable_entity,\n        ... direction_orders=[\"N\", \"W\", \"S\", \"E\"])\n        >>> wt.planet  # doctest: +NORMALIZE_WHITESPACE\n        [[Entity(prey=True, coords=(0, 0), remaining_reproduction_time=5),\n        Entity(prey=True, coords=(0, 1), remaining_reproduction_time=5)]]\n        \"\"\"\n        self.move_and_reproduce(entity, direction_orders)\n\n    def perform_predator_actions(\n        self,\n        entity: Entity,\n        occupied_by_prey_coords: tuple[int, int] | None,\n        direction_orders: list[Literal[\"N\", \"E\", \"S\", \"W\"]],\n    ) -> None:\n        \"\"\"\n        Performs the actions for a predator entity\n\n        :param occupied_by_prey_coords: Move to this location if there is prey there\n\n        For predators the rules are:\n            1. At each chronon, a predator moves randomly to an adjacent square occupied\n               by a prey. If there is none, the predator moves to a random adjacent\n               unoccupied square. If there are no free squares, no movement takes place.\n            2. At each chronon, each predator is deprived of a unit of energy.\n            3. Upon reaching zero energy, a predator dies.\n            4. If a predator moves to a square occupied by a prey,\n               it eats the prey and earns a certain amount of energy.\n            5. Once a predator has survived a certain number of chronons\n               it may reproduce in exactly the same way as the prey.\n\n        >>> wt = WaTor(WIDTH, HEIGHT)\n        >>> wt.set_planet([[Entity(True, coords=(0, 0)), Entity(False, coords=(0, 1))]])\n        >>> wt.perform_predator_actions(Entity(False, coords=(0, 1)), (0, 0), [])\n        >>> wt.planet  # doctest: +NORMALIZE_WHITESPACE\n        [[Entity(prey=False, coords=(0, 0),\n        remaining_reproduction_time=20, energy_value=19), None]]\n        \"\"\"\n        assert entity.energy_value is not None  # [type checking]\n\n        # (3.) If the entity has 0 energy, it will die\n        if entity.energy_value == 0:\n            self.planet[entity.coords[0]][entity.coords[1]] = None\n            return\n\n        # (1.) Move to entity if possible\n        if occupied_by_prey_coords is not None:\n            # Kill the prey\n            prey = self.planet[occupied_by_prey_coords[0]][occupied_by_prey_coords[1]]\n            assert prey is not None\n            prey.alive = False\n\n            # Move onto prey\n            self.planet[occupied_by_prey_coords[0]][occupied_by_prey_coords[1]] = entity\n            self.planet[entity.coords[0]][entity.coords[1]] = None\n\n            entity.coords = occupied_by_prey_coords\n            # (4.) Eats the prey and earns energy\n            entity.energy_value += PREDATOR_FOOD_VALUE\n        else:\n            # (5.) If it has survived the certain number of chronons it will also\n            # reproduce in this function\n            self.move_and_reproduce(entity, direction_orders)\n\n        # (2.) Each chronon, the predator is deprived of a unit of energy\n        entity.energy_value -= 1\n\n    def run(self, *, iteration_count: int) -> None:\n        \"\"\"\n        Emulate time passing by looping `iteration_count` times\n\n        >>> wt = WaTor(WIDTH, HEIGHT)\n        >>> wt.run(iteration_count=PREDATOR_INITIAL_ENERGY_VALUE - 1)\n        >>> len(list(filter(lambda entity: entity.prey is False,\n        ... wt.get_entities()))) >= PREDATOR_INITIAL_COUNT\n        True\n        \"\"\"\n        for iter_num in range(iteration_count):\n            # Generate list of all entities in order to randomly\n            # pop an entity at a time to simulate true randomness\n            # This removes the systematic approach of iterating\n            # through each entity width by height\n            all_entities = self.get_entities()\n\n            for __ in range(len(all_entities)):\n                entity = all_entities.pop(randint(0, len(all_entities) - 1))\n                if entity.alive is False:\n                    continue\n\n                directions: list[Literal[\"N\", \"E\", \"S\", \"W\"]] = [\"N\", \"E\", \"S\", \"W\"]\n                shuffle(directions)  # Randomly shuffle directions\n\n                if entity.prey:\n                    self.perform_prey_actions(entity, directions)\n                else:\n                    # Create list of surrounding prey\n                    surrounding_prey = self.get_surrounding_prey(entity)\n                    surrounding_prey_coords = None\n\n                    if surrounding_prey:\n                        # Again, randomly shuffle directions\n                        shuffle(surrounding_prey)\n                        surrounding_prey_coords = surrounding_prey[0].coords\n\n                    self.perform_predator_actions(\n                        entity, surrounding_prey_coords, directions\n                    )\n\n            # Balance out the predators and prey\n            self.balance_predators_and_prey()\n\n            if self.time_passed is not None:\n                # Call time_passed function for Wa-Tor planet\n                # visualisation in a terminal or a graph.\n                self.time_passed(self, iter_num)\n\n\ndef visualise(wt: WaTor, iter_number: int, *, colour: bool = True) -> None:\n    \"\"\"\n    Visually displays the Wa-Tor planet using\n    an ascii code in terminal to clear and re-print\n    the Wa-Tor planet at intervals.\n\n    Uses ascii colour codes to colourfully display the predators and prey:\n        * (0x60f197) Prey = ``#``\n        * (0xfffff) Predator = ``x``\n\n    >>> wt = WaTor(30, 30)\n    >>> wt.set_planet([\n    ... [Entity(True, coords=(0, 0)), Entity(False, coords=(0, 1)), None],\n    ... [Entity(False, coords=(1, 0)), None, Entity(False, coords=(1, 2))],\n    ... [None, Entity(True, coords=(2, 1)), None]\n    ... ])\n    >>> visualise(wt, 0, colour=False)  # doctest: +NORMALIZE_WHITESPACE\n    #  x  .\n    x  .  x\n    .  #  .\n    <BLANKLINE>\n    Iteration: 0 | Prey count: 2 | Predator count: 3 |\n    \"\"\"\n    if colour:\n        __import__(\"os\").system(\"\")\n        print(\"\\x1b[0;0H\\x1b[2J\\x1b[?25l\")\n\n    reprint = \"\\x1b[0;0H\" if colour else \"\"\n    ansi_colour_end = \"\\x1b[0m \" if colour else \" \"\n\n    planet = wt.planet\n    output = \"\"\n\n    # Iterate over every entity in the planet\n    for row in planet:\n        for entity in row:\n            if entity is None:\n                output += \" . \"\n            else:\n                if colour is True:\n                    output += (\n                        \"\\x1b[38;2;96;241;151m\"\n                        if entity.prey\n                        else \"\\x1b[38;2;255;255;15m\"\n                    )\n                output += f\" {'#' if entity.prey else 'x'}{ansi_colour_end}\"\n\n        output += \"\\n\"\n\n    entities = wt.get_entities()\n    prey_count = sum(entity.prey for entity in entities)\n\n    print(\n        f\"{output}\\n Iteration: {iter_number} | Prey count: {prey_count} | \"\n        f\"Predator count: {len(entities) - prey_count} | {reprint}\"\n    )\n    # Block the thread to be able to visualise seeing the algorithm\n    sleep(0.05)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    wt = WaTor(WIDTH, HEIGHT)\n    wt.time_passed = visualise\n    wt.run(iteration_count=100_000)\n"
  },
  {
    "path": "ciphers/README.md",
    "content": "# Ciphers\n\nCiphers are used to protect data from people that are not allowed to have it. They are everywhere on the internet to protect your connections.\n\n* <https://en.wikipedia.org/wiki/Cipher>\n* <http://practicalcryptography.com/ciphers/>\n* <https://practicalcryptography.com/ciphers/classical-era/>\n"
  },
  {
    "path": "ciphers/__init__.py",
    "content": ""
  },
  {
    "path": "ciphers/a1z26.py",
    "content": "\"\"\"\nConvert a string of characters to a sequence of numbers\ncorresponding to the character's position in the alphabet.\n\nhttps://www.dcode.fr/letter-number-cipher\nhttp://bestcodes.weebly.com/a1z26.html\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef encode(plain: str) -> list[int]:\n    \"\"\"\n    >>> encode(\"myname\")\n    [13, 25, 14, 1, 13, 5]\n    \"\"\"\n    return [ord(elem) - 96 for elem in plain]\n\n\ndef decode(encoded: list[int]) -> str:\n    \"\"\"\n    >>> decode([13, 25, 14, 1, 13, 5])\n    'myname'\n    \"\"\"\n    return \"\".join(chr(elem + 96) for elem in encoded)\n\n\ndef main() -> None:\n    encoded = encode(input(\"-> \").strip().lower())\n    print(\"Encoded: \", encoded)\n    print(\"Decoded:\", decode(encoded))\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "ciphers/affine_cipher.py",
    "content": "import random\nimport sys\n\nfrom maths.greatest_common_divisor import gcd_by_iterative\n\nfrom . import cryptomath_module as cryptomath\n\nSYMBOLS = (\n    r\"\"\" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`\"\"\"\n    r\"\"\"abcdefghijklmnopqrstuvwxyz{|}~\"\"\"\n)\n\n\ndef check_keys(key_a: int, key_b: int, mode: str) -> None:\n    if mode == \"encrypt\":\n        if key_a == 1:\n            sys.exit(\n                \"The affine cipher becomes weak when key \"\n                \"A is set to 1. Choose different key\"\n            )\n        if key_b == 0:\n            sys.exit(\n                \"The affine cipher becomes weak when key \"\n                \"B is set to 0. Choose different key\"\n            )\n    if key_a < 0 or key_b < 0 or key_b > len(SYMBOLS) - 1:\n        sys.exit(\n            \"Key A must be greater than 0 and key B must \"\n            f\"be between 0 and {len(SYMBOLS) - 1}.\"\n        )\n    if gcd_by_iterative(key_a, len(SYMBOLS)) != 1:\n        sys.exit(\n            f\"Key A {key_a} and the symbol set size {len(SYMBOLS)} \"\n            \"are not relatively prime. Choose a different key.\"\n        )\n\n\ndef encrypt_message(key: int, message: str) -> str:\n    \"\"\"\n    >>> encrypt_message(4545, 'The affine cipher is a type of monoalphabetic '\n    ...                       'substitution cipher.')\n    'VL}p MM{I}p~{HL}Gp{vp pFsH}pxMpyxIx JHL O}F{~pvuOvF{FuF{xIp~{HL}Gi'\n    \"\"\"\n    key_a, key_b = divmod(key, len(SYMBOLS))\n    check_keys(key_a, key_b, \"encrypt\")\n    cipher_text = \"\"\n    for symbol in message:\n        if symbol in SYMBOLS:\n            sym_index = SYMBOLS.find(symbol)\n            cipher_text += SYMBOLS[(sym_index * key_a + key_b) % len(SYMBOLS)]\n        else:\n            cipher_text += symbol\n    return cipher_text\n\n\ndef decrypt_message(key: int, message: str) -> str:\n    \"\"\"\n    >>> decrypt_message(4545, 'VL}p MM{I}p~{HL}Gp{vp pFsH}pxMpyxIx JHL O}F{~pvuOvF{FuF'\n    ...                       '{xIp~{HL}Gi')\n    'The affine cipher is a type of monoalphabetic substitution cipher.'\n    \"\"\"\n    key_a, key_b = divmod(key, len(SYMBOLS))\n    check_keys(key_a, key_b, \"decrypt\")\n    plain_text = \"\"\n    mod_inverse_of_key_a = cryptomath.find_mod_inverse(key_a, len(SYMBOLS))\n    for symbol in message:\n        if symbol in SYMBOLS:\n            sym_index = SYMBOLS.find(symbol)\n            plain_text += SYMBOLS[\n                (sym_index - key_b) * mod_inverse_of_key_a % len(SYMBOLS)\n            ]\n        else:\n            plain_text += symbol\n    return plain_text\n\n\ndef get_random_key() -> int:\n    while True:\n        key_b = random.randint(2, len(SYMBOLS))\n        key_b = random.randint(2, len(SYMBOLS))\n        if gcd_by_iterative(key_b, len(SYMBOLS)) == 1 and key_b % len(SYMBOLS) != 0:\n            return key_b * len(SYMBOLS) + key_b\n\n\ndef main() -> None:\n    \"\"\"\n    >>> key = get_random_key()\n    >>> msg = \"This is a test!\"\n    >>> decrypt_message(key, encrypt_message(key, msg)) == msg\n    True\n    \"\"\"\n    message = input(\"Enter message: \").strip()\n    key = int(input(\"Enter key [2000 - 9000]: \").strip())\n    mode = input(\"Encrypt/Decrypt [E/D]: \").strip().lower()\n\n    if mode.startswith(\"e\"):\n        mode = \"encrypt\"\n        translated = encrypt_message(key, message)\n    elif mode.startswith(\"d\"):\n        mode = \"decrypt\"\n        translated = decrypt_message(key, message)\n    print(f\"\\n{mode.title()}ed text: \\n{translated}\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    # main()\n"
  },
  {
    "path": "ciphers/atbash.py",
    "content": "\"\"\"https://en.wikipedia.org/wiki/Atbash\"\"\"\n\nimport string\n\n\ndef atbash_slow(sequence: str) -> str:\n    \"\"\"\n    >>> atbash_slow(\"ABCDEFG\")\n    'ZYXWVUT'\n\n    >>> atbash_slow(\"aW;;123BX\")\n    'zD;;123YC'\n    \"\"\"\n    output = \"\"\n    for i in sequence:\n        extract = ord(i)\n        if 65 <= extract <= 90:\n            output += chr(155 - extract)\n        elif 97 <= extract <= 122:\n            output += chr(219 - extract)\n        else:\n            output += i\n    return output\n\n\ndef atbash(sequence: str) -> str:\n    \"\"\"\n    >>> atbash(\"ABCDEFG\")\n    'ZYXWVUT'\n\n    >>> atbash(\"aW;;123BX\")\n    'zD;;123YC'\n    \"\"\"\n    letters = string.ascii_letters\n    letters_reversed = string.ascii_lowercase[::-1] + string.ascii_uppercase[::-1]\n    return \"\".join(\n        letters_reversed[letters.index(c)] if c in letters else c for c in sequence\n    )\n\n\ndef benchmark() -> None:\n    \"\"\"Let's benchmark our functions side-by-side...\"\"\"\n    from timeit import timeit\n\n    print(\"Running performance benchmarks...\")\n    setup = \"from string import printable ; from __main__ import atbash, atbash_slow\"\n    print(f\"> atbash_slow(): {timeit('atbash_slow(printable)', setup=setup)} seconds\")\n    print(f\">      atbash(): {timeit('atbash(printable)', setup=setup)} seconds\")\n\n\nif __name__ == \"__main__\":\n    for example in (\"ABCDEFGH\", \"123GGjj\", \"testStringtest\", \"with space\"):\n        print(f\"{example} encrypted in atbash: {atbash(example)}\")\n    benchmark()\n"
  },
  {
    "path": "ciphers/autokey.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/Autokey_cipher\n\nAn autokey cipher (also known as the autoclave cipher) is a cipher that\nincorporates the message (the plaintext) into the key.\nThe key is generated from the message in some automated fashion,\nsometimes by selecting certain letters from the text or, more commonly,\nby adding a short primer key to the front of the message.\n\"\"\"\n\n\ndef encrypt(plaintext: str, key: str) -> str:\n    \"\"\"\n    Encrypt a given `plaintext` (string) and `key` (string), returning the\n    encrypted ciphertext.\n\n    >>> encrypt(\"hello world\", \"coffee\")\n    'jsqqs avvwo'\n    >>> encrypt(\"coffee is good as python\", \"TheAlgorithms\")\n    'vvjfpk wj ohvp su ddylsv'\n    >>> encrypt(\"coffee is good as python\", 2)\n    Traceback (most recent call last):\n        ...\n    TypeError: key must be a string\n    >>> encrypt(\"\", \"TheAlgorithms\")\n    Traceback (most recent call last):\n        ...\n    ValueError: plaintext is empty\n    >>> encrypt(\"coffee is good as python\", \"\")\n    Traceback (most recent call last):\n        ...\n    ValueError: key is empty\n    >>> encrypt(527.26, \"TheAlgorithms\")\n    Traceback (most recent call last):\n        ...\n    TypeError: plaintext must be a string\n    \"\"\"\n    if not isinstance(plaintext, str):\n        raise TypeError(\"plaintext must be a string\")\n    if not isinstance(key, str):\n        raise TypeError(\"key must be a string\")\n\n    if not plaintext:\n        raise ValueError(\"plaintext is empty\")\n    if not key:\n        raise ValueError(\"key is empty\")\n\n    key += plaintext\n    plaintext = plaintext.lower()\n    key = key.lower()\n    plaintext_iterator = 0\n    key_iterator = 0\n    ciphertext = \"\"\n    while plaintext_iterator < len(plaintext):\n        if (\n            ord(plaintext[plaintext_iterator]) < 97\n            or ord(plaintext[plaintext_iterator]) > 122\n        ):\n            ciphertext += plaintext[plaintext_iterator]\n            plaintext_iterator += 1\n        elif ord(key[key_iterator]) < 97 or ord(key[key_iterator]) > 122:\n            key_iterator += 1\n        else:\n            ciphertext += chr(\n                (\n                    (ord(plaintext[plaintext_iterator]) - 97 + ord(key[key_iterator]))\n                    - 97\n                )\n                % 26\n                + 97\n            )\n            key_iterator += 1\n            plaintext_iterator += 1\n    return ciphertext\n\n\ndef decrypt(ciphertext: str, key: str) -> str:\n    \"\"\"\n    Decrypt a given `ciphertext` (string) and `key` (string), returning the decrypted\n    ciphertext.\n\n    >>> decrypt(\"jsqqs avvwo\", \"coffee\")\n    'hello world'\n    >>> decrypt(\"vvjfpk wj ohvp su ddylsv\", \"TheAlgorithms\")\n    'coffee is good as python'\n    >>> decrypt(\"vvjfpk wj ohvp su ddylsv\", \"\")\n    Traceback (most recent call last):\n        ...\n    ValueError: key is empty\n    >>> decrypt(527.26, \"TheAlgorithms\")\n    Traceback (most recent call last):\n        ...\n    TypeError: ciphertext must be a string\n    >>> decrypt(\"\", \"TheAlgorithms\")\n    Traceback (most recent call last):\n        ...\n    ValueError: ciphertext is empty\n    >>> decrypt(\"vvjfpk wj ohvp su ddylsv\", 2)\n    Traceback (most recent call last):\n        ...\n    TypeError: key must be a string\n    \"\"\"\n    if not isinstance(ciphertext, str):\n        raise TypeError(\"ciphertext must be a string\")\n    if not isinstance(key, str):\n        raise TypeError(\"key must be a string\")\n\n    if not ciphertext:\n        raise ValueError(\"ciphertext is empty\")\n    if not key:\n        raise ValueError(\"key is empty\")\n\n    key = key.lower()\n    ciphertext_iterator = 0\n    key_iterator = 0\n    plaintext = \"\"\n    while ciphertext_iterator < len(ciphertext):\n        if (\n            ord(ciphertext[ciphertext_iterator]) < 97\n            or ord(ciphertext[ciphertext_iterator]) > 122\n        ):\n            plaintext += ciphertext[ciphertext_iterator]\n        else:\n            plaintext += chr(\n                (ord(ciphertext[ciphertext_iterator]) - ord(key[key_iterator])) % 26\n                + 97\n            )\n            key += chr(\n                (ord(ciphertext[ciphertext_iterator]) - ord(key[key_iterator])) % 26\n                + 97\n            )\n            key_iterator += 1\n        ciphertext_iterator += 1\n    return plaintext\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    operation = int(input(\"Type 1 to encrypt or 2 to decrypt:\"))\n    if operation == 1:\n        plaintext = input(\"Typeplaintext to be encrypted:\\n\")\n        key = input(\"Type the key:\\n\")\n        print(encrypt(plaintext, key))\n    elif operation == 2:\n        ciphertext = input(\"Type the ciphertext to be decrypted:\\n\")\n        key = input(\"Type the key:\\n\")\n        print(decrypt(ciphertext, key))\n    decrypt(\"jsqqs avvwo\", \"coffee\")\n"
  },
  {
    "path": "ciphers/baconian_cipher.py",
    "content": "\"\"\"\nProgram to encode and decode Baconian or Bacon's Cipher\nWikipedia reference : https://en.wikipedia.org/wiki/Bacon%27s_cipher\n\"\"\"\n\nencode_dict = {\n    \"a\": \"AAAAA\",\n    \"b\": \"AAAAB\",\n    \"c\": \"AAABA\",\n    \"d\": \"AAABB\",\n    \"e\": \"AABAA\",\n    \"f\": \"AABAB\",\n    \"g\": \"AABBA\",\n    \"h\": \"AABBB\",\n    \"i\": \"ABAAA\",\n    \"j\": \"BBBAA\",\n    \"k\": \"ABAAB\",\n    \"l\": \"ABABA\",\n    \"m\": \"ABABB\",\n    \"n\": \"ABBAA\",\n    \"o\": \"ABBAB\",\n    \"p\": \"ABBBA\",\n    \"q\": \"ABBBB\",\n    \"r\": \"BAAAA\",\n    \"s\": \"BAAAB\",\n    \"t\": \"BAABA\",\n    \"u\": \"BAABB\",\n    \"v\": \"BBBAB\",\n    \"w\": \"BABAA\",\n    \"x\": \"BABAB\",\n    \"y\": \"BABBA\",\n    \"z\": \"BABBB\",\n    \" \": \" \",\n}\n\n\ndecode_dict = {value: key for key, value in encode_dict.items()}\n\n\ndef encode(word: str) -> str:\n    \"\"\"\n    Encodes to Baconian cipher\n\n    >>> encode(\"hello\")\n    'AABBBAABAAABABAABABAABBAB'\n    >>> encode(\"hello world\")\n    'AABBBAABAAABABAABABAABBAB BABAAABBABBAAAAABABAAAABB'\n    >>> encode(\"hello world!\")\n    Traceback (most recent call last):\n        ...\n    Exception: encode() accepts only letters of the alphabet and spaces\n    \"\"\"\n    encoded = \"\"\n    for letter in word.lower():\n        if letter.isalpha() or letter == \" \":\n            encoded += encode_dict[letter]\n        else:\n            raise Exception(\"encode() accepts only letters of the alphabet and spaces\")\n    return encoded\n\n\ndef decode(coded: str) -> str:\n    \"\"\"\n    Decodes from Baconian cipher\n\n    >>> decode(\"AABBBAABAAABABAABABAABBAB BABAAABBABBAAAAABABAAAABB\")\n    'hello world'\n    >>> decode(\"AABBBAABAAABABAABABAABBAB\")\n    'hello'\n    >>> decode(\"AABBBAABAAABABAABABAABBAB BABAAABBABBAAAAABABAAAABB!\")\n    Traceback (most recent call last):\n        ...\n    Exception: decode() accepts only 'A', 'B' and spaces\n    \"\"\"\n    if set(coded) - {\"A\", \"B\", \" \"} != set():\n        raise Exception(\"decode() accepts only 'A', 'B' and spaces\")\n    decoded = \"\"\n    for word in coded.split():\n        while len(word) != 0:\n            decoded += decode_dict[word[:5]]\n            word = word[5:]\n        decoded += \" \"\n    return decoded.strip()\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "ciphers/base16.py",
    "content": "def base16_encode(data: bytes) -> str:\n    \"\"\"\n    Encodes the given bytes into base16.\n\n    >>> base16_encode(b'Hello World!')\n    '48656C6C6F20576F726C6421'\n    >>> base16_encode(b'HELLO WORLD!')\n    '48454C4C4F20574F524C4421'\n    >>> base16_encode(b'')\n    ''\n    \"\"\"\n    # Turn the data into a list of integers (where each integer is a byte),\n    # Then turn each byte into its hexadecimal representation, make sure\n    # it is uppercase, and then join everything together and return it.\n    return \"\".join([hex(byte)[2:].zfill(2).upper() for byte in list(data)])\n\n\ndef base16_decode(data: str) -> bytes:\n    \"\"\"\n    Decodes the given base16 encoded data into bytes.\n\n    >>> base16_decode('48656C6C6F20576F726C6421')\n    b'Hello World!'\n    >>> base16_decode('48454C4C4F20574F524C4421')\n    b'HELLO WORLD!'\n    >>> base16_decode('')\n    b''\n    >>> base16_decode('486')\n    Traceback (most recent call last):\n      ...\n    ValueError: Base16 encoded data is invalid:\n    Data does not have an even number of hex digits.\n    >>> base16_decode('48656c6c6f20576f726c6421')\n    Traceback (most recent call last):\n      ...\n    ValueError: Base16 encoded data is invalid:\n    Data is not uppercase hex or it contains invalid characters.\n    >>> base16_decode('This is not base64 encoded data.')\n    Traceback (most recent call last):\n      ...\n    ValueError: Base16 encoded data is invalid:\n    Data is not uppercase hex or it contains invalid characters.\n    \"\"\"\n    # Check data validity, following RFC3548\n    # https://www.ietf.org/rfc/rfc3548.txt\n    if (len(data) % 2) != 0:\n        raise ValueError(\n            \"\"\"Base16 encoded data is invalid:\nData does not have an even number of hex digits.\"\"\"\n        )\n    # Check the character set - the standard base16 alphabet\n    # is uppercase according to RFC3548 section 6\n    if not set(data) <= set(\"0123456789ABCDEF\"):\n        raise ValueError(\n            \"\"\"Base16 encoded data is invalid:\nData is not uppercase hex or it contains invalid characters.\"\"\"\n        )\n    # For every two hexadecimal digits (= a byte), turn it into an integer.\n    # Then, string the result together into bytes, and return it.\n    return bytes(int(data[i] + data[i + 1], 16) for i in range(0, len(data), 2))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "ciphers/base32.py",
    "content": "\"\"\"\nBase32 encoding and decoding\n\nhttps://en.wikipedia.org/wiki/Base32\n\"\"\"\n\nB32_CHARSET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\"\n\n\ndef base32_encode(data: bytes) -> bytes:\n    \"\"\"\n    >>> base32_encode(b\"Hello World!\")\n    b'JBSWY3DPEBLW64TMMQQQ===='\n    >>> base32_encode(b\"123456\")\n    b'GEZDGNBVGY======'\n    >>> base32_encode(b\"some long complex string\")\n    b'ONXW2ZJANRXW4ZZAMNXW24DMMV4CA43UOJUW4ZY='\n    \"\"\"\n    binary_data = \"\".join(bin(ord(d))[2:].zfill(8) for d in data.decode(\"utf-8\"))\n    binary_data = binary_data.ljust(5 * ((len(binary_data) // 5) + 1), \"0\")\n    b32_chunks = map(\"\".join, zip(*[iter(binary_data)] * 5))\n    b32_result = \"\".join(B32_CHARSET[int(chunk, 2)] for chunk in b32_chunks)\n    return bytes(b32_result.ljust(8 * ((len(b32_result) // 8) + 1), \"=\"), \"utf-8\")\n\n\ndef base32_decode(data: bytes) -> bytes:\n    \"\"\"\n    >>> base32_decode(b'JBSWY3DPEBLW64TMMQQQ====')\n    b'Hello World!'\n    >>> base32_decode(b'GEZDGNBVGY======')\n    b'123456'\n    >>> base32_decode(b'ONXW2ZJANRXW4ZZAMNXW24DMMV4CA43UOJUW4ZY=')\n    b'some long complex string'\n    \"\"\"\n    binary_chunks = \"\".join(\n        bin(B32_CHARSET.index(_d))[2:].zfill(5)\n        for _d in data.decode(\"utf-8\").strip(\"=\")\n    )\n    binary_data = list(map(\"\".join, zip(*[iter(binary_chunks)] * 8)))\n    return bytes(\"\".join([chr(int(_d, 2)) for _d in binary_data]), \"utf-8\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "ciphers/base64_cipher.py",
    "content": "B64_CHARSET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\"\n\n\ndef base64_encode(data: bytes) -> bytes:\n    \"\"\"Encodes data according to RFC4648.\n\n    The data is first transformed to binary and appended with binary digits so that its\n    length becomes a multiple of 6, then each 6 binary digits will match a character in\n    the B64_CHARSET string. The number of appended binary digits would later determine\n    how many \"=\" signs should be added, the padding.\n    For every 2 binary digits added, a \"=\" sign is added in the output.\n    We can add any binary digits to make it a multiple of 6, for instance, consider the\n    following example:\n    \"AA\" -> 0010100100101001 -> 001010 010010 1001\n    As can be seen above, 2 more binary digits should be added, so there's 4\n    possibilities here: 00, 01, 10 or 11.\n    That being said, Base64 encoding can be used in Steganography to hide data in these\n    appended digits.\n\n    >>> from base64 import b64encode\n    >>> a = b\"This pull request is part of Hacktoberfest20!\"\n    >>> b = b\"https://tools.ietf.org/html/rfc4648\"\n    >>> c = b\"A\"\n    >>> base64_encode(a) == b64encode(a)\n    True\n    >>> base64_encode(b) == b64encode(b)\n    True\n    >>> base64_encode(c) == b64encode(c)\n    True\n    >>> base64_encode(\"abc\")\n    Traceback (most recent call last):\n      ...\n    TypeError: a bytes-like object is required, not 'str'\n    \"\"\"\n    # Make sure the supplied data is a bytes-like object\n    if not isinstance(data, bytes):\n        msg = f\"a bytes-like object is required, not '{data.__class__.__name__}'\"\n        raise TypeError(msg)\n\n    binary_stream = \"\".join(bin(byte)[2:].zfill(8) for byte in data)\n\n    padding_needed = len(binary_stream) % 6 != 0\n\n    if padding_needed:\n        # The padding that will be added later\n        padding = b\"=\" * ((6 - len(binary_stream) % 6) // 2)\n\n        # Append binary_stream with arbitrary binary digits (0's by default) to make its\n        # length a multiple of 6.\n        binary_stream += \"0\" * (6 - len(binary_stream) % 6)\n    else:\n        padding = b\"\"\n\n    # Encode every 6 binary digits to their corresponding Base64 character\n    return (\n        \"\".join(\n            B64_CHARSET[int(binary_stream[index : index + 6], 2)]\n            for index in range(0, len(binary_stream), 6)\n        ).encode()\n        + padding\n    )\n\n\ndef base64_decode(encoded_data: str) -> bytes:\n    \"\"\"Decodes data according to RFC4648.\n\n    This does the reverse operation of base64_encode.\n    We first transform the encoded data back to a binary stream, take off the\n    previously appended binary digits according to the padding, at this point we\n    would have a binary stream whose length is multiple of 8, the last step is\n    to convert every 8 bits to a byte.\n\n    >>> from base64 import b64decode\n    >>> a = \"VGhpcyBwdWxsIHJlcXVlc3QgaXMgcGFydCBvZiBIYWNrdG9iZXJmZXN0MjAh\"\n    >>> b = \"aHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ2NDg=\"\n    >>> c = \"QQ==\"\n    >>> base64_decode(a) == b64decode(a)\n    True\n    >>> base64_decode(b) == b64decode(b)\n    True\n    >>> base64_decode(c) == b64decode(c)\n    True\n    >>> base64_decode(\"abc\")\n    Traceback (most recent call last):\n      ...\n    AssertionError: Incorrect padding\n    \"\"\"\n    # Make sure encoded_data is either a string or a bytes-like object\n    if not isinstance(encoded_data, bytes) and not isinstance(encoded_data, str):\n        msg = (\n            \"argument should be a bytes-like object or ASCII string, \"\n            f\"not '{encoded_data.__class__.__name__}'\"\n        )\n        raise TypeError(msg)\n\n    # In case encoded_data is a bytes-like object, make sure it contains only\n    # ASCII characters so we convert it to a string object\n    if isinstance(encoded_data, bytes):\n        try:\n            encoded_data = encoded_data.decode(\"utf-8\")\n        except UnicodeDecodeError:\n            raise ValueError(\"base64 encoded data should only contain ASCII characters\")\n\n    padding = encoded_data.count(\"=\")\n\n    # Check if the encoded string contains non base64 characters\n    if padding:\n        assert all(char in B64_CHARSET for char in encoded_data[:-padding]), (\n            \"Invalid base64 character(s) found.\"\n        )\n    else:\n        assert all(char in B64_CHARSET for char in encoded_data), (\n            \"Invalid base64 character(s) found.\"\n        )\n\n    # Check the padding\n    assert len(encoded_data) % 4 == 0 and padding < 3, \"Incorrect padding\"\n\n    if padding:\n        # Remove padding if there is one\n        encoded_data = encoded_data[:-padding]\n\n        binary_stream = \"\".join(\n            bin(B64_CHARSET.index(char))[2:].zfill(6) for char in encoded_data\n        )[: -padding * 2]\n    else:\n        binary_stream = \"\".join(\n            bin(B64_CHARSET.index(char))[2:].zfill(6) for char in encoded_data\n        )\n\n    data = [\n        int(binary_stream[index : index + 8], 2)\n        for index in range(0, len(binary_stream), 8)\n    ]\n\n    return bytes(data)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "ciphers/base85.py",
    "content": "\"\"\"\nBase85 (Ascii85) encoding and decoding\n\nhttps://en.wikipedia.org/wiki/Ascii85\n\"\"\"\n\n\ndef _base10_to_85(d: int) -> str:\n    return \"\".join(chr(d % 85 + 33)) + _base10_to_85(d // 85) if d > 0 else \"\"\n\n\ndef _base85_to_10(digits: list) -> int:\n    return sum(char * 85**i for i, char in enumerate(reversed(digits)))\n\n\ndef ascii85_encode(data: bytes) -> bytes:\n    \"\"\"\n    >>> ascii85_encode(b\"\")\n    b''\n    >>> ascii85_encode(b\"12345\")\n    b'0etOA2#'\n    >>> ascii85_encode(b\"base 85\")\n    b'@UX=h+?24'\n    \"\"\"\n    binary_data = \"\".join(bin(ord(d))[2:].zfill(8) for d in data.decode(\"utf-8\"))\n    null_values = (32 * ((len(binary_data) // 32) + 1) - len(binary_data)) // 8\n    binary_data = binary_data.ljust(32 * ((len(binary_data) // 32) + 1), \"0\")\n    b85_chunks = [int(_s, 2) for _s in map(\"\".join, zip(*[iter(binary_data)] * 32))]\n    result = \"\".join(_base10_to_85(chunk)[::-1] for chunk in b85_chunks)\n    return bytes(result[:-null_values] if null_values % 4 != 0 else result, \"utf-8\")\n\n\ndef ascii85_decode(data: bytes) -> bytes:\n    \"\"\"\n    >>> ascii85_decode(b\"\")\n    b''\n    >>> ascii85_decode(b\"0etOA2#\")\n    b'12345'\n    >>> ascii85_decode(b\"@UX=h+?24\")\n    b'base 85'\n    \"\"\"\n    null_values = 5 * ((len(data) // 5) + 1) - len(data)\n    binary_data = data.decode(\"utf-8\") + \"u\" * null_values\n    b85_chunks = map(\"\".join, zip(*[iter(binary_data)] * 5))\n    b85_segments = [[ord(_s) - 33 for _s in chunk] for chunk in b85_chunks]\n    results = [bin(_base85_to_10(chunk))[2::].zfill(32) for chunk in b85_segments]\n    char_chunks = [\n        [chr(int(_s, 2)) for _s in map(\"\".join, zip(*[iter(r)] * 8))] for r in results\n    ]\n    result = \"\".join(\"\".join(char) for char in char_chunks)\n    offset = int(null_values % 5 == 0)\n    return bytes(result[: offset - null_values], \"utf-8\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "ciphers/beaufort_cipher.py",
    "content": "\"\"\"\nAuthor: Mohit Radadiya\n\"\"\"\n\nfrom string import ascii_uppercase\n\ndict1 = {char: i for i, char in enumerate(ascii_uppercase)}\ndict2 = dict(enumerate(ascii_uppercase))\n\n\n# This function generates the key in\n# a cyclic manner until it's length isn't\n# equal to the length of original text\ndef generate_key(message: str, key: str) -> str:\n    \"\"\"\n    >>> generate_key(\"THE GERMAN ATTACK\",\"SECRET\")\n    'SECRETSECRETSECRE'\n    \"\"\"\n    x = len(message)\n    i = 0\n    while True:\n        if x == i:\n            i = 0\n        if len(key) == len(message):\n            break\n        key += key[i]\n        i += 1\n    return key\n\n\n# This function returns the encrypted text\n# generated with the help of the key\ndef cipher_text(message: str, key_new: str) -> str:\n    \"\"\"\n    >>> cipher_text(\"THE GERMAN ATTACK\",\"SECRETSECRETSECRE\")\n    'BDC PAYUWL JPAIYI'\n    \"\"\"\n    cipher_text = \"\"\n    i = 0\n    for letter in message:\n        if letter == \" \":\n            cipher_text += \" \"\n        else:\n            x = (dict1[letter] - dict1[key_new[i]]) % 26\n            i += 1\n            cipher_text += dict2[x]\n    return cipher_text\n\n\n# This function decrypts the encrypted text\n# and returns the original text\ndef original_text(cipher_text: str, key_new: str) -> str:\n    \"\"\"\n    >>> original_text(\"BDC PAYUWL JPAIYI\",\"SECRETSECRETSECRE\")\n    'THE GERMAN ATTACK'\n    \"\"\"\n    or_txt = \"\"\n    i = 0\n    for letter in cipher_text:\n        if letter == \" \":\n            or_txt += \" \"\n        else:\n            x = (dict1[letter] + dict1[key_new[i]] + 26) % 26\n            i += 1\n            or_txt += dict2[x]\n    return or_txt\n\n\ndef main() -> None:\n    message = \"THE GERMAN ATTACK\"\n    key = \"SECRET\"\n    key_new = generate_key(message, key)\n    s = cipher_text(message, key_new)\n    print(f\"Encrypted Text = {s}\")\n    print(f\"Original Text = {original_text(s, key_new)}\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    main()\n"
  },
  {
    "path": "ciphers/bifid.py",
    "content": "#!/usr/bin/env python3\n\n\"\"\"\nThe Bifid Cipher uses a Polybius Square to encipher a message in a way that\nmakes it fairly difficult to decipher without knowing the secret.\n\nhttps://www.braingle.com/brainteasers/codes/bifid.php\n\"\"\"\n\nimport numpy as np\n\nSQUARE = [\n    [\"a\", \"b\", \"c\", \"d\", \"e\"],\n    [\"f\", \"g\", \"h\", \"i\", \"k\"],\n    [\"l\", \"m\", \"n\", \"o\", \"p\"],\n    [\"q\", \"r\", \"s\", \"t\", \"u\"],\n    [\"v\", \"w\", \"x\", \"y\", \"z\"],\n]\n\n\nclass BifidCipher:\n    def __init__(self) -> None:\n        self.SQUARE = np.array(SQUARE)\n\n    def letter_to_numbers(self, letter: str) -> np.ndarray:\n        \"\"\"\n        Return the pair of numbers that represents the given letter in the\n        polybius square\n\n        >>> np.array_equal(BifidCipher().letter_to_numbers('a'), [1,1])\n        True\n\n        >>> np.array_equal(BifidCipher().letter_to_numbers('u'), [4,5])\n        True\n        \"\"\"\n        index1, index2 = np.where(letter == self.SQUARE)\n        indexes = np.concatenate([index1 + 1, index2 + 1])\n        return indexes\n\n    def numbers_to_letter(self, index1: int, index2: int) -> str:\n        \"\"\"\n        Return the letter corresponding to the position [index1, index2] in\n        the polybius square\n\n        >>> BifidCipher().numbers_to_letter(4, 5) == \"u\"\n        True\n\n        >>> BifidCipher().numbers_to_letter(1, 1) == \"a\"\n        True\n        \"\"\"\n        letter = self.SQUARE[index1 - 1, index2 - 1]\n        return letter\n\n    def encode(self, message: str) -> str:\n        \"\"\"\n        Return the encoded version of message according to the polybius cipher\n\n        >>> BifidCipher().encode('testmessage') == 'qtltbdxrxlk'\n        True\n\n        >>> BifidCipher().encode('Test Message') == 'qtltbdxrxlk'\n        True\n\n        >>> BifidCipher().encode('test j') == BifidCipher().encode('test i')\n        True\n        \"\"\"\n        message = message.lower()\n        message = message.replace(\" \", \"\")\n        message = message.replace(\"j\", \"i\")\n\n        first_step = np.empty((2, len(message)))\n        for letter_index in range(len(message)):\n            numbers = self.letter_to_numbers(message[letter_index])\n\n            first_step[0, letter_index] = numbers[0]\n            first_step[1, letter_index] = numbers[1]\n\n        second_step = first_step.reshape(2 * len(message))\n        encoded_message = \"\"\n        for numbers_index in range(len(message)):\n            index1 = int(second_step[numbers_index * 2])\n            index2 = int(second_step[(numbers_index * 2) + 1])\n            letter = self.numbers_to_letter(index1, index2)\n            encoded_message = encoded_message + letter\n\n        return encoded_message\n\n    def decode(self, message: str) -> str:\n        \"\"\"\n        Return the decoded version of message according to the polybius cipher\n\n        >>> BifidCipher().decode('qtltbdxrxlk') == 'testmessage'\n        True\n        \"\"\"\n        message = message.lower()\n        message.replace(\" \", \"\")\n        first_step = np.empty(2 * len(message))\n        for letter_index in range(len(message)):\n            numbers = self.letter_to_numbers(message[letter_index])\n            first_step[letter_index * 2] = numbers[0]\n            first_step[letter_index * 2 + 1] = numbers[1]\n\n        second_step = first_step.reshape((2, len(message)))\n        decoded_message = \"\"\n        for numbers_index in range(len(message)):\n            index1 = int(second_step[0, numbers_index])\n            index2 = int(second_step[1, numbers_index])\n            letter = self.numbers_to_letter(index1, index2)\n            decoded_message = decoded_message + letter\n\n        return decoded_message\n"
  },
  {
    "path": "ciphers/brute_force_caesar_cipher.py",
    "content": "import string\n\n\ndef decrypt(message: str) -> None:\n    \"\"\"\n    >>> decrypt('TMDETUX PMDVU')\n    Decryption using Key #0: TMDETUX PMDVU\n    Decryption using Key #1: SLCDSTW OLCUT\n    Decryption using Key #2: RKBCRSV NKBTS\n    Decryption using Key #3: QJABQRU MJASR\n    Decryption using Key #4: PIZAPQT LIZRQ\n    Decryption using Key #5: OHYZOPS KHYQP\n    Decryption using Key #6: NGXYNOR JGXPO\n    Decryption using Key #7: MFWXMNQ IFWON\n    Decryption using Key #8: LEVWLMP HEVNM\n    Decryption using Key #9: KDUVKLO GDUML\n    Decryption using Key #10: JCTUJKN FCTLK\n    Decryption using Key #11: IBSTIJM EBSKJ\n    Decryption using Key #12: HARSHIL DARJI\n    Decryption using Key #13: GZQRGHK CZQIH\n    Decryption using Key #14: FYPQFGJ BYPHG\n    Decryption using Key #15: EXOPEFI AXOGF\n    Decryption using Key #16: DWNODEH ZWNFE\n    Decryption using Key #17: CVMNCDG YVMED\n    Decryption using Key #18: BULMBCF XULDC\n    Decryption using Key #19: ATKLABE WTKCB\n    Decryption using Key #20: ZSJKZAD VSJBA\n    Decryption using Key #21: YRIJYZC URIAZ\n    Decryption using Key #22: XQHIXYB TQHZY\n    Decryption using Key #23: WPGHWXA SPGYX\n    Decryption using Key #24: VOFGVWZ ROFXW\n    Decryption using Key #25: UNEFUVY QNEWV\n    \"\"\"\n    for key in range(len(string.ascii_uppercase)):\n        translated = \"\"\n        for symbol in message:\n            if symbol in string.ascii_uppercase:\n                num = string.ascii_uppercase.find(symbol)\n                num = num - key\n                if num < 0:\n                    num = num + len(string.ascii_uppercase)\n                translated = translated + string.ascii_uppercase[num]\n            else:\n                translated = translated + symbol\n        print(f\"Decryption using Key #{key}: {translated}\")\n\n\ndef main() -> None:\n    message = input(\"Encrypted message: \")\n    message = message.upper()\n    decrypt(message)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    main()\n"
  },
  {
    "path": "ciphers/caesar_cipher.py",
    "content": "from __future__ import annotations\n\nfrom string import ascii_letters\n\n\ndef encrypt(input_string: str, key: int, alphabet: str | None = None) -> str:\n    \"\"\"\n    encrypt\n    =======\n\n    Encodes a given string with the caesar cipher and returns the encoded\n    message\n\n    Parameters:\n    -----------\n\n    *   `input_string`: the plain-text that needs to be encoded\n    *   `key`: the number of letters to shift the message by\n\n    Optional:\n\n    *   `alphabet` (``None``): the alphabet used to encode the cipher, if not\n        specified, the standard english alphabet with upper and lowercase\n        letters is used\n\n    Returns:\n\n    *   A string containing the encoded cipher-text\n\n    More on the caesar cipher\n    =========================\n\n    The caesar cipher is named after Julius Caesar who used it when sending\n    secret military messages to his troops. This is a simple substitution cipher\n    where every character in the plain-text is shifted by a certain number known\n    as the \"key\" or \"shift\".\n\n    Example:\n    Say we have the following message:\n    ``Hello, captain``\n\n    And our alphabet is made up of lower and uppercase letters:\n    ``abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ``\n\n    And our shift is ``2``\n\n    We can then encode the message, one letter at a time. ``H`` would become ``J``,\n    since ``J`` is two letters away, and so on. If the shift is ever too large, or\n    our letter is at the end of the alphabet, we just start at the beginning\n    (``Z`` would shift to ``a`` then ``b`` and so on).\n\n    Our final message would be ``Jgnnq, ecrvckp``\n\n    Further reading\n    ===============\n\n    *   https://en.m.wikipedia.org/wiki/Caesar_cipher\n\n    Doctests\n    ========\n\n    >>> encrypt('The quick brown fox jumps over the lazy dog', 8)\n    'bpm yCqks jzwEv nwF rCuxA wDmz Bpm tiHG lwo'\n\n    >>> encrypt('A very large key', 8000)\n    's nWjq dSjYW cWq'\n\n    >>> encrypt('a lowercase alphabet', 5, 'abcdefghijklmnopqrstuvwxyz')\n    'f qtbjwhfxj fqumfgjy'\n    \"\"\"\n    # Set default alphabet to lower and upper case english chars\n    alpha = alphabet or ascii_letters\n\n    # The final result string\n    result = \"\"\n\n    for character in input_string:\n        if character not in alpha:\n            # Append without encryption if character is not in the alphabet\n            result += character\n        else:\n            # Get the index of the new key and make sure it isn't too large\n            new_key = (alpha.index(character) + key) % len(alpha)\n\n            # Append the encoded character to the alphabet\n            result += alpha[new_key]\n\n    return result\n\n\ndef decrypt(input_string: str, key: int, alphabet: str | None = None) -> str:\n    \"\"\"\n    decrypt\n    =======\n\n    Decodes a given string of cipher-text and returns the decoded plain-text\n\n    Parameters:\n    -----------\n\n    *   `input_string`: the cipher-text that needs to be decoded\n    *   `key`: the number of letters to shift the message backwards by to decode\n\n    Optional:\n\n    *   `alphabet` (``None``): the alphabet used to decode the cipher, if not\n        specified, the standard english alphabet with upper and lowercase\n        letters is used\n\n    Returns:\n\n    *   A string containing the decoded plain-text\n\n    More on the caesar cipher\n    =========================\n\n    The caesar cipher is named after Julius Caesar who used it when sending\n    secret military messages to his troops. This is a simple substitution cipher\n    where very character in the plain-text is shifted by a certain number known\n    as the \"key\" or \"shift\". Please keep in mind, here we will be focused on\n    decryption.\n\n    Example:\n    Say we have the following cipher-text:\n    ``Jgnnq, ecrvckp``\n\n    And our alphabet is made up of lower and uppercase letters:\n    ``abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ``\n\n    And our shift is ``2``\n\n    To decode the message, we would do the same thing as encoding, but in\n    reverse. The first letter, ``J`` would become ``H`` (remember: we are decoding)\n    because ``H`` is two letters in reverse (to the left) of ``J``. We would\n    continue doing this. A letter like ``a`` would shift back to the end of\n    the alphabet, and would become ``Z`` or ``Y`` and so on.\n\n    Our final message would be ``Hello, captain``\n\n    Further reading\n    ===============\n\n    *   https://en.m.wikipedia.org/wiki/Caesar_cipher\n\n    Doctests\n    ========\n\n    >>> decrypt('bpm yCqks jzwEv nwF rCuxA wDmz Bpm tiHG lwo', 8)\n    'The quick brown fox jumps over the lazy dog'\n\n    >>> decrypt('s nWjq dSjYW cWq', 8000)\n    'A very large key'\n\n    >>> decrypt('f qtbjwhfxj fqumfgjy', 5, 'abcdefghijklmnopqrstuvwxyz')\n    'a lowercase alphabet'\n    \"\"\"\n    # Turn on decode mode by making the key negative\n    key *= -1\n\n    return encrypt(input_string, key, alphabet)\n\n\ndef brute_force(input_string: str, alphabet: str | None = None) -> dict[int, str]:\n    \"\"\"\n    brute_force\n    ===========\n\n    Returns all the possible combinations of keys and the decoded strings in the\n    form of a dictionary\n\n    Parameters:\n    -----------\n\n    *   `input_string`: the cipher-text that needs to be used during brute-force\n\n    Optional:\n\n    *   `alphabet` (``None``): the alphabet used to decode the cipher, if not\n        specified, the standard english alphabet with upper and lowercase\n        letters is used\n\n    More about brute force\n    ======================\n\n    Brute force is when a person intercepts a message or password, not knowing\n    the key and tries every single combination. This is easy with the caesar\n    cipher since there are only all the letters in the alphabet. The more\n    complex the cipher, the larger amount of time it will take to do brute force\n\n    Ex:\n    Say we have a ``5`` letter alphabet (``abcde``), for simplicity and we intercepted\n    the following message: ``dbc``,\n    we could then just write out every combination:\n    ``ecd``... and so on, until we reach a combination that makes sense:\n    ``cab``\n\n    Further reading\n    ===============\n\n    *   https://en.wikipedia.org/wiki/Brute_force\n\n    Doctests\n    ========\n\n    >>> brute_force(\"jFyuMy xIH'N vLONy zILwy Gy!\")[20]\n    \"Please don't brute force me!\"\n\n    >>> brute_force(1)\n    Traceback (most recent call last):\n    TypeError: 'int' object is not iterable\n    \"\"\"\n    # Set default alphabet to lower and upper case english chars\n    alpha = alphabet or ascii_letters\n\n    # To store data on all the combinations\n    brute_force_data = {}\n\n    # Cycle through each combination\n    for key in range(1, len(alpha) + 1):\n        # Decrypt the message and store the result in the data\n        brute_force_data[key] = decrypt(input_string, key, alpha)\n\n    return brute_force_data\n\n\nif __name__ == \"__main__\":\n    while True:\n        print(f\"\\n{'-' * 10}\\n Menu\\n{'-' * 10}\")\n        print(*[\"1.Encrypt\", \"2.Decrypt\", \"3.BruteForce\", \"4.Quit\"], sep=\"\\n\")\n\n        # get user input\n        choice = input(\"\\nWhat would you like to do?: \").strip() or \"4\"\n\n        # run functions based on what the user chose\n        if choice not in (\"1\", \"2\", \"3\", \"4\"):\n            print(\"Invalid choice, please enter a valid choice\")\n        elif choice == \"1\":\n            input_string = input(\"Please enter the string to be encrypted: \")\n            key = int(input(\"Please enter off-set: \").strip())\n\n            print(encrypt(input_string, key))\n        elif choice == \"2\":\n            input_string = input(\"Please enter the string to be decrypted: \")\n            key = int(input(\"Please enter off-set: \").strip())\n\n            print(decrypt(input_string, key))\n        elif choice == \"3\":\n            input_string = input(\"Please enter the string to be decrypted: \")\n            brute_force_data = brute_force(input_string)\n\n            for key, value in brute_force_data.items():\n                print(f\"Key: {key} | Message: {value}\")\n\n        elif choice == \"4\":\n            print(\"Goodbye.\")\n            break\n"
  },
  {
    "path": "ciphers/cryptomath_module.py",
    "content": "from maths.greatest_common_divisor import gcd_by_iterative\n\n\ndef find_mod_inverse(a: int, m: int) -> int:\n    if gcd_by_iterative(a, m) != 1:\n        msg = f\"mod inverse of {a!r} and {m!r} does not exist\"\n        raise ValueError(msg)\n    u1, u2, u3 = 1, 0, a\n    v1, v2, v3 = 0, 1, m\n    while v3 != 0:\n        q = u3 // v3\n        v1, v2, v3, u1, u2, u3 = (u1 - q * v1), (u2 - q * v2), (u3 - q * v3), v1, v2, v3\n    return u1 % m\n"
  },
  {
    "path": "ciphers/decrypt_caesar_with_chi_squared.py",
    "content": "#!/usr/bin/env python3\nfrom __future__ import annotations\n\n\ndef decrypt_caesar_with_chi_squared(\n    ciphertext: str,\n    cipher_alphabet: list[str] | None = None,\n    frequencies_dict: dict[str, float] | None = None,\n    case_sensitive: bool = False,\n) -> tuple[int, float, str]:\n    \"\"\"\n    Basic Usage\n    ===========\n\n    Arguments:\n      * `ciphertext` (str): the text to decode (encoded with the caesar cipher)\n\n    Optional Arguments:\n      * `cipher_alphabet` (list): the alphabet used for the cipher (each letter is\n        a string separated by commas)\n      * `frequencies_dict` (dict): a dictionary of word frequencies where keys are\n        the letters and values are a percentage representation of the frequency as\n        a decimal/float\n      * `case_sensitive` (bool): a boolean value: ``True`` if the case matters during\n        decryption, ``False`` if it doesn't\n\n    Returns:\n      * A tuple in the form of:\n        (`most_likely_cipher`, `most_likely_cipher_chi_squared_value`,\n        `decoded_most_likely_cipher`)\n\n        where...\n          - `most_likely_cipher` is an integer representing the shift of the smallest\n            chi-squared statistic (most likely key)\n          - `most_likely_cipher_chi_squared_value` is a float representing the\n            chi-squared statistic of the most likely shift\n          - `decoded_most_likely_cipher` is a string with the decoded cipher\n            (decoded by the most_likely_cipher key)\n\n\n    The Chi-squared test\n    ====================\n\n    The caesar cipher\n    -----------------\n\n    The caesar cipher is a very insecure encryption algorithm, however it has\n    been used since Julius Caesar. The cipher is a simple substitution cipher\n    where each character in the plain text is replaced by a character in the\n    alphabet a certain number of characters after the original character. The\n    number of characters away is called the shift or key. For example:\n\n    | Plain text: ``hello``\n    | Key: ``1``\n    | Cipher text: ``ifmmp``\n    | (each letter in ``hello`` has been shifted one to the right in the eng. alphabet)\n\n    As you can imagine, this doesn't provide lots of security. In fact\n    decrypting ciphertext by brute-force is extremely easy even by hand. However\n    one way to do that is the chi-squared test.\n\n    The chi-squared test\n    --------------------\n\n    Each letter in the english alphabet has a frequency, or the amount of times\n    it shows up compared to other letters (usually expressed as a decimal\n    representing the percentage likelihood). The most common letter in the\n    english language is ``e`` with a frequency of ``0.11162`` or ``11.162%``.\n    The test is completed in the following fashion.\n\n    1. The ciphertext is decoded in a brute force way (every combination of the\n       ``26`` possible combinations)\n    2. For every combination, for each letter in the combination, the average\n       amount of times the letter should appear the message is calculated by\n       multiplying the total number of characters by the frequency of the letter.\n\n       | For example:\n       | In a message of ``100`` characters, ``e`` should appear around ``11.162``\n         times.\n\n    3. Then, to calculate the margin of error (the amount of times the letter\n       SHOULD appear with the amount of times the letter DOES appear), we use\n       the chi-squared test. The following formula is used:\n\n       Let:\n         - n be the number of times the letter actually appears\n         - p be the predicted value of the number of times the letter should\n           appear (see item ``2``)\n         - let v be the chi-squared test result (referred to here as chi-squared\n           value/statistic)\n\n         ::\n\n           (n - p)^2\n           --------- = v\n              p\n\n    4. Each chi squared value for each letter is then added up to the total.\n       The total is the chi-squared statistic for that encryption key.\n    5. The encryption key with the lowest chi-squared value is the most likely\n       to be the decoded answer.\n\n    Further Reading\n    ===============\n\n    * http://practicalcryptography.com/cryptanalysis/text-characterisation/chi-squared-statistic/\n    * https://en.wikipedia.org/wiki/Letter_frequency\n    * https://en.wikipedia.org/wiki/Chi-squared_test\n    * https://en.m.wikipedia.org/wiki/Caesar_cipher\n\n    Doctests\n    ========\n\n    >>> decrypt_caesar_with_chi_squared(\n    ...    'dof pz aol jhlzhy jpwoly zv wvwbshy? pa pz avv lhzf av jyhjr!'\n    ... )  # doctest: +NORMALIZE_WHITESPACE\n    (7, 3129.228005747531,\n     'why is the caesar cipher so popular? it is too easy to crack!')\n\n    >>> decrypt_caesar_with_chi_squared('crybd cdbsxq')\n    (10, 233.35343938980898, 'short string')\n\n    >>> decrypt_caesar_with_chi_squared('Crybd Cdbsxq', case_sensitive=True)\n    (10, 233.35343938980898, 'Short String')\n\n    >>> decrypt_caesar_with_chi_squared(12)\n    Traceback (most recent call last):\n    AttributeError: 'int' object has no attribute 'lower'\n    \"\"\"\n    alphabet_letters = cipher_alphabet or [chr(i) for i in range(97, 123)]\n\n    # If the argument is None or the user provided an empty dictionary\n    if not frequencies_dict:\n        # Frequencies of letters in the english language (how much they show up)\n        frequencies = {\n            \"a\": 0.08497,\n            \"b\": 0.01492,\n            \"c\": 0.02202,\n            \"d\": 0.04253,\n            \"e\": 0.11162,\n            \"f\": 0.02228,\n            \"g\": 0.02015,\n            \"h\": 0.06094,\n            \"i\": 0.07546,\n            \"j\": 0.00153,\n            \"k\": 0.01292,\n            \"l\": 0.04025,\n            \"m\": 0.02406,\n            \"n\": 0.06749,\n            \"o\": 0.07507,\n            \"p\": 0.01929,\n            \"q\": 0.00095,\n            \"r\": 0.07587,\n            \"s\": 0.06327,\n            \"t\": 0.09356,\n            \"u\": 0.02758,\n            \"v\": 0.00978,\n            \"w\": 0.02560,\n            \"x\": 0.00150,\n            \"y\": 0.01994,\n            \"z\": 0.00077,\n        }\n    else:\n        # Custom frequencies dictionary\n        frequencies = frequencies_dict\n\n    if not case_sensitive:\n        ciphertext = ciphertext.lower()\n\n    # Chi squared statistic values\n    chi_squared_statistic_values: dict[int, tuple[float, str]] = {}\n\n    # cycle through all of the shifts\n    for shift in range(len(alphabet_letters)):\n        decrypted_with_shift = \"\"\n\n        # decrypt the message with the shift\n        for letter in ciphertext:\n            try:\n                # Try to index the letter in the alphabet\n                new_key = (alphabet_letters.index(letter.lower()) - shift) % len(\n                    alphabet_letters\n                )\n                decrypted_with_shift += (\n                    alphabet_letters[new_key].upper()\n                    if case_sensitive and letter.isupper()\n                    else alphabet_letters[new_key]\n                )\n            except ValueError:\n                # Append the character if it isn't in the alphabet\n                decrypted_with_shift += letter\n\n        chi_squared_statistic = 0.0\n\n        # Loop through each letter in the decoded message with the shift\n        for letter in decrypted_with_shift:\n            if case_sensitive:\n                letter = letter.lower()\n                if letter in frequencies:\n                    # Get the amount of times the letter occurs in the message\n                    occurrences = decrypted_with_shift.lower().count(letter)\n\n                    # Get the excepcted amount of times the letter should appear based\n                    # on letter frequencies\n                    expected = frequencies[letter] * occurrences\n\n                    # Complete the chi squared statistic formula\n                    chi_letter_value = ((occurrences - expected) ** 2) / expected\n\n                    # Add the margin of error to the total chi squared statistic\n                    chi_squared_statistic += chi_letter_value\n            elif letter.lower() in frequencies:\n                # Get the amount of times the letter occurs in the message\n                occurrences = decrypted_with_shift.count(letter)\n\n                # Get the excepcted amount of times the letter should appear based\n                # on letter frequencies\n                expected = frequencies[letter] * occurrences\n\n                # Complete the chi squared statistic formula\n                chi_letter_value = ((occurrences - expected) ** 2) / expected\n\n                # Add the margin of error to the total chi squared statistic\n                chi_squared_statistic += chi_letter_value\n\n        # Add the data to the chi_squared_statistic_values dictionary\n        chi_squared_statistic_values[shift] = (\n            chi_squared_statistic,\n            decrypted_with_shift,\n        )\n\n    # Get the most likely cipher by finding the cipher with the smallest chi squared\n    # statistic\n    def chi_squared_statistic_values_sorting_key(key: int) -> tuple[float, str]:\n        return chi_squared_statistic_values[key]\n\n    most_likely_cipher: int = min(\n        chi_squared_statistic_values,\n        key=chi_squared_statistic_values_sorting_key,\n    )\n\n    # Get all the data from the most likely cipher (key, decoded message)\n    (\n        most_likely_cipher_chi_squared_value,\n        decoded_most_likely_cipher,\n    ) = chi_squared_statistic_values[most_likely_cipher]\n\n    # Return the data on the most likely shift\n    return (\n        most_likely_cipher,\n        most_likely_cipher_chi_squared_value,\n        decoded_most_likely_cipher,\n    )\n"
  },
  {
    "path": "ciphers/deterministic_miller_rabin.py",
    "content": "\"\"\"Created by Nathan Damon, @bizzfitch on github\n>>> test_miller_rabin()\n\"\"\"\n\n\ndef miller_rabin(n: int, allow_probable: bool = False) -> bool:\n    \"\"\"Deterministic Miller-Rabin algorithm for primes ~< 3.32e24.\n\n    Uses numerical analysis results to return whether or not the passed number\n    is prime. If the passed number is above the upper limit, and\n    allow_probable is True, then a return value of True indicates that n is\n    probably prime. This test does not allow False negatives- a return value\n    of False is ALWAYS composite.\n\n    Parameters\n    ----------\n    n : int\n        The integer to be tested. Since we usually care if a number is prime,\n        n < 2 returns False instead of raising a ValueError.\n    allow_probable: bool, default False\n        Whether or not to test n above the upper bound of the deterministic test.\n\n    Raises\n    ------\n    ValueError\n\n    Reference\n    ---------\n    https://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test\n    \"\"\"\n    if n == 2:\n        return True\n    if not n % 2 or n < 2:\n        return False\n    if n > 5 and n % 10 not in (1, 3, 7, 9):  # can quickly check last digit\n        return False\n    if n > 3_317_044_064_679_887_385_961_981 and not allow_probable:\n        raise ValueError(\n            \"Warning: upper bound of deterministic test is exceeded. \"\n            \"Pass allow_probable=True to allow probabilistic test. \"\n            \"A return value of True indicates a probable prime.\"\n        )\n    # array bounds provided by analysis\n    bounds = [\n        2_047,\n        1_373_653,\n        25_326_001,\n        3_215_031_751,\n        2_152_302_898_747,\n        3_474_749_660_383,\n        341_550_071_728_321,\n        1,\n        3_825_123_056_546_413_051,\n        1,\n        1,\n        318_665_857_834_031_151_167_461,\n        3_317_044_064_679_887_385_961_981,\n    ]\n\n    primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41]\n    for idx, _p in enumerate(bounds, 1):\n        if n < _p:\n            # then we have our last prime to check\n            plist = primes[:idx]\n            break\n    d, s = n - 1, 0\n    # break up n -1 into a power of 2 (s) and\n    # remaining odd component\n    # essentially, solve for d * 2 ** s == n - 1\n    while d % 2 == 0:\n        d //= 2\n        s += 1\n    for prime in plist:\n        pr = False\n        for r in range(s):\n            m = pow(prime, d * 2**r, n)\n            # see article for analysis explanation for m\n            if (r == 0 and m == 1) or ((m + 1) % n == 0):\n                pr = True\n                # this loop will not determine compositeness\n                break\n        if pr:\n            continue\n        # if pr is False, then the above loop never evaluated to true,\n        # and the n MUST be composite\n        return False\n    return True\n\n\ndef test_miller_rabin() -> None:\n    \"\"\"Testing a nontrivial (ends in 1, 3, 7, 9) composite\n    and a prime in each range.\n    \"\"\"\n    assert not miller_rabin(561)\n    assert miller_rabin(563)\n    # 2047\n\n    assert not miller_rabin(838_201)\n    assert miller_rabin(838_207)\n    # 1_373_653\n\n    assert not miller_rabin(17_316_001)\n    assert miller_rabin(17_316_017)\n    # 25_326_001\n\n    assert not miller_rabin(3_078_386_641)\n    assert miller_rabin(3_078_386_653)\n    # 3_215_031_751\n\n    assert not miller_rabin(1_713_045_574_801)\n    assert miller_rabin(1_713_045_574_819)\n    # 2_152_302_898_747\n\n    assert not miller_rabin(2_779_799_728_307)\n    assert miller_rabin(2_779_799_728_327)\n    # 3_474_749_660_383\n\n    assert not miller_rabin(113_850_023_909_441)\n    assert miller_rabin(113_850_023_909_527)\n    # 341_550_071_728_321\n\n    assert not miller_rabin(1_275_041_018_848_804_351)\n    assert miller_rabin(1_275_041_018_848_804_391)\n    # 3_825_123_056_546_413_051\n\n    assert not miller_rabin(79_666_464_458_507_787_791_867)\n    assert miller_rabin(79_666_464_458_507_787_791_951)\n    # 318_665_857_834_031_151_167_461\n\n    assert not miller_rabin(552_840_677_446_647_897_660_333)\n    assert miller_rabin(552_840_677_446_647_897_660_359)\n    # 3_317_044_064_679_887_385_961_981\n    # upper limit for probabilistic test\n\n\nif __name__ == \"__main__\":\n    test_miller_rabin()\n"
  },
  {
    "path": "ciphers/diffie.py",
    "content": "from __future__ import annotations\r\n\r\n\r\ndef find_primitive(modulus: int) -> int | None:\r\n    \"\"\"\r\n    Find a primitive root modulo modulus, if one exists.\r\n\r\n    Args:\r\n        modulus : The modulus for which to find a primitive root.\r\n\r\n    Returns:\r\n        The primitive root if one exists, or None if there is none.\r\n\r\n    Examples:\r\n    >>> find_primitive(7)  # Modulo 7 has primitive root 3\r\n    3\r\n    >>> find_primitive(11)  # Modulo 11 has primitive root 2\r\n    2\r\n    >>> find_primitive(8) == None # Modulo 8 has no primitive root\r\n    True\r\n    \"\"\"\r\n    for r in range(1, modulus):\r\n        li = []\r\n        for x in range(modulus - 1):\r\n            val = pow(r, x, modulus)\r\n            if val in li:\r\n                break\r\n            li.append(val)\r\n        else:\r\n            return r\r\n    return None\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n\r\n    prime = int(input(\"Enter a prime number q: \"))\r\n    primitive_root = find_primitive(prime)\r\n    if primitive_root is None:\r\n        print(f\"Cannot find the primitive for the value: {primitive_root!r}\")\r\n    else:\r\n        a_private = int(input(\"Enter private key of A: \"))\r\n        a_public = pow(primitive_root, a_private, prime)\r\n        b_private = int(input(\"Enter private key of B: \"))\r\n        b_public = pow(primitive_root, b_private, prime)\r\n\r\n        a_secret = pow(b_public, a_private, prime)\r\n        b_secret = pow(a_public, b_private, prime)\r\n\r\n        print(\"The key value generated by A is: \", a_secret)\r\n        print(\"The key value generated by B is: \", b_secret)\r\n"
  },
  {
    "path": "ciphers/diffie_hellman.py",
    "content": "from binascii import hexlify\nfrom hashlib import sha256\nfrom os import urandom\n\n# RFC 3526 - More Modular Exponential (MODP) Diffie-Hellman groups for\n# Internet Key Exchange (IKE) https://tools.ietf.org/html/rfc3526\n\nprimes = {\n    # 1536-bit\n    5: {\n        \"prime\": int(\n            \"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1\"\n            \"29024E088A67CC74020BBEA63B139B22514A08798E3404DD\"\n            \"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245\"\n            \"E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED\"\n            \"EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D\"\n            \"C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F\"\n            \"83655D23DCA3AD961C62F356208552BB9ED529077096966D\"\n            \"670C354E4ABC9804F1746C08CA237327FFFFFFFFFFFFFFFF\",\n            base=16,\n        ),\n        \"generator\": 2,\n    },\n    # 2048-bit\n    14: {\n        \"prime\": int(\n            \"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1\"\n            \"29024E088A67CC74020BBEA63B139B22514A08798E3404DD\"\n            \"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245\"\n            \"E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED\"\n            \"EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D\"\n            \"C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F\"\n            \"83655D23DCA3AD961C62F356208552BB9ED529077096966D\"\n            \"670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B\"\n            \"E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9\"\n            \"DE2BCBF6955817183995497CEA956AE515D2261898FA0510\"\n            \"15728E5A8AACAA68FFFFFFFFFFFFFFFF\",\n            base=16,\n        ),\n        \"generator\": 2,\n    },\n    # 3072-bit\n    15: {\n        \"prime\": int(\n            \"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1\"\n            \"29024E088A67CC74020BBEA63B139B22514A08798E3404DD\"\n            \"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245\"\n            \"E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED\"\n            \"EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D\"\n            \"C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F\"\n            \"83655D23DCA3AD961C62F356208552BB9ED529077096966D\"\n            \"670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B\"\n            \"E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9\"\n            \"DE2BCBF6955817183995497CEA956AE515D2261898FA0510\"\n            \"15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64\"\n            \"ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7\"\n            \"ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B\"\n            \"F12FFA06D98A0864D87602733EC86A64521F2B18177B200C\"\n            \"BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31\"\n            \"43DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF\",\n            base=16,\n        ),\n        \"generator\": 2,\n    },\n    # 4096-bit\n    16: {\n        \"prime\": int(\n            \"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1\"\n            \"29024E088A67CC74020BBEA63B139B22514A08798E3404DD\"\n            \"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245\"\n            \"E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED\"\n            \"EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D\"\n            \"C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F\"\n            \"83655D23DCA3AD961C62F356208552BB9ED529077096966D\"\n            \"670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B\"\n            \"E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9\"\n            \"DE2BCBF6955817183995497CEA956AE515D2261898FA0510\"\n            \"15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64\"\n            \"ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7\"\n            \"ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B\"\n            \"F12FFA06D98A0864D87602733EC86A64521F2B18177B200C\"\n            \"BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31\"\n            \"43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7\"\n            \"88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA\"\n            \"2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6\"\n            \"287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED\"\n            \"1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9\"\n            \"93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199\"\n            \"FFFFFFFFFFFFFFFF\",\n            base=16,\n        ),\n        \"generator\": 2,\n    },\n    # 6144-bit\n    17: {\n        \"prime\": int(\n            \"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E08\"\n            \"8A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B\"\n            \"302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9\"\n            \"A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE6\"\n            \"49286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8\"\n            \"FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D\"\n            \"670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C\"\n            \"180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718\"\n            \"3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D\"\n            \"04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7D\"\n            \"B3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D226\"\n            \"1AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200C\"\n            \"BBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFC\"\n            \"E0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B26\"\n            \"99C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB\"\n            \"04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2\"\n            \"233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127\"\n            \"D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492\"\n            \"36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BDF8FF9406\"\n            \"AD9E530EE5DB382F413001AEB06A53ED9027D831179727B0865A8918\"\n            \"DA3EDBEBCF9B14ED44CE6CBACED4BB1BDB7F1447E6CC254B33205151\"\n            \"2BD7AF426FB8F401378CD2BF5983CA01C64B92ECF032EA15D1721D03\"\n            \"F482D7CE6E74FEF6D55E702F46980C82B5A84031900B1C9E59E7C97F\"\n            \"BEC7E8F323A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA\"\n            \"CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE32806A1D58B\"\n            \"B7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55CDA56C9EC2EF29632\"\n            \"387FE8D76E3C0468043E8F663F4860EE12BF2D5B0B7474D6E694F91E\"\n            \"6DCC4024FFFFFFFFFFFFFFFF\",\n            base=16,\n        ),\n        \"generator\": 2,\n    },\n    # 8192-bit\n    18: {\n        \"prime\": int(\n            \"FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1\"\n            \"29024E088A67CC74020BBEA63B139B22514A08798E3404DD\"\n            \"EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245\"\n            \"E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED\"\n            \"EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D\"\n            \"C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F\"\n            \"83655D23DCA3AD961C62F356208552BB9ED529077096966D\"\n            \"670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B\"\n            \"E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9\"\n            \"DE2BCBF6955817183995497CEA956AE515D2261898FA0510\"\n            \"15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64\"\n            \"ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7\"\n            \"ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B\"\n            \"F12FFA06D98A0864D87602733EC86A64521F2B18177B200C\"\n            \"BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31\"\n            \"43DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7\"\n            \"88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA\"\n            \"2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6\"\n            \"287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED\"\n            \"1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9\"\n            \"93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934028492\"\n            \"36C3FAB4D27C7026C1D4DCB2602646DEC9751E763DBA37BD\"\n            \"F8FF9406AD9E530EE5DB382F413001AEB06A53ED9027D831\"\n            \"179727B0865A8918DA3EDBEBCF9B14ED44CE6CBACED4BB1B\"\n            \"DB7F1447E6CC254B332051512BD7AF426FB8F401378CD2BF\"\n            \"5983CA01C64B92ECF032EA15D1721D03F482D7CE6E74FEF6\"\n            \"D55E702F46980C82B5A84031900B1C9E59E7C97FBEC7E8F3\"\n            \"23A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA\"\n            \"CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE328\"\n            \"06A1D58BB7C5DA76F550AA3D8A1FBFF0EB19CCB1A313D55C\"\n            \"DA56C9EC2EF29632387FE8D76E3C0468043E8F663F4860EE\"\n            \"12BF2D5B0B7474D6E694F91E6DBE115974A3926F12FEE5E4\"\n            \"38777CB6A932DF8CD8BEC4D073B931BA3BC832B68D9DD300\"\n            \"741FA7BF8AFC47ED2576F6936BA424663AAB639C5AE4F568\"\n            \"3423B4742BF1C978238F16CBE39D652DE3FDB8BEFC848AD9\"\n            \"22222E04A4037C0713EB57A81A23F0C73473FC646CEA306B\"\n            \"4BCBC8862F8385DDFA9D4B7FA2C087E879683303ED5BDD3A\"\n            \"062B3CF5B3A278A66D2A13F83F44F82DDF310EE074AB6A36\"\n            \"4597E899A0255DC164F31CC50846851DF9AB48195DED7EA1\"\n            \"B1D510BD7EE74D73FAF36BC31ECFA268359046F4EB879F92\"\n            \"4009438B481C6CD7889A002ED5EE382BC9190DA6FC026E47\"\n            \"9558E4475677E9AA9E3050E2765694DFC81F56E880B96E71\"\n            \"60C980DD98EDD3DFFFFFFFFFFFFFFFFF\",\n            base=16,\n        ),\n        \"generator\": 2,\n    },\n}\n\n\nclass DiffieHellman:\n    \"\"\"\n    Class to represent the Diffie-Hellman key exchange protocol\n\n\n    >>> alice = DiffieHellman()\n    >>> bob = DiffieHellman()\n\n    >>> alice_private = alice.get_private_key()\n    >>> alice_public = alice.generate_public_key()\n\n    >>> bob_private = bob.get_private_key()\n    >>> bob_public = bob.generate_public_key()\n\n    >>> # generating shared key using the DH object\n    >>> alice_shared = alice.generate_shared_key(bob_public)\n    >>> bob_shared = bob.generate_shared_key(alice_public)\n\n    >>> assert alice_shared == bob_shared\n\n    >>> # generating shared key using static methods\n    >>> alice_shared = DiffieHellman.generate_shared_key_static(\n    ...     alice_private, bob_public\n    ... )\n    >>> bob_shared = DiffieHellman.generate_shared_key_static(\n    ...     bob_private, alice_public\n    ... )\n\n    >>> assert alice_shared == bob_shared\n    \"\"\"\n\n    # Current minimum recommendation is 2048 bit (group 14)\n    def __init__(self, group: int = 14) -> None:\n        if group not in primes:\n            raise ValueError(\"Unsupported Group\")\n        self.prime = primes[group][\"prime\"]\n        self.generator = primes[group][\"generator\"]\n\n        self.__private_key = int(hexlify(urandom(32)), base=16)\n\n    def get_private_key(self) -> str:\n        return hex(self.__private_key)[2:]\n\n    def generate_public_key(self) -> str:\n        public_key = pow(self.generator, self.__private_key, self.prime)\n        return hex(public_key)[2:]\n\n    def is_valid_public_key(self, key: int) -> bool:\n        # check if the other public key is valid based on NIST SP800-56\n        return (\n            2 <= key <= self.prime - 2\n            and pow(key, (self.prime - 1) // 2, self.prime) == 1\n        )\n\n    def generate_shared_key(self, other_key_str: str) -> str:\n        other_key = int(other_key_str, base=16)\n        if not self.is_valid_public_key(other_key):\n            raise ValueError(\"Invalid public key\")\n        shared_key = pow(other_key, self.__private_key, self.prime)\n        return sha256(str(shared_key).encode()).hexdigest()\n\n    @staticmethod\n    def is_valid_public_key_static(remote_public_key_str: int, prime: int) -> bool:\n        # check if the other public key is valid based on NIST SP800-56\n        return (\n            2 <= remote_public_key_str <= prime - 2\n            and pow(remote_public_key_str, (prime - 1) // 2, prime) == 1\n        )\n\n    @staticmethod\n    def generate_shared_key_static(\n        local_private_key_str: str, remote_public_key_str: str, group: int = 14\n    ) -> str:\n        local_private_key = int(local_private_key_str, base=16)\n        remote_public_key = int(remote_public_key_str, base=16)\n        prime = primes[group][\"prime\"]\n        if not DiffieHellman.is_valid_public_key_static(remote_public_key, prime):\n            raise ValueError(\"Invalid public key\")\n        shared_key = pow(remote_public_key, local_private_key, prime)\n        return sha256(str(shared_key).encode()).hexdigest()\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "ciphers/elgamal_key_generator.py",
    "content": "import os\nimport random\nimport sys\n\nfrom . import cryptomath_module as cryptomath\nfrom . import rabin_miller\n\nmin_primitive_root = 3\n\n\n# I have written my code naively same as definition of primitive root\n# however every time I run this program, memory exceeded...\n# so I used 4.80 Algorithm in\n# Handbook of Applied Cryptography(CRC Press, ISBN : 0-8493-8523-7, October 1996)\n# and it seems to run nicely!\ndef primitive_root(p_val: int) -> int:\n    print(\"Generating primitive root of p\")\n    while True:\n        g = random.randrange(3, p_val)\n        if pow(g, 2, p_val) == 1:\n            continue\n        if pow(g, p_val, p_val) == 1:\n            continue\n        return g\n\n\ndef generate_key(key_size: int) -> tuple[tuple[int, int, int, int], tuple[int, int]]:\n    print(\"Generating prime p...\")\n    p = rabin_miller.generate_large_prime(key_size)  # select large prime number.\n    e_1 = primitive_root(p)  # one primitive root on modulo p.\n    d = random.randrange(3, p)  # private_key -> have to be greater than 2 for safety.\n    e_2 = cryptomath.find_mod_inverse(pow(e_1, d, p), p)\n\n    public_key = (key_size, e_1, e_2, p)\n    private_key = (key_size, d)\n\n    return public_key, private_key\n\n\ndef make_key_files(name: str, key_size: int) -> None:\n    if os.path.exists(f\"{name}_pubkey.txt\") or os.path.exists(f\"{name}_privkey.txt\"):\n        print(\"\\nWARNING:\")\n        print(\n            f'\"{name}_pubkey.txt\" or \"{name}_privkey.txt\" already exists. \\n'\n            \"Use a different name or delete these files and re-run this program.\"\n        )\n        sys.exit()\n\n    public_key, private_key = generate_key(key_size)\n    print(f\"\\nWriting public key to file {name}_pubkey.txt...\")\n    with open(f\"{name}_pubkey.txt\", \"w\") as fo:\n        fo.write(f\"{public_key[0]},{public_key[1]},{public_key[2]},{public_key[3]}\")\n\n    print(f\"Writing private key to file {name}_privkey.txt...\")\n    with open(f\"{name}_privkey.txt\", \"w\") as fo:\n        fo.write(f\"{private_key[0]},{private_key[1]}\")\n\n\ndef main() -> None:\n    print(\"Making key files...\")\n    make_key_files(\"elgamal\", 2048)\n    print(\"Key files generation successful\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "ciphers/enigma_machine2.py",
    "content": "\"\"\"\n| Wikipedia: https://en.wikipedia.org/wiki/Enigma_machine\n| Video explanation: https://youtu.be/QwQVMqfoB2E\n| Also check out Numberphile's and Computerphile's videos on this topic\n\nThis module contains function ``enigma`` which emulates\nthe famous Enigma machine from WWII.\n\nModule includes:\n\n- ``enigma`` function\n- showcase of function usage\n- ``9`` randomly generated rotors\n- reflector (aka static rotor)\n- original alphabet\n\nCreated by TrapinchO\n\"\"\"\n\nfrom __future__ import annotations\n\nRotorPositionT = tuple[int, int, int]\nRotorSelectionT = tuple[str, str, str]\n\n\n# used alphabet --------------------------\n# from string.ascii_uppercase\nabc = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n\n# -------------------------- default selection --------------------------\n# rotors --------------------------\nrotor1 = \"EGZWVONAHDCLFQMSIPJBYUKXTR\"\nrotor2 = \"FOBHMDKEXQNRAULPGSJVTYICZW\"\nrotor3 = \"ZJXESIUQLHAVRMDOYGTNFWPBKC\"\n# reflector --------------------------\nreflector = {\n    \"A\": \"N\",\n    \"N\": \"A\",\n    \"B\": \"O\",\n    \"O\": \"B\",\n    \"C\": \"P\",\n    \"P\": \"C\",\n    \"D\": \"Q\",\n    \"Q\": \"D\",\n    \"E\": \"R\",\n    \"R\": \"E\",\n    \"F\": \"S\",\n    \"S\": \"F\",\n    \"G\": \"T\",\n    \"T\": \"G\",\n    \"H\": \"U\",\n    \"U\": \"H\",\n    \"I\": \"V\",\n    \"V\": \"I\",\n    \"J\": \"W\",\n    \"W\": \"J\",\n    \"K\": \"X\",\n    \"X\": \"K\",\n    \"L\": \"Y\",\n    \"Y\": \"L\",\n    \"M\": \"Z\",\n    \"Z\": \"M\",\n}\n\n# -------------------------- extra rotors --------------------------\nrotor4 = \"RMDJXFUWGISLHVTCQNKYPBEZOA\"\nrotor5 = \"SGLCPQWZHKXAREONTFBVIYJUDM\"\nrotor6 = \"HVSICLTYKQUBXDWAJZOMFGPREN\"\nrotor7 = \"RZWQHFMVDBKICJLNTUXAGYPSOE\"\nrotor8 = \"LFKIJODBEGAMQPXVUHYSTCZRWN\"\nrotor9 = \"KOAEGVDHXPQZMLFTYWJNBRCIUS\"\n\n\ndef _validator(\n    rotpos: RotorPositionT, rotsel: RotorSelectionT, pb: str\n) -> tuple[RotorPositionT, RotorSelectionT, dict[str, str]]:\n    \"\"\"\n    Checks if the values can be used for the ``enigma`` function\n\n    >>> _validator((1,1,1), (rotor1, rotor2, rotor3), 'POLAND')\n    ((1, 1, 1), ('EGZWVONAHDCLFQMSIPJBYUKXTR', 'FOBHMDKEXQNRAULPGSJVTYICZW', \\\n'ZJXESIUQLHAVRMDOYGTNFWPBKC'), \\\n{'P': 'O', 'O': 'P', 'L': 'A', 'A': 'L', 'N': 'D', 'D': 'N'})\n\n    :param rotpos: rotor_positon\n    :param rotsel: rotor_selection\n    :param pb: plugb -> validated and transformed\n    :return: (`rotpos`, `rotsel`, `pb`)\n    \"\"\"\n    # Checks if there are 3 unique rotors\n\n    if (unique_rotsel := len(set(rotsel))) < 3:\n        msg = f\"Please use 3 unique rotors (not {unique_rotsel})\"\n        raise Exception(msg)\n\n    # Checks if rotor positions are valid\n    rotorpos1, rotorpos2, rotorpos3 = rotpos\n    if not 0 < rotorpos1 <= len(abc):\n        msg = f\"First rotor position is not within range of 1..26 ({rotorpos1}\"\n        raise ValueError(msg)\n    if not 0 < rotorpos2 <= len(abc):\n        msg = f\"Second rotor position is not within range of 1..26 ({rotorpos2})\"\n        raise ValueError(msg)\n    if not 0 < rotorpos3 <= len(abc):\n        msg = f\"Third rotor position is not within range of 1..26 ({rotorpos3})\"\n        raise ValueError(msg)\n\n    # Validates string and returns dict\n    pbdict = _plugboard(pb)\n\n    return rotpos, rotsel, pbdict\n\n\ndef _plugboard(pbstring: str) -> dict[str, str]:\n    \"\"\"\n    https://en.wikipedia.org/wiki/Enigma_machine#Plugboard\n\n    >>> _plugboard('PICTURES')\n    {'P': 'I', 'I': 'P', 'C': 'T', 'T': 'C', 'U': 'R', 'R': 'U', 'E': 'S', 'S': 'E'}\n    >>> _plugboard('POLAND')\n    {'P': 'O', 'O': 'P', 'L': 'A', 'A': 'L', 'N': 'D', 'D': 'N'}\n\n    In the code, ``pb`` stands for ``plugboard``\n\n    Pairs can be separated by spaces\n\n    :param pbstring: string containing plugboard setting for the Enigma machine\n    :return: dictionary containing converted pairs\n    \"\"\"\n\n    # tests the input string if it\n    # a) is type string\n    # b) has even length (so pairs can be made)\n    if not isinstance(pbstring, str):\n        msg = f\"Plugboard setting isn't type string ({type(pbstring)})\"\n        raise TypeError(msg)\n    elif len(pbstring) % 2 != 0:\n        msg = f\"Odd number of symbols ({len(pbstring)})\"\n        raise Exception(msg)\n    elif pbstring == \"\":\n        return {}\n\n    pbstring.replace(\" \", \"\")\n\n    # Checks if all characters are unique\n    tmppbl = set()\n    for i in pbstring:\n        if i not in abc:\n            msg = f\"'{i}' not in list of symbols\"\n            raise Exception(msg)\n        elif i in tmppbl:\n            msg = f\"Duplicate symbol ({i})\"\n            raise Exception(msg)\n        else:\n            tmppbl.add(i)\n    del tmppbl\n\n    # Created the dictionary\n    pb = {}\n    for j in range(0, len(pbstring) - 1, 2):\n        pb[pbstring[j]] = pbstring[j + 1]\n        pb[pbstring[j + 1]] = pbstring[j]\n\n    return pb\n\n\ndef enigma(\n    text: str,\n    rotor_position: RotorPositionT,\n    rotor_selection: RotorSelectionT = (rotor1, rotor2, rotor3),\n    plugb: str = \"\",\n) -> str:\n    \"\"\"\n    The only difference with real-world enigma is that ``I`` allowed string input.\n    All characters are converted to uppercase. (non-letter symbol are ignored)\n\n    | How it works:\n    | (for every letter in the message)\n\n    - Input letter goes into the plugboard.\n      If it is connected to another one, switch it.\n\n    - Letter goes through ``3`` rotors.\n      Each rotor can be represented as ``2`` sets of symbol, where one is shuffled.\n      Each symbol from the first set has corresponding symbol in\n      the second set and vice versa.\n\n      example::\n\n      | ABCDEFGHIJKLMNOPQRSTUVWXYZ | e.g. F=D and D=F\n      | VKLEPDBGRNWTFCJOHQAMUZYIXS |\n\n    - Symbol then goes through reflector (static rotor).\n      There it is switched with paired symbol.\n      The reflector can be represented as ``2`` sets, each with half of the alphanet.\n      There are usually ``10`` pairs of letters.\n\n      Example::\n\n      | ABCDEFGHIJKLM | e.g. E is paired to X\n      | ZYXWVUTSRQPON | so when E goes in X goes out and vice versa\n\n    - Letter then goes through the rotors again\n\n    - If the letter is connected to plugboard, it is switched.\n\n    - Return the letter\n\n    >>> enigma('Hello World!', (1, 2, 1), plugb='pictures')\n    'KORYH JUHHI!'\n    >>> enigma('KORYH, juhhi!', (1, 2, 1), plugb='pictures')\n    'HELLO, WORLD!'\n    >>> enigma('hello world!', (1, 1, 1), plugb='pictures')\n    'FPNCZ QWOBU!'\n    >>> enigma('FPNCZ QWOBU', (1, 1, 1), plugb='pictures')\n    'HELLO WORLD'\n\n\n    :param text: input message\n    :param rotor_position: tuple with ``3`` values in range ``1``.. ``26``\n    :param rotor_selection: tuple with ``3`` rotors\n    :param plugb: string containing plugboard configuration (default ``''``)\n    :return: en/decrypted string\n    \"\"\"\n\n    text = text.upper()\n    rotor_position, rotor_selection, plugboard = _validator(\n        rotor_position, rotor_selection, plugb.upper()\n    )\n\n    rotorpos1, rotorpos2, rotorpos3 = rotor_position\n    rotor1, rotor2, rotor3 = rotor_selection\n    rotorpos1 -= 1\n    rotorpos2 -= 1\n    rotorpos3 -= 1\n\n    result = []\n\n    # encryption/decryption process --------------------------\n    for symbol in text:\n        if symbol in abc:\n            # 1st plugboard --------------------------\n            if symbol in plugboard:\n                symbol = plugboard[symbol]\n\n            # rotor ra --------------------------\n            index = abc.index(symbol) + rotorpos1\n            symbol = rotor1[index % len(abc)]\n\n            # rotor rb --------------------------\n            index = abc.index(symbol) + rotorpos2\n            symbol = rotor2[index % len(abc)]\n\n            # rotor rc --------------------------\n            index = abc.index(symbol) + rotorpos3\n            symbol = rotor3[index % len(abc)]\n\n            # reflector --------------------------\n            # this is the reason you don't need another machine to decipher\n\n            symbol = reflector[symbol]\n\n            # 2nd rotors\n            symbol = abc[rotor3.index(symbol) - rotorpos3]\n            symbol = abc[rotor2.index(symbol) - rotorpos2]\n            symbol = abc[rotor1.index(symbol) - rotorpos1]\n\n            # 2nd plugboard\n            if symbol in plugboard:\n                symbol = plugboard[symbol]\n\n            # moves/resets rotor positions\n            rotorpos1 += 1\n            if rotorpos1 >= len(abc):\n                rotorpos1 = 0\n                rotorpos2 += 1\n            if rotorpos2 >= len(abc):\n                rotorpos2 = 0\n                rotorpos3 += 1\n            if rotorpos3 >= len(abc):\n                rotorpos3 = 0\n\n        # else:\n        #    pass\n        #    Error could be also raised\n        #    raise ValueError(\n        #       'Invalid symbol('+repr(symbol)+')')\n        result.append(symbol)\n\n    return \"\".join(result)\n\n\nif __name__ == \"__main__\":\n    message = \"This is my Python script that emulates the Enigma machine from WWII.\"\n    rotor_pos = (1, 1, 1)\n    pb = \"pictures\"\n    rotor_sel = (rotor2, rotor4, rotor8)\n    en = enigma(message, rotor_pos, rotor_sel, pb)\n\n    print(\"Encrypted message:\", en)\n    print(\"Decrypted message:\", enigma(en, rotor_pos, rotor_sel, pb))\n"
  },
  {
    "path": "ciphers/fractionated_morse_cipher.py",
    "content": "\"\"\"\nPython program for the Fractionated Morse Cipher.\n\nThe Fractionated Morse cipher first converts the plaintext to Morse code,\nthen enciphers fixed-size blocks of Morse code back to letters.\nThis procedure means plaintext letters are mixed into the ciphertext letters,\nmaking it more secure than substitution ciphers.\n\nhttp://practicalcryptography.com/ciphers/fractionated-morse-cipher/\n\"\"\"\n\nimport string\n\nMORSE_CODE_DICT = {\n    \"A\": \".-\",\n    \"B\": \"-...\",\n    \"C\": \"-.-.\",\n    \"D\": \"-..\",\n    \"E\": \".\",\n    \"F\": \"..-.\",\n    \"G\": \"--.\",\n    \"H\": \"....\",\n    \"I\": \"..\",\n    \"J\": \".---\",\n    \"K\": \"-.-\",\n    \"L\": \".-..\",\n    \"M\": \"--\",\n    \"N\": \"-.\",\n    \"O\": \"---\",\n    \"P\": \".--.\",\n    \"Q\": \"--.-\",\n    \"R\": \".-.\",\n    \"S\": \"...\",\n    \"T\": \"-\",\n    \"U\": \"..-\",\n    \"V\": \"...-\",\n    \"W\": \".--\",\n    \"X\": \"-..-\",\n    \"Y\": \"-.--\",\n    \"Z\": \"--..\",\n    \" \": \"\",\n}\n\n# Define possible trigrams of Morse code\nMORSE_COMBINATIONS = [\n    \"...\",\n    \"..-\",\n    \"..x\",\n    \".-.\",\n    \".--\",\n    \".-x\",\n    \".x.\",\n    \".x-\",\n    \".xx\",\n    \"-..\",\n    \"-.-\",\n    \"-.x\",\n    \"--.\",\n    \"---\",\n    \"--x\",\n    \"-x.\",\n    \"-x-\",\n    \"-xx\",\n    \"x..\",\n    \"x.-\",\n    \"x.x\",\n    \"x-.\",\n    \"x--\",\n    \"x-x\",\n    \"xx.\",\n    \"xx-\",\n    \"xxx\",\n]\n\n# Create a reverse dictionary for Morse code\nREVERSE_DICT = {value: key for key, value in MORSE_CODE_DICT.items()}\n\n\ndef encode_to_morse(plaintext: str) -> str:\n    \"\"\"Encode a plaintext message into Morse code.\n\n    Args:\n        plaintext: The plaintext message to encode.\n\n    Returns:\n        The Morse code representation of the plaintext message.\n\n    Example:\n        >>> encode_to_morse(\"defend the east\")\n        '-..x.x..-.x.x-.x-..xx-x....x.xx.x.-x...x-'\n    \"\"\"\n    return \"x\".join([MORSE_CODE_DICT.get(letter.upper(), \"\") for letter in plaintext])\n\n\ndef encrypt_fractionated_morse(plaintext: str, key: str) -> str:\n    \"\"\"Encrypt a plaintext message using Fractionated Morse Cipher.\n\n    Args:\n        plaintext: The plaintext message to encrypt.\n        key: The encryption key.\n\n    Returns:\n        The encrypted ciphertext.\n\n    Example:\n        >>> encrypt_fractionated_morse(\"defend the east\",\"Roundtable\")\n        'ESOAVVLJRSSTRX'\n\n    \"\"\"\n    morse_code = encode_to_morse(plaintext)\n    key = key.upper() + string.ascii_uppercase\n    key = \"\".join(sorted(set(key), key=key.find))\n\n    # Ensure morse_code length is a multiple of 3\n    padding_length = 3 - (len(morse_code) % 3)\n    morse_code += \"x\" * padding_length\n\n    fractionated_morse_dict = {v: k for k, v in zip(key, MORSE_COMBINATIONS)}\n    fractionated_morse_dict[\"xxx\"] = \"\"\n    encrypted_text = \"\".join(\n        [\n            fractionated_morse_dict[morse_code[i : i + 3]]\n            for i in range(0, len(morse_code), 3)\n        ]\n    )\n    return encrypted_text\n\n\ndef decrypt_fractionated_morse(ciphertext: str, key: str) -> str:\n    \"\"\"Decrypt a ciphertext message encrypted with Fractionated Morse Cipher.\n\n    Args:\n        ciphertext: The ciphertext message to decrypt.\n        key: The decryption key.\n\n    Returns:\n        The decrypted plaintext message.\n\n    Example:\n        >>> decrypt_fractionated_morse(\"ESOAVVLJRSSTRX\",\"Roundtable\")\n        'DEFEND THE EAST'\n    \"\"\"\n    key = key.upper() + string.ascii_uppercase\n    key = \"\".join(sorted(set(key), key=key.find))\n\n    inverse_fractionated_morse_dict = dict(zip(key, MORSE_COMBINATIONS))\n    morse_code = \"\".join(\n        [inverse_fractionated_morse_dict.get(letter, \"\") for letter in ciphertext]\n    )\n    decrypted_text = \"\".join(\n        [REVERSE_DICT[code] for code in morse_code.split(\"x\")]\n    ).strip()\n    return decrypted_text\n\n\nif __name__ == \"__main__\":\n    \"\"\"\n    Example usage of Fractionated Morse Cipher.\n    \"\"\"\n    plaintext = \"defend the east\"\n    print(\"Plain Text:\", plaintext)\n    key = \"ROUNDTABLE\"\n\n    ciphertext = encrypt_fractionated_morse(plaintext, key)\n    print(\"Encrypted:\", ciphertext)\n\n    decrypted_text = decrypt_fractionated_morse(ciphertext, key)\n    print(\"Decrypted:\", decrypted_text)\n"
  },
  {
    "path": "ciphers/gronsfeld_cipher.py",
    "content": "from string import ascii_uppercase\n\n\ndef gronsfeld(text: str, key: str) -> str:\n    \"\"\"\n    Encrypt plaintext with the Gronsfeld cipher\n\n    >>> gronsfeld('hello', '412')\n    'LFNPP'\n    >>> gronsfeld('hello', '123')\n    'IGOMQ'\n    >>> gronsfeld('', '123')\n    ''\n    >>> gronsfeld('yes, ¥€$ - _!@#%?', '0')\n    'YES, ¥€$ - _!@#%?'\n    >>> gronsfeld('yes, ¥€$ - _!@#%?', '01')\n    'YFS, ¥€$ - _!@#%?'\n    >>> gronsfeld('yes, ¥€$ - _!@#%?', '012')\n    'YFU, ¥€$ - _!@#%?'\n    >>> gronsfeld('yes, ¥€$ - _!@#%?', '')\n    Traceback (most recent call last):\n      ...\n    ZeroDivisionError: division by zero\n    \"\"\"\n    ascii_len = len(ascii_uppercase)\n    key_len = len(key)\n    encrypted_text = \"\"\n    keys = [int(char) for char in key]\n    upper_case_text = text.upper()\n\n    for i, char in enumerate(upper_case_text):\n        if char in ascii_uppercase:\n            new_position = (ascii_uppercase.index(char) + keys[i % key_len]) % ascii_len\n            shifted_letter = ascii_uppercase[new_position]\n            encrypted_text += shifted_letter\n        else:\n            encrypted_text += char\n\n    return encrypted_text\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "ciphers/hill_cipher.py",
    "content": "\"\"\"\n\nHill Cipher:\nThe 'HillCipher' class below implements the Hill Cipher algorithm which uses\nmodern linear algebra techniques to encode and decode text using an encryption\nkey matrix.\n\nAlgorithm:\nLet the order of the encryption key be N (as it is a square matrix).\nYour text is divided into batches of length N and converted to numerical vectors\nby a simple mapping starting with A=0 and so on.\n\nThe key is then multiplied with the newly created batch vector to obtain the\nencoded vector. After each multiplication modular 36 calculations are performed\non the vectors so as to bring the numbers between 0 and 36 and then mapped with\ntheir corresponding alphanumerics.\n\nWhile decrypting, the decrypting key is found which is the inverse of the\nencrypting key modular 36. The same process is repeated for decrypting to get\nthe original message back.\n\nConstraints:\nThe determinant of the encryption key matrix must be relatively prime w.r.t 36.\n\nNote:\nThis implementation only considers alphanumerics in the text.  If the length of\nthe text to be encrypted is not a multiple of the break key(the length of one\nbatch of letters), the last character of the text is added to the text until the\nlength of the text reaches a multiple of the break_key. So the text after\ndecrypting might be a little different than the original text.\n\nReferences:\nhttps://apprendre-en-ligne.net/crypto/hill/Hillciph.pdf\nhttps://www.youtube.com/watch?v=kfmNeskzs2o\nhttps://www.youtube.com/watch?v=4RhLNDqcjpA\n\n\"\"\"\n\nimport string\n\nimport numpy as np\n\nfrom maths.greatest_common_divisor import greatest_common_divisor\n\n\nclass HillCipher:\n    key_string = string.ascii_uppercase + string.digits\n    # This cipher takes alphanumerics into account\n    # i.e. a total of 36 characters\n\n    # take x and return x % len(key_string)\n    modulus = np.vectorize(lambda x: x % 36)\n\n    to_int = np.vectorize(round)\n\n    def __init__(self, encrypt_key: np.ndarray) -> None:\n        \"\"\"\n        encrypt_key is an NxN numpy array\n        \"\"\"\n        self.encrypt_key = self.modulus(encrypt_key)  # mod36 calc's on the encrypt key\n        self.check_determinant()  # validate the determinant of the encryption key\n        self.break_key = encrypt_key.shape[0]\n\n    def replace_letters(self, letter: str) -> int:\n        \"\"\"\n        >>> hill_cipher = HillCipher(np.array([[2, 5], [1, 6]]))\n        >>> hill_cipher.replace_letters('T')\n        19\n        >>> hill_cipher.replace_letters('0')\n        26\n        \"\"\"\n        return self.key_string.index(letter)\n\n    def replace_digits(self, num: int) -> str:\n        \"\"\"\n        >>> hill_cipher = HillCipher(np.array([[2, 5], [1, 6]]))\n        >>> hill_cipher.replace_digits(19)\n        'T'\n        >>> hill_cipher.replace_digits(26)\n        '0'\n        >>> hill_cipher.replace_digits(26.1)\n        '0'\n        \"\"\"\n        return self.key_string[int(num)]\n\n    def check_determinant(self) -> None:\n        \"\"\"\n        >>> hill_cipher = HillCipher(np.array([[2, 5], [1, 6]]))\n        >>> hill_cipher.check_determinant()\n        \"\"\"\n        det = round(np.linalg.det(self.encrypt_key))\n\n        if det < 0:\n            det = det % len(self.key_string)\n\n        req_l = len(self.key_string)\n        if greatest_common_divisor(det, len(self.key_string)) != 1:\n            msg = (\n                f\"determinant modular {req_l} of encryption key({det}) \"\n                f\"is not co prime w.r.t {req_l}.\\nTry another key.\"\n            )\n            raise ValueError(msg)\n\n    def process_text(self, text: str) -> str:\n        \"\"\"\n        >>> hill_cipher = HillCipher(np.array([[2, 5], [1, 6]]))\n        >>> hill_cipher.process_text('Testing Hill Cipher')\n        'TESTINGHILLCIPHERR'\n        >>> hill_cipher.process_text('hello')\n        'HELLOO'\n        \"\"\"\n        chars = [char for char in text.upper() if char in self.key_string]\n\n        last = chars[-1]\n        while len(chars) % self.break_key != 0:\n            chars.append(last)\n\n        return \"\".join(chars)\n\n    def encrypt(self, text: str) -> str:\n        \"\"\"\n        >>> hill_cipher = HillCipher(np.array([[2, 5], [1, 6]]))\n        >>> hill_cipher.encrypt('testing hill cipher')\n        'WHXYJOLM9C6XT085LL'\n        >>> hill_cipher.encrypt('hello')\n        '85FF00'\n        \"\"\"\n        text = self.process_text(text.upper())\n        encrypted = \"\"\n\n        for i in range(0, len(text) - self.break_key + 1, self.break_key):\n            batch = text[i : i + self.break_key]\n            vec = [self.replace_letters(char) for char in batch]\n            batch_vec = np.array([vec]).T\n            batch_encrypted = self.modulus(self.encrypt_key.dot(batch_vec)).T.tolist()[\n                0\n            ]\n            encrypted_batch = \"\".join(\n                self.replace_digits(num) for num in batch_encrypted\n            )\n            encrypted += encrypted_batch\n\n        return encrypted\n\n    def make_decrypt_key(self) -> np.ndarray:\n        \"\"\"\n        >>> hill_cipher = HillCipher(np.array([[2, 5], [1, 6]]))\n        >>> hill_cipher.make_decrypt_key()\n        array([[ 6, 25],\n               [ 5, 26]])\n        \"\"\"\n        det = round(np.linalg.det(self.encrypt_key))\n\n        if det < 0:\n            det = det % len(self.key_string)\n        det_inv = None\n        for i in range(len(self.key_string)):\n            if (det * i) % len(self.key_string) == 1:\n                det_inv = i\n                break\n\n        inv_key = (\n            det_inv * np.linalg.det(self.encrypt_key) * np.linalg.inv(self.encrypt_key)\n        )\n\n        return self.to_int(self.modulus(inv_key))\n\n    def decrypt(self, text: str) -> str:\n        \"\"\"\n        >>> hill_cipher = HillCipher(np.array([[2, 5], [1, 6]]))\n        >>> hill_cipher.decrypt('WHXYJOLM9C6XT085LL')\n        'TESTINGHILLCIPHERR'\n        >>> hill_cipher.decrypt('85FF00')\n        'HELLOO'\n        \"\"\"\n        decrypt_key = self.make_decrypt_key()\n        text = self.process_text(text.upper())\n        decrypted = \"\"\n\n        for i in range(0, len(text) - self.break_key + 1, self.break_key):\n            batch = text[i : i + self.break_key]\n            vec = [self.replace_letters(char) for char in batch]\n            batch_vec = np.array([vec]).T\n            batch_decrypted = self.modulus(decrypt_key.dot(batch_vec)).T.tolist()[0]\n            decrypted_batch = \"\".join(\n                self.replace_digits(num) for num in batch_decrypted\n            )\n            decrypted += decrypted_batch\n\n        return decrypted\n\n\ndef main() -> None:\n    n = int(input(\"Enter the order of the encryption key: \"))\n    hill_matrix = []\n\n    print(\"Enter each row of the encryption key with space separated integers\")\n    for _ in range(n):\n        row = [int(x) for x in input().split()]\n        hill_matrix.append(row)\n\n    hc = HillCipher(np.array(hill_matrix))\n\n    print(\"Would you like to encrypt or decrypt some text? (1 or 2)\")\n    option = input(\"\\n1. Encrypt\\n2. Decrypt\\n\")\n    if option == \"1\":\n        text_e = input(\"What text would you like to encrypt?: \")\n        print(\"Your encrypted text is:\")\n        print(hc.encrypt(text_e))\n    elif option == \"2\":\n        text_d = input(\"What text would you like to decrypt?: \")\n        print(\"Your decrypted text is:\")\n        print(hc.decrypt(text_d))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    main()\n"
  },
  {
    "path": "ciphers/mixed_keyword_cypher.py",
    "content": "from string import ascii_uppercase\n\n\ndef mixed_keyword(\n    keyword: str, plaintext: str, verbose: bool = False, alphabet: str = ascii_uppercase\n) -> str:\n    \"\"\"\n    For keyword: hello\n\n    H E L O\n    A B C D\n    F G I J\n    K M N P\n    Q R S T\n    U V W X\n    Y Z\n    and map vertically\n\n    >>> mixed_keyword(\"college\", \"UNIVERSITY\", True)  # doctest: +NORMALIZE_WHITESPACE\n    {'A': 'C', 'B': 'A', 'C': 'I', 'D': 'P', 'E': 'U', 'F': 'Z', 'G': 'O', 'H': 'B',\n     'I': 'J', 'J': 'Q', 'K': 'V', 'L': 'L', 'M': 'D', 'N': 'K', 'O': 'R', 'P': 'W',\n     'Q': 'E', 'R': 'F', 'S': 'M', 'T': 'S', 'U': 'X', 'V': 'G', 'W': 'H', 'X': 'N',\n     'Y': 'T', 'Z': 'Y'}\n    'XKJGUFMJST'\n\n    >>> mixed_keyword(\"college\", \"UNIVERSITY\", False)  # doctest: +NORMALIZE_WHITESPACE\n    'XKJGUFMJST'\n    \"\"\"\n    keyword = keyword.upper()\n    plaintext = plaintext.upper()\n    alphabet_set = set(alphabet)\n\n    # create a list of unique characters in the keyword - their order matters\n    # it determines how we will map plaintext characters to the ciphertext\n    unique_chars = []\n    for char in keyword:\n        if char in alphabet_set and char not in unique_chars:\n            unique_chars.append(char)\n    # the number of those unique characters will determine the number of rows\n    num_unique_chars_in_keyword = len(unique_chars)\n\n    # create a shifted version of the alphabet\n    shifted_alphabet = unique_chars + [\n        char for char in alphabet if char not in unique_chars\n    ]\n\n    # create a modified alphabet by splitting the shifted alphabet into rows\n    modified_alphabet = [\n        shifted_alphabet[k : k + num_unique_chars_in_keyword]\n        for k in range(0, 26, num_unique_chars_in_keyword)\n    ]\n\n    # map the alphabet characters to the modified alphabet characters\n    # going 'vertically' through the modified alphabet - consider columns first\n    mapping = {}\n    letter_index = 0\n    for column in range(num_unique_chars_in_keyword):\n        for row in modified_alphabet:\n            # if current row (the last one) is too short, break out of loop\n            if len(row) <= column:\n                break\n\n            # map current letter to letter in modified alphabet\n            mapping[alphabet[letter_index]] = row[column]\n            letter_index += 1\n\n    if verbose:\n        print(mapping)\n    # create the encrypted text by mapping the plaintext to the modified alphabet\n    return \"\".join(mapping.get(char, char) for char in plaintext)\n\n\nif __name__ == \"__main__\":\n    # example use\n    print(mixed_keyword(\"college\", \"UNIVERSITY\"))\n"
  },
  {
    "path": "ciphers/mono_alphabetic_ciphers.py",
    "content": "from typing import Literal\n\nLETTERS = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n\n\ndef translate_message(\n    key: str, message: str, mode: Literal[\"encrypt\", \"decrypt\"]\n) -> str:\n    \"\"\"\n    >>> translate_message(\"QWERTYUIOPASDFGHJKLZXCVBNM\",\"Hello World\",\"encrypt\")\n    'Pcssi Bidsm'\n    \"\"\"\n    chars_a = LETTERS if mode == \"decrypt\" else key\n    chars_b = key if mode == \"decrypt\" else LETTERS\n    translated = \"\"\n    # loop through each symbol in the message\n    for symbol in message:\n        if symbol.upper() in chars_a:\n            # encrypt/decrypt the symbol\n            sym_index = chars_a.find(symbol.upper())\n            if symbol.isupper():\n                translated += chars_b[sym_index].upper()\n            else:\n                translated += chars_b[sym_index].lower()\n        else:\n            # symbol is not in LETTERS, just add it\n            translated += symbol\n    return translated\n\n\ndef encrypt_message(key: str, message: str) -> str:\n    \"\"\"\n    >>> encrypt_message(\"QWERTYUIOPASDFGHJKLZXCVBNM\", \"Hello World\")\n    'Pcssi Bidsm'\n    \"\"\"\n    return translate_message(key, message, \"encrypt\")\n\n\ndef decrypt_message(key: str, message: str) -> str:\n    \"\"\"\n    >>> decrypt_message(\"QWERTYUIOPASDFGHJKLZXCVBNM\", \"Hello World\")\n    'Itssg Vgksr'\n    \"\"\"\n    return translate_message(key, message, \"decrypt\")\n\n\ndef main() -> None:\n    message = \"Hello World\"\n    key = \"QWERTYUIOPASDFGHJKLZXCVBNM\"\n    mode = \"decrypt\"  # set to 'encrypt' or 'decrypt'\n\n    if mode == \"encrypt\":\n        translated = encrypt_message(key, message)\n    elif mode == \"decrypt\":\n        translated = decrypt_message(key, message)\n    print(f\"Using the key {key}, the {mode}ed message is: {translated}\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    main()\n"
  },
  {
    "path": "ciphers/morse_code.py",
    "content": "#!/usr/bin/env python3\n\n\"\"\"\nPython program to translate to and from Morse code.\n\nhttps://en.wikipedia.org/wiki/Morse_code\n\"\"\"\n\n# fmt: off\nMORSE_CODE_DICT = {\n    \"A\": \".-\", \"B\": \"-...\", \"C\": \"-.-.\", \"D\": \"-..\", \"E\": \".\", \"F\": \"..-.\", \"G\": \"--.\",\n    \"H\": \"....\", \"I\": \"..\", \"J\": \".---\", \"K\": \"-.-\", \"L\": \".-..\", \"M\": \"--\", \"N\": \"-.\",\n    \"O\": \"---\", \"P\": \".--.\", \"Q\": \"--.-\", \"R\": \".-.\", \"S\": \"...\", \"T\": \"-\", \"U\": \"..-\",\n    \"V\": \"...-\", \"W\": \".--\", \"X\": \"-..-\", \"Y\": \"-.--\", \"Z\": \"--..\", \"1\": \".----\",\n    \"2\": \"..---\", \"3\": \"...--\", \"4\": \"....-\", \"5\": \".....\", \"6\": \"-....\", \"7\": \"--...\",\n    \"8\": \"---..\", \"9\": \"----.\", \"0\": \"-----\", \"&\": \".-...\", \"@\": \".--.-.\",\n    \":\": \"---...\", \",\": \"--..--\", \".\": \".-.-.-\", \"'\": \".----.\", '\"': \".-..-.\",\n    \"?\": \"..--..\", \"/\": \"-..-.\", \"=\": \"-...-\", \"+\": \".-.-.\", \"-\": \"-....-\",\n    \"(\": \"-.--.\", \")\": \"-.--.-\", \"!\": \"-.-.--\", \" \": \"/\"\n}  # Exclamation mark is not in ITU-R recommendation\n# fmt: on\nREVERSE_DICT = {value: key for key, value in MORSE_CODE_DICT.items()}\n\n\ndef encrypt(message: str) -> str:\n    \"\"\"\n    >>> encrypt(\"Sos!\")\n    '... --- ... -.-.--'\n    >>> encrypt(\"SOS!\") == encrypt(\"sos!\")\n    True\n    \"\"\"\n    return \" \".join(MORSE_CODE_DICT[char] for char in message.upper())\n\n\ndef decrypt(message: str) -> str:\n    \"\"\"\n    >>> decrypt('... --- ... -.-.--')\n    'SOS!'\n    \"\"\"\n    return \"\".join(REVERSE_DICT[char] for char in message.split())\n\n\ndef main() -> None:\n    \"\"\"\n    >>> s = \"\".join(MORSE_CODE_DICT)\n    >>> decrypt(encrypt(s)) == s\n    True\n    \"\"\"\n    message = \"Morse code here!\"\n    print(message)\n    message = encrypt(message)\n    print(message)\n    message = decrypt(message)\n    print(message)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "ciphers/onepad_cipher.py",
    "content": "import random\n\n\nclass Onepad:\n    @staticmethod\n    def encrypt(text: str) -> tuple[list[int], list[int]]:\n        \"\"\"\n        Function to encrypt text using pseudo-random numbers\n        >>> Onepad().encrypt(\"\")\n        ([], [])\n        >>> Onepad().encrypt([])\n        ([], [])\n        >>> random.seed(1)\n        >>> Onepad().encrypt(\" \")\n        ([6969], [69])\n        >>> random.seed(1)\n        >>> Onepad().encrypt(\"Hello\")\n        ([9729, 114756, 4653, 31309, 10492], [69, 292, 33, 131, 61])\n        >>> Onepad().encrypt(1)\n        Traceback (most recent call last):\n        ...\n        TypeError: 'int' object is not iterable\n        >>> Onepad().encrypt(1.1)\n        Traceback (most recent call last):\n        ...\n        TypeError: 'float' object is not iterable\n        \"\"\"\n        plain = [ord(i) for i in text]\n        key = []\n        cipher = []\n        for i in plain:\n            k = random.randint(1, 300)\n            c = (i + k) * k\n            cipher.append(c)\n            key.append(k)\n        return cipher, key\n\n    @staticmethod\n    def decrypt(cipher: list[int], key: list[int]) -> str:\n        \"\"\"\n        Function to decrypt text using pseudo-random numbers.\n        >>> Onepad().decrypt([], [])\n        ''\n        >>> Onepad().decrypt([35], [])\n        ''\n        >>> Onepad().decrypt([], [35])\n        Traceback (most recent call last):\n        ...\n        IndexError: list index out of range\n        >>> random.seed(1)\n        >>> Onepad().decrypt([9729, 114756, 4653, 31309, 10492], [69, 292, 33, 131, 61])\n        'Hello'\n        \"\"\"\n        plain = []\n        for i in range(len(key)):\n            p = int((cipher[i] - (key[i]) ** 2) / key[i])\n            plain.append(chr(p))\n        return \"\".join(plain)\n\n\nif __name__ == \"__main__\":\n    c, k = Onepad().encrypt(\"Hello\")\n    print(c, k)\n    print(Onepad().decrypt(c, k))\n"
  },
  {
    "path": "ciphers/permutation_cipher.py",
    "content": "\"\"\"\nThe permutation cipher, also called the transposition cipher, is a simple encryption\ntechnique that rearranges the characters in a message based on a secret key. It\ndivides the message into blocks and applies a permutation to the characters within\neach block according to the key. The key is a sequence of unique integers that\ndetermine the order of character rearrangement.\n\nFor more info: https://www.nku.edu/~christensen/1402%20permutation%20ciphers.pdf\n\"\"\"\n\nimport random\n\n\ndef generate_valid_block_size(message_length: int) -> int:\n    \"\"\"\n    Generate a valid block size that is a factor of the message length.\n\n    Args:\n        message_length (int): The length of the message.\n\n    Returns:\n        int: A valid block size.\n\n    Example:\n        >>> random.seed(1)\n        >>> generate_valid_block_size(12)\n        3\n    \"\"\"\n    block_sizes = [\n        block_size\n        for block_size in range(2, message_length + 1)\n        if message_length % block_size == 0\n    ]\n    return random.choice(block_sizes)\n\n\ndef generate_permutation_key(block_size: int) -> list[int]:\n    \"\"\"\n    Generate a random permutation key of a specified block size.\n\n    Args:\n        block_size (int): The size of each permutation block.\n\n    Returns:\n        list[int]: A list containing a random permutation of digits.\n\n    Example:\n        >>> random.seed(0)\n        >>> generate_permutation_key(4)\n        [2, 0, 1, 3]\n    \"\"\"\n    digits = list(range(block_size))\n    random.shuffle(digits)\n    return digits\n\n\ndef encrypt(\n    message: str, key: list[int] | None = None, block_size: int | None = None\n) -> tuple[str, list[int]]:\n    \"\"\"\n    Encrypt a message using a permutation cipher with block rearrangement using a key.\n\n    Args:\n        message (str): The plaintext message to be encrypted.\n        key (list[int]): The permutation key for decryption.\n        block_size (int): The size of each permutation block.\n\n    Returns:\n        tuple: A tuple containing the encrypted message and the encryption key.\n\n    Example:\n        >>> encrypted_message, key = encrypt(\"HELLO WORLD\")\n        >>> decrypted_message = decrypt(encrypted_message, key)\n        >>> decrypted_message\n        'HELLO WORLD'\n    \"\"\"\n    message = message.upper()\n    message_length = len(message)\n\n    if key is None or block_size is None:\n        block_size = generate_valid_block_size(message_length)\n        key = generate_permutation_key(block_size)\n\n    encrypted_message = \"\"\n\n    for i in range(0, message_length, block_size):\n        block = message[i : i + block_size]\n        rearranged_block = [block[digit] for digit in key]\n        encrypted_message += \"\".join(rearranged_block)\n\n    return encrypted_message, key\n\n\ndef decrypt(encrypted_message: str, key: list[int]) -> str:\n    \"\"\"\n    Decrypt an encrypted message using a permutation cipher with block rearrangement.\n\n    Args:\n        encrypted_message (str): The encrypted message.\n        key (list[int]): The permutation key for decryption.\n\n    Returns:\n        str: The decrypted plaintext message.\n\n    Example:\n        >>> encrypted_message, key = encrypt(\"HELLO WORLD\")\n        >>> decrypted_message = decrypt(encrypted_message, key)\n        >>> decrypted_message\n        'HELLO WORLD'\n    \"\"\"\n    key_length = len(key)\n    decrypted_message = \"\"\n\n    for i in range(0, len(encrypted_message), key_length):\n        block = encrypted_message[i : i + key_length]\n        original_block = [\"\"] * key_length\n        for j, digit in enumerate(key):\n            original_block[digit] = block[j]\n        decrypted_message += \"\".join(original_block)\n\n    return decrypted_message\n\n\ndef main() -> None:\n    \"\"\"\n    Driver function to pass message to get encrypted, then decrypted.\n\n    Example:\n    >>> main()\n    Decrypted message: HELLO WORLD\n    \"\"\"\n    message = \"HELLO WORLD\"\n    encrypted_message, key = encrypt(message)\n\n    decrypted_message = decrypt(encrypted_message, key)\n    print(f\"Decrypted message: {decrypted_message}\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    main()\n"
  },
  {
    "path": "ciphers/playfair_cipher.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/Playfair_cipher#Description\n\nThe Playfair cipher was developed by Charles Wheatstone in 1854\nIt's use was heavily promotedby Lord Playfair, hence its name\n\nSome features of the Playfair cipher are:\n\n1) It was the first literal diagram substitution cipher\n2) It is a manual symmetric encryption technique\n3) It is a multiple letter encryption cipher\n\nThe implementation in the code below encodes alphabets only.\nIt removes spaces, special characters and numbers from the\ncode.\n\nPlayfair is no longer used by military forces because of known\ninsecurities and of the advent of automated encryption devices.\nThis cipher is regarded as insecure since before World War I.\n\"\"\"\n\nimport itertools\nimport string\nfrom collections.abc import Generator, Iterable\n\n\ndef chunker(seq: Iterable[str], size: int) -> Generator[tuple[str, ...]]:\n    it = iter(seq)\n    while True:\n        chunk = tuple(itertools.islice(it, size))\n        if not chunk:\n            return\n        yield chunk\n\n\ndef prepare_input(dirty: str) -> str:\n    \"\"\"\n    Prepare the plaintext by up-casing it\n    and separating repeated letters with X's\n    \"\"\"\n\n    dirty = \"\".join([c.upper() for c in dirty if c in string.ascii_letters])\n    clean = \"\"\n\n    if len(dirty) < 2:\n        return dirty\n\n    for i in range(len(dirty) - 1):\n        clean += dirty[i]\n\n        if dirty[i] == dirty[i + 1]:\n            clean += \"X\"\n\n    clean += dirty[-1]\n\n    if len(clean) & 1:\n        clean += \"X\"\n\n    return clean\n\n\ndef generate_table(key: str) -> list[str]:\n    # I and J are used interchangeably to allow\n    # us to use a 5x5 table (25 letters)\n    alphabet = \"ABCDEFGHIKLMNOPQRSTUVWXYZ\"\n    # we're using a list instead of a '2d' array because it makes the math\n    # for setting up the table and doing the actual encoding/decoding simpler\n    table = []\n\n    # copy key chars into the table if they are in `alphabet` ignoring duplicates\n    for char in key.upper():\n        if char not in table and char in alphabet:\n            table.append(char)\n\n    # fill the rest of the table in with the remaining alphabet chars\n    for char in alphabet:\n        if char not in table:\n            table.append(char)\n\n    return table\n\n\ndef encode(plaintext: str, key: str) -> str:\n    \"\"\"\n    Encode the given plaintext using the Playfair cipher.\n    Takes the plaintext and the key as input and returns the encoded string.\n\n    >>> encode(\"Hello\", \"MONARCHY\")\n    'CFSUPM'\n    >>> encode(\"attack on the left flank\", \"EMERGENCY\")\n    'DQZSBYFSDZFMFNLOHFDRSG'\n    >>> encode(\"Sorry!\", \"SPECIAL\")\n    'AVXETX'\n    >>> encode(\"Number 1\", \"NUMBER\")\n    'UMBENF'\n    >>> encode(\"Photosynthesis!\", \"THE SUN\")\n    'OEMHQHVCHESUKE'\n    \"\"\"\n\n    table = generate_table(key)\n    plaintext = prepare_input(plaintext)\n    ciphertext = \"\"\n\n    for char1, char2 in chunker(plaintext, 2):\n        row1, col1 = divmod(table.index(char1), 5)\n        row2, col2 = divmod(table.index(char2), 5)\n\n        if row1 == row2:\n            ciphertext += table[row1 * 5 + (col1 + 1) % 5]\n            ciphertext += table[row2 * 5 + (col2 + 1) % 5]\n        elif col1 == col2:\n            ciphertext += table[((row1 + 1) % 5) * 5 + col1]\n            ciphertext += table[((row2 + 1) % 5) * 5 + col2]\n        else:  # rectangle\n            ciphertext += table[row1 * 5 + col2]\n            ciphertext += table[row2 * 5 + col1]\n\n    return ciphertext\n\n\ndef decode(ciphertext: str, key: str) -> str:\n    \"\"\"\n    Decode the input string using the provided key.\n\n    >>> decode(\"BMZFAZRZDH\", \"HAZARD\")\n    'FIREHAZARD'\n    >>> decode(\"HNBWBPQT\", \"AUTOMOBILE\")\n    'DRIVINGX'\n    >>> decode(\"SLYSSAQS\", \"CASTLE\")\n    'ATXTACKX'\n    \"\"\"\n\n    table = generate_table(key)\n    plaintext = \"\"\n\n    for char1, char2 in chunker(ciphertext, 2):\n        row1, col1 = divmod(table.index(char1), 5)\n        row2, col2 = divmod(table.index(char2), 5)\n\n        if row1 == row2:\n            plaintext += table[row1 * 5 + (col1 - 1) % 5]\n            plaintext += table[row2 * 5 + (col2 - 1) % 5]\n        elif col1 == col2:\n            plaintext += table[((row1 - 1) % 5) * 5 + col1]\n            plaintext += table[((row2 - 1) % 5) * 5 + col2]\n        else:  # rectangle\n            plaintext += table[row1 * 5 + col2]\n            plaintext += table[row2 * 5 + col1]\n\n    return plaintext\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    print(\"Encoded:\", encode(\"BYE AND THANKS\", \"GREETING\"))\n    print(\"Decoded:\", decode(\"CXRBANRLBALQ\", \"GREETING\"))\n"
  },
  {
    "path": "ciphers/polybius.py",
    "content": "#!/usr/bin/env python3\n\n\"\"\"\nA Polybius Square is a table that allows someone to translate letters into numbers.\n\nhttps://www.braingle.com/brainteasers/codes/polybius.php\n\"\"\"\n\nimport numpy as np\n\nSQUARE = [\n    [\"a\", \"b\", \"c\", \"d\", \"e\"],\n    [\"f\", \"g\", \"h\", \"i\", \"k\"],\n    [\"l\", \"m\", \"n\", \"o\", \"p\"],\n    [\"q\", \"r\", \"s\", \"t\", \"u\"],\n    [\"v\", \"w\", \"x\", \"y\", \"z\"],\n]\n\n\nclass PolybiusCipher:\n    def __init__(self) -> None:\n        self.SQUARE = np.array(SQUARE)\n\n    def letter_to_numbers(self, letter: str) -> np.ndarray:\n        \"\"\"\n        Return the pair of numbers that represents the given letter in the\n        polybius square\n        >>> np.array_equal(PolybiusCipher().letter_to_numbers('a'), [1,1])\n        True\n\n        >>> np.array_equal(PolybiusCipher().letter_to_numbers('u'), [4,5])\n        True\n        \"\"\"\n        index1, index2 = np.where(letter == self.SQUARE)\n        indexes = np.concatenate([index1 + 1, index2 + 1])\n        return indexes\n\n    def numbers_to_letter(self, index1: int, index2: int) -> str:\n        \"\"\"\n        Return the letter corresponding to the position [index1, index2] in\n        the polybius square\n\n        >>> PolybiusCipher().numbers_to_letter(4, 5) == \"u\"\n        True\n\n        >>> PolybiusCipher().numbers_to_letter(1, 1) == \"a\"\n        True\n        \"\"\"\n        return self.SQUARE[index1 - 1, index2 - 1]\n\n    def encode(self, message: str) -> str:\n        \"\"\"\n        Return the encoded version of message according to the polybius cipher\n\n        >>> PolybiusCipher().encode(\"test message\") == \"44154344 32154343112215\"\n        True\n\n        >>> PolybiusCipher().encode(\"Test Message\") == \"44154344 32154343112215\"\n        True\n        \"\"\"\n        message = message.lower()\n        message = message.replace(\"j\", \"i\")\n\n        encoded_message = \"\"\n        for letter_index in range(len(message)):\n            if message[letter_index] != \" \":\n                numbers = self.letter_to_numbers(message[letter_index])\n                encoded_message = encoded_message + str(numbers[0]) + str(numbers[1])\n            elif message[letter_index] == \" \":\n                encoded_message = encoded_message + \" \"\n\n        return encoded_message\n\n    def decode(self, message: str) -> str:\n        \"\"\"\n        Return the decoded version of message according to the polybius cipher\n\n        >>> PolybiusCipher().decode(\"44154344 32154343112215\") == \"test message\"\n        True\n\n        >>> PolybiusCipher().decode(\"4415434432154343112215\") == \"testmessage\"\n        True\n        \"\"\"\n        message = message.replace(\" \", \"  \")\n        decoded_message = \"\"\n        for numbers_index in range(int(len(message) / 2)):\n            if message[numbers_index * 2] != \" \":\n                index1 = message[numbers_index * 2]\n                index2 = message[numbers_index * 2 + 1]\n\n                letter = self.numbers_to_letter(int(index1), int(index2))\n                decoded_message = decoded_message + letter\n            elif message[numbers_index * 2] == \" \":\n                decoded_message = decoded_message + \" \"\n\n        return decoded_message\n"
  },
  {
    "path": "ciphers/porta_cipher.py",
    "content": "alphabet = {\n    \"A\": (\"ABCDEFGHIJKLM\", \"NOPQRSTUVWXYZ\"),\n    \"B\": (\"ABCDEFGHIJKLM\", \"NOPQRSTUVWXYZ\"),\n    \"C\": (\"ABCDEFGHIJKLM\", \"ZNOPQRSTUVWXY\"),\n    \"D\": (\"ABCDEFGHIJKLM\", \"ZNOPQRSTUVWXY\"),\n    \"E\": (\"ABCDEFGHIJKLM\", \"YZNOPQRSTUVWX\"),\n    \"F\": (\"ABCDEFGHIJKLM\", \"YZNOPQRSTUVWX\"),\n    \"G\": (\"ABCDEFGHIJKLM\", \"XYZNOPQRSTUVW\"),\n    \"H\": (\"ABCDEFGHIJKLM\", \"XYZNOPQRSTUVW\"),\n    \"I\": (\"ABCDEFGHIJKLM\", \"WXYZNOPQRSTUV\"),\n    \"J\": (\"ABCDEFGHIJKLM\", \"WXYZNOPQRSTUV\"),\n    \"K\": (\"ABCDEFGHIJKLM\", \"VWXYZNOPQRSTU\"),\n    \"L\": (\"ABCDEFGHIJKLM\", \"VWXYZNOPQRSTU\"),\n    \"M\": (\"ABCDEFGHIJKLM\", \"UVWXYZNOPQRST\"),\n    \"N\": (\"ABCDEFGHIJKLM\", \"UVWXYZNOPQRST\"),\n    \"O\": (\"ABCDEFGHIJKLM\", \"TUVWXYZNOPQRS\"),\n    \"P\": (\"ABCDEFGHIJKLM\", \"TUVWXYZNOPQRS\"),\n    \"Q\": (\"ABCDEFGHIJKLM\", \"STUVWXYZNOPQR\"),\n    \"R\": (\"ABCDEFGHIJKLM\", \"STUVWXYZNOPQR\"),\n    \"S\": (\"ABCDEFGHIJKLM\", \"RSTUVWXYZNOPQ\"),\n    \"T\": (\"ABCDEFGHIJKLM\", \"RSTUVWXYZNOPQ\"),\n    \"U\": (\"ABCDEFGHIJKLM\", \"QRSTUVWXYZNOP\"),\n    \"V\": (\"ABCDEFGHIJKLM\", \"QRSTUVWXYZNOP\"),\n    \"W\": (\"ABCDEFGHIJKLM\", \"PQRSTUVWXYZNO\"),\n    \"X\": (\"ABCDEFGHIJKLM\", \"PQRSTUVWXYZNO\"),\n    \"Y\": (\"ABCDEFGHIJKLM\", \"OPQRSTUVWXYZN\"),\n    \"Z\": (\"ABCDEFGHIJKLM\", \"OPQRSTUVWXYZN\"),\n}\n\n\ndef generate_table(key: str) -> list[tuple[str, str]]:\n    \"\"\"\n    >>> generate_table('marvin')  # doctest: +NORMALIZE_WHITESPACE\n    [('ABCDEFGHIJKLM', 'UVWXYZNOPQRST'), ('ABCDEFGHIJKLM', 'NOPQRSTUVWXYZ'),\n     ('ABCDEFGHIJKLM', 'STUVWXYZNOPQR'), ('ABCDEFGHIJKLM', 'QRSTUVWXYZNOP'),\n     ('ABCDEFGHIJKLM', 'WXYZNOPQRSTUV'), ('ABCDEFGHIJKLM', 'UVWXYZNOPQRST')]\n    \"\"\"\n    return [alphabet[char] for char in key.upper()]\n\n\ndef encrypt(key: str, words: str) -> str:\n    \"\"\"\n    >>> encrypt('marvin', 'jessica')\n    'QRACRWU'\n    \"\"\"\n    cipher = \"\"\n    count = 0\n    table = generate_table(key)\n    for char in words.upper():\n        cipher += get_opponent(table[count], char)\n        count = (count + 1) % len(table)\n    return cipher\n\n\ndef decrypt(key: str, words: str) -> str:\n    \"\"\"\n    >>> decrypt('marvin', 'QRACRWU')\n    'JESSICA'\n    \"\"\"\n    return encrypt(key, words)\n\n\ndef get_position(table: tuple[str, str], char: str) -> tuple[int, int]:\n    \"\"\"\n    >>> get_position(generate_table('marvin')[0], 'M')\n    (0, 12)\n    \"\"\"\n    # `char` is either in the 0th row or the 1st row\n    row = 0 if char in table[0] else 1\n    col = table[row].index(char)\n    return row, col\n\n\ndef get_opponent(table: tuple[str, str], char: str) -> str:\n    \"\"\"\n    >>> get_opponent(generate_table('marvin')[0], 'M')\n    'T'\n    \"\"\"\n    row, col = get_position(table, char.upper())\n    if row == 1:\n        return table[0][col]\n    else:\n        return table[1][col] if row == 0 else char\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()  # Fist ensure that all our tests are passing...\n    \"\"\"\n    Demo:\n\n    Enter key: marvin\n    Enter text to encrypt: jessica\n    Encrypted: QRACRWU\n    Decrypted with key: JESSICA\n    \"\"\"\n    key = input(\"Enter key: \").strip()\n    text = input(\"Enter text to encrypt: \").strip()\n    cipher_text = encrypt(key, text)\n\n    print(f\"Encrypted: {cipher_text}\")\n    print(f\"Decrypted with key: {decrypt(key, cipher_text)}\")\n"
  },
  {
    "path": "ciphers/prehistoric_men.txt",
    "content": "The Project Gutenberg eBook, Prehistoric Men, by Robert J. (Robert John)\nBraidwood, Illustrated by Susan T. Richert\n\n\nThis eBook is for the use of anyone anywhere in the United States and most\nother parts of the world at no cost and with almost no restrictions\nwhatsoever.  You may copy it, give it away or re-use it under the terms of\nthe Project Gutenberg License included with this eBook or online at\nwww.gutenberg.org.  If you are not located in the United States, you'll have\nto check the laws of the country where you are located before using this ebook.\n\n\nTitle: Prehistoric Men\nAuthor: Robert J. (Robert John) Braidwood\nRelease Date: July 28, 2016  [eBook #52664]\nLanguage: English\nCharacter set encoding: UTF-8\n\n\n***START OF THE PROJECT GUTENBERG EBOOK PREHISTORIC MEN***\n\n\nE-text prepared by Stephen Hutcheson, Dave Morgan, Charlie Howard, and the\nOnline Distributed Proofreading Team (http://www.pgdp.net)\n\n\n\nNote: Project Gutenberg also has an HTML version of this\n      file which includes the original illustrations.\n      See 52664-h.htm or 52664-h.zip:\n      (http://www.gutenberg.org/files/52664/52664-h/52664-h.htm)\n      or\n      (http://www.gutenberg.org/files/52664/52664-h.zip)\n\n\nTranscriber's note:\n\n      Some characters might not display in this UTF-8 text\n      version. If so, the reader should consult the HTML\n      version referred to above. One example of this might\n      occur in the second paragraph under \"Choppers and\n      Adze-like Tools\", page 46, which contains the phrase\n      �an adze cutting edge is ? shaped�. The symbol before\n      �shaped� looks like a sharply-italicized sans-serif �L�.\n      Devices that cannot display that symbol may substitute\n      a question mark, a square, or other symbol.\n\n\nPREHISTORIC MEN\n\nby\n\nROBERT J. BRAIDWOOD\n\nResearch Associate, Old World Prehistory\n\nProfessor\nOriental Institute and Department of Anthropology\nUniversity of Chicago\n\nDrawings by Susan T. Richert\n\n\n[Illustration]\n\nChicago Natural History Museum\nPopular Series\nAnthropology, Number 37\n\nThird Edition Issued in Co-operation with\nThe Oriental Institute, The University of Chicago\n\nEdited by Lillian A. Ross\n\nPrinted in the United States of America\nby Chicago Natural History Museum Press\n\nCopyright 1948, 1951, and 1957 by Chicago Natural History Museum\n\nFirst edition 1948\nSecond edition 1951\nThird edition 1957\nFourth edition 1959\n\n\nPreface\n\n[Illustration]\n\n\nLike the writing of most professional archeologists, mine has been\nconfined to so-called learned papers. Good, bad, or indifferent, these\npapers were in a jargon that only my colleagues and a few advanced\nstudents could understand. Hence, when I was asked to do this little\nbook, I soon found it extremely difficult to say what I meant in simple\nfashion. The style is new to me, but I hope the reader will not find it\nforced or pedantic; at least I have done my very best to tell the story\nsimply and clearly.\n\nMany friends have aided in the preparation of the book. The whimsical\ncharm of Miss Susan Richert�s illustrations add enormously to the\nspirit I wanted. She gave freely of her own time on the drawings and\nin planning the book with me. My colleagues at the University of\nChicago, especially Professor Wilton M. Krogman (now of the University\nof Pennsylvania), and also Mrs. Linda Braidwood, Associate of the\nOriental Institute, and Professors Fay-Cooper Cole and Sol Tax, of\nthe Department of Anthropology, gave me counsel in matters bearing on\ntheir special fields, and the Department of Anthropology bore some of\nthe expense of the illustrations. From Mrs. Irma Hunter and Mr. Arnold\nMaremont, who are not archeologists at all and have only an intelligent\nlayman�s notion of archeology, I had sound advice on how best to tell\nthe story. I am deeply indebted to all these friends.\n\nWhile I was preparing the second edition, I had the great fortune\nto be able to rework the third chapter with Professor Sherwood L.\nWashburn, now of the Department of Anthropology of the University of\nCalifornia, and the fourth, fifth, and sixth chapters with Professor\nHallum L. Movius, Jr., of the Peabody Museum, Harvard University. The\nbook has gained greatly in accuracy thereby. In matters of dating,\nProfessor Movius and the indications of Professor W. F. Libby�s Carbon\n14 chronology project have both encouraged me to choose the lowest\ndates now current for the events of the Pleistocene Ice Age. There is\nstill no certain way of fixing a direct chronology for most of the\nPleistocene, but Professor Libby�s method appears very promising for\nits end range and for proto-historic dates. In any case, this book\nnames �periods,� and new dates may be written in against mine, if new\nand better dating systems appear.\n\nI wish to thank Dr. Clifford C. Gregg, Director of Chicago Natural\nHistory Museum, for the opportunity to publish this book. My old\nfriend, Dr. Paul S. Martin, Chief Curator in the Department of\nAnthropology, asked me to undertake the job and inspired me to complete\nit. I am also indebted to Miss Lillian A. Ross, Associate Editor of\nScientific Publications, and to Mr. George I. Quimby, Curator of\nExhibits in Anthropology, for all the time they have given me in\ngetting the manuscript into proper shape.\n\n            ROBERT J. BRAIDWOOD\n  _June 15, 1950_\n\n\n\n\nPreface to the Third Edition\n\n\nIn preparing the enlarged third edition, many of the above mentioned\nfriends have again helped me. I have picked the brains of Professor F.\nClark Howell of the Department of Anthropology of the University of\nChicago in reworking the earlier chapters, and he was very patient in\nthe matter, which I sincerely appreciate.\n\nAll of Mrs. Susan Richert Allen�s original drawings appear, but a few\nnecessary corrections have been made in some of the charts and some new\ndrawings have been added by Mr. John Pfiffner, Staff Artist, Chicago\nNatural History Museum.\n\n            ROBERT J. BRAIDWOOD\n  _March 1, 1959_\n\n\n\n\nContents\n\n\n                                                       PAGE\n  How We Learn about Prehistoric Men                      7\n\n  The Changing World in Which Prehistoric Men Lived      17\n\n  Prehistoric Men Themselves                             22\n\n  Cultural Beginnings                                    38\n\n  More Evidence of Culture                               56\n\n  Early Moderns                                          70\n\n  End and Prelude                                        92\n\n  The First Revolution                                  121\n\n  The Conquest of Civilization                          144\n\n  End of Prehistory                                     162\n\n  Summary                                               176\n\n  List of Books                                         180\n\n  Index                                                 184\n\n\n\n\nHOW WE LEARN about Prehistoric Men\n\n[Illustration]\n\n\nPrehistory means the time before written history began. Actually, more\nthan 99 per cent of man�s story is prehistory. Man is at least half a\nmillion years old, but he did not begin to write history (or to write\nanything) until about 5,000 years ago.\n\nThe men who lived in prehistoric times left us no history books, but\nthey did unintentionally leave a record of their presence and their way\nof life. This record is studied and interpreted by different kinds of\nscientists.\n\n\nSCIENTISTS WHO FIND OUT ABOUT PREHISTORIC MEN\n\nThe scientists who study the bones and teeth and any other parts\nthey find of the bodies of prehistoric men, are called _physical\nanthropologists_. Physical anthropologists are trained, much like\ndoctors, to know all about the human body. They study living people,\ntoo; they know more about the biological facts of human �races� than\nanybody else. If the police find a badly decayed body in a trunk,\nthey ask a physical anthropologist to tell them what the person\noriginally looked like. The physical anthropologists who specialize in\nprehistoric men work with fossils, so they are sometimes called _human\npaleontologists_.\n\n\nARCHEOLOGISTS\n\nThere is a kind of scientist who studies the things that prehistoric\nmen made and did. Such a scientist is called an _archeologist_. It is\nthe archeologist�s business to look for the stone and metal tools, the\npottery, the graves, and the caves or huts of the men who lived before\nhistory began.\n\nBut there is more to archeology than just looking for things. In\nProfessor V. Gordon Childe�s words, archeology �furnishes a sort of\nhistory of human activity, provided always that the actions have\nproduced concrete results and left recognizable material traces.� You\nwill see that there are at least three points in what Childe says:\n\n  1. The archeologists have to find the traces of things left behind by\n     ancient man, and\n\n  2. Only a few objects may be found, for most of these were probably\n     too soft or too breakable to last through the years. However,\n\n  3. The archeologist must use whatever he can find to tell a story--to\n     make a �sort of history�--from the objects and living-places and\n     graves that have escaped destruction.\n\nWhat I mean is this: Let us say you are walking through a dump yard,\nand you find a rusty old spark plug. If you want to think about what\nthe spark plug means, you quickly remember that it is a part of an\nautomobile motor. This tells you something about the man who threw\nthe spark plug on the dump. He either had an automobile, or he knew\nor lived near someone who did. He can�t have lived so very long ago,\nyou�ll remember, because spark plugs and automobiles are only about\nsixty years old.\n\nWhen you think about the old spark plug in this way you have\njust been making the beginnings of what we call an archeological\n_interpretation_; you have been making the spark plug tell a story.\nIt is the same way with the man-made things we archeologists find\nand put in museums. Usually, only a few of these objects are pretty\nto look at; but each of them has some sort of story to tell. Making\nthe interpretation of his finds is the most important part of the\narcheologist�s job. It is the way he gets at the �sort of history of\nhuman activity� which is expected of archeology.\n\n\nSOME OTHER SCIENTISTS\n\nThere are many other scientists who help the archeologist and the\nphysical anthropologist find out about prehistoric men. The geologists\nhelp us tell the age of the rocks or caves or gravel beds in which\nhuman bones or man-made objects are found. There are other scientists\nwith names which all begin with �paleo� (the Greek word for �old�). The\n_paleontologists_ study fossil animals. There are also, for example,\nsuch scientists as _paleobotanists_ and _paleoclimatologists_, who\nstudy ancient plants and climates. These scientists help us to know\nthe kinds of animals and plants that were living in prehistoric times\nand so could be used for food by ancient man; what the weather was\nlike; and whether there were glaciers. Also, when I tell you that\nprehistoric men did not appear until long after the great dinosaurs had\ndisappeared, I go on the say-so of the paleontologists. They know that\nfossils of men and of dinosaurs are not found in the same geological\nperiod. The dinosaur fossils come in early periods, the fossils of men\nmuch later.\n\nSince World War II even the atomic scientists have been helping the\narcheologists. By testing the amount of radioactivity left in charcoal,\nwood, or other vegetable matter obtained from archeological sites, they\nhave been able to date the sites. Shell has been used also, and even\nthe hair of Egyptian mummies. The dates of geological and climatic\nevents have also been discovered. Some of this work has been done from\ndrillings taken from the bottom of the sea.\n\nThis dating by radioactivity has considerably shortened the dates which\nthe archeologists used to give. If you find that some of the dates\nI give here are more recent than the dates you see in other books\non prehistory, it is because I am using one of the new lower dating\nsystems.\n\n[Illustration: RADIOCARBON CHART\n\nThe rate of disappearance of radioactivity as time passes.[1]]\n\n  [1] It is important that the limitations of the radioactive carbon\n      �dating� system be held in mind. As the statistics involved in\n      the system are used, there are two chances in three that the\n      �date� of the sample falls within the range given as plus or\n      minus an added number of years. For example, the �date� for the\n      Jarmo village (see chart), given as 6750 � 200 B.C., really\n      means that there are only two chances in three that the real\n      date of the charcoal sampled fell between 6950 and 6550 B.C.\n      We have also begun to suspect that there are ways in which the\n      samples themselves may have become �contaminated,� either on\n      the early or on the late side. We now tend to be suspicious of\n      single radioactive carbon determinations, or of determinations\n      from one site alone. But as a fabric of consistent\n      determinations for several or more sites of one archeological\n      period, we gain confidence in the dates.\n\n\nHOW THE SCIENTISTS FIND OUT\n\nSo far, this chapter has been mainly about the people who find out\nabout prehistoric men. We also need a word about _how_ they find out.\n\nAll our finds came by accident until about a hundred years ago. Men\ndigging wells, or digging in caves for fertilizer, often turned up\nancient swords or pots or stone arrowheads. People also found some odd\npieces of stone that didn�t look like natural forms, but they also\ndidn�t look like any known tool. As a result, the people who found them\ngave them queer names; for example, �thunderbolts.� The people thought\nthe strange stones came to earth as bolts of lightning. We know now\nthat these strange stones were prehistoric stone tools.\n\nMany important finds still come to us by accident. In 1935, a British\ndentist, A. T. Marston, found the first of two fragments of a very\nimportant fossil human skull, in a gravel pit at Swanscombe, on the\nRiver Thames, England. He had to wait nine months, until the face of\nthe gravel pit had been dug eight yards farther back, before the second\nfragment appeared. They fitted! Then, twenty years later, still another\npiece appeared. In 1928 workmen who were blasting out rock for the\nbreakwater in the port of Haifa began to notice flint tools. Thus the\nstory of cave men on Mount Carmel, in Palestine, began to be known.\n\nPlanned archeological digging is only about a century old. Even before\nthis, however, a few men realized the significance of objects they dug\nfrom the ground; one of these early archeologists was our own Thomas\nJefferson. The first real mound-digger was a German grocer�s clerk,\nHeinrich Schliemann. Schliemann made a fortune as a merchant, first\nin Europe and then in the California gold-rush of 1849. He became an\nAmerican citizen. Then he retired and had both money and time to test\nan old idea of his. He believed that the heroes of ancient Troy and\nMycenae were once real Trojans and Greeks. He proved it by going to\nTurkey and Greece and digging up the remains of both cities.\n\nSchliemann had the great good fortune to find rich and spectacular\ntreasures, and he also had the common sense to keep notes and make\ndescriptions of what he found. He proved beyond doubt that many ancient\ncity mounds can be _stratified_. This means that there may be the\nremains of many towns in a mound, one above another, like layers in a\ncake.\n\nYou might like to have an idea of how mounds come to be in layers.\nThe original settlers may have chosen the spot because it had a good\nspring and there were good fertile lands nearby, or perhaps because\nit was close to some road or river or harbor. These settlers probably\nbuilt their town of stone and mud-brick. Finally, something would have\nhappened to the town--a flood, or a burning, or a raid by enemies--and\nthe walls of the houses would have fallen in or would have melted down\nas mud in the rain. Nothing would have remained but the mud and debris\nof a low mound of _one_ layer.\n\nThe second settlers would have wanted the spot for the same reasons\nthe first settlers did--good water, land, and roads. Also, the second\nsettlers would have found a nice low mound to build their houses on,\na protection from floods. But again, something would finally have\nhappened to the second town, and the walls of _its_ houses would have\ncome tumbling down. This makes the _second_ layer. And so on....\n\nIn Syria I once had the good fortune to dig on a large mound that had\nno less than fifteen layers. Also, most of the layers were thick, and\nthere were signs of rebuilding and repairs within each layer. The mound\nwas more than a hundred feet high. In each layer, the building material\nused had been a soft, unbaked mud-brick, and most of the debris\nconsisted of fallen or rain-melted mud from these mud-bricks.\n\nThis idea of _stratification_, like the cake layers, was already a\nfamiliar one to the geologists by Schliemann�s time. They could show\nthat their lowest layer of rock was oldest or earliest, and that the\noverlying layers became more recent as one moved upward. Schliemann�s\ndigging proved the same thing at Troy. His first (lowest and earliest)\ncity had at least nine layers above it; he thought that the second\nlayer contained the remains of Homer�s Troy. We now know that Homeric\nTroy was layer VIIa from the bottom; also, we count eleven layers or\nsub-layers in total.\n\nSchliemann�s work marks the beginnings of modern archeology. Scholars\nsoon set out to dig on ancient sites, from Egypt to Central America.\n\n\nARCHEOLOGICAL INFORMATION\n\nAs time went on, the study of archeological materials--found either\nby accident or by digging on purpose--began to show certain things.\nArcheologists began to get ideas as to the kinds of objects that\nbelonged together. If you compared a mail-order catalogue of 1890 with\none of today, you would see a lot of differences. If you really studied\nthe two catalogues hard, you would also begin to see that certain\nobjects �go together.� Horseshoes and metal buggy tires and pieces of\nharness would begin to fit into a picture with certain kinds of coal\nstoves and furniture and china dishes and kerosene lamps. Our friend\nthe spark plug, and radios and electric refrigerators and light bulbs\nwould fit into a picture with different kinds of furniture and dishes\nand tools. You won�t be old enough to remember the kind of hats that\nwomen wore in 1890, but you�ve probably seen pictures of them, and you\nknow very well they couldn�t be worn with the fashions of today.\n\nThis is one of the ways that archeologists study their materials.\nThe various tools and weapons and jewelry, the pottery, the kinds\nof houses, and even the ways of burying the dead tend to fit into\npictures. Some archeologists call all of the things that go together to\nmake such a picture an _assemblage_. The assemblage of the first layer\nof Schliemann�s Troy was as different from that of the seventh layer as\nour 1900 mail-order catalogue is from the one of today.\n\nThe archeologists who came after Schliemann began to notice other\nthings and to compare them with occurrences in modern times. The\nidea that people will buy better mousetraps goes back into very\nancient times. Today, if we make good automobiles or radios, we can\nsell some of them in Turkey or even in Timbuktu. This means that a\nfew present-day types of American automobiles and radios form part\nof present-day �assemblages� in both Turkey and Timbuktu. The total\npresent-day �assemblage� of Turkey is quite different from that of\nTimbuktu or that of America, but they have at least some automobiles\nand some radios in common.\n\nNow these automobiles and radios will eventually wear out. Let us\nsuppose we could go to some remote part of Turkey or to Timbuktu in a\ndream. We don�t know what the date is, in our dream, but we see all\nsorts of strange things and ways of living in both places. Nobody\ntells us what the date is. But suddenly we see a 1936 Ford; so we\nknow that in our dream it has to be at least the year 1936, and only\nas many years after that as we could reasonably expect a Ford to keep\nin running order. The Ford would probably break down in twenty years�\ntime, so the Turkish or Timbuktu �assemblage� we�re seeing in our dream\nhas to date at about A.D. 1936-56.\n\nArcheologists not only �date� their ancient materials in this way; they\nalso see over what distances and between which peoples trading was\ndone. It turns out that there was a good deal of trading in ancient\ntimes, probably all on a barter and exchange basis.\n\n\nEVERYTHING BEGINS TO FIT TOGETHER\n\nNow we need to pull these ideas all together and see the complicated\nstructure the archeologists can build with their materials.\n\nEven the earliest archeologists soon found that there was a very long\nrange of prehistoric time which would yield only very simple things.\nFor this very long early part of prehistory, there was little to be\nfound but the flint tools which wandering, hunting and gathering\npeople made, and the bones of the wild animals they ate. Toward the\nend of prehistoric time there was a general settling down with the\ncoming of agriculture, and all sorts of new things began to be made.\nArcheologists soon got a general notion of what ought to appear with\nwhat. Thus, it would upset a French prehistorian digging at the bottom\nof a very early cave if he found a fine bronze sword, just as much as\nit would upset him if he found a beer bottle. The people of his very\nearly cave layer simply could not have made bronze swords, which came\nlater, just as do beer bottles. Some accidental disturbance of the\nlayers of his cave must have happened.\n\nWith any luck, archeologists do their digging in a layered, stratified\nsite. They find the remains of everything that would last through\ntime, in several different layers. They know that the assemblage in\nthe bottom layer was laid down earlier than the assemblage in the next\nlayer above, and so on up to the topmost layer, which is the latest.\nThey look at the results of other �digs� and find that some other\narcheologist 900 miles away has found ax-heads in his lowest layer,\nexactly like the ax-heads of their fifth layer. This means that their\nfifth layer must have been lived in at about the same time as was the\nfirst layer in the site 200 miles away. It also may mean that the\npeople who lived in the two layers knew and traded with each other. Or\nit could mean that they didn�t necessarily know each other, but simply\nthat both traded with a third group at about the same time.\n\nYou can see that the more we dig and find, the more clearly the main\nfacts begin to stand out. We begin to be more sure of which people\nlived at the same time, which earlier and which later. We begin to\nknow who traded with whom, and which peoples seemed to live off by\nthemselves. We begin to find enough skeletons in burials so that the\nphysical anthropologists can tell us what the people looked like. We\nget animal bones, and a paleontologist may tell us they are all bones\nof wild animals; or he may tell us that some or most of the bones are\nthose of domesticated animals, for instance, sheep or cattle, and\ntherefore the people must have kept herds.\n\nMore important than anything else--as our structure grows more\ncomplicated and our materials increase--is the fact that �a sort\nof history of human activity� does begin to appear. The habits or\ntraditions that men formed in the making of their tools and in the\nways they did things, begin to stand out for us. How characteristic\nwere these habits and traditions? What areas did they spread over?\nHow long did they last? We watch the different tools and the traces\nof the way things were done--how the burials were arranged, what\nthe living-places were like, and so on. We wonder about the people\nthemselves, for the traces of habits and traditions are useful to us\nonly as clues to the men who once had them. So we ask the physical\nanthropologists about the skeletons that we found in the burials. The\nphysical anthropologists tell us about the anatomy and the similarities\nand differences which the skeletons show when compared with other\nskeletons. The physical anthropologists are even working on a\nmethod--chemical tests of the bones--that will enable them to discover\nwhat the blood-type may have been. One thing is sure. We have never\nfound a group of skeletons so absolutely similar among themselves--so\ncast from a single mould, so to speak--that we could claim to have a\n�pure� race. I am sure we never shall.\n\nWe become particularly interested in any signs of change--when new\nmaterials and tool types and ways of doing things replace old ones. We\nwatch for signs of social change and progress in one way or another.\n\nWe must do all this without one word of written history to aid us.\nEverything we are concerned with goes back to the time _before_ men\nlearned to write. That is the prehistorian�s job--to find out what\nhappened before history began.\n\n\n\n\nTHE CHANGING WORLD in which Prehistoric Men Lived\n\n[Illustration]\n\n\nMankind, we�ll say, is at least a half million years old. It is very\nhard to understand how long a time half a million years really is.\nIf we were to compare this whole length of time to one day, we�d get\nsomething like this: The present time is midnight, and Jesus was\nborn just five minutes and thirty-six seconds ago. Earliest history\nbegan less than fifteen minutes ago. Everything before 11:45 was in\nprehistoric time.\n\nOr maybe we can grasp the length of time better in terms of\ngenerations. As you know, primitive peoples tend to marry and have\nchildren rather early in life. So suppose we say that twenty years\nwill make an average generation. At this rate there would be 25,000\ngenerations in a half-million years. But our United States is much less\nthan ten generations old, twenty-five generations take us back before\nthe time of Columbus, Julius Caesar was alive just 100 generations ago,\nDavid was king of Israel less than 150 generations ago, 250 generations\ntake us back to the beginning of written history. And there were 24,750\ngenerations of men before written history began!\n\nI should probably tell you that there is a new method of prehistoric\ndating which would cut the earliest dates in my reckoning almost\nin half. Dr. Cesare Emiliani, combining radioactive (C14) and\nchemical (oxygen isotope) methods in the study of deep-sea borings,\nhas developed a system which would lower the total range of human\nprehistory to about 300,000 years. The system is still too new to have\nhad general examination and testing. Hence, I have not used it in this\nbook; it would mainly affect the dates earlier than 25,000 years ago.\n\n\nCHANGES IN ENVIRONMENT\n\nThe earth probably hasn�t changed much in the last 5,000 years (250\ngenerations). Men have built things on its surface and dug into it and\ndrawn boundaries on maps of it, but the places where rivers, lakes,\nseas, and mountains now stand have changed very little.\n\nIn earlier times the earth looked very different. Geologists call the\nlast great geological period the _Pleistocene_. It began somewhere\nbetween a half million and a million years ago, and was a time of great\nchanges. Sometimes we call it the Ice Age, for in the Pleistocene\nthere were at least three or four times when large areas of earth\nwere covered with glaciers. The reason for my uncertainty is that\nwhile there seem to have been four major mountain or alpine phases of\nglaciation, there may only have been three general continental phases\nin the Old World.[2]\n\n  [2] This is a complicated affair and I do not want to bother you\n      with its details. Both the alpine and the continental ice sheets\n      seem to have had minor fluctuations during their _main_ phases,\n      and the advances of the later phases destroyed many of the\n      traces of the earlier phases. The general textbooks have tended\n      to follow the names and numbers established for the Alps early\n      in this century by two German geologists. I will not bother you\n      with the names, but there were _four_ major phases. It is the\n      second of these alpine phases which seems to fit the traces of\n      the earliest of the great continental glaciations. In this book,\n      I will use the four-part system, since it is the most familiar,\n      but will add the word _alpine_ so you may remember to make the\n      transition to the continental system if you wish to do so.\n\nGlaciers are great sheets of ice, sometimes over a thousand feet\nthick, which are now known only in Greenland and Antarctica and in\nhigh mountains. During several of the glacial periods in the Ice Age,\nthe glaciers covered most of Canada and the northern United States and\nreached down to southern England and France in Europe. Smaller ice\nsheets sat like caps on the Rockies, the Alps, and the Himalayas. The\ncontinental glaciation only happened north of the equator, however, so\nremember that �Ice Age� is only half true.\n\nAs you know, the amount of water on and about the earth does not vary.\nThese large glaciers contained millions of tons of water frozen into\nice. Because so much water was frozen and contained in the glaciers,\nthe water level of lakes and oceans was lowered. Flooded areas were\ndrained and appeared as dry land. There were times in the Ice Age when\nthere was no English Channel, so that England was not an island, and a\nland bridge at the Dardanelles probably divided the Mediterranean from\nthe Black Sea.\n\nA very important thing for people living during the time of a\nglaciation was the region adjacent to the glacier. They could not, of\ncourse, live on the ice itself. The questions would be how close could\nthey live to it, and how would they have had to change their way of\nlife to do so.\n\n\nGLACIERS CHANGE THE WEATHER\n\nGreat sheets of ice change the weather. When the front of a glacier\nstood at Milwaukee, the weather must have been bitterly cold in\nChicago. The climate of the whole world would have been different, and\nyou can see how animals and men would have been forced to move from one\nplace to another in search of food and warmth.\n\nOn the other hand, it looks as if only a minor proportion of the whole\nIce Age was really taken up by times of glaciation. In between came\nthe _interglacial_ periods. During these times the climate around\nChicago was as warm as it is now, and sometimes even warmer. It may\ninterest you to know that the last great glacier melted away less than\n10,000 years ago. Professor Ernst Antevs thinks we may be living in an\ninterglacial period and that the Ice Age may not be over yet. So if you\nwant to make a killing in real estate for your several hundred times\ngreat-grandchildren, you might buy some land in the Arizona desert or\nthe Sahara.\n\nWe do not yet know just why the glaciers appeared and disappeared, as\nthey did. It surely had something to do with an increase in rainfall\nand a fall in temperature. It probably also had to do with a general\ntendency for the land to rise at the beginning of the Pleistocene. We\nknow there was some mountain-building at that time. Hence, rain-bearing\nwinds nourished the rising and cooler uplands with snow. An increase\nin all three of these factors--if they came together--would only have\nneeded to be slight. But exactly why this happened we do not know.\n\nThe reason I tell you about the glaciers is simply to remind you of the\nchanging world in which prehistoric men lived. Their surroundings--the\nanimals and plants they used for food, and the weather they had to\nprotect themselves from--were always changing. On the other hand, this\nchange happened over so long a period of time and was so slow that\nindividual people could not have noticed it. Glaciers, about which they\nprobably knew nothing, moved in hundreds of miles to the north of them.\nThe people must simply have wandered ever more southward in search\nof the plants and animals on which they lived. Or some men may have\nstayed where they were and learned to hunt different animals and eat\ndifferent foods. Prehistoric men had to keep adapting themselves to new\nenvironments and those who were most adaptive were most successful.\n\n\nOTHER CHANGES\n\nChanges took place in the men themselves as well as in the ways they\nlived. As time went on, they made better tools and weapons. Then, too,\nwe begin to find signs of how they started thinking of other things\nthan food and the tools to get it with. We find that they painted on\nthe walls of caves, and decorated their tools; we find that they buried\ntheir dead.\n\nAt about the time when the last great glacier was finally melting away,\nmen in the Near East made the first basic change in human economy.\nThey began to plant grain, and they learned to raise and herd certain\nanimals. This meant that they could store food in granaries and �on the\nhoof� against the bad times of the year. This first really basic change\nin man�s way of living has been called the �food-producing revolution.�\nBy the time it happened, a modern kind of climate was beginning. Men\nhad already grown to look as they do now. Know-how in ways of living\nhad developed and progressed, slowly but surely, up to a point. It was\nimpossible for men to go beyond that point if they only hunted and\nfished and gathered wild foods. Once the basic change was made--once\nthe food-producing revolution became effective--technology leaped ahead\nand civilization and written history soon began.\n\n\n\n\nPrehistoric Men THEMSELVES\n\n[Illustration]\n\n\nDO WE KNOW WHERE MAN ORIGINATED?\n\nFor a long time some scientists thought the �cradle of mankind� was in\ncentral Asia. Other scientists insisted it was in Africa, and still\nothers said it might have been in Europe. Actually, we don�t know\nwhere it was. We don�t even know that there was only _one_ �cradle.�\nIf we had to choose a �cradle� at this moment, we would probably say\nAfrica. But the southern portions of Asia and Europe may also have been\nincluded in the general area. The scene of the early development of\nmankind was certainly the Old World. It is pretty certain men didn�t\nreach North or South America until almost the end of the Ice Age--had\nthey done so earlier we would certainly have found some trace of them\nby now.\n\nThe earliest tools we have yet found come from central and south\nAfrica. By the dating system I�m using, these tools must be over\n500,000 years old. There are now reports that a few such early tools\nhave been found--at the Sterkfontein cave in South Africa--along with\nthe bones of small fossil men called �australopithecines.�\n\nNot all scientists would agree that the australopithecines were �men,�\nor would agree that the tools were made by the australopithecines\nthemselves. For these sticklers, the earliest bones of men come from\nthe island of Java. The date would be about 450,000 years ago. So far,\nwe have not yet found the tools which we suppose these earliest men in\nthe Far East must have made.\n\nLet me say it another way. How old are the earliest traces of men we\nnow have? Over half a million years. This was a time when the first\nalpine glaciation was happening in the north. What has been found so\nfar? The tools which the men of those times made, in different parts\nof Africa. It is now fairly generally agreed that the �men� who made\nthe tools were the australopithecines. There is also a more �man-like�\njawbone at Kanam in Kenya, but its find-spot has been questioned. The\nnext earliest bones we have were found in Java, and they may be almost\na hundred thousand years younger than the earliest African finds. We\nhaven�t yet found the tools of these early Javanese. Our knowledge of\ntool-using in Africa spreads quickly as time goes on: soon after the\nappearance of tools in the south we shall have them from as far north\nas Algeria.\n\nVery soon after the earliest Javanese come the bones of slightly more\ndeveloped people in Java, and the jawbone of a man who once lived in\nwhat is now Germany. The same general glacial beds which yielded the\nlater Javanese bones and the German jawbone also include tools. These\nfinds come from the time of the second alpine glaciation.\n\nSo this is the situation. By the time of the end of the second alpine\nor first continental glaciation (say 400,000 years ago) we have traces\nof men from the extremes of the more southerly portions of the Old\nWorld--South Africa, eastern Asia, and western Europe. There are also\nsome traces of men in the middle ground. In fact, Professor Franz\nWeidenreich believed that creatures who were the immediate ancestors\nof men had already spread over Europe, Africa, and Asia by the time\nthe Ice Age began. We certainly have no reason to disbelieve this, but\nfortunate accidents of discovery have not yet given us the evidence to\nprove it.\n\n\nMEN AND APES\n\nMany people used to get extremely upset at the ill-formed notion\nthat �man descended from the apes.� Such words were much more likely\nto start fights or �monkey trials� than the correct notion that all\nliving animals, including man, ascended or evolved from a single-celled\norganism which lived in the primeval seas hundreds of millions of years\nago. Men are mammals, of the order called Primates, and man�s living\nrelatives are the great apes. Men didn�t �descend� from the apes or\napes from men, and mankind must have had much closer relatives who have\nsince become extinct.\n\nMen stand erect. They also walk and run on their two feet. Apes are\nhappiest in trees, swinging with their arms from branch to branch.\nFew branches of trees will hold the mighty gorilla, although he still\nmanages to sleep in trees. Apes can�t stand really erect in our sense,\nand when they have to run on the ground, they use the knuckles of their\nhands as well as their feet.\n\nA key group of fossil bones here are the south African\naustralopithecines. These are called the _Australopithecinae_ or\n�man-apes� or sometimes even �ape-men.� We do not _know_ that they were\ndirectly ancestral to men but they can hardly have been so to apes.\nPresently I�ll describe them a bit more. The reason I mention them\nhere is that while they had brains no larger than those of apes, their\nhipbones were enough like ours so that they must have stood erect.\nThere is no good reason to think they couldn�t have walked as we do.\n\n\nBRAINS, HANDS, AND TOOLS\n\nWhether the australopithecines were our ancestors or not, the proper\nancestors of men must have been able to stand erect and to walk on\ntheir two feet. Three further important things probably were involved,\nnext, before they could become men proper. These are:\n\n  1. The increasing size and development of the brain.\n\n  2. The increasing usefulness (specialization) of the thumb and hand.\n\n  3. The use of tools.\n\nNobody knows which of these three is most important, or which came\nfirst. Most probably the growth of all three things was very much\nblended together. If you think about each of the things, you will see\nwhat I mean. Unless your hand is more flexible than a paw, and your\nthumb will work against (or oppose) your fingers, you can�t hold a tool\nvery well. But you wouldn�t get the idea of using a tool unless you had\nenough brain to help you see cause and effect. And it is rather hard to\nsee how your hand and brain would develop unless they had something to\npractice on--like using tools. In Professor Krogman�s words, �the hand\nmust become the obedient servant of the eye and the brain.� It is the\n_co-ordination_ of these things that counts.\n\nMany other things must have been happening to the bodies of the\ncreatures who were the ancestors of men. Our ancestors had to develop\norgans of speech. More than that, they had to get the idea of letting\n_certain sounds_ made with these speech organs have _certain meanings_.\n\nAll this must have gone very slowly. Probably everything was developing\nlittle by little, all together. Men became men very slowly.\n\n\nWHEN SHALL WE CALL MEN MEN?\n\nWhat do I mean when I say �men�? People who looked pretty much as we\ndo, and who used different tools to do different things, are men to me.\nWe�ll probably never know whether the earliest ones talked or not. They\nprobably had vocal cords, so they could make sounds, but did they know\nhow to make sounds work as symbols to carry meanings? But if the fossil\nbones look like our skeletons, and if we find tools which we�ll agree\ncouldn�t have been made by nature or by animals, then I�d say we had\ntraces of _men_.\n\nThe australopithecine finds of the Transvaal and Bechuanaland, in\nsouth Africa, are bound to come into the discussion here. I�ve already\ntold you that the australopithecines could have stood upright and\nwalked on their two hind legs. They come from the very base of the\nPleistocene or Ice Age, and a few coarse stone tools have been found\nwith the australopithecine fossils. But there are three varieties\nof the australopithecines and they last on until a time equal to\nthat of the second alpine glaciation. They are the best suggestion\nwe have yet as to what the ancestors of men _may_ have looked like.\nThey were certainly closer to men than to apes. Although their brain\nsize was no larger than the brains of modern apes their body size and\nstature were quite small; hence, relative to their small size, their\nbrains were large. We have not been able to prove without doubt that\nthe australopithecines were _tool-making_ creatures, even though the\nrecent news has it that tools have been found with australopithecine\nbones. The doubt as to whether the australopithecines used the tools\nthemselves goes like this--just suppose some man-like creature (whose\nbones we have not yet found) made the tools and used them to kill\nand butcher australopithecines. Hence a few experts tend to let\naustralopithecines still hang in limbo as �man-apes.�\n\n\nTHE EARLIEST MEN WE KNOW\n\nI�ll postpone talking about the tools of early men until the next\nchapter. The men whose bones were the earliest of the Java lot have\nbeen given the name _Meganthropus_. The bones are very fragmentary. We\nwould not understand them very well unless we had the somewhat later\nJavanese lot--the more commonly known _Pithecanthropus_ or �Java\nman�--against which to refer them for study. One of the less well-known\nand earliest fragments, a piece of lower jaw and some teeth, rather\nstrongly resembles the lower jaws and teeth of the australopithecine\ntype. Was _Meganthropus_ a sort of half-way point between the\naustralopithecines and _Pithecanthropus_? It is still too early to say.\nWe shall need more finds before we can be definite one way or the other.\n\nJava man, _Pithecanthropus_, comes from geological beds equal in age\nto the latter part of the second alpine glaciation; the _Meganthropus_\nfinds refer to beds of the beginning of this glaciation. The first\nfinds of Java man were made in 1891-92 by Dr. Eugene Dubois, a Dutch\ndoctor in the colonial service. Finds have continued to be made. There\nare now bones enough to account for four skulls. There are also four\njaws and some odd teeth and thigh bones. Java man, generally speaking,\nwas about five feet six inches tall, and didn�t hold his head very\nerect. His skull was very thick and heavy and had room for little more\nthan two-thirds as large a brain as we have. He had big teeth and a big\njaw and enormous eyebrow ridges.\n\nNo tools were found in the geological deposits where bones of Java man\nappeared. There are some tools in the same general area, but they come\na bit later in time. One reason we accept the Java man as man--aside\nfrom his general anatomical appearance--is that these tools probably\nbelonged to his near descendants.\n\nRemember that there are several varieties of men in the whole early\nJava lot, at least two of which are earlier than the _Pithecanthropus_,\n�Java man.� Some of the earlier ones seem to have gone in for\nbigness, in tooth-size at least. _Meganthropus_ is one of these\nearlier varieties. As we said, he _may_ turn out to be a link to\nthe australopithecines, who _may_ or _may not_ be ancestral to men.\n_Meganthropus_ is best understandable in terms of _Pithecanthropus_,\nwho appeared later in the same general area. _Pithecanthropus_ is\npretty well understandable from the bones he left us, and also because\nof his strong resemblance to the fully tool-using cave-dwelling �Peking\nman,� _Sinanthropus_, about whom we shall talk next. But you can see\nthat the physical anthropologists and prehistoric archeologists still\nhave a lot of work to do on the problem of earliest men.\n\n\nPEKING MEN AND SOME EARLY WESTERNERS\n\nThe earliest known Chinese are called _Sinanthropus_, or �Peking man,�\nbecause the finds were made near that city. In World War II, the United\nStates Marine guard at our Embassy in Peking tried to help get the\nbones out of the city before the Japanese attack. Nobody knows where\nthese bones are now. The Red Chinese accuse us of having stolen them.\nThey were last seen on a dock-side at a Chinese port. But should you\ncatch a Marine with a sack of old bones, perhaps we could achieve peace\nin Asia by returning them! Fortunately, there is a complete set of\ncasts of the bones.\n\nPeking man lived in a cave in a limestone hill, made tools, cracked\nanimal bones to get the marrow out, and used fire. Incidentally, the\nbones of Peking man were found because Chinese dig for what they call\n�dragon bones� and �dragon teeth.� Uneducated Chinese buy these things\nin their drug stores and grind them into powder for medicine. The\n�dragon teeth� and �bones� are really fossils of ancient animals, and\nsometimes of men. The people who supply the drug stores have learned\nwhere to dig for strange bones and teeth. Paleontologists who get to\nChina go to the drug stores to buy fossils. In a roundabout way, this\nis how the fallen-in cave of Peking man at Choukoutien was discovered.\n\nPeking man was not quite as tall as Java man but he probably stood\nstraighter. His skull looked very much like that of the Java skull\nexcept that it had room for a slightly larger brain. His face was less\nbrutish than was Java man�s face, but this isn�t saying much.\n\nPeking man dates from early in the interglacial period following the\nsecond alpine glaciation. He probably lived close to 350,000 years\nago. There are several finds to account for in Europe by about this\ntime, and one from northwest Africa. The very large jawbone found\nnear Heidelberg in Germany is doubtless even earlier than Peking man.\nThe beds where it was found are of second alpine glacial times, and\nrecently some tools have been said to have come from the same beds.\nThere is not much I need tell you about the Heidelberg jaw save that it\nseems certainly to have belonged to an early man, and that it is very\nbig.\n\nAnother find in Germany was made at Steinheim. It consists of the\nfragmentary skull of a man. It is very important because of its\nrelative completeness, but it has not yet been fully studied. The bone\nis thick, but the back of the head is neither very low nor primitive,\nand the face is also not primitive. The forehead does, however, have\nbig ridges over the eyes. The more fragmentary skull from Swanscombe in\nEngland (p. 11) has been much more carefully studied. Only the top and\nback of that skull have been found. Since the skull rounds up nicely,\nit has been assumed that the face and forehead must have been quite\n�modern.� Careful comparison with Steinheim shows that this was not\nnecessarily so. This is important because it bears on the question of\nhow early truly �modern� man appeared.\n\nRecently two fragmentary jaws were found at Ternafine in Algeria,\nnorthwest Africa. They look like the jaws of Peking man. Tools were\nfound with them. Since no jaws have yet been found at Steinheim or\nSwanscombe, but the time is the same, one wonders if these people had\njaws like those of Ternafine.\n\n\nWHAT HAPPENED TO JAVA AND PEKING MEN\n\nProfessor Weidenreich thought that there were at least a dozen ways in\nwhich the Peking man resembled the modern Mongoloids. This would seem\nto indicate that Peking man was really just a very early Chinese.\n\nSeveral later fossil men have been found in the Java-Australian area.\nThe best known of these is the so-called Solo man. There are some finds\nfrom Australia itself which we now know to be quite late. But it looks\nas if we may assume a line of evolution from Java man down to the\nmodern Australian natives. During parts of the Ice Age there was a land\nbridge all the way from Java to Australia.\n\n\nTWO ENGLISHMEN WHO WEREN�T OLD\n\nThe older textbooks contain descriptions of two English finds which\nwere thought to be very old. These were called Piltdown (_Eoanthropus\ndawsoni_) and Galley Hill. The skulls were very modern in appearance.\nIn 1948-49, British scientists began making chemical tests which proved\nthat neither of these finds is very old. It is now known that both\n�Piltdown man� and the tools which were said to have been found with\nhim were part of an elaborate fake!\n\n\nTYPICAL �CAVE MEN�\n\nThe next men we have to talk about are all members of a related group.\nThese are the Neanderthal group. �Neanderthal man� himself was found in\nthe Neander Valley, near D�sseldorf, Germany, in 1856. He was the first\nhuman fossil to be recognized as such.\n\n[Illustration: PRINCIPAL KNOWN TYPES OF FOSSIL MEN\n\n  CRO-MAGNON\n  NEANDERTHAL\n  MODERN SKULL\n  COMBE-CAPELLE\n  SINANTHROPUS\n  PITHECANTHROPUS]\n\nSome of us think that the neanderthaloids proper are only those people\nof western Europe who didn�t get out before the beginning of the last\ngreat glaciation, and who found themselves hemmed in by the glaciers\nin the Alps and northern Europe. Being hemmed in, they intermarried\na bit too much and developed into a special type. Professor F. Clark\nHowell sees it this way. In Europe, the earliest trace of men we\nnow know is the Heidelberg jaw. Evolution continued in Europe, from\nHeidelberg through the Swanscombe and Steinheim types to a group of\npre-neanderthaloids. There are traces of these pre-neanderthaloids\npretty much throughout Europe during the third interglacial period--say\n100,000 years ago. The pre-neanderthaloids are represented by such\nfinds as the ones at Ehringsdorf in Germany and Saccopastore in Italy.\nI won�t describe them for you, since they are simply less extreme than\nthe neanderthaloids proper--about half way between Steinheim and the\nclassic Neanderthal people.\n\nProfessor Howell believes that the pre-neanderthaloids who happened to\nget caught in the pocket of the southwest corner of Europe at the onset\nof the last great glaciation became the classic Neanderthalers. Out in\nthe Near East, Howell thinks, it is possible to see traces of people\nevolving from the pre-neanderthaloid type toward that of fully modern\nman. Certainly, we don�t see such extreme cases of �neanderthaloidism�\noutside of western Europe.\n\nThere are at least a dozen good examples in the main or classic\nNeanderthal group in Europe. They date to just before and in the\nearlier part of the last great glaciation (85,000 to 40,000 years ago).\nMany of the finds have been made in caves. The �cave men� the movies\nand the cartoonists show you are probably meant to be Neanderthalers.\nI�m not at all sure they dragged their women by the hair; the women\nwere probably pretty tough, too!\n\nNeanderthal men had large bony heads, but plenty of room for brains.\nSome had brain cases even larger than the average for modern man. Their\nfaces were heavy, and they had eyebrow ridges of bone, but the ridges\nwere not as big as those of Java man. Their foreheads were very low,\nand they didn�t have much chin. They were about five feet three inches\ntall, but were heavy and barrel-chested. But the Neanderthalers didn�t\nslouch as much as they�ve been blamed for, either.\n\nOne important thing about the Neanderthal group is that there is a fair\nnumber of them to study. Just as important is the fact that we know\nsomething about how they lived, and about some of the tools they made.\n\n\nOTHER MEN CONTEMPORARY WITH THE NEANDERTHALOIDS\n\nWe have seen that the neanderthaloids seem to be a specialization\nin a corner of Europe. What was going on elsewhere? We think that\nthe pre-neanderthaloid type was a generally widespread form of men.\nFrom this type evolved other more or less extreme although generally\nrelated men. The Solo finds in Java form one such case. Another was the\nRhodesian man of Africa, and the more recent Hopefield finds show more\nof the general Rhodesian type. It is more confusing than it needs to be\nif these cases outside western Europe are called neanderthaloids. They\nlived during the same approximate time range but they were all somewhat\ndifferent-looking people.\n\n\nEARLY MODERN MEN\n\nHow early is modern man (_Homo sapiens_), the �wise man�? Some people\nhave thought that he was very early, a few still think so. Piltdown\nand Galley Hill, which were quite modern in anatomical appearance and\n_supposedly_ very early in date, were the best �evidence� for very\nearly modern men. Now that Piltdown has been liquidated and Galley Hill\nis known to be very late, what is left of the idea?\n\nThe backs of the skulls of the Swanscombe and Steinheim finds look\nrather modern. Unless you pay attention to the face and forehead of the\nSteinheim find--which not many people have--and perhaps also consider\nthe Ternafine jaws, you might come to the conclusion that the crown of\nthe Swanscombe head was that of a modern-like man.\n\nTwo more skulls, again without faces, are available from a French\ncave site, Font�chevade. They come from the time of the last great\ninterglacial, as did the pre-neanderthaloids. The crowns of the\nFont�chevade skulls also look quite modern. There is a bit of the\nforehead preserved on one of these skulls and the brow-ridge is not\nheavy. Nevertheless, there is a suggestion that the bones belonged to\nan immature individual. In this case, his (or even more so, if _her_)\nbrow-ridges would have been weak anyway. The case for the Font�chevade\nfossils, as modern type men, is little stronger than that for\nSwanscombe, although Professor Vallois believes it a good case.\n\nIt seems to add up to the fact that there were people living in\nEurope--before the classic neanderthaloids--who looked more modern,\nin some features, than the classic western neanderthaloids did. Our\nbest suggestion of what men looked like--just before they became fully\nmodern--comes from a cave on Mount Carmel in Palestine.\n\n\nTHE FIRST MODERNS\n\nProfessor T. D. McCown and the late Sir Arthur Keith, who studied the\nMount Carmel bones, figured out that one of the two groups involved\nwas as much as 70 per cent modern. There were, in fact, two groups or\nvarieties of men in the Mount Carmel caves and in at least two other\nPalestinian caves of about the same time. The time would be about that\nof the onset of colder weather, when the last glaciation was beginning\nin the north--say 75,000 years ago.\n\nThe 70 per cent modern group came from only one cave, Mugharet es-Skhul\n(�cave of the kids�). The other group, from several caves, had bones of\nmen of the type we�ve been calling pre-neanderthaloid which we noted\nwere widespread in Europe and beyond. The tools which came with each\nof these finds were generally similar, and McCown and Keith, and other\nscholars since their study, have tended to assume that both the Skhul\ngroup and the pre-neanderthaloid group came from exactly the same time.\nThe conclusion was quite natural: here was a population of men in the\nact of evolving in two different directions. But the time may not be\nexactly the same. It is very difficult to be precise, within say 10,000\nyears, for a time some 75,000 years ago. If the Skhul men are in fact\nlater than the pre-neanderthaloid group of Palestine, as some of us\nthink, then they show how relatively modern some men were--men who\nlived at the same time as the classic Neanderthalers of the European\npocket.\n\nSoon after the first extremely cold phase of the last glaciation, we\nbegin to get a number of bones of completely modern men in Europe.\nWe also get great numbers of the tools they made, and their living\nplaces in caves. Completely modern skeletons begin turning up in caves\ndating back to toward 40,000 years ago. The time is about that of the\nbeginning of the second phase of the last glaciation. These skeletons\nbelonged to people no different from many people we see today. Like\npeople today, not everybody looked alike. (The positions of the more\nimportant fossil men of later Europe are shown in the chart on page\n72.)\n\n\nDIFFERENCES IN THE EARLY MODERNS\n\nThe main early European moderns have been divided into two groups, the\nCro-Magnon group and the Combe Capelle-Br�nn group. Cro-Magnon people\nwere tall and big-boned, with large, long, and rugged heads. They\nmust have been built like many present-day Scandinavians. The Combe\nCapelle-Br�nn people were shorter; they had narrow heads and faces, and\nbig eyebrow-ridges. Of course we don�t find the skin or hair of these\npeople. But there is little doubt they were Caucasoids (�Whites�).\n\nAnother important find came in the Italian Riviera, near Monte Carlo.\nHere, in a cave near Grimaldi, there was a grave containing a woman\nand a young boy, buried together. The two skeletons were first called\n�Negroid� because some features of their bones were thought to resemble\ncertain features of modern African Negro bones. But more recently,\nProfessor E. A. Hooton and other experts questioned the use of the word\n�Negroid� in describing the Grimaldi skeletons. It is true that nothing\nis known of the skin color, hair form, or any other fleshy feature of\nthe Grimaldi people, so that the word �Negroid� in its usual meaning is\nnot proper here. It is also not clear whether the features of the bones\nclaimed to be �Negroid� are really so at all.\n\nFrom a place called Wadjak, in Java, we have �proto-Australoid� skulls\nwhich closely resemble those of modern Australian natives. Some of\nthe skulls found in South Africa, especially the Boskop skull, look\nlike those of modern Bushmen, but are much bigger. The ancestors of\nthe Bushmen seem to have once been very widespread south of the Sahara\nDesert. True African Negroes were forest people who apparently expanded\nout of the west central African area only in the last several thousand\nyears. Although dark in skin color, neither the Australians nor the\nBushmen are Negroes; neither the Wadjak nor the Boskop skulls are\n�Negroid.�\n\nAs we�ve already mentioned, Professor Weidenreich believed that Peking\nman was already on the way to becoming a Mongoloid. Anyway, the\nMongoloids would seem to have been present by the time of the �Upper\nCave� at Choukoutien, the _Sinanthropus_ find-spot.\n\n\nWHAT THE DIFFERENCES MEAN\n\nWhat does all this difference mean? It means that, at one moment in\ntime, within each different area, men tended to look somewhat alike.\nFrom area to area, men tended to look somewhat different, just as\nthey do today. This is all quite natural. People _tended_ to mate\nnear home; in the anthropological jargon, they made up geographically\nlocalized breeding populations. The simple continental division of\n�stocks�--black = Africa, yellow = Asia, white = Europe--is too simple\na picture to fit the facts. People became accustomed to life in some\nparticular area within a continent (we might call it a �natural area�).\nAs they went on living there, they evolved towards some particular\nphysical variety. It would, of course, have been difficult to draw\na clear boundary between two adjacent areas. There must always have\nbeen some mating across the boundaries in every case. One thing human\nbeings don�t do, and never have done, is to mate for �purity.� It is\nself-righteous nonsense when we try to kid ourselves into thinking that\nthey do.\n\nI am not going to struggle with the whole business of modern stocks and\nraces. This is a book about prehistoric men, not recent historic or\nmodern men. My physical anthropologist friends have been very patient\nin helping me to write and rewrite this chapter--I am not going to\nbreak their patience completely. Races are their business, not mine,\nand they must do the writing about races. I shall, however, give two\nmodern definitions of race, and then make one comment.\n\n  Dr. William G. Boyd, professor of Immunochemistry, School of\n    Medicine, Boston University: �We may define a human race as a\n    population which differs significantly from other human populations\n    in regard to the frequency of one or more of the genes it\n    possesses.�\n\n  Professor Sherwood L. Washburn, professor of Physical Anthropology,\n    Department of Anthropology, the University of California: �A �race�\n    is a group of genetically similar populations, and races intergrade\n    because there are always intermediate populations.�\n\nMy comment is that the ideas involved here are all biological: they\nconcern groups, _not_ individuals. Boyd and Washburn may differ a bit\non what they want to consider a �population,� but a population is a\ngroup nevertheless, and genetics is biology to the hilt. Now a lot of\npeople still think of race in terms of how people dress or fix their\nfood or of other habits or customs they have. The next step is to talk\nabout racial �purity.� None of this has anything whatever to do with\nrace proper, which is a matter of the biology of groups.\n\nIncidentally, I�m told that if man very carefully _controls_\nthe breeding of certain animals over generations--dogs, cattle,\nchickens--he might achieve a �pure� race of animals. But he doesn�t do\nit. Some unfortunate genetic trait soon turns up, so this has just as\ncarefully to be bred out again, and so on.\n\n\nSUMMARY OF PRESENT KNOWLEDGE OF FOSSIL MEN\n\nThe earliest bones of men we now have--upon which all the experts\nwould probably agree--are those of _Meganthropus_, from Java, of about\n450,000 years ago. The earlier australopithecines of Africa were\npossibly not tool-users and may not have been ancestral to men at all.\nBut there is an alternate and evidently increasingly stronger chance\nthat some of them may have been. The Kanam jaw from Kenya, another\nearly possibility, is not only very incomplete but its find-spot is\nvery questionable.\n\nJava man proper, _Pithecanthropus_, comes next, at about 400,000 years\nago, and the big Heidelberg jaw in Germany must be of about the same\ndate. Next comes Swanscombe in England, Steinheim in Germany, the\nTernafine jaws in Algeria, and Peking man, _Sinanthropus_. They all\ndate to the second great interglacial period, about 350,000 years ago.\n\nPiltdown and Galley Hill are out, and with them, much of the starch\nin the old idea that there were two distinct lines of development\nin human evolution: (1) a line of �paleoanthropic� development from\nHeidelberg to the Neanderthalers where it became extinct, and (2) a\nvery early �modern� line, through Piltdown, Galley Hill, Swanscombe, to\nus. Swanscombe, Steinheim, and Ternafine are just as easily cases of\nvery early pre-neanderthaloids.\n\nThe pre-neanderthaloids were very widespread during the third\ninterglacial: Ehringsdorf, Saccopastore, some of the Mount Carmel\npeople, and probably Font�chevade are cases in point. A variety of\ntheir descendants can be seen, from Java (Solo), Africa (Rhodesian\nman), and about the Mediterranean and in western Europe. As the acute\ncold of the last glaciation set in, the western Europeans found\nthemselves surrounded by water, ice, or bitter cold tundra. To vastly\nover-simplify it, they �bred in� and became classic neanderthaloids.\nBut on Mount Carmel, the Skhul cave-find with its 70 per cent modern\nfeatures shows what could happen elsewhere at the same time.\n\nLastly, from about 40,000 or 35,000 years ago--the time of the onset\nof the second phase of the last glaciation--we begin to find the fully\nmodern skeletons of men. The modern skeletons differ from place to\nplace, just as different groups of men living in different places still\nlook different.\n\nWhat became of the Neanderthalers? Nobody can tell me for sure. I�ve a\nhunch they were simply �bred out� again when the cold weather was over.\nMany Americans, as the years go by, are no longer ashamed to claim they\nhave �Indian blood in their veins.� Give us a few more generations\nand there will not be very many other Americans left to whom we can\nbrag about it. It certainly isn�t inconceivable to me to imagine a\nlittle Cro-Magnon boy bragging to his friends about his tough, strong,\nNeanderthaler great-great-great-great-grandfather!\n\n\n\n\nCultural BEGINNINGS\n\n[Illustration]\n\n\nMen, unlike the lower animals, are made up of much more than flesh and\nblood and bones; for men have �culture.�\n\n\nWHAT IS CULTURE?\n\n�Culture� is a word with many meanings. The doctors speak of making a\n�culture� of a certain kind of bacteria, and ants are said to have a\n�culture.� Then there is the Emily Post kind of �culture�--you say a\nperson is �cultured,� or that he isn�t, depending on such things as\nwhether or not he eats peas with his knife.\n\nThe anthropologists use the word too, and argue heatedly over its finer\nmeanings; but they all agree that every human being is part of or has\nsome kind of culture. Each particular human group has a particular\nculture; that is one of the ways in which we can tell one group of\nmen from another. In this sense, a CULTURE means the way the members\nof a group of people think and believe and live, the tools they make,\nand the way they do things. Professor Robert Redfield says a culture\nis an organized or formalized body of conventional understandings.\n�Conventional understandings� means the whole set of rules, beliefs,\nand standards which a group of people lives by. These understandings\nshow themselves in art, and in the other things a people may make and\ndo. The understandings continue to last, through tradition, from one\ngeneration to another. They are what really characterize different\nhuman groups.\n\n\nSOME CHARACTERISTICS OF CULTURE\n\nA culture lasts, although individual men in the group die off. On\nthe other hand, a culture changes as the different conventions and\nunderstandings change. You could almost say that a culture lives in the\nminds of the men who have it. But people are not born with it; they\nget it as they grow up. Suppose a day-old Hungarian baby is adopted by\na family in Oshkosh, Wisconsin, and the child is not told that he is\nHungarian. He will grow up with no more idea of Hungarian culture than\nanyone else in Oshkosh.\n\nSo when I speak of ancient Egyptian culture, I mean the whole body\nof understandings and beliefs and knowledge possessed by the ancient\nEgyptians. I mean their beliefs as to why grain grew, as well as their\nability to make tools with which to reap the grain. I mean their\nbeliefs about life after death. What I am thinking about as culture is\na thing which lasted in time. If any one Egyptian, even the Pharaoh,\ndied, it didn�t affect the Egyptian culture of that particular moment.\n\n\nPREHISTORIC CULTURES\n\nFor that long period of man�s history that is all prehistory, we have\nno written descriptions of cultures. We find only the tools men made,\nthe places where they lived, the graves in which they buried their\ndead. Fortunately for us, these tools and living places and graves all\ntell us something about the ways these men lived and the things they\nbelieved. But the story we learn of the very early cultures must be\nonly a very small part of the whole, for we find so few things. The\nrest of the story is gone forever. We have to do what we can with what\nwe find.\n\nFor all of the time up to about 75,000 years ago, which was the time\nof the classic European Neanderthal group of men, we have found few\ncave-dwelling places of very early prehistoric men. First, there is the\nfallen-in cave where Peking man was found, near Peking. Then there are\ntwo or three other _early_, but not _very early_, possibilities. The\nfinds at the base of the French cave of Font�chevade, those in one of\nthe Makapan caves in South Africa, and several open sites such as Dr.\nL. S. B. Leakey�s Olorgesailie in Kenya doubtless all lie earlier than\nthe time of the main European Neanderthal group, but none are so early\nas the Peking finds.\n\nYou can see that we know very little about the home life of earlier\nprehistoric men. We find different kinds of early stone tools, but we\ncan�t even be really sure which tools may have been used together.\n\n\nWHY LITTLE HAS LASTED FROM EARLY TIMES\n\nExcept for the rare find-spots mentioned above, all our very early\nfinds come from geological deposits, or from the wind-blown surfaces\nof deserts. Here is what the business of geological deposits really\nmeans. Let us say that a group of people was living in England about\n300,000 years ago. They made the tools they needed, lived in some sort\nof camp, almost certainly built fires, and perhaps buried their dead.\nWhile the climate was still warm, many generations may have lived in\nthe same place, hunting, and gathering nuts and berries; but after some\nfew thousand years, the weather began very gradually to grow colder.\nThese early Englishmen would not have known that a glacier was forming\nover northern Europe. They would only have noticed that the animals\nthey hunted seemed to be moving south, and that the berries grew larger\ntoward the south. So they would have moved south, too.\n\nThe camp site they left is the place we archeologists would really have\nliked to find. All of the different tools the people used would have\nbeen there together--many broken, some whole. The graves, and traces\nof fire, and the tools would have been there. But the glacier got\nthere first! The front of this enormous sheet of ice moved down over\nthe country, crushing and breaking and plowing up everything, like a\ngigantic bulldozer. You can see what happened to our camp site.\n\nEverything the glacier couldn�t break, it pushed along in front of it\nor plowed beneath it. Rocks were ground to gravel, and soil was caught\ninto the ice, which afterwards melted and ran off as muddy water. Hard\ntools of flint sometimes remained whole. Human bones weren�t so hard;\nit�s a wonder _any_ of them lasted. Gushing streams of melt water\nflushed out the debris from underneath the glacier, and water flowed\noff the surface and through great crevasses. The hard materials these\nwaters carried were even more rolled and ground up. Finally, such\nmaterials were dropped by the rushing waters as gravels, miles from\nthe front of the glacier. At last the glacier reached its greatest\nextent; then it melted backward toward the north. Debris held in the\nice was dropped where the ice melted, or was flushed off by more melt\nwater. When the glacier, leaving the land, had withdrawn to the sea,\ngreat hunks of ice were broken off as icebergs. These icebergs probably\ndropped the materials held in their ice wherever they floated and\nmelted. There must be many tools and fragmentary bones of prehistoric\nmen on the bottom of the Atlantic Ocean and the North Sea.\n\nRemember, too, that these glaciers came and went at least three or four\ntimes during the Ice Age. Then you will realize why the earlier things\nwe find are all mixed up. Stone tools from one camp site got mixed up\nwith stone tools from many other camp sites--tools which may have been\nmade tens of thousands or more years apart. The glaciers mixed them\nall up, and so we cannot say which particular sets of tools belonged\ntogether in the first place.\n\n\n�EOLITHS�\n\nBut what sort of tools do we find earliest? For almost a century,\npeople have been picking up odd bits of flint and other stone in the\noldest Ice Age gravels in England and France. It is now thought these\nodd bits of stone weren�t actually worked by prehistoric men. The\nstones were given a name, _eoliths_, or �dawn stones.� You can see them\nin many museums; but you can be pretty sure that very few of them were\nactually fashioned by men.\n\nIt is impossible to pick out �eoliths� that seem to be made in any\none _tradition_. By �tradition� I mean a set of habits for making one\nkind of tool for some particular job. No two �eoliths� look very much\nalike: tools made as part of some one tradition all look much alike.\nNow it�s easy to suppose that the very earliest prehistoric men picked\nup and used almost any sort of stone. This wouldn�t be surprising; you\nand I do it when we go camping. In other words, some of these �eoliths�\nmay actually have been used by prehistoric men. They must have used\nanything that might be handy when they needed it. We could have figured\nthat out without the �eoliths.�\n\n\nTHE ROAD TO STANDARDIZATION\n\nReasoning from what we know or can easily imagine, there should have\nbeen three major steps in the prehistory of tool-making. The first step\nwould have been simple _utilization_ of what was at hand. This is the\nstep into which the �eoliths� would fall. The second step would have\nbeen _fashioning_--the haphazard preparation of a tool when there was a\nneed for it. Probably many of the earlier pebble tools, which I shall\ndescribe next, fall into this group. The third step would have been\n_standardization_. Here, men began to make tools according to certain\nset traditions. Counting the better-made pebble tools, there are four\nsuch traditions or sets of habits for the production of stone tools in\nearliest prehistoric times. Toward the end of the Pleistocene, a fifth\ntradition appears.\n\n\nPEBBLE TOOLS\n\nAt the beginning of the last chapter, you�ll remember that I said there\nwere tools from very early geological beds. The earliest bones of men\nhave not yet been found in such early beds although the Sterkfontein\naustralopithecine cave approaches this early date. The earliest tools\ncome from Africa. They date back to the time of the first great\nalpine glaciation and are at least 500,000 years old. The earliest\nones are made of split pebbles, about the size of your fist or a bit\nbigger. They go under the name of pebble tools. There are many natural\nexposures of early Pleistocene geological beds in Africa, and the\nprehistoric archeologists of south and central Africa have concentrated\non searching for early tools. Other finds of early pebble tools have\nrecently been made in Algeria and Morocco.\n\n[Illustration: SOUTH AFRICAN PEBBLE TOOL]\n\nThere are probably early pebble tools to be found in areas of the\nOld World besides Africa; in fact, some prehistorians already claim\nto have identified a few. Since the forms and the distinct ways of\nmaking the earlier pebble tools had not yet sufficiently jelled into\na set tradition, they are difficult for us to recognize. It is not\nso difficult, however, if there are great numbers of �possibles�\navailable. A little later in time the tradition becomes more clearly\nset, and pebble tools are easier to recognize. So far, really large\ncollections of pebble tools have only been found and examined in Africa.\n\n\nCORE-BIFACE TOOLS\n\nThe next tradition we�ll look at is the _core_ or biface one. The tools\nare large pear-shaped pieces of stone trimmed flat on the two opposite\nsides or �faces.� Hence �biface� has been used to describe these tools.\nThe front view is like that of a pear with a rather pointed top, and\nthe back view looks almost exactly the same. Look at them side on, and\nyou can see that the front and back faces are the same and have been\ntrimmed to a thin tip. The real purpose in trimming down the two faces\nwas to get a good cutting edge all around. You can see all this in the\nillustration.\n\n[Illustration: ABBEVILLIAN BIFACE]\n\nWe have very little idea of the way in which these core-bifaces were\nused. They have been called �hand axes,� but this probably gives the\nwrong idea, for an ax, to us, is not a pointed tool. All of these early\ntools must have been used for a number of jobs--chopping, scraping,\ncutting, hitting, picking, and prying. Since the core-bifaces tend to\nbe pointed, it seems likely that they were used for hitting, picking,\nand prying. But they have rough cutting edges, so they could have been\nused for chopping, scraping, and cutting.\n\n\nFLAKE TOOLS\n\nThe third tradition is the _flake_ tradition. The idea was to get a\ntool with a good cutting edge by simply knocking a nice large flake off\na big block of stone. You had to break off the flake in such a way that\nit was broad and thin, and also had a good sharp cutting edge. Once you\nreally got on to the trick of doing it, this was probably a simpler way\nto make a good cutting tool than preparing a biface. You have to know\nhow, though; I�ve tried it and have mashed my fingers more than once.\n\nThe flake tools look as if they were meant mainly for chopping,\nscraping, and cutting jobs. When one made a flake tool, the idea seems\nto have been to produce a broad, sharp, cutting edge.\n\n[Illustration: CLACTONIAN FLAKE]\n\nThe core-biface and the flake traditions were spread, from earliest\ntimes, over much of Europe, Africa, and western Asia. The map on page\n52 shows the general area. Over much of this great region there was\nflint. Both of these traditions seem well adapted to flint, although\ngood core-bifaces and flakes were made from other kinds of stone,\nespecially in Africa south of the Sahara.\n\n\nCHOPPERS AND ADZE-LIKE TOOLS\n\nThe fourth early tradition is found in southern and eastern Asia, from\nnorthwestern India through Java and Burma into China. Father Maringer\nrecently reported an early group of tools in Japan, which most resemble\nthose of Java, called Patjitanian. The prehistoric men in this general\narea mostly used quartz and tuff and even petrified wood for their\nstone tools (see illustration, p. 46).\n\nThis fourth early tradition is called the _chopper-chopping tool_\ntradition. It probably has its earliest roots in the pebble tool\ntradition of African type. There are several kinds of tools in this\ntradition, but all differ from the western core-bifaces and flakes.\nThere are broad, heavy scrapers or cleavers, and tools with an\nadze-like cutting edge. These last-named tools are called �hand adzes,�\njust as the core-bifaces of the west have often been called �hand\naxes.� The section of an adze cutting edge is ? shaped; the section of\nan ax is < shaped.\n\n[Illustration: ANYATHIAN ADZE-LIKE TOOL]\n\nThere are also pointed pebble tools. Thus the tool kit of these early\nsouth and east Asiatic peoples seems to have included tools for doing\nas many different jobs as did the tools of the Western traditions.\n\nDr. H. L. Movius has emphasized that the tools which were found in the\nPeking cave with Peking man belong to the chopper-tool tradition. This\nis the only case as yet where the tools and the man have been found\ntogether from very earliest times--if we except Sterkfontein.\n\n\nDIFFERENCES WITHIN THE TOOL-MAKING TRADITIONS\n\nThe latter three great traditions in the manufacture of stone\ntools--and the less clear-cut pebble tools before them--are all we have\nto show of the cultures of the men of those times. Changes happened in\neach of the traditions. As time went on, the tools in each tradition\nwere better made. There could also be slight regional differences in\nthe tools within one tradition. Thus, tools with small differences, but\nall belonging to one tradition, can be given special group (facies)\nnames.\n\nThis naming of special groups has been going on for some time. Here are\nsome of these names, since you may see them used in museum displays\nof flint tools, or in books. Within each tradition of tool-making\n(save the chopper tools), the earliest tool type is at the bottom\nof the list, just as it appears in the lowest beds of a geological\nstratification.[3]\n\n  [3] Archeologists usually make their charts and lists with the\n      earliest materials at the bottom and the latest on top, since\n      this is the way they find them in the ground.\n\n  Chopper tool (all about equally early):\n    Anyathian (Burma)\n    Choukoutienian (China)\n    Patjitanian (Java)\n    Soan (India)\n\n  Flake:\n    �Typical Mousterian�\n    Levalloiso-Mousterian\n    Levalloisian\n    Tayacian\n    Clactonian (localized in England)\n\n  Core-biface:\n    Some blended elements in �Mousterian�\n    Micoquian (= Acheulean 6 and 7)\n    Acheulean\n    Abbevillian (once called �Chellean�)\n\n  Pebble tool:\n    Oldowan\n    Ain Hanech\n    pre-Stellenbosch\n    Kafuan\n\nThe core-biface and the flake traditions appear in the chart (p. 65).\n\nThe early archeologists had many of the tool groups named before they\never realized that there were broader tool preparation traditions. This\nwas understandable, for in dealing with the mixture of things that come\nout of glacial gravels the easiest thing to do first is to isolate\nindividual types of tools into groups. First you put a bushel-basketful\nof tools on a table and begin matching up types. Then you give names to\nthe groups of each type. The groups and the types are really matters of\nthe archeologists� choice; in real life, they were probably less exact\nthan the archeologists� lists of them. We now know pretty well in which\nof the early traditions the various early groups belong.\n\n\nTHE MEANING OF THE DIFFERENT TRADITIONS\n\nWhat do the traditions really mean? I see them as the standardization\nof ways to make tools for particular jobs. We may not know exactly what\njob the maker of a particular core-biface or flake tool had in mind. We\ncan easily see, however, that he already enjoyed a know-how, a set of\npersistent habits of tool preparation, which would always give him the\nsame type of tool when he wanted to make it. Therefore, the traditions\nshow us that persistent habits already existed for the preparation of\none type of tool or another.\n\nThis tells us that one of the characteristic aspects of human culture\nwas already present. There must have been, in the minds of these\nearly men, a notion of the ideal type of tool for a particular job.\nFurthermore, since we find so many thousands upon thousands of tools\nof one type or another, the notion of the ideal types of tools _and_\nthe know-how for the making of each type must have been held in common\nby many men. The notions of the ideal types and the know-how for their\nproduction must have been passed on from one generation to another.\n\nI could even guess that the notions of the ideal type of one or the\nother of these tools stood out in the minds of men of those times\nsomewhat like a symbol of �perfect tool for good job.� If this were\nso--remember it�s only a wild guess of mine--then men were already\nsymbol users. Now let�s go on a further step to the fact that the words\nmen speak are simply sounds, each different sound being a symbol for a\ndifferent meaning. If standardized tool-making suggests symbol-making,\nis it also possible that crude word-symbols were also being made? I\nsuppose that it is not impossible.\n\nThere may, of course, be a real question whether tool-utilizing\ncreatures--our first step, on page 42--were actually men. Other\nanimals utilize things at hand as tools. The tool-fashioning creature\nof our second step is more suggestive, although we may not yet feel\nsure that many of the earlier pebble tools were man-made products. But\nwith the step to standardization and the appearance of the traditions,\nI believe we must surely be dealing with the traces of culture-bearing\n_men_. The �conventional understandings� which Professor Redfield�s\ndefinition of culture suggests are now evidenced for us in the\npersistent habits for the preparation of stone tools. Were we able to\nsee the other things these prehistoric men must have made--in materials\nno longer preserved for the archeologist to find--I believe there would\nbe clear signs of further conventional understandings. The men may have\nbeen physically primitive and pretty shaggy in appearance, but I think\nwe must surely call them men.\n\n\nAN OLDER INTERPRETATION OF THE WESTERN TRADITIONS\n\nIn the last chapter, I told you that many of the older archeologists\nand human paleontologists used to think that modern man was very old.\nThe supposed ages of Piltdown and Galley Hill were given as evidence\nof the great age of anatomically modern man, and some interpretations\nof the Swanscombe and Font�chevade fossils were taken to support\nthis view. The conclusion was that there were two parallel lines or\n�phyla� of men already present well back in the Pleistocene. The\nfirst of these, the more primitive or �paleoanthropic� line, was\nsaid to include Heidelberg, the proto-neanderthaloids and classic\nNeanderthal. The more anatomically modern or �neanthropic� line was\nthought to consist of Piltdown and the others mentioned above. The\nNeanderthaler or paleoanthropic line was thought to have become extinct\nafter the first phase of the last great glaciation. Of course, the\nmodern or neanthropic line was believed to have persisted into the\npresent, as the basis for the world�s population today. But with\nPiltdown liquidated, Galley Hill known to be very late, and Swanscombe\nand Font�chevade otherwise interpreted, there is little left of the\nso-called parallel phyla theory.\n\nWhile the theory was in vogue, however, and as long as the European\narcheological evidence was looked at in one short-sighted way, the\narcheological materials _seemed_ to fit the parallel phyla theory. It\nwas simply necessary to believe that the flake tools were made only\nby the paleoanthropic Neanderthaler line, and that the more handsome\ncore-biface tools were the product of the neanthropic modern-man line.\n\nRemember that _almost_ all of the early prehistoric European tools\ncame only from the redeposited gravel beds. This means that the tools\nwere not normally found in the remains of camp sites or work shops\nwhere they had actually been dropped by the men who made and used\nthem. The tools came, rather, from the secondary hodge-podge of the\nglacial gravels. I tried to give you a picture of the bulldozing action\nof glaciers (p. 40) and of the erosion and weathering that were\nside-effects of a glacially conditioned climate on the earth�s surface.\nAs we said above, if one simply plucks tools out of the redeposited\ngravels, his natural tendency is to �type� the tools by groups, and to\nthink that the groups stand for something _on their own_.\n\nIn 1906, M. Victor Commont actually made a rare find of what seems\nto have been a kind of workshop site, on a terrace above the Somme\nriver in France. Here, Commont realized, flake tools appeared clearly\nin direct association with core-biface tools. Few prehistorians paid\nattention to Commont or his site, however. It was easier to believe\nthat flake tools represented a distinct �culture� and that this\n�culture� was that of the Neanderthaler or paleoanthropic line, and\nthat the core-bifaces stood for another �culture� which was that of the\nsupposed early modern or neanthropic line. Of course, I am obviously\nskipping many details here. Some later sites with Neanderthal fossils\ndo seem to have only flake tools, but other such sites have both types\nof tools. The flake tools which appeared _with_ the core-bifaces\nin the Swanscombe gravels were never made much of, although it\nwas embarrassing for the parallel phyla people that Font�chevade\nran heavily to flake tools. All in all, the parallel phyla theory\nflourished because it seemed so neat and easy to understand.\n\n\nTRADITIONS ARE TOOL-MAKING HABITS, NOT CULTURES\n\nIn case you think I simply enjoy beating a dead horse, look in any\nstandard book on prehistory written twenty (or even ten) years ago, or\nin most encyclopedias. You�ll find that each of the individual tool\ntypes, of the West, at least, was supposed to represent a �culture.�\nThe �cultures� were believed to correspond to parallel lines of human\nevolution.\n\nIn 1937, Mr. Harper Kelley strongly re-emphasized the importance\nof Commont�s workshop site and the presence of flake tools with\ncore-bifaces. Next followed Dr. Movius� clear delineation of the\nchopper-chopping tool tradition of the Far East. This spoiled the nice\nsymmetry of the flake-tool = paleoanthropic, core-biface = neanthropic\nequations. Then came increasing understanding of the importance of\nthe pebble tools in Africa, and the location of several more workshop\nsites there, especially at Olorgesailie in Kenya. Finally came the\nliquidation of Piltdown and the deflation of Galley Hill�s date. So it\nis at last possible to picture an individual prehistoric man making a\nflake tool to do one job and a core-biface tool to do another. Commont\nshowed us this picture in 1906, but few believed him.\n\n[Illustration: DISTRIBUTION OF TOOL-PREPARATION TRADITIONS\n\nTime approximately 100,000 years ago]\n\nThere are certainly a few cases in which flake tools did appear with\nfew or no core-bifaces. The flake-tool group called Clactonian in\nEngland is such a case. Another good, but certainly later case is\nthat of the cave on Mount Carmel in Palestine, where the blended\npre-neanderthaloid, 70 per cent modern-type skulls were found. Here, in\nthe same level with the skulls, were 9,784 flint tools. Of these, only\nthree--doubtless strays--were core-bifaces; all the rest were flake\ntools or flake chips. We noted above how the Font�chevade cave ran to\nflake tools. The only conclusion I would draw from this is that times\nand circumstances did exist in which prehistoric men needed only flake\ntools. So they only made flake tools for those particular times and\ncircumstances.\n\n\nLIFE IN EARLIEST TIMES\n\nWhat do we actually know of life in these earliest times? In the\nglacial gravels, or in the terrace gravels of rivers once swollen by\nfloods of melt water or heavy rains, or on the windswept deserts, we\nfind stone tools. The earliest and coarsest of these are the pebble\ntools. We do not yet know what the men who made them looked like,\nalthough the Sterkfontein australopithecines probably give us a good\nhint. Then begin the more formal tool preparation traditions of the\nwest--the core-bifaces and the flake tools--and the chopper-chopping\ntool series of the farther east. There is an occasional roughly worked\npiece of bone. From the gravels which yield the Clactonian flakes of\nEngland comes the fire-hardened point of a wooden spear. There are\nalso the chance finds of the fossil human bones themselves, of which\nwe spoke in the last chapter. Aside from the cave of Peking man, none\nof the earliest tools have been found in caves. Open air or �workshop�\nsites which do not seem to have been disturbed later by some geological\nagency are very rare.\n\nThe chart on page 65 shows graphically what the situation in\nwest-central Europe seems to have been. It is not yet certain whether\nthere were pebble tools there or not. The Font�chevade cave comes\ninto the picture about 100,000 years ago or more. But for the earlier\nhundreds of thousands of years--below the red-dotted line on the\nchart--the tools we find come almost entirely from the haphazard\nmixture within the geological contexts.\n\nThe stone tools of each of the earlier traditions are the simplest\nkinds of all-purpose tools. Almost any one of them could be used for\nhacking, chopping, cutting, and scraping; so the men who used them must\nhave been living in a rough and ready sort of way. They found or hunted\ntheir food wherever they could. In the anthropological jargon, they\nwere �food-gatherers,� pure and simple.\n\nBecause of the mixture in the gravels and in the materials they\ncarried, we can�t be sure which animals these men hunted. Bones of\nthe larger animals turn up in the gravels, but they could just as\nwell belong to the animals who hunted the men, rather than the other\nway about. We don�t know. This is why camp sites like Commont�s and\nOlorgesailie in Kenya are so important when we do find them. The animal\nbones at Olorgesailie belonged to various mammals of extremely large\nsize. Probably they were taken in pit-traps, but there are a number of\ngroups of three round stones on the site which suggest that the people\nused bolas. The South American Indians used three-ball bolas, with the\nstones in separate leather bags connected by thongs. These were whirled\nand then thrown through the air so as to entangle the feet of a fleeing\nanimal.\n\nProfessor F. Clark Howell recently returned from excavating another\nimportant open air site at Isimila in Tanganyika. The site yielded\nthe bones of many fossil animals and also thousands of core-bifaces,\nflakes, and choppers. But Howell�s reconstruction of the food-getting\nhabits of the Isimila people certainly suggests that the word �hunting�\nis too dignified for what they did; �scavenging� would be much nearer\nthe mark.\n\nDuring a great part of this time the climate was warm and pleasant. The\nsecond interglacial period (the time between the second and third great\nalpine glaciations) lasted a long time, and during much of this time\nthe climate may have been even better than ours is now. We don�t know\nthat earlier prehistoric men in Europe or Africa lived in caves. They\nmay not have needed to; much of the weather may have been so nice that\nthey lived in the open. Perhaps they didn�t wear clothes, either.\n\n\nWHAT THE PEKING CAVE-FINDS TELL US\n\nThe one early cave-dwelling we have found is that of Peking man, in\nChina. Peking man had fire. He probably cooked his meat, or used\nthe fire to keep dangerous animals away from his den. In the cave\nwere bones of dangerous animals, members of the wolf, bear, and cat\nfamilies. Some of the cat bones belonged to beasts larger than tigers.\nThere were also bones of other wild animals: buffalo, camel, deer,\nelephants, horses, sheep, and even ostriches. Seventy per cent of the\nanimals Peking man killed were fallow deer. It�s much too cold and dry\nin north China for all these animals to live there today. So this list\nhelps us know that the weather was reasonably warm, and that there was\nenough rain to grow grass for the grazing animals. The list also helps\nthe paleontologists to date the find.\n\nPeking man also seems to have eaten plant food, for there are hackberry\nseeds in the debris of the cave. His tools were made of sandstone and\nquartz and sometimes of a rather bad flint. As we�ve already seen, they\nbelong in the chopper-tool tradition. It seems fairly clear that some\nof the edges were chipped by right-handed people. There are also many\nsplit pieces of heavy bone. Peking man probably split them so he could\neat the bone marrow, but he may have used some of them as tools.\n\nMany of these split bones were the bones of Peking men. Each one of the\nskulls had already had the base broken out of it. In no case were any\nof the bones resting together in their natural relation to one another.\nThere is nothing like a burial; all of the bones are scattered. Now\nit�s true that animals could have scattered bodies that were not cared\nfor or buried. But splitting bones lengthwise and carefully removing\nthe base of a skull call for both the tools and the people to use them.\nIt�s pretty clear who the people were. Peking man was a cannibal.\n\n       *       *       *       *       *\n\nThis rounds out about all we can say of the life and times of early\nprehistoric men. In those days life was rough. You evidently had to\nwatch out not only for dangerous animals but also for your fellow men.\nYou ate whatever you could catch or find growing. But you had sense\nenough to build fires, and you had already formed certain habits for\nmaking the kinds of stone tools you needed. That�s about all we know.\nBut I think we�ll have to admit that cultural beginnings had been made,\nand that these early people were really _men_.\n\n\n\n\nMORE EVIDENCE of Culture\n\n[Illustration]\n\n\nWhile the dating is not yet sure, the material that we get from caves\nin Europe must go back to about 100,000 years ago; the time of the\nclassic Neanderthal group followed soon afterwards. We don�t know why\nthere is no earlier material in the caves; apparently they were not\nused before the last interglacial phase (the period just before the\nlast great glaciation). We know that men of the classic Neanderthal\ngroup were living in caves from about 75,000 to 45,000 years ago.\nNew radioactive carbon dates even suggest that some of the traces of\nculture we�ll describe in this chapter may have lasted to about 35,000\nyears ago. Probably some of the pre-neanderthaloid types of men had\nalso lived in caves. But we have so far found their bones in caves only\nin Palestine and at Font�chevade.\n\n\nTHE CAVE LAYERS\n\nIn parts of France, some peasants still live in caves. In prehistoric\ntime, many generations of people lived in them. As a result, many\ncaves have deep layers of debris. The first people moved in and lived\non the rock floor. They threw on the floor whatever they didn�t want,\nand they tracked in mud; nobody bothered to clean house in those days.\nTheir debris--junk and mud and garbage and what not--became packed\ninto a layer. As time went on, and generations passed, the layer grew\nthicker. Then there might have been a break in the occupation of the\ncave for a while. Perhaps the game animals got scarce and the people\nmoved away; or maybe the cave became flooded. Later on, other people\nmoved in and began making a new layer of their own on top of the first\nlayer. Perhaps this process of layering went on in the same cave for a\nhundred thousand years; you can see what happened. The drawing on this\npage shows a section through such a cave. The earliest layer is on the\nbottom, the latest one on top. They go in order from bottom to top,\nearliest to latest. This is the _stratification_ we talked about (p.\n12).\n\n[Illustration: SECTION OF SHELTER ON LOWER TERRACE, LE MOUSTIER]\n\nWhile we may find a mix-up in caves, it�s not nearly as bad as the\nmixing up that was done by glaciers. The animal bones and shells, the\nfireplaces, the bones of men, and the tools the men made all belong\ntogether, if they come from one layer. That�s the reason why the cave\nof Peking man is so important. It is also the reason why the caves in\nEurope and the Near East are so important. We can get an idea of which\nthings belong together and which lot came earliest and which latest.\n\nIn most cases, prehistoric men lived only in the mouths of caves.\nThey didn�t like the dark inner chambers as places to live in. They\npreferred rock-shelters, at the bases of overhanging cliffs, if there\nwas enough overhang to give shelter. When the weather was good, they no\ndoubt lived in the open air as well. I�ll go on using the term �cave�\nsince it�s more familiar, but remember that I really mean rock-shelter,\nas a place in which people actually lived.\n\nThe most important European cave sites are in Spain, France, and\ncentral Europe; there are also sites in England and Italy. A few caves\nare known in the Near East and Africa, and no doubt more sites will be\nfound when the out-of-the-way parts of Europe, Africa, and Asia are\nstudied.\n\n\nAN �INDUSTRY� DEFINED\n\nWe have already seen that the earliest European cave materials are\nthose from the cave of Font�chevade. Movius feels certain that the\nlowest materials here date back well into the third interglacial stage,\nthat which lay between the Riss (next to the last) and the W�rm I\n(first stage of the last) alpine glaciations. This material consists\nof an _industry_ of stone tools, apparently all made in the flake\ntradition. This is the first time we have used the word �industry.�\nIt is useful to call all of the different tools found together in one\nlayer and made of _one kind of material_ an industry; that is, the\ntools must be found together as men left them. Tools taken from the\nglacial gravels (or from windswept desert surfaces or river gravels\nor any geological deposit) are not �together� in this sense. We might\nsay the latter have only �geological,� not �archeological� context.\nArcheological context means finding things just as men left them. We\ncan tell what tools go together in an �industrial� sense only if we\nhave archeological context.\n\nUp to now, the only things we could have called �industries� were the\nworked stone industry and perhaps the worked (?) bone industry of the\nPeking cave. We could add some of the very clear cases of open air\nsites, like Olorgesailie. We couldn�t use the term for the stone tools\nfrom the glacial gravels, because we do not know which tools belonged\ntogether. But when the cave materials begin to appear in Europe, we can\nbegin to speak of industries. Most of the European caves of this time\ncontain industries of flint tools alone.\n\n\nTHE EARLIEST EUROPEAN CAVE LAYERS\n\nWe�ve just mentioned the industry from what is said to be the oldest\ninhabited cave in Europe; that is, the industry from the deepest layer\nof the site at Font�chevade. Apparently it doesn�t amount to much. The\ntools are made of stone, in the flake tradition, and are very poorly\nworked. This industry is called _Tayacian_. Its type tool seems to be\na smallish flake tool, but there are also larger flakes which seem to\nhave been fashioned for hacking. In fact, the type tool seems to be\nsimply a smaller edition of the Clactonian tool (pictured on p. 45).\n\nNone of the Font�chevade tools are really good. There are scrapers,\nand more or less pointed tools, and tools that may have been used\nfor hacking and chopping. Many of the tools from the earlier glacial\ngravels are better made than those of this first industry we see in\na European cave. There is so little of this material available that\nwe do not know which is really typical and which is not. You would\nprobably find it hard to see much difference between this industry and\na collection of tools of the type called Clactonian, taken from the\nglacial gravels, especially if the Clactonian tools were small-sized.\n\nThe stone industry of the bottommost layer of the Mount Carmel cave,\nin Palestine, where somewhat similar tools were found, has also been\ncalled Tayacian.\n\nI shall have to bring in many unfamiliar words for the names of the\nindustries. The industries are usually named after the places where\nthey were first found, and since these were in most cases in France,\nmost of the names which follow will be of French origin. However,\nthe names have simply become handles and are in use far beyond the\nboundaries of France. It would be better if we had a non-place-name\nterminology, but archeologists have not yet been able to agree on such\na terminology.\n\n\nTHE ACHEULEAN INDUSTRY\n\nBoth in France and in Palestine, as well as in some African cave\nsites, the next layers in the deep caves have an industry in both the\ncore-biface and the flake traditions. The core-biface tools usually\nmake up less than half of all the tools in the industry. However,\nthe name of the biface type of tool is generally given to the whole\nindustry. It is called the _Acheulean_, actually a late form of it, as\n�Acheulean� is also used for earlier core-biface tools taken from the\nglacial gravels. In western Europe, the name used is _Upper Acheulean_\nor _Micoquian_. The same terms have been borrowed to name layers E and\nF in the Tabun cave, on Mount Carmel in Palestine.\n\nThe Acheulean core-biface type of tool is worked on two faces so as\nto give a cutting edge all around. The outline of its front view may\nbe oval, or egg-shaped, or a quite pointed pear shape. The large\nchip-scars of the Acheulean core-bifaces are shallow and flat. It is\nsuspected that this resulted from the removal of the chips with a\nwooden club; the deep chip-scars of the earlier Abbevillian core-biface\ncame from beating the tool against a stone anvil. These tools are\nreally the best and also the final products of the core-biface\ntradition. We first noticed the tradition in the early glacial gravels\n(p. 43); now we see its end, but also its finest examples, in the\ndeeper cave levels.\n\nThe flake tools, which really make up the greater bulk of this\nindustry, are simple scrapers and chips with sharp cutting edges. The\nhabits used to prepare them must have been pretty much the same as\nthose used for at least one of the flake industries we shall mention\npresently.\n\nThere is very little else in these early cave layers. We do not have\na proper �industry� of bone tools. There are traces of fire, and of\nanimal bones, and a few shells. In Palestine, there are many more\nbones of deer than of gazelle in these layers; the deer lives in a\nwetter climate than does the gazelle. In the European cave layers, the\nanimal bones are those of beasts that live in a warm climate. They\nbelonged in the last interglacial period. We have not yet found the\nbones of fossil men definitely in place with this industry.\n\n[Illustration: ACHEULEAN BIFACE]\n\n\nFLAKE INDUSTRIES FROM THE CAVES\n\nTwo more stone industries--the _Levalloisian_ and the\n�_Mousterian_�--turn up at approximately the same time in the European\ncave layers. Their tools seem to be mainly in the flake tradition,\nbut according to some of the authorities their preparation also shows\nsome combination with the habits by which the core-biface tools were\nprepared.\n\nNow notice that I don�t tell you the Levalloisian and the �Mousterian�\nlayers are both above the late Acheulean layers. Look at the cave\nsection (p. 57) and you�ll find that some �Mousterian of Acheulean\ntradition� appears above some �typical Mousterian.� This means that\nthere may be some kinds of Acheulean industries that are later than\nsome kinds of �Mousterian.� The same is true of the Levalloisian.\n\nThere were now several different kinds of habits that men used in\nmaking stone tools. These habits were based on either one or the other\nof the two traditions--core-biface or flake--or on combinations of\nthe habits used in the preparation techniques of both traditions. All\nwere popular at about the same time. So we find that people who made\none kind of stone tool industry lived in a cave for a while. Then they\ngave up the cave for some reason, and people with another industry\nmoved in. Then the first people came back--or at least somebody with\nthe same tool-making habits as the first people. Or maybe a third group\nof tool-makers moved in. The people who had these different habits for\nmaking their stone tools seem to have moved around a good deal. They no\ndoubt borrowed and exchanged tricks of the trade with each other. There\nwere no patent laws in those days.\n\nThe extremely complicated interrelationships of the different habits\nused by the tool-makers of this range of time are at last being\nsystematically studied. M. Fran�ois Bordes has developed a statistical\nmethod of great importance for understanding these tool preparation\nhabits.\n\n\nTHE LEVALLOISIAN AND MOUSTERIAN\n\nThe easiest Levalloisian tool to spot is a big flake tool. The trick\nin making it was to fashion carefully a big chunk of stone (called\nthe Levalloisian �tortoise core,� because it resembles the shape of\na turtle-shell) and then to whack this in such a way that a large\nflake flew off. This large thin flake, with sharp cutting edges, is\nthe finished Levalloisian tool. There were various other tools in a\nLevalloisian industry, but this is the characteristic _Levalloisian_\ntool.\n\nThere are several �typical Mousterian� stone tools. Different from\nthe tools of the Levalloisian type, these were made from �disc-like\ncores.� There are medium-sized flake �side scrapers.� There are also\nsome small pointed tools and some small �hand axes.� The last of these\ntool types is often a flake worked on both of the flat sides (that\nis, bifacially). There are also pieces of flint worked into the form\nof crude balls. The pointed tools may have been fixed on shafts to\nmake short jabbing spears; the round flint balls may have been used as\nbolas. Actually, we don�t _know_ what either tool was used for. The\npoints and side scrapers are illustrated (pp. 64 and 66).\n\n[Illustration: LEVALLOIS FLAKE]\n\n\nTHE MIXING OF TRADITIONS\n\nNowadays the archeologists are less and less sure of the importance\nof any one specific tool type and name. Twenty years ago, they used\nto speak simply of Acheulean or Levalloisian or Mousterian tools.\nNow, more and more, _all_ of the tools from some one layer in a\ncave are called an �industry,� which is given a mixed name. Thus we\nhave �Levalloiso-Mousterian,� and �Acheuleo-Levalloisian,� and even\n�Acheuleo-Mousterian� (or �Mousterian of Acheulean tradition�). Bordes�\nsystematic work is beginning to clear up some of our confusion.\n\nThe time of these late Acheuleo-Levalloiso-Mousterioid industries\nis from perhaps as early as 100,000 years ago. It may have lasted\nuntil well past 50,000 years ago. This was the time of the first\nphase of the last great glaciation. It was also the time that the\nclassic group of Neanderthal men was living in Europe. A number of\nthe Neanderthal fossil finds come from these cave layers. Before the\ndifferent habits of tool preparation were understood it used to be\npopular to say Neanderthal man was �Mousterian man.� I think this is\nwrong. What used to be called �Mousterian� is now known to be a variety\nof industries with tools of both core-biface and flake habits, and\nso mixed that the word �Mousterian� used alone really doesn�t mean\nanything. The Neanderthalers doubtless understood the tool preparation\nhabits by means of which Acheulean, Levalloisian and Mousterian type\ntools were produced. We also have the more modern-like Mount Carmel\npeople, found in a cave layer of Palestine with tools almost entirely\nin the flake tradition, called �Levalloiso-Mousterian,� and the\nFont�chevade-Tayacian (p. 59).\n\n[Illustration: MOUSTERIAN POINT]\n\n\nOTHER SUGGESTIONS OF LIFE IN THE EARLY CAVE LAYERS\n\nExcept for the stone tools, what do we know of the way men lived in the\ntime range after 100,000 to perhaps 40,000 years ago or even later?\nWe know that in the area from Europe to Palestine, at least some of\nthe people (some of the time) lived in the fronts of caves and warmed\nthemselves over fires. In Europe, in the cave layers of these times,\nwe find the bones of different animals; the bones in the lowest layers\nbelong to animals that lived in a warm climate; above them are the\nbones of those who could stand the cold, like the reindeer and mammoth.\nThus, the meat diet must have been changing, as the glacier crept\nfarther south. Shells and possibly fish bones have lasted in these\ncave layers, but there is not a trace of the vegetable foods and the\nnuts and berries and other wild fruits that must have been eaten when\nthey could be found.\n\n[Illustration: CHART SHOWING PRESENT UNDERSTANDING OF RELATIONSHIPS AND\nSUCCESSION OF TOOL-PREPARATION TRADITIONS, INDUSTRIES, AND ASSEMBLAGES\nOF WEST-CENTRAL EUROPE\n\nWavy lines indicate transitions in industrial habits. These transitions\nare not yet understood in detail. The glacial and climatic scheme shown\nis the alpine one.]\n\nBone tools have also been found from this period. Some are called\nscrapers, and there are also long chisel-like leg-bone fragments\nbelieved to have been used for skinning animals. Larger hunks of bone,\nwhich seem to have served as anvils or chopping blocks, are fairly\ncommon.\n\nBits of mineral, used as coloring matter, have also been found. We\ndon�t know what the color was used for.\n\n[Illustration: MOUSTERIAN SIDE SCRAPER]\n\nThere is a small but certain number of cases of intentional burials.\nThese burials have been found on the floors of the caves; in other\nwords, the people dug graves in the places where they lived. The holes\nmade for the graves were small. For this reason (or perhaps for some\nother?) the bodies were in a curled-up or contracted position. Flint or\nbone tools or pieces of meat seem to have been put in with some of the\nbodies. In several cases, flat stones had been laid over the graves.\n\n\nTOOLS FROM AFRICA AND ASIA ABOUT 100,000 YEARS AGO\n\nProfessor Movius characterizes early prehistoric Africa as a continent\nshowing a variety of stone industries. Some of these industries were\npurely local developments and some were practically identical with\nindustries found in Europe at the same time. From northwest Africa\nto Capetown--excepting the tropical rain forest region of the west\ncenter--tools of developed Acheulean, Levalloisian, and Mousterian\ntypes have been recognized. Often they are named after African place\nnames.\n\nIn east and south Africa lived people whose industries show a\ndevelopment of the Levalloisian technique. Such industries are\ncalled Stillbay. Another industry, developed on the basis of the\nAcheulean technique, is called Fauresmith. From the northwest comes\nan industry with tanged points and flake-blades; this is called the\nAterian. The tropical rain forest region contained people whose stone\ntools apparently show adjustment to this peculiar environment; the\nso-called Sangoan industry includes stone picks, adzes, core-bifaces\nof specialized Acheulean type, and bifacial points which were probably\nspearheads.\n\nIn western Asia, even as far as the east coast of India, the tools of\nthe Eurafrican core-biface and flake tool traditions continued to be\nused. But in the Far East, as we noted in the last chapter, men had\ndeveloped characteristic stone chopper and chopping tools. This tool\npreparation tradition--basically a pebble tool tradition--lasted to the\nvery end of the Ice Age.\n\nWhen more intact open air sites such as that of an earlier time at\nOlorgesailie, and more stratified cave sites are found and excavated\nin Asia and Africa, we shall be able to get a more complete picture.\nSo far, our picture of the general cultural level of the Old World at\nabout 100,000 years ago--and soon afterwards--is best from Europe, but\nit is still far from complete there, too.\n\n\nCULTURE AT THE BEGINNING OF THE LAST GREAT GLACIAL PERIOD\n\nThe few things we have found must indicate only a very small part\nof the total activities of the people who lived at the time. All of\nthe things they made of wood and bark, of skins, of anything soft,\nare gone. The fact that burials were made, at least in Europe and\nPalestine, is pretty clear proof that the people had some notion of a\nlife after death. But what this notion really was, or what gods (if\nany) men believed in, we cannot know. Dr. Movius has also reminded me\nof the so-called bear cults--cases in which caves have been found which\ncontain the skulls of bears in apparently purposeful arrangement. This\nmight suggest some notion of hoarding up the spirits or the strength of\nbears killed in the hunt. Probably the people lived in small groups,\nas hunting and food-gathering seldom provide enough food for large\ngroups of people. These groups probably had some kind of leader or\n�chief.� Very likely the rude beginnings of rules for community life\nand politics, and even law, were being made. But what these were, we\ndo not know. We can only guess about such things, as we can only guess\nabout many others; for example, how the idea of a family must have been\ngrowing, and how there may have been witch doctors who made beginnings\nin medicine or in art, in the materials they gathered for their trade.\n\nThe stone tools help us most. They have lasted, and we can find\nthem. As they come to us, from this cave or that, and from this\nlayer or that, the tool industries show a variety of combinations\nof the different basic habits or traditions of tool preparation.\nThis seems only natural, as the groups of people must have been very\nsmall. The mixtures and blendings of the habits used in making stone\ntools must mean that there were also mixtures and blends in many of\nthe other ideas and beliefs of these small groups. And what this\nprobably means is that there was no one _culture_ of the time. It is\ncertainly unlikely that there were simply three cultures, �Acheulean,�\n�Levalloisian,� and �Mousterian,� as has been thought in the past.\nRather there must have been a great variety of loosely related cultures\nat about the same stage of advancement. We could say, too, that here\nwe really begin to see, for the first time, that remarkable ability\nof men to adapt themselves to a variety of conditions. We shall see\nthis adaptive ability even more clearly as time goes on and the record\nbecomes more complete.\n\nOver how great an area did these loosely related cultures reach in\nthe time 75,000 to 45,000 or even as late as 35,000 years ago? We\nhave described stone tools made in one or another of the flake and\ncore-biface habits, for an enormous area. It covers all of Europe, all\nof Africa, the Near East, and parts of India. It is perfectly possible\nthat the flake and core-biface habits lasted on after 35,000 years ago,\nin some places outside of Europe. In northern Africa, for example, we\nare certain that they did (see chart, p. 72).\n\nOn the other hand, in the Far East (China, Burma, Java) and in northern\nIndia, the tools of the old chopper-tool tradition were still being\nmade. Out there, we must assume, there was a different set of loosely\nrelated cultures. At least, there was a different set of loosely\nrelated habits for the making of tools. But the men who made them must\nhave looked much like the men of the West. Their tools were different,\nbut just as useful.\n\nAs to what the men of the West looked like, I�ve already hinted at all\nwe know so far (pp. 29 ff.). The Neanderthalers were present at\nthe time. Some more modern-like men must have been about, too, since\nfossils of them have turned up at Mount Carmel in Palestine, and at\nTeshik Tash, in Trans-caspian Russia. It is still too soon to know\nwhether certain combinations of tools within industries were made\nonly by certain physical types of men. But since tools of both the\ncore-biface and the flake traditions, and their blends, turn up from\nSouth Africa to England to India, it is most unlikely that only one\ntype of man used only one particular habit in the preparation of tools.\nWhat seems perfectly clear is that men in Africa and men in India were\nmaking just as good tools as the men who lived in western Europe.\n\n\n\n\nEARLY MODERNS\n\n[Illustration]\n\n\nFrom some time during the first inter-stadial of the last great\nglaciation (say some time after about 40,000 years ago), we have\nmore accurate dates for the European-Mediterranean area and less\naccurate ones for the rest of the Old World. This is probably\nbecause the effects of the last glaciation have been studied in the\nEuropean-Mediterranean area more than they have been elsewhere.\n\n\nA NEW TRADITION APPEARS\n\nSomething new was probably beginning to happen in the\nEuropean-Mediterranean area about 40,000 years ago, though all the\nrest of the Old World seems to have been going on as it had been. I\ncan�t be sure of this because the information we are using as a basis\nfor dates is very inaccurate for the areas outside of Europe and the\nMediterranean.\n\nWe can at least make a guess. In Egypt and north Africa, men were still\nusing the old methods of making stone tools. This was especially true\nof flake tools of the Levalloisian type, save that they were growing\nsmaller and smaller as time went on. But at the same time, a new\ntradition was becoming popular in westernmost Asia and in Europe. This\nwas the blade-tool tradition.\n\n\nBLADE TOOLS\n\nA stone blade is really just a long parallel-sided flake, as the\ndrawing shows. It has sharp cutting edges, and makes a very useful\nknife. The real trick is to be able to make one. It is almost\nimpossible to make a blade out of any stone but flint or a natural\nvolcanic glass called obsidian. And even if you have flint or obsidian,\nyou first have to work up a special cone-shaped �blade-core,� from\nwhich to whack off blades.\n\n[Illustration: PLAIN BLADE]\n\nYou whack with a hammer stone against a bone or antler punch which is\ndirected at the proper place on the blade-core. The blade-core has to\nbe well supported or gripped while this is going on. To get a good\nflint blade tool takes a great deal of know-how.\n\nRemember that a tradition in stone tools means no more than that some\nparticular way of making the tools got started and lasted a long time.\nMen who made some tools in one tradition or set of habits would also\nmake other tools for different purposes by means of another tradition\nor set of habits. It was even possible for the two sets of habits to\nbecome combined.\n\n\nTHE EARLIEST BLADE TOOLS\n\nThe oldest blade tools we have found were deep down in the layers of\nthe Mount Carmel caves, in Tabun Eb and Ea. Similar tools have been\nfound in equally early cave levels in Syria; their popularity there\nseems to fluctuate a bit. Some more or less parallel-sided flakes are\nknown in the Levalloisian industry in France, but they are probably\nno earlier than Tabun E. The Tabun blades are part of a local late\n�Acheulean� industry, which is characterized by core-biface �hand\naxes,� but which has many flake tools as well. Professor F. E.\nZeuner believes that this industry may be more than 120,000 years old;\nactually its date has not yet been fixed, but it is very old--older\nthan the fossil finds of modern-like men in the same caves.\n\n[Illustration: SUCCESSION OF ICE AGE FLINT TYPES, INDUSTRIES, AND\nASSEMBLAGES, AND OF FOSSIL MEN, IN NORTHWESTERN EURAFRASIA]\n\nFor some reason, the habit of making blades in Palestine and Syria was\ninterrupted. Blades only reappeared there at about the same time they\nwere first made in Europe, some time after 45,000 years ago; that is,\nafter the first phase of the last glaciation was ended.\n\n[Illustration: BACKED BLADE]\n\nWe are not sure just where the earliest _persisting_ habits for the\nproduction of blade tools developed. Impressed by the very early\nmomentary appearance of blades at Tabun on Mount Carmel, Professor\nDorothy A. Garrod first favored the Near East as a center of origin.\nShe spoke of �some as yet unidentified Asiatic centre,� which she\nthought might be in the highlands of Iran or just beyond. But more\nrecent work has been done in this area, especially by Professor Coon,\nand the blade tools do not seem to have an early appearance there. When\nthe blade tools reappear in the Syro-Palestinian area, they do so in\nindustries which also include Levalloiso-Mousterian flake tools. From\nthe point of view of form and workmanship, the blade tools themselves\nare not so fine as those which seem to be making their appearance\nin western Europe about the same time. There is a characteristic\nSyro-Palestinian flake point, possibly a projectile tip, called the\nEmiran, which is not known from Europe. The appearance of blade tools,\ntogether with Levalloiso-Mousterian flakes, continues even after the\nEmiran point has gone out of use.\n\nIt seems clear that the production of blade tools did not immediately\nswamp the set of older habits in Europe, too; the use of flake\ntools also continued there. This was not so apparent to the older\narcheologists, whose attention was focused on individual tool types. It\nis not, in fact, impossible--although it is certainly not proved--that\nthe technique developed in the preparation of the Levalloisian tortoise\ncore (and the striking of the Levalloisian flake from it) might have\nfollowed through to the conical core and punch technique for the\nproduction of blades. Professor Garrod is much impressed with the speed\nof change during the later phases of the last glaciation, and its\nprobable consequences. She speaks of �the greater number of industries\nhaving enough individual character to be classified as distinct ...\nsince evolution now starts to outstrip diffusion.� Her �evolution� here\nis of course an industrial evolution rather than a biological one.\nCertainly the people of Europe had begun to make blade tools during\nthe warm spell after the first phase of the last glaciation. By about\n40,000 years ago blades were well established. The bones of the blade\ntool makers we�ve found so far indicate that anatomically modern men\nhad now certainly appeared. Unfortunately, only a few fossil men have\nso far been found from the very beginning of the blade tool range in\nEurope (or elsewhere). What I certainly shall _not_ tell you is that\nconquering bands of fine, strong, anatomically modern men, armed with\nsuperior blade tools, came sweeping out of the East to exterminate the\nlowly Neanderthalers. Even if we don�t know exactly what happened, I�d\nlay a good bet it wasn�t that simple.\n\nWe do know a good deal about different blade industries in Europe.\nAlmost all of them come from cave layers. There is a great deal of\ncomplication in what we find. The chart (p. 72) tries to simplify\nthis complication; in fact, it doubtless simplifies it too much. But\nit may suggest all the complication of industries which is going\non at this time. You will note that the upper portion of my much\nsimpler chart (p. 65) covers the same material (in the section\nmarked �Various Blade-Tool Industries�). That chart is certainly too\nsimplified.\n\nYou will realize that all this complication comes not only from\nthe fact that we are finding more material. It is due also to the\nincreasing ability of men to adapt themselves to a great variety of\nsituations. Their tools indicate this adaptiveness. We know there was\na good deal of climatic change at this time. The plants and animals\nthat men used for food were changing, too. The great variety of tools\nand industries we now find reflect these changes and the ability of men\nto keep up with the times. Now, for example, is the first time we are\nsure that there are tools to _make_ other tools. They also show men�s\nincreasing ability to adapt themselves.\n\n\nSPECIAL TYPES OF BLADE TOOLS\n\nThe most useful tools that appear at this time were made from blades.\n\n  1. The �backed� blade. This is a knife made of a flint blade, with\n     one edge purposely blunted, probably to save the user�s fingers\n     from being cut. There are several shapes of backed blades (p.\n     73).\n\n  [Illustration: TWO BURINS]\n\n  2. The _burin_ or �graver.� The burin was the original chisel. Its\n     cutting edge is _transverse_, like a chisel�s. Some burins are\n     made like a screw-driver, save that burins are sharp. Others have\n     edges more like the blade of a chisel or a push plane, with\n     only one bevel. Burins were probably used to make slots in wood\n     and bone; that is, to make handles or shafts for other tools.\n     They must also be the tools with which much of the engraving on\n     bone (see p. 83) was done. There is a bewildering variety of\n     different kinds of burins.\n\n[Illustration: TANGED POINT]\n\n  3. The �tanged� point. These stone points were used to tip arrows or\n     light spears. They were made from blades, and they had a long tang\n     at the bottom where they were fixed to the shaft. At the place\n     where the tang met the main body of the stone point, there was\n     a marked �shoulder,� the beginnings of a barb. Such points had\n     either one or two shoulders.\n\n[Illustration: NOTCHED BLADE]\n\n  4. The �notched� or �strangulated� blade. Along with the points for\n     arrows or light spears must go a tool to prepare the arrow or\n     spear shaft. Today, such a tool would be called a �draw-knife� or\n     a �spoke-shave,� and this is what the notched blades probably are.\n     Our spoke-shaves have sharp straight cutting blades and really\n     �shave.� Notched blades of flint probably scraped rather than cut.\n\n  5. The �awl,� �drill,� or �borer.� These blade tools are worked out\n     to a spike-like point. They must have been used for making holes\n     in wood, bone, shell, skin, or other things.\n\n[Illustration: DRILL OR AWL]\n\n  6. The �end-scraper on a blade� is a tool with one or both ends\n     worked so as to give a good scraping edge. It could have been used\n     to hollow out wood or bone, scrape hides, remove bark from trees,\n     and a number of other things (p. 78).\n\nThere is one very special type of flint tool, which is best known from\nwestern Europe in an industry called the Solutrean. These tools were\nusually made of blades, but the best examples are so carefully worked\non both sides (bifacially) that it is impossible to see the original\nblade. This tool is\n\n  7. The �laurel leaf� point. Some of these tools were long and\n     dagger-like, and must have been used as knives or daggers. Others\n     were small, called �willow leaf,� and must have been mounted on\n     spear or arrow shafts. Another typical Solutrean tool is the\n     �shouldered� point. Both the �laurel leaf� and �shouldered� point\n     types are illustrated (see above and p. 79).\n\n[Illustration: END-SCRAPER ON A BLADE]\n\n[Illustration: LAUREL LEAF POINT]\n\nThe industries characterized by tools in the blade tradition also\nyield some flake and core tools. We will end this list with two types\nof tools that appear at this time. The first is made of a flake; the\nsecond is a core tool.\n\n[Illustration: SHOULDERED POINT]\n\n  8. The �keel-shaped round scraper� is usually small and quite round,\n     and has had chips removed up to a peak in the center. It is called\n     �keel-shaped� because it is supposed to look (when upside down)\n     like a section through a boat. Actually, it looks more like a tent\n     or an umbrella. Its outer edges are sharp all the way around, and\n     it was probably a general purpose scraping tool (see illustration,\n     p. 81).\n\n  9. The �keel-shaped nosed scraper� is a much larger and heavier tool\n     than the round scraper. It was made on a core with a flat bottom,\n     and has one nicely worked end or �nose.� Such tools are usually\n     large enough to be easily grasped, and probably were used like\n     push planes (see illustration, p. 81).\n\n[Illustration: KEEL-SHAPED ROUND SCRAPER]\n\n[Illustration: KEEL-SHAPED NOSED SCRAPER]\n\nThe stone tools (usually made of flint) we have just listed are among\nthe most easily recognized blade tools, although they show differences\nin detail at different times. There are also many other kinds. Not\nall of these tools appear in any one industry at one time. Thus the\ndifferent industries shown in the chart (p. 72) each have only some\nof the blade tools we�ve just listed, and also a few flake tools. Some\nindustries even have a few core tools. The particular types of blade\ntools appearing in one cave layer or another, and the frequency of\nappearance of the different types, tell which industry we have in each\nlayer.\n\n\nOTHER KINDS OF TOOLS\n\nBy this time in Europe--say from about 40,000 to about 10,000 years\nago--we begin to find other kinds of material too. Bone tools begin\nto appear. There are knives, pins, needles with eyes, and little\ndouble-pointed straight bars of bone that were probably fish-hooks. The\nfish-line would have been fastened in the center of the bar; when the\nfish swallowed the bait, the bar would have caught cross-wise in the\nfish�s mouth.\n\nOne quite special kind of bone tool is a long flat point for a light\nspear. It has a deep notch cut up into the breadth of its base, and is\ncalled a �split-based bone point� (p. 82). We know examples of bone\nbeads from these times, and of bone handles for flint tools. Pierced\nteeth of some animals were worn as beads or pendants, but I am not sure\nthat elks� teeth were worn this early. There are even spool-shaped\n�buttons� or toggles.\n\n[Illustration: SPLIT-BASED BONE POINT]\n\n[Illustration: SPEAR-THROWER]\n\n[Illustration: BONE HARPOON]\n\nAntler came into use for tools, especially in central and western\nEurope. We do not know the use of one particular antler tool that\nhas a large hole bored in one end. One suggestion is that it was\na thong-stropper used to strop or work up hide thongs (see\nillustration, below); another suggestion is that it was an arrow-shaft\nstraightener.\n\nAnother interesting tool, usually of antler, is the spear-thrower,\nwhich is little more than a stick with a notch or hook on one end.\nThe hook fits into the butt end of the spear, and the length of the\nspear-thrower allows you to put much more power into the throw (p.\n82). It works on pretty much the same principle as the sling.\n\nVery fancy harpoons of antler were also made in the latter half of\nthe period in western Europe. These harpoons had barbs on one or both\nsides and a base which would slip out of the shaft (p. 82). Some have\nengraved decoration.\n\n\nTHE BEGINNING OF ART\n\n[Illustration: THONG-STROPPER]\n\nIn western Europe, at least, the period saw the beginning of several\nkinds of art work. It is handy to break the art down into two great\ngroups: the movable art, and the cave paintings and sculpture. The\nmovable art group includes the scratchings, engravings, and modeling\nwhich decorate tools and weapons. Knives, stroppers, spear-throwers,\nharpoons, and sometimes just plain fragments of bone or antler are\noften carved. There is also a group of large flat pebbles which seem\nalmost to have served as sketch blocks. The surfaces of these various\nobjects may show animals, or rather abstract floral designs, or\ngeometric designs.\n\n[Illustration: �VENUS� FIGURINE FROM WILLENDORF]\n\nSome of the movable art is not done on tools. The most remarkable\nexamples of this class are little figures of women. These women seem to\nbe pregnant, and their most female characteristics are much emphasized.\nIt is thought that these �Venus� or �Mother-goddess� figurines may be\nmeant to show the great forces of nature--fertility and the birth of\nlife.\n\n\nCAVE PAINTINGS\n\nIn the paintings on walls and ceilings of caves we have some examples\nthat compare with the best art of any time. The subjects were usually\nanimals, the great cold-weather beasts of the end of the Ice Age: the\nmammoth, the wooly rhinoceros, the bison, the reindeer, the wild horse,\nthe bear, the wild boar, and wild cattle. As in the movable art, there\nare different styles in the cave art. The really great cave art is\npretty well restricted to southern France and Cantabrian (northwestern)\nSpain.\n\nThere are several interesting things about the �Franco-Cantabrian� cave\nart. It was done deep down in the darkest and most dangerous parts of\nthe caves, although the men lived only in the openings of caves. If you\nthink what they must have had for lights--crude lamps of hollowed stone\nhave been found, which must have burned some kind of oil or grease,\nwith a matted hair or fiber wick--and of the animals that may have\nlurked in the caves, you�ll understand the part about danger. Then,\ntoo, we�re sure the pictures these people painted were not simply to be\nlooked at and admired, for they painted one picture right over other\npictures which had been done earlier. Clearly, it was the _act_ of\n_painting_ that counted. The painter had to go way down into the most\nmysterious depths of the earth and create an animal in paint. Possibly\nhe believed that by doing this he gained some sort of magic power over\nthe same kind of animal when he hunted it in the open air. It certainly\ndoesn�t look as if he cared very much about the picture he painted--as\na finished product to be admired--for he or somebody else soon went\ndown and painted another animal right over the one he had done.\n\nThe cave art of the Franco-Cantabrian style is one of the great\nartistic achievements of all time. The subjects drawn are almost always\nthe larger animals of the time: the bison, wild cattle and horses, the\nwooly rhinoceros, the mammoth, the wild boar, and the bear. In some of\nthe best examples, the beasts are drawn in full color and the paintings\nare remarkably alive and charged with energy. They come from the hands\nof men who knew the great animals well--knew the feel of their fur, the\ntremendous drive of their muscles, and the danger one faced when he\nhunted them.\n\nAnother artistic style has been found in eastern Spain. It includes\nlively drawings, often of people hunting with bow and arrow. The East\nSpanish art is found on open rock faces and in rock-shelters. It is\nless spectacular and apparently more recent than the Franco-Cantabrian\ncave art.\n\n\nLIFE AT THE END OF THE ICE AGE IN EUROPE\n\nLife in these times was probably as good as a hunter could expect it\nto be. Game and fish seem to have been plentiful; berries and wild\nfruits probably were, too. From France to Russia, great pits or\npiles of animal bones have been found. Some of this killing was done\nas our Plains Indians killed the buffalo--by stampeding them over\nsteep river banks or cliffs. There were also good tools for hunting,\nhowever. In western Europe, people lived in the openings of caves and\nunder overhanging rocks. On the great plains of eastern Europe, very\ncrude huts were being built, half underground. The first part of this\ntime must have been cold, for it was the middle and end phases of the\nlast great glaciation. Northern Europe from Scotland to Scandinavia,\nnorthern Germany and Russia, and also the higher mountains to the\nsouth, were certainly covered with ice. But people had fire, and the\nneedles and tools that were used for scraping hides must mean that they\nwore clothing.\n\nIt is clear that men were thinking of a great variety of things beside\nthe tools that helped them get food and shelter. Such burials as we\nfind have more grave-gifts than before. Beads and ornaments and often\nflint, bone, or antler tools are included in the grave, and sometimes\nthe body is sprinkled with red ochre. Red is the color of blood, which\nmeans life, and of fire, which means heat. Professor Childe wonders if\nthe red ochre was a pathetic attempt at magic--to give back to the body\nthe heat that had gone from it. But pathetic or not, it is sure proof\nthat these people were already moved by death as men still are moved by\nit.\n\nTheir art is another example of the direction the human mind was\ntaking. And when I say human, I mean it in the fullest sense, for this\nis the time in which fully modern man has appeared. On page 34, we\nspoke of the Cro-Magnon group and of the Combe Capelle-Br�nn group of\nCaucasoids and of the Grimaldi �Negroids,� who are no longer believed\nto be Negroid. I doubt that any one of these groups produced most of\nthe achievements of the times. It�s not yet absolutely sure which\nparticular group produced the great cave art. The artists were almost\ncertainly a blend of several (no doubt already mixed) groups. The pair\nof Grimaldians were buried in a grave with a sprinkling of red ochre,\nand were provided with shell beads and ornaments and with some blade\ntools of flint. Regardless of the different names once given them by\nthe human paleontologists, each of these groups seems to have shared\nequally in the cultural achievements of the times, for all that the\narcheologists can say.\n\n\nMICROLITHS\n\nOne peculiar set of tools seems to serve as a marker for the very last\nphase of the Ice Age in southwestern Europe. This tool-making habit is\nalso found about the shore of the Mediterranean basin, and it moved\ninto northern Europe as the last glaciation pulled northward. People\nbegan making blade tools of very small size. They learned how to chip\nvery slender and tiny blades from a prepared core. Then they made these\nlittle blades into tiny triangles, half-moons (�lunates�), trapezoids,\nand several other geometric forms. These little tools are called\n�microliths.� They are so small that most of them must have been fixed\nin handles or shafts.\n\n[Illustration: MICROLITHS\n\n  BLADE FRAGMENT\n  BURIN\n  LUNATE\n  TRAPEZOID\n  SCALENE TRIANGLE\n  ARROWHEAD]\n\nWe have found several examples of microliths mounted in shafts. In\nnorthern Europe, where their use soon spread, the microlithic triangles\nor lunates were set in rows down each side of a bone or wood point.\nOne corner of each little triangle stuck out, and the whole thing\nmade a fine barbed harpoon. In historic times in Egypt, geometric\ntrapezoidal microliths were still in use as arrowheads. They were\nfastened--broad end out--on the end of an arrow shaft. It seems queer\nto give an arrow a point shaped like a �T.� Actually, the little points\nwere very sharp, and must have pierced the hides of animals very\neasily. We also think that the broader cutting edge of the point may\nhave caused more bleeding than a pointed arrowhead would. In hunting\nfleet-footed animals like the gazelle, which might run for miles after\nbeing shot with an arrow, it was an advantage to cause as much bleeding\nas possible, for the animal would drop sooner.\n\nWe are not really sure where the microliths were first invented. There\nis some evidence that they appear early in the Near East. Their use\nwas very common in northwest Africa but this came later. The microlith\nmakers who reached south Russia and central Europe possibly moved up\nout of the Near East. Or it may have been the other way around; we\nsimply don�t yet know.\n\nRemember that the microliths we are talking about here were made from\ncarefully prepared little blades, and are often geometric in outline.\nEach microlithic industry proper was made up, in good part, of such\ntiny blade tools. But there were also some normal-sized blade tools and\neven some flake scrapers, in most microlithic industries. I emphasize\nthis bladelet and the geometric character of the microlithic industries\nof the western Old World, since there has sometimes been confusion in\nthe matter. Sometimes small flake chips, utilized as minute pointed\ntools, have been called �microliths.� They may be _microlithic_ in size\nin terms of the general meaning of the word, but they do not seem to\nbelong to the sub-tradition of the blade tool preparation habits which\nwe have been discussing here.\n\n\nLATER BLADE-TOOL INDUSTRIES OF THE NEAR EAST AND AFRICA\n\nThe blade-tool industries of normal size we talked about earlier spread\nfrom Europe to central Siberia. We noted that blade tools were made\nin western Asia too, and early, although Professor Garrod is no longer\nsure that the whole tradition originated in the Near East. If you look\nagain at my chart (p. 72) you will note that in western Asia I list\nsome of the names of the western European industries, but with the\nqualification �-like� (for example, �Gravettian-like�). The western\nAsiatic blade-tool industries do vaguely recall some aspects of those\nof western Europe, but we would probably be better off if we used\ncompletely local names for them. The �Emiran� of my chart is such an\nexample; its industry includes a long spike-like blade point which has\nno western European counterpart.\n\nWhen we last spoke of Africa (p. 66), I told you that stone tools\nthere were continuing in the Levalloisian flake tradition, and were\nbecoming smaller. At some time during this process, two new tool\ntypes appeared in northern Africa: one was the Aterian point with\na tang (p. 67), and the other was a sort of �laurel leaf� point,\ncalled the �Sbaikian.� These two tool types were both produced from\nflakes. The Sbaikian points, especially, are roughly similar to some\nof the Solutrean points of Europe. It has been suggested that both the\nSbaikian and Aterian points may be seen on their way to France through\ntheir appearance in the Spanish cave deposits of Parpallo, but there is\nalso a rival �pre-Solutrean� in central Europe. We still do not know\nwhether there was any contact between the makers of these north African\ntools and the Solutrean tool-makers. What does seem clear is that the\nblade-tool tradition itself arrived late in northern Africa.\n\n\nNETHER AFRICA\n\nBlade tools and �laurel leaf� points and some other probably late\nstone tool types also appear in central and southern Africa. There\nare geometric microliths on bladelets and even some coarse pottery in\neast Africa. There is as yet no good way of telling just where these\nitems belong in time; in broad geological terms they are �late.�\nSome people have guessed that they are as early as similar European\nand Near Eastern examples, but I doubt it. The makers of small-sized\nLevalloisian flake tools occupied much of Africa until very late in\ntime.\n\n\nTHE FAR EAST\n\nIndia and the Far East still seem to be going their own way. In India,\nsome blade tools have been found. These are not well dated, save that\nwe believe they must be post-Pleistocene. In the Far East it looks as\nif the old chopper-tool tradition was still continuing. For Burma,\nDr. Movius feels this is fairly certain; for China he feels even more\ncertain. Actually, we know very little about the Far East at about the\ntime of the last glaciation. This is a shame, too, as you will soon\nagree.\n\n\nTHE NEW WORLD BECOMES INHABITED\n\nAt some time toward the end of the last great glaciation--almost\ncertainly after 20,000 years ago--people began to move over Bering\nStrait, from Asia into America. As you know, the American Indians have\nbeen assumed to be basically Mongoloids. New studies of blood group\ntypes make this somewhat uncertain, but there is no doubt that the\nancestors of the American Indians came from Asia.\n\nThe stone-tool traditions of Europe, Africa, the Near and Middle East,\nand central Siberia, did _not_ move into the New World. With only a\nvery few special or late exceptions, there are _no_ core-bifaces,\nflakes, or blade tools of the Old World. Such things just haven�t been\nfound here.\n\nThis is why I say it�s a shame we don�t know more of the end of the\nchopper-tool tradition in the Far East. According to Weidenreich,\nthe Mongoloids were in the Far East long before the end of the last\nglaciation. If the genetics of the blood group types do demand a\nnon-Mongoloid ancestry for the American Indians, who else may have been\nin the Far East 25,000 years ago? We know a little about the habits\nfor making stone tools which these first people brought with them,\nand these habits don�t conform with those of the western Old World.\nWe�d better keep our eyes open for whatever happened to the end of\nthe chopper-tool tradition in northern China; already there are hints\nthat it lasted late there. Also we should watch future excavations\nin eastern Siberia. Perhaps we shall find the chopper-tool tradition\nspreading up that far.\n\n\nTHE NEW ERA\n\nPerhaps it comes in part from the way I read the evidence and perhaps\nin part it is only intuition, but I feel that the materials of this\nchapter suggest a new era in the ways of life. Before about 40,000\nyears ago, people simply �gathered� their food, wandering over large\nareas to scavenge or to hunt in a simple sort of way. But here we\nhave seen them �settling-in� more, perhaps restricting themselves in\ntheir wanderings and adapting themselves to a given locality in more\nintensive ways. This intensification might be suggested by the word\n�collecting.� The ways of life we described in the earlier chapters\nwere �food-gathering� ways, but now an era of �food-collecting� has\nbegun. We shall see further intensifications of it in the next chapter.\n\n\n\n\nEnd and PRELUDE\n\n[Illustration]\n\n\nUp to the end of the last glaciation, we prehistorians have a\nrelatively comfortable time schedule. The farther back we go the less\nexact we can be about time and details. Elbow-room of five, ten,\neven fifty or more thousands of years becomes available for us to\nmaneuver in as we work backward in time. But now our story has come\nforward to the point where more exact methods of dating are at hand.\nThe radioactive carbon method reaches back into the span of the last\nglaciation. There are other methods, developed by the geologists and\npaleobotanists, which supplement and extend the usefulness of the\nradioactive carbon dates. And, happily, as our means of being more\nexact increases, our story grows more exciting. There are also more\ndetails of culture for us to deal with, which add to the interest.\n\n\nCHANGES AT THE END OF THE ICE AGE\n\nThe last great glaciation of the Ice Age was a two-part affair, with a\nsub-phase at the end of the second part. In Europe the last sub-phase\nof this glaciation commenced somewhere around 15,000 years ago. Then\nthe glaciers began to melt back, for the last time. Remember that\nProfessor Antevs (p. 19) isn�t sure the Ice Age is over yet! This\nmelting sometimes went by fits and starts, and the weather wasn�t\nalways changing for the better; but there was at least one time when\nEuropean weather was even better than it is now.\n\nThe melting back of the glaciers and the weather fluctuations caused\nother changes, too. We know a fair amount about these changes in\nEurope. In an earlier chapter, we said that the whole Ice Age was a\nmatter of continual change over long periods of time. As the last\nglaciers began to melt back some interesting things happened to mankind.\n\nIn Europe, along with the melting of the last glaciers, geography\nitself was changing. Britain and Ireland had certainly become islands\nby 5000 B.C. The Baltic was sometimes a salt sea, sometimes a large\nfresh-water lake. Forests began to grow where the glaciers had been,\nand in what had once been the cold tundra areas in front of the\nglaciers. The great cold-weather animals--the mammoth and the wooly\nrhinoceros--retreated northward and finally died out. It is probable\nthat the efficient hunting of the earlier people of 20,000 or 25,000\nto about 12,000 years ago had helped this process along (see p. 86).\nEuropeans, especially those of the post-glacial period, had to keep\nchanging to keep up with the times.\n\nThe archeological materials for the time from 10,000 to 6000 B.C. seem\nsimpler than those of the previous five thousand years. The great cave\nart of France and Spain had gone; so had the fine carving in bone and\nantler. Smaller, speedier animals were moving into the new forests. New\nways of hunting them, or ways of getting other food, had to be found.\nHence, new tools and weapons were necessary. Some of the people who\nmoved into northern Germany were successful reindeer hunters. Then the\nreindeer moved off to the north, and again new sources of food had to\nbe found.\n\n\nTHE READJUSTMENTS COMPLETED IN EUROPE\n\nAfter a few thousand years, things began to look better. Or at least\nwe can say this: By about 6000 B.C. we again get hotter archeological\nmaterials. The best of these come from the north European area:\nBritain, Belgium, Holland, Denmark, north Germany, southern Norway and\nSweden. Much of this north European material comes from bogs and swamps\nwhere it had become water-logged and has kept very well. Thus we have\nmuch more complete _assemblages_[4] than for any time earlier.\n\n  [4] �Assemblage� is a useful word when there are different kinds of\n      archeological materials belonging together, from one area and of\n      one time. An assemblage is made up of a number of �industries�\n      (that is, all the tools in chipped stone, all the tools in\n      bone, all the tools in wood, the traces of houses, etc.) and\n      everything else that manages to survive, such as the art, the\n      burials, the bones of the animals used as food, and the traces\n      of plant foods; in fact, everything that has been left to us\n      and can be used to help reconstruct the lives of the people to\n      whom it once belonged. Our own present-day �assemblage� would be\n      the sum total of all the objects in our mail-order catalogues,\n      department stores and supply houses of every sort, our churches,\n      our art galleries and other buildings, together with our roads,\n      canals, dams, irrigation ditches, and any other traces we might\n      leave of ourselves, from graves to garbage dumps. Not everything\n      would last, so that an archeologist digging us up--say 2,000\n      years from now--would find only the most durable items in our\n      assemblage.\n\nThe best known of these assemblages is the _Maglemosian_, named after a\ngreat Danish peat-swamp where much has been found.\n\n[Illustration: SKETCH OF MAGLEMOSIAN ASSEMBLAGE\n\n  CHIPPED STONE\n  HEMP\n  GROUND STONE\n  BONE AND ANTLER\n  WOOD]\n\nIn the Maglemosian assemblage the flint industry was still very\nimportant. Blade tools, tanged arrow points, and burins were still\nmade, but there were also axes for cutting the trees in the new\nforests. Moreover, the tiny microlithic blades, in a variety of\ngeometric forms, are also found. Thus, a specialized tradition that\npossibly began east of the Mediterranean had reached northern Europe.\nThere was also a ground stone industry; some axes and club-heads were\nmade by grinding and polishing rather than by chipping. The industries\nin bone and antler show a great variety of tools: axes, fish-hooks,\nfish spears, handles and hafts for other tools, harpoons, and clubs.\nA remarkable industry in wood has been preserved. Paddles, sled\nrunners, handles for tools, and bark floats for fish-nets have been\nfound. There are even fish-nets made of plant fibers. Canoes of some\nkind were no doubt made. Bone and antler tools were decorated with\nsimple patterns, and amber was collected. Wooden bows and arrows are\nfound.\n\nIt seems likely that the Maglemosian bog finds are remains of summer\ncamps, and that in winter the people moved to higher and drier regions.\nChilde calls them the �Forest folk�; they probably lived much the\nsame sort of life as did our pre-agricultural Indians of the north\ncentral states. They hunted small game or deer; they did a great deal\nof fishing; they collected what plant food they could find. In fact,\ntheir assemblage shows us again that remarkable ability of men to adapt\nthemselves to change. They had succeeded in domesticating the dog; he\nwas still a very wolf-like dog, but his long association with mankind\nhad now begun. Professor Coon believes that these people were direct\ndescendants of the men of the glacial age and that they had much the\nsame appearance. He believes that most of the Ice Age survivors still\nextant are living today in the northwestern European area.\n\n\nSOUTH AND CENTRAL EUROPE PERHAPS AS READJUSTED AS THE NORTH\n\nThere is always one trouble with things that come from areas where\npreservation is exceptionally good: The very quantity of materials in\nsuch an assemblage tends to make things from other areas look poor\nand simple, although they may not have been so originally at all. The\nassemblages of the people who lived to the south of the Maglemosian\narea may also have been quite large and varied; but, unfortunately,\nrelatively little of the southern assemblages has lasted. The\nwater-logged sites of the Maglemosian area preserved a great deal\nmore. Hence the Maglemosian itself _looks_ quite advanced to us, when\nwe compare it with the few things that have happened to last in other\nareas. If we could go back and wander over the Europe of eight thousand\nyears ago, we would probably find that the peoples of France, central\nEurope, and south central Russia were just as advanced as those of the\nnorth European-Baltic belt.\n\nSouth of the north European belt the hunting-food-collecting peoples\nwere living on as best they could during this time. One interesting\ngroup, which seems to have kept to the regions of sandy soil and scrub\nforest, made great quantities of geometric microliths. These are the\nmaterials called _Tardenoisian_. The materials of the �Forest folk� of\nFrance and central Europe generally are called _Azilian_; Dr. Movius\nbelieves the term might best be restricted to the area south of the\nLoire River.\n\n\nHOW MUCH REAL CHANGE WAS THERE?\n\nYou can see that no really _basic_ change in the way of life has yet\nbeen described. Childe sees the problem that faced the Europeans of\n10,000 to 3000 B.C. as a problem in readaptation to the post-glacial\nforest environment. By 6000 B.C. some quite successful solutions of\nthe problem--like the Maglemosian--had been made. The upsets that came\nwith the melting of the last ice gradually brought about all sorts of\nchanges in the tools and food-getting habits, but the people themselves\nwere still just as much simple hunters, fishers, and food-collectors as\nthey had been in 25,000 B.C. It could be said that they changed just\nenough so that they would not have to change. But there is a bit more\nto it than this.\n\nProfessor Mathiassen of Copenhagen, who knows the archeological remains\nof this time very well, poses a question. He speaks of the material\nas being neither rich nor progressive, in fact �rather stagnant,� but\nhe goes on to add that the people had a certain �receptiveness� and\nwere able to adapt themselves quickly when the next change did come.\nMy own understanding of the situation is that the �Forest folk� made\nnothing as spectacular as had the producers of the earlier Magdalenian\nassemblage and the Franco-Cantabrian art. On the other hand, they\n_seem_ to have been making many more different kinds of tools for many\nmore different kinds of tasks than had their Ice Age forerunners. I\nemphasize �seem� because the preservation in the Maglemosian bogs\nis very complete; certainly we cannot list anywhere near as many\ndifferent things for earlier times as we did for the Maglemosians\n(p. 94). I believe this experimentation with all kinds of new tools\nand gadgets, this intensification of adaptiveness (p. 91), this\n�receptiveness,� even if it is still only pointed toward hunting,\nfishing, and food-collecting, is an important thing.\n\nRemember that the only marker we have handy for the _beginning_ of\nthis tendency toward �receptiveness� and experimentation is the\nlittle microlithic blade tools of various geometric forms. These, we\nsaw, began before the last ice had melted away, and they lasted on\nin use for a very long time. I wish there were a better marker than\nthe microliths but I do not know of one. Remember, too, that as yet\nwe can only use the microliths as a marker in Europe and about the\nMediterranean.\n\n\nCHANGES IN OTHER AREAS?\n\nAll this last section was about Europe. How about the rest of the world\nwhen the last glaciers were melting away?\n\nWe simply don�t know much about this particular time in other parts\nof the world except in Europe, the Mediterranean basin and the Middle\nEast. People were certainly continuing to move into the New World by\nway of Siberia and the Bering Strait about this time. But for the\ngreater part of Africa and Asia, we do not know exactly what was\nhappening. Some day, we shall no doubt find out; today we are without\nclear information.\n\n\nREAL CHANGE AND PRELUDE IN THE NEAR EAST\n\nThe appearance of the microliths and the developments made by the\n�Forest folk� of northwestern Europe also mark an end. They show us\nthe terminal phase of the old food-collecting way of life. It grows\nincreasingly clear that at about the same time that the Maglemosian and\nother �Forest folk� were adapting themselves to hunting, fishing, and\ncollecting in new ways to fit the post-glacial environment, something\ncompletely new was being made ready in western Asia.\n\nUnfortunately, we do not have as much understanding of the climate and\nenvironment of the late Ice Age in western Asia as we have for most\nof Europe. Probably the weather was never so violent or life quite\nso rugged as it was in northern Europe. We know that the microliths\nmade their appearance in western Asia at least by 10,000 B.C. and\npossibly earlier, marking the beginning of the terminal phase of\nfood-collecting. Then, gradually, we begin to see the build-up towards\nthe first _basic change_ in human life.\n\nThis change amounted to a revolution just as important as the\nIndustrial Revolution. In it, men first learned to domesticate\nplants and animals. They began _producing_ their food instead of\nsimply gathering or collecting it. When their food-production\nbecame reasonably effective, people could and did settle down in\nvillage-farming communities. With the appearance of the little farming\nvillages, a new way of life was actually under way. Professor Childe\nhas good reason to speak of the �food-producing revolution,� for it was\nindeed a revolution.\n\n\nQUESTIONS ABOUT CAUSE\n\nWe do not yet know _how_ and _why_ this great revolution took place. We\nare only just beginning to put the questions properly. I suspect the\nanswers will concern some delicate and subtle interplay between man and\nnature. Clearly, both the level of culture and the natural condition of\nthe environment must have been ready for the great change, before the\nchange itself could come about.\n\nIt is going to take years of co-operative field work by both\narcheologists and the natural scientists who are most helpful to them\nbefore the _how_ and _why_ answers begin to appear. Anthropologically\ntrained archeologists are fascinated with the cultures of men in times\nof great change. About ten or twelve thousand years ago, the general\nlevel of culture in many parts of the world seems to have been ready\nfor change. In northwestern Europe, we saw that cultures �changed\njust enough so that they would not have to change.� We linked this to\nenvironmental changes with the coming of post-glacial times.\n\nIn western Asia, we archeologists can prove that the food-producing\nrevolution actually took place. We can see _the_ important consequence\nof effective domestication of plants and animals in the appearance of\nthe settled village-farming community. And within the village-farming\ncommunity was the seed of civilization. The way in which effective\ndomestication of plants and animals came about, however, must also be\nlinked closely with the natural environment. Thus the archeologists\nwill not solve the _how_ and _why_ questions alone--they will need the\nhelp of interested natural scientists in the field itself.\n\n\nPRECONDITIONS FOR THE REVOLUTION\n\nEspecially at this point in our story, we must remember how culture and\nenvironment go hand in hand. Neither plants nor animals domesticate\nthemselves; men domesticate them. Furthermore, men usually domesticate\nonly those plants and animals which are useful. There is a good\nquestion here: What is cultural usefulness? But I shall side-step it to\nsave time. Men cannot domesticate plants and animals that do not exist\nin the environment where the men live. Also, there are certainly some\nanimals and probably some plants that resist domestication, although\nthey might be useful.\n\nThis brings me back again to the point that _both_ the level of culture\nand the natural condition of the environment--with the proper plants\nand animals in it--must have been ready before domestication could\nhave happened. But this is precondition, not cause. Why did effective\nfood-production happen first in the Near East? Why did it happen\nindependently in the New World slightly later? Why also in the Far\nEast? Why did it happen at all? Why are all human beings not still\nliving as the Maglemosians did? These are the questions we still have\nto face.\n\n\nCULTURAL �RECEPTIVENESS� AND PROMISING ENVIRONMENTS\n\nUntil the archeologists and the natural scientists--botanists,\ngeologists, zoologists, and general ecologists--have spent many more\nyears on the problem, we shall not have full _how_ and _why_ answers. I\ndo think, however, that we are beginning to understand what to look for.\n\nWe shall have to learn much more of what makes the cultures of men\n�receptive� and experimental. Did change in the environment alone\nforce it? Was it simply a case of Professor Toynbee�s �challenge and\nresponse?� I cannot believe the answer is quite that simple. Were it\nso simple, we should want to know why the change hadn�t come earlier,\nalong with earlier environmental changes. We shall not know the answer,\nhowever, until we have excavated the traces of many more cultures of\nthe time in question. We shall doubtless also have to learn more about,\nand think imaginatively about, the simpler cultures still left today.\nThe �mechanics� of culture in general will be bound to interest us.\n\nIt will also be necessary to learn much more of the environments of\n10,000 to 12,000 years ago. In which regions of the world were the\nnatural conditions most promising? Did this promise include plants and\nanimals which could be domesticated, or did it only offer new ways of\nfood-collecting? There is much work to do on this problem, but we are\nbeginning to get some general hints.\n\nBefore I begin to detail the hints we now have from western Asia, I\nwant to do two things. First, I shall tell you of an old theory as to\nhow food-production might have appeared. Second, I will bother you with\nsome definitions which should help us in our thinking as the story goes\non.\n\n\nAN OLD THEORY AS TO THE CAUSE OF THE REVOLUTION\n\nThe idea that change would result, if the balance between nature\nand culture became upset, is of course not a new one. For at least\ntwenty-five years, there has been a general theory as to _how_ the\nfood-producing revolution happened. This theory depends directly on the\nidea of natural change in the environment.\n\nThe five thousand years following about 10,000 B.C. must have been\nvery difficult ones, the theory begins. These were the years when\nthe most marked melting of the last glaciers was going on. While the\nglaciers were in place, the climate to the south of them must have been\ndifferent from the climate in those areas today. You have no doubt read\nthat people once lived in regions now covered by the Sahara Desert.\nThis is true; just when is not entirely clear. The theory is that\nduring the time of the glaciers, there was a broad belt of rain winds\nsouth of the glaciers. These rain winds would have kept north Africa,\nthe Nile Valley, and the Middle East green and fertile. But when the\nglaciers melted back to the north, the belt of rain winds is supposed\nto have moved north too. Then the people living south and east of the\nMediterranean would have found that their water supply was drying up,\nthat the animals they hunted were dying or moving away, and that the\nplant foods they collected were dried up and scarce.\n\nAccording to the theory, all this would have been true except in the\nvalleys of rivers and in oases in the growing deserts. Here, in the\nonly places where water was left, the men and animals and plants would\nhave clustered. They would have been forced to live close to one\nanother, in order to live at all. Presently the men would have seen\nthat some animals were more useful or made better food than others,\nand so they would have begun to protect these animals from their\nnatural enemies. The men would also have been forced to try new plant\nfoods--foods which possibly had to be prepared before they could be\neaten. Thus, with trials and errors, but by being forced to live close\nto plants and animals, men would have learned to domesticate them.\n\n\nTHE OLD THEORY TOO SIMPLE FOR THE FACTS\n\nThis theory was set up before we really knew anything in detail about\nthe later prehistory of the Near and Middle East. We now know that\nthe facts which have been found don�t fit the old theory at all well.\nAlso, I have yet to find an American meteorologist who feels that we\nknow enough about the changes in the weather pattern to say that it can\nhave been so simple and direct. And, of course, the glacial ice which\nbegan melting after 12,000 years ago was merely the last sub-phase of\nthe last great glaciation. There had also been three earlier periods\nof great alpine glaciers, and long periods of warm weather in between.\nIf the rain belt moved north as the glaciers melted for the last time,\nit must have moved in the same direction in earlier times. Thus, the\nforced neighborliness of men, plants, and animals in river valleys and\noases must also have happened earlier. Why didn�t domestication happen\nearlier, then?\n\nFurthermore, it does not seem to be in the oases and river valleys\nthat we have our first or only traces of either food-production\nor the earliest farming villages. These traces are also in the\nhill-flanks of the mountains of western Asia. Our earliest sites of the\nvillage-farmers do not seem to indicate a greatly different climate\nfrom that which the same region now shows. In fact, everything we now\nknow suggests that the old theory was just too simple an explanation to\nhave been the true one. The only reason I mention it--beyond correcting\nthe ideas you may get in the general texts--is that it illustrates the\nkind of thinking we shall have to do, even if it is doubtless wrong in\ndetail.\n\nWe archeologists shall have to depend much more than we ever have on\nthe natural scientists who can really help us. I can tell you this from\nexperience. I had the great good fortune to have on my expedition staff\nin Iraq in 1954-55, a geologist, a botanist, and a zoologist. Their\nstudies added whole new bands of color to my spectrum of thinking about\n_how_ and _why_ the revolution took place and how the village-farming\ncommunity began. But it was only a beginning; as I said earlier, we are\njust now learning to ask the proper questions.\n\n\nABOUT STAGES AND ERAS\n\nNow come some definitions, so I may describe my material more easily.\nArcheologists have always loved to make divisions and subdivisions\nwithin the long range of materials which they have found. They often\ndisagree violently about which particular assemblage of material\ngoes into which subdivision, about what the subdivisions should be\nnamed, about what the subdivisions really mean culturally. Some\narcheologists, probably through habit, favor an old scheme of Grecized\nnames for the subdivisions: paleolithic, mesolithic, neolithic. I\nrefuse to use these words myself. They have meant too many different\nthings to too many different people and have tended to hide some pretty\nfuzzy thinking. Probably you haven�t even noticed my own scheme of\nsubdivision up to now, but I�d better tell you in general what it is.\n\nI think of the earliest great group of archeological materials, from\nwhich we can deduce only a food-gathering way of culture, as the\n_food-gathering stage_. I say �stage� rather than �age,� because it\nis not quite over yet; there are still a few primitive people in\nout-of-the-way parts of the world who remain in the _food-gathering\nstage_. In fact, Professor Julian Steward would probably prefer to call\nit a food-gathering _level_ of existence, rather than a stage. This\nwould be perfectly acceptable to me. I also tend to find myself using\n_collecting_, rather than _gathering_, for the more recent aspects or\nera of the stage, as the word �collecting� appears to have more sense\nof purposefulness and specialization than does �gathering� (see p.\n91).\n\nNow, while I think we could make several possible subdivisions of the\nfood-gathering stage--I call my subdivisions of stages _eras_[5]--I\nbelieve the only one which means much to us here is the last or\n_terminal sub-era of food-collecting_ of the whole food-gathering\nstage. The microliths seem to mark its approach in the northwestern\npart of the Old World. It is really shown best in the Old World by\nthe materials of the �Forest folk,� the cultural adaptation to the\npost-glacial environment in northwestern Europe. We talked about\nthe �Forest folk� at the beginning of this chapter, and I used the\nMaglemosian assemblage of Denmark as an example.\n\n  [5] It is difficult to find words which have a sequence or gradation\n      of meaning with respect to both development and a range of time\n      in the past, or with a range of time from somewhere in the past\n      which is perhaps not yet ended. One standard Webster definition\n      of _stage_ is: �One of the steps into which the material\n      development of man ... is divided.� I cannot find any dictionary\n      definition that suggests which of the words, _stage_ or _era_,\n      has the meaning of a longer span of time. Therefore, I have\n      chosen to let my eras be shorter, and to subdivide my stages\n      into eras. Webster gives _era_ as: �A signal stage of history,\n      an epoch.� When I want to subdivide my eras, I find myself using\n      _sub-eras_. Thus I speak of the _eras_ within a _stage_ and of\n      the _sub-eras_ within an _era_; that is, I do so when I feel\n      that I really have to, and when the evidence is clear enough to\n      allow it.\n\nThe food-producing revolution ushers in the _food-producing stage_.\nThis stage began to be replaced by the _industrial stage_ only about\ntwo hundred years ago. Now notice that my stage divisions are in terms\nof technology and economics. We must think sharply to be sure that the\nsubdivisions of the stages, the eras, are in the same terms. This does\nnot mean that I think technology and economics are the only important\nrealms of culture. It is rather that for most of prehistoric time the\nmaterials left to the archeologists tend to limit our deductions to\ntechnology and economics.\n\nI�m so soon out of my competence, as conventional ancient history\nbegins, that I shall only suggest the earlier eras of the\nfood-producing stage to you. This book is about prehistory, and I�m not\na universal historian.\n\n\nTHE TWO EARLIEST ERAS OF THE FOOD-PRODUCING STAGE\n\nThe food-producing stage seems to appear in western Asia with really\nrevolutionary suddenness. It is seen by the relative speed with which\nthe traces of new crafts appear in the earliest village-farming\ncommunity sites we�ve dug. It is seen by the spread and multiplication\nof these sites themselves, and the remarkable growth in human\npopulation we deduce from this increase in sites. We�ll look at some\nof these sites and the archeological traces they yield in the next\nchapter. When such village sites begin to appear, I believe we are in\nthe _era of the primary village-farming community_. I also believe this\nis the second era of the food-producing stage.\n\nThe first era of the food-producing stage, I believe, was an _era of\nincipient cultivation and animal domestication_. I keep saying �I\nbelieve� because the actual evidence for this earlier era is so slight\nthat one has to set it up mainly by playing a hunch for it. The reason\nfor playing the hunch goes about as follows.\n\nOne thing we seem to be able to see, in the food-collecting era in\ngeneral, is a tendency for people to begin to settle down. This\nsettling down seemed to become further intensified in the terminal\nera. How this is connected with Professor Mathiassen�s �receptiveness�\nand the tendency to be experimental, we do not exactly know. The\nevidence from the New World comes into play here as well as that from\nthe Old World. With this settling down in one place, the people of the\nterminal era--especially the �Forest folk� whom we know best--began\nmaking a great variety of new things. I remarked about this earlier in\nthe chapter. Dr. Robert M. Adams is of the opinion that this atmosphere\nof experimentation with new tools--with new ways of collecting food--is\nthe kind of atmosphere in which one might expect trials at planting\nand at animal domestication to have been made. We first begin to find\ntraces of more permanent life in outdoor camp sites, although caves\nwere still inhabited at the beginning of the terminal era. It is not\nsurprising at all that the �Forest folk� had already domesticated the\ndog. In this sense, the whole era of food-collecting was becoming ready\nand almost �incipient� for cultivation and animal domestication.\n\nNorthwestern Europe was not the place for really effective beginnings\nin agriculture and animal domestication. These would have had to take\nplace in one of those natural environments of promise, where a variety\nof plants and animals, each possible of domestication, was available in\nthe wild state. Let me spell this out. Really effective food-production\nmust include a variety of items to make up a reasonably well-rounded\ndiet. The food-supply so produced must be trustworthy, even though\nthe food-producing peoples themselves might be happy to supplement\nit with fish and wild strawberries, just as we do when such things\nare available. So, as we said earlier, part of our problem is that\nof finding a region with a natural environment which includes--and\ndid include, some ten thousand years ago--a variety of possibly\ndomesticable wild plants and animals.\n\n\nNUCLEAR AREAS\n\nNow comes the last of my definitions. A region with a natural\nenvironment which included a variety of wild plants and animals,\nboth possible and ready for domestication, would be a central\nor core or _nuclear area_, that is, it would be when and _if_\nfood-production took place within it. It is pretty hard for me to\nimagine food-production having ever made an independent start outside\nsuch a nuclear area, although there may be some possible nuclear areas\nin which food-production never took place (possibly in parts of Africa,\nfor example).\n\nWe know of several such nuclear areas. In the New World, Middle America\nand the Andean highlands make up one or two; it is my understanding\nthat the evidence is not yet clear as to which. There seems to have\nbeen a nuclear area somewhere in southeastern Asia, in the Malay\npeninsula or Burma perhaps, connected with the early cultivation of\ntaro, breadfruit, the banana and the mango. Possibly the cultivation\nof rice and the domestication of the chicken and of zebu cattle and\nthe water buffalo belong to this southeast Asiatic nuclear area. We\nknow relatively little about it archeologically, as yet. The nuclear\narea which was the scene of the earliest experiment in effective\nfood-production was in western Asia. Since I know it best, I shall use\nit as my example.\n\n\nTHE NUCLEAR NEAR EAST\n\nThe nuclear area of western Asia is naturally the one of greatest\ninterest to people of the western cultural tradition. Our cultural\nheritage began within it. The area itself is the region of the hilly\nflanks of rain-watered grass-land which build up to the high mountain\nridges of Iran, Iraq, Turkey, Syria, and Palestine. The map on page\n125 indicates the region. If you have a good atlas, try to locate the\nzone which surrounds the drainage basin of the Tigris and Euphrates\nRivers at elevations of from approximately 2,000 to 5,000 feet. The\nlower alluvial land of the Tigris-Euphrates basin itself has very\nlittle rainfall. Some years ago Professor James Henry Breasted called\nthe alluvial lands of the Tigris-Euphrates a part of the �fertile\ncrescent.� These alluvial lands are very fertile if irrigated. Breasted\nwas most interested in the oriental civilizations of conventional\nancient history, and irrigation had been discovered before they\nappeared.\n\nThe country of hilly flanks above Breasted�s crescent receives from\n10 to 20 or more inches of winter rainfall each year, which is about\nwhat Kansas has. Above the hilly-flanks zone tower the peaks and ridges\nof the Lebanon-Amanus chain bordering the coast-line from Palestine\nto Turkey, the Taurus Mountains of southern Turkey, and the Zagros\nrange of the Iraq-Iran borderland. This rugged mountain frame for our\nhilly-flanks zone rises to some magnificent alpine scenery, with peaks\nof from ten to fifteen thousand feet in elevation. There are several\ngaps in the Mediterranean coastal portion of the frame, through which\nthe winter�s rain-bearing winds from the sea may break so as to carry\nrain to the foothills of the Taurus and the Zagros.\n\nThe picture I hope you will have from this description is that of an\nintermediate hilly-flanks zone lying between two regions of extremes.\nThe lower Tigris-Euphrates basin land is low and far too dry and hot\nfor agriculture based on rainfall alone; to the south and southwest, it\nmerges directly into the great desert of Arabia. The mountains which\nlie above the hilly-flanks zone are much too high and rugged to have\nencouraged farmers.\n\n\nTHE NATURAL ENVIRONMENT OF THE NUCLEAR NEAR EAST\n\nThe more we learn of this hilly-flanks zone that I describe, the\nmore it seems surely to have been a nuclear area. This is where we\narcheologists need, and are beginning to get, the help of natural\nscientists. They are coming to the conclusion that the natural\nenvironment of the hilly-flanks zone today is much as it was some eight\nto ten thousand years ago. There are still two kinds of wild wheat and\na wild barley, and the wild sheep, goat, and pig. We have discovered\ntraces of each of these at about nine thousand years ago, also traces\nof wild ox, horse, and dog, each of which appears to be the probable\nancestor of the domesticated form. In fact, at about nine thousand\nyears ago, the two wheats, the barley, and at least the goat, were\nalready well on the road to domestication.\n\nThe wild wheats give us an interesting clue. They are only available\ntogether with the wild barley within the hilly-flanks zone. While the\nwild barley grows in a variety of elevations and beyond the zone,\nat least one of the wild wheats does not seem to grow below the hill\ncountry. As things look at the moment, the domestication of both the\nwheats together could _only_ have taken place within the hilly-flanks\nzone. Barley seems to have first come into cultivation due to its\npresence as a weed in already cultivated wheat fields. There is also\na suggestion--there is still much more to learn in the matter--that\nthe animals which were first domesticated were most at home up in the\nhilly-flanks zone in their wild state.\n\nWith a single exception--that of the dog--the earliest positive\nevidence of domestication includes the two forms of wheat, the barley,\nand the goat. The evidence comes from within the hilly-flanks zone.\nHowever, it comes from a settled village proper, Jarmo (which I�ll\ndescribe in the next chapter), and is thus from the era of the primary\nvillage-farming community. We are still without positive evidence of\ndomesticated grain and animals in the first era of the food-producing\nstage, that of incipient cultivation and animal domestication.\n\n\nTHE ERA OF INCIPIENT CULTIVATION AND ANIMAL DOMESTICATION\n\nI said above (p. 105) that my era of incipient cultivation and animal\ndomestication is mainly set up by playing a hunch. Although we cannot\nreally demonstrate it--and certainly not in the Near East--it would\nbe very strange for food-collectors not to have known a great deal\nabout the plants and animals most useful to them. They do seem to have\ndomesticated the dog. We can easily imagine them remembering to go\nback, season after season, to a particular patch of ground where seeds\nor acorns or berries grew particularly well. Most human beings, unless\nthey are extremely hungry, are attracted to baby animals, and many wild\npups or fawns or piglets must have been brought back alive by hunting\nparties.\n\nIn this last sense, man has probably always been an incipient\ncultivator and domesticator. But I believe that Adams is right in\nsuggesting that this would be doubly true with the experimenters of\nthe terminal era of food-collecting. We noticed that they also seem\nto have had a tendency to settle down. Now my hunch goes that _when_\nthis experimentation and settling down took place within a potential\nnuclear area--where a whole constellation of plants and animals\npossible of domestication was available--the change was easily made.\nProfessor Charles A. Reed, our field colleague in zoology, agrees that\nyear-round settlement with plant domestication probably came before\nthere were important animal domestications.\n\n\nINCIPIENT ERAS AND NUCLEAR AREAS\n\nI have put this scheme into a simple chart (p. 111) with the names\nof a few of the sites we are going to talk about. You will see that my\nhunch means that there are eras of incipient cultivation _only_ within\nnuclear areas. In a nuclear area, the terminal era of food-collecting\nwould probably have been quite short. I do not know for how long a time\nthe era of incipient cultivation and domestication would have lasted,\nbut perhaps for several thousand years. Then it passed on into the era\nof the primary village-farming community.\n\nOutside a nuclear area, the terminal era of food-collecting would last\nfor a long time; in a few out-of-the-way parts of the world, it still\nhangs on. It would end in any particular place through contact with\nand the spread of ideas of people who had passed on into one of the\nmore developed eras. In many cases, the terminal era of food-collecting\nwas ended by the incoming of the food-producing peoples themselves.\nFor example, the practices of food-production were carried into Europe\nby the actual movement of some numbers of peoples (we don�t know how\nmany) who had reached at least the level of the primary village-farming\ncommunity. The �Forest folk� learned food-production from them. There\nwas never an era of incipient cultivation and domestication proper in\nEurope, if my hunch is right.\n\n\nARCHEOLOGICAL DIFFICULTIES IN SEEING THE INCIPIENT ERA\n\nThe way I see it, two things were required in order that an era of\nincipient cultivation and domestication could begin. First, there had\nto be the natural environment of a nuclear area, with its whole group\nof plants and animals capable of domestication. This is the aspect of\nthe matter which we�ve said is directly given by nature. But it is\nquite possible that such an environment with such a group of plants\nand animals in it may have existed well before ten thousand years ago\nin the Near East. It is also quite possible that the same promising\ncondition may have existed in regions which never developed into\nnuclear areas proper. Here, again, we come back to the cultural factor.\nI think it was that �atmosphere of experimentation� we�ve talked about\nonce or twice before. I can�t define it for you, other than to say that\nby the end of the Ice Age, the general level of many cultures was ready\nfor change. Ask me how and why this was so, and I�ll tell you we don�t\nknow yet, and that if we did understand this kind of question, there\nwould be no need for me to go on being a prehistorian!\n\n[Illustration: POSSIBLE RELATIONSHIPS OF STAGES AND ERAS IN WESTERN\nASIA AND NORTHEASTERN AFRICA]\n\nNow since this was an era of incipience, of the birth of new ideas,\nand of experimentation, it is very difficult to see its traces\narcheologically. New tools having to do with the new ways of getting\nand, in fact, producing food would have taken some time to develop.\nIt need not surprise us too much if we cannot find hoes for planting\nand sickles for reaping grain at the very beginning. We might expect\na time of making-do with some of the older tools, or with make-shift\ntools, for some of the new jobs. The present-day wild cousin of the\ndomesticated sheep still lives in the mountains of western Asia. It has\nno wool, only a fine down under hair like that of a deer, so it need\nnot surprise us to find neither the whorls used for spinning nor traces\nof woolen cloth. It must have taken some time for a wool-bearing sheep\nto develop and also time for the invention of the new tools which go\nwith weaving. It would have been the same with other kinds of tools for\nthe new way of life.\n\nIt is difficult even for an experienced comparative zoologist to tell\nwhich are the bones of domesticated animals and which are those of\ntheir wild cousins. This is especially so because the animal bones the\narcheologists find are usually fragmentary. Furthermore, we do not have\na sort of library collection of the skeletons of the animals or an\nherbarium of the plants of those times, against which the traces which\nthe archeologists find may be checked. We are only beginning to get\nsuch collections for the modern wild forms of animals and plants from\nsome of our nuclear areas. In the nuclear area in the Near East, some\nof the wild animals, at least, have already become extinct. There are\nno longer wild cattle or wild horses in western Asia. We know they were\nthere from the finds we�ve made in caves of late Ice Age times, and\nfrom some slightly later sites.\n\n\nSITES WITH ANTIQUITIES OF THE INCIPIENT ERA\n\nSo far, we know only a very few sites which would suit my notion of the\nincipient era of cultivation and animal domestication. I am closing\nthis chapter with descriptions of two of the best Near Eastern examples\nI know of. You may not be satisfied that what I am able to describe\nmakes a full-bodied era of development at all. Remember, however, that\nI�ve told you I�m largely playing a kind of a hunch, and also that the\narcheological materials of this era will always be extremely difficult\nto interpret. At the beginning of any new way of life, there will be a\ngreat tendency for people to make-do, at first, with tools and habits\nthey are already used to. I would suspect that a great deal of this\nmaking-do went on almost to the end of this era.\n\n\nTHE NATUFIAN, AN ASSEMBLAGE OF THE INCIPIENT ERA\n\nThe assemblage called the Natufian comes from the upper layers of a\nnumber of caves in Palestine. Traces of its flint industry have also\nturned up in Syria and Lebanon. We don�t know just how old it is. I\nguess that it probably falls within five hundred years either way of\nabout 5000 B.C.\n\nUntil recently, the people who produced the Natufian assemblage were\nthought to have been only cave dwellers, but now at least three open\nair Natufian sites have been briefly described. In their best-known\ndwelling place, on Mount Carmel, the Natufian folk lived in the open\nmouth of a large rock-shelter and on the terrace in front of it. On the\nterrace, they had set at least two short curving lines of stones; but\nthese were hardly architecture; they seem more like benches or perhaps\nthe low walls of open pens. There were also one or two small clusters\nof stones laid like paving, and a ring of stones around a hearth or\nfireplace. One very round and regular basin-shaped depression had been\ncut into the rocky floor of the terrace, and there were other less\nregular basin-like depressions. In the newly reported open air sites,\nthere seem to have been huts with rounded corners.\n\nMost of the finds in the Natufian layer of the Mount Carmel cave were\nflints. About 80 per cent of these flint tools were microliths made\nby the regular working of tiny blades into various tools, some having\ngeometric forms. The larger flint tools included backed blades, burins,\nscrapers, a few arrow points, some larger hacking or picking tools, and\none special type. This last was the sickle blade.\n\nWe know a sickle blade of flint when we see one, because of a strange\npolish or sheen which seems to develop on the cutting edge when the\nblade has been used to cut grasses or grain, or--perhaps--reeds. In\nthe Natufian, we have even found the straight bone handles in which a\nnumber of flint sickle blades were set in a line.\n\nThere was a small industry in ground or pecked stone (that is, abraded\nnot chipped) in the Natufian. This included some pestle and mortar\nfragments. The mortars are said to have a deep and narrow hole,\nand some of the pestles show traces of red ochre. We are not sure\nthat these mortars and pestles were also used for grinding food. In\naddition, there were one or two bits of carving in stone.\n\n\nNATUFIAN ANTIQUITIES IN OTHER MATERIALS; BURIALS AND PEOPLE\n\nThe Natufian industry in bone was quite rich. It included, beside the\nsickle hafts mentioned above, points and harpoons, straight and curved\ntypes of fish-hooks, awls, pins and needles, and a variety of beads and\npendants. There were also beads and pendants of pierced teeth and shell.\n\nA number of Natufian burials have been found in the caves; some burials\nwere grouped together in one grave. The people who were buried within\nthe Mount Carmel cave were laid on their backs in an extended position,\nwhile those on the terrace seem to have been �flexed� (placed in their\ngraves in a curled-up position). This may mean no more than that it was\neasier to dig a long hole in cave dirt than in the hard-packed dirt of\nthe terrace. The people often had some kind of object buried with them,\nand several of the best collections of beads come from the burials. On\ntwo of the skulls there were traces of elaborate head-dresses of shell\nbeads.\n\n[Illustration: SKETCH OF NATUFIAN ASSEMBLAGE\n\n  MICROLITHS\n  ARCHITECTURE?\n  BURIAL\n  CHIPPED STONE\n  GROUND STONE\n  BONE]\n\nThe animal bones of the Natufian layers show beasts of a �modern� type,\nbut with some differences from those of present-day Palestine. The\nbones of the gazelle far outnumber those of the deer; since gazelles\nlike a much drier climate than deer, Palestine must then have had much\nthe same climate that it has today. Some of the animal bones were those\nof large or dangerous beasts: the hyena, the bear, the wild boar,\nand the leopard. But the Natufian people may have had the help of a\nlarge domesticated dog. If our guess at a date for the Natufian is\nright (about 7750 B.C.), this is an earlier dog than was that in the\nMaglemosian of northern Europe. More recently, it has been reported\nthat a domesticated goat is also part of the Natufian finds.\n\nThe study of the human bones from the Natufian burials is not yet\ncomplete. Until Professor McCown�s study becomes available, we may note\nProfessor Coon�s assessment that these people were of a �basically\nMediterranean type.�\n\n\nTHE KARIM SHAHIR ASSEMBLAGE\n\nKarim Shahir differs from the Natufian sites in that it shows traces\nof a temporary open site or encampment. It lies on the top of a bluff\nin the Kurdish hill-country of northeastern Iraq. It was dug by Dr.\nBruce Howe of the expedition I directed in 1950-51 for the Oriental\nInstitute and the American Schools of Oriental Research. In 1954-55,\nour expedition located another site, M�lefaat, with general resemblance\nto Karim Shahir, but about a hundred miles north of it. In 1956, Dr.\nRalph Solecki located still another Karim Shahir type of site called\nZawi Chemi Shanidar. The Zawi Chemi site has a radiocarbon date of 8900\n� 300 B.C.\n\nKarim Shahir has evidence of only one very shallow level of occupation.\nIt was probably not lived on very long, although the people who lived\non it spread out over about three acres of area. In spots, the single\nlayer yielded great numbers of fist-sized cracked pieces of limestone,\nwhich had been carried up from the bed of a stream at the bottom of the\nbluff. We think these cracked stones had something to do with a kind of\narchitecture, but we were unable to find positive traces of hut plans.\nAt M�lefaat and Zawi Chemi, there were traces of rounded hut plans.\n\nAs in the Natufian, the great bulk of small objects of the Karim Shahir\nassemblage was in chipped flint. A large proportion of the flint tools\nwere microlithic bladelets and geometric forms. The flint sickle blade\nwas almost non-existent, being far scarcer than in the Natufian. The\npeople of Karim Shahir did a modest amount of work in the grinding of\nstone; there were milling stone fragments of both the mortar and the\nquern type, and stone hoes or axes with polished bits. Beads, pendants,\nrings, and bracelets were made of finer quality stone. We found a few\nsimple points and needles of bone, and even two rather formless unbaked\nclay figurines which seemed to be of animal form.\n\n[Illustration: SKETCH OF KARIM SHAHIR ASSEMBLAGE\n\n  CHIPPED STONE\n  GROUND STONE\n  UNBAKED CLAY\n  SHELL\n  BONE\n  �ARCHITECTURE�]\n\nKarim Shahir did not yield direct evidence of the kind of vegetable\nfood its people ate. The animal bones showed a considerable\nincrease in the proportion of the bones of the species capable of\ndomestication--sheep, goat, cattle, horse, dog--as compared with animal\nbones from the earlier cave sites of the area, which have a high\nproportion of bones of wild forms like deer and gazelle. But we do not\nknow that any of the Karim Shahir animals were actually domesticated.\nSome of them may have been, in an �incipient� way, but we have no means\nat the moment that will tell us from the bones alone.\n\n\nWERE THE NATUFIAN AND KARIM SHAHIR PEOPLES FOOD-PRODUCERS?\n\nIt is clear that a great part of the food of the Natufian people\nmust have been hunted or collected. Shells of land, fresh-water, and\nsea animals occur in their cave layers. The same is true as regards\nKarim Shahir, save for sea shells. But on the other hand, we have\nthe sickles, the milling stones, the possible Natufian dog, and the\ngoat, and the general animal situation at Karim Shahir to hint at an\nincipient approach to food-production. At Karim Shahir, there was the\ntendency to settle down out in the open; this is echoed by the new\nreports of open air Natufian sites. The large number of cracked stones\ncertainly indicates that it was worth the peoples� while to have some\nkind of structure, even if the site as a whole was short-lived.\n\nIt is a part of my hunch that these things all point toward\nfood-production--that the hints we seek are there. But in the sense\nthat the peoples of the era of the primary village-farming community,\nwhich we shall look at next, are fully food-producing, the Natufian\nand Karim Shahir folk had not yet arrived. I think they were part of\na general build-up to full scale food-production. They were possibly\ncontrolling a few animals of several kinds and perhaps one or two\nplants, without realizing the full possibilities of this �control� as a\nnew way of life.\n\nThis is why I think of the Karim Shahir and Natufian folk as being at\na level, or in an era, of incipient cultivation and domestication. But\nwe shall have to do a great deal more excavation in this range of time\nbefore we�ll get the kind of positive information we need.\n\n\nSUMMARY\n\nI am sorry that this chapter has had to be so much more about ideas\nthan about the archeological traces of prehistoric men themselves.\nBut the antiquities of the incipient era of cultivation and animal\ndomestication will not be spectacular, even when we do have them\nexcavated in quantity. Few museums will be interested in these\nantiquities for exhibition purposes. The charred bits or impressions\nof plants, the fragments of animal bone and shell, and the varied\nclues to climate and environment will be as important as the artifacts\nthemselves. It will be the ideas to which these traces lead us that\nwill be important. I am sure that this unspectacular material--when we\nhave much more of it, and learn how to understand what it says--will\nlead us to how and why answers about the first great change in human\nhistory.\n\nWe know the earliest village-farming communities appeared in western\nAsia, in a nuclear area. We do not yet know why the Near Eastern\nexperiment came first, or why it didn�t happen earlier in some other\nnuclear area. Apparently, the level of culture and the promise of the\nnatural environment were ready first in western Asia. The next sites\nwe look at will show a simple but effective food-production already\nin existence. Without effective food-production and the settled\nvillage-farming communities, civilization never could have followed.\nHow effective food-production came into being by the end of the\nincipient era, is, I believe, one of the most fascinating questions any\narcheologist could face.\n\nIt now seems probable--from possibly two of the Palestinian sites with\nvarieties of the Natufian (Jericho and Nahal Oren)--that there were\none or more local Palestinian developments out of the Natufian into\nlater times. In the same way, what followed after the Karim Shahir type\nof assemblage in northeastern Iraq was in some ways a reflection of\nbeginnings made at Karim Shahir and Zawi Chemi.\n\n\n\n\nTHE First Revolution\n\n[Illustration]\n\n\nAs the incipient era of cultivation and animal domestication passed\nonward into the era of the primary village-farming community, the first\nbasic change in human economy was fully achieved. In southwestern Asia,\nthis seems to have taken place about nine thousand years ago. I am\ngoing to restrict my description to this earliest Near Eastern case--I\ndo not know enough about the later comparable experiments in the Far\nEast and in the New World. Let us first, once again, think of the\ncontrast between food-collecting and food-producing as ways of life.\n\n\nTHE DIFFERENCE BETWEEN FOOD-COLLECTORS AND FOOD-PRODUCERS\n\nChilde used the word �revolution� because of the radical change that\ntook place in the habits and customs of man. Food-collectors--that is,\nhunters, fishers, berry- and nut-gatherers--had to live in small groups\nor bands, for they had to be ready to move wherever their food supply\nmoved. Not many people can be fed in this way in one area, and small\nchildren and old folks are a burden. There is not enough food to store,\nand it is not the kind that can be stored for long.\n\nDo you see how this all fits into a picture? Small groups of people\nliving now in this cave, now in that--or out in the open--as they moved\nafter the animals they hunted; no permanent villages, a few half-buried\nhuts at best; no breakable utensils; no pottery; no signs of anything\nfor clothing beyond the tools that were probably used to dress the\nskins of animals; no time to think of much of anything but food and\nprotection and disposal of the dead when death did come: an existence\nwhich takes nature as it finds it, which does little or nothing to\nmodify nature--all in all, a savage�s existence, and a very tough one.\nA man who spends his whole life following animals just to kill them to\neat, or moving from one berry patch to another, is really living just\nlike an animal himself.\n\n\nTHE FOOD-PRODUCING ECONOMY\n\nAgainst this picture let me try to draw another--that of man�s life\nafter food-production had begun. His meat was stored �on the hoof,�\nhis grain in silos or great pottery jars. He lived in a house: it was\nworth his while to build one, because he couldn�t move far from his\nfields and flocks. In his neighborhood enough food could be grown\nand enough animals bred so that many people were kept busy. They all\nlived close to their flocks and fields, in a village. The village was\nalready of a fair size, and it was growing, too. Everybody had more to\neat; they were presumably all stronger, and there were more children.\nChildren and old men could shepherd the animals by day or help with\nthe lighter work in the fields. After the crops had been harvested the\nyounger men might go hunting and some of them would fish, but the food\nthey brought in was only an addition to the food in the village; the\nvillagers wouldn�t starve, even if the hunters and fishermen came home\nempty-handed.\n\nThere was more time to do different things, too. They began to modify\nnature. They made pottery out of raw clay, and textiles out of hair\nor fiber. People who became good at pottery-making traded their pots\nfor food and spent all of their time on pottery alone. Other people\nwere learning to weave cloth or to make new tools. There were already\npeople in the village who were becoming full-time craftsmen.\n\nOther things were changing, too. The villagers must have had\nto agree on new rules for living together. The head man of the\nvillage had problems different from those of the chief of the small\nfood-collectors� band. If somebody�s flock of sheep spoiled a wheat\nfield, the owner wanted payment for the grain he lost. The chief of\nthe hunters was never bothered with such questions. Even the gods\nhad changed. The spirits and the magic that had been used by hunters\nweren�t of any use to the villagers. They needed gods who would watch\nover the fields and the flocks, and they eventually began to erect\nbuildings where their gods might dwell, and where the men who knew most\nabout the gods might live.\n\n\nWAS FOOD-PRODUCTION A �REVOLUTION�?\n\nIf you can see the difference between these two pictures--between\nlife in the food-collecting stage and life after food-production\nhad begun--you�ll see why Professor Childe speaks of a revolution.\nBy revolution, he doesn�t mean that it happened over night or that\nit happened only once. We don�t know exactly how long it took. Some\npeople think that all these changes may have occurred in less than\n500 years, but I doubt that. The incipient era was probably an affair\nof some duration. Once the level of the village-farming community had\nbeen established, however, things did begin to move very fast. By\nsix thousand years ago, the descendants of the first villagers had\ndeveloped irrigation and plow agriculture in the relatively rainless\nMesopotamian alluvium and were living in towns with temples. Relative\nto the half million years of food-gathering which lay behind, this had\nbeen achieved with truly revolutionary suddenness.\n\n\nGAPS IN OUR KNOWLEDGE OF THE NEAR EAST\n\nIf you�ll look again at the chart (p. 111) you�ll see that I have\nvery few sites and assemblages to name in the incipient era of\ncultivation and domestication, and not many in the earlier part of\nthe primary village-farming level either. Thanks in no small part\nto the intelligent co-operation given foreign excavators by the\nIraq Directorate General of Antiquities, our understanding of the\nsequence in Iraq is growing more complete. I shall use Iraq as my main\nyard-stick here. But I am far from being able to show you a series of\nSears Roebuck catalogues, even century by century, for any part of\nthe nuclear area. There is still a great deal of earth to move, and a\ngreat mass of material to recover and interpret before we even begin to\nunderstand �how� and �why.�\n\nPerhaps here, because this kind of archeology is really my specialty,\nyou�ll excuse it if I become personal for a moment. I very much look\nforward to having further part in closing some of the gaps in knowledge\nof the Near East. This is not, as I�ve told you, the spectacular\nrange of Near Eastern archeology. There are no royal tombs, no gold,\nno great buildings or sculpture, no writing, in fact nothing to\nexcite the normal museum at all. Nevertheless it is a range which,\nidea-wise, gives the archeologist tremendous satisfaction. The country\nof the hilly flanks is an exciting combination of green grasslands\nand mountainous ridges. The Kurds, who inhabit the part of the area\nin which I�ve worked most recently, are an extremely interesting and\nhospitable people. Archeologists don�t become rich, but I�ll forego\nthe Cadillac for any bright spring morning in the Kurdish hills, on a\ngood site with a happy crew of workmen and an interested and efficient\nstaff. It is probably impossible to convey the full feeling which life\non such a dig holds--halcyon days for the body and acute pleasurable\nstimulation for the mind. Old things coming newly out of the good dirt,\nand the pieces of the human puzzle fitting into place! I think I am\nan honest man; I cannot tell you that I am sorry the job is not yet\nfinished and that there are still gaps in this part of the Near Eastern\narcheological sequence.\n\n\nEARLIEST SITES OF THE VILLAGE FARMERS\n\nSo far, the Karim Shahir type of assemblage, which we looked at in the\nlast chapter, is the earliest material available in what I take to\nbe the nuclear area. We do not believe that Karim Shahir was a village\nsite proper: it looks more like the traces of a temporary encampment.\nTwo caves, called Belt and Hotu, which are outside the nuclear area\nand down on the foreshore of the Caspian Sea, have been excavated\nby Professor Coon. These probably belong in the later extension of\nthe terminal era of food-gathering; in their upper layers are traits\nlike the use of pottery borrowed from the more developed era of the\nsame time in the nuclear area. The same general explanation doubtless\nholds true for certain materials in Egypt, along the upper Nile and in\nthe Kharga oasis: these materials, called Sebilian III, the Khartoum\n�neolithic,� and the Khargan microlithic, are from surface sites,\nnot from caves. The chart (p. 111) shows where I would place these\nmaterials in era and time.\n\n[Illustration: THE HILLY FLANKS OF THE CRESCENT AND EARLY SITES OF THE\nNEAR EAST]\n\nBoth M�lefaat and Dr. Solecki�s Zawi Chemi Shanidar site appear to have\nbeen slightly more �settled in� than was Karim Shahir itself. But I do\nnot think they belong to the era of farming-villages proper. The first\nsite of this era, in the hills of Iraqi Kurdistan, is Jarmo, on which\nwe have spent three seasons of work. Following Jarmo comes a variety of\nsites and assemblages which lie along the hilly flanks of the crescent\nand just below it. I am going to describe and illustrate some of these\nfor you.\n\nSince not very much archeological excavation has yet been done on sites\nof this range of time, I shall have to mention the names of certain\nsingle sites which now alone stand for an assemblage. This does not\nmean that I think the individual sites I mention were unique. In the\ntimes when their various cultures flourished, there must have been\nmany little villages which shared the same general assemblage. We are\nonly now beginning to locate them again. Thus, if I speak of Jarmo,\nor Jericho, or Sialk as single examples of their particular kinds of\nassemblages, I don�t mean that they were unique at all. I think I could\ntake you to the sites of at least three more Jarmos, within twenty\nmiles of the original one. They are there, but they simply haven�t yet\nbeen excavated. In 1956, a Danish expedition discovered material of\nJarmo type at Shimshara, only two dozen miles northeast of Jarmo, and\nbelow an assemblage of Hassunan type (which I shall describe presently).\n\n\nTHE GAP BETWEEN KARIM SHAHIR AND JARMO\n\nAs we see the matter now, there is probably still a gap in the\navailable archeological record between the Karim Shahir-M�lefaat-Zawi\nChemi group (of the incipient era) and that of Jarmo (of the\nvillage-farming era). Although some items of the Jarmo type materials\ndo reflect the beginnings of traditions set in the Karim Shahir group\n(see p. 120), there is not a clear continuity. Moreover--to the\ndegree that we may trust a few radiocarbon dates--there would appear\nto be around two thousand years of difference in time. The single\navailable Zawi Chemi �date� is 8900 � 300 B.C.; the most reasonable\ngroup of �dates� from Jarmo average to about 6750 � 200 B.C. I am\nuncertain about this two thousand years--I do not think it can have\nbeen so long.\n\nThis suggests that we still have much work to do in Iraq. You can\nimagine how earnestly we await the return of political stability in the\nRepublic of Iraq.\n\n\nJARMO, IN THE KURDISH HILLS, IRAQ\n\nThe site of Jarmo has a depth of deposit of about twenty-seven feet,\nand approximately a dozen layers of architectural renovation and\nchange. Nevertheless it is a �one period� site: its assemblage remains\nessentially the same throughout, although one or two new items are\nadded in later levels. It covers about four acres of the top of a\nbluff, below which runs a small stream. Jarmo lies in the hill country\neast of the modern oil town of Kirkuk. The Iraq Directorate General of\nAntiquities suggested that we look at it in 1948, and we have had three\nseasons of digging on it since.\n\nThe people of Jarmo grew the barley plant and two different kinds of\nwheat. They made flint sickles with which to reap their grain, mortars\nor querns on which to crack it, ovens in which it might be parched, and\nstone bowls out of which they might eat their porridge. We are sure\nthat they had the domesticated goat, but Professor Reed (the staff\nzoologist) is not convinced that the bones of the other potentially\ndomesticable animals of Jarmo--sheep, cattle, pig, horse, dog--show\nsure signs of domestication. We had first thought that all of these\nanimals were domesticated ones, but Reed feels he must find out much\nmore before he can be sure. As well as their grain and the meat from\ntheir animals, the people of Jarmo consumed great quantities of land\nsnails. Botanically, the Jarmo wheat stands about half way between\nfully bred wheat and the wild forms.\n\n\nARCHITECTURE: HALL-MARK OF THE VILLAGE\n\nThe sure sign of the village proper is in its traces of architectural\npermanence. The houses of Jarmo were only the size of a small cottage\nby our standards, but each was provided with several rectangular rooms.\nThe walls of the houses were made of puddled mud, often set on crude\nfoundations of stone. (The puddled mud wall, which the Arabs call\n_touf_, is built by laying a three to six inch course of soft mud,\nletting this sun-dry for a day or two, then adding the next course,\netc.) The village probably looked much like the simple Kurdish farming\nvillage of today, with its mud-walled houses and low mud-on-brush\nroofs. I doubt that the Jarmo village had more than twenty houses at\nany one moment of its existence. Today, an average of about seven\npeople live in a comparable Kurdish house; probably the population of\nJarmo was about 150 people.\n\n[Illustration: SKETCH OF JARMO ASSEMBLAGE\n\n  CHIPPED STONE\n  UNBAKED CLAY\n  GROUND STONE\n  POTTERY _UPPER THIRD OF SITE ONLY._\n  REED MATTING\n  BONE\n  ARCHITECTURE]\n\nIt is interesting that portable pottery does not appear until the\nlast third of the life of the Jarmo village. Throughout the duration\nof the village, however, its people had experimented with the plastic\nqualities of clay. They modeled little figurines of animals and of\nhuman beings in clay; one type of human figurine they favored was that\nof a markedly pregnant woman, probably the expression of some sort of\nfertility spirit. They provided their house floors with baked-in-place\ndepressions, either as basins or hearths, and later with domed ovens of\nclay. As we�ve noted, the houses themselves were of clay or mud; one\ncould almost say they were built up like a house-sized pot. Then,\nfinally, the idea of making portable pottery itself appeared, although\nI very much doubt that the people of the Jarmo village discovered the\nart.\n\nOn the other hand, the old tradition of making flint blades and\nmicrolithic tools was still very strong at Jarmo. The sickle-blade was\nmade in quantities, but so also were many of the much older tool types.\nStrangely enough, it is within this age-old category of chipped stone\ntools that we see one of the clearest pointers to a newer age. Many of\nthe Jarmo chipped stone tools--microliths--were made of obsidian, a\nblack volcanic natural glass. The obsidian beds nearest to Jarmo are\nover three hundred miles to the north. Already a bulk carrying trade\nhad been established--the forerunner of commerce--and the routes were\nset by which, in later times, the metal trade was to move.\n\nThere are now twelve radioactive carbon �dates� from Jarmo. The most\nreasonable cluster of determinations averages to about 6750 � 200\nB.C., although there is a completely unreasonable range of �dates�\nrunning from 3250 to 9250 B.C.! _If_ I am right in what I take to be\n�reasonable,� the first flush of the food-producing revolution had been\nachieved almost nine thousand years ago.\n\n\nHASSUNA, IN UPPER MESOPOTAMIAN IRAQ\n\nWe are not sure just how soon after Jarmo the next assemblage of Iraqi\nmaterial is to be placed. I do not think the time was long, and there\nare a few hints that detailed habits in the making of pottery and\nground stone tools were actually continued from Jarmo times into the\ntime of the next full assemblage. This is called after a site named\nHassuna, a few miles to the south and west of modern Mosul. We also\nhave Hassunan type materials from several other sites in the same\ngeneral region. It is probably too soon to make generalizations about\nit, but the Hassunan sites seem to cluster at slightly lower elevations\nthan those we have been talking about so far.\n\nThe catalogue of the Hassuna assemblage is of course more full and\nelaborate than that of Jarmo. The Iraqi government�s archeologists\nwho dug Hassuna itself, exposed evidence of increasing architectural\nknow-how. The walls of houses were still formed of puddled mud;\nsun-dried bricks appear only in later periods. There were now several\ndifferent ways of making and decorating pottery vessels. One style of\npottery painting, called the Samarran style, is an extremely handsome\none and must have required a great deal of concentration and excellence\nof draftsmanship. On the other hand, the old habits for the preparation\nof good chipped stone tools--still apparent at Jarmo--seem to have\nlargely disappeared by Hassunan times. The flint work of the Hassunan\ncatalogue is, by and large, a wretched affair. We might guess that the\nkinaesthetic concentration of the Hassuna craftsmen now went into other\ncategories; that is, they suddenly discovered they might have more fun\nworking with the newer materials. It�s a shame, for example, that none\nof their weaving is preserved for us.\n\nThe two available radiocarbon determinations from Hassunan contexts\nstand at about 5100 and 5600 B.C. � 250 years.\n\n\nOTHER EARLY VILLAGE SITES IN THE NUCLEAR AREA\n\nI�ll now name and very briefly describe a few of the other early\nvillage assemblages either in or adjacent to the hilly flanks of the\ncrescent. Unfortunately, we do not have radioactive carbon dates for\nmany of these materials. We may guess that some particular assemblage,\nroughly comparable to that of Hassuna, for example, must reflect a\nculture which lived at just about the same time as that of Hassuna. We\ndo this guessing on the basis of the general similarity and degree of\ncomplexity of the Sears Roebuck catalogues of the particular assemblage\nand that of Hassuna. We suppose that for sites near at hand and of a\ncomparable cultural level, as indicated by their generally similar\nassemblages, the dating must be about the same. We may also know that\nin a general stratigraphic sense, the sites in question may both appear\nat the bottom of the ascending village sequence in their respective\nareas. Without a number of consistent radioactive carbon dates, we\ncannot be precise about priorities.\n\n[Illustration: SKETCH OF HASSUNA ASSEMBLAGE\n\n  POTTERY\n  POTTERY OBJECTS\n  CHIPPED STONE\n  BONE\n  GROUND STONE\n  ARCHITECTURE\n  REED MATTING\n  BURIAL]\n\nThe ancient mound at Jericho, in the Dead Sea valley in Palestine,\nyields some very interesting material. Its catalogue somewhat resembles\nthat of Jarmo, especially in the sense that there is a fair depth\nof deposit without portable pottery vessels. On the other hand, the\narchitecture of Jericho is surprisingly complex, with traces of massive\nstone fortification walls and the general use of formed sun-dried\nmud brick. Jericho lies in a somewhat strange and tropically lush\necological niche, some seven hundred feet below sea level; it is\ngeographically within the hilly-flanks zone but environmentally not\npart of it.\n\nSeveral radiocarbon �dates� for Jericho fall within the range of those\nI find reasonable for Jarmo, and their internal statistical consistency\nis far better than that for the Jarmo determinations. It is not yet\nclear exactly what this means.\n\nThe mound at Jericho (Tell es-Sultan) contains a remarkably\nfine sequence, which perhaps does not have the gap we noted in\nIraqi-Kurdistan between the Karim Shahir group and Jarmo. While I am\nnot sure that the Jericho sequence will prove valid for those parts\nof Palestine outside the special Dead Sea environmental niche, the\nsequence does appear to proceed from the local variety of Natufian into\nthat of a very well settled community. So far, we have little direct\nevidence for the food-production basis upon which the Jericho people\nsubsisted.\n\nThere is an early village assemblage with strong characteristics of its\nown in the land bordering the northeast corner of the Mediterranean\nSea, where Syria and the Cilician province of Turkey join. This early\nSyro-Cilician assemblage must represent a general cultural pattern\nwhich was at least in part contemporary with that of the Hassuna\nassemblage. These materials from the bases of the mounds at Mersin, and\nfrom Judaidah in the Amouq plain, as well as from a few other sites,\nrepresent the remains of true villages. The walls of their houses were\nbuilt of puddled mud, but some of the house foundations were of stone.\nSeveral different kinds of pottery were made by the people of these\nvillages. None of it resembles the pottery from Hassuna or from the\nupper levels of Jarmo or Jericho. The Syro-Cilician people had not\nlost their touch at working flint. An important southern variation of\nthe Syro-Cilician assemblage has been cleared recently at Byblos, a\nport town famous in later Phoenician times. There are three radiocarbon\ndeterminations which suggest that the time range for these developments\nwas in the sixth or early fifth millennium B.C.\n\nIt would be fascinating to search for traces of even earlier\nvillage-farming communities and for the remains of the incipient\ncultivation era, in the Syro-Cilician region.\n\n\nTHE IRANIAN PLATEAU AND THE NILE VALLEY\n\nThe map on page 125 shows some sites which lie either outside or in\nan extension of the hilly-flanks zone proper. From the base of the\ngreat mound at Sialk on the Iranian plateau came an assemblage of\nearly village material, generally similar, in the kinds of things it\ncontained, to the catalogues of Hassuna and Judaidah. The details of\nhow things were made are different; the Sialk assemblage represents\nstill another cultural pattern. I suspect it appeared a bit later\nin time than did that of Hassuna. There is an important new item in\nthe Sialk catalogue. The Sialk people made small drills or pins of\nhammered copper. Thus the metallurgist�s specialized craft had made its\nappearance.\n\nThere is at least one very early Iranian site on the inward slopes\nof the hilly-flanks zone. It is the earlier of two mounds at a place\ncalled Bakun, in southwestern Iran; the results of the excavations\nthere are not yet published and we only know of its coarse and\nprimitive pottery. I only mention Bakun because it helps us to plot the\nextent of the hilly-flanks zone villages on the map.\n\nThe Nile Valley lies beyond the peculiar environmental zone of the\nhilly flanks of the crescent, and it is probable that the earliest\nvillage-farming communities in Egypt were established by a few people\nwho wandered into the Nile delta area from the nuclear area. The\nassemblage which is most closely comparable to the catalogue of Hassuna\nor Judaidah, for example, is that from little settlements along the\nshore of the Fayum lake. The Fayum materials come mainly from grain\nbins or silos. Another site, Merimde, in the western part of the Nile\ndelta, shows the remains of a true village, but it may be slightly\nlater than the settlement of the Fayum. There are radioactive carbon\n�dates� for the Fayum materials at about 4275 B.C. � 320 years, which\nis almost fifteen hundred years later than the determinations suggested\nfor the Hassunan or Syro-Cilician assemblages. I suspect that this\nis a somewhat over-extended indication of the time it took for the\ngeneralized cultural pattern of village-farming community life to\nspread from the nuclear area down into Egypt, but as yet we have no way\nof testing these matters.\n\nIn this same vein, we have two radioactive carbon dates for an\nassemblage from sites near Khartoum in the Sudan, best represented by\nthe mound called Shaheinab. The Shaheinab catalogue roughly corresponds\nto that of the Fayum; the distance between the two places, as the Nile\nflows, is roughly 1,500 miles. Thus it took almost a thousand years for\nthe new way of life to be carried as far south into Africa as Khartoum;\nthe two Shaheinab �dates� average about 3300 B.C. � 400 years.\n\nIf the movement was up the Nile (southward), as these dates suggest,\nthen I suspect that the earliest available village material of middle\nEgypt, the so-called Tasian, is also later than that of the Fayum. The\nTasian materials come from a few graves near a village called Deir\nTasa, and I have an uncomfortable feeling that the Tasian �assemblage�\nmay be mainly an artificial selection of poor examples of objects which\nbelong in the following range of time.\n\n\nSPREAD IN TIME AND SPACE\n\nThere are now two things we can do; in fact, we have already begun to\ndo them. We can watch the spread of the new way of life upward through\ntime in the nuclear area. We can also see how the new way of life\nspread outward in space from the nuclear area, as time went on. There\nis good archeological evidence that both these processes took place.\nFor the hill country of northeastern Iraq, in the nuclear area, we\nhave already noticed how the succession (still with gaps) from Karim\nShahir, through M�lefaat and Jarmo, to Hassuna can be charted (see\nchart, p. 111). In the next chapter, we shall continue this charting\nand description of what happened in Iraq upward through time. We also\nwatched traces of the new way of life move through space up the Nile\ninto Africa, to reach Khartoum in the Sudan some thirty-five hundred\nyears later than we had seen it at Jarmo or Jericho. We caught glimpses\nof it in the Fayum and perhaps at Tasa along the way.\n\nFor the remainder of this chapter, I shall try to suggest briefly for\nyou the directions taken by the spread of the new way of life from the\nnuclear area in the Near East. First, let me make clear again that\nI _do not_ believe that the village-farming community way of life\nwas invented only once and in the Near East. It seems to me that the\nevidence is very clear that a separate experiment arose in the New\nWorld. For China, the question of independence or borrowing--in the\nappearance of the village-farming community there--is still an open\none. In the last chapter, we noted the probability of an independent\nnuclear area in southeastern Asia. Professor Carl Sauer strongly\nchampions the great importance of this area as _the_ original center\nof agricultural pursuits, as a kind of �cradle� of all incipient eras\nof the Old World at least. While there is certainly not the slightest\narcheological evidence to allow us to go that far, we may easily expect\nthat an early southeast Asian development would have been felt in\nChina. However, the appearance of the village-farming community in the\nnorthwest of India, at least, seems to have depended on the earlier\ndevelopment in the Near East. It is also probable that ideas of the new\nway of life moved well beyond Khartoum in Africa.\n\n\nTHE SPREAD OF THE VILLAGE-FARMING COMMUNITY WAY OF LIFE INTO EUROPE\n\nHow about Europe? I won�t give you many details. You can easily imagine\nthat the late prehistoric prelude to European history is a complicated\naffair. We all know very well how complicated an area Europe is now,\nwith its welter of different languages and cultures. Remember, however,\nthat a great deal of archeology has been done on the late prehistory of\nEurope, and very little on that of further Asia and Africa. If we knew\nas much about these areas as we do of Europe, I expect we�d find them\njust as complicated.\n\nThis much is clear for Europe, as far as the spread of the\nvillage-community way of life is concerned. The general idea and much\nof the know-how and the basic tools of food-production moved from the\nNear East to Europe. So did the plants and animals which had been\ndomesticated; they were not naturally at home in Europe, as they were\nin western Asia. I do not, of course, mean that there were traveling\nsalesmen who carried these ideas and things to Europe with a commercial\ngleam in their eyes. The process took time, and the ideas and things\nmust have been passed on from one group of people to the next. There\nwas also some actual movement of peoples, but we don�t know the size of\nthe groups that moved.\n\nThe story of the �colonization� of Europe by the first farmers is\nthus one of (1) the movement from the eastern Mediterranean lands\nof some people who were farmers; (2) the spread of ideas and things\nbeyond the Near East itself and beyond the paths along which the\n�colonists� moved; and (3) the adaptations of the ideas and things\nby the indigenous �Forest folk�, about whose �receptiveness� Professor\nMathiassen speaks (p. 97). It is important to note that the resulting\ncultures in the new European environment were European, not Near\nEastern. The late Professor Childe remarked that �the peoples of the\nWest were not slavish imitators; they adapted the gifts from the East\n... into a new and organic whole capable of developing on its own\noriginal lines.�\n\n\nTHE WAYS TO EUROPE\n\nSuppose we want to follow the traces of those earliest village-farmers\nwho did travel from western Asia into Europe. Let us start from\nSyro-Cilicia, that part of the hilly-flanks zone proper which lies in\nthe very northeastern corner of the Mediterranean. Three ways would be\nopen to us (of course we could not be worried about permission from the\nSoviet authorities!). We would go north, or north and slightly east,\nacross Anatolian Turkey, and skirt along either shore of the Black Sea\nor even to the east of the Caucasus Mountains along the Caspian Sea,\nto reach the plains of Ukrainian Russia. From here, we could march\nacross eastern Europe to the Baltic and Scandinavia, or even hook back\nsouthwestward to Atlantic Europe.\n\nOur second way from Syro-Cilicia would also lie over Anatolia, to the\nnorthwest, where we would have to swim or raft ourselves over the\nDardanelles or the Bosphorus to the European shore. Then we would bear\nleft toward Greece, but some of us might turn right again in Macedonia,\ngoing up the valley of the Vardar River to its divide and on down\nthe valley of the Morava beyond, to reach the Danube near Belgrade\nin Jugoslavia. Here we would turn left, following the great river\nvalley of the Danube up into central Europe. We would have a number of\ntributary valleys to explore, or we could cross the divide and go down\nthe valley of the Rhine to the North Sea.\n\nOur third way from Syro-Cilicia would be by sea. We would coast along\nsouthern Anatolia and visit Cyprus, Crete, and the Aegean islands on\nour way to Greece, where, in the north, we might meet some of those who\nhad taken the second route. From Greece, we would sail on to Italy and\nthe western isles, to reach southern France and the coasts of Spain.\nEventually a few of us would sail up the Atlantic coast of Europe, to\nreach western Britain and even Ireland.\n\n[Illustration: PROBABLE ROUTES AND TIMING IN THE SPREAD OF THE\nVILLAGE-FARMING COMMUNITY WAY OF LIFE FROM THE NEAR EAST TO EUROPE]\n\nOf course none of us could ever take these journeys as the first\nfarmers took them, since the whole course of each journey must have\nlasted many lifetimes. The date given to the assemblage called Windmill\nHill, the earliest known trace of village-farming communities in\nEngland, is about 2500 B.C. I would expect about 5500 B.C. to be a\nsafe date to give for the well-developed early village communities of\nSyro-Cilicia. We suspect that the spread throughout Europe did not\nproceed at an even rate. Professor Piggott writes that �at a date\nprobably about 2600 B.C., simple agricultural communities were being\nestablished in Spain and southern France, and from the latter region a\nspread northwards can be traced ... from points on the French seaboard\nof the [English] Channel ... there were emigrations of a certain number\nof these tribes by boat, across to the chalk lands of Wessex and Sussex\n[in England], probably not more than three or four generations later\nthan the formation of the south French colonies.�\n\nNew radiocarbon determinations are becoming available all the\ntime--already several suggest that the food-producing way of life\nhad reached the lower Rhine and Holland by 4000 B.C. But not all\nprehistorians accept these �dates,� so I do not show them on my map\n(p. 139).\n\n\nTHE EARLIEST FARMERS OF ENGLAND\n\nTo describe the later prehistory of all Europe for you would take\nanother book and a much larger one than this is. Therefore, I have\ndecided to give you only a few impressions of the later prehistory of\nBritain. Of course the British Isles lie at the other end of Europe\nfrom our base-line in western Asia. Also, they received influences\nalong at least two of the three ways in which the new way of life\nmoved into Europe. We will look at more of their late prehistory in a\nfollowing chapter: here, I shall speak only of the first farmers.\n\nThe assemblage called Windmill Hill, which appears in the south of\nEngland, exhibits three different kinds of structures, evidence of\ngrain-growing and of stock-breeding, and some distinctive types of\npottery and stone implements. The most remarkable type of structure\nis the earthwork enclosures which seem to have served as seasonal\ncattle corrals. These enclosures were roughly circular, reached over\na thousand feet in diameter, and sometimes included two or three\nconcentric sets of banks and ditches. Traces of oblong timber houses\nhave been found, but not within the enclosures. The second type of\nstructure is mine-shafts, dug down into the chalk beds where good\nflint for the making of axes or hoes could be found. The third type\nof structure is long simple mounds or �unchambered barrows,� in one\nend of which burials were made. It has been commonly believed that the\nWindmill Hill assemblage belonged entirely to the cultural tradition\nwhich moved up through France to the Channel. Professor Piggott is now\nconvinced, however, that important elements of Windmill Hill stem from\nnorthern Germany and Denmark--products of the first way into Europe\nfrom the east.\n\nThe archeological traces of a second early culture are to be found\nin the west of England, western and northern Scotland, and most of\nIreland. The bearers of this culture had come up the Atlantic coast\nby sea from southern France and Spain. The evidence they have left us\nconsists mainly of tombs and the contents of tombs, with only very\nrare settlement sites. The tombs were of some size and received the\nbodies of many people. The tombs themselves were built of stone, heaped\nover with earth; the stones enclosed a passage to a central chamber\n(�passage graves�), or to a simple long gallery, along the sides of\nwhich the bodies were laid (�gallery graves�). The general type of\nconstruction is called �megalithic� (= great stone), and the whole\nearth-mounded structure is often called a _barrow_. Since many have\nproper chambers, in one sense or another, we used the term �unchambered\nbarrow� above to distinguish those of the Windmill Hill type from these\nmegalithic structures. There is some evidence for sacrifice, libations,\nand ceremonial fires, and it is clear that some form of community\nritual was focused on the megalithic tombs.\n\nThe cultures of the people who produced the Windmill Hill assemblage\nand of those who made the megalithic tombs flourished, at least in\npart, at the same time. Although the distributions of the two different\ntypes of archeological traces are in quite different parts of the\ncountry, there is Windmill Hill pottery in some of the megalithic\ntombs. But the tombs also contain pottery which seems to have arrived\nwith the tomb builders themselves.\n\nThe third early British group of antiquities of this general time\n(following 2500 B.C.) comes from sites in southern and eastern England.\nIt is not so certain that the people who made this assemblage, called\nPeterborough, were actually farmers. While they may on occasion have\npracticed a simple agriculture, many items of their assemblage link\nthem closely with that of the �Forest folk� of earlier times in\nEngland and in the Baltic countries. Their pottery is decorated with\nimpressions of cords and is quite different from that of Windmill Hill\nand the megalithic builders. In addition, the distribution of their\nfinds extends into eastern Britain, where the other cultures have left\nno trace. The Peterborough people had villages with semi-subterranean\nhuts, and the bones of oxen, pigs, and sheep have been found in a few\nof these. On the whole, however, hunting and fishing seem to have been\ntheir vital occupations. They also established trade routes especially\nto acquire the raw material for stone axes.\n\nA probably slightly later culture, whose traces are best known from\nSkara Brae on Orkney, also had its roots in those cultures of the\nBaltic area which fused out of the meeting of the �Forest folk� and\nthe peoples who took the eastern way into Europe. Skara Brae is very\nwell preserved, having been built of thin stone slabs about which\ndune-sand drifted after the village died. The individual houses, the\nbedsteads, the shelves, the chests for clothes and oddments--all built\nof thin stone-slabs--may still be seen in place. But the Skara Brae\npeople lived entirely by sheep- and cattle-breeding, and by catching\nshellfish. Neither grain nor the instruments of agriculture appeared at\nSkara Brae.\n\n\nTHE EUROPEAN ACHIEVEMENT\n\nThe above is only a very brief description of what went on in Britain\nwith the arrival of the first farmers. There are many interesting\ndetails which I have omitted in order to shorten the story.\n\nI believe some of the difficulty we have in understanding the\nestablishment of the first farming communities in Europe is with\nthe word �colonization.� We have a natural tendency to think of\n�colonization� as it has happened within the last few centuries. In the\ncase of the colonization of the Americas, for example, the colonists\ncame relatively quickly, and in increasingly vast numbers. They had\nvastly superior technical, political, and war-making skills, compared\nwith those of the Indians. There was not much mixing with the Indians.\nThe case in Europe five or six thousand years ago must have been very\ndifferent. I wonder if it is even proper to call people �colonists�\nwho move some miles to a new region, settle down and farm it for some\nyears, then move on again, generation after generation? The ideas and\nthe things which these new people carried were only _potentially_\nsuperior. The ideas and things and the people had to prove themselves\nin their adaptation to each new environment. Once this was done another\nlink to the chain would be added, and then the forest-dwellers and\nother indigenous folk of Europe along the way might accept the new\nideas and things. It is quite reasonable to expect that there must have\nbeen much mixture of the migrants and the indigenes along the way; the\nPeterborough and Skara Brae assemblages we mentioned above would seem\nto be clear traces of such fused cultures. Sometimes, especially if the\nmigrants were moving by boat, long distances may have been covered in\na short time. Remember, however, we seem to have about three thousand\nyears between the early Syro-Cilician villages and Windmill Hill.\n\nLet me repeat Professor Childe again. �The peoples of the West were\nnot slavish imitators: they adapted the gifts from the East ... into\na new and organic whole capable of developing on its own original\nlines.� Childe is of course completely conscious of the fact that his\n�peoples of the West� were in part the descendants of migrants who came\noriginally from the �East,� bringing their �gifts� with them. This\nwas the late prehistoric achievement of Europe--to take new ideas and\nthings and some migrant peoples and, by mixing them with the old in its\nown environments, to forge a new and unique series of cultures.\n\nWhat we know of the ways of men suggests to us that when the details\nof the later prehistory of further Asia and Africa are learned, their\nstories will be just as exciting.\n\n\n\n\nTHE Conquest of Civilization\n\n[Illustration]\n\n\nNow we must return to the Near East again. We are coming to the point\nwhere history is about to begin. I am going to stick pretty close\nto Iraq and Egypt in this chapter. These countries will perhaps be\nthe most interesting to most of us, for the foundations of western\ncivilization were laid in the river lands of the Tigris and Euphrates\nand of the Nile. I shall probably stick closest of all to Iraq, because\nthings first happened there and also because I know it best.\n\nThere is another interesting thing, too. We have seen that the first\nexperiment in village-farming took place in the Near East. So did\nthe first experiment in civilization. Both experiments �took.� The\ntraditions we live by today are based, ultimately, on those ancient\nbeginnings in food-production and civilization in the Near East.\n\n\nWHAT �CIVILIZATION� MEANS\n\nI shall not try to define �civilization� for you; rather, I shall\ntell you what the word brings to my mind. To me civilization means\nurbanization: the fact that there are cities. It means a formal\npolitical set-up--that there are kings or governing bodies that the\npeople have set up. It means formal laws--rules of conduct--which the\ngovernment (if not the people) believes are necessary. It probably\nmeans that there are formalized projects--roads, harbors, irrigation\ncanals, and the like--and also some sort of army or police force\nto protect them. It means quite new and different art forms. It\nalso usually means there is writing. (The people of the Andes--the\nIncas--had everything which goes to make up a civilization but formal\nwriting. I can see no reason to say they were not civilized.) Finally,\nas the late Professor Redfield reminded us, civilization seems to bring\nwith it the dawn of a new kind of moral order.\n\nIn different civilizations, there may be important differences in the\nway such things as the above are managed. In early civilizations, it is\nusual to find religion very closely tied in with government, law, and\nso forth. The king may also be a high priest, or he may even be thought\nof as a god. The laws are usually thought to have been given to the\npeople by the gods. The temples are protected just as carefully as the\nother projects.\n\n\nCIVILIZATION IMPOSSIBLE WITHOUT FOOD-PRODUCTION\n\nCivilizations have to be made up of many people. Some of the people\nlive in the country; some live in very large towns or cities. Classes\nof society have begun. There are officials and government people; there\nare priests or religious officials; there are merchants and traders;\nthere are craftsmen, metal-workers, potters, builders, and so on; there\nare also farmers, and these are the people who produce the food for the\nwhole population. It must be obvious that civilization cannot exist\nwithout food-production and that food-production must also be at a\npretty efficient level of village-farming before civilization can even\nbegin.\n\nBut people can be food-producing without being civilized. In many\nparts of the world this is still the case. When the white men first\ncame to America, the Indians in most parts of this hemisphere were\nfood-producers. They grew corn, potatoes, tomatoes, squash, and many\nother things the white men had never eaten before. But only the Aztecs\nof Mexico, the Mayas of Yucatan and Guatemala, and the Incas of the\nAndes were civilized.\n\n\nWHY DIDN�T CIVILIZATION COME TO ALL FOOD-PRODUCERS?\n\nOnce you have food-production, even at the well-advanced level of\nthe village-farming community, what else has to happen before you\nget civilization? Many men have asked this question and have failed\nto give a full and satisfactory answer. There is probably no _one_\nanswer. I shall give you my own idea about how civilization _may_ have\ncome about in the Near East alone. Remember, it is only a guess--a\nputting together of hunches from incomplete evidence. It is _not_ meant\nto explain how civilization began in any of the other areas--China,\nsoutheast Asia, the Americas--where other early experiments in\ncivilization went on. The details in those areas are quite different.\nWhether certain general principles hold, for the appearance of any\nearly civilization, is still an open and very interesting question.\n\n\nWHERE CIVILIZATION FIRST APPEARED IN THE NEAR EAST\n\nYou remember that our earliest village-farming communities lay along\nthe hilly flanks of a great �crescent.� (See map on p. 125.)\nProfessor Breasted�s �fertile crescent� emphasized the rich river\nvalleys of the Nile and the Tigris-Euphrates Rivers. Our hilly-flanks\narea of the crescent zone arches up from Egypt through Palestine and\nSyria, along southern Turkey into northern Iraq, and down along the\nsouthwestern fringe of Iran. The earliest food-producing villages we\nknow already existed in this area by about 6750 B.C. (� 200 years).\n\nNow notice that this hilly-flanks zone does not include southern\nMesopotamia, the alluvial land of the lower Tigris and Euphrates in\nIraq, or the Nile Valley proper. The earliest known villages of classic\nMesopotamia and Egypt seem to appear fifteen hundred or more years\nafter those of the hilly-flanks zone. For example, the early Fayum\nvillage which lies near a lake west of the Nile Valley proper (see p.\n135) has a radiocarbon date of 4275 B.C. � 320 years. It was in the\nriver lands, however, that the immediate beginnings of civilization\nwere made.\n\nWe know that by about 3200 B.C. the Early Dynastic period had begun\nin southern Mesopotamia. The beginnings of writing go back several\nhundred years earlier, but we can safely say that civilization had\nbegun in Mesopotamia by 3200 B.C. In Egypt, the beginning of the First\nDynasty is slightly later, at about 3100 B.C., and writing probably\ndid not appear much earlier. There is no question but that history and\ncivilization were well under way in both Mesopotamia and Egypt by 3000\nB.C.--about five thousand years ago.\n\n\nTHE HILLY-FLANKS ZONE VERSUS THE RIVER LANDS\n\nWhy did these two civilizations spring up in these two river\nlands which apparently were not even part of the area where the\nvillage-farming community began? Why didn�t we have the first\ncivilizations in Palestine, Syria, north Iraq, or Iran, where we�re\nsure food-production had had a long time to develop? I think the\nprobable answer gives a clue to the ways in which civilization began in\nEgypt and Mesopotamia.\n\nThe land in the hilly flanks is of a sort which people can farm without\ntoo much trouble. There is a fairly fertile coastal strip in Palestine\nand Syria. There are pleasant mountain slopes, streams running out to\nthe sea, and rain, at least in the winter months. The rain belt and the\nfoothills of the Turkish mountains also extend to northern Iraq and on\nto the Iranian plateau. The Iranian plateau has its mountain valleys,\nstreams, and some rain. These hilly flanks of the �crescent,� through\nmost of its arc, are almost made-to-order for beginning farmers. The\ngrassy slopes of the higher hills would be pasture for their herds\nand flocks. As soon as the earliest experiments with agriculture and\ndomestic animals had been successful, a pleasant living could be\nmade--and without too much trouble.\n\nI should add here again, that our evidence points increasingly to a\nclimate for those times which is very little different from that for\nthe area today. Now look at Egypt and southern Mesopotamia. Both are\nlands without rain, for all intents and purposes. Both are lands with\nrivers that have laid down very fertile soil--soil perhaps superior to\nthat in the hilly flanks. But in both lands, the rivers are of no great\naid without some control.\n\nThe Nile floods its banks once a year, in late September or early\nOctober. It not only soaks the narrow fertile strip of land on either\nside; it lays down a fresh layer of new soil each year. Beyond the\nfertile strip on either side rise great cliffs, and behind them is the\ndesert. In its natural, uncontrolled state, the yearly flood of the\nNile must have caused short-lived swamps that were full of crocodiles.\nAfter a short time, the flood level would have dropped, the water and\nthe crocodiles would have run back into the river, and the swamp plants\nwould have become parched and dry.\n\nThe Tigris and the Euphrates of Mesopotamia are less likely to flood\nregularly than the Nile. The Tigris has a shorter and straighter course\nthan the Euphrates; it is also the more violent river. Its banks are\nhigh, and when the snows melt and flow into all of its tributary rivers\nit is swift and dangerous. The Euphrates has a much longer and more\ncurving course and few important tributaries. Its banks are lower and\nit is less likely to flood dangerously. The land on either side and\nbetween the two rivers is very fertile, south of the modern city of\nBaghdad. Unlike the Nile Valley, neither the Tigris nor the Euphrates\nis flanked by cliffs. The land on either side of the rivers stretches\nout for miles and is not much rougher than a poor tennis court.\n\n\nTHE RIVERS MUST BE CONTROLLED\n\nThe real trick in both Egypt and Mesopotamia is to make the rivers work\nfor you. In Egypt, this is a matter of building dikes and reservoirs\nthat will catch and hold the Nile flood. In this way, the water is held\nand allowed to run off over the fields as it is needed. In Mesopotamia,\nit is a matter of taking advantage of natural river channels and branch\nchannels, and of leading ditches from these onto the fields.\n\nObviously, we can no longer find the first dikes or reservoirs of\nthe Nile Valley, or the first canals or ditches of Mesopotamia. The\nsame land has been lived on far too long for any traces of the first\nattempts to be left; or, especially in Egypt, it has been covered by\nthe yearly deposits of silt, dropped by the river floods. But we�re\npretty sure the first food-producers of Egypt and southern Mesopotamia\nmust have made such dikes, canals, and ditches. In the first place,\nthere can�t have been enough rain for them to grow things otherwise.\nIn the second place, the patterns for such projects seem to have been\npretty well set by historic times.\n\n\nCONTROL OF THE RIVERS THE BUSINESS OF EVERYONE\n\nHere, then, is a _part_ of the reason why civilization grew in Egypt\nand Mesopotamia first--not in Palestine, Syria, or Iran. In the latter\nareas, people could manage to produce their food as individuals. It\nwasn�t too hard; there were rain and some streams, and good pasturage\nfor the animals even if a crop or two went wrong. In Egypt and\nMesopotamia, people had to put in a much greater amount of work, and\nthis work couldn�t be individual work. Whole villages or groups of\npeople had to turn out to fix dikes or dig ditches. The dikes had to be\nrepaired and the ditches carefully cleared of silt each year, or they\nwould become useless.\n\nThere also had to be hard and fast rules. The person who lived nearest\nthe ditch or the reservoir must not be allowed to take all the water\nand leave none for his neighbors. It was not only a business of\nlearning to control the rivers and of making their waters do the\nfarmer�s work. It also meant controlling men. But once these men had\nmanaged both kinds of controls, what a wonderful yield they had! The\nsoil was already fertile, and the silt which came in the floods and\nditches kept adding fertile soil.\n\n\nTHE GERM OF CIVILIZATION IN EGYPT AND MESOPOTAMIA\n\nThis learning to work together for the common good was the real germ of\nthe Egyptian and the Mesopotamian civilizations. The bare elements of\ncivilization were already there: the need for a governing hand and for\nlaws to see that the communities� work was done and that the water was\njustly shared. You may object that there is a sort of chicken and egg\nparadox in this idea. How could the people set up the rules until they\nhad managed to get a way to live, and how could they manage to get a\nway to live until they had set up the rules? I think that small groups\nmust have moved down along the mud-flats of the river banks quite\nearly, making use of naturally favorable spots, and that the rules grew\nout of such cases. It would have been like the hand-in-hand growth of\nautomobiles and paved highways in the United States.\n\nOnce the rules and the know-how did get going, there must have been a\nconstant interplay of the two. Thus, the more the crops yielded, the\nricher and better-fed the people would have been, and the more the\npopulation would have grown. As the population grew, more land would\nhave needed to be flooded or irrigated, and more complex systems of\ndikes, reservoirs, canals, and ditches would have been built. The more\ncomplex the system, the more necessity for work on new projects and for\nthe control of their use.... And so on....\n\nWhat I have just put down for you is a guess at the manner of growth of\nsome of the formalized systems that go to make up a civilized society.\nMy explanation has been pointed particularly at Egypt and Mesopotamia.\nI have already told you that the irrigation and water-control part of\nit does not apply to the development of the Aztecs or the Mayas, or\nperhaps anybody else. But I think that a fair part of the story of\nEgypt and Mesopotamia must be as I�ve just told you.\n\nI am particularly anxious that you do _not_ understand me to mean that\nirrigation _caused_ civilization. I am sure it was not that simple at\nall. For, in fact, a complex and highly engineered irrigation system\nproper did not come until later times. Let�s say rather that the simple\nbeginnings of irrigation allowed and in fact encouraged a great number\nof things in the technological, political, social, and moral realms of\nculture. We do not yet understand what all these things were or how\nthey worked. But without these other aspects of culture, I do not\nthink that urbanization and civilization itself could have come into\nbeing.\n\n\nTHE ARCHEOLOGICAL SEQUENCE TO CIVILIZATION IN IRAQ\n\nWe last spoke of the archeological materials of Iraq on page 130,\nwhere I described the village-farming community of Hassunan type. The\nHassunan type villages appear in the hilly-flanks zone and in the\nrolling land adjacent to the Tigris in northern Iraq. It is probable\nthat even before the Hassuna pattern of culture lived its course, a\nnew assemblage had been established in northern Iraq and Syria. This\nassemblage is called Halaf, after a site high on a tributary of the\nEuphrates, on the Syro-Turkish border.\n\n[Illustration: SKETCH OF SELECTED ITEMS OF HALAFIAN ASSEMBLAGE\n\n  BEADS AND PENDANTS\n  POTTERY MOTIFS\n  POTTERY]\n\nThe Halafian assemblage is incompletely known. The culture it\nrepresents included a remarkably handsome painted pottery.\nArcheologists have tended to be so fascinated with this pottery that\nthey have bothered little with the rest of the Halafian assemblage. We\ndo know that strange stone-founded houses, with plans like those of the\npopular notion of an Eskimo igloo, were built. Like the pottery of the\nSamarran style, which appears as part of the Hassunan assemblage (see\np. 131), the Halafian painted pottery implies great concentration and\nexcellence of draftsmanship on the part of the people who painted it.\n\nWe must mention two very interesting sites adjacent to the mud-flats of\nthe rivers, half way down from northern Iraq to the classic alluvial\nMesopotamian area. One is Baghouz on the Euphrates; the other is\nSamarra on the Tigris (see map, p. 125). Both these sites yield the\nhandsome painted pottery of the style called Samarran: in fact it\nis Samarra which gives its name to the pottery. Neither Baghouz nor\nSamarra have completely Hassunan types of assemblages, and at Samarra\nthere are a few pots of proper Halafian style. I suppose that Samarra\nand Baghouz give us glimpses of those early farmers who had begun to\nfinger their way down the mud-flats of the river banks toward the\nfertile but yet untilled southland.\n\n\nCLASSIC SOUTHERN MESOPOTAMIA FIRST OCCUPIED\n\nOur next step is into the southland proper. Here, deep in the core of\nthe mound which later became the holy Sumerian city of Eridu, Iraqi\narcheologists uncovered a handsome painted pottery. Pottery of the same\ntype had been noticed earlier by German archeologists on the surface\nof a small mound, awash in the spring floods, near the remains of the\nBiblical city of Erich (Sumerian = Uruk; Arabic = Warka). This �Eridu�\npottery, which is about all we have of the assemblage of the people who\nonce produced it, may be seen as a blend of the Samarran and Halafian\npainted pottery styles. This may over-simplify the case, but as yet we\ndo not have much evidence to go on. The idea does at least fit with my\ninterpretation of the meaning of Baghouz and Samarra as way-points on\nthe mud-flats of the rivers half way down from the north.\n\nMy colleague, Robert Adams, believes that there were certainly\nriverine-adapted food-collectors living in lower Mesopotamia. The\npresence of such would explain why the Eridu assemblage is not simply\nthe sum of the Halafian and Samarran assemblages. But the domesticated\nplants and animals and the basic ways of food-production must have\ncome from the hilly-flanks country in the north.\n\nAbove the basal Eridu levels, and at a number of other sites in the\nsouth, comes a full-fledged assemblage called Ubaid. Incidentally,\nthere is an aspect of the Ubaidian assemblage in the north as well. It\nseems to move into place before the Halaf manifestation is finished,\nand to blend with it. The Ubaidian assemblage in the south is by far\nthe more spectacular. The development of the temple has been traced\nat Eridu from a simple little structure to a monumental building some\n62 feet long, with a pilaster-decorated fa�ade and an altar in its\ncentral chamber. There is painted Ubaidian pottery, but the style is\nhurried and somewhat careless and gives the _impression_ of having been\na cheap mass-production means of decoration when compared with the\ncarefully drafted styles of Samarra and Halaf. The Ubaidian people made\nother items of baked clay: sickles and axes of very hard-baked clay\nare found. The northern Ubaidian sites have yielded tools of copper,\nbut metal tools of unquestionable Ubaidian find-spots are not yet\navailable from the south. Clay figurines of human beings with monstrous\nturtle-like faces are another item in the southern Ubaidian assemblage.\n\n[Illustration: SKETCH OF SELECTED ITEMS OF UBAIDIAN ASSEMBLAGE]\n\nThere is a large Ubaid cemetery at Eridu, much of it still awaiting\nexcavation. The few skeletons so far tentatively studied reveal a\ncompletely modern type of �Mediterraneanoid�; the individuals whom the\nskeletons represent would undoubtedly blend perfectly into the modern\npopulation of southern Iraq. What the Ubaidian assemblage says to us is\nthat these people had already adapted themselves and their culture to\nthe peculiar riverine environment of classic southern Mesopotamia. For\nexample, hard-baked clay axes will chop bundles of reeds very well, or\nhelp a mason dress his unbaked mud bricks, and there were only a few\nsoft and pithy species of trees available. The Ubaidian levels of Eridu\nyield quantities of date pits; that excellent and characteristically\nIraqi fruit was already in use. The excavators also found the clay\nmodel of a ship, with the stepping-point for a mast, so that Sinbad the\nSailor must have had his antecedents as early as the time of Ubaid.\nThe bones of fish, which must have flourished in the larger canals as\nwell as in the rivers, are common in the Ubaidian levels and thereafter.\n\n\nTHE UBAIDIAN ACHIEVEMENT\n\nOn present evidence, my tendency is to see the Ubaidian assemblage\nin southern Iraq as the trace of a new era. I wish there were more\nevidence, but what we have suggests this to me. The culture of southern\nUbaid soon became a culture of towns--of centrally located towns with\nsome rural villages about them. The town had a temple and there must\nhave been priests. These priests probably had political and economic\nfunctions as well as religious ones, if the somewhat later history of\nMesopotamia may suggest a pattern for us. Presently the temple and its\npriesthood were possibly the focus of the market; the temple received\nits due, and may already have had its own lands and herds and flocks.\nThe people of the town, undoubtedly at least in consultation with the\ntemple administration, planned and maintained the simple irrigation\nditches. As the system flourished, the community of rural farmers would\nhave produced more than sufficient food. The tendency for specialized\ncrafts to develop--tentative at best at the cultural level of the\nearlier village-farming community era--would now have been achieved,\nand probably many other specialists in temple administration, water\ncontrol, architecture, and trade would also have appeared, as the\nsurplus food-supply was assured.\n\nSouthern Mesopotamia is not a land rich in natural resources other\nthan its fertile soil. Stone, good wood for construction, metal, and\ninnumerable other things would have had to be imported. Grain and\ndates--although both are bulky and difficult to transport--and wool and\nwoven stuffs must have been the mediums of exchange. Over what area did\nthe trading net-work of Ubaid extend? We start with the idea that the\nUbaidian assemblage is most richly developed in the south. We assume, I\nthink, correctly, that it represents a cultural flowering of the south.\nOn the basis of the pottery of the still elusive �Eridu� immigrants\nwho had first followed the rivers into alluvial Mesopotamia, we get\nthe notion that the characteristic painted pottery style of Ubaid\nwas developed in the southland. If this reconstruction is correct\nthen we may watch with interest where the Ubaid pottery-painting\ntradition spread. We have already mentioned that there is a substantial\nassemblage of (and from the southern point of view, _fairly_ pure)\nUbaidian material in northern Iraq. The pottery appears all along the\nIranian flanks, even well east of the head of the Persian Gulf, and\nends in a later and spectacular flourish in an extremely handsome\npainted style called the �Susa� style. Ubaidian pottery has been noted\nup the valleys of both of the great rivers, well north of the Iraqi\nand Syrian borders on the southern flanks of the Anatolian plateau.\nIt reaches the Mediterranean Sea and the valley of the Orontes in\nSyria, and it may be faintly reflected in the painted style of a\nsite called Ghassul, on the east bank of the Jordan in the Dead Sea\nValley. Over this vast area--certainly in all of the great basin of\nthe Tigris-Euphrates drainage system and its natural extensions--I\nbelieve we may lay our fingers on the traces of a peculiar way of\ndecorating pottery, which we call Ubaidian. This cursive and even\nslap-dash decoration, it appears to me, was part of a new cultural\ntradition which arose from the adjustments which immigrant northern\nfarmers first made to the new and challenging environment of southern\nMesopotamia. But exciting as the idea of the spread of influences of\nthe Ubaid tradition in space may be, I believe you will agree that the\nconsequences of the growth of that tradition in southern Mesopotamia\nitself, as time passed, are even more important.\n\n\nTHE WARKA PHASE IN THE SOUTH\n\nSo far, there are only two radiocarbon determinations for the Ubaidian\nassemblage, one from Tepe Gawra in the north and one from Warka in the\nsouth. My hunch would be to use the dates 4500 to 3750 B.C., with a\nplus or more probably a minus factor of about two hundred years for\neach, as the time duration of the Ubaidian assemblage in southern\nMesopotamia.\n\nNext, much to our annoyance, we have what is almost a temporary\nblack-out. According to the system of terminology I favor, our next\n�assemblage� after that of Ubaid is called the _Warka_ phase, from\nthe Arabic name for the site of Uruk or Erich. We know it only from\nsix or seven levels in a narrow test-pit at Warka, and from an even\nsmaller hole at another site. This �assemblage,� so far, is known only\nby its pottery, some of which still bears Ubaidian style painting. The\ncharacteristic Warkan pottery is unpainted, with smoothed red or gray\nsurfaces and peculiar shapes. Unquestionably, there must be a great\ndeal more to say about the Warkan assemblage, but someone will first\nhave to excavate it!\n\n\nTHE DAWN OF CIVILIZATION\n\nAfter our exasperation with the almost unknown Warka interlude,\nfollowing the brilliant �false dawn� of Ubaid, we move next to an\nassemblage which yields traces of a preponderance of those elements\nwhich we noted (p. 144) as meaning civilization. This assemblage\nis that called _Proto-Literate_; it already contains writing. On\nthe somewhat shaky principle that writing, however early, means\nhistory--and no longer prehistory--the assemblage is named for the\nhistorical implications of its content, and no longer after the name of\nthe site where it was first found. Since some of the older books used\nsite-names for this assemblage, I will tell you that the Proto-Literate\nincludes the latter half of what used to be called the �Uruk period�\n_plus_ all of what used to be called the �Jemdet Nasr period.� It shows\na consistent development from beginning to end.\n\nI shall, in fact, leave much of the description and the historic\nimplications of the Proto-Literate assemblage to the conventional\nhistorians. Professor T. J. Jacobsen, reaching backward from the\nlegends he finds in the cuneiform writings of slightly later times, can\nin fact tell you a more complete story of Proto-Literate culture than\nI can. It should be enough here if I sum up briefly what the excavated\narcheological evidence shows.\n\nWe have yet to dig a Proto-Literate site in its entirety, but the\nindications are that the sites cover areas the size of small cities.\nIn architecture, we know of large and monumental temple structures,\nwhich were built on elaborate high terraces. The plans and decoration\nof these temples follow the pattern set in the Ubaid phase: the chief\ndifference is one of size. The German excavators at the site of Warka\nreckoned that the construction of only one of the Proto-Literate temple\ncomplexes there must have taken 1,500 men, each working a ten-hour day,\nfive years to build.\n\n\nART AND WRITING\n\nIf the architecture, even in its monumental forms, can be seen to\nstem from Ubaidian developments, this is not so with our other\nevidence of Proto-Literate artistic expression. In relief and applied\nsculpture, in sculpture in the round, and on the engraved cylinder\nseals--all of which now make their appearance--several completely\nnew artistic principles are apparent. These include the composition\nof subject-matter in groups, commemorative scenes, and especially\nthe ability and apparent desire to render the human form and face.\nExcellent as the animals of the Franco-Cantabrian art may have been\n(see p. 85), and however handsome were the carefully drafted\ngeometric designs and conventionalized figures on the pottery of the\nearly farmers, there seems to have been, up to this time, a mental\nblock about the drawing of the human figure and especially the human\nface. We do not yet know what caused this self-consciousness about\npicturing themselves which seems characteristic of men before the\nappearance of civilization. We do know that with civilization, the\nmental block seems to have been removed.\n\nClay tablets bearing pictographic signs are the Proto-Literate\nforerunners of cuneiform writing. The earliest examples are not well\nunderstood but they seem to be �devices for making accounts and\nfor remembering accounts.� Different from the later case in Egypt,\nwhere writing appears fully formed in the earliest examples, the\ndevelopment from simple pictographic signs to proper cuneiform writing\nmay be traced, step by step, in Mesopotamia. It is most probable\nthat the development of writing was connected with the temple and\nthe need for keeping account of the temple�s possessions. Professor\nJacobsen sees writing as a means for overcoming space, time, and the\nincreasing complications of human affairs: �Literacy, which began\nwith ... civilization, enhanced mightily those very tendencies in its\ndevelopment which characterize it as a civilization and mark it off as\nsuch from other types of culture.�\n\n[Illustration: RELIEF ON A PROTO-LITERATE STONE VASE, WARKA\n\nUnrolled drawing, with restoration suggested by figures from\ncontemporary cylinder seals]\n\nWhile the new principles in art and the idea of writing are not\nforeshadowed in the Ubaid phase, or in what little we know of the\nWarkan, I do not think we need to look outside southern Mesopotamia\nfor their beginnings. We do know something of the adjacent areas,\ntoo, and these beginnings are not there. I think we must accept them\nas completely new discoveries, made by the people who were developing\nthe whole new culture pattern of classic southern Mesopotamia. Full\ndescription of the art, architecture, and writing of the Proto-Literate\nphase would call for many details. Men like Professor Jacobsen and Dr.\nAdams can give you these details much better than I can. Nor shall I do\nmore than tell you that the common pottery of the Proto-Literate phase\nwas so well standardized that it looks factory made. There was also\nsome handsome painted pottery, and there were stone bowls with inlaid\ndecoration. Well-made tools in metal had by now become fairly common,\nand the metallurgist was experimenting with the casting process. Signs\nfor plows have been identified in the early pictographs, and a wheeled\nchariot is shown on a cylinder seal engraving. But if I were forced to\na guess in the matter, I would say that the development of plows and\ndraft-animals probably began in the Ubaid period and was another of the\ngreat innovations of that time.\n\nThe Proto-Literate assemblage clearly suggests a highly developed and\nsophisticated culture. While perhaps not yet fully urban, it is on\nthe threshold of urbanization. There seems to have been a very dense\nsettlement of Proto-Literate sites in classic southern Mesopotamia,\nmany of them newly founded on virgin soil where no earlier settlements\nhad been. When we think for a moment of what all this implies, of the\ngrowth of an irrigation system which must have existed to allow the\nflourish of this culture, and of the social and political organization\nnecessary to maintain the irrigation system, I think we will agree that\nat last we are dealing with civilization proper.\n\n\nFROM PREHISTORY TO HISTORY\n\nNow it is time for the conventional ancient historians to take over\nthe story from me. Remember this when you read what they write. Their\nreal base-line is with cultures ruled over by later kings and emperors,\nwhose writings describe military campaigns and the administration of\nlaws and fully organized trading ventures. To these historians, the\nProto-Literate phase is still a simple beginning for what is to follow.\nIf they mention the Ubaid assemblage at all--the one I was so lyrical\nabout--it will be as some dim and fumbling step on the path to the\ncivilized way of life.\n\nI suppose you could say that the difference in the approach is that as\na prehistorian I have been looking forward or upward in time, while the\nhistorians look backward to glimpse what I�ve been describing here. My\nbase-line was half a million years ago with a being who had little more\nthan the capacity to make tools and fire to distinguish him from the\nanimals about him. Thus my point of view and that of the conventional\nhistorian are bound to be different. You will need both if you want to\nunderstand all of the story of men, as they lived through time to the\npresent.\n\n\n\n\nEnd of PREHISTORY\n\n[Illustration]\n\n\nYou�ll doubtless easily recall your general course in ancient history:\nhow the Sumerian dynasties of Mesopotamia were supplanted by those of\nBabylonia, how the Hittite kingdom appeared in Anatolian Turkey, and\nabout the three great phases of Egyptian history. The literate kingdom\nof Crete arose, and by 1500 B.C. there were splendid fortified Mycenean\ntowns on the mainland of Greece. This was the time--about the whole\neastern end of the Mediterranean--of what Professor Breasted called the\n�first great internationalism,� with flourishing trade, international\ntreaties, and royal marriages between Egyptians, Babylonians, and\nHittites. By 1200 B.C., the whole thing had fragmented: �the peoples of\nthe sea were restless in their isles,� and the great ancient centers in\nEgypt, Mesopotamia, and Anatolia were eclipsed. Numerous smaller states\narose--Assyria, Phoenicia, Israel--and the Trojan war was fought.\nFinally Assyria became the paramount power of all the Near East,\npresently to be replaced by Persia.\n\nA new culture, partaking of older west Asiatic and Egyptian elements,\nbut casting them with its own tradition into a new mould, arose in\nmainland Greece.\n\nI once shocked my Classical colleagues to the core by referring to\nGreece as �a second degree derived civilization,� but there is much\ntruth in this. The principles of bronze- and then of iron-working, of\nthe alphabet, and of many other elements in Greek culture were borrowed\nfrom western Asia. Our debt to the Greeks is too well known for me even\nto mention it, beyond recalling to you that it is to Greece we owe the\nbeginnings of rational or empirical science and thought in general. But\nGreece fell in its turn to Rome, and in 55 B.C. Caesar invaded Britain.\n\nI last spoke of Britain on page 142; I had chosen it as my single\nexample for telling you something of how the earliest farming\ncommunities were established in Europe. Now I will continue with\nBritain�s later prehistory, so you may sense something of the end of\nprehistory itself. Remember that Britain is simply a single example\nwe select; the same thing could be done for all the other countries\nof Europe, and will be possible also, some day, for further Asia and\nAfrica. Remember, too, that prehistory in most of Europe runs on for\nthree thousand or more years _after_ conventional ancient history\nbegins in the Near East. Britain is a good example to use in showing\nhow prehistory ended in Europe. As we said earlier, it lies at the\nopposite end of Europe from the area of highest cultural achievement in\nthose times, and should you care to read more of the story in detail,\nyou may do so in the English language.\n\n\nMETAL USERS REACH ENGLAND\n\nWe left the story of Britain with the peoples who made three different\nassemblages--the Windmill Hill, the megalith-builders, and the\nPeterborough--making adjustments to their environments, to the original\ninhabitants of the island, and to each other. They had first arrived\nabout 2500 B.C., and were simple pastoralists and hoe cultivators who\nlived in little village communities. Some of them planted little if any\ngrain. By 2000 B.C., they were well settled in. Then, somewhere in the\nrange from about 1900 to 1800 B.C., the traces of the invasion of a new\nseries of peoples began to appear.\n\nThe first newcomers are called the Beaker folk, after the name of a\npeculiar form of pottery they made. The beaker type of pottery seems\noldest in Spain, where it occurs with great collective tombs of\nmegalithic construction and with copper tools. But the Beaker folk who\nreached England seem already to have moved first from Spain(?) to the\nRhineland and Holland. While in the Rhineland, and before leaving for\nEngland, the Beaker folk seem to have mixed with the local population\nand also with incomers from northeastern Europe whose culture included\nelements brought originally from the Near East by the eastern way\nthrough the steppes. This last group has also been named for a peculiar\narticle in its assemblage; the group is called the Battle-axe folk. A\nfew Battle-axe folk elements, including, in fact, stone battle-axes,\nreached England with the earliest Beaker folk,[6] coming from the\nRhineland.\n\n  [6] The British authors use the term �Beaker folk� to mean both\n      archeological assemblage and human physical type. They speak\n      of a �... tall, heavy-boned, rugged, and round-headed� strain\n      which they take to have developed, apparently in the Rhineland,\n      by a mixture of the original (Spanish?) beaker-makers and\n      the northeast European battle-axe makers. However, since the\n      science of physical anthropology is very much in flux at the\n      moment, and since I am not able to assess the evidence for these\n      physical types, I _do not_ use the term �folk� in this book with\n      its usual meaning of standardized physical type. When I use\n      �folk� here, I mean simply _the makers of a given archeological\n      assemblage_. The difficulty only comes when assemblages are\n      named for some item in them; it is too clumsy to make an\n      adjective of the item and refer to a �beakerian� assemblage.\n\nThe Beaker folk settled earliest in the agriculturally fertile south\nand east. There seem to have been several phases of Beaker folk\ninvasions, and it is not clear whether these all came strictly from the\nRhineland or Holland. We do know that their copper daggers and awls\nand armlets are more of Irish or Atlantic European than of Rhineland\norigin. A few simple habitation sites and many burials of the Beaker\nfolk are known. They buried their dead singly, sometimes in conspicuous\nindividual barrows with the dead warrior in his full trappings. The\nspectacular element in the assemblage of the Beaker folk is a group\nof large circular monuments with ditches and with uprights of wood or\nstone. These �henges� became truly monumental several hundred years\nlater; while they were occasionally dedicated with a burial, they were\nnot primarily tombs. The effect of the invasion of the Beaker folk\nseems to cut across the whole fabric of life in Britain.\n\n[Illustration: BEAKER]\n\nThere was, however, a second major element in British life at this\ntime. It shows itself in the less well understood traces of a group\nagain called after one of the items in their catalogue, the Food-vessel\nfolk. There are many burials in these �food-vessel� pots in northern\nEngland, Scotland, and Ireland, and the pottery itself seems to\nlink back to that of the Peterborough assemblage. Like the earlier\nPeterborough people in the highland zone before them, the makers of\nthe food-vessels seem to have been heavily involved in trade. It is\nquite proper to wonder whether the food-vessel pottery itself was made\nby local women who were married to traders who were middlemen in the\ntransmission of Irish metal objects to north Germany and Scandinavia.\nThe belt of high, relatively woodless country, from southwest to\nnortheast, was already established as a natural route for inland trade.\n\n\nMORE INVASIONS\n\nAbout 1500 B.C., the situation became further complicated by the\narrival of new people in the region of southern England anciently\ncalled Wessex. The traces suggest the Brittany coast of France as a\nsource, and the people seem at first to have been a small but �heroic�\ngroup of aristocrats. Their �heroes� are buried with wealth and\nceremony, surrounded by their axes and daggers of bronze, their gold\nornaments, and amber and jet beads. These rich finds show that the\ntrade-linkage these warriors patronized spread from the Baltic sources\nof amber to Mycenean Greece or even Egypt, as evidenced by glazed blue\nbeads.\n\nThe great visual trace of Wessex achievement is the final form of\nthe spectacular sanctuary at Stonehenge. A wooden henge or circular\nmonument was first made several hundred years earlier, but the site\nnow received its great circles of stone uprights and lintels. The\ndiameter of the surrounding ditch at Stonehenge is about 350 feet, the\ndiameter of the inner circle of large stones is about 100 feet, and\nthe tallest stone of the innermost horseshoe-shaped enclosure is 29\nfeet 8 inches high. One circle is made of blue stones which must have\nbeen transported from Pembrokeshire, 145 miles away as the crow flies.\nRecently, many carvings representing the profile of a standard type of\nbronze axe of the time, and several profiles of bronze daggers--one of\nwhich has been called Mycenean in type--have been found carved in the\nstones. We cannot, of course, describe the details of the religious\nceremonies which must have been staged in Stonehenge, but we can\ncertainly imagine the well-integrated and smoothly working culture\nwhich must have been necessary before such a great monument could have\nbeen built.\n\n\n�THIS ENGLAND�\n\nThe range from 1900 to about 1400 B.C. includes the time of development\nof the archeological features usually called the �Early Bronze Age�\nin Britain. In fact, traces of the Wessex warriors persisted down to\nabout 1200 B.C. The main regions of the island were populated, and the\nadjustments to the highland and lowland zones were distinct and well\nmarked. The different aspects of the assemblages of the Beaker folk and\nthe clearly expressed activities of the Food-vessel folk and the Wessex\nwarriors show that Britain was already taking on her characteristic\ntrading role, separated from the European continent but conveniently\nadjacent to it. The tin of Cornwall--so important in the production\nof good bronze--as well as the copper of the west and of Ireland,\ntaken with the gold of Ireland and the general excellence of Irish\nmetal work, assured Britain a trader�s place in the then known world.\nContacts with the eastern Mediterranean may have been by sea, with\nCornish tin as the attraction, or may have been made by the Food-vessel\nmiddlemen on their trips to the Baltic coast. There they would have\nencountered traders who traveled the great north-south European road,\nby which Baltic amber moved southward to Greece and the Levant, and\nideas and things moved northward again.\n\nThere was, however, the Channel between England and Europe, and this\nrelative isolation gave some peace and also gave time for a leveling\nand further fusion of culture. The separate cultural traditions began\nto have more in common. The growing of barley, the herding of sheep and\ncattle, and the production of woolen garments were already features\ncommon to all Britain�s inhabitants save a few in the remote highlands,\nthe far north, and the distant islands not yet fully touched by\nfood-production. The �personality of Britain� was being formed.\n\n\nCREMATION BURIALS BEGIN\n\nAlong with people of certain religious faiths, archeologists are\nagainst cremation (for other people!). Individuals to be cremated seem\nin past times to have been dressed in their trappings and put upon a\nlarge pyre: it takes a lot of wood and a very hot fire for a thorough\ncremation. When the burning had been completed, the few fragile scraps\nof bone and such odd beads of stone or other rare items as had resisted\nthe great heat seem to have been whisked into a pot and the pot buried.\nThe archeologist is left with the pot and the unsatisfactory scraps in\nit.\n\nTentatively, after about 1400 B.C. and almost completely over the whole\nisland by 1200 B.C., Britain became the scene of cremation burials\nin urns. We know very little of the people themselves. None of their\nsettlements have been identified, although there is evidence that they\ngrew barley and made enclosures for cattle. The urns used for the\nburials seem to have antecedents in the pottery of the Food-vessel\nfolk, and there are some other links with earlier British traditions.\nIn Lancashire, a wooden circle seems to have been built about a grave\nwith cremated burials in urns. Even occasional instances of cremation\nmay be noticed earlier in Britain, and it is not clear what, if any,\nconnection the British cremation burials in urns have with the classic\n_Urnfields_ which were now beginning in the east Mediterranean and\nwhich we shall mention below.\n\nThe British cremation-burial-in-urns folk survived a long time in the\nhighland zone. In the general British scheme, they make up what is\ncalled the �Middle Bronze Age,� but in the highland zone they last\nuntil after 900 B.C. and are considered to be a specialized highland\n�Late Bronze Age.� In the highland zone, these later cremation-burial\nfolk seem to have continued the older Food-vessel tradition of being\nmiddlemen in the metal market.\n\nGranting that our knowledge of this phase of British prehistory is\nvery restricted because the cremations have left so little for the\narcheologist, it does not appear that the cremation-burial-urn folk can\nbe sharply set off from their immediate predecessors. But change on a\ngrander scale was on the way.\n\n\nREVERBERATIONS FROM CENTRAL EUROPE\n\nIn the centuries immediately following 1000 B.C., we see with fair\nclarity two phases of a cultural process which must have been going\non for some time. Certainly several of the invasions we have already\ndescribed in this chapter were due to earlier phases of the same\ncultural process, but we could not see the details.\n\n[Illustration: SLASHING SWORD]\n\nAround 1200 B.C. central Europe was upset by the spread of the\nso-called Urnfield folk, who practiced cremation burial in urns and\nwhom we also know to have been possessors of long, slashing swords and\nthe horse. I told you above that we have no idea that the Urnfield\nfolk proper were in any way connected with the people who made\ncremation-burial-urn cemeteries a century or so earlier in Britain. It\nhas been supposed that the Urnfield folk themselves may have shared\nideas with the people who sacked Troy. We know that the Urnfield\npressure from central Europe displaced other people in northern France,\nand perhaps in northwestern Germany, and that this reverberated into\nBritain about 1000 B.C.\n\nSoon after 750 B.C., the same thing happened again. This time, the\npressure from central Europe came from the Hallstatt folk who were iron\ntool makers: the reverberation brought people from the western Alpine\nregion across the Channel into Britain.\n\nAt first it is possible to see the separate results of these folk\nmovements, but the developing cultures soon fused with each other and\nwith earlier British elements. Presently there were also strains of\nother northern and western European pottery and traces of Urnfield\npractices themselves which appeared in the finished British product. I\nhope you will sense that I am vastly over-simplifying the details.\n\nThe result seems to have been--among other things--a new kind of\nagricultural system. The land was marked off by ditched divisions.\nRectangular fields imply the plow rather than hoe cultivation. We seem\nto get a picture of estate or tribal boundaries which included village\ncommunities; we find a variety of tools in bronze, and even whetstones\nwhich show that iron has been honed on them (although the scarce iron\nhas not been found). Let me give you the picture in Professor S.\nPiggott�s words: �The ... Late Bronze Age of southern England was but\nthe forerunner of the earliest Iron Age in the same region, not only in\nthe techniques of agriculture, but almost certainly in terms of ethnic\nkinship ... we can with some assurance talk of the Celts ... the great\nearly Celtic expansion of the Continent is recognized to be that of the\nUrnfield people.�\n\nThus, certainly by 500 B.C., there were people in Britain, some of\nwhose descendants we may recognize today in name or language in remote\nparts of Wales, Scotland, and the Hebrides.\n\n\nTHE COMING OF IRON\n\nIron--once the know-how of reducing it from its ore in a very hot,\nclosed fire has been achieved--produces a far cheaper and much more\nefficient set of tools than does bronze. Iron tools seem first to\nhave been made in quantity in Hittite Anatolia about 1500 B.C. In\ncontinental Europe, the earliest, so-called Hallstatt, iron-using\ncultures appeared in Germany soon after 750 B.C. Somewhat later,\nGreek and especially Etruscan exports of _objets d�art_--which moved\nwith a flourishing trans-Alpine wine trade--influenced the Hallstatt\niron-working tradition. Still later new classical motifs, together with\nolder Hallstatt, oriental, and northern nomad motifs, gave rise to a\nnew style in metal decoration which characterizes the so-called La T�ne\nphase.\n\nA few iron users reached Britain a little before 400 B.C. Not long\nafter that, a number of allied groups appeared in southern and\nsoutheastern England. They came over the Channel from France and must\nhave been Celts with dialects related to those already in England. A\nsecond wave of Celts arrived from the Marne district in France about\n250 B.C. Finally, in the second quarter of the first century B.C.,\nthere were several groups of newcomers, some of whom were Belgae of\na mixed Teutonic-Celtic confederacy of tribes in northern France and\nBelgium. The Belgae preceded the Romans by only a few years.\n\n\nHILL-FORTS AND FARMS\n\nThe earliest iron-users seem to have entrenched themselves temporarily\nwithin hill-top forts, mainly in the south. Gradually, they moved\ninland, establishing _individual_ farm sites with extensive systems\nof rectangular fields. We recognize these fields by the �lynchets� or\nlines of soil-creep which plowing left on the slopes of hills. New\ncrops appeared; there were now bread wheat, oats, and rye, as well as\nbarley.\n\nAt Little Woodbury, near the town of Salisbury, a farmstead has been\nrather completely excavated. The rustic buildings were within a\npalisade, the round house itself was built of wood, and there were\nvarious outbuildings and pits for the storage of grain. Weaving was\ndone on the farm, but not blacksmithing, which must have been a\nspecialized trade. Save for the lack of firearms, the place might\nalmost be taken for a farmstead on the American frontier in the early\n1800�s.\n\nToward 250 B.C. there seems to have been a hasty attempt to repair the\nhill-forts and to build new ones, evidently in response to signs of\nrestlessness being shown by remote relatives in France.\n\n\nTHE SECOND PHASE\n\nPerhaps the hill-forts were not entirely effective or perhaps a\ncompromise was reached. In any case, the newcomers from the Marne\ndistrict did establish themselves, first in the southeast and then to\nthe north and west. They brought iron with decoration of the La T�ne\ntype and also the two-wheeled chariot. Like the Wessex warriors of\nover a thousand years earlier, they made �heroes�� graves, with their\nwarriors buried in the war-chariots and dressed in full trappings.\n\n[Illustration: CELTIC BUCKLE]\n\nThe metal work of these Marnian newcomers is excellent. The peculiar\nCeltic art style, based originally on the classic tendril motif,\nis colorful and virile, and fits with Greek and Roman descriptions\nof Celtic love of color in dress. There is a strong trace of these\nnewcomers northward in Yorkshire, linked by Ptolemy�s description to\nthe Parisii, doubtless part of the Celtic tribe which originally gave\nits name to Paris on the Seine. Near Glastonbury, in Somerset, two\nvillages in swamps have been excavated. They seem to date toward the\nmiddle of the first century B.C., which was a troubled time in Britain.\nThe circular houses were built on timber platforms surrounded with\npalisades. The preservation of antiquities by the water-logged peat of\nthe swamp has yielded us a long catalogue of the materials of these\nvillagers.\n\nIn Scotland, which yields its first iron tools at a date of about 100\nB.C., and in northern Ireland even slightly earlier, the effects of the\ntwo phases of newcomers tend especially to blend. Hill-forts, �brochs�\n(stone-built round towers) and a variety of other strange structures\nseem to appear as the new ideas develop in the comparative isolation of\nnorthern Britain.\n\n\nTHE THIRD PHASE\n\nFor the time of about the middle of the first century B.C., we again\nsee traces of frantic hill-fort construction. This simple military\narchitecture now took some new forms. Its multiple ramparts must\nreflect the use of slings as missiles, rather than spears. We probably\nknow the reason. In 56 B.C., Julius Caesar chastised the Veneti of\nBrittany for outraging the dignity of Roman ambassadors. The Veneti\nwere famous slingers, and doubtless the reverberations of escaping\nVeneti were felt across the Channel. The military architecture suggests\nthat some Veneti did escape to Britain.\n\nAlso, through Caesar, we learn the names of newcomers who arrived in\ntwo waves, about 75 B.C. and about 50 B.C. These were the Belgae. Now,\nat last, we can even begin to speak of dynasties and individuals.\nSome time before 55 B.C., the Catuvellauni, originally from the Marne\ndistrict in France, had possessed themselves of a large part of\nsoutheastern England. They evidently sailed up the Thames and built a\ntown of over a hundred acres in area. Here ruled Cassivellaunus, �the\nfirst man in England whose name we know,� and whose town Caesar sacked.\nThe town sprang up elsewhere again, however.\n\n\nTHE END OF PREHISTORY\n\nPrehistory, strictly speaking, is now over in southern Britain.\nClaudius� effective invasion took place in 43 A.D.; by 83 A.D., a raid\nhad been made as far north as Aberdeen in Scotland. But by 127 A.D.,\nHadrian had completed his wall from the Solway to the Tyne, and the\nRomans settled behind it. In Scotland, Romanization can have affected\nthe countryside very little. Professor Piggott adds that �... it is\nwhen the pressure of Romanization is relaxed by the break-up of the\nDark Ages that we see again the Celtic metal-smiths handling their\nmaterial with the same consummate skill as they had before the Roman\nConquest, and with traditional styles that had not even then forgotten\ntheir Marnian and Belgic heritage.�\n\nIn fact, many centuries go by, in Britain as well as in the rest of\nEurope, before the archeologist�s task is complete and the historian on\nhis own is able to describe the ways of men in the past.\n\n\nBRITAIN AS A SAMPLE OF THE GENERAL COURSE OF PREHISTORY IN EUROPE\n\nIn giving this very brief outline of the later prehistory of Britain,\nyou will have noticed how often I had to refer to the European\ncontinent itself. Britain, beyond the English Channel for all of her\nlater prehistory, had a much simpler course of events than did most of\nthe rest of Europe in later prehistoric times. This holds, in spite\nof all the �invasions� and �reverberations� from the continent. Most\nof Europe was the scene of an even more complicated ebb and flow of\ncultural change, save in some of its more remote mountain valleys and\npeninsulas.\n\nThe whole course of later prehistory in Europe is, in fact, so very\ncomplicated that there is no single good book to cover it all;\ncertainly there is none in English. There are some good regional\naccounts and some good general accounts of part of the range from about\n3000 B.C. to A.D. 1. I suspect that the difficulty of making a good\nbook that covers all of its later prehistory is another aspect of what\nmakes Europe so very complicated a continent today. The prehistoric\nfoundations for Europe�s very complicated set of civilizations,\ncultures, and sub-cultures--which begin to appear as history\nproceeds--were in themselves very complicated.\n\nHence, I selected the case of Britain as a single example of how\nprehistory ends in Europe. It could have been more complicated than we\nfound it to be. Even in the subject matter on Britain in the chapter\nbefore the last, we did not see direct traces of the effect on Britain\nof the very important developments which took place in the Danubian\nway from the Near East. Apparently Britain was not affected. Britain\nreceived the impulses which brought copper, bronze, and iron tools from\nan original east Mediterranean homeland into Europe, almost at the ends\nof their journeys. But by the same token, they had had time en route to\ntake on their characteristic European aspects.\n\nSome time ago, Sir Cyril Fox wrote a famous book called _The\nPersonality of Britain_, sub-titled �Its Influence on Inhabitant and\nInvader in Prehistoric and Early Historic Times.� We have not gone\ninto the post-Roman early historic period here; there are still the\nAnglo-Saxons and Normans to account for as well as the effects of\nthe Romans. But what I have tried to do was to begin the story of\nhow the personality of Britain was formed. The principles that Fox\nused, in trying to balance cultural and environmental factors and\ninterrelationships would not be greatly different for other lands.\n\n\n\n\nSummary\n\n[Illustration]\n\n\nIn the pages you have read so far, you have been brought through the\nearliest 99 per cent of the story of man�s life on this planet. I have\nleft only 1 per cent of the story for the historians to tell.\n\n\nTHE DRAMA OF THE PAST\n\nMen first became men when evolution had carried them to a certain\npoint. This was the point where the eye-hand-brain co-ordination was\ngood enough so that tools could be made. When tools began to be made\naccording to sets of lasting habits, we know that men had appeared.\nThis happened over a half million years ago. The stage for the play\nmay have been as broad as all of Europe, Africa, and Asia. At least,\nit seems unlikely that it was only one little region that saw the\nbeginning of the drama.\n\nGlaciers and different climates came and went, to change the settings.\nBut the play went on in the same first act for a very long time. The\nmen who were the players had simple roles. They had to feed themselves\nand protect themselves as best they could. They did this by hunting,\ncatching, and finding food wherever they could, and by taking such\nprotection as caves, fire, and their simple tools would give them.\nBefore the first act was over, the last of the glaciers was melting\naway, and the players had added the New World to their stage. If\nwe want a special name for the first act, we could call it _The\nFood-Gatherers_.\n\nThere were not many climaxes in the first act, so far as we can see.\nBut I think there may have been a few. Certainly the pace of the\nfirst act accelerated with the swing from simple gathering to more\nintensified collecting. The great cave art of France and Spain was\nprobably an expression of a climax. Even the ideas of burying the dead\nand of the �Venus� figurines must also point to levels of human thought\nand activity that were over and above pure food-getting.\n\n\nTHE SECOND ACT\n\nThe second act began only about ten thousand years ago. A few of the\nplayers started it by themselves near the center of the Old World part\nof the stage, in the Near East. It began as a plant and animal act, but\nit soon became much more complicated.\n\nBut the players in this one part of the stage--in the Near East--were\nnot the only ones to start off on the second act by themselves. Other\nplayers, possibly in several places in the Far East, and certainly in\nthe New World, also started second acts that began as plant and animal\nacts, and then became complicated. We can call the whole second act\n_The Food-Producers_.\n\n\nTHE FIRST GREAT CLIMAX OF THE SECOND ACT\n\nIn the Near East, the first marked climax of the second act happened\nin Mesopotamia and Egypt. The play and the players reached that great\nclimax that we call civilization. This seems to have come less than\nfive thousand years after the second act began. But it could never have\nhappened in the first act at all.\n\nThere is another curious thing about the first act. Many of the players\ndidn�t know it was over and they kept on with their roles long after\nthe second act had begun. On the edges of the stage there are today\nsome players who are still going on with the first act. The Eskimos,\nand the native Australians, and certain tribes in the Amazon jungle are\nsome of these players. They seem perfectly happy to keep on with the\nfirst act.\n\nThe second act moved from climax to climax. The civilizations of\nMesopotamia and Egypt were only the earliest of these climaxes. The\nplayers to the west caught the spirit of the thing, and climaxes\nfollowed there. So also did climaxes come in the Far Eastern and New\nWorld portions of the stage.\n\nThe greater part of the second act should really be described to you\nby a historian. Although it was a very short act when compared to the\nfirst one, the climaxes complicate it a great deal. I, a prehistorian,\nhave told you about only the first act, and the very beginning of the\nsecond.\n\n\nTHE THIRD ACT\n\nAlso, as a prehistorian I probably should not even mention the third\nact--it began so recently. The third act is _The Industrialization_.\nIt is the one in which we ourselves are players. If the pace of the\nsecond act was so much faster than that of the first, the pace of the\nthird act is terrific. The danger is that it may wear down the players\ncompletely.\n\nWhat sort of climaxes will the third act have, and are we already in\none? You have seen by now that the acts of my play are given in terms\nof modes or basic patterns of human economy--ways in which people\nget food and protection and safety. The climaxes involve more than\nhuman economy. Economics and technological factors may be part of the\nclimaxes, but they are not all. The climaxes may be revolutions in\ntheir own way, intellectual and social revolutions if you like.\n\nIf the third act follows the pattern of the second act, a climax should\ncome soon after the act begins. We may be due for one soon if we are\nnot already in it. Remember the terrific pace of this third act.\n\n\nWHY BOTHER WITH PREHISTORY?\n\nWhy do we bother about prehistory? The main reason is that we think it\nmay point to useful ideas for the present. We are in the troublesome\nbeginnings of the third act of the play. The beginnings of the second\nact may have lessons for us and give depth to our thinking. I know\nthere are at least _some_ lessons, even in the present incomplete\nstate of our knowledge. The players who began the second act--that of\nfood-production--separately, in different parts of the world, were not\nall of one �pure race� nor did they have �pure� cultural traditions.\nSome apparently quite mixed Mediterraneans got off to the first start\non the second act and brought it to its first two climaxes as well.\nPeoples of quite different physical type achieved the first climaxes in\nChina and in the New World.\n\nIn our British example of how the late prehistory of Europe worked, we\nlisted a continuous series of �invasions� and �reverberations.� After\neach of these came fusion. Even though the Channel protected Britain\nfrom some of the extreme complications of the mixture and fusion of\ncontinental Europe, you can see how silly it would be to refer to a\n�pure� British race or a �pure� British culture. We speak of the United\nStates as a �melting pot.� But this is nothing new. Actually, Britain\nand all the rest of the world have been �melting pots� at one time or\nanother.\n\nBy the time the written records of Mesopotamia and Egypt begin to turn\nup in number, the climaxes there are well under way. To understand the\nbeginnings of the climaxes, and the real beginnings of the second act\nitself, we are thrown back on prehistoric archeology. And this is as\ntrue for China, India, Middle America, and the Andes, as it is for the\nNear East.\n\nThere are lessons to be learned from all of man�s past, not simply\nlessons of how to fight battles or win peace conferences, but of how\nhuman society evolves from one stage to another. Many of these lessons\ncan only be looked for in the prehistoric past. So far, we have only\nmade a beginning. There is much still to do, and many gaps in the story\nare yet to be filled. The prehistorian�s job is to find the evidence,\nto fill the gaps, and to discover the lessons men have learned in the\npast. As I see it, this is not only an exciting but a very practical\ngoal for which to strive.\n\n\n\n\nList of Books\n\n\nBOOKS OF GENERAL INTEREST\n\n(Chosen from a variety of the increasingly useful list of cheap\npaperbound books.)\n\n  Childe, V. Gordon\n    _What Happened in History._ 1954. Penguin.\n    _Man Makes Himself._ 1955. Mentor.\n    _The Prehistory of European Society._ 1958. Penguin.\n\n  Dunn, L. C., and Dobzhansky, Th.\n    _Heredity, Race, and Society._ 1952. Mentor.\n\n  Frankfort, Henri, Frankfort, H. A., Jacobsen, Thorkild, and Wilson,\n        John A.\n    _Before Philosophy._ 1954. Penguin.\n\n  Simpson, George G.\n    _The Meaning of Evolution._ 1955. Mentor.\n\n  Wheeler, Sir Mortimer\n    _Archaeology from the Earth._ 1956. Penguin.\n\n\nGEOCHRONOLOGY AND THE ICE AGE\n\n(Two general books. Some Pleistocene geologists disagree with Zeuner�s\ninterpretation of the dating evidence, but their points of view appear\nin professional journals, in articles too cumbersome to list here.)\n\n  Flint, R. F.\n    _Glacial Geology and the Pleistocene Epoch._ 1947. John Wiley\n        and Sons.\n\n  Zeuner, F. E.\n    _Dating the Past._ 1952 (3rd ed.). Methuen and Co.\n\n\nFOSSIL MEN AND RACE\n\n(The points of view of physical anthropologists and human\npaleontologists are changing very quickly. Two of the different points\nof view are listed here.)\n\n  Clark, W. E. Le Gros\n    _History of the Primates._ 1956 (5th ed.). British Museum\n       (Natural History). (Also in Phoenix edition, 1957.)\n\n  Howells, W. W.\n    _Mankind So Far._ 1944. Doubleday, Doran.\n\n\nGENERAL ANTHROPOLOGY\n\n(These are standard texts not absolutely up to date in every detail, or\ninterpretative essays concerned with cultural change through time as\nwell as in space.)\n\n  Kroeber, A. L.\n    _Anthropology._ 1948. Harcourt, Brace.\n\n  Linton, Ralph\n    _The Tree of Culture._ 1955. Alfred A. Knopf, Inc.\n\n  Redfield, Robert\n    _The Primitive World and Its Transformations._ 1953. Cornell\n        University Press.\n\n  Steward, Julian H.\n    _Theory of Culture Change._ 1955. University of Illinois Press.\n\n  White, Leslie\n    _The Science of Culture._ 1949. Farrar, Strauss.\n\n\nGENERAL PREHISTORY\n\n(A sampling of the more useful and current standard works in English.)\n\n  Childe, V. Gordon\n    _The Dawn of European Civilization._ 1957. Kegan Paul, Trench,\n        Trubner.\n    _Prehistoric Migrations in Europe._ 1950. Instituttet for\n        Sammenlignende Kulturforskning.\n\n  Clark, Grahame\n    _Archaeology and Society._ 1957. Harvard University Press.\n\n  Clark, J. G. D.\n    _Prehistoric Europe: The Economic Basis._ 1952. Methuen and Co.\n\n  Garrod, D. A. E.\n    _Environment, Tools, and Man._ 1946. Cambridge University\n        Press.\n\n  Movius, Hallam L., Jr.\n    �Old World Prehistory: Paleolithic� in _Anthropology Today_.\n        Kroeber, A. L., ed. 1953. University of Chicago Press.\n\n  Oakley, Kenneth P.\n    _Man the Tool-Maker._ 1956. British Museum (Natural History).\n        (Also in Phoenix edition, 1957.)\n\n  Piggott, Stuart\n    _British Prehistory._ 1949. Oxford University Press.\n\n  Pittioni, Richard\n    _Die Urgeschichtlichen Grundlagen der Europ�ischen Kultur._\n        1949. Deuticke. (A single book which does attempt to cover the\n        whole range of European prehistory to ca. 1 A.D.)\n\n\nTHE NEAR EAST\n\n  Adams, Robert M.\n    �Developmental Stages in Ancient Mesopotamia,� _in_ Steward,\n        Julian, _et al_, _Irrigation Civilizations: A Comparative\n        Study_. 1955. Pan American Union.\n\n  Braidwood, Robert J.\n    _The Near East and the Foundations for Civilization._ 1952.\n        University of Oregon.\n\n  Childe, V. Gordon\n    _New Light on the Most Ancient East._ 1952. Oriental Dept.,\n        Routledge and Kegan Paul.\n\n  Frankfort, Henri\n    _The Birth of Civilization in the Near East._ 1951. University\n        of Indiana Press. (Also in Anchor edition, 1956.)\n\n  Pallis, Svend A.\n    _The Antiquity of Iraq._ 1956. Munksgaard.\n\n  Wilson, John A.\n    _The Burden of Egypt._ 1951. University of Chicago Press. (Also\n        in Phoenix edition, called _The Culture of Ancient Egypt_,\n        1956.)\n\n\nHOW DIGGING IS DONE\n\n  Braidwood, Linda\n    _Digging beyond the Tigris._ 1953. Schuman, New York.\n\n  Wheeler, Sir Mortimer\n    _Archaeology from the Earth._ 1954. Oxford, London.\n\n\n\n\nIndex\n\n\n  Abbevillian, 48;\n    core-biface tool, 44, 48\n\n  Acheulean, 48, 60\n\n  Acheuleo-Levalloisian, 63\n\n  Acheuleo-Mousterian, 63\n\n  Adams, R. M., 106\n\n  Adzes, 45\n\n  Africa, east, 67, 89;\n    north, 70, 89;\n    south, 22, 25, 34, 40, 67\n\n  Agriculture, incipient, in England, 140;\n    in Near East, 123\n\n  Ain Hanech, 48\n\n  Amber, taken from Baltic to Greece, 167\n\n  American Indians, 90, 142\n\n  Anatolia, used as route to Europe, 138\n\n  Animals, in caves, 54, 64;\n    in cave art, 85\n\n  Antevs, Ernst, 19\n\n  Anyathian, 47\n\n  Archeological interpretation, 8\n\n  Archeology, defined, 8\n\n  Architecture, at Jarmo, 128;\n    at Jericho, 133\n\n  Arrow, points, 94;\n    shaft straightener, 83\n\n  Art, in caves, 84;\n    East Spanish, 85;\n    figurines, 84;\n    Franco-Cantabrian, 84, 85;\n    movable (engravings, modeling, scratchings), 83;\n    painting, 83;\n    sculpture, 83\n\n  Asia, western, 67\n\n  Assemblage, defined, 13, 14;\n    European, 94;\n    Jarmo, 129;\n    Maglemosian, 94;\n    Natufian, 113\n\n  Aterian, industry, 67;\n    point, 89\n\n  Australopithecinae, 24\n\n  Australopithecine, 25, 26\n\n  Awls, 77\n\n  Axes, 62, 94\n\n  Ax-heads, 15\n\n  Azilian, 97\n\n  Aztecs, 145\n\n\n  Baghouz, 152\n\n  Bakun, 134\n\n  Baltic sea, 93\n\n  Banana, 107\n\n  Barley, wild, 108\n\n  Barrow, 141\n\n  Battle-axe folk, 164;\n    assemblage, 164\n\n  Beads, 80;\n    bone, 114\n\n  Beaker folk, 164;\n    assemblage, 164-165\n\n  Bear, in cave art, 85;\n    cult, 68\n\n  Belgium, 94\n\n  Belt cave, 126\n\n  Bering Strait, used as route to New World, 98\n\n  Bison, in cave art, 85\n\n  Blade, awl, 77;\n    backed, 75;\n    blade-core, 71;\n    end-scraper, 77;\n    stone, defined, 71;\n    strangulated (notched), 76;\n    tanged point, 76;\n    tools, 71, 75-80, 90;\n    tool tradition, 70\n\n  Boar, wild, in cave art, 85\n\n  Bogs, source of archeological materials, 94\n\n  Bolas, 54\n\n  Bordes, Fran�ois, 62\n\n  Borer, 77\n\n  Boskop skull, 34\n\n  Boyd, William C., 35\n\n  Bracelets, 118\n\n  Brain, development of, 24\n\n  Breadfruit, 107\n\n  Breasted, James H., 107\n\n  Brick, at Jericho, 133\n\n  Britain, 94;\n    late prehistory, 163-175;\n    invaders, 173\n\n  Broch, 172\n\n  Buffalo, in China, 54;\n    killed by stampede, 86\n\n  Burials, 66, 86;\n    in �henges,� 164;\n    in urns, 168\n\n  Burins, 75\n\n  Burma, 90\n\n  Byblos, 134\n\n\n  Camel, 54\n\n  Cannibalism, 55\n\n  Cattle, wild, 85, 112;\n    in cave art, 85;\n    domesticated, 15;\n    at Skara Brae, 142\n\n  Caucasoids, 34\n\n  Cave men, 29\n\n  Caves, 62;\n    art in, 84\n\n  Celts, 170\n\n  Chariot, 160\n\n  Chicken, domestication of, 107\n\n  Chiefs, in food-gathering groups, 68\n\n  Childe, V. Gordon, 8\n\n  China, 136\n\n  Choukoutien, 28, 35\n\n  Choukoutienian, 47\n\n  Civilization, beginnings, 144, 149, 157;\n    meaning of, 144\n\n  Clactonian, 45, 47\n\n  Clay, used in modeling, 128;\n    baked, used for tools, 153\n\n  Club-heads, 82, 94\n\n  Colonization, in America, 142;\n    in Europe, 142\n\n  Combe Capelle, 30\n\n  Combe Capelle-Br�nn group, 34\n\n  Commont, Victor, 51\n\n  Coon, Carlton S., 73\n\n  Copper, 134\n\n  Corn, in America, 145\n\n  Corrals for cattle, 140\n\n  �Cradle of mankind,� 136\n\n  Cremation, 167\n\n  Crete, 162\n\n  Cro-Magnon, 30, 34\n\n  Cultivation, incipient, 105, 109, 111\n\n  Culture, change, 99;\n    characteristics, defined, 38, 49;\n    prehistoric, 39\n\n\n  Danube Valley, used as route from Asia, 138\n\n  Dates, 153\n\n  Deer, 54, 96\n\n  Dog, domesticated, 96\n\n  Domestication, of animals, 100, 105, 107;\n    of plants, 100\n\n  �Dragon teeth� fossils in China, 28\n\n  Drill, 77\n\n  Dubois, Eugene, 26\n\n\n  Early Dynastic Period, Mesopotamia, 147\n\n  East Spanish art, 72, 85\n\n  Egypt, 70, 126\n\n  Ehringsdorf, 31\n\n  Elephant, 54\n\n  Emiliani, Cesare, 18\n\n  Emiran flake point, 73\n\n  England, 163-168;\n    prehistoric, 19, 40;\n    farmers in, 140\n\n  Eoanthropus dawsoni, 29\n\n  Eoliths, 41\n\n  Erich, 152\n\n  Eridu, 152\n\n  Euphrates River, floods in, 148\n\n  Europe, cave dwellings, 58;\n    at end of Ice Age, 93;\n    early farmers, 140;\n    glaciers in, 40;\n    huts in, 86;\n    routes into, 137-140;\n    spread of food-production to, 136\n\n\n  Far East, 69, 90\n\n  Farmers, 103\n\n  Fauresmith industry, 67\n\n  Fayum, 135;\n    radiocarbon date, 146\n\n  �Fertile Crescent,� 107, 146\n\n  Figurines, �Venus,� 84;\n    at Jarmo, 128;\n    at Ubaid, 153\n\n  Fire, used by Peking man, 54\n\n  First Dynasty, Egypt, 147\n\n  Fish-hooks, 80, 94\n\n  Fishing, 80;\n    by food-producers, 122\n\n  Fish-lines, 80\n\n  Fish spears, 94\n\n  Flint industry, 127\n\n  Font�chevade, 32, 56, 58\n\n  Food-collecting, 104, 121;\n    end of, 104\n\n  Food-gatherers, 53, 176\n\n  Food-gathering, 99, 104;\n    in Old World, 104;\n    stages of, 104\n\n  Food-producers, 176\n\n  Food-producing economy, 122;\n    in America, 145;\n    in Asia, 105\n\n  Food-producing revolution, 99, 105;\n    causes of, 101;\n    preconditions for, 100\n\n  Food-production, beginnings of, 99;\n    carried to Europe, 110\n\n  Food-vessel folk, 164\n\n  �Forest folk,� 97, 98, 104, 110\n\n  Fox, Sir Cyril, 174\n\n  France, caves in, 56\n\n\n  Galley Hill (fossil type), 29\n\n  Garrod, D. A., 73\n\n  Gazelle, 114\n\n  Germany, 94\n\n  Ghassul, 156\n\n  Glaciers, 18, 30;\n    destruction by, 40\n\n  Goat, wild, 108;\n    domesticated, 128\n\n  Grain, first planted, 20\n\n  Graves, passage, 141;\n    gallery, 141\n\n  Greece, civilization in, 163;\n    as route to western Europe, 138;\n    towns in, 162\n\n  Grimaldi skeletons, 34\n\n\n  Hackberry seeds used as food, 55\n\n  Halaf, 151;\n    assemblage, 151\n\n  Hallstatt, tradition, 169\n\n  Hand, development of, 24, 25\n\n  Hand adzes, 46\n\n  Hand axes, 44\n\n  Harpoons, antler, 83, 94;\n    bone, 82, 94\n\n  Hassuna, 131;\n    assemblage, 131, 132\n\n  Heidelberg, fossil type, 28\n\n  Hill-forts, in England, 171;\n    in Scotland, 172\n\n  Hilly flanks of Near East, 107, 108, 125, 131, 146, 147\n\n  History, beginning of, 7, 17\n\n  Hoes, 112\n\n  Holland, 164\n\n  Homo sapiens, 32\n\n  Hooton, E. A., 34\n\n  Horse, 112;\n    wild, in cave art, 85;\n    in China, 54\n\n  Hotu cave, 126\n\n  Houses, 122;\n    at Jarmo, 128;\n    at Halaf, 151\n\n  Howe, Bruce, 116\n\n  Howell, F. Clark, 30\n\n  Hunting, 93\n\n\n  Ice Age, in Asia, 99;\n    beginning of, 18;\n    glaciers in, 41;\n    last glaciation, 93\n\n  Incas, 145\n\n  India, 90, 136\n\n  Industrialization, 178\n\n  Industry, blade-tool, 88;\n    defined, 58;\n    ground stone, 94\n\n  Internationalism, 162\n\n  Iran, 107, 147\n\n  Iraq, 107, 124, 127, 136, 147\n\n  Iron, introduction of, 170\n\n  Irrigation, 123, 149, 155\n\n  Italy, 138\n\n\n  Jacobsen, T. J., 157\n\n  Jarmo, 109, 126, 128, 130;\n    assemblage, 129\n\n  Java, 23, 29\n\n  Java man, 26, 27, 29\n\n  Jefferson, Thomas, 11\n\n  Jericho, 119, 133\n\n  Judaidah, 134\n\n\n  Kafuan, 48\n\n  Kanam, 23, 36\n\n  Karim Shahir, 116-119, 124;\n    assemblage, 116, 117\n\n  Keith, Sir Arthur, 33\n\n  Kelley, Harper, 51\n\n  Kharga, 126\n\n  Khartoum, 136\n\n  Knives, 80\n\n  Krogman, W. M., 3, 25\n\n\n  Lamps, 85\n\n  Land bridges in Mediterranean, 19\n\n  La T�ne phase, 170\n\n  Laurel leaf point, 78, 89\n\n  Leakey, L. S. B., 40\n\n  Le Moustier, 57\n\n  Levalloisian, 47, 61, 62\n\n  Levalloiso-Mousterian, 47, 63\n\n  Little Woodbury, 170\n\n\n  Magic, used by hunters, 123\n\n  Maglemosian, assemblage, 94, 95;\n    folk, 98\n\n  Makapan, 40\n\n  Mammoth, 93;\n    in cave art, 85\n\n  �Man-apes,� 26\n\n  Mango, 107\n\n  Mankind, age, 17\n\n  Maringer, J., 45\n\n  Markets, 155\n\n  Marston, A. T., 11\n\n  Mathiassen, T., 97\n\n  McCown, T. D., 33\n\n  Meganthropus, 26, 27, 36\n\n  Men, defined, 25;\n    modern, 32\n\n  Merimde, 135\n\n  Mersin, 133\n\n  Metal-workers, 160, 163, 167, 172\n\n  Micoquian, 48, 60\n\n  Microliths, 87;\n    at Jarmo, 130;\n    �lunates,� 87;\n    trapezoids, 87;\n    triangles, 87\n\n  Minerals used as coloring matter, 66\n\n  Mine-shafts, 140\n\n  M�lefaat, 126, 127\n\n  Mongoloids, 29, 90\n\n  Mortars, 114, 118, 127\n\n  Mounds, how formed, 12\n\n  Mount Carmel, 11, 33, 52, 59, 64, 69, 113, 114\n\n  �Mousterian man,� 64\n\n  �Mousterian� tools, 61, 62;\n    of Acheulean tradition, 62\n\n  Movius, H. L., 47\n\n\n  Natufian, animals in, 114;\n    assemblage, 113, 114, 115;\n    burials, 114;\n    date of, 113\n\n  Neanderthal man, 29, 30, 31, 56\n\n  Near East, beginnings of civilization in, 20, 144;\n    cave sites, 58;\n    climate in Ice Age, 99;\n    �Fertile Crescent,� 107, 146;\n    food-production in, 99;\n    Natufian assemblage in, 113-115;\n    stone tools, 114\n\n  Needles, 80\n\n  Negroid, 34\n\n  New World, 90\n\n  Nile River valley, 102, 134;\n    floods in, 148\n\n  Nuclear area, 106, 110;\n    in Near East, 107\n\n\n  Obsidian, used for blade tools, 71;\n    at Jarmo, 130\n\n  Ochre, red, with burials, 86\n\n  Oldowan, 48\n\n  Old World, 67, 70, 90;\n    continental phases in, 18\n\n  Olorgesailie, 40, 51\n\n  Ostrich, in China, 54\n\n  Ovens, 128\n\n  Oxygen isotopes, 18\n\n\n  Paintings in caves, 83\n\n  Paleoanthropic man, 50\n\n  Palestine, burials, 56;\n    cave sites, 52;\n    types of man, 69\n\n  Parpallo, 89\n\n  Patjitanian, 45, 47\n\n  Pebble tools, 42\n\n  Peking cave, 54;\n    animals in, 54\n\n  Peking man, 27, 28, 29, 54, 58\n\n  Pendants, 80;\n    bone, 114\n\n  Pestle, 114\n\n  Peterborough, 141;\n    assemblage, 141\n\n  Pictographic signs, 158\n\n  Pig, wild, 108\n\n  �Piltdown man,� 29\n\n  Pins, 80\n\n  Pithecanthropus, 26, 27, 30, 36\n\n  Pleistocene, 18, 25\n\n  Plows developed, 123\n\n  Points, arrow, 76;\n    laurel leaf, 78;\n    shouldered, 78, 79;\n    split-based bone, 80, 82;\n    tanged, 76;\n    willow leaf, 78\n\n  Potatoes, in America, 145\n\n  Pottery, 122, 130, 156;\n    decorated, 142;\n    painted, 131, 151, 152;\n    Susa style, 156;\n    in tombs, 141\n\n  Prehistory, defined, 7;\n    range of, 18\n\n  Pre-neanderthaloids, 30, 31, 37\n\n  Pre-Solutrean point, 89\n\n  Pre-Stellenbosch, 48\n\n  Proto-Literate assemblage, 157-160\n\n\n  Race, 35;\n    biological, 36;\n    �pure,� 16\n\n  Radioactivity, 9, 10\n\n  Radioactive carbon dates, 18, 92, 120, 130, 135, 156\n\n  Redfield, Robert, 38, 49\n\n  Reed, C. A., 128\n\n  Reindeer, 94\n\n  Rhinoceros, 93;\n    in cave art, 85\n\n  Rhodesian man, 32\n\n  Riss glaciation, 58\n\n  Rock-shelters, 58;\n    art in, 85\n\n\n  Saccopastore, 31\n\n  Sahara Desert, 34, 102\n\n  Samarra, 152;\n    pottery, 131, 152\n\n  Sangoan industry, 67\n\n  Sauer, Carl, 136\n\n  Sbaikian point, 89\n\n  Schliemann, H., 11, 12\n\n  Scotland, 171\n\n  Scraper, flake, 79;\n    end-scraper on blade, 77, 78;\n    keel-shaped, 79, 80, 81\n\n  Sculpture in caves, 83\n\n  Sebilian III, 126\n\n  Shaheinab, 135\n\n  Sheep, wild, 108;\n    at Skara Brae, 142;\n    in China, 54\n\n  Shellfish, 142\n\n  Ship, Ubaidian, 153\n\n  Sialk, 126, 134;\n    assemblage, 134\n\n  Siberia, 88;\n    pathway to New World, 98\n\n  Sickle, 112, 153;\n    blade, 113, 130\n\n  Silo, 122\n\n  Sinanthropus, 27, 30, 35\n\n  Skara Brae, 142\n\n  Snails used as food, 128\n\n  Soan, 47\n\n  Solecki, R., 116\n\n  Solo (fossil type), 29, 32\n\n  Solutrean industry, 77\n\n  Spear, shaft, 78;\n    thrower, 82, 83\n\n  Speech, development of organs of, 25\n\n  Squash, in America, 145\n\n  Steinheim fossil skull, 28\n\n  Stillbay industry, 67\n\n  Stonehenge, 166\n\n  Stratification, in caves, 12, 57;\n    in sites, 12\n\n  Swanscombe (fossil type), 11, 28\n\n  Syria, 107\n\n\n  Tabun, 60, 71\n\n  Tardenoisian, 97\n\n  Taro, 107\n\n  Tasa, 135\n\n  Tayacian, 47, 59\n\n  Teeth, pierced, in beads and pendants, 114\n\n  Temples, 123, 155\n\n  Tepe Gawra, 156\n\n  Ternafine, 29\n\n  Teshik Tash, 69\n\n  Textiles, 122\n\n  Thong-stropper, 80\n\n  Tigris River, floods in, 148\n\n  Toggle, 80\n\n  Tomatoes, in America, 145\n\n  Tombs, megalithic, 141\n\n  Tool-making, 42, 49\n\n  Tool-preparation traditions, 65\n\n  Tools, 62;\n    antler, 80;\n    blade, 70, 71, 75;\n    bone, 66;\n    chopper, 47;\n    core-biface, 43, 48, 60, 61;\n    flake, 44, 47, 51, 60, 64;\n    flint, 80, 127;\n    ground stone, 68, 127;\n    handles, 94;\n    pebble, 42, 43, 48, 53;\n    use of, 24\n\n  Touf (mud wall), 128\n\n  Toynbee, A. J., 101\n\n  Trade, 130, 155, 162\n\n  Traders, 167\n\n  Traditions, 15;\n    blade tool, 70;\n    definition of, 51;\n    interpretation of, 49;\n    tool-making, 42, 48;\n    chopper-tool, 47;\n    chopper-chopping tool, 45;\n    core-biface, 43, 48;\n    flake, 44, 47;\n    pebble tool, 42, 48\n\n  Tool-making, prehistory of, 42\n\n  Turkey, 107, 108\n\n\n  Ubaid, 153;\n    assemblage, 153-155\n\n  Urnfields, 168, 169\n\n\n  Village-farming community era, 105, 119\n\n\n  Wad B, 72\n\n  Wadjak, 34\n\n  Warka phase, 156;\n    assemblage, 156\n\n  Washburn, Sherwood L., 36\n\n  Water buffalo, domestication of, 107\n\n  Weidenreich, F., 29, 34\n\n  Wessex, 166, 167\n\n  Wheat, wild, 108;\n    partially domesticated, 127\n\n  Willow leaf point, 78\n\n  Windmill Hill, 138;\n    assemblage, 138, 140\n\n  Witch doctors, 68\n\n  Wool, 112;\n    in garments, 167\n\n  Writing, 158;\n    cuneiform, 158\n\n  W�rm I glaciation, 58\n\n\n  Zebu cattle, domestication of, 107\n\n  Zeuner, F. E., 73\n\n\n\n\n      *      *      *      *      *      *\n\n\n\n\nTranscriber�s note:\n\nPunctuation, hyphenation, and spelling were made consistent when a\npredominant preference was found in this book; otherwise they were not\nchanged.\n\nSimple typographical errors were corrected; occasional unbalanced\nquotation marks retained.\n\nAmbiguous hyphens at the ends of lines were retained.\n\nIndex not checked for proper alphabetization or correct page references.\n\nIn the original book, chapter headings were accompanied by\nillustrations, sometimes above, sometimes below, and sometimes\nadjacent. In this eBook those ilustrations always appear below the\nheadings.\n\n\n\n***END OF THE PROJECT GUTENBERG EBOOK PREHISTORIC MEN***\n\n\n******* This file should be named 52664-0.txt or 52664-0.zip *******\n\n\nThis and all associated files of various formats will be found in:\nhttp://www.gutenberg.org/dirs/5/2/6/6/52664\n\n\nUpdated editions will replace the previous one--the old editions will\nbe renamed.\n\nCreating the works from print editions not protected by U.S. copyright\nlaw means that no one owns a United States copyright in these works,\nso the Foundation (and you!) can copy and distribute it in the United\nStates without permission and without paying copyright\nroyalties. Special rules, set forth in the General Terms of Use part\nof this license, apply to copying and distributing Project\nGutenberg-tm electronic works to protect the PROJECT GUTENBERG-tm\nconcept and trademark. Project Gutenberg is a registered trademark,\nand may not be used if you charge for the eBooks, unless you receive\nspecific permission. If you do not charge anything for copies of this\neBook, complying with the rules is very easy. You may use this eBook\nfor nearly any purpose such as creation of derivative works, reports,\nperformances and research. They may be modified and printed and given\naway--you may do practically ANYTHING in the United States with eBooks\nnot protected by U.S. copyright law. Redistribution is subject to the\ntrademark license, especially commercial redistribution.\n\nSTART: FULL LICENSE\n\nTHE FULL PROJECT GUTENBERG LICENSE\nPLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK\n\nTo protect the Project Gutenberg-tm mission of promoting the free\ndistribution of electronic works, by using or distributing this work\n(or any other work associated in any way with the phrase \"Project\nGutenberg\"), you agree to comply with all the terms of the Full\nProject Gutenberg-tm License available with this file or online at\nwww.gutenberg.org/license.\n\nSection 1. General Terms of Use and Redistributing Project\nGutenberg-tm electronic works\n\n1.A. By reading or using any part of this Project Gutenberg-tm\nelectronic work, you indicate that you have read, understand, agree to\nand accept all the terms of this license and intellectual property\n(trademark/copyright) agreement. If you do not agree to abide by all\nthe terms of this agreement, you must cease using and return or\ndestroy all copies of Project Gutenberg-tm electronic works in your\npossession. If you paid a fee for obtaining a copy of or access to a\nProject Gutenberg-tm electronic work and you do not agree to be bound\nby the terms of this agreement, you may obtain a refund from the\nperson or entity to whom you paid the fee as set forth in paragraph\n1.E.8.\n\n1.B. \"Project Gutenberg\" is a registered trademark. It may only be\nused on or associated in any way with an electronic work by people who\nagree to be bound by the terms of this agreement. There are a few\nthings that you can do with most Project Gutenberg-tm electronic works\neven without complying with the full terms of this agreement. See\nparagraph 1.C below. There are a lot of things you can do with Project\nGutenberg-tm electronic works if you follow the terms of this\nagreement and help preserve free future access to Project Gutenberg-tm\nelectronic works. See paragraph 1.E below.\n\n1.C. The Project Gutenberg Literary Archive Foundation (\"the\nFoundation\" or PGLAF), owns a compilation copyright in the collection\nof Project Gutenberg-tm electronic works. Nearly all the individual\nworks in the collection are in the public domain in the United\nStates. If an individual work is unprotected by copyright law in the\nUnited States and you are located in the United States, we do not\nclaim a right to prevent you from copying, distributing, performing,\ndisplaying or creating derivative works based on the work as long as\nall references to Project Gutenberg are removed. Of course, we hope\nthat you will support the Project Gutenberg-tm mission of promoting\nfree access to electronic works by freely sharing Project Gutenberg-tm\nworks in compliance with the terms of this agreement for keeping the\nProject Gutenberg-tm name associated with the work. You can easily\ncomply with the terms of this agreement by keeping this work in the\nsame format with its attached full Project Gutenberg-tm License when\nyou share it without charge with others.\n\n1.D. The copyright laws of the place where you are located also govern\nwhat you can do with this work. Copyright laws in most countries are\nin a constant state of change. If you are outside the United States,\ncheck the laws of your country in addition to the terms of this\nagreement before downloading, copying, displaying, performing,\ndistributing or creating derivative works based on this work or any\nother Project Gutenberg-tm work. The Foundation makes no\nrepresentations concerning the copyright status of any work in any\ncountry outside the United States.\n\n1.E. Unless you have removed all references to Project Gutenberg:\n\n1.E.1. The following sentence, with active links to, or other\nimmediate access to, the full Project Gutenberg-tm License must appear\nprominently whenever any copy of a Project Gutenberg-tm work (any work\non which the phrase \"Project Gutenberg\" appears, or with which the\nphrase \"Project Gutenberg\" is associated) is accessed, displayed,\nperformed, viewed, copied or distributed:\n\n  This eBook is for the use of anyone anywhere in the United States and\n  most other parts of the world at no cost and with almost no\n  restrictions whatsoever. You may copy it, give it away or re-use it\n  under the terms of the Project Gutenberg License included with this\n  eBook or online at www.gutenberg.org. If you are not located in the\n  United States, you'll have to check the laws of the country where you\n  are located before using this ebook.\n\n1.E.2. If an individual Project Gutenberg-tm electronic work is\nderived from texts not protected by U.S. copyright law (does not\ncontain a notice indicating that it is posted with permission of the\ncopyright holder), the work can be copied and distributed to anyone in\nthe United States without paying any fees or charges. If you are\nredistributing or providing access to a work with the phrase \"Project\nGutenberg\" associated with or appearing on the work, you must comply\neither with the requirements of paragraphs 1.E.1 through 1.E.7 or\nobtain permission for the use of the work and the Project Gutenberg-tm\ntrademark as set forth in paragraphs 1.E.8 or 1.E.9.\n\n1.E.3. If an individual Project Gutenberg-tm electronic work is posted\nwith the permission of the copyright holder, your use and distribution\nmust comply with both paragraphs 1.E.1 through 1.E.7 and any\nadditional terms imposed by the copyright holder. Additional terms\nwill be linked to the Project Gutenberg-tm License for all works\nposted with the permission of the copyright holder found at the\nbeginning of this work.\n\n1.E.4. Do not unlink or detach or remove the full Project Gutenberg-tm\nLicense terms from this work, or any files containing a part of this\nwork or any other work associated with Project Gutenberg-tm.\n\n1.E.5. Do not copy, display, perform, distribute or redistribute this\nelectronic work, or any part of this electronic work, without\nprominently displaying the sentence set forth in paragraph 1.E.1 with\nactive links or immediate access to the full terms of the Project\nGutenberg-tm License.\n\n1.E.6. You may convert to and distribute this work in any binary,\ncompressed, marked up, nonproprietary or proprietary form, including\nany word processing or hypertext form. However, if you provide access\nto or distribute copies of a Project Gutenberg-tm work in a format\nother than \"Plain Vanilla ASCII\" or other format used in the official\nversion posted on the official Project Gutenberg-tm web site\n(www.gutenberg.org), you must, at no additional cost, fee or expense\nto the user, provide a copy, a means of exporting a copy, or a means\nof obtaining a copy upon request, of the work in its original \"Plain\nVanilla ASCII\" or other form. Any alternate format must include the\nfull Project Gutenberg-tm License as specified in paragraph 1.E.1.\n\n1.E.7. Do not charge a fee for access to, viewing, displaying,\nperforming, copying or distributing any Project Gutenberg-tm works\nunless you comply with paragraph 1.E.8 or 1.E.9.\n\n1.E.8. You may charge a reasonable fee for copies of or providing\naccess to or distributing Project Gutenberg-tm electronic works\nprovided that\n\n* You pay a royalty fee of 20% of the gross profits you derive from\n  the use of Project Gutenberg-tm works calculated using the method\n  you already use to calculate your applicable taxes. The fee is owed\n  to the owner of the Project Gutenberg-tm trademark, but he has\n  agreed to donate royalties under this paragraph to the Project\n  Gutenberg Literary Archive Foundation. Royalty payments must be paid\n  within 60 days following each date on which you prepare (or are\n  legally required to prepare) your periodic tax returns. Royalty\n  payments should be clearly marked as such and sent to the Project\n  Gutenberg Literary Archive Foundation at the address specified in\n  Section 4, \"Information about donations to the Project Gutenberg\n  Literary Archive Foundation.\"\n\n* You provide a full refund of any money paid by a user who notifies\n  you in writing (or by e-mail) within 30 days of receipt that s/he\n  does not agree to the terms of the full Project Gutenberg-tm\n  License. You must require such a user to return or destroy all\n  copies of the works possessed in a physical medium and discontinue\n  all use of and all access to other copies of Project Gutenberg-tm\n  works.\n\n* You provide, in accordance with paragraph 1.F.3, a full refund of\n  any money paid for a work or a replacement copy, if a defect in the\n  electronic work is discovered and reported to you within 90 days of\n  receipt of the work.\n\n* You comply with all other terms of this agreement for free\n  distribution of Project Gutenberg-tm works.\n\n1.E.9. If you wish to charge a fee or distribute a Project\nGutenberg-tm electronic work or group of works on different terms than\nare set forth in this agreement, you must obtain permission in writing\nfrom both the Project Gutenberg Literary Archive Foundation and The\nProject Gutenberg Trademark LLC, the owner of the Project Gutenberg-tm\ntrademark. Contact the Foundation as set forth in Section 3 below.\n\n1.F.\n\n1.F.1. Project Gutenberg volunteers and employees expend considerable\neffort to identify, do copyright research on, transcribe and proofread\nworks not protected by U.S. copyright law in creating the Project\nGutenberg-tm collection. Despite these efforts, Project Gutenberg-tm\nelectronic works, and the medium on which they may be stored, may\ncontain \"Defects,\" such as, but not limited to, incomplete, inaccurate\nor corrupt data, transcription errors, a copyright or other\nintellectual property infringement, a defective or damaged disk or\nother medium, a computer virus, or computer codes that damage or\ncannot be read by your equipment.\n\n1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the \"Right\nof Replacement or Refund\" described in paragraph 1.F.3, the Project\nGutenberg Literary Archive Foundation, the owner of the Project\nGutenberg-tm trademark, and any other party distributing a Project\nGutenberg-tm electronic work under this agreement, disclaim all\nliability to you for damages, costs and expenses, including legal\nfees. YOU AGREE THAT YOU HAVE NO REMEDIES FOR NEGLIGENCE, STRICT\nLIABILITY, BREACH OF WARRANTY OR BREACH OF CONTRACT EXCEPT THOSE\nPROVIDED IN PARAGRAPH 1.F.3. YOU AGREE THAT THE FOUNDATION, THE\nTRADEMARK OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE\nLIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE OR\nINCIDENTAL DAMAGES EVEN IF YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH\nDAMAGE.\n\n1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a\ndefect in this electronic work within 90 days of receiving it, you can\nreceive a refund of the money (if any) you paid for it by sending a\nwritten explanation to the person you received the work from. If you\nreceived the work on a physical medium, you must return the medium\nwith your written explanation. The person or entity that provided you\nwith the defective work may elect to provide a replacement copy in\nlieu of a refund. If you received the work electronically, the person\nor entity providing it to you may choose to give you a second\nopportunity to receive the work electronically in lieu of a refund. If\nthe second copy is also defective, you may demand a refund in writing\nwithout further opportunities to fix the problem.\n\n1.F.4. Except for the limited right of replacement or refund set forth\nin paragraph 1.F.3, this work is provided to you 'AS-IS', WITH NO\nOTHER WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT\nLIMITED TO WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PURPOSE.\n\n1.F.5. Some states do not allow disclaimers of certain implied\nwarranties or the exclusion or limitation of certain types of\ndamages. If any disclaimer or limitation set forth in this agreement\nviolates the law of the state applicable to this agreement, the\nagreement shall be interpreted to make the maximum disclaimer or\nlimitation permitted by the applicable state law. The invalidity or\nunenforceability of any provision of this agreement shall not void the\nremaining provisions.\n\n1.F.6. INDEMNITY - You agree to indemnify and hold the Foundation, the\ntrademark owner, any agent or employee of the Foundation, anyone\nproviding copies of Project Gutenberg-tm electronic works in\naccordance with this agreement, and any volunteers associated with the\nproduction, promotion and distribution of Project Gutenberg-tm\nelectronic works, harmless from all liability, costs and expenses,\nincluding legal fees, that arise directly or indirectly from any of\nthe following which you do or cause to occur: (a) distribution of this\nor any Project Gutenberg-tm work, (b) alteration, modification, or\nadditions or deletions to any Project Gutenberg-tm work, and (c) any\nDefect you cause.\n\nSection 2. Information about the Mission of Project Gutenberg-tm\n\nProject Gutenberg-tm is synonymous with the free distribution of\nelectronic works in formats readable by the widest variety of\ncomputers including obsolete, old, middle-aged and new computers. It\nexists because of the efforts of hundreds of volunteers and donations\nfrom people in all walks of life.\n\nVolunteers and financial support to provide volunteers with the\nassistance they need are critical to reaching Project Gutenberg-tm's\ngoals and ensuring that the Project Gutenberg-tm collection will\nremain freely available for generations to come. In 2001, the Project\nGutenberg Literary Archive Foundation was created to provide a secure\nand permanent future for Project Gutenberg-tm and future\ngenerations. To learn more about the Project Gutenberg Literary\nArchive Foundation and how your efforts and donations can help, see\nSections 3 and 4 and the Foundation information page at\nwww.gutenberg.org\n\nSection 3. Information about the Project Gutenberg Literary\nArchive Foundation\n\nThe Project Gutenberg Literary Archive Foundation is a non profit\n501(c)(3) educational corporation organized under the laws of the\nstate of Mississippi and granted tax exempt status by the Internal\nRevenue Service. The Foundation's EIN or federal tax identification\nnumber is 64-6221541. Contributions to the Project Gutenberg Literary\nArchive Foundation are tax deductible to the full extent permitted by\nU.S. federal laws and your state's laws.\n\nThe Foundation's principal office is in Fairbanks, Alaska, with the\nmailing address: PO Box 750175, Fairbanks, AK 99775, but its\nvolunteers and employees are scattered throughout numerous\nlocations. Its business office is located at 809 North 1500 West, Salt\nLake City, UT 84116, (801) 596-1887. Email contact links and up to\ndate contact information can be found at the Foundation's web site and\nofficial page at www.gutenberg.org/contact\n\nFor additional contact information:\n\n    Dr. Gregory B. Newby\n    Chief Executive and Director\n    gbnewby@pglaf.org\n\nSection 4. Information about Donations to the Project Gutenberg\nLiterary Archive Foundation\n\nProject Gutenberg-tm depends upon and cannot survive without wide\nspread public support and donations to carry out its mission of\nincreasing the number of public domain and licensed works that can be\nfreely distributed in machine readable form accessible by the widest\narray of equipment including outdated equipment. Many small donations\n($1 to $5,000) are particularly important to maintaining tax exempt\nstatus with the IRS.\n\nThe Foundation is committed to complying with the laws regulating\ncharities and charitable donations in all 50 states of the United\nStates. Compliance requirements are not uniform and it takes a\nconsiderable effort, much paperwork and many fees to meet and keep up\nwith these requirements. We do not solicit donations in locations\nwhere we have not received written confirmation of compliance. To SEND\nDONATIONS or determine the status of compliance for any particular\nstate visit www.gutenberg.org/donate\n\nWhile we cannot and do not solicit contributions from states where we\nhave not met the solicitation requirements, we know of no prohibition\nagainst accepting unsolicited donations from donors in such states who\napproach us with offers to donate.\n\nInternational donations are gratefully accepted, but we cannot make\nany statements concerning tax treatment of donations received from\noutside the United States. U.S. laws alone swamp our small staff.\n\nPlease check the Project Gutenberg Web pages for current donation\nmethods and addresses. Donations are accepted in a number of other\nways including checks, online payments and credit card donations. To\ndonate, please visit: www.gutenberg.org/donate\n\nSection 5. General Information About Project Gutenberg-tm electronic works.\n\nProfessor Michael S. Hart was the originator of the Project\nGutenberg-tm concept of a library of electronic works that could be\nfreely shared with anyone. For forty years, he produced and\ndistributed Project Gutenberg-tm eBooks with only a loose network of\nvolunteer support.\n\nProject Gutenberg-tm eBooks are often created from several printed\neditions, all of which are confirmed as not protected by copyright in\nthe U.S. unless a copyright notice is included. Thus, we do not\nnecessarily keep eBooks in compliance with any particular paper\nedition.\n\nMost people start at our Web site which has the main PG search\nfacility: www.gutenberg.org\n\nThis Web site includes information about Project Gutenberg-tm,\nincluding how to make donations to the Project Gutenberg Literary\nArchive Foundation, how to help produce our new eBooks, and how to\nsubscribe to our email newsletter to hear about new eBooks.\n"
  },
  {
    "path": "ciphers/rabin_miller.py",
    "content": "# Primality Testing with the Rabin-Miller Algorithm\n\nimport random\n\n\ndef rabin_miller(num: int) -> bool:\n    s = num - 1\n    t = 0\n\n    while s % 2 == 0:\n        s = s // 2\n        t += 1\n\n    for _ in range(5):\n        a = random.randrange(2, num - 1)\n        v = pow(a, s, num)\n        if v != 1:\n            i = 0\n            while v != (num - 1):\n                if i == t - 1:\n                    return False\n                else:\n                    i = i + 1\n                    v = (v**2) % num\n    return True\n\n\ndef is_prime_low_num(num: int) -> bool:\n    if num < 2:\n        return False\n\n    low_primes = [\n        2,\n        3,\n        5,\n        7,\n        11,\n        13,\n        17,\n        19,\n        23,\n        29,\n        31,\n        37,\n        41,\n        43,\n        47,\n        53,\n        59,\n        61,\n        67,\n        71,\n        73,\n        79,\n        83,\n        89,\n        97,\n        101,\n        103,\n        107,\n        109,\n        113,\n        127,\n        131,\n        137,\n        139,\n        149,\n        151,\n        157,\n        163,\n        167,\n        173,\n        179,\n        181,\n        191,\n        193,\n        197,\n        199,\n        211,\n        223,\n        227,\n        229,\n        233,\n        239,\n        241,\n        251,\n        257,\n        263,\n        269,\n        271,\n        277,\n        281,\n        283,\n        293,\n        307,\n        311,\n        313,\n        317,\n        331,\n        337,\n        347,\n        349,\n        353,\n        359,\n        367,\n        373,\n        379,\n        383,\n        389,\n        397,\n        401,\n        409,\n        419,\n        421,\n        431,\n        433,\n        439,\n        443,\n        449,\n        457,\n        461,\n        463,\n        467,\n        479,\n        487,\n        491,\n        499,\n        503,\n        509,\n        521,\n        523,\n        541,\n        547,\n        557,\n        563,\n        569,\n        571,\n        577,\n        587,\n        593,\n        599,\n        601,\n        607,\n        613,\n        617,\n        619,\n        631,\n        641,\n        643,\n        647,\n        653,\n        659,\n        661,\n        673,\n        677,\n        683,\n        691,\n        701,\n        709,\n        719,\n        727,\n        733,\n        739,\n        743,\n        751,\n        757,\n        761,\n        769,\n        773,\n        787,\n        797,\n        809,\n        811,\n        821,\n        823,\n        827,\n        829,\n        839,\n        853,\n        857,\n        859,\n        863,\n        877,\n        881,\n        883,\n        887,\n        907,\n        911,\n        919,\n        929,\n        937,\n        941,\n        947,\n        953,\n        967,\n        971,\n        977,\n        983,\n        991,\n        997,\n    ]\n\n    if num in low_primes:\n        return True\n\n    for prime in low_primes:\n        if (num % prime) == 0:\n            return False\n\n    return rabin_miller(num)\n\n\ndef generate_large_prime(keysize: int = 1024) -> int:\n    while True:\n        num = random.randrange(2 ** (keysize - 1), 2 ** (keysize))\n        if is_prime_low_num(num):\n            return num\n\n\nif __name__ == \"__main__\":\n    num = generate_large_prime()\n    print((\"Prime number:\", num))\n    print((\"is_prime_low_num:\", is_prime_low_num(num)))\n"
  },
  {
    "path": "ciphers/rail_fence_cipher.py",
    "content": "\"\"\"https://en.wikipedia.org/wiki/Rail_fence_cipher\"\"\"\r\n\r\n\r\ndef encrypt(input_string: str, key: int) -> str:\r\n    \"\"\"\r\n    Shuffles the character of a string by placing each of them\r\n    in a grid (the height is dependent on the key) in a zigzag\r\n    formation and reading it left to right.\r\n\r\n    >>> encrypt(\"Hello World\", 4)\r\n    'HWe olordll'\r\n\r\n    >>> encrypt(\"This is a message\", 0)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Height of grid can't be 0 or negative\r\n\r\n    >>> encrypt(b\"This is a byte string\", 5)\r\n    Traceback (most recent call last):\r\n        ...\r\n    TypeError: sequence item 0: expected str instance, int found\r\n    \"\"\"\r\n    temp_grid: list[list[str]] = [[] for _ in range(key)]\r\n    lowest = key - 1\r\n\r\n    if key <= 0:\r\n        raise ValueError(\"Height of grid can't be 0 or negative\")\r\n    if key == 1 or len(input_string) <= key:\r\n        return input_string\r\n\r\n    for position, character in enumerate(input_string):\r\n        num = position % (lowest * 2)  # puts it in bounds\r\n        num = min(num, lowest * 2 - num)  # creates zigzag pattern\r\n        temp_grid[num].append(character)\r\n    grid = [\"\".join(row) for row in temp_grid]\r\n    output_string = \"\".join(grid)\r\n\r\n    return output_string\r\n\r\n\r\ndef decrypt(input_string: str, key: int) -> str:\r\n    \"\"\"\r\n    Generates a template based on the key and fills it in with\r\n    the characters of the input string and then reading it in\r\n    a zigzag formation.\r\n\r\n    >>> decrypt(\"HWe olordll\", 4)\r\n    'Hello World'\r\n\r\n    >>> decrypt(\"This is a message\", -10)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Height of grid can't be 0 or negative\r\n\r\n    >>> decrypt(\"My key is very big\", 100)\r\n    'My key is very big'\r\n    \"\"\"\r\n    grid = []\r\n    lowest = key - 1\r\n\r\n    if key <= 0:\r\n        raise ValueError(\"Height of grid can't be 0 or negative\")\r\n    if key == 1:\r\n        return input_string\r\n\r\n    temp_grid: list[list[str]] = [[] for _ in range(key)]  # generates template\r\n    for position in range(len(input_string)):\r\n        num = position % (lowest * 2)  # puts it in bounds\r\n        num = min(num, lowest * 2 - num)  # creates zigzag pattern\r\n        temp_grid[num].append(\"*\")\r\n\r\n    counter = 0\r\n    for row in temp_grid:  # fills in the characters\r\n        splice = input_string[counter : counter + len(row)]\r\n        grid.append(list(splice))\r\n        counter += len(row)\r\n\r\n    output_string = \"\"  # reads as zigzag\r\n    for position in range(len(input_string)):\r\n        num = position % (lowest * 2)  # puts it in bounds\r\n        num = min(num, lowest * 2 - num)  # creates zigzag pattern\r\n        output_string += grid[num][0]\r\n        grid[num].pop(0)\r\n    return output_string\r\n\r\n\r\ndef bruteforce(input_string: str) -> dict[int, str]:\r\n    \"\"\"Uses decrypt function by guessing every key\r\n\r\n    >>> bruteforce(\"HWe olordll\")[4]\r\n    'Hello World'\r\n    \"\"\"\r\n    results = {}\r\n    for key_guess in range(1, len(input_string)):  # tries every key\r\n        results[key_guess] = decrypt(input_string, key_guess)\r\n    return results\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n"
  },
  {
    "path": "ciphers/rot13.py",
    "content": "def dencrypt(s: str, n: int = 13) -> str:\n    \"\"\"\n    https://en.wikipedia.org/wiki/ROT13\n\n    >>> msg = \"My secret bank account number is 173-52946 so don't tell anyone!!\"\n    >>> s = dencrypt(msg)\n    >>> s\n    \"Zl frperg onax nppbhag ahzore vf 173-52946 fb qba'g gryy nalbar!!\"\n    >>> dencrypt(s) == msg\n    True\n    \"\"\"\n    out = \"\"\n    for c in s:\n        if \"A\" <= c <= \"Z\":\n            out += chr(ord(\"A\") + (ord(c) - ord(\"A\") + n) % 26)\n        elif \"a\" <= c <= \"z\":\n            out += chr(ord(\"a\") + (ord(c) - ord(\"a\") + n) % 26)\n        else:\n            out += c\n    return out\n\n\ndef main() -> None:\n    s0 = input(\"Enter message: \")\n\n    s1 = dencrypt(s0, 13)\n    print(\"Encryption:\", s1)\n\n    s2 = dencrypt(s1, 13)\n    print(\"Decryption: \", s2)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    main()\n"
  },
  {
    "path": "ciphers/rsa_cipher.py",
    "content": "import os\nimport sys\n\nfrom . import rsa_key_generator as rkg\n\nDEFAULT_BLOCK_SIZE = 128\nBYTE_SIZE = 256\n\n\ndef get_blocks_from_text(\n    message: str, block_size: int = DEFAULT_BLOCK_SIZE\n) -> list[int]:\n    message_bytes = message.encode(\"ascii\")\n\n    block_ints = []\n    for block_start in range(0, len(message_bytes), block_size):\n        block_int = 0\n        for i in range(block_start, min(block_start + block_size, len(message_bytes))):\n            block_int += message_bytes[i] * (BYTE_SIZE ** (i % block_size))\n        block_ints.append(block_int)\n    return block_ints\n\n\ndef get_text_from_blocks(\n    block_ints: list[int], message_length: int, block_size: int = DEFAULT_BLOCK_SIZE\n) -> str:\n    message: list[str] = []\n    for block_int in block_ints:\n        block_message: list[str] = []\n        for i in range(block_size - 1, -1, -1):\n            if len(message) + i < message_length:\n                ascii_number = block_int // (BYTE_SIZE**i)\n                block_int = block_int % (BYTE_SIZE**i)\n                block_message.insert(0, chr(ascii_number))\n        message.extend(block_message)\n    return \"\".join(message)\n\n\ndef encrypt_message(\n    message: str, key: tuple[int, int], block_size: int = DEFAULT_BLOCK_SIZE\n) -> list[int]:\n    encrypted_blocks = []\n    n, e = key\n\n    for block in get_blocks_from_text(message, block_size):\n        encrypted_blocks.append(pow(block, e, n))\n    return encrypted_blocks\n\n\ndef decrypt_message(\n    encrypted_blocks: list[int],\n    message_length: int,\n    key: tuple[int, int],\n    block_size: int = DEFAULT_BLOCK_SIZE,\n) -> str:\n    decrypted_blocks = []\n    n, d = key\n    for block in encrypted_blocks:\n        decrypted_blocks.append(pow(block, d, n))\n    return get_text_from_blocks(decrypted_blocks, message_length, block_size)\n\n\ndef read_key_file(key_filename: str) -> tuple[int, int, int]:\n    with open(key_filename) as fo:\n        content = fo.read()\n    key_size, n, eor_d = content.split(\",\")\n    return (int(key_size), int(n), int(eor_d))\n\n\ndef encrypt_and_write_to_file(\n    message_filename: str,\n    key_filename: str,\n    message: str,\n    block_size: int = DEFAULT_BLOCK_SIZE,\n) -> str:\n    key_size, n, e = read_key_file(key_filename)\n    if key_size < block_size * 8:\n        sys.exit(\n            f\"ERROR: Block size is {block_size * 8} bits and key size is {key_size} \"\n            \"bits. The RSA cipher requires the block size to be equal to or greater \"\n            \"than the key size. Either decrease the block size or use different keys.\"\n        )\n\n    encrypted_blocks = [str(i) for i in encrypt_message(message, (n, e), block_size)]\n\n    encrypted_content = \",\".join(encrypted_blocks)\n    encrypted_content = f\"{len(message)}_{block_size}_{encrypted_content}\"\n    with open(message_filename, \"w\") as fo:\n        fo.write(encrypted_content)\n    return encrypted_content\n\n\ndef read_from_file_and_decrypt(message_filename: str, key_filename: str) -> str:\n    key_size, n, d = read_key_file(key_filename)\n    with open(message_filename) as fo:\n        content = fo.read()\n    message_length_str, block_size_str, encrypted_message = content.split(\"_\")\n    message_length = int(message_length_str)\n    block_size = int(block_size_str)\n\n    if key_size < block_size * 8:\n        sys.exit(\n            f\"ERROR: Block size is {block_size * 8} bits and key size is {key_size} \"\n            \"bits. The RSA cipher requires the block size to be equal to or greater \"\n            \"than the key size. Were the correct key file and encrypted file specified?\"\n        )\n\n    encrypted_blocks = []\n    for block in encrypted_message.split(\",\"):\n        encrypted_blocks.append(int(block))\n\n    return decrypt_message(encrypted_blocks, message_length, (n, d), block_size)\n\n\ndef main() -> None:\n    filename = \"encrypted_file.txt\"\n    response = input(r\"Encrypt\\Decrypt [e\\d]: \")\n\n    if response.lower().startswith(\"e\"):\n        mode = \"encrypt\"\n    elif response.lower().startswith(\"d\"):\n        mode = \"decrypt\"\n\n    if mode == \"encrypt\":\n        if not os.path.exists(\"rsa_pubkey.txt\"):\n            rkg.make_key_files(\"rsa\", 1024)\n\n        message = input(\"\\nEnter message: \")\n        pubkey_filename = \"rsa_pubkey.txt\"\n        print(f\"Encrypting and writing to {filename}...\")\n        encrypted_text = encrypt_and_write_to_file(filename, pubkey_filename, message)\n\n        print(\"\\nEncrypted text:\")\n        print(encrypted_text)\n\n    elif mode == \"decrypt\":\n        privkey_filename = \"rsa_privkey.txt\"\n        print(f\"Reading from {filename} and decrypting...\")\n        decrypted_text = read_from_file_and_decrypt(filename, privkey_filename)\n        print(\"writing decryption to rsa_decryption.txt...\")\n        with open(\"rsa_decryption.txt\", \"w\") as dec:\n            dec.write(decrypted_text)\n\n        print(\"\\nDecryption:\")\n        print(decrypted_text)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "ciphers/rsa_factorization.py",
    "content": "\"\"\"\r\nAn RSA prime factor algorithm.\r\n\r\nThe program can efficiently factor RSA prime number given the private key d and\r\npublic key e.\r\n\r\n| Source: on page ``3`` of https://crypto.stanford.edu/~dabo/papers/RSA-survey.pdf\r\n| More readable source: https://www.di-mgt.com.au/rsa_factorize_n.html\r\n\r\nlarge number can take minutes to factor, therefore are not included in doctest.\r\n\"\"\"\r\n\r\nfrom __future__ import annotations\r\n\r\nimport math\r\nimport random\r\n\r\n\r\ndef rsafactor(d: int, e: int, n: int) -> list[int]:\r\n    \"\"\"\r\n    This function returns the factors of N, where p*q=N\r\n\r\n    Return: [p, q]\r\n\r\n    We call N the RSA modulus, e the encryption exponent, and d the decryption exponent.\r\n    The pair (N, e) is the public key. As its name suggests, it is public and is used to\r\n    encrypt messages.\r\n    The pair (N, d) is the secret key or private key and is known only to the recipient\r\n    of encrypted messages.\r\n\r\n    >>> rsafactor(3, 16971, 25777)\r\n    [149, 173]\r\n    >>> rsafactor(7331, 11, 27233)\r\n    [113, 241]\r\n    >>> rsafactor(4021, 13, 17711)\r\n    [89, 199]\r\n    \"\"\"\r\n    k = d * e - 1\r\n    p = 0\r\n    q = 0\r\n    while p == 0:\r\n        g = random.randint(2, n - 1)\r\n        t = k\r\n        while True:\r\n            if t % 2 == 0:\r\n                t = t // 2\r\n                x = (g**t) % n\r\n                y = math.gcd(x - 1, n)\r\n                if x > 1 and y > 1:\r\n                    p = y\r\n                    q = n // y\r\n                    break  # find the correct factors\r\n            else:\r\n                break  # t is not divisible by 2, break and choose another g\r\n    return sorted([p, q])\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n"
  },
  {
    "path": "ciphers/rsa_key_generator.py",
    "content": "import os\nimport random\nimport sys\n\nfrom maths.greatest_common_divisor import gcd_by_iterative\n\nfrom . import cryptomath_module, rabin_miller\n\n\ndef main() -> None:\n    print(\"Making key files...\")\n    make_key_files(\"rsa\", 1024)\n    print(\"Key files generation successful.\")\n\n\ndef generate_key(key_size: int) -> tuple[tuple[int, int], tuple[int, int]]:\n    \"\"\"\n    >>> random.seed(0) # for repeatability\n    >>> public_key, private_key = generate_key(8)\n    >>> public_key\n    (26569, 239)\n    >>> private_key\n    (26569, 2855)\n    \"\"\"\n    p = rabin_miller.generate_large_prime(key_size)\n    q = rabin_miller.generate_large_prime(key_size)\n    n = p * q\n\n    # Generate e that is relatively prime to (p - 1) * (q - 1)\n    while True:\n        e = random.randrange(2 ** (key_size - 1), 2 ** (key_size))\n        if gcd_by_iterative(e, (p - 1) * (q - 1)) == 1:\n            break\n\n    # Calculate d that is mod inverse of e\n    d = cryptomath_module.find_mod_inverse(e, (p - 1) * (q - 1))\n\n    public_key = (n, e)\n    private_key = (n, d)\n    return (public_key, private_key)\n\n\ndef make_key_files(name: str, key_size: int) -> None:\n    if os.path.exists(f\"{name}_pubkey.txt\") or os.path.exists(f\"{name}_privkey.txt\"):\n        print(\"\\nWARNING:\")\n        print(\n            f'\"{name}_pubkey.txt\" or \"{name}_privkey.txt\" already exists. \\n'\n            \"Use a different name or delete these files and re-run this program.\"\n        )\n        sys.exit()\n\n    public_key, private_key = generate_key(key_size)\n    print(f\"\\nWriting public key to file {name}_pubkey.txt...\")\n    with open(f\"{name}_pubkey.txt\", \"w\") as out_file:\n        out_file.write(f\"{key_size},{public_key[0]},{public_key[1]}\")\n\n    print(f\"Writing private key to file {name}_privkey.txt...\")\n    with open(f\"{name}_privkey.txt\", \"w\") as out_file:\n        out_file.write(f\"{key_size},{private_key[0]},{private_key[1]}\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "ciphers/running_key_cipher.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/Running_key_cipher\n\"\"\"\n\n\ndef running_key_encrypt(key: str, plaintext: str) -> str:\n    \"\"\"\n    Encrypts the plaintext using the Running Key Cipher.\n\n    :param key: The running key (long piece of text).\n    :param plaintext: The plaintext to be encrypted.\n    :return: The ciphertext.\n    \"\"\"\n    plaintext = plaintext.replace(\" \", \"\").upper()\n    key = key.replace(\" \", \"\").upper()\n    key_length = len(key)\n    ciphertext = []\n    ord_a = ord(\"A\")\n\n    for i, char in enumerate(plaintext):\n        p = ord(char) - ord_a\n        k = ord(key[i % key_length]) - ord_a\n        c = (p + k) % 26\n        ciphertext.append(chr(c + ord_a))\n\n    return \"\".join(ciphertext)\n\n\ndef running_key_decrypt(key: str, ciphertext: str) -> str:\n    \"\"\"\n    Decrypts the ciphertext using the Running Key Cipher.\n\n    :param key: The running key (long piece of text).\n    :param ciphertext: The ciphertext to be decrypted.\n    :return: The plaintext.\n    \"\"\"\n    ciphertext = ciphertext.replace(\" \", \"\").upper()\n    key = key.replace(\" \", \"\").upper()\n    key_length = len(key)\n    plaintext = []\n    ord_a = ord(\"A\")\n\n    for i, char in enumerate(ciphertext):\n        c = ord(char) - ord_a\n        k = ord(key[i % key_length]) - ord_a\n        p = (c - k) % 26\n        plaintext.append(chr(p + ord_a))\n\n    return \"\".join(plaintext)\n\n\ndef test_running_key_encrypt() -> None:\n    \"\"\"\n    >>> key = \"How does the duck know that? said Victor\"\n    >>> ciphertext = running_key_encrypt(key, \"DEFEND THIS\")\n    >>> running_key_decrypt(key, ciphertext) == \"DEFENDTHIS\"\n    True\n    \"\"\"\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    test_running_key_encrypt()\n\n    plaintext = input(\"Enter the plaintext: \").upper()\n    print(f\"\\n{plaintext = }\")\n\n    key = \"How does the duck know that? said Victor\"\n    encrypted_text = running_key_encrypt(key, plaintext)\n    print(f\"{encrypted_text = }\")\n\n    decrypted_text = running_key_decrypt(key, encrypted_text)\n    print(f\"{decrypted_text = }\")\n"
  },
  {
    "path": "ciphers/shuffled_shift_cipher.py",
    "content": "from __future__ import annotations\n\nimport random\nimport string\n\n\nclass ShuffledShiftCipher:\n    \"\"\"\n    This algorithm uses the Caesar Cipher algorithm but removes the option to\n    use brute force to decrypt the message.\n\n    The passcode is a random password from the selection buffer of\n    1. uppercase letters of the English alphabet\n    2. lowercase letters of the English alphabet\n    3. digits from 0 to 9\n\n    Using unique characters from the passcode, the normal list of characters,\n    that can be allowed in the plaintext, is pivoted and shuffled. Refer to docstring\n    of __make_key_list() to learn more about the shuffling.\n\n    Then, using the passcode, a number is calculated which is used to encrypt the\n    plaintext message with the normal shift cipher method, only in this case, the\n    reference, to look back at while decrypting, is shuffled.\n\n    Each cipher object can possess an optional argument as passcode, without which a\n    new passcode is generated for that object automatically.\n    cip1 = ShuffledShiftCipher('d4usr9TWxw9wMD')\n    cip2 = ShuffledShiftCipher()\n    \"\"\"\n\n    def __init__(self, passcode: str | None = None) -> None:\n        \"\"\"\n        Initializes a cipher object with a passcode as it's entity\n        Note: No new passcode is generated if user provides a passcode\n        while creating the object\n        \"\"\"\n        self.__passcode = passcode or self.__passcode_creator()\n        self.__key_list = self.__make_key_list()\n        self.__shift_key = self.__make_shift_key()\n\n    def __str__(self) -> str:\n        \"\"\"\n        :return: passcode of the cipher object\n        \"\"\"\n        return \"\".join(self.__passcode)\n\n    def __neg_pos(self, iterlist: list[int]) -> list[int]:\n        \"\"\"\n        Mutates the list by changing the sign of each alternate element\n\n        :param iterlist: takes a list iterable\n        :return: the mutated list\n\n        \"\"\"\n        for i in range(1, len(iterlist), 2):\n            iterlist[i] *= -1\n        return iterlist\n\n    def __passcode_creator(self) -> list[str]:\n        \"\"\"\n        Creates a random password from the selection buffer of\n        1. uppercase letters of the English alphabet\n        2. lowercase letters of the English alphabet\n        3. digits from 0 to 9\n\n        :rtype: list\n        :return: a password of a random length between 10 to 20\n        \"\"\"\n        choices = string.ascii_letters + string.digits\n        password = [random.choice(choices) for _ in range(random.randint(10, 20))]\n        return password\n\n    def __make_key_list(self) -> list[str]:\n        \"\"\"\n        Shuffles the ordered character choices by pivoting at breakpoints\n        Breakpoints are the set of characters in the passcode\n\n        eg:\n            if, ABCDEFGHIJKLMNOPQRSTUVWXYZ are the possible characters\n            and CAMERA is the passcode\n            then, breakpoints = [A,C,E,M,R] # sorted set of characters from passcode\n            shuffled parts: [A,CB,ED,MLKJIHGF,RQPON,ZYXWVUTS]\n            shuffled __key_list : ACBEDMLKJIHGFRQPONZYXWVUTS\n\n        Shuffling only 26 letters of the english alphabet can generate 26!\n        combinations for the shuffled list. In the program we consider, a set of\n        97 characters (including letters, digits, punctuation and whitespaces),\n        thereby creating a possibility of 97! combinations (which is a 152 digit number\n        in itself), thus diminishing the possibility of a brute force approach.\n        Moreover, shift keys even introduce a multiple of 26 for a brute force approach\n        for each of the already 97! combinations.\n        \"\"\"\n        # key_list_options contain nearly all printable except few elements from\n        # string.whitespace\n        key_list_options = (\n            string.ascii_letters + string.digits + string.punctuation + \" \\t\\n\"\n        )\n\n        keys_l = []\n\n        # creates points known as breakpoints to break the key_list_options at those\n        # points and pivot each substring\n        breakpoints = sorted(set(self.__passcode))\n        temp_list: list[str] = []\n\n        # algorithm for creating a new shuffled list, keys_l, out of key_list_options\n        for i in key_list_options:\n            temp_list.extend(i)\n\n            # checking breakpoints at which to pivot temporary sublist and add it into\n            # keys_l\n            if i in breakpoints or i == key_list_options[-1]:\n                keys_l.extend(temp_list[::-1])\n                temp_list.clear()\n\n        # returning a shuffled keys_l to prevent brute force guessing of shift key\n        return keys_l\n\n    def __make_shift_key(self) -> int:\n        \"\"\"\n        sum() of the mutated list of ascii values of all characters where the\n        mutated list is the one returned by __neg_pos()\n        \"\"\"\n        num = sum(self.__neg_pos([ord(x) for x in self.__passcode]))\n        return num if num > 0 else len(self.__passcode)\n\n    def decrypt(self, encoded_message: str) -> str:\n        \"\"\"\n        Performs shifting of the encoded_message w.r.t. the shuffled __key_list\n        to create the decoded_message\n\n        >>> ssc = ShuffledShiftCipher('4PYIXyqeQZr44')\n        >>> ssc.decrypt(\"d>**-1z6&'5z'5z:z+-='$'>=zp:>5:#z<'.&>#\")\n        'Hello, this is a modified Caesar cipher'\n\n        \"\"\"\n        decoded_message = \"\"\n\n        # decoding shift like Caesar cipher algorithm implementing negative shift or\n        # reverse shift or left shift\n        for i in encoded_message:\n            position = self.__key_list.index(i)\n            decoded_message += self.__key_list[\n                (position - self.__shift_key) % -len(self.__key_list)\n            ]\n\n        return decoded_message\n\n    def encrypt(self, plaintext: str) -> str:\n        \"\"\"\n        Performs shifting of the plaintext w.r.t. the shuffled __key_list\n        to create the encoded_message\n\n        >>> ssc = ShuffledShiftCipher('4PYIXyqeQZr44')\n        >>> ssc.encrypt('Hello, this is a modified Caesar cipher')\n        \"d>**-1z6&'5z'5z:z+-='$'>=zp:>5:#z<'.&>#\"\n\n        \"\"\"\n        encoded_message = \"\"\n\n        # encoding shift like Caesar cipher algorithm implementing positive shift or\n        # forward shift or right shift\n        for i in plaintext:\n            position = self.__key_list.index(i)\n            encoded_message += self.__key_list[\n                (position + self.__shift_key) % len(self.__key_list)\n            ]\n\n        return encoded_message\n\n\ndef test_end_to_end(msg: str = \"Hello, this is a modified Caesar cipher\") -> str:\n    \"\"\"\n    >>> test_end_to_end()\n    'Hello, this is a modified Caesar cipher'\n    \"\"\"\n    cip1 = ShuffledShiftCipher()\n    return cip1.decrypt(cip1.encrypt(msg))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "ciphers/simple_keyword_cypher.py",
    "content": "def remove_duplicates(key: str) -> str:\n    \"\"\"\n    Removes duplicate alphabetic characters in a keyword (letter is ignored after its\n    first appearance).\n\n    :param key: Keyword to use\n    :return: String with duplicates removed\n\n    >>> remove_duplicates('Hello World!!')\n    'Helo Wrd'\n    \"\"\"\n\n    key_no_dups = \"\"\n    for ch in key:\n        if ch == \" \" or (ch not in key_no_dups and ch.isalpha()):\n            key_no_dups += ch\n    return key_no_dups\n\n\ndef create_cipher_map(key: str) -> dict[str, str]:\n    \"\"\"\n    Returns a cipher map given a keyword.\n\n    :param key: keyword to use\n    :return: dictionary cipher map\n    \"\"\"\n    # Create a list of the letters in the alphabet\n    alphabet = [chr(i + 65) for i in range(26)]\n    # Remove duplicate characters from key\n    key = remove_duplicates(key.upper())\n    offset = len(key)\n    # First fill cipher with key characters\n    cipher_alphabet = {alphabet[i]: char for i, char in enumerate(key)}\n    # Then map remaining characters in alphabet to\n    # the alphabet from the beginning\n    for i in range(len(cipher_alphabet), 26):\n        char = alphabet[i - offset]\n        # Ensure we are not mapping letters to letters previously mapped\n        while char in key:\n            offset -= 1\n            char = alphabet[i - offset]\n        cipher_alphabet[alphabet[i]] = char\n    return cipher_alphabet\n\n\ndef encipher(message: str, cipher_map: dict[str, str]) -> str:\n    \"\"\"\n    Enciphers a message given a cipher map.\n\n    :param message: Message to encipher\n    :param cipher_map: Cipher map\n    :return: enciphered string\n\n    >>> encipher('Hello World!!', create_cipher_map('Goodbye!!'))\n    'CYJJM VMQJB!!'\n    \"\"\"\n    return \"\".join(cipher_map.get(ch, ch) for ch in message.upper())\n\n\ndef decipher(message: str, cipher_map: dict[str, str]) -> str:\n    \"\"\"\n    Deciphers a message given a cipher map\n\n    :param message: Message to decipher\n    :param cipher_map: Dictionary mapping to use\n    :return: Deciphered string\n\n    >>> cipher_map = create_cipher_map('Goodbye!!')\n    >>> decipher(encipher('Hello World!!', cipher_map), cipher_map)\n    'HELLO WORLD!!'\n    \"\"\"\n    # Reverse our cipher mappings\n    rev_cipher_map = {v: k for k, v in cipher_map.items()}\n    return \"\".join(rev_cipher_map.get(ch, ch) for ch in message.upper())\n\n\ndef main() -> None:\n    \"\"\"\n    Handles I/O\n\n    :return: void\n    \"\"\"\n    message = input(\"Enter message to encode or decode: \").strip()\n    key = input(\"Enter keyword: \").strip()\n    option = input(\"Encipher or decipher? E/D:\").strip()[0].lower()\n    try:\n        func = {\"e\": encipher, \"d\": decipher}[option]\n    except KeyError:\n        raise KeyError(\"invalid input option\")\n    cipher_map = create_cipher_map(key)\n    print(func(message, cipher_map))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    main()\n"
  },
  {
    "path": "ciphers/simple_substitution_cipher.py",
    "content": "import random\nimport sys\n\nLETTERS = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n\n\ndef main() -> None:\n    message = input(\"Enter message: \")\n    key = \"LFWOAYUISVKMNXPBDCRJTQEGHZ\"\n    resp = input(\"Encrypt/Decrypt [e/d]: \")\n\n    check_valid_key(key)\n\n    if resp.lower().startswith(\"e\"):\n        mode = \"encrypt\"\n        translated = encrypt_message(key, message)\n    elif resp.lower().startswith(\"d\"):\n        mode = \"decrypt\"\n        translated = decrypt_message(key, message)\n\n    print(f\"\\n{mode.title()}ion: \\n{translated}\")\n\n\ndef check_valid_key(key: str) -> None:\n    key_list = list(key)\n    letters_list = list(LETTERS)\n    key_list.sort()\n    letters_list.sort()\n\n    if key_list != letters_list:\n        sys.exit(\"Error in the key or symbol set.\")\n\n\ndef encrypt_message(key: str, message: str) -> str:\n    \"\"\"\n    >>> encrypt_message('LFWOAYUISVKMNXPBDCRJTQEGHZ', 'Harshil Darji')\n    'Ilcrism Olcvs'\n    \"\"\"\n    return translate_message(key, message, \"encrypt\")\n\n\ndef decrypt_message(key: str, message: str) -> str:\n    \"\"\"\n    >>> decrypt_message('LFWOAYUISVKMNXPBDCRJTQEGHZ', 'Ilcrism Olcvs')\n    'Harshil Darji'\n    \"\"\"\n    return translate_message(key, message, \"decrypt\")\n\n\ndef translate_message(key: str, message: str, mode: str) -> str:\n    translated = \"\"\n    chars_a = LETTERS\n    chars_b = key\n\n    if mode == \"decrypt\":\n        chars_a, chars_b = chars_b, chars_a\n\n    for symbol in message:\n        if symbol.upper() in chars_a:\n            sym_index = chars_a.find(symbol.upper())\n            if symbol.isupper():\n                translated += chars_b[sym_index].upper()\n            else:\n                translated += chars_b[sym_index].lower()\n        else:\n            translated += symbol\n\n    return translated\n\n\ndef get_random_key() -> str:\n    key = list(LETTERS)\n    random.shuffle(key)\n    return \"\".join(key)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "ciphers/transposition_cipher.py",
    "content": "import math\n\n\"\"\"\nIn cryptography, the TRANSPOSITION cipher is a method of encryption where the\npositions of plaintext are shifted a certain number(determined by the key) that\nfollows a regular system that results in the permuted text, known as the encrypted\ntext. The type of transposition cipher demonstrated under is the ROUTE cipher.\n\"\"\"\n\n\ndef main() -> None:\n    message = input(\"Enter message: \")\n    key = int(input(f\"Enter key [2-{len(message) - 1}]: \"))\n    mode = input(\"Encryption/Decryption [e/d]: \")\n\n    if mode.lower().startswith(\"e\"):\n        text = encrypt_message(key, message)\n    elif mode.lower().startswith(\"d\"):\n        text = decrypt_message(key, message)\n\n    # Append pipe symbol (vertical bar) to identify spaces at the end.\n    print(f\"Output:\\n{text + '|'}\")\n\n\ndef encrypt_message(key: int, message: str) -> str:\n    \"\"\"\n    >>> encrypt_message(6, 'Harshil Darji')\n    'Hlia rDsahrij'\n    \"\"\"\n    cipher_text = [\"\"] * key\n    for col in range(key):\n        pointer = col\n        while pointer < len(message):\n            cipher_text[col] += message[pointer]\n            pointer += key\n    return \"\".join(cipher_text)\n\n\ndef decrypt_message(key: int, message: str) -> str:\n    \"\"\"\n    >>> decrypt_message(6, 'Hlia rDsahrij')\n    'Harshil Darji'\n    \"\"\"\n    num_cols = math.ceil(len(message) / key)\n    num_rows = key\n    num_shaded_boxes = (num_cols * num_rows) - len(message)\n    plain_text = [\"\"] * num_cols\n    col = 0\n    row = 0\n\n    for symbol in message:\n        plain_text[col] += symbol\n        col += 1\n\n        if (col == num_cols) or (\n            (col == num_cols - 1) and (row >= num_rows - num_shaded_boxes)\n        ):\n            col = 0\n            row += 1\n\n    return \"\".join(plain_text)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    main()\n"
  },
  {
    "path": "ciphers/transposition_cipher_encrypt_decrypt_file.py",
    "content": "import os\nimport sys\nimport time\n\nfrom . import transposition_cipher as trans_cipher\n\n\ndef main() -> None:\n    input_file = \"./prehistoric_men.txt\"\n    output_file = \"./Output.txt\"\n    key = int(input(\"Enter key: \"))\n    mode = input(\"Encrypt/Decrypt [e/d]: \")\n\n    if not os.path.exists(input_file):\n        print(f\"File {input_file} does not exist. Quitting...\")\n        sys.exit()\n    if os.path.exists(output_file):\n        print(f\"Overwrite {output_file}? [y/n]\")\n        response = input(\"> \")\n        if not response.lower().startswith(\"y\"):\n            sys.exit()\n\n    start_time = time.time()\n    if mode.lower().startswith(\"e\"):\n        with open(input_file) as f:\n            content = f.read()\n        translated = trans_cipher.encrypt_message(key, content)\n    elif mode.lower().startswith(\"d\"):\n        with open(output_file) as f:\n            content = f.read()\n        translated = trans_cipher.decrypt_message(key, content)\n\n    with open(output_file, \"w\") as output_obj:\n        output_obj.write(translated)\n\n    total_time = round(time.time() - start_time, 2)\n    print((\"Done (\", total_time, \"seconds )\"))\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "ciphers/trifid_cipher.py",
    "content": "\"\"\"\r\nThe trifid cipher uses a table to fractionate each plaintext letter into a trigram,\r\nmixes the constituents of the trigrams, and then applies the table in reverse to turn\r\nthese mixed trigrams into ciphertext letters.\r\n\r\nhttps://en.wikipedia.org/wiki/Trifid_cipher\r\n\"\"\"\r\n\r\nfrom __future__ import annotations\r\n\r\n# fmt: off\r\nTEST_CHARACTER_TO_NUMBER = {\r\n    \"A\": \"111\", \"B\": \"112\", \"C\": \"113\", \"D\": \"121\", \"E\": \"122\", \"F\": \"123\", \"G\": \"131\",\r\n    \"H\": \"132\", \"I\": \"133\", \"J\": \"211\", \"K\": \"212\", \"L\": \"213\", \"M\": \"221\", \"N\": \"222\",\r\n    \"O\": \"223\", \"P\": \"231\", \"Q\": \"232\", \"R\": \"233\", \"S\": \"311\", \"T\": \"312\", \"U\": \"313\",\r\n    \"V\": \"321\", \"W\": \"322\", \"X\": \"323\", \"Y\": \"331\", \"Z\": \"332\", \"+\": \"333\",\r\n}\r\n# fmt: off\r\n\r\nTEST_NUMBER_TO_CHARACTER = {val: key for key, val in TEST_CHARACTER_TO_NUMBER.items()}\r\n\r\n\r\ndef __encrypt_part(message_part: str, character_to_number: dict[str, str]) -> str:\r\n    \"\"\"\r\n    Arrange the triagram value of each letter of `message_part` vertically and join\r\n    them horizontally.\r\n\r\n    >>> __encrypt_part('ASK', TEST_CHARACTER_TO_NUMBER)\r\n    '132111112'\r\n    \"\"\"\r\n    one, two, three = \"\", \"\", \"\"\r\n    for each in (character_to_number[character] for character in message_part):\r\n        one += each[0]\r\n        two += each[1]\r\n        three += each[2]\r\n\r\n    return one + two + three\r\n\r\n\r\ndef __decrypt_part(\r\n    message_part: str, character_to_number: dict[str, str]\r\n) -> tuple[str, str, str]:\r\n    \"\"\"\r\n    Convert each letter of the input string into their respective trigram values, join\r\n    them and split them into three equal groups of strings which are returned.\r\n\r\n    >>> __decrypt_part('ABCDE', TEST_CHARACTER_TO_NUMBER)\r\n    ('11111', '21131', '21122')\r\n    \"\"\"\r\n    this_part = \"\".join(character_to_number[character] for character in message_part)\r\n    result = []\r\n    tmp = \"\"\r\n    for digit in this_part:\r\n        tmp += digit\r\n        if len(tmp) == len(message_part):\r\n            result.append(tmp)\r\n            tmp = \"\"\r\n\r\n    return result[0], result[1], result[2]\r\n\r\n\r\ndef __prepare(\r\n    message: str, alphabet: str\r\n) -> tuple[str, str, dict[str, str], dict[str, str]]:\r\n    \"\"\"\r\n    A helper function that generates the triagrams and assigns each letter of the\r\n    alphabet to its corresponding triagram and stores this in a dictionary\r\n    (`character_to_number` and `number_to_character`) after confirming if the\r\n    alphabet's length is ``27``.\r\n\r\n    >>> test = __prepare('I aM a BOy','abCdeFghijkLmnopqrStuVwxYZ+')\r\n    >>> expected = ('IAMABOY','ABCDEFGHIJKLMNOPQRSTUVWXYZ+',\r\n    ... TEST_CHARACTER_TO_NUMBER, TEST_NUMBER_TO_CHARACTER)\r\n    >>> test == expected\r\n    True\r\n\r\n    Testing with incomplete alphabet\r\n\r\n    >>> __prepare('I aM a BOy','abCdeFghijkLmnopqrStuVw')\r\n    Traceback (most recent call last):\r\n        ...\r\n    KeyError: 'Length of alphabet has to be 27.'\r\n\r\n    Testing with extra long alphabets\r\n\r\n    >>> __prepare('I aM a BOy','abCdeFghijkLmnopqrStuVwxyzzwwtyyujjgfd')\r\n    Traceback (most recent call last):\r\n        ...\r\n    KeyError: 'Length of alphabet has to be 27.'\r\n\r\n    Testing with punctuation not in the given alphabet\r\n\r\n    >>> __prepare('am i a boy?','abCdeFghijkLmnopqrStuVwxYZ+')\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Each message character has to be included in alphabet!\r\n\r\n    Testing with numbers\r\n\r\n    >>> __prepare(500,'abCdeFghijkLmnopqrStuVwxYZ+')\r\n    Traceback (most recent call last):\r\n        ...\r\n    AttributeError: 'int' object has no attribute 'replace'\r\n    \"\"\"\r\n    # Validate message and alphabet, set to upper and remove spaces\r\n    alphabet = alphabet.replace(\" \", \"\").upper()\r\n    message = message.replace(\" \", \"\").upper()\r\n\r\n    # Check length and characters\r\n    if len(alphabet) != 27:\r\n        raise KeyError(\"Length of alphabet has to be 27.\")\r\n    if any(char not in alphabet for char in message):\r\n        raise ValueError(\"Each message character has to be included in alphabet!\")\r\n\r\n    # Generate dictionares\r\n    character_to_number = dict(zip(alphabet, TEST_CHARACTER_TO_NUMBER.values()))\r\n    number_to_character = {\r\n        number: letter for letter, number in character_to_number.items()\r\n    }\r\n\r\n    return message, alphabet, character_to_number, number_to_character\r\n\r\n\r\ndef encrypt_message(\r\n    message: str, alphabet: str = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ.\", period: int = 5\r\n) -> str:\r\n    \"\"\"\r\n    encrypt_message\r\n    ===============\r\n\r\n    Encrypts a message using the trifid_cipher. Any punctuatuion chars that\r\n    would be used should be added to the alphabet.\r\n\r\n    PARAMETERS\r\n    ----------\r\n\r\n    *   `message`: The message you want to encrypt.\r\n    *   `alphabet` (optional): The characters to be used for the cipher .\r\n    *   `period` (optional): The number of characters you want in a group whilst\r\n        encrypting.\r\n\r\n    >>> encrypt_message('I am a boy')\r\n    'BCDGBQY'\r\n\r\n    >>> encrypt_message(' ')\r\n    ''\r\n\r\n    >>> encrypt_message('   aide toi le c  iel      ta id  era    ',\r\n    ... 'FELIXMARDSTBCGHJKNOPQUVWYZ+',5)\r\n    'FMJFVOISSUFTFPUFEQQC'\r\n\r\n    \"\"\"\r\n    message, alphabet, character_to_number, number_to_character = __prepare(\r\n        message, alphabet\r\n    )\r\n\r\n    encrypted_numeric = \"\"\r\n    for i in range(0, len(message) + 1, period):\r\n        encrypted_numeric += __encrypt_part(\r\n            message[i : i + period], character_to_number\r\n        )\r\n\r\n    encrypted = \"\"\r\n    for i in range(0, len(encrypted_numeric), 3):\r\n        encrypted += number_to_character[encrypted_numeric[i : i + 3]]\r\n    return encrypted\r\n\r\n\r\ndef decrypt_message(\r\n    message: str, alphabet: str = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ.\", period: int = 5\r\n) -> str:\r\n    \"\"\"\r\n    decrypt_message\r\n    ===============\r\n\r\n    Decrypts a trifid_cipher encrypted message.\r\n\r\n    PARAMETERS\r\n    ----------\r\n\r\n    *   `message`: The message you want to decrypt.\r\n    *   `alphabet` (optional): The characters used for the cipher.\r\n    *   `period` (optional): The number of characters used in grouping when it\r\n        was encrypted.\r\n\r\n    >>> decrypt_message('BCDGBQY')\r\n    'IAMABOY'\r\n\r\n    Decrypting with your own alphabet and period\r\n\r\n    >>> decrypt_message('FMJFVOISSUFTFPUFEQQC','FELIXMARDSTBCGHJKNOPQUVWYZ+',5)\r\n    'AIDETOILECIELTAIDERA'\r\n    \"\"\"\r\n    message, alphabet, character_to_number, number_to_character = __prepare(\r\n        message, alphabet\r\n    )\r\n\r\n    decrypted_numeric = []\r\n    for i in range(0, len(message), period):\r\n        a, b, c = __decrypt_part(message[i : i + period], character_to_number)\r\n\r\n        for j in range(len(a)):\r\n            decrypted_numeric.append(a[j] + b[j] + c[j])\r\n\r\n    return \"\".join(number_to_character[each] for each in decrypted_numeric)\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n    msg = \"DEFEND THE EAST WALL OF THE CASTLE.\"\r\n    encrypted = encrypt_message(msg, \"EPSDUCVWYM.ZLKXNBTFGORIJHAQ\")\r\n    decrypted = decrypt_message(encrypted, \"EPSDUCVWYM.ZLKXNBTFGORIJHAQ\")\r\n    print(f\"Encrypted: {encrypted}\\nDecrypted: {decrypted}\")\r\n"
  },
  {
    "path": "ciphers/vernam_cipher.py",
    "content": "def vernam_encrypt(plaintext: str, key: str) -> str:\n    \"\"\"\n    >>> vernam_encrypt(\"HELLO\",\"KEY\")\n    'RIJVS'\n    \"\"\"\n    ciphertext = \"\"\n    for i in range(len(plaintext)):\n        ct = ord(key[i % len(key)]) - 65 + ord(plaintext[i]) - 65\n        while ct > 25:\n            ct = ct - 26\n        ciphertext += chr(65 + ct)\n    return ciphertext\n\n\ndef vernam_decrypt(ciphertext: str, key: str) -> str:\n    \"\"\"\n    >>> vernam_decrypt(\"RIJVS\",\"KEY\")\n    'HELLO'\n    \"\"\"\n    decrypted_text = \"\"\n    for i in range(len(ciphertext)):\n        ct = ord(ciphertext[i]) - ord(key[i % len(key)])\n        while ct < 0:\n            ct = 26 + ct\n        decrypted_text += chr(65 + ct)\n    return decrypted_text\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n\n    # Example usage\n    plaintext = \"HELLO\"\n    key = \"KEY\"\n    encrypted_text = vernam_encrypt(plaintext, key)\n    decrypted_text = vernam_decrypt(encrypted_text, key)\n    print(\"\\n\\n\")\n    print(\"Plaintext:\", plaintext)\n    print(\"Encrypted:\", encrypted_text)\n    print(\"Decrypted:\", decrypted_text)\n"
  },
  {
    "path": "ciphers/vigenere_cipher.py",
    "content": "LETTERS = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n\n\ndef main() -> None:\n    message = input(\"Enter message: \")\n    key = input(\"Enter key [alphanumeric]: \")\n    mode = input(\"Encrypt/Decrypt [e/d]: \")\n\n    if mode.lower().startswith(\"e\"):\n        mode = \"encrypt\"\n        translated = encrypt_message(key, message)\n    elif mode.lower().startswith(\"d\"):\n        mode = \"decrypt\"\n        translated = decrypt_message(key, message)\n\n    print(f\"\\n{mode.title()}ed message:\")\n    print(translated)\n\n\ndef encrypt_message(key: str, message: str) -> str:\n    \"\"\"\n    >>> encrypt_message('HDarji', 'This is Harshil Darji from Dharmaj.')\n    'Akij ra Odrjqqs Gaisq muod Mphumrs.'\n    \"\"\"\n    return translate_message(key, message, \"encrypt\")\n\n\ndef decrypt_message(key: str, message: str) -> str:\n    \"\"\"\n    >>> decrypt_message('HDarji', 'Akij ra Odrjqqs Gaisq muod Mphumrs.')\n    'This is Harshil Darji from Dharmaj.'\n    \"\"\"\n    return translate_message(key, message, \"decrypt\")\n\n\ndef translate_message(key: str, message: str, mode: str) -> str:\n    translated = []\n    key_index = 0\n    key = key.upper()\n\n    for symbol in message:\n        num = LETTERS.find(symbol.upper())\n        if num != -1:\n            if mode == \"encrypt\":\n                num += LETTERS.find(key[key_index])\n            elif mode == \"decrypt\":\n                num -= LETTERS.find(key[key_index])\n\n            num %= len(LETTERS)\n\n            if symbol.isupper():\n                translated.append(LETTERS[num])\n            elif symbol.islower():\n                translated.append(LETTERS[num].lower())\n\n            key_index += 1\n            if key_index == len(key):\n                key_index = 0\n        else:\n            translated.append(symbol)\n    return \"\".join(translated)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "ciphers/xor_cipher.py",
    "content": "\"\"\"\nauthor: Christian Bender\ndate: 21.12.2017\nclass: XORCipher\n\nThis class implements the XOR-cipher algorithm and provides\nsome useful methods for encrypting and decrypting strings and\nfiles.\n\nOverview about methods\n\n- encrypt : list of char\n- decrypt : list of char\n- encrypt_string : str\n- decrypt_string : str\n- encrypt_file : boolean\n- decrypt_file : boolean\n\"\"\"\n\nfrom __future__ import annotations\n\n\nclass XORCipher:\n    def __init__(self, key: int = 0):\n        \"\"\"\n        simple constructor that receives a key or uses\n        default key = 0\n        \"\"\"\n\n        # private field\n        self.__key = key\n\n    def encrypt(self, content: str, key: int) -> list[str]:\n        \"\"\"\n        input: 'content' of type string and 'key' of type int\n        output: encrypted string 'content' as a list of chars\n        if key not passed the method uses the key by the constructor.\n        otherwise key = 1\n\n        Empty list\n        >>> XORCipher().encrypt(\"\", 5)\n        []\n\n        One key\n        >>> XORCipher().encrypt(\"hallo welt\", 1)\n        ['i', '`', 'm', 'm', 'n', '!', 'v', 'd', 'm', 'u']\n\n        Normal key\n        >>> XORCipher().encrypt(\"HALLO WELT\", 32)\n        ['h', 'a', 'l', 'l', 'o', '\\\\x00', 'w', 'e', 'l', 't']\n\n        Key greater than 255\n        >>> XORCipher().encrypt(\"hallo welt\", 256)\n        ['h', 'a', 'l', 'l', 'o', ' ', 'w', 'e', 'l', 't']\n        \"\"\"\n\n        # precondition\n        assert isinstance(key, int)\n        assert isinstance(content, str)\n\n        key = key or self.__key or 1\n\n        # make sure key is an appropriate size\n        key %= 256\n\n        return [chr(ord(ch) ^ key) for ch in content]\n\n    def decrypt(self, content: str, key: int) -> list[str]:\n        \"\"\"\n        input: 'content' of type list and 'key' of type int\n        output: decrypted string 'content' as a list of chars\n        if key not passed the method uses the key by the constructor.\n        otherwise key = 1\n\n        Empty list\n        >>> XORCipher().decrypt(\"\", 5)\n        []\n\n        One key\n        >>> XORCipher().decrypt(\"hallo welt\", 1)\n        ['i', '`', 'm', 'm', 'n', '!', 'v', 'd', 'm', 'u']\n\n        Normal key\n        >>> XORCipher().decrypt(\"HALLO WELT\", 32)\n        ['h', 'a', 'l', 'l', 'o', '\\\\x00', 'w', 'e', 'l', 't']\n\n        Key greater than 255\n        >>> XORCipher().decrypt(\"hallo welt\", 256)\n        ['h', 'a', 'l', 'l', 'o', ' ', 'w', 'e', 'l', 't']\n        \"\"\"\n\n        # precondition\n        assert isinstance(key, int)\n        assert isinstance(content, str)\n\n        key = key or self.__key or 1\n\n        # make sure key is an appropriate size\n        key %= 256\n\n        return [chr(ord(ch) ^ key) for ch in content]\n\n    def encrypt_string(self, content: str, key: int = 0) -> str:\n        \"\"\"\n        input: 'content' of type string and 'key' of type int\n        output: encrypted string 'content'\n        if key not passed the method uses the key by the constructor.\n        otherwise key = 1\n\n        Empty list\n        >>> XORCipher().encrypt_string(\"\", 5)\n        ''\n\n        One key\n        >>> XORCipher().encrypt_string(\"hallo welt\", 1)\n        'i`mmn!vdmu'\n\n        Normal key\n        >>> XORCipher().encrypt_string(\"HALLO WELT\", 32)\n        'hallo\\\\x00welt'\n\n        Key greater than 255\n        >>> XORCipher().encrypt_string(\"hallo welt\", 256)\n        'hallo welt'\n        \"\"\"\n\n        # precondition\n        assert isinstance(key, int)\n        assert isinstance(content, str)\n\n        key = key or self.__key or 1\n\n        # make sure key is an appropriate size\n        key %= 256\n\n        # This will be returned\n        ans = \"\"\n\n        for ch in content:\n            ans += chr(ord(ch) ^ key)\n\n        return ans\n\n    def decrypt_string(self, content: str, key: int = 0) -> str:\n        \"\"\"\n        input: 'content' of type string and 'key' of type int\n        output: decrypted string 'content'\n        if key not passed the method uses the key by the constructor.\n        otherwise key = 1\n\n        Empty list\n        >>> XORCipher().decrypt_string(\"\", 5)\n        ''\n\n        One key\n        >>> XORCipher().decrypt_string(\"hallo welt\", 1)\n        'i`mmn!vdmu'\n\n        Normal key\n        >>> XORCipher().decrypt_string(\"HALLO WELT\", 32)\n        'hallo\\\\x00welt'\n\n        Key greater than 255\n        >>> XORCipher().decrypt_string(\"hallo welt\", 256)\n        'hallo welt'\n        \"\"\"\n\n        # precondition\n        assert isinstance(key, int)\n        assert isinstance(content, str)\n\n        key = key or self.__key or 1\n\n        # make sure key is an appropriate size\n        key %= 256\n\n        # This will be returned\n        ans = \"\"\n\n        for ch in content:\n            ans += chr(ord(ch) ^ key)\n\n        return ans\n\n    def encrypt_file(self, file: str, key: int = 0) -> bool:\n        \"\"\"\n        input: filename (str) and a key (int)\n        output: returns true if encrypt process was\n        successful otherwise false\n        if key not passed the method uses the key by the constructor.\n        otherwise key = 1\n        \"\"\"\n\n        # precondition\n        assert isinstance(file, str)\n        assert isinstance(key, int)\n\n        # make sure key is an appropriate size\n        key %= 256\n\n        try:\n            with open(file) as fin, open(\"encrypt.out\", \"w+\") as fout:\n                # actual encrypt-process\n                for line in fin:\n                    fout.write(self.encrypt_string(line, key))\n\n        except OSError:\n            return False\n\n        return True\n\n    def decrypt_file(self, file: str, key: int) -> bool:\n        \"\"\"\n        input: filename (str) and a key (int)\n        output: returns true if decrypt process was\n        successful otherwise false\n        if key not passed the method uses the key by the constructor.\n        otherwise key = 1\n        \"\"\"\n\n        # precondition\n        assert isinstance(file, str)\n        assert isinstance(key, int)\n\n        # make sure key is an appropriate size\n        key %= 256\n\n        try:\n            with open(file) as fin, open(\"decrypt.out\", \"w+\") as fout:\n                # actual encrypt-process\n                for line in fin:\n                    fout.write(self.decrypt_string(line, key))\n\n        except OSError:\n            return False\n\n        return True\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n\n# Tests\n# crypt = XORCipher()\n# key = 67\n\n# # test encrypt\n# print(crypt.encrypt(\"hallo welt\",key))\n# # test decrypt\n# print(crypt.decrypt(crypt.encrypt(\"hallo welt\",key), key))\n\n# # test encrypt_string\n# print(crypt.encrypt_string(\"hallo welt\",key))\n\n# # test decrypt_string\n# print(crypt.decrypt_string(crypt.encrypt_string(\"hallo welt\",key),key))\n\n# if (crypt.encrypt_file(\"test.txt\",key)):\n#       print(\"encrypt successful\")\n# else:\n#       print(\"encrypt unsuccessful\")\n\n# if (crypt.decrypt_file(\"encrypt.out\",key)):\n#       print(\"decrypt successful\")\n# else:\n#       print(\"decrypt unsuccessful\")\n"
  },
  {
    "path": "computer_vision/README.md",
    "content": "# Computer Vision\n\nComputer 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.\n\nIt is like imparting human intelligence and instincts to a computer.\nImage 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.\n\nWhile 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).\n\n* <https://en.wikipedia.org/wiki/Computer_vision>\n"
  },
  {
    "path": "computer_vision/__init__.py",
    "content": ""
  },
  {
    "path": "computer_vision/cnn_classification.py",
    "content": "\"\"\"\nConvolutional Neural Network\n\nObjective : To train a CNN model detect if TB is present in Lung X-ray or not.\n\nResources CNN Theory :\n    https://en.wikipedia.org/wiki/Convolutional_neural_network\nResources Tensorflow : https://www.tensorflow.org/tutorials/images/cnn\n\nDownload dataset from :\nhttps://lhncbc.nlm.nih.gov/LHC-publications/pubs/TuberculosisChestXrayImageDataSets.html\n\n1. Download the dataset folder and create two folder training set and test set\nin the parent dataset folder\n2. Move 30-40 image from both TB positive and TB Negative folder\nin the test set folder\n3. The labels of the images will be extracted from the folder name\nthe image is present in.\n\n\"\"\"\n\n# Part 1 - Building the CNN\n\nimport numpy as np\n\n# Importing the Keras libraries and packages\nimport tensorflow as tf\nfrom keras import layers, models\n\nif __name__ == \"__main__\":\n    # Initialising the CNN\n    # (Sequential- Building the model layer by layer)\n    classifier = models.Sequential()\n\n    # Step 1 - Convolution\n    # Here 64,64 is the length & breadth of dataset images and 3 is for the RGB channel\n    # (3,3) is the kernel size (filter matrix)\n    classifier.add(\n        layers.Conv2D(32, (3, 3), input_shape=(64, 64, 3), activation=\"relu\")\n    )\n\n    # Step 2 - Pooling\n    classifier.add(layers.MaxPooling2D(pool_size=(2, 2)))\n\n    # Adding a second convolutional layer\n    classifier.add(layers.Conv2D(32, (3, 3), activation=\"relu\"))\n    classifier.add(layers.MaxPooling2D(pool_size=(2, 2)))\n\n    # Step 3 - Flattening\n    classifier.add(layers.Flatten())\n\n    # Step 4 - Full connection\n    classifier.add(layers.Dense(units=128, activation=\"relu\"))\n    classifier.add(layers.Dense(units=1, activation=\"sigmoid\"))\n\n    # Compiling the CNN\n    classifier.compile(\n        optimizer=\"adam\", loss=\"binary_crossentropy\", metrics=[\"accuracy\"]\n    )\n\n    # Part 2 - Fitting the CNN to the images\n\n    # Load Trained model weights\n\n    # from keras.models import load_model\n    # regressor=load_model('cnn.h5')\n\n    train_datagen = tf.keras.preprocessing.image.ImageDataGenerator(\n        rescale=1.0 / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True\n    )\n\n    test_datagen = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1.0 / 255)\n\n    training_set = train_datagen.flow_from_directory(\n        \"dataset/training_set\", target_size=(64, 64), batch_size=32, class_mode=\"binary\"\n    )\n\n    test_set = test_datagen.flow_from_directory(\n        \"dataset/test_set\", target_size=(64, 64), batch_size=32, class_mode=\"binary\"\n    )\n\n    classifier.fit_generator(\n        training_set, steps_per_epoch=5, epochs=30, validation_data=test_set\n    )\n\n    classifier.save(\"cnn.h5\")\n\n    # Part 3 - Making new predictions\n\n    test_image = tf.keras.preprocessing.image.load_img(\n        \"dataset/single_prediction/image.png\", target_size=(64, 64)\n    )\n    test_image = tf.keras.preprocessing.image.img_to_array(test_image)\n    test_image = np.expand_dims(test_image, axis=0)\n    result = classifier.predict(test_image)\n    # training_set.class_indices\n    if result[0][0] == 0:\n        prediction = \"Normal\"\n    if result[0][0] == 1:\n        prediction = \"Abnormality detected\"\n"
  },
  {
    "path": "computer_vision/flip_augmentation.py",
    "content": "import glob\nimport os\nimport random\nfrom string import ascii_lowercase, digits\n\nimport cv2\n\n\"\"\"\nFlip image and bounding box for computer vision task\nhttps://paperswithcode.com/method/randomhorizontalflip\n\"\"\"\n\n# Params\nLABEL_DIR = \"\"\nIMAGE_DIR = \"\"\nOUTPUT_DIR = \"\"\nFLIP_TYPE = 1  # (0 is vertical, 1 is horizontal)\n\n\ndef main() -> None:\n    \"\"\"\n    Get images list and annotations list from input dir.\n    Update new images and annotations.\n    Save images and annotations in output dir.\n    \"\"\"\n    img_paths, annos = get_dataset(LABEL_DIR, IMAGE_DIR)\n    print(\"Processing...\")\n    new_images, new_annos, paths = update_image_and_anno(img_paths, annos, FLIP_TYPE)\n\n    for index, image in enumerate(new_images):\n        # Get random string code: '7b7ad245cdff75241935e4dd860f3bad'\n        letter_code = random_chars(32)\n        file_name = paths[index].split(os.sep)[-1].rsplit(\".\", 1)[0]\n        file_root = f\"{OUTPUT_DIR}/{file_name}_FLIP_{letter_code}\"\n        cv2.imwrite(f\"{file_root}.jpg\", image, [cv2.IMWRITE_JPEG_QUALITY, 85])\n        print(f\"Success {index + 1}/{len(new_images)} with {file_name}\")\n        annos_list = []\n        for anno in new_annos[index]:\n            obj = f\"{anno[0]} {anno[1]} {anno[2]} {anno[3]} {anno[4]}\"\n            annos_list.append(obj)\n        with open(f\"{file_root}.txt\", \"w\") as outfile:\n            outfile.write(\"\\n\".join(line for line in annos_list))\n\n\ndef get_dataset(label_dir: str, img_dir: str) -> tuple[list, list]:\n    \"\"\"\n    - label_dir <type: str>: Path to label include annotation of images\n    - img_dir <type: str>: Path to folder contain images\n    Return <type: list>: List of images path and labels\n    \"\"\"\n    img_paths = []\n    labels = []\n    for label_file in glob.glob(os.path.join(label_dir, \"*.txt\")):\n        label_name = label_file.split(os.sep)[-1].rsplit(\".\", 1)[0]\n        with open(label_file) as in_file:\n            obj_lists = in_file.readlines()\n        img_path = os.path.join(img_dir, f\"{label_name}.jpg\")\n\n        boxes = []\n        for obj_list in obj_lists:\n            obj = obj_list.rstrip(\"\\n\").split(\" \")\n            boxes.append(\n                [\n                    int(obj[0]),\n                    float(obj[1]),\n                    float(obj[2]),\n                    float(obj[3]),\n                    float(obj[4]),\n                ]\n            )\n        if not boxes:\n            continue\n        img_paths.append(img_path)\n        labels.append(boxes)\n    return img_paths, labels\n\n\ndef update_image_and_anno(\n    img_list: list, anno_list: list, flip_type: int = 1\n) -> tuple[list, list, list]:\n    \"\"\"\n    - img_list <type: list>: list of all images\n    - anno_list <type: list>: list of all annotations of specific image\n    - flip_type <type: int>: 0 is vertical, 1 is horizontal\n    Return:\n        - new_imgs_list <type: narray>: image after resize\n        - new_annos_lists <type: list>: list of new annotation after scale\n        - path_list <type: list>: list the name of image file\n    \"\"\"\n    new_annos_lists = []\n    path_list = []\n    new_imgs_list = []\n    for idx in range(len(img_list)):\n        new_annos = []\n        path = img_list[idx]\n        path_list.append(path)\n        img_annos = anno_list[idx]\n        img = cv2.imread(path)\n        if flip_type == 1:\n            new_img = cv2.flip(img, flip_type)\n            for bbox in img_annos:\n                x_center_new = 1 - bbox[1]\n                new_annos.append([bbox[0], x_center_new, bbox[2], bbox[3], bbox[4]])\n        elif flip_type == 0:\n            new_img = cv2.flip(img, flip_type)\n            for bbox in img_annos:\n                y_center_new = 1 - bbox[2]\n                new_annos.append([bbox[0], bbox[1], y_center_new, bbox[3], bbox[4]])\n        new_annos_lists.append(new_annos)\n        new_imgs_list.append(new_img)\n    return new_imgs_list, new_annos_lists, path_list\n\n\ndef random_chars(number_char: int = 32) -> str:\n    \"\"\"\n    Automatic generate random 32 characters.\n    Get random string code: '7b7ad245cdff75241935e4dd860f3bad'\n    >>> len(random_chars(32))\n    32\n    \"\"\"\n    assert number_char > 1, \"The number of character should greater than 1\"\n    letter_code = ascii_lowercase + digits\n    return \"\".join(random.choice(letter_code) for _ in range(number_char))\n\n\nif __name__ == \"__main__\":\n    main()\n    print(\"DONE ✅\")\n"
  },
  {
    "path": "computer_vision/haralick_descriptors.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/Image_texture\nhttps://en.wikipedia.org/wiki/Co-occurrence_matrix#Application_to_image_analysis\n\"\"\"\n\nimport imageio.v2 as imageio\nimport numpy as np\n\n\ndef root_mean_square_error(original: np.ndarray, reference: np.ndarray) -> float:\n    \"\"\"Simple implementation of Root Mean Squared Error\n    for two N dimensional numpy arrays.\n\n    Examples:\n        >>> root_mean_square_error(np.array([1, 2, 3]), np.array([1, 2, 3]))\n        0.0\n        >>> root_mean_square_error(np.array([1, 2, 3]), np.array([2, 2, 2]))\n        0.816496580927726\n        >>> root_mean_square_error(np.array([1, 2, 3]), np.array([6, 4, 2]))\n        3.1622776601683795\n    \"\"\"\n    return float(np.sqrt(((original - reference) ** 2).mean()))\n\n\ndef normalize_image(\n    image: np.ndarray, cap: float = 255.0, data_type: np.dtype = np.uint8\n) -> np.ndarray:\n    \"\"\"\n    Normalizes image in Numpy 2D array format, between ranges 0-cap,\n    as to fit uint8 type.\n\n    Args:\n        image: 2D numpy array representing image as matrix, with values in any range\n        cap: Maximum cap amount for normalization\n        data_type: numpy data type to set output variable to\n    Returns:\n        return 2D numpy array of type uint8, corresponding to limited range matrix\n\n    Examples:\n        >>> normalize_image(np.array([[1, 2, 3], [4, 5, 10]]),\n        ...                 cap=1.0, data_type=np.float64)\n        array([[0.        , 0.11111111, 0.22222222],\n               [0.33333333, 0.44444444, 1.        ]])\n        >>> normalize_image(np.array([[4, 4, 3], [1, 7, 2]]))\n        array([[127, 127,  85],\n               [  0, 255,  42]], dtype=uint8)\n    \"\"\"\n    normalized = (image - np.min(image)) / (np.max(image) - np.min(image)) * cap\n    return normalized.astype(data_type)\n\n\ndef normalize_array(array: np.ndarray, cap: float = 1) -> np.ndarray:\n    \"\"\"Normalizes a 1D array, between ranges 0-cap.\n\n    Args:\n        array: List containing values to be normalized between cap range.\n        cap: Maximum cap amount for normalization.\n    Returns:\n        return 1D numpy array, corresponding to limited range array\n\n    Examples:\n        >>> normalize_array(np.array([2, 3, 5, 7]))\n        array([0. , 0.2, 0.6, 1. ])\n        >>> normalize_array(np.array([[5], [7], [11], [13]]))\n        array([[0.  ],\n               [0.25],\n               [0.75],\n               [1.  ]])\n    \"\"\"\n    diff = np.max(array) - np.min(array)\n    return (array - np.min(array)) / (1 if diff == 0 else diff) * cap\n\n\ndef grayscale(image: np.ndarray) -> np.ndarray:\n    \"\"\"\n    Uses luminance weights to transform RGB channel to greyscale, by\n    taking the dot product between the channel and the weights.\n\n    Example:\n        >>> grayscale(np.array([[[108, 201, 72], [255, 11,  127]],\n        ...                     [[56,  56,  56], [128, 255, 107]]]))\n        array([[158,  97],\n               [ 56, 200]], dtype=uint8)\n    \"\"\"\n    return np.dot(image[:, :, 0:3], [0.299, 0.587, 0.114]).astype(np.uint8)\n\n\ndef binarize(image: np.ndarray, threshold: float = 127.0) -> np.ndarray:\n    \"\"\"\n    Binarizes a grayscale image based on a given threshold value,\n    setting values to 1 or 0 accordingly.\n\n    Examples:\n        >>> binarize(np.array([[128, 255], [101, 156]]))\n        array([[1, 1],\n               [0, 1]])\n        >>> binarize(np.array([[0.07, 1], [0.51, 0.3]]), threshold=0.5)\n        array([[0, 1],\n               [1, 0]])\n    \"\"\"\n    return np.where(image > threshold, 1, 0)\n\n\ndef transform(\n    image: np.ndarray, kind: str, kernel: np.ndarray | None = None\n) -> np.ndarray:\n    \"\"\"\n    Simple image transformation using one of two available filter functions:\n    Erosion and Dilation.\n\n    Args:\n        image: binarized input image, onto which to apply transformation\n        kind: Can be either 'erosion', in which case the :func:np.max\n              function is called, or 'dilation', when :func:np.min is used instead.\n        kernel: n x n kernel with shape < :attr:image.shape,\n              to be used when applying convolution to original image\n\n    Returns:\n        returns a numpy array with same shape as input image,\n        corresponding to applied binary transformation.\n\n    Examples:\n        >>> img = np.array([[1, 0.5], [0.2, 0.7]])\n        >>> img = binarize(img, threshold=0.5)\n        >>> transform(img, 'erosion')\n        array([[1, 1],\n               [1, 1]], dtype=uint8)\n        >>> transform(img, 'dilation')\n        array([[0, 0],\n               [0, 0]], dtype=uint8)\n    \"\"\"\n    if kernel is None:\n        kernel = np.ones((3, 3))\n\n    if kind == \"erosion\":\n        constant = 1\n        apply = np.max\n    else:\n        constant = 0\n        apply = np.min\n\n    center_x, center_y = (x // 2 for x in kernel.shape)\n\n    # Use padded image when applying convolution\n    # to not go out of bounds of the original the image\n    transformed = np.zeros(image.shape, dtype=np.uint8)\n    padded = np.pad(image, 1, \"constant\", constant_values=constant)\n\n    for x in range(center_x, padded.shape[0] - center_x):\n        for y in range(center_y, padded.shape[1] - center_y):\n            center = padded[\n                x - center_x : x + center_x + 1, y - center_y : y + center_y + 1\n            ]\n            # Apply transformation method to the centered section of the image\n            transformed[x - center_x, y - center_y] = apply(center[kernel == 1])\n\n    return transformed\n\n\ndef opening_filter(image: np.ndarray, kernel: np.ndarray | None = None) -> np.ndarray:\n    \"\"\"\n    Opening filter, defined as the sequence of\n    erosion and then a dilation filter on the same image.\n\n    Examples:\n        >>> img = np.array([[1, 0.5], [0.2, 0.7]])\n        >>> img = binarize(img, threshold=0.5)\n        >>> opening_filter(img)\n        array([[1, 1],\n               [1, 1]], dtype=uint8)\n    \"\"\"\n    if kernel is None:\n        np.ones((3, 3))\n\n    return transform(transform(image, \"dilation\", kernel), \"erosion\", kernel)\n\n\ndef closing_filter(image: np.ndarray, kernel: np.ndarray | None = None) -> np.ndarray:\n    \"\"\"\n    Opening filter, defined as the sequence of\n    dilation and then erosion filter on the same image.\n\n    Examples:\n        >>> img = np.array([[1, 0.5], [0.2, 0.7]])\n        >>> img = binarize(img, threshold=0.5)\n        >>> closing_filter(img)\n        array([[0, 0],\n               [0, 0]], dtype=uint8)\n    \"\"\"\n    if kernel is None:\n        kernel = np.ones((3, 3))\n    return transform(transform(image, \"erosion\", kernel), \"dilation\", kernel)\n\n\ndef binary_mask(\n    image_gray: np.ndarray, image_map: np.ndarray\n) -> tuple[np.ndarray, np.ndarray]:\n    \"\"\"\n    Apply binary mask, or thresholding based\n    on bit mask value (mapping mask is binary).\n\n    Returns the mapped true value mask and its complementary false value mask.\n\n    Example:\n        >>> img = np.array([[[108, 201, 72], [255, 11,  127]],\n        ...                 [[56,  56,  56], [128, 255, 107]]])\n        >>> gray = grayscale(img)\n        >>> binary = binarize(gray)\n        >>> morphological = opening_filter(binary)\n        >>> binary_mask(gray, morphological)\n        (array([[1, 1],\n               [1, 1]], dtype=uint8), array([[158,  97],\n               [ 56, 200]], dtype=uint8))\n    \"\"\"\n    true_mask, false_mask = image_gray.copy(), image_gray.copy()\n    true_mask[image_map == 1] = 1\n    false_mask[image_map == 0] = 0\n\n    return true_mask, false_mask\n\n\ndef matrix_concurrency(image: np.ndarray, coordinate: tuple[int, int]) -> np.ndarray:\n    \"\"\"\n    Calculate sample co-occurrence matrix based on input image\n    as well as selected coordinates on image.\n\n    Implementation is made using basic iteration,\n    as function to be performed (np.max) is non-linear and therefore\n    not callable on the frequency domain.\n\n    Example:\n        >>> img = np.array([[[108, 201, 72], [255, 11,  127]],\n        ...                 [[56,  56,  56], [128, 255, 107]]])\n        >>> gray = grayscale(img)\n        >>> binary = binarize(gray)\n        >>> morphological = opening_filter(binary)\n        >>> mask_1 = binary_mask(gray, morphological)[0]\n        >>> matrix_concurrency(mask_1, (0, 1))\n        array([[0., 0.],\n               [0., 0.]])\n    \"\"\"\n    matrix = np.zeros([np.max(image) + 1, np.max(image) + 1])\n\n    offset_x, offset_y = coordinate\n\n    for x in range(1, image.shape[0] - 1):\n        for y in range(1, image.shape[1] - 1):\n            base_pixel = image[x, y]\n            offset_pixel = image[x + offset_x, y + offset_y]\n\n            matrix[base_pixel, offset_pixel] += 1\n    matrix_sum = np.sum(matrix)\n    return matrix / (1 if matrix_sum == 0 else matrix_sum)\n\n\ndef haralick_descriptors(matrix: np.ndarray) -> list[float]:\n    \"\"\"Calculates all 8 Haralick descriptors based on co-occurrence input matrix.\n    All descriptors are as follows:\n    Maximum probability, Inverse Difference, Homogeneity, Entropy,\n    Energy, Dissimilarity, Contrast and Correlation\n\n    Args:\n        matrix: Co-occurrence matrix to use as base for calculating descriptors.\n\n    Returns:\n        Reverse ordered list of resulting descriptors\n\n    Example:\n        >>> img = np.array([[[108, 201, 72], [255, 11,  127]],\n        ...                 [[56,  56,  56], [128, 255, 107]]])\n        >>> gray = grayscale(img)\n        >>> binary = binarize(gray)\n        >>> morphological = opening_filter(binary)\n        >>> mask_1 = binary_mask(gray, morphological)[0]\n        >>> concurrency = matrix_concurrency(mask_1, (0, 1))\n        >>> [float(f) for f in haralick_descriptors(concurrency)]\n        [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]\n    \"\"\"\n    # Function np.indices could be used for bigger input types,\n    # but np.ogrid works just fine\n    i, j = np.ogrid[0 : matrix.shape[0], 0 : matrix.shape[1]]  # np.indices()\n\n    # Pre-calculate frequent multiplication and subtraction\n    prod = np.multiply(i, j)\n    sub = np.subtract(i, j)\n\n    # Calculate numerical value of Maximum Probability\n    maximum_prob = np.max(matrix)\n    # Using the definition for each descriptor individually to calculate its matrix\n    correlation = prod * matrix\n    energy = np.power(matrix, 2)\n    contrast = matrix * np.power(sub, 2)\n\n    dissimilarity = matrix * np.abs(sub)\n    inverse_difference = matrix / (1 + np.abs(sub))\n    homogeneity = matrix / (1 + np.power(sub, 2))\n    entropy = -(matrix[matrix > 0] * np.log(matrix[matrix > 0]))\n\n    # Sum values for descriptors ranging from the first one to the last,\n    # as all are their respective origin matrix and not the resulting value yet.\n    return [\n        maximum_prob,\n        correlation.sum(),\n        energy.sum(),\n        contrast.sum(),\n        dissimilarity.sum(),\n        inverse_difference.sum(),\n        homogeneity.sum(),\n        entropy.sum(),\n    ]\n\n\ndef get_descriptors(\n    masks: tuple[np.ndarray, np.ndarray], coordinate: tuple[int, int]\n) -> np.ndarray:\n    \"\"\"\n    Calculate all Haralick descriptors for a sequence of\n    different co-occurrence matrices, given input masks and coordinates.\n\n    Example:\n        >>> img = np.array([[[108, 201, 72], [255, 11,  127]],\n        ...                 [[56,  56,  56], [128, 255, 107]]])\n        >>> gray = grayscale(img)\n        >>> binary = binarize(gray)\n        >>> morphological = opening_filter(binary)\n        >>> get_descriptors(binary_mask(gray, morphological), (0, 1))\n        array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n    \"\"\"\n    descriptors = np.array(\n        [haralick_descriptors(matrix_concurrency(mask, coordinate)) for mask in masks]\n    )\n\n    # Concatenate each individual descriptor into\n    # one single list containing sequence of descriptors\n    return np.concatenate(descriptors, axis=None)\n\n\ndef euclidean(point_1: np.ndarray, point_2: np.ndarray) -> float:\n    \"\"\"\n    Simple method for calculating the euclidean distance between two points,\n    with type np.ndarray.\n\n    Example:\n        >>> a = np.array([1, 0, -2])\n        >>> b = np.array([2, -1, 1])\n        >>> euclidean(a, b)\n        3.3166247903554\n    \"\"\"\n    return float(np.sqrt(np.sum(np.square(point_1 - point_2))))\n\n\ndef get_distances(descriptors: np.ndarray, base: int) -> list[tuple[int, float]]:\n    \"\"\"\n    Calculate all Euclidean distances between a selected base descriptor\n    and all other Haralick descriptors\n    The resulting comparison is return in decreasing order,\n    showing which descriptor is the most similar to the selected base.\n\n    Args:\n        descriptors: Haralick descriptors to compare with base index\n        base: Haralick descriptor index to use as base when calculating respective\n        euclidean distance to other descriptors.\n\n    Returns:\n        Ordered distances between descriptors\n\n    Example:\n        >>> index = 1\n        >>> img = np.array([[[108, 201, 72], [255, 11,  127]],\n        ...                 [[56,  56,  56], [128, 255, 107]]])\n        >>> gray = grayscale(img)\n        >>> binary = binarize(gray)\n        >>> morphological = opening_filter(binary)\n        >>> get_distances(get_descriptors(\n        ...                 binary_mask(gray, morphological), (0, 1)),\n        ...               index)\n        [(0, 0.0), (1, 0.0), (2, 0.0), (3, 0.0), (4, 0.0), (5, 0.0), \\\n(6, 0.0), (7, 0.0), (8, 0.0), (9, 0.0), (10, 0.0), (11, 0.0), (12, 0.0), \\\n(13, 0.0), (14, 0.0), (15, 0.0)]\n    \"\"\"\n    distances = np.array(\n        [euclidean(descriptor, descriptors[base]) for descriptor in descriptors]\n    )\n    # Normalize distances between range [0, 1]\n    normalized_distances: list[float] = normalize_array(distances, 1).tolist()\n    enum_distances = list(enumerate(normalized_distances))\n    enum_distances.sort(key=lambda tup: tup[1], reverse=True)\n    return enum_distances\n\n\nif __name__ == \"__main__\":\n    # Index to compare haralick descriptors to\n    index = int(input())\n    q_value_list = [int(value) for value in input().split()]\n    q_value = (q_value_list[0], q_value_list[1])\n\n    # Format is the respective filter to apply,\n    # can be either 1 for the opening filter or else for the closing\n    parameters = {\"format\": int(input()), \"threshold\": int(input())}\n\n    # Number of images to perform methods on\n    b_number = int(input())\n\n    files, descriptors = [], []\n\n    for _ in range(b_number):\n        file = input().rstrip()\n        files.append(file)\n\n        # Open given image and calculate morphological filter,\n        # respective masks and correspondent Harralick Descriptors.\n        image = imageio.imread(file).astype(np.float32)\n        gray = grayscale(image)\n        threshold = binarize(gray, parameters[\"threshold\"])\n\n        morphological = (\n            opening_filter(threshold)\n            if parameters[\"format\"] == 1\n            else closing_filter(threshold)\n        )\n        masks = binary_mask(gray, morphological)\n        descriptors.append(get_descriptors(masks, q_value))\n\n    # Transform ordered distances array into a sequence of indexes\n    # corresponding to original file position\n    distances = get_distances(np.array(descriptors), index)\n    indexed_distances = np.array(distances).astype(np.uint8)[:, 0]\n\n    # Finally, print distances considering the Haralick descriptions from the base\n    # file to all other images using the morphology method of choice.\n    print(f\"Query: {files[index]}\")\n    print(\"Ranking:\")\n    for idx, file_idx in enumerate(indexed_distances):\n        print(f\"({idx}) {files[file_idx]}\", end=\"\\n\")\n"
  },
  {
    "path": "computer_vision/harris_corner.py",
    "content": "import cv2\nimport numpy as np\n\n\"\"\"\nHarris Corner Detector\nhttps://en.wikipedia.org/wiki/Harris_Corner_Detector\n\"\"\"\n\n\nclass HarrisCorner:\n    def __init__(self, k: float, window_size: int):\n        \"\"\"\n        k : is an empirically determined constant in [0.04,0.06]\n        window_size : neighbourhoods considered\n        \"\"\"\n\n        if k in (0.04, 0.06):\n            self.k = k\n            self.window_size = window_size\n        else:\n            raise ValueError(\"invalid k value\")\n\n    def __str__(self) -> str:\n        return str(self.k)\n\n    def detect(self, img_path: str) -> tuple[cv2.Mat, list[list[int]]]:\n        \"\"\"\n        Returns the image with corners identified\n        img_path  : path of the image\n        output : list of the corner positions, image\n        \"\"\"\n\n        img = cv2.imread(img_path, 0)\n        h, w = img.shape\n        corner_list: list[list[int]] = []\n        color_img = img.copy()\n        color_img = cv2.cvtColor(color_img, cv2.COLOR_GRAY2RGB)\n        dy, dx = np.gradient(img)\n        ixx = dx**2\n        iyy = dy**2\n        ixy = dx * dy\n        k = 0.04\n        offset = self.window_size // 2\n        for y in range(offset, h - offset):\n            for x in range(offset, w - offset):\n                wxx = ixx[\n                    y - offset : y + offset + 1, x - offset : x + offset + 1\n                ].sum()\n                wyy = iyy[\n                    y - offset : y + offset + 1, x - offset : x + offset + 1\n                ].sum()\n                wxy = ixy[\n                    y - offset : y + offset + 1, x - offset : x + offset + 1\n                ].sum()\n\n                det = (wxx * wyy) - (wxy**2)\n                trace = wxx + wyy\n                r = det - k * (trace**2)\n                # Can change the value\n                if r > 0.5:\n                    corner_list.append([x, y, r])\n                    color_img.itemset((y, x, 0), 0)\n                    color_img.itemset((y, x, 1), 0)\n                    color_img.itemset((y, x, 2), 255)\n        return color_img, corner_list\n\n\nif __name__ == \"__main__\":\n    edge_detect = HarrisCorner(0.04, 3)\n    color_img, _ = edge_detect.detect(\"path_to_image\")\n    cv2.imwrite(\"detect.png\", color_img)\n"
  },
  {
    "path": "computer_vision/horn_schunck.py",
    "content": "\"\"\"\nThe Horn-Schunck method estimates the optical flow for every single pixel of\na sequence of images.\nIt works by assuming brightness constancy between two consecutive frames\nand smoothness in the optical flow.\n\nUseful resources:\nWikipedia: https://en.wikipedia.org/wiki/Horn%E2%80%93Schunck_method\nPaper: http://image.diku.dk/imagecanon/material/HornSchunckOptical_Flow.pdf\n\"\"\"\n\nfrom typing import SupportsIndex\n\nimport numpy as np\nfrom scipy.ndimage import convolve\n\n\ndef warp(\n    image: np.ndarray, horizontal_flow: np.ndarray, vertical_flow: np.ndarray\n) -> np.ndarray:\n    \"\"\"\n    Warps the pixels of an image into a new image using the horizontal and vertical\n    flows.\n    Pixels that are warped from an invalid location are set to 0.\n\n    Parameters:\n        image: Grayscale image\n        horizontal_flow: Horizontal flow\n        vertical_flow: Vertical flow\n\n    Returns: Warped image\n\n    >>> warp(np.array([[0, 1, 2], [0, 3, 0], [2, 2, 2]]), \\\n    np.array([[0, 1, -1], [-1, 0, 0], [1, 1, 1]]), \\\n    np.array([[0, 0, 0], [0, 1, 0], [0, 0, 1]]))\n    array([[0, 0, 0],\n           [3, 1, 0],\n           [0, 2, 3]])\n    \"\"\"\n    flow = np.stack((horizontal_flow, vertical_flow), 2)\n\n    # Create a grid of all pixel coordinates and subtract the flow to get the\n    # target pixels coordinates\n    grid = np.stack(\n        np.meshgrid(np.arange(0, image.shape[1]), np.arange(0, image.shape[0])), 2\n    )\n    grid = np.round(grid - flow).astype(np.int32)\n\n    # Find the locations outside of the original image\n    invalid = (grid < 0) | (grid >= np.array([image.shape[1], image.shape[0]]))\n    grid[invalid] = 0\n\n    warped = image[grid[:, :, 1], grid[:, :, 0]]\n\n    # Set pixels at invalid locations to 0\n    warped[invalid[:, :, 0] | invalid[:, :, 1]] = 0\n\n    return warped\n\n\ndef horn_schunck(\n    image0: np.ndarray,\n    image1: np.ndarray,\n    num_iter: SupportsIndex,\n    alpha: float | None = None,\n) -> tuple[np.ndarray, np.ndarray]:\n    \"\"\"\n    This function performs the Horn-Schunck algorithm and returns the estimated\n    optical flow. It is assumed that the input images are grayscale and\n    normalized to be in [0, 1].\n\n    Parameters:\n        image0: First image of the sequence\n        image1: Second image of the sequence\n        alpha: Regularization constant\n        num_iter: Number of iterations performed\n\n    Returns: estimated horizontal & vertical flow\n\n    >>> np.round(horn_schunck(np.array([[0, 0, 2], [0, 0, 2]]), \\\n    np.array([[0, 2, 0], [0, 2, 0]]), alpha=0.1, num_iter=110)).\\\n    astype(np.int32)\n    array([[[ 0, -1, -1],\n            [ 0, -1, -1]],\n    <BLANKLINE>\n           [[ 0,  0,  0],\n            [ 0,  0,  0]]], dtype=int32)\n    \"\"\"\n    if alpha is None:\n        alpha = 0.1\n\n    # Initialize flow\n    horizontal_flow = np.zeros_like(image0)\n    vertical_flow = np.zeros_like(image0)\n\n    # Prepare kernels for the calculation of the derivatives and the average velocity\n    kernel_x = np.array([[-1, 1], [-1, 1]]) * 0.25\n    kernel_y = np.array([[-1, -1], [1, 1]]) * 0.25\n    kernel_t = np.array([[1, 1], [1, 1]]) * 0.25\n    kernel_laplacian = np.array(\n        [[1 / 12, 1 / 6, 1 / 12], [1 / 6, 0, 1 / 6], [1 / 12, 1 / 6, 1 / 12]]\n    )\n\n    # Iteratively refine the flow\n    for _ in range(num_iter):\n        warped_image = warp(image0, horizontal_flow, vertical_flow)\n        derivative_x = convolve(warped_image, kernel_x) + convolve(image1, kernel_x)\n        derivative_y = convolve(warped_image, kernel_y) + convolve(image1, kernel_y)\n        derivative_t = convolve(warped_image, kernel_t) + convolve(image1, -kernel_t)\n\n        avg_horizontal_velocity = convolve(horizontal_flow, kernel_laplacian)\n        avg_vertical_velocity = convolve(vertical_flow, kernel_laplacian)\n\n        # This updates the flow as proposed in the paper (Step 12)\n        update = (\n            derivative_x * avg_horizontal_velocity\n            + derivative_y * avg_vertical_velocity\n            + derivative_t\n        )\n        update = update / (alpha**2 + derivative_x**2 + derivative_y**2)\n\n        horizontal_flow = avg_horizontal_velocity - derivative_x * update\n        vertical_flow = avg_vertical_velocity - derivative_y * update\n\n    return horizontal_flow, vertical_flow\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "computer_vision/intensity_based_segmentation.py",
    "content": "# Source: \"https://www.ijcse.com/docs/IJCSE11-02-03-117.pdf\"\r\n\r\n# Importing necessary libraries\r\nimport matplotlib.pyplot as plt\r\nimport numpy as np\r\nfrom PIL import Image\r\n\r\n\r\ndef segment_image(image: np.ndarray, thresholds: list[int]) -> np.ndarray:\r\n    \"\"\"\r\n    Performs image segmentation based on intensity thresholds.\r\n\r\n    Args:\r\n        image: Input grayscale image as a 2D array.\r\n        thresholds: Intensity thresholds to define segments.\r\n\r\n    Returns:\r\n        A labeled 2D array where each region corresponds to a threshold range.\r\n\r\n    Example:\r\n        >>> img = np.array([[80, 120, 180], [40, 90, 150], [20, 60, 100]])\r\n        >>> segment_image(img, [50, 100, 150])\r\n        array([[1, 2, 3],\r\n               [0, 1, 2],\r\n               [0, 1, 1]], dtype=int32)\r\n    \"\"\"\r\n    # Initialize segmented array with zeros\r\n    segmented = np.zeros_like(image, dtype=np.int32)\r\n\r\n    # Assign labels based on thresholds\r\n    for i, threshold in enumerate(thresholds):\r\n        segmented[image > threshold] = i + 1\r\n\r\n    return segmented\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    # Load the image\r\n    image_path = \"path_to_image\"  # Replace with your image path\r\n    original_image = Image.open(image_path).convert(\"L\")\r\n    image_array = np.array(original_image)\r\n\r\n    # Define thresholds\r\n    thresholds = [50, 100, 150, 200]\r\n\r\n    # Perform segmentation\r\n    segmented_image = segment_image(image_array, thresholds)\r\n\r\n    # Display the results\r\n    plt.figure(figsize=(10, 5))\r\n\r\n    plt.subplot(1, 2, 1)\r\n    plt.title(\"Original Image\")\r\n    plt.imshow(image_array, cmap=\"gray\")\r\n    plt.axis(\"off\")\r\n\r\n    plt.subplot(1, 2, 2)\r\n    plt.title(\"Segmented Image\")\r\n    plt.imshow(segmented_image, cmap=\"tab20\")\r\n    plt.axis(\"off\")\r\n\r\n    plt.show()\r\n"
  },
  {
    "path": "computer_vision/mean_threshold.py",
    "content": "from PIL import Image\n\n\"\"\"\nMean thresholding algorithm for image processing\nhttps://en.wikipedia.org/wiki/Thresholding_(image_processing)\n\"\"\"\n\n\ndef mean_threshold(image: Image) -> Image:\n    \"\"\"\n    image: is a grayscale PIL image object\n    \"\"\"\n    height, width = image.size\n    mean = 0\n    pixels = image.load()\n    for i in range(width):\n        for j in range(height):\n            pixel = pixels[j, i]\n            mean += pixel\n    mean //= width * height\n\n    for j in range(width):\n        for i in range(height):\n            pixels[i, j] = 255 if pixels[i, j] > mean else 0\n    return image\n\n\nif __name__ == \"__main__\":\n    image = mean_threshold(Image.open(\"path_to_image\").convert(\"L\"))\n    image.save(\"output_image_path\")\n"
  },
  {
    "path": "computer_vision/mosaic_augmentation.py",
    "content": "\"\"\"Source: https://github.com/jason9075/opencv-mosaic-data-aug\"\"\"\n\nimport glob\nimport os\nimport random\nfrom string import ascii_lowercase, digits\n\nimport cv2\nimport numpy as np\n\n# Parameters\nOUTPUT_SIZE = (720, 1280)  # Height, Width\nSCALE_RANGE = (0.4, 0.6)  # if height or width lower than this scale, drop it.\nFILTER_TINY_SCALE = 1 / 100\nLABEL_DIR = \"\"\nIMG_DIR = \"\"\nOUTPUT_DIR = \"\"\nNUMBER_IMAGES = 250\n\n\ndef main() -> None:\n    \"\"\"\n    Get images list and annotations list from input dir.\n    Update new images and annotations.\n    Save images and annotations in output dir.\n    \"\"\"\n    img_paths, annos = get_dataset(LABEL_DIR, IMG_DIR)\n    for index in range(NUMBER_IMAGES):\n        idxs = random.sample(range(len(annos)), 4)\n        new_image, new_annos, path = update_image_and_anno(\n            img_paths,\n            annos,\n            idxs,\n            OUTPUT_SIZE,\n            SCALE_RANGE,\n            filter_scale=FILTER_TINY_SCALE,\n        )\n\n        # Get random string code: '7b7ad245cdff75241935e4dd860f3bad'\n        letter_code = random_chars(32)\n        file_name = path.split(os.sep)[-1].rsplit(\".\", 1)[0]\n        file_root = f\"{OUTPUT_DIR}/{file_name}_MOSAIC_{letter_code}\"\n        cv2.imwrite(f\"{file_root}.jpg\", new_image, [cv2.IMWRITE_JPEG_QUALITY, 85])\n        print(f\"Succeeded {index + 1}/{NUMBER_IMAGES} with {file_name}\")\n        annos_list = []\n        for anno in new_annos:\n            width = anno[3] - anno[1]\n            height = anno[4] - anno[2]\n            x_center = anno[1] + width / 2\n            y_center = anno[2] + height / 2\n            obj = f\"{anno[0]} {x_center} {y_center} {width} {height}\"\n            annos_list.append(obj)\n        with open(f\"{file_root}.txt\", \"w\") as outfile:\n            outfile.write(\"\\n\".join(line for line in annos_list))\n\n\ndef get_dataset(label_dir: str, img_dir: str) -> tuple[list, list]:\n    \"\"\"\n    - label_dir <type: str>: Path to label include annotation of images\n    - img_dir <type: str>: Path to folder contain images\n    Return <type: list>: List of images path and labels\n    \"\"\"\n    img_paths = []\n    labels = []\n    for label_file in glob.glob(os.path.join(label_dir, \"*.txt\")):\n        label_name = label_file.split(os.sep)[-1].rsplit(\".\", 1)[0]\n        with open(label_file) as in_file:\n            obj_lists = in_file.readlines()\n        img_path = os.path.join(img_dir, f\"{label_name}.jpg\")\n\n        boxes = []\n        for obj_list in obj_lists:\n            obj = obj_list.rstrip(\"\\n\").split(\" \")\n            xmin = float(obj[1]) - float(obj[3]) / 2\n            ymin = float(obj[2]) - float(obj[4]) / 2\n            xmax = float(obj[1]) + float(obj[3]) / 2\n            ymax = float(obj[2]) + float(obj[4]) / 2\n\n            boxes.append([int(obj[0]), xmin, ymin, xmax, ymax])\n        if not boxes:\n            continue\n        img_paths.append(img_path)\n        labels.append(boxes)\n    return img_paths, labels\n\n\ndef update_image_and_anno(\n    all_img_list: list,\n    all_annos: list,\n    idxs: list[int],\n    output_size: tuple[int, int],\n    scale_range: tuple[float, float],\n    filter_scale: float = 0.0,\n) -> tuple[list, list, str]:\n    \"\"\"\n    - all_img_list <type: list>: list of all images\n    - all_annos <type: list>: list of all annotations of specific image\n    - idxs <type: list>: index of image in list\n    - output_size <type: tuple>: size of output image (Height, Width)\n    - scale_range <type: tuple>: range of scale image\n    - filter_scale <type: float>: the condition of downscale image and bounding box\n    Return:\n        - output_img <type: narray>: image after resize\n        - new_anno <type: list>: list of new annotation after scale\n        - path[0] <type: string>: get the name of image file\n    \"\"\"\n    output_img = np.zeros([output_size[0], output_size[1], 3], dtype=np.uint8)\n    scale_x = scale_range[0] + random.random() * (scale_range[1] - scale_range[0])\n    scale_y = scale_range[0] + random.random() * (scale_range[1] - scale_range[0])\n    divid_point_x = int(scale_x * output_size[1])\n    divid_point_y = int(scale_y * output_size[0])\n\n    new_anno = []\n    path_list = []\n    for i, index in enumerate(idxs):\n        path = all_img_list[index]\n        path_list.append(path)\n        img_annos = all_annos[index]\n        img = cv2.imread(path)\n        if i == 0:  # top-left\n            img = cv2.resize(img, (divid_point_x, divid_point_y))\n            output_img[:divid_point_y, :divid_point_x, :] = img\n            for bbox in img_annos:\n                xmin = bbox[1] * scale_x\n                ymin = bbox[2] * scale_y\n                xmax = bbox[3] * scale_x\n                ymax = bbox[4] * scale_y\n                new_anno.append([bbox[0], xmin, ymin, xmax, ymax])\n        elif i == 1:  # top-right\n            img = cv2.resize(img, (output_size[1] - divid_point_x, divid_point_y))\n            output_img[:divid_point_y, divid_point_x : output_size[1], :] = img\n            for bbox in img_annos:\n                xmin = scale_x + bbox[1] * (1 - scale_x)\n                ymin = bbox[2] * scale_y\n                xmax = scale_x + bbox[3] * (1 - scale_x)\n                ymax = bbox[4] * scale_y\n                new_anno.append([bbox[0], xmin, ymin, xmax, ymax])\n        elif i == 2:  # bottom-left\n            img = cv2.resize(img, (divid_point_x, output_size[0] - divid_point_y))\n            output_img[divid_point_y : output_size[0], :divid_point_x, :] = img\n            for bbox in img_annos:\n                xmin = bbox[1] * scale_x\n                ymin = scale_y + bbox[2] * (1 - scale_y)\n                xmax = bbox[3] * scale_x\n                ymax = scale_y + bbox[4] * (1 - scale_y)\n                new_anno.append([bbox[0], xmin, ymin, xmax, ymax])\n        else:  # bottom-right\n            img = cv2.resize(\n                img, (output_size[1] - divid_point_x, output_size[0] - divid_point_y)\n            )\n            output_img[\n                divid_point_y : output_size[0], divid_point_x : output_size[1], :\n            ] = img\n            for bbox in img_annos:\n                xmin = scale_x + bbox[1] * (1 - scale_x)\n                ymin = scale_y + bbox[2] * (1 - scale_y)\n                xmax = scale_x + bbox[3] * (1 - scale_x)\n                ymax = scale_y + bbox[4] * (1 - scale_y)\n                new_anno.append([bbox[0], xmin, ymin, xmax, ymax])\n\n    # Remove bounding box small than scale of filter\n    if filter_scale > 0:\n        new_anno = [\n            anno\n            for anno in new_anno\n            if filter_scale < (anno[3] - anno[1]) and filter_scale < (anno[4] - anno[2])\n        ]\n\n    return output_img, new_anno, path_list[0]\n\n\ndef random_chars(number_char: int) -> str:\n    \"\"\"\n    Automatic generate random 32 characters.\n    Get random string code: '7b7ad245cdff75241935e4dd860f3bad'\n    >>> len(random_chars(32))\n    32\n    \"\"\"\n    assert number_char > 1, \"The number of character should greater than 1\"\n    letter_code = ascii_lowercase + digits\n    return \"\".join(random.choice(letter_code) for _ in range(number_char))\n\n\nif __name__ == \"__main__\":\n    main()\n    print(\"DONE ✅\")\n"
  },
  {
    "path": "computer_vision/pooling_functions.py",
    "content": "# Source : https://computersciencewiki.org/index.php/Max-pooling_/_Pooling\n# Importing the libraries\nimport numpy as np\nfrom PIL import Image\n\n\n# Maxpooling Function\ndef maxpooling(arr: np.ndarray, size: int, stride: int) -> np.ndarray:\n    \"\"\"\n    This function is used to perform maxpooling on the input array of 2D matrix(image)\n    Args:\n        arr: numpy array\n        size: size of pooling matrix\n        stride: the number of pixels shifts over the input matrix\n    Returns:\n        numpy array of maxpooled matrix\n    Sample Input Output:\n    >>> maxpooling([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]], 2, 2)\n    array([[ 6.,  8.],\n           [14., 16.]])\n    >>> maxpooling([[147, 180, 122],[241, 76, 32],[126, 13, 157]], 2, 1)\n    array([[241., 180.],\n           [241., 157.]])\n    \"\"\"\n    arr = np.array(arr)\n    if arr.shape[0] != arr.shape[1]:\n        raise ValueError(\"The input array is not a square matrix\")\n    i = 0\n    j = 0\n    mat_i = 0\n    mat_j = 0\n\n    # compute the shape of the output matrix\n    maxpool_shape = (arr.shape[0] - size) // stride + 1\n    # initialize the output matrix with zeros of shape maxpool_shape\n    updated_arr = np.zeros((maxpool_shape, maxpool_shape))\n\n    while i < arr.shape[0]:\n        if i + size > arr.shape[0]:\n            # if the end of the matrix is reached, break\n            break\n        while j < arr.shape[1]:\n            # if the end of the matrix is reached, break\n            if j + size > arr.shape[1]:\n                break\n            # compute the maximum of the pooling matrix\n            updated_arr[mat_i][mat_j] = np.max(arr[i : i + size, j : j + size])\n            # shift the pooling matrix by stride of column pixels\n            j += stride\n            mat_j += 1\n\n        # shift the pooling matrix by stride of row pixels\n        i += stride\n        mat_i += 1\n\n        # reset the column index to 0\n        j = 0\n        mat_j = 0\n\n    return updated_arr\n\n\n# Averagepooling Function\ndef avgpooling(arr: np.ndarray, size: int, stride: int) -> np.ndarray:\n    \"\"\"\n    This function is used to perform avgpooling on the input array of 2D matrix(image)\n    Args:\n        arr: numpy array\n        size: size of pooling matrix\n        stride: the number of pixels shifts over the input matrix\n    Returns:\n        numpy array of avgpooled matrix\n    Sample Input Output:\n    >>> avgpooling([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]], 2, 2)\n    array([[ 3.,  5.],\n           [11., 13.]])\n    >>> avgpooling([[147, 180, 122],[241, 76, 32],[126, 13, 157]], 2, 1)\n    array([[161., 102.],\n           [114.,  69.]])\n    \"\"\"\n    arr = np.array(arr)\n    if arr.shape[0] != arr.shape[1]:\n        raise ValueError(\"The input array is not a square matrix\")\n    i = 0\n    j = 0\n    mat_i = 0\n    mat_j = 0\n\n    # compute the shape of the output matrix\n    avgpool_shape = (arr.shape[0] - size) // stride + 1\n    # initialize the output matrix with zeros of shape avgpool_shape\n    updated_arr = np.zeros((avgpool_shape, avgpool_shape))\n\n    while i < arr.shape[0]:\n        # if the end of the matrix is reached, break\n        if i + size > arr.shape[0]:\n            break\n        while j < arr.shape[1]:\n            # if the end of the matrix is reached, break\n            if j + size > arr.shape[1]:\n                break\n            # compute the average of the pooling matrix\n            updated_arr[mat_i][mat_j] = int(np.average(arr[i : i + size, j : j + size]))\n            # shift the pooling matrix by stride of column pixels\n            j += stride\n            mat_j += 1\n\n        # shift the pooling matrix by stride of row pixels\n        i += stride\n        mat_i += 1\n        # reset the column index to 0\n        j = 0\n        mat_j = 0\n\n    return updated_arr\n\n\n# Main Function\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod(name=\"avgpooling\", verbose=True)\n\n    # Loading the image\n    image = Image.open(\"path_to_image\")\n\n    # Converting the image to numpy array and maxpooling, displaying the result\n    # Ensure that the image is a square matrix\n\n    Image.fromarray(maxpooling(np.array(image), size=3, stride=2)).show()\n\n    # Converting the image to numpy array and averagepooling, displaying the result\n    # Ensure that the image is a square matrix\n\n    Image.fromarray(avgpooling(np.array(image), size=3, stride=2)).show()\n"
  },
  {
    "path": "conversions/README.md",
    "content": "# Conversion\n\nConversion 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.\n\n* <https://en.wikipedia.org/wiki/Data_conversion>\n* <https://en.wikipedia.org/wiki/Transcoding>\n"
  },
  {
    "path": "conversions/__init__.py",
    "content": ""
  },
  {
    "path": "conversions/astronomical_length_scale_conversion.py",
    "content": "\"\"\"\nConversion of length units.\nAvailable Units:\nMetre, Kilometre, Megametre, Gigametre,\nTerametre, Petametre, Exametre, Zettametre, Yottametre\n\nUSAGE :\n-> Import this file into their respective project.\n-> Use the function length_conversion() for conversion of length units.\n-> Parameters :\n    -> value : The number of from units you want to convert\n    -> from_type : From which type you want to convert\n    -> to_type : To which type you want to convert\n\nREFERENCES :\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Meter\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Kilometer\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Orders_of_magnitude_(length)\n\"\"\"\n\nUNIT_SYMBOL = {\n    \"meter\": \"m\",\n    \"kilometer\": \"km\",\n    \"megametre\": \"Mm\",\n    \"gigametre\": \"Gm\",\n    \"terametre\": \"Tm\",\n    \"petametre\": \"Pm\",\n    \"exametre\": \"Em\",\n    \"zettametre\": \"Zm\",\n    \"yottametre\": \"Ym\",\n}\n# Exponent of the factor(meter)\nMETRIC_CONVERSION = {\n    \"m\": 0,\n    \"km\": 3,\n    \"Mm\": 6,\n    \"Gm\": 9,\n    \"Tm\": 12,\n    \"Pm\": 15,\n    \"Em\": 18,\n    \"Zm\": 21,\n    \"Ym\": 24,\n}\n\n\ndef length_conversion(value: float, from_type: str, to_type: str) -> float:\n    \"\"\"\n    Conversion between astronomical length units.\n\n    >>> length_conversion(1, \"meter\", \"kilometer\")\n    0.001\n    >>> length_conversion(1, \"meter\", \"megametre\")\n    1e-06\n    >>> length_conversion(1, \"gigametre\", \"meter\")\n    1000000000\n    >>> length_conversion(1, \"gigametre\", \"terametre\")\n    0.001\n    >>> length_conversion(1, \"petametre\", \"terametre\")\n    1000\n    >>> length_conversion(1, \"petametre\", \"exametre\")\n    0.001\n    >>> length_conversion(1, \"terametre\", \"zettametre\")\n    1e-09\n    >>> length_conversion(1, \"yottametre\", \"zettametre\")\n    1000\n    >>> length_conversion(4, \"wrongUnit\", \"inch\")\n    Traceback (most recent call last):\n      ...\n    ValueError: Invalid 'from_type' value: 'wrongUnit'.\n    Conversion abbreviations are: m, km, Mm, Gm, Tm, Pm, Em, Zm, Ym\n    \"\"\"\n\n    from_sanitized = from_type.lower().strip(\"s\")\n    to_sanitized = to_type.lower().strip(\"s\")\n\n    from_sanitized = UNIT_SYMBOL.get(from_sanitized, from_sanitized)\n    to_sanitized = UNIT_SYMBOL.get(to_sanitized, to_sanitized)\n\n    if from_sanitized not in METRIC_CONVERSION:\n        msg = (\n            f\"Invalid 'from_type' value: {from_type!r}.\\n\"\n            f\"Conversion abbreviations are: {', '.join(METRIC_CONVERSION)}\"\n        )\n        raise ValueError(msg)\n    if to_sanitized not in METRIC_CONVERSION:\n        msg = (\n            f\"Invalid 'to_type' value: {to_type!r}.\\n\"\n            f\"Conversion abbreviations are: {', '.join(METRIC_CONVERSION)}\"\n        )\n        raise ValueError(msg)\n    from_exponent = METRIC_CONVERSION[from_sanitized]\n    to_exponent = METRIC_CONVERSION[to_sanitized]\n    exponent = 1\n\n    if from_exponent > to_exponent:\n        exponent = from_exponent - to_exponent\n    else:\n        exponent = -(to_exponent - from_exponent)\n\n    return value * pow(10, exponent)\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "conversions/binary_to_decimal.py",
    "content": "def bin_to_decimal(bin_string: str) -> int:\n    \"\"\"\n    Convert a binary value to its decimal equivalent\n\n    >>> bin_to_decimal(\"101\")\n    5\n    >>> bin_to_decimal(\" 1010   \")\n    10\n    >>> bin_to_decimal(\"-11101\")\n    -29\n    >>> bin_to_decimal(\"0\")\n    0\n    >>> bin_to_decimal(\"a\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Non-binary value was passed to the function\n    >>> bin_to_decimal(\"\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Empty string was passed to the function\n    >>> bin_to_decimal(\"39\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Non-binary value was passed to the function\n    \"\"\"\n    bin_string = str(bin_string).strip()\n    if not bin_string:\n        raise ValueError(\"Empty string was passed to the function\")\n    is_negative = bin_string[0] == \"-\"\n    if is_negative:\n        bin_string = bin_string[1:]\n    if not all(char in \"01\" for char in bin_string):\n        raise ValueError(\"Non-binary value was passed to the function\")\n    decimal_number = 0\n    for char in bin_string:\n        decimal_number = 2 * decimal_number + int(char)\n    return -decimal_number if is_negative else decimal_number\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "conversions/binary_to_hexadecimal.py",
    "content": "BITS_TO_HEX = {\n    \"0000\": \"0\",\n    \"0001\": \"1\",\n    \"0010\": \"2\",\n    \"0011\": \"3\",\n    \"0100\": \"4\",\n    \"0101\": \"5\",\n    \"0110\": \"6\",\n    \"0111\": \"7\",\n    \"1000\": \"8\",\n    \"1001\": \"9\",\n    \"1010\": \"a\",\n    \"1011\": \"b\",\n    \"1100\": \"c\",\n    \"1101\": \"d\",\n    \"1110\": \"e\",\n    \"1111\": \"f\",\n}\n\n\ndef bin_to_hexadecimal(binary_str: str) -> str:\n    \"\"\"\n    Converting a binary string into hexadecimal using Grouping Method\n\n    >>> bin_to_hexadecimal('101011111')\n    '0x15f'\n    >>> bin_to_hexadecimal(' 1010   ')\n    '0x0a'\n    >>> bin_to_hexadecimal('-11101')\n    '-0x1d'\n    >>> bin_to_hexadecimal('a')\n    Traceback (most recent call last):\n        ...\n    ValueError: Non-binary value was passed to the function\n    >>> bin_to_hexadecimal('')\n    Traceback (most recent call last):\n        ...\n    ValueError: Empty string was passed to the function\n    \"\"\"\n    # Sanitising parameter\n    binary_str = str(binary_str).strip()\n\n    # Exceptions\n    if not binary_str:\n        raise ValueError(\"Empty string was passed to the function\")\n    is_negative = binary_str[0] == \"-\"\n    binary_str = binary_str[1:] if is_negative else binary_str\n    if not all(char in \"01\" for char in binary_str):\n        raise ValueError(\"Non-binary value was passed to the function\")\n\n    binary_str = (\n        \"0\" * (4 * (divmod(len(binary_str), 4)[0] + 1) - len(binary_str)) + binary_str\n    )\n\n    hexadecimal = []\n    for x in range(0, len(binary_str), 4):\n        hexadecimal.append(BITS_TO_HEX[binary_str[x : x + 4]])\n    hexadecimal_str = \"0x\" + \"\".join(hexadecimal)\n\n    return \"-\" + hexadecimal_str if is_negative else hexadecimal_str\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "conversions/binary_to_octal.py",
    "content": "\"\"\"\nThe function below will convert any binary string to the octal equivalent.\n\n>>> bin_to_octal(\"1111\")\n'17'\n\n>>> bin_to_octal(\"101010101010011\")\n'52523'\n\n>>> bin_to_octal(\"\")\nTraceback (most recent call last):\n    ...\nValueError: Empty string was passed to the function\n>>> bin_to_octal(\"a-1\")\nTraceback (most recent call last):\n    ...\nValueError: Non-binary value was passed to the function\n\"\"\"\n\n\ndef bin_to_octal(bin_string: str) -> str:\n    if not all(char in \"01\" for char in bin_string):\n        raise ValueError(\"Non-binary value was passed to the function\")\n    if not bin_string:\n        raise ValueError(\"Empty string was passed to the function\")\n    oct_string = \"\"\n    while len(bin_string) % 3 != 0:\n        bin_string = \"0\" + bin_string\n    bin_string_in_3_list = [\n        bin_string[index : index + 3]\n        for index in range(len(bin_string))\n        if index % 3 == 0\n    ]\n    for bin_group in bin_string_in_3_list:\n        oct_val = 0\n        for index, val in enumerate(bin_group):\n            oct_val += int(2 ** (2 - index) * int(val))\n        oct_string += str(oct_val)\n    return oct_string\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "conversions/convert_number_to_words.py",
    "content": "from enum import Enum\nfrom typing import Literal\n\n\nclass NumberingSystem(Enum):\n    SHORT = (\n        (15, \"quadrillion\"),\n        (12, \"trillion\"),\n        (9, \"billion\"),\n        (6, \"million\"),\n        (3, \"thousand\"),\n        (2, \"hundred\"),\n    )\n\n    LONG = (\n        (15, \"billiard\"),\n        (9, \"milliard\"),\n        (6, \"million\"),\n        (3, \"thousand\"),\n        (2, \"hundred\"),\n    )\n\n    INDIAN = (\n        (14, \"crore crore\"),\n        (12, \"lakh crore\"),\n        (7, \"crore\"),\n        (5, \"lakh\"),\n        (3, \"thousand\"),\n        (2, \"hundred\"),\n    )\n\n    @classmethod\n    def max_value(cls, system: str) -> int:\n        \"\"\"\n        Gets the max value supported by the given number system.\n\n        >>> NumberingSystem.max_value(\"short\") == 10**18 - 1\n        True\n        >>> NumberingSystem.max_value(\"long\") == 10**21 - 1\n        True\n        >>> NumberingSystem.max_value(\"indian\") == 10**19 - 1\n        True\n        \"\"\"\n        match system_enum := cls[system.upper()]:\n            case cls.SHORT:\n                max_exp = system_enum.value[0][0] + 3\n            case cls.LONG:\n                max_exp = system_enum.value[0][0] + 6\n            case cls.INDIAN:\n                max_exp = 19\n            case _:\n                raise ValueError(\"Invalid numbering system\")\n        return 10**max_exp - 1\n\n\nclass NumberWords(Enum):\n    ONES = {  # noqa: RUF012\n        0: \"\",\n        1: \"one\",\n        2: \"two\",\n        3: \"three\",\n        4: \"four\",\n        5: \"five\",\n        6: \"six\",\n        7: \"seven\",\n        8: \"eight\",\n        9: \"nine\",\n    }\n\n    TEENS = {  # noqa: RUF012\n        0: \"ten\",\n        1: \"eleven\",\n        2: \"twelve\",\n        3: \"thirteen\",\n        4: \"fourteen\",\n        5: \"fifteen\",\n        6: \"sixteen\",\n        7: \"seventeen\",\n        8: \"eighteen\",\n        9: \"nineteen\",\n    }\n\n    TENS = {  # noqa: RUF012\n        2: \"twenty\",\n        3: \"thirty\",\n        4: \"forty\",\n        5: \"fifty\",\n        6: \"sixty\",\n        7: \"seventy\",\n        8: \"eighty\",\n        9: \"ninety\",\n    }\n\n\ndef convert_small_number(num: int) -> str:\n    \"\"\"\n    Converts small, non-negative integers with irregular constructions in English (i.e.,\n    numbers under 100) into words.\n\n    >>> convert_small_number(0)\n    'zero'\n    >>> convert_small_number(5)\n    'five'\n    >>> convert_small_number(10)\n    'ten'\n    >>> convert_small_number(15)\n    'fifteen'\n    >>> convert_small_number(20)\n    'twenty'\n    >>> convert_small_number(25)\n    'twenty-five'\n    >>> convert_small_number(-1)\n    Traceback (most recent call last):\n    ...\n    ValueError: This function only accepts non-negative integers\n    >>> convert_small_number(123)\n    Traceback (most recent call last):\n    ...\n    ValueError: This function only converts numbers less than 100\n    \"\"\"\n    if num < 0:\n        raise ValueError(\"This function only accepts non-negative integers\")\n    if num >= 100:\n        raise ValueError(\"This function only converts numbers less than 100\")\n    tens, ones = divmod(num, 10)\n    if tens == 0:\n        return NumberWords.ONES.value[ones] or \"zero\"\n    if tens == 1:\n        return NumberWords.TEENS.value[ones]\n    return (\n        NumberWords.TENS.value[tens]\n        + (\"-\" if NumberWords.ONES.value[ones] else \"\")\n        + NumberWords.ONES.value[ones]\n    )\n\n\ndef convert_number(\n    num: int, system: Literal[\"short\", \"long\", \"indian\"] = \"short\"\n) -> str:\n    \"\"\"\n    Converts an integer to English words.\n\n    :param num: The integer to be converted\n    :param system: The numbering system (short, long, or Indian)\n\n    >>> convert_number(0)\n    'zero'\n    >>> convert_number(1)\n    'one'\n    >>> convert_number(100)\n    'one hundred'\n    >>> convert_number(-100)\n    'negative one hundred'\n    >>> convert_number(123_456_789_012_345) # doctest: +NORMALIZE_WHITESPACE\n    'one hundred twenty-three trillion four hundred fifty-six billion\n    seven hundred eighty-nine million twelve thousand three hundred forty-five'\n    >>> convert_number(123_456_789_012_345, \"long\") # doctest: +NORMALIZE_WHITESPACE\n    'one hundred twenty-three thousand four hundred fifty-six milliard\n    seven hundred eighty-nine million twelve thousand three hundred forty-five'\n    >>> convert_number(12_34_56_78_90_12_345, \"indian\") # doctest: +NORMALIZE_WHITESPACE\n    'one crore crore twenty-three lakh crore\n    forty-five thousand six hundred seventy-eight crore\n    ninety lakh twelve thousand three hundred forty-five'\n    >>> convert_number(10**18)\n    Traceback (most recent call last):\n    ...\n    ValueError: Input number is too large\n    >>> convert_number(10**21, \"long\")\n    Traceback (most recent call last):\n    ...\n    ValueError: Input number is too large\n    >>> convert_number(10**19, \"indian\")\n    Traceback (most recent call last):\n    ...\n    ValueError: Input number is too large\n    \"\"\"\n    word_groups = []\n\n    if num < 0:\n        word_groups.append(\"negative\")\n        num *= -1\n\n    if num > NumberingSystem.max_value(system):\n        raise ValueError(\"Input number is too large\")\n\n    for power, unit in NumberingSystem[system.upper()].value:\n        digit_group, num = divmod(num, 10**power)\n        if digit_group > 0:\n            word_group = (\n                convert_number(digit_group, system)\n                if digit_group >= 100\n                else convert_small_number(digit_group)\n            )\n            word_groups.append(f\"{word_group} {unit}\")\n    if num > 0 or not word_groups:  # word_groups is only empty if input num was 0\n        word_groups.append(convert_small_number(num))\n    return \" \".join(word_groups)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    print(f\"{convert_number(123456789) = }\")\n"
  },
  {
    "path": "conversions/decimal_to_any.py",
    "content": "\"\"\"Convert a positive Decimal Number to Any Other Representation\"\"\"\n\nfrom string import ascii_uppercase\n\nALPHABET_VALUES = {str(ord(c) - 55): c for c in ascii_uppercase}\n\n\ndef decimal_to_any(num: int, base: int) -> str:\n    \"\"\"\n    Convert a positive integer to another base as str.\n    >>> decimal_to_any(0, 2)\n    '0'\n    >>> decimal_to_any(5, 4)\n    '11'\n    >>> decimal_to_any(20, 3)\n    '202'\n    >>> decimal_to_any(58, 16)\n    '3A'\n    >>> decimal_to_any(243, 17)\n    'E5'\n    >>> decimal_to_any(34923, 36)\n    'QY3'\n    >>> decimal_to_any(10, 11)\n    'A'\n    >>> decimal_to_any(16, 16)\n    '10'\n    >>> decimal_to_any(36, 36)\n    '10'\n    >>> # negatives will error\n    >>> decimal_to_any(-45, 8)  # doctest: +ELLIPSIS\n    Traceback (most recent call last):\n        ...\n    ValueError: parameter must be positive int\n    >>> # floats will error\n    >>> decimal_to_any(34.4, 6) # doctest: +ELLIPSIS\n    Traceback (most recent call last):\n        ...\n    TypeError: int() can't convert non-string with explicit base\n    >>> # a float base will error\n    >>> decimal_to_any(5, 2.5) # doctest: +ELLIPSIS\n    Traceback (most recent call last):\n        ...\n    TypeError: 'float' object cannot be interpreted as an integer\n    >>> # a str base will error\n    >>> decimal_to_any(10, '16') # doctest: +ELLIPSIS\n    Traceback (most recent call last):\n        ...\n    TypeError: 'str' object cannot be interpreted as an integer\n    >>> # a base less than 2 will error\n    >>> decimal_to_any(7, 0) # doctest: +ELLIPSIS\n    Traceback (most recent call last):\n        ...\n    ValueError: base must be >= 2\n    >>> # a base greater than 36 will error\n    >>> decimal_to_any(34, 37) # doctest: +ELLIPSIS\n    Traceback (most recent call last):\n        ...\n    ValueError: base must be <= 36\n    \"\"\"\n    if isinstance(num, float):\n        raise TypeError(\"int() can't convert non-string with explicit base\")\n    if num < 0:\n        raise ValueError(\"parameter must be positive int\")\n    if isinstance(base, str):\n        raise TypeError(\"'str' object cannot be interpreted as an integer\")\n    if isinstance(base, float):\n        raise TypeError(\"'float' object cannot be interpreted as an integer\")\n    if base in (0, 1):\n        raise ValueError(\"base must be >= 2\")\n    if base > 36:\n        raise ValueError(\"base must be <= 36\")\n    new_value = \"\"\n    mod = 0\n    div = 0\n    while div != 1:\n        div, mod = divmod(num, base)\n        if base >= 11 and 9 < mod < 36:\n            actual_value = ALPHABET_VALUES[str(mod)]\n        else:\n            actual_value = str(mod)\n        new_value += actual_value\n        div = num // base\n        num = div\n        if div == 0:\n            return str(new_value[::-1])\n        elif div == 1:\n            new_value += str(div)\n            return str(new_value[::-1])\n\n    return new_value[::-1]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    for base in range(2, 37):\n        for num in range(1000):\n            assert int(decimal_to_any(num, base), base) == num, (\n                num,\n                base,\n                decimal_to_any(num, base),\n                int(decimal_to_any(num, base), base),\n            )\n"
  },
  {
    "path": "conversions/decimal_to_binary.py",
    "content": "\"\"\"Convert a Decimal Number to a Binary Number.\"\"\"\n\n\ndef decimal_to_binary_iterative(num: int) -> str:\n    \"\"\"\n    Convert an Integer Decimal Number to a Binary Number as str.\n    >>> decimal_to_binary_iterative(0)\n    '0b0'\n    >>> decimal_to_binary_iterative(2)\n    '0b10'\n    >>> decimal_to_binary_iterative(7)\n    '0b111'\n    >>> decimal_to_binary_iterative(35)\n    '0b100011'\n    >>> # negatives work too\n    >>> decimal_to_binary_iterative(-2)\n    '-0b10'\n    >>> # other floats will error\n    >>> decimal_to_binary_iterative(16.16) # doctest: +ELLIPSIS\n    Traceback (most recent call last):\n        ...\n    TypeError: 'float' object cannot be interpreted as an integer\n    >>> # strings will error as well\n    >>> decimal_to_binary_iterative('0xfffff') # doctest: +ELLIPSIS\n    Traceback (most recent call last):\n        ...\n    TypeError: 'str' object cannot be interpreted as an integer\n    \"\"\"\n\n    if isinstance(num, float):\n        raise TypeError(\"'float' object cannot be interpreted as an integer\")\n    if isinstance(num, str):\n        raise TypeError(\"'str' object cannot be interpreted as an integer\")\n\n    if num == 0:\n        return \"0b0\"\n\n    negative = False\n\n    if num < 0:\n        negative = True\n        num = -num\n\n    binary: list[int] = []\n    while num > 0:\n        binary.insert(0, num % 2)\n        num >>= 1\n\n    if negative:\n        return \"-0b\" + \"\".join(str(e) for e in binary)\n\n    return \"0b\" + \"\".join(str(e) for e in binary)\n\n\ndef decimal_to_binary_recursive_helper(decimal: int) -> str:\n    \"\"\"\n    Take a positive integer value and return its binary equivalent.\n    >>> decimal_to_binary_recursive_helper(1000)\n    '1111101000'\n    >>> decimal_to_binary_recursive_helper(\"72\")\n    '1001000'\n    >>> decimal_to_binary_recursive_helper(\"number\")\n    Traceback (most recent call last):\n        ...\n    ValueError: invalid literal for int() with base 10: 'number'\n    \"\"\"\n    decimal = int(decimal)\n    if decimal in (0, 1):  # Exit cases for the recursion\n        return str(decimal)\n    div, mod = divmod(decimal, 2)\n    return decimal_to_binary_recursive_helper(div) + str(mod)\n\n\ndef decimal_to_binary_recursive(number: str) -> str:\n    \"\"\"\n    Take an integer value and raise ValueError for wrong inputs,\n    call the function above and return the output with prefix \"0b\" & \"-0b\"\n    for positive and negative integers respectively.\n    >>> decimal_to_binary_recursive(0)\n    '0b0'\n    >>> decimal_to_binary_recursive(40)\n    '0b101000'\n    >>> decimal_to_binary_recursive(-40)\n    '-0b101000'\n    >>> decimal_to_binary_recursive(40.8)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input value is not an integer\n    >>> decimal_to_binary_recursive(\"forty\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Input value is not an integer\n    \"\"\"\n    number = str(number).strip()\n    if not number:\n        raise ValueError(\"No input value was provided\")\n    negative = \"-\" if number.startswith(\"-\") else \"\"\n    number = number.lstrip(\"-\")\n    if not number.isnumeric():\n        raise ValueError(\"Input value is not an integer\")\n    return f\"{negative}0b{decimal_to_binary_recursive_helper(int(number))}\"\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    print(decimal_to_binary_recursive(input(\"Input a decimal number: \")))\n"
  },
  {
    "path": "conversions/decimal_to_hexadecimal.py",
    "content": "\"\"\"Convert Base 10 (Decimal) Values to Hexadecimal Representations\"\"\"\n\n# set decimal value for each hexadecimal digit\nvalues = {\n    0: \"0\",\n    1: \"1\",\n    2: \"2\",\n    3: \"3\",\n    4: \"4\",\n    5: \"5\",\n    6: \"6\",\n    7: \"7\",\n    8: \"8\",\n    9: \"9\",\n    10: \"a\",\n    11: \"b\",\n    12: \"c\",\n    13: \"d\",\n    14: \"e\",\n    15: \"f\",\n}\n\n\ndef decimal_to_hexadecimal(decimal: float) -> str:\n    \"\"\"\n    take integer decimal value, return hexadecimal representation as str beginning\n    with 0x\n    >>> decimal_to_hexadecimal(5)\n    '0x5'\n    >>> decimal_to_hexadecimal(15)\n    '0xf'\n    >>> decimal_to_hexadecimal(37)\n    '0x25'\n    >>> decimal_to_hexadecimal(255)\n    '0xff'\n    >>> decimal_to_hexadecimal(4096)\n    '0x1000'\n    >>> decimal_to_hexadecimal(999098)\n    '0xf3eba'\n    >>> # negatives work too\n    >>> decimal_to_hexadecimal(-256)\n    '-0x100'\n    >>> # floats are acceptable if equivalent to an int\n    >>> decimal_to_hexadecimal(17.0)\n    '0x11'\n    >>> # other floats will error\n    >>> decimal_to_hexadecimal(16.16) # doctest: +ELLIPSIS\n    Traceback (most recent call last):\n        ...\n    AssertionError\n    >>> # strings will error as well\n    >>> decimal_to_hexadecimal('0xfffff') # doctest: +ELLIPSIS\n    Traceback (most recent call last):\n        ...\n    AssertionError\n    >>> # results are the same when compared to Python's default hex function\n    >>> decimal_to_hexadecimal(-256) == hex(-256)\n    True\n    \"\"\"\n    assert isinstance(decimal, (int, float))\n    assert decimal == int(decimal)\n    decimal = int(decimal)\n    hexadecimal = \"\"\n    negative = False\n    if decimal < 0:\n        negative = True\n        decimal *= -1\n    while decimal > 0:\n        decimal, remainder = divmod(decimal, 16)\n        hexadecimal = values[remainder] + hexadecimal\n    hexadecimal = \"0x\" + hexadecimal\n    if negative:\n        hexadecimal = \"-\" + hexadecimal\n    return hexadecimal\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "conversions/decimal_to_octal.py",
    "content": "\"\"\"Convert a Decimal Number to an Octal Number.\"\"\"\n\nimport math\n\n# Modified from:\n# https://github.com/TheAlgorithms/Javascript/blob/master/Conversions/DecimalToOctal.js\n\n\ndef decimal_to_octal(num: int) -> str:\n    \"\"\"Convert a Decimal Number to an Octal Number.\n\n    >>> all(decimal_to_octal(i) == oct(i) for i\n    ...     in (0, 2, 8, 64, 65, 216, 255, 256, 512))\n    True\n    \"\"\"\n    octal = 0\n    counter = 0\n    while num > 0:\n        remainder = num % 8\n        octal = octal + (remainder * math.floor(math.pow(10, counter)))\n        counter += 1\n        num = math.floor(num / 8)  # basically /= 8 without remainder if any\n        # This formatting removes trailing '.0' from `octal`.\n    return f\"0o{int(octal)}\"\n\n\ndef main() -> None:\n    \"\"\"Print octal equivalents of decimal numbers.\"\"\"\n    print(\"\\n2 in octal is:\")\n    print(decimal_to_octal(2))  # = 2\n    print(\"\\n8 in octal is:\")\n    print(decimal_to_octal(8))  # = 10\n    print(\"\\n65 in octal is:\")\n    print(decimal_to_octal(65))  # = 101\n    print(\"\\n216 in octal is:\")\n    print(decimal_to_octal(216))  # = 330\n    print(\"\\n512 in octal is:\")\n    print(decimal_to_octal(512))  # = 1000\n    print(\"\\n\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "conversions/energy_conversions.py",
    "content": "\"\"\"\nConversion of energy units.\n\nAvailable units: joule, kilojoule, megajoule, gigajoule,\\\n      wattsecond, watthour, kilowatthour, newtonmeter, calorie_nutr,\\\n          kilocalorie_nutr, electronvolt, britishthermalunit_it, footpound\n\nUSAGE :\n-> Import this file into their respective project.\n-> Use the function energy_conversion() for conversion of energy units.\n-> Parameters :\n    -> from_type : From which type you want to convert\n    -> to_type : To which type you want to convert\n    -> value : the value which you want to convert\n\nREFERENCES :\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Units_of_energy\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Joule\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Kilowatt-hour\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Newton-metre\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Calorie\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Electronvolt\n-> Wikipedia reference: https://en.wikipedia.org/wiki/British_thermal_unit\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Foot-pound_(energy)\n-> Unit converter reference: https://www.unitconverters.net/energy-converter.html\n\"\"\"\n\nENERGY_CONVERSION: dict[str, float] = {\n    \"joule\": 1.0,\n    \"kilojoule\": 1_000,\n    \"megajoule\": 1_000_000,\n    \"gigajoule\": 1_000_000_000,\n    \"wattsecond\": 1.0,\n    \"watthour\": 3_600,\n    \"kilowatthour\": 3_600_000,\n    \"newtonmeter\": 1.0,\n    \"calorie_nutr\": 4_186.8,\n    \"kilocalorie_nutr\": 4_186_800.00,\n    \"electronvolt\": 1.602_176_634e-19,\n    \"britishthermalunit_it\": 1_055.055_85,\n    \"footpound\": 1.355_818,\n}\n\n\ndef energy_conversion(from_type: str, to_type: str, value: float) -> float:\n    \"\"\"\n    Conversion of energy units.\n    >>> energy_conversion(\"joule\", \"joule\", 1)\n    1.0\n    >>> energy_conversion(\"joule\", \"kilojoule\", 1)\n    0.001\n    >>> energy_conversion(\"joule\", \"megajoule\", 1)\n    1e-06\n    >>> energy_conversion(\"joule\", \"gigajoule\", 1)\n    1e-09\n    >>> energy_conversion(\"joule\", \"wattsecond\", 1)\n    1.0\n    >>> energy_conversion(\"joule\", \"watthour\", 1)\n    0.0002777777777777778\n    >>> energy_conversion(\"joule\", \"kilowatthour\", 1)\n    2.7777777777777776e-07\n    >>> energy_conversion(\"joule\", \"newtonmeter\", 1)\n    1.0\n    >>> energy_conversion(\"joule\", \"calorie_nutr\", 1)\n    0.00023884589662749592\n    >>> energy_conversion(\"joule\", \"kilocalorie_nutr\", 1)\n    2.388458966274959e-07\n    >>> energy_conversion(\"joule\", \"electronvolt\", 1)\n    6.241509074460763e+18\n    >>> energy_conversion(\"joule\", \"britishthermalunit_it\", 1)\n    0.0009478171226670134\n    >>> energy_conversion(\"joule\", \"footpound\", 1)\n    0.7375621211696556\n    >>> energy_conversion(\"joule\", \"megajoule\", 1000)\n    0.001\n    >>> energy_conversion(\"calorie_nutr\", \"kilocalorie_nutr\", 1000)\n    1.0\n    >>> energy_conversion(\"kilowatthour\", \"joule\", 10)\n    36000000.0\n    >>> energy_conversion(\"britishthermalunit_it\", \"footpound\", 1)\n    778.1692306784539\n    >>> energy_conversion(\"watthour\", \"joule\", \"a\") # doctest: +ELLIPSIS\n    Traceback (most recent call last):\n      ...\n    TypeError: unsupported operand type(s) for /: 'str' and 'float'\n    >>> energy_conversion(\"wrongunit\", \"joule\", 1) # doctest: +ELLIPSIS\n    Traceback (most recent call last):\n      ...\n    ValueError: Incorrect 'from_type' or 'to_type' value: 'wrongunit', 'joule'\n    Valid values are: joule, ... footpound\n    >>> energy_conversion(\"joule\", \"wrongunit\", 1) # doctest: +ELLIPSIS\n    Traceback (most recent call last):\n      ...\n    ValueError: Incorrect 'from_type' or 'to_type' value: 'joule', 'wrongunit'\n    Valid values are: joule, ... footpound\n    >>> energy_conversion(\"123\", \"abc\", 1) # doctest: +ELLIPSIS\n    Traceback (most recent call last):\n      ...\n    ValueError: Incorrect 'from_type' or 'to_type' value: '123', 'abc'\n    Valid values are: joule, ... footpound\n    \"\"\"\n    if to_type not in ENERGY_CONVERSION or from_type not in ENERGY_CONVERSION:\n        msg = (\n            f\"Incorrect 'from_type' or 'to_type' value: {from_type!r}, {to_type!r}\\n\"\n            f\"Valid values are: {', '.join(ENERGY_CONVERSION)}\"\n        )\n        raise ValueError(msg)\n    return value * ENERGY_CONVERSION[from_type] / ENERGY_CONVERSION[to_type]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "conversions/excel_title_to_column.py",
    "content": "def excel_title_to_column(column_title: str) -> int:\n    \"\"\"\n    Given a string column_title that represents\n    the column title in an Excel sheet, return\n    its corresponding column number.\n\n    >>> excel_title_to_column(\"A\")\n    1\n    >>> excel_title_to_column(\"B\")\n    2\n    >>> excel_title_to_column(\"AB\")\n    28\n    >>> excel_title_to_column(\"Z\")\n    26\n    \"\"\"\n    assert column_title.isupper()\n    answer = 0\n    index = len(column_title) - 1\n    power = 0\n\n    while index >= 0:\n        value = (ord(column_title[index]) - 64) * pow(26, power)\n        answer += value\n        power += 1\n        index -= 1\n\n    return answer\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "conversions/hex_to_bin.py",
    "content": "def hex_to_bin(hex_num: str) -> int:\n    \"\"\"\n    Convert a hexadecimal value to its binary equivalent\n    #https://stackoverflow.com/questions/1425493/convert-hex-to-binary\n    Here, we have used the bitwise right shift operator: >>\n    Shifts the bits of the number to the right and fills 0 on voids left as a result.\n    Similar effect as of dividing the number with some power of two.\n    Example:\n    a = 10\n    a >> 1 = 5\n\n    >>> hex_to_bin(\"AC\")\n    10101100\n    >>> hex_to_bin(\"9A4\")\n    100110100100\n    >>> hex_to_bin(\"   12f   \")\n    100101111\n    >>> hex_to_bin(\"FfFf\")\n    1111111111111111\n    >>> hex_to_bin(\"-fFfF\")\n    -1111111111111111\n    >>> hex_to_bin(\"F-f\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid value was passed to the function\n    >>> hex_to_bin(\"\")\n    Traceback (most recent call last):\n        ...\n    ValueError: No value was passed to the function\n    \"\"\"\n\n    hex_num = hex_num.strip()\n    if not hex_num:\n        raise ValueError(\"No value was passed to the function\")\n\n    is_negative = hex_num[0] == \"-\"\n    if is_negative:\n        hex_num = hex_num[1:]\n\n    try:\n        int_num = int(hex_num, 16)\n    except ValueError:\n        raise ValueError(\"Invalid value was passed to the function\")\n\n    bin_str = \"\"\n    while int_num > 0:\n        bin_str = str(int_num % 2) + bin_str\n        int_num >>= 1\n\n    return int((\"-\" + bin_str) if is_negative else bin_str)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "conversions/hexadecimal_to_decimal.py",
    "content": "hex_table = {hex(i)[2:]: i for i in range(16)}  # Use [:2] to strip off the leading '0x'\n\n\ndef hex_to_decimal(hex_string: str) -> int:\n    \"\"\"\n    Convert a hexadecimal value to its decimal equivalent\n    #https://www.programiz.com/python-programming/methods/built-in/hex\n\n    >>> hex_to_decimal(\"a\")\n    10\n    >>> hex_to_decimal(\"12f\")\n    303\n    >>> hex_to_decimal(\"   12f   \")\n    303\n    >>> hex_to_decimal(\"FfFf\")\n    65535\n    >>> hex_to_decimal(\"-Ff\")\n    -255\n    >>> hex_to_decimal(\"F-f\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Non-hexadecimal value was passed to the function\n    >>> hex_to_decimal(\"\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Empty string was passed to the function\n    >>> hex_to_decimal(\"12m\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Non-hexadecimal value was passed to the function\n    \"\"\"\n    hex_string = hex_string.strip().lower()\n    if not hex_string:\n        raise ValueError(\"Empty string was passed to the function\")\n    is_negative = hex_string[0] == \"-\"\n    if is_negative:\n        hex_string = hex_string[1:]\n    if not all(char in hex_table for char in hex_string):\n        raise ValueError(\"Non-hexadecimal value was passed to the function\")\n    decimal_number = 0\n    for char in hex_string:\n        decimal_number = 16 * decimal_number + hex_table[char]\n    return -decimal_number if is_negative else decimal_number\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "conversions/ipv4_conversion.py",
    "content": "# https://www.geeksforgeeks.org/convert-ip-address-to-integer-and-vice-versa/\n\n\ndef ipv4_to_decimal(ipv4_address: str) -> int:\n    \"\"\"\n    Convert an IPv4 address to its decimal representation.\n\n    Args:\n        ip_address: A string representing an IPv4 address (e.g., \"192.168.0.1\").\n\n    Returns:\n        int: The decimal representation of the IP address.\n\n    >>> ipv4_to_decimal(\"192.168.0.1\")\n    3232235521\n    >>> ipv4_to_decimal(\"10.0.0.255\")\n    167772415\n    >>> ipv4_to_decimal(\"10.0.255\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid IPv4 address format\n    >>> ipv4_to_decimal(\"10.0.0.256\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid IPv4 octet 256\n    \"\"\"\n\n    octets = [int(octet) for octet in ipv4_address.split(\".\")]\n    if len(octets) != 4:\n        raise ValueError(\"Invalid IPv4 address format\")\n\n    decimal_ipv4 = 0\n    for octet in octets:\n        if not 0 <= octet <= 255:\n            raise ValueError(f\"Invalid IPv4 octet {octet}\")  # noqa: EM102\n        decimal_ipv4 = (decimal_ipv4 << 8) + int(octet)\n\n    return decimal_ipv4\n\n\ndef alt_ipv4_to_decimal(ipv4_address: str) -> int:\n    \"\"\"\n    >>> alt_ipv4_to_decimal(\"192.168.0.1\")\n    3232235521\n    >>> alt_ipv4_to_decimal(\"10.0.0.255\")\n    167772415\n    \"\"\"\n    return int(\"0x\" + \"\".join(f\"{int(i):02x}\" for i in ipv4_address.split(\".\")), 16)\n\n\ndef decimal_to_ipv4(decimal_ipv4: int) -> str:\n    \"\"\"\n    Convert a decimal representation of an IP address to its IPv4 format.\n\n    Args:\n        decimal_ipv4: An integer representing the decimal IP address.\n\n    Returns:\n        The IPv4 representation of the decimal IP address.\n\n    >>> decimal_to_ipv4(3232235521)\n    '192.168.0.1'\n    >>> decimal_to_ipv4(167772415)\n    '10.0.0.255'\n    >>> decimal_to_ipv4(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid decimal IPv4 address\n    \"\"\"\n\n    if not (0 <= decimal_ipv4 <= 4294967295):\n        raise ValueError(\"Invalid decimal IPv4 address\")\n\n    ip_parts = []\n    for _ in range(4):\n        ip_parts.append(str(decimal_ipv4 & 255))\n        decimal_ipv4 >>= 8\n\n    return \".\".join(reversed(ip_parts))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "conversions/length_conversion.py",
    "content": "\"\"\"\r\nConversion of length units.\r\nAvailable Units:- Metre,Kilometre,Feet,Inch,Centimeter,Yard,Foot,Mile,Millimeter\r\n\r\nUSAGE :\r\n-> Import this file into their respective project.\r\n-> Use the function length_conversion() for conversion of length units.\r\n-> Parameters :\r\n    -> value : The number of from units you want to convert\r\n    -> from_type : From which type you want to convert\r\n    -> to_type : To which type you want to convert\r\n\r\nREFERENCES :\r\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Meter\r\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Kilometer\r\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Feet\r\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Inch\r\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Centimeter\r\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Yard\r\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Foot\r\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Mile\r\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Millimeter\r\n\"\"\"\r\n\r\nfrom typing import NamedTuple\r\n\r\n\r\nclass FromTo(NamedTuple):\r\n    from_factor: float\r\n    to_factor: float\r\n\r\n\r\nTYPE_CONVERSION = {\r\n    \"millimeter\": \"mm\",\r\n    \"centimeter\": \"cm\",\r\n    \"meter\": \"m\",\r\n    \"kilometer\": \"km\",\r\n    \"inch\": \"in\",\r\n    \"inche\": \"in\",  # Trailing 's' has been stripped off\r\n    \"feet\": \"ft\",\r\n    \"foot\": \"ft\",\r\n    \"yard\": \"yd\",\r\n    \"mile\": \"mi\",\r\n}\r\n\r\nMETRIC_CONVERSION = {\r\n    \"mm\": FromTo(0.001, 1000),\r\n    \"cm\": FromTo(0.01, 100),\r\n    \"m\": FromTo(1, 1),\r\n    \"km\": FromTo(1000, 0.001),\r\n    \"in\": FromTo(0.0254, 39.3701),\r\n    \"ft\": FromTo(0.3048, 3.28084),\r\n    \"yd\": FromTo(0.9144, 1.09361),\r\n    \"mi\": FromTo(1609.34, 0.000621371),\r\n}\r\n\r\n\r\ndef length_conversion(value: float, from_type: str, to_type: str) -> float:\r\n    \"\"\"\r\n    Conversion between length units.\r\n\r\n    >>> length_conversion(4, \"METER\", \"FEET\")\r\n    13.12336\r\n    >>> length_conversion(4, \"M\", \"FT\")\r\n    13.12336\r\n    >>> length_conversion(1, \"meter\", \"kilometer\")\r\n    0.001\r\n    >>> length_conversion(1, \"kilometer\", \"inch\")\r\n    39370.1\r\n    >>> length_conversion(3, \"kilometer\", \"mile\")\r\n    1.8641130000000001\r\n    >>> length_conversion(2, \"feet\", \"meter\")\r\n    0.6096\r\n    >>> length_conversion(4, \"feet\", \"yard\")\r\n    1.333329312\r\n    >>> length_conversion(1, \"inch\", \"meter\")\r\n    0.0254\r\n    >>> length_conversion(2, \"inch\", \"mile\")\r\n    3.15656468e-05\r\n    >>> length_conversion(2, \"centimeter\", \"millimeter\")\r\n    20.0\r\n    >>> length_conversion(2, \"centimeter\", \"yard\")\r\n    0.0218722\r\n    >>> length_conversion(4, \"yard\", \"meter\")\r\n    3.6576\r\n    >>> length_conversion(4, \"yard\", \"kilometer\")\r\n    0.0036576\r\n    >>> length_conversion(3, \"foot\", \"meter\")\r\n    0.9144000000000001\r\n    >>> length_conversion(3, \"foot\", \"inch\")\r\n    36.00001944\r\n    >>> length_conversion(4, \"mile\", \"kilometer\")\r\n    6.43736\r\n    >>> length_conversion(2, \"miles\", \"InChEs\")\r\n    126719.753468\r\n    >>> length_conversion(3, \"millimeter\", \"centimeter\")\r\n    0.3\r\n    >>> length_conversion(3, \"mm\", \"in\")\r\n    0.1181103\r\n    >>> length_conversion(4, \"wrongUnit\", \"inch\")\r\n    Traceback (most recent call last):\r\n      ...\r\n    ValueError: Invalid 'from_type' value: 'wrongUnit'.\r\n    Conversion abbreviations are: mm, cm, m, km, in, ft, yd, mi\r\n    \"\"\"\r\n    new_from = from_type.lower().rstrip(\"s\")\r\n    new_from = TYPE_CONVERSION.get(new_from, new_from)\r\n    new_to = to_type.lower().rstrip(\"s\")\r\n    new_to = TYPE_CONVERSION.get(new_to, new_to)\r\n    if new_from not in METRIC_CONVERSION:\r\n        msg = (\r\n            f\"Invalid 'from_type' value: {from_type!r}.\\n\"\r\n            f\"Conversion abbreviations are: {', '.join(METRIC_CONVERSION)}\"\r\n        )\r\n        raise ValueError(msg)\r\n    if new_to not in METRIC_CONVERSION:\r\n        msg = (\r\n            f\"Invalid 'to_type' value: {to_type!r}.\\n\"\r\n            f\"Conversion abbreviations are: {', '.join(METRIC_CONVERSION)}\"\r\n        )\r\n        raise ValueError(msg)\r\n    return (\r\n        value\r\n        * METRIC_CONVERSION[new_from].from_factor\r\n        * METRIC_CONVERSION[new_to].to_factor\r\n    )\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n"
  },
  {
    "path": "conversions/molecular_chemistry.py",
    "content": "\"\"\"\nFunctions useful for doing molecular chemistry:\n* molarity_to_normality\n* moles_to_pressure\n* moles_to_volume\n* pressure_and_volume_to_temperature\n\"\"\"\n\n\ndef molarity_to_normality(nfactor: int, moles: float, volume: float) -> float:\n    \"\"\"\n    Convert molarity to normality.\n      Volume is taken in litres.\n\n      Wikipedia reference: https://en.wikipedia.org/wiki/Equivalent_concentration\n      Wikipedia reference: https://en.wikipedia.org/wiki/Molar_concentration\n\n      >>> molarity_to_normality(2, 3.1, 0.31)\n      20\n      >>> molarity_to_normality(4, 11.4, 5.7)\n      8\n    \"\"\"\n    return round(float(moles / volume) * nfactor)\n\n\ndef moles_to_pressure(volume: float, moles: float, temperature: float) -> float:\n    \"\"\"\n    Convert moles to pressure.\n      Ideal gas laws are used.\n      Temperature is taken in kelvin.\n      Volume is taken in litres.\n      Pressure has atm as SI unit.\n\n      Wikipedia reference: https://en.wikipedia.org/wiki/Gas_laws\n      Wikipedia reference: https://en.wikipedia.org/wiki/Pressure\n      Wikipedia reference: https://en.wikipedia.org/wiki/Temperature\n\n      >>> moles_to_pressure(0.82, 3, 300)\n      90\n      >>> moles_to_pressure(8.2, 5, 200)\n      10\n    \"\"\"\n    return round(float((moles * 0.0821 * temperature) / (volume)))\n\n\ndef moles_to_volume(pressure: float, moles: float, temperature: float) -> float:\n    \"\"\"\n    Convert moles to volume.\n      Ideal gas laws are used.\n      Temperature is taken in kelvin.\n      Volume is taken in litres.\n      Pressure has atm as SI unit.\n\n      Wikipedia reference: https://en.wikipedia.org/wiki/Gas_laws\n      Wikipedia reference: https://en.wikipedia.org/wiki/Pressure\n      Wikipedia reference: https://en.wikipedia.org/wiki/Temperature\n\n      >>> moles_to_volume(0.82, 3, 300)\n      90\n      >>> moles_to_volume(8.2, 5, 200)\n      10\n    \"\"\"\n    return round(float((moles * 0.0821 * temperature) / (pressure)))\n\n\ndef pressure_and_volume_to_temperature(\n    pressure: float, moles: float, volume: float\n) -> float:\n    \"\"\"\n    Convert pressure and volume to temperature.\n      Ideal gas laws are used.\n      Temperature is taken in kelvin.\n      Volume is taken in litres.\n      Pressure has atm as SI unit.\n\n      Wikipedia reference: https://en.wikipedia.org/wiki/Gas_laws\n      Wikipedia reference: https://en.wikipedia.org/wiki/Pressure\n      Wikipedia reference: https://en.wikipedia.org/wiki/Temperature\n\n      >>> pressure_and_volume_to_temperature(0.82, 1, 2)\n      20\n      >>> pressure_and_volume_to_temperature(8.2, 5, 3)\n      60\n    \"\"\"\n    return round(float((pressure * volume) / (0.0821 * moles)))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "conversions/octal_to_binary.py",
    "content": "\"\"\"\n* Author: Bama Charan Chhandogi (https://github.com/BamaCharanChhandogi)\n* Description: Convert a Octal number to Binary.\n\nReferences for better understanding:\nhttps://en.wikipedia.org/wiki/Binary_number\nhttps://en.wikipedia.org/wiki/Octal\n\"\"\"\n\n\ndef octal_to_binary(octal_number: str) -> str:\n    \"\"\"\n    Convert an Octal number to Binary.\n\n    >>> octal_to_binary(\"17\")\n    '001111'\n    >>> octal_to_binary(\"7\")\n    '111'\n    >>> octal_to_binary(\"Av\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Non-octal value was passed to the function\n    >>> octal_to_binary(\"@#\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Non-octal value was passed to the function\n    >>> octal_to_binary(\"\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Empty string was passed to the function\n    \"\"\"\n    if not octal_number:\n        raise ValueError(\"Empty string was passed to the function\")\n\n    binary_number = \"\"\n    octal_digits = \"01234567\"\n    for digit in octal_number:\n        if digit not in octal_digits:\n            raise ValueError(\"Non-octal value was passed to the function\")\n\n        binary_digit = \"\"\n        value = int(digit)\n        for _ in range(3):\n            binary_digit = str(value % 2) + binary_digit\n            value //= 2\n        binary_number += binary_digit\n\n    return binary_number\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "conversions/octal_to_decimal.py",
    "content": "def oct_to_decimal(oct_string: str) -> int:\n    \"\"\"\n    Convert a octal value to its decimal equivalent\n\n    >>> oct_to_decimal(\"\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Empty string was passed to the function\n    >>> oct_to_decimal(\"-\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Non-octal value was passed to the function\n    >>> oct_to_decimal(\"e\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Non-octal value was passed to the function\n    >>> oct_to_decimal(\"8\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Non-octal value was passed to the function\n    >>> oct_to_decimal(\"-e\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Non-octal value was passed to the function\n    >>> oct_to_decimal(\"-8\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Non-octal value was passed to the function\n    >>> oct_to_decimal(\"1\")\n    1\n    >>> oct_to_decimal(\"-1\")\n    -1\n    >>> oct_to_decimal(\"12\")\n    10\n    >>> oct_to_decimal(\" 12   \")\n    10\n    >>> oct_to_decimal(\"-45\")\n    -37\n    >>> oct_to_decimal(\"-\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Non-octal value was passed to the function\n    >>> oct_to_decimal(\"0\")\n    0\n    >>> oct_to_decimal(\"-4055\")\n    -2093\n    >>> oct_to_decimal(\"2-0Fm\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Non-octal value was passed to the function\n    >>> oct_to_decimal(\"\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Empty string was passed to the function\n    >>> oct_to_decimal(\"19\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Non-octal value was passed to the function\n    \"\"\"\n    oct_string = str(oct_string).strip()\n    if not oct_string:\n        raise ValueError(\"Empty string was passed to the function\")\n    is_negative = oct_string[0] == \"-\"\n    if is_negative:\n        oct_string = oct_string[1:]\n    if not oct_string.isdigit() or not all(0 <= int(char) <= 7 for char in oct_string):\n        raise ValueError(\"Non-octal value was passed to the function\")\n    decimal_number = 0\n    for char in oct_string:\n        decimal_number = 8 * decimal_number + int(char)\n    if is_negative:\n        decimal_number = -decimal_number\n    return decimal_number\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "conversions/octal_to_hexadecimal.py",
    "content": "def octal_to_hex(octal: str) -> str:\n    \"\"\"\n    Convert an Octal number to Hexadecimal number.\n    For more information: https://en.wikipedia.org/wiki/Octal\n\n    >>> octal_to_hex(\"100\")\n    '0x40'\n    >>> octal_to_hex(\"235\")\n    '0x9D'\n    >>> octal_to_hex(17)\n    Traceback (most recent call last):\n        ...\n    TypeError: Expected a string as input\n    >>> octal_to_hex(\"Av\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Not a Valid Octal Number\n    >>> octal_to_hex(\"\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Empty string was passed to the function\n    \"\"\"\n\n    if not isinstance(octal, str):\n        raise TypeError(\"Expected a string as input\")\n    if octal.startswith(\"0o\"):\n        octal = octal[2:]\n    if octal == \"\":\n        raise ValueError(\"Empty string was passed to the function\")\n    if any(char not in \"01234567\" for char in octal):\n        raise ValueError(\"Not a Valid Octal Number\")\n\n    decimal = 0\n    for char in octal:\n        decimal <<= 3\n        decimal |= int(char)\n\n    hex_char = \"0123456789ABCDEF\"\n\n    revhex = \"\"\n    while decimal:\n        revhex += hex_char[decimal & 15]\n        decimal >>= 4\n\n    return \"0x\" + revhex[::-1]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    nums = [\"030\", \"100\", \"247\", \"235\", \"007\"]\n\n    ## Main Tests\n\n    for num in nums:\n        hexadecimal = octal_to_hex(num)\n        expected = \"0x\" + hex(int(num, 8))[2:].upper()\n\n        assert hexadecimal == expected\n\n        print(f\"Hex of '0o{num}' is: {hexadecimal}\")\n        print(f\"Expected was: {expected}\")\n        print(\"---\")\n"
  },
  {
    "path": "conversions/prefix_conversions.py",
    "content": "\"\"\"\nConvert International System of Units (SI) and Binary prefixes\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom enum import Enum\n\n\nclass SIUnit(Enum):\n    yotta = 24\n    zetta = 21\n    exa = 18\n    peta = 15\n    tera = 12\n    giga = 9\n    mega = 6\n    kilo = 3\n    hecto = 2\n    deca = 1\n    deci = -1\n    centi = -2\n    milli = -3\n    micro = -6\n    nano = -9\n    pico = -12\n    femto = -15\n    atto = -18\n    zepto = -21\n    yocto = -24\n\n\nclass BinaryUnit(Enum):\n    yotta = 8\n    zetta = 7\n    exa = 6\n    peta = 5\n    tera = 4\n    giga = 3\n    mega = 2\n    kilo = 1\n\n\ndef convert_si_prefix(\n    known_amount: float,\n    known_prefix: str | SIUnit,\n    unknown_prefix: str | SIUnit,\n) -> float:\n    \"\"\"\n    Wikipedia reference: https://en.wikipedia.org/wiki/Binary_prefix\n    Wikipedia reference: https://en.wikipedia.org/wiki/International_System_of_Units\n    >>> convert_si_prefix(1, SIUnit.giga, SIUnit.mega)\n    1000\n    >>> convert_si_prefix(1, SIUnit.mega, SIUnit.giga)\n    0.001\n    >>> convert_si_prefix(1, SIUnit.kilo, SIUnit.kilo)\n    1\n    >>> convert_si_prefix(1, 'giga', 'mega')\n    1000\n    >>> convert_si_prefix(1, 'gIGa', 'mEGa')\n    1000\n    \"\"\"\n    if isinstance(known_prefix, str):\n        known_prefix = SIUnit[known_prefix.lower()]\n    if isinstance(unknown_prefix, str):\n        unknown_prefix = SIUnit[unknown_prefix.lower()]\n    unknown_amount: float = known_amount * (\n        10 ** (known_prefix.value - unknown_prefix.value)\n    )\n    return unknown_amount\n\n\ndef convert_binary_prefix(\n    known_amount: float,\n    known_prefix: str | BinaryUnit,\n    unknown_prefix: str | BinaryUnit,\n) -> float:\n    \"\"\"\n    Wikipedia reference: https://en.wikipedia.org/wiki/Metric_prefix\n    >>> convert_binary_prefix(1, BinaryUnit.giga, BinaryUnit.mega)\n    1024\n    >>> convert_binary_prefix(1, BinaryUnit.mega, BinaryUnit.giga)\n    0.0009765625\n    >>> convert_binary_prefix(1, BinaryUnit.kilo, BinaryUnit.kilo)\n    1\n    >>> convert_binary_prefix(1, 'giga', 'mega')\n    1024\n    >>> convert_binary_prefix(1, 'gIGa', 'mEGa')\n    1024\n    \"\"\"\n    if isinstance(known_prefix, str):\n        known_prefix = BinaryUnit[known_prefix.lower()]\n    if isinstance(unknown_prefix, str):\n        unknown_prefix = BinaryUnit[unknown_prefix.lower()]\n    unknown_amount: float = known_amount * (\n        2 ** ((known_prefix.value - unknown_prefix.value) * 10)\n    )\n    return unknown_amount\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "conversions/prefix_conversions_string.py",
    "content": "\"\"\"\n* Author: Manuel Di Lullo (https://github.com/manueldilullo)\n* Description: Convert a number to use the correct SI or Binary unit prefix.\n\nInspired by prefix_conversion.py file in this repository by lance-pyles\n\nURL: https://en.wikipedia.org/wiki/Metric_prefix#List_of_SI_prefixes\nURL: https://en.wikipedia.org/wiki/Binary_prefix\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom enum import Enum, unique\nfrom typing import TypeVar\n\n# Create a generic variable that can be 'Enum', or any subclass.\nT = TypeVar(\"T\", bound=\"Enum\")\n\n\n@unique\nclass BinaryUnit(Enum):\n    yotta = 80\n    zetta = 70\n    exa = 60\n    peta = 50\n    tera = 40\n    giga = 30\n    mega = 20\n    kilo = 10\n\n\n@unique\nclass SIUnit(Enum):\n    yotta = 24\n    zetta = 21\n    exa = 18\n    peta = 15\n    tera = 12\n    giga = 9\n    mega = 6\n    kilo = 3\n    hecto = 2\n    deca = 1\n    deci = -1\n    centi = -2\n    milli = -3\n    micro = -6\n    nano = -9\n    pico = -12\n    femto = -15\n    atto = -18\n    zepto = -21\n    yocto = -24\n\n    @classmethod\n    def get_positive(cls) -> dict:\n        \"\"\"\n        Returns a dictionary with only the elements of this enum\n        that has a positive value\n        >>> from itertools import islice\n        >>> positive = SIUnit.get_positive()\n        >>> inc = iter(positive.items())\n        >>> dict(islice(inc, len(positive) // 2))\n        {'yotta': 24, 'zetta': 21, 'exa': 18, 'peta': 15, 'tera': 12}\n        >>> dict(inc)\n        {'giga': 9, 'mega': 6, 'kilo': 3, 'hecto': 2, 'deca': 1}\n        \"\"\"\n        return {unit.name: unit.value for unit in cls if unit.value > 0}\n\n    @classmethod\n    def get_negative(cls) -> dict:\n        \"\"\"\n        Returns a dictionary with only the elements of this enum\n        that has a negative value\n        @example\n        >>> from itertools import islice\n        >>> negative = SIUnit.get_negative()\n        >>> inc = iter(negative.items())\n        >>> dict(islice(inc, len(negative) // 2))\n        {'deci': -1, 'centi': -2, 'milli': -3, 'micro': -6, 'nano': -9}\n        >>> dict(inc)\n        {'pico': -12, 'femto': -15, 'atto': -18, 'zepto': -21, 'yocto': -24}\n        \"\"\"\n        return {unit.name: unit.value for unit in cls if unit.value < 0}\n\n\ndef add_si_prefix(value: float) -> str:\n    \"\"\"\n    Function that converts a number to his version with SI prefix\n    @input value (an integer)\n    @example:\n    >>> add_si_prefix(10000)\n    '10.0 kilo'\n    \"\"\"\n    prefixes = SIUnit.get_positive() if value > 0 else SIUnit.get_negative()\n    for name_prefix, value_prefix in prefixes.items():\n        numerical_part = value / (10**value_prefix)\n        if numerical_part > 1:\n            return f\"{numerical_part!s} {name_prefix}\"\n    return str(value)\n\n\ndef add_binary_prefix(value: float) -> str:\n    \"\"\"\n    Function that converts a number to his version with Binary prefix\n    @input value (an integer)\n    @example:\n    >>> add_binary_prefix(65536)\n    '64.0 kilo'\n    \"\"\"\n    for prefix in BinaryUnit:\n        numerical_part = value / (2**prefix.value)\n        if numerical_part > 1:\n            return f\"{numerical_part!s} {prefix.name}\"\n    return str(value)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "conversions/pressure_conversions.py",
    "content": "\"\"\"\r\nConversion of pressure units.\r\nAvailable Units:- Pascal,Bar,Kilopascal,Megapascal,psi(pound per square inch),\r\ninHg(in mercury column),torr,atm\r\nUSAGE :\r\n-> Import this file into their respective project.\r\n-> Use the function pressure_conversion() for conversion of pressure units.\r\n-> Parameters :\r\n    -> value : The number of from units you want to convert\r\n    -> from_type : From which type you want to convert\r\n    -> to_type : To which type you want to convert\r\nREFERENCES :\r\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Pascal_(unit)\r\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Pound_per_square_inch\r\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Inch_of_mercury\r\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Torr\r\n-> https://en.wikipedia.org/wiki/Standard_atmosphere_(unit)\r\n-> https://msestudent.com/what-are-the-units-of-pressure/\r\n-> https://www.unitconverters.net/pressure-converter.html\r\n\"\"\"\r\n\r\nfrom typing import NamedTuple\r\n\r\n\r\nclass FromTo(NamedTuple):\r\n    from_factor: float\r\n    to_factor: float\r\n\r\n\r\nPRESSURE_CONVERSION = {\r\n    \"atm\": FromTo(1, 1),\r\n    \"pascal\": FromTo(0.0000098, 101325),\r\n    \"bar\": FromTo(0.986923, 1.01325),\r\n    \"kilopascal\": FromTo(0.00986923, 101.325),\r\n    \"megapascal\": FromTo(9.86923, 0.101325),\r\n    \"psi\": FromTo(0.068046, 14.6959),\r\n    \"inHg\": FromTo(0.0334211, 29.9213),\r\n    \"torr\": FromTo(0.00131579, 760),\r\n}\r\n\r\n\r\ndef pressure_conversion(value: float, from_type: str, to_type: str) -> float:\r\n    \"\"\"\r\n    Conversion between pressure units.\r\n    >>> pressure_conversion(4, \"atm\", \"pascal\")\r\n    405300\r\n    >>> pressure_conversion(1, \"pascal\", \"psi\")\r\n    0.00014401981999999998\r\n    >>> pressure_conversion(1, \"bar\", \"atm\")\r\n    0.986923\r\n    >>> pressure_conversion(3, \"kilopascal\", \"bar\")\r\n    0.029999991892499998\r\n    >>> pressure_conversion(2, \"megapascal\", \"psi\")\r\n    290.074434314\r\n    >>> pressure_conversion(4, \"psi\", \"torr\")\r\n    206.85984\r\n    >>> pressure_conversion(1, \"inHg\", \"atm\")\r\n    0.0334211\r\n    >>> pressure_conversion(1, \"torr\", \"psi\")\r\n    0.019336718261000002\r\n    >>> pressure_conversion(4, \"wrongUnit\", \"atm\")\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Invalid 'from_type' value: 'wrongUnit'  Supported values are:\r\n    atm, pascal, bar, kilopascal, megapascal, psi, inHg, torr\r\n    \"\"\"\r\n    if from_type not in PRESSURE_CONVERSION:\r\n        raise ValueError(\r\n            f\"Invalid 'from_type' value: {from_type!r}  Supported values are:\\n\"\r\n            + \", \".join(PRESSURE_CONVERSION)\r\n        )\r\n    if to_type not in PRESSURE_CONVERSION:\r\n        raise ValueError(\r\n            f\"Invalid 'to_type' value: {to_type!r}.  Supported values are:\\n\"\r\n            + \", \".join(PRESSURE_CONVERSION)\r\n        )\r\n    return (\r\n        value\r\n        * PRESSURE_CONVERSION[from_type].from_factor\r\n        * PRESSURE_CONVERSION[to_type].to_factor\r\n    )\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n"
  },
  {
    "path": "conversions/rectangular_to_polar.py",
    "content": "import math\n\n\ndef rectangular_to_polar(real: float, img: float) -> tuple[float, float]:\n    \"\"\"\n    https://en.wikipedia.org/wiki/Polar_coordinate_system\n\n    >>> rectangular_to_polar(5,-5)\n    (7.07, -45.0)\n    >>> rectangular_to_polar(-1,1)\n    (1.41, 135.0)\n    >>> rectangular_to_polar(-1,-1)\n    (1.41, -135.0)\n    >>> rectangular_to_polar(1e-10,1e-10)\n    (0.0, 45.0)\n    >>> rectangular_to_polar(-1e-10,1e-10)\n    (0.0, 135.0)\n    >>> rectangular_to_polar(9.75,5.93)\n    (11.41, 31.31)\n    >>> rectangular_to_polar(10000,99999)\n    (100497.76, 84.29)\n    \"\"\"\n\n    mod = round(math.sqrt((real**2) + (img**2)), 2)\n    ang = round(math.degrees(math.atan2(img, real)), 2)\n    return (mod, ang)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "conversions/rgb_cmyk_conversion.py",
    "content": "def rgb_to_cmyk(r_input: int, g_input: int, b_input: int) -> tuple[int, int, int, int]:\r\n    \"\"\"\r\n    Simple RGB to CMYK conversion. Returns percentages of CMYK paint.\r\n    https://www.programmingalgorithms.com/algorithm/rgb-to-cmyk/\r\n\r\n    Note: this is a very popular algorithm that converts colors linearly and gives\r\n    only approximate results. Actual preparation for printing requires advanced color\r\n    conversion considering the color profiles and parameters of the target device.\r\n\r\n    >>> rgb_to_cmyk(255, 200, \"a\")\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Expected int, found (<class 'int'>, <class 'int'>, <class 'str'>)\r\n\r\n    >>> rgb_to_cmyk(255, 255, 999)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Expected int of the range 0..255\r\n\r\n    >>> rgb_to_cmyk(255, 255, 255)  # white\r\n    (0, 0, 0, 0)\r\n\r\n    >>> rgb_to_cmyk(128, 128, 128)  # gray\r\n    (0, 0, 0, 50)\r\n\r\n    >>> rgb_to_cmyk(0, 0, 0)    # black\r\n    (0, 0, 0, 100)\r\n\r\n    >>> rgb_to_cmyk(255, 0, 0)  # red\r\n    (0, 100, 100, 0)\r\n\r\n    >>> rgb_to_cmyk(0, 255, 0)  # green\r\n    (100, 0, 100, 0)\r\n\r\n    >>> rgb_to_cmyk(0, 0, 255)    # blue\r\n    (100, 100, 0, 0)\r\n    \"\"\"\r\n\r\n    if (\r\n        not isinstance(r_input, int)\r\n        or not isinstance(g_input, int)\r\n        or not isinstance(b_input, int)\r\n    ):\r\n        msg = f\"Expected int, found {type(r_input), type(g_input), type(b_input)}\"\r\n        raise ValueError(msg)\r\n\r\n    if not 0 <= r_input < 256 or not 0 <= g_input < 256 or not 0 <= b_input < 256:\r\n        raise ValueError(\"Expected int of the range 0..255\")\r\n\r\n    # changing range from 0..255 to 0..1\r\n    r = r_input / 255\r\n    g = g_input / 255\r\n    b = b_input / 255\r\n\r\n    k = 1 - max(r, g, b)\r\n\r\n    if k == 1:  # pure black\r\n        return 0, 0, 0, 100\r\n\r\n    c = round(100 * (1 - r - k) / (1 - k))\r\n    m = round(100 * (1 - g - k) / (1 - k))\r\n    y = round(100 * (1 - b - k) / (1 - k))\r\n    k = round(100 * k)\r\n\r\n    return c, m, y, k\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    from doctest import testmod\r\n\r\n    testmod()\r\n"
  },
  {
    "path": "conversions/rgb_hsv_conversion.py",
    "content": "\"\"\"\nThe RGB color model is an additive color model in which red, green, and blue light\nare added together in various ways to reproduce a broad array of colors. The name\nof the model comes from the initials of the three additive primary colors, red,\ngreen, and blue. Meanwhile, the HSV representation models how colors appear under\nlight. In it, colors are represented using three components: hue, saturation and\n(brightness-)value. This file provides functions for converting colors from one\nrepresentation to the other.\n\n(description adapted from https://en.wikipedia.org/wiki/RGB_color_model and\nhttps://en.wikipedia.org/wiki/HSL_and_HSV).\n\"\"\"\n\n\ndef hsv_to_rgb(hue: float, saturation: float, value: float) -> list[int]:\n    \"\"\"\n    Conversion from the HSV-representation to the RGB-representation.\n    Expected RGB-values taken from\n    https://www.rapidtables.com/convert/color/hsv-to-rgb.html\n\n    >>> hsv_to_rgb(0, 0, 0)\n    [0, 0, 0]\n    >>> hsv_to_rgb(0, 0, 1)\n    [255, 255, 255]\n    >>> hsv_to_rgb(0, 1, 1)\n    [255, 0, 0]\n    >>> hsv_to_rgb(60, 1, 1)\n    [255, 255, 0]\n    >>> hsv_to_rgb(120, 1, 1)\n    [0, 255, 0]\n    >>> hsv_to_rgb(240, 1, 1)\n    [0, 0, 255]\n    >>> hsv_to_rgb(300, 1, 1)\n    [255, 0, 255]\n    >>> hsv_to_rgb(180, 0.5, 0.5)\n    [64, 128, 128]\n    >>> hsv_to_rgb(234, 0.14, 0.88)\n    [193, 196, 224]\n    >>> hsv_to_rgb(330, 0.75, 0.5)\n    [128, 32, 80]\n    \"\"\"\n    if hue < 0 or hue > 360:\n        raise Exception(\"hue should be between 0 and 360\")\n\n    if saturation < 0 or saturation > 1:\n        raise Exception(\"saturation should be between 0 and 1\")\n\n    if value < 0 or value > 1:\n        raise Exception(\"value should be between 0 and 1\")\n\n    chroma = value * saturation\n    hue_section = hue / 60\n    second_largest_component = chroma * (1 - abs(hue_section % 2 - 1))\n    match_value = value - chroma\n\n    if hue_section >= 0 and hue_section <= 1:\n        red = round(255 * (chroma + match_value))\n        green = round(255 * (second_largest_component + match_value))\n        blue = round(255 * (match_value))\n    elif hue_section > 1 and hue_section <= 2:\n        red = round(255 * (second_largest_component + match_value))\n        green = round(255 * (chroma + match_value))\n        blue = round(255 * (match_value))\n    elif hue_section > 2 and hue_section <= 3:\n        red = round(255 * (match_value))\n        green = round(255 * (chroma + match_value))\n        blue = round(255 * (second_largest_component + match_value))\n    elif hue_section > 3 and hue_section <= 4:\n        red = round(255 * (match_value))\n        green = round(255 * (second_largest_component + match_value))\n        blue = round(255 * (chroma + match_value))\n    elif hue_section > 4 and hue_section <= 5:\n        red = round(255 * (second_largest_component + match_value))\n        green = round(255 * (match_value))\n        blue = round(255 * (chroma + match_value))\n    else:\n        red = round(255 * (chroma + match_value))\n        green = round(255 * (match_value))\n        blue = round(255 * (second_largest_component + match_value))\n\n    return [red, green, blue]\n\n\ndef rgb_to_hsv(red: int, green: int, blue: int) -> list[float]:\n    \"\"\"\n    Conversion from the RGB-representation to the HSV-representation.\n    The tested values are the reverse values from the hsv_to_rgb-doctests.\n    Function \"approximately_equal_hsv\" is needed because of small deviations due to\n    rounding for the RGB-values.\n\n    >>> approximately_equal_hsv(rgb_to_hsv(0, 0, 0), [0, 0, 0])\n    True\n    >>> approximately_equal_hsv(rgb_to_hsv(255, 255, 255), [0, 0, 1])\n    True\n    >>> approximately_equal_hsv(rgb_to_hsv(255, 0, 0), [0, 1, 1])\n    True\n    >>> approximately_equal_hsv(rgb_to_hsv(255, 255, 0), [60, 1, 1])\n    True\n    >>> approximately_equal_hsv(rgb_to_hsv(0, 255, 0), [120, 1, 1])\n    True\n    >>> approximately_equal_hsv(rgb_to_hsv(0, 0, 255), [240, 1, 1])\n    True\n    >>> approximately_equal_hsv(rgb_to_hsv(255, 0, 255), [300, 1, 1])\n    True\n    >>> approximately_equal_hsv(rgb_to_hsv(64, 128, 128), [180, 0.5, 0.5])\n    True\n    >>> approximately_equal_hsv(rgb_to_hsv(193, 196, 224), [234, 0.14, 0.88])\n    True\n    >>> approximately_equal_hsv(rgb_to_hsv(128, 32, 80), [330, 0.75, 0.5])\n    True\n    \"\"\"\n    if red < 0 or red > 255:\n        raise Exception(\"red should be between 0 and 255\")\n\n    if green < 0 or green > 255:\n        raise Exception(\"green should be between 0 and 255\")\n\n    if blue < 0 or blue > 255:\n        raise Exception(\"blue should be between 0 and 255\")\n\n    float_red = red / 255\n    float_green = green / 255\n    float_blue = blue / 255\n    value = max(float_red, float_green, float_blue)\n    chroma = value - min(float_red, float_green, float_blue)\n    saturation = 0 if value == 0 else chroma / value\n\n    if chroma == 0:\n        hue = 0.0\n    elif value == float_red:\n        hue = 60 * (0 + (float_green - float_blue) / chroma)\n    elif value == float_green:\n        hue = 60 * (2 + (float_blue - float_red) / chroma)\n    else:\n        hue = 60 * (4 + (float_red - float_green) / chroma)\n\n    hue = (hue + 360) % 360\n\n    return [hue, saturation, value]\n\n\ndef approximately_equal_hsv(hsv_1: list[float], hsv_2: list[float]) -> bool:\n    \"\"\"\n    Utility-function to check that two hsv-colors are approximately equal\n\n    >>> approximately_equal_hsv([0, 0, 0], [0, 0, 0])\n    True\n    >>> approximately_equal_hsv([180, 0.5, 0.3], [179.9999, 0.500001, 0.30001])\n    True\n    >>> approximately_equal_hsv([0, 0, 0], [1, 0, 0])\n    False\n    >>> approximately_equal_hsv([180, 0.5, 0.3], [179.9999, 0.6, 0.30001])\n    False\n    \"\"\"\n    check_hue = abs(hsv_1[0] - hsv_2[0]) < 0.2\n    check_saturation = abs(hsv_1[1] - hsv_2[1]) < 0.002\n    check_value = abs(hsv_1[2] - hsv_2[2]) < 0.002\n\n    return check_hue and check_saturation and check_value\n"
  },
  {
    "path": "conversions/roman_numerals.py",
    "content": "ROMAN = [\r\n    (1000, \"M\"),\r\n    (900, \"CM\"),\r\n    (500, \"D\"),\r\n    (400, \"CD\"),\r\n    (100, \"C\"),\r\n    (90, \"XC\"),\r\n    (50, \"L\"),\r\n    (40, \"XL\"),\r\n    (10, \"X\"),\r\n    (9, \"IX\"),\r\n    (5, \"V\"),\r\n    (4, \"IV\"),\r\n    (1, \"I\"),\r\n]\r\n\r\n\r\ndef roman_to_int(roman: str) -> int:\r\n    \"\"\"\r\n    LeetCode No. 13 Roman to Integer\r\n    Given a roman numeral, convert it to an integer.\r\n    Input is guaranteed to be within the range from 1 to 3999.\r\n    https://en.wikipedia.org/wiki/Roman_numerals\r\n    >>> tests = {\"III\": 3, \"CLIV\": 154, \"MIX\": 1009, \"MMD\": 2500, \"MMMCMXCIX\": 3999}\r\n    >>> all(roman_to_int(key) == value for key, value in tests.items())\r\n    True\r\n    \"\"\"\r\n    vals = {\"I\": 1, \"V\": 5, \"X\": 10, \"L\": 50, \"C\": 100, \"D\": 500, \"M\": 1000}\r\n    total = 0\r\n    place = 0\r\n    while place < len(roman):\r\n        if (place + 1 < len(roman)) and (vals[roman[place]] < vals[roman[place + 1]]):\r\n            total += vals[roman[place + 1]] - vals[roman[place]]\r\n            place += 2\r\n        else:\r\n            total += vals[roman[place]]\r\n            place += 1\r\n    return total\r\n\r\n\r\ndef int_to_roman(number: int) -> str:\r\n    \"\"\"\r\n    Given a integer, convert it to an roman numeral.\r\n    https://en.wikipedia.org/wiki/Roman_numerals\r\n    >>> tests = {\"III\": 3, \"CLIV\": 154, \"MIX\": 1009, \"MMD\": 2500, \"MMMCMXCIX\": 3999}\r\n    >>> all(int_to_roman(value) == key for key, value in tests.items())\r\n    True\r\n    \"\"\"\r\n    result = []\r\n    for arabic, roman in ROMAN:\r\n        (factor, number) = divmod(number, arabic)\r\n        result.append(roman * factor)\r\n        if number == 0:\r\n            break\r\n    return \"\".join(result)\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n"
  },
  {
    "path": "conversions/speed_conversions.py",
    "content": "\"\"\"\nConvert speed units\n\nhttps://en.wikipedia.org/wiki/Kilometres_per_hour\nhttps://en.wikipedia.org/wiki/Miles_per_hour\nhttps://en.wikipedia.org/wiki/Knot_(unit)\nhttps://en.wikipedia.org/wiki/Metre_per_second\n\"\"\"\n\nspeed_chart: dict[str, float] = {\n    \"km/h\": 1.0,\n    \"m/s\": 3.6,\n    \"mph\": 1.609344,\n    \"knot\": 1.852,\n}\n\nspeed_chart_inverse: dict[str, float] = {\n    \"km/h\": 1.0,\n    \"m/s\": 0.277777778,\n    \"mph\": 0.621371192,\n    \"knot\": 0.539956803,\n}\n\n\ndef convert_speed(speed: float, unit_from: str, unit_to: str) -> float:\n    \"\"\"\n    Convert speed from one unit to another using the speed_chart above.\n\n    \"km/h\": 1.0,\n    \"m/s\": 3.6,\n    \"mph\": 1.609344,\n    \"knot\": 1.852,\n\n    >>> convert_speed(100, \"km/h\", \"m/s\")\n    27.778\n    >>> convert_speed(100, \"km/h\", \"mph\")\n    62.137\n    >>> convert_speed(100, \"km/h\", \"knot\")\n    53.996\n    >>> convert_speed(100, \"m/s\", \"km/h\")\n    360.0\n    >>> convert_speed(100, \"m/s\", \"mph\")\n    223.694\n    >>> convert_speed(100, \"m/s\", \"knot\")\n    194.384\n    >>> convert_speed(100, \"mph\", \"km/h\")\n    160.934\n    >>> convert_speed(100, \"mph\", \"m/s\")\n    44.704\n    >>> convert_speed(100, \"mph\", \"knot\")\n    86.898\n    >>> convert_speed(100, \"knot\", \"km/h\")\n    185.2\n    >>> convert_speed(100, \"knot\", \"m/s\")\n    51.444\n    >>> convert_speed(100, \"knot\", \"mph\")\n    115.078\n    \"\"\"\n    if unit_to not in speed_chart or unit_from not in speed_chart_inverse:\n        msg = (\n            f\"Incorrect 'from_type' or 'to_type' value: {unit_from!r}, {unit_to!r}\\n\"\n            f\"Valid values are: {', '.join(speed_chart_inverse)}\"\n        )\n        raise ValueError(msg)\n    return round(speed * speed_chart[unit_from] * speed_chart_inverse[unit_to], 3)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "conversions/temperature_conversions.py",
    "content": "\"\"\"Convert between different units of temperature\"\"\"\n\n\ndef celsius_to_fahrenheit(celsius: float, ndigits: int = 2) -> float:\n    \"\"\"\n    Convert a given value from Celsius to Fahrenheit and round it to 2 decimal places.\n    Wikipedia reference: https://en.wikipedia.org/wiki/Celsius\n    Wikipedia reference: https://en.wikipedia.org/wiki/Fahrenheit\n\n    >>> celsius_to_fahrenheit(273.354, 3)\n    524.037\n    >>> celsius_to_fahrenheit(273.354, 0)\n    524.0\n    >>> celsius_to_fahrenheit(-40.0)\n    -40.0\n    >>> celsius_to_fahrenheit(-20.0)\n    -4.0\n    >>> celsius_to_fahrenheit(0)\n    32.0\n    >>> celsius_to_fahrenheit(20)\n    68.0\n    >>> celsius_to_fahrenheit(\"40\")\n    104.0\n    >>> celsius_to_fahrenheit(\"celsius\")\n    Traceback (most recent call last):\n        ...\n    ValueError: could not convert string to float: 'celsius'\n    \"\"\"\n    return round((float(celsius) * 9 / 5) + 32, ndigits)\n\n\ndef celsius_to_kelvin(celsius: float, ndigits: int = 2) -> float:\n    \"\"\"\n    Convert a given value from Celsius to Kelvin and round it to 2 decimal places.\n    Wikipedia reference: https://en.wikipedia.org/wiki/Celsius\n    Wikipedia reference: https://en.wikipedia.org/wiki/Kelvin\n\n    >>> celsius_to_kelvin(273.354, 3)\n    546.504\n    >>> celsius_to_kelvin(273.354, 0)\n    547.0\n    >>> celsius_to_kelvin(0)\n    273.15\n    >>> celsius_to_kelvin(20.0)\n    293.15\n    >>> celsius_to_kelvin(\"40\")\n    313.15\n    >>> celsius_to_kelvin(\"celsius\")\n    Traceback (most recent call last):\n        ...\n    ValueError: could not convert string to float: 'celsius'\n    \"\"\"\n    return round(float(celsius) + 273.15, ndigits)\n\n\ndef celsius_to_rankine(celsius: float, ndigits: int = 2) -> float:\n    \"\"\"\n    Convert a given value from Celsius to Rankine and round it to 2 decimal places.\n    Wikipedia reference: https://en.wikipedia.org/wiki/Celsius\n    Wikipedia reference: https://en.wikipedia.org/wiki/Rankine_scale\n\n    >>> celsius_to_rankine(273.354, 3)\n    983.707\n    >>> celsius_to_rankine(273.354, 0)\n    984.0\n    >>> celsius_to_rankine(0)\n    491.67\n    >>> celsius_to_rankine(20.0)\n    527.67\n    >>> celsius_to_rankine(\"40\")\n    563.67\n    >>> celsius_to_rankine(\"celsius\")\n    Traceback (most recent call last):\n        ...\n    ValueError: could not convert string to float: 'celsius'\n    \"\"\"\n    return round((float(celsius) * 9 / 5) + 491.67, ndigits)\n\n\ndef fahrenheit_to_celsius(fahrenheit: float, ndigits: int = 2) -> float:\n    \"\"\"\n    Convert a given value from Fahrenheit to Celsius and round it to 2 decimal places.\n    Wikipedia reference: https://en.wikipedia.org/wiki/Fahrenheit\n    Wikipedia reference: https://en.wikipedia.org/wiki/Celsius\n\n    >>> fahrenheit_to_celsius(273.354, 3)\n    134.086\n    >>> fahrenheit_to_celsius(273.354, 0)\n    134.0\n    >>> fahrenheit_to_celsius(0)\n    -17.78\n    >>> fahrenheit_to_celsius(20.0)\n    -6.67\n    >>> fahrenheit_to_celsius(40.0)\n    4.44\n    >>> fahrenheit_to_celsius(60)\n    15.56\n    >>> fahrenheit_to_celsius(80)\n    26.67\n    >>> fahrenheit_to_celsius(\"100\")\n    37.78\n    >>> fahrenheit_to_celsius(\"fahrenheit\")\n    Traceback (most recent call last):\n        ...\n    ValueError: could not convert string to float: 'fahrenheit'\n    \"\"\"\n    return round((float(fahrenheit) - 32) * 5 / 9, ndigits)\n\n\ndef fahrenheit_to_kelvin(fahrenheit: float, ndigits: int = 2) -> float:\n    \"\"\"\n    Convert a given value from Fahrenheit to Kelvin and round it to 2 decimal places.\n    Wikipedia reference: https://en.wikipedia.org/wiki/Fahrenheit\n    Wikipedia reference: https://en.wikipedia.org/wiki/Kelvin\n\n    >>> fahrenheit_to_kelvin(273.354, 3)\n    407.236\n    >>> fahrenheit_to_kelvin(273.354, 0)\n    407.0\n    >>> fahrenheit_to_kelvin(0)\n    255.37\n    >>> fahrenheit_to_kelvin(20.0)\n    266.48\n    >>> fahrenheit_to_kelvin(40.0)\n    277.59\n    >>> fahrenheit_to_kelvin(60)\n    288.71\n    >>> fahrenheit_to_kelvin(80)\n    299.82\n    >>> fahrenheit_to_kelvin(\"100\")\n    310.93\n    >>> fahrenheit_to_kelvin(\"fahrenheit\")\n    Traceback (most recent call last):\n        ...\n    ValueError: could not convert string to float: 'fahrenheit'\n    \"\"\"\n    return round(((float(fahrenheit) - 32) * 5 / 9) + 273.15, ndigits)\n\n\ndef fahrenheit_to_rankine(fahrenheit: float, ndigits: int = 2) -> float:\n    \"\"\"\n    Convert a given value from Fahrenheit to Rankine and round it to 2 decimal places.\n    Wikipedia reference: https://en.wikipedia.org/wiki/Fahrenheit\n    Wikipedia reference: https://en.wikipedia.org/wiki/Rankine_scale\n\n    >>> fahrenheit_to_rankine(273.354, 3)\n    733.024\n    >>> fahrenheit_to_rankine(273.354, 0)\n    733.0\n    >>> fahrenheit_to_rankine(0)\n    459.67\n    >>> fahrenheit_to_rankine(20.0)\n    479.67\n    >>> fahrenheit_to_rankine(40.0)\n    499.67\n    >>> fahrenheit_to_rankine(60)\n    519.67\n    >>> fahrenheit_to_rankine(80)\n    539.67\n    >>> fahrenheit_to_rankine(\"100\")\n    559.67\n    >>> fahrenheit_to_rankine(\"fahrenheit\")\n    Traceback (most recent call last):\n        ...\n    ValueError: could not convert string to float: 'fahrenheit'\n    \"\"\"\n    return round(float(fahrenheit) + 459.67, ndigits)\n\n\ndef kelvin_to_celsius(kelvin: float, ndigits: int = 2) -> float:\n    \"\"\"\n    Convert a given value from Kelvin to Celsius and round it to 2 decimal places.\n    Wikipedia reference: https://en.wikipedia.org/wiki/Kelvin\n    Wikipedia reference: https://en.wikipedia.org/wiki/Celsius\n\n    >>> kelvin_to_celsius(273.354, 3)\n    0.204\n    >>> kelvin_to_celsius(273.354, 0)\n    0.0\n    >>> kelvin_to_celsius(273.15)\n    0.0\n    >>> kelvin_to_celsius(300)\n    26.85\n    >>> kelvin_to_celsius(\"315.5\")\n    42.35\n    >>> kelvin_to_celsius(\"kelvin\")\n    Traceback (most recent call last):\n        ...\n    ValueError: could not convert string to float: 'kelvin'\n    \"\"\"\n    return round(float(kelvin) - 273.15, ndigits)\n\n\ndef kelvin_to_fahrenheit(kelvin: float, ndigits: int = 2) -> float:\n    \"\"\"\n    Convert a given value from Kelvin to Fahrenheit and round it to 2 decimal places.\n    Wikipedia reference: https://en.wikipedia.org/wiki/Kelvin\n    Wikipedia reference: https://en.wikipedia.org/wiki/Fahrenheit\n\n    >>> kelvin_to_fahrenheit(273.354, 3)\n    32.367\n    >>> kelvin_to_fahrenheit(273.354, 0)\n    32.0\n    >>> kelvin_to_fahrenheit(273.15)\n    32.0\n    >>> kelvin_to_fahrenheit(300)\n    80.33\n    >>> kelvin_to_fahrenheit(\"315.5\")\n    108.23\n    >>> kelvin_to_fahrenheit(\"kelvin\")\n    Traceback (most recent call last):\n        ...\n    ValueError: could not convert string to float: 'kelvin'\n    \"\"\"\n    return round(((float(kelvin) - 273.15) * 9 / 5) + 32, ndigits)\n\n\ndef kelvin_to_rankine(kelvin: float, ndigits: int = 2) -> float:\n    \"\"\"\n    Convert a given value from Kelvin to Rankine and round it to 2 decimal places.\n    Wikipedia reference: https://en.wikipedia.org/wiki/Kelvin\n    Wikipedia reference: https://en.wikipedia.org/wiki/Rankine_scale\n\n    >>> kelvin_to_rankine(273.354, 3)\n    492.037\n    >>> kelvin_to_rankine(273.354, 0)\n    492.0\n    >>> kelvin_to_rankine(0)\n    0.0\n    >>> kelvin_to_rankine(20.0)\n    36.0\n    >>> kelvin_to_rankine(\"40\")\n    72.0\n    >>> kelvin_to_rankine(\"kelvin\")\n    Traceback (most recent call last):\n        ...\n    ValueError: could not convert string to float: 'kelvin'\n    \"\"\"\n    return round((float(kelvin) * 9 / 5), ndigits)\n\n\ndef rankine_to_celsius(rankine: float, ndigits: int = 2) -> float:\n    \"\"\"\n    Convert a given value from Rankine to Celsius and round it to 2 decimal places.\n    Wikipedia reference: https://en.wikipedia.org/wiki/Rankine_scale\n    Wikipedia reference: https://en.wikipedia.org/wiki/Celsius\n\n    >>> rankine_to_celsius(273.354, 3)\n    -121.287\n    >>> rankine_to_celsius(273.354, 0)\n    -121.0\n    >>> rankine_to_celsius(273.15)\n    -121.4\n    >>> rankine_to_celsius(300)\n    -106.48\n    >>> rankine_to_celsius(\"315.5\")\n    -97.87\n    >>> rankine_to_celsius(\"rankine\")\n    Traceback (most recent call last):\n        ...\n    ValueError: could not convert string to float: 'rankine'\n    \"\"\"\n    return round((float(rankine) - 491.67) * 5 / 9, ndigits)\n\n\ndef rankine_to_fahrenheit(rankine: float, ndigits: int = 2) -> float:\n    \"\"\"\n    Convert a given value from Rankine to Fahrenheit and round it to 2 decimal places.\n    Wikipedia reference: https://en.wikipedia.org/wiki/Rankine_scale\n    Wikipedia reference: https://en.wikipedia.org/wiki/Fahrenheit\n\n    >>> rankine_to_fahrenheit(273.15)\n    -186.52\n    >>> rankine_to_fahrenheit(300)\n    -159.67\n    >>> rankine_to_fahrenheit(\"315.5\")\n    -144.17\n    >>> rankine_to_fahrenheit(\"rankine\")\n    Traceback (most recent call last):\n        ...\n    ValueError: could not convert string to float: 'rankine'\n    \"\"\"\n    return round(float(rankine) - 459.67, ndigits)\n\n\ndef rankine_to_kelvin(rankine: float, ndigits: int = 2) -> float:\n    \"\"\"\n    Convert a given value from Rankine to Kelvin and round it to 2 decimal places.\n    Wikipedia reference: https://en.wikipedia.org/wiki/Rankine_scale\n    Wikipedia reference: https://en.wikipedia.org/wiki/Kelvin\n\n    >>> rankine_to_kelvin(0)\n    0.0\n    >>> rankine_to_kelvin(20.0)\n    11.11\n    >>> rankine_to_kelvin(\"40\")\n    22.22\n    >>> rankine_to_kelvin(\"rankine\")\n    Traceback (most recent call last):\n        ...\n    ValueError: could not convert string to float: 'rankine'\n    \"\"\"\n    return round((float(rankine) * 5 / 9), ndigits)\n\n\ndef reaumur_to_kelvin(reaumur: float, ndigits: int = 2) -> float:\n    \"\"\"\n    Convert a given value from reaumur to Kelvin and round it to 2 decimal places.\n    Reference:- http://www.csgnetwork.com/temp2conv.html\n\n    >>> reaumur_to_kelvin(0)\n    273.15\n    >>> reaumur_to_kelvin(20.0)\n    298.15\n    >>> reaumur_to_kelvin(40)\n    323.15\n    >>> reaumur_to_kelvin(\"reaumur\")\n    Traceback (most recent call last):\n        ...\n    ValueError: could not convert string to float: 'reaumur'\n    \"\"\"\n    return round((float(reaumur) * 1.25 + 273.15), ndigits)\n\n\ndef reaumur_to_fahrenheit(reaumur: float, ndigits: int = 2) -> float:\n    \"\"\"\n    Convert a given value from reaumur to fahrenheit and round it to 2 decimal places.\n    Reference:- http://www.csgnetwork.com/temp2conv.html\n\n    >>> reaumur_to_fahrenheit(0)\n    32.0\n    >>> reaumur_to_fahrenheit(20.0)\n    77.0\n    >>> reaumur_to_fahrenheit(40)\n    122.0\n    >>> reaumur_to_fahrenheit(\"reaumur\")\n    Traceback (most recent call last):\n        ...\n    ValueError: could not convert string to float: 'reaumur'\n    \"\"\"\n    return round((float(reaumur) * 2.25 + 32), ndigits)\n\n\ndef reaumur_to_celsius(reaumur: float, ndigits: int = 2) -> float:\n    \"\"\"\n    Convert a given value from reaumur to celsius and round it to 2 decimal places.\n    Reference:- http://www.csgnetwork.com/temp2conv.html\n\n    >>> reaumur_to_celsius(0)\n    0.0\n    >>> reaumur_to_celsius(20.0)\n    25.0\n    >>> reaumur_to_celsius(40)\n    50.0\n    >>> reaumur_to_celsius(\"reaumur\")\n    Traceback (most recent call last):\n        ...\n    ValueError: could not convert string to float: 'reaumur'\n    \"\"\"\n    return round((float(reaumur) * 1.25), ndigits)\n\n\ndef reaumur_to_rankine(reaumur: float, ndigits: int = 2) -> float:\n    \"\"\"\n    Convert a given value from reaumur to rankine and round it to 2 decimal places.\n    Reference:- http://www.csgnetwork.com/temp2conv.html\n\n    >>> reaumur_to_rankine(0)\n    491.67\n    >>> reaumur_to_rankine(20.0)\n    536.67\n    >>> reaumur_to_rankine(40)\n    581.67\n    >>> reaumur_to_rankine(\"reaumur\")\n    Traceback (most recent call last):\n        ...\n    ValueError: could not convert string to float: 'reaumur'\n    \"\"\"\n    return round((float(reaumur) * 2.25 + 32 + 459.67), ndigits)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "conversions/time_conversions.py",
    "content": "\"\"\"\nA unit of time is any particular time interval, used as a standard way of measuring or\nexpressing duration.  The base unit of time in the International System of Units (SI),\nand by extension most of the Western world, is the second, defined as about 9 billion\noscillations of the caesium atom.\n\nhttps://en.wikipedia.org/wiki/Unit_of_time\n\"\"\"\n\ntime_chart: dict[str, float] = {\n    \"seconds\": 1.0,\n    \"minutes\": 60.0,  # 1 minute = 60 sec\n    \"hours\": 3600.0,  # 1 hour = 60 minutes = 3600 seconds\n    \"days\": 86400.0,  # 1 day = 24 hours = 1440 min = 86400 sec\n    \"weeks\": 604800.0,  # 1 week=7d=168hr=10080min = 604800 sec\n    \"months\": 2629800.0,  # Approximate value for a month in seconds\n    \"years\": 31557600.0,  # Approximate value for a year in seconds\n}\n\ntime_chart_inverse: dict[str, float] = {\n    key: 1 / value for key, value in time_chart.items()\n}\n\n\ndef convert_time(time_value: float, unit_from: str, unit_to: str) -> float:\n    \"\"\"\n    Convert time from one unit to another using the time_chart above.\n\n    >>> convert_time(3600, \"seconds\", \"hours\")\n    1.0\n    >>> convert_time(3500, \"Seconds\", \"Hours\")\n    0.972\n    >>> convert_time(1, \"DaYs\", \"hours\")\n    24.0\n    >>> convert_time(120, \"minutes\", \"SeCoNdS\")\n    7200.0\n    >>> convert_time(2, \"WEEKS\", \"days\")\n    14.0\n    >>> convert_time(0.5, \"hours\", \"MINUTES\")\n    30.0\n    >>> convert_time(-3600, \"seconds\", \"hours\")\n    Traceback (most recent call last):\n        ...\n    ValueError: 'time_value' must be a non-negative number.\n    >>> convert_time(\"Hello\", \"hours\", \"minutes\")\n    Traceback (most recent call last):\n        ...\n    ValueError: 'time_value' must be a non-negative number.\n    >>> convert_time([0, 1, 2], \"weeks\", \"days\")\n    Traceback (most recent call last):\n        ...\n    ValueError: 'time_value' must be a non-negative number.\n    >>> convert_time(1, \"cool\", \"century\")  # doctest: +ELLIPSIS\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid unit cool is not in seconds, minutes, hours, days, weeks, ...\n    >>> convert_time(1, \"seconds\", \"hot\")  # doctest: +ELLIPSIS\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid unit hot is not in seconds, minutes, hours, days, weeks, ...\n    \"\"\"\n    if not isinstance(time_value, (int, float)) or time_value < 0:\n        msg = \"'time_value' must be a non-negative number.\"\n        raise ValueError(msg)\n\n    unit_from = unit_from.lower()\n    unit_to = unit_to.lower()\n    if unit_from not in time_chart or unit_to not in time_chart:\n        invalid_unit = unit_from if unit_from not in time_chart else unit_to\n        msg = f\"Invalid unit {invalid_unit} is not in {', '.join(time_chart)}.\"\n        raise ValueError(msg)\n\n    return round(\n        time_value * time_chart[unit_from] * time_chart_inverse[unit_to],\n        3,\n    )\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    print(f\"{convert_time(3600,'seconds', 'hours') = :,}\")\n    print(f\"{convert_time(360, 'days', 'months') = :,}\")\n    print(f\"{convert_time(360, 'months', 'years') = :,}\")\n    print(f\"{convert_time(1, 'years', 'seconds') = :,}\")\n"
  },
  {
    "path": "conversions/volume_conversions.py",
    "content": "\"\"\"\r\nConversion of volume units.\r\nAvailable Units:- Cubic metre,Litre,KiloLitre,Gallon,Cubic yard,Cubic foot,cup\r\nUSAGE :\r\n-> Import this file into their respective project.\r\n-> Use the function length_conversion() for conversion of volume units.\r\n-> Parameters :\r\n    -> value : The number of from units you want to convert\r\n    -> from_type : From which type you want to convert\r\n    -> to_type : To which type you want to convert\r\nREFERENCES :\r\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Cubic_metre\r\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Litre\r\n-> Wikipedia reference: https://en.wiktionary.org/wiki/kilolitre\r\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Gallon\r\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Cubic_yard\r\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Cubic_foot\r\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Cup_(unit)\r\n\"\"\"\r\n\r\nfrom typing import NamedTuple\r\n\r\n\r\nclass FromTo(NamedTuple):\r\n    from_factor: float\r\n    to_factor: float\r\n\r\n\r\nMETRIC_CONVERSION = {\r\n    \"cubic meter\": FromTo(1, 1),\r\n    \"litre\": FromTo(0.001, 1000),\r\n    \"kilolitre\": FromTo(1, 1),\r\n    \"gallon\": FromTo(0.00454, 264.172),\r\n    \"cubic yard\": FromTo(0.76455, 1.30795),\r\n    \"cubic foot\": FromTo(0.028, 35.3147),\r\n    \"cup\": FromTo(0.000236588, 4226.75),\r\n}\r\n\r\n\r\ndef volume_conversion(value: float, from_type: str, to_type: str) -> float:\r\n    \"\"\"\r\n    Conversion between volume units.\r\n    >>> volume_conversion(4, \"cubic meter\", \"litre\")\r\n    4000\r\n    >>> volume_conversion(1, \"litre\", \"gallon\")\r\n    0.264172\r\n    >>> volume_conversion(1, \"kilolitre\", \"cubic meter\")\r\n    1\r\n    >>> volume_conversion(3, \"gallon\", \"cubic yard\")\r\n    0.017814279\r\n    >>> volume_conversion(2, \"cubic yard\", \"litre\")\r\n    1529.1\r\n    >>> volume_conversion(4, \"cubic foot\", \"cup\")\r\n    473.396\r\n    >>> volume_conversion(1, \"cup\", \"kilolitre\")\r\n    0.000236588\r\n    >>> volume_conversion(4, \"wrongUnit\", \"litre\")\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Invalid 'from_type' value: 'wrongUnit'  Supported values are:\r\n    cubic meter, litre, kilolitre, gallon, cubic yard, cubic foot, cup\r\n    \"\"\"\r\n    if from_type not in METRIC_CONVERSION:\r\n        raise ValueError(\r\n            f\"Invalid 'from_type' value: {from_type!r}  Supported values are:\\n\"\r\n            + \", \".join(METRIC_CONVERSION)\r\n        )\r\n    if to_type not in METRIC_CONVERSION:\r\n        raise ValueError(\r\n            f\"Invalid 'to_type' value: {to_type!r}.  Supported values are:\\n\"\r\n            + \", \".join(METRIC_CONVERSION)\r\n        )\r\n    return (\r\n        value\r\n        * METRIC_CONVERSION[from_type].from_factor\r\n        * METRIC_CONVERSION[to_type].to_factor\r\n    )\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n"
  },
  {
    "path": "conversions/weight_conversion.py",
    "content": "\"\"\"\nConversion of weight units.\n\n__author__ = \"Anubhav Solanki\"\n__license__ = \"MIT\"\n__version__ = \"1.1.0\"\n__maintainer__ = \"Anubhav Solanki\"\n__email__ = \"anubhavsolanki0@gmail.com\"\n\nUSAGE :\n-> Import this file into their respective project.\n-> Use the function weight_conversion() for conversion of weight units.\n-> Parameters :\n    -> from_type : From which type you want to convert\n    -> to_type : To which type you want to convert\n    -> value : the value which you want to convert\n\nREFERENCES :\n\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Kilogram\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Gram\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Millimetre\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Tonne\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Long_ton\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Short_ton\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Pound\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Ounce\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Fineness#Karat\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Dalton_(unit)\n-> Wikipedia reference: https://en.wikipedia.org/wiki/Stone_(unit)\n\"\"\"\n\nKILOGRAM_CHART: dict[str, float] = {\n    \"kilogram\": 1,\n    \"gram\": pow(10, 3),\n    \"milligram\": pow(10, 6),\n    \"metric-ton\": pow(10, -3),\n    \"long-ton\": 0.0009842073,\n    \"short-ton\": 0.0011023122,\n    \"pound\": 2.2046244202,\n    \"stone\": 0.1574731728,\n    \"ounce\": 35.273990723,\n    \"carrat\": 5000,\n    \"atomic-mass-unit\": 6.022136652e26,\n}\n\nWEIGHT_TYPE_CHART: dict[str, float] = {\n    \"kilogram\": 1,\n    \"gram\": pow(10, -3),\n    \"milligram\": pow(10, -6),\n    \"metric-ton\": pow(10, 3),\n    \"long-ton\": 1016.04608,\n    \"short-ton\": 907.184,\n    \"pound\": 0.453592,\n    \"stone\": 6.35029,\n    \"ounce\": 0.0283495,\n    \"carrat\": 0.0002,\n    \"atomic-mass-unit\": 1.660540199e-27,\n}\n\n\ndef weight_conversion(from_type: str, to_type: str, value: float) -> float:\n    \"\"\"\n    Conversion of weight unit with the help of KILOGRAM_CHART\n\n    \"kilogram\" : 1,\n    \"gram\" : pow(10, 3),\n    \"milligram\" : pow(10, 6),\n    \"metric-ton\" : pow(10, -3),\n    \"long-ton\" : 0.0009842073,\n    \"short-ton\" : 0.0011023122,\n    \"pound\" : 2.2046244202,\n    \"stone\": 0.1574731728,\n    \"ounce\" : 35.273990723,\n    \"carrat\" : 5000,\n    \"atomic-mass-unit\" : 6.022136652E+26\n\n    >>> weight_conversion(\"kilogram\",\"kilogram\",4)\n    4\n    >>> weight_conversion(\"kilogram\",\"gram\",1)\n    1000\n    >>> weight_conversion(\"kilogram\",\"milligram\",4)\n    4000000\n    >>> weight_conversion(\"kilogram\",\"metric-ton\",4)\n    0.004\n    >>> weight_conversion(\"kilogram\",\"long-ton\",3)\n    0.0029526219\n    >>> weight_conversion(\"kilogram\",\"short-ton\",1)\n    0.0011023122\n    >>> weight_conversion(\"kilogram\",\"pound\",4)\n    8.8184976808\n    >>> weight_conversion(\"kilogram\",\"stone\",5)\n    0.7873658640000001\n    >>> weight_conversion(\"kilogram\",\"ounce\",4)\n    141.095962892\n    >>> weight_conversion(\"kilogram\",\"carrat\",3)\n    15000\n    >>> weight_conversion(\"kilogram\",\"atomic-mass-unit\",1)\n    6.022136652e+26\n    >>> weight_conversion(\"gram\",\"kilogram\",1)\n    0.001\n    >>> weight_conversion(\"gram\",\"gram\",3)\n    3.0\n    >>> weight_conversion(\"gram\",\"milligram\",2)\n    2000.0\n    >>> weight_conversion(\"gram\",\"metric-ton\",4)\n    4e-06\n    >>> weight_conversion(\"gram\",\"long-ton\",3)\n    2.9526219e-06\n    >>> weight_conversion(\"gram\",\"short-ton\",3)\n    3.3069366000000003e-06\n    >>> weight_conversion(\"gram\",\"pound\",3)\n    0.0066138732606\n    >>> weight_conversion(\"gram\",\"stone\",4)\n    0.0006298926912000001\n    >>> weight_conversion(\"gram\",\"ounce\",1)\n    0.035273990723\n    >>> weight_conversion(\"gram\",\"carrat\",2)\n    10.0\n    >>> weight_conversion(\"gram\",\"atomic-mass-unit\",1)\n    6.022136652e+23\n    >>> weight_conversion(\"milligram\",\"kilogram\",1)\n    1e-06\n    >>> weight_conversion(\"milligram\",\"gram\",2)\n    0.002\n    >>> weight_conversion(\"milligram\",\"milligram\",3)\n    3.0\n    >>> weight_conversion(\"milligram\",\"metric-ton\",3)\n    3e-09\n    >>> weight_conversion(\"milligram\",\"long-ton\",3)\n    2.9526219e-09\n    >>> weight_conversion(\"milligram\",\"short-ton\",1)\n    1.1023122e-09\n    >>> weight_conversion(\"milligram\",\"pound\",3)\n    6.6138732605999995e-06\n    >>> weight_conversion(\"milligram\",\"ounce\",2)\n    7.054798144599999e-05\n    >>> weight_conversion(\"milligram\",\"carrat\",1)\n    0.005\n    >>> weight_conversion(\"milligram\",\"atomic-mass-unit\",1)\n    6.022136652e+20\n    >>> weight_conversion(\"metric-ton\",\"kilogram\",2)\n    2000\n    >>> weight_conversion(\"metric-ton\",\"gram\",2)\n    2000000\n    >>> weight_conversion(\"metric-ton\",\"milligram\",3)\n    3000000000\n    >>> weight_conversion(\"metric-ton\",\"metric-ton\",2)\n    2.0\n    >>> weight_conversion(\"metric-ton\",\"long-ton\",3)\n    2.9526219\n    >>> weight_conversion(\"metric-ton\",\"short-ton\",2)\n    2.2046244\n    >>> weight_conversion(\"metric-ton\",\"pound\",3)\n    6613.8732606\n    >>> weight_conversion(\"metric-ton\",\"ounce\",4)\n    141095.96289199998\n    >>> weight_conversion(\"metric-ton\",\"carrat\",4)\n    20000000\n    >>> weight_conversion(\"metric-ton\",\"atomic-mass-unit\",1)\n    6.022136652e+29\n    >>> weight_conversion(\"long-ton\",\"kilogram\",4)\n    4064.18432\n    >>> weight_conversion(\"long-ton\",\"gram\",4)\n    4064184.32\n    >>> weight_conversion(\"long-ton\",\"milligram\",3)\n    3048138240.0\n    >>> weight_conversion(\"long-ton\",\"metric-ton\",4)\n    4.06418432\n    >>> weight_conversion(\"long-ton\",\"long-ton\",3)\n    2.999999907217152\n    >>> weight_conversion(\"long-ton\",\"short-ton\",1)\n    1.119999989746176\n    >>> weight_conversion(\"long-ton\",\"pound\",3)\n    6720.000000049448\n    >>> weight_conversion(\"long-ton\",\"ounce\",1)\n    35840.000000060514\n    >>> weight_conversion(\"long-ton\",\"carrat\",4)\n    20320921.599999998\n    >>> weight_conversion(\"long-ton\",\"atomic-mass-unit\",4)\n    2.4475073353955697e+30\n    >>> weight_conversion(\"short-ton\",\"kilogram\",3)\n    2721.5519999999997\n    >>> weight_conversion(\"short-ton\",\"gram\",3)\n    2721552.0\n    >>> weight_conversion(\"short-ton\",\"milligram\",1)\n    907184000.0\n    >>> weight_conversion(\"short-ton\",\"metric-ton\",4)\n    3.628736\n    >>> weight_conversion(\"short-ton\",\"long-ton\",3)\n    2.6785713457296\n    >>> weight_conversion(\"short-ton\",\"short-ton\",3)\n    2.9999999725344\n    >>> weight_conversion(\"short-ton\",\"pound\",2)\n    4000.0000000294335\n    >>> weight_conversion(\"short-ton\",\"ounce\",4)\n    128000.00000021611\n    >>> weight_conversion(\"short-ton\",\"carrat\",4)\n    18143680.0\n    >>> weight_conversion(\"short-ton\",\"atomic-mass-unit\",1)\n    5.463186016507968e+29\n    >>> weight_conversion(\"pound\",\"kilogram\",4)\n    1.814368\n    >>> weight_conversion(\"pound\",\"gram\",2)\n    907.184\n    >>> weight_conversion(\"pound\",\"milligram\",3)\n    1360776.0\n    >>> weight_conversion(\"pound\",\"metric-ton\",3)\n    0.001360776\n    >>> weight_conversion(\"pound\",\"long-ton\",2)\n    0.0008928571152432\n    >>> weight_conversion(\"pound\",\"short-ton\",1)\n    0.0004999999954224\n    >>> weight_conversion(\"pound\",\"pound\",3)\n    3.0000000000220752\n    >>> weight_conversion(\"pound\",\"ounce\",1)\n    16.000000000027015\n    >>> weight_conversion(\"pound\",\"carrat\",1)\n    2267.96\n    >>> weight_conversion(\"pound\",\"atomic-mass-unit\",4)\n    1.0926372033015936e+27\n    >>> weight_conversion(\"stone\",\"kilogram\",5)\n    31.751450000000002\n    >>> weight_conversion(\"stone\",\"gram\",2)\n    12700.58\n    >>> weight_conversion(\"stone\",\"milligram\",3)\n    19050870.0\n    >>> weight_conversion(\"stone\",\"metric-ton\",3)\n    0.01905087\n    >>> weight_conversion(\"stone\",\"long-ton\",3)\n    0.018750005325351003\n    >>> weight_conversion(\"stone\",\"short-ton\",3)\n    0.021000006421614002\n    >>> weight_conversion(\"stone\",\"pound\",2)\n    28.00000881870372\n    >>> weight_conversion(\"stone\",\"ounce\",1)\n    224.00007054835967\n    >>> weight_conversion(\"stone\",\"carrat\",2)\n    63502.9\n    >>> weight_conversion(\"ounce\",\"kilogram\",3)\n    0.0850485\n    >>> weight_conversion(\"ounce\",\"gram\",3)\n    85.0485\n    >>> weight_conversion(\"ounce\",\"milligram\",4)\n    113398.0\n    >>> weight_conversion(\"ounce\",\"metric-ton\",4)\n    0.000113398\n    >>> weight_conversion(\"ounce\",\"long-ton\",4)\n    0.0001116071394054\n    >>> weight_conversion(\"ounce\",\"short-ton\",4)\n    0.0001249999988556\n    >>> weight_conversion(\"ounce\",\"pound\",1)\n    0.0625000000004599\n    >>> weight_conversion(\"ounce\",\"ounce\",2)\n    2.000000000003377\n    >>> weight_conversion(\"ounce\",\"carrat\",1)\n    141.7475\n    >>> weight_conversion(\"ounce\",\"atomic-mass-unit\",1)\n    1.70724563015874e+25\n    >>> weight_conversion(\"carrat\",\"kilogram\",1)\n    0.0002\n    >>> weight_conversion(\"carrat\",\"gram\",4)\n    0.8\n    >>> weight_conversion(\"carrat\",\"milligram\",2)\n    400.0\n    >>> weight_conversion(\"carrat\",\"metric-ton\",2)\n    4.0000000000000003e-07\n    >>> weight_conversion(\"carrat\",\"long-ton\",3)\n    5.9052438e-07\n    >>> weight_conversion(\"carrat\",\"short-ton\",4)\n    8.818497600000002e-07\n    >>> weight_conversion(\"carrat\",\"pound\",1)\n    0.00044092488404000004\n    >>> weight_conversion(\"carrat\",\"ounce\",2)\n    0.0141095962892\n    >>> weight_conversion(\"carrat\",\"carrat\",4)\n    4.0\n    >>> weight_conversion(\"carrat\",\"atomic-mass-unit\",4)\n    4.8177093216e+23\n    >>> weight_conversion(\"atomic-mass-unit\",\"kilogram\",4)\n    6.642160796e-27\n    >>> weight_conversion(\"atomic-mass-unit\",\"gram\",2)\n    3.321080398e-24\n    >>> weight_conversion(\"atomic-mass-unit\",\"milligram\",2)\n    3.3210803980000002e-21\n    >>> weight_conversion(\"atomic-mass-unit\",\"metric-ton\",3)\n    4.9816205970000004e-30\n    >>> weight_conversion(\"atomic-mass-unit\",\"long-ton\",3)\n    4.9029473573977584e-30\n    >>> weight_conversion(\"atomic-mass-unit\",\"short-ton\",1)\n    1.830433719948128e-30\n    >>> weight_conversion(\"atomic-mass-unit\",\"pound\",3)\n    1.0982602420317504e-26\n    >>> weight_conversion(\"atomic-mass-unit\",\"ounce\",2)\n    1.1714775914938915e-25\n    >>> weight_conversion(\"atomic-mass-unit\",\"carrat\",2)\n    1.660540199e-23\n    >>> weight_conversion(\"atomic-mass-unit\",\"atomic-mass-unit\",2)\n    1.999999998903455\n    >>> weight_conversion(\"slug\", \"kilogram\", 1)\n    Traceback (most recent call last):\n    ...\n    ValueError: Invalid 'from_type' or 'to_type' value: 'slug', 'kilogram'\n    Supported values are: kilogram, gram, milligram, metric-ton, long-ton, short-ton, \\\npound, stone, ounce, carrat, atomic-mass-unit\n    \"\"\"\n    if to_type not in KILOGRAM_CHART or from_type not in WEIGHT_TYPE_CHART:\n        msg = (\n            f\"Invalid 'from_type' or 'to_type' value: {from_type!r}, {to_type!r}\\n\"\n            f\"Supported values are: {', '.join(WEIGHT_TYPE_CHART)}\"\n        )\n        raise ValueError(msg)\n    return value * KILOGRAM_CHART[to_type] * WEIGHT_TYPE_CHART[from_type]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_compression/README.md",
    "content": "# Compression\n\nData compression is everywhere, you need it to store data without taking too much space.\nEither 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)\n\nLossless 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).\n\n* <https://www.sciencedirect.com/topics/computer-science/compression-algorithm>\n* <https://en.wikipedia.org/wiki/Data_compression>\n* <https://en.wikipedia.org/wiki/Pigeonhole_principle>\n"
  },
  {
    "path": "data_compression/__init__.py",
    "content": ""
  },
  {
    "path": "data_compression/burrows_wheeler.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/Burrows%E2%80%93Wheeler_transform\n\nThe Burrows-Wheeler transform (BWT, also called block-sorting compression)\nrearranges a character string into runs of similar characters. This is useful\nfor compression, since it tends to be easy to compress a string that has runs\nof repeated characters by techniques such as move-to-front transform and\nrun-length encoding. More importantly, the transformation is reversible,\nwithout needing to store any additional data except the position of the first\noriginal character. The BWT is thus a \"free\" method of improving the efficiency\nof text compression algorithms, costing only some extra computation.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom typing import TypedDict\n\n\nclass BWTTransformDict(TypedDict):\n    bwt_string: str\n    idx_original_string: int\n\n\ndef all_rotations(s: str) -> list[str]:\n    \"\"\"\n    :param s: The string that will be rotated len(s) times.\n    :return: A list with the rotations.\n    :raises TypeError: If s is not an instance of str.\n    Examples:\n\n    >>> all_rotations(\"^BANANA|\") # doctest: +NORMALIZE_WHITESPACE\n    ['^BANANA|', 'BANANA|^', 'ANANA|^B', 'NANA|^BA', 'ANA|^BAN', 'NA|^BANA',\n    'A|^BANAN', '|^BANANA']\n    >>> all_rotations(\"a_asa_da_casa\") # doctest: +NORMALIZE_WHITESPACE\n    ['a_asa_da_casa', '_asa_da_casaa', 'asa_da_casaa_', 'sa_da_casaa_a',\n    'a_da_casaa_as', '_da_casaa_asa', 'da_casaa_asa_', 'a_casaa_asa_d',\n    '_casaa_asa_da', 'casaa_asa_da_', 'asaa_asa_da_c', 'saa_asa_da_ca',\n    'aa_asa_da_cas']\n    >>> all_rotations(\"panamabanana\") # doctest: +NORMALIZE_WHITESPACE\n    ['panamabanana', 'anamabananap', 'namabananapa', 'amabananapan',\n    'mabananapana', 'abananapanam', 'bananapanama', 'ananapanamab',\n    'nanapanamaba', 'anapanamaban', 'napanamabana', 'apanamabanan']\n    >>> all_rotations(5)\n    Traceback (most recent call last):\n        ...\n    TypeError: The parameter s type must be str.\n    \"\"\"\n    if not isinstance(s, str):\n        raise TypeError(\"The parameter s type must be str.\")\n\n    return [s[i:] + s[:i] for i in range(len(s))]\n\n\ndef bwt_transform(s: str) -> BWTTransformDict:\n    \"\"\"\n    :param s: The string that will be used at bwt algorithm\n    :return: the string composed of the last char of each row of the ordered\n    rotations and the index of the original string at ordered rotations list\n    :raises TypeError: If the s parameter type is not str\n    :raises ValueError: If the s parameter is empty\n    Examples:\n\n    >>> bwt_transform(\"^BANANA\")\n    {'bwt_string': 'BNN^AAA', 'idx_original_string': 6}\n    >>> bwt_transform(\"a_asa_da_casa\")\n    {'bwt_string': 'aaaadss_c__aa', 'idx_original_string': 3}\n    >>> bwt_transform(\"panamabanana\")\n    {'bwt_string': 'mnpbnnaaaaaa', 'idx_original_string': 11}\n    >>> bwt_transform(4)\n    Traceback (most recent call last):\n        ...\n    TypeError: The parameter s type must be str.\n    >>> bwt_transform('')\n    Traceback (most recent call last):\n        ...\n    ValueError: The parameter s must not be empty.\n    \"\"\"\n    if not isinstance(s, str):\n        raise TypeError(\"The parameter s type must be str.\")\n    if not s:\n        raise ValueError(\"The parameter s must not be empty.\")\n\n    rotations = all_rotations(s)\n    rotations.sort()  # sort the list of rotations in alphabetically order\n    # make a string composed of the last char of each rotation\n    response: BWTTransformDict = {\n        \"bwt_string\": \"\".join([word[-1] for word in rotations]),\n        \"idx_original_string\": rotations.index(s),\n    }\n    return response\n\n\ndef reverse_bwt(bwt_string: str, idx_original_string: int) -> str:\n    \"\"\"\n    :param bwt_string: The string returned from bwt algorithm execution\n    :param idx_original_string: A 0-based index of the string that was used to\n    generate bwt_string at ordered rotations list\n    :return: The string used to generate bwt_string when bwt was executed\n    :raises TypeError: If the bwt_string parameter type is not str\n    :raises ValueError: If the bwt_string parameter is empty\n    :raises TypeError: If the idx_original_string type is not int or if not\n    possible to cast it to int\n    :raises ValueError: If the idx_original_string value is lower than 0 or\n    greater than len(bwt_string) - 1\n\n    >>> reverse_bwt(\"BNN^AAA\", 6)\n    '^BANANA'\n    >>> reverse_bwt(\"aaaadss_c__aa\", 3)\n    'a_asa_da_casa'\n    >>> reverse_bwt(\"mnpbnnaaaaaa\", 11)\n    'panamabanana'\n    >>> reverse_bwt(4, 11)\n    Traceback (most recent call last):\n        ...\n    TypeError: The parameter bwt_string type must be str.\n    >>> reverse_bwt(\"\", 11)\n    Traceback (most recent call last):\n        ...\n    ValueError: The parameter bwt_string must not be empty.\n    >>> reverse_bwt(\"mnpbnnaaaaaa\", \"asd\") # doctest: +NORMALIZE_WHITESPACE\n    Traceback (most recent call last):\n        ...\n    TypeError: The parameter idx_original_string type must be int or passive\n    of cast to int.\n    >>> reverse_bwt(\"mnpbnnaaaaaa\", -1)\n    Traceback (most recent call last):\n        ...\n    ValueError: The parameter idx_original_string must not be lower than 0.\n    >>> reverse_bwt(\"mnpbnnaaaaaa\", 12) # doctest: +NORMALIZE_WHITESPACE\n    Traceback (most recent call last):\n        ...\n    ValueError: The parameter idx_original_string must be lower than\n    len(bwt_string).\n    >>> reverse_bwt(\"mnpbnnaaaaaa\", 11.0)\n    'panamabanana'\n    >>> reverse_bwt(\"mnpbnnaaaaaa\", 11.4)\n    'panamabanana'\n    \"\"\"\n    if not isinstance(bwt_string, str):\n        raise TypeError(\"The parameter bwt_string type must be str.\")\n    if not bwt_string:\n        raise ValueError(\"The parameter bwt_string must not be empty.\")\n    try:\n        idx_original_string = int(idx_original_string)\n    except ValueError:\n        raise TypeError(\n            \"The parameter idx_original_string type must be int or passive\"\n            \" of cast to int.\"\n        )\n    if idx_original_string < 0:\n        raise ValueError(\"The parameter idx_original_string must not be lower than 0.\")\n    if idx_original_string >= len(bwt_string):\n        raise ValueError(\n            \"The parameter idx_original_string must be lower than len(bwt_string).\"\n        )\n\n    ordered_rotations = [\"\"] * len(bwt_string)\n    for _ in range(len(bwt_string)):\n        for i in range(len(bwt_string)):\n            ordered_rotations[i] = bwt_string[i] + ordered_rotations[i]\n        ordered_rotations.sort()\n    return ordered_rotations[idx_original_string]\n\n\nif __name__ == \"__main__\":\n    entry_msg = \"Provide a string that I will generate its BWT transform: \"\n    s = input(entry_msg).strip()\n    result = bwt_transform(s)\n    print(\n        f\"Burrows Wheeler transform for string '{s}' results \"\n        f\"in '{result['bwt_string']}'\"\n    )\n    original_string = reverse_bwt(result[\"bwt_string\"], result[\"idx_original_string\"])\n    print(\n        f\"Reversing Burrows Wheeler transform for entry '{result['bwt_string']}' \"\n        f\"we get original string '{original_string}'\"\n    )\n"
  },
  {
    "path": "data_compression/coordinate_compression.py",
    "content": "\"\"\"\nAssumption:\n    - The values to compress are assumed to be comparable,\n      values can be sorted and compared with '<' and '>' operators.\n\"\"\"\n\n\nclass CoordinateCompressor:\n    \"\"\"\n    A class for coordinate compression.\n\n    This class allows you to compress and decompress a list of values.\n\n    Mapping:\n    In addition to compression and decompression, this class maintains a mapping\n    between original values and their compressed counterparts using two data\n    structures: a dictionary `coordinate_map` and a list `reverse_map`:\n    - `coordinate_map`: A dictionary that maps original values to their compressed\n      coordinates. Keys are original values, and values are compressed coordinates.\n    - `reverse_map`: A list used for reverse mapping, where each index corresponds\n      to a compressed coordinate, and the value at that index is the original value.\n\n    Example of mapping:\n    Original: 10, Compressed: 0\n    Original: 52, Compressed: 1\n    Original: 83, Compressed: 2\n    Original: 100, Compressed: 3\n\n    This mapping allows for efficient compression and decompression of values within\n    the list.\n    \"\"\"\n\n    def __init__(self, arr: list[int | float | str]) -> None:\n        \"\"\"\n        Initialize the CoordinateCompressor with a list.\n\n        Args:\n        arr: The list of values to be compressed.\n\n        >>> arr = [100, 10, 52, 83]\n        >>> cc = CoordinateCompressor(arr)\n        >>> cc.compress(100)\n        3\n        >>> cc.compress(52)\n        1\n        >>> cc.decompress(1)\n        52\n        \"\"\"\n\n        # A dictionary to store compressed coordinates\n        self.coordinate_map: dict[int | float | str, int] = {}\n\n        # A list to store reverse mapping\n        self.reverse_map: list[int | float | str] = [-1] * len(arr)\n\n        self.arr = sorted(arr)  # The input list\n        self.n = len(arr)  # The length of the input list\n        self.compress_coordinates()\n\n    def compress_coordinates(self) -> None:\n        \"\"\"\n        Compress the coordinates in the input list.\n\n        >>> arr = [100, 10, 52, 83]\n        >>> cc = CoordinateCompressor(arr)\n        >>> cc.coordinate_map[83]\n        2\n        >>> cc.coordinate_map[80]  # Value not in the original list\n        Traceback (most recent call last):\n            ...\n        KeyError: 80\n        >>> cc.reverse_map[2]\n        83\n        \"\"\"\n        key = 0\n        for val in self.arr:\n            if val not in self.coordinate_map:\n                self.coordinate_map[val] = key\n                self.reverse_map[key] = val\n                key += 1\n\n    def compress(self, original: float | str) -> int:\n        \"\"\"\n        Compress a single value.\n\n        Args:\n        original: The value to compress.\n\n        Returns:\n        The compressed integer, or -1 if not found in the original list.\n\n        >>> arr = [100, 10, 52, 83]\n        >>> cc = CoordinateCompressor(arr)\n        >>> cc.compress(100)\n        3\n        >>> cc.compress(7)  # Value not in the original list\n        -1\n        \"\"\"\n        return self.coordinate_map.get(original, -1)\n\n    def decompress(self, num: int) -> int | float | str:\n        \"\"\"\n        Decompress a single integer.\n\n        Args:\n        num: The compressed integer to decompress.\n\n        Returns:\n        The original value.\n\n        >>> arr = [100, 10, 52, 83]\n        >>> cc = CoordinateCompressor(arr)\n        >>> cc.decompress(0)\n        10\n        >>> cc.decompress(5)  # Compressed coordinate out of range\n        -1\n        \"\"\"\n        return self.reverse_map[num] if 0 <= num < len(self.reverse_map) else -1\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n\n    arr: list[int | float | str] = [100, 10, 52, 83]\n    cc = CoordinateCompressor(arr)\n\n    for original in arr:\n        compressed = cc.compress(original)\n        decompressed = cc.decompress(compressed)\n        print(f\"Original: {decompressed}, Compressed: {compressed}\")\n"
  },
  {
    "path": "data_compression/huffman.py",
    "content": "from __future__ import annotations\n\nimport sys\n\n\nclass Letter:\n    def __init__(self, letter: str, freq: int):\n        self.letter: str = letter\n        self.freq: int = freq\n        self.bitstring: dict[str, str] = {}\n\n    def __repr__(self) -> str:\n        return f\"{self.letter}:{self.freq}\"\n\n\nclass TreeNode:\n    def __init__(self, freq: int, left: Letter | TreeNode, right: Letter | TreeNode):\n        self.freq: int = freq\n        self.left: Letter | TreeNode = left\n        self.right: Letter | TreeNode = right\n\n\ndef parse_file(file_path: str) -> list[Letter]:\n    \"\"\"\n    Read the file and build a dict of all letters and their\n    frequencies, then convert the dict into a list of Letters.\n    \"\"\"\n    chars: dict[str, int] = {}\n    with open(file_path) as f:\n        while True:\n            c = f.read(1)\n            if not c:\n                break\n            chars[c] = chars[c] + 1 if c in chars else 1\n    return sorted((Letter(c, f) for c, f in chars.items()), key=lambda x: x.freq)\n\n\ndef build_tree(letters: list[Letter]) -> Letter | TreeNode:\n    \"\"\"\n    Run through the list of Letters and build the min heap\n    for the Huffman Tree.\n    \"\"\"\n    response: list[Letter | TreeNode] = list(letters)\n    while len(response) > 1:\n        left = response.pop(0)\n        right = response.pop(0)\n        total_freq = left.freq + right.freq\n        node = TreeNode(total_freq, left, right)\n        response.append(node)\n        response.sort(key=lambda x: x.freq)\n    return response[0]\n\n\ndef traverse_tree(root: Letter | TreeNode, bitstring: str) -> list[Letter]:\n    \"\"\"\n    Recursively traverse the Huffman Tree to set each\n    Letter's bitstring dictionary, and return the list of Letters\n    \"\"\"\n    if isinstance(root, Letter):\n        root.bitstring[root.letter] = bitstring\n        return [root]\n    treenode: TreeNode = root\n    letters = []\n    letters += traverse_tree(treenode.left, bitstring + \"0\")\n    letters += traverse_tree(treenode.right, bitstring + \"1\")\n    return letters\n\n\ndef huffman(file_path: str) -> None:\n    \"\"\"\n    Parse the file, build the tree, then run through the file\n    again, using the letters dictionary to find and print out the\n    bitstring for each letter.\n    \"\"\"\n    letters_list = parse_file(file_path)\n    root = build_tree(letters_list)\n    letters = {\n        k: v for letter in traverse_tree(root, \"\") for k, v in letter.bitstring.items()\n    }\n    print(f\"Huffman Coding  of {file_path}: \")\n    with open(file_path) as f:\n        while True:\n            c = f.read(1)\n            if not c:\n                break\n            print(letters[c], end=\" \")\n    print()\n\n\nif __name__ == \"__main__\":\n    # pass the file path to the huffman function\n    huffman(sys.argv[1])\n"
  },
  {
    "path": "data_compression/lempel_ziv.py",
    "content": "\"\"\"\nOne of the several implementations of Lempel-Ziv-Welch compression algorithm\nhttps://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Welch\n\"\"\"\n\nimport math\nimport os\nimport sys\n\n\ndef read_file_binary(file_path: str) -> str:\n    \"\"\"\n    Reads given file as bytes and returns them as a long string\n    \"\"\"\n    result = \"\"\n    try:\n        with open(file_path, \"rb\") as binary_file:\n            data = binary_file.read()\n        for dat in data:\n            curr_byte = f\"{dat:08b}\"\n            result += curr_byte\n        return result\n    except OSError:\n        print(\"File not accessible\")\n        sys.exit()\n\n\ndef add_key_to_lexicon(\n    lexicon: dict[str, str], curr_string: str, index: int, last_match_id: str\n) -> None:\n    \"\"\"\n    Adds new strings (curr_string + \"0\",  curr_string + \"1\") to the lexicon\n    \"\"\"\n    lexicon.pop(curr_string)\n    lexicon[curr_string + \"0\"] = last_match_id\n\n    if math.log2(index).is_integer():\n        for curr_key, value in lexicon.items():\n            lexicon[curr_key] = f\"0{value}\"\n\n    lexicon[curr_string + \"1\"] = bin(index)[2:]\n\n\ndef compress_data(data_bits: str) -> str:\n    \"\"\"\n    Compresses given data_bits using Lempel-Ziv-Welch compression algorithm\n    and returns the result as a string\n    \"\"\"\n    lexicon = {\"0\": \"0\", \"1\": \"1\"}\n    result, curr_string = \"\", \"\"\n    index = len(lexicon)\n\n    for i in range(len(data_bits)):\n        curr_string += data_bits[i]\n        if curr_string not in lexicon:\n            continue\n\n        last_match_id = lexicon[curr_string]\n        result += last_match_id\n        add_key_to_lexicon(lexicon, curr_string, index, last_match_id)\n        index += 1\n        curr_string = \"\"\n\n    while curr_string != \"\" and curr_string not in lexicon:\n        curr_string += \"0\"\n\n    if curr_string != \"\":\n        last_match_id = lexicon[curr_string]\n        result += last_match_id\n\n    return result\n\n\ndef add_file_length(source_path: str, compressed: str) -> str:\n    \"\"\"\n    Adds given file's length in front (using Elias  gamma coding) of the compressed\n    string\n    \"\"\"\n    file_length = os.path.getsize(source_path)\n    file_length_binary = bin(file_length)[2:]\n    length_length = len(file_length_binary)\n\n    return \"0\" * (length_length - 1) + file_length_binary + compressed\n\n\ndef write_file_binary(file_path: str, to_write: str) -> None:\n    \"\"\"\n    Writes given to_write string (should only consist of 0's and 1's) as bytes in the\n    file\n    \"\"\"\n    byte_length = 8\n    try:\n        with open(file_path, \"wb\") as opened_file:\n            result_byte_array = [\n                to_write[i : i + byte_length]\n                for i in range(0, len(to_write), byte_length)\n            ]\n\n            if len(result_byte_array[-1]) % byte_length == 0:\n                result_byte_array.append(\"10000000\")\n            else:\n                result_byte_array[-1] += \"1\" + \"0\" * (\n                    byte_length - len(result_byte_array[-1]) - 1\n                )\n\n            for elem in result_byte_array:\n                opened_file.write(int(elem, 2).to_bytes(1, byteorder=\"big\"))\n    except OSError:\n        print(\"File not accessible\")\n        sys.exit()\n\n\ndef compress(source_path: str, destination_path: str) -> None:\n    \"\"\"\n    Reads source file, compresses it and writes the compressed result in destination\n    file\n    \"\"\"\n    data_bits = read_file_binary(source_path)\n    compressed = compress_data(data_bits)\n    compressed = add_file_length(source_path, compressed)\n    write_file_binary(destination_path, compressed)\n\n\nif __name__ == \"__main__\":\n    compress(sys.argv[1], sys.argv[2])\n"
  },
  {
    "path": "data_compression/lempel_ziv_decompress.py",
    "content": "\"\"\"\nOne of the several implementations of Lempel-Ziv-Welch decompression algorithm\nhttps://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Welch\n\"\"\"\n\nimport math\nimport sys\n\n\ndef read_file_binary(file_path: str) -> str:\n    \"\"\"\n    Reads given file as bytes and returns them as a long string\n    \"\"\"\n    result = \"\"\n    try:\n        with open(file_path, \"rb\") as binary_file:\n            data = binary_file.read()\n        for dat in data:\n            curr_byte = f\"{dat:08b}\"\n            result += curr_byte\n        return result\n    except OSError:\n        print(\"File not accessible\")\n        sys.exit()\n\n\ndef decompress_data(data_bits: str) -> str:\n    \"\"\"\n    Decompresses given data_bits using Lempel-Ziv-Welch compression algorithm\n    and returns the result as a string\n    \"\"\"\n    lexicon = {\"0\": \"0\", \"1\": \"1\"}\n    result, curr_string = \"\", \"\"\n    index = len(lexicon)\n\n    for i in range(len(data_bits)):\n        curr_string += data_bits[i]\n        if curr_string not in lexicon:\n            continue\n\n        last_match_id = lexicon[curr_string]\n        result += last_match_id\n        lexicon[curr_string] = last_match_id + \"0\"\n\n        if math.log2(index).is_integer():\n            new_lex = {}\n            for curr_key in list(lexicon):\n                new_lex[\"0\" + curr_key] = lexicon.pop(curr_key)\n            lexicon = new_lex\n\n        lexicon[bin(index)[2:]] = last_match_id + \"1\"\n        index += 1\n        curr_string = \"\"\n    return result\n\n\ndef write_file_binary(file_path: str, to_write: str) -> None:\n    \"\"\"\n    Writes given to_write string (should only consist of 0's and 1's) as bytes in the\n    file\n    \"\"\"\n    byte_length = 8\n    try:\n        with open(file_path, \"wb\") as opened_file:\n            result_byte_array = [\n                to_write[i : i + byte_length]\n                for i in range(0, len(to_write), byte_length)\n            ]\n\n            if len(result_byte_array[-1]) % byte_length == 0:\n                result_byte_array.append(\"10000000\")\n            else:\n                result_byte_array[-1] += \"1\" + \"0\" * (\n                    byte_length - len(result_byte_array[-1]) - 1\n                )\n\n            for elem in result_byte_array[:-1]:\n                opened_file.write(int(elem, 2).to_bytes(1, byteorder=\"big\"))\n    except OSError:\n        print(\"File not accessible\")\n        sys.exit()\n\n\ndef remove_prefix(data_bits: str) -> str:\n    \"\"\"\n    Removes size prefix, that compressed file should have\n    Returns the result\n    \"\"\"\n    counter = 0\n    for letter in data_bits:\n        if letter == \"1\":\n            break\n        counter += 1\n\n    data_bits = data_bits[counter:]\n    data_bits = data_bits[counter + 1 :]\n    return data_bits\n\n\ndef compress(source_path: str, destination_path: str) -> None:\n    \"\"\"\n    Reads source file, decompresses it and writes the result in destination file\n    \"\"\"\n    data_bits = read_file_binary(source_path)\n    data_bits = remove_prefix(data_bits)\n    decompressed = decompress_data(data_bits)\n    write_file_binary(destination_path, decompressed)\n\n\nif __name__ == \"__main__\":\n    compress(sys.argv[1], sys.argv[2])\n"
  },
  {
    "path": "data_compression/lz77.py",
    "content": "\"\"\"\nLZ77 compression algorithm\n- lossless data compression published in papers by Abraham Lempel and Jacob Ziv in 1977\n- also known as LZ1 or sliding-window compression\n- form the basis for many variations including LZW, LZSS, LZMA and others\n\nIt uses a “sliding window” method. Within the sliding window we have:\n  - search buffer\n  - look ahead buffer\nlen(sliding_window) = len(search_buffer) + len(look_ahead_buffer)\n\nLZ77 manages a dictionary that uses triples composed of:\n    - Offset into search buffer, it's the distance between the start of a phrase and\n      the beginning of a file.\n    - Length of the match, it's the number of characters that make up a phrase.\n    - The indicator is represented by a character that is going to be encoded next.\n\nAs a file is parsed, the dictionary is dynamically updated to reflect the compressed\ndata contents and size.\n\nExamples:\n\"cabracadabrarrarrad\" <-> [(0, 0, 'c'), (0, 0, 'a'), (0, 0, 'b'), (0, 0, 'r'),\n                           (3, 1, 'c'), (2, 1, 'd'), (7, 4, 'r'), (3, 5, 'd')]\n\"ababcbababaa\" <-> [(0, 0, 'a'), (0, 0, 'b'), (2, 2, 'c'), (4, 3, 'a'), (2, 2, 'a')]\n\"aacaacabcabaaac\" <-> [(0, 0, 'a'), (1, 1, 'c'), (3, 4, 'b'), (3, 3, 'a'), (1, 2, 'c')]\n\nSources:\nen.wikipedia.org/wiki/LZ77_and_LZ78\n\"\"\"\n\nfrom dataclasses import dataclass\n\n__version__ = \"0.1\"\n__author__ = \"Lucia Harcekova\"\n\n\n@dataclass\nclass Token:\n    \"\"\"\n    Dataclass representing triplet called token consisting of length, offset\n    and indicator. This triplet is used during LZ77 compression.\n    \"\"\"\n\n    offset: int\n    length: int\n    indicator: str\n\n    def __repr__(self) -> str:\n        \"\"\"\n        >>> token = Token(1, 2, \"c\")\n        >>> repr(token)\n        '(1, 2, c)'\n        >>> str(token)\n        '(1, 2, c)'\n        \"\"\"\n        return f\"({self.offset}, {self.length}, {self.indicator})\"\n\n\nclass LZ77Compressor:\n    \"\"\"\n    Class containing compress and decompress methods using LZ77 compression algorithm.\n    \"\"\"\n\n    def __init__(self, window_size: int = 13, lookahead_buffer_size: int = 6) -> None:\n        self.window_size = window_size\n        self.lookahead_buffer_size = lookahead_buffer_size\n        self.search_buffer_size = self.window_size - self.lookahead_buffer_size\n\n    def compress(self, text: str) -> list[Token]:\n        \"\"\"\n        Compress the given string text using LZ77 compression algorithm.\n\n        Args:\n            text: string to be compressed\n\n        Returns:\n            output: the compressed text as a list of Tokens\n\n        >>> lz77_compressor = LZ77Compressor()\n        >>> str(lz77_compressor.compress(\"ababcbababaa\"))\n        '[(0, 0, a), (0, 0, b), (2, 2, c), (4, 3, a), (2, 2, a)]'\n        >>> str(lz77_compressor.compress(\"aacaacabcabaaac\"))\n        '[(0, 0, a), (1, 1, c), (3, 4, b), (3, 3, a), (1, 2, c)]'\n        \"\"\"\n\n        output = []\n        search_buffer = \"\"\n\n        # while there are still characters in text to compress\n        while text:\n            # find the next encoding phrase\n            # - triplet with offset, length, indicator (the next encoding character)\n            token = self._find_encoding_token(text, search_buffer)\n\n            # update the search buffer:\n            # - add new characters from text into it\n            # - check if size exceed the max search buffer size, if so, drop the\n            #   oldest elements\n            search_buffer += text[: token.length + 1]\n            if len(search_buffer) > self.search_buffer_size:\n                search_buffer = search_buffer[-self.search_buffer_size :]\n\n            # update the text\n            text = text[token.length + 1 :]\n\n            # append the token to output\n            output.append(token)\n\n        return output\n\n    def decompress(self, tokens: list[Token]) -> str:\n        \"\"\"\n        Convert the list of tokens into an output string.\n\n        Args:\n            tokens: list containing triplets (offset, length, char)\n\n        Returns:\n            output: decompressed text\n\n        Tests:\n            >>> lz77_compressor = LZ77Compressor()\n            >>> lz77_compressor.decompress([Token(0, 0, 'c'), Token(0, 0, 'a'),\n            ... Token(0, 0, 'b'), Token(0, 0, 'r'), Token(3, 1, 'c'),\n            ... Token(2, 1, 'd'), Token(7, 4, 'r'), Token(3, 5, 'd')])\n            'cabracadabrarrarrad'\n            >>> lz77_compressor.decompress([Token(0, 0, 'a'), Token(0, 0, 'b'),\n            ... Token(2, 2, 'c'), Token(4, 3, 'a'), Token(2, 2, 'a')])\n            'ababcbababaa'\n            >>> lz77_compressor.decompress([Token(0, 0, 'a'), Token(1, 1, 'c'),\n            ... Token(3, 4, 'b'), Token(3, 3, 'a'), Token(1, 2, 'c')])\n            'aacaacabcabaaac'\n        \"\"\"\n\n        output = \"\"\n\n        for token in tokens:\n            for _ in range(token.length):\n                output += output[-token.offset]\n            output += token.indicator\n\n        return output\n\n    def _find_encoding_token(self, text: str, search_buffer: str) -> Token:\n        \"\"\"Finds the encoding token for the first character in the text.\n\n        Tests:\n            >>> lz77_compressor = LZ77Compressor()\n            >>> lz77_compressor._find_encoding_token(\"abrarrarrad\", \"abracad\").offset\n            7\n            >>> lz77_compressor._find_encoding_token(\"adabrarrarrad\", \"cabrac\").length\n            1\n            >>> lz77_compressor._find_encoding_token(\"abc\", \"xyz\").offset\n            0\n            >>> lz77_compressor._find_encoding_token(\"\", \"xyz\").offset\n            Traceback (most recent call last):\n                ...\n            ValueError: We need some text to work with.\n            >>> lz77_compressor._find_encoding_token(\"abc\", \"\").offset\n            0\n        \"\"\"\n\n        if not text:\n            raise ValueError(\"We need some text to work with.\")\n\n        # Initialise result parameters to default values\n        length, offset = 0, 0\n\n        if not search_buffer:\n            return Token(offset, length, text[length])\n\n        for i, character in enumerate(search_buffer):\n            found_offset = len(search_buffer) - i\n            if character == text[0]:\n                found_length = self._match_length_from_index(text, search_buffer, 0, i)\n                # if the found length is bigger than the current or if it's equal,\n                # which means it's offset is smaller: update offset and length\n                if found_length >= length:\n                    offset, length = found_offset, found_length\n\n        return Token(offset, length, text[length])\n\n    def _match_length_from_index(\n        self, text: str, window: str, text_index: int, window_index: int\n    ) -> int:\n        \"\"\"Calculate the longest possible match of text and window characters from\n        text_index in text and window_index in window.\n\n        Args:\n            text: _description_\n            window: sliding window\n            text_index: index of character in text\n            window_index: index of character in sliding window\n\n        Returns:\n            The maximum match between text and window, from given indexes.\n\n        Tests:\n            >>> lz77_compressor = LZ77Compressor(13, 6)\n            >>> lz77_compressor._match_length_from_index(\"rarrad\", \"adabrar\", 0, 4)\n            5\n            >>> lz77_compressor._match_length_from_index(\"adabrarrarrad\",\n            ...     \"cabrac\", 0, 1)\n            1\n        \"\"\"\n        if not text or text[text_index] != window[window_index]:\n            return 0\n        return 1 + self._match_length_from_index(\n            text, window + text[text_index], text_index + 1, window_index + 1\n        )\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    # Initialize compressor class\n    lz77_compressor = LZ77Compressor(window_size=13, lookahead_buffer_size=6)\n\n    # Example\n    TEXT = \"cabracadabrarrarrad\"\n    compressed_text = lz77_compressor.compress(TEXT)\n    print(lz77_compressor.compress(\"ababcbababaa\"))\n    decompressed_text = lz77_compressor.decompress(compressed_text)\n    assert decompressed_text == TEXT, \"The LZ77 algorithm returned the invalid result.\"\n"
  },
  {
    "path": "data_compression/peak_signal_to_noise_ratio.py",
    "content": "\"\"\"\nPeak signal-to-noise ratio - PSNR\n    https://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio\nSource:\nhttps://tutorials.techonical.com/how-to-calculate-psnr-value-of-two-images-using-python\n\"\"\"\n\nimport math\nimport os\n\nimport cv2\nimport numpy as np\n\nPIXEL_MAX = 255.0\n\n\ndef peak_signal_to_noise_ratio(original: float, contrast: float) -> float:\n    mse = np.mean((original - contrast) ** 2)\n    if mse == 0:\n        return 100\n\n    return 20 * math.log10(PIXEL_MAX / math.sqrt(mse))\n\n\ndef main() -> None:\n    dir_path = os.path.dirname(os.path.realpath(__file__))\n    # Loading images (original image and compressed image)\n    original = cv2.imread(os.path.join(dir_path, \"image_data/original_image.png\"))\n    contrast = cv2.imread(os.path.join(dir_path, \"image_data/compressed_image.png\"), 1)\n\n    original2 = cv2.imread(os.path.join(dir_path, \"image_data/PSNR-example-base.png\"))\n    contrast2 = cv2.imread(\n        os.path.join(dir_path, \"image_data/PSNR-example-comp-10.jpg\"), 1\n    )\n\n    # Value expected: 29.73dB\n    print(\"-- First Test --\")\n    print(f\"PSNR value is {peak_signal_to_noise_ratio(original, contrast)} dB\")\n\n    # # Value expected: 31.53dB (Wikipedia Example)\n    print(\"\\n-- Second Test --\")\n    print(f\"PSNR value is {peak_signal_to_noise_ratio(original2, contrast2)} dB\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "data_compression/run_length_encoding.py",
    "content": "# https://en.wikipedia.org/wiki/Run-length_encoding\n\n\ndef run_length_encode(text: str) -> list:\n    \"\"\"\n    Performs Run Length Encoding\n    >>> run_length_encode(\"AAAABBBCCDAA\")\n    [('A', 4), ('B', 3), ('C', 2), ('D', 1), ('A', 2)]\n    >>> run_length_encode(\"A\")\n    [('A', 1)]\n    >>> run_length_encode(\"AA\")\n    [('A', 2)]\n    >>> run_length_encode(\"AAADDDDDDFFFCCCAAVVVV\")\n    [('A', 3), ('D', 6), ('F', 3), ('C', 3), ('A', 2), ('V', 4)]\n    \"\"\"\n    encoded = []\n    count = 1\n\n    for i in range(len(text)):\n        if i + 1 < len(text) and text[i] == text[i + 1]:\n            count += 1\n        else:\n            encoded.append((text[i], count))\n            count = 1\n\n    return encoded\n\n\ndef run_length_decode(encoded: list) -> str:\n    \"\"\"\n    Performs Run Length Decoding\n    >>> run_length_decode([('A', 4), ('B', 3), ('C', 2), ('D', 1), ('A', 2)])\n    'AAAABBBCCDAA'\n    >>> run_length_decode([('A', 1)])\n    'A'\n    >>> run_length_decode([('A', 2)])\n    'AA'\n    >>> run_length_decode([('A', 3), ('D', 6), ('F', 3), ('C', 3), ('A', 2), ('V', 4)])\n    'AAADDDDDDFFFCCCAAVVVV'\n    \"\"\"\n    return \"\".join(char * length for char, length in encoded)\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod(name=\"run_length_encode\", verbose=True)\n    testmod(name=\"run_length_decode\", verbose=True)\n"
  },
  {
    "path": "data_structures/__init__.py",
    "content": ""
  },
  {
    "path": "data_structures/arrays/__init__.py",
    "content": ""
  },
  {
    "path": "data_structures/arrays/equilibrium_index_in_array.py",
    "content": "\"\"\"\nFind the Equilibrium Index of an Array.\nReference: https://www.geeksforgeeks.org/equilibrium-index-of-an-array/\n\nPython doctest can be run with the following command:\npython -m doctest -v equilibrium_index_in_array.py\n\nGiven a sequence arr[] of size n, this function returns\nan equilibrium index (if any) or -1 if no equilibrium index exists.\n\nThe equilibrium index of an array is an index such that the sum of\nelements at lower indexes is equal to the sum of elements at higher indexes.\n\n\n\nExample Input:\narr = [-7, 1, 5, 2, -4, 3, 0]\nOutput: 3\n\n\"\"\"\n\n\ndef equilibrium_index(arr: list[int]) -> int:\n    \"\"\"\n    Find the equilibrium index of an array.\n\n    Args:\n        arr (list[int]): The input array of integers.\n\n    Returns:\n        int: The equilibrium index or -1 if no equilibrium index exists.\n\n    Examples:\n        >>> equilibrium_index([-7, 1, 5, 2, -4, 3, 0])\n        3\n        >>> equilibrium_index([1, 2, 3, 4, 5])\n        -1\n        >>> equilibrium_index([1, 1, 1, 1, 1])\n        2\n        >>> equilibrium_index([2, 4, 6, 8, 10, 3])\n        -1\n    \"\"\"\n    total_sum = sum(arr)\n    left_sum = 0\n\n    for i, value in enumerate(arr):\n        total_sum -= value\n        if left_sum == total_sum:\n            return i\n        left_sum += value\n\n    return -1\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/arrays/find_triplets_with_0_sum.py",
    "content": "from itertools import combinations\n\n\ndef find_triplets_with_0_sum(nums: list[int]) -> list[list[int]]:\n    \"\"\"\n    Given a list of integers, return elements a, b, c such that a + b + c = 0.\n    Args:\n        nums: list of integers\n    Returns:\n        list of lists of integers where sum(each_list) == 0\n    Examples:\n        >>> find_triplets_with_0_sum([-1, 0, 1, 2, -1, -4])\n        [[-1, -1, 2], [-1, 0, 1]]\n        >>> find_triplets_with_0_sum([])\n        []\n        >>> find_triplets_with_0_sum([0, 0, 0])\n        [[0, 0, 0]]\n        >>> find_triplets_with_0_sum([1, 2, 3, 0, -1, -2, -3])\n        [[-3, 0, 3], [-3, 1, 2], [-2, -1, 3], [-2, 0, 2], [-1, 0, 1]]\n    \"\"\"\n    return [\n        list(x)\n        for x in sorted({abc for abc in combinations(sorted(nums), 3) if not sum(abc)})\n    ]\n\n\ndef find_triplets_with_0_sum_hashing(arr: list[int]) -> list[list[int]]:\n    \"\"\"\n    Function for finding the triplets with a given sum in the array using hashing.\n\n    Given a list of integers, return elements a, b, c such that a + b + c = 0.\n\n    Args:\n        nums: list of integers\n    Returns:\n        list of lists of integers where sum(each_list) == 0\n    Examples:\n        >>> find_triplets_with_0_sum_hashing([-1, 0, 1, 2, -1, -4])\n        [[-1, 0, 1], [-1, -1, 2]]\n        >>> find_triplets_with_0_sum_hashing([])\n        []\n        >>> find_triplets_with_0_sum_hashing([0, 0, 0])\n        [[0, 0, 0]]\n        >>> find_triplets_with_0_sum_hashing([1, 2, 3, 0, -1, -2, -3])\n        [[-1, 0, 1], [-3, 1, 2], [-2, 0, 2], [-2, -1, 3], [-3, 0, 3]]\n\n    Time complexity: O(N^2)\n    Auxiliary Space: O(N)\n\n    \"\"\"\n    target_sum = 0\n\n    # Initialize the final output array with blank.\n    output_arr = []\n\n    # Set the initial element as arr[i].\n    for index, item in enumerate(arr[:-2]):\n        # to store second elements that can complement the final sum.\n        set_initialize = set()\n\n        # current sum needed for reaching the target sum\n        current_sum = target_sum - item\n\n        # Traverse the subarray arr[i+1:].\n        for other_item in arr[index + 1 :]:\n            # required value for the second element\n            required_value = current_sum - other_item\n\n            # Verify if the desired value exists in the set.\n            if required_value in set_initialize:\n                # finding triplet elements combination.\n                combination_array = sorted([item, other_item, required_value])\n                if combination_array not in output_arr:\n                    output_arr.append(combination_array)\n\n            # Include the current element in the set\n            # for subsequent complement verification.\n            set_initialize.add(other_item)\n\n    # Return all the triplet combinations.\n    return output_arr\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "data_structures/arrays/index_2d_array_in_1d.py",
    "content": "\"\"\"\nRetrieves the value of an 0-indexed 1D index from a 2D array.\nThere are two ways to retrieve value(s):\n\n1. Index2DArrayIterator(matrix) -> Iterator[int]\nThis iterator allows you to iterate through a 2D array by passing in the matrix and\ncalling next(your_iterator). You can also use the iterator in a loop.\nExamples:\nlist(Index2DArrayIterator(matrix))\nset(Index2DArrayIterator(matrix))\ntuple(Index2DArrayIterator(matrix))\nsum(Index2DArrayIterator(matrix))\n-5 in Index2DArrayIterator(matrix)\n\n2. index_2d_array_in_1d(array: list[int], index: int) -> int\nThis function allows you to provide a 2D array and a 0-indexed 1D integer index,\nand retrieves the integer value at that index.\n\nPython doctests can be run using this command:\npython3 -m doctest -v index_2d_array_in_1d.py\n\"\"\"\n\nfrom collections.abc import Iterator\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass Index2DArrayIterator:\n    matrix: list[list[int]]\n\n    def __iter__(self) -> Iterator[int]:\n        \"\"\"\n        >>> tuple(Index2DArrayIterator([[5], [-523], [-1], [34], [0]]))\n        (5, -523, -1, 34, 0)\n        >>> tuple(Index2DArrayIterator([[5, -523, -1], [34, 0]]))\n        (5, -523, -1, 34, 0)\n        >>> tuple(Index2DArrayIterator([[5, -523, -1, 34, 0]]))\n        (5, -523, -1, 34, 0)\n        >>> t = Index2DArrayIterator([[5, 2, 25], [23, 14, 5], [324, -1, 0]])\n        >>> tuple(t)\n        (5, 2, 25, 23, 14, 5, 324, -1, 0)\n        >>> list(t)\n        [5, 2, 25, 23, 14, 5, 324, -1, 0]\n        >>> sorted(t)\n        [-1, 0, 2, 5, 5, 14, 23, 25, 324]\n        >>> tuple(t)[3]\n        23\n        >>> sum(t)\n        397\n        >>> -1 in t\n        True\n        >>> t = iter(Index2DArrayIterator([[5], [-523], [-1], [34], [0]]))\n        >>> next(t)\n        5\n        >>> next(t)\n        -523\n        \"\"\"\n        for row in self.matrix:\n            yield from row\n\n\ndef index_2d_array_in_1d(array: list[list[int]], index: int) -> int:\n    \"\"\"\n    Retrieves the value of the one-dimensional index from a two-dimensional array.\n\n    Args:\n        array: A 2D array of integers where all rows are the same size and all\n               columns are the same size.\n        index: A 1D index.\n\n    Returns:\n        int: The 0-indexed value of the 1D index in the array.\n\n    Examples:\n    >>> index_2d_array_in_1d([[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]], 5)\n    5\n    >>> index_2d_array_in_1d([[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]], -1)\n    Traceback (most recent call last):\n        ...\n    ValueError: index out of range\n    >>> index_2d_array_in_1d([[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]], 12)\n    Traceback (most recent call last):\n        ...\n    ValueError: index out of range\n    >>> index_2d_array_in_1d([[]], 0)\n    Traceback (most recent call last):\n        ...\n    ValueError: no items in array\n    \"\"\"\n    rows = len(array)\n    cols = len(array[0])\n\n    if rows == 0 or cols == 0:\n        raise ValueError(\"no items in array\")\n\n    if index < 0 or index >= rows * cols:\n        raise ValueError(\"index out of range\")\n\n    return array[index // cols][index % cols]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/arrays/kth_largest_element.py",
    "content": "\"\"\"\nGiven an array of integers and an integer k, find the kth largest element in the array.\n\nhttps://stackoverflow.com/questions/251781\n\"\"\"\n\n\ndef partition(arr: list[int], low: int, high: int) -> int:\n    \"\"\"\n    Partitions list based on the pivot element.\n\n    This function rearranges the elements in the input list 'elements' such that\n    all elements greater than or equal to the chosen pivot are on the right side\n    of the pivot, and all elements smaller than the pivot are on the left side.\n\n    Args:\n        arr: The list to be partitioned\n        low: The lower index of the list\n        high: The higher index of the list\n\n    Returns:\n        int: The index of pivot element after partitioning\n\n        Examples:\n        >>> partition([3, 1, 4, 5, 9, 2, 6, 5, 3, 5], 0, 9)\n        4\n        >>> partition([7, 1, 4, 5, 9, 2, 6, 5, 8], 0, 8)\n        1\n        >>> partition(['apple', 'cherry', 'date', 'banana'], 0, 3)\n        2\n        >>> partition([3.1, 1.2, 5.6, 4.7], 0, 3)\n        1\n    \"\"\"\n    pivot = arr[high]\n    i = low - 1\n    for j in range(low, high):\n        if arr[j] >= pivot:\n            i += 1\n            arr[i], arr[j] = arr[j], arr[i]\n    arr[i + 1], arr[high] = arr[high], arr[i + 1]\n    return i + 1\n\n\ndef kth_largest_element(arr: list[int], position: int) -> int:\n    \"\"\"\n    Finds the kth largest element in a list.\n    Should deliver similar results to:\n    ```python\n    def kth_largest_element(arr, position):\n        return sorted(arr)[-position]\n    ```\n\n    Args:\n        nums: The list of numbers.\n        k: The position of the desired kth largest element.\n\n    Returns:\n        int: The kth largest element.\n\n    Examples:\n        >>> kth_largest_element([3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5], 3)\n        5\n        >>> kth_largest_element([2, 5, 6, 1, 9, 3, 8, 4, 7, 3, 5], 1)\n        9\n        >>> kth_largest_element([2, 5, 6, 1, 9, 3, 8, 4, 7, 3, 5], -2)\n        Traceback (most recent call last):\n        ...\n        ValueError: Invalid value of 'position'\n        >>> kth_largest_element([9, 1, 3, 6, 7, 9, 8, 4, 2, 4, 9], 110)\n        Traceback (most recent call last):\n        ...\n        ValueError: Invalid value of 'position'\n        >>> kth_largest_element([1, 2, 4, 3, 5, 9, 7, 6, 5, 9, 3], 0)\n        Traceback (most recent call last):\n        ...\n        ValueError: Invalid value of 'position'\n        >>> kth_largest_element(['apple', 'cherry', 'date', 'banana'], 2)\n        'cherry'\n        >>> kth_largest_element([3.1, 1.2, 5.6, 4.7,7.9,5,0], 2)\n        5.6\n        >>> kth_largest_element([-2, -5, -4, -1], 1)\n        -1\n        >>> kth_largest_element([], 1)\n        -1\n        >>> kth_largest_element([3.1, 1.2, 5.6, 4.7, 7.9, 5, 0], 1.5)\n        Traceback (most recent call last):\n        ...\n        ValueError: The position should be an integer\n        >>> kth_largest_element((4, 6, 1, 2), 4)\n        Traceback (most recent call last):\n        ...\n        TypeError: 'tuple' object does not support item assignment\n    \"\"\"\n    if not arr:\n        return -1\n    if not isinstance(position, int):\n        raise ValueError(\"The position should be an integer\")\n    if not 1 <= position <= len(arr):\n        raise ValueError(\"Invalid value of 'position'\")\n    low, high = 0, len(arr) - 1\n    while low <= high:\n        if low > len(arr) - 1 or high < 0:\n            return -1\n        pivot_index = partition(arr, low, high)\n        if pivot_index == position - 1:\n            return arr[pivot_index]\n        elif pivot_index > position - 1:\n            high = pivot_index - 1\n        else:\n            low = pivot_index + 1\n    return -1\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/arrays/median_two_array.py",
    "content": "\"\"\"\nhttps://www.enjoyalgorithms.com/blog/median-of-two-sorted-arrays\n\"\"\"\n\n\ndef find_median_sorted_arrays(nums1: list[int], nums2: list[int]) -> float:\n    \"\"\"\n    Find the median of two arrays.\n\n    Args:\n        nums1: The first array.\n        nums2: The second array.\n\n    Returns:\n    The median of the two arrays.\n\n    Examples:\n        >>> find_median_sorted_arrays([1, 3], [2])\n        2.0\n\n        >>> find_median_sorted_arrays([1, 2], [3, 4])\n        2.5\n\n        >>> find_median_sorted_arrays([0, 0], [0, 0])\n        0.0\n\n        >>> find_median_sorted_arrays([], [])\n        Traceback (most recent call last):\n            ...\n        ValueError: Both input arrays are empty.\n\n        >>> find_median_sorted_arrays([], [1])\n        1.0\n\n        >>> find_median_sorted_arrays([-1000], [1000])\n        0.0\n\n        >>> find_median_sorted_arrays([-1.1, -2.2], [-3.3, -4.4])\n        -2.75\n    \"\"\"\n    if not nums1 and not nums2:\n        raise ValueError(\"Both input arrays are empty.\")\n\n    # Merge the arrays into a single sorted array.\n    merged = sorted(nums1 + nums2)\n    total = len(merged)\n\n    if total % 2 == 1:  # If the total number of elements is odd\n        return float(merged[total // 2])  # then return the middle element\n\n    # If the total number of elements is even, calculate\n    # the average of the two middle elements as the median.\n    middle1 = merged[total // 2 - 1]\n    middle2 = merged[total // 2]\n    return (float(middle1) + float(middle2)) / 2.0\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/arrays/monotonic_array.py",
    "content": "# https://leetcode.com/problems/monotonic-array/\ndef is_monotonic(nums: list[int]) -> bool:\n    \"\"\"\n    Check if a list is monotonic.\n\n    >>> is_monotonic([1, 2, 2, 3])\n    True\n    >>> is_monotonic([6, 5, 4, 4])\n    True\n    >>> is_monotonic([1, 3, 2])\n    False\n    >>> is_monotonic([1,2,3,4,5,6,5])\n    False\n    >>> is_monotonic([-3,-2,-1])\n    True\n    >>> is_monotonic([-5,-6,-7])\n    True\n    >>> is_monotonic([0,0,0])\n    True\n    >>> is_monotonic([-100,0,100])\n    True\n    \"\"\"\n    return all(nums[i] <= nums[i + 1] for i in range(len(nums) - 1)) or all(\n        nums[i] >= nums[i + 1] for i in range(len(nums) - 1)\n    )\n\n\n# Test the function with your examples\nif __name__ == \"__main__\":\n    # Test the function with your examples\n    print(is_monotonic([1, 2, 2, 3]))  # Output: True\n    print(is_monotonic([6, 5, 4, 4]))  # Output: True\n    print(is_monotonic([1, 3, 2]))  # Output: False\n\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/arrays/pairs_with_given_sum.py",
    "content": "#!/usr/bin/env python3\n\n\"\"\"\nGiven an array of integers and an integer req_sum, find the number of pairs of array\nelements whose sum is equal to req_sum.\n\nhttps://practice.geeksforgeeks.org/problems/count-pairs-with-given-sum5022/0\n\"\"\"\n\nfrom itertools import combinations\n\n\ndef pairs_with_sum(arr: list, req_sum: int) -> int:\n    \"\"\"\n    Return the no. of pairs with sum \"sum\"\n    >>> pairs_with_sum([1, 5, 7, 1], 6)\n    2\n    >>> pairs_with_sum([1, 1, 1, 1, 1, 1, 1, 1], 2)\n    28\n    >>> pairs_with_sum([1, 7, 6, 2, 5, 4, 3, 1, 9, 8], 7)\n    4\n    \"\"\"\n    return len([1 for a, b in combinations(arr, 2) if a + b == req_sum])\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "data_structures/arrays/permutations.py",
    "content": "def permute_recursive(nums: list[int]) -> list[list[int]]:\n    \"\"\"\n    Return all permutations.\n\n    >>> permute_recursive([1, 2, 3])\n    [[3, 2, 1], [2, 3, 1], [1, 3, 2], [3, 1, 2], [2, 1, 3], [1, 2, 3]]\n    \"\"\"\n    result: list[list[int]] = []\n    if len(nums) == 0:\n        return [[]]\n    for _ in range(len(nums)):\n        n = nums.pop(0)\n        permutations = permute_recursive(nums.copy())\n        for perm in permutations:\n            perm.append(n)\n        result.extend(permutations)\n        nums.append(n)\n    return result\n\n\ndef permute_backtrack(nums: list[int]) -> list[list[int]]:\n    \"\"\"\n    Return all permutations of the given list.\n\n    >>> permute_backtrack([1, 2, 3])\n    [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2]]\n    \"\"\"\n\n    def backtrack(start: int) -> None:\n        if start == len(nums) - 1:\n            output.append(nums[:])\n        else:\n            for i in range(start, len(nums)):\n                nums[start], nums[i] = nums[i], nums[start]\n                backtrack(start + 1)\n                nums[start], nums[i] = nums[i], nums[start]  # backtrack\n\n    output: list[list[int]] = []\n    backtrack(0)\n    return output\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    result = permute_backtrack([1, 2, 3])\n    print(result)\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/arrays/prefix_sum.py",
    "content": "\"\"\"\nAuthor  : Alexander Pantyukhin\nDate    : November 3, 2022\n\nImplement the class of prefix sum with useful functions based on it.\n\n\"\"\"\n\n\nclass PrefixSum:\n    def __init__(self, array: list[int]) -> None:\n        len_array = len(array)\n        self.prefix_sum = [0] * len_array\n\n        if len_array > 0:\n            self.prefix_sum[0] = array[0]\n\n        for i in range(1, len_array):\n            self.prefix_sum[i] = self.prefix_sum[i - 1] + array[i]\n\n    def get_sum(self, start: int, end: int) -> int:\n        \"\"\"\n        The function returns the sum of array from the start to the end indexes.\n        Runtime : O(1)\n        Space: O(1)\n\n        >>> PrefixSum([1,2,3]).get_sum(0, 2)\n        6\n        >>> PrefixSum([1,2,3]).get_sum(1, 2)\n        5\n        >>> PrefixSum([1,2,3]).get_sum(2, 2)\n        3\n        >>> PrefixSum([]).get_sum(0, 0)\n        Traceback (most recent call last):\n        ...\n        ValueError: The array is empty.\n        >>> PrefixSum([1,2,3]).get_sum(-1, 2)\n        Traceback (most recent call last):\n        ...\n        ValueError: Invalid range specified.\n        >>> PrefixSum([1,2,3]).get_sum(2, 3)\n        Traceback (most recent call last):\n        ...\n        ValueError: Invalid range specified.\n        >>> PrefixSum([1,2,3]).get_sum(2, 1)\n        Traceback (most recent call last):\n        ...\n        ValueError: Invalid range specified.\n        \"\"\"\n        if not self.prefix_sum:\n            raise ValueError(\"The array is empty.\")\n\n        if start < 0 or end >= len(self.prefix_sum) or start > end:\n            raise ValueError(\"Invalid range specified.\")\n\n        if start == 0:\n            return self.prefix_sum[end]\n\n        return self.prefix_sum[end] - self.prefix_sum[start - 1]\n\n    def contains_sum(self, target_sum: int) -> bool:\n        \"\"\"\n        The function returns True if array contains the target_sum,\n        False otherwise.\n\n        Runtime : O(n)\n        Space: O(n)\n\n        >>> PrefixSum([1,2,3]).contains_sum(6)\n        True\n        >>> PrefixSum([1,2,3]).contains_sum(5)\n        True\n        >>> PrefixSum([1,2,3]).contains_sum(3)\n        True\n        >>> PrefixSum([1,2,3]).contains_sum(4)\n        False\n        >>> PrefixSum([1,2,3]).contains_sum(7)\n        False\n        >>> PrefixSum([1,-2,3]).contains_sum(2)\n        True\n        \"\"\"\n\n        sums = {0}\n        for sum_item in self.prefix_sum:\n            if sum_item - target_sum in sums:\n                return True\n\n            sums.add(sum_item)\n\n        return False\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/arrays/product_sum.py",
    "content": "\"\"\"\nCalculate the Product Sum from a Special Array.\nreference: https://dev.to/sfrasica/algorithms-product-sum-from-an-array-dc6\n\nPython doctests can be run with the following command:\npython -m doctest -v product_sum.py\n\nCalculate the product sum of a \"special\" array which can contain integers or nested\narrays. The product sum is obtained by adding all elements and multiplying by their\nrespective depths.\n\nFor example, in the array [x, y], the product sum is (x + y). In the array [x, [y, z]],\nthe product sum is x + 2 * (y + z). In the array [x, [y, [z]]],\nthe product sum is x + 2 * (y + 3z).\n\nExample Input:\n[5, 2, [-7, 1], 3, [6, [-13, 8], 4]]\nOutput: 12\n\n\"\"\"\n\n\ndef product_sum(arr: list[int | list], depth: int) -> int:\n    \"\"\"\n    Recursively calculates the product sum of an array.\n\n    The product sum of an array is defined as the sum of its elements multiplied by\n    their respective depths.  If an element is a list, its product sum is calculated\n    recursively by multiplying the sum of its elements with its depth plus one.\n\n    Args:\n        arr: The array of integers and nested lists.\n        depth: The current depth level.\n\n    Returns:\n        int: The product sum of the array.\n\n    Examples:\n        >>> product_sum([1, 2, 3], 1)\n        6\n        >>> product_sum([-1, 2, [-3, 4]], 2)\n        8\n        >>> product_sum([1, 2, 3], -1)\n        -6\n        >>> product_sum([1, 2, 3], 0)\n        0\n        >>> product_sum([1, 2, 3], 7)\n        42\n        >>> product_sum((1, 2, 3), 7)\n        42\n        >>> product_sum({1, 2, 3}, 7)\n        42\n        >>> product_sum([1, -1], 1)\n        0\n        >>> product_sum([1, -2], 1)\n        -1\n        >>> product_sum([-3.5, [1, [0.5]]], 1)\n        1.5\n\n    \"\"\"\n    total_sum = 0\n    for ele in arr:\n        total_sum += product_sum(ele, depth + 1) if isinstance(ele, list) else ele\n    return total_sum * depth\n\n\ndef product_sum_array(array: list[int | list]) -> int:\n    \"\"\"\n    Calculates the product sum of an array.\n\n    Args:\n        array (List[Union[int, List]]): The array of integers and nested lists.\n\n    Returns:\n        int: The product sum of the array.\n\n    Examples:\n        >>> product_sum_array([1, 2, 3])\n        6\n        >>> product_sum_array([1, [2, 3]])\n        11\n        >>> product_sum_array([1, [2, [3, 4]]])\n        47\n        >>> product_sum_array([0])\n        0\n        >>> product_sum_array([-3.5, [1, [0.5]]])\n        1.5\n        >>> product_sum_array([1, -2])\n        -1\n\n    \"\"\"\n    return product_sum(array, 1)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/arrays/rotate_array.py",
    "content": "def rotate_array(arr: list[int], steps: int) -> list[int]:\n    \"\"\"\n    Rotates a list to the right by steps positions.\n\n    Parameters:\n    arr (List[int]): The list of integers to rotate.\n    steps (int): Number of positions to rotate. Can be negative for left rotation.\n\n    Returns:\n    List[int]: Rotated list.\n\n    Examples:\n    >>> rotate_array([1, 2, 3, 4, 5], 2)\n    [4, 5, 1, 2, 3]\n    >>> rotate_array([1, 2, 3, 4, 5], -2)\n    [3, 4, 5, 1, 2]\n    >>> rotate_array([1, 2, 3, 4, 5], 7)\n    [4, 5, 1, 2, 3]\n    >>> rotate_array([], 3)\n    []\n    \"\"\"\n\n    n = len(arr)\n    if n == 0:\n        return arr\n\n    steps = steps % n\n\n    if steps < 0:\n        steps += n\n\n    def reverse(start: int, end: int) -> None:\n        \"\"\"\n        Reverses a portion of the list in place from index start to end.\n\n        Parameters:\n        start (int): Starting index of the portion to reverse.\n        end (int): Ending index of the portion to reverse.\n\n        Returns:\n        None\n\n        Examples:\n        >>> example = [1, 2, 3, 4, 5]\n        >>> def reverse_test(arr, start, end):\n        ...     while start < end:\n        ...         arr[start], arr[end] = arr[end], arr[start]\n        ...         start += 1\n        ...         end -= 1\n        >>> reverse_test(example, 0, 2)\n        >>> example\n        [3, 2, 1, 4, 5]\n        >>> reverse_test(example, 2, 4)\n        >>> example\n        [3, 2, 5, 4, 1]\n        \"\"\"\n\n        while start < end:\n            arr[start], arr[end] = arr[end], arr[start]\n            start += 1\n            end -= 1\n\n    reverse(0, n - 1)\n    reverse(0, steps - 1)\n    reverse(steps, n - 1)\n\n    return arr\n\n\nif __name__ == \"__main__\":\n    examples = [\n        ([1, 2, 3, 4, 5], 2),\n        ([1, 2, 3, 4, 5], -2),\n        ([1, 2, 3, 4, 5], 7),\n        ([], 3),\n    ]\n\n    for arr, steps in examples:\n        rotated = rotate_array(arr.copy(), steps)\n        print(f\"Rotate {arr} by {steps}: {rotated}\")\n"
  },
  {
    "path": "data_structures/arrays/sparse_table.py",
    "content": "\"\"\"\nSparse table is a data structure that allows answering range queries on\na static number list, i.e. the elements do not change throughout all the queries.\n\nThe implementation below will solve the problem of Range Minimum Query:\nFinding the minimum value of a subset [L..R] of a static number list.\n\nOverall time complexity: O(nlogn)\nOverall space complexity: O(nlogn)\n\nWikipedia link: https://en.wikipedia.org/wiki/Range_minimum_query\n\"\"\"\n\nfrom math import log2\n\n\ndef build_sparse_table(number_list: list[int]) -> list[list[int]]:\n    \"\"\"\n    Precompute range minimum queries with power of two length and store the precomputed\n    values in a table.\n\n    >>> build_sparse_table([8, 1, 0, 3, 4, 9, 3])\n    [[8, 1, 0, 3, 4, 9, 3], [1, 0, 0, 3, 4, 3, 0], [0, 0, 0, 3, 0, 0, 0]]\n    >>> build_sparse_table([3, 1, 9])\n    [[3, 1, 9], [1, 1, 0]]\n    >>> build_sparse_table([])\n    Traceback (most recent call last):\n    ...\n    ValueError: empty number list not allowed\n    \"\"\"\n    if not number_list:\n        raise ValueError(\"empty number list not allowed\")\n\n    length = len(number_list)\n    # Initialise sparse_table -- sparse_table[j][i] represents the minimum value of the\n    # subset of length (2 ** j) of number_list, starting from index i.\n\n    # smallest power of 2 subset length that fully covers number_list\n    row = int(log2(length)) + 1\n    sparse_table = [[0 for i in range(length)] for j in range(row)]\n\n    # minimum of subset of length 1 is that value itself\n    for i, value in enumerate(number_list):\n        sparse_table[0][i] = value\n    j = 1\n\n    # compute the minimum value for all intervals with size (2 ** j)\n    while (1 << j) <= length:\n        i = 0\n        # while subset starting from i still have at least (2 ** j) elements\n        while (i + (1 << j) - 1) < length:\n            # split range [i, i + 2 ** j] and find minimum of 2 halves\n            sparse_table[j][i] = min(\n                sparse_table[j - 1][i + (1 << (j - 1))], sparse_table[j - 1][i]\n            )\n            i += 1\n        j += 1\n    return sparse_table\n\n\ndef query(sparse_table: list[list[int]], left_bound: int, right_bound: int) -> int:\n    \"\"\"\n    >>> query(build_sparse_table([8, 1, 0, 3, 4, 9, 3]), 0, 4)\n    0\n    >>> query(build_sparse_table([8, 1, 0, 3, 4, 9, 3]), 4, 6)\n    3\n    >>> query(build_sparse_table([3, 1, 9]), 2, 2)\n    9\n    >>> query(build_sparse_table([3, 1, 9]), 0, 1)\n    1\n    >>> query(build_sparse_table([8, 1, 0, 3, 4, 9, 3]), 0, 11)\n    Traceback (most recent call last):\n    ...\n    IndexError: list index out of range\n    >>> query(build_sparse_table([]), 0, 0)\n    Traceback (most recent call last):\n    ...\n    ValueError: empty number list not allowed\n    \"\"\"\n    if left_bound < 0 or right_bound >= len(sparse_table[0]):\n        raise IndexError(\"list index out of range\")\n\n    # highest subset length of power of 2 that is within range [left_bound, right_bound]\n    j = int(log2(right_bound - left_bound + 1))\n\n    # minimum of 2 overlapping smaller subsets:\n    # [left_bound, left_bound + 2 ** j - 1] and [right_bound - 2 ** j + 1, right_bound]\n    return min(sparse_table[j][right_bound - (1 << j) + 1], sparse_table[j][left_bound])\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    print(f\"{query(build_sparse_table([3, 1, 9]), 2, 2) = }\")\n"
  },
  {
    "path": "data_structures/arrays/sudoku_solver.py",
    "content": "\"\"\"\nPlease do not modify this file!  It is published at https://norvig.com/sudoku.html with\nonly minimal changes to work with modern versions of Python.  If you have improvements,\nplease make them in a separate file.\n\"\"\"\n\nimport random\nimport time\n\n\ndef cross(items_a, items_b):\n    \"\"\"\n    Cross product of elements in A and elements in B.\n\n    >>> cross('AB', '12')\n    ['A1', 'A2', 'B1', 'B2']\n    >>> cross('ABC', '123')\n    ['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']\n    >>> cross('ABC', '1234')\n    ['A1', 'A2', 'A3', 'A4', 'B1', 'B2', 'B3', 'B4', 'C1', 'C2', 'C3', 'C4']\n    >>> cross('', '12')\n    []\n    >>> cross('A', '')\n    []\n    >>> cross('', '')\n    []\n    \"\"\"\n    return [a + b for a in items_a for b in items_b]\n\n\ndigits = \"123456789\"\nrows = \"ABCDEFGHI\"\ncols = digits\nsquares = cross(rows, cols)\nunitlist = (\n    [cross(rows, c) for c in cols]\n    + [cross(r, cols) for r in rows]\n    + [cross(rs, cs) for rs in (\"ABC\", \"DEF\", \"GHI\") for cs in (\"123\", \"456\", \"789\")]\n)\nunits = {s: [u for u in unitlist if s in u] for s in squares}\npeers = {s: {x for u in units[s] for x in u} - {s} for s in squares}\n\n\ndef test():\n    \"\"\"A set of unit tests.\"\"\"\n    assert len(squares) == 81\n    assert len(unitlist) == 27\n    assert all(len(units[s]) == 3 for s in squares)\n    assert all(len(peers[s]) == 20 for s in squares)\n    assert units[\"C2\"] == [\n        [\"A2\", \"B2\", \"C2\", \"D2\", \"E2\", \"F2\", \"G2\", \"H2\", \"I2\"],\n        [\"C1\", \"C2\", \"C3\", \"C4\", \"C5\", \"C6\", \"C7\", \"C8\", \"C9\"],\n        [\"A1\", \"A2\", \"A3\", \"B1\", \"B2\", \"B3\", \"C1\", \"C2\", \"C3\"],\n    ]\n    # fmt: off\n    assert peers[\"C2\"] == {\n        \"A2\", \"B2\", \"D2\", \"E2\", \"F2\", \"G2\", \"H2\", \"I2\", \"C1\", \"C3\",\n        \"C4\", \"C5\", \"C6\", \"C7\", \"C8\", \"C9\", \"A1\", \"A3\", \"B1\", \"B3\"\n    }\n    # fmt: on\n    print(\"All tests pass.\")\n\n\ndef parse_grid(grid):\n    \"\"\"\n    Convert grid to a dict of possible values, {square: digits}, or\n    return False if a contradiction is detected.\n    \"\"\"\n    ## To start, every square can be any digit; then assign values from the grid.\n    values = dict.fromkeys(squares, digits)\n    for s, d in grid_values(grid).items():\n        if d in digits and not assign(values, s, d):\n            return False  ## (Fail if we can't assign d to square s.)\n    return values\n\n\ndef grid_values(grid):\n    \"\"\"\n    Convert grid into a dict of {square: char} with '0' or '.' for empties.\n    \"\"\"\n    chars = [c for c in grid if c in digits or c in \"0.\"]\n    assert len(chars) == 81\n    return dict(zip(squares, chars))\n\n\ndef assign(values, s, d):\n    \"\"\"\n    Eliminate all the other values (except d) from values[s] and propagate.\n    Return values, except return False if a contradiction is detected.\n    \"\"\"\n    other_values = values[s].replace(d, \"\")\n    if all(eliminate(values, s, d2) for d2 in other_values):\n        return values\n    else:\n        return False\n\n\ndef eliminate(values, s, d):\n    \"\"\"\n    Eliminate d from values[s]; propagate when values or places <= 2.\n    Return values, except return False if a contradiction is detected.\n    \"\"\"\n    if d not in values[s]:\n        return values  ## Already eliminated\n    values[s] = values[s].replace(d, \"\")\n    ## (1) If a square s is reduced to one value d2, then eliminate d2 from the peers.\n    if len(values[s]) == 0:\n        return False  ## Contradiction: removed last value\n    elif len(values[s]) == 1:\n        d2 = values[s]\n        if not all(eliminate(values, s2, d2) for s2 in peers[s]):\n            return False\n    ## (2) If a unit u is reduced to only one place for a value d, then put it there.\n    for u in units[s]:\n        dplaces = [s for s in u if d in values[s]]\n        if len(dplaces) == 0:\n            return False  ## Contradiction: no place for this value\n        # d can only be in one place in unit; assign it there\n        elif len(dplaces) == 1 and not assign(values, dplaces[0], d):\n            return False\n    return values\n\n\ndef display(values):\n    \"\"\"\n    Display these values as a 2-D grid.\n    \"\"\"\n    width = 1 + max(len(values[s]) for s in squares)\n    line = \"+\".join([\"-\" * (width * 3)] * 3)\n    for r in rows:\n        print(\n            \"\".join(\n                values[r + c].center(width) + (\"|\" if c in \"36\" else \"\") for c in cols\n            )\n        )\n        if r in \"CF\":\n            print(line)\n    print()\n\n\ndef solve(grid):\n    \"\"\"\n    Solve the grid.\n    \"\"\"\n    return search(parse_grid(grid))\n\n\ndef some(seq):\n    \"\"\"Return some element of seq that is true.\"\"\"\n    for e in seq:\n        if e:\n            return e\n    return False\n\n\ndef search(values):\n    \"\"\"\n    Using depth-first search and propagation, try all possible values.\n    \"\"\"\n    if values is False:\n        return False  ## Failed earlier\n    if all(len(values[s]) == 1 for s in squares):\n        return values  ## Solved!\n    ## Chose the unfilled square s with the fewest possibilities\n    _n, s = min((len(values[s]), s) for s in squares if len(values[s]) > 1)\n    return some(search(assign(values.copy(), s, d)) for d in values[s])\n\n\ndef solve_all(grids, name=\"\", showif=0.0):\n    \"\"\"\n    Attempt to solve a sequence of grids. Report results.\n    When showif is a number of seconds, display puzzles that take longer.\n    When showif is None, don't display any puzzles.\n    \"\"\"\n\n    def time_solve(grid):\n        start = time.monotonic()\n        values = solve(grid)\n        t = time.monotonic() - start\n        ## Display puzzles that take long enough\n        if showif is not None and t > showif:\n            display(grid_values(grid))\n            if values:\n                display(values)\n            print(f\"({t:.5f} seconds)\\n\")\n        return (t, solved(values))\n\n    times, results = zip(*[time_solve(grid) for grid in grids])\n    if (n := len(grids)) > 1:\n        print(\n            \"Solved %d of %d %s puzzles (avg %.2f secs (%d Hz), max %.2f secs).\"  # noqa: UP031\n            % (sum(results), n, name, sum(times) / n, n / sum(times), max(times))\n        )\n\n\ndef solved(values):\n    \"\"\"\n    A puzzle is solved if each unit is a permutation of the digits 1 to 9.\n    \"\"\"\n\n    def unitsolved(unit):\n        return {values[s] for s in unit} == set(digits)\n\n    return values is not False and all(unitsolved(unit) for unit in unitlist)\n\n\ndef from_file(filename, sep=\"\\n\"):\n    \"Parse a file into a list of strings, separated by sep.\"\n    with open(filename) as file:\n        return file.read().strip().split(sep)\n\n\ndef random_puzzle(assignments=17):\n    \"\"\"\n    Make a random puzzle with N or more assignments. Restart on contradictions.\n    Note the resulting puzzle is not guaranteed to be solvable, but empirically\n    about 99.8% of them are solvable. Some have multiple solutions.\n    \"\"\"\n    values = dict.fromkeys(squares, digits)\n    for s in shuffled(squares):\n        if not assign(values, s, random.choice(values[s])):\n            break\n        ds = [values[s] for s in squares if len(values[s]) == 1]\n        if len(ds) >= assignments and len(set(ds)) >= 8:\n            return \"\".join(values[s] if len(values[s]) == 1 else \".\" for s in squares)\n    return random_puzzle(assignments)  ## Give up and make a new puzzle\n\n\ndef shuffled(seq):\n    \"\"\"\n    Return a randomly shuffled copy of the input sequence.\n    \"\"\"\n    seq = list(seq)\n    random.shuffle(seq)\n    return seq\n\n\ngrid1 = (\n    \"003020600900305001001806400008102900700000008006708200002609500800203009005010300\"\n)\ngrid2 = (\n    \"4.....8.5.3..........7......2.....6.....8.4......1.......6.3.7.5..2.....1.4......\"\n)\nhard1 = (\n    \".....6....59.....82....8....45........3........6..3.54...325..6..................\"\n)\n\nif __name__ == \"__main__\":\n    test()\n    # solve_all(from_file(\"easy50.txt\", '========'), \"easy\", None)\n    # solve_all(from_file(\"top95.txt\"), \"hard\", None)\n    # solve_all(from_file(\"hardest.txt\"), \"hardest\", None)\n    solve_all([random_puzzle() for _ in range(99)], \"random\", 100.0)\n    for puzzle in (grid1, grid2):  # , hard1):  # Takes 22 sec to solve on my M1 Mac.\n        display(parse_grid(puzzle))\n        start = time.monotonic()\n        solve(puzzle)\n        t = time.monotonic() - start\n        print(f\"Solved: {t:.5f} sec\")\n"
  },
  {
    "path": "data_structures/binary_tree/README.md",
    "content": "# Binary Tree Traversal\n\n## Overview\n\nThe combination of binary trees being data structures and traversal being an algorithm relates to classic problems, either directly or indirectly.\n\n> If you can grasp the traversal of binary trees, the traversal of other complicated trees will be easy for you.\n\nThe following are some common ways to traverse trees.\n\n- Depth First Traversals (DFS): In-order, Pre-order, Post-order\n\n- Level Order Traversal or Breadth First or Traversal (BFS)\n\nThere are applications for both DFS and BFS.\n\nStack 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.\n\nGraph for DFS:\n\n![binary-tree-traversal-dfs](https://tva1.sinaimg.cn/large/007S8ZIlly1ghluhzhynsg30dw0dw3yl.gif)\n\nThe 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.\n\n## Pre-order Traversal\n\nThe traversal order of pre-order traversal is `root-left-right`.\n\nAlgorithm Pre-order\n\n1. Visit the root node and push it into a stack.\n\n2. Pop a node from the stack, and push its right and left child node into the stack respectively.\n\n3. Repeat step 2.\n\nConclusion: 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.\n\nIf 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.\n\n## In-order Traversal\n\nThe traversal order of in-order traversal is `left-root-right`.\n\nSo the root node is not printed first. Things are getting a bit complicated here.\n\nAlgorithm In-order\n\n1. Visit the root and push it into a stack.\n\n2. If there is a left child node, push it into the stack. Repeat this process until a leaf node reached.\n\n    > At this point the root node and all the left nodes are in the stack.\n\n3. Start popping nodes from the stack. If a node has a right child node, push the child node into the stack. Repeat step 2.\n\nIt'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.\n\n## Post-order Traversal\n\nThe traversal order of post-order traversal is `left-right-root`.\n\nThis one is a bit of a challenge. It deserves the `hard` tag of LeetCode.\n\nIn this case, the root node is printed not as the first but the last one. A cunning way to do it is to:\n\nRecord 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.\n\nAs 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`.\n\nAs 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)`.\n\n## Level Order Traversal\n\nThe 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.\n\n![binary-tree-traversal-bfs](https://tva1.sinaimg.cn/large/007S8ZIlly1ghlui1tpoug30dw0dw3yl.gif)\n\nAlgorithm Level-order\n\n1. Visit the root node, put it in a FIFO queue, put in the queue a special flag (we are using `null` here).\n\n2. Dequeue a node.\n\n3. 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`.\n\n4. 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.\n\n## Bi-color marking\n\nWe know that there is a tri-color marking in garbage collection algorithm, which works as described below.\n\n- The white color represents \"not visited\".\n\n- The gray color represents \"not all child nodes visited\".\n\n- The black color represents \"all child nodes visited\".\n\nEnlightened by tri-color marking, a bi-color marking method can be invented to solve all three traversal problems with one solution.\n\nThe core idea is as follow.\n\n- 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.\n\n- 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.\n\n- If we are visiting a gray node, print it.\n\nImplementation of pre-order and post-order traversal algorithms can be easily done by changing the order of pushing the child nodes into the stack.\n\nReference: [LeetCode](https://github.com/azl397985856/leetcode/blob/master/thinkings/binary-tree-traversal.en.md)\n"
  },
  {
    "path": "data_structures/binary_tree/__init__.py",
    "content": ""
  },
  {
    "path": "data_structures/binary_tree/avl_tree.py",
    "content": "\"\"\"\nImplementation of an auto-balanced binary tree!\nFor doctests run following command:\npython3 -m doctest -v avl_tree.py\nFor testing run:\npython avl_tree.py\n\"\"\"\n\nfrom __future__ import annotations\n\nimport math\nimport random\nfrom typing import Any\n\n\nclass MyQueue:\n    def __init__(self) -> None:\n        self.data: list[Any] = []\n        self.head: int = 0\n        self.tail: int = 0\n\n    def is_empty(self) -> bool:\n        return self.head == self.tail\n\n    def push(self, data: Any) -> None:\n        self.data.append(data)\n        self.tail = self.tail + 1\n\n    def pop(self) -> Any:\n        ret = self.data[self.head]\n        self.head = self.head + 1\n        return ret\n\n    def count(self) -> int:\n        return self.tail - self.head\n\n    def print_queue(self) -> None:\n        print(self.data)\n        print(\"**************\")\n        print(self.data[self.head : self.tail])\n\n\nclass MyNode:\n    def __init__(self, data: Any) -> None:\n        self.data = data\n        self.left: MyNode | None = None\n        self.right: MyNode | None = None\n        self.height: int = 1\n\n    def get_data(self) -> Any:\n        return self.data\n\n    def get_left(self) -> MyNode | None:\n        return self.left\n\n    def get_right(self) -> MyNode | None:\n        return self.right\n\n    def get_height(self) -> int:\n        return self.height\n\n    def set_data(self, data: Any) -> None:\n        self.data = data\n\n    def set_left(self, node: MyNode | None) -> None:\n        self.left = node\n\n    def set_right(self, node: MyNode | None) -> None:\n        self.right = node\n\n    def set_height(self, height: int) -> None:\n        self.height = height\n\n\ndef get_height(node: MyNode | None) -> int:\n    if node is None:\n        return 0\n    return node.get_height()\n\n\ndef my_max(a: int, b: int) -> int:\n    if a > b:\n        return a\n    return b\n\n\ndef right_rotation(node: MyNode) -> MyNode:\n    r\"\"\"\n            A                      B\n           / \\                    / \\\n          B   C                  Bl  A\n         / \\       -->          /   / \\\n        Bl  Br                 UB Br  C\n       /\n     UB\n    UB = unbalanced node\n    \"\"\"\n    print(\"left rotation node:\", node.get_data())\n    ret = node.get_left()\n    assert ret is not None\n    node.set_left(ret.get_right())\n    ret.set_right(node)\n    h1 = my_max(get_height(node.get_right()), get_height(node.get_left())) + 1\n    node.set_height(h1)\n    h2 = my_max(get_height(ret.get_right()), get_height(ret.get_left())) + 1\n    ret.set_height(h2)\n    return ret\n\n\ndef left_rotation(node: MyNode) -> MyNode:\n    \"\"\"\n    a mirror symmetry rotation of the left_rotation\n    \"\"\"\n    print(\"right rotation node:\", node.get_data())\n    ret = node.get_right()\n    assert ret is not None\n    node.set_right(ret.get_left())\n    ret.set_left(node)\n    h1 = my_max(get_height(node.get_right()), get_height(node.get_left())) + 1\n    node.set_height(h1)\n    h2 = my_max(get_height(ret.get_right()), get_height(ret.get_left())) + 1\n    ret.set_height(h2)\n    return ret\n\n\ndef lr_rotation(node: MyNode) -> MyNode:\n    r\"\"\"\n            A              A                    Br\n           / \\            / \\                  /  \\\n          B   C    LR    Br  C       RR       B    A\n         / \\       -->  /  \\         -->    /     / \\\n        Bl  Br         B   UB              Bl    UB  C\n             \\        /\n             UB     Bl\n    RR = right_rotation   LR = left_rotation\n    \"\"\"\n    left_child = node.get_left()\n    assert left_child is not None\n    node.set_left(left_rotation(left_child))\n    return right_rotation(node)\n\n\ndef rl_rotation(node: MyNode) -> MyNode:\n    right_child = node.get_right()\n    assert right_child is not None\n    node.set_right(right_rotation(right_child))\n    return left_rotation(node)\n\n\ndef insert_node(node: MyNode | None, data: Any) -> MyNode | None:\n    if node is None:\n        return MyNode(data)\n    if data < node.get_data():\n        node.set_left(insert_node(node.get_left(), data))\n        if (\n            get_height(node.get_left()) - get_height(node.get_right()) == 2\n        ):  # an unbalance detected\n            left_child = node.get_left()\n            assert left_child is not None\n            if (\n                data < left_child.get_data()\n            ):  # new node is the left child of the left child\n                node = right_rotation(node)\n            else:\n                node = lr_rotation(node)\n    else:\n        node.set_right(insert_node(node.get_right(), data))\n        if get_height(node.get_right()) - get_height(node.get_left()) == 2:\n            right_child = node.get_right()\n            assert right_child is not None\n            if data < right_child.get_data():\n                node = rl_rotation(node)\n            else:\n                node = left_rotation(node)\n    h1 = my_max(get_height(node.get_right()), get_height(node.get_left())) + 1\n    node.set_height(h1)\n    return node\n\n\ndef get_right_most(root: MyNode) -> Any:\n    while True:\n        right_child = root.get_right()\n        if right_child is None:\n            break\n        root = right_child\n    return root.get_data()\n\n\ndef get_left_most(root: MyNode) -> Any:\n    while True:\n        left_child = root.get_left()\n        if left_child is None:\n            break\n        root = left_child\n    return root.get_data()\n\n\ndef del_node(root: MyNode, data: Any) -> MyNode | None:\n    left_child = root.get_left()\n    right_child = root.get_right()\n    if root.get_data() == data:\n        if left_child is not None and right_child is not None:\n            temp_data = get_left_most(right_child)\n            root.set_data(temp_data)\n            root.set_right(del_node(right_child, temp_data))\n        elif left_child is not None:\n            root = left_child\n        elif right_child is not None:\n            root = right_child\n        else:\n            return None\n    elif root.get_data() > data:\n        if left_child is None:\n            print(\"No such data\")\n            return root\n        else:\n            root.set_left(del_node(left_child, data))\n    # root.get_data() < data\n    elif right_child is None:\n        return root\n    else:\n        root.set_right(del_node(right_child, data))\n\n    # Re-fetch left_child and right_child references\n    left_child = root.get_left()\n    right_child = root.get_right()\n\n    if get_height(right_child) - get_height(left_child) == 2:\n        assert right_child is not None\n        if get_height(right_child.get_right()) > get_height(right_child.get_left()):\n            root = left_rotation(root)\n        else:\n            root = rl_rotation(root)\n    elif get_height(right_child) - get_height(left_child) == -2:\n        assert left_child is not None\n        if get_height(left_child.get_left()) > get_height(left_child.get_right()):\n            root = right_rotation(root)\n        else:\n            root = lr_rotation(root)\n    height = my_max(get_height(root.get_right()), get_height(root.get_left())) + 1\n    root.set_height(height)\n    return root\n\n\nclass AVLtree:\n    \"\"\"\n    An AVL tree doctest\n    Examples:\n    >>> t = AVLtree()\n    >>> t.insert(4)\n    insert:4\n    >>> print(str(t).replace(\" \\\\n\",\"\\\\n\"))\n     4\n    *************************************\n    >>> t.insert(2)\n    insert:2\n    >>> print(str(t).replace(\" \\\\n\",\"\\\\n\").replace(\" \\\\n\",\"\\\\n\"))\n      4\n     2  *\n    *************************************\n    >>> t.insert(3)\n    insert:3\n    right rotation node: 2\n    left rotation node: 4\n    >>> print(str(t).replace(\" \\\\n\",\"\\\\n\").replace(\" \\\\n\",\"\\\\n\"))\n      3\n     2  4\n    *************************************\n    >>> t.get_height()\n    2\n    >>> t.del_node(3)\n    delete:3\n    >>> print(str(t).replace(\" \\\\n\",\"\\\\n\").replace(\" \\\\n\",\"\\\\n\"))\n      4\n     2  *\n    *************************************\n    \"\"\"\n\n    def __init__(self) -> None:\n        self.root: MyNode | None = None\n\n    def get_height(self) -> int:\n        return get_height(self.root)\n\n    def insert(self, data: Any) -> None:\n        print(\"insert:\" + str(data))\n        self.root = insert_node(self.root, data)\n\n    def del_node(self, data: Any) -> None:\n        print(\"delete:\" + str(data))\n        if self.root is None:\n            print(\"Tree is empty!\")\n            return\n        self.root = del_node(self.root, data)\n\n    def __str__(\n        self,\n    ) -> str:  # a level traversale, gives a more intuitive look on the tree\n        output = \"\"\n        q = MyQueue()\n        q.push(self.root)\n        layer = self.get_height()\n        if layer == 0:\n            return output\n        cnt = 0\n        while not q.is_empty():\n            node = q.pop()\n            space = \" \" * int(math.pow(2, layer - 1))\n            output += space\n            if node is None:\n                output += \"*\"\n                q.push(None)\n                q.push(None)\n            else:\n                output += str(node.get_data())\n                q.push(node.get_left())\n                q.push(node.get_right())\n            output += space\n            cnt = cnt + 1\n            for i in range(100):\n                if cnt == math.pow(2, i) - 1:\n                    layer = layer - 1\n                    if layer == 0:\n                        output += \"\\n*************************************\"\n                        return output\n                    output += \"\\n\"\n                    break\n        output += \"\\n*************************************\"\n        return output\n\n\ndef _test() -> None:\n    import doctest\n\n    doctest.testmod()\n\n\nif __name__ == \"__main__\":\n    _test()\n    t = AVLtree()\n    lst = list(range(10))\n    random.shuffle(lst)\n    for i in lst:\n        t.insert(i)\n        print(str(t))\n    random.shuffle(lst)\n    for i in lst:\n        t.del_node(i)\n        print(str(t))\n"
  },
  {
    "path": "data_structures/binary_tree/basic_binary_tree.py",
    "content": "from __future__ import annotations\n\nfrom collections.abc import Iterator\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass Node:\n    data: int\n    left: Node | None = None\n    right: Node | None = None\n\n    def __iter__(self) -> Iterator[int]:\n        if self.left:\n            yield from self.left\n        yield self.data\n        if self.right:\n            yield from self.right\n\n    def __len__(self) -> int:\n        return sum(1 for _ in self)\n\n    def is_full(self) -> bool:\n        if not self or (not self.left and not self.right):\n            return True\n        if self.left and self.right:\n            return self.left.is_full() and self.right.is_full()\n        return False\n\n\n@dataclass\nclass BinaryTree:\n    root: Node\n\n    def __iter__(self) -> Iterator[int]:\n        return iter(self.root)\n\n    def __len__(self) -> int:\n        return len(self.root)\n\n    @classmethod\n    def small_tree(cls) -> BinaryTree:\n        \"\"\"\n        Return a small binary tree with 3 nodes.\n        >>> binary_tree = BinaryTree.small_tree()\n        >>> len(binary_tree)\n        3\n        >>> list(binary_tree)\n        [1, 2, 3]\n        \"\"\"\n        binary_tree = BinaryTree(Node(2))\n        binary_tree.root.left = Node(1)\n        binary_tree.root.right = Node(3)\n        return binary_tree\n\n    @classmethod\n    def medium_tree(cls) -> BinaryTree:\n        \"\"\"\n        Return a medium binary tree with 3 nodes.\n        >>> binary_tree = BinaryTree.medium_tree()\n        >>> len(binary_tree)\n        7\n        >>> list(binary_tree)\n        [1, 2, 3, 4, 5, 6, 7]\n        \"\"\"\n        binary_tree = BinaryTree(Node(4))\n        binary_tree.root.left = two = Node(2)\n        two.left = Node(1)\n        two.right = Node(3)\n        binary_tree.root.right = five = Node(5)\n        five.right = six = Node(6)\n        six.right = Node(7)\n        return binary_tree\n\n    def depth(self) -> int:\n        \"\"\"\n        Returns the depth of the tree\n\n        >>> BinaryTree(Node(1)).depth()\n        1\n        >>> BinaryTree.small_tree().depth()\n        2\n        >>> BinaryTree.medium_tree().depth()\n        4\n        \"\"\"\n        return self._depth(self.root)\n\n    def _depth(self, node: Node | None) -> int:\n        if not node:\n            return 0\n        return 1 + max(self._depth(node.left), self._depth(node.right))\n\n    def is_full(self) -> bool:\n        \"\"\"\n        Returns True if the tree is full\n\n        >>> BinaryTree(Node(1)).is_full()\n        True\n        >>> BinaryTree.small_tree().is_full()\n        True\n        >>> BinaryTree.medium_tree().is_full()\n        False\n        \"\"\"\n        return self.root.is_full()\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/binary_tree/binary_search_tree.py",
    "content": "r\"\"\"\nA binary search Tree\n\nExample\n              8\n             / \\\n            3   10\n           / \\    \\\n          1   6    14\n             / \\   /\n            4   7 13\n\n>>> t = BinarySearchTree().insert(8, 3, 6, 1, 10, 14, 13, 4, 7)\n>>> print(\" \".join(repr(i.value) for i in t.traversal_tree()))\n8 3 1 6 4 7 10 14 13\n\n>>> tuple(i.value for i in t.traversal_tree(inorder))\n(1, 3, 4, 6, 7, 8, 10, 13, 14)\n>>> tuple(t)\n(1, 3, 4, 6, 7, 8, 10, 13, 14)\n>>> t.find_kth_smallest(3, t.root)\n4\n>>> tuple(t)[3-1]\n4\n\n>>> print(\" \".join(repr(i.value) for i in t.traversal_tree(postorder)))\n1 4 7 6 3 13 14 10 8\n>>> t.remove(20)\nTraceback (most recent call last):\n    ...\nValueError: Value 20 not found\n>>> BinarySearchTree().search(6)\nTraceback (most recent call last):\n    ...\nIndexError: Warning: Tree is empty! please use another.\n\nOther example:\n\n>>> testlist = (8, 3, 6, 1, 10, 14, 13, 4, 7)\n>>> t = BinarySearchTree()\n>>> for i in testlist:\n...     t.insert(i)  # doctest: +ELLIPSIS\nBinarySearchTree(root=8)\nBinarySearchTree(root={'8': (3, None)})\nBinarySearchTree(root={'8': ({'3': (None, 6)}, None)})\nBinarySearchTree(root={'8': ({'3': (1, 6)}, None)})\nBinarySearchTree(root={'8': ({'3': (1, 6)}, 10)})\nBinarySearchTree(root={'8': ({'3': (1, 6)}, {'10': (None, 14)})})\nBinarySearchTree(root={'8': ({'3': (1, 6)}, {'10': (None, {'14': (13, None)})})})\nBinarySearchTree(root={'8': ({'3': (1, {'6': (4, None)})}, {'10': (None, {'14': ...\nBinarySearchTree(root={'8': ({'3': (1, {'6': (4, 7)})}, {'10': (None, {'14': (13, ...\n\nPrints all the elements of the list in order traversal\n>>> print(t)\n{'8': ({'3': (1, {'6': (4, 7)})}, {'10': (None, {'14': (13, None)})})}\n\nTest existence\n>>> t.search(6) is not None\nTrue\n>>> 6 in t\nTrue\n>>> t.search(-1) is not None\nFalse\n>>> -1 in t\nFalse\n\n>>> t.search(6).is_right\nTrue\n>>> t.search(1).is_right\nFalse\n\n>>> t.get_max().value\n14\n>>> max(t)\n14\n>>> t.get_min().value\n1\n>>> min(t)\n1\n>>> t.empty()\nFalse\n>>> not t\nFalse\n>>> for i in testlist:\n...     t.remove(i)\n>>> t.empty()\nTrue\n>>> not t\nTrue\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections.abc import Iterable, Iterator\nfrom dataclasses import dataclass\nfrom typing import Any, Self\n\n\n@dataclass\nclass Node:\n    value: int\n    left: Node | None = None\n    right: Node | None = None\n    parent: Node | None = None  # Added in order to delete a node easier\n\n    def __iter__(self) -> Iterator[int]:\n        \"\"\"\n        >>> list(Node(0))\n        [0]\n        >>> list(Node(0, Node(-1), Node(1), None))\n        [-1, 0, 1]\n        \"\"\"\n        yield from self.left or []\n        yield self.value\n        yield from self.right or []\n\n    def __repr__(self) -> str:\n        from pprint import pformat\n\n        if self.left is None and self.right is None:\n            return str(self.value)\n        return pformat({f\"{self.value}\": (self.left, self.right)}, indent=1)\n\n    @property\n    def is_right(self) -> bool:\n        return bool(self.parent and self is self.parent.right)\n\n\n@dataclass\nclass BinarySearchTree:\n    root: Node | None = None\n\n    def __bool__(self) -> bool:\n        return bool(self.root)\n\n    def __iter__(self) -> Iterator[int]:\n        yield from self.root or []\n\n    def __str__(self) -> str:\n        \"\"\"\n        Return a string of all the Nodes using in order traversal\n        \"\"\"\n        return str(self.root)\n\n    def __reassign_nodes(self, node: Node, new_children: Node | None) -> None:\n        if new_children is not None:  # reset its kids\n            new_children.parent = node.parent\n        if node.parent is not None:  # reset its parent\n            if node.is_right:  # If it is the right child\n                node.parent.right = new_children\n            else:\n                node.parent.left = new_children\n        else:\n            self.root = new_children\n\n    def empty(self) -> bool:\n        \"\"\"\n        Returns True if the tree does not have any element(s).\n        False if the tree has element(s).\n\n        >>> BinarySearchTree().empty()\n        True\n        >>> BinarySearchTree().insert(1).empty()\n        False\n        >>> BinarySearchTree().insert(8, 3, 6, 1, 10, 14, 13, 4, 7).empty()\n        False\n        \"\"\"\n        return not self.root\n\n    def __insert(self, value) -> None:\n        \"\"\"\n        Insert a new node in Binary Search Tree with value label\n        \"\"\"\n        new_node = Node(value)  # create a new Node\n        if self.empty():  # if Tree is empty\n            self.root = new_node  # set its root\n        else:  # Tree is not empty\n            parent_node = self.root  # from root\n            if parent_node is None:\n                return\n            while True:  # While we don't get to a leaf\n                if value < parent_node.value:  # We go left\n                    if parent_node.left is None:\n                        parent_node.left = new_node  # We insert the new node in a leaf\n                        break\n                    else:\n                        parent_node = parent_node.left\n                elif parent_node.right is None:\n                    parent_node.right = new_node\n                    break\n                else:\n                    parent_node = parent_node.right\n            new_node.parent = parent_node\n\n    def insert(self, *values) -> Self:\n        for value in values:\n            self.__insert(value)\n        return self\n\n    def search(self, value) -> Node | None:\n        \"\"\"\n        >>> tree = BinarySearchTree().insert(10, 20, 30, 40, 50)\n        >>> tree.search(10)\n        {'10': (None, {'20': (None, {'30': (None, {'40': (None, 50)})})})}\n        >>> tree.search(20)\n        {'20': (None, {'30': (None, {'40': (None, 50)})})}\n        >>> tree.search(30)\n        {'30': (None, {'40': (None, 50)})}\n        >>> tree.search(40)\n        {'40': (None, 50)}\n        >>> tree.search(50)\n        50\n        >>> tree.search(5) is None  # element not present\n        True\n        >>> tree.search(0) is None  # element not present\n        True\n        >>> tree.search(-5) is None  # element not present\n        True\n        >>> BinarySearchTree().search(10)\n        Traceback (most recent call last):\n            ...\n        IndexError: Warning: Tree is empty! please use another.\n        \"\"\"\n\n        if self.empty():\n            raise IndexError(\"Warning: Tree is empty! please use another.\")\n        else:\n            node = self.root\n            # use lazy evaluation here to avoid NoneType Attribute error\n            while node is not None and node.value is not value:\n                node = node.left if value < node.value else node.right\n            return node\n\n    def get_max(self, node: Node | None = None) -> Node | None:\n        \"\"\"\n        We go deep on the right branch\n\n        >>> BinarySearchTree().insert(10, 20, 30, 40, 50).get_max()\n        50\n        >>> BinarySearchTree().insert(-5, -1, 0.1, -0.3, -4.5).get_max()\n        {'0.1': (-0.3, None)}\n        >>> BinarySearchTree().insert(1, 78.3, 30, 74.0, 1).get_max()\n        {'78.3': ({'30': (1, 74.0)}, None)}\n        >>> BinarySearchTree().insert(1, 783, 30, 740, 1).get_max()\n        {'783': ({'30': (1, 740)}, None)}\n        \"\"\"\n        if node is None:\n            if self.root is None:\n                return None\n            node = self.root\n\n        if not self.empty():\n            while node.right is not None:\n                node = node.right\n        return node\n\n    def get_min(self, node: Node | None = None) -> Node | None:\n        \"\"\"\n        We go deep on the left branch\n\n        >>> BinarySearchTree().insert(10, 20, 30, 40, 50).get_min()\n        {'10': (None, {'20': (None, {'30': (None, {'40': (None, 50)})})})}\n        >>> BinarySearchTree().insert(-5, -1, 0, -0.3, -4.5).get_min()\n        {'-5': (None, {'-1': (-4.5, {'0': (-0.3, None)})})}\n        >>> BinarySearchTree().insert(1, 78.3, 30, 74.0, 1).get_min()\n        {'1': (None, {'78.3': ({'30': (1, 74.0)}, None)})}\n        >>> BinarySearchTree().insert(1, 783, 30, 740, 1).get_min()\n        {'1': (None, {'783': ({'30': (1, 740)}, None)})}\n        \"\"\"\n        if node is None:\n            node = self.root\n        if self.root is None:\n            return None\n        if not self.empty():\n            node = self.root\n            while node.left is not None:\n                node = node.left\n        return node\n\n    def remove(self, value: int) -> None:\n        # Look for the node with that label\n        node = self.search(value)\n        if node is None:\n            msg = f\"Value {value} not found\"\n            raise ValueError(msg)\n\n        if node.left is None and node.right is None:  # If it has no children\n            self.__reassign_nodes(node, None)\n        elif node.left is None:  # Has only right children\n            self.__reassign_nodes(node, node.right)\n        elif node.right is None:  # Has only left children\n            self.__reassign_nodes(node, node.left)\n        else:\n            predecessor = self.get_max(\n                node.left\n            )  # Gets the max value of the left branch\n            self.remove(predecessor.value)  # type: ignore[union-attr]\n            node.value = (\n                predecessor.value  # type: ignore[union-attr]\n            )  # Assigns the value to the node to delete and keep tree structure\n\n    def preorder_traverse(self, node: Node | None) -> Iterable:\n        if node is not None:\n            yield node  # Preorder Traversal\n            yield from self.preorder_traverse(node.left)\n            yield from self.preorder_traverse(node.right)\n\n    def traversal_tree(self, traversal_function=None) -> Any:\n        \"\"\"\n        This function traversal the tree.\n        You can pass a function to traversal the tree as needed by client code\n        \"\"\"\n        if traversal_function is None:\n            return self.preorder_traverse(self.root)\n        else:\n            return traversal_function(self.root)\n\n    def inorder(self, arr: list, node: Node | None) -> None:\n        \"\"\"Perform an inorder traversal and append values of the nodes to\n        a list named arr\"\"\"\n        if node:\n            self.inorder(arr, node.left)\n            arr.append(node.value)\n            self.inorder(arr, node.right)\n\n    def find_kth_smallest(self, k: int, node: Node) -> int:\n        \"\"\"Return the kth smallest element in a binary search tree\"\"\"\n        arr: list[int] = []\n        self.inorder(arr, node)  # append all values to list using inorder traversal\n        return arr[k - 1]\n\n\ndef inorder(curr_node: Node | None) -> list[Node]:\n    \"\"\"\n    inorder (left, self, right)\n    \"\"\"\n    node_list = []\n    if curr_node is not None:\n        node_list = [*inorder(curr_node.left), curr_node, *inorder(curr_node.right)]\n    return node_list\n\n\ndef postorder(curr_node: Node | None) -> list[Node]:\n    \"\"\"\n    postOrder (left, right, self)\n    \"\"\"\n    node_list = []\n    if curr_node is not None:\n        node_list = postorder(curr_node.left) + postorder(curr_node.right) + [curr_node]\n    return node_list\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod(verbose=True)\n"
  },
  {
    "path": "data_structures/binary_tree/binary_search_tree_recursive.py",
    "content": "\"\"\"\nThis is a python3 implementation of binary search tree using recursion\n\nTo run tests:\npython -m unittest binary_search_tree_recursive.py\n\nTo run an example:\npython binary_search_tree_recursive.py\n\"\"\"\n\nfrom __future__ import annotations\n\nimport unittest\nfrom collections.abc import Iterator\n\nimport pytest\n\n\nclass Node:\n    def __init__(self, label: int, parent: Node | None) -> None:\n        self.label = label\n        self.parent = parent\n        self.left: Node | None = None\n        self.right: Node | None = None\n\n\nclass BinarySearchTree:\n    def __init__(self) -> None:\n        self.root: Node | None = None\n\n    def empty(self) -> None:\n        \"\"\"\n        Empties the tree\n\n        >>> t = BinarySearchTree()\n        >>> assert t.root is None\n        >>> t.put(8)\n        >>> assert t.root is not None\n        \"\"\"\n        self.root = None\n\n    def is_empty(self) -> bool:\n        \"\"\"\n        Checks if the tree is empty\n\n        >>> t = BinarySearchTree()\n        >>> t.is_empty()\n        True\n        >>> t.put(8)\n        >>> t.is_empty()\n        False\n        \"\"\"\n        return self.root is None\n\n    def put(self, label: int) -> None:\n        \"\"\"\n        Put a new node in the tree\n\n        >>> t = BinarySearchTree()\n        >>> t.put(8)\n        >>> assert t.root.parent is None\n        >>> assert t.root.label == 8\n\n        >>> t.put(10)\n        >>> assert t.root.right.parent == t.root\n        >>> assert t.root.right.label == 10\n\n        >>> t.put(3)\n        >>> assert t.root.left.parent == t.root\n        >>> assert t.root.left.label == 3\n        \"\"\"\n        self.root = self._put(self.root, label)\n\n    def _put(self, node: Node | None, label: int, parent: Node | None = None) -> Node:\n        if node is None:\n            node = Node(label, parent)\n        elif label < node.label:\n            node.left = self._put(node.left, label, node)\n        elif label > node.label:\n            node.right = self._put(node.right, label, node)\n        else:\n            msg = f\"Node with label {label} already exists\"\n            raise ValueError(msg)\n\n        return node\n\n    def search(self, label: int) -> Node:\n        \"\"\"\n        Searches a node in the tree\n\n        >>> t = BinarySearchTree()\n        >>> t.put(8)\n        >>> t.put(10)\n        >>> node = t.search(8)\n        >>> assert node.label == 8\n\n        >>> node = t.search(3)\n        Traceback (most recent call last):\n            ...\n        ValueError: Node with label 3 does not exist\n        \"\"\"\n        return self._search(self.root, label)\n\n    def _search(self, node: Node | None, label: int) -> Node:\n        if node is None:\n            msg = f\"Node with label {label} does not exist\"\n            raise ValueError(msg)\n        elif label < node.label:\n            node = self._search(node.left, label)\n        elif label > node.label:\n            node = self._search(node.right, label)\n\n        return node\n\n    def remove(self, label: int) -> None:\n        \"\"\"\n        Removes a node in the tree\n\n        >>> t = BinarySearchTree()\n        >>> t.put(8)\n        >>> t.put(10)\n        >>> t.remove(8)\n        >>> assert t.root.label == 10\n\n        >>> t.remove(3)\n        Traceback (most recent call last):\n            ...\n        ValueError: Node with label 3 does not exist\n        \"\"\"\n        node = self.search(label)\n        if node.right and node.left:\n            lowest_node = self._get_lowest_node(node.right)\n            lowest_node.left = node.left\n            lowest_node.right = node.right\n            node.left.parent = lowest_node\n            if node.right:\n                node.right.parent = lowest_node\n            self._reassign_nodes(node, lowest_node)\n        elif not node.right and node.left:\n            self._reassign_nodes(node, node.left)\n        elif node.right and not node.left:\n            self._reassign_nodes(node, node.right)\n        else:\n            self._reassign_nodes(node, None)\n\n    def _reassign_nodes(self, node: Node, new_children: Node | None) -> None:\n        if new_children:\n            new_children.parent = node.parent\n\n        if node.parent:\n            if node.parent.right == node:\n                node.parent.right = new_children\n            else:\n                node.parent.left = new_children\n        else:\n            self.root = new_children\n\n    def _get_lowest_node(self, node: Node) -> Node:\n        if node.left:\n            lowest_node = self._get_lowest_node(node.left)\n        else:\n            lowest_node = node\n            self._reassign_nodes(node, node.right)\n\n        return lowest_node\n\n    def exists(self, label: int) -> bool:\n        \"\"\"\n        Checks if a node exists in the tree\n\n        >>> t = BinarySearchTree()\n        >>> t.put(8)\n        >>> t.put(10)\n        >>> t.exists(8)\n        True\n\n        >>> t.exists(3)\n        False\n        \"\"\"\n        try:\n            self.search(label)\n            return True\n        except ValueError:\n            return False\n\n    def get_max_label(self) -> int:\n        \"\"\"\n        Gets the max label inserted in the tree\n\n        >>> t = BinarySearchTree()\n        >>> t.get_max_label()\n        Traceback (most recent call last):\n            ...\n        ValueError: Binary search tree is empty\n\n        >>> t.put(8)\n        >>> t.put(10)\n        >>> t.get_max_label()\n        10\n        \"\"\"\n        if self.root is None:\n            raise ValueError(\"Binary search tree is empty\")\n\n        node = self.root\n        while node.right is not None:\n            node = node.right\n\n        return node.label\n\n    def get_min_label(self) -> int:\n        \"\"\"\n        Gets the min label inserted in the tree\n\n        >>> t = BinarySearchTree()\n        >>> t.get_min_label()\n        Traceback (most recent call last):\n            ...\n        ValueError: Binary search tree is empty\n\n        >>> t.put(8)\n        >>> t.put(10)\n        >>> t.get_min_label()\n        8\n        \"\"\"\n        if self.root is None:\n            raise ValueError(\"Binary search tree is empty\")\n\n        node = self.root\n        while node.left is not None:\n            node = node.left\n\n        return node.label\n\n    def inorder_traversal(self) -> Iterator[Node]:\n        \"\"\"\n        Return the inorder traversal of the tree\n\n        >>> t = BinarySearchTree()\n        >>> [i.label for i in t.inorder_traversal()]\n        []\n\n        >>> t.put(8)\n        >>> t.put(10)\n        >>> t.put(9)\n        >>> [i.label for i in t.inorder_traversal()]\n        [8, 9, 10]\n        \"\"\"\n        return self._inorder_traversal(self.root)\n\n    def _inorder_traversal(self, node: Node | None) -> Iterator[Node]:\n        if node is not None:\n            yield from self._inorder_traversal(node.left)\n            yield node\n            yield from self._inorder_traversal(node.right)\n\n    def preorder_traversal(self) -> Iterator[Node]:\n        \"\"\"\n        Return the preorder traversal of the tree\n\n        >>> t = BinarySearchTree()\n        >>> [i.label for i in t.preorder_traversal()]\n        []\n\n        >>> t.put(8)\n        >>> t.put(10)\n        >>> t.put(9)\n        >>> [i.label for i in t.preorder_traversal()]\n        [8, 10, 9]\n        \"\"\"\n        return self._preorder_traversal(self.root)\n\n    def _preorder_traversal(self, node: Node | None) -> Iterator[Node]:\n        if node is not None:\n            yield node\n            yield from self._preorder_traversal(node.left)\n            yield from self._preorder_traversal(node.right)\n\n\nclass BinarySearchTreeTest(unittest.TestCase):\n    @staticmethod\n    def _get_binary_search_tree() -> BinarySearchTree:\n        r\"\"\"\n              8\n             / \\\n            3   10\n           / \\    \\\n          1   6    14\n             / \\   /\n            4   7 13\n             \\\n              5\n        \"\"\"\n        t = BinarySearchTree()\n        t.put(8)\n        t.put(3)\n        t.put(6)\n        t.put(1)\n        t.put(10)\n        t.put(14)\n        t.put(13)\n        t.put(4)\n        t.put(7)\n        t.put(5)\n\n        return t\n\n    def test_put(self) -> None:\n        t = BinarySearchTree()\n        assert t.is_empty()\n\n        t.put(8)\n        r\"\"\"\n              8\n        \"\"\"\n        assert t.root is not None\n        assert t.root.parent is None\n        assert t.root.label == 8\n\n        t.put(10)\n        r\"\"\"\n              8\n               \\\n                10\n        \"\"\"\n        assert t.root.right is not None\n        assert t.root.right.parent == t.root\n        assert t.root.right.label == 10\n\n        t.put(3)\n        r\"\"\"\n              8\n             / \\\n            3   10\n        \"\"\"\n        assert t.root.left is not None\n        assert t.root.left.parent == t.root\n        assert t.root.left.label == 3\n\n        t.put(6)\n        r\"\"\"\n              8\n             / \\\n            3   10\n             \\\n              6\n        \"\"\"\n        assert t.root.left.right is not None\n        assert t.root.left.right.parent == t.root.left\n        assert t.root.left.right.label == 6\n\n        t.put(1)\n        r\"\"\"\n              8\n             / \\\n            3   10\n           / \\\n          1   6\n        \"\"\"\n        assert t.root.left.left is not None\n        assert t.root.left.left.parent == t.root.left\n        assert t.root.left.left.label == 1\n\n        with pytest.raises(ValueError):\n            t.put(1)\n\n    def test_search(self) -> None:\n        t = self._get_binary_search_tree()\n\n        node = t.search(6)\n        assert node.label == 6\n\n        node = t.search(13)\n        assert node.label == 13\n\n        with pytest.raises(ValueError):\n            t.search(2)\n\n    def test_remove(self) -> None:\n        t = self._get_binary_search_tree()\n\n        t.remove(13)\n        r\"\"\"\n              8\n             / \\\n            3   10\n           / \\    \\\n          1   6    14\n             / \\\n            4   7\n             \\\n              5\n        \"\"\"\n        assert t.root is not None\n        assert t.root.right is not None\n        assert t.root.right.right is not None\n        assert t.root.right.right.right is None\n        assert t.root.right.right.left is None\n\n        t.remove(7)\n        r\"\"\"\n              8\n             / \\\n            3   10\n           / \\    \\\n          1   6    14\n             /\n            4\n             \\\n              5\n        \"\"\"\n        assert t.root.left is not None\n        assert t.root.left.right is not None\n        assert t.root.left.right.left is not None\n        assert t.root.left.right.right is None\n        assert t.root.left.right.left.label == 4\n\n        t.remove(6)\n        r\"\"\"\n              8\n             / \\\n            3   10\n           / \\    \\\n          1   4    14\n               \\\n                5\n        \"\"\"\n        assert t.root.left.left is not None\n        assert t.root.left.right.right is not None\n        assert t.root.left.left.label == 1\n        assert t.root.left.right.label == 4\n        assert t.root.left.right.right.label == 5\n        assert t.root.left.right.left is None\n        assert t.root.left.left.parent == t.root.left\n        assert t.root.left.right.parent == t.root.left\n\n        t.remove(3)\n        r\"\"\"\n              8\n             / \\\n            4   10\n           / \\    \\\n          1   5    14\n        \"\"\"\n        assert t.root is not None\n        assert t.root.left.label == 4\n        assert t.root.left.right.label == 5\n        assert t.root.left.left.label == 1\n        assert t.root.left.parent == t.root\n        assert t.root.left.left.parent == t.root.left\n        assert t.root.left.right.parent == t.root.left\n\n        t.remove(4)\n        r\"\"\"\n              8\n             / \\\n            5   10\n           /      \\\n          1        14\n        \"\"\"\n        assert t.root.left is not None\n        assert t.root.left.left is not None\n        assert t.root.left.label == 5\n        assert t.root.left.right is None\n        assert t.root.left.left.label == 1\n        assert t.root.left.parent == t.root\n        assert t.root.left.left.parent == t.root.left\n\n    def test_remove_2(self) -> None:\n        t = self._get_binary_search_tree()\n\n        t.remove(3)\n        r\"\"\"\n              8\n             / \\\n            4   10\n           / \\    \\\n          1   6    14\n             / \\   /\n            5   7 13\n        \"\"\"\n        assert t.root is not None\n        assert t.root.left is not None\n        assert t.root.left.left is not None\n        assert t.root.left.right is not None\n        assert t.root.left.right.left is not None\n        assert t.root.left.right.right is not None\n        assert t.root.left.label == 4\n        assert t.root.left.right.label == 6\n        assert t.root.left.left.label == 1\n        assert t.root.left.right.right.label == 7\n        assert t.root.left.right.left.label == 5\n        assert t.root.left.parent == t.root\n        assert t.root.left.right.parent == t.root.left\n        assert t.root.left.left.parent == t.root.left\n        assert t.root.left.right.left.parent == t.root.left.right\n\n    def test_empty(self) -> None:\n        t = self._get_binary_search_tree()\n        t.empty()\n        assert t.root is None\n\n    def test_is_empty(self) -> None:\n        t = self._get_binary_search_tree()\n        assert not t.is_empty()\n\n        t.empty()\n        assert t.is_empty()\n\n    def test_exists(self) -> None:\n        t = self._get_binary_search_tree()\n\n        assert t.exists(6)\n        assert not t.exists(-1)\n\n    def test_get_max_label(self) -> None:\n        t = self._get_binary_search_tree()\n\n        assert t.get_max_label() == 14\n\n        t.empty()\n        with pytest.raises(ValueError):\n            t.get_max_label()\n\n    def test_get_min_label(self) -> None:\n        t = self._get_binary_search_tree()\n\n        assert t.get_min_label() == 1\n\n        t.empty()\n        with pytest.raises(ValueError):\n            t.get_min_label()\n\n    def test_inorder_traversal(self) -> None:\n        t = self._get_binary_search_tree()\n\n        inorder_traversal_nodes = [i.label for i in t.inorder_traversal()]\n        assert inorder_traversal_nodes == [1, 3, 4, 5, 6, 7, 8, 10, 13, 14]\n\n    def test_preorder_traversal(self) -> None:\n        t = self._get_binary_search_tree()\n\n        preorder_traversal_nodes = [i.label for i in t.preorder_traversal()]\n        assert preorder_traversal_nodes == [8, 3, 1, 6, 4, 5, 7, 10, 14, 13]\n\n\ndef binary_search_tree_example() -> None:\n    r\"\"\"\n    Example\n                  8\n                 / \\\n                3   10\n               / \\    \\\n              1   6    14\n                 / \\   /\n                4   7 13\n                \\\n                5\n\n    Example After Deletion\n                  4\n                 / \\\n                1   7\n                     \\\n                      5\n\n    \"\"\"\n\n    t = BinarySearchTree()\n    t.put(8)\n    t.put(3)\n    t.put(6)\n    t.put(1)\n    t.put(10)\n    t.put(14)\n    t.put(13)\n    t.put(4)\n    t.put(7)\n    t.put(5)\n\n    print(\n        \"\"\"\n            8\n           / \\\\\n          3   10\n         / \\\\    \\\\\n        1   6    14\n           / \\\\   /\n          4   7 13\n           \\\\\n            5\n        \"\"\"\n    )\n\n    print(\"Label 6 exists:\", t.exists(6))\n    print(\"Label 13 exists:\", t.exists(13))\n    print(\"Label -1 exists:\", t.exists(-1))\n    print(\"Label 12 exists:\", t.exists(12))\n\n    # Prints all the elements of the list in inorder traversal\n    inorder_traversal_nodes = [i.label for i in t.inorder_traversal()]\n    print(\"Inorder traversal:\", inorder_traversal_nodes)\n\n    # Prints all the elements of the list in preorder traversal\n    preorder_traversal_nodes = [i.label for i in t.preorder_traversal()]\n    print(\"Preorder traversal:\", preorder_traversal_nodes)\n\n    print(\"Max. label:\", t.get_max_label())\n    print(\"Min. label:\", t.get_min_label())\n\n    # Delete elements\n    print(\"\\nDeleting elements 13, 10, 8, 3, 6, 14\")\n    print(\n        \"\"\"\n          4\n         / \\\\\n        1   7\n             \\\\\n              5\n        \"\"\"\n    )\n    t.remove(13)\n    t.remove(10)\n    t.remove(8)\n    t.remove(3)\n    t.remove(6)\n    t.remove(14)\n\n    # Prints all the elements of the list in inorder traversal after delete\n    inorder_traversal_nodes = [i.label for i in t.inorder_traversal()]\n    print(\"Inorder traversal after delete:\", inorder_traversal_nodes)\n\n    # Prints all the elements of the list in preorder traversal after delete\n    preorder_traversal_nodes = [i.label for i in t.preorder_traversal()]\n    print(\"Preorder traversal after delete:\", preorder_traversal_nodes)\n\n    print(\"Max. label:\", t.get_max_label())\n    print(\"Min. label:\", t.get_min_label())\n\n\nif __name__ == \"__main__\":\n    binary_search_tree_example()\n"
  },
  {
    "path": "data_structures/binary_tree/binary_tree_mirror.py",
    "content": "\"\"\"\nProblem Description:\nGiven a binary tree, return its mirror.\n\"\"\"\n\n\ndef binary_tree_mirror_dict(binary_tree_mirror_dictionary: dict, root: int):\n    if not root or root not in binary_tree_mirror_dictionary:\n        return\n    left_child, right_child = binary_tree_mirror_dictionary[root][:2]\n    binary_tree_mirror_dictionary[root] = [right_child, left_child]\n    binary_tree_mirror_dict(binary_tree_mirror_dictionary, left_child)\n    binary_tree_mirror_dict(binary_tree_mirror_dictionary, right_child)\n\n\ndef binary_tree_mirror(binary_tree: dict, root: int = 1) -> dict:\n    \"\"\"\n    >>> binary_tree_mirror({ 1: [2,3], 2: [4,5], 3: [6,7], 7: [8,9]}, 1)\n    {1: [3, 2], 2: [5, 4], 3: [7, 6], 7: [9, 8]}\n    >>> binary_tree_mirror({ 1: [2,3], 2: [4,5], 3: [6,7], 4: [10,11]}, 1)\n    {1: [3, 2], 2: [5, 4], 3: [7, 6], 4: [11, 10]}\n    >>> binary_tree_mirror({ 1: [2,3], 2: [4,5], 3: [6,7], 4: [10,11]}, 5)\n    Traceback (most recent call last):\n        ...\n    ValueError: root 5 is not present in the binary_tree\n    >>> binary_tree_mirror({}, 5)\n    Traceback (most recent call last):\n        ...\n    ValueError: binary tree cannot be empty\n    \"\"\"\n    if not binary_tree:\n        raise ValueError(\"binary tree cannot be empty\")\n    if root not in binary_tree:\n        msg = f\"root {root} is not present in the binary_tree\"\n        raise ValueError(msg)\n    binary_tree_mirror_dictionary = dict(binary_tree)\n    binary_tree_mirror_dict(binary_tree_mirror_dictionary, root)\n    return binary_tree_mirror_dictionary\n\n\nif __name__ == \"__main__\":\n    binary_tree = {1: [2, 3], 2: [4, 5], 3: [6, 7], 7: [8, 9]}\n    print(f\"Binary tree: {binary_tree}\")\n    binary_tree_mirror_dictionary = binary_tree_mirror(binary_tree, 5)\n    print(f\"Binary tree mirror: {binary_tree_mirror_dictionary}\")\n"
  },
  {
    "path": "data_structures/binary_tree/binary_tree_node_sum.py",
    "content": "\"\"\"\r\nSum of all nodes in a binary tree.\r\n\r\nPython implementation:\r\n    O(n) time complexity - Recurses through :meth:`depth_first_search`\r\n                            with each element.\r\n    O(n) space complexity - At any point in time maximum number of stack\r\n                            frames that could be in memory is `n`\r\n\"\"\"\r\n\r\nfrom __future__ import annotations\r\n\r\nfrom collections.abc import Iterator\r\n\r\n\r\nclass Node:\r\n    \"\"\"\r\n    A Node has a value variable and pointers to Nodes to its left and right.\r\n    \"\"\"\r\n\r\n    def __init__(self, value: int) -> None:\r\n        self.value = value\r\n        self.left: Node | None = None\r\n        self.right: Node | None = None\r\n\r\n\r\nclass BinaryTreeNodeSum:\r\n    r\"\"\"\r\n    The below tree looks like this\r\n        10\r\n       /  \\\r\n      5   -3\r\n     /    / \\\r\n    12   8  0\r\n\r\n    >>> tree = Node(10)\r\n    >>> sum(BinaryTreeNodeSum(tree))\r\n    10\r\n\r\n    >>> tree.left = Node(5)\r\n    >>> sum(BinaryTreeNodeSum(tree))\r\n    15\r\n\r\n    >>> tree.right = Node(-3)\r\n    >>> sum(BinaryTreeNodeSum(tree))\r\n    12\r\n\r\n    >>> tree.left.left = Node(12)\r\n    >>> sum(BinaryTreeNodeSum(tree))\r\n    24\r\n\r\n    >>> tree.right.left = Node(8)\r\n    >>> tree.right.right = Node(0)\r\n    >>> sum(BinaryTreeNodeSum(tree))\r\n    32\r\n    \"\"\"\r\n\r\n    def __init__(self, tree: Node) -> None:\r\n        self.tree = tree\r\n\r\n    def depth_first_search(self, node: Node | None) -> int:\r\n        if node is None:\r\n            return 0\r\n        return node.value + (\r\n            self.depth_first_search(node.left) + self.depth_first_search(node.right)\r\n        )\r\n\r\n    def __iter__(self) -> Iterator[int]:\r\n        yield self.depth_first_search(self.tree)\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n"
  },
  {
    "path": "data_structures/binary_tree/binary_tree_path_sum.py",
    "content": "\"\"\"\nGiven the root of a binary tree and an integer target,\nfind the number of paths where the sum of the values\nalong the path equals target.\n\n\nLeetcode reference: https://leetcode.com/problems/path-sum-iii/\n\"\"\"\n\nfrom __future__ import annotations\n\n\nclass Node:\n    \"\"\"\n    A Node has value variable and pointers to Nodes to its left and right.\n    \"\"\"\n\n    def __init__(self, value: int) -> None:\n        self.value = value\n        self.left: Node | None = None\n        self.right: Node | None = None\n\n\nclass BinaryTreePathSum:\n    r\"\"\"\n    The below tree looks like this\n          10\n         /  \\\n        5   -3\n       / \\    \\\n      3   2    11\n     / \\   \\\n    3  -2   1\n\n\n    >>> tree = Node(10)\n    >>> tree.left = Node(5)\n    >>> tree.right = Node(-3)\n    >>> tree.left.left = Node(3)\n    >>> tree.left.right = Node(2)\n    >>> tree.right.right = Node(11)\n    >>> tree.left.left.left = Node(3)\n    >>> tree.left.left.right = Node(-2)\n    >>> tree.left.right.right = Node(1)\n\n    >>> BinaryTreePathSum().path_sum(tree, 8)\n    3\n    >>> BinaryTreePathSum().path_sum(tree, 7)\n    2\n    >>> tree.right.right = Node(10)\n    >>> BinaryTreePathSum().path_sum(tree, 8)\n    2\n    >>> BinaryTreePathSum().path_sum(None, 0)\n    0\n    >>> BinaryTreePathSum().path_sum(tree, 0)\n    0\n\n    The second tree looks like this\n          0\n         / \\\n        5   5\n\n    >>> tree2 = Node(0)\n    >>> tree2.left = Node(5)\n    >>> tree2.right = Node(5)\n\n    >>> BinaryTreePathSum().path_sum(tree2, 5)\n    4\n    >>> BinaryTreePathSum().path_sum(tree2, -1)\n    0\n    >>> BinaryTreePathSum().path_sum(tree2, 0)\n    1\n    \"\"\"\n\n    target: int\n\n    def __init__(self) -> None:\n        self.paths = 0\n\n    def depth_first_search(self, node: Node | None, path_sum: int) -> None:\n        if node is None:\n            return\n\n        if path_sum == self.target:\n            self.paths += 1\n\n        if node.left:\n            self.depth_first_search(node.left, path_sum + node.left.value)\n        if node.right:\n            self.depth_first_search(node.right, path_sum + node.right.value)\n\n    def path_sum(self, node: Node | None, target: int | None = None) -> int:\n        if node is None:\n            return 0\n        if target is not None:\n            self.target = target\n\n        self.depth_first_search(node, node.value)\n        self.path_sum(node.left)\n        self.path_sum(node.right)\n\n        return self.paths\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/binary_tree/binary_tree_traversals.py",
    "content": "from __future__ import annotations\r\n\r\nfrom collections import deque\r\nfrom collections.abc import Generator\r\nfrom dataclasses import dataclass\r\n\r\n\r\n# https://en.wikipedia.org/wiki/Tree_traversal\r\n@dataclass\r\nclass Node:\r\n    data: int\r\n    left: Node | None = None\r\n    right: Node | None = None\r\n\r\n\r\ndef make_tree() -> Node | None:\r\n    r\"\"\"\r\n    The below tree\r\n        1\r\n       / \\\r\n      2   3\r\n     / \\\r\n    4   5\r\n    \"\"\"\r\n    tree = Node(1)\r\n    tree.left = Node(2)\r\n    tree.right = Node(3)\r\n    tree.left.left = Node(4)\r\n    tree.left.right = Node(5)\r\n    return tree\r\n\r\n\r\ndef preorder(root: Node | None) -> Generator[int]:\r\n    \"\"\"\r\n    Pre-order traversal visits root node, left subtree, right subtree.\r\n    >>> list(preorder(make_tree()))\r\n    [1, 2, 4, 5, 3]\r\n    \"\"\"\r\n    if not root:\r\n        return\r\n    yield root.data\r\n    yield from preorder(root.left)\r\n    yield from preorder(root.right)\r\n\r\n\r\ndef postorder(root: Node | None) -> Generator[int]:\r\n    \"\"\"\r\n    Post-order traversal visits left subtree, right subtree, root node.\r\n    >>> list(postorder(make_tree()))\r\n    [4, 5, 2, 3, 1]\r\n    \"\"\"\r\n    if not root:\r\n        return\r\n    yield from postorder(root.left)\r\n    yield from postorder(root.right)\r\n    yield root.data\r\n\r\n\r\ndef inorder(root: Node | None) -> Generator[int]:\r\n    \"\"\"\r\n    In-order traversal visits left subtree, root node, right subtree.\r\n    >>> list(inorder(make_tree()))\r\n    [4, 2, 5, 1, 3]\r\n    \"\"\"\r\n    if not root:\r\n        return\r\n    yield from inorder(root.left)\r\n    yield root.data\r\n    yield from inorder(root.right)\r\n\r\n\r\ndef reverse_inorder(root: Node | None) -> Generator[int]:\r\n    \"\"\"\r\n    Reverse in-order traversal visits right subtree, root node, left subtree.\r\n    >>> list(reverse_inorder(make_tree()))\r\n    [3, 1, 5, 2, 4]\r\n    \"\"\"\r\n    if not root:\r\n        return\r\n    yield from reverse_inorder(root.right)\r\n    yield root.data\r\n    yield from reverse_inorder(root.left)\r\n\r\n\r\ndef height(root: Node | None) -> int:\r\n    \"\"\"\r\n    Recursive function for calculating the height of the binary tree.\r\n    >>> height(None)\r\n    0\r\n    >>> height(make_tree())\r\n    3\r\n    \"\"\"\r\n    return (max(height(root.left), height(root.right)) + 1) if root else 0\r\n\r\n\r\ndef level_order(root: Node | None) -> Generator[int]:\r\n    \"\"\"\r\n    Returns a list of nodes value from a whole binary tree in Level Order Traverse.\r\n    Level Order traverse: Visit nodes of the tree level-by-level.\r\n    >>> list(level_order(make_tree()))\r\n    [1, 2, 3, 4, 5]\r\n    \"\"\"\r\n\r\n    if root is None:\r\n        return\r\n\r\n    process_queue = deque([root])\r\n\r\n    while process_queue:\r\n        node = process_queue.popleft()\r\n        yield node.data\r\n\r\n        if node.left:\r\n            process_queue.append(node.left)\r\n        if node.right:\r\n            process_queue.append(node.right)\r\n\r\n\r\ndef get_nodes_from_left_to_right(root: Node | None, level: int) -> Generator[int]:\r\n    \"\"\"\r\n    Returns a list of nodes value from a particular level:\r\n    Left to right direction of the binary tree.\r\n    >>> list(get_nodes_from_left_to_right(make_tree(), 1))\r\n    [1]\r\n    >>> list(get_nodes_from_left_to_right(make_tree(), 2))\r\n    [2, 3]\r\n    \"\"\"\r\n\r\n    def populate_output(root: Node | None, level: int) -> Generator[int]:\r\n        if not root:\r\n            return\r\n        if level == 1:\r\n            yield root.data\r\n        elif level > 1:\r\n            yield from populate_output(root.left, level - 1)\r\n            yield from populate_output(root.right, level - 1)\r\n\r\n    yield from populate_output(root, level)\r\n\r\n\r\ndef get_nodes_from_right_to_left(root: Node | None, level: int) -> Generator[int]:\r\n    \"\"\"\r\n    Returns a list of nodes value from a particular level:\r\n    Right to left direction of the binary tree.\r\n    >>> list(get_nodes_from_right_to_left(make_tree(), 1))\r\n    [1]\r\n    >>> list(get_nodes_from_right_to_left(make_tree(), 2))\r\n    [3, 2]\r\n    \"\"\"\r\n\r\n    def populate_output(root: Node | None, level: int) -> Generator[int]:\r\n        if not root:\r\n            return\r\n        if level == 1:\r\n            yield root.data\r\n        elif level > 1:\r\n            yield from populate_output(root.right, level - 1)\r\n            yield from populate_output(root.left, level - 1)\r\n\r\n    yield from populate_output(root, level)\r\n\r\n\r\ndef zigzag(root: Node | None) -> Generator[int]:\r\n    \"\"\"\r\n    ZigZag traverse:\r\n    Returns a list of nodes value from left to right and right to left, alternatively.\r\n    >>> list(zigzag(make_tree()))\r\n    [1, 3, 2, 4, 5]\r\n    \"\"\"\r\n    if root is None:\r\n        return\r\n\r\n    flag = 0\r\n    height_tree = height(root)\r\n\r\n    for h in range(1, height_tree + 1):\r\n        if not flag:\r\n            yield from get_nodes_from_left_to_right(root, h)\r\n            flag = 1\r\n        else:\r\n            yield from get_nodes_from_right_to_left(root, h)\r\n            flag = 0\r\n\r\n\r\ndef main() -> None:  # Main function for testing.\r\n    # Create binary tree.\r\n    root = make_tree()\r\n\r\n    # All Traversals of the binary are as follows:\r\n    print(f\"In-order Traversal: {list(inorder(root))}\")\r\n    print(f\"Reverse In-order Traversal: {list(reverse_inorder(root))}\")\r\n    print(f\"Pre-order Traversal: {list(preorder(root))}\")\r\n    print(f\"Post-order Traversal: {list(postorder(root))}\", \"\\n\")\r\n\r\n    print(f\"Height of Tree: {height(root)}\", \"\\n\")\r\n\r\n    print(\"Complete Level Order Traversal: \")\r\n    print(f\"{list(level_order(root))} \\n\")\r\n\r\n    print(\"Level-wise order Traversal: \")\r\n\r\n    for level in range(1, height(root) + 1):\r\n        print(f\"Level {level}:\", list(get_nodes_from_left_to_right(root, level=level)))\r\n\r\n    print(\"\\nZigZag order Traversal: \")\r\n    print(f\"{list(zigzag(root))}\")\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n    main()\r\n"
  },
  {
    "path": "data_structures/binary_tree/diameter_of_binary_tree.py",
    "content": "\"\"\"\nThe diameter/width of a tree is defined as the number of nodes on the longest path\nbetween two end nodes.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass Node:\n    data: int\n    left: Node | None = None\n    right: Node | None = None\n\n    def depth(self) -> int:\n        \"\"\"\n        >>> root = Node(1)\n        >>> root.depth()\n        1\n        >>> root.left = Node(2)\n        >>> root.depth()\n        2\n        >>> root.left.depth()\n        1\n        >>> root.right = Node(3)\n        >>> root.depth()\n        2\n        \"\"\"\n        left_depth = self.left.depth() if self.left else 0\n        right_depth = self.right.depth() if self.right else 0\n        return max(left_depth, right_depth) + 1\n\n    def diameter(self) -> int:\n        \"\"\"\n        >>> root = Node(1)\n        >>> root.diameter()\n        1\n        >>> root.left = Node(2)\n        >>> root.diameter()\n        2\n        >>> root.left.diameter()\n        1\n        >>> root.right = Node(3)\n        >>> root.diameter()\n        3\n        \"\"\"\n        left_depth = self.left.depth() if self.left else 0\n        right_depth = self.right.depth() if self.right else 0\n        return left_depth + right_depth + 1\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    root = Node(1)\n    root.left = Node(2)\n    root.right = Node(3)\n    root.left.left = Node(4)\n    root.left.right = Node(5)\n    r\"\"\"\n    Constructed binary tree is\n        1\n       / \\\n      2\t  3\n     / \\\n    4\t 5\n    \"\"\"\n    print(f\"{root.diameter() = }\")  # 4\n    print(f\"{root.left.diameter() = }\")  # 3\n    print(f\"{root.right.diameter() = }\")  # 1\n"
  },
  {
    "path": "data_structures/binary_tree/diff_views_of_binary_tree.py",
    "content": "r\"\"\"\nProblem: Given root of a binary tree, return the:\n1. binary-tree-right-side-view\n2. binary-tree-left-side-view\n3. binary-tree-top-side-view\n4. binary-tree-bottom-side-view\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections import defaultdict\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass TreeNode:\n    val: int\n    left: TreeNode | None = None\n    right: TreeNode | None = None\n\n\ndef make_tree() -> TreeNode:\n    \"\"\"\n    >>> make_tree().val\n    3\n    \"\"\"\n    return TreeNode(3, TreeNode(9), TreeNode(20, TreeNode(15), TreeNode(7)))\n\n\ndef binary_tree_right_side_view(root: TreeNode) -> list[int]:\n    r\"\"\"\n    Function returns the right side view of binary tree.\n\n       3       <-  3\n     / \\\n    9   20    <-  20\n       /  \\\n      15   7  <-  7\n\n    >>> binary_tree_right_side_view(make_tree())\n    [3, 20, 7]\n    >>> binary_tree_right_side_view(None)\n    []\n    \"\"\"\n\n    def depth_first_search(\n        root: TreeNode | None, depth: int, right_view: list[int]\n    ) -> None:\n        \"\"\"\n        A depth first search preorder traversal to append the values at\n        right side of tree.\n        \"\"\"\n        if not root:\n            return\n\n        if depth == len(right_view):\n            right_view.append(root.val)\n\n        depth_first_search(root.right, depth + 1, right_view)\n        depth_first_search(root.left, depth + 1, right_view)\n\n    right_view: list = []\n    if not root:\n        return right_view\n\n    depth_first_search(root, 0, right_view)\n    return right_view\n\n\ndef binary_tree_left_side_view(root: TreeNode) -> list[int]:\n    r\"\"\"\n    Function returns the left side view of binary tree.\n\n    3  ->    3\n            / \\\n    9  ->  9   20\n              /  \\\n    15 ->    15   7\n\n    >>> binary_tree_left_side_view(make_tree())\n    [3, 9, 15]\n    >>> binary_tree_left_side_view(None)\n    []\n    \"\"\"\n\n    def depth_first_search(\n        root: TreeNode | None, depth: int, left_view: list[int]\n    ) -> None:\n        \"\"\"\n        A depth first search preorder traversal to append the values\n        at left side of tree.\n        \"\"\"\n        if not root:\n            return\n\n        if depth == len(left_view):\n            left_view.append(root.val)\n\n        depth_first_search(root.left, depth + 1, left_view)\n        depth_first_search(root.right, depth + 1, left_view)\n\n    left_view: list = []\n    if not root:\n        return left_view\n\n    depth_first_search(root, 0, left_view)\n    return left_view\n\n\ndef binary_tree_top_side_view(root: TreeNode) -> list[int]:\n    r\"\"\"\n    Function returns the top side view of binary tree.\n\n    9 3 20 7\n    ⬇ ⬇ ⬇  ⬇\n\n      3\n     / \\\n    9   20\n       /  \\\n      15   7\n\n    >>> binary_tree_top_side_view(make_tree())\n    [9, 3, 20, 7]\n    >>> binary_tree_top_side_view(None)\n    []\n    \"\"\"\n\n    def breadth_first_search(root: TreeNode, top_view: list[int]) -> None:\n        \"\"\"\n        A breadth first search traversal with defaultdict ds to append\n        the values of tree from top view\n        \"\"\"\n        queue = [(root, 0)]\n        lookup = defaultdict(list)\n\n        while queue:\n            first = queue.pop(0)\n            node, hd = first\n\n            lookup[hd].append(node.val)\n\n            if node.left:\n                queue.append((node.left, hd - 1))\n            if node.right:\n                queue.append((node.right, hd + 1))\n\n        for pair in sorted(lookup.items(), key=lambda each: each[0]):\n            top_view.append(pair[1][0])\n\n    top_view: list = []\n    if not root:\n        return top_view\n\n    breadth_first_search(root, top_view)\n    return top_view\n\n\ndef binary_tree_bottom_side_view(root: TreeNode) -> list[int]:\n    r\"\"\"\n    Function returns the bottom side view of binary tree\n\n      3\n     / \\\n    9   20\n       /  \\\n      15   7\n    ↑  ↑ ↑  ↑\n    9 15 20 7\n\n    >>> binary_tree_bottom_side_view(make_tree())\n    [9, 15, 20, 7]\n    >>> binary_tree_bottom_side_view(None)\n    []\n    \"\"\"\n    from collections import defaultdict\n\n    def breadth_first_search(root: TreeNode, bottom_view: list[int]) -> None:\n        \"\"\"\n        A breadth first search traversal with defaultdict ds to append\n        the values of tree from bottom view\n        \"\"\"\n        queue = [(root, 0)]\n        lookup = defaultdict(list)\n\n        while queue:\n            first = queue.pop(0)\n            node, hd = first\n            lookup[hd].append(node.val)\n\n            if node.left:\n                queue.append((node.left, hd - 1))\n            if node.right:\n                queue.append((node.right, hd + 1))\n\n        for pair in sorted(lookup.items(), key=lambda each: each[0]):\n            bottom_view.append(pair[1][-1])\n\n    bottom_view: list = []\n    if not root:\n        return bottom_view\n\n    breadth_first_search(root, bottom_view)\n    return bottom_view\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/binary_tree/distribute_coins.py",
    "content": "\"\"\"\nAuthor  : Alexander Pantyukhin\nDate    : November 7, 2022\n\nTask:\nYou are given a tree root of a binary tree with n nodes, where each node has\nnode.data coins. There are exactly n coins in whole tree.\n\nIn one move, we may choose two adjacent nodes and move one coin from one node\nto another. A move may be from parent to child, or from child to parent.\n\nReturn the minimum number of moves required to make every node have exactly one coin.\n\nExample 1:\n\n   3\n  / \\\n 0   0\n\nResult: 2\n\nExample 2:\n\n   0\n  / \\\n 3   0\n\nResult 3\n\nleetcode: https://leetcode.com/problems/distribute-coins-in-binary-tree/\n\nImplementation notes:\nUser depth-first search approach.\n\nLet n is the number of nodes in tree\nRuntime: O(n)\nSpace: O(1)\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass\nfrom typing import NamedTuple\n\n\n@dataclass\nclass TreeNode:\n    data: int\n    left: TreeNode | None = None\n    right: TreeNode | None = None\n\n\nclass CoinsDistribResult(NamedTuple):\n    moves: int\n    excess: int\n\n\ndef distribute_coins(root: TreeNode | None) -> int:\n    \"\"\"\n    >>> distribute_coins(TreeNode(3, TreeNode(0), TreeNode(0)))\n    2\n    >>> distribute_coins(TreeNode(0, TreeNode(3), TreeNode(0)))\n    3\n    >>> distribute_coins(TreeNode(0, TreeNode(0), TreeNode(3)))\n    3\n    >>> distribute_coins(None)\n    0\n    >>> distribute_coins(TreeNode(0, TreeNode(0), TreeNode(0)))\n    Traceback (most recent call last):\n     ...\n    ValueError: The nodes number should be same as the number of coins\n    >>> distribute_coins(TreeNode(0, TreeNode(1), TreeNode(1)))\n    Traceback (most recent call last):\n     ...\n    ValueError: The nodes number should be same as the number of coins\n    \"\"\"\n\n    if root is None:\n        return 0\n\n    # Validation\n    def count_nodes(node: TreeNode | None) -> int:\n        \"\"\"\n        >>> count_nodes(None)\n        0\n        \"\"\"\n        if node is None:\n            return 0\n\n        return count_nodes(node.left) + count_nodes(node.right) + 1\n\n    def count_coins(node: TreeNode | None) -> int:\n        \"\"\"\n        >>> count_coins(None)\n        0\n        \"\"\"\n        if node is None:\n            return 0\n\n        return count_coins(node.left) + count_coins(node.right) + node.data\n\n    if count_nodes(root) != count_coins(root):\n        raise ValueError(\"The nodes number should be same as the number of coins\")\n\n    # Main calculation\n    def get_distrib(node: TreeNode | None) -> CoinsDistribResult:\n        \"\"\"\n        >>> get_distrib(None)\n        namedtuple(\"CoinsDistribResult\", \"0 2\")\n        \"\"\"\n\n        if node is None:\n            return CoinsDistribResult(0, 1)\n\n        left_distrib_moves, left_distrib_excess = get_distrib(node.left)\n        right_distrib_moves, right_distrib_excess = get_distrib(node.right)\n\n        coins_to_left = 1 - left_distrib_excess\n        coins_to_right = 1 - right_distrib_excess\n\n        result_moves = (\n            left_distrib_moves\n            + right_distrib_moves\n            + abs(coins_to_left)\n            + abs(coins_to_right)\n        )\n        result_excess = node.data - coins_to_left - coins_to_right\n\n        return CoinsDistribResult(result_moves, result_excess)\n\n    return get_distrib(root)[0]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/binary_tree/fenwick_tree.py",
    "content": "from copy import deepcopy\n\n\nclass FenwickTree:\n    \"\"\"\n    Fenwick Tree\n\n    More info: https://en.wikipedia.org/wiki/Fenwick_tree\n    \"\"\"\n\n    def __init__(self, arr: list[int] | None = None, size: int | None = None) -> None:\n        \"\"\"\n        Constructor for the Fenwick tree\n\n        Parameters:\n            arr (list): list of elements to initialize the tree with (optional)\n            size (int): size of the Fenwick tree (if arr is None)\n        \"\"\"\n\n        if arr is None and size is not None:\n            self.size = size\n            self.tree = [0] * size\n        elif arr is not None:\n            self.init(arr)\n        else:\n            raise ValueError(\"Either arr or size must be specified\")\n\n    def init(self, arr: list[int]) -> None:\n        \"\"\"\n        Initialize the Fenwick tree with arr in O(N)\n\n        Parameters:\n            arr (list): list of elements to initialize the tree with\n\n        Returns:\n            None\n\n        >>> a = [1, 2, 3, 4, 5]\n        >>> f1 = FenwickTree(a)\n        >>> f2 = FenwickTree(size=len(a))\n        >>> for index, value in enumerate(a):\n        ...     f2.add(index, value)\n        >>> f1.tree == f2.tree\n        True\n        \"\"\"\n        self.size = len(arr)\n        self.tree = deepcopy(arr)\n        for i in range(1, self.size):\n            j = self.next_(i)\n            if j < self.size:\n                self.tree[j] += self.tree[i]\n\n    def get_array(self) -> list[int]:\n        \"\"\"\n        Get the Normal Array of the Fenwick tree in O(N)\n\n        Returns:\n            list: Normal Array of the Fenwick tree\n\n        >>> a = [i for i in range(128)]\n        >>> f = FenwickTree(a)\n        >>> f.get_array() == a\n        True\n        \"\"\"\n        arr = self.tree[:]\n        for i in range(self.size - 1, 0, -1):\n            j = self.next_(i)\n            if j < self.size:\n                arr[j] -= arr[i]\n        return arr\n\n    @staticmethod\n    def next_(index: int) -> int:\n        return index + (index & (-index))\n\n    @staticmethod\n    def prev(index: int) -> int:\n        return index - (index & (-index))\n\n    def add(self, index: int, value: int) -> None:\n        \"\"\"\n        Add a value to index in O(lg N)\n\n        Parameters:\n            index (int): index to add value to\n            value (int): value to add to index\n\n        Returns:\n            None\n\n        >>> f = FenwickTree([1, 2, 3, 4, 5])\n        >>> f.add(0, 1)\n        >>> f.add(1, 2)\n        >>> f.add(2, 3)\n        >>> f.add(3, 4)\n        >>> f.add(4, 5)\n        >>> f.get_array()\n        [2, 4, 6, 8, 10]\n        \"\"\"\n        if index == 0:\n            self.tree[0] += value\n            return\n        while index < self.size:\n            self.tree[index] += value\n            index = self.next_(index)\n\n    def update(self, index: int, value: int) -> None:\n        \"\"\"\n        Set the value of index in O(lg N)\n\n        Parameters:\n            index (int): index to set value to\n            value (int): value to set in index\n\n        Returns:\n            None\n\n        >>> f = FenwickTree([5, 4, 3, 2, 1])\n        >>> f.update(0, 1)\n        >>> f.update(1, 2)\n        >>> f.update(2, 3)\n        >>> f.update(3, 4)\n        >>> f.update(4, 5)\n        >>> f.get_array()\n        [1, 2, 3, 4, 5]\n        \"\"\"\n        self.add(index, value - self.get(index))\n\n    def prefix(self, right: int) -> int:\n        \"\"\"\n        Prefix sum of all elements in [0, right) in O(lg N)\n\n        Parameters:\n            right (int): right bound of the query (exclusive)\n\n        Returns:\n            int: sum of all elements in [0, right)\n\n        >>> a = [i for i in range(128)]\n        >>> f = FenwickTree(a)\n        >>> res = True\n        >>> for i in range(len(a)):\n        ...     res = res and f.prefix(i) == sum(a[:i])\n        >>> res\n        True\n        \"\"\"\n        if right == 0:\n            return 0\n        result = self.tree[0]\n        right -= 1  # make right inclusive\n        while right > 0:\n            result += self.tree[right]\n            right = self.prev(right)\n        return result\n\n    def query(self, left: int, right: int) -> int:\n        \"\"\"\n        Query the sum of all elements in [left, right) in O(lg N)\n\n        Parameters:\n            left (int): left bound of the query (inclusive)\n            right (int): right bound of the query (exclusive)\n\n        Returns:\n            int: sum of all elements in [left, right)\n\n        >>> a = [i for i in range(128)]\n        >>> f = FenwickTree(a)\n        >>> res = True\n        >>> for i in range(len(a)):\n        ...     for j in range(i + 1, len(a)):\n        ...         res = res and f.query(i, j) == sum(a[i:j])\n        >>> res\n        True\n        \"\"\"\n        return self.prefix(right) - self.prefix(left)\n\n    def get(self, index: int) -> int:\n        \"\"\"\n        Get value at index in O(lg N)\n\n        Parameters:\n            index (int): index to get the value\n\n        Returns:\n            int: Value of element at index\n\n        >>> a = [i for i in range(128)]\n        >>> f = FenwickTree(a)\n        >>> res = True\n        >>> for i in range(len(a)):\n        ...     res = res and f.get(i) == a[i]\n        >>> res\n        True\n        \"\"\"\n        return self.query(index, index + 1)\n\n    def rank_query(self, value: int) -> int:\n        \"\"\"\n        Find the largest index with prefix(i) <= value in O(lg N)\n        NOTE: Requires that all values are non-negative!\n\n        Parameters:\n            value (int): value to find the largest index of\n\n        Returns:\n            -1: if value is smaller than all elements in prefix sum\n            int: largest index with prefix(i) <= value\n\n        >>> f = FenwickTree([1, 2, 0, 3, 0, 5])\n        >>> f.rank_query(0)\n        -1\n        >>> f.rank_query(2)\n        0\n        >>> f.rank_query(1)\n        0\n        >>> f.rank_query(3)\n        2\n        >>> f.rank_query(5)\n        2\n        >>> f.rank_query(6)\n        4\n        >>> f.rank_query(11)\n        5\n        \"\"\"\n        value -= self.tree[0]\n        if value < 0:\n            return -1\n\n        j = 1  # Largest power of 2 <= size\n        while j * 2 < self.size:\n            j *= 2\n\n        i = 0\n\n        while j > 0:\n            if i + j < self.size and self.tree[i + j] <= value:\n                value -= self.tree[i + j]\n                i += j\n            j //= 2\n        return i\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/binary_tree/flatten_binarytree_to_linkedlist.py",
    "content": "\"\"\"\nBinary Tree Flattening Algorithm\n\nThis code defines an algorithm to flatten a binary tree into a linked list\nrepresented using the right pointers of the tree nodes. It uses in-place\nflattening and demonstrates the flattening process along with a display\nfunction to visualize the flattened linked list.\nhttps://www.geeksforgeeks.org/flatten-a-binary-tree-into-linked-list\n\nAuthor: Arunkumar A\nDate: 04/09/2023\n\"\"\"\n\nfrom __future__ import annotations\n\n\nclass TreeNode:\n    \"\"\"\n    A TreeNode has data variable and pointers to TreeNode objects\n    for its left and right children.\n    \"\"\"\n\n    def __init__(self, data: int) -> None:\n        self.data = data\n        self.left: TreeNode | None = None\n        self.right: TreeNode | None = None\n\n\ndef build_tree() -> TreeNode:\n    \"\"\"\n    Build and return a sample binary tree.\n\n    Returns:\n        TreeNode: The root of the binary tree.\n\n    Examples:\n        >>> root = build_tree()\n        >>> root.data\n        1\n        >>> root.left.data\n        2\n        >>> root.right.data\n        5\n        >>> root.left.left.data\n        3\n        >>> root.left.right.data\n        4\n        >>> root.right.right.data\n        6\n    \"\"\"\n    root = TreeNode(1)\n    root.left = TreeNode(2)\n    root.right = TreeNode(5)\n    root.left.left = TreeNode(3)\n    root.left.right = TreeNode(4)\n    root.right.right = TreeNode(6)\n    return root\n\n\ndef flatten(root: TreeNode | None) -> None:\n    \"\"\"\n    Flatten a binary tree into a linked list in-place, where the linked list is\n    represented using the right pointers of the tree nodes.\n\n    Args:\n        root (TreeNode): The root of the binary tree to be flattened.\n\n    Examples:\n        >>> root = TreeNode(1)\n        >>> root.left = TreeNode(2)\n        >>> root.right = TreeNode(5)\n        >>> root.left.left = TreeNode(3)\n        >>> root.left.right = TreeNode(4)\n        >>> root.right.right = TreeNode(6)\n        >>> flatten(root)\n        >>> root.data\n        1\n        >>> root.right.right is None\n        False\n        >>> root.right.right = TreeNode(3)\n        >>> root.right.right.right is None\n        True\n    \"\"\"\n    if not root:\n        return\n\n    # Flatten the left subtree\n    flatten(root.left)\n\n    # Save the right subtree\n    right_subtree = root.right\n\n    # Make the left subtree the new right subtree\n    root.right = root.left\n    root.left = None\n\n    # Find the end of the new right subtree\n    current = root\n    while current.right:\n        current = current.right\n\n    # Append the original right subtree to the end\n    current.right = right_subtree\n\n    # Flatten the updated right subtree\n    flatten(right_subtree)\n\n\ndef display_linked_list(root: TreeNode | None) -> None:\n    \"\"\"\n    Display the flattened linked list.\n\n    Args:\n        root (TreeNode | None): The root of the flattened linked list.\n\n    Examples:\n        >>> root = TreeNode(1)\n        >>> root.right = TreeNode(2)\n        >>> root.right.right = TreeNode(3)\n        >>> display_linked_list(root)\n        1 2 3\n        >>> root = None\n        >>> display_linked_list(root)\n\n    \"\"\"\n    current = root\n    while current:\n        if current.right is None:\n            print(current.data, end=\"\")\n            break\n        print(current.data, end=\" \")\n        current = current.right\n\n\nif __name__ == \"__main__\":\n    print(\"Flattened Linked List:\")\n    root = build_tree()\n    flatten(root)\n    display_linked_list(root)\n"
  },
  {
    "path": "data_structures/binary_tree/floor_and_ceiling.py",
    "content": "\"\"\"\nIn a binary search tree (BST):\n* The floor of key 'k' is the maximum value that is smaller than or equal to 'k'.\n* The ceiling of key 'k' is the minimum value that is greater than or equal to 'k'.\n\nReference:\nhttps://bit.ly/46uB0a2\n\nAuthor : Arunkumar\nDate : 14th October 2023\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections.abc import Iterator\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass Node:\n    key: int\n    left: Node | None = None\n    right: Node | None = None\n\n    def __iter__(self) -> Iterator[int]:\n        if self.left:\n            yield from self.left\n        yield self.key\n        if self.right:\n            yield from self.right\n\n    def __len__(self) -> int:\n        return sum(1 for _ in self)\n\n\ndef floor_ceiling(root: Node | None, key: int) -> tuple[int | None, int | None]:\n    \"\"\"\n    Find the floor and ceiling values for a given key in a Binary Search Tree (BST).\n\n    Args:\n        root: The root of the binary search tree.\n        key: The key for which to find the floor and ceiling.\n\n    Returns:\n        A tuple containing the floor and ceiling values, respectively.\n\n    Examples:\n        >>> root = Node(10)\n        >>> root.left = Node(5)\n        >>> root.right = Node(20)\n        >>> root.left.left = Node(3)\n        >>> root.left.right = Node(7)\n        >>> root.right.left = Node(15)\n        >>> root.right.right = Node(25)\n        >>> tuple(root)\n        (3, 5, 7, 10, 15, 20, 25)\n        >>> floor_ceiling(root, 8)\n        (7, 10)\n        >>> floor_ceiling(root, 14)\n        (10, 15)\n        >>> floor_ceiling(root, -1)\n        (None, 3)\n        >>> floor_ceiling(root, 30)\n        (25, None)\n    \"\"\"\n    floor_val = None\n    ceiling_val = None\n\n    while root:\n        if root.key == key:\n            floor_val = root.key\n            ceiling_val = root.key\n            break\n\n        if key < root.key:\n            ceiling_val = root.key\n            root = root.left\n        else:\n            floor_val = root.key\n            root = root.right\n\n    return floor_val, ceiling_val\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/binary_tree/inorder_tree_traversal_2022.py",
    "content": "\"\"\"\nIllustrate how to implement inorder traversal in binary search tree.\nAuthor: Gurneet Singh\nhttps://www.geeksforgeeks.org/tree-traversals-inorder-preorder-and-postorder/\n\"\"\"\n\n\nclass BinaryTreeNode:\n    \"\"\"Defining the structure of BinaryTreeNode\"\"\"\n\n    def __init__(self, data: int) -> None:\n        self.data = data\n        self.left_child: BinaryTreeNode | None = None\n        self.right_child: BinaryTreeNode | None = None\n\n\ndef insert(node: BinaryTreeNode | None, new_value: int) -> BinaryTreeNode | None:\n    \"\"\"\n    If the binary search tree is empty, make a new node and declare it as root.\n    >>> node_a = BinaryTreeNode(12345)\n    >>> node_b = insert(node_a, 67890)\n    >>> node_a.left_child == node_b.left_child\n    True\n    >>> node_a.right_child == node_b.right_child\n    True\n    >>> node_a.data == node_b.data\n    True\n    \"\"\"\n    if node is None:\n        node = BinaryTreeNode(new_value)\n        return node\n\n    # binary search tree is not empty,\n    # so we will insert it into the tree\n    # if new_value is less than value of data in node,\n    #  add it to left subtree and proceed recursively\n    if new_value < node.data:\n        node.left_child = insert(node.left_child, new_value)\n    else:\n        # if new_value is greater than value of data in node,\n        #  add it to right subtree and proceed recursively\n        node.right_child = insert(node.right_child, new_value)\n    return node\n\n\ndef inorder(node: None | BinaryTreeNode) -> list[int]:  # if node is None,return\n    \"\"\"\n    >>> inorder(make_tree())\n    [6, 10, 14, 15, 20, 25, 60]\n    \"\"\"\n    if node:\n        inorder_array = inorder(node.left_child)\n        inorder_array = [*inorder_array, node.data]\n        inorder_array = inorder_array + inorder(node.right_child)\n    else:\n        inorder_array = []\n    return inorder_array\n\n\ndef make_tree() -> BinaryTreeNode | None:\n    root = insert(None, 15)\n    insert(root, 10)\n    insert(root, 25)\n    insert(root, 6)\n    insert(root, 14)\n    insert(root, 20)\n    insert(root, 60)\n    return root\n\n\ndef main() -> None:\n    # main function\n    root = make_tree()\n    print(\"Printing values of binary search tree in Inorder Traversal.\")\n    inorder(root)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    main()\n"
  },
  {
    "path": "data_structures/binary_tree/is_sorted.py",
    "content": "\"\"\"\nGiven the root of a binary tree, determine if it is a valid binary search tree (BST).\n\nA valid binary search tree is defined as follows:\n- The left subtree of a node contains only nodes with keys less than the node's key.\n- The right subtree of a node contains only nodes with keys greater than the node's key.\n- Both the left and right subtrees must also be binary search trees.\n\nIn effect, a binary tree is a valid BST if its nodes are sorted in ascending order.\nleetcode: https://leetcode.com/problems/validate-binary-search-tree/\n\nIf n is the number of nodes in the tree then:\nRuntime: O(n)\nSpace: O(1)\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections.abc import Iterator\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass Node:\n    data: float\n    left: Node | None = None\n    right: Node | None = None\n\n    def __iter__(self) -> Iterator[float]:\n        \"\"\"\n        >>> root = Node(data=2.1)\n        >>> list(root)\n        [2.1]\n        >>> root.left=Node(data=2.0)\n        >>> list(root)\n        [2.0, 2.1]\n        >>> root.right=Node(data=2.2)\n        >>> list(root)\n        [2.0, 2.1, 2.2]\n        \"\"\"\n        if self.left:\n            yield from self.left\n        yield self.data\n        if self.right:\n            yield from self.right\n\n    @property\n    def is_sorted(self) -> bool:\n        \"\"\"\n        >>> Node(data='abc').is_sorted\n        True\n        >>> Node(data=2,\n        ...      left=Node(data=1.999),\n        ...      right=Node(data=3)).is_sorted\n        True\n        >>> Node(data=0,\n        ...      left=Node(data=0),\n        ...      right=Node(data=0)).is_sorted\n        True\n        >>> Node(data=0,\n        ...      left=Node(data=-11),\n        ...      right=Node(data=3)).is_sorted\n        True\n        >>> Node(data=5,\n        ...      left=Node(data=1),\n        ...      right=Node(data=4, left=Node(data=3))).is_sorted\n        False\n        >>> Node(data='a',\n        ...      left=Node(data=1),\n        ...      right=Node(data=4, left=Node(data=3))).is_sorted\n        Traceback (most recent call last):\n            ...\n        TypeError: '<' not supported between instances of 'str' and 'int'\n        >>> Node(data=2,\n        ...      left=Node([]),\n        ...      right=Node(data=4, left=Node(data=3))).is_sorted\n        Traceback (most recent call last):\n            ...\n        TypeError: '<' not supported between instances of 'int' and 'list'\n        \"\"\"\n        if self.left and (self.data < self.left.data or not self.left.is_sorted):\n            return False\n        return not (\n            self.right and (self.data > self.right.data or not self.right.is_sorted)\n        )\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    tree = Node(data=2.1, left=Node(data=2.0), right=Node(data=2.2))\n    print(f\"Tree {list(tree)} is sorted: {tree.is_sorted = }.\")\n    assert tree.right\n    tree.right.data = 2.0\n    print(f\"Tree {list(tree)} is sorted: {tree.is_sorted = }.\")\n    tree.right.data = 2.1\n    print(f\"Tree {list(tree)} is sorted: {tree.is_sorted = }.\")\n"
  },
  {
    "path": "data_structures/binary_tree/is_sum_tree.py",
    "content": "\"\"\"\nIs a binary tree a sum tree where the value of every non-leaf node is equal to the sum\nof the values of its left and right subtrees?\nhttps://www.geeksforgeeks.org/check-if-a-given-binary-tree-is-sumtree\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections.abc import Iterator\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass Node:\n    data: int\n    left: Node | None = None\n    right: Node | None = None\n\n    def __iter__(self) -> Iterator[int]:\n        \"\"\"\n        >>> root = Node(2)\n        >>> list(root)\n        [2]\n        >>> root.left = Node(1)\n        >>> tuple(root)\n        (1, 2)\n        \"\"\"\n        if self.left:\n            yield from self.left\n        yield self.data\n        if self.right:\n            yield from self.right\n\n    def __len__(self) -> int:\n        \"\"\"\n        >>> root = Node(2)\n        >>> len(root)\n        1\n        >>> root.left = Node(1)\n        >>> len(root)\n        2\n        \"\"\"\n        return sum(1 for _ in self)\n\n    @property\n    def is_sum_node(self) -> bool:\n        \"\"\"\n        >>> root = Node(3)\n        >>> root.is_sum_node\n        True\n        >>> root.left = Node(1)\n        >>> root.is_sum_node\n        False\n        >>> root.right = Node(2)\n        >>> root.is_sum_node\n        True\n        \"\"\"\n        if not self.left and not self.right:\n            return True  # leaf nodes are considered sum nodes\n        left_sum = sum(self.left) if self.left else 0\n        right_sum = sum(self.right) if self.right else 0\n        return all(\n            (\n                self.data == left_sum + right_sum,\n                self.left.is_sum_node if self.left else True,\n                self.right.is_sum_node if self.right else True,\n            )\n        )\n\n\n@dataclass\nclass BinaryTree:\n    root: Node\n\n    def __iter__(self) -> Iterator[int]:\n        \"\"\"\n        >>> list(BinaryTree.build_a_tree())\n        [1, 2, 7, 11, 15, 29, 35, 40]\n        \"\"\"\n        return iter(self.root)\n\n    def __len__(self) -> int:\n        \"\"\"\n        >>> len(BinaryTree.build_a_tree())\n        8\n        \"\"\"\n        return len(self.root)\n\n    def __str__(self) -> str:\n        \"\"\"\n        Returns a string representation of the inorder traversal of the binary tree.\n\n        >>> str(list(BinaryTree.build_a_tree()))\n        '[1, 2, 7, 11, 15, 29, 35, 40]'\n        \"\"\"\n        return str(list(self))\n\n    @property\n    def is_sum_tree(self) -> bool:\n        \"\"\"\n        >>> BinaryTree.build_a_tree().is_sum_tree\n        False\n        >>> BinaryTree.build_a_sum_tree().is_sum_tree\n        True\n        \"\"\"\n        return self.root.is_sum_node\n\n    @classmethod\n    def build_a_tree(cls) -> BinaryTree:\n        r\"\"\"\n        Create a binary tree with the specified structure:\n              11\n           /     \\\n          2       29\n         / \\     /  \\\n        1   7  15    40\n                       \\\n                        35\n        >>> list(BinaryTree.build_a_tree())\n        [1, 2, 7, 11, 15, 29, 35, 40]\n        \"\"\"\n        tree = BinaryTree(Node(11))\n        root = tree.root\n        root.left = Node(2)\n        root.right = Node(29)\n        root.left.left = Node(1)\n        root.left.right = Node(7)\n        root.right.left = Node(15)\n        root.right.right = Node(40)\n        root.right.right.left = Node(35)\n        return tree\n\n    @classmethod\n    def build_a_sum_tree(cls) -> BinaryTree:\n        r\"\"\"\n        Create a binary tree with the specified structure:\n             26\n            /  \\\n          10    3\n         /  \\    \\\n        4    6    3\n        >>> list(BinaryTree.build_a_sum_tree())\n        [4, 10, 6, 26, 3, 3]\n        \"\"\"\n        tree = BinaryTree(Node(26))\n        root = tree.root\n        root.left = Node(10)\n        root.right = Node(3)\n        root.left.left = Node(4)\n        root.left.right = Node(6)\n        root.right.right = Node(3)\n        return tree\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    tree = BinaryTree.build_a_tree()\n    print(f\"{tree} has {len(tree)} nodes and {tree.is_sum_tree = }.\")\n    tree = BinaryTree.build_a_sum_tree()\n    print(f\"{tree} has {len(tree)} nodes and {tree.is_sum_tree = }.\")\n"
  },
  {
    "path": "data_structures/binary_tree/lazy_segment_tree.py",
    "content": "from __future__ import annotations\n\nimport math\n\n\nclass SegmentTree:\n    def __init__(self, size: int) -> None:\n        self.size = size\n        # approximate the overall size of segment tree with given value\n        self.segment_tree = [0 for i in range(4 * size)]\n        # create array to store lazy update\n        self.lazy = [0 for i in range(4 * size)]\n        self.flag = [0 for i in range(4 * size)]  # flag for lazy update\n\n    def left(self, idx: int) -> int:\n        \"\"\"\n        >>> segment_tree = SegmentTree(15)\n        >>> segment_tree.left(1)\n        2\n        >>> segment_tree.left(2)\n        4\n        >>> segment_tree.left(12)\n        24\n        \"\"\"\n        return idx * 2\n\n    def right(self, idx: int) -> int:\n        \"\"\"\n        >>> segment_tree = SegmentTree(15)\n        >>> segment_tree.right(1)\n        3\n        >>> segment_tree.right(2)\n        5\n        >>> segment_tree.right(12)\n        25\n        \"\"\"\n        return idx * 2 + 1\n\n    def build(\n        self, idx: int, left_element: int, right_element: int, a: list[int]\n    ) -> None:\n        if left_element == right_element:\n            self.segment_tree[idx] = a[left_element - 1]\n        else:\n            mid = (left_element + right_element) // 2\n            self.build(self.left(idx), left_element, mid, a)\n            self.build(self.right(idx), mid + 1, right_element, a)\n            self.segment_tree[idx] = max(\n                self.segment_tree[self.left(idx)], self.segment_tree[self.right(idx)]\n            )\n\n    def update(\n        self, idx: int, left_element: int, right_element: int, a: int, b: int, val: int\n    ) -> bool:\n        \"\"\"\n        update with O(lg n) (Normal segment tree without lazy update will take O(nlg n)\n        for each update)\n\n        update(1, 1, size, a, b, v) for update val v to [a,b]\n        \"\"\"\n        if self.flag[idx] is True:\n            self.segment_tree[idx] = self.lazy[idx]\n            self.flag[idx] = False\n            if left_element != right_element:\n                self.lazy[self.left(idx)] = self.lazy[idx]\n                self.lazy[self.right(idx)] = self.lazy[idx]\n                self.flag[self.left(idx)] = True\n                self.flag[self.right(idx)] = True\n\n        if right_element < a or left_element > b:\n            return True\n        if left_element >= a and right_element <= b:\n            self.segment_tree[idx] = val\n            if left_element != right_element:\n                self.lazy[self.left(idx)] = val\n                self.lazy[self.right(idx)] = val\n                self.flag[self.left(idx)] = True\n                self.flag[self.right(idx)] = True\n            return True\n        mid = (left_element + right_element) // 2\n        self.update(self.left(idx), left_element, mid, a, b, val)\n        self.update(self.right(idx), mid + 1, right_element, a, b, val)\n        self.segment_tree[idx] = max(\n            self.segment_tree[self.left(idx)], self.segment_tree[self.right(idx)]\n        )\n        return True\n\n    # query with O(lg n)\n    def query(\n        self, idx: int, left_element: int, right_element: int, a: int, b: int\n    ) -> int | float:\n        \"\"\"\n        query(1, 1, size, a, b) for query max of [a,b]\n        >>> A = [1, 2, -4, 7, 3, -5, 6, 11, -20, 9, 14, 15, 5, 2, -8]\n        >>> segment_tree = SegmentTree(15)\n        >>> segment_tree.build(1, 1, 15, A)\n        >>> segment_tree.query(1, 1, 15, 4, 6)\n        7\n        >>> segment_tree.query(1, 1, 15, 7, 11)\n        14\n        >>> segment_tree.query(1, 1, 15, 7, 12)\n        15\n        \"\"\"\n        if self.flag[idx] is True:\n            self.segment_tree[idx] = self.lazy[idx]\n            self.flag[idx] = False\n            if left_element != right_element:\n                self.lazy[self.left(idx)] = self.lazy[idx]\n                self.lazy[self.right(idx)] = self.lazy[idx]\n                self.flag[self.left(idx)] = True\n                self.flag[self.right(idx)] = True\n        if right_element < a or left_element > b:\n            return -math.inf\n        if left_element >= a and right_element <= b:\n            return self.segment_tree[idx]\n        mid = (left_element + right_element) // 2\n        q1 = self.query(self.left(idx), left_element, mid, a, b)\n        q2 = self.query(self.right(idx), mid + 1, right_element, a, b)\n        return max(q1, q2)\n\n    def __str__(self) -> str:\n        return str([self.query(1, 1, self.size, i, i) for i in range(1, self.size + 1)])\n\n\nif __name__ == \"__main__\":\n    A = [1, 2, -4, 7, 3, -5, 6, 11, -20, 9, 14, 15, 5, 2, -8]\n    size = 15\n    segt = SegmentTree(size)\n    segt.build(1, 1, size, A)\n    print(segt.query(1, 1, size, 4, 6))\n    print(segt.query(1, 1, size, 7, 11))\n    print(segt.query(1, 1, size, 7, 12))\n    segt.update(1, 1, size, 1, 3, 111)\n    print(segt.query(1, 1, size, 1, 15))\n    segt.update(1, 1, size, 7, 8, 235)\n    print(segt)\n"
  },
  {
    "path": "data_structures/binary_tree/lowest_common_ancestor.py",
    "content": "# https://en.wikipedia.org/wiki/Lowest_common_ancestor\n# https://en.wikipedia.org/wiki/Breadth-first_search\n\nfrom __future__ import annotations\n\nfrom queue import Queue\n\n\ndef swap(a: int, b: int) -> tuple[int, int]:\n    \"\"\"\n    Return a tuple (b, a) when given two integers a and b\n    >>> swap(2,3)\n    (3, 2)\n    >>> swap(3,4)\n    (4, 3)\n    >>> swap(67, 12)\n    (12, 67)\n    >>> swap(3,-4)\n    (-4, 3)\n    \"\"\"\n    a ^= b\n    b ^= a\n    a ^= b\n    return a, b\n\n\ndef create_sparse(max_node: int, parent: list[list[int]]) -> list[list[int]]:\n    \"\"\"\n    creating sparse table which saves each nodes 2^i-th parent\n    >>> max_node = 6\n    >>> parent = [[0, 0, 1, 1, 2, 2, 3]] + [[0] * 7 for _ in range(19)]\n    >>> parent = create_sparse(max_node=max_node, parent=parent)\n    >>> parent[0]\n    [0, 0, 1, 1, 2, 2, 3]\n    >>> parent[1]\n    [0, 0, 0, 0, 1, 1, 1]\n    >>> parent[2]\n    [0, 0, 0, 0, 0, 0, 0]\n\n    >>> max_node = 1\n    >>> parent = [[0, 0]] + [[0] * 2 for _ in range(19)]\n    >>> parent = create_sparse(max_node=max_node, parent=parent)\n    >>> parent[0]\n    [0, 0]\n    >>> parent[1]\n    [0, 0]\n    \"\"\"\n    j = 1\n    while (1 << j) < max_node:\n        for i in range(1, max_node + 1):\n            parent[j][i] = parent[j - 1][parent[j - 1][i]]\n        j += 1\n    return parent\n\n\n# returns lca of node u,v\ndef lowest_common_ancestor(\n    u: int, v: int, level: list[int], parent: list[list[int]]\n) -> int:\n    \"\"\"\n    Return the lowest common ancestor between u and v\n\n    >>> level = [-1, 0, 1, 1, 2, 2, 2]\n    >>> parent = [[0, 0, 1, 1, 2, 2, 3],[0, 0, 0, 0, 1, 1, 1]] + \\\n                    [[0] * 7 for _ in range(17)]\n    >>> lowest_common_ancestor(u=4, v=5, level=level, parent=parent)\n    2\n    >>> lowest_common_ancestor(u=4, v=6, level=level, parent=parent)\n    1\n    >>> lowest_common_ancestor(u=2, v=3, level=level, parent=parent)\n    1\n    >>> lowest_common_ancestor(u=6, v=6, level=level, parent=parent)\n    6\n    \"\"\"\n    # u must be deeper in the tree than v\n    if level[u] < level[v]:\n        u, v = swap(u, v)\n    # making depth of u same as depth of v\n    for i in range(18, -1, -1):\n        if level[u] - (1 << i) >= level[v]:\n            u = parent[i][u]\n    # at the same depth if u==v that mean lca is found\n    if u == v:\n        return u\n    # moving both nodes upwards till lca in found\n    for i in range(18, -1, -1):\n        if parent[i][u] not in [0, parent[i][v]]:\n            u, v = parent[i][u], parent[i][v]\n    # returning longest common ancestor of u,v\n    return parent[0][u]\n\n\n# runs a breadth first search from root node of the tree\ndef breadth_first_search(\n    level: list[int],\n    parent: list[list[int]],\n    max_node: int,\n    graph: dict[int, list[int]],\n    root: int = 1,\n) -> tuple[list[int], list[list[int]]]:\n    \"\"\"\n    sets every nodes direct parent\n    parent of root node is set to 0\n    calculates depth of each node from root node\n    >>> level = [-1] * 7\n    >>> parent = [[0] * 7 for _ in range(20)]\n    >>> graph = {1: [2, 3], 2: [4, 5], 3: [6], 4: [], 5: [], 6: []}\n    >>> level, parent = breadth_first_search(\n    ...     level=level, parent=parent, max_node=6, graph=graph, root=1)\n    >>> level\n    [-1, 0, 1, 1, 2, 2, 2]\n    >>> parent[0]\n    [0, 0, 1, 1, 2, 2, 3]\n\n\n    >>> level = [-1] * 2\n    >>> parent = [[0] * 2 for _ in range(20)]\n    >>> graph = {1: []}\n    >>> level, parent = breadth_first_search(\n    ...     level=level, parent=parent, max_node=1, graph=graph, root=1)\n    >>> level\n    [-1, 0]\n    >>> parent[0]\n    [0, 0]\n    \"\"\"\n    level[root] = 0\n    q: Queue[int] = Queue(maxsize=max_node)\n    q.put(root)\n    while q.qsize() != 0:\n        u = q.get()\n        for v in graph[u]:\n            if level[v] == -1:\n                level[v] = level[u] + 1\n                q.put(v)\n                parent[0][v] = u\n    return level, parent\n\n\ndef main() -> None:\n    max_node = 13\n    # initializing with 0\n    parent = [[0 for _ in range(max_node + 10)] for _ in range(20)]\n    # initializing with -1 which means every node is unvisited\n    level = [-1 for _ in range(max_node + 10)]\n    graph: dict[int, list[int]] = {\n        1: [2, 3, 4],\n        2: [5],\n        3: [6, 7],\n        4: [8],\n        5: [9, 10],\n        6: [11],\n        7: [],\n        8: [12, 13],\n        9: [],\n        10: [],\n        11: [],\n        12: [],\n        13: [],\n    }\n    level, parent = breadth_first_search(level, parent, max_node, graph, 1)\n    parent = create_sparse(max_node, parent)\n    print(\"LCA of node 1 and 3 is: \", lowest_common_ancestor(1, 3, level, parent))\n    print(\"LCA of node 5 and 6 is: \", lowest_common_ancestor(5, 6, level, parent))\n    print(\"LCA of node 7 and 11 is: \", lowest_common_ancestor(7, 11, level, parent))\n    print(\"LCA of node 6 and 7 is: \", lowest_common_ancestor(6, 7, level, parent))\n    print(\"LCA of node 4 and 12 is: \", lowest_common_ancestor(4, 12, level, parent))\n    print(\"LCA of node 8 and 8 is: \", lowest_common_ancestor(8, 8, level, parent))\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "data_structures/binary_tree/maximum_fenwick_tree.py",
    "content": "class MaxFenwickTree:\n    \"\"\"\n    Maximum Fenwick Tree\n\n    More info: https://cp-algorithms.com/data_structures/fenwick.html\n    ---------\n    >>> ft = MaxFenwickTree(5)\n    >>> ft.query(0, 5)\n    0\n    >>> ft.update(4, 100)\n    >>> ft.query(0, 5)\n    100\n    >>> ft.update(4, 0)\n    >>> ft.update(2, 20)\n    >>> ft.query(0, 5)\n    20\n    >>> ft.update(4, 10)\n    >>> ft.query(2, 5)\n    20\n    >>> ft.query(1, 5)\n    20\n    >>> ft.update(2, 0)\n    >>> ft.query(0, 5)\n    10\n    >>> ft = MaxFenwickTree(10000)\n    >>> ft.update(255, 30)\n    >>> ft.query(0, 10000)\n    30\n    >>> ft = MaxFenwickTree(6)\n    >>> ft.update(5, 1)\n    >>> ft.query(5, 6)\n    1\n    >>> ft = MaxFenwickTree(6)\n    >>> ft.update(0, 1000)\n    >>> ft.query(0, 1)\n    1000\n    \"\"\"\n\n    def __init__(self, size: int) -> None:\n        \"\"\"\n        Create empty Maximum Fenwick Tree with specified size\n\n        Parameters:\n            size: size of Array\n\n        Returns:\n            None\n        \"\"\"\n        self.size = size\n        self.arr = [0] * size\n        self.tree = [0] * size\n\n    @staticmethod\n    def get_next(index: int) -> int:\n        \"\"\"\n        Get next index in O(1)\n        \"\"\"\n        return index | (index + 1)\n\n    @staticmethod\n    def get_prev(index: int) -> int:\n        \"\"\"\n        Get previous index in O(1)\n        \"\"\"\n        return (index & (index + 1)) - 1\n\n    def update(self, index: int, value: int) -> None:\n        \"\"\"\n        Set index to value in O(lg^2 N)\n\n        Parameters:\n            index: index to update\n            value: value to set\n\n        Returns:\n            None\n        \"\"\"\n        self.arr[index] = value\n        while index < self.size:\n            current_left_border = self.get_prev(index) + 1\n            if current_left_border == index:\n                self.tree[index] = value\n            else:\n                self.tree[index] = max(value, current_left_border, index)\n            index = self.get_next(index)\n\n    def query(self, left: int, right: int) -> int:\n        \"\"\"\n        Answer the query of maximum range [l, r) in O(lg^2 N)\n\n        Parameters:\n            left: left index of query range (inclusive)\n            right: right index of query range (exclusive)\n\n        Returns:\n            Maximum value of range [left, right)\n        \"\"\"\n        right -= 1  # Because of right is exclusive\n        result = 0\n        while left <= right:\n            current_left = self.get_prev(right)\n            if left <= current_left:\n                result = max(result, self.tree[right])\n                right = current_left\n            else:\n                result = max(result, self.arr[right])\n                right -= 1\n        return result\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/binary_tree/maximum_sum_bst.py",
    "content": "from __future__ import annotations\n\nimport sys\nfrom dataclasses import dataclass\n\nINT_MIN = -sys.maxsize + 1\nINT_MAX = sys.maxsize - 1\n\n\n@dataclass\nclass TreeNode:\n    val: int = 0\n    left: TreeNode | None = None\n    right: TreeNode | None = None\n\n\ndef max_sum_bst(root: TreeNode | None) -> int:\n    \"\"\"\n    The solution traverses a binary tree to find the maximum sum of\n    keys in any subtree that is a Binary Search Tree (BST). It uses\n    recursion to validate BST properties and calculates sums, returning\n    the highest sum found among all valid BST subtrees.\n\n    >>> t1 = TreeNode(4)\n    >>> t1.left = TreeNode(3)\n    >>> t1.left.left = TreeNode(1)\n    >>> t1.left.right = TreeNode(2)\n    >>> print(max_sum_bst(t1))\n    2\n    >>> t2 = TreeNode(-4)\n    >>> t2.left = TreeNode(-2)\n    >>> t2.right = TreeNode(-5)\n    >>> print(max_sum_bst(t2))\n    0\n    >>> t3 = TreeNode(1)\n    >>> t3.left = TreeNode(4)\n    >>> t3.left.left = TreeNode(2)\n    >>> t3.left.right = TreeNode(4)\n    >>> t3.right = TreeNode(3)\n    >>> t3.right.left = TreeNode(2)\n    >>> t3.right.right = TreeNode(5)\n    >>> t3.right.right.left = TreeNode(4)\n    >>> t3.right.right.right = TreeNode(6)\n    >>> print(max_sum_bst(t3))\n    20\n    \"\"\"\n    ans: int = 0\n\n    def solver(node: TreeNode | None) -> tuple[bool, int, int, int]:\n        \"\"\"\n        Returns the maximum sum by making recursive calls\n        >>> t1 = TreeNode(1)\n        >>> print(solver(t1))\n        1\n        \"\"\"\n        nonlocal ans\n\n        if not node:\n            return True, INT_MAX, INT_MIN, 0  # Valid BST, min, max, sum\n\n        is_left_valid, min_left, max_left, sum_left = solver(node.left)\n        is_right_valid, min_right, max_right, sum_right = solver(node.right)\n\n        if is_left_valid and is_right_valid and max_left < node.val < min_right:\n            total_sum = sum_left + sum_right + node.val\n            ans = max(ans, total_sum)\n            return True, min(min_left, node.val), max(max_right, node.val), total_sum\n\n        return False, -1, -1, -1  # Not a valid BST\n\n    solver(root)\n    return ans\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/binary_tree/merge_two_binary_trees.py",
    "content": "#!/usr/local/bin/python3\n\"\"\"\nProblem Description: Given two binary tree, return the merged tree.\nThe rule for merging is that if two nodes overlap, then put the value sum of\nboth nodes to the new value of the merged node. Otherwise, the NOT null node\nwill be used as the node of new tree.\n\"\"\"\n\nfrom __future__ import annotations\n\n\nclass Node:\n    \"\"\"\n    A binary node has value variable and pointers to its left and right node.\n    \"\"\"\n\n    def __init__(self, value: int = 0) -> None:\n        self.value = value\n        self.left: Node | None = None\n        self.right: Node | None = None\n\n\ndef merge_two_binary_trees(tree1: Node | None, tree2: Node | None) -> Node | None:\n    \"\"\"\n    Returns root node of the merged tree.\n\n    >>> tree1 = Node(5)\n    >>> tree1.left = Node(6)\n    >>> tree1.right = Node(7)\n    >>> tree1.left.left = Node(2)\n    >>> tree2 = Node(4)\n    >>> tree2.left = Node(5)\n    >>> tree2.right = Node(8)\n    >>> tree2.left.right = Node(1)\n    >>> tree2.right.right = Node(4)\n    >>> merged_tree = merge_two_binary_trees(tree1, tree2)\n    >>> print_preorder(merged_tree)\n    9\n    11\n    2\n    1\n    15\n    4\n    \"\"\"\n    if tree1 is None:\n        return tree2\n    if tree2 is None:\n        return tree1\n\n    tree1.value = tree1.value + tree2.value\n    tree1.left = merge_two_binary_trees(tree1.left, tree2.left)\n    tree1.right = merge_two_binary_trees(tree1.right, tree2.right)\n    return tree1\n\n\ndef print_preorder(root: Node | None) -> None:\n    \"\"\"\n    Print pre-order traversal of the tree.\n\n    >>> root = Node(1)\n    >>> root.left = Node(2)\n    >>> root.right = Node(3)\n    >>> print_preorder(root)\n    1\n    2\n    3\n    >>> print_preorder(root.right)\n    3\n    \"\"\"\n    if root:\n        print(root.value)\n        print_preorder(root.left)\n        print_preorder(root.right)\n\n\nif __name__ == \"__main__\":\n    tree1 = Node(1)\n    tree1.left = Node(2)\n    tree1.right = Node(3)\n    tree1.left.left = Node(4)\n\n    tree2 = Node(2)\n    tree2.left = Node(4)\n    tree2.right = Node(6)\n    tree2.left.right = Node(9)\n    tree2.right.right = Node(5)\n\n    print(\"Tree1 is: \")\n    print_preorder(tree1)\n    print(\"Tree2 is: \")\n    print_preorder(tree2)\n    merged_tree = merge_two_binary_trees(tree1, tree2)\n    print(\"Merged Tree is: \")\n    print_preorder(merged_tree)\n"
  },
  {
    "path": "data_structures/binary_tree/mirror_binary_tree.py",
    "content": "\"\"\"\nGiven the root of a binary tree, mirror the tree, and return its root.\n\nLeetcode problem reference: https://leetcode.com/problems/mirror-binary-tree/\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections.abc import Iterator\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass Node:\n    \"\"\"\n    A Node has value variable and pointers to Nodes to its left and right.\n    \"\"\"\n\n    value: int\n    left: Node | None = None\n    right: Node | None = None\n\n    def __iter__(self) -> Iterator[int]:\n        if self.left:\n            yield from self.left\n        yield self.value\n        if self.right:\n            yield from self.right\n\n    def __len__(self) -> int:\n        return sum(1 for _ in self)\n\n    def mirror(self) -> Node:\n        \"\"\"\n        Mirror the binary tree rooted at this node by swapping left and right children.\n\n        >>> tree = Node(0)\n        >>> list(tree)\n        [0]\n        >>> list(tree.mirror())\n        [0]\n        >>> tree = Node(1, Node(0), Node(3, Node(2), Node(4, None, Node(5))))\n        >>> tuple(tree)\n        (0, 1, 2, 3, 4, 5)\n        >>> tuple(tree.mirror())\n        (5, 4, 3, 2, 1, 0)\n        \"\"\"\n        self.left, self.right = self.right, self.left\n        if self.left:\n            self.left.mirror()\n        if self.right:\n            self.right.mirror()\n        return self\n\n\ndef make_tree_seven() -> Node:\n    r\"\"\"\n    Return a binary tree with 7 nodes that looks like this:\n    ::\n\n           1\n         /   \\\n        2     3\n       / \\   / \\\n      4   5 6   7\n\n    >>> tree_seven = make_tree_seven()\n    >>> len(tree_seven)\n    7\n    >>> list(tree_seven)\n    [4, 2, 5, 1, 6, 3, 7]\n    \"\"\"\n    tree = Node(1)\n    tree.left = Node(2)\n    tree.right = Node(3)\n    tree.left.left = Node(4)\n    tree.left.right = Node(5)\n    tree.right.left = Node(6)\n    tree.right.right = Node(7)\n    return tree\n\n\ndef make_tree_nine() -> Node:\n    r\"\"\"\n    Return a binary tree with 9 nodes that looks like this:\n    ::\n\n            1\n           / \\\n          2   3\n         / \\   \\\n        4   5   6\n       / \\   \\\n      7   8   9\n\n    >>> tree_nine = make_tree_nine()\n    >>> len(tree_nine)\n    9\n    >>> list(tree_nine)\n    [7, 4, 8, 2, 5, 9, 1, 3, 6]\n    \"\"\"\n    tree = Node(1)\n    tree.left = Node(2)\n    tree.right = Node(3)\n    tree.left.left = Node(4)\n    tree.left.right = Node(5)\n    tree.right.right = Node(6)\n    tree.left.left.left = Node(7)\n    tree.left.left.right = Node(8)\n    tree.left.right.right = Node(9)\n    return tree\n\n\ndef main() -> None:\n    r\"\"\"\n    Mirror binary trees with the given root and returns the root\n\n    >>> tree = make_tree_nine()\n    >>> tuple(tree)\n    (7, 4, 8, 2, 5, 9, 1, 3, 6)\n    >>> tuple(tree.mirror())\n    (6, 3, 1, 9, 5, 2, 8, 4, 7)\n\n    nine_tree::\n\n            1\n           / \\\n          2   3\n         / \\   \\\n        4   5   6\n       / \\   \\\n      7   8   9\n\n    The mirrored tree looks like this::\n\n          1\n         / \\\n        3   2\n       /   / \\\n      6   5   4\n         /   / \\\n        9   8   7\n    \"\"\"\n    trees = {\"zero\": Node(0), \"seven\": make_tree_seven(), \"nine\": make_tree_nine()}\n    for name, tree in trees.items():\n        print(f\"      The {name} tree: {tuple(tree)}\")\n        # (0,)\n        # (4, 2, 5, 1, 6, 3, 7)\n        # (7, 4, 8, 2, 5, 9, 1, 3, 6)\n        print(f\"Mirror of {name} tree: {tuple(tree.mirror())}\")\n        # (0,)\n        # (7, 3, 6, 1, 5, 2, 4)\n        # (6, 3, 1, 9, 5, 2, 8, 4, 7)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    main()\n"
  },
  {
    "path": "data_structures/binary_tree/non_recursive_segment_tree.py",
    "content": "\"\"\"\nA non-recursive Segment Tree implementation with range query and single element update,\nworks virtually with any list of the same type of elements with a \"commutative\"\ncombiner.\n\nExplanation:\nhttps://www.geeksforgeeks.org/iterative-segment-tree-range-minimum-query/\nhttps://www.geeksforgeeks.org/segment-tree-efficient-implementation/\n\n>>> SegmentTree([1, 2, 3], lambda a, b: a + b).query(0, 2)\n6\n>>> SegmentTree([3, 1, 2], min).query(0, 2)\n1\n>>> SegmentTree([2, 3, 1], max).query(0, 2)\n3\n>>> st = SegmentTree([1, 5, 7, -1, 6], lambda a, b: a + b)\n>>> st.update(1, -1)\n>>> st.update(2, 3)\n>>> st.query(1, 2)\n2\n>>> st.query(1, 1)\n-1\n>>> st.update(4, 1)\n>>> st.query(3, 4)\n0\n>>> st = SegmentTree([[1, 2, 3], [3, 2, 1], [1, 1, 1]], lambda a, b: [a[i] + b[i] for i\n...                                                                   in range(len(a))])\n>>> st.query(0, 1)\n[4, 4, 4]\n>>> st.query(1, 2)\n[4, 3, 2]\n>>> st.update(1, [-1, -1, -1])\n>>> st.query(1, 2)\n[0, 0, 0]\n>>> st.query(0, 2)\n[1, 2, 3]\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections.abc import Callable\nfrom typing import Any, TypeVar\n\nT = TypeVar(\"T\")\n\n\nclass SegmentTree[T]:\n    def __init__(self, arr: list[T], fnc: Callable[[T, T], T]) -> None:\n        \"\"\"\n        Segment Tree constructor, it works just with commutative combiner.\n        :param arr: list of elements for the segment tree\n        :param fnc: commutative function for combine two elements\n\n        >>> SegmentTree(['a', 'b', 'c'], lambda a, b: f'{a}{b}').query(0, 2)\n        'abc'\n        >>> SegmentTree([(1, 2), (2, 3), (3, 4)],\n        ...             lambda a, b: (a[0] + b[0], a[1] + b[1])).query(0, 2)\n        (6, 9)\n        \"\"\"\n        any_type: Any | T = None\n\n        self.N: int = len(arr)\n        self.st: list[T] = [any_type for _ in range(self.N)] + arr\n        self.fn = fnc\n        self.build()\n\n    def build(self) -> None:\n        for p in range(self.N - 1, 0, -1):\n            self.st[p] = self.fn(self.st[p * 2], self.st[p * 2 + 1])\n\n    def update(self, p: int, v: T) -> None:\n        \"\"\"\n        Update an element in log(N) time\n        :param p: position to be update\n        :param v: new value\n\n        >>> st = SegmentTree([3, 1, 2, 4], min)\n        >>> st.query(0, 3)\n        1\n        >>> st.update(2, -1)\n        >>> st.query(0, 3)\n        -1\n        \"\"\"\n        p += self.N\n        self.st[p] = v\n        while p > 1:\n            p = p // 2\n            self.st[p] = self.fn(self.st[p * 2], self.st[p * 2 + 1])\n\n    def query(self, left: int, right: int) -> T | None:\n        \"\"\"\n        Get range query value in log(N) time\n        :param left: left element index\n        :param right: right element index\n        :return: element combined in the range [left, right]\n\n        >>> st = SegmentTree([1, 2, 3, 4], lambda a, b: a + b)\n        >>> st.query(0, 2)\n        6\n        >>> st.query(1, 2)\n        5\n        >>> st.query(0, 3)\n        10\n        >>> st.query(2, 3)\n        7\n        \"\"\"\n        left, right = left + self.N, right + self.N\n\n        res: T | None = None\n        while left <= right:\n            if left % 2 == 1:\n                res = self.st[left] if res is None else self.fn(res, self.st[left])\n            if right % 2 == 0:\n                res = self.st[right] if res is None else self.fn(res, self.st[right])\n            left, right = (left + 1) // 2, (right - 1) // 2\n        return res\n\n\nif __name__ == \"__main__\":\n    from functools import reduce\n\n    test_array = [1, 10, -2, 9, -3, 8, 4, -7, 5, 6, 11, -12]\n\n    test_updates = {\n        0: 7,\n        1: 2,\n        2: 6,\n        3: -14,\n        4: 5,\n        5: 4,\n        6: 7,\n        7: -10,\n        8: 9,\n        9: 10,\n        10: 12,\n        11: 1,\n    }\n\n    min_segment_tree = SegmentTree(test_array, min)\n    max_segment_tree = SegmentTree(test_array, max)\n    sum_segment_tree = SegmentTree(test_array, lambda a, b: a + b)\n\n    def test_all_segments() -> None:\n        \"\"\"\n        Test all possible segments\n        \"\"\"\n        for i in range(len(test_array)):\n            for j in range(i, len(test_array)):\n                min_range = reduce(min, test_array[i : j + 1])\n                max_range = reduce(max, test_array[i : j + 1])\n                sum_range = reduce(lambda a, b: a + b, test_array[i : j + 1])\n                assert min_range == min_segment_tree.query(i, j)\n                assert max_range == max_segment_tree.query(i, j)\n                assert sum_range == sum_segment_tree.query(i, j)\n\n    test_all_segments()\n\n    for index, value in test_updates.items():\n        test_array[index] = value\n        min_segment_tree.update(index, value)\n        max_segment_tree.update(index, value)\n        sum_segment_tree.update(index, value)\n        test_all_segments()\n"
  },
  {
    "path": "data_structures/binary_tree/number_of_possible_binary_trees.py",
    "content": "\"\"\"\nHey, we are going to find an exciting number called Catalan number which is use to find\nthe number of possible binary search trees from tree of a given number of nodes.\n\nWe will use the formula: t(n) = SUMMATION(i = 1 to n)t(i-1)t(n-i)\n\nFurther details at Wikipedia: https://en.wikipedia.org/wiki/Catalan_number\n\"\"\"\n\n\"\"\"\nOur Contribution:\nBasically we Create the 2 function:\n    1. catalan_number(node_count: int) -> int\n        Returns the number of possible binary search trees for n nodes.\n    2. binary_tree_count(node_count: int) -> int\n        Returns the number of possible binary trees for n nodes.\n\"\"\"\n\n\ndef binomial_coefficient(n: int, k: int) -> int:\n    \"\"\"\n    Since Here we Find the Binomial Coefficient:\n    https://en.wikipedia.org/wiki/Binomial_coefficient\n    C(n,k) = n! / k!(n-k)!\n    :param n: 2 times of Number of nodes\n    :param k: Number of nodes\n    :return:  Integer Value\n\n    >>> binomial_coefficient(4, 2)\n    6\n    \"\"\"\n    result = 1  # To kept the Calculated Value\n    # Since C(n, k) = C(n, n-k)\n    k = min(k, n - k)\n    # Calculate C(n,k)\n    for i in range(k):\n        result *= n - i\n        result //= i + 1\n    return result\n\n\ndef catalan_number(node_count: int) -> int:\n    \"\"\"\n    We can find Catalan number many ways but here we use Binomial Coefficient because it\n    does the job in O(n)\n\n    return the Catalan number of n using 2nCn/(n+1).\n    :param n: number of nodes\n    :return: Catalan number of n nodes\n\n    >>> catalan_number(5)\n    42\n    >>> catalan_number(6)\n    132\n    \"\"\"\n    return binomial_coefficient(2 * node_count, node_count) // (node_count + 1)\n\n\ndef factorial(n: int) -> int:\n    \"\"\"\n    Return the factorial of a number.\n    :param n: Number to find the Factorial of.\n    :return: Factorial of n.\n\n    >>> import math\n    >>> all(factorial(i) == math.factorial(i) for i in range(10))\n    True\n    >>> factorial(-5)  # doctest: +ELLIPSIS\n    Traceback (most recent call last):\n        ...\n    ValueError: factorial() not defined for negative values\n    \"\"\"\n    if n < 0:\n        raise ValueError(\"factorial() not defined for negative values\")\n    result = 1\n    for i in range(1, n + 1):\n        result *= i\n    return result\n\n\ndef binary_tree_count(node_count: int) -> int:\n    \"\"\"\n    Return the number of possible of binary trees.\n    :param n: number of nodes\n    :return: Number of possible binary trees\n\n    >>> binary_tree_count(5)\n    5040\n    >>> binary_tree_count(6)\n    95040\n    \"\"\"\n    return catalan_number(node_count) * factorial(node_count)\n\n\nif __name__ == \"__main__\":\n    node_count = int(input(\"Enter the number of nodes: \").strip() or 0)\n    if node_count <= 0:\n        raise ValueError(\"We need some nodes to work with.\")\n    print(\n        f\"Given {node_count} nodes, there are {binary_tree_count(node_count)} \"\n        f\"binary trees and {catalan_number(node_count)} binary search trees.\"\n    )\n"
  },
  {
    "path": "data_structures/binary_tree/red_black_tree.py",
    "content": "from __future__ import annotations\r\n\r\nfrom collections.abc import Iterator\r\n\r\n\r\nclass RedBlackTree:\r\n    \"\"\"\r\n    A Red-Black tree, which is a self-balancing BST (binary search\r\n    tree).\r\n    This tree has similar performance to AVL trees, but the balancing is\r\n    less strict, so it will perform faster for writing/deleting nodes\r\n    and slower for reading in the average case, though, because they're\r\n    both balanced binary search trees, both will get the same asymptotic\r\n    performance.\r\n    To read more about them, https://en.wikipedia.org/wiki/Red-black_tree\r\n    Unless otherwise specified, all asymptotic runtimes are specified in\r\n    terms of the size of the tree.\r\n    \"\"\"\r\n\r\n    def __init__(\r\n        self,\r\n        label: int | None = None,\r\n        color: int = 0,\r\n        parent: RedBlackTree | None = None,\r\n        left: RedBlackTree | None = None,\r\n        right: RedBlackTree | None = None,\r\n    ) -> None:\r\n        \"\"\"Initialize a new Red-Black Tree node with the given values:\r\n        label: The value associated with this node\r\n        color: 0 if black, 1 if red\r\n        parent: The parent to this node\r\n        left: This node's left child\r\n        right: This node's right child\r\n        \"\"\"\r\n        self.label = label\r\n        self.parent = parent\r\n        self.left = left\r\n        self.right = right\r\n        self.color = color\r\n\r\n    # Here are functions which are specific to red-black trees\r\n\r\n    def rotate_left(self) -> RedBlackTree:\r\n        \"\"\"Rotate the subtree rooted at this node to the left and\r\n        returns the new root to this subtree.\r\n        Performing one rotation can be done in O(1).\r\n        \"\"\"\r\n        parent = self.parent\r\n        right = self.right\r\n        if right is None:\r\n            return self\r\n        self.right = right.left\r\n        if self.right:\r\n            self.right.parent = self\r\n        self.parent = right\r\n        right.left = self\r\n        if parent is not None:\r\n            if parent.left == self:\r\n                parent.left = right\r\n            else:\r\n                parent.right = right\r\n        right.parent = parent\r\n        return right\r\n\r\n    def rotate_right(self) -> RedBlackTree:\r\n        \"\"\"Rotate the subtree rooted at this node to the right and\r\n        returns the new root to this subtree.\r\n        Performing one rotation can be done in O(1).\r\n        \"\"\"\r\n        if self.left is None:\r\n            return self\r\n        parent = self.parent\r\n        left = self.left\r\n        self.left = left.right\r\n        if self.left:\r\n            self.left.parent = self\r\n        self.parent = left\r\n        left.right = self\r\n        if parent is not None:\r\n            if parent.right is self:\r\n                parent.right = left\r\n            else:\r\n                parent.left = left\r\n        left.parent = parent\r\n        return left\r\n\r\n    def insert(self, label: int) -> RedBlackTree:\r\n        \"\"\"Inserts label into the subtree rooted at self, performs any\r\n        rotations necessary to maintain balance, and then returns the\r\n        new root to this subtree (likely self).\r\n        This is guaranteed to run in O(log(n)) time.\r\n        \"\"\"\r\n        if self.label is None:\r\n            # Only possible with an empty tree\r\n            self.label = label\r\n            return self\r\n        if self.label == label:\r\n            return self\r\n        elif self.label > label:\r\n            if self.left:\r\n                self.left.insert(label)\r\n            else:\r\n                self.left = RedBlackTree(label, 1, self)\r\n                self.left._insert_repair()\r\n        elif self.right:\r\n            self.right.insert(label)\r\n        else:\r\n            self.right = RedBlackTree(label, 1, self)\r\n            self.right._insert_repair()\r\n        return self.parent or self\r\n\r\n    def _insert_repair(self) -> None:\r\n        \"\"\"Repair the coloring from inserting into a tree.\"\"\"\r\n        if self.parent is None:\r\n            # This node is the root, so it just needs to be black\r\n            self.color = 0\r\n        elif color(self.parent) == 0:\r\n            # If the parent is black, then it just needs to be red\r\n            self.color = 1\r\n        else:\r\n            uncle = self.parent.sibling\r\n            if color(uncle) == 0:\r\n                if self.is_left() and self.parent.is_right():\r\n                    self.parent.rotate_right()\r\n                    if self.right:\r\n                        self.right._insert_repair()\r\n                elif self.is_right() and self.parent.is_left():\r\n                    self.parent.rotate_left()\r\n                    if self.left:\r\n                        self.left._insert_repair()\r\n                elif self.is_left():\r\n                    if self.grandparent:\r\n                        self.grandparent.rotate_right()\r\n                        self.parent.color = 0\r\n                    if self.parent.right:\r\n                        self.parent.right.color = 1\r\n                else:\r\n                    if self.grandparent:\r\n                        self.grandparent.rotate_left()\r\n                        self.parent.color = 0\r\n                    if self.parent.left:\r\n                        self.parent.left.color = 1\r\n            else:\r\n                self.parent.color = 0\r\n                if uncle and self.grandparent:\r\n                    uncle.color = 0\r\n                    self.grandparent.color = 1\r\n                    self.grandparent._insert_repair()\r\n\r\n    def remove(self, label: int) -> RedBlackTree:\r\n        \"\"\"Remove label from this tree.\"\"\"\r\n        if self.label == label:\r\n            if self.left and self.right:\r\n                # It's easier to balance a node with at most one child,\r\n                # so we replace this node with the greatest one less than\r\n                # it and remove that.\r\n                value = self.left.get_max()\r\n                if value is not None:\r\n                    self.label = value\r\n                    self.left.remove(value)\r\n            else:\r\n                # This node has at most one non-None child, so we don't\r\n                # need to replace\r\n                child = self.left or self.right\r\n                if self.color == 1:\r\n                    # This node is red, and its child is black\r\n                    # The only way this happens to a node with one child\r\n                    # is if both children are None leaves.\r\n                    # We can just remove this node and call it a day.\r\n                    if self.parent:\r\n                        if self.is_left():\r\n                            self.parent.left = None\r\n                        else:\r\n                            self.parent.right = None\r\n                # The node is black\r\n                elif child is None:\r\n                    # This node and its child are black\r\n                    if self.parent is None:\r\n                        # The tree is now empty\r\n                        return RedBlackTree(None)\r\n                    else:\r\n                        self._remove_repair()\r\n                        if self.is_left():\r\n                            self.parent.left = None\r\n                        else:\r\n                            self.parent.right = None\r\n                        self.parent = None\r\n                else:\r\n                    # This node is black and its child is red\r\n                    # Move the child node here and make it black\r\n                    self.label = child.label\r\n                    self.left = child.left\r\n                    self.right = child.right\r\n                    if self.left:\r\n                        self.left.parent = self\r\n                    if self.right:\r\n                        self.right.parent = self\r\n        elif self.label is not None and self.label > label:\r\n            if self.left:\r\n                self.left.remove(label)\r\n        elif self.right:\r\n            self.right.remove(label)\r\n        return self.parent or self\r\n\r\n    def _remove_repair(self) -> None:\r\n        \"\"\"Repair the coloring of the tree that may have been messed up.\"\"\"\r\n        if (\r\n            self.parent is None\r\n            or self.sibling is None\r\n            or self.parent.sibling is None\r\n            or self.grandparent is None\r\n        ):\r\n            return\r\n        if color(self.sibling) == 1:\r\n            self.sibling.color = 0\r\n            self.parent.color = 1\r\n            if self.is_left():\r\n                self.parent.rotate_left()\r\n            else:\r\n                self.parent.rotate_right()\r\n        if (\r\n            color(self.parent) == 0\r\n            and color(self.sibling) == 0\r\n            and color(self.sibling.left) == 0\r\n            and color(self.sibling.right) == 0\r\n        ):\r\n            self.sibling.color = 1\r\n            self.parent._remove_repair()\r\n            return\r\n        if (\r\n            color(self.parent) == 1\r\n            and color(self.sibling) == 0\r\n            and color(self.sibling.left) == 0\r\n            and color(self.sibling.right) == 0\r\n        ):\r\n            self.sibling.color = 1\r\n            self.parent.color = 0\r\n            return\r\n        if (\r\n            self.is_left()\r\n            and color(self.sibling) == 0\r\n            and color(self.sibling.right) == 0\r\n            and color(self.sibling.left) == 1\r\n        ):\r\n            self.sibling.rotate_right()\r\n            self.sibling.color = 0\r\n            if self.sibling.right:\r\n                self.sibling.right.color = 1\r\n        if (\r\n            self.is_right()\r\n            and color(self.sibling) == 0\r\n            and color(self.sibling.right) == 1\r\n            and color(self.sibling.left) == 0\r\n        ):\r\n            self.sibling.rotate_left()\r\n            self.sibling.color = 0\r\n            if self.sibling.left:\r\n                self.sibling.left.color = 1\r\n        if (\r\n            self.is_left()\r\n            and color(self.sibling) == 0\r\n            and color(self.sibling.right) == 1\r\n        ):\r\n            self.parent.rotate_left()\r\n            self.grandparent.color = self.parent.color\r\n            self.parent.color = 0\r\n            self.parent.sibling.color = 0\r\n        if (\r\n            self.is_right()\r\n            and color(self.sibling) == 0\r\n            and color(self.sibling.left) == 1\r\n        ):\r\n            self.parent.rotate_right()\r\n            self.grandparent.color = self.parent.color\r\n            self.parent.color = 0\r\n            self.parent.sibling.color = 0\r\n\r\n    def check_color_properties(self) -> bool:\r\n        \"\"\"Check the coloring of the tree, and return True iff the tree\r\n        is colored in a way which matches these five properties:\r\n        (wording stolen from wikipedia article)\r\n         1. Each node is either red or black.\r\n         2. The root node is black.\r\n         3. All leaves are black.\r\n         4. If a node is red, then both its children are black.\r\n         5. Every path from any node to all of its descendent NIL nodes\r\n            has the same number of black nodes.\r\n        This function runs in O(n) time, because properties 4 and 5 take\r\n        that long to check.\r\n        \"\"\"\r\n        # I assume property 1 to hold because there is nothing that can\r\n        # make the color be anything other than 0 or 1.\r\n        # Property 2\r\n        if self.color:\r\n            # The root was red\r\n            print(\"Property 2\")\r\n            return False\r\n        # Property 3 does not need to be checked, because None is assumed\r\n        # to be black and is all the leaves.\r\n        # Property 4\r\n        if not self.check_coloring():\r\n            print(\"Property 4\")\r\n            return False\r\n        # Property 5\r\n        if self.black_height() is None:\r\n            print(\"Property 5\")\r\n            return False\r\n        # All properties were met\r\n        return True\r\n\r\n    def check_coloring(self) -> bool:\r\n        \"\"\"A helper function to recursively check Property 4 of a\r\n        Red-Black Tree. See check_color_properties for more info.\r\n        \"\"\"\r\n        if self.color == 1 and 1 in (color(self.left), color(self.right)):\r\n            return False\r\n        if self.left and not self.left.check_coloring():\r\n            return False\r\n        return not (self.right and not self.right.check_coloring())\r\n\r\n    def black_height(self) -> int | None:\r\n        \"\"\"Returns the number of black nodes from this node to the\r\n        leaves of the tree, or None if there isn't one such value (the\r\n        tree is color incorrectly).\r\n        \"\"\"\r\n        if self is None or self.left is None or self.right is None:\r\n            # If we're already at a leaf, there is no path\r\n            return 1\r\n        left = RedBlackTree.black_height(self.left)\r\n        right = RedBlackTree.black_height(self.right)\r\n        if left is None or right is None:\r\n            # There are issues with coloring below children nodes\r\n            return None\r\n        if left != right:\r\n            # The two children have unequal depths\r\n            return None\r\n        # Return the black depth of children, plus one if this node is\r\n        # black\r\n        return left + (1 - self.color)\r\n\r\n    # Here are functions which are general to all binary search trees\r\n\r\n    def __contains__(self, label: int) -> bool:\r\n        \"\"\"Search through the tree for label, returning True iff it is\r\n        found somewhere in the tree.\r\n        Guaranteed to run in O(log(n)) time.\r\n        \"\"\"\r\n        return self.search(label) is not None\r\n\r\n    def search(self, label: int) -> RedBlackTree | None:\r\n        \"\"\"Search through the tree for label, returning its node if\r\n        it's found, and None otherwise.\r\n        This method is guaranteed to run in O(log(n)) time.\r\n        \"\"\"\r\n        if self.label == label:\r\n            return self\r\n        elif self.label is not None and label > self.label:\r\n            if self.right is None:\r\n                return None\r\n            else:\r\n                return self.right.search(label)\r\n        elif self.left is None:\r\n            return None\r\n        else:\r\n            return self.left.search(label)\r\n\r\n    def floor(self, label: int) -> int | None:\r\n        \"\"\"Returns the largest element in this tree which is at most label.\r\n        This method is guaranteed to run in O(log(n)) time.\"\"\"\r\n        if self.label == label:\r\n            return self.label\r\n        elif self.label is not None and self.label > label:\r\n            if self.left:\r\n                return self.left.floor(label)\r\n            else:\r\n                return None\r\n        else:\r\n            if self.right:\r\n                attempt = self.right.floor(label)\r\n                if attempt is not None:\r\n                    return attempt\r\n            return self.label\r\n\r\n    def ceil(self, label: int) -> int | None:\r\n        \"\"\"Returns the smallest element in this tree which is at least label.\r\n        This method is guaranteed to run in O(log(n)) time.\r\n        \"\"\"\r\n        if self.label == label:\r\n            return self.label\r\n        elif self.label is not None and self.label < label:\r\n            if self.right:\r\n                return self.right.ceil(label)\r\n            else:\r\n                return None\r\n        else:\r\n            if self.left:\r\n                attempt = self.left.ceil(label)\r\n                if attempt is not None:\r\n                    return attempt\r\n            return self.label\r\n\r\n    def get_max(self) -> int | None:\r\n        \"\"\"Returns the largest element in this tree.\r\n        This method is guaranteed to run in O(log(n)) time.\r\n        \"\"\"\r\n        if self.right:\r\n            # Go as far right as possible\r\n            return self.right.get_max()\r\n        else:\r\n            return self.label\r\n\r\n    def get_min(self) -> int | None:\r\n        \"\"\"Returns the smallest element in this tree.\r\n        This method is guaranteed to run in O(log(n)) time.\r\n        \"\"\"\r\n        if self.left:\r\n            # Go as far left as possible\r\n            return self.left.get_min()\r\n        else:\r\n            return self.label\r\n\r\n    @property\r\n    def grandparent(self) -> RedBlackTree | None:\r\n        \"\"\"Get the current node's grandparent, or None if it doesn't exist.\"\"\"\r\n        if self.parent is None:\r\n            return None\r\n        else:\r\n            return self.parent.parent\r\n\r\n    @property\r\n    def sibling(self) -> RedBlackTree | None:\r\n        \"\"\"Get the current node's sibling, or None if it doesn't exist.\"\"\"\r\n        if self.parent is None:\r\n            return None\r\n        elif self.parent.left is self:\r\n            return self.parent.right\r\n        else:\r\n            return self.parent.left\r\n\r\n    def is_left(self) -> bool:\r\n        \"\"\"Returns true iff this node is the left child of its parent.\"\"\"\r\n        if self.parent is None:\r\n            return False\r\n        return self.parent.left is self\r\n\r\n    def is_right(self) -> bool:\r\n        \"\"\"Returns true iff this node is the right child of its parent.\"\"\"\r\n        if self.parent is None:\r\n            return False\r\n        return self.parent.right is self\r\n\r\n    def __bool__(self) -> bool:\r\n        return True\r\n\r\n    def __len__(self) -> int:\r\n        \"\"\"\r\n        Return the number of nodes in this tree.\r\n        \"\"\"\r\n        ln = 1\r\n        if self.left:\r\n            ln += len(self.left)\r\n        if self.right:\r\n            ln += len(self.right)\r\n        return ln\r\n\r\n    def preorder_traverse(self) -> Iterator[int | None]:\r\n        yield self.label\r\n        if self.left:\r\n            yield from self.left.preorder_traverse()\r\n        if self.right:\r\n            yield from self.right.preorder_traverse()\r\n\r\n    def inorder_traverse(self) -> Iterator[int | None]:\r\n        if self.left:\r\n            yield from self.left.inorder_traverse()\r\n        yield self.label\r\n        if self.right:\r\n            yield from self.right.inorder_traverse()\r\n\r\n    def postorder_traverse(self) -> Iterator[int | None]:\r\n        if self.left:\r\n            yield from self.left.postorder_traverse()\r\n        if self.right:\r\n            yield from self.right.postorder_traverse()\r\n        yield self.label\r\n\r\n    def __repr__(self) -> str:\r\n        from pprint import pformat\r\n\r\n        if self.left is None and self.right is None:\r\n            return f\"'{self.label} {(self.color and 'red') or 'blk'}'\"\r\n        return pformat(\r\n            {\r\n                f\"{self.label} {(self.color and 'red') or 'blk'}\": (\r\n                    self.left,\r\n                    self.right,\r\n                )\r\n            },\r\n            indent=1,\r\n        )\r\n\r\n    def __eq__(self, other: object) -> bool:\r\n        \"\"\"Test if two trees are equal.\"\"\"\r\n        if not isinstance(other, RedBlackTree):\r\n            return NotImplemented\r\n        if self.label == other.label:\r\n            return self.left == other.left and self.right == other.right\r\n        else:\r\n            return False\r\n\r\n\r\ndef color(node: RedBlackTree | None) -> int:\r\n    \"\"\"Returns the color of a node, allowing for None leaves.\"\"\"\r\n    if node is None:\r\n        return 0\r\n    else:\r\n        return node.color\r\n\r\n\r\n\"\"\"\r\nCode for testing the various\r\nfunctions of the red-black tree.\r\n\"\"\"\r\n\r\n\r\ndef test_rotations() -> bool:\r\n    \"\"\"Test that the rotate_left and rotate_right functions work.\"\"\"\r\n    # Make a tree to test on\r\n    tree = RedBlackTree(0)\r\n    tree.left = RedBlackTree(-10, parent=tree)\r\n    tree.right = RedBlackTree(10, parent=tree)\r\n    tree.left.left = RedBlackTree(-20, parent=tree.left)\r\n    tree.left.right = RedBlackTree(-5, parent=tree.left)\r\n    tree.right.left = RedBlackTree(5, parent=tree.right)\r\n    tree.right.right = RedBlackTree(20, parent=tree.right)\r\n    # Make the right rotation\r\n    left_rot = RedBlackTree(10)\r\n    left_rot.left = RedBlackTree(0, parent=left_rot)\r\n    left_rot.left.left = RedBlackTree(-10, parent=left_rot.left)\r\n    left_rot.left.right = RedBlackTree(5, parent=left_rot.left)\r\n    left_rot.left.left.left = RedBlackTree(-20, parent=left_rot.left.left)\r\n    left_rot.left.left.right = RedBlackTree(-5, parent=left_rot.left.left)\r\n    left_rot.right = RedBlackTree(20, parent=left_rot)\r\n    tree = tree.rotate_left()\r\n    if tree != left_rot:\r\n        return False\r\n    tree = tree.rotate_right()\r\n    tree = tree.rotate_right()\r\n    # Make the left rotation\r\n    right_rot = RedBlackTree(-10)\r\n    right_rot.left = RedBlackTree(-20, parent=right_rot)\r\n    right_rot.right = RedBlackTree(0, parent=right_rot)\r\n    right_rot.right.left = RedBlackTree(-5, parent=right_rot.right)\r\n    right_rot.right.right = RedBlackTree(10, parent=right_rot.right)\r\n    right_rot.right.right.left = RedBlackTree(5, parent=right_rot.right.right)\r\n    right_rot.right.right.right = RedBlackTree(20, parent=right_rot.right.right)\r\n    return tree == right_rot\r\n\r\n\r\ndef test_insertion_speed() -> bool:\r\n    \"\"\"Test that the tree balances inserts to O(log(n)) by doing a lot\r\n    of them.\r\n    \"\"\"\r\n    tree = RedBlackTree(-1)\r\n    for i in range(300000):\r\n        tree = tree.insert(i)\r\n    return True\r\n\r\n\r\ndef test_insert() -> bool:\r\n    \"\"\"Test the insert() method of the tree correctly balances, colors,\r\n    and inserts.\r\n    \"\"\"\r\n    tree = RedBlackTree(0)\r\n    tree.insert(8)\r\n    tree.insert(-8)\r\n    tree.insert(4)\r\n    tree.insert(12)\r\n    tree.insert(10)\r\n    tree.insert(11)\r\n    ans = RedBlackTree(0, 0)\r\n    ans.left = RedBlackTree(-8, 0, ans)\r\n    ans.right = RedBlackTree(8, 1, ans)\r\n    ans.right.left = RedBlackTree(4, 0, ans.right)\r\n    ans.right.right = RedBlackTree(11, 0, ans.right)\r\n    ans.right.right.left = RedBlackTree(10, 1, ans.right.right)\r\n    ans.right.right.right = RedBlackTree(12, 1, ans.right.right)\r\n    return tree == ans\r\n\r\n\r\ndef test_insert_and_search() -> bool:\r\n    \"\"\"Tests searching through the tree for values.\"\"\"\r\n    tree = RedBlackTree(0)\r\n    tree.insert(8)\r\n    tree.insert(-8)\r\n    tree.insert(4)\r\n    tree.insert(12)\r\n    tree.insert(10)\r\n    tree.insert(11)\r\n    if any(i in tree for i in (5, -6, -10, 13)):\r\n        # Found something not in there\r\n        return False\r\n    # Find all these things in there\r\n    return all(i in tree for i in (11, 12, -8, 0))\r\n\r\n\r\ndef test_insert_delete() -> bool:\r\n    \"\"\"Test the insert() and delete() method of the tree, verifying the\r\n    insertion and removal of elements, and the balancing of the tree.\r\n    \"\"\"\r\n    tree = RedBlackTree(0)\r\n    tree = tree.insert(-12)\r\n    tree = tree.insert(8)\r\n    tree = tree.insert(-8)\r\n    tree = tree.insert(15)\r\n    tree = tree.insert(4)\r\n    tree = tree.insert(12)\r\n    tree = tree.insert(10)\r\n    tree = tree.insert(9)\r\n    tree = tree.insert(11)\r\n    tree = tree.remove(15)\r\n    tree = tree.remove(-12)\r\n    tree = tree.remove(9)\r\n    if not tree.check_color_properties():\r\n        return False\r\n    return list(tree.inorder_traverse()) == [-8, 0, 4, 8, 10, 11, 12]\r\n\r\n\r\ndef test_floor_ceil() -> bool:\r\n    \"\"\"Tests the floor and ceiling functions in the tree.\"\"\"\r\n    tree = RedBlackTree(0)\r\n    tree.insert(-16)\r\n    tree.insert(16)\r\n    tree.insert(8)\r\n    tree.insert(24)\r\n    tree.insert(20)\r\n    tree.insert(22)\r\n    tuples = [(-20, None, -16), (-10, -16, 0), (8, 8, 8), (50, 24, None)]\r\n    for val, floor, ceil in tuples:\r\n        if tree.floor(val) != floor or tree.ceil(val) != ceil:\r\n            return False\r\n    return True\r\n\r\n\r\ndef test_min_max() -> bool:\r\n    \"\"\"Tests the min and max functions in the tree.\"\"\"\r\n    tree = RedBlackTree(0)\r\n    tree.insert(-16)\r\n    tree.insert(16)\r\n    tree.insert(8)\r\n    tree.insert(24)\r\n    tree.insert(20)\r\n    tree.insert(22)\r\n    return not (tree.get_max() != 22 or tree.get_min() != -16)\r\n\r\n\r\ndef test_tree_traversal() -> bool:\r\n    \"\"\"Tests the three different tree traversal functions.\"\"\"\r\n    tree = RedBlackTree(0)\r\n    tree = tree.insert(-16)\r\n    tree.insert(16)\r\n    tree.insert(8)\r\n    tree.insert(24)\r\n    tree.insert(20)\r\n    tree.insert(22)\r\n    if list(tree.inorder_traverse()) != [-16, 0, 8, 16, 20, 22, 24]:\r\n        return False\r\n    if list(tree.preorder_traverse()) != [0, -16, 16, 8, 22, 20, 24]:\r\n        return False\r\n    return list(tree.postorder_traverse()) == [-16, 8, 20, 24, 22, 16, 0]\r\n\r\n\r\ndef test_tree_chaining() -> bool:\r\n    \"\"\"Tests the three different tree chaining functions.\"\"\"\r\n    tree = RedBlackTree(0)\r\n    tree = tree.insert(-16).insert(16).insert(8).insert(24).insert(20).insert(22)\r\n    if list(tree.inorder_traverse()) != [-16, 0, 8, 16, 20, 22, 24]:\r\n        return False\r\n    if list(tree.preorder_traverse()) != [0, -16, 16, 8, 22, 20, 24]:\r\n        return False\r\n    return list(tree.postorder_traverse()) == [-16, 8, 20, 24, 22, 16, 0]\r\n\r\n\r\ndef print_results(msg: str, passes: bool) -> None:\r\n    print(str(msg), \"works!\" if passes else \"doesn't work :(\")\r\n\r\n\r\ndef pytests() -> None:\r\n    assert test_rotations()\r\n    assert test_insert()\r\n    assert test_insert_and_search()\r\n    assert test_insert_delete()\r\n    assert test_floor_ceil()\r\n    assert test_tree_traversal()\r\n    assert test_tree_chaining()\r\n\r\n\r\ndef main() -> None:\r\n    \"\"\"\r\n    >>> pytests()\r\n    \"\"\"\r\n    print_results(\"Rotating right and left\", test_rotations())\r\n    print_results(\"Inserting\", test_insert())\r\n    print_results(\"Searching\", test_insert_and_search())\r\n    print_results(\"Deleting\", test_insert_delete())\r\n    print_results(\"Floor and ceil\", test_floor_ceil())\r\n    print_results(\"Tree traversal\", test_tree_traversal())\r\n    print_results(\"Tree traversal\", test_tree_chaining())\r\n    print(\"Testing tree balancing...\")\r\n    print(\"This should only be a few seconds.\")\r\n    test_insertion_speed()\r\n    print(\"Done!\")\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    main()\r\n"
  },
  {
    "path": "data_structures/binary_tree/segment_tree.py",
    "content": "import math\n\n\nclass SegmentTree:\n    def __init__(self, a):\n        self.A = a\n        self.N = len(self.A)\n        self.st = [0] * (\n            4 * self.N\n        )  # approximate the overall size of segment tree with array N\n        if self.N:\n            self.build(1, 0, self.N - 1)\n\n    def left(self, idx):\n        \"\"\"\n        Returns the left child index for a given index in a binary tree.\n\n        >>> s = SegmentTree([1, 2, 3])\n        >>> s.left(1)\n        2\n        >>> s.left(2)\n        4\n        \"\"\"\n        return idx * 2\n\n    def right(self, idx):\n        \"\"\"\n        Returns the right child index for a given index in a binary tree.\n\n        >>> s = SegmentTree([1, 2, 3])\n        >>> s.right(1)\n        3\n        >>> s.right(2)\n        5\n        \"\"\"\n        return idx * 2 + 1\n\n    def build(self, idx, left, right):\n        if left == right:\n            self.st[idx] = self.A[left]\n        else:\n            mid = (left + right) // 2\n            self.build(self.left(idx), left, mid)\n            self.build(self.right(idx), mid + 1, right)\n            self.st[idx] = max(self.st[self.left(idx)], self.st[self.right(idx)])\n\n    def update(self, a, b, val):\n        \"\"\"\n        Update the values in the segment tree in the range [a,b] with the given value.\n\n        >>> s = SegmentTree([1, 2, 3, 4, 5])\n        >>> s.update(2, 4, 10)\n        True\n        >>> s.query(1, 5)\n        10\n        \"\"\"\n        return self.update_recursive(1, 0, self.N - 1, a - 1, b - 1, val)\n\n    def update_recursive(self, idx, left, right, a, b, val):\n        \"\"\"\n        update(1, 1, N, a, b, v) for update val v to [a,b]\n        \"\"\"\n        if right < a or left > b:\n            return True\n        if left == right:\n            self.st[idx] = val\n            return True\n        mid = (left + right) // 2\n        self.update_recursive(self.left(idx), left, mid, a, b, val)\n        self.update_recursive(self.right(idx), mid + 1, right, a, b, val)\n        self.st[idx] = max(self.st[self.left(idx)], self.st[self.right(idx)])\n        return True\n\n    def query(self, a, b):\n        \"\"\"\n        Query the maximum value in the range [a,b].\n\n        >>> s = SegmentTree([1, 2, 3, 4, 5])\n        >>> s.query(1, 3)\n        3\n        >>> s.query(1, 5)\n        5\n        \"\"\"\n        return self.query_recursive(1, 0, self.N - 1, a - 1, b - 1)\n\n    def query_recursive(self, idx, left, right, a, b):\n        \"\"\"\n        query(1, 1, N, a, b) for query max of [a,b]\n        \"\"\"\n        if right < a or left > b:\n            return -math.inf\n        if left >= a and right <= b:\n            return self.st[idx]\n        mid = (left + right) // 2\n        q1 = self.query_recursive(self.left(idx), left, mid, a, b)\n        q2 = self.query_recursive(self.right(idx), mid + 1, right, a, b)\n        return max(q1, q2)\n\n    def show_data(self):\n        show_list = []\n        for i in range(1, self.N + 1):\n            show_list += [self.query(i, i)]\n        print(show_list)\n\n\nif __name__ == \"__main__\":\n    A = [1, 2, -4, 7, 3, -5, 6, 11, -20, 9, 14, 15, 5, 2, -8]\n    N = 15\n    segt = SegmentTree(A)\n    print(segt.query(4, 6))\n    print(segt.query(7, 11))\n    print(segt.query(7, 12))\n    segt.update(1, 3, 111)\n    print(segt.query(1, 15))\n    segt.update(7, 8, 235)\n    segt.show_data()\n"
  },
  {
    "path": "data_structures/binary_tree/segment_tree_other.py",
    "content": "\"\"\"\nSegment_tree creates a segment tree with a given array and function,\nallowing queries to be done later in log(N) time\nfunction takes 2 values and returns a same type value\n\"\"\"\n\nfrom collections.abc import Sequence\nfrom queue import Queue\n\n\nclass SegmentTreeNode:\n    def __init__(self, start, end, val, left=None, right=None):\n        self.start = start\n        self.end = end\n        self.val = val\n        self.mid = (start + end) // 2\n        self.left = left\n        self.right = right\n\n    def __repr__(self):\n        return f\"SegmentTreeNode(start={self.start}, end={self.end}, val={self.val})\"\n\n\nclass SegmentTree:\n    \"\"\"\n    >>> import operator\n    >>> num_arr = SegmentTree([2, 1, 5, 3, 4], operator.add)\n    >>> tuple(num_arr.traverse())  # doctest: +NORMALIZE_WHITESPACE\n    (SegmentTreeNode(start=0, end=4, val=15),\n        SegmentTreeNode(start=0, end=2, val=8),\n        SegmentTreeNode(start=3, end=4, val=7),\n        SegmentTreeNode(start=0, end=1, val=3),\n        SegmentTreeNode(start=2, end=2, val=5),\n        SegmentTreeNode(start=3, end=3, val=3),\n        SegmentTreeNode(start=4, end=4, val=4),\n        SegmentTreeNode(start=0, end=0, val=2),\n        SegmentTreeNode(start=1, end=1, val=1))\n    >>>\n    >>> num_arr.update(1, 5)\n    >>> tuple(num_arr.traverse())  # doctest: +NORMALIZE_WHITESPACE\n    (SegmentTreeNode(start=0, end=4, val=19),\n        SegmentTreeNode(start=0, end=2, val=12),\n        SegmentTreeNode(start=3, end=4, val=7),\n        SegmentTreeNode(start=0, end=1, val=7),\n        SegmentTreeNode(start=2, end=2, val=5),\n        SegmentTreeNode(start=3, end=3, val=3),\n        SegmentTreeNode(start=4, end=4, val=4),\n        SegmentTreeNode(start=0, end=0, val=2),\n        SegmentTreeNode(start=1, end=1, val=5))\n    >>>\n    >>> num_arr.query_range(3, 4)\n    7\n    >>> num_arr.query_range(2, 2)\n    5\n    >>> num_arr.query_range(1, 3)\n    13\n    >>>\n    >>> max_arr = SegmentTree([2, 1, 5, 3, 4], max)\n    >>> for node in max_arr.traverse():\n    ...     print(node)\n    ...\n    SegmentTreeNode(start=0, end=4, val=5)\n    SegmentTreeNode(start=0, end=2, val=5)\n    SegmentTreeNode(start=3, end=4, val=4)\n    SegmentTreeNode(start=0, end=1, val=2)\n    SegmentTreeNode(start=2, end=2, val=5)\n    SegmentTreeNode(start=3, end=3, val=3)\n    SegmentTreeNode(start=4, end=4, val=4)\n    SegmentTreeNode(start=0, end=0, val=2)\n    SegmentTreeNode(start=1, end=1, val=1)\n    >>>\n    >>> max_arr.update(1, 5)\n    >>> for node in max_arr.traverse():\n    ...     print(node)\n    ...\n    SegmentTreeNode(start=0, end=4, val=5)\n    SegmentTreeNode(start=0, end=2, val=5)\n    SegmentTreeNode(start=3, end=4, val=4)\n    SegmentTreeNode(start=0, end=1, val=5)\n    SegmentTreeNode(start=2, end=2, val=5)\n    SegmentTreeNode(start=3, end=3, val=3)\n    SegmentTreeNode(start=4, end=4, val=4)\n    SegmentTreeNode(start=0, end=0, val=2)\n    SegmentTreeNode(start=1, end=1, val=5)\n    >>>\n    >>> max_arr.query_range(3, 4)\n    4\n    >>> max_arr.query_range(2, 2)\n    5\n    >>> max_arr.query_range(1, 3)\n    5\n    >>>\n    >>> min_arr = SegmentTree([2, 1, 5, 3, 4], min)\n    >>> for node in min_arr.traverse():\n    ...     print(node)\n    ...\n    SegmentTreeNode(start=0, end=4, val=1)\n    SegmentTreeNode(start=0, end=2, val=1)\n    SegmentTreeNode(start=3, end=4, val=3)\n    SegmentTreeNode(start=0, end=1, val=1)\n    SegmentTreeNode(start=2, end=2, val=5)\n    SegmentTreeNode(start=3, end=3, val=3)\n    SegmentTreeNode(start=4, end=4, val=4)\n    SegmentTreeNode(start=0, end=0, val=2)\n    SegmentTreeNode(start=1, end=1, val=1)\n    >>>\n    >>> min_arr.update(1, 5)\n    >>> for node in min_arr.traverse():\n    ...     print(node)\n    ...\n    SegmentTreeNode(start=0, end=4, val=2)\n    SegmentTreeNode(start=0, end=2, val=2)\n    SegmentTreeNode(start=3, end=4, val=3)\n    SegmentTreeNode(start=0, end=1, val=2)\n    SegmentTreeNode(start=2, end=2, val=5)\n    SegmentTreeNode(start=3, end=3, val=3)\n    SegmentTreeNode(start=4, end=4, val=4)\n    SegmentTreeNode(start=0, end=0, val=2)\n    SegmentTreeNode(start=1, end=1, val=5)\n    >>>\n    >>> min_arr.query_range(3, 4)\n    3\n    >>> min_arr.query_range(2, 2)\n    5\n    >>> min_arr.query_range(1, 3)\n    3\n    >>>\n    \"\"\"\n\n    def __init__(self, collection: Sequence, function):\n        self.collection = collection\n        self.fn = function\n        if self.collection:\n            self.root = self._build_tree(0, len(collection) - 1)\n\n    def update(self, i, val):\n        \"\"\"\n        Update an element in log(N) time\n        :param i: position to be update\n        :param val: new value\n        >>> import operator\n        >>> num_arr = SegmentTree([2, 1, 5, 3, 4], operator.add)\n        >>> num_arr.update(1, 5)\n        >>> num_arr.query_range(1, 3)\n        13\n        \"\"\"\n        self._update_tree(self.root, i, val)\n\n    def query_range(self, i, j):\n        \"\"\"\n        Get range query value in log(N) time\n        :param i: left element index\n        :param j: right element index\n        :return: element combined in the range [i, j]\n        >>> import operator\n        >>> num_arr = SegmentTree([2, 1, 5, 3, 4], operator.add)\n        >>> num_arr.update(1, 5)\n        >>> num_arr.query_range(3, 4)\n        7\n        >>> num_arr.query_range(2, 2)\n        5\n        >>> num_arr.query_range(1, 3)\n        13\n        >>>\n        \"\"\"\n        return self._query_range(self.root, i, j)\n\n    def _build_tree(self, start, end):\n        if start == end:\n            return SegmentTreeNode(start, end, self.collection[start])\n        mid = (start + end) // 2\n        left = self._build_tree(start, mid)\n        right = self._build_tree(mid + 1, end)\n        return SegmentTreeNode(start, end, self.fn(left.val, right.val), left, right)\n\n    def _update_tree(self, node, i, val):\n        if node.start == i and node.end == i:\n            node.val = val\n            return\n        if i <= node.mid:\n            self._update_tree(node.left, i, val)\n        else:\n            self._update_tree(node.right, i, val)\n        node.val = self.fn(node.left.val, node.right.val)\n\n    def _query_range(self, node, i, j):\n        if node.start == i and node.end == j:\n            return node.val\n\n        if i <= node.mid:\n            if j <= node.mid:\n                # range in left child tree\n                return self._query_range(node.left, i, j)\n            else:\n                # range in left child tree and right child tree\n                return self.fn(\n                    self._query_range(node.left, i, node.mid),\n                    self._query_range(node.right, node.mid + 1, j),\n                )\n        else:\n            # range in right child tree\n            return self._query_range(node.right, i, j)\n\n    def traverse(self):\n        if self.root is not None:\n            queue = Queue()\n            queue.put(self.root)\n            while not queue.empty():\n                node = queue.get()\n                yield node\n\n                if node.left is not None:\n                    queue.put(node.left)\n\n                if node.right is not None:\n                    queue.put(node.right)\n\n\nif __name__ == \"__main__\":\n    import operator\n\n    for fn in [operator.add, max, min]:\n        print(\"*\" * 50)\n        arr = SegmentTree([2, 1, 5, 3, 4], fn)\n        for node in arr.traverse():\n            print(node)\n        print()\n\n        arr.update(1, 5)\n        for node in arr.traverse():\n            print(node)\n        print()\n\n        print(arr.query_range(3, 4))  # 7\n        print(arr.query_range(2, 2))  # 5\n        print(arr.query_range(1, 3))  # 13\n        print()\n"
  },
  {
    "path": "data_structures/binary_tree/serialize_deserialize_binary_tree.py",
    "content": "from __future__ import annotations\n\nfrom collections.abc import Iterator\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass TreeNode:\n    \"\"\"\n    A binary tree node has a value, left child, and right child.\n\n    Props:\n        value: The value of the node.\n        left: The left child of the node.\n        right: The right child of the node.\n    \"\"\"\n\n    value: int = 0\n    left: TreeNode | None = None\n    right: TreeNode | None = None\n\n    def __post_init__(self):\n        if not isinstance(self.value, int):\n            raise TypeError(\"Value must be an integer.\")\n\n    def __iter__(self) -> Iterator[TreeNode]:\n        \"\"\"\n        Iterate through the tree in preorder.\n\n        Returns:\n            An iterator of the tree nodes.\n\n        >>> list(TreeNode(1))\n        [1,null,null]\n        >>> tuple(TreeNode(1, TreeNode(2), TreeNode(3)))\n        (1,2,null,null,3,null,null, 2,null,null, 3,null,null)\n        \"\"\"\n        yield self\n        yield from self.left or ()\n        yield from self.right or ()\n\n    def __len__(self) -> int:\n        \"\"\"\n        Count the number of nodes in the tree.\n\n        Returns:\n            The number of nodes in the tree.\n\n        >>> len(TreeNode(1))\n        1\n        >>> len(TreeNode(1, TreeNode(2), TreeNode(3)))\n        3\n        \"\"\"\n        return sum(1 for _ in self)\n\n    def __repr__(self) -> str:\n        \"\"\"\n        Represent the tree as a string.\n\n        Returns:\n            A string representation of the tree.\n\n        >>> repr(TreeNode(1))\n        '1,null,null'\n        >>> repr(TreeNode(1, TreeNode(2), TreeNode(3)))\n        '1,2,null,null,3,null,null'\n        >>> repr(TreeNode(1, TreeNode(2), TreeNode(3, TreeNode(4), TreeNode(5))))\n        '1,2,null,null,3,4,null,null,5,null,null'\n        \"\"\"\n        return f\"{self.value},{self.left!r},{self.right!r}\".replace(\"None\", \"null\")\n\n    @classmethod\n    def five_tree(cls) -> TreeNode:\n        \"\"\"\n        >>> repr(TreeNode.five_tree())\n        '1,2,null,null,3,4,null,null,5,null,null'\n        \"\"\"\n        root = TreeNode(1)\n        root.left = TreeNode(2)\n        root.right = TreeNode(3)\n        root.right.left = TreeNode(4)\n        root.right.right = TreeNode(5)\n        return root\n\n\ndef deserialize(data: str) -> TreeNode | None:\n    \"\"\"\n    Deserialize a string to a binary tree.\n\n    Args:\n        data(str): The serialized string.\n\n    Returns:\n        The root of the binary tree.\n\n    >>> root = TreeNode.five_tree()\n    >>> serialzed_data = repr(root)\n    >>> deserialized = deserialize(serialzed_data)\n    >>> root == deserialized\n    True\n    >>> root is deserialized  # two separate trees\n    False\n    >>> root.right.right.value = 6\n    >>> root == deserialized\n    False\n    >>> serialzed_data = repr(root)\n    >>> deserialized = deserialize(serialzed_data)\n    >>> root == deserialized\n    True\n    >>> deserialize(\"\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Data cannot be empty.\n    \"\"\"\n\n    if not data:\n        raise ValueError(\"Data cannot be empty.\")\n\n    # Split the serialized string by a comma to get node values\n    nodes = data.split(\",\")\n\n    def build_tree() -> TreeNode | None:\n        # Get the next value from the list\n        value = nodes.pop(0)\n\n        if value == \"null\":\n            return None\n\n        node = TreeNode(int(value))\n        node.left = build_tree()  # Recursively build left subtree\n        node.right = build_tree()  # Recursively build right subtree\n        return node\n\n    return build_tree()\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/binary_tree/symmetric_tree.py",
    "content": "\"\"\"\nGiven the root of a binary tree, check whether it is a mirror of itself\n(i.e., symmetric around its center).\n\nLeetcode reference: https://leetcode.com/problems/symmetric-tree/\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass Node:\n    \"\"\"\n    A Node represents an element of a binary tree, which contains:\n\n    Attributes:\n    data: The value stored in the node (int).\n    left: Pointer to the left child node (Node or None).\n    right: Pointer to the right child node (Node or None).\n\n    Example:\n    >>> node = Node(1, Node(2), Node(3))\n    >>> node.data\n    1\n    >>> node.left.data\n    2\n    >>> node.right.data\n    3\n    \"\"\"\n\n    data: int\n    left: Node | None = None\n    right: Node | None = None\n\n\ndef make_symmetric_tree() -> Node:\n    r\"\"\"\n    Create a symmetric tree for testing.\n\n    The tree looks like this:\n           1\n         /   \\\n        2     2\n      / \\    / \\\n     3   4   4  3\n\n    Returns:\n    Node: Root node of a symmetric tree.\n\n    Example:\n    >>> tree = make_symmetric_tree()\n    >>> tree.data\n    1\n    >>> tree.left.data == tree.right.data\n    True\n    >>> tree.left.left.data == tree.right.right.data\n    True\n    \"\"\"\n    root = Node(1)\n    root.left = Node(2)\n    root.right = Node(2)\n    root.left.left = Node(3)\n    root.left.right = Node(4)\n    root.right.left = Node(4)\n    root.right.right = Node(3)\n    return root\n\n\ndef make_asymmetric_tree() -> Node:\n    r\"\"\"\n    Create an asymmetric tree for testing.\n\n    The tree looks like this:\n           1\n         /   \\\n        2     2\n      / \\    / \\\n     3   4   3  4\n\n    Returns:\n    Node: Root node of an asymmetric tree.\n\n    Example:\n    >>> tree = make_asymmetric_tree()\n    >>> tree.data\n    1\n    >>> tree.left.data == tree.right.data\n    True\n    >>> tree.left.left.data == tree.right.right.data\n    False\n    \"\"\"\n    root = Node(1)\n    root.left = Node(2)\n    root.right = Node(2)\n    root.left.left = Node(3)\n    root.left.right = Node(4)\n    root.right.left = Node(3)\n    root.right.right = Node(4)\n    return root\n\n\ndef is_symmetric_tree(tree: Node) -> bool:\n    \"\"\"\n    Check if a binary tree is symmetric (i.e., a mirror of itself).\n\n    Parameters:\n    tree: The root node of the binary tree.\n\n    Returns:\n    bool: True if the tree is symmetric, False otherwise.\n\n    Example:\n    >>> is_symmetric_tree(make_symmetric_tree())\n    True\n    >>> is_symmetric_tree(make_asymmetric_tree())\n    False\n    \"\"\"\n    if tree:\n        return is_mirror(tree.left, tree.right)\n    return True  # An empty tree is considered symmetric.\n\n\ndef is_mirror(left: Node | None, right: Node | None) -> bool:\n    \"\"\"\n    Check if two subtrees are mirror images of each other.\n\n    Parameters:\n    left: The root node of the left subtree.\n    right: The root node of the right subtree.\n\n    Returns:\n    bool: True if the two subtrees are mirrors of each other, False otherwise.\n\n    Example:\n    >>> tree1 = make_symmetric_tree()\n    >>> is_mirror(tree1.left, tree1.right)\n    True\n    >>> tree2 = make_asymmetric_tree()\n    >>> is_mirror(tree2.left, tree2.right)\n    False\n    \"\"\"\n    if left is None and right is None:\n        # Both sides are empty, which is symmetric.\n        return True\n    if left is None or right is None:\n        # One side is empty while the other is not, which is not symmetric.\n        return False\n    if left.data == right.data:\n        # The values match, so check the subtrees recursively.\n        return is_mirror(left.left, right.right) and is_mirror(left.right, right.left)\n    return False\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "data_structures/binary_tree/treap.py",
    "content": "from __future__ import annotations\n\nfrom random import random\n\n\nclass Node:\n    \"\"\"\n    Treap's node\n    Treap is a binary tree by value and heap by priority\n    \"\"\"\n\n    def __init__(self, value: int | None = None):\n        self.value = value\n        self.prior = random()\n        self.left: Node | None = None\n        self.right: Node | None = None\n\n    def __repr__(self) -> str:\n        from pprint import pformat\n\n        if self.left is None and self.right is None:\n            return f\"'{self.value}: {self.prior:.5}'\"\n        else:\n            return pformat(\n                {f\"{self.value}: {self.prior:.5}\": (self.left, self.right)}, indent=1\n            )\n\n    def __str__(self) -> str:\n        value = str(self.value) + \" \"\n        left = str(self.left or \"\")\n        right = str(self.right or \"\")\n        return value + left + right\n\n\ndef split(root: Node | None, value: int) -> tuple[Node | None, Node | None]:\n    \"\"\"\n    We split current tree into 2 trees with value:\n\n    Left tree contains all values less than split value.\n    Right tree contains all values greater or equal, than split value\n    \"\"\"\n    if root is None or root.value is None:  # None tree is split into 2 Nones\n        return None, None\n    elif value < root.value:\n        \"\"\"\n        Right tree's root will be current node.\n        Now we split(with the same value) current node's left son\n        Left tree: left part of that split\n        Right tree's left son: right part of that split\n        \"\"\"\n        left, root.left = split(root.left, value)\n        return left, root\n    else:\n        \"\"\"\n        Just symmetric to previous case\n        \"\"\"\n        root.right, right = split(root.right, value)\n        return root, right\n\n\ndef merge(left: Node | None, right: Node | None) -> Node | None:\n    \"\"\"\n    We merge 2 trees into one.\n    Note: all left tree's values must be less than all right tree's\n    \"\"\"\n    if (not left) or (not right):  # If one node is None, return the other\n        return left or right\n    elif left.prior < right.prior:\n        \"\"\"\n        Left will be root because it has more priority\n        Now we need to merge left's right son and right tree\n        \"\"\"\n        left.right = merge(left.right, right)\n        return left\n    else:\n        \"\"\"\n        Symmetric as well\n        \"\"\"\n        right.left = merge(left, right.left)\n        return right\n\n\ndef insert(root: Node | None, value: int) -> Node | None:\n    \"\"\"\n    Insert element\n\n    Split current tree with a value into left, right,\n    Insert new node into the middle\n    Merge left, node, right into root\n    \"\"\"\n    node = Node(value)\n    left, right = split(root, value)\n    return merge(merge(left, node), right)\n\n\ndef erase(root: Node | None, value: int) -> Node | None:\n    \"\"\"\n    Erase element\n\n    Split all nodes with values less into left,\n    Split all nodes with values greater into right.\n    Merge left, right\n    \"\"\"\n    left, right = split(root, value - 1)\n    _, right = split(right, value)\n    return merge(left, right)\n\n\ndef inorder(root: Node | None) -> None:\n    \"\"\"\n    Just recursive print of a tree\n    \"\"\"\n    if not root:  # None\n        return\n    else:\n        inorder(root.left)\n        print(root.value, end=\",\")\n        inorder(root.right)\n\n\ndef interact_treap(root: Node | None, args: str) -> Node | None:\n    \"\"\"\n    Commands:\n    + value to add value into treap\n    - value to erase all nodes with value\n\n        >>> root = interact_treap(None, \"+1\")\n        >>> inorder(root)\n        1,\n        >>> root = interact_treap(root, \"+3 +5 +17 +19 +2 +16 +4 +0\")\n        >>> inorder(root)\n        0,1,2,3,4,5,16,17,19,\n        >>> root = interact_treap(root, \"+4 +4 +4\")\n        >>> inorder(root)\n        0,1,2,3,4,4,4,4,5,16,17,19,\n        >>> root = interact_treap(root, \"-0\")\n        >>> inorder(root)\n        1,2,3,4,4,4,4,5,16,17,19,\n        >>> root = interact_treap(root, \"-4\")\n        >>> inorder(root)\n        1,2,3,5,16,17,19,\n        >>> root = interact_treap(root, \"=0\")\n        Unknown command\n    \"\"\"\n    for arg in args.split():\n        if arg[0] == \"+\":\n            root = insert(root, int(arg[1:]))\n\n        elif arg[0] == \"-\":\n            root = erase(root, int(arg[1:]))\n\n        else:\n            print(\"Unknown command\")\n\n    return root\n\n\ndef main() -> None:\n    \"\"\"After each command, program prints treap\"\"\"\n    root = None\n    print(\n        \"enter numbers to create a tree, + value to add value into treap, \"\n        \"- value to erase all nodes with value. 'q' to quit. \"\n    )\n\n    args = input()\n    while args != \"q\":\n        root = interact_treap(root, args)\n        print(root)\n        args = input()\n\n    print(\"good by!\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    main()\n"
  },
  {
    "path": "data_structures/binary_tree/wavelet_tree.py",
    "content": "\"\"\"\nWavelet tree is a data-structure designed to efficiently answer various range queries\nfor arrays. Wavelets trees are different from other binary trees in the sense that\nthe nodes are split based on the actual values of the elements and not on indices,\nsuch as the with segment trees or fenwick trees. You can read more about them here:\n1. https://users.dcc.uchile.cl/~jperez/papers/ioiconf16.pdf\n2. https://www.youtube.com/watch?v=4aSv9PcecDw&t=811s\n3. https://www.youtube.com/watch?v=CybAgVF-MMc&t=1178s\n\"\"\"\n\nfrom __future__ import annotations\n\ntest_array = [2, 1, 4, 5, 6, 0, 8, 9, 1, 2, 0, 6, 4, 2, 0, 6, 5, 3, 2, 7]\n\n\nclass Node:\n    def __init__(self, length: int) -> None:\n        self.minn: int = -1\n        self.maxx: int = -1\n        self.map_left: list[int] = [-1] * length\n        self.left: Node | None = None\n        self.right: Node | None = None\n\n    def __repr__(self) -> str:\n        \"\"\"\n        >>> node = Node(length=27)\n        >>> repr(node)\n        'Node(min_value=-1 max_value=-1)'\n        >>> repr(node) == str(node)\n        True\n        \"\"\"\n        return f\"Node(min_value={self.minn} max_value={self.maxx})\"\n\n\ndef build_tree(arr: list[int]) -> Node | None:\n    \"\"\"\n    Builds the tree for arr and returns the root\n    of the constructed tree\n\n    >>> build_tree(test_array)\n    Node(min_value=0 max_value=9)\n    \"\"\"\n    root = Node(len(arr))\n    root.minn, root.maxx = min(arr), max(arr)\n    # Leaf node case where the node contains only one unique value\n    if root.minn == root.maxx:\n        return root\n    \"\"\"\n    Take the mean of min and max element of arr as the pivot and\n    partition arr into left_arr and right_arr with all elements <= pivot in the\n    left_arr and the rest in right_arr, maintaining the order of the elements,\n    then recursively build trees for left_arr and right_arr\n    \"\"\"\n    pivot = (root.minn + root.maxx) // 2\n\n    left_arr: list[int] = []\n    right_arr: list[int] = []\n\n    for index, num in enumerate(arr):\n        if num <= pivot:\n            left_arr.append(num)\n        else:\n            right_arr.append(num)\n        root.map_left[index] = len(left_arr)\n    root.left = build_tree(left_arr)\n    root.right = build_tree(right_arr)\n    return root\n\n\ndef rank_till_index(node: Node | None, num: int, index: int) -> int:\n    \"\"\"\n    Returns the number of occurrences of num in interval [0, index] in the list\n\n    >>> root = build_tree(test_array)\n    >>> rank_till_index(root, 6, 6)\n    1\n    >>> rank_till_index(root, 2, 0)\n    1\n    >>> rank_till_index(root, 1, 10)\n    2\n    >>> rank_till_index(root, 17, 7)\n    0\n    >>> rank_till_index(root, 0, 9)\n    1\n    \"\"\"\n    if index < 0 or node is None:\n        return 0\n    # Leaf node cases\n    if node.minn == node.maxx:\n        return index + 1 if node.minn == num else 0\n    pivot = (node.minn + node.maxx) // 2\n    if num <= pivot:\n        # go the left subtree and map index to the left subtree\n        return rank_till_index(node.left, num, node.map_left[index] - 1)\n    else:\n        # go to the right subtree and map index to the right subtree\n        return rank_till_index(node.right, num, index - node.map_left[index])\n\n\ndef rank(node: Node | None, num: int, start: int, end: int) -> int:\n    \"\"\"\n    Returns the number of occurrences of num in interval [start, end] in the list\n\n    >>> root = build_tree(test_array)\n    >>> rank(root, 6, 3, 13)\n    2\n    >>> rank(root, 2, 0, 19)\n    4\n    >>> rank(root, 9, 2 ,2)\n    0\n    >>> rank(root, 0, 5, 10)\n    2\n    \"\"\"\n    if start > end:\n        return 0\n    rank_till_end = rank_till_index(node, num, end)\n    rank_before_start = rank_till_index(node, num, start - 1)\n    return rank_till_end - rank_before_start\n\n\ndef quantile(node: Node | None, index: int, start: int, end: int) -> int:\n    \"\"\"\n    Returns the index'th smallest element in interval [start, end] in the list\n    index is 0-indexed\n\n    >>> root = build_tree(test_array)\n    >>> quantile(root, 2, 2, 5)\n    5\n    >>> quantile(root, 5, 2, 13)\n    4\n    >>> quantile(root, 0, 6, 6)\n    8\n    >>> quantile(root, 4, 2, 5)\n    -1\n    \"\"\"\n    if index > (end - start) or start > end or node is None:\n        return -1\n    # Leaf node case\n    if node.minn == node.maxx:\n        return node.minn\n    # Number of elements in the left subtree in interval [start, end]\n    num_elements_in_left_tree = node.map_left[end] - (\n        node.map_left[start - 1] if start else 0\n    )\n    if num_elements_in_left_tree > index:\n        return quantile(\n            node.left,\n            index,\n            (node.map_left[start - 1] if start else 0),\n            node.map_left[end] - 1,\n        )\n    else:\n        return quantile(\n            node.right,\n            index - num_elements_in_left_tree,\n            start - (node.map_left[start - 1] if start else 0),\n            end - node.map_left[end],\n        )\n\n\ndef range_counting(\n    node: Node | None, start: int, end: int, start_num: int, end_num: int\n) -> int:\n    \"\"\"\n    Returns the number of elements in range [start_num, end_num]\n    in interval [start, end] in the list\n\n    >>> root = build_tree(test_array)\n    >>> range_counting(root, 1, 10, 3, 7)\n    3\n    >>> range_counting(root, 2, 2, 1, 4)\n    1\n    >>> range_counting(root, 0, 19, 0, 100)\n    20\n    >>> range_counting(root, 1, 0, 1, 100)\n    0\n    >>> range_counting(root, 0, 17, 100, 1)\n    0\n    \"\"\"\n    if (\n        start > end\n        or node is None\n        or start_num > end_num\n        or node.minn > end_num\n        or node.maxx < start_num\n    ):\n        return 0\n    if start_num <= node.minn and node.maxx <= end_num:\n        return end - start + 1\n    left = range_counting(\n        node.left,\n        (node.map_left[start - 1] if start else 0),\n        node.map_left[end] - 1,\n        start_num,\n        end_num,\n    )\n    right = range_counting(\n        node.right,\n        start - (node.map_left[start - 1] if start else 0),\n        end - node.map_left[end],\n        start_num,\n        end_num,\n    )\n    return left + right\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/disjoint_set/__init__.py",
    "content": ""
  },
  {
    "path": "data_structures/disjoint_set/alternate_disjoint_set.py",
    "content": "\"\"\"\nImplements a disjoint set using Lists and some added heuristics for efficiency\nUnion by Rank Heuristic and Path Compression\n\"\"\"\n\n\nclass DisjointSet:\n    def __init__(self, set_counts: list) -> None:\n        \"\"\"\n        Initialize with a list of the number of items in each set\n        and with rank = 1 for each set\n        \"\"\"\n        self.set_counts = set_counts\n        self.max_set = max(set_counts)\n        num_sets = len(set_counts)\n        self.ranks = [1] * num_sets\n        self.parents = list(range(num_sets))\n\n    def merge(self, src: int, dst: int) -> bool:\n        \"\"\"\n        Merge two sets together using Union by rank heuristic\n        Return True if successful\n        Merge two disjoint sets\n        >>> A = DisjointSet([1, 1, 1])\n        >>> A.merge(1, 2)\n        True\n        >>> A.merge(0, 2)\n        True\n        >>> A.merge(0, 1)\n        False\n        \"\"\"\n        src_parent = self.get_parent(src)\n        dst_parent = self.get_parent(dst)\n\n        if src_parent == dst_parent:\n            return False\n\n        if self.ranks[dst_parent] >= self.ranks[src_parent]:\n            self.set_counts[dst_parent] += self.set_counts[src_parent]\n            self.set_counts[src_parent] = 0\n            self.parents[src_parent] = dst_parent\n            if self.ranks[dst_parent] == self.ranks[src_parent]:\n                self.ranks[dst_parent] += 1\n            joined_set_size = self.set_counts[dst_parent]\n        else:\n            self.set_counts[src_parent] += self.set_counts[dst_parent]\n            self.set_counts[dst_parent] = 0\n            self.parents[dst_parent] = src_parent\n            joined_set_size = self.set_counts[src_parent]\n\n        self.max_set = max(self.max_set, joined_set_size)\n        return True\n\n    def get_parent(self, disj_set: int) -> int:\n        \"\"\"\n        Find the Parent of a given set\n        >>> A = DisjointSet([1, 1, 1])\n        >>> A.merge(1, 2)\n        True\n        >>> A.get_parent(0)\n        0\n        >>> A.get_parent(1)\n        2\n        \"\"\"\n        if self.parents[disj_set] == disj_set:\n            return disj_set\n        self.parents[disj_set] = self.get_parent(self.parents[disj_set])\n        return self.parents[disj_set]\n"
  },
  {
    "path": "data_structures/disjoint_set/disjoint_set.py",
    "content": "\"\"\"\r\nDisjoint set.\r\nReference: https://en.wikipedia.org/wiki/Disjoint-set_data_structure\r\n\"\"\"\r\n\r\n\r\nclass Node:\r\n    def __init__(self, data: int) -> None:\r\n        self.data = data\r\n        self.rank: int\r\n        self.parent: Node\r\n\r\n\r\ndef make_set(x: Node) -> None:\r\n    \"\"\"\r\n    Make x as a set.\r\n    \"\"\"\r\n    # rank is the distance from x to its' parent\r\n    # root's rank is 0\r\n    x.rank = 0\r\n    x.parent = x\r\n\r\n\r\ndef union_set(x: Node, y: Node) -> None:\r\n    \"\"\"\r\n    Union of two sets.\r\n    set with bigger rank should be parent, so that the\r\n    disjoint set tree will be more flat.\r\n    \"\"\"\r\n    x, y = find_set(x), find_set(y)\r\n    if x == y:\r\n        return\r\n\r\n    elif x.rank > y.rank:\r\n        y.parent = x\r\n    else:\r\n        x.parent = y\r\n        if x.rank == y.rank:\r\n            y.rank += 1\r\n\r\n\r\ndef find_set(x: Node) -> Node:\r\n    \"\"\"\r\n    Return the parent of x\r\n    \"\"\"\r\n    if x != x.parent:\r\n        x.parent = find_set(x.parent)\r\n    return x.parent\r\n\r\n\r\ndef find_python_set(node: Node) -> set:\r\n    \"\"\"\r\n    Return a Python Standard Library set that contains i.\r\n    \"\"\"\r\n    sets = ({0, 1, 2}, {3, 4, 5})\r\n    for s in sets:\r\n        if node.data in s:\r\n            return s\r\n    msg = f\"{node.data} is not in {sets}\"\r\n    raise ValueError(msg)\r\n\r\n\r\ndef test_disjoint_set() -> None:\r\n    \"\"\"\r\n    >>> test_disjoint_set()\r\n    \"\"\"\r\n    vertex = [Node(i) for i in range(6)]\r\n    for v in vertex:\r\n        make_set(v)\r\n\r\n    union_set(vertex[0], vertex[1])\r\n    union_set(vertex[1], vertex[2])\r\n    union_set(vertex[3], vertex[4])\r\n    union_set(vertex[3], vertex[5])\r\n\r\n    for node0 in vertex:\r\n        for node1 in vertex:\r\n            if find_python_set(node0).isdisjoint(find_python_set(node1)):\r\n                assert find_set(node0) != find_set(node1)\r\n            else:\r\n                assert find_set(node0) == find_set(node1)\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    test_disjoint_set()\r\n"
  },
  {
    "path": "data_structures/hashing/__init__.py",
    "content": ""
  },
  {
    "path": "data_structures/hashing/bloom_filter.py",
    "content": "\"\"\"\nSee https://en.wikipedia.org/wiki/Bloom_filter\n\nThe use of this data structure is to test membership in a set.\nCompared to Python's built-in set() it is more space-efficient.\nIn the following example, only 8 bits of memory will be used:\n>>> bloom = Bloom(size=8)\n\nInitially, the filter contains all zeros:\n>>> bloom.bitstring\n'00000000'\n\nWhen an element is added, two bits are set to 1\nsince there are 2 hash functions in this implementation:\n>>> \"Titanic\" in bloom\nFalse\n>>> bloom.add(\"Titanic\")\n>>> bloom.bitstring\n'01100000'\n>>> \"Titanic\" in bloom\nTrue\n\nHowever, sometimes only one bit is added\nbecause both hash functions return the same value\n>>> bloom.add(\"Avatar\")\n>>> \"Avatar\" in bloom\nTrue\n>>> bloom.format_hash(\"Avatar\")\n'00000100'\n>>> bloom.bitstring\n'01100100'\n\nNot added elements should return False ...\n>>> not_present_films = (\"The Godfather\", \"Interstellar\", \"Parasite\", \"Pulp Fiction\")\n>>> {\n...   film: bloom.format_hash(film) for film in not_present_films\n... } # doctest: +NORMALIZE_WHITESPACE\n{'The Godfather': '00000101',\n 'Interstellar': '00000011',\n 'Parasite': '00010010',\n 'Pulp Fiction': '10000100'}\n>>> any(film in bloom for film in not_present_films)\nFalse\n\nbut sometimes there are false positives:\n>>> \"Ratatouille\" in bloom\nTrue\n>>> bloom.format_hash(\"Ratatouille\")\n'01100000'\n\nThe probability increases with the number of elements added.\nThe probability decreases with the number of bits in the bitarray.\n>>> bloom.estimated_error_rate\n0.140625\n>>> bloom.add(\"The Godfather\")\n>>> bloom.estimated_error_rate\n0.25\n>>> bloom.bitstring\n'01100101'\n\"\"\"\n\nfrom hashlib import md5, sha256\n\nHASH_FUNCTIONS = (sha256, md5)\n\n\nclass Bloom:\n    def __init__(self, size: int = 8) -> None:\n        self.bitarray = 0b0\n        self.size = size\n\n    def add(self, value: str) -> None:\n        h = self.hash_(value)\n        self.bitarray |= h\n\n    def exists(self, value: str) -> bool:\n        h = self.hash_(value)\n        return (h & self.bitarray) == h\n\n    def __contains__(self, other: str) -> bool:\n        return self.exists(other)\n\n    def format_bin(self, bitarray: int) -> str:\n        res = bin(bitarray)[2:]\n        return res.zfill(self.size)\n\n    @property\n    def bitstring(self) -> str:\n        return self.format_bin(self.bitarray)\n\n    def hash_(self, value: str) -> int:\n        res = 0b0\n        for func in HASH_FUNCTIONS:\n            position = (\n                int.from_bytes(func(value.encode()).digest(), \"little\") % self.size\n            )\n            res |= 2**position\n        return res\n\n    def format_hash(self, value: str) -> str:\n        return self.format_bin(self.hash_(value))\n\n    @property\n    def estimated_error_rate(self) -> float:\n        n_ones = bin(self.bitarray).count(\"1\")\n        return (n_ones / self.size) ** len(HASH_FUNCTIONS)\n"
  },
  {
    "path": "data_structures/hashing/double_hash.py",
    "content": "#!/usr/bin/env python3\n\"\"\"\nDouble hashing is a collision resolving technique in Open Addressed Hash tables.\nDouble hashing uses the idea of applying a second hash function to key when a collision\noccurs. The advantage of Double hashing is that it is one of the best form of  probing,\nproducing a uniform distribution of records throughout a hash table. This technique\ndoes not yield any clusters. It is one of effective method for resolving collisions.\n\nDouble hashing can be done using: (hash1(key) + i * hash2(key)) % TABLE_SIZE\nWhere hash1() and hash2() are hash functions and TABLE_SIZE is size of hash table.\n\nReference: https://en.wikipedia.org/wiki/Double_hashing\n\"\"\"\n\nfrom .hash_table import HashTable\nfrom .number_theory.prime_numbers import is_prime, next_prime\n\n\nclass DoubleHash(HashTable):\n    \"\"\"\n    Hash Table example with open addressing and Double Hash\n    \"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n\n    def __hash_function_2(self, value, data):\n        next_prime_gt = (\n            next_prime(value % self.size_table)\n            if not is_prime(value % self.size_table)\n            else value % self.size_table\n        )  # gt = bigger than\n        return next_prime_gt - (data % next_prime_gt)\n\n    def __hash_double_function(self, key, data, increment):\n        return (increment * self.__hash_function_2(key, data)) % self.size_table\n\n    def _collision_resolution(self, key, data=None):\n        \"\"\"\n        Examples:\n\n        1. Try to add three data elements when the size is three\n        >>> dh = DoubleHash(3)\n        >>> dh.insert_data(10)\n        >>> dh.insert_data(20)\n        >>> dh.insert_data(30)\n        >>> dh.keys()\n        {1: 10, 2: 20, 0: 30}\n\n        2. Try to add three data elements when the size is two\n        >>> dh = DoubleHash(2)\n        >>> dh.insert_data(10)\n        >>> dh.insert_data(20)\n        >>> dh.insert_data(30)\n        >>> dh.keys()\n        {10: 10, 9: 20, 8: 30}\n\n        3. Try to add three data elements when the size is four\n        >>> dh = DoubleHash(4)\n        >>> dh.insert_data(10)\n        >>> dh.insert_data(20)\n        >>> dh.insert_data(30)\n        >>> dh.keys()\n        {9: 20, 10: 10, 8: 30}\n        \"\"\"\n        i = 1\n        new_key = self.hash_function(data)\n\n        while self.values[new_key] is not None and self.values[new_key] != key:\n            new_key = (\n                self.__hash_double_function(key, data, i)\n                if self.balanced_factor() >= self.lim_charge\n                else None\n            )\n            if new_key is None:\n                break\n            else:\n                i += 1\n\n        return new_key\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/hashing/hash_map.py",
    "content": "\"\"\"\nHash map with open addressing.\n\nhttps://en.wikipedia.org/wiki/Hash_table\n\nAnother hash map implementation, with a good explanation.\nModern Dictionaries by Raymond Hettinger\nhttps://www.youtube.com/watch?v=p33CVV29OG8\n\"\"\"\n\nfrom collections.abc import Iterator, MutableMapping\nfrom dataclasses import dataclass\nfrom typing import TypeVar\n\nKEY = TypeVar(\"KEY\")\nVAL = TypeVar(\"VAL\")\n\n\n@dataclass(slots=True)\nclass _Item[KEY, VAL]:\n    key: KEY\n    val: VAL\n\n\nclass _DeletedItem(_Item):\n    def __init__(self) -> None:\n        super().__init__(None, None)\n\n    def __bool__(self) -> bool:\n        return False\n\n\n_deleted = _DeletedItem()\n\n\nclass HashMap(MutableMapping[KEY, VAL]):\n    \"\"\"\n    Hash map with open addressing.\n    \"\"\"\n\n    def __init__(\n        self, initial_block_size: int = 8, capacity_factor: float = 0.75\n    ) -> None:\n        self._initial_block_size = initial_block_size\n        self._buckets: list[_Item | None] = [None] * initial_block_size\n        assert 0.0 < capacity_factor < 1.0\n        self._capacity_factor = capacity_factor\n        self._len = 0\n\n    def _get_bucket_index(self, key: KEY) -> int:\n        return hash(key) % len(self._buckets)\n\n    def _get_next_ind(self, ind: int) -> int:\n        \"\"\"\n        Get next index.\n\n        Implements linear open addressing.\n        >>> HashMap(5)._get_next_ind(3)\n        4\n        >>> HashMap(5)._get_next_ind(5)\n        1\n        >>> HashMap(5)._get_next_ind(6)\n        2\n        >>> HashMap(5)._get_next_ind(9)\n        0\n        \"\"\"\n        return (ind + 1) % len(self._buckets)\n\n    def _try_set(self, ind: int, key: KEY, val: VAL) -> bool:\n        \"\"\"\n        Try to add value to the bucket.\n\n        If bucket is empty or key is the same, does insert and return True.\n\n        If bucket has another key that means that we need to check next bucket.\n        \"\"\"\n        stored = self._buckets[ind]\n        if not stored:\n            # A falsy item means that bucket was never used (None)\n            # or was deleted (_deleted).\n            self._buckets[ind] = _Item(key, val)\n            self._len += 1\n            return True\n        elif stored.key == key:\n            stored.val = val\n            return True\n        else:\n            return False\n\n    def _is_full(self) -> bool:\n        \"\"\"\n        Return true if we have reached safe capacity.\n\n        So we need to increase the number of buckets to avoid collisions.\n\n        >>> hm = HashMap(2)\n        >>> hm._add_item(1, 10)\n        >>> hm._add_item(2, 20)\n        >>> hm._is_full()\n        True\n        >>> HashMap(2)._is_full()\n        False\n        \"\"\"\n        limit = len(self._buckets) * self._capacity_factor\n        return len(self) >= int(limit)\n\n    def _is_sparse(self) -> bool:\n        \"\"\"Return true if we need twice fewer buckets when we have now.\"\"\"\n        if len(self._buckets) <= self._initial_block_size:\n            return False\n        limit = len(self._buckets) * self._capacity_factor / 2\n        return len(self) < limit\n\n    def _resize(self, new_size: int) -> None:\n        old_buckets = self._buckets\n        self._buckets = [None] * new_size\n        self._len = 0\n        for item in old_buckets:\n            if item:\n                self._add_item(item.key, item.val)\n\n    def _size_up(self) -> None:\n        self._resize(len(self._buckets) * 2)\n\n    def _size_down(self) -> None:\n        self._resize(len(self._buckets) // 2)\n\n    def _iterate_buckets(self, key: KEY) -> Iterator[int]:\n        ind = self._get_bucket_index(key)\n        for _ in range(len(self._buckets)):\n            yield ind\n            ind = self._get_next_ind(ind)\n\n    def _add_item(self, key: KEY, val: VAL) -> None:\n        \"\"\"\n        Try to add 3 elements when the size is 5\n        >>> hm = HashMap(5)\n        >>> hm._add_item(1, 10)\n        >>> hm._add_item(2, 20)\n        >>> hm._add_item(3, 30)\n        >>> hm\n        HashMap(1: 10, 2: 20, 3: 30)\n\n        Try to add 3 elements when the size is 5\n        >>> hm = HashMap(5)\n        >>> hm._add_item(-5, 10)\n        >>> hm._add_item(6, 30)\n        >>> hm._add_item(-7, 20)\n        >>> hm\n        HashMap(-5: 10, 6: 30, -7: 20)\n\n        Try to add 3 elements when size is 1\n        >>> hm = HashMap(1)\n        >>> hm._add_item(10, 13.2)\n        >>> hm._add_item(6, 5.26)\n        >>> hm._add_item(7, 5.155)\n        >>> hm\n        HashMap(10: 13.2)\n\n        Trying to add an element with a key that is a floating point value\n        >>> hm = HashMap(5)\n        >>> hm._add_item(1.5, 10)\n        >>> hm\n        HashMap(1.5: 10)\n\n        5. Trying to add an item with the same key\n        >>> hm = HashMap(5)\n        >>> hm._add_item(1, 10)\n        >>> hm._add_item(1, 20)\n        >>> hm\n        HashMap(1: 20)\n        \"\"\"\n        for ind in self._iterate_buckets(key):\n            if self._try_set(ind, key, val):\n                break\n\n    def __setitem__(self, key: KEY, val: VAL) -> None:\n        \"\"\"\n        1. Changing value of item whose key is present\n        >>> hm = HashMap(5)\n        >>> hm._add_item(1, 10)\n        >>> hm.__setitem__(1, 20)\n        >>> hm\n        HashMap(1: 20)\n\n        2. Changing value of item whose key is not present\n        >>> hm = HashMap(5)\n        >>> hm._add_item(1, 10)\n        >>> hm.__setitem__(0, 20)\n        >>> hm\n        HashMap(0: 20, 1: 10)\n\n        3. Changing the value of the same item multiple times\n        >>> hm = HashMap(5)\n        >>> hm._add_item(1, 10)\n        >>> hm.__setitem__(1, 20)\n        >>> hm.__setitem__(1, 30)\n        >>> hm\n        HashMap(1: 30)\n        \"\"\"\n        if self._is_full():\n            self._size_up()\n\n        self._add_item(key, val)\n\n    def __delitem__(self, key: KEY) -> None:\n        \"\"\"\n        >>> hm = HashMap(5)\n        >>> hm._add_item(1, 10)\n        >>> hm._add_item(2, 20)\n        >>> hm._add_item(3, 30)\n        >>> hm.__delitem__(3)\n        >>> hm\n        HashMap(1: 10, 2: 20)\n        >>> hm = HashMap(5)\n        >>> hm._add_item(-5, 10)\n        >>> hm._add_item(6, 30)\n        >>> hm._add_item(-7, 20)\n        >>> hm.__delitem__(-5)\n        >>> hm\n        HashMap(6: 30, -7: 20)\n\n        # Trying to remove a non-existing item\n        >>> hm = HashMap(5)\n        >>> hm._add_item(1, 10)\n        >>> hm._add_item(2, 20)\n        >>> hm._add_item(3, 30)\n        >>> hm.__delitem__(4)\n        Traceback (most recent call last):\n        ...\n        KeyError: 4\n\n        # Test resize down when sparse\n        ## Setup: resize up\n        >>> hm = HashMap(initial_block_size=100, capacity_factor=0.75)\n        >>> len(hm._buckets)\n        100\n        >>> for i in range(75):\n        ...     hm[i] = i\n        >>> len(hm._buckets)\n        100\n        >>> hm[75] = 75\n        >>> len(hm._buckets)\n        200\n\n        ## Resize down\n        >>> del hm[75]\n        >>> len(hm._buckets)\n        200\n        >>> del hm[74]\n        >>> len(hm._buckets)\n        100\n        \"\"\"\n        for ind in self._iterate_buckets(key):\n            item = self._buckets[ind]\n            if item is None:\n                raise KeyError(key)\n            if item is _deleted:\n                continue\n            if item.key == key:\n                self._buckets[ind] = _deleted\n                self._len -= 1\n                break\n        if self._is_sparse():\n            self._size_down()\n\n    def __getitem__(self, key: KEY) -> VAL:\n        \"\"\"\n        Returns the item at the given key\n\n        >>> hm = HashMap(5)\n        >>> hm._add_item(1, 10)\n        >>> hm.__getitem__(1)\n        10\n\n        >>> hm = HashMap(5)\n        >>> hm._add_item(10, -10)\n        >>> hm._add_item(20, -20)\n        >>> hm.__getitem__(20)\n        -20\n\n        >>> hm = HashMap(5)\n        >>> hm._add_item(-1, 10)\n        >>> hm.__getitem__(-1)\n        10\n        \"\"\"\n        for ind in self._iterate_buckets(key):\n            item = self._buckets[ind]\n            if item is None:\n                break\n            if item is _deleted:\n                continue\n            if item.key == key:\n                return item.val\n        raise KeyError(key)\n\n    def __len__(self) -> int:\n        \"\"\"\n        Returns the number of items present in hashmap\n\n        >>> hm = HashMap(5)\n        >>> hm._add_item(1, 10)\n        >>> hm._add_item(2, 20)\n        >>> hm._add_item(3, 30)\n        >>> hm.__len__()\n        3\n\n        >>> hm = HashMap(5)\n        >>> hm.__len__()\n        0\n        \"\"\"\n        return self._len\n\n    def __iter__(self) -> Iterator[KEY]:\n        yield from (item.key for item in self._buckets if item)\n\n    def __repr__(self) -> str:\n        val_string = \", \".join(\n            f\"{item.key}: {item.val}\" for item in self._buckets if item\n        )\n        return f\"HashMap({val_string})\"\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/hashing/hash_table.py",
    "content": "#!/usr/bin/env python3\nfrom abc import abstractmethod\n\nfrom .number_theory.prime_numbers import next_prime\n\n\nclass HashTable:\n    \"\"\"\n    Basic Hash Table example with open addressing and linear probing\n    \"\"\"\n\n    def __init__(\n        self,\n        size_table: int,\n        charge_factor: int | None = None,\n        lim_charge: float | None = None,\n    ) -> None:\n        self.size_table = size_table\n        self.values = [None] * self.size_table\n        self.lim_charge = 0.75 if lim_charge is None else lim_charge\n        self.charge_factor = 1 if charge_factor is None else charge_factor\n        self.__aux_list: list = []\n        self._keys: dict = {}\n\n    def keys(self):\n        \"\"\"\n        The keys function returns a dictionary containing the key value pairs.\n        key being the index number in hash table and value being the data value.\n\n        Examples:\n        1. creating HashTable with size 10 and inserting 3 elements\n        >>> ht = HashTable(10)\n        >>> ht.insert_data(10)\n        >>> ht.insert_data(20)\n        >>> ht.insert_data(30)\n        >>> ht.keys()\n        {0: 10, 1: 20, 2: 30}\n\n        2. creating HashTable with size 5 and inserting 5 elements\n        >>> ht = HashTable(5)\n        >>> ht.insert_data(5)\n        >>> ht.insert_data(4)\n        >>> ht.insert_data(3)\n        >>> ht.insert_data(2)\n        >>> ht.insert_data(1)\n        >>> ht.keys()\n        {0: 5, 4: 4, 3: 3, 2: 2, 1: 1}\n        \"\"\"\n        return self._keys\n\n    def balanced_factor(self):\n        return sum(1 for slot in self.values if slot is not None) / (\n            self.size_table * self.charge_factor\n        )\n\n    def hash_function(self, key):\n        \"\"\"\n        Generates hash for the given key value\n\n        Examples:\n\n        Creating HashTable with size 5\n        >>> ht = HashTable(5)\n        >>> ht.hash_function(10)\n        0\n        >>> ht.hash_function(20)\n        0\n        >>> ht.hash_function(4)\n        4\n        >>> ht.hash_function(18)\n        3\n        >>> ht.hash_function(-18)\n        2\n        >>> ht.hash_function(18.5)\n        3.5\n        >>> ht.hash_function(0)\n        0\n        >>> ht.hash_function(-0)\n        0\n        \"\"\"\n        return key % self.size_table\n\n    def _step_by_step(self, step_ord):\n        print(f\"step {step_ord}\")\n        print(list(range(len(self.values))))\n        print(self.values)\n\n    def bulk_insert(self, values):\n        \"\"\"\n        bulk_insert is used for entering more than one element at a time\n        in the HashTable.\n\n        Examples:\n        1.\n        >>> ht = HashTable(5)\n        >>> ht.bulk_insert((10,20,30))\n        step 1\n        [0, 1, 2, 3, 4]\n        [10, None, None, None, None]\n        step 2\n        [0, 1, 2, 3, 4]\n        [10, 20, None, None, None]\n        step 3\n        [0, 1, 2, 3, 4]\n        [10, 20, 30, None, None]\n\n        2.\n        >>> ht = HashTable(5)\n        >>> ht.bulk_insert([5,4,3,2,1])\n        step 1\n        [0, 1, 2, 3, 4]\n        [5, None, None, None, None]\n        step 2\n        [0, 1, 2, 3, 4]\n        [5, None, None, None, 4]\n        step 3\n        [0, 1, 2, 3, 4]\n        [5, None, None, 3, 4]\n        step 4\n        [0, 1, 2, 3, 4]\n        [5, None, 2, 3, 4]\n        step 5\n        [0, 1, 2, 3, 4]\n        [5, 1, 2, 3, 4]\n        \"\"\"\n        i = 1\n        self.__aux_list = values\n        for value in values:\n            self.insert_data(value)\n            self._step_by_step(i)\n            i += 1\n\n    def _set_value(self, key, data):\n        \"\"\"\n        _set_value functions allows to update value at a particular hash\n\n        Examples:\n        1. _set_value in HashTable of size 5\n        >>> ht = HashTable(5)\n        >>> ht.insert_data(10)\n        >>> ht.insert_data(20)\n        >>> ht.insert_data(30)\n        >>> ht._set_value(0,15)\n        >>> ht.keys()\n        {0: 15, 1: 20, 2: 30}\n\n        2. _set_value in HashTable of size 2\n        >>> ht = HashTable(2)\n        >>> ht.insert_data(17)\n        >>> ht.insert_data(18)\n        >>> ht.insert_data(99)\n        >>> ht._set_value(3,15)\n        >>> ht.keys()\n        {3: 15, 2: 17, 4: 99}\n\n        3. _set_value in HashTable when hash is not present\n        >>> ht = HashTable(2)\n        >>> ht.insert_data(17)\n        >>> ht.insert_data(18)\n        >>> ht.insert_data(99)\n        >>> ht._set_value(0,15)\n        >>> ht.keys()\n        {3: 18, 2: 17, 4: 99, 0: 15}\n\n        4. _set_value in HashTable when multiple hash are not present\n        >>> ht = HashTable(2)\n        >>> ht.insert_data(17)\n        >>> ht.insert_data(18)\n        >>> ht.insert_data(99)\n        >>> ht._set_value(0,15)\n        >>> ht._set_value(1,20)\n        >>> ht.keys()\n        {3: 18, 2: 17, 4: 99, 0: 15, 1: 20}\n        \"\"\"\n        self.values[key] = data\n        self._keys[key] = data\n\n    @abstractmethod\n    def _collision_resolution(self, key, data=None):\n        \"\"\"\n        This method is a type of open addressing which is used for handling collision.\n\n        In this implementation the concept of linear probing has been used.\n\n        The hash table is searched sequentially from the original location of the\n        hash, if the new hash/location we get is already occupied we check for the next\n        hash/location.\n\n        references:\n            - https://en.wikipedia.org/wiki/Linear_probing\n\n        Examples:\n        1. The collision will be with keys 18 & 99, so new hash will be created for 99\n        >>> ht = HashTable(3)\n        >>> ht.insert_data(17)\n        >>> ht.insert_data(18)\n        >>> ht.insert_data(99)\n        >>> ht.keys()\n        {2: 17, 0: 18, 1: 99}\n\n        2. The collision will be with keys 17 & 101, so new hash\n        will be created for 101\n        >>> ht = HashTable(4)\n        >>> ht.insert_data(17)\n        >>> ht.insert_data(18)\n        >>> ht.insert_data(99)\n        >>> ht.insert_data(101)\n        >>> ht.keys()\n        {1: 17, 2: 18, 3: 99, 0: 101}\n\n        2. The collision will be with all keys, so new hash will be created for all\n        >>> ht = HashTable(1)\n        >>> ht.insert_data(17)\n        >>> ht.insert_data(18)\n        >>> ht.insert_data(99)\n        >>> ht.keys()\n        {2: 17, 3: 18, 4: 99}\n\n        3. Trying to insert float key in hash\n        >>> ht = HashTable(1)\n        >>> ht.insert_data(17)\n        >>> ht.insert_data(18)\n        >>> ht.insert_data(99.99)\n        Traceback (most recent call last):\n        ...\n        TypeError: list indices must be integers or slices, not float\n        \"\"\"\n        new_key = self.hash_function(key + 1)\n\n        while self.values[new_key] is not None and self.values[new_key] != key:\n            if self.values.count(None) > 0:\n                new_key = self.hash_function(new_key + 1)\n            else:\n                new_key = None\n                break\n\n        return new_key\n\n    def rehashing(self):\n        survivor_values = [value for value in self.values if value is not None]\n        self.size_table = next_prime(self.size_table, factor=2)\n        self._keys.clear()\n        self.values = [None] * self.size_table  # hell's pointers D: don't DRY ;/\n        for value in survivor_values:\n            self.insert_data(value)\n\n    def insert_data(self, data):\n        \"\"\"\n        insert_data is used for inserting a single element at a time in the HashTable.\n\n        Examples:\n\n        >>> ht = HashTable(3)\n        >>> ht.insert_data(5)\n        >>> ht.keys()\n        {2: 5}\n        >>> ht = HashTable(5)\n        >>> ht.insert_data(30)\n        >>> ht.insert_data(50)\n        >>> ht.keys()\n        {0: 30, 1: 50}\n        \"\"\"\n        key = self.hash_function(data)\n\n        if self.values[key] is None:\n            self._set_value(key, data)\n\n        elif self.values[key] == data:\n            pass\n\n        else:\n            collision_resolution = self._collision_resolution(key, data)\n            if collision_resolution is not None:\n                self._set_value(collision_resolution, data)\n            else:\n                self.rehashing()\n                self.insert_data(data)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/hashing/hash_table_with_linked_list.py",
    "content": "from collections import deque\n\nfrom .hash_table import HashTable\n\n\nclass HashTableWithLinkedList(HashTable):\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n\n    def _set_value(self, key, data):\n        self.values[key] = deque() if self.values[key] is None else self.values[key]\n        self.values[key].appendleft(data)\n        self._keys[key] = self.values[key]\n\n    def balanced_factor(self):\n        return (\n            sum(self.charge_factor - len(slot) for slot in self.values)\n            / self.size_table\n            * self.charge_factor\n        )\n\n    def _collision_resolution(self, key, data=None):\n        if not (\n            len(self.values[key]) == self.charge_factor and self.values.count(None) == 0\n        ):\n            return key\n        return super()._collision_resolution(key, data)\n"
  },
  {
    "path": "data_structures/hashing/number_theory/__init__.py",
    "content": ""
  },
  {
    "path": "data_structures/hashing/number_theory/prime_numbers.py",
    "content": "#!/usr/bin/env python3\n\"\"\"\nmodule to operations with prime numbers\n\"\"\"\n\nimport math\n\n\ndef is_prime(number: int) -> bool:\n    \"\"\"Checks to see if a number is a prime in O(sqrt(n)).\n\n    A number is prime if it has exactly two factors: 1 and itself.\n\n    >>> is_prime(0)\n    False\n    >>> is_prime(1)\n    False\n    >>> is_prime(2)\n    True\n    >>> is_prime(3)\n    True\n    >>> is_prime(27)\n    False\n    >>> is_prime(87)\n    False\n    >>> is_prime(563)\n    True\n    >>> is_prime(2999)\n    True\n    >>> is_prime(67483)\n    False\n    \"\"\"\n\n    # precondition\n    assert isinstance(number, int) and (number >= 0), (\n        \"'number' must been an int and positive\"\n    )\n\n    if 1 < number < 4:\n        # 2 and 3 are primes\n        return True\n    elif number < 2 or not number % 2:\n        # Negatives, 0, 1 and all even numbers are not primes\n        return False\n\n    odd_numbers = range(3, int(math.sqrt(number) + 1), 2)\n    return not any(not number % i for i in odd_numbers)\n\n\ndef next_prime(value, factor=1, **kwargs):\n    value = factor * value\n    first_value_val = value\n\n    while not is_prime(value):\n        value += 1 if not (\"desc\" in kwargs and kwargs[\"desc\"] is True) else -1\n\n    if value == first_value_val:\n        return next_prime(value + 1, **kwargs)\n    return value\n"
  },
  {
    "path": "data_structures/hashing/quadratic_probing.py",
    "content": "#!/usr/bin/env python3\n\nfrom .hash_table import HashTable\n\n\nclass QuadraticProbing(HashTable):\n    \"\"\"\n    Basic Hash Table example with open addressing using Quadratic Probing\n    \"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n\n    def _collision_resolution(self, key, data=None):  # noqa: ARG002\n        \"\"\"\n        Quadratic probing is an open addressing scheme used for resolving\n        collisions in hash table.\n\n        It works by taking the original hash index and adding successive\n        values of an arbitrary quadratic polynomial until open slot is found.\n\n        Hash + 1², Hash + 2², Hash + 3² .... Hash + n²\n\n        reference:\n            - https://en.wikipedia.org/wiki/Quadratic_probing\n        e.g:\n        1. Create hash table with size 7\n        >>> qp = QuadraticProbing(7)\n        >>> qp.insert_data(90)\n        >>> qp.insert_data(340)\n        >>> qp.insert_data(24)\n        >>> qp.insert_data(45)\n        >>> qp.insert_data(99)\n        >>> qp.insert_data(73)\n        >>> qp.insert_data(7)\n        >>> qp.keys()\n        {11: 45, 14: 99, 7: 24, 0: 340, 5: 73, 6: 90, 8: 7}\n\n        2. Create hash table with size 8\n        >>> qp = QuadraticProbing(8)\n        >>> qp.insert_data(0)\n        >>> qp.insert_data(999)\n        >>> qp.insert_data(111)\n        >>> qp.keys()\n        {0: 0, 7: 999, 3: 111}\n\n        3. Try to add three data elements when the size is two\n        >>> qp =  QuadraticProbing(2)\n        >>> qp.insert_data(0)\n        >>> qp.insert_data(999)\n        >>> qp.insert_data(111)\n        >>> qp.keys()\n        {0: 0, 4: 999, 1: 111}\n\n        4. Try to add three data elements when the size is one\n        >>> qp =  QuadraticProbing(1)\n        >>> qp.insert_data(0)\n        >>> qp.insert_data(999)\n        >>> qp.insert_data(111)\n        >>> qp.keys()\n        {4: 999, 1: 111}\n        \"\"\"\n\n        i = 1\n        new_key = self.hash_function(key + i * i)\n\n        while self.values[new_key] is not None and self.values[new_key] != key:\n            i += 1\n            new_key = (\n                self.hash_function(key + i * i)\n                if not self.balanced_factor() >= self.lim_charge\n                else None\n            )\n\n            if new_key is None:\n                break\n\n        return new_key\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/hashing/tests/__init__.py",
    "content": ""
  },
  {
    "path": "data_structures/hashing/tests/test_hash_map.py",
    "content": "from operator import delitem, getitem, setitem\n\nimport pytest\n\nfrom data_structures.hashing.hash_map import HashMap\n\n\ndef _get(k):\n    return getitem, k\n\n\ndef _set(k, v):\n    return setitem, k, v\n\n\ndef _del(k):\n    return delitem, k\n\n\ndef _run_operation(obj, fun, *args):\n    try:\n        return fun(obj, *args), None\n    except Exception as e:\n        return None, e\n\n\n_add_items = (\n    _set(\"key_a\", \"val_a\"),\n    _set(\"key_b\", \"val_b\"),\n)\n\n_overwrite_items = [\n    _set(\"key_a\", \"val_a\"),\n    _set(\"key_a\", \"val_b\"),\n]\n\n_delete_items = [\n    _set(\"key_a\", \"val_a\"),\n    _set(\"key_b\", \"val_b\"),\n    _del(\"key_a\"),\n    _del(\"key_b\"),\n    _set(\"key_a\", \"val_a\"),\n    _del(\"key_a\"),\n]\n\n_access_absent_items = [\n    _get(\"key_a\"),\n    _del(\"key_a\"),\n    _set(\"key_a\", \"val_a\"),\n    _del(\"key_a\"),\n    _del(\"key_a\"),\n    _get(\"key_a\"),\n]\n\n_add_with_resize_up = [\n    *[_set(x, x) for x in range(5)],  # guaranteed upsize\n]\n\n_add_with_resize_down = [\n    *[_set(x, x) for x in range(5)],  # guaranteed upsize\n    *[_del(x) for x in range(5)],\n    _set(\"key_a\", \"val_b\"),\n]\n\n\n@pytest.mark.parametrize(\n    \"operations\",\n    [\n        pytest.param(_add_items, id=\"add items\"),\n        pytest.param(_overwrite_items, id=\"overwrite items\"),\n        pytest.param(_delete_items, id=\"delete items\"),\n        pytest.param(_access_absent_items, id=\"access absent items\"),\n        pytest.param(_add_with_resize_up, id=\"add with resize up\"),\n        pytest.param(_add_with_resize_down, id=\"add with resize down\"),\n    ],\n)\ndef test_hash_map_is_the_same_as_dict(operations):\n    my = HashMap(initial_block_size=4)\n    py = {}\n    for _, (fun, *args) in enumerate(operations):\n        my_res, my_exc = _run_operation(my, fun, *args)\n        py_res, py_exc = _run_operation(py, fun, *args)\n        assert my_res == py_res\n        assert str(my_exc) == str(py_exc)\n        assert set(py) == set(my)\n        assert len(py) == len(my)\n        assert set(my.items()) == set(py.items())\n\n\ndef test_no_new_methods_was_added_to_api():\n    def is_public(name: str) -> bool:\n        return not name.startswith(\"_\")\n\n    dict_public_names = {name for name in dir({}) if is_public(name)}\n    hash_public_names = {name for name in dir(HashMap()) if is_public(name)}\n\n    assert dict_public_names > hash_public_names\n"
  },
  {
    "path": "data_structures/heap/__init__.py",
    "content": ""
  },
  {
    "path": "data_structures/heap/binomial_heap.py",
    "content": "\"\"\"\r\nBinomial Heap\r\nReference: Advanced Data Structures, Peter Brass\r\n\"\"\"\r\n\r\n\r\nclass Node:\r\n    \"\"\"\r\n    Node in a doubly-linked binomial tree, containing:\r\n        - value\r\n        - size of left subtree\r\n        - link to left, right and parent nodes\r\n    \"\"\"\r\n\r\n    def __init__(self, val):\r\n        self.val = val\r\n        # Number of nodes in left subtree\r\n        self.left_tree_size = 0\r\n        self.left = None\r\n        self.right = None\r\n        self.parent = None\r\n\r\n    def merge_trees(self, other):\r\n        \"\"\"\r\n        In-place merge of two binomial trees of equal size.\r\n        Returns the root of the resulting tree\r\n        \"\"\"\r\n        assert self.left_tree_size == other.left_tree_size, \"Unequal Sizes of Blocks\"\r\n\r\n        if self.val < other.val:\r\n            other.left = self.right\r\n            other.parent = None\r\n            if self.right:\r\n                self.right.parent = other\r\n            self.right = other\r\n            self.left_tree_size = self.left_tree_size * 2 + 1\r\n            return self\r\n        else:\r\n            self.left = other.right\r\n            self.parent = None\r\n            if other.right:\r\n                other.right.parent = self\r\n            other.right = self\r\n            other.left_tree_size = other.left_tree_size * 2 + 1\r\n            return other\r\n\r\n\r\nclass BinomialHeap:\r\n    r\"\"\"\r\n    Min-oriented priority queue implemented with the Binomial Heap data\r\n    structure implemented with the BinomialHeap class. It supports:\r\n        - Insert element in a heap with n elements: Guaranteed logn, amoratized 1\r\n        - Merge (meld) heaps of size m and n: O(logn + logm)\r\n        - Delete Min: O(logn)\r\n        - Peek (return min without deleting it): O(1)\r\n\r\n    Example:\r\n\r\n    Create a random permutation of 30 integers to be inserted and 19 of them deleted\r\n    >>> import numpy as np\r\n    >>> permutation = np.random.permutation(list(range(30)))\r\n\r\n    Create a Heap and insert the 30 integers\r\n    __init__() test\r\n    >>> first_heap = BinomialHeap()\r\n\r\n    30 inserts - insert() test\r\n    >>> for number in permutation:\r\n    ...     first_heap.insert(number)\r\n\r\n    Size test\r\n    >>> first_heap.size\r\n    30\r\n\r\n    Deleting - delete() test\r\n    >>> [int(first_heap.delete_min()) for _ in range(20)]\r\n    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]\r\n\r\n    Create a new Heap\r\n    >>> second_heap = BinomialHeap()\r\n    >>> vals = [17, 20, 31, 34]\r\n    >>> for value in vals:\r\n    ...     second_heap.insert(value)\r\n\r\n\r\n    The heap should have the following structure:\r\n\r\n                    17\r\n                   /  \\\r\n                  #    31\r\n                      /  \\\r\n                    20    34\r\n                   /  \\  /  \\\r\n                  #    # #   #\r\n\r\n    preOrder() test\r\n    >>> \" \".join(str(x) for x in second_heap.pre_order())\r\n    \"(17, 0) ('#', 1) (31, 1) (20, 2) ('#', 3) ('#', 3) (34, 2) ('#', 3) ('#', 3)\"\r\n\r\n    printing Heap - __str__() test\r\n    >>> print(second_heap)\r\n    17\r\n    -#\r\n    -31\r\n    --20\r\n    ---#\r\n    ---#\r\n    --34\r\n    ---#\r\n    ---#\r\n\r\n    mergeHeaps() test\r\n    >>>\r\n    >>> merged = second_heap.merge_heaps(first_heap)\r\n    >>> merged.peek()\r\n    17\r\n\r\n    values in merged heap; (merge is inplace)\r\n    >>> results = []\r\n    >>> while not first_heap.is_empty():\r\n    ...     results.append(int(first_heap.delete_min()))\r\n    >>> results\r\n    [17, 20, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 31, 34]\r\n    \"\"\"\r\n\r\n    def __init__(self, bottom_root=None, min_node=None, heap_size=0):\r\n        self.size = heap_size\r\n        self.bottom_root = bottom_root\r\n        self.min_node = min_node\r\n\r\n    def merge_heaps(self, other):\r\n        \"\"\"\r\n        In-place merge of two binomial heaps.\r\n        Both of them become the resulting merged heap\r\n        \"\"\"\r\n\r\n        # Empty heaps corner cases\r\n        if other.size == 0:\r\n            return None\r\n        if self.size == 0:\r\n            self.size = other.size\r\n            self.bottom_root = other.bottom_root\r\n            self.min_node = other.min_node\r\n            return None\r\n        # Update size\r\n        self.size = self.size + other.size\r\n\r\n        # Update min.node\r\n        if self.min_node.val > other.min_node.val:\r\n            self.min_node = other.min_node\r\n        # Merge\r\n\r\n        # Order roots by left_subtree_size\r\n        combined_roots_list = []\r\n        i, j = self.bottom_root, other.bottom_root\r\n        while i or j:\r\n            if i and ((not j) or i.left_tree_size < j.left_tree_size):\r\n                combined_roots_list.append((i, True))\r\n                i = i.parent\r\n            else:\r\n                combined_roots_list.append((j, False))\r\n                j = j.parent\r\n        # Insert links between them\r\n        for i in range(len(combined_roots_list) - 1):\r\n            if combined_roots_list[i][1] != combined_roots_list[i + 1][1]:\r\n                combined_roots_list[i][0].parent = combined_roots_list[i + 1][0]\r\n                combined_roots_list[i + 1][0].left = combined_roots_list[i][0]\r\n        # Consecutively merge roots with same left_tree_size\r\n        i = combined_roots_list[0][0]\r\n        while i.parent:\r\n            if (\r\n                (i.left_tree_size == i.parent.left_tree_size) and (not i.parent.parent)\r\n            ) or (\r\n                i.left_tree_size == i.parent.left_tree_size\r\n                and i.left_tree_size != i.parent.parent.left_tree_size\r\n            ):\r\n                # Neighbouring Nodes\r\n                previous_node = i.left\r\n                next_node = i.parent.parent\r\n\r\n                # Merging trees\r\n                i = i.merge_trees(i.parent)\r\n\r\n                # Updating links\r\n                i.left = previous_node\r\n                i.parent = next_node\r\n                if previous_node:\r\n                    previous_node.parent = i\r\n                if next_node:\r\n                    next_node.left = i\r\n            else:\r\n                i = i.parent\r\n        # Updating self.bottom_root\r\n        while i.left:\r\n            i = i.left\r\n        self.bottom_root = i\r\n\r\n        # Update other\r\n        other.size = self.size\r\n        other.bottom_root = self.bottom_root\r\n        other.min_node = self.min_node\r\n\r\n        # Return the merged heap\r\n        return self\r\n\r\n    def insert(self, val):\r\n        \"\"\"\r\n        insert a value in the heap\r\n        \"\"\"\r\n        if self.size == 0:\r\n            self.bottom_root = Node(val)\r\n            self.size = 1\r\n            self.min_node = self.bottom_root\r\n        else:\r\n            # Create new node\r\n            new_node = Node(val)\r\n\r\n            # Update size\r\n            self.size += 1\r\n\r\n            # update min_node\r\n            if val < self.min_node.val:\r\n                self.min_node = new_node\r\n            # Put new_node as a bottom_root in heap\r\n            self.bottom_root.left = new_node\r\n            new_node.parent = self.bottom_root\r\n            self.bottom_root = new_node\r\n\r\n            # Consecutively merge roots with same left_tree_size\r\n            while (\r\n                self.bottom_root.parent\r\n                and self.bottom_root.left_tree_size\r\n                == self.bottom_root.parent.left_tree_size\r\n            ):\r\n                # Next node\r\n                next_node = self.bottom_root.parent.parent\r\n\r\n                # Merge\r\n                self.bottom_root = self.bottom_root.merge_trees(self.bottom_root.parent)\r\n\r\n                # Update Links\r\n                self.bottom_root.parent = next_node\r\n                self.bottom_root.left = None\r\n                if next_node:\r\n                    next_node.left = self.bottom_root\r\n\r\n    def peek(self):\r\n        \"\"\"\r\n        return min element without deleting it\r\n        \"\"\"\r\n        return self.min_node.val\r\n\r\n    def is_empty(self):\r\n        return self.size == 0\r\n\r\n    def delete_min(self):\r\n        \"\"\"\r\n        delete min element and return it\r\n        \"\"\"\r\n        # assert not self.isEmpty(), \"Empty Heap\"\r\n\r\n        # Save minimal value\r\n        min_value = self.min_node.val\r\n\r\n        # Last element in heap corner case\r\n        if self.size == 1:\r\n            # Update size\r\n            self.size = 0\r\n\r\n            # Update bottom root\r\n            self.bottom_root = None\r\n\r\n            # Update min_node\r\n            self.min_node = None\r\n\r\n            return min_value\r\n        # No right subtree corner case\r\n        # The structure of the tree implies that this should be the bottom root\r\n        # and there is at least one other root\r\n        if self.min_node.right is None:\r\n            # Update size\r\n            self.size -= 1\r\n\r\n            # Update bottom root\r\n            self.bottom_root = self.bottom_root.parent\r\n            self.bottom_root.left = None\r\n\r\n            # Update min_node\r\n            self.min_node = self.bottom_root\r\n            i = self.bottom_root.parent\r\n            while i:\r\n                if i.val < self.min_node.val:\r\n                    self.min_node = i\r\n                i = i.parent\r\n            return min_value\r\n        # General case\r\n        # Find the BinomialHeap of the right subtree of min_node\r\n        bottom_of_new = self.min_node.right\r\n        bottom_of_new.parent = None\r\n        min_of_new = bottom_of_new\r\n        size_of_new = 1\r\n\r\n        # Size, min_node and bottom_root\r\n        while bottom_of_new.left:\r\n            size_of_new = size_of_new * 2 + 1\r\n            bottom_of_new = bottom_of_new.left\r\n            if bottom_of_new.val < min_of_new.val:\r\n                min_of_new = bottom_of_new\r\n        # Corner case of single root on top left path\r\n        if (not self.min_node.left) and (not self.min_node.parent):\r\n            self.size = size_of_new\r\n            self.bottom_root = bottom_of_new\r\n            self.min_node = min_of_new\r\n            # print(\"Single root, multiple nodes case\")\r\n            return min_value\r\n        # Remaining cases\r\n        # Construct heap of right subtree\r\n        new_heap = BinomialHeap(\r\n            bottom_root=bottom_of_new, min_node=min_of_new, heap_size=size_of_new\r\n        )\r\n\r\n        # Update size\r\n        self.size = self.size - 1 - size_of_new\r\n\r\n        # Neighbour nodes\r\n        previous_node = self.min_node.left\r\n        next_node = self.min_node.parent\r\n\r\n        # Initialize new bottom_root and min_node\r\n        self.min_node = previous_node or next_node\r\n        self.bottom_root = next_node\r\n\r\n        # Update links of previous_node and search below for new min_node and\r\n        # bottom_root\r\n        if previous_node:\r\n            previous_node.parent = next_node\r\n\r\n            # Update bottom_root and search for min_node below\r\n            self.bottom_root = previous_node\r\n            self.min_node = previous_node\r\n            while self.bottom_root.left:\r\n                self.bottom_root = self.bottom_root.left\r\n                if self.bottom_root.val < self.min_node.val:\r\n                    self.min_node = self.bottom_root\r\n        if next_node:\r\n            next_node.left = previous_node\r\n\r\n            # Search for new min_node above min_node\r\n            i = next_node\r\n            while i:\r\n                if i.val < self.min_node.val:\r\n                    self.min_node = i\r\n                i = i.parent\r\n        # Merge heaps\r\n        self.merge_heaps(new_heap)\r\n\r\n        return int(min_value)\r\n\r\n    def pre_order(self):\r\n        \"\"\"\r\n        Returns the Pre-order representation of the heap including\r\n        values of nodes plus their level distance from the root;\r\n        Empty nodes appear as #\r\n        \"\"\"\r\n        # Find top root\r\n        top_root = self.bottom_root\r\n        while top_root.parent:\r\n            top_root = top_root.parent\r\n        # preorder\r\n        heap_pre_order = []\r\n        self.__traversal(top_root, heap_pre_order)\r\n        return heap_pre_order\r\n\r\n    def __traversal(self, curr_node, preorder, level=0):\r\n        \"\"\"\r\n        Pre-order traversal of nodes\r\n        \"\"\"\r\n        if curr_node:\r\n            preorder.append((curr_node.val, level))\r\n            self.__traversal(curr_node.left, preorder, level + 1)\r\n            self.__traversal(curr_node.right, preorder, level + 1)\r\n        else:\r\n            preorder.append((\"#\", level))\r\n\r\n    def __str__(self):\r\n        \"\"\"\r\n        Overwriting str for a pre-order print of nodes in heap;\r\n        Performance is poor, so use only for small examples\r\n        \"\"\"\r\n        if self.is_empty():\r\n            return \"\"\r\n        preorder_heap = self.pre_order()\r\n\r\n        return \"\\n\".join((\"-\" * level + str(value)) for value, level in preorder_heap)\r\n\r\n\r\n# Unit Tests\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n"
  },
  {
    "path": "data_structures/heap/heap.py",
    "content": "from __future__ import annotations\n\nfrom abc import abstractmethod\nfrom collections.abc import Iterable\nfrom typing import Protocol, TypeVar\n\n\nclass Comparable(Protocol):\n    @abstractmethod\n    def __lt__(self: T, other: T) -> bool:\n        pass\n\n    @abstractmethod\n    def __gt__(self: T, other: T) -> bool:\n        pass\n\n    @abstractmethod\n    def __eq__(self: T, other: object) -> bool:\n        pass\n\n\nT = TypeVar(\"T\", bound=Comparable)\n\n\nclass Heap[T: Comparable]:\n    \"\"\"A Max Heap Implementation\n\n    >>> unsorted = [103, 9, 1, 7, 11, 15, 25, 201, 209, 107, 5]\n    >>> h = Heap()\n    >>> h.build_max_heap(unsorted)\n    >>> h\n    [209, 201, 25, 103, 107, 15, 1, 9, 7, 11, 5]\n    >>>\n    >>> h.extract_max()\n    209\n    >>> h\n    [201, 107, 25, 103, 11, 15, 1, 9, 7, 5]\n    >>>\n    >>> h.insert(100)\n    >>> h\n    [201, 107, 25, 103, 100, 15, 1, 9, 7, 5, 11]\n    >>>\n    >>> h.heap_sort()\n    >>> h\n    [1, 5, 7, 9, 11, 15, 25, 100, 103, 107, 201]\n    \"\"\"\n\n    def __init__(self) -> None:\n        self.h: list[T] = []\n        self.heap_size: int = 0\n\n    def __repr__(self) -> str:\n        return str(self.h)\n\n    def parent_index(self, child_idx: int) -> int | None:\n        \"\"\"\n        returns the parent index based on the given child index\n\n        >>> h = Heap()\n        >>> h.build_max_heap([103, 9, 1, 7, 11, 15, 25, 201, 209, 107, 5])\n        >>> h\n        [209, 201, 25, 103, 107, 15, 1, 9, 7, 11, 5]\n\n        >>> h.parent_index(-1)  # returns none if index is <=0\n\n        >>> h.parent_index(0)   # returns none if index is <=0\n\n        >>> h.parent_index(1)\n        0\n        >>> h.parent_index(2)\n        0\n        >>> h.parent_index(3)\n        1\n        >>> h.parent_index(4)\n        1\n        >>> h.parent_index(5)\n        2\n        >>> h.parent_index(10.5)\n        4.0\n        >>> h.parent_index(209.0)\n        104.0\n        >>> h.parent_index(\"Test\")\n        Traceback (most recent call last):\n        ...\n        TypeError: '>' not supported between instances of 'str' and 'int'\n        \"\"\"\n        if child_idx > 0:\n            return (child_idx - 1) // 2\n        return None\n\n    def left_child_idx(self, parent_idx: int) -> int | None:\n        \"\"\"\n        return the left child index if the left child exists.\n        if not, return None.\n        \"\"\"\n        left_child_index = 2 * parent_idx + 1\n        if left_child_index < self.heap_size:\n            return left_child_index\n        return None\n\n    def right_child_idx(self, parent_idx: int) -> int | None:\n        \"\"\"\n        return the right child index if the right child exists.\n        if not, return None.\n        \"\"\"\n        right_child_index = 2 * parent_idx + 2\n        if right_child_index < self.heap_size:\n            return right_child_index\n        return None\n\n    def max_heapify(self, index: int) -> None:\n        \"\"\"\n        correct a single violation of the heap property in a subtree's root.\n\n        It is the function that is responsible for restoring the property\n        of Max heap i.e the maximum element is always at top.\n        \"\"\"\n        if index < self.heap_size:\n            violation: int = index\n            left_child = self.left_child_idx(index)\n            right_child = self.right_child_idx(index)\n            # check which child is larger than its parent\n            if left_child is not None and self.h[left_child] > self.h[violation]:\n                violation = left_child\n            if right_child is not None and self.h[right_child] > self.h[violation]:\n                violation = right_child\n            # if violation indeed exists\n            if violation != index:\n                # swap to fix the violation\n                self.h[violation], self.h[index] = self.h[index], self.h[violation]\n                # fix the subsequent violation recursively if any\n                self.max_heapify(violation)\n\n    def build_max_heap(self, collection: Iterable[T]) -> None:\n        \"\"\"\n        build max heap from an unsorted array\n\n        >>> h = Heap()\n        >>> h.build_max_heap([20,40,50,20,10])\n        >>> h\n        [50, 40, 20, 20, 10]\n\n        >>> h = Heap()\n        >>> h.build_max_heap([1,2,3,4,5,6,7,8,9,0])\n        >>> h\n        [9, 8, 7, 4, 5, 6, 3, 2, 1, 0]\n\n        >>> h = Heap()\n        >>> h.build_max_heap([514,5,61,57,8,99,105])\n        >>> h\n        [514, 57, 105, 5, 8, 99, 61]\n\n        >>> h = Heap()\n        >>> h.build_max_heap([514,5,61.6,57,8,9.9,105])\n        >>> h\n        [514, 57, 105, 5, 8, 9.9, 61.6]\n        \"\"\"\n        self.h = list(collection)\n        self.heap_size = len(self.h)\n        if self.heap_size > 1:\n            # max_heapify from right to left but exclude leaves (last level)\n            for i in range(self.heap_size // 2 - 1, -1, -1):\n                self.max_heapify(i)\n\n    def extract_max(self) -> T:\n        \"\"\"\n        get and remove max from heap\n\n        >>> h = Heap()\n        >>> h.build_max_heap([20,40,50,20,10])\n        >>> h.extract_max()\n        50\n\n        >>> h = Heap()\n        >>> h.build_max_heap([514,5,61,57,8,99,105])\n        >>> h.extract_max()\n        514\n\n        >>> h = Heap()\n        >>> h.build_max_heap([1,2,3,4,5,6,7,8,9,0])\n        >>> h.extract_max()\n        9\n        \"\"\"\n        if self.heap_size >= 2:\n            me = self.h[0]\n            self.h[0] = self.h.pop(-1)\n            self.heap_size -= 1\n            self.max_heapify(0)\n            return me\n        elif self.heap_size == 1:\n            self.heap_size -= 1\n            return self.h.pop(-1)\n        else:\n            raise Exception(\"Empty heap\")\n\n    def insert(self, value: T) -> None:\n        \"\"\"\n        insert a new value into the max heap\n\n        >>> h = Heap()\n        >>> h.insert(10)\n        >>> h\n        [10]\n\n        >>> h = Heap()\n        >>> h.insert(10)\n        >>> h.insert(10)\n        >>> h\n        [10, 10]\n\n        >>> h = Heap()\n        >>> h.insert(10)\n        >>> h.insert(10.1)\n        >>> h\n        [10.1, 10]\n\n        >>> h = Heap()\n        >>> h.insert(0.1)\n        >>> h.insert(0)\n        >>> h.insert(9)\n        >>> h.insert(5)\n        >>> h\n        [9, 5, 0.1, 0]\n        \"\"\"\n        self.h.append(value)\n        idx = (self.heap_size - 1) // 2\n        self.heap_size += 1\n        while idx >= 0:\n            self.max_heapify(idx)\n            idx = (idx - 1) // 2\n\n    def heap_sort(self) -> None:\n        size = self.heap_size\n        for j in range(size - 1, 0, -1):\n            self.h[0], self.h[j] = self.h[j], self.h[0]\n            self.heap_size -= 1\n            self.max_heapify(0)\n        self.heap_size = size\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    # run doc test\n    doctest.testmod()\n\n    # demo\n    for unsorted in [\n        [0],\n        [2],\n        [3, 5],\n        [5, 3],\n        [5, 5],\n        [0, 0, 0, 0],\n        [1, 1, 1, 1],\n        [2, 2, 3, 5],\n        [0, 2, 2, 3, 5],\n        [2, 5, 3, 0, 2, 3, 0, 3],\n        [6, 1, 2, 7, 9, 3, 4, 5, 10, 8],\n        [103, 9, 1, 7, 11, 15, 25, 201, 209, 107, 5],\n        [-45, -2, -5],\n    ]:\n        print(f\"unsorted array: {unsorted}\")\n\n        heap: Heap[int] = Heap()\n        heap.build_max_heap(unsorted)\n        print(f\"after build heap: {heap}\")\n\n        print(f\"max value: {heap.extract_max()}\")\n        print(f\"after max value removed: {heap}\")\n\n        heap.insert(100)\n        print(f\"after new value 100 inserted: {heap}\")\n\n        heap.heap_sort()\n        print(f\"heap-sorted array: {heap}\\n\")\n"
  },
  {
    "path": "data_structures/heap/heap_generic.py",
    "content": "from collections.abc import Callable\n\n\nclass Heap:\n    \"\"\"\n    A generic Heap class, can be used as min or max by passing the key function\n    accordingly.\n    \"\"\"\n\n    def __init__(self, key: Callable | None = None) -> None:\n        # Stores actual heap items.\n        self.arr: list = []\n        # Stores indexes of each item for supporting updates and deletion.\n        self.pos_map: dict = {}\n        # Stores current size of heap.\n        self.size = 0\n        # Stores function used to evaluate the score of an item on which basis ordering\n        # will be done.\n        self.key = key or (lambda x: x)\n\n    def _parent(self, i: int) -> int | None:\n        \"\"\"Returns parent index of given index if exists else None\"\"\"\n        return int((i - 1) / 2) if i > 0 else None\n\n    def _left(self, i: int) -> int | None:\n        \"\"\"Returns left-child-index of given index if exists else None\"\"\"\n        left = int(2 * i + 1)\n        return left if 0 < left < self.size else None\n\n    def _right(self, i: int) -> int | None:\n        \"\"\"Returns right-child-index of given index if exists else None\"\"\"\n        right = int(2 * i + 2)\n        return right if 0 < right < self.size else None\n\n    def _swap(self, i: int, j: int) -> None:\n        \"\"\"Performs changes required for swapping two elements in the heap\"\"\"\n        # First update the indexes of the items in index map.\n        self.pos_map[self.arr[i][0]], self.pos_map[self.arr[j][0]] = (\n            self.pos_map[self.arr[j][0]],\n            self.pos_map[self.arr[i][0]],\n        )\n        # Then swap the items in the list.\n        self.arr[i], self.arr[j] = self.arr[j], self.arr[i]\n\n    def _cmp(self, i: int, j: int) -> bool:\n        \"\"\"Compares the two items using default comparison\"\"\"\n        return self.arr[i][1] < self.arr[j][1]\n\n    def _get_valid_parent(self, i: int) -> int:\n        \"\"\"\n        Returns index of valid parent as per desired ordering among given index and\n        both it's children\n        \"\"\"\n        left = self._left(i)\n        right = self._right(i)\n        valid_parent = i\n\n        if left is not None and not self._cmp(left, valid_parent):\n            valid_parent = left\n        if right is not None and not self._cmp(right, valid_parent):\n            valid_parent = right\n\n        return valid_parent\n\n    def _heapify_up(self, index: int) -> None:\n        \"\"\"Fixes the heap in upward direction of given index\"\"\"\n        parent = self._parent(index)\n        while parent is not None and not self._cmp(index, parent):\n            self._swap(index, parent)\n            index, parent = parent, self._parent(parent)\n\n    def _heapify_down(self, index: int) -> None:\n        \"\"\"Fixes the heap in downward direction of given index\"\"\"\n        valid_parent = self._get_valid_parent(index)\n        while valid_parent != index:\n            self._swap(index, valid_parent)\n            index, valid_parent = valid_parent, self._get_valid_parent(valid_parent)\n\n    def update_item(self, item: int, item_value: int) -> None:\n        \"\"\"Updates given item value in heap if present\"\"\"\n        if item not in self.pos_map:\n            return\n        index = self.pos_map[item]\n        self.arr[index] = [item, self.key(item_value)]\n        # Make sure heap is right in both up and down direction.\n        # Ideally only one of them will make any change.\n        self._heapify_up(index)\n        self._heapify_down(index)\n\n    def delete_item(self, item: int) -> None:\n        \"\"\"Deletes given item from heap if present\"\"\"\n        if item not in self.pos_map:\n            return\n        index = self.pos_map[item]\n        del self.pos_map[item]\n        self.arr[index] = self.arr[self.size - 1]\n        self.pos_map[self.arr[self.size - 1][0]] = index\n        self.size -= 1\n        # Make sure heap is right in both up and down direction. Ideally only one\n        # of them will make any change- so no performance loss in calling both.\n        if self.size > index:\n            self._heapify_up(index)\n            self._heapify_down(index)\n\n    def insert_item(self, item: int, item_value: int) -> None:\n        \"\"\"Inserts given item with given value in heap\"\"\"\n        arr_len = len(self.arr)\n        if arr_len == self.size:\n            self.arr.append([item, self.key(item_value)])\n        else:\n            self.arr[self.size] = [item, self.key(item_value)]\n        self.pos_map[item] = self.size\n        self.size += 1\n        self._heapify_up(self.size - 1)\n\n    def get_top(self) -> tuple | None:\n        \"\"\"Returns top item tuple (Calculated value, item) from heap if present\"\"\"\n        return self.arr[0] if self.size else None\n\n    def extract_top(self) -> tuple | None:\n        \"\"\"\n        Return top item tuple (Calculated value, item) from heap and removes it as well\n        if present\n        \"\"\"\n        top_item_tuple = self.get_top()\n        if top_item_tuple:\n            self.delete_item(top_item_tuple[0])\n        return top_item_tuple\n\n\ndef test_heap() -> None:\n    \"\"\"\n    >>> h = Heap()  # Max-heap\n    >>> h.insert_item(5, 34)\n    >>> h.insert_item(6, 31)\n    >>> h.insert_item(7, 37)\n    >>> h.get_top()\n    [7, 37]\n    >>> h.extract_top()\n    [7, 37]\n    >>> h.extract_top()\n    [5, 34]\n    >>> h.extract_top()\n    [6, 31]\n    >>> h = Heap(key=lambda x: -x)  # Min heap\n    >>> h.insert_item(5, 34)\n    >>> h.insert_item(6, 31)\n    >>> h.insert_item(7, 37)\n    >>> h.get_top()\n    [6, -31]\n    >>> h.extract_top()\n    [6, -31]\n    >>> h.extract_top()\n    [5, -34]\n    >>> h.extract_top()\n    [7, -37]\n    >>> h.insert_item(8, 45)\n    >>> h.insert_item(9, 40)\n    >>> h.insert_item(10, 50)\n    >>> h.get_top()\n    [9, -40]\n    >>> h.update_item(10, 30)\n    >>> h.get_top()\n    [10, -30]\n    >>> h.delete_item(10)\n    >>> h.get_top()\n    [9, -40]\n    \"\"\"\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/heap/max_heap.py",
    "content": "class BinaryHeap:\n    \"\"\"\n    A max-heap implementation in Python\n    >>> binary_heap = BinaryHeap()\n    >>> binary_heap.insert(6)\n    >>> binary_heap.insert(10)\n    >>> binary_heap.insert(15)\n    >>> binary_heap.insert(12)\n    >>> binary_heap.pop()\n    15\n    >>> binary_heap.pop()\n    12\n    >>> binary_heap.get_list\n    [10, 6]\n    >>> len(binary_heap)\n    2\n    \"\"\"\n\n    def __init__(self):\n        self.__heap = [0]\n        self.__size = 0\n\n    def __swap_up(self, i: int) -> None:\n        \"\"\"Swap the element up\"\"\"\n        temporary = self.__heap[i]\n        while i // 2 > 0:\n            if self.__heap[i] > self.__heap[i // 2]:\n                self.__heap[i] = self.__heap[i // 2]\n                self.__heap[i // 2] = temporary\n            i //= 2\n\n    def insert(self, value: int) -> None:\n        \"\"\"Insert new element\"\"\"\n        self.__heap.append(value)\n        self.__size += 1\n        self.__swap_up(self.__size)\n\n    def __swap_down(self, i: int) -> None:\n        \"\"\"Swap the element down\"\"\"\n        while self.__size >= 2 * i:\n            if 2 * i + 1 > self.__size:  # noqa: SIM114\n                bigger_child = 2 * i\n            elif self.__heap[2 * i] > self.__heap[2 * i + 1]:\n                bigger_child = 2 * i\n            else:\n                bigger_child = 2 * i + 1\n            temporary = self.__heap[i]\n            if self.__heap[i] < self.__heap[bigger_child]:\n                self.__heap[i] = self.__heap[bigger_child]\n                self.__heap[bigger_child] = temporary\n            i = bigger_child\n\n    def pop(self) -> int:\n        \"\"\"Pop the root element\"\"\"\n        max_value = self.__heap[1]\n        self.__heap[1] = self.__heap[self.__size]\n        self.__size -= 1\n        self.__heap.pop()\n        self.__swap_down(1)\n        return max_value\n\n    @property\n    def get_list(self):\n        return self.__heap[1:]\n\n    def __len__(self):\n        \"\"\"Length of the array\"\"\"\n        return self.__size\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    # create an instance of BinaryHeap\n    binary_heap = BinaryHeap()\n    binary_heap.insert(6)\n    binary_heap.insert(10)\n    binary_heap.insert(15)\n    binary_heap.insert(12)\n    # pop root(max-values because it is max heap)\n    print(binary_heap.pop())  # 15\n    print(binary_heap.pop())  # 12\n    # get the list and size after operations\n    print(binary_heap.get_list)\n    print(len(binary_heap))\n"
  },
  {
    "path": "data_structures/heap/min_heap.py",
    "content": "# Min heap data structure\n# with decrease key functionality - in O(log(n)) time\n\n\nclass Node:\n    def __init__(self, name, val):\n        self.name = name\n        self.val = val\n\n    def __str__(self):\n        return f\"{self.__class__.__name__}({self.name}, {self.val})\"\n\n    def __lt__(self, other):\n        return self.val < other.val\n\n\nclass MinHeap:\n    \"\"\"\n    >>> r = Node(\"R\", -1)\n    >>> b = Node(\"B\", 6)\n    >>> a = Node(\"A\", 3)\n    >>> x = Node(\"X\", 1)\n    >>> e = Node(\"E\", 4)\n    >>> print(b)\n    Node(B, 6)\n    >>> myMinHeap = MinHeap([r, b, a, x, e])\n    >>> myMinHeap.decrease_key(b, -17)\n    >>> print(b)\n    Node(B, -17)\n    >>> myMinHeap[\"B\"]\n    -17\n    \"\"\"\n\n    def __init__(self, array):\n        self.idx_of_element = {}\n        self.heap_dict = {}\n        self.heap = self.build_heap(array)\n\n    def __getitem__(self, key):\n        return self.get_value(key)\n\n    def get_parent_idx(self, idx):\n        return (idx - 1) // 2\n\n    def get_left_child_idx(self, idx):\n        return idx * 2 + 1\n\n    def get_right_child_idx(self, idx):\n        return idx * 2 + 2\n\n    def get_value(self, key):\n        return self.heap_dict[key]\n\n    def build_heap(self, array):\n        last_idx = len(array) - 1\n        start_from = self.get_parent_idx(last_idx)\n\n        for idx, i in enumerate(array):\n            self.idx_of_element[i] = idx\n            self.heap_dict[i.name] = i.val\n\n        for i in range(start_from, -1, -1):\n            self.sift_down(i, array)\n        return array\n\n    # this is min-heapify method\n    def sift_down(self, idx, array):\n        while True:\n            left = self.get_left_child_idx(idx)\n            right = self.get_right_child_idx(idx)\n\n            smallest = idx\n            if left < len(array) and array[left] < array[idx]:\n                smallest = left\n            if right < len(array) and array[right] < array[smallest]:\n                smallest = right\n\n            if smallest != idx:\n                array[idx], array[smallest] = array[smallest], array[idx]\n                (\n                    self.idx_of_element[array[idx]],\n                    self.idx_of_element[array[smallest]],\n                ) = (\n                    self.idx_of_element[array[smallest]],\n                    self.idx_of_element[array[idx]],\n                )\n                idx = smallest\n            else:\n                break\n\n    def sift_up(self, idx):\n        p = self.get_parent_idx(idx)\n        while p >= 0 and self.heap[p] > self.heap[idx]:\n            self.heap[p], self.heap[idx] = self.heap[idx], self.heap[p]\n            self.idx_of_element[self.heap[p]], self.idx_of_element[self.heap[idx]] = (\n                self.idx_of_element[self.heap[idx]],\n                self.idx_of_element[self.heap[p]],\n            )\n            idx = p\n            p = self.get_parent_idx(idx)\n\n    def peek(self):\n        return self.heap[0]\n\n    def remove(self):\n        self.heap[0], self.heap[-1] = self.heap[-1], self.heap[0]\n        self.idx_of_element[self.heap[0]], self.idx_of_element[self.heap[-1]] = (\n            self.idx_of_element[self.heap[-1]],\n            self.idx_of_element[self.heap[0]],\n        )\n\n        x = self.heap.pop()\n        del self.idx_of_element[x]\n        self.sift_down(0, self.heap)\n        return x\n\n    def insert(self, node):\n        self.heap.append(node)\n        self.idx_of_element[node] = len(self.heap) - 1\n        self.heap_dict[node.name] = node.val\n        self.sift_up(len(self.heap) - 1)\n\n    def is_empty(self):\n        return len(self.heap) == 0\n\n    def decrease_key(self, node, new_value):\n        assert self.heap[self.idx_of_element[node]].val > new_value, (\n            \"newValue must be less that current value\"\n        )\n        node.val = new_value\n        self.heap_dict[node.name] = new_value\n        self.sift_up(self.idx_of_element[node])\n\n\n# USAGE\n\nr = Node(\"R\", -1)\nb = Node(\"B\", 6)\na = Node(\"A\", 3)\nx = Node(\"X\", 1)\ne = Node(\"E\", 4)\n\n# Use one of these two ways to generate Min-Heap\n\n# Generating Min-Heap from array\nmy_min_heap = MinHeap([r, b, a, x, e])\n\n# Generating Min-Heap by Insert method\n# myMinHeap.insert(a)\n# myMinHeap.insert(b)\n# myMinHeap.insert(x)\n# myMinHeap.insert(r)\n# myMinHeap.insert(e)\n\n# Before\nprint(\"Min Heap - before decrease key\")\nfor i in my_min_heap.heap:\n    print(i)\n\nprint(\"Min Heap - After decrease key of node [B -> -17]\")\nmy_min_heap.decrease_key(b, -17)\n\n# After\nfor i in my_min_heap.heap:\n    print(i)\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/heap/randomized_heap.py",
    "content": "#!/usr/bin/env python3\n\nfrom __future__ import annotations\n\nimport random\nfrom collections.abc import Iterable\nfrom typing import Any, TypeVar\n\nT = TypeVar(\"T\", bound=bool)\n\n\nclass RandomizedHeapNode[T: bool]:\n    \"\"\"\n    One node of the randomized heap. Contains the value and references to\n    two children.\n    \"\"\"\n\n    def __init__(self, value: T) -> None:\n        self._value: T = value\n        self.left: RandomizedHeapNode[T] | None = None\n        self.right: RandomizedHeapNode[T] | None = None\n\n    @property\n    def value(self) -> T:\n        \"\"\"\n        Return the value of the node.\n\n        >>> rhn = RandomizedHeapNode(10)\n        >>> rhn.value\n        10\n        >>> rhn = RandomizedHeapNode(-10)\n        >>> rhn.value\n        -10\n        \"\"\"\n        return self._value\n\n    @staticmethod\n    def merge(\n        root1: RandomizedHeapNode[T] | None, root2: RandomizedHeapNode[T] | None\n    ) -> RandomizedHeapNode[T] | None:\n        \"\"\"\n        Merge 2 nodes together.\n\n        >>> rhn1 = RandomizedHeapNode(10)\n        >>> rhn2 = RandomizedHeapNode(20)\n        >>> RandomizedHeapNode.merge(rhn1, rhn2).value\n        10\n\n        >>> rhn1 = RandomizedHeapNode(20)\n        >>> rhn2 = RandomizedHeapNode(10)\n        >>> RandomizedHeapNode.merge(rhn1, rhn2).value\n        10\n\n        >>> rhn1 = RandomizedHeapNode(5)\n        >>> rhn2 = RandomizedHeapNode(0)\n        >>> RandomizedHeapNode.merge(rhn1, rhn2).value\n        0\n        \"\"\"\n        if not root1:\n            return root2\n\n        if not root2:\n            return root1\n\n        if root1.value > root2.value:\n            root1, root2 = root2, root1\n\n        if random.choice([True, False]):\n            root1.left, root1.right = root1.right, root1.left\n\n        root1.left = RandomizedHeapNode.merge(root1.left, root2)\n\n        return root1\n\n\nclass RandomizedHeap[T: bool]:\n    \"\"\"\n    A data structure that allows inserting a new value and to pop the smallest\n    values. Both operations take O(logN) time where N is the size of the\n    structure.\n    Wiki: https://en.wikipedia.org/wiki/Randomized_meldable_heap\n\n    >>> RandomizedHeap([2, 3, 1, 5, 1, 7]).to_sorted_list()\n    [1, 1, 2, 3, 5, 7]\n\n    >>> rh = RandomizedHeap()\n    >>> rh.pop()\n    Traceback (most recent call last):\n        ...\n    IndexError: Can't get top element for the empty heap.\n\n    >>> rh.insert(1)\n    >>> rh.insert(-1)\n    >>> rh.insert(0)\n    >>> rh.to_sorted_list()\n    [-1, 0, 1]\n    \"\"\"\n\n    def __init__(self, data: Iterable[T] | None = ()) -> None:\n        \"\"\"\n        >>> rh = RandomizedHeap([3, 1, 3, 7])\n        >>> rh.to_sorted_list()\n        [1, 3, 3, 7]\n        \"\"\"\n        self._root: RandomizedHeapNode[T] | None = None\n\n        if data:\n            for item in data:\n                self.insert(item)\n\n    def insert(self, value: T) -> None:\n        \"\"\"\n        Insert the value into the heap.\n\n        >>> rh = RandomizedHeap()\n        >>> rh.insert(3)\n        >>> rh.insert(1)\n        >>> rh.insert(3)\n        >>> rh.insert(7)\n        >>> rh.to_sorted_list()\n        [1, 3, 3, 7]\n        \"\"\"\n        self._root = RandomizedHeapNode.merge(self._root, RandomizedHeapNode(value))\n\n    def pop(self) -> T | None:\n        \"\"\"\n        Pop the smallest value from the heap and return it.\n\n        >>> rh = RandomizedHeap([3, 1, 3, 7])\n        >>> rh.pop()\n        1\n        >>> rh.pop()\n        3\n        >>> rh.pop()\n        3\n        >>> rh.pop()\n        7\n        >>> rh.pop()\n        Traceback (most recent call last):\n            ...\n        IndexError: Can't get top element for the empty heap.\n        \"\"\"\n\n        result = self.top()\n\n        if self._root is None:\n            return None\n\n        self._root = RandomizedHeapNode.merge(self._root.left, self._root.right)\n\n        return result\n\n    def top(self) -> T:\n        \"\"\"\n        Return the smallest value from the heap.\n\n        >>> rh = RandomizedHeap()\n        >>> rh.insert(3)\n        >>> rh.top()\n        3\n        >>> rh.insert(1)\n        >>> rh.top()\n        1\n        >>> rh.insert(3)\n        >>> rh.top()\n        1\n        >>> rh.insert(7)\n        >>> rh.top()\n        1\n        \"\"\"\n        if not self._root:\n            raise IndexError(\"Can't get top element for the empty heap.\")\n        return self._root.value\n\n    def clear(self) -> None:\n        \"\"\"\n        Clear the heap.\n\n        >>> rh = RandomizedHeap([3, 1, 3, 7])\n        >>> rh.clear()\n        >>> rh.pop()\n        Traceback (most recent call last):\n            ...\n        IndexError: Can't get top element for the empty heap.\n        \"\"\"\n        self._root = None\n\n    def to_sorted_list(self) -> list[Any]:\n        \"\"\"\n        Returns sorted list containing all the values in the heap.\n\n        >>> rh = RandomizedHeap([3, 1, 3, 7])\n        >>> rh.to_sorted_list()\n        [1, 3, 3, 7]\n        \"\"\"\n        result = []\n        while self:\n            result.append(self.pop())\n\n        return result\n\n    def __bool__(self) -> bool:\n        \"\"\"\n        Check if the heap is not empty.\n\n        >>> rh = RandomizedHeap()\n        >>> bool(rh)\n        False\n        >>> rh.insert(1)\n        >>> bool(rh)\n        True\n        >>> rh.clear()\n        >>> bool(rh)\n        False\n        \"\"\"\n        return self._root is not None\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/heap/skew_heap.py",
    "content": "#!/usr/bin/env python3\n\nfrom __future__ import annotations\n\nfrom collections.abc import Iterable, Iterator\nfrom typing import Any, TypeVar\n\nT = TypeVar(\"T\", bound=bool)\n\n\nclass SkewNode[T: bool]:\n    \"\"\"\n    One node of the skew heap. Contains the value and references to\n    two children.\n    \"\"\"\n\n    def __init__(self, value: T) -> None:\n        self._value: T = value\n        self.left: SkewNode[T] | None = None\n        self.right: SkewNode[T] | None = None\n\n    @property\n    def value(self) -> T:\n        \"\"\"\n        Return the value of the node.\n\n        >>> SkewNode(0).value\n        0\n        >>> SkewNode(3.14159).value\n        3.14159\n        >>> SkewNode(\"hello\").value\n        'hello'\n        >>> SkewNode(None).value\n\n        >>> SkewNode(True).value\n        True\n        >>> SkewNode([]).value\n        []\n        >>> SkewNode({}).value\n        {}\n        >>> SkewNode(set()).value\n        set()\n        >>> SkewNode(0.0).value\n        0.0\n        >>> SkewNode(-1e-10).value\n        -1e-10\n        >>> SkewNode(10).value\n        10\n        >>> SkewNode(-10.5).value\n        -10.5\n        >>> SkewNode().value\n        Traceback (most recent call last):\n        ...\n        TypeError: SkewNode.__init__() missing 1 required positional argument: 'value'\n        \"\"\"\n        return self._value\n\n    @staticmethod\n    def merge(\n        root1: SkewNode[T] | None, root2: SkewNode[T] | None\n    ) -> SkewNode[T] | None:\n        \"\"\"\n        Merge 2 nodes together.\n        >>> SkewNode.merge(SkewNode(10),SkewNode(-10.5)).value\n        -10.5\n        >>> SkewNode.merge(SkewNode(10),SkewNode(10.5)).value\n        10\n        >>> SkewNode.merge(SkewNode(10),SkewNode(10)).value\n        10\n        >>> SkewNode.merge(SkewNode(-100),SkewNode(-10.5)).value\n        -100\n        \"\"\"\n        if not root1:\n            return root2\n\n        if not root2:\n            return root1\n\n        if root1.value > root2.value:\n            root1, root2 = root2, root1\n\n        result = root1\n        temp = root1.right\n        result.right = root1.left\n        result.left = SkewNode.merge(temp, root2)\n\n        return result\n\n\nclass SkewHeap[T: bool]:\n    \"\"\"\n    A data structure that allows inserting a new value and to pop the smallest\n    values. Both operations take O(logN) time where N is the size of the\n    structure.\n    Wiki: https://en.wikipedia.org/wiki/Skew_heap\n    Visualization: https://www.cs.usfca.edu/~galles/visualization/SkewHeap.html\n\n    >>> list(SkewHeap([2, 3, 1, 5, 1, 7]))\n    [1, 1, 2, 3, 5, 7]\n\n    >>> sh = SkewHeap()\n    >>> sh.pop()\n    Traceback (most recent call last):\n        ...\n    IndexError: Can't get top element for the empty heap.\n\n    >>> sh.insert(1)\n    >>> sh.insert(-1)\n    >>> sh.insert(0)\n    >>> list(sh)\n    [-1, 0, 1]\n    \"\"\"\n\n    def __init__(self, data: Iterable[T] | None = ()) -> None:\n        \"\"\"\n        >>> sh = SkewHeap([3, 1, 3, 7])\n        >>> list(sh)\n        [1, 3, 3, 7]\n        \"\"\"\n        self._root: SkewNode[T] | None = None\n        if data:\n            for item in data:\n                self.insert(item)\n\n    def __bool__(self) -> bool:\n        \"\"\"\n        Check if the heap is not empty.\n\n        >>> sh = SkewHeap()\n        >>> bool(sh)\n        False\n        >>> sh.insert(1)\n        >>> bool(sh)\n        True\n        >>> sh.clear()\n        >>> bool(sh)\n        False\n        \"\"\"\n        return self._root is not None\n\n    def __iter__(self) -> Iterator[T]:\n        \"\"\"\n        Returns sorted list containing all the values in the heap.\n\n        >>> sh = SkewHeap([3, 1, 3, 7])\n        >>> list(sh)\n        [1, 3, 3, 7]\n        \"\"\"\n        result: list[Any] = []\n        while self:\n            result.append(self.pop())\n\n        # Pushing items back to the heap not to clear it.\n        for item in result:\n            self.insert(item)\n\n        return iter(result)\n\n    def insert(self, value: T) -> None:\n        \"\"\"\n        Insert the value into the heap.\n\n        >>> sh = SkewHeap()\n        >>> sh.insert(3)\n        >>> sh.insert(1)\n        >>> sh.insert(3)\n        >>> sh.insert(7)\n        >>> list(sh)\n        [1, 3, 3, 7]\n        \"\"\"\n        self._root = SkewNode.merge(self._root, SkewNode(value))\n\n    def pop(self) -> T | None:\n        \"\"\"\n        Pop the smallest value from the heap and return it.\n\n        >>> sh = SkewHeap([3, 1, 3, 7])\n        >>> sh.pop()\n        1\n        >>> sh.pop()\n        3\n        >>> sh.pop()\n        3\n        >>> sh.pop()\n        7\n        >>> sh.pop()\n        Traceback (most recent call last):\n            ...\n        IndexError: Can't get top element for the empty heap.\n        \"\"\"\n        result = self.top()\n        self._root = (\n            SkewNode.merge(self._root.left, self._root.right) if self._root else None\n        )\n\n        return result\n\n    def top(self) -> T:\n        \"\"\"\n        Return the smallest value from the heap.\n\n        >>> sh = SkewHeap()\n        >>> sh.insert(3)\n        >>> sh.top()\n        3\n        >>> sh.insert(1)\n        >>> sh.top()\n        1\n        >>> sh.insert(3)\n        >>> sh.top()\n        1\n        >>> sh.insert(7)\n        >>> sh.top()\n        1\n        \"\"\"\n        if not self._root:\n            raise IndexError(\"Can't get top element for the empty heap.\")\n        return self._root.value\n\n    def clear(self) -> None:\n        \"\"\"\n        Clear the heap.\n\n        >>> sh = SkewHeap([3, 1, 3, 7])\n        >>> sh.clear()\n        >>> sh.pop()\n        Traceback (most recent call last):\n            ...\n        IndexError: Can't get top element for the empty heap.\n        \"\"\"\n        self._root = None\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/kd_tree/__init__.py",
    "content": ""
  },
  {
    "path": "data_structures/kd_tree/build_kdtree.py",
    "content": "#  Created by: Ramy-Badr-Ahmed (https://github.com/Ramy-Badr-Ahmed)\n#  in Pull Request: #11532\n#  https://github.com/TheAlgorithms/Python/pull/11532\n#\n#  Please mention me (@Ramy-Badr-Ahmed) in any issue or pull request\n#  addressing bugs/corrections to this file.\n#  Thank you!\n\nfrom data_structures.kd_tree.kd_node import KDNode\n\n\ndef build_kdtree(points: list[list[float]], depth: int = 0) -> KDNode | None:\n    \"\"\"\n    Builds a KD-Tree from a list of points.\n\n    Args:\n        points: The list of points to build the KD-Tree from.\n        depth: The current depth in the tree\n                     (used to determine axis for splitting).\n\n    Returns:\n        The root node of the KD-Tree,\n                       or None if no points are provided.\n    \"\"\"\n    if not points:\n        return None\n\n    k = len(points[0])  # Dimensionality of the points\n    axis = depth % k\n\n    # Sort point list and choose median as pivot element\n    points.sort(key=lambda point: point[axis])\n    median_idx = len(points) // 2\n\n    # Create node and construct subtrees\n    left_points = points[:median_idx]\n    right_points = points[median_idx + 1 :]\n\n    return KDNode(\n        point=points[median_idx],\n        left=build_kdtree(left_points, depth + 1),\n        right=build_kdtree(right_points, depth + 1),\n    )\n"
  },
  {
    "path": "data_structures/kd_tree/example/__init__.py",
    "content": ""
  },
  {
    "path": "data_structures/kd_tree/example/example_usage.py",
    "content": "#  Created by: Ramy-Badr-Ahmed (https://github.com/Ramy-Badr-Ahmed)\n#  in Pull Request: #11532\n#  https://github.com/TheAlgorithms/Python/pull/11532\n#\n#  Please mention me (@Ramy-Badr-Ahmed) in any issue or pull request\n#  addressing bugs/corrections to this file.\n#  Thank you!\n\nimport numpy as np\n\nfrom data_structures.kd_tree.build_kdtree import build_kdtree\nfrom data_structures.kd_tree.example.hypercube_points import hypercube_points\nfrom data_structures.kd_tree.nearest_neighbour_search import nearest_neighbour_search\n\n\ndef main() -> None:\n    \"\"\"\n    Demonstrates the use of KD-Tree by building it from random points\n    in a 10-dimensional hypercube and performing a nearest neighbor search.\n    \"\"\"\n    num_points: int = 5000\n    cube_size: float = 10.0  # Size of the hypercube (edge length)\n    num_dimensions: int = 10\n\n    # Generate random points within the hypercube\n    points: np.ndarray = hypercube_points(num_points, cube_size, num_dimensions)\n    hypercube_kdtree = build_kdtree(points.tolist())\n\n    # Generate a random query point within the same space\n    rng = np.random.default_rng()\n    query_point: list[float] = rng.random(num_dimensions).tolist()\n\n    # Perform nearest neighbor search\n    nearest_point, nearest_dist, nodes_visited = nearest_neighbour_search(\n        hypercube_kdtree, query_point\n    )\n\n    # Print the results\n    print(f\"Query point: {query_point}\")\n    print(f\"Nearest point: {nearest_point}\")\n    print(f\"Distance: {nearest_dist:.4f}\")\n    print(f\"Nodes visited: {nodes_visited}\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "data_structures/kd_tree/example/hypercube_points.py",
    "content": "#  Created by: Ramy-Badr-Ahmed (https://github.com/Ramy-Badr-Ahmed)\n#  in Pull Request: #11532\n#  https://github.com/TheAlgorithms/Python/pull/11532\n#\n#  Please mention me (@Ramy-Badr-Ahmed) in any issue or pull request\n#  addressing bugs/corrections to this file.\n#  Thank you!\n\nimport numpy as np\n\n\ndef hypercube_points(\n    num_points: int, hypercube_size: float, num_dimensions: int\n) -> np.ndarray:\n    \"\"\"\n    Generates random points uniformly distributed within an n-dimensional hypercube.\n\n    Args:\n        num_points: Number of points to generate.\n        hypercube_size: Size of the hypercube.\n        num_dimensions: Number of dimensions of the hypercube.\n\n    Returns:\n        An array of shape (num_points, num_dimensions)\n                    with generated points.\n    \"\"\"\n    rng = np.random.default_rng()\n    shape = (num_points, num_dimensions)\n    return hypercube_size * rng.random(shape)\n"
  },
  {
    "path": "data_structures/kd_tree/kd_node.py",
    "content": "#  Created by: Ramy-Badr-Ahmed (https://github.com/Ramy-Badr-Ahmed)\n#  in Pull Request: #11532\n#  https://github.com/TheAlgorithms/Python/pull/11532\n#\n#  Please mention me (@Ramy-Badr-Ahmed) in any issue or pull request\n#  addressing bugs/corrections to this file.\n#  Thank you!\n\nfrom __future__ import annotations\n\n\nclass KDNode:\n    \"\"\"\n    Represents a node in a KD-Tree.\n\n    Attributes:\n        point: The point stored in this node.\n        left: The left child node.\n        right: The right child node.\n    \"\"\"\n\n    def __init__(\n        self,\n        point: list[float],\n        left: KDNode | None = None,\n        right: KDNode | None = None,\n    ) -> None:\n        \"\"\"\n        Initializes a KDNode with the given point and child nodes.\n\n        Args:\n            point (list[float]): The point stored in this node.\n            left (Optional[KDNode]): The left child node.\n            right (Optional[KDNode]): The right child node.\n        \"\"\"\n        self.point = point\n        self.left = left\n        self.right = right\n"
  },
  {
    "path": "data_structures/kd_tree/nearest_neighbour_search.py",
    "content": "#  Created by: Ramy-Badr-Ahmed (https://github.com/Ramy-Badr-Ahmed)\n#  in Pull Request: #11532\n#  https://github.com/TheAlgorithms/Python/pull/11532\n#\n#  Please mention me (@Ramy-Badr-Ahmed) in any issue or pull request\n#  addressing bugs/corrections to this file.\n#  Thank you!\n\nfrom data_structures.kd_tree.kd_node import KDNode\n\n\ndef nearest_neighbour_search(\n    root: KDNode | None, query_point: list[float]\n) -> tuple[list[float] | None, float, int]:\n    \"\"\"\n    Performs a nearest neighbor search in a KD-Tree for a given query point.\n\n    Args:\n        root (KDNode | None): The root node of the KD-Tree.\n        query_point (list[float]): The point for which the nearest neighbor\n                                    is being searched.\n\n    Returns:\n        tuple[list[float] | None, float, int]:\n            - The nearest point found in the KD-Tree to the query point,\n              or None if no point is found.\n            - The squared distance to the nearest point.\n            - The number of nodes visited during the search.\n    \"\"\"\n    nearest_point: list[float] | None = None\n    nearest_dist: float = float(\"inf\")\n    nodes_visited: int = 0\n\n    def search(node: KDNode | None, depth: int = 0) -> None:\n        \"\"\"\n        Recursively searches for the nearest neighbor in the KD-Tree.\n\n        Args:\n            node: The current node in the KD-Tree.\n            depth: The current depth in the KD-Tree.\n        \"\"\"\n        nonlocal nearest_point, nearest_dist, nodes_visited\n        if node is None:\n            return\n\n        nodes_visited += 1\n\n        # Calculate the current distance (squared distance)\n        current_point = node.point\n        current_dist = sum(\n            (query_coord - point_coord) ** 2\n            for query_coord, point_coord in zip(query_point, current_point)\n        )\n\n        # Update nearest point if the current node is closer\n        if nearest_point is None or current_dist < nearest_dist:\n            nearest_point = current_point\n            nearest_dist = current_dist\n\n        # Determine which subtree to search first (based on axis and query point)\n        k = len(query_point)  # Dimensionality of points\n        axis = depth % k\n\n        if query_point[axis] <= current_point[axis]:\n            nearer_subtree = node.left\n            further_subtree = node.right\n        else:\n            nearer_subtree = node.right\n            further_subtree = node.left\n\n        # Search the nearer subtree first\n        search(nearer_subtree, depth + 1)\n\n        # If the further subtree has a closer point\n        if (query_point[axis] - current_point[axis]) ** 2 < nearest_dist:\n            search(further_subtree, depth + 1)\n\n    search(root, 0)\n    return nearest_point, nearest_dist, nodes_visited\n"
  },
  {
    "path": "data_structures/kd_tree/tests/__init__.py",
    "content": ""
  },
  {
    "path": "data_structures/kd_tree/tests/test_kdtree.py",
    "content": "#  Created by: Ramy-Badr-Ahmed (https://github.com/Ramy-Badr-Ahmed)\n#  in Pull Request: #11532\n#  https://github.com/TheAlgorithms/Python/pull/11532\n#\n#  Please mention me (@Ramy-Badr-Ahmed) in any issue or pull request\n#  addressing bugs/corrections to this file.\n#  Thank you!\n\nimport numpy as np\nimport pytest\n\nfrom data_structures.kd_tree.build_kdtree import build_kdtree\nfrom data_structures.kd_tree.example.hypercube_points import hypercube_points\nfrom data_structures.kd_tree.kd_node import KDNode\nfrom data_structures.kd_tree.nearest_neighbour_search import nearest_neighbour_search\n\n\n@pytest.mark.parametrize(\n    (\"num_points\", \"cube_size\", \"num_dimensions\", \"depth\", \"expected_result\"),\n    [\n        (0, 10.0, 2, 0, None),  # Empty points list\n        (10, 10.0, 2, 2, KDNode),  # Depth = 2, 2D points\n        (10, 10.0, 3, -2, KDNode),  # Depth = -2, 3D points\n    ],\n)\ndef test_build_kdtree(num_points, cube_size, num_dimensions, depth, expected_result):\n    \"\"\"\n    Test that KD-Tree is built correctly.\n\n    Cases:\n        - Empty points list.\n        - Positive depth value.\n        - Negative depth value.\n    \"\"\"\n    points = (\n        hypercube_points(num_points, cube_size, num_dimensions).tolist()\n        if num_points > 0\n        else []\n    )\n\n    kdtree = build_kdtree(points, depth=depth)\n\n    if expected_result is None:\n        # Empty points list case\n        assert kdtree is None, f\"Expected None for empty points list, got {kdtree}\"\n    else:\n        # Check if root node is not None\n        assert kdtree is not None, \"Expected a KDNode, got None\"\n\n        # Check if root has correct dimensions\n        assert len(kdtree.point) == num_dimensions, (\n            f\"Expected point dimension {num_dimensions}, got {len(kdtree.point)}\"\n        )\n\n        # Check that the tree is balanced to some extent (simplistic check)\n        assert isinstance(kdtree, KDNode), (\n            f\"Expected KDNode instance, got {type(kdtree)}\"\n        )\n\n\ndef test_nearest_neighbour_search():\n    \"\"\"\n    Test the nearest neighbor search function.\n    \"\"\"\n    num_points = 10\n    cube_size = 10.0\n    num_dimensions = 2\n    points = hypercube_points(num_points, cube_size, num_dimensions)\n    kdtree = build_kdtree(points.tolist())\n\n    rng = np.random.default_rng()\n    query_point = rng.random(num_dimensions).tolist()\n\n    nearest_point, nearest_dist, nodes_visited = nearest_neighbour_search(\n        kdtree, query_point\n    )\n\n    # Check that nearest point is not None\n    assert nearest_point is not None\n\n    # Check that distance is a non-negative number\n    assert nearest_dist >= 0\n\n    # Check that nodes visited is a non-negative integer\n    assert nodes_visited >= 0\n\n\ndef test_edge_cases():\n    \"\"\"\n    Test edge cases such as an empty KD-Tree.\n    \"\"\"\n    empty_kdtree = build_kdtree([])\n    query_point = [0.0] * 2  # Using a default 2D query point\n\n    nearest_point, nearest_dist, nodes_visited = nearest_neighbour_search(\n        empty_kdtree, query_point\n    )\n\n    # With an empty KD-Tree, nearest_point should be None\n    assert nearest_point is None\n    assert nearest_dist == float(\"inf\")\n    assert nodes_visited == 0\n\n\nif __name__ == \"__main__\":\n    import pytest\n\n    pytest.main()\n"
  },
  {
    "path": "data_structures/linked_list/__init__.py",
    "content": "\"\"\"\nLinked Lists consists of Nodes.\nNodes contain data and also may link to other nodes:\n    - Head Node: First node, the address of the\n                 head node gives us access of the complete list\n    - Last node: points to null\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom typing import Any\n\n\nclass Node:\n    def __init__(self, item: Any, next: Any) -> None:  # noqa: A002\n        self.item = item\n        self.next = next\n\n\nclass LinkedList:\n    def __init__(self) -> None:\n        self.head: Node | None = None\n        self.size = 0\n\n    def add(self, item: Any, position: int = 0) -> None:\n        \"\"\"\n        Add an item to the LinkedList at the specified position.\n        Default position is 0 (the head).\n\n        Args:\n            item (Any): The item to add to the LinkedList.\n            position (int, optional): The position at which to add the item.\n                Defaults to 0.\n\n        Raises:\n            ValueError: If the position is negative or out of bounds.\n\n        >>> linked_list = LinkedList()\n        >>> linked_list.add(1)\n        >>> linked_list.add(2)\n        >>> linked_list.add(3)\n        >>> linked_list.add(4, 2)\n        >>> print(linked_list)\n        3 --> 2 --> 4 --> 1\n\n        # Test adding to a negative position\n        >>> linked_list.add(5, -3)\n        Traceback (most recent call last):\n            ...\n        ValueError: Position must be non-negative\n\n        # Test adding to an out-of-bounds position\n        >>> linked_list.add(5,7)\n        Traceback (most recent call last):\n            ...\n        ValueError: Out of bounds\n        >>> linked_list.add(5, 4)\n        >>> print(linked_list)\n        3 --> 2 --> 4 --> 1 --> 5\n        \"\"\"\n        if position < 0:\n            raise ValueError(\"Position must be non-negative\")\n\n        if position == 0 or self.head is None:\n            new_node = Node(item, self.head)\n            self.head = new_node\n        else:\n            current = self.head\n            for _ in range(position - 1):\n                current = current.next\n                if current is None:\n                    raise ValueError(\"Out of bounds\")\n            new_node = Node(item, current.next)\n            current.next = new_node\n        self.size += 1\n\n    def remove(self) -> Any:\n        # Switched 'self.is_empty()' to 'self.head is None'\n        # because mypy was considering the possibility that 'self.head'\n        # can be None in below else part and giving error\n        if self.head is None:\n            return None\n        else:\n            item = self.head.item\n            self.head = self.head.next\n            self.size -= 1\n            return item\n\n    def is_empty(self) -> bool:\n        return self.head is None\n\n    def __str__(self) -> str:\n        \"\"\"\n        >>> linked_list = LinkedList()\n        >>> linked_list.add(23)\n        >>> linked_list.add(14)\n        >>> linked_list.add(9)\n        >>> print(linked_list)\n        9 --> 14 --> 23\n        \"\"\"\n        if self.is_empty():\n            return \"\"\n        else:\n            iterate = self.head\n            item_str = \"\"\n            item_list: list[str] = []\n            while iterate:\n                item_list.append(str(iterate.item))\n                iterate = iterate.next\n\n            item_str = \" --> \".join(item_list)\n\n            return item_str\n\n    def __len__(self) -> int:\n        \"\"\"\n        >>> linked_list = LinkedList()\n        >>> len(linked_list)\n        0\n        >>> linked_list.add(\"a\")\n        >>> len(linked_list)\n        1\n        >>> linked_list.add(\"b\")\n        >>> len(linked_list)\n        2\n        >>> _ = linked_list.remove()\n        >>> len(linked_list)\n        1\n        >>> _ = linked_list.remove()\n        >>> len(linked_list)\n        0\n        \"\"\"\n        return self.size\n"
  },
  {
    "path": "data_structures/linked_list/circular_linked_list.py",
    "content": "from __future__ import annotations\n\nfrom collections.abc import Iterator\nfrom dataclasses import dataclass\nfrom typing import Any\n\n\n@dataclass\nclass Node:\n    data: Any\n    next_node: Node | None = None\n\n\n@dataclass\nclass CircularLinkedList:\n    head: Node | None = None  # Reference to the head (first node)\n    tail: Node | None = None  # Reference to the tail (last node)\n\n    def __iter__(self) -> Iterator[Any]:\n        \"\"\"\n        Iterate through all nodes in the Circular Linked List yielding their data.\n        Yields:\n            The data of each node in the linked list.\n        \"\"\"\n        node = self.head\n        while node:\n            yield node.data\n            node = node.next_node\n            if node == self.head:\n                break\n\n    def __len__(self) -> int:\n        \"\"\"\n        Get the length (number of nodes) in the Circular Linked List.\n        \"\"\"\n        return sum(1 for _ in self)\n\n    def __repr__(self) -> str:\n        \"\"\"\n        Generate a string representation of the Circular Linked List.\n        Returns:\n            A string of the format \"1->2->....->N\".\n        \"\"\"\n        return \"->\".join(str(item) for item in iter(self))\n\n    def insert_tail(self, data: Any) -> None:\n        \"\"\"\n        Insert a node with the given data at the end of the Circular Linked List.\n        \"\"\"\n        self.insert_nth(len(self), data)\n\n    def insert_head(self, data: Any) -> None:\n        \"\"\"\n        Insert a node with the given data at the beginning of the Circular Linked List.\n        \"\"\"\n        self.insert_nth(0, data)\n\n    def insert_nth(self, index: int, data: Any) -> None:\n        \"\"\"\n        Insert the data of the node at the nth pos in the Circular Linked List.\n        Args:\n            index: The index at which the data should be inserted.\n            data: The data to be inserted.\n\n        Raises:\n            IndexError: If the index is out of range.\n        \"\"\"\n        if index < 0 or index > len(self):\n            raise IndexError(\"list index out of range.\")\n        new_node: Node = Node(data)\n        if self.head is None:\n            new_node.next_node = new_node  # First node points to itself\n            self.tail = self.head = new_node\n        elif index == 0:  # Insert at the head\n            new_node.next_node = self.head\n            assert self.tail is not None  # List is not empty, tail exists\n            self.head = self.tail.next_node = new_node\n        else:\n            temp: Node | None = self.head\n            for _ in range(index - 1):\n                assert temp is not None\n                temp = temp.next_node\n            assert temp is not None\n            new_node.next_node = temp.next_node\n            temp.next_node = new_node\n            if index == len(self) - 1:  # Insert at the tail\n                self.tail = new_node\n\n    def delete_front(self) -> Any:\n        \"\"\"\n        Delete and return the data of the node at the front of the Circular Linked List.\n        Raises:\n            IndexError: If the list is empty.\n        \"\"\"\n        return self.delete_nth(0)\n\n    def delete_tail(self) -> Any:\n        \"\"\"\n        Delete and return the data of the node at the end of the Circular Linked List.\n        Returns:\n            Any: The data of the deleted node.\n        Raises:\n            IndexError: If the index is out of range.\n        \"\"\"\n        return self.delete_nth(len(self) - 1)\n\n    def delete_nth(self, index: int = 0) -> Any:\n        \"\"\"\n        Delete and return the data of the node at the nth pos in Circular Linked List.\n        Args:\n            index (int): The index of the node to be deleted. Defaults to 0.\n        Returns:\n            Any: The data of the deleted node.\n        Raises:\n            IndexError: If the index is out of range.\n        \"\"\"\n        if not 0 <= index < len(self):\n            raise IndexError(\"list index out of range.\")\n\n        assert self.head is not None\n        assert self.tail is not None\n        delete_node: Node = self.head\n        if self.head == self.tail:  # Just one node\n            self.head = self.tail = None\n        elif index == 0:  # Delete head node\n            assert self.tail.next_node is not None\n            self.tail.next_node = self.tail.next_node.next_node\n            self.head = self.head.next_node\n        else:\n            temp: Node | None = self.head\n            for _ in range(index - 1):\n                assert temp is not None\n                temp = temp.next_node\n            assert temp is not None\n            assert temp.next_node is not None\n            delete_node = temp.next_node\n            temp.next_node = temp.next_node.next_node\n            if index == len(self) - 1:  # Delete at tail\n                self.tail = temp\n        return delete_node.data\n\n    def is_empty(self) -> bool:\n        \"\"\"\n        Check if the Circular Linked List is empty.\n        Returns:\n            bool: True if the list is empty, False otherwise.\n        \"\"\"\n        return len(self) == 0\n\n\ndef test_circular_linked_list() -> None:\n    \"\"\"\n    Test cases for the CircularLinkedList class.\n    >>> test_circular_linked_list()\n    \"\"\"\n    circular_linked_list = CircularLinkedList()\n    assert len(circular_linked_list) == 0\n    assert circular_linked_list.is_empty() is True\n    assert str(circular_linked_list) == \"\"\n\n    try:\n        circular_linked_list.delete_front()\n        raise AssertionError  # This should not happen\n    except IndexError:\n        assert True  # This should happen\n\n    try:\n        circular_linked_list.delete_tail()\n        raise AssertionError  # This should not happen\n    except IndexError:\n        assert True  # This should happen\n\n    try:\n        circular_linked_list.delete_nth(-1)\n        raise AssertionError\n    except IndexError:\n        assert True\n\n    try:\n        circular_linked_list.delete_nth(0)\n        raise AssertionError\n    except IndexError:\n        assert True\n\n    assert circular_linked_list.is_empty() is True\n    for i in range(5):\n        assert len(circular_linked_list) == i\n        circular_linked_list.insert_nth(i, i + 1)\n    assert str(circular_linked_list) == \"->\".join(str(i) for i in range(1, 6))\n\n    circular_linked_list.insert_tail(6)\n    assert str(circular_linked_list) == \"->\".join(str(i) for i in range(1, 7))\n    circular_linked_list.insert_head(0)\n    assert str(circular_linked_list) == \"->\".join(str(i) for i in range(7))\n\n    assert circular_linked_list.delete_front() == 0\n    assert circular_linked_list.delete_tail() == 6\n    assert str(circular_linked_list) == \"->\".join(str(i) for i in range(1, 6))\n    assert circular_linked_list.delete_nth(2) == 3\n\n    circular_linked_list.insert_nth(2, 3)\n    assert str(circular_linked_list) == \"->\".join(str(i) for i in range(1, 6))\n\n    assert circular_linked_list.is_empty() is False\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/linked_list/deque_doubly.py",
    "content": "\"\"\"\nImplementing Deque using DoublyLinkedList ...\nOperations:\n    1. insertion in the front -> O(1)\n    2. insertion in the end -> O(1)\n    3. remove from the front -> O(1)\n    4. remove from the end -> O(1)\n\"\"\"\n\n\nclass _DoublyLinkedBase:\n    \"\"\"A Private class (to be inherited)\"\"\"\n\n    class _Node:\n        __slots__ = \"_data\", \"_next\", \"_prev\"\n\n        def __init__(self, link_p, element, link_n):\n            self._prev = link_p\n            self._data = element\n            self._next = link_n\n\n        def has_next_and_prev(self):\n            return (\n                f\" Prev -> {self._prev is not None}, Next -> {self._next is not None}\"\n            )\n\n    def __init__(self):\n        self._header = self._Node(None, None, None)\n        self._trailer = self._Node(None, None, None)\n        self._header._next = self._trailer\n        self._trailer._prev = self._header\n        self._size = 0\n\n    def __len__(self):\n        return self._size\n\n    def is_empty(self):\n        return self.__len__() == 0\n\n    def _insert(self, predecessor, e, successor):\n        # Create new_node by setting it's prev.link -> header\n        # setting it's next.link -> trailer\n        new_node = self._Node(predecessor, e, successor)\n        predecessor._next = new_node\n        successor._prev = new_node\n        self._size += 1\n        return self\n\n    def _delete(self, node):\n        predecessor = node._prev\n        successor = node._next\n\n        predecessor._next = successor\n        successor._prev = predecessor\n        self._size -= 1\n        temp = node._data\n        node._prev = node._next = node._data = None\n        del node\n        return temp\n\n\nclass LinkedDeque(_DoublyLinkedBase):\n    def first(self):\n        \"\"\"return first element\n        >>> d = LinkedDeque()\n        >>> d.add_first('A').first()\n        'A'\n        >>> d.add_first('B').first()\n        'B'\n        \"\"\"\n        if self.is_empty():\n            raise Exception(\"List is empty\")\n        return self._header._next._data\n\n    def last(self):\n        \"\"\"return last element\n        >>> d = LinkedDeque()\n        >>> d.add_last('A').last()\n        'A'\n        >>> d.add_last('B').last()\n        'B'\n        \"\"\"\n        if self.is_empty():\n            raise Exception(\"List is empty\")\n        return self._trailer._prev._data\n\n    # DEque Insert Operations (At the front, At the end)\n\n    def add_first(self, element):\n        \"\"\"insertion in the front\n        >>> LinkedDeque().add_first('AV').first()\n        'AV'\n        \"\"\"\n        return self._insert(self._header, element, self._header._next)\n\n    def add_last(self, element):\n        \"\"\"insertion in the end\n        >>> LinkedDeque().add_last('B').last()\n        'B'\n        \"\"\"\n        return self._insert(self._trailer._prev, element, self._trailer)\n\n    # DEqueu Remove Operations (At the front, At the end)\n\n    def remove_first(self):\n        \"\"\"removal from the front\n        >>> d = LinkedDeque()\n        >>> d.is_empty()\n        True\n        >>> d.remove_first()\n        Traceback (most recent call last):\n           ...\n        IndexError: remove_first from empty list\n        >>> d.add_first('A') # doctest: +ELLIPSIS\n        <data_structures.linked_list.deque_doubly.LinkedDeque object at ...\n        >>> d.remove_first()\n        'A'\n        >>> d.is_empty()\n        True\n        \"\"\"\n        if self.is_empty():\n            raise IndexError(\"remove_first from empty list\")\n        return self._delete(self._header._next)\n\n    def remove_last(self):\n        \"\"\"removal in the end\n        >>> d = LinkedDeque()\n        >>> d.is_empty()\n        True\n        >>> d.remove_last()\n        Traceback (most recent call last):\n           ...\n        IndexError: remove_first from empty list\n        >>> d.add_first('A') # doctest: +ELLIPSIS\n        <data_structures.linked_list.deque_doubly.LinkedDeque object at ...\n        >>> d.remove_last()\n        'A'\n        >>> d.is_empty()\n        True\n        \"\"\"\n        if self.is_empty():\n            raise IndexError(\"remove_first from empty list\")\n        return self._delete(self._trailer._prev)\n"
  },
  {
    "path": "data_structures/linked_list/doubly_linked_list.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/Doubly_linked_list\n\"\"\"\n\n\nclass Node:\n    def __init__(self, data):\n        self.data = data\n        self.previous = None\n        self.next = None\n\n    def __str__(self):\n        return f\"{self.data}\"\n\n\nclass DoublyLinkedList:\n    def __init__(self):\n        self.head = None\n        self.tail = None\n\n    def __iter__(self):\n        \"\"\"\n        >>> linked_list = DoublyLinkedList()\n        >>> linked_list.insert_at_head('b')\n        >>> linked_list.insert_at_head('a')\n        >>> linked_list.insert_at_tail('c')\n        >>> tuple(linked_list)\n        ('a', 'b', 'c')\n        \"\"\"\n        node = self.head\n        while node:\n            yield node.data\n            node = node.next\n\n    def __str__(self):\n        \"\"\"\n        >>> linked_list = DoublyLinkedList()\n        >>> linked_list.insert_at_tail('a')\n        >>> linked_list.insert_at_tail('b')\n        >>> linked_list.insert_at_tail('c')\n        >>> str(linked_list)\n        'a->b->c'\n        \"\"\"\n        return \"->\".join([str(item) for item in self])\n\n    def __len__(self):\n        \"\"\"\n        >>> linked_list = DoublyLinkedList()\n        >>> for i in range(0, 5):\n        ...     linked_list.insert_at_nth(i, i + 1)\n        >>> len(linked_list) == 5\n        True\n        \"\"\"\n        return sum(1 for _ in self)\n\n    def insert_at_head(self, data):\n        self.insert_at_nth(0, data)\n\n    def insert_at_tail(self, data):\n        self.insert_at_nth(len(self), data)\n\n    def insert_at_nth(self, index: int, data):\n        \"\"\"\n        >>> linked_list = DoublyLinkedList()\n        >>> linked_list.insert_at_nth(-1, 666)\n        Traceback (most recent call last):\n            ....\n        IndexError: list index out of range\n        >>> linked_list.insert_at_nth(1, 666)\n        Traceback (most recent call last):\n            ....\n        IndexError: list index out of range\n        >>> linked_list.insert_at_nth(0, 2)\n        >>> linked_list.insert_at_nth(0, 1)\n        >>> linked_list.insert_at_nth(2, 4)\n        >>> linked_list.insert_at_nth(2, 3)\n        >>> str(linked_list)\n        '1->2->3->4'\n        >>> linked_list.insert_at_nth(5, 5)\n        Traceback (most recent call last):\n            ....\n        IndexError: list index out of range\n        \"\"\"\n        length = len(self)\n\n        if not 0 <= index <= length:\n            raise IndexError(\"list index out of range\")\n        new_node = Node(data)\n        if self.head is None:\n            self.head = self.tail = new_node\n        elif index == 0:\n            self.head.previous = new_node\n            new_node.next = self.head\n            self.head = new_node\n        elif index == length:\n            self.tail.next = new_node\n            new_node.previous = self.tail\n            self.tail = new_node\n        else:\n            temp = self.head\n            for _ in range(index):\n                temp = temp.next\n            temp.previous.next = new_node\n            new_node.previous = temp.previous\n            new_node.next = temp\n            temp.previous = new_node\n\n    def delete_head(self):\n        return self.delete_at_nth(0)\n\n    def delete_tail(self):\n        return self.delete_at_nth(len(self) - 1)\n\n    def delete_at_nth(self, index: int):\n        \"\"\"\n        >>> linked_list = DoublyLinkedList()\n        >>> linked_list.delete_at_nth(0)\n        Traceback (most recent call last):\n            ....\n        IndexError: list index out of range\n        >>> for i in range(0, 5):\n        ...     linked_list.insert_at_nth(i, i + 1)\n        >>> linked_list.delete_at_nth(0) == 1\n        True\n        >>> linked_list.delete_at_nth(3) == 5\n        True\n        >>> linked_list.delete_at_nth(1) == 3\n        True\n        >>> str(linked_list)\n        '2->4'\n        >>> linked_list.delete_at_nth(2)\n        Traceback (most recent call last):\n            ....\n        IndexError: list index out of range\n        \"\"\"\n        length = len(self)\n\n        if not 0 <= index <= length - 1:\n            raise IndexError(\"list index out of range\")\n        delete_node = self.head  # default first node\n        if length == 1:\n            self.head = self.tail = None\n        elif index == 0:\n            self.head = self.head.next\n            self.head.previous = None\n        elif index == length - 1:\n            delete_node = self.tail\n            self.tail = self.tail.previous\n            self.tail.next = None\n        else:\n            temp = self.head\n            for _ in range(index):\n                temp = temp.next\n            delete_node = temp\n            temp.next.previous = temp.previous\n            temp.previous.next = temp.next\n        return delete_node.data\n\n    def delete(self, data) -> str:\n        current = self.head\n\n        while current.data != data:  # Find the position to delete\n            if current.next:\n                current = current.next\n            else:  # We have reached the end an no value matches\n                raise ValueError(\"No data matching given value\")\n\n        if current == self.head:\n            self.delete_head()\n\n        elif current == self.tail:\n            self.delete_tail()\n\n        else:  # Before: 1 <--> 2(current) <--> 3\n            current.previous.next = current.next  # 1 --> 3\n            current.next.previous = current.previous  # 1 <--> 3\n        return data\n\n    def is_empty(self):\n        \"\"\"\n        >>> linked_list = DoublyLinkedList()\n        >>> linked_list.is_empty()\n        True\n        >>> linked_list.insert_at_tail(1)\n        >>> linked_list.is_empty()\n        False\n        \"\"\"\n        return len(self) == 0\n\n\ndef test_doubly_linked_list() -> None:\n    \"\"\"\n    >>> test_doubly_linked_list()\n    \"\"\"\n    linked_list = DoublyLinkedList()\n    assert linked_list.is_empty() is True\n    assert str(linked_list) == \"\"\n\n    try:\n        linked_list.delete_head()\n        raise AssertionError  # This should not happen.\n    except IndexError:\n        assert True  # This should happen.\n\n    try:\n        linked_list.delete_tail()\n        raise AssertionError  # This should not happen.\n    except IndexError:\n        assert True  # This should happen.\n\n    for i in range(10):\n        assert len(linked_list) == i\n        linked_list.insert_at_nth(i, i + 1)\n    assert str(linked_list) == \"->\".join(str(i) for i in range(1, 11))\n\n    linked_list.insert_at_head(0)\n    linked_list.insert_at_tail(11)\n    assert str(linked_list) == \"->\".join(str(i) for i in range(12))\n\n    assert linked_list.delete_head() == 0\n    assert linked_list.delete_at_nth(9) == 10\n    assert linked_list.delete_tail() == 11\n    assert len(linked_list) == 9\n    assert str(linked_list) == \"->\".join(str(i) for i in range(1, 10))\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "data_structures/linked_list/doubly_linked_list_two.py",
    "content": "\"\"\"\n- A linked list is similar to an array, it holds values. However, links in a linked\n    list do not have indexes.\n- This is an example of a double ended, doubly linked list.\n- Each link references the next link and the previous one.\n- A Doubly Linked List (DLL) contains an extra pointer, typically called previous\n    pointer, together with next pointer and data which are there in singly linked list.\n - Advantages over SLL - It can be traversed in both forward and backward direction.\n     Delete operation is more efficient\n\"\"\"\n\nfrom dataclasses import dataclass\nfrom typing import Self, TypeVar\n\nDataType = TypeVar(\"DataType\")\n\n\n@dataclass\nclass Node[DataType]:\n    data: DataType\n    previous: Self | None = None\n    next: Self | None = None\n\n    def __str__(self) -> str:\n        return f\"{self.data}\"\n\n\nclass LinkedListIterator:\n    def __init__(self, head):\n        self.current = head\n\n    def __iter__(self):\n        return self\n\n    def __next__(self):\n        if not self.current:\n            raise StopIteration\n        else:\n            value = self.current.data\n            self.current = self.current.next\n            return value\n\n\n@dataclass\nclass LinkedList:\n    head: Node | None = None  # First node in list\n    tail: Node | None = None  # Last node in list\n\n    def __str__(self):\n        current = self.head\n        nodes = []\n        while current is not None:\n            nodes.append(current.data)\n            current = current.next\n        return \" \".join(str(node) for node in nodes)\n\n    def __contains__(self, value: DataType):\n        current = self.head\n        while current:\n            if current.data == value:\n                return True\n            current = current.next\n        return False\n\n    def __iter__(self):\n        return LinkedListIterator(self.head)\n\n    def get_head_data(self):\n        if self.head:\n            return self.head.data\n        return None\n\n    def get_tail_data(self):\n        if self.tail:\n            return self.tail.data\n        return None\n\n    def set_head(self, node: Node) -> None:\n        if self.head is None:\n            self.head = node\n            self.tail = node\n        else:\n            self.insert_before_node(self.head, node)\n\n    def set_tail(self, node: Node) -> None:\n        if self.tail is None:\n            self.head = node\n            self.tail = node\n        else:\n            self.insert_after_node(self.tail, node)\n\n    def insert(self, value: DataType) -> None:\n        node = Node(value)\n        if self.head is None:\n            self.set_head(node)\n        else:\n            self.set_tail(node)\n\n    def insert_before_node(self, node: Node, node_to_insert: Node) -> None:\n        node_to_insert.next = node\n        node_to_insert.previous = node.previous\n\n        if node.previous is None:\n            self.head = node_to_insert\n        else:\n            node.previous.next = node_to_insert\n\n        node.previous = node_to_insert\n\n    def insert_after_node(self, node: Node, node_to_insert: Node) -> None:\n        node_to_insert.previous = node\n        node_to_insert.next = node.next\n\n        if node.next is None:\n            self.tail = node_to_insert\n        else:\n            node.next.previous = node_to_insert\n\n        node.next = node_to_insert\n\n    def insert_at_position(self, position: int, value: DataType) -> None:\n        current_position = 1\n        new_node = Node(value)\n        node = self.head\n        while node:\n            if current_position == position:\n                self.insert_before_node(node, new_node)\n                return\n            current_position += 1\n            node = node.next\n        self.set_tail(new_node)\n\n    def get_node(self, item: DataType) -> Node:\n        node = self.head\n        while node:\n            if node.data == item:\n                return node\n            node = node.next\n        raise Exception(\"Node not found\")\n\n    def delete_value(self, value):\n        if (node := self.get_node(value)) is not None:\n            if node == self.head:\n                self.head = self.head.next\n\n            if node == self.tail:\n                self.tail = self.tail.previous\n\n            self.remove_node_pointers(node)\n\n    @staticmethod\n    def remove_node_pointers(node: Node) -> None:\n        if node.next:\n            node.next.previous = node.previous\n\n        if node.previous:\n            node.previous.next = node.next\n\n        node.next = None\n        node.previous = None\n\n    def is_empty(self):\n        return self.head is None\n\n\ndef create_linked_list() -> None:\n    \"\"\"\n    >>> new_linked_list = LinkedList()\n    >>> new_linked_list.get_head_data() is None\n    True\n    >>> new_linked_list.get_tail_data() is None\n    True\n    >>> new_linked_list.is_empty()\n    True\n    >>> new_linked_list.insert(10)\n    >>> new_linked_list.get_head_data()\n    10\n    >>> new_linked_list.get_tail_data()\n    10\n    >>> new_linked_list.insert_at_position(position=3, value=20)\n    >>> new_linked_list.get_head_data()\n    10\n    >>> new_linked_list.get_tail_data()\n    20\n    >>> new_linked_list.set_head(Node(1000))\n    >>> new_linked_list.get_head_data()\n    1000\n    >>> new_linked_list.get_tail_data()\n    20\n    >>> new_linked_list.set_tail(Node(2000))\n    >>> new_linked_list.get_head_data()\n    1000\n    >>> new_linked_list.get_tail_data()\n    2000\n    >>> for value in new_linked_list:\n    ...    print(value)\n    1000\n    10\n    20\n    2000\n    >>> new_linked_list.is_empty()\n    False\n    >>> for value in new_linked_list:\n    ...    print(value)\n    1000\n    10\n    20\n    2000\n    >>> 10 in new_linked_list\n    True\n    >>> new_linked_list.delete_value(value=10)\n    >>> 10 in new_linked_list\n    False\n    >>> new_linked_list.delete_value(value=2000)\n    >>> new_linked_list.get_tail_data()\n    20\n    >>> new_linked_list.delete_value(value=1000)\n    >>> new_linked_list.get_tail_data()\n    20\n    >>> new_linked_list.get_head_data()\n    20\n    >>> for value in new_linked_list:\n    ...    print(value)\n    20\n    >>> new_linked_list.delete_value(value=20)\n    >>> for value in new_linked_list:\n    ...    print(value)\n    >>> for value in range(1,10):\n    ...    new_linked_list.insert(value=value)\n    >>> for value in new_linked_list:\n    ...    print(value)\n    1\n    2\n    3\n    4\n    5\n    6\n    7\n    8\n    9\n    >>> linked_list = LinkedList()\n    >>> linked_list.insert_at_position(position=1, value=10)\n    >>> str(linked_list)\n    '10'\n    >>> linked_list.insert_at_position(position=2, value=20)\n    >>> str(linked_list)\n    '10 20'\n    >>> linked_list.insert_at_position(position=1, value=30)\n    >>> str(linked_list)\n    '30 10 20'\n    >>> linked_list.insert_at_position(position=3, value=40)\n    >>> str(linked_list)\n    '30 10 40 20'\n    >>> linked_list.insert_at_position(position=5, value=50)\n    >>> str(linked_list)\n    '30 10 40 20 50'\n    \"\"\"\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/linked_list/floyds_cycle_detection.py",
    "content": "\"\"\"\nFloyd's cycle detection algorithm is a popular algorithm used to detect cycles\nin a linked list. It uses two pointers, a slow pointer and a fast pointer,\nto traverse the linked list. The slow pointer moves one node at a time while the fast\npointer moves two nodes at a time. If there is a cycle in the linked list,\nthe fast pointer will eventually catch up to the slow pointer and they will\nmeet at the same node. If there is no cycle, the fast pointer will reach the end of\nthe linked list and the algorithm will terminate.\n\nFor more information: https://en.wikipedia.org/wiki/Cycle_detection#Floyd's_tortoise_and_hare\n\"\"\"\n\nfrom collections.abc import Iterator\nfrom dataclasses import dataclass\nfrom typing import Any, Self\n\n\n@dataclass\nclass Node:\n    \"\"\"\n    A class representing a node in a singly linked list.\n    \"\"\"\n\n    data: Any\n    next_node: Self | None = None\n\n\n@dataclass\nclass LinkedList:\n    \"\"\"\n    A class representing a singly linked list.\n    \"\"\"\n\n    head: Node | None = None\n\n    def __iter__(self) -> Iterator:\n        \"\"\"\n        Iterates through the linked list.\n\n        Returns:\n            Iterator: An iterator over the linked list.\n\n        Examples:\n        >>> linked_list = LinkedList()\n        >>> list(linked_list)\n        []\n        >>> linked_list.add_node(1)\n        >>> tuple(linked_list)\n        (1,)\n        \"\"\"\n        visited = []\n        node = self.head\n        while node:\n            # Avoid infinite loop in there's a cycle\n            if node in visited:\n                return\n            visited.append(node)\n            yield node.data\n            node = node.next_node\n\n    def add_node(self, data: Any) -> None:\n        \"\"\"\n        Adds a new node to the end of the linked list.\n\n        Args:\n            data (Any): The data to be stored in the new node.\n\n        Examples:\n        >>> linked_list = LinkedList()\n        >>> linked_list.add_node(1)\n        >>> linked_list.add_node(2)\n        >>> linked_list.add_node(3)\n        >>> linked_list.add_node(4)\n        >>> tuple(linked_list)\n        (1, 2, 3, 4)\n        \"\"\"\n        new_node = Node(data)\n\n        if self.head is None:\n            self.head = new_node\n            return\n\n        current_node = self.head\n        while current_node.next_node is not None:\n            current_node = current_node.next_node\n\n        current_node.next_node = new_node\n\n    def detect_cycle(self) -> bool:\n        \"\"\"\n        Detects if there is a cycle in the linked list using\n        Floyd's cycle detection algorithm.\n\n        Returns:\n            bool: True if there is a cycle, False otherwise.\n\n        Examples:\n        >>> linked_list = LinkedList()\n        >>> linked_list.add_node(1)\n        >>> linked_list.add_node(2)\n        >>> linked_list.add_node(3)\n        >>> linked_list.add_node(4)\n\n        >>> linked_list.detect_cycle()\n        False\n\n        # Create a cycle in the linked list\n        >>> linked_list.head.next_node.next_node.next_node = linked_list.head.next_node\n\n        >>> linked_list.detect_cycle()\n        True\n        \"\"\"\n        if self.head is None:\n            return False\n\n        slow_pointer: Node | None = self.head\n        fast_pointer: Node | None = self.head\n\n        while fast_pointer is not None and fast_pointer.next_node is not None:\n            slow_pointer = slow_pointer.next_node if slow_pointer else None\n            fast_pointer = fast_pointer.next_node.next_node\n            if slow_pointer == fast_pointer:\n                return True\n\n        return False\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    linked_list = LinkedList()\n    linked_list.add_node(1)\n    linked_list.add_node(2)\n    linked_list.add_node(3)\n    linked_list.add_node(4)\n\n    # Create a cycle in the linked list\n    # It first checks if the head, next_node, and next_node.next_node attributes of the\n    # linked list are not None to avoid any potential type errors.\n    if (\n        linked_list.head\n        and linked_list.head.next_node\n        and linked_list.head.next_node.next_node\n    ):\n        linked_list.head.next_node.next_node.next_node = linked_list.head.next_node\n\n    has_cycle = linked_list.detect_cycle()\n    print(has_cycle)  # Output: True\n"
  },
  {
    "path": "data_structures/linked_list/from_sequence.py",
    "content": "\"\"\"\nRecursive Program to create a Linked List from a sequence and\nprint a string representation of it.\n\"\"\"\n\n\nclass Node:\n    def __init__(self, data=None):\n        self.data = data\n        self.next = None\n\n    def __repr__(self):\n        \"\"\"Returns a visual representation of the node and all its following nodes.\"\"\"\n        string_rep = \"\"\n        temp = self\n        while temp:\n            string_rep += f\"<{temp.data}> ---> \"\n            temp = temp.next\n        string_rep += \"<END>\"\n        return string_rep\n\n\ndef make_linked_list(elements_list: list | tuple) -> Node:\n    \"\"\"\n    Creates a Linked List from the elements of the given sequence\n    (list/tuple) and returns the head of the Linked List.\n\n    >>> make_linked_list([])\n    Traceback (most recent call last):\n        ...\n    ValueError: The Elements List is empty\n    >>> make_linked_list(())\n    Traceback (most recent call last):\n        ...\n    ValueError: The Elements List is empty\n    >>> make_linked_list([1])\n    <1> ---> <END>\n    >>> make_linked_list((1,))\n    <1> ---> <END>\n    >>> make_linked_list([1, 3, 5, 32, 44, 12, 43])\n    <1> ---> <3> ---> <5> ---> <32> ---> <44> ---> <12> ---> <43> ---> <END>\n    >>> make_linked_list((1, 3, 5, 32, 44, 12, 43))\n    <1> ---> <3> ---> <5> ---> <32> ---> <44> ---> <12> ---> <43> ---> <END>\n    \"\"\"\n\n    # if elements_list is empty\n    if not elements_list:\n        raise ValueError(\"The Elements List is empty\")\n\n    # Set first element as Head\n    head = Node(elements_list[0])\n    current = head\n    # Loop through elements from position 1\n    for data in elements_list[1:]:\n        current.next = Node(data)\n        current = current.next\n    return head\n"
  },
  {
    "path": "data_structures/linked_list/has_loop.py",
    "content": "from __future__ import annotations\n\nfrom typing import Any\n\n\nclass ContainsLoopError(Exception):\n    pass\n\n\nclass Node:\n    def __init__(self, data: Any) -> None:\n        self.data: Any = data\n        self.next_node: Node | None = None\n\n    def __iter__(self):\n        node = self\n        visited = set()\n        while node:\n            if node in visited:\n                raise ContainsLoopError\n            visited.add(node)\n            yield node.data\n            node = node.next_node\n\n    @property\n    def has_loop(self) -> bool:\n        \"\"\"\n        A loop is when the exact same Node appears more than once in a linked list.\n        >>> root_node = Node(1)\n        >>> root_node.next_node = Node(2)\n        >>> root_node.next_node.next_node = Node(3)\n        >>> root_node.next_node.next_node.next_node = Node(4)\n        >>> root_node.has_loop\n        False\n        >>> root_node.next_node.next_node.next_node = root_node.next_node\n        >>> root_node.has_loop\n        True\n        \"\"\"\n        try:\n            list(self)\n            return False\n        except ContainsLoopError:\n            return True\n\n\nif __name__ == \"__main__\":\n    root_node = Node(1)\n    root_node.next_node = Node(2)\n    root_node.next_node.next_node = Node(3)\n    root_node.next_node.next_node.next_node = Node(4)\n    print(root_node.has_loop)  # False\n    root_node.next_node.next_node.next_node = root_node.next_node\n    print(root_node.has_loop)  # True\n\n    root_node = Node(5)\n    root_node.next_node = Node(6)\n    root_node.next_node.next_node = Node(5)\n    root_node.next_node.next_node.next_node = Node(6)\n    print(root_node.has_loop)  # False\n\n    root_node = Node(1)\n    print(root_node.has_loop)  # False\n"
  },
  {
    "path": "data_structures/linked_list/is_palindrome.py",
    "content": "from __future__ import annotations\n\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass ListNode:\n    val: int = 0\n    next_node: ListNode | None = None\n\n\ndef is_palindrome(head: ListNode | None) -> bool:\n    \"\"\"\n    Check if a linked list is a palindrome.\n\n    Args:\n        head: The head of the linked list.\n\n    Returns:\n        bool: True if the linked list is a palindrome, False otherwise.\n\n    Examples:\n        >>> is_palindrome(None)\n        True\n\n        >>> is_palindrome(ListNode(1))\n        True\n\n        >>> is_palindrome(ListNode(1, ListNode(2)))\n        False\n\n        >>> is_palindrome(ListNode(1, ListNode(2, ListNode(1))))\n        True\n\n        >>> is_palindrome(ListNode(1, ListNode(2, ListNode(2, ListNode(1)))))\n        True\n    \"\"\"\n    if not head:\n        return True\n    # split the list to two parts\n    fast: ListNode | None = head.next_node\n    slow: ListNode | None = head\n    while fast and fast.next_node:\n        fast = fast.next_node.next_node\n        slow = slow.next_node if slow else None\n    if slow:\n        # slow will always be defined,\n        # adding this check to resolve mypy static check\n        second = slow.next_node\n        slow.next_node = None  # Don't forget here! But forget still works!\n    # reverse the second part\n    node: ListNode | None = None\n    while second:\n        nxt = second.next_node\n        second.next_node = node\n        node = second\n        second = nxt\n    # compare two parts\n    # second part has the same or one less node\n    while node and head:\n        if node.val != head.val:\n            return False\n        node = node.next_node\n        head = head.next_node\n    return True\n\n\ndef is_palindrome_stack(head: ListNode | None) -> bool:\n    \"\"\"\n    Check if a linked list is a palindrome using a stack.\n\n    Args:\n        head (ListNode): The head of the linked list.\n\n    Returns:\n        bool: True if the linked list is a palindrome, False otherwise.\n\n    Examples:\n        >>> is_palindrome_stack(None)\n        True\n\n        >>> is_palindrome_stack(ListNode(1))\n        True\n\n        >>> is_palindrome_stack(ListNode(1, ListNode(2)))\n        False\n\n        >>> is_palindrome_stack(ListNode(1, ListNode(2, ListNode(1))))\n        True\n\n        >>> is_palindrome_stack(ListNode(1, ListNode(2, ListNode(2, ListNode(1)))))\n        True\n    \"\"\"\n    if not head or not head.next_node:\n        return True\n\n    # 1. Get the midpoint (slow)\n    slow: ListNode | None = head\n    fast: ListNode | None = head\n    while fast and fast.next_node:\n        fast = fast.next_node.next_node\n        slow = slow.next_node if slow else None\n\n    # slow will always be defined,\n    # adding this check to resolve mypy static check\n    if slow:\n        stack = [slow.val]\n\n        # 2. Push the second half into the stack\n        while slow.next_node:\n            slow = slow.next_node\n            stack.append(slow.val)\n\n        # 3. Comparison\n        cur: ListNode | None = head\n        while stack and cur:\n            if stack.pop() != cur.val:\n                return False\n            cur = cur.next_node\n\n    return True\n\n\ndef is_palindrome_dict(head: ListNode | None) -> bool:\n    \"\"\"\n    Check if a linked list is a palindrome using a dictionary.\n\n    Args:\n        head (ListNode): The head of the linked list.\n\n    Returns:\n        bool: True if the linked list is a palindrome, False otherwise.\n\n    Examples:\n        >>> is_palindrome_dict(None)\n        True\n\n        >>> is_palindrome_dict(ListNode(1))\n        True\n\n        >>> is_palindrome_dict(ListNode(1, ListNode(2)))\n        False\n\n        >>> is_palindrome_dict(ListNode(1, ListNode(2, ListNode(1))))\n        True\n\n        >>> is_palindrome_dict(ListNode(1, ListNode(2, ListNode(2, ListNode(1)))))\n        True\n\n        >>> is_palindrome_dict(\n        ...     ListNode(\n        ...         1, ListNode(2, ListNode(1, ListNode(3, ListNode(2, ListNode(1)))))\n        ...     )\n        ... )\n        False\n    \"\"\"\n    if not head or not head.next_node:\n        return True\n    d: dict[int, list[int]] = {}\n    pos = 0\n    while head:\n        if head.val in d:\n            d[head.val].append(pos)\n        else:\n            d[head.val] = [pos]\n        head = head.next_node\n        pos += 1\n    checksum = pos - 1\n    middle = 0\n    for v in d.values():\n        if len(v) % 2 != 0:\n            middle += 1\n        else:\n            for step, i in enumerate(range(len(v))):\n                if v[i] + v[len(v) - 1 - step] != checksum:\n                    return False\n        if middle > 1:\n            return False\n    return True\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/linked_list/merge_two_lists.py",
    "content": "\"\"\"\nAlgorithm that merges two sorted linked lists into one sorted linked list.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections.abc import Iterable, Iterator\nfrom dataclasses import dataclass\n\ntest_data_odd = (3, 9, -11, 0, 7, 5, 1, -1)\ntest_data_even = (4, 6, 2, 0, 8, 10, 3, -2)\n\n\n@dataclass\nclass Node:\n    data: int\n    next_node: Node | None\n\n\nclass SortedLinkedList:\n    def __init__(self, ints: Iterable[int]) -> None:\n        self.head: Node | None = None\n        for i in sorted(ints, reverse=True):\n            self.head = Node(i, self.head)\n\n    def __iter__(self) -> Iterator[int]:\n        \"\"\"\n        >>> tuple(SortedLinkedList(test_data_odd)) == tuple(sorted(test_data_odd))\n        True\n        >>> tuple(SortedLinkedList(test_data_even)) == tuple(sorted(test_data_even))\n        True\n        \"\"\"\n        node = self.head\n        while node:\n            yield node.data\n            node = node.next_node\n\n    def __len__(self) -> int:\n        \"\"\"\n        >>> for i in range(3):\n        ...     len(SortedLinkedList(range(i))) == i\n        True\n        True\n        True\n        >>> len(SortedLinkedList(test_data_odd))\n        8\n        \"\"\"\n        return sum(1 for _ in self)\n\n    def __str__(self) -> str:\n        \"\"\"\n        >>> str(SortedLinkedList([]))\n        ''\n        >>> str(SortedLinkedList(test_data_odd))\n        '-11 -> -1 -> 0 -> 1 -> 3 -> 5 -> 7 -> 9'\n        >>> str(SortedLinkedList(test_data_even))\n        '-2 -> 0 -> 2 -> 3 -> 4 -> 6 -> 8 -> 10'\n        \"\"\"\n        return \" -> \".join([str(node) for node in self])\n\n\ndef merge_lists(\n    sll_one: SortedLinkedList, sll_two: SortedLinkedList\n) -> SortedLinkedList:\n    \"\"\"\n    >>> SSL = SortedLinkedList\n    >>> merged = merge_lists(SSL(test_data_odd), SSL(test_data_even))\n    >>> len(merged)\n    16\n    >>> str(merged)\n    '-11 -> -2 -> -1 -> 0 -> 0 -> 1 -> 2 -> 3 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 -> 10'\n    >>> list(merged) == list(sorted(test_data_odd + test_data_even))\n    True\n    \"\"\"\n    return SortedLinkedList(list(sll_one) + list(sll_two))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    SSL = SortedLinkedList\n    print(merge_lists(SSL(test_data_odd), SSL(test_data_even)))\n"
  },
  {
    "path": "data_structures/linked_list/middle_element_of_linked_list.py",
    "content": "from __future__ import annotations\n\n\nclass Node:\n    def __init__(self, data: int) -> None:\n        self.data = data\n        self.next = None\n\n\nclass LinkedList:\n    def __init__(self):\n        self.head = None\n\n    def push(self, new_data: int) -> int:\n        new_node = Node(new_data)\n        new_node.next = self.head\n        self.head = new_node\n        return self.head.data\n\n    def middle_element(self) -> int | None:\n        \"\"\"\n        >>> link = LinkedList()\n        >>> link.middle_element()\n        No element found.\n        >>> link.push(5)\n        5\n        >>> link.push(6)\n        6\n        >>> link.push(8)\n        8\n        >>> link.push(8)\n        8\n        >>> link.push(10)\n        10\n        >>> link.push(12)\n        12\n        >>> link.push(17)\n        17\n        >>> link.push(7)\n        7\n        >>> link.push(3)\n        3\n        >>> link.push(20)\n        20\n        >>> link.push(-20)\n        -20\n        >>> link.middle_element()\n        12\n        >>>\n        \"\"\"\n        slow_pointer = self.head\n        fast_pointer = self.head\n        if self.head:\n            while fast_pointer and fast_pointer.next:\n                fast_pointer = fast_pointer.next.next\n                slow_pointer = slow_pointer.next\n            return slow_pointer.data\n        else:\n            print(\"No element found.\")\n            return None\n\n\nif __name__ == \"__main__\":\n    link = LinkedList()\n    for _ in range(int(input().strip())):\n        data = int(input().strip())\n        link.push(data)\n    print(link.middle_element())\n"
  },
  {
    "path": "data_structures/linked_list/print_reverse.py",
    "content": "from __future__ import annotations\n\nfrom collections.abc import Iterable, Iterator\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass Node:\n    data: int\n    next_node: Node | None = None\n\n\nclass LinkedList:\n    \"\"\"A class to represent a Linked List.\n    Use a tail pointer to speed up the append() operation.\n    \"\"\"\n\n    def __init__(self) -> None:\n        \"\"\"Initialize a LinkedList with the head node set to None.\n        >>> linked_list = LinkedList()\n        >>> (linked_list.head, linked_list.tail)\n        (None, None)\n        \"\"\"\n        self.head: Node | None = None\n        self.tail: Node | None = None  # Speeds up the append() operation\n\n    def __iter__(self) -> Iterator[int]:\n        \"\"\"Iterate the LinkedList yielding each Node's data.\n        >>> linked_list = LinkedList()\n        >>> items = (1, 2, 3, 4, 5)\n        >>> linked_list.extend(items)\n        >>> tuple(linked_list) == items\n        True\n        \"\"\"\n        node = self.head\n        while node:\n            yield node.data\n            node = node.next_node\n\n    def __repr__(self) -> str:\n        \"\"\"Returns a string representation of the LinkedList.\n        >>> linked_list = LinkedList()\n        >>> str(linked_list)\n        ''\n        >>> linked_list.append(1)\n        >>> str(linked_list)\n        '1'\n        >>> linked_list.extend([2, 3, 4, 5])\n        >>> str(linked_list)\n        '1 -> 2 -> 3 -> 4 -> 5'\n        \"\"\"\n        return \" -> \".join([str(data) for data in self])\n\n    def append(self, data: int) -> None:\n        \"\"\"Appends a new node with the given data to the end of the LinkedList.\n        >>> linked_list = LinkedList()\n        >>> str(linked_list)\n        ''\n        >>> linked_list.append(1)\n        >>> str(linked_list)\n        '1'\n        >>> linked_list.append(2)\n        >>> str(linked_list)\n        '1 -> 2'\n        \"\"\"\n        if self.tail:\n            self.tail.next_node = self.tail = Node(data)\n        else:\n            self.head = self.tail = Node(data)\n\n    def extend(self, items: Iterable[int]) -> None:\n        \"\"\"Appends each item to the end of the LinkedList.\n        >>> linked_list = LinkedList()\n        >>> linked_list.extend([])\n        >>> str(linked_list)\n        ''\n        >>> linked_list.extend([1, 2])\n        >>> str(linked_list)\n        '1 -> 2'\n        >>> linked_list.extend([3,4])\n        >>> str(linked_list)\n        '1 -> 2 -> 3 -> 4'\n        \"\"\"\n        for item in items:\n            self.append(item)\n\n\ndef make_linked_list(elements_list: Iterable[int]) -> LinkedList:\n    \"\"\"Creates a Linked List from the elements of the given sequence\n    (list/tuple) and returns the head of the Linked List.\n    >>> make_linked_list([])\n    Traceback (most recent call last):\n        ...\n    Exception: The Elements List is empty\n    >>> make_linked_list([7])\n    7\n    >>> make_linked_list(['abc'])\n    abc\n    >>> make_linked_list([7, 25])\n    7 -> 25\n    \"\"\"\n    if not elements_list:\n        raise Exception(\"The Elements List is empty\")\n\n    linked_list = LinkedList()\n    linked_list.extend(elements_list)\n    return linked_list\n\n\ndef in_reverse(linked_list: LinkedList) -> str:\n    \"\"\"Prints the elements of the given Linked List in reverse order\n    >>> in_reverse(LinkedList())\n    ''\n    >>> in_reverse(make_linked_list([69, 88, 73]))\n    '73 <- 88 <- 69'\n    \"\"\"\n    return \" <- \".join(str(line) for line in reversed(tuple(linked_list)))\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    linked_list = make_linked_list((14, 52, 14, 12, 43))\n    print(f\"Linked List:  {linked_list}\")\n    print(f\"Reverse List: {in_reverse(linked_list)}\")\n"
  },
  {
    "path": "data_structures/linked_list/reverse_k_group.py",
    "content": "from __future__ import annotations\n\nfrom collections.abc import Iterable, Iterator\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass Node:\n    data: int\n    next_node: Node | None = None\n\n\nclass LinkedList:\n    def __init__(self, ints: Iterable[int]) -> None:\n        self.head: Node | None = None\n        for i in ints:\n            self.append(i)\n\n    def __iter__(self) -> Iterator[int]:\n        \"\"\"\n        >>> ints = []\n        >>> list(LinkedList(ints)) == ints\n        True\n        >>> ints = tuple(range(5))\n        >>> tuple(LinkedList(ints)) == ints\n        True\n        \"\"\"\n        node = self.head\n        while node:\n            yield node.data\n            node = node.next_node\n\n    def __len__(self) -> int:\n        \"\"\"\n        >>> for i in range(3):\n        ...     len(LinkedList(range(i))) == i\n        True\n        True\n        True\n        >>> len(LinkedList(\"abcdefgh\"))\n        8\n        \"\"\"\n        return sum(1 for _ in self)\n\n    def __str__(self) -> str:\n        \"\"\"\n        >>> str(LinkedList([]))\n        ''\n        >>> str(LinkedList(range(5)))\n        '0 -> 1 -> 2 -> 3 -> 4'\n        \"\"\"\n        return \" -> \".join([str(node) for node in self])\n\n    def append(self, data: int) -> None:\n        \"\"\"\n        >>> ll = LinkedList([1, 2])\n        >>> tuple(ll)\n        (1, 2)\n        >>> ll.append(3)\n        >>> tuple(ll)\n        (1, 2, 3)\n        >>> ll.append(4)\n        >>> tuple(ll)\n        (1, 2, 3, 4)\n        >>> len(ll)\n        4\n        \"\"\"\n        if not self.head:\n            self.head = Node(data)\n            return\n        node = self.head\n        while node.next_node:\n            node = node.next_node\n        node.next_node = Node(data)\n\n    def reverse_k_nodes(self, group_size: int) -> None:\n        \"\"\"\n        reverse nodes within groups of size k\n        >>> ll = LinkedList([1, 2, 3, 4, 5])\n        >>> ll.reverse_k_nodes(2)\n        >>> tuple(ll)\n        (2, 1, 4, 3, 5)\n        >>> str(ll)\n        '2 -> 1 -> 4 -> 3 -> 5'\n        \"\"\"\n        if self.head is None or self.head.next_node is None:\n            return\n\n        length = len(self)\n        dummy_head = Node(0)\n        dummy_head.next_node = self.head\n        previous_node = dummy_head\n\n        while length >= group_size:\n            current_node = previous_node.next_node\n            assert current_node\n            next_node = current_node.next_node\n            for _ in range(1, group_size):\n                assert next_node, current_node\n                current_node.next_node = next_node.next_node\n                assert previous_node\n                next_node.next_node = previous_node.next_node\n                previous_node.next_node = next_node\n                next_node = current_node.next_node\n            previous_node = current_node\n            length -= group_size\n        self.head = dummy_head.next_node\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    ll = LinkedList([1, 2, 3, 4, 5])\n    print(f\"Original Linked List: {ll}\")\n    k = 2\n    ll.reverse_k_nodes(k)\n    print(f\"After reversing groups of size {k}: {ll}\")\n"
  },
  {
    "path": "data_structures/linked_list/rotate_to_the_right.py",
    "content": "from __future__ import annotations\n\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass Node:\n    data: int\n    next_node: Node | None = None\n\n\ndef print_linked_list(head: Node | None) -> None:\n    \"\"\"\n        Print the entire linked list iteratively.\n\n        This function prints the elements of a linked list separated by '->'.\n\n        Parameters:\n            head (Node | None): The head of the linked list to be printed,\n    or None if the linked list is empty.\n\n        >>> head = insert_node(None, 0)\n        >>> head = insert_node(head, 2)\n        >>> head = insert_node(head, 1)\n        >>> print_linked_list(head)\n        0->2->1\n        >>> head = insert_node(head, 4)\n        >>> head = insert_node(head, 5)\n        >>> print_linked_list(head)\n        0->2->1->4->5\n    \"\"\"\n    if head is None:\n        return\n    while head.next_node is not None:\n        print(head.data, end=\"->\")\n        head = head.next_node\n    print(head.data)\n\n\ndef insert_node(head: Node | None, data: int) -> Node:\n    \"\"\"\n    Insert a new node at the end of a linked list and return the new head.\n\n    Parameters:\n        head (Node | None): The head of the linked list.\n        data (int): The data to be inserted into the new node.\n\n    Returns:\n        Node: The new head of the linked list.\n\n    >>> head = insert_node(None, 10)\n    >>> head = insert_node(head, 9)\n    >>> head = insert_node(head, 8)\n    >>> print_linked_list(head)\n    10->9->8\n    \"\"\"\n    new_node = Node(data)\n    # If the linked list is empty, the new_node becomes the head\n    if head is None:\n        return new_node\n\n    temp_node = head\n    while temp_node.next_node:\n        temp_node = temp_node.next_node\n\n    temp_node.next_node = new_node\n    return head\n\n\ndef rotate_to_the_right(head: Node, places: int) -> Node:\n    \"\"\"\n    Rotate a linked list to the right by places times.\n\n    Parameters:\n        head: The head of the linked list.\n        places: The number of places to rotate.\n\n    Returns:\n        Node: The head of the rotated linked list.\n\n    >>> rotate_to_the_right(None, places=1)\n    Traceback (most recent call last):\n        ...\n    ValueError: The linked list is empty.\n    >>> head = insert_node(None, 1)\n    >>> rotate_to_the_right(head, places=1) == head\n    True\n    >>> head = insert_node(None, 1)\n    >>> head = insert_node(head, 2)\n    >>> head = insert_node(head, 3)\n    >>> head = insert_node(head, 4)\n    >>> head = insert_node(head, 5)\n    >>> new_head = rotate_to_the_right(head, places=2)\n    >>> print_linked_list(new_head)\n    4->5->1->2->3\n    \"\"\"\n    # Check if the list is empty or has only one element\n    if not head:\n        raise ValueError(\"The linked list is empty.\")\n\n    if head.next_node is None:\n        return head\n\n    # Calculate the length of the linked list\n    length = 1\n    temp_node = head\n    while temp_node.next_node is not None:\n        length += 1\n        temp_node = temp_node.next_node\n\n    # Adjust the value of places to avoid places longer than the list.\n    places %= length\n\n    if places == 0:\n        return head  # As no rotation is needed.\n\n    # Find the new head position after rotation.\n    new_head_index = length - places\n\n    # Traverse to the new head position\n    temp_node = head\n    for _ in range(new_head_index - 1):\n        assert temp_node.next_node\n        temp_node = temp_node.next_node\n\n    # Update pointers to perform rotation\n    assert temp_node.next_node\n    new_head = temp_node.next_node\n    temp_node.next_node = None\n    temp_node = new_head\n    while temp_node.next_node:\n        temp_node = temp_node.next_node\n    temp_node.next_node = head\n\n    assert new_head\n    return new_head\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    head = insert_node(None, 5)\n    head = insert_node(head, 1)\n    head = insert_node(head, 2)\n    head = insert_node(head, 4)\n    head = insert_node(head, 3)\n\n    print(\"Original list: \", end=\"\")\n    print_linked_list(head)\n\n    places = 3\n    new_head = rotate_to_the_right(head, places)\n\n    print(f\"After {places} iterations: \", end=\"\")\n    print_linked_list(new_head)\n"
  },
  {
    "path": "data_structures/linked_list/singly_linked_list.py",
    "content": "from __future__ import annotations\n\nfrom collections.abc import Iterator\nfrom dataclasses import dataclass\nfrom typing import Any\n\n\n@dataclass\nclass Node:\n    \"\"\"\n    Create and initialize Node class instance.\n    >>> Node(20)\n    Node(20)\n    >>> Node(\"Hello, world!\")\n    Node(Hello, world!)\n    >>> Node(None)\n    Node(None)\n    >>> Node(True)\n    Node(True)\n    \"\"\"\n\n    data: Any\n    next_node: Node | None = None\n\n    def __repr__(self) -> str:\n        \"\"\"\n        Get the string representation of this node.\n        >>> Node(10).__repr__()\n        'Node(10)'\n        >>> repr(Node(10))\n        'Node(10)'\n        >>> str(Node(10))\n        'Node(10)'\n        >>> Node(10)\n        Node(10)\n        \"\"\"\n        return f\"Node({self.data})\"\n\n\nclass LinkedList:\n    def __init__(self):\n        \"\"\"\n        Create and initialize LinkedList class instance.\n        >>> linked_list = LinkedList()\n        >>> linked_list.head is None\n        True\n        \"\"\"\n        self.head = None\n\n    def __iter__(self) -> Iterator[Any]:\n        \"\"\"\n        This function is intended for iterators to access\n        and iterate through data inside linked list.\n        >>> linked_list = LinkedList()\n        >>> linked_list.insert_tail(\"tail\")\n        >>> linked_list.insert_tail(\"tail_1\")\n        >>> linked_list.insert_tail(\"tail_2\")\n        >>> for node in linked_list: # __iter__ used here.\n        ...     node\n        'tail'\n        'tail_1'\n        'tail_2'\n        \"\"\"\n        node = self.head\n        while node:\n            yield node.data\n            node = node.next_node\n\n    def __len__(self) -> int:\n        \"\"\"\n        Return length of linked list i.e. number of nodes\n        >>> linked_list = LinkedList()\n        >>> len(linked_list)\n        0\n        >>> linked_list.insert_tail(\"tail\")\n        >>> len(linked_list)\n        1\n        >>> linked_list.insert_head(\"head\")\n        >>> len(linked_list)\n        2\n        >>> _ = linked_list.delete_tail()\n        >>> len(linked_list)\n        1\n        >>> _ = linked_list.delete_head()\n        >>> len(linked_list)\n        0\n        \"\"\"\n        return sum(1 for _ in self)\n\n    def __repr__(self) -> str:\n        \"\"\"\n        String representation/visualization of a Linked Lists\n        >>> linked_list = LinkedList()\n        >>> linked_list.insert_tail(1)\n        >>> linked_list.insert_tail(3)\n        >>> linked_list.__repr__()\n        '1 -> 3'\n        >>> repr(linked_list)\n        '1 -> 3'\n        >>> str(linked_list)\n        '1 -> 3'\n        >>> linked_list.insert_tail(5)\n        >>> f\"{linked_list}\"\n        '1 -> 3 -> 5'\n        \"\"\"\n        return \" -> \".join([str(item) for item in self])\n\n    def __getitem__(self, index: int) -> Any:\n        \"\"\"\n        Indexing Support. Used to get a node at particular position\n        >>> linked_list = LinkedList()\n        >>> for i in range(0, 10):\n        ...     linked_list.insert_nth(i, i)\n        >>> all(str(linked_list[i]) == str(i) for i in range(0, 10))\n        True\n        >>> linked_list[-10]\n        Traceback (most recent call last):\n            ...\n        ValueError: list index out of range.\n        >>> linked_list[len(linked_list)]\n        Traceback (most recent call last):\n            ...\n        ValueError: list index out of range.\n        \"\"\"\n        if not 0 <= index < len(self):\n            raise ValueError(\"list index out of range.\")\n        for i, node in enumerate(self):\n            if i == index:\n                return node\n        return None\n\n    # Used to change the data of a particular node\n    def __setitem__(self, index: int, data: Any) -> None:\n        \"\"\"\n        >>> linked_list = LinkedList()\n        >>> for i in range(0, 10):\n        ...     linked_list.insert_nth(i, i)\n        >>> linked_list[0] = 666\n        >>> linked_list[0]\n        666\n        >>> linked_list[5] = -666\n        >>> linked_list[5]\n        -666\n        >>> linked_list[-10] = 666\n        Traceback (most recent call last):\n            ...\n        ValueError: list index out of range.\n        >>> linked_list[len(linked_list)] = 666\n        Traceback (most recent call last):\n            ...\n        ValueError: list index out of range.\n        \"\"\"\n        if not 0 <= index < len(self):\n            raise ValueError(\"list index out of range.\")\n        current = self.head\n        for _ in range(index):\n            current = current.next_node\n        current.data = data\n\n    def insert_tail(self, data: Any) -> None:\n        \"\"\"\n        Insert data to the end of linked list.\n        >>> linked_list = LinkedList()\n        >>> linked_list.insert_tail(\"tail\")\n        >>> linked_list\n        tail\n        >>> linked_list.insert_tail(\"tail_2\")\n        >>> linked_list\n        tail -> tail_2\n        >>> linked_list.insert_tail(\"tail_3\")\n        >>> linked_list\n        tail -> tail_2 -> tail_3\n        \"\"\"\n        self.insert_nth(len(self), data)\n\n    def insert_head(self, data: Any) -> None:\n        \"\"\"\n        Insert data to the beginning of linked list.\n        >>> linked_list = LinkedList()\n        >>> linked_list.insert_head(\"head\")\n        >>> linked_list\n        head\n        >>> linked_list.insert_head(\"head_2\")\n        >>> linked_list\n        head_2 -> head\n        >>> linked_list.insert_head(\"head_3\")\n        >>> linked_list\n        head_3 -> head_2 -> head\n        \"\"\"\n        self.insert_nth(0, data)\n\n    def insert_nth(self, index: int, data: Any) -> None:\n        \"\"\"\n        Insert data at given index.\n        >>> linked_list = LinkedList()\n        >>> linked_list.insert_tail(\"first\")\n        >>> linked_list.insert_tail(\"second\")\n        >>> linked_list.insert_tail(\"third\")\n        >>> linked_list\n        first -> second -> third\n        >>> linked_list.insert_nth(1, \"fourth\")\n        >>> linked_list\n        first -> fourth -> second -> third\n        >>> linked_list.insert_nth(3, \"fifth\")\n        >>> linked_list\n        first -> fourth -> second -> fifth -> third\n        \"\"\"\n        if not 0 <= index <= len(self):\n            raise IndexError(\"list index out of range\")\n        new_node = Node(data)\n        if self.head is None:\n            self.head = new_node\n        elif index == 0:\n            new_node.next_node = self.head  # link new_node to head\n            self.head = new_node\n        else:\n            temp = self.head\n            for _ in range(index - 1):\n                temp = temp.next_node\n            new_node.next_node = temp.next_node\n            temp.next_node = new_node\n\n    def print_list(self) -> None:  # print every node data\n        \"\"\"\n        This method prints every node data.\n        >>> linked_list = LinkedList()\n        >>> linked_list.insert_tail(\"first\")\n        >>> linked_list.insert_tail(\"second\")\n        >>> linked_list.insert_tail(\"third\")\n        >>> linked_list\n        first -> second -> third\n        \"\"\"\n        print(self)\n\n    def delete_head(self) -> Any:\n        \"\"\"\n        Delete the first node and return the\n        node's data.\n        >>> linked_list = LinkedList()\n        >>> linked_list.insert_tail(\"first\")\n        >>> linked_list.insert_tail(\"second\")\n        >>> linked_list.insert_tail(\"third\")\n        >>> linked_list\n        first -> second -> third\n        >>> linked_list.delete_head()\n        'first'\n        >>> linked_list\n        second -> third\n        >>> linked_list.delete_head()\n        'second'\n        >>> linked_list\n        third\n        >>> linked_list.delete_head()\n        'third'\n        >>> linked_list.delete_head()\n        Traceback (most recent call last):\n            ...\n        IndexError: List index out of range.\n        \"\"\"\n        return self.delete_nth(0)\n\n    def delete_tail(self) -> Any:  # delete from tail\n        \"\"\"\n        Delete the tail end node and return the\n        node's data.\n        >>> linked_list = LinkedList()\n        >>> linked_list.insert_tail(\"first\")\n        >>> linked_list.insert_tail(\"second\")\n        >>> linked_list.insert_tail(\"third\")\n        >>> linked_list\n        first -> second -> third\n        >>> linked_list.delete_tail()\n        'third'\n        >>> linked_list\n        first -> second\n        >>> linked_list.delete_tail()\n        'second'\n        >>> linked_list\n        first\n        >>> linked_list.delete_tail()\n        'first'\n        >>> linked_list.delete_tail()\n        Traceback (most recent call last):\n            ...\n        IndexError: List index out of range.\n        \"\"\"\n        return self.delete_nth(len(self) - 1)\n\n    def delete_nth(self, index: int = 0) -> Any:\n        \"\"\"\n        Delete node at given index and return the\n        node's data.\n        >>> linked_list = LinkedList()\n        >>> linked_list.insert_tail(\"first\")\n        >>> linked_list.insert_tail(\"second\")\n        >>> linked_list.insert_tail(\"third\")\n        >>> linked_list\n        first -> second -> third\n        >>> linked_list.delete_nth(1) # delete middle\n        'second'\n        >>> linked_list\n        first -> third\n        >>> linked_list.delete_nth(5) # this raises error\n        Traceback (most recent call last):\n            ...\n        IndexError: List index out of range.\n        >>> linked_list.delete_nth(-1) # this also raises error\n        Traceback (most recent call last):\n            ...\n        IndexError: List index out of range.\n        \"\"\"\n        if not 0 <= index <= len(self) - 1:  # test if index is valid\n            raise IndexError(\"List index out of range.\")\n        delete_node = self.head  # default first node\n        if index == 0:\n            self.head = self.head.next_node\n        else:\n            temp = self.head\n            for _ in range(index - 1):\n                temp = temp.next_node\n            delete_node = temp.next_node\n            temp.next_node = temp.next_node.next_node\n        return delete_node.data\n\n    def is_empty(self) -> bool:\n        \"\"\"\n        Check if linked list is empty.\n        >>> linked_list = LinkedList()\n        >>> linked_list.is_empty()\n        True\n        >>> linked_list.insert_head(\"first\")\n        >>> linked_list.is_empty()\n        False\n        \"\"\"\n        return self.head is None\n\n    def reverse(self) -> None:\n        \"\"\"\n        This reverses the linked list order.\n        >>> linked_list = LinkedList()\n        >>> linked_list.insert_tail(\"first\")\n        >>> linked_list.insert_tail(\"second\")\n        >>> linked_list.insert_tail(\"third\")\n        >>> linked_list\n        first -> second -> third\n        >>> linked_list.reverse()\n        >>> linked_list\n        third -> second -> first\n        \"\"\"\n        prev = None\n        current = self.head\n\n        while current:\n            # Store the current node's next node.\n            next_node = current.next_node\n            # Make the current node's next_node point backwards\n            current.next_node = prev\n            # Make the previous node be the current node\n            prev = current\n            # Make the current node the next_node node (to progress iteration)\n            current = next_node\n        # Return prev in order to put the head at the end\n        self.head = prev\n\n\ndef test_singly_linked_list() -> None:\n    \"\"\"\n    >>> test_singly_linked_list()\n    \"\"\"\n    linked_list = LinkedList()\n    assert linked_list.is_empty() is True\n    assert str(linked_list) == \"\"\n\n    try:\n        linked_list.delete_head()\n        raise AssertionError  # This should not happen.\n    except IndexError:\n        assert True  # This should happen.\n\n    try:\n        linked_list.delete_tail()\n        raise AssertionError  # This should not happen.\n    except IndexError:\n        assert True  # This should happen.\n\n    for i in range(10):\n        assert len(linked_list) == i\n        linked_list.insert_nth(i, i + 1)\n    assert str(linked_list) == \" -> \".join(str(i) for i in range(1, 11))\n\n    linked_list.insert_head(0)\n    linked_list.insert_tail(11)\n    assert str(linked_list) == \" -> \".join(str(i) for i in range(12))\n\n    assert linked_list.delete_head() == 0\n    assert linked_list.delete_nth(9) == 10\n    assert linked_list.delete_tail() == 11\n    assert len(linked_list) == 9\n    assert str(linked_list) == \" -> \".join(str(i) for i in range(1, 10))\n\n    assert all(linked_list[i] == i + 1 for i in range(9)) is True\n\n    for i in range(9):\n        linked_list[i] = -i\n    assert all(linked_list[i] == -i for i in range(9)) is True\n\n    linked_list.reverse()\n    assert str(linked_list) == \" -> \".join(str(i) for i in range(-8, 1))\n\n\ndef test_singly_linked_list_2() -> None:\n    \"\"\"\n    This section of the test used varying data types for input.\n    >>> test_singly_linked_list_2()\n    \"\"\"\n    test_input = [\n        -9,\n        100,\n        Node(77345112),\n        \"dlrow olleH\",\n        7,\n        5555,\n        0,\n        -192.55555,\n        \"Hello, world!\",\n        77.9,\n        Node(10),\n        None,\n        None,\n        12.20,\n    ]\n    linked_list = LinkedList()\n\n    for i in test_input:\n        linked_list.insert_tail(i)\n\n    # Check if it's empty or not\n    assert linked_list.is_empty() is False\n    assert (\n        str(linked_list)\n        == \"-9 -> 100 -> Node(77345112) -> dlrow olleH -> 7 -> 5555 -> \"\n        \"0 -> -192.55555 -> Hello, world! -> 77.9 -> Node(10) -> None -> None -> 12.2\"\n    )\n\n    # Delete the head\n    result = linked_list.delete_head()\n    assert result == -9\n    assert (\n        str(linked_list) == \"100 -> Node(77345112) -> dlrow olleH -> 7 -> 5555 -> 0 -> \"\n        \"-192.55555 -> Hello, world! -> 77.9 -> Node(10) -> None -> None -> 12.2\"\n    )\n\n    # Delete the tail\n    result = linked_list.delete_tail()\n    assert result == 12.2\n    assert (\n        str(linked_list) == \"100 -> Node(77345112) -> dlrow olleH -> 7 -> 5555 -> 0 -> \"\n        \"-192.55555 -> Hello, world! -> 77.9 -> Node(10) -> None -> None\"\n    )\n\n    # Delete a node in specific location in linked list\n    result = linked_list.delete_nth(10)\n    assert result is None\n    assert (\n        str(linked_list) == \"100 -> Node(77345112) -> dlrow olleH -> 7 -> 5555 -> 0 -> \"\n        \"-192.55555 -> Hello, world! -> 77.9 -> Node(10) -> None\"\n    )\n\n    # Add a Node instance to its head\n    linked_list.insert_head(Node(\"Hello again, world!\"))\n    assert (\n        str(linked_list)\n        == \"Node(Hello again, world!) -> 100 -> Node(77345112) -> dlrow olleH -> \"\n        \"7 -> 5555 -> 0 -> -192.55555 -> Hello, world! -> 77.9 -> Node(10) -> None\"\n    )\n\n    # Add None to its tail\n    linked_list.insert_tail(None)\n    assert (\n        str(linked_list)\n        == \"Node(Hello again, world!) -> 100 -> Node(77345112) -> dlrow olleH -> 7 -> \"\n        \"5555 -> 0 -> -192.55555 -> Hello, world! -> 77.9 -> Node(10) -> None -> None\"\n    )\n\n    # Reverse the linked list\n    linked_list.reverse()\n    assert (\n        str(linked_list)\n        == \"None -> None -> Node(10) -> 77.9 -> Hello, world! -> -192.55555 -> 0 -> \"\n        \"5555 -> 7 -> dlrow olleH -> Node(77345112) -> 100 -> Node(Hello again, world!)\"\n    )\n\n\ndef main():\n    from doctest import testmod\n\n    testmod()\n\n    linked_list = LinkedList()\n    linked_list.insert_head(input(\"Inserting 1st at head \").strip())\n    linked_list.insert_head(input(\"Inserting 2nd at head \").strip())\n    print(\"\\nPrint list:\")\n    linked_list.print_list()\n    linked_list.insert_tail(input(\"\\nInserting 1st at tail \").strip())\n    linked_list.insert_tail(input(\"Inserting 2nd at tail \").strip())\n    print(\"\\nPrint list:\")\n    linked_list.print_list()\n    print(\"\\nDelete head\")\n    linked_list.delete_head()\n    print(\"Delete tail\")\n    linked_list.delete_tail()\n    print(\"\\nPrint list:\")\n    linked_list.print_list()\n    print(\"\\nReverse linked list\")\n    linked_list.reverse()\n    print(\"\\nPrint list:\")\n    linked_list.print_list()\n    print(\"\\nString representation of linked list:\")\n    print(linked_list)\n    print(\"\\nReading/changing Node data using indexing:\")\n    print(f\"Element at Position 1: {linked_list[1]}\")\n    linked_list[1] = input(\"Enter New Value: \").strip()\n    print(\"New list:\")\n    print(linked_list)\n    print(f\"length of linked_list is : {len(linked_list)}\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "data_structures/linked_list/skip_list.py",
    "content": "\"\"\"\nBased on \"Skip Lists: A Probabilistic Alternative to Balanced Trees\" by William Pugh\nhttps://epaperpress.com/sortsearch/download/skiplist.pdf\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom itertools import pairwise\nfrom random import random\nfrom typing import TypeVar\n\nKT = TypeVar(\"KT\")\nVT = TypeVar(\"VT\")\n\n\nclass Node[KT, VT]:\n    def __init__(self, key: KT | str = \"root\", value: VT | None = None):\n        self.key = key\n        self.value = value\n        self.forward: list[Node[KT, VT]] = []\n\n    def __repr__(self) -> str:\n        \"\"\"\n        :return: Visual representation of Node\n\n        >>> node = Node(\"Key\", 2)\n        >>> repr(node)\n        'Node(Key: 2)'\n        \"\"\"\n\n        return f\"Node({self.key}: {self.value})\"\n\n    @property\n    def level(self) -> int:\n        \"\"\"\n        :return: Number of forward references\n\n        >>> node = Node(\"Key\", 2)\n        >>> node.level\n        0\n        >>> node.forward.append(Node(\"Key2\", 4))\n        >>> node.level\n        1\n        >>> node.forward.append(Node(\"Key3\", 6))\n        >>> node.level\n        2\n        \"\"\"\n\n        return len(self.forward)\n\n\nclass SkipList[KT, VT]:\n    def __init__(self, p: float = 0.5, max_level: int = 16):\n        self.head: Node[KT, VT] = Node[KT, VT]()\n        self.level = 0\n        self.p = p\n        self.max_level = max_level\n\n    def __str__(self) -> str:\n        \"\"\"\n        :return: Visual representation of SkipList\n\n        >>> skip_list = SkipList()\n        >>> print(skip_list)\n        SkipList(level=0)\n        >>> skip_list.insert(\"Key1\", \"Value\")\n        >>> print(skip_list) # doctest: +ELLIPSIS\n        SkipList(level=...\n        [root]--...\n        [Key1]--Key1...\n        None    *...\n        >>> skip_list.insert(\"Key2\", \"OtherValue\")\n        >>> print(skip_list) # doctest: +ELLIPSIS\n        SkipList(level=...\n        [root]--...\n        [Key1]--Key1...\n        [Key2]--Key2...\n        None    *...\n        \"\"\"\n\n        items = list(self)\n\n        if len(items) == 0:\n            return f\"SkipList(level={self.level})\"\n\n        label_size = max((len(str(item)) for item in items), default=4)\n        label_size = max(label_size, 4) + 4\n\n        node = self.head\n        lines = []\n\n        forwards = node.forward.copy()\n        lines.append(f\"[{node.key}]\".ljust(label_size, \"-\") + \"* \" * len(forwards))\n        lines.append(\" \" * label_size + \"| \" * len(forwards))\n\n        while len(node.forward) != 0:\n            node = node.forward[0]\n\n            lines.append(\n                f\"[{node.key}]\".ljust(label_size, \"-\")\n                + \" \".join(str(n.key) if n.key == node.key else \"|\" for n in forwards)\n            )\n            lines.append(\" \" * label_size + \"| \" * len(forwards))\n            forwards[: node.level] = node.forward\n\n        lines.append(\"None\".ljust(label_size) + \"* \" * len(forwards))\n        return f\"SkipList(level={self.level})\\n\" + \"\\n\".join(lines)\n\n    def __iter__(self):\n        node = self.head\n\n        while len(node.forward) != 0:\n            yield node.forward[0].key\n            node = node.forward[0]\n\n    def random_level(self) -> int:\n        \"\"\"\n        :return: Random level from [1, self.max_level] interval.\n                 Higher values are less likely.\n        \"\"\"\n\n        level = 1\n        while random() < self.p and level < self.max_level:\n            level += 1\n\n        return level\n\n    def _locate_node(self, key) -> tuple[Node[KT, VT] | None, list[Node[KT, VT]]]:\n        \"\"\"\n        :param key: Searched key,\n        :return: Tuple with searched node (or None if given key is not present)\n                 and list of nodes that refer (if key is present) of should refer to\n                 given node.\n        \"\"\"\n\n        # Nodes with refer or should refer to output node\n        update_vector = []\n\n        node = self.head\n\n        for i in reversed(range(self.level)):\n            # i < node.level - When node level is lesser than `i` decrement `i`.\n            # node.forward[i].key < key - Jumping to node with key value higher\n            #                             or equal to searched key would result\n            #                             in skipping searched key.\n            while i < node.level and node.forward[i].key < key:\n                node = node.forward[i]\n            # Each leftmost node (relative to searched node) will potentially have to\n            # be updated.\n            update_vector.append(node)\n\n        update_vector.reverse()  # Note that we were inserting values in reverse order.\n\n        # len(node.forward) != 0 - If current node doesn't contain any further\n        #                          references then searched key is not present.\n        # node.forward[0].key == key - Next node key should be equal to search key\n        #                              if key is present.\n        if len(node.forward) != 0 and node.forward[0].key == key:\n            return node.forward[0], update_vector\n        else:\n            return None, update_vector\n\n    def delete(self, key: KT):\n        \"\"\"\n        :param key: Key to remove from list.\n\n        >>> skip_list = SkipList()\n        >>> skip_list.insert(2, \"Two\")\n        >>> skip_list.insert(1, \"One\")\n        >>> skip_list.insert(3, \"Three\")\n        >>> list(skip_list)\n        [1, 2, 3]\n        >>> skip_list.delete(2)\n        >>> list(skip_list)\n        [1, 3]\n        \"\"\"\n\n        node, update_vector = self._locate_node(key)\n\n        if node is not None:\n            for i, update_node in enumerate(update_vector):\n                # Remove or replace all references to removed node.\n                if update_node.level > i and update_node.forward[i].key == key:\n                    if node.level > i:\n                        update_node.forward[i] = node.forward[i]\n                    else:\n                        update_node.forward = update_node.forward[:i]\n\n    def insert(self, key: KT, value: VT):\n        \"\"\"\n        :param key: Key to insert.\n        :param value: Value associated with given key.\n\n        >>> skip_list = SkipList()\n        >>> skip_list.insert(2, \"Two\")\n        >>> skip_list.find(2)\n        'Two'\n        >>> list(skip_list)\n        [2]\n        \"\"\"\n\n        node, update_vector = self._locate_node(key)\n        if node is not None:\n            node.value = value\n        else:\n            level = self.random_level()\n\n            if level > self.level:\n                # After level increase we have to add additional nodes to head.\n                for _ in range(self.level - 1, level):\n                    update_vector.append(self.head)\n                self.level = level\n\n            new_node = Node(key, value)\n\n            for i, update_node in enumerate(update_vector[:level]):\n                # Change references to pass through new node.\n                if update_node.level > i:\n                    new_node.forward.append(update_node.forward[i])\n\n                if update_node.level < i + 1:\n                    update_node.forward.append(new_node)\n                else:\n                    update_node.forward[i] = new_node\n\n    def find(self, key: VT) -> VT | None:\n        \"\"\"\n        :param key: Search key.\n        :return: Value associated with given key or None if given key is not present.\n\n        >>> skip_list = SkipList()\n        >>> skip_list.find(2)\n        >>> skip_list.insert(2, \"Two\")\n        >>> skip_list.find(2)\n        'Two'\n        >>> skip_list.insert(2, \"Three\")\n        >>> skip_list.find(2)\n        'Three'\n        \"\"\"\n\n        node, _ = self._locate_node(key)\n\n        if node is not None:\n            return node.value\n\n        return None\n\n\ndef test_insert():\n    skip_list = SkipList()\n    skip_list.insert(\"Key1\", 3)\n    skip_list.insert(\"Key2\", 12)\n    skip_list.insert(\"Key3\", 41)\n    skip_list.insert(\"Key4\", -19)\n\n    node = skip_list.head\n    all_values = {}\n    while node.level != 0:\n        node = node.forward[0]\n        all_values[node.key] = node.value\n\n    assert len(all_values) == 4\n    assert all_values[\"Key1\"] == 3\n    assert all_values[\"Key2\"] == 12\n    assert all_values[\"Key3\"] == 41\n    assert all_values[\"Key4\"] == -19\n\n\ndef test_insert_overrides_existing_value():\n    skip_list = SkipList()\n    skip_list.insert(\"Key1\", 10)\n    skip_list.insert(\"Key1\", 12)\n\n    skip_list.insert(\"Key5\", 7)\n    skip_list.insert(\"Key7\", 10)\n    skip_list.insert(\"Key10\", 5)\n\n    skip_list.insert(\"Key7\", 7)\n    skip_list.insert(\"Key5\", 5)\n    skip_list.insert(\"Key10\", 10)\n\n    node = skip_list.head\n    all_values = {}\n    while node.level != 0:\n        node = node.forward[0]\n        all_values[node.key] = node.value\n\n    if len(all_values) != 4:\n        print()\n    assert len(all_values) == 4\n    assert all_values[\"Key1\"] == 12\n    assert all_values[\"Key7\"] == 7\n    assert all_values[\"Key5\"] == 5\n    assert all_values[\"Key10\"] == 10\n\n\ndef test_searching_empty_list_returns_none():\n    skip_list = SkipList()\n    assert skip_list.find(\"Some key\") is None\n\n\ndef test_search():\n    skip_list = SkipList()\n\n    skip_list.insert(\"Key2\", 20)\n    assert skip_list.find(\"Key2\") == 20\n\n    skip_list.insert(\"Some Key\", 10)\n    skip_list.insert(\"Key2\", 8)\n    skip_list.insert(\"V\", 13)\n\n    assert skip_list.find(\"Y\") is None\n    assert skip_list.find(\"Key2\") == 8\n    assert skip_list.find(\"Some Key\") == 10\n    assert skip_list.find(\"V\") == 13\n\n\ndef test_deleting_item_from_empty_list_do_nothing():\n    skip_list = SkipList()\n    skip_list.delete(\"Some key\")\n\n    assert len(skip_list.head.forward) == 0\n\n\ndef test_deleted_items_are_not_founded_by_find_method():\n    skip_list = SkipList()\n\n    skip_list.insert(\"Key1\", 12)\n    skip_list.insert(\"V\", 13)\n    skip_list.insert(\"X\", 14)\n    skip_list.insert(\"Key2\", 15)\n\n    skip_list.delete(\"V\")\n    skip_list.delete(\"Key2\")\n\n    assert skip_list.find(\"V\") is None\n    assert skip_list.find(\"Key2\") is None\n\n\ndef test_delete_removes_only_given_key():\n    skip_list = SkipList()\n\n    skip_list.insert(\"Key1\", 12)\n    skip_list.insert(\"V\", 13)\n    skip_list.insert(\"X\", 14)\n    skip_list.insert(\"Key2\", 15)\n\n    skip_list.delete(\"V\")\n    assert skip_list.find(\"V\") is None\n    assert skip_list.find(\"X\") == 14\n    assert skip_list.find(\"Key1\") == 12\n    assert skip_list.find(\"Key2\") == 15\n\n    skip_list.delete(\"X\")\n    assert skip_list.find(\"V\") is None\n    assert skip_list.find(\"X\") is None\n    assert skip_list.find(\"Key1\") == 12\n    assert skip_list.find(\"Key2\") == 15\n\n    skip_list.delete(\"Key1\")\n    assert skip_list.find(\"V\") is None\n    assert skip_list.find(\"X\") is None\n    assert skip_list.find(\"Key1\") is None\n    assert skip_list.find(\"Key2\") == 15\n\n    skip_list.delete(\"Key2\")\n    assert skip_list.find(\"V\") is None\n    assert skip_list.find(\"X\") is None\n    assert skip_list.find(\"Key1\") is None\n    assert skip_list.find(\"Key2\") is None\n\n\ndef test_delete_doesnt_leave_dead_nodes():\n    skip_list = SkipList()\n\n    skip_list.insert(\"Key1\", 12)\n    skip_list.insert(\"V\", 13)\n    skip_list.insert(\"X\", 142)\n    skip_list.insert(\"Key2\", 15)\n\n    skip_list.delete(\"X\")\n\n    def traverse_keys(node):\n        yield node.key\n        for forward_node in node.forward:\n            yield from traverse_keys(forward_node)\n\n    assert len(set(traverse_keys(skip_list.head))) == 4\n\n\ndef test_iter_always_yields_sorted_values():\n    def is_sorted(lst):\n        return all(next_item >= item for item, next_item in pairwise(lst))\n\n    skip_list = SkipList()\n    for i in range(10):\n        skip_list.insert(i, i)\n    assert is_sorted(list(skip_list))\n    skip_list.delete(5)\n    skip_list.delete(8)\n    skip_list.delete(2)\n    assert is_sorted(list(skip_list))\n    skip_list.insert(-12, -12)\n    skip_list.insert(77, 77)\n    assert is_sorted(list(skip_list))\n\n\ndef pytests():\n    for _ in range(100):\n        # Repeat test 100 times due to the probabilistic nature of skip list\n        # random values == random bugs\n        test_insert()\n        test_insert_overrides_existing_value()\n\n        test_searching_empty_list_returns_none()\n        test_search()\n\n        test_deleting_item_from_empty_list_do_nothing()\n        test_deleted_items_are_not_founded_by_find_method()\n        test_delete_removes_only_given_key()\n        test_delete_doesnt_leave_dead_nodes()\n\n        test_iter_always_yields_sorted_values()\n\n\ndef main():\n    \"\"\"\n    >>> pytests()\n    \"\"\"\n\n    skip_list = SkipList()\n    skip_list.insert(2, \"2\")\n    skip_list.insert(4, \"4\")\n    skip_list.insert(6, \"4\")\n    skip_list.insert(4, \"5\")\n    skip_list.insert(8, \"4\")\n    skip_list.insert(9, \"4\")\n\n    skip_list.delete(4)\n\n    print(skip_list)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    main()\n"
  },
  {
    "path": "data_structures/linked_list/swap_nodes.py",
    "content": "from __future__ import annotations\r\n\r\nfrom collections.abc import Iterator\r\nfrom dataclasses import dataclass\r\nfrom typing import Any\r\n\r\n\r\n@dataclass\r\nclass Node:\r\n    data: Any\r\n    next_node: Node | None = None\r\n\r\n\r\n@dataclass\r\nclass LinkedList:\r\n    head: Node | None = None\r\n\r\n    def __iter__(self) -> Iterator:\r\n        \"\"\"\r\n        >>> linked_list = LinkedList()\r\n        >>> list(linked_list)\r\n        []\r\n        >>> linked_list.push(0)\r\n        >>> tuple(linked_list)\r\n        (0,)\r\n        \"\"\"\r\n        node = self.head\r\n        while node:\r\n            yield node.data\r\n            node = node.next_node\r\n\r\n    def __len__(self) -> int:\r\n        \"\"\"\r\n        >>> linked_list = LinkedList()\r\n        >>> len(linked_list)\r\n        0\r\n        >>> linked_list.push(0)\r\n        >>> len(linked_list)\r\n        1\r\n        \"\"\"\r\n        return sum(1 for _ in self)\r\n\r\n    def push(self, new_data: Any) -> None:\r\n        \"\"\"\r\n        Add a new node with the given data to the beginning of the Linked List.\r\n\r\n        Args:\r\n            new_data (Any): The data to be added to the new node.\r\n\r\n        Returns:\r\n            None\r\n\r\n        Examples:\r\n            >>> linked_list = LinkedList()\r\n            >>> linked_list.push(5)\r\n            >>> linked_list.push(4)\r\n            >>> linked_list.push(3)\r\n            >>> linked_list.push(2)\r\n            >>> linked_list.push(1)\r\n            >>> list(linked_list)\r\n            [1, 2, 3, 4, 5]\r\n        \"\"\"\r\n        new_node = Node(new_data)\r\n        new_node.next_node = self.head\r\n        self.head = new_node\r\n\r\n    def swap_nodes(self, node_data_1: Any, node_data_2: Any) -> None:\r\n        \"\"\"\r\n        Swap the positions of two nodes in the Linked List based on their data values.\r\n\r\n        Args:\r\n            node_data_1: Data value of the first node to be swapped.\r\n            node_data_2: Data value of the second node to be swapped.\r\n\r\n\r\n        Note:\r\n            If either of the specified data values isn't found then, no swapping occurs.\r\n\r\n        Examples:\r\n        When both values are present in a linked list.\r\n            >>> linked_list = LinkedList()\r\n            >>> linked_list.push(5)\r\n            >>> linked_list.push(4)\r\n            >>> linked_list.push(3)\r\n            >>> linked_list.push(2)\r\n            >>> linked_list.push(1)\r\n            >>> list(linked_list)\r\n            [1, 2, 3, 4, 5]\r\n            >>> linked_list.swap_nodes(1, 5)\r\n            >>> tuple(linked_list)\r\n            (5, 2, 3, 4, 1)\r\n\r\n        When one value is present and the other isn't in the linked list.\r\n            >>> second_list = LinkedList()\r\n            >>> second_list.push(6)\r\n            >>> second_list.push(7)\r\n            >>> second_list.push(8)\r\n            >>> second_list.push(9)\r\n            >>> second_list.swap_nodes(1, 6) is None\r\n            True\r\n\r\n        When both values are absent in the linked list.\r\n            >>> second_list = LinkedList()\r\n            >>> second_list.push(10)\r\n            >>> second_list.push(9)\r\n            >>> second_list.push(8)\r\n            >>> second_list.push(7)\r\n            >>> second_list.swap_nodes(1, 3) is None\r\n            True\r\n\r\n        When linkedlist is empty.\r\n            >>> second_list = LinkedList()\r\n            >>> second_list.swap_nodes(1, 3) is None\r\n            True\r\n\r\n        Returns:\r\n            None\r\n        \"\"\"\r\n        if node_data_1 == node_data_2:\r\n            return\r\n\r\n        node_1 = self.head\r\n        while node_1 and node_1.data != node_data_1:\r\n            node_1 = node_1.next_node\r\n        node_2 = self.head\r\n        while node_2 and node_2.data != node_data_2:\r\n            node_2 = node_2.next_node\r\n        if node_1 is None or node_2 is None:\r\n            return\r\n        # Swap the data values of the two nodes\r\n        node_1.data, node_2.data = node_2.data, node_1.data\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    \"\"\"\r\n    Python script that outputs the swap of nodes in a linked list.\r\n    \"\"\"\r\n    from doctest import testmod\r\n\r\n    testmod()\r\n    linked_list = LinkedList()\r\n    for i in range(5, 0, -1):\r\n        linked_list.push(i)\r\n\r\n    print(f\"Original Linked List: {list(linked_list)}\")\r\n    linked_list.swap_nodes(1, 4)\r\n    print(f\"Modified Linked List: {list(linked_list)}\")\r\n    print(\"After swapping the nodes whose data is 1 and 4.\")\r\n"
  },
  {
    "path": "data_structures/queues/__init__.py",
    "content": ""
  },
  {
    "path": "data_structures/queues/circular_queue.py",
    "content": "# Implementation of Circular Queue (using Python lists)\n\n\nclass CircularQueue:\n    \"\"\"Circular FIFO queue with a fixed capacity\"\"\"\n\n    def __init__(self, n: int):\n        self.n = n\n        self.array = [None] * self.n\n        self.front = 0  # index of the first element\n        self.rear = 0\n        self.size = 0\n\n    def __len__(self) -> int:\n        \"\"\"\n        >>> cq = CircularQueue(5)\n        >>> len(cq)\n        0\n        >>> cq.enqueue(\"A\")  # doctest: +ELLIPSIS\n        <data_structures.queues.circular_queue.CircularQueue object at ...>\n        >>> cq.array\n        ['A', None, None, None, None]\n        >>> len(cq)\n        1\n        \"\"\"\n        return self.size\n\n    def is_empty(self) -> bool:\n        \"\"\"\n        Checks whether the queue is empty or not\n        >>> cq = CircularQueue(5)\n        >>> cq.is_empty()\n        True\n        >>> cq.enqueue(\"A\").is_empty()\n        False\n        \"\"\"\n        return self.size == 0\n\n    def first(self):\n        \"\"\"\n        Returns the first element of the queue\n        >>> cq = CircularQueue(5)\n        >>> cq.first()\n        False\n        >>> cq.enqueue(\"A\").first()\n        'A'\n        \"\"\"\n        return False if self.is_empty() else self.array[self.front]\n\n    def enqueue(self, data):\n        \"\"\"\n        This function inserts an element at the end of the queue using self.rear value\n        as an index.\n\n        >>> cq = CircularQueue(5)\n        >>> cq.enqueue(\"A\")  # doctest: +ELLIPSIS\n        <data_structures.queues.circular_queue.CircularQueue object at ...>\n        >>> (cq.size, cq.first())\n        (1, 'A')\n        >>> cq.enqueue(\"B\")  # doctest: +ELLIPSIS\n        <data_structures.queues.circular_queue.CircularQueue object at ...>\n        >>> cq.array\n        ['A', 'B', None, None, None]\n        >>> (cq.size, cq.first())\n        (2, 'A')\n        >>> cq.enqueue(\"C\").enqueue(\"D\").enqueue(\"E\")  # doctest: +ELLIPSIS\n        <data_structures.queues.circular_queue.CircularQueue object at ...>\n        >>> cq.enqueue(\"F\")\n        Traceback (most recent call last):\n           ...\n        Exception: QUEUE IS FULL\n        \"\"\"\n        if self.size >= self.n:\n            raise Exception(\"QUEUE IS FULL\")\n\n        self.array[self.rear] = data\n        self.rear = (self.rear + 1) % self.n\n        self.size += 1\n        return self\n\n    def dequeue(self):\n        \"\"\"\n        This function removes an element from the queue using on self.front value as an\n        index and returns it\n\n        >>> cq = CircularQueue(5)\n        >>> cq.dequeue()\n        Traceback (most recent call last):\n           ...\n        Exception: UNDERFLOW\n        >>> cq.enqueue(\"A\").enqueue(\"B\").dequeue()\n        'A'\n        >>> (cq.size, cq.first())\n        (1, 'B')\n        >>> cq.dequeue()\n        'B'\n        >>> cq.dequeue()\n        Traceback (most recent call last):\n           ...\n        Exception: UNDERFLOW\n        \"\"\"\n        if self.size == 0:\n            raise Exception(\"UNDERFLOW\")\n\n        temp = self.array[self.front]\n        self.array[self.front] = None\n        self.front = (self.front + 1) % self.n\n        self.size -= 1\n        return temp\n"
  },
  {
    "path": "data_structures/queues/circular_queue_linked_list.py",
    "content": "# Implementation of Circular Queue using linked lists\n# https://en.wikipedia.org/wiki/Circular_buffer\n\nfrom __future__ import annotations\n\nfrom typing import Any\n\n\nclass CircularQueueLinkedList:\n    \"\"\"\n    Circular FIFO list with the given capacity (default queue length : 6)\n\n    >>> cq = CircularQueueLinkedList(2)\n    >>> cq.enqueue('a')\n    >>> cq.enqueue('b')\n    >>> cq.enqueue('c')\n    Traceback (most recent call last):\n       ...\n    Exception: Full Queue\n    \"\"\"\n\n    def __init__(self, initial_capacity: int = 6) -> None:\n        self.front: Node | None = None\n        self.rear: Node | None = None\n        self.create_linked_list(initial_capacity)\n\n    def create_linked_list(self, initial_capacity: int) -> None:\n        current_node = Node()\n        self.front = current_node\n        self.rear = current_node\n        previous_node = current_node\n        for _ in range(1, initial_capacity):\n            current_node = Node()\n            previous_node.next = current_node\n            current_node.prev = previous_node\n            previous_node = current_node\n        previous_node.next = self.front\n        self.front.prev = previous_node\n\n    def is_empty(self) -> bool:\n        \"\"\"\n        Checks whether the queue is empty or not\n        >>> cq = CircularQueueLinkedList()\n        >>> cq.is_empty()\n        True\n        >>> cq.enqueue('a')\n        >>> cq.is_empty()\n        False\n        >>> cq.dequeue()\n        'a'\n        >>> cq.is_empty()\n        True\n        \"\"\"\n\n        return (\n            self.front == self.rear\n            and self.front is not None\n            and self.front.data is None\n        )\n\n    def first(self) -> Any | None:\n        \"\"\"\n        Returns the first element of the queue\n        >>> cq = CircularQueueLinkedList()\n        >>> cq.first()\n        Traceback (most recent call last):\n           ...\n        Exception: Empty Queue\n        >>> cq.enqueue('a')\n        >>> cq.first()\n        'a'\n        >>> cq.dequeue()\n        'a'\n        >>> cq.first()\n        Traceback (most recent call last):\n           ...\n        Exception: Empty Queue\n        >>> cq.enqueue('b')\n        >>> cq.enqueue('c')\n        >>> cq.first()\n        'b'\n        \"\"\"\n        self.check_can_perform_operation()\n        return self.front.data if self.front else None\n\n    def enqueue(self, data: Any) -> None:\n        \"\"\"\n        Saves data at the end of the queue\n\n        >>> cq = CircularQueueLinkedList()\n        >>> cq.enqueue('a')\n        >>> cq.enqueue('b')\n        >>> cq.dequeue()\n        'a'\n        >>> cq.dequeue()\n        'b'\n        >>> cq.dequeue()\n        Traceback (most recent call last):\n           ...\n        Exception: Empty Queue\n        \"\"\"\n        if self.rear is None:\n            return\n\n        self.check_is_full()\n        if not self.is_empty():\n            self.rear = self.rear.next\n        if self.rear:\n            self.rear.data = data\n\n    def dequeue(self) -> Any:\n        \"\"\"\n        Removes and retrieves the first element of the queue\n\n        >>> cq = CircularQueueLinkedList()\n        >>> cq.dequeue()\n        Traceback (most recent call last):\n           ...\n        Exception: Empty Queue\n        >>> cq.enqueue('a')\n        >>> cq.dequeue()\n        'a'\n        >>> cq.dequeue()\n        Traceback (most recent call last):\n           ...\n        Exception: Empty Queue\n        \"\"\"\n        self.check_can_perform_operation()\n        if self.rear is None or self.front is None:\n            return None\n        if self.front == self.rear:\n            data = self.front.data\n            self.front.data = None\n            return data\n\n        old_front = self.front\n        self.front = old_front.next\n        data = old_front.data\n        old_front.data = None\n        return data\n\n    def check_can_perform_operation(self) -> None:\n        if self.is_empty():\n            raise Exception(\"Empty Queue\")\n\n    def check_is_full(self) -> None:\n        if self.rear and self.rear.next == self.front:\n            raise Exception(\"Full Queue\")\n\n\nclass Node:\n    def __init__(self) -> None:\n        self.data: Any | None = None\n        self.next: Node | None = None\n        self.prev: Node | None = None\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/queues/double_ended_queue.py",
    "content": "\"\"\"\nImplementation of double ended queue.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections.abc import Iterable\nfrom dataclasses import dataclass\nfrom typing import Any\n\n\nclass Deque:\n    \"\"\"\n    Deque data structure.\n    Operations\n    ----------\n    append(val: Any) -> None\n    appendleft(val: Any) -> None\n    extend(iterable: Iterable) -> None\n    extendleft(iterable: Iterable) -> None\n    pop() -> Any\n    popleft() -> Any\n    Observers\n    ---------\n    is_empty() -> bool\n    Attributes\n    ----------\n    _front: _Node\n        front of the deque a.k.a. the first element\n    _back: _Node\n        back of the element a.k.a. the last element\n    _len: int\n        the number of nodes\n    \"\"\"\n\n    __slots__ = (\"_back\", \"_front\", \"_len\")\n\n    @dataclass\n    class _Node:\n        \"\"\"\n        Representation of a node.\n        Contains a value and a pointer to the next node as well as to the previous one.\n        \"\"\"\n\n        val: Any = None\n        next_node: Deque._Node | None = None\n        prev_node: Deque._Node | None = None\n\n    class _Iterator:\n        \"\"\"\n        Helper class for iteration. Will be used to implement iteration.\n        Attributes\n        ----------\n        _cur: _Node\n            the current node of the iteration.\n        \"\"\"\n\n        __slots__ = (\"_cur\",)\n\n        def __init__(self, cur: Deque._Node | None) -> None:\n            self._cur = cur\n\n        def __iter__(self) -> Deque._Iterator:\n            \"\"\"\n            >>> our_deque = Deque([1, 2, 3])\n            >>> iterator = iter(our_deque)\n            \"\"\"\n            return self\n\n        def __next__(self) -> Any:\n            \"\"\"\n            >>> our_deque = Deque([1, 2, 3])\n            >>> iterator = iter(our_deque)\n            >>> next(iterator)\n            1\n            >>> next(iterator)\n            2\n            >>> next(iterator)\n            3\n            \"\"\"\n            if self._cur is None:\n                # finished iterating\n                raise StopIteration\n            val = self._cur.val\n            self._cur = self._cur.next_node\n\n            return val\n\n    def __init__(self, iterable: Iterable[Any] | None = None) -> None:\n        self._front: Any = None\n        self._back: Any = None\n        self._len: int = 0\n\n        if iterable is not None:\n            # append every value to the deque\n            for val in iterable:\n                self.append(val)\n\n    def append(self, val: Any) -> None:\n        \"\"\"\n        Adds val to the end of the deque.\n        Time complexity: O(1)\n        >>> our_deque_1 = Deque([1, 2, 3])\n        >>> our_deque_1.append(4)\n        >>> our_deque_1\n        [1, 2, 3, 4]\n        >>> our_deque_2 = Deque('ab')\n        >>> our_deque_2.append('c')\n        >>> our_deque_2\n        ['a', 'b', 'c']\n        >>> from collections import deque\n        >>> deque_collections_1 = deque([1, 2, 3])\n        >>> deque_collections_1.append(4)\n        >>> deque_collections_1\n        deque([1, 2, 3, 4])\n        >>> deque_collections_2 = deque('ab')\n        >>> deque_collections_2.append('c')\n        >>> deque_collections_2\n        deque(['a', 'b', 'c'])\n        >>> list(our_deque_1) == list(deque_collections_1)\n        True\n        >>> list(our_deque_2) == list(deque_collections_2)\n        True\n        \"\"\"\n        node = self._Node(val, None, None)\n        if self.is_empty():\n            # front = back\n            self._front = self._back = node\n            self._len = 1\n        else:\n            # connect nodes\n            self._back.next_node = node\n            node.prev_node = self._back\n            self._back = node  # assign new back to the new node\n\n            self._len += 1\n\n            # make sure there were no errors\n            assert not self.is_empty(), \"Error on appending value.\"\n\n    def appendleft(self, val: Any) -> None:\n        \"\"\"\n        Adds val to the beginning of the deque.\n        Time complexity: O(1)\n        >>> our_deque_1 = Deque([2, 3])\n        >>> our_deque_1.appendleft(1)\n        >>> our_deque_1\n        [1, 2, 3]\n        >>> our_deque_2 = Deque('bc')\n        >>> our_deque_2.appendleft('a')\n        >>> our_deque_2\n        ['a', 'b', 'c']\n        >>> from collections import deque\n        >>> deque_collections_1 = deque([2, 3])\n        >>> deque_collections_1.appendleft(1)\n        >>> deque_collections_1\n        deque([1, 2, 3])\n        >>> deque_collections_2 = deque('bc')\n        >>> deque_collections_2.appendleft('a')\n        >>> deque_collections_2\n        deque(['a', 'b', 'c'])\n        >>> list(our_deque_1) == list(deque_collections_1)\n        True\n        >>> list(our_deque_2) == list(deque_collections_2)\n        True\n        \"\"\"\n        node = self._Node(val, None, None)\n        if self.is_empty():\n            # front = back\n            self._front = self._back = node\n            self._len = 1\n        else:\n            # connect nodes\n            node.next_node = self._front\n            self._front.prev_node = node\n            self._front = node  # assign new front to the new node\n\n            self._len += 1\n\n            # make sure there were no errors\n            assert not self.is_empty(), \"Error on appending value.\"\n\n    def extend(self, iterable: Iterable[Any]) -> None:\n        \"\"\"\n        Appends every value of iterable to the end of the deque.\n        Time complexity: O(n)\n        >>> our_deque_1 = Deque([1, 2, 3])\n        >>> our_deque_1.extend([4, 5])\n        >>> our_deque_1\n        [1, 2, 3, 4, 5]\n        >>> our_deque_2 = Deque('ab')\n        >>> our_deque_2.extend('cd')\n        >>> our_deque_2\n        ['a', 'b', 'c', 'd']\n        >>> from collections import deque\n        >>> deque_collections_1 = deque([1, 2, 3])\n        >>> deque_collections_1.extend([4, 5])\n        >>> deque_collections_1\n        deque([1, 2, 3, 4, 5])\n        >>> deque_collections_2 = deque('ab')\n        >>> deque_collections_2.extend('cd')\n        >>> deque_collections_2\n        deque(['a', 'b', 'c', 'd'])\n        >>> list(our_deque_1) == list(deque_collections_1)\n        True\n        >>> list(our_deque_2) == list(deque_collections_2)\n        True\n        \"\"\"\n        for val in iterable:\n            self.append(val)\n\n    def extendleft(self, iterable: Iterable[Any]) -> None:\n        \"\"\"\n        Appends every value of iterable to the beginning of the deque.\n        Time complexity: O(n)\n        >>> our_deque_1 = Deque([1, 2, 3])\n        >>> our_deque_1.extendleft([0, -1])\n        >>> our_deque_1\n        [-1, 0, 1, 2, 3]\n        >>> our_deque_2 = Deque('cd')\n        >>> our_deque_2.extendleft('ba')\n        >>> our_deque_2\n        ['a', 'b', 'c', 'd']\n        >>> from collections import deque\n        >>> deque_collections_1 = deque([1, 2, 3])\n        >>> deque_collections_1.extendleft([0, -1])\n        >>> deque_collections_1\n        deque([-1, 0, 1, 2, 3])\n        >>> deque_collections_2 = deque('cd')\n        >>> deque_collections_2.extendleft('ba')\n        >>> deque_collections_2\n        deque(['a', 'b', 'c', 'd'])\n        >>> list(our_deque_1) == list(deque_collections_1)\n        True\n        >>> list(our_deque_2) == list(deque_collections_2)\n        True\n        \"\"\"\n        for val in iterable:\n            self.appendleft(val)\n\n    def pop(self) -> Any:\n        \"\"\"\n        Removes the last element of the deque and returns it.\n        Time complexity: O(1)\n        @returns topop.val: the value of the node to pop.\n        >>> our_deque1 = Deque([1])\n        >>> our_popped1 = our_deque1.pop()\n        >>> our_popped1\n        1\n        >>> our_deque1\n        []\n\n        >>> our_deque2 = Deque([1, 2, 3, 15182])\n        >>> our_popped2 = our_deque2.pop()\n        >>> our_popped2\n        15182\n        >>> our_deque2\n        [1, 2, 3]\n\n        >>> from collections import deque\n        >>> deque_collections = deque([1, 2, 3, 15182])\n        >>> collections_popped = deque_collections.pop()\n        >>> collections_popped\n        15182\n        >>> deque_collections\n        deque([1, 2, 3])\n        >>> list(our_deque2) == list(deque_collections)\n        True\n        >>> our_popped2 == collections_popped\n        True\n        \"\"\"\n        # make sure the deque has elements to pop\n        assert not self.is_empty(), \"Deque is empty.\"\n\n        topop = self._back\n        # if only one element in the queue: point the front and back to None\n        # else remove one element from back\n        if self._front == self._back:\n            self._front = None\n            self._back = None\n        else:\n            self._back = self._back.prev_node  # set new back\n            # drop the last node, python will deallocate memory automatically\n            self._back.next_node = None\n\n        self._len -= 1\n\n        return topop.val\n\n    def popleft(self) -> Any:\n        \"\"\"\n        Removes the first element of the deque and returns it.\n        Time complexity: O(1)\n        @returns topop.val: the value of the node to pop.\n        >>> our_deque1 = Deque([1])\n        >>> our_popped1 = our_deque1.pop()\n        >>> our_popped1\n        1\n        >>> our_deque1\n        []\n        >>> our_deque2 = Deque([15182, 1, 2, 3])\n        >>> our_popped2 = our_deque2.popleft()\n        >>> our_popped2\n        15182\n        >>> our_deque2\n        [1, 2, 3]\n        >>> from collections import deque\n        >>> deque_collections = deque([15182, 1, 2, 3])\n        >>> collections_popped = deque_collections.popleft()\n        >>> collections_popped\n        15182\n        >>> deque_collections\n        deque([1, 2, 3])\n        >>> list(our_deque2) == list(deque_collections)\n        True\n        >>> our_popped2 == collections_popped\n        True\n        \"\"\"\n        # make sure the deque has elements to pop\n        assert not self.is_empty(), \"Deque is empty.\"\n\n        topop = self._front\n        # if only one element in the queue: point the front and back to None\n        # else remove one element from front\n        if self._front == self._back:\n            self._front = None\n            self._back = None\n        else:\n            self._front = self._front.next_node  # set new front and drop the first node\n            self._front.prev_node = None\n\n        self._len -= 1\n\n        return topop.val\n\n    def is_empty(self) -> bool:\n        \"\"\"\n        Checks if the deque is empty.\n        Time complexity: O(1)\n        >>> our_deque = Deque([1, 2, 3])\n        >>> our_deque.is_empty()\n        False\n        >>> our_empty_deque = Deque()\n        >>> our_empty_deque.is_empty()\n        True\n        >>> from collections import deque\n        >>> empty_deque_collections = deque()\n        >>> list(our_empty_deque) == list(empty_deque_collections)\n        True\n        \"\"\"\n        return self._front is None\n\n    def __len__(self) -> int:\n        \"\"\"\n        Implements len() function. Returns the length of the deque.\n        Time complexity: O(1)\n        >>> our_deque = Deque([1, 2, 3])\n        >>> len(our_deque)\n        3\n        >>> our_empty_deque = Deque()\n        >>> len(our_empty_deque)\n        0\n        >>> from collections import deque\n        >>> deque_collections = deque([1, 2, 3])\n        >>> len(deque_collections)\n        3\n        >>> empty_deque_collections = deque()\n        >>> len(empty_deque_collections)\n        0\n        >>> len(our_empty_deque) == len(empty_deque_collections)\n        True\n        \"\"\"\n        return self._len\n\n    def __eq__(self, other: object) -> bool:\n        \"\"\"\n        Implements \"==\" operator. Returns if *self* is equal to *other*.\n        Time complexity: O(n)\n        >>> our_deque_1 = Deque([1, 2, 3])\n        >>> our_deque_2 = Deque([1, 2, 3])\n        >>> our_deque_1 == our_deque_2\n        True\n        >>> our_deque_3 = Deque([1, 2])\n        >>> our_deque_1 == our_deque_3\n        False\n        >>> from collections import deque\n        >>> deque_collections_1 = deque([1, 2, 3])\n        >>> deque_collections_2 = deque([1, 2, 3])\n        >>> deque_collections_1 == deque_collections_2\n        True\n        >>> deque_collections_3 = deque([1, 2])\n        >>> deque_collections_1 == deque_collections_3\n        False\n        >>> (our_deque_1 == our_deque_2) == (deque_collections_1 == deque_collections_2)\n        True\n        >>> (our_deque_1 == our_deque_3) == (deque_collections_1 == deque_collections_3)\n        True\n        \"\"\"\n\n        if not isinstance(other, Deque):\n            return NotImplemented\n\n        me = self._front\n        oth = other._front\n\n        # if the length of the dequeues are not the same, they are not equal\n        if len(self) != len(other):\n            return False\n\n        while me is not None and oth is not None:\n            # compare every value\n            if me.val != oth.val:\n                return False\n            me = me.next_node\n            oth = oth.next_node\n\n        return True\n\n    def __iter__(self) -> Deque._Iterator:\n        \"\"\"\n        Implements iteration.\n        Time complexity: O(1)\n        >>> our_deque = Deque([1, 2, 3])\n        >>> for v in our_deque:\n        ...     print(v)\n        1\n        2\n        3\n        >>> from collections import deque\n        >>> deque_collections = deque([1, 2, 3])\n        >>> for v in deque_collections:\n        ...     print(v)\n        1\n        2\n        3\n        \"\"\"\n        return Deque._Iterator(self._front)\n\n    def __repr__(self) -> str:\n        \"\"\"\n        Implements representation of the deque.\n        Represents it as a list, with its values between '[' and ']'.\n        Time complexity: O(n)\n        >>> our_deque = Deque([1, 2, 3])\n        >>> our_deque\n        [1, 2, 3]\n        \"\"\"\n        values_list = []\n        aux = self._front\n        while aux is not None:\n            # append the values in a list to display\n            values_list.append(aux.val)\n            aux = aux.next_node\n\n        return f\"[{', '.join(repr(val) for val in values_list)}]\"\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    dq = Deque([3])\n    dq.pop()\n"
  },
  {
    "path": "data_structures/queues/linked_queue.py",
    "content": "\"\"\"A Queue using a linked list like structure\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections.abc import Iterator\nfrom typing import Any\n\n\nclass Node:\n    def __init__(self, data: Any) -> None:\n        self.data: Any = data\n        self.next: Node | None = None\n\n    def __str__(self) -> str:\n        return f\"{self.data}\"\n\n\nclass LinkedQueue:\n    \"\"\"\n    >>> queue = LinkedQueue()\n    >>> queue.is_empty()\n    True\n    >>> queue.put(5)\n    >>> queue.put(9)\n    >>> queue.put('python')\n    >>> queue.is_empty()\n    False\n    >>> queue.get()\n    5\n    >>> queue.put('algorithms')\n    >>> queue.get()\n    9\n    >>> queue.get()\n    'python'\n    >>> queue.get()\n    'algorithms'\n    >>> queue.is_empty()\n    True\n    >>> queue.get()\n    Traceback (most recent call last):\n        ...\n    IndexError: dequeue from empty queue\n    \"\"\"\n\n    def __init__(self) -> None:\n        self.front: Node | None = None\n        self.rear: Node | None = None\n\n    def __iter__(self) -> Iterator[Any]:\n        node = self.front\n        while node:\n            yield node.data\n            node = node.next\n\n    def __len__(self) -> int:\n        \"\"\"\n        >>> queue = LinkedQueue()\n        >>> for i in range(1, 6):\n        ...     queue.put(i)\n        >>> len(queue)\n        5\n        >>> for i in range(1, 6):\n        ...     assert len(queue) == 6 - i\n        ...     _ = queue.get()\n        >>> len(queue)\n        0\n        \"\"\"\n        return len(tuple(iter(self)))\n\n    def __str__(self) -> str:\n        \"\"\"\n        >>> queue = LinkedQueue()\n        >>> for i in range(1, 4):\n        ...     queue.put(i)\n        >>> queue.put(\"Python\")\n        >>> queue.put(3.14)\n        >>> queue.put(True)\n        >>> str(queue)\n        '1 <- 2 <- 3 <- Python <- 3.14 <- True'\n        \"\"\"\n        return \" <- \".join(str(item) for item in self)\n\n    def is_empty(self) -> bool:\n        \"\"\"\n        >>> queue = LinkedQueue()\n        >>> queue.is_empty()\n        True\n        >>> for i in range(1, 6):\n        ...     queue.put(i)\n        >>> queue.is_empty()\n        False\n        \"\"\"\n        return len(self) == 0\n\n    def put(self, item: Any) -> None:\n        \"\"\"\n        >>> queue = LinkedQueue()\n        >>> queue.get()\n        Traceback (most recent call last):\n            ...\n        IndexError: dequeue from empty queue\n        >>> for i in range(1, 6):\n        ...     queue.put(i)\n        >>> str(queue)\n        '1 <- 2 <- 3 <- 4 <- 5'\n        \"\"\"\n        node = Node(item)\n        if self.is_empty():\n            self.front = self.rear = node\n        else:\n            assert isinstance(self.rear, Node)\n            self.rear.next = node\n            self.rear = node\n\n    def get(self) -> Any:\n        \"\"\"\n        >>> queue = LinkedQueue()\n        >>> queue.get()\n        Traceback (most recent call last):\n            ...\n        IndexError: dequeue from empty queue\n        >>> queue = LinkedQueue()\n        >>> for i in range(1, 6):\n        ...     queue.put(i)\n        >>> for i in range(1, 6):\n        ...     assert queue.get() == i\n        >>> len(queue)\n        0\n        \"\"\"\n        if self.is_empty():\n            raise IndexError(\"dequeue from empty queue\")\n        assert isinstance(self.front, Node)\n        node = self.front\n        self.front = self.front.next\n        if self.front is None:\n            self.rear = None\n        return node.data\n\n    def clear(self) -> None:\n        \"\"\"\n        >>> queue = LinkedQueue()\n        >>> for i in range(1, 6):\n        ...     queue.put(i)\n        >>> queue.clear()\n        >>> len(queue)\n        0\n        >>> str(queue)\n        ''\n        \"\"\"\n        self.front = self.rear = None\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "data_structures/queues/priority_queue_using_list.py",
    "content": "\"\"\"\nPure Python implementations of a Fixed Priority Queue and an Element Priority Queue\nusing Python lists.\n\"\"\"\n\n\nclass OverFlowError(Exception):\n    pass\n\n\nclass UnderFlowError(Exception):\n    pass\n\n\nclass FixedPriorityQueue:\n    \"\"\"\n    Tasks can be added to a Priority Queue at any time and in any order but when Tasks\n    are removed then the Task with the highest priority is removed in FIFO order.  In\n    code we will use three levels of priority with priority zero Tasks being the most\n    urgent (high priority) and priority 2 tasks being the least urgent.\n\n    Examples\n    >>> fpq = FixedPriorityQueue()\n    >>> fpq.enqueue(0, 10)\n    >>> fpq.enqueue(1, 70)\n    >>> fpq.enqueue(0, 100)\n    >>> fpq.enqueue(2, 1)\n    >>> fpq.enqueue(2, 5)\n    >>> fpq.enqueue(1, 7)\n    >>> fpq.enqueue(2, 4)\n    >>> fpq.enqueue(1, 64)\n    >>> fpq.enqueue(0, 128)\n    >>> print(fpq)\n    Priority 0: [10, 100, 128]\n    Priority 1: [70, 7, 64]\n    Priority 2: [1, 5, 4]\n    >>> fpq.dequeue()\n    10\n    >>> fpq.dequeue()\n    100\n    >>> fpq.dequeue()\n    128\n    >>> fpq.dequeue()\n    70\n    >>> fpq.dequeue()\n    7\n    >>> print(fpq)\n    Priority 0: []\n    Priority 1: [64]\n    Priority 2: [1, 5, 4]\n    >>> fpq.dequeue()\n    64\n    >>> fpq.dequeue()\n    1\n    >>> fpq.dequeue()\n    5\n    >>> fpq.dequeue()\n    4\n    >>> fpq.dequeue()\n    Traceback (most recent call last):\n        ...\n    data_structures.queues.priority_queue_using_list.UnderFlowError: All queues are empty\n    >>> print(fpq)\n    Priority 0: []\n    Priority 1: []\n    Priority 2: []\n    \"\"\"  # noqa: E501\n\n    def __init__(self):\n        self.queues = [\n            [],\n            [],\n            [],\n        ]\n\n    def enqueue(self, priority: int, data: int) -> None:\n        \"\"\"\n        Add an element to a queue based on its priority.\n        If the priority is invalid ValueError is raised.\n        If the queue is full an OverFlowError is raised.\n        \"\"\"\n        try:\n            if len(self.queues[priority]) >= 100:\n                raise OverflowError(\"Maximum queue size is 100\")\n            self.queues[priority].append(data)\n        except IndexError:\n            raise ValueError(\"Valid priorities are 0, 1, and 2\")\n\n    def dequeue(self) -> int:\n        \"\"\"\n        Return the highest priority element in FIFO order.\n        If the queue is empty then an under flow exception is raised.\n        \"\"\"\n        for queue in self.queues:\n            if queue:\n                return queue.pop(0)\n        raise UnderFlowError(\"All queues are empty\")\n\n    def __str__(self) -> str:\n        return \"\\n\".join(f\"Priority {i}: {q}\" for i, q in enumerate(self.queues))\n\n\nclass ElementPriorityQueue:\n    \"\"\"\n    Element Priority Queue is the same as Fixed Priority Queue except that the value of\n    the element itself is the priority. The rules for priorities are the same the as\n    Fixed Priority Queue.\n\n    >>> epq = ElementPriorityQueue()\n    >>> epq.enqueue(10)\n    >>> epq.enqueue(70)\n    >>> epq.enqueue(4)\n    >>> epq.enqueue(1)\n    >>> epq.enqueue(5)\n    >>> epq.enqueue(7)\n    >>> epq.enqueue(4)\n    >>> epq.enqueue(64)\n    >>> epq.enqueue(128)\n    >>> print(epq)\n    [10, 70, 4, 1, 5, 7, 4, 64, 128]\n    >>> epq.dequeue()\n    1\n    >>> epq.dequeue()\n    4\n    >>> epq.dequeue()\n    4\n    >>> epq.dequeue()\n    5\n    >>> epq.dequeue()\n    7\n    >>> epq.dequeue()\n    10\n    >>> print(epq)\n    [70, 64, 128]\n    >>> epq.dequeue()\n    64\n    >>> epq.dequeue()\n    70\n    >>> epq.dequeue()\n    128\n    >>> epq.dequeue()\n    Traceback (most recent call last):\n        ...\n    data_structures.queues.priority_queue_using_list.UnderFlowError: The queue is empty\n    >>> print(epq)\n    []\n    \"\"\"\n\n    def __init__(self):\n        self.queue = []\n\n    def enqueue(self, data: int) -> None:\n        \"\"\"\n        This function enters the element into the queue\n        If the queue is full an Exception is raised saying Over Flow!\n        \"\"\"\n        if len(self.queue) == 100:\n            raise OverFlowError(\"Maximum queue size is 100\")\n        self.queue.append(data)\n\n    def dequeue(self) -> int:\n        \"\"\"\n        Return the highest priority element in FIFO order.\n        If the queue is empty then an under flow exception is raised.\n        \"\"\"\n        if not self.queue:\n            raise UnderFlowError(\"The queue is empty\")\n        else:\n            data = min(self.queue)\n            self.queue.remove(data)\n            return data\n\n    def __str__(self) -> str:\n        \"\"\"\n        Prints all the elements within the Element Priority Queue\n        \"\"\"\n        return str(self.queue)\n\n\ndef fixed_priority_queue():\n    fpq = FixedPriorityQueue()\n    fpq.enqueue(0, 10)\n    fpq.enqueue(1, 70)\n    fpq.enqueue(0, 100)\n    fpq.enqueue(2, 1)\n    fpq.enqueue(2, 5)\n    fpq.enqueue(1, 7)\n    fpq.enqueue(2, 4)\n    fpq.enqueue(1, 64)\n    fpq.enqueue(0, 128)\n    print(fpq)\n    print(fpq.dequeue())\n    print(fpq.dequeue())\n    print(fpq.dequeue())\n    print(fpq.dequeue())\n    print(fpq.dequeue())\n    print(fpq)\n    print(fpq.dequeue())\n    print(fpq.dequeue())\n    print(fpq.dequeue())\n    print(fpq.dequeue())\n    print(fpq.dequeue())\n\n\ndef element_priority_queue():\n    epq = ElementPriorityQueue()\n    epq.enqueue(10)\n    epq.enqueue(70)\n    epq.enqueue(100)\n    epq.enqueue(1)\n    epq.enqueue(5)\n    epq.enqueue(7)\n    epq.enqueue(4)\n    epq.enqueue(64)\n    epq.enqueue(128)\n    print(epq)\n    print(epq.dequeue())\n    print(epq.dequeue())\n    print(epq.dequeue())\n    print(epq.dequeue())\n    print(epq.dequeue())\n    print(epq)\n    print(epq.dequeue())\n    print(epq.dequeue())\n    print(epq.dequeue())\n    print(epq.dequeue())\n    print(epq.dequeue())\n\n\nif __name__ == \"__main__\":\n    fixed_priority_queue()\n    element_priority_queue()\n"
  },
  {
    "path": "data_structures/queues/queue_by_list.py",
    "content": "\"\"\"Queue represented by a Python list\"\"\"\n\nfrom collections.abc import Iterable\n\n\nclass QueueByList[T]:\n    def __init__(self, iterable: Iterable[T] | None = None) -> None:\n        \"\"\"\n        >>> QueueByList()\n        Queue(())\n        >>> QueueByList([10, 20, 30])\n        Queue((10, 20, 30))\n        >>> QueueByList((i**2 for i in range(1, 4)))\n        Queue((1, 4, 9))\n        \"\"\"\n        self.entries: list[T] = list(iterable or [])\n\n    def __len__(self) -> int:\n        \"\"\"\n        >>> len(QueueByList())\n        0\n        >>> from string import ascii_lowercase\n        >>> len(QueueByList(ascii_lowercase))\n        26\n        >>> queue = QueueByList()\n        >>> for i in range(1, 11):\n        ...     queue.put(i)\n        >>> len(queue)\n        10\n        >>> for i in range(2):\n        ...   queue.get()\n        1\n        2\n        >>> len(queue)\n        8\n        \"\"\"\n\n        return len(self.entries)\n\n    def __repr__(self) -> str:\n        \"\"\"\n        >>> queue = QueueByList()\n        >>> queue\n        Queue(())\n        >>> str(queue)\n        'Queue(())'\n        >>> queue.put(10)\n        >>> queue\n        Queue((10,))\n        >>> queue.put(20)\n        >>> queue.put(30)\n        >>> queue\n        Queue((10, 20, 30))\n        \"\"\"\n\n        return f\"Queue({tuple(self.entries)})\"\n\n    def put(self, item: T) -> None:\n        \"\"\"Put `item` to the Queue\n\n        >>> queue = QueueByList()\n        >>> queue.put(10)\n        >>> queue.put(20)\n        >>> len(queue)\n        2\n        >>> queue\n        Queue((10, 20))\n        \"\"\"\n\n        self.entries.append(item)\n\n    def get(self) -> T:\n        \"\"\"\n        Get `item` from the Queue\n\n        >>> queue = QueueByList((10, 20, 30))\n        >>> queue.get()\n        10\n        >>> queue.put(40)\n        >>> queue.get()\n        20\n        >>> queue.get()\n        30\n        >>> len(queue)\n        1\n        >>> queue.get()\n        40\n        >>> queue.get()\n        Traceback (most recent call last):\n            ...\n        IndexError: Queue is empty\n        \"\"\"\n\n        if not self.entries:\n            raise IndexError(\"Queue is empty\")\n        return self.entries.pop(0)\n\n    def rotate(self, rotation: int) -> None:\n        \"\"\"Rotate the items of the Queue `rotation` times\n\n        >>> queue = QueueByList([10, 20, 30, 40])\n        >>> queue\n        Queue((10, 20, 30, 40))\n        >>> queue.rotate(1)\n        >>> queue\n        Queue((20, 30, 40, 10))\n        >>> queue.rotate(2)\n        >>> queue\n        Queue((40, 10, 20, 30))\n        \"\"\"\n\n        put = self.entries.append\n        get = self.entries.pop\n\n        for _ in range(rotation):\n            put(get(0))\n\n    def get_front(self) -> T:\n        \"\"\"Get the front item from the Queue\n\n        >>> queue = QueueByList((10, 20, 30))\n        >>> queue.get_front()\n        10\n        >>> queue\n        Queue((10, 20, 30))\n        >>> queue.get()\n        10\n        >>> queue.get_front()\n        20\n        \"\"\"\n\n        return self.entries[0]\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "data_structures/queues/queue_by_two_stacks.py",
    "content": "\"\"\"Queue implementation using two stacks\"\"\"\n\nfrom collections.abc import Iterable\n\n\nclass QueueByTwoStacks[T]:\n    def __init__(self, iterable: Iterable[T] | None = None) -> None:\n        \"\"\"\n        >>> QueueByTwoStacks()\n        Queue(())\n        >>> QueueByTwoStacks([10, 20, 30])\n        Queue((10, 20, 30))\n        >>> QueueByTwoStacks((i**2 for i in range(1, 4)))\n        Queue((1, 4, 9))\n        \"\"\"\n        self._stack1: list[T] = list(iterable or [])\n        self._stack2: list[T] = []\n\n    def __len__(self) -> int:\n        \"\"\"\n        >>> len(QueueByTwoStacks())\n        0\n        >>> from string import ascii_lowercase\n        >>> len(QueueByTwoStacks(ascii_lowercase))\n        26\n        >>> queue = QueueByTwoStacks()\n        >>> for i in range(1, 11):\n        ...     queue.put(i)\n        ...\n        >>> len(queue)\n        10\n        >>> for i in range(2):\n        ...   queue.get()\n        1\n        2\n        >>> len(queue)\n        8\n        \"\"\"\n\n        return len(self._stack1) + len(self._stack2)\n\n    def __repr__(self) -> str:\n        \"\"\"\n        >>> queue = QueueByTwoStacks()\n        >>> queue\n        Queue(())\n        >>> str(queue)\n        'Queue(())'\n        >>> queue.put(10)\n        >>> queue\n        Queue((10,))\n        >>> queue.put(20)\n        >>> queue.put(30)\n        >>> queue\n        Queue((10, 20, 30))\n        \"\"\"\n        return f\"Queue({tuple(self._stack2[::-1] + self._stack1)})\"\n\n    def put(self, item: T) -> None:\n        \"\"\"\n        Put `item` into the Queue\n\n        >>> queue = QueueByTwoStacks()\n        >>> queue.put(10)\n        >>> queue.put(20)\n        >>> len(queue)\n        2\n        >>> queue\n        Queue((10, 20))\n        \"\"\"\n\n        self._stack1.append(item)\n\n    def get(self) -> T:\n        \"\"\"\n        Get `item` from the Queue\n\n        >>> queue = QueueByTwoStacks((10, 20, 30))\n        >>> queue.get()\n        10\n        >>> queue.put(40)\n        >>> queue.get()\n        20\n        >>> queue.get()\n        30\n        >>> len(queue)\n        1\n        >>> queue.get()\n        40\n        >>> queue.get()\n        Traceback (most recent call last):\n            ...\n        IndexError: Queue is empty\n        \"\"\"\n\n        # To reduce number of attribute look-ups in `while` loop.\n        stack1_pop = self._stack1.pop\n        stack2_append = self._stack2.append\n\n        if not self._stack2:\n            while self._stack1:\n                stack2_append(stack1_pop())\n\n        if not self._stack2:\n            raise IndexError(\"Queue is empty\")\n        return self._stack2.pop()\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "data_structures/queues/queue_on_pseudo_stack.py",
    "content": "\"\"\"Queue represented by a pseudo stack (represented by a list with pop and append)\"\"\"\r\n\r\nfrom typing import Any\r\n\r\n\r\nclass Queue:\r\n    def __init__(self):\r\n        self.stack = []\r\n        self.length = 0\r\n\r\n    def __str__(self):\r\n        printed = \"<\" + str(self.stack)[1:-1] + \">\"\r\n        return printed\r\n\r\n    \"\"\"Enqueues {@code item}\r\n    @param item\r\n        item to enqueue\"\"\"\r\n\r\n    def put(self, item: Any) -> None:\r\n        self.stack.append(item)\r\n        self.length = self.length + 1\r\n\r\n    \"\"\"Dequeues {@code item}\r\n    @requirement: |self.length| > 0\r\n    @return dequeued\r\n        item that was dequeued\"\"\"\r\n\r\n    def get(self) -> Any:\r\n        self.rotate(1)\r\n        dequeued = self.stack[self.length - 1]\r\n        self.stack = self.stack[:-1]\r\n        self.rotate(self.length - 1)\r\n        self.length = self.length - 1\r\n        return dequeued\r\n\r\n    \"\"\"Rotates the queue {@code rotation} times\r\n    @param rotation\r\n        number of times to rotate queue\"\"\"\r\n\r\n    def rotate(self, rotation: int) -> None:\r\n        for _ in range(rotation):\r\n            temp = self.stack[0]\r\n            self.stack = self.stack[1:]\r\n            self.put(temp)\r\n            self.length = self.length - 1\r\n\r\n    \"\"\"Reports item at the front of self\r\n    @return item at front of self.stack\"\"\"\r\n\r\n    def front(self) -> Any:\r\n        front = self.get()\r\n        self.put(front)\r\n        self.rotate(self.length - 1)\r\n        return front\r\n\r\n    \"\"\"Returns the length of this.stack\"\"\"\r\n\r\n    def size(self) -> int:\r\n        return self.length\r\n"
  },
  {
    "path": "data_structures/stacks/__init__.py",
    "content": ""
  },
  {
    "path": "data_structures/stacks/balanced_parentheses.py",
    "content": "from .stack import Stack\n\n\ndef balanced_parentheses(parentheses: str) -> bool:\n    \"\"\"Use a stack to check if a string of parentheses is balanced.\n    >>> balanced_parentheses(\"([]{})\")\n    True\n    >>> balanced_parentheses(\"[()]{}{[()()]()}\")\n    True\n    >>> balanced_parentheses(\"[(])\")\n    False\n    >>> balanced_parentheses(\"1+2*3-4\")\n    True\n    >>> balanced_parentheses(\"\")\n    True\n    \"\"\"\n    stack: Stack[str] = Stack()\n    bracket_pairs = {\"(\": \")\", \"[\": \"]\", \"{\": \"}\"}\n    for bracket in parentheses:\n        if bracket in bracket_pairs:\n            stack.push(bracket)\n        elif bracket in (\")\", \"]\", \"}\") and (\n            stack.is_empty() or bracket_pairs[stack.pop()] != bracket\n        ):\n            return False\n    return stack.is_empty()\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n\n    examples = [\"((()))\", \"((())\", \"(()))\"]\n    print(\"Balanced parentheses demonstration:\\n\")\n    for example in examples:\n        not_str = \"\" if balanced_parentheses(example) else \"not \"\n        print(f\"{example} is {not_str}balanced\")\n"
  },
  {
    "path": "data_structures/stacks/dijkstras_two_stack_algorithm.py",
    "content": "\"\"\"\nAuthor: Alexander Joslin\nGitHub: github.com/echoaj\n\nExplanation:  https://medium.com/@haleesammar/implemented-in-js-dijkstras-2-stack-\n              algorithm-for-evaluating-mathematical-expressions-fc0837dae1ea\n\nWe can use Dijkstra's two stack algorithm to solve an equation\nsuch as: (5 + ((4 * 2) * (2 + 3)))\n\nTHESE ARE THE ALGORITHM'S RULES:\nRULE 1: Scan the expression from left to right. When an operand is encountered,\n        push it onto the operand stack.\n\nRULE 2: When an operator is encountered in the expression,\n        push it onto the operator stack.\n\nRULE 3: When a left parenthesis is encountered in the expression, ignore it.\n\nRULE 4: When a right parenthesis is encountered in the expression,\n        pop an operator off the operator stack.  The two operands it must\n        operate on must be the last two operands pushed onto the operand stack.\n        We therefore pop the operand stack twice, perform the operation,\n        and push the result back onto the operand stack so it will be available\n        for use as an operand of the next operator popped off the operator stack.\n\nRULE 5: When the entire infix expression has been scanned, the value left on\n        the operand stack represents the value of the expression.\n\nNOTE:   It only works with whole numbers.\n\"\"\"\n\n__author__ = \"Alexander Joslin\"\n\nimport operator as op\n\nfrom .stack import Stack\n\n\ndef dijkstras_two_stack_algorithm(equation: str) -> int:\n    \"\"\"\n    DocTests\n    >>> dijkstras_two_stack_algorithm(\"(5 + 3)\")\n    8\n    >>> dijkstras_two_stack_algorithm(\"((9 - (2 + 9)) + (8 - 1))\")\n    5\n    >>> dijkstras_two_stack_algorithm(\"((((3 - 2) - (2 + 3)) + (2 - 4)) + 3)\")\n    -3\n\n    :param equation: a string\n    :return: result: an integer\n    \"\"\"\n    operators = {\"*\": op.mul, \"/\": op.truediv, \"+\": op.add, \"-\": op.sub}\n\n    operand_stack: Stack[int] = Stack()\n    operator_stack: Stack[str] = Stack()\n\n    for i in equation:\n        if i.isdigit():\n            # RULE 1\n            operand_stack.push(int(i))\n        elif i in operators:\n            # RULE 2\n            operator_stack.push(i)\n        elif i == \")\":\n            # RULE 4\n            opr = operator_stack.peek()\n            operator_stack.pop()\n            num1 = operand_stack.peek()\n            operand_stack.pop()\n            num2 = operand_stack.peek()\n            operand_stack.pop()\n\n            total = operators[opr](num2, num1)\n            operand_stack.push(total)\n\n    # RULE 5\n    return operand_stack.peek()\n\n\nif __name__ == \"__main__\":\n    equation = \"(5 + ((4 * 2) * (2 + 3)))\"\n    # answer = 45\n    print(f\"{equation} = {dijkstras_two_stack_algorithm(equation)}\")\n"
  },
  {
    "path": "data_structures/stacks/infix_to_postfix_conversion.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/Infix_notation\nhttps://en.wikipedia.org/wiki/Reverse_Polish_notation\nhttps://en.wikipedia.org/wiki/Shunting-yard_algorithm\n\"\"\"\n\nfrom typing import Literal\n\nfrom .balanced_parentheses import balanced_parentheses\nfrom .stack import Stack\n\nPRECEDENCES: dict[str, int] = {\n    \"+\": 1,\n    \"-\": 1,\n    \"*\": 2,\n    \"/\": 2,\n    \"^\": 3,\n}\nASSOCIATIVITIES: dict[str, Literal[\"LR\", \"RL\"]] = {\n    \"+\": \"LR\",\n    \"-\": \"LR\",\n    \"*\": \"LR\",\n    \"/\": \"LR\",\n    \"^\": \"RL\",\n}\n\n\ndef precedence(char: str) -> int:\n    \"\"\"\n    Return integer value representing an operator's precedence, or\n    order of operation.\n    https://en.wikipedia.org/wiki/Order_of_operations\n    \"\"\"\n    return PRECEDENCES.get(char, -1)\n\n\ndef associativity(char: str) -> Literal[\"LR\", \"RL\"]:\n    \"\"\"\n    Return the associativity of the operator `char`.\n    https://en.wikipedia.org/wiki/Operator_associativity\n    \"\"\"\n    return ASSOCIATIVITIES[char]\n\n\ndef infix_to_postfix(expression_str: str) -> str:\n    \"\"\"\n    >>> infix_to_postfix(\"(1*(2+3)+4))\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Mismatched parentheses\n    >>> infix_to_postfix(\"\")\n    ''\n    >>> infix_to_postfix(\"3+2\")\n    '3 2 +'\n    >>> infix_to_postfix(\"(3+4)*5-6\")\n    '3 4 + 5 * 6 -'\n    >>> infix_to_postfix(\"(1+2)*3/4-5\")\n    '1 2 + 3 * 4 / 5 -'\n    >>> infix_to_postfix(\"a+b*c+(d*e+f)*g\")\n    'a b c * + d e * f + g * +'\n    >>> infix_to_postfix(\"x^y/(5*z)+2\")\n    'x y ^ 5 z * / 2 +'\n    >>> infix_to_postfix(\"2^3^2\")\n    '2 3 2 ^ ^'\n    \"\"\"\n    if not balanced_parentheses(expression_str):\n        raise ValueError(\"Mismatched parentheses\")\n    stack: Stack[str] = Stack()\n    postfix = []\n    for char in expression_str:\n        if char.isalpha() or char.isdigit():\n            postfix.append(char)\n        elif char == \"(\":\n            stack.push(char)\n        elif char == \")\":\n            while not stack.is_empty() and stack.peek() != \"(\":\n                postfix.append(stack.pop())\n            stack.pop()\n        else:\n            while True:\n                if stack.is_empty():\n                    stack.push(char)\n                    break\n\n                char_precedence = precedence(char)\n                tos_precedence = precedence(stack.peek())\n\n                if char_precedence > tos_precedence:\n                    stack.push(char)\n                    break\n                if char_precedence < tos_precedence:\n                    postfix.append(stack.pop())\n                    continue\n                # Precedences are equal\n                if associativity(char) == \"RL\":\n                    stack.push(char)\n                    break\n                postfix.append(stack.pop())\n\n    while not stack.is_empty():\n        postfix.append(stack.pop())\n    return \" \".join(postfix)\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    expression = \"a+b*(c^d-e)^(f+g*h)-i\"\n\n    print(\"Infix to Postfix Notation demonstration:\\n\")\n    print(\"Infix notation: \" + expression)\n    print(\"Postfix notation: \" + infix_to_postfix(expression))\n"
  },
  {
    "path": "data_structures/stacks/infix_to_prefix_conversion.py",
    "content": "\"\"\"\nOutput:\n\nEnter an Infix Equation = a + b ^c\n Symbol  |  Stack  | Postfix\n----------------------------\n   c     |         | c\n   ^     | ^       | c\n   b     | ^       | cb\n   +     | +       | cb^\n   a     | +       | cb^a\n         |         | cb^a+\n\n         a+b^c (Infix) ->  +a^bc (Prefix)\n\"\"\"\n\n\ndef infix_2_postfix(infix: str) -> str:\n    \"\"\"\n    >>> infix_2_postfix(\"a+b^c\")  # doctest: +NORMALIZE_WHITESPACE\n     Symbol  |  Stack  | Postfix\n    ----------------------------\n       a     |         | a\n       +     | +       | a\n       b     | +       | ab\n       ^     | +^      | ab\n       c     | +^      | abc\n             | +       | abc^\n             |         | abc^+\n    'abc^+'\n\n    >>> infix_2_postfix(\"1*((-a)*2+b)\")   # doctest: +NORMALIZE_WHITESPACE\n      Symbol  |    Stack     |   Postfix\n    -------------------------------------------\n       1     |              | 1\n       *     | *            | 1\n       (     | *(           | 1\n       (     | *((          | 1\n       -     | *((-         | 1\n       a     | *((-         | 1a\n       )     | *(           | 1a-\n       *     | *(*          | 1a-\n       2     | *(*          | 1a-2\n       +     | *(+          | 1a-2*\n       b     | *(+          | 1a-2*b\n       )     | *            | 1a-2*b+\n             |              | 1a-2*b+*\n    '1a-2*b+*'\n\n    >>> infix_2_postfix(\"\")\n     Symbol  |  Stack  | Postfix\n    ----------------------------\n    ''\n\n    >>> infix_2_postfix(\"(()\")\n    Traceback (most recent call last):\n        ...\n    ValueError: invalid expression\n\n    >>> infix_2_postfix(\"())\")\n    Traceback (most recent call last):\n        ...\n    IndexError: list index out of range\n    \"\"\"\n    stack = []\n    post_fix = []\n    priority = {\n        \"^\": 3,\n        \"*\": 2,\n        \"/\": 2,\n        \"%\": 2,\n        \"+\": 1,\n        \"-\": 1,\n    }  # Priority of each operator\n    print_width = max(len(infix), 7)\n\n    # Print table header for output\n    print(\n        \"Symbol\".center(8),\n        \"Stack\".center(print_width),\n        \"Postfix\".center(print_width),\n        sep=\" | \",\n    )\n    print(\"-\" * (print_width * 3 + 7))\n\n    for x in infix:\n        if x.isalpha() or x.isdigit():\n            post_fix.append(x)  # if x is Alphabet / Digit, add it to Postfix\n        elif x == \"(\":\n            stack.append(x)  # if x is \"(\" push to Stack\n        elif x == \")\":  # if x is \")\" pop stack until \"(\" is encountered\n            if len(stack) == 0:  # close bracket without open bracket\n                raise IndexError(\"list index out of range\")\n\n            while stack[-1] != \"(\":\n                post_fix.append(stack.pop())  # Pop stack & add the content to Postfix\n            stack.pop()\n        elif len(stack) == 0:\n            stack.append(x)  # If stack is empty, push x to stack\n        else:  # while priority of x is not > priority of element in the stack\n            while stack and stack[-1] != \"(\" and priority[x] <= priority[stack[-1]]:\n                post_fix.append(stack.pop())  # pop stack & add to Postfix\n            stack.append(x)  # push x to stack\n\n        print(\n            x.center(8),\n            (\"\".join(stack)).ljust(print_width),\n            (\"\".join(post_fix)).ljust(print_width),\n            sep=\" | \",\n        )  # Output in tabular format\n\n    while len(stack) > 0:  # while stack is not empty\n        if stack[-1] == \"(\":  # open bracket with no close bracket\n            raise ValueError(\"invalid expression\")\n\n        post_fix.append(stack.pop())  # pop stack & add to Postfix\n        print(\n            \" \".center(8),\n            (\"\".join(stack)).ljust(print_width),\n            (\"\".join(post_fix)).ljust(print_width),\n            sep=\" | \",\n        )  # Output in tabular format\n\n    return \"\".join(post_fix)  # return Postfix as str\n\n\ndef infix_2_prefix(infix: str) -> str:\n    \"\"\"\n    >>> infix_2_prefix(\"a+b^c\")  # doctest: +NORMALIZE_WHITESPACE\n     Symbol  |  Stack  | Postfix\n    ----------------------------\n       c     |         | c\n       ^     | ^       | c\n       b     | ^       | cb\n       +     | +       | cb^\n       a     | +       | cb^a\n             |         | cb^a+\n    '+a^bc'\n\n    >>> infix_2_prefix(\"1*((-a)*2+b)\") # doctest: +NORMALIZE_WHITESPACE\n     Symbol  |    Stack     |   Postfix\n    -------------------------------------------\n       (     | (            |\n       b     | (            | b\n       +     | (+           | b\n       2     | (+           | b2\n       *     | (+*          | b2\n       (     | (+*(         | b2\n       a     | (+*(         | b2a\n       -     | (+*(-        | b2a\n       )     | (+*          | b2a-\n       )     |              | b2a-*+\n       *     | *            | b2a-*+\n       1     | *            | b2a-*+1\n             |              | b2a-*+1*\n    '*1+*-a2b'\n\n    >>> infix_2_prefix('')\n     Symbol  |  Stack  | Postfix\n    ----------------------------\n    ''\n\n    >>> infix_2_prefix('(()')\n    Traceback (most recent call last):\n        ...\n    IndexError: list index out of range\n\n    >>> infix_2_prefix('())')\n    Traceback (most recent call last):\n        ...\n    ValueError: invalid expression\n    \"\"\"\n    reversed_infix = list(infix[::-1])  # reverse the infix equation\n\n    for i in range(len(reversed_infix)):\n        if reversed_infix[i] == \"(\":\n            reversed_infix[i] = \")\"  # change \"(\" to \")\"\n        elif reversed_infix[i] == \")\":\n            reversed_infix[i] = \"(\"  # change \")\" to \"(\"\n\n    # call infix_2_postfix on Infix, return reverse of Postfix\n    return (infix_2_postfix(\"\".join(reversed_infix)))[::-1]\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n\n    Infix = input(\"\\nEnter an Infix Equation = \")  # Input an Infix equation\n    Infix = \"\".join(Infix.split())  # Remove spaces from the input\n    print(\"\\n\\t\", Infix, \"(Infix) -> \", infix_2_prefix(Infix), \"(Prefix)\")\n"
  },
  {
    "path": "data_structures/stacks/largest_rectangle_histogram.py",
    "content": "def largest_rectangle_area(heights: list[int]) -> int:\n    \"\"\"\n    Inputs an array of integers representing the heights of bars,\n    and returns the area of the largest rectangle that can be formed\n\n    >>> largest_rectangle_area([2, 1, 5, 6, 2, 3])\n    10\n\n    >>> largest_rectangle_area([2, 4])\n    4\n\n    >>> largest_rectangle_area([6, 2, 5, 4, 5, 1, 6])\n    12\n\n    >>> largest_rectangle_area([1])\n    1\n    \"\"\"\n    stack: list[int] = []\n    max_area = 0\n    heights = [*heights, 0]  # make a new list by appending the sentinel 0\n    n = len(heights)\n\n    for i in range(n):\n        # make sure the stack remains in increasing order\n        while stack and heights[i] < heights[stack[-1]]:\n            h = heights[stack.pop()]  # height of the bar\n            # if stack is empty, it means entire width can be taken from index 0 to i-1\n            w = i if not stack else i - stack[-1] - 1  # calculate width\n            max_area = max(max_area, h * w)\n\n        stack.append(i)\n\n    return max_area\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/stacks/lexicographical_numbers.py",
    "content": "from collections.abc import Iterator\n\n\ndef lexical_order(max_number: int) -> Iterator[int]:\n    \"\"\"\n    Generate numbers in lexical order from 1 to max_number.\n\n    >>> \" \".join(map(str, lexical_order(13)))\n    '1 10 11 12 13 2 3 4 5 6 7 8 9'\n    >>> list(lexical_order(1))\n    [1]\n    >>> \" \".join(map(str, lexical_order(20)))\n    '1 10 11 12 13 14 15 16 17 18 19 2 20 3 4 5 6 7 8 9'\n    >>> \" \".join(map(str, lexical_order(25)))\n    '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'\n    >>> list(lexical_order(12))\n    [1, 10, 11, 12, 2, 3, 4, 5, 6, 7, 8, 9]\n    \"\"\"\n\n    stack = [1]\n\n    while stack:\n        num = stack.pop()\n        if num > max_number:\n            continue\n\n        yield num\n        if (num % 10) != 9:\n            stack.append(num + 1)\n\n        stack.append(num * 10)\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    print(f\"Numbers from 1 to 25 in lexical order: {list(lexical_order(26))}\")\n"
  },
  {
    "path": "data_structures/stacks/next_greater_element.py",
    "content": "from __future__ import annotations\n\narr = [-10, -5, 0, 5, 5.1, 11, 13, 21, 3, 4, -21, -10, -5, -1, 0]\nexpect = [-5, 0, 5, 5.1, 11, 13, 21, -1, 4, -1, -10, -5, -1, 0, -1]\n\n\ndef next_greatest_element_slow(arr: list[float]) -> list[float]:\n    \"\"\"\n    Get the Next Greatest Element (NGE) for each element in the array\n    by checking all subsequent elements to find the next greater one.\n\n    This is a brute-force implementation, and it has a time complexity\n    of O(n^2), where n is the size of the array.\n\n    Args:\n        arr: List of numbers for which the NGE is calculated.\n\n    Returns:\n        List containing the next greatest elements. If no\n        greater element is found, -1 is placed in the result.\n\n    Example:\n    >>> next_greatest_element_slow(arr) == expect\n    True\n    \"\"\"\n\n    result = []\n    arr_size = len(arr)\n\n    for i in range(arr_size):\n        next_element: float = -1\n        for j in range(i + 1, arr_size):\n            if arr[i] < arr[j]:\n                next_element = arr[j]\n                break\n        result.append(next_element)\n    return result\n\n\ndef next_greatest_element_fast(arr: list[float]) -> list[float]:\n    \"\"\"\n    Find the Next Greatest Element (NGE) for each element in the array\n    using a more readable approach. This implementation utilizes\n    enumerate() for the outer loop and slicing for the inner loop.\n\n    While this improves readability over next_greatest_element_slow(),\n    it still has a time complexity of O(n^2).\n\n    Args:\n        arr: List of numbers for which the NGE is calculated.\n\n    Returns:\n        List containing the next greatest elements. If no\n        greater element is found, -1 is placed in the result.\n\n    Example:\n    >>> next_greatest_element_fast(arr) == expect\n    True\n    \"\"\"\n    result = []\n    for i, outer in enumerate(arr):\n        next_item: float = -1\n        for inner in arr[i + 1 :]:\n            if outer < inner:\n                next_item = inner\n                break\n        result.append(next_item)\n    return result\n\n\ndef next_greatest_element(arr: list[float]) -> list[float]:\n    \"\"\"\n    Efficient solution to find the Next Greatest Element (NGE) for all elements\n    using a stack. The time complexity is reduced to O(n), making it suitable\n    for larger arrays.\n\n    The stack keeps track of elements for which the next greater element hasn't\n    been found yet. By iterating through the array in reverse (from the last\n    element to the first), the stack is used to efficiently determine the next\n    greatest element for each element.\n\n    Args:\n        arr: List of numbers for which the NGE is calculated.\n\n    Returns:\n        List containing the next greatest elements. If no\n        greater element is found, -1 is placed in the result.\n\n    Example:\n    >>> next_greatest_element(arr) == expect\n    True\n    \"\"\"\n    arr_size = len(arr)\n    stack: list[float] = []\n    result: list[float] = [-1] * arr_size\n\n    for index in reversed(range(arr_size)):\n        if stack:\n            while stack[-1] <= arr[index]:\n                stack.pop()\n                if not stack:\n                    break\n        if stack:\n            result[index] = stack[-1]\n        stack.append(arr[index])\n    return result\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n    from timeit import timeit\n\n    testmod()\n    print(next_greatest_element_slow(arr))\n    print(next_greatest_element_fast(arr))\n    print(next_greatest_element(arr))\n\n    setup = (\n        \"from __main__ import arr, next_greatest_element_slow, \"\n        \"next_greatest_element_fast, next_greatest_element\"\n    )\n    print(\n        \"next_greatest_element_slow():\",\n        timeit(\"next_greatest_element_slow(arr)\", setup=setup),\n    )\n    print(\n        \"next_greatest_element_fast():\",\n        timeit(\"next_greatest_element_fast(arr)\", setup=setup),\n    )\n    print(\n        \"     next_greatest_element():\",\n        timeit(\"next_greatest_element(arr)\", setup=setup),\n    )\n"
  },
  {
    "path": "data_structures/stacks/postfix_evaluation.py",
    "content": "\"\"\"\nReverse Polish Nation is also known as Polish postfix notation or simply postfix\nnotation.\nhttps://en.wikipedia.org/wiki/Reverse_Polish_notation\nClassic examples of simple stack implementations.\nValid operators are +, -, *, /.\nEach operand may be an integer or another expression.\n\nOutput:\n\nEnter a Postfix Equation (space separated) = 5 6 9 * +\n Symbol  |    Action    | Stack\n-----------------------------------\n       5 | push(5)      | 5\n       6 | push(6)      | 5,6\n       9 | push(9)      | 5,6,9\n         | pop(9)       | 5,6\n         | pop(6)       | 5\n       * | push(6*9)    | 5,54\n         | pop(54)      | 5\n         | pop(5)       |\n       + | push(5+54)   | 59\n\n        Result =  59\n\"\"\"\n\n# Defining valid unary operator symbols\nUNARY_OP_SYMBOLS = (\"-\", \"+\")\n\n# operators & their respective operation\nOPERATORS = {\n    \"^\": lambda p, q: p**q,\n    \"*\": lambda p, q: p * q,\n    \"/\": lambda p, q: p / q,\n    \"+\": lambda p, q: p + q,\n    \"-\": lambda p, q: p - q,\n}\n\n\ndef parse_token(token: str | float) -> float | str:\n    \"\"\"\n    Converts the given data to the appropriate number if it is indeed a number, else\n    returns the data as it is with a False flag. This function also serves as a check\n    of whether the input is a number or not.\n\n    Parameters\n    ----------\n    token: The data that needs to be converted to the appropriate operator or number.\n\n    Returns\n    -------\n    float or str\n        Returns a float if `token` is a number or a str if `token` is an operator\n    \"\"\"\n    if token in OPERATORS:\n        return token\n    try:\n        return float(token)\n    except ValueError:\n        msg = f\"{token} is neither a number nor a valid operator\"\n        raise ValueError(msg)\n\n\ndef evaluate(post_fix: list[str], verbose: bool = False) -> float:\n    \"\"\"\n    Evaluate postfix expression using a stack.\n    >>> evaluate([\"0\"])\n    0.0\n    >>> evaluate([\"-0\"])\n    -0.0\n    >>> evaluate([\"1\"])\n    1.0\n    >>> evaluate([\"-1\"])\n    -1.0\n    >>> evaluate([\"-1.1\"])\n    -1.1\n    >>> evaluate([\"2\", \"1\", \"+\", \"3\", \"*\"])\n    9.0\n    >>> evaluate([\"2\", \"1.9\", \"+\", \"3\", \"*\"])\n    11.7\n    >>> evaluate([\"2\", \"-1.9\", \"+\", \"3\", \"*\"])\n    0.30000000000000027\n    >>> evaluate([\"4\", \"13\", \"5\", \"/\", \"+\"])\n    6.6\n    >>> evaluate([\"2\", \"-\", \"3\", \"+\"])\n    1.0\n    >>> evaluate([\"-4\", \"5\", \"*\", \"6\", \"-\"])\n    -26.0\n    >>> evaluate([])\n    0\n    >>> evaluate([\"4\", \"-\", \"6\", \"7\", \"/\", \"9\", \"8\"])\n    Traceback (most recent call last):\n    ...\n    ArithmeticError: Input is not a valid postfix expression\n\n    Parameters\n    ----------\n    post_fix:\n        The postfix expression is tokenized into operators and operands and stored\n        as a Python list\n\n    verbose:\n        Display stack contents while evaluating the expression if verbose is True\n\n    Returns\n    -------\n    float\n        The evaluated value\n    \"\"\"\n    if not post_fix:\n        return 0\n    # Checking the list to find out whether the postfix expression is valid\n    valid_expression = [parse_token(token) for token in post_fix]\n    if verbose:\n        # print table header\n        print(\"Symbol\".center(8), \"Action\".center(12), \"Stack\", sep=\" | \")\n        print(\"-\" * (30 + len(post_fix)))\n    stack = []\n    for x in valid_expression:\n        if x not in OPERATORS:\n            stack.append(x)  # append x to stack\n            if verbose:\n                # output in tabular format\n                print(\n                    f\"{x}\".rjust(8),\n                    f\"push({x})\".ljust(12),\n                    stack,\n                    sep=\" | \",\n                )\n            continue\n        # If x is operator\n        # If only 1 value is inside the stack and + or - is encountered\n        # then this is unary + or - case\n        if x in UNARY_OP_SYMBOLS and len(stack) < 2:\n            b = stack.pop()  # pop stack\n            if x == \"-\":\n                b *= -1  # negate b\n            stack.append(b)\n            if verbose:\n                # output in tabular format\n                print(\n                    \"\".rjust(8),\n                    f\"pop({b})\".ljust(12),\n                    stack,\n                    sep=\" | \",\n                )\n                print(\n                    str(x).rjust(8),\n                    f\"push({x}{b})\".ljust(12),\n                    stack,\n                    sep=\" | \",\n                )\n            continue\n        b = stack.pop()  # pop stack\n        if verbose:\n            # output in tabular format\n            print(\n                \"\".rjust(8),\n                f\"pop({b})\".ljust(12),\n                stack,\n                sep=\" | \",\n            )\n\n        a = stack.pop()  # pop stack\n        if verbose:\n            # output in tabular format\n            print(\n                \"\".rjust(8),\n                f\"pop({a})\".ljust(12),\n                stack,\n                sep=\" | \",\n            )\n        # evaluate the 2 values popped from stack & push result to stack\n        stack.append(OPERATORS[x](a, b))  # type: ignore[index]\n        if verbose:\n            # output in tabular format\n            print(\n                f\"{x}\".rjust(8),\n                f\"push({a}{x}{b})\".ljust(12),\n                stack,\n                sep=\" | \",\n            )\n    # If everything is executed correctly, the stack will contain\n    # only one element which is the result\n    if len(stack) != 1:\n        raise ArithmeticError(\"Input is not a valid postfix expression\")\n    return float(stack[0])\n\n\nif __name__ == \"__main__\":\n    # Create a loop so that the user can evaluate postfix expressions multiple times\n    while True:\n        expression = input(\"Enter a Postfix Expression (space separated): \").split(\" \")\n        prompt = \"Do you want to see stack contents while evaluating? [y/N]: \"\n        verbose = input(prompt).strip().lower() == \"y\"\n        output = evaluate(expression, verbose)\n        print(\"Result = \", output)\n        prompt = \"Do you want to enter another expression? [y/N]: \"\n        if input(prompt).strip().lower() != \"y\":\n            break\n"
  },
  {
    "path": "data_structures/stacks/prefix_evaluation.py",
    "content": "\"\"\"\nProgram to evaluate a prefix expression.\nhttps://en.wikipedia.org/wiki/Polish_notation\n\"\"\"\n\noperators = {\n    \"+\": lambda x, y: x + y,\n    \"-\": lambda x, y: x - y,\n    \"*\": lambda x, y: x * y,\n    \"/\": lambda x, y: x / y,\n}\n\n\ndef is_operand(c):\n    \"\"\"\n    Return True if the given char c is an operand, e.g. it is a number\n\n    >>> is_operand(\"1\")\n    True\n    >>> is_operand(\"+\")\n    False\n    \"\"\"\n    return c.isdigit()\n\n\ndef evaluate(expression):\n    \"\"\"\n    Evaluate a given expression in prefix notation.\n    Asserts that the given expression is valid.\n\n    >>> evaluate(\"+ 9 * 2 6\")\n    21\n    >>> evaluate(\"/ * 10 2 + 4 1 \")\n    4.0\n    >>> evaluate(\"2\")\n    2\n    >>> evaluate(\"+ * 2 3 / 8 4\")\n    8.0\n    \"\"\"\n    stack = []\n\n    # iterate over the string in reverse order\n    for c in expression.split()[::-1]:\n        # push operand to stack\n        if is_operand(c):\n            stack.append(int(c))\n\n        else:\n            # pop values from stack can calculate the result\n            # push the result onto the stack again\n            o1 = stack.pop()\n            o2 = stack.pop()\n            stack.append(operators[c](o1, o2))\n\n    return stack.pop()\n\n\ndef evaluate_recursive(expression: list[str]):\n    \"\"\"\n    Alternative recursive implementation\n\n    >>> evaluate_recursive(['2'])\n    2\n    >>> expression = ['+', '*', '2', '3', '/', '8', '4']\n    >>> evaluate_recursive(expression)\n    8.0\n    >>> expression\n    []\n    >>> evaluate_recursive(['+', '9', '*', '2', '6'])\n    21\n    >>> evaluate_recursive(['/', '*', '10', '2', '+', '4', '1'])\n    4.0\n    \"\"\"\n\n    op = expression.pop(0)\n    if is_operand(op):\n        return int(op)\n\n    operation = operators[op]\n\n    a = evaluate_recursive(expression)\n    b = evaluate_recursive(expression)\n    return operation(a, b)\n\n\n# Driver code\nif __name__ == \"__main__\":\n    test_expression = \"+ 9 * 2 6\"\n    print(evaluate(test_expression))\n\n    test_expression = \"/ * 10 2 + 4 1 \"\n    print(evaluate(test_expression))\n"
  },
  {
    "path": "data_structures/stacks/stack.py",
    "content": "from __future__ import annotations\n\nfrom typing import TypeVar\n\nT = TypeVar(\"T\")\n\n\nclass StackOverflowError(BaseException):\n    pass\n\n\nclass StackUnderflowError(BaseException):\n    pass\n\n\nclass Stack[T]:\n    \"\"\"A stack is an abstract data type that serves as a collection of\n    elements with two principal operations: push() and pop(). push() adds an\n    element to the top of the stack, and pop() removes an element from the top\n    of a stack. The order in which elements come off of a stack are\n    Last In, First Out (LIFO).\n    https://en.wikipedia.org/wiki/Stack_(abstract_data_type)\n    \"\"\"\n\n    def __init__(self, limit: int = 10):\n        self.stack: list[T] = []\n        self.limit = limit\n\n    def __bool__(self) -> bool:\n        return bool(self.stack)\n\n    def __str__(self) -> str:\n        return str(self.stack)\n\n    def push(self, data: T) -> None:\n        \"\"\"\n        Push an element to the top of the stack.\n\n        >>> S = Stack(2) # stack size = 2\n        >>> S.push(10)\n        >>> S.push(20)\n        >>> print(S)\n        [10, 20]\n\n        >>> S = Stack(1) # stack size = 1\n        >>> S.push(10)\n        >>> S.push(20)\n        Traceback (most recent call last):\n        ...\n        data_structures.stacks.stack.StackOverflowError\n\n        \"\"\"\n        if len(self.stack) >= self.limit:\n            raise StackOverflowError\n        self.stack.append(data)\n\n    def pop(self) -> T:\n        \"\"\"\n        Pop an element off of the top of the stack.\n\n        >>> S = Stack()\n        >>> S.push(-5)\n        >>> S.push(10)\n        >>> S.pop()\n        10\n\n        >>> Stack().pop()\n        Traceback (most recent call last):\n            ...\n        data_structures.stacks.stack.StackUnderflowError\n        \"\"\"\n        if not self.stack:\n            raise StackUnderflowError\n        return self.stack.pop()\n\n    def peek(self) -> T:\n        \"\"\"\n        Peek at the top-most element of the stack.\n\n        >>> S = Stack()\n        >>> S.push(-5)\n        >>> S.push(10)\n        >>> S.peek()\n        10\n\n        >>> Stack().peek()\n        Traceback (most recent call last):\n            ...\n        data_structures.stacks.stack.StackUnderflowError\n        \"\"\"\n        if not self.stack:\n            raise StackUnderflowError\n        return self.stack[-1]\n\n    def is_empty(self) -> bool:\n        \"\"\"\n        Check if a stack is empty.\n\n        >>> S = Stack()\n        >>> S.is_empty()\n        True\n\n        >>> S = Stack()\n        >>> S.push(10)\n        >>> S.is_empty()\n        False\n        \"\"\"\n        return not bool(self.stack)\n\n    def is_full(self) -> bool:\n        \"\"\"\n        >>> S = Stack()\n        >>> S.is_full()\n        False\n\n        >>> S = Stack(1)\n        >>> S.push(10)\n        >>> S.is_full()\n        True\n        \"\"\"\n        return self.size() == self.limit\n\n    def size(self) -> int:\n        \"\"\"\n        Return the size of the stack.\n\n        >>> S = Stack(3)\n        >>> S.size()\n        0\n\n        >>> S = Stack(3)\n        >>> S.push(10)\n        >>> S.size()\n        1\n\n        >>> S = Stack(3)\n        >>> S.push(10)\n        >>> S.push(20)\n        >>> S.size()\n        2\n        \"\"\"\n        return len(self.stack)\n\n    def __contains__(self, item: T) -> bool:\n        \"\"\"\n        Check if item is in stack\n\n        >>> S = Stack(3)\n        >>> S.push(10)\n        >>> 10 in S\n        True\n\n        >>> S = Stack(3)\n        >>> S.push(10)\n        >>> 20 in S\n        False\n        \"\"\"\n        return item in self.stack\n\n\ndef test_stack() -> None:\n    \"\"\"\n    >>> test_stack()\n    \"\"\"\n    stack: Stack[int] = Stack(10)\n    assert bool(stack) is False\n    assert stack.is_empty() is True\n    assert stack.is_full() is False\n    assert str(stack) == \"[]\"\n\n    try:\n        _ = stack.pop()\n        raise AssertionError  # This should not happen\n    except StackUnderflowError:\n        assert True  # This should happen\n\n    try:\n        _ = stack.peek()\n        raise AssertionError  # This should not happen\n    except StackUnderflowError:\n        assert True  # This should happen\n\n    for i in range(10):\n        assert stack.size() == i\n        stack.push(i)\n\n    assert bool(stack)\n    assert not stack.is_empty()\n    assert stack.is_full()\n    assert str(stack) == str(list(range(10)))\n    assert stack.pop() == 9\n    assert stack.peek() == 8\n\n    stack.push(100)\n    assert str(stack) == str([0, 1, 2, 3, 4, 5, 6, 7, 8, 100])\n\n    try:\n        stack.push(200)\n        raise AssertionError  # This should not happen\n    except StackOverflowError:\n        assert True  # This should happen\n\n    assert not stack.is_empty()\n    assert stack.size() == 10\n\n    assert 5 in stack\n    assert 55 not in stack\n\n\nif __name__ == \"__main__\":\n    test_stack()\n\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "data_structures/stacks/stack_using_two_queues.py",
    "content": "from __future__ import annotations\n\nfrom collections import deque\nfrom dataclasses import dataclass, field\n\n\n@dataclass\nclass StackWithQueues:\n    \"\"\"\n    https://www.geeksforgeeks.org/implement-stack-using-queue/\n\n    >>> stack = StackWithQueues()\n    >>> stack.push(1)\n    >>> stack.push(2)\n    >>> stack.push(3)\n    >>> stack.peek()\n    3\n    >>> stack.pop()\n    3\n    >>> stack.peek()\n    2\n    >>> stack.pop()\n    2\n    >>> stack.pop()\n    1\n    >>> stack.peek() is None\n    True\n    >>> stack.pop()\n    Traceback (most recent call last):\n        ...\n    IndexError: pop from an empty deque\n    \"\"\"\n\n    main_queue: deque[int] = field(default_factory=deque)\n    temp_queue: deque[int] = field(default_factory=deque)\n\n    def push(self, item: int) -> None:\n        self.temp_queue.append(item)\n        while self.main_queue:\n            self.temp_queue.append(self.main_queue.popleft())\n        self.main_queue, self.temp_queue = self.temp_queue, self.main_queue\n\n    def pop(self) -> int:\n        return self.main_queue.popleft()\n\n    def peek(self) -> int | None:\n        return self.main_queue[0] if self.main_queue else None\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    stack: StackWithQueues | None = StackWithQueues()\n    while stack:\n        print(\"\\nChoose operation:\")\n        print(\"1. Push\")\n        print(\"2. Pop\")\n        print(\"3. Peek\")\n        print(\"4. Quit\")\n\n        choice = input(\"Enter choice (1/2/3/4): \")\n\n        if choice == \"1\":\n            element = int(input(\"Enter an integer to push: \").strip())\n            stack.push(element)\n            print(f\"{element} pushed onto the stack.\")\n        elif choice == \"2\":\n            popped_element = stack.pop()\n            if popped_element is not None:\n                print(f\"Popped element: {popped_element}\")\n            else:\n                print(\"Stack is empty.\")\n        elif choice == \"3\":\n            peeked_element = stack.peek()\n            if peeked_element is not None:\n                print(f\"Top element: {peeked_element}\")\n            else:\n                print(\"Stack is empty.\")\n        elif choice == \"4\":\n            del stack\n            stack = None\n        else:\n            print(\"Invalid choice. Please try again.\")\n"
  },
  {
    "path": "data_structures/stacks/stack_with_doubly_linked_list.py",
    "content": "# A complete working Python program to demonstrate all\r\n# stack operations using a doubly linked list\r\n\r\nfrom __future__ import annotations\r\n\r\nfrom typing import TypeVar\r\n\r\nT = TypeVar(\"T\")\r\n\r\n\r\nclass Node[T]:\r\n    def __init__(self, data: T):\r\n        self.data = data  # Assign data\r\n        self.next: Node[T] | None = None  # Initialize next as null\r\n        self.prev: Node[T] | None = None  # Initialize prev as null\r\n\r\n\r\nclass Stack[T]:\r\n    \"\"\"\r\n    >>> stack = Stack()\r\n    >>> stack.is_empty()\r\n    True\r\n    >>> stack.print_stack()\r\n    stack elements are:\r\n    >>> for i in range(4):\r\n    ...     stack.push(i)\r\n    ...\r\n    >>> stack.is_empty()\r\n    False\r\n    >>> stack.print_stack()\r\n    stack elements are:\r\n    3->2->1->0->\r\n    >>> stack.top()\r\n    3\r\n    >>> len(stack)\r\n    4\r\n    >>> stack.pop()\r\n    3\r\n    >>> stack.print_stack()\r\n    stack elements are:\r\n    2->1->0->\r\n    \"\"\"\r\n\r\n    def __init__(self) -> None:\r\n        self.head: Node[T] | None = None\r\n\r\n    def push(self, data: T) -> None:\r\n        \"\"\"add a Node to the stack\"\"\"\r\n        if self.head is None:\r\n            self.head = Node(data)\r\n        else:\r\n            new_node = Node(data)\r\n            self.head.prev = new_node\r\n            new_node.next = self.head\r\n            new_node.prev = None\r\n            self.head = new_node\r\n\r\n    def pop(self) -> T | None:\r\n        \"\"\"pop the top element off the stack\"\"\"\r\n        if self.head is None:\r\n            return None\r\n        else:\r\n            assert self.head is not None\r\n            temp = self.head.data\r\n            self.head = self.head.next\r\n            if self.head is not None:\r\n                self.head.prev = None\r\n            return temp\r\n\r\n    def top(self) -> T | None:\r\n        \"\"\"return the top element of the stack\"\"\"\r\n        return self.head.data if self.head is not None else None\r\n\r\n    def __len__(self) -> int:\r\n        temp = self.head\r\n        count = 0\r\n        while temp is not None:\r\n            count += 1\r\n            temp = temp.next\r\n        return count\r\n\r\n    def is_empty(self) -> bool:\r\n        return self.head is None\r\n\r\n    def print_stack(self) -> None:\r\n        print(\"stack elements are:\")\r\n        temp = self.head\r\n        while temp is not None:\r\n            print(temp.data, end=\"->\")\r\n            temp = temp.next\r\n\r\n\r\n# Code execution starts here\r\nif __name__ == \"__main__\":\r\n    # Start with the empty stack\r\n    stack: Stack[int] = Stack()\r\n\r\n    # Insert 4 at the beginning. So stack becomes 4->None\r\n    print(\"Stack operations using Doubly LinkedList\")\r\n    stack.push(4)\r\n\r\n    # Insert 5 at the beginning. So stack becomes 4->5->None\r\n    stack.push(5)\r\n\r\n    # Insert 6 at the beginning. So stack becomes 4->5->6->None\r\n    stack.push(6)\r\n\r\n    # Insert 7 at the beginning. So stack becomes 4->5->6->7->None\r\n    stack.push(7)\r\n\r\n    # Print the stack\r\n    stack.print_stack()\r\n\r\n    # Print the top element\r\n    print(\"\\nTop element is \", stack.top())\r\n\r\n    # Print the stack size\r\n    print(\"Size of the stack is \", len(stack))\r\n\r\n    # pop the top element\r\n    stack.pop()\r\n\r\n    # pop the top element\r\n    stack.pop()\r\n\r\n    # two elements have now been popped off\r\n    stack.print_stack()\r\n\r\n    # Print True if the stack is empty else False\r\n    print(\"\\nstack is empty:\", stack.is_empty())\r\n"
  },
  {
    "path": "data_structures/stacks/stack_with_singly_linked_list.py",
    "content": "\"\"\"A Stack using a linked list like structure\"\"\"\r\n\r\nfrom __future__ import annotations\r\n\r\nfrom collections.abc import Iterator\r\nfrom typing import TypeVar\r\n\r\nT = TypeVar(\"T\")\r\n\r\n\r\nclass Node[T]:\r\n    def __init__(self, data: T):\r\n        self.data = data\r\n        self.next: Node[T] | None = None\r\n\r\n    def __str__(self) -> str:\r\n        return f\"{self.data}\"\r\n\r\n\r\nclass LinkedStack[T]:\r\n    \"\"\"\r\n    Linked List Stack implementing push (to top),\r\n    pop (from top) and is_empty\r\n\r\n    >>> stack = LinkedStack()\r\n    >>> stack.is_empty()\r\n    True\r\n    >>> stack.push(5)\r\n    >>> stack.push(9)\r\n    >>> stack.push('python')\r\n    >>> stack.is_empty()\r\n    False\r\n    >>> stack.pop()\r\n    'python'\r\n    >>> stack.push('algorithms')\r\n    >>> stack.pop()\r\n    'algorithms'\r\n    >>> stack.pop()\r\n    9\r\n    >>> stack.pop()\r\n    5\r\n    >>> stack.is_empty()\r\n    True\r\n    >>> stack.pop()\r\n    Traceback (most recent call last):\r\n        ...\r\n    IndexError: pop from empty stack\r\n    \"\"\"\r\n\r\n    def __init__(self) -> None:\r\n        self.top: Node[T] | None = None\r\n\r\n    def __iter__(self) -> Iterator[T]:\r\n        node = self.top\r\n        while node:\r\n            yield node.data\r\n            node = node.next\r\n\r\n    def __str__(self) -> str:\r\n        \"\"\"\r\n        >>> stack = LinkedStack()\r\n        >>> stack.push(\"c\")\r\n        >>> stack.push(\"b\")\r\n        >>> stack.push(\"a\")\r\n        >>> str(stack)\r\n        'a->b->c'\r\n        \"\"\"\r\n        return \"->\".join([str(item) for item in self])\r\n\r\n    def __len__(self) -> int:\r\n        \"\"\"\r\n        >>> stack = LinkedStack()\r\n        >>> len(stack) == 0\r\n        True\r\n        >>> stack.push(\"c\")\r\n        >>> stack.push(\"b\")\r\n        >>> stack.push(\"a\")\r\n        >>> len(stack) == 3\r\n        True\r\n        \"\"\"\r\n        return len(tuple(iter(self)))\r\n\r\n    def is_empty(self) -> bool:\r\n        \"\"\"\r\n        >>> stack = LinkedStack()\r\n        >>> stack.is_empty()\r\n        True\r\n        >>> stack.push(1)\r\n        >>> stack.is_empty()\r\n        False\r\n        \"\"\"\r\n        return self.top is None\r\n\r\n    def push(self, item: T) -> None:\r\n        \"\"\"\r\n        >>> stack = LinkedStack()\r\n        >>> stack.push(\"Python\")\r\n        >>> stack.push(\"Java\")\r\n        >>> stack.push(\"C\")\r\n        >>> str(stack)\r\n        'C->Java->Python'\r\n        \"\"\"\r\n        node = Node(item)\r\n        if not self.is_empty():\r\n            node.next = self.top\r\n        self.top = node\r\n\r\n    def pop(self) -> T:\r\n        \"\"\"\r\n        >>> stack = LinkedStack()\r\n        >>> stack.pop()\r\n        Traceback (most recent call last):\r\n            ...\r\n        IndexError: pop from empty stack\r\n        >>> stack.push(\"c\")\r\n        >>> stack.push(\"b\")\r\n        >>> stack.push(\"a\")\r\n        >>> stack.pop() == 'a'\r\n        True\r\n        >>> stack.pop() == 'b'\r\n        True\r\n        >>> stack.pop() == 'c'\r\n        True\r\n        \"\"\"\r\n        if self.is_empty():\r\n            raise IndexError(\"pop from empty stack\")\r\n        assert isinstance(self.top, Node)\r\n        pop_node = self.top\r\n        self.top = self.top.next\r\n        return pop_node.data\r\n\r\n    def peek(self) -> T:\r\n        \"\"\"\r\n        >>> stack = LinkedStack()\r\n        >>> stack.push(\"Java\")\r\n        >>> stack.push(\"C\")\r\n        >>> stack.push(\"Python\")\r\n        >>> stack.peek()\r\n        'Python'\r\n        \"\"\"\r\n        if self.is_empty():\r\n            raise IndexError(\"peek from empty stack\")\r\n\r\n        assert self.top is not None\r\n        return self.top.data\r\n\r\n    def clear(self) -> None:\r\n        \"\"\"\r\n        >>> stack = LinkedStack()\r\n        >>> stack.push(\"Java\")\r\n        >>> stack.push(\"C\")\r\n        >>> stack.push(\"Python\")\r\n        >>> str(stack)\r\n        'Python->C->Java'\r\n        >>> stack.clear()\r\n        >>> len(stack) == 0\r\n        True\r\n        \"\"\"\r\n        self.top = None\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    from doctest import testmod\r\n\r\n    testmod()\r\n"
  },
  {
    "path": "data_structures/stacks/stock_span_problem.py",
    "content": "\"\"\"\nThe stock span problem is a financial problem where we have a series of n daily\nprice quotes for a stock and we need to calculate span of stock's price for all n days.\n\nThe span Si of the stock's price on a given day i is defined as the maximum\nnumber of consecutive days just before the given day, for which the price of the stock\non the current day is less than or equal to its price on the given day.\n\"\"\"\n\n\ndef calculate_span(price: list[int]) -> list[int]:\n    \"\"\"\n    Calculate the span values for a given list of stock prices.\n    Args:\n        price: List of stock prices.\n    Returns:\n        List of span values.\n\n    >>> calculate_span([10, 4, 5, 90, 120, 80])\n    [1, 1, 2, 4, 5, 1]\n    >>> calculate_span([100, 50, 60, 70, 80, 90])\n    [1, 1, 2, 3, 4, 5]\n    >>> calculate_span([5, 4, 3, 2, 1])\n    [1, 1, 1, 1, 1]\n    >>> calculate_span([1, 2, 3, 4, 5])\n    [1, 2, 3, 4, 5]\n    >>> calculate_span([10, 20, 30, 40, 50])\n    [1, 2, 3, 4, 5]\n    >>> calculate_span([100, 80, 60, 70, 60, 75, 85])\n    [1, 1, 1, 2, 1, 4, 6]\n    \"\"\"\n    n = len(price)\n    s = [0] * n\n    # Create a stack and push index of fist element to it\n    st = []\n    st.append(0)\n\n    # Span value of first element is always 1\n    s[0] = 1\n\n    # Calculate span values for rest of the elements\n    for i in range(1, n):\n        # Pop elements from stack while stack is not\n        # empty and top of stack is smaller than price[i]\n        while len(st) > 0 and price[st[-1]] <= price[i]:\n            st.pop()\n\n        # If stack becomes empty, then price[i] is greater\n        # than all elements on left of it, i.e. price[0],\n        # price[1], ..price[i-1]. Else the price[i]  is\n        # greater than elements after top of stack\n        s[i] = i + 1 if len(st) <= 0 else (i - st[-1])\n\n        # Push this element to stack\n        st.append(i)\n\n    return s\n\n\n# A utility function to print elements of array\ndef print_array(arr, n):\n    for i in range(n):\n        print(arr[i], end=\" \")\n\n\n# Driver program to test above function\nprice = [10, 4, 5, 90, 120, 80]\n\n# Calculate the span values\nS = calculate_span(price)\n\n# Print the calculated span values\nprint_array(S, len(price))\n"
  },
  {
    "path": "data_structures/suffix_tree/__init__.py",
    "content": ""
  },
  {
    "path": "data_structures/suffix_tree/example/__init__.py",
    "content": ""
  },
  {
    "path": "data_structures/suffix_tree/example/example_usage.py",
    "content": "#  Created by: Ramy-Badr-Ahmed (https://github.com/Ramy-Badr-Ahmed)\n#  in Pull Request: #11554\n#  https://github.com/TheAlgorithms/Python/pull/11554\n#\n#  Please mention me (@Ramy-Badr-Ahmed) in any issue or pull request\n#  addressing bugs/corrections to this file.\n#  Thank you!\n\nfrom data_structures.suffix_tree.suffix_tree import SuffixTree\n\n\ndef main() -> None:\n    \"\"\"\n    Demonstrate the usage of the SuffixTree class.\n\n    - Initializes a SuffixTree with a predefined text.\n    - Defines a list of patterns to search for within the suffix tree.\n    - Searches for each pattern in the suffix tree.\n\n    Patterns tested:\n        - \"ana\" (found) --> True\n        - \"ban\" (found) --> True\n        - \"na\" (found) --> True\n        - \"xyz\" (not found) --> False\n        - \"mon\" (found) --> True\n    \"\"\"\n    text = \"monkey banana\"\n    suffix_tree = SuffixTree(text)\n\n    patterns = [\"ana\", \"ban\", \"na\", \"xyz\", \"mon\"]\n    for pattern in patterns:\n        found = suffix_tree.search(pattern)\n        print(f\"Pattern '{pattern}' found: {found}\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "data_structures/suffix_tree/suffix_tree.py",
    "content": "#  Created by: Ramy-Badr-Ahmed (https://github.com/Ramy-Badr-Ahmed)\n#  in Pull Request: #11554\n#  https://github.com/TheAlgorithms/Python/pull/11554\n#\n#  Please mention me (@Ramy-Badr-Ahmed) in any issue or pull request\n#  addressing bugs/corrections to this file.\n#  Thank you!\n\nfrom data_structures.suffix_tree.suffix_tree_node import SuffixTreeNode\n\n\nclass SuffixTree:\n    def __init__(self, text: str) -> None:\n        \"\"\"\n        Initializes the suffix tree with the given text.\n\n        Args:\n            text (str): The text for which the suffix tree is to be built.\n        \"\"\"\n        self.text: str = text\n        self.root: SuffixTreeNode = SuffixTreeNode()\n        self.build_suffix_tree()\n\n    def build_suffix_tree(self) -> None:\n        \"\"\"\n        Builds the suffix tree for the given text by adding all suffixes.\n        \"\"\"\n        text = self.text\n        n = len(text)\n        for i in range(n):\n            suffix = text[i:]\n            self._add_suffix(suffix, i)\n\n    def _add_suffix(self, suffix: str, index: int) -> None:\n        \"\"\"\n        Adds a suffix to the suffix tree.\n\n        Args:\n            suffix (str): The suffix to add.\n            index (int): The starting index of the suffix in the original text.\n        \"\"\"\n        node = self.root\n        for char in suffix:\n            if char not in node.children:\n                node.children[char] = SuffixTreeNode()\n            node = node.children[char]\n        node.is_end_of_string = True\n        node.start = index\n        node.end = index + len(suffix) - 1\n\n    def search(self, pattern: str) -> bool:\n        \"\"\"\n        Searches for a pattern in the suffix tree.\n\n        Args:\n            pattern (str): The pattern to search for.\n\n        Returns:\n            bool: True if the pattern is found, False otherwise.\n        \"\"\"\n        node = self.root\n        for char in pattern:\n            if char not in node.children:\n                return False\n            node = node.children[char]\n        return True\n"
  },
  {
    "path": "data_structures/suffix_tree/suffix_tree_node.py",
    "content": "#  Created by: Ramy-Badr-Ahmed (https://github.com/Ramy-Badr-Ahmed)\n#  in Pull Request: #11554\n#  https://github.com/TheAlgorithms/Python/pull/11554\n#\n#  Please mention me (@Ramy-Badr-Ahmed) in any issue or pull request\n#  addressing bugs/corrections to this file.\n#  Thank you!\n\nfrom __future__ import annotations\n\n\nclass SuffixTreeNode:\n    def __init__(\n        self,\n        children: dict[str, SuffixTreeNode] | None = None,\n        is_end_of_string: bool = False,\n        start: int | None = None,\n        end: int | None = None,\n        suffix_link: SuffixTreeNode | None = None,\n    ) -> None:\n        \"\"\"\n        Initializes a suffix tree node.\n\n        Parameters:\n            children (dict[str, SuffixTreeNode] | None): The children of this node.\n            is_end_of_string (bool): Indicates if this node represents\n                                     the end of a string.\n            start (int | None): The start index of the suffix in the text.\n            end (int | None): The end index of the suffix in the text.\n            suffix_link (SuffixTreeNode | None): Link to another suffix tree node.\n        \"\"\"\n        self.children = children or {}\n        self.is_end_of_string = is_end_of_string\n        self.start = start\n        self.end = end\n        self.suffix_link = suffix_link\n"
  },
  {
    "path": "data_structures/suffix_tree/tests/__init__.py",
    "content": ""
  },
  {
    "path": "data_structures/suffix_tree/tests/test_suffix_tree.py",
    "content": "#  Created by: Ramy-Badr-Ahmed (https://github.com/Ramy-Badr-Ahmed)\n#  in Pull Request: #11554\n#  https://github.com/TheAlgorithms/Python/pull/11554\n#\n#  Please mention me (@Ramy-Badr-Ahmed) in any issue or pull request\n#  addressing bugs/corrections to this file.\n#  Thank you!\n\nimport unittest\n\nfrom data_structures.suffix_tree.suffix_tree import SuffixTree\n\n\nclass TestSuffixTree(unittest.TestCase):\n    def setUp(self) -> None:\n        \"\"\"Set up the initial conditions for each test.\"\"\"\n        self.text = \"banana\"\n        self.suffix_tree = SuffixTree(self.text)\n\n    def test_search_existing_patterns(self) -> None:\n        \"\"\"Test searching for patterns that exist in the suffix tree.\"\"\"\n        patterns = [\"ana\", \"ban\", \"na\"]\n        for pattern in patterns:\n            with self.subTest(pattern=pattern):\n                assert self.suffix_tree.search(pattern), (\n                    f\"Pattern '{pattern}' should be found.\"\n                )\n\n    def test_search_non_existing_patterns(self) -> None:\n        \"\"\"Test searching for patterns that do not exist in the suffix tree.\"\"\"\n        patterns = [\"xyz\", \"apple\", \"cat\"]\n        for pattern in patterns:\n            with self.subTest(pattern=pattern):\n                assert not self.suffix_tree.search(pattern), (\n                    f\"Pattern '{pattern}' should not be found.\"\n                )\n\n    def test_search_empty_pattern(self) -> None:\n        \"\"\"Test searching for an empty pattern.\"\"\"\n        assert self.suffix_tree.search(\"\"), \"An empty pattern should be found.\"\n\n    def test_search_full_text(self) -> None:\n        \"\"\"Test searching for the full text.\"\"\"\n        assert self.suffix_tree.search(self.text), (\n            \"The full text should be found in the suffix tree.\"\n        )\n\n    def test_search_substrings(self) -> None:\n        \"\"\"Test searching for substrings of the full text.\"\"\"\n        substrings = [\"ban\", \"ana\", \"a\", \"na\"]\n        for substring in substrings:\n            with self.subTest(substring=substring):\n                assert self.suffix_tree.search(substring), (\n                    f\"Substring '{substring}' should be found.\"\n                )\n\n\nif __name__ == \"__main__\":\n    unittest.main()\n"
  },
  {
    "path": "data_structures/trie/__init__.py",
    "content": ""
  },
  {
    "path": "data_structures/trie/radix_tree.py",
    "content": "\"\"\"\nA Radix Tree is a data structure that represents a space-optimized\ntrie (prefix tree) in whicheach node that is the only child is merged\nwith its parent [https://en.wikipedia.org/wiki/Radix_tree]\n\"\"\"\n\n\nclass RadixNode:\n    def __init__(self, prefix: str = \"\", is_leaf: bool = False) -> None:\n        # Mapping from the first character of the prefix of the node\n        self.nodes: dict[str, RadixNode] = {}\n\n        # A node will be a leaf if the tree contains its word\n        self.is_leaf = is_leaf\n\n        self.prefix = prefix\n\n    def match(self, word: str) -> tuple[str, str, str]:\n        \"\"\"Compute the common substring of the prefix of the node and a word\n\n        Args:\n            word (str): word to compare\n\n        Returns:\n            (str, str, str): common substring, remaining prefix, remaining word\n\n        >>> RadixNode(\"myprefix\").match(\"mystring\")\n        ('my', 'prefix', 'string')\n        \"\"\"\n        x = 0\n        for q, w in zip(self.prefix, word):\n            if q != w:\n                break\n\n            x += 1\n\n        return self.prefix[:x], self.prefix[x:], word[x:]\n\n    def insert_many(self, words: list[str]) -> None:\n        \"\"\"Insert many words in the tree\n\n        Args:\n            words (list[str]): list of words\n\n        >>> RadixNode(\"myprefix\").insert_many([\"mystring\", \"hello\"])\n        \"\"\"\n        for word in words:\n            self.insert(word)\n\n    def insert(self, word: str) -> None:\n        \"\"\"Insert a word into the tree\n\n        Args:\n            word (str): word to insert\n\n        >>> RadixNode(\"myprefix\").insert(\"mystring\")\n\n        >>> root = RadixNode()\n        >>> root.insert_many(['myprefix', 'myprefixA', 'myprefixAA'])\n        >>> root.print_tree()\n        - myprefix   (leaf)\n        -- A   (leaf)\n        --- A   (leaf)\n        \"\"\"\n        # Case 1: If the word is the prefix of the node\n        # Solution: We set the current node as leaf\n        if self.prefix == word and not self.is_leaf:\n            self.is_leaf = True\n\n        # Case 2: The node has no edges that have a prefix to the word\n        # Solution: We create an edge from the current node to a new one\n        # containing the word\n        elif word[0] not in self.nodes:\n            self.nodes[word[0]] = RadixNode(prefix=word, is_leaf=True)\n\n        else:\n            incoming_node = self.nodes[word[0]]\n            matching_string, remaining_prefix, remaining_word = incoming_node.match(\n                word\n            )\n\n            # Case 3: The node prefix is equal to the matching\n            # Solution: We insert remaining word on the next node\n            if remaining_prefix == \"\":\n                self.nodes[matching_string[0]].insert(remaining_word)\n\n            # Case 4: The word is greater equal to the matching\n            # Solution: Create a node in between both nodes, change\n            # prefixes and add the new node for the remaining word\n            else:\n                incoming_node.prefix = remaining_prefix\n\n                aux_node = self.nodes[matching_string[0]]\n                self.nodes[matching_string[0]] = RadixNode(matching_string, False)\n                self.nodes[matching_string[0]].nodes[remaining_prefix[0]] = aux_node\n\n                if remaining_word == \"\":\n                    self.nodes[matching_string[0]].is_leaf = True\n                else:\n                    self.nodes[matching_string[0]].insert(remaining_word)\n\n    def find(self, word: str) -> bool:\n        \"\"\"Returns if the word is on the tree\n\n        Args:\n            word (str): word to check\n\n        Returns:\n            bool: True if the word appears on the tree\n\n        >>> RadixNode(\"myprefix\").find(\"mystring\")\n        False\n        \"\"\"\n        incoming_node = self.nodes.get(word[0], None)\n        if not incoming_node:\n            return False\n        else:\n            _matching_string, remaining_prefix, remaining_word = incoming_node.match(\n                word\n            )\n            # If there is remaining prefix, the word can't be on the tree\n            if remaining_prefix != \"\":\n                return False\n            # This applies when the word and the prefix are equal\n            elif remaining_word == \"\":\n                return incoming_node.is_leaf\n            # We have word remaining so we check the next node\n            else:\n                return incoming_node.find(remaining_word)\n\n    def delete(self, word: str) -> bool:\n        \"\"\"Deletes a word from the tree if it exists\n\n        Args:\n            word (str): word to be deleted\n\n        Returns:\n            bool: True if the word was found and deleted. False if word is not found\n\n        >>> RadixNode(\"myprefix\").delete(\"mystring\")\n        False\n        \"\"\"\n        incoming_node = self.nodes.get(word[0], None)\n        if not incoming_node:\n            return False\n        else:\n            _matching_string, remaining_prefix, remaining_word = incoming_node.match(\n                word\n            )\n            # If there is remaining prefix, the word can't be on the tree\n            if remaining_prefix != \"\":\n                return False\n            # We have word remaining so we check the next node\n            elif remaining_word != \"\":\n                return incoming_node.delete(remaining_word)\n            # If it is not a leaf, we don't have to delete\n            elif not incoming_node.is_leaf:\n                return False\n            else:\n                # We delete the nodes if no edges go from it\n                if len(incoming_node.nodes) == 0:\n                    del self.nodes[word[0]]\n                    # We merge the current node with its only child\n                    if len(self.nodes) == 1 and not self.is_leaf:\n                        merging_node = next(iter(self.nodes.values()))\n                        self.is_leaf = merging_node.is_leaf\n                        self.prefix += merging_node.prefix\n                        self.nodes = merging_node.nodes\n                # If there is more than 1 edge, we just mark it as non-leaf\n                elif len(incoming_node.nodes) > 1:\n                    incoming_node.is_leaf = False\n                # If there is 1 edge, we merge it with its child\n                else:\n                    merging_node = next(iter(incoming_node.nodes.values()))\n                    incoming_node.is_leaf = merging_node.is_leaf\n                    incoming_node.prefix += merging_node.prefix\n                    incoming_node.nodes = merging_node.nodes\n\n                return True\n\n    def print_tree(self, height: int = 0) -> None:\n        \"\"\"Print the tree\n\n        Args:\n            height (int, optional): Height of the printed node\n        \"\"\"\n        if self.prefix != \"\":\n            print(\"-\" * height, self.prefix, \"  (leaf)\" if self.is_leaf else \"\")\n\n        for value in self.nodes.values():\n            value.print_tree(height + 1)\n\n\ndef test_trie() -> bool:\n    words = \"banana bananas bandana band apple all beast\".split()\n    root = RadixNode()\n    root.insert_many(words)\n\n    assert all(root.find(word) for word in words)\n    assert not root.find(\"bandanas\")\n    assert not root.find(\"apps\")\n    root.delete(\"all\")\n    assert not root.find(\"all\")\n    root.delete(\"banana\")\n    assert not root.find(\"banana\")\n    assert root.find(\"bananas\")\n\n    return True\n\n\ndef pytests() -> None:\n    assert test_trie()\n\n\ndef main() -> None:\n    \"\"\"\n    >>> pytests()\n    \"\"\"\n    root = RadixNode()\n    words = \"banana bananas bandanas bandana band apple all beast\".split()\n    root.insert_many(words)\n\n    print(\"Words:\", words)\n    print(\"Tree:\")\n    root.print_tree()\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "data_structures/trie/trie.py",
    "content": "\"\"\"\nA Trie/Prefix Tree is a kind of search tree used to provide quick lookup\nof words/patterns in a set of words. A basic Trie however has O(n^2) space complexity\nmaking it impractical in practice. It however provides O(max(search_string, length of\nlongest word)) lookup time making it an optimal approach when space is not an issue.\n\"\"\"\n\n\nclass TrieNode:\n    def __init__(self) -> None:\n        self.nodes: dict[str, TrieNode] = {}  # Mapping from char to TrieNode\n        self.is_leaf = False\n\n    def insert_many(self, words: list[str]) -> None:\n        \"\"\"\n        Inserts a list of words into the Trie\n        :param words: list of string words\n        :return: None\n        \"\"\"\n        for word in words:\n            self.insert(word)\n\n    def insert(self, word: str) -> None:\n        \"\"\"\n        Inserts a word into the Trie\n        :param word: word to be inserted\n        :return: None\n        \"\"\"\n        curr = self\n        for char in word:\n            if char not in curr.nodes:\n                curr.nodes[char] = TrieNode()\n            curr = curr.nodes[char]\n        curr.is_leaf = True\n\n    def find(self, word: str) -> bool:\n        \"\"\"\n        Tries to find word in a Trie\n        :param word: word to look for\n        :return: Returns True if word is found, False otherwise\n        \"\"\"\n        curr = self\n        for char in word:\n            if char not in curr.nodes:\n                return False\n            curr = curr.nodes[char]\n        return curr.is_leaf\n\n    def delete(self, word: str) -> None:\n        \"\"\"\n        Deletes a word in a Trie\n        :param word: word to delete\n        :return: None\n        \"\"\"\n\n        def _delete(curr: TrieNode, word: str, index: int) -> bool:\n            if index == len(word):\n                # If word does not exist\n                if not curr.is_leaf:\n                    return False\n                curr.is_leaf = False\n                return len(curr.nodes) == 0\n            char = word[index]\n            char_node = curr.nodes.get(char)\n            # If char not in current trie node\n            if not char_node:\n                return False\n            # Flag to check if node can be deleted\n            delete_curr = _delete(char_node, word, index + 1)\n            if delete_curr:\n                del curr.nodes[char]\n                return len(curr.nodes) == 0\n            return delete_curr\n\n        _delete(self, word, 0)\n\n\ndef print_words(node: TrieNode, word: str) -> None:\n    \"\"\"\n    Prints all the words in a Trie\n    :param node: root node of Trie\n    :param word: Word variable should be empty at start\n    :return: None\n    \"\"\"\n    if node.is_leaf:\n        print(word, end=\" \")\n\n    for key, value in node.nodes.items():\n        print_words(value, word + key)\n\n\ndef test_trie() -> bool:\n    words = \"banana bananas bandana band apple all beast\".split()\n    root = TrieNode()\n    root.insert_many(words)\n    # print_words(root, \"\")\n    assert all(root.find(word) for word in words)\n    assert root.find(\"banana\")\n    assert not root.find(\"bandanas\")\n    assert not root.find(\"apps\")\n    assert root.find(\"apple\")\n    assert root.find(\"all\")\n    root.delete(\"all\")\n    assert not root.find(\"all\")\n    root.delete(\"banana\")\n    assert not root.find(\"banana\")\n    assert root.find(\"bananas\")\n    return True\n\n\ndef print_results(msg: str, passes: bool) -> None:\n    print(str(msg), \"works!\" if passes else \"doesn't work :(\")\n\n\ndef pytests() -> None:\n    assert test_trie()\n\n\ndef main() -> None:\n    \"\"\"\n    >>> pytests()\n    \"\"\"\n    print_results(\"Testing trie functionality\", test_trie())\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "digital_image_processing/__init__.py",
    "content": ""
  },
  {
    "path": "digital_image_processing/change_brightness.py",
    "content": "from PIL import Image\n\n\ndef change_brightness(img: Image, level: float) -> Image:\n    \"\"\"\n    Change the brightness of a PIL Image to a given level.\n    \"\"\"\n\n    def brightness(c: int) -> float:\n        \"\"\"\n        Fundamental Transformation/Operation that'll be performed on\n        every bit.\n        \"\"\"\n        return 128 + level + (c - 128)\n\n    if not -255.0 <= level <= 255.0:\n        raise ValueError(\"level must be between -255.0 (black) and 255.0 (white)\")\n    return img.point(brightness)\n\n\nif __name__ == \"__main__\":\n    # Load image\n    with Image.open(\"image_data/lena.jpg\") as img:\n        # Change brightness to 100\n        brigt_img = change_brightness(img, 100)\n        brigt_img.save(\"image_data/lena_brightness.png\", format=\"png\")\n"
  },
  {
    "path": "digital_image_processing/change_contrast.py",
    "content": "\"\"\"\r\nChanging contrast with PIL\r\n\r\nThis algorithm is used in\r\nhttps://noivce.pythonanywhere.com/ Python web app.\r\n\r\npsf/black: True\r\nruff : True\r\n\"\"\"\r\n\r\nfrom PIL import Image\r\n\r\n\r\ndef change_contrast(img: Image, level: int) -> Image:\r\n    \"\"\"\r\n    Function to change contrast\r\n    \"\"\"\r\n    factor = (259 * (level + 255)) / (255 * (259 - level))\r\n\r\n    def contrast(c: int) -> int:\r\n        \"\"\"\r\n        Fundamental Transformation/Operation that'll be performed on\r\n        every bit.\r\n        \"\"\"\r\n        return int(128 + factor * (c - 128))\r\n\r\n    return img.point(contrast)\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    # Load image\r\n    with Image.open(\"image_data/lena.jpg\") as img:\r\n        # Change contrast to 170\r\n        cont_img = change_contrast(img, 170)\r\n        cont_img.save(\"image_data/lena_high_contrast.png\", format=\"png\")\r\n"
  },
  {
    "path": "digital_image_processing/convert_to_negative.py",
    "content": "\"\"\"\nImplemented an algorithm using opencv to convert a colored image into its negative\n\"\"\"\n\nfrom cv2 import destroyAllWindows, imread, imshow, waitKey\n\n\ndef convert_to_negative(img):\n    # getting number of pixels in the image\n    pixel_h, pixel_v = img.shape[0], img.shape[1]\n\n    # converting each pixel's color to its negative\n    for i in range(pixel_h):\n        for j in range(pixel_v):\n            img[i][j] = [255, 255, 255] - img[i][j]\n\n    return img\n\n\nif __name__ == \"__main__\":\n    # read original image\n    img = imread(\"image_data/lena.jpg\", 1)\n\n    # convert to its negative\n    neg = convert_to_negative(img)\n\n    # show result image\n    imshow(\"negative of original image\", img)\n    waitKey(0)\n    destroyAllWindows()\n"
  },
  {
    "path": "digital_image_processing/dithering/__init__.py",
    "content": ""
  },
  {
    "path": "digital_image_processing/dithering/burkes.py",
    "content": "\"\"\"\nImplementation Burke's algorithm (dithering)\n\"\"\"\n\nimport numpy as np\nfrom cv2 import destroyAllWindows, imread, imshow, waitKey\n\n\nclass Burkes:\n    \"\"\"\n    Burke's algorithm is using for converting grayscale image to black and white version\n    Source: Source: https://en.wikipedia.org/wiki/Dither\n\n    Note:\n        * Best results are given with threshold= ~1/2 * max greyscale value.\n        * This implementation get RGB image and converts it to greyscale in runtime.\n    \"\"\"\n\n    def __init__(self, input_img, threshold: int):\n        self.min_threshold = 0\n        # max greyscale value for #FFFFFF\n        self.max_threshold = int(self.get_greyscale(255, 255, 255))\n\n        if not self.min_threshold < threshold < self.max_threshold:\n            msg = f\"Factor value should be from 0 to {self.max_threshold}\"\n            raise ValueError(msg)\n\n        self.input_img = input_img\n        self.threshold = threshold\n        self.width, self.height = self.input_img.shape[1], self.input_img.shape[0]\n\n        # error table size (+4 columns and +1 row) greater than input image because of\n        # lack of if statements\n        self.error_table = [\n            [0 for _ in range(self.height + 4)] for __ in range(self.width + 1)\n        ]\n        self.output_img = np.ones((self.width, self.height, 3), np.uint8) * 255\n\n    @classmethod\n    def get_greyscale(cls, blue: int, green: int, red: int) -> float:\n        \"\"\"\n        >>> Burkes.get_greyscale(3, 4, 5)\n        4.185\n        >>> Burkes.get_greyscale(0, 0, 0)\n        0.0\n        >>> Burkes.get_greyscale(255, 255, 255)\n        255.0\n        \"\"\"\n        \"\"\"\n        Formula from https://en.wikipedia.org/wiki/HSL_and_HSV\n        cf Lightness section, and Fig 13c.\n        We use the first of four possible.\n        \"\"\"\n        return 0.114 * blue + 0.587 * green + 0.299 * red\n\n    def process(self) -> None:\n        for y in range(self.height):\n            for x in range(self.width):\n                greyscale = int(self.get_greyscale(*self.input_img[y][x]))\n                if self.threshold > greyscale + self.error_table[y][x]:\n                    self.output_img[y][x] = (0, 0, 0)\n                    current_error = greyscale + self.error_table[y][x]\n                else:\n                    self.output_img[y][x] = (255, 255, 255)\n                    current_error = greyscale + self.error_table[y][x] - 255\n                \"\"\"\n                Burkes error propagation (`*` is current pixel):\n\n                                 *          8/32        4/32\n                2/32    4/32    8/32    4/32    2/32\n                \"\"\"\n                self.error_table[y][x + 1] += int(8 / 32 * current_error)\n                self.error_table[y][x + 2] += int(4 / 32 * current_error)\n                self.error_table[y + 1][x] += int(8 / 32 * current_error)\n                self.error_table[y + 1][x + 1] += int(4 / 32 * current_error)\n                self.error_table[y + 1][x + 2] += int(2 / 32 * current_error)\n                self.error_table[y + 1][x - 1] += int(4 / 32 * current_error)\n                self.error_table[y + 1][x - 2] += int(2 / 32 * current_error)\n\n\nif __name__ == \"__main__\":\n    # create Burke's instances with original images in greyscale\n    burkes_instances = [\n        Burkes(imread(\"image_data/lena.jpg\", 1), threshold)\n        for threshold in (1, 126, 130, 140)\n    ]\n\n    for burkes in burkes_instances:\n        burkes.process()\n\n    for burkes in burkes_instances:\n        imshow(\n            f\"Original image with dithering threshold: {burkes.threshold}\",\n            burkes.output_img,\n        )\n\n    waitKey(0)\n    destroyAllWindows()\n"
  },
  {
    "path": "digital_image_processing/edge_detection/__init__.py",
    "content": ""
  },
  {
    "path": "digital_image_processing/edge_detection/canny.py",
    "content": "import cv2\nimport numpy as np\n\nfrom digital_image_processing.filters.convolve import img_convolve\nfrom digital_image_processing.filters.sobel_filter import sobel_filter\n\nPI = 180\n\n\ndef gen_gaussian_kernel(k_size, sigma):\n    center = k_size // 2\n    x, y = np.mgrid[0 - center : k_size - center, 0 - center : k_size - center]\n    g = (\n        1\n        / (2 * np.pi * sigma)\n        * np.exp(-(np.square(x) + np.square(y)) / (2 * np.square(sigma)))\n    )\n    return g\n\n\ndef suppress_non_maximum(image_shape, gradient_direction, sobel_grad):\n    \"\"\"\n    Non-maximum suppression. If the edge strength of the current pixel is the largest\n    compared to the other pixels in the mask with the same direction, the value will be\n    preserved. Otherwise, the value will be suppressed.\n    \"\"\"\n    destination = np.zeros(image_shape)\n\n    for row in range(1, image_shape[0] - 1):\n        for col in range(1, image_shape[1] - 1):\n            direction = gradient_direction[row, col]\n\n            if (\n                0 <= direction < PI / 8\n                or 15 * PI / 8 <= direction <= 2 * PI\n                or 7 * PI / 8 <= direction <= 9 * PI / 8\n            ):\n                w = sobel_grad[row, col - 1]\n                e = sobel_grad[row, col + 1]\n                if sobel_grad[row, col] >= w and sobel_grad[row, col] >= e:\n                    destination[row, col] = sobel_grad[row, col]\n\n            elif (\n                PI / 8 <= direction < 3 * PI / 8\n                or 9 * PI / 8 <= direction < 11 * PI / 8\n            ):\n                sw = sobel_grad[row + 1, col - 1]\n                ne = sobel_grad[row - 1, col + 1]\n                if sobel_grad[row, col] >= sw and sobel_grad[row, col] >= ne:\n                    destination[row, col] = sobel_grad[row, col]\n\n            elif (\n                3 * PI / 8 <= direction < 5 * PI / 8\n                or 11 * PI / 8 <= direction < 13 * PI / 8\n            ):\n                n = sobel_grad[row - 1, col]\n                s = sobel_grad[row + 1, col]\n                if sobel_grad[row, col] >= n and sobel_grad[row, col] >= s:\n                    destination[row, col] = sobel_grad[row, col]\n\n            elif (\n                5 * PI / 8 <= direction < 7 * PI / 8\n                or 13 * PI / 8 <= direction < 15 * PI / 8\n            ):\n                nw = sobel_grad[row - 1, col - 1]\n                se = sobel_grad[row + 1, col + 1]\n                if sobel_grad[row, col] >= nw and sobel_grad[row, col] >= se:\n                    destination[row, col] = sobel_grad[row, col]\n\n    return destination\n\n\ndef detect_high_low_threshold(\n    image_shape, destination, threshold_low, threshold_high, weak, strong\n):\n    \"\"\"\n    High-Low threshold detection. If an edge pixel's gradient value is higher\n    than the high threshold value, it is marked as a strong edge pixel. If an\n    edge pixel's gradient value is smaller than the high threshold value and\n    larger than the low threshold value, it is marked as a weak edge pixel. If\n    an edge pixel's value is smaller than the low threshold value, it will be\n    suppressed.\n    \"\"\"\n    for row in range(1, image_shape[0] - 1):\n        for col in range(1, image_shape[1] - 1):\n            if destination[row, col] >= threshold_high:\n                destination[row, col] = strong\n            elif destination[row, col] <= threshold_low:\n                destination[row, col] = 0\n            else:\n                destination[row, col] = weak\n\n\ndef track_edge(image_shape, destination, weak, strong):\n    \"\"\"\n    Edge tracking. Usually a weak edge pixel caused from true edges will be connected\n    to a strong edge pixel while noise responses are unconnected. As long as there is\n    one strong edge pixel that is involved in its 8-connected neighborhood, that weak\n    edge point can be identified as one that should be preserved.\n    \"\"\"\n    for row in range(1, image_shape[0]):\n        for col in range(1, image_shape[1]):\n            if destination[row, col] == weak:\n                if 255 in (\n                    destination[row, col + 1],\n                    destination[row, col - 1],\n                    destination[row - 1, col],\n                    destination[row + 1, col],\n                    destination[row - 1, col - 1],\n                    destination[row + 1, col - 1],\n                    destination[row - 1, col + 1],\n                    destination[row + 1, col + 1],\n                ):\n                    destination[row, col] = strong\n                else:\n                    destination[row, col] = 0\n\n\ndef canny(image, threshold_low=15, threshold_high=30, weak=128, strong=255):\n    # gaussian_filter\n    gaussian_out = img_convolve(image, gen_gaussian_kernel(9, sigma=1.4))\n    # get the gradient and degree by sobel_filter\n    sobel_grad, sobel_theta = sobel_filter(gaussian_out)\n    gradient_direction = PI + np.rad2deg(sobel_theta)\n\n    destination = suppress_non_maximum(image.shape, gradient_direction, sobel_grad)\n\n    detect_high_low_threshold(\n        image.shape, destination, threshold_low, threshold_high, weak, strong\n    )\n\n    track_edge(image.shape, destination, weak, strong)\n\n    return destination\n\n\nif __name__ == \"__main__\":\n    # read original image in gray mode\n    lena = cv2.imread(r\"../image_data/lena.jpg\", 0)\n    # canny edge detection\n    canny_destination = canny(lena)\n    cv2.imshow(\"canny\", canny_destination)\n    cv2.waitKey(0)\n"
  },
  {
    "path": "digital_image_processing/filters/__init__.py",
    "content": ""
  },
  {
    "path": "digital_image_processing/filters/bilateral_filter.py",
    "content": "\"\"\"\nImplementation of Bilateral filter\n\nInputs:\n    img: A 2d image with values in between 0 and 1\n    varS: variance in space dimension.\n    varI: variance in Intensity.\n    N: Kernel size(Must be an odd number)\nOutput:\n    img:A 2d zero padded image with values in between 0 and 1\n\"\"\"\n\nimport math\nimport sys\n\nimport cv2\nimport numpy as np\n\n\ndef vec_gaussian(img: np.ndarray, variance: float) -> np.ndarray:\n    # For applying gaussian function for each element in matrix.\n    sigma = math.sqrt(variance)\n    cons = 1 / (sigma * math.sqrt(2 * math.pi))\n    return cons * np.exp(-((img / sigma) ** 2) * 0.5)\n\n\ndef get_slice(img: np.ndarray, x: int, y: int, kernel_size: int) -> np.ndarray:\n    half = kernel_size // 2\n    return img[x - half : x + half + 1, y - half : y + half + 1]\n\n\ndef get_gauss_kernel(kernel_size: int, spatial_variance: float) -> np.ndarray:\n    # Creates a gaussian kernel of given dimension.\n    arr = np.zeros((kernel_size, kernel_size))\n    for i in range(kernel_size):\n        for j in range(kernel_size):\n            arr[i, j] = math.sqrt(\n                abs(i - kernel_size // 2) ** 2 + abs(j - kernel_size // 2) ** 2\n            )\n    return vec_gaussian(arr, spatial_variance)\n\n\ndef bilateral_filter(\n    img: np.ndarray,\n    spatial_variance: float,\n    intensity_variance: float,\n    kernel_size: int,\n) -> np.ndarray:\n    img2 = np.zeros(img.shape)\n    gauss_ker = get_gauss_kernel(kernel_size, spatial_variance)\n    size_x, size_y = img.shape\n    for i in range(kernel_size // 2, size_x - kernel_size // 2):\n        for j in range(kernel_size // 2, size_y - kernel_size // 2):\n            img_s = get_slice(img, i, j, kernel_size)\n            img_i = img_s - img_s[kernel_size // 2, kernel_size // 2]\n            img_ig = vec_gaussian(img_i, intensity_variance)\n            weights = np.multiply(gauss_ker, img_ig)\n            vals = np.multiply(img_s, weights)\n            val = np.sum(vals) / np.sum(weights)\n            img2[i, j] = val\n    return img2\n\n\ndef parse_args(args: list) -> tuple:\n    filename = args[1] if args[1:] else \"../image_data/lena.jpg\"\n    spatial_variance = float(args[2]) if args[2:] else 1.0\n    intensity_variance = float(args[3]) if args[3:] else 1.0\n    if args[4:]:\n        kernel_size = int(args[4])\n        kernel_size = kernel_size + abs(kernel_size % 2 - 1)\n    else:\n        kernel_size = 5\n    return filename, spatial_variance, intensity_variance, kernel_size\n\n\nif __name__ == \"__main__\":\n    filename, spatial_variance, intensity_variance, kernel_size = parse_args(sys.argv)\n    img = cv2.imread(filename, 0)\n    cv2.imshow(\"input image\", img)\n\n    out = img / 255\n    out = out.astype(\"float32\")\n    out = bilateral_filter(out, spatial_variance, intensity_variance, kernel_size)\n    out = out * 255\n    out = np.uint8(out)\n    cv2.imshow(\"output image\", out)\n    cv2.waitKey(0)\n    cv2.destroyAllWindows()\n"
  },
  {
    "path": "digital_image_processing/filters/convolve.py",
    "content": "# @Author  : lightXu\n# @File    : convolve.py\n# @Time    : 2019/7/8 0008 下午 16:13\nfrom cv2 import COLOR_BGR2GRAY, cvtColor, imread, imshow, waitKey\nfrom numpy import array, dot, pad, ravel, uint8, zeros\n\n\ndef im2col(image, block_size):\n    rows, cols = image.shape\n    dst_height = cols - block_size[1] + 1\n    dst_width = rows - block_size[0] + 1\n    image_array = zeros((dst_height * dst_width, block_size[1] * block_size[0]))\n    row = 0\n    for i in range(dst_height):\n        for j in range(dst_width):\n            window = ravel(image[i : i + block_size[0], j : j + block_size[1]])\n            image_array[row, :] = window\n            row += 1\n\n    return image_array\n\n\ndef img_convolve(image, filter_kernel):\n    height, width = image.shape[0], image.shape[1]\n    k_size = filter_kernel.shape[0]\n    pad_size = k_size // 2\n    # Pads image with the edge values of array.\n    image_tmp = pad(image, pad_size, mode=\"edge\")\n\n    # im2col, turn the k_size*k_size pixels into a row and np.vstack all rows\n    image_array = im2col(image_tmp, (k_size, k_size))\n\n    #  turn the kernel into shape(k*k, 1)\n    kernel_array = ravel(filter_kernel)\n    # reshape and get the dst image\n    dst = dot(image_array, kernel_array).reshape(height, width)\n    return dst\n\n\nif __name__ == \"__main__\":\n    # read original image\n    img = imread(r\"../image_data/lena.jpg\")\n    # turn image in gray scale value\n    gray = cvtColor(img, COLOR_BGR2GRAY)\n    # Laplace operator\n    Laplace_kernel = array([[0, 1, 0], [1, -4, 1], [0, 1, 0]])\n    out = img_convolve(gray, Laplace_kernel).astype(uint8)\n    imshow(\"Laplacian\", out)\n    waitKey(0)\n"
  },
  {
    "path": "digital_image_processing/filters/gabor_filter.py",
    "content": "# Implementation of the Gaborfilter\n# https://en.wikipedia.org/wiki/Gabor_filter\nimport numpy as np\nfrom cv2 import COLOR_BGR2GRAY, CV_8UC3, cvtColor, filter2D, imread, imshow, waitKey\n\n\ndef gabor_filter_kernel(\n    ksize: int, sigma: int, theta: int, lambd: int, gamma: int, psi: int\n) -> np.ndarray:\n    \"\"\"\n    :param ksize:   The kernelsize of the convolutional filter (ksize x ksize)\n    :param sigma:   standard deviation of the gaussian bell curve\n    :param theta:   The orientation of the normal to the parallel stripes\n                    of Gabor function.\n    :param lambd:   Wavelength of the sinusoidal component.\n    :param gamma:   The spatial aspect ratio and specifies the ellipticity\n                    of the support of Gabor function.\n    :param psi:     The phase offset of the sinusoidal function.\n\n    >>> gabor_filter_kernel(3, 8, 0, 10, 0, 0).tolist()\n    [[0.8027212023735046, 1.0, 0.8027212023735046], [0.8027212023735046, 1.0, \\\n0.8027212023735046], [0.8027212023735046, 1.0, 0.8027212023735046]]\n\n    \"\"\"\n\n    # prepare kernel\n    # the kernel size have to be odd\n    if (ksize % 2) == 0:\n        ksize = ksize + 1\n    gabor = np.zeros((ksize, ksize), dtype=np.float32)\n\n    # each value\n    for y in range(ksize):\n        for x in range(ksize):\n            # distance from center\n            px = x - ksize // 2\n            py = y - ksize // 2\n\n            # degree to radiant\n            _theta = theta / 180 * np.pi\n            cos_theta = np.cos(_theta)\n            sin_theta = np.sin(_theta)\n\n            # get kernel x\n            _x = cos_theta * px + sin_theta * py\n\n            # get kernel y\n            _y = -sin_theta * px + cos_theta * py\n\n            # fill kernel\n            gabor[y, x] = np.exp(-(_x**2 + gamma**2 * _y**2) / (2 * sigma**2)) * np.cos(\n                2 * np.pi * _x / lambd + psi\n            )\n\n    return gabor\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    # read original image\n    img = imread(\"../image_data/lena.jpg\")\n    # turn image in gray scale value\n    gray = cvtColor(img, COLOR_BGR2GRAY)\n\n    # Apply multiple Kernel to detect edges\n    out = np.zeros(gray.shape[:2])\n    for theta in [0, 30, 60, 90, 120, 150]:\n        \"\"\"\n        ksize = 10\n        sigma = 8\n        lambd = 10\n        gamma = 0\n        psi = 0\n        \"\"\"\n        kernel_10 = gabor_filter_kernel(10, 8, theta, 10, 0, 0)\n        out += filter2D(gray, CV_8UC3, kernel_10)\n    out = out / out.max() * 255\n    out = out.astype(np.uint8)\n\n    imshow(\"Original\", gray)\n    imshow(\"Gabor filter with 20x20 mask and 6 directions\", out)\n\n    waitKey(0)\n"
  },
  {
    "path": "digital_image_processing/filters/gaussian_filter.py",
    "content": "\"\"\"\nImplementation of gaussian filter algorithm\n\"\"\"\n\nfrom itertools import product\n\nfrom cv2 import COLOR_BGR2GRAY, cvtColor, imread, imshow, waitKey\nfrom numpy import dot, exp, mgrid, pi, ravel, square, uint8, zeros\n\n\ndef gen_gaussian_kernel(k_size, sigma):\n    center = k_size // 2\n    x, y = mgrid[0 - center : k_size - center, 0 - center : k_size - center]\n    g = 1 / (2 * pi * sigma) * exp(-(square(x) + square(y)) / (2 * square(sigma)))\n    return g\n\n\ndef gaussian_filter(image, k_size, sigma):\n    height, width = image.shape[0], image.shape[1]\n    # dst image height and width\n    dst_height = height - k_size + 1\n    dst_width = width - k_size + 1\n\n    # im2col, turn the k_size*k_size pixels into a row and np.vstack all rows\n    image_array = zeros((dst_height * dst_width, k_size * k_size))\n    for row, (i, j) in enumerate(product(range(dst_height), range(dst_width))):\n        window = ravel(image[i : i + k_size, j : j + k_size])\n        image_array[row, :] = window\n\n    #  turn the kernel into shape(k*k, 1)\n    gaussian_kernel = gen_gaussian_kernel(k_size, sigma)\n    filter_array = ravel(gaussian_kernel)\n\n    # reshape and get the dst image\n    dst = dot(image_array, filter_array).reshape(dst_height, dst_width).astype(uint8)\n\n    return dst\n\n\nif __name__ == \"__main__\":\n    # read original image\n    img = imread(r\"../image_data/lena.jpg\")\n    # turn image in gray scale value\n    gray = cvtColor(img, COLOR_BGR2GRAY)\n\n    # get values with two different mask size\n    gaussian3x3 = gaussian_filter(gray, 3, sigma=1)\n    gaussian5x5 = gaussian_filter(gray, 5, sigma=0.8)\n\n    # show result images\n    imshow(\"gaussian filter with 3x3 mask\", gaussian3x3)\n    imshow(\"gaussian filter with 5x5 mask\", gaussian5x5)\n    waitKey()\n"
  },
  {
    "path": "digital_image_processing/filters/laplacian_filter.py",
    "content": "# @Author  : ojas-wani\n# @File    : laplacian_filter.py\n# @Date    : 10/04/2023\n\nimport numpy as np\nfrom cv2 import (\n    BORDER_DEFAULT,\n    COLOR_BGR2GRAY,\n    CV_64F,\n    cvtColor,\n    filter2D,\n    imread,\n    imshow,\n    waitKey,\n)\n\nfrom digital_image_processing.filters.gaussian_filter import gaussian_filter\n\n\ndef my_laplacian(src: np.ndarray, ksize: int) -> np.ndarray:\n    \"\"\"\n    :param src: the source image, which should be a grayscale or color image.\n    :param ksize: the size of the kernel used to compute the Laplacian filter,\n                  which can be 1, 3, 5, or 7.\n\n    >>> my_laplacian(src=np.array([]), ksize=0)\n    Traceback (most recent call last):\n        ...\n    ValueError: ksize must be in (1, 3, 5, 7)\n    \"\"\"\n    kernels = {\n        1: np.array([[0, -1, 0], [-1, 4, -1], [0, -1, 0]]),\n        3: np.array([[0, 1, 0], [1, -4, 1], [0, 1, 0]]),\n        5: np.array(\n            [\n                [0, 0, -1, 0, 0],\n                [0, -1, -2, -1, 0],\n                [-1, -2, 16, -2, -1],\n                [0, -1, -2, -1, 0],\n                [0, 0, -1, 0, 0],\n            ]\n        ),\n        7: np.array(\n            [\n                [0, 0, 0, -1, 0, 0, 0],\n                [0, 0, -2, -3, -2, 0, 0],\n                [0, -2, -7, -10, -7, -2, 0],\n                [-1, -3, -10, 68, -10, -3, -1],\n                [0, -2, -7, -10, -7, -2, 0],\n                [0, 0, -2, -3, -2, 0, 0],\n                [0, 0, 0, -1, 0, 0, 0],\n            ]\n        ),\n    }\n    if ksize not in kernels:\n        msg = f\"ksize must be in {tuple(kernels)}\"\n        raise ValueError(msg)\n\n    # Apply the Laplacian kernel using convolution\n    return filter2D(\n        src, CV_64F, kernels[ksize], 0, borderType=BORDER_DEFAULT, anchor=(0, 0)\n    )\n\n\nif __name__ == \"__main__\":\n    # read original image\n    img = imread(r\"../image_data/lena.jpg\")\n\n    # turn image in gray scale value\n    gray = cvtColor(img, COLOR_BGR2GRAY)\n\n    # Applying gaussian filter\n    blur_image = gaussian_filter(gray, 3, sigma=1)\n\n    # Apply multiple Kernel to detect edges\n    laplacian_image = my_laplacian(ksize=3, src=blur_image)\n\n    imshow(\"Original image\", img)\n    imshow(\"Detected edges using laplacian filter\", laplacian_image)\n\n    waitKey(0)\n"
  },
  {
    "path": "digital_image_processing/filters/local_binary_pattern.py",
    "content": "import cv2\nimport numpy as np\n\n\ndef get_neighbors_pixel(\n    image: np.ndarray, x_coordinate: int, y_coordinate: int, center: int\n) -> int:\n    \"\"\"\n    Comparing local neighborhood pixel value with threshold value of centre pixel.\n    Exception is required when neighborhood value of a center pixel value is null.\n    i.e. values present at boundaries.\n\n    :param image: The image we're working with\n    :param x_coordinate: x-coordinate of the  pixel\n    :param y_coordinate: The y coordinate of the pixel\n    :param center: center pixel value\n    :return: The value of the pixel is being returned.\n    \"\"\"\n\n    try:\n        return int(image[x_coordinate][y_coordinate] >= center)\n    except (IndexError, TypeError):\n        return 0\n\n\ndef local_binary_value(image: np.ndarray, x_coordinate: int, y_coordinate: int) -> int:\n    \"\"\"\n    It takes an image, an x and y coordinate, and returns the\n    decimal value of the local binary patternof the pixel\n    at that coordinate\n\n    :param image: the image to be processed\n    :param x_coordinate: x coordinate of the pixel\n    :param y_coordinate: the y coordinate of the pixel\n    :return: The decimal value of the binary value of the pixels\n    around the center pixel.\n    \"\"\"\n    center = image[x_coordinate][y_coordinate]\n    powers = [1, 2, 4, 8, 16, 32, 64, 128]\n\n    # skip get_neighbors_pixel if center is null\n    if center is None:\n        return 0\n\n    # Starting from the top right, assigning value to pixels clockwise\n    binary_values = [\n        get_neighbors_pixel(image, x_coordinate - 1, y_coordinate + 1, center),\n        get_neighbors_pixel(image, x_coordinate, y_coordinate + 1, center),\n        get_neighbors_pixel(image, x_coordinate - 1, y_coordinate, center),\n        get_neighbors_pixel(image, x_coordinate + 1, y_coordinate + 1, center),\n        get_neighbors_pixel(image, x_coordinate + 1, y_coordinate, center),\n        get_neighbors_pixel(image, x_coordinate + 1, y_coordinate - 1, center),\n        get_neighbors_pixel(image, x_coordinate, y_coordinate - 1, center),\n        get_neighbors_pixel(image, x_coordinate - 1, y_coordinate - 1, center),\n    ]\n\n    # Converting the binary value to decimal.\n    return sum(\n        binary_value * power for binary_value, power in zip(binary_values, powers)\n    )\n\n\nif __name__ == \"__main__\":\n    # Reading the image and converting it to grayscale.\n    image = cv2.imread(\n        \"digital_image_processing/image_data/lena.jpg\", cv2.IMREAD_GRAYSCALE\n    )\n\n    # Create a numpy array as the same height and width of read image\n    lbp_image = np.zeros((image.shape[0], image.shape[1]))\n\n    # Iterating through the image and calculating the\n    # local binary pattern value for each pixel.\n    for i in range(image.shape[0]):\n        for j in range(image.shape[1]):\n            lbp_image[i][j] = local_binary_value(image, i, j)\n\n    cv2.imshow(\"local binary pattern\", lbp_image)\n    cv2.waitKey(0)\n    cv2.destroyAllWindows()\n"
  },
  {
    "path": "digital_image_processing/filters/median_filter.py",
    "content": "\"\"\"\nImplementation of median filter algorithm\n\"\"\"\n\nfrom cv2 import COLOR_BGR2GRAY, cvtColor, imread, imshow, waitKey\nfrom numpy import divide, int8, multiply, ravel, sort, zeros_like\n\n\ndef median_filter(gray_img, mask=3):\n    \"\"\"\n    :param gray_img: gray image\n    :param mask: mask size\n    :return: image with median filter\n    \"\"\"\n    # set image borders\n    bd = int(mask / 2)\n    # copy image size\n    median_img = zeros_like(gray_img)\n    for i in range(bd, gray_img.shape[0] - bd):\n        for j in range(bd, gray_img.shape[1] - bd):\n            # get mask according with mask\n            kernel = ravel(gray_img[i - bd : i + bd + 1, j - bd : j + bd + 1])\n            # calculate mask median\n            median = sort(kernel)[int8(divide((multiply(mask, mask)), 2) + 1)]\n            median_img[i, j] = median\n    return median_img\n\n\nif __name__ == \"__main__\":\n    # read original image\n    img = imread(\"../image_data/lena.jpg\")\n    # turn image in gray scale value\n    gray = cvtColor(img, COLOR_BGR2GRAY)\n\n    # get values with two different mask size\n    median3x3 = median_filter(gray, 3)\n    median5x5 = median_filter(gray, 5)\n\n    # show result images\n    imshow(\"median filter with 3x3 mask\", median3x3)\n    imshow(\"median filter with 5x5 mask\", median5x5)\n    waitKey(0)\n"
  },
  {
    "path": "digital_image_processing/filters/sobel_filter.py",
    "content": "# @Author  : lightXu\n# @File    : sobel_filter.py\n# @Time    : 2019/7/8 0008 下午 16:26\nimport numpy as np\nfrom cv2 import COLOR_BGR2GRAY, cvtColor, imread, imshow, waitKey\n\nfrom digital_image_processing.filters.convolve import img_convolve\n\n\ndef sobel_filter(image):\n    kernel_x = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]])\n    kernel_y = np.array([[1, 2, 1], [0, 0, 0], [-1, -2, -1]])\n\n    dst_x = np.abs(img_convolve(image, kernel_x))\n    dst_y = np.abs(img_convolve(image, kernel_y))\n    # modify the pix within [0, 255]\n    dst_x = dst_x * 255 / np.max(dst_x)\n    dst_y = dst_y * 255 / np.max(dst_y)\n\n    dst_xy = np.sqrt((np.square(dst_x)) + (np.square(dst_y)))\n    dst_xy = dst_xy * 255 / np.max(dst_xy)\n    dst = dst_xy.astype(np.uint8)\n\n    theta = np.arctan2(dst_y, dst_x)\n    return dst, theta\n\n\nif __name__ == \"__main__\":\n    # read original image\n    img = imread(\"../image_data/lena.jpg\")\n    # turn image in gray scale value\n    gray = cvtColor(img, COLOR_BGR2GRAY)\n\n    sobel_grad, sobel_theta = sobel_filter(gray)\n\n    # show result images\n    imshow(\"sobel filter\", sobel_grad)\n    imshow(\"sobel theta\", sobel_theta)\n    waitKey(0)\n"
  },
  {
    "path": "digital_image_processing/histogram_equalization/__init__.py",
    "content": ""
  },
  {
    "path": "digital_image_processing/histogram_equalization/histogram_stretch.py",
    "content": "\"\"\"\nCreated on Fri Sep 28 15:22:29 2018\n\n@author: Binish125\n\"\"\"\n\nimport copy\nimport os\n\nimport cv2\nimport numpy as np\nfrom matplotlib import pyplot as plt\n\n\nclass ConstantStretch:\n    def __init__(self):\n        self.img = \"\"\n        self.original_image = \"\"\n        self.last_list = []\n        self.rem = 0\n        self.L = 256\n        self.sk = 0\n        self.k = 0\n        self.number_of_rows = 0\n        self.number_of_cols = 0\n\n    def stretch(self, input_image):\n        self.img = cv2.imread(input_image, 0)\n        self.original_image = copy.deepcopy(self.img)\n        x, _, _ = plt.hist(self.img.ravel(), 256, [0, 256], label=\"x\")\n        self.k = np.sum(x)\n        for i in range(len(x)):\n            prk = x[i] / self.k\n            self.sk += prk\n            last = (self.L - 1) * self.sk\n            if self.rem != 0:\n                self.rem = int(last % last)\n            last = int(last + 1 if self.rem >= 0.5 else last)\n            self.last_list.append(last)\n            self.number_of_rows = int(np.ma.count(self.img) / self.img[1].size)\n            self.number_of_cols = self.img[1].size\n        for i in range(self.number_of_cols):\n            for j in range(self.number_of_rows):\n                num = self.img[j][i]\n                if num != self.last_list[num]:\n                    self.img[j][i] = self.last_list[num]\n        cv2.imwrite(\"output_data/output.jpg\", self.img)\n\n    def plot_histogram(self):\n        plt.hist(self.img.ravel(), 256, [0, 256])\n\n    def show_image(self):\n        cv2.imshow(\"Output-Image\", self.img)\n        cv2.imshow(\"Input-Image\", self.original_image)\n        cv2.waitKey(5000)\n        cv2.destroyAllWindows()\n\n\nif __name__ == \"__main__\":\n    file_path = os.path.join(os.path.basename(__file__), \"image_data/input.jpg\")\n    stretcher = ConstantStretch()\n    stretcher.stretch(file_path)\n    stretcher.plot_histogram()\n    stretcher.show_image()\n"
  },
  {
    "path": "digital_image_processing/histogram_equalization/image_data/__init__.py",
    "content": ""
  },
  {
    "path": "digital_image_processing/histogram_equalization/output_data/__init__.py",
    "content": ""
  },
  {
    "path": "digital_image_processing/image_data/__init__.py",
    "content": ""
  },
  {
    "path": "digital_image_processing/index_calculation.py",
    "content": "# Author: João Gustavo A. Amorim\n# Author email: joaogustavoamorim@gmail.com\n# Coding date:  jan 2019\n# python/black: True\n\n# Imports\nimport numpy as np\n\n\n# Class implemented to calculus the index\nclass IndexCalculation:\n    \"\"\"\n    # Class Summary\n            This algorithm consists in calculating vegetation indices, these\n        indices can be used for precision agriculture for example (or remote\n        sensing). There are functions to define the data and to calculate the\n        implemented indices.\n\n    # Vegetation index\n        https://en.wikipedia.org/wiki/Vegetation_Index\n        A Vegetation Index (VI) is a spectral transformation of two or more bands\n        designed to enhance the contribution of vegetation properties and allow\n        reliable spatial and temporal inter-comparisons of terrestrial\n        photosynthetic activity and canopy structural variations\n\n    # Information about channels (Wavelength range for each)\n        * nir - near-infrared\n            https://www.malvernpanalytical.com/br/products/technology/near-infrared-spectroscopy\n            Wavelength Range 700 nm to 2500 nm\n        * Red Edge\n            https://en.wikipedia.org/wiki/Red_edge\n            Wavelength Range 680 nm to 730 nm\n        * red\n            https://en.wikipedia.org/wiki/Color\n            Wavelength Range 635 nm to 700 nm\n        * blue\n            https://en.wikipedia.org/wiki/Color\n            Wavelength Range 450 nm to 490 nm\n        * green\n            https://en.wikipedia.org/wiki/Color\n            Wavelength Range 520 nm to 560 nm\n\n\n    # Implemented index list\n            #\"abbreviationOfIndexName\" -- list of channels used\n\n            #\"ARVI2\"            --  red, nir\n            #\"CCCI\"             --  red, redEdge, nir\n            #\"CVI\"              --  red, green, nir\n            #\"GLI\"              --  red, green, blue\n            #\"NDVI\"             --  red, nir\n            #\"BNDVI\"            --  blue, nir\n            #\"redEdgeNDVI\"      --  red, redEdge\n            #\"GNDVI\"            --  green, nir\n            #\"GBNDVI\"           --  green, blue, nir\n            #\"GRNDVI\"           --  red, green, nir\n            #\"RBNDVI\"           --  red, blue, nir\n            #\"PNDVI\"            --  red, green, blue, nir\n            #\"ATSAVI\"           --  red, nir\n            #\"BWDRVI\"           --  blue, nir\n            #\"CIgreen\"          --  green, nir\n            #\"CIrededge\"        --  redEdge, nir\n            #\"CI\"               --  red, blue\n            #\"CTVI\"             --  red, nir\n            #\"GDVI\"             --  green, nir\n            #\"EVI\"              --  red, blue, nir\n            #\"GEMI\"             --  red, nir\n            #\"GOSAVI\"           --  green, nir\n            #\"GSAVI\"            --  green, nir\n            #\"Hue\"              --  red, green, blue\n            #\"IVI\"              --  red, nir\n            #\"IPVI\"             --  red, nir\n            #\"I\"                --  red, green, blue\n            #\"RVI\"              --  red, nir\n            #\"MRVI\"             --  red, nir\n            #\"MSAVI\"            --  red, nir\n            #\"NormG\"            --  red, green, nir\n            #\"NormNIR\"          --  red, green, nir\n            #\"NormR\"            --  red, green, nir\n            #\"NGRDI\"            --  red, green\n            #\"RI\"               --  red, green\n            #\"S\"                --  red, green, blue\n            #\"IF\"               --  red, green, blue\n            #\"DVI\"              --  red, nir\n            #\"TVI\"              --  red, nir\n            #\"NDRE\"               --  redEdge, nir\n\n    #list of all index implemented\n        #allIndex = [\"ARVI2\", \"CCCI\", \"CVI\", \"GLI\", \"NDVI\", \"BNDVI\", \"redEdgeNDVI\",\n                    \"GNDVI\", \"GBNDVI\", \"GRNDVI\", \"RBNDVI\", \"PNDVI\", \"ATSAVI\",\n                    \"BWDRVI\", \"CIgreen\", \"CIrededge\", \"CI\", \"CTVI\", \"GDVI\", \"EVI\",\n                    \"GEMI\", \"GOSAVI\", \"GSAVI\", \"Hue\", \"IVI\", \"IPVI\", \"I\", \"RVI\",\n                    \"MRVI\", \"MSAVI\", \"NormG\", \"NormNIR\", \"NormR\", \"NGRDI\", \"RI\",\n                    \"S\", \"IF\", \"DVI\", \"TVI\", \"NDRE\"]\n\n    #list of index with not blue channel\n        #notBlueIndex = [\"ARVI2\", \"CCCI\", \"CVI\", \"NDVI\", \"redEdgeNDVI\", \"GNDVI\",\n                         \"GRNDVI\", \"ATSAVI\", \"CIgreen\", \"CIrededge\", \"CTVI\", \"GDVI\",\n                         \"GEMI\", \"GOSAVI\", \"GSAVI\", \"IVI\", \"IPVI\", \"RVI\", \"MRVI\",\n                         \"MSAVI\", \"NormG\", \"NormNIR\", \"NormR\", \"NGRDI\", \"RI\", \"DVI\",\n                         \"TVI\", \"NDRE\"]\n\n    #list of index just with RGB channels\n        #RGBIndex = [\"GLI\", \"CI\", \"Hue\", \"I\", \"NGRDI\", \"RI\", \"S\", \"IF\"]\n    \"\"\"\n\n    def __init__(self, red=None, green=None, blue=None, red_edge=None, nir=None):\n        self.set_matricies(red=red, green=green, blue=blue, red_edge=red_edge, nir=nir)\n\n    def set_matricies(self, red=None, green=None, blue=None, red_edge=None, nir=None):\n        if red is not None:\n            self.red = red\n        if green is not None:\n            self.green = green\n        if blue is not None:\n            self.blue = blue\n        if red_edge is not None:\n            self.redEdge = red_edge\n        if nir is not None:\n            self.nir = nir\n        return True\n\n    def calculation(\n        self, index=\"\", red=None, green=None, blue=None, red_edge=None, nir=None\n    ):\n        \"\"\"\n        performs the calculation of the index with the values instantiated in the class\n        :str index: abbreviation of index name to perform\n        \"\"\"\n        self.set_matricies(red=red, green=green, blue=blue, red_edge=red_edge, nir=nir)\n        funcs = {\n            \"ARVI2\": self.arv12,\n            \"CCCI\": self.ccci,\n            \"CVI\": self.cvi,\n            \"GLI\": self.gli,\n            \"NDVI\": self.ndvi,\n            \"BNDVI\": self.bndvi,\n            \"redEdgeNDVI\": self.red_edge_ndvi,\n            \"GNDVI\": self.gndvi,\n            \"GBNDVI\": self.gbndvi,\n            \"GRNDVI\": self.grndvi,\n            \"RBNDVI\": self.rbndvi,\n            \"PNDVI\": self.pndvi,\n            \"ATSAVI\": self.atsavi,\n            \"BWDRVI\": self.bwdrvi,\n            \"CIgreen\": self.ci_green,\n            \"CIrededge\": self.ci_rededge,\n            \"CI\": self.ci,\n            \"CTVI\": self.ctvi,\n            \"GDVI\": self.gdvi,\n            \"EVI\": self.evi,\n            \"GEMI\": self.gemi,\n            \"GOSAVI\": self.gosavi,\n            \"GSAVI\": self.gsavi,\n            \"Hue\": self.hue,\n            \"IVI\": self.ivi,\n            \"IPVI\": self.ipvi,\n            \"I\": self.i,\n            \"RVI\": self.rvi,\n            \"MRVI\": self.mrvi,\n            \"MSAVI\": self.m_savi,\n            \"NormG\": self.norm_g,\n            \"NormNIR\": self.norm_nir,\n            \"NormR\": self.norm_r,\n            \"NGRDI\": self.ngrdi,\n            \"RI\": self.ri,\n            \"S\": self.s,\n            \"IF\": self._if,\n            \"DVI\": self.dvi,\n            \"TVI\": self.tvi,\n            \"NDRE\": self.ndre,\n        }\n\n        try:\n            return funcs[index]()\n        except KeyError:\n            print(\"Index not in the list!\")\n            return False\n\n    def arv12(self):\n        \"\"\"\n        Atmospherically Resistant Vegetation Index 2\n        https://www.indexdatabase.de/db/i-single.php?id=396\n        :return: index\n            -0.18+1.17*(self.nir-self.red)/(self.nir+self.red)\n        \"\"\"\n        return -0.18 + (1.17 * ((self.nir - self.red) / (self.nir + self.red)))\n\n    def ccci(self):\n        \"\"\"\n        Canopy Chlorophyll Content Index\n        https://www.indexdatabase.de/db/i-single.php?id=224\n        :return: index\n        \"\"\"\n        return ((self.nir - self.redEdge) / (self.nir + self.redEdge)) / (\n            (self.nir - self.red) / (self.nir + self.red)\n        )\n\n    def cvi(self):\n        \"\"\"\n        Chlorophyll vegetation index\n        https://www.indexdatabase.de/db/i-single.php?id=391\n        :return: index\n        \"\"\"\n        return self.nir * (self.red / (self.green**2))\n\n    def gli(self):\n        \"\"\"\n        self.green leaf index\n        https://www.indexdatabase.de/db/i-single.php?id=375\n        :return: index\n        \"\"\"\n        return (2 * self.green - self.red - self.blue) / (\n            2 * self.green + self.red + self.blue\n        )\n\n    def ndvi(self):\n        \"\"\"\n        Normalized Difference self.nir/self.red Normalized Difference Vegetation\n        Index, Calibrated NDVI - CDVI\n        https://www.indexdatabase.de/db/i-single.php?id=58\n        :return: index\n        \"\"\"\n        return (self.nir - self.red) / (self.nir + self.red)\n\n    def bndvi(self):\n        \"\"\"\n            Normalized Difference self.nir/self.blue self.blue-normalized difference\n        vegetation index\n        https://www.indexdatabase.de/db/i-single.php?id=135\n        :return: index\n        \"\"\"\n        return (self.nir - self.blue) / (self.nir + self.blue)\n\n    def red_edge_ndvi(self):\n        \"\"\"\n        Normalized Difference self.rededge/self.red\n        https://www.indexdatabase.de/db/i-single.php?id=235\n        :return: index\n        \"\"\"\n        return (self.redEdge - self.red) / (self.redEdge + self.red)\n\n    def gndvi(self):\n        \"\"\"\n        Normalized Difference self.nir/self.green self.green NDVI\n        https://www.indexdatabase.de/db/i-single.php?id=401\n        :return: index\n        \"\"\"\n        return (self.nir - self.green) / (self.nir + self.green)\n\n    def gbndvi(self):\n        \"\"\"\n        self.green-self.blue NDVI\n        https://www.indexdatabase.de/db/i-single.php?id=186\n        :return: index\n        \"\"\"\n        return (self.nir - (self.green + self.blue)) / (\n            self.nir + (self.green + self.blue)\n        )\n\n    def grndvi(self):\n        \"\"\"\n        self.green-self.red NDVI\n        https://www.indexdatabase.de/db/i-single.php?id=185\n        :return: index\n        \"\"\"\n        return (self.nir - (self.green + self.red)) / (\n            self.nir + (self.green + self.red)\n        )\n\n    def rbndvi(self):\n        \"\"\"\n        self.red-self.blue NDVI\n        https://www.indexdatabase.de/db/i-single.php?id=187\n        :return: index\n        \"\"\"\n        return (self.nir - (self.blue + self.red)) / (self.nir + (self.blue + self.red))\n\n    def pndvi(self):\n        \"\"\"\n        Pan NDVI\n        https://www.indexdatabase.de/db/i-single.php?id=188\n        :return: index\n        \"\"\"\n        return (self.nir - (self.green + self.red + self.blue)) / (\n            self.nir + (self.green + self.red + self.blue)\n        )\n\n    def atsavi(self, x=0.08, a=1.22, b=0.03):\n        \"\"\"\n        Adjusted transformed soil-adjusted VI\n        https://www.indexdatabase.de/db/i-single.php?id=209\n        :return: index\n        \"\"\"\n        return a * (\n            (self.nir - a * self.red - b)\n            / (a * self.nir + self.red - a * b + x * (1 + a**2))\n        )\n\n    def bwdrvi(self):\n        \"\"\"\n        self.blue-wide dynamic range vegetation index\n        https://www.indexdatabase.de/db/i-single.php?id=136\n        :return: index\n        \"\"\"\n        return (0.1 * self.nir - self.blue) / (0.1 * self.nir + self.blue)\n\n    def ci_green(self):\n        \"\"\"\n        Chlorophyll Index self.green\n        https://www.indexdatabase.de/db/i-single.php?id=128\n        :return: index\n        \"\"\"\n        return (self.nir / self.green) - 1\n\n    def ci_rededge(self):\n        \"\"\"\n        Chlorophyll Index self.redEdge\n        https://www.indexdatabase.de/db/i-single.php?id=131\n        :return: index\n        \"\"\"\n        return (self.nir / self.redEdge) - 1\n\n    def ci(self):\n        \"\"\"\n        Coloration Index\n        https://www.indexdatabase.de/db/i-single.php?id=11\n        :return: index\n        \"\"\"\n        return (self.red - self.blue) / self.red\n\n    def ctvi(self):\n        \"\"\"\n        Corrected Transformed Vegetation Index\n        https://www.indexdatabase.de/db/i-single.php?id=244\n        :return: index\n        \"\"\"\n        ndvi = self.ndvi()\n        return ((ndvi + 0.5) / (abs(ndvi + 0.5))) * (abs(ndvi + 0.5) ** (1 / 2))\n\n    def gdvi(self):\n        \"\"\"\n        Difference self.nir/self.green self.green Difference Vegetation Index\n        https://www.indexdatabase.de/db/i-single.php?id=27\n        :return: index\n        \"\"\"\n        return self.nir - self.green\n\n    def evi(self):\n        \"\"\"\n        Enhanced Vegetation Index\n        https://www.indexdatabase.de/db/i-single.php?id=16\n        :return: index\n        \"\"\"\n        return 2.5 * (\n            (self.nir - self.red) / (self.nir + 6 * self.red - 7.5 * self.blue + 1)\n        )\n\n    def gemi(self):\n        \"\"\"\n        Global Environment Monitoring Index\n        https://www.indexdatabase.de/db/i-single.php?id=25\n        :return: index\n        \"\"\"\n        n = (2 * (self.nir**2 - self.red**2) + 1.5 * self.nir + 0.5 * self.red) / (\n            self.nir + self.red + 0.5\n        )\n        return n * (1 - 0.25 * n) - (self.red - 0.125) / (1 - self.red)\n\n    def gosavi(self, y=0.16):\n        \"\"\"\n        self.green Optimized Soil Adjusted Vegetation Index\n        https://www.indexdatabase.de/db/i-single.php?id=29\n        mit Y = 0,16\n        :return: index\n        \"\"\"\n        return (self.nir - self.green) / (self.nir + self.green + y)\n\n    def gsavi(self, n=0.5):\n        \"\"\"\n        self.green Soil Adjusted Vegetation Index\n        https://www.indexdatabase.de/db/i-single.php?id=31\n        mit N = 0,5\n        :return: index\n        \"\"\"\n        return ((self.nir - self.green) / (self.nir + self.green + n)) * (1 + n)\n\n    def hue(self):\n        \"\"\"\n        Hue\n        https://www.indexdatabase.de/db/i-single.php?id=34\n        :return: index\n        \"\"\"\n        return np.arctan(\n            ((2 * self.red - self.green - self.blue) / 30.5) * (self.green - self.blue)\n        )\n\n    def ivi(self, a=None, b=None):\n        \"\"\"\n        Ideal vegetation index\n        https://www.indexdatabase.de/db/i-single.php?id=276\n        b=intercept of vegetation line\n        a=soil line slope\n        :return: index\n        \"\"\"\n        return (self.nir - b) / (a * self.red)\n\n    def ipvi(self):\n        \"\"\"\n        Infraself.red percentage vegetation index\n        https://www.indexdatabase.de/db/i-single.php?id=35\n        :return: index\n        \"\"\"\n        return (self.nir / ((self.nir + self.red) / 2)) * (self.ndvi() + 1)\n\n    def i(self):\n        \"\"\"\n        Intensity\n        https://www.indexdatabase.de/db/i-single.php?id=36\n        :return: index\n        \"\"\"\n        return (self.red + self.green + self.blue) / 30.5\n\n    def rvi(self):\n        \"\"\"\n        Ratio-Vegetation-Index\n        http://www.seos-project.eu/modules/remotesensing/remotesensing-c03-s01-p01.html\n        :return: index\n        \"\"\"\n        return self.nir / self.red\n\n    def mrvi(self):\n        \"\"\"\n        Modified Normalized Difference Vegetation Index RVI\n        https://www.indexdatabase.de/db/i-single.php?id=275\n        :return: index\n        \"\"\"\n        return (self.rvi() - 1) / (self.rvi() + 1)\n\n    def m_savi(self):\n        \"\"\"\n        Modified Soil Adjusted Vegetation Index\n        https://www.indexdatabase.de/db/i-single.php?id=44\n        :return: index\n        \"\"\"\n        return (\n            (2 * self.nir + 1)\n            - ((2 * self.nir + 1) ** 2 - 8 * (self.nir - self.red)) ** (1 / 2)\n        ) / 2\n\n    def norm_g(self):\n        \"\"\"\n        Norm G\n        https://www.indexdatabase.de/db/i-single.php?id=50\n        :return: index\n        \"\"\"\n        return self.green / (self.nir + self.red + self.green)\n\n    def norm_nir(self):\n        \"\"\"\n        Norm self.nir\n        https://www.indexdatabase.de/db/i-single.php?id=51\n        :return: index\n        \"\"\"\n        return self.nir / (self.nir + self.red + self.green)\n\n    def norm_r(self):\n        \"\"\"\n        Norm R\n        https://www.indexdatabase.de/db/i-single.php?id=52\n        :return: index\n        \"\"\"\n        return self.red / (self.nir + self.red + self.green)\n\n    def ngrdi(self):\n        \"\"\"\n            Normalized Difference self.green/self.red Normalized self.green self.red\n        difference index, Visible Atmospherically Resistant Indices self.green\n        (VIself.green)\n        https://www.indexdatabase.de/db/i-single.php?id=390\n        :return: index\n        \"\"\"\n        return (self.green - self.red) / (self.green + self.red)\n\n    def ri(self):\n        \"\"\"\n        Normalized Difference self.red/self.green self.redness Index\n        https://www.indexdatabase.de/db/i-single.php?id=74\n        :return: index\n        \"\"\"\n        return (self.red - self.green) / (self.red + self.green)\n\n    def s(self):\n        \"\"\"\n        Saturation\n        https://www.indexdatabase.de/db/i-single.php?id=77\n        :return: index\n        \"\"\"\n        max_value = np.max([np.max(self.red), np.max(self.green), np.max(self.blue)])\n        min_value = np.min([np.min(self.red), np.min(self.green), np.min(self.blue)])\n        return (max_value - min_value) / max_value\n\n    def _if(self):\n        \"\"\"\n        Shape Index\n        https://www.indexdatabase.de/db/i-single.php?id=79\n        :return: index\n        \"\"\"\n        return (2 * self.red - self.green - self.blue) / (self.green - self.blue)\n\n    def dvi(self):\n        \"\"\"\n        Simple Ratio self.nir/self.red Difference Vegetation Index, Vegetation Index\n        Number (VIN)\n        https://www.indexdatabase.de/db/i-single.php?id=12\n        :return: index\n        \"\"\"\n        return self.nir / self.red\n\n    def tvi(self):\n        \"\"\"\n        Transformed Vegetation Index\n        https://www.indexdatabase.de/db/i-single.php?id=98\n        :return: index\n        \"\"\"\n        return (self.ndvi() + 0.5) ** (1 / 2)\n\n    def ndre(self):\n        return (self.nir - self.redEdge) / (self.nir + self.redEdge)\n\n\n\"\"\"\n# genering a random matrices to test this class\nred     = np.ones((1000,1000, 1),dtype=\"float64\") * 46787\ngreen   = np.ones((1000,1000, 1),dtype=\"float64\") * 23487\nblue    = np.ones((1000,1000, 1),dtype=\"float64\") * 14578\nredEdge = np.ones((1000,1000, 1),dtype=\"float64\") * 51045\nnir     = np.ones((1000,1000, 1),dtype=\"float64\") * 52200\n\n# Examples of how to use the class\n\n# instantiating the class\ncl = IndexCalculation()\n\n# instantiating the class with the values\n#cl = indexCalculation(red=red, green=green, blue=blue, redEdge=redEdge, nir=nir)\n\n# how set the values after instantiate the class cl, (for update the data or when don't\n# instantiating the class with the values)\ncl.setMatrices(red=red, green=green, blue=blue, redEdge=redEdge, nir=nir)\n\n# calculating the indices for the instantiated values in the class\n    # Note: the CCCI index can be changed to any index implemented in the class.\nindexValue_form1    = cl.calculation(\"CCCI\", red=red, green=green, blue=blue,\n                                     redEdge=redEdge, nir=nir).astype(np.float64)\nindexValue_form2    = cl.CCCI()\n\n# calculating the index with the values directly -- you can set just the values\n# preferred  note: the *calculation* function performs the function *setMatrices*\nindexValue_form3    = cl.calculation(\"CCCI\", red=red, green=green, blue=blue,\n                                     redEdge=redEdge, nir=nir).astype(np.float64)\n\nprint(\"Form 1: \"+np.array2string(indexValue_form1, precision=20, separator=', ',\n      floatmode='maxprec_equal'))\nprint(\"Form 2: \"+np.array2string(indexValue_form2, precision=20, separator=', ',\n      floatmode='maxprec_equal'))\nprint(\"Form 3: \"+np.array2string(indexValue_form3, precision=20, separator=', ',\n      floatmode='maxprec_equal'))\n\n# A list of examples results for different type of data at NDVI\n# float16 ->    0.31567383              #NDVI (red = 50, nir = 100)\n# float32 ->    0.31578946              #NDVI (red = 50, nir = 100)\n# float64 ->    0.3157894736842105      #NDVI (red = 50, nir = 100)\n# longdouble -> 0.3157894736842105      #NDVI (red = 50, nir = 100)\n\"\"\"\n"
  },
  {
    "path": "digital_image_processing/morphological_operations/__init__.py",
    "content": ""
  },
  {
    "path": "digital_image_processing/morphological_operations/dilation_operation.py",
    "content": "from pathlib import Path\r\n\r\nimport numpy as np\r\nfrom PIL import Image\r\n\r\n\r\ndef rgb_to_gray(rgb: np.ndarray) -> np.ndarray:\r\n    \"\"\"\r\n    Return gray image from rgb image\r\n    >>> rgb_to_gray(np.array([[[127, 255, 0]]]))\r\n    array([[187.6453]])\r\n    >>> rgb_to_gray(np.array([[[0, 0, 0]]]))\r\n    array([[0.]])\r\n    >>> rgb_to_gray(np.array([[[2, 4, 1]]]))\r\n    array([[3.0598]])\r\n    >>> rgb_to_gray(np.array([[[26, 255, 14], [5, 147, 20], [1, 200, 0]]]))\r\n    array([[159.0524,  90.0635, 117.6989]])\r\n    \"\"\"\r\n    r, g, b = rgb[:, :, 0], rgb[:, :, 1], rgb[:, :, 2]\r\n    return 0.2989 * r + 0.5870 * g + 0.1140 * b\r\n\r\n\r\ndef gray_to_binary(gray: np.ndarray) -> np.ndarray:\r\n    \"\"\"\r\n    Return binary image from gray image\r\n    >>> gray_to_binary(np.array([[127, 255, 0]]))\r\n    array([[False,  True, False]])\r\n    >>> gray_to_binary(np.array([[0]]))\r\n    array([[False]])\r\n    >>> gray_to_binary(np.array([[26.2409, 4.9315, 1.4729]]))\r\n    array([[False, False, False]])\r\n    >>> gray_to_binary(np.array([[26, 255, 14], [5, 147, 20], [1, 200, 0]]))\r\n    array([[False,  True, False],\r\n           [False,  True, False],\r\n           [False,  True, False]])\r\n    \"\"\"\r\n    return (gray > 127) & (gray <= 255)\r\n\r\n\r\ndef dilation(image: np.ndarray, kernel: np.ndarray) -> np.ndarray:\r\n    \"\"\"\r\n    Return dilated image\r\n    >>> dilation(np.array([[True, False, True]]), np.array([[0, 1, 0]]))\r\n    array([[False, False, False]])\r\n    >>> dilation(np.array([[False, False, True]]), np.array([[1, 0, 1]]))\r\n    array([[False, False, False]])\r\n    \"\"\"\r\n    output = np.zeros_like(image)\r\n    image_padded = np.zeros(\r\n        (image.shape[0] + kernel.shape[0] - 1, image.shape[1] + kernel.shape[1] - 1)\r\n    )\r\n\r\n    # Copy image to padded image\r\n    image_padded[kernel.shape[0] - 2 : -1 :, kernel.shape[1] - 2 : -1 :] = image\r\n\r\n    # Iterate over image & apply kernel\r\n    for x in range(image.shape[1]):\r\n        for y in range(image.shape[0]):\r\n            summation = (\r\n                kernel * image_padded[y : y + kernel.shape[0], x : x + kernel.shape[1]]\r\n            ).sum()\r\n            output[y, x] = int(summation > 0)\r\n    return output\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    # read original image\r\n    lena_path = Path(__file__).resolve().parent / \"image_data\" / \"lena.jpg\"\r\n    lena = np.array(Image.open(lena_path))\r\n    # kernel to be applied\r\n    structuring_element = np.array([[0, 1, 0], [1, 1, 1], [0, 1, 0]])\r\n    output = dilation(gray_to_binary(rgb_to_gray(lena)), structuring_element)\r\n    # Save the output image\r\n    pil_img = Image.fromarray(output).convert(\"RGB\")\r\n    pil_img.save(\"result_dilation.png\")\r\n"
  },
  {
    "path": "digital_image_processing/morphological_operations/erosion_operation.py",
    "content": "from pathlib import Path\r\n\r\nimport numpy as np\r\nfrom PIL import Image\r\n\r\n\r\ndef rgb_to_gray(rgb: np.ndarray) -> np.ndarray:\r\n    \"\"\"\r\n    Return gray image from rgb image\r\n\r\n    >>> rgb_to_gray(np.array([[[127, 255, 0]]]))\r\n    array([[187.6453]])\r\n    >>> rgb_to_gray(np.array([[[0, 0, 0]]]))\r\n    array([[0.]])\r\n    >>> rgb_to_gray(np.array([[[2, 4, 1]]]))\r\n    array([[3.0598]])\r\n    >>> rgb_to_gray(np.array([[[26, 255, 14], [5, 147, 20], [1, 200, 0]]]))\r\n    array([[159.0524,  90.0635, 117.6989]])\r\n    \"\"\"\r\n    r, g, b = rgb[:, :, 0], rgb[:, :, 1], rgb[:, :, 2]\r\n    return 0.2989 * r + 0.5870 * g + 0.1140 * b\r\n\r\n\r\ndef gray_to_binary(gray: np.ndarray) -> np.ndarray:\r\n    \"\"\"\r\n    Return binary image from gray image\r\n\r\n    >>> gray_to_binary(np.array([[127, 255, 0]]))\r\n    array([[False,  True, False]])\r\n    >>> gray_to_binary(np.array([[0]]))\r\n    array([[False]])\r\n    >>> gray_to_binary(np.array([[26.2409, 4.9315, 1.4729]]))\r\n    array([[False, False, False]])\r\n    >>> gray_to_binary(np.array([[26, 255, 14], [5, 147, 20], [1, 200, 0]]))\r\n    array([[False,  True, False],\r\n           [False,  True, False],\r\n           [False,  True, False]])\r\n    \"\"\"\r\n    return (gray > 127) & (gray <= 255)\r\n\r\n\r\ndef erosion(image: np.ndarray, kernel: np.ndarray) -> np.ndarray:\r\n    \"\"\"\r\n    Return eroded image\r\n\r\n    >>> erosion(np.array([[True, True, False]]), np.array([[0, 1, 0]]))\r\n    array([[False, False, False]])\r\n    >>> erosion(np.array([[True, False, False]]), np.array([[1, 1, 0]]))\r\n    array([[False, False, False]])\r\n    \"\"\"\r\n    output = np.zeros_like(image)\r\n    image_padded = np.zeros(\r\n        (image.shape[0] + kernel.shape[0] - 1, image.shape[1] + kernel.shape[1] - 1)\r\n    )\r\n\r\n    # Copy image to padded image\r\n    image_padded[kernel.shape[0] - 2 : -1 :, kernel.shape[1] - 2 : -1 :] = image\r\n\r\n    # Iterate over image & apply kernel\r\n    for x in range(image.shape[1]):\r\n        for y in range(image.shape[0]):\r\n            summation = (\r\n                kernel * image_padded[y : y + kernel.shape[0], x : x + kernel.shape[1]]\r\n            ).sum()\r\n            output[y, x] = int(summation == 5)\r\n    return output\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    # read original image\r\n    lena_path = Path(__file__).resolve().parent / \"image_data\" / \"lena.jpg\"\r\n    lena = np.array(Image.open(lena_path))\r\n\r\n    # kernel to be applied\r\n    structuring_element = np.array([[0, 1, 0], [1, 1, 1], [0, 1, 0]])\r\n\r\n    # Apply erosion operation to a binary image\r\n    output = erosion(gray_to_binary(rgb_to_gray(lena)), structuring_element)\r\n\r\n    # Save the output image\r\n    pil_img = Image.fromarray(output).convert(\"RGB\")\r\n    pil_img.save(\"result_erosion.png\")\r\n"
  },
  {
    "path": "digital_image_processing/resize/__init__.py",
    "content": ""
  },
  {
    "path": "digital_image_processing/resize/resize.py",
    "content": "\"\"\"Multiple image resizing techniques\"\"\"\n\nimport numpy as np\nfrom cv2 import destroyAllWindows, imread, imshow, waitKey\n\n\nclass NearestNeighbour:\n    \"\"\"\n    Simplest and fastest version of image resizing.\n    Source: https://en.wikipedia.org/wiki/Nearest-neighbor_interpolation\n    \"\"\"\n\n    def __init__(self, img, dst_width: int, dst_height: int):\n        if dst_width < 0 or dst_height < 0:\n            raise ValueError(\"Destination width/height should be > 0\")\n\n        self.img = img\n        self.src_w = img.shape[1]\n        self.src_h = img.shape[0]\n        self.dst_w = dst_width\n        self.dst_h = dst_height\n\n        self.ratio_x = self.src_w / self.dst_w\n        self.ratio_y = self.src_h / self.dst_h\n\n        self.output = self.output_img = (\n            np.ones((self.dst_h, self.dst_w, 3), np.uint8) * 255\n        )\n\n    def process(self):\n        for i in range(self.dst_h):\n            for j in range(self.dst_w):\n                self.output[i][j] = self.img[self.get_y(i)][self.get_x(j)]\n\n    def get_x(self, x: int) -> int:\n        \"\"\"\n        Get parent X coordinate for destination X\n        :param x: Destination X coordinate\n        :return: Parent X coordinate based on `x ratio`\n        >>> nn = NearestNeighbour(imread(\"digital_image_processing/image_data/lena.jpg\",\n        ...                              1), 100, 100)\n        >>> nn.ratio_x = 0.5\n        >>> nn.get_x(4)\n        2\n        \"\"\"\n        return int(self.ratio_x * x)\n\n    def get_y(self, y: int) -> int:\n        \"\"\"\n        Get parent Y coordinate for destination Y\n        :param y: Destination X coordinate\n        :return: Parent X coordinate based on `y ratio`\n        >>> nn = NearestNeighbour(imread(\"digital_image_processing/image_data/lena.jpg\",\n        ...                              1), 100, 100)\n        >>> nn.ratio_y = 0.5\n        >>> nn.get_y(4)\n        2\n        \"\"\"\n        return int(self.ratio_y * y)\n\n\nif __name__ == \"__main__\":\n    dst_w, dst_h = 800, 600\n    im = imread(\"image_data/lena.jpg\", 1)\n    n = NearestNeighbour(im, dst_w, dst_h)\n    n.process()\n\n    imshow(\n        f\"Image resized from: {im.shape[1]}x{im.shape[0]} to {dst_w}x{dst_h}\", n.output\n    )\n    waitKey(0)\n    destroyAllWindows()\n"
  },
  {
    "path": "digital_image_processing/rotation/__init__.py",
    "content": ""
  },
  {
    "path": "digital_image_processing/rotation/rotation.py",
    "content": "from pathlib import Path\n\nimport cv2\nimport numpy as np\nfrom matplotlib import pyplot as plt\n\n\ndef get_rotation(\n    img: np.ndarray, pt1: np.ndarray, pt2: np.ndarray, rows: int, cols: int\n) -> np.ndarray:\n    \"\"\"\n    Get image rotation\n    :param img: np.ndarray\n    :param pt1: 3x2 list\n    :param pt2: 3x2 list\n    :param rows: columns image shape\n    :param cols: rows image shape\n    :return: np.ndarray\n    \"\"\"\n    matrix = cv2.getAffineTransform(pt1, pt2)\n    return cv2.warpAffine(img, matrix, (rows, cols))\n\n\nif __name__ == \"__main__\":\n    # read original image\n    image = cv2.imread(\n        str(Path(__file__).resolve().parent.parent / \"image_data\" / \"lena.jpg\")\n    )\n    # turn image in gray scale value\n    gray_img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)\n    # get image shape\n    img_rows, img_cols = gray_img.shape\n\n    # set different points to rotate image\n    pts1 = np.array([[50, 50], [200, 50], [50, 200]], np.float32)\n    pts2 = np.array([[10, 100], [200, 50], [100, 250]], np.float32)\n    pts3 = np.array([[50, 50], [150, 50], [120, 200]], np.float32)\n    pts4 = np.array([[10, 100], [80, 50], [180, 250]], np.float32)\n\n    # add all rotated images in a list\n    images = [\n        gray_img,\n        get_rotation(gray_img, pts1, pts2, img_rows, img_cols),\n        get_rotation(gray_img, pts2, pts3, img_rows, img_cols),\n        get_rotation(gray_img, pts2, pts4, img_rows, img_cols),\n    ]\n\n    # plot different image rotations\n    fig = plt.figure(1)\n    titles = [\"Original\", \"Rotation 1\", \"Rotation 2\", \"Rotation 3\"]\n    for i, image in enumerate(images):\n        plt.subplot(2, 2, i + 1), plt.imshow(image, \"gray\")\n        plt.title(titles[i])\n        plt.axis(\"off\")\n        plt.subplots_adjust(left=0.0, bottom=0.05, right=1.0, top=0.95)\n    plt.show()\n"
  },
  {
    "path": "digital_image_processing/sepia.py",
    "content": "\"\"\"\nImplemented an algorithm using opencv to tone an image with sepia technique\n\"\"\"\n\nfrom cv2 import destroyAllWindows, imread, imshow, waitKey\n\n\ndef make_sepia(img, factor: int):\n    \"\"\"\n    Function create sepia tone.\n    Source: https://en.wikipedia.org/wiki/Sepia_(color)\n    \"\"\"\n    pixel_h, pixel_v = img.shape[0], img.shape[1]\n\n    def to_grayscale(blue, green, red):\n        \"\"\"\n        Helper function to create pixel's greyscale representation\n        Src: https://pl.wikipedia.org/wiki/YUV\n        \"\"\"\n        return 0.2126 * red + 0.587 * green + 0.114 * blue\n\n    def normalize(value):\n        \"\"\"Helper function to normalize R/G/B value -> return 255 if value > 255\"\"\"\n        return min(value, 255)\n\n    for i in range(pixel_h):\n        for j in range(pixel_v):\n            greyscale = int(to_grayscale(*img[i][j]))\n            img[i][j] = [\n                normalize(greyscale),\n                normalize(greyscale + factor),\n                normalize(greyscale + 2 * factor),\n            ]\n\n    return img\n\n\nif __name__ == \"__main__\":\n    # read original image\n    images = {\n        percentage: imread(\"image_data/lena.jpg\", 1) for percentage in (10, 20, 30, 40)\n    }\n\n    for percentage, img in images.items():\n        make_sepia(img, percentage)\n\n    for percentage, img in images.items():\n        imshow(f\"Original image with sepia (factor: {percentage})\", img)\n\n    waitKey(0)\n    destroyAllWindows()\n"
  },
  {
    "path": "digital_image_processing/test_digital_image_processing.py",
    "content": "\"\"\"\nPyTest's for Digital Image Processing\n\"\"\"\n\nimport numpy as np\nfrom cv2 import COLOR_BGR2GRAY, cvtColor, imread\nfrom numpy import array, uint8\nfrom PIL import Image\n\nfrom digital_image_processing import change_contrast as cc\nfrom digital_image_processing import convert_to_negative as cn\nfrom digital_image_processing import sepia as sp\nfrom digital_image_processing.dithering import burkes as bs\nfrom digital_image_processing.edge_detection import canny\nfrom digital_image_processing.filters import convolve as conv\nfrom digital_image_processing.filters import gaussian_filter as gg\nfrom digital_image_processing.filters import local_binary_pattern as lbp\nfrom digital_image_processing.filters import median_filter as med\nfrom digital_image_processing.filters import sobel_filter as sob\nfrom digital_image_processing.resize import resize as rs\n\nimg = imread(r\"digital_image_processing/image_data/lena_small.jpg\")\ngray = cvtColor(img, COLOR_BGR2GRAY)\n\n\n# Test: convert_to_negative()\ndef test_convert_to_negative():\n    negative_img = cn.convert_to_negative(img)\n    # assert negative_img array for at least one True\n    assert negative_img.any()\n\n\n# Test: change_contrast()\ndef test_change_contrast():\n    with Image.open(\"digital_image_processing/image_data/lena_small.jpg\") as img:\n        # Work around assertion for response\n        assert str(cc.change_contrast(img, 110)).startswith(\n            \"<PIL.Image.Image image mode=RGB size=100x100 at\"\n        )\n\n\n# canny.gen_gaussian_kernel()\ndef test_gen_gaussian_kernel():\n    resp = canny.gen_gaussian_kernel(9, sigma=1.4)\n    # Assert ambiguous array\n    assert resp.all()\n\n\n# canny.py\ndef test_canny():\n    canny_img = imread(\"digital_image_processing/image_data/lena_small.jpg\", 0)\n    # assert ambiguous array for all == True\n    assert canny_img.all()\n    canny_array = canny.canny(canny_img)\n    # assert canny array for at least one True\n    assert canny_array.any()\n\n\n# filters/gaussian_filter.py\ndef test_gen_gaussian_kernel_filter():\n    assert gg.gaussian_filter(gray, 5, sigma=0.9).all()\n\n\ndef test_convolve_filter():\n    # laplace diagonals\n    laplace = array([[0.25, 0.5, 0.25], [0.5, -3, 0.5], [0.25, 0.5, 0.25]])\n    res = conv.img_convolve(gray, laplace).astype(uint8)\n    assert res.any()\n\n\ndef test_median_filter():\n    assert med.median_filter(gray, 3).any()\n\n\ndef test_sobel_filter():\n    grad, theta = sob.sobel_filter(gray)\n    assert grad.any()\n    assert theta.any()\n\n\ndef test_sepia():\n    sepia = sp.make_sepia(img, 20)\n    assert sepia.all()\n\n\ndef test_burkes(file_path: str = \"digital_image_processing/image_data/lena_small.jpg\"):\n    burkes = bs.Burkes(imread(file_path, 1), 120)\n    burkes.process()\n    assert burkes.output_img.any()\n\n\ndef test_nearest_neighbour(\n    file_path: str = \"digital_image_processing/image_data/lena_small.jpg\",\n):\n    nn = rs.NearestNeighbour(imread(file_path, 1), 400, 200)\n    nn.process()\n    assert nn.output.any()\n\n\ndef test_local_binary_pattern():\n    # pull request 10161 before:\n    # \"digital_image_processing/image_data/lena.jpg\"\n    # after: \"digital_image_processing/image_data/lena_small.jpg\"\n\n    from os import getenv  # Speed up our Continuous Integration tests\n\n    file_name = \"lena_small.jpg\" if getenv(\"CI\") else \"lena.jpg\"\n    file_path = f\"digital_image_processing/image_data/{file_name}\"\n\n    # Reading the image and converting it to grayscale\n    image = imread(file_path, 0)\n\n    # Test for get_neighbors_pixel function() return not None\n    x_coordinate = 0\n    y_coordinate = 0\n    center = image[x_coordinate][y_coordinate]\n\n    neighbors_pixels = lbp.get_neighbors_pixel(\n        image, x_coordinate, y_coordinate, center\n    )\n\n    assert neighbors_pixels is not None\n\n    # Test for local_binary_pattern function()\n    # Create a numpy array as the same height and width of read image\n    lbp_image = np.zeros((image.shape[0], image.shape[1]))\n\n    # Iterating through the image and calculating the local binary pattern value\n    # for each pixel.\n    for i in range(image.shape[0]):\n        for j in range(image.shape[1]):\n            lbp_image[i][j] = lbp.local_binary_value(image, i, j)\n\n    assert lbp_image.any()\n"
  },
  {
    "path": "divide_and_conquer/__init__.py",
    "content": ""
  },
  {
    "path": "divide_and_conquer/closest_pair_of_points.py",
    "content": "\"\"\"\nThe algorithm finds distance between closest pair of points\nin the given n points.\nApproach used -> Divide and conquer\nThe points are sorted based on Xco-ords and\nthen based on Yco-ords separately.\nAnd by applying divide and conquer approach,\nminimum distance is obtained recursively.\n\n>> Closest points can lie on different sides of partition.\nThis case handled by forming a strip of points\nwhose Xco-ords distance is less than closest_pair_dis\nfrom mid-point's Xco-ords. Points sorted based on Yco-ords\nare used in this step to reduce sorting time.\nClosest pair distance is found in the strip of points. (closest_in_strip)\n\nmin(closest_pair_dis, closest_in_strip) would be the final answer.\n\nTime complexity: O(n * log n)\n\"\"\"\n\n\ndef euclidean_distance_sqr(point1, point2):\n    \"\"\"\n    >>> euclidean_distance_sqr([1,2],[2,4])\n    5\n    \"\"\"\n    return (point1[0] - point2[0]) ** 2 + (point1[1] - point2[1]) ** 2\n\n\ndef column_based_sort(array, column=0):\n    \"\"\"\n    >>> column_based_sort([(5, 1), (4, 2), (3, 0)], 1)\n    [(3, 0), (5, 1), (4, 2)]\n    \"\"\"\n    return sorted(array, key=lambda x: x[column])\n\n\ndef dis_between_closest_pair(points, points_counts, min_dis=float(\"inf\")):\n    \"\"\"\n    brute force approach to find distance between closest pair points\n\n    Parameters :\n    points, points_count, min_dis (list(tuple(int, int)), int, int)\n\n    Returns :\n    min_dis (float):  distance between closest pair of points\n\n    >>> dis_between_closest_pair([[1,2],[2,4],[5,7],[8,9],[11,0]],5)\n    5\n\n    \"\"\"\n\n    for i in range(points_counts - 1):\n        for j in range(i + 1, points_counts):\n            current_dis = euclidean_distance_sqr(points[i], points[j])\n            min_dis = min(min_dis, current_dis)\n    return min_dis\n\n\ndef dis_between_closest_in_strip(points, points_counts, min_dis=float(\"inf\")):\n    \"\"\"\n    closest pair of points in strip\n\n    Parameters :\n    points, points_count, min_dis (list(tuple(int, int)), int, int)\n\n    Returns :\n    min_dis (float):  distance btw closest pair of points in the strip (< min_dis)\n\n    >>> dis_between_closest_in_strip([[1,2],[2,4],[5,7],[8,9],[11,0]],5)\n    85\n    \"\"\"\n\n    for i in range(min(6, points_counts - 1), points_counts):\n        for j in range(max(0, i - 6), i):\n            current_dis = euclidean_distance_sqr(points[i], points[j])\n            min_dis = min(min_dis, current_dis)\n    return min_dis\n\n\ndef closest_pair_of_points_sqr(points_sorted_on_x, points_sorted_on_y, points_counts):\n    \"\"\"divide and conquer approach\n\n    Parameters :\n    points, points_count (list(tuple(int, int)), int)\n\n    Returns :\n    (float):  distance btw closest pair of points\n\n    >>> closest_pair_of_points_sqr([(1, 2), (3, 4)], [(5, 6), (7, 8)], 2)\n    8\n    \"\"\"\n\n    # base case\n    if points_counts <= 3:\n        return dis_between_closest_pair(points_sorted_on_x, points_counts)\n\n    # recursion\n    mid = points_counts // 2\n    closest_in_left = closest_pair_of_points_sqr(\n        points_sorted_on_x, points_sorted_on_y[:mid], mid\n    )\n    closest_in_right = closest_pair_of_points_sqr(\n        points_sorted_on_y, points_sorted_on_y[mid:], points_counts - mid\n    )\n    closest_pair_dis = min(closest_in_left, closest_in_right)\n\n    \"\"\"\n    cross_strip contains the points, whose Xcoords are at a\n    distance(< closest_pair_dis) from mid's Xcoord\n    \"\"\"\n\n    cross_strip = []\n    for point in points_sorted_on_x:\n        if abs(point[0] - points_sorted_on_x[mid][0]) < closest_pair_dis:\n            cross_strip.append(point)\n\n    closest_in_strip = dis_between_closest_in_strip(\n        cross_strip, len(cross_strip), closest_pair_dis\n    )\n    return min(closest_pair_dis, closest_in_strip)\n\n\ndef closest_pair_of_points(points, points_counts):\n    \"\"\"\n    >>> closest_pair_of_points([(2, 3), (12, 30)], len([(2, 3), (12, 30)]))\n    28.792360097775937\n    \"\"\"\n    points_sorted_on_x = column_based_sort(points, column=0)\n    points_sorted_on_y = column_based_sort(points, column=1)\n    return (\n        closest_pair_of_points_sqr(\n            points_sorted_on_x, points_sorted_on_y, points_counts\n        )\n    ) ** 0.5\n\n\nif __name__ == \"__main__\":\n    points = [(2, 3), (12, 30), (40, 50), (5, 1), (12, 10), (3, 4)]\n    print(\"Distance:\", closest_pair_of_points(points, len(points)))\n"
  },
  {
    "path": "divide_and_conquer/convex_hull.py",
    "content": "\"\"\"\nThe convex hull problem is problem of finding all the vertices of convex polygon, P of\na set of points in a plane such that all the points are either on the vertices of P or\ninside P. TH convex hull problem has several applications in geometrical problems,\ncomputer graphics and game development.\n\nTwo algorithms have been implemented for the convex hull problem here.\n1. A brute-force algorithm which runs in O(n^3)\n2. A divide-and-conquer algorithm which runs in O(n log(n))\n\nThere are other several other algorithms for the convex hull problem\nwhich have not been implemented here, yet.\n\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections.abc import Iterable\n\n\nclass Point:\n    \"\"\"\n    Defines a 2-d point for use by all convex-hull algorithms.\n\n    Parameters\n    ----------\n    x: an int or a float, the x-coordinate of the 2-d point\n    y: an int or a float, the y-coordinate of the 2-d point\n\n    Examples\n    --------\n    >>> Point(1, 2)\n    (1.0, 2.0)\n    >>> Point(\"1\", \"2\")\n    (1.0, 2.0)\n    >>> Point(1, 2) > Point(0, 1)\n    True\n    >>> Point(1, 1) == Point(1, 1)\n    True\n    >>> Point(-0.5, 1) == Point(0.5, 1)\n    False\n    >>> Point(\"pi\", \"e\")\n    Traceback (most recent call last):\n        ...\n    ValueError: could not convert string to float: 'pi'\n    \"\"\"\n\n    def __init__(self, x, y):\n        self.x, self.y = float(x), float(y)\n\n    def __eq__(self, other):\n        return self.x == other.x and self.y == other.y\n\n    def __ne__(self, other):\n        return not self == other\n\n    def __gt__(self, other):\n        if self.x > other.x:\n            return True\n        elif self.x == other.x:\n            return self.y > other.y\n        return False\n\n    def __lt__(self, other):\n        return not self > other\n\n    def __ge__(self, other):\n        if self.x > other.x:\n            return True\n        elif self.x == other.x:\n            return self.y >= other.y\n        return False\n\n    def __le__(self, other):\n        if self.x < other.x:\n            return True\n        elif self.x == other.x:\n            return self.y <= other.y\n        return False\n\n    def __repr__(self):\n        return f\"({self.x}, {self.y})\"\n\n    def __hash__(self):\n        return hash(self.x)\n\n\ndef _construct_points(\n    list_of_tuples: list[Point] | list[list[float]] | Iterable[list[float]],\n) -> list[Point]:\n    \"\"\"\n    constructs a list of points from an array-like object of numbers\n\n    Arguments\n    ---------\n\n    list_of_tuples: array-like object of type numbers. Acceptable types so far\n    are lists, tuples and sets.\n\n    Returns\n    --------\n    points: a list where each item is of type Point. This contains only objects\n    which can be converted into a Point.\n\n    Examples\n    -------\n    >>> _construct_points([[1, 1], [2, -1], [0.3, 4]])\n    [(1.0, 1.0), (2.0, -1.0), (0.3, 4.0)]\n    >>> _construct_points([1, 2])\n    Ignoring deformed point 1. All points must have at least 2 coordinates.\n    Ignoring deformed point 2. All points must have at least 2 coordinates.\n    []\n    >>> _construct_points([])\n    []\n    >>> _construct_points(None)\n    []\n    \"\"\"\n\n    points: list[Point] = []\n    if list_of_tuples:\n        for p in list_of_tuples:\n            if isinstance(p, Point):\n                points.append(p)\n            else:\n                try:\n                    points.append(Point(p[0], p[1]))\n                except (IndexError, TypeError):\n                    print(\n                        f\"Ignoring deformed point {p}. All points\"\n                        \" must have at least 2 coordinates.\"\n                    )\n    return points\n\n\ndef _validate_input(points: list[Point] | list[list[float]]) -> list[Point]:\n    \"\"\"\n    validates an input instance before a convex-hull algorithms uses it\n\n    Parameters\n    ---------\n    points: array-like, the 2d points to validate before using with\n    a convex-hull algorithm. The elements of points must be either lists, tuples or\n    Points.\n\n    Returns\n    -------\n    points: array_like, an iterable of all well-defined Points constructed passed in.\n\n\n    Exception\n    ---------\n    ValueError: if points is empty or None, or if a wrong data structure like a scalar\n                 is passed\n\n    TypeError: if an iterable but non-indexable object (eg. dictionary) is passed.\n                The exception to this a set which we'll convert to a list before using\n\n\n    Examples\n    -------\n    >>> _validate_input([[1, 2]])\n    [(1.0, 2.0)]\n    >>> _validate_input([(1, 2)])\n    [(1.0, 2.0)]\n    >>> _validate_input([Point(2, 1), Point(-1, 2)])\n    [(2.0, 1.0), (-1.0, 2.0)]\n    >>> _validate_input([])\n    Traceback (most recent call last):\n        ...\n    ValueError: Expecting a list of points but got []\n    >>> _validate_input(1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Expecting an iterable object but got an non-iterable type 1\n    \"\"\"\n\n    if not hasattr(points, \"__iter__\"):\n        msg = f\"Expecting an iterable object but got an non-iterable type {points}\"\n        raise ValueError(msg)\n\n    if not points:\n        msg = f\"Expecting a list of points but got {points}\"\n        raise ValueError(msg)\n\n    return _construct_points(points)\n\n\ndef _det(a: Point, b: Point, c: Point) -> float:\n    \"\"\"\n    Computes the sign perpendicular distance of a 2d point c from a line segment\n    ab. The sign indicates the direction of c relative to ab.\n    A Positive value means c is above ab (to the left), while a negative value\n    means c is below ab (to the right). 0 means all three points are on a straight line.\n\n    As a side note, 0.5 * abs|det| is the area of triangle abc\n\n    Parameters\n    ----------\n    a: point, the point on the left end of line segment ab\n    b: point, the point on the right end of line segment ab\n    c: point, the point for which the direction and location is desired.\n\n    Returns\n    --------\n    det: float, abs(det) is the distance of c from ab. The sign\n    indicates which side of line segment ab c is. det is computed as\n    (a_xb_y + c_xa_y + b_xc_y) - (a_yb_x + c_ya_x + b_yc_x)\n\n    Examples\n    ----------\n    >>> _det(Point(1, 1), Point(1, 2), Point(1, 5))\n    0.0\n    >>> _det(Point(0, 0), Point(10, 0), Point(0, 10))\n    100.0\n    >>> _det(Point(0, 0), Point(10, 0), Point(0, -10))\n    -100.0\n    \"\"\"\n\n    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)\n    return det\n\n\ndef convex_hull_bf(points: list[Point]) -> list[Point]:\n    \"\"\"\n    Constructs the convex hull of a set of 2D points using a brute force algorithm.\n    The algorithm basically considers all combinations of points (i, j) and uses the\n    definition of convexity to determine whether (i, j) is part of the convex hull or\n    not.  (i, j) is part of the convex hull if and only iff there are no points on both\n    sides of the line segment connecting the ij, and there is no point k such that k is\n    on either end of the ij.\n\n    Runtime: O(n^3) - definitely horrible\n\n    Parameters\n    ---------\n    points: array-like of object of Points, lists or tuples.\n    The set of  2d points for which the convex-hull is needed\n\n    Returns\n    ------\n    convex_set: list, the convex-hull of points sorted in non-decreasing order.\n\n    See Also\n    --------\n    convex_hull_recursive,\n\n     Examples\n     ---------\n     >>> convex_hull_bf([[0, 0], [1, 0], [10, 1]])\n     [(0.0, 0.0), (1.0, 0.0), (10.0, 1.0)]\n     >>> convex_hull_bf([[0, 0], [1, 0], [10, 0]])\n     [(0.0, 0.0), (10.0, 0.0)]\n     >>> convex_hull_bf([[-1, 1],[-1, -1], [0, 0], [0.5, 0.5], [1, -1], [1, 1],\n     ...                 [-0.75, 1]])\n     [(-1.0, -1.0), (-1.0, 1.0), (1.0, -1.0), (1.0, 1.0)]\n     >>> convex_hull_bf([(0, 3), (2, 2), (1, 1), (2, 1), (3, 0), (0, 0), (3, 3),\n     ...                 (2, -1), (2, -4), (1, -3)])\n     [(0.0, 0.0), (0.0, 3.0), (1.0, -3.0), (2.0, -4.0), (3.0, 0.0), (3.0, 3.0)]\n    \"\"\"\n\n    points = sorted(_validate_input(points))\n    n = len(points)\n    convex_set = set()\n\n    for i in range(n - 1):\n        for j in range(i + 1, n):\n            points_left_of_ij = points_right_of_ij = False\n            ij_part_of_convex_hull = True\n            for k in range(n):\n                if k not in {i, j}:\n                    det_k = _det(points[i], points[j], points[k])\n\n                    if det_k > 0:\n                        points_left_of_ij = True\n                    elif det_k < 0:\n                        points_right_of_ij = True\n                    # point[i], point[j], point[k] all lie on a straight line\n                    # if point[k] is to the left of point[i] or it's to the\n                    # right of point[j], then point[i], point[j] cannot be\n                    # part of the convex hull of A\n                    elif points[k] < points[i] or points[k] > points[j]:\n                        ij_part_of_convex_hull = False\n                        break\n\n                if points_left_of_ij and points_right_of_ij:\n                    ij_part_of_convex_hull = False\n                    break\n\n            if ij_part_of_convex_hull:\n                convex_set.update([points[i], points[j]])\n\n    return sorted(convex_set)\n\n\ndef convex_hull_recursive(points: list[Point]) -> list[Point]:\n    \"\"\"\n    Constructs the convex hull of a set of 2D points using a divide-and-conquer strategy\n    The algorithm exploits the geometric properties of the problem by repeatedly\n    partitioning the set of points into smaller hulls, and finding the convex hull of\n    these smaller hulls.  The union of the convex hull from smaller hulls is the\n    solution to the convex hull of the larger problem.\n\n    Parameter\n    ---------\n    points: array-like of object of Points, lists or tuples.\n    The set of  2d points for which the convex-hull is needed\n\n    Runtime: O(n log n)\n\n    Returns\n    -------\n    convex_set: list, the convex-hull of points sorted in non-decreasing order.\n\n    Examples\n    ---------\n    >>> convex_hull_recursive([[0, 0], [1, 0], [10, 1]])\n    [(0.0, 0.0), (1.0, 0.0), (10.0, 1.0)]\n    >>> convex_hull_recursive([[0, 0], [1, 0], [10, 0]])\n    [(0.0, 0.0), (10.0, 0.0)]\n    >>> convex_hull_recursive([[-1, 1],[-1, -1], [0, 0], [0.5, 0.5], [1, -1], [1, 1],\n    ...                        [-0.75, 1]])\n    [(-1.0, -1.0), (-1.0, 1.0), (1.0, -1.0), (1.0, 1.0)]\n    >>> convex_hull_recursive([(0, 3), (2, 2), (1, 1), (2, 1), (3, 0), (0, 0), (3, 3),\n    ...                        (2, -1), (2, -4), (1, -3)])\n    [(0.0, 0.0), (0.0, 3.0), (1.0, -3.0), (2.0, -4.0), (3.0, 0.0), (3.0, 3.0)]\n\n    \"\"\"\n    points = sorted(_validate_input(points))\n    n = len(points)\n\n    # divide all the points into an upper hull and a lower hull\n    # the left most point and the right most point are definitely\n    # members of the convex hull by definition.\n    # use these two anchors to divide all the points into two hulls,\n    # an upper hull and a lower hull.\n\n    # all points to the left (above) the line joining the extreme points belong to the\n    # upper hull\n    # all points to the right (below) the line joining the extreme points below to the\n    # lower hull\n    # ignore all points on the line joining the extreme points since they cannot be\n    # part of the convex hull\n\n    left_most_point = points[0]\n    right_most_point = points[n - 1]\n\n    convex_set = {left_most_point, right_most_point}\n    upper_hull = []\n    lower_hull = []\n\n    for i in range(1, n - 1):\n        det = _det(left_most_point, right_most_point, points[i])\n\n        if det > 0:\n            upper_hull.append(points[i])\n        elif det < 0:\n            lower_hull.append(points[i])\n\n    _construct_hull(upper_hull, left_most_point, right_most_point, convex_set)\n    _construct_hull(lower_hull, right_most_point, left_most_point, convex_set)\n\n    return sorted(convex_set)\n\n\ndef _construct_hull(\n    points: list[Point], left: Point, right: Point, convex_set: set[Point]\n) -> None:\n    \"\"\"\n\n    Parameters\n    ---------\n    points: list or None, the hull of points from which to choose the next convex-hull\n        point\n    left: Point, the point to the left  of line segment joining left and right\n    right: The point to the right of the line segment joining left and right\n    convex_set: set, the current convex-hull. The state of convex-set gets updated by\n        this function\n\n    Note\n    ----\n    For the line segment 'ab', 'a' is on the left and 'b' on the right.\n    but the reverse is true for the line segment 'ba'.\n\n    Returns\n    -------\n    Nothing, only updates the state of convex-set\n    \"\"\"\n    if points:\n        extreme_point = None\n        extreme_point_distance = float(\"-inf\")\n        candidate_points = []\n\n        for p in points:\n            det = _det(left, right, p)\n\n            if det > 0:\n                candidate_points.append(p)\n\n                if det > extreme_point_distance:\n                    extreme_point_distance = det\n                    extreme_point = p\n\n        if extreme_point:\n            _construct_hull(candidate_points, left, extreme_point, convex_set)\n            convex_set.add(extreme_point)\n            _construct_hull(candidate_points, extreme_point, right, convex_set)\n\n\ndef convex_hull_melkman(points: list[Point]) -> list[Point]:\n    \"\"\"\n    Constructs the convex hull of a set of 2D points using the melkman algorithm.\n    The algorithm works by iteratively inserting points of a simple polygonal chain\n    (meaning that no line segments between two consecutive points cross each other).\n    Sorting the points yields such a polygonal chain.\n\n    For a detailed description, see http://cgm.cs.mcgill.ca/~athens/cs601/Melkman.html\n\n    Runtime: O(n log n) - O(n) if points are already sorted in the input\n\n    Parameters\n    ---------\n    points: array-like of object of Points, lists or tuples.\n    The set of 2d points for which the convex-hull is needed\n\n    Returns\n    ------\n    convex_set: list, the convex-hull of points sorted in non-decreasing order.\n\n    See Also\n    --------\n\n    Examples\n    ---------\n    >>> convex_hull_melkman([[0, 0], [1, 0], [10, 1]])\n    [(0.0, 0.0), (1.0, 0.0), (10.0, 1.0)]\n    >>> convex_hull_melkman([[0, 0], [1, 0], [10, 0]])\n    [(0.0, 0.0), (10.0, 0.0)]\n    >>> convex_hull_melkman([[-1, 1],[-1, -1], [0, 0], [0.5, 0.5], [1, -1], [1, 1],\n    ...                 [-0.75, 1]])\n    [(-1.0, -1.0), (-1.0, 1.0), (1.0, -1.0), (1.0, 1.0)]\n    >>> convex_hull_melkman([(0, 3), (2, 2), (1, 1), (2, 1), (3, 0), (0, 0), (3, 3),\n    ...                 (2, -1), (2, -4), (1, -3)])\n    [(0.0, 0.0), (0.0, 3.0), (1.0, -3.0), (2.0, -4.0), (3.0, 0.0), (3.0, 3.0)]\n    \"\"\"\n    points = sorted(_validate_input(points))\n    n = len(points)\n\n    convex_hull = points[:2]\n    for i in range(2, n):\n        det = _det(convex_hull[1], convex_hull[0], points[i])\n        if det > 0:\n            convex_hull.insert(0, points[i])\n            break\n        elif det < 0:\n            convex_hull.append(points[i])\n            break\n        else:\n            convex_hull[1] = points[i]\n    i += 1\n\n    for j in range(i, n):\n        if (\n            _det(convex_hull[0], convex_hull[-1], points[j]) > 0\n            and _det(convex_hull[-1], convex_hull[0], points[1]) < 0\n        ):\n            # The point lies within the convex hull\n            continue\n\n        convex_hull.insert(0, points[j])\n        convex_hull.append(points[j])\n        while _det(convex_hull[0], convex_hull[1], convex_hull[2]) >= 0:\n            del convex_hull[1]\n        while _det(convex_hull[-1], convex_hull[-2], convex_hull[-3]) <= 0:\n            del convex_hull[-2]\n\n    # `convex_hull` is contains the convex hull in circular order\n    return sorted(convex_hull[1:] if len(convex_hull) > 3 else convex_hull)\n\n\ndef main():\n    points = [\n        (0, 3),\n        (2, 2),\n        (1, 1),\n        (2, 1),\n        (3, 0),\n        (0, 0),\n        (3, 3),\n        (2, -1),\n        (2, -4),\n        (1, -3),\n    ]\n    # the convex set of points is\n    # [(0, 0), (0, 3), (1, -3), (2, -4), (3, 0), (3, 3)]\n    results_bf = convex_hull_bf(points)\n\n    results_recursive = convex_hull_recursive(points)\n    assert results_bf == results_recursive\n\n    results_melkman = convex_hull_melkman(points)\n    assert results_bf == results_melkman\n\n    print(results_bf)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "divide_and_conquer/heaps_algorithm.py",
    "content": "\"\"\"\nHeap's algorithm returns the list of all permutations possible from a list.\nIt minimizes movement by generating each permutation from the previous one\nby swapping only two elements.\nMore information:\nhttps://en.wikipedia.org/wiki/Heap%27s_algorithm.\n\"\"\"\n\n\ndef heaps(arr: list) -> list:\n    \"\"\"\n    Pure python implementation of the Heap's algorithm (recursive version),\n    returning all permutations of a list.\n    >>> heaps([])\n    [()]\n    >>> heaps([0])\n    [(0,)]\n    >>> heaps([-1, 1])\n    [(-1, 1), (1, -1)]\n    >>> heaps([1, 2, 3])\n    [(1, 2, 3), (2, 1, 3), (3, 1, 2), (1, 3, 2), (2, 3, 1), (3, 2, 1)]\n    >>> from itertools import permutations\n    >>> sorted(heaps([1,2,3])) == sorted(permutations([1,2,3]))\n    True\n    >>> all(sorted(heaps(x)) == sorted(permutations(x))\n    ...     for x in ([], [0], [-1, 1], [1, 2, 3]))\n    True\n    \"\"\"\n\n    if len(arr) <= 1:\n        return [tuple(arr)]\n\n    res = []\n\n    def generate(k: int, arr: list):\n        if k == 1:\n            res.append(tuple(arr[:]))\n            return\n\n        generate(k - 1, arr)\n\n        for i in range(k - 1):\n            if k % 2 == 0:  # k is even\n                arr[i], arr[k - 1] = arr[k - 1], arr[i]\n            else:  # k is odd\n                arr[0], arr[k - 1] = arr[k - 1], arr[0]\n            generate(k - 1, arr)\n\n    generate(len(arr), arr)\n    return res\n\n\nif __name__ == \"__main__\":\n    user_input = input(\"Enter numbers separated by a comma:\\n\").strip()\n    arr = [int(item) for item in user_input.split(\",\")]\n    print(heaps(arr))\n"
  },
  {
    "path": "divide_and_conquer/heaps_algorithm_iterative.py",
    "content": "\"\"\"\nHeap's (iterative) algorithm returns the list of all permutations possible from a list.\nIt minimizes movement by generating each permutation from the previous one\nby swapping only two elements.\nMore information:\nhttps://en.wikipedia.org/wiki/Heap%27s_algorithm.\n\"\"\"\n\n\ndef heaps(arr: list) -> list:\n    \"\"\"\n    Pure python implementation of the iterative Heap's algorithm,\n    returning all permutations of a list.\n    >>> heaps([])\n    [()]\n    >>> heaps([0])\n    [(0,)]\n    >>> heaps([-1, 1])\n    [(-1, 1), (1, -1)]\n    >>> heaps([1, 2, 3])\n    [(1, 2, 3), (2, 1, 3), (3, 1, 2), (1, 3, 2), (2, 3, 1), (3, 2, 1)]\n    >>> from itertools import permutations\n    >>> sorted(heaps([1,2,3])) == sorted(permutations([1,2,3]))\n    True\n    >>> all(sorted(heaps(x)) == sorted(permutations(x))\n    ...     for x in ([], [0], [-1, 1], [1, 2, 3]))\n    True\n    \"\"\"\n\n    if len(arr) <= 1:\n        return [tuple(arr)]\n\n    res = []\n\n    def generate(n: int, arr: list):\n        c = [0] * n\n        res.append(tuple(arr))\n\n        i = 0\n        while i < n:\n            if c[i] < i:\n                if i % 2 == 0:\n                    arr[0], arr[i] = arr[i], arr[0]\n                else:\n                    arr[c[i]], arr[i] = arr[i], arr[c[i]]\n                res.append(tuple(arr))\n                c[i] += 1\n                i = 0\n            else:\n                c[i] = 0\n                i += 1\n\n    generate(len(arr), arr)\n    return res\n\n\nif __name__ == \"__main__\":\n    user_input = input(\"Enter numbers separated by a comma:\\n\").strip()\n    arr = [int(item) for item in user_input.split(\",\")]\n    print(heaps(arr))\n"
  },
  {
    "path": "divide_and_conquer/inversions.py",
    "content": "\"\"\"\nGiven an array-like data structure A[1..n], how many pairs\n(i, j) for all 1 <= i < j <= n such that A[i] > A[j]? These pairs are\ncalled inversions. Counting the number of such inversions in an array-like\nobject is the important. Among other things, counting inversions can help\nus determine how close a given array is to being sorted.\nIn this implementation, I provide two algorithms, a divide-and-conquer\nalgorithm which runs in nlogn and the brute-force n^2 algorithm.\n\"\"\"\n\n\ndef count_inversions_bf(arr):\n    \"\"\"\n    Counts the number of inversions using a naive brute-force algorithm\n    Parameters\n    ----------\n    arr: arr: array-like, the list containing the items for which the number\n    of inversions is desired. The elements of `arr` must be comparable.\n    Returns\n    -------\n    num_inversions: The total number of inversions in `arr`\n    Examples\n    ---------\n     >>> count_inversions_bf([1, 4, 2, 4, 1])\n     4\n     >>> count_inversions_bf([1, 1, 2, 4, 4])\n     0\n     >>> count_inversions_bf([])\n     0\n    \"\"\"\n\n    num_inversions = 0\n    n = len(arr)\n\n    for i in range(n - 1):\n        for j in range(i + 1, n):\n            if arr[i] > arr[j]:\n                num_inversions += 1\n\n    return num_inversions\n\n\ndef count_inversions_recursive(arr):\n    \"\"\"\n    Counts the number of inversions using a divide-and-conquer algorithm\n    Parameters\n    -----------\n    arr: array-like, the list containing the items for which the number\n    of inversions is desired. The elements of `arr` must be comparable.\n    Returns\n    -------\n    C: a sorted copy of `arr`.\n    num_inversions: int, the total number of inversions in 'arr'\n    Examples\n    --------\n    >>> count_inversions_recursive([1, 4, 2, 4, 1])\n    ([1, 1, 2, 4, 4], 4)\n    >>> count_inversions_recursive([1, 1, 2, 4, 4])\n    ([1, 1, 2, 4, 4], 0)\n    >>> count_inversions_recursive([])\n    ([], 0)\n    \"\"\"\n    if len(arr) <= 1:\n        return arr, 0\n    mid = len(arr) // 2\n    p = arr[0:mid]\n    q = arr[mid:]\n\n    a, inversion_p = count_inversions_recursive(p)\n    b, inversions_q = count_inversions_recursive(q)\n    c, cross_inversions = _count_cross_inversions(a, b)\n\n    num_inversions = inversion_p + inversions_q + cross_inversions\n    return c, num_inversions\n\n\ndef _count_cross_inversions(p, q):\n    \"\"\"\n    Counts the inversions across two sorted arrays.\n    And combine the two arrays into one sorted array\n    For all 1<= i<=len(P) and for all 1 <= j <= len(Q),\n    if P[i] > Q[j], then (i, j) is a cross inversion\n    Parameters\n    ----------\n    P: array-like, sorted in non-decreasing order\n    Q: array-like, sorted in non-decreasing order\n    Returns\n    ------\n    R: array-like, a sorted array of the elements of `P` and `Q`\n    num_inversion: int, the number of inversions across `P` and `Q`\n    Examples\n    --------\n    >>> _count_cross_inversions([1, 2, 3], [0, 2, 5])\n    ([0, 1, 2, 2, 3, 5], 4)\n    >>> _count_cross_inversions([1, 2, 3], [3, 4, 5])\n    ([1, 2, 3, 3, 4, 5], 0)\n    \"\"\"\n\n    r = []\n    i = j = num_inversion = 0\n    while i < len(p) and j < len(q):\n        if p[i] > q[j]:\n            # if P[1] > Q[j], then P[k] > Q[k] for all  i < k <= len(P)\n            # These are all inversions. The claim emerges from the\n            # property that P is sorted.\n            num_inversion += len(p) - i\n            r.append(q[j])\n            j += 1\n        else:\n            r.append(p[i])\n            i += 1\n\n    if i < len(p):\n        r.extend(p[i:])\n    else:\n        r.extend(q[j:])\n\n    return r, num_inversion\n\n\ndef main():\n    arr_1 = [10, 2, 1, 5, 5, 2, 11]\n\n    # this arr has 8 inversions:\n    # (10, 2), (10, 1), (10, 5), (10, 5), (10, 2), (2, 1), (5, 2), (5, 2)\n\n    num_inversions_bf = count_inversions_bf(arr_1)\n    _, num_inversions_recursive = count_inversions_recursive(arr_1)\n\n    assert num_inversions_bf == num_inversions_recursive == 8\n\n    print(\"number of inversions = \", num_inversions_bf)\n\n    # testing an array with zero inversion (a sorted arr_1)\n\n    arr_1.sort()\n    num_inversions_bf = count_inversions_bf(arr_1)\n    _, num_inversions_recursive = count_inversions_recursive(arr_1)\n\n    assert num_inversions_bf == num_inversions_recursive == 0\n    print(\"number of inversions = \", num_inversions_bf)\n\n    # an empty list should also have zero inversions\n    arr_1 = []\n    num_inversions_bf = count_inversions_bf(arr_1)\n    _, num_inversions_recursive = count_inversions_recursive(arr_1)\n\n    assert num_inversions_bf == num_inversions_recursive == 0\n    print(\"number of inversions = \", num_inversions_bf)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "divide_and_conquer/kth_order_statistic.py",
    "content": "\"\"\"\nFind the kth smallest element in linear time using divide and conquer.\nRecall we can do this trivially in O(nlogn) time. Sort the list and\naccess kth element in constant time.\n\nThis is a divide and conquer algorithm that can find a solution in O(n) time.\n\nFor more information of this algorithm:\nhttps://web.stanford.edu/class/archive/cs/cs161/cs161.1138/lectures/08/Small08.pdf\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom random import choice\n\n\ndef random_pivot(lst):\n    \"\"\"\n    Choose a random pivot for the list.\n    We can use a more sophisticated algorithm here, such as the median-of-medians\n    algorithm.\n    \"\"\"\n    return choice(lst)\n\n\ndef kth_number(lst: list[int], k: int) -> int:\n    \"\"\"\n    Return the kth smallest number in lst.\n    >>> kth_number([2, 1, 3, 4, 5], 3)\n    3\n    >>> kth_number([2, 1, 3, 4, 5], 1)\n    1\n    >>> kth_number([2, 1, 3, 4, 5], 5)\n    5\n    >>> kth_number([3, 2, 5, 6, 7, 8], 2)\n    3\n    >>> kth_number([25, 21, 98, 100, 76, 22, 43, 60, 89, 87], 4)\n    43\n    \"\"\"\n    # pick a pivot and separate into list based on pivot.\n    pivot = random_pivot(lst)\n\n    # partition based on pivot\n    # linear time\n    small = [e for e in lst if e < pivot]\n    big = [e for e in lst if e > pivot]\n\n    # if we get lucky, pivot might be the element we want.\n    # we can easily see this:\n    # small (elements smaller than k)\n    # + pivot (kth element)\n    # + big (elements larger than k)\n    if len(small) == k - 1:\n        return pivot\n    # pivot is in elements bigger than k\n    elif len(small) < k - 1:\n        return kth_number(big, k - len(small) - 1)\n    # pivot is in elements smaller than k\n    else:\n        return kth_number(small, k)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "divide_and_conquer/max_difference_pair.py",
    "content": "def max_difference(a: list[int]) -> tuple[int, int]:\n    \"\"\"\n    We are given an array A[1..n] of integers, n >= 1. We want to\n    find a pair of indices (i, j) such that\n    1 <= i <= j <= n and A[j] - A[i] is as large as possible.\n\n    Explanation:\n    https://www.geeksforgeeks.org/maximum-difference-between-two-elements/\n\n    >>> max_difference([5, 11, 2, 1, 7, 9, 0, 7])\n    (1, 9)\n    \"\"\"\n    # base case\n    if len(a) == 1:\n        return a[0], a[0]\n    else:\n        # split A into half.\n        first = a[: len(a) // 2]\n        second = a[len(a) // 2 :]\n\n        # 2 sub problems, 1/2 of original size.\n        small1, big1 = max_difference(first)\n        small2, big2 = max_difference(second)\n\n        # get min of first and max of second\n        # linear time\n        min_first = min(first)\n        max_second = max(second)\n\n        # 3 cases, either (small1, big1),\n        # (min_first, max_second), (small2, big2)\n        # constant comparisons\n        if big2 - small2 > max_second - min_first and big2 - small2 > big1 - small1:\n            return small2, big2\n        elif big1 - small1 > max_second - min_first:\n            return small1, big1\n        else:\n            return min_first, max_second\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "divide_and_conquer/max_subarray.py",
    "content": "\"\"\"\nThe maximum subarray problem is the task of finding the continuous subarray that has the\nmaximum sum within a given array of numbers. For example, given the array\n[-2, 1, -3, 4, -1, 2, 1, -5, 4], the contiguous subarray with the maximum sum is\n[4, -1, 2, 1], which has a sum of 6.\n\nThis divide-and-conquer algorithm finds the maximum subarray in O(n log n) time.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport time\nfrom collections.abc import Sequence\nfrom random import randint\n\nfrom matplotlib import pyplot as plt\n\n\ndef max_subarray(\n    arr: Sequence[float], low: int, high: int\n) -> tuple[int | None, int | None, float]:\n    \"\"\"\n    Solves the maximum subarray problem using divide and conquer.\n    :param arr:     the given array of numbers\n    :param low:     the start index\n    :param high:    the end index\n    :return:        the start index of the maximum subarray, the end index of the\n                    maximum subarray, and the maximum subarray sum\n\n    >>> nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4]\n    >>> max_subarray(nums, 0, len(nums) - 1)\n    (3, 6, 6)\n    >>> nums = [2, 8, 9]\n    >>> max_subarray(nums, 0, len(nums) - 1)\n    (0, 2, 19)\n    >>> nums = [0, 0]\n    >>> max_subarray(nums, 0, len(nums) - 1)\n    (0, 0, 0)\n    >>> nums = [-1.0, 0.0, 1.0]\n    >>> max_subarray(nums, 0, len(nums) - 1)\n    (2, 2, 1.0)\n    >>> nums = [-2, -3, -1, -4, -6]\n    >>> max_subarray(nums, 0, len(nums) - 1)\n    (2, 2, -1)\n    >>> max_subarray([], 0, 0)\n    (None, None, 0)\n    \"\"\"\n    if not arr:\n        return None, None, 0\n    if low == high:\n        return low, high, arr[low]\n\n    mid = (low + high) // 2\n    left_low, left_high, left_sum = max_subarray(arr, low, mid)\n    right_low, right_high, right_sum = max_subarray(arr, mid + 1, high)\n    cross_left, cross_right, cross_sum = max_cross_sum(arr, low, mid, high)\n    if left_sum >= right_sum and left_sum >= cross_sum:\n        return left_low, left_high, left_sum\n    elif right_sum >= left_sum and right_sum >= cross_sum:\n        return right_low, right_high, right_sum\n    return cross_left, cross_right, cross_sum\n\n\ndef max_cross_sum(\n    arr: Sequence[float], low: int, mid: int, high: int\n) -> tuple[int, int, float]:\n    left_sum, max_left = float(\"-inf\"), -1\n    right_sum, max_right = float(\"-inf\"), -1\n\n    summ: int | float = 0\n    for i in range(mid, low - 1, -1):\n        summ += arr[i]\n        if summ > left_sum:\n            left_sum = summ\n            max_left = i\n\n    summ = 0\n    for i in range(mid + 1, high + 1):\n        summ += arr[i]\n        if summ > right_sum:\n            right_sum = summ\n            max_right = i\n\n    return max_left, max_right, (left_sum + right_sum)\n\n\ndef time_max_subarray(input_size: int) -> float:\n    arr = [randint(1, input_size) for _ in range(input_size)]\n    start = time.time()\n    max_subarray(arr, 0, input_size - 1)\n    end = time.time()\n    return end - start\n\n\ndef plot_runtimes() -> None:\n    input_sizes = [10, 100, 1000, 10000, 50000, 100000, 200000, 300000, 400000, 500000]\n    runtimes = [time_max_subarray(input_size) for input_size in input_sizes]\n    print(\"No of Inputs\\t\\tTime Taken\")\n    for input_size, runtime in zip(input_sizes, runtimes):\n        print(input_size, \"\\t\\t\", runtime)\n    plt.plot(input_sizes, runtimes)\n    plt.xlabel(\"Number of Inputs\")\n    plt.ylabel(\"Time taken in seconds\")\n    plt.show()\n\n\nif __name__ == \"__main__\":\n    \"\"\"\n    A random simulation of this algorithm.\n    \"\"\"\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "divide_and_conquer/mergesort.py",
    "content": "from __future__ import annotations\n\n\ndef merge(left_half: list, right_half: list) -> list:\n    \"\"\"Helper function for mergesort.\n\n    >>> left_half = [-2]\n    >>> right_half = [-1]\n    >>> merge(left_half, right_half)\n    [-2, -1]\n\n    >>> left_half = [1,2,3]\n    >>> right_half = [4,5,6]\n    >>> merge(left_half, right_half)\n    [1, 2, 3, 4, 5, 6]\n\n    >>> left_half = [-2]\n    >>> right_half = [-1]\n    >>> merge(left_half, right_half)\n    [-2, -1]\n\n    >>> left_half = [12, 15]\n    >>> right_half = [13, 14]\n    >>> merge(left_half, right_half)\n    [12, 13, 14, 15]\n\n    >>> left_half = []\n    >>> right_half = []\n    >>> merge(left_half, right_half)\n    []\n    \"\"\"\n    sorted_array = [None] * (len(right_half) + len(left_half))\n\n    pointer1 = 0  # pointer to current index for left Half\n    pointer2 = 0  # pointer to current index for the right Half\n    index = 0  # pointer to current index for the sorted array Half\n\n    while pointer1 < len(left_half) and pointer2 < len(right_half):\n        if left_half[pointer1] < right_half[pointer2]:\n            sorted_array[index] = left_half[pointer1]\n            pointer1 += 1\n            index += 1\n        else:\n            sorted_array[index] = right_half[pointer2]\n            pointer2 += 1\n            index += 1\n    while pointer1 < len(left_half):\n        sorted_array[index] = left_half[pointer1]\n        pointer1 += 1\n        index += 1\n\n    while pointer2 < len(right_half):\n        sorted_array[index] = right_half[pointer2]\n        pointer2 += 1\n        index += 1\n\n    return sorted_array\n\n\ndef merge_sort(array: list) -> list:\n    \"\"\"Returns a list of sorted array elements using merge sort.\n\n    >>> from random import shuffle\n    >>> array = [-2, 3, -10, 11, 99, 100000, 100, -200]\n    >>> shuffle(array)\n    >>> merge_sort(array)\n    [-200, -10, -2, 3, 11, 99, 100, 100000]\n\n    >>> shuffle(array)\n    >>> merge_sort(array)\n    [-200, -10, -2, 3, 11, 99, 100, 100000]\n\n    >>> array = [-200]\n    >>> merge_sort(array)\n    [-200]\n\n    >>> array = [-2, 3, -10, 11, 99, 100000, 100, -200]\n    >>> shuffle(array)\n    >>> sorted(array) == merge_sort(array)\n    True\n\n    >>> array = [-2]\n    >>> merge_sort(array)\n    [-2]\n\n    >>> array = []\n    >>> merge_sort(array)\n    []\n\n    >>> array = [10000000, 1, -1111111111, 101111111112, 9000002]\n    >>> sorted(array) == merge_sort(array)\n    True\n    \"\"\"\n    if len(array) <= 1:\n        return array\n    # the actual formula to calculate the middle element = left + (right - left) // 2\n    # this avoids integer overflow in case of large N\n    middle = 0 + (len(array) - 0) // 2\n\n    # Split the array into halves till the array length becomes equal to One\n    # merge the arrays of single length returned by mergeSort function and\n    # pass them into the merge arrays function which merges the array\n    left_half = array[:middle]\n    right_half = array[middle:]\n\n    return merge(merge_sort(left_half), merge_sort(right_half))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "divide_and_conquer/peak.py",
    "content": "\"\"\"\nFinding the peak of a unimodal list using divide and conquer.\nA unimodal array is defined as follows: array is increasing up to index p,\nthen decreasing afterwards. (for p >= 1)\nAn obvious solution can be performed in O(n),\nto find the maximum of the array.\n(From Kleinberg and Tardos. Algorithm Design.\nAddison Wesley 2006: Chapter 5 Solved Exercise 1)\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef peak(lst: list[int]) -> int:\n    \"\"\"\n    Return the peak value of `lst`.\n    >>> peak([1, 2, 3, 4, 5, 4, 3, 2, 1])\n    5\n    >>> peak([1, 10, 9, 8, 7, 6, 5, 4])\n    10\n    >>> peak([1, 9, 8, 7])\n    9\n    >>> peak([1, 2, 3, 4, 5, 6, 7, 0])\n    7\n    >>> peak([1, 2, 3, 4, 3, 2, 1, 0, -1, -2])\n    4\n    \"\"\"\n    # middle index\n    m = len(lst) // 2\n\n    # choose the middle 3 elements\n    three = lst[m - 1 : m + 2]\n\n    # if middle element is peak\n    if three[1] > three[0] and three[1] > three[2]:\n        return three[1]\n\n    # if increasing, recurse on right\n    elif three[0] < three[2]:\n        if len(lst[:m]) == 2:\n            m -= 1\n        return peak(lst[m:])\n\n    # decreasing\n    else:\n        if len(lst[:m]) == 2:\n            m += 1\n        return peak(lst[:m])\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "divide_and_conquer/power.py",
    "content": "def actual_power(a: int, b: int) -> int:\n    \"\"\"\n    Function using divide and conquer to calculate a^b.\n    It only works for integer a,b.\n\n    :param a: The base of the power operation, an integer.\n    :param b: The exponent of the power operation, a non-negative integer.\n    :return: The result of a^b.\n\n    Examples:\n    >>> actual_power(3, 2)\n    9\n    >>> actual_power(5, 3)\n    125\n    >>> actual_power(2, 5)\n    32\n    >>> actual_power(7, 0)\n    1\n    \"\"\"\n    if b == 0:\n        return 1\n    half = actual_power(a, b // 2)\n\n    if (b % 2) == 0:\n        return half * half\n    else:\n        return a * half * half\n\n\ndef power(a: int, b: int) -> float:\n    \"\"\"\n    :param a: The base (integer).\n    :param b: The exponent (integer).\n    :return: The result of a^b, as a float for negative exponents.\n\n    >>> power(4,6)\n    4096\n    >>> power(2,3)\n    8\n    >>> power(-2,3)\n    -8\n    >>> power(2,-3)\n    0.125\n    >>> power(-2,-3)\n    -0.125\n    \"\"\"\n    if b < 0:\n        return 1 / actual_power(a, -b)\n    return actual_power(a, b)\n\n\nif __name__ == \"__main__\":\n    print(power(-2, -3))  # output -0.125\n"
  },
  {
    "path": "divide_and_conquer/strassen_matrix_multiplication.py",
    "content": "from __future__ import annotations\n\nimport math\n\n\ndef default_matrix_multiplication(a: list, b: list) -> list:\n    \"\"\"\n    Multiplication only for 2x2 matrices\n    \"\"\"\n    if len(a) != 2 or len(a[0]) != 2 or len(b) != 2 or len(b[0]) != 2:\n        raise Exception(\"Matrices are not 2x2\")\n    new_matrix = [\n        [a[0][0] * b[0][0] + a[0][1] * b[1][0], a[0][0] * b[0][1] + a[0][1] * b[1][1]],\n        [a[1][0] * b[0][0] + a[1][1] * b[1][0], a[1][0] * b[0][1] + a[1][1] * b[1][1]],\n    ]\n    return new_matrix\n\n\ndef matrix_addition(matrix_a: list, matrix_b: list):\n    return [\n        [matrix_a[row][col] + matrix_b[row][col] for col in range(len(matrix_a[row]))]\n        for row in range(len(matrix_a))\n    ]\n\n\ndef matrix_subtraction(matrix_a: list, matrix_b: list):\n    return [\n        [matrix_a[row][col] - matrix_b[row][col] for col in range(len(matrix_a[row]))]\n        for row in range(len(matrix_a))\n    ]\n\n\ndef split_matrix(a: list) -> tuple[list, list, list, list]:\n    \"\"\"\n    Given an even length matrix, returns the top_left, top_right, bot_left, bot_right\n    quadrant.\n\n    >>> split_matrix([[4,3,2,4],[2,3,1,1],[6,5,4,3],[8,4,1,6]])\n    ([[4, 3], [2, 3]], [[2, 4], [1, 1]], [[6, 5], [8, 4]], [[4, 3], [1, 6]])\n    >>> split_matrix([\n    ...     [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],\n    ...     [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]\n    ... ])  # doctest: +NORMALIZE_WHITESPACE\n    ([[4, 3, 2, 4], [2, 3, 1, 1], [6, 5, 4, 3], [8, 4, 1, 6]], [[4, 3, 2, 4],\n      [2, 3, 1, 1], [6, 5, 4, 3], [8, 4, 1, 6]], [[4, 3, 2, 4], [2, 3, 1, 1],\n      [6, 5, 4, 3], [8, 4, 1, 6]], [[4, 3, 2, 4], [2, 3, 1, 1], [6, 5, 4, 3],\n      [8, 4, 1, 6]])\n    \"\"\"\n    if len(a) % 2 != 0 or len(a[0]) % 2 != 0:\n        raise Exception(\"Odd matrices are not supported!\")\n\n    matrix_length = len(a)\n    mid = matrix_length // 2\n\n    top_right = [[a[i][j] for j in range(mid, matrix_length)] for i in range(mid)]\n    bot_right = [\n        [a[i][j] for j in range(mid, matrix_length)] for i in range(mid, matrix_length)\n    ]\n\n    top_left = [[a[i][j] for j in range(mid)] for i in range(mid)]\n    bot_left = [[a[i][j] for j in range(mid)] for i in range(mid, matrix_length)]\n\n    return top_left, top_right, bot_left, bot_right\n\n\ndef matrix_dimensions(matrix: list) -> tuple[int, int]:\n    return len(matrix), len(matrix[0])\n\n\ndef print_matrix(matrix: list) -> None:\n    print(\"\\n\".join(str(line) for line in matrix))\n\n\ndef actual_strassen(matrix_a: list, matrix_b: list) -> list:\n    \"\"\"\n    Recursive function to calculate the product of two matrices, using the Strassen\n    Algorithm. It only supports square matrices of any size that is a power of 2.\n    \"\"\"\n    if matrix_dimensions(matrix_a) == (2, 2):\n        return default_matrix_multiplication(matrix_a, matrix_b)\n\n    a, b, c, d = split_matrix(matrix_a)\n    e, f, g, h = split_matrix(matrix_b)\n\n    t1 = actual_strassen(a, matrix_subtraction(f, h))\n    t2 = actual_strassen(matrix_addition(a, b), h)\n    t3 = actual_strassen(matrix_addition(c, d), e)\n    t4 = actual_strassen(d, matrix_subtraction(g, e))\n    t5 = actual_strassen(matrix_addition(a, d), matrix_addition(e, h))\n    t6 = actual_strassen(matrix_subtraction(b, d), matrix_addition(g, h))\n    t7 = actual_strassen(matrix_subtraction(a, c), matrix_addition(e, f))\n\n    top_left = matrix_addition(matrix_subtraction(matrix_addition(t5, t4), t2), t6)\n    top_right = matrix_addition(t1, t2)\n    bot_left = matrix_addition(t3, t4)\n    bot_right = matrix_subtraction(matrix_subtraction(matrix_addition(t1, t5), t3), t7)\n\n    # construct the new matrix from our 4 quadrants\n    new_matrix = []\n    for i in range(len(top_right)):\n        new_matrix.append(top_left[i] + top_right[i])\n    for i in range(len(bot_right)):\n        new_matrix.append(bot_left[i] + bot_right[i])\n    return new_matrix\n\n\ndef strassen(matrix1: list, matrix2: list) -> list:\n    \"\"\"\n    >>> 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]])\n    [[34, 23, 19, 15], [68, 46, 37, 28], [28, 18, 15, 12], [96, 62, 55, 48]]\n    >>> 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]])\n    [[139, 163], [121, 134], [100, 121]]\n    \"\"\"\n    if matrix_dimensions(matrix1)[1] != matrix_dimensions(matrix2)[0]:\n        msg = (\n            \"Unable to multiply these matrices, please check the dimensions.\\n\"\n            f\"Matrix A: {matrix1}\\n\"\n            f\"Matrix B: {matrix2}\"\n        )\n        raise Exception(msg)\n    dimension1 = matrix_dimensions(matrix1)\n    dimension2 = matrix_dimensions(matrix2)\n\n    if dimension1[0] == dimension1[1] and dimension2[0] == dimension2[1]:\n        return [matrix1, matrix2]\n\n    maximum = max(*dimension1, *dimension2)\n    maxim = int(math.pow(2, math.ceil(math.log2(maximum))))\n    new_matrix1 = matrix1\n    new_matrix2 = matrix2\n\n    # Adding zeros to the matrices to convert them both into square matrices of equal\n    # dimensions that are a power of 2\n    for i in range(maxim):\n        if i < dimension1[0]:\n            for _ in range(dimension1[1], maxim):\n                new_matrix1[i].append(0)\n        else:\n            new_matrix1.append([0] * maxim)\n        if i < dimension2[0]:\n            for _ in range(dimension2[1], maxim):\n                new_matrix2[i].append(0)\n        else:\n            new_matrix2.append([0] * maxim)\n\n    final_matrix = actual_strassen(new_matrix1, new_matrix2)\n\n    # Removing the additional zeros\n    for i in range(maxim):\n        if i < dimension1[0]:\n            for _ in range(dimension2[1], maxim):\n                final_matrix[i].pop()\n        else:\n            final_matrix.pop()\n    return final_matrix\n\n\nif __name__ == \"__main__\":\n    matrix1 = [\n        [2, 3, 4, 5],\n        [6, 4, 3, 1],\n        [2, 3, 6, 7],\n        [3, 1, 2, 4],\n        [2, 3, 4, 5],\n        [6, 4, 3, 1],\n        [2, 3, 6, 7],\n        [3, 1, 2, 4],\n        [2, 3, 4, 5],\n        [6, 2, 3, 1],\n    ]\n    matrix2 = [[0, 2, 1, 1], [16, 2, 3, 3], [2, 2, 7, 7], [13, 11, 22, 4]]\n    print(strassen(matrix1, matrix2))\n"
  },
  {
    "path": "docs/__init__.py",
    "content": ""
  },
  {
    "path": "docs/conf.py",
    "content": "from sphinx_pyproject import SphinxConfig\n\nproject = SphinxConfig(\"../pyproject.toml\", globalns=globals()).name\n"
  },
  {
    "path": "docs/source/__init__.py",
    "content": ""
  },
  {
    "path": "dynamic_programming/__init__.py",
    "content": ""
  },
  {
    "path": "dynamic_programming/abbreviation.py",
    "content": "\"\"\"\nhttps://www.hackerrank.com/challenges/abbr/problem\nYou can perform the following operation on some string, :\n\n1. Capitalize zero or more of 's lowercase letters at some index i\n   (i.e., make them uppercase).\n2. Delete all of the remaining lowercase letters in .\n\nExample:\na=daBcd and b=\"ABC\"\ndaBcd -> capitalize a and c(dABCd) -> remove d (ABC)\n\"\"\"\n\n\ndef abbr(a: str, b: str) -> bool:\n    \"\"\"\n    >>> abbr(\"daBcd\", \"ABC\")\n    True\n    >>> abbr(\"dBcd\", \"ABC\")\n    False\n    \"\"\"\n    n = len(a)\n    m = len(b)\n    dp = [[False for _ in range(m + 1)] for _ in range(n + 1)]\n    dp[0][0] = True\n    for i in range(n):\n        for j in range(m + 1):\n            if dp[i][j]:\n                if j < m and a[i].upper() == b[j]:\n                    dp[i + 1][j + 1] = True\n                if a[i].islower():\n                    dp[i + 1][j] = True\n    return dp[n][m]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "dynamic_programming/all_construct.py",
    "content": "\"\"\"\nProgram to list all the ways a target string can be\nconstructed from the given list of substrings\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef all_construct(target: str, word_bank: list[str] | None = None) -> list[list[str]]:\n    \"\"\"\n    returns the list containing all the possible\n    combinations a string(`target`) can be constructed from\n    the given list of substrings(`word_bank`)\n\n    >>> all_construct(\"hello\", [\"he\", \"l\", \"o\"])\n    [['he', 'l', 'l', 'o']]\n    >>> all_construct(\"purple\",[\"purp\",\"p\",\"ur\",\"le\",\"purpl\"])\n    [['purp', 'le'], ['p', 'ur', 'p', 'le']]\n    \"\"\"\n\n    word_bank = word_bank or []\n    # create a table\n    table_size: int = len(target) + 1\n\n    table: list[list[list[str]]] = []\n    for _ in range(table_size):\n        table.append([])\n    # seed value\n    table[0] = [[]]  # because empty string has empty combination\n\n    # iterate through the indices\n    for i in range(table_size):\n        # condition\n        if table[i] != []:\n            for word in word_bank:\n                # slice condition\n                if target[i : i + len(word)] == word:\n                    new_combinations: list[list[str]] = [\n                        [word, *way] for way in table[i]\n                    ]\n                    # adds the word to every combination the current position holds\n                    # now,push that combination to the table[i+len(word)]\n                    table[i + len(word)] += new_combinations\n\n    # combinations are in reverse order so reverse for better output\n    for combination in table[len(target)]:\n        combination.reverse()\n\n    return table[len(target)]\n\n\nif __name__ == \"__main__\":\n    print(all_construct(\"jwajalapa\", [\"jwa\", \"j\", \"w\", \"a\", \"la\", \"lapa\"]))\n    print(all_construct(\"rajamati\", [\"s\", \"raj\", \"amat\", \"raja\", \"ma\", \"i\", \"t\"]))\n    print(\n        all_construct(\n            \"hexagonosaurus\",\n            [\"h\", \"ex\", \"hex\", \"ag\", \"ago\", \"ru\", \"auru\", \"rus\", \"go\", \"no\", \"o\", \"s\"],\n        )\n    )\n"
  },
  {
    "path": "dynamic_programming/bitmask.py",
    "content": "\"\"\"\n\nThis is a Python implementation for questions involving task assignments between people.\nHere Bitmasking and DP are used for solving this.\n\nQuestion :-\nWe have N tasks and M people. Each person in M can do only certain of these tasks. Also\na person can do only one task and a task is performed only by one person.\nFind the total no of ways in which the tasks can be distributed.\n\"\"\"\n\nfrom collections import defaultdict\n\n\nclass AssignmentUsingBitmask:\n    def __init__(self, task_performed, total):\n        self.total_tasks = total  # total no of tasks (N)\n\n        # DP table will have a dimension of (2^M)*N\n        # initially all values are set to -1\n        self.dp = [\n            [-1 for i in range(total + 1)] for j in range(2 ** len(task_performed))\n        ]\n\n        self.task = defaultdict(list)  # stores the list of persons for each task\n\n        # final_mask is used to check if all persons are included by setting all bits\n        # to 1\n        self.final_mask = (1 << len(task_performed)) - 1\n\n    def count_ways_until(self, mask, task_no):\n        # if mask == self.finalmask all persons are distributed tasks, return 1\n        if mask == self.final_mask:\n            return 1\n\n        # if not everyone gets the task and no more tasks are available, return 0\n        if task_no > self.total_tasks:\n            return 0\n\n        # if case already considered\n        if self.dp[mask][task_no] != -1:\n            return self.dp[mask][task_no]\n\n        # Number of ways when we don't this task in the arrangement\n        total_ways_until = self.count_ways_until(mask, task_no + 1)\n\n        # now assign the tasks one by one to all possible persons and recursively\n        # assign for the remaining tasks.\n        if task_no in self.task:\n            for p in self.task[task_no]:\n                # if p is already given a task\n                if mask & (1 << p):\n                    continue\n\n                # assign this task to p and change the mask value. And recursively\n                # assign tasks with the new mask value.\n                total_ways_until += self.count_ways_until(mask | (1 << p), task_no + 1)\n\n        # save the value.\n        self.dp[mask][task_no] = total_ways_until\n\n        return self.dp[mask][task_no]\n\n    def count_no_of_ways(self, task_performed):\n        # Store the list of persons for each task\n        for i in range(len(task_performed)):\n            for j in task_performed[i]:\n                self.task[j].append(i)\n\n        # call the function to fill the DP table, final answer is stored in dp[0][1]\n        return self.count_ways_until(0, 1)\n\n\nif __name__ == \"__main__\":\n    total_tasks = 5  # total no of tasks (the value of N)\n\n    # the list of tasks that can be done by M persons.\n    task_performed = [[1, 3, 4], [1, 2, 5], [3, 4]]\n    print(\n        AssignmentUsingBitmask(task_performed, total_tasks).count_no_of_ways(\n            task_performed\n        )\n    )\n    \"\"\"\n    For the particular example the tasks can be distributed as\n    (1,2,3), (1,2,4), (1,5,3), (1,5,4), (3,1,4),\n    (3,2,4), (3,5,4), (4,1,3), (4,2,3), (4,5,3)\n    total 10\n    \"\"\"\n"
  },
  {
    "path": "dynamic_programming/catalan_numbers.py",
    "content": "\"\"\"\nPrint all the Catalan numbers from 0 to n, n being the user input.\n\n * The Catalan numbers are a sequence of positive integers that\n * appear in many counting problems in combinatorics [1]. Such\n * problems include counting [2]:\n * - The number of Dyck words of length 2n\n * - The number well-formed expressions with n pairs of parentheses\n *   (e.g., `()()` is valid but `())(` is not)\n * - The number of different ways n + 1 factors can be completely\n *   parenthesized (e.g., for n = 2, C(n) = 2 and (ab)c and a(bc)\n *   are the two valid ways to parenthesize.\n * - The number of full binary trees with n + 1 leaves\n\n * A Catalan number satisfies the following recurrence relation\n * which we will use in this algorithm [1].\n * C(0) = C(1) = 1\n * C(n) = sum(C(i).C(n-i-1)), from i = 0 to n-1\n\n * In addition, the n-th Catalan number can be calculated using\n * the closed form formula below [1]:\n * C(n) = (1 / (n + 1)) * (2n choose n)\n\n * Sources:\n *  [1] https://brilliant.org/wiki/catalan-numbers/\n *  [2] https://en.wikipedia.org/wiki/Catalan_number\n\"\"\"\n\n\ndef catalan_numbers(upper_limit: int) -> \"list[int]\":\n    \"\"\"\n    Return a list of the Catalan number sequence from 0 through `upper_limit`.\n\n    >>> catalan_numbers(5)\n    [1, 1, 2, 5, 14, 42]\n    >>> catalan_numbers(2)\n    [1, 1, 2]\n    >>> catalan_numbers(-1)\n    Traceback (most recent call last):\n    ValueError: Limit for the Catalan sequence must be ≥ 0\n    \"\"\"\n    if upper_limit < 0:\n        raise ValueError(\"Limit for the Catalan sequence must be ≥ 0\")\n\n    catalan_list = [0] * (upper_limit + 1)\n\n    # Base case: C(0) = C(1) = 1\n    catalan_list[0] = 1\n    if upper_limit > 0:\n        catalan_list[1] = 1\n\n    # Recurrence relation: C(i) = sum(C(j).C(i-j-1)), from j = 0 to i\n    for i in range(2, upper_limit + 1):\n        for j in range(i):\n            catalan_list[i] += catalan_list[j] * catalan_list[i - j - 1]\n\n    return catalan_list\n\n\nif __name__ == \"__main__\":\n    print(\"\\n********* Catalan Numbers Using Dynamic Programming ************\\n\")\n    print(\"\\n*** Enter -1 at any time to quit ***\")\n    print(\"\\nEnter the upper limit (≥ 0) for the Catalan number sequence: \", end=\"\")\n    try:\n        while True:\n            N = int(input().strip())\n            if N < 0:\n                print(\"\\n********* Goodbye!! ************\")\n                break\n            else:\n                print(f\"The Catalan numbers from 0 through {N} are:\")\n                print(catalan_numbers(N))\n                print(\"Try another upper limit for the sequence: \", end=\"\")\n    except (NameError, ValueError):\n        print(\"\\n********* Invalid input, goodbye! ************\\n\")\n\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "dynamic_programming/climbing_stairs.py",
    "content": "#!/usr/bin/env python3\n\n\ndef climb_stairs(number_of_steps: int) -> int:\n    \"\"\"\n    LeetCdoe No.70: Climbing Stairs\n    Distinct ways to climb a number_of_steps staircase where each time you can either\n    climb 1 or 2 steps.\n\n    Args:\n        number_of_steps: number of steps on the staircase\n\n    Returns:\n        Distinct ways to climb a number_of_steps staircase\n\n    Raises:\n        AssertionError: number_of_steps not positive integer\n\n    >>> climb_stairs(3)\n    3\n    >>> climb_stairs(1)\n    1\n    >>> climb_stairs(-7)  # doctest: +ELLIPSIS\n    Traceback (most recent call last):\n        ...\n    AssertionError: number_of_steps needs to be positive integer, your input -7\n    \"\"\"\n    assert isinstance(number_of_steps, int) and number_of_steps > 0, (\n        f\"number_of_steps needs to be positive integer, your input {number_of_steps}\"\n    )\n    if number_of_steps == 1:\n        return 1\n    previous, current = 1, 1\n    for _ in range(number_of_steps - 1):\n        current, previous = current + previous, current\n    return current\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "dynamic_programming/combination_sum_iv.py",
    "content": "\"\"\"\nQuestion:\n    You are given an array of distinct integers and you have to tell how many\n    different ways of selecting the elements from the array are there such that\n    the sum of chosen elements is equal to the target number tar.\n\nExample\n\nInput:\n    * N = 3\n    * target = 5\n    * array = [1, 2, 5]\n\nOutput:\n    9\n\nApproach:\n    The basic idea is to go over recursively to find the way such that the sum\n    of chosen elements is `target`. For every element, we have two choices\n\n        1. Include the element in our set of chosen elements.\n        2. Don't include the element in our set of chosen elements.\n\"\"\"\n\n\ndef combination_sum_iv(array: list[int], target: int) -> int:\n    \"\"\"\n    Function checks the all possible combinations, and returns the count\n    of possible combination in exponential Time Complexity.\n\n    >>> combination_sum_iv([1,2,5], 5)\n    9\n    \"\"\"\n\n    def count_of_possible_combinations(target: int) -> int:\n        if target < 0:\n            return 0\n        if target == 0:\n            return 1\n        return sum(count_of_possible_combinations(target - item) for item in array)\n\n    return count_of_possible_combinations(target)\n\n\ndef combination_sum_iv_dp_array(array: list[int], target: int) -> int:\n    \"\"\"\n    Function checks the all possible combinations, and returns the count\n    of possible combination in O(N^2) Time Complexity as we are using Dynamic\n    programming array here.\n\n    >>> combination_sum_iv_dp_array([1,2,5], 5)\n    9\n    \"\"\"\n\n    def count_of_possible_combinations_with_dp_array(\n        target: int, dp_array: list[int]\n    ) -> int:\n        if target < 0:\n            return 0\n        if target == 0:\n            return 1\n        if dp_array[target] != -1:\n            return dp_array[target]\n        answer = sum(\n            count_of_possible_combinations_with_dp_array(target - item, dp_array)\n            for item in array\n        )\n        dp_array[target] = answer\n        return answer\n\n    dp_array = [-1] * (target + 1)\n    return count_of_possible_combinations_with_dp_array(target, dp_array)\n\n\ndef combination_sum_iv_bottom_up(n: int, array: list[int], target: int) -> int:\n    \"\"\"\n    Function checks the all possible combinations with using bottom up approach,\n    and returns the count of possible combination in O(N^2) Time Complexity\n    as we are using Dynamic programming array here.\n\n    >>> combination_sum_iv_bottom_up(3, [1,2,5], 5)\n    9\n    \"\"\"\n\n    dp_array = [0] * (target + 1)\n    dp_array[0] = 1\n\n    for i in range(1, target + 1):\n        for j in range(n):\n            if i - array[j] >= 0:\n                dp_array[i] += dp_array[i - array[j]]\n\n    return dp_array[target]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    target = 5\n    array = [1, 2, 5]\n    print(combination_sum_iv(array, target))\n"
  },
  {
    "path": "dynamic_programming/edit_distance.py",
    "content": "\"\"\"\nAuthor  : Turfa Auliarachman\nDate    : October 12, 2016\n\nThis is a pure Python implementation of Dynamic Programming solution to the edit\ndistance problem.\n\nThe problem is :\nGiven two strings A and B. Find the minimum number of operations to string B such that\nA = B. The permitted operations are removal,  insertion, and substitution.\n\"\"\"\n\n\nclass EditDistance:\n    \"\"\"\n    Use :\n    solver              = EditDistance()\n    editDistanceResult  = solver.solve(firstString, secondString)\n    \"\"\"\n\n    def __init__(self):\n        self.word1 = \"\"\n        self.word2 = \"\"\n        self.dp = []\n\n    def __min_dist_top_down_dp(self, m: int, n: int) -> int:\n        if m == -1:\n            return n + 1\n        elif n == -1:\n            return m + 1\n        elif self.dp[m][n] > -1:\n            return self.dp[m][n]\n        else:\n            if self.word1[m] == self.word2[n]:\n                self.dp[m][n] = self.__min_dist_top_down_dp(m - 1, n - 1)\n            else:\n                insert = self.__min_dist_top_down_dp(m, n - 1)\n                delete = self.__min_dist_top_down_dp(m - 1, n)\n                replace = self.__min_dist_top_down_dp(m - 1, n - 1)\n                self.dp[m][n] = 1 + min(insert, delete, replace)\n\n            return self.dp[m][n]\n\n    def min_dist_top_down(self, word1: str, word2: str) -> int:\n        \"\"\"\n        >>> EditDistance().min_dist_top_down(\"intention\", \"execution\")\n        5\n        >>> EditDistance().min_dist_top_down(\"intention\", \"\")\n        9\n        >>> EditDistance().min_dist_top_down(\"\", \"\")\n        0\n        \"\"\"\n        self.word1 = word1\n        self.word2 = word2\n        self.dp = [[-1 for _ in range(len(word2))] for _ in range(len(word1))]\n\n        return self.__min_dist_top_down_dp(len(word1) - 1, len(word2) - 1)\n\n    def min_dist_bottom_up(self, word1: str, word2: str) -> int:\n        \"\"\"\n        >>> EditDistance().min_dist_bottom_up(\"intention\", \"execution\")\n        5\n        >>> EditDistance().min_dist_bottom_up(\"intention\", \"\")\n        9\n        >>> EditDistance().min_dist_bottom_up(\"\", \"\")\n        0\n        \"\"\"\n        self.word1 = word1\n        self.word2 = word2\n        m = len(word1)\n        n = len(word2)\n        self.dp = [[0 for _ in range(n + 1)] for _ in range(m + 1)]\n\n        for i in range(m + 1):\n            for j in range(n + 1):\n                if i == 0:  # first string is empty\n                    self.dp[i][j] = j\n                elif j == 0:  # second string is empty\n                    self.dp[i][j] = i\n                elif word1[i - 1] == word2[j - 1]:  # last characters are equal\n                    self.dp[i][j] = self.dp[i - 1][j - 1]\n                else:\n                    insert = self.dp[i][j - 1]\n                    delete = self.dp[i - 1][j]\n                    replace = self.dp[i - 1][j - 1]\n                    self.dp[i][j] = 1 + min(insert, delete, replace)\n        return self.dp[m][n]\n\n\nif __name__ == \"__main__\":\n    solver = EditDistance()\n\n    print(\"****************** Testing Edit Distance DP Algorithm ******************\")\n    print()\n\n    S1 = input(\"Enter the first string: \").strip()\n    S2 = input(\"Enter the second string: \").strip()\n\n    print()\n    print(f\"The minimum edit distance is: {solver.min_dist_top_down(S1, S2)}\")\n    print(f\"The minimum edit distance is: {solver.min_dist_bottom_up(S1, S2)}\")\n    print()\n    print(\"*************** End of Testing Edit Distance DP Algorithm ***************\")\n"
  },
  {
    "path": "dynamic_programming/factorial.py",
    "content": "# Factorial of a number using memoization\n\nfrom functools import lru_cache\n\n\n@lru_cache\ndef factorial(num: int) -> int:\n    \"\"\"\n    >>> factorial(7)\n    5040\n    >>> factorial(-1)\n    Traceback (most recent call last):\n      ...\n    ValueError: Number should not be negative.\n    >>> [factorial(i) for i in range(10)]\n    [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880]\n    \"\"\"\n    if num < 0:\n        raise ValueError(\"Number should not be negative.\")\n\n    return 1 if num in (0, 1) else num * factorial(num - 1)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "dynamic_programming/fast_fibonacci.py",
    "content": "#!/usr/bin/env python3\n\n\"\"\"\nThis program calculates the nth Fibonacci number in O(log(n)).\nIt's possible to calculate F(1_000_000) in less than a second.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport sys\n\n\ndef fibonacci(n: int) -> int:\n    \"\"\"\n    return F(n)\n    >>> [fibonacci(i) for i in range(13)]\n    [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]\n    \"\"\"\n    if n < 0:\n        raise ValueError(\"Negative arguments are not supported\")\n    return _fib(n)[0]\n\n\n# returns (F(n), F(n-1))\ndef _fib(n: int) -> tuple[int, int]:\n    if n == 0:  # (F(0), F(1))\n        return (0, 1)\n\n    # F(2n) = F(n)[2F(n+1) - F(n)]\n    # F(2n+1) = F(n+1)^2+F(n)^2\n    a, b = _fib(n // 2)\n    c = a * (b * 2 - a)\n    d = a * a + b * b\n    return (d, c + d) if n % 2 else (c, d)\n\n\nif __name__ == \"__main__\":\n    n = int(sys.argv[1])\n    print(f\"fibonacci({n}) is {fibonacci(n)}\")\n"
  },
  {
    "path": "dynamic_programming/fibonacci.py",
    "content": "\"\"\"\nThis is a pure Python implementation of Dynamic Programming solution to the fibonacci\nsequence problem.\n\"\"\"\n\n\nclass Fibonacci:\n    def __init__(self) -> None:\n        self.sequence = [0, 1]\n\n    def get(self, index: int) -> list:\n        \"\"\"\n        Get the Fibonacci number of `index`. If the number does not exist,\n        calculate all missing numbers leading up to the number of `index`.\n\n        >>> Fibonacci().get(10)\n        [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]\n        >>> Fibonacci().get(5)\n        [0, 1, 1, 2, 3]\n        \"\"\"\n        if (difference := index - (len(self.sequence) - 2)) >= 1:\n            for _ in range(difference):\n                self.sequence.append(self.sequence[-1] + self.sequence[-2])\n        return self.sequence[:index]\n\n\ndef main() -> None:\n    print(\n        \"Fibonacci Series Using Dynamic Programming\\n\",\n        \"Enter the index of the Fibonacci number you want to calculate \",\n        \"in the prompt below. (To exit enter exit or Ctrl-C)\\n\",\n        sep=\"\",\n    )\n    fibonacci = Fibonacci()\n\n    while True:\n        prompt: str = input(\">> \")\n        if prompt in {\"exit\", \"quit\"}:\n            break\n\n        try:\n            index: int = int(prompt)\n        except ValueError:\n            print(\"Enter a number or 'exit'\")\n            continue\n\n        print(fibonacci.get(index))\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "dynamic_programming/fizz_buzz.py",
    "content": "# https://en.wikipedia.org/wiki/Fizz_buzz#Programming\n\n\ndef fizz_buzz(number: int, iterations: int) -> str:\n    \"\"\"\n    | Plays FizzBuzz.\n    | Prints Fizz if number is a multiple of ``3``.\n    | Prints Buzz if its a multiple of ``5``.\n    | Prints FizzBuzz if its a multiple of both ``3`` and ``5`` or ``15``.\n    | Else Prints The Number Itself.\n\n    >>> fizz_buzz(1,7)\n    '1 2 Fizz 4 Buzz Fizz 7 '\n    >>> fizz_buzz(1,0)\n    Traceback (most recent call last):\n      ...\n    ValueError: Iterations must be done more than 0 times to play FizzBuzz\n    >>> fizz_buzz(-5,5)\n    Traceback (most recent call last):\n        ...\n    ValueError: starting number must be\n                             and integer and be more than 0\n    >>> fizz_buzz(10,-5)\n    Traceback (most recent call last):\n        ...\n    ValueError: Iterations must be done more than 0 times to play FizzBuzz\n    >>> fizz_buzz(1.5,5)\n    Traceback (most recent call last):\n        ...\n    ValueError: starting number must be\n                             and integer and be more than 0\n    >>> fizz_buzz(1,5.5)\n    Traceback (most recent call last):\n        ...\n    ValueError: iterations must be defined as integers\n    \"\"\"\n    if not isinstance(iterations, int):\n        raise ValueError(\"iterations must be defined as integers\")\n    if not isinstance(number, int) or not number >= 1:\n        raise ValueError(\n            \"\"\"starting number must be\n                         and integer and be more than 0\"\"\"\n        )\n    if not iterations >= 1:\n        raise ValueError(\"Iterations must be done more than 0 times to play FizzBuzz\")\n\n    out = \"\"\n    while number <= iterations:\n        if number % 3 == 0:\n            out += \"Fizz\"\n        if number % 5 == 0:\n            out += \"Buzz\"\n        if 0 not in (number % 3, number % 5):\n            out += str(number)\n\n        # print(out)\n        number += 1\n        out += \" \"\n    return out\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "dynamic_programming/floyd_warshall.py",
    "content": "import math\r\n\r\n\r\nclass Graph:\r\n    def __init__(self, n=0):  # a graph with Node 0,1,...,N-1\r\n        self.n = n\r\n        self.w = [\r\n            [math.inf for j in range(n)] for i in range(n)\r\n        ]  # adjacency matrix for weight\r\n        self.dp = [\r\n            [math.inf for j in range(n)] for i in range(n)\r\n        ]  # dp[i][j] stores minimum distance from i to j\r\n\r\n    def add_edge(self, u, v, w):\r\n        \"\"\"\r\n        Adds a directed edge from node u\r\n        to node v with weight w.\r\n\r\n        >>> g = Graph(3)\r\n        >>> g.add_edge(0, 1, 5)\r\n        >>> g.dp[0][1]\r\n        5\r\n        \"\"\"\r\n        self.dp[u][v] = w\r\n\r\n    def floyd_warshall(self):\r\n        \"\"\"\r\n        Computes the shortest paths between all pairs of\r\n        nodes using the Floyd-Warshall algorithm.\r\n\r\n        >>> g = Graph(3)\r\n        >>> g.add_edge(0, 1, 1)\r\n        >>> g.add_edge(1, 2, 2)\r\n        >>> g.floyd_warshall()\r\n        >>> g.show_min(0, 2)\r\n        3\r\n        >>> g.show_min(2, 0)\r\n        inf\r\n        \"\"\"\r\n        for k in range(self.n):\r\n            for i in range(self.n):\r\n                for j in range(self.n):\r\n                    self.dp[i][j] = min(self.dp[i][j], self.dp[i][k] + self.dp[k][j])\r\n\r\n    def show_min(self, u, v):\r\n        \"\"\"\r\n        Returns the minimum distance from node u to node v.\r\n\r\n        >>> g = Graph(3)\r\n        >>> g.add_edge(0, 1, 3)\r\n        >>> g.add_edge(1, 2, 4)\r\n        >>> g.floyd_warshall()\r\n        >>> g.show_min(0, 2)\r\n        7\r\n        >>> g.show_min(1, 0)\r\n        inf\r\n        \"\"\"\r\n        return self.dp[u][v]\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n\r\n    # Example usage\r\n    graph = Graph(5)\r\n    graph.add_edge(0, 2, 9)\r\n    graph.add_edge(0, 4, 10)\r\n    graph.add_edge(1, 3, 5)\r\n    graph.add_edge(2, 3, 7)\r\n    graph.add_edge(3, 0, 10)\r\n    graph.add_edge(3, 1, 2)\r\n    graph.add_edge(3, 2, 1)\r\n    graph.add_edge(3, 4, 6)\r\n    graph.add_edge(4, 1, 3)\r\n    graph.add_edge(4, 2, 4)\r\n    graph.add_edge(4, 3, 9)\r\n    graph.floyd_warshall()\r\n    print(\r\n        graph.show_min(1, 4)\r\n    )  # Should output the minimum distance from node 1 to node 4\r\n    print(\r\n        graph.show_min(0, 3)\r\n    )  # Should output the minimum distance from node 0 to node 3\r\n"
  },
  {
    "path": "dynamic_programming/integer_partition.py",
    "content": "\"\"\"\nThe number of partitions of a number n into at least k parts equals the number of\npartitions into exactly k parts plus the number of partitions into at least k-1 parts.\nSubtracting 1 from each part of a partition of n into k parts gives a partition of n-k\ninto k parts. These two facts together are used for this algorithm.\n* https://en.wikipedia.org/wiki/Partition_(number_theory)\n* https://en.wikipedia.org/wiki/Partition_function_(number_theory)\n\"\"\"\n\n\ndef partition(m: int) -> int:\n    \"\"\"\n    >>> partition(5)\n    7\n    >>> partition(7)\n    15\n    >>> partition(100)\n    190569292\n    >>> partition(1_000)\n    24061467864032622473692149727991\n    >>> partition(-7)\n    Traceback (most recent call last):\n        ...\n    IndexError: list index out of range\n    >>> partition(0)\n    Traceback (most recent call last):\n        ...\n    IndexError: list assignment index out of range\n    >>> partition(7.8)\n    Traceback (most recent call last):\n        ...\n    TypeError: 'float' object cannot be interpreted as an integer\n    \"\"\"\n    memo: list[list[int]] = [[0 for _ in range(m)] for _ in range(m + 1)]\n    for i in range(m + 1):\n        memo[i][0] = 1\n\n    for n in range(m + 1):\n        for k in range(1, m):\n            memo[n][k] += memo[n][k - 1]\n            if n - k > 0:\n                memo[n][k] += memo[n - k - 1][k]\n\n    return memo[m][m - 1]\n\n\nif __name__ == \"__main__\":\n    import sys\n\n    if len(sys.argv) == 1:\n        try:\n            n = int(input(\"Enter a number: \").strip())\n            print(partition(n))\n        except ValueError:\n            print(\"Please enter a number.\")\n    else:\n        try:\n            n = int(sys.argv[1])\n            print(partition(n))\n        except ValueError:\n            print(\"Please pass a number.\")\n"
  },
  {
    "path": "dynamic_programming/iterating_through_submasks.py",
    "content": "\"\"\"\nAuthor : Syed Faizan (3rd Year Student IIIT Pune)\ngithub : faizan2700\nYou are given a bitmask m and you want to efficiently iterate through all of\nits submasks. The mask s is submask of m if only bits that were included in\nbitmask are set\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef list_of_submasks(mask: int) -> list[int]:\n    \"\"\"\n    Args:\n        mask : number which shows mask ( always integer > 0, zero does not have any\n            submasks )\n\n    Returns:\n        all_submasks : the list of submasks of mask (mask s is called submask of mask\n        m if only bits that were included in original mask are set\n\n    Raises:\n        AssertionError: mask not positive integer\n\n    >>> list_of_submasks(15)\n    [15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]\n    >>> list_of_submasks(13)\n    [13, 12, 9, 8, 5, 4, 1]\n    >>> list_of_submasks(-7)  # doctest: +ELLIPSIS\n    Traceback (most recent call last):\n        ...\n    AssertionError: mask needs to be positive integer, your input -7\n    >>> list_of_submasks(0)  # doctest: +ELLIPSIS\n    Traceback (most recent call last):\n        ...\n    AssertionError: mask needs to be positive integer, your input 0\n\n    \"\"\"\n\n    assert isinstance(mask, int) and mask > 0, (\n        f\"mask needs to be positive integer, your input {mask}\"\n    )\n\n    \"\"\"\n    first submask iterated will be mask itself then operation will be performed\n    to get other submasks till we reach empty submask that is zero ( zero is not\n    included in final submasks list )\n    \"\"\"\n    all_submasks = []\n    submask = mask\n\n    while submask:\n        all_submasks.append(submask)\n        submask = (submask - 1) & mask\n\n    return all_submasks\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "dynamic_programming/k_means_clustering_tensorflow.py",
    "content": "from random import shuffle\n\nimport tensorflow as tf\nfrom numpy import array\n\n\ndef tf_k_means_cluster(vectors, noofclusters):\n    \"\"\"\n    K-Means Clustering using TensorFlow.\n    'vectors' should be a n*k 2-D NumPy array, where n is the number\n    of vectors of dimensionality k.\n    'noofclusters' should be an integer.\n    \"\"\"\n\n    noofclusters = int(noofclusters)\n    assert noofclusters < len(vectors)\n\n    # Find out the dimensionality\n    dim = len(vectors[0])\n\n    # Will help select random centroids from among the available vectors\n    vector_indices = list(range(len(vectors)))\n    shuffle(vector_indices)\n\n    # GRAPH OF COMPUTATION\n    # We initialize a new graph and set it as the default during each run\n    # of this algorithm. This ensures that as this function is called\n    # multiple times, the default graph doesn't keep getting crowded with\n    # unused ops and Variables from previous function calls.\n\n    graph = tf.Graph()\n\n    with graph.as_default():\n        # SESSION OF COMPUTATION\n\n        sess = tf.Session()\n\n        ##CONSTRUCTING THE ELEMENTS OF COMPUTATION\n\n        ##First lets ensure we have a Variable vector for each centroid,\n        ##initialized to one of the vectors from the available data points\n        centroids = [\n            tf.Variable(vectors[vector_indices[i]]) for i in range(noofclusters)\n        ]\n        ##These nodes will assign the centroid Variables the appropriate\n        ##values\n        centroid_value = tf.placeholder(\"float64\", [dim])\n        cent_assigns = []\n        for centroid in centroids:\n            cent_assigns.append(tf.assign(centroid, centroid_value))\n\n        ##Variables for cluster assignments of individual vectors(initialized\n        ##to 0 at first)\n        assignments = [tf.Variable(0) for i in range(len(vectors))]\n        ##These nodes will assign an assignment Variable the appropriate\n        ##value\n        assignment_value = tf.placeholder(\"int32\")\n        cluster_assigns = []\n        for assignment in assignments:\n            cluster_assigns.append(tf.assign(assignment, assignment_value))\n\n        ##Now lets construct the node that will compute the mean\n        # The placeholder for the input\n        mean_input = tf.placeholder(\"float\", [None, dim])\n        # The Node/op takes the input and computes a mean along the 0th\n        # dimension, i.e. the list of input vectors\n        mean_op = tf.reduce_mean(mean_input, 0)\n\n        ##Node for computing Euclidean distances\n        # Placeholders for input\n        v1 = tf.placeholder(\"float\", [dim])\n        v2 = tf.placeholder(\"float\", [dim])\n        euclid_dist = tf.sqrt(tf.reduce_sum(tf.pow(tf.sub(v1, v2), 2)))\n\n        ##This node will figure out which cluster to assign a vector to,\n        ##based on Euclidean distances of the vector from the centroids.\n        # Placeholder for input\n        centroid_distances = tf.placeholder(\"float\", [noofclusters])\n        cluster_assignment = tf.argmin(centroid_distances, 0)\n\n        ##INITIALIZING STATE VARIABLES\n\n        ##This will help initialization of all Variables defined with respect\n        ##to the graph. The Variable-initializer should be defined after\n        ##all the Variables have been constructed, so that each of them\n        ##will be included in the initialization.\n        init_op = tf.initialize_all_variables()\n\n        # Initialize all variables\n        sess.run(init_op)\n\n        ##CLUSTERING ITERATIONS\n\n        # Now perform the Expectation-Maximization steps of K-Means clustering\n        # iterations. To keep things simple, we will only do a set number of\n        # iterations, instead of using a Stopping Criterion.\n        noofiterations = 100\n        for _ in range(noofiterations):\n            ##EXPECTATION STEP\n            ##Based on the centroid locations till last iteration, compute\n            ##the _expected_ centroid assignments.\n            # Iterate over each vector\n            for vector_n in range(len(vectors)):\n                vect = vectors[vector_n]\n                # Compute Euclidean distance between this vector and each\n                # centroid. Remember that this list cannot be named\n                #'centroid_distances', since that is the input to the\n                # cluster assignment node.\n                distances = [\n                    sess.run(euclid_dist, feed_dict={v1: vect, v2: sess.run(centroid)})\n                    for centroid in centroids\n                ]\n                # Now use the cluster assignment node, with the distances\n                # as the input\n                assignment = sess.run(\n                    cluster_assignment, feed_dict={centroid_distances: distances}\n                )\n                # Now assign the value to the appropriate state variable\n                sess.run(\n                    cluster_assigns[vector_n], feed_dict={assignment_value: assignment}\n                )\n\n            ##MAXIMIZATION STEP\n            # Based on the expected state computed from the Expectation Step,\n            # compute the locations of the centroids so as to maximize the\n            # overall objective of minimizing within-cluster Sum-of-Squares\n            for cluster_n in range(noofclusters):\n                # Collect all the vectors assigned to this cluster\n                assigned_vects = [\n                    vectors[i]\n                    for i in range(len(vectors))\n                    if sess.run(assignments[i]) == cluster_n\n                ]\n                # Compute new centroid location\n                new_location = sess.run(\n                    mean_op, feed_dict={mean_input: array(assigned_vects)}\n                )\n                # Assign value to appropriate variable\n                sess.run(\n                    cent_assigns[cluster_n], feed_dict={centroid_value: new_location}\n                )\n\n        # Return centroids and assignments\n        centroids = sess.run(centroids)\n        assignments = sess.run(assignments)\n        return centroids, assignments\n"
  },
  {
    "path": "dynamic_programming/knapsack.py",
    "content": "\"\"\"\nGiven weights and values of n items, put these items in a knapsack of\ncapacity W to get the maximum total value in the knapsack.\n\nNote that only the integer weights 0-1 knapsack problem is solvable\nusing dynamic programming.\n\"\"\"\n\n\ndef mf_knapsack(i, wt, val, j):\n    \"\"\"\n    This code involves the concept of memory functions. Here we solve the subproblems\n    which are needed unlike the below example\n    F is a 2D array with ``-1`` s filled up\n    \"\"\"\n    global f  # a global dp table for knapsack\n    if f[i][j] < 0:\n        if j < wt[i - 1]:\n            val = mf_knapsack(i - 1, wt, val, j)\n        else:\n            val = max(\n                mf_knapsack(i - 1, wt, val, j),\n                mf_knapsack(i - 1, wt, val, j - wt[i - 1]) + val[i - 1],\n            )\n        f[i][j] = val\n    return f[i][j]\n\n\ndef knapsack(w, wt, val, n):\n    dp = [[0] * (w + 1) for _ in range(n + 1)]\n\n    for i in range(1, n + 1):\n        for w_ in range(1, w + 1):\n            if wt[i - 1] <= w_:\n                dp[i][w_] = max(val[i - 1] + dp[i - 1][w_ - wt[i - 1]], dp[i - 1][w_])\n            else:\n                dp[i][w_] = dp[i - 1][w_]\n\n    return dp[n][w_], dp\n\n\ndef knapsack_with_example_solution(w: int, wt: list, val: list):\n    \"\"\"\n    Solves the integer weights knapsack problem returns one of\n    the several possible optimal subsets.\n\n    Parameters\n    ----------\n\n    * `w`: int, the total maximum weight for the given knapsack problem.\n    * `wt`: list, the vector of weights for all items where ``wt[i]`` is the weight\n       of the ``i``-th item.\n    * `val`: list, the vector of values for all items where ``val[i]`` is the value\n      of the ``i``-th item\n\n    Returns\n    -------\n\n    * `optimal_val`: float, the optimal value for the given knapsack problem\n    * `example_optional_set`: set, the indices of one of the optimal subsets\n      which gave rise to the optimal value.\n\n    Examples\n    --------\n\n    >>> knapsack_with_example_solution(10, [1, 3, 5, 2], [10, 20, 100, 22])\n    (142, {2, 3, 4})\n    >>> knapsack_with_example_solution(6, [4, 3, 2, 3], [3, 2, 4, 4])\n    (8, {3, 4})\n    >>> knapsack_with_example_solution(6, [4, 3, 2, 3], [3, 2, 4])\n    Traceback (most recent call last):\n        ...\n    ValueError: The number of weights must be the same as the number of values.\n    But got 4 weights and 3 values\n    \"\"\"\n    if not (isinstance(wt, (list, tuple)) and isinstance(val, (list, tuple))):\n        raise ValueError(\n            \"Both the weights and values vectors must be either lists or tuples\"\n        )\n\n    num_items = len(wt)\n    if num_items != len(val):\n        msg = (\n            \"The number of weights must be the same as the number of values.\\n\"\n            f\"But got {num_items} weights and {len(val)} values\"\n        )\n        raise ValueError(msg)\n    for i in range(num_items):\n        if not isinstance(wt[i], int):\n            msg = (\n                \"All weights must be integers but got weight of \"\n                f\"type {type(wt[i])} at index {i}\"\n            )\n            raise TypeError(msg)\n\n    optimal_val, dp_table = knapsack(w, wt, val, num_items)\n    example_optional_set: set = set()\n    _construct_solution(dp_table, wt, num_items, w, example_optional_set)\n\n    return optimal_val, example_optional_set\n\n\ndef _construct_solution(dp: list, wt: list, i: int, j: int, optimal_set: set):\n    \"\"\"\n    Recursively reconstructs one of the optimal subsets given\n    a filled DP table and the vector of weights\n\n    Parameters\n    ----------\n\n    * `dp`: list of list, the table of a solved integer weight dynamic programming\n      problem\n    * `wt`: list or tuple, the vector of weights of the items\n    * `i`: int, the index of the item under consideration\n    * `j`: int, the current possible maximum weight\n    * `optimal_set`: set, the optimal subset so far. This gets modified by the function.\n\n    Returns\n    -------\n\n    ``None``\n    \"\"\"\n    # for the current item i at a maximum weight j to be part of an optimal subset,\n    # the optimal value at (i, j) must be greater than the optimal value at (i-1, j).\n    # where i - 1 means considering only the previous items at the given maximum weight\n    if i > 0 and j > 0:\n        if dp[i - 1][j] == dp[i][j]:\n            _construct_solution(dp, wt, i - 1, j, optimal_set)\n        else:\n            optimal_set.add(i)\n            _construct_solution(dp, wt, i - 1, j - wt[i - 1], optimal_set)\n\n\nif __name__ == \"__main__\":\n    \"\"\"\n    Adding test case for knapsack\n    \"\"\"\n    val = [3, 2, 4, 4]\n    wt = [4, 3, 2, 3]\n    n = 4\n    w = 6\n    f = [[0] * (w + 1)] + [[0] + [-1] * (w + 1) for _ in range(n + 1)]\n    optimal_solution, _ = knapsack(w, wt, val, n)\n    print(optimal_solution)\n    print(mf_knapsack(n, wt, val, w))  # switched the n and w\n\n    # testing the dynamic programming problem with example\n    # the optimal subset for the above example are items 3 and 4\n    optimal_solution, optimal_subset = knapsack_with_example_solution(w, wt, val)\n    assert optimal_solution == 8\n    assert optimal_subset == {3, 4}\n    print(\"optimal_value = \", optimal_solution)\n    print(\"An optimal subset corresponding to the optimal value\", optimal_subset)\n"
  },
  {
    "path": "dynamic_programming/largest_divisible_subset.py",
    "content": "from __future__ import annotations\n\n\ndef largest_divisible_subset(items: list[int]) -> list[int]:\n    \"\"\"\n    Algorithm to find the biggest subset in the given array such that for any 2 elements\n    x and y in the subset, either x divides y or y divides x.\n    >>> largest_divisible_subset([1, 16, 7, 8, 4])\n    [16, 8, 4, 1]\n    >>> largest_divisible_subset([1, 2, 3])\n    [2, 1]\n    >>> largest_divisible_subset([-1, -2, -3])\n    [-3]\n    >>> largest_divisible_subset([1, 2, 4, 8])\n    [8, 4, 2, 1]\n    >>> largest_divisible_subset((1, 2, 4, 8))\n    [8, 4, 2, 1]\n    >>> largest_divisible_subset([1, 1, 1])\n    [1, 1, 1]\n    >>> largest_divisible_subset([0, 0, 0])\n    [0, 0, 0]\n    >>> largest_divisible_subset([-1, -1, -1])\n    [-1, -1, -1]\n    >>> largest_divisible_subset([])\n    []\n    \"\"\"\n    # Sort the array in ascending order as the sequence does not matter we only have to\n    # pick up a subset.\n    items = sorted(items)\n\n    number_of_items = len(items)\n\n    # Initialize memo with 1s and hash with increasing numbers\n    memo = [1] * number_of_items\n    hash_array = list(range(number_of_items))\n\n    # Iterate through the array\n    for i, item in enumerate(items):\n        for prev_index in range(i):\n            if ((items[prev_index] != 0 and item % items[prev_index]) == 0) and (\n                (1 + memo[prev_index]) > memo[i]\n            ):\n                memo[i] = 1 + memo[prev_index]\n                hash_array[i] = prev_index\n\n    ans = -1\n    last_index = -1\n\n    # Find the maximum length and its corresponding index\n    for i, memo_item in enumerate(memo):\n        if memo_item > ans:\n            ans = memo_item\n            last_index = i\n\n    # Reconstruct the divisible subset\n    if last_index == -1:\n        return []\n    result = [items[last_index]]\n    while hash_array[last_index] != last_index:\n        last_index = hash_array[last_index]\n        result.append(items[last_index])\n\n    return result\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n\n    items = [1, 16, 7, 8, 4]\n    print(\n        f\"The longest divisible subset of {items} is {largest_divisible_subset(items)}.\"\n    )\n"
  },
  {
    "path": "dynamic_programming/longest_common_subsequence.py",
    "content": "\"\"\"\nLCS Problem Statement: Given two sequences, find the length of longest subsequence\npresent in both of them.  A subsequence is a sequence that appears in the same relative\norder, but not necessarily continuous.\nExample:\"abc\", \"abg\" are subsequences of \"abcdefgh\".\n\"\"\"\n\n\ndef longest_common_subsequence(x: str, y: str):\n    \"\"\"\n    Finds the longest common subsequence between two strings. Also returns the\n    The subsequence found\n\n    Parameters\n    ----------\n\n    x: str, one of the strings\n    y: str, the other string\n\n    Returns\n    -------\n    L[m][n]: int, the length of the longest subsequence. Also equal to len(seq)\n    Seq: str, the subsequence found\n\n    >>> longest_common_subsequence(\"programming\", \"gaming\")\n    (6, 'gaming')\n    >>> longest_common_subsequence(\"physics\", \"smartphone\")\n    (2, 'ph')\n    >>> longest_common_subsequence(\"computer\", \"food\")\n    (1, 'o')\n    >>> longest_common_subsequence(\"\", \"abc\")  # One string is empty\n    (0, '')\n    >>> longest_common_subsequence(\"abc\", \"\")  # Other string is empty\n    (0, '')\n    >>> longest_common_subsequence(\"\", \"\")  # Both strings are empty\n    (0, '')\n    >>> longest_common_subsequence(\"abc\", \"def\")  # No common subsequence\n    (0, '')\n    >>> longest_common_subsequence(\"abc\", \"abc\")  # Identical strings\n    (3, 'abc')\n    >>> longest_common_subsequence(\"a\", \"a\")  # Single character match\n    (1, 'a')\n    >>> longest_common_subsequence(\"a\", \"b\")  # Single character no match\n    (0, '')\n    >>> longest_common_subsequence(\"abcdef\", \"ace\")  # Interleaved subsequence\n    (3, 'ace')\n    >>> longest_common_subsequence(\"ABCD\", \"ACBD\")  # No repeated characters\n    (3, 'ABD')\n    \"\"\"\n    # find the length of strings\n\n    assert x is not None\n    assert y is not None\n\n    m = len(x)\n    n = len(y)\n\n    # declaring the array for storing the dp values\n    dp = [[0] * (n + 1) for _ in range(m + 1)]\n\n    for i in range(1, m + 1):\n        for j in range(1, n + 1):\n            match = 1 if x[i - 1] == y[j - 1] else 0\n\n            dp[i][j] = max(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1] + match)\n\n    seq = \"\"\n    i, j = m, n\n    while i > 0 and j > 0:\n        match = 1 if x[i - 1] == y[j - 1] else 0\n\n        if dp[i][j] == dp[i - 1][j - 1] + match:\n            if match == 1:\n                seq = x[i - 1] + seq\n            i -= 1\n            j -= 1\n        elif dp[i][j] == dp[i - 1][j]:\n            i -= 1\n        else:\n            j -= 1\n\n    return dp[m][n], seq\n\n\nif __name__ == \"__main__\":\n    a = \"AGGTAB\"\n    b = \"GXTXAYB\"\n    expected_ln = 4\n    expected_subseq = \"GTAB\"\n\n    ln, subseq = longest_common_subsequence(a, b)\n    print(\"len =\", ln, \", sub-sequence =\", subseq)\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "dynamic_programming/longest_common_substring.py",
    "content": "\"\"\"\nLongest Common Substring Problem Statement:\n    Given two sequences, find the\n    longest common substring present in both of them. A substring is\n    necessarily continuous.\n\nExample:\n    ``abcdef`` and ``xabded`` have two longest common substrings, ``ab`` or ``de``.\n    Therefore, algorithm should return any one of them.\n\"\"\"\n\n\ndef longest_common_substring(text1: str, text2: str) -> str:\n    \"\"\"\n    Finds the longest common substring between two strings.\n\n    >>> longest_common_substring(\"\", \"\")\n    ''\n    >>> longest_common_substring(\"a\",\"\")\n    ''\n    >>> longest_common_substring(\"\", \"a\")\n    ''\n    >>> longest_common_substring(\"a\", \"a\")\n    'a'\n    >>> longest_common_substring(\"abcdef\", \"bcd\")\n    'bcd'\n    >>> longest_common_substring(\"abcdef\", \"xabded\")\n    'ab'\n    >>> longest_common_substring(\"GeeksforGeeks\", \"GeeksQuiz\")\n    'Geeks'\n    >>> longest_common_substring(\"abcdxyz\", \"xyzabcd\")\n    'abcd'\n    >>> longest_common_substring(\"zxabcdezy\", \"yzabcdezx\")\n    'abcdez'\n    >>> longest_common_substring(\"OldSite:GeeksforGeeks.org\", \"NewSite:GeeksQuiz.com\")\n    'Site:Geeks'\n    >>> longest_common_substring(1, 1)\n    Traceback (most recent call last):\n        ...\n    ValueError: longest_common_substring() takes two strings for inputs\n    \"\"\"\n\n    if not (isinstance(text1, str) and isinstance(text2, str)):\n        raise ValueError(\"longest_common_substring() takes two strings for inputs\")\n\n    if not text1 or not text2:\n        return \"\"\n\n    text1_length = len(text1)\n    text2_length = len(text2)\n\n    dp = [[0] * (text2_length + 1) for _ in range(text1_length + 1)]\n    end_pos = 0\n    max_length = 0\n\n    for i in range(1, text1_length + 1):\n        for j in range(1, text2_length + 1):\n            if text1[i - 1] == text2[j - 1]:\n                dp[i][j] = 1 + dp[i - 1][j - 1]\n                if dp[i][j] > max_length:\n                    end_pos = i\n                    max_length = dp[i][j]\n\n    return text1[end_pos - max_length : end_pos]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "dynamic_programming/longest_increasing_subsequence.py",
    "content": "\"\"\"\nAuthor  : Mehdi ALAOUI\n\nThis is a pure Python implementation of Dynamic Programming solution to the longest\nincreasing subsequence of a given sequence.\n\nThe problem is:\n    Given an array, to find the longest and increasing sub-array in that given array and\n    return it.\n\nExample:\n    ``[10, 22, 9, 33, 21, 50, 41, 60, 80]`` as input will return\n    ``[10, 22, 33, 41, 60, 80]`` as output\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef longest_subsequence(array: list[int]) -> list[int]:  # This function is recursive\n    \"\"\"\n    Some examples\n\n    >>> longest_subsequence([10, 22, 9, 33, 21, 50, 41, 60, 80])\n    [10, 22, 33, 41, 60, 80]\n    >>> longest_subsequence([4, 8, 7, 5, 1, 12, 2, 3, 9])\n    [1, 2, 3, 9]\n    >>> longest_subsequence([28, 26, 12, 23, 35, 39])\n    [12, 23, 35, 39]\n    >>> longest_subsequence([9, 8, 7, 6, 5, 7])\n    [5, 7]\n    >>> longest_subsequence([1, 1, 1])\n    [1, 1, 1]\n    >>> longest_subsequence([])\n    []\n    \"\"\"\n    array_length = len(array)\n    # If the array contains only one element, we return it (it's the stop condition of\n    # recursion)\n    if array_length <= 1:\n        return array\n        # Else\n    pivot = array[0]\n    is_found = False\n    i = 1\n    longest_subseq: list[int] = []\n    while not is_found and i < array_length:\n        if array[i] < pivot:\n            is_found = True\n            temp_array = array[i:]\n            temp_array = longest_subsequence(temp_array)\n            if len(temp_array) > len(longest_subseq):\n                longest_subseq = temp_array\n        else:\n            i += 1\n\n    temp_array = [element for element in array[1:] if element >= pivot]\n    temp_array = [pivot, *longest_subsequence(temp_array)]\n    if len(temp_array) > len(longest_subseq):\n        return temp_array\n    else:\n        return longest_subseq\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "dynamic_programming/longest_increasing_subsequence_iterative.py",
    "content": "\"\"\"\nAuthor  : Sanjay Muthu <https://github.com/XenoBytesX>\n\nThis is a pure Python implementation of Dynamic Programming solution to the longest\nincreasing subsequence of a given sequence.\n\nThe problem is:\n    Given an array, to find the longest and increasing sub-array in that given array and\n    return it.\n\nExample:\n    ``[10, 22, 9, 33, 21, 50, 41, 60, 80]`` as input will return\n    ``[10, 22, 33, 50, 60, 80]`` as output\n\"\"\"\n\nfrom __future__ import annotations\n\nimport copy\n\n\ndef longest_subsequence(array: list[int]) -> list[int]:\n    \"\"\"\n    Some examples\n\n    >>> longest_subsequence([10, 22, 9, 33, 21, 50, 41, 60, 80])\n    [10, 22, 33, 50, 60, 80]\n    >>> longest_subsequence([4, 8, 7, 5, 1, 12, 2, 3, 9])\n    [1, 2, 3, 9]\n    >>> longest_subsequence([9, 8, 7, 6, 5, 7])\n    [7, 7]\n    >>> longest_subsequence([28, 26, 12, 23, 35, 39])\n    [12, 23, 35, 39]\n    >>> longest_subsequence([1, 1, 1])\n    [1, 1, 1]\n    >>> longest_subsequence([])\n    []\n    \"\"\"\n    n = len(array)\n    # The longest increasing subsequence ending at array[i]\n    longest_increasing_subsequence = []\n    for i in range(n):\n        longest_increasing_subsequence.append([array[i]])\n\n    for i in range(1, n):\n        for prev in range(i):\n            # If array[prev] is less than or equal to array[i], then\n            # longest_increasing_subsequence[prev] + array[i]\n            # is a valid increasing subsequence\n\n            # longest_increasing_subsequence[i] is only set to\n            # longest_increasing_subsequence[prev] + array[i] if the length is longer.\n\n            if array[prev] <= array[i] and len(\n                longest_increasing_subsequence[prev]\n            ) + 1 > len(longest_increasing_subsequence[i]):\n                longest_increasing_subsequence[i] = copy.copy(\n                    longest_increasing_subsequence[prev]\n                )\n                longest_increasing_subsequence[i].append(array[i])\n\n    result: list[int] = []\n    for i in range(n):\n        if len(longest_increasing_subsequence[i]) > len(result):\n            result = longest_increasing_subsequence[i]\n\n    return result\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "dynamic_programming/longest_increasing_subsequence_o_nlogn.py",
    "content": "#############################\n# Author: Aravind Kashyap\n# File: lis.py\n# comments: This programme outputs the Longest Strictly Increasing Subsequence in\n#           O(NLogN) Where N is the Number of elements in the list\n#############################\nfrom __future__ import annotations\n\n\ndef ceil_index(v, left, right, key):\n    while right - left > 1:\n        middle = (left + right) // 2\n        if v[middle] >= key:\n            right = middle\n        else:\n            left = middle\n    return right\n\n\ndef longest_increasing_subsequence_length(v: list[int]) -> int:\n    \"\"\"\n    >>> longest_increasing_subsequence_length([2, 5, 3, 7, 11, 8, 10, 13, 6])\n    6\n    >>> longest_increasing_subsequence_length([])\n    0\n    >>> longest_increasing_subsequence_length([0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13,\n    ...                                     3, 11, 7, 15])\n    6\n    >>> longest_increasing_subsequence_length([5, 4, 3, 2, 1])\n    1\n    \"\"\"\n    if len(v) == 0:\n        return 0\n\n    tail = [0] * len(v)\n    length = 1\n\n    tail[0] = v[0]\n\n    for i in range(1, len(v)):\n        if v[i] < tail[0]:\n            tail[0] = v[i]\n        elif v[i] > tail[length - 1]:\n            tail[length] = v[i]\n            length += 1\n        else:\n            tail[ceil_index(tail, -1, length - 1, v[i])] = v[i]\n\n    return length\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "dynamic_programming/longest_palindromic_subsequence.py",
    "content": "\"\"\"\nauthor: Sanket Kittad\nGiven a string s, find the longest palindromic subsequence's length in s.\nInput: s = \"bbbab\"\nOutput: 4\nExplanation: One possible longest palindromic subsequence is \"bbbb\".\nLeetcode link: https://leetcode.com/problems/longest-palindromic-subsequence/description/\n\"\"\"\n\n\ndef longest_palindromic_subsequence(input_string: str) -> int:\n    \"\"\"\n    This function returns the longest palindromic subsequence in a string\n    >>> longest_palindromic_subsequence(\"bbbab\")\n    4\n    >>> longest_palindromic_subsequence(\"bbabcbcab\")\n    7\n    \"\"\"\n    n = len(input_string)\n    rev = input_string[::-1]\n    m = len(rev)\n    dp = [[-1] * (m + 1) for i in range(n + 1)]\n    for i in range(n + 1):\n        dp[i][0] = 0\n    for i in range(m + 1):\n        dp[0][i] = 0\n\n    # create and initialise dp array\n    for i in range(1, n + 1):\n        for j in range(1, m + 1):\n            # If characters at i and j are the same\n            # include them in the palindromic subsequence\n            if input_string[i - 1] == rev[j - 1]:\n                dp[i][j] = 1 + dp[i - 1][j - 1]\n            else:\n                dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])\n\n    return dp[n][m]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "dynamic_programming/matrix_chain_multiplication.py",
    "content": "\"\"\"\n| Find the minimum number of multiplications needed to multiply chain of matrices.\n| Reference: https://www.geeksforgeeks.org/matrix-chain-multiplication-dp-8/\n\nThe algorithm has interesting real-world applications.\n\nExample:\n  1. Image transformations in Computer Graphics as images are composed of matrix.\n  2. Solve complex polynomial equations in the field of algebra using least processing\n     power.\n  3. Calculate overall impact of macroeconomic decisions as economic equations involve a\n     number of variables.\n  4. Self-driving car navigation can be made more accurate as matrix multiplication can\n     accurately determine position and orientation of obstacles in short time.\n\nPython doctests can be run with the following command::\n\n  python -m doctest -v matrix_chain_multiply.py\n\nGiven a sequence ``arr[]`` that represents chain of 2D matrices such that the dimension\nof the ``i`` th matrix is ``arr[i-1]*arr[i]``.\nSo suppose ``arr = [40, 20, 30, 10, 30]`` means we have ``4`` matrices of dimensions\n``40*20``, ``20*30``, ``30*10`` and ``10*30``.\n\n``matrix_chain_multiply()`` returns an integer denoting minimum number of\nmultiplications to multiply the chain.\n\nWe do not need to perform actual multiplication here.\nWe only need to decide the order in which to perform the multiplication.\n\nHints:\n  1. Number of multiplications (ie cost) to multiply ``2`` matrices\n     of size ``m*p`` and ``p*n`` is ``m*p*n``.\n  2. Cost of matrix multiplication is not associative ie ``(M1*M2)*M3 != M1*(M2*M3)``\n  3. Matrix multiplication is not commutative. So, ``M1*M2`` does not mean ``M2*M1``\n     can be done.\n  4. To determine the required order, we can try different combinations.\n\nSo, this problem has overlapping sub-problems and can be solved using recursion.\nWe use Dynamic Programming for optimal time complexity.\n\nExample input:\n    ``arr = [40, 20, 30, 10, 30]``\noutput:\n    ``26000``\n\"\"\"\n\nfrom collections.abc import Iterator\nfrom contextlib import contextmanager\nfrom functools import cache\nfrom sys import maxsize\n\n\ndef matrix_chain_multiply(arr: list[int]) -> int:\n    \"\"\"\n    Find the minimum number of multiplcations required to multiply the chain of matrices\n\n    Args:\n        `arr`: The input array of integers.\n\n    Returns:\n        Minimum number of multiplications needed to multiply the chain\n\n    Examples:\n\n    >>> matrix_chain_multiply([1, 2, 3, 4, 3])\n    30\n    >>> matrix_chain_multiply([10])\n    0\n    >>> matrix_chain_multiply([10, 20])\n    0\n    >>> matrix_chain_multiply([19, 2, 19])\n    722\n    >>> matrix_chain_multiply(list(range(1, 100)))\n    323398\n    >>> # matrix_chain_multiply(list(range(1, 251)))\n    # 2626798\n    \"\"\"\n    if len(arr) < 2:\n        return 0\n    # initialising 2D dp matrix\n    n = len(arr)\n    dp = [[maxsize for j in range(n)] for i in range(n)]\n    # we want minimum cost of multiplication of matrices\n    # of dimension (i*k) and (k*j). This cost is arr[i-1]*arr[k]*arr[j].\n    for i in range(n - 1, 0, -1):\n        for j in range(i, n):\n            if i == j:\n                dp[i][j] = 0\n                continue\n            for k in range(i, j):\n                dp[i][j] = min(\n                    dp[i][j], dp[i][k] + dp[k + 1][j] + arr[i - 1] * arr[k] * arr[j]\n                )\n\n    return dp[1][n - 1]\n\n\ndef matrix_chain_order(dims: list[int]) -> int:\n    \"\"\"\n    Source: https://en.wikipedia.org/wiki/Matrix_chain_multiplication\n\n    The dynamic programming solution is faster than cached the recursive solution and\n    can handle larger inputs.\n\n    >>> matrix_chain_order([1, 2, 3, 4, 3])\n    30\n    >>> matrix_chain_order([10])\n    0\n    >>> matrix_chain_order([10, 20])\n    0\n    >>> matrix_chain_order([19, 2, 19])\n    722\n    >>> matrix_chain_order(list(range(1, 100)))\n    323398\n    >>> # matrix_chain_order(list(range(1, 251)))  # Max before RecursionError is raised\n    # 2626798\n    \"\"\"\n\n    @cache\n    def a(i: int, j: int) -> int:\n        return min(\n            (a(i, k) + dims[i] * dims[k] * dims[j] + a(k, j) for k in range(i + 1, j)),\n            default=0,\n        )\n\n    return a(0, len(dims) - 1)\n\n\n@contextmanager\ndef elapsed_time(msg: str) -> Iterator:\n    # print(f\"Starting: {msg}\")\n    from time import perf_counter_ns\n\n    start = perf_counter_ns()\n    yield\n    print(f\"Finished: {msg} in {(perf_counter_ns() - start) / 10**9} seconds.\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    with elapsed_time(\"matrix_chain_order\"):\n        print(f\"{matrix_chain_order(list(range(1, 251))) = }\")\n    with elapsed_time(\"matrix_chain_multiply\"):\n        print(f\"{matrix_chain_multiply(list(range(1, 251))) = }\")\n    with elapsed_time(\"matrix_chain_order\"):\n        print(f\"{matrix_chain_order(list(range(1, 251))) = }\")\n    with elapsed_time(\"matrix_chain_multiply\"):\n        print(f\"{matrix_chain_multiply(list(range(1, 251))) = }\")\n"
  },
  {
    "path": "dynamic_programming/matrix_chain_order.py",
    "content": "import sys\n\n\"\"\"\nDynamic Programming\nImplementation of Matrix Chain Multiplication\nTime Complexity: O(n^3)\nSpace Complexity: O(n^2)\n\nReference: https://en.wikipedia.org/wiki/Matrix_chain_multiplication\n\"\"\"\n\n\ndef matrix_chain_order(array: list[int]) -> tuple[list[list[int]], list[list[int]]]:\n    \"\"\"\n    >>> matrix_chain_order([10, 30, 5])\n    ([[0, 0, 0], [0, 0, 1500], [0, 0, 0]], [[0, 0, 0], [0, 0, 1], [0, 0, 0]])\n    \"\"\"\n    n = len(array)\n    matrix = [[0 for _ in range(n)] for _ in range(n)]\n    sol = [[0 for _ in range(n)] for _ in range(n)]\n\n    for chain_length in range(2, n):\n        for a in range(1, n - chain_length + 1):\n            b = a + chain_length - 1\n\n            matrix[a][b] = sys.maxsize\n            for c in range(a, b):\n                cost = (\n                    matrix[a][c] + matrix[c + 1][b] + array[a - 1] * array[c] * array[b]\n                )\n                if cost < matrix[a][b]:\n                    matrix[a][b] = cost\n                    sol[a][b] = c\n    return matrix, sol\n\n\ndef print_optimal_solution(optimal_solution: list[list[int]], i: int, j: int):\n    \"\"\"\n    Print order of matrix with Ai as Matrix.\n    \"\"\"\n\n    if i == j:\n        print(\"A\" + str(i), end=\" \")\n    else:\n        print(\"(\", end=\" \")\n        print_optimal_solution(optimal_solution, i, optimal_solution[i][j])\n        print_optimal_solution(optimal_solution, optimal_solution[i][j] + 1, j)\n        print(\")\", end=\" \")\n\n\ndef main():\n    \"\"\"\n    Size of matrix created from array [30, 35, 15, 5, 10, 20, 25] will be:\n    30*35 35*15 15*5 5*10 10*20 20*25\n    \"\"\"\n\n    array = [30, 35, 15, 5, 10, 20, 25]\n    n = len(array)\n\n    matrix, optimal_solution = matrix_chain_order(array)\n\n    print(\"No. of Operation required: \" + str(matrix[1][n - 1]))\n    print_optimal_solution(optimal_solution, 1, n - 1)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "dynamic_programming/max_non_adjacent_sum.py",
    "content": "# Video Explanation: https://www.youtube.com/watch?v=6w60Zi1NtL8&feature=emb_logo\n\nfrom __future__ import annotations\n\n\ndef maximum_non_adjacent_sum(nums: list[int]) -> int:\n    \"\"\"\n    Find the maximum non-adjacent sum of the integers in the nums input list\n\n    >>> maximum_non_adjacent_sum([1, 2, 3])\n    4\n    >>> maximum_non_adjacent_sum([1, 5, 3, 7, 2, 2, 6])\n    18\n    >>> maximum_non_adjacent_sum([-1, -5, -3, -7, -2, -2, -6])\n    0\n    >>> maximum_non_adjacent_sum([499, 500, -3, -7, -2, -2, -6])\n    500\n    \"\"\"\n    if not nums:\n        return 0\n    max_including = nums[0]\n    max_excluding = 0\n    for num in nums[1:]:\n        max_including, max_excluding = (\n            max_excluding + num,\n            max(max_including, max_excluding),\n        )\n    return max(max_excluding, max_including)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "dynamic_programming/max_product_subarray.py",
    "content": "def max_product_subarray(numbers: list[int]) -> int:\n    \"\"\"\n    Returns the maximum product that can be obtained by multiplying a\n    contiguous subarray of the given integer list `numbers`.\n\n    Example:\n\n    >>> max_product_subarray([2, 3, -2, 4])\n    6\n    >>> max_product_subarray((-2, 0, -1))\n    0\n    >>> max_product_subarray([2, 3, -2, 4, -1])\n    48\n    >>> max_product_subarray([-1])\n    -1\n    >>> max_product_subarray([0])\n    0\n    >>> max_product_subarray([])\n    0\n    >>> max_product_subarray(\"\")\n    0\n    >>> max_product_subarray(None)\n    0\n    >>> max_product_subarray([2, 3, -2, 4.5, -1])\n    Traceback (most recent call last):\n        ...\n    ValueError: numbers must be an iterable of integers\n    >>> max_product_subarray(\"ABC\")\n    Traceback (most recent call last):\n        ...\n    ValueError: numbers must be an iterable of integers\n    \"\"\"\n    if not numbers:\n        return 0\n\n    if not isinstance(numbers, (list, tuple)) or not all(\n        isinstance(number, int) for number in numbers\n    ):\n        raise ValueError(\"numbers must be an iterable of integers\")\n\n    max_till_now = min_till_now = max_prod = numbers[0]\n\n    for i in range(1, len(numbers)):\n        # update the maximum and minimum subarray products\n        number = numbers[i]\n        if number < 0:\n            max_till_now, min_till_now = min_till_now, max_till_now\n        max_till_now = max(number, max_till_now * number)\n        min_till_now = min(number, min_till_now * number)\n\n        # update the maximum product found till now\n        max_prod = max(max_prod, max_till_now)\n\n    return max_prod\n"
  },
  {
    "path": "dynamic_programming/max_subarray_sum.py",
    "content": "\"\"\"\nThe maximum subarray sum problem is the task of finding the maximum sum that can be\nobtained from a contiguous subarray within a given array of numbers. For example, given\nthe array [-2, 1, -3, 4, -1, 2, 1, -5, 4], the contiguous subarray with the maximum sum\nis [4, -1, 2, 1], so the maximum subarray sum is 6.\n\nKadane's algorithm is a simple dynamic programming algorithm that solves the maximum\nsubarray sum problem in O(n) time and O(1) space.\n\nReference: https://en.wikipedia.org/wiki/Maximum_subarray_problem\n\"\"\"\n\nfrom collections.abc import Sequence\n\n\ndef max_subarray_sum(\n    arr: Sequence[float], allow_empty_subarrays: bool = False\n) -> float:\n    \"\"\"\n    Solves the maximum subarray sum problem using Kadane's algorithm.\n    :param arr: the given array of numbers\n    :param allow_empty_subarrays: if True, then the algorithm considers empty subarrays\n\n    >>> max_subarray_sum([2, 8, 9])\n    19\n    >>> max_subarray_sum([0, 0])\n    0\n    >>> max_subarray_sum([-1.0, 0.0, 1.0])\n    1.0\n    >>> max_subarray_sum([1, 2, 3, 4, -2])\n    10\n    >>> max_subarray_sum([-2, 1, -3, 4, -1, 2, 1, -5, 4])\n    6\n    >>> max_subarray_sum([2, 3, -9, 8, -2])\n    8\n    >>> max_subarray_sum([-2, -3, -1, -4, -6])\n    -1\n    >>> max_subarray_sum([-2, -3, -1, -4, -6], allow_empty_subarrays=True)\n    0\n    >>> max_subarray_sum([])\n    0\n    \"\"\"\n    if not arr:\n        return 0\n\n    max_sum = 0 if allow_empty_subarrays else float(\"-inf\")\n    curr_sum = 0.0\n    for num in arr:\n        curr_sum = max(0 if allow_empty_subarrays else num, curr_sum + num)\n        max_sum = max(max_sum, curr_sum)\n\n    return max_sum\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n\n    nums = [-2, 1, -3, 4, -1, 2, 1, -5, 4]\n    print(f\"{max_subarray_sum(nums) = }\")\n"
  },
  {
    "path": "dynamic_programming/min_distance_up_bottom.py",
    "content": "\"\"\"\nAuthor  : Alexander Pantyukhin\nDate    : October 14, 2022\nThis is an implementation of the up-bottom approach to find edit distance.\nThe implementation was tested on Leetcode: https://leetcode.com/problems/edit-distance/\n\nLevinstein distance\nDynamic Programming: up -> down.\n\"\"\"\n\nimport functools\n\n\ndef min_distance_up_bottom(word1: str, word2: str) -> int:\n    \"\"\"\n    >>> min_distance_up_bottom(\"intention\", \"execution\")\n    5\n    >>> min_distance_up_bottom(\"intention\", \"\")\n    9\n    >>> min_distance_up_bottom(\"\", \"\")\n    0\n    >>> min_distance_up_bottom(\"zooicoarchaeologist\", \"zoologist\")\n    10\n    \"\"\"\n    len_word1 = len(word1)\n    len_word2 = len(word2)\n\n    @functools.cache\n    def min_distance(index1: int, index2: int) -> int:\n        # if first word index overflows - delete all from the second word\n        if index1 >= len_word1:\n            return len_word2 - index2\n        # if second word index overflows - delete all from the first word\n        if index2 >= len_word2:\n            return len_word1 - index1\n        diff = int(word1[index1] != word2[index2])  # current letters not identical\n        return min(\n            1 + min_distance(index1 + 1, index2),\n            1 + min_distance(index1, index2 + 1),\n            diff + min_distance(index1 + 1, index2 + 1),\n        )\n\n    return min_distance(0, 0)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "dynamic_programming/minimum_coin_change.py",
    "content": "\"\"\"\nYou have m types of coins available in infinite quantities\nwhere the value of each coins is given in the array S=[S0,... Sm-1]\nCan you determine number of ways of making change for n units using\nthe given types of coins?\nhttps://www.hackerrank.com/challenges/coin-change/problem\n\"\"\"\n\n\ndef dp_count(s, n):\n    \"\"\"\n    >>> dp_count([1, 2, 3], 4)\n    4\n    >>> dp_count([1, 2, 3], 7)\n    8\n    >>> dp_count([2, 5, 3, 6], 10)\n    5\n    >>> dp_count([10], 99)\n    0\n    >>> dp_count([4, 5, 6], 0)\n    1\n    >>> dp_count([1, 2, 3], -5)\n    0\n    \"\"\"\n    if n < 0:\n        return 0\n    # table[i] represents the number of ways to get to amount i\n    table = [0] * (n + 1)\n\n    # There is exactly 1 way to get to zero(You pick no coins).\n    table[0] = 1\n\n    # Pick all coins one by one and update table[] values\n    # after the index greater than or equal to the value of the\n    # picked coin\n    for coin_val in s:\n        for j in range(coin_val, n + 1):\n            table[j] += table[j - coin_val]\n\n    return table[n]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "dynamic_programming/minimum_cost_path.py",
    "content": "# Youtube Explanation: https://www.youtube.com/watch?v=lBRtnuxg-gU\n\nfrom __future__ import annotations\n\n\ndef minimum_cost_path(matrix: list[list[int]]) -> int:\n    \"\"\"\n    Find the minimum cost traced by all possible paths from top left to bottom right in\n    a given matrix\n\n    >>> minimum_cost_path([[2, 1], [3, 1], [4, 2]])\n    6\n\n    >>> minimum_cost_path([[2, 1, 4], [2, 1, 3], [3, 2, 1]])\n    7\n    \"\"\"\n\n    # preprocessing the first row\n    for i in range(1, len(matrix[0])):\n        matrix[0][i] += matrix[0][i - 1]\n\n    # preprocessing the first column\n    for i in range(1, len(matrix)):\n        matrix[i][0] += matrix[i - 1][0]\n\n    # updating the path cost for current position\n    for i in range(1, len(matrix)):\n        for j in range(1, len(matrix[0])):\n            matrix[i][j] += min(matrix[i - 1][j], matrix[i][j - 1])\n\n    return matrix[-1][-1]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "dynamic_programming/minimum_partition.py",
    "content": "\"\"\"\nPartition a set into two subsets such that the difference of subset sums is minimum\n\"\"\"\n\n\ndef find_min(numbers: list[int]) -> int:\n    \"\"\"\n    >>> find_min([1, 2, 3, 4, 5])\n    1\n    >>> find_min([5, 5, 5, 5, 5])\n    5\n    >>> find_min([5, 5, 5, 5])\n    0\n    >>> find_min([3])\n    3\n    >>> find_min([])\n    0\n    >>> find_min([1, 2, 3, 4])\n    0\n    >>> find_min([0, 0, 0, 0])\n    0\n    >>> find_min([-1, -5, 5, 1])\n    0\n    >>> find_min([-1, -5, 5, 1])\n    0\n    >>> find_min([9, 9, 9, 9, 9])\n    9\n    >>> find_min([1, 5, 10, 3])\n    1\n    >>> find_min([-1, 0, 1])\n    0\n    >>> find_min(range(10, 0, -1))\n    1\n    >>> find_min([-1])\n    Traceback (most recent call last):\n        --\n    IndexError: list assignment index out of range\n    >>> find_min([0, 0, 0, 1, 2, -4])\n    Traceback (most recent call last):\n        ...\n    IndexError: list assignment index out of range\n    >>> find_min([-1, -5, -10, -3])\n    Traceback (most recent call last):\n        ...\n    IndexError: list assignment index out of range\n    \"\"\"\n    n = len(numbers)\n    s = sum(numbers)\n\n    dp = [[False for x in range(s + 1)] for y in range(n + 1)]\n\n    for i in range(n + 1):\n        dp[i][0] = True\n\n    for i in range(1, s + 1):\n        dp[0][i] = False\n\n    for i in range(1, n + 1):\n        for j in range(1, s + 1):\n            dp[i][j] = dp[i - 1][j]\n\n            if numbers[i - 1] <= j:\n                dp[i][j] = dp[i][j] or dp[i - 1][j - numbers[i - 1]]\n\n    for j in range(int(s / 2), -1, -1):\n        if dp[n][j] is True:\n            diff = s - 2 * j\n            break\n\n    return diff\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "dynamic_programming/minimum_size_subarray_sum.py",
    "content": "import sys\n\n\ndef minimum_subarray_sum(target: int, numbers: list[int]) -> int:\n    \"\"\"\n    Return the length of the shortest contiguous subarray in a list of numbers whose sum\n    is at least target.  Reference: https://stackoverflow.com/questions/8269916\n\n    >>> minimum_subarray_sum(7, [2, 3, 1, 2, 4, 3])\n    2\n    >>> minimum_subarray_sum(7, [2, 3, -1, 2, 4, -3])\n    4\n    >>> minimum_subarray_sum(11, [1, 1, 1, 1, 1, 1, 1, 1])\n    0\n    >>> minimum_subarray_sum(10, [1, 2, 3, 4, 5, 6, 7])\n    2\n    >>> minimum_subarray_sum(5, [1, 1, 1, 1, 1, 5])\n    1\n    >>> minimum_subarray_sum(0, [])\n    0\n    >>> minimum_subarray_sum(0, [1, 2, 3])\n    1\n    >>> minimum_subarray_sum(10, [10, 20, 30])\n    1\n    >>> minimum_subarray_sum(7, [1, 1, 1, 1, 1, 1, 10])\n    1\n    >>> minimum_subarray_sum(6, [])\n    0\n    >>> minimum_subarray_sum(2, [1, 2, 3])\n    1\n    >>> minimum_subarray_sum(-6, [])\n    0\n    >>> minimum_subarray_sum(-6, [3, 4, 5])\n    1\n    >>> minimum_subarray_sum(8, None)\n    0\n    >>> minimum_subarray_sum(2, \"ABC\")\n    Traceback (most recent call last):\n        ...\n    ValueError: numbers must be an iterable of integers\n    \"\"\"\n    if not numbers:\n        return 0\n    if target == 0 and target in numbers:\n        return 0\n    if not isinstance(numbers, (list, tuple)) or not all(\n        isinstance(number, int) for number in numbers\n    ):\n        raise ValueError(\"numbers must be an iterable of integers\")\n\n    left = right = curr_sum = 0\n    min_len = sys.maxsize\n\n    while right < len(numbers):\n        curr_sum += numbers[right]\n        while curr_sum >= target and left <= right:\n            min_len = min(min_len, right - left + 1)\n            curr_sum -= numbers[left]\n            left += 1\n        right += 1\n\n    return 0 if min_len == sys.maxsize else min_len\n"
  },
  {
    "path": "dynamic_programming/minimum_squares_to_represent_a_number.py",
    "content": "import math\nimport sys\n\n\ndef minimum_squares_to_represent_a_number(number: int) -> int:\n    \"\"\"\n    Count the number of minimum squares to represent a number\n\n    >>> minimum_squares_to_represent_a_number(25)\n    1\n    >>> minimum_squares_to_represent_a_number(37)\n    2\n    >>> minimum_squares_to_represent_a_number(21)\n    3\n    >>> minimum_squares_to_represent_a_number(58)\n    2\n    >>> minimum_squares_to_represent_a_number(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: the value of input must not be a negative number\n    >>> minimum_squares_to_represent_a_number(0)\n    1\n    >>> minimum_squares_to_represent_a_number(12.34)\n    Traceback (most recent call last):\n        ...\n    ValueError: the value of input must be a natural number\n    \"\"\"\n    if number != int(number):\n        raise ValueError(\"the value of input must be a natural number\")\n    if number < 0:\n        raise ValueError(\"the value of input must not be a negative number\")\n    if number == 0:\n        return 1\n    answers = [-1] * (number + 1)\n    answers[0] = 0\n    for i in range(1, number + 1):\n        answer = sys.maxsize\n        root = int(math.sqrt(i))\n        for j in range(1, root + 1):\n            current_answer = 1 + answers[i - (j**2)]\n            answer = min(answer, current_answer)\n        answers[i] = answer\n    return answers[number]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "dynamic_programming/minimum_steps_to_one.py",
    "content": "\"\"\"\nYouTube Explanation: https://www.youtube.com/watch?v=f2xi3c1S95M\n\nGiven an integer n, return the minimum steps from n to 1\n\nAVAILABLE STEPS:\n    * Decrement by 1\n    * if n is divisible by 2, divide by 2\n    * if n is divisible by 3, divide by 3\n\n\nExample 1: n = 10\n10 -> 9 -> 3 -> 1\nResult: 3 steps\n\nExample 2: n = 15\n15 -> 5 -> 4 -> 2 -> 1\nResult: 4 steps\n\nExample 3: n = 6\n6 -> 2 -> 1\nResult: 2 step\n\"\"\"\n\nfrom __future__ import annotations\n\n__author__ = \"Alexander Joslin\"\n\n\ndef min_steps_to_one(number: int) -> int:\n    \"\"\"\n    Minimum steps to 1 implemented using tabulation.\n    >>> min_steps_to_one(10)\n    3\n    >>> min_steps_to_one(15)\n    4\n    >>> min_steps_to_one(6)\n    2\n\n    :param number:\n    :return int:\n    \"\"\"\n\n    if number <= 0:\n        msg = f\"n must be greater than 0. Got n = {number}\"\n        raise ValueError(msg)\n\n    table = [number + 1] * (number + 1)\n\n    # starting position\n    table[1] = 0\n    for i in range(1, number):\n        table[i + 1] = min(table[i + 1], table[i] + 1)\n        # check if out of bounds\n        if i * 2 <= number:\n            table[i * 2] = min(table[i * 2], table[i] + 1)\n        # check if out of bounds\n        if i * 3 <= number:\n            table[i * 3] = min(table[i * 3], table[i] + 1)\n    return table[number]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "dynamic_programming/minimum_tickets_cost.py",
    "content": "\"\"\"\nAuthor  : Alexander Pantyukhin\nDate    : November 1, 2022\n\nTask:\nGiven a list of days when you need to travel. Each day is integer from 1 to 365.\nYou are able to use tickets for 1 day, 7 days and 30 days.\nEach ticket has a cost.\n\nFind the minimum cost you need to travel every day in the given list of days.\n\nImplementation notes:\nimplementation Dynamic Programming up bottom approach.\n\nRuntime complexity: O(n)\n\nThe implementation was tested on the\nleetcode: https://leetcode.com/problems/minimum-cost-for-tickets/\n\n\nMinimum Cost For Tickets\nDynamic Programming: up -> down.\n\"\"\"\n\nimport functools\n\n\ndef mincost_tickets(days: list[int], costs: list[int]) -> int:\n    \"\"\"\n    >>> mincost_tickets([1, 4, 6, 7, 8, 20], [2, 7, 15])\n    11\n\n    >>> mincost_tickets([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 30, 31],  [2, 7, 15])\n    17\n\n    >>> mincost_tickets([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 30, 31], [2, 90, 150])\n    24\n\n    >>> mincost_tickets([2], [2, 90, 150])\n    2\n\n    >>> mincost_tickets([], [2, 90, 150])\n    0\n\n    >>> mincost_tickets('hello', [2, 90, 150])\n    Traceback (most recent call last):\n     ...\n    ValueError: The parameter days should be a list of integers\n\n    >>> mincost_tickets([], 'world')\n    Traceback (most recent call last):\n     ...\n    ValueError: The parameter costs should be a list of three integers\n\n    >>> mincost_tickets([0.25, 2, 3, 4, 5, 6, 7, 8, 9, 10, 30, 31], [2, 90, 150])\n    Traceback (most recent call last):\n     ...\n    ValueError: The parameter days should be a list of integers\n\n    >>> mincost_tickets([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 30, 31], [2, 0.9, 150])\n    Traceback (most recent call last):\n     ...\n    ValueError: The parameter costs should be a list of three integers\n\n    >>> mincost_tickets([-1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 30, 31], [2, 90, 150])\n    Traceback (most recent call last):\n     ...\n    ValueError: All days elements should be greater than 0\n\n    >>> mincost_tickets([2, 367], [2, 90, 150])\n    Traceback (most recent call last):\n     ...\n    ValueError: All days elements should be less than 366\n\n    >>> mincost_tickets([2, 3, 4, 5, 6, 7, 8, 9, 10, 30, 31], [])\n    Traceback (most recent call last):\n     ...\n    ValueError: The parameter costs should be a list of three integers\n\n    >>> mincost_tickets([], [])\n    Traceback (most recent call last):\n     ...\n    ValueError: The parameter costs should be a list of three integers\n\n    >>> mincost_tickets([2, 3, 4, 5, 6, 7, 8, 9, 10, 30, 31], [1, 2, 3, 4])\n    Traceback (most recent call last):\n     ...\n    ValueError: The parameter costs should be a list of three integers\n    \"\"\"\n\n    # Validation\n    if not isinstance(days, list) or not all(isinstance(day, int) for day in days):\n        raise ValueError(\"The parameter days should be a list of integers\")\n\n    if len(costs) != 3 or not all(isinstance(cost, int) for cost in costs):\n        raise ValueError(\"The parameter costs should be a list of three integers\")\n\n    if len(days) == 0:\n        return 0\n\n    if min(days) <= 0:\n        raise ValueError(\"All days elements should be greater than 0\")\n\n    if max(days) >= 366:\n        raise ValueError(\"All days elements should be less than 366\")\n\n    days_set = set(days)\n\n    @functools.cache\n    def dynamic_programming(index: int) -> int:\n        if index > 365:\n            return 0\n\n        if index not in days_set:\n            return dynamic_programming(index + 1)\n\n        return min(\n            costs[0] + dynamic_programming(index + 1),\n            costs[1] + dynamic_programming(index + 7),\n            costs[2] + dynamic_programming(index + 30),\n        )\n\n    return dynamic_programming(1)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "dynamic_programming/narcissistic_number.py",
    "content": "\"\"\"\nFind all narcissistic numbers up to a given limit using dynamic programming.\n\nA narcissistic number (also known as an Armstrong number or plus perfect number)\nis a number that is the sum of its own digits each raised to the power of the\nnumber of digits.\n\nFor example, 153 is a narcissistic number because 153 = 1^3 + 5^3 + 3^3.\n\nThis implementation uses dynamic programming with memoization to efficiently\ncompute digit powers and find all narcissistic numbers up to a specified limit.\n\nThe DP optimization caches digit^power calculations. When searching through many\nnumbers, the same digit power calculations occur repeatedly (e.g., 153, 351, 135\nall need 1^3, 5^3, 3^3). Memoization avoids these redundant calculations.\n\nExamples of narcissistic numbers:\n    Single digit: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9\n    Three digit: 153, 370, 371, 407\n    Four digit: 1634, 8208, 9474\n    Five digit: 54748, 92727, 93084\n\nReference: https://en.wikipedia.org/wiki/Narcissistic_number\n\"\"\"\n\n\ndef find_narcissistic_numbers(limit: int) -> list[int]:\n    \"\"\"\n    Find all narcissistic numbers up to the given limit using dynamic programming.\n\n    This function uses memoization to cache digit power calculations, avoiding\n    redundant computations across different numbers with the same digit count.\n\n    Args:\n        limit: The upper bound for searching narcissistic numbers (exclusive)\n\n    Returns:\n        list[int]: A sorted list of all narcissistic numbers below the limit\n\n    Examples:\n        >>> find_narcissistic_numbers(10)\n        [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n        >>> find_narcissistic_numbers(160)\n        [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 153]\n        >>> find_narcissistic_numbers(400)\n        [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371]\n        >>> find_narcissistic_numbers(1000)\n        [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407]\n        >>> find_narcissistic_numbers(10000)\n        [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 1634, 8208, 9474]\n        >>> find_narcissistic_numbers(1)\n        [0]\n        >>> find_narcissistic_numbers(0)\n        []\n    \"\"\"\n    if limit <= 0:\n        return []\n\n    narcissistic_nums = []\n\n    # Memoization: cache[(power, digit)] = digit^power\n    # This avoids recalculating the same power for different numbers\n    power_cache: dict[tuple[int, int], int] = {}\n\n    def get_digit_power(digit: int, power: int) -> int:\n        \"\"\"Get digit^power using memoization (DP optimization).\"\"\"\n        if (power, digit) not in power_cache:\n            power_cache[(power, digit)] = digit**power\n        return power_cache[(power, digit)]\n\n    # Check each number up to the limit\n    for number in range(limit):\n        # Count digits\n        num_digits = len(str(number))\n\n        # Calculate sum of powered digits using memoized powers\n        remaining = number\n        digit_sum = 0\n        while remaining > 0:\n            digit = remaining % 10\n            digit_sum += get_digit_power(digit, num_digits)\n            remaining //= 10\n\n        # Check if narcissistic\n        if digit_sum == number:\n            narcissistic_nums.append(number)\n\n    return narcissistic_nums\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    # Demonstrate the dynamic programming approach\n    print(\"Finding all narcissistic numbers up to 10000:\")\n    print(\"(Using memoization to cache digit power calculations)\")\n    print()\n\n    narcissistic_numbers = find_narcissistic_numbers(10000)\n    print(f\"Found {len(narcissistic_numbers)} narcissistic numbers:\")\n    print(narcissistic_numbers)\n"
  },
  {
    "path": "dynamic_programming/optimal_binary_search_tree.py",
    "content": "#!/usr/bin/env python3\n\n# This Python program implements an optimal binary search tree (abbreviated BST)\n# building dynamic programming algorithm that delivers O(n^2) performance.\n#\n# The goal of the optimal BST problem is to build a low-cost BST for a\n# given set of nodes, each with its own key and frequency. The frequency\n# of the node is defined as how many time the node is being searched.\n# The search cost of binary search tree is given by this formula:\n#\n# cost(1, n) = sum{i = 1 to n}((depth(node_i) + 1) * node_i_freq)\n#\n# where n is number of nodes in the BST. The characteristic of low-cost\n# BSTs is having a faster overall search time than other implementations.\n# The reason for their fast search time is that the nodes with high\n# frequencies will be placed near the root of the tree while the nodes\n# with low frequencies will be placed near the leaves of the tree thus\n# reducing search time in the most frequent instances.\nimport sys\nfrom random import randint\n\n\nclass Node:\n    \"\"\"Binary Search Tree Node\"\"\"\n\n    def __init__(self, key, freq):\n        self.key = key\n        self.freq = freq\n\n    def __str__(self):\n        \"\"\"\n        >>> str(Node(1, 2))\n        'Node(key=1, freq=2)'\n        \"\"\"\n        return f\"Node(key={self.key}, freq={self.freq})\"\n\n\ndef print_binary_search_tree(root, key, i, j, parent, is_left):\n    \"\"\"\n    Recursive function to print a BST from a root table.\n\n    >>> key = [3, 8, 9, 10, 17, 21]\n    >>> root = [[0, 1, 1, 1, 1, 1], [0, 1, 1, 1, 1, 3], [0, 0, 2, 3, 3, 3], \\\n                [0, 0, 0, 3, 3, 3], [0, 0, 0, 0, 4, 5], [0, 0, 0, 0, 0, 5]]\n    >>> print_binary_search_tree(root, key, 0, 5, -1, False)\n    8 is the root of the binary search tree.\n    3 is the left child of key 8.\n    10 is the right child of key 8.\n    9 is the left child of key 10.\n    21 is the right child of key 10.\n    17 is the left child of key 21.\n    \"\"\"\n    if i > j or i < 0 or j > len(root) - 1:\n        return\n\n    node = root[i][j]\n    if parent == -1:  # root does not have a parent\n        print(f\"{key[node]} is the root of the binary search tree.\")\n    elif is_left:\n        print(f\"{key[node]} is the left child of key {parent}.\")\n    else:\n        print(f\"{key[node]} is the right child of key {parent}.\")\n\n    print_binary_search_tree(root, key, i, node - 1, key[node], True)\n    print_binary_search_tree(root, key, node + 1, j, key[node], False)\n\n\ndef find_optimal_binary_search_tree(nodes):\n    \"\"\"\n    This function calculates and prints the optimal binary search tree.\n    The dynamic programming algorithm below runs in O(n^2) time.\n    Implemented from CLRS (Introduction to Algorithms) book.\n    https://en.wikipedia.org/wiki/Introduction_to_Algorithms\n\n    >>> find_optimal_binary_search_tree([Node(12, 8), Node(10, 34), Node(20, 50), \\\n                                         Node(42, 3), Node(25, 40), Node(37, 30)])\n    Binary search tree nodes:\n    Node(key=10, freq=34)\n    Node(key=12, freq=8)\n    Node(key=20, freq=50)\n    Node(key=25, freq=40)\n    Node(key=37, freq=30)\n    Node(key=42, freq=3)\n    <BLANKLINE>\n    The cost of optimal BST for given tree nodes is 324.\n    20 is the root of the binary search tree.\n    10 is the left child of key 20.\n    12 is the right child of key 10.\n    25 is the right child of key 20.\n    37 is the right child of key 25.\n    42 is the right child of key 37.\n    \"\"\"\n    # Tree nodes must be sorted first, the code below sorts the keys in\n    # increasing order and rearrange its frequencies accordingly.\n    nodes.sort(key=lambda node: node.key)\n\n    n = len(nodes)\n\n    keys = [nodes[i].key for i in range(n)]\n    freqs = [nodes[i].freq for i in range(n)]\n\n    # This 2D array stores the overall tree cost (which's as minimized as possible);\n    # for a single key, cost is equal to frequency of the key.\n    dp = [[freqs[i] if i == j else 0 for j in range(n)] for i in range(n)]\n    # sum[i][j] stores the sum of key frequencies between i and j inclusive in nodes\n    # array\n    total = [[freqs[i] if i == j else 0 for j in range(n)] for i in range(n)]\n    # stores tree roots that will be used later for constructing binary search tree\n    root = [[i if i == j else 0 for j in range(n)] for i in range(n)]\n\n    for interval_length in range(2, n + 1):\n        for i in range(n - interval_length + 1):\n            j = i + interval_length - 1\n\n            dp[i][j] = sys.maxsize  # set the value to \"infinity\"\n            total[i][j] = total[i][j - 1] + freqs[j]\n\n            # Apply Knuth's optimization\n            # Loop without optimization: for r in range(i, j + 1):\n            for r in range(root[i][j - 1], root[i + 1][j] + 1):  # r is a temporal root\n                left = dp[i][r - 1] if r != i else 0  # optimal cost for left subtree\n                right = dp[r + 1][j] if r != j else 0  # optimal cost for right subtree\n                cost = left + total[i][j] + right\n\n                if dp[i][j] > cost:\n                    dp[i][j] = cost\n                    root[i][j] = r\n\n    print(\"Binary search tree nodes:\")\n    for node in nodes:\n        print(node)\n\n    print(f\"\\nThe cost of optimal BST for given tree nodes is {dp[0][n - 1]}.\")\n    print_binary_search_tree(root, keys, 0, n - 1, -1, False)\n\n\ndef main():\n    # A sample binary search tree\n    nodes = [Node(i, randint(1, 50)) for i in range(10, 0, -1)]\n    find_optimal_binary_search_tree(nodes)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "dynamic_programming/palindrome_partitioning.py",
    "content": "\"\"\"\nGiven a string s, partition s such that every substring of the\npartition is a palindrome.\nFind the minimum cuts needed for a palindrome partitioning of s.\n\nTime Complexity: O(n^2)\nSpace Complexity: O(n^2)\nFor other explanations refer to: https://www.youtube.com/watch?v=_H8V5hJUGd0\n\"\"\"\n\n\ndef find_minimum_partitions(string: str) -> int:\n    \"\"\"\n    Returns the minimum cuts needed for a palindrome partitioning of string\n\n    >>> find_minimum_partitions(\"aab\")\n    1\n    >>> find_minimum_partitions(\"aaa\")\n    0\n    >>> find_minimum_partitions(\"ababbbabbababa\")\n    3\n    \"\"\"\n    length = len(string)\n    cut = [0] * length\n    is_palindromic = [[False for i in range(length)] for j in range(length)]\n    for i, c in enumerate(string):\n        mincut = i\n        for j in range(i + 1):\n            if c == string[j] and (i - j < 2 or is_palindromic[j + 1][i - 1]):\n                is_palindromic[j][i] = True\n                mincut = min(mincut, 0 if j == 0 else (cut[j - 1] + 1))\n        cut[i] = mincut\n    return cut[length - 1]\n\n\nif __name__ == \"__main__\":\n    s = input(\"Enter the string: \").strip()\n    ans = find_minimum_partitions(s)\n    print(f\"Minimum number of partitions required for the '{s}' is {ans}\")\n"
  },
  {
    "path": "dynamic_programming/range_sum_query.py",
    "content": "\"\"\"\nAuthor: Sanjay Muthu <https://github.com/XenoBytesX>\n\nThis is an implementation of the Dynamic Programming solution to the Range Sum Query.\n\nThe problem statement is:\n    Given an array and q queries,\n    each query stating you to find the sum of elements from l to r (inclusive)\n\nExample:\n    arr = [1, 4, 6, 2, 61, 12]\n    queries = 3\n    l_1 = 2, r_1 = 5\n    l_2 = 1, r_2 = 5\n    l_3 = 3, r_3 = 4\n\n    as input will return\n\n    [81, 85, 63]\n\n    as output\n\n0-indexing:\nNOTE: 0-indexing means the indexing of the array starts from 0\nExample: a = [1, 2, 3, 4, 5, 6]\n         Here, the 0th index of a is 1,\n               the 1st index of a is 2,\n               and so forth\n\nTime Complexity: O(N + Q)\n* O(N) pre-calculation time to calculate the prefix sum array\n* and O(1) time per each query = O(1 * Q) = O(Q) time\n\nSpace Complexity: O(N)\n* O(N) to store the prefix sum\n\nAlgorithm:\nSo, first we calculate the prefix sum (dp) of the array.\nThe prefix sum of the index i is the sum of all elements indexed\nfrom 0 to i (inclusive).\nThe prefix sum of the index i is the prefix sum of index (i - 1) + the current element.\nSo, the state of the dp is dp[i] = dp[i - 1] + a[i].\n\nAfter we calculate the prefix sum,\nfor each query [l, r]\nthe answer is dp[r] - dp[l - 1] (we need to be careful because l might be 0).\nFor example take this array:\n    [4, 2, 1, 6, 3]\nThe prefix sum calculated for this array would be:\n    [4, 4 + 2, 4 + 2 + 1, 4 + 2 + 1 + 6, 4 + 2 + 1 + 6 + 3]\n    ==> [4, 6, 7, 13, 16]\nIf the query was l = 3, r = 4,\nthe answer would be 6 + 3 = 9 but this would require O(r - l + 1) time ≈ O(N) time\n\nIf we use prefix sums we can find it in O(1) by using the formula\nprefix[r] - prefix[l - 1].\nThis formula works because prefix[r] is the sum of elements from [0, r]\nand prefix[l - 1] is the sum of elements from [0, l - 1],\nso if we do prefix[r] - prefix[l - 1] it will be\n[0, r] - [0, l - 1] = [0, l - 1] + [l, r] - [0, l - 1] = [l, r]\n\"\"\"\n\n\ndef prefix_sum(array: list[int], queries: list[tuple[int, int]]) -> list[int]:\n    \"\"\"\n    >>> prefix_sum([1, 4, 6, 2, 61, 12], [(2, 5), (1, 5), (3, 4)])\n    [81, 85, 63]\n    >>> prefix_sum([4, 2, 1, 6, 3], [(3, 4), (1, 3), (0, 2)])\n    [9, 9, 7]\n    \"\"\"\n    # The prefix sum array\n    dp = [0] * len(array)\n    dp[0] = array[0]\n    for i in range(1, len(array)):\n        dp[i] = dp[i - 1] + array[i]\n\n    # See Algorithm section (Line 44)\n    result = []\n    for query in queries:\n        left, right = query\n        res = dp[right]\n        if left > 0:\n            res -= dp[left - 1]\n        result.append(res)\n\n    return result\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "dynamic_programming/regex_match.py",
    "content": "\"\"\"\nRegex matching check if a text matches pattern or not.\nPattern:\n\n    1. ``.`` Matches any single character.\n    2. ``*`` Matches zero or more of the preceding element.\n\nMore info:\n    https://medium.com/trick-the-interviwer/regular-expression-matching-9972eb74c03\n\"\"\"\n\n\ndef recursive_match(text: str, pattern: str) -> bool:\n    r\"\"\"\n    Recursive matching algorithm.\n\n    | Time complexity: O(2^(\\|text\\| + \\|pattern\\|))\n    | Space complexity: Recursion depth is O(\\|text\\| + \\|pattern\\|).\n\n    :param text: Text to match.\n    :param pattern: Pattern to match.\n    :return: ``True`` if `text` matches `pattern`, ``False`` otherwise.\n\n    >>> recursive_match('abc', 'a.c')\n    True\n    >>> recursive_match('abc', 'af*.c')\n    True\n    >>> recursive_match('abc', 'a.c*')\n    True\n    >>> recursive_match('abc', 'a.c*d')\n    False\n    >>> recursive_match('aa', '.*')\n    True\n    \"\"\"\n    if not pattern:\n        return not text\n\n    if not text:\n        return pattern[-1] == \"*\" and recursive_match(text, pattern[:-2])\n\n    if text[-1] == pattern[-1] or pattern[-1] == \".\":\n        return recursive_match(text[:-1], pattern[:-1])\n\n    if pattern[-1] == \"*\":\n        return recursive_match(text[:-1], pattern) or recursive_match(\n            text, pattern[:-2]\n        )\n\n    return False\n\n\ndef dp_match(text: str, pattern: str) -> bool:\n    r\"\"\"\n    Dynamic programming matching algorithm.\n\n    | Time complexity: O(\\|text\\| * \\|pattern\\|)\n    | Space complexity: O(\\|text\\| * \\|pattern\\|)\n\n    :param text: Text to match.\n    :param pattern: Pattern to match.\n    :return: ``True`` if `text` matches `pattern`, ``False`` otherwise.\n\n    >>> dp_match('abc', 'a.c')\n    True\n    >>> dp_match('abc', 'af*.c')\n    True\n    >>> dp_match('abc', 'a.c*')\n    True\n    >>> dp_match('abc', 'a.c*d')\n    False\n    >>> dp_match('aa', '.*')\n    True\n    \"\"\"\n    m = len(text)\n    n = len(pattern)\n    dp = [[False for _ in range(n + 1)] for _ in range(m + 1)]\n    dp[0][0] = True\n\n    for j in range(1, n + 1):\n        dp[0][j] = pattern[j - 1] == \"*\" and dp[0][j - 2]\n\n    for i in range(1, m + 1):\n        for j in range(1, n + 1):\n            if pattern[j - 1] in {\".\", text[i - 1]}:\n                dp[i][j] = dp[i - 1][j - 1]\n            elif pattern[j - 1] == \"*\":\n                dp[i][j] = dp[i][j - 2]\n                if pattern[j - 2] in {\".\", text[i - 1]}:\n                    dp[i][j] |= dp[i - 1][j]\n            else:\n                dp[i][j] = False\n\n    return dp[m][n]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "dynamic_programming/rod_cutting.py",
    "content": "\"\"\"\nThis module provides two implementations for the rod-cutting problem:\n  1. A naive recursive implementation which has an exponential runtime\n  2. Two dynamic programming implementations which have quadratic runtime\n\nThe rod-cutting problem is the problem of finding the maximum possible revenue\nobtainable from a rod of length ``n`` given a list of prices for each integral piece\nof the rod. The maximum revenue can thus be obtained by cutting the rod and selling the\npieces separately or not cutting it at all if the price of it is the maximum obtainable.\n\n\"\"\"\n\n\ndef naive_cut_rod_recursive(n: int, prices: list):\n    \"\"\"\n    Solves the rod-cutting problem via naively without using the benefit of dynamic\n    programming. The results is the same sub-problems are solved several times\n    leading to an exponential runtime\n\n    Runtime: O(2^n)\n\n    Arguments\n    ---------\n\n    * `n`: int, the length of the rod\n    * `prices`: list, the prices for each piece of rod. ``p[i-i]`` is the\n      price for a rod of length ``i``\n\n    Returns\n    -------\n\n    The maximum revenue obtainable for a rod of length `n` given the list of prices\n    for each piece.\n\n    Examples\n    --------\n\n    >>> naive_cut_rod_recursive(4, [1, 5, 8, 9])\n    10\n    >>> naive_cut_rod_recursive(10, [1, 5, 8, 9, 10, 17, 17, 20, 24, 30])\n    30\n    \"\"\"\n\n    _enforce_args(n, prices)\n    if n == 0:\n        return 0\n    max_revue = float(\"-inf\")\n    for i in range(1, n + 1):\n        max_revue = max(\n            max_revue, prices[i - 1] + naive_cut_rod_recursive(n - i, prices)\n        )\n\n    return max_revue\n\n\ndef top_down_cut_rod(n: int, prices: list):\n    \"\"\"\n    Constructs a top-down dynamic programming solution for the rod-cutting\n    problem via memoization. This function serves as a wrapper for\n    ``_top_down_cut_rod_recursive``\n\n    Runtime: O(n^2)\n\n    Arguments\n    ---------\n\n    * `n`: int, the length of the rod\n    * `prices`: list, the prices for each piece of rod. ``p[i-i]`` is the\n      price for a rod of length ``i``\n\n    .. note::\n      For convenience and because Python's lists using ``0``-indexing, ``length(max_rev)\n      = n + 1``, to accommodate for the revenue obtainable from a rod of length ``0``.\n\n    Returns\n    -------\n\n    The maximum revenue obtainable for a rod of length `n` given the list of prices\n    for each piece.\n\n    Examples\n    --------\n\n    >>> top_down_cut_rod(4, [1, 5, 8, 9])\n    10\n    >>> top_down_cut_rod(10, [1, 5, 8, 9, 10, 17, 17, 20, 24, 30])\n    30\n    \"\"\"\n    _enforce_args(n, prices)\n    max_rev = [float(\"-inf\") for _ in range(n + 1)]\n    return _top_down_cut_rod_recursive(n, prices, max_rev)\n\n\ndef _top_down_cut_rod_recursive(n: int, prices: list, max_rev: list):\n    \"\"\"\n    Constructs a top-down dynamic programming solution for the rod-cutting problem\n    via memoization.\n\n    Runtime: O(n^2)\n\n    Arguments\n    ---------\n\n    * `n`: int, the length of the rod\n    * `prices`: list, the prices for each piece of rod. ``p[i-i]`` is the\n      price for a rod of length ``i``\n    * `max_rev`: list, the computed maximum revenue for a piece of rod.\n      ``max_rev[i]`` is the maximum revenue obtainable for a rod of length ``i``\n\n    Returns\n    -------\n\n    The maximum revenue obtainable for a rod of length `n` given the list of prices\n    for each piece.\n    \"\"\"\n    if max_rev[n] >= 0:\n        return max_rev[n]\n    elif n == 0:\n        return 0\n    else:\n        max_revenue = float(\"-inf\")\n        for i in range(1, n + 1):\n            max_revenue = max(\n                max_revenue,\n                prices[i - 1] + _top_down_cut_rod_recursive(n - i, prices, max_rev),\n            )\n\n        max_rev[n] = max_revenue\n\n    return max_rev[n]\n\n\ndef bottom_up_cut_rod(n: int, prices: list):\n    \"\"\"\n    Constructs a bottom-up dynamic programming solution for the rod-cutting problem\n\n    Runtime: O(n^2)\n\n    Arguments\n    ---------\n\n    * `n`: int, the maximum length of the rod.\n    * `prices`: list, the prices for each piece of rod. ``p[i-i]`` is the\n      price for a rod of length ``i``\n\n    Returns\n    -------\n\n    The maximum revenue obtainable from cutting a rod of length `n` given\n    the prices for each piece of rod p.\n\n    Examples\n    --------\n\n    >>> bottom_up_cut_rod(4, [1, 5, 8, 9])\n    10\n    >>> bottom_up_cut_rod(10, [1, 5, 8, 9, 10, 17, 17, 20, 24, 30])\n    30\n    \"\"\"\n    _enforce_args(n, prices)\n\n    # length(max_rev) = n + 1, to accommodate for the revenue obtainable from a rod of\n    # length 0.\n    max_rev = [float(\"-inf\") for _ in range(n + 1)]\n    max_rev[0] = 0\n\n    for i in range(1, n + 1):\n        max_revenue_i = max_rev[i]\n        for j in range(1, i + 1):\n            max_revenue_i = max(max_revenue_i, prices[j - 1] + max_rev[i - j])\n\n        max_rev[i] = max_revenue_i\n\n    return max_rev[n]\n\n\ndef _enforce_args(n: int, prices: list):\n    \"\"\"\n    Basic checks on the arguments to the rod-cutting algorithms\n\n    * `n`: int, the length of the rod\n    * `prices`: list, the price list for each piece of rod.\n\n    Throws ``ValueError``:\n        if `n` is negative or there are fewer items in the price list than the length of\n        the rod\n    \"\"\"\n    if n < 0:\n        msg = f\"n must be greater than or equal to 0. Got n = {n}\"\n        raise ValueError(msg)\n\n    if n > len(prices):\n        msg = (\n            \"Each integral piece of rod must have a corresponding price. \"\n            f\"Got n = {n} but length of prices = {len(prices)}\"\n        )\n        raise ValueError(msg)\n\n\ndef main():\n    prices = [6, 10, 12, 15, 20, 23]\n    n = len(prices)\n\n    # the best revenue comes from cutting the rod into 6 pieces, each\n    # of length 1 resulting in a revenue of 6 * 6 = 36.\n    expected_max_revenue = 36\n\n    max_rev_top_down = top_down_cut_rod(n, prices)\n    max_rev_bottom_up = bottom_up_cut_rod(n, prices)\n    max_rev_naive = naive_cut_rod_recursive(n, prices)\n\n    assert expected_max_revenue == max_rev_top_down\n    assert max_rev_top_down == max_rev_bottom_up\n    assert max_rev_bottom_up == max_rev_naive\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "dynamic_programming/smith_waterman.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/Smith%E2%80%93Waterman_algorithm\nThe Smith-Waterman algorithm is a dynamic programming algorithm used for sequence\nalignment. It is particularly useful for finding similarities between two sequences,\nsuch as DNA or protein sequences. In this implementation, gaps are penalized\nlinearly, meaning that the score is reduced by a fixed amount for each gap introduced\nin the alignment. However, it's important to note that the Smith-Waterman algorithm\nsupports other gap penalty methods as well.\n\"\"\"\n\n\ndef score_function(\n    source_char: str,\n    target_char: str,\n    match: int = 1,\n    mismatch: int = -1,\n    gap: int = -2,\n) -> int:\n    \"\"\"\n    Calculate the score for a character pair based on whether they match or mismatch.\n    Returns 1 if the characters match, -1 if they mismatch, and -2 if either of the\n    characters is a gap.\n    >>> score_function('A', 'A')\n    1\n    >>> score_function('A', 'C')\n    -1\n    >>> score_function('-', 'A')\n    -2\n    >>> score_function('A', '-')\n    -2\n    >>> score_function('-', '-')\n    -2\n    \"\"\"\n    if \"-\" in (source_char, target_char):\n        return gap\n    return match if source_char == target_char else mismatch\n\n\ndef smith_waterman(\n    query: str,\n    subject: str,\n    match: int = 1,\n    mismatch: int = -1,\n    gap: int = -2,\n) -> list[list[int]]:\n    \"\"\"\n    Perform the Smith-Waterman local sequence alignment algorithm.\n    Returns a 2D list representing the score matrix. Each value in the matrix\n    corresponds to the score of the best local alignment ending at that point.\n    >>> smith_waterman('ACAC', 'CA')\n    [[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 0, 2], [0, 1, 0]]\n    >>> smith_waterman('acac', 'ca')\n    [[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 0, 2], [0, 1, 0]]\n    >>> smith_waterman('ACAC', 'ca')\n    [[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 0, 2], [0, 1, 0]]\n    >>> smith_waterman('acac', 'CA')\n    [[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 0, 2], [0, 1, 0]]\n    >>> smith_waterman('ACAC', '')\n    [[0], [0], [0], [0], [0]]\n    >>> smith_waterman('', 'CA')\n    [[0, 0, 0]]\n    >>> smith_waterman('ACAC', 'CA')\n    [[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 0, 2], [0, 1, 0]]\n\n    >>> smith_waterman('acac', 'ca')\n    [[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 0, 2], [0, 1, 0]]\n\n    >>> smith_waterman('ACAC', 'ca')\n    [[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 0, 2], [0, 1, 0]]\n\n    >>> smith_waterman('acac', 'CA')\n    [[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 0, 2], [0, 1, 0]]\n\n    >>> smith_waterman('ACAC', '')\n    [[0], [0], [0], [0], [0]]\n\n    >>> smith_waterman('', 'CA')\n    [[0, 0, 0]]\n\n    >>> smith_waterman('AGT', 'AGT')\n    [[0, 0, 0, 0], [0, 1, 0, 0], [0, 0, 2, 0], [0, 0, 0, 3]]\n\n    >>> smith_waterman('AGT', 'GTA')\n    [[0, 0, 0, 0], [0, 0, 0, 1], [0, 1, 0, 0], [0, 0, 2, 0]]\n\n    >>> smith_waterman('AGT', 'GTC')\n    [[0, 0, 0, 0], [0, 0, 0, 0], [0, 1, 0, 0], [0, 0, 2, 0]]\n\n    >>> smith_waterman('AGT', 'G')\n    [[0, 0], [0, 0], [0, 1], [0, 0]]\n\n    >>> smith_waterman('G', 'AGT')\n    [[0, 0, 0, 0], [0, 0, 1, 0]]\n\n    >>> smith_waterman('AGT', 'AGTCT')\n    [[0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0], [0, 0, 0, 3, 1, 1]]\n\n    >>> smith_waterman('AGTCT', 'AGT')\n    [[0, 0, 0, 0], [0, 1, 0, 0], [0, 0, 2, 0], [0, 0, 0, 3], [0, 0, 0, 1], [0, 0, 0, 1]]\n\n    >>> smith_waterman('AGTCT', 'GTC')\n    [[0, 0, 0, 0], [0, 0, 0, 0], [0, 1, 0, 0], [0, 0, 2, 0], [0, 0, 0, 3], [0, 0, 1, 1]]\n    \"\"\"\n    # make both query and subject uppercase\n    query = query.upper()\n    subject = subject.upper()\n\n    # Initialize score matrix\n    m = len(query)\n    n = len(subject)\n    score = [[0] * (n + 1) for _ in range(m + 1)]\n    kwargs = {\"match\": match, \"mismatch\": mismatch, \"gap\": gap}\n\n    for i in range(1, m + 1):\n        for j in range(1, n + 1):\n            # Calculate scores for each cell\n            match = score[i - 1][j - 1] + score_function(\n                query[i - 1], subject[j - 1], **kwargs\n            )\n            delete = score[i - 1][j] + gap\n            insert = score[i][j - 1] + gap\n\n            # Take maximum score\n            score[i][j] = max(0, match, delete, insert)\n\n    return score\n\n\ndef traceback(score: list[list[int]], query: str, subject: str) -> str:\n    r\"\"\"\n    Perform traceback to find the optimal local alignment.\n    Starts from the highest scoring cell in the matrix and traces back recursively\n    until a 0 score is found. Returns the alignment strings.\n    >>> traceback([[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 0, 2], [0, 1, 0]], 'ACAC', 'CA')\n    'CA\\nCA'\n    >>> traceback([[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 0, 2], [0, 1, 0]], 'acac', 'ca')\n    'CA\\nCA'\n    >>> traceback([[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 0, 2], [0, 1, 0]], 'ACAC', 'ca')\n    'CA\\nCA'\n    >>> traceback([[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 0, 2], [0, 1, 0]], 'acac', 'CA')\n    'CA\\nCA'\n    >>> traceback([[0, 0, 0]], 'ACAC', '')\n    ''\n    \"\"\"\n    # make both query and subject uppercase\n    query = query.upper()\n    subject = subject.upper()\n    # find the indices of the maximum value in the score matrix\n    max_value = float(\"-inf\")\n    i_max = j_max = 0\n    for i, row in enumerate(score):\n        for j, value in enumerate(row):\n            if value > max_value:\n                max_value = value\n                i_max, j_max = i, j\n    # Traceback logic to find optimal alignment\n    i = i_max\n    j = j_max\n    align1 = \"\"\n    align2 = \"\"\n    gap = score_function(\"-\", \"-\")\n    # guard against empty query or subject\n    if i == 0 or j == 0:\n        return \"\"\n    while i > 0 and j > 0:\n        if score[i][j] == score[i - 1][j - 1] + score_function(\n            query[i - 1], subject[j - 1]\n        ):\n            # optimal path is a diagonal take both letters\n            align1 = query[i - 1] + align1\n            align2 = subject[j - 1] + align2\n            i -= 1\n            j -= 1\n        elif score[i][j] == score[i - 1][j] + gap:\n            # optimal path is a vertical\n            align1 = query[i - 1] + align1\n            align2 = f\"-{align2}\"\n            i -= 1\n        else:\n            # optimal path is a horizontal\n            align1 = f\"-{align1}\"\n            align2 = subject[j - 1] + align2\n            j -= 1\n\n    return f\"{align1}\\n{align2}\"\n\n\nif __name__ == \"__main__\":\n    query = \"HEAGAWGHEE\"\n    subject = \"PAWHEAE\"\n\n    score = smith_waterman(query, subject, match=1, mismatch=-1, gap=-2)\n    print(traceback(score, query, subject))\n"
  },
  {
    "path": "dynamic_programming/subset_generation.py",
    "content": "def subset_combinations(elements: list[int], n: int) -> list:\n    \"\"\"\n    Compute n-element combinations from a given list using dynamic programming.\n\n    Args:\n        * `elements`: The list of elements from which combinations will be generated.\n        * `n`: The number of elements in each combination.\n\n    Returns:\n        A list of tuples, each representing a combination of `n` elements.\n\n    >>> subset_combinations(elements=[10, 20, 30, 40], n=2)\n    [(10, 20), (10, 30), (10, 40), (20, 30), (20, 40), (30, 40)]\n    >>> subset_combinations(elements=[1, 2, 3], n=1)\n    [(1,), (2,), (3,)]\n    >>> subset_combinations(elements=[1, 2, 3], n=3)\n    [(1, 2, 3)]\n    >>> subset_combinations(elements=[42], n=1)\n    [(42,)]\n    >>> subset_combinations(elements=[6, 7, 8, 9], n=4)\n    [(6, 7, 8, 9)]\n    >>> subset_combinations(elements=[10, 20, 30, 40, 50], n=0)\n    [()]\n    >>> subset_combinations(elements=[1, 2, 3, 4], n=2)\n    [(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]\n    >>> subset_combinations(elements=[1, 'apple', 3.14], n=2)\n    [(1, 'apple'), (1, 3.14), ('apple', 3.14)]\n    >>> subset_combinations(elements=['single'], n=0)\n    [()]\n    >>> subset_combinations(elements=[], n=9)\n    []\n    >>> from itertools import combinations\n    >>> all(subset_combinations(items, n) == list(combinations(items, n))\n    ...     for items, n in (\n    ...         ([10, 20, 30, 40], 2), ([1, 2, 3], 1), ([1, 2, 3], 3), ([42], 1),\n    ...         ([6, 7, 8, 9], 4), ([10, 20, 30, 40, 50], 1), ([1, 2, 3, 4], 2),\n    ...         ([1, 'apple', 3.14], 2), (['single'], 0), ([], 9)))\n    True\n    \"\"\"\n    r = len(elements)\n    if n > r:\n        return []\n\n    dp: list[list[tuple]] = [[] for _ in range(r + 1)]\n\n    dp[0].append(())\n\n    for i in range(1, r + 1):\n        for j in range(i, 0, -1):\n            for prev_combination in dp[j - 1]:\n                dp[j].append((*prev_combination, elements[i - 1]))\n\n    try:\n        return sorted(dp[n])\n    except TypeError:\n        return dp[n]\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    print(f\"{subset_combinations(elements=[10, 20, 30, 40], n=2) = }\")\n"
  },
  {
    "path": "dynamic_programming/sum_of_subset.py",
    "content": "def is_sum_subset(arr: list[int], required_sum: int) -> bool:\n    \"\"\"\n    >>> is_sum_subset([2, 4, 6, 8], 5)\n    False\n    >>> is_sum_subset([2, 4, 6, 8], 14)\n    True\n    \"\"\"\n    # a subset value says 1 if that subset sum can be formed else 0\n    # initially no subsets can be formed hence False/0\n    arr_len = len(arr)\n    subset = [[False] * (required_sum + 1) for _ in range(arr_len + 1)]\n\n    # for each arr value, a sum of zero(0) can be formed by not taking any element\n    # hence True/1\n    for i in range(arr_len + 1):\n        subset[i][0] = True\n\n    # sum is not zero and set is empty then false\n    for i in range(1, required_sum + 1):\n        subset[0][i] = False\n\n    for i in range(1, arr_len + 1):\n        for j in range(1, required_sum + 1):\n            if arr[i - 1] > j:\n                subset[i][j] = subset[i - 1][j]\n            if arr[i - 1] <= j:\n                subset[i][j] = subset[i - 1][j] or subset[i - 1][j - arr[i - 1]]\n\n    return subset[arr_len][required_sum]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "dynamic_programming/trapped_water.py",
    "content": "\"\"\"\nGiven an array of non-negative integers representing an elevation map where the width\nof each bar is 1, this program calculates how much rainwater can be trapped.\n\nExample - height = (0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1)\nOutput: 6\nThis problem can be solved using the concept of \"DYNAMIC PROGRAMMING\".\n\nWe calculate the maximum height of bars on the left and right of every bar in array.\nThen iterate over the width of structure and at each index.\nThe amount of water that will be stored is equal to minimum of maximum height of bars\non both sides minus height of bar at current position.\n\"\"\"\n\n\ndef trapped_rainwater(heights: tuple[int, ...]) -> int:\n    \"\"\"\n    The trapped_rainwater function calculates the total amount of rainwater that can be\n    trapped given an array of bar heights.\n    It uses a dynamic programming approach, determining the maximum height of bars on\n    both sides for each bar, and then computing the trapped water above each bar.\n    The function returns the total trapped water.\n\n    >>> trapped_rainwater((0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1))\n    6\n    >>> trapped_rainwater((7, 1, 5, 3, 6, 4))\n    9\n    >>> trapped_rainwater((7, 1, 5, 3, 6, -1))\n    Traceback (most recent call last):\n        ...\n    ValueError: No height can be negative\n    \"\"\"\n    if not heights:\n        return 0\n    if any(h < 0 for h in heights):\n        raise ValueError(\"No height can be negative\")\n    length = len(heights)\n\n    left_max = [0] * length\n    left_max[0] = heights[0]\n    for i, height in enumerate(heights[1:], start=1):\n        left_max[i] = max(height, left_max[i - 1])\n\n    right_max = [0] * length\n    right_max[-1] = heights[-1]\n    for i in range(length - 2, -1, -1):\n        right_max[i] = max(heights[i], right_max[i + 1])\n\n    return sum(\n        min(left, right) - height\n        for left, right, height in zip(left_max, right_max, heights)\n    )\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    print(f\"{trapped_rainwater((0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1)) = }\")\n    print(f\"{trapped_rainwater((7, 1, 5, 3, 6, 4)) = }\")\n"
  },
  {
    "path": "dynamic_programming/tribonacci.py",
    "content": "# Tribonacci sequence using Dynamic Programming\n\n\ndef tribonacci(num: int) -> list[int]:\n    \"\"\"\n    Given a number, return first n Tribonacci Numbers.\n    >>> tribonacci(5)\n    [0, 0, 1, 1, 2]\n    >>> tribonacci(8)\n    [0, 0, 1, 1, 2, 4, 7, 13]\n    \"\"\"\n    dp = [0] * num\n    dp[2] = 1\n\n    for i in range(3, num):\n        dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]\n\n    return dp\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "dynamic_programming/viterbi.py",
    "content": "from typing import Any\n\n\ndef viterbi(\n    observations_space: list,\n    states_space: list,\n    initial_probabilities: dict,\n    transition_probabilities: dict,\n    emission_probabilities: dict,\n) -> list:\n    \"\"\"\n    Viterbi Algorithm, to find the most likely path of\n    states from the start and the expected output.\n\n    https://en.wikipedia.org/wiki/Viterbi_algorithm\n\n    Wikipedia example\n\n    >>> observations = [\"normal\", \"cold\", \"dizzy\"]\n    >>> states = [\"Healthy\", \"Fever\"]\n    >>> start_p = {\"Healthy\": 0.6, \"Fever\": 0.4}\n    >>> trans_p = {\n    ...     \"Healthy\": {\"Healthy\": 0.7, \"Fever\": 0.3},\n    ...     \"Fever\": {\"Healthy\": 0.4, \"Fever\": 0.6},\n    ... }\n    >>> emit_p = {\n    ...     \"Healthy\": {\"normal\": 0.5, \"cold\": 0.4, \"dizzy\": 0.1},\n    ...     \"Fever\": {\"normal\": 0.1, \"cold\": 0.3, \"dizzy\": 0.6},\n    ... }\n    >>> viterbi(observations, states, start_p, trans_p, emit_p)\n    ['Healthy', 'Healthy', 'Fever']\n    >>> viterbi((), states, start_p, trans_p, emit_p)\n    Traceback (most recent call last):\n        ...\n    ValueError: There's an empty parameter\n    >>> viterbi(observations, (), start_p, trans_p, emit_p)\n    Traceback (most recent call last):\n        ...\n    ValueError: There's an empty parameter\n    >>> viterbi(observations, states, {}, trans_p, emit_p)\n    Traceback (most recent call last):\n        ...\n    ValueError: There's an empty parameter\n    >>> viterbi(observations, states, start_p, {}, emit_p)\n    Traceback (most recent call last):\n        ...\n    ValueError: There's an empty parameter\n    >>> viterbi(observations, states, start_p, trans_p, {})\n    Traceback (most recent call last):\n        ...\n    ValueError: There's an empty parameter\n    >>> viterbi(\"invalid\", states, start_p, trans_p, emit_p)\n    Traceback (most recent call last):\n        ...\n    ValueError: observations_space must be a list\n    >>> viterbi([\"valid\", 123], states, start_p, trans_p, emit_p)\n    Traceback (most recent call last):\n        ...\n    ValueError: observations_space must be a list of strings\n    >>> viterbi(observations, \"invalid\", start_p, trans_p, emit_p)\n    Traceback (most recent call last):\n        ...\n    ValueError: states_space must be a list\n    >>> viterbi(observations, [\"valid\", 123], start_p, trans_p, emit_p)\n    Traceback (most recent call last):\n        ...\n    ValueError: states_space must be a list of strings\n    >>> viterbi(observations, states, \"invalid\", trans_p, emit_p)\n    Traceback (most recent call last):\n        ...\n    ValueError: initial_probabilities must be a dict\n    >>> viterbi(observations, states, {2:2}, trans_p, emit_p)\n    Traceback (most recent call last):\n        ...\n    ValueError: initial_probabilities all keys must be strings\n    >>> viterbi(observations, states, {\"a\":2}, trans_p, emit_p)\n    Traceback (most recent call last):\n        ...\n    ValueError: initial_probabilities all values must be float\n    >>> viterbi(observations, states, start_p, \"invalid\", emit_p)\n    Traceback (most recent call last):\n        ...\n    ValueError: transition_probabilities must be a dict\n    >>> viterbi(observations, states, start_p, {\"a\":2}, emit_p)\n    Traceback (most recent call last):\n        ...\n    ValueError: transition_probabilities all values must be dict\n    >>> viterbi(observations, states, start_p, {2:{2:2}}, emit_p)\n    Traceback (most recent call last):\n        ...\n    ValueError: transition_probabilities all keys must be strings\n    >>> viterbi(observations, states, start_p, {\"a\":{2:2}}, emit_p)\n    Traceback (most recent call last):\n        ...\n    ValueError: transition_probabilities all keys must be strings\n    >>> viterbi(observations, states, start_p, {\"a\":{\"b\":2}}, emit_p)\n    Traceback (most recent call last):\n        ...\n    ValueError: transition_probabilities nested dictionary all values must be float\n    >>> viterbi(observations, states, start_p, trans_p, \"invalid\")\n    Traceback (most recent call last):\n        ...\n    ValueError: emission_probabilities must be a dict\n    >>> viterbi(observations, states, start_p, trans_p, None)\n    Traceback (most recent call last):\n        ...\n    ValueError: There's an empty parameter\n\n    \"\"\"\n    _validation(\n        observations_space,\n        states_space,\n        initial_probabilities,\n        transition_probabilities,\n        emission_probabilities,\n    )\n    # Creates data structures and fill initial step\n    probabilities: dict = {}\n    pointers: dict = {}\n    for state in states_space:\n        observation = observations_space[0]\n        probabilities[(state, observation)] = (\n            initial_probabilities[state] * emission_probabilities[state][observation]\n        )\n        pointers[(state, observation)] = None\n\n    # Fills the data structure with the probabilities of\n    # different transitions and pointers to previous states\n    for o in range(1, len(observations_space)):\n        observation = observations_space[o]\n        prior_observation = observations_space[o - 1]\n        for state in states_space:\n            # Calculates the argmax for probability function\n            arg_max = \"\"\n            max_probability = -1\n            for k_state in states_space:\n                probability = (\n                    probabilities[(k_state, prior_observation)]\n                    * transition_probabilities[k_state][state]\n                    * emission_probabilities[state][observation]\n                )\n                if probability > max_probability:\n                    max_probability = probability\n                    arg_max = k_state\n\n            # Update probabilities and pointers dicts\n            probabilities[(state, observation)] = (\n                probabilities[(arg_max, prior_observation)]\n                * transition_probabilities[arg_max][state]\n                * emission_probabilities[state][observation]\n            )\n\n            pointers[(state, observation)] = arg_max\n\n    # The final observation\n    final_observation = observations_space[len(observations_space) - 1]\n\n    # argmax for given final observation\n    arg_max = \"\"\n    max_probability = -1\n    for k_state in states_space:\n        probability = probabilities[(k_state, final_observation)]\n        if probability > max_probability:\n            max_probability = probability\n            arg_max = k_state\n    last_state = arg_max\n\n    # Process pointers backwards\n    previous = last_state\n    result = []\n    for o in range(len(observations_space) - 1, -1, -1):\n        result.append(previous)\n        previous = pointers[previous, observations_space[o]]\n    result.reverse()\n\n    return result\n\n\ndef _validation(\n    observations_space: Any,\n    states_space: Any,\n    initial_probabilities: Any,\n    transition_probabilities: Any,\n    emission_probabilities: Any,\n) -> None:\n    \"\"\"\n    >>> observations = [\"normal\", \"cold\", \"dizzy\"]\n    >>> states = [\"Healthy\", \"Fever\"]\n    >>> start_p = {\"Healthy\": 0.6, \"Fever\": 0.4}\n    >>> trans_p = {\n    ...     \"Healthy\": {\"Healthy\": 0.7, \"Fever\": 0.3},\n    ...     \"Fever\": {\"Healthy\": 0.4, \"Fever\": 0.6},\n    ... }\n    >>> emit_p = {\n    ...     \"Healthy\": {\"normal\": 0.5, \"cold\": 0.4, \"dizzy\": 0.1},\n    ...     \"Fever\": {\"normal\": 0.1, \"cold\": 0.3, \"dizzy\": 0.6},\n    ... }\n    >>> _validation(observations, states, start_p, trans_p, emit_p)\n    >>> _validation([], states, start_p, trans_p, emit_p)\n    Traceback (most recent call last):\n            ...\n    ValueError: There's an empty parameter\n    \"\"\"\n    _validate_not_empty(\n        observations_space,\n        states_space,\n        initial_probabilities,\n        transition_probabilities,\n        emission_probabilities,\n    )\n    _validate_lists(observations_space, states_space)\n    _validate_dicts(\n        initial_probabilities, transition_probabilities, emission_probabilities\n    )\n\n\ndef _validate_not_empty(\n    observations_space: Any,\n    states_space: Any,\n    initial_probabilities: Any,\n    transition_probabilities: Any,\n    emission_probabilities: Any,\n) -> None:\n    \"\"\"\n    >>> _validate_not_empty([\"a\"], [\"b\"], {\"c\":0.5},\n    ... {\"d\": {\"e\": 0.6}}, {\"f\": {\"g\": 0.7}})\n    >>> _validate_not_empty([\"a\"], [\"b\"], {\"c\":0.5}, {}, {\"f\": {\"g\": 0.7}})\n    Traceback (most recent call last):\n            ...\n    ValueError: There's an empty parameter\n    >>> _validate_not_empty([\"a\"], [\"b\"], None, {\"d\": {\"e\": 0.6}}, {\"f\": {\"g\": 0.7}})\n    Traceback (most recent call last):\n            ...\n    ValueError: There's an empty parameter\n    \"\"\"\n    if not all(\n        [\n            observations_space,\n            states_space,\n            initial_probabilities,\n            transition_probabilities,\n            emission_probabilities,\n        ]\n    ):\n        raise ValueError(\"There's an empty parameter\")\n\n\ndef _validate_lists(observations_space: Any, states_space: Any) -> None:\n    \"\"\"\n    >>> _validate_lists([\"a\"], [\"b\"])\n    >>> _validate_lists(1234, [\"b\"])\n    Traceback (most recent call last):\n            ...\n    ValueError: observations_space must be a list\n    >>> _validate_lists([\"a\"], [3])\n    Traceback (most recent call last):\n            ...\n    ValueError: states_space must be a list of strings\n    \"\"\"\n    _validate_list(observations_space, \"observations_space\")\n    _validate_list(states_space, \"states_space\")\n\n\ndef _validate_list(_object: Any, var_name: str) -> None:\n    \"\"\"\n    >>> _validate_list([\"a\"], \"mock_name\")\n    >>> _validate_list(\"a\", \"mock_name\")\n    Traceback (most recent call last):\n            ...\n    ValueError: mock_name must be a list\n    >>> _validate_list([0.5], \"mock_name\")\n    Traceback (most recent call last):\n            ...\n    ValueError: mock_name must be a list of strings\n    \"\"\"\n    if not isinstance(_object, list):\n        msg = f\"{var_name} must be a list\"\n        raise ValueError(msg)\n    else:\n        for x in _object:\n            if not isinstance(x, str):\n                msg = f\"{var_name} must be a list of strings\"\n                raise ValueError(msg)\n\n\ndef _validate_dicts(\n    initial_probabilities: Any,\n    transition_probabilities: Any,\n    emission_probabilities: Any,\n) -> None:\n    \"\"\"\n    >>> _validate_dicts({\"c\":0.5}, {\"d\": {\"e\": 0.6}}, {\"f\": {\"g\": 0.7}})\n    >>> _validate_dicts(\"invalid\", {\"d\": {\"e\": 0.6}}, {\"f\": {\"g\": 0.7}})\n    Traceback (most recent call last):\n            ...\n    ValueError: initial_probabilities must be a dict\n    >>> _validate_dicts({\"c\":0.5}, {2: {\"e\": 0.6}}, {\"f\": {\"g\": 0.7}})\n    Traceback (most recent call last):\n            ...\n    ValueError: transition_probabilities all keys must be strings\n    >>> _validate_dicts({\"c\":0.5}, {\"d\": {\"e\": 0.6}}, {\"f\": {2: 0.7}})\n    Traceback (most recent call last):\n            ...\n    ValueError: emission_probabilities all keys must be strings\n    >>> _validate_dicts({\"c\":0.5}, {\"d\": {\"e\": 0.6}}, {\"f\": {\"g\": \"h\"}})\n    Traceback (most recent call last):\n            ...\n    ValueError: emission_probabilities nested dictionary all values must be float\n    \"\"\"\n    _validate_dict(initial_probabilities, \"initial_probabilities\", float)\n    _validate_nested_dict(transition_probabilities, \"transition_probabilities\")\n    _validate_nested_dict(emission_probabilities, \"emission_probabilities\")\n\n\ndef _validate_nested_dict(_object: Any, var_name: str) -> None:\n    \"\"\"\n    >>> _validate_nested_dict({\"a\":{\"b\": 0.5}}, \"mock_name\")\n    >>> _validate_nested_dict(\"invalid\", \"mock_name\")\n    Traceback (most recent call last):\n            ...\n    ValueError: mock_name must be a dict\n    >>> _validate_nested_dict({\"a\": 8}, \"mock_name\")\n    Traceback (most recent call last):\n            ...\n    ValueError: mock_name all values must be dict\n    >>> _validate_nested_dict({\"a\":{2: 0.5}}, \"mock_name\")\n    Traceback (most recent call last):\n            ...\n    ValueError: mock_name all keys must be strings\n    >>> _validate_nested_dict({\"a\":{\"b\": 4}}, \"mock_name\")\n    Traceback (most recent call last):\n            ...\n    ValueError: mock_name nested dictionary all values must be float\n    \"\"\"\n    _validate_dict(_object, var_name, dict)\n    for x in _object.values():\n        _validate_dict(x, var_name, float, True)\n\n\ndef _validate_dict(\n    _object: Any, var_name: str, value_type: type, nested: bool = False\n) -> None:\n    \"\"\"\n    >>> _validate_dict({\"b\": 0.5}, \"mock_name\", float)\n    >>> _validate_dict(\"invalid\", \"mock_name\", float)\n    Traceback (most recent call last):\n            ...\n    ValueError: mock_name must be a dict\n    >>> _validate_dict({\"a\": 8}, \"mock_name\", dict)\n    Traceback (most recent call last):\n            ...\n    ValueError: mock_name all values must be dict\n    >>> _validate_dict({2: 0.5}, \"mock_name\",float, True)\n    Traceback (most recent call last):\n            ...\n    ValueError: mock_name all keys must be strings\n    >>> _validate_dict({\"b\": 4}, \"mock_name\", float,True)\n    Traceback (most recent call last):\n            ...\n    ValueError: mock_name nested dictionary all values must be float\n    \"\"\"\n    if not isinstance(_object, dict):\n        msg = f\"{var_name} must be a dict\"\n        raise ValueError(msg)\n    if not all(isinstance(x, str) for x in _object):\n        msg = f\"{var_name} all keys must be strings\"\n        raise ValueError(msg)\n    if not all(isinstance(x, value_type) for x in _object.values()):\n        nested_text = \"nested dictionary \" if nested else \"\"\n        msg = f\"{var_name} {nested_text}all values must be {value_type.__name__}\"\n        raise ValueError(msg)\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "dynamic_programming/wildcard_matching.py",
    "content": "\"\"\"\nAuthor  : ilyas dahhou\nDate    : Oct 7, 2023\n\nTask:\nGiven an input string and a pattern, implement wildcard pattern matching with support\nfor '?' and '*' where:\n'?' matches any single character.\n'*' matches any sequence of characters (including the empty sequence).\nThe matching should cover the entire input string (not partial).\n\nRuntime complexity: O(m * n)\n\nThe implementation was tested on the\nleetcode: https://leetcode.com/problems/wildcard-matching/\n\"\"\"\n\n\ndef is_match(string: str, pattern: str) -> bool:\n    \"\"\"\n    >>> is_match(\"\", \"\")\n    True\n    >>> is_match(\"aa\", \"a\")\n    False\n    >>> is_match(\"abc\", \"abc\")\n    True\n    >>> is_match(\"abc\", \"*c\")\n    True\n    >>> is_match(\"abc\", \"a*\")\n    True\n    >>> is_match(\"abc\", \"*a*\")\n    True\n    >>> is_match(\"abc\", \"?b?\")\n    True\n    >>> is_match(\"abc\", \"*?\")\n    True\n    >>> is_match(\"abc\", \"a*d\")\n    False\n    >>> is_match(\"abc\", \"a*c?\")\n    False\n    >>> is_match('baaabab','*****ba*****ba')\n    False\n    >>> is_match('baaabab','*****ba*****ab')\n    True\n    >>> is_match('aa','*')\n    True\n    \"\"\"\n    dp = [[False] * (len(pattern) + 1) for _ in string + \"1\"]\n    dp[0][0] = True\n    # Fill in the first row\n    for j, char in enumerate(pattern, 1):\n        if char == \"*\":\n            dp[0][j] = dp[0][j - 1]\n    # Fill in the rest of the DP table\n    for i, s_char in enumerate(string, 1):\n        for j, p_char in enumerate(pattern, 1):\n            if p_char in (s_char, \"?\"):\n                dp[i][j] = dp[i - 1][j - 1]\n            elif pattern[j - 1] == \"*\":\n                dp[i][j] = dp[i - 1][j] or dp[i][j - 1]\n    return dp[len(string)][len(pattern)]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    print(f\"{is_match('baaabab','*****ba*****ab') = }\")\n"
  },
  {
    "path": "dynamic_programming/word_break.py",
    "content": "\"\"\"\nAuthor  : Alexander Pantyukhin\nDate    : December 12, 2022\n\nTask:\nGiven a string and a list of words, return true if the string can be\nsegmented into a space-separated sequence of one or more words.\n\nNote that the same word may be reused\nmultiple times in the segmentation.\n\nImplementation notes: Trie + Dynamic programming up -> down.\nThe Trie will be used to store the words. It will be useful for scanning\navailable words for the current position in the string.\n\nLeetcode:\nhttps://leetcode.com/problems/word-break/description/\n\nRuntime: O(n * n)\nSpace: O(n)\n\"\"\"\n\nimport functools\nfrom typing import Any\n\n\ndef word_break(string: str, words: list[str]) -> bool:\n    \"\"\"\n    Return True if numbers have opposite signs False otherwise.\n\n    >>> word_break(\"applepenapple\", [\"apple\",\"pen\"])\n    True\n    >>> word_break(\"catsandog\", [\"cats\",\"dog\",\"sand\",\"and\",\"cat\"])\n    False\n    >>> word_break(\"cars\", [\"car\",\"ca\",\"rs\"])\n    True\n    >>> word_break('abc', [])\n    False\n    >>> word_break(123, ['a'])\n    Traceback (most recent call last):\n        ...\n    ValueError: the string should be not empty string\n    >>> word_break('', ['a'])\n    Traceback (most recent call last):\n        ...\n    ValueError: the string should be not empty string\n    >>> word_break('abc', [123])\n    Traceback (most recent call last):\n        ...\n    ValueError: the words should be a list of non-empty strings\n    >>> word_break('abc', [''])\n    Traceback (most recent call last):\n        ...\n    ValueError: the words should be a list of non-empty strings\n    \"\"\"\n\n    # Validation\n    if not isinstance(string, str) or len(string) == 0:\n        raise ValueError(\"the string should be not empty string\")\n\n    if not isinstance(words, list) or not all(\n        isinstance(item, str) and len(item) > 0 for item in words\n    ):\n        raise ValueError(\"the words should be a list of non-empty strings\")\n\n    # Build trie\n    trie: dict[str, Any] = {}\n    word_keeper_key = \"WORD_KEEPER\"\n\n    for word in words:\n        trie_node = trie\n        for c in word:\n            if c not in trie_node:\n                trie_node[c] = {}\n\n            trie_node = trie_node[c]\n\n        trie_node[word_keeper_key] = True\n\n    len_string = len(string)\n\n    # Dynamic programming method\n    @functools.cache\n    def is_breakable(index: int) -> bool:\n        \"\"\"\n        >>> string = 'a'\n        >>> is_breakable(1)\n        True\n        \"\"\"\n        if index == len_string:\n            return True\n\n        trie_node: Any = trie\n        for i in range(index, len_string):\n            trie_node = trie_node.get(string[i], None)\n\n            if trie_node is None:\n                return False\n\n            if trie_node.get(word_keeper_key, False) and is_breakable(i + 1):\n                return True\n\n        return False\n\n    return is_breakable(0)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "electronics/__init__.py",
    "content": ""
  },
  {
    "path": "electronics/apparent_power.py",
    "content": "import cmath\nimport math\n\n\ndef apparent_power(\n    voltage: float, current: float, voltage_angle: float, current_angle: float\n) -> complex:\n    \"\"\"\n    Calculate the apparent power in a single-phase AC circuit.\n\n    Reference: https://en.wikipedia.org/wiki/AC_power#Apparent_power\n\n    >>> apparent_power(100, 5, 0, 0)\n    (500+0j)\n    >>> apparent_power(100, 5, 90, 0)\n    (3.061616997868383e-14+500j)\n    >>> apparent_power(100, 5, -45, -60)\n    (-129.40952255126027-482.9629131445341j)\n    >>> apparent_power(200, 10, -30, -90)\n    (-999.9999999999998-1732.0508075688776j)\n    \"\"\"\n    # Convert angles from degrees to radians\n    voltage_angle_rad = math.radians(voltage_angle)\n    current_angle_rad = math.radians(current_angle)\n\n    # Convert voltage and current to rectangular form\n    voltage_rect = cmath.rect(voltage, voltage_angle_rad)\n    current_rect = cmath.rect(current, current_angle_rad)\n\n    # Calculate apparent power\n    return voltage_rect * current_rect\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "electronics/builtin_voltage.py",
    "content": "from math import log\n\nfrom scipy.constants import Boltzmann, physical_constants\n\nT = 300  # TEMPERATURE (unit = K)\n\n\ndef builtin_voltage(\n    donor_conc: float,  # donor concentration\n    acceptor_conc: float,  # acceptor concentration\n    intrinsic_conc: float,  # intrinsic concentration\n) -> float:\n    \"\"\"\n    This function can calculate the Builtin Voltage of a pn junction diode.\n    This is calculated from the given three values.\n    Examples -\n    >>> builtin_voltage(donor_conc=1e17, acceptor_conc=1e17, intrinsic_conc=1e10)\n    0.833370010652644\n    >>> builtin_voltage(donor_conc=0, acceptor_conc=1600, intrinsic_conc=200)\n    Traceback (most recent call last):\n      ...\n    ValueError: Donor concentration should be positive\n    >>> builtin_voltage(donor_conc=1000, acceptor_conc=0, intrinsic_conc=1200)\n    Traceback (most recent call last):\n      ...\n    ValueError: Acceptor concentration should be positive\n    >>> builtin_voltage(donor_conc=1000, acceptor_conc=1000, intrinsic_conc=0)\n    Traceback (most recent call last):\n      ...\n    ValueError: Intrinsic concentration should be positive\n    >>> builtin_voltage(donor_conc=1000, acceptor_conc=3000, intrinsic_conc=2000)\n    Traceback (most recent call last):\n      ...\n    ValueError: Donor concentration should be greater than intrinsic concentration\n    >>> builtin_voltage(donor_conc=3000, acceptor_conc=1000, intrinsic_conc=2000)\n    Traceback (most recent call last):\n      ...\n    ValueError: Acceptor concentration should be greater than intrinsic concentration\n    \"\"\"\n\n    if donor_conc <= 0:\n        raise ValueError(\"Donor concentration should be positive\")\n    elif acceptor_conc <= 0:\n        raise ValueError(\"Acceptor concentration should be positive\")\n    elif intrinsic_conc <= 0:\n        raise ValueError(\"Intrinsic concentration should be positive\")\n    elif donor_conc <= intrinsic_conc:\n        raise ValueError(\n            \"Donor concentration should be greater than intrinsic concentration\"\n        )\n    elif acceptor_conc <= intrinsic_conc:\n        raise ValueError(\n            \"Acceptor concentration should be greater than intrinsic concentration\"\n        )\n    else:\n        return (\n            Boltzmann\n            * T\n            * log((donor_conc * acceptor_conc) / intrinsic_conc**2)\n            / physical_constants[\"electron volt\"][0]\n        )\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "electronics/capacitor_equivalence.py",
    "content": "# https://farside.ph.utexas.edu/teaching/316/lectures/node46.html\n\nfrom __future__ import annotations\n\n\ndef capacitor_parallel(capacitors: list[float]) -> float:\n    \"\"\"\n    Ceq = C1 + C2 + ... + Cn\n    Calculate the equivalent resistance for any number of capacitors in parallel.\n    >>> capacitor_parallel([5.71389, 12, 3])\n    20.71389\n    >>> capacitor_parallel([5.71389, 12, -3])\n    Traceback (most recent call last):\n        ...\n    ValueError: Capacitor at index 2 has a negative value!\n    \"\"\"\n    sum_c = 0.0\n    for index, capacitor in enumerate(capacitors):\n        if capacitor < 0:\n            msg = f\"Capacitor at index {index} has a negative value!\"\n            raise ValueError(msg)\n        sum_c += capacitor\n    return sum_c\n\n\ndef capacitor_series(capacitors: list[float]) -> float:\n    \"\"\"\n    Ceq = 1/ (1/C1 + 1/C2 + ... + 1/Cn)\n    >>> capacitor_series([5.71389, 12, 3])\n    1.6901062252507735\n    >>> capacitor_series([5.71389, 12, -3])\n    Traceback (most recent call last):\n        ...\n    ValueError: Capacitor at index 2 has a negative or zero value!\n    >>> capacitor_series([5.71389, 12, 0.000])\n    Traceback (most recent call last):\n        ...\n    ValueError: Capacitor at index 2 has a negative or zero value!\n    \"\"\"\n\n    first_sum = 0.0\n    for index, capacitor in enumerate(capacitors):\n        if capacitor <= 0:\n            msg = f\"Capacitor at index {index} has a negative or zero value!\"\n            raise ValueError(msg)\n        first_sum += 1 / capacitor\n    return 1 / first_sum\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "electronics/carrier_concentration.py",
    "content": "# https://en.wikipedia.org/wiki/Charge_carrier_density\n# https://www.pveducation.org/pvcdrom/pn-junctions/equilibrium-carrier-concentration\n# http://www.ece.utep.edu/courses/ee3329/ee3329/Studyguide/ToC/Fundamentals/Carriers/concentrations.html\n\nfrom __future__ import annotations\n\n\ndef carrier_concentration(\n    electron_conc: float,\n    hole_conc: float,\n    intrinsic_conc: float,\n) -> tuple:\n    \"\"\"\n    This function can calculate any one of the three -\n    1. Electron Concentration\n    2, Hole Concentration\n    3. Intrinsic Concentration\n    given the other two.\n    Examples -\n    >>> carrier_concentration(electron_conc=25, hole_conc=100, intrinsic_conc=0)\n    ('intrinsic_conc', 50.0)\n    >>> carrier_concentration(electron_conc=0, hole_conc=1600, intrinsic_conc=200)\n    ('electron_conc', 25.0)\n    >>> carrier_concentration(electron_conc=1000, hole_conc=0, intrinsic_conc=1200)\n    ('hole_conc', 1440.0)\n    >>> carrier_concentration(electron_conc=1000, hole_conc=400, intrinsic_conc=1200)\n    Traceback (most recent call last):\n        ...\n    ValueError: You cannot supply more or less than 2 values\n    >>> carrier_concentration(electron_conc=-1000, hole_conc=0, intrinsic_conc=1200)\n    Traceback (most recent call last):\n        ...\n    ValueError: Electron concentration cannot be negative in a semiconductor\n    >>> carrier_concentration(electron_conc=0, hole_conc=-400, intrinsic_conc=1200)\n    Traceback (most recent call last):\n        ...\n    ValueError: Hole concentration cannot be negative in a semiconductor\n    >>> carrier_concentration(electron_conc=0, hole_conc=400, intrinsic_conc=-1200)\n    Traceback (most recent call last):\n        ...\n    ValueError: Intrinsic concentration cannot be negative in a semiconductor\n    \"\"\"\n    if (electron_conc, hole_conc, intrinsic_conc).count(0) != 1:\n        raise ValueError(\"You cannot supply more or less than 2 values\")\n    elif electron_conc < 0:\n        raise ValueError(\"Electron concentration cannot be negative in a semiconductor\")\n    elif hole_conc < 0:\n        raise ValueError(\"Hole concentration cannot be negative in a semiconductor\")\n    elif intrinsic_conc < 0:\n        raise ValueError(\n            \"Intrinsic concentration cannot be negative in a semiconductor\"\n        )\n    elif electron_conc == 0:\n        return (\n            \"electron_conc\",\n            intrinsic_conc**2 / hole_conc,\n        )\n    elif hole_conc == 0:\n        return (\n            \"hole_conc\",\n            intrinsic_conc**2 / electron_conc,\n        )\n    elif intrinsic_conc == 0:\n        return (\n            \"intrinsic_conc\",\n            (electron_conc * hole_conc) ** 0.5,\n        )\n    else:\n        return (-1, -1)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "electronics/charging_capacitor.py",
    "content": "# source - The ARRL Handbook for Radio Communications\n# https://en.wikipedia.org/wiki/RC_time_constant\n\n\"\"\"\nDescription\n-----------\nWhen a capacitor is connected with a potential source (AC or DC). It starts to charge\nat a general speed but when a resistor is connected in the  circuit with in series to\na capacitor then the capacitor charges slowly means it will take more time than usual.\nwhile the capacitor is being charged, the voltage is in exponential function with time.\n\n'resistance(ohms) * capacitance(farads)' is called RC-timeconstant which may also be\nrepresented as τ (tau).  By using this RC-timeconstant we can find the voltage at any\ntime 't' from the initiation of charging a capacitor with the help of the exponential\nfunction containing RC.  Both at charging and discharging of a capacitor.\n\"\"\"\n\nfrom math import exp  # value of exp = 2.718281828459…\n\n\ndef charging_capacitor(\n    source_voltage: float,  # voltage in volts.\n    resistance: float,  # resistance in ohms.\n    capacitance: float,  # capacitance in farads.\n    time_sec: float,  # time in seconds after charging initiation of capacitor.\n) -> float:\n    \"\"\"\n    Find capacitor voltage at any nth second after initiating its charging.\n\n    Examples\n    --------\n    >>> charging_capacitor(source_voltage=.2,resistance=.9,capacitance=8.4,time_sec=.5)\n    0.013\n\n    >>> charging_capacitor(source_voltage=2.2,resistance=3.5,capacitance=2.4,time_sec=9)\n    1.446\n\n    >>> charging_capacitor(source_voltage=15,resistance=200,capacitance=20,time_sec=2)\n    0.007\n\n    >>> charging_capacitor(20, 2000, 30*pow(10,-5), 4)\n    19.975\n\n    >>> charging_capacitor(source_voltage=0,resistance=10.0,capacitance=.30,time_sec=3)\n    Traceback (most recent call last):\n        ...\n    ValueError: Source voltage must be positive.\n\n    >>> charging_capacitor(source_voltage=20,resistance=-2000,capacitance=30,time_sec=4)\n    Traceback (most recent call last):\n        ...\n    ValueError: Resistance must be positive.\n\n    >>> charging_capacitor(source_voltage=30,resistance=1500,capacitance=0,time_sec=4)\n    Traceback (most recent call last):\n        ...\n    ValueError: Capacitance must be positive.\n    \"\"\"\n\n    if source_voltage <= 0:\n        raise ValueError(\"Source voltage must be positive.\")\n    if resistance <= 0:\n        raise ValueError(\"Resistance must be positive.\")\n    if capacitance <= 0:\n        raise ValueError(\"Capacitance must be positive.\")\n    return round(source_voltage * (1 - exp(-time_sec / (resistance * capacitance))), 3)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "electronics/charging_inductor.py",
    "content": "# source - The ARRL Handbook for Radio Communications\n# https://en.wikipedia.org/wiki/RL_circuit\n\n\"\"\"\nDescription\n-----------\nInductor is a passive electronic device which stores energy but unlike capacitor, it\nstores energy in its 'magnetic field' or 'magnetostatic field'.\n\nWhen inductor is connected to 'DC' current source nothing happens it just works like a\nwire because it's real effect cannot be seen while 'DC' is connected, its not even\ngoing to store energy. Inductor stores energy only when it is working on 'AC' current.\n\nConnecting a inductor in series with a resistor(when R = 0) to a 'AC' potential source,\nfrom zero to a finite value causes a sudden voltage to induced in inductor which\nopposes the current. which results in initially slowly current rise. However it would\ncease if there is no further changes in current. With resistance zero current will never\nstop rising.\n\n'Resistance(ohms) / Inductance(henrys)' is known as RL-timeconstant. It also represents\nas τ (tau). While the charging of a inductor with a resistor results in\na exponential function.\n\nwhen inductor is connected across 'AC' potential source. It starts to store the energy\nin its 'magnetic field'.with the help 'RL-time-constant' we can find current at any time\nin inductor while it is charging.\n\"\"\"\n\nfrom math import exp  # value of exp = 2.718281828459…\n\n\ndef charging_inductor(\n    source_voltage: float,  # source_voltage should be in volts.\n    resistance: float,  # resistance should be in ohms.\n    inductance: float,  # inductance should be in henrys.\n    time: float,  # time should in seconds.\n) -> float:\n    \"\"\"\n    Find inductor current at any nth second after initiating its charging.\n\n    Examples\n    --------\n    >>> charging_inductor(source_voltage=5.8,resistance=1.5,inductance=2.3,time=2)\n    2.817\n\n    >>> charging_inductor(source_voltage=8,resistance=5,inductance=3,time=2)\n    1.543\n\n    >>> charging_inductor(source_voltage=8,resistance=5*pow(10,2),inductance=3,time=2)\n    0.016\n\n    >>> charging_inductor(source_voltage=-8,resistance=100,inductance=15,time=12)\n    Traceback (most recent call last):\n        ...\n    ValueError: Source voltage must be positive.\n\n    >>> charging_inductor(source_voltage=80,resistance=-15,inductance=100,time=5)\n    Traceback (most recent call last):\n        ...\n    ValueError: Resistance must be positive.\n\n    >>> charging_inductor(source_voltage=12,resistance=200,inductance=-20,time=5)\n    Traceback (most recent call last):\n        ...\n    ValueError: Inductance must be positive.\n\n    >>> charging_inductor(source_voltage=0,resistance=200,inductance=20,time=5)\n    Traceback (most recent call last):\n        ...\n    ValueError: Source voltage must be positive.\n\n    >>> charging_inductor(source_voltage=10,resistance=0,inductance=20,time=5)\n    Traceback (most recent call last):\n        ...\n    ValueError: Resistance must be positive.\n\n    >>> charging_inductor(source_voltage=15, resistance=25, inductance=0, time=5)\n    Traceback (most recent call last):\n        ...\n    ValueError: Inductance must be positive.\n    \"\"\"\n\n    if source_voltage <= 0:\n        raise ValueError(\"Source voltage must be positive.\")\n    if resistance <= 0:\n        raise ValueError(\"Resistance must be positive.\")\n    if inductance <= 0:\n        raise ValueError(\"Inductance must be positive.\")\n    return round(\n        source_voltage / resistance * (1 - exp((-time * resistance) / inductance)), 3\n    )\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "electronics/circular_convolution.py",
    "content": "# https://en.wikipedia.org/wiki/Circular_convolution\n\n\"\"\"\nCircular convolution, also known as cyclic convolution,\nis a special case of periodic convolution, which is the convolution of two\nperiodic functions that have the same period. Periodic convolution arises,\nfor example, in the context of the discrete-time Fourier transform (DTFT).\nIn particular, the DTFT of the product of two discrete sequences is the periodic\nconvolution of the DTFTs of the individual sequences. And each DTFT is a periodic\nsummation of a continuous Fourier transform function.\n\nSource: https://en.wikipedia.org/wiki/Circular_convolution\n\"\"\"\n\nimport doctest\nfrom collections import deque\n\nimport numpy as np\n\n\nclass CircularConvolution:\n    \"\"\"\n    This class stores the first and second signal and performs the circular convolution\n    \"\"\"\n\n    def __init__(self) -> None:\n        \"\"\"\n        First signal and second signal are stored as 1-D array\n        \"\"\"\n\n        self.first_signal = [2, 1, 2, -1]\n        self.second_signal = [1, 2, 3, 4]\n\n    def circular_convolution(self) -> list[float]:\n        \"\"\"\n        This function performs the circular convolution of the first and second signal\n        using matrix method\n\n        Usage:\n        >>> convolution = CircularConvolution()\n        >>> convolution.circular_convolution()\n        [10.0, 10.0, 6.0, 14.0]\n\n        >>> convolution.first_signal = [0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6]\n        >>> convolution.second_signal = [0.1, 0.3, 0.5, 0.7, 0.9, 1.1, 1.3, 1.5]\n        >>> convolution.circular_convolution()\n        [5.2, 6.0, 6.48, 6.64, 6.48, 6.0, 5.2, 4.08]\n\n        >>> convolution.first_signal = [-1, 1, 2, -2]\n        >>> convolution.second_signal = [0.5, 1, -1, 2, 0.75]\n        >>> convolution.circular_convolution()\n        [6.25, -3.0, 1.5, -2.0, -2.75]\n\n        >>> convolution.first_signal = [1, -1, 2, 3, -1]\n        >>> convolution.second_signal = [1, 2, 3]\n        >>> convolution.circular_convolution()\n        [8.0, -2.0, 3.0, 4.0, 11.0]\n\n        \"\"\"\n\n        length_first_signal = len(self.first_signal)\n        length_second_signal = len(self.second_signal)\n\n        max_length = max(length_first_signal, length_second_signal)\n\n        # create a zero matrix of max_length x max_length\n        matrix = [[0] * max_length for i in range(max_length)]\n\n        # fills the smaller signal with zeros to make both signals of same length\n        if length_first_signal < length_second_signal:\n            self.first_signal += [0] * (max_length - length_first_signal)\n        elif length_first_signal > length_second_signal:\n            self.second_signal += [0] * (max_length - length_second_signal)\n\n        \"\"\"\n        Fills the matrix in the following way assuming 'x' is the signal of length 4\n        [\n            [x[0], x[3], x[2], x[1]],\n            [x[1], x[0], x[3], x[2]],\n            [x[2], x[1], x[0], x[3]],\n            [x[3], x[2], x[1], x[0]]\n        ]\n        \"\"\"\n        for i in range(max_length):\n            rotated_signal = deque(self.second_signal)\n            rotated_signal.rotate(i)\n            for j, item in enumerate(rotated_signal):\n                matrix[i][j] += item\n\n        # multiply the matrix with the first signal\n        final_signal = np.matmul(np.transpose(matrix), np.transpose(self.first_signal))\n\n        # rounding-off to two decimal places\n        return [float(round(i, 2)) for i in final_signal]\n\n\nif __name__ == \"__main__\":\n    doctest.testmod()\n"
  },
  {
    "path": "electronics/coulombs_law.py",
    "content": "# https://en.wikipedia.org/wiki/Coulomb%27s_law\n\nfrom __future__ import annotations\n\nCOULOMBS_CONSTANT = 8.988e9  # units = N * m^s * C^-2\n\n\ndef couloumbs_law(\n    force: float, charge1: float, charge2: float, distance: float\n) -> dict[str, float]:\n    \"\"\"\n    Apply Coulomb's Law on any three given values. These can be force, charge1,\n    charge2, or distance, and then in a Python dict return name/value pair of\n    the zero value.\n\n    Coulomb's Law states that the magnitude of the electrostatic force of\n    attraction or repulsion between two point charges is directly proportional\n    to the product of the magnitudes of charges and inversely proportional to\n    the square of the distance between them.\n\n    Reference\n    ----------\n    Coulomb (1785) \"Premier mémoire sur l'électricité et le magnétisme,\"\n    Histoire de l'Académie Royale des Sciences, pp. 569-577.\n\n    Parameters\n    ----------\n    force : float with units in Newtons\n\n    charge1 : float with units in Coulombs\n\n    charge2 : float with units in Coulombs\n\n    distance : float with units in meters\n\n    Returns\n    -------\n    result : dict name/value pair of the zero value\n\n    >>> couloumbs_law(force=0, charge1=3, charge2=5, distance=2000)\n    {'force': 33705.0}\n\n    >>> couloumbs_law(force=10, charge1=3, charge2=5, distance=0)\n    {'distance': 116112.01488218177}\n\n    >>> couloumbs_law(force=10, charge1=0, charge2=5, distance=2000)\n    {'charge1': 0.0008900756564307966}\n\n    >>> couloumbs_law(force=0, charge1=0, charge2=5, distance=2000)\n    Traceback (most recent call last):\n      ...\n    ValueError: One and only one argument must be 0\n\n    >>> couloumbs_law(force=0, charge1=3, charge2=5, distance=-2000)\n    Traceback (most recent call last):\n      ...\n    ValueError: Distance cannot be negative\n\n    \"\"\"\n\n    charge_product = abs(charge1 * charge2)\n\n    if (force, charge1, charge2, distance).count(0) != 1:\n        raise ValueError(\"One and only one argument must be 0\")\n    if distance < 0:\n        raise ValueError(\"Distance cannot be negative\")\n    if force == 0:\n        force = COULOMBS_CONSTANT * charge_product / (distance**2)\n        return {\"force\": force}\n    elif charge1 == 0:\n        charge1 = abs(force) * (distance**2) / (COULOMBS_CONSTANT * charge2)\n        return {\"charge1\": charge1}\n    elif charge2 == 0:\n        charge2 = abs(force) * (distance**2) / (COULOMBS_CONSTANT * charge1)\n        return {\"charge2\": charge2}\n    elif distance == 0:\n        distance = (COULOMBS_CONSTANT * charge_product / abs(force)) ** 0.5\n        return {\"distance\": distance}\n    raise ValueError(\"Exactly one argument must be 0\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "electronics/electric_conductivity.py",
    "content": "from __future__ import annotations\n\nELECTRON_CHARGE = 1.6021e-19  # units = C\n\n\ndef electric_conductivity(\n    conductivity: float,\n    electron_conc: float,\n    mobility: float,\n) -> tuple[str, float]:\n    \"\"\"\n    This function can calculate any one of the three -\n    1. Conductivity\n    2. Electron Concentration\n    3. Electron Mobility\n    This is calculated from the other two provided values\n    Examples -\n    >>> electric_conductivity(conductivity=25, electron_conc=100, mobility=0)\n    ('mobility', 1.5604519068722301e+18)\n    >>> electric_conductivity(conductivity=0, electron_conc=1600, mobility=200)\n    ('conductivity', 5.12672e-14)\n    >>> electric_conductivity(conductivity=1000, electron_conc=0, mobility=1200)\n    ('electron_conc', 5.201506356240767e+18)\n    >>> electric_conductivity(conductivity=-10, electron_conc=100, mobility=0)\n    Traceback (most recent call last):\n        ...\n    ValueError: Conductivity cannot be negative\n    >>> electric_conductivity(conductivity=50, electron_conc=-10, mobility=0)\n    Traceback (most recent call last):\n        ...\n    ValueError: Electron concentration cannot be negative\n    >>> electric_conductivity(conductivity=50, electron_conc=0, mobility=-10)\n    Traceback (most recent call last):\n        ...\n    ValueError: mobility cannot be negative\n    >>> electric_conductivity(conductivity=50, electron_conc=0, mobility=0)\n    Traceback (most recent call last):\n        ...\n    ValueError: You cannot supply more or less than 2 values\n    >>> electric_conductivity(conductivity=50, electron_conc=200, mobility=300)\n    Traceback (most recent call last):\n        ...\n    ValueError: You cannot supply more or less than 2 values\n    \"\"\"\n    if (conductivity, electron_conc, mobility).count(0) != 1:\n        raise ValueError(\"You cannot supply more or less than 2 values\")\n    elif conductivity < 0:\n        raise ValueError(\"Conductivity cannot be negative\")\n    elif electron_conc < 0:\n        raise ValueError(\"Electron concentration cannot be negative\")\n    elif mobility < 0:\n        raise ValueError(\"mobility cannot be negative\")\n    elif conductivity == 0:\n        return (\n            \"conductivity\",\n            mobility * electron_conc * ELECTRON_CHARGE,\n        )\n    elif electron_conc == 0:\n        return (\n            \"electron_conc\",\n            conductivity / (mobility * ELECTRON_CHARGE),\n        )\n    else:\n        return (\n            \"mobility\",\n            conductivity / (electron_conc * ELECTRON_CHARGE),\n        )\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "electronics/electric_power.py",
    "content": "# https://en.m.wikipedia.org/wiki/Electric_power\nfrom __future__ import annotations\n\nfrom typing import NamedTuple\n\n\nclass Result(NamedTuple):\n    name: str\n    value: float\n\n\ndef electric_power(voltage: float, current: float, power: float) -> tuple:\n    \"\"\"\n    This function can calculate any one of the three (voltage, current, power),\n    fundamental value of electrical system.\n    examples are below:\n    >>> electric_power(voltage=0, current=2, power=5)\n    Result(name='voltage', value=2.5)\n    >>> electric_power(voltage=2, current=2, power=0)\n    Result(name='power', value=4.0)\n    >>> electric_power(voltage=-2, current=3, power=0)\n    Result(name='power', value=6.0)\n    >>> electric_power(voltage=2, current=4, power=2)\n    Traceback (most recent call last):\n        ...\n    ValueError: Exactly one argument must be 0\n    >>> electric_power(voltage=0, current=0, power=2)\n    Traceback (most recent call last):\n        ...\n    ValueError: Exactly one argument must be 0\n    >>> electric_power(voltage=0, current=2, power=-4)\n    Traceback (most recent call last):\n        ...\n    ValueError: Power cannot be negative in any electrical/electronics system\n    >>> electric_power(voltage=2.2, current=2.2, power=0)\n    Result(name='power', value=4.84)\n    >>> electric_power(current=0, power=6, voltage=2)\n    Result(name='current', value=3.0)\n    \"\"\"\n    if (voltage, current, power).count(0) != 1:\n        raise ValueError(\"Exactly one argument must be 0\")\n    elif power < 0:\n        raise ValueError(\n            \"Power cannot be negative in any electrical/electronics system\"\n        )\n    elif voltage == 0:\n        return Result(\"voltage\", power / current)\n    elif current == 0:\n        return Result(\"current\", power / voltage)\n    elif power == 0:\n        return Result(\"power\", float(round(abs(voltage * current), 2)))\n    else:\n        raise AssertionError\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "electronics/electrical_impedance.py",
    "content": "\"\"\"Electrical impedance is the measure of the opposition that a\ncircuit presents to a current when a voltage is applied.\nImpedance extends the concept of resistance to alternating current (AC) circuits.\nSource: https://en.wikipedia.org/wiki/Electrical_impedance\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom math import pow, sqrt  # noqa: A004\n\n\ndef electrical_impedance(\n    resistance: float, reactance: float, impedance: float\n) -> dict[str, float]:\n    \"\"\"\n    Apply Electrical Impedance formula, on any two given electrical values,\n    which can be resistance, reactance, and impedance, and then in a Python dict\n    return name/value pair of the zero value.\n\n    >>> electrical_impedance(3,4,0)\n    {'impedance': 5.0}\n    >>> electrical_impedance(0,4,5)\n    {'resistance': 3.0}\n    >>> electrical_impedance(3,0,5)\n    {'reactance': 4.0}\n    >>> electrical_impedance(3,4,5)\n    Traceback (most recent call last):\n      ...\n    ValueError: One and only one argument must be 0\n    \"\"\"\n    if (resistance, reactance, impedance).count(0) != 1:\n        raise ValueError(\"One and only one argument must be 0\")\n    if resistance == 0:\n        return {\"resistance\": sqrt(pow(impedance, 2) - pow(reactance, 2))}\n    elif reactance == 0:\n        return {\"reactance\": sqrt(pow(impedance, 2) - pow(resistance, 2))}\n    elif impedance == 0:\n        return {\"impedance\": sqrt(pow(resistance, 2) + pow(reactance, 2))}\n    else:\n        raise ValueError(\"Exactly one argument must be 0\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "electronics/ic_555_timer.py",
    "content": "from __future__ import annotations\n\n\"\"\"\n    Calculate the frequency and/or duty cycle of an astable 555 timer.\n    * https://en.wikipedia.org/wiki/555_timer_IC#Astable\n\n    These functions take in the value of the external resistances (in ohms)\n    and capacitance (in Microfarad), and calculates the following:\n\n    -------------------------------------\n    | Freq = 1.44 /[( R1+ 2 x R2) x C1] |               ... in Hz\n    -------------------------------------\n    where Freq is the frequency,\n          R1 is the first resistance in ohms,\n          R2 is the second resistance in ohms,\n          C1 is the capacitance in Microfarads.\n\n    ------------------------------------------------\n    | Duty Cycle = (R1 + R2) / (R1 + 2 x R2) x 100 |    ... in %\n    ------------------------------------------------\n    where R1 is the first resistance in ohms,\n          R2 is the second resistance in ohms.\n\"\"\"\n\n\ndef astable_frequency(\n    resistance_1: float, resistance_2: float, capacitance: float\n) -> float:\n    \"\"\"\n    Usage examples:\n    >>> astable_frequency(resistance_1=45, resistance_2=45, capacitance=7)\n    1523.8095238095239\n    >>> astable_frequency(resistance_1=356, resistance_2=234, capacitance=976)\n    1.7905459175553078\n    >>> astable_frequency(resistance_1=2, resistance_2=-1, capacitance=2)\n    Traceback (most recent call last):\n        ...\n    ValueError: All values must be positive\n    >>> astable_frequency(resistance_1=45, resistance_2=45, capacitance=0)\n    Traceback (most recent call last):\n        ...\n    ValueError: All values must be positive\n    \"\"\"\n\n    if resistance_1 <= 0 or resistance_2 <= 0 or capacitance <= 0:\n        raise ValueError(\"All values must be positive\")\n    return (1.44 / ((resistance_1 + 2 * resistance_2) * capacitance)) * 10**6\n\n\ndef astable_duty_cycle(resistance_1: float, resistance_2: float) -> float:\n    \"\"\"\n    Usage examples:\n    >>> astable_duty_cycle(resistance_1=45, resistance_2=45)\n    66.66666666666666\n    >>> astable_duty_cycle(resistance_1=356, resistance_2=234)\n    71.60194174757282\n    >>> astable_duty_cycle(resistance_1=2, resistance_2=-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: All values must be positive\n    >>> astable_duty_cycle(resistance_1=0, resistance_2=0)\n    Traceback (most recent call last):\n        ...\n    ValueError: All values must be positive\n    \"\"\"\n\n    if resistance_1 <= 0 or resistance_2 <= 0:\n        raise ValueError(\"All values must be positive\")\n    return (resistance_1 + resistance_2) / (resistance_1 + 2 * resistance_2) * 100\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "electronics/ind_reactance.py",
    "content": "# https://en.wikipedia.org/wiki/Electrical_reactance#Inductive_reactance\nfrom __future__ import annotations\n\nfrom math import pi\n\n\ndef ind_reactance(\n    inductance: float, frequency: float, reactance: float\n) -> dict[str, float]:\n    \"\"\"\n    Calculate inductive reactance, frequency or inductance from two given electrical\n    properties then return name/value pair of the zero value in a Python dict.\n\n    Parameters\n    ----------\n    inductance : float with units in Henries\n\n    frequency : float with units in Hertz\n\n    reactance : float with units in Ohms\n\n    >>> ind_reactance(-35e-6, 1e3, 0)\n    Traceback (most recent call last):\n        ...\n    ValueError: Inductance cannot be negative\n\n    >>> ind_reactance(35e-6, -1e3, 0)\n    Traceback (most recent call last):\n        ...\n    ValueError: Frequency cannot be negative\n\n    >>> ind_reactance(35e-6, 0, -1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Inductive reactance cannot be negative\n\n    >>> ind_reactance(0, 10e3, 50)\n    {'inductance': 0.0007957747154594767}\n\n    >>> ind_reactance(35e-3, 0, 50)\n    {'frequency': 227.36420441699332}\n\n    >>> ind_reactance(35e-6, 1e3, 0)\n    {'reactance': 0.2199114857512855}\n\n    \"\"\"\n\n    if (inductance, frequency, reactance).count(0) != 1:\n        raise ValueError(\"One and only one argument must be 0\")\n    if inductance < 0:\n        raise ValueError(\"Inductance cannot be negative\")\n    if frequency < 0:\n        raise ValueError(\"Frequency cannot be negative\")\n    if reactance < 0:\n        raise ValueError(\"Inductive reactance cannot be negative\")\n    if inductance == 0:\n        return {\"inductance\": reactance / (2 * pi * frequency)}\n    elif frequency == 0:\n        return {\"frequency\": reactance / (2 * pi * inductance)}\n    elif reactance == 0:\n        return {\"reactance\": 2 * pi * frequency * inductance}\n    else:\n        raise ValueError(\"Exactly one argument must be 0\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "electronics/ohms_law.py",
    "content": "# https://en.wikipedia.org/wiki/Ohm%27s_law\nfrom __future__ import annotations\n\n\ndef ohms_law(voltage: float, current: float, resistance: float) -> dict[str, float]:\n    \"\"\"\n    Apply Ohm's Law, on any two given electrical values, which can be voltage, current,\n    and resistance, and then in a Python dict return name/value pair of the zero value.\n\n    >>> ohms_law(voltage=10, resistance=5, current=0)\n    {'current': 2.0}\n    >>> ohms_law(voltage=0, current=0, resistance=10)\n    Traceback (most recent call last):\n      ...\n    ValueError: One and only one argument must be 0\n    >>> ohms_law(voltage=0, current=1, resistance=-2)\n    Traceback (most recent call last):\n      ...\n    ValueError: Resistance cannot be negative\n    >>> ohms_law(resistance=0, voltage=-10, current=1)\n    {'resistance': -10.0}\n    >>> ohms_law(voltage=0, current=-1.5, resistance=2)\n    {'voltage': -3.0}\n    \"\"\"\n    if (voltage, current, resistance).count(0) != 1:\n        raise ValueError(\"One and only one argument must be 0\")\n    if resistance < 0:\n        raise ValueError(\"Resistance cannot be negative\")\n    if voltage == 0:\n        return {\"voltage\": float(current * resistance)}\n    elif current == 0:\n        return {\"current\": voltage / resistance}\n    elif resistance == 0:\n        return {\"resistance\": voltage / current}\n    else:\n        raise ValueError(\"Exactly one argument must be 0\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "electronics/real_and_reactive_power.py",
    "content": "import math\n\n\ndef real_power(apparent_power: float, power_factor: float) -> float:\n    \"\"\"\n    Calculate real power from apparent power and power factor.\n\n    Examples:\n    >>> real_power(100, 0.9)\n    90.0\n    >>> real_power(0, 0.8)\n    0.0\n    >>> real_power(100, -0.9)\n    -90.0\n    \"\"\"\n    if (\n        not isinstance(power_factor, (int, float))\n        or power_factor < -1\n        or power_factor > 1\n    ):\n        raise ValueError(\"power_factor must be a valid float value between -1 and 1.\")\n    return apparent_power * power_factor\n\n\ndef reactive_power(apparent_power: float, power_factor: float) -> float:\n    \"\"\"\n    Calculate reactive power from apparent power and power factor.\n\n    Examples:\n    >>> reactive_power(100, 0.9)\n    43.58898943540673\n    >>> reactive_power(0, 0.8)\n    0.0\n    >>> reactive_power(100, -0.9)\n    43.58898943540673\n    \"\"\"\n    if (\n        not isinstance(power_factor, (int, float))\n        or power_factor < -1\n        or power_factor > 1\n    ):\n        raise ValueError(\"power_factor must be a valid float value between -1 and 1.\")\n    return apparent_power * math.sqrt(1 - power_factor**2)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "electronics/resistor_color_code.py",
    "content": "\"\"\"\nTitle : Calculating the resistance of a n band resistor using the color codes\n\nDescription :\n    Resistors resist the flow of electrical current.Each one has a value that tells how\n    strongly it resists current flow.This value's unit is the ohm, often noted with the\n    Greek letter omega: Ω.\n\n    The colored bands on a resistor can tell you everything you need to know about its\n    value and tolerance, as long as you understand how to read them. The order in which\n    the colors are arranged is very important, and each value of resistor has its own\n    unique combination.\n\n    The color coding for resistors is an international standard that is defined in IEC\n    60062.\n\n    The number of bands present in a resistor varies from three to six. These represent\n    significant figures, multiplier, tolerance, reliability, and temperature coefficient\n    Each color used for a type of band has a value assigned to it. It is read from left\n    to right.\n    All resistors will have significant figures and multiplier bands. In a three band\n    resistor first two bands from the left represent significant figures and the third\n    represents the multiplier band.\n\n    Significant figures - The number of significant figures band in a resistor can vary\n    from two to three.\n    Colors and values associated with significant figure bands -\n    (Black = 0, Brown = 1, Red = 2, Orange = 3, Yellow = 4, Green = 5, Blue = 6,\n    Violet = 7, Grey = 8, White = 9)\n\n    Multiplier - There will be one multiplier band in a resistor. It is multiplied with\n    the significant figures obtained from previous bands.\n    Colors and values associated with multiplier band -\n    (Black = 100, Brown = 10^1, Red = 10^2, Orange = 10^3, Yellow = 10^4, Green = 10^5,\n    Blue = 10^6, Violet = 10^7, Grey = 10^8, White = 10^9, Gold = 10^-1, Silver = 10^-2)\n    Note that multiplier bands use Gold and Silver which are not used for significant\n    figure bands.\n\n    Tolerance - The tolerance band is not always present. It can be seen in four band\n    resistors and above. This is a percentage by which the resistor value can vary.\n    Colors and values associated with tolerance band -\n    (Brown = 1%, Red = 2%, Orange = 0.05%, Yellow = 0.02%, Green = 0.5%,Blue = 0.25%,\n    Violet = 0.1%, Grey = 0.01%, Gold = 5%, Silver = 10%)\n    If no color is mentioned then by default tolerance is 20%\n    Note that tolerance band does not use Black and White colors.\n\n    Temperature Coeffecient - Indicates the change in resistance of the component as\n    a function of ambient temperature in terms of ppm/K.\n    It is present in six band resistors.\n    Colors and values associated with Temperature coeffecient -\n    (Black = 250 ppm/K, Brown = 100 ppm/K, Red = 50 ppm/K, Orange = 15 ppm/K,\n    Yellow = 25 ppm/K, Green = 20 ppm/K, Blue = 10 ppm/K, Violet = 5 ppm/K,\n    Grey = 1 ppm/K)\n    Note that temperature coeffecient band does not use White, Gold, Silver colors.\n\nSources :\n    https://www.calculator.net/resistor-calculator.html\n    https://learn.parallax.com/support/reference/resistor-color-codes\n    https://byjus.com/physics/resistor-colour-codes/\n\"\"\"\n\nvalid_colors: list = [\n    \"Black\",\n    \"Brown\",\n    \"Red\",\n    \"Orange\",\n    \"Yellow\",\n    \"Green\",\n    \"Blue\",\n    \"Violet\",\n    \"Grey\",\n    \"White\",\n    \"Gold\",\n    \"Silver\",\n]\n\nsignificant_figures_color_values: dict[str, int] = {\n    \"Black\": 0,\n    \"Brown\": 1,\n    \"Red\": 2,\n    \"Orange\": 3,\n    \"Yellow\": 4,\n    \"Green\": 5,\n    \"Blue\": 6,\n    \"Violet\": 7,\n    \"Grey\": 8,\n    \"White\": 9,\n}\n\nmultiplier_color_values: dict[str, float] = {\n    \"Black\": 10**0,\n    \"Brown\": 10**1,\n    \"Red\": 10**2,\n    \"Orange\": 10**3,\n    \"Yellow\": 10**4,\n    \"Green\": 10**5,\n    \"Blue\": 10**6,\n    \"Violet\": 10**7,\n    \"Grey\": 10**8,\n    \"White\": 10**9,\n    \"Gold\": 10**-1,\n    \"Silver\": 10**-2,\n}\n\ntolerance_color_values: dict[str, float] = {\n    \"Brown\": 1,\n    \"Red\": 2,\n    \"Orange\": 0.05,\n    \"Yellow\": 0.02,\n    \"Green\": 0.5,\n    \"Blue\": 0.25,\n    \"Violet\": 0.1,\n    \"Grey\": 0.01,\n    \"Gold\": 5,\n    \"Silver\": 10,\n}\n\ntemperature_coeffecient_color_values: dict[str, int] = {\n    \"Black\": 250,\n    \"Brown\": 100,\n    \"Red\": 50,\n    \"Orange\": 15,\n    \"Yellow\": 25,\n    \"Green\": 20,\n    \"Blue\": 10,\n    \"Violet\": 5,\n    \"Grey\": 1,\n}\n\nband_types: dict[int, dict[str, int]] = {\n    3: {\"significant\": 2, \"multiplier\": 1},\n    4: {\"significant\": 2, \"multiplier\": 1, \"tolerance\": 1},\n    5: {\"significant\": 3, \"multiplier\": 1, \"tolerance\": 1},\n    6: {\"significant\": 3, \"multiplier\": 1, \"tolerance\": 1, \"temp_coeffecient\": 1},\n}\n\n\ndef get_significant_digits(colors: list) -> str:\n    \"\"\"\n    Function returns the digit associated with the color. Function takes a\n    list containing colors as input and returns digits as string\n\n    >>> get_significant_digits(['Black','Blue'])\n    '06'\n\n    >>> get_significant_digits(['Aqua','Blue'])\n    Traceback (most recent call last):\n      ...\n    ValueError: Aqua is not a valid color for significant figure bands\n\n    \"\"\"\n    digit = \"\"\n    for color in colors:\n        if color not in significant_figures_color_values:\n            msg = f\"{color} is not a valid color for significant figure bands\"\n            raise ValueError(msg)\n        digit = digit + str(significant_figures_color_values[color])\n    return str(digit)\n\n\ndef get_multiplier(color: str) -> float:\n    \"\"\"\n    Function returns the multiplier value associated with the color.\n    Function takes color as input and returns multiplier value\n\n    >>> get_multiplier('Gold')\n    0.1\n\n    >>> get_multiplier('Ivory')\n    Traceback (most recent call last):\n      ...\n    ValueError: Ivory is not a valid color for multiplier band\n\n    \"\"\"\n    if color not in multiplier_color_values:\n        msg = f\"{color} is not a valid color for multiplier band\"\n        raise ValueError(msg)\n    return multiplier_color_values[color]\n\n\ndef get_tolerance(color: str) -> float:\n    \"\"\"\n    Function returns the tolerance value associated with the color.\n    Function takes color as input and returns tolerance value.\n\n    >>> get_tolerance('Green')\n    0.5\n\n    >>> get_tolerance('Indigo')\n    Traceback (most recent call last):\n      ...\n    ValueError: Indigo is not a valid color for tolerance band\n\n    \"\"\"\n    if color not in tolerance_color_values:\n        msg = f\"{color} is not a valid color for tolerance band\"\n        raise ValueError(msg)\n    return tolerance_color_values[color]\n\n\ndef get_temperature_coeffecient(color: str) -> int:\n    \"\"\"\n    Function returns the temperature coeffecient value associated with the color.\n    Function takes color as input and returns temperature coeffecient value.\n\n    >>> get_temperature_coeffecient('Yellow')\n    25\n\n    >>> get_temperature_coeffecient('Cyan')\n    Traceback (most recent call last):\n      ...\n    ValueError: Cyan is not a valid color for temperature coeffecient band\n\n    \"\"\"\n    if color not in temperature_coeffecient_color_values:\n        msg = f\"{color} is not a valid color for temperature coeffecient band\"\n        raise ValueError(msg)\n    return temperature_coeffecient_color_values[color]\n\n\ndef get_band_type_count(total_number_of_bands: int, type_of_band: str) -> int:\n    \"\"\"\n    Function returns the number of bands of a given type in a resistor with n bands\n    Function takes total_number_of_bands and type_of_band as input and returns\n    number of bands belonging to that type in the given resistor\n\n    >>> get_band_type_count(3,'significant')\n    2\n\n    >>> get_band_type_count(2,'significant')\n    Traceback (most recent call last):\n      ...\n    ValueError: 2 is not a valid number of bands\n\n    >>> get_band_type_count(3,'sign')\n    Traceback (most recent call last):\n      ...\n    ValueError: sign is not valid for a 3 band resistor\n\n    >>> get_band_type_count(3,'tolerance')\n    Traceback (most recent call last):\n      ...\n    ValueError: tolerance is not valid for a 3 band resistor\n\n    >>> get_band_type_count(5,'temp_coeffecient')\n    Traceback (most recent call last):\n      ...\n    ValueError: temp_coeffecient is not valid for a 5 band resistor\n\n    \"\"\"\n    if total_number_of_bands not in band_types:\n        msg = f\"{total_number_of_bands} is not a valid number of bands\"\n        raise ValueError(msg)\n    if type_of_band not in band_types[total_number_of_bands]:\n        msg = f\"{type_of_band} is not valid for a {total_number_of_bands} band resistor\"\n        raise ValueError(msg)\n    return band_types[total_number_of_bands][type_of_band]\n\n\ndef check_validity(number_of_bands: int, colors: list) -> bool:\n    \"\"\"\n    Function checks if the input provided is valid or not.\n    Function takes number_of_bands and colors as input and returns\n    True if it is valid\n\n    >>> check_validity(3, [\"Black\",\"Blue\",\"Orange\"])\n    True\n\n    >>> check_validity(4, [\"Black\",\"Blue\",\"Orange\"])\n    Traceback (most recent call last):\n      ...\n    ValueError: Expecting 4 colors, provided 3 colors\n\n    >>> check_validity(3, [\"Cyan\",\"Red\",\"Yellow\"])\n    Traceback (most recent call last):\n      ...\n    ValueError: Cyan is not a valid color\n\n    \"\"\"\n    if number_of_bands >= 3 and number_of_bands <= 6:\n        if number_of_bands == len(colors):\n            for color in colors:\n                if color not in valid_colors:\n                    msg = f\"{color} is not a valid color\"\n                    raise ValueError(msg)\n            return True\n        else:\n            msg = f\"Expecting {number_of_bands} colors, provided {len(colors)} colors\"\n            raise ValueError(msg)\n    else:\n        msg = \"Invalid number of bands. Resistor bands must be 3 to 6\"\n        raise ValueError(msg)\n\n\ndef calculate_resistance(number_of_bands: int, color_code_list: list) -> dict:\n    \"\"\"\n    Function calculates the total resistance of the resistor using the color codes.\n    Function takes number_of_bands, color_code_list as input and returns\n    resistance\n\n    >>> calculate_resistance(3, [\"Black\",\"Blue\",\"Orange\"])\n    {'resistance': '6000Ω ±20% '}\n\n    >>> calculate_resistance(4, [\"Orange\",\"Green\",\"Blue\",\"Gold\"])\n    {'resistance': '35000000Ω ±5% '}\n\n    >>> calculate_resistance(5, [\"Violet\",\"Brown\",\"Grey\",\"Silver\",\"Green\"])\n    {'resistance': '7.18Ω ±0.5% '}\n\n    >>> calculate_resistance(6, [\"Red\",\"Green\",\"Blue\",\"Yellow\",\"Orange\",\"Grey\"])\n    {'resistance': '2560000Ω ±0.05% 1 ppm/K'}\n\n    >>> calculate_resistance(0, [\"Violet\",\"Brown\",\"Grey\",\"Silver\",\"Green\"])\n    Traceback (most recent call last):\n      ...\n    ValueError: Invalid number of bands. Resistor bands must be 3 to 6\n\n    >>> calculate_resistance(4, [\"Violet\",\"Brown\",\"Grey\",\"Silver\",\"Green\"])\n    Traceback (most recent call last):\n      ...\n    ValueError: Expecting 4 colors, provided 5 colors\n\n    >>> calculate_resistance(4, [\"Violet\",\"Silver\",\"Brown\",\"Grey\"])\n    Traceback (most recent call last):\n      ...\n    ValueError: Silver is not a valid color for significant figure bands\n\n    >>> calculate_resistance(4, [\"Violet\",\"Blue\",\"Lime\",\"Grey\"])\n    Traceback (most recent call last):\n      ...\n    ValueError: Lime is not a valid color\n\n    \"\"\"\n    is_valid = check_validity(number_of_bands, color_code_list)\n    if is_valid:\n        number_of_significant_bands = get_band_type_count(\n            number_of_bands, \"significant\"\n        )\n        significant_colors = color_code_list[:number_of_significant_bands]\n        significant_digits = int(get_significant_digits(significant_colors))\n        multiplier_color = color_code_list[number_of_significant_bands]\n        multiplier = get_multiplier(multiplier_color)\n        if number_of_bands == 3:\n            tolerance_color = None\n        else:\n            tolerance_color = color_code_list[number_of_significant_bands + 1]\n        tolerance = (\n            20 if tolerance_color is None else get_tolerance(str(tolerance_color))\n        )\n        if number_of_bands != 6:\n            temperature_coeffecient_color = None\n        else:\n            temperature_coeffecient_color = color_code_list[\n                number_of_significant_bands + 2\n            ]\n        temperature_coeffecient = (\n            0\n            if temperature_coeffecient_color is None\n            else get_temperature_coeffecient(str(temperature_coeffecient_color))\n        )\n        resisitance = significant_digits * multiplier\n        if temperature_coeffecient == 0:\n            answer = f\"{resisitance}Ω ±{tolerance}% \"\n        else:\n            answer = f\"{resisitance}Ω ±{tolerance}% {temperature_coeffecient} ppm/K\"\n        return {\"resistance\": answer}\n    else:\n        raise ValueError(\"Input is invalid\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "electronics/resistor_equivalence.py",
    "content": "# https://byjus.com/equivalent-resistance-formula/\n\nfrom __future__ import annotations\n\n\ndef resistor_parallel(resistors: list[float]) -> float:\n    \"\"\"\n    Req = 1/ (1/R1 + 1/R2 + ... + 1/Rn)\n\n    >>> resistor_parallel([3.21389, 2, 3])\n    0.8737571620498019\n    >>> resistor_parallel([3.21389, 2, -3])\n    Traceback (most recent call last):\n        ...\n    ValueError: Resistor at index 2 has a negative or zero value!\n    >>> resistor_parallel([3.21389, 2, 0.000])\n    Traceback (most recent call last):\n        ...\n    ValueError: Resistor at index 2 has a negative or zero value!\n    \"\"\"\n\n    first_sum = 0.00\n    for index, resistor in enumerate(resistors):\n        if resistor <= 0:\n            msg = f\"Resistor at index {index} has a negative or zero value!\"\n            raise ValueError(msg)\n        first_sum += 1 / float(resistor)\n    return 1 / first_sum\n\n\ndef resistor_series(resistors: list[float]) -> float:\n    \"\"\"\n    Req = R1 + R2 + ... + Rn\n\n    Calculate the equivalent resistance for any number of resistors in parallel.\n\n    >>> resistor_series([3.21389, 2, 3])\n    8.21389\n    >>> resistor_series([3.21389, 2, -3])\n    Traceback (most recent call last):\n        ...\n    ValueError: Resistor at index 2 has a negative value!\n    \"\"\"\n    sum_r = 0.00\n    for index, resistor in enumerate(resistors):\n        sum_r += resistor\n        if resistor < 0:\n            msg = f\"Resistor at index {index} has a negative value!\"\n            raise ValueError(msg)\n    return sum_r\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "electronics/resonant_frequency.py",
    "content": "# https://en.wikipedia.org/wiki/LC_circuit\n\n\"\"\"An LC circuit, also called a resonant circuit, tank circuit, or tuned circuit,\nis an electric circuit consisting of an inductor, represented by the letter L,\nand a capacitor, represented by the letter C, connected together.\nThe circuit can act as an electrical resonator, an electrical analogue of a\ntuning fork, storing energy oscillating at the circuit's resonant frequency.\nSource: https://en.wikipedia.org/wiki/LC_circuit\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom math import pi, sqrt\n\n\ndef resonant_frequency(inductance: float, capacitance: float) -> tuple:\n    \"\"\"\n    This function can calculate the resonant frequency of LC circuit,\n    for the given value of inductance and capacitnace.\n\n    Examples are given below:\n    >>> resonant_frequency(inductance=10, capacitance=5)\n    ('Resonant frequency', 0.022507907903927652)\n    >>> resonant_frequency(inductance=0, capacitance=5)\n    Traceback (most recent call last):\n      ...\n    ValueError: Inductance cannot be 0 or negative\n    >>> resonant_frequency(inductance=10, capacitance=0)\n    Traceback (most recent call last):\n      ...\n    ValueError: Capacitance cannot be 0 or negative\n    \"\"\"\n\n    if inductance <= 0:\n        raise ValueError(\"Inductance cannot be 0 or negative\")\n\n    elif capacitance <= 0:\n        raise ValueError(\"Capacitance cannot be 0 or negative\")\n\n    else:\n        return (\n            \"Resonant frequency\",\n            float(1 / (2 * pi * (sqrt(inductance * capacitance)))),\n        )\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "electronics/wheatstone_bridge.py",
    "content": "# https://en.wikipedia.org/wiki/Wheatstone_bridge\nfrom __future__ import annotations\n\n\ndef wheatstone_solver(\n    resistance_1: float, resistance_2: float, resistance_3: float\n) -> float:\n    \"\"\"\n    This function can calculate the unknown resistance in an wheatstone network,\n    given that the three other resistances in the network are known.\n    The formula to calculate the same is:\n\n    ---------------\n    |Rx=(R2/R1)*R3|\n    ---------------\n\n    Usage examples:\n    >>> wheatstone_solver(resistance_1=2, resistance_2=4, resistance_3=5)\n    10.0\n    >>> wheatstone_solver(resistance_1=356, resistance_2=234, resistance_3=976)\n    641.5280898876405\n    >>> wheatstone_solver(resistance_1=2, resistance_2=-1, resistance_3=2)\n    Traceback (most recent call last):\n        ...\n    ValueError: All resistance values must be positive\n    >>> wheatstone_solver(resistance_1=0, resistance_2=0, resistance_3=2)\n    Traceback (most recent call last):\n        ...\n    ValueError: All resistance values must be positive\n    \"\"\"\n\n    if resistance_1 <= 0 or resistance_2 <= 0 or resistance_3 <= 0:\n        raise ValueError(\"All resistance values must be positive\")\n    else:\n        return float((resistance_2 / resistance_1) * resistance_3)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "file_transfer/__init__.py",
    "content": ""
  },
  {
    "path": "file_transfer/mytext.txt",
    "content": "Hello\nThis is sample data\n«küßî»\n“ЌύБЇ”\n😀😉\n😋\n"
  },
  {
    "path": "file_transfer/receive_file.py",
    "content": "import socket\n\n\ndef main():\n    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n    host = socket.gethostname()\n    port = 12312\n\n    sock.connect((host, port))\n    sock.send(b\"Hello server!\")\n\n    with open(\"Received_file\", \"wb\") as out_file:\n        print(\"File opened\")\n        print(\"Receiving data...\")\n        while True:\n            data = sock.recv(1024)\n            if not data:\n                break\n            out_file.write(data)\n\n    print(\"Successfully received the file\")\n    sock.close()\n    print(\"Connection closed\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "file_transfer/send_file.py",
    "content": "def send_file(filename: str = \"mytext.txt\", testing: bool = False) -> None:\n    import socket\n\n    port = 12312  # Reserve a port for your service.\n    sock = socket.socket()  # Create a socket object\n    host = socket.gethostname()  # Get local machine name\n    sock.bind((host, port))  # Bind to the port\n    sock.listen(5)  # Now wait for client connection.\n\n    print(\"Server listening....\")\n\n    while True:\n        conn, addr = sock.accept()  # Establish connection with client.\n        print(f\"Got connection from {addr}\")\n        data = conn.recv(1024)\n        print(f\"Server received: {data = }\")\n\n        with open(filename, \"rb\") as in_file:\n            data = in_file.read(1024)\n            while data:\n                conn.send(data)\n                print(f\"Sent {data!r}\")\n                data = in_file.read(1024)\n\n        print(\"Done sending\")\n        conn.close()\n        if testing:  # Allow the test to complete\n            break\n\n    sock.shutdown(1)\n    sock.close()\n\n\nif __name__ == \"__main__\":\n    send_file()\n"
  },
  {
    "path": "file_transfer/tests/__init__.py",
    "content": ""
  },
  {
    "path": "file_transfer/tests/test_send_file.py",
    "content": "from unittest.mock import Mock, patch\n\nfrom file_transfer.send_file import send_file\n\n\n@patch(\"socket.socket\")\n@patch(\"builtins.open\")\ndef test_send_file_running_as_expected(file, sock):\n    # ===== initialization =====\n    conn = Mock()\n    sock.return_value.accept.return_value = conn, Mock()\n    f = iter([1, None])\n    file.return_value.__enter__.return_value.read.side_effect = lambda _: next(f)\n\n    # ===== invoke =====\n    send_file(filename=\"mytext.txt\", testing=True)\n\n    # ===== ensurance =====\n    sock.assert_called_once()\n    sock.return_value.bind.assert_called_once()\n    sock.return_value.listen.assert_called_once()\n    sock.return_value.accept.assert_called_once()\n    conn.recv.assert_called_once()\n\n    file.return_value.__enter__.assert_called_once()\n    file.return_value.__enter__.return_value.read.assert_called()\n\n    conn.send.assert_called_once()\n    conn.close.assert_called_once()\n    sock.return_value.shutdown.assert_called_once()\n    sock.return_value.close.assert_called_once()\n"
  },
  {
    "path": "financial/README.md",
    "content": "# Interest\n\n* 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/)\n* 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/)\n"
  },
  {
    "path": "financial/__init__.py",
    "content": ""
  },
  {
    "path": "financial/equated_monthly_installments.py",
    "content": "\"\"\"\nProgram to calculate the amortization amount per month, given\n- Principal borrowed\n- Rate of interest per annum\n- Years to repay the loan\n\nWikipedia Reference: https://en.wikipedia.org/wiki/Equated_monthly_installment\n\"\"\"\n\n\ndef equated_monthly_installments(\n    principal: float, rate_per_annum: float, years_to_repay: int\n) -> float:\n    \"\"\"\n    Formula for amortization amount per month:\n    A = p * r * (1 + r)^n / ((1 + r)^n - 1)\n    where p is the principal, r is the rate of interest per month\n    and n is the number of payments\n\n    >>> equated_monthly_installments(25000, 0.12, 3)\n    830.3577453212793\n    >>> equated_monthly_installments(25000, 0.12, 10)\n    358.67737100646826\n    >>> equated_monthly_installments(0, 0.12, 3)\n    Traceback (most recent call last):\n        ...\n    Exception: Principal borrowed must be > 0\n    >>> equated_monthly_installments(25000, -1, 3)\n    Traceback (most recent call last):\n        ...\n    Exception: Rate of interest must be >= 0\n    >>> equated_monthly_installments(25000, 0.12, 0)\n    Traceback (most recent call last):\n        ...\n    Exception: Years to repay must be an integer > 0\n    \"\"\"\n    if principal <= 0:\n        raise Exception(\"Principal borrowed must be > 0\")\n    if rate_per_annum < 0:\n        raise Exception(\"Rate of interest must be >= 0\")\n    if years_to_repay <= 0 or not isinstance(years_to_repay, int):\n        raise Exception(\"Years to repay must be an integer > 0\")\n\n    # Yearly rate is divided by 12 to get monthly rate\n    rate_per_month = rate_per_annum / 12\n\n    # Years to repay is multiplied by 12 to get number of payments as payment is monthly\n    number_of_payments = years_to_repay * 12\n\n    return (\n        principal\n        * rate_per_month\n        * (1 + rate_per_month) ** number_of_payments\n        / ((1 + rate_per_month) ** number_of_payments - 1)\n    )\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "financial/exponential_moving_average.py",
    "content": "\"\"\"\nCalculate the exponential moving average (EMA) on the series of stock prices.\nWikipedia Reference: https://en.wikipedia.org/wiki/Exponential_smoothing\nhttps://www.investopedia.com/terms/e/ema.asp#toc-what-is-an-exponential\n-moving-average-ema\n\nExponential moving average is used in finance to analyze changes stock prices.\nEMA is used in conjunction with Simple moving average (SMA), EMA reacts to the\nchanges in the value quicker than SMA, which is one of the advantages of using EMA.\n\"\"\"\n\nfrom collections.abc import Iterator\n\n\ndef exponential_moving_average(\n    stock_prices: Iterator[float], window_size: int\n) -> Iterator[float]:\n    \"\"\"\n    Yields exponential moving averages of the given stock prices.\n    >>> tuple(exponential_moving_average(iter([2, 5, 3, 8.2, 6, 9, 10]), 3))\n    (2, 3.5, 3.25, 5.725, 5.8625, 7.43125, 8.715625)\n\n    :param stock_prices: A stream of stock prices\n    :param window_size: The number of stock prices that will trigger a new calculation\n                        of the exponential average (window_size > 0)\n    :return: Yields a sequence of exponential moving averages\n\n    Formula:\n\n    st = alpha * xt + (1 - alpha) * st_prev\n\n    Where,\n    st : Exponential moving average at timestamp t\n    xt : stock price in from the stock prices at timestamp t\n    st_prev : Exponential moving average at timestamp t-1\n    alpha : 2/(1 + window_size) - smoothing factor\n\n    Exponential moving average (EMA) is a rule of thumb technique for\n    smoothing time series data using an exponential window function.\n    \"\"\"\n\n    if window_size <= 0:\n        raise ValueError(\"window_size must be > 0\")\n\n    # Calculating smoothing factor\n    alpha = 2 / (1 + window_size)\n\n    # Exponential average at timestamp t\n    moving_average = 0.0\n\n    for i, stock_price in enumerate(stock_prices):\n        if i <= window_size:\n            # Assigning simple moving average till the window_size for the first time\n            # is reached\n            moving_average = (moving_average + stock_price) * 0.5 if i else stock_price\n        else:\n            # Calculating exponential moving average based on current timestamp data\n            # point and previous exponential average value\n            moving_average = (alpha * stock_price) + ((1 - alpha) * moving_average)\n        yield moving_average\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    stock_prices = [2.0, 5, 3, 8.2, 6, 9, 10]\n    window_size = 3\n    result = tuple(exponential_moving_average(iter(stock_prices), window_size))\n    print(f\"{stock_prices = }\")\n    print(f\"{window_size = }\")\n    print(f\"{result = }\")\n"
  },
  {
    "path": "financial/interest.py",
    "content": "# https://www.investopedia.com\n\nfrom __future__ import annotations\n\n\ndef simple_interest(\n    principal: float, daily_interest_rate: float, days_between_payments: float\n) -> float:\n    \"\"\"\n    >>> simple_interest(18000.0, 0.06, 3)\n    3240.0\n    >>> simple_interest(0.5, 0.06, 3)\n    0.09\n    >>> simple_interest(18000.0, 0.01, 10)\n    1800.0\n    >>> simple_interest(18000.0, 0.0, 3)\n    0.0\n    >>> simple_interest(5500.0, 0.01, 100)\n    5500.0\n    >>> simple_interest(10000.0, -0.06, 3)\n    Traceback (most recent call last):\n        ...\n    ValueError: daily_interest_rate must be >= 0\n    >>> simple_interest(-10000.0, 0.06, 3)\n    Traceback (most recent call last):\n        ...\n    ValueError: principal must be > 0\n    >>> simple_interest(5500.0, 0.01, -5)\n    Traceback (most recent call last):\n        ...\n    ValueError: days_between_payments must be > 0\n    \"\"\"\n    if days_between_payments <= 0:\n        raise ValueError(\"days_between_payments must be > 0\")\n    if daily_interest_rate < 0:\n        raise ValueError(\"daily_interest_rate must be >= 0\")\n    if principal <= 0:\n        raise ValueError(\"principal must be > 0\")\n    return principal * daily_interest_rate * days_between_payments\n\n\ndef compound_interest(\n    principal: float,\n    nominal_annual_interest_rate_percentage: float,\n    number_of_compounding_periods: float,\n) -> float:\n    \"\"\"\n    >>> compound_interest(10000.0, 0.05, 3)\n    1576.2500000000014\n    >>> compound_interest(10000.0, 0.05, 1)\n    500.00000000000045\n    >>> compound_interest(0.5, 0.05, 3)\n    0.07881250000000006\n    >>> compound_interest(10000.0, 0.06, -4)\n    Traceback (most recent call last):\n        ...\n    ValueError: number_of_compounding_periods must be > 0\n    >>> compound_interest(10000.0, -3.5, 3.0)\n    Traceback (most recent call last):\n        ...\n    ValueError: nominal_annual_interest_rate_percentage must be >= 0\n    >>> compound_interest(-5500.0, 0.01, 5)\n    Traceback (most recent call last):\n        ...\n    ValueError: principal must be > 0\n    \"\"\"\n    if number_of_compounding_periods <= 0:\n        raise ValueError(\"number_of_compounding_periods must be > 0\")\n    if nominal_annual_interest_rate_percentage < 0:\n        raise ValueError(\"nominal_annual_interest_rate_percentage must be >= 0\")\n    if principal <= 0:\n        raise ValueError(\"principal must be > 0\")\n\n    return principal * (\n        (1 + nominal_annual_interest_rate_percentage) ** number_of_compounding_periods\n        - 1\n    )\n\n\ndef apr_interest(\n    principal: float,\n    nominal_annual_percentage_rate: float,\n    number_of_years: float,\n) -> float:\n    \"\"\"\n    >>> apr_interest(10000.0, 0.05, 3)\n    1618.223072263547\n    >>> apr_interest(10000.0, 0.05, 1)\n    512.6749646744732\n    >>> apr_interest(0.5, 0.05, 3)\n    0.08091115361317736\n    >>> apr_interest(10000.0, 0.06, -4)\n    Traceback (most recent call last):\n        ...\n    ValueError: number_of_years must be > 0\n    >>> apr_interest(10000.0, -3.5, 3.0)\n    Traceback (most recent call last):\n        ...\n    ValueError: nominal_annual_percentage_rate must be >= 0\n    >>> apr_interest(-5500.0, 0.01, 5)\n    Traceback (most recent call last):\n        ...\n    ValueError: principal must be > 0\n    \"\"\"\n    if number_of_years <= 0:\n        raise ValueError(\"number_of_years must be > 0\")\n    if nominal_annual_percentage_rate < 0:\n        raise ValueError(\"nominal_annual_percentage_rate must be >= 0\")\n    if principal <= 0:\n        raise ValueError(\"principal must be > 0\")\n\n    return compound_interest(\n        principal, nominal_annual_percentage_rate / 365, number_of_years * 365\n    )\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "financial/present_value.py",
    "content": "\"\"\"\nReference: https://www.investopedia.com/terms/p/presentvalue.asp\n\nAn algorithm that calculates the present value of a stream of yearly cash flows given...\n1. The discount rate (as a decimal, not a percent)\n2. An array of cash flows, with the index of the cash flow being the associated year\n\nNote: This algorithm assumes that cash flows are paid at the end of the specified year\n\"\"\"\n\n\ndef present_value(discount_rate: float, cash_flows: list[float]) -> float:\n    \"\"\"\n    >>> present_value(0.13, [10, 20.70, -293, 297])\n    4.69\n    >>> present_value(0.07, [-109129.39, 30923.23, 15098.93, 29734,39])\n    -42739.63\n    >>> present_value(0.07, [109129.39, 30923.23, 15098.93, 29734,39])\n    175519.15\n    >>> present_value(-1, [109129.39, 30923.23, 15098.93, 29734,39])\n    Traceback (most recent call last):\n        ...\n    ValueError: Discount rate cannot be negative\n    >>> present_value(0.03, [])\n    Traceback (most recent call last):\n        ...\n    ValueError: Cash flows list cannot be empty\n    \"\"\"\n    if discount_rate < 0:\n        raise ValueError(\"Discount rate cannot be negative\")\n    if not cash_flows:\n        raise ValueError(\"Cash flows list cannot be empty\")\n    present_value = sum(\n        cash_flow / ((1 + discount_rate) ** i) for i, cash_flow in enumerate(cash_flows)\n    )\n    return round(present_value, ndigits=2)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "financial/price_plus_tax.py",
    "content": "\"\"\"\nCalculate price plus tax of a good or service given its price and a tax rate.\n\"\"\"\n\n\ndef price_plus_tax(price: float, tax_rate: float) -> float:\n    \"\"\"\n    >>> price_plus_tax(100, 0.25)\n    125.0\n    >>> price_plus_tax(125.50, 0.05)\n    131.775\n    \"\"\"\n    return price * (1 + tax_rate)\n\n\nif __name__ == \"__main__\":\n    print(f\"{price_plus_tax(100, 0.25) = }\")\n    print(f\"{price_plus_tax(125.50, 0.05) = }\")\n"
  },
  {
    "path": "financial/simple_moving_average.py",
    "content": "\"\"\"\nThe Simple Moving Average (SMA) is a statistical calculation used to analyze data points\nby creating a constantly updated average price over a specific time period.\nIn finance, SMA is often used in time series analysis to smooth out price data\nand identify trends.\n\nReference: https://en.wikipedia.org/wiki/Moving_average\n\"\"\"\n\nfrom collections.abc import Sequence\n\n\ndef simple_moving_average(\n    data: Sequence[float], window_size: int\n) -> list[float | None]:\n    \"\"\"\n    Calculate the simple moving average (SMA) for some given time series data.\n\n    :param data: A list of numerical data points.\n    :param window_size: An integer representing the size of the SMA window.\n    :return: A list of SMA values with the same length as the input data.\n\n    Examples:\n    >>> sma = simple_moving_average([10, 12, 15, 13, 14, 16, 18, 17, 19, 21], 3)\n    >>> [round(value, 2) if value is not None else None for value in sma]\n    [None, None, 12.33, 13.33, 14.0, 14.33, 16.0, 17.0, 18.0, 19.0]\n    >>> simple_moving_average([10, 12, 15], 5)\n    [None, None, None]\n    >>> simple_moving_average([10, 12, 15, 13, 14, 16, 18, 17, 19, 21], 0)\n    Traceback (most recent call last):\n    ...\n    ValueError: Window size must be a positive integer\n    \"\"\"\n    if window_size < 1:\n        raise ValueError(\"Window size must be a positive integer\")\n\n    sma: list[float | None] = []\n\n    for i in range(len(data)):\n        if i < window_size - 1:\n            sma.append(None)  # SMA not available for early data points\n        else:\n            window = data[i - window_size + 1 : i + 1]\n            sma_value = sum(window) / window_size\n            sma.append(sma_value)\n    return sma\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    # Example data (replace with your own time series data)\n    data = [10, 12, 15, 13, 14, 16, 18, 17, 19, 21]\n\n    # Specify the window size for the SMA\n    window_size = 3\n\n    # Calculate the Simple Moving Average\n    sma_values = simple_moving_average(data, window_size)\n\n    # Print the SMA values\n    print(\"Simple Moving Average (SMA) Values:\")\n    for i, value in enumerate(sma_values):\n        if value is not None:\n            print(f\"Day {i + 1}: {value:.2f}\")\n        else:\n            print(f\"Day {i + 1}: Not enough data for SMA\")\n"
  },
  {
    "path": "financial/straight_line_depreciation.py",
    "content": "\"\"\"\nIn accounting, depreciation refers to the decreases in the value\nof a fixed asset during the asset's useful life.\nWhen an organization purchases a fixed asset,\nthe purchase expenditure is not recognized as an expense immediately.\nInstead, the decreases in the asset's value are recognized as expenses\nover the years during which the asset is used.\n\nThe following methods are widely used\nfor depreciation calculation in accounting:\n- Straight-line method\n- Diminishing balance method\n- Units-of-production method\n\nThe straight-line method is the simplest and most widely used.\nThis method calculates depreciation by spreading the cost evenly\nover the asset's useful life.\n\nThe following formula shows how to calculate the yearly depreciation expense:\n\n- annual depreciation expense =\n    (purchase cost of asset - residual value) / useful life of asset(years)\n\nFurther information on:\nhttps://en.wikipedia.org/wiki/Depreciation\n\nThe function, straight_line_depreciation, returns a list of\nthe depreciation expenses over the given period.\n\"\"\"\n\n\ndef straight_line_depreciation(\n    useful_years: int,\n    purchase_value: float,\n    residual_value: float = 0.0,\n) -> list[float]:\n    \"\"\"\n    Calculate the depreciation expenses over the given period\n    :param useful_years: Number of years the asset will be used\n    :param purchase_value: Purchase expenditure for the asset\n    :param residual_value: Residual value of the asset at the end of its useful life\n    :return: A list of annual depreciation expenses over the asset's useful life\n    >>> straight_line_depreciation(10, 1100.0, 100.0)\n    [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0]\n    >>> straight_line_depreciation(6, 1250.0, 50.0)\n    [200.0, 200.0, 200.0, 200.0, 200.0, 200.0]\n    >>> straight_line_depreciation(4, 1001.0)\n    [250.25, 250.25, 250.25, 250.25]\n    >>> straight_line_depreciation(11, 380.0, 50.0)\n    [30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0]\n    >>> straight_line_depreciation(1, 4985, 100)\n    [4885.0]\n    \"\"\"\n\n    if not isinstance(useful_years, int):\n        raise TypeError(\"Useful years must be an integer\")\n\n    if useful_years < 1:\n        raise ValueError(\"Useful years cannot be less than 1\")\n\n    if not isinstance(purchase_value, (float, int)):\n        raise TypeError(\"Purchase value must be numeric\")\n\n    if not isinstance(residual_value, (float, int)):\n        raise TypeError(\"Residual value must be numeric\")\n\n    if purchase_value < 0.0:\n        raise ValueError(\"Purchase value cannot be less than zero\")\n\n    if purchase_value < residual_value:\n        raise ValueError(\"Purchase value cannot be less than residual value\")\n\n    # Calculate annual depreciation expense\n    depreciable_cost = purchase_value - residual_value\n    annual_depreciation_expense = depreciable_cost / useful_years\n\n    # List of annual depreciation expenses\n    list_of_depreciation_expenses = []\n    accumulated_depreciation_expense = 0.0\n    for period in range(useful_years):\n        if period != useful_years - 1:\n            accumulated_depreciation_expense += annual_depreciation_expense\n            list_of_depreciation_expenses.append(annual_depreciation_expense)\n        else:\n            depreciation_expense_in_end_year = (\n                depreciable_cost - accumulated_depreciation_expense\n            )\n            list_of_depreciation_expenses.append(depreciation_expense_in_end_year)\n\n    return list_of_depreciation_expenses\n\n\nif __name__ == \"__main__\":\n    user_input_useful_years = int(input(\"Please Enter Useful Years:\\n > \"))\n    user_input_purchase_value = float(input(\"Please Enter Purchase Value:\\n > \"))\n    user_input_residual_value = float(input(\"Please Enter Residual Value:\\n > \"))\n    print(\n        straight_line_depreciation(\n            user_input_useful_years,\n            user_input_purchase_value,\n            user_input_residual_value,\n        )\n    )\n"
  },
  {
    "path": "financial/time_and_half_pay.py",
    "content": "\"\"\"\nCalculate time and a half pay\n\"\"\"\n\n\ndef pay(hours_worked: float, pay_rate: float, hours: float = 40) -> float:\n    \"\"\"\n    hours_worked = The total hours worked\n    pay_rate = Amount of money per hour\n    hours = Number of hours that must be worked before you receive time and a half\n\n    >>> pay(41, 1)\n    41.5\n    >>> pay(65, 19)\n    1472.5\n    >>> pay(10, 1)\n    10.0\n    \"\"\"\n    # Check that all input parameters are float or integer\n    assert isinstance(hours_worked, (float, int)), (\n        \"Parameter 'hours_worked' must be of type 'int' or 'float'\"\n    )\n    assert isinstance(pay_rate, (float, int)), (\n        \"Parameter 'pay_rate' must be of type 'int' or 'float'\"\n    )\n    assert isinstance(hours, (float, int)), (\n        \"Parameter 'hours' must be of type 'int' or 'float'\"\n    )\n\n    normal_pay = hours_worked * pay_rate\n    over_time = max(0, hours_worked - hours)\n    over_time_pay = over_time * pay_rate / 2\n    return normal_pay + over_time_pay\n\n\nif __name__ == \"__main__\":\n    # Test\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "fractals/__init__.py",
    "content": ""
  },
  {
    "path": "fractals/julia_sets.py",
    "content": "\"\"\"Author Alexandre De Zotti\n\nDraws Julia sets of quadratic polynomials and exponential maps.\n More specifically, this iterates the function a fixed number of times\n then plots whether the absolute value of the last iterate is greater than\n a fixed threshold (named \"escape radius\"). For the exponential map this is not\n really an escape radius but rather a convenient way to approximate the Julia\n set with bounded orbits.\n\nThe examples presented here are:\n- The Cauliflower Julia set, see e.g.\nhttps://en.wikipedia.org/wiki/File:Julia_z2%2B0,25.png\n- Other examples from https://en.wikipedia.org/wiki/Julia_set\n- An exponential map Julia set, ambiantly homeomorphic to the examples in\nhttps://www.math.univ-toulouse.fr/~cheritat/GalII/galery.html\n and\nhttps://ddd.uab.cat/pub/pubmat/02141493v43n1/02141493v43n1p27.pdf\n\nRemark: Some overflow runtime warnings are suppressed. This is because of the\n way the iteration loop is implemented, using numpy's efficient computations.\n Overflows and infinites are replaced after each step by a large number.\n\"\"\"\n\nimport warnings\nfrom collections.abc import Callable\nfrom typing import Any\n\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nc_cauliflower = 0.25 + 0.0j\nc_polynomial_1 = -0.4 + 0.6j\nc_polynomial_2 = -0.1 + 0.651j\nc_exponential = -2.0\nnb_iterations = 56\nwindow_size = 2.0\nnb_pixels = 666\n\n\ndef eval_exponential(c_parameter: complex, z_values: np.ndarray) -> np.ndarray:\n    \"\"\"\n    Evaluate $e^z + c$.\n    >>> float(eval_exponential(0, 0))\n    1.0\n    >>> bool(abs(eval_exponential(1, np.pi*1.j)) < 1e-15)\n    True\n    >>> bool(abs(eval_exponential(1.j, 0)-1-1.j) < 1e-15)\n    True\n    \"\"\"\n    return np.exp(z_values) + c_parameter\n\n\ndef eval_quadratic_polynomial(c_parameter: complex, z_values: np.ndarray) -> np.ndarray:\n    \"\"\"\n    >>> eval_quadratic_polynomial(0, 2)\n    4\n    >>> eval_quadratic_polynomial(-1, 1)\n    0\n    >>> round(eval_quadratic_polynomial(1.j, 0).imag)\n    1\n    >>> round(eval_quadratic_polynomial(1.j, 0).real)\n    0\n    \"\"\"\n    return z_values * z_values + c_parameter\n\n\ndef prepare_grid(window_size: float, nb_pixels: int) -> np.ndarray:\n    \"\"\"\n    Create a grid of complex values of size nb_pixels*nb_pixels with real and\n     imaginary parts ranging from -window_size to window_size (inclusive).\n    Returns a numpy array.\n\n    >>> prepare_grid(1,3)\n    array([[-1.-1.j, -1.+0.j, -1.+1.j],\n           [ 0.-1.j,  0.+0.j,  0.+1.j],\n           [ 1.-1.j,  1.+0.j,  1.+1.j]])\n    \"\"\"\n    x = np.linspace(-window_size, window_size, nb_pixels)\n    x = x.reshape((nb_pixels, 1))\n    y = np.linspace(-window_size, window_size, nb_pixels)\n    y = y.reshape((1, nb_pixels))\n    return x + 1.0j * y\n\n\ndef iterate_function(\n    eval_function: Callable[[Any, np.ndarray], np.ndarray],\n    function_params: Any,\n    nb_iterations: int,\n    z_0: np.ndarray,\n    infinity: float | None = None,\n) -> np.ndarray:\n    \"\"\"\n    Iterate the function \"eval_function\" exactly nb_iterations times.\n    The first argument of the function is a parameter which is contained in\n    function_params. The variable z_0 is an array that contains the initial\n    values to iterate from.\n    This function returns the final iterates.\n\n    >>> iterate_function(eval_quadratic_polynomial, 0, 3, np.array([0,1,2])).shape\n    (3,)\n    >>> complex(np.round(iterate_function(eval_quadratic_polynomial,\n    ... 0,\n    ... 3,\n    ... np.array([0,1,2]))[0]))\n    0j\n    >>> complex(np.round(iterate_function(eval_quadratic_polynomial,\n    ... 0,\n    ... 3,\n    ... np.array([0,1,2]))[1]))\n    (1+0j)\n    >>> complex(np.round(iterate_function(eval_quadratic_polynomial,\n    ... 0,\n    ... 3,\n    ... np.array([0,1,2]))[2]))\n    (256+0j)\n    \"\"\"\n\n    z_n = z_0.astype(\"complex64\")\n    for _ in range(nb_iterations):\n        z_n = eval_function(function_params, z_n)\n        if infinity is not None:\n            np.nan_to_num(z_n, copy=False, nan=infinity)\n            z_n[abs(z_n) == np.inf] = infinity\n    return z_n\n\n\ndef show_results(\n    function_label: str,\n    function_params: Any,\n    escape_radius: float,\n    z_final: np.ndarray,\n) -> None:\n    \"\"\"\n    Plots of whether the absolute value of z_final is greater than\n    the value of escape_radius. Adds the function_label and function_params to\n    the title.\n\n    >>> show_results('80', 0, 1, np.array([[0,1,.5],[.4,2,1.1],[.2,1,1.3]]))\n    \"\"\"\n\n    abs_z_final = (abs(z_final)).transpose()\n    abs_z_final[:, :] = abs_z_final[::-1, :]\n    plt.matshow(abs_z_final < escape_radius)\n    plt.title(f\"Julia set of ${function_label}$, $c={function_params}$\")\n    plt.show()\n\n\ndef ignore_overflow_warnings() -> None:\n    \"\"\"\n    Ignore some overflow and invalid value warnings.\n\n    >>> ignore_overflow_warnings()\n    \"\"\"\n    warnings.filterwarnings(\n        \"ignore\", category=RuntimeWarning, message=\"overflow encountered in multiply\"\n    )\n    warnings.filterwarnings(\n        \"ignore\",\n        category=RuntimeWarning,\n        message=\"invalid value encountered in multiply\",\n    )\n    warnings.filterwarnings(\n        \"ignore\", category=RuntimeWarning, message=\"overflow encountered in absolute\"\n    )\n    warnings.filterwarnings(\n        \"ignore\", category=RuntimeWarning, message=\"overflow encountered in exp\"\n    )\n\n\nif __name__ == \"__main__\":\n    z_0 = prepare_grid(window_size, nb_pixels)\n\n    ignore_overflow_warnings()  # See file header for explanations\n\n    nb_iterations = 24\n    escape_radius = 2 * abs(c_cauliflower) + 1\n    z_final = iterate_function(\n        eval_quadratic_polynomial,\n        c_cauliflower,\n        nb_iterations,\n        z_0,\n        infinity=1.1 * escape_radius,\n    )\n    show_results(\"z^2+c\", c_cauliflower, escape_radius, z_final)\n\n    nb_iterations = 64\n    escape_radius = 2 * abs(c_polynomial_1) + 1\n    z_final = iterate_function(\n        eval_quadratic_polynomial,\n        c_polynomial_1,\n        nb_iterations,\n        z_0,\n        infinity=1.1 * escape_radius,\n    )\n    show_results(\"z^2+c\", c_polynomial_1, escape_radius, z_final)\n\n    nb_iterations = 161\n    escape_radius = 2 * abs(c_polynomial_2) + 1\n    z_final = iterate_function(\n        eval_quadratic_polynomial,\n        c_polynomial_2,\n        nb_iterations,\n        z_0,\n        infinity=1.1 * escape_radius,\n    )\n    show_results(\"z^2+c\", c_polynomial_2, escape_radius, z_final)\n\n    nb_iterations = 12\n    escape_radius = 10000.0\n    z_final = iterate_function(\n        eval_exponential,\n        c_exponential,\n        nb_iterations,\n        z_0 + 2,\n        infinity=1.0e10,\n    )\n    show_results(\"e^z+c\", c_exponential, escape_radius, z_final)\n"
  },
  {
    "path": "fractals/koch_snowflake.py",
    "content": "\"\"\"\nDescription\n    The Koch snowflake is a fractal curve and one of the earliest fractals to\n    have been described. The Koch snowflake can be built up iteratively, in a\n    sequence of stages. The first stage is an equilateral triangle, and each\n    successive stage is formed by adding outward bends to each side of the\n    previous stage, making smaller equilateral triangles.\n    This can be achieved through the following steps for each line:\n        1. divide the line segment into three segments of equal length.\n        2. draw an equilateral triangle that has the middle segment from step 1\n        as its base and points outward.\n        3. remove the line segment that is the base of the triangle from step 2.\n    (description adapted from https://en.wikipedia.org/wiki/Koch_snowflake )\n    (for a more detailed explanation and an implementation in the\n    Processing language, see  https://natureofcode.com/book/chapter-8-fractals/\n    #84-the-koch-curve-and-the-arraylist-technique )\n\nRequirements (pip):\n    - matplotlib\n    - numpy\n\"\"\"\n\nfrom __future__ import annotations\n\nimport matplotlib.pyplot as plt\nimport numpy as np\n\n# initial triangle of Koch snowflake\nVECTOR_1 = np.array([0, 0])\nVECTOR_2 = np.array([0.5, 0.8660254])\nVECTOR_3 = np.array([1, 0])\nINITIAL_VECTORS = [VECTOR_1, VECTOR_2, VECTOR_3, VECTOR_1]\n\n# uncomment for simple Koch curve instead of Koch snowflake\n# INITIAL_VECTORS = [VECTOR_1, VECTOR_3]\n\n\ndef iterate(initial_vectors: list[np.ndarray], steps: int) -> list[np.ndarray]:\n    \"\"\"\n    Go through the number of iterations determined by the argument \"steps\".\n    Be careful with high values (above 5) since the time to calculate increases\n    exponentially.\n    >>> iterate([np.array([0, 0]), np.array([1, 0])], 1)\n    [array([0, 0]), array([0.33333333, 0.        ]), array([0.5       , \\\n0.28867513]), array([0.66666667, 0.        ]), array([1, 0])]\n    \"\"\"\n    vectors = initial_vectors\n    for _ in range(steps):\n        vectors = iteration_step(vectors)\n    return vectors\n\n\ndef iteration_step(vectors: list[np.ndarray]) -> list[np.ndarray]:\n    \"\"\"\n    Loops through each pair of adjacent vectors. Each line between two adjacent\n    vectors is divided into 4 segments by adding 3 additional vectors in-between\n    the original two vectors. The vector in the middle is constructed through a\n    60 degree rotation so it is bent outwards.\n    >>> iteration_step([np.array([0, 0]), np.array([1, 0])])\n    [array([0, 0]), array([0.33333333, 0.        ]), array([0.5       , \\\n0.28867513]), array([0.66666667, 0.        ]), array([1, 0])]\n    \"\"\"\n    new_vectors = []\n    for i, start_vector in enumerate(vectors[:-1]):\n        end_vector = vectors[i + 1]\n        new_vectors.append(start_vector)\n        difference_vector = end_vector - start_vector\n        new_vectors.append(start_vector + difference_vector / 3)\n        new_vectors.append(\n            start_vector + difference_vector / 3 + rotate(difference_vector / 3, 60)\n        )\n        new_vectors.append(start_vector + difference_vector * 2 / 3)\n    new_vectors.append(vectors[-1])\n    return new_vectors\n\n\ndef rotate(vector: np.ndarray, angle_in_degrees: float) -> np.ndarray:\n    \"\"\"\n    Standard rotation of a 2D vector with a rotation matrix\n    (see https://en.wikipedia.org/wiki/Rotation_matrix )\n    >>> rotate(np.array([1, 0]), 60)\n    array([0.5      , 0.8660254])\n    >>> rotate(np.array([1, 0]), 90)\n    array([6.123234e-17, 1.000000e+00])\n    \"\"\"\n    theta = np.radians(angle_in_degrees)\n    c, s = np.cos(theta), np.sin(theta)\n    rotation_matrix = np.array(((c, -s), (s, c)))\n    return np.dot(rotation_matrix, vector)\n\n\ndef plot(vectors: list[np.ndarray]) -> None:\n    \"\"\"\n    Utility function to plot the vectors using matplotlib.pyplot\n    No doctest was implemented since this function does not have a return value\n    \"\"\"\n    # avoid stretched display of graph\n    axes = plt.gca()\n    axes.set_aspect(\"equal\")\n\n    # matplotlib.pyplot.plot takes a list of all x-coordinates and a list of all\n    # y-coordinates as inputs, which are constructed from the vector-list using\n    # zip()\n    x_coordinates, y_coordinates = zip(*vectors)\n    plt.plot(x_coordinates, y_coordinates)\n    plt.show()\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    processed_vectors = iterate(INITIAL_VECTORS, 5)\n    plot(processed_vectors)\n"
  },
  {
    "path": "fractals/mandelbrot.py",
    "content": "\"\"\"\r\nThe Mandelbrot set is the set of complex numbers \"c\" for which the series\r\n\"z_(n+1) = z_n * z_n + c\" does not diverge, i.e. remains bounded. Thus, a\r\ncomplex number \"c\" is a member of the Mandelbrot set if, when starting with\r\n\"z_0 = 0\" and applying the iteration repeatedly, the absolute value of\r\n\"z_n\" remains bounded for all \"n > 0\". Complex numbers can be written as\r\n\"a + b*i\": \"a\" is the real component, usually drawn on the x-axis, and \"b*i\"\r\nis the imaginary component, usually drawn on the y-axis. Most visualizations\r\nof the Mandelbrot set use a color-coding to indicate after how many steps in\r\nthe series the numbers outside the set diverge. Images of the Mandelbrot set\r\nexhibit an elaborate and infinitely complicated boundary that reveals\r\nprogressively ever-finer recursive detail at increasing magnifications, making\r\nthe boundary of the Mandelbrot set a fractal curve.\r\n(description adapted from https://en.wikipedia.org/wiki/Mandelbrot_set )\r\n(see also https://en.wikipedia.org/wiki/Plotting_algorithms_for_the_Mandelbrot_set )\r\n\"\"\"\r\n\r\nimport colorsys\r\n\r\nfrom PIL import Image\r\n\r\n\r\ndef get_distance(x: float, y: float, max_step: int) -> float:\r\n    \"\"\"\r\n    Return the relative distance (= step/max_step) after which the complex number\r\n    constituted by this x-y-pair diverges. Members of the Mandelbrot set do not\r\n    diverge so their distance is 1.\r\n\r\n    >>> get_distance(0, 0, 50)\r\n    1.0\r\n    >>> get_distance(0.5, 0.5, 50)\r\n    0.061224489795918366\r\n    >>> get_distance(2, 0, 50)\r\n    0.0\r\n    \"\"\"\r\n    a = x\r\n    b = y\r\n    for step in range(max_step):  # noqa: B007\r\n        a_new = a * a - b * b + x\r\n        b = 2 * a * b + y\r\n        a = a_new\r\n\r\n        # divergence happens for all complex number with an absolute value\r\n        # greater than 4\r\n        if a * a + b * b > 4:\r\n            break\r\n    return step / (max_step - 1)\r\n\r\n\r\ndef get_black_and_white_rgb(distance: float) -> tuple:\r\n    \"\"\"\r\n    Black&white color-coding that ignores the relative distance. The Mandelbrot\r\n    set is black, everything else is white.\r\n\r\n    >>> get_black_and_white_rgb(0)\r\n    (255, 255, 255)\r\n    >>> get_black_and_white_rgb(0.5)\r\n    (255, 255, 255)\r\n    >>> get_black_and_white_rgb(1)\r\n    (0, 0, 0)\r\n    \"\"\"\r\n    if distance == 1:\r\n        return (0, 0, 0)\r\n    else:\r\n        return (255, 255, 255)\r\n\r\n\r\ndef get_color_coded_rgb(distance: float) -> tuple:\r\n    \"\"\"\r\n    Color-coding taking the relative distance into account. The Mandelbrot set\r\n    is black.\r\n\r\n    >>> get_color_coded_rgb(0)\r\n    (255, 0, 0)\r\n    >>> get_color_coded_rgb(0.5)\r\n    (0, 255, 255)\r\n    >>> get_color_coded_rgb(1)\r\n    (0, 0, 0)\r\n    \"\"\"\r\n    if distance == 1:\r\n        return (0, 0, 0)\r\n    else:\r\n        return tuple(round(i * 255) for i in colorsys.hsv_to_rgb(distance, 1, 1))\r\n\r\n\r\ndef get_image(\r\n    image_width: int = 800,\r\n    image_height: int = 600,\r\n    figure_center_x: float = -0.6,\r\n    figure_center_y: float = 0,\r\n    figure_width: float = 3.2,\r\n    max_step: int = 50,\r\n    use_distance_color_coding: bool = True,\r\n) -> Image.Image:\r\n    \"\"\"\r\n    Function to generate the image of the Mandelbrot set. Two types of coordinates\r\n    are used: image-coordinates that refer to the pixels and figure-coordinates\r\n    that refer to the complex numbers inside and outside the Mandelbrot set. The\r\n    figure-coordinates in the arguments of this function determine which section\r\n    of the Mandelbrot set is viewed. The main area of the Mandelbrot set is\r\n    roughly between \"-1.5 < x < 0.5\" and \"-1 < y < 1\" in the figure-coordinates.\r\n\r\n    Commenting out tests that slow down pytest...\r\n    # 13.35s call     fractals/mandelbrot.py::mandelbrot.get_image\r\n    # >>> get_image().load()[0,0]\r\n    (255, 0, 0)\r\n    # >>> get_image(use_distance_color_coding = False).load()[0,0]\r\n    (255, 255, 255)\r\n    \"\"\"\r\n    img = Image.new(\"RGB\", (image_width, image_height))\r\n    pixels = img.load()\r\n\r\n    # loop through the image-coordinates\r\n    for image_x in range(image_width):\r\n        for image_y in range(image_height):\r\n            # determine the figure-coordinates based on the image-coordinates\r\n            figure_height = figure_width / image_width * image_height\r\n            figure_x = figure_center_x + (image_x / image_width - 0.5) * figure_width\r\n            figure_y = figure_center_y + (image_y / image_height - 0.5) * figure_height\r\n\r\n            distance = get_distance(figure_x, figure_y, max_step)\r\n\r\n            # color the corresponding pixel based on the selected coloring-function\r\n            if use_distance_color_coding:\r\n                pixels[image_x, image_y] = get_color_coded_rgb(distance)\r\n            else:\r\n                pixels[image_x, image_y] = get_black_and_white_rgb(distance)\r\n\r\n    return img\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n\r\n    # colored version, full figure\r\n    img = get_image()\r\n\r\n    # uncomment for colored version, different section, zoomed in\r\n    # img = get_image(figure_center_x = -0.6, figure_center_y = -0.4,\r\n    # figure_width = 0.8)\r\n\r\n    # uncomment for black and white version, full figure\r\n    # img = get_image(use_distance_color_coding = False)\r\n\r\n    # uncomment to save the image\r\n    # img.save(\"mandelbrot.png\")\r\n\r\n    img.show()\r\n"
  },
  {
    "path": "fractals/sierpinski_triangle.py",
    "content": "\"\"\"\nAuthor Anurag Kumar | anuragkumarak95@gmail.com | git/anuragkumarak95\n\nSimple example of fractal generation using recursion.\n\nWhat is the Sierpiński Triangle?\n    The Sierpiński triangle (sometimes spelled Sierpinski), also called the\nSierpiński gasket or Sierpiński sieve, is a fractal attractive fixed set with\nthe overall shape of an equilateral triangle, subdivided recursively into\nsmaller equilateral triangles. Originally constructed as a curve, this is one of\nthe basic examples of self-similar sets—that is, it is a mathematically\ngenerated pattern that is reproducible at any magnification or reduction. It is\nnamed after the Polish mathematician Wacław Sierpiński, but appeared as a\ndecorative pattern many centuries before the work of Sierpiński.\n\n\nUsage: python sierpinski_triangle.py <int:depth_for_fractal>\n\nCredits:\n    The above description is taken from\n    https://en.wikipedia.org/wiki/Sierpi%C5%84ski_triangle\n    This code was written by editing the code from\n    https://www.riannetrujillo.com/blog/python-fractal/\n\"\"\"\n\nimport sys\nimport turtle\n\n\ndef get_mid(p1: tuple[float, float], p2: tuple[float, float]) -> tuple[float, float]:\n    \"\"\"\n    Find the midpoint of two points\n\n    >>> get_mid((0, 0), (2, 2))\n    (1.0, 1.0)\n    >>> get_mid((-3, -3), (3, 3))\n    (0.0, 0.0)\n    >>> get_mid((1, 0), (3, 2))\n    (2.0, 1.0)\n    >>> get_mid((0, 0), (1, 1))\n    (0.5, 0.5)\n    >>> get_mid((0, 0), (0, 0))\n    (0.0, 0.0)\n    \"\"\"\n    return (p1[0] + p2[0]) / 2, (p1[1] + p2[1]) / 2\n\n\ndef triangle(\n    vertex1: tuple[float, float],\n    vertex2: tuple[float, float],\n    vertex3: tuple[float, float],\n    depth: int,\n) -> None:\n    \"\"\"\n    Recursively draw the Sierpinski triangle given the vertices of the triangle\n    and the recursion depth\n    \"\"\"\n    my_pen.up()\n    my_pen.goto(vertex1[0], vertex1[1])\n    my_pen.down()\n    my_pen.goto(vertex2[0], vertex2[1])\n    my_pen.goto(vertex3[0], vertex3[1])\n    my_pen.goto(vertex1[0], vertex1[1])\n\n    if depth == 0:\n        return\n\n    triangle(vertex1, get_mid(vertex1, vertex2), get_mid(vertex1, vertex3), depth - 1)\n    triangle(vertex2, get_mid(vertex1, vertex2), get_mid(vertex2, vertex3), depth - 1)\n    triangle(vertex3, get_mid(vertex3, vertex2), get_mid(vertex1, vertex3), depth - 1)\n\n\nif __name__ == \"__main__\":\n    if len(sys.argv) != 2:\n        raise ValueError(\n            \"Correct format for using this script: \"\n            \"python fractals.py <int:depth_for_fractal>\"\n        )\n    my_pen = turtle.Turtle()\n    my_pen.ht()\n    my_pen.speed(5)\n    my_pen.pencolor(\"red\")\n\n    vertices = [(-175, -125), (0, 175), (175, -125)]  # vertices of triangle\n    triangle(vertices[0], vertices[1], vertices[2], int(sys.argv[1]))\n    turtle.Screen().exitonclick()\n"
  },
  {
    "path": "fractals/vicsek.py",
    "content": "\"\"\"Authors Bastien Capiaux & Mehdi Oudghiri\n\nThe Vicsek fractal algorithm is a recursive algorithm that creates a\npattern known as the Vicsek fractal or the Vicsek square.\nIt is based on the concept of self-similarity, where the pattern at each\nlevel of recursion resembles the overall pattern.\nThe algorithm involves dividing a square into 9 equal smaller squares,\nremoving the center square, and then repeating this process on the remaining 8 squares.\nThis results in a pattern that exhibits self-similarity and has a\nsquare-shaped outline with smaller squares within it.\n\nSource: https://en.wikipedia.org/wiki/Vicsek_fractal\n\"\"\"\n\nimport turtle\n\n\ndef draw_cross(x: float, y: float, length: float):\n    \"\"\"\n    Draw a cross at the specified position and with the specified length.\n    \"\"\"\n    turtle.up()\n    turtle.goto(x - length / 2, y - length / 6)\n    turtle.down()\n    turtle.seth(0)\n    turtle.begin_fill()\n    for _ in range(4):\n        turtle.fd(length / 3)\n        turtle.right(90)\n        turtle.fd(length / 3)\n        turtle.left(90)\n        turtle.fd(length / 3)\n        turtle.left(90)\n    turtle.end_fill()\n\n\ndef draw_fractal_recursive(x: float, y: float, length: float, depth: float):\n    \"\"\"\n    Recursively draw the Vicsek fractal at the specified position, with the\n    specified length and depth.\n    \"\"\"\n    if depth == 0:\n        draw_cross(x, y, length)\n        return\n\n    draw_fractal_recursive(x, y, length / 3, depth - 1)\n    draw_fractal_recursive(x + length / 3, y, length / 3, depth - 1)\n    draw_fractal_recursive(x - length / 3, y, length / 3, depth - 1)\n    draw_fractal_recursive(x, y + length / 3, length / 3, depth - 1)\n    draw_fractal_recursive(x, y - length / 3, length / 3, depth - 1)\n\n\ndef set_color(rgb: str):\n    turtle.color(rgb)\n\n\ndef draw_vicsek_fractal(x: float, y: float, length: float, depth: float, color=\"blue\"):\n    \"\"\"\n    Draw the Vicsek fractal at the specified position, with the specified\n    length and depth.\n    \"\"\"\n    turtle.speed(0)\n    turtle.hideturtle()\n    set_color(color)\n    draw_fractal_recursive(x, y, length, depth)\n    turtle.Screen().update()\n\n\ndef main():\n    draw_vicsek_fractal(0, 0, 800, 4)\n\n    turtle.done()\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "fuzzy_logic/__init__.py",
    "content": ""
  },
  {
    "path": "fuzzy_logic/fuzzy_operations.py",
    "content": "\"\"\"\nBy @Shreya123714\n\nhttps://en.wikipedia.org/wiki/Fuzzy_set\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass\n\nimport matplotlib.pyplot as plt\nimport numpy as np\n\n\n@dataclass\nclass FuzzySet:\n    \"\"\"\n    A class for representing and manipulating triangular fuzzy sets.\n    Attributes:\n        name: The name or label of the fuzzy set.\n        left_boundary: The left boundary of the fuzzy set.\n        peak: The peak (central) value of the fuzzy set.\n        right_boundary: The right boundary of the fuzzy set.\n    Methods:\n        membership(x): Calculate the membership value of an input 'x' in the fuzzy set.\n        union(other): Calculate the union of this fuzzy set with another fuzzy set.\n        intersection(other): Calculate the intersection of this fuzzy set with another.\n        complement(): Calculate the complement (negation) of this fuzzy set.\n        plot(): Plot the membership function of the fuzzy set.\n\n    >>> sheru = FuzzySet(\"Sheru\", 0.4, 1, 0.6)\n    >>> sheru\n    FuzzySet(name='Sheru', left_boundary=0.4, peak=1, right_boundary=0.6)\n    >>> str(sheru)\n    'Sheru: [0.4, 1, 0.6]'\n\n    >>> siya = FuzzySet(\"Siya\", 0.5, 1, 0.7)\n    >>> siya\n    FuzzySet(name='Siya', left_boundary=0.5, peak=1, right_boundary=0.7)\n\n    # Complement Operation\n    >>> sheru.complement()\n    FuzzySet(name='¬Sheru', left_boundary=0.4, peak=0.6, right_boundary=0)\n    >>> siya.complement()  # doctest: +NORMALIZE_WHITESPACE\n    FuzzySet(name='¬Siya', left_boundary=0.30000000000000004, peak=0.5,\n     right_boundary=0)\n\n    # Intersection Operation\n    >>> siya.intersection(sheru)\n    FuzzySet(name='Siya ∩ Sheru', left_boundary=0.5, peak=0.6, right_boundary=1.0)\n\n    # Membership Operation\n    >>> sheru.membership(0.5)\n    0.16666666666666663\n    >>> sheru.membership(0.6)\n    0.0\n\n    # Union Operations\n    >>> siya.union(sheru)\n    FuzzySet(name='Siya U Sheru', left_boundary=0.4, peak=0.7, right_boundary=1.0)\n    \"\"\"\n\n    name: str\n    left_boundary: float\n    peak: float\n    right_boundary: float\n\n    def __str__(self) -> str:\n        \"\"\"\n        >>> FuzzySet(\"fuzzy_set\", 0.1, 0.2, 0.3)\n        FuzzySet(name='fuzzy_set', left_boundary=0.1, peak=0.2, right_boundary=0.3)\n        \"\"\"\n        return (\n            f\"{self.name}: [{self.left_boundary}, {self.peak}, {self.right_boundary}]\"\n        )\n\n    def complement(self) -> FuzzySet:\n        \"\"\"\n        Calculate the complement (negation) of this fuzzy set.\n        Returns:\n            FuzzySet: A new fuzzy set representing the complement.\n\n        >>> FuzzySet(\"fuzzy_set\", 0.1, 0.2, 0.3).complement()\n        FuzzySet(name='¬fuzzy_set', left_boundary=0.7, peak=0.9, right_boundary=0.8)\n        \"\"\"\n        return FuzzySet(\n            f\"¬{self.name}\",\n            1 - self.right_boundary,\n            1 - self.left_boundary,\n            1 - self.peak,\n        )\n\n    def intersection(self, other) -> FuzzySet:\n        \"\"\"\n        Calculate the intersection of this fuzzy set\n        with another fuzzy set.\n        Args:\n            other: Another fuzzy set to intersect with.\n        Returns:\n            A new fuzzy set representing the intersection.\n\n        >>> FuzzySet(\"a\", 0.1, 0.2, 0.3).intersection(FuzzySet(\"b\", 0.4, 0.5, 0.6))\n        FuzzySet(name='a ∩ b', left_boundary=0.4, peak=0.3, right_boundary=0.35)\n        \"\"\"\n        return FuzzySet(\n            f\"{self.name} ∩ {other.name}\",\n            max(self.left_boundary, other.left_boundary),\n            min(self.right_boundary, other.right_boundary),\n            (self.peak + other.peak) / 2,\n        )\n\n    def membership(self, x: float) -> float:\n        \"\"\"\n        Calculate the membership value of an input 'x' in the fuzzy set.\n        Returns:\n            The membership value of 'x' in the fuzzy set.\n\n        >>> a = FuzzySet(\"a\", 0.1, 0.2, 0.3)\n        >>> a.membership(0.09)\n        0.0\n        >>> a.membership(0.1)\n        0.0\n        >>> a.membership(0.11)\n        0.09999999999999995\n        >>> a.membership(0.4)\n        0.0\n        >>> FuzzySet(\"A\", 0, 0.5, 1).membership(0.1)\n        0.2\n        >>> FuzzySet(\"B\", 0.2, 0.7, 1).membership(0.6)\n        0.8\n        \"\"\"\n        if x <= self.left_boundary or x >= self.right_boundary:\n            return 0.0\n        elif self.left_boundary < x <= self.peak:\n            return (x - self.left_boundary) / (self.peak - self.left_boundary)\n        elif self.peak < x < self.right_boundary:\n            return (self.right_boundary - x) / (self.right_boundary - self.peak)\n        msg = f\"Invalid value {x} for fuzzy set {self}\"\n        raise ValueError(msg)\n\n    def union(self, other) -> FuzzySet:\n        \"\"\"\n        Calculate the union of this fuzzy set with another fuzzy set.\n        Args:\n            other (FuzzySet): Another fuzzy set to union with.\n        Returns:\n            FuzzySet: A new fuzzy set representing the union.\n\n        >>> FuzzySet(\"a\", 0.1, 0.2, 0.3).union(FuzzySet(\"b\", 0.4, 0.5, 0.6))\n        FuzzySet(name='a U b', left_boundary=0.1, peak=0.6, right_boundary=0.35)\n        \"\"\"\n        return FuzzySet(\n            f\"{self.name} U {other.name}\",\n            min(self.left_boundary, other.left_boundary),\n            max(self.right_boundary, other.right_boundary),\n            (self.peak + other.peak) / 2,\n        )\n\n    def plot(self):\n        \"\"\"\n        Plot the membership function of the fuzzy set.\n        \"\"\"\n        x = np.linspace(0, 1, 1000)\n        y = [self.membership(xi) for xi in x]\n\n        plt.plot(x, y, label=self.name)\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    a = FuzzySet(\"A\", 0, 0.5, 1)\n    b = FuzzySet(\"B\", 0.2, 0.7, 1)\n\n    a.plot()\n    b.plot()\n\n    plt.xlabel(\"x\")\n    plt.ylabel(\"Membership\")\n    plt.legend()\n    plt.show()\n\n    union_ab = a.union(b)\n    intersection_ab = a.intersection(b)\n    complement_a = a.complement()\n\n    union_ab.plot()\n    intersection_ab.plot()\n    complement_a.plot()\n\n    plt.xlabel(\"x\")\n    plt.ylabel(\"Membership\")\n    plt.legend()\n    plt.show()\n"
  },
  {
    "path": "fuzzy_logic/fuzzy_operations.py.DISABLED.txt",
    "content": "\"\"\"\nREADME, Author - Jigyasa Gandhi(mailto:jigsgandhi97@gmail.com)\nRequirements:\n  - scikit-fuzzy\n  - numpy\n  - matplotlib\nPython:\n  - 3.5\n\"\"\"\nimport numpy as np\nimport skfuzzy as fuzz\n\nif __name__ == \"__main__\":\n    # Create universe of discourse in Python using linspace ()\n    X = np.linspace(start=0, stop=75, num=75, endpoint=True, retstep=False)\n\n    # Create two fuzzy sets by defining any membership function\n    # (trapmf(), gbellmf(), gaussmf(), etc).\n    abc1 = [0, 25, 50]\n    abc2 = [25, 50, 75]\n    young = fuzz.membership.trimf(X, abc1)\n    middle_aged = fuzz.membership.trimf(X, abc2)\n\n    # Compute the different operations using inbuilt functions.\n    one = np.ones(75)\n    zero = np.zeros((75,))\n    # 1. Union = max(µA(x), µB(x))\n    union = fuzz.fuzzy_or(X, young, X, middle_aged)[1]\n    # 2. Intersection = min(µA(x), µB(x))\n    intersection = fuzz.fuzzy_and(X, young, X, middle_aged)[1]\n    # 3. Complement (A) = (1 - min(µA(x)))\n    complement_a = fuzz.fuzzy_not(young)\n    # 4. Difference (A/B) = min(µA(x),(1- µB(x)))\n    difference = fuzz.fuzzy_and(X, young, X, fuzz.fuzzy_not(middle_aged)[1])[1]\n    # 5. Algebraic Sum = [µA(x) + µB(x) – (µA(x) * µB(x))]\n    alg_sum = young + middle_aged - (young * middle_aged)\n    # 6. Algebraic Product = (µA(x) * µB(x))\n    alg_product = young * middle_aged\n    # 7. Bounded Sum = min[1,(µA(x), µB(x))]\n    bdd_sum = fuzz.fuzzy_and(X, one, X, young + middle_aged)[1]\n    # 8. Bounded difference = min[0,(µA(x), µB(x))]\n    bdd_difference = fuzz.fuzzy_or(X, zero, X, young - middle_aged)[1]\n\n    # max-min composition\n    # max-product composition\n\n    # Plot each set A, set B and each operation result using plot() and subplot().\n    from matplotlib import pyplot as plt\n\n    plt.figure()\n\n    plt.subplot(4, 3, 1)\n    plt.plot(X, young)\n    plt.title(\"Young\")\n    plt.grid(True)\n\n    plt.subplot(4, 3, 2)\n    plt.plot(X, middle_aged)\n    plt.title(\"Middle aged\")\n    plt.grid(True)\n\n    plt.subplot(4, 3, 3)\n    plt.plot(X, union)\n    plt.title(\"union\")\n    plt.grid(True)\n\n    plt.subplot(4, 3, 4)\n    plt.plot(X, intersection)\n    plt.title(\"intersection\")\n    plt.grid(True)\n\n    plt.subplot(4, 3, 5)\n    plt.plot(X, complement_a)\n    plt.title(\"complement_a\")\n    plt.grid(True)\n\n    plt.subplot(4, 3, 6)\n    plt.plot(X, difference)\n    plt.title(\"difference a/b\")\n    plt.grid(True)\n\n    plt.subplot(4, 3, 7)\n    plt.plot(X, alg_sum)\n    plt.title(\"alg_sum\")\n    plt.grid(True)\n\n    plt.subplot(4, 3, 8)\n    plt.plot(X, alg_product)\n    plt.title(\"alg_product\")\n    plt.grid(True)\n\n    plt.subplot(4, 3, 9)\n    plt.plot(X, bdd_sum)\n    plt.title(\"bdd_sum\")\n    plt.grid(True)\n\n    plt.subplot(4, 3, 10)\n    plt.plot(X, bdd_difference)\n    plt.title(\"bdd_difference\")\n    plt.grid(True)\n\n    plt.subplots_adjust(hspace=0.5)\n    plt.show()\n"
  },
  {
    "path": "genetic_algorithm/__init__.py",
    "content": ""
  },
  {
    "path": "genetic_algorithm/basic_string.py",
    "content": "\"\"\"\nSimple multithreaded algorithm to show how the 4 phases of a genetic algorithm works\n(Evaluation, Selection, Crossover and Mutation)\nhttps://en.wikipedia.org/wiki/Genetic_algorithm\nAuthor: D4rkia\n\"\"\"\n\nfrom __future__ import annotations\n\nimport random\n\n# Maximum size of the population.  Bigger could be faster but is more memory expensive.\nN_POPULATION = 200\n# Number of elements selected in every generation of evolution. The selection takes\n# place from best to worst of that generation and must be smaller than N_POPULATION.\nN_SELECTED = 50\n# Probability that an element of a generation can mutate, changing one of its genes.\n# This will guarantee that all genes will be used during evolution.\nMUTATION_PROBABILITY = 0.4\n# Just a seed to improve randomness required by the algorithm.\nrandom.seed(random.randint(0, 1000))\n\n\ndef evaluate(item: str, main_target: str) -> tuple[str, float]:\n    \"\"\"\n    Evaluate how similar the item is with the target by just\n    counting each char in the right position\n    >>> evaluate(\"Helxo Worlx\", \"Hello World\")\n    ('Helxo Worlx', 9.0)\n    \"\"\"\n    score = len([g for position, g in enumerate(item) if g == main_target[position]])\n    return (item, float(score))\n\n\ndef crossover(parent_1: str, parent_2: str) -> tuple[str, str]:\n    \"\"\"\n    Slice and combine two strings at a random point.\n    >>> random.seed(42)\n    >>> crossover(\"123456\", \"abcdef\")\n    ('12345f', 'abcde6')\n    \"\"\"\n    random_slice = random.randint(0, len(parent_1) - 1)\n    child_1 = parent_1[:random_slice] + parent_2[random_slice:]\n    child_2 = parent_2[:random_slice] + parent_1[random_slice:]\n    return (child_1, child_2)\n\n\ndef mutate(child: str, genes: list[str]) -> str:\n    \"\"\"\n    Mutate a random gene of a child with another one from the list.\n    >>> random.seed(123)\n    >>> mutate(\"123456\", list(\"ABCDEF\"))\n    '12345A'\n    \"\"\"\n    child_list = list(child)\n    if random.uniform(0, 1) < MUTATION_PROBABILITY:\n        child_list[random.randint(0, len(child)) - 1] = random.choice(genes)\n    return \"\".join(child_list)\n\n\n# Select, crossover and mutate a new population.\ndef select(\n    parent_1: tuple[str, float],\n    population_score: list[tuple[str, float]],\n    genes: list[str],\n) -> list[str]:\n    \"\"\"\n    Select the second parent and generate new population\n\n    >>> random.seed(42)\n    >>> parent_1 = (\"123456\", 8.0)\n    >>> population_score = [(\"abcdef\", 4.0), (\"ghijkl\", 5.0), (\"mnopqr\", 7.0)]\n    >>> genes = list(\"ABCDEF\")\n    >>> child_n = int(min(parent_1[1] + 1, 10))\n    >>> population = []\n    >>> for _ in range(child_n):\n    ...     parent_2 = population_score[random.randrange(len(population_score))][0]\n    ...     child_1, child_2 = crossover(parent_1[0], parent_2)\n    ...     population.extend((mutate(child_1, genes), mutate(child_2, genes)))\n    >>> len(population) == (int(parent_1[1]) + 1) * 2\n    True\n    \"\"\"\n    pop = []\n    # Generate more children proportionally to the fitness score.\n    child_n = int(parent_1[1] * 100) + 1\n    child_n = 10 if child_n >= 10 else child_n\n    for _ in range(child_n):\n        parent_2 = population_score[random.randint(0, N_SELECTED)][0]\n\n        child_1, child_2 = crossover(parent_1[0], parent_2)\n        # Append new string to the population list.\n        pop.append(mutate(child_1, genes))\n        pop.append(mutate(child_2, genes))\n    return pop\n\n\ndef basic(target: str, genes: list[str], debug: bool = True) -> tuple[int, int, str]:\n    \"\"\"\n    Verify that the target contains no genes besides the ones inside genes variable.\n\n    >>> from string import ascii_lowercase\n    >>> basic(\"doctest\", ascii_lowercase, debug=False)[2]\n    'doctest'\n    >>> genes = list(ascii_lowercase)\n    >>> genes.remove(\"e\")\n    >>> basic(\"test\", genes)\n    Traceback (most recent call last):\n        ...\n    ValueError: ['e'] is not in genes list, evolution cannot converge\n    >>> genes.remove(\"s\")\n    >>> basic(\"test\", genes)\n    Traceback (most recent call last):\n        ...\n    ValueError: ['e', 's'] is not in genes list, evolution cannot converge\n    >>> genes.remove(\"t\")\n    >>> basic(\"test\", genes)\n    Traceback (most recent call last):\n        ...\n    ValueError: ['e', 's', 't'] is not in genes list, evolution cannot converge\n    \"\"\"\n\n    # Verify if N_POPULATION is bigger than N_SELECTED\n    if N_POPULATION < N_SELECTED:\n        msg = f\"{N_POPULATION} must be bigger than {N_SELECTED}\"\n        raise ValueError(msg)\n    # Verify that the target contains no genes besides the ones inside genes variable.\n    not_in_genes_list = sorted({c for c in target if c not in genes})\n    if not_in_genes_list:\n        msg = f\"{not_in_genes_list} is not in genes list, evolution cannot converge\"\n        raise ValueError(msg)\n\n    # Generate random starting population.\n    population = []\n    for _ in range(N_POPULATION):\n        population.append(\"\".join([random.choice(genes) for i in range(len(target))]))\n\n    # Just some logs to know what the algorithms is doing.\n    generation, total_population = 0, 0\n\n    # This loop will end when we find a perfect match for our target.\n    while True:\n        generation += 1\n        total_population += len(population)\n\n        # Random population created. Now it's time to evaluate.\n\n        # (Option 1) Adding a bit of concurrency can make everything faster,\n        #\n        # import concurrent.futures\n        # population_score: list[tuple[str, float]] = []\n        # with concurrent.futures.ThreadPoolExecutor(\n        #                                   max_workers=NUM_WORKERS) as executor:\n        #     futures = {executor.submit(evaluate, item, target) for item in population}\n        #     concurrent.futures.wait(futures)\n        #     population_score = [item.result() for item in futures]\n        #\n        # but with a simple algorithm like this, it will probably be slower.\n        # (Option 2) We just need to call evaluate for every item inside the population.\n        population_score = [evaluate(item, target) for item in population]\n\n        # Check if there is a matching evolution.\n        population_score = sorted(population_score, key=lambda x: x[1], reverse=True)\n        if population_score[0][0] == target:\n            return (generation, total_population, population_score[0][0])\n\n        # Print the best result every 10 generation.\n        # Just to know that the algorithm is working.\n        if debug and generation % 10 == 0:\n            print(\n                f\"\\nGeneration: {generation}\"\n                f\"\\nTotal Population:{total_population}\"\n                f\"\\nBest score: {population_score[0][1]}\"\n                f\"\\nBest string: {population_score[0][0]}\"\n            )\n\n        # Flush the old population, keeping some of the best evolutions.\n        # Keeping this avoid regression of evolution.\n        population_best = population[: int(N_POPULATION / 3)]\n        population.clear()\n        population.extend(population_best)\n        # Normalize population score to be between 0 and 1.\n        population_score = [\n            (item, score / len(target)) for item, score in population_score\n        ]\n\n        # This is selection\n        for i in range(N_SELECTED):\n            population.extend(select(population_score[int(i)], population_score, genes))\n            # Check if the population has already reached the maximum value and if so,\n            # break the cycle.  If this check is disabled, the algorithm will take\n            # forever to compute large strings, but will also calculate small strings in\n            # a far fewer generations.\n            if len(population) > N_POPULATION:\n                break\n\n\nif __name__ == \"__main__\":\n    target_str = (\n        \"This is a genetic algorithm to evaluate, combine, evolve, and mutate a string!\"\n    )\n    genes_list = list(\n        \" ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklm\"\n        \"nopqrstuvwxyz.,;!?+-*#@^'èéòà€ù=)(&%$£/\\\\\"\n    )\n    generation, population, target = basic(target_str, genes_list)\n    print(\n        f\"\\nGeneration: {generation}\\nTotal Population: {population}\\nTarget: {target}\"\n    )\n"
  },
  {
    "path": "geodesy/__init__.py",
    "content": ""
  },
  {
    "path": "geodesy/haversine_distance.py",
    "content": "from math import asin, atan, cos, radians, sin, sqrt, tan\n\nAXIS_A = 6378137.0\nAXIS_B = 6356752.314245\nRADIUS = 6378137\n\n\ndef haversine_distance(lat1: float, lon1: float, lat2: float, lon2: float) -> float:\n    \"\"\"\n    Calculate great circle distance between two points in a sphere,\n    given longitudes and latitudes https://en.wikipedia.org/wiki/Haversine_formula\n\n    We know that the globe is \"sort of\" spherical, so a path between two points\n    isn't exactly a straight line. We need to account for the Earth's curvature\n    when calculating distance from point A to B. This effect is negligible for\n    small distances but adds up as distance increases. The Haversine method treats\n    the earth as a sphere which allows us to \"project\" the two points A and B\n    onto the surface of that sphere and approximate the spherical distance between\n    them. Since the Earth is not a perfect sphere, other methods which model the\n    Earth's ellipsoidal nature are more accurate but a quick and modifiable\n    computation like Haversine can be handy for shorter range distances.\n\n    Args:\n        * `lat1`, `lon1`: latitude and longitude of coordinate 1\n        * `lat2`, `lon2`: latitude and longitude of coordinate 2\n    Returns:\n        geographical distance between two points in metres\n\n    >>> from collections import namedtuple\n    >>> point_2d = namedtuple(\"point_2d\", \"lat lon\")\n    >>> SAN_FRANCISCO = point_2d(37.774856, -122.424227)\n    >>> YOSEMITE = point_2d(37.864742, -119.537521)\n    >>> f\"{haversine_distance(*SAN_FRANCISCO, *YOSEMITE):0,.0f} meters\"\n    '254,352 meters'\n    \"\"\"\n    # CONSTANTS per WGS84 https://en.wikipedia.org/wiki/World_Geodetic_System\n    # Distance in metres(m)\n    # Equation parameters\n    # Equation https://en.wikipedia.org/wiki/Haversine_formula#Formulation\n    flattening = (AXIS_A - AXIS_B) / AXIS_A\n    phi_1 = atan((1 - flattening) * tan(radians(lat1)))\n    phi_2 = atan((1 - flattening) * tan(radians(lat2)))\n    lambda_1 = radians(lon1)\n    lambda_2 = radians(lon2)\n    # Equation\n    sin_sq_phi = sin((phi_2 - phi_1) / 2)\n    sin_sq_lambda = sin((lambda_2 - lambda_1) / 2)\n    # Square both values\n    sin_sq_phi *= sin_sq_phi\n    sin_sq_lambda *= sin_sq_lambda\n    h_value = sqrt(sin_sq_phi + (cos(phi_1) * cos(phi_2) * sin_sq_lambda))\n    return 2 * RADIUS * asin(h_value)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "geodesy/lamberts_ellipsoidal_distance.py",
    "content": "from math import atan, cos, radians, sin, tan\n\nfrom .haversine_distance import haversine_distance\n\nAXIS_A = 6378137.0\nAXIS_B = 6356752.314245\nEQUATORIAL_RADIUS = 6378137\n\n\ndef lamberts_ellipsoidal_distance(\n    lat1: float, lon1: float, lat2: float, lon2: float\n) -> float:\n    \"\"\"\n    Calculate the shortest distance along the surface of an ellipsoid between\n    two points on the surface of earth given longitudes and latitudes\n    https://en.wikipedia.org/wiki/Geographical_distance#Lambert's_formula_for_long_lines\n\n    NOTE: This algorithm uses geodesy/haversine_distance.py to compute central angle,\n        sigma\n\n    Representing the earth as an ellipsoid allows us to approximate distances between\n    points on the surface much better than a sphere. Ellipsoidal formulas treat the\n    Earth as an oblate ellipsoid which means accounting for the flattening that happens\n    at the North and South poles. Lambert's formulae provide accuracy on the order of\n    10 meteres over thousands of kilometeres. Other methods can provide\n    millimeter-level accuracy but this is a simpler method to calculate long range\n    distances without increasing computational intensity.\n\n    Args:\n        lat1, lon1: latitude and longitude of coordinate 1\n        lat2, lon2: latitude and longitude of coordinate 2\n    Returns:\n        geographical distance between two points in metres\n\n    >>> lamberts_ellipsoidal_distance(100, 0, 0, 0)\n    Traceback (most recent call last):\n    ...\n    ValueError: Latitude must be between -90 and 90 degrees\n\n    >>> lamberts_ellipsoidal_distance(0, 0, -100, 0)\n    Traceback (most recent call last):\n    ...\n    ValueError: Latitude must be between -90 and 90 degrees\n\n    >>> lamberts_ellipsoidal_distance(0, 200, 0, 0)\n    Traceback (most recent call last):\n    ...\n    ValueError: Longitude must be between -180 and 180 degrees\n\n    >>> lamberts_ellipsoidal_distance(0, 0, 0, -200)\n    Traceback (most recent call last):\n    ...\n    ValueError: Longitude must be between -180 and 180 degrees\n\n    >>> from collections import namedtuple\n    >>> point_2d = namedtuple(\"point_2d\", \"lat lon\")\n    >>> SAN_FRANCISCO = point_2d(37.774856, -122.424227)\n    >>> YOSEMITE = point_2d(37.864742, -119.537521)\n    >>> NEW_YORK = point_2d(40.713019, -74.012647)\n    >>> VENICE = point_2d(45.443012, 12.313071)\n    >>> f\"{lamberts_ellipsoidal_distance(*SAN_FRANCISCO, *YOSEMITE):0,.0f} meters\"\n    '254,351 meters'\n    >>> f\"{lamberts_ellipsoidal_distance(*SAN_FRANCISCO, *NEW_YORK):0,.0f} meters\"\n    '4,138,992 meters'\n    >>> f\"{lamberts_ellipsoidal_distance(*SAN_FRANCISCO, *VENICE):0,.0f} meters\"\n    '9,737,326 meters'\n    \"\"\"\n\n    # Validate latitude values\n    if not -90 <= lat1 <= 90 or not -90 <= lat2 <= 90:\n        raise ValueError(\"Latitude must be between -90 and 90 degrees\")\n\n    # Validate longitude values\n    if not -180 <= lon1 <= 180 or not -180 <= lon2 <= 180:\n        raise ValueError(\"Longitude must be between -180 and 180 degrees\")\n\n    # CONSTANTS per WGS84 https://en.wikipedia.org/wiki/World_Geodetic_System\n    # Distance in metres(m)\n    # Equation Parameters\n    # https://en.wikipedia.org/wiki/Geographical_distance#Lambert's_formula_for_long_lines\n    flattening = (AXIS_A - AXIS_B) / AXIS_A\n    # Parametric latitudes\n    # https://en.wikipedia.org/wiki/Latitude#Parametric_(or_reduced)_latitude\n    b_lat1 = atan((1 - flattening) * tan(radians(lat1)))\n    b_lat2 = atan((1 - flattening) * tan(radians(lat2)))\n\n    # Compute central angle between two points\n    # using haversine theta. sigma =  haversine_distance / equatorial radius\n    sigma = haversine_distance(lat1, lon1, lat2, lon2) / EQUATORIAL_RADIUS\n\n    # Intermediate P and Q values\n    p_value = (b_lat1 + b_lat2) / 2\n    q_value = (b_lat2 - b_lat1) / 2\n\n    # Intermediate X value\n    # X = (sigma - sin(sigma)) * sin^2Pcos^2Q / cos^2(sigma/2)\n    x_numerator = (sin(p_value) ** 2) * (cos(q_value) ** 2)\n    x_demonimator = cos(sigma / 2) ** 2\n    x_value = (sigma - sin(sigma)) * (x_numerator / x_demonimator)\n\n    # Intermediate Y value\n    # Y = (sigma + sin(sigma)) * cos^2Psin^2Q / sin^2(sigma/2)\n    y_numerator = (cos(p_value) ** 2) * (sin(q_value) ** 2)\n    y_denominator = sin(sigma / 2) ** 2\n    y_value = (sigma + sin(sigma)) * (y_numerator / y_denominator)\n\n    return EQUATORIAL_RADIUS * (sigma - ((flattening / 2) * (x_value + y_value)))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "geometry/__init__.py",
    "content": ""
  },
  {
    "path": "geometry/geometry.py",
    "content": "from __future__ import annotations\n\nimport math\nfrom dataclasses import dataclass, field\nfrom types import NoneType\nfrom typing import Self\n\n# Building block classes\n\n\n@dataclass\nclass Angle:\n    \"\"\"\n    An Angle in degrees (unit of measurement)\n\n    >>> Angle()\n    Angle(degrees=90)\n    >>> Angle(45.5)\n    Angle(degrees=45.5)\n    >>> Angle(-1)\n    Traceback (most recent call last):\n        ...\n    TypeError: degrees must be a numeric value between 0 and 360.\n    >>> Angle(361)\n    Traceback (most recent call last):\n        ...\n    TypeError: degrees must be a numeric value between 0 and 360.\n    \"\"\"\n\n    degrees: float = 90\n\n    def __post_init__(self) -> None:\n        if not isinstance(self.degrees, (int, float)) or not 0 <= self.degrees <= 360:\n            raise TypeError(\"degrees must be a numeric value between 0 and 360.\")\n\n\n@dataclass\nclass Side:\n    \"\"\"\n    A side of a two dimensional Shape such as Polygon, etc.\n    adjacent_sides: a list of sides which are adjacent to the current side\n    angle: the angle in degrees between each adjacent side\n    length: the length of the current side in meters\n\n    >>> Side(5)\n    Side(length=5, angle=Angle(degrees=90), next_side=None)\n    >>> Side(5, Angle(45.6))\n    Side(length=5, angle=Angle(degrees=45.6), next_side=None)\n    >>> Side(5, Angle(45.6), Side(1, Angle(2)))  # doctest: +ELLIPSIS\n    Side(length=5, angle=Angle(degrees=45.6), next_side=Side(length=1, angle=Angle(d...\n    >>> Side(-1)\n    Traceback (most recent call last):\n        ...\n    TypeError: length must be a positive numeric value.\n    >>> Side(5, None)\n    Traceback (most recent call last):\n        ...\n    TypeError: angle must be an Angle object.\n    >>> Side(5, Angle(90), \"Invalid next_side\")\n    Traceback (most recent call last):\n        ...\n    TypeError: next_side must be a Side or None.\n    \"\"\"\n\n    length: float\n    angle: Angle = field(default_factory=Angle)\n    next_side: Side | None = None\n\n    def __post_init__(self) -> None:\n        if not isinstance(self.length, (int, float)) or self.length <= 0:\n            raise TypeError(\"length must be a positive numeric value.\")\n        if not isinstance(self.angle, Angle):\n            raise TypeError(\"angle must be an Angle object.\")\n        if not isinstance(self.next_side, (Side, NoneType)):\n            raise TypeError(\"next_side must be a Side or None.\")\n\n\n@dataclass\nclass Ellipse:\n    \"\"\"\n    A geometric Ellipse on a 2D surface\n\n    >>> Ellipse(5, 10)\n    Ellipse(major_radius=5, minor_radius=10)\n    >>> Ellipse(5, 10) is Ellipse(5, 10)\n    False\n    >>> Ellipse(5, 10) == Ellipse(5, 10)\n    True\n    \"\"\"\n\n    major_radius: float\n    minor_radius: float\n\n    @property\n    def area(self) -> float:\n        \"\"\"\n        >>> Ellipse(5, 10).area\n        157.07963267948966\n        \"\"\"\n        return math.pi * self.major_radius * self.minor_radius\n\n    @property\n    def perimeter(self) -> float:\n        \"\"\"\n        >>> Ellipse(5, 10).perimeter\n        47.12388980384689\n        \"\"\"\n        return math.pi * (self.major_radius + self.minor_radius)\n\n\nclass Circle(Ellipse):\n    \"\"\"\n    A geometric Circle on a 2D surface\n\n    >>> Circle(5)\n    Circle(radius=5)\n    >>> Circle(5) is Circle(5)\n    False\n    >>> Circle(5) == Circle(5)\n    True\n    >>> Circle(5).area\n    78.53981633974483\n    >>> Circle(5).perimeter\n    31.41592653589793\n    \"\"\"\n\n    def __init__(self, radius: float) -> None:\n        super().__init__(radius, radius)\n        self.radius = radius\n\n    def __repr__(self) -> str:\n        return f\"Circle(radius={self.radius})\"\n\n    @property\n    def diameter(self) -> float:\n        \"\"\"\n        >>> Circle(5).diameter\n        10\n        \"\"\"\n        return self.radius * 2\n\n    def max_parts(self, num_cuts: float) -> float:\n        \"\"\"\n        Return the maximum number of parts that circle can be divided into if cut\n        'num_cuts' times.\n\n        >>> circle = Circle(5)\n        >>> circle.max_parts(0)\n        1.0\n        >>> circle.max_parts(7)\n        29.0\n        >>> circle.max_parts(54)\n        1486.0\n        >>> circle.max_parts(22.5)\n        265.375\n        >>> circle.max_parts(-222)\n        Traceback (most recent call last):\n            ...\n        TypeError: num_cuts must be a positive numeric value.\n        >>> circle.max_parts(\"-222\")\n        Traceback (most recent call last):\n            ...\n        TypeError: num_cuts must be a positive numeric value.\n        \"\"\"\n        if not isinstance(num_cuts, (int, float)) or num_cuts < 0:\n            raise TypeError(\"num_cuts must be a positive numeric value.\")\n        return (num_cuts + 2 + num_cuts**2) * 0.5\n\n\n@dataclass\nclass Polygon:\n    \"\"\"\n    An abstract class which represents Polygon on a 2D surface.\n\n    >>> Polygon()\n    Polygon(sides=[])\n    >>> polygon = Polygon()\n    >>> polygon.add_side(Side(5)).get_side(0)\n    Side(length=5, angle=Angle(degrees=90), next_side=None)\n    >>> polygon.get_side(1)\n    Traceback (most recent call last):\n        ...\n    IndexError: list index out of range\n    >>> polygon.set_side(0, Side(10)).get_side(0)\n    Side(length=10, angle=Angle(degrees=90), next_side=None)\n    >>> polygon.set_side(1, Side(10))\n    Traceback (most recent call last):\n        ...\n    IndexError: list assignment index out of range\n    \"\"\"\n\n    sides: list[Side] = field(default_factory=list)\n\n    def add_side(self, side: Side) -> Self:\n        \"\"\"\n        >>> Polygon().add_side(Side(5))\n        Polygon(sides=[Side(length=5, angle=Angle(degrees=90), next_side=None)])\n        \"\"\"\n        self.sides.append(side)\n        return self\n\n    def get_side(self, index: int) -> Side:\n        \"\"\"\n        >>> Polygon().get_side(0)\n        Traceback (most recent call last):\n            ...\n        IndexError: list index out of range\n        >>> Polygon().add_side(Side(5)).get_side(-1)\n        Side(length=5, angle=Angle(degrees=90), next_side=None)\n        \"\"\"\n        return self.sides[index]\n\n    def set_side(self, index: int, side: Side) -> Self:\n        \"\"\"\n        >>> Polygon().set_side(0, Side(5))\n        Traceback (most recent call last):\n            ...\n        IndexError: list assignment index out of range\n        >>> Polygon().add_side(Side(5)).set_side(0, Side(10))\n        Polygon(sides=[Side(length=10, angle=Angle(degrees=90), next_side=None)])\n        \"\"\"\n        self.sides[index] = side\n        return self\n\n\nclass Rectangle(Polygon):\n    \"\"\"\n    A geometric rectangle on a 2D surface.\n\n    >>> rectangle_one = Rectangle(5, 10)\n    >>> rectangle_one.perimeter()\n    30\n    >>> rectangle_one.area()\n    50\n    >>> Rectangle(-5, 10)\n    Traceback (most recent call last):\n        ...\n    TypeError: length must be a positive numeric value.\n    \"\"\"\n\n    def __init__(self, short_side_length: float, long_side_length: float) -> None:\n        super().__init__()\n        self.short_side_length = short_side_length\n        self.long_side_length = long_side_length\n        self.post_init()\n\n    def post_init(self) -> None:\n        \"\"\"\n        >>> Rectangle(5, 10)  # doctest: +NORMALIZE_WHITESPACE\n        Rectangle(sides=[Side(length=5, angle=Angle(degrees=90), next_side=None),\n        Side(length=10, angle=Angle(degrees=90), next_side=None)])\n        \"\"\"\n        self.short_side = Side(self.short_side_length)\n        self.long_side = Side(self.long_side_length)\n        super().add_side(self.short_side)\n        super().add_side(self.long_side)\n\n    def perimeter(self) -> float:\n        return (self.short_side.length + self.long_side.length) * 2\n\n    def area(self) -> float:\n        return self.short_side.length * self.long_side.length\n\n\n@dataclass\nclass Square(Rectangle):\n    \"\"\"\n    a structure which represents a\n    geometrical square on a 2D surface\n    >>> square_one = Square(5)\n    >>> square_one.perimeter()\n    20\n    >>> square_one.area()\n    25\n    \"\"\"\n\n    def __init__(self, side_length: float) -> None:\n        super().__init__(side_length, side_length)\n\n    def perimeter(self) -> float:\n        return super().perimeter()\n\n    def area(self) -> float:\n        return super().area()\n\n\nif __name__ == \"__main__\":\n    __import__(\"doctest\").testmod()\n"
  },
  {
    "path": "geometry/graham_scan.py",
    "content": "\"\"\"\nGraham Scan algorithm for finding the convex hull of a set of points.\n\nThe Graham scan is a method of computing the convex hull of a finite set of points\nin the plane with time complexity O(n log n). It is named after Ronald Graham, who\npublished the original algorithm in 1972.\n\nThe algorithm finds all vertices of the convex hull ordered along its boundary.\nIt uses a stack to efficiently identify and remove points that would create\nnon-convex angles.\n\nReferences:\n- https://en.wikipedia.org/wiki/Graham_scan\n- Graham, R.L. (1972). \"An Efficient Algorithm for Determining the Convex Hull of a\n  Finite Planar Set\"\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections.abc import Sequence\nfrom dataclasses import dataclass\nfrom typing import TypeVar\n\nT = TypeVar(\"T\", bound=\"Point\")\n\n\n@dataclass\nclass Point:\n    \"\"\"\n    A point in 2D space.\n\n    >>> Point(0, 0)\n    Point(x=0.0, y=0.0)\n    >>> Point(1.5, 2.5)\n    Point(x=1.5, y=2.5)\n    \"\"\"\n\n    x: float\n    y: float\n\n    def __init__(self, x_coordinate: float, y_coordinate: float) -> None:\n        \"\"\"\n        Initialize a 2D point.\n\n        Args:\n            x_coordinate: The x-coordinate (horizontal position) of the point\n            y_coordinate: The y-coordinate (vertical position) of the point\n        \"\"\"\n        self.x = float(x_coordinate)\n        self.y = float(y_coordinate)\n\n    def __eq__(self, other: object) -> bool:\n        \"\"\"\n        Check if two points are equal.\n\n        >>> Point(1, 2) == Point(1, 2)\n        True\n        >>> Point(1, 2) == Point(2, 1)\n        False\n        \"\"\"\n        if not isinstance(other, Point):\n            return NotImplemented\n        return self.x == other.x and self.y == other.y\n\n    def __lt__(self, other: Point) -> bool:\n        \"\"\"\n        Compare two points for sorting (bottom-most, then left-most).\n\n        >>> Point(1, 2) < Point(1, 3)\n        True\n        >>> Point(1, 2) < Point(2, 2)\n        True\n        >>> Point(2, 2) < Point(1, 2)\n        False\n        \"\"\"\n        if self.y == other.y:\n            return self.x < other.x\n        return self.y < other.y\n\n    def euclidean_distance(self, other: Point) -> float:\n        \"\"\"\n        Calculate Euclidean distance between two points.\n\n        >>> Point(0, 0).euclidean_distance(Point(3, 4))\n        5.0\n        >>> Point(1, 1).euclidean_distance(Point(4, 5))\n        5.0\n        \"\"\"\n        return ((self.x - other.x) ** 2 + (self.y - other.y) ** 2) ** 0.5\n\n    def consecutive_orientation(self, point_a: Point, point_b: Point) -> float:\n        \"\"\"\n        Calculate the cross product of vectors (self -> point_a) and\n        (point_a -> point_b).\n\n        Returns:\n        - Positive value: counter-clockwise turn\n        - Negative value: clockwise turn\n        - Zero: collinear points\n\n        >>> Point(0, 0).consecutive_orientation(Point(1, 0), Point(1, 1))\n        1.0\n        >>> Point(0, 0).consecutive_orientation(Point(1, 0), Point(1, -1))\n        -1.0\n        >>> Point(0, 0).consecutive_orientation(Point(1, 0), Point(2, 0))\n        0.0\n        \"\"\"\n        return (point_a.x - self.x) * (point_b.y - point_a.y) - (point_a.y - self.y) * (\n            point_b.x - point_a.x\n        )\n\n\ndef graham_scan(points: Sequence[Point]) -> list[Point]:\n    \"\"\"\n    Find the convex hull of a set of points using the Graham scan algorithm.\n\n    The algorithm works as follows:\n    1. Find the bottom-most point (or left-most in case of tie)\n    2. Sort all other points by polar angle with respect to the bottom-most point\n    3. Process points in order, maintaining a stack of hull candidates\n    4. Remove points that would create a clockwise turn\n\n    Args:\n        points: A sequence of Point objects\n\n    Returns:\n        A list of Point objects representing the convex hull in counter-clockwise order.\n        Returns an empty list if there are fewer than 3 distinct points or if all\n        points are collinear.\n\n    Time Complexity: O(n log n) due to sorting\n    Space Complexity: O(n) for the output hull\n\n    >>> graham_scan([])\n    []\n    >>> graham_scan([Point(0, 0)])\n    []\n    >>> graham_scan([Point(0, 0), Point(1, 1)])\n    []\n    >>> hull = graham_scan([Point(0, 0), Point(1, 0), Point(0.5, 1)])\n    >>> len(hull)\n    3\n    >>> Point(0, 0) in hull and Point(1, 0) in hull and Point(0.5, 1) in hull\n    True\n    \"\"\"\n    if len(points) <= 2:\n        return []\n\n    # Find the bottom-most point (left-most in case of tie)\n    min_point = min(points)\n\n    # Remove the min_point from the list\n    points_list = [p for p in points if p != min_point]\n    if not points_list:\n        # Edge case where all points are the same\n        return []\n\n    def polar_angle_key(point: Point) -> tuple[float, float, float]:\n        \"\"\"\n        Key function for sorting points by polar angle relative to min_point.\n\n        Points are sorted counter-clockwise. When two points have the same angle,\n        the farther point comes first (we'll remove duplicates later).\n        \"\"\"\n        # We use a dummy third point (min_point itself) to calculate relative angles\n        # Instead, we'll compute the angle between points\n        dx = point.x - min_point.x\n        dy = point.y - min_point.y\n\n        # Use atan2 for angle, but we can also use cross product for comparison\n        # For sorting, we compare orientations between consecutive points\n        distance = min_point.euclidean_distance(point)\n        return (dx, dy, -distance)  # Negative distance to sort farther points first\n\n    # Sort by polar angle using a comparison based on cross product\n    def compare_points(point_a: Point, point_b: Point) -> int:\n        \"\"\"Compare two points by polar angle relative to min_point.\"\"\"\n        orientation = min_point.consecutive_orientation(point_a, point_b)\n        if orientation < 0.0:\n            return 1  # point_a comes after point_b (clockwise)\n        elif orientation > 0.0:\n            return -1  # point_a comes before point_b (counter-clockwise)\n        else:\n            # Collinear: farther point should come first\n            dist_a = min_point.euclidean_distance(point_a)\n            dist_b = min_point.euclidean_distance(point_b)\n            if dist_b < dist_a:\n                return -1\n            elif dist_b > dist_a:\n                return 1\n            else:\n                return 0\n\n    from functools import cmp_to_key\n\n    points_list.sort(key=cmp_to_key(compare_points))\n\n    # Build the convex hull\n    convex_hull: list[Point] = [min_point, points_list[0]]\n\n    for point in points_list[1:]:\n        # Skip consecutive points with the same angle (collinear with min_point)\n        if min_point.consecutive_orientation(point, convex_hull[-1]) == 0.0:\n            continue\n\n        # Remove points that create a clockwise turn (or are collinear)\n        while len(convex_hull) >= 2:\n            orientation = convex_hull[-2].consecutive_orientation(\n                convex_hull[-1], point\n            )\n            if orientation <= 0.0:\n                convex_hull.pop()\n            else:\n                break\n\n        convex_hull.append(point)\n\n    # Need at least 3 points for a valid convex hull\n    if len(convex_hull) <= 2:\n        return []\n\n    return convex_hull\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    # Example usage\n    points = [\n        Point(0, 0),\n        Point(1, 0),\n        Point(2, 0),\n        Point(2, 1),\n        Point(2, 2),\n        Point(1, 2),\n        Point(0, 2),\n        Point(0, 1),\n        Point(1, 1),  # Interior point\n    ]\n\n    hull = graham_scan(points)\n    print(\"Convex hull vertices:\")\n    for point in hull:\n        print(f\"  ({point.x}, {point.y})\")\n"
  },
  {
    "path": "geometry/jarvis_march.py",
    "content": "\"\"\"\nJarvis March (Gift Wrapping) algorithm for finding the convex hull of a set of points.\n\nThe convex hull is the smallest convex polygon that contains all the points.\n\nTime Complexity: O(n*h) where n is the number of points and h is the number of\nhull points.\nSpace Complexity: O(h) where h is the number of hull points.\n\nUSAGE:\n    -> Import this file into your project.\n    -> Use the jarvis_march() function to find the convex hull of a set of points.\n    -> Parameters:\n        -> points: A list of Point objects representing 2D coordinates\n\nREFERENCES:\n    -> Wikipedia reference: https://en.wikipedia.org/wiki/Gift_wrapping_algorithm\n    -> GeeksforGeeks:\n       https://www.geeksforgeeks.org/convex-hull-set-1-jarviss-algorithm-or-wrapping/\n\"\"\"\n\nfrom __future__ import annotations\n\n\nclass Point:\n    \"\"\"Represents a 2D point with x and y coordinates.\"\"\"\n\n    def __init__(self, x_coordinate: float, y_coordinate: float) -> None:\n        self.x = x_coordinate\n        self.y = y_coordinate\n\n    def __eq__(self, other: object) -> bool:\n        if not isinstance(other, Point):\n            return NotImplemented\n        return self.x == other.x and self.y == other.y\n\n    def __repr__(self) -> str:\n        return f\"Point({self.x}, {self.y})\"\n\n    def __hash__(self) -> int:\n        return hash((self.x, self.y))\n\n\ndef _cross_product(origin: Point, point_a: Point, point_b: Point) -> float:\n    \"\"\"\n    Calculate the cross product of vectors OA and OB.\n\n    Returns:\n        > 0: Counter-clockwise turn (left turn)\n        = 0: Collinear\n        < 0: Clockwise turn (right turn)\n    \"\"\"\n    return (point_a.x - origin.x) * (point_b.y - origin.y) - (point_a.y - origin.y) * (\n        point_b.x - origin.x\n    )\n\n\ndef _is_point_on_segment(p1: Point, p2: Point, point: Point) -> bool:\n    \"\"\"Check if a point lies on the line segment between p1 and p2.\"\"\"\n    # Check if point is collinear with segment endpoints\n    cross = (point.y - p1.y) * (p2.x - p1.x) - (point.x - p1.x) * (p2.y - p1.y)\n\n    if abs(cross) > 1e-9:\n        return False\n\n    # Check if point is within the bounding box of the segment\n    return min(p1.x, p2.x) <= point.x <= max(p1.x, p2.x) and min(\n        p1.y, p2.y\n    ) <= point.y <= max(p1.y, p2.y)\n\n\ndef _find_leftmost_point(points: list[Point]) -> int:\n    \"\"\"Find index of leftmost point (and bottom-most in case of tie).\"\"\"\n    left_idx = 0\n    for i in range(1, len(points)):\n        if points[i].x < points[left_idx].x or (\n            points[i].x == points[left_idx].x and points[i].y < points[left_idx].y\n        ):\n            left_idx = i\n    return left_idx\n\n\ndef _find_next_hull_point(points: list[Point], current_idx: int) -> int:\n    \"\"\"Find the next point on the convex hull.\"\"\"\n    next_idx = (current_idx + 1) % len(points)\n    # Ensure next_idx is not the same as current_idx\n    while next_idx == current_idx:\n        next_idx = (next_idx + 1) % len(points)\n\n    for i in range(len(points)):\n        if i == current_idx:\n            continue\n        cross = _cross_product(points[current_idx], points[i], points[next_idx])\n        if cross > 0:\n            next_idx = i\n\n    return next_idx\n\n\ndef _is_valid_polygon(hull: list[Point]) -> bool:\n    \"\"\"Check if hull forms a valid polygon (has at least one non-collinear turn).\"\"\"\n    for i in range(len(hull)):\n        p1 = hull[i]\n        p2 = hull[(i + 1) % len(hull)]\n        p3 = hull[(i + 2) % len(hull)]\n        if abs(_cross_product(p1, p2, p3)) > 1e-9:\n            return True\n    return False\n\n\ndef _add_point_to_hull(hull: list[Point], point: Point) -> None:\n    \"\"\"Add a point to hull, removing collinear intermediate points.\"\"\"\n    last = len(hull) - 1\n    if len(hull) > 1 and _is_point_on_segment(hull[last - 1], hull[last], point):\n        hull[last] = Point(point.x, point.y)\n    else:\n        hull.append(Point(point.x, point.y))\n\n\ndef jarvis_march(points: list[Point]) -> list[Point]:\n    \"\"\"\n    Find the convex hull of a set of points using the Jarvis March algorithm.\n\n    The algorithm starts with the leftmost point and wraps around the set of\n    points, selecting the most counter-clockwise point at each step.\n\n    Args:\n        points: List of Point objects representing 2D coordinates\n\n    Returns:\n        List of Points that form the convex hull in counter-clockwise order.\n        Returns empty list if there are fewer than 3 non-collinear points.\n    \"\"\"\n    if len(points) <= 2:\n        return []\n\n    # Remove duplicate points to avoid infinite loops\n    unique_points = list(set(points))\n\n    if len(unique_points) <= 2:\n        return []\n\n    convex_hull: list[Point] = []\n\n    # Find the leftmost point\n    left_point_idx = _find_leftmost_point(unique_points)\n    convex_hull.append(\n        Point(unique_points[left_point_idx].x, unique_points[left_point_idx].y)\n    )\n\n    current_idx = left_point_idx\n    while True:\n        # Find the next counter-clockwise point\n        next_idx = _find_next_hull_point(unique_points, current_idx)\n\n        if next_idx == left_point_idx:\n            break\n\n        if next_idx == current_idx:\n            break\n\n        current_idx = next_idx\n        _add_point_to_hull(convex_hull, unique_points[current_idx])\n\n    # Check for degenerate cases\n    if len(convex_hull) <= 2:\n        return []\n\n    # Check if last point is collinear with first and second-to-last\n    last = len(convex_hull) - 1\n    if _is_point_on_segment(convex_hull[last - 1], convex_hull[last], convex_hull[0]):\n        convex_hull.pop()\n        if len(convex_hull) == 2:\n            return []\n\n    # Verify the hull forms a valid polygon\n    if not _is_valid_polygon(convex_hull):\n        return []\n\n    return convex_hull\n\n\nif __name__ == \"__main__\":\n    # Example usage\n    points = [Point(0, 0), Point(1, 1), Point(0, 1), Point(1, 0), Point(0.5, 0.5)]\n    hull = jarvis_march(points)\n    print(f\"Convex hull: {hull}\")\n"
  },
  {
    "path": "geometry/tests/__init__.py",
    "content": ""
  },
  {
    "path": "geometry/tests/test_graham_scan.py",
    "content": "\"\"\"\nTests for the Graham scan convex hull algorithm.\n\"\"\"\n\nfrom geometry.graham_scan import Point, graham_scan\n\n\ndef test_empty_points() -> None:\n    \"\"\"Test with no points.\"\"\"\n    assert graham_scan([]) == []\n\n\ndef test_single_point() -> None:\n    \"\"\"Test with a single point.\"\"\"\n    assert graham_scan([Point(0, 0)]) == []\n\n\ndef test_two_points() -> None:\n    \"\"\"Test with two points.\"\"\"\n    assert graham_scan([Point(0, 0), Point(1, 1)]) == []\n\n\ndef test_duplicate_points() -> None:\n    \"\"\"Test with all duplicate points.\"\"\"\n    p = Point(0, 0)\n    points = [p, Point(0, 0), Point(0, 0), Point(0, 0), Point(0, 0)]\n    assert graham_scan(points) == []\n\n\ndef test_collinear_points() -> None:\n    \"\"\"Test with all points on the same line.\"\"\"\n    points = [\n        Point(1, 0),\n        Point(2, 0),\n        Point(3, 0),\n        Point(4, 0),\n        Point(5, 0),\n    ]\n    assert graham_scan(points) == []\n\n\ndef test_triangle() -> None:\n    \"\"\"Test with a triangle (3 points).\"\"\"\n    p1 = Point(1, 1)\n    p2 = Point(2, 1)\n    p3 = Point(1.5, 2)\n    points = [p1, p2, p3]\n    hull = graham_scan(points)\n\n    assert len(hull) == 3\n    assert p1 in hull\n    assert p2 in hull\n    assert p3 in hull\n\n\ndef test_rectangle() -> None:\n    \"\"\"Test with a rectangle (4 points).\"\"\"\n    p1 = Point(1, 1)\n    p2 = Point(2, 1)\n    p3 = Point(2, 2)\n    p4 = Point(1, 2)\n    points = [p1, p2, p3, p4]\n    hull = graham_scan(points)\n\n    assert len(hull) == 4\n    assert all(p in hull for p in points)\n\n\ndef test_triangle_with_interior_points() -> None:\n    \"\"\"Test triangle with points inside.\"\"\"\n    p1 = Point(1, 1)\n    p2 = Point(2, 1)\n    p3 = Point(1.5, 2)\n    p4 = Point(1.5, 1.5)  # Interior\n    p5 = Point(1.2, 1.3)  # Interior\n    p6 = Point(1.8, 1.2)  # Interior\n    p7 = Point(1.5, 1.9)  # Interior\n\n    hull_points = [p1, p2, p3]\n    interior_points = [p4, p5, p6, p7]\n    all_points = hull_points + interior_points\n\n    hull = graham_scan(all_points)\n\n    # All hull points should be in the result\n    for p in hull_points:\n        assert p in hull\n\n    # No interior points should be in the result\n    for p in interior_points:\n        assert p not in hull\n\n\ndef test_rectangle_with_interior_points() -> None:\n    \"\"\"Test rectangle with points inside.\"\"\"\n    p1 = Point(1, 1)\n    p2 = Point(2, 1)\n    p3 = Point(2, 2)\n    p4 = Point(1, 2)\n    p5 = Point(1.5, 1.5)  # Interior\n    p6 = Point(1.2, 1.3)  # Interior\n    p7 = Point(1.8, 1.2)  # Interior\n    p8 = Point(1.9, 1.7)  # Interior\n    p9 = Point(1.4, 1.9)  # Interior\n\n    hull_points = [p1, p2, p3, p4]\n    interior_points = [p5, p6, p7, p8, p9]\n    all_points = hull_points + interior_points\n\n    hull = graham_scan(all_points)\n\n    # All hull points should be in the result\n    for p in hull_points:\n        assert p in hull\n\n    # No interior points should be in the result\n    for p in interior_points:\n        assert p not in hull\n\n\ndef test_star_shape() -> None:\n    \"\"\"Test with a star shape where only tips are on the convex hull.\"\"\"\n    # Tips of the star (on convex hull)\n    p1 = Point(-5, 6)\n    p2 = Point(-11, 0)\n    p3 = Point(-9, -8)\n    p4 = Point(4, 4)\n    p5 = Point(6, -7)\n\n    # Interior points (not on convex hull)\n    p6 = Point(-7, -2)\n    p7 = Point(-2, -4)\n    p8 = Point(0, 1)\n    p9 = Point(1, 0)\n    p10 = Point(-6, 1)\n\n    hull_points = [p1, p2, p3, p4, p5]\n    interior_points = [p6, p7, p8, p9, p10]\n    all_points = hull_points + interior_points\n\n    hull = graham_scan(all_points)\n\n    # All hull points should be in the result\n    for p in hull_points:\n        assert p in hull\n\n    # No interior points should be in the result\n    for p in interior_points:\n        assert p not in hull\n\n\ndef test_rectangle_with_collinear_points() -> None:\n    \"\"\"Test rectangle with points on the edges (collinear with vertices).\"\"\"\n    p1 = Point(1, 1)\n    p2 = Point(2, 1)\n    p3 = Point(2, 2)\n    p4 = Point(1, 2)\n    p5 = Point(1.5, 1)  # On edge p1-p2\n    p6 = Point(1, 1.5)  # On edge p1-p4\n    p7 = Point(2, 1.5)  # On edge p2-p3\n    p8 = Point(1.5, 2)  # On edge p3-p4\n\n    hull_points = [p1, p2, p3, p4]\n    edge_points = [p5, p6, p7, p8]\n    all_points = hull_points + edge_points\n\n    hull = graham_scan(all_points)\n\n    # All corner points should be in the result\n    for p in hull_points:\n        assert p in hull\n\n    # Edge points should not be in the result (only corners)\n    for p in edge_points:\n        assert p not in hull\n\n\ndef test_point_equality() -> None:\n    \"\"\"Test Point equality.\"\"\"\n    p1 = Point(1, 2)\n    p2 = Point(1, 2)\n    p3 = Point(2, 1)\n\n    assert p1 == p2\n    assert p1 != p3\n\n\ndef test_point_comparison() -> None:\n    \"\"\"Test Point comparison for sorting.\"\"\"\n    p1 = Point(1, 2)\n    p2 = Point(1, 3)\n    p3 = Point(2, 2)\n\n    assert p1 < p2  # Lower y value\n    assert p1 < p3  # Same y, lower x\n    assert not p2 < p1\n\n\ndef test_euclidean_distance() -> None:\n    \"\"\"Test Euclidean distance calculation.\"\"\"\n    p1 = Point(0, 0)\n    p2 = Point(3, 4)\n\n    assert p1.euclidean_distance(p2) == 5.0\n\n\ndef test_consecutive_orientation() -> None:\n    \"\"\"Test orientation calculation.\"\"\"\n    p1 = Point(0, 0)\n    p2 = Point(1, 0)\n    p3_ccw = Point(1, 1)  # Counter-clockwise\n    p3_cw = Point(1, -1)  # Clockwise\n    p3_collinear = Point(2, 0)  # Collinear\n\n    assert p1.consecutive_orientation(p2, p3_ccw) > 0  # Counter-clockwise\n    assert p1.consecutive_orientation(p2, p3_cw) < 0  # Clockwise\n    assert p1.consecutive_orientation(p2, p3_collinear) == 0  # Collinear\n\n\ndef test_large_hull() -> None:\n    \"\"\"Test with a larger set of points.\"\"\"\n    # Create a circle of points\n    import math\n\n    points = []\n    for i in range(20):\n        angle = 2 * math.pi * i / 20\n        x = math.cos(angle)\n        y = math.sin(angle)\n        points.append(Point(x, y))\n\n    # Add some interior points\n    points.append(Point(0, 0))\n    points.append(Point(0.5, 0.5))\n    points.append(Point(-0.3, 0.2))\n\n    hull = graham_scan(points)\n\n    # The hull should contain the circle points but not the interior points\n    assert len(hull) >= 3\n    assert Point(0, 0) not in hull\n    assert Point(0.5, 0.5) not in hull\n    assert Point(-0.3, 0.2) not in hull\n\n\ndef test_random_order() -> None:\n    \"\"\"Test that point order doesn't affect the result.\"\"\"\n    p1 = Point(0, 0)\n    p2 = Point(4, 0)\n    p3 = Point(4, 3)\n    p4 = Point(0, 3)\n    p5 = Point(2, 1.5)  # Interior\n\n    # Try different orderings\n    order1 = [p1, p2, p3, p4, p5]\n    order2 = [p5, p4, p3, p2, p1]\n    order3 = [p3, p5, p1, p4, p2]\n\n    hull1 = graham_scan(order1)\n    hull2 = graham_scan(order2)\n    hull3 = graham_scan(order3)\n\n    # All should have the same points (though possibly in different order)\n    assert len(hull1) == len(hull2) == len(hull3) == 4\n    assert {(p.x, p.y) for p in hull1} == {(p.x, p.y) for p in hull2}\n    assert {(p.x, p.y) for p in hull2} == {(p.x, p.y) for p in hull3}\n"
  },
  {
    "path": "geometry/tests/test_jarvis_march.py",
    "content": "\"\"\"\nUnit tests for Jarvis March (Gift Wrapping) algorithm.\n\"\"\"\n\nfrom geometry.jarvis_march import Point, jarvis_march\n\n\nclass TestPoint:\n    \"\"\"Tests for the Point class.\"\"\"\n\n    def test_point_creation(self) -> None:\n        \"\"\"Test Point initialization.\"\"\"\n        p = Point(1.0, 2.0)\n        assert p.x == 1.0\n        assert p.y == 2.0\n\n    def test_point_equality(self) -> None:\n        \"\"\"Test Point equality comparison.\"\"\"\n        p1 = Point(1.0, 2.0)\n        p2 = Point(1.0, 2.0)\n        p3 = Point(2.0, 1.0)\n        assert p1 == p2\n        assert p1 != p3\n\n    def test_point_repr(self) -> None:\n        \"\"\"Test Point string representation.\"\"\"\n        p = Point(1.5, 2.5)\n        assert repr(p) == \"Point(1.5, 2.5)\"\n\n    def test_point_hash(self) -> None:\n        \"\"\"Test Point hashing.\"\"\"\n        p1 = Point(1.0, 2.0)\n        p2 = Point(1.0, 2.0)\n        assert hash(p1) == hash(p2)\n\n\nclass TestJarvisMarch:\n    \"\"\"Tests for the jarvis_march function.\"\"\"\n\n    def test_triangle(self) -> None:\n        \"\"\"Test convex hull of a triangle.\"\"\"\n        p1, p2, p3 = Point(1, 1), Point(2, 1), Point(1.5, 2)\n        hull = jarvis_march([p1, p2, p3])\n        assert len(hull) == 3\n        assert all(p in hull for p in [p1, p2, p3])\n\n    def test_collinear_points(self) -> None:\n        \"\"\"Test that collinear points return empty hull.\"\"\"\n        points = [Point(i, 0) for i in range(5)]\n        hull = jarvis_march(points)\n        assert hull == []\n\n    def test_rectangle_with_interior_point(self) -> None:\n        \"\"\"Test rectangle with interior point - interior point excluded.\"\"\"\n        p1, p2 = Point(1, 1), Point(2, 1)\n        p3, p4 = Point(2, 2), Point(1, 2)\n        p5 = Point(1.5, 1.5)\n        hull = jarvis_march([p1, p2, p3, p4, p5])\n        assert len(hull) == 4\n        assert p5 not in hull\n\n    def test_star_shape(self) -> None:\n        \"\"\"Test star shape - only tips are in hull.\"\"\"\n        tips = [\n            Point(-5, 6),\n            Point(-11, 0),\n            Point(-9, -8),\n            Point(4, 4),\n            Point(6, -7),\n        ]\n        interior = [Point(-7, -2), Point(-2, -4), Point(0, 1)]\n        hull = jarvis_march(tips + interior)\n        assert len(hull) == 5\n        assert all(p in hull for p in tips)\n        assert not any(p in hull for p in interior)\n\n    def test_empty_list(self) -> None:\n        \"\"\"Test empty list returns empty hull.\"\"\"\n        assert jarvis_march([]) == []\n\n    def test_single_point(self) -> None:\n        \"\"\"Test single point returns empty hull.\"\"\"\n        assert jarvis_march([Point(0, 0)]) == []\n\n    def test_two_points(self) -> None:\n        \"\"\"Test two points return empty hull.\"\"\"\n        assert jarvis_march([Point(0, 0), Point(1, 1)]) == []\n\n    def test_square(self) -> None:\n        \"\"\"Test convex hull of a square.\"\"\"\n        p1, p2 = Point(0, 0), Point(1, 0)\n        p3, p4 = Point(1, 1), Point(0, 1)\n        hull = jarvis_march([p1, p2, p3, p4])\n        assert len(hull) == 4\n        assert all(p in hull for p in [p1, p2, p3, p4])\n\n    def test_duplicate_points(self) -> None:\n        \"\"\"Test handling of duplicate points.\"\"\"\n        p1, p2, p3 = Point(0, 0), Point(1, 0), Point(0, 1)\n        points = [p1, p2, p3, p1, p2]  # Include duplicates\n        hull = jarvis_march(points)\n        assert len(hull) == 3\n\n    def test_pentagon(self) -> None:\n        \"\"\"Test convex hull of a pentagon.\"\"\"\n        points = [\n            Point(0, 1),\n            Point(1, 2),\n            Point(2, 1),\n            Point(1.5, 0),\n            Point(0.5, 0),\n        ]\n        hull = jarvis_march(points)\n        assert len(hull) == 5\n        assert all(p in hull for p in points)\n"
  },
  {
    "path": "graphics/__init__.py",
    "content": ""
  },
  {
    "path": "graphics/bezier_curve.py",
    "content": "# https://en.wikipedia.org/wiki/B%C3%A9zier_curve\n# https://www.tutorialspoint.com/computer_graphics/computer_graphics_curves.htm\nfrom __future__ import annotations\n\nfrom scipy.special import comb\n\n\nclass BezierCurve:\n    \"\"\"\n    Bezier curve is a weighted sum of a set of control points.\n    Generate Bezier curves from a given set of control points.\n    This implementation works only for 2d coordinates in the xy plane.\n    \"\"\"\n\n    def __init__(self, list_of_points: list[tuple[float, float]]):\n        \"\"\"\n        list_of_points: Control points in the xy plane on which to interpolate. These\n            points control the behavior (shape) of the Bezier curve.\n        \"\"\"\n        self.list_of_points = list_of_points\n        # Degree determines the flexibility of the curve.\n        # Degree = 1 will produce a straight line.\n        self.degree = len(list_of_points) - 1\n\n    def basis_function(self, t: float) -> list[float]:\n        \"\"\"\n        The basis function determines the weight of each control point at time t.\n            t: time value between 0 and 1 inclusive at which to evaluate the basis of\n               the curve.\n        returns the x, y values of basis function at time t\n\n        >>> curve = BezierCurve([(1,1), (1,2)])\n        >>> [float(x) for x in curve.basis_function(0)]\n        [1.0, 0.0]\n        >>> [float(x) for x in curve.basis_function(1)]\n        [0.0, 1.0]\n        \"\"\"\n        assert 0 <= t <= 1, \"Time t must be between 0 and 1.\"\n        output_values: list[float] = []\n        for i in range(len(self.list_of_points)):\n            # basis function for each i\n            output_values.append(\n                comb(self.degree, i) * ((1 - t) ** (self.degree - i)) * (t**i)\n            )\n        # the basis must sum up to 1 for it to produce a valid Bezier curve.\n        assert round(sum(output_values), 5) == 1\n        return output_values\n\n    def bezier_curve_function(self, t: float) -> tuple[float, float]:\n        \"\"\"\n        The function to produce the values of the Bezier curve at time t.\n            t: the value of time t at which to evaluate the Bezier function\n        Returns the x, y coordinates of the Bezier curve at time t.\n            The first point in the curve is when t = 0.\n            The last point in the curve is when t = 1.\n\n        >>> curve = BezierCurve([(1,1), (1,2)])\n        >>> tuple(float(x) for x in curve.bezier_curve_function(0))\n        (1.0, 1.0)\n        >>> tuple(float(x) for x in curve.bezier_curve_function(1))\n        (1.0, 2.0)\n        \"\"\"\n\n        assert 0 <= t <= 1, \"Time t must be between 0 and 1.\"\n\n        basis_function = self.basis_function(t)\n        x = 0.0\n        y = 0.0\n        for i in range(len(self.list_of_points)):\n            # For all points, sum up the product of i-th basis function and i-th point.\n            x += basis_function[i] * self.list_of_points[i][0]\n            y += basis_function[i] * self.list_of_points[i][1]\n        return (x, y)\n\n    def plot_curve(self, step_size: float = 0.01):\n        \"\"\"\n        Plots the Bezier curve using matplotlib plotting capabilities.\n            step_size: defines the step(s) at which to evaluate the Bezier curve.\n            The smaller the step size, the finer the curve produced.\n        \"\"\"\n        from matplotlib import pyplot as plt\n\n        to_plot_x: list[float] = []  # x coordinates of points to plot\n        to_plot_y: list[float] = []  # y coordinates of points to plot\n\n        t = 0.0\n        while t <= 1:\n            value = self.bezier_curve_function(t)\n            to_plot_x.append(value[0])\n            to_plot_y.append(value[1])\n            t += step_size\n\n        x = [i[0] for i in self.list_of_points]\n        y = [i[1] for i in self.list_of_points]\n\n        plt.plot(\n            to_plot_x,\n            to_plot_y,\n            color=\"blue\",\n            label=\"Curve of Degree \" + str(self.degree),\n        )\n        plt.scatter(x, y, color=\"red\", label=\"Control Points\")\n        plt.legend()\n        plt.show()\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    BezierCurve([(1, 2), (3, 5)]).plot_curve()  # degree 1\n    BezierCurve([(0, 0), (5, 5), (5, 0)]).plot_curve()  # degree 2\n    BezierCurve([(0, 0), (5, 5), (5, 0), (2.5, -2.5)]).plot_curve()  # degree 3\n"
  },
  {
    "path": "graphics/butterfly_pattern.py",
    "content": "def butterfly_pattern(n: int) -> str:\n    \"\"\"\n    Creates a butterfly pattern of size n and returns it as a string.\n\n    >>> print(butterfly_pattern(3))\n    *   *\n    ** **\n    *****\n    ** **\n    *   *\n    >>> print(butterfly_pattern(5))\n    *       *\n    **     **\n    ***   ***\n    **** ****\n    *********\n    **** ****\n    ***   ***\n    **     **\n    *       *\n    \"\"\"\n    result = []\n\n    # Upper part\n    for i in range(1, n):\n        left_stars = \"*\" * i\n        spaces = \" \" * (2 * (n - i) - 1)\n        right_stars = \"*\" * i\n        result.append(left_stars + spaces + right_stars)\n\n    # Middle part\n    result.append(\"*\" * (2 * n - 1))\n\n    # Lower part\n    for i in range(n - 1, 0, -1):\n        left_stars = \"*\" * i\n        spaces = \" \" * (2 * (n - i) - 1)\n        right_stars = \"*\" * i\n        result.append(left_stars + spaces + right_stars)\n\n    return \"\\n\".join(result)\n\n\nif __name__ == \"__main__\":\n    n = int(input(\"Enter the size of the butterfly pattern: \"))\n    print(butterfly_pattern(n))\n"
  },
  {
    "path": "graphics/digital_differential_analyzer_line.py",
    "content": "import matplotlib.pyplot as plt\n\n\ndef digital_differential_analyzer_line(\n    p1: tuple[int, int], p2: tuple[int, int]\n) -> list[tuple[int, int]]:\n    \"\"\"\n    Draws a line between two points using the DDA algorithm.\n\n    Args:\n    - p1: Coordinates of the starting point.\n    - p2: Coordinates of the ending point.\n    Returns:\n    - List of coordinate points that form the line.\n\n    >>> digital_differential_analyzer_line((1, 1), (4, 4))\n    [(2, 2), (3, 3), (4, 4)]\n    \"\"\"\n    x1, y1 = p1\n    x2, y2 = p2\n    dx = x2 - x1\n    dy = y2 - y1\n    steps = max(abs(dx), abs(dy))\n    x_increment = dx / float(steps)\n    y_increment = dy / float(steps)\n    coordinates = []\n    x: float = x1\n    y: float = y1\n    for _ in range(steps):\n        x += x_increment\n        y += y_increment\n        coordinates.append((round(x), round(y)))\n    return coordinates\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    x1 = int(input(\"Enter the x-coordinate of the starting point: \"))\n    y1 = int(input(\"Enter the y-coordinate of the starting point: \"))\n    x2 = int(input(\"Enter the x-coordinate of the ending point: \"))\n    y2 = int(input(\"Enter the y-coordinate of the ending point: \"))\n    coordinates = digital_differential_analyzer_line((x1, y1), (x2, y2))\n    x_points, y_points = zip(*coordinates)\n    plt.plot(x_points, y_points, marker=\"o\")\n    plt.title(\"Digital Differential Analyzer Line Drawing Algorithm\")\n    plt.xlabel(\"X-axis\")\n    plt.ylabel(\"Y-axis\")\n    plt.grid()\n    plt.show()\n"
  },
  {
    "path": "graphics/vector3_for_2d_rendering.py",
    "content": "\"\"\"\nrender 3d points for 2d surfaces.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport math\n\n__version__ = \"2020.9.26\"\n__author__ = \"xcodz-dot, cclaus, dhruvmanila\"\n\n\ndef convert_to_2d(\n    x: float, y: float, z: float, scale: float, distance: float\n) -> tuple[float, float]:\n    \"\"\"\n    Converts 3d point to a 2d drawable point\n\n    >>> convert_to_2d(1.0, 2.0, 3.0, 10.0, 10.0)\n    (7.6923076923076925, 15.384615384615385)\n\n    >>> convert_to_2d(1, 2, 3, 10, 10)\n    (7.6923076923076925, 15.384615384615385)\n\n    >>> convert_to_2d(\"1\", 2, 3, 10, 10)  # '1' is str\n    Traceback (most recent call last):\n        ...\n    TypeError: Input values must either be float or int: ['1', 2, 3, 10, 10]\n    \"\"\"\n    if not all(isinstance(val, (float, int)) for val in locals().values()):\n        msg = f\"Input values must either be float or int: {list(locals().values())}\"\n        raise TypeError(msg)\n    projected_x = ((x * distance) / (z + distance)) * scale\n    projected_y = ((y * distance) / (z + distance)) * scale\n    return projected_x, projected_y\n\n\ndef rotate(\n    x: float, y: float, z: float, axis: str, angle: float\n) -> tuple[float, float, float]:\n    \"\"\"\n    rotate a point around a certain axis with a certain angle\n    angle can be any integer between 1, 360 and axis can be any one of\n    'x', 'y', 'z'\n\n    >>> rotate(1.0, 2.0, 3.0, 'y', 90.0)\n    (3.130524675073759, 2.0, 0.4470070007889556)\n\n    >>> rotate(1, 2, 3, \"z\", 180)\n    (0.999736015495891, -2.0001319704760485, 3)\n\n    >>> rotate('1', 2, 3, \"z\", 90.0)  # '1' is str\n    Traceback (most recent call last):\n        ...\n    TypeError: Input values except axis must either be float or int: ['1', 2, 3, 90.0]\n\n    >>> rotate(1, 2, 3, \"n\", 90)  # 'n' is not a valid axis\n    Traceback (most recent call last):\n        ...\n    ValueError: not a valid axis, choose one of 'x', 'y', 'z'\n\n    >>> rotate(1, 2, 3, \"x\", -90)\n    (1, -2.5049096187183877, -2.5933429780983657)\n\n    >>> rotate(1, 2, 3, \"x\", 450)  # 450 wrap around to 90\n    (1, 3.5776792428178217, -0.44744970165427644)\n    \"\"\"\n    if not isinstance(axis, str):\n        raise TypeError(\"Axis must be a str\")\n    input_variables = locals()\n    del input_variables[\"axis\"]\n    if not all(isinstance(val, (float, int)) for val in input_variables.values()):\n        msg = (\n            \"Input values except axis must either be float or int: \"\n            f\"{list(input_variables.values())}\"\n        )\n        raise TypeError(msg)\n    angle = (angle % 360) / 450 * 180 / math.pi\n    if axis == \"z\":\n        new_x = x * math.cos(angle) - y * math.sin(angle)\n        new_y = y * math.cos(angle) + x * math.sin(angle)\n        new_z = z\n    elif axis == \"x\":\n        new_y = y * math.cos(angle) - z * math.sin(angle)\n        new_z = z * math.cos(angle) + y * math.sin(angle)\n        new_x = x\n    elif axis == \"y\":\n        new_x = x * math.cos(angle) - z * math.sin(angle)\n        new_z = z * math.cos(angle) + x * math.sin(angle)\n        new_y = y\n    else:\n        raise ValueError(\"not a valid axis, choose one of 'x', 'y', 'z'\")\n\n    return new_x, new_y, new_z\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    print(f\"{convert_to_2d(1.0, 2.0, 3.0, 10.0, 10.0) = }\")\n    print(f\"{rotate(1.0, 2.0, 3.0, 'y', 90.0) = }\")\n"
  },
  {
    "path": "graphs/__init__.py",
    "content": ""
  },
  {
    "path": "graphs/a_star.py",
    "content": "from __future__ import annotations\n\nDIRECTIONS = [\n    [-1, 0],  # left\n    [0, -1],  # down\n    [1, 0],  # right\n    [0, 1],  # up\n]\n\n\n# function to search the path\ndef search(\n    grid: list[list[int]],\n    init: list[int],\n    goal: list[int],\n    cost: int,\n    heuristic: list[list[int]],\n) -> tuple[list[list[int]], list[list[int]]]:\n    \"\"\"\n    Search for a path on a grid avoiding obstacles.\n    >>> grid = [[0, 1, 0, 0, 0, 0],\n    ...         [0, 1, 0, 0, 0, 0],\n    ...         [0, 1, 0, 0, 0, 0],\n    ...         [0, 1, 0, 0, 1, 0],\n    ...         [0, 0, 0, 0, 1, 0]]\n    >>> init = [0, 0]\n    >>> goal = [len(grid) - 1, len(grid[0]) - 1]\n    >>> cost = 1\n    >>> heuristic = [[0] * len(grid[0]) for _ in range(len(grid))]\n    >>> heuristic = [[0 for row in range(len(grid[0]))] for col in range(len(grid))]\n    >>> for i in range(len(grid)):\n    ...     for j in range(len(grid[0])):\n    ...         heuristic[i][j] = abs(i - goal[0]) + abs(j - goal[1])\n    ...         if grid[i][j] == 1:\n    ...             heuristic[i][j] = 99\n    >>> path, action = search(grid, init, goal, cost, heuristic)\n    >>> path  # doctest: +NORMALIZE_WHITESPACE\n    [[0, 0], [1, 0], [2, 0], [3, 0], [4, 0], [4, 1], [4, 2], [4, 3], [3, 3],\n    [2, 3], [2, 4], [2, 5], [3, 5], [4, 5]]\n    >>> action  # doctest: +NORMALIZE_WHITESPACE\n    [[0, 0, 0, 0, 0, 0], [2, 0, 0, 0, 0, 0], [2, 0, 0, 0, 3, 3],\n    [2, 0, 0, 0, 0, 2], [2, 3, 3, 3, 0, 2]]\n    \"\"\"\n    closed = [\n        [0 for col in range(len(grid[0]))] for row in range(len(grid))\n    ]  # the reference grid\n    closed[init[0]][init[1]] = 1\n    action = [\n        [0 for col in range(len(grid[0]))] for row in range(len(grid))\n    ]  # the action grid\n\n    x = init[0]\n    y = init[1]\n    g = 0\n    f = g + heuristic[x][y]  # cost from starting cell to destination cell\n    cell = [[f, g, x, y]]\n\n    found = False  # flag that is set when search is complete\n    resign = False  # flag set if we can't find expand\n\n    while not found and not resign:\n        if len(cell) == 0:\n            raise ValueError(\"Algorithm is unable to find solution\")\n        else:  # to choose the least costliest action so as to move closer to the goal\n            cell.sort()\n            cell.reverse()\n            next_cell = cell.pop()\n            x = next_cell[2]\n            y = next_cell[3]\n            g = next_cell[1]\n\n            if x == goal[0] and y == goal[1]:\n                found = True\n            else:\n                for i in range(len(DIRECTIONS)):  # to try out different valid actions\n                    x2 = x + DIRECTIONS[i][0]\n                    y2 = y + DIRECTIONS[i][1]\n                    if (\n                        x2 >= 0\n                        and x2 < len(grid)\n                        and y2 >= 0\n                        and y2 < len(grid[0])\n                        and closed[x2][y2] == 0\n                        and grid[x2][y2] == 0\n                    ):\n                        g2 = g + cost\n                        f2 = g2 + heuristic[x2][y2]\n                        cell.append([f2, g2, x2, y2])\n                        closed[x2][y2] = 1\n                        action[x2][y2] = i\n    invpath = []\n    x = goal[0]\n    y = goal[1]\n    invpath.append([x, y])  # we get the reverse path from here\n    while x != init[0] or y != init[1]:\n        x2 = x - DIRECTIONS[action[x][y]][0]\n        y2 = y - DIRECTIONS[action[x][y]][1]\n        x = x2\n        y = y2\n        invpath.append([x, y])\n\n    path = []\n    for i in range(len(invpath)):\n        path.append(invpath[len(invpath) - 1 - i])\n    return path, action\n\n\nif __name__ == \"__main__\":\n    grid = [\n        [0, 1, 0, 0, 0, 0],\n        [0, 1, 0, 0, 0, 0],  # 0 are free path whereas 1's are obstacles\n        [0, 1, 0, 0, 0, 0],\n        [0, 1, 0, 0, 1, 0],\n        [0, 0, 0, 0, 1, 0],\n    ]\n\n    init = [0, 0]\n    # all coordinates are given in format [y,x]\n    goal = [len(grid) - 1, len(grid[0]) - 1]\n    cost = 1\n\n    # the cost map which pushes the path closer to the goal\n    heuristic = [[0 for row in range(len(grid[0]))] for col in range(len(grid))]\n    for i in range(len(grid)):\n        for j in range(len(grid[0])):\n            heuristic[i][j] = abs(i - goal[0]) + abs(j - goal[1])\n            if grid[i][j] == 1:\n                # added extra penalty in the heuristic map\n                heuristic[i][j] = 99\n\n    path, action = search(grid, init, goal, cost, heuristic)\n\n    print(\"ACTION MAP\")\n    for i in range(len(action)):\n        print(action[i])\n\n    for i in range(len(path)):\n        print(path[i])\n"
  },
  {
    "path": "graphs/ant_colony_optimization_algorithms.py",
    "content": "\"\"\"\nUse an ant colony optimization algorithm to solve the travelling salesman problem (TSP)\nwhich asks the following question:\n\"Given a list of cities and the distances between each pair of cities, what is the\n shortest possible route that visits each city exactly once and returns to the origin\n city?\"\n\nhttps://en.wikipedia.org/wiki/Ant_colony_optimization_algorithms\nhttps://en.wikipedia.org/wiki/Travelling_salesman_problem\n\nAuthor: Clark\n\"\"\"\n\nimport copy\nimport random\n\ncities = {\n    0: [0, 0],\n    1: [0, 5],\n    2: [3, 8],\n    3: [8, 10],\n    4: [12, 8],\n    5: [12, 4],\n    6: [8, 0],\n    7: [6, 2],\n}\n\n\ndef main(\n    cities: dict[int, list[int]],\n    ants_num: int,\n    iterations_num: int,\n    pheromone_evaporation: float,\n    alpha: float,\n    beta: float,\n    q: float,  # Pheromone system parameters Q, which is a constant\n) -> tuple[list[int], float]:\n    \"\"\"\n    Ant colony algorithm main function\n    >>> main(cities=cities, ants_num=10, iterations_num=20,\n    ...      pheromone_evaporation=0.7, alpha=1.0, beta=5.0, q=10)\n    ([0, 1, 2, 3, 4, 5, 6, 7, 0], 37.909778143828696)\n    >>> main(cities={0: [0, 0], 1: [2, 2]}, ants_num=5, iterations_num=5,\n    ...      pheromone_evaporation=0.7, alpha=1.0, beta=5.0, q=10)\n    ([0, 1, 0], 5.656854249492381)\n    >>> main(cities={0: [0, 0], 1: [2, 2], 4: [4, 4]}, ants_num=5, iterations_num=5,\n    ...      pheromone_evaporation=0.7, alpha=1.0, beta=5.0, q=10)\n    Traceback (most recent call last):\n      ...\n    IndexError: list index out of range\n    >>> main(cities={}, ants_num=5, iterations_num=5,\n    ...      pheromone_evaporation=0.7, alpha=1.0, beta=5.0, q=10)\n    Traceback (most recent call last):\n      ...\n    StopIteration\n    >>> main(cities={0: [0, 0], 1: [2, 2]}, ants_num=0, iterations_num=5,\n    ...      pheromone_evaporation=0.7, alpha=1.0, beta=5.0, q=10)\n    ([], inf)\n    >>> main(cities={0: [0, 0], 1: [2, 2]}, ants_num=5, iterations_num=0,\n    ...      pheromone_evaporation=0.7, alpha=1.0, beta=5.0, q=10)\n    ([], inf)\n    >>> main(cities={0: [0, 0], 1: [2, 2]}, ants_num=5, iterations_num=5,\n    ...      pheromone_evaporation=1, alpha=1.0, beta=5.0, q=10)\n    ([0, 1, 0], 5.656854249492381)\n    >>> main(cities={0: [0, 0], 1: [2, 2]}, ants_num=5, iterations_num=5,\n    ...      pheromone_evaporation=0, alpha=1.0, beta=5.0, q=10)\n    ([0, 1, 0], 5.656854249492381)\n    \"\"\"\n    # Initialize the pheromone matrix\n    cities_num = len(cities)\n    pheromone = [[1.0] * cities_num] * cities_num\n\n    best_path: list[int] = []\n    best_distance = float(\"inf\")\n    for _ in range(iterations_num):\n        ants_route = []\n        for _ in range(ants_num):\n            unvisited_cities = copy.deepcopy(cities)\n            current_city = {next(iter(cities.keys())): next(iter(cities.values()))}\n            del unvisited_cities[next(iter(current_city.keys()))]\n            ant_route = [next(iter(current_city.keys()))]\n            while unvisited_cities:\n                current_city, unvisited_cities = city_select(\n                    pheromone, current_city, unvisited_cities, alpha, beta\n                )\n                ant_route.append(next(iter(current_city.keys())))\n            ant_route.append(0)\n            ants_route.append(ant_route)\n\n        pheromone, best_path, best_distance = pheromone_update(\n            pheromone,\n            cities,\n            pheromone_evaporation,\n            ants_route,\n            q,\n            best_path,\n            best_distance,\n        )\n    return best_path, best_distance\n\n\ndef distance(city1: list[int], city2: list[int]) -> float:\n    \"\"\"\n    Calculate the distance between two coordinate points\n    >>> distance([0, 0], [3, 4] )\n    5.0\n    >>> distance([0, 0], [-3, 4] )\n    5.0\n    >>> distance([0, 0], [-3, -4] )\n    5.0\n    \"\"\"\n    return (((city1[0] - city2[0]) ** 2) + ((city1[1] - city2[1]) ** 2)) ** 0.5\n\n\ndef pheromone_update(\n    pheromone: list[list[float]],\n    cities: dict[int, list[int]],\n    pheromone_evaporation: float,\n    ants_route: list[list[int]],\n    q: float,  # Pheromone system parameters Q, which is a constant\n    best_path: list[int],\n    best_distance: float,\n) -> tuple[list[list[float]], list[int], float]:\n    \"\"\"\n    Update pheromones on the route and update the best route\n    >>>\n    >>> pheromone_update(pheromone=[[1.0, 1.0], [1.0, 1.0]],\n    ...                  cities={0: [0,0], 1: [2,2]}, pheromone_evaporation=0.7,\n    ...                  ants_route=[[0, 1, 0]], q=10, best_path=[],\n    ...                  best_distance=float(\"inf\"))\n    ([[0.7, 4.235533905932737], [4.235533905932737, 0.7]], [0, 1, 0], 5.656854249492381)\n    >>> pheromone_update(pheromone=[],\n    ...                  cities={0: [0,0], 1: [2,2]}, pheromone_evaporation=0.7,\n    ...                  ants_route=[[0, 1, 0]], q=10, best_path=[],\n    ...                  best_distance=float(\"inf\"))\n    Traceback (most recent call last):\n      ...\n    IndexError: list index out of range\n    >>> pheromone_update(pheromone=[[1.0, 1.0], [1.0, 1.0]],\n    ...                  cities={}, pheromone_evaporation=0.7,\n    ...                  ants_route=[[0, 1, 0]], q=10, best_path=[],\n    ...                  best_distance=float(\"inf\"))\n    Traceback (most recent call last):\n      ...\n    KeyError: 0\n    \"\"\"\n    for a in range(len(cities)):  # Update the volatilization of pheromone on all routes\n        for b in range(len(cities)):\n            pheromone[a][b] *= pheromone_evaporation\n    for ant_route in ants_route:\n        total_distance = 0.0\n        for i in range(len(ant_route) - 1):  # Calculate total distance\n            total_distance += distance(cities[ant_route[i]], cities[ant_route[i + 1]])\n        delta_pheromone = q / total_distance\n        for i in range(len(ant_route) - 1):  # Update pheromones\n            pheromone[ant_route[i]][ant_route[i + 1]] += delta_pheromone\n            pheromone[ant_route[i + 1]][ant_route[i]] = pheromone[ant_route[i]][\n                ant_route[i + 1]\n            ]\n\n        if total_distance < best_distance:\n            best_path = ant_route\n            best_distance = total_distance\n\n    return pheromone, best_path, best_distance\n\n\ndef city_select(\n    pheromone: list[list[float]],\n    current_city: dict[int, list[int]],\n    unvisited_cities: dict[int, list[int]],\n    alpha: float,\n    beta: float,\n) -> tuple[dict[int, list[int]], dict[int, list[int]]]:\n    \"\"\"\n    Choose the next city for ants\n    >>> city_select(pheromone=[[1.0, 1.0], [1.0, 1.0]], current_city={0: [0, 0]},\n    ...             unvisited_cities={1: [2, 2]}, alpha=1.0, beta=5.0)\n    ({1: [2, 2]}, {})\n    >>> city_select(pheromone=[], current_city={0: [0,0]},\n    ...             unvisited_cities={1: [2, 2]}, alpha=1.0, beta=5.0)\n    Traceback (most recent call last):\n      ...\n    IndexError: list index out of range\n    >>> city_select(pheromone=[[1.0, 1.0], [1.0, 1.0]], current_city={},\n    ...             unvisited_cities={1: [2, 2]}, alpha=1.0, beta=5.0)\n    Traceback (most recent call last):\n      ...\n    StopIteration\n    >>> city_select(pheromone=[[1.0, 1.0], [1.0, 1.0]], current_city={0: [0, 0]},\n    ...             unvisited_cities={}, alpha=1.0, beta=5.0)\n    Traceback (most recent call last):\n      ...\n    IndexError: list index out of range\n    \"\"\"\n    probabilities = []\n    for city, value in unvisited_cities.items():\n        city_distance = distance(value, next(iter(current_city.values())))\n        probability = (pheromone[city][next(iter(current_city.keys()))] ** alpha) * (\n            (1 / city_distance) ** beta\n        )\n        probabilities.append(probability)\n\n    chosen_city_i = random.choices(\n        list(unvisited_cities.keys()), weights=probabilities\n    )[0]\n    chosen_city = {chosen_city_i: unvisited_cities[chosen_city_i]}\n    del unvisited_cities[next(iter(chosen_city.keys()))]\n    return chosen_city, unvisited_cities\n\n\nif __name__ == \"__main__\":\n    best_path, best_distance = main(\n        cities=cities,\n        ants_num=10,\n        iterations_num=20,\n        pheromone_evaporation=0.7,\n        alpha=1.0,\n        beta=5.0,\n        q=10,\n    )\n\n    print(f\"{best_path = }\")\n    print(f\"{best_distance = }\")\n"
  },
  {
    "path": "graphs/articulation_points.py",
    "content": "# Finding Articulation Points in Undirected Graph\ndef compute_ap(graph):\n    n = len(graph)\n    out_edge_count = 0\n    low = [0] * n\n    visited = [False] * n\n    is_art = [False] * n\n\n    def dfs(root, at, parent, out_edge_count):\n        if parent == root:\n            out_edge_count += 1\n        visited[at] = True\n        low[at] = at\n\n        for to in graph[at]:\n            if to == parent:\n                pass\n            elif not visited[to]:\n                out_edge_count = dfs(root, to, at, out_edge_count)\n                low[at] = min(low[at], low[to])\n\n                # AP found via bridge\n                if at < low[to]:\n                    is_art[at] = True\n                # AP found via cycle\n                if at == low[to]:\n                    is_art[at] = True\n            else:\n                low[at] = min(low[at], to)\n        return out_edge_count\n\n    for i in range(n):\n        if not visited[i]:\n            out_edge_count = 0\n            out_edge_count = dfs(i, i, -1, out_edge_count)\n            is_art[i] = out_edge_count > 1\n\n    for x in range(len(is_art)):\n        if is_art[x] is True:\n            print(x)\n\n\n# Adjacency list of graph\ngraph = {\n    0: [1, 2],\n    1: [0, 2],\n    2: [0, 1, 3, 5],\n    3: [2, 4],\n    4: [3],\n    5: [2, 6, 8],\n    6: [5, 7],\n    7: [6, 8],\n    8: [5, 7],\n}\ncompute_ap(graph)\n"
  },
  {
    "path": "graphs/basic_graphs.py",
    "content": "from collections import deque\n\n\ndef _input(message):\n    return input(message).strip().split(\" \")\n\n\ndef initialize_unweighted_directed_graph(\n    node_count: int, edge_count: int\n) -> dict[int, list[int]]:\n    graph: dict[int, list[int]] = {}\n    for i in range(node_count):\n        graph[i + 1] = []\n\n    for e in range(edge_count):\n        x, y = (int(i) for i in _input(f\"Edge {e + 1}: <node1> <node2> \"))\n        graph[x].append(y)\n    return graph\n\n\ndef initialize_unweighted_undirected_graph(\n    node_count: int, edge_count: int\n) -> dict[int, list[int]]:\n    graph: dict[int, list[int]] = {}\n    for i in range(node_count):\n        graph[i + 1] = []\n\n    for e in range(edge_count):\n        x, y = (int(i) for i in _input(f\"Edge {e + 1}: <node1> <node2> \"))\n        graph[x].append(y)\n        graph[y].append(x)\n    return graph\n\n\ndef initialize_weighted_undirected_graph(\n    node_count: int, edge_count: int\n) -> dict[int, list[tuple[int, int]]]:\n    graph: dict[int, list[tuple[int, int]]] = {}\n    for i in range(node_count):\n        graph[i + 1] = []\n\n    for e in range(edge_count):\n        x, y, w = (int(i) for i in _input(f\"Edge {e + 1}: <node1> <node2> <weight> \"))\n        graph[x].append((y, w))\n        graph[y].append((x, w))\n    return graph\n\n\nif __name__ == \"__main__\":\n    n, m = (int(i) for i in _input(\"Number of nodes and edges: \"))\n\n    graph_choice = int(\n        _input(\n            \"Press 1 or 2 or 3 \\n\"\n            \"1. Unweighted directed \\n\"\n            \"2. Unweighted undirected \\n\"\n            \"3. Weighted undirected \\n\"\n        )[0]\n    )\n\n    g = {\n        1: initialize_unweighted_directed_graph,\n        2: initialize_unweighted_undirected_graph,\n        3: initialize_weighted_undirected_graph,\n    }[graph_choice](n, m)\n\n\n\"\"\"\n--------------------------------------------------------------------------------\n    Depth First Search.\n        Args :  G - Dictionary of edges\n                s - Starting Node\n        Vars :  vis - Set of visited nodes\n                S - Traversal Stack\n--------------------------------------------------------------------------------\n\"\"\"\n\n\ndef dfs(g, s):\n    \"\"\"\n    >>> dfs({1: [2, 3], 2: [4, 5], 3: [], 4: [], 5: []}, 1)\n    1\n    2\n    4\n    5\n    3\n    \"\"\"\n    vis, _s = {s}, [s]\n    print(s)\n    while _s:\n        flag = 0\n        for i in g[_s[-1]]:\n            if i not in vis:\n                _s.append(i)\n                vis.add(i)\n                flag = 1\n                print(i)\n                break\n        if not flag:\n            _s.pop()\n\n\n\"\"\"\n--------------------------------------------------------------------------------\n    Breadth First Search.\n        Args :  G - Dictionary of edges\n                s - Starting Node\n        Vars :  vis - Set of visited nodes\n                Q - Traversal Stack\n--------------------------------------------------------------------------------\n\"\"\"\n\n\ndef bfs(g, s):\n    \"\"\"\n    >>> bfs({1: [2, 3], 2: [4, 5], 3: [6, 7], 4: [], 5: [8], 6: [], 7: [], 8: []}, 1)\n    1\n    2\n    3\n    4\n    5\n    6\n    7\n    8\n    \"\"\"\n    vis, q = {s}, deque([s])\n    print(s)\n    while q:\n        u = q.popleft()\n        for v in g[u]:\n            if v not in vis:\n                vis.add(v)\n                q.append(v)\n                print(v)\n\n\n\"\"\"\n--------------------------------------------------------------------------------\n    Dijkstra's shortest path Algorithm\n        Args :  G - Dictionary of edges\n                s - Starting Node\n        Vars :  dist - Dictionary storing shortest distance from s to every other node\n                known - Set of knows nodes\n                path - Preceding node in path\n--------------------------------------------------------------------------------\n\"\"\"\n\n\ndef dijk(g, s):\n    \"\"\"\n    dijk({1: [(2, 7), (3, 9), (6, 14)],\n        2: [(1, 7), (3, 10), (4, 15)],\n        3: [(1, 9), (2, 10), (4, 11), (6, 2)],\n        4: [(2, 15), (3, 11), (5, 6)],\n        5: [(4, 6), (6, 9)],\n        6: [(1, 14), (3, 2), (5, 9)]}, 1)\n    7\n    9\n    11\n    20\n    20\n    \"\"\"\n    dist, known, path = {s: 0}, set(), {s: 0}\n    while True:\n        if len(known) == len(g) - 1:\n            break\n        mini = 100000\n        for key, value in dist:\n            if key not in known and value < mini:\n                mini = value\n                u = key\n        known.add(u)\n        for v in g[u]:\n            if v[0] not in known and dist[u] + v[1] < dist.get(v[0], 100000):\n                dist[v[0]] = dist[u] + v[1]\n                path[v[0]] = u\n    for key, value in dist.items():\n        if key != s:\n            print(value)\n\n\n\"\"\"\n--------------------------------------------------------------------------------\n    Topological Sort\n--------------------------------------------------------------------------------\n\"\"\"\n\n\ndef topo(g, ind=None, q=None):\n    if q is None:\n        q = [1]\n    if ind is None:\n        ind = [0] * (len(g) + 1)  # SInce oth Index is ignored\n        for u in g:\n            for v in g[u]:\n                ind[v] += 1\n        q = deque()\n        for i in g:\n            if ind[i] == 0:\n                q.append(i)\n    if len(q) == 0:\n        return\n    v = q.popleft()\n    print(v)\n    for w in g[v]:\n        ind[w] -= 1\n        if ind[w] == 0:\n            q.append(w)\n    topo(g, ind, q)\n\n\n\"\"\"\n--------------------------------------------------------------------------------\n    Reading an Adjacency matrix\n--------------------------------------------------------------------------------\n\"\"\"\n\n\ndef adjm():\n    r\"\"\"\n    Reading an Adjacency matrix\n\n    Parameters:\n        None\n\n    Returns:\n        tuple: A tuple containing a list of edges and number of edges\n\n    Example:\n    >>> # Simulate user input for 3 nodes\n    >>> input_data = \"4\\n0 1 0 1\\n1 0 1 0\\n0 1 0 1\\n1 0 1 0\\n\"\n    >>> import sys,io\n    >>> original_input = sys.stdin\n    >>> sys.stdin = io.StringIO(input_data)  # Redirect stdin for testing\n    >>> adjm()\n    ([(0, 1, 0, 1), (1, 0, 1, 0), (0, 1, 0, 1), (1, 0, 1, 0)], 4)\n    >>> sys.stdin = original_input  # Restore original stdin\n    \"\"\"\n    n = int(input().strip())\n    a = []\n    for _ in range(n):\n        a.append(tuple(map(int, input().strip().split())))\n    return a, n\n\n\n\"\"\"\n--------------------------------------------------------------------------------\n    Floyd Warshall's algorithm\n        Args :  G - Dictionary of edges\n                s - Starting Node\n        Vars :  dist - Dictionary storing shortest distance from s to every other node\n                known - Set of knows nodes\n                path - Preceding node in path\n\n--------------------------------------------------------------------------------\n\"\"\"\n\n\ndef floy(a_and_n):\n    (a, n) = a_and_n\n    dist = list(a)\n    path = [[0] * n for i in range(n)]\n    for k in range(n):\n        for i in range(n):\n            for j in range(n):\n                if dist[i][j] > dist[i][k] + dist[k][j]:\n                    dist[i][j] = dist[i][k] + dist[k][j]\n                    path[i][k] = k\n    print(dist)\n\n\n\"\"\"\n--------------------------------------------------------------------------------\n    Prim's MST Algorithm\n        Args :  G - Dictionary of edges\n                s - Starting Node\n        Vars :  dist - Dictionary storing shortest distance from s to nearest node\n                known - Set of knows nodes\n                path - Preceding node in path\n--------------------------------------------------------------------------------\n\"\"\"\n\n\ndef prim(g, s):\n    dist, known, path = {s: 0}, set(), {s: 0}\n    while True:\n        if len(known) == len(g) - 1:\n            break\n        mini = 100000\n        for key, value in dist.items():\n            if key not in known and value < mini:\n                mini = value\n                u = key\n        known.add(u)\n        for v in g[u]:\n            if v[0] not in known and v[1] < dist.get(v[0], 100000):\n                dist[v[0]] = v[1]\n                path[v[0]] = u\n    return dist\n\n\n\"\"\"\n--------------------------------------------------------------------------------\n    Accepting Edge list\n        Vars :  n - Number of nodes\n                m - Number of edges\n        Returns : l - Edge list\n                n - Number of Nodes\n--------------------------------------------------------------------------------\n\"\"\"\n\n\ndef edglist():\n    r\"\"\"\n    Get the edges and number of edges from the user\n\n    Parameters:\n        None\n\n    Returns:\n        tuple: A tuple containing a list of edges and number of edges\n\n    Example:\n    >>> # Simulate user input for 3 edges and 4 vertices: (1, 2), (2, 3), (3, 4)\n    >>> input_data = \"4 3\\n1 2\\n2 3\\n3 4\\n\"\n    >>> import sys,io\n    >>> original_input = sys.stdin\n    >>> sys.stdin = io.StringIO(input_data)  # Redirect stdin for testing\n    >>> edglist()\n    ([(1, 2), (2, 3), (3, 4)], 4)\n    >>> sys.stdin = original_input  # Restore original stdin\n    \"\"\"\n    n, m = tuple(map(int, input().split(\" \")))\n    edges = []\n    for _ in range(m):\n        edges.append(tuple(map(int, input().split(\" \"))))\n    return edges, n\n\n\n\"\"\"\n--------------------------------------------------------------------------------\n    Kruskal's MST Algorithm\n        Args :  E - Edge list\n                n - Number of Nodes\n        Vars :  s - Set of all nodes as unique disjoint sets (initially)\n--------------------------------------------------------------------------------\n\"\"\"\n\n\ndef krusk(e_and_n):\n    \"\"\"\n    Sort edges on the basis of distance\n    \"\"\"\n    (e, n) = e_and_n\n    e.sort(reverse=True, key=lambda x: x[2])\n    s = [{i} for i in range(1, n + 1)]\n    while True:\n        if len(s) == 1:\n            break\n        print(s)\n        x = e.pop()\n        for i in range(len(s)):\n            if x[0] in s[i]:\n                break\n        for j in range(len(s)):\n            if x[1] in s[j]:\n                if i == j:\n                    break\n                s[j].update(s[i])\n                s.pop(i)\n                break\n\n\ndef find_isolated_nodes(graph):\n    \"\"\"\n    Find the isolated node in the graph\n\n    Parameters:\n    graph (dict): A dictionary representing a graph.\n\n    Returns:\n    list: A list of isolated nodes.\n\n    Examples:\n    >>> graph1 = {1: [2, 3], 2: [1, 3], 3: [1, 2], 4: []}\n    >>> find_isolated_nodes(graph1)\n    [4]\n\n    >>> graph2 = {'A': ['B', 'C'], 'B': ['A'], 'C': ['A'], 'D': []}\n    >>> find_isolated_nodes(graph2)\n    ['D']\n\n    >>> graph3 = {'X': [], 'Y': [], 'Z': []}\n    >>> find_isolated_nodes(graph3)\n    ['X', 'Y', 'Z']\n\n    >>> graph4 = {1: [2, 3], 2: [1, 3], 3: [1, 2]}\n    >>> find_isolated_nodes(graph4)\n    []\n\n    >>> graph5 = {}\n    >>> find_isolated_nodes(graph5)\n    []\n    \"\"\"\n    isolated = []\n    for node in graph:\n        if not graph[node]:\n            isolated.append(node)\n    return isolated\n"
  },
  {
    "path": "graphs/bellman_ford.py",
    "content": "from __future__ import annotations\n\n\ndef print_distance(distance: list[float], src):\n    print(f\"Vertex\\tShortest Distance from vertex {src}\")\n    for i, d in enumerate(distance):\n        print(f\"{i}\\t\\t{d}\")\n\n\ndef check_negative_cycle(\n    graph: list[dict[str, int]], distance: list[float], edge_count: int\n):\n    for j in range(edge_count):\n        u, v, w = (graph[j][k] for k in [\"src\", \"dst\", \"weight\"])\n        if distance[u] != float(\"inf\") and distance[u] + w < distance[v]:\n            return True\n    return False\n\n\ndef bellman_ford(\n    graph: list[dict[str, int]], vertex_count: int, edge_count: int, src: int\n) -> list[float]:\n    \"\"\"\n    Returns shortest paths from a vertex src to all\n    other vertices.\n    >>> edges = [(2, 1, -10), (3, 2, 3), (0, 3, 5), (0, 1, 4)]\n    >>> g = [{\"src\": s, \"dst\": d, \"weight\": w} for s, d, w in edges]\n    >>> bellman_ford(g, 4, 4, 0)\n    [0.0, -2.0, 8.0, 5.0]\n    >>> g = [{\"src\": s, \"dst\": d, \"weight\": w} for s, d, w in edges + [(1, 3, 5)]]\n    >>> bellman_ford(g, 4, 5, 0)\n    Traceback (most recent call last):\n     ...\n    Exception: Negative cycle found\n    \"\"\"\n    distance = [float(\"inf\")] * vertex_count\n    distance[src] = 0.0\n\n    for _ in range(vertex_count - 1):\n        for j in range(edge_count):\n            u, v, w = (graph[j][k] for k in [\"src\", \"dst\", \"weight\"])\n\n            if distance[u] != float(\"inf\") and distance[u] + w < distance[v]:\n                distance[v] = distance[u] + w\n\n    negative_cycle_exists = check_negative_cycle(graph, distance, edge_count)\n    if negative_cycle_exists:\n        raise Exception(\"Negative cycle found\")\n\n    return distance\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    V = int(input(\"Enter number of vertices: \").strip())\n    E = int(input(\"Enter number of edges: \").strip())\n\n    graph: list[dict[str, int]] = [{} for _ in range(E)]\n\n    for i in range(E):\n        print(\"Edge \", i + 1)\n        src, dest, weight = (\n            int(x)\n            for x in input(\"Enter source, destination, weight: \").strip().split(\" \")\n        )\n        graph[i] = {\"src\": src, \"dst\": dest, \"weight\": weight}\n\n    source = int(input(\"\\nEnter shortest path source:\").strip())\n    shortest_distance = bellman_ford(graph, V, E, source)\n    print_distance(shortest_distance, 0)\n"
  },
  {
    "path": "graphs/bi_directional_dijkstra.py",
    "content": "\"\"\"\nBi-directional Dijkstra's algorithm.\n\nA bi-directional approach is an efficient and\nless time consuming optimization for Dijkstra's\nsearching algorithm\n\nReference: shorturl.at/exHM7\n\"\"\"\n\n# Author: Swayam Singh (https://github.com/practice404)\n\nfrom queue import PriorityQueue\nfrom typing import Any\n\nimport numpy as np\n\n\ndef pass_and_relaxation(\n    graph: dict,\n    v: str,\n    visited_forward: set,\n    visited_backward: set,\n    cst_fwd: dict,\n    cst_bwd: dict,\n    queue: PriorityQueue,\n    parent: dict,\n    shortest_distance: float,\n) -> float:\n    for nxt, d in graph[v]:\n        if nxt in visited_forward:\n            continue\n        old_cost_f = cst_fwd.get(nxt, np.inf)\n        new_cost_f = cst_fwd[v] + d\n        if new_cost_f < old_cost_f:\n            queue.put((new_cost_f, nxt))\n            cst_fwd[nxt] = new_cost_f\n            parent[nxt] = v\n        if (\n            nxt in visited_backward\n            and cst_fwd[v] + d + cst_bwd[nxt] < shortest_distance\n        ):\n            shortest_distance = cst_fwd[v] + d + cst_bwd[nxt]\n    return shortest_distance\n\n\ndef bidirectional_dij(\n    source: str, destination: str, graph_forward: dict, graph_backward: dict\n) -> int:\n    \"\"\"\n    Bi-directional Dijkstra's algorithm.\n\n    Returns:\n        shortest_path_distance (int): length of the shortest path.\n\n    Warnings:\n        If the destination is not reachable, function returns -1\n\n    >>> bidirectional_dij(\"E\", \"F\", graph_fwd, graph_bwd)\n    3\n    \"\"\"\n    shortest_path_distance = -1\n\n    visited_forward = set()\n    visited_backward = set()\n    cst_fwd = {source: 0}\n    cst_bwd = {destination: 0}\n    parent_forward = {source: None}\n    parent_backward = {destination: None}\n    queue_forward: PriorityQueue[Any] = PriorityQueue()\n    queue_backward: PriorityQueue[Any] = PriorityQueue()\n\n    shortest_distance = np.inf\n\n    queue_forward.put((0, source))\n    queue_backward.put((0, destination))\n\n    if source == destination:\n        return 0\n\n    while not queue_forward.empty() and not queue_backward.empty():\n        _, v_fwd = queue_forward.get()\n        visited_forward.add(v_fwd)\n\n        _, v_bwd = queue_backward.get()\n        visited_backward.add(v_bwd)\n\n        shortest_distance = pass_and_relaxation(\n            graph_forward,\n            v_fwd,\n            visited_forward,\n            visited_backward,\n            cst_fwd,\n            cst_bwd,\n            queue_forward,\n            parent_forward,\n            shortest_distance,\n        )\n\n        shortest_distance = pass_and_relaxation(\n            graph_backward,\n            v_bwd,\n            visited_backward,\n            visited_forward,\n            cst_bwd,\n            cst_fwd,\n            queue_backward,\n            parent_backward,\n            shortest_distance,\n        )\n\n        if cst_fwd[v_fwd] + cst_bwd[v_bwd] >= shortest_distance:\n            break\n\n    if shortest_distance != np.inf:\n        shortest_path_distance = shortest_distance\n    return shortest_path_distance\n\n\ngraph_fwd = {\n    \"B\": [[\"C\", 1]],\n    \"C\": [[\"D\", 1]],\n    \"D\": [[\"F\", 1]],\n    \"E\": [[\"B\", 1], [\"G\", 2]],\n    \"F\": [],\n    \"G\": [[\"F\", 1]],\n}\ngraph_bwd = {\n    \"B\": [[\"E\", 1]],\n    \"C\": [[\"B\", 1]],\n    \"D\": [[\"C\", 1]],\n    \"F\": [[\"D\", 1], [\"G\", 1]],\n    \"E\": [[None, np.inf]],\n    \"G\": [[\"E\", 2]],\n}\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "graphs/bidirectional_a_star.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/Bidirectional_search\n\"\"\"\n\nfrom __future__ import annotations\n\nimport time\nfrom math import sqrt\n\n# 1 for manhattan, 0 for euclidean\nHEURISTIC = 0\n\ngrid = [\n    [0, 0, 0, 0, 0, 0, 0],\n    [0, 1, 0, 0, 0, 0, 0],  # 0 are free path whereas 1's are obstacles\n    [0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 1, 0, 0, 0, 0],\n    [1, 0, 1, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 1, 0, 0],\n]\n\ndelta = [[-1, 0], [0, -1], [1, 0], [0, 1]]  # up, left, down, right\n\nTPosition = tuple[int, int]\n\n\nclass Node:\n    \"\"\"\n    >>> k = Node(0, 0, 4, 3, 0, None)\n    >>> k.calculate_heuristic()\n    5.0\n    >>> n = Node(1, 4, 3, 4, 2, None)\n    >>> n.calculate_heuristic()\n    2.0\n    >>> l = [k, n]\n    >>> n == l[0]\n    False\n    >>> l.sort()\n    >>> n == l[0]\n    True\n    \"\"\"\n\n    def __init__(\n        self,\n        pos_x: int,\n        pos_y: int,\n        goal_x: int,\n        goal_y: int,\n        g_cost: int,\n        parent: Node | None,\n    ) -> None:\n        self.pos_x = pos_x\n        self.pos_y = pos_y\n        self.pos = (pos_y, pos_x)\n        self.goal_x = goal_x\n        self.goal_y = goal_y\n        self.g_cost = g_cost\n        self.parent = parent\n        self.h_cost = self.calculate_heuristic()\n        self.f_cost = self.g_cost + self.h_cost\n\n    def calculate_heuristic(self) -> float:\n        \"\"\"\n        Heuristic for the A*\n        \"\"\"\n        dy = self.pos_x - self.goal_x\n        dx = self.pos_y - self.goal_y\n        if HEURISTIC == 1:\n            return abs(dx) + abs(dy)\n        else:\n            return sqrt(dy**2 + dx**2)\n\n    def __lt__(self, other: Node) -> bool:\n        return self.f_cost < other.f_cost\n\n\nclass AStar:\n    \"\"\"\n    >>> astar = AStar((0, 0), (len(grid) - 1, len(grid[0]) - 1))\n    >>> (astar.start.pos_y + delta[3][0], astar.start.pos_x + delta[3][1])\n    (0, 1)\n    >>> [x.pos for x in astar.get_successors(astar.start)]\n    [(1, 0), (0, 1)]\n    >>> (astar.start.pos_y + delta[2][0], astar.start.pos_x + delta[2][1])\n    (1, 0)\n    >>> astar.retrace_path(astar.start)\n    [(0, 0)]\n    >>> astar.search()  # doctest: +NORMALIZE_WHITESPACE\n    [(0, 0), (1, 0), (2, 0), (2, 1), (2, 2), (2, 3), (3, 3),\n     (4, 3), (4, 4), (5, 4), (5, 5), (6, 5), (6, 6)]\n    \"\"\"\n\n    def __init__(self, start: TPosition, goal: TPosition):\n        self.start = Node(start[1], start[0], goal[1], goal[0], 0, None)\n        self.target = Node(goal[1], goal[0], goal[1], goal[0], 99999, None)\n\n        self.open_nodes = [self.start]\n        self.closed_nodes: list[Node] = []\n\n        self.reached = False\n\n    def search(self) -> list[TPosition]:\n        while self.open_nodes:\n            # Open Nodes are sorted using __lt__\n            self.open_nodes.sort()\n            current_node = self.open_nodes.pop(0)\n\n            if current_node.pos == self.target.pos:\n                return self.retrace_path(current_node)\n\n            self.closed_nodes.append(current_node)\n            successors = self.get_successors(current_node)\n\n            for child_node in successors:\n                if child_node in self.closed_nodes:\n                    continue\n\n                if child_node not in self.open_nodes:\n                    self.open_nodes.append(child_node)\n                else:\n                    # retrieve the best current path\n                    better_node = self.open_nodes.pop(self.open_nodes.index(child_node))\n\n                    if child_node.g_cost < better_node.g_cost:\n                        self.open_nodes.append(child_node)\n                    else:\n                        self.open_nodes.append(better_node)\n\n        return [self.start.pos]\n\n    def get_successors(self, parent: Node) -> list[Node]:\n        \"\"\"\n        Returns a list of successors (both in the grid and free spaces)\n        \"\"\"\n        successors = []\n        for action in delta:\n            pos_x = parent.pos_x + action[1]\n            pos_y = parent.pos_y + action[0]\n            if not (0 <= pos_x <= len(grid[0]) - 1 and 0 <= pos_y <= len(grid) - 1):\n                continue\n\n            if grid[pos_y][pos_x] != 0:\n                continue\n\n            successors.append(\n                Node(\n                    pos_x,\n                    pos_y,\n                    self.target.pos_y,\n                    self.target.pos_x,\n                    parent.g_cost + 1,\n                    parent,\n                )\n            )\n        return successors\n\n    def retrace_path(self, node: Node | None) -> list[TPosition]:\n        \"\"\"\n        Retrace the path from parents to parents until start node\n        \"\"\"\n        current_node = node\n        path = []\n        while current_node is not None:\n            path.append((current_node.pos_y, current_node.pos_x))\n            current_node = current_node.parent\n        path.reverse()\n        return path\n\n\nclass BidirectionalAStar:\n    \"\"\"\n    >>> bd_astar = BidirectionalAStar((0, 0), (len(grid) - 1, len(grid[0]) - 1))\n    >>> bd_astar.fwd_astar.start.pos == bd_astar.bwd_astar.target.pos\n    True\n    >>> bd_astar.retrace_bidirectional_path(bd_astar.fwd_astar.start,\n    ...                                     bd_astar.bwd_astar.start)\n    [(0, 0)]\n    >>> bd_astar.search()  # doctest: +NORMALIZE_WHITESPACE\n    [(0, 0), (0, 1), (0, 2), (1, 2), (1, 3), (2, 3), (2, 4),\n     (2, 5), (3, 5), (4, 5), (5, 5), (5, 6), (6, 6)]\n    \"\"\"\n\n    def __init__(self, start: TPosition, goal: TPosition) -> None:\n        self.fwd_astar = AStar(start, goal)\n        self.bwd_astar = AStar(goal, start)\n        self.reached = False\n\n    def search(self) -> list[TPosition]:\n        while self.fwd_astar.open_nodes or self.bwd_astar.open_nodes:\n            self.fwd_astar.open_nodes.sort()\n            self.bwd_astar.open_nodes.sort()\n            current_fwd_node = self.fwd_astar.open_nodes.pop(0)\n            current_bwd_node = self.bwd_astar.open_nodes.pop(0)\n\n            if current_bwd_node.pos == current_fwd_node.pos:\n                return self.retrace_bidirectional_path(\n                    current_fwd_node, current_bwd_node\n                )\n\n            self.fwd_astar.closed_nodes.append(current_fwd_node)\n            self.bwd_astar.closed_nodes.append(current_bwd_node)\n\n            self.fwd_astar.target = current_bwd_node\n            self.bwd_astar.target = current_fwd_node\n\n            successors = {\n                self.fwd_astar: self.fwd_astar.get_successors(current_fwd_node),\n                self.bwd_astar: self.bwd_astar.get_successors(current_bwd_node),\n            }\n\n            for astar in [self.fwd_astar, self.bwd_astar]:\n                for child_node in successors[astar]:\n                    if child_node in astar.closed_nodes:\n                        continue\n\n                    if child_node not in astar.open_nodes:\n                        astar.open_nodes.append(child_node)\n                    else:\n                        # retrieve the best current path\n                        better_node = astar.open_nodes.pop(\n                            astar.open_nodes.index(child_node)\n                        )\n\n                        if child_node.g_cost < better_node.g_cost:\n                            astar.open_nodes.append(child_node)\n                        else:\n                            astar.open_nodes.append(better_node)\n\n        return [self.fwd_astar.start.pos]\n\n    def retrace_bidirectional_path(\n        self, fwd_node: Node, bwd_node: Node\n    ) -> list[TPosition]:\n        fwd_path = self.fwd_astar.retrace_path(fwd_node)\n        bwd_path = self.bwd_astar.retrace_path(bwd_node)\n        bwd_path.pop()\n        bwd_path.reverse()\n        path = fwd_path + bwd_path\n        return path\n\n\nif __name__ == \"__main__\":\n    # all coordinates are given in format [y,x]\n    init = (0, 0)\n    goal = (len(grid) - 1, len(grid[0]) - 1)\n    for elem in grid:\n        print(elem)\n\n    start_time = time.time()\n    a_star = AStar(init, goal)\n    path = a_star.search()\n    end_time = time.time() - start_time\n    print(f\"AStar execution time = {end_time:f} seconds\")\n\n    bd_start_time = time.time()\n    bidir_astar = BidirectionalAStar(init, goal)\n    bd_end_time = time.time() - bd_start_time\n    print(f\"BidirectionalAStar execution time = {bd_end_time:f} seconds\")\n"
  },
  {
    "path": "graphs/bidirectional_breadth_first_search.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/Bidirectional_search\n\"\"\"\n\nfrom __future__ import annotations\n\nimport time\n\nPath = list[tuple[int, int]]\n\ngrid = [\n    [0, 0, 0, 0, 0, 0, 0],\n    [0, 1, 0, 0, 0, 0, 0],  # 0 are free path whereas 1's are obstacles\n    [0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 1, 0, 0, 0, 0],\n    [1, 0, 1, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 1, 0, 0],\n]\n\ndelta = [[-1, 0], [0, -1], [1, 0], [0, 1]]  # up, left, down, right\n\n\nclass Node:\n    def __init__(\n        self, pos_x: int, pos_y: int, goal_x: int, goal_y: int, parent: Node | None\n    ):\n        self.pos_x = pos_x\n        self.pos_y = pos_y\n        self.pos = (pos_y, pos_x)\n        self.goal_x = goal_x\n        self.goal_y = goal_y\n        self.parent = parent\n\n\nclass BreadthFirstSearch:\n    \"\"\"\n    # Comment out slow pytests...\n    # 9.15s call     graphs/bidirectional_breadth_first_search.py:: \\\n    #                graphs.bidirectional_breadth_first_search.BreadthFirstSearch\n    # >>> bfs = BreadthFirstSearch((0, 0), (len(grid) - 1, len(grid[0]) - 1))\n    # >>> (bfs.start.pos_y + delta[3][0], bfs.start.pos_x + delta[3][1])\n    (0, 1)\n    # >>> [x.pos for x in bfs.get_successors(bfs.start)]\n    [(1, 0), (0, 1)]\n    # >>> (bfs.start.pos_y + delta[2][0], bfs.start.pos_x + delta[2][1])\n    (1, 0)\n    # >>> bfs.retrace_path(bfs.start)\n    [(0, 0)]\n    # >>> bfs.search()  # doctest: +NORMALIZE_WHITESPACE\n    [(0, 0), (1, 0), (2, 0), (3, 0), (3, 1), (4, 1),\n     (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (6, 5), (6, 6)]\n    \"\"\"\n\n    def __init__(self, start: tuple[int, int], goal: tuple[int, int]):\n        self.start = Node(start[1], start[0], goal[1], goal[0], None)\n        self.target = Node(goal[1], goal[0], goal[1], goal[0], None)\n\n        self.node_queue = [self.start]\n        self.reached = False\n\n    def search(self) -> Path | None:\n        while self.node_queue:\n            current_node = self.node_queue.pop(0)\n\n            if current_node.pos == self.target.pos:\n                self.reached = True\n                return self.retrace_path(current_node)\n\n            successors = self.get_successors(current_node)\n\n            for node in successors:\n                self.node_queue.append(node)\n\n        if not self.reached:\n            return [self.start.pos]\n        return None\n\n    def get_successors(self, parent: Node) -> list[Node]:\n        \"\"\"\n        Returns a list of successors (both in the grid and free spaces)\n        \"\"\"\n        successors = []\n        for action in delta:\n            pos_x = parent.pos_x + action[1]\n            pos_y = parent.pos_y + action[0]\n            if not (0 <= pos_x <= len(grid[0]) - 1 and 0 <= pos_y <= len(grid) - 1):\n                continue\n\n            if grid[pos_y][pos_x] != 0:\n                continue\n\n            successors.append(\n                Node(pos_x, pos_y, self.target.pos_y, self.target.pos_x, parent)\n            )\n        return successors\n\n    def retrace_path(self, node: Node | None) -> Path:\n        \"\"\"\n        Retrace the path from parents to parents until start node\n        \"\"\"\n        current_node = node\n        path = []\n        while current_node is not None:\n            path.append((current_node.pos_y, current_node.pos_x))\n            current_node = current_node.parent\n        path.reverse()\n        return path\n\n\nclass BidirectionalBreadthFirstSearch:\n    \"\"\"\n    >>> bd_bfs = BidirectionalBreadthFirstSearch((0, 0), (len(grid) - 1,\n    ...                                                   len(grid[0]) - 1))\n    >>> bd_bfs.fwd_bfs.start.pos == bd_bfs.bwd_bfs.target.pos\n    True\n    >>> bd_bfs.retrace_bidirectional_path(bd_bfs.fwd_bfs.start,\n    ...                                     bd_bfs.bwd_bfs.start)\n    [(0, 0)]\n    >>> bd_bfs.search()  # doctest: +NORMALIZE_WHITESPACE\n    [(0, 0), (0, 1), (0, 2), (1, 2), (2, 2), (2, 3),\n     (2, 4), (3, 4), (3, 5), (3, 6), (4, 6), (5, 6), (6, 6)]\n    \"\"\"\n\n    def __init__(self, start, goal):\n        self.fwd_bfs = BreadthFirstSearch(start, goal)\n        self.bwd_bfs = BreadthFirstSearch(goal, start)\n        self.reached = False\n\n    def search(self) -> Path | None:\n        while self.fwd_bfs.node_queue or self.bwd_bfs.node_queue:\n            current_fwd_node = self.fwd_bfs.node_queue.pop(0)\n            current_bwd_node = self.bwd_bfs.node_queue.pop(0)\n\n            if current_bwd_node.pos == current_fwd_node.pos:\n                self.reached = True\n                return self.retrace_bidirectional_path(\n                    current_fwd_node, current_bwd_node\n                )\n\n            self.fwd_bfs.target = current_bwd_node\n            self.bwd_bfs.target = current_fwd_node\n\n            successors = {\n                self.fwd_bfs: self.fwd_bfs.get_successors(current_fwd_node),\n                self.bwd_bfs: self.bwd_bfs.get_successors(current_bwd_node),\n            }\n\n            for bfs in [self.fwd_bfs, self.bwd_bfs]:\n                for node in successors[bfs]:\n                    bfs.node_queue.append(node)\n\n        if not self.reached:\n            return [self.fwd_bfs.start.pos]\n        return None\n\n    def retrace_bidirectional_path(self, fwd_node: Node, bwd_node: Node) -> Path:\n        fwd_path = self.fwd_bfs.retrace_path(fwd_node)\n        bwd_path = self.bwd_bfs.retrace_path(bwd_node)\n        bwd_path.pop()\n        bwd_path.reverse()\n        path = fwd_path + bwd_path\n        return path\n\n\nif __name__ == \"__main__\":\n    # all coordinates are given in format [y,x]\n    import doctest\n\n    doctest.testmod()\n    init = (0, 0)\n    goal = (len(grid) - 1, len(grid[0]) - 1)\n    for elem in grid:\n        print(elem)\n\n    start_bfs_time = time.time()\n    bfs = BreadthFirstSearch(init, goal)\n    path = bfs.search()\n    bfs_time = time.time() - start_bfs_time\n\n    print(\"Unidirectional BFS computation time : \", bfs_time)\n\n    start_bd_bfs_time = time.time()\n    bd_bfs = BidirectionalBreadthFirstSearch(init, goal)\n    bd_path = bd_bfs.search()\n    bd_bfs_time = time.time() - start_bd_bfs_time\n\n    print(\"Bidirectional BFS computation time : \", bd_bfs_time)\n"
  },
  {
    "path": "graphs/bidirectional_search.py",
    "content": "\"\"\"\nBidirectional Search Algorithm.\n\nThis algorithm searches from both the source and target nodes simultaneously,\nmeeting somewhere in the middle. This approach can significantly reduce the\nsearch space compared to a traditional one-directional search.\n\nTime Complexity: O(b^(d/2)) where b is the branching factor and d is the depth\nSpace Complexity: O(b^(d/2))\n\nhttps://en.wikipedia.org/wiki/Bidirectional_search\n\"\"\"\n\nfrom collections import deque\n\n\ndef expand_search(\n    graph: dict[int, list[int]],\n    queue: deque[int],\n    parents: dict[int, int | None],\n    opposite_direction_parents: dict[int, int | None],\n) -> int | None:\n    if not queue:\n        return None\n\n    current = queue.popleft()\n    for neighbor in graph[current]:\n        if neighbor in parents:\n            continue\n\n        parents[neighbor] = current\n        queue.append(neighbor)\n\n        # Check if this creates an intersection\n        if neighbor in opposite_direction_parents:\n            return neighbor\n\n    return None\n\n\ndef construct_path(current: int | None, parents: dict[int, int | None]) -> list[int]:\n    path: list[int] = []\n    while current is not None:\n        path.append(current)\n        current = parents[current]\n    return path\n\n\ndef bidirectional_search(\n    graph: dict[int, list[int]], start: int, goal: int\n) -> list[int] | None:\n    \"\"\"\n    Perform bidirectional search on a graph to find the shortest path.\n\n    Args:\n        graph: A dictionary where keys are nodes and values are lists of adjacent nodes\n        start: The starting node\n        goal: The target node\n\n    Returns:\n        A list representing the path from start to goal, or None if no path exists\n\n    Examples:\n        >>> graph = {\n        ...     0: [1, 2],\n        ...     1: [0, 3, 4],\n        ...     2: [0, 5, 6],\n        ...     3: [1, 7],\n        ...     4: [1, 8],\n        ...     5: [2, 9],\n        ...     6: [2, 10],\n        ...     7: [3, 11],\n        ...     8: [4, 11],\n        ...     9: [5, 11],\n        ...     10: [6, 11],\n        ...     11: [7, 8, 9, 10],\n        ... }\n        >>> bidirectional_search(graph=graph, start=0, goal=11)\n        [0, 1, 3, 7, 11]\n        >>> bidirectional_search(graph=graph, start=5, goal=5)\n        [5]\n        >>> disconnected_graph = {\n        ...     0: [1, 2],\n        ...     1: [0],\n        ...     2: [0],\n        ...     3: [4],\n        ...     4: [3],\n        ... }\n        >>> bidirectional_search(graph=disconnected_graph, start=0, goal=3) is None\n        True\n    \"\"\"\n    if start == goal:\n        return [start]\n\n    # Check if start and goal are in the graph\n    if start not in graph or goal not in graph:\n        return None\n\n    # Initialize forward and backward search dictionaries\n    # Each maps a node to its parent in the search\n    forward_parents: dict[int, int | None] = {start: None}\n    backward_parents: dict[int, int | None] = {goal: None}\n\n    # Initialize forward and backward search queues\n    forward_queue = deque([start])\n    backward_queue = deque([goal])\n\n    # Intersection node (where the two searches meet)\n    intersection = None\n\n    # Continue until both queues are empty or an intersection is found\n    while forward_queue and backward_queue and intersection is None:\n        # Expand forward search\n        intersection = expand_search(\n            graph=graph,\n            queue=forward_queue,\n            parents=forward_parents,\n            opposite_direction_parents=backward_parents,\n        )\n\n        # If no intersection found, expand backward search\n        if intersection is not None:\n            break\n\n        intersection = expand_search(\n            graph=graph,\n            queue=backward_queue,\n            parents=backward_parents,\n            opposite_direction_parents=forward_parents,\n        )\n\n    # If no intersection found, there's no path\n    if intersection is None:\n        return None\n\n    # Construct path from start to intersection\n    forward_path: list[int] = construct_path(\n        current=intersection, parents=forward_parents\n    )\n    forward_path.reverse()\n\n    # Construct path from intersection to goal\n    backward_path: list[int] = construct_path(\n        current=backward_parents[intersection], parents=backward_parents\n    )\n\n    # Return the complete path\n    return forward_path + backward_path\n\n\ndef main() -> None:\n    \"\"\"\n    Run example of bidirectional search algorithm.\n\n    Examples:\n        >>> main()  # doctest: +NORMALIZE_WHITESPACE\n        Path from 0 to 11: [0, 1, 3, 7, 11]\n        Path from 5 to 5: [5]\n        Path from 0 to 3: None\n    \"\"\"\n    # Example graph represented as an adjacency list\n    example_graph = {\n        0: [1, 2],\n        1: [0, 3, 4],\n        2: [0, 5, 6],\n        3: [1, 7],\n        4: [1, 8],\n        5: [2, 9],\n        6: [2, 10],\n        7: [3, 11],\n        8: [4, 11],\n        9: [5, 11],\n        10: [6, 11],\n        11: [7, 8, 9, 10],\n    }\n\n    # Test case 1: Path exists\n    start, goal = 0, 11\n    path = bidirectional_search(graph=example_graph, start=start, goal=goal)\n    print(f\"Path from {start} to {goal}: {path}\")\n\n    # Test case 2: Start and goal are the same\n    start, goal = 5, 5\n    path = bidirectional_search(graph=example_graph, start=start, goal=goal)\n    print(f\"Path from {start} to {goal}: {path}\")\n\n    # Test case 3: No path exists (disconnected graph)\n    disconnected_graph = {\n        0: [1, 2],\n        1: [0],\n        2: [0],\n        3: [4],\n        4: [3],\n    }\n    start, goal = 0, 3\n    path = bidirectional_search(graph=disconnected_graph, start=start, goal=goal)\n    print(f\"Path from {start} to {goal}: {path}\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "graphs/boruvka.py",
    "content": "\"\"\"Borůvka's algorithm.\n\nDetermines the minimum spanning tree (MST) of a graph using the Borůvka's algorithm.\nBorůvka's algorithm is a greedy algorithm for finding a minimum spanning tree in a\nconnected graph, or a minimum spanning forest if a graph that is not connected.\n\nThe time complexity of this algorithm is O(ELogV), where E represents the number\nof edges, while V represents the number of nodes.\nO(number_of_edges Log number_of_nodes)\n\nThe space complexity of this algorithm is O(V + E), since we have to keep a couple\nof lists whose sizes are equal to the number of nodes, as well as keep all the\nedges of a graph inside of the data structure itself.\n\nBorůvka's algorithm gives us pretty much the same result as other MST Algorithms -\nthey all find the minimum spanning tree, and the time complexity is approximately\nthe same.\n\nOne advantage that Borůvka's algorithm has compared to the alternatives is that it\ndoesn't need to presort the edges or maintain a priority queue in order to find the\nminimum spanning tree.\nEven though that doesn't help its complexity, since it still passes the edges logE\ntimes, it is a bit simpler to code.\n\nDetails: https://en.wikipedia.org/wiki/Bor%C5%AFvka%27s_algorithm\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom typing import Any\n\n\nclass Graph:\n    def __init__(self, num_of_nodes: int) -> None:\n        \"\"\"\n        Arguments:\n            num_of_nodes - the number of nodes in the graph\n        Attributes:\n            m_num_of_nodes - the number of nodes in the graph.\n            m_edges - the list of edges.\n            m_component - the dictionary which stores the index of the component which\n            a node belongs to.\n        \"\"\"\n\n        self.m_num_of_nodes = num_of_nodes\n        self.m_edges: list[list[int]] = []\n        self.m_component: dict[int, int] = {}\n\n    def add_edge(self, u_node: int, v_node: int, weight: int) -> None:\n        \"\"\"Adds an edge in the format [first, second, edge weight] to graph.\"\"\"\n\n        self.m_edges.append([u_node, v_node, weight])\n\n    def find_component(self, u_node: int) -> int:\n        \"\"\"Propagates a new component throughout a given component.\"\"\"\n\n        if self.m_component[u_node] == u_node:\n            return u_node\n        return self.find_component(self.m_component[u_node])\n\n    def set_component(self, u_node: int) -> None:\n        \"\"\"Finds the component index of a given node\"\"\"\n\n        if self.m_component[u_node] != u_node:\n            for k in self.m_component:\n                self.m_component[k] = self.find_component(k)\n\n    def union(self, component_size: list[int], u_node: int, v_node: int) -> None:\n        \"\"\"Union finds the roots of components for two nodes, compares the components\n        in terms of size, and attaches the smaller one to the larger one to form\n        single component\"\"\"\n\n        if component_size[u_node] <= component_size[v_node]:\n            self.m_component[u_node] = v_node\n            component_size[v_node] += component_size[u_node]\n            self.set_component(u_node)\n\n        elif component_size[u_node] >= component_size[v_node]:\n            self.m_component[v_node] = self.find_component(u_node)\n            component_size[u_node] += component_size[v_node]\n            self.set_component(v_node)\n\n    def boruvka(self) -> None:\n        \"\"\"Performs Borůvka's algorithm to find MST.\"\"\"\n\n        # Initialize additional lists required to algorithm.\n        component_size = []\n        mst_weight = 0\n\n        minimum_weight_edge: list[Any] = [-1] * self.m_num_of_nodes\n\n        # A list of components (initialized to all of the nodes)\n        for node in range(self.m_num_of_nodes):\n            self.m_component.update({node: node})\n            component_size.append(1)\n\n        num_of_components = self.m_num_of_nodes\n\n        while num_of_components > 1:\n            for edge in self.m_edges:\n                u, v, w = edge\n\n                u_component = self.m_component[u]\n                v_component = self.m_component[v]\n\n                if u_component != v_component:\n                    \"\"\"If the current minimum weight edge of component u doesn't\n                    exist (is -1), or if it's greater than the edge we're\n                    observing right now, we will assign the value of the edge\n                    we're observing to it.\n\n                    If the current minimum weight edge of component v doesn't\n                    exist (is -1), or if it's greater than the edge we're\n                    observing right now, we will assign the value of the edge\n                    we're observing to it\"\"\"\n\n                    for component in (u_component, v_component):\n                        if (\n                            minimum_weight_edge[component] == -1\n                            or minimum_weight_edge[component][2] > w\n                        ):\n                            minimum_weight_edge[component] = [u, v, w]\n\n            for edge in minimum_weight_edge:\n                if isinstance(edge, list):\n                    u, v, w = edge\n\n                    u_component = self.m_component[u]\n                    v_component = self.m_component[v]\n\n                    if u_component != v_component:\n                        mst_weight += w\n                        self.union(component_size, u_component, v_component)\n                        print(f\"Added edge [{u} - {v}]\\nAdded weight: {w}\\n\")\n                        num_of_components -= 1\n\n            minimum_weight_edge = [-1] * self.m_num_of_nodes\n        print(f\"The total weight of the minimal spanning tree is: {mst_weight}\")\n\n\ndef test_vector() -> None:\n    \"\"\"\n    >>> g = Graph(8)\n    >>> for u_v_w in ((0, 1, 10), (0, 2, 6), (0, 3, 5), (1, 3, 15), (2, 3, 4),\n    ...    (3, 4, 8), (4, 5, 10), (4, 6, 6), (4, 7, 5), (5, 7, 15), (6, 7, 4)):\n    ...        g.add_edge(*u_v_w)\n    >>> g.boruvka()\n    Added edge [0 - 3]\n    Added weight: 5\n    <BLANKLINE>\n    Added edge [0 - 1]\n    Added weight: 10\n    <BLANKLINE>\n    Added edge [2 - 3]\n    Added weight: 4\n    <BLANKLINE>\n    Added edge [4 - 7]\n    Added weight: 5\n    <BLANKLINE>\n    Added edge [4 - 5]\n    Added weight: 10\n    <BLANKLINE>\n    Added edge [6 - 7]\n    Added weight: 4\n    <BLANKLINE>\n    Added edge [3 - 4]\n    Added weight: 8\n    <BLANKLINE>\n    The total weight of the minimal spanning tree is: 46\n    \"\"\"\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "graphs/breadth_first_search.py",
    "content": "#!/usr/bin/python\n\n\"\"\"Author: OMKAR PATHAK\"\"\"\n\nfrom __future__ import annotations\n\nfrom queue import Queue\n\n\nclass Graph:\n    def __init__(self) -> None:\n        self.vertices: dict[int, list[int]] = {}\n\n    def print_graph(self) -> None:\n        \"\"\"\n        prints adjacency list representation of graaph\n        >>> g = Graph()\n        >>> g.print_graph()\n        >>> g.add_edge(0, 1)\n        >>> g.print_graph()\n        0  :  1\n        \"\"\"\n        for i in self.vertices:\n            print(i, \" : \", \" -> \".join([str(j) for j in self.vertices[i]]))\n\n    def add_edge(self, from_vertex: int, to_vertex: int) -> None:\n        \"\"\"\n        adding the edge between two vertices\n        >>> g = Graph()\n        >>> g.print_graph()\n        >>> g.add_edge(0, 1)\n        >>> g.print_graph()\n        0  :  1\n        \"\"\"\n        if from_vertex in self.vertices:\n            self.vertices[from_vertex].append(to_vertex)\n        else:\n            self.vertices[from_vertex] = [to_vertex]\n\n    def bfs(self, start_vertex: int) -> set[int]:\n        \"\"\"\n        >>> g = Graph()\n        >>> g.add_edge(0, 1)\n        >>> g.add_edge(0, 1)\n        >>> g.add_edge(0, 2)\n        >>> g.add_edge(1, 2)\n        >>> g.add_edge(2, 0)\n        >>> g.add_edge(2, 3)\n        >>> g.add_edge(3, 3)\n        >>> sorted(g.bfs(2))\n        [0, 1, 2, 3]\n        \"\"\"\n        # initialize set for storing already visited vertices\n        visited = set()\n\n        # create a first in first out queue to store all the vertices for BFS\n        queue: Queue = Queue()\n\n        # mark the source node as visited and enqueue it\n        visited.add(start_vertex)\n        queue.put(start_vertex)\n\n        while not queue.empty():\n            vertex = queue.get()\n\n            # loop through all adjacent vertex and enqueue it if not yet visited\n            for adjacent_vertex in self.vertices[vertex]:\n                if adjacent_vertex not in visited:\n                    queue.put(adjacent_vertex)\n                    visited.add(adjacent_vertex)\n        return visited\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod(verbose=True)\n\n    g = Graph()\n    g.add_edge(0, 1)\n    g.add_edge(0, 2)\n    g.add_edge(1, 2)\n    g.add_edge(2, 0)\n    g.add_edge(2, 3)\n    g.add_edge(3, 3)\n\n    g.print_graph()\n    # 0  :  1 -> 2\n    # 1  :  2\n    # 2  :  0 -> 3\n    # 3  :  3\n\n    assert sorted(g.bfs(2)) == [0, 1, 2, 3]\n"
  },
  {
    "path": "graphs/breadth_first_search_2.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/Breadth-first_search\npseudo-code:\nbreadth_first_search(graph G, start vertex s):\n// all nodes initially unexplored\nmark s as explored\nlet Q = queue data structure, initialized with s\nwhile Q is non-empty:\n    remove the first node of Q, call it v\n    for each edge(v, w):  // for w in graph[v]\n        if w unexplored:\n            mark w as explored\n            add w to Q (at the end)\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections import deque\nfrom queue import Queue\nfrom timeit import timeit\n\nG = {\n    \"A\": [\"B\", \"C\"],\n    \"B\": [\"A\", \"D\", \"E\"],\n    \"C\": [\"A\", \"F\"],\n    \"D\": [\"B\"],\n    \"E\": [\"B\", \"F\"],\n    \"F\": [\"C\", \"E\"],\n}\n\n\ndef breadth_first_search(graph: dict, start: str) -> list[str]:\n    \"\"\"\n    Implementation of breadth first search using queue.Queue.\n\n    >>> ''.join(breadth_first_search(G, 'A'))\n    'ABCDEF'\n    \"\"\"\n    explored = {start}\n    result = [start]\n    queue: Queue = Queue()\n    queue.put(start)\n    while not queue.empty():\n        v = queue.get()\n        for w in graph[v]:\n            if w not in explored:\n                explored.add(w)\n                result.append(w)\n                queue.put(w)\n    return result\n\n\ndef breadth_first_search_with_deque(graph: dict, start: str) -> list[str]:\n    \"\"\"\n    Implementation of breadth first search using collection.queue.\n\n    >>> ''.join(breadth_first_search_with_deque(G, 'A'))\n    'ABCDEF'\n    \"\"\"\n    visited = {start}\n    result = [start]\n    queue = deque([start])\n    while queue:\n        v = queue.popleft()\n        for child in graph[v]:\n            if child not in visited:\n                visited.add(child)\n                result.append(child)\n                queue.append(child)\n    return result\n\n\ndef benchmark_function(name: str) -> None:\n    setup = f\"from __main__ import G, {name}\"\n    number = 10000\n    res = timeit(f\"{name}(G, 'A')\", setup=setup, number=number)\n    print(f\"{name:<35} finished {number} runs in {res:.5f} seconds\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    benchmark_function(\"breadth_first_search\")\n    benchmark_function(\"breadth_first_search_with_deque\")\n    # breadth_first_search                finished 10000 runs in 0.20999 seconds\n    # breadth_first_search_with_deque     finished 10000 runs in 0.01421 seconds\n"
  },
  {
    "path": "graphs/breadth_first_search_shortest_path.py",
    "content": "\"\"\"Breath First Search (BFS) can be used when finding the shortest path\nfrom a given source node to a target node in an unweighted graph.\n\"\"\"\n\nfrom __future__ import annotations\n\ngraph = {\n    \"A\": [\"B\", \"C\", \"E\"],\n    \"B\": [\"A\", \"D\", \"E\"],\n    \"C\": [\"A\", \"F\", \"G\"],\n    \"D\": [\"B\"],\n    \"E\": [\"A\", \"B\", \"D\"],\n    \"F\": [\"C\"],\n    \"G\": [\"C\"],\n}\n\n\nclass Graph:\n    def __init__(self, graph: dict[str, list[str]], source_vertex: str) -> None:\n        \"\"\"\n        Graph is implemented as dictionary of adjacency lists. Also,\n        Source vertex have to be defined upon initialization.\n        \"\"\"\n        self.graph = graph\n        # mapping node to its parent in resulting breadth first tree\n        self.parent: dict[str, str | None] = {}\n        self.source_vertex = source_vertex\n\n    def breath_first_search(self) -> None:\n        \"\"\"\n        This function is a helper for running breath first search on this graph.\n        >>> g = Graph(graph, \"G\")\n        >>> g.breath_first_search()\n        >>> g.parent\n        {'G': None, 'C': 'G', 'A': 'C', 'F': 'C', 'B': 'A', 'E': 'A', 'D': 'B'}\n        \"\"\"\n        visited = {self.source_vertex}\n        self.parent[self.source_vertex] = None\n        queue = [self.source_vertex]  # first in first out queue\n\n        while queue:\n            vertex = queue.pop(0)\n            for adjacent_vertex in self.graph[vertex]:\n                if adjacent_vertex not in visited:\n                    visited.add(adjacent_vertex)\n                    self.parent[adjacent_vertex] = vertex\n                    queue.append(adjacent_vertex)\n\n    def shortest_path(self, target_vertex: str) -> str:\n        \"\"\"\n        This shortest path function returns a string, describing the result:\n        1.) No path is found. The string is a human readable message to indicate this.\n        2.) The shortest path is found. The string is in the form\n            `v1(->v2->v3->...->vn)`, where v1 is the source vertex and vn is the target\n            vertex, if it exists separately.\n\n        >>> g = Graph(graph, \"G\")\n        >>> g.breath_first_search()\n\n        Case 1 - No path is found.\n        >>> g.shortest_path(\"Foo\")\n        Traceback (most recent call last):\n            ...\n        ValueError: No path from vertex: G to vertex: Foo\n\n        Case 2 - The path is found.\n        >>> g.shortest_path(\"D\")\n        'G->C->A->B->D'\n        >>> g.shortest_path(\"G\")\n        'G'\n        \"\"\"\n        if target_vertex == self.source_vertex:\n            return self.source_vertex\n\n        target_vertex_parent = self.parent.get(target_vertex)\n        if target_vertex_parent is None:\n            msg = (\n                f\"No path from vertex: {self.source_vertex} to vertex: {target_vertex}\"\n            )\n            raise ValueError(msg)\n\n        return self.shortest_path(target_vertex_parent) + f\"->{target_vertex}\"\n\n\nif __name__ == \"__main__\":\n    g = Graph(graph, \"G\")\n    g.breath_first_search()\n    print(g.shortest_path(\"D\"))\n    print(g.shortest_path(\"G\"))\n    print(g.shortest_path(\"Foo\"))\n"
  },
  {
    "path": "graphs/breadth_first_search_shortest_path_2.py",
    "content": "\"\"\"Breadth-first search the shortest path implementations.\ndoctest:\npython -m doctest -v breadth_first_search_shortest_path_2.py\nManual test:\npython breadth_first_search_shortest_path_2.py\n\"\"\"\n\nfrom collections import deque\n\ndemo_graph = {\n    \"A\": [\"B\", \"C\", \"E\"],\n    \"B\": [\"A\", \"D\", \"E\"],\n    \"C\": [\"A\", \"F\", \"G\"],\n    \"D\": [\"B\"],\n    \"E\": [\"A\", \"B\", \"D\"],\n    \"F\": [\"C\"],\n    \"G\": [\"C\"],\n}\n\n\ndef bfs_shortest_path(graph: dict, start, goal) -> list[str]:\n    \"\"\"Find the shortest path between `start` and `goal` nodes.\n    Args:\n        graph (dict): node/list of neighboring nodes key/value pairs.\n        start: start node.\n        goal: target node.\n    Returns:\n        Shortest path between `start` and `goal` nodes as a string of nodes.\n        'Not found' string if no path found.\n    Example:\n        >>> bfs_shortest_path(demo_graph, \"G\", \"D\")\n        ['G', 'C', 'A', 'B', 'D']\n        >>> bfs_shortest_path(demo_graph, \"G\", \"G\")\n        ['G']\n        >>> bfs_shortest_path(demo_graph, \"G\", \"Unknown\")\n        []\n    \"\"\"\n    # keep track of explored nodes\n    explored = set()\n    # keep track of all the paths to be checked\n    queue = deque([[start]])\n\n    # return path if start is goal\n    if start == goal:\n        return [start]\n\n    # keeps looping until all possible paths have been checked\n    while queue:\n        # pop the first path from the queue\n        path = queue.popleft()\n        # get the last node from the path\n        node = path[-1]\n        if node not in explored:\n            neighbours = graph[node]\n            # go through all neighbour nodes, construct a new path and\n            # push it into the queue\n            for neighbour in neighbours:\n                new_path = list(path)\n                new_path.append(neighbour)\n                queue.append(new_path)\n                # return path if neighbour is goal\n                if neighbour == goal:\n                    return new_path\n\n            # mark node as explored\n            explored.add(node)\n\n    # in case there's no path between the 2 nodes\n    return []\n\n\ndef bfs_shortest_path_distance(graph: dict, start, target) -> int:\n    \"\"\"Find the shortest path distance between `start` and `target` nodes.\n    Args:\n        graph: node/list of neighboring nodes key/value pairs.\n        start: node to start search from.\n        target: node to search for.\n    Returns:\n        Number of edges in the shortest path between `start` and `target` nodes.\n        -1 if no path exists.\n    Example:\n        >>> bfs_shortest_path_distance(demo_graph, \"G\", \"D\")\n        4\n        >>> bfs_shortest_path_distance(demo_graph, \"A\", \"A\")\n        0\n        >>> bfs_shortest_path_distance(demo_graph, \"A\", \"Unknown\")\n        -1\n    \"\"\"\n    if not graph or start not in graph or target not in graph:\n        return -1\n    if start == target:\n        return 0\n    queue = deque([start])\n    visited = set(start)\n    # Keep tab on distances from `start` node.\n    dist = {start: 0, target: -1}\n    while queue:\n        node = queue.popleft()\n        if node == target:\n            dist[target] = (\n                dist[node] if dist[target] == -1 else min(dist[target], dist[node])\n            )\n        for adjacent in graph[node]:\n            if adjacent not in visited:\n                visited.add(adjacent)\n                queue.append(adjacent)\n                dist[adjacent] = dist[node] + 1\n    return dist[target]\n\n\nif __name__ == \"__main__\":\n    print(bfs_shortest_path(demo_graph, \"G\", \"D\"))  # returns ['G', 'C', 'A', 'B', 'D']\n    print(bfs_shortest_path_distance(demo_graph, \"G\", \"D\"))  # returns 4\n"
  },
  {
    "path": "graphs/breadth_first_search_zero_one_shortest_path.py",
    "content": "\"\"\"\nFinding the shortest path in 0-1-graph in O(E + V) which is faster than dijkstra.\n0-1-graph is the weighted graph with the weights equal to 0 or 1.\nLink: https://codeforces.com/blog/entry/22276\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections import deque\nfrom collections.abc import Iterator\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass Edge:\n    \"\"\"Weighted directed graph edge.\"\"\"\n\n    destination_vertex: int\n    weight: int\n\n\nclass AdjacencyList:\n    \"\"\"Graph adjacency list.\"\"\"\n\n    def __init__(self, size: int):\n        self._graph: list[list[Edge]] = [[] for _ in range(size)]\n        self._size = size\n\n    def __getitem__(self, vertex: int) -> Iterator[Edge]:\n        \"\"\"Get all the vertices adjacent to the given one.\"\"\"\n        return iter(self._graph[vertex])\n\n    @property\n    def size(self):\n        return self._size\n\n    def add_edge(self, from_vertex: int, to_vertex: int, weight: int):\n        \"\"\"\n        >>> g = AdjacencyList(2)\n        >>> g.add_edge(0, 1, 0)\n        >>> g.add_edge(1, 0, 1)\n        >>> list(g[0])\n        [Edge(destination_vertex=1, weight=0)]\n        >>> list(g[1])\n        [Edge(destination_vertex=0, weight=1)]\n        >>> g.add_edge(0, 1, 2)\n        Traceback (most recent call last):\n            ...\n        ValueError: Edge weight must be either 0 or 1.\n        >>> g.add_edge(0, 2, 1)\n        Traceback (most recent call last):\n            ...\n        ValueError: Vertex indexes must be in [0; size).\n        \"\"\"\n        if weight not in (0, 1):\n            raise ValueError(\"Edge weight must be either 0 or 1.\")\n\n        if to_vertex < 0 or to_vertex >= self.size:\n            raise ValueError(\"Vertex indexes must be in [0; size).\")\n\n        self._graph[from_vertex].append(Edge(to_vertex, weight))\n\n    def get_shortest_path(self, start_vertex: int, finish_vertex: int) -> int | None:\n        \"\"\"\n        Return the shortest distance from start_vertex to finish_vertex in 0-1-graph.\n              1                  1         1\n         0--------->3        6--------7>------->8\n         |          ^        ^        ^         |1\n         |          |        |        |0        v\n        0|          |0      1|        9-------->10\n         |          |        |        ^    1\n         v          |        |        |0\n         1--------->2<-------4------->5\n              0         1        1\n        >>> g = AdjacencyList(11)\n        >>> g.add_edge(0, 1, 0)\n        >>> g.add_edge(0, 3, 1)\n        >>> g.add_edge(1, 2, 0)\n        >>> g.add_edge(2, 3, 0)\n        >>> g.add_edge(4, 2, 1)\n        >>> g.add_edge(4, 5, 1)\n        >>> g.add_edge(4, 6, 1)\n        >>> g.add_edge(5, 9, 0)\n        >>> g.add_edge(6, 7, 1)\n        >>> g.add_edge(7, 8, 1)\n        >>> g.add_edge(8, 10, 1)\n        >>> g.add_edge(9, 7, 0)\n        >>> g.add_edge(9, 10, 1)\n        >>> g.add_edge(1, 2, 2)\n        Traceback (most recent call last):\n            ...\n        ValueError: Edge weight must be either 0 or 1.\n        >>> g.get_shortest_path(0, 3)\n        0\n        >>> g.get_shortest_path(0, 4)\n        Traceback (most recent call last):\n            ...\n        ValueError: No path from start_vertex to finish_vertex.\n        >>> g.get_shortest_path(4, 10)\n        2\n        >>> g.get_shortest_path(4, 8)\n        2\n        >>> g.get_shortest_path(0, 1)\n        0\n        >>> g.get_shortest_path(1, 0)\n        Traceback (most recent call last):\n            ...\n        ValueError: No path from start_vertex to finish_vertex.\n        \"\"\"\n        queue = deque([start_vertex])\n        distances: list[int | None] = [None] * self.size\n        distances[start_vertex] = 0\n\n        while queue:\n            current_vertex = queue.popleft()\n            current_distance = distances[current_vertex]\n            if current_distance is None:\n                continue\n\n            for edge in self[current_vertex]:\n                new_distance = current_distance + edge.weight\n                dest_vertex_distance = distances[edge.destination_vertex]\n                if (\n                    isinstance(dest_vertex_distance, int)\n                    and new_distance >= dest_vertex_distance\n                ):\n                    continue\n                distances[edge.destination_vertex] = new_distance\n                if edge.weight == 0:\n                    queue.appendleft(edge.destination_vertex)\n                else:\n                    queue.append(edge.destination_vertex)\n\n        if distances[finish_vertex] is None:\n            raise ValueError(\"No path from start_vertex to finish_vertex.\")\n\n        return distances[finish_vertex]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "graphs/check_bipatrite.py",
    "content": "from collections import defaultdict, deque\n\n\ndef is_bipartite_dfs(graph: dict[int, list[int]]) -> bool:\n    \"\"\"\n    Check if a graph is bipartite using depth-first search (DFS).\n\n    Args:\n        `graph`: Adjacency list representing the graph.\n\n    Returns:\n        ``True`` if bipartite, ``False`` otherwise.\n\n    Checks if the graph can be divided into two sets of vertices, such that no two\n    vertices within the same set are connected by an edge.\n\n    Examples:\n\n    >>> is_bipartite_dfs({0: [1, 2], 1: [0, 3], 2: [0, 4]})\n    True\n    >>> is_bipartite_dfs({0: [1, 2], 1: [0, 3], 2: [0, 1]})\n    False\n    >>> is_bipartite_dfs({})\n    True\n    >>> is_bipartite_dfs({0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2]})\n    True\n    >>> is_bipartite_dfs({0: [1, 2, 3], 1: [0, 2], 2: [0, 1, 3], 3: [0, 2]})\n    False\n    >>> is_bipartite_dfs({0: [4], 1: [], 2: [4], 3: [4], 4: [0, 2, 3]})\n    True\n    >>> is_bipartite_dfs({0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 4: [0]})\n    False\n    >>> is_bipartite_dfs({7: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 4: [0]})\n    False\n\n    >>> # FIXME: This test should fails with KeyError: 4.\n    >>> is_bipartite_dfs({0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 9: [0]})\n    False\n    >>> is_bipartite_dfs({0: [-1, 3], 1: [0, -2]})\n    False\n    >>> is_bipartite_dfs({-1: [0, 2], 0: [-1, 1], 1: [0, 2], 2: [-1, 1]})\n    True\n    >>> is_bipartite_dfs({0.9: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2]})\n    True\n\n    >>> # FIXME: This test should fails with\n    >>> # TypeError: list indices must be integers or...\n    >>> is_bipartite_dfs({0: [1.0, 3.0], 1.0: [0, 2.0], 2.0: [1.0, 3.0], 3.0: [0, 2.0]})\n    True\n    >>> is_bipartite_dfs({\"a\": [1, 3], \"b\": [0, 2], \"c\": [1, 3], \"d\": [0, 2]})\n    True\n    >>> is_bipartite_dfs({0: [\"b\", \"d\"], 1: [\"a\", \"c\"], 2: [\"b\", \"d\"], 3: [\"a\", \"c\"]})\n    True\n    \"\"\"\n\n    def depth_first_search(node: int, color: int) -> bool:\n        \"\"\"\n        Perform Depth-First Search (DFS) on the graph starting from a node.\n\n        Args:\n            node: The current node being visited.\n            color: The color assigned to the current node.\n\n        Returns:\n            True if the graph is bipartite starting from the current node,\n            False otherwise.\n        \"\"\"\n        if visited[node] == -1:\n            visited[node] = color\n            if node not in graph:\n                return True\n            for neighbor in graph[node]:\n                if not depth_first_search(neighbor, 1 - color):\n                    return False\n        return visited[node] == color\n\n    visited: defaultdict[int, int] = defaultdict(lambda: -1)\n    for node in graph:\n        if visited[node] == -1 and not depth_first_search(node, 0):\n            return False\n    return True\n\n\ndef is_bipartite_bfs(graph: dict[int, list[int]]) -> bool:\n    \"\"\"\n    Check if a graph is bipartite using a breadth-first search (BFS).\n\n    Args:\n        `graph`: Adjacency list representing the graph.\n\n    Returns:\n        ``True`` if bipartite, ``False`` otherwise.\n\n    Check if the graph can be divided into two sets of vertices, such that no two\n    vertices within the same set are connected by an edge.\n\n    Examples:\n\n    >>> is_bipartite_bfs({0: [1, 2], 1: [0, 3], 2: [0, 4]})\n    True\n    >>> is_bipartite_bfs({0: [1, 2], 1: [0, 2], 2: [0, 1]})\n    False\n    >>> is_bipartite_bfs({})\n    True\n    >>> is_bipartite_bfs({0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2]})\n    True\n    >>> is_bipartite_bfs({0: [1, 2, 3], 1: [0, 2], 2: [0, 1, 3], 3: [0, 2]})\n    False\n    >>> is_bipartite_bfs({0: [4], 1: [], 2: [4], 3: [4], 4: [0, 2, 3]})\n    True\n    >>> is_bipartite_bfs({0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 4: [0]})\n    False\n    >>> is_bipartite_bfs({7: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 4: [0]})\n    False\n\n    >>> # FIXME: This test should fails with KeyError: 4.\n    >>> is_bipartite_bfs({0: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2], 9: [0]})\n    False\n    >>> is_bipartite_bfs({0: [-1, 3], 1: [0, -2]})\n    False\n    >>> is_bipartite_bfs({-1: [0, 2], 0: [-1, 1], 1: [0, 2], 2: [-1, 1]})\n    True\n    >>> is_bipartite_bfs({0.9: [1, 3], 1: [0, 2], 2: [1, 3], 3: [0, 2]})\n    True\n\n    >>> # FIXME: This test should fails with\n    >>> # TypeError: list indices must be integers or...\n    >>> is_bipartite_bfs({0: [1.0, 3.0], 1.0: [0, 2.0], 2.0: [1.0, 3.0], 3.0: [0, 2.0]})\n    True\n    >>> is_bipartite_bfs({\"a\": [1, 3], \"b\": [0, 2], \"c\": [1, 3], \"d\": [0, 2]})\n    True\n    >>> is_bipartite_bfs({0: [\"b\", \"d\"], 1: [\"a\", \"c\"], 2: [\"b\", \"d\"], 3: [\"a\", \"c\"]})\n    True\n    \"\"\"\n    visited: defaultdict[int, int] = defaultdict(lambda: -1)\n    for node in graph:\n        if visited[node] == -1:\n            queue: deque[int] = deque()\n            queue.append(node)\n            visited[node] = 0\n            while queue:\n                curr_node = queue.popleft()\n                if curr_node not in graph:\n                    continue\n                for neighbor in graph[curr_node]:\n                    if visited[neighbor] == -1:\n                        visited[neighbor] = 1 - visited[curr_node]\n                        queue.append(neighbor)\n                    elif visited[neighbor] == visited[curr_node]:\n                        return False\n    return True\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    result = doctest.testmod()\n    if result.failed:\n        print(f\"{result.failed} test(s) failed.\")\n    else:\n        print(\"All tests passed!\")\n"
  },
  {
    "path": "graphs/check_cycle.py",
    "content": "\"\"\"\nProgram to check if a cycle is present in a given graph\n\"\"\"\n\n\ndef check_cycle(graph: dict) -> bool:\n    \"\"\"\n    Returns True if graph is cyclic else False\n    >>> check_cycle(graph={0:[], 1:[0, 3], 2:[0, 4], 3:[5], 4:[5], 5:[]})\n    False\n    >>> check_cycle(graph={0:[1, 2], 1:[2], 2:[0, 3], 3:[3]})\n    True\n    \"\"\"\n    # Keep track of visited nodes\n    visited: set[int] = set()\n    # To detect a back edge, keep track of vertices currently in the recursion stack\n    rec_stk: set[int] = set()\n    return any(\n        node not in visited and depth_first_search(graph, node, visited, rec_stk)\n        for node in graph\n    )\n\n\ndef depth_first_search(graph: dict, vertex: int, visited: set, rec_stk: set) -> bool:\n    \"\"\"\n    Recur for all neighbours.\n    If any neighbour is visited and in rec_stk then graph is cyclic.\n    >>> graph = {0:[], 1:[0, 3], 2:[0, 4], 3:[5], 4:[5], 5:[]}\n    >>> vertex, visited, rec_stk = 0, set(), set()\n    >>> depth_first_search(graph, vertex, visited, rec_stk)\n    False\n    \"\"\"\n    # Mark current node as visited and add to recursion stack\n    visited.add(vertex)\n    rec_stk.add(vertex)\n\n    for node in graph[vertex]:\n        if node not in visited:\n            if depth_first_search(graph, node, visited, rec_stk):\n                return True\n        elif node in rec_stk:\n            return True\n\n    # The node needs to be removed from recursion stack before function ends\n    rec_stk.remove(vertex)\n    return False\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "graphs/connected_components.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/Component_(graph_theory)\n\nFinding connected components in graph\n\n\"\"\"\n\ntest_graph_1 = {0: [1, 2], 1: [0, 3], 2: [0], 3: [1], 4: [5, 6], 5: [4, 6], 6: [4, 5]}\n\ntest_graph_2 = {0: [1, 2, 3], 1: [0, 3], 2: [0], 3: [0, 1], 4: [], 5: []}\n\n\ndef dfs(graph: dict, vert: int, visited: list) -> list:\n    \"\"\"\n    Use depth first search to find all vertices\n    being in the same component as initial vertex\n    >>> dfs(test_graph_1, 0, 5 * [False])\n    [0, 1, 3, 2]\n    >>> dfs(test_graph_2, 0, 6 * [False])\n    [0, 1, 3, 2]\n    \"\"\"\n\n    visited[vert] = True\n    connected_verts = []\n\n    for neighbour in graph[vert]:\n        if not visited[neighbour]:\n            connected_verts += dfs(graph, neighbour, visited)\n\n    return [vert, *connected_verts]\n\n\ndef connected_components(graph: dict) -> list:\n    \"\"\"\n    This function takes graph as a parameter\n    and then returns the list of connected components\n    >>> connected_components(test_graph_1)\n    [[0, 1, 3, 2], [4, 5, 6]]\n    >>> connected_components(test_graph_2)\n    [[0, 1, 3, 2], [4], [5]]\n    \"\"\"\n\n    graph_size = len(graph)\n    visited = graph_size * [False]\n    components_list = []\n\n    for i in range(graph_size):\n        if not visited[i]:\n            i_connected = dfs(graph, i, visited)\n            components_list.append(i_connected)\n\n    return components_list\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "graphs/deep_clone_graph.py",
    "content": "\"\"\"\nLeetCode 133. Clone Graph\nhttps://leetcode.com/problems/clone-graph/\n\nGiven a reference of a node in a connected undirected graph.\n\nReturn a deep copy (clone) of the graph.\n\nEach node in the graph contains a value (int) and a list (List[Node]) of its\nneighbors.\n\"\"\"\n\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass Node:\n    value: int = 0\n    neighbors: list[\"Node\"] | None = None\n\n    def __post_init__(self) -> None:\n        \"\"\"\n        >>> Node(3).neighbors\n        []\n        \"\"\"\n        self.neighbors = self.neighbors or []\n\n    def __hash__(self) -> int:\n        \"\"\"\n        >>> hash(Node(3)) != 0\n        True\n        \"\"\"\n        return id(self)\n\n\ndef clone_graph(node: Node | None) -> Node | None:\n    \"\"\"\n    This function returns a clone of a connected undirected graph.\n    >>> clone_graph(Node(1))\n    Node(value=1, neighbors=[])\n    >>> clone_graph(Node(1, [Node(2)]))\n    Node(value=1, neighbors=[Node(value=2, neighbors=[])])\n    >>> clone_graph(None) is None\n    True\n    \"\"\"\n    if not node:\n        return None\n\n    originals_to_clones = {}  # map nodes to clones\n\n    stack = [node]\n\n    while stack:\n        original = stack.pop()\n\n        if original in originals_to_clones:\n            continue\n\n        originals_to_clones[original] = Node(original.value)\n\n        stack.extend(original.neighbors or [])\n\n    for original, clone in originals_to_clones.items():\n        for neighbor in original.neighbors or []:\n            cloned_neighbor = originals_to_clones[neighbor]\n\n            if not clone.neighbors:\n                clone.neighbors = []\n\n            clone.neighbors.append(cloned_neighbor)\n\n    return originals_to_clones[node]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "graphs/depth_first_search.py",
    "content": "\"\"\"Non recursive implementation of a DFS algorithm.\"\"\"\n\nfrom __future__ import annotations\n\n\ndef depth_first_search(graph: dict, start: str) -> set[str]:\n    \"\"\"Depth First Search on Graph\n    :param graph: directed graph in dictionary format\n    :param start: starting vertex as a string\n    :returns: the trace of the search\n    >>> input_G = { \"A\": [\"B\", \"C\", \"D\"], \"B\": [\"A\", \"D\", \"E\"],\n    ... \"C\": [\"A\", \"F\"], \"D\": [\"B\", \"D\"], \"E\": [\"B\", \"F\"],\n    ... \"F\": [\"C\", \"E\", \"G\"], \"G\": [\"F\"] }\n    >>> output_G = list({'A', 'B', 'C', 'D', 'E', 'F', 'G'})\n    >>> all(x in output_G for x in list(depth_first_search(input_G, \"A\")))\n    True\n    >>> all(x in output_G for x in list(depth_first_search(input_G, \"G\")))\n    True\n    \"\"\"\n    explored, stack = set(start), [start]\n\n    while stack:\n        v = stack.pop()\n        explored.add(v)\n        # Differences from BFS:\n        # 1) pop last element instead of first one\n        # 2) add adjacent elements to stack without exploring them\n        for adj in reversed(graph[v]):\n            if adj not in explored:\n                stack.append(adj)\n    return explored\n\n\nG = {\n    \"A\": [\"B\", \"C\", \"D\"],\n    \"B\": [\"A\", \"D\", \"E\"],\n    \"C\": [\"A\", \"F\"],\n    \"D\": [\"B\", \"D\"],\n    \"E\": [\"B\", \"F\"],\n    \"F\": [\"C\", \"E\", \"G\"],\n    \"G\": [\"F\"],\n}\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    print(depth_first_search(G, \"A\"))\n"
  },
  {
    "path": "graphs/depth_first_search_2.py",
    "content": "#!/usr/bin/python\n\n\"\"\"Author: OMKAR PATHAK\"\"\"\n\n\nclass Graph:\n    def __init__(self):\n        self.vertex = {}\n\n    # for printing the Graph vertices\n    def print_graph(self) -> None:\n        \"\"\"\n        Print the graph vertices.\n\n        Example:\n        >>> g = Graph()\n        >>> g.add_edge(0, 1)\n        >>> g.add_edge(0, 2)\n        >>> g.add_edge(1, 2)\n        >>> g.add_edge(2, 0)\n        >>> g.add_edge(2, 3)\n        >>> g.add_edge(3, 3)\n        >>> g.print_graph()\n        {0: [1, 2], 1: [2], 2: [0, 3], 3: [3]}\n        0  ->  1 -> 2\n        1  ->  2\n        2  ->  0 -> 3\n        3  ->  3\n        \"\"\"\n        print(self.vertex)\n        for i in self.vertex:\n            print(i, \" -> \", \" -> \".join([str(j) for j in self.vertex[i]]))\n\n    # for adding the edge between two vertices\n    def add_edge(self, from_vertex: int, to_vertex: int) -> None:\n        \"\"\"\n        Add an edge between two vertices.\n\n        :param from_vertex: The source vertex.\n        :param to_vertex: The destination vertex.\n\n        Example:\n        >>> g = Graph()\n        >>> g.add_edge(0, 1)\n        >>> g.add_edge(0, 2)\n        >>> g.print_graph()\n        {0: [1, 2]}\n        0  ->  1 -> 2\n        \"\"\"\n        # check if vertex is already present,\n        if from_vertex in self.vertex:\n            self.vertex[from_vertex].append(to_vertex)\n        else:\n            # else make a new vertex\n            self.vertex[from_vertex] = [to_vertex]\n\n    def dfs(self) -> None:\n        \"\"\"\n        Perform depth-first search (DFS) traversal on the graph\n        and print the visited vertices.\n\n        Example:\n        >>> g = Graph()\n        >>> g.add_edge(0, 1)\n        >>> g.add_edge(0, 2)\n        >>> g.add_edge(1, 2)\n        >>> g.add_edge(2, 0)\n        >>> g.add_edge(2, 3)\n        >>> g.add_edge(3, 3)\n        >>> g.dfs()\n        0 1 2 3\n        \"\"\"\n        # visited array for storing already visited nodes\n        visited = [False] * len(self.vertex)\n\n        # call the recursive helper function\n        for i in range(len(self.vertex)):\n            if not visited[i]:\n                self.dfs_recursive(i, visited)\n\n    def dfs_recursive(self, start_vertex: int, visited: list) -> None:\n        \"\"\"\n        Perform a recursive depth-first search (DFS) traversal on the graph.\n\n        :param start_vertex: The starting vertex for the traversal.\n        :param visited: A list to track visited vertices.\n\n        Example:\n        >>> g = Graph()\n        >>> g.add_edge(0, 1)\n        >>> g.add_edge(0, 2)\n        >>> g.add_edge(1, 2)\n        >>> g.add_edge(2, 0)\n        >>> g.add_edge(2, 3)\n        >>> g.add_edge(3, 3)\n        >>> visited = [False] * len(g.vertex)\n        >>> g.dfs_recursive(0, visited)\n        0 1 2 3\n        \"\"\"\n        # mark start vertex as visited\n        visited[start_vertex] = True\n\n        print(start_vertex, end=\"\")\n\n        # Recur for all the vertices that are adjacent to this node\n        for i in self.vertex:\n            if not visited[i]:\n                print(\" \", end=\"\")\n                self.dfs_recursive(i, visited)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    g = Graph()\n    g.add_edge(0, 1)\n    g.add_edge(0, 2)\n    g.add_edge(1, 2)\n    g.add_edge(2, 0)\n    g.add_edge(2, 3)\n    g.add_edge(3, 3)\n\n    g.print_graph()\n    print(\"DFS:\")\n    g.dfs()\n"
  },
  {
    "path": "graphs/dijkstra.py",
    "content": "\"\"\"\npseudo-code\n\nDIJKSTRA(graph G, start vertex s, destination vertex d):\n\n//all nodes initially unexplored\n\n1 -  let H = min heap data structure, initialized with 0 and s [here 0 indicates\n     the distance from start vertex s]\n2 -  while H is non-empty:\n3 -    remove the first node and cost of H, call it U and cost\n4 -    if U has been previously explored:\n5 -      go to the while loop, line 2 //Once a node is explored there is no need\n         to make it again\n6 -    mark U as explored\n7 -    if U is d:\n8 -      return cost // total cost from start to destination vertex\n9 -    for each edge(U, V): c=cost of edge(U,V) // for V in graph[U]\n10 -     if V explored:\n11 -       go to next V in line 9\n12 -     total_cost = cost + c\n13 -     add (total_cost,V) to H\n\nYou can think at cost as a distance where Dijkstra finds the shortest distance\nbetween vertices s and v in a graph G. The use of a min heap as H guarantees\nthat if a vertex has already been explored there will be no other path with\nshortest distance, that happens because heapq.heappop will always return the\nnext vertex with the shortest distance, considering that the heap stores not\nonly the distance between previous vertex and current vertex but the entire\ndistance between each vertex that makes up the path from start vertex to target\nvertex.\n\"\"\"\n\nimport heapq\n\n\ndef dijkstra(graph, start, end):\n    \"\"\"Return the cost of the shortest path between vertices start and end.\n\n    >>> dijkstra(G, \"E\", \"C\")\n    6\n    >>> dijkstra(G2, \"E\", \"F\")\n    3\n    >>> dijkstra(G3, \"E\", \"F\")\n    3\n    \"\"\"\n\n    heap = [(0, start)]  # cost from start node,end node\n    visited = set()\n    while heap:\n        (cost, u) = heapq.heappop(heap)\n        if u in visited:\n            continue\n        visited.add(u)\n        if u == end:\n            return cost\n        for v, c in graph[u]:\n            if v in visited:\n                continue\n            next_item = cost + c\n            heapq.heappush(heap, (next_item, v))\n    return -1\n\n\nG = {\n    \"A\": [[\"B\", 2], [\"C\", 5]],\n    \"B\": [[\"A\", 2], [\"D\", 3], [\"E\", 1], [\"F\", 1]],\n    \"C\": [[\"A\", 5], [\"F\", 3]],\n    \"D\": [[\"B\", 3]],\n    \"E\": [[\"B\", 4], [\"F\", 3]],\n    \"F\": [[\"C\", 3], [\"E\", 3]],\n}\n\nr\"\"\"\nLayout of G2:\n\nE -- 1 --> B -- 1 --> C -- 1 --> D -- 1 --> F\n \\                                         /\\\n  \\                                        ||\n    ----------------- 3 --------------------\n\"\"\"\nG2 = {\n    \"B\": [[\"C\", 1]],\n    \"C\": [[\"D\", 1]],\n    \"D\": [[\"F\", 1]],\n    \"E\": [[\"B\", 1], [\"F\", 3]],\n    \"F\": [],\n}\n\nr\"\"\"\nLayout of G3:\n\nE -- 1 --> B -- 1 --> C -- 1 --> D -- 1 --> F\n \\                                         /\\\n  \\                                        ||\n    -------- 2 ---------> G ------- 1 ------\n\"\"\"\nG3 = {\n    \"B\": [[\"C\", 1]],\n    \"C\": [[\"D\", 1]],\n    \"D\": [[\"F\", 1]],\n    \"E\": [[\"B\", 1], [\"G\", 2]],\n    \"F\": [],\n    \"G\": [[\"F\", 1]],\n}\n\nshort_distance = dijkstra(G, \"E\", \"C\")\nprint(short_distance)  # E -- 3 --> F -- 3 --> C == 6\n\nshort_distance = dijkstra(G2, \"E\", \"F\")\nprint(short_distance)  # E -- 3 --> F == 3\n\nshort_distance = dijkstra(G3, \"E\", \"F\")\nprint(short_distance)  # E -- 2 --> G -- 1 --> F == 3\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "graphs/dijkstra_2.py",
    "content": "def print_dist(dist, v):\n    print(\"\\nVertex Distance\")\n    for i in range(v):\n        if dist[i] != float(\"inf\"):\n            print(i, \"\\t\", int(dist[i]), end=\"\\t\")\n        else:\n            print(i, \"\\t\", \"INF\", end=\"\\t\")\n        print()\n\n\ndef min_dist(mdist, vset, v):\n    min_val = float(\"inf\")\n    min_ind = -1\n    for i in range(v):\n        if (not vset[i]) and mdist[i] < min_val:\n            min_ind = i\n            min_val = mdist[i]\n    return min_ind\n\n\ndef dijkstra(graph, v, src):\n    mdist = [float(\"inf\") for _ in range(v)]\n    vset = [False for _ in range(v)]\n    mdist[src] = 0.0\n\n    for _ in range(v - 1):\n        u = min_dist(mdist, vset, v)\n        vset[u] = True\n\n        for i in range(v):\n            if (\n                (not vset[i])\n                and graph[u][i] != float(\"inf\")\n                and mdist[u] + graph[u][i] < mdist[i]\n            ):\n                mdist[i] = mdist[u] + graph[u][i]\n\n    print_dist(mdist, i)\n\n\nif __name__ == \"__main__\":\n    V = int(input(\"Enter number of vertices: \").strip())\n    E = int(input(\"Enter number of edges: \").strip())\n\n    graph = [[float(\"inf\") for i in range(V)] for j in range(V)]\n\n    for i in range(V):\n        graph[i][i] = 0.0\n\n    for i in range(E):\n        print(\"\\nEdge \", i + 1)\n        src = int(input(\"Enter source:\").strip())\n        dst = int(input(\"Enter destination:\").strip())\n        weight = float(input(\"Enter weight:\").strip())\n        graph[src][dst] = weight\n\n    gsrc = int(input(\"\\nEnter shortest path source:\").strip())\n    dijkstra(graph, V, gsrc)\n"
  },
  {
    "path": "graphs/dijkstra_algorithm.py",
    "content": "# Title: Dijkstra's Algorithm for finding single source shortest path from scratch\n# Author: Shubham Malik\n# References: https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm\n\nimport math\nimport sys\n\n# For storing the vertex set to retrieve node with the lowest distance\n\n\nclass PriorityQueue:\n    # Based on Min Heap\n    def __init__(self):\n        \"\"\"\n        Priority queue class constructor method.\n\n        Examples:\n        >>> priority_queue_test = PriorityQueue()\n        >>> priority_queue_test.cur_size\n        0\n        >>> priority_queue_test.array\n        []\n        >>> priority_queue_test.pos\n        {}\n        \"\"\"\n        self.cur_size = 0\n        self.array = []\n        self.pos = {}  # To store the pos of node in array\n\n    def is_empty(self):\n        \"\"\"\n        Conditional boolean method to determine if the priority queue is empty or not.\n\n        Examples:\n        >>> priority_queue_test = PriorityQueue()\n        >>> priority_queue_test.is_empty()\n        True\n        >>> priority_queue_test.insert((2, 'A'))\n        >>> priority_queue_test.is_empty()\n        False\n        \"\"\"\n        return self.cur_size == 0\n\n    def min_heapify(self, idx):\n        \"\"\"\n        Sorts the queue array so that the minimum element is root.\n\n        Examples:\n        >>> priority_queue_test = PriorityQueue()\n        >>> priority_queue_test.cur_size = 3\n        >>> priority_queue_test.pos = {'A': 0, 'B': 1, 'C': 2}\n\n        >>> priority_queue_test.array = [(5, 'A'), (10, 'B'), (15, 'C')]\n        >>> priority_queue_test.min_heapify(0)\n        >>> priority_queue_test.array\n        [(5, 'A'), (10, 'B'), (15, 'C')]\n\n        >>> priority_queue_test.array = [(10, 'A'), (5, 'B'), (15, 'C')]\n        >>> priority_queue_test.min_heapify(0)\n        >>> priority_queue_test.array\n        [(5, 'B'), (10, 'A'), (15, 'C')]\n\n        >>> priority_queue_test.array = [(10, 'A'), (15, 'B'), (5, 'C')]\n        >>> priority_queue_test.min_heapify(0)\n        >>> priority_queue_test.array\n        [(5, 'C'), (15, 'B'), (10, 'A')]\n\n        >>> priority_queue_test.array = [(10, 'A'), (5, 'B')]\n        >>> priority_queue_test.cur_size = len(priority_queue_test.array)\n        >>> priority_queue_test.pos = {'A': 0, 'B': 1}\n        >>> priority_queue_test.min_heapify(0)\n        >>> priority_queue_test.array\n        [(5, 'B'), (10, 'A')]\n        \"\"\"\n        lc = self.left(idx)\n        rc = self.right(idx)\n        if lc < self.cur_size and self.array[lc][0] < self.array[idx][0]:\n            smallest = lc\n        else:\n            smallest = idx\n        if rc < self.cur_size and self.array[rc][0] < self.array[smallest][0]:\n            smallest = rc\n        if smallest != idx:\n            self.swap(idx, smallest)\n            self.min_heapify(smallest)\n\n    def insert(self, tup):\n        \"\"\"\n        Inserts a node into the Priority Queue.\n\n        Examples:\n        >>> priority_queue_test = PriorityQueue()\n        >>> priority_queue_test.insert((10, 'A'))\n        >>> priority_queue_test.array\n        [(10, 'A')]\n        >>> priority_queue_test.insert((15, 'B'))\n        >>> priority_queue_test.array\n        [(10, 'A'), (15, 'B')]\n        >>> priority_queue_test.insert((5, 'C'))\n        >>> priority_queue_test.array\n        [(5, 'C'), (10, 'A'), (15, 'B')]\n        \"\"\"\n        self.pos[tup[1]] = self.cur_size\n        self.cur_size += 1\n        self.array.append((sys.maxsize, tup[1]))\n        self.decrease_key((sys.maxsize, tup[1]), tup[0])\n\n    def extract_min(self):\n        \"\"\"\n        Removes and returns the min element at top of priority queue.\n\n        Examples:\n        >>> priority_queue_test = PriorityQueue()\n        >>> priority_queue_test.array = [(10, 'A'), (15, 'B')]\n        >>> priority_queue_test.cur_size = len(priority_queue_test.array)\n        >>> priority_queue_test.pos = {'A': 0, 'B': 1}\n        >>> priority_queue_test.insert((5, 'C'))\n        >>> priority_queue_test.extract_min()\n        'C'\n        >>> priority_queue_test.array[0]\n        (10, 'A')\n        \"\"\"\n        min_node = self.array[0][1]\n        self.array[0] = self.array[self.cur_size - 1]\n        self.cur_size -= 1\n        self.min_heapify(0)\n        del self.pos[min_node]\n        return min_node\n\n    def left(self, i):\n        \"\"\"\n        Returns the index of left child\n\n        Examples:\n        >>> priority_queue_test = PriorityQueue()\n        >>> priority_queue_test.left(0)\n        1\n        >>> priority_queue_test.left(1)\n        3\n        \"\"\"\n        return 2 * i + 1\n\n    def right(self, i):\n        \"\"\"\n        Returns the index of right child\n\n        Examples:\n        >>> priority_queue_test = PriorityQueue()\n        >>> priority_queue_test.right(0)\n        2\n        >>> priority_queue_test.right(1)\n        4\n        \"\"\"\n        return 2 * i + 2\n\n    def par(self, i):\n        \"\"\"\n        Returns the index of parent\n\n        Examples:\n        >>> priority_queue_test = PriorityQueue()\n        >>> priority_queue_test.par(1)\n        0\n        >>> priority_queue_test.par(2)\n        1\n        >>> priority_queue_test.par(4)\n        2\n        \"\"\"\n        return math.floor(i / 2)\n\n    def swap(self, i, j):\n        \"\"\"\n        Swaps array elements at indices i and j, update the pos{}\n\n        Examples:\n        >>> priority_queue_test = PriorityQueue()\n        >>> priority_queue_test.array = [(10, 'A'), (15, 'B')]\n        >>> priority_queue_test.cur_size = len(priority_queue_test.array)\n        >>> priority_queue_test.pos = {'A': 0, 'B': 1}\n        >>> priority_queue_test.swap(0, 1)\n        >>> priority_queue_test.array\n        [(15, 'B'), (10, 'A')]\n        >>> priority_queue_test.pos\n        {'A': 1, 'B': 0}\n        \"\"\"\n        self.pos[self.array[i][1]] = j\n        self.pos[self.array[j][1]] = i\n        temp = self.array[i]\n        self.array[i] = self.array[j]\n        self.array[j] = temp\n\n    def decrease_key(self, tup, new_d):\n        \"\"\"\n        Decrease the key value for a given tuple, assuming the new_d is at most old_d.\n\n        Examples:\n        >>> priority_queue_test = PriorityQueue()\n        >>> priority_queue_test.array = [(10, 'A'), (15, 'B')]\n        >>> priority_queue_test.cur_size = len(priority_queue_test.array)\n        >>> priority_queue_test.pos = {'A': 0, 'B': 1}\n        >>> priority_queue_test.decrease_key((10, 'A'), 5)\n        >>> priority_queue_test.array\n        [(5, 'A'), (15, 'B')]\n        \"\"\"\n        idx = self.pos[tup[1]]\n        # assuming the new_d is at most old_d\n        self.array[idx] = (new_d, tup[1])\n        while idx > 0 and self.array[self.par(idx)][0] > self.array[idx][0]:\n            self.swap(idx, self.par(idx))\n            idx = self.par(idx)\n\n\nclass Graph:\n    def __init__(self, num):\n        \"\"\"\n        Graph class constructor\n\n        Examples:\n        >>> graph_test = Graph(1)\n        >>> graph_test.num_nodes\n        1\n        >>> graph_test.dist\n        [0]\n        >>> graph_test.par\n        [-1]\n        >>> graph_test.adjList\n        {}\n        \"\"\"\n        self.adjList = {}  # To store graph: u -> (v,w)\n        self.num_nodes = num  # Number of nodes in graph\n        # To store the distance from source vertex\n        self.dist = [0] * self.num_nodes\n        self.par = [-1] * self.num_nodes  # To store the path\n\n    def add_edge(self, u, v, w):\n        \"\"\"\n        Add edge going from node u to v and v to u with weight w: u (w)-> v, v (w) -> u\n\n        Examples:\n        >>> graph_test = Graph(1)\n        >>> graph_test.add_edge(1, 2, 1)\n        >>> graph_test.add_edge(2, 3, 2)\n        >>> graph_test.adjList\n        {1: [(2, 1)], 2: [(1, 1), (3, 2)], 3: [(2, 2)]}\n        \"\"\"\n        # Check if u already in graph\n        if u in self.adjList:\n            self.adjList[u].append((v, w))\n        else:\n            self.adjList[u] = [(v, w)]\n\n        # Assuming undirected graph\n        if v in self.adjList:\n            self.adjList[v].append((u, w))\n        else:\n            self.adjList[v] = [(u, w)]\n\n    def show_graph(self):\n        \"\"\"\n        Show the graph: u -> v(w)\n\n        Examples:\n        >>> graph_test = Graph(1)\n        >>> graph_test.add_edge(1, 2, 1)\n        >>> graph_test.show_graph()\n        1 -> 2(1)\n        2 -> 1(1)\n        >>> graph_test.add_edge(2, 3, 2)\n        >>> graph_test.show_graph()\n        1 -> 2(1)\n        2 -> 1(1) -> 3(2)\n        3 -> 2(2)\n        \"\"\"\n        for u in self.adjList:\n            print(u, \"->\", \" -> \".join(str(f\"{v}({w})\") for v, w in self.adjList[u]))\n\n    def dijkstra(self, src):\n        \"\"\"\n        Dijkstra algorithm\n\n        Examples:\n        >>> graph_test = Graph(3)\n        >>> graph_test.add_edge(0, 1, 2)\n        >>> graph_test.add_edge(1, 2, 2)\n        >>> graph_test.dijkstra(0)\n        Distance from node: 0\n        Node 0 has distance: 0\n        Node 1 has distance: 2\n        Node 2 has distance: 4\n        >>> graph_test.dist\n        [0, 2, 4]\n\n        >>> graph_test = Graph(2)\n        >>> graph_test.add_edge(0, 1, 2)\n        >>> graph_test.dijkstra(0)\n        Distance from node: 0\n        Node 0 has distance: 0\n        Node 1 has distance: 2\n        >>> graph_test.dist\n        [0, 2]\n\n        >>> graph_test = Graph(3)\n        >>> graph_test.add_edge(0, 1, 2)\n        >>> graph_test.dijkstra(0)\n        Distance from node: 0\n        Node 0 has distance: 0\n        Node 1 has distance: 2\n        Node 2 has distance: 0\n        >>> graph_test.dist\n        [0, 2, 0]\n\n        >>> graph_test = Graph(3)\n        >>> graph_test.add_edge(0, 1, 2)\n        >>> graph_test.add_edge(1, 2, 2)\n        >>> graph_test.add_edge(0, 2, 1)\n        >>> graph_test.dijkstra(0)\n        Distance from node: 0\n        Node 0 has distance: 0\n        Node 1 has distance: 2\n        Node 2 has distance: 1\n        >>> graph_test.dist\n        [0, 2, 1]\n\n        >>> graph_test = Graph(4)\n        >>> graph_test.add_edge(0, 1, 4)\n        >>> graph_test.add_edge(1, 2, 2)\n        >>> graph_test.add_edge(2, 3, 1)\n        >>> graph_test.add_edge(0, 2, 3)\n        >>> graph_test.dijkstra(0)\n        Distance from node: 0\n        Node 0 has distance: 0\n        Node 1 has distance: 4\n        Node 2 has distance: 3\n        Node 3 has distance: 4\n        >>> graph_test.dist\n        [0, 4, 3, 4]\n\n        >>> graph_test = Graph(4)\n        >>> graph_test.add_edge(0, 1, 4)\n        >>> graph_test.add_edge(1, 2, 2)\n        >>> graph_test.add_edge(2, 3, 1)\n        >>> graph_test.add_edge(0, 2, 7)\n        >>> graph_test.dijkstra(0)\n        Distance from node: 0\n        Node 0 has distance: 0\n        Node 1 has distance: 4\n        Node 2 has distance: 6\n        Node 3 has distance: 7\n        >>> graph_test.dist\n        [0, 4, 6, 7]\n        \"\"\"\n        # Flush old junk values in par[]\n        self.par = [-1] * self.num_nodes\n        # src is the source node\n        self.dist[src] = 0\n        q = PriorityQueue()\n        q.insert((0, src))  # (dist from src, node)\n        for u in self.adjList:\n            if u != src:\n                self.dist[u] = sys.maxsize  # Infinity\n                self.par[u] = -1\n\n        while not q.is_empty():\n            u = q.extract_min()  # Returns node with the min dist from source\n            # Update the distance of all the neighbours of u and\n            # if their prev dist was INFINITY then push them in Q\n            for v, w in self.adjList[u]:\n                new_dist = self.dist[u] + w\n                if self.dist[v] > new_dist:\n                    if self.dist[v] == sys.maxsize:\n                        q.insert((new_dist, v))\n                    else:\n                        q.decrease_key((self.dist[v], v), new_dist)\n                    self.dist[v] = new_dist\n                    self.par[v] = u\n\n        # Show the shortest distances from src\n        self.show_distances(src)\n\n    def show_distances(self, src):\n        \"\"\"\n        Show the distances from src to all other nodes in a graph\n\n        Examples:\n        >>> graph_test = Graph(1)\n        >>> graph_test.show_distances(0)\n        Distance from node: 0\n        Node 0 has distance: 0\n        \"\"\"\n        print(f\"Distance from node: {src}\")\n        for u in range(self.num_nodes):\n            print(f\"Node {u} has distance: {self.dist[u]}\")\n\n    def show_path(self, src, dest):\n        \"\"\"\n        Shows the shortest path from src to dest.\n        WARNING: Use it *after* calling dijkstra.\n\n        Examples:\n        >>> graph_test = Graph(4)\n        >>> graph_test.add_edge(0, 1, 1)\n        >>> graph_test.add_edge(1, 2, 2)\n        >>> graph_test.add_edge(2, 3, 3)\n        >>> graph_test.dijkstra(0)\n        Distance from node: 0\n        Node 0 has distance: 0\n        Node 1 has distance: 1\n        Node 2 has distance: 3\n        Node 3 has distance: 6\n        >>> graph_test.show_path(0, 3)  # doctest: +NORMALIZE_WHITESPACE\n        ----Path to reach 3 from 0----\n        0 -> 1 -> 2 -> 3\n        Total cost of path:  6\n        \"\"\"\n        path = []\n        cost = 0\n        temp = dest\n        # Backtracking from dest to src\n        while self.par[temp] != -1:\n            path.append(temp)\n            if temp != src:\n                for v, w in self.adjList[temp]:\n                    if v == self.par[temp]:\n                        cost += w\n                        break\n            temp = self.par[temp]\n        path.append(src)\n        path.reverse()\n\n        print(f\"----Path to reach {dest} from {src}----\")\n        for u in path:\n            print(f\"{u}\", end=\" \")\n            if u != dest:\n                print(\"-> \", end=\"\")\n\n        print(\"\\nTotal cost of path: \", cost)\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    graph = Graph(9)\n    graph.add_edge(0, 1, 4)\n    graph.add_edge(0, 7, 8)\n    graph.add_edge(1, 2, 8)\n    graph.add_edge(1, 7, 11)\n    graph.add_edge(2, 3, 7)\n    graph.add_edge(2, 8, 2)\n    graph.add_edge(2, 5, 4)\n    graph.add_edge(3, 4, 9)\n    graph.add_edge(3, 5, 14)\n    graph.add_edge(4, 5, 10)\n    graph.add_edge(5, 6, 2)\n    graph.add_edge(6, 7, 1)\n    graph.add_edge(6, 8, 6)\n    graph.add_edge(7, 8, 7)\n    graph.show_graph()\n    graph.dijkstra(0)\n    graph.show_path(0, 4)\n\n# OUTPUT\n# 0 -> 1(4) -> 7(8)\n# 1 -> 0(4) -> 2(8) -> 7(11)\n# 7 -> 0(8) -> 1(11) -> 6(1) -> 8(7)\n# 2 -> 1(8) -> 3(7) -> 8(2) -> 5(4)\n# 3 -> 2(7) -> 4(9) -> 5(14)\n# 8 -> 2(2) -> 6(6) -> 7(7)\n# 5 -> 2(4) -> 3(14) -> 4(10) -> 6(2)\n# 4 -> 3(9) -> 5(10)\n# 6 -> 5(2) -> 7(1) -> 8(6)\n# Distance from node: 0\n# Node 0 has distance: 0\n# Node 1 has distance: 4\n# Node 2 has distance: 12\n# Node 3 has distance: 19\n# Node 4 has distance: 21\n# Node 5 has distance: 11\n# Node 6 has distance: 9\n# Node 7 has distance: 8\n# Node 8 has distance: 14\n# ----Path to reach 4 from 0----\n# 0 -> 7 -> 6 -> 5 -> 4\n# Total cost of path:  21\n"
  },
  {
    "path": "graphs/dijkstra_alternate.py",
    "content": "from __future__ import annotations\n\n\nclass Graph:\n    def __init__(self, vertices: int) -> None:\n        \"\"\"\n        >>> graph = Graph(2)\n        >>> graph.vertices\n        2\n        >>> len(graph.graph)\n        2\n        >>> len(graph.graph[0])\n        2\n        \"\"\"\n        self.vertices = vertices\n        self.graph = [[0] * vertices for _ in range(vertices)]\n\n    def print_solution(self, distances_from_source: list[int]) -> None:\n        \"\"\"\n        >>> Graph(0).print_solution([])  # doctest: +NORMALIZE_WHITESPACE\n        Vertex \t Distance from Source\n        \"\"\"\n        print(\"Vertex \\t Distance from Source\")\n        for vertex in range(self.vertices):\n            print(vertex, \"\\t\\t\", distances_from_source[vertex])\n\n    def minimum_distance(\n        self, distances_from_source: list[int], visited: list[bool]\n    ) -> int:\n        \"\"\"\n        A utility function to find the vertex with minimum distance value, from the set\n        of vertices not yet included in shortest path tree.\n\n        >>> Graph(3).minimum_distance([1, 2, 3], [False, False, True])\n        0\n        \"\"\"\n\n        # Initialize minimum distance for next node\n        minimum = 1e7\n        min_index = 0\n\n        # Search not nearest vertex not in the shortest path tree\n        for vertex in range(self.vertices):\n            if distances_from_source[vertex] < minimum and visited[vertex] is False:\n                minimum = distances_from_source[vertex]\n                min_index = vertex\n        return min_index\n\n    def dijkstra(self, source: int) -> None:\n        \"\"\"\n        Function that implements Dijkstra's single source shortest path algorithm for a\n        graph represented using adjacency matrix representation.\n\n        >>> Graph(4).dijkstra(1)  # doctest: +NORMALIZE_WHITESPACE\n        Vertex  Distance from Source\n        0 \t\t 10000000\n        1 \t\t 0\n        2 \t\t 10000000\n        3 \t\t 10000000\n        \"\"\"\n\n        distances = [int(1e7)] * self.vertices  # distances from the source\n        distances[source] = 0\n        visited = [False] * self.vertices\n\n        for _ in range(self.vertices):\n            u = self.minimum_distance(distances, visited)\n            visited[u] = True\n\n            # Update dist value of the adjacent vertices\n            # of the picked vertex only if the current\n            # distance is greater than new distance and\n            # the vertex in not in the shortest path tree\n            for v in range(self.vertices):\n                if (\n                    self.graph[u][v] > 0\n                    and visited[v] is False\n                    and distances[v] > distances[u] + self.graph[u][v]\n                ):\n                    distances[v] = distances[u] + self.graph[u][v]\n\n        self.print_solution(distances)\n\n\nif __name__ == \"__main__\":\n    graph = Graph(9)\n    graph.graph = [\n        [0, 4, 0, 0, 0, 0, 0, 8, 0],\n        [4, 0, 8, 0, 0, 0, 0, 11, 0],\n        [0, 8, 0, 7, 0, 4, 0, 0, 2],\n        [0, 0, 7, 0, 9, 14, 0, 0, 0],\n        [0, 0, 0, 9, 0, 10, 0, 0, 0],\n        [0, 0, 4, 14, 10, 0, 2, 0, 0],\n        [0, 0, 0, 0, 0, 2, 0, 1, 6],\n        [8, 11, 0, 0, 0, 0, 1, 0, 7],\n        [0, 0, 2, 0, 0, 0, 6, 7, 0],\n    ]\n    graph.dijkstra(0)\n"
  },
  {
    "path": "graphs/dijkstra_binary_grid.py",
    "content": "\"\"\"\nThis script implements the Dijkstra algorithm on a binary grid.\nThe grid consists of 0s and 1s, where 1 represents\na walkable node and 0 represents an obstacle.\nThe algorithm finds the shortest path from a start node to a destination node.\nDiagonal movement can be allowed or disallowed.\n\"\"\"\n\nfrom heapq import heappop, heappush\n\nimport numpy as np\n\n\ndef dijkstra(\n    grid: np.ndarray,\n    source: tuple[int, int],\n    destination: tuple[int, int],\n    allow_diagonal: bool,\n) -> tuple[float | int, list[tuple[int, int]]]:\n    \"\"\"\n    Implements Dijkstra's algorithm on a binary grid.\n\n    Args:\n        grid (np.ndarray): A 2D numpy array representing the grid.\n        1 represents a walkable node and 0 represents an obstacle.\n        source (Tuple[int, int]): A tuple representing the start node.\n        destination (Tuple[int, int]): A tuple representing the\n        destination node.\n        allow_diagonal (bool): A boolean determining whether\n        diagonal movements are allowed.\n\n    Returns:\n        Tuple[Union[float, int], List[Tuple[int, int]]]:\n        The shortest distance from the start node to the destination node\n        and the shortest path as a list of nodes.\n\n    >>> dijkstra(np.array([[1, 1, 1], [0, 1, 0], [0, 1, 1]]), (0, 0), (2, 2), False)\n    (4.0, [(0, 0), (0, 1), (1, 1), (2, 1), (2, 2)])\n\n    >>> dijkstra(np.array([[1, 1, 1], [0, 1, 0], [0, 1, 1]]), (0, 0), (2, 2), True)\n    (2.0, [(0, 0), (1, 1), (2, 2)])\n\n    >>> dijkstra(np.array([[1, 1, 1], [0, 0, 1], [0, 1, 1]]), (0, 0), (2, 2), False)\n    (4.0, [(0, 0), (0, 1), (0, 2), (1, 2), (2, 2)])\n    \"\"\"\n    rows, cols = grid.shape\n    dx = [-1, 1, 0, 0]\n    dy = [0, 0, -1, 1]\n    if allow_diagonal:\n        dx += [-1, -1, 1, 1]\n        dy += [-1, 1, -1, 1]\n\n    queue, visited = [(0, source)], set()\n    matrix = np.full((rows, cols), np.inf)\n    matrix[source] = 0\n    predecessors = np.empty((rows, cols), dtype=object)\n    predecessors[source] = None\n\n    while queue:\n        (dist, (x, y)) = heappop(queue)\n        if (x, y) in visited:\n            continue\n        visited.add((x, y))\n\n        if (x, y) == destination:\n            path = []\n            while (x, y) != source:\n                path.append((x, y))\n                x, y = predecessors[x, y]\n            path.append(source)  # add the source manually\n            path.reverse()\n            return float(matrix[destination]), path\n\n        for i in range(len(dx)):\n            nx, ny = x + dx[i], y + dy[i]\n            if 0 <= nx < rows and 0 <= ny < cols:\n                next_node = grid[nx][ny]\n                if next_node == 1 and matrix[nx, ny] > dist + 1:\n                    heappush(queue, (dist + 1, (nx, ny)))\n                    matrix[nx, ny] = dist + 1\n                    predecessors[nx, ny] = (x, y)\n\n    return np.inf, []\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "graphs/dinic.py",
    "content": "INF = float(\"inf\")\n\n\nclass Dinic:\n    def __init__(self, n):\n        self.lvl = [0] * n\n        self.ptr = [0] * n\n        self.q = [0] * n\n        self.adj = [[] for _ in range(n)]\n\n    \"\"\"\n    Here we will add our edges containing with the following parameters:\n    vertex closest to source, vertex closest to sink and flow capacity\n    through that edge ...\n    \"\"\"\n\n    def add_edge(self, a, b, c, rcap=0):\n        self.adj[a].append([b, len(self.adj[b]), c, 0])\n        self.adj[b].append([a, len(self.adj[a]) - 1, rcap, 0])\n\n    # This is a sample depth first search to be used at max_flow\n    def depth_first_search(self, vertex, sink, flow):\n        if vertex == sink or not flow:\n            return flow\n\n        for i in range(self.ptr[vertex], len(self.adj[vertex])):\n            e = self.adj[vertex][i]\n            if self.lvl[e[0]] == self.lvl[vertex] + 1:\n                p = self.depth_first_search(e[0], sink, min(flow, e[2] - e[3]))\n                if p:\n                    self.adj[vertex][i][3] += p\n                    self.adj[e[0]][e[1]][3] -= p\n                    return p\n            self.ptr[vertex] = self.ptr[vertex] + 1\n        return 0\n\n    # Here we calculate the flow that reaches the sink\n    def max_flow(self, source, sink):\n        flow, self.q[0] = 0, source\n        for l in range(31):  # l = 30 maybe faster for random data  # noqa: E741\n            while True:\n                self.lvl, self.ptr = [0] * len(self.q), [0] * len(self.q)\n                qi, qe, self.lvl[source] = 0, 1, 1\n                while qi < qe and not self.lvl[sink]:\n                    v = self.q[qi]\n                    qi += 1\n                    for e in self.adj[v]:\n                        if not self.lvl[e[0]] and (e[2] - e[3]) >> (30 - l):\n                            self.q[qe] = e[0]\n                            qe += 1\n                            self.lvl[e[0]] = self.lvl[v] + 1\n\n                p = self.depth_first_search(source, sink, INF)\n                while p:\n                    flow += p\n                    p = self.depth_first_search(source, sink, INF)\n\n                if not self.lvl[sink]:\n                    break\n\n        return flow\n\n\n# Example to use\n\n\"\"\"\nWill be a bipartite graph, than it has the vertices near the source(4)\nand the vertices near the sink(4)\n\"\"\"\n# Here we make a graphs with 10 vertex(source and sink includes)\ngraph = Dinic(10)\nsource = 0\nsink = 9\n\"\"\"\nNow we add the vertices next to the font in the font with 1 capacity in this edge\n(source -> source vertices)\n\"\"\"\nfor vertex in range(1, 5):\n    graph.add_edge(source, vertex, 1)\n\"\"\"\nWe will do the same thing for the vertices near the sink, but from vertex to sink\n(sink vertices -> sink)\n\"\"\"\nfor vertex in range(5, 9):\n    graph.add_edge(vertex, sink, 1)\n\"\"\"\nFinally we add the verices near the sink to the vertices near the source.\n(source vertices -> sink vertices)\n\"\"\"\nfor vertex in range(1, 5):\n    graph.add_edge(vertex, vertex + 4, 1)\n\n# Now we can know that is the maximum flow(source -> sink)\nprint(graph.max_flow(source, sink))\n"
  },
  {
    "path": "graphs/directed_and_undirected_weighted_graph.py",
    "content": "from collections import deque\nfrom math import floor\nfrom random import random\nfrom time import time\n\n# the default weight is 1 if not assigned but all the implementation is weighted\n\n\nclass DirectedGraph:\n    def __init__(self):\n        self.graph = {}\n\n    # adding vertices and edges\n    # adding the weight is optional\n    # handles repetition\n    def add_pair(self, u, v, w=1):\n        if self.graph.get(u):\n            if self.graph[u].count([w, v]) == 0:\n                self.graph[u].append([w, v])\n        else:\n            self.graph[u] = [[w, v]]\n        if not self.graph.get(v):\n            self.graph[v] = []\n\n    def all_nodes(self):\n        return list(self.graph)\n\n    # handles if the input does not exist\n    def remove_pair(self, u, v):\n        if self.graph.get(u):\n            for _ in self.graph[u]:\n                if _[1] == v:\n                    self.graph[u].remove(_)\n\n    # if no destination is meant the default value is -1\n    def dfs(self, s=-2, d=-1):\n        if s == d:\n            return []\n        stack = []\n        visited = []\n        if s == -2:\n            s = next(iter(self.graph))\n        stack.append(s)\n        visited.append(s)\n        ss = s\n\n        while True:\n            # check if there is any non isolated nodes\n            if len(self.graph[s]) != 0:\n                ss = s\n                for node in self.graph[s]:\n                    if visited.count(node[1]) < 1:\n                        if node[1] == d:\n                            visited.append(d)\n                            return visited\n                        else:\n                            stack.append(node[1])\n                            visited.append(node[1])\n                            ss = node[1]\n                            break\n\n            # check if all the children are visited\n            if s == ss:\n                stack.pop()\n                if len(stack) != 0:\n                    s = stack[len(stack) - 1]\n            else:\n                s = ss\n\n            # check if se have reached the starting point\n            if len(stack) == 0:\n                return visited\n\n    # c is the count of nodes you want and if you leave it or pass -1 to the function\n    # the count will be random from 10 to 10000\n    def fill_graph_randomly(self, c=-1):\n        if c == -1:\n            c = floor(random() * 10000) + 10\n        for i in range(c):\n            # every vertex has max 100 edges\n            for _ in range(floor(random() * 102) + 1):\n                n = floor(random() * c) + 1\n                if n != i:\n                    self.add_pair(i, n, 1)\n\n    def bfs(self, s=-2):\n        d = deque()\n        visited = []\n        if s == -2:\n            s = next(iter(self.graph))\n        d.append(s)\n        visited.append(s)\n        while d:\n            s = d.popleft()\n            if len(self.graph[s]) != 0:\n                for node in self.graph[s]:\n                    if visited.count(node[1]) < 1:\n                        d.append(node[1])\n                        visited.append(node[1])\n        return visited\n\n    def in_degree(self, u):\n        count = 0\n        for x in self.graph:\n            for y in self.graph[x]:\n                if y[1] == u:\n                    count += 1\n        return count\n\n    def out_degree(self, u):\n        return len(self.graph[u])\n\n    def topological_sort(self, s=-2):\n        stack = []\n        visited = []\n        if s == -2:\n            s = next(iter(self.graph))\n        stack.append(s)\n        visited.append(s)\n        ss = s\n        sorted_nodes = []\n\n        while True:\n            # check if there is any non isolated nodes\n            if len(self.graph[s]) != 0:\n                ss = s\n                for node in self.graph[s]:\n                    if visited.count(node[1]) < 1:\n                        stack.append(node[1])\n                        visited.append(node[1])\n                        ss = node[1]\n                        break\n\n            # check if all the children are visited\n            if s == ss:\n                sorted_nodes.append(stack.pop())\n                if len(stack) != 0:\n                    s = stack[len(stack) - 1]\n            else:\n                s = ss\n\n            # check if se have reached the starting point\n            if len(stack) == 0:\n                return sorted_nodes\n\n    def cycle_nodes(self):\n        stack = []\n        visited = []\n        s = next(iter(self.graph))\n        stack.append(s)\n        visited.append(s)\n        parent = -2\n        indirect_parents = []\n        ss = s\n        on_the_way_back = False\n        anticipating_nodes = set()\n\n        while True:\n            # check if there is any non isolated nodes\n            if len(self.graph[s]) != 0:\n                ss = s\n                for node in self.graph[s]:\n                    if (\n                        visited.count(node[1]) > 0\n                        and node[1] != parent\n                        and indirect_parents.count(node[1]) > 0\n                        and not on_the_way_back\n                    ):\n                        len_stack = len(stack) - 1\n                        while len_stack >= 0:\n                            if stack[len_stack] == node[1]:\n                                anticipating_nodes.add(node[1])\n                                break\n                            else:\n                                anticipating_nodes.add(stack[len_stack])\n                                len_stack -= 1\n                    if visited.count(node[1]) < 1:\n                        stack.append(node[1])\n                        visited.append(node[1])\n                        ss = node[1]\n                        break\n\n            # check if all the children are visited\n            if s == ss:\n                stack.pop()\n                on_the_way_back = True\n                if len(stack) != 0:\n                    s = stack[len(stack) - 1]\n            else:\n                on_the_way_back = False\n                indirect_parents.append(parent)\n                parent = s\n                s = ss\n\n            # check if se have reached the starting point\n            if len(stack) == 0:\n                return list(anticipating_nodes)\n\n    def has_cycle(self):\n        stack = []\n        visited = []\n        s = next(iter(self.graph))\n        stack.append(s)\n        visited.append(s)\n        parent = -2\n        indirect_parents = []\n        ss = s\n        on_the_way_back = False\n        anticipating_nodes = set()\n\n        while True:\n            # check if there is any non isolated nodes\n            if len(self.graph[s]) != 0:\n                ss = s\n                for node in self.graph[s]:\n                    if (\n                        visited.count(node[1]) > 0\n                        and node[1] != parent\n                        and indirect_parents.count(node[1]) > 0\n                        and not on_the_way_back\n                    ):\n                        len_stack_minus_one = len(stack) - 1\n                        while len_stack_minus_one >= 0:\n                            if stack[len_stack_minus_one] == node[1]:\n                                anticipating_nodes.add(node[1])\n                                break\n                            else:\n                                return True\n                    if visited.count(node[1]) < 1:\n                        stack.append(node[1])\n                        visited.append(node[1])\n                        ss = node[1]\n                        break\n\n            # check if all the children are visited\n            if s == ss:\n                stack.pop()\n                on_the_way_back = True\n                if len(stack) != 0:\n                    s = stack[len(stack) - 1]\n            else:\n                on_the_way_back = False\n                indirect_parents.append(parent)\n                parent = s\n                s = ss\n\n            # check if se have reached the starting point\n            if len(stack) == 0:\n                return False\n\n    def dfs_time(self, s=-2, e=-1):\n        begin = time()\n        self.dfs(s, e)\n        end = time()\n        return end - begin\n\n    def bfs_time(self, s=-2):\n        begin = time()\n        self.bfs(s)\n        end = time()\n        return end - begin\n\n\nclass Graph:\n    def __init__(self):\n        self.graph = {}\n\n    # adding vertices and edges\n    # adding the weight is optional\n    # handles repetition\n    def add_pair(self, u, v, w=1):\n        # check if the u exists\n        if self.graph.get(u):\n            # if there already is a edge\n            if self.graph[u].count([w, v]) == 0:\n                self.graph[u].append([w, v])\n        else:\n            # if u does not exist\n            self.graph[u] = [[w, v]]\n        # add the other way\n        if self.graph.get(v):\n            # if there already is a edge\n            if self.graph[v].count([w, u]) == 0:\n                self.graph[v].append([w, u])\n        else:\n            # if u does not exist\n            self.graph[v] = [[w, u]]\n\n    # handles if the input does not exist\n    def remove_pair(self, u, v):\n        if self.graph.get(u):\n            for _ in self.graph[u]:\n                if _[1] == v:\n                    self.graph[u].remove(_)\n        # the other way round\n        if self.graph.get(v):\n            for _ in self.graph[v]:\n                if _[1] == u:\n                    self.graph[v].remove(_)\n\n    # if no destination is meant the default value is -1\n    def dfs(self, s=-2, d=-1):\n        if s == d:\n            return []\n        stack = []\n        visited = []\n        if s == -2:\n            s = next(iter(self.graph))\n        stack.append(s)\n        visited.append(s)\n        ss = s\n\n        while True:\n            # check if there is any non isolated nodes\n            if len(self.graph[s]) != 0:\n                ss = s\n                for node in self.graph[s]:\n                    if visited.count(node[1]) < 1:\n                        if node[1] == d:\n                            visited.append(d)\n                            return visited\n                        else:\n                            stack.append(node[1])\n                            visited.append(node[1])\n                            ss = node[1]\n                            break\n\n            # check if all the children are visited\n            if s == ss:\n                stack.pop()\n                if len(stack) != 0:\n                    s = stack[len(stack) - 1]\n            else:\n                s = ss\n\n            # check if se have reached the starting point\n            if len(stack) == 0:\n                return visited\n\n    # c is the count of nodes you want and if you leave it or pass -1 to the function\n    # the count will be random from 10 to 10000\n    def fill_graph_randomly(self, c=-1):\n        if c == -1:\n            c = floor(random() * 10000) + 10\n        for i in range(c):\n            # every vertex has max 100 edges\n            for _ in range(floor(random() * 102) + 1):\n                n = floor(random() * c) + 1\n                if n != i:\n                    self.add_pair(i, n, 1)\n\n    def bfs(self, s=-2):\n        d = deque()\n        visited = []\n        if s == -2:\n            s = next(iter(self.graph))\n        d.append(s)\n        visited.append(s)\n        while d:\n            s = d.popleft()\n            if len(self.graph[s]) != 0:\n                for node in self.graph[s]:\n                    if visited.count(node[1]) < 1:\n                        d.append(node[1])\n                        visited.append(node[1])\n        return visited\n\n    def degree(self, u):\n        return len(self.graph[u])\n\n    def cycle_nodes(self):\n        stack = []\n        visited = []\n        s = next(iter(self.graph))\n        stack.append(s)\n        visited.append(s)\n        parent = -2\n        indirect_parents = []\n        ss = s\n        on_the_way_back = False\n        anticipating_nodes = set()\n\n        while True:\n            # check if there is any non isolated nodes\n            if len(self.graph[s]) != 0:\n                ss = s\n                for node in self.graph[s]:\n                    if (\n                        visited.count(node[1]) > 0\n                        and node[1] != parent\n                        and indirect_parents.count(node[1]) > 0\n                        and not on_the_way_back\n                    ):\n                        len_stack = len(stack) - 1\n                        while len_stack >= 0:\n                            if stack[len_stack] == node[1]:\n                                anticipating_nodes.add(node[1])\n                                break\n                            else:\n                                anticipating_nodes.add(stack[len_stack])\n                                len_stack -= 1\n                    if visited.count(node[1]) < 1:\n                        stack.append(node[1])\n                        visited.append(node[1])\n                        ss = node[1]\n                        break\n\n            # check if all the children are visited\n            if s == ss:\n                stack.pop()\n                on_the_way_back = True\n                if len(stack) != 0:\n                    s = stack[len(stack) - 1]\n            else:\n                on_the_way_back = False\n                indirect_parents.append(parent)\n                parent = s\n                s = ss\n\n            # check if se have reached the starting point\n            if len(stack) == 0:\n                return list(anticipating_nodes)\n\n    def has_cycle(self):\n        stack = []\n        visited = []\n        s = next(iter(self.graph))\n        stack.append(s)\n        visited.append(s)\n        parent = -2\n        indirect_parents = []\n        ss = s\n        on_the_way_back = False\n        anticipating_nodes = set()\n\n        while True:\n            # check if there is any non isolated nodes\n            if len(self.graph[s]) != 0:\n                ss = s\n                for node in self.graph[s]:\n                    if (\n                        visited.count(node[1]) > 0\n                        and node[1] != parent\n                        and indirect_parents.count(node[1]) > 0\n                        and not on_the_way_back\n                    ):\n                        len_stack_minus_one = len(stack) - 1\n                        while len_stack_minus_one >= 0:\n                            if stack[len_stack_minus_one] == node[1]:\n                                anticipating_nodes.add(node[1])\n                                break\n                            else:\n                                return True\n                    if visited.count(node[1]) < 1:\n                        stack.append(node[1])\n                        visited.append(node[1])\n                        ss = node[1]\n                        break\n\n            # check if all the children are visited\n            if s == ss:\n                stack.pop()\n                on_the_way_back = True\n                if len(stack) != 0:\n                    s = stack[len(stack) - 1]\n            else:\n                on_the_way_back = False\n                indirect_parents.append(parent)\n                parent = s\n                s = ss\n\n            # check if se have reached the starting point\n            if len(stack) == 0:\n                return False\n\n    def all_nodes(self):\n        return list(self.graph)\n\n    def dfs_time(self, s=-2, e=-1):\n        begin = time()\n        self.dfs(s, e)\n        end = time()\n        return end - begin\n\n    def bfs_time(self, s=-2):\n        begin = time()\n        self.bfs(s)\n        end = time()\n        return end - begin\n"
  },
  {
    "path": "graphs/edmonds_karp_multiple_source_and_sink.py",
    "content": "class FlowNetwork:\n    def __init__(self, graph, sources, sinks):\n        self.source_index = None\n        self.sink_index = None\n        self.graph = graph\n\n        self._normalize_graph(sources, sinks)\n        self.vertices_count = len(graph)\n        self.maximum_flow_algorithm = None\n\n    # make only one source and one sink\n    def _normalize_graph(self, sources, sinks):\n        if sources is int:\n            sources = [sources]\n        if sinks is int:\n            sinks = [sinks]\n\n        if len(sources) == 0 or len(sinks) == 0:\n            return\n\n        self.source_index = sources[0]\n        self.sink_index = sinks[0]\n\n        # make fake vertex if there are more\n        # than one source or sink\n        if len(sources) > 1 or len(sinks) > 1:\n            max_input_flow = 0\n            for i in sources:\n                max_input_flow += sum(self.graph[i])\n\n            size = len(self.graph) + 1\n            for room in self.graph:\n                room.insert(0, 0)\n            self.graph.insert(0, [0] * size)\n            for i in sources:\n                self.graph[0][i + 1] = max_input_flow\n            self.source_index = 0\n\n            size = len(self.graph) + 1\n            for room in self.graph:\n                room.append(0)\n            self.graph.append([0] * size)\n            for i in sinks:\n                self.graph[i + 1][size - 1] = max_input_flow\n            self.sink_index = size - 1\n\n    def find_maximum_flow(self):\n        if self.maximum_flow_algorithm is None:\n            raise Exception(\"You need to set maximum flow algorithm before.\")\n        if self.source_index is None or self.sink_index is None:\n            return 0\n\n        self.maximum_flow_algorithm.execute()\n        return self.maximum_flow_algorithm.getMaximumFlow()\n\n    def set_maximum_flow_algorithm(self, algorithm):\n        self.maximum_flow_algorithm = algorithm(self)\n\n\nclass FlowNetworkAlgorithmExecutor:\n    def __init__(self, flow_network):\n        self.flow_network = flow_network\n        self.verticies_count = flow_network.verticesCount\n        self.source_index = flow_network.sourceIndex\n        self.sink_index = flow_network.sinkIndex\n        # it's just a reference, so you shouldn't change\n        # it in your algorithms, use deep copy before doing that\n        self.graph = flow_network.graph\n        self.executed = False\n\n    def execute(self):\n        if not self.executed:\n            self._algorithm()\n            self.executed = True\n\n    # You should override it\n    def _algorithm(self):\n        pass\n\n\nclass MaximumFlowAlgorithmExecutor(FlowNetworkAlgorithmExecutor):\n    def __init__(self, flow_network):\n        super().__init__(flow_network)\n        # use this to save your result\n        self.maximum_flow = -1\n\n    def get_maximum_flow(self):\n        if not self.executed:\n            raise Exception(\"You should execute algorithm before using its result!\")\n\n        return self.maximum_flow\n\n\nclass PushRelabelExecutor(MaximumFlowAlgorithmExecutor):\n    def __init__(self, flow_network):\n        super().__init__(flow_network)\n\n        self.preflow = [[0] * self.verticies_count for i in range(self.verticies_count)]\n\n        self.heights = [0] * self.verticies_count\n        self.excesses = [0] * self.verticies_count\n\n    def _algorithm(self):\n        self.heights[self.source_index] = self.verticies_count\n\n        # push some substance to graph\n        for nextvertex_index, bandwidth in enumerate(self.graph[self.source_index]):\n            self.preflow[self.source_index][nextvertex_index] += bandwidth\n            self.preflow[nextvertex_index][self.source_index] -= bandwidth\n            self.excesses[nextvertex_index] += bandwidth\n\n        # Relabel-to-front selection rule\n        vertices_list = [\n            i\n            for i in range(self.verticies_count)\n            if i not in {self.source_index, self.sink_index}\n        ]\n\n        # move through list\n        i = 0\n        while i < len(vertices_list):\n            vertex_index = vertices_list[i]\n            previous_height = self.heights[vertex_index]\n            self.process_vertex(vertex_index)\n            if self.heights[vertex_index] > previous_height:\n                # if it was relabeled, swap elements\n                # and start from 0 index\n                vertices_list.insert(0, vertices_list.pop(i))\n                i = 0\n            else:\n                i += 1\n\n        self.maximum_flow = sum(self.preflow[self.source_index])\n\n    def process_vertex(self, vertex_index):\n        while self.excesses[vertex_index] > 0:\n            for neighbour_index in range(self.verticies_count):\n                # if it's neighbour and current vertex is higher\n                if (\n                    self.graph[vertex_index][neighbour_index]\n                    - self.preflow[vertex_index][neighbour_index]\n                    > 0\n                    and self.heights[vertex_index] > self.heights[neighbour_index]\n                ):\n                    self.push(vertex_index, neighbour_index)\n\n            self.relabel(vertex_index)\n\n    def push(self, from_index, to_index):\n        preflow_delta = min(\n            self.excesses[from_index],\n            self.graph[from_index][to_index] - self.preflow[from_index][to_index],\n        )\n        self.preflow[from_index][to_index] += preflow_delta\n        self.preflow[to_index][from_index] -= preflow_delta\n        self.excesses[from_index] -= preflow_delta\n        self.excesses[to_index] += preflow_delta\n\n    def relabel(self, vertex_index):\n        min_height = None\n        for to_index in range(self.verticies_count):\n            if (\n                self.graph[vertex_index][to_index]\n                - self.preflow[vertex_index][to_index]\n                > 0\n            ) and (min_height is None or self.heights[to_index] < min_height):\n                min_height = self.heights[to_index]\n\n        if min_height is not None:\n            self.heights[vertex_index] = min_height + 1\n\n\nif __name__ == \"__main__\":\n    entrances = [0]\n    exits = [3]\n    # graph = [\n    #     [0, 0, 4, 6, 0, 0],\n    #     [0, 0, 5, 2, 0, 0],\n    #     [0, 0, 0, 0, 4, 4],\n    #     [0, 0, 0, 0, 6, 6],\n    #     [0, 0, 0, 0, 0, 0],\n    #     [0, 0, 0, 0, 0, 0],\n    # ]\n    graph = [[0, 7, 0, 0], [0, 0, 6, 0], [0, 0, 0, 8], [9, 0, 0, 0]]\n\n    # prepare our network\n    flow_network = FlowNetwork(graph, entrances, exits)\n    # set algorithm\n    flow_network.set_maximum_flow_algorithm(PushRelabelExecutor)\n    # and calculate\n    maximum_flow = flow_network.find_maximum_flow()\n\n    print(f\"maximum flow is {maximum_flow}\")\n"
  },
  {
    "path": "graphs/eulerian_path_and_circuit_for_undirected_graph.py",
    "content": "# Eulerian Path is a path in graph that visits every edge exactly once.\n# Eulerian Circuit is an Eulerian Path which starts and ends on the same\n# vertex.\n# time complexity is O(V+E)\n# space complexity is O(VE)\n\n\n# using dfs for finding eulerian path traversal\ndef dfs(u, graph, visited_edge, path=None):\n    path = (path or []) + [u]\n    for v in graph[u]:\n        if visited_edge[u][v] is False:\n            visited_edge[u][v], visited_edge[v][u] = True, True\n            path = dfs(v, graph, visited_edge, path)\n    return path\n\n\n# for checking in graph has euler path or circuit\ndef check_circuit_or_path(graph, max_node):\n    odd_degree_nodes = 0\n    odd_node = -1\n    for i in range(max_node):\n        if i not in graph:\n            continue\n        if len(graph[i]) % 2 == 1:\n            odd_degree_nodes += 1\n            odd_node = i\n    if odd_degree_nodes == 0:\n        return 1, odd_node\n    if odd_degree_nodes == 2:\n        return 2, odd_node\n    return 3, odd_node\n\n\ndef check_euler(graph, max_node):\n    visited_edge = [[False for _ in range(max_node + 1)] for _ in range(max_node + 1)]\n    check, odd_node = check_circuit_or_path(graph, max_node)\n    if check == 3:\n        print(\"graph is not Eulerian\")\n        print(\"no path\")\n        return\n    start_node = 1\n    if check == 2:\n        start_node = odd_node\n        print(\"graph has a Euler path\")\n    if check == 1:\n        print(\"graph has a Euler cycle\")\n    path = dfs(start_node, graph, visited_edge)\n    print(path)\n\n\ndef main():\n    g1 = {1: [2, 3, 4], 2: [1, 3], 3: [1, 2], 4: [1, 5], 5: [4]}\n    g2 = {1: [2, 3, 4, 5], 2: [1, 3], 3: [1, 2], 4: [1, 5], 5: [1, 4]}\n    g3 = {1: [2, 3, 4], 2: [1, 3, 4], 3: [1, 2], 4: [1, 2, 5], 5: [4]}\n    g4 = {1: [2, 3], 2: [1, 3], 3: [1, 2]}\n    g5 = {\n        1: [],\n        2: [],\n        # all degree is zero\n    }\n    max_node = 10\n    check_euler(g1, max_node)\n    check_euler(g2, max_node)\n    check_euler(g3, max_node)\n    check_euler(g4, max_node)\n    check_euler(g5, max_node)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "graphs/even_tree.py",
    "content": "\"\"\"\nYou are given a tree(a simple connected graph with no cycles). The tree has N\nnodes numbered from 1 to N and is rooted at node 1.\n\nFind the maximum number of edges you can remove from the tree to get a forest\nsuch that each connected component of the forest contains an even number of\nnodes.\n\nConstraints\n2 <= 2 <= 100\n\nNote: The tree input will be such that it can always be decomposed into\ncomponents containing an even number of nodes.\n\"\"\"\n\n# pylint: disable=invalid-name\nfrom collections import defaultdict\n\n\ndef dfs(start: int) -> int:\n    \"\"\"DFS traversal\"\"\"\n    # pylint: disable=redefined-outer-name\n    ret = 1\n    visited[start] = True\n    for v in tree[start]:\n        if v not in visited:\n            ret += dfs(v)\n    if ret % 2 == 0:\n        cuts.append(start)\n    return ret\n\n\ndef even_tree():\n    \"\"\"\n    2 1\n    3 1\n    4 3\n    5 2\n    6 1\n    7 2\n    8 6\n    9 8\n    10 8\n    On removing edges (1,3) and (1,6), we can get the desired result 2.\n    \"\"\"\n    dfs(1)\n\n\nif __name__ == \"__main__\":\n    n, m = 10, 9\n    tree = defaultdict(list)\n    visited: dict[int, bool] = {}\n    cuts: list[int] = []\n    count = 0\n    edges = [(2, 1), (3, 1), (4, 3), (5, 2), (6, 1), (7, 2), (8, 6), (9, 8), (10, 8)]\n    for u, v in edges:\n        tree[u].append(v)\n        tree[v].append(u)\n    even_tree()\n    print(len(cuts) - 1)\n"
  },
  {
    "path": "graphs/finding_bridges.py",
    "content": "\"\"\"\nAn edge is a bridge if, after removing it count of connected components in graph will\nbe increased by one. Bridges represent vulnerabilities in a connected network and are\nuseful for designing reliable networks. For example, in a wired computer network, an\narticulation point indicates the critical computers and a bridge indicates the critical\nwires or connections.\n\nFor more details, refer this article:\nhttps://www.geeksforgeeks.org/bridge-in-a-graph/\n\"\"\"\n\n\ndef __get_demo_graph(index):\n    return [\n        {\n            0: [1, 2],\n            1: [0, 2],\n            2: [0, 1, 3, 5],\n            3: [2, 4],\n            4: [3],\n            5: [2, 6, 8],\n            6: [5, 7],\n            7: [6, 8],\n            8: [5, 7],\n        },\n        {\n            0: [6],\n            1: [9],\n            2: [4, 5],\n            3: [4],\n            4: [2, 3],\n            5: [2],\n            6: [0, 7],\n            7: [6],\n            8: [],\n            9: [1],\n        },\n        {\n            0: [4],\n            1: [6],\n            2: [],\n            3: [5, 6, 7],\n            4: [0, 6],\n            5: [3, 8, 9],\n            6: [1, 3, 4, 7],\n            7: [3, 6, 8, 9],\n            8: [5, 7],\n            9: [5, 7],\n        },\n        {\n            0: [1, 3],\n            1: [0, 2, 4],\n            2: [1, 3, 4],\n            3: [0, 2, 4],\n            4: [1, 2, 3],\n        },\n    ][index]\n\n\ndef compute_bridges(graph: dict[int, list[int]]) -> list[tuple[int, int]]:\n    \"\"\"\n    Return the list of undirected graph bridges [(a1, b1), ..., (ak, bk)]; ai <= bi\n    >>> compute_bridges(__get_demo_graph(0))\n    [(3, 4), (2, 3), (2, 5)]\n    >>> compute_bridges(__get_demo_graph(1))\n    [(6, 7), (0, 6), (1, 9), (3, 4), (2, 4), (2, 5)]\n    >>> compute_bridges(__get_demo_graph(2))\n    [(1, 6), (4, 6), (0, 4)]\n    >>> compute_bridges(__get_demo_graph(3))\n    []\n    >>> compute_bridges({})\n    []\n    \"\"\"\n\n    id_ = 0\n    n = len(graph)  # No of vertices in graph\n    low = [0] * n\n    visited = [False] * n\n\n    def dfs(at, parent, bridges, id_):\n        visited[at] = True\n        low[at] = id_\n        id_ += 1\n        for to in graph[at]:\n            if to == parent:\n                pass\n            elif not visited[to]:\n                dfs(to, at, bridges, id_)\n                low[at] = min(low[at], low[to])\n                if id_ <= low[to]:\n                    bridges.append((at, to) if at < to else (to, at))\n            else:\n                # This edge is a back edge and cannot be a bridge\n                low[at] = min(low[at], low[to])\n\n    bridges: list[tuple[int, int]] = []\n    for i in range(n):\n        if not visited[i]:\n            dfs(i, -1, bridges, id_)\n    return bridges\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "graphs/frequent_pattern_graph_miner.py",
    "content": "\"\"\"\r\nFP-GraphMiner - A Fast Frequent Pattern Mining Algorithm for Network Graphs\r\n\r\nA novel Frequent Pattern Graph Mining algorithm, FP-GraphMiner, that compactly\r\nrepresents a set of network graphs as a Frequent Pattern Graph (or FP-Graph).\r\nThis graph can be used to efficiently mine frequent subgraphs including maximal\r\nfrequent subgraphs and maximum common subgraphs.\r\n\r\nURL: https://www.researchgate.net/publication/235255851\r\n\"\"\"\r\n\r\n# fmt: off\r\nedge_array = [\r\n    ['ab-e1', 'ac-e3', 'ad-e5', 'bc-e4', 'bd-e2', 'be-e6', 'bh-e12', 'cd-e2', 'ce-e4',\r\n     'de-e1', 'df-e8', 'dg-e5', 'dh-e10', 'ef-e3', 'eg-e2', 'fg-e6', 'gh-e6', 'hi-e3'],\r\n    ['ab-e1', 'ac-e3', 'ad-e5', 'bc-e4', 'bd-e2', 'be-e6', 'cd-e2', 'de-e1', 'df-e8',\r\n     'ef-e3', 'eg-e2', 'fg-e6'],\r\n    ['ab-e1', 'ac-e3', 'bc-e4', 'bd-e2', 'de-e1', 'df-e8', 'dg-e5', 'ef-e3', 'eg-e2',\r\n     'eh-e12', 'fg-e6', 'fh-e10', 'gh-e6'],\r\n    ['ab-e1', 'ac-e3', 'bc-e4', 'bd-e2', 'bh-e12', 'cd-e2', 'df-e8', 'dh-e10'],\r\n    ['ab-e1', 'ac-e3', 'ad-e5', 'bc-e4', 'bd-e2', 'cd-e2', 'ce-e4', 'de-e1', 'df-e8',\r\n     'dg-e5', 'ef-e3', 'eg-e2', 'fg-e6']\r\n]\r\n# fmt: on\r\n\r\n\r\ndef get_distinct_edge(edge_array):\r\n    \"\"\"\r\n    Return Distinct edges from edge array of multiple graphs\r\n    >>> sorted(get_distinct_edge(edge_array))\r\n    ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']\r\n    \"\"\"\r\n    distinct_edge = set()\r\n    for row in edge_array:\r\n        for item in row:\r\n            distinct_edge.add(item[0])\r\n    return list(distinct_edge)\r\n\r\n\r\ndef get_bitcode(edge_array, distinct_edge):\r\n    \"\"\"\r\n    Return bitcode of distinct_edge\r\n    \"\"\"\r\n    bitcode = [\"0\"] * len(edge_array)\r\n    for i, row in enumerate(edge_array):\r\n        for item in row:\r\n            if distinct_edge in item[0]:\r\n                bitcode[i] = \"1\"\r\n                break\r\n    return \"\".join(bitcode)\r\n\r\n\r\ndef get_frequency_table(edge_array):\r\n    \"\"\"\r\n    Returns Frequency Table\r\n    \"\"\"\r\n    distinct_edge = get_distinct_edge(edge_array)\r\n    frequency_table = {}\r\n\r\n    for item in distinct_edge:\r\n        bit = get_bitcode(edge_array, item)\r\n        # print('bit',bit)\r\n        # bt=''.join(bit)\r\n        s = bit.count(\"1\")\r\n        frequency_table[item] = [s, bit]\r\n    # Store [Distinct edge, WT(Bitcode), Bitcode] in descending order\r\n    sorted_frequency_table = [\r\n        [k, v[0], v[1]]\r\n        for k, v in sorted(frequency_table.items(), key=lambda v: v[1][0], reverse=True)\r\n    ]\r\n    return sorted_frequency_table\r\n\r\n\r\ndef get_nodes(frequency_table):\r\n    \"\"\"\r\n    Returns nodes\r\n    format nodes={bitcode:edges that represent the bitcode}\r\n    >>> get_nodes([['ab', 5, '11111'], ['ac', 5, '11111'], ['df', 5, '11111'],\r\n    ...            ['bd', 5, '11111'], ['bc', 5, '11111']])\r\n    {'11111': ['ab', 'ac', 'df', 'bd', 'bc']}\r\n    \"\"\"\r\n    nodes = {}\r\n    for _, item in enumerate(frequency_table):\r\n        nodes.setdefault(item[2], []).append(item[0])\r\n    return nodes\r\n\r\n\r\ndef get_cluster(nodes):\r\n    \"\"\"\r\n    Returns cluster\r\n    format cluster:{WT(bitcode):nodes with same WT}\r\n    \"\"\"\r\n    cluster = {}\r\n    for key, value in nodes.items():\r\n        cluster.setdefault(key.count(\"1\"), {})[key] = value\r\n    return cluster\r\n\r\n\r\ndef get_support(cluster):\r\n    \"\"\"\r\n    Returns support\r\n    >>> get_support({5: {'11111': ['ab', 'ac', 'df', 'bd', 'bc']},\r\n    ...              4: {'11101': ['ef', 'eg', 'de', 'fg'], '11011': ['cd']},\r\n    ...              3: {'11001': ['ad'], '10101': ['dg']},\r\n    ...              2: {'10010': ['dh', 'bh'], '11000': ['be'], '10100': ['gh'],\r\n    ...                  '10001': ['ce']},\r\n    ...              1: {'00100': ['fh', 'eh'], '10000': ['hi']}})\r\n    [100.0, 80.0, 60.0, 40.0, 20.0]\r\n    \"\"\"\r\n    return [i * 100 / len(cluster) for i in cluster]\r\n\r\n\r\ndef print_all() -> None:\r\n    print(\"\\nNodes\\n\")\r\n    for key, value in nodes.items():\r\n        print(key, value)\r\n    print(\"\\nSupport\\n\")\r\n    print(support)\r\n    print(\"\\n Cluster \\n\")\r\n    for key, value in sorted(cluster.items(), reverse=True):\r\n        print(key, value)\r\n    print(\"\\n Graph\\n\")\r\n    for key, value in graph.items():\r\n        print(key, value)\r\n    print(\"\\n Edge List of Frequent subgraphs \\n\")\r\n    for edge_list in freq_subgraph_edge_list:\r\n        print(edge_list)\r\n\r\n\r\ndef create_edge(nodes, graph, cluster, c1):\r\n    \"\"\"\r\n    create edge between the nodes\r\n    \"\"\"\r\n    for i in cluster[c1]:\r\n        count = 0\r\n        c2 = c1 + 1\r\n        while c2 < max(cluster.keys()):\r\n            for j in cluster[c2]:\r\n                \"\"\"\r\n                creates edge only if the condition satisfies\r\n                \"\"\"\r\n                if int(i, 2) & int(j, 2) == int(i, 2):\r\n                    if tuple(nodes[i]) in graph:\r\n                        graph[tuple(nodes[i])].append(nodes[j])\r\n                    else:\r\n                        graph[tuple(nodes[i])] = [nodes[j]]\r\n                    count += 1\r\n            if count == 0:\r\n                c2 = c2 + 1\r\n            else:\r\n                break\r\n\r\n\r\ndef construct_graph(cluster, nodes):\r\n    x = cluster[max(cluster.keys())]\r\n    cluster[max(cluster.keys()) + 1] = \"Header\"\r\n    graph = {}\r\n    for i in x:\r\n        if ([\"Header\"],) in graph:\r\n            graph[([\"Header\"],)].append(x[i])\r\n        else:\r\n            graph[([\"Header\"],)] = [x[i]]\r\n    for i in x:\r\n        graph[(x[i],)] = [[\"Header\"]]\r\n    i = 1\r\n    while i < max(cluster) - 1:\r\n        create_edge(nodes, graph, cluster, i)\r\n        i = i + 1\r\n    return graph\r\n\r\n\r\ndef my_dfs(graph, start, end, path=None):\r\n    \"\"\"\r\n    find different DFS walk from given node to Header node\r\n    \"\"\"\r\n    path = (path or []) + [start]\r\n    if start == end:\r\n        paths.append(path)\r\n    for node in graph[start]:\r\n        if tuple(node) not in path:\r\n            my_dfs(graph, tuple(node), end, path)\r\n\r\n\r\ndef find_freq_subgraph_given_support(s, cluster, graph):\r\n    \"\"\"\r\n    find edges of multiple frequent subgraphs\r\n    \"\"\"\r\n    k = int(s / 100 * (len(cluster) - 1))\r\n    for i in cluster[k]:\r\n        my_dfs(graph, tuple(cluster[k][i]), ([\"Header\"],))\r\n\r\n\r\ndef freq_subgraphs_edge_list(paths):\r\n    \"\"\"\r\n    returns Edge list for frequent subgraphs\r\n    \"\"\"\r\n    freq_sub_el = []\r\n    for edges in paths:\r\n        el = []\r\n        for j in range(len(edges) - 1):\r\n            temp = list(edges[j])\r\n            for e in temp:\r\n                edge = (e[0], e[1])\r\n                el.append(edge)\r\n        freq_sub_el.append(el)\r\n    return freq_sub_el\r\n\r\n\r\ndef preprocess(edge_array):\r\n    \"\"\"\r\n    Preprocess the edge array\r\n    >>> preprocess([['ab-e1', 'ac-e3', 'ad-e5', 'bc-e4', 'bd-e2', 'be-e6', 'bh-e12',\r\n    ...              'cd-e2', 'ce-e4', 'de-e1', 'df-e8', 'dg-e5', 'dh-e10', 'ef-e3',\r\n    ...              'eg-e2', 'fg-e6', 'gh-e6', 'hi-e3']])\r\n\r\n    \"\"\"\r\n    for i in range(len(edge_array)):\r\n        for j in range(len(edge_array[i])):\r\n            t = edge_array[i][j].split(\"-\")\r\n            edge_array[i][j] = t\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    preprocess(edge_array)\r\n    frequency_table = get_frequency_table(edge_array)\r\n    nodes = get_nodes(frequency_table)\r\n    cluster = get_cluster(nodes)\r\n    support = get_support(cluster)\r\n    graph = construct_graph(cluster, nodes)\r\n    find_freq_subgraph_given_support(60, cluster, graph)\r\n    paths: list = []\r\n    freq_subgraph_edge_list = freq_subgraphs_edge_list(paths)\r\n    print_all()\r\n"
  },
  {
    "path": "graphs/g_topological_sort.py",
    "content": "# Author: Phyllipe Bezerra (https://github.com/pmba)\n\nclothes = {\n    0: \"underwear\",\n    1: \"pants\",\n    2: \"belt\",\n    3: \"suit\",\n    4: \"shoe\",\n    5: \"socks\",\n    6: \"shirt\",\n    7: \"tie\",\n    8: \"watch\",\n}\n\ngraph = [[1, 4], [2, 4], [3], [], [], [4], [2, 7], [3], []]\n\nvisited = [0 for x in range(len(graph))]\nstack = []\n\n\ndef print_stack(stack, clothes):\n    order = 1\n    while stack:\n        current_clothing = stack.pop()\n        print(order, clothes[current_clothing])\n        order += 1\n\n\ndef depth_first_search(u, visited, graph):\n    visited[u] = 1\n    for v in graph[u]:\n        if not visited[v]:\n            depth_first_search(v, visited, graph)\n\n    stack.append(u)\n\n\ndef topological_sort(graph, visited):\n    for v in range(len(graph)):\n        if not visited[v]:\n            depth_first_search(v, visited, graph)\n\n\nif __name__ == \"__main__\":\n    topological_sort(graph, visited)\n    print(stack)\n    print_stack(stack, clothes)\n"
  },
  {
    "path": "graphs/gale_shapley_bigraph.py",
    "content": "from __future__ import annotations\n\n\ndef stable_matching(\n    donor_pref: list[list[int]], recipient_pref: list[list[int]]\n) -> list[int]:\n    \"\"\"\n    Finds the stable match in any bipartite graph, i.e a pairing where no 2 objects\n    prefer each other over their partner.  The function accepts the preferences of\n    oegan donors and recipients (where both are assigned numbers from 0 to n-1) and\n    returns a list where the index position corresponds to the donor and value at the\n    index is the organ recipient.\n\n    To better understand the algorithm, see also:\n    https://github.com/akashvshroff/Gale_Shapley_Stable_Matching (README).\n    https://www.youtube.com/watch?v=Qcv1IqHWAzg&t=13s (Numberphile YouTube).\n\n    >>> donor_pref = [[0, 1, 3, 2], [0, 2, 3, 1], [1, 0, 2, 3], [0, 3, 1, 2]]\n    >>> recipient_pref = [[3, 1, 2, 0], [3, 1, 0, 2], [0, 3, 1, 2], [1, 0, 3, 2]]\n    >>> stable_matching(donor_pref, recipient_pref)\n    [1, 2, 3, 0]\n    \"\"\"\n    assert len(donor_pref) == len(recipient_pref)\n\n    n = len(donor_pref)\n    unmatched_donors = list(range(n))\n    donor_record = [-1] * n  # who the donor has donated to\n    rec_record = [-1] * n  # who the recipient has received from\n    num_donations = [0] * n\n\n    while unmatched_donors:\n        donor = unmatched_donors[0]\n        donor_preference = donor_pref[donor]\n        recipient = donor_preference[num_donations[donor]]\n        num_donations[donor] += 1\n        rec_preference = recipient_pref[recipient]\n        prev_donor = rec_record[recipient]\n\n        if prev_donor != -1:\n            if rec_preference.index(prev_donor) > rec_preference.index(donor):\n                rec_record[recipient] = donor\n                donor_record[donor] = recipient\n                unmatched_donors.append(prev_donor)\n                unmatched_donors.remove(donor)\n        else:\n            rec_record[recipient] = donor\n            donor_record[donor] = recipient\n            unmatched_donors.remove(donor)\n    return donor_record\n"
  },
  {
    "path": "graphs/graph_adjacency_list.py",
    "content": "#!/usr/bin/env python3\n\"\"\"\nAuthor: Vikram Nithyanandam\n\nDescription:\nThe following implementation is a robust unweighted Graph data structure\nimplemented using an adjacency list. This vertices and edges of this graph can be\neffectively initialized and modified while storing your chosen generic\nvalue in each vertex.\n\nAdjacency List: https://en.wikipedia.org/wiki/Adjacency_list\n\nPotential Future Ideas:\n- Add a flag to set edge weights on and set edge weights\n- Make edge weights and vertex values customizable to store whatever the client wants\n- Support multigraph functionality if the client wants it\n\"\"\"\n\nfrom __future__ import annotations\n\nimport random\nimport unittest\nfrom pprint import pformat\nfrom typing import TypeVar\n\nimport pytest\n\nT = TypeVar(\"T\")\n\n\nclass GraphAdjacencyList[T]:\n    def __init__(\n        self, vertices: list[T], edges: list[list[T]], directed: bool = True\n    ) -> None:\n        \"\"\"\n        Parameters:\n         - vertices: (list[T]) The list of vertex names the client wants to\n        pass in. Default is empty.\n        - edges: (list[list[T]]) The list of edges the client wants to\n        pass in. Each edge is a 2-element list. Default is empty.\n        - directed: (bool) Indicates if graph is directed or undirected.\n        Default is True.\n        \"\"\"\n        self.adj_list: dict[T, list[T]] = {}  # dictionary of lists of T\n        self.directed = directed\n\n        # Falsey checks\n        edges = edges or []\n        vertices = vertices or []\n\n        for vertex in vertices:\n            self.add_vertex(vertex)\n\n        for edge in edges:\n            if len(edge) != 2:\n                msg = f\"Invalid input: {edge} is the wrong length.\"\n                raise ValueError(msg)\n            self.add_edge(edge[0], edge[1])\n\n    def add_vertex(self, vertex: T) -> None:\n        \"\"\"\n        Adds a vertex to the graph. If the given vertex already exists,\n        a ValueError will be thrown.\n\n        >>> g = GraphAdjacencyList(vertices=[], edges=[], directed=False)\n        >>> g.add_vertex(\"A\")\n        >>> g.adj_list\n        {'A': []}\n        >>> g.add_vertex(\"A\")\n        Traceback (most recent call last):\n        ...\n        ValueError: Incorrect input: A is already in the graph.\n        \"\"\"\n        if self.contains_vertex(vertex):\n            msg = f\"Incorrect input: {vertex} is already in the graph.\"\n            raise ValueError(msg)\n        self.adj_list[vertex] = []\n\n    def add_edge(self, source_vertex: T, destination_vertex: T) -> None:\n        \"\"\"\n        Creates an edge from source vertex to destination vertex. If any\n        given vertex doesn't exist or the edge already exists, a ValueError\n        will be thrown.\n        \"\"\"\n        if not (\n            self.contains_vertex(source_vertex)\n            and self.contains_vertex(destination_vertex)\n        ):\n            msg = (\n                f\"Incorrect input: Either {source_vertex} or \"\n                f\"{destination_vertex} does not exist\"\n            )\n            raise ValueError(msg)\n        if self.contains_edge(source_vertex, destination_vertex):\n            msg = (\n                \"Incorrect input: The edge already exists between \"\n                f\"{source_vertex} and {destination_vertex}\"\n            )\n            raise ValueError(msg)\n\n        # add the destination vertex to the list associated with the source vertex\n        # and vice versa if not directed\n        self.adj_list[source_vertex].append(destination_vertex)\n        if not self.directed:\n            self.adj_list[destination_vertex].append(source_vertex)\n\n    def remove_vertex(self, vertex: T) -> None:\n        \"\"\"\n        Removes the given vertex from the graph and deletes all incoming and\n        outgoing edges from the given vertex as well. If the given vertex\n        does not exist, a ValueError will be thrown.\n        \"\"\"\n        if not self.contains_vertex(vertex):\n            msg = f\"Incorrect input: {vertex} does not exist in this graph.\"\n            raise ValueError(msg)\n\n        if not self.directed:\n            # If not directed, find all neighboring vertices and delete all references\n            # of edges connecting to the given vertex\n            for neighbor in self.adj_list[vertex]:\n                self.adj_list[neighbor].remove(vertex)\n        else:\n            # If directed, search all neighbors of all vertices and delete all\n            # references of edges connecting to the given vertex\n            for edge_list in self.adj_list.values():\n                if vertex in edge_list:\n                    edge_list.remove(vertex)\n\n        # Finally, delete the given vertex and all of its outgoing edge references\n        self.adj_list.pop(vertex)\n\n    def remove_edge(self, source_vertex: T, destination_vertex: T) -> None:\n        \"\"\"\n        Removes the edge between the two vertices. If any given vertex\n        doesn't exist or the edge does not exist, a ValueError will be thrown.\n        \"\"\"\n        if not (\n            self.contains_vertex(source_vertex)\n            and self.contains_vertex(destination_vertex)\n        ):\n            msg = (\n                f\"Incorrect input: Either {source_vertex} or \"\n                f\"{destination_vertex} does not exist\"\n            )\n            raise ValueError(msg)\n        if not self.contains_edge(source_vertex, destination_vertex):\n            msg = (\n                \"Incorrect input: The edge does NOT exist between \"\n                f\"{source_vertex} and {destination_vertex}\"\n            )\n            raise ValueError(msg)\n\n        # remove the destination vertex from the list associated with the source\n        # vertex and vice versa if not directed\n        self.adj_list[source_vertex].remove(destination_vertex)\n        if not self.directed:\n            self.adj_list[destination_vertex].remove(source_vertex)\n\n    def contains_vertex(self, vertex: T) -> bool:\n        \"\"\"\n        Returns True if the graph contains the vertex, False otherwise.\n        \"\"\"\n        return vertex in self.adj_list\n\n    def contains_edge(self, source_vertex: T, destination_vertex: T) -> bool:\n        \"\"\"\n        Returns True if the graph contains the edge from the source_vertex to the\n        destination_vertex, False otherwise. If any given vertex doesn't exist, a\n        ValueError will be thrown.\n        \"\"\"\n        if not (\n            self.contains_vertex(source_vertex)\n            and self.contains_vertex(destination_vertex)\n        ):\n            msg = (\n                f\"Incorrect input: Either {source_vertex} \"\n                f\"or {destination_vertex} does not exist.\"\n            )\n            raise ValueError(msg)\n\n        return destination_vertex in self.adj_list[source_vertex]\n\n    def clear_graph(self) -> None:\n        \"\"\"\n        Clears all vertices and edges.\n        \"\"\"\n        self.adj_list = {}\n\n    def __repr__(self) -> str:\n        return pformat(self.adj_list)\n\n\nclass TestGraphAdjacencyList(unittest.TestCase):\n    def __assert_graph_edge_exists_check(\n        self,\n        undirected_graph: GraphAdjacencyList,\n        directed_graph: GraphAdjacencyList,\n        edge: list[int],\n    ) -> None:\n        assert undirected_graph.contains_edge(edge[0], edge[1])\n        assert undirected_graph.contains_edge(edge[1], edge[0])\n        assert directed_graph.contains_edge(edge[0], edge[1])\n\n    def __assert_graph_edge_does_not_exist_check(\n        self,\n        undirected_graph: GraphAdjacencyList,\n        directed_graph: GraphAdjacencyList,\n        edge: list[int],\n    ) -> None:\n        assert not undirected_graph.contains_edge(edge[0], edge[1])\n        assert not undirected_graph.contains_edge(edge[1], edge[0])\n        assert not directed_graph.contains_edge(edge[0], edge[1])\n\n    def __assert_graph_vertex_exists_check(\n        self,\n        undirected_graph: GraphAdjacencyList,\n        directed_graph: GraphAdjacencyList,\n        vertex: int,\n    ) -> None:\n        assert undirected_graph.contains_vertex(vertex)\n        assert directed_graph.contains_vertex(vertex)\n\n    def __assert_graph_vertex_does_not_exist_check(\n        self,\n        undirected_graph: GraphAdjacencyList,\n        directed_graph: GraphAdjacencyList,\n        vertex: int,\n    ) -> None:\n        assert not undirected_graph.contains_vertex(vertex)\n        assert not directed_graph.contains_vertex(vertex)\n\n    def __generate_random_edges(\n        self, vertices: list[int], edge_pick_count: int\n    ) -> list[list[int]]:\n        assert edge_pick_count <= len(vertices)\n\n        random_source_vertices: list[int] = random.sample(\n            vertices[0 : int(len(vertices) / 2)], edge_pick_count\n        )\n        random_destination_vertices: list[int] = random.sample(\n            vertices[int(len(vertices) / 2) :], edge_pick_count\n        )\n        random_edges: list[list[int]] = []\n\n        for source in random_source_vertices:\n            for dest in random_destination_vertices:\n                random_edges.append([source, dest])\n\n        return random_edges\n\n    def __generate_graphs(\n        self, vertex_count: int, min_val: int, max_val: int, edge_pick_count: int\n    ) -> tuple[GraphAdjacencyList, GraphAdjacencyList, list[int], list[list[int]]]:\n        if max_val - min_val + 1 < vertex_count:\n            raise ValueError(\n                \"Will result in duplicate vertices. Either increase range \"\n                \"between min_val and max_val or decrease vertex count.\"\n            )\n\n        # generate graph input\n        random_vertices: list[int] = random.sample(\n            range(min_val, max_val + 1), vertex_count\n        )\n        random_edges: list[list[int]] = self.__generate_random_edges(\n            random_vertices, edge_pick_count\n        )\n\n        # build graphs\n        undirected_graph = GraphAdjacencyList(\n            vertices=random_vertices, edges=random_edges, directed=False\n        )\n        directed_graph = GraphAdjacencyList(\n            vertices=random_vertices, edges=random_edges, directed=True\n        )\n\n        return undirected_graph, directed_graph, random_vertices, random_edges\n\n    def test_init_check(self) -> None:\n        (\n            undirected_graph,\n            directed_graph,\n            random_vertices,\n            random_edges,\n        ) = self.__generate_graphs(20, 0, 100, 4)\n\n        # test graph initialization with vertices and edges\n        for num in random_vertices:\n            self.__assert_graph_vertex_exists_check(\n                undirected_graph, directed_graph, num\n            )\n\n        for edge in random_edges:\n            self.__assert_graph_edge_exists_check(\n                undirected_graph, directed_graph, edge\n            )\n        assert not undirected_graph.directed\n        assert directed_graph.directed\n\n    def test_contains_vertex(self) -> None:\n        random_vertices: list[int] = random.sample(range(101), 20)\n\n        # Build graphs WITHOUT edges\n        undirected_graph = GraphAdjacencyList(\n            vertices=random_vertices, edges=[], directed=False\n        )\n        directed_graph = GraphAdjacencyList(\n            vertices=random_vertices, edges=[], directed=True\n        )\n\n        # Test contains_vertex\n        for num in range(101):\n            assert (num in random_vertices) == undirected_graph.contains_vertex(num)\n            assert (num in random_vertices) == directed_graph.contains_vertex(num)\n\n    def test_add_vertices(self) -> None:\n        random_vertices: list[int] = random.sample(range(101), 20)\n\n        # build empty graphs\n        undirected_graph: GraphAdjacencyList = GraphAdjacencyList(\n            vertices=[], edges=[], directed=False\n        )\n        directed_graph: GraphAdjacencyList = GraphAdjacencyList(\n            vertices=[], edges=[], directed=True\n        )\n\n        # run add_vertex\n        for num in random_vertices:\n            undirected_graph.add_vertex(num)\n\n        for num in random_vertices:\n            directed_graph.add_vertex(num)\n\n        # test add_vertex worked\n        for num in random_vertices:\n            self.__assert_graph_vertex_exists_check(\n                undirected_graph, directed_graph, num\n            )\n\n    def test_remove_vertices(self) -> None:\n        random_vertices: list[int] = random.sample(range(101), 20)\n\n        # build graphs WITHOUT edges\n        undirected_graph = GraphAdjacencyList(\n            vertices=random_vertices, edges=[], directed=False\n        )\n        directed_graph = GraphAdjacencyList(\n            vertices=random_vertices, edges=[], directed=True\n        )\n\n        # test remove_vertex worked\n        for num in random_vertices:\n            self.__assert_graph_vertex_exists_check(\n                undirected_graph, directed_graph, num\n            )\n\n            undirected_graph.remove_vertex(num)\n            directed_graph.remove_vertex(num)\n\n            self.__assert_graph_vertex_does_not_exist_check(\n                undirected_graph, directed_graph, num\n            )\n\n    def test_add_and_remove_vertices_repeatedly(self) -> None:\n        random_vertices1: list[int] = random.sample(range(51), 20)\n        random_vertices2: list[int] = random.sample(range(51, 101), 20)\n\n        # build graphs WITHOUT edges\n        undirected_graph = GraphAdjacencyList(\n            vertices=random_vertices1, edges=[], directed=False\n        )\n        directed_graph = GraphAdjacencyList(\n            vertices=random_vertices1, edges=[], directed=True\n        )\n\n        # test adding and removing vertices\n        for i, _ in enumerate(random_vertices1):\n            undirected_graph.add_vertex(random_vertices2[i])\n            directed_graph.add_vertex(random_vertices2[i])\n\n            self.__assert_graph_vertex_exists_check(\n                undirected_graph, directed_graph, random_vertices2[i]\n            )\n\n            undirected_graph.remove_vertex(random_vertices1[i])\n            directed_graph.remove_vertex(random_vertices1[i])\n\n            self.__assert_graph_vertex_does_not_exist_check(\n                undirected_graph, directed_graph, random_vertices1[i]\n            )\n\n        # remove all vertices\n        for i, _ in enumerate(random_vertices1):\n            undirected_graph.remove_vertex(random_vertices2[i])\n            directed_graph.remove_vertex(random_vertices2[i])\n\n            self.__assert_graph_vertex_does_not_exist_check(\n                undirected_graph, directed_graph, random_vertices2[i]\n            )\n\n    def test_contains_edge(self) -> None:\n        # generate graphs and graph input\n        vertex_count = 20\n        (\n            undirected_graph,\n            directed_graph,\n            random_vertices,\n            random_edges,\n        ) = self.__generate_graphs(vertex_count, 0, 100, 4)\n\n        # generate all possible edges for testing\n        all_possible_edges: list[list[int]] = []\n        for i in range(vertex_count - 1):\n            for j in range(i + 1, vertex_count):\n                all_possible_edges.append([random_vertices[i], random_vertices[j]])\n                all_possible_edges.append([random_vertices[j], random_vertices[i]])\n\n        # test contains_edge function\n        for edge in all_possible_edges:\n            if edge in random_edges:\n                self.__assert_graph_edge_exists_check(\n                    undirected_graph, directed_graph, edge\n                )\n            elif [edge[1], edge[0]] in random_edges:\n                # since this edge exists for undirected but the reverse\n                # may not exist for directed\n                self.__assert_graph_edge_exists_check(\n                    undirected_graph, directed_graph, [edge[1], edge[0]]\n                )\n            else:\n                self.__assert_graph_edge_does_not_exist_check(\n                    undirected_graph, directed_graph, edge\n                )\n\n    def test_add_edge(self) -> None:\n        # generate graph input\n        random_vertices: list[int] = random.sample(range(101), 15)\n        random_edges: list[list[int]] = self.__generate_random_edges(random_vertices, 4)\n\n        # build graphs WITHOUT edges\n        undirected_graph = GraphAdjacencyList(\n            vertices=random_vertices, edges=[], directed=False\n        )\n        directed_graph = GraphAdjacencyList(\n            vertices=random_vertices, edges=[], directed=True\n        )\n\n        # run and test add_edge\n        for edge in random_edges:\n            undirected_graph.add_edge(edge[0], edge[1])\n            directed_graph.add_edge(edge[0], edge[1])\n            self.__assert_graph_edge_exists_check(\n                undirected_graph, directed_graph, edge\n            )\n\n    def test_remove_edge(self) -> None:\n        # generate graph input and graphs\n        (\n            undirected_graph,\n            directed_graph,\n            _random_vertices,\n            random_edges,\n        ) = self.__generate_graphs(20, 0, 100, 4)\n\n        # run and test remove_edge\n        for edge in random_edges:\n            self.__assert_graph_edge_exists_check(\n                undirected_graph, directed_graph, edge\n            )\n            undirected_graph.remove_edge(edge[0], edge[1])\n            directed_graph.remove_edge(edge[0], edge[1])\n            self.__assert_graph_edge_does_not_exist_check(\n                undirected_graph, directed_graph, edge\n            )\n\n    def test_add_and_remove_edges_repeatedly(self) -> None:\n        (\n            undirected_graph,\n            directed_graph,\n            random_vertices,\n            random_edges,\n        ) = self.__generate_graphs(20, 0, 100, 4)\n\n        # make some more edge options!\n        more_random_edges: list[list[int]] = []\n\n        while len(more_random_edges) != len(random_edges):\n            edges: list[list[int]] = self.__generate_random_edges(random_vertices, 4)\n            for edge in edges:\n                if len(more_random_edges) == len(random_edges):\n                    break\n                elif edge not in more_random_edges and edge not in random_edges:\n                    more_random_edges.append(edge)\n\n        for i, _ in enumerate(random_edges):\n            undirected_graph.add_edge(more_random_edges[i][0], more_random_edges[i][1])\n            directed_graph.add_edge(more_random_edges[i][0], more_random_edges[i][1])\n\n            self.__assert_graph_edge_exists_check(\n                undirected_graph, directed_graph, more_random_edges[i]\n            )\n\n            undirected_graph.remove_edge(random_edges[i][0], random_edges[i][1])\n            directed_graph.remove_edge(random_edges[i][0], random_edges[i][1])\n\n            self.__assert_graph_edge_does_not_exist_check(\n                undirected_graph, directed_graph, random_edges[i]\n            )\n\n    def test_add_vertex_exception_check(self) -> None:\n        (\n            undirected_graph,\n            directed_graph,\n            random_vertices,\n            _random_edges,\n        ) = self.__generate_graphs(20, 0, 100, 4)\n\n        for vertex in random_vertices:\n            with pytest.raises(ValueError):\n                undirected_graph.add_vertex(vertex)\n            with pytest.raises(ValueError):\n                directed_graph.add_vertex(vertex)\n\n    def test_remove_vertex_exception_check(self) -> None:\n        (\n            undirected_graph,\n            directed_graph,\n            random_vertices,\n            _random_edges,\n        ) = self.__generate_graphs(20, 0, 100, 4)\n\n        for i in range(101):\n            if i not in random_vertices:\n                with pytest.raises(ValueError):\n                    undirected_graph.remove_vertex(i)\n                with pytest.raises(ValueError):\n                    directed_graph.remove_vertex(i)\n\n    def test_add_edge_exception_check(self) -> None:\n        (\n            undirected_graph,\n            directed_graph,\n            _random_vertices,\n            random_edges,\n        ) = self.__generate_graphs(20, 0, 100, 4)\n\n        for edge in random_edges:\n            with pytest.raises(ValueError):\n                undirected_graph.add_edge(edge[0], edge[1])\n            with pytest.raises(ValueError):\n                directed_graph.add_edge(edge[0], edge[1])\n\n    def test_remove_edge_exception_check(self) -> None:\n        (\n            undirected_graph,\n            directed_graph,\n            random_vertices,\n            random_edges,\n        ) = self.__generate_graphs(20, 0, 100, 4)\n\n        more_random_edges: list[list[int]] = []\n\n        while len(more_random_edges) != len(random_edges):\n            edges: list[list[int]] = self.__generate_random_edges(random_vertices, 4)\n            for edge in edges:\n                if len(more_random_edges) == len(random_edges):\n                    break\n                elif edge not in more_random_edges and edge not in random_edges:\n                    more_random_edges.append(edge)\n\n        for edge in more_random_edges:\n            with pytest.raises(ValueError):\n                undirected_graph.remove_edge(edge[0], edge[1])\n            with pytest.raises(ValueError):\n                directed_graph.remove_edge(edge[0], edge[1])\n\n    def test_contains_edge_exception_check(self) -> None:\n        (\n            undirected_graph,\n            directed_graph,\n            random_vertices,\n            _random_edges,\n        ) = self.__generate_graphs(20, 0, 100, 4)\n\n        for vertex in random_vertices:\n            with pytest.raises(ValueError):\n                undirected_graph.contains_edge(vertex, 102)\n            with pytest.raises(ValueError):\n                directed_graph.contains_edge(vertex, 102)\n\n        with pytest.raises(ValueError):\n            undirected_graph.contains_edge(103, 102)\n        with pytest.raises(ValueError):\n            directed_graph.contains_edge(103, 102)\n\n\nif __name__ == \"__main__\":\n    unittest.main()\n"
  },
  {
    "path": "graphs/graph_adjacency_matrix.py",
    "content": "#!/usr/bin/env python3\n\"\"\"\nAuthor: Vikram Nithyanandam\n\nDescription:\nThe following implementation is a robust unweighted Graph data structure\nimplemented using an adjacency matrix. This vertices and edges of this graph can be\neffectively initialized and modified while storing your chosen generic\nvalue in each vertex.\n\nAdjacency Matrix: https://mathworld.wolfram.com/AdjacencyMatrix.html\n\nPotential Future Ideas:\n- Add a flag to set edge weights on and set edge weights\n- Make edge weights and vertex values customizable to store whatever the client wants\n- Support multigraph functionality if the client wants it\n\"\"\"\n\nfrom __future__ import annotations\n\nimport random\nimport unittest\nfrom pprint import pformat\nfrom typing import TypeVar\n\nimport pytest\n\nT = TypeVar(\"T\")\n\n\nclass GraphAdjacencyMatrix[T]:\n    def __init__(\n        self, vertices: list[T], edges: list[list[T]], directed: bool = True\n    ) -> None:\n        \"\"\"\n        Parameters:\n        - vertices: (list[T]) The list of vertex names the client wants to\n        pass in. Default is empty.\n        - edges: (list[list[T]]) The list of edges the client wants to\n        pass in. Each edge is a 2-element list. Default is empty.\n        - directed: (bool) Indicates if graph is directed or undirected.\n        Default is True.\n        \"\"\"\n        self.directed = directed\n        self.vertex_to_index: dict[T, int] = {}\n        self.adj_matrix: list[list[int]] = []\n\n        # Falsey checks\n        edges = edges or []\n        vertices = vertices or []\n\n        for vertex in vertices:\n            self.add_vertex(vertex)\n\n        for edge in edges:\n            if len(edge) != 2:\n                msg = f\"Invalid input: {edge} must have length 2.\"\n                raise ValueError(msg)\n            self.add_edge(edge[0], edge[1])\n\n    def add_edge(self, source_vertex: T, destination_vertex: T) -> None:\n        \"\"\"\n        Creates an edge from source vertex to destination vertex. If any\n        given vertex doesn't exist or the edge already exists, a ValueError\n        will be thrown.\n        \"\"\"\n        if not (\n            self.contains_vertex(source_vertex)\n            and self.contains_vertex(destination_vertex)\n        ):\n            msg = (\n                f\"Incorrect input: Either {source_vertex} or \"\n                f\"{destination_vertex} does not exist\"\n            )\n            raise ValueError(msg)\n        if self.contains_edge(source_vertex, destination_vertex):\n            msg = (\n                \"Incorrect input: The edge already exists between \"\n                f\"{source_vertex} and {destination_vertex}\"\n            )\n            raise ValueError(msg)\n\n        # Get the indices of the corresponding vertices and set their edge value to 1.\n        u: int = self.vertex_to_index[source_vertex]\n        v: int = self.vertex_to_index[destination_vertex]\n        self.adj_matrix[u][v] = 1\n        if not self.directed:\n            self.adj_matrix[v][u] = 1\n\n    def remove_edge(self, source_vertex: T, destination_vertex: T) -> None:\n        \"\"\"\n        Removes the edge between the two vertices. If any given vertex\n        doesn't exist or the edge does not exist, a ValueError will be thrown.\n        \"\"\"\n        if not (\n            self.contains_vertex(source_vertex)\n            and self.contains_vertex(destination_vertex)\n        ):\n            msg = (\n                f\"Incorrect input: Either {source_vertex} or \"\n                f\"{destination_vertex} does not exist\"\n            )\n            raise ValueError(msg)\n        if not self.contains_edge(source_vertex, destination_vertex):\n            msg = (\n                \"Incorrect input: The edge does NOT exist between \"\n                f\"{source_vertex} and {destination_vertex}\"\n            )\n            raise ValueError(msg)\n\n        # Get the indices of the corresponding vertices and set their edge value to 0.\n        u: int = self.vertex_to_index[source_vertex]\n        v: int = self.vertex_to_index[destination_vertex]\n        self.adj_matrix[u][v] = 0\n        if not self.directed:\n            self.adj_matrix[v][u] = 0\n\n    def add_vertex(self, vertex: T) -> None:\n        \"\"\"\n        Adds a vertex to the graph. If the given vertex already exists,\n        a ValueError will be thrown.\n        \"\"\"\n        if self.contains_vertex(vertex):\n            msg = f\"Incorrect input: {vertex} already exists in this graph.\"\n            raise ValueError(msg)\n\n        # build column for vertex\n        for row in self.adj_matrix:\n            row.append(0)\n\n        # build row for vertex and update other data structures\n        self.adj_matrix.append([0] * (len(self.adj_matrix) + 1))\n        self.vertex_to_index[vertex] = len(self.adj_matrix) - 1\n\n    def remove_vertex(self, vertex: T) -> None:\n        \"\"\"\n        Removes the given vertex from the graph and deletes all incoming and\n        outgoing edges from the given vertex as well. If the given vertex\n        does not exist, a ValueError will be thrown.\n        \"\"\"\n        if not self.contains_vertex(vertex):\n            msg = f\"Incorrect input: {vertex} does not exist in this graph.\"\n            raise ValueError(msg)\n\n        # first slide up the rows by deleting the row corresponding to\n        # the vertex being deleted.\n        start_index = self.vertex_to_index[vertex]\n        self.adj_matrix.pop(start_index)\n\n        # next, slide the columns to the left by deleting the values in\n        # the column corresponding to the vertex being deleted\n        for lst in self.adj_matrix:\n            lst.pop(start_index)\n\n        # final clean up\n        self.vertex_to_index.pop(vertex)\n\n        # decrement indices for vertices shifted by the deleted vertex in the adj matrix\n        for inner_vertex in self.vertex_to_index:\n            if self.vertex_to_index[inner_vertex] >= start_index:\n                self.vertex_to_index[inner_vertex] = (\n                    self.vertex_to_index[inner_vertex] - 1\n                )\n\n    def contains_vertex(self, vertex: T) -> bool:\n        \"\"\"\n        Returns True if the graph contains the vertex, False otherwise.\n        \"\"\"\n        return vertex in self.vertex_to_index\n\n    def contains_edge(self, source_vertex: T, destination_vertex: T) -> bool:\n        \"\"\"\n        Returns True if the graph contains the edge from the source_vertex to the\n        destination_vertex, False otherwise. If any given vertex doesn't exist, a\n        ValueError will be thrown.\n        \"\"\"\n        if not (\n            self.contains_vertex(source_vertex)\n            and self.contains_vertex(destination_vertex)\n        ):\n            msg = (\n                f\"Incorrect input: Either {source_vertex} \"\n                f\"or {destination_vertex} does not exist.\"\n            )\n            raise ValueError(msg)\n\n        u = self.vertex_to_index[source_vertex]\n        v = self.vertex_to_index[destination_vertex]\n        return self.adj_matrix[u][v] == 1\n\n    def clear_graph(self) -> None:\n        \"\"\"\n        Clears all vertices and edges.\n        \"\"\"\n        self.vertex_to_index = {}\n        self.adj_matrix = []\n\n    def __repr__(self) -> str:\n        first = \"Adj Matrix:\\n\" + pformat(self.adj_matrix)\n        second = \"\\nVertex to index mapping:\\n\" + pformat(self.vertex_to_index)\n        return first + second\n\n\nclass TestGraphMatrix(unittest.TestCase):\n    def __assert_graph_edge_exists_check(\n        self,\n        undirected_graph: GraphAdjacencyMatrix,\n        directed_graph: GraphAdjacencyMatrix,\n        edge: list[int],\n    ) -> None:\n        assert undirected_graph.contains_edge(edge[0], edge[1])\n        assert undirected_graph.contains_edge(edge[1], edge[0])\n        assert directed_graph.contains_edge(edge[0], edge[1])\n\n    def __assert_graph_edge_does_not_exist_check(\n        self,\n        undirected_graph: GraphAdjacencyMatrix,\n        directed_graph: GraphAdjacencyMatrix,\n        edge: list[int],\n    ) -> None:\n        assert not undirected_graph.contains_edge(edge[0], edge[1])\n        assert not undirected_graph.contains_edge(edge[1], edge[0])\n        assert not directed_graph.contains_edge(edge[0], edge[1])\n\n    def __assert_graph_vertex_exists_check(\n        self,\n        undirected_graph: GraphAdjacencyMatrix,\n        directed_graph: GraphAdjacencyMatrix,\n        vertex: int,\n    ) -> None:\n        assert undirected_graph.contains_vertex(vertex)\n        assert directed_graph.contains_vertex(vertex)\n\n    def __assert_graph_vertex_does_not_exist_check(\n        self,\n        undirected_graph: GraphAdjacencyMatrix,\n        directed_graph: GraphAdjacencyMatrix,\n        vertex: int,\n    ) -> None:\n        assert not undirected_graph.contains_vertex(vertex)\n        assert not directed_graph.contains_vertex(vertex)\n\n    def __generate_random_edges(\n        self, vertices: list[int], edge_pick_count: int\n    ) -> list[list[int]]:\n        assert edge_pick_count <= len(vertices)\n\n        random_source_vertices: list[int] = random.sample(\n            vertices[0 : int(len(vertices) / 2)], edge_pick_count\n        )\n        random_destination_vertices: list[int] = random.sample(\n            vertices[int(len(vertices) / 2) :], edge_pick_count\n        )\n        random_edges: list[list[int]] = []\n\n        for source in random_source_vertices:\n            for dest in random_destination_vertices:\n                random_edges.append([source, dest])\n\n        return random_edges\n\n    def __generate_graphs(\n        self, vertex_count: int, min_val: int, max_val: int, edge_pick_count: int\n    ) -> tuple[GraphAdjacencyMatrix, GraphAdjacencyMatrix, list[int], list[list[int]]]:\n        if max_val - min_val + 1 < vertex_count:\n            raise ValueError(\n                \"Will result in duplicate vertices. Either increase \"\n                \"range between min_val and max_val or decrease vertex count\"\n            )\n\n        # generate graph input\n        random_vertices: list[int] = random.sample(\n            range(min_val, max_val + 1), vertex_count\n        )\n        random_edges: list[list[int]] = self.__generate_random_edges(\n            random_vertices, edge_pick_count\n        )\n\n        # build graphs\n        undirected_graph = GraphAdjacencyMatrix(\n            vertices=random_vertices, edges=random_edges, directed=False\n        )\n        directed_graph = GraphAdjacencyMatrix(\n            vertices=random_vertices, edges=random_edges, directed=True\n        )\n\n        return undirected_graph, directed_graph, random_vertices, random_edges\n\n    def test_init_check(self) -> None:\n        (\n            undirected_graph,\n            directed_graph,\n            random_vertices,\n            random_edges,\n        ) = self.__generate_graphs(20, 0, 100, 4)\n\n        # test graph initialization with vertices and edges\n        for num in random_vertices:\n            self.__assert_graph_vertex_exists_check(\n                undirected_graph, directed_graph, num\n            )\n\n        for edge in random_edges:\n            self.__assert_graph_edge_exists_check(\n                undirected_graph, directed_graph, edge\n            )\n\n        assert not undirected_graph.directed\n        assert directed_graph.directed\n\n    def test_contains_vertex(self) -> None:\n        random_vertices: list[int] = random.sample(range(101), 20)\n\n        # Build graphs WITHOUT edges\n        undirected_graph = GraphAdjacencyMatrix(\n            vertices=random_vertices, edges=[], directed=False\n        )\n        directed_graph = GraphAdjacencyMatrix(\n            vertices=random_vertices, edges=[], directed=True\n        )\n\n        # Test contains_vertex\n        for num in range(101):\n            assert (num in random_vertices) == undirected_graph.contains_vertex(num)\n            assert (num in random_vertices) == directed_graph.contains_vertex(num)\n\n    def test_add_vertices(self) -> None:\n        random_vertices: list[int] = random.sample(range(101), 20)\n\n        # build empty graphs\n        undirected_graph: GraphAdjacencyMatrix = GraphAdjacencyMatrix(\n            vertices=[], edges=[], directed=False\n        )\n        directed_graph: GraphAdjacencyMatrix = GraphAdjacencyMatrix(\n            vertices=[], edges=[], directed=True\n        )\n\n        # run add_vertex\n        for num in random_vertices:\n            undirected_graph.add_vertex(num)\n\n        for num in random_vertices:\n            directed_graph.add_vertex(num)\n\n        # test add_vertex worked\n        for num in random_vertices:\n            self.__assert_graph_vertex_exists_check(\n                undirected_graph, directed_graph, num\n            )\n\n    def test_remove_vertices(self) -> None:\n        random_vertices: list[int] = random.sample(range(101), 20)\n\n        # build graphs WITHOUT edges\n        undirected_graph = GraphAdjacencyMatrix(\n            vertices=random_vertices, edges=[], directed=False\n        )\n        directed_graph = GraphAdjacencyMatrix(\n            vertices=random_vertices, edges=[], directed=True\n        )\n\n        # test remove_vertex worked\n        for num in random_vertices:\n            self.__assert_graph_vertex_exists_check(\n                undirected_graph, directed_graph, num\n            )\n\n            undirected_graph.remove_vertex(num)\n            directed_graph.remove_vertex(num)\n\n            self.__assert_graph_vertex_does_not_exist_check(\n                undirected_graph, directed_graph, num\n            )\n\n    def test_add_and_remove_vertices_repeatedly(self) -> None:\n        random_vertices1: list[int] = random.sample(range(51), 20)\n        random_vertices2: list[int] = random.sample(range(51, 101), 20)\n\n        # build graphs WITHOUT edges\n        undirected_graph = GraphAdjacencyMatrix(\n            vertices=random_vertices1, edges=[], directed=False\n        )\n        directed_graph = GraphAdjacencyMatrix(\n            vertices=random_vertices1, edges=[], directed=True\n        )\n\n        # test adding and removing vertices\n        for i, _ in enumerate(random_vertices1):\n            undirected_graph.add_vertex(random_vertices2[i])\n            directed_graph.add_vertex(random_vertices2[i])\n\n            self.__assert_graph_vertex_exists_check(\n                undirected_graph, directed_graph, random_vertices2[i]\n            )\n\n            undirected_graph.remove_vertex(random_vertices1[i])\n            directed_graph.remove_vertex(random_vertices1[i])\n\n            self.__assert_graph_vertex_does_not_exist_check(\n                undirected_graph, directed_graph, random_vertices1[i]\n            )\n\n        # remove all vertices\n        for i, _ in enumerate(random_vertices1):\n            undirected_graph.remove_vertex(random_vertices2[i])\n            directed_graph.remove_vertex(random_vertices2[i])\n\n            self.__assert_graph_vertex_does_not_exist_check(\n                undirected_graph, directed_graph, random_vertices2[i]\n            )\n\n    def test_contains_edge(self) -> None:\n        # generate graphs and graph input\n        vertex_count = 20\n        (\n            undirected_graph,\n            directed_graph,\n            random_vertices,\n            random_edges,\n        ) = self.__generate_graphs(vertex_count, 0, 100, 4)\n\n        # generate all possible edges for testing\n        all_possible_edges: list[list[int]] = []\n        for i in range(vertex_count - 1):\n            for j in range(i + 1, vertex_count):\n                all_possible_edges.append([random_vertices[i], random_vertices[j]])\n                all_possible_edges.append([random_vertices[j], random_vertices[i]])\n\n        # test contains_edge function\n        for edge in all_possible_edges:\n            if edge in random_edges:\n                self.__assert_graph_edge_exists_check(\n                    undirected_graph, directed_graph, edge\n                )\n            elif [edge[1], edge[0]] in random_edges:\n                # since this edge exists for undirected but the reverse may\n                # not exist for directed\n                self.__assert_graph_edge_exists_check(\n                    undirected_graph, directed_graph, [edge[1], edge[0]]\n                )\n            else:\n                self.__assert_graph_edge_does_not_exist_check(\n                    undirected_graph, directed_graph, edge\n                )\n\n    def test_add_edge(self) -> None:\n        # generate graph input\n        random_vertices: list[int] = random.sample(range(101), 15)\n        random_edges: list[list[int]] = self.__generate_random_edges(random_vertices, 4)\n\n        # build graphs WITHOUT edges\n        undirected_graph = GraphAdjacencyMatrix(\n            vertices=random_vertices, edges=[], directed=False\n        )\n        directed_graph = GraphAdjacencyMatrix(\n            vertices=random_vertices, edges=[], directed=True\n        )\n\n        # run and test add_edge\n        for edge in random_edges:\n            undirected_graph.add_edge(edge[0], edge[1])\n            directed_graph.add_edge(edge[0], edge[1])\n            self.__assert_graph_edge_exists_check(\n                undirected_graph, directed_graph, edge\n            )\n\n    def test_remove_edge(self) -> None:\n        # generate graph input and graphs\n        (\n            undirected_graph,\n            directed_graph,\n            _random_vertices,\n            random_edges,\n        ) = self.__generate_graphs(20, 0, 100, 4)\n\n        # run and test remove_edge\n        for edge in random_edges:\n            self.__assert_graph_edge_exists_check(\n                undirected_graph, directed_graph, edge\n            )\n            undirected_graph.remove_edge(edge[0], edge[1])\n            directed_graph.remove_edge(edge[0], edge[1])\n            self.__assert_graph_edge_does_not_exist_check(\n                undirected_graph, directed_graph, edge\n            )\n\n    def test_add_and_remove_edges_repeatedly(self) -> None:\n        (\n            undirected_graph,\n            directed_graph,\n            random_vertices,\n            random_edges,\n        ) = self.__generate_graphs(20, 0, 100, 4)\n\n        # make some more edge options!\n        more_random_edges: list[list[int]] = []\n\n        while len(more_random_edges) != len(random_edges):\n            edges: list[list[int]] = self.__generate_random_edges(random_vertices, 4)\n            for edge in edges:\n                if len(more_random_edges) == len(random_edges):\n                    break\n                elif edge not in more_random_edges and edge not in random_edges:\n                    more_random_edges.append(edge)\n\n        for i, _ in enumerate(random_edges):\n            undirected_graph.add_edge(more_random_edges[i][0], more_random_edges[i][1])\n            directed_graph.add_edge(more_random_edges[i][0], more_random_edges[i][1])\n\n            self.__assert_graph_edge_exists_check(\n                undirected_graph, directed_graph, more_random_edges[i]\n            )\n\n            undirected_graph.remove_edge(random_edges[i][0], random_edges[i][1])\n            directed_graph.remove_edge(random_edges[i][0], random_edges[i][1])\n\n            self.__assert_graph_edge_does_not_exist_check(\n                undirected_graph, directed_graph, random_edges[i]\n            )\n\n    def test_add_vertex_exception_check(self) -> None:\n        (\n            undirected_graph,\n            directed_graph,\n            random_vertices,\n            _random_edges,\n        ) = self.__generate_graphs(20, 0, 100, 4)\n\n        for vertex in random_vertices:\n            with pytest.raises(ValueError):\n                undirected_graph.add_vertex(vertex)\n            with pytest.raises(ValueError):\n                directed_graph.add_vertex(vertex)\n\n    def test_remove_vertex_exception_check(self) -> None:\n        (\n            undirected_graph,\n            directed_graph,\n            random_vertices,\n            _random_edges,\n        ) = self.__generate_graphs(20, 0, 100, 4)\n\n        for i in range(101):\n            if i not in random_vertices:\n                with pytest.raises(ValueError):\n                    undirected_graph.remove_vertex(i)\n                with pytest.raises(ValueError):\n                    directed_graph.remove_vertex(i)\n\n    def test_add_edge_exception_check(self) -> None:\n        (\n            undirected_graph,\n            directed_graph,\n            _random_vertices,\n            random_edges,\n        ) = self.__generate_graphs(20, 0, 100, 4)\n\n        for edge in random_edges:\n            with pytest.raises(ValueError):\n                undirected_graph.add_edge(edge[0], edge[1])\n            with pytest.raises(ValueError):\n                directed_graph.add_edge(edge[0], edge[1])\n\n    def test_remove_edge_exception_check(self) -> None:\n        (\n            undirected_graph,\n            directed_graph,\n            random_vertices,\n            random_edges,\n        ) = self.__generate_graphs(20, 0, 100, 4)\n\n        more_random_edges: list[list[int]] = []\n\n        while len(more_random_edges) != len(random_edges):\n            edges: list[list[int]] = self.__generate_random_edges(random_vertices, 4)\n            for edge in edges:\n                if len(more_random_edges) == len(random_edges):\n                    break\n                elif edge not in more_random_edges and edge not in random_edges:\n                    more_random_edges.append(edge)\n\n        for edge in more_random_edges:\n            with pytest.raises(ValueError):\n                undirected_graph.remove_edge(edge[0], edge[1])\n            with pytest.raises(ValueError):\n                directed_graph.remove_edge(edge[0], edge[1])\n\n    def test_contains_edge_exception_check(self) -> None:\n        (\n            undirected_graph,\n            directed_graph,\n            random_vertices,\n            _random_edges,\n        ) = self.__generate_graphs(20, 0, 100, 4)\n\n        for vertex in random_vertices:\n            with pytest.raises(ValueError):\n                undirected_graph.contains_edge(vertex, 102)\n            with pytest.raises(ValueError):\n                directed_graph.contains_edge(vertex, 102)\n\n        with pytest.raises(ValueError):\n            undirected_graph.contains_edge(103, 102)\n        with pytest.raises(ValueError):\n            directed_graph.contains_edge(103, 102)\n\n\nif __name__ == \"__main__\":\n    unittest.main()\n"
  },
  {
    "path": "graphs/graph_list.py",
    "content": "#!/usr/bin/env python3\n\n# Author: OMKAR PATHAK, Nwachukwu Chidiebere\n\n# Use a Python dictionary to construct the graph.\nfrom __future__ import annotations\n\nfrom pprint import pformat\nfrom typing import TypeVar\n\nT = TypeVar(\"T\")\n\n\nclass GraphAdjacencyList[T]:\n    \"\"\"\n    Adjacency List type Graph Data Structure that accounts for directed and undirected\n    Graphs.  Initialize graph object indicating whether it's directed or undirected.\n\n    Directed graph example:\n    >>> d_graph = GraphAdjacencyList()\n    >>> print(d_graph)\n    {}\n    >>> d_graph.add_edge(0, 1)\n    {0: [1], 1: []}\n    >>> d_graph.add_edge(1, 2).add_edge(1, 4).add_edge(1, 5)\n    {0: [1], 1: [2, 4, 5], 2: [], 4: [], 5: []}\n    >>> d_graph.add_edge(2, 0).add_edge(2, 6).add_edge(2, 7)\n    {0: [1], 1: [2, 4, 5], 2: [0, 6, 7], 4: [], 5: [], 6: [], 7: []}\n    >>> d_graph\n    {0: [1], 1: [2, 4, 5], 2: [0, 6, 7], 4: [], 5: [], 6: [], 7: []}\n    >>> print(repr(d_graph))\n    {0: [1], 1: [2, 4, 5], 2: [0, 6, 7], 4: [], 5: [], 6: [], 7: []}\n\n    Undirected graph example:\n    >>> u_graph = GraphAdjacencyList(directed=False)\n    >>> u_graph.add_edge(0, 1)\n    {0: [1], 1: [0]}\n    >>> u_graph.add_edge(1, 2).add_edge(1, 4).add_edge(1, 5)\n    {0: [1], 1: [0, 2, 4, 5], 2: [1], 4: [1], 5: [1]}\n    >>> u_graph.add_edge(2, 0).add_edge(2, 6).add_edge(2, 7)\n    {0: [1, 2], 1: [0, 2, 4, 5], 2: [1, 0, 6, 7], 4: [1], 5: [1], 6: [2], 7: [2]}\n    >>> u_graph.add_edge(4, 5)\n    {0: [1, 2],\n     1: [0, 2, 4, 5],\n     2: [1, 0, 6, 7],\n     4: [1, 5],\n     5: [1, 4],\n     6: [2],\n     7: [2]}\n    >>> print(u_graph)\n    {0: [1, 2],\n     1: [0, 2, 4, 5],\n     2: [1, 0, 6, 7],\n     4: [1, 5],\n     5: [1, 4],\n     6: [2],\n     7: [2]}\n    >>> print(repr(u_graph))\n    {0: [1, 2],\n     1: [0, 2, 4, 5],\n     2: [1, 0, 6, 7],\n     4: [1, 5],\n     5: [1, 4],\n     6: [2],\n     7: [2]}\n     >>> char_graph = GraphAdjacencyList(directed=False)\n     >>> char_graph.add_edge('a', 'b')\n     {'a': ['b'], 'b': ['a']}\n     >>> char_graph.add_edge('b', 'c').add_edge('b', 'e').add_edge('b', 'f')\n     {'a': ['b'], 'b': ['a', 'c', 'e', 'f'], 'c': ['b'], 'e': ['b'], 'f': ['b']}\n     >>> char_graph\n     {'a': ['b'], 'b': ['a', 'c', 'e', 'f'], 'c': ['b'], 'e': ['b'], 'f': ['b']}\n    \"\"\"\n\n    def __init__(self, directed: bool = True) -> None:\n        \"\"\"\n        Parameters:\n        directed: (bool) Indicates if graph is directed or undirected. Default is True.\n        \"\"\"\n\n        self.adj_list: dict[T, list[T]] = {}  # dictionary of lists\n        self.directed = directed\n\n    def add_edge(\n        self, source_vertex: T, destination_vertex: T\n    ) -> GraphAdjacencyList[T]:\n        \"\"\"\n        Connects vertices together. Creates and Edge from source vertex to destination\n        vertex.\n        Vertices will be created if not found in graph\n        \"\"\"\n\n        if not self.directed:  # For undirected graphs\n            # if both source vertex and destination vertex are both present in the\n            # adjacency list, add destination vertex to source vertex list of adjacent\n            # vertices and add source vertex to destination vertex list of adjacent\n            # vertices.\n            if source_vertex in self.adj_list and destination_vertex in self.adj_list:\n                self.adj_list[source_vertex].append(destination_vertex)\n                self.adj_list[destination_vertex].append(source_vertex)\n            # if only source vertex is present in adjacency list, add destination vertex\n            # to source vertex list of adjacent vertices, then create a new vertex with\n            # destination vertex as key and assign a list containing the source vertex\n            # as it's first adjacent vertex.\n            elif source_vertex in self.adj_list:\n                self.adj_list[source_vertex].append(destination_vertex)\n                self.adj_list[destination_vertex] = [source_vertex]\n            # if only destination vertex is present in adjacency list, add source vertex\n            # to destination vertex list of adjacent vertices, then create a new vertex\n            # with source vertex as key and assign a list containing the source vertex\n            # as it's first adjacent vertex.\n            elif destination_vertex in self.adj_list:\n                self.adj_list[destination_vertex].append(source_vertex)\n                self.adj_list[source_vertex] = [destination_vertex]\n            # if both source vertex and destination vertex are not present in adjacency\n            # list, create a new vertex with source vertex as key and assign a list\n            # containing the destination vertex as it's first adjacent vertex also\n            # create a new vertex with destination vertex as key and assign a list\n            # containing the source vertex as it's first adjacent vertex.\n            else:\n                self.adj_list[source_vertex] = [destination_vertex]\n                self.adj_list[destination_vertex] = [source_vertex]\n        # For directed graphs\n        # if both source vertex and destination vertex are present in adjacency\n        # list, add destination vertex to source vertex list of adjacent vertices.\n        elif source_vertex in self.adj_list and destination_vertex in self.adj_list:\n            self.adj_list[source_vertex].append(destination_vertex)\n        # if only source vertex is present in adjacency list, add destination\n        # vertex to source vertex list of adjacent vertices and create a new vertex\n        # with destination vertex as key, which has no adjacent vertex\n        elif source_vertex in self.adj_list:\n            self.adj_list[source_vertex].append(destination_vertex)\n            self.adj_list[destination_vertex] = []\n        # if only destination vertex is present in adjacency list, create a new\n        # vertex with source vertex as key and assign a list containing destination\n        # vertex as first adjacent vertex\n        elif destination_vertex in self.adj_list:\n            self.adj_list[source_vertex] = [destination_vertex]\n        # if both source vertex and destination vertex are not present in adjacency\n        # list, create a new vertex with source vertex as key and a list containing\n        # destination vertex as it's first adjacent vertex. Then create a new vertex\n        # with destination vertex as key, which has no adjacent vertex\n        else:\n            self.adj_list[source_vertex] = [destination_vertex]\n            self.adj_list[destination_vertex] = []\n\n        return self\n\n    def __repr__(self) -> str:\n        return pformat(self.adj_list)\n"
  },
  {
    "path": "graphs/graphs_floyd_warshall.py",
    "content": "# floyd_warshall.py\n\"\"\"\nThe problem is to find the shortest distance between all pairs of vertices in a\nweighted directed graph that can have negative edge weights.\n\"\"\"\n\n\ndef _print_dist(dist, v):\n    print(\"\\nThe shortest path matrix using Floyd Warshall algorithm\\n\")\n    for i in range(v):\n        for j in range(v):\n            if dist[i][j] != float(\"inf\"):\n                print(int(dist[i][j]), end=\"\\t\")\n            else:\n                print(\"INF\", end=\"\\t\")\n        print()\n\n\ndef floyd_warshall(graph, v):\n    \"\"\"\n    :param graph: 2D array calculated from weight[edge[i, j]]\n    :type graph: List[List[float]]\n    :param v: number of vertices\n    :type v: int\n    :return: shortest distance between all vertex pairs\n    distance[u][v] will contain the shortest distance from vertex u to v.\n\n    1. For all edges from v to n, distance[i][j] = weight(edge(i, j)).\n    3. The algorithm then performs distance[i][j] = min(distance[i][j], distance[i][k] +\n        distance[k][j]) for each possible pair i, j of vertices.\n    4. The above is repeated for each vertex k in the graph.\n    5. Whenever distance[i][j] is given a new minimum value, next vertex[i][j] is\n        updated to the next vertex[i][k].\n    \"\"\"\n\n    dist = [[float(\"inf\") for _ in range(v)] for _ in range(v)]\n\n    for i in range(v):\n        for j in range(v):\n            dist[i][j] = graph[i][j]\n\n            # check vertex k against all other vertices (i, j)\n    for k in range(v):\n        # looping through rows of graph array\n        for i in range(v):\n            # looping through columns of graph array\n            for j in range(v):\n                if (\n                    dist[i][k] != float(\"inf\")\n                    and dist[k][j] != float(\"inf\")\n                    and dist[i][k] + dist[k][j] < dist[i][j]\n                ):\n                    dist[i][j] = dist[i][k] + dist[k][j]\n\n    _print_dist(dist, v)\n    return dist, v\n\n\nif __name__ == \"__main__\":\n    v = int(input(\"Enter number of vertices: \"))\n    e = int(input(\"Enter number of edges: \"))\n\n    graph = [[float(\"inf\") for i in range(v)] for j in range(v)]\n\n    for i in range(v):\n        graph[i][i] = 0.0\n\n        # src and dst are indices that must be within the array size graph[e][v]\n        # failure to follow this will result in an error\n    for i in range(e):\n        print(\"\\nEdge \", i + 1)\n        src = int(input(\"Enter source:\"))\n        dst = int(input(\"Enter destination:\"))\n        weight = float(input(\"Enter weight:\"))\n        graph[src][dst] = weight\n\n    floyd_warshall(graph, v)\n\n    # Example Input\n    # Enter number of vertices: 3\n    # Enter number of edges: 2\n\n    # # generated graph from vertex and edge inputs\n    # [[inf, inf, inf], [inf, inf, inf], [inf, inf, inf]]\n    # [[0.0, inf, inf], [inf, 0.0, inf], [inf, inf, 0.0]]\n\n    # specify source, destination and weight for edge #1\n    # Edge  1\n    # Enter source:1\n    # Enter destination:2\n    # Enter weight:2\n\n    # specify source, destination and weight for edge #2\n    # Edge  2\n    # Enter source:2\n    # Enter destination:1\n    # Enter weight:1\n\n    # # Expected Output from the vertice, edge and src, dst, weight inputs!!\n    # 0\t\tINF\tINF\n    # INF\t0\t2\n    # INF\t1\t0\n"
  },
  {
    "path": "graphs/greedy_best_first.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/Best-first_search#Greedy_BFS\n\"\"\"\n\nfrom __future__ import annotations\n\nPath = list[tuple[int, int]]\n\n# 0's are free path whereas 1's are obstacles\nTEST_GRIDS = [\n    [\n        [0, 0, 0, 0, 0, 0, 0],\n        [0, 1, 0, 0, 0, 0, 0],\n        [0, 0, 0, 0, 0, 0, 0],\n        [0, 0, 1, 0, 0, 0, 0],\n        [1, 0, 1, 0, 0, 0, 0],\n        [0, 0, 0, 0, 0, 0, 0],\n        [0, 0, 0, 0, 1, 0, 0],\n    ],\n    [\n        [0, 0, 0, 1, 1, 0, 0],\n        [0, 0, 0, 0, 1, 0, 1],\n        [0, 0, 0, 1, 1, 0, 0],\n        [0, 1, 0, 0, 1, 0, 0],\n        [1, 0, 0, 1, 1, 0, 1],\n        [0, 0, 0, 0, 0, 0, 0],\n    ],\n    [\n        [0, 0, 1, 0, 0],\n        [0, 1, 0, 0, 0],\n        [0, 0, 1, 0, 1],\n        [1, 0, 0, 1, 1],\n        [0, 0, 0, 0, 0],\n    ],\n]\n\ndelta = ([-1, 0], [0, -1], [1, 0], [0, 1])  # up, left, down, right\n\n\nclass Node:\n    \"\"\"\n    >>> k = Node(0, 0, 4, 5, 0, None)\n    >>> k.calculate_heuristic()\n    9\n    >>> n = Node(1, 4, 3, 4, 2, None)\n    >>> n.calculate_heuristic()\n    2\n    >>> l = [k, n]\n    >>> n == l[0]\n    False\n    >>> l.sort()\n    >>> n == l[0]\n    True\n    \"\"\"\n\n    def __init__(\n        self,\n        pos_x: int,\n        pos_y: int,\n        goal_x: int,\n        goal_y: int,\n        g_cost: float,\n        parent: Node | None,\n    ):\n        self.pos_x = pos_x\n        self.pos_y = pos_y\n        self.pos = (pos_y, pos_x)\n        self.goal_x = goal_x\n        self.goal_y = goal_y\n        self.g_cost = g_cost\n        self.parent = parent\n        self.f_cost = self.calculate_heuristic()\n\n    def calculate_heuristic(self) -> float:\n        \"\"\"\n        The heuristic here is the Manhattan Distance\n        Could elaborate to offer more than one choice\n        \"\"\"\n        dx = abs(self.pos_x - self.goal_x)\n        dy = abs(self.pos_y - self.goal_y)\n        return dx + dy\n\n    def __lt__(self, other) -> bool:\n        return self.f_cost < other.f_cost\n\n    def __eq__(self, other) -> bool:\n        return self.pos == other.pos\n\n\nclass GreedyBestFirst:\n    \"\"\"\n    >>> grid = TEST_GRIDS[2]\n    >>> gbf = GreedyBestFirst(grid, (0, 0), (len(grid) - 1, len(grid[0]) - 1))\n    >>> [x.pos for x in gbf.get_successors(gbf.start)]\n    [(1, 0), (0, 1)]\n    >>> (gbf.start.pos_y + delta[3][0], gbf.start.pos_x + delta[3][1])\n    (0, 1)\n    >>> (gbf.start.pos_y + delta[2][0], gbf.start.pos_x + delta[2][1])\n    (1, 0)\n    >>> gbf.retrace_path(gbf.start)\n    [(0, 0)]\n    >>> gbf.search()  # doctest: +NORMALIZE_WHITESPACE\n    [(0, 0), (1, 0), (2, 0), (2, 1), (3, 1), (4, 1), (4, 2), (4, 3),\n     (4, 4)]\n    \"\"\"\n\n    def __init__(\n        self, grid: list[list[int]], start: tuple[int, int], goal: tuple[int, int]\n    ):\n        self.grid = grid\n        self.start = Node(start[1], start[0], goal[1], goal[0], 0, None)\n        self.target = Node(goal[1], goal[0], goal[1], goal[0], 99999, None)\n\n        self.open_nodes = [self.start]\n        self.closed_nodes: list[Node] = []\n\n        self.reached = False\n\n    def search(self) -> Path | None:\n        \"\"\"\n        Search for the path,\n        if a path is not found, only the starting position is returned\n        \"\"\"\n        while self.open_nodes:\n            # Open Nodes are sorted using __lt__\n            self.open_nodes.sort()\n            current_node = self.open_nodes.pop(0)\n\n            if current_node.pos == self.target.pos:\n                self.reached = True\n                return self.retrace_path(current_node)\n\n            self.closed_nodes.append(current_node)\n            successors = self.get_successors(current_node)\n\n            for child_node in successors:\n                if child_node in self.closed_nodes:\n                    continue\n\n                if child_node not in self.open_nodes:\n                    self.open_nodes.append(child_node)\n\n        if not self.reached:\n            return [self.start.pos]\n        return None\n\n    def get_successors(self, parent: Node) -> list[Node]:\n        \"\"\"\n        Returns a list of successors (both in the grid and free spaces)\n        \"\"\"\n        return [\n            Node(\n                pos_x,\n                pos_y,\n                self.target.pos_x,\n                self.target.pos_y,\n                parent.g_cost + 1,\n                parent,\n            )\n            for action in delta\n            if (\n                0 <= (pos_x := parent.pos_x + action[1]) < len(self.grid[0])\n                and 0 <= (pos_y := parent.pos_y + action[0]) < len(self.grid)\n                and self.grid[pos_y][pos_x] == 0\n            )\n        ]\n\n    def retrace_path(self, node: Node | None) -> Path:\n        \"\"\"\n        Retrace the path from parents to parents until start node\n        \"\"\"\n        current_node = node\n        path = []\n        while current_node is not None:\n            path.append((current_node.pos_y, current_node.pos_x))\n            current_node = current_node.parent\n        path.reverse()\n        return path\n\n\nif __name__ == \"__main__\":\n    for idx, grid in enumerate(TEST_GRIDS):\n        print(f\"==grid-{idx + 1}==\")\n\n        init = (0, 0)\n        goal = (len(grid) - 1, len(grid[0]) - 1)\n        for elem in grid:\n            print(elem)\n\n        print(\"------\")\n\n        greedy_bf = GreedyBestFirst(grid, init, goal)\n        path = greedy_bf.search()\n        if path:\n            for pos_x, pos_y in path:\n                grid[pos_x][pos_y] = 2\n\n            for elem in grid:\n                print(elem)\n"
  },
  {
    "path": "graphs/greedy_min_vertex_cover.py",
    "content": "\"\"\"\n* Author: Manuel Di Lullo (https://github.com/manueldilullo)\n* Description: Approximization algorithm for minimum vertex cover problem.\n               Greedy Approach. Uses graphs represented with an adjacency list\nURL: https://mathworld.wolfram.com/MinimumVertexCover.html\nURL: https://cs.stackexchange.com/questions/129017/greedy-algorithm-for-vertex-cover\n\"\"\"\n\nimport heapq\n\n\ndef greedy_min_vertex_cover(graph: dict) -> set[int]:\n    \"\"\"\n    Greedy APX Algorithm for min Vertex Cover\n    @input: graph (graph stored in an adjacency list where each vertex\n            is represented with an integer)\n    @example:\n    >>> graph = {0: [1, 3], 1: [0, 3], 2: [0, 3, 4], 3: [0, 1, 2], 4: [2, 3]}\n    >>> greedy_min_vertex_cover(graph)\n    {0, 1, 2, 4}\n    \"\"\"\n    # queue used to store nodes and their rank\n    queue: list[list] = []\n\n    # for each node and his adjacency list add them and the rank of the node to queue\n    # using heapq module the queue will be filled like a Priority Queue\n    # heapq works with a min priority queue, so I used -1*len(v) to build it\n    for key, value in graph.items():\n        # O(log(n))\n        heapq.heappush(queue, [-1 * len(value), (key, value)])\n\n    # chosen_vertices = set of chosen vertices\n    chosen_vertices = set()\n\n    # while queue isn't empty and there are still edges\n    #   (queue[0][0] is the rank of the node with max rank)\n    while queue and queue[0][0] != 0:\n        # extract vertex with max rank from queue and add it to chosen_vertices\n        argmax = heapq.heappop(queue)[1][0]\n        chosen_vertices.add(argmax)\n\n        # Remove all arcs adjacent to argmax\n        for elem in queue:\n            # if v haven't adjacent node, skip\n            if elem[0] == 0:\n                continue\n            # if argmax is reachable from elem\n            # remove argmax from elem's adjacent list and update his rank\n            if argmax in elem[1][1]:\n                index = elem[1][1].index(argmax)\n                del elem[1][1][index]\n                elem[0] += 1\n        # re-order the queue\n        heapq.heapify(queue)\n    return chosen_vertices\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    graph = {0: [1, 3], 1: [0, 3], 2: [0, 3, 4], 3: [0, 1, 2], 4: [2, 3]}\n    print(f\"Minimum vertex cover:\\n{greedy_min_vertex_cover(graph)}\")\n"
  },
  {
    "path": "graphs/kahns_algorithm_long.py",
    "content": "# Finding longest distance in Directed Acyclic Graph using KahnsAlgorithm\ndef longest_distance(graph):\n    indegree = [0] * len(graph)\n    queue = []\n    long_dist = [1] * len(graph)\n\n    for values in graph.values():\n        for i in values:\n            indegree[i] += 1\n\n    for i in range(len(indegree)):\n        if indegree[i] == 0:\n            queue.append(i)\n\n    while queue:\n        vertex = queue.pop(0)\n        for x in graph[vertex]:\n            indegree[x] -= 1\n\n            long_dist[x] = max(long_dist[x], long_dist[vertex] + 1)\n\n            if indegree[x] == 0:\n                queue.append(x)\n\n    print(max(long_dist))\n\n\n# Adjacency list of Graph\ngraph = {0: [2, 3, 4], 1: [2, 7], 2: [5], 3: [5, 7], 4: [7], 5: [6], 6: [7], 7: []}\nlongest_distance(graph)\n"
  },
  {
    "path": "graphs/kahns_algorithm_topo.py",
    "content": "def topological_sort(graph: dict[int, list[int]]) -> list[int] | None:\n    \"\"\"\n    Perform topological sorting of a Directed Acyclic Graph (DAG)\n    using Kahn's Algorithm via Breadth-First Search (BFS).\n\n    Topological sorting is a linear ordering of vertices in a graph such that for\n    every directed edge u → v, vertex u comes before vertex v in the ordering.\n\n    Parameters:\n    graph: Adjacency list representing the directed graph where keys are\n           vertices, and values are lists of adjacent vertices.\n\n    Returns:\n    The topologically sorted order of vertices if the graph is a DAG.\n    Returns None if the graph contains a cycle.\n\n    Example:\n    >>> graph = {0: [1, 2], 1: [3], 2: [3], 3: [4, 5], 4: [], 5: []}\n    >>> topological_sort(graph)\n    [0, 1, 2, 3, 4, 5]\n\n    >>> graph_with_cycle = {0: [1], 1: [2], 2: [0]}\n    >>> topological_sort(graph_with_cycle)\n    \"\"\"\n\n    indegree = [0] * len(graph)\n    queue = []\n    topo_order = []\n    processed_vertices_count = 0\n\n    # Calculate the indegree of each vertex\n    for values in graph.values():\n        for i in values:\n            indegree[i] += 1\n\n    # Add all vertices with 0 indegree to the queue\n    for i in range(len(indegree)):\n        if indegree[i] == 0:\n            queue.append(i)\n\n    # Perform BFS\n    while queue:\n        vertex = queue.pop(0)\n        processed_vertices_count += 1\n        topo_order.append(vertex)\n\n        # Traverse neighbors\n        for neighbor in graph[vertex]:\n            indegree[neighbor] -= 1\n            if indegree[neighbor] == 0:\n                queue.append(neighbor)\n\n    if processed_vertices_count != len(graph):\n        return None  # no topological ordering exists due to cycle\n    return topo_order  # valid topological ordering\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "graphs/karger.py",
    "content": "\"\"\"\nAn implementation of Karger's Algorithm for partitioning a graph.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport random\n\n# Adjacency list representation of this graph:\n# https://en.wikipedia.org/wiki/File:Single_run_of_Karger%E2%80%99s_Mincut_algorithm.svg\nTEST_GRAPH = {\n    \"1\": [\"2\", \"3\", \"4\", \"5\"],\n    \"2\": [\"1\", \"3\", \"4\", \"5\"],\n    \"3\": [\"1\", \"2\", \"4\", \"5\", \"10\"],\n    \"4\": [\"1\", \"2\", \"3\", \"5\", \"6\"],\n    \"5\": [\"1\", \"2\", \"3\", \"4\", \"7\"],\n    \"6\": [\"7\", \"8\", \"9\", \"10\", \"4\"],\n    \"7\": [\"6\", \"8\", \"9\", \"10\", \"5\"],\n    \"8\": [\"6\", \"7\", \"9\", \"10\"],\n    \"9\": [\"6\", \"7\", \"8\", \"10\"],\n    \"10\": [\"6\", \"7\", \"8\", \"9\", \"3\"],\n}\n\n\ndef partition_graph(graph: dict[str, list[str]]) -> set[tuple[str, str]]:\n    \"\"\"\n    Partitions a graph using Karger's Algorithm. Implemented from\n    pseudocode found here:\n    https://en.wikipedia.org/wiki/Karger%27s_algorithm.\n    This function involves random choices, meaning it will not give\n    consistent outputs.\n\n    Args:\n        graph: A dictionary containing adacency lists for the graph.\n            Nodes must be strings.\n\n    Returns:\n        The cutset of the cut found by Karger's Algorithm.\n\n    >>> graph = {'0':['1'], '1':['0']}\n    >>> partition_graph(graph)\n    {('0', '1')}\n    \"\"\"\n    # Dict that maps contracted nodes to a list of all the nodes it \"contains.\"\n    contracted_nodes = {node: {node} for node in graph}\n\n    graph_copy = {node: graph[node][:] for node in graph}\n\n    while len(graph_copy) > 2:\n        # Choose a random edge.\n        u = random.choice(list(graph_copy.keys()))\n        v = random.choice(graph_copy[u])\n\n        # Contract edge (u, v) to new node uv\n        uv = u + v\n        uv_neighbors = list(set(graph_copy[u] + graph_copy[v]))\n        uv_neighbors.remove(u)\n        uv_neighbors.remove(v)\n        graph_copy[uv] = uv_neighbors\n        for neighbor in uv_neighbors:\n            graph_copy[neighbor].append(uv)\n\n        contracted_nodes[uv] = set(contracted_nodes[u].union(contracted_nodes[v]))\n\n        # Remove nodes u and v.\n        del graph_copy[u]\n        del graph_copy[v]\n        for neighbor in uv_neighbors:\n            if u in graph_copy[neighbor]:\n                graph_copy[neighbor].remove(u)\n            if v in graph_copy[neighbor]:\n                graph_copy[neighbor].remove(v)\n\n    # Find cutset.\n    groups = [contracted_nodes[node] for node in graph_copy]\n    return {\n        (node, neighbor)\n        for node in groups[0]\n        for neighbor in graph[node]\n        if neighbor in groups[1]\n    }\n\n\nif __name__ == \"__main__\":\n    print(partition_graph(TEST_GRAPH))\n"
  },
  {
    "path": "graphs/lanczos_eigenvectors.py",
    "content": "\"\"\"\nLanczos Method for Finding Eigenvalues and Eigenvectors of a Graph.\n\nThis module demonstrates the Lanczos method to approximate the largest eigenvalues\nand corresponding eigenvectors of a symmetric matrix represented as a graph's\nadjacency list. The method efficiently handles large, sparse matrices by converting\nthe graph to a tridiagonal matrix, whose eigenvalues and eigenvectors are then\ncomputed.\n\nKey Functions:\n- `find_lanczos_eigenvectors`: Computes the k largest eigenvalues and vectors.\n- `lanczos_iteration`: Constructs the tridiagonal matrix and orthonormal basis vectors.\n- `multiply_matrix_vector`: Multiplies an adjacency list graph with a vector.\n\nComplexity:\n- Time: O(k * n), where k is the number of eigenvalues and n is the matrix size.\n- Space: O(n), due to sparse representation and tridiagonal matrix structure.\n\nFurther Reading:\n- Lanczos Algorithm: https://en.wikipedia.org/wiki/Lanczos_algorithm\n- Eigenvector Centrality: https://en.wikipedia.org/wiki/Eigenvector_centrality\n\nExample Usage:\nGiven a graph represented by an adjacency list, the `find_lanczos_eigenvectors`\nfunction returns the largest eigenvalues and eigenvectors. This can be used to\nanalyze graph centrality.\n\"\"\"\n\nimport numpy as np\n\n\ndef validate_adjacency_list(graph: list[list[int | None]]) -> None:\n    \"\"\"Validates the adjacency list format for the graph.\n\n    Args:\n        graph: A list of lists where each sublist contains the neighbors of a node.\n\n    Raises:\n        ValueError: If the graph is not a list of lists, or if any node has\n                    invalid neighbors (e.g., out-of-range or non-integer values).\n\n    >>> validate_adjacency_list([[1, 2], [0], [0, 1]])\n    >>> validate_adjacency_list([[]])  # No neighbors, valid case\n    >>> validate_adjacency_list([[1], [2], [-1]])  # Invalid neighbor\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid neighbor -1 in node 2 adjacency list.\n    \"\"\"\n    if not isinstance(graph, list):\n        raise ValueError(\"Graph should be a list of lists.\")\n\n    for node_index, neighbors in enumerate(graph):\n        if not isinstance(neighbors, list):\n            no_neighbors_message: str = (\n                f\"Node {node_index} should have a list of neighbors.\"\n            )\n            raise ValueError(no_neighbors_message)\n        for neighbor_index in neighbors:\n            if (\n                not isinstance(neighbor_index, int)\n                or neighbor_index < 0\n                or neighbor_index >= len(graph)\n            ):\n                invalid_neighbor_message: str = (\n                    f\"Invalid neighbor {neighbor_index} in node {node_index} \"\n                    f\"adjacency list.\"\n                )\n                raise ValueError(invalid_neighbor_message)\n\n\ndef lanczos_iteration(\n    graph: list[list[int | None]], num_eigenvectors: int\n) -> tuple[np.ndarray, np.ndarray]:\n    \"\"\"Constructs the tridiagonal matrix and orthonormal basis vectors using the\n    Lanczos method.\n\n    Args:\n        graph: The graph represented as a list of adjacency lists.\n        num_eigenvectors: The number of largest eigenvalues and eigenvectors\n                          to approximate.\n\n    Returns:\n        A tuple containing:\n            - tridiagonal_matrix: A (num_eigenvectors x num_eigenvectors) symmetric\n                                  matrix.\n            - orthonormal_basis: A (num_nodes x num_eigenvectors) matrix of orthonormal\n                                 basis vectors.\n\n    Raises:\n        ValueError: If num_eigenvectors is less than 1 or greater than the number of\n                    nodes.\n\n    >>> graph = [[1, 2], [0, 2], [0, 1]]\n    >>> T, Q = lanczos_iteration(graph, 2)\n    >>> T.shape == (2, 2) and Q.shape == (3, 2)\n    True\n    \"\"\"\n    num_nodes: int = len(graph)\n    if not (1 <= num_eigenvectors <= num_nodes):\n        raise ValueError(\n            \"Number of eigenvectors must be between 1 and the number of \"\n            \"nodes in the graph.\"\n        )\n\n    orthonormal_basis: np.ndarray = np.zeros((num_nodes, num_eigenvectors))\n    tridiagonal_matrix: np.ndarray = np.zeros((num_eigenvectors, num_eigenvectors))\n\n    rng = np.random.default_rng()\n    initial_vector: np.ndarray = rng.random(num_nodes)\n    initial_vector /= np.sqrt(np.dot(initial_vector, initial_vector))\n    orthonormal_basis[:, 0] = initial_vector\n\n    prev_beta: float = 0.0\n    for iter_index in range(num_eigenvectors):\n        result_vector: np.ndarray = multiply_matrix_vector(\n            graph, orthonormal_basis[:, iter_index]\n        )\n        if iter_index > 0:\n            result_vector -= prev_beta * orthonormal_basis[:, iter_index - 1]\n        alpha_value: float = np.dot(orthonormal_basis[:, iter_index], result_vector)\n        result_vector -= alpha_value * orthonormal_basis[:, iter_index]\n\n        prev_beta = np.sqrt(np.dot(result_vector, result_vector))\n        if iter_index < num_eigenvectors - 1 and prev_beta > 1e-10:\n            orthonormal_basis[:, iter_index + 1] = result_vector / prev_beta\n        tridiagonal_matrix[iter_index, iter_index] = alpha_value\n        if iter_index < num_eigenvectors - 1:\n            tridiagonal_matrix[iter_index, iter_index + 1] = prev_beta\n            tridiagonal_matrix[iter_index + 1, iter_index] = prev_beta\n    return tridiagonal_matrix, orthonormal_basis\n\n\ndef multiply_matrix_vector(\n    graph: list[list[int | None]], vector: np.ndarray\n) -> np.ndarray:\n    \"\"\"Performs multiplication of a graph's adjacency list representation with a vector.\n\n    Args:\n        graph: The adjacency list of the graph.\n        vector: A 1D numpy array representing the vector to multiply.\n\n    Returns:\n        A numpy array representing the product of the adjacency list and the vector.\n\n    Raises:\n        ValueError: If the vector's length does not match the number of nodes in the\n                    graph.\n\n    >>> multiply_matrix_vector([[1, 2], [0, 2], [0, 1]], np.array([1, 1, 1]))\n    array([2., 2., 2.])\n    >>> multiply_matrix_vector([[1, 2], [0, 2], [0, 1]], np.array([0, 1, 0]))\n    array([1., 0., 1.])\n    \"\"\"\n    num_nodes: int = len(graph)\n    if vector.shape[0] != num_nodes:\n        raise ValueError(\"Vector length must match the number of nodes in the graph.\")\n\n    result: np.ndarray = np.zeros(num_nodes)\n    for node_index, neighbors in enumerate(graph):\n        for neighbor_index in neighbors:\n            result[node_index] += vector[neighbor_index]\n    return result\n\n\ndef find_lanczos_eigenvectors(\n    graph: list[list[int | None]], num_eigenvectors: int\n) -> tuple[np.ndarray, np.ndarray]:\n    \"\"\"Computes the largest eigenvalues and their corresponding eigenvectors using the\n    Lanczos method.\n\n    Args:\n        graph: The graph as a list of adjacency lists.\n        num_eigenvectors: Number of largest eigenvalues and eigenvectors to compute.\n\n    Returns:\n        A tuple containing:\n            - eigenvalues: 1D array of the largest eigenvalues in descending order.\n            - eigenvectors: 2D array where each column is an eigenvector corresponding\n                            to an eigenvalue.\n\n    Raises:\n        ValueError: If the graph format is invalid or num_eigenvectors is out of bounds.\n\n    >>> eigenvalues, eigenvectors = find_lanczos_eigenvectors(\n    ...     [[1, 2], [0, 2], [0, 1]], 2\n    ... )\n    >>> len(eigenvalues) == 2 and eigenvectors.shape[1] == 2\n    True\n    \"\"\"\n    validate_adjacency_list(graph)\n    tridiagonal_matrix, orthonormal_basis = lanczos_iteration(graph, num_eigenvectors)\n    eigenvalues, eigenvectors = np.linalg.eigh(tridiagonal_matrix)\n    return eigenvalues[::-1], np.dot(orthonormal_basis, eigenvectors[:, ::-1])\n\n\ndef main() -> None:\n    \"\"\"\n    Main driver function for testing the implementation with doctests.\n    \"\"\"\n    import doctest\n\n    doctest.testmod()\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "graphs/markov_chain.py",
    "content": "from __future__ import annotations\n\nfrom collections import Counter\nfrom random import random\n\n\nclass MarkovChainGraphUndirectedUnweighted:\n    \"\"\"\n    Undirected Unweighted Graph for running Markov Chain Algorithm\n    \"\"\"\n\n    def __init__(self):\n        self.connections = {}\n\n    def add_node(self, node: str) -> None:\n        self.connections[node] = {}\n\n    def add_transition_probability(\n        self, node1: str, node2: str, probability: float\n    ) -> None:\n        if node1 not in self.connections:\n            self.add_node(node1)\n        if node2 not in self.connections:\n            self.add_node(node2)\n        self.connections[node1][node2] = probability\n\n    def get_nodes(self) -> list[str]:\n        return list(self.connections)\n\n    def transition(self, node: str) -> str:\n        current_probability = 0\n        random_value = random()\n\n        for dest in self.connections[node]:\n            current_probability += self.connections[node][dest]\n            if current_probability > random_value:\n                return dest\n        return \"\"\n\n\ndef get_transitions(\n    start: str, transitions: list[tuple[str, str, float]], steps: int\n) -> dict[str, int]:\n    \"\"\"\n    Running Markov Chain algorithm and calculating the number of times each node is\n    visited\n\n    >>> transitions = [\n    ... ('a', 'a', 0.9),\n    ... ('a', 'b', 0.075),\n    ... ('a', 'c', 0.025),\n    ... ('b', 'a', 0.15),\n    ... ('b', 'b', 0.8),\n    ... ('b', 'c', 0.05),\n    ... ('c', 'a', 0.25),\n    ... ('c', 'b', 0.25),\n    ... ('c', 'c', 0.5)\n    ... ]\n\n    >>> result = get_transitions('a', transitions, 5000)\n\n    >>> result['a'] > result['b'] > result['c']\n    True\n    \"\"\"\n\n    graph = MarkovChainGraphUndirectedUnweighted()\n\n    for node1, node2, probability in transitions:\n        graph.add_transition_probability(node1, node2, probability)\n\n    visited = Counter(graph.get_nodes())\n    node = start\n\n    for _ in range(steps):\n        node = graph.transition(node)\n        visited[node] += 1\n\n    return visited\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "graphs/matching_min_vertex_cover.py",
    "content": "\"\"\"\n* Author: Manuel Di Lullo (https://github.com/manueldilullo)\n* Description: Approximization algorithm for minimum vertex cover problem.\n               Matching Approach. Uses graphs represented with an adjacency list\n\nURL: https://mathworld.wolfram.com/MinimumVertexCover.html\nURL: https://www.princeton.edu/~aaa/Public/Teaching/ORF523/ORF523_Lec6.pdf\n\"\"\"\n\n\ndef matching_min_vertex_cover(graph: dict) -> set:\n    \"\"\"\n    APX Algorithm for min Vertex Cover using Matching Approach\n    @input: graph (graph stored in an adjacency list where each vertex\n            is represented as an integer)\n    @example:\n    >>> graph = {0: [1, 3], 1: [0, 3], 2: [0, 3, 4], 3: [0, 1, 2], 4: [2, 3]}\n    >>> matching_min_vertex_cover(graph)\n    {0, 1, 2, 4}\n    \"\"\"\n    # chosen_vertices = set of chosen vertices\n    chosen_vertices = set()\n    # edges = list of graph's edges\n    edges = get_edges(graph)\n\n    # While there are still elements in edges list, take an arbitrary edge\n    # (from_node, to_node) and add his extremity to chosen_vertices and then\n    # remove all arcs adjacent to the from_node and to_node\n    while edges:\n        from_node, to_node = edges.pop()\n        chosen_vertices.add(from_node)\n        chosen_vertices.add(to_node)\n        for edge in edges.copy():\n            if from_node in edge or to_node in edge:\n                edges.discard(edge)\n    return chosen_vertices\n\n\ndef get_edges(graph: dict) -> set:\n    \"\"\"\n    Return a set of couples that represents all of the edges.\n    @input: graph (graph stored in an adjacency list where each vertex is\n            represented as an integer)\n    @example:\n    >>> graph = {0: [1, 3], 1: [0, 3], 2: [0, 3], 3: [0, 1, 2]}\n    >>> get_edges(graph)\n    {(0, 1), (3, 1), (0, 3), (2, 0), (3, 0), (2, 3), (1, 0), (3, 2), (1, 3)}\n    \"\"\"\n    edges = set()\n    for from_node, to_nodes in graph.items():\n        for to_node in to_nodes:\n            edges.add((from_node, to_node))\n    return edges\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    # graph = {0: [1, 3], 1: [0, 3], 2: [0, 3, 4], 3: [0, 1, 2], 4: [2, 3]}\n    # print(f\"Matching vertex cover:\\n{matching_min_vertex_cover(graph)}\")\n"
  },
  {
    "path": "graphs/minimum_path_sum.py",
    "content": "def min_path_sum(grid: list) -> int:\n    \"\"\"\n    Find the path from top left to bottom right of array of numbers\n    with the lowest possible sum and return the sum along this path.\n    >>> min_path_sum([\n    ...     [1, 3, 1],\n    ...     [1, 5, 1],\n    ...     [4, 2, 1],\n    ... ])\n    7\n\n    >>> min_path_sum([\n    ...     [1, 0, 5, 6, 7],\n    ...     [8, 9, 0, 4, 2],\n    ...     [4, 4, 4, 5, 1],\n    ...     [9, 6, 3, 1, 0],\n    ...     [8, 4, 3, 2, 7],\n    ... ])\n    20\n\n    >>> min_path_sum(None)\n    Traceback (most recent call last):\n        ...\n    TypeError: The grid does not contain the appropriate information\n\n    >>> min_path_sum([[]])\n    Traceback (most recent call last):\n        ...\n    TypeError: The grid does not contain the appropriate information\n    \"\"\"\n\n    if not grid or not grid[0]:\n        raise TypeError(\"The grid does not contain the appropriate information\")\n\n    for cell_n in range(1, len(grid[0])):\n        grid[0][cell_n] += grid[0][cell_n - 1]\n    row_above = grid[0]\n\n    for row_n in range(1, len(grid)):\n        current_row = grid[row_n]\n        grid[row_n] = fill_row(current_row, row_above)\n        row_above = grid[row_n]\n\n    return grid[-1][-1]\n\n\ndef fill_row(current_row: list, row_above: list) -> list:\n    \"\"\"\n    >>> fill_row([2, 2, 2], [1, 2, 3])\n    [3, 4, 5]\n    \"\"\"\n\n    current_row[0] += row_above[0]\n    for cell_n in range(1, len(current_row)):\n        current_row[cell_n] += min(current_row[cell_n - 1], row_above[cell_n])\n\n    return current_row\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "graphs/minimum_spanning_tree_boruvka.py",
    "content": "class Graph:\r\n    \"\"\"\r\n    Data structure to store graphs (based on adjacency lists)\r\n    \"\"\"\r\n\r\n    def __init__(self):\r\n        self.num_vertices = 0\r\n        self.num_edges = 0\r\n        self.adjacency = {}\r\n\r\n    def add_vertex(self, vertex):\r\n        \"\"\"\r\n        Adds a vertex to the graph\r\n\r\n        \"\"\"\r\n        if vertex not in self.adjacency:\r\n            self.adjacency[vertex] = {}\r\n            self.num_vertices += 1\r\n\r\n    def add_edge(self, head, tail, weight):\r\n        \"\"\"\r\n        Adds an edge to the graph\r\n\r\n        \"\"\"\r\n\r\n        self.add_vertex(head)\r\n        self.add_vertex(tail)\r\n\r\n        if head == tail:\r\n            return\r\n\r\n        self.adjacency[head][tail] = weight\r\n        self.adjacency[tail][head] = weight\r\n\r\n    def distinct_weight(self):\r\n        \"\"\"\r\n        For Boruvks's algorithm the weights should be distinct\r\n        Converts the weights to be distinct\r\n\r\n        \"\"\"\r\n        edges = self.get_edges()\r\n        for edge in edges:\r\n            head, tail, weight = edge\r\n            edges.remove((tail, head, weight))\r\n        for i in range(len(edges)):\r\n            edges[i] = list(edges[i])\r\n\r\n        edges.sort(key=lambda e: e[2])\r\n        for i in range(len(edges) - 1):\r\n            if edges[i][2] >= edges[i + 1][2]:\r\n                edges[i + 1][2] = edges[i][2] + 1\r\n        for edge in edges:\r\n            head, tail, weight = edge\r\n            self.adjacency[head][tail] = weight\r\n            self.adjacency[tail][head] = weight\r\n\r\n    def __str__(self):\r\n        \"\"\"\r\n        Returns string representation of the graph\r\n        \"\"\"\r\n        string = \"\"\r\n        for tail in self.adjacency:\r\n            for head in self.adjacency[tail]:\r\n                weight = self.adjacency[head][tail]\r\n                string += f\"{head} -> {tail} == {weight}\\n\"\r\n        return string.rstrip(\"\\n\")\r\n\r\n    def get_edges(self):\r\n        \"\"\"\r\n        Returna all edges in the graph\r\n        \"\"\"\r\n        output = []\r\n        for tail in self.adjacency:\r\n            for head in self.adjacency[tail]:\r\n                output.append((tail, head, self.adjacency[head][tail]))\r\n        return output\r\n\r\n    def get_vertices(self):\r\n        \"\"\"\r\n        Returns all vertices in the graph\r\n        \"\"\"\r\n        return self.adjacency.keys()\r\n\r\n    @staticmethod\r\n    def build(vertices=None, edges=None):\r\n        \"\"\"\r\n        Builds a graph from the given set of vertices and edges\r\n\r\n        \"\"\"\r\n        g = Graph()\r\n        if vertices is None:\r\n            vertices = []\r\n        if edges is None:\r\n            edge = []\r\n        for vertex in vertices:\r\n            g.add_vertex(vertex)\r\n        for edge in edges:\r\n            g.add_edge(*edge)\r\n        return g\r\n\r\n    class UnionFind:\r\n        \"\"\"\r\n        Disjoint set Union and Find for Boruvka's algorithm\r\n        \"\"\"\r\n\r\n        def __init__(self):\r\n            self.parent = {}\r\n            self.rank = {}\r\n\r\n        def __len__(self):\r\n            return len(self.parent)\r\n\r\n        def make_set(self, item):\r\n            if item in self.parent:\r\n                return self.find(item)\r\n\r\n            self.parent[item] = item\r\n            self.rank[item] = 0\r\n            return item\r\n\r\n        def find(self, item):\r\n            if item not in self.parent:\r\n                return self.make_set(item)\r\n            if item != self.parent[item]:\r\n                self.parent[item] = self.find(self.parent[item])\r\n            return self.parent[item]\r\n\r\n        def union(self, item1, item2):\r\n            root1 = self.find(item1)\r\n            root2 = self.find(item2)\r\n\r\n            if root1 == root2:\r\n                return root1\r\n\r\n            if self.rank[root1] > self.rank[root2]:\r\n                self.parent[root2] = root1\r\n                return root1\r\n\r\n            if self.rank[root1] < self.rank[root2]:\r\n                self.parent[root1] = root2\r\n                return root2\r\n\r\n            if self.rank[root1] == self.rank[root2]:\r\n                self.rank[root1] += 1\r\n                self.parent[root2] = root1\r\n                return root1\r\n            return None\r\n\r\n    @staticmethod\r\n    def boruvka_mst(graph):\r\n        \"\"\"\r\n        Implementation of Boruvka's algorithm\r\n        >>> g = Graph()\r\n        >>> g = Graph.build([0, 1, 2, 3], [[0, 1, 1], [0, 2, 1],[2, 3, 1]])\r\n        >>> g.distinct_weight()\r\n        >>> bg = Graph.boruvka_mst(g)\r\n        >>> print(bg)\r\n        1 -> 0 == 1\r\n        2 -> 0 == 2\r\n        0 -> 1 == 1\r\n        0 -> 2 == 2\r\n        3 -> 2 == 3\r\n        2 -> 3 == 3\r\n        \"\"\"\r\n        num_components = graph.num_vertices\r\n\r\n        union_find = Graph.UnionFind()\r\n        mst_edges = []\r\n        while num_components > 1:\r\n            cheap_edge = {}\r\n            for vertex in graph.get_vertices():\r\n                cheap_edge[vertex] = -1\r\n\r\n            edges = graph.get_edges()\r\n            for edge in edges:\r\n                head, tail, weight = edge\r\n                edges.remove((tail, head, weight))\r\n            for edge in edges:\r\n                head, tail, weight = edge\r\n                set1 = union_find.find(head)\r\n                set2 = union_find.find(tail)\r\n                if set1 != set2:\r\n                    if cheap_edge[set1] == -1 or cheap_edge[set1][2] > weight:\r\n                        cheap_edge[set1] = [head, tail, weight]\r\n\r\n                    if cheap_edge[set2] == -1 or cheap_edge[set2][2] > weight:\r\n                        cheap_edge[set2] = [head, tail, weight]\r\n            for head_tail_weight in cheap_edge.values():\r\n                if head_tail_weight != -1:\r\n                    head, tail, weight = head_tail_weight\r\n                    if union_find.find(head) != union_find.find(tail):\r\n                        union_find.union(head, tail)\r\n                        mst_edges.append(head_tail_weight)\r\n                        num_components = num_components - 1\r\n        mst = Graph.build(edges=mst_edges)\r\n        return mst\r\n"
  },
  {
    "path": "graphs/minimum_spanning_tree_kruskal.py",
    "content": "def kruskal(\n    num_nodes: int, edges: list[tuple[int, int, int]]\n) -> list[tuple[int, int, int]]:\n    \"\"\"\n    >>> kruskal(4, [(0, 1, 3), (1, 2, 5), (2, 3, 1)])\n    [(2, 3, 1), (0, 1, 3), (1, 2, 5)]\n\n    >>> kruskal(4, [(0, 1, 3), (1, 2, 5), (2, 3, 1), (0, 2, 1), (0, 3, 2)])\n    [(2, 3, 1), (0, 2, 1), (0, 1, 3)]\n\n    >>> kruskal(4, [(0, 1, 3), (1, 2, 5), (2, 3, 1), (0, 2, 1), (0, 3, 2),\n    ... (2, 1, 1)])\n    [(2, 3, 1), (0, 2, 1), (2, 1, 1)]\n    \"\"\"\n    edges = sorted(edges, key=lambda edge: edge[2])\n\n    parent = list(range(num_nodes))\n\n    def find_parent(i):\n        if i != parent[i]:\n            parent[i] = find_parent(parent[i])\n        return parent[i]\n\n    minimum_spanning_tree_cost = 0\n    minimum_spanning_tree = []\n\n    for edge in edges:\n        parent_a = find_parent(edge[0])\n        parent_b = find_parent(edge[1])\n        if parent_a != parent_b:\n            minimum_spanning_tree_cost += edge[2]\n            minimum_spanning_tree.append(edge)\n            parent[parent_a] = parent_b\n\n    return minimum_spanning_tree\n\n\nif __name__ == \"__main__\":  # pragma: no cover\n    num_nodes, num_edges = list(map(int, input().strip().split()))\n    edges = []\n\n    for _ in range(num_edges):\n        node1, node2, cost = (int(x) for x in input().strip().split())\n        edges.append((node1, node2, cost))\n\n    kruskal(num_nodes, edges)\n"
  },
  {
    "path": "graphs/minimum_spanning_tree_kruskal2.py",
    "content": "from __future__ import annotations\n\nfrom typing import TypeVar\n\nT = TypeVar(\"T\")\n\n\nclass DisjointSetTreeNode[T]:\n    # Disjoint Set Node to store the parent and rank\n    def __init__(self, data: T) -> None:\n        self.data = data\n        self.parent = self\n        self.rank = 0\n\n\nclass DisjointSetTree[T]:\n    # Disjoint Set DataStructure\n    def __init__(self) -> None:\n        # map from node name to the node object\n        self.map: dict[T, DisjointSetTreeNode[T]] = {}\n\n    def make_set(self, data: T) -> None:\n        # create a new set with x as its member\n        self.map[data] = DisjointSetTreeNode(data)\n\n    def find_set(self, data: T) -> DisjointSetTreeNode[T]:\n        # find the set x belongs to (with path-compression)\n        elem_ref = self.map[data]\n        if elem_ref != elem_ref.parent:\n            elem_ref.parent = self.find_set(elem_ref.parent.data)\n        return elem_ref.parent\n\n    def link(\n        self, node1: DisjointSetTreeNode[T], node2: DisjointSetTreeNode[T]\n    ) -> None:\n        # helper function for union operation\n        if node1.rank > node2.rank:\n            node2.parent = node1\n        else:\n            node1.parent = node2\n            if node1.rank == node2.rank:\n                node2.rank += 1\n\n    def union(self, data1: T, data2: T) -> None:\n        # merge 2 disjoint sets\n        self.link(self.find_set(data1), self.find_set(data2))\n\n\nclass GraphUndirectedWeighted[T]:\n    def __init__(self) -> None:\n        # connections: map from the node to the neighbouring nodes (with weights)\n        self.connections: dict[T, dict[T, int]] = {}\n\n    def add_node(self, node: T) -> None:\n        # add a node ONLY if its not present in the graph\n        if node not in self.connections:\n            self.connections[node] = {}\n\n    def add_edge(self, node1: T, node2: T, weight: int) -> None:\n        # add an edge with the given weight\n        self.add_node(node1)\n        self.add_node(node2)\n        self.connections[node1][node2] = weight\n        self.connections[node2][node1] = weight\n\n    def kruskal(self) -> GraphUndirectedWeighted[T]:\n        # Kruskal's Algorithm to generate a Minimum Spanning Tree (MST) of a graph\n        \"\"\"\n        Details: https://en.wikipedia.org/wiki/Kruskal%27s_algorithm\n\n        Example:\n        >>> g1 = GraphUndirectedWeighted[int]()\n        >>> g1.add_edge(1, 2, 1)\n        >>> g1.add_edge(2, 3, 2)\n        >>> g1.add_edge(3, 4, 1)\n        >>> g1.add_edge(3, 5, 100) # Removed in MST\n        >>> g1.add_edge(4, 5, 5)\n        >>> assert 5 in g1.connections[3]\n        >>> mst = g1.kruskal()\n        >>> assert 5 not in mst.connections[3]\n\n        >>> g2 = GraphUndirectedWeighted[str]()\n        >>> g2.add_edge('A', 'B', 1)\n        >>> g2.add_edge('B', 'C', 2)\n        >>> g2.add_edge('C', 'D', 1)\n        >>> g2.add_edge('C', 'E', 100) # Removed in MST\n        >>> g2.add_edge('D', 'E', 5)\n        >>> assert 'E' in g2.connections[\"C\"]\n        >>> mst = g2.kruskal()\n        >>> assert 'E' not in mst.connections['C']\n        \"\"\"\n\n        # getting the edges in ascending order of weights\n        edges = []\n        seen = set()\n        for start in self.connections:\n            for end in self.connections[start]:\n                if (start, end) not in seen:\n                    seen.add((end, start))\n                    edges.append((start, end, self.connections[start][end]))\n        edges.sort(key=lambda x: x[2])\n\n        # creating the disjoint set\n        disjoint_set = DisjointSetTree[T]()\n        for node in self.connections:\n            disjoint_set.make_set(node)\n\n        # MST generation\n        num_edges = 0\n        index = 0\n        graph = GraphUndirectedWeighted[T]()\n        while num_edges < len(self.connections) - 1:\n            u, v, w = edges[index]\n            index += 1\n            parent_u = disjoint_set.find_set(u)\n            parent_v = disjoint_set.find_set(v)\n            if parent_u != parent_v:\n                num_edges += 1\n                graph.add_edge(u, v, w)\n                disjoint_set.union(u, v)\n        return graph\n"
  },
  {
    "path": "graphs/minimum_spanning_tree_prims.py",
    "content": "import sys\nfrom collections import defaultdict\n\n\nclass Heap:\n    def __init__(self):\n        self.node_position = []\n\n    def get_position(self, vertex):\n        return self.node_position[vertex]\n\n    def set_position(self, vertex, pos):\n        self.node_position[vertex] = pos\n\n    def top_to_bottom(self, heap, start, size, positions):\n        if start > size // 2 - 1:\n            return\n        else:\n            if 2 * start + 2 >= size:  # noqa: SIM114\n                smallest_child = 2 * start + 1\n            elif heap[2 * start + 1] < heap[2 * start + 2]:\n                smallest_child = 2 * start + 1\n            else:\n                smallest_child = 2 * start + 2\n            if heap[smallest_child] < heap[start]:\n                temp, temp1 = heap[smallest_child], positions[smallest_child]\n                heap[smallest_child], positions[smallest_child] = (\n                    heap[start],\n                    positions[start],\n                )\n                heap[start], positions[start] = temp, temp1\n\n                temp = self.get_position(positions[smallest_child])\n                self.set_position(\n                    positions[smallest_child], self.get_position(positions[start])\n                )\n                self.set_position(positions[start], temp)\n\n                self.top_to_bottom(heap, smallest_child, size, positions)\n\n    # Update function if value of any node in min-heap decreases\n    def bottom_to_top(self, val, index, heap, position):\n        temp = position[index]\n\n        while index != 0:\n            parent = int((index - 2) / 2) if index % 2 == 0 else int((index - 1) / 2)\n\n            if val < heap[parent]:\n                heap[index] = heap[parent]\n                position[index] = position[parent]\n                self.set_position(position[parent], index)\n            else:\n                heap[index] = val\n                position[index] = temp\n                self.set_position(temp, index)\n                break\n            index = parent\n        else:\n            heap[0] = val\n            position[0] = temp\n            self.set_position(temp, 0)\n\n    def heapify(self, heap, positions):\n        start = len(heap) // 2 - 1\n        for i in range(start, -1, -1):\n            self.top_to_bottom(heap, i, len(heap), positions)\n\n    def delete_minimum(self, heap, positions):\n        temp = positions[0]\n        heap[0] = sys.maxsize\n        self.top_to_bottom(heap, 0, len(heap), positions)\n        return temp\n\n\ndef prisms_algorithm(adjacency_list):\n    \"\"\"\n    >>> adjacency_list = {0: [[1, 1], [3, 3]],\n    ...                   1: [[0, 1], [2, 6], [3, 5], [4, 1]],\n    ...                   2: [[1, 6], [4, 5], [5, 2]],\n    ...                   3: [[0, 3], [1, 5], [4, 1]],\n    ...                   4: [[1, 1], [2, 5], [3, 1], [5, 4]],\n    ...                   5: [[2, 2], [4, 4]]}\n    >>> prisms_algorithm(adjacency_list)\n    [(0, 1), (1, 4), (4, 3), (4, 5), (5, 2)]\n    \"\"\"\n\n    heap = Heap()\n\n    visited = [0] * len(adjacency_list)\n    nbr_tv = [-1] * len(adjacency_list)  # Neighboring Tree Vertex of selected vertex\n    # Minimum Distance of explored vertex with neighboring vertex of partial tree\n    # formed in graph\n    distance_tv = []  # Heap of Distance of vertices from their neighboring vertex\n    positions = []\n\n    for vertex in range(len(adjacency_list)):\n        distance_tv.append(sys.maxsize)\n        positions.append(vertex)\n        heap.node_position.append(vertex)\n\n    tree_edges = []\n    visited[0] = 1\n    distance_tv[0] = sys.maxsize\n    for neighbor, distance in adjacency_list[0]:\n        nbr_tv[neighbor] = 0\n        distance_tv[neighbor] = distance\n    heap.heapify(distance_tv, positions)\n\n    for _ in range(1, len(adjacency_list)):\n        vertex = heap.delete_minimum(distance_tv, positions)\n        if visited[vertex] == 0:\n            tree_edges.append((nbr_tv[vertex], vertex))\n            visited[vertex] = 1\n            for neighbor, distance in adjacency_list[vertex]:\n                if (\n                    visited[neighbor] == 0\n                    and distance < distance_tv[heap.get_position(neighbor)]\n                ):\n                    distance_tv[heap.get_position(neighbor)] = distance\n                    heap.bottom_to_top(\n                        distance, heap.get_position(neighbor), distance_tv, positions\n                    )\n                    nbr_tv[neighbor] = vertex\n    return tree_edges\n\n\nif __name__ == \"__main__\":  # pragma: no cover\n    # < --------- Prims Algorithm --------- >\n    edges_number = int(input(\"Enter number of edges: \").strip())\n    adjacency_list = defaultdict(list)\n    for _ in range(edges_number):\n        edge = [int(x) for x in input().strip().split()]\n        adjacency_list[edge[0]].append([edge[1], edge[2]])\n        adjacency_list[edge[1]].append([edge[0], edge[2]])\n    print(prisms_algorithm(adjacency_list))\n"
  },
  {
    "path": "graphs/minimum_spanning_tree_prims2.py",
    "content": "\"\"\"\nPrim's (also known as Jarník's) algorithm is a greedy algorithm that finds a minimum\nspanning tree for a weighted undirected graph. This means it finds a subset of the\nedges that forms a tree that includes every vertex, where the total weight of all the\nedges in the tree is minimized. The algorithm operates by building this tree one vertex\nat a time, from an arbitrary starting vertex, at each step adding the cheapest possible\nconnection from the tree to another vertex.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom sys import maxsize\nfrom typing import TypeVar\n\nT = TypeVar(\"T\")\n\n\ndef get_parent_position(position: int) -> int:\n    \"\"\"\n    heap helper function get the position of the parent of the current node\n\n    >>> get_parent_position(1)\n    0\n    >>> get_parent_position(2)\n    0\n    \"\"\"\n    return (position - 1) // 2\n\n\ndef get_child_left_position(position: int) -> int:\n    \"\"\"\n    heap helper function get the position of the left child of the current node\n\n    >>> get_child_left_position(0)\n    1\n    \"\"\"\n    return (2 * position) + 1\n\n\ndef get_child_right_position(position: int) -> int:\n    \"\"\"\n    heap helper function get the position of the right child of the current node\n\n    >>> get_child_right_position(0)\n    2\n    \"\"\"\n    return (2 * position) + 2\n\n\nclass MinPriorityQueue[T]:\n    \"\"\"\n    Minimum Priority Queue Class\n\n    Functions:\n    is_empty: function to check if the priority queue is empty\n    push: function to add an element with given priority to the queue\n    extract_min: function to remove and return the element with lowest weight (highest\n                 priority)\n    update_key: function to update the weight of the given key\n    _bubble_up: helper function to place a node at the proper position (upward\n                movement)\n    _bubble_down: helper function to place a node at the proper position (downward\n                movement)\n    _swap_nodes: helper function to swap the nodes at the given positions\n\n    >>> queue = MinPriorityQueue()\n\n    >>> queue.push(1, 1000)\n    >>> queue.push(2, 100)\n    >>> queue.push(3, 4000)\n    >>> queue.push(4, 3000)\n\n    >>> queue.extract_min()\n    2\n\n    >>> queue.update_key(4, 50)\n\n    >>> queue.extract_min()\n    4\n    >>> queue.extract_min()\n    1\n    >>> queue.extract_min()\n    3\n    \"\"\"\n\n    def __init__(self) -> None:\n        self.heap: list[tuple[T, int]] = []\n        self.position_map: dict[T, int] = {}\n        self.elements: int = 0\n\n    def __len__(self) -> int:\n        return self.elements\n\n    def __repr__(self) -> str:\n        return str(self.heap)\n\n    def is_empty(self) -> bool:\n        # Check if the priority queue is empty\n        return self.elements == 0\n\n    def push(self, elem: T, weight: int) -> None:\n        # Add an element with given priority to the queue\n        self.heap.append((elem, weight))\n        self.position_map[elem] = self.elements\n        self.elements += 1\n        self._bubble_up(elem)\n\n    def extract_min(self) -> T:\n        # Remove and return the element with lowest weight (highest priority)\n        if self.elements > 1:\n            self._swap_nodes(0, self.elements - 1)\n        elem, _ = self.heap.pop()\n        del self.position_map[elem]\n        self.elements -= 1\n        if self.elements > 0:\n            bubble_down_elem, _ = self.heap[0]\n            self._bubble_down(bubble_down_elem)\n        return elem\n\n    def update_key(self, elem: T, weight: int) -> None:\n        # Update the weight of the given key\n        position = self.position_map[elem]\n        self.heap[position] = (elem, weight)\n        if position > 0:\n            parent_position = get_parent_position(position)\n            _, parent_weight = self.heap[parent_position]\n            if parent_weight > weight:\n                self._bubble_up(elem)\n            else:\n                self._bubble_down(elem)\n        else:\n            self._bubble_down(elem)\n\n    def _bubble_up(self, elem: T) -> None:\n        # Place a node at the proper position (upward movement) [to be used internally\n        # only]\n        curr_pos = self.position_map[elem]\n        if curr_pos == 0:\n            return None\n        parent_position = get_parent_position(curr_pos)\n        _, weight = self.heap[curr_pos]\n        _, parent_weight = self.heap[parent_position]\n        if parent_weight > weight:\n            self._swap_nodes(parent_position, curr_pos)\n            return self._bubble_up(elem)\n        return None\n\n    def _bubble_down(self, elem: T) -> None:\n        # Place a node at the proper position (downward movement) [to be used\n        # internally only]\n        curr_pos = self.position_map[elem]\n        _, weight = self.heap[curr_pos]\n        child_left_position = get_child_left_position(curr_pos)\n        child_right_position = get_child_right_position(curr_pos)\n        if child_left_position < self.elements and child_right_position < self.elements:\n            _, child_left_weight = self.heap[child_left_position]\n            _, child_right_weight = self.heap[child_right_position]\n            if child_right_weight < child_left_weight and child_right_weight < weight:\n                self._swap_nodes(child_right_position, curr_pos)\n                return self._bubble_down(elem)\n        if child_left_position < self.elements:\n            _, child_left_weight = self.heap[child_left_position]\n            if child_left_weight < weight:\n                self._swap_nodes(child_left_position, curr_pos)\n                return self._bubble_down(elem)\n        else:\n            return None\n        if child_right_position < self.elements:\n            _, child_right_weight = self.heap[child_right_position]\n            if child_right_weight < weight:\n                self._swap_nodes(child_right_position, curr_pos)\n                return self._bubble_down(elem)\n        return None\n\n    def _swap_nodes(self, node1_pos: int, node2_pos: int) -> None:\n        # Swap the nodes at the given positions\n        node1_elem = self.heap[node1_pos][0]\n        node2_elem = self.heap[node2_pos][0]\n        self.heap[node1_pos], self.heap[node2_pos] = (\n            self.heap[node2_pos],\n            self.heap[node1_pos],\n        )\n        self.position_map[node1_elem] = node2_pos\n        self.position_map[node2_elem] = node1_pos\n\n\nclass GraphUndirectedWeighted[T]:\n    \"\"\"\n    Graph Undirected Weighted Class\n\n    Functions:\n    add_node: function to add a node in the graph\n    add_edge: function to add an edge between 2 nodes in the graph\n    \"\"\"\n\n    def __init__(self) -> None:\n        self.connections: dict[T, dict[T, int]] = {}\n        self.nodes: int = 0\n\n    def __repr__(self) -> str:\n        return str(self.connections)\n\n    def __len__(self) -> int:\n        return self.nodes\n\n    def add_node(self, node: T) -> None:\n        # Add a node in the graph if it is not in the graph\n        if node not in self.connections:\n            self.connections[node] = {}\n            self.nodes += 1\n\n    def add_edge(self, node1: T, node2: T, weight: int) -> None:\n        # Add an edge between 2 nodes in the graph\n        self.add_node(node1)\n        self.add_node(node2)\n        self.connections[node1][node2] = weight\n        self.connections[node2][node1] = weight\n\n\ndef prims_algo[T](\n    graph: GraphUndirectedWeighted[T],\n) -> tuple[dict[T, int], dict[T, T | None]]:\n    \"\"\"\n    >>> graph = GraphUndirectedWeighted()\n\n    >>> graph.add_edge(\"a\", \"b\", 3)\n    >>> graph.add_edge(\"b\", \"c\", 10)\n    >>> graph.add_edge(\"c\", \"d\", 5)\n    >>> graph.add_edge(\"a\", \"c\", 15)\n    >>> graph.add_edge(\"b\", \"d\", 100)\n\n    >>> dist, parent = prims_algo(graph)\n\n    >>> abs(dist[\"a\"] - dist[\"b\"])\n    3\n    >>> abs(dist[\"d\"] - dist[\"b\"])\n    15\n    >>> abs(dist[\"a\"] - dist[\"c\"])\n    13\n    \"\"\"\n    # prim's algorithm for minimum spanning tree\n    dist: dict[T, int] = dict.fromkeys(graph.connections, maxsize)\n    parent: dict[T, T | None] = dict.fromkeys(graph.connections)\n\n    priority_queue: MinPriorityQueue[T] = MinPriorityQueue()\n    for node, weight in dist.items():\n        priority_queue.push(node, weight)\n\n    if priority_queue.is_empty():\n        return dist, parent\n\n    # initialization\n    node = priority_queue.extract_min()\n    dist[node] = 0\n    for neighbour in graph.connections[node]:\n        if dist[neighbour] > dist[node] + graph.connections[node][neighbour]:\n            dist[neighbour] = dist[node] + graph.connections[node][neighbour]\n            priority_queue.update_key(neighbour, dist[neighbour])\n            parent[neighbour] = node\n\n    # running prim's algorithm\n    while not priority_queue.is_empty():\n        node = priority_queue.extract_min()\n        for neighbour in graph.connections[node]:\n            if dist[neighbour] > dist[node] + graph.connections[node][neighbour]:\n                dist[neighbour] = dist[node] + graph.connections[node][neighbour]\n                priority_queue.update_key(neighbour, dist[neighbour])\n                parent[neighbour] = node\n    return dist, parent\n"
  },
  {
    "path": "graphs/multi_heuristic_astar.py",
    "content": "import heapq\nimport sys\n\nimport numpy as np\n\nTPos = tuple[int, int]\n\n\nclass PriorityQueue:\n    def __init__(self):\n        self.elements = []\n        self.set = set()\n\n    def minkey(self):\n        if not self.empty():\n            return self.elements[0][0]\n        else:\n            return float(\"inf\")\n\n    def empty(self):\n        return len(self.elements) == 0\n\n    def put(self, item, priority):\n        if item not in self.set:\n            heapq.heappush(self.elements, (priority, item))\n            self.set.add(item)\n        else:\n            # update\n            # print(\"update\", item)\n            temp = []\n            (pri, x) = heapq.heappop(self.elements)\n            while x != item:\n                temp.append((pri, x))\n                (pri, x) = heapq.heappop(self.elements)\n            temp.append((priority, item))\n            for pro, xxx in temp:\n                heapq.heappush(self.elements, (pro, xxx))\n\n    def remove_element(self, item):\n        if item in self.set:\n            self.set.remove(item)\n            temp = []\n            (pro, x) = heapq.heappop(self.elements)\n            while x != item:\n                temp.append((pro, x))\n                (pro, x) = heapq.heappop(self.elements)\n            for prito, yyy in temp:\n                heapq.heappush(self.elements, (prito, yyy))\n\n    def top_show(self):\n        return self.elements[0][1]\n\n    def get(self):\n        (priority, item) = heapq.heappop(self.elements)\n        self.set.remove(item)\n        return (priority, item)\n\n\ndef consistent_heuristic(p: TPos, goal: TPos):\n    # euclidean distance\n    a = np.array(p)\n    b = np.array(goal)\n    return np.linalg.norm(a - b)\n\n\ndef heuristic_2(p: TPos, goal: TPos):\n    # integer division by time variable\n    return consistent_heuristic(p, goal) // t\n\n\ndef heuristic_1(p: TPos, goal: TPos):\n    # manhattan distance\n    return abs(p[0] - goal[0]) + abs(p[1] - goal[1])\n\n\ndef key(start: TPos, i: int, goal: TPos, g_function: dict[TPos, float]):\n    ans = g_function[start] + W1 * heuristics[i](start, goal)\n    return ans\n\n\ndef do_something(back_pointer, goal, start):\n    grid = np.char.chararray((n, n))\n    for i in range(n):\n        for j in range(n):\n            grid[i][j] = \"*\"\n\n    for i in range(n):\n        for j in range(n):\n            if (j, (n - 1) - i) in blocks:\n                grid[i][j] = \"#\"\n\n    grid[0][(n - 1)] = \"-\"\n    x = back_pointer[goal]\n    while x != start:\n        (x_c, y_c) = x\n        # print(x)\n        grid[(n - 1) - y_c][x_c] = \"-\"\n        x = back_pointer[x]\n    grid[(n - 1)][0] = \"-\"\n\n    for i in range(n):\n        for j in range(n):\n            if (i, j) == (0, n - 1):\n                print(grid[i][j], end=\" \")\n                print(\"<-- End position\", end=\" \")\n            else:\n                print(grid[i][j], end=\" \")\n        print()\n    print(\"^\")\n    print(\"Start position\")\n    print()\n    print(\"# is an obstacle\")\n    print(\"- is the path taken by algorithm\")\n    print(\"PATH TAKEN BY THE ALGORITHM IS:-\")\n    x = back_pointer[goal]\n    while x != start:\n        print(x, end=\" \")\n        x = back_pointer[x]\n    print(x)\n    sys.exit()\n\n\ndef valid(p: TPos):\n    if p[0] < 0 or p[0] > n - 1:\n        return False\n    return not (p[1] < 0 or p[1] > n - 1)\n\n\ndef expand_state(\n    s,\n    j,\n    visited,\n    g_function,\n    close_list_anchor,\n    close_list_inad,\n    open_list,\n    back_pointer,\n):\n    for itera in range(n_heuristic):\n        open_list[itera].remove_element(s)\n    # print(\"s\", s)\n    # print(\"j\", j)\n    (x, y) = s\n    left = (x - 1, y)\n    right = (x + 1, y)\n    up = (x, y + 1)\n    down = (x, y - 1)\n\n    for neighbours in [left, right, up, down]:\n        if neighbours not in blocks:\n            if valid(neighbours) and neighbours not in visited:\n                # print(\"neighbour\", neighbours)\n                visited.add(neighbours)\n                back_pointer[neighbours] = -1\n                g_function[neighbours] = float(\"inf\")\n\n            if valid(neighbours) and g_function[neighbours] > g_function[s] + 1:\n                g_function[neighbours] = g_function[s] + 1\n                back_pointer[neighbours] = s\n                if neighbours not in close_list_anchor:\n                    open_list[0].put(neighbours, key(neighbours, 0, goal, g_function))\n                    if neighbours not in close_list_inad:\n                        for var in range(1, n_heuristic):\n                            if key(neighbours, var, goal, g_function) <= W2 * key(\n                                neighbours, 0, goal, g_function\n                            ):\n                                open_list[j].put(\n                                    neighbours, key(neighbours, var, goal, g_function)\n                                )\n\n\ndef make_common_ground():\n    some_list = []\n    for x in range(1, 5):\n        for y in range(1, 6):\n            some_list.append((x, y))\n\n    for x in range(15, 20):\n        some_list.append((x, 17))\n\n    for x in range(10, 19):\n        for y in range(1, 15):\n            some_list.append((x, y))\n\n    # L block\n    for x in range(1, 4):\n        for y in range(12, 19):\n            some_list.append((x, y))\n    for x in range(3, 13):\n        for y in range(16, 19):\n            some_list.append((x, y))\n    return some_list\n\n\nheuristics = {0: consistent_heuristic, 1: heuristic_1, 2: heuristic_2}\n\nblocks_blk = [\n    (0, 1),\n    (1, 1),\n    (2, 1),\n    (3, 1),\n    (4, 1),\n    (5, 1),\n    (6, 1),\n    (7, 1),\n    (8, 1),\n    (9, 1),\n    (10, 1),\n    (11, 1),\n    (12, 1),\n    (13, 1),\n    (14, 1),\n    (15, 1),\n    (16, 1),\n    (17, 1),\n    (18, 1),\n    (19, 1),\n]\nblocks_all = make_common_ground()\n\n\nblocks = blocks_blk\n# hyper parameters\nW1 = 1\nW2 = 1\nn = 20\nn_heuristic = 3  # one consistent and two other inconsistent\n\n# start and end destination\nstart = (0, 0)\ngoal = (n - 1, n - 1)\n\nt = 1\n\n\ndef multi_a_star(start: TPos, goal: TPos, n_heuristic: int):\n    g_function = {start: 0, goal: float(\"inf\")}\n    back_pointer = {start: -1, goal: -1}\n    open_list = []\n    visited = set()\n\n    for i in range(n_heuristic):\n        open_list.append(PriorityQueue())\n        open_list[i].put(start, key(start, i, goal, g_function))\n\n    close_list_anchor: list[int] = []\n    close_list_inad: list[int] = []\n    while open_list[0].minkey() < float(\"inf\"):\n        for i in range(1, n_heuristic):\n            # print(open_list[0].minkey(), open_list[i].minkey())\n            if open_list[i].minkey() <= W2 * open_list[0].minkey():\n                global t\n                t += 1\n                if g_function[goal] <= open_list[i].minkey():\n                    if g_function[goal] < float(\"inf\"):\n                        do_something(back_pointer, goal, start)\n                else:\n                    _, get_s = open_list[i].top_show()\n                    visited.add(get_s)\n                    expand_state(\n                        get_s,\n                        i,\n                        visited,\n                        g_function,\n                        close_list_anchor,\n                        close_list_inad,\n                        open_list,\n                        back_pointer,\n                    )\n                    close_list_inad.append(get_s)\n            elif g_function[goal] <= open_list[0].minkey():\n                if g_function[goal] < float(\"inf\"):\n                    do_something(back_pointer, goal, start)\n            else:\n                get_s = open_list[0].top_show()\n                visited.add(get_s)\n                expand_state(\n                    get_s,\n                    0,\n                    visited,\n                    g_function,\n                    close_list_anchor,\n                    close_list_inad,\n                    open_list,\n                    back_pointer,\n                )\n                close_list_anchor.append(get_s)\n    print(\"No path found to goal\")\n    print()\n    for i in range(n - 1, -1, -1):\n        for j in range(n):\n            if (j, i) in blocks:\n                print(\"#\", end=\" \")\n            elif (j, i) in back_pointer:\n                if (j, i) == (n - 1, n - 1):\n                    print(\"*\", end=\" \")\n                else:\n                    print(\"-\", end=\" \")\n            else:\n                print(\"*\", end=\" \")\n            if (j, i) == (n - 1, n - 1):\n                print(\"<-- End position\", end=\" \")\n        print()\n    print(\"^\")\n    print(\"Start position\")\n    print()\n    print(\"# is an obstacle\")\n    print(\"- is the path taken by algorithm\")\n\n\nif __name__ == \"__main__\":\n    multi_a_star(start, goal, n_heuristic)\n"
  },
  {
    "path": "graphs/page_rank.py",
    "content": "\"\"\"\nAuthor: https://github.com/bhushan-borole\n\"\"\"\n\n\"\"\"\nThe input graph for the algorithm is:\n\n  A B C\nA 0 1 1\nB 0 0 1\nC 1 0 0\n\n\"\"\"\n\ngraph = [[0, 1, 1], [0, 0, 1], [1, 0, 0]]\n\n\nclass Node:\n    def __init__(self, name):\n        self.name = name\n        self.inbound = []\n        self.outbound = []\n\n    def add_inbound(self, node):\n        self.inbound.append(node)\n\n    def add_outbound(self, node):\n        self.outbound.append(node)\n\n    def __repr__(self):\n        return f\"<node={self.name} inbound={self.inbound} outbound={self.outbound}>\"\n\n\ndef page_rank(nodes, limit=3, d=0.85):\n    ranks = {}\n    for node in nodes:\n        ranks[node.name] = 1\n\n    outbounds = {}\n    for node in nodes:\n        outbounds[node.name] = len(node.outbound)\n\n    for i in range(limit):\n        print(f\"======= Iteration {i + 1} =======\")\n        for _, node in enumerate(nodes):\n            ranks[node.name] = (1 - d) + d * sum(\n                ranks[ib] / outbounds[ib] for ib in node.inbound\n            )\n        print(ranks)\n\n\ndef main():\n    names = list(input(\"Enter Names of the Nodes: \").split())\n\n    nodes = [Node(name) for name in names]\n\n    for ri, row in enumerate(graph):\n        for ci, col in enumerate(row):\n            if col == 1:\n                nodes[ci].add_inbound(names[ri])\n                nodes[ri].add_outbound(names[ci])\n\n    print(\"======= Nodes =======\")\n    for node in nodes:\n        print(node)\n\n    page_rank(nodes)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "graphs/prim.py",
    "content": "\"\"\"Prim's Algorithm.\n\nDetermines the minimum spanning tree(MST) of a graph using the Prim's Algorithm.\n\nDetails: https://en.wikipedia.org/wiki/Prim%27s_algorithm\n\"\"\"\n\nimport heapq as hq\nimport math\nfrom collections.abc import Iterator\n\n\nclass Vertex:\n    \"\"\"Class Vertex.\"\"\"\n\n    def __init__(self, id_):\n        \"\"\"\n        Arguments:\n            id - input an id to identify the vertex\n        Attributes:\n            neighbors - a list of the vertices it is linked to\n            edges     - a dict to store the edges's weight\n        \"\"\"\n        self.id = str(id_)\n        self.key = None\n        self.pi = None\n        self.neighbors = []\n        self.edges = {}  # {vertex:distance}\n\n    def __lt__(self, other):\n        \"\"\"Comparison rule to < operator.\"\"\"\n        return self.key < other.key\n\n    def __repr__(self):\n        \"\"\"Return the vertex id.\"\"\"\n        return self.id\n\n    def add_neighbor(self, vertex):\n        \"\"\"Add a pointer to a vertex at neighbor's list.\"\"\"\n        self.neighbors.append(vertex)\n\n    def add_edge(self, vertex, weight):\n        \"\"\"Destination vertex and weight.\"\"\"\n        self.edges[vertex.id] = weight\n\n\ndef connect(graph, a, b, edge):\n    # add the neighbors:\n    graph[a - 1].add_neighbor(graph[b - 1])\n    graph[b - 1].add_neighbor(graph[a - 1])\n    # add the edges:\n    graph[a - 1].add_edge(graph[b - 1], edge)\n    graph[b - 1].add_edge(graph[a - 1], edge)\n\n\ndef prim(graph: list, root: Vertex) -> list:\n    \"\"\"Prim's Algorithm.\n\n    Runtime:\n        O(mn) with `m` edges and `n` vertices\n\n    Return:\n        List with the edges of a Minimum Spanning Tree\n\n    Usage:\n        prim(graph, graph[0])\n    \"\"\"\n    a = []\n    for u in graph:\n        u.key = math.inf\n        u.pi = None\n    root.key = 0\n    q = graph[:]\n    while q:\n        u = min(q)\n        q.remove(u)\n        for v in u.neighbors:\n            if (v in q) and (u.edges[v.id] < v.key):\n                v.pi = u\n                v.key = u.edges[v.id]\n    for i in range(1, len(graph)):\n        a.append((int(graph[i].id) + 1, int(graph[i].pi.id) + 1))\n    return a\n\n\ndef prim_heap(graph: list, root: Vertex) -> Iterator[tuple]:\n    \"\"\"Prim's Algorithm with min heap.\n\n    Runtime:\n        O((m + n)log n) with `m` edges and `n` vertices\n\n    Yield:\n        Edges of a Minimum Spanning Tree\n\n    Usage:\n        prim(graph, graph[0])\n    \"\"\"\n    for u in graph:\n        u.key = math.inf\n        u.pi = None\n    root.key = 0\n\n    h = list(graph)\n    hq.heapify(h)\n\n    while h:\n        u = hq.heappop(h)\n        for v in u.neighbors:\n            if (v in h) and (u.edges[v.id] < v.key):\n                v.pi = u\n                v.key = u.edges[v.id]\n                hq.heapify(h)\n\n    for i in range(1, len(graph)):\n        yield (int(graph[i].id) + 1, int(graph[i].pi.id) + 1)\n\n\ndef test_vector() -> None:\n    \"\"\"\n    # Creates a list to store x vertices.\n    >>> x = 5\n    >>> G = [Vertex(n) for n in range(x)]\n\n    >>> connect(G, 1, 2, 15)\n    >>> connect(G, 1, 3, 12)\n    >>> connect(G, 2, 4, 13)\n    >>> connect(G, 2, 5, 5)\n    >>> connect(G, 3, 2, 6)\n    >>> connect(G, 3, 4, 6)\n    >>> connect(G, 0, 0, 0)  # Generate the minimum spanning tree:\n    >>> G_heap = G[:]\n    >>> MST = prim(G, G[0])\n    >>> MST_heap = prim_heap(G, G[0])\n    >>> for i in MST:\n    ...     print(i)\n    (2, 3)\n    (3, 1)\n    (4, 3)\n    (5, 2)\n    >>> for i in MST_heap:\n    ...     print(i)\n    (2, 3)\n    (3, 1)\n    (4, 3)\n    (5, 2)\n    \"\"\"\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "graphs/random_graph_generator.py",
    "content": "\"\"\"\n* Author: Manuel Di Lullo (https://github.com/manueldilullo)\n* Description: Random graphs generator.\n               Uses graphs represented with an adjacency list.\n\nURL: https://en.wikipedia.org/wiki/Random_graph\n\"\"\"\n\nimport random\n\n\ndef random_graph(\n    vertices_number: int, probability: float, directed: bool = False\n) -> dict:\n    \"\"\"\n    Generate a random graph\n    @input: vertices_number (number of vertices),\n            probability (probability that a generic edge (u,v) exists),\n            directed (if True: graph will be a directed graph,\n                      otherwise it will be an undirected graph)\n    @examples:\n    >>> random.seed(1)\n    >>> random_graph(4, 0.5)\n    {0: [1], 1: [0, 2, 3], 2: [1, 3], 3: [1, 2]}\n    >>> random.seed(1)\n    >>> random_graph(4, 0.5, True)\n    {0: [1], 1: [2, 3], 2: [3], 3: []}\n    \"\"\"\n    graph: dict = {i: [] for i in range(vertices_number)}\n\n    # if probability is greater or equal than 1, then generate a complete graph\n    if probability >= 1:\n        return complete_graph(vertices_number)\n    # if probability is lower or equal than 0, then return a graph without edges\n    if probability <= 0:\n        return graph\n\n    # for each couple of nodes, add an edge from u to v\n    # if the number randomly generated is greater than probability probability\n    for i in range(vertices_number):\n        for j in range(i + 1, vertices_number):\n            if random.random() < probability:\n                graph[i].append(j)\n                if not directed:\n                    # if the graph is undirected, add an edge in from j to i, either\n                    graph[j].append(i)\n    return graph\n\n\ndef complete_graph(vertices_number: int) -> dict:\n    \"\"\"\n    Generate a complete graph with vertices_number vertices.\n    @input: vertices_number (number of vertices),\n            directed (False if the graph is undirected, True otherwise)\n    @example:\n    >>> complete_graph(3)\n    {0: [1, 2], 1: [0, 2], 2: [0, 1]}\n    \"\"\"\n    return {\n        i: [j for j in range(vertices_number) if i != j] for i in range(vertices_number)\n    }\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "graphs/scc_kosaraju.py",
    "content": "from __future__ import annotations\n\n\ndef dfs(u):\n    global graph, reversed_graph, scc, component, visit, stack\n    if visit[u]:\n        return\n    visit[u] = True\n    for v in graph[u]:\n        dfs(v)\n    stack.append(u)\n\n\ndef dfs2(u):\n    global graph, reversed_graph, scc, component, visit, stack\n    if visit[u]:\n        return\n    visit[u] = True\n    component.append(u)\n    for v in reversed_graph[u]:\n        dfs2(v)\n\n\ndef kosaraju():\n    global graph, reversed_graph, scc, component, visit, stack\n    for i in range(n):\n        dfs(i)\n    visit = [False] * n\n    for i in stack[::-1]:\n        if visit[i]:\n            continue\n        component = []\n        dfs2(i)\n        scc.append(component)\n    return scc\n\n\nif __name__ == \"__main__\":\n    # n - no of nodes, m - no of edges\n    n, m = list(map(int, input().strip().split()))\n\n    graph: list[list[int]] = [[] for _ in range(n)]  # graph\n    reversed_graph: list[list[int]] = [[] for i in range(n)]  # reversed graph\n    # input graph data (edges)\n    for _ in range(m):\n        u, v = list(map(int, input().strip().split()))\n        graph[u].append(v)\n        reversed_graph[v].append(u)\n\n    stack: list[int] = []\n    visit: list[bool] = [False] * n\n    scc: list[int] = []\n    component: list[int] = []\n    print(kosaraju())\n"
  },
  {
    "path": "graphs/strongly_connected_components.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/Strongly_connected_component\n\nFinding strongly connected components in directed graph\n\n\"\"\"\n\ntest_graph_1 = {0: [2, 3], 1: [0], 2: [1], 3: [4], 4: []}\n\ntest_graph_2 = {0: [1, 2, 3], 1: [2], 2: [0], 3: [4], 4: [5], 5: [3]}\n\n\ndef topology_sort(\n    graph: dict[int, list[int]], vert: int, visited: list[bool]\n) -> list[int]:\n    \"\"\"\n    Use depth first search to sort graph\n    At this time graph is the same as input\n    >>> topology_sort(test_graph_1, 0, 5 * [False])\n    [1, 2, 4, 3, 0]\n    >>> topology_sort(test_graph_2, 0, 6 * [False])\n    [2, 1, 5, 4, 3, 0]\n    \"\"\"\n\n    visited[vert] = True\n    order = []\n\n    for neighbour in graph[vert]:\n        if not visited[neighbour]:\n            order += topology_sort(graph, neighbour, visited)\n\n    order.append(vert)\n\n    return order\n\n\ndef find_components(\n    reversed_graph: dict[int, list[int]], vert: int, visited: list[bool]\n) -> list[int]:\n    \"\"\"\n    Use depth first search to find strongly connected\n    vertices. Now graph is reversed\n    >>> find_components({0: [1], 1: [2], 2: [0]}, 0, 5 * [False])\n    [0, 1, 2]\n    >>> find_components({0: [2], 1: [0], 2: [0, 1]}, 0, 6 * [False])\n    [0, 2, 1]\n    \"\"\"\n\n    visited[vert] = True\n    component = [vert]\n\n    for neighbour in reversed_graph[vert]:\n        if not visited[neighbour]:\n            component += find_components(reversed_graph, neighbour, visited)\n\n    return component\n\n\ndef strongly_connected_components(graph: dict[int, list[int]]) -> list[list[int]]:\n    \"\"\"\n    This function takes graph as a parameter\n    and then returns the list of strongly connected components\n    >>> strongly_connected_components(test_graph_1)\n    [[0, 1, 2], [3], [4]]\n    >>> strongly_connected_components(test_graph_2)\n    [[0, 2, 1], [3, 5, 4]]\n    \"\"\"\n\n    visited = len(graph) * [False]\n    reversed_graph: dict[int, list[int]] = {vert: [] for vert in range(len(graph))}\n\n    for vert, neighbours in graph.items():\n        for neighbour in neighbours:\n            reversed_graph[neighbour].append(vert)\n\n    order = []\n    for i, was_visited in enumerate(visited):\n        if not was_visited:\n            order += topology_sort(graph, i, visited)\n\n    components_list = []\n    visited = len(graph) * [False]\n\n    for i in range(len(graph)):\n        vert = order[len(graph) - i - 1]\n        if not visited[vert]:\n            component = find_components(reversed_graph, vert, visited)\n            components_list.append(component)\n\n    return components_list\n"
  },
  {
    "path": "graphs/tarjans_scc.py",
    "content": "from collections import deque\n\n\ndef tarjan(g: list[list[int]]) -> list[list[int]]:\n    \"\"\"\n    Tarjan's algo for finding strongly connected components in a directed graph\n\n    Uses two main attributes of each node to track reachability, the index of that node\n    within a component(index), and the lowest index reachable from that node(lowlink).\n\n    We then perform a dfs of the each component making sure to update these parameters\n    for each node and saving the nodes we visit on the way.\n\n    If ever we find that the lowest reachable node from a current node is equal to the\n    index of the current node then it must be the root of a strongly connected\n    component and so we save it and it's equireachable vertices as a strongly\n    connected component.\n\n    Complexity: strong_connect() is called at most once for each node and has a\n    complexity of O(|E|) as it is DFS.\n    Therefore this has complexity O(|V| + |E|) for a graph G = (V, E)\n\n    >>> tarjan([[2, 3, 4], [2, 3, 4], [0, 1, 3], [0, 1, 2], [1]])\n    [[4, 3, 1, 2, 0]]\n    >>> tarjan([[], [], [], []])\n    [[0], [1], [2], [3]]\n    >>> a = [0, 1, 2, 3, 4, 5, 4]\n    >>> b = [1, 0, 3, 2, 5, 4, 0]\n    >>> n = 7\n    >>> sorted(tarjan(create_graph(n, list(zip(a, b))))) == sorted(\n    ...     tarjan(create_graph(n, list(zip(a[::-1], b[::-1])))))\n    True\n    >>> a = [0, 1, 2, 3, 4, 5, 6]\n    >>> b = [0, 1, 2, 3, 4, 5, 6]\n    >>> sorted(tarjan(create_graph(n, list(zip(a, b)))))\n    [[0], [1], [2], [3], [4], [5], [6]]\n    \"\"\"\n\n    n = len(g)\n    stack: deque[int] = deque()\n    on_stack = [False for _ in range(n)]\n    index_of = [-1 for _ in range(n)]\n    lowlink_of = index_of[:]\n\n    def strong_connect(v: int, index: int, components: list[list[int]]) -> int:\n        index_of[v] = index  # the number when this node is seen\n        lowlink_of[v] = index  # lowest rank node reachable from here\n        index += 1\n        stack.append(v)\n        on_stack[v] = True\n\n        for w in g[v]:\n            if index_of[w] == -1:\n                index = strong_connect(w, index, components)\n                lowlink_of[v] = (\n                    lowlink_of[w] if lowlink_of[w] < lowlink_of[v] else lowlink_of[v]\n                )\n            elif on_stack[w]:\n                lowlink_of[v] = (\n                    lowlink_of[w] if lowlink_of[w] < lowlink_of[v] else lowlink_of[v]\n                )\n\n        if lowlink_of[v] == index_of[v]:\n            component = []\n            w = stack.pop()\n            on_stack[w] = False\n            component.append(w)\n            while w != v:\n                w = stack.pop()\n                on_stack[w] = False\n                component.append(w)\n            components.append(component)\n        return index\n\n    components: list[list[int]] = []\n    for v in range(n):\n        if index_of[v] == -1:\n            strong_connect(v, 0, components)\n\n    return components\n\n\ndef create_graph(n: int, edges: list[tuple[int, int]]) -> list[list[int]]:\n    \"\"\"\n    >>> n = 7\n    >>> source = [0, 0, 1, 2, 3, 3, 4, 4, 6]\n    >>> target = [1, 3, 2, 0, 1, 4, 5, 6, 5]\n    >>> edges = list(zip(source, target))\n    >>> create_graph(n, edges)\n    [[1, 3], [2], [0], [1, 4], [5, 6], [], [5]]\n    \"\"\"\n    g: list[list[int]] = [[] for _ in range(n)]\n    for u, v in edges:\n        g[u].append(v)\n    return g\n\n\nif __name__ == \"__main__\":\n    # Test\n    n_vertices = 7\n    source = [0, 0, 1, 2, 3, 3, 4, 4, 6]\n    target = [1, 3, 2, 0, 1, 4, 5, 6, 5]\n    edges = list(zip(source, target))\n    g = create_graph(n_vertices, edges)\n\n    assert tarjan(g) == [[5], [6], [4], [3, 2, 1, 0]]\n"
  },
  {
    "path": "graphs/tests/__init__.py",
    "content": ""
  },
  {
    "path": "graphs/tests/test_min_spanning_tree_kruskal.py",
    "content": "from graphs.minimum_spanning_tree_kruskal import kruskal\n\n\ndef test_kruskal_successful_result():\n    num_nodes = 9\n    edges = [\n        [0, 1, 4],\n        [0, 7, 8],\n        [1, 2, 8],\n        [7, 8, 7],\n        [7, 6, 1],\n        [2, 8, 2],\n        [8, 6, 6],\n        [2, 3, 7],\n        [2, 5, 4],\n        [6, 5, 2],\n        [3, 5, 14],\n        [3, 4, 9],\n        [5, 4, 10],\n        [1, 7, 11],\n    ]\n\n    result = kruskal(num_nodes, edges)\n\n    expected = [\n        [7, 6, 1],\n        [2, 8, 2],\n        [6, 5, 2],\n        [0, 1, 4],\n        [2, 5, 4],\n        [2, 3, 7],\n        [0, 7, 8],\n        [3, 4, 9],\n    ]\n\n    assert sorted(expected) == sorted(result)\n"
  },
  {
    "path": "graphs/tests/test_min_spanning_tree_prim.py",
    "content": "from collections import defaultdict\n\nfrom graphs.minimum_spanning_tree_prims import prisms_algorithm as mst\n\n\ndef test_prim_successful_result():\n    num_nodes, num_edges = 9, 14  # noqa: F841\n    edges = [\n        [0, 1, 4],\n        [0, 7, 8],\n        [1, 2, 8],\n        [7, 8, 7],\n        [7, 6, 1],\n        [2, 8, 2],\n        [8, 6, 6],\n        [2, 3, 7],\n        [2, 5, 4],\n        [6, 5, 2],\n        [3, 5, 14],\n        [3, 4, 9],\n        [5, 4, 10],\n        [1, 7, 11],\n    ]\n\n    adjacency = defaultdict(list)\n    for node1, node2, cost in edges:\n        adjacency[node1].append([node2, cost])\n        adjacency[node2].append([node1, cost])\n\n    result = mst(adjacency)\n\n    expected = [\n        [7, 6, 1],\n        [2, 8, 2],\n        [6, 5, 2],\n        [0, 1, 4],\n        [2, 5, 4],\n        [2, 3, 7],\n        [0, 7, 8],\n        [3, 4, 9],\n    ]\n\n    for answer in expected:\n        edge = tuple(answer[:2])\n        reverse = tuple(edge[::-1])\n        assert edge in result or reverse in result\n"
  },
  {
    "path": "greedy_methods/__init__.py",
    "content": ""
  },
  {
    "path": "greedy_methods/best_time_to_buy_and_sell_stock.py",
    "content": "\"\"\"\nGiven a list of stock prices calculate the maximum profit that can be made from a\nsingle buy and sell of one share of stock.  We only allowed to complete one buy\ntransaction and one sell transaction but must buy before we sell.\n\nExample : prices = [7, 1, 5, 3, 6, 4]\nmax_profit will return 5 - which is by buying at price 1 and selling at price 6.\n\nThis problem can be solved using the concept of \"GREEDY ALGORITHM\".\n\nWe iterate over the price array once, keeping track of the lowest price point\n(buy) and the maximum profit we can get at each point.  The greedy choice at each point\nis to either buy at the current price if it's less than our current buying price, or\nsell at the current price if the profit is more than our current maximum profit.\n\"\"\"\n\n\ndef max_profit(prices: list[int]) -> int:\n    \"\"\"\n    >>> max_profit([7, 1, 5, 3, 6, 4])\n    5\n    >>> max_profit([7, 6, 4, 3, 1])\n    0\n    \"\"\"\n    if not prices:\n        return 0\n\n    min_price = prices[0]\n    max_profit: int = 0\n\n    for price in prices:\n        min_price = min(price, min_price)\n        max_profit = max(price - min_price, max_profit)\n\n    return max_profit\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    print(max_profit([7, 1, 5, 3, 6, 4]))\n"
  },
  {
    "path": "greedy_methods/fractional_cover_problem.py",
    "content": "# https://en.wikipedia.org/wiki/Set_cover_problem\n\nfrom dataclasses import dataclass\nfrom operator import attrgetter\n\n\n@dataclass\nclass Item:\n    weight: int\n    value: int\n\n    @property\n    def ratio(self) -> float:\n        \"\"\"\n        Return the value-to-weight ratio for the item.\n\n        Returns:\n            float: The value-to-weight ratio for the item.\n\n        Examples:\n        >>> Item(10, 65).ratio\n        6.5\n\n        >>> Item(20, 100).ratio\n        5.0\n\n        >>> Item(30, 120).ratio\n        4.0\n        \"\"\"\n        return self.value / self.weight\n\n\ndef fractional_cover(items: list[Item], capacity: int) -> float:\n    \"\"\"\n    Solve the Fractional Cover Problem.\n\n    Args:\n        items: A list of items, where each item has weight and value attributes.\n        capacity: The maximum weight capacity of the knapsack.\n\n    Returns:\n        The maximum value that can be obtained by selecting fractions of items to cover\n        the knapsack's capacity.\n\n    Raises:\n        ValueError: If capacity is negative.\n\n    Examples:\n    >>> fractional_cover((Item(10, 60), Item(20, 100), Item(30, 120)), capacity=50)\n    240.0\n\n    >>> fractional_cover([Item(20, 100), Item(30, 120), Item(10, 60)], capacity=25)\n    135.0\n\n    >>> fractional_cover([Item(10, 60), Item(20, 100), Item(30, 120)], capacity=60)\n    280.0\n\n    >>> fractional_cover(items=[Item(5, 30), Item(10, 60), Item(15, 90)], capacity=30)\n    180.0\n\n    >>> fractional_cover(items=[], capacity=50)\n    0.0\n\n    >>> fractional_cover(items=[Item(10, 60)], capacity=5)\n    30.0\n\n    >>> fractional_cover(items=[Item(10, 60)], capacity=1)\n    6.0\n\n    >>> fractional_cover(items=[Item(10, 60)], capacity=0)\n    0.0\n\n    >>> fractional_cover(items=[Item(10, 60)], capacity=-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Capacity cannot be negative\n    \"\"\"\n    if capacity < 0:\n        raise ValueError(\"Capacity cannot be negative\")\n\n    total_value = 0.0\n    remaining_capacity = capacity\n\n    # Sort the items by their value-to-weight ratio in descending order\n    for item in sorted(items, key=attrgetter(\"ratio\"), reverse=True):\n        if remaining_capacity == 0:\n            break\n\n        weight_taken = min(item.weight, remaining_capacity)\n        total_value += weight_taken * item.ratio\n        remaining_capacity -= weight_taken\n\n    return total_value\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    if result := doctest.testmod().failed:\n        print(f\"{result} test(s) failed\")\n    else:\n        print(\"All tests passed\")\n"
  },
  {
    "path": "greedy_methods/fractional_knapsack.py",
    "content": "from bisect import bisect\nfrom itertools import accumulate\n\n\ndef frac_knapsack(vl, wt, w, n):\n    \"\"\"\n    >>> frac_knapsack([60, 100, 120], [10, 20, 30], 50, 3)\n    240.0\n    >>> frac_knapsack([10, 40, 30, 50], [5, 4, 6, 3], 10, 4)\n    105.0\n    >>> frac_knapsack([10, 40, 30, 50], [5, 4, 6, 3], 8, 4)\n    95.0\n    >>> frac_knapsack([10, 40, 30, 50], [5, 4, 6], 8, 4)\n    60.0\n    >>> frac_knapsack([10, 40, 30], [5, 4, 6, 3], 8, 4)\n    60.0\n    >>> frac_knapsack([10, 40, 30, 50], [5, 4, 6, 3], 0, 4)\n    0\n    >>> frac_knapsack([10, 40, 30, 50], [5, 4, 6, 3], 8, 0)\n    95.0\n    >>> frac_knapsack([10, 40, 30, 50], [5, 4, 6, 3], -8, 4)\n    0\n    >>> frac_knapsack([10, 40, 30, 50], [5, 4, 6, 3], 8, -4)\n    95.0\n    >>> frac_knapsack([10, 40, 30, 50], [5, 4, 6, 3], 800, 4)\n    130\n    >>> frac_knapsack([10, 40, 30, 50], [5, 4, 6, 3], 8, 400)\n    95.0\n    >>> frac_knapsack(\"ABCD\", [5, 4, 6, 3], 8, 400)\n    Traceback (most recent call last):\n        ...\n    TypeError: unsupported operand type(s) for /: 'str' and 'int'\n    \"\"\"\n\n    r = sorted(zip(vl, wt), key=lambda x: x[0] / x[1], reverse=True)\n    vl, wt = [i[0] for i in r], [i[1] for i in r]\n    acc = list(accumulate(wt))\n    k = bisect(acc, w)\n    return (\n        0\n        if k == 0\n        else sum(vl[:k]) + (w - acc[k - 1]) * (vl[k]) / (wt[k])\n        if k != n\n        else sum(vl[:k])\n    )\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "greedy_methods/fractional_knapsack_2.py",
    "content": "# https://en.wikipedia.org/wiki/Continuous_knapsack_problem\n# https://www.guru99.com/fractional-knapsack-problem-greedy.html\n# https://medium.com/walkinthecode/greedy-algorithm-fractional-knapsack-problem-9aba1daecc93\n\nfrom __future__ import annotations\n\n\ndef fractional_knapsack(\n    value: list[int], weight: list[int], capacity: int\n) -> tuple[float, list[float]]:\n    \"\"\"\n    >>> value = [1, 3, 5, 7, 9]\n    >>> weight = [0.9, 0.7, 0.5, 0.3, 0.1]\n    >>> fractional_knapsack(value, weight, 5)\n    (25, [1, 1, 1, 1, 1])\n    >>> fractional_knapsack(value, weight, 15)\n    (25, [1, 1, 1, 1, 1])\n    >>> fractional_knapsack(value, weight, 25)\n    (25, [1, 1, 1, 1, 1])\n    >>> fractional_knapsack(value, weight, 26)\n    (25, [1, 1, 1, 1, 1])\n    >>> fractional_knapsack(value, weight, -1)\n    (-90.0, [0, 0, 0, 0, -10.0])\n    >>> fractional_knapsack([1, 3, 5, 7], weight, 30)\n    (16, [1, 1, 1, 1])\n    >>> fractional_knapsack(value, [0.9, 0.7, 0.5, 0.3, 0.1], 30)\n    (25, [1, 1, 1, 1, 1])\n    >>> fractional_knapsack([], [], 30)\n    (0, [])\n    \"\"\"\n    index = list(range(len(value)))\n    ratio = [v / w for v, w in zip(value, weight)]\n    index.sort(key=lambda i: ratio[i], reverse=True)\n\n    max_value: float = 0\n    fractions: list[float] = [0] * len(value)\n    for i in index:\n        if weight[i] <= capacity:\n            fractions[i] = 1\n            max_value += value[i]\n            capacity -= weight[i]\n        else:\n            fractions[i] = capacity / weight[i]\n            max_value += value[i] * capacity / weight[i]\n            break\n\n    return max_value, fractions\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "greedy_methods/gas_station.py",
    "content": "\"\"\"\nTask:\nThere are n gas stations along a circular route, where the amount of gas\nat the ith station is gas_quantities[i].\n\nYou have a car with an unlimited gas tank and it costs costs[i] of gas\nto travel from the ith station to its next (i + 1)th station.\nYou begin the journey with an empty tank at one of the gas stations.\n\nGiven two integer arrays gas_quantities and costs, return the starting\ngas station's index if you can travel around the circuit once\nin the clockwise direction otherwise, return -1.\nIf there exists a solution, it is guaranteed to be unique\n\nReference: https://leetcode.com/problems/gas-station/description\n\nImplementation notes:\nFirst, check whether the total gas is enough to complete the journey. If not, return -1.\nHowever, if there is enough gas, it is guaranteed that there is a valid\nstarting index to reach the end of the journey.\nGreedily calculate the net gain (gas_quantity - cost) at each station.\nIf the net gain ever goes below 0 while iterating through the stations,\nstart checking from the next station.\n\n\"\"\"\n\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass GasStation:\n    gas_quantity: int\n    cost: int\n\n\ndef get_gas_stations(\n    gas_quantities: list[int], costs: list[int]\n) -> tuple[GasStation, ...]:\n    \"\"\"\n    This function returns a tuple of gas stations.\n\n    Args:\n        gas_quantities: Amount of gas available at each station\n        costs: The cost of gas required to move from one station to the next\n\n    Returns:\n        A tuple of gas stations\n\n    >>> gas_stations = get_gas_stations([1, 2, 3, 4, 5], [3, 4, 5, 1, 2])\n    >>> len(gas_stations)\n    5\n    >>> gas_stations[0]\n    GasStation(gas_quantity=1, cost=3)\n    >>> gas_stations[-1]\n    GasStation(gas_quantity=5, cost=2)\n    \"\"\"\n    return tuple(\n        GasStation(quantity, cost) for quantity, cost in zip(gas_quantities, costs)\n    )\n\n\ndef can_complete_journey(gas_stations: tuple[GasStation, ...]) -> int:\n    \"\"\"\n    This function returns the index from which to start the journey\n    in order to reach the end.\n\n    Args:\n        gas_quantities [list]: Amount of gas available at each station\n        cost [list]: The cost of gas required to move from one station to the next\n\n    Returns:\n        start [int]: start index needed to complete the journey\n\n    Examples:\n    >>> can_complete_journey(get_gas_stations([1, 2, 3, 4, 5], [3, 4, 5, 1, 2]))\n    3\n    >>> can_complete_journey(get_gas_stations([2, 3, 4], [3, 4, 3]))\n    -1\n    \"\"\"\n    total_gas = sum(gas_station.gas_quantity for gas_station in gas_stations)\n    total_cost = sum(gas_station.cost for gas_station in gas_stations)\n    if total_gas < total_cost:\n        return -1\n\n    start = 0\n    net = 0\n    for i, gas_station in enumerate(gas_stations):\n        net += gas_station.gas_quantity - gas_station.cost\n        if net < 0:\n            start = i + 1\n            net = 0\n    return start\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "greedy_methods/minimum_coin_change.py",
    "content": "\"\"\"\nTest cases:\nDo you want to enter your denominations ? (Y/N) :N\nEnter the change you want to make in Indian Currency: 987\nFollowing is minimal  change for 987 :\n500 100 100 100 100 50 20 10 5 2\n\nDo you want to enter your denominations ? (Y/N) :Y\nEnter number of denomination:10\n1\n5\n10\n20\n50\n100\n200\n500\n1000\n2000\nEnter the change you want to make: 18745\nFollowing is minimal  change for 18745 :\n2000 2000 2000 2000 2000 2000 2000 2000 2000 500 200 20 20 5\n\nDo you want to enter your denominations ? (Y/N) :N\nEnter the change you want to make: 0\nThe total value cannot be zero or negative.\nDo you want to enter your denominations ? (Y/N) :N\nEnter the change you want to make: -98\nThe total value cannot be zero or negative.\n\nDo you want to enter your denominations ? (Y/N) :Y\nEnter number of denomination:5\n1\n5\n100\n500\n1000\nEnter the change you want to make: 456\nFollowing is minimal   change for 456 :\n100 100 100 100 5 5 5 5 5 5 5 5 5 5 5 1\n\"\"\"\n\n\ndef find_minimum_change(denominations: list[int], value: str) -> list[int]:\n    \"\"\"\n    Find the minimum change from the given denominations and value\n    >>> find_minimum_change([1, 5, 10, 20, 50, 100, 200, 500, 1000,2000], 18745)\n    [2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 2000, 500, 200, 20, 20, 5]\n    >>> find_minimum_change([1, 2, 5, 10, 20, 50, 100, 500, 2000], 987)\n    [500, 100, 100, 100, 100, 50, 20, 10, 5, 2]\n    >>> find_minimum_change([1, 2, 5, 10, 20, 50, 100, 500, 2000], 0)\n    []\n    >>> find_minimum_change([1, 2, 5, 10, 20, 50, 100, 500, 2000], -98)\n    []\n    >>> find_minimum_change([1, 5, 100, 500, 1000], 456)\n    [100, 100, 100, 100, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1]\n    \"\"\"\n    total_value = int(value)\n\n    # Initialize Result\n    answer = []\n\n    # Traverse through all denomination\n    for denomination in reversed(denominations):\n        # Find denominations\n        while int(total_value) >= int(denomination):\n            total_value -= int(denomination)\n            answer.append(denomination)  # Append the \"answers\" array\n\n    return answer\n\n\n# Driver Code\nif __name__ == \"__main__\":\n    denominations = []\n    value = \"0\"\n\n    if (\n        input(\"Do you want to enter your denominations ? (yY/n): \").strip().lower()\n        == \"y\"\n    ):\n        n = int(input(\"Enter the number of denominations you want to add: \").strip())\n\n        for i in range(n):\n            denominations.append(int(input(f\"Denomination {i}: \").strip()))\n        value = input(\"Enter the change you want to make in Indian Currency: \").strip()\n    else:\n        # All denominations of Indian Currency if user does not enter\n        denominations = [1, 2, 5, 10, 20, 50, 100, 500, 2000]\n        value = input(\"Enter the change you want to make: \").strip()\n\n    if int(value) == 0 or int(value) < 0:\n        print(\"The total value cannot be zero or negative.\")\n\n    else:\n        print(f\"Following is minimal change for {value}: \")\n        answer = find_minimum_change(denominations, value)\n        # Print result\n        for i in range(len(answer)):\n            print(answer[i], end=\" \")\n"
  },
  {
    "path": "greedy_methods/minimum_waiting_time.py",
    "content": "\"\"\"\nCalculate the minimum waiting time using a greedy algorithm.\nreference: https://www.youtube.com/watch?v=Sf3eiO12eJs\n\nFor doctests run following command:\npython -m doctest -v minimum_waiting_time.py\n\nThe minimum_waiting_time function uses a greedy algorithm to calculate the minimum\ntime for queries to complete. It sorts the list in non-decreasing order, calculates\nthe waiting time for each query by multiplying its position in the list with the\nsum of all remaining query times, and returns the total waiting time. A doctest\nensures that the function produces the correct output.\n\"\"\"\n\n\ndef minimum_waiting_time(queries: list[int]) -> int:\n    \"\"\"\n    This function takes a list of query times and returns the minimum waiting time\n    for all queries to be completed.\n\n    Args:\n        queries: A list of queries measured in picoseconds\n\n    Returns:\n        total_waiting_time: Minimum waiting time measured in picoseconds\n\n    Examples:\n    >>> minimum_waiting_time([3, 2, 1, 2, 6])\n    17\n    >>> minimum_waiting_time([3, 2, 1])\n    4\n    >>> minimum_waiting_time([1, 2, 3, 4])\n    10\n    >>> minimum_waiting_time([5, 5, 5, 5])\n    30\n    >>> minimum_waiting_time([])\n    0\n    \"\"\"\n    n = len(queries)\n    if n in (0, 1):\n        return 0\n    return sum(query * (n - i - 1) for i, query in enumerate(sorted(queries)))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "greedy_methods/optimal_merge_pattern.py",
    "content": "\"\"\"\nThis is a pure Python implementation of the greedy-merge-sort algorithm\nreference: https://www.geeksforgeeks.org/optimal-file-merge-patterns/\n\nFor doctests run following command:\npython3 -m doctest -v greedy_merge_sort.py\n\nObjective\nMerge a set of sorted files of different length into a single sorted file.\nWe need to find an optimal solution, where the resultant file\nwill be generated in minimum time.\n\nApproach\nIf the number of sorted files are given, there are many ways\nto merge them into a single sorted file.\nThis merge can be performed pair wise.\nTo merge a m-record file and a n-record file requires possibly m+n record moves\nthe optimal choice being,\nmerge the two smallest files together at each step (greedy approach).\n\"\"\"\n\n\ndef optimal_merge_pattern(files: list) -> float:\n    \"\"\"Function to merge all the files with optimum cost\n\n    Args:\n        files [list]: A list of sizes of different files to be merged\n\n    Returns:\n        optimal_merge_cost [int]: Optimal cost to merge all those files\n\n    Examples:\n    >>> optimal_merge_pattern([2, 3, 4])\n    14\n    >>> optimal_merge_pattern([5, 10, 20, 30, 30])\n    205\n    >>> optimal_merge_pattern([8, 8, 8, 8, 8])\n    96\n    \"\"\"\n    optimal_merge_cost = 0\n    while len(files) > 1:\n        temp = 0\n        # Consider two files with minimum cost to be merged\n        for _ in range(2):\n            min_index = files.index(min(files))\n            temp += files[min_index]\n            files.pop(min_index)\n        files.append(temp)\n        optimal_merge_cost += temp\n    return optimal_merge_cost\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "greedy_methods/smallest_range.py",
    "content": "\"\"\"\nsmallest_range function takes a list of sorted integer lists and finds the smallest\nrange that includes at least one number from each list, using a min heap for efficiency.\n\"\"\"\n\nfrom heapq import heappop, heappush\nfrom sys import maxsize\n\n\ndef smallest_range(nums: list[list[int]]) -> list[int]:\n    \"\"\"\n    Find the smallest range from each list in nums.\n\n    Uses min heap for efficiency. The range includes at least one number from each list.\n\n    Args:\n        `nums`: List of k sorted integer lists.\n\n    Returns:\n        list: Smallest range as a two-element list.\n\n    Examples:\n\n    >>> smallest_range([[4, 10, 15, 24, 26], [0, 9, 12, 20], [5, 18, 22, 30]])\n    [20, 24]\n    >>> smallest_range([[1, 2, 3], [1, 2, 3], [1, 2, 3]])\n    [1, 1]\n    >>> smallest_range(((1, 2, 3), (1, 2, 3), (1, 2, 3)))\n    [1, 1]\n    >>> smallest_range(((-3, -2, -1), (0, 0, 0), (1, 2, 3)))\n    [-1, 1]\n    >>> smallest_range([[1, 2, 3], [4, 5, 6], [7, 8, 9]])\n    [3, 7]\n    >>> smallest_range([[0, 0, 0], [0, 0, 0], [0, 0, 0]])\n    [0, 0]\n    >>> smallest_range([[], [], []])\n    Traceback (most recent call last):\n        ...\n    IndexError: list index out of range\n    \"\"\"\n\n    min_heap: list[tuple[int, int, int]] = []\n    current_max = -maxsize - 1\n\n    for i, items in enumerate(nums):\n        heappush(min_heap, (items[0], i, 0))\n        current_max = max(current_max, items[0])\n\n    # Initialize smallest_range with large integer values\n    smallest_range = [-maxsize - 1, maxsize]\n\n    while min_heap:\n        current_min, list_index, element_index = heappop(min_heap)\n\n        if current_max - current_min < smallest_range[1] - smallest_range[0]:\n            smallest_range = [current_min, current_max]\n\n        if element_index == len(nums[list_index]) - 1:\n            break\n\n        next_element = nums[list_index][element_index + 1]\n        heappush(min_heap, (next_element, list_index, element_index + 1))\n        current_max = max(current_max, next_element)\n\n    return smallest_range\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    print(f\"{smallest_range([[1, 2, 3], [1, 2, 3], [1, 2, 3]])}\")  # Output: [1, 1]\n"
  },
  {
    "path": "hashes/README.md",
    "content": "# Hashes\nHashing 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.\nUnlike 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.\n\n## Common hashing algorithms\n### MD5\nThis 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.\n\n### SHA\nSHA 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.\n\n### SHA256\nSHA 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.\nThe 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.\n\n### Luhn\nThe 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.\n"
  },
  {
    "path": "hashes/__init__.py",
    "content": ""
  },
  {
    "path": "hashes/adler32.py",
    "content": "\"\"\"\nAdler-32 is a checksum algorithm which was invented by Mark Adler in 1995.\nCompared to a cyclic redundancy check of the same length, it trades reliability for\nspeed (preferring the latter).\nAdler-32 is more reliable than Fletcher-16, and slightly less reliable than\nFletcher-32.[2]\n\nsource: https://en.wikipedia.org/wiki/Adler-32\n\"\"\"\n\nMOD_ADLER = 65521\n\n\ndef adler32(plain_text: str) -> int:\n    \"\"\"\n    Function implements adler-32 hash.\n    Iterates and evaluates a new value for each character\n\n    >>> adler32('Algorithms')\n    363791387\n\n    >>> adler32('go adler em all')\n    708642122\n    \"\"\"\n    a = 1\n    b = 0\n    for plain_chr in plain_text:\n        a = (a + ord(plain_chr)) % MOD_ADLER\n        b = (b + a) % MOD_ADLER\n    return (b << 16) | a\n"
  },
  {
    "path": "hashes/chaos_machine.py",
    "content": "\"\"\"example of simple chaos machine\"\"\"\n\n# Chaos Machine (K, t, m)\nK = [0.33, 0.44, 0.55, 0.44, 0.33]\nt = 3\nm = 5\n\n# Buffer Space (with Parameters Space)\nbuffer_space: list[float] = []\nparams_space: list[float] = []\n\n# Machine Time\nmachine_time = 0\n\n\ndef push(seed):\n    global buffer_space, params_space, machine_time, K, m, t\n\n    # Choosing Dynamical Systems (All)\n    for key, value in enumerate(buffer_space):\n        # Evolution Parameter\n        e = float(seed / value)\n\n        # Control Theory: Orbit Change\n        value = (buffer_space[(key + 1) % m] + e) % 1\n\n        # Control Theory: Trajectory Change\n        r = (params_space[key] + e) % 1 + 3\n\n        # Modification (Transition Function) - Jumps\n        buffer_space[key] = round(float(r * value * (1 - value)), 10)\n        params_space[key] = r  # Saving to Parameters Space\n\n    # Logistic Map\n    assert max(buffer_space) < 1\n    assert max(params_space) < 4\n\n    # Machine Time\n    machine_time += 1\n\n\ndef pull():\n    global buffer_space, params_space, machine_time, K, m, t\n\n    # PRNG (Xorshift by George Marsaglia)\n    def xorshift(x, y):\n        x ^= y >> 13\n        y ^= x << 17\n        x ^= y >> 5\n        return x\n\n    # Choosing Dynamical Systems (Increment)\n    key = machine_time % m\n\n    # Evolution (Time Length)\n    for _ in range(t):\n        # Variables (Position + Parameters)\n        r = params_space[key]\n        value = buffer_space[key]\n\n        # Modification (Transition Function) - Flow\n        buffer_space[key] = round(float(r * value * (1 - value)), 10)\n        params_space[key] = (machine_time * 0.01 + r * 1.01) % 1 + 3\n\n    # Choosing Chaotic Data\n    x = int(buffer_space[(key + 2) % m] * (10**10))\n    y = int(buffer_space[(key - 2) % m] * (10**10))\n\n    # Machine Time\n    machine_time += 1\n\n    return xorshift(x, y) % 0xFFFFFFFF\n\n\ndef reset():\n    global buffer_space, params_space, machine_time, K, m, t\n\n    buffer_space = K\n    params_space = [0] * m\n    machine_time = 0\n\n\nif __name__ == \"__main__\":\n    # Initialization\n    reset()\n\n    # Pushing Data (Input)\n    import random\n\n    message = random.sample(range(0xFFFFFFFF), 100)\n    for chunk in message:\n        push(chunk)\n\n    # for controlling\n    inp = \"\"\n\n    # Pulling Data (Output)\n    while inp in (\"e\", \"E\"):\n        print(f\"{format(pull(), '#04x')}\")\n        print(buffer_space)\n        print(params_space)\n        inp = input(\"(e)exit? \").strip()\n"
  },
  {
    "path": "hashes/djb2.py",
    "content": "\"\"\"\nThis algorithm (k=33) was first reported by Dan Bernstein many years ago in comp.lang.c\nAnother version of this algorithm (now favored by Bernstein) uses xor:\n    hash(i) = hash(i - 1) * 33 ^ str[i];\n\n    First Magic constant 33:\n    It has never been adequately explained.\n    It's magic because it works better than many other constants, prime or not.\n\n    Second Magic Constant 5381:\n\n    1. odd number\n    2. prime number\n    3. deficient number\n    4. 001/010/100/000/101 b\n\n    source: http://www.cse.yorku.ca/~oz/hash.html\n\"\"\"\n\n\ndef djb2(s: str) -> int:\n    \"\"\"\n    Implementation of djb2 hash algorithm that\n    is popular because of it's magic constants.\n\n    >>> djb2('Algorithms')\n    3782405311\n\n    >>> djb2('scramble bits')\n    1609059040\n    \"\"\"\n    hash_value = 5381\n    for x in s:\n        hash_value = ((hash_value << 5) + hash_value) + ord(x)\n    return hash_value & 0xFFFFFFFF\n"
  },
  {
    "path": "hashes/elf.py",
    "content": "def elf_hash(data: str) -> int:\n    \"\"\"\n    Implementation of ElfHash Algorithm, a variant of PJW hash function.\n\n    >>> elf_hash('lorem ipsum')\n    253956621\n    \"\"\"\n    hash_ = x = 0\n    for letter in data:\n        hash_ = (hash_ << 4) + ord(letter)\n        x = hash_ & 0xF0000000\n        if x != 0:\n            hash_ ^= x >> 24\n        hash_ &= ~x\n    return hash_\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "hashes/enigma_machine.py",
    "content": "alphabets = [chr(i) for i in range(32, 126)]\ngear_one = list(range(len(alphabets)))\ngear_two = list(range(len(alphabets)))\ngear_three = list(range(len(alphabets)))\nreflector = list(reversed(range(len(alphabets))))\ncode = []\ngear_one_pos = gear_two_pos = gear_three_pos = 0\n\n\ndef rotator():\n    global gear_one_pos\n    global gear_two_pos\n    global gear_three_pos\n    i = gear_one[0]\n    gear_one.append(i)\n    del gear_one[0]\n    gear_one_pos += 1\n    if gear_one_pos % len(alphabets) == 0:\n        i = gear_two[0]\n        gear_two.append(i)\n        del gear_two[0]\n        gear_two_pos += 1\n        if gear_two_pos % len(alphabets) == 0:\n            i = gear_three[0]\n            gear_three.append(i)\n            del gear_three[0]\n            gear_three_pos += 1\n\n\ndef engine(input_character):\n    target = alphabets.index(input_character)\n    target = gear_one[target]\n    target = gear_two[target]\n    target = gear_three[target]\n    target = reflector[target]\n    target = gear_three.index(target)\n    target = gear_two.index(target)\n    target = gear_one.index(target)\n    code.append(alphabets[target])\n    rotator()\n\n\nif __name__ == \"__main__\":\n    decode = list(input(\"Type your message:\\n\"))\n    while True:\n        try:\n            token = int(input(\"Please set token:(must be only digits)\\n\"))\n            break\n        except Exception as error:\n            print(error)\n    for _ in range(token):\n        rotator()\n    for j in decode:\n        engine(j)\n    print(\"\\n\" + \"\".join(code))\n    print(\n        f\"\\nYour Token is {token} please write it down.\\nIf you want to decode \"\n        \"this message again you should input same digits as token!\"\n    )\n"
  },
  {
    "path": "hashes/fletcher16.py",
    "content": "\"\"\"\r\nThe Fletcher checksum is an algorithm for computing a position-dependent\r\nchecksum devised by John G. Fletcher (1934-2012) at Lawrence Livermore Labs\r\nin the late 1970s.[1] The objective of the Fletcher checksum was to\r\nprovide error-detection properties approaching those of a cyclic\r\nredundancy check but with the lower computational effort associated\r\nwith summation techniques.\r\n\r\nSource: https://en.wikipedia.org/wiki/Fletcher%27s_checksum\r\n\"\"\"\r\n\r\n\r\ndef fletcher16(text: str) -> int:\r\n    \"\"\"\r\n    Loop through every character in the data and add to two sums.\r\n\r\n    >>> fletcher16('hello world')\r\n    6752\r\n    >>> fletcher16('onethousandfourhundredthirtyfour')\r\n    28347\r\n    >>> fletcher16('The quick brown fox jumps over the lazy dog.')\r\n    5655\r\n    \"\"\"\r\n    data = bytes(text, \"ascii\")\r\n    sum1 = 0\r\n    sum2 = 0\r\n    for character in data:\r\n        sum1 = (sum1 + character) % 255\r\n        sum2 = (sum1 + sum2) % 255\r\n    return (sum2 << 8) | sum1\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n"
  },
  {
    "path": "hashes/hamming_code.py",
    "content": "# Author: João Gustavo A. Amorim & Gabriel Kunz\n# Author email: joaogustavoamorim@gmail.com and gabriel-kunz@uergs.edu.br\n# Coding date:  apr 2019\n# Black: True\n\n\"\"\"\n* This code implement the Hamming code:\n    https://en.wikipedia.org/wiki/Hamming_code - In telecommunication,\nHamming codes are a family of linear error-correcting codes. Hamming\ncodes can detect up to two-bit errors or correct one-bit errors\nwithout detection of uncorrected errors. By contrast, the simple\nparity code cannot correct errors, and can detect only an odd number\nof bits in error. Hamming codes are perfect codes, that is, they\nachieve the highest possible rate for codes with their block length\nand minimum distance of three.\n\n* the implemented code consists of:\n    * a function responsible for encoding the message (emitterConverter)\n        * return the encoded message\n    * a function responsible for decoding the message (receptorConverter)\n        * return the decoded message and a ack of data integrity\n\n* how to use:\n        to be used you must declare how many parity bits (sizePari)\n    you want to include in the message.\n        it is desired (for test purposes) to select a bit to be set\n    as an error. This serves to check whether the code is working correctly.\n        Lastly, the variable of the message/word that must be desired to be\n    encoded (text).\n\n* how this work:\n        declaration of variables (sizePari, be, text)\n\n        converts the message/word (text) to binary using the\n    text_to_bits function\n        encodes the message using the rules of hamming encoding\n        decodes the message using the rules of hamming encoding\n        print the original message, the encoded message and the\n    decoded message\n\n        forces an error in the coded text variable\n        decodes the message that was forced the error\n        print the original message, the encoded message, the bit changed\n    message and the decoded message\n\"\"\"\n\n# Imports\nimport numpy as np\n\n\n# Functions of binary conversion--------------------------------------\ndef text_to_bits(text, encoding=\"utf-8\", errors=\"surrogatepass\"):\n    \"\"\"\n    >>> text_to_bits(\"msg\")\n    '011011010111001101100111'\n    \"\"\"\n    bits = bin(int.from_bytes(text.encode(encoding, errors), \"big\"))[2:]\n    return bits.zfill(8 * ((len(bits) + 7) // 8))\n\n\ndef text_from_bits(bits, encoding=\"utf-8\", errors=\"surrogatepass\"):\n    \"\"\"\n    >>> text_from_bits('011011010111001101100111')\n    'msg'\n    \"\"\"\n    n = int(bits, 2)\n    return n.to_bytes((n.bit_length() + 7) // 8, \"big\").decode(encoding, errors) or \"\\0\"\n\n\n# Functions of hamming code-------------------------------------------\ndef emitter_converter(size_par, data):\n    \"\"\"\n    :param size_par: how many parity bits the message must have\n    :param data:  information bits\n    :return: message to be transmitted by unreliable medium\n            - bits of information merged with parity bits\n\n    >>> emitter_converter(4, \"101010111111\")\n    ['1', '1', '1', '1', '0', '1', '0', '0', '1', '0', '1', '1', '1', '1', '1', '1']\n    >>> emitter_converter(5, \"101010111111\")\n    Traceback (most recent call last):\n        ...\n    ValueError: size of parity don't match with size of data\n    \"\"\"\n    if size_par + len(data) <= 2**size_par - (len(data) - 1):\n        raise ValueError(\"size of parity don't match with size of data\")\n\n    data_out = []\n    parity = []\n    bin_pos = [bin(x)[2:] for x in range(1, size_par + len(data) + 1)]\n\n    # sorted information data for the size of the output data\n    data_ord = []\n    # data position template + parity\n    data_out_gab = []\n    # parity bit counter\n    qtd_bp = 0\n    # counter position of data bits\n    cont_data = 0\n\n    for x in range(1, size_par + len(data) + 1):\n        # Performs a template of bit positions - who should be given,\n        # and who should be parity\n        if qtd_bp < size_par:\n            if (np.log(x) / np.log(2)).is_integer():\n                data_out_gab.append(\"P\")\n                qtd_bp = qtd_bp + 1\n            else:\n                data_out_gab.append(\"D\")\n        else:\n            data_out_gab.append(\"D\")\n\n        # Sorts the data to the new output size\n        if data_out_gab[-1] == \"D\":\n            data_ord.append(data[cont_data])\n            cont_data += 1\n        else:\n            data_ord.append(None)\n\n    # Calculates parity\n    qtd_bp = 0  # parity bit counter\n    for bp in range(1, size_par + 1):\n        # Bit counter one for a given parity\n        cont_bo = 0\n        # counter to control the loop reading\n        for cont_loop, x in enumerate(data_ord):\n            if x is not None:\n                try:\n                    aux = (bin_pos[cont_loop])[-1 * (bp)]\n                except IndexError:\n                    aux = \"0\"\n                if aux == \"1\" and x == \"1\":\n                    cont_bo += 1\n        parity.append(cont_bo % 2)\n\n        qtd_bp += 1\n\n    # Mount the message\n    cont_bp = 0  # parity bit counter\n    for x in range(size_par + len(data)):\n        if data_ord[x] is None:\n            data_out.append(str(parity[cont_bp]))\n            cont_bp += 1\n        else:\n            data_out.append(data_ord[x])\n\n    return data_out\n\n\ndef receptor_converter(size_par, data):\n    \"\"\"\n    >>> receptor_converter(4, \"1111010010111111\")\n    (['1', '0', '1', '0', '1', '0', '1', '1', '1', '1', '1', '1'], True)\n    \"\"\"\n    # data position template + parity\n    data_out_gab = []\n    # Parity bit counter\n    qtd_bp = 0\n    # Counter p data bit reading\n    cont_data = 0\n    # list of parity received\n    parity_received = []\n    data_output = []\n\n    for i, item in enumerate(data, 1):\n        # Performs a template of bit positions - who should be given,\n        #  and who should be parity\n        if qtd_bp < size_par and (np.log(i) / np.log(2)).is_integer():\n            data_out_gab.append(\"P\")\n            qtd_bp = qtd_bp + 1\n        else:\n            data_out_gab.append(\"D\")\n\n        # Sorts the data to the new output size\n        if data_out_gab[-1] == \"D\":\n            data_output.append(item)\n        else:\n            parity_received.append(item)\n\n    # -----------calculates the parity with the data\n    data_out = []\n    parity = []\n    bin_pos = [bin(x)[2:] for x in range(1, size_par + len(data_output) + 1)]\n\n    #  sorted information data for the size of the output data\n    data_ord = []\n    # Data position feedback + parity\n    data_out_gab = []\n    # Parity bit counter\n    qtd_bp = 0\n    # Counter p data bit reading\n    cont_data = 0\n\n    for x in range(1, size_par + len(data_output) + 1):\n        # Performs a template position of bits - who should be given,\n        # and who should be parity\n        if qtd_bp < size_par and (np.log(x) / np.log(2)).is_integer():\n            data_out_gab.append(\"P\")\n            qtd_bp = qtd_bp + 1\n        else:\n            data_out_gab.append(\"D\")\n\n        # Sorts the data to the new output size\n        if data_out_gab[-1] == \"D\":\n            data_ord.append(data_output[cont_data])\n            cont_data += 1\n        else:\n            data_ord.append(None)\n\n    # Calculates parity\n    qtd_bp = 0  # parity bit counter\n    for bp in range(1, size_par + 1):\n        # Bit counter one for a certain parity\n        cont_bo = 0\n        for cont_loop, x in enumerate(data_ord):\n            if x is not None:\n                try:\n                    aux = (bin_pos[cont_loop])[-1 * (bp)]\n                except IndexError:\n                    aux = \"0\"\n                if aux == \"1\" and x == \"1\":\n                    cont_bo += 1\n        parity.append(str(cont_bo % 2))\n\n        qtd_bp += 1\n\n    # Mount the message\n    cont_bp = 0  # Parity bit counter\n    for x in range(size_par + len(data_output)):\n        if data_ord[x] is None:\n            data_out.append(str(parity[cont_bp]))\n            cont_bp += 1\n        else:\n            data_out.append(data_ord[x])\n\n    ack = parity_received == parity\n    return data_output, ack\n\n\n# ---------------------------------------------------------------------\n\"\"\"\n# Example how to use\n\n# number of parity bits\nsizePari = 4\n\n# location of the bit that will be forced an error\nbe = 2\n\n# Message/word to be encoded and decoded with hamming\n# text = input(\"Enter the word to be read: \")\ntext = \"Message01\"\n\n# Convert the message to binary\nbinaryText = text_to_bits(text)\n\n# Prints the binary of the string\nprint(\"Text input in binary is '\" + binaryText + \"'\")\n\n# total transmitted bits\ntotalBits = len(binaryText) + sizePari\nprint(\"Size of data is \" + str(totalBits))\n\nprint(\"\\n --Message exchange--\")\nprint(\"Data to send ------------> \" + binaryText)\ndataOut = emitterConverter(sizePari, binaryText)\nprint(\"Data converted ----------> \" + \"\".join(dataOut))\ndataReceiv, ack = receptorConverter(sizePari, dataOut)\nprint(\n    \"Data receive ------------> \"\n    + \"\".join(dataReceiv)\n    + \"\\t\\t -- Data integrity: \"\n    + str(ack)\n)\n\n\nprint(\"\\n --Force error--\")\nprint(\"Data to send ------------> \" + binaryText)\ndataOut = emitterConverter(sizePari, binaryText)\nprint(\"Data converted ----------> \" + \"\".join(dataOut))\n\n# forces error\ndataOut[-be] = \"1\" * (dataOut[-be] == \"0\") + \"0\" * (dataOut[-be] == \"1\")\nprint(\"Data after transmission -> \" + \"\".join(dataOut))\ndataReceiv, ack = receptorConverter(sizePari, dataOut)\nprint(\n    \"Data receive ------------> \"\n    + \"\".join(dataReceiv)\n    + \"\\t\\t -- Data integrity: \"\n    + str(ack)\n)\n\"\"\"\n"
  },
  {
    "path": "hashes/luhn.py",
    "content": "\"\"\"Luhn Algorithm\"\"\"\n\nfrom __future__ import annotations\n\n\ndef is_luhn(string: str) -> bool:\n    \"\"\"\n    Perform Luhn validation on an input string\n    Algorithm:\n    * Double every other digit starting from 2nd last digit.\n    * Subtract 9 if number is greater than 9.\n    * Sum the numbers\n    *\n    >>> test_cases = (79927398710, 79927398711, 79927398712, 79927398713,\n    ...     79927398714, 79927398715, 79927398716, 79927398717, 79927398718,\n    ...     79927398719)\n    >>> [is_luhn(str(test_case)) for test_case in test_cases]\n    [False, False, False, True, False, False, False, False, False, False]\n    \"\"\"\n    check_digit: int\n    _vector: list[str] = list(string)\n    __vector, check_digit = _vector[:-1], int(_vector[-1])\n    vector: list[int] = [int(digit) for digit in __vector]\n\n    vector.reverse()\n    for i, digit in enumerate(vector):\n        if i & 1 == 0:\n            doubled: int = digit * 2\n            if doubled > 9:\n                doubled -= 9\n            check_digit += doubled\n        else:\n            check_digit += digit\n\n    return check_digit % 10 == 0\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    assert is_luhn(\"79927398713\")\n    assert not is_luhn(\"79927398714\")\n"
  },
  {
    "path": "hashes/md5.py",
    "content": "\"\"\"\nThe MD5 algorithm is a hash function that's commonly used as a checksum to\ndetect data corruption. The algorithm works by processing a given message in\nblocks of 512 bits, padding the message as needed. It uses the blocks to operate\na 128-bit state and performs a total of 64 such operations. Note that all values\nare little-endian, so inputs are converted as needed.\n\nAlthough MD5 was used as a cryptographic hash function in the past, it's since\nbeen cracked, so it shouldn't be used for security purposes.\n\nFor more info, see https://en.wikipedia.org/wiki/MD5\n\"\"\"\n\nfrom collections.abc import Generator\nfrom math import sin\n\n\ndef to_little_endian(string_32: bytes) -> bytes:\n    \"\"\"\n    Converts the given string to little-endian in groups of 8 chars.\n\n    Arguments:\n        string_32 {[string]} -- [32-char string]\n\n    Raises:\n        ValueError -- [input is not 32 char]\n\n    Returns:\n        32-char little-endian string\n    >>> to_little_endian(b'1234567890abcdfghijklmnopqrstuvw')\n    b'pqrstuvwhijklmno90abcdfg12345678'\n    >>> to_little_endian(b'1234567890')\n    Traceback (most recent call last):\n    ...\n    ValueError: Input must be of length 32\n    \"\"\"\n    if len(string_32) != 32:\n        raise ValueError(\"Input must be of length 32\")\n\n    little_endian = b\"\"\n    for i in [3, 2, 1, 0]:\n        little_endian += string_32[8 * i : 8 * i + 8]\n    return little_endian\n\n\ndef reformat_hex(i: int) -> bytes:\n    \"\"\"\n    Converts the given non-negative integer to hex string.\n\n    Example: Suppose the input is the following:\n        i = 1234\n\n        The input is 0x000004d2 in hex, so the little-endian hex string is\n        \"d2040000\".\n\n    Arguments:\n        i {[int]} -- [integer]\n\n    Raises:\n        ValueError -- [input is negative]\n\n    Returns:\n        8-char little-endian hex string\n\n    >>> reformat_hex(1234)\n    b'd2040000'\n    >>> reformat_hex(666)\n    b'9a020000'\n    >>> reformat_hex(0)\n    b'00000000'\n    >>> reformat_hex(1234567890)\n    b'd2029649'\n    >>> reformat_hex(1234567890987654321)\n    b'b11c6cb1'\n    >>> reformat_hex(-1)\n    Traceback (most recent call last):\n    ...\n    ValueError: Input must be non-negative\n    \"\"\"\n    if i < 0:\n        raise ValueError(\"Input must be non-negative\")\n\n    hex_rep = format(i, \"08x\")[-8:]\n    little_endian_hex = b\"\"\n    for j in [3, 2, 1, 0]:\n        little_endian_hex += hex_rep[2 * j : 2 * j + 2].encode(\"utf-8\")\n    return little_endian_hex\n\n\ndef preprocess(message: bytes) -> bytes:\n    \"\"\"\n    Preprocesses the message string:\n    - Convert message to bit string\n    - Pad bit string to a multiple of 512 chars:\n        - Append a 1\n        - Append 0's until length = 448 (mod 512)\n        - Append length of original message (64 chars)\n\n    Example: Suppose the input is the following:\n        message = \"a\"\n\n        The message bit string is \"01100001\", which is 8 bits long. Thus, the\n        bit string needs 439 bits of padding so that\n        (bit_string + \"1\" + padding) = 448 (mod 512).\n        The message length is \"000010000...0\" in 64-bit little-endian binary.\n        The combined bit string is then 512 bits long.\n\n    Arguments:\n        message {[string]} -- [message string]\n\n    Returns:\n        processed bit string padded to a multiple of 512 chars\n\n    >>> preprocess(b\"a\") == (b\"01100001\" + b\"1\" +\n    ...                     (b\"0\" * 439) + b\"00001000\" + (b\"0\" * 56))\n    True\n    >>> preprocess(b\"\") == b\"1\" + (b\"0\" * 447) + (b\"0\" * 64)\n    True\n    \"\"\"\n    bit_string = b\"\"\n    for char in message:\n        bit_string += format(char, \"08b\").encode(\"utf-8\")\n    start_len = format(len(bit_string), \"064b\").encode(\"utf-8\")\n\n    # Pad bit_string to a multiple of 512 chars\n    bit_string += b\"1\"\n    while len(bit_string) % 512 != 448:\n        bit_string += b\"0\"\n    bit_string += to_little_endian(start_len[32:]) + to_little_endian(start_len[:32])\n\n    return bit_string\n\n\ndef get_block_words(bit_string: bytes) -> Generator[list[int]]:\n    \"\"\"\n    Splits bit string into blocks of 512 chars and yields each block as a list\n    of 32-bit words\n\n    Example: Suppose the input is the following:\n        bit_string =\n            \"000000000...0\" +  # 0x00 (32 bits, padded to the right)\n            \"000000010...0\" +  # 0x01 (32 bits, padded to the right)\n            \"000000100...0\" +  # 0x02 (32 bits, padded to the right)\n            \"000000110...0\" +  # 0x03 (32 bits, padded to the right)\n            ...\n            \"000011110...0\"    # 0x0a (32 bits, padded to the right)\n\n        Then len(bit_string) == 512, so there'll be 1 block. The block is split\n        into 32-bit words, and each word is converted to little endian. The\n        first word is interpreted as 0 in decimal, the second word is\n        interpreted as 1 in decimal, etc.\n\n        Thus, block_words == [[0, 1, 2, 3, ..., 15]].\n\n    Arguments:\n        bit_string {[string]} -- [bit string with multiple of 512 as length]\n\n    Raises:\n        ValueError -- [length of bit string isn't multiple of 512]\n\n    Yields:\n        a list of 16 32-bit words\n\n    >>> test_string = (\"\".join(format(n << 24, \"032b\") for n in range(16))\n    ...                  .encode(\"utf-8\"))\n    >>> list(get_block_words(test_string))\n    [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]]\n    >>> list(get_block_words(test_string * 4)) == [list(range(16))] * 4\n    True\n    >>> list(get_block_words(b\"1\" * 512)) == [[4294967295] * 16]\n    True\n    >>> list(get_block_words(b\"\"))\n    []\n    >>> list(get_block_words(b\"1111\"))\n    Traceback (most recent call last):\n    ...\n    ValueError: Input must have length that's a multiple of 512\n    \"\"\"\n    if len(bit_string) % 512 != 0:\n        raise ValueError(\"Input must have length that's a multiple of 512\")\n\n    for pos in range(0, len(bit_string), 512):\n        block = bit_string[pos : pos + 512]\n        block_words = []\n        for i in range(0, 512, 32):\n            block_words.append(int(to_little_endian(block[i : i + 32]), 2))\n        yield block_words\n\n\ndef not_32(i: int) -> int:\n    \"\"\"\n    Perform bitwise NOT on given int.\n\n    Arguments:\n        i {[int]} -- [given int]\n\n    Raises:\n        ValueError -- [input is negative]\n\n    Returns:\n        Result of bitwise NOT on i\n\n    >>> not_32(34)\n    4294967261\n    >>> not_32(1234)\n    4294966061\n    >>> not_32(4294966061)\n    1234\n    >>> not_32(0)\n    4294967295\n    >>> not_32(1)\n    4294967294\n    >>> not_32(-1)\n    Traceback (most recent call last):\n    ...\n    ValueError: Input must be non-negative\n    \"\"\"\n    if i < 0:\n        raise ValueError(\"Input must be non-negative\")\n\n    i_str = format(i, \"032b\")\n    new_str = \"\"\n    for c in i_str:\n        new_str += \"1\" if c == \"0\" else \"0\"\n    return int(new_str, 2)\n\n\ndef sum_32(a: int, b: int) -> int:\n    \"\"\"\n    Add two numbers as 32-bit ints.\n\n    Arguments:\n        a {[int]} -- [first given int]\n        b {[int]} -- [second given int]\n\n    Returns:\n        (a + b) as an unsigned 32-bit int\n\n    >>> sum_32(1, 1)\n    2\n    >>> sum_32(2, 3)\n    5\n    >>> sum_32(0, 0)\n    0\n    >>> sum_32(-1, -1)\n    4294967294\n    >>> sum_32(4294967295, 1)\n    0\n    \"\"\"\n    return (a + b) % 2**32\n\n\ndef left_rotate_32(i: int, shift: int) -> int:\n    \"\"\"\n    Rotate the bits of a given int left by a given amount.\n\n    Arguments:\n        i {[int]} -- [given int]\n        shift {[int]} -- [shift amount]\n\n    Raises:\n        ValueError -- [either given int or shift is negative]\n\n    Returns:\n        `i` rotated to the left by `shift` bits\n\n    >>> left_rotate_32(1234, 1)\n    2468\n    >>> left_rotate_32(1111, 4)\n    17776\n    >>> left_rotate_32(2147483648, 1)\n    1\n    >>> left_rotate_32(2147483648, 3)\n    4\n    >>> left_rotate_32(4294967295, 4)\n    4294967295\n    >>> left_rotate_32(1234, 0)\n    1234\n    >>> left_rotate_32(0, 0)\n    0\n    >>> left_rotate_32(-1, 0)\n    Traceback (most recent call last):\n    ...\n    ValueError: Input must be non-negative\n    >>> left_rotate_32(0, -1)\n    Traceback (most recent call last):\n    ...\n    ValueError: Shift must be non-negative\n    \"\"\"\n    if i < 0:\n        raise ValueError(\"Input must be non-negative\")\n    if shift < 0:\n        raise ValueError(\"Shift must be non-negative\")\n    return ((i << shift) ^ (i >> (32 - shift))) % 2**32\n\n\ndef md5_me(message: bytes) -> bytes:\n    \"\"\"\n    Returns the 32-char MD5 hash of a given message.\n\n    Reference: https://en.wikipedia.org/wiki/MD5#Algorithm\n\n    Arguments:\n        message {[string]} -- [message]\n\n    Returns:\n        32-char MD5 hash string\n\n    >>> md5_me(b\"\")\n    b'd41d8cd98f00b204e9800998ecf8427e'\n    >>> md5_me(b\"The quick brown fox jumps over the lazy dog\")\n    b'9e107d9d372bb6826bd81d3542a419d6'\n    >>> md5_me(b\"The quick brown fox jumps over the lazy dog.\")\n    b'e4d909c290d0fb1ca068ffaddf22cbd0'\n\n    >>> import hashlib\n    >>> from string import ascii_letters\n    >>> msgs = [b\"\", ascii_letters.encode(\"utf-8\"), \"Üñîçø∂é\".encode(\"utf-8\"),\n    ...         b\"The quick brown fox jumps over the lazy dog.\"]\n    >>> all(md5_me(msg) == hashlib.md5(msg).hexdigest().encode(\"utf-8\") for msg in msgs)\n    True\n    \"\"\"\n\n    # Convert to bit string, add padding and append message length\n    bit_string = preprocess(message)\n\n    added_consts = [int(2**32 * abs(sin(i + 1))) for i in range(64)]\n\n    # Starting states\n    a0 = 0x67452301\n    b0 = 0xEFCDAB89\n    c0 = 0x98BADCFE\n    d0 = 0x10325476\n\n    shift_amounts = [\n        7,\n        12,\n        17,\n        22,\n        7,\n        12,\n        17,\n        22,\n        7,\n        12,\n        17,\n        22,\n        7,\n        12,\n        17,\n        22,\n        5,\n        9,\n        14,\n        20,\n        5,\n        9,\n        14,\n        20,\n        5,\n        9,\n        14,\n        20,\n        5,\n        9,\n        14,\n        20,\n        4,\n        11,\n        16,\n        23,\n        4,\n        11,\n        16,\n        23,\n        4,\n        11,\n        16,\n        23,\n        4,\n        11,\n        16,\n        23,\n        6,\n        10,\n        15,\n        21,\n        6,\n        10,\n        15,\n        21,\n        6,\n        10,\n        15,\n        21,\n        6,\n        10,\n        15,\n        21,\n    ]\n\n    # Process bit string in chunks, each with 16 32-char words\n    for block_words in get_block_words(bit_string):\n        a = a0\n        b = b0\n        c = c0\n        d = d0\n\n        # Hash current chunk\n        for i in range(64):\n            if i <= 15:\n                # f = (b & c) | (not_32(b) & d)     # Alternate definition for f\n                f = d ^ (b & (c ^ d))\n                g = i\n            elif i <= 31:\n                # f = (d & b) | (not_32(d) & c)     # Alternate definition for f\n                f = c ^ (d & (b ^ c))\n                g = (5 * i + 1) % 16\n            elif i <= 47:\n                f = b ^ c ^ d\n                g = (3 * i + 5) % 16\n            else:\n                f = c ^ (b | not_32(d))\n                g = (7 * i) % 16\n            f = (f + a + added_consts[i] + block_words[g]) % 2**32\n            a = d\n            d = c\n            c = b\n            b = sum_32(b, left_rotate_32(f, shift_amounts[i]))\n\n        # Add hashed chunk to running total\n        a0 = sum_32(a0, a)\n        b0 = sum_32(b0, b)\n        c0 = sum_32(c0, c)\n        d0 = sum_32(d0, d)\n\n    digest = reformat_hex(a0) + reformat_hex(b0) + reformat_hex(c0) + reformat_hex(d0)\n    return digest\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "hashes/sdbm.py",
    "content": "\"\"\"\nThis algorithm was created for sdbm (a public-domain reimplementation of ndbm)\ndatabase library.\nIt was found to do well in scrambling bits, causing better distribution of the keys\nand fewer splits.\nIt also happens to be a good general hashing function with good distribution.\nThe actual function (pseudo code) is:\n    for i in i..len(str):\n        hash(i) = hash(i - 1) * 65599 + str[i];\n\nWhat is included below is the faster version used in gawk. [there is even a faster,\nduff-device version]\nThe magic constant 65599 was picked out of thin air while experimenting with\ndifferent constants.\nIt turns out to be a prime.\nThis is one of the algorithms used in berkeley db (see sleepycat) and elsewhere.\n\nsource: http://www.cse.yorku.ca/~oz/hash.html\n\"\"\"\n\n\ndef sdbm(plain_text: str) -> int:\n    \"\"\"\n    Function implements sdbm hash, easy to use, great for bits scrambling.\n    iterates over each character in the given string and applies function to each of\n    them.\n\n    >>> sdbm('Algorithms')\n    1462174910723540325254304520539387479031000036\n\n    >>> sdbm('scramble bits')\n    730247649148944819640658295400555317318720608290373040936089\n    \"\"\"\n    hash_value = 0\n    for plain_chr in plain_text:\n        hash_value = (\n            ord(plain_chr) + (hash_value << 6) + (hash_value << 16) - hash_value\n        )\n    return hash_value\n"
  },
  {
    "path": "hashes/sha1.py",
    "content": "\"\"\"\nImplementation of the SHA1 hash function and gives utilities to find hash of string or\nhash of text from a file. Also contains a Test class to verify that the generated hash\nmatches what is returned by the hashlib library\n\nUsage: python sha1.py --string \"Hello World!!\"\n       python sha1.py --file \"hello_world.txt\"\n       When run without any arguments, it prints the hash of the string \"Hello World!!\n       Welcome to Cryptography\"\n\nSHA1 hash or SHA1 sum of a string is a cryptographic function, which means it is easy\nto calculate forwards but extremely difficult to calculate backwards. What this means\nis you can easily calculate the hash of a string, but it is extremely difficult to know\nthe original string if you have its hash. This property is useful for communicating\nsecurely, send encrypted messages and is very useful in payment systems, blockchain and\ncryptocurrency etc.\n\nThe algorithm as described in the reference:\nFirst we start with a message. The message is padded and the length of the message\nis added to the end. It is then split into blocks of 512 bits or 64 bytes. The blocks\nare then processed one at a time. Each block must be expanded and compressed.\nThe value after each compression is added to a 160-bit buffer called the current hash\nstate. After the last block is processed, the current hash state is returned as\nthe final hash.\n\nReference: https://deadhacker.com/2006/02/21/sha-1-illustrated/\n\"\"\"\n\nimport argparse\nimport hashlib  # hashlib is only used inside the Test class\nimport struct\n\n\nclass SHA1Hash:\n    \"\"\"\n    Class to contain the entire pipeline for SHA1 hashing algorithm\n    >>> SHA1Hash(bytes('Allan', 'utf-8')).final_hash()\n    '872af2d8ac3d8695387e7c804bf0e02c18df9e6e'\n    \"\"\"\n\n    def __init__(self, data):\n        \"\"\"\n        Initiates the variables data and h. h is a list of 5 8-digit hexadecimal\n        numbers corresponding to\n        (1732584193, 4023233417, 2562383102, 271733878, 3285377520)\n        respectively. We will start with this as a message digest. 0x is how you write\n        hexadecimal numbers in Python\n        \"\"\"\n        self.data = data\n        self.h = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]\n\n    @staticmethod\n    def rotate(n, b):\n        \"\"\"\n        Static method to be used inside other methods. Left rotates n by b.\n        >>> SHA1Hash('').rotate(12,2)\n        48\n        \"\"\"\n        return ((n << b) | (n >> (32 - b))) & 0xFFFFFFFF\n\n    def padding(self):\n        \"\"\"\n        Pads the input message with zeros so that padded_data has 64 bytes or 512 bits\n        \"\"\"\n        padding = b\"\\x80\" + b\"\\x00\" * (63 - (len(self.data) + 8) % 64)\n        padded_data = self.data + padding + struct.pack(\">Q\", 8 * len(self.data))\n        return padded_data\n\n    def split_blocks(self):\n        \"\"\"\n        Returns a list of bytestrings each of length 64\n        \"\"\"\n        return [\n            self.padded_data[i : i + 64] for i in range(0, len(self.padded_data), 64)\n        ]\n\n    # @staticmethod\n    def expand_block(self, block):\n        \"\"\"\n        Takes a bytestring-block of length 64, unpacks it to a list of integers and\n        returns a list of 80 integers after some bit operations\n        \"\"\"\n        w = list(struct.unpack(\">16L\", block)) + [0] * 64\n        for i in range(16, 80):\n            w[i] = self.rotate((w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16]), 1)\n        return w\n\n    def final_hash(self):\n        \"\"\"\n        Calls all the other methods to process the input. Pads the data, then splits\n        into blocks and then does a series of operations for each block (including\n        expansion).\n        For each block, the variable h that was initialized is copied to a,b,c,d,e\n        and these 5 variables a,b,c,d,e undergo several changes. After all the blocks\n        are processed, these 5 variables are pairwise added to h ie a to h[0], b to h[1]\n        and so on. This h becomes our final hash which is returned.\n        \"\"\"\n        self.padded_data = self.padding()\n        self.blocks = self.split_blocks()\n        for block in self.blocks:\n            expanded_block = self.expand_block(block)\n            a, b, c, d, e = self.h\n            for i in range(80):\n                if 0 <= i < 20:\n                    f = (b & c) | ((~b) & d)\n                    k = 0x5A827999\n                elif 20 <= i < 40:\n                    f = b ^ c ^ d\n                    k = 0x6ED9EBA1\n                elif 40 <= i < 60:\n                    f = (b & c) | (b & d) | (c & d)\n                    k = 0x8F1BBCDC\n                elif 60 <= i < 80:\n                    f = b ^ c ^ d\n                    k = 0xCA62C1D6\n                a, b, c, d, e = (\n                    self.rotate(a, 5) + f + e + k + expanded_block[i] & 0xFFFFFFFF,\n                    a,\n                    self.rotate(b, 30),\n                    c,\n                    d,\n                )\n            self.h = (\n                self.h[0] + a & 0xFFFFFFFF,\n                self.h[1] + b & 0xFFFFFFFF,\n                self.h[2] + c & 0xFFFFFFFF,\n                self.h[3] + d & 0xFFFFFFFF,\n                self.h[4] + e & 0xFFFFFFFF,\n            )\n        return (\"{:08x}\" * 5).format(*self.h)\n\n\ndef test_sha1_hash():\n    msg = b\"Test String\"\n    assert SHA1Hash(msg).final_hash() == hashlib.sha1(msg).hexdigest()  # noqa: S324\n\n\ndef main():\n    \"\"\"\n    Provides option 'string' or 'file' to take input and prints the calculated SHA1\n    hash. unittest.main() has been commented out because we probably don't want to run\n    the test each time.\n    \"\"\"\n    # unittest.main()\n    parser = argparse.ArgumentParser(description=\"Process some strings or files\")\n    parser.add_argument(\n        \"--string\",\n        dest=\"input_string\",\n        default=\"Hello World!! Welcome to Cryptography\",\n        help=\"Hash the string\",\n    )\n    parser.add_argument(\"--file\", dest=\"input_file\", help=\"Hash contents of a file\")\n    args = parser.parse_args()\n    input_string = args.input_string\n    # In any case hash input should be a bytestring\n    if args.input_file:\n        with open(args.input_file, \"rb\") as f:\n            hash_input = f.read()\n    else:\n        hash_input = bytes(input_string, \"utf-8\")\n    print(SHA1Hash(hash_input).final_hash())\n\n\nif __name__ == \"__main__\":\n    main()\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "hashes/sha256.py",
    "content": "# Author: M. Yathurshan\r\n# Black Formatter: True\r\n\r\n\"\"\"\r\nImplementation of SHA256 Hash function in a Python class and provides utilities\r\nto find hash of string or hash of text from a file.\r\n\r\nUsage: python sha256.py --string \"Hello World!!\"\r\n       python sha256.py --file \"hello_world.txt\"\r\n       When run without any arguments,\r\n       it prints the hash of the string \"Hello World!! Welcome to Cryptography\"\r\n\r\nReferences:\r\nhttps://qvault.io/cryptography/how-sha-2-works-step-by-step-sha-256/\r\nhttps://en.wikipedia.org/wiki/SHA-2\r\n\"\"\"\r\n\r\nimport argparse\r\nimport struct\r\nimport unittest\r\n\r\n\r\nclass SHA256:\r\n    \"\"\"\r\n    Class to contain the entire pipeline for SHA1 Hashing Algorithm\r\n\r\n    >>> SHA256(b'Python').hash\r\n    '18885f27b5af9012df19e496460f9294d5ab76128824c6f993787004f6d9a7db'\r\n\r\n    >>> SHA256(b'hello world').hash\r\n    'b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9'\r\n    \"\"\"\r\n\r\n    def __init__(self, data: bytes) -> None:\r\n        self.data = data\r\n\r\n        # Initialize hash values\r\n        self.hashes = [\r\n            0x6A09E667,\r\n            0xBB67AE85,\r\n            0x3C6EF372,\r\n            0xA54FF53A,\r\n            0x510E527F,\r\n            0x9B05688C,\r\n            0x1F83D9AB,\r\n            0x5BE0CD19,\r\n        ]\r\n\r\n        # Initialize round constants\r\n        self.round_constants = [\r\n            0x428A2F98,\r\n            0x71374491,\r\n            0xB5C0FBCF,\r\n            0xE9B5DBA5,\r\n            0x3956C25B,\r\n            0x59F111F1,\r\n            0x923F82A4,\r\n            0xAB1C5ED5,\r\n            0xD807AA98,\r\n            0x12835B01,\r\n            0x243185BE,\r\n            0x550C7DC3,\r\n            0x72BE5D74,\r\n            0x80DEB1FE,\r\n            0x9BDC06A7,\r\n            0xC19BF174,\r\n            0xE49B69C1,\r\n            0xEFBE4786,\r\n            0x0FC19DC6,\r\n            0x240CA1CC,\r\n            0x2DE92C6F,\r\n            0x4A7484AA,\r\n            0x5CB0A9DC,\r\n            0x76F988DA,\r\n            0x983E5152,\r\n            0xA831C66D,\r\n            0xB00327C8,\r\n            0xBF597FC7,\r\n            0xC6E00BF3,\r\n            0xD5A79147,\r\n            0x06CA6351,\r\n            0x14292967,\r\n            0x27B70A85,\r\n            0x2E1B2138,\r\n            0x4D2C6DFC,\r\n            0x53380D13,\r\n            0x650A7354,\r\n            0x766A0ABB,\r\n            0x81C2C92E,\r\n            0x92722C85,\r\n            0xA2BFE8A1,\r\n            0xA81A664B,\r\n            0xC24B8B70,\r\n            0xC76C51A3,\r\n            0xD192E819,\r\n            0xD6990624,\r\n            0xF40E3585,\r\n            0x106AA070,\r\n            0x19A4C116,\r\n            0x1E376C08,\r\n            0x2748774C,\r\n            0x34B0BCB5,\r\n            0x391C0CB3,\r\n            0x4ED8AA4A,\r\n            0x5B9CCA4F,\r\n            0x682E6FF3,\r\n            0x748F82EE,\r\n            0x78A5636F,\r\n            0x84C87814,\r\n            0x8CC70208,\r\n            0x90BEFFFA,\r\n            0xA4506CEB,\r\n            0xBEF9A3F7,\r\n            0xC67178F2,\r\n        ]\r\n\r\n        self.preprocessed_data = self.preprocessing(self.data)\r\n        self.final_hash()\r\n\r\n    @staticmethod\r\n    def preprocessing(data: bytes) -> bytes:\r\n        padding = b\"\\x80\" + (b\"\\x00\" * (63 - (len(data) + 8) % 64))\r\n        big_endian_integer = struct.pack(\">Q\", (len(data) * 8))\r\n        return data + padding + big_endian_integer\r\n\r\n    def final_hash(self) -> None:\r\n        # Convert into blocks of 64 bytes\r\n        self.blocks = [\r\n            self.preprocessed_data[x : x + 64]\r\n            for x in range(0, len(self.preprocessed_data), 64)\r\n        ]\r\n\r\n        for block in self.blocks:\r\n            # Convert the given block into a list of 4 byte integers\r\n            words = list(struct.unpack(\">16L\", block))\r\n            # add 48 0-ed integers\r\n            words += [0] * 48\r\n\r\n            a, b, c, d, e, f, g, h = self.hashes\r\n\r\n            for index in range(64):\r\n                if index > 15:\r\n                    # modify the zero-ed indexes at the end of the array\r\n                    s0 = (\r\n                        self.ror(words[index - 15], 7)\r\n                        ^ self.ror(words[index - 15], 18)\r\n                        ^ (words[index - 15] >> 3)\r\n                    )\r\n                    s1 = (\r\n                        self.ror(words[index - 2], 17)\r\n                        ^ self.ror(words[index - 2], 19)\r\n                        ^ (words[index - 2] >> 10)\r\n                    )\r\n\r\n                    words[index] = (\r\n                        words[index - 16] + s0 + words[index - 7] + s1\r\n                    ) % 0x100000000\r\n\r\n                # Compression\r\n                s1 = self.ror(e, 6) ^ self.ror(e, 11) ^ self.ror(e, 25)\r\n                ch = (e & f) ^ ((~e & (0xFFFFFFFF)) & g)\r\n                temp1 = (\r\n                    h + s1 + ch + self.round_constants[index] + words[index]\r\n                ) % 0x100000000\r\n                s0 = self.ror(a, 2) ^ self.ror(a, 13) ^ self.ror(a, 22)\r\n                maj = (a & b) ^ (a & c) ^ (b & c)\r\n                temp2 = (s0 + maj) % 0x100000000\r\n\r\n                h, g, f, e, d, c, b, a = (\r\n                    g,\r\n                    f,\r\n                    e,\r\n                    ((d + temp1) % 0x100000000),\r\n                    c,\r\n                    b,\r\n                    a,\r\n                    ((temp1 + temp2) % 0x100000000),\r\n                )\r\n\r\n            mutated_hash_values = [a, b, c, d, e, f, g, h]\r\n\r\n            # Modify final values\r\n            self.hashes = [\r\n                ((element + mutated_hash_values[index]) % 0x100000000)\r\n                for index, element in enumerate(self.hashes)\r\n            ]\r\n\r\n        self.hash = \"\".join([hex(value)[2:].zfill(8) for value in self.hashes])\r\n\r\n    def ror(self, value: int, rotations: int) -> int:\r\n        \"\"\"\r\n        Right rotate a given unsigned number by a certain amount of rotations\r\n        \"\"\"\r\n        return 0xFFFFFFFF & (value << (32 - rotations)) | (value >> rotations)\r\n\r\n\r\nclass SHA256HashTest(unittest.TestCase):\r\n    \"\"\"\r\n    Test class for the SHA256 class. Inherits the TestCase class from unittest\r\n    \"\"\"\r\n\r\n    def test_match_hashes(self) -> None:\r\n        import hashlib\r\n\r\n        msg = bytes(\"Test String\", \"utf-8\")\r\n        assert SHA256(msg).hash == hashlib.sha256(msg).hexdigest()\r\n\r\n\r\ndef main() -> None:\r\n    \"\"\"\r\n    Provides option 'string' or 'file' to take input\r\n    and prints the calculated SHA-256 hash\r\n    \"\"\"\r\n\r\n    # unittest.main()\r\n\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n\r\n    parser = argparse.ArgumentParser()\r\n    parser.add_argument(\r\n        \"-s\",\r\n        \"--string\",\r\n        dest=\"input_string\",\r\n        default=\"Hello World!! Welcome to Cryptography\",\r\n        help=\"Hash the string\",\r\n    )\r\n    parser.add_argument(\r\n        \"-f\", \"--file\", dest=\"input_file\", help=\"Hash contents of a file\"\r\n    )\r\n\r\n    args = parser.parse_args()\r\n\r\n    input_string = args.input_string\r\n\r\n    # hash input should be a bytestring\r\n    if args.input_file:\r\n        with open(args.input_file, \"rb\") as f:\r\n            hash_input = f.read()\r\n    else:\r\n        hash_input = bytes(input_string, \"utf-8\")\r\n\r\n    print(SHA256(hash_input).hash)\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    main()\r\n"
  },
  {
    "path": "index.md",
    "content": "# TheAlgorithms/Python\n```{toctree}\n:maxdepth: 2\n:caption: index.md\n\n<!-- CONTRIBUTING.md must be the FIRST doc and README.md can come after. -->\nCONTRIBUTING.md\nREADME.md\nLICENSE.md\n```\n"
  },
  {
    "path": "knapsack/README.md",
    "content": "# A recursive implementation of 0-N Knapsack Problem\n\nThis overview is taken from:\n\n    https://en.wikipedia.org/wiki/Knapsack_problem\n\n---\n\n## Overview\n\nThe 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.\n\nThe 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.\n\n---\n\n## Documentation\n\nThis module uses docstrings to enable the use of Python's in-built `help(...)` function.\nFor instance, try `help(Vector)`, `help(unit_basis_vector)`, and `help(CLASSNAME.METHODNAME)`.\n\n---\n\n## Usage\n\nImport the module `knapsack.py` from the **.** directory into your project.\n\n---\n\n## Tests\n\n`.` contains Python unit tests which can be run with `python3 -m unittest -v`.\n"
  },
  {
    "path": "knapsack/__init__.py",
    "content": ""
  },
  {
    "path": "knapsack/greedy_knapsack.py",
    "content": "# To get an insight into Greedy Algorithm through the Knapsack problem\n\n\n\"\"\"\nA shopkeeper has bags of wheat that each have different weights and different profits.\neg.\nprofit 5 8 7 1 12 3 4\nweight 2 7 1 6  4 2 5\nmax_weight 100\n\nConstraints:\nmax_weight > 0\nprofit[i] >= 0\nweight[i] >= 0\nCalculate the maximum profit that the shopkeeper can make given maxmum weight that can\nbe carried.\n\"\"\"\n\n\ndef calc_profit(profit: list, weight: list, max_weight: int) -> int:\n    \"\"\"\n    Function description is as follows-\n    :param profit: Take a list of profits\n    :param weight: Take a list of weight if bags corresponding to the profits\n    :param max_weight: Maximum weight that could be carried\n    :return: Maximum expected gain\n\n    >>> calc_profit([1, 2, 3], [3, 4, 5], 15)\n    6\n    >>> calc_profit([10, 9 , 8], [3 ,4 , 5], 25)\n    27\n    \"\"\"\n    if len(profit) != len(weight):\n        raise ValueError(\"The length of profit and weight must be same.\")\n    if max_weight <= 0:\n        raise ValueError(\"max_weight must greater than zero.\")\n    if any(p < 0 for p in profit):\n        raise ValueError(\"Profit can not be negative.\")\n    if any(w < 0 for w in weight):\n        raise ValueError(\"Weight can not be negative.\")\n\n    # List created to store profit gained for the 1kg in case of each weight\n    # respectively.  Calculate and append profit/weight for each element.\n    profit_by_weight = [p / w for p, w in zip(profit, weight)]\n\n    # Creating a copy of the list and sorting profit/weight in ascending order\n    sorted_profit_by_weight = sorted(profit_by_weight)\n\n    # declaring useful variables\n    length = len(sorted_profit_by_weight)\n    limit = 0\n    gain = 0\n    i = 0\n\n    # loop till the total weight do not reach max limit e.g. 15 kg and till i<length\n    while limit <= max_weight and i < length:\n        # flag value for encountered greatest element in sorted_profit_by_weight\n        biggest_profit_by_weight = sorted_profit_by_weight[length - i - 1]\n        \"\"\"\n        Calculate the index of the biggest_profit_by_weight in profit_by_weight list.\n        This will give the index of the first encountered element which is same as of\n        biggest_profit_by_weight.  There may be one or more values same as that of\n        biggest_profit_by_weight but index always encounter the very first element\n        only.  To curb this alter the values in profit_by_weight once they are used\n        here it is done to -1 because neither profit nor weight can be in negative.\n        \"\"\"\n        index = profit_by_weight.index(biggest_profit_by_weight)\n        profit_by_weight[index] = -1\n\n        # check if the weight encountered is less than the total weight\n        # encountered before.\n        if max_weight - limit >= weight[index]:\n            limit += weight[index]\n            # Adding profit gained for the given weight 1 ===\n            # weight[index]/weight[index]\n            gain += 1 * profit[index]\n        else:\n            # Since the weight encountered is greater than limit, therefore take the\n            # required number of remaining kgs and calculate profit for it.\n            # weight remaining / weight[index]\n            gain += (max_weight - limit) / weight[index] * profit[index]\n            break\n        i += 1\n    return gain\n\n\nif __name__ == \"__main__\":\n    print(\n        \"Input profits, weights, and then max_weight (all positive ints) separated by \"\n        \"spaces.\"\n    )\n\n    profit = [int(x) for x in input(\"Input profits separated by spaces: \").split()]\n    weight = [int(x) for x in input(\"Input weights separated by spaces: \").split()]\n    max_weight = int(input(\"Max weight allowed: \"))\n\n    # Function Call\n    calc_profit(profit, weight, max_weight)\n"
  },
  {
    "path": "knapsack/knapsack.py",
    "content": "\"\"\"A recursive implementation of 0-N Knapsack Problem\nhttps://en.wikipedia.org/wiki/Knapsack_problem\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom functools import lru_cache\n\n\ndef knapsack(\n    capacity: int,\n    weights: list[int],\n    values: list[int],\n    counter: int,\n    allow_repetition=False,\n) -> int:\n    \"\"\"\n    Returns the maximum value that can be put in a knapsack of a capacity cap,\n    whereby each weight w has a specific value val\n    with option to allow repetitive selection of items\n\n    >>> cap = 50\n    >>> val = [60, 100, 120]\n    >>> w = [10, 20, 30]\n    >>> c = len(val)\n    >>> knapsack(cap, w, val, c)\n    220\n\n    Given the repetition is NOT allowed,\n    the result is 220 cause the values of 100 and 120 got the weight of 50\n    which is the limit of the capacity.\n    >>> knapsack(cap, w, val, c, True)\n    300\n\n    Given the repetition is allowed,\n    the result is 300 cause the values of 60*5 (pick 5 times)\n    got the weight of 10*5 which is the limit of the capacity.\n    \"\"\"\n\n    @lru_cache\n    def knapsack_recur(capacity: int, counter: int) -> int:\n        # Base Case\n        if counter == 0 or capacity == 0:\n            return 0\n\n        # If weight of the nth item is more than Knapsack of capacity,\n        #   then this item cannot be included in the optimal solution,\n        # else return the maximum of two cases:\n        #   (1) nth item included only once (0-1), if allow_repetition is False\n        #       nth item included one or more times (0-N), if allow_repetition is True\n        #   (2) not included\n        if weights[counter - 1] > capacity:\n            return knapsack_recur(capacity, counter - 1)\n        else:\n            left_capacity = capacity - weights[counter - 1]\n            new_value_included = values[counter - 1] + knapsack_recur(\n                left_capacity, counter - 1 if not allow_repetition else counter\n            )\n            without_new_value = knapsack_recur(capacity, counter - 1)\n            return max(new_value_included, without_new_value)\n\n    return knapsack_recur(capacity, counter)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "knapsack/recursive_approach_knapsack.py",
    "content": "# To get an insight into naive recursive way to solve the Knapsack problem\n\n\n\"\"\"\nA shopkeeper has bags of wheat that each have different weights and different profits.\neg.\nno_of_items 4\nprofit 5 4 8 6\nweight 1 2 4 5\nmax_weight 5\nConstraints:\nmax_weight > 0\nprofit[i] >= 0\nweight[i] >= 0\nCalculate the maximum profit that the shopkeeper can make given maxmum weight that can\nbe carried.\n\"\"\"\n\n\ndef knapsack(\n    weights: list, values: list, number_of_items: int, max_weight: int, index: int\n) -> int:\n    \"\"\"\n    Function description is as follows-\n    :param weights: Take a list of weights\n    :param values: Take a list of profits corresponding to the weights\n    :param number_of_items: number of items available to pick from\n    :param max_weight: Maximum weight that could be carried\n    :param index: the element we are looking at\n    :return: Maximum expected gain\n    >>> knapsack([1, 2, 4, 5], [5, 4, 8, 6], 4, 5, 0)\n    13\n    >>> knapsack([3 ,4 , 5], [10, 9 , 8], 3, 25, 0)\n    27\n    \"\"\"\n    if index == number_of_items:\n        return 0\n    ans1 = 0\n    ans2 = 0\n    ans1 = knapsack(weights, values, number_of_items, max_weight, index + 1)\n    if weights[index] <= max_weight:\n        ans2 = values[index] + knapsack(\n            weights, values, number_of_items, max_weight - weights[index], index + 1\n        )\n    return max(ans1, ans2)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "knapsack/tests/__init__.py",
    "content": ""
  },
  {
    "path": "knapsack/tests/test_greedy_knapsack.py",
    "content": "import unittest\n\nimport pytest\n\nfrom knapsack import greedy_knapsack as kp\n\n\nclass TestClass(unittest.TestCase):\n    \"\"\"\n    Test cases for knapsack\n    \"\"\"\n\n    def test_sorted(self):\n        \"\"\"\n        kp.calc_profit takes the required argument (profit, weight, max_weight)\n        and returns whether the answer matches to the expected ones\n        \"\"\"\n        profit = [10, 20, 30, 40, 50, 60]\n        weight = [2, 4, 6, 8, 10, 12]\n        max_weight = 100\n        assert kp.calc_profit(profit, weight, max_weight) == 210\n\n    def test_negative_max_weight(self):\n        \"\"\"\n        Returns ValueError for any negative max_weight value\n        :return: ValueError\n        \"\"\"\n        # profit = [10, 20, 30, 40, 50, 60]\n        # weight = [2, 4, 6, 8, 10, 12]\n        # max_weight = -15\n        pytest.raises(ValueError, match=r\"max_weight must greater than zero.\")\n\n    def test_negative_profit_value(self):\n        \"\"\"\n        Returns ValueError for any negative profit value in the list\n        :return: ValueError\n        \"\"\"\n        # profit = [10, -20, 30, 40, 50, 60]\n        # weight = [2, 4, 6, 8, 10, 12]\n        # max_weight = 15\n        pytest.raises(ValueError, match=r\"Weight can not be negative.\")\n\n    def test_negative_weight_value(self):\n        \"\"\"\n        Returns ValueError for any negative weight value in the list\n        :return: ValueError\n        \"\"\"\n        # profit = [10, 20, 30, 40, 50, 60]\n        # weight = [2, -4, 6, -8, 10, 12]\n        # max_weight = 15\n        pytest.raises(ValueError, match=r\"Profit can not be negative.\")\n\n    def test_null_max_weight(self):\n        \"\"\"\n        Returns ValueError for any zero max_weight value\n        :return: ValueError\n        \"\"\"\n        # profit = [10, 20, 30, 40, 50, 60]\n        # weight = [2, 4, 6, 8, 10, 12]\n        # max_weight = null\n        pytest.raises(ValueError, match=r\"max_weight must greater than zero.\")\n\n    def test_unequal_list_length(self):\n        \"\"\"\n        Returns IndexError if length of lists (profit and weight) are unequal.\n        :return: IndexError\n        \"\"\"\n        # profit = [10, 20, 30, 40, 50]\n        # weight = [2, 4, 6, 8, 10, 12]\n        # max_weight = 100\n        pytest.raises(\n            IndexError, match=r\"The length of profit and weight must be same.\"\n        )\n\n\nif __name__ == \"__main__\":\n    unittest.main()\n"
  },
  {
    "path": "knapsack/tests/test_knapsack.py",
    "content": "\"\"\"\nCreated on Fri Oct 16 09:31:07 2020\n\n@author: Dr. Tobias Schröder\n@license: MIT-license\n\nThis file contains the test-suite for the knapsack problem.\n\"\"\"\n\nimport unittest\n\nfrom knapsack import knapsack as k\n\n\nclass Test(unittest.TestCase):\n    def test_base_case(self):\n        \"\"\"\n        test for the base case\n        \"\"\"\n        cap = 0\n        val = [0]\n        w = [0]\n        c = len(val)\n        assert k.knapsack(cap, w, val, c) == 0\n\n        val = [60]\n        w = [10]\n        c = len(val)\n        assert k.knapsack(cap, w, val, c) == 0\n\n    def test_easy_case(self):\n        \"\"\"\n        test for the easy case\n        \"\"\"\n        cap = 3\n        val = [1, 2, 3]\n        w = [3, 2, 1]\n        c = len(val)\n        assert k.knapsack(cap, w, val, c) == 5\n\n    def test_knapsack(self):\n        \"\"\"\n        test for the knapsack\n        \"\"\"\n        cap = 50\n        val = [60, 100, 120]\n        w = [10, 20, 30]\n        c = len(val)\n        assert k.knapsack(cap, w, val, c) == 220\n\n    def test_knapsack_repetition(self):\n        \"\"\"\n        test for the knapsack repetition\n        \"\"\"\n        cap = 50\n        val = [60, 100, 120]\n        w = [10, 20, 30]\n        c = len(val)\n        assert k.knapsack(cap, w, val, c, True) == 300\n\n\nif __name__ == \"__main__\":\n    unittest.main()\n"
  },
  {
    "path": "linear_algebra/README.md",
    "content": "# Linear algebra library for Python\n\nThis module contains classes and functions for doing linear algebra.\n\n---\n\n## Overview\n\n### class Vector\n-\n    - This class represents a vector of arbitrary size and related operations.\n\n    **Overview of the methods:**\n\n    - constructor(components) : init the vector\n    - set(components) : changes the vector components.\n    - \\_\\_str\\_\\_() : toString method\n    - component(i): gets the i-th component (0-indexed)\n    - \\_\\_len\\_\\_() : gets the size / length of the vector (number of components)\n    - euclidean_length() : returns the eulidean length of the vector\n    - operator + : vector addition\n    - operator - : vector subtraction\n    - operator * : scalar multiplication and dot product\n    - copy() : copies this vector and returns it\n    - change_component(pos,value) : changes the specified component\n\n- function zero_vector(dimension)\n    - returns a zero vector of 'dimension'\n- function unit_basis_vector(dimension, pos)\n    - returns a unit basis vector with a one at index 'pos' (0-indexed)\n- function axpy(scalar, vector1, vector2)\n    - computes the axpy operation\n- function random_vector(N, a, b)\n    - returns a random vector of size N, with random integer components between 'a' and 'b' inclusive\n\n### class Matrix\n-\n    - This class represents a matrix of arbitrary size and operations on it.\n\n    **Overview of the methods:**\n\n    -  \\_\\_str\\_\\_() : returns a string representation\n    - operator * : implements the matrix vector multiplication\n                   implements the matrix-scalar multiplication.\n    - change_component(x, y, value) : changes the specified component.\n    - component(x, y) : returns the specified component.\n    - width() : returns the width of the matrix\n    - height() : returns the height of the matrix\n    - determinant() : returns the determinant of the matrix if it is square\n    - operator + : implements the matrix-addition.\n    - operator - : implements the matrix-subtraction\n\n- function square_zero_matrix(N)\n    - returns a square zero-matrix of dimension NxN\n- function random_matrix(W, H, a, b)\n    - returns a random matrix WxH with integer components between 'a' and 'b' inclusive\n---\n\n## Documentation\n\nThis module uses docstrings to enable the use of Python's in-built `help(...)` function.\nFor instance, try `help(Vector)`, `help(unit_basis_vector)`, and `help(CLASSNAME.METHODNAME)`.\n\n---\n\n## Usage\n\nImport the module `lib.py` from the **src** directory into your project.\nAlternatively, you can directly use the Python bytecode file `lib.pyc`.\n\n---\n\n## Tests\n\n`src/tests.py` contains Python unit tests which can be run with `python3 -m unittest -v`.\n"
  },
  {
    "path": "linear_algebra/__init__.py",
    "content": ""
  },
  {
    "path": "linear_algebra/gaussian_elimination.py",
    "content": "\"\"\"\n| Gaussian elimination method for solving a system of linear equations.\n| Gaussian elimination - https://en.wikipedia.org/wiki/Gaussian_elimination\n\"\"\"\n\nimport numpy as np\nfrom numpy import float64\nfrom numpy.typing import NDArray\n\n\ndef retroactive_resolution(\n    coefficients: NDArray[float64], vector: NDArray[float64]\n) -> NDArray[float64]:\n    \"\"\"\n    This function performs a retroactive linear system resolution\n    for triangular matrix\n\n    Examples:\n        1.\n            * 2x1 + 2x2 - 1x3 = 5\n            * 0x1 - 2x2 - 1x3 = -7\n            * 0x1 + 0x2 + 5x3 = 15\n        2.\n            * 2x1 + 2x2 = -1\n            * 0x1 - 2x2 = -1\n\n    >>> gaussian_elimination([[2, 2, -1], [0, -2, -1], [0, 0, 5]], [[5], [-7], [15]])\n    array([[2.],\n           [2.],\n           [3.]])\n    >>> gaussian_elimination([[2, 2], [0, -2]], [[-1], [-1]])\n    array([[-1. ],\n           [ 0.5]])\n    \"\"\"\n\n    rows, _columns = np.shape(coefficients)\n\n    x: NDArray[float64] = np.zeros((rows, 1), dtype=float)\n    for row in reversed(range(rows)):\n        total = np.dot(coefficients[row, row + 1 :], x[row + 1 :])\n        x[row, 0] = (vector[row][0] - total[0]) / coefficients[row, row]\n\n    return x\n\n\ndef gaussian_elimination(\n    coefficients: NDArray[float64], vector: NDArray[float64]\n) -> NDArray[float64]:\n    \"\"\"\n    This function performs Gaussian elimination method\n\n    Examples:\n        1.\n            * 1x1 - 4x2 - 2x3 = -2\n            * 5x1 + 2x2 - 2x3 = -3\n            * 1x1 - 1x2 + 0x3 = 4\n        2.\n            * 1x1 + 2x2 = 5\n            * 5x1 + 2x2 = 5\n\n    >>> gaussian_elimination([[1, -4, -2], [5, 2, -2], [1, -1, 0]], [[-2], [-3], [4]])\n    array([[ 2.3 ],\n           [-1.7 ],\n           [ 5.55]])\n    >>> gaussian_elimination([[1, 2], [5, 2]], [[5], [5]])\n    array([[0. ],\n           [2.5]])\n    \"\"\"\n    # coefficients must to be a square matrix so we need to check first\n    rows, columns = np.shape(coefficients)\n    if rows != columns:\n        return np.array((), dtype=float)\n\n    # augmented matrix\n    augmented_mat: NDArray[float64] = np.concatenate((coefficients, vector), axis=1)\n    augmented_mat = augmented_mat.astype(\"float64\")\n\n    # scale the matrix leaving it triangular\n    for row in range(rows - 1):\n        pivot = augmented_mat[row, row]\n        for col in range(row + 1, columns):\n            factor = augmented_mat[col, row] / pivot\n            augmented_mat[col, :] -= factor * augmented_mat[row, :]\n\n    x = retroactive_resolution(\n        augmented_mat[:, 0:columns], augmented_mat[:, columns : columns + 1]\n    )\n\n    return x\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "linear_algebra/jacobi_iteration_method.py",
    "content": "\"\"\"\nJacobi Iteration Method - https://en.wikipedia.org/wiki/Jacobi_method\n\"\"\"\n\nfrom __future__ import annotations\n\nimport numpy as np\nfrom numpy import float64\nfrom numpy.typing import NDArray\n\n\n# Method to find solution of system of linear equations\ndef jacobi_iteration_method(\n    coefficient_matrix: NDArray[float64],\n    constant_matrix: NDArray[float64],\n    init_val: list[float],\n    iterations: int,\n) -> list[float]:\n    \"\"\"\n    Jacobi Iteration Method:\n    An iterative algorithm to determine the solutions of strictly diagonally dominant\n    system of linear equations\n\n    4x1 +  x2 +  x3 =  2\n     x1 + 5x2 + 2x3 = -6\n     x1 + 2x2 + 4x3 = -4\n\n    x_init = [0.5, -0.5 , -0.5]\n\n    Examples:\n\n    >>> coefficient = np.array([[4, 1, 1], [1, 5, 2], [1, 2, 4]])\n    >>> constant = np.array([[2], [-6], [-4]])\n    >>> init_val = [0.5, -0.5, -0.5]\n    >>> iterations = 3\n    >>> jacobi_iteration_method(coefficient, constant, init_val, iterations)\n    [0.909375, -1.14375, -0.7484375]\n\n\n    >>> coefficient = np.array([[4, 1, 1], [1, 5, 2]])\n    >>> constant = np.array([[2], [-6], [-4]])\n    >>> init_val = [0.5, -0.5, -0.5]\n    >>> iterations = 3\n    >>> jacobi_iteration_method(coefficient, constant, init_val, iterations)\n    Traceback (most recent call last):\n        ...\n    ValueError: Coefficient matrix dimensions must be nxn but received 2x3\n\n    >>> coefficient = np.array([[4, 1, 1], [1, 5, 2], [1, 2, 4]])\n    >>> constant = np.array([[2], [-6]])\n    >>> init_val = [0.5, -0.5, -0.5]\n    >>> iterations = 3\n    >>> jacobi_iteration_method(\n    ...     coefficient, constant, init_val, iterations\n    ... )  # doctest: +NORMALIZE_WHITESPACE\n    Traceback (most recent call last):\n        ...\n    ValueError: Coefficient and constant matrices dimensions must be nxn and nx1 but\n                received 3x3 and 2x1\n\n    >>> coefficient = np.array([[4, 1, 1], [1, 5, 2], [1, 2, 4]])\n    >>> constant = np.array([[2], [-6], [-4]])\n    >>> init_val = [0.5, -0.5]\n    >>> iterations = 3\n    >>> jacobi_iteration_method(\n    ...     coefficient, constant, init_val, iterations\n    ... )  # doctest: +NORMALIZE_WHITESPACE\n    Traceback (most recent call last):\n        ...\n    ValueError: Number of initial values must be equal to number of rows in coefficient\n                matrix but received 2 and 3\n\n    >>> coefficient = np.array([[4, 1, 1], [1, 5, 2], [1, 2, 4]])\n    >>> constant = np.array([[2], [-6], [-4]])\n    >>> init_val = [0.5, -0.5, -0.5]\n    >>> iterations = 0\n    >>> jacobi_iteration_method(coefficient, constant, init_val, iterations)\n    Traceback (most recent call last):\n        ...\n    ValueError: Iterations must be at least 1\n    \"\"\"\n\n    rows1, cols1 = coefficient_matrix.shape\n    rows2, cols2 = constant_matrix.shape\n\n    if rows1 != cols1:\n        msg = f\"Coefficient matrix dimensions must be nxn but received {rows1}x{cols1}\"\n        raise ValueError(msg)\n\n    if cols2 != 1:\n        msg = f\"Constant matrix must be nx1 but received {rows2}x{cols2}\"\n        raise ValueError(msg)\n\n    if rows1 != rows2:\n        msg = (\n            \"Coefficient and constant matrices dimensions must be nxn and nx1 but \"\n            f\"received {rows1}x{cols1} and {rows2}x{cols2}\"\n        )\n        raise ValueError(msg)\n\n    if len(init_val) != rows1:\n        msg = (\n            \"Number of initial values must be equal to number of rows in coefficient \"\n            f\"matrix but received {len(init_val)} and {rows1}\"\n        )\n        raise ValueError(msg)\n\n    if iterations <= 0:\n        raise ValueError(\"Iterations must be at least 1\")\n\n    table: NDArray[float64] = np.concatenate(\n        (coefficient_matrix, constant_matrix), axis=1\n    )\n\n    rows, _cols = table.shape\n\n    strictly_diagonally_dominant(table)\n\n    \"\"\"\n    # Iterates the whole matrix for given number of times\n    for _ in range(iterations):\n        new_val = []\n        for row in range(rows):\n            temp = 0\n            for col in range(cols):\n                if col == row:\n                    denom = table[row][col]\n                elif col == cols - 1:\n                    val = table[row][col]\n                else:\n                    temp += (-1) * table[row][col] * init_val[col]\n            temp = (temp + val) / denom\n            new_val.append(temp)\n        init_val = new_val\n    \"\"\"\n\n    # denominator - a list of values along the diagonal\n    denominator = np.diag(coefficient_matrix)\n\n    # val_last - values of the last column of the table array\n    val_last = table[:, -1]\n\n    # masks - boolean mask of all strings without diagonal\n    # elements array coefficient_matrix\n    masks = ~np.eye(coefficient_matrix.shape[0], dtype=bool)\n\n    # no_diagonals - coefficient_matrix array values without diagonal elements\n    no_diagonals = coefficient_matrix[masks].reshape(-1, rows - 1)\n\n    # Here we get 'i_col' - these are the column numbers, for each row\n    # without diagonal elements, except for the last column.\n    _i_row, i_col = np.where(masks)\n    ind = i_col.reshape(-1, rows - 1)\n\n    #'i_col' is converted to a two-dimensional list 'ind', which will be\n    # used to make selections from 'init_val' ('arr' array see below).\n\n    # Iterates the whole matrix for given number of times\n    for _ in range(iterations):\n        arr = np.take(init_val, ind)\n        sum_product_rows = np.sum((-1) * no_diagonals * arr, axis=1)\n        new_val = (sum_product_rows + val_last) / denominator\n        init_val = new_val\n\n    return new_val.tolist()\n\n\n# Checks if the given matrix is strictly diagonally dominant\ndef strictly_diagonally_dominant(table: NDArray[float64]) -> bool:\n    \"\"\"\n    >>> table = np.array([[4, 1, 1, 2], [1, 5, 2, -6], [1, 2, 4, -4]])\n    >>> strictly_diagonally_dominant(table)\n    True\n\n    >>> table = np.array([[4, 1, 1, 2], [1, 5, 2, -6], [1, 2, 3, -4]])\n    >>> strictly_diagonally_dominant(table)\n    Traceback (most recent call last):\n        ...\n    ValueError: Coefficient matrix is not strictly diagonally dominant\n    \"\"\"\n\n    rows, cols = table.shape\n\n    is_diagonally_dominant = True\n\n    for i in range(rows):\n        total = 0\n        for j in range(cols - 1):\n            if i == j:\n                continue\n            else:\n                total += table[i][j]\n\n        if table[i][i] <= total:\n            raise ValueError(\"Coefficient matrix is not strictly diagonally dominant\")\n\n    return is_diagonally_dominant\n\n\n# Test Cases\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "linear_algebra/lu_decomposition.py",
    "content": "\"\"\"\nLower-upper (LU) decomposition factors a matrix as a product of a lower\ntriangular matrix and an upper triangular matrix. A square matrix has an LU\ndecomposition under the following conditions:\n\n    - If the matrix is invertible, then it has an LU decomposition if and only\n      if all of its leading principal minors are non-zero (see\n      https://en.wikipedia.org/wiki/Minor_(linear_algebra) for an explanation of\n      leading principal minors of a matrix).\n    - If the matrix is singular (i.e., not invertible) and it has a rank of k\n      (i.e., it has k linearly independent columns), then it has an LU\n      decomposition if its first k leading principal minors are non-zero.\n\nThis algorithm will simply attempt to perform LU decomposition on any square\nmatrix and raise an error if no such decomposition exists.\n\nReference: https://en.wikipedia.org/wiki/LU_decomposition\n\"\"\"\n\nfrom __future__ import annotations\n\nimport numpy as np\n\n\ndef lower_upper_decomposition(table: np.ndarray) -> tuple[np.ndarray, np.ndarray]:\n    \"\"\"\n    Perform LU decomposition on a given matrix and raises an error if the matrix\n    isn't square or if no such decomposition exists\n\n    >>> matrix = np.array([[2, -2, 1], [0, 1, 2], [5, 3, 1]])\n    >>> lower_mat, upper_mat = lower_upper_decomposition(matrix)\n    >>> lower_mat\n    array([[1. , 0. , 0. ],\n           [0. , 1. , 0. ],\n           [2.5, 8. , 1. ]])\n    >>> upper_mat\n    array([[  2. ,  -2. ,   1. ],\n           [  0. ,   1. ,   2. ],\n           [  0. ,   0. , -17.5]])\n\n    >>> matrix = np.array([[4, 3], [6, 3]])\n    >>> lower_mat, upper_mat = lower_upper_decomposition(matrix)\n    >>> lower_mat\n    array([[1. , 0. ],\n           [1.5, 1. ]])\n    >>> upper_mat\n    array([[ 4. ,  3. ],\n           [ 0. , -1.5]])\n\n    >>> # Matrix is not square\n    >>> matrix = np.array([[2, -2, 1], [0, 1, 2]])\n    >>> lower_mat, upper_mat = lower_upper_decomposition(matrix)\n    Traceback (most recent call last):\n        ...\n    ValueError: 'table' has to be of square shaped array but got a 2x3 array:\n    [[ 2 -2  1]\n     [ 0  1  2]]\n\n    >>> # Matrix is invertible, but its first leading principal minor is 0\n    >>> matrix = np.array([[0, 1], [1, 0]])\n    >>> lower_mat, upper_mat = lower_upper_decomposition(matrix)\n    Traceback (most recent call last):\n    ...\n    ArithmeticError: No LU decomposition exists\n\n    >>> # Matrix is singular, but its first leading principal minor is 1\n    >>> matrix = np.array([[1, 0], [1, 0]])\n    >>> lower_mat, upper_mat = lower_upper_decomposition(matrix)\n    >>> lower_mat\n    array([[1., 0.],\n           [1., 1.]])\n    >>> upper_mat\n    array([[1., 0.],\n           [0., 0.]])\n\n    >>> # Matrix is singular, but its first leading principal minor is 0\n    >>> matrix = np.array([[0, 1], [0, 1]])\n    >>> lower_mat, upper_mat = lower_upper_decomposition(matrix)\n    Traceback (most recent call last):\n    ...\n    ArithmeticError: No LU decomposition exists\n    \"\"\"\n    # Ensure that table is a square array\n    rows, columns = np.shape(table)\n    if rows != columns:\n        msg = (\n            \"'table' has to be of square shaped array but got a \"\n            f\"{rows}x{columns} array:\\n{table}\"\n        )\n        raise ValueError(msg)\n\n    lower = np.zeros((rows, columns))\n    upper = np.zeros((rows, columns))\n\n    # in 'total', the necessary data is extracted through slices\n    # and the sum of the products is obtained.\n\n    for i in range(columns):\n        for j in range(i):\n            total = np.sum(lower[i, :i] * upper[:i, j])\n            if upper[j][j] == 0:\n                raise ArithmeticError(\"No LU decomposition exists\")\n            lower[i][j] = (table[i][j] - total) / upper[j][j]\n        lower[i][i] = 1\n        for j in range(i, columns):\n            total = np.sum(lower[i, :i] * upper[:i, j])\n            upper[i][j] = table[i][j] - total\n    return lower, upper\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "linear_algebra/matrix_inversion.py",
    "content": "import numpy as np\n\n\ndef invert_matrix(matrix: list[list[float]]) -> list[list[float]]:\n    \"\"\"\n    Returns the inverse of a square matrix using NumPy.\n\n    Parameters:\n    matrix (list[list[float]]): A square matrix.\n\n    Returns:\n    list[list[float]]: Inverted matrix if invertible, else raises error.\n\n    >>> invert_matrix([[4.0, 7.0], [2.0, 6.0]])\n    [[0.6000000000000001, -0.7000000000000001], [-0.2, 0.4]]\n    >>> invert_matrix([[1.0, 2.0], [0.0, 0.0]])\n    Traceback (most recent call last):\n        ...\n    ValueError: Matrix is not invertible\n    \"\"\"\n    np_matrix = np.array(matrix)\n\n    try:\n        inv_matrix = np.linalg.inv(np_matrix)\n    except np.linalg.LinAlgError:\n        raise ValueError(\"Matrix is not invertible\")\n\n    return inv_matrix.tolist()\n\n\nif __name__ == \"__main__\":\n    mat = [[4.0, 7.0], [2.0, 6.0]]\n    print(\"Original Matrix:\")\n    print(mat)\n    print(\"Inverted Matrix:\")\n    print(invert_matrix(mat))\n"
  },
  {
    "path": "linear_algebra/src/__init__.py",
    "content": ""
  },
  {
    "path": "linear_algebra/src/conjugate_gradient.py",
    "content": "\"\"\"\nResources:\n- https://en.wikipedia.org/wiki/Conjugate_gradient_method\n- https://en.wikipedia.org/wiki/Definite_symmetric_matrix\n\"\"\"\n\nfrom typing import Any\n\nimport numpy as np\n\n\ndef _is_matrix_spd(matrix: np.ndarray) -> bool:\n    \"\"\"\n    Returns True if input matrix is symmetric positive definite.\n    Returns False otherwise.\n\n    For a matrix to be SPD, all eigenvalues must be positive.\n\n    >>> import numpy as np\n    >>> matrix = np.array([\n    ... [4.12401784, -5.01453636, -0.63865857],\n    ... [-5.01453636, 12.33347422, -3.40493586],\n    ... [-0.63865857, -3.40493586,  5.78591885]])\n    >>> _is_matrix_spd(matrix)\n    True\n    >>> matrix = np.array([\n    ... [0.34634879,  1.96165514,  2.18277744],\n    ... [0.74074469, -1.19648894, -1.34223498],\n    ... [-0.7687067 ,  0.06018373, -1.16315631]])\n    >>> _is_matrix_spd(matrix)\n    False\n    \"\"\"\n    # Ensure matrix is square.\n    assert np.shape(matrix)[0] == np.shape(matrix)[1]\n\n    # If matrix not symmetric, exit right away.\n    if np.allclose(matrix, matrix.T) is False:\n        return False\n\n    # Get eigenvalues and eignevectors for a symmetric matrix.\n    eigen_values, _ = np.linalg.eigh(matrix)\n\n    # Check sign of all eigenvalues.\n    # np.all returns a value of type np.bool_\n    return bool(np.all(eigen_values > 0))\n\n\ndef _create_spd_matrix(dimension: int) -> Any:\n    \"\"\"\n    Returns a symmetric positive definite matrix given a dimension.\n\n    Input:\n    dimension gives the square matrix dimension.\n\n    Output:\n    spd_matrix is an diminesion x dimensions symmetric positive definite (SPD) matrix.\n\n    >>> import numpy as np\n    >>> dimension = 3\n    >>> spd_matrix = _create_spd_matrix(dimension)\n    >>> _is_matrix_spd(spd_matrix)\n    True\n    \"\"\"\n    rng = np.random.default_rng()\n    random_matrix = rng.normal(size=(dimension, dimension))\n    spd_matrix = np.dot(random_matrix, random_matrix.T)\n    assert _is_matrix_spd(spd_matrix)\n    return spd_matrix\n\n\ndef conjugate_gradient(\n    spd_matrix: np.ndarray,\n    load_vector: np.ndarray,\n    max_iterations: int = 1000,\n    tol: float = 1e-8,\n) -> Any:\n    \"\"\"\n    Returns solution to the linear system np.dot(spd_matrix, x) = b.\n\n    Input:\n    spd_matrix is an NxN Symmetric Positive Definite (SPD) matrix.\n    load_vector is an Nx1 vector.\n\n    Output:\n    x is an Nx1 vector that is the solution vector.\n\n    >>> import numpy as np\n    >>> spd_matrix = np.array([\n    ... [8.73256573, -5.02034289, -2.68709226],\n    ... [-5.02034289,  3.78188322,  0.91980451],\n    ... [-2.68709226,  0.91980451,  1.94746467]])\n    >>> b = np.array([\n    ... [-5.80872761],\n    ... [ 3.23807431],\n    ... [ 1.95381422]])\n    >>> conjugate_gradient(spd_matrix, b)\n    array([[-0.63114139],\n           [-0.01561498],\n           [ 0.13979294]])\n    \"\"\"\n    # Ensure proper dimensionality.\n    assert np.shape(spd_matrix)[0] == np.shape(spd_matrix)[1]\n    assert np.shape(load_vector)[0] == np.shape(spd_matrix)[0]\n    assert _is_matrix_spd(spd_matrix)\n\n    # Initialize solution guess, residual, search direction.\n    x0 = np.zeros((np.shape(load_vector)[0], 1))\n    r0 = np.copy(load_vector)\n    p0 = np.copy(r0)\n\n    # Set initial errors in solution guess and residual.\n    error_residual = 1e9\n    error_x_solution = 1e9\n    error = 1e9\n\n    # Set iteration counter to threshold number of iterations.\n    iterations = 0\n\n    while error > tol:\n        # Save this value so we only calculate the matrix-vector product once.\n        w = np.dot(spd_matrix, p0)\n\n        # The main algorithm.\n\n        # Update search direction magnitude.\n        alpha = np.dot(r0.T, r0) / np.dot(p0.T, w)\n        # Update solution guess.\n        x = x0 + alpha * p0\n        # Calculate new residual.\n        r = r0 - alpha * w\n        # Calculate new Krylov subspace scale.\n        beta = np.dot(r.T, r) / np.dot(r0.T, r0)\n        # Calculate new A conjuage search direction.\n        p = r + beta * p0\n\n        # Calculate errors.\n        error_residual = np.linalg.norm(r - r0)\n        error_x_solution = np.linalg.norm(x - x0)\n        error = np.maximum(error_residual, error_x_solution)\n\n        # Update variables.\n        x0 = np.copy(x)\n        r0 = np.copy(r)\n        p0 = np.copy(p)\n\n        # Update number of iterations.\n        iterations += 1\n        if iterations > max_iterations:\n            break\n\n    return x\n\n\ndef test_conjugate_gradient() -> None:\n    \"\"\"\n    >>> test_conjugate_gradient()  # self running tests\n    \"\"\"\n    # Create linear system with SPD matrix and known solution x_true.\n    dimension = 3\n    spd_matrix = _create_spd_matrix(dimension)\n    rng = np.random.default_rng()\n    x_true = rng.normal(size=(dimension, 1))\n    b = np.dot(spd_matrix, x_true)\n\n    # Numpy solution.\n    x_numpy = np.linalg.solve(spd_matrix, b)\n\n    # Our implementation.\n    x_conjugate_gradient = conjugate_gradient(spd_matrix, b)\n\n    # Ensure both solutions are close to x_true (and therefore one another).\n    assert np.linalg.norm(x_numpy - x_true) <= 1e-6\n    assert np.linalg.norm(x_conjugate_gradient - x_true) <= 1e-6\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    test_conjugate_gradient()\n"
  },
  {
    "path": "linear_algebra/src/gaussian_elimination_pivoting.py",
    "content": "import numpy as np\n\n\ndef solve_linear_system(matrix: np.ndarray) -> np.ndarray:\n    \"\"\"\n    Solve a linear system of equations using Gaussian elimination with partial pivoting\n\n    Args:\n      - `matrix`: Coefficient matrix with the last column representing the constants.\n\n    Returns:\n      - Solution vector.\n\n    Raises:\n      - ``ValueError``: If the matrix is not correct (i.e., singular).\n\n    https://courses.engr.illinois.edu/cs357/su2013/lect.htm Lecture 7\n\n    Example:\n\n    >>> A = np.array([[2, 1, -1], [-3, -1, 2], [-2, 1, 2]], dtype=float)\n    >>> B = np.array([8, -11, -3], dtype=float)\n    >>> solution = solve_linear_system(np.column_stack((A, B)))\n    >>> np.allclose(solution, np.array([2., 3., -1.]))\n    True\n    >>> solve_linear_system(np.array([[0, 0, 0]], dtype=float))\n    Traceback (most recent call last):\n        ...\n    ValueError: Matrix is not square\n    >>> solve_linear_system(np.array([[0, 0, 0], [0, 0, 0]], dtype=float))\n    Traceback (most recent call last):\n        ...\n    ValueError: Matrix is singular\n    \"\"\"\n    ab = np.copy(matrix)\n    num_of_rows = ab.shape[0]\n    num_of_columns = ab.shape[1] - 1\n    x_lst: list[float] = []\n\n    if num_of_rows != num_of_columns:\n        raise ValueError(\"Matrix is not square\")\n\n    for column_num in range(num_of_rows):\n        # Lead element search\n        for i in range(column_num, num_of_columns):\n            if abs(ab[i][column_num]) > abs(ab[column_num][column_num]):\n                ab[[column_num, i]] = ab[[i, column_num]]\n\n        # Upper triangular matrix\n        if abs(ab[column_num, column_num]) < 1e-8:\n            raise ValueError(\"Matrix is singular\")\n\n        if column_num != 0:\n            for i in range(column_num, num_of_rows):\n                ab[i, :] -= (\n                    ab[i, column_num - 1]\n                    / ab[column_num - 1, column_num - 1]\n                    * ab[column_num - 1, :]\n                )\n\n    # Find x vector (Back Substitution)\n    for column_num in range(num_of_rows - 1, -1, -1):\n        x = ab[column_num, -1] / ab[column_num, column_num]\n        x_lst.insert(0, x)\n        for i in range(column_num - 1, -1, -1):\n            ab[i, -1] -= ab[i, column_num] * x\n\n    # Return the solution vector\n    return np.asarray(x_lst)\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n\n    example_matrix = np.array(\n        [\n            [5.0, -5.0, -3.0, 4.0, -11.0],\n            [1.0, -4.0, 6.0, -4.0, -10.0],\n            [-2.0, -5.0, 4.0, -5.0, -12.0],\n            [-3.0, -3.0, 5.0, -5.0, 8.0],\n        ],\n        dtype=float,\n    )\n\n    print(f\"Matrix:\\n{example_matrix}\")\n    print(f\"{solve_linear_system(example_matrix) = }\")\n"
  },
  {
    "path": "linear_algebra/src/lib.py",
    "content": "\"\"\"\nCreated on Mon Feb 26 14:29:11 2018\n\n@author: Christian Bender\n@license: MIT-license\n\nThis module contains some useful classes and functions for dealing\nwith linear algebra in python.\n\nOverview:\n\n- class Vector\n- function zero_vector(dimension)\n- function unit_basis_vector(dimension, pos)\n- function axpy(scalar, vector1, vector2)\n- function random_vector(N, a, b)\n- class Matrix\n- function square_zero_matrix(N)\n- function random_matrix(W, H, a, b)\n\"\"\"\n\nfrom __future__ import annotations\n\nimport math\nimport random\nfrom collections.abc import Collection\nfrom typing import overload\n\n\nclass Vector:\n    \"\"\"\n    This class represents a vector of arbitrary size.\n    You need to give the vector components.\n\n    Overview of the methods:\n\n        __init__(components: Collection[float] | None): init the vector\n        __len__(): gets the size of the vector (number of components)\n        __str__(): returns a string representation\n        __add__(other: Vector): vector addition\n        __sub__(other: Vector): vector subtraction\n        __mul__(other: float): scalar multiplication\n        __mul__(other: Vector): dot product\n        copy(): copies this vector and returns it\n        component(i): gets the i-th component (0-indexed)\n        change_component(pos: int, value: float): changes specified component\n        euclidean_length(): returns the euclidean length of the vector\n        angle(other: Vector, deg: bool): returns the angle between two vectors\n    \"\"\"\n\n    def __init__(self, components: Collection[float] | None = None) -> None:\n        \"\"\"\n        input: components or nothing\n        simple constructor for init the vector\n        \"\"\"\n        if components is None:\n            components = []\n        self.__components = list(components)\n\n    def __len__(self) -> int:\n        \"\"\"\n        returns the size of the vector\n        \"\"\"\n        return len(self.__components)\n\n    def __str__(self) -> str:\n        \"\"\"\n        returns a string representation of the vector\n        \"\"\"\n        return \"(\" + \",\".join(map(str, self.__components)) + \")\"\n\n    def __add__(self, other: Vector) -> Vector:\n        \"\"\"\n        input: other vector\n        assumes: other vector has the same size\n        returns a new vector that represents the sum.\n        \"\"\"\n        size = len(self)\n        if size == len(other):\n            result = [self.__components[i] + other.component(i) for i in range(size)]\n            return Vector(result)\n        else:\n            raise Exception(\"must have the same size\")\n\n    def __sub__(self, other: Vector) -> Vector:\n        \"\"\"\n        input: other vector\n        assumes: other vector has the same size\n        returns a new vector that represents the difference.\n        \"\"\"\n        size = len(self)\n        if size == len(other):\n            result = [self.__components[i] - other.component(i) for i in range(size)]\n            return Vector(result)\n        else:  # error case\n            raise Exception(\"must have the same size\")\n\n    def __eq__(self, other: object) -> bool:\n        \"\"\"\n        performs the comparison between two vectors\n        \"\"\"\n        if not isinstance(other, Vector):\n            return NotImplemented\n        if len(self) != len(other):\n            return False\n        return all(self.component(i) == other.component(i) for i in range(len(self)))\n\n    @overload\n    def __mul__(self, other: float) -> Vector: ...\n\n    @overload\n    def __mul__(self, other: Vector) -> float: ...\n\n    def __mul__(self, other: float | Vector) -> float | Vector:\n        \"\"\"\n        mul implements the scalar multiplication\n        and the dot-product\n        \"\"\"\n        if isinstance(other, (float, int)):\n            ans = [c * other for c in self.__components]\n            return Vector(ans)\n        elif isinstance(other, Vector) and len(self) == len(other):\n            size = len(self)\n            prods = [self.__components[i] * other.component(i) for i in range(size)]\n            return sum(prods)\n        else:  # error case\n            raise Exception(\"invalid operand!\")\n\n    def copy(self) -> Vector:\n        \"\"\"\n        copies this vector and returns it.\n        \"\"\"\n        return Vector(self.__components)\n\n    def component(self, i: int) -> float:\n        \"\"\"\n        input: index (0-indexed)\n        output: the i-th component of the vector.\n        \"\"\"\n        if isinstance(i, int) and -len(self.__components) <= i < len(self.__components):\n            return self.__components[i]\n        else:\n            raise Exception(\"index out of range\")\n\n    def change_component(self, pos: int, value: float) -> None:\n        \"\"\"\n        input: an index (pos) and a value\n        changes the specified component (pos) with the\n        'value'\n        \"\"\"\n        # precondition\n        assert -len(self.__components) <= pos < len(self.__components)\n        self.__components[pos] = value\n\n    def euclidean_length(self) -> float:\n        \"\"\"\n        returns the euclidean length of the vector\n\n        >>> Vector([2, 3, 4]).euclidean_length()\n        5.385164807134504\n        >>> Vector([1]).euclidean_length()\n        1.0\n        >>> Vector([0, -1, -2, -3, 4, 5, 6]).euclidean_length()\n        9.539392014169456\n        >>> Vector([]).euclidean_length()\n        Traceback (most recent call last):\n            ...\n        Exception: Vector is empty\n        \"\"\"\n        if len(self.__components) == 0:\n            raise Exception(\"Vector is empty\")\n        squares = [c**2 for c in self.__components]\n        return math.sqrt(sum(squares))\n\n    def angle(self, other: Vector, deg: bool = False) -> float:\n        \"\"\"\n        find angle between two Vector (self, Vector)\n\n        >>> Vector([3, 4, -1]).angle(Vector([2, -1, 1]))\n        1.4906464636572374\n        >>> Vector([3, 4, -1]).angle(Vector([2, -1, 1]), deg = True)\n        85.40775111366095\n        >>> Vector([3, 4, -1]).angle(Vector([2, -1]))\n        Traceback (most recent call last):\n            ...\n        Exception: invalid operand!\n        \"\"\"\n        num = self * other\n        den = self.euclidean_length() * other.euclidean_length()\n        if deg:\n            return math.degrees(math.acos(num / den))\n        else:\n            return math.acos(num / den)\n\n\ndef zero_vector(dimension: int) -> Vector:\n    \"\"\"\n    returns a zero-vector of size 'dimension'\n    \"\"\"\n    # precondition\n    assert isinstance(dimension, int)\n    return Vector([0] * dimension)\n\n\ndef unit_basis_vector(dimension: int, pos: int) -> Vector:\n    \"\"\"\n    returns a unit basis vector with a One\n    at index 'pos' (indexing at 0)\n    \"\"\"\n    # precondition\n    assert isinstance(dimension, int)\n    assert isinstance(pos, int)\n    ans = [0] * dimension\n    ans[pos] = 1\n    return Vector(ans)\n\n\ndef axpy(scalar: float, x: Vector, y: Vector) -> Vector:\n    \"\"\"\n    input: a 'scalar' and two vectors 'x' and 'y'\n    output: a vector\n    computes the axpy operation\n    \"\"\"\n    # precondition\n    assert isinstance(x, Vector)\n    assert isinstance(y, Vector)\n    assert isinstance(scalar, (int, float))\n    return x * scalar + y\n\n\ndef random_vector(n: int, a: int, b: int) -> Vector:\n    \"\"\"\n    input: size (N) of the vector.\n           random range (a,b)\n    output: returns a random vector of size N, with\n            random integer components between 'a' and 'b'.\n    \"\"\"\n    random.seed(None)\n    ans = [random.randint(a, b) for _ in range(n)]\n    return Vector(ans)\n\n\nclass Matrix:\n    \"\"\"\n    class: Matrix\n    This class represents an arbitrary matrix.\n\n    Overview of the methods:\n\n        __init__():\n        __str__(): returns a string representation\n        __add__(other: Matrix): matrix addition\n        __sub__(other: Matrix): matrix subtraction\n        __mul__(other: float): scalar multiplication\n        __mul__(other: Vector): vector multiplication\n        height() : returns height\n        width() : returns width\n        component(x: int, y: int): returns specified component\n        change_component(x: int, y: int, value: float): changes specified component\n        minor(x: int, y: int): returns minor along (x, y)\n        cofactor(x: int, y: int): returns cofactor along (x, y)\n        determinant() : returns determinant\n    \"\"\"\n\n    def __init__(self, matrix: list[list[float]], w: int, h: int) -> None:\n        \"\"\"\n        simple constructor for initializing the matrix with components.\n        \"\"\"\n        self.__matrix = matrix\n        self.__width = w\n        self.__height = h\n\n    def __str__(self) -> str:\n        \"\"\"\n        returns a string representation of this matrix.\n        \"\"\"\n        ans = \"\"\n        for i in range(self.__height):\n            ans += \"|\"\n            for j in range(self.__width):\n                if j < self.__width - 1:\n                    ans += str(self.__matrix[i][j]) + \",\"\n                else:\n                    ans += str(self.__matrix[i][j]) + \"|\\n\"\n        return ans\n\n    def __add__(self, other: Matrix) -> Matrix:\n        \"\"\"\n        implements matrix addition.\n        \"\"\"\n        if self.__width == other.width() and self.__height == other.height():\n            matrix = []\n            for i in range(self.__height):\n                row = [\n                    self.__matrix[i][j] + other.component(i, j)\n                    for j in range(self.__width)\n                ]\n                matrix.append(row)\n            return Matrix(matrix, self.__width, self.__height)\n        else:\n            raise Exception(\"matrix must have the same dimension!\")\n\n    def __sub__(self, other: Matrix) -> Matrix:\n        \"\"\"\n        implements matrix subtraction.\n        \"\"\"\n        if self.__width == other.width() and self.__height == other.height():\n            matrix = []\n            for i in range(self.__height):\n                row = [\n                    self.__matrix[i][j] - other.component(i, j)\n                    for j in range(self.__width)\n                ]\n                matrix.append(row)\n            return Matrix(matrix, self.__width, self.__height)\n        else:\n            raise Exception(\"matrices must have the same dimension!\")\n\n    @overload\n    def __mul__(self, other: float) -> Matrix: ...\n\n    @overload\n    def __mul__(self, other: Vector) -> Vector: ...\n\n    def __mul__(self, other: float | Vector) -> Vector | Matrix:\n        \"\"\"\n        implements the matrix-vector multiplication.\n        implements the matrix-scalar multiplication\n        \"\"\"\n        if isinstance(other, Vector):  # matrix-vector\n            if len(other) == self.__width:\n                ans = zero_vector(self.__height)\n                for i in range(self.__height):\n                    prods = [\n                        self.__matrix[i][j] * other.component(j)\n                        for j in range(self.__width)\n                    ]\n                    ans.change_component(i, sum(prods))\n                return ans\n            else:\n                raise Exception(\n                    \"vector must have the same size as the \"\n                    \"number of columns of the matrix!\"\n                )\n        elif isinstance(other, (int, float)):  # matrix-scalar\n            matrix = [\n                [self.__matrix[i][j] * other for j in range(self.__width)]\n                for i in range(self.__height)\n            ]\n            return Matrix(matrix, self.__width, self.__height)\n        return None\n\n    def height(self) -> int:\n        \"\"\"\n        getter for the height\n        \"\"\"\n        return self.__height\n\n    def width(self) -> int:\n        \"\"\"\n        getter for the width\n        \"\"\"\n        return self.__width\n\n    def component(self, x: int, y: int) -> float:\n        \"\"\"\n        returns the specified (x,y) component\n        \"\"\"\n        if 0 <= x < self.__height and 0 <= y < self.__width:\n            return self.__matrix[x][y]\n        else:\n            raise Exception(\"change_component: indices out of bounds\")\n\n    def change_component(self, x: int, y: int, value: float) -> None:\n        \"\"\"\n        changes the x-y component of this matrix\n        \"\"\"\n        if 0 <= x < self.__height and 0 <= y < self.__width:\n            self.__matrix[x][y] = value\n        else:\n            raise Exception(\"change_component: indices out of bounds\")\n\n    def minor(self, x: int, y: int) -> float:\n        \"\"\"\n        returns the minor along (x, y)\n        \"\"\"\n        if self.__height != self.__width:\n            raise Exception(\"Matrix is not square\")\n        minor = self.__matrix[:x] + self.__matrix[x + 1 :]\n        for i in range(len(minor)):\n            minor[i] = minor[i][:y] + minor[i][y + 1 :]\n        return Matrix(minor, self.__width - 1, self.__height - 1).determinant()\n\n    def cofactor(self, x: int, y: int) -> float:\n        \"\"\"\n        returns the cofactor (signed minor) along (x, y)\n        \"\"\"\n        if self.__height != self.__width:\n            raise Exception(\"Matrix is not square\")\n        if 0 <= x < self.__height and 0 <= y < self.__width:\n            return (-1) ** (x + y) * self.minor(x, y)\n        else:\n            raise Exception(\"Indices out of bounds\")\n\n    def determinant(self) -> float:\n        \"\"\"\n        returns the determinant of an nxn matrix using Laplace expansion\n        \"\"\"\n        if self.__height != self.__width:\n            raise Exception(\"Matrix is not square\")\n        if self.__height < 1:\n            raise Exception(\"Matrix has no element\")\n        elif self.__height == 1:\n            return self.__matrix[0][0]\n        elif self.__height == 2:\n            return (\n                self.__matrix[0][0] * self.__matrix[1][1]\n                - self.__matrix[0][1] * self.__matrix[1][0]\n            )\n        else:\n            cofactor_prods = [\n                self.__matrix[0][y] * self.cofactor(0, y) for y in range(self.__width)\n            ]\n            return sum(cofactor_prods)\n\n\ndef square_zero_matrix(n: int) -> Matrix:\n    \"\"\"\n    returns a square zero-matrix of dimension NxN\n    \"\"\"\n    ans: list[list[float]] = [[0] * n for _ in range(n)]\n    return Matrix(ans, n, n)\n\n\ndef random_matrix(width: int, height: int, a: int, b: int) -> Matrix:\n    \"\"\"\n    returns a random matrix WxH with integer components\n    between 'a' and 'b'\n    \"\"\"\n    random.seed(None)\n    matrix: list[list[float]] = [\n        [random.randint(a, b) for _ in range(width)] for _ in range(height)\n    ]\n    return Matrix(matrix, width, height)\n"
  },
  {
    "path": "linear_algebra/src/polynom_for_points.py",
    "content": "def points_to_polynomial(coordinates: list[list[int]]) -> str:\n    \"\"\"\n    coordinates is a two dimensional matrix: [[x, y], [x, y], ...]\n    number of points you want to use\n\n    >>> points_to_polynomial([])\n    Traceback (most recent call last):\n        ...\n    ValueError: The program cannot work out a fitting polynomial.\n    >>> points_to_polynomial([[]])\n    Traceback (most recent call last):\n        ...\n    ValueError: The program cannot work out a fitting polynomial.\n    >>> points_to_polynomial([[1, 0], [2, 0], [3, 0]])\n    'f(x)=x^2*0.0+x^1*-0.0+x^0*0.0'\n    >>> points_to_polynomial([[1, 1], [2, 1], [3, 1]])\n    'f(x)=x^2*0.0+x^1*-0.0+x^0*1.0'\n    >>> points_to_polynomial([[1, 3], [2, 3], [3, 3]])\n    'f(x)=x^2*0.0+x^1*-0.0+x^0*3.0'\n    >>> points_to_polynomial([[1, 1], [2, 2], [3, 3]])\n    'f(x)=x^2*0.0+x^1*1.0+x^0*0.0'\n    >>> points_to_polynomial([[1, 1], [2, 4], [3, 9]])\n    'f(x)=x^2*1.0+x^1*-0.0+x^0*0.0'\n    >>> points_to_polynomial([[1, 3], [2, 6], [3, 11]])\n    'f(x)=x^2*1.0+x^1*-0.0+x^0*2.0'\n    >>> points_to_polynomial([[1, -3], [2, -6], [3, -11]])\n    'f(x)=x^2*-1.0+x^1*-0.0+x^0*-2.0'\n    >>> points_to_polynomial([[1, 5], [2, 2], [3, 9]])\n    'f(x)=x^2*5.0+x^1*-18.0+x^0*18.0'\n    >>> points_to_polynomial([[1, 1], [1, 2], [1, 3]])\n    'x=1'\n    >>> points_to_polynomial([[1, 1], [2, 2], [2, 2]])\n    Traceback (most recent call last):\n        ...\n    ValueError: The program cannot work out a fitting polynomial.\n    \"\"\"\n    if len(coordinates) == 0 or not all(len(pair) == 2 for pair in coordinates):\n        raise ValueError(\"The program cannot work out a fitting polynomial.\")\n\n    if len({tuple(pair) for pair in coordinates}) != len(coordinates):\n        raise ValueError(\"The program cannot work out a fitting polynomial.\")\n\n    set_x = {x for x, _ in coordinates}\n    if len(set_x) == 1:\n        return f\"x={coordinates[0][0]}\"\n\n    if len(set_x) != len(coordinates):\n        raise ValueError(\"The program cannot work out a fitting polynomial.\")\n\n    x = len(coordinates)\n\n    # put the x and x to the power values in a matrix\n    matrix: list[list[float]] = [\n        [\n            coordinates[count_of_line][0] ** (x - (count_in_line + 1))\n            for count_in_line in range(x)\n        ]\n        for count_of_line in range(x)\n    ]\n\n    # put the y values into a vector\n    vector: list[float] = [coordinates[count_of_line][1] for count_of_line in range(x)]\n\n    for count in range(x):\n        for number in range(x):\n            if count == number:\n                continue\n            fraction = matrix[number][count] / matrix[count][count]\n            for counting_columns, item in enumerate(matrix[count]):\n                # manipulating all the values in the matrix\n                matrix[number][counting_columns] -= item * fraction\n            # manipulating the values in the vector\n            vector[number] -= vector[count] * fraction\n\n    # make solutions\n    solution: list[str] = [\n        str(vector[count] / matrix[count][count]) for count in range(x)\n    ]\n\n    solved = \"f(x)=\"\n\n    for count in range(x):\n        remove_e: list[str] = solution[count].split(\"E\")\n        if len(remove_e) > 1:\n            solution[count] = f\"{remove_e[0]}*10^{remove_e[1]}\"\n        solved += f\"x^{x - (count + 1)}*{solution[count]}\"\n        if count + 1 != x:\n            solved += \"+\"\n\n    return solved\n\n\nif __name__ == \"__main__\":\n    print(points_to_polynomial([]))\n    print(points_to_polynomial([[]]))\n    print(points_to_polynomial([[1, 0], [2, 0], [3, 0]]))\n    print(points_to_polynomial([[1, 1], [2, 1], [3, 1]]))\n    print(points_to_polynomial([[1, 3], [2, 3], [3, 3]]))\n    print(points_to_polynomial([[1, 1], [2, 2], [3, 3]]))\n    print(points_to_polynomial([[1, 1], [2, 4], [3, 9]]))\n    print(points_to_polynomial([[1, 3], [2, 6], [3, 11]]))\n    print(points_to_polynomial([[1, -3], [2, -6], [3, -11]]))\n    print(points_to_polynomial([[1, 5], [2, 2], [3, 9]]))\n"
  },
  {
    "path": "linear_algebra/src/power_iteration.py",
    "content": "import numpy as np\n\n\ndef power_iteration(\n    input_matrix: np.ndarray,\n    vector: np.ndarray,\n    error_tol: float = 1e-12,\n    max_iterations: int = 100,\n) -> tuple[float, np.ndarray]:\n    \"\"\"\n    Power Iteration.\n    Find the largest eigenvalue and corresponding eigenvector\n    of matrix input_matrix given a random vector in the same space.\n    Will work so long as vector has component of largest eigenvector.\n    input_matrix must be either real or Hermitian.\n\n    Input\n    input_matrix: input matrix whose largest eigenvalue we will find.\n    Numpy array. np.shape(input_matrix) == (N,N).\n    vector: random initial vector in same space as matrix.\n    Numpy array. np.shape(vector) == (N,) or (N,1)\n\n    Output\n    largest_eigenvalue: largest eigenvalue of the matrix input_matrix.\n    Float. Scalar.\n    largest_eigenvector: eigenvector corresponding to largest_eigenvalue.\n    Numpy array. np.shape(largest_eigenvector) == (N,) or (N,1).\n\n    >>> import numpy as np\n    >>> input_matrix = np.array([\n    ... [41,  4, 20],\n    ... [ 4, 26, 30],\n    ... [20, 30, 50]\n    ... ])\n    >>> vector = np.array([41,4,20])\n    >>> power_iteration(input_matrix,vector)\n    (79.66086378788381, array([0.44472726, 0.46209842, 0.76725662]))\n    \"\"\"\n\n    # Ensure matrix is square.\n    assert np.shape(input_matrix)[0] == np.shape(input_matrix)[1]\n    # Ensure proper dimensionality.\n    assert np.shape(input_matrix)[0] == np.shape(vector)[0]\n    # Ensure inputs are either both complex or both real\n    assert np.iscomplexobj(input_matrix) == np.iscomplexobj(vector)\n    is_complex = np.iscomplexobj(input_matrix)\n    if is_complex:\n        # Ensure complex input_matrix is Hermitian\n        assert np.array_equal(input_matrix, input_matrix.conj().T)\n\n    # Set convergence to False. Will define convergence when we exceed max_iterations\n    # or when we have small changes from one iteration to next.\n\n    convergence = False\n    lambda_previous = 0\n    iterations = 0\n    error = 1e12\n\n    while not convergence:\n        # Multiple matrix by the vector.\n        w = np.dot(input_matrix, vector)\n        # Normalize the resulting output vector.\n        vector = w / np.linalg.norm(w)\n        # Find rayleigh quotient\n        # (faster than usual b/c we know vector is normalized already)\n        vector_h = vector.conj().T if is_complex else vector.T\n        lambda_ = np.dot(vector_h, np.dot(input_matrix, vector))\n\n        # Check convergence.\n        error = np.abs(lambda_ - lambda_previous) / lambda_\n        iterations += 1\n\n        if error <= error_tol or iterations >= max_iterations:\n            convergence = True\n\n        lambda_previous = lambda_\n\n    if is_complex:\n        lambda_ = np.real(lambda_)\n\n    return float(lambda_), vector\n\n\ndef test_power_iteration() -> None:\n    \"\"\"\n    >>> test_power_iteration()  # self running tests\n    \"\"\"\n    real_input_matrix = np.array([[41, 4, 20], [4, 26, 30], [20, 30, 50]])\n    real_vector = np.array([41, 4, 20])\n    complex_input_matrix = real_input_matrix.astype(np.complex128)\n    imag_matrix = np.triu(1j * complex_input_matrix, 1)\n    complex_input_matrix += imag_matrix\n    complex_input_matrix += -1 * imag_matrix.T\n    complex_vector = np.array([41, 4, 20]).astype(np.complex128)\n\n    for problem_type in [\"real\", \"complex\"]:\n        if problem_type == \"real\":\n            input_matrix = real_input_matrix\n            vector = real_vector\n        elif problem_type == \"complex\":\n            input_matrix = complex_input_matrix\n            vector = complex_vector\n\n        # Our implementation.\n        eigen_value, eigen_vector = power_iteration(input_matrix, vector)\n\n        # Numpy implementation.\n\n        # Get eigenvalues and eigenvectors using built-in numpy\n        # eigh (eigh used for symmetric or hermetian matrices).\n        eigen_values, eigen_vectors = np.linalg.eigh(input_matrix)\n        # Last eigenvalue is the maximum one.\n        eigen_value_max = eigen_values[-1]\n        # Last column in this matrix is eigenvector corresponding to largest eigenvalue.\n        eigen_vector_max = eigen_vectors[:, -1]\n\n        # Check our implementation and numpy gives close answers.\n        assert np.abs(eigen_value - eigen_value_max) <= 1e-6\n        # Take absolute values element wise of each eigenvector.\n        # as they are only unique to a minus sign.\n        assert np.linalg.norm(np.abs(eigen_vector) - np.abs(eigen_vector_max)) <= 1e-6\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    test_power_iteration()\n"
  },
  {
    "path": "linear_algebra/src/rank_of_matrix.py",
    "content": "\"\"\"\nCalculate the rank of a matrix.\n\nSee: https://en.wikipedia.org/wiki/Rank_(linear_algebra)\n\"\"\"\n\n\ndef rank_of_matrix(matrix: list[list[int | float]]) -> int:\n    \"\"\"\n    Finds the rank of a matrix.\n\n    Args:\n        `matrix`: The matrix as a list of lists.\n\n    Returns:\n        The rank of the matrix.\n\n    Example:\n\n    >>> matrix1 = [[1, 2, 3],\n    ...            [4, 5, 6],\n    ...            [7, 8, 9]]\n    >>> rank_of_matrix(matrix1)\n    2\n    >>> matrix2 = [[1, 0, 0],\n    ...            [0, 1, 0],\n    ...            [0, 0, 0]]\n    >>> rank_of_matrix(matrix2)\n    2\n    >>> matrix3 = [[1, 2, 3, 4],\n    ...            [5, 6, 7, 8],\n    ...            [9, 10, 11, 12]]\n    >>> rank_of_matrix(matrix3)\n    2\n    >>> rank_of_matrix([[2,3,-1,-1],\n    ...                [1,-1,-2,4],\n    ...                [3,1,3,-2],\n    ...                [6,3,0,-7]])\n    4\n    >>> rank_of_matrix([[2,1,-3,-6],\n    ...                [3,-3,1,2],\n    ...                [1,1,1,2]])\n    3\n    >>> rank_of_matrix([[2,-1,0],\n    ...                [1,3,4],\n    ...                [4,1,-3]])\n    3\n    >>> rank_of_matrix([[3,2,1],\n    ...                [-6,-4,-2]])\n    1\n    >>> rank_of_matrix([[],[]])\n    0\n    >>> rank_of_matrix([[1]])\n    1\n    >>> rank_of_matrix([[]])\n    0\n    \"\"\"\n\n    rows = len(matrix)\n    columns = len(matrix[0])\n    rank = min(rows, columns)\n\n    for row in range(rank):\n        # Check if diagonal element is not zero\n        if matrix[row][row] != 0:\n            # Eliminate all the elements below the diagonal\n            for col in range(row + 1, rows):\n                multiplier = matrix[col][row] / matrix[row][row]\n                for i in range(row, columns):\n                    matrix[col][i] -= multiplier * matrix[row][i]\n        else:\n            # Find a non-zero diagonal element to swap rows\n            reduce = True\n            for i in range(row + 1, rows):\n                if matrix[i][row] != 0:\n                    matrix[row], matrix[i] = matrix[i], matrix[row]\n                    reduce = False\n                    break\n            if reduce:\n                rank -= 1\n                for i in range(rows):\n                    matrix[i][row] = matrix[i][rank]\n\n            # Reduce the row pointer by one to stay on the same row\n            row -= 1\n\n    return rank\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "linear_algebra/src/rayleigh_quotient.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/Rayleigh_quotient\n\"\"\"\n\nfrom typing import Any\n\nimport numpy as np\n\n\ndef is_hermitian(matrix: np.ndarray) -> bool:\n    \"\"\"\n    Checks if a matrix is Hermitian.\n    >>> import numpy as np\n    >>> A = np.array([\n    ... [2,    2+1j, 4],\n    ... [2-1j,  3,  1j],\n    ... [4,    -1j,  1]])\n    >>> is_hermitian(A)\n    True\n    >>> A = np.array([\n    ... [2,    2+1j, 4+1j],\n    ... [2-1j,  3,  1j],\n    ... [4,    -1j,  1]])\n    >>> is_hermitian(A)\n    False\n    \"\"\"\n    return np.array_equal(matrix, matrix.conjugate().T)\n\n\ndef rayleigh_quotient(a: np.ndarray, v: np.ndarray) -> Any:\n    \"\"\"\n    Returns the Rayleigh quotient of a Hermitian matrix A and\n    vector v.\n    >>> import numpy as np\n    >>> A = np.array([\n    ... [1,  2, 4],\n    ... [2,  3,  -1],\n    ... [4, -1,  1]\n    ... ])\n    >>> v = np.array([\n    ... [1],\n    ... [2],\n    ... [3]\n    ... ])\n    >>> rayleigh_quotient(A, v)\n    array([[3.]])\n    \"\"\"\n    v_star = v.conjugate().T\n    v_star_dot = v_star.dot(a)\n    assert isinstance(v_star_dot, np.ndarray)\n    return (v_star_dot.dot(v)) / (v_star.dot(v))\n\n\ndef tests() -> None:\n    a = np.array([[2, 2 + 1j, 4], [2 - 1j, 3, 1j], [4, -1j, 1]])\n    v = np.array([[1], [2], [3]])\n    assert is_hermitian(a), f\"{a} is not hermitian.\"\n    print(rayleigh_quotient(a, v))\n\n    a = np.array([[1, 2, 4], [2, 3, -1], [4, -1, 1]])\n    assert is_hermitian(a), f\"{a} is not hermitian.\"\n    assert rayleigh_quotient(a, v) == float(3)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    tests()\n"
  },
  {
    "path": "linear_algebra/src/schur_complement.py",
    "content": "import unittest\n\nimport numpy as np\nimport pytest\n\n\ndef schur_complement(\n    mat_a: np.ndarray,\n    mat_b: np.ndarray,\n    mat_c: np.ndarray,\n    pseudo_inv: np.ndarray | None = None,\n) -> np.ndarray:\n    \"\"\"\n    Schur complement of a symmetric matrix X given as a 2x2 block matrix\n    consisting of matrices `A`, `B` and `C`.\n    Matrix `A` must be quadratic and non-singular.\n    In case `A` is singular, a pseudo-inverse may be provided using\n    the `pseudo_inv` argument.\n\n    | Link to Wiki: https://en.wikipedia.org/wiki/Schur_complement\n    | See also Convex Optimization - Boyd and Vandenberghe, A.5.5\n\n    >>> import numpy as np\n    >>> a = np.array([[1, 2], [2, 1]])\n    >>> b = np.array([[0, 3], [3, 0]])\n    >>> c = np.array([[2, 1], [6, 3]])\n    >>> schur_complement(a, b, c)\n    array([[ 5., -5.],\n           [ 0.,  6.]])\n    \"\"\"\n    shape_a = np.shape(mat_a)\n    shape_b = np.shape(mat_b)\n    shape_c = np.shape(mat_c)\n\n    if shape_a[0] != shape_b[0]:\n        msg = (\n            \"Expected the same number of rows for A and B. \"\n            f\"Instead found A of size {shape_a} and B of size {shape_b}\"\n        )\n        raise ValueError(msg)\n\n    if shape_b[1] != shape_c[1]:\n        msg = (\n            \"Expected the same number of columns for B and C. \"\n            f\"Instead found B of size {shape_b} and C of size {shape_c}\"\n        )\n        raise ValueError(msg)\n\n    a_inv = pseudo_inv\n    if a_inv is None:\n        try:\n            a_inv = np.linalg.inv(mat_a)\n        except np.linalg.LinAlgError:\n            raise ValueError(\n                \"Input matrix A is not invertible. Cannot compute Schur complement.\"\n            )\n\n    return mat_c - mat_b.T @ a_inv @ mat_b\n\n\nclass TestSchurComplement(unittest.TestCase):\n    def test_schur_complement(self) -> None:\n        a = np.array([[1, 2, 1], [2, 1, 2], [3, 2, 4]])\n        b = np.array([[0, 3], [3, 0], [2, 3]])\n        c = np.array([[2, 1], [6, 3]])\n\n        s = schur_complement(a, b, c)\n\n        input_matrix = np.block([[a, b], [b.T, c]])\n\n        det_x = np.linalg.det(input_matrix)\n        det_a = np.linalg.det(a)\n        det_s = np.linalg.det(s)\n\n        assert np.is_close(det_x, det_a * det_s)\n\n    def test_improper_a_b_dimensions(self) -> None:\n        a = np.array([[1, 2, 1], [2, 1, 2], [3, 2, 4]])\n        b = np.array([[0, 3], [3, 0], [2, 3]])\n        c = np.array([[2, 1], [6, 3]])\n\n        with pytest.raises(ValueError):\n            schur_complement(a, b, c)\n\n    def test_improper_b_c_dimensions(self) -> None:\n        a = np.array([[1, 2, 1], [2, 1, 2], [3, 2, 4]])\n        b = np.array([[0, 3], [3, 0], [2, 3]])\n        c = np.array([[2, 1, 3], [6, 3, 5]])\n\n        with pytest.raises(ValueError):\n            schur_complement(a, b, c)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    unittest.main()\n"
  },
  {
    "path": "linear_algebra/src/test_linear_algebra.py",
    "content": "\"\"\"\nCreated on Mon Feb 26 15:40:07 2018\n\n@author: Christian Bender\n@license: MIT-license\n\nThis file contains the test-suite for the linear algebra library.\n\"\"\"\n\nimport unittest\n\nimport pytest\n\nfrom .lib import (\n    Matrix,\n    Vector,\n    axpy,\n    square_zero_matrix,\n    unit_basis_vector,\n    zero_vector,\n)\n\n\nclass Test(unittest.TestCase):\n    def test_component(self) -> None:\n        \"\"\"\n        test for method component()\n        \"\"\"\n        x = Vector([1, 2, 3])\n        assert x.component(0) == 1\n        assert x.component(2) == 3\n        _ = Vector()\n\n    def test_str(self) -> None:\n        \"\"\"\n        test for method toString()\n        \"\"\"\n        x = Vector([0, 0, 0, 0, 0, 1])\n        assert str(x) == \"(0,0,0,0,0,1)\"\n\n    def test_size(self) -> None:\n        \"\"\"\n        test for method size()\n        \"\"\"\n        x = Vector([1, 2, 3, 4])\n        assert len(x) == 4\n\n    def test_euclidean_length(self) -> None:\n        \"\"\"\n        test for method euclidean_length()\n        \"\"\"\n        x = Vector([1, 2])\n        y = Vector([1, 2, 3, 4, 5])\n        z = Vector([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n        w = Vector([1, -1, 1, -1, 2, -3, 4, -5])\n        assert x.euclidean_length() == pytest.approx(2.236, abs=1e-3)\n        assert y.euclidean_length() == pytest.approx(7.416, abs=1e-3)\n        assert z.euclidean_length() == 0\n        assert w.euclidean_length() == pytest.approx(7.616, abs=1e-3)\n\n    def test_add(self) -> None:\n        \"\"\"\n        test for + operator\n        \"\"\"\n        x = Vector([1, 2, 3])\n        y = Vector([1, 1, 1])\n        assert (x + y).component(0) == 2\n        assert (x + y).component(1) == 3\n        assert (x + y).component(2) == 4\n\n    def test_sub(self) -> None:\n        \"\"\"\n        test for - operator\n        \"\"\"\n        x = Vector([1, 2, 3])\n        y = Vector([1, 1, 1])\n        assert (x - y).component(0) == 0\n        assert (x - y).component(1) == 1\n        assert (x - y).component(2) == 2\n\n    def test_mul(self) -> None:\n        \"\"\"\n        test for * operator\n        \"\"\"\n        x = Vector([1, 2, 3])\n        a = Vector([2, -1, 4])  # for test of dot product\n        b = Vector([1, -2, -1])\n        assert str(x * 3.0) == \"(3.0,6.0,9.0)\"\n        assert a * b == 0\n\n    def test_zero_vector(self) -> None:\n        \"\"\"\n        test for global function zero_vector()\n        \"\"\"\n        assert str(zero_vector(10)).count(\"0\") == 10\n\n    def test_unit_basis_vector(self) -> None:\n        \"\"\"\n        test for global function unit_basis_vector()\n        \"\"\"\n        assert str(unit_basis_vector(3, 1)) == \"(0,1,0)\"\n\n    def test_axpy(self) -> None:\n        \"\"\"\n        test for global function axpy() (operation)\n        \"\"\"\n        x = Vector([1, 2, 3])\n        y = Vector([1, 0, 1])\n        assert str(axpy(2, x, y)) == \"(3,4,7)\"\n\n    def test_copy(self) -> None:\n        \"\"\"\n        test for method copy()\n        \"\"\"\n        x = Vector([1, 0, 0, 0, 0, 0])\n        y = x.copy()\n        assert str(x) == str(y)\n\n    def test_change_component(self) -> None:\n        \"\"\"\n        test for method change_component()\n        \"\"\"\n        x = Vector([1, 0, 0])\n        x.change_component(0, 0)\n        x.change_component(1, 1)\n        assert str(x) == \"(0,1,0)\"\n\n    def test_str_matrix(self) -> None:\n        \"\"\"\n        test for Matrix method str()\n        \"\"\"\n        a = Matrix([[1, 2, 3], [2, 4, 5], [6, 7, 8]], 3, 3)\n        assert str(a) == \"|1,2,3|\\n|2,4,5|\\n|6,7,8|\\n\"\n\n    def test_minor(self) -> None:\n        \"\"\"\n        test for Matrix method minor()\n        \"\"\"\n        a = Matrix([[1, 2, 3], [2, 4, 5], [6, 7, 8]], 3, 3)\n        minors = [[-3, -14, -10], [-5, -10, -5], [-2, -1, 0]]\n        for x in range(a.height()):\n            for y in range(a.width()):\n                assert minors[x][y] == a.minor(x, y)\n\n    def test_cofactor(self) -> None:\n        \"\"\"\n        test for Matrix method cofactor()\n        \"\"\"\n        a = Matrix([[1, 2, 3], [2, 4, 5], [6, 7, 8]], 3, 3)\n        cofactors = [[-3, 14, -10], [5, -10, 5], [-2, 1, 0]]\n        for x in range(a.height()):\n            for y in range(a.width()):\n                assert cofactors[x][y] == a.cofactor(x, y)\n\n    def test_determinant(self) -> None:\n        \"\"\"\n        test for Matrix method determinant()\n        \"\"\"\n        a = Matrix([[1, 2, 3], [2, 4, 5], [6, 7, 8]], 3, 3)\n        assert a.determinant() == -5\n\n    def test__mul__matrix(self) -> None:\n        \"\"\"\n        test for Matrix * operator\n        \"\"\"\n        a = Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]], 3, 3)\n        x = Vector([1, 2, 3])\n        assert str(a * x) == \"(14,32,50)\"\n        assert str(a * 2) == \"|2,4,6|\\n|8,10,12|\\n|14,16,18|\\n\"\n\n    def test_change_component_matrix(self) -> None:\n        \"\"\"\n        test for Matrix method change_component()\n        \"\"\"\n        a = Matrix([[1, 2, 3], [2, 4, 5], [6, 7, 8]], 3, 3)\n        a.change_component(0, 2, 5)\n        assert str(a) == \"|1,2,5|\\n|2,4,5|\\n|6,7,8|\\n\"\n\n    def test_component_matrix(self) -> None:\n        \"\"\"\n        test for Matrix method component()\n        \"\"\"\n        a = Matrix([[1, 2, 3], [2, 4, 5], [6, 7, 8]], 3, 3)\n        assert a.component(2, 1) == 7, \"0.01\"\n\n    def test__add__matrix(self) -> None:\n        \"\"\"\n        test for Matrix + operator\n        \"\"\"\n        a = Matrix([[1, 2, 3], [2, 4, 5], [6, 7, 8]], 3, 3)\n        b = Matrix([[1, 2, 7], [2, 4, 5], [6, 7, 10]], 3, 3)\n        assert str(a + b) == \"|2,4,10|\\n|4,8,10|\\n|12,14,18|\\n\"\n\n    def test__sub__matrix(self) -> None:\n        \"\"\"\n        test for Matrix - operator\n        \"\"\"\n        a = Matrix([[1, 2, 3], [2, 4, 5], [6, 7, 8]], 3, 3)\n        b = Matrix([[1, 2, 7], [2, 4, 5], [6, 7, 10]], 3, 3)\n        assert str(a - b) == \"|0,0,-4|\\n|0,0,0|\\n|0,0,-2|\\n\"\n\n    def test_square_zero_matrix(self) -> None:\n        \"\"\"\n        test for global function square_zero_matrix()\n        \"\"\"\n        assert str(square_zero_matrix(5)) == (\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|0,0,0,0,0|\\n\"\n        )\n\n\nif __name__ == \"__main__\":\n    unittest.main()\n"
  },
  {
    "path": "linear_algebra/src/transformations_2d.py",
    "content": "\"\"\"\n2D Transformations are regularly used in Linear Algebra.\n\nI have added the codes for reflection, projection, scaling and rotation 2D matrices.\n\n.. code-block:: python\n\n    scaling(5) = [[5.0, 0.0], [0.0, 5.0]]\n    rotation(45) = [[0.5253219888177297, -0.8509035245341184],\n                    [0.8509035245341184, 0.5253219888177297]]\n    projection(45) = [[0.27596319193541496, 0.446998331800279],\n                      [0.446998331800279, 0.7240368080645851]]\n    reflection(45) = [[0.05064397763545947, 0.893996663600558],\n                      [0.893996663600558, 0.7018070490682369]]\n\"\"\"\n\nfrom math import cos, sin\n\n\ndef scaling(scaling_factor: float) -> list[list[float]]:\n    \"\"\"\n    >>> scaling(5)\n    [[5.0, 0.0], [0.0, 5.0]]\n    \"\"\"\n    scaling_factor = float(scaling_factor)\n    return [[scaling_factor * int(x == y) for x in range(2)] for y in range(2)]\n\n\ndef rotation(angle: float) -> list[list[float]]:\n    \"\"\"\n    >>> rotation(45)  # doctest: +NORMALIZE_WHITESPACE\n    [[0.5253219888177297, -0.8509035245341184],\n     [0.8509035245341184, 0.5253219888177297]]\n    \"\"\"\n    c, s = cos(angle), sin(angle)\n    return [[c, -s], [s, c]]\n\n\ndef projection(angle: float) -> list[list[float]]:\n    \"\"\"\n    >>> projection(45)  # doctest: +NORMALIZE_WHITESPACE\n    [[0.27596319193541496, 0.446998331800279],\n     [0.446998331800279, 0.7240368080645851]]\n    \"\"\"\n    c, s = cos(angle), sin(angle)\n    cs = c * s\n    return [[c * c, cs], [cs, s * s]]\n\n\ndef reflection(angle: float) -> list[list[float]]:\n    \"\"\"\n    >>> reflection(45)  # doctest: +NORMALIZE_WHITESPACE\n    [[0.05064397763545947, 0.893996663600558],\n     [0.893996663600558, 0.7018070490682369]]\n    \"\"\"\n    c, s = cos(angle), sin(angle)\n    cs = c * s\n    return [[2 * c - 1, 2 * cs], [2 * cs, 2 * s - 1]]\n\n\nprint(f\"    {scaling(5) = }\")\nprint(f\"  {rotation(45) = }\")\nprint(f\"{projection(45) = }\")\nprint(f\"{reflection(45) = }\")\n"
  },
  {
    "path": "linear_programming/__init__.py",
    "content": ""
  },
  {
    "path": "linear_programming/simplex.py",
    "content": "\"\"\"\nPython implementation of the simplex algorithm for solving linear programs in\ntabular form with\n- `>=`, `<=`, and `=` constraints and\n- each variable `x1, x2, ...>= 0`.\n\nSee https://gist.github.com/imengus/f9619a568f7da5bc74eaf20169a24d98 for how to\nconvert linear programs to simplex tableaus, and the steps taken in the simplex\nalgorithm.\n\nResources:\nhttps://en.wikipedia.org/wiki/Simplex_algorithm\nhttps://tinyurl.com/simplex4beginners\n\"\"\"\n\nfrom typing import Any\n\nimport numpy as np\n\n\nclass Tableau:\n    \"\"\"Operate on simplex tableaus\n\n    >>> Tableau(np.array([[-1,-1,0,0,1],[1,3,1,0,4],[3,1,0,1,4]]), 2, 2)\n    Traceback (most recent call last):\n    ...\n    TypeError: Tableau must have type float64\n\n    >>> Tableau(np.array([[-1,-1,0,0,-1],[1,3,1,0,4],[3,1,0,1,4.]]), 2, 2)\n    Traceback (most recent call last):\n    ...\n    ValueError: RHS must be > 0\n\n    >>> Tableau(np.array([[-1,-1,0,0,1],[1,3,1,0,4],[3,1,0,1,4.]]), -2, 2)\n    Traceback (most recent call last):\n    ...\n    ValueError: number of (artificial) variables must be a natural number\n    \"\"\"\n\n    # Max iteration number to prevent cycling\n    maxiter = 100\n\n    def __init__(\n        self, tableau: np.ndarray, n_vars: int, n_artificial_vars: int\n    ) -> None:\n        if tableau.dtype != \"float64\":\n            raise TypeError(\"Tableau must have type float64\")\n\n        # Check if RHS is negative\n        if not (tableau[:, -1] >= 0).all():\n            raise ValueError(\"RHS must be > 0\")\n\n        if n_vars < 2 or n_artificial_vars < 0:\n            raise ValueError(\n                \"number of (artificial) variables must be a natural number\"\n            )\n\n        self.tableau = tableau\n        self.n_rows, n_cols = tableau.shape\n\n        # Number of decision variables x1, x2, x3...\n        self.n_vars, self.n_artificial_vars = n_vars, n_artificial_vars\n\n        # 2 if there are >= or == constraints (nonstandard), 1 otherwise (std)\n        self.n_stages = (self.n_artificial_vars > 0) + 1\n\n        # Number of slack variables added to make inequalities into equalities\n        self.n_slack = n_cols - self.n_vars - self.n_artificial_vars - 1\n\n        # Objectives for each stage\n        self.objectives = [\"max\"]\n\n        # In two stage simplex, first minimise then maximise\n        if self.n_artificial_vars:\n            self.objectives.append(\"min\")\n\n        self.col_titles = self.generate_col_titles()\n\n        # Index of current pivot row and column\n        self.row_idx = None\n        self.col_idx = None\n\n        # Does objective row only contain (non)-negative values?\n        self.stop_iter = False\n\n    def generate_col_titles(self) -> list[str]:\n        \"\"\"Generate column titles for tableau of specific dimensions\n\n        >>> Tableau(np.array([[-1,-1,0,0,1],[1,3,1,0,4],[3,1,0,1,4.]]),\n        ... 2, 0).generate_col_titles()\n        ['x1', 'x2', 's1', 's2', 'RHS']\n\n        >>> Tableau(np.array([[-1,-1,0,0,1],[1,3,1,0,4],[3,1,0,1,4.]]),\n        ... 2, 2).generate_col_titles()\n        ['x1', 'x2', 'RHS']\n        \"\"\"\n        args = (self.n_vars, self.n_slack)\n\n        # decision | slack\n        string_starts = [\"x\", \"s\"]\n        titles = []\n        for i in range(2):\n            for j in range(args[i]):\n                titles.append(string_starts[i] + str(j + 1))\n        titles.append(\"RHS\")\n        return titles\n\n    def find_pivot(self) -> tuple[Any, Any]:\n        \"\"\"Finds the pivot row and column.\n        >>> tuple(int(x) for x in Tableau(np.array([[-2,1,0,0,0], [3,1,1,0,6],\n        ... [1,2,0,1,7.]]), 2, 0).find_pivot())\n        (1, 0)\n        \"\"\"\n        objective = self.objectives[-1]\n\n        # Find entries of highest magnitude in objective rows\n        sign = (objective == \"min\") - (objective == \"max\")\n        col_idx = np.argmax(sign * self.tableau[0, :-1])\n\n        # Choice is only valid if below 0 for maximise, and above for minimise\n        if sign * self.tableau[0, col_idx] <= 0:\n            self.stop_iter = True\n            return 0, 0\n\n        # Pivot row is chosen as having the lowest quotient when elements of\n        # the pivot column divide the right-hand side\n\n        # Slice excluding the objective rows\n        s = slice(self.n_stages, self.n_rows)\n\n        # RHS\n        dividend = self.tableau[s, -1]\n\n        # Elements of pivot column within slice\n        divisor = self.tableau[s, col_idx]\n\n        # Array filled with nans\n        nans = np.full(self.n_rows - self.n_stages, np.nan)\n\n        # If element in pivot column is greater than zero, return\n        # quotient or nan otherwise\n        quotients = np.divide(dividend, divisor, out=nans, where=divisor > 0)\n\n        # Arg of minimum quotient excluding the nan values. n_stages is added\n        # to compensate for earlier exclusion of objective columns\n        row_idx = np.nanargmin(quotients) + self.n_stages\n        return row_idx, col_idx\n\n    def pivot(self, row_idx: int, col_idx: int) -> np.ndarray:\n        \"\"\"Pivots on value on the intersection of pivot row and column.\n\n        >>> Tableau(np.array([[-2,-3,0,0,0],[1,3,1,0,4],[3,1,0,1,4.]]),\n        ... 2, 2).pivot(1, 0).tolist()\n        ... # doctest: +NORMALIZE_WHITESPACE\n        [[0.0, 3.0, 2.0, 0.0, 8.0],\n        [1.0, 3.0, 1.0, 0.0, 4.0],\n        [0.0, -8.0, -3.0, 1.0, -8.0]]\n        \"\"\"\n        # Avoid changes to original tableau\n        piv_row = self.tableau[row_idx].copy()\n\n        piv_val = piv_row[col_idx]\n\n        # Entry becomes 1\n        piv_row *= 1 / piv_val\n\n        # Variable in pivot column becomes basic, ie the only non-zero entry\n        for idx, coeff in enumerate(self.tableau[:, col_idx]):\n            self.tableau[idx] += -coeff * piv_row\n        self.tableau[row_idx] = piv_row\n        return self.tableau\n\n    def change_stage(self) -> np.ndarray:\n        \"\"\"Exits first phase of the two-stage method by deleting artificial\n        rows and columns, or completes the algorithm if exiting the standard\n        case.\n\n        >>> Tableau(np.array([\n        ... [3, 3, -1, -1, 0, 0, 4],\n        ... [2, 1, 0, 0, 0, 0, 0.],\n        ... [1, 2, -1, 0, 1, 0, 2],\n        ... [2, 1, 0, -1, 0, 1, 2]\n        ... ]), 2, 2).change_stage().tolist()\n        ... # doctest: +NORMALIZE_WHITESPACE\n        [[2.0, 1.0, 0.0, 0.0, 0.0],\n        [1.0, 2.0, -1.0, 0.0, 2.0],\n        [2.0, 1.0, 0.0, -1.0, 2.0]]\n        \"\"\"\n        # Objective of original objective row remains\n        self.objectives.pop()\n\n        if not self.objectives:\n            return self.tableau\n\n        # Slice containing ids for artificial columns\n        s = slice(-self.n_artificial_vars - 1, -1)\n\n        # Delete the artificial variable columns\n        self.tableau = np.delete(self.tableau, s, axis=1)\n\n        # Delete the objective row of the first stage\n        self.tableau = np.delete(self.tableau, 0, axis=0)\n\n        self.n_stages = 1\n        self.n_rows -= 1\n        self.n_artificial_vars = 0\n        self.stop_iter = False\n        return self.tableau\n\n    def run_simplex(self) -> dict[Any, Any]:\n        \"\"\"Operate on tableau until objective function cannot be\n        improved further.\n\n        # Standard linear program:\n        Max:  x1 +  x2\n        ST:   x1 + 3x2 <= 4\n             3x1 +  x2 <= 4\n        >>> {key: float(value) for key, value in Tableau(np.array([[-1,-1,0,0,0],\n        ... [1,3,1,0,4],[3,1,0,1,4.]]), 2, 0).run_simplex().items()}\n        {'P': 2.0, 'x1': 1.0, 'x2': 1.0}\n\n        # Standard linear program with 3 variables:\n        Max: 3x1 +  x2 + 3x3\n        ST:  2x1 +  x2 +  x3 ≤ 2\n              x1 + 2x2 + 3x3 ≤ 5\n             2x1 + 2x2 +  x3 ≤ 6\n        >>> {key: float(value) for key, value in Tableau(np.array([\n        ... [-3,-1,-3,0,0,0,0],\n        ... [2,1,1,1,0,0,2],\n        ... [1,2,3,0,1,0,5],\n        ... [2,2,1,0,0,1,6.]\n        ... ]),3,0).run_simplex().items()} # doctest: +ELLIPSIS\n        {'P': 5.4, 'x1': 0.199..., 'x3': 1.6}\n\n\n        # Optimal tableau input:\n        >>> {key: float(value) for key, value in Tableau(np.array([\n        ... [0, 0, 0.25, 0.25, 2],\n        ... [0, 1, 0.375, -0.125, 1],\n        ... [1, 0, -0.125, 0.375, 1]\n        ... ]), 2, 0).run_simplex().items()}\n        {'P': 2.0, 'x1': 1.0, 'x2': 1.0}\n\n        # Non-standard: >= constraints\n        Max: 2x1 + 3x2 +  x3\n        ST:   x1 +  x2 +  x3 <= 40\n             2x1 +  x2 -  x3 >= 10\n                 -  x2 +  x3 >= 10\n        >>> {key: float(value) for key, value in Tableau(np.array([\n        ... [2, 0, 0, 0, -1, -1, 0, 0, 20],\n        ... [-2, -3, -1, 0, 0, 0, 0, 0, 0],\n        ... [1, 1, 1, 1, 0, 0, 0, 0, 40],\n        ... [2, 1, -1, 0, -1, 0, 1, 0, 10],\n        ... [0, -1, 1, 0, 0, -1, 0, 1, 10.]\n        ... ]), 3, 2).run_simplex().items()}\n        {'P': 70.0, 'x1': 10.0, 'x2': 10.0, 'x3': 20.0}\n\n        # Non standard: minimisation and equalities\n        Min: x1 +  x2\n        ST: 2x1 +  x2 = 12\n            6x1 + 5x2 = 40\n        >>> {key: float(value) for key, value in Tableau(np.array([\n        ... [8, 6, 0, 0, 52],\n        ... [1, 1, 0, 0, 0],\n        ... [2, 1, 1, 0, 12],\n        ... [6, 5, 0, 1, 40.],\n        ... ]), 2, 2).run_simplex().items()}\n        {'P': 7.0, 'x1': 5.0, 'x2': 2.0}\n\n\n        # Pivot on slack variables\n        Max: 8x1 + 6x2\n        ST:   x1 + 3x2 <= 33\n             4x1 + 2x2 <= 48\n             2x1 + 4x2 <= 48\n              x1 +  x2 >= 10\n             x1        >= 2\n        >>> {key: float(value) for key, value in Tableau(np.array([\n        ... [2, 1, 0, 0, 0, -1, -1, 0, 0, 12.0],\n        ... [-8, -6, 0, 0, 0, 0, 0, 0, 0, 0.0],\n        ... [1, 3, 1, 0, 0, 0, 0, 0, 0, 33.0],\n        ... [4, 2, 0, 1, 0, 0, 0, 0, 0, 60.0],\n        ... [2, 4, 0, 0, 1, 0, 0, 0, 0, 48.0],\n        ... [1, 1, 0, 0, 0, -1, 0, 1, 0, 10.0],\n        ... [1, 0, 0, 0, 0, 0, -1, 0, 1, 2.0]\n        ... ]), 2, 2).run_simplex().items()} # doctest: +ELLIPSIS\n        {'P': 132.0, 'x1': 12.000... 'x2': 5.999...}\n        \"\"\"\n        # Stop simplex algorithm from cycling.\n        for _ in range(Tableau.maxiter):\n            # Completion of each stage removes an objective. If both stages\n            # are complete, then no objectives are left\n            if not self.objectives:\n                # Find the values of each variable at optimal solution\n                return self.interpret_tableau()\n\n            row_idx, col_idx = self.find_pivot()\n\n            # If there are no more negative values in objective row\n            if self.stop_iter:\n                # Delete artificial variable columns and rows. Update attributes\n                self.tableau = self.change_stage()\n            else:\n                self.tableau = self.pivot(row_idx, col_idx)\n        return {}\n\n    def interpret_tableau(self) -> dict[str, float]:\n        \"\"\"Given the final tableau, add the corresponding values of the basic\n        decision variables to the `output_dict`\n        >>> {key: float(value) for key, value in Tableau(np.array([\n        ... [0,0,0.875,0.375,5],\n        ... [0,1,0.375,-0.125,1],\n        ... [1,0,-0.125,0.375,1]\n        ... ]),2, 0).interpret_tableau().items()}\n        {'P': 5.0, 'x1': 1.0, 'x2': 1.0}\n        \"\"\"\n        # P = RHS of final tableau\n        output_dict = {\"P\": abs(self.tableau[0, -1])}\n\n        for i in range(self.n_vars):\n            # Gives indices of nonzero entries in the ith column\n            nonzero = np.nonzero(self.tableau[:, i])\n            n_nonzero = len(nonzero[0])\n\n            # First entry in the nonzero indices\n            nonzero_rowidx = nonzero[0][0]\n            nonzero_val = self.tableau[nonzero_rowidx, i]\n\n            # If there is only one nonzero value in column, which is one\n            if n_nonzero == 1 and nonzero_val == 1:\n                rhs_val = self.tableau[nonzero_rowidx, -1]\n                output_dict[self.col_titles[i]] = rhs_val\n        return output_dict\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "machine_learning/__init__.py",
    "content": ""
  },
  {
    "path": "machine_learning/apriori_algorithm.py",
    "content": "\"\"\"\nApriori Algorithm is a Association rule mining technique, also known as market basket\nanalysis, aims to discover interesting relationships or associations among a set of\nitems in a transactional or relational database.\n\nFor example, Apriori Algorithm states: \"If a customer buys item A and item B, then they\nare likely to buy item C.\"  This rule suggests a relationship between items A, B, and C,\nindicating that customers who purchased A and B are more likely to also purchase item C.\n\nWIKI: https://en.wikipedia.org/wiki/Apriori_algorithm\nExamples: https://www.kaggle.com/code/earthian/apriori-association-rules-mining\n\"\"\"\n\nfrom collections import Counter\nfrom itertools import combinations\n\n\ndef load_data() -> list[list[str]]:\n    \"\"\"\n    Returns a sample transaction dataset.\n\n    >>> load_data()\n    [['milk'], ['milk', 'butter'], ['milk', 'bread'], ['milk', 'bread', 'chips']]\n    \"\"\"\n    return [[\"milk\"], [\"milk\", \"butter\"], [\"milk\", \"bread\"], [\"milk\", \"bread\", \"chips\"]]\n\n\ndef prune(itemset: list, candidates: list, length: int) -> list:\n    \"\"\"\n    Prune candidate itemsets that are not frequent.\n    The goal of pruning is to filter out candidate itemsets that are not frequent.  This\n    is done by checking if all the (k-1) subsets of a candidate itemset are present in\n    the frequent itemsets of the previous iteration (valid subsequences of the frequent\n    itemsets from the previous iteration).\n\n    Prunes candidate itemsets that are not frequent.\n\n    >>> itemset = ['X', 'Y', 'Z']\n    >>> candidates = [['X', 'Y'], ['X', 'Z'], ['Y', 'Z']]\n    >>> prune(itemset, candidates, 2)\n    [['X', 'Y'], ['X', 'Z'], ['Y', 'Z']]\n\n    >>> itemset = ['1', '2', '3', '4']\n    >>> candidates = ['1', '2', '4']\n    >>> prune(itemset, candidates, 3)\n    []\n    \"\"\"\n    itemset_counter = Counter(tuple(item) for item in itemset)\n    pruned = []\n    for candidate in candidates:\n        is_subsequence = True\n        for item in candidate:\n            item_tuple = tuple(item)\n            if (\n                item_tuple not in itemset_counter\n                or itemset_counter[item_tuple] < length - 1\n            ):\n                is_subsequence = False\n                break\n        if is_subsequence:\n            pruned.append(candidate)\n    return pruned\n\n\ndef apriori(data: list[list[str]], min_support: int) -> list[tuple[list[str], int]]:\n    \"\"\"\n    Returns a list of frequent itemsets and their support counts.\n\n    >>> data = [['A', 'B', 'C'], ['A', 'B'], ['A', 'C'], ['A', 'D'], ['B', 'C']]\n    >>> apriori(data, 2)\n    [(['A', 'B'], 1), (['A', 'C'], 2), (['B', 'C'], 2)]\n\n    >>> data = [['1', '2', '3'], ['1', '2'], ['1', '3'], ['1', '4'], ['2', '3']]\n    >>> apriori(data, 3)\n    []\n    \"\"\"\n    itemset = [list(transaction) for transaction in data]\n    frequent_itemsets = []\n    length = 1\n\n    while itemset:\n        # Count itemset support\n        counts = [0] * len(itemset)\n        for transaction in data:\n            for j, candidate in enumerate(itemset):\n                if all(item in transaction for item in candidate):\n                    counts[j] += 1\n\n        # Prune infrequent itemsets\n        itemset = [item for i, item in enumerate(itemset) if counts[i] >= min_support]\n\n        # Append frequent itemsets (as a list to maintain order)\n        for i, item in enumerate(itemset):\n            frequent_itemsets.append((sorted(item), counts[i]))\n\n        length += 1\n        itemset = prune(itemset, list(combinations(itemset, length)), length)\n\n    return frequent_itemsets\n\n\nif __name__ == \"__main__\":\n    \"\"\"\n    Apriori algorithm for finding frequent itemsets.\n\n    Args:\n        data: A list of transactions, where each transaction is a list of items.\n        min_support: The minimum support threshold for frequent itemsets.\n\n    Returns:\n        A list of frequent itemsets along with their support counts.\n    \"\"\"\n    import doctest\n\n    doctest.testmod()\n\n    # user-defined threshold or minimum support level\n    frequent_itemsets = apriori(data=load_data(), min_support=2)\n    print(\"\\n\".join(f\"{itemset}: {support}\" for itemset, support in frequent_itemsets))\n"
  },
  {
    "path": "machine_learning/astar.py",
    "content": "\"\"\"\nThe A* algorithm combines features of uniform-cost search and pure heuristic search to\nefficiently compute optimal solutions.\n\nThe A* algorithm is a best-first search algorithm in which the cost associated with a\nnode is f(n) = g(n) + h(n), where g(n) is the cost of the path from the initial state to\nnode n and h(n) is the heuristic estimate or the cost or a path from node n to a goal.\n\nThe A* algorithm introduces a heuristic into a regular graph-searching algorithm,\nessentially planning ahead at each step so a more optimal decision is made. For this\nreason, A* is known as an algorithm with brains.\n\nhttps://en.wikipedia.org/wiki/A*_search_algorithm\n\"\"\"\n\nimport numpy as np\n\n\nclass Cell:\n    \"\"\"\n    Class cell represents a cell in the world which have the properties:\n    position: represented by tuple of x and y coordinates initially set to (0,0).\n    parent: Contains the parent cell object visited before we arrived at this cell.\n    g, h, f: Parameters used when calling our heuristic function.\n    \"\"\"\n\n    def __init__(self):\n        self.position = (0, 0)\n        self.parent = None\n        self.g = 0\n        self.h = 0\n        self.f = 0\n\n    \"\"\"\n    Overrides equals method because otherwise cell assign will give\n    wrong results.\n    \"\"\"\n\n    def __eq__(self, cell):\n        return self.position == cell.position\n\n    def showcell(self):\n        print(self.position)\n\n\nclass Gridworld:\n    \"\"\"\n    Gridworld class represents the  external world here a grid M*M\n    matrix.\n    world_size: create a numpy array with the given world_size default is 5.\n    \"\"\"\n\n    def __init__(self, world_size=(5, 5)):\n        self.w = np.zeros(world_size)\n        self.world_x_limit = world_size[0]\n        self.world_y_limit = world_size[1]\n\n    def show(self):\n        print(self.w)\n\n    def get_neighbours(self, cell):\n        \"\"\"\n        Return the neighbours of cell\n        \"\"\"\n        neughbour_cord = [\n            (-1, -1),\n            (-1, 0),\n            (-1, 1),\n            (0, -1),\n            (0, 1),\n            (1, -1),\n            (1, 0),\n            (1, 1),\n        ]\n        current_x = cell.position[0]\n        current_y = cell.position[1]\n        neighbours = []\n        for n in neughbour_cord:\n            x = current_x + n[0]\n            y = current_y + n[1]\n            if 0 <= x < self.world_x_limit and 0 <= y < self.world_y_limit:\n                c = Cell()\n                c.position = (x, y)\n                c.parent = cell\n                neighbours.append(c)\n        return neighbours\n\n\ndef astar(world, start, goal):\n    \"\"\"\n    Implementation of a start algorithm.\n    world : Object of the world object.\n    start : Object of the cell as  start position.\n    stop  : Object of the cell as goal position.\n\n    >>> p = Gridworld()\n    >>> start = Cell()\n    >>> start.position = (0,0)\n    >>> goal = Cell()\n    >>> goal.position = (4,4)\n    >>> astar(p, start, goal)\n    [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]\n    \"\"\"\n    _open = []\n    _closed = []\n    _open.append(start)\n\n    while _open:\n        min_f = np.argmin([n.f for n in _open])\n        current = _open[min_f]\n        _closed.append(_open.pop(min_f))\n        if current == goal:\n            break\n        for n in world.get_neighbours(current):\n            for c in _closed:\n                if c == n:\n                    continue\n            n.g = current.g + 1\n            x1, y1 = n.position\n            x2, y2 = goal.position\n            n.h = (y2 - y1) ** 2 + (x2 - x1) ** 2\n            n.f = n.h + n.g\n\n            for c in _open:\n                if c == n and c.f < n.f:\n                    continue\n            _open.append(n)\n    path = []\n    while current.parent is not None:\n        path.append(current.position)\n        current = current.parent\n    path.append(current.position)\n    return path[::-1]\n\n\nif __name__ == \"__main__\":\n    world = Gridworld()\n    # Start position and goal\n    start = Cell()\n    start.position = (0, 0)\n    goal = Cell()\n    goal.position = (4, 4)\n    print(f\"path from {start.position} to {goal.position}\")\n    s = astar(world, start, goal)\n    #   Just for visual reasons.\n    for i in s:\n        world.w[i] = 1\n    print(world.w)\n"
  },
  {
    "path": "machine_learning/automatic_differentiation.py",
    "content": "\"\"\"\nDemonstration of the Automatic Differentiation (Reverse mode).\n\nReference: https://en.wikipedia.org/wiki/Automatic_differentiation\n\nAuthor: Poojan Smart\nEmail: smrtpoojan@gmail.com\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections import defaultdict\nfrom enum import Enum\nfrom types import TracebackType\nfrom typing import Any\n\nimport numpy as np\nfrom typing_extensions import Self  # noqa: UP035\n\n\nclass OpType(Enum):\n    \"\"\"\n    Class represents list of supported operations on Variable for gradient calculation.\n    \"\"\"\n\n    ADD = 0\n    SUB = 1\n    MUL = 2\n    DIV = 3\n    MATMUL = 4\n    POWER = 5\n    NOOP = 6\n\n\nclass Variable:\n    \"\"\"\n    Class represents n-dimensional object which is used to wrap numpy array on which\n    operations will be performed and the gradient will be calculated.\n\n    Examples:\n    >>> Variable(5.0)\n    Variable(5.0)\n    >>> Variable([5.0, 2.9])\n    Variable([5.  2.9])\n    >>> Variable([5.0, 2.9]) + Variable([1.0, 5.5])\n    Variable([6.  8.4])\n    >>> Variable([[8.0, 10.0]])\n    Variable([[ 8. 10.]])\n    \"\"\"\n\n    def __init__(self, value: Any) -> None:\n        self.value = np.array(value)\n\n        # pointers to the operations to which the Variable is input\n        self.param_to: list[Operation] = []\n        # pointer to the operation of which the Variable is output of\n        self.result_of: Operation = Operation(OpType.NOOP)\n\n    def __repr__(self) -> str:\n        return f\"Variable({self.value})\"\n\n    def to_ndarray(self) -> np.ndarray:\n        return self.value\n\n    def __add__(self, other: Variable) -> Variable:\n        result = Variable(self.value + other.value)\n\n        with GradientTracker() as tracker:\n            # if tracker is enabled, computation graph will be updated\n            if tracker.enabled:\n                tracker.append(OpType.ADD, params=[self, other], output=result)\n        return result\n\n    def __sub__(self, other: Variable) -> Variable:\n        result = Variable(self.value - other.value)\n\n        with GradientTracker() as tracker:\n            # if tracker is enabled, computation graph will be updated\n            if tracker.enabled:\n                tracker.append(OpType.SUB, params=[self, other], output=result)\n        return result\n\n    def __mul__(self, other: Variable) -> Variable:\n        result = Variable(self.value * other.value)\n\n        with GradientTracker() as tracker:\n            # if tracker is enabled, computation graph will be updated\n            if tracker.enabled:\n                tracker.append(OpType.MUL, params=[self, other], output=result)\n        return result\n\n    def __truediv__(self, other: Variable) -> Variable:\n        result = Variable(self.value / other.value)\n\n        with GradientTracker() as tracker:\n            # if tracker is enabled, computation graph will be updated\n            if tracker.enabled:\n                tracker.append(OpType.DIV, params=[self, other], output=result)\n        return result\n\n    def __matmul__(self, other: Variable) -> Variable:\n        result = Variable(self.value @ other.value)\n\n        with GradientTracker() as tracker:\n            # if tracker is enabled, computation graph will be updated\n            if tracker.enabled:\n                tracker.append(OpType.MATMUL, params=[self, other], output=result)\n        return result\n\n    def __pow__(self, power: int) -> Variable:\n        result = Variable(self.value**power)\n\n        with GradientTracker() as tracker:\n            # if tracker is enabled, computation graph will be updated\n            if tracker.enabled:\n                tracker.append(\n                    OpType.POWER,\n                    params=[self],\n                    output=result,\n                    other_params={\"power\": power},\n                )\n        return result\n\n    def add_param_to(self, param_to: Operation) -> None:\n        self.param_to.append(param_to)\n\n    def add_result_of(self, result_of: Operation) -> None:\n        self.result_of = result_of\n\n\nclass Operation:\n    \"\"\"\n    Class represents operation between single or two Variable objects.\n    Operation objects contains type of operation, pointers to input Variable\n    objects and pointer to resulting Variable from the operation.\n    \"\"\"\n\n    def __init__(\n        self,\n        op_type: OpType,\n        other_params: dict | None = None,\n    ) -> None:\n        self.op_type = op_type\n        self.other_params = {} if other_params is None else other_params\n\n    def add_params(self, params: list[Variable]) -> None:\n        self.params = params\n\n    def add_output(self, output: Variable) -> None:\n        self.output = output\n\n    def __eq__(self, value) -> bool:\n        return self.op_type == value if isinstance(value, OpType) else False\n\n\nclass GradientTracker:\n    \"\"\"\n    Class contains methods to compute partial derivatives of Variable\n    based on the computation graph.\n\n    Examples:\n\n    >>> with GradientTracker() as tracker:\n    ...     a = Variable([2.0, 5.0])\n    ...     b = Variable([1.0, 2.0])\n    ...     m = Variable([1.0, 2.0])\n    ...     c = a + b\n    ...     d = a * b\n    ...     e = c / d\n    >>> tracker.gradient(e, a)\n    array([-0.25, -0.04])\n    >>> tracker.gradient(e, b)\n    array([-1.  , -0.25])\n    >>> tracker.gradient(e, m) is None\n    True\n\n    >>> with GradientTracker() as tracker:\n    ...     a = Variable([[2.0, 5.0]])\n    ...     b = Variable([[1.0], [2.0]])\n    ...     c = a @ b\n    >>> tracker.gradient(c, a)\n    array([[1., 2.]])\n    >>> tracker.gradient(c, b)\n    array([[2.],\n           [5.]])\n\n    >>> with GradientTracker() as tracker:\n    ...     a = Variable([[2.0, 5.0]])\n    ...     b = a ** 3\n    >>> tracker.gradient(b, a)\n    array([[12., 75.]])\n    \"\"\"\n\n    instance = None\n\n    def __new__(cls) -> Self:\n        \"\"\"\n        Executes at the creation of class object and returns if\n        object is already created. This class follows singleton\n        design pattern.\n        \"\"\"\n        if cls.instance is None:\n            cls.instance = super().__new__(cls)\n        return cls.instance\n\n    def __init__(self) -> None:\n        self.enabled = False\n\n    def __enter__(self) -> Self:\n        self.enabled = True\n        return self\n\n    def __exit__(\n        self,\n        exc_type: type[BaseException] | None,\n        exc: BaseException | None,\n        traceback: TracebackType | None,\n    ) -> None:\n        self.enabled = False\n\n    def append(\n        self,\n        op_type: OpType,\n        params: list[Variable],\n        output: Variable,\n        other_params: dict | None = None,\n    ) -> None:\n        \"\"\"\n        Adds Operation object to the related Variable objects for\n        creating computational graph for calculating gradients.\n\n        Args:\n            op_type: Operation type\n            params: Input parameters to the operation\n            output: Output variable of the operation\n        \"\"\"\n        operation = Operation(op_type, other_params=other_params)\n        param_nodes = []\n        for param in params:\n            param.add_param_to(operation)\n            param_nodes.append(param)\n        output.add_result_of(operation)\n\n        operation.add_params(param_nodes)\n        operation.add_output(output)\n\n    def gradient(self, target: Variable, source: Variable) -> np.ndarray | None:\n        \"\"\"\n        Reverse accumulation of partial derivatives to calculate gradients\n        of target variable with respect to source variable.\n\n        Args:\n            target: target variable for which gradients are calculated.\n            source: source variable with respect to which the gradients are\n            calculated.\n\n        Returns:\n            Gradient of the source variable with respect to the target variable\n        \"\"\"\n\n        # partial derivatives with respect to target\n        partial_deriv = defaultdict(lambda: 0)\n        partial_deriv[target] = np.ones_like(target.to_ndarray())\n\n        # iterating through each operations in the computation graph\n        operation_queue = [target.result_of]\n        while len(operation_queue) > 0:\n            operation = operation_queue.pop()\n            for param in operation.params:\n                # as per the chain rule, multiplying partial derivatives\n                # of variables with respect to the target\n                dparam_doutput = self.derivative(param, operation)\n                dparam_dtarget = dparam_doutput * partial_deriv[operation.output]\n                partial_deriv[param] += dparam_dtarget\n\n                if param.result_of and param.result_of != OpType.NOOP:\n                    operation_queue.append(param.result_of)\n\n        return partial_deriv.get(source)\n\n    def derivative(self, param: Variable, operation: Operation) -> np.ndarray:\n        \"\"\"\n        Compute the derivative of given operation/function\n\n        Args:\n            param: variable to be differentiated\n            operation: function performed on the input variable\n\n        Returns:\n            Derivative of input variable with respect to the output of\n            the operation\n        \"\"\"\n        params = operation.params\n\n        if operation == OpType.ADD:\n            return np.ones_like(params[0].to_ndarray(), dtype=np.float64)\n        if operation == OpType.SUB:\n            if params[0] == param:\n                return np.ones_like(params[0].to_ndarray(), dtype=np.float64)\n            return -np.ones_like(params[1].to_ndarray(), dtype=np.float64)\n        if operation == OpType.MUL:\n            return (\n                params[1].to_ndarray().T\n                if params[0] == param\n                else params[0].to_ndarray().T\n            )\n        if operation == OpType.DIV:\n            if params[0] == param:\n                return 1 / params[1].to_ndarray()\n            return -params[0].to_ndarray() / (params[1].to_ndarray() ** 2)\n        if operation == OpType.MATMUL:\n            return (\n                params[1].to_ndarray().T\n                if params[0] == param\n                else params[0].to_ndarray().T\n            )\n        if operation == OpType.POWER:\n            power = operation.other_params[\"power\"]\n            return power * (params[0].to_ndarray() ** (power - 1))\n\n        err_msg = f\"invalid operation type: {operation.op_type}\"\n        raise ValueError(err_msg)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "machine_learning/data_transformations.py",
    "content": "\"\"\"\nNormalization.\n\nWikipedia: https://en.wikipedia.org/wiki/Normalization\nNormalization is the process of converting numerical data to a standard range of values.\nThis range is typically between [0, 1] or [-1, 1]. The equation for normalization is\nx_norm = (x - x_min)/(x_max - x_min) where x_norm is the normalized value, x is the\nvalue, x_min is the minimum value within the column or list of data, and x_max is the\nmaximum value within the column or list of data. Normalization is used to speed up the\ntraining of data and put all of the data on a similar scale. This is useful because\nvariance in the range of values of a dataset can heavily impact optimization\n(particularly Gradient Descent).\n\nStandardization Wikipedia: https://en.wikipedia.org/wiki/Standardization\nStandardization is the process of converting numerical data to a normally distributed\nrange of values. This range will have a mean of 0 and standard deviation of 1. This is\nalso known as z-score normalization. The equation for standardization is\nx_std = (x - mu)/(sigma) where mu is the mean of the column or list of values and sigma\nis the standard deviation of the column or list of values.\n\nChoosing between Normalization & Standardization is more of an art of a science, but it\nis often recommended to run experiments with both to see which performs better.\nAdditionally, a few rules of thumb are:\n    1. gaussian (normal) distributions work better with standardization\n    2. non-gaussian (non-normal) distributions work better with normalization\n    3. If a column or list of values has extreme values / outliers, use standardization\n\"\"\"\n\nfrom statistics import mean, stdev\n\n\ndef normalization(data: list, ndigits: int = 3) -> list:\n    \"\"\"\n    Return a normalized list of values.\n\n    @params: data, a list of values to normalize\n    @returns: a list of normalized values (rounded to ndigits decimal places)\n    @examples:\n    >>> normalization([2, 7, 10, 20, 30, 50])\n    [0.0, 0.104, 0.167, 0.375, 0.583, 1.0]\n    >>> normalization([5, 10, 15, 20, 25])\n    [0.0, 0.25, 0.5, 0.75, 1.0]\n    \"\"\"\n    # variables for calculation\n    x_min = min(data)\n    x_max = max(data)\n    # normalize data\n    return [round((x - x_min) / (x_max - x_min), ndigits) for x in data]\n\n\ndef standardization(data: list, ndigits: int = 3) -> list:\n    \"\"\"\n    Return a standardized list of values.\n\n    @params: data, a list of values to standardize\n    @returns: a list of standardized values (rounded to ndigits decimal places)\n    @examples:\n    >>> standardization([2, 7, 10, 20, 30, 50])\n    [-0.999, -0.719, -0.551, 0.009, 0.57, 1.69]\n    >>> standardization([5, 10, 15, 20, 25])\n    [-1.265, -0.632, 0.0, 0.632, 1.265]\n    \"\"\"\n    # variables for calculation\n    mu = mean(data)\n    sigma = stdev(data)\n    # standardize data\n    return [round((x - mu) / (sigma), ndigits) for x in data]\n"
  },
  {
    "path": "machine_learning/decision_tree.py",
    "content": "\"\"\"\nImplementation of a basic regression decision tree.\nInput data set: The input data set must be 1-dimensional with continuous labels.\nOutput: The decision tree maps a real number input to a real number output.\n\"\"\"\n\nimport numpy as np\n\n\nclass DecisionTree:\n    def __init__(self, depth=5, min_leaf_size=5):\n        self.depth = depth\n        self.decision_boundary = 0\n        self.left = None\n        self.right = None\n        self.min_leaf_size = min_leaf_size\n        self.prediction = None\n\n    def mean_squared_error(self, labels, prediction):\n        \"\"\"\n        mean_squared_error:\n        @param labels: a one-dimensional numpy array\n        @param prediction: a floating point value\n        return value: mean_squared_error calculates the error if prediction is used to\n            estimate the labels\n        >>> tester = DecisionTree()\n        >>> test_labels = np.array([1,2,3,4,5,6,7,8,9,10])\n        >>> test_prediction = float(6)\n        >>> bool(tester.mean_squared_error(test_labels, test_prediction) == (\n        ...     TestDecisionTree.helper_mean_squared_error_test(test_labels,\n        ...         test_prediction)))\n        True\n        >>> test_labels = np.array([1,2,3])\n        >>> test_prediction = float(2)\n        >>> bool(tester.mean_squared_error(test_labels, test_prediction) == (\n        ...     TestDecisionTree.helper_mean_squared_error_test(test_labels,\n        ...         test_prediction)))\n        True\n        \"\"\"\n        if labels.ndim != 1:\n            print(\"Error: Input labels must be one dimensional\")\n\n        return np.mean((labels - prediction) ** 2)\n\n    def train(self, x, y):\n        \"\"\"\n        train:\n        @param x: a one-dimensional numpy array\n        @param y: a one-dimensional numpy array.\n        The contents of y are the labels for the corresponding X values\n\n        train() does not have a return value\n\n        Examples:\n        1. Try to train when x & y are of same length & 1 dimensions (No errors)\n        >>> dt = DecisionTree()\n        >>> dt.train(np.array([10,20,30,40,50]),np.array([0,0,0,1,1]))\n\n        2. Try to train when x is 2 dimensions\n        >>> dt = DecisionTree()\n        >>> dt.train(np.array([[1,2,3,4,5],[1,2,3,4,5]]),np.array([0,0,0,1,1]))\n        Traceback (most recent call last):\n            ...\n        ValueError: Input data set must be one-dimensional\n\n        3. Try to train when x and y are not of the same length\n        >>> dt = DecisionTree()\n        >>> dt.train(np.array([1,2,3,4,5]),np.array([[0,0,0,1,1],[0,0,0,1,1]]))\n        Traceback (most recent call last):\n            ...\n        ValueError: x and y have different lengths\n\n        4. Try to train when x & y are of the same length but different dimensions\n        >>> dt = DecisionTree()\n        >>> dt.train(np.array([1,2,3,4,5]),np.array([[1],[2],[3],[4],[5]]))\n        Traceback (most recent call last):\n            ...\n        ValueError: Data set labels must be one-dimensional\n\n        This section is to check that the inputs conform to our dimensionality\n        constraints\n        \"\"\"\n        if x.ndim != 1:\n            raise ValueError(\"Input data set must be one-dimensional\")\n        if len(x) != len(y):\n            raise ValueError(\"x and y have different lengths\")\n        if y.ndim != 1:\n            raise ValueError(\"Data set labels must be one-dimensional\")\n\n        if len(x) < 2 * self.min_leaf_size:\n            self.prediction = np.mean(y)\n            return\n\n        if self.depth == 1:\n            self.prediction = np.mean(y)\n            return\n\n        best_split = 0\n        min_error = self.mean_squared_error(x, np.mean(y)) * 2\n\n        \"\"\"\n        loop over all possible splits for the decision tree. find the best split.\n        if no split exists that is less than 2 * error for the entire array\n        then the data set is not split and the average for the entire array is used as\n        the predictor\n        \"\"\"\n        for i in range(len(x)):\n            if len(x[:i]) < self.min_leaf_size:  # noqa: SIM114\n                continue\n            elif len(x[i:]) < self.min_leaf_size:\n                continue\n            else:\n                error_left = self.mean_squared_error(x[:i], np.mean(y[:i]))\n                error_right = self.mean_squared_error(x[i:], np.mean(y[i:]))\n                error = error_left + error_right\n                if error < min_error:\n                    best_split = i\n                    min_error = error\n\n        if best_split != 0:\n            left_x = x[:best_split]\n            left_y = y[:best_split]\n            right_x = x[best_split:]\n            right_y = y[best_split:]\n\n            self.decision_boundary = x[best_split]\n            self.left = DecisionTree(\n                depth=self.depth - 1, min_leaf_size=self.min_leaf_size\n            )\n            self.right = DecisionTree(\n                depth=self.depth - 1, min_leaf_size=self.min_leaf_size\n            )\n            self.left.train(left_x, left_y)\n            self.right.train(right_x, right_y)\n        else:\n            self.prediction = np.mean(y)\n\n        return\n\n    def predict(self, x):\n        \"\"\"\n        predict:\n        @param x: a floating point value to predict the label of\n        the prediction function works by recursively calling the predict function\n        of the appropriate subtrees based on the tree's decision boundary\n        \"\"\"\n        if self.prediction is not None:\n            return self.prediction\n        elif self.left is not None and self.right is not None:\n            if x >= self.decision_boundary:\n                return self.right.predict(x)\n            else:\n                return self.left.predict(x)\n        else:\n            raise ValueError(\"Decision tree not yet trained\")\n\n\nclass TestDecisionTree:\n    \"\"\"Decision Tres test class\"\"\"\n\n    @staticmethod\n    def helper_mean_squared_error_test(labels, prediction):\n        \"\"\"\n        helper_mean_squared_error_test:\n        @param labels: a one dimensional numpy array\n        @param prediction: a floating point value\n        return value: helper_mean_squared_error_test calculates the mean squared error\n        \"\"\"\n        squared_error_sum = float(0)\n        for label in labels:\n            squared_error_sum += (label - prediction) ** 2\n\n        return float(squared_error_sum / labels.size)\n\n\ndef main():\n    \"\"\"\n    In this demonstration we're generating a sample data set from the sin function in\n    numpy.  We then train a decision tree on the data set and use the decision tree to\n    predict the label of 10 different test values. Then the mean squared error over\n    this test is displayed.\n    \"\"\"\n    x = np.arange(-1.0, 1.0, 0.005)\n    y = np.sin(x)\n\n    tree = DecisionTree(depth=10, min_leaf_size=10)\n    tree.train(x, y)\n\n    rng = np.random.default_rng()\n    test_cases = (rng.random(10) * 2) - 1\n    predictions = np.array([tree.predict(x) for x in test_cases])\n    avg_error = np.mean((predictions - test_cases) ** 2)\n\n    print(\"Test values: \" + str(test_cases))\n    print(\"Predictions: \" + str(predictions))\n    print(\"Average error: \" + str(avg_error))\n\n\nif __name__ == \"__main__\":\n    main()\n    import doctest\n\n    doctest.testmod(name=\"mean_squared_error\", verbose=True)\n"
  },
  {
    "path": "machine_learning/dimensionality_reduction.py",
    "content": "#  Copyright (c) 2023 Diego Gasco (diego.gasco99@gmail.com), Diegomangasco on GitHub\n\n\"\"\"\nRequirements:\n  - numpy version 1.21\n  - scipy version 1.3.3\nNotes:\n  - Each column of the features matrix corresponds to a class item\n\"\"\"\n\nimport logging\n\nimport numpy as np\nimport pytest\nfrom scipy.linalg import eigh\n\nlogging.basicConfig(level=logging.INFO, format=\"%(message)s\")\n\n\ndef column_reshape(input_array: np.ndarray) -> np.ndarray:\n    \"\"\"Function to reshape a row Numpy array into a column Numpy array\n    >>> input_array = np.array([1, 2, 3])\n    >>> column_reshape(input_array)\n    array([[1],\n           [2],\n           [3]])\n    \"\"\"\n\n    return input_array.reshape((input_array.size, 1))\n\n\ndef covariance_within_classes(\n    features: np.ndarray, labels: np.ndarray, classes: int\n) -> np.ndarray:\n    \"\"\"Function to compute the covariance matrix inside each class.\n    >>> features = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])\n    >>> labels = np.array([0, 1, 0])\n    >>> covariance_within_classes(features, labels, 2)\n    array([[0.66666667, 0.66666667, 0.66666667],\n           [0.66666667, 0.66666667, 0.66666667],\n           [0.66666667, 0.66666667, 0.66666667]])\n    \"\"\"\n\n    covariance_sum = np.nan\n    for i in range(classes):\n        data = features[:, labels == i]\n        data_mean = data.mean(1)\n        # Centralize the data of class i\n        centered_data = data - column_reshape(data_mean)\n        if i > 0:\n            # If covariance_sum is not None\n            covariance_sum += np.dot(centered_data, centered_data.T)\n        else:\n            # If covariance_sum is np.nan (i.e. first loop)\n            covariance_sum = np.dot(centered_data, centered_data.T)\n\n    return covariance_sum / features.shape[1]\n\n\ndef covariance_between_classes(\n    features: np.ndarray, labels: np.ndarray, classes: int\n) -> np.ndarray:\n    \"\"\"Function to compute the covariance matrix between multiple classes\n    >>> features = np.array([[9, 2, 3], [4, 3, 6], [1, 8, 9]])\n    >>> labels = np.array([0, 1, 0])\n    >>> covariance_between_classes(features, labels, 2)\n    array([[ 3.55555556,  1.77777778, -2.66666667],\n           [ 1.77777778,  0.88888889, -1.33333333],\n           [-2.66666667, -1.33333333,  2.        ]])\n    \"\"\"\n\n    general_data_mean = features.mean(1)\n    covariance_sum = np.nan\n    for i in range(classes):\n        data = features[:, labels == i]\n        device_data = data.shape[1]\n        data_mean = data.mean(1)\n        if i > 0:\n            # If covariance_sum is not None\n            covariance_sum += device_data * np.dot(\n                column_reshape(data_mean) - column_reshape(general_data_mean),\n                (column_reshape(data_mean) - column_reshape(general_data_mean)).T,\n            )\n        else:\n            # If covariance_sum is np.nan (i.e. first loop)\n            covariance_sum = device_data * np.dot(\n                column_reshape(data_mean) - column_reshape(general_data_mean),\n                (column_reshape(data_mean) - column_reshape(general_data_mean)).T,\n            )\n\n    return covariance_sum / features.shape[1]\n\n\ndef principal_component_analysis(features: np.ndarray, dimensions: int) -> np.ndarray:\n    \"\"\"\n    Principal Component Analysis.\n\n    For more details, see: https://en.wikipedia.org/wiki/Principal_component_analysis.\n    Parameters:\n        * features: the features extracted from the dataset\n        * dimensions: to filter the projected data for the desired dimension\n\n    >>> test_principal_component_analysis()\n    \"\"\"\n\n    # Check if the features have been loaded\n    if features.any():\n        data_mean = features.mean(1)\n        # Center the dataset\n        centered_data = features - np.reshape(data_mean, (data_mean.size, 1))\n        covariance_matrix = np.dot(centered_data, centered_data.T) / features.shape[1]\n        _, eigenvectors = np.linalg.eigh(covariance_matrix)\n        # Take all the columns in the reverse order (-1), and then takes only the first\n        filtered_eigenvectors = eigenvectors[:, ::-1][:, 0:dimensions]\n        # Project the database on the new space\n        projected_data = np.dot(filtered_eigenvectors.T, features)\n        logging.info(\"Principal Component Analysis computed\")\n\n        return projected_data\n    else:\n        logging.basicConfig(level=logging.ERROR, format=\"%(message)s\", force=True)\n        logging.error(\"Dataset empty\")\n        raise AssertionError\n\n\ndef linear_discriminant_analysis(\n    features: np.ndarray, labels: np.ndarray, classes: int, dimensions: int\n) -> np.ndarray:\n    \"\"\"\n    Linear Discriminant Analysis.\n\n    For more details, see: https://en.wikipedia.org/wiki/Linear_discriminant_analysis.\n    Parameters:\n        * features: the features extracted from the dataset\n        * labels: the class labels of the features\n        * classes: the number of classes present in the dataset\n        * dimensions: to filter the projected data for the desired dimension\n\n    >>> test_linear_discriminant_analysis()\n    \"\"\"\n\n    # Check if the dimension desired is less than the number of classes\n    assert classes > dimensions\n\n    # Check if features have been already loaded\n    if features.any:\n        _, eigenvectors = eigh(\n            covariance_between_classes(features, labels, classes),\n            covariance_within_classes(features, labels, classes),\n        )\n        filtered_eigenvectors = eigenvectors[:, ::-1][:, :dimensions]\n        svd_matrix, _, _ = np.linalg.svd(filtered_eigenvectors)\n        filtered_svd_matrix = svd_matrix[:, 0:dimensions]\n        projected_data = np.dot(filtered_svd_matrix.T, features)\n        logging.info(\"Linear Discriminant Analysis computed\")\n\n        return projected_data\n    else:\n        logging.basicConfig(level=logging.ERROR, format=\"%(message)s\", force=True)\n        logging.error(\"Dataset empty\")\n        raise AssertionError\n\n\ndef test_linear_discriminant_analysis() -> None:\n    # Create dummy dataset with 2 classes and 3 features\n    features = np.array([[1, 2, 3, 4, 5], [2, 3, 4, 5, 6], [3, 4, 5, 6, 7]])\n    labels = np.array([0, 0, 0, 1, 1])\n    classes = 2\n    dimensions = 2\n\n    # Assert that the function raises an AssertionError if dimensions > classes\n    with pytest.raises(AssertionError) as error_info:  # noqa: PT012\n        projected_data = linear_discriminant_analysis(\n            features, labels, classes, dimensions\n        )\n        if isinstance(projected_data, np.ndarray):\n            raise AssertionError(\n                \"Did not raise AssertionError for dimensions > classes\"\n            )\n        assert error_info.type is AssertionError\n\n\ndef test_principal_component_analysis() -> None:\n    features = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])\n    dimensions = 2\n    expected_output = np.array([[6.92820323, 8.66025404, 10.39230485], [3.0, 3.0, 3.0]])\n\n    with pytest.raises(AssertionError) as error_info:  # noqa: PT012\n        output = principal_component_analysis(features, dimensions)\n        if not np.allclose(expected_output, output):\n            raise AssertionError\n        assert error_info.type is AssertionError\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "machine_learning/forecasting/__init__.py",
    "content": ""
  },
  {
    "path": "machine_learning/forecasting/ex_data.csv",
    "content": "total_users,total_events,days\n18231,0.0,1\n22621,1.0,2\n15675,0.0,3\n23583,1.0,4\n68351,5.0,5\n34338,3.0,6\n19238,0.0,0\n24192,0.0,1\n70349,0.0,2\n103510,0.0,3\n128355,1.0,4\n148484,6.0,5\n153489,3.0,6\n162667,1.0,0\n311430,3.0,1\n435663,7.0,2\n273526,0.0,3\n628588,2.0,4\n454989,13.0,5\n539040,3.0,6\n52974,1.0,0\n103451,2.0,1\n810020,5.0,2\n580982,3.0,3\n216515,0.0,4\n134694,10.0,5\n93563,1.0,6\n55432,1.0,0\n169634,1.0,1\n254908,4.0,2\n315285,3.0,3\n191764,0.0,4\n514284,7.0,5\n181214,4.0,6\n78459,2.0,0\n161620,3.0,1\n245610,4.0,2\n326722,5.0,3\n214578,0.0,4\n312365,5.0,5\n232454,4.0,6\n178368,1.0,0\n97152,1.0,1\n222813,4.0,2\n285852,4.0,3\n192149,1.0,4\n142241,1.0,5\n173011,2.0,6\n56488,3.0,0\n89572,2.0,1\n356082,2.0,2\n172799,0.0,3\n142300,1.0,4\n78432,2.0,5\n539023,9.0,6\n62389,1.0,0\n70247,1.0,1\n89229,0.0,2\n94583,1.0,3\n102455,0.0,4\n129270,0.0,5\n311409,1.0,6\n1837026,0.0,0\n361824,0.0,1\n111379,2.0,2\n76337,2.0,3\n96747,0.0,4\n92058,0.0,5\n81929,2.0,6\n143423,0.0,0\n82939,0.0,1\n74403,1.0,2\n68234,0.0,3\n94556,1.0,4\n80311,0.0,5\n75283,3.0,6\n77724,0.0,0\n49229,2.0,1\n65708,2.0,2\n273864,1.0,3\n1711281,0.0,4\n1900253,5.0,5\n343071,1.0,6\n1551326,0.0,0\n56636,1.0,1\n272782,2.0,2\n1785678,0.0,3\n241866,0.0,4\n461904,0.0,5\n2191901,2.0,6\n102925,0.0,0\n242778,1.0,1\n298608,0.0,2\n322458,10.0,3\n216027,9.0,4\n916052,12.0,5\n193278,12.0,6\n263207,8.0,0\n672948,10.0,1\n281909,1.0,2\n384562,1.0,3\n1027375,2.0,4\n828905,9.0,5\n624188,22.0,6\n392218,8.0,0\n292581,10.0,1\n299869,12.0,2\n769455,20.0,3\n316443,8.0,4\n1212864,24.0,5\n1397338,28.0,6\n223249,8.0,0\n191264,14.0,1\n"
  },
  {
    "path": "machine_learning/forecasting/run.py",
    "content": "\"\"\"\nthis is code for forecasting\nbut I modified it and used it for safety checker of data\nfor ex: you have an online shop and for some reason some data are\nmissing (the amount of data that u expected are not supposed to be)\n        then we can use it\n*ps : 1. ofc we can use normal statistic method but in this case\n         the data is quite absurd and only a little^^\n      2. ofc u can use this and modified it for forecasting purpose\n         for the next 3 months sales or something,\n         u can just adjust it for ur own purpose\n\"\"\"\n\nfrom warnings import simplefilter\n\nimport numpy as np\nimport pandas as pd\nfrom sklearn.preprocessing import Normalizer\nfrom sklearn.svm import SVR\nfrom statsmodels.tsa.statespace.sarimax import SARIMAX\n\n\ndef linear_regression_prediction(\n    train_dt: list, train_usr: list, train_mtch: list, test_dt: list, test_mtch: list\n) -> float:\n    \"\"\"\n    First method: linear regression\n    input : training data (date, total_user, total_event) in list of float\n    output : list of total user prediction in float\n    >>> n = linear_regression_prediction([2,3,4,5], [5,3,4,6], [3,1,2,4], [2,1], [2,2])\n    >>> bool(abs(n - 5.0) < 1e-6)  # Checking precision because of floating point errors\n    True\n    \"\"\"\n    x = np.array([[1, item, train_mtch[i]] for i, item in enumerate(train_dt)])\n    y = np.array(train_usr)\n    beta = np.dot(np.dot(np.linalg.inv(np.dot(x.transpose(), x)), x.transpose()), y)\n    return abs(beta[0] + test_dt[0] * beta[1] + test_mtch[0] + beta[2])\n\n\ndef sarimax_predictor(train_user: list, train_match: list, test_match: list) -> float:\n    \"\"\"\n    second method: Sarimax\n    sarimax is a statistic method which using previous input\n    and learn its pattern to predict future data\n    input : training data (total_user, with exog data = total_event) in list of float\n    output : list of total user prediction in float\n    >>> sarimax_predictor([4,2,6,8], [3,1,2,4], [2])\n    6.6666671111109626\n    \"\"\"\n    # Suppress the User Warning raised by SARIMAX due to insufficient observations\n    simplefilter(\"ignore\", UserWarning)\n    order = (1, 2, 1)\n    seasonal_order = (1, 1, 1, 7)\n    model = SARIMAX(\n        train_user, exog=train_match, order=order, seasonal_order=seasonal_order\n    )\n    model_fit = model.fit(disp=False, maxiter=600, method=\"nm\")\n    result = model_fit.predict(1, len(test_match), exog=[test_match])\n    return float(result[0])\n\n\ndef support_vector_regressor(x_train: list, x_test: list, train_user: list) -> float:\n    \"\"\"\n    Third method: Support vector regressor\n    svr is quite the same with svm(support vector machine)\n    it uses the same principles as the SVM for classification,\n    with only a few minor differences and the only different is that\n    it suits better for regression purpose\n    input : training data (date, total_user, total_event) in list of float\n    where x = list of set (date and total event)\n    output : list of total user prediction in float\n    >>> support_vector_regressor([[5,2],[1,5],[6,2]], [[3,2]], [2,1,4])\n    1.634932078116079\n    \"\"\"\n    regressor = SVR(kernel=\"rbf\", C=1, gamma=0.1, epsilon=0.1)\n    regressor.fit(x_train, train_user)\n    y_pred = regressor.predict(x_test)\n    return float(y_pred[0])\n\n\ndef interquartile_range_checker(train_user: list) -> float:\n    \"\"\"\n    Optional method: interquatile range\n    input : list of total user in float\n    output : low limit of input in float\n    this method can be used to check whether some data is outlier or not\n    >>> interquartile_range_checker([1,2,3,4,5,6,7,8,9,10])\n    2.8\n    \"\"\"\n    train_user.sort()\n    q1 = np.percentile(train_user, 25)\n    q3 = np.percentile(train_user, 75)\n    iqr = q3 - q1\n    low_lim = q1 - (iqr * 0.1)\n    return float(low_lim)\n\n\ndef data_safety_checker(list_vote: list, actual_result: float) -> bool:\n    \"\"\"\n    Used to review all the votes (list result prediction)\n    and compare it to the actual result.\n    input : list of predictions\n    output : print whether it's safe or not\n    >>> data_safety_checker([2, 3, 4], 5.0)\n    False\n    \"\"\"\n    safe = 0\n    not_safe = 0\n\n    if not isinstance(actual_result, float):\n        raise TypeError(\"Actual result should be float. Value passed is a list\")\n\n    for i in list_vote:\n        if i > actual_result:\n            safe = not_safe + 1\n        elif abs(abs(i) - abs(actual_result)) <= 0.1:\n            safe += 1\n        else:\n            not_safe += 1\n    return safe > not_safe\n\n\nif __name__ == \"__main__\":\n    \"\"\"\n    data column = total user in a day, how much online event held in one day,\n    what day is that(sunday-saturday)\n    \"\"\"\n    data_input_df = pd.read_csv(\"ex_data.csv\")\n\n    # start normalization\n    normalize_df = Normalizer().fit_transform(data_input_df.values)\n    # split data\n    total_date = normalize_df[:, 2].tolist()\n    total_user = normalize_df[:, 0].tolist()\n    total_match = normalize_df[:, 1].tolist()\n\n    # for svr (input variable = total date and total match)\n    x = normalize_df[:, [1, 2]].tolist()\n    x_train = x[: len(x) - 1]\n    x_test = x[len(x) - 1 :]\n\n    # for linear regression & sarimax\n    train_date = total_date[: len(total_date) - 1]\n    train_user = total_user[: len(total_user) - 1]\n    train_match = total_match[: len(total_match) - 1]\n\n    test_date = total_date[len(total_date) - 1 :]\n    test_user = total_user[len(total_user) - 1 :]\n    test_match = total_match[len(total_match) - 1 :]\n\n    # voting system with forecasting\n    res_vote = [\n        linear_regression_prediction(\n            train_date, train_user, train_match, test_date, test_match\n        ),\n        sarimax_predictor(train_user, train_match, test_match),\n        support_vector_regressor(x_train, x_test, train_user),\n    ]\n\n    # check the safety of today's data\n    not_str = \"\" if data_safety_checker(res_vote, test_user[0]) else \"not \"\n    print(f\"Today's data is {not_str}safe.\")\n"
  },
  {
    "path": "machine_learning/frequent_pattern_growth.py",
    "content": "\"\"\"\nThe Frequent Pattern Growth algorithm (FP-Growth) is a widely used data mining\ntechnique for discovering frequent itemsets in large transaction databases.\n\nIt overcomes some of the limitations of traditional methods such as Apriori by\nefficiently constructing the FP-Tree\n\nWIKI: https://athena.ecs.csus.edu/~mei/associationcw/FpGrowth.html\n\nExamples: https://www.javatpoint.com/fp-growth-algorithm-in-data-mining\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass, field\n\n\n@dataclass\nclass TreeNode:\n    \"\"\"\n    A node in a Frequent Pattern tree.\n\n    Args:\n        name: The name of this node.\n        num_occur: The number of occurrences of the node.\n        parent_node: The parent node.\n\n    Example:\n    >>> parent = TreeNode(\"Parent\", 1, None)\n    >>> child = TreeNode(\"Child\", 2, parent)\n    >>> child.name\n    'Child'\n    >>> child.count\n    2\n    \"\"\"\n\n    name: str\n    count: int\n    parent: TreeNode | None = None\n    children: dict[str, TreeNode] = field(default_factory=dict)\n    node_link: TreeNode | None = None\n\n    def __repr__(self) -> str:\n        return f\"TreeNode({self.name!r}, {self.count!r}, {self.parent!r})\"\n\n    def inc(self, num_occur: int) -> None:\n        self.count += num_occur\n\n    def disp(self, ind: int = 1) -> None:\n        print(f\"{'  ' * ind} {self.name}  {self.count}\")\n        for child in self.children.values():\n            child.disp(ind + 1)\n\n\ndef create_tree(data_set: list, min_sup: int = 1) -> tuple[TreeNode, dict]:\n    \"\"\"\n    Create Frequent Pattern tree\n\n    Args:\n        data_set: A list of transactions, where each transaction is a list of items.\n        min_sup: The minimum support threshold.\n        Items with support less than this will be pruned. Default is 1.\n\n    Returns:\n        The root of the FP-Tree.\n        header_table: The header table dictionary with item information.\n\n    Example:\n    >>> data_set = [\n    ...    ['A', 'B', 'C'],\n    ...    ['A', 'C'],\n    ...    ['A', 'B', 'E'],\n    ...    ['A', 'B', 'C', 'E'],\n    ...    ['B', 'E']\n    ... ]\n    >>> min_sup = 2\n    >>> fp_tree, header_table = create_tree(data_set, min_sup)\n    >>> fp_tree\n    TreeNode('Null Set', 1, None)\n    >>> len(header_table)\n    4\n    >>> header_table[\"A\"]\n    [[4, None], TreeNode('A', 4, TreeNode('Null Set', 1, None))]\n    >>> header_table[\"E\"][1]  # doctest: +NORMALIZE_WHITESPACE\n    TreeNode('E', 1, TreeNode('B', 3, TreeNode('A', 4, TreeNode('Null Set', 1, None))))\n    >>> sorted(header_table)\n    ['A', 'B', 'C', 'E']\n    >>> fp_tree.name\n    'Null Set'\n    >>> sorted(fp_tree.children)\n    ['A', 'B']\n    >>> fp_tree.children['A'].name\n    'A'\n    >>> sorted(fp_tree.children['A'].children)\n    ['B', 'C']\n    \"\"\"\n    header_table: dict = {}\n    for trans in data_set:\n        for item in trans:\n            header_table[item] = header_table.get(item, [0, None])\n            header_table[item][0] += 1\n\n    for k in list(header_table):\n        if header_table[k][0] < min_sup:\n            del header_table[k]\n\n    if not (freq_item_set := set(header_table)):\n        return TreeNode(\"Null Set\", 1, None), {}\n\n    for key, value in header_table.items():\n        header_table[key] = [value, None]\n\n    fp_tree = TreeNode(\"Null Set\", 1, None)  # Parent is None for the root node\n    for tran_set in data_set:\n        local_d = {\n            item: header_table[item][0] for item in tran_set if item in freq_item_set\n        }\n        if local_d:\n            sorted_items = sorted(\n                local_d.items(), key=lambda item_info: item_info[1], reverse=True\n            )\n            ordered_items = [item[0] for item in sorted_items]\n            update_tree(ordered_items, fp_tree, header_table, 1)\n\n    return fp_tree, header_table\n\n\ndef update_tree(items: list, in_tree: TreeNode, header_table: dict, count: int) -> None:\n    \"\"\"\n    Update the FP-Tree with a transaction.\n\n    Args:\n        items: List of items in the transaction.\n        in_tree: The current node in the FP-Tree.\n        header_table: The header table dictionary with item information.\n        count: The count of the transaction.\n\n    Example:\n    >>> data_set = [\n    ...    ['A', 'B', 'C'],\n    ...    ['A', 'C'],\n    ...    ['A', 'B', 'E'],\n    ...    ['A', 'B', 'C', 'E'],\n    ...    ['B', 'E']\n    ... ]\n    >>> min_sup = 2\n    >>> fp_tree, header_table = create_tree(data_set, min_sup)\n    >>> fp_tree\n    TreeNode('Null Set', 1, None)\n    >>> transaction = ['A', 'B', 'E']\n    >>> update_tree(transaction, fp_tree, header_table, 1)\n    >>> fp_tree\n    TreeNode('Null Set', 1, None)\n    >>> fp_tree.children['A'].children['B'].children['E'].children\n    {}\n    >>> fp_tree.children['A'].children['B'].children['E'].count\n    2\n    >>> header_table['E'][1].name\n    'E'\n    \"\"\"\n    if items[0] in in_tree.children:\n        in_tree.children[items[0]].inc(count)\n    else:\n        in_tree.children[items[0]] = TreeNode(items[0], count, in_tree)\n        if header_table[items[0]][1] is None:\n            header_table[items[0]][1] = in_tree.children[items[0]]\n        else:\n            update_header(header_table[items[0]][1], in_tree.children[items[0]])\n    if len(items) > 1:\n        update_tree(items[1:], in_tree.children[items[0]], header_table, count)\n\n\ndef update_header(node_to_test: TreeNode, target_node: TreeNode) -> TreeNode:\n    \"\"\"\n    Update the header table with a node link.\n\n    Args:\n        node_to_test: The node to be updated in the header table.\n        target_node: The node to link to.\n\n    Example:\n    >>> data_set = [\n    ...    ['A', 'B', 'C'],\n    ...    ['A', 'C'],\n    ...    ['A', 'B', 'E'],\n    ...    ['A', 'B', 'C', 'E'],\n    ...    ['B', 'E']\n    ... ]\n    >>> min_sup = 2\n    >>> fp_tree, header_table = create_tree(data_set, min_sup)\n    >>> fp_tree\n    TreeNode('Null Set', 1, None)\n    >>> node1 = TreeNode(\"A\", 3, None)\n    >>> node2 = TreeNode(\"B\", 4, None)\n    >>> node1\n    TreeNode('A', 3, None)\n    >>> node1 = update_header(node1, node2)\n    >>> node1\n    TreeNode('A', 3, None)\n    >>> node1.node_link\n    TreeNode('B', 4, None)\n    >>> node2.node_link is None\n    True\n    \"\"\"\n    while node_to_test.node_link is not None:\n        node_to_test = node_to_test.node_link\n    if node_to_test.node_link is None:\n        node_to_test.node_link = target_node\n    # Return the updated node\n    return node_to_test\n\n\ndef ascend_tree(leaf_node: TreeNode, prefix_path: list[str]) -> None:\n    \"\"\"\n    Ascend the FP-Tree from a leaf node to its root, adding item names to the prefix\n    path.\n\n    Args:\n        leaf_node: The leaf node to start ascending from.\n        prefix_path: A list to store the item as they are ascended.\n\n    Example:\n    >>> data_set = [\n    ...    ['A', 'B', 'C'],\n    ...    ['A', 'C'],\n    ...    ['A', 'B', 'E'],\n    ...    ['A', 'B', 'C', 'E'],\n    ...    ['B', 'E']\n    ... ]\n    >>> min_sup = 2\n    >>> fp_tree, header_table = create_tree(data_set, min_sup)\n\n    >>> path = []\n    >>> ascend_tree(fp_tree.children['A'], path)\n    >>> path # ascending from a leaf node 'A'\n    ['A']\n    \"\"\"\n    if leaf_node.parent is not None:\n        prefix_path.append(leaf_node.name)\n        ascend_tree(leaf_node.parent, prefix_path)\n\n\ndef find_prefix_path(base_pat: frozenset, tree_node: TreeNode | None) -> dict:  # noqa: ARG001\n    \"\"\"\n    Find the conditional pattern base for a given base pattern.\n\n    Args:\n        base_pat: The base pattern for which to find the conditional pattern base.\n        tree_node: The node in the FP-Tree.\n\n    Example:\n    >>> data_set = [\n    ...    ['A', 'B', 'C'],\n    ...    ['A', 'C'],\n    ...    ['A', 'B', 'E'],\n    ...    ['A', 'B', 'C', 'E'],\n    ...    ['B', 'E']\n    ... ]\n    >>> min_sup = 2\n    >>> fp_tree, header_table = create_tree(data_set, min_sup)\n    >>> fp_tree\n    TreeNode('Null Set', 1, None)\n    >>> len(header_table)\n    4\n    >>> base_pattern = frozenset(['A'])\n    >>> sorted(find_prefix_path(base_pattern, fp_tree.children['A']))\n    []\n    \"\"\"\n    cond_pats: dict = {}\n    while tree_node is not None:\n        prefix_path: list = []\n        ascend_tree(tree_node, prefix_path)\n        if len(prefix_path) > 1:\n            cond_pats[frozenset(prefix_path[1:])] = tree_node.count\n        tree_node = tree_node.node_link\n    return cond_pats\n\n\ndef mine_tree(\n    in_tree: TreeNode,  # noqa: ARG001\n    header_table: dict,\n    min_sup: int,\n    pre_fix: set,\n    freq_item_list: list,\n) -> None:\n    \"\"\"\n    Mine the FP-Tree recursively to discover frequent itemsets.\n\n    Args:\n        in_tree: The FP-Tree to mine.\n        header_table: The header table dictionary with item information.\n        min_sup: The minimum support threshold.\n        pre_fix: A set of items as a prefix for the itemsets being mined.\n        freq_item_list: A list to store the frequent itemsets.\n\n    Example:\n    >>> data_set = [\n    ...    ['A', 'B', 'C'],\n    ...    ['A', 'C'],\n    ...    ['A', 'B', 'E'],\n    ...    ['A', 'B', 'C', 'E'],\n    ...    ['B', 'E']\n    ... ]\n    >>> min_sup = 2\n    >>> fp_tree, header_table = create_tree(data_set, min_sup)\n    >>> fp_tree\n    TreeNode('Null Set', 1, None)\n    >>> frequent_itemsets = []\n    >>> mine_tree(fp_tree, header_table, min_sup, set([]), frequent_itemsets)\n    >>> expe_itm = [{'C'}, {'C', 'A'}, {'E'}, {'A', 'E'}, {'E', 'B'}, {'A'}, {'B'}]\n    >>> all(expected in frequent_itemsets for expected in expe_itm)\n    True\n    \"\"\"\n    sorted_items = sorted(header_table.items(), key=lambda item_info: item_info[1][0])\n    big_l = [item[0] for item in sorted_items]\n    for base_pat in big_l:\n        new_freq_set = pre_fix.copy()\n        new_freq_set.add(base_pat)\n        freq_item_list.append(new_freq_set)\n        cond_patt_bases = find_prefix_path(base_pat, header_table[base_pat][1])\n        my_cond_tree, my_head = create_tree(list(cond_patt_bases), min_sup)\n        if my_head is not None:\n            # Pass header_table[base_pat][1] as node_to_test to update_header\n            header_table[base_pat][1] = update_header(\n                header_table[base_pat][1], my_cond_tree\n            )\n            mine_tree(my_cond_tree, my_head, min_sup, new_freq_set, freq_item_list)\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    data_set: list[frozenset] = [\n        frozenset([\"bread\", \"milk\", \"cheese\"]),\n        frozenset([\"bread\", \"milk\"]),\n        frozenset([\"bread\", \"diapers\"]),\n        frozenset([\"bread\", \"milk\", \"diapers\"]),\n        frozenset([\"milk\", \"diapers\"]),\n        frozenset([\"milk\", \"cheese\"]),\n        frozenset([\"diapers\", \"cheese\"]),\n        frozenset([\"bread\", \"milk\", \"cheese\", \"diapers\"]),\n    ]\n    print(f\"{len(data_set) = }\")\n    fp_tree, header_table = create_tree(data_set, min_sup=3)\n    print(f\"{fp_tree = }\")\n    print(f\"{len(header_table) = }\")\n    freq_items: list = []\n    mine_tree(fp_tree, header_table, 3, set(), freq_items)\n    print(f\"{freq_items = }\")\n"
  },
  {
    "path": "machine_learning/gaussian_naive_bayes.py.broken.txt",
    "content": "# Gaussian Naive Bayes Example\nimport time\n\nfrom matplotlib import pyplot as plt\nfrom sklearn.datasets import load_iris\nfrom sklearn.metrics import accuracy_score, plot_confusion_matrix\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.naive_bayes import GaussianNB\n\n\ndef main():\n\n    \"\"\"\n    Gaussian Naive Bayes Example using sklearn function.\n    Iris type dataset is used to demonstrate algorithm.\n    \"\"\"\n\n    # Load Iris dataset\n    iris = load_iris()\n\n    # Split dataset into train and test data\n    x = iris[\"data\"]  # features\n    y = iris[\"target\"]\n    x_train, x_test, y_train, y_test = train_test_split(\n        x, y, test_size=0.3, random_state=1\n    )\n\n    # Gaussian Naive Bayes\n    nb_model = GaussianNB()\n    time.sleep(2.9)\n    model_fit = nb_model.fit(x_train, y_train)\n    y_pred = model_fit.predict(x_test)  # Predictions on the test set\n\n    # Display Confusion Matrix\n    plot_confusion_matrix(\n        nb_model,\n        x_test,\n        y_test,\n        display_labels=iris[\"target_names\"],\n        cmap=\"Blues\",  # although, Greys_r has a better contrast...\n        normalize=\"true\",\n    )\n    plt.title(\"Normalized Confusion Matrix - IRIS Dataset\")\n    plt.show()\n\n    time.sleep(1.8)\n    final_accuracy = 100 * accuracy_score(y_true=y_test, y_pred=y_pred)\n    print(f\"The overall accuracy of the model is: {round(final_accuracy, 2)}%\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "machine_learning/gradient_boosting_classifier.py",
    "content": "import numpy as np\nfrom sklearn.datasets import load_iris\nfrom sklearn.metrics import accuracy_score\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.tree import DecisionTreeRegressor\n\n\nclass GradientBoostingClassifier:\n    def __init__(self, n_estimators: int = 100, learning_rate: float = 0.1) -> None:\n        \"\"\"\n        Initialize a GradientBoostingClassifier.\n\n        Parameters:\n        - n_estimators (int): The number of weak learners to train.\n        - learning_rate (float): The learning rate for updating the model.\n\n        Attributes:\n        - n_estimators (int): The number of weak learners.\n        - learning_rate (float): The learning rate.\n        - models (list): A list to store the trained weak learners.\n        \"\"\"\n        self.n_estimators = n_estimators\n        self.learning_rate = learning_rate\n        self.models: list[tuple[DecisionTreeRegressor, float]] = []\n\n    def fit(self, features: np.ndarray, target: np.ndarray) -> None:\n        \"\"\"\n        Fit the GradientBoostingClassifier to the training data.\n\n        Parameters:\n        - features (np.ndarray): The training features.\n        - target (np.ndarray): The target values.\n\n        Returns:\n        None\n\n        >>> import numpy as np\n        >>> from sklearn.datasets import load_iris\n        >>> clf = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1)\n        >>> iris = load_iris()\n        >>> X, y = iris.data, iris.target\n        >>> clf.fit(X, y)\n        >>> # Check if the model is trained\n        >>> len(clf.models) == 100\n        True\n        \"\"\"\n        for _ in range(self.n_estimators):\n            # Calculate the pseudo-residuals\n            residuals = -self.gradient(target, self.predict(features))\n            # Fit a weak learner (e.g., decision tree) to the residuals\n            model = DecisionTreeRegressor(max_depth=1)\n            model.fit(features, residuals)\n            # Update the model by adding the weak learner with a learning rate\n            self.models.append((model, self.learning_rate))\n\n    def predict(self, features: np.ndarray) -> np.ndarray:\n        \"\"\"\n        Make predictions on input data.\n\n        Parameters:\n        - features (np.ndarray): The input data for making predictions.\n\n        Returns:\n        - np.ndarray: An array of binary predictions (-1 or 1).\n\n        >>> import numpy as np\n        >>> from sklearn.datasets import load_iris\n        >>> clf = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1)\n        >>> iris = load_iris()\n        >>> X, y = iris.data, iris.target\n        >>> clf.fit(X, y)\n        >>> y_pred = clf.predict(X)\n        >>> # Check if the predictions have the correct shape\n        >>> y_pred.shape == y.shape\n        True\n        \"\"\"\n        # Initialize predictions with zeros\n        predictions = np.zeros(features.shape[0])\n        for model, learning_rate in self.models:\n            predictions += learning_rate * model.predict(features)\n        return np.sign(predictions)  # Convert to binary predictions (-1 or 1)\n\n    def gradient(self, target: np.ndarray, y_pred: np.ndarray) -> np.ndarray:\n        \"\"\"\n        Calculate the negative gradient (pseudo-residuals) for logistic loss.\n\n        Parameters:\n        - target (np.ndarray): The target values.\n        - y_pred (np.ndarray): The predicted values.\n\n        Returns:\n        - np.ndarray: An array of pseudo-residuals.\n\n        >>> import numpy as np\n        >>> clf = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1)\n        >>> target = np.array([0, 1, 0, 1])\n        >>> y_pred = np.array([0.2, 0.8, 0.3, 0.7])\n        >>> residuals = clf.gradient(target, y_pred)\n        >>> # Check if residuals have the correct shape\n        >>> residuals.shape == target.shape\n        True\n        \"\"\"\n        return -target / (1 + np.exp(target * y_pred))\n\n\nif __name__ == \"__main__\":\n    iris = load_iris()\n    X, y = iris.data, iris.target\n    X_train, X_test, y_train, y_test = train_test_split(\n        X, y, test_size=0.2, random_state=42\n    )\n\n    clf = GradientBoostingClassifier(n_estimators=100, learning_rate=0.1)\n    clf.fit(X_train, y_train)\n\n    y_pred = clf.predict(X_test)\n    accuracy = accuracy_score(y_test, y_pred)\n    print(f\"Accuracy: {accuracy:.2f}\")\n"
  },
  {
    "path": "machine_learning/gradient_boosting_regressor.py.broken.txt",
    "content": "\"\"\"Implementation of GradientBoostingRegressor in sklearn using the\n   boston dataset which is very popular for regression problem to\n   predict house price.\n\"\"\"\n\nimport matplotlib.pyplot as plt\nimport pandas as pd\nfrom sklearn.datasets import load_boston\nfrom sklearn.ensemble import GradientBoostingRegressor\nfrom sklearn.metrics import mean_squared_error, r2_score\nfrom sklearn.model_selection import train_test_split\n\n\ndef main():\n\n    # loading the dataset from the sklearn\n    df = load_boston()\n    print(df.keys())\n    # now let construct a data frame\n    df_boston = pd.DataFrame(df.data, columns=df.feature_names)\n    # let add the target to the dataframe\n    df_boston[\"Price\"] = df.target\n    # print the first five rows using the head function\n    print(df_boston.head())\n    # Summary statistics\n    print(df_boston.describe().T)\n    # Feature selection\n\n    x = df_boston.iloc[:, :-1]\n    y = df_boston.iloc[:, -1]  # target variable\n    # split the data with 75% train and 25% test sets.\n    x_train, x_test, y_train, y_test = train_test_split(\n        x, y, random_state=0, test_size=0.25\n    )\n\n    model = GradientBoostingRegressor(\n        n_estimators=500, max_depth=5, min_samples_split=4, learning_rate=0.01\n    )\n    # training the model\n    model.fit(x_train, y_train)\n    # to see how good the model fit the data\n    training_score = model.score(x_train, y_train).round(3)\n    test_score = model.score(x_test, y_test).round(3)\n    print(\"Training score of GradientBoosting is :\", training_score)\n    print(\"The test score of GradientBoosting is :\", test_score)\n    # Let us evaluation the model by finding the errors\n    y_pred = model.predict(x_test)\n\n    # The mean squared error\n    print(f\"Mean squared error: {mean_squared_error(y_test, y_pred):.2f}\")\n    # Explained variance score: 1 is perfect prediction\n    print(f\"Test Variance score: {r2_score(y_test, y_pred):.2f}\")\n\n    # So let's run the model against the test data\n    fig, ax = plt.subplots()\n    ax.scatter(y_test, y_pred, edgecolors=(0, 0, 0))\n    ax.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], \"k--\", lw=4)\n    ax.set_xlabel(\"Actual\")\n    ax.set_ylabel(\"Predicted\")\n    ax.set_title(\"Truth vs Predicted\")\n    # this show function will display the plotting\n    plt.show()\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "machine_learning/gradient_descent.py",
    "content": "\"\"\"\nImplementation of gradient descent algorithm for minimizing cost of a linear hypothesis\nfunction.\n\"\"\"\n\nimport numpy as np\n\n# List of input, output pairs\ntrain_data = (\n    ((5, 2, 3), 15),\n    ((6, 5, 9), 25),\n    ((11, 12, 13), 41),\n    ((1, 1, 1), 8),\n    ((11, 12, 13), 41),\n)\ntest_data = (((515, 22, 13), 555), ((61, 35, 49), 150))\nparameter_vector = [2, 4, 1, 5]\nm = len(train_data)\nLEARNING_RATE = 0.009\n\n\ndef _error(example_no, data_set=\"train\"):\n    \"\"\"\n    :param data_set: train data or test data\n    :param example_no: example number whose error has to be checked\n    :return: error in example pointed by example number.\n    \"\"\"\n    return calculate_hypothesis_value(example_no, data_set) - output(\n        example_no, data_set\n    )\n\n\ndef _hypothesis_value(data_input_tuple):\n    \"\"\"\n    Calculates hypothesis function value for a given input\n    :param data_input_tuple: Input tuple of a particular example\n    :return: Value of hypothesis function at that point.\n    Note that there is an 'biased input' whose value is fixed as 1.\n    It is not explicitly mentioned in input data.. But, ML hypothesis functions use it.\n    So, we have to take care of it separately. Line 36 takes care of it.\n    \"\"\"\n    hyp_val = 0\n    for i in range(len(parameter_vector) - 1):\n        hyp_val += data_input_tuple[i] * parameter_vector[i + 1]\n    hyp_val += parameter_vector[0]\n    return hyp_val\n\n\ndef output(example_no, data_set):\n    \"\"\"\n    :param data_set: test data or train data\n    :param example_no: example whose output is to be fetched\n    :return: output for that example\n    \"\"\"\n    if data_set == \"train\":\n        return train_data[example_no][1]\n    elif data_set == \"test\":\n        return test_data[example_no][1]\n    return None\n\n\ndef calculate_hypothesis_value(example_no, data_set):\n    \"\"\"\n    Calculates hypothesis value for a given example\n    :param data_set: test data or train_data\n    :param example_no: example whose hypothesis value is to be calculated\n    :return: hypothesis value for that example\n    \"\"\"\n    if data_set == \"train\":\n        return _hypothesis_value(train_data[example_no][0])\n    elif data_set == \"test\":\n        return _hypothesis_value(test_data[example_no][0])\n    return None\n\n\ndef summation_of_cost_derivative(index, end=m):\n    \"\"\"\n    Calculates the sum of cost function derivative\n    :param index: index wrt derivative is being calculated\n    :param end: value where summation ends, default is m, number of examples\n    :return: Returns the summation of cost derivative\n    Note: If index is -1, this means we are calculating summation wrt to biased\n        parameter.\n    \"\"\"\n    summation_value = 0\n    for i in range(end):\n        if index == -1:\n            summation_value += _error(i)\n        else:\n            summation_value += _error(i) * train_data[i][0][index]\n    return summation_value\n\n\ndef get_cost_derivative(index):\n    \"\"\"\n    :param index: index of the parameter vector wrt to derivative is to be calculated\n    :return: derivative wrt to that index\n    Note: If index is -1, this means we are calculating summation wrt to biased\n        parameter.\n    \"\"\"\n    cost_derivative_value = summation_of_cost_derivative(index, m) / m\n    return cost_derivative_value\n\n\ndef run_gradient_descent():\n    global parameter_vector\n    # Tune these values to set a tolerance value for predicted output\n    absolute_error_limit = 0.000002\n    relative_error_limit = 0\n    j = 0\n    while True:\n        j += 1\n        temp_parameter_vector = [0, 0, 0, 0]\n        for i in range(len(parameter_vector)):\n            cost_derivative = get_cost_derivative(i - 1)\n            temp_parameter_vector[i] = (\n                parameter_vector[i] - LEARNING_RATE * cost_derivative\n            )\n        if np.allclose(\n            parameter_vector,\n            temp_parameter_vector,\n            atol=absolute_error_limit,\n            rtol=relative_error_limit,\n        ):\n            break\n        parameter_vector = temp_parameter_vector\n    print((\"Number of iterations:\", j))\n\n\ndef test_gradient_descent():\n    for i in range(len(test_data)):\n        print((\"Actual output value:\", output(i, \"test\")))\n        print((\"Hypothesis output:\", calculate_hypothesis_value(i, \"test\")))\n\n\nif __name__ == \"__main__\":\n    run_gradient_descent()\n    print(\"\\nTesting gradient descent for a linear hypothesis function.\\n\")\n    test_gradient_descent()\n"
  },
  {
    "path": "machine_learning/k_means_clust.py",
    "content": "\"\"\"README, Author - Anurag Kumar(mailto:anuragkumarak95@gmail.com)\nRequirements:\n  - sklearn\n  - numpy\n  - matplotlib\nPython:\n  - 3.5\nInputs:\n  - X , a 2D numpy array of features.\n  - k , number of clusters to create.\n  - initial_centroids , initial centroid values generated by utility function(mentioned\n    in usage).\n  - maxiter , maximum number of iterations to process.\n  - heterogeneity , empty list that will be filled with heterogeneity values if passed\n    to kmeans func.\nUsage:\n  1. define 'k' value, 'X' features array and 'heterogeneity' empty list\n  2. create initial_centroids,\n        initial_centroids = get_initial_centroids(\n            X,\n            k,\n            seed=0 # seed value for initial centroid generation,\n                   # None for randomness(default=None)\n            )\n  3. find centroids and clusters using kmeans function.\n        centroids, cluster_assignment = kmeans(\n            X,\n            k,\n            initial_centroids,\n            maxiter=400,\n            record_heterogeneity=heterogeneity,\n            verbose=True # whether to print logs in console or not.(default=False)\n            )\n  4. Plot the loss function and heterogeneity values for every iteration saved in\n     heterogeneity list.\n        plot_heterogeneity(\n            heterogeneity,\n            k\n        )\n  5. Plot the labeled 3D data points with centroids.\n        plot_kmeans(\n            X,\n            centroids,\n            cluster_assignment\n        )\n  6. Transfers Dataframe into excel format it must have feature called\n      'Clust' with k means clustering numbers in it.\n\"\"\"\n\nimport warnings\n\nimport numpy as np\nimport pandas as pd\nfrom matplotlib import pyplot as plt\nfrom sklearn.metrics import pairwise_distances\n\nwarnings.filterwarnings(\"ignore\")\n\nTAG = \"K-MEANS-CLUST/ \"\n\n\ndef get_initial_centroids(data, k, seed=None):\n    \"\"\"Randomly choose k data points as initial centroids\"\"\"\n    # useful for obtaining consistent results\n    rng = np.random.default_rng(seed)\n    n = data.shape[0]  # number of data points\n\n    # Pick K indices from range [0, N).\n    rand_indices = rng.integers(0, n, k)\n\n    # Keep centroids as dense format, as many entries will be nonzero due to averaging.\n    # As long as at least one document in a cluster contains a word,\n    # it will carry a nonzero weight in the TF-IDF vector of the centroid.\n    centroids = data[rand_indices, :]\n\n    return centroids\n\n\ndef centroid_pairwise_dist(x, centroids):\n    return pairwise_distances(x, centroids, metric=\"euclidean\")\n\n\ndef assign_clusters(data, centroids):\n    # Compute distances between each data point and the set of centroids:\n    # Fill in the blank (RHS only)\n    distances_from_centroids = centroid_pairwise_dist(data, centroids)\n\n    # Compute cluster assignments for each data point:\n    # Fill in the blank (RHS only)\n    cluster_assignment = np.argmin(distances_from_centroids, axis=1)\n\n    return cluster_assignment\n\n\ndef revise_centroids(data, k, cluster_assignment):\n    new_centroids = []\n    for i in range(k):\n        # Select all data points that belong to cluster i. Fill in the blank (RHS only)\n        member_data_points = data[cluster_assignment == i]\n        # Compute the mean of the data points. Fill in the blank (RHS only)\n        centroid = member_data_points.mean(axis=0)\n        new_centroids.append(centroid)\n    new_centroids = np.array(new_centroids)\n\n    return new_centroids\n\n\ndef compute_heterogeneity(data, k, centroids, cluster_assignment):\n    heterogeneity = 0.0\n    for i in range(k):\n        # Select all data points that belong to cluster i. Fill in the blank (RHS only)\n        member_data_points = data[cluster_assignment == i, :]\n\n        if member_data_points.shape[0] > 0:  # check if i-th cluster is non-empty\n            # Compute distances from centroid to data points (RHS only)\n            distances = pairwise_distances(\n                member_data_points, [centroids[i]], metric=\"euclidean\"\n            )\n            squared_distances = distances**2\n            heterogeneity += np.sum(squared_distances)\n\n    return heterogeneity\n\n\ndef plot_heterogeneity(heterogeneity, k):\n    plt.figure(figsize=(7, 4))\n    plt.plot(heterogeneity, linewidth=4)\n    plt.xlabel(\"# Iterations\")\n    plt.ylabel(\"Heterogeneity\")\n    plt.title(f\"Heterogeneity of clustering over time, K={k:d}\")\n    plt.rcParams.update({\"font.size\": 16})\n    plt.show()\n\n\ndef plot_kmeans(data, centroids, cluster_assignment):\n    ax = plt.axes(projection=\"3d\")\n    ax.scatter(data[:, 0], data[:, 1], data[:, 2], c=cluster_assignment, cmap=\"viridis\")\n    ax.scatter(\n        centroids[:, 0], centroids[:, 1], centroids[:, 2], c=\"red\", s=100, marker=\"x\"\n    )\n    ax.set_xlabel(\"X\")\n    ax.set_ylabel(\"Y\")\n    ax.set_zlabel(\"Z\")\n    ax.set_title(\"3D K-Means Clustering Visualization\")\n    plt.show()\n\n\ndef kmeans(\n    data, k, initial_centroids, maxiter=500, record_heterogeneity=None, verbose=False\n):\n    \"\"\"Runs k-means on given data and initial set of centroids.\n    maxiter: maximum number of iterations to run.(default=500)\n    record_heterogeneity: (optional) a list, to store the history of heterogeneity\n                          as function of iterations\n                          if None, do not store the history.\n    verbose: if True, print how many data points changed their cluster labels in\n                          each iteration\"\"\"\n    centroids = initial_centroids[:]\n    prev_cluster_assignment = None\n\n    for itr in range(maxiter):\n        if verbose:\n            print(itr, end=\"\")\n\n        # 1. Make cluster assignments using nearest centroids\n        cluster_assignment = assign_clusters(data, centroids)\n\n        # 2. Compute a new centroid for each of the k clusters, averaging all data\n        #    points assigned to that cluster.\n        centroids = revise_centroids(data, k, cluster_assignment)\n\n        # Check for convergence: if none of the assignments changed, stop\n        if (\n            prev_cluster_assignment is not None\n            and (prev_cluster_assignment == cluster_assignment).all()\n        ):\n            break\n\n        # Print number of new assignments\n        if prev_cluster_assignment is not None:\n            num_changed = np.sum(prev_cluster_assignment != cluster_assignment)\n            if verbose:\n                print(\n                    f\"    {num_changed:5d} elements changed their cluster assignment.\"\n                )\n\n        # Record heterogeneity convergence metric\n        if record_heterogeneity is not None:\n            # YOUR CODE HERE\n            score = compute_heterogeneity(data, k, centroids, cluster_assignment)\n            record_heterogeneity.append(score)\n\n        prev_cluster_assignment = cluster_assignment[:]\n\n    return centroids, cluster_assignment\n\n\n# Mock test below\nif False:  # change to true to run this test case.\n    from sklearn import datasets as ds\n\n    dataset = ds.load_iris()\n    k = 3\n    heterogeneity = []\n    initial_centroids = get_initial_centroids(dataset[\"data\"], k, seed=0)\n    centroids, cluster_assignment = kmeans(\n        dataset[\"data\"],\n        k,\n        initial_centroids,\n        maxiter=400,\n        record_heterogeneity=heterogeneity,\n        verbose=True,\n    )\n    plot_heterogeneity(heterogeneity, k)\n    plot_kmeans(dataset[\"data\"], centroids, cluster_assignment)\n\n\ndef report_generator(\n    predicted: pd.DataFrame, clustering_variables: np.ndarray, fill_missing_report=None\n) -> pd.DataFrame:\n    \"\"\"\n    Generate a clustering report given these two arguments:\n        predicted - dataframe with predicted cluster column\n        fill_missing_report - dictionary of rules on how we are going to fill in missing\n        values for final generated report (not included in modelling);\n    >>> predicted = pd.DataFrame()\n    >>> predicted['numbers'] = [1, 2, 3]\n    >>> predicted['col1'] = [0.5, 2.5, 4.5]\n    >>> predicted['col2'] = [100, 200, 300]\n    >>> predicted['col3'] = [10, 20, 30]\n    >>> predicted['Cluster'] = [1, 1, 2]\n    >>> report_generator(predicted, ['col1', 'col2'], 0)\n               Features               Type   Mark           1           2\n    0    # of Customers        ClusterSize  False    2.000000    1.000000\n    1    % of Customers  ClusterProportion  False    0.666667    0.333333\n    2              col1    mean_with_zeros   True    1.500000    4.500000\n    3              col2    mean_with_zeros   True  150.000000  300.000000\n    4           numbers    mean_with_zeros  False    1.500000    3.000000\n    ..              ...                ...    ...         ...         ...\n    99            dummy                 5%  False    1.000000    1.000000\n    100           dummy                95%  False    1.000000    1.000000\n    101           dummy              stdev  False    0.000000         NaN\n    102           dummy               mode  False    1.000000    1.000000\n    103           dummy             median  False    1.000000    1.000000\n    <BLANKLINE>\n    [104 rows x 5 columns]\n    \"\"\"\n    # Fill missing values with given rules\n    if fill_missing_report:\n        predicted = predicted.fillna(value=fill_missing_report)\n    predicted[\"dummy\"] = 1\n    numeric_cols = predicted.select_dtypes(np.number).columns\n    report = (\n        predicted.groupby([\"Cluster\"])[  # construct report dataframe\n            numeric_cols\n        ]  # group by cluster number\n        .agg(\n            [\n                (\"sum\", \"sum\"),\n                (\"mean_with_zeros\", lambda x: np.mean(np.nan_to_num(x))),\n                (\"mean_without_zeros\", lambda x: x.replace(0, np.nan).mean()),\n                (\n                    \"mean_25-75\",\n                    lambda x: np.mean(\n                        np.nan_to_num(\n                            sorted(x)[\n                                round(len(x) * 25 / 100) : round(len(x) * 75 / 100)\n                            ]\n                        )\n                    ),\n                ),\n                (\"mean_with_na\", \"mean\"),\n                (\"min\", lambda x: x.min()),\n                (\"5%\", lambda x: x.quantile(0.05)),\n                (\"25%\", lambda x: x.quantile(0.25)),\n                (\"50%\", lambda x: x.quantile(0.50)),\n                (\"75%\", lambda x: x.quantile(0.75)),\n                (\"95%\", lambda x: x.quantile(0.95)),\n                (\"max\", lambda x: x.max()),\n                (\"count\", lambda x: x.count()),\n                (\"stdev\", lambda x: x.std()),\n                (\"mode\", lambda x: x.mode()[0]),\n                (\"median\", lambda x: x.median()),\n                (\"# > 0\", lambda x: (x > 0).sum()),\n            ]\n        )\n        .T.reset_index()\n        .rename(index=str, columns={\"level_0\": \"Features\", \"level_1\": \"Type\"})\n    )  # rename columns\n    # calculate the size of cluster(count of clientID's)\n    # avoid SettingWithCopyWarning\n    clustersize = report[\n        (report[\"Features\"] == \"dummy\") & (report[\"Type\"] == \"count\")\n    ].copy()\n    # rename created predicted cluster to match report column names\n    clustersize.Type = \"ClusterSize\"\n    clustersize.Features = \"# of Customers\"\n    # calculating the proportion of cluster\n    clusterproportion = pd.DataFrame(\n        clustersize.iloc[:, 2:].to_numpy() / clustersize.iloc[:, 2:].to_numpy().sum()\n    )\n    # rename created predicted cluster to match report column names\n    clusterproportion[\"Type\"] = \"% of Customers\"\n    clusterproportion[\"Features\"] = \"ClusterProportion\"\n    cols = clusterproportion.columns.tolist()\n    cols = cols[-2:] + cols[:-2]\n    clusterproportion = clusterproportion[cols]  # rearrange columns to match report\n    clusterproportion.columns = report.columns\n    # generating dataframe with count of nan values\n    a = pd.DataFrame(\n        abs(\n            report[report[\"Type\"] == \"count\"].iloc[:, 2:].to_numpy()\n            - clustersize.iloc[:, 2:].to_numpy()\n        )\n    )\n    a[\"Features\"] = 0\n    a[\"Type\"] = \"# of nan\"\n    # filling values in order to match report\n    a.Features = report[report[\"Type\"] == \"count\"].Features.tolist()\n    cols = a.columns.tolist()\n    cols = cols[-2:] + cols[:-2]\n    a = a[cols]  # rearrange columns to match report\n    a.columns = report.columns  # rename columns to match report\n    # drop count values except for cluster size\n    report = report.drop(report[report.Type == \"count\"].index)\n    # concat report with cluster size and nan values\n    report = pd.concat([report, a, clustersize, clusterproportion], axis=0)\n    report[\"Mark\"] = report[\"Features\"].isin(clustering_variables)\n    cols = report.columns.tolist()\n    cols = cols[0:2] + cols[-1:] + cols[2:-1]\n    report = report[cols]\n    sorter1 = {\n        \"ClusterSize\": 9,\n        \"ClusterProportion\": 8,\n        \"mean_with_zeros\": 7,\n        \"mean_with_na\": 6,\n        \"max\": 5,\n        \"50%\": 4,\n        \"min\": 3,\n        \"25%\": 2,\n        \"75%\": 1,\n        \"# of nan\": 0,\n        \"# > 0\": -1,\n        \"sum_with_na\": -2,\n    }\n    report = (\n        report.assign(\n            Sorter1=lambda x: x.Type.map(sorter1),\n            Sorter2=lambda x: list(reversed(range(len(x)))),\n        )\n        .sort_values([\"Sorter1\", \"Mark\", \"Sorter2\"], ascending=False)\n        .drop([\"Sorter1\", \"Sorter2\"], axis=1)\n    )\n    report.columns.name = \"\"\n    report = report.reset_index()\n    report = report.drop(columns=[\"index\"])\n    return report\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "machine_learning/k_nearest_neighbours.py",
    "content": "\"\"\"\nk-Nearest Neighbours (kNN) is a simple non-parametric supervised learning\nalgorithm used for classification. Given some labelled training data, a given\npoint is classified using its k nearest neighbours according to some distance\nmetric. The most commonly occurring label among the neighbours becomes the label\nof the given point. In effect, the label of the given point is decided by a\nmajority vote.\n\nThis implementation uses the commonly used Euclidean distance metric, but other\ndistance metrics can also be used.\n\nReference: https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm\n\"\"\"\n\nfrom collections import Counter\nfrom heapq import nsmallest\n\nimport numpy as np\nfrom sklearn import datasets\nfrom sklearn.model_selection import train_test_split\n\n\nclass KNN:\n    def __init__(\n        self,\n        train_data: np.ndarray[float],\n        train_target: np.ndarray[int],\n        class_labels: list[str],\n    ) -> None:\n        \"\"\"\n        Create a kNN classifier using the given training data and class labels\n        \"\"\"\n        self.data = zip(train_data, train_target)\n        self.labels = class_labels\n\n    @staticmethod\n    def _euclidean_distance(a: np.ndarray[float], b: np.ndarray[float]) -> float:\n        \"\"\"\n        Calculate the Euclidean distance between two points\n        >>> KNN._euclidean_distance(np.array([0, 0]), np.array([3, 4]))\n        5.0\n        >>> KNN._euclidean_distance(np.array([1, 2, 3]), np.array([1, 8, 11]))\n        10.0\n        \"\"\"\n        return float(np.linalg.norm(a - b))\n\n    def classify(self, pred_point: np.ndarray[float], k: int = 5) -> str:\n        \"\"\"\n        Classify a given point using the kNN algorithm\n        >>> train_X = np.array(\n        ...     [[0, 0], [1, 0], [0, 1], [0.5, 0.5], [3, 3], [2, 3], [3, 2]]\n        ... )\n        >>> train_y = np.array([0, 0, 0, 0, 1, 1, 1])\n        >>> classes = ['A', 'B']\n        >>> knn = KNN(train_X, train_y, classes)\n        >>> point = np.array([1.2, 1.2])\n        >>> knn.classify(point)\n        'A'\n        \"\"\"\n        # Distances of all points from the point to be classified\n        distances = (\n            (self._euclidean_distance(data_point[0], pred_point), data_point[1])\n            for data_point in self.data\n        )\n\n        # Choosing k points with the shortest distances\n        votes = (i[1] for i in nsmallest(k, distances))\n\n        # Most commonly occurring class is the one into which the point is classified\n        result = Counter(votes).most_common(1)[0][0]\n        return self.labels[result]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    iris = datasets.load_iris()\n\n    X = np.array(iris[\"data\"])\n    y = np.array(iris[\"target\"])\n    iris_classes = iris[\"target_names\"]\n\n    X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)\n    iris_point = np.array([4.4, 3.1, 1.3, 1.4])\n    classifier = KNN(X_train, y_train, iris_classes)\n    print(classifier.classify(iris_point, k=3))\n"
  },
  {
    "path": "machine_learning/linear_discriminant_analysis.py",
    "content": "\"\"\"\nLinear Discriminant Analysis\n\n\n\nAssumptions About Data :\n    1. The input variables has a gaussian distribution.\n    2. The variance calculated for each input variables by class grouping is the\n       same.\n    3. The mix of classes in your training set is representative of the problem.\n\n\nLearning The Model :\n    The LDA model requires the estimation of statistics from the training data :\n        1. Mean of each input value for each class.\n        2. Probability of an instance belong to each class.\n        3. Covariance for the input data for each class\n\n    Calculate the class means :\n        mean(x) = 1/n ( for i = 1 to i = n --> sum(xi))\n\n    Calculate the class probabilities :\n        P(y = 0) = count(y = 0) / (count(y = 0) + count(y = 1))\n        P(y = 1) = count(y = 1) / (count(y = 0) + count(y = 1))\n\n    Calculate the variance :\n        We can calculate the variance for dataset in two steps :\n            1. Calculate the squared difference for each input variable from the\n               group mean.\n            2. Calculate the mean of the squared difference.\n            ------------------------------------------------\n            Squared_Difference = (x - mean(k)) ** 2\n            Variance = (1 / (count(x) - count(classes))) *\n                (for i = 1 to i = n --> sum(Squared_Difference(xi)))\n\nMaking Predictions :\n    discriminant(x) = x * (mean / variance) -\n        ((mean ** 2) / (2 * variance)) + Ln(probability)\n    ---------------------------------------------------------------------------\n    After calculating the discriminant value for each class, the class with the\n    largest discriminant value is taken as the prediction.\n\nAuthor: @EverLookNeverSee\n\"\"\"\n\nfrom collections.abc import Callable\nfrom math import log\nfrom os import name, system\nfrom random import gauss, seed\n\n\n# Make a training dataset drawn from a gaussian distribution\ndef gaussian_distribution(mean: float, std_dev: float, instance_count: int) -> list:\n    \"\"\"\n    Generate gaussian distribution instances based-on given mean and standard deviation\n    :param mean: mean value of class\n    :param std_dev: value of standard deviation entered by usr or default value of it\n    :param instance_count: instance number of class\n    :return: a list containing generated values based-on given mean, std_dev and\n        instance_count\n\n    >>> gaussian_distribution(5.0, 1.0, 20) # doctest: +NORMALIZE_WHITESPACE\n    [6.288184753155463, 6.4494456086997705, 5.066335808938262, 4.235456349028368,\n     3.9078267848958586, 5.031334516831717, 3.977896829989127, 3.56317055489747,\n      5.199311976483754, 5.133374604658605, 5.546468300338232, 4.086029056264687,\n       5.005005283626573, 4.935258239627312, 3.494170998739258, 5.537997178661033,\n        5.320711100998849, 7.3891120432406865, 5.202969177309964, 4.855297691835079]\n    \"\"\"\n    seed(1)\n    return [gauss(mean, std_dev) for _ in range(instance_count)]\n\n\n# Make corresponding Y flags to detecting classes\ndef y_generator(class_count: int, instance_count: list) -> list:\n    \"\"\"\n    Generate y values for corresponding classes\n    :param class_count: Number of classes(data groupings) in dataset\n    :param instance_count: number of instances in class\n    :return: corresponding values for data groupings in dataset\n\n    >>> y_generator(1, [10])\n    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n    >>> y_generator(2, [5, 10])\n    [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]\n    >>> y_generator(4, [10, 5, 15, 20]) # doctest: +NORMALIZE_WHITESPACE\n    [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,\n     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]\n    \"\"\"\n\n    return [k for k in range(class_count) for _ in range(instance_count[k])]\n\n\n# Calculate the class means\ndef calculate_mean(instance_count: int, items: list) -> float:\n    \"\"\"\n    Calculate given class mean\n    :param instance_count: Number of instances in class\n    :param items: items that related to specific class(data grouping)\n    :return: calculated actual mean of considered class\n\n    >>> items = gaussian_distribution(5.0, 1.0, 20)\n    >>> calculate_mean(len(items), items)\n    5.011267842911003\n    \"\"\"\n    # the sum of all items divided by number of instances\n    return sum(items) / instance_count\n\n\n# Calculate the class probabilities\ndef calculate_probabilities(instance_count: int, total_count: int) -> float:\n    \"\"\"\n    Calculate the probability that a given instance will belong to which class\n    :param instance_count: number of instances in class\n    :param total_count: the number of all instances\n    :return: value of probability for considered class\n\n    >>> calculate_probabilities(20, 60)\n    0.3333333333333333\n    >>> calculate_probabilities(30, 100)\n    0.3\n    \"\"\"\n    # number of instances in specific class divided by number of all instances\n    return instance_count / total_count\n\n\n# Calculate the variance\ndef calculate_variance(items: list, means: list, total_count: int) -> float:\n    \"\"\"\n    Calculate the variance\n    :param items: a list containing all items(gaussian distribution of all classes)\n    :param means: a list containing real mean values of each class\n    :param total_count: the number of all instances\n    :return: calculated variance for considered dataset\n\n    >>> items = gaussian_distribution(5.0, 1.0, 20)\n    >>> means = [5.011267842911003]\n    >>> total_count = 20\n    >>> calculate_variance([items], means, total_count)\n    0.9618530973487491\n    \"\"\"\n    squared_diff = []  # An empty list to store all squared differences\n    # iterate over number of elements in items\n    for i in range(len(items)):\n        # for loop iterates over number of elements in inner layer of items\n        for j in range(len(items[i])):\n            # appending squared differences to 'squared_diff' list\n            squared_diff.append((items[i][j] - means[i]) ** 2)\n\n    # one divided by (the number of all instances - number of classes) multiplied by\n    # sum of all squared differences\n    n_classes = len(means)  # Number of classes in dataset\n    return 1 / (total_count - n_classes) * sum(squared_diff)\n\n\n# Making predictions\ndef predict_y_values(\n    x_items: list, means: list, variance: float, probabilities: list\n) -> list:\n    \"\"\"This function predicts new indexes(groups for our data)\n    :param x_items: a list containing all items(gaussian distribution of all classes)\n    :param means: a list containing real mean values of each class\n    :param variance: calculated value of variance by calculate_variance function\n    :param probabilities: a list containing all probabilities of classes\n    :return: a list containing predicted Y values\n\n    >>> x_items = [[6.288184753155463, 6.4494456086997705, 5.066335808938262,\n    ...                4.235456349028368, 3.9078267848958586, 5.031334516831717,\n    ...                3.977896829989127, 3.56317055489747, 5.199311976483754,\n    ...                5.133374604658605, 5.546468300338232, 4.086029056264687,\n    ...                5.005005283626573, 4.935258239627312, 3.494170998739258,\n    ...                5.537997178661033, 5.320711100998849, 7.3891120432406865,\n    ...                5.202969177309964, 4.855297691835079], [11.288184753155463,\n    ...                11.44944560869977, 10.066335808938263, 9.235456349028368,\n    ...                8.907826784895859, 10.031334516831716, 8.977896829989128,\n    ...                8.56317055489747, 10.199311976483754, 10.133374604658606,\n    ...                10.546468300338232, 9.086029056264687, 10.005005283626572,\n    ...                9.935258239627313, 8.494170998739259, 10.537997178661033,\n    ...                10.320711100998848, 12.389112043240686, 10.202969177309964,\n    ...                9.85529769183508], [16.288184753155463, 16.449445608699772,\n    ...                15.066335808938263, 14.235456349028368, 13.907826784895859,\n    ...                15.031334516831716, 13.977896829989128, 13.56317055489747,\n    ...                15.199311976483754, 15.133374604658606, 15.546468300338232,\n    ...                14.086029056264687, 15.005005283626572, 14.935258239627313,\n    ...                13.494170998739259, 15.537997178661033, 15.320711100998848,\n    ...                17.389112043240686, 15.202969177309964, 14.85529769183508]]\n\n    >>> means = [5.011267842911003, 10.011267842911003, 15.011267842911002]\n    >>> variance = 0.9618530973487494\n    >>> probabilities = [0.3333333333333333, 0.3333333333333333, 0.3333333333333333]\n    >>> predict_y_values(x_items, means, variance,\n    ...                  probabilities)  # doctest: +NORMALIZE_WHITESPACE\n    [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,\n    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,\n    2, 2, 2, 2, 2, 2, 2, 2, 2]\n\n    \"\"\"\n    # An empty list to store generated discriminant values of all items in dataset for\n    # each class\n    results = []\n    # for loop iterates over number of elements in list\n    for i in range(len(x_items)):\n        # for loop iterates over number of inner items of each element\n        for j in range(len(x_items[i])):\n            temp = []  # to store all discriminant values of each item as a list\n            # for loop iterates over number of classes we have in our dataset\n            for k in range(len(x_items)):\n                # appending values of discriminants for each class to 'temp' list\n                temp.append(\n                    x_items[i][j] * (means[k] / variance)\n                    - (means[k] ** 2 / (2 * variance))\n                    + log(probabilities[k])\n                )\n            # appending discriminant values of each item to 'results' list\n            results.append(temp)\n\n    return [result.index(max(result)) for result in results]\n\n\n# Calculating Accuracy\ndef accuracy(actual_y: list, predicted_y: list) -> float:\n    \"\"\"\n    Calculate the value of accuracy based-on predictions\n    :param actual_y:a list containing initial Y values generated by 'y_generator'\n        function\n    :param predicted_y: a list containing predicted Y values generated by\n        'predict_y_values' function\n    :return: percentage of accuracy\n\n    >>> actual_y = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,\n    ... 1, 1 ,1 ,1 ,1 ,1 ,1]\n    >>> predicted_y = [0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0,\n    ... 0, 0, 1, 1, 1, 0, 1, 1, 1]\n    >>> accuracy(actual_y, predicted_y)\n    50.0\n\n    >>> actual_y = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,\n    ... 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]\n    >>> predicted_y = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,\n    ... 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]\n    >>> accuracy(actual_y, predicted_y)\n    100.0\n    \"\"\"\n    # iterate over one element of each list at a time (zip mode)\n    # prediction is correct if actual Y value equals to predicted Y value\n    correct = sum(1 for i, j in zip(actual_y, predicted_y) if i == j)\n    # percentage of accuracy equals to number of correct predictions divided by number\n    # of all data and multiplied by 100\n    return (correct / len(actual_y)) * 100\n\n\ndef valid_input[num](\n    input_type: Callable[[object], num],  # Usually float or int\n    input_msg: str,\n    err_msg: str,\n    condition: Callable[[num], bool] = lambda _: True,\n    default: str | None = None,\n) -> num:\n    \"\"\"\n    Ask for user value and validate that it fulfill a condition.\n\n    :input_type: user input expected type of value\n    :input_msg: message to show user in the screen\n    :err_msg: message to show in the screen in case of error\n    :condition: function that represents the condition that user input is valid.\n    :default: Default value in case the user does not type anything\n    :return: user's input\n    \"\"\"\n    while True:\n        try:\n            user_input = input_type(input(input_msg).strip() or default)\n            if condition(user_input):\n                return user_input\n            else:\n                print(f\"{user_input}: {err_msg}\")\n                continue\n        except ValueError:\n            print(\n                f\"{user_input}: Incorrect input type, expected {input_type.__name__!r}\"\n            )\n\n\n# Main Function\ndef main():\n    \"\"\"This function starts execution phase\"\"\"\n    while True:\n        print(\" Linear Discriminant Analysis \".center(50, \"*\"))\n        print(\"*\" * 50, \"\\n\")\n        print(\"First of all we should specify the number of classes that\")\n        print(\"we want to generate as training dataset\")\n        # Trying to get number of classes\n        n_classes = valid_input(\n            input_type=int,\n            condition=lambda x: x > 0,\n            input_msg=\"Enter the number of classes (Data Groupings): \",\n            err_msg=\"Number of classes should be positive!\",\n        )\n\n        print(\"-\" * 100)\n\n        # Trying to get the value of standard deviation\n        std_dev = valid_input(\n            input_type=float,\n            condition=lambda x: x >= 0,\n            input_msg=(\n                \"Enter the value of standard deviation\"\n                \"(Default value is 1.0 for all classes): \"\n            ),\n            err_msg=\"Standard deviation should not be negative!\",\n            default=\"1.0\",\n        )\n\n        print(\"-\" * 100)\n\n        # Trying to get number of instances in classes and theirs means to generate\n        # dataset\n        counts = []  # An empty list to store instance counts of classes in dataset\n        for i in range(n_classes):\n            user_count = valid_input(\n                input_type=int,\n                condition=lambda x: x > 0,\n                input_msg=(f\"Enter The number of instances for class_{i + 1}: \"),\n                err_msg=\"Number of instances should be positive!\",\n            )\n            counts.append(user_count)\n        print(\"-\" * 100)\n\n        # An empty list to store values of user-entered means of classes\n        user_means = []\n        for a in range(n_classes):\n            user_mean = valid_input(\n                input_type=float,\n                input_msg=(f\"Enter the value of mean for class_{a + 1}: \"),\n                err_msg=\"This is an invalid value.\",\n            )\n            user_means.append(user_mean)\n        print(\"-\" * 100)\n\n        print(\"Standard deviation: \", std_dev)\n        # print out the number of instances in classes in separated line\n        for i, count in enumerate(counts, 1):\n            print(f\"Number of instances in class_{i} is: {count}\")\n        print(\"-\" * 100)\n\n        # print out mean values of classes separated line\n        for i, user_mean in enumerate(user_means, 1):\n            print(f\"Mean of class_{i} is: {user_mean}\")\n        print(\"-\" * 100)\n\n        # Generating training dataset drawn from gaussian distribution\n        x = [\n            gaussian_distribution(user_means[j], std_dev, counts[j])\n            for j in range(n_classes)\n        ]\n        print(\"Generated Normal Distribution: \\n\", x)\n        print(\"-\" * 100)\n\n        # Generating Ys to detecting corresponding classes\n        y = y_generator(n_classes, counts)\n        print(\"Generated Corresponding Ys: \\n\", y)\n        print(\"-\" * 100)\n\n        # Calculating the value of actual mean for each class\n        actual_means = [calculate_mean(counts[k], x[k]) for k in range(n_classes)]\n        # for loop iterates over number of elements in 'actual_means' list and print\n        # out them in separated line\n        for i, actual_mean in enumerate(actual_means, 1):\n            print(f\"Actual(Real) mean of class_{i} is: {actual_mean}\")\n        print(\"-\" * 100)\n\n        # Calculating the value of probabilities for each class\n        probabilities = [\n            calculate_probabilities(counts[i], sum(counts)) for i in range(n_classes)\n        ]\n\n        # for loop iterates over number of elements in 'probabilities' list and print\n        # out them in separated line\n        for i, probability in enumerate(probabilities, 1):\n            print(f\"Probability of class_{i} is: {probability}\")\n        print(\"-\" * 100)\n\n        # Calculating the values of variance for each class\n        variance = calculate_variance(x, actual_means, sum(counts))\n        print(\"Variance: \", variance)\n        print(\"-\" * 100)\n\n        # Predicting Y values\n        # storing predicted Y values in 'pre_indexes' variable\n        pre_indexes = predict_y_values(x, actual_means, variance, probabilities)\n        print(\"-\" * 100)\n\n        # Calculating Accuracy of the model\n        print(f\"Accuracy: {accuracy(y, pre_indexes)}\")\n        print(\"-\" * 100)\n        print(\" DONE \".center(100, \"+\"))\n\n        if input(\"Press any key to restart or 'q' for quit: \").strip().lower() == \"q\":\n            print(\"\\n\" + \"GoodBye!\".center(100, \"-\") + \"\\n\")\n            break\n        system(\"cls\" if name == \"nt\" else \"clear\")  # noqa: S605\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "machine_learning/linear_regression.py",
    "content": "\"\"\"\nLinear regression is the most basic type of regression commonly used for\npredictive analysis. The idea is pretty simple: we have a dataset and we have\nfeatures associated with it. Features should be chosen very cautiously\nas they determine how much our model will be able to make future predictions.\nWe try to set the weight of these features, over many iterations, so that they best\nfit our dataset. In this particular code, I had used a CSGO dataset (ADR vs\nRating). We try to best fit a line through dataset and estimate the parameters.\n\"\"\"\n\n# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"httpx\",\n#     \"numpy\",\n# ]\n# ///\n\nimport httpx\nimport numpy as np\n\n\ndef collect_dataset():\n    \"\"\"Collect dataset of CSGO\n    The dataset contains ADR vs Rating of a Player\n    :return : dataset obtained from the link, as matrix\n    \"\"\"\n    response = httpx.get(\n        \"https://raw.githubusercontent.com/yashLadha/The_Math_of_Intelligence/\"\n        \"master/Week1/ADRvsRating.csv\",\n        timeout=10,\n    )\n    lines = response.text.splitlines()\n    data = []\n    for item in lines:\n        item = item.split(\",\")\n        data.append(item)\n    data.pop(0)  # This is for removing the labels from the list\n    dataset = np.matrix(data)\n    return dataset\n\n\ndef run_steep_gradient_descent(data_x, data_y, len_data, alpha, theta):\n    \"\"\"Run steep gradient descent and updates the Feature vector accordingly_\n    :param data_x   : contains the dataset\n    :param data_y   : contains the output associated with each data-entry\n    :param len_data : length of the data_\n    :param alpha    : Learning rate of the model\n    :param theta    : Feature vector (weight's for our model)\n    ;param return    : Updated Feature's, using\n                       curr_features - alpha_ * gradient(w.r.t. feature)\n    >>> import numpy as np\n    >>> data_x = np.array([[1, 2], [3, 4]])\n    >>> data_y = np.array([5, 6])\n    >>> len_data = len(data_x)\n    >>> alpha = 0.01\n    >>> theta = np.array([0.1, 0.2])\n    >>> run_steep_gradient_descent(data_x, data_y, len_data, alpha, theta)\n    array([0.196, 0.343])\n    \"\"\"\n    n = len_data\n\n    prod = np.dot(theta, data_x.transpose())\n    prod -= data_y.transpose()\n    sum_grad = np.dot(prod, data_x)\n    theta = theta - (alpha / n) * sum_grad\n    return theta\n\n\ndef sum_of_square_error(data_x, data_y, len_data, theta):\n    \"\"\"Return sum of square error for error calculation\n    :param data_x    : contains our dataset\n    :param data_y    : contains the output (result vector)\n    :param len_data  : len of the dataset\n    :param theta     : contains the feature vector\n    :return          : sum of square error computed from given feature's\n\n    Example:\n    >>> vc_x = np.array([[1.1], [2.1], [3.1]])\n    >>> vc_y = np.array([1.2, 2.2, 3.2])\n    >>> round(sum_of_square_error(vc_x, vc_y, 3, np.array([1])),3)\n    np.float64(0.005)\n    \"\"\"\n    prod = np.dot(theta, data_x.transpose())\n    prod -= data_y.transpose()\n    sum_elem = np.sum(np.square(prod))\n    error = sum_elem / (2 * len_data)\n    return error\n\n\ndef run_linear_regression(data_x, data_y):\n    \"\"\"Implement Linear regression over the dataset\n    :param data_x  : contains our dataset\n    :param data_y  : contains the output (result vector)\n    :return        : feature for line of best fit (Feature vector)\n    \"\"\"\n    iterations = 100000\n    alpha = 0.0001550\n\n    no_features = data_x.shape[1]\n    len_data = data_x.shape[0] - 1\n\n    theta = np.zeros((1, no_features))\n\n    for i in range(iterations):\n        theta = run_steep_gradient_descent(data_x, data_y, len_data, alpha, theta)\n        error = sum_of_square_error(data_x, data_y, len_data, theta)\n        print(f\"At Iteration {i + 1} - Error is {error:.5f}\")\n\n    return theta\n\n\ndef mean_absolute_error(predicted_y, original_y):\n    \"\"\"Return sum of square error for error calculation\n    :param predicted_y   : contains the output of prediction (result vector)\n    :param original_y    : contains values of expected outcome\n    :return          : mean absolute error computed from given feature's\n\n    >>> predicted_y = [3, -0.5, 2, 7]\n    >>> original_y = [2.5, 0.0, 2, 8]\n    >>> mean_absolute_error(predicted_y, original_y)\n    0.5\n    \"\"\"\n    total = sum(abs(y - predicted_y[i]) for i, y in enumerate(original_y))\n    return total / len(original_y)\n\n\ndef main():\n    \"\"\"Driver function\"\"\"\n    data = collect_dataset()\n\n    len_data = data.shape[0]\n    data_x = np.c_[np.ones(len_data), data[:, :-1]].astype(float)\n    data_y = data[:, -1].astype(float)\n\n    theta = run_linear_regression(data_x, data_y)\n    len_result = theta.shape[1]\n    print(\"Resultant Feature vector : \")\n    for i in range(len_result):\n        print(f\"{theta[0, i]:.5f}\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    main()\n"
  },
  {
    "path": "machine_learning/local_weighted_learning/README.md",
    "content": "# Locally Weighted Linear Regression\nIt is a non-parametric ML algorithm that does not learn on a fixed set of parameters such as **linear regression**. \\\nSo, here comes a question of what is *linear regression*? \\\n**Linear regression** is a supervised learning algorithm used for computing linear relationships between input (X) and output (Y). \\\n\n### Terminology Involved\n\nnumber_of_features(i) = Number of features involved. \\\nnumber_of_training_examples(m) = Number of training examples. \\\noutput_sequence(y) = Output Sequence. \\\n$\\theta$ $^T$ x = predicted point. \\\nJ($\\theta$) = COst function of point.\n\nThe steps involved in ordinary linear regression are:\n\nTraining phase: Compute \\theta to minimize the cost. \\\nJ($\\theta$) = $\\sum_{i=1}^m$ (($\\theta$)$^T$ $x^i$ - $y^i$)$^2$\n\nPredict output: for given query point x, \\\n return:  ($\\theta$)$^T$ x\n\n<img src=\"https://miro.medium.com/max/700/1*FZsLp8yTULf77qrp0Qd91g.png\" alt=\"Linear Regression\">\n\nThis 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\n\n<img src=\"https://miro.medium.com/max/700/1*DHYvJg55uN-Kj8jHaxDKvQ.png\" alt=\"Non-linear Data\">\n<br />\n<br />\nSo, 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.\n<br />\n<br />\nWhile Computing $\\theta$ , a higher preference is given to points in the vicinity of x than points farther from x.\n\nCost Function J($\\theta$) = $\\sum_{i=1}^m$ $w^i$ (($\\theta$)$^T$ $x^i$ - $y^i$)$^2$\n\n$w^i$ is non-negative weight associated to training point $x^i$. \\\n$w^i$ is large fr $x^i$'s lying closer to query point $x_i$. \\\n$w^i$ is small for $x^i$'s lying farther to query point $x_i$.\n\nA Typical weight can be computed using \\\n\n$w^i$ = $\\exp$(-$\\frac{(x^i-x)(x^i-x)^T}{2\\tau^2}$)\n\nWhere $\\tau$ is the bandwidth parameter that controls $w^i$ distance from x.\n\nLet's look at a example :\n\nSuppose, 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 :\n\n$w^i$ = $\\exp$(-$\\frac{(x^i-x)(x^i-x)^T}{2\\tau^2}$) with $\\tau$=0.5\n\n$w^1$ = $\\exp$(-$\\frac{(4.9-5)^2}{2(0.5)^2}$) = 0.9802\n\n$w^2$ = $\\exp$(-$\\frac{(3-5)^2}{2(0.5)^2}$) = 0.000335\n\nSo, J($\\theta$) = 0.9802*($\\theta$ $^T$ $x^1$ - $y^1$) + 0.000335*($\\theta$ $^T$ $x^2$ - $y^2$)\n\nSo, 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.\n\nSteps involved in LWL are : \\\nCompute \\theta to minimize the cost.\nJ($\\theta$) = $\\sum_{i=1}^m$ $w^i$ (($\\theta$)$^T$ $x^i$ - $y^i$)$^2$ \\\nPredict Output: for given query point x, \\\nreturn : $\\theta$ $^T$ x\n\n<img src=\"https://miro.medium.com/max/700/1*H3QS05Q1GJtY-tiBL00iug.png\" alt=\"LWL\">\n"
  },
  {
    "path": "machine_learning/local_weighted_learning/__init__.py",
    "content": ""
  },
  {
    "path": "machine_learning/local_weighted_learning/local_weighted_learning.py",
    "content": "\"\"\"\nLocally weighted linear regression, also called local regression, is a type of\nnon-parametric linear regression that prioritizes data closest to a given\nprediction point. The algorithm estimates the vector of model coefficients β\nusing weighted least squares regression:\n\nβ = (XᵀWX)⁻¹(XᵀWy),\n\nwhere X is the design matrix, y is the response vector, and W is the diagonal\nweight matrix.\n\nThis implementation calculates wᵢ, the weight of the ith training sample, using\nthe Gaussian weight:\n\nwᵢ = exp(-‖xᵢ - x‖²/(2τ²)),\n\nwhere xᵢ is the ith training sample, x is the prediction point, τ is the\n\"bandwidth\", and ‖x‖ is the Euclidean norm (also called the 2-norm or the L²\nnorm). The bandwidth τ controls how quickly the weight of a training sample\ndecreases as its distance from the prediction point increases. One can think of\nthe Gaussian weight as a bell curve centered around the prediction point: a\ntraining sample is weighted lower if it's farther from the center, and τ\ncontrols the spread of the bell curve.\n\nOther types of locally weighted regression such as locally estimated scatterplot\nsmoothing (LOESS) typically use different weight functions.\n\nReferences:\n    - https://en.wikipedia.org/wiki/Local_regression\n    - https://en.wikipedia.org/wiki/Weighted_least_squares\n    - https://cs229.stanford.edu/notes2022fall/main_notes.pdf\n\"\"\"\n\nimport matplotlib.pyplot as plt\nimport numpy as np\n\n\ndef weight_matrix(point: np.ndarray, x_train: np.ndarray, tau: float) -> np.ndarray:\n    \"\"\"\n    Calculate the weight of every point in the training data around a given\n    prediction point\n\n    Args:\n        point: x-value at which the prediction is being made\n        x_train: ndarray of x-values for training\n        tau: bandwidth value, controls how quickly the weight of training values\n            decreases as the distance from the prediction point increases\n\n    Returns:\n        m x m weight matrix around the prediction point, where m is the size of\n        the training set\n    >>> weight_matrix(\n    ...     np.array([1., 1.]),\n    ...     np.array([[16.99, 10.34], [21.01,23.68], [24.59,25.69]]),\n    ...     0.6\n    ... )\n    array([[1.43807972e-207, 0.00000000e+000, 0.00000000e+000],\n           [0.00000000e+000, 0.00000000e+000, 0.00000000e+000],\n           [0.00000000e+000, 0.00000000e+000, 0.00000000e+000]])\n    \"\"\"\n    m = len(x_train)  # Number of training samples\n    weights = np.eye(m)  # Initialize weights as identity matrix\n    for j in range(m):\n        diff = point - x_train[j]\n        weights[j, j] = np.exp(diff @ diff.T / (-2.0 * tau**2))\n\n    return weights\n\n\ndef local_weight(\n    point: np.ndarray, x_train: np.ndarray, y_train: np.ndarray, tau: float\n) -> np.ndarray:\n    \"\"\"\n    Calculate the local weights at a given prediction point using the weight\n    matrix for that point\n\n    Args:\n        point: x-value at which the prediction is being made\n        x_train: ndarray of x-values for training\n        y_train: ndarray of y-values for training\n        tau: bandwidth value, controls how quickly the weight of training values\n            decreases as the distance from the prediction point increases\n    Returns:\n        ndarray of local weights\n    >>> local_weight(\n    ...     np.array([1., 1.]),\n    ...     np.array([[16.99, 10.34], [21.01,23.68], [24.59,25.69]]),\n    ...     np.array([[1.01, 1.66, 3.5]]),\n    ...     0.6\n    ... )\n    array([[0.00873174],\n           [0.08272556]])\n    \"\"\"\n    weight_mat = weight_matrix(point, x_train, tau)\n    weight = np.linalg.inv(x_train.T @ weight_mat @ x_train) @ (\n        x_train.T @ weight_mat @ y_train.T\n    )\n\n    return weight\n\n\ndef local_weight_regression(\n    x_train: np.ndarray, y_train: np.ndarray, tau: float\n) -> np.ndarray:\n    \"\"\"\n    Calculate predictions for each point in the training data\n\n    Args:\n        x_train: ndarray of x-values for training\n        y_train: ndarray of y-values for training\n        tau: bandwidth value, controls how quickly the weight of training values\n            decreases as the distance from the prediction point increases\n\n    Returns:\n        ndarray of predictions\n    >>> local_weight_regression(\n    ...     np.array([[16.99, 10.34], [21.01, 23.68], [24.59, 25.69]]),\n    ...     np.array([[1.01, 1.66, 3.5]]),\n    ...     0.6\n    ... )\n    array([1.07173261, 1.65970737, 3.50160179])\n    \"\"\"\n    y_pred = np.zeros(len(x_train))  # Initialize array of predictions\n    for i, item in enumerate(x_train):\n        y_pred[i] = np.dot(item, local_weight(item, x_train, y_train, tau)).item()\n\n    return y_pred\n\n\ndef load_data(\n    dataset_name: str, x_name: str, y_name: str\n) -> tuple[np.ndarray, np.ndarray, np.ndarray]:\n    \"\"\"\n    Load data from seaborn and split it into x and y points\n    >>> pass    # No doctests, function is for demo purposes only\n    \"\"\"\n    import seaborn as sns\n\n    data = sns.load_dataset(dataset_name)\n    x_data = np.array(data[x_name])\n    y_data = np.array(data[y_name])\n\n    one = np.ones(len(y_data))\n\n    # pairing elements of one and x_data\n    x_train = np.column_stack((one, x_data))\n\n    return x_train, x_data, y_data\n\n\ndef plot_preds(\n    x_train: np.ndarray,\n    preds: np.ndarray,\n    x_data: np.ndarray,\n    y_data: np.ndarray,\n    x_name: str,\n    y_name: str,\n) -> None:\n    \"\"\"\n    Plot predictions and display the graph\n    >>> pass    # No doctests, function is for demo purposes only\n    \"\"\"\n    x_train_sorted = np.sort(x_train, axis=0)\n    plt.scatter(x_data, y_data, color=\"blue\")\n    plt.plot(\n        x_train_sorted[:, 1],\n        preds[x_train[:, 1].argsort(0)],\n        color=\"yellow\",\n        linewidth=5,\n    )\n    plt.title(\"Local Weighted Regression\")\n    plt.xlabel(x_name)\n    plt.ylabel(y_name)\n    plt.show()\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    # Demo with a dataset from the seaborn module\n    training_data_x, total_bill, tip = load_data(\"tips\", \"total_bill\", \"tip\")\n    predictions = local_weight_regression(training_data_x, tip, 5)\n    plot_preds(training_data_x, predictions, total_bill, tip, \"total_bill\", \"tip\")\n"
  },
  {
    "path": "machine_learning/logistic_regression.py",
    "content": "#!/usr/bin/python\n\n# Logistic Regression from scratch\n\n# In[62]:\n\n# In[63]:\n\n# importing all the required libraries\n\n\"\"\"\nImplementing logistic regression for classification problem\nHelpful resources:\nCoursera ML course\nhttps://medium.com/@martinpella/logistic-regression-from-scratch-in-python-124c5636b8ac\n\"\"\"\n\nimport numpy as np\nfrom matplotlib import pyplot as plt\nfrom sklearn import datasets\n\n# get_ipython().run_line_magic('matplotlib', 'inline')\n\n\n# In[67]:\n\n# sigmoid function or logistic function is used as a hypothesis function in\n# classification problems\n\n\ndef sigmoid_function(z: float | np.ndarray) -> float | np.ndarray:\n    \"\"\"\n    Also known as Logistic Function.\n\n                1\n    f(x) =   -------\n              1 + e⁻ˣ\n\n    The sigmoid function approaches a value of 1 as its input 'x' becomes\n    increasing positive. Opposite for negative values.\n\n    Reference: https://en.wikipedia.org/wiki/Sigmoid_function\n\n    @param z:  input to the function\n    @returns: returns value in the range 0 to 1\n\n    Examples:\n    >>> float(sigmoid_function(4))\n    0.9820137900379085\n    >>> sigmoid_function(np.array([-3, 3]))\n    array([0.04742587, 0.95257413])\n    >>> sigmoid_function(np.array([-3, 3, 1]))\n    array([0.04742587, 0.95257413, 0.73105858])\n    >>> sigmoid_function(np.array([-0.01, -2, -1.9]))\n    array([0.49750002, 0.11920292, 0.13010847])\n    >>> sigmoid_function(np.array([-1.3, 5.3, 12]))\n    array([0.21416502, 0.9950332 , 0.99999386])\n    >>> sigmoid_function(np.array([0.01, 0.02, 4.1]))\n    array([0.50249998, 0.50499983, 0.9836975 ])\n    >>> sigmoid_function(np.array([0.8]))\n    array([0.68997448])\n    \"\"\"\n    return 1 / (1 + np.exp(-z))\n\n\ndef cost_function(h: np.ndarray, y: np.ndarray) -> float:\n    \"\"\"\n    Cost function quantifies the error between predicted and expected values.\n    The cost function used in Logistic Regression is called Log Loss\n    or Cross Entropy Function.\n\n    J(θ) = (1/m) * Σ [ -y * log(hθ(x)) - (1 - y) * log(1 - hθ(x)) ]\n\n    Where:\n       - J(θ) is the cost that we want to minimize during training\n       - m is the number of training examples\n       - Σ represents the summation over all training examples\n       - y is the actual binary label (0 or 1) for a given example\n       - hθ(x) is the predicted probability that x belongs to the positive class\n\n    @param h: the output of sigmoid function. It is the estimated probability\n    that the input example 'x' belongs to the positive class\n\n    @param y: the actual binary label associated with input example 'x'\n\n    Examples:\n    >>> estimations = sigmoid_function(np.array([0.3, -4.3, 8.1]))\n    >>> cost_function(h=estimations,y=np.array([1, 0, 1]))\n    0.18937868932131605\n    >>> estimations = sigmoid_function(np.array([4, 3, 1]))\n    >>> cost_function(h=estimations,y=np.array([1, 0, 0]))\n    1.459999655669926\n    >>> estimations = sigmoid_function(np.array([4, -3, -1]))\n    >>> cost_function(h=estimations,y=np.array([1,0,0]))\n    0.1266663223365915\n    >>> estimations = sigmoid_function(0)\n    >>> cost_function(h=estimations,y=np.array([1]))\n    0.6931471805599453\n\n    References:\n       - https://en.wikipedia.org/wiki/Logistic_regression\n    \"\"\"\n    return float((-y * np.log(h) - (1 - y) * np.log(1 - h)).mean())\n\n\ndef log_likelihood(x, y, weights):\n    scores = np.dot(x, weights)\n    return np.sum(y * scores - np.log(1 + np.exp(scores)))\n\n\n# here alpha is the learning rate, X is the feature matrix,y is the target matrix\ndef logistic_reg(alpha, x, y, max_iterations=70000):\n    theta = np.zeros(x.shape[1])\n\n    for iterations in range(max_iterations):\n        z = np.dot(x, theta)\n        h = sigmoid_function(z)\n        gradient = np.dot(x.T, h - y) / y.size\n        theta = theta - alpha * gradient  # updating the weights\n        z = np.dot(x, theta)\n        h = sigmoid_function(z)\n        j = cost_function(h, y)\n        if iterations % 100 == 0:\n            print(f\"loss: {j} \\t\")  # printing the loss after every 100 iterations\n    return theta\n\n\n# In[68]:\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    iris = datasets.load_iris()\n    x = iris.data[:, :2]\n    y = (iris.target != 0) * 1\n\n    alpha = 0.1\n    theta = logistic_reg(alpha, x, y, max_iterations=70000)\n    print(\"theta: \", theta)  # printing the theta i.e our weights vector\n\n    def predict_prob(x):\n        return sigmoid_function(\n            np.dot(x, theta)\n        )  # predicting the value of probability from the logistic regression algorithm\n\n    plt.figure(figsize=(10, 6))\n    plt.scatter(x[y == 0][:, 0], x[y == 0][:, 1], color=\"b\", label=\"0\")\n    plt.scatter(x[y == 1][:, 0], x[y == 1][:, 1], color=\"r\", label=\"1\")\n    (x1_min, x1_max) = (x[:, 0].min(), x[:, 0].max())\n    (x2_min, x2_max) = (x[:, 1].min(), x[:, 1].max())\n    (xx1, xx2) = np.meshgrid(np.linspace(x1_min, x1_max), np.linspace(x2_min, x2_max))\n    grid = np.c_[xx1.ravel(), xx2.ravel()]\n    probs = predict_prob(grid).reshape(xx1.shape)\n    plt.contour(xx1, xx2, probs, [0.5], linewidths=1, colors=\"black\")\n\n    plt.legend()\n    plt.show()\n"
  },
  {
    "path": "machine_learning/loss_functions.py",
    "content": "import numpy as np\n\n\ndef binary_cross_entropy(\n    y_true: np.ndarray, y_pred: np.ndarray, epsilon: float = 1e-15\n) -> float:\n    \"\"\"\n    Calculate the mean binary cross-entropy (BCE) loss between true labels and predicted\n    probabilities.\n\n    BCE loss quantifies dissimilarity between true labels (0 or 1) and predicted\n    probabilities. It's widely used in binary classification tasks.\n\n    BCE = -Σ(y_true * ln(y_pred) + (1 - y_true) * ln(1 - y_pred))\n\n    Reference: https://en.wikipedia.org/wiki/Cross_entropy\n\n    Parameters:\n    - y_true: True binary labels (0 or 1)\n    - y_pred: Predicted probabilities for class 1\n    - epsilon: Small constant to avoid numerical instability\n\n    >>> true_labels = np.array([0, 1, 1, 0, 1])\n    >>> predicted_probs = np.array([0.2, 0.7, 0.9, 0.3, 0.8])\n    >>> float(binary_cross_entropy(true_labels, predicted_probs))\n    0.2529995012327421\n    >>> true_labels = np.array([0, 1, 1, 0, 1])\n    >>> predicted_probs = np.array([0.3, 0.8, 0.9, 0.2])\n    >>> binary_cross_entropy(true_labels, predicted_probs)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input arrays must have the same length.\n    \"\"\"\n    if len(y_true) != len(y_pred):\n        raise ValueError(\"Input arrays must have the same length.\")\n\n    y_pred = np.clip(y_pred, epsilon, 1 - epsilon)  # Clip predictions to avoid log(0)\n    bce_loss = -(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred))\n    return np.mean(bce_loss)\n\n\ndef binary_focal_cross_entropy(\n    y_true: np.ndarray,\n    y_pred: np.ndarray,\n    gamma: float = 2.0,\n    alpha: float = 0.25,\n    epsilon: float = 1e-15,\n) -> float:\n    \"\"\"\n    Calculate the mean binary focal cross-entropy (BFCE) loss between true labels\n    and predicted probabilities.\n\n    BFCE loss quantifies dissimilarity between true labels (0 or 1) and predicted\n    probabilities. It's a variation of binary cross-entropy that addresses class\n    imbalance by focusing on hard examples.\n\n    BCFE = -Σ(alpha * (1 - y_pred)**gamma * y_true * log(y_pred)\n                + (1 - alpha) * y_pred**gamma * (1 - y_true) * log(1 - y_pred))\n\n    Reference: [Lin et al., 2018](https://arxiv.org/pdf/1708.02002.pdf)\n\n    Parameters:\n    - y_true: True binary labels (0 or 1).\n    - y_pred: Predicted probabilities for class 1.\n    - gamma: Focusing parameter for modulating the loss (default: 2.0).\n    - alpha: Weighting factor for class 1 (default: 0.25).\n    - epsilon: Small constant to avoid numerical instability.\n\n    >>> true_labels = np.array([0, 1, 1, 0, 1])\n    >>> predicted_probs = np.array([0.2, 0.7, 0.9, 0.3, 0.8])\n    >>> float(binary_focal_cross_entropy(true_labels, predicted_probs))\n    0.008257977659239775\n    >>> true_labels = np.array([0, 1, 1, 0, 1])\n    >>> predicted_probs = np.array([0.3, 0.8, 0.9, 0.2])\n    >>> binary_focal_cross_entropy(true_labels, predicted_probs)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input arrays must have the same length.\n    \"\"\"\n    if len(y_true) != len(y_pred):\n        raise ValueError(\"Input arrays must have the same length.\")\n    # Clip predicted probabilities to avoid log(0)\n    y_pred = np.clip(y_pred, epsilon, 1 - epsilon)\n\n    bcfe_loss = -(\n        alpha * (1 - y_pred) ** gamma * y_true * np.log(y_pred)\n        + (1 - alpha) * y_pred**gamma * (1 - y_true) * np.log(1 - y_pred)\n    )\n\n    return np.mean(bcfe_loss)\n\n\ndef categorical_cross_entropy(\n    y_true: np.ndarray, y_pred: np.ndarray, epsilon: float = 1e-15\n) -> float:\n    \"\"\"\n    Calculate categorical cross-entropy (CCE) loss between true class labels and\n    predicted class probabilities.\n\n    CCE = -Σ(y_true * ln(y_pred))\n\n    Reference: https://en.wikipedia.org/wiki/Cross_entropy\n\n    Parameters:\n    - y_true: True class labels (one-hot encoded)\n    - y_pred: Predicted class probabilities\n    - epsilon: Small constant to avoid numerical instability\n\n    >>> true_labels = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])\n    >>> pred_probs = np.array([[0.9, 0.1, 0.0], [0.2, 0.7, 0.1], [0.0, 0.1, 0.9]])\n    >>> float(categorical_cross_entropy(true_labels, pred_probs))\n    0.567395975254385\n    >>> true_labels = np.array([[1, 0], [0, 1]])\n    >>> pred_probs = np.array([[0.9, 0.1, 0.0], [0.2, 0.7, 0.1]])\n    >>> categorical_cross_entropy(true_labels, pred_probs)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input arrays must have the same shape.\n    >>> true_labels = np.array([[2, 0, 1], [1, 0, 0]])\n    >>> pred_probs = np.array([[0.9, 0.1, 0.0], [0.2, 0.7, 0.1]])\n    >>> categorical_cross_entropy(true_labels, pred_probs)\n    Traceback (most recent call last):\n        ...\n    ValueError: y_true must be one-hot encoded.\n    >>> true_labels = np.array([[1, 0, 1], [1, 0, 0]])\n    >>> pred_probs = np.array([[0.9, 0.1, 0.0], [0.2, 0.7, 0.1]])\n    >>> categorical_cross_entropy(true_labels, pred_probs)\n    Traceback (most recent call last):\n        ...\n    ValueError: y_true must be one-hot encoded.\n    >>> true_labels = np.array([[1, 0, 0], [0, 1, 0]])\n    >>> pred_probs = np.array([[0.9, 0.1, 0.1], [0.2, 0.7, 0.1]])\n    >>> categorical_cross_entropy(true_labels, pred_probs)\n    Traceback (most recent call last):\n        ...\n    ValueError: Predicted probabilities must sum to approximately 1.\n    \"\"\"\n    if y_true.shape != y_pred.shape:\n        raise ValueError(\"Input arrays must have the same shape.\")\n\n    if np.any((y_true != 0) & (y_true != 1)) or np.any(y_true.sum(axis=1) != 1):\n        raise ValueError(\"y_true must be one-hot encoded.\")\n\n    if not np.all(np.isclose(np.sum(y_pred, axis=1), 1, rtol=epsilon, atol=epsilon)):\n        raise ValueError(\"Predicted probabilities must sum to approximately 1.\")\n\n    y_pred = np.clip(y_pred, epsilon, 1)  # Clip predictions to avoid log(0)\n    return -np.sum(y_true * np.log(y_pred))\n\n\ndef categorical_focal_cross_entropy(\n    y_true: np.ndarray,\n    y_pred: np.ndarray,\n    alpha: np.ndarray = None,\n    gamma: float = 2.0,\n    epsilon: float = 1e-15,\n) -> float:\n    \"\"\"\n    Calculate the mean categorical focal cross-entropy (CFCE) loss between true\n    labels and predicted probabilities for multi-class classification.\n\n    CFCE loss is a generalization of binary focal cross-entropy for multi-class\n    classification. It addresses class imbalance by focusing on hard examples.\n\n    CFCE = -Σ alpha * (1 - y_pred)**gamma * y_true * log(y_pred)\n\n    Reference: [Lin et al., 2018](https://arxiv.org/pdf/1708.02002.pdf)\n\n    Parameters:\n    - y_true: True labels in one-hot encoded form.\n    - y_pred: Predicted probabilities for each class.\n    - alpha: Array of weighting factors for each class.\n    - gamma: Focusing parameter for modulating the loss (default: 2.0).\n    - epsilon: Small constant to avoid numerical instability.\n\n    Returns:\n    - The mean categorical focal cross-entropy loss.\n\n    >>> true_labels = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])\n    >>> pred_probs = np.array([[0.9, 0.1, 0.0], [0.2, 0.7, 0.1], [0.0, 0.1, 0.9]])\n    >>> alpha = np.array([0.6, 0.2, 0.7])\n    >>> float(categorical_focal_cross_entropy(true_labels, pred_probs, alpha))\n    0.0025966118981496423\n\n    >>> true_labels = np.array([[0, 1, 0], [0, 0, 1]])\n    >>> pred_probs = np.array([[0.05, 0.95, 0], [0.1, 0.8, 0.1]])\n    >>> alpha = np.array([0.25, 0.25, 0.25])\n    >>> float(categorical_focal_cross_entropy(true_labels, pred_probs, alpha))\n    0.23315276982014324\n\n    >>> true_labels = np.array([[1, 0], [0, 1]])\n    >>> pred_probs = np.array([[0.9, 0.1, 0.0], [0.2, 0.7, 0.1]])\n    >>> categorical_cross_entropy(true_labels, pred_probs)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input arrays must have the same shape.\n\n    >>> true_labels = np.array([[2, 0, 1], [1, 0, 0]])\n    >>> pred_probs = np.array([[0.9, 0.1, 0.0], [0.2, 0.7, 0.1]])\n    >>> categorical_focal_cross_entropy(true_labels, pred_probs)\n    Traceback (most recent call last):\n        ...\n    ValueError: y_true must be one-hot encoded.\n\n    >>> true_labels = np.array([[1, 0, 1], [1, 0, 0]])\n    >>> pred_probs = np.array([[0.9, 0.1, 0.0], [0.2, 0.7, 0.1]])\n    >>> categorical_focal_cross_entropy(true_labels, pred_probs)\n    Traceback (most recent call last):\n        ...\n    ValueError: y_true must be one-hot encoded.\n\n    >>> true_labels = np.array([[1, 0, 0], [0, 1, 0]])\n    >>> pred_probs = np.array([[0.9, 0.1, 0.1], [0.2, 0.7, 0.1]])\n    >>> categorical_focal_cross_entropy(true_labels, pred_probs)\n    Traceback (most recent call last):\n        ...\n    ValueError: Predicted probabilities must sum to approximately 1.\n\n    >>> true_labels = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])\n    >>> pred_probs = np.array([[0.9, 0.1, 0.0], [0.2, 0.7, 0.1], [0.0, 0.1, 0.9]])\n    >>> alpha = np.array([0.6, 0.2])\n    >>> categorical_focal_cross_entropy(true_labels, pred_probs, alpha)\n    Traceback (most recent call last):\n        ...\n    ValueError: Length of alpha must match the number of classes.\n    \"\"\"\n    if y_true.shape != y_pred.shape:\n        raise ValueError(\"Shape of y_true and y_pred must be the same.\")\n\n    if alpha is None:\n        alpha = np.ones(y_true.shape[1])\n\n    if np.any((y_true != 0) & (y_true != 1)) or np.any(y_true.sum(axis=1) != 1):\n        raise ValueError(\"y_true must be one-hot encoded.\")\n\n    if len(alpha) != y_true.shape[1]:\n        raise ValueError(\"Length of alpha must match the number of classes.\")\n\n    if not np.all(np.isclose(np.sum(y_pred, axis=1), 1, rtol=epsilon, atol=epsilon)):\n        raise ValueError(\"Predicted probabilities must sum to approximately 1.\")\n\n    # Clip predicted probabilities to avoid log(0)\n    y_pred = np.clip(y_pred, epsilon, 1 - epsilon)\n\n    # Calculate loss for each class and sum across classes\n    cfce_loss = -np.sum(\n        alpha * np.power(1 - y_pred, gamma) * y_true * np.log(y_pred), axis=1\n    )\n\n    return np.mean(cfce_loss)\n\n\ndef hinge_loss(y_true: np.ndarray, y_pred: np.ndarray) -> float:\n    \"\"\"\n    Calculate the mean hinge loss for between true labels and predicted probabilities\n    for training support vector machines (SVMs).\n\n    Hinge loss = max(0, 1 - true * pred)\n\n    Reference: https://en.wikipedia.org/wiki/Hinge_loss\n\n    Args:\n    - y_true: actual values (ground truth) encoded as -1 or 1\n    - y_pred: predicted values\n\n    >>> true_labels = np.array([-1, 1, 1, -1, 1])\n    >>> pred = np.array([-4, -0.3, 0.7, 5, 10])\n    >>> float(hinge_loss(true_labels, pred))\n    1.52\n    >>> true_labels = np.array([-1, 1, 1, -1, 1, 1])\n    >>> pred = np.array([-4, -0.3, 0.7, 5, 10])\n    >>> hinge_loss(true_labels, pred)\n    Traceback (most recent call last):\n    ...\n    ValueError: Length of predicted and actual array must be same.\n    >>> true_labels = np.array([-1, 1, 10, -1, 1])\n    >>> pred = np.array([-4, -0.3, 0.7, 5, 10])\n    >>> hinge_loss(true_labels, pred)\n    Traceback (most recent call last):\n    ...\n    ValueError: y_true can have values -1 or 1 only.\n    \"\"\"\n    if len(y_true) != len(y_pred):\n        raise ValueError(\"Length of predicted and actual array must be same.\")\n\n    if np.any((y_true != -1) & (y_true != 1)):\n        raise ValueError(\"y_true can have values -1 or 1 only.\")\n\n    hinge_losses = np.maximum(0, 1.0 - (y_true * y_pred))\n    return np.mean(hinge_losses)\n\n\ndef huber_loss(y_true: np.ndarray, y_pred: np.ndarray, delta: float) -> float:\n    \"\"\"\n    Calculate the mean Huber loss between the given ground truth and predicted values.\n\n    The Huber loss describes the penalty incurred by an estimation procedure, and it\n    serves as a measure of accuracy for regression models.\n\n    Huber loss =\n        0.5 * (y_true - y_pred)^2                   if |y_true - y_pred| <= delta\n        delta * |y_true - y_pred| - 0.5 * delta^2   otherwise\n\n    Reference: https://en.wikipedia.org/wiki/Huber_loss\n\n    Parameters:\n    - y_true: The true values (ground truth)\n    - y_pred: The predicted values\n\n    >>> true_values = np.array([0.9, 10.0, 2.0, 1.0, 5.2])\n    >>> predicted_values = np.array([0.8, 2.1, 2.9, 4.2, 5.2])\n    >>> bool(np.isclose(huber_loss(true_values, predicted_values, 1.0), 2.102))\n    True\n    >>> true_labels = np.array([11.0, 21.0, 3.32, 4.0, 5.0])\n    >>> predicted_probs = np.array([8.3, 20.8, 2.9, 11.2, 5.0])\n    >>> bool(np.isclose(huber_loss(true_labels, predicted_probs, 1.0), 1.80164))\n    True\n    >>> true_labels = np.array([11.0, 21.0, 3.32, 4.0])\n    >>> predicted_probs = np.array([8.3, 20.8, 2.9, 11.2, 5.0])\n    >>> huber_loss(true_labels, predicted_probs, 1.0)\n    Traceback (most recent call last):\n    ...\n    ValueError: Input arrays must have the same length.\n    \"\"\"\n    if len(y_true) != len(y_pred):\n        raise ValueError(\"Input arrays must have the same length.\")\n\n    huber_mse = 0.5 * (y_true - y_pred) ** 2\n    huber_mae = delta * (np.abs(y_true - y_pred) - 0.5 * delta)\n    return np.where(np.abs(y_true - y_pred) <= delta, huber_mse, huber_mae).mean()\n\n\ndef mean_squared_error(y_true: np.ndarray, y_pred: np.ndarray) -> float:\n    \"\"\"\n    Calculate the mean squared error (MSE) between ground truth and predicted values.\n\n    MSE measures the squared difference between true values and predicted values, and it\n    serves as a measure of accuracy for regression models.\n\n    MSE = (1/n) * Σ(y_true - y_pred)^2\n\n    Reference: https://en.wikipedia.org/wiki/Mean_squared_error\n\n    Parameters:\n    - y_true: The true values (ground truth)\n    - y_pred: The predicted values\n\n    >>> true_values = np.array([1.0, 2.0, 3.0, 4.0, 5.0])\n    >>> predicted_values = np.array([0.8, 2.1, 2.9, 4.2, 5.2])\n    >>> bool(np.isclose(mean_squared_error(true_values, predicted_values), 0.028))\n    True\n    >>> true_labels = np.array([1.0, 2.0, 3.0, 4.0, 5.0])\n    >>> predicted_probs = np.array([0.3, 0.8, 0.9, 0.2])\n    >>> mean_squared_error(true_labels, predicted_probs)\n    Traceback (most recent call last):\n    ...\n    ValueError: Input arrays must have the same length.\n    \"\"\"\n    if len(y_true) != len(y_pred):\n        raise ValueError(\"Input arrays must have the same length.\")\n\n    squared_errors = (y_true - y_pred) ** 2\n    return np.mean(squared_errors)\n\n\ndef mean_absolute_error(y_true: np.ndarray, y_pred: np.ndarray) -> float:\n    \"\"\"\n    Calculates the Mean Absolute Error (MAE) between ground truth (observed)\n        and predicted values.\n\n    MAE measures the absolute difference between true values and predicted values.\n\n    Equation:\n    MAE = (1/n) * Σ(abs(y_true - y_pred))\n\n    Reference: https://en.wikipedia.org/wiki/Mean_absolute_error\n\n    Parameters:\n    - y_true: The true values (ground truth)\n    - y_pred: The predicted values\n\n    >>> true_values = np.array([1.0, 2.0, 3.0, 4.0, 5.0])\n    >>> predicted_values = np.array([0.8, 2.1, 2.9, 4.2, 5.2])\n    >>> bool(np.isclose(mean_absolute_error(true_values, predicted_values), 0.16))\n    True\n    >>> true_values = np.array([1.0, 2.0, 3.0, 4.0, 5.0])\n    >>> predicted_values = np.array([0.8, 2.1, 2.9, 4.2, 5.2])\n    >>> bool(np.isclose(mean_absolute_error(true_values, predicted_values), 2.16))\n    False\n    >>> true_labels = np.array([1.0, 2.0, 3.0, 4.0, 5.0])\n    >>> predicted_probs = np.array([0.3, 0.8, 0.9, 5.2])\n    >>> mean_absolute_error(true_labels, predicted_probs)\n    Traceback (most recent call last):\n    ...\n    ValueError: Input arrays must have the same length.\n    \"\"\"\n    if len(y_true) != len(y_pred):\n        raise ValueError(\"Input arrays must have the same length.\")\n\n    return np.mean(abs(y_true - y_pred))\n\n\ndef mean_squared_logarithmic_error(y_true: np.ndarray, y_pred: np.ndarray) -> float:\n    \"\"\"\n    Calculate the mean squared logarithmic error (MSLE) between ground truth and\n    predicted values.\n\n    MSLE measures the squared logarithmic difference between true values and predicted\n    values for regression models. It's particularly useful for dealing with skewed or\n    large-value data, and it's often used when the relative differences between\n    predicted and true values are more important than absolute differences.\n\n    MSLE = (1/n) * Σ(log(1 + y_true) - log(1 + y_pred))^2\n\n    Reference: https://insideaiml.com/blog/MeanSquared-Logarithmic-Error-Loss-1035\n\n    Parameters:\n    - y_true: The true values (ground truth)\n    - y_pred: The predicted values\n\n    >>> true_values = np.array([1.0, 2.0, 3.0, 4.0, 5.0])\n    >>> predicted_values = np.array([0.8, 2.1, 2.9, 4.2, 5.2])\n    >>> float(mean_squared_logarithmic_error(true_values, predicted_values))\n    0.0030860877925181344\n    >>> true_labels = np.array([1.0, 2.0, 3.0, 4.0, 5.0])\n    >>> predicted_probs = np.array([0.3, 0.8, 0.9, 0.2])\n    >>> mean_squared_logarithmic_error(true_labels, predicted_probs)\n    Traceback (most recent call last):\n    ...\n    ValueError: Input arrays must have the same length.\n    \"\"\"\n    if len(y_true) != len(y_pred):\n        raise ValueError(\"Input arrays must have the same length.\")\n\n    squared_logarithmic_errors = (np.log1p(y_true) - np.log1p(y_pred)) ** 2\n    return np.mean(squared_logarithmic_errors)\n\n\ndef mean_absolute_percentage_error(\n    y_true: np.ndarray, y_pred: np.ndarray, epsilon: float = 1e-15\n) -> float:\n    \"\"\"\n    Calculate the Mean Absolute Percentage Error between y_true and y_pred.\n\n    Mean Absolute Percentage Error calculates the average of the absolute\n    percentage differences between the predicted and true values.\n\n    Formula = (Σ|y_true[i]-Y_pred[i]/y_true[i]|)/n\n\n    Source: https://stephenallwright.com/good-mape-score/\n\n    Parameters:\n    y_true (np.ndarray): Numpy array containing true/target values.\n    y_pred (np.ndarray): Numpy array containing predicted values.\n\n    Returns:\n    float: The Mean Absolute Percentage error between y_true and y_pred.\n\n    Examples:\n    >>> y_true = np.array([10, 20, 30, 40])\n    >>> y_pred = np.array([12, 18, 33, 45])\n    >>> float(mean_absolute_percentage_error(y_true, y_pred))\n    0.13125\n\n    >>> y_true = np.array([1, 2, 3, 4])\n    >>> y_pred = np.array([2, 3, 4, 5])\n    >>> float(mean_absolute_percentage_error(y_true, y_pred))\n    0.5208333333333333\n\n    >>> y_true = np.array([34, 37, 44, 47, 48, 48, 46, 43, 32, 27, 26, 24])\n    >>> y_pred = np.array([37, 40, 46, 44, 46, 50, 45, 44, 34, 30, 22, 23])\n    >>> float(mean_absolute_percentage_error(y_true, y_pred))\n    0.064671076436071\n    \"\"\"\n    if len(y_true) != len(y_pred):\n        raise ValueError(\"The length of the two arrays should be the same.\")\n\n    y_true = np.where(y_true == 0, epsilon, y_true)\n    absolute_percentage_diff = np.abs((y_true - y_pred) / y_true)\n\n    return np.mean(absolute_percentage_diff)\n\n\ndef perplexity_loss(\n    y_true: np.ndarray, y_pred: np.ndarray, epsilon: float = 1e-7\n) -> float:\n    \"\"\"\n    Calculate the perplexity for the y_true and y_pred.\n\n    Compute the Perplexity which useful in predicting language model\n    accuracy in Natural Language Processing (NLP.)\n    Perplexity is measure of how certain the model in its predictions.\n\n    Perplexity Loss = exp(-1/N (Σ ln(p(x)))\n\n    Reference:\n    https://en.wikipedia.org/wiki/Perplexity\n\n    Args:\n        y_true: Actual label encoded sentences of shape (batch_size, sentence_length)\n        y_pred: Predicted sentences of shape (batch_size, sentence_length, vocab_size)\n        epsilon: Small floating point number to avoid getting inf for log(0)\n\n    Returns:\n        Perplexity loss between y_true and y_pred.\n\n    >>> y_true = np.array([[1, 4], [2, 3]])\n    >>> y_pred = np.array(\n    ...    [[[0.28, 0.19, 0.21 , 0.15, 0.15],\n    ...      [0.24, 0.19, 0.09, 0.18, 0.27]],\n    ...      [[0.03, 0.26, 0.21, 0.18, 0.30],\n    ...       [0.28, 0.10, 0.33, 0.15, 0.12]]]\n    ... )\n    >>> float(perplexity_loss(y_true, y_pred))\n    5.0247347775367945\n    >>> y_true = np.array([[1, 4], [2, 3]])\n    >>> y_pred = np.array(\n    ...    [[[0.28, 0.19, 0.21 , 0.15, 0.15],\n    ...      [0.24, 0.19, 0.09, 0.18, 0.27],\n    ...      [0.30, 0.10, 0.20, 0.15, 0.25]],\n    ...      [[0.03, 0.26, 0.21, 0.18, 0.30],\n    ...       [0.28, 0.10, 0.33, 0.15, 0.12],\n    ...       [0.30, 0.10, 0.20, 0.15, 0.25]],]\n    ... )\n    >>> perplexity_loss(y_true, y_pred)\n    Traceback (most recent call last):\n    ...\n    ValueError: Sentence length of y_true and y_pred must be equal.\n    >>> y_true = np.array([[1, 4], [2, 11]])\n    >>> y_pred = np.array(\n    ...    [[[0.28, 0.19, 0.21 , 0.15, 0.15],\n    ...      [0.24, 0.19, 0.09, 0.18, 0.27]],\n    ...      [[0.03, 0.26, 0.21, 0.18, 0.30],\n    ...       [0.28, 0.10, 0.33, 0.15, 0.12]]]\n    ... )\n    >>> perplexity_loss(y_true, y_pred)\n    Traceback (most recent call last):\n    ...\n    ValueError: Label value must not be greater than vocabulary size.\n    >>> y_true = np.array([[1, 4]])\n    >>> y_pred = np.array(\n    ...    [[[0.28, 0.19, 0.21 , 0.15, 0.15],\n    ...      [0.24, 0.19, 0.09, 0.18, 0.27]],\n    ...      [[0.03, 0.26, 0.21, 0.18, 0.30],\n    ...       [0.28, 0.10, 0.33, 0.15, 0.12]]]\n    ... )\n    >>> perplexity_loss(y_true, y_pred)\n    Traceback (most recent call last):\n    ...\n    ValueError: Batch size of y_true and y_pred must be equal.\n    \"\"\"\n\n    vocab_size = y_pred.shape[2]\n\n    if y_true.shape[0] != y_pred.shape[0]:\n        raise ValueError(\"Batch size of y_true and y_pred must be equal.\")\n    if y_true.shape[1] != y_pred.shape[1]:\n        raise ValueError(\"Sentence length of y_true and y_pred must be equal.\")\n    if np.max(y_true) > vocab_size:\n        raise ValueError(\"Label value must not be greater than vocabulary size.\")\n\n    # Matrix to select prediction value only for true class\n    filter_matrix = np.array(\n        [[list(np.eye(vocab_size)[word]) for word in sentence] for sentence in y_true]\n    )\n\n    # Getting the matrix containing prediction for only true class\n    true_class_pred = np.sum(y_pred * filter_matrix, axis=2).clip(epsilon, 1)\n\n    # Calculating perplexity for each sentence\n    perp_losses = np.exp(np.negative(np.mean(np.log(true_class_pred), axis=1)))\n\n    return np.mean(perp_losses)\n\n\ndef smooth_l1_loss(y_true: np.ndarray, y_pred: np.ndarray, beta: float = 1.0) -> float:\n    \"\"\"\n    Calculate the Smooth L1 Loss between y_true and y_pred.\n\n    The Smooth L1 Loss is less sensitive to outliers than the L2 Loss and is often used\n    in regression problems, such as object detection.\n\n    Smooth L1 Loss =\n        0.5 * (x - y)^2 / beta, if |x - y| < beta\n        |x - y| - 0.5 * beta, otherwise\n\n    Reference:\n    https://pytorch.org/docs/stable/generated/torch.nn.SmoothL1Loss.html\n\n    Args:\n        y_true: Array of true values.\n        y_pred: Array of predicted values.\n        beta: Specifies the threshold at which to change between L1 and L2 loss.\n\n    Returns:\n        The calculated Smooth L1 Loss between y_true and y_pred.\n\n    Raises:\n        ValueError: If the length of the two arrays is not the same.\n\n    >>> y_true = np.array([3, 5, 2, 7])\n    >>> y_pred = np.array([2.9, 4.8, 2.1, 7.2])\n    >>> float(smooth_l1_loss(y_true, y_pred, 1.0))\n    0.012500000000000022\n\n    >>> y_true = np.array([2, 4, 6])\n    >>> y_pred = np.array([1, 5, 7])\n    >>> float(smooth_l1_loss(y_true, y_pred, 1.0))\n    0.5\n\n    >>> y_true = np.array([1, 3, 5, 7])\n    >>> y_pred = np.array([1, 3, 5, 7])\n    >>> float(smooth_l1_loss(y_true, y_pred, 1.0))\n    0.0\n\n    >>> y_true = np.array([1, 3, 5])\n    >>> y_pred = np.array([1, 3, 5, 7])\n    >>> smooth_l1_loss(y_true, y_pred, 1.0)\n    Traceback (most recent call last):\n    ...\n    ValueError: The length of the two arrays should be the same.\n    \"\"\"\n\n    if len(y_true) != len(y_pred):\n        raise ValueError(\"The length of the two arrays should be the same.\")\n\n    diff = np.abs(y_true - y_pred)\n    loss = np.where(diff < beta, 0.5 * diff**2 / beta, diff - 0.5 * beta)\n    return np.mean(loss)\n\n\ndef kullback_leibler_divergence(y_true: np.ndarray, y_pred: np.ndarray) -> float:\n    \"\"\"\n    Calculate the Kullback-Leibler divergence (KL divergence) loss between true labels\n    and predicted probabilities.\n\n    KL divergence loss quantifies dissimilarity between true labels and predicted\n    probabilities. It's often used in training generative models.\n\n    KL = Σ(y_true * ln(y_true / y_pred))\n\n    Reference: https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence\n\n    Parameters:\n    - y_true: True class probabilities\n    - y_pred: Predicted class probabilities\n\n    >>> true_labels = np.array([0.2, 0.3, 0.5])\n    >>> predicted_probs = np.array([0.3, 0.3, 0.4])\n    >>> float(kullback_leibler_divergence(true_labels, predicted_probs))\n    0.030478754035472025\n    >>> true_labels = np.array([0.2, 0.3, 0.5])\n    >>> predicted_probs = np.array([0.3, 0.3, 0.4, 0.5])\n    >>> kullback_leibler_divergence(true_labels, predicted_probs)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input arrays must have the same length.\n    \"\"\"\n    if len(y_true) != len(y_pred):\n        raise ValueError(\"Input arrays must have the same length.\")\n\n    kl_loss = y_true * np.log(y_true / y_pred)\n    return np.sum(kl_loss)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "machine_learning/lstm/__init__.py",
    "content": ""
  },
  {
    "path": "machine_learning/lstm/lstm_prediction.py",
    "content": "\"\"\"\nCreate a Long Short Term Memory (LSTM) network model\nAn LSTM is a type of Recurrent Neural Network (RNN) as discussed at:\n* https://colah.github.io/posts/2015-08-Understanding-LSTMs\n* https://en.wikipedia.org/wiki/Long_short-term_memory\n\"\"\"\n\nimport numpy as np\nimport pandas as pd\nfrom keras.layers import LSTM, Dense\nfrom keras.models import Sequential\nfrom sklearn.preprocessing import MinMaxScaler\n\nif __name__ == \"__main__\":\n    \"\"\"\n    First part of building a model is to get the data and prepare\n    it for our model. You can use any dataset for stock prediction\n    make sure you set the price column on line number 21.  Here we\n    use a dataset which have the price on 3rd column.\n    \"\"\"\n    sample_data = pd.read_csv(\"sample_data.csv\", header=None)\n    len_data = sample_data.shape[:1][0]\n    # If you're using some other dataset input the target column\n    actual_data = sample_data.iloc[:, 1:2]\n    actual_data = actual_data.to_numpy().reshape(len_data, 1)\n    actual_data = MinMaxScaler().fit_transform(actual_data)\n    look_back = 10\n    forward_days = 5\n    periods = 20\n    division = len_data - periods * look_back\n    train_data = actual_data[:division]\n    test_data = actual_data[division - look_back :]\n    train_x, train_y = [], []\n    test_x, test_y = [], []\n\n    for i in range(len(train_data) - forward_days - look_back + 1):\n        train_x.append(train_data[i : i + look_back])\n        train_y.append(train_data[i + look_back : i + look_back + forward_days])\n    for i in range(len(test_data) - forward_days - look_back + 1):\n        test_x.append(test_data[i : i + look_back])\n        test_y.append(test_data[i + look_back : i + look_back + forward_days])\n    x_train = np.array(train_x)\n    x_test = np.array(test_x)\n    y_train = np.array([list(i.ravel()) for i in train_y])\n    y_test = np.array([list(i.ravel()) for i in test_y])\n\n    model = Sequential()\n    model.add(LSTM(128, input_shape=(look_back, 1), return_sequences=True))\n    model.add(LSTM(64, input_shape=(128, 1)))\n    model.add(Dense(forward_days))\n    model.compile(loss=\"mean_squared_error\", optimizer=\"adam\")\n    history = model.fit(\n        x_train, y_train, epochs=150, verbose=1, shuffle=True, batch_size=4\n    )\n    pred = model.predict(x_test)\n"
  },
  {
    "path": "machine_learning/lstm/sample_data.csv",
    "content": "04/24/2020,  1279.31, 1640394,  1261.17,  1280.4,  1249.45\n04/23/2020,  1276.31, 1566203,  1271.55,  1293.31,  1265.67\n04/22/2020,  1263.21, 2093140,  1245.54,  1285.6133,  1242\n04/21/2020,  1216.34, 2153003,  1247,  1254.27,  1209.71\n04/20/2020,  1266.61, 1695488,  1271,  1281.6,  1261.37\n04/17/2020,  1283.25, 1949042,  1284.85,  1294.43,  1271.23\n04/16/2020,  1263.47, 2518099,  1274.1,  1279,  1242.62\n04/15/2020,  1262.47, 1671703,  1245.61,  1280.46,  1240.4\n04/14/2020,  1269.23, 2470353,  1245.09,  1282.07,  1236.93\n04/13/2020,  1217.56, 1739828,  1209.18,  1220.51,  1187.5984\n04/09/2020,  1211.45, 2175421,  1224.08,  1225.57,  1196.7351\n04/08/2020,  1210.28, 1975135,  1206.5,  1219.07,  1188.16\n04/07/2020,  1186.51, 2387329,  1221,  1225,  1182.23\n04/06/2020,  1186.92, 2664723,  1138,  1194.66,  1130.94\n04/03/2020,  1097.88, 2313400,  1119.015,  1123.54,  1079.81\n04/02/2020,  1120.84, 1964881,  1098.26,  1126.86,  1096.4\n04/01/2020,  1105.62, 2344173,  1122,  1129.69,  1097.45\n03/31/2020,  1162.81, 2487983,  1147.3,  1175.31,  1138.14\n03/30/2020,  1146.82, 2574061,  1125.04,  1151.63,  1096.48\n03/27/2020,  1110.71, 3208495,  1125.67,  1150.6702,  1105.91\n03/26/2020,  1161.75, 3573755,  1111.8,  1169.97,  1093.53\n03/25/2020,  1102.49, 4081528,  1126.47,  1148.9,  1086.01\n03/24/2020,  1134.46, 3344450,  1103.77,  1135,  1090.62\n03/23/2020,  1056.62, 4044137,  1061.32,  1071.32,  1013.5361\n03/20/2020,  1072.32, 3601750,  1135.72,  1143.99,  1065.49\n03/19/2020,  1115.29, 3651106,  1093.05,  1157.9699,  1060.1075\n03/18/2020,  1096.8, 4233435,  1056.51,  1106.5,  1037.28\n03/17/2020,  1119.8, 3861489,  1093.11,  1130.86,  1056.01\n03/16/2020,  1084.33, 4252365,  1096,  1152.2665,  1074.44\n03/13/2020,  1219.73, 3700125,  1179,  1219.76,  1117.1432\n03/12/2020,  1114.91, 4226748,  1126,  1193.87,  1113.3\n03/11/2020,  1215.41, 2611229,  1249.7,  1260.96,  1196.07\n03/10/2020,  1280.39, 2611373,  1260,  1281.15,  1218.77\n03/09/2020,  1215.56, 3365365,  1205.3,  1254.7599,  1200\n03/06/2020,  1298.41, 2660628,  1277.06,  1306.22,  1261.05\n03/05/2020,  1319.04, 2561288,  1350.2,  1358.91,  1305.1\n03/04/2020,  1386.52, 1913315,  1359.23,  1388.09,  1343.11\n03/03/2020,  1341.39, 2402326,  1399.42,  1410.15,  1332\n03/02/2020,  1389.11, 2431468,  1351.61,  1390.87,  1326.815\n02/28/2020,  1339.33, 3790618,  1277.5,  1341.14,  1271\n02/27/2020,  1318.09, 2978300,  1362.06,  1371.7037,  1317.17\n02/26/2020,  1393.18, 2204037,  1396.14,  1415.7,  1379\n02/25/2020,  1388.45, 2478278,  1433,  1438.14,  1382.4\n02/24/2020,  1421.59, 2867053,  1426.11,  1436.97,  1411.39\n02/21/2020,  1485.11, 1732273,  1508.03,  1512.215,  1480.44\n02/20/2020,  1518.15, 1096552,  1522,  1529.64,  1506.82\n02/19/2020,  1526.69, 949268,  1525.07,  1532.1063,  1521.4\n02/18/2020,  1519.67, 1121140,  1515,  1531.63,  1512.59\n02/14/2020,  1520.74, 1197836,  1515.6,  1520.74,  1507.34\n02/13/2020,  1514.66, 929730,  1512.69,  1527.18,  1504.6\n02/12/2020,  1518.27, 1167565,  1514.48,  1520.695,  1508.11\n02/11/2020,  1508.79, 1344633,  1511.81,  1529.63,  1505.6378\n02/10/2020,  1508.68, 1419876,  1474.32,  1509.5,  1474.32\n02/07/2020,  1479.23, 1172270,  1467.3,  1485.84,  1466.35\n02/06/2020,  1476.23, 1679384,  1450.33,  1481.9997,  1449.57\n02/05/2020,  1448.23, 1986157,  1462.42,  1463.84,  1430.56\n02/04/2020,  1447.07, 3932954,  1457.07,  1469.5,  1426.3\n02/03/2020,  1485.94, 3055216,  1462,  1490,  1458.99\n01/31/2020,  1434.23, 2417214,  1468.9,  1470.13,  1428.53\n01/30/2020,  1455.84, 1339421,  1439.96,  1457.28,  1436.4\n01/29/2020,  1458.63, 1078667,  1458.8,  1465.43,  1446.74\n01/28/2020,  1452.56, 1577422,  1443,  1456,  1432.47\n01/27/2020,  1433.9, 1755201,  1431,  1438.07,  1421.2\n01/24/2020,  1466.71, 1784644,  1493.59,  1495.495,  1465.25\n01/23/2020,  1486.65, 1351354,  1487.64,  1495.52,  1482.1\n01/22/2020,  1485.95, 1610846,  1491,  1503.2143,  1484.93\n01/21/2020,  1484.4, 2036780,  1479.12,  1491.85,  1471.2\n01/17/2020,  1480.39, 2396215,  1462.91,  1481.2954,  1458.22\n01/16/2020,  1451.7, 1173688,  1447.44,  1451.99,  1440.92\n01/15/2020,  1439.2, 1282685,  1430.21,  1441.395,  1430.21\n01/14/2020,  1430.88, 1560453,  1439.01,  1441.8,  1428.37\n01/13/2020,  1439.23, 1653482,  1436.13,  1440.52,  1426.02\n01/10/2020,  1429.73, 1821566,  1427.56,  1434.9292,  1418.35\n01/09/2020,  1419.83, 1502664,  1420.57,  1427.33,  1410.27\n01/08/2020,  1404.32, 1529177,  1392.08,  1411.58,  1390.84\n01/07/2020,  1393.34, 1511693,  1397.94,  1402.99,  1390.38\n01/06/2020,  1394.21, 1733149,  1350,  1396.5,  1350\n01/03/2020,  1360.66, 1187006,  1347.86,  1372.5,  1345.5436\n01/02/2020,  1367.37, 1406731,  1341.55,  1368.14,  1341.55\n12/31/2019,  1337.02, 962468,  1330.11,  1338,  1329.085\n12/30/2019,  1336.14, 1051323,  1350,  1353,  1334.02\n12/27/2019,  1351.89, 1038718,  1362.99,  1364.53,  1349.31\n12/26/2019,  1360.4, 667754,  1346.17,  1361.3269,  1344.47\n12/24/2019,  1343.56, 347518,  1348.5,  1350.26,  1342.78\n12/23/2019,  1348.84, 883200,  1355.87,  1359.7999,  1346.51\n12/20/2019,  1349.59, 3316905,  1363.35,  1363.64,  1349\n12/19/2019,  1356.04, 1470112,  1351.82,  1358.1,  1348.985\n12/18/2019,  1352.62, 1657069,  1356.6,  1360.47,  1351\n12/17/2019,  1355.12, 1855259,  1362.89,  1365,  1351.3231\n12/16/2019,  1361.17, 1397451,  1356.5,  1364.68,  1352.67\n12/13/2019,  1347.83, 1550028,  1347.95,  1353.0931,  1343.87\n12/12/2019,  1350.27, 1281722,  1345.94,  1355.775,  1340.5\n12/11/2019,  1345.02, 850796,  1350.84,  1351.2,  1342.67\n12/10/2019,  1344.66, 1094653,  1341.5,  1349.975,  1336.04\n12/09/2019,  1343.56, 1355795,  1338.04,  1359.45,  1337.84\n12/06/2019,  1340.62, 1315510,  1333.44,  1344,  1333.44\n12/05/2019,  1328.13, 1212818,  1328,  1329.3579,  1316.44\n12/04/2019,  1320.54, 1538110,  1307.01,  1325.8,  1304.87\n12/03/2019,  1295.28, 1268647,  1279.57,  1298.461,  1279\n12/02/2019,  1289.92, 1511851,  1301,  1305.83,  1281\n11/29/2019,  1304.96, 586981,  1307.12,  1310.205,  1303.97\n11/27/2019,  1312.99, 996329,  1315,  1318.36,  1309.63\n11/26/2019,  1313.55, 1069795,  1309.86,  1314.8,  1305.09\n11/25/2019,  1306.69, 1036487,  1299.18,  1311.31,  1298.13\n11/22/2019,  1295.34, 1386506,  1305.62,  1308.73,  1291.41\n11/21/2019,  1301.35, 995499,  1301.48,  1312.59,  1293\n11/20/2019,  1303.05, 1309835,  1311.74,  1315,  1291.15\n11/19/2019,  1315.46, 1269372,  1327.7,  1327.7,  1312.8\n11/18/2019,  1320.7, 1488083,  1332.22,  1335.5288,  1317.5\n11/15/2019,  1334.87, 1782955,  1318.94,  1334.88,  1314.2796\n11/14/2019,  1311.46, 1194305,  1297.5,  1317,  1295.65\n11/13/2019,  1298, 853861,  1294.07,  1304.3,  1293.51\n11/12/2019,  1298.8, 1085859,  1300,  1310,  1295.77\n11/11/2019,  1299.19, 1012429,  1303.18,  1306.425,  1297.41\n11/08/2019,  1311.37, 1251916,  1305.28,  1318,  1304.365\n11/07/2019,  1308.86, 2029970,  1294.28,  1323.74,  1294.245\n11/06/2019,  1291.8, 1152977,  1289.46,  1293.73,  1282.5\n11/05/2019,  1292.03, 1282711,  1292.89,  1298.93,  1291.2289\n11/04/2019,  1291.37, 1500964,  1276.45,  1294.13,  1276.355\n11/01/2019,  1273.74, 1670072,  1265,  1274.62,  1260.5\n10/31/2019,  1260.11, 1455651,  1261.28,  1267.67,  1250.8428\n10/30/2019,  1261.29, 1408851,  1252.97,  1269.36,  1252\n10/29/2019,  1262.62, 1886380,  1276.23,  1281.59,  1257.2119\n10/28/2019,  1290, 2613237,  1275.45,  1299.31,  1272.54\n10/25/2019,  1265.13, 1213051,  1251.03,  1269.6,  1250.01\n10/24/2019,  1260.99, 1039868,  1260.9,  1264,  1253.715\n10/23/2019,  1259.13, 928595,  1242.36,  1259.89,  1242.36\n10/22/2019,  1242.8, 1047851,  1247.85,  1250.6,  1241.38\n10/21/2019,  1246.15, 1038042,  1252.26,  1254.6287,  1240.6\n10/18/2019,  1245.49, 1352839,  1253.46,  1258.89,  1241.08\n10/17/2019,  1253.07, 980510,  1250.93,  1263.325,  1249.94\n10/16/2019,  1243.64, 1168174,  1241.17,  1254.74,  1238.45\n10/15/2019,  1243.01, 1395259,  1220.4,  1247.33,  1220.4\n10/14/2019,  1217.14, 882039,  1212.34,  1226.33,  1211.76\n10/11/2019,  1215.45, 1277144,  1222.21,  1228.39,  1213.74\n10/10/2019,  1208.67, 932531,  1198.58,  1215,  1197.34\n10/09/2019,  1202.31, 876632,  1199.35,  1208.35,  1197.63\n10/08/2019,  1189.13, 1141784,  1197.59,  1206.08,  1189.01\n10/07/2019,  1207.68, 867149,  1204.4,  1218.2036,  1203.75\n10/04/2019,  1209, 1183264,  1191.89,  1211.44,  1189.17\n10/03/2019,  1187.83, 1663656,  1180,  1189.06,  1162.43\n10/02/2019,  1176.63, 1639237,  1196.98,  1196.99,  1171.29\n10/01/2019,  1205.1, 1358279,  1219,  1231.23,  1203.58\n09/30/2019,  1219, 1419676,  1220.97,  1226,  1212.3\n09/27/2019,  1225.09, 1354432,  1243.01,  1244.02,  1214.45\n09/26/2019,  1241.39, 1561882,  1241.96,  1245,  1232.268\n09/25/2019,  1246.52, 1593875,  1215.82,  1248.3,  1210.09\n09/24/2019,  1218.76, 1591786,  1240,  1246.74,  1210.68\n09/23/2019,  1234.03, 1075253,  1226,  1239.09,  1224.17\n09/20/2019,  1229.93, 2337269,  1233.12,  1243.32,  1223.08\n09/19/2019,  1238.71, 1000155,  1232.06,  1244.44,  1232.02\n09/18/2019,  1232.41, 1144333,  1227.51,  1235.61,  1216.53\n09/17/2019,  1229.15, 958112,  1230.4,  1235,  1223.69\n09/16/2019,  1231.3, 1053299,  1229.52,  1239.56,  1225.61\n09/13/2019,  1239.56, 1301350,  1231.35,  1240.88,  1227.01\n09/12/2019,  1234.25, 1725908,  1224.3,  1241.86,  1223.02\n09/11/2019,  1220.17, 1307033,  1203.41,  1222.6,  1202.2\n09/10/2019,  1206, 1260115,  1195.15,  1210,  1194.58\n09/09/2019,  1204.41, 1471880,  1204,  1220,  1192.62\n09/06/2019,  1204.93, 1072143,  1208.13,  1212.015,  1202.5222\n09/05/2019,  1211.38, 1408601,  1191.53,  1213.04,  1191.53\n09/04/2019,  1181.41, 1068968,  1176.71,  1183.48,  1171\n09/03/2019,  1168.39, 1480420,  1177.03,  1186.89,  1163.2\n08/30/2019,  1188.1, 1129959,  1198.5,  1198.5,  1183.8026\n08/29/2019,  1192.85, 1088858,  1181.12,  1196.06,  1181.12\n08/28/2019,  1171.02, 802243,  1161.71,  1176.4199,  1157.3\n08/27/2019,  1167.84, 1077452,  1180.53,  1182.4,  1161.45\n08/26/2019,  1168.89, 1226441,  1157.26,  1169.47,  1152.96\n08/23/2019,  1151.29, 1688271,  1181.99,  1194.08,  1147.75\n08/22/2019,  1189.53, 947906,  1194.07,  1198.0115,  1178.58\n08/21/2019,  1191.25, 741053,  1193.15,  1199,  1187.43\n08/20/2019,  1182.69, 915605,  1195.25,  1196.06,  1182.11\n08/19/2019,  1198.45, 1232517,  1190.09,  1206.99,  1190.09\n08/16/2019,  1177.6, 1349436,  1179.55,  1182.72,  1171.81\n08/15/2019,  1167.26, 1224739,  1163.5,  1175.84,  1162.11\n08/14/2019,  1164.29, 1578668,  1176.31,  1182.3,  1160.54\n08/13/2019,  1197.27, 1318009,  1171.46,  1204.78,  1171.46\n08/12/2019,  1174.71, 1003187,  1179.21,  1184.96,  1167.6723\n08/09/2019,  1188.01, 1065658,  1197.99,  1203.88,  1183.603\n08/08/2019,  1204.8, 1467997,  1182.83,  1205.01,  1173.02\n08/07/2019,  1173.99, 1444324,  1156,  1178.4451,  1149.6239\n08/06/2019,  1169.95, 1709374,  1163.31,  1179.96,  1160\n08/05/2019,  1152.32, 2597455,  1170.04,  1175.24,  1140.14\n08/02/2019,  1193.99, 1645067,  1200.74,  1206.9,  1188.94\n08/01/2019,  1209.01, 1698510,  1214.03,  1234.11,  1205.72\n07/31/2019,  1216.68, 1725454,  1223,  1234,  1207.7635\n07/30/2019,  1225.14, 1453263,  1225.41,  1234.87,  1223.3\n07/29/2019,  1239.41, 2223731,  1241.05,  1247.37,  1228.23\n07/26/2019,  1250.41, 4805752,  1224.04,  1265.5499,  1224\n07/25/2019,  1132.12, 2209823,  1137.82,  1141.7,  1120.92\n07/24/2019,  1137.81, 1590101,  1131.9,  1144,  1126.99\n07/23/2019,  1146.21, 1093688,  1144,  1146.9,  1131.8\n07/22/2019,  1138.07, 1301846,  1133.45,  1139.25,  1124.24\n07/19/2019,  1130.1, 1647245,  1148.19,  1151.14,  1129.62\n07/18/2019,  1146.33, 1291281,  1141.74,  1147.605,  1132.73\n07/17/2019,  1146.35, 1170047,  1150.97,  1158.36,  1145.77\n07/16/2019,  1153.58, 1238807,  1146,  1158.58,  1145\n07/15/2019,  1150.34, 903780,  1146.86,  1150.82,  1139.4\n07/12/2019,  1144.9, 863973,  1143.99,  1147.34,  1138.78\n07/11/2019,  1144.21, 1195569,  1143.25,  1153.07,  1139.58\n07/10/2019,  1140.48, 1209466,  1131.22,  1142.05,  1130.97\n07/09/2019,  1124.83, 1330370,  1111.8,  1128.025,  1107.17\n07/08/2019,  1116.35, 1236419,  1125.17,  1125.98,  1111.21\n07/05/2019,  1131.59, 1264540,  1117.8,  1132.88,  1116.14\n07/03/2019,  1121.58, 767011,  1117.41,  1126.76,  1113.86\n07/02/2019,  1111.25, 991755,  1102.24,  1111.77,  1098.17\n07/01/2019,  1097.95, 1438504,  1098,  1107.58,  1093.703\n06/28/2019,  1080.91, 1693450,  1076.39,  1081,  1073.37\n06/27/2019,  1076.01, 1004477,  1084,  1087.1,  1075.29\n06/26/2019,  1079.8, 1810869,  1086.5,  1092.97,  1072.24\n06/25/2019,  1086.35, 1546913,  1112.66,  1114.35,  1083.8\n06/24/2019,  1115.52, 1395696,  1119.61,  1122,  1111.01\n06/21/2019,  1121.88, 1947591,  1109.24,  1124.11,  1108.08\n06/20/2019,  1111.42, 1262011,  1119.99,  1120.12,  1104.74\n06/19/2019,  1102.33, 1339218,  1105.6,  1107,  1093.48\n06/18/2019,  1103.6, 1386684,  1109.69,  1116.39,  1098.99\n06/17/2019,  1092.5, 941602,  1086.28,  1099.18,  1086.28\n06/14/2019,  1085.35, 1111643,  1086.42,  1092.69,  1080.1721\n06/13/2019,  1088.77, 1058000,  1083.64,  1094.17,  1080.15\n06/12/2019,  1077.03, 1061255,  1078,  1080.93,  1067.54\n06/11/2019,  1078.72, 1437063,  1093.98,  1101.99,  1077.6025\n06/10/2019,  1080.38, 1464248,  1072.98,  1092.66,  1072.3216\n06/07/2019,  1066.04, 1802370,  1050.63,  1070.92,  1048.4\n06/06/2019,  1044.34, 1703244,  1044.99,  1047.49,  1033.7\n06/05/2019,  1042.22, 2168439,  1051.54,  1053.55,  1030.49\n06/04/2019,  1053.05, 2833483,  1042.9,  1056.05,  1033.69\n06/03/2019,  1036.23, 5130576,  1065.5,  1065.5,  1025\n05/31/2019,  1103.63, 1508203,  1101.29,  1109.6,  1100.18\n05/30/2019,  1117.95, 951873,  1115.54,  1123.13,  1112.12\n05/29/2019,  1116.46, 1538212,  1127.52,  1129.1,  1108.2201\n05/28/2019,  1134.15, 1365166,  1134,  1151.5871,  1133.12\n05/24/2019,  1133.47, 1112341,  1147.36,  1149.765,  1131.66\n05/23/2019,  1140.77, 1199300,  1140.5,  1145.9725,  1129.224\n05/22/2019,  1151.42, 914839,  1146.75,  1158.52,  1145.89\n05/21/2019,  1149.63, 1160158,  1148.49,  1152.7077,  1137.94\n05/20/2019,  1138.85, 1353292,  1144.5,  1146.7967,  1131.4425\n05/17/2019,  1162.3, 1208623,  1168.47,  1180.15,  1160.01\n05/16/2019,  1178.98, 1531404,  1164.51,  1188.16,  1162.84\n05/15/2019,  1164.21, 2289302,  1117.87,  1171.33,  1116.6657\n05/14/2019,  1120.44, 1836604,  1137.21,  1140.42,  1119.55\n05/13/2019,  1132.03, 1860648,  1141.96,  1147.94,  1122.11\n05/10/2019,  1164.27, 1314546,  1163.59,  1172.6,  1142.5\n05/09/2019,  1162.38, 1185973,  1159.03,  1169.66,  1150.85\n05/08/2019,  1166.27, 1309514,  1172.01,  1180.4243,  1165.74\n05/07/2019,  1174.1, 1551368,  1180.47,  1190.44,  1161.04\n05/06/2019,  1189.39, 1563943,  1166.26,  1190.85,  1166.26\n05/03/2019,  1185.4, 1980653,  1173.65,  1186.8,  1169\n05/02/2019,  1162.61, 1944817,  1167.76,  1174.1895,  1155.0018\n05/01/2019,  1168.08, 2642983,  1188.05,  1188.05,  1167.18\n04/30/2019,  1188.48, 6194691,  1185,  1192.81,  1175\n04/29/2019,  1287.58, 2412788,  1274,  1289.27,  1266.2949\n04/26/2019,  1272.18, 1228276,  1269,  1273.07,  1260.32\n04/25/2019,  1263.45, 1099614,  1264.77,  1267.4083,  1252.03\n04/24/2019,  1256, 1015006,  1264.12,  1268.01,  1255\n04/23/2019,  1264.55, 1271195,  1250.69,  1269,  1246.38\n04/22/2019,  1248.84, 806577,  1235.99,  1249.09,  1228.31\n04/18/2019,  1236.37, 1315676,  1239.18,  1242,  1234.61\n04/17/2019,  1236.34, 1211866,  1233,  1240.56,  1227.82\n04/16/2019,  1227.13, 855258,  1225,  1230.82,  1220.12\n04/15/2019,  1221.1, 1187353,  1218,  1224.2,  1209.1101\n04/12/2019,  1217.87, 926799,  1210,  1218.35,  1208.11\n04/11/2019,  1204.62, 709417,  1203.96,  1207.96,  1200.13\n04/10/2019,  1202.16, 724524,  1200.68,  1203.785,  1196.435\n04/09/2019,  1197.25, 865416,  1196,  1202.29,  1193.08\n04/08/2019,  1203.84, 859969,  1207.89,  1208.69,  1199.86\n04/05/2019,  1207.15, 900950,  1214.99,  1216.22,  1205.03\n04/04/2019,  1215, 949962,  1205.94,  1215.67,  1204.13\n04/03/2019,  1205.92, 1014195,  1207.48,  1216.3,  1200.5\n04/02/2019,  1200.49, 800820,  1195.32,  1201.35,  1185.71\n04/01/2019,  1194.43, 1188235,  1184.1,  1196.66,  1182\n03/29/2019,  1173.31, 1269573,  1174.9,  1178.99,  1162.88\n03/28/2019,  1168.49, 966843,  1171.54,  1171.565,  1159.4312\n03/27/2019,  1173.02, 1362217,  1185.5,  1187.559,  1159.37\n03/26/2019,  1184.62, 1894639,  1198.53,  1202.83,  1176.72\n03/25/2019,  1193, 1493841,  1196.93,  1206.3975,  1187.04\n03/22/2019,  1205.5, 1668910,  1226.32,  1230,  1202.825\n03/21/2019,  1231.54, 1195899,  1216,  1231.79,  1213.15\n03/20/2019,  1223.97, 2089367,  1197.35,  1227.14,  1196.17\n03/19/2019,  1198.85, 1404863,  1188.81,  1200,  1185.87\n03/18/2019,  1184.26, 1212506,  1183.3,  1190,  1177.4211\n03/15/2019,  1184.46, 2457597,  1193.38,  1196.57,  1182.61\n03/14/2019,  1185.55, 1150950,  1194.51,  1197.88,  1184.48\n03/13/2019,  1193.32, 1434816,  1200.645,  1200.93,  1191.94\n03/12/2019,  1193.2, 2012306,  1178.26,  1200,  1178.26\n03/11/2019,  1175.76, 1569332,  1144.45,  1176.19,  1144.45\n03/08/2019,  1142.32, 1212271,  1126.73,  1147.08,  1123.3\n03/07/2019,  1143.3, 1166076,  1155.72,  1156.755,  1134.91\n03/06/2019,  1157.86, 1094100,  1162.49,  1167.5658,  1155.49\n03/05/2019,  1162.03, 1422357,  1150.06,  1169.61,  1146.195\n03/04/2019,  1147.8, 1444774,  1146.99,  1158.2804,  1130.69\n03/01/2019,  1140.99, 1447454,  1124.9,  1142.97,  1124.75\n02/28/2019,  1119.92, 1541068,  1111.3,  1127.65,  1111.01\n02/27/2019,  1116.05, 968362,  1106.95,  1117.98,  1101\n02/26/2019,  1115.13, 1469761,  1105.75,  1119.51,  1099.92\n02/25/2019,  1109.4, 1395281,  1116,  1118.54,  1107.27\n02/22/2019,  1110.37, 1048361,  1100.9,  1111.24,  1095.6\n02/21/2019,  1096.97, 1414744,  1110.84,  1111.94,  1092.52\n02/20/2019,  1113.8, 1080144,  1119.99,  1123.41,  1105.28\n02/19/2019,  1118.56, 1046315,  1110,  1121.89,  1110\n02/15/2019,  1113.65, 1442461,  1130.08,  1131.67,  1110.65\n02/14/2019,  1121.67, 941678,  1118.05,  1128.23,  1110.445\n02/13/2019,  1120.16, 1048630,  1124.99,  1134.73,  1118.5\n02/12/2019,  1121.37, 1608658,  1106.8,  1125.295,  1105.85\n02/11/2019,  1095.01, 1063825,  1096.95,  1105.945,  1092.86\n02/08/2019,  1095.06, 1072031,  1087,  1098.91,  1086.55\n02/07/2019,  1098.71, 2040615,  1104.16,  1104.84,  1086\n02/06/2019,  1115.23, 2101674,  1139.57,  1147,  1112.77\n02/05/2019,  1145.99, 3529974,  1124.84,  1146.85,  1117.248\n02/04/2019,  1132.8, 2518184,  1112.66,  1132.8,  1109.02\n02/01/2019,  1110.75, 1455609,  1112.4,  1125,  1104.89\n01/31/2019,  1116.37, 1531463,  1103,  1117.33,  1095.41\n01/30/2019,  1089.06, 1241760,  1068.43,  1091,  1066.85\n01/29/2019,  1060.62, 1006731,  1072.68,  1075.15,  1055.8647\n01/28/2019,  1070.08, 1277745,  1080.11,  1083,  1063.8\n01/25/2019,  1090.99, 1114785,  1085,  1094,  1081.82\n01/24/2019,  1073.9, 1317718,  1076.48,  1079.475,  1060.7\n01/23/2019,  1075.57, 956526,  1077.35,  1084.93,  1059.75\n01/22/2019,  1070.52, 1607398,  1088,  1091.51,  1063.47\n01/18/2019,  1098.26, 1933754,  1100,  1108.352,  1090.9\n01/17/2019,  1089.9, 1223674,  1079.47,  1091.8,  1073.5\n01/16/2019,  1080.97, 1320530,  1080,  1092.375,  1079.34\n01/15/2019,  1077.15, 1452238,  1050.17,  1080.05,  1047.34\n01/14/2019,  1044.69, 1127417,  1046.92,  1051.53,  1041.255\n01/11/2019,  1057.19, 1512651,  1063.18,  1063.775,  1048.48\n01/10/2019,  1070.33, 1444976,  1067.66,  1071.15,  1057.71\n01/09/2019,  1074.66, 1198369,  1081.65,  1082.63,  1066.4\n01/08/2019,  1076.28, 1748371,  1076.11,  1084.56,  1060.53\n01/07/2019,  1068.39, 1978077,  1071.5,  1073.9999,  1054.76\n01/04/2019,  1070.71, 2080144,  1032.59,  1070.84,  1027.4179\n01/03/2019,  1016.06, 1829379,  1041,  1056.98,  1014.07\n01/02/2019,  1045.85, 1516681,  1016.57,  1052.32,  1015.71\n12/31/2018,  1035.61, 1492541,  1050.96,  1052.7,  1023.59\n12/28/2018,  1037.08, 1399218,  1049.62,  1055.56,  1033.1\n12/27/2018,  1043.88, 2102069,  1017.15,  1043.89,  997\n12/26/2018,  1039.46, 2337212,  989.01,  1040,  983\n12/24/2018,  976.22, 1590328,  973.9,  1003.54,  970.11\n12/21/2018,  979.54, 4560424,  1015.3,  1024.02,  973.69\n12/20/2018,  1009.41, 2659047,  1018.13,  1034.22,  996.36\n12/19/2018,  1023.01, 2419322,  1033.99,  1062,  1008.05\n12/18/2018,  1028.71, 2101854,  1026.09,  1049.48,  1021.44\n12/17/2018,  1016.53, 2337631,  1037.51,  1053.15,  1007.9\n12/14/2018,  1042.1, 1685802,  1049.98,  1062.6,  1040.79\n12/13/2018,  1061.9, 1329198,  1068.07,  1079.7597,  1053.93\n12/12/2018,  1063.68, 1523276,  1068,  1081.65,  1062.79\n12/11/2018,  1051.75, 1354751,  1056.49,  1060.6,  1039.84\n12/10/2018,  1039.55, 1793465,  1035.05,  1048.45,  1023.29\n12/07/2018,  1036.58, 2098526,  1060.01,  1075.26,  1028.5\n12/06/2018,  1068.73, 2758098,  1034.26,  1071.2,  1030.7701\n12/04/2018,  1050.82, 2278200,  1103.12,  1104.42,  1049.98\n12/03/2018,  1106.43, 1900355,  1123.14,  1124.65,  1103.6645\n11/30/2018,  1094.43, 2554416,  1089.07,  1095.57,  1077.88\n11/29/2018,  1088.3, 1403540,  1076.08,  1094.245,  1076\n11/28/2018,  1086.23, 2399374,  1048.76,  1086.84,  1035.76\n11/27/2018,  1044.41, 1801334,  1041,  1057.58,  1038.49\n11/26/2018,  1048.62, 1846430,  1038.35,  1049.31,  1033.91\n11/23/2018,  1023.88, 691462,  1030,  1037.59,  1022.3992\n11/21/2018,  1037.61, 1531676,  1036.76,  1048.56,  1033.47\n11/20/2018,  1025.76, 2447254,  1000,  1031.74,  996.02\n11/19/2018,  1020, 1837207,  1057.2,  1060.79,  1016.2601\n11/16/2018,  1061.49, 1641232,  1059.41,  1067,  1048.98\n11/15/2018,  1064.71, 1819132,  1044.71,  1071.85,  1031.78\n11/14/2018,  1043.66, 1561656,  1050,  1054.5643,  1031\n11/13/2018,  1036.05, 1496534,  1043.29,  1056.605,  1031.15\n11/12/2018,  1038.63, 1429319,  1061.39,  1062.12,  1031\n11/09/2018,  1066.15, 1343154,  1073.99,  1075.56,  1053.11\n11/08/2018,  1082.4, 1463022,  1091.38,  1093.27,  1072.2048\n11/07/2018,  1093.39, 2057155,  1069,  1095.46,  1065.9\n11/06/2018,  1055.81, 1225197,  1039.48,  1064.345,  1038.07\n11/05/2018,  1040.09, 2436742,  1055,  1058.47,  1021.24\n11/02/2018,  1057.79, 1829295,  1073.73,  1082.975,  1054.61\n11/01/2018,  1070, 1456222,  1075.8,  1083.975,  1062.46\n10/31/2018,  1076.77, 2528584,  1059.81,  1091.94,  1057\n10/30/2018,  1036.21, 3209126,  1008.46,  1037.49,  1000.75\n10/29/2018,  1020.08, 3873644,  1082.47,  1097.04,  995.83\n10/26/2018,  1071.47, 4185201,  1037.03,  1106.53,  1034.09\n10/25/2018,  1095.57, 2511884,  1071.79,  1110.98,  1069.55\n10/24/2018,  1050.71, 1910060,  1104.25,  1106.12,  1048.74\n10/23/2018,  1103.69, 1847798,  1080.89,  1107.89,  1070\n10/22/2018,  1101.16, 1494285,  1103.06,  1112.23,  1091\n10/19/2018,  1096.46, 1264605,  1093.37,  1110.36,  1087.75\n10/18/2018,  1087.97, 2056606,  1121.84,  1121.84,  1077.09\n10/17/2018,  1115.69, 1397613,  1126.46,  1128.99,  1102.19\n10/16/2018,  1121.28, 1845491,  1104.59,  1124.22,  1102.5\n10/15/2018,  1092.25, 1343231,  1108.91,  1113.4464,  1089\n10/12/2018,  1110.08, 2029872,  1108,  1115,  1086.402\n10/11/2018,  1079.32, 2939514,  1072.94,  1106.4,  1068.27\n10/10/2018,  1081.22, 2574985,  1131.08,  1132.17,  1081.13\n10/09/2018,  1138.82, 1308706,  1146.15,  1154.35,  1137.572\n10/08/2018,  1148.97, 1877142,  1150.11,  1168,  1127.3636\n10/05/2018,  1157.35, 1184245,  1167.5,  1173.4999,  1145.12\n10/04/2018,  1168.19, 2151762,  1195.33,  1197.51,  1155.576\n10/03/2018,  1202.95, 1207280,  1205,  1206.41,  1193.83\n10/02/2018,  1200.11, 1655602,  1190.96,  1209.96,  1186.63\n10/01/2018,  1195.31, 1345250,  1199.89,  1209.9,  1190.3\n09/28/2018,  1193.47, 1306822,  1191.87,  1195.41,  1184.5\n09/27/2018,  1194.64, 1244278,  1186.73,  1202.1,  1183.63\n09/26/2018,  1180.49, 1346434,  1185.15,  1194.23,  1174.765\n09/25/2018,  1184.65, 937577,  1176.15,  1186.88,  1168\n09/24/2018,  1173.37, 1218532,  1157.17,  1178,  1146.91\n09/21/2018,  1166.09, 4363929,  1192,  1192.21,  1166.04\n09/20/2018,  1186.87, 1209855,  1179.99,  1189.89,  1173.36\n09/19/2018,  1171.09, 1185321,  1164.98,  1173.21,  1154.58\n09/18/2018,  1161.22, 1184407,  1157.09,  1176.08,  1157.09\n09/17/2018,  1156.05, 1279147,  1170.14,  1177.24,  1154.03\n09/14/2018,  1172.53, 934300,  1179.1,  1180.425,  1168.3295\n09/13/2018,  1175.33, 1402005,  1170.74,  1178.61,  1162.85\n09/12/2018,  1162.82, 1291304,  1172.72,  1178.61,  1158.36\n09/11/2018,  1177.36, 1209171,  1161.63,  1178.68,  1156.24\n09/10/2018,  1164.64, 1115259,  1172.19,  1174.54,  1160.11\n09/07/2018,  1164.83, 1401034,  1158.67,  1175.26,  1157.215\n09/06/2018,  1171.44, 1886690,  1186.3,  1186.3,  1152\n09/05/2018,  1186.48, 2043732,  1193.8,  1199.0096,  1162\n09/04/2018,  1197, 1800509,  1204.27,  1212.99,  1192.5\n08/31/2018,  1218.19, 1812366,  1234.98,  1238.66,  1211.2854\n08/30/2018,  1239.12, 1320261,  1244.23,  1253.635,  1232.59\n08/29/2018,  1249.3, 1295939,  1237.45,  1250.66,  1236.3588\n08/28/2018,  1231.15, 1296532,  1241.29,  1242.545,  1228.69\n08/27/2018,  1241.82, 1154962,  1227.6,  1243.09,  1225.716\n08/24/2018,  1220.65, 946529,  1208.82,  1221.65,  1206.3588\n08/23/2018,  1205.38, 988509,  1207.14,  1221.28,  1204.24\n08/22/2018,  1207.33, 881463,  1200,  1211.84,  1199\n08/21/2018,  1201.62, 1187884,  1208,  1217.26,  1200.3537\n08/20/2018,  1207.77, 864462,  1205.02,  1211,  1194.6264\n08/17/2018,  1200.96, 1381724,  1202.03,  1209.02,  1188.24\n08/16/2018,  1206.49, 1319985,  1224.73,  1225.9999,  1202.55\n08/15/2018,  1214.38, 1815642,  1229.26,  1235.24,  1209.51\n08/14/2018,  1242.1, 1342534,  1235.19,  1245.8695,  1225.11\n08/13/2018,  1235.01, 957153,  1236.98,  1249.2728,  1233.6405\n08/10/2018,  1237.61, 1107323,  1243,  1245.695,  1232\n08/09/2018,  1249.1, 805227,  1249.9,  1255.542,  1246.01\n08/08/2018,  1245.61, 1369650,  1240.47,  1256.5,  1238.0083\n08/07/2018,  1242.22, 1493073,  1237,  1251.17,  1236.17\n08/06/2018,  1224.77, 1080923,  1225,  1226.0876,  1215.7965\n08/03/2018,  1223.71, 1072524,  1229.62,  1230,  1215.06\n08/02/2018,  1226.15, 1520488,  1205.9,  1229.88,  1204.79\n08/01/2018,  1220.01, 1567142,  1228,  1233.47,  1210.21\n07/31/2018,  1217.26, 1632823,  1220.01,  1227.5877,  1205.6\n07/30/2018,  1219.74, 1822782,  1228.01,  1234.916,  1211.47\n07/27/2018,  1238.5, 2115802,  1271,  1273.89,  1231\n07/26/2018,  1268.33, 2334881,  1251,  1269.7707,  1249.02\n07/25/2018,  1263.7, 2115890,  1239.13,  1265.86,  1239.13\n07/24/2018,  1248.08, 3303268,  1262.59,  1266,  1235.56\n07/23/2018,  1205.5, 2584034,  1181.01,  1206.49,  1181\n07/20/2018,  1184.91, 1246898,  1186.96,  1196.86,  1184.22\n07/19/2018,  1186.96, 1256113,  1191,  1200,  1183.32\n07/18/2018,  1195.88, 1391232,  1196.56,  1204.5,  1190.34\n07/17/2018,  1198.8, 1585091,  1172.22,  1203.04,  1170.6\n07/16/2018,  1183.86, 1049560,  1189.39,  1191,  1179.28\n07/13/2018,  1188.82, 1221687,  1185,  1195.4173,  1180\n07/12/2018,  1183.48, 1251083,  1159.89,  1184.41,  1155.935\n07/11/2018,  1153.9, 1094301,  1144.59,  1164.29,  1141.0003\n07/10/2018,  1152.84, 789249,  1156.98,  1159.59,  1149.59\n07/09/2018,  1154.05, 906073,  1148.48,  1154.67,  1143.42\n07/06/2018,  1140.17, 966155,  1123.58,  1140.93,  1120.7371\n07/05/2018,  1124.27, 1060752,  1110.53,  1127.5,  1108.48\n07/03/2018,  1102.89, 679034,  1135.82,  1135.82,  1100.02\n07/02/2018,  1127.46, 1188616,  1099,  1128,  1093.8\n06/29/2018,  1115.65, 1275979,  1120,  1128.2265,  1115\n06/28/2018,  1114.22, 1072438,  1102.09,  1122.31,  1096.01\n06/27/2018,  1103.98, 1287698,  1121.34,  1131.8362,  1103.62\n06/26/2018,  1118.46, 1559791,  1128,  1133.21,  1116.6589\n06/25/2018,  1124.81, 2155276,  1143.6,  1143.91,  1112.78\n06/22/2018,  1155.48, 1310164,  1159.14,  1162.4965,  1147.26\n06/21/2018,  1157.66, 1232352,  1174.85,  1177.295,  1152.232\n06/20/2018,  1169.84, 1648248,  1175.31,  1186.2856,  1169.16\n06/19/2018,  1168.06, 1616125,  1158.5,  1171.27,  1154.01\n06/18/2018,  1173.46, 1400641,  1143.65,  1174.31,  1143.59\n06/15/2018,  1152.26, 2119134,  1148.86,  1153.42,  1143.485\n06/14/2018,  1152.12, 1350085,  1143.85,  1155.47,  1140.64\n06/13/2018,  1134.79, 1490017,  1141.12,  1146.5,  1133.38\n06/12/2018,  1139.32, 899231,  1131.07,  1139.79,  1130.735\n06/11/2018,  1129.99, 1071114,  1118.6,  1137.26,  1118.6\n06/08/2018,  1120.87, 1289859,  1118.18,  1126.67,  1112.15\n06/07/2018,  1123.86, 1519860,  1131.32,  1135.82,  1116.52\n06/06/2018,  1136.88, 1697489,  1142.17,  1143,  1125.7429\n06/05/2018,  1139.66, 1538169,  1140.99,  1145.738,  1133.19\n06/04/2018,  1139.29, 1881046,  1122.33,  1141.89,  1122.005\n06/01/2018,  1119.5, 2416755,  1099.35,  1120,  1098.5\n05/31/2018,  1084.99, 3085325,  1067.56,  1097.19,  1067.56\n05/30/2018,  1067.8, 1129958,  1063.03,  1069.21,  1056.83\n05/29/2018,  1060.32, 1858676,  1064.89,  1073.37,  1055.22\n05/25/2018,  1075.66, 878903,  1079.02,  1082.56,  1073.775\n05/24/2018,  1079.24, 757752,  1079,  1080.47,  1066.15\n05/23/2018,  1079.69, 1057712,  1065.13,  1080.78,  1061.71\n05/22/2018,  1069.73, 1088700,  1083.56,  1086.59,  1066.69\n05/21/2018,  1079.58, 1012258,  1074.06,  1088,  1073.65\n05/18/2018,  1066.36, 1496448,  1061.86,  1069.94,  1060.68\n05/17/2018,  1078.59, 1031190,  1079.89,  1086.87,  1073.5\n05/16/2018,  1081.77, 989819,  1077.31,  1089.27,  1076.26\n05/15/2018,  1079.23, 1494306,  1090,  1090.05,  1073.47\n05/14/2018,  1100.2, 1450140,  1100,  1110.75,  1099.11\n05/11/2018,  1098.26, 1253205,  1093.6,  1101.3295,  1090.91\n05/10/2018,  1097.57, 1441456,  1086.03,  1100.44,  1085.64\n05/09/2018,  1082.76, 2032319,  1058.1,  1085.44,  1056.365\n05/08/2018,  1053.91, 1217260,  1058.54,  1060.55,  1047.145\n05/07/2018,  1054.79, 1464008,  1049.23,  1061.68,  1047.1\n05/04/2018,  1048.21, 1936797,  1016.9,  1048.51,  1016.9\n05/03/2018,  1023.72, 1813623,  1019,  1029.675,  1006.29\n05/02/2018,  1024.38, 1534094,  1028.1,  1040.389,  1022.87\n05/01/2018,  1037.31, 1427171,  1013.66,  1038.47,  1008.21\n04/30/2018,  1017.33, 1664084,  1030.01,  1037,  1016.85\n04/27/2018,  1030.05, 1617452,  1046,  1049.5,  1025.59\n04/26/2018,  1040.04, 1984448,  1029.51,  1047.98,  1018.19\n04/25/2018,  1021.18, 2225495,  1025.52,  1032.49,  1015.31\n04/24/2018,  1019.98, 4750851,  1052,  1057,  1010.59\n04/23/2018,  1067.45, 2278846,  1077.86,  1082.72,  1060.7\n04/20/2018,  1072.96, 1887698,  1082,  1092.35,  1069.57\n04/19/2018,  1087.7, 1741907,  1069.4,  1094.165,  1068.18\n04/18/2018,  1072.08, 1336678,  1077.43,  1077.43,  1066.225\n04/17/2018,  1074.16, 2311903,  1051.37,  1077.88,  1048.26\n04/16/2018,  1037.98, 1194144,  1037,  1043.24,  1026.74\n04/13/2018,  1029.27, 1175754,  1040.88,  1046.42,  1022.98\n04/12/2018,  1032.51, 1357599,  1025.04,  1040.69,  1021.4347\n04/11/2018,  1019.97, 1476133,  1027.99,  1031.3641,  1015.87\n04/10/2018,  1031.64, 1983510,  1026.44,  1036.28,  1011.34\n04/09/2018,  1015.45, 1738682,  1016.8,  1039.6,  1014.08\n04/06/2018,  1007.04, 1740896,  1020,  1031.42,  1003.03\n04/05/2018,  1027.81, 1345681,  1041.33,  1042.79,  1020.1311\n04/04/2018,  1025.14, 2464418,  993.41,  1028.7175,  993\n04/03/2018,  1013.41, 2271858,  1013.91,  1020.99,  994.07\n04/02/2018,  1006.47, 2679214,  1022.82,  1034.8,  990.37\n03/29/2018,  1031.79, 2714402,  1011.63,  1043,  1002.9\n03/28/2018,  1004.56, 3345046,  998,  1024.23,  980.64\n03/27/2018,  1005.1, 3081612,  1063,  1064.8393,  996.92\n03/26/2018,  1053.21, 2593808,  1046,  1055.63,  1008.4\n03/23/2018,  1021.57, 2147097,  1047.03,  1063.36,  1021.22\n03/22/2018,  1049.08, 2584639,  1081.88,  1082.9,  1045.91\n03/21/2018,  1090.88, 1878294,  1092.74,  1106.2999,  1085.15\n03/20/2018,  1097.71, 1802209,  1099,  1105.2,  1083.46\n03/19/2018,  1099.82, 2355186,  1120.01,  1121.99,  1089.01\n03/16/2018,  1135.73, 2614871,  1154.14,  1155.88,  1131.96\n03/15/2018,  1149.58, 1397767,  1149.96,  1161.08,  1134.54\n03/14/2018,  1149.49, 1290638,  1145.21,  1158.59,  1141.44\n03/13/2018,  1138.17, 1874176,  1170,  1176.76,  1133.33\n03/12/2018,  1164.5, 2106548,  1163.85,  1177.05,  1157.42\n03/09/2018,  1160.04, 2121425,  1136,  1160.8,  1132.4606\n03/08/2018,  1126, 1393529,  1115.32,  1127.6,  1112.8\n03/07/2018,  1109.64, 1277439,  1089.19,  1112.22,  1085.4823\n03/06/2018,  1095.06, 1497087,  1099.22,  1101.85,  1089.775\n03/05/2018,  1090.93, 1141932,  1075.14,  1097.1,  1069.0001\n03/02/2018,  1078.92, 2271394,  1053.08,  1081.9986,  1048.115\n03/01/2018,  1069.52, 2511872,  1107.87,  1110.12,  1067.001\n02/28/2018,  1104.73, 1873737,  1123.03,  1127.53,  1103.24\n02/27/2018,  1118.29, 1772866,  1141.24,  1144.04,  1118\n02/26/2018,  1143.75, 1514920,  1127.8,  1143.96,  1126.695\n02/23/2018,  1126.79, 1190432,  1112.64,  1127.28,  1104.7135\n02/22/2018,  1106.63, 1309536,  1116.19,  1122.82,  1102.59\n02/21/2018,  1111.34, 1507152,  1106.47,  1133.97,  1106.33\n02/20/2018,  1102.46, 1389491,  1090.57,  1113.95,  1088.52\n02/16/2018,  1094.8, 1680283,  1088.41,  1104.67,  1088.3134\n02/15/2018,  1089.52, 1785552,  1079.07,  1091.4794,  1064.34\n02/14/2018,  1069.7, 1547665,  1048.95,  1071.72,  1046.75\n02/13/2018,  1052.1, 1213800,  1045,  1058.37,  1044.0872\n02/12/2018,  1051.94, 2054002,  1048,  1061.5,  1040.928\n02/09/2018,  1037.78, 3503970,  1017.25,  1043.97,  992.56\n02/08/2018,  1001.52, 2809890,  1055.41,  1058.62,  1000.66\n02/07/2018,  1048.58, 2353003,  1081.54,  1081.78,  1048.26\n02/06/2018,  1080.6, 3432313,  1027.18,  1081.71,  1023.1367\n02/05/2018,  1055.8, 3769453,  1090.6,  1110,  1052.03\n02/02/2018,  1111.9, 4837979,  1122,  1123.07,  1107.2779\n02/01/2018,  1167.7, 2380221,  1162.61,  1174,  1157.52\n01/31/2018,  1169.94, 1523820,  1170.57,  1173,  1159.13\n01/30/2018,  1163.69, 1541771,  1167.83,  1176.52,  1163.52\n01/29/2018,  1175.58, 1337324,  1176.48,  1186.89,  1171.98\n01/26/2018,  1175.84, 1981173,  1175.08,  1175.84,  1158.11\n01/25/2018,  1170.37, 1461518,  1172.53,  1175.94,  1162.76\n01/24/2018,  1164.24, 1382904,  1177.33,  1179.86,  1161.05\n01/23/2018,  1169.97, 1309862,  1159.85,  1171.6266,  1158.75\n01/22/2018,  1155.81, 1616120,  1137.49,  1159.88,  1135.1101\n01/19/2018,  1137.51, 1390118,  1131.83,  1137.86,  1128.3\n01/18/2018,  1129.79, 1194943,  1131.41,  1132.51,  1117.5\n01/17/2018,  1131.98, 1200476,  1126.22,  1132.6,  1117.01\n01/16/2018,  1121.76, 1566662,  1132.51,  1139.91,  1117.8316\n01/12/2018,  1122.26, 1718491,  1102.41,  1124.29,  1101.15\n01/11/2018,  1105.52, 977727,  1106.3,  1106.525,  1099.59\n01/10/2018,  1102.61, 1042273,  1097.1,  1104.6,  1096.11\n01/09/2018,  1106.26, 900089,  1109.4,  1110.57,  1101.2307\n01/08/2018,  1106.94, 1046767,  1102.23,  1111.27,  1101.62\n01/05/2018,  1102.23, 1279990,  1094,  1104.25,  1092\n01/04/2018,  1086.4, 1002945,  1088,  1093.5699,  1084.0017\n01/03/2018,  1082.48, 1429757,  1064.31,  1086.29,  1063.21\n01/02/2018,  1065, 1236401,  1048.34,  1066.94,  1045.23\n12/29/2017,  1046.4, 886845,  1046.72,  1049.7,  1044.9\n12/28/2017,  1048.14, 833011,  1051.6,  1054.75,  1044.77\n12/27/2017,  1049.37, 1271780,  1057.39,  1058.37,  1048.05\n12/26/2017,  1056.74, 761097,  1058.07,  1060.12,  1050.2\n12/22/2017,  1060.12, 755089,  1061.11,  1064.2,  1059.44\n12/21/2017,  1063.63, 986548,  1064.95,  1069.33,  1061.7938\n12/20/2017,  1064.95, 1268285,  1071.78,  1073.38,  1061.52\n12/19/2017,  1070.68, 1307894,  1075.2,  1076.84,  1063.55\n12/18/2017,  1077.14, 1552016,  1066.08,  1078.49,  1062\n12/15/2017,  1064.19, 3275091,  1054.61,  1067.62,  1049.5\n12/14/2017,  1049.15, 1558684,  1045,  1058.5,  1043.11\n12/13/2017,  1040.61, 1220364,  1046.12,  1046.665,  1038.38\n12/12/2017,  1040.48, 1279511,  1039.63,  1050.31,  1033.6897\n12/11/2017,  1041.1, 1190527,  1035.5,  1043.8,  1032.0504\n12/08/2017,  1037.05, 1288419,  1037.49,  1042.05,  1032.5222\n12/07/2017,  1030.93, 1458145,  1020.43,  1034.24,  1018.071\n12/06/2017,  1018.38, 1258496,  1001.5,  1024.97,  1001.14\n12/05/2017,  1005.15, 2066247,  995.94,  1020.61,  988.28\n12/04/2017,  998.68, 1906058,  1012.66,  1016.1,  995.57\n12/01/2017,  1010.17, 1908962,  1015.8,  1022.4897,  1002.02\n11/30/2017,  1021.41, 1723003,  1022.37,  1028.4899,  1015\n11/29/2017,  1021.66, 2442974,  1042.68,  1044.08,  1015.65\n11/28/2017,  1047.41, 1421027,  1055.09,  1062.375,  1040\n11/27/2017,  1054.21, 1307471,  1040,  1055.46,  1038.44\n11/24/2017,  1040.61, 536996,  1035.87,  1043.178,  1035\n11/22/2017,  1035.96, 746351,  1035,  1039.706,  1031.43\n11/21/2017,  1034.49, 1096161,  1023.31,  1035.11,  1022.655\n11/20/2017,  1018.38, 898389,  1020.26,  1022.61,  1017.5\n11/17/2017,  1019.09, 1366936,  1034.01,  1034.42,  1017.75\n11/16/2017,  1032.5, 1129424,  1022.52,  1035.92,  1022.52\n11/15/2017,  1020.91, 847932,  1019.21,  1024.09,  1015.42\n11/14/2017,  1026, 958708,  1022.59,  1026.81,  1014.15\n11/13/2017,  1025.75, 885565,  1023.42,  1031.58,  1022.57\n11/10/2017,  1028.07, 720674,  1026.46,  1030.76,  1025.28\n11/09/2017,  1031.26, 1244701,  1033.99,  1033.99,  1019.6656\n11/08/2017,  1039.85, 1088395,  1030.52,  1043.522,  1028.45\n11/07/2017,  1033.33, 1112123,  1027.27,  1033.97,  1025.13\n11/06/2017,  1025.9, 1124757,  1028.99,  1034.87,  1025\n11/03/2017,  1032.48, 1075134,  1022.11,  1032.65,  1020.31\n11/02/2017,  1025.58, 1048584,  1021.76,  1028.09,  1013.01\n11/01/2017,  1025.5, 1371619,  1017.21,  1029.67,  1016.95\n10/31/2017,  1016.64, 1331265,  1015.22,  1024,  1010.42\n10/30/2017,  1017.11, 2083490,  1014,  1024.97,  1007.5\n10/27/2017,  1019.27, 5165922,  1009.19,  1048.39,  1008.2\n10/26/2017,  972.56, 2027218,  980,  987.6,  972.2\n10/25/2017,  973.33, 1210368,  968.37,  976.09,  960.5201\n10/24/2017,  970.54, 1206074,  970,  972.23,  961\n10/23/2017,  968.45, 1471544,  989.52,  989.52,  966.12\n10/20/2017,  988.2, 1176177,  989.44,  991,  984.58\n10/19/2017,  984.45, 1312706,  986,  988.88,  978.39\n10/18/2017,  992.81, 1057285,  991.77,  996.72,  986.9747\n10/17/2017,  992.18, 1290152,  990.29,  996.44,  988.59\n10/16/2017,  992, 910246,  992.1,  993.9065,  984\n10/13/2017,  989.68, 1169584,  992,  997.21,  989\n10/12/2017,  987.83, 1278357,  987.45,  994.12,  985\n10/11/2017,  989.25, 1692843,  973.72,  990.71,  972.25\n10/10/2017,  972.6, 968113,  980,  981.57,  966.0801\n10/09/2017,  977, 890620,  980,  985.425,  976.11\n10/06/2017,  978.89, 1146207,  966.7,  979.46,  963.36\n10/05/2017,  969.96, 1210427,  955.49,  970.91,  955.18\n10/04/2017,  951.68, 951766,  957,  960.39,  950.69\n10/03/2017,  957.79, 888303,  954,  958,  949.14\n10/02/2017,  953.27, 1282850,  959.98,  962.54,  947.84\n09/29/2017,  959.11, 1576365,  952,  959.7864,  951.51\n09/28/2017,  949.5, 997036,  941.36,  950.69,  940.55\n09/27/2017,  944.49, 2237538,  927.74,  949.9,  927.74\n09/26/2017,  924.86, 1666749,  923.72,  930.82,  921.14\n09/25/2017,  920.97, 1855742,  925.45,  926.4,  909.7\n09/22/2017,  928.53, 1052170,  927.75,  934.73,  926.48\n09/21/2017,  932.45, 1227059,  933,  936.53,  923.83\n09/20/2017,  931.58, 1535626,  922.98,  933.88,  922\n09/19/2017,  921.81, 912967,  917.42,  922.4199,  912.55\n09/18/2017,  915, 1300759,  920.01,  922.08,  910.6\n09/15/2017,  920.29, 2499466,  924.66,  926.49,  916.36\n09/14/2017,  925.11, 1395497,  931.25,  932.77,  924\n09/13/2017,  935.09, 1101145,  930.66,  937.25,  929.86\n09/12/2017,  932.07, 1133638,  932.59,  933.48,  923.861\n09/11/2017,  929.08, 1266020,  934.25,  938.38,  926.92\n09/08/2017,  926.5, 997699,  936.49,  936.99,  924.88\n09/07/2017,  935.95, 1211472,  931.73,  936.41,  923.62\n09/06/2017,  927.81, 1526209,  930.15,  930.915,  919.27\n09/05/2017,  928.45, 1346791,  933.08,  937,  921.96\n09/01/2017,  937.34, 943657,  941.13,  942.48,  935.15\n08/31/2017,  939.33, 1566888,  931.76,  941.98,  931.76\n08/30/2017,  929.57, 1300616,  920.05,  930.819,  919.65\n08/29/2017,  921.29, 1181391,  905.1,  923.33,  905\n08/28/2017,  913.81, 1085014,  916,  919.245,  911.87\n08/25/2017,  915.89, 1052764,  923.49,  925.555,  915.5\n08/24/2017,  921.28, 1266191,  928.66,  930.84,  915.5\n08/23/2017,  927, 1088575,  921.93,  929.93,  919.36\n08/22/2017,  924.69, 1166320,  912.72,  925.86,  911.4751\n08/21/2017,  906.66, 942328,  910,  913,  903.4\n08/18/2017,  910.67, 1341990,  910.31,  915.275,  907.1543\n08/17/2017,  910.98, 1241782,  925.78,  926.86,  910.98\n08/16/2017,  926.96, 1005261,  925.29,  932.7,  923.445\n08/15/2017,  922.22, 882479,  924.23,  926.5499,  919.82\n08/14/2017,  922.67, 1063404,  922.53,  924.668,  918.19\n08/11/2017,  914.39, 1205652,  907.97,  917.78,  905.58\n08/10/2017,  907.24, 1755521,  917.55,  919.26,  906.13\n08/09/2017,  922.9, 1191332,  920.61,  925.98,  917.2501\n08/08/2017,  926.79, 1057351,  927.09,  935.814,  925.6095\n08/07/2017,  929.36, 1031710,  929.06,  931.7,  926.5\n08/04/2017,  927.96, 1081814,  926.75,  930.3068,  923.03\n08/03/2017,  923.65, 1201519,  930.34,  932.24,  922.24\n08/02/2017,  930.39, 1822272,  928.61,  932.6,  916.68\n08/01/2017,  930.83, 1234612,  932.38,  937.447,  929.26\n07/31/2017,  930.5, 1964748,  941.89,  943.59,  926.04\n07/28/2017,  941.53, 1802343,  929.4,  943.83,  927.5\n07/27/2017,  934.09, 3128819,  951.78,  951.78,  920\n07/26/2017,  947.8, 2069349,  954.68,  955,  942.2788\n07/25/2017,  950.7, 4656609,  953.81,  959.7,  945.4\n07/24/2017,  980.34, 3205374,  972.22,  986.2,  970.77\n07/21/2017,  972.92, 1697190,  962.25,  973.23,  960.15\n07/20/2017,  968.15, 1620636,  975,  975.9,  961.51\n07/19/2017,  970.89, 1221155,  967.84,  973.04,  964.03\n07/18/2017,  965.4, 1152741,  953,  968.04,  950.6\n07/17/2017,  953.42, 1164141,  957,  960.74,  949.2407\n07/14/2017,  955.99, 1052855,  952,  956.91,  948.005\n07/13/2017,  947.16, 1294674,  946.29,  954.45,  943.01\n07/12/2017,  943.83, 1517168,  938.68,  946.3,  934.47\n07/11/2017,  930.09, 1112417,  929.54,  931.43,  922\n07/10/2017,  928.8, 1190237,  921.77,  930.38,  919.59\n07/07/2017,  918.59, 1590456,  908.85,  921.54,  908.85\n07/06/2017,  906.69, 1424290,  904.12,  914.9444,  899.7\n07/05/2017,  911.71, 1813309,  901.76,  914.51,  898.5\n07/03/2017,  898.7, 1710373,  912.18,  913.94,  894.79\n06/30/2017,  908.73, 2086340,  926.05,  926.05,  908.31\n06/29/2017,  917.79, 3287991,  929.92,  931.26,  910.62\n06/28/2017,  940.49, 2719213,  929,  942.75,  916\n06/27/2017,  927.33, 2566047,  942.46,  948.29,  926.85\n06/26/2017,  952.27, 1596664,  969.9,  973.31,  950.79\n06/23/2017,  965.59, 1527513,  956.83,  966,  954.2\n06/22/2017,  957.09, 941639,  958.7,  960.72,  954.55\n06/21/2017,  959.45, 1201971,  953.64,  960.1,  950.76\n06/20/2017,  950.63, 1125520,  957.52,  961.62,  950.01\n06/19/2017,  957.37, 1520715,  949.96,  959.99,  949.05\n06/16/2017,  939.78, 3061794,  940,  942.04,  931.595\n06/15/2017,  942.31, 2065271,  933.97,  943.339,  924.44\n06/14/2017,  950.76, 1487378,  959.92,  961.15,  942.25\n06/13/2017,  953.4, 2012980,  951.91,  959.98,  944.09\n06/12/2017,  942.9, 3762434,  939.56,  949.355,  915.2328\n06/09/2017,  949.83, 3305545,  984.5,  984.5,  935.63\n06/08/2017,  983.41, 1477151,  982.35,  984.57,  977.2\n06/07/2017,  981.08, 1447172,  979.65,  984.15,  975.77\n06/06/2017,  976.57, 1814323,  983.16,  988.25,  975.14\n06/05/2017,  983.68, 1251903,  976.55,  986.91,  975.1\n06/02/2017,  975.6, 1750723,  969.46,  975.88,  966\n06/01/2017,  966.95, 1408958,  968.95,  971.5,  960.01\n05/31/2017,  964.86, 2447176,  975.02,  979.27,  960.18\n05/30/2017,  975.88, 1466288,  970.31,  976.2,  969.49\n05/26/2017,  971.47, 1251425,  969.7,  974.98,  965.03\n05/25/2017,  969.54, 1659422,  957.33,  972.629,  955.47\n05/24/2017,  954.96, 1031408,  952.98,  955.09,  949.5\n05/23/2017,  948.82, 1269438,  947.92,  951.4666,  942.575\n05/22/2017,  941.86, 1118456,  935,  941.8828,  935\n05/19/2017,  934.01, 1389848,  931.47,  937.755,  931\n05/18/2017,  930.24, 1596058,  921,  933.17,  918.75\n05/17/2017,  919.62, 2357922,  935.67,  939.3325,  918.14\n05/16/2017,  943, 968288,  940,  943.11,  937.58\n05/15/2017,  937.08, 1104595,  932.95,  938.25,  929.34\n05/12/2017,  932.22, 1050377,  931.53,  933.44,  927.85\n05/11/2017,  930.6, 834997,  925.32,  932.53,  923.0301\n05/10/2017,  928.78, 1173887,  931.98,  932,  925.16\n05/09/2017,  932.17, 1581236,  936.95,  937.5,  929.53\n05/08/2017,  934.3, 1328885,  926.12,  936.925,  925.26\n05/05/2017,  927.13, 1910317,  933.54,  934.9,  925.2\n05/04/2017,  931.66, 1421938,  926.07,  935.93,  924.59\n05/03/2017,  927.04, 1497565,  914.86,  928.1,  912.5426\n05/02/2017,  916.44, 1543696,  909.62,  920.77,  909.4526\n05/01/2017,  912.57, 2114629,  901.94,  915.68,  901.45\n04/28/2017,  905.96, 3223850,  910.66,  916.85,  905.77\n04/27/2017,  874.25, 2009509,  873.6,  875.4,  870.38\n04/26/2017,  871.73, 1233724,  874.23,  876.05,  867.7481\n04/25/2017,  872.3, 1670095,  865,  875,  862.81\n04/24/2017,  862.76, 1371722,  851.2,  863.45,  849.86\n04/21/2017,  843.19, 1323364,  842.88,  843.88,  840.6\n04/20/2017,  841.65, 957994,  841.44,  845.2,  839.32\n04/19/2017,  838.21, 954324,  839.79,  842.22,  836.29\n04/18/2017,  836.82, 835433,  834.22,  838.93,  832.71\n04/17/2017,  837.17, 894540,  825.01,  837.75,  824.47\n04/13/2017,  823.56, 1118221,  822.14,  826.38,  821.44\n04/12/2017,  824.32, 900059,  821.93,  826.66,  821.02\n04/11/2017,  823.35, 1078951,  824.71,  827.4267,  817.0201\n04/10/2017,  824.73, 978825,  825.39,  829.35,  823.77\n04/07/2017,  824.67, 1056692,  827.96,  828.485,  820.5127\n04/06/2017,  827.88, 1254235,  832.4,  836.39,  826.46\n04/05/2017,  831.41, 1553163,  835.51,  842.45,  830.72\n04/04/2017,  834.57, 1044455,  831.36,  835.18,  829.0363\n04/03/2017,  838.55, 1670349,  829.22,  840.85,  829.22\n03/31/2017,  829.56, 1401756,  828.97,  831.64,  827.39\n03/30/2017,  831.5, 1055263,  833.5,  833.68,  829\n03/29/2017,  831.41, 1785006,  825,  832.765,  822.3801\n03/28/2017,  820.92, 1620532,  820.41,  825.99,  814.027\n03/27/2017,  819.51, 1894735,  806.95,  821.63,  803.37\n03/24/2017,  814.43, 1980415,  820.08,  821.93,  808.89\n03/23/2017,  817.58, 3485390,  821,  822.57,  812.257\n03/22/2017,  829.59, 1399409,  831.91,  835.55,  827.1801\n03/21/2017,  830.46, 2461375,  851.4,  853.5,  829.02\n03/20/2017,  848.4, 1217560,  850.01,  850.22,  845.15\n03/17/2017,  852.12, 1712397,  851.61,  853.4,  847.11\n03/16/2017,  848.78, 977384,  849.03,  850.85,  846.13\n03/15/2017,  847.2, 1381328,  847.59,  848.63,  840.77\n03/14/2017,  845.62, 779920,  843.64,  847.24,  840.8\n03/13/2017,  845.54, 1149928,  844,  848.685,  843.25\n03/10/2017,  843.25, 1702731,  843.28,  844.91,  839.5\n03/09/2017,  838.68, 1261393,  836,  842,  834.21\n03/08/2017,  835.37, 988900,  833.51,  838.15,  831.79\n03/07/2017,  831.91, 1037573,  827.4,  833.41,  826.52\n03/06/2017,  827.78, 1108799,  826.95,  828.88,  822.4\n03/03/2017,  829.08, 890640,  830.56,  831.36,  825.751\n03/02/2017,  830.63, 937824,  833.85,  834.51,  829.64\n03/01/2017,  835.24, 1495934,  828.85,  836.255,  827.26\n02/28/2017,  823.21, 2258695,  825.61,  828.54,  820.2\n02/27/2017,  829.28, 1101120,  824.55,  830.5,  824\n02/24/2017,  828.64, 1392039,  827.73,  829,  824.2\n02/23/2017,  831.33, 1471342,  830.12,  832.46,  822.88\n02/22/2017,  830.76, 983058,  828.66,  833.25,  828.64\n02/21/2017,  831.66, 1259841,  828.66,  833.45,  828.35\n02/17/2017,  828.07, 1602549,  823.02,  828.07,  821.655\n02/16/2017,  824.16, 1285919,  819.93,  824.4,  818.98\n02/15/2017,  818.98, 1311316,  819.36,  823,  818.47\n02/14/2017,  820.45, 1054472,  819,  823,  816\n02/13/2017,  819.24, 1205835,  816,  820.959,  815.49\n02/10/2017,  813.67, 1134701,  811.7,  815.25,  809.78\n02/09/2017,  809.56, 990260,  809.51,  810.66,  804.54\n02/08/2017,  808.38, 1155892,  807,  811.84,  803.1903\n02/07/2017,  806.97, 1240257,  803.99,  810.5,  801.78\n02/06/2017,  801.34, 1182882,  799.7,  801.67,  795.2501\n02/03/2017,  801.49, 1461217,  802.99,  806,  800.37\n02/02/2017,  798.53, 1530827,  793.8,  802.7,  792\n02/01/2017,  795.695, 2027708,  799.68,  801.19,  791.19\n01/31/2017,  796.79, 2153957,  796.86,  801.25,  790.52\n01/30/2017,  802.32, 3243568,  814.66,  815.84,  799.8\n01/27/2017,  823.31, 2964989,  834.71,  841.95,  820.44\n01/26/2017,  832.15, 2944642,  837.81,  838,  827.01\n01/25/2017,  835.67, 1612854,  829.62,  835.77,  825.06\n01/24/2017,  823.87, 1472228,  822.3,  825.9,  817.821\n01/23/2017,  819.31, 1962506,  807.25,  820.87,  803.74\n01/20/2017,  805.02, 1668638,  806.91,  806.91,  801.69\n01/19/2017,  802.175, 917085,  805.12,  809.48,  801.8\n01/18/2017,  806.07, 1293893,  805.81,  806.205,  800.99\n01/17/2017,  804.61, 1361935,  807.08,  807.14,  800.37\n01/13/2017,  807.88, 1098154,  807.48,  811.2244,  806.69\n01/12/2017,  806.36, 1352872,  807.14,  807.39,  799.17\n01/11/2017,  807.91, 1065360,  805,  808.15,  801.37\n01/10/2017,  804.79, 1176637,  807.86,  809.1299,  803.51\n01/09/2017,  806.65, 1274318,  806.4,  809.9664,  802.83\n01/06/2017,  806.15, 1639246,  795.26,  807.9,  792.2041\n01/05/2017,  794.02, 1334028,  786.08,  794.48,  785.02\n01/04/2017,  786.9, 1071198,  788.36,  791.34,  783.16\n01/03/2017,  786.14, 1657291,  778.81,  789.63,  775.8\n12/30/2016,  771.82, 1769809,  782.75,  782.78,  770.41\n12/29/2016,  782.79, 743808,  783.33,  785.93,  778.92\n12/28/2016,  785.05, 1142148,  793.7,  794.23,  783.2\n12/27/2016,  791.55, 789151,  790.68,  797.86,  787.657\n12/23/2016,  789.91, 623682,  790.9,  792.74,  787.28\n12/22/2016,  791.26, 972147,  792.36,  793.32,  788.58\n12/21/2016,  794.56, 1208770,  795.84,  796.6757,  787.1\n12/20/2016,  796.42, 950345,  796.76,  798.65,  793.27\n12/19/2016,  794.2, 1231966,  790.22,  797.66,  786.27\n12/16/2016,  790.8, 2435100,  800.4,  800.8558,  790.29\n12/15/2016,  797.85, 1623709,  797.34,  803,  792.92\n12/14/2016,  797.07, 1700875,  797.4,  804,  794.01\n12/13/2016,  796.1, 2122735,  793.9,  804.3799,  793.34\n12/12/2016,  789.27, 2102288,  785.04,  791.25,  784.3554\n12/09/2016,  789.29, 1821146,  780,  789.43,  779.021\n12/08/2016,  776.42, 1487517,  772.48,  778.18,  767.23\n12/07/2016,  771.19, 1757710,  761,  771.36,  755.8\n12/06/2016,  759.11, 1690365,  764.73,  768.83,  757.34\n12/05/2016,  762.52, 1393566,  757.71,  763.9,  752.9\n12/02/2016,  750.5, 1452181,  744.59,  754,  743.1\n12/01/2016,  747.92, 3017001,  757.44,  759.85,  737.0245\n11/30/2016,  758.04, 2386628,  770.07,  772.99,  754.83\n11/29/2016,  770.84, 1616427,  771.53,  778.5,  768.24\n11/28/2016,  768.24, 2177039,  760,  779.53,  759.8\n11/25/2016,  761.68, 587421,  764.26,  765,  760.52\n11/23/2016,  760.99, 1477501,  767.73,  768.2825,  755.25\n11/22/2016,  768.27, 1592372,  772.63,  776.96,  767\n11/21/2016,  769.2, 1324431,  762.61,  769.7,  760.6\n11/18/2016,  760.54, 1528555,  771.37,  775,  760\n11/17/2016,  771.23, 1298484,  766.92,  772.7,  764.23\n11/16/2016,  764.48, 1468196,  755.2,  766.36,  750.51\n11/15/2016,  758.49, 2375056,  746.97,  764.4162,  746.97\n11/14/2016,  736.08, 3644965,  755.6,  757.85,  727.54\n11/11/2016,  754.02, 2421889,  756.54,  760.78,  750.38\n11/10/2016,  762.56, 4733916,  791.17,  791.17,  752.18\n11/09/2016,  785.31, 2603860,  779.94,  791.2265,  771.67\n11/08/2016,  790.51, 1361472,  783.4,  795.633,  780.19\n11/07/2016,  782.52, 1574426,  774.5,  785.19,  772.55\n11/04/2016,  762.02, 2131948,  750.66,  770.36,  750.5611\n11/03/2016,  762.13, 1933937,  767.25,  769.95,  759.03\n11/02/2016,  768.7, 1905814,  778.2,  781.65,  763.4496\n11/01/2016,  783.61, 2404898,  782.89,  789.49,  775.54\n10/31/2016,  784.54, 2420892,  795.47,  796.86,  784\n10/28/2016,  795.37, 4261912,  808.35,  815.49,  793.59\n10/27/2016,  795.35, 2723097,  801,  803.49,  791.5\n10/26/2016,  799.07, 1645403,  806.34,  806.98,  796.32\n10/25/2016,  807.67, 1575020,  816.68,  816.68,  805.14\n10/24/2016,  813.11, 1693162,  804.9,  815.18,  804.82\n10/21/2016,  799.37, 1262042,  795,  799.5,  794\n10/20/2016,  796.97, 1755546,  803.3,  803.97,  796.03\n10/19/2016,  801.56, 1762990,  798.86,  804.63,  797.635\n10/18/2016,  795.26, 2046338,  787.85,  801.61,  785.565\n10/17/2016,  779.96, 1091524,  779.8,  785.85,  777.5\n10/14/2016,  778.53, 851512,  781.65,  783.95,  776\n10/13/2016,  778.19, 1360619,  781.22,  781.22,  773\n10/12/2016,  786.14, 935138,  783.76,  788.13,  782.06\n10/11/2016,  783.07, 1371461,  786.66,  792.28,  780.58\n10/10/2016,  785.94, 1161410,  777.71,  789.38,  775.87\n10/07/2016,  775.08, 932444,  779.66,  779.66,  770.75\n10/06/2016,  776.86, 1066910,  779,  780.48,  775.54\n10/05/2016,  776.47, 1457661,  779.31,  782.07,  775.65\n10/04/2016,  776.43, 1198361,  776.03,  778.71,  772.89\n10/03/2016,  772.56, 1276614,  774.25,  776.065,  769.5\n09/30/2016,  777.29, 1583293,  776.33,  780.94,  774.09\n09/29/2016,  775.01, 1310252,  781.44,  785.8,  774.232\n09/28/2016,  781.56, 1108249,  777.85,  781.81,  774.97\n09/27/2016,  783.01, 1152760,  775.5,  785.9899,  774.308\n09/26/2016,  774.21, 1531788,  782.74,  782.74,  773.07\n09/23/2016,  786.9, 1411439,  786.59,  788.93,  784.15\n09/22/2016,  787.21, 1483899,  780,  789.85,  778.44\n09/21/2016,  776.22, 1166290,  772.66,  777.16,  768.301\n09/20/2016,  771.41, 975434,  769,  773.33,  768.53\n09/19/2016,  765.7, 1171969,  772.42,  774,  764.4406\n09/16/2016,  768.88, 2047036,  769.75,  769.75,  764.66\n09/15/2016,  771.76, 1344945,  762.89,  773.8,  759.96\n09/14/2016,  762.49, 1093723,  759.61,  767.68,  759.11\n09/13/2016,  759.69, 1394158,  764.48,  766.2195,  755.8\n09/12/2016,  769.02, 1310493,  755.13,  770.29,  754.0001\n09/09/2016,  759.66, 1879903,  770.1,  773.245,  759.66\n09/08/2016,  775.32, 1268663,  778.59,  780.35,  773.58\n09/07/2016,  780.35, 893874,  780,  782.73,  776.2\n09/06/2016,  780.08, 1441864,  773.45,  782,  771\n09/02/2016,  771.46, 1070725,  773.01,  773.9199,  768.41\n09/01/2016,  768.78, 925019,  769.25,  771.02,  764.3\n08/31/2016,  767.05, 1247937,  767.01,  769.09,  765.38\n08/30/2016,  769.09, 1129932,  769.33,  774.466,  766.84\n08/29/2016,  772.15, 847537,  768.74,  774.99,  766.615\n08/26/2016,  769.54, 1164713,  769,  776.0799,  765.85\n08/25/2016,  769.41, 926856,  767,  771.89,  763.1846\n08/24/2016,  769.64, 1071569,  770.58,  774.5,  767.07\n08/23/2016,  772.08, 925356,  775.48,  776.44,  771.785\n08/22/2016,  772.15, 950417,  773.27,  774.54,  770.0502\n08/19/2016,  775.42, 860899,  775,  777.1,  773.13\n08/18/2016,  777.5, 718882,  780.01,  782.86,  777\n08/17/2016,  779.91, 921666,  777.32,  780.81,  773.53\n08/16/2016,  777.14, 1027836,  780.3,  780.98,  773.444\n08/15/2016,  782.44, 938183,  783.75,  787.49,  780.11\n08/12/2016,  783.22, 739761,  781.5,  783.395,  780.4\n08/11/2016,  784.85, 971742,  785,  789.75,  782.97\n08/10/2016,  784.68, 784559,  783.75,  786.8123,  782.778\n08/09/2016,  784.26, 1318457,  781.1,  788.94,  780.57\n08/08/2016,  781.76, 1106693,  782,  782.63,  778.091\n08/05/2016,  782.22, 1799478,  773.78,  783.04,  772.34\n08/04/2016,  771.61, 1139972,  772.22,  774.07,  768.795\n08/03/2016,  773.18, 1283186,  767.18,  773.21,  766.82\n08/02/2016,  771.07, 1782822,  768.69,  775.84,  767.85\n08/01/2016,  772.88, 2697699,  761.09,  780.43,  761.09\n07/29/2016,  768.79, 3830103,  772.71,  778.55,  766.77\n07/28/2016,  745.91, 3473040,  747.04,  748.65,  739.3\n07/27/2016,  741.77, 1509133,  738.28,  744.46,  737\n07/26/2016,  738.42, 1182993,  739.04,  741.69,  734.27\n07/25/2016,  739.77, 1031643,  740.67,  742.61,  737.5\n07/22/2016,  742.74, 1256741,  741.86,  743.24,  736.56\n07/21/2016,  738.63, 1022229,  740.36,  741.69,  735.831\n07/20/2016,  741.19, 1283931,  737.33,  742.13,  737.1\n07/19/2016,  736.96, 1225467,  729.89,  736.99,  729\n07/18/2016,  733.78, 1284740,  722.71,  736.13,  721.19\n07/15/2016,  719.85, 1277514,  725.73,  725.74,  719.055\n07/14/2016,  720.95, 949456,  721.58,  722.21,  718.03\n07/13/2016,  716.98, 933352,  723.62,  724,  716.85\n07/12/2016,  720.64, 1336112,  719.12,  722.94,  715.91\n07/11/2016,  715.09, 1107039,  708.05,  716.51,  707.24\n07/08/2016,  705.63, 1573909,  699.5,  705.71,  696.435\n07/07/2016,  695.36, 1303661,  698.08,  698.2,  688.215\n07/06/2016,  697.77, 1411080,  689.98,  701.68,  689.09\n07/05/2016,  694.49, 1462879,  696.06,  696.94,  688.88\n07/01/2016,  699.21, 1344387,  692.2,  700.65,  692.1301\n06/30/2016,  692.1, 1597298,  685.47,  692.32,  683.65\n06/29/2016,  684.11, 1931436,  683,  687.4292,  681.41\n06/28/2016,  680.04, 2169704,  678.97,  680.33,  673\n06/27/2016,  668.26, 2632011,  671,  672.3,  663.284\n06/24/2016,  675.22, 4442943,  675.17,  689.4,  673.45\n06/23/2016,  701.87, 2166183,  697.45,  701.95,  687\n06/22/2016,  697.46, 1182161,  699.06,  700.86,  693.0819\n06/21/2016,  695.94, 1464836,  698.4,  702.77,  692.01\n06/20/2016,  693.71, 2080645,  698.77,  702.48,  693.41\n06/17/2016,  691.72, 3397720,  708.65,  708.82,  688.4515\n06/16/2016,  710.36, 1981657,  714.91,  716.65,  703.26\n06/15/2016,  718.92, 1213386,  719,  722.98,  717.31\n06/14/2016,  718.27, 1303808,  716.48,  722.47,  713.12\n06/13/2016,  718.36, 1255199,  716.51,  725.44,  716.51\n06/10/2016,  719.41, 1213989,  719.47,  725.89,  716.43\n06/09/2016,  728.58, 987635,  722.87,  729.54,  722.3361\n06/08/2016,  728.28, 1583325,  723.96,  728.57,  720.58\n06/07/2016,  716.65, 1336348,  719.84,  721.98,  716.55\n06/06/2016,  716.55, 1565955,  724.91,  724.91,  714.61\n06/03/2016,  722.34, 1225924,  729.27,  729.49,  720.56\n06/02/2016,  730.4, 1340664,  732.5,  733.02,  724.17\n06/01/2016,  734.15, 1251468,  734.53,  737.21,  730.66\n05/31/2016,  735.72, 2128358,  731.74,  739.73,  731.26\n05/27/2016,  732.66, 1974425,  724.01,  733.936,  724\n05/26/2016,  724.12, 1573635,  722.87,  728.33,  720.28\n05/25/2016,  725.27, 1629790,  720.76,  727.51,  719.7047\n05/24/2016,  720.09, 1926828,  706.86,  720.97,  706.86\n05/23/2016,  704.24, 1326386,  706.53,  711.4781,  704.18\n05/20/2016,  709.74, 1825830,  701.62,  714.58,  700.52\n05/19/2016,  700.32, 1668887,  702.36,  706,  696.8\n05/18/2016,  706.63, 1765632,  703.67,  711.6,  700.63\n05/17/2016,  706.23, 1999883,  715.99,  721.52,  704.11\n05/16/2016,  716.49, 1316719,  709.13,  718.48,  705.65\n05/13/2016,  710.83, 1307559,  711.93,  716.6619,  709.26\n05/12/2016,  713.31, 1361170,  717.06,  719.25,  709\n05/11/2016,  715.29, 1690862,  723.41,  724.48,  712.8\n05/10/2016,  723.18, 1568621,  716.75,  723.5,  715.72\n05/09/2016,  712.9, 1509892,  712,  718.71,  710\n05/06/2016,  711.12, 1828508,  698.38,  711.86,  698.1067\n05/05/2016,  701.43, 1680220,  697.7,  702.3199,  695.72\n05/04/2016,  695.7, 1692757,  690.49,  699.75,  689.01\n05/03/2016,  692.36, 1541297,  696.87,  697.84,  692\n05/02/2016,  698.21, 1645013,  697.63,  700.64,  691\n04/29/2016,  693.01, 2486584,  690.7,  697.62,  689\n04/28/2016,  691.02, 2859790,  708.26,  714.17,  689.55\n04/27/2016,  705.84, 3094905,  707.29,  708.98,  692.3651\n04/26/2016,  708.14, 2739133,  725.42,  725.766,  703.0264\n04/25/2016,  723.15, 1956956,  716.1,  723.93,  715.59\n04/22/2016,  718.77, 5949699,  726.3,  736.12,  713.61\n04/21/2016,  759.14, 2995094,  755.38,  760.45,  749.55\n04/20/2016,  752.67, 1526776,  758,  758.1315,  750.01\n04/19/2016,  753.93, 2027962,  769.51,  769.9,  749.33\n04/18/2016,  766.61, 1557199,  760.46,  768.05,  757.3\n04/15/2016,  759, 1807062,  753.98,  761,  752.6938\n04/14/2016,  753.2, 1134056,  754.01,  757.31,  752.705\n04/13/2016,  751.72, 1707397,  749.16,  754.38,  744.261\n04/12/2016,  743.09, 1349780,  738,  743.83,  731.01\n04/11/2016,  736.1, 1218789,  743.02,  745,  736.05\n04/08/2016,  739.15, 1289869,  743.97,  745.45,  735.55\n04/07/2016,  740.28, 1452369,  745.37,  746.9999,  736.28\n04/06/2016,  745.69, 1052171,  735.77,  746.24,  735.56\n04/05/2016,  737.8, 1130817,  738,  742.8,  735.37\n04/04/2016,  745.29, 1134214,  750.06,  752.8,  742.43\n04/01/2016,  749.91, 1576240,  738.6,  750.34,  737\n03/31/2016,  744.95, 1718638,  749.25,  750.85,  740.94\n03/30/2016,  750.53, 1782278,  750.1,  757.88,  748.74\n03/29/2016,  744.77, 1902254,  734.59,  747.25,  728.76\n03/28/2016,  733.53, 1300817,  736.79,  738.99,  732.5\n03/24/2016,  735.3, 1570474,  732.01,  737.747,  731\n03/23/2016,  738.06, 1431130,  742.36,  745.7199,  736.15\n03/22/2016,  740.75, 1269263,  737.46,  745,  737.46\n03/21/2016,  742.09, 1835963,  736.5,  742.5,  733.5157\n03/18/2016,  737.6, 2982194,  741.86,  742,  731.83\n03/17/2016,  737.78, 1859562,  736.45,  743.07,  736\n03/16/2016,  736.09, 1621412,  726.37,  737.47,  724.51\n03/15/2016,  728.33, 1720790,  726.92,  732.29,  724.77\n03/14/2016,  730.49, 1717002,  726.81,  735.5,  725.15\n03/11/2016,  726.82, 1968164,  720,  726.92,  717.125\n03/10/2016,  712.82, 2830630,  708.12,  716.44,  703.36\n03/09/2016,  705.24, 1419661,  698.47,  705.68,  694\n03/08/2016,  693.97, 2075305,  688.59,  703.79,  685.34\n03/07/2016,  695.16, 2986064,  706.9,  708.0912,  686.9\n03/04/2016,  710.89, 1971379,  714.99,  716.49,  706.02\n03/03/2016,  712.42, 1956958,  718.68,  719.45,  706.02\n03/02/2016,  718.85, 1629501,  719,  720,  712\n03/01/2016,  718.81, 2148608,  703.62,  718.81,  699.77\n02/29/2016,  697.77, 2478214,  700.32,  710.89,  697.68\n02/26/2016,  705.07, 2241785,  708.58,  713.43,  700.86\n02/25/2016,  705.75, 1640430,  700.01,  705.98,  690.585\n02/24/2016,  699.56, 1961258,  688.92,  700,  680.78\n02/23/2016,  695.85, 2006572,  701.45,  708.4,  693.58\n02/22/2016,  706.46, 1949046,  707.45,  713.24,  702.51\n02/19/2016,  700.91, 1585152,  695.03,  703.0805,  694.05\n02/18/2016,  697.35, 1880306,  710,  712.35,  696.03\n02/17/2016,  708.4, 2490021,  699,  709.75,  691.38\n02/16/2016,  691, 2517324,  692.98,  698,  685.05\n02/12/2016,  682.4, 2138937,  690.26,  693.75,  678.6\n02/11/2016,  683.11, 3021587,  675,  689.35,  668.8675\n02/10/2016,  684.12, 2629130,  686.86,  701.31,  682.13\n02/09/2016,  678.11, 3605792,  672.32,  699.9,  668.77\n02/08/2016,  682.74, 4241416,  667.85,  684.03,  663.06\n02/05/2016,  683.57, 5098357,  703.87,  703.99,  680.15\n02/04/2016,  708.01, 5157988,  722.81,  727,  701.86\n02/03/2016,  726.95, 6166731,  770.22,  774.5,  720.5\n02/02/2016,  764.65, 6340548,  784.5,  789.8699,  764.65\n02/01/2016,  752, 5065235,  750.46,  757.86,  743.27\n01/29/2016,  742.95, 3464432,  731.53,  744.9899,  726.8\n01/28/2016,  730.96, 2664956,  722.22,  733.69,  712.35\n01/27/2016,  699.99, 2175913,  713.67,  718.235,  694.39\n01/26/2016,  713.04, 1329141,  713.85,  718.28,  706.48\n01/25/2016,  711.67, 1709777,  723.58,  729.68,  710.01\n01/22/2016,  725.25, 2009951,  723.6,  728.13,  720.121\n01/21/2016,  706.59, 2411079,  702.18,  719.19,  694.46\n01/20/2016,  698.45, 3441642,  688.61,  706.85,  673.26\n01/19/2016,  701.79, 2264747,  703.3,  709.98,  693.4101\n01/15/2016,  694.45, 3604137,  692.29,  706.74,  685.37\n01/14/2016,  714.72, 2225495,  705.38,  721.925,  689.1\n01/13/2016,  700.56, 2497086,  730.85,  734.74,  698.61\n01/12/2016,  726.07, 2010026,  721.68,  728.75,  717.3165\n01/11/2016,  716.03, 2089495,  716.61,  718.855,  703.54\n01/08/2016,  714.47, 2449420,  731.45,  733.23,  713\n01/07/2016,  726.39, 2960578,  730.31,  738.5,  719.06\n01/06/2016,  743.62, 1943685,  730,  747.18,  728.92\n01/05/2016,  742.58, 1949386,  746.45,  752,  738.64\n01/04/2016,  741.84, 3271348,  743,  744.06,  731.2577\n12/31/2015,  758.88, 1500129,  769.5,  769.5,  758.34\n12/30/2015,  771, 1293514,  776.6,  777.6,  766.9\n12/29/2015,  776.6, 1764044,  766.69,  779.98,  766.43\n12/28/2015,  762.51, 1515574,  752.92,  762.99,  749.52\n12/24/2015,  748.4, 527223,  749.55,  751.35,  746.62\n12/23/2015,  750.31, 1566723,  753.47,  754.21,  744\n12/22/2015,  750, 1365420,  751.65,  754.85,  745.53\n12/21/2015,  747.77, 1524535,  746.13,  750,  740\n12/18/2015,  739.31, 3140906,  746.51,  754.13,  738.15\n12/17/2015,  749.43, 1551087,  762.42,  762.68,  749\n12/16/2015,  758.09, 1986319,  750,  760.59,  739.435\n12/15/2015,  743.4, 2661199,  753,  758.08,  743.01\n12/14/2015,  747.77, 2417778,  741.79,  748.73,  724.17\n12/11/2015,  738.87, 2223284,  741.16,  745.71,  736.75\n12/10/2015,  749.46, 1988035,  752.85,  755.85,  743.83\n12/09/2015,  751.61, 2697978,  759.17,  764.23,  737.001\n12/08/2015,  762.37, 1829004,  757.89,  764.8,  754.2\n12/07/2015,  763.25, 1811336,  767.77,  768.73,  755.09\n12/04/2015,  766.81, 2756194,  753.1,  768.49,  750\n12/03/2015,  752.54, 2589641,  766.01,  768.995,  745.63\n12/02/2015,  762.38, 2196721,  768.9,  775.955,  758.96\n12/01/2015,  767.04, 2131827,  747.11,  768.95,  746.7\n11/30/2015,  742.6, 2045584,  748.81,  754.93,  741.27\n11/27/2015,  750.26, 838528,  748.46,  753.41,  747.49\n11/25/2015,  748.15, 1122224,  748.14,  752,  746.06\n11/24/2015,  748.28, 2333700,  752,  755.279,  737.63\n11/23/2015,  755.98, 1414640,  757.45,  762.7075,  751.82\n11/20/2015,  756.6, 2212934,  746.53,  757.92,  743\n11/19/2015,  738.41, 1327265,  738.74,  742,  737.43\n11/18/2015,  740, 1683978,  727.58,  741.41,  727\n11/17/2015,  725.3, 1507449,  729.29,  731.845,  723.027\n11/16/2015,  728.96, 1904395,  715.6,  729.49,  711.33\n11/13/2015,  717, 2072392,  729.17,  731.15,  716.73\n11/12/2015,  731.23, 1836567,  731,  737.8,  728.645\n11/11/2015,  735.4, 1366611,  732.46,  741,  730.23\n11/10/2015,  728.32, 1606499,  724.4,  730.59,  718.5001\n11/09/2015,  724.89, 2068920,  730.2,  734.71,  719.43\n11/06/2015,  733.76, 1510586,  731.5,  735.41,  727.01\n11/05/2015,  731.25, 1861100,  729.47,  739.48,  729.47\n11/04/2015,  728.11, 1705745,  722,  733.1,  721.9\n11/03/2015,  722.16, 1565355,  718.86,  724.65,  714.72\n11/02/2015,  721.11, 1885155,  711.06,  721.62,  705.85\n10/30/2015,  710.81, 1907732,  715.73,  718,  710.05\n10/29/2015,  716.92, 1455508,  710.5,  718.26,  710.01\n10/28/2015,  712.95, 2178841,  707.33,  712.98,  703.08\n10/27/2015,  708.49, 2232183,  707.38,  713.62,  704.55\n10/26/2015,  712.78, 2709292,  701.55,  719.15,  701.26\n10/23/2015,  702, 6651909,  727.5,  730,  701.5\n10/22/2015,  651.79, 3994360,  646.7,  657.8,  644.01\n10/21/2015,  642.61, 1792869,  654.15,  655.87,  641.73\n10/20/2015,  650.28, 2498077,  664.04,  664.7197,  644.195\n10/19/2015,  666.1, 1465691,  661.18,  666.82,  659.58\n10/16/2015,  662.2, 1610712,  664.11,  664.97,  657.2\n10/15/2015,  661.74, 1832832,  654.66,  663.13,  654.46\n10/14/2015,  651.16, 1413798,  653.21,  659.39,  648.85\n10/13/2015,  652.3, 1806003,  643.15,  657.8125,  643.15\n10/12/2015,  646.67, 1275565,  642.09,  648.5,  639.01\n10/09/2015,  643.61, 1648656,  640,  645.99,  635.318\n10/08/2015,  639.16, 2181990,  641.36,  644.45,  625.56\n10/07/2015,  642.36, 2092536,  649.24,  650.609,  632.15\n10/06/2015,  645.44, 2235078,  638.84,  649.25,  636.5295\n10/05/2015,  641.47, 1802263,  632,  643.01,  627\n10/02/2015,  626.91, 2681241,  607.2,  627.34,  603.13\n10/01/2015,  611.29, 1866223,  608.37,  612.09,  599.85\n09/30/2015,  608.42, 2412754,  603.28,  608.76,  600.73\n09/29/2015,  594.97, 2310065,  597.28,  605,  590.22\n09/28/2015,  594.89, 3118693,  610.34,  614.605,  589.38\n09/25/2015,  611.97, 2173134,  629.77,  629.77,  611\n09/24/2015,  625.8, 2238097,  616.64,  627.32,  612.4\n09/23/2015,  622.36, 1470633,  622.05,  628.93,  620\n09/22/2015,  622.69, 2561551,  627,  627.55,  615.43\n09/21/2015,  635.44, 1786543,  634.4,  636.49,  625.94\n09/18/2015,  629.25, 5123314,  636.79,  640,  627.02\n09/17/2015,  642.9, 2259404,  637.79,  650.9,  635.02\n09/16/2015,  635.98, 1276250,  635.47,  637.95,  632.32\n09/15/2015,  635.14, 2082426,  626.7,  638.7,  623.78\n09/14/2015,  623.24, 1701618,  625.7,  625.86,  619.43\n09/11/2015,  625.77, 1372803,  619.75,  625.78,  617.42\n09/10/2015,  621.35, 1903334,  613.1,  624.16,  611.43\n09/09/2015,  612.72, 1699686,  621.22,  626.52,  609.6\n09/08/2015,  614.66, 2277487,  612.49,  616.31,  604.12\n09/04/2015,  600.7, 2087028,  600,  603.47,  595.25\n09/03/2015,  606.25, 1757851,  617,  619.71,  602.8213\n09/02/2015,  614.34, 2573982,  605.59,  614.34,  599.71\n09/01/2015,  597.79, 3699844,  602.36,  612.86,  594.1\n08/31/2015,  618.25, 2172168,  627.54,  635.8,  617.68\n08/28/2015,  630.38, 1975818,  632.82,  636.88,  624.56\n08/27/2015,  637.61, 3485906,  639.4,  643.59,  622\n08/26/2015,  628.62, 4187276,  610.35,  631.71,  599.05\n08/25/2015,  582.06, 3521916,  614.91,  617.45,  581.11\n08/24/2015,  589.61, 5727282,  573,  614,  565.05\n08/21/2015,  612.48, 4261666,  639.78,  640.05,  612.33\n08/20/2015,  646.83, 2854028,  655.46,  662.99,  642.9\n08/19/2015,  660.9, 2132265,  656.6,  667,  654.19\n08/18/2015,  656.13, 1455664,  661.9,  664,  653.46\n08/17/2015,  660.87, 1050553,  656.8,  661.38,  651.24\n08/14/2015,  657.12, 1071333,  655.01,  659.855,  652.66\n08/13/2015,  656.45, 1807182,  659.323,  664.5,  651.661\n08/12/2015,  659.56, 2938651,  663.08,  665,  652.29\n08/11/2015,  660.78, 5016425,  669.2,  674.9,  654.27\n08/10/2015,  633.73, 1653836,  639.48,  643.44,  631.249\n08/07/2015,  635.3, 1403441,  640.23,  642.68,  629.71\n08/06/2015,  642.68, 1572150,  645,  645.379,  632.25\n08/05/2015,  643.78, 2331720,  634.33,  647.86,  633.16\n08/04/2015,  629.25, 1486858,  628.42,  634.81,  627.16\n08/03/2015,  631.21, 1301439,  625.34,  633.0556,  625.34\n07/31/2015,  625.61, 1705286,  631.38,  632.91,  625.5\n07/30/2015,  632.59, 1472286,  630,  635.22,  622.05\n07/29/2015,  631.93, 1573146,  628.8,  633.36,  622.65\n07/28/2015,  628, 1713684,  632.83,  632.83,  623.31\n07/27/2015,  627.26, 2673801,  621,  634.3,  620.5\n07/24/2015,  623.56, 3622089,  647,  648.17,  622.52\n07/23/2015,  644.28, 3014035,  661.27,  663.63,  641\n07/22/2015,  662.1, 3707818,  660.89,  678.64,  659\n07/21/2015,  662.3, 3363342,  655.21,  673,  654.3\n07/20/2015,  663.02, 5857092,  659.24,  668.88,  653.01\n07/17/2015,  672.93, 11153500,  649,  674.468,  645\n07/16/2015,  579.85, 4559712,  565.12,  580.68,  565\n07/15/2015,  560.22, 1782264,  560.13,  566.5029,  556.79\n07/14/2015,  561.1, 3231284,  546.76,  565.8487,  546.71\n07/13/2015,  546.55, 2204610,  532.88,  547.11,  532.4001\n07/10/2015,  530.13, 1954951,  526.29,  532.56,  525.55\n07/09/2015,  520.68, 1840155,  523.12,  523.77,  520.35\n07/08/2015,  516.83, 1293372,  521.05,  522.734,  516.11\n07/07/2015,  525.02, 1595672,  523.13,  526.18,  515.18\n07/06/2015,  522.86, 1278587,  519.5,  525.25,  519\n07/02/2015,  523.4, 1235773,  521.08,  524.65,  521.08\n07/01/2015,  521.84, 1961197,  524.73,  525.69,  518.2305\n06/30/2015,  520.51, 2234284,  526.02,  526.25,  520.5\n06/29/2015,  521.52, 1935361,  525.01,  528.61,  520.54\n06/26/2015,  531.69, 2108629,  537.26,  537.76,  531.35\n06/25/2015,  535.23, 1332412,  538.87,  540.9,  535.23\n06/24/2015,  537.84, 1286576,  540,  540,  535.66\n06/23/2015,  540.48, 1196115,  539.64,  541.499,  535.25\n06/22/2015,  538.19, 1243535,  539.59,  543.74,  537.53\n06/19/2015,  536.69, 1890916,  537.21,  538.25,  533.01\n06/18/2015,  536.73, 1832450,  531,  538.15,  530.79\n06/17/2015,  529.26, 1269113,  529.37,  530.98,  525.1\n06/16/2015,  528.15, 1071728,  528.4,  529.6399,  525.56\n06/15/2015,  527.2, 1632675,  528,  528.3,  524\n06/12/2015,  532.33, 955489,  531.6,  533.12,  530.16\n06/11/2015,  534.61, 1208632,  538.425,  538.98,  533.02\n06/10/2015,  536.69, 1813775,  529.36,  538.36,  529.35\n06/09/2015,  526.69, 1454172,  527.56,  529.2,  523.01\n06/08/2015,  526.83, 1523960,  533.31,  534.12,  526.24\n06/05/2015,  533.33, 1375008,  536.35,  537.2,  532.52\n06/04/2015,  536.7, 1346044,  537.76,  540.59,  534.32\n06/03/2015,  540.31, 1716836,  539.91,  543.5,  537.11\n06/02/2015,  539.18, 1936721,  532.93,  543,  531.33\n06/01/2015,  533.99, 1900257,  536.79,  536.79,  529.76\n05/29/2015,  532.11, 2590445,  537.37,  538.63,  531.45\n05/28/2015,  539.78, 1029764,  538.01,  540.61,  536.25\n05/27/2015,  539.79, 1524783,  532.8,  540.55,  531.71\n05/26/2015,  532.32, 2404462,  538.12,  539,  529.88\n05/22/2015,  540.11, 1175065,  540.15,  544.19,  539.51\n05/21/2015,  542.51, 1461431,  537.95,  543.8399,  535.98\n05/20/2015,  539.27, 1430565,  538.49,  542.92,  532.972\n05/19/2015,  537.36, 1964037,  533.98,  540.66,  533.04\n05/18/2015,  532.3, 2001117,  532.01,  534.82,  528.85\n05/15/2015,  533.85, 1965088,  539.18,  539.2743,  530.38\n05/14/2015,  538.4, 1401005,  533.77,  539,  532.41\n05/13/2015,  529.62, 1253005,  530.56,  534.3215,  528.655\n05/12/2015,  529.04, 1633180,  531.6,  533.2089,  525.26\n05/11/2015,  535.7, 904465,  538.37,  541.98,  535.4\n05/08/2015,  538.22, 1527181,  536.65,  541.15,  536\n05/07/2015,  530.7, 1543986,  523.99,  533.46,  521.75\n05/06/2015,  524.22, 1566865,  531.24,  532.38,  521.085\n05/05/2015,  530.8, 1380519,  538.21,  539.74,  530.3906\n05/04/2015,  540.78, 1303830,  538.53,  544.07,  535.06\n05/01/2015,  537.9, 1758085,  538.43,  539.54,  532.1\n04/30/2015,  537.34, 2080834,  547.87,  548.59,  535.05\n04/29/2015,  549.08, 1696886,  550.47,  553.68,  546.905\n04/28/2015,  553.68, 1490735,  554.64,  556.02,  550.366\n04/27/2015,  555.37, 2390696,  563.39,  565.95,  553.2001\n"
  },
  {
    "path": "machine_learning/mfcc.py",
    "content": "\"\"\"\nMel Frequency Cepstral Coefficients (MFCC) Calculation\n\nMFCC is an algorithm widely used in audio and speech processing to represent the\nshort-term power spectrum of a sound signal in a more compact and\ndiscriminative way. It is particularly popular in speech and audio processing\ntasks such as speech recognition and speaker identification.\n\nHow Mel Frequency Cepstral Coefficients are Calculated:\n1. Preprocessing:\n   - Load an audio signal and normalize it to ensure that the values fall\n     within a specific range (e.g., between -1 and 1).\n   - Frame the audio signal into overlapping, fixed-length segments, typically\n     using a technique like windowing to reduce spectral leakage.\n\n2. Fourier Transform:\n   - Apply a Fast Fourier Transform (FFT) to each audio frame to convert it\n     from the time domain to the frequency domain. This results in a\n     representation of the audio frame as a sequence of frequency components.\n\n3. Power Spectrum:\n   - Calculate the power spectrum by taking the squared magnitude of each\n     frequency component obtained from the FFT. This step measures the energy\n     distribution across different frequency bands.\n\n4. Mel Filterbank:\n   - Apply a set of triangular filterbanks spaced in the Mel frequency scale\n     to the power spectrum. These filters mimic the human auditory system's\n     frequency response. Each filterbank sums the power spectrum values within\n     its band.\n\n5. Logarithmic Compression:\n   - Take the logarithm (typically base 10) of the filterbank values to\n     compress the dynamic range. This step mimics the logarithmic response of\n     the human ear to sound intensity.\n\n6. Discrete Cosine Transform (DCT):\n   - Apply the Discrete Cosine Transform to the log filterbank energies to\n     obtain the MFCC coefficients. This transformation helps decorrelate the\n     filterbank energies and captures the most important features of the audio\n     signal.\n\n7. Feature Extraction:\n   - Select a subset of the DCT coefficients to form the feature vector.\n     Often, the first few coefficients (e.g., 12-13) are used for most\n     applications.\n\nReferences:\n- Mel-Frequency Cepstral Coefficients (MFCCs):\n  https://en.wikipedia.org/wiki/Mel-frequency_cepstrum\n- Speech and Language Processing by Daniel Jurafsky & James H. Martin:\n  https://web.stanford.edu/~jurafsky/slp3/\n- Mel Frequency Cepstral Coefficient (MFCC) tutorial\n  http://practicalcryptography.com/miscellaneous/machine-learning\n  /guide-mel-frequency-cepstral-coefficients-mfccs/\n\nAuthor: Amir Lavasani\n\"\"\"\n\nimport logging\n\nimport numpy as np\nimport scipy.fftpack as fft\nfrom scipy.signal import get_window\n\nlogging.basicConfig(filename=f\"{__file__}.log\", level=logging.INFO)\n\n\ndef mfcc(\n    audio: np.ndarray,\n    sample_rate: int,\n    ftt_size: int = 1024,\n    hop_length: int = 20,\n    mel_filter_num: int = 10,\n    dct_filter_num: int = 40,\n) -> np.ndarray:\n    \"\"\"\n    Calculate Mel Frequency Cepstral Coefficients (MFCCs) from an audio signal.\n\n    Args:\n        audio: The input audio signal.\n        sample_rate: The sample rate of the audio signal (in Hz).\n        ftt_size: The size of the FFT window (default is 1024).\n        hop_length: The hop length for frame creation (default is 20ms).\n        mel_filter_num: The number of Mel filters (default is 10).\n        dct_filter_num: The number of DCT filters (default is 40).\n\n    Returns:\n        A matrix of MFCCs for the input audio.\n\n    Raises:\n        ValueError: If the input audio is empty.\n\n    Example:\n    >>> sample_rate = 44100  # Sample rate of 44.1 kHz\n    >>> duration = 2.0  # Duration of 1 second\n    >>> t = np.linspace(0, duration, int(sample_rate * duration), endpoint=False)\n    >>> audio = 0.5 * np.sin(2 * np.pi * 440.0 * t)  # Generate a 440 Hz sine wave\n    >>> mfccs = mfcc(audio, sample_rate)\n    >>> mfccs.shape\n    (40, 101)\n    \"\"\"\n    logging.info(f\"Sample rate: {sample_rate}Hz\")\n    logging.info(f\"Audio duration: {len(audio) / sample_rate}s\")\n    logging.info(f\"Audio min: {np.min(audio)}\")\n    logging.info(f\"Audio max: {np.max(audio)}\")\n\n    # normalize audio\n    audio_normalized = normalize(audio)\n\n    logging.info(f\"Normalized audio min: {np.min(audio_normalized)}\")\n    logging.info(f\"Normalized audio max: {np.max(audio_normalized)}\")\n\n    # frame audio into\n    audio_framed = audio_frames(\n        audio_normalized, sample_rate, ftt_size=ftt_size, hop_length=hop_length\n    )\n\n    logging.info(f\"Framed audio shape: {audio_framed.shape}\")\n    logging.info(f\"First frame: {audio_framed[0]}\")\n\n    # convert to frequency domain\n    # For simplicity we will choose the Hanning window.\n    window = get_window(\"hann\", ftt_size, fftbins=True)\n    audio_windowed = audio_framed * window\n\n    logging.info(f\"Windowed audio shape: {audio_windowed.shape}\")\n    logging.info(f\"First frame: {audio_windowed[0]}\")\n\n    audio_fft = calculate_fft(audio_windowed, ftt_size)\n    logging.info(f\"fft audio shape: {audio_fft.shape}\")\n    logging.info(f\"First frame: {audio_fft[0]}\")\n\n    audio_power = calculate_signal_power(audio_fft)\n    logging.info(f\"power audio shape: {audio_power.shape}\")\n    logging.info(f\"First frame: {audio_power[0]}\")\n\n    filters = mel_spaced_filterbank(sample_rate, mel_filter_num, ftt_size)\n    logging.info(f\"filters shape: {filters.shape}\")\n\n    audio_filtered = np.dot(filters, np.transpose(audio_power))\n    audio_log = 10.0 * np.log10(audio_filtered)\n    logging.info(f\"audio_log shape: {audio_log.shape}\")\n\n    dct_filters = discrete_cosine_transform(dct_filter_num, mel_filter_num)\n    cepstral_coefficents = np.dot(dct_filters, audio_log)\n\n    logging.info(f\"cepstral_coefficents shape: {cepstral_coefficents.shape}\")\n    return cepstral_coefficents\n\n\ndef normalize(audio: np.ndarray) -> np.ndarray:\n    \"\"\"\n    Normalize an audio signal by scaling it to have values between -1 and 1.\n\n    Args:\n        audio: The input audio signal.\n\n    Returns:\n        The normalized audio signal.\n\n    Examples:\n    >>> audio = np.array([1, 2, 3, 4, 5])\n    >>> normalized_audio = normalize(audio)\n    >>> float(np.max(normalized_audio))\n    1.0\n    >>> float(np.min(normalized_audio))\n    0.2\n    \"\"\"\n    # Divide the entire audio signal by the maximum absolute value\n    return audio / np.max(np.abs(audio))\n\n\ndef audio_frames(\n    audio: np.ndarray,\n    sample_rate: int,\n    hop_length: int = 20,\n    ftt_size: int = 1024,\n) -> np.ndarray:\n    \"\"\"\n    Split an audio signal into overlapping frames.\n\n    Args:\n        audio: The input audio signal.\n        sample_rate: The sample rate of the audio signal.\n        hop_length: The length of the hopping (default is 20ms).\n        ftt_size: The size of the FFT window (default is 1024).\n\n    Returns:\n        An array of overlapping frames.\n\n    Examples:\n    >>> audio = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]*1000)\n    >>> sample_rate = 8000\n    >>> frames = audio_frames(audio, sample_rate, hop_length=10, ftt_size=512)\n    >>> frames.shape\n    (126, 512)\n    \"\"\"\n\n    hop_size = np.round(sample_rate * hop_length / 1000).astype(int)\n\n    # Pad the audio signal to handle edge cases\n    audio = np.pad(audio, int(ftt_size / 2), mode=\"reflect\")\n\n    # Calculate the number of frames\n    frame_count = int((len(audio) - ftt_size) / hop_size) + 1\n\n    # Initialize an array to store the frames\n    frames = np.zeros((frame_count, ftt_size))\n\n    # Split the audio signal into frames\n    for n in range(frame_count):\n        frames[n] = audio[n * hop_size : n * hop_size + ftt_size]\n\n    return frames\n\n\ndef calculate_fft(audio_windowed: np.ndarray, ftt_size: int = 1024) -> np.ndarray:\n    \"\"\"\n    Calculate the Fast Fourier Transform (FFT) of windowed audio data.\n\n    Args:\n        audio_windowed: The windowed audio signal.\n        ftt_size: The size of the FFT (default is 1024).\n\n    Returns:\n        The FFT of the audio data.\n\n    Examples:\n    >>> audio_windowed = np.array([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])\n    >>> audio_fft = calculate_fft(audio_windowed, ftt_size=4)\n    >>> bool(np.allclose(audio_fft[0], np.array([6.0+0.j, -1.5+0.8660254j,\n    ...     -1.5-0.8660254j])))\n    True\n    \"\"\"\n    # Transpose the audio data to have time in rows and channels in columns\n    audio_transposed = np.transpose(audio_windowed)\n\n    # Initialize an array to store the FFT results\n    audio_fft = np.empty(\n        (int(1 + ftt_size // 2), audio_transposed.shape[1]),\n        dtype=np.complex64,\n        order=\"F\",\n    )\n\n    # Compute FFT for each channel\n    for n in range(audio_fft.shape[1]):\n        audio_fft[:, n] = fft.fft(audio_transposed[:, n], axis=0)[: audio_fft.shape[0]]\n\n    # Transpose the FFT results back to the original shape\n    return np.transpose(audio_fft)\n\n\ndef calculate_signal_power(audio_fft: np.ndarray) -> np.ndarray:\n    \"\"\"\n    Calculate the power of the audio signal from its FFT.\n\n    Args:\n        audio_fft: The FFT of the audio signal.\n\n    Returns:\n        The power of the audio signal.\n\n    Examples:\n    >>> audio_fft = np.array([1+2j, 2+3j, 3+4j, 4+5j])\n    >>> power = calculate_signal_power(audio_fft)\n    >>> np.allclose(power, np.array([5, 13, 25, 41]))\n    True\n    \"\"\"\n    # Calculate the power by squaring the absolute values of the FFT coefficients\n    return np.square(np.abs(audio_fft))\n\n\ndef freq_to_mel(freq: float) -> float:\n    \"\"\"\n    Convert a frequency in Hertz to the mel scale.\n\n    Args:\n        freq: The frequency in Hertz.\n\n    Returns:\n        The frequency in mel scale.\n\n    Examples:\n    >>> float(round(freq_to_mel(1000), 2))\n    999.99\n    \"\"\"\n    # Use the formula to convert frequency to the mel scale\n    return 2595.0 * np.log10(1.0 + freq / 700.0)\n\n\ndef mel_to_freq(mels: float) -> float:\n    \"\"\"\n    Convert a frequency in the mel scale to Hertz.\n\n    Args:\n        mels: The frequency in mel scale.\n\n    Returns:\n        The frequency in Hertz.\n\n    Examples:\n    >>> round(mel_to_freq(999.99), 2)\n    1000.01\n    \"\"\"\n    # Use the formula to convert mel scale to frequency\n    return 700.0 * (10.0 ** (mels / 2595.0) - 1.0)\n\n\ndef mel_spaced_filterbank(\n    sample_rate: int, mel_filter_num: int = 10, ftt_size: int = 1024\n) -> np.ndarray:\n    \"\"\"\n    Create a Mel-spaced filter bank for audio processing.\n\n    Args:\n        sample_rate: The sample rate of the audio.\n        mel_filter_num: The number of mel filters (default is 10).\n        ftt_size: The size of the FFT (default is 1024).\n\n    Returns:\n        Mel-spaced filter bank.\n\n    Examples:\n    >>> float(round(mel_spaced_filterbank(8000, 10, 1024)[0][1], 10))\n    0.0004603981\n    \"\"\"\n    freq_min = 0\n    freq_high = sample_rate // 2\n\n    logging.info(f\"Minimum frequency: {freq_min}\")\n    logging.info(f\"Maximum frequency: {freq_high}\")\n\n    # Calculate filter points and mel frequencies\n    filter_points, mel_freqs = get_filter_points(\n        sample_rate,\n        freq_min,\n        freq_high,\n        mel_filter_num,\n        ftt_size,\n    )\n\n    filters = get_filters(filter_points, ftt_size)\n\n    # normalize filters\n    # taken from the librosa library\n    enorm = 2.0 / (mel_freqs[2 : mel_filter_num + 2] - mel_freqs[:mel_filter_num])\n    return filters * enorm[:, np.newaxis]\n\n\ndef get_filters(filter_points: np.ndarray, ftt_size: int) -> np.ndarray:\n    \"\"\"\n    Generate filters for audio processing.\n\n    Args:\n        filter_points: A list of filter points.\n        ftt_size: The size of the FFT.\n\n    Returns:\n        A matrix of filters.\n\n    Examples:\n    >>> get_filters(np.array([0, 20, 51, 95, 161, 256], dtype=int), 512).shape\n    (4, 257)\n    \"\"\"\n    num_filters = len(filter_points) - 2\n    filters = np.zeros((num_filters, int(ftt_size / 2) + 1))\n\n    for n in range(num_filters):\n        start = filter_points[n]\n        mid = filter_points[n + 1]\n        end = filter_points[n + 2]\n\n        # Linearly increase values from 0 to 1\n        filters[n, start:mid] = np.linspace(0, 1, mid - start)\n\n        # Linearly decrease values from 1 to 0\n        filters[n, mid:end] = np.linspace(1, 0, end - mid)\n\n    return filters\n\n\ndef get_filter_points(\n    sample_rate: int,\n    freq_min: int,\n    freq_high: int,\n    mel_filter_num: int = 10,\n    ftt_size: int = 1024,\n) -> tuple[np.ndarray, np.ndarray]:\n    \"\"\"\n    Calculate the filter points and frequencies for mel frequency filters.\n\n    Args:\n        sample_rate: The sample rate of the audio.\n        freq_min: The minimum frequency in Hertz.\n        freq_high: The maximum frequency in Hertz.\n        mel_filter_num: The number of mel filters (default is 10).\n        ftt_size: The size of the FFT (default is 1024).\n\n    Returns:\n        Filter points and corresponding frequencies.\n\n    Examples:\n    >>> filter_points = get_filter_points(8000, 0, 4000, mel_filter_num=4, ftt_size=512)\n    >>> filter_points[0]\n    array([  0,  20,  51,  95, 161, 256])\n    >>> filter_points[1]\n    array([   0.        ,  324.46707094,  799.33254207, 1494.30973963,\n           2511.42581671, 4000.        ])\n    \"\"\"\n    # Convert minimum and maximum frequencies to mel scale\n    fmin_mel = freq_to_mel(freq_min)\n    fmax_mel = freq_to_mel(freq_high)\n\n    logging.info(f\"MEL min: {fmin_mel}\")\n    logging.info(f\"MEL max: {fmax_mel}\")\n\n    # Generate equally spaced mel frequencies\n    mels = np.linspace(fmin_mel, fmax_mel, num=mel_filter_num + 2)\n\n    # Convert mel frequencies back to Hertz\n    freqs = mel_to_freq(mels)\n\n    # Calculate filter points as integer values\n    filter_points = np.floor((ftt_size + 1) / sample_rate * freqs).astype(int)\n\n    return filter_points, freqs\n\n\ndef discrete_cosine_transform(dct_filter_num: int, filter_num: int) -> np.ndarray:\n    \"\"\"\n    Compute the Discrete Cosine Transform (DCT) basis matrix.\n\n    Args:\n        dct_filter_num: The number of DCT filters to generate.\n        filter_num: The number of the fbank filters.\n\n    Returns:\n        The DCT basis matrix.\n\n    Examples:\n    >>> float(round(discrete_cosine_transform(3, 5)[0][0], 5))\n    0.44721\n    \"\"\"\n    basis = np.empty((dct_filter_num, filter_num))\n    basis[0, :] = 1.0 / np.sqrt(filter_num)\n\n    samples = np.arange(1, 2 * filter_num, 2) * np.pi / (2.0 * filter_num)\n\n    for i in range(1, dct_filter_num):\n        basis[i, :] = np.cos(i * samples) * np.sqrt(2.0 / filter_num)\n\n    return basis\n\n\ndef example(wav_file_path: str = \"./path-to-file/sample.wav\") -> np.ndarray:\n    \"\"\"\n    Example function to calculate Mel Frequency Cepstral Coefficients\n    (MFCCs) from an audio file.\n\n    Args:\n        wav_file_path: The path to the WAV audio file.\n\n    Returns:\n        np.ndarray: The computed MFCCs for the audio.\n    \"\"\"\n    from scipy.io import wavfile\n\n    # Load the audio from the WAV file\n    sample_rate, audio = wavfile.read(wav_file_path)\n\n    # Calculate MFCCs\n    return mfcc(audio, sample_rate)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "machine_learning/multilayer_perceptron_classifier.py",
    "content": "from sklearn.neural_network import MLPClassifier\r\n\r\nX = [[0.0, 0.0], [1.0, 1.0], [1.0, 0.0], [0.0, 1.0]]\r\ny = [0, 1, 0, 0]\r\n\r\n\r\nclf = MLPClassifier(\r\n    solver=\"lbfgs\", alpha=1e-5, hidden_layer_sizes=(5, 2), random_state=1\r\n)\r\n\r\nclf.fit(X, y)\r\n\r\n\r\ntest = [[0.0, 0.0], [0.0, 1.0], [1.0, 1.0]]\r\nY = clf.predict(test)\r\n\r\n\r\ndef wrapper(y):\r\n    \"\"\"\r\n    >>> [int(x) for x in wrapper(Y)]\r\n    [0, 0, 1]\r\n    \"\"\"\r\n    return list(y)\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n"
  },
  {
    "path": "machine_learning/polynomial_regression.py",
    "content": "\"\"\"\nPolynomial regression is a type of regression analysis that models the relationship\nbetween a predictor x and the response y as an mth-degree polynomial:\n\ny = β₀ + β₁x + β₂x² + ... + βₘxᵐ + ε\n\nBy treating x, x², ..., xᵐ as distinct variables, we see that polynomial regression is a\nspecial case of multiple linear regression. Therefore, we can use ordinary least squares\n(OLS) estimation to estimate the vector of model parameters β = (β₀, β₁, β₂, ..., βₘ)\nfor polynomial regression:\n\nβ = (XᵀX)⁻¹Xᵀy = X⁺y\n\nwhere X is the design matrix, y is the response vector, and X⁺ denotes the Moore-Penrose\npseudoinverse of X. In the case of polynomial regression, the design matrix is\n\n    |1  x₁  x₁² ⋯ x₁ᵐ|\nX = |1  x₂  x₂² ⋯ x₂ᵐ|\n    |⋮  ⋮   ⋮   ⋱ ⋮  |\n    |1  xₙ  xₙ² ⋯  xₙᵐ|\n\nIn OLS estimation, inverting XᵀX to compute X⁺ can be very numerically unstable. This\nimplementation sidesteps this need to invert XᵀX by computing X⁺ using singular value\ndecomposition (SVD):\n\nβ = VΣ⁺Uᵀy\n\nwhere UΣVᵀ is an SVD of X.\n\nReferences:\n    - https://en.wikipedia.org/wiki/Polynomial_regression\n    - https://en.wikipedia.org/wiki/Moore%E2%80%93Penrose_inverse\n    - https://en.wikipedia.org/wiki/Numerical_methods_for_linear_least_squares\n    - https://en.wikipedia.org/wiki/Singular_value_decomposition\n\"\"\"\n\nimport matplotlib.pyplot as plt\nimport numpy as np\n\n\nclass PolynomialRegression:\n    __slots__ = \"degree\", \"params\"\n\n    def __init__(self, degree: int) -> None:\n        \"\"\"\n        @raises ValueError: if the polynomial degree is negative\n        \"\"\"\n        if degree < 0:\n            raise ValueError(\"Polynomial degree must be non-negative\")\n\n        self.degree = degree\n        self.params = None\n\n    @staticmethod\n    def _design_matrix(data: np.ndarray, degree: int) -> np.ndarray:\n        \"\"\"\n        Constructs a polynomial regression design matrix for the given input data. For\n        input data x = (x₁, x₂, ..., xₙ) and polynomial degree m, the design matrix is\n        the Vandermonde matrix\n\n            |1  x₁  x₁² ⋯ x₁ᵐ|\n        X = |1  x₂  x₂² ⋯ x₂ᵐ|\n            |⋮  ⋮   ⋮   ⋱ ⋮  |\n            |1  xₙ  xₙ² ⋯  xₙᵐ|\n\n        Reference: https://en.wikipedia.org/wiki/Vandermonde_matrix\n\n        @param data:    the input predictor values x, either for model fitting or for\n                        prediction\n        @param degree:  the polynomial degree m\n        @returns:       the Vandermonde matrix X (see above)\n        @raises ValueError: if input data is not N x 1\n\n        >>> x = np.array([0, 1, 2])\n        >>> PolynomialRegression._design_matrix(x, degree=0)\n        array([[1],\n               [1],\n               [1]])\n        >>> PolynomialRegression._design_matrix(x, degree=1)\n        array([[1, 0],\n               [1, 1],\n               [1, 2]])\n        >>> PolynomialRegression._design_matrix(x, degree=2)\n        array([[1, 0, 0],\n               [1, 1, 1],\n               [1, 2, 4]])\n        >>> PolynomialRegression._design_matrix(x, degree=3)\n        array([[1, 0, 0, 0],\n               [1, 1, 1, 1],\n               [1, 2, 4, 8]])\n        >>> PolynomialRegression._design_matrix(np.array([[0, 0], [0 , 0]]), degree=3)\n        Traceback (most recent call last):\n        ...\n        ValueError: Data must have dimensions N x 1\n        \"\"\"\n        _rows, *remaining = data.shape\n        if remaining:\n            raise ValueError(\"Data must have dimensions N x 1\")\n\n        return np.vander(data, N=degree + 1, increasing=True)\n\n    def fit(self, x_train: np.ndarray, y_train: np.ndarray) -> None:\n        \"\"\"\n        Computes the polynomial regression model parameters using ordinary least squares\n        (OLS) estimation:\n\n        β = (XᵀX)⁻¹Xᵀy = X⁺y\n\n        where X⁺ denotes the Moore-Penrose pseudoinverse of the design matrix X. This\n        function computes X⁺ using singular value decomposition (SVD).\n\n        References:\n            - https://en.wikipedia.org/wiki/Moore%E2%80%93Penrose_inverse\n            - https://en.wikipedia.org/wiki/Singular_value_decomposition\n            - https://en.wikipedia.org/wiki/Multicollinearity\n\n        @param x_train: the predictor values x for model fitting\n        @param y_train: the response values y for model fitting\n        @raises ArithmeticError:    if X isn't full rank, then XᵀX is singular and β\n                                    doesn't exist\n\n        >>> x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])\n        >>> y = x**3 - 2 * x**2 + 3 * x - 5\n        >>> poly_reg = PolynomialRegression(degree=3)\n        >>> poly_reg.fit(x, y)\n        >>> poly_reg.params\n        array([-5.,  3., -2.,  1.])\n        >>> poly_reg = PolynomialRegression(degree=20)\n        >>> poly_reg.fit(x, y)\n        Traceback (most recent call last):\n        ...\n        ArithmeticError: Design matrix is not full rank, can't compute coefficients\n\n        Make sure errors don't grow too large:\n        >>> coefs = np.array([-250, 50, -2, 36, 20, -12, 10, 2, -1, -15, 1])\n        >>> y = PolynomialRegression._design_matrix(x, len(coefs) - 1) @ coefs\n        >>> poly_reg = PolynomialRegression(degree=len(coefs) - 1)\n        >>> poly_reg.fit(x, y)\n        >>> np.allclose(poly_reg.params, coefs, atol=10e-3)\n        True\n        \"\"\"\n        X = PolynomialRegression._design_matrix(x_train, self.degree)  # noqa: N806\n        _, cols = X.shape\n        if np.linalg.matrix_rank(X) < cols:\n            raise ArithmeticError(\n                \"Design matrix is not full rank, can't compute coefficients\"\n            )\n\n        # np.linalg.pinv() computes the Moore-Penrose pseudoinverse using SVD\n        self.params = np.linalg.pinv(X) @ y_train\n\n    def predict(self, data: np.ndarray) -> np.ndarray:\n        \"\"\"\n        Computes the predicted response values y for the given input data by\n        constructing the design matrix X and evaluating y = Xβ.\n\n        @param data:    the predictor values x for prediction\n        @returns:       the predicted response values y = Xβ\n        @raises ArithmeticError:    if this function is called before the model\n                                    parameters are fit\n\n        >>> x = np.array([0, 1, 2, 3, 4])\n        >>> y = x**3 - 2 * x**2 + 3 * x - 5\n        >>> poly_reg = PolynomialRegression(degree=3)\n        >>> poly_reg.fit(x, y)\n        >>> poly_reg.predict(np.array([-1]))\n        array([-11.])\n        >>> poly_reg.predict(np.array([-2]))\n        array([-27.])\n        >>> poly_reg.predict(np.array([6]))\n        array([157.])\n        >>> PolynomialRegression(degree=3).predict(x)\n        Traceback (most recent call last):\n        ...\n        ArithmeticError: Predictor hasn't been fit yet\n        \"\"\"\n        if self.params is None:\n            raise ArithmeticError(\"Predictor hasn't been fit yet\")\n\n        return PolynomialRegression._design_matrix(data, self.degree) @ self.params\n\n\ndef main() -> None:\n    \"\"\"\n    Fit a polynomial regression model to predict fuel efficiency using seaborn's mpg\n    dataset\n\n    >>> pass    # Placeholder, function is only for demo purposes\n    \"\"\"\n    import seaborn as sns\n\n    mpg_data = sns.load_dataset(\"mpg\")\n\n    poly_reg = PolynomialRegression(degree=2)\n    poly_reg.fit(mpg_data.weight, mpg_data.mpg)\n\n    weight_sorted = np.sort(mpg_data.weight)\n    predictions = poly_reg.predict(weight_sorted)\n\n    plt.scatter(mpg_data.weight, mpg_data.mpg, color=\"gray\", alpha=0.5)\n    plt.plot(weight_sorted, predictions, color=\"red\", linewidth=3)\n    plt.title(\"Predicting Fuel Efficiency Using Polynomial Regression\")\n    plt.xlabel(\"Weight (lbs)\")\n    plt.ylabel(\"Fuel Efficiency (mpg)\")\n    plt.show()\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    main()\n"
  },
  {
    "path": "machine_learning/principle_component_analysis.py",
    "content": "\"\"\"\nPrincipal Component Analysis (PCA) is a dimensionality reduction technique\nused in machine learning. It transforms high-dimensional data into a lower-dimensional\nrepresentation while retaining as much variance as possible.\n\nThis implementation follows best practices, including:\n- Standardizing the dataset.\n- Computing principal components using Singular Value Decomposition (SVD).\n- Returning transformed data and explained variance ratio.\n\"\"\"\n\nimport doctest\n\nimport numpy as np\nfrom sklearn.datasets import load_iris\nfrom sklearn.decomposition import PCA\nfrom sklearn.preprocessing import StandardScaler\n\n\ndef collect_dataset() -> tuple[np.ndarray, np.ndarray]:\n    \"\"\"\n    Collects the dataset (Iris dataset) and returns feature matrix and target values.\n\n    :return: Tuple containing feature matrix (X) and target labels (y)\n\n    Example:\n    >>> X, y = collect_dataset()\n    >>> X.shape\n    (150, 4)\n    >>> y.shape\n    (150,)\n    \"\"\"\n    data = load_iris()\n    return np.array(data.data), np.array(data.target)\n\n\ndef apply_pca(data_x: np.ndarray, n_components: int) -> tuple[np.ndarray, np.ndarray]:\n    \"\"\"\n    Applies Principal Component Analysis (PCA) to reduce dimensionality.\n\n    :param data_x: Original dataset (features)\n    :param n_components: Number of principal components to retain\n    :return: Tuple containing transformed dataset and explained variance ratio\n\n    Example:\n    >>> X, _ = collect_dataset()\n    >>> transformed_X, variance = apply_pca(X, 2)\n    >>> transformed_X.shape\n    (150, 2)\n    >>> len(variance) == 2\n    True\n    \"\"\"\n    # Standardizing the dataset\n    scaler = StandardScaler()\n    data_x_scaled = scaler.fit_transform(data_x)\n\n    # Applying PCA\n    pca = PCA(n_components=n_components)\n    principal_components = pca.fit_transform(data_x_scaled)\n\n    return principal_components, pca.explained_variance_ratio_\n\n\ndef main() -> None:\n    \"\"\"\n    Driver function to execute PCA and display results.\n    \"\"\"\n    data_x, _data_y = collect_dataset()\n\n    # Number of principal components to retain\n    n_components = 2\n\n    # Apply PCA\n    transformed_data, variance_ratio = apply_pca(data_x, n_components)\n\n    print(\"Transformed Dataset (First 5 rows):\")\n    print(transformed_data[:5])\n\n    print(\"\\nExplained Variance Ratio:\")\n    print(variance_ratio)\n\n\nif __name__ == \"__main__\":\n    doctest.testmod()\n    main()\n"
  },
  {
    "path": "machine_learning/random_forest_classifier.py.broken.txt",
    "content": "# Random Forest Classifier Example\nfrom matplotlib import pyplot as plt\nfrom sklearn.datasets import load_iris\nfrom sklearn.ensemble import RandomForestClassifier\nfrom sklearn.metrics import plot_confusion_matrix\nfrom sklearn.model_selection import train_test_split\n\n\ndef main():\n\n    \"\"\"\n    Random Forest Classifier Example using sklearn function.\n    Iris type dataset is used to demonstrate algorithm.\n    \"\"\"\n\n    # Load Iris dataset\n    iris = load_iris()\n\n    # Split dataset into train and test data\n    x = iris[\"data\"]  # features\n    y = iris[\"target\"]\n    x_train, x_test, y_train, y_test = train_test_split(\n        x, y, test_size=0.3, random_state=1\n    )\n\n    # Random Forest Classifier\n    rand_for = RandomForestClassifier(random_state=42, n_estimators=100)\n    rand_for.fit(x_train, y_train)\n\n    # Display Confusion Matrix of Classifier\n    plot_confusion_matrix(\n        rand_for,\n        x_test,\n        y_test,\n        display_labels=iris[\"target_names\"],\n        cmap=\"Blues\",\n        normalize=\"true\",\n    )\n    plt.title(\"Normalized Confusion Matrix - IRIS Dataset\")\n    plt.show()\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "machine_learning/random_forest_regressor.py.broken.txt",
    "content": "# Random Forest Regressor Example\nfrom sklearn.datasets import load_boston\nfrom sklearn.ensemble import RandomForestRegressor\nfrom sklearn.metrics import mean_absolute_error, mean_squared_error\nfrom sklearn.model_selection import train_test_split\n\n\ndef main():\n\n    \"\"\"\n    Random Forest Regressor Example using sklearn function.\n    Boston house price dataset is used to demonstrate the algorithm.\n    \"\"\"\n\n    # Load Boston house price dataset\n    boston = load_boston()\n    print(boston.keys())\n\n    # Split dataset into train and test data\n    x = boston[\"data\"]  # features\n    y = boston[\"target\"]\n    x_train, x_test, y_train, y_test = train_test_split(\n        x, y, test_size=0.3, random_state=1\n    )\n\n    # Random Forest Regressor\n    rand_for = RandomForestRegressor(random_state=42, n_estimators=300)\n    rand_for.fit(x_train, y_train)\n\n    # Predict target for test data\n    predictions = rand_for.predict(x_test)\n    predictions = predictions.reshape(len(predictions), 1)\n\n    # Error printing\n    print(f\"Mean Absolute Error:\\t {mean_absolute_error(y_test, predictions)}\")\n    print(f\"Mean Square Error  :\\t {mean_squared_error(y_test, predictions)}\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "machine_learning/scoring_functions.py",
    "content": "import numpy as np\n\n\"\"\" Here I implemented the scoring functions.\n    MAE, MSE, RMSE, RMSLE are included.\n\n    Those are used for calculating differences between\n    predicted values and actual values.\n\n    Metrics are slightly differentiated. Sometimes squared, rooted,\n    even log is used.\n\n    Using log and roots can be perceived as tools for penalizing big\n    errors. However, using appropriate metrics depends on the situations,\n    and types of data\n\"\"\"\n\n\n# Mean Absolute Error\ndef mae(predict, actual):\n    \"\"\"\n    Examples(rounded for precision):\n    >>> actual = [1,2,3];predict = [1,4,3]\n    >>> float(np.around(mae(predict,actual),decimals = 2))\n    0.67\n\n    >>> actual = [1,1,1];predict = [1,1,1]\n    >>> float(mae(predict,actual))\n    0.0\n    \"\"\"\n    predict = np.array(predict)\n    actual = np.array(actual)\n\n    difference = abs(predict - actual)\n    score = difference.mean()\n\n    return score\n\n\n# Mean Squared Error\ndef mse(predict, actual):\n    \"\"\"\n    Examples(rounded for precision):\n    >>> actual = [1,2,3];predict = [1,4,3]\n    >>> float(np.around(mse(predict,actual),decimals = 2))\n    1.33\n\n    >>> actual = [1,1,1];predict = [1,1,1]\n    >>> float(mse(predict,actual))\n    0.0\n    \"\"\"\n    predict = np.array(predict)\n    actual = np.array(actual)\n\n    difference = predict - actual\n    square_diff = np.square(difference)\n\n    score = square_diff.mean()\n    return score\n\n\n# Root Mean Squared Error\ndef rmse(predict, actual):\n    \"\"\"\n    Examples(rounded for precision):\n    >>> actual = [1,2,3];predict = [1,4,3]\n    >>> float(np.around(rmse(predict,actual),decimals = 2))\n    1.15\n\n    >>> actual = [1,1,1];predict = [1,1,1]\n    >>> float(rmse(predict,actual))\n    0.0\n    \"\"\"\n    predict = np.array(predict)\n    actual = np.array(actual)\n\n    difference = predict - actual\n    square_diff = np.square(difference)\n    mean_square_diff = square_diff.mean()\n    score = np.sqrt(mean_square_diff)\n    return score\n\n\n# Root Mean Square Logarithmic Error\ndef rmsle(predict, actual):\n    \"\"\"\n    Examples(rounded for precision):\n    >>> float(np.around(rmsle(predict=[10, 2, 30], actual=[10, 10, 30]), decimals=2))\n    0.75\n\n    >>> float(rmsle(predict=[1, 1, 1], actual=[1, 1, 1]))\n    0.0\n    \"\"\"\n    predict = np.array(predict)\n    actual = np.array(actual)\n\n    log_predict = np.log(predict + 1)\n    log_actual = np.log(actual + 1)\n\n    difference = log_predict - log_actual\n    square_diff = np.square(difference)\n    mean_square_diff = square_diff.mean()\n\n    score = np.sqrt(mean_square_diff)\n\n    return score\n\n\n# Mean Bias Deviation\ndef mbd(predict, actual):\n    \"\"\"\n    This value is Negative, if the model underpredicts,\n    positive, if it overpredicts.\n\n    Example(rounded for precision):\n\n    Here the model overpredicts\n    >>> actual = [1,2,3];predict = [2,3,4]\n    >>> float(np.around(mbd(predict,actual),decimals = 2))\n    50.0\n\n    Here the model underpredicts\n    >>> actual = [1,2,3];predict = [0,1,1]\n    >>> float(np.around(mbd(predict,actual),decimals = 2))\n    -66.67\n    \"\"\"\n    predict = np.array(predict)\n    actual = np.array(actual)\n\n    difference = predict - actual\n    numerator = np.sum(difference) / len(predict)\n    denumerator = np.sum(actual) / len(predict)\n    # print(numerator, denumerator)\n    score = float(numerator) / denumerator * 100\n\n    return score\n\n\ndef manual_accuracy(predict, actual):\n    return np.mean(np.array(actual) == np.array(predict))\n"
  },
  {
    "path": "machine_learning/self_organizing_map.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/Self-organizing_map\n\"\"\"\n\nimport math\n\n\nclass SelfOrganizingMap:\n    def get_winner(self, weights: list[list[float]], sample: list[int]) -> int:\n        \"\"\"\n        Compute the winning vector by Euclidean distance\n\n        >>> SelfOrganizingMap().get_winner([[1, 2, 3], [4, 5, 6]], [1, 2, 3])\n        1\n        \"\"\"\n        d0 = 0.0\n        d1 = 0.0\n        for i in range(len(sample)):\n            d0 += math.pow((sample[i] - weights[0][i]), 2)\n            d1 += math.pow((sample[i] - weights[1][i]), 2)\n            return 0 if d0 > d1 else 1\n        return 0\n\n    def update(\n        self, weights: list[list[int | float]], sample: list[int], j: int, alpha: float\n    ) -> list[list[int | float]]:\n        \"\"\"\n        Update the winning vector.\n\n        >>> SelfOrganizingMap().update([[1, 2, 3], [4, 5, 6]], [1, 2, 3], 1, 0.1)\n        [[1, 2, 3], [3.7, 4.7, 6]]\n        \"\"\"\n        for i in range(len(weights)):\n            weights[j][i] += alpha * (sample[i] - weights[j][i])\n        return weights\n\n\n# Driver code\ndef main() -> None:\n    # Training Examples ( m, n )\n    training_samples = [[1, 1, 0, 0], [0, 0, 0, 1], [1, 0, 0, 0], [0, 0, 1, 1]]\n\n    # weight initialization ( n, C )\n    weights = [[0.2, 0.6, 0.5, 0.9], [0.8, 0.4, 0.7, 0.3]]\n\n    # training\n    self_organizing_map = SelfOrganizingMap()\n    epochs = 3\n    alpha = 0.5\n\n    for _ in range(epochs):\n        for j in range(len(training_samples)):\n            # training sample\n            sample = training_samples[j]\n\n            # Compute the winning vector\n            winner = self_organizing_map.get_winner(weights, sample)\n\n            # Update the winning vector\n            weights = self_organizing_map.update(weights, sample, winner, alpha)\n\n    # classify test sample\n    sample = [0, 0, 0, 1]\n    winner = self_organizing_map.get_winner(weights, sample)\n\n    # results\n    print(f\"Clusters that the test sample belongs to : {winner}\")\n    print(f\"Weights that have been trained : {weights}\")\n\n\n# running the main() function\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "machine_learning/sequential_minimum_optimization.py",
    "content": "\"\"\"\nSequential minimal optimization (SMO) for support vector machines (SVM)\n\nSequential minimal optimization (SMO) is an algorithm for solving the quadratic\nprogramming (QP) problem that arises during the training of SVMs. It was invented by\nJohn Platt in 1998.\n\nInput:\n    0: type: numpy.ndarray.\n    1: first column of ndarray must be tags of samples, must be 1 or -1.\n    2: rows of ndarray represent samples.\n\nUsage:\n    Command:\n        python3 sequential_minimum_optimization.py\n    Code:\n        from sequential_minimum_optimization import SmoSVM, Kernel\n\n        kernel = Kernel(kernel='poly', degree=3., coef0=1., gamma=0.5)\n        init_alphas = np.zeros(train.shape[0])\n        SVM = SmoSVM(train=train, alpha_list=init_alphas, kernel_func=kernel, cost=0.4,\n                     b=0.0, tolerance=0.001)\n        SVM.fit()\n        predict = SVM.predict(test_samples)\n\nReference:\n    https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/smo-book.pdf\n    https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr-98-14.pdf\n\"\"\"\n\nimport os\nimport sys\nimport urllib.request\n\nimport numpy as np\nimport pandas as pd\nfrom matplotlib import pyplot as plt\nfrom sklearn.datasets import make_blobs, make_circles\nfrom sklearn.preprocessing import StandardScaler\n\nCANCER_DATASET_URL = (\n    \"https://archive.ics.uci.edu/ml/machine-learning-databases/\"\n    \"breast-cancer-wisconsin/wdbc.data\"\n)\n\n\nclass SmoSVM:\n    def __init__(\n        self,\n        train,\n        kernel_func,\n        alpha_list=None,\n        cost=0.4,\n        b=0.0,\n        tolerance=0.001,\n        auto_norm=True,\n    ):\n        self._init = True\n        self._auto_norm = auto_norm\n        self._c = np.float64(cost)\n        self._b = np.float64(b)\n        self._tol = np.float64(tolerance) if tolerance > 0.0001 else np.float64(0.001)\n\n        self.tags = train[:, 0]\n        self.samples = self._norm(train[:, 1:]) if self._auto_norm else train[:, 1:]\n        self.alphas = alpha_list if alpha_list is not None else np.zeros(train.shape[0])\n        self.Kernel = kernel_func\n\n        self._eps = 0.001\n        self._all_samples = list(range(self.length))\n        self._K_matrix = self._calculate_k_matrix()\n        self._error = np.zeros(self.length)\n        self._unbound = []\n\n        self.choose_alpha = self._choose_alphas()\n\n    # Calculate alphas using SMO algorithm\n    def fit(self):\n        k = self._k\n        state = None\n        while True:\n            # 1: Find alpha1, alpha2\n            try:\n                i1, i2 = self.choose_alpha.send(state)\n                state = None\n            except StopIteration:\n                print(\"Optimization done!\\nEvery sample satisfy the KKT condition!\")\n                break\n\n            # 2: calculate new alpha2 and new alpha1\n            y1, y2 = self.tags[i1], self.tags[i2]\n            a1, a2 = self.alphas[i1].copy(), self.alphas[i2].copy()\n            e1, e2 = self._e(i1), self._e(i2)\n            args = (i1, i2, a1, a2, e1, e2, y1, y2)\n            a1_new, a2_new = self._get_new_alpha(*args)\n            if not a1_new and not a2_new:\n                state = False\n                continue\n            self.alphas[i1], self.alphas[i2] = a1_new, a2_new\n\n            # 3: update threshold(b)\n            b1_new = np.float64(\n                -e1\n                - y1 * k(i1, i1) * (a1_new - a1)\n                - y2 * k(i2, i1) * (a2_new - a2)\n                + self._b\n            )\n            b2_new = np.float64(\n                -e2\n                - y2 * k(i2, i2) * (a2_new - a2)\n                - y1 * k(i1, i2) * (a1_new - a1)\n                + self._b\n            )\n            if 0.0 < a1_new < self._c:\n                b = b1_new\n            if 0.0 < a2_new < self._c:\n                b = b2_new\n            if not (np.float64(0) < a2_new < self._c) and not (\n                np.float64(0) < a1_new < self._c\n            ):\n                b = (b1_new + b2_new) / 2.0\n            b_old = self._b\n            self._b = b\n\n            # 4: update error, here we only calculate the error for non-bound samples\n            self._unbound = [i for i in self._all_samples if self._is_unbound(i)]\n            for s in self.unbound:\n                if s in (i1, i2):\n                    continue\n                self._error[s] += (\n                    y1 * (a1_new - a1) * k(i1, s)\n                    + y2 * (a2_new - a2) * k(i2, s)\n                    + (self._b - b_old)\n                )\n\n            # if i1 or i2 is non-bound, update their error value to zero\n            if self._is_unbound(i1):\n                self._error[i1] = 0\n            if self._is_unbound(i2):\n                self._error[i2] = 0\n\n    # Predict test samples\n    def predict(self, test_samples, classify=True):\n        if test_samples.shape[1] > self.samples.shape[1]:\n            raise ValueError(\n                \"Test samples' feature length does not equal to that of train samples\"\n            )\n\n        if self._auto_norm:\n            test_samples = self._norm(test_samples)\n\n        results = []\n        for test_sample in test_samples:\n            result = self._predict(test_sample)\n            if classify:\n                results.append(1 if result > 0 else -1)\n            else:\n                results.append(result)\n        return np.array(results)\n\n    # Check if alpha violates the KKT condition\n    def _check_obey_kkt(self, index):\n        alphas = self.alphas\n        tol = self._tol\n        r = self._e(index) * self.tags[index]\n        c = self._c\n\n        return (r < -tol and alphas[index] < c) or (r > tol and alphas[index] > 0.0)\n\n    # Get value calculated from kernel function\n    def _k(self, i1, i2):\n        # for test samples, use kernel function\n        if isinstance(i2, np.ndarray):\n            return self.Kernel(self.samples[i1], i2)\n        # for training samples, kernel values have been saved in matrix\n        else:\n            return self._K_matrix[i1, i2]\n\n    # Get error for sample\n    def _e(self, index):\n        \"\"\"\n        Two cases:\n            1: Sample[index] is non-bound, fetch error from list: _error\n            2: sample[index] is bound, use predicted value minus true value: g(xi) - yi\n        \"\"\"\n        # get from error data\n        if self._is_unbound(index):\n            return self._error[index]\n        # get by g(xi) - yi\n        else:\n            gx = np.dot(self.alphas * self.tags, self._K_matrix[:, index]) + self._b\n            yi = self.tags[index]\n            return gx - yi\n\n    # Calculate kernel matrix of all possible i1, i2, saving time\n    def _calculate_k_matrix(self):\n        k_matrix = np.zeros([self.length, self.length])\n        for i in self._all_samples:\n            for j in self._all_samples:\n                k_matrix[i, j] = np.float64(\n                    self.Kernel(self.samples[i, :], self.samples[j, :])\n                )\n        return k_matrix\n\n    # Predict tag for test sample\n    def _predict(self, sample):\n        k = self._k\n        predicted_value = (\n            np.sum(\n                [\n                    self.alphas[i1] * self.tags[i1] * k(i1, sample)\n                    for i1 in self._all_samples\n                ]\n            )\n            + self._b\n        )\n        return predicted_value\n\n    # Choose alpha1 and alpha2\n    def _choose_alphas(self):\n        loci = yield from self._choose_a1()\n        if not loci:\n            return None\n        return loci\n\n    def _choose_a1(self):\n        \"\"\"\n        Choose first alpha\n        Steps:\n            1: First loop over all samples\n            2: Second loop over all non-bound samples until no non-bound samples violate\n               the KKT condition.\n            3: Repeat these two processes until no samples violate the KKT condition\n               after the first loop.\n        \"\"\"\n        while True:\n            all_not_obey = True\n            # all sample\n            print(\"Scanning all samples!\")\n            for i1 in [i for i in self._all_samples if self._check_obey_kkt(i)]:\n                all_not_obey = False\n                yield from self._choose_a2(i1)\n\n            # non-bound sample\n            print(\"Scanning non-bound samples!\")\n            while True:\n                not_obey = True\n                for i1 in [\n                    i\n                    for i in self._all_samples\n                    if self._check_obey_kkt(i) and self._is_unbound(i)\n                ]:\n                    not_obey = False\n                    yield from self._choose_a2(i1)\n                if not_obey:\n                    print(\"All non-bound samples satisfy the KKT condition!\")\n                    break\n            if all_not_obey:\n                print(\"All samples satisfy the KKT condition!\")\n                break\n        return False\n\n    def _choose_a2(self, i1):\n        \"\"\"\n        Choose the second alpha using a heuristic algorithm\n        Steps:\n            1: Choose alpha2 that maximizes the step size (|E1 - E2|).\n            2: Start in a random point, loop over all non-bound samples till alpha1 and\n               alpha2 are optimized.\n            3: Start in a random point, loop over all samples till alpha1 and alpha2 are\n               optimized.\n        \"\"\"\n        self._unbound = [i for i in self._all_samples if self._is_unbound(i)]\n\n        if len(self.unbound) > 0:\n            tmp_error = self._error.copy().tolist()\n            tmp_error_dict = {\n                index: value\n                for index, value in enumerate(tmp_error)\n                if self._is_unbound(index)\n            }\n            if self._e(i1) >= 0:\n                i2 = min(tmp_error_dict, key=lambda index: tmp_error_dict[index])\n            else:\n                i2 = max(tmp_error_dict, key=lambda index: tmp_error_dict[index])\n            cmd = yield i1, i2\n            if cmd is None:\n                return\n\n        rng = np.random.default_rng()\n        for i2 in np.roll(self.unbound, rng.choice(self.length)):\n            cmd = yield i1, i2\n            if cmd is None:\n                return\n\n        for i2 in np.roll(self._all_samples, rng.choice(self.length)):\n            cmd = yield i1, i2\n            if cmd is None:\n                return\n\n    # Get the new alpha2 and new alpha1\n    def _get_new_alpha(self, i1, i2, a1, a2, e1, e2, y1, y2):\n        k = self._k\n        if i1 == i2:\n            return None, None\n\n        # calculate L and H which bound the new alpha2\n        s = y1 * y2\n        if s == -1:\n            l, h = max(0.0, a2 - a1), min(self._c, self._c + a2 - a1)  # noqa: E741\n        else:\n            l, h = max(0.0, a2 + a1 - self._c), min(self._c, a2 + a1)  # noqa: E741\n        if l == h:\n            return None, None\n\n        # calculate eta\n        k11 = k(i1, i1)\n        k22 = k(i2, i2)\n        k12 = k(i1, i2)\n\n        # select the new alpha2 which could achieve the minimal objectives\n        if (eta := k11 + k22 - 2.0 * k12) > 0.0:\n            a2_new_unc = a2 + (y2 * (e1 - e2)) / eta\n            # a2_new has a boundary\n            if a2_new_unc >= h:\n                a2_new = h\n            elif a2_new_unc <= l:\n                a2_new = l\n            else:\n                a2_new = a2_new_unc\n        else:\n            b = self._b\n            l1 = a1 + s * (a2 - l)\n            h1 = a1 + s * (a2 - h)\n\n            # Method 1\n            f1 = y1 * (e1 + b) - a1 * k(i1, i1) - s * a2 * k(i1, i2)\n            f2 = y2 * (e2 + b) - a2 * k(i2, i2) - s * a1 * k(i1, i2)\n            ol = (\n                l1 * f1\n                + l * f2\n                + 1 / 2 * l1**2 * k(i1, i1)\n                + 1 / 2 * l**2 * k(i2, i2)\n                + s * l * l1 * k(i1, i2)\n            )\n            oh = (\n                h1 * f1\n                + h * f2\n                + 1 / 2 * h1**2 * k(i1, i1)\n                + 1 / 2 * h**2 * k(i2, i2)\n                + s * h * h1 * k(i1, i2)\n            )\n            \"\"\"\n            Method 2: Use objective function to check which alpha2_new could achieve the\n            minimal objectives\n            \"\"\"\n            if ol < (oh - self._eps):\n                a2_new = l\n            elif ol > oh + self._eps:\n                a2_new = h\n            else:\n                a2_new = a2\n\n        # a1_new has a boundary too\n        a1_new = a1 + s * (a2 - a2_new)\n        if a1_new < 0:\n            a2_new += s * a1_new\n            a1_new = 0\n        if a1_new > self._c:\n            a2_new += s * (a1_new - self._c)\n            a1_new = self._c\n\n        return a1_new, a2_new\n\n    # Normalize data using min-max method\n    def _norm(self, data):\n        if self._init:\n            self._min = np.min(data, axis=0)\n            self._max = np.max(data, axis=0)\n            self._init = False\n            return (data - self._min) / (self._max - self._min)\n        else:\n            return (data - self._min) / (self._max - self._min)\n\n    def _is_unbound(self, index):\n        return bool(0.0 < self.alphas[index] < self._c)\n\n    def _is_support(self, index):\n        return bool(self.alphas[index] > 0)\n\n    @property\n    def unbound(self):\n        return self._unbound\n\n    @property\n    def support(self):\n        return [i for i in range(self.length) if self._is_support(i)]\n\n    @property\n    def length(self):\n        return self.samples.shape[0]\n\n\nclass Kernel:\n    def __init__(self, kernel, degree=1.0, coef0=0.0, gamma=1.0):\n        self.degree = np.float64(degree)\n        self.coef0 = np.float64(coef0)\n        self.gamma = np.float64(gamma)\n        self._kernel_name = kernel\n        self._kernel = self._get_kernel(kernel_name=kernel)\n        self._check()\n\n    def _polynomial(self, v1, v2):\n        return (self.gamma * np.inner(v1, v2) + self.coef0) ** self.degree\n\n    def _linear(self, v1, v2):\n        return np.inner(v1, v2) + self.coef0\n\n    def _rbf(self, v1, v2):\n        return np.exp(-1 * (self.gamma * np.linalg.norm(v1 - v2) ** 2))\n\n    def _check(self):\n        if self._kernel == self._rbf and self.gamma < 0:\n            raise ValueError(\"gamma value must be non-negative\")\n\n    def _get_kernel(self, kernel_name):\n        maps = {\"linear\": self._linear, \"poly\": self._polynomial, \"rbf\": self._rbf}\n        return maps[kernel_name]\n\n    def __call__(self, v1, v2):\n        return self._kernel(v1, v2)\n\n    def __repr__(self):\n        return self._kernel_name\n\n\ndef count_time(func):\n    def call_func(*args, **kwargs):\n        import time\n\n        start_time = time.time()\n        func(*args, **kwargs)\n        end_time = time.time()\n        print(f\"SMO algorithm cost {end_time - start_time} seconds\")\n\n    return call_func\n\n\n@count_time\ndef test_cancer_data():\n    print(\"Hello!\\nStart test SVM using the SMO algorithm!\")\n    # 0: download dataset and load into pandas' dataframe\n    if not os.path.exists(r\"cancer_data.csv\"):\n        request = urllib.request.Request(  # noqa: S310\n            CANCER_DATASET_URL,\n            headers={\"User-Agent\": \"Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)\"},\n        )\n        response = urllib.request.urlopen(request)  # noqa: S310\n        content = response.read().decode(\"utf-8\")\n        with open(r\"cancer_data.csv\", \"w\") as f:\n            f.write(content)\n\n    data = pd.read_csv(\n        \"cancer_data.csv\",\n        header=None,\n        dtype={0: str},  # Assuming the first column contains string data\n    )\n\n    # 1: pre-processing data\n    del data[data.columns.tolist()[0]]\n    data = data.dropna(axis=0)\n    data = data.replace({\"M\": np.float64(1), \"B\": np.float64(-1)})\n    samples = np.array(data)[:, :]\n\n    # 2: dividing data into train_data data and test_data data\n    train_data, test_data = samples[:328, :], samples[328:, :]\n    test_tags, test_samples = test_data[:, 0], test_data[:, 1:]\n\n    # 3: choose kernel function, and set initial alphas to zero (optional)\n    my_kernel = Kernel(kernel=\"rbf\", degree=5, coef0=1, gamma=0.5)\n    al = np.zeros(train_data.shape[0])\n\n    # 4: calculating best alphas using SMO algorithm and predict test_data samples\n    mysvm = SmoSVM(\n        train=train_data,\n        kernel_func=my_kernel,\n        alpha_list=al,\n        cost=0.4,\n        b=0.0,\n        tolerance=0.001,\n    )\n    mysvm.fit()\n    predict = mysvm.predict(test_samples)\n\n    # 5: check accuracy\n    score = 0\n    test_num = test_tags.shape[0]\n    for i in range(test_tags.shape[0]):\n        if test_tags[i] == predict[i]:\n            score += 1\n    print(f\"\\nAll: {test_num}\\nCorrect: {score}\\nIncorrect: {test_num - score}\")\n    print(f\"Rough Accuracy: {score / test_tags.shape[0]}\")\n\n\ndef test_demonstration():\n    # change stdout\n    print(\"\\nStarting plot, please wait!\")\n    sys.stdout = open(os.devnull, \"w\")\n\n    ax1 = plt.subplot2grid((2, 2), (0, 0))\n    ax2 = plt.subplot2grid((2, 2), (0, 1))\n    ax3 = plt.subplot2grid((2, 2), (1, 0))\n    ax4 = plt.subplot2grid((2, 2), (1, 1))\n    ax1.set_title(\"Linear SVM, cost = 0.1\")\n    test_linear_kernel(ax1, cost=0.1)\n    ax2.set_title(\"Linear SVM, cost = 500\")\n    test_linear_kernel(ax2, cost=500)\n    ax3.set_title(\"RBF kernel SVM, cost = 0.1\")\n    test_rbf_kernel(ax3, cost=0.1)\n    ax4.set_title(\"RBF kernel SVM, cost = 500\")\n    test_rbf_kernel(ax4, cost=500)\n\n    sys.stdout = sys.__stdout__\n    print(\"Plot done!\")\n\n\ndef test_linear_kernel(ax, cost):\n    train_x, train_y = make_blobs(\n        n_samples=500, centers=2, n_features=2, random_state=1\n    )\n    train_y[train_y == 0] = -1\n    scaler = StandardScaler()\n    train_x_scaled = scaler.fit_transform(train_x, train_y)\n    train_data = np.hstack((train_y.reshape(500, 1), train_x_scaled))\n    my_kernel = Kernel(kernel=\"linear\", degree=5, coef0=1, gamma=0.5)\n    mysvm = SmoSVM(\n        train=train_data,\n        kernel_func=my_kernel,\n        cost=cost,\n        tolerance=0.001,\n        auto_norm=False,\n    )\n    mysvm.fit()\n    plot_partition_boundary(mysvm, train_data, ax=ax)\n\n\ndef test_rbf_kernel(ax, cost):\n    train_x, train_y = make_circles(\n        n_samples=500, noise=0.1, factor=0.1, random_state=1\n    )\n    train_y[train_y == 0] = -1\n    scaler = StandardScaler()\n    train_x_scaled = scaler.fit_transform(train_x, train_y)\n    train_data = np.hstack((train_y.reshape(500, 1), train_x_scaled))\n    my_kernel = Kernel(kernel=\"rbf\", degree=5, coef0=1, gamma=0.5)\n    mysvm = SmoSVM(\n        train=train_data,\n        kernel_func=my_kernel,\n        cost=cost,\n        tolerance=0.001,\n        auto_norm=False,\n    )\n    mysvm.fit()\n    plot_partition_boundary(mysvm, train_data, ax=ax)\n\n\ndef plot_partition_boundary(\n    model, train_data, ax, resolution=100, colors=(\"b\", \"k\", \"r\")\n):\n    \"\"\"\n    We cannot get the optimal w of our kernel SVM model, which is different from a\n    linear SVM.  For this reason, we generate randomly distributed points with high\n    density, and predicted values of these points are calculated using our trained\n    model. Then we could use this predicted values to draw contour map, and this contour\n    map represents the SVM's partition boundary.\n    \"\"\"\n    train_data_x = train_data[:, 1]\n    train_data_y = train_data[:, 2]\n    train_data_tags = train_data[:, 0]\n    xrange = np.linspace(train_data_x.min(), train_data_x.max(), resolution)\n    yrange = np.linspace(train_data_y.min(), train_data_y.max(), resolution)\n    test_samples = np.array([(x, y) for x in xrange for y in yrange]).reshape(\n        resolution * resolution, 2\n    )\n\n    test_tags = model.predict(test_samples, classify=False)\n    grid = test_tags.reshape((len(xrange), len(yrange)))\n\n    # Plot contour map which represents the partition boundary\n    ax.contour(\n        xrange,\n        yrange,\n        np.asmatrix(grid).T,\n        levels=(-1, 0, 1),\n        linestyles=(\"--\", \"-\", \"--\"),\n        linewidths=(1, 1, 1),\n        colors=colors,\n    )\n    # Plot all train samples\n    ax.scatter(\n        train_data_x,\n        train_data_y,\n        c=train_data_tags,\n        cmap=plt.cm.Dark2,\n        lw=0,\n        alpha=0.5,\n    )\n\n    # Plot support vectors\n    support = model.support\n    ax.scatter(\n        train_data_x[support],\n        train_data_y[support],\n        c=train_data_tags[support],\n        cmap=plt.cm.Dark2,\n    )\n\n\nif __name__ == \"__main__\":\n    test_cancer_data()\n    test_demonstration()\n    plt.show()\n"
  },
  {
    "path": "machine_learning/similarity_search.py",
    "content": "\"\"\"\nSimilarity Search : https://en.wikipedia.org/wiki/Similarity_search\nSimilarity search is a search algorithm for finding the nearest vector from\nvectors, used in natural language processing.\nIn this algorithm, it calculates distance with euclidean distance and\nreturns a list containing two data for each vector:\n    1. the nearest vector\n    2. distance between the vector and the nearest vector (float)\n\"\"\"\n\nfrom __future__ import annotations\n\nimport math\n\nimport numpy as np\nfrom numpy.linalg import norm\n\n\ndef euclidean(input_a: np.ndarray, input_b: np.ndarray) -> float:\n    \"\"\"\n    Calculates euclidean distance between two data.\n    :param input_a: ndarray of first vector.\n    :param input_b: ndarray of second vector.\n    :return: Euclidean distance of input_a and input_b. By using math.sqrt(),\n             result will be float.\n\n    >>> euclidean(np.array([0]), np.array([1]))\n    1.0\n    >>> euclidean(np.array([0, 1]), np.array([1, 1]))\n    1.0\n    >>> euclidean(np.array([0, 0, 0]), np.array([0, 0, 1]))\n    1.0\n    \"\"\"\n    return math.sqrt(sum(pow(a - b, 2) for a, b in zip(input_a, input_b)))\n\n\ndef similarity_search(\n    dataset: np.ndarray, value_array: np.ndarray\n) -> list[list[list[float] | float]]:\n    \"\"\"\n    :param dataset: Set containing the vectors. Should be ndarray.\n    :param value_array: vector/vectors we want to know the nearest vector from dataset.\n    :return: Result will be a list containing\n            1. the nearest vector\n            2. distance from the vector\n\n    >>> dataset = np.array([[0], [1], [2]])\n    >>> value_array = np.array([[0]])\n    >>> similarity_search(dataset, value_array)\n    [[[0], 0.0]]\n\n    >>> dataset = np.array([[0, 0], [1, 1], [2, 2]])\n    >>> value_array = np.array([[0, 1]])\n    >>> similarity_search(dataset, value_array)\n    [[[0, 0], 1.0]]\n\n    >>> dataset = np.array([[0, 0, 0], [1, 1, 1], [2, 2, 2]])\n    >>> value_array = np.array([[0, 0, 1]])\n    >>> similarity_search(dataset, value_array)\n    [[[0, 0, 0], 1.0]]\n\n    >>> dataset = np.array([[0, 0, 0], [1, 1, 1], [2, 2, 2]])\n    >>> value_array = np.array([[0, 0, 0], [0, 0, 1]])\n    >>> similarity_search(dataset, value_array)\n    [[[0, 0, 0], 0.0], [[0, 0, 0], 1.0]]\n\n    These are the errors that might occur:\n\n    1. If dimensions are different.\n    For example, dataset has 2d array and value_array has 1d array:\n    >>> dataset = np.array([[1]])\n    >>> value_array = np.array([1])\n    >>> similarity_search(dataset, value_array)\n    Traceback (most recent call last):\n        ...\n    ValueError: Wrong input data's dimensions... dataset : 2, value_array : 1\n\n    2. If data's shapes are different.\n    For example, dataset has shape of (3, 2) and value_array has (2, 3).\n    We are expecting same shapes of two arrays, so it is wrong.\n    >>> dataset = np.array([[0, 0], [1, 1], [2, 2]])\n    >>> value_array = np.array([[0, 0, 0], [0, 0, 1]])\n    >>> similarity_search(dataset, value_array)\n    Traceback (most recent call last):\n        ...\n    ValueError: Wrong input data's shape... dataset : 2, value_array : 3\n\n    3. If data types are different.\n    When trying to compare, we are expecting same types so they should be same.\n    If not, it'll come up with errors.\n    >>> dataset = np.array([[0, 0], [1, 1], [2, 2]], dtype=np.float32)\n    >>> value_array = np.array([[0, 0], [0, 1]], dtype=np.int32)\n    >>> similarity_search(dataset, value_array)  # doctest: +NORMALIZE_WHITESPACE\n    Traceback (most recent call last):\n        ...\n    TypeError: Input data have different datatype...\n    dataset : float32, value_array : int32\n    \"\"\"\n\n    if dataset.ndim != value_array.ndim:\n        msg = (\n            \"Wrong input data's dimensions... \"\n            f\"dataset : {dataset.ndim}, value_array : {value_array.ndim}\"\n        )\n        raise ValueError(msg)\n\n    try:\n        if dataset.shape[1] != value_array.shape[1]:\n            msg = (\n                \"Wrong input data's shape... \"\n                f\"dataset : {dataset.shape[1]}, value_array : {value_array.shape[1]}\"\n            )\n            raise ValueError(msg)\n    except IndexError:\n        if dataset.ndim != value_array.ndim:\n            raise TypeError(\"Wrong shape\")\n\n    if dataset.dtype != value_array.dtype:\n        msg = (\n            \"Input data have different datatype... \"\n            f\"dataset : {dataset.dtype}, value_array : {value_array.dtype}\"\n        )\n        raise TypeError(msg)\n\n    answer = []\n\n    for value in value_array:\n        dist = euclidean(value, dataset[0])\n        vector = dataset[0].tolist()\n\n        for dataset_value in dataset[1:]:\n            temp_dist = euclidean(value, dataset_value)\n\n            if dist > temp_dist:\n                dist = temp_dist\n                vector = dataset_value.tolist()\n\n        answer.append([vector, dist])\n\n    return answer\n\n\ndef cosine_similarity(input_a: np.ndarray, input_b: np.ndarray) -> float:\n    \"\"\"\n    Calculates cosine similarity between two data.\n    :param input_a: ndarray of first vector.\n    :param input_b: ndarray of second vector.\n    :return: Cosine similarity of input_a and input_b. By using math.sqrt(),\n             result will be float.\n\n    >>> cosine_similarity(np.array([1]), np.array([1]))\n    1.0\n    >>> cosine_similarity(np.array([1, 2]), np.array([6, 32]))\n    0.9615239476408232\n    \"\"\"\n    return float(np.dot(input_a, input_b) / (norm(input_a) * norm(input_b)))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "machine_learning/support_vector_machines.py",
    "content": "import numpy as np\nfrom numpy import ndarray\nfrom scipy.optimize import Bounds, LinearConstraint, minimize\n\n\ndef norm_squared(vector: ndarray) -> float:\n    \"\"\"\n    Return the squared second norm of vector\n    norm_squared(v) = sum(x * x for x in v)\n\n    Args:\n        vector (ndarray): input vector\n\n    Returns:\n        float: squared second norm of vector\n\n    >>> int(norm_squared([1, 2]))\n    5\n    >>> int(norm_squared(np.asarray([1, 2])))\n    5\n    >>> int(norm_squared([0, 0]))\n    0\n    \"\"\"\n    return np.dot(vector, vector)\n\n\nclass SVC:\n    \"\"\"\n    Support Vector Classifier\n\n    Args:\n        kernel (str): kernel to use. Default: linear\n            Possible choices:\n                - linear\n        regularization: constraint for soft margin (data not linearly separable)\n            Default: unbound\n\n    >>> SVC(kernel=\"asdf\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Unknown kernel: asdf\n\n    >>> SVC(kernel=\"rbf\")\n    Traceback (most recent call last):\n        ...\n    ValueError: rbf kernel requires gamma\n\n    >>> SVC(kernel=\"rbf\", gamma=-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: gamma must be > 0\n    \"\"\"\n\n    def __init__(\n        self,\n        *,\n        regularization: float = np.inf,\n        kernel: str = \"linear\",\n        gamma: float = 0.0,\n    ) -> None:\n        self.regularization = regularization\n        self.gamma = gamma\n        if kernel == \"linear\":\n            self.kernel = self.__linear\n        elif kernel == \"rbf\":\n            if self.gamma == 0:\n                raise ValueError(\"rbf kernel requires gamma\")\n            if not isinstance(self.gamma, (float, int)):\n                raise ValueError(\"gamma must be float or int\")\n            if not self.gamma > 0:\n                raise ValueError(\"gamma must be > 0\")\n            self.kernel = self.__rbf\n            # in the future, there could be a default value like in sklearn\n            # sklear: def_gamma = 1/(n_features * X.var()) (wiki)\n            # previously it was 1/(n_features)\n        else:\n            msg = f\"Unknown kernel: {kernel}\"\n            raise ValueError(msg)\n\n    # kernels\n    def __linear(self, vector1: ndarray, vector2: ndarray) -> float:\n        \"\"\"Linear kernel (as if no kernel used at all)\"\"\"\n        return np.dot(vector1, vector2)\n\n    def __rbf(self, vector1: ndarray, vector2: ndarray) -> float:\n        \"\"\"\n        RBF: Radial Basis Function Kernel\n\n        Note: for more information see:\n            https://en.wikipedia.org/wiki/Radial_basis_function_kernel\n\n        Args:\n            vector1 (ndarray): first vector\n            vector2 (ndarray): second vector)\n\n        Returns:\n            float: exp(-(gamma * norm_squared(vector1 - vector2)))\n        \"\"\"\n        return np.exp(-(self.gamma * norm_squared(vector1 - vector2)))\n\n    def fit(self, observations: list[ndarray], classes: ndarray) -> None:\n        \"\"\"\n        Fits the SVC with a set of observations.\n\n        Args:\n            observations (list[ndarray]): list of observations\n            classes (ndarray): classification of each observation (in {1, -1})\n        \"\"\"\n\n        self.observations = observations\n        self.classes = classes\n\n        # using Wolfe's Dual to calculate w.\n        # Primal problem: minimize 1/2*norm_squared(w)\n        #   constraint: yn(w . xn + b) >= 1\n        #\n        # With l a vector\n        # Dual problem: maximize sum_n(ln) -\n        #       1/2 * sum_n(sum_m(ln*lm*yn*ym*xn . xm))\n        #   constraint: self.C >= ln >= 0\n        #           and sum_n(ln*yn) = 0\n        # Then we get w using w = sum_n(ln*yn*xn)\n        # At the end we can get b ~= mean(yn - w . xn)\n        #\n        # Since we use kernels, we only need l_star to calculate b\n        # and to classify observations\n\n        (n,) = np.shape(classes)\n\n        def to_minimize(candidate: ndarray) -> float:\n            \"\"\"\n            Opposite of the function to maximize\n\n            Args:\n                candidate (ndarray): candidate array to test\n\n            Return:\n                float: Wolfe's Dual result to minimize\n            \"\"\"\n            s = 0\n            (n,) = np.shape(candidate)\n            for i in range(n):\n                for j in range(n):\n                    s += (\n                        candidate[i]\n                        * candidate[j]\n                        * classes[i]\n                        * classes[j]\n                        * self.kernel(observations[i], observations[j])\n                    )\n            return 1 / 2 * s - sum(candidate)\n\n        ly_contraint = LinearConstraint(classes, 0, 0)\n        l_bounds = Bounds(0, self.regularization)\n\n        l_star = minimize(\n            to_minimize, np.ones(n), bounds=l_bounds, constraints=[ly_contraint]\n        ).x\n        self.optimum = l_star\n\n        # calculating mean offset of separation plane to points\n        s = 0\n        for i in range(n):\n            for j in range(n):\n                s += classes[i] - classes[i] * self.optimum[i] * self.kernel(\n                    observations[i], observations[j]\n                )\n        self.offset = s / n\n\n    def predict(self, observation: ndarray) -> int:\n        \"\"\"\n        Get the expected class of an observation\n\n        Args:\n            observation (Vector): observation\n\n        Returns:\n            int {1, -1}: expected class\n\n        >>> xs = [\n        ...     np.asarray([0, 1]), np.asarray([0, 2]),\n        ...     np.asarray([1, 1]), np.asarray([1, 2])\n        ... ]\n        >>> y = np.asarray([1, 1, -1, -1])\n        >>> s = SVC()\n        >>> s.fit(xs, y)\n        >>> s.predict(np.asarray([0, 1]))\n        1\n        >>> s.predict(np.asarray([1, 1]))\n        -1\n        >>> s.predict(np.asarray([2, 2]))\n        -1\n        \"\"\"\n        s = sum(\n            self.optimum[n]\n            * self.classes[n]\n            * self.kernel(self.observations[n], observation)\n            for n in range(len(self.classes))\n        )\n        return 1 if s + self.offset >= 0 else -1\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "machine_learning/t_stochastic_neighbour_embedding.py",
    "content": "\"\"\"\nt-distributed stochastic neighbor embedding (t-SNE)\n\nFor more details, see:\nhttps://en.wikipedia.org/wiki/T-distributed_stochastic_neighbor_embedding\n\"\"\"\n\nimport doctest\n\nimport numpy as np\nfrom numpy import ndarray\nfrom sklearn.datasets import load_iris\n\n\ndef collect_dataset() -> tuple[ndarray, ndarray]:\n    \"\"\"\n    Load the Iris dataset and return features and labels.\n\n    Returns:\n        tuple[ndarray, ndarray]: Feature matrix and target labels.\n\n    >>> features, targets = collect_dataset()\n    >>> features.shape\n    (150, 4)\n    >>> targets.shape\n    (150,)\n    \"\"\"\n    iris_dataset = load_iris()\n    return np.array(iris_dataset.data), np.array(iris_dataset.target)\n\n\ndef compute_pairwise_affinities(data_matrix: ndarray, sigma: float = 1.0) -> ndarray:\n    \"\"\"\n    Compute high-dimensional affinities (P matrix) using a Gaussian kernel.\n\n    Args:\n        data_matrix: Input data of shape (n_samples, n_features).\n        sigma: Gaussian kernel bandwidth.\n\n    Returns:\n        ndarray: Symmetrized probability matrix.\n\n    >>> x = np.array([[0.0, 0.0], [1.0, 0.0]])\n    >>> probabilities = compute_pairwise_affinities(x)\n    >>> float(round(probabilities[0, 1], 3))\n    0.25\n    \"\"\"\n    n_samples = data_matrix.shape[0]\n    squared_sum = np.sum(np.square(data_matrix), axis=1)\n    squared_distance = np.add(\n        np.add(-2 * np.dot(data_matrix, data_matrix.T), squared_sum).T, squared_sum\n    )\n\n    affinity_matrix = np.exp(-squared_distance / (2 * sigma**2))\n    np.fill_diagonal(affinity_matrix, 0)\n\n    affinity_matrix /= np.sum(affinity_matrix)\n    return (affinity_matrix + affinity_matrix.T) / (2 * n_samples)\n\n\ndef compute_low_dim_affinities(embedding_matrix: ndarray) -> tuple[ndarray, ndarray]:\n    \"\"\"\n    Compute low-dimensional affinities (Q matrix) using a Student-t distribution.\n\n    Args:\n        embedding_matrix: Low-dimensional embedding of shape (n_samples, n_components).\n\n    Returns:\n        tuple[ndarray, ndarray]: (Q probability matrix, numerator matrix).\n\n    >>> y = np.array([[0.0, 0.0], [1.0, 0.0]])\n    >>> q_matrix, numerators = compute_low_dim_affinities(y)\n    >>> q_matrix.shape\n    (2, 2)\n    \"\"\"\n    squared_sum = np.sum(np.square(embedding_matrix), axis=1)\n    numerator_matrix = 1 / (\n        1\n        + np.add(\n            np.add(-2 * np.dot(embedding_matrix, embedding_matrix.T), squared_sum).T,\n            squared_sum,\n        )\n    )\n    np.fill_diagonal(numerator_matrix, 0)\n\n    q_matrix = numerator_matrix / np.sum(numerator_matrix)\n    return q_matrix, numerator_matrix\n\n\ndef apply_tsne(\n    data_matrix: ndarray,\n    n_components: int = 2,\n    learning_rate: float = 200.0,\n    n_iter: int = 500,\n) -> ndarray:\n    \"\"\"\n    Apply t-SNE for dimensionality reduction.\n\n    Args:\n        data_matrix: Original dataset (features).\n        n_components: Target dimension (2D or 3D).\n        learning_rate: Step size for gradient descent.\n        n_iter: Number of iterations.\n\n    Returns:\n        ndarray: Low-dimensional embedding of the data.\n\n    >>> features, _ = collect_dataset()\n    >>> embedding = apply_tsne(features, n_components=2, n_iter=50)\n    >>> embedding.shape\n    (150, 2)\n    \"\"\"\n    if n_components < 1 or n_iter < 1:\n        raise ValueError(\"n_components and n_iter must be >= 1\")\n\n    n_samples = data_matrix.shape[0]\n    rng = np.random.default_rng()\n    embedding = rng.standard_normal((n_samples, n_components)) * 1e-4\n\n    high_dim_affinities = compute_pairwise_affinities(data_matrix)\n    high_dim_affinities = np.maximum(high_dim_affinities, 1e-12)\n\n    embedding_increment = np.zeros_like(embedding)\n    momentum = 0.5\n\n    for iteration in range(n_iter):\n        low_dim_affinities, numerator_matrix = compute_low_dim_affinities(embedding)\n        low_dim_affinities = np.maximum(low_dim_affinities, 1e-12)\n\n        affinity_diff = high_dim_affinities - low_dim_affinities\n\n        gradient = 4 * (\n            np.dot((affinity_diff * numerator_matrix), embedding)\n            - np.multiply(\n                np.sum(affinity_diff * numerator_matrix, axis=1)[:, np.newaxis],\n                embedding,\n            )\n        )\n\n        embedding_increment = momentum * embedding_increment - learning_rate * gradient\n        embedding += embedding_increment\n\n        if iteration == int(n_iter / 4):\n            momentum = 0.8\n\n    return embedding\n\n\ndef main() -> None:\n    \"\"\"\n    Run t-SNE on the Iris dataset and display the first 5 embeddings.\n\n    >>> main()  # doctest: +ELLIPSIS\n    t-SNE embedding (first 5 points):\n    [[...\n    \"\"\"\n    features, _labels = collect_dataset()\n    embedding = apply_tsne(features, n_components=2, n_iter=300)\n\n    if not isinstance(embedding, np.ndarray):\n        raise TypeError(\"t-SNE embedding must be an ndarray\")\n\n    print(\"t-SNE embedding (first 5 points):\")\n    print(embedding[:5])\n\n    # Optional visualization (Ruff/mypy compliant)\n\n    # import matplotlib.pyplot as plt\n    # plt.scatter(embedding[:, 0], embedding[:, 1], c=labels, cmap=\"viridis\")\n    # plt.title(\"t-SNE Visualization of the Iris Dataset\")\n    # plt.xlabel(\"Dimension 1\")\n    # plt.ylabel(\"Dimension 2\")\n    # plt.show()\n\n\nif __name__ == \"__main__\":\n    doctest.testmod()\n    main()\n"
  },
  {
    "path": "machine_learning/word_frequency_functions.py",
    "content": "import string\nfrom math import log10\n\n\"\"\"\n    tf-idf Wikipedia: https://en.wikipedia.org/wiki/Tf%E2%80%93idf\n    tf-idf and other word frequency algorithms are often used\n    as a weighting factor in information retrieval and text\n    mining. 83% of text-based recommender systems use\n    tf-idf for term weighting. In Layman's terms, tf-idf\n    is a statistic intended to reflect how important a word\n    is to a document in a corpus (a collection of documents)\n\n\n    Here I've implemented several word frequency algorithms\n    that are commonly used in information retrieval: Term Frequency,\n    Document Frequency, and TF-IDF (Term-Frequency*Inverse-Document-Frequency)\n    are included.\n\n    Term Frequency is a statistical function that\n    returns a number representing how frequently\n    an expression occurs in a document. This\n    indicates how significant a particular term is in\n    a given document.\n\n    Document Frequency is a statistical function that returns\n    an integer representing the number of documents in a\n    corpus that a term occurs in (where the max number returned\n    would be the number of documents in the corpus).\n\n    Inverse Document Frequency is mathematically written as\n    log10(N/df), where N is the number of documents in your\n    corpus and df is the Document Frequency. If df is 0, a\n    ZeroDivisionError will be thrown.\n\n    Term-Frequency*Inverse-Document-Frequency is a measure\n    of the originality of a term. It is mathematically written\n    as tf*log10(N/df). It compares the number of times\n    a term appears in a document with the number of documents\n    the term appears in. If df is 0, a ZeroDivisionError will be thrown.\n\"\"\"\n\n\ndef term_frequency(term: str, document: str) -> int:\n    \"\"\"\n    Return the number of times a term occurs within\n    a given document.\n    @params: term, the term to search a document for, and document,\n            the document to search within\n    @returns: an integer representing the number of times a term is\n            found within the document\n\n    @examples:\n    >>> term_frequency(\"to\", \"To be, or not to be\")\n    2\n    \"\"\"\n    # strip all punctuation and newlines and replace it with ''\n    document_without_punctuation = document.translate(\n        str.maketrans(\"\", \"\", string.punctuation)\n    ).replace(\"\\n\", \"\")\n    tokenize_document = document_without_punctuation.split(\" \")  # word tokenization\n    return len([word for word in tokenize_document if word.lower() == term.lower()])\n\n\ndef document_frequency(term: str, corpus: str) -> tuple[int, int]:\n    \"\"\"\n    Calculate the number of documents in a corpus that contain a\n    given term\n    @params : term, the term to search each document for, and corpus, a collection of\n             documents. Each document should be separated by a newline.\n    @returns : the number of documents in the corpus that contain the term you are\n               searching for and the number of documents in the corpus\n    @examples :\n    >>> document_frequency(\"first\", \"This is the first document in the corpus.\\\\nThIs\\\nis the second document in the corpus.\\\\nTHIS is \\\nthe third document in the corpus.\")\n    (1, 3)\n    \"\"\"\n    corpus_without_punctuation = corpus.lower().translate(\n        str.maketrans(\"\", \"\", string.punctuation)\n    )  # strip all punctuation and replace it with ''\n    docs = corpus_without_punctuation.split(\"\\n\")\n    term = term.lower()\n    return (len([doc for doc in docs if term in doc]), len(docs))\n\n\ndef inverse_document_frequency(df: int, n: int, smoothing=False) -> float:\n    \"\"\"\n    Return an integer denoting the importance\n    of a word. This measure of importance is\n    calculated by log10(N/df), where N is the\n    number of documents and df is\n    the Document Frequency.\n    @params : df, the Document Frequency, N,\n    the number of documents in the corpus and\n    smoothing, if True return the idf-smooth\n    @returns : log10(N/df) or 1+log10(N/1+df)\n    @examples :\n    >>> inverse_document_frequency(3, 0)\n    Traceback (most recent call last):\n     ...\n    ValueError: log10(0) is undefined.\n    >>> inverse_document_frequency(1, 3)\n    0.477\n    >>> inverse_document_frequency(0, 3)\n    Traceback (most recent call last):\n     ...\n    ZeroDivisionError: df must be > 0\n    >>> inverse_document_frequency(0, 3,True)\n    1.477\n    \"\"\"\n    if smoothing:\n        if n == 0:\n            raise ValueError(\"log10(0) is undefined.\")\n        return round(1 + log10(n / (1 + df)), 3)\n\n    if df == 0:\n        raise ZeroDivisionError(\"df must be > 0\")\n    elif n == 0:\n        raise ValueError(\"log10(0) is undefined.\")\n    return round(log10(n / df), 3)\n\n\ndef tf_idf(tf: int, idf: int) -> float:\n    \"\"\"\n    Combine the term frequency\n    and inverse document frequency functions to\n    calculate the originality of a term. This\n    'originality' is calculated by multiplying\n    the term frequency and the inverse document\n    frequency : tf-idf = TF * IDF\n    @params : tf, the term frequency, and idf, the inverse document\n    frequency\n    @examples :\n    >>> tf_idf(2, 0.477)\n    0.954\n    \"\"\"\n    return round(tf * idf, 3)\n"
  },
  {
    "path": "machine_learning/xgboost_classifier.py",
    "content": "# XGBoost Classifier Example\nimport numpy as np\nfrom matplotlib import pyplot as plt\nfrom sklearn.datasets import load_iris\nfrom sklearn.metrics import ConfusionMatrixDisplay\nfrom sklearn.model_selection import train_test_split\nfrom xgboost import XGBClassifier\n\n\ndef data_handling(data: dict) -> tuple:\n    # Split dataset into features and target\n    # data is features\n    \"\"\"\n    >>> data_handling(({'data':'[5.1, 3.5, 1.4, 0.2]','target':([0])}))\n    ('[5.1, 3.5, 1.4, 0.2]', [0])\n    >>> data_handling(\n    ...     {'data': '[4.9, 3.0, 1.4, 0.2], [4.7, 3.2, 1.3, 0.2]', 'target': ([0, 0])}\n    ... )\n    ('[4.9, 3.0, 1.4, 0.2], [4.7, 3.2, 1.3, 0.2]', [0, 0])\n    \"\"\"\n    return (data[\"data\"], data[\"target\"])\n\n\ndef xgboost(features: np.ndarray, target: np.ndarray) -> XGBClassifier:\n    \"\"\"\n    # THIS TEST IS BROKEN!! >>> xgboost(np.array([[5.1, 3.6, 1.4, 0.2]]), np.array([0]))\n    XGBClassifier(base_score=0.5, booster='gbtree', callbacks=None,\n                  colsample_bylevel=1, colsample_bynode=1, colsample_bytree=1,\n                  early_stopping_rounds=None, enable_categorical=False,\n                  eval_metric=None, gamma=0, gpu_id=-1, grow_policy='depthwise',\n                  importance_type=None, interaction_constraints='',\n                  learning_rate=0.300000012, max_bin=256, max_cat_to_onehot=4,\n                  max_delta_step=0, max_depth=6, max_leaves=0, min_child_weight=1,\n                  missing=nan, monotone_constraints='()', n_estimators=100,\n                  n_jobs=0, num_parallel_tree=1, predictor='auto', random_state=0,\n                  reg_alpha=0, reg_lambda=1, ...)\n    \"\"\"\n    classifier = XGBClassifier()\n    classifier.fit(features, target)\n    return classifier\n\n\ndef main() -> None:\n    \"\"\"\n    Url for the algorithm:\n    https://xgboost.readthedocs.io/en/stable/\n    Iris type dataset is used to demonstrate algorithm.\n    \"\"\"\n\n    # Load Iris dataset\n    iris = load_iris()\n    features, targets = data_handling(iris)\n    x_train, x_test, y_train, y_test = train_test_split(\n        features, targets, test_size=0.25\n    )\n\n    names = iris[\"target_names\"]\n\n    # Create an XGBoost Classifier from the training data\n    xgboost_classifier = xgboost(x_train, y_train)\n\n    # Display the confusion matrix of the classifier with both training and test sets\n    ConfusionMatrixDisplay.from_estimator(\n        xgboost_classifier,\n        x_test,\n        y_test,\n        display_labels=names,\n        cmap=\"Blues\",\n        normalize=\"true\",\n    )\n    plt.title(\"Normalized Confusion Matrix - IRIS Dataset\")\n    plt.show()\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod(verbose=True)\n    main()\n"
  },
  {
    "path": "machine_learning/xgboost_regressor.py",
    "content": "# XGBoost Regressor Example\nimport numpy as np\nfrom sklearn.datasets import fetch_california_housing\nfrom sklearn.metrics import mean_absolute_error, mean_squared_error\nfrom sklearn.model_selection import train_test_split\nfrom xgboost import XGBRegressor\n\n\ndef data_handling(data: dict) -> tuple:\n    # Split dataset into features and target.  Data is features.\n    \"\"\"\n    >>> data_handling((\n    ...  {'data':'[ 8.3252 41. 6.9841269 1.02380952  322. 2.55555556   37.88 -122.23 ]'\n    ...  ,'target':([4.526])}))\n    ('[ 8.3252 41. 6.9841269 1.02380952  322. 2.55555556   37.88 -122.23 ]', [4.526])\n    \"\"\"\n    return (data[\"data\"], data[\"target\"])\n\n\ndef xgboost(\n    features: np.ndarray, target: np.ndarray, test_features: np.ndarray\n) -> np.ndarray:\n    \"\"\"\n    >>> xgboost(np.array([[ 2.3571 ,   52. , 6.00813008, 1.06775068,\n    ...    907. , 2.45799458,   40.58 , -124.26]]),np.array([1.114]),\n    ... np.array([[1.97840000e+00,  3.70000000e+01,  4.98858447e+00,  1.03881279e+00,\n    ...    1.14300000e+03,  2.60958904e+00,  3.67800000e+01, -1.19780000e+02]]))\n    array([[1.1139996]], dtype=float32)\n    \"\"\"\n    xgb = XGBRegressor(\n        verbosity=0, random_state=42, tree_method=\"exact\", base_score=0.5\n    )\n    xgb.fit(features, target)\n    # Predict target for test data\n    predictions = xgb.predict(test_features)\n    predictions = predictions.reshape(len(predictions), 1)\n    return predictions\n\n\ndef main() -> None:\n    \"\"\"\n    The URL for this algorithm\n    https://xgboost.readthedocs.io/en/stable/\n    California house price dataset is used to demonstrate the algorithm.\n\n    Expected error values:\n    Mean Absolute Error: 0.30957163379906033\n    Mean Square Error: 0.22611560196662744\n    \"\"\"\n    # Load California house price dataset\n    california = fetch_california_housing()\n    data, target = data_handling(california)\n    x_train, x_test, y_train, y_test = train_test_split(\n        data, target, test_size=0.25, random_state=1\n    )\n    predictions = xgboost(x_train, y_train, x_test)\n    # Error printing\n    print(f\"Mean Absolute Error: {mean_absolute_error(y_test, predictions)}\")\n    print(f\"Mean Square Error: {mean_squared_error(y_test, predictions)}\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod(verbose=True)\n    main()\n"
  },
  {
    "path": "maths/__init__.py",
    "content": ""
  },
  {
    "path": "maths/abs.py",
    "content": "\"\"\"Absolute Value.\"\"\"\n\n\ndef abs_val(num: float) -> float:\n    \"\"\"\n    Find the absolute value of a number.\n\n    >>> abs_val(-5.1)\n    5.1\n    >>> abs_val(-5) == abs_val(5)\n    True\n    >>> abs_val(0)\n    0\n    \"\"\"\n    return -num if num < 0 else num\n\n\ndef abs_min(x: list[int]) -> int:\n    \"\"\"\n    >>> abs_min([0,5,1,11])\n    0\n    >>> abs_min([3,-10,-2])\n    -2\n    >>> abs_min([])\n    Traceback (most recent call last):\n        ...\n    ValueError: abs_min() arg is an empty sequence\n    \"\"\"\n    if len(x) == 0:\n        raise ValueError(\"abs_min() arg is an empty sequence\")\n    j = x[0]\n    for i in x:\n        if abs_val(i) < abs_val(j):\n            j = i\n    return j\n\n\ndef abs_max(x: list[int]) -> int:\n    \"\"\"\n    >>> abs_max([0,5,1,11])\n    11\n    >>> abs_max([3,-10,-2])\n    -10\n    >>> abs_max([])\n    Traceback (most recent call last):\n        ...\n    ValueError: abs_max() arg is an empty sequence\n    \"\"\"\n    if len(x) == 0:\n        raise ValueError(\"abs_max() arg is an empty sequence\")\n    j = x[0]\n    for i in x:\n        if abs(i) > abs(j):\n            j = i\n    return j\n\n\ndef abs_max_sort(x: list[int]) -> int:\n    \"\"\"\n    >>> abs_max_sort([0,5,1,11])\n    11\n    >>> abs_max_sort([3,-10,-2])\n    -10\n    >>> abs_max_sort([])\n    Traceback (most recent call last):\n        ...\n    ValueError: abs_max_sort() arg is an empty sequence\n    \"\"\"\n    if len(x) == 0:\n        raise ValueError(\"abs_max_sort() arg is an empty sequence\")\n    return sorted(x, key=abs)[-1]\n\n\ndef test_abs_val():\n    \"\"\"\n    >>> test_abs_val()\n    \"\"\"\n    assert abs_val(0) == 0\n    assert abs_val(34) == 34\n    assert abs_val(-100000000000) == 100000000000\n\n    a = [-3, -1, 2, -11]\n    assert abs_max(a) == -11\n    assert abs_max_sort(a) == -11\n    assert abs_min(a) == -1\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    test_abs_val()\n    print(abs_val(-34))  # --> 34\n"
  },
  {
    "path": "maths/addition_without_arithmetic.py",
    "content": "\"\"\"\nIllustrate how to add the integer without arithmetic operation\nAuthor: suraj Kumar\nTime Complexity: 1\nhttps://en.wikipedia.org/wiki/Bitwise_operation\n\"\"\"\n\n\ndef add(first: int, second: int) -> int:\n    \"\"\"\n    Implementation of addition of integer\n\n    Examples:\n    >>> add(3, 5)\n    8\n    >>> add(13, 5)\n    18\n    >>> add(-7, 2)\n    -5\n    >>> add(0, -7)\n    -7\n    >>> add(-321, 0)\n    -321\n    \"\"\"\n    while second != 0:\n        c = first & second\n        first ^= second\n        second = c << 1\n    return first\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    first = int(input(\"Enter the first number: \").strip())\n    second = int(input(\"Enter the second number: \").strip())\n    print(f\"{add(first, second) = }\")\n"
  },
  {
    "path": "maths/aliquot_sum.py",
    "content": "def aliquot_sum(input_num: int) -> int:\n    \"\"\"\n    Finds the aliquot sum of an input integer, where the\n    aliquot sum of a number n is defined as the sum of all\n    natural numbers less than n that divide n evenly. For\n    example, the aliquot sum of 15 is 1 + 3 + 5 = 9. This is\n    a simple O(n) implementation.\n    @param input_num: a positive integer whose aliquot sum is to be found\n    @return: the aliquot sum of input_num, if input_num is positive.\n    Otherwise, raise a ValueError\n    Wikipedia Explanation: https://en.wikipedia.org/wiki/Aliquot_sum\n\n    >>> aliquot_sum(15)\n    9\n    >>> aliquot_sum(6)\n    6\n    >>> aliquot_sum(-1)\n    Traceback (most recent call last):\n      ...\n    ValueError: Input must be positive\n    >>> aliquot_sum(0)\n    Traceback (most recent call last):\n      ...\n    ValueError: Input must be positive\n    >>> aliquot_sum(1.6)\n    Traceback (most recent call last):\n      ...\n    ValueError: Input must be an integer\n    >>> aliquot_sum(12)\n    16\n    >>> aliquot_sum(1)\n    0\n    >>> aliquot_sum(19)\n    1\n    \"\"\"\n    if not isinstance(input_num, int):\n        raise ValueError(\"Input must be an integer\")\n    if input_num <= 0:\n        raise ValueError(\"Input must be positive\")\n    return sum(\n        divisor for divisor in range(1, input_num // 2 + 1) if input_num % divisor == 0\n    )\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/allocation_number.py",
    "content": "\"\"\"\nIn a multi-threaded download, this algorithm could be used to provide\neach worker thread with a block of non-overlapping bytes to download.\nFor example:\n    for i in allocation_list:\n        requests.get(url,headers={'Range':f'bytes={i}'})\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef allocation_num(number_of_bytes: int, partitions: int) -> list[str]:\n    \"\"\"\n    Divide a number of bytes into x partitions.\n    :param number_of_bytes: the total of bytes.\n    :param partitions: the number of partition need to be allocated.\n    :return: list of bytes to be assigned to each worker thread\n\n    >>> allocation_num(16647, 4)\n    ['1-4161', '4162-8322', '8323-12483', '12484-16647']\n    >>> allocation_num(50000, 5)\n    ['1-10000', '10001-20000', '20001-30000', '30001-40000', '40001-50000']\n    >>> allocation_num(888, 999)\n    Traceback (most recent call last):\n        ...\n    ValueError: partitions can not > number_of_bytes!\n    >>> allocation_num(888, -4)\n    Traceback (most recent call last):\n        ...\n    ValueError: partitions must be a positive number!\n    \"\"\"\n    if partitions <= 0:\n        raise ValueError(\"partitions must be a positive number!\")\n    if partitions > number_of_bytes:\n        raise ValueError(\"partitions can not > number_of_bytes!\")\n    bytes_per_partition = number_of_bytes // partitions\n    allocation_list = []\n    for i in range(partitions):\n        start_bytes = i * bytes_per_partition + 1\n        end_bytes = (\n            number_of_bytes if i == partitions - 1 else (i + 1) * bytes_per_partition\n        )\n        allocation_list.append(f\"{start_bytes}-{end_bytes}\")\n    return allocation_list\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/arc_length.py",
    "content": "from math import pi\n\n\ndef arc_length(angle: int, radius: int) -> float:\n    \"\"\"\n    >>> arc_length(45, 5)\n    3.9269908169872414\n    >>> arc_length(120, 15)\n    31.415926535897928\n    >>> arc_length(90, 10)\n    15.707963267948966\n    \"\"\"\n    return 2 * pi * radius * (angle / 360)\n\n\nif __name__ == \"__main__\":\n    print(arc_length(90, 10))\n"
  },
  {
    "path": "maths/area.py",
    "content": "\"\"\"\r\nFind the area of various geometric shapes\r\nWikipedia reference: https://en.wikipedia.org/wiki/Area\r\n\"\"\"\r\n\r\nfrom math import pi, sqrt, tan\r\n\r\n\r\ndef surface_area_cube(side_length: float) -> float:\r\n    \"\"\"\r\n    Calculate the Surface Area of a Cube.\r\n\r\n    >>> surface_area_cube(1)\r\n    6\r\n    >>> surface_area_cube(1.6)\r\n    15.360000000000003\r\n    >>> surface_area_cube(0)\r\n    0\r\n    >>> surface_area_cube(3)\r\n    54\r\n    >>> surface_area_cube(-1)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: surface_area_cube() only accepts non-negative values\r\n    \"\"\"\r\n    if side_length < 0:\r\n        raise ValueError(\"surface_area_cube() only accepts non-negative values\")\r\n    return 6 * side_length**2\r\n\r\n\r\ndef surface_area_cuboid(length: float, breadth: float, height: float) -> float:\r\n    \"\"\"\r\n    Calculate the Surface Area of a Cuboid.\r\n\r\n    >>> surface_area_cuboid(1, 2, 3)\r\n    22\r\n    >>> surface_area_cuboid(0, 0, 0)\r\n    0\r\n    >>> surface_area_cuboid(1.6, 2.6, 3.6)\r\n    38.56\r\n    >>> surface_area_cuboid(-1, 2, 3)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: surface_area_cuboid() only accepts non-negative values\r\n    >>> surface_area_cuboid(1, -2, 3)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: surface_area_cuboid() only accepts non-negative values\r\n    >>> surface_area_cuboid(1, 2, -3)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: surface_area_cuboid() only accepts non-negative values\r\n    \"\"\"\r\n    if length < 0 or breadth < 0 or height < 0:\r\n        raise ValueError(\"surface_area_cuboid() only accepts non-negative values\")\r\n    return 2 * ((length * breadth) + (breadth * height) + (length * height))\r\n\r\n\r\ndef surface_area_sphere(radius: float) -> float:\r\n    \"\"\"\r\n    Calculate the Surface Area of a Sphere.\r\n    Wikipedia reference: https://en.wikipedia.org/wiki/Sphere\r\n    Formula: 4 * pi * r^2\r\n\r\n    >>> surface_area_sphere(5)\r\n    314.1592653589793\r\n    >>> surface_area_sphere(1)\r\n    12.566370614359172\r\n    >>> surface_area_sphere(1.6)\r\n    32.169908772759484\r\n    >>> surface_area_sphere(0)\r\n    0.0\r\n    >>> surface_area_sphere(-1)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: surface_area_sphere() only accepts non-negative values\r\n    \"\"\"\r\n    if radius < 0:\r\n        raise ValueError(\"surface_area_sphere() only accepts non-negative values\")\r\n    return 4 * pi * radius**2\r\n\r\n\r\ndef surface_area_hemisphere(radius: float) -> float:\r\n    \"\"\"\r\n    Calculate the Surface Area of a Hemisphere.\r\n    Formula: 3 * pi * r^2\r\n\r\n    >>> surface_area_hemisphere(5)\r\n    235.61944901923448\r\n    >>> surface_area_hemisphere(1)\r\n    9.42477796076938\r\n    >>> surface_area_hemisphere(0)\r\n    0.0\r\n    >>> surface_area_hemisphere(1.1)\r\n    11.40398133253095\r\n    >>> surface_area_hemisphere(-1)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: surface_area_hemisphere() only accepts non-negative values\r\n    \"\"\"\r\n    if radius < 0:\r\n        raise ValueError(\"surface_area_hemisphere() only accepts non-negative values\")\r\n    return 3 * pi * radius**2\r\n\r\n\r\ndef surface_area_cone(radius: float, height: float) -> float:\r\n    \"\"\"\r\n    Calculate the Surface Area of a Cone.\r\n    Wikipedia reference: https://en.wikipedia.org/wiki/Cone\r\n    Formula: pi * r * (r + (h ** 2 + r ** 2) ** 0.5)\r\n\r\n    >>> surface_area_cone(10, 24)\r\n    1130.9733552923256\r\n    >>> surface_area_cone(6, 8)\r\n    301.59289474462014\r\n    >>> surface_area_cone(1.6, 2.6)\r\n    23.387862992395807\r\n    >>> surface_area_cone(0, 0)\r\n    0.0\r\n    >>> surface_area_cone(-1, -2)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: surface_area_cone() only accepts non-negative values\r\n    >>> surface_area_cone(1, -2)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: surface_area_cone() only accepts non-negative values\r\n    >>> surface_area_cone(-1, 2)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: surface_area_cone() only accepts non-negative values\r\n    \"\"\"\r\n    if radius < 0 or height < 0:\r\n        raise ValueError(\"surface_area_cone() only accepts non-negative values\")\r\n    return pi * radius * (radius + (height**2 + radius**2) ** 0.5)\r\n\r\n\r\ndef surface_area_conical_frustum(\r\n    radius_1: float, radius_2: float, height: float\r\n) -> float:\r\n    \"\"\"\r\n    Calculate the Surface Area of a Conical Frustum.\r\n\r\n    >>> surface_area_conical_frustum(1, 2, 3)\r\n    45.511728065337266\r\n    >>> surface_area_conical_frustum(4, 5, 6)\r\n    300.7913575056268\r\n    >>> surface_area_conical_frustum(0, 0, 0)\r\n    0.0\r\n    >>> surface_area_conical_frustum(1.6, 2.6, 3.6)\r\n    78.57907060751548\r\n    >>> surface_area_conical_frustum(-1, 2, 3)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: surface_area_conical_frustum() only accepts non-negative values\r\n    >>> surface_area_conical_frustum(1, -2, 3)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: surface_area_conical_frustum() only accepts non-negative values\r\n    >>> surface_area_conical_frustum(1, 2, -3)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: surface_area_conical_frustum() only accepts non-negative values\r\n    \"\"\"\r\n    if radius_1 < 0 or radius_2 < 0 or height < 0:\r\n        raise ValueError(\r\n            \"surface_area_conical_frustum() only accepts non-negative values\"\r\n        )\r\n    slant_height = (height**2 + (radius_1 - radius_2) ** 2) ** 0.5\r\n    return pi * ((slant_height * (radius_1 + radius_2)) + radius_1**2 + radius_2**2)\r\n\r\n\r\ndef surface_area_cylinder(radius: float, height: float) -> float:\r\n    \"\"\"\r\n    Calculate the Surface Area of a Cylinder.\r\n    Wikipedia reference: https://en.wikipedia.org/wiki/Cylinder\r\n    Formula: 2 * pi * r * (h + r)\r\n\r\n    >>> surface_area_cylinder(7, 10)\r\n    747.6990515543707\r\n    >>> surface_area_cylinder(1.6, 2.6)\r\n    42.22300526424682\r\n    >>> surface_area_cylinder(0, 0)\r\n    0.0\r\n    >>> surface_area_cylinder(6, 8)\r\n    527.7875658030853\r\n    >>> surface_area_cylinder(-1, -2)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: surface_area_cylinder() only accepts non-negative values\r\n    >>> surface_area_cylinder(1, -2)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: surface_area_cylinder() only accepts non-negative values\r\n    >>> surface_area_cylinder(-1, 2)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: surface_area_cylinder() only accepts non-negative values\r\n    \"\"\"\r\n    if radius < 0 or height < 0:\r\n        raise ValueError(\"surface_area_cylinder() only accepts non-negative values\")\r\n    return 2 * pi * radius * (height + radius)\r\n\r\n\r\ndef surface_area_torus(torus_radius: float, tube_radius: float) -> float:\r\n    \"\"\"Calculate the Area of a Torus.\r\n    Wikipedia reference: https://en.wikipedia.org/wiki/Torus\r\n    :return 4pi^2 * torus_radius * tube_radius\r\n    >>> surface_area_torus(1, 1)\r\n    39.47841760435743\r\n    >>> surface_area_torus(4, 3)\r\n    473.7410112522892\r\n    >>> surface_area_torus(3, 4)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: surface_area_torus() does not support spindle or self intersecting tori\r\n    >>> surface_area_torus(1.6, 1.6)\r\n    101.06474906715503\r\n    >>> surface_area_torus(0, 0)\r\n    0.0\r\n    >>> surface_area_torus(-1, 1)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: surface_area_torus() only accepts non-negative values\r\n    >>> surface_area_torus(1, -1)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: surface_area_torus() only accepts non-negative values\r\n    \"\"\"\r\n    if torus_radius < 0 or tube_radius < 0:\r\n        raise ValueError(\"surface_area_torus() only accepts non-negative values\")\r\n    if torus_radius < tube_radius:\r\n        raise ValueError(\r\n            \"surface_area_torus() does not support spindle or self intersecting tori\"\r\n        )\r\n    return 4 * pow(pi, 2) * torus_radius * tube_radius\r\n\r\n\r\ndef area_rectangle(length: float, width: float) -> float:\r\n    \"\"\"\r\n    Calculate the area of a rectangle.\r\n\r\n    >>> area_rectangle(10, 20)\r\n    200\r\n    >>> area_rectangle(1.6, 2.6)\r\n    4.16\r\n    >>> area_rectangle(0, 0)\r\n    0\r\n    >>> area_rectangle(-1, -2)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_rectangle() only accepts non-negative values\r\n    >>> area_rectangle(1, -2)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_rectangle() only accepts non-negative values\r\n    >>> area_rectangle(-1, 2)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_rectangle() only accepts non-negative values\r\n    \"\"\"\r\n    if length < 0 or width < 0:\r\n        raise ValueError(\"area_rectangle() only accepts non-negative values\")\r\n    return length * width\r\n\r\n\r\ndef area_square(side_length: float) -> float:\r\n    \"\"\"\r\n    Calculate the area of a square.\r\n\r\n    >>> area_square(10)\r\n    100\r\n    >>> area_square(0)\r\n    0\r\n    >>> area_square(1.6)\r\n    2.5600000000000005\r\n    >>> area_square(-1)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_square() only accepts non-negative values\r\n    \"\"\"\r\n    if side_length < 0:\r\n        raise ValueError(\"area_square() only accepts non-negative values\")\r\n    return side_length**2\r\n\r\n\r\ndef area_triangle(base: float, height: float) -> float:\r\n    \"\"\"\r\n    Calculate the area of a triangle given the base and height.\r\n\r\n    >>> area_triangle(10, 10)\r\n    50.0\r\n    >>> area_triangle(1.6, 2.6)\r\n    2.08\r\n    >>> area_triangle(0, 0)\r\n    0.0\r\n    >>> area_triangle(-1, -2)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_triangle() only accepts non-negative values\r\n    >>> area_triangle(1, -2)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_triangle() only accepts non-negative values\r\n    >>> area_triangle(-1, 2)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_triangle() only accepts non-negative values\r\n    \"\"\"\r\n    if base < 0 or height < 0:\r\n        raise ValueError(\"area_triangle() only accepts non-negative values\")\r\n    return (base * height) / 2\r\n\r\n\r\ndef area_triangle_three_sides(side1: float, side2: float, side3: float) -> float:\r\n    \"\"\"\r\n    Calculate area of triangle when the length of 3 sides are known.\r\n    This function uses Heron's formula: https://en.wikipedia.org/wiki/Heron%27s_formula\r\n\r\n    >>> area_triangle_three_sides(5, 12, 13)\r\n    30.0\r\n    >>> area_triangle_three_sides(10, 11, 12)\r\n    51.521233486786784\r\n    >>> area_triangle_three_sides(0, 0, 0)\r\n    0.0\r\n    >>> area_triangle_three_sides(1.6, 2.6, 3.6)\r\n    1.8703742940919619\r\n    >>> area_triangle_three_sides(-1, -2, -1)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_triangle_three_sides() only accepts non-negative values\r\n    >>> area_triangle_three_sides(1, -2, 1)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_triangle_three_sides() only accepts non-negative values\r\n    >>> area_triangle_three_sides(2, 4, 7)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Given three sides do not form a triangle\r\n    >>> area_triangle_three_sides(2, 7, 4)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Given three sides do not form a triangle\r\n    >>> area_triangle_three_sides(7, 2, 4)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Given three sides do not form a triangle\r\n    \"\"\"\r\n    if side1 < 0 or side2 < 0 or side3 < 0:\r\n        raise ValueError(\"area_triangle_three_sides() only accepts non-negative values\")\r\n    elif side1 + side2 < side3 or side1 + side3 < side2 or side2 + side3 < side1:\r\n        raise ValueError(\"Given three sides do not form a triangle\")\r\n    semi_perimeter = (side1 + side2 + side3) / 2\r\n    area = sqrt(\r\n        semi_perimeter\r\n        * (semi_perimeter - side1)\r\n        * (semi_perimeter - side2)\r\n        * (semi_perimeter - side3)\r\n    )\r\n    return area\r\n\r\n\r\ndef area_parallelogram(base: float, height: float) -> float:\r\n    \"\"\"\r\n    Calculate the area of a parallelogram.\r\n\r\n    >>> area_parallelogram(10, 20)\r\n    200\r\n    >>> area_parallelogram(1.6, 2.6)\r\n    4.16\r\n    >>> area_parallelogram(0, 0)\r\n    0\r\n    >>> area_parallelogram(-1, -2)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_parallelogram() only accepts non-negative values\r\n    >>> area_parallelogram(1, -2)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_parallelogram() only accepts non-negative values\r\n    >>> area_parallelogram(-1, 2)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_parallelogram() only accepts non-negative values\r\n    \"\"\"\r\n    if base < 0 or height < 0:\r\n        raise ValueError(\"area_parallelogram() only accepts non-negative values\")\r\n    return base * height\r\n\r\n\r\ndef area_trapezium(base1: float, base2: float, height: float) -> float:\r\n    \"\"\"\r\n    Calculate the area of a trapezium.\r\n\r\n    >>> area_trapezium(10, 20, 30)\r\n    450.0\r\n    >>> area_trapezium(1.6, 2.6, 3.6)\r\n    7.5600000000000005\r\n    >>> area_trapezium(0, 0, 0)\r\n    0.0\r\n    >>> area_trapezium(-1, -2, -3)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_trapezium() only accepts non-negative values\r\n    >>> area_trapezium(-1, 2, 3)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_trapezium() only accepts non-negative values\r\n    >>> area_trapezium(1, -2, 3)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_trapezium() only accepts non-negative values\r\n    >>> area_trapezium(1, 2, -3)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_trapezium() only accepts non-negative values\r\n    >>> area_trapezium(-1, -2, 3)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_trapezium() only accepts non-negative values\r\n    >>> area_trapezium(1, -2, -3)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_trapezium() only accepts non-negative values\r\n    >>> area_trapezium(-1, 2, -3)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_trapezium() only accepts non-negative values\r\n    \"\"\"\r\n    if base1 < 0 or base2 < 0 or height < 0:\r\n        raise ValueError(\"area_trapezium() only accepts non-negative values\")\r\n    return 1 / 2 * (base1 + base2) * height\r\n\r\n\r\ndef area_circle(radius: float) -> float:\r\n    \"\"\"\r\n    Calculate the area of a circle.\r\n\r\n    >>> area_circle(20)\r\n    1256.6370614359173\r\n    >>> area_circle(1.6)\r\n    8.042477193189871\r\n    >>> area_circle(0)\r\n    0.0\r\n    >>> area_circle(-1)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_circle() only accepts non-negative values\r\n    \"\"\"\r\n    if radius < 0:\r\n        raise ValueError(\"area_circle() only accepts non-negative values\")\r\n    return pi * radius**2\r\n\r\n\r\ndef area_ellipse(radius_x: float, radius_y: float) -> float:\r\n    \"\"\"\r\n    Calculate the area of a ellipse.\r\n\r\n    >>> area_ellipse(10, 10)\r\n    314.1592653589793\r\n    >>> area_ellipse(10, 20)\r\n    628.3185307179587\r\n    >>> area_ellipse(0, 0)\r\n    0.0\r\n    >>> area_ellipse(1.6, 2.6)\r\n    13.06902543893354\r\n    >>> area_ellipse(-10, 20)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_ellipse() only accepts non-negative values\r\n    >>> area_ellipse(10, -20)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_ellipse() only accepts non-negative values\r\n    >>> area_ellipse(-10, -20)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_ellipse() only accepts non-negative values\r\n    \"\"\"\r\n    if radius_x < 0 or radius_y < 0:\r\n        raise ValueError(\"area_ellipse() only accepts non-negative values\")\r\n    return pi * radius_x * radius_y\r\n\r\n\r\ndef area_rhombus(diagonal_1: float, diagonal_2: float) -> float:\r\n    \"\"\"\r\n    Calculate the area of a rhombus.\r\n\r\n    >>> area_rhombus(10, 20)\r\n    100.0\r\n    >>> area_rhombus(1.6, 2.6)\r\n    2.08\r\n    >>> area_rhombus(0, 0)\r\n    0.0\r\n    >>> area_rhombus(-1, -2)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_rhombus() only accepts non-negative values\r\n    >>> area_rhombus(1, -2)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_rhombus() only accepts non-negative values\r\n    >>> area_rhombus(-1, 2)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_rhombus() only accepts non-negative values\r\n    \"\"\"\r\n    if diagonal_1 < 0 or diagonal_2 < 0:\r\n        raise ValueError(\"area_rhombus() only accepts non-negative values\")\r\n    return 1 / 2 * diagonal_1 * diagonal_2\r\n\r\n\r\ndef area_reg_polygon(sides: int, length: float) -> float:\r\n    \"\"\"\r\n    Calculate the area of a regular polygon.\r\n    Wikipedia reference: https://en.wikipedia.org/wiki/Polygon#Regular_polygons\r\n    Formula: (n*s^2*cot(pi/n))/4\r\n\r\n    >>> area_reg_polygon(3, 10)\r\n    43.301270189221945\r\n    >>> area_reg_polygon(4, 10)\r\n    100.00000000000001\r\n    >>> area_reg_polygon(0, 0)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_reg_polygon() only accepts integers greater than or equal to \\\r\nthree as number of sides\r\n    >>> area_reg_polygon(-1, -2)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_reg_polygon() only accepts integers greater than or equal to \\\r\nthree as number of sides\r\n    >>> area_reg_polygon(5, -2)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_reg_polygon() only accepts non-negative values as \\\r\nlength of a side\r\n    >>> area_reg_polygon(-1, 2)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: area_reg_polygon() only accepts integers greater than or equal to \\\r\nthree as number of sides\r\n    \"\"\"\r\n    if not isinstance(sides, int) or sides < 3:\r\n        raise ValueError(\r\n            \"area_reg_polygon() only accepts integers greater than or \\\r\nequal to three as number of sides\"\r\n        )\r\n    elif length < 0:\r\n        raise ValueError(\r\n            \"area_reg_polygon() only accepts non-negative values as \\\r\nlength of a side\"\r\n        )\r\n    return (sides * length**2) / (4 * tan(pi / sides))\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod(verbose=True)  # verbose so we can see methods missing tests\r\n\r\n    print(\"[DEMO] Areas of various geometric shapes: \\n\")\r\n    print(f\"Rectangle: {area_rectangle(10, 20) = }\")\r\n    print(f\"Square: {area_square(10) = }\")\r\n    print(f\"Triangle: {area_triangle(10, 10) = }\")\r\n    print(f\"Triangle: {area_triangle_three_sides(5, 12, 13) = }\")\r\n    print(f\"Parallelogram: {area_parallelogram(10, 20) = }\")\r\n    print(f\"Rhombus: {area_rhombus(10, 20) = }\")\r\n    print(f\"Trapezium: {area_trapezium(10, 20, 30) = }\")\r\n    print(f\"Circle: {area_circle(20) = }\")\r\n    print(f\"Ellipse: {area_ellipse(10, 20) = }\")\r\n    print(\"\\nSurface Areas of various geometric shapes: \\n\")\r\n    print(f\"Cube: {surface_area_cube(20) = }\")\r\n    print(f\"Cuboid: {surface_area_cuboid(10, 20, 30) = }\")\r\n    print(f\"Sphere: {surface_area_sphere(20) = }\")\r\n    print(f\"Hemisphere: {surface_area_hemisphere(20) = }\")\r\n    print(f\"Cone: {surface_area_cone(10, 20) = }\")\r\n    print(f\"Conical Frustum: {surface_area_conical_frustum(10, 20, 30) = }\")\r\n    print(f\"Cylinder: {surface_area_cylinder(10, 20) = }\")\r\n    print(f\"Torus: {surface_area_torus(20, 10) = }\")\r\n    print(f\"Equilateral Triangle: {area_reg_polygon(3, 10) = }\")\r\n    print(f\"Square: {area_reg_polygon(4, 10) = }\")\r\n    print(f\"Reqular Pentagon: {area_reg_polygon(5, 10) = }\")\r\n"
  },
  {
    "path": "maths/area_under_curve.py",
    "content": "\"\"\"\nApproximates the area under the curve using the trapezoidal rule\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections.abc import Callable\n\n\ndef trapezoidal_area(\n    fnc: Callable[[float], float],\n    x_start: float,\n    x_end: float,\n    steps: int = 100,\n) -> float:\n    \"\"\"\n    Treats curve as a collection of linear lines and sums the area of the\n    trapezium shape they form\n    :param fnc: a function which defines a curve\n    :param x_start: left end point to indicate the start of line segment\n    :param x_end: right end point to indicate end of line segment\n    :param steps: an accuracy gauge; more steps increases the accuracy\n    :return: a float representing the length of the curve\n\n    >>> def f(x):\n    ...    return 5\n    >>> f\"{trapezoidal_area(f, 12.0, 14.0, 1000):.3f}\"\n    '10.000'\n    >>> def f(x):\n    ...    return 9*x**2\n    >>> f\"{trapezoidal_area(f, -4.0, 0, 10000):.4f}\"\n    '192.0000'\n    >>> f\"{trapezoidal_area(f, -4.0, 4.0, 10000):.4f}\"\n    '384.0000'\n    \"\"\"\n    x1 = x_start\n    fx1 = fnc(x_start)\n    area = 0.0\n    for _ in range(steps):\n        # Approximates small segments of curve as linear and solve\n        # for trapezoidal area\n        x2 = (x_end - x_start) / steps + x1\n        fx2 = fnc(x2)\n        area += abs(fx2 + fx1) * (x2 - x1) / 2\n        # Increment step\n        x1 = x2\n        fx1 = fx2\n    return area\n\n\nif __name__ == \"__main__\":\n\n    def f(x):\n        return x**3 + x**2\n\n    print(\"f(x) = x^3 + x^2\")\n    print(\"The area between the curve, x = -5, x = 5 and the x axis is:\")\n    i = 10\n    while i <= 100000:\n        print(f\"with {i} steps: {trapezoidal_area(f, -5, 5, i)}\")\n        i *= 10\n"
  },
  {
    "path": "maths/average_absolute_deviation.py",
    "content": "def average_absolute_deviation(nums: list[int]) -> float:\n    \"\"\"\n    Return the average absolute deviation of a list of numbers.\n    Wiki: https://en.wikipedia.org/wiki/Average_absolute_deviation\n\n    >>> average_absolute_deviation([0])\n    0.0\n    >>> average_absolute_deviation([4, 1, 3, 2])\n    1.0\n    >>> average_absolute_deviation([2, 70, 6, 50, 20, 8, 4, 0])\n    20.0\n    >>> average_absolute_deviation([-20, 0, 30, 15])\n    16.25\n    >>> average_absolute_deviation([])\n    Traceback (most recent call last):\n        ...\n    ValueError: List is empty\n    \"\"\"\n    if not nums:  # Makes sure that the list is not empty\n        raise ValueError(\"List is empty\")\n\n    average = sum(nums) / len(nums)  # Calculate the average\n    return sum(abs(x - average) for x in nums) / len(nums)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/average_mean.py",
    "content": "from __future__ import annotations\n\n\ndef mean(nums: list) -> float:\n    \"\"\"\n    Find mean of a list of numbers.\n    Wiki: https://en.wikipedia.org/wiki/Mean\n\n    >>> mean([3, 6, 9, 12, 15, 18, 21])\n    12.0\n    >>> mean([5, 10, 15, 20, 25, 30, 35])\n    20.0\n    >>> mean([1, 2, 3, 4, 5, 6, 7, 8])\n    4.5\n    >>> mean([])\n    Traceback (most recent call last):\n        ...\n    ValueError: List is empty\n    \"\"\"\n    if not nums:\n        raise ValueError(\"List is empty\")\n    return sum(nums) / len(nums)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/average_median.py",
    "content": "from __future__ import annotations\n\n\ndef median(nums: list) -> int | float:\n    \"\"\"\n    Find median of a list of numbers.\n    Wiki: https://en.wikipedia.org/wiki/Median\n\n    >>> median([0])\n    0\n    >>> median([4, 1, 3, 2])\n    2.5\n    >>> median([2, 70, 6, 50, 20, 8, 4])\n    8\n\n    Args:\n        nums: List of nums\n\n    Returns:\n        Median.\n    \"\"\"\n    # The sorted function returns list[SupportsRichComparisonT@sorted]\n    # which does not support `+`\n    sorted_list: list[int] = sorted(nums)\n    length = len(sorted_list)\n    mid_index = length >> 1\n    return (\n        (sorted_list[mid_index] + sorted_list[mid_index - 1]) / 2\n        if length % 2 == 0\n        else sorted_list[mid_index]\n    )\n\n\ndef main():\n    import doctest\n\n    doctest.testmod()\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "maths/average_mode.py",
    "content": "from typing import Any\r\n\r\n\r\ndef mode(input_list: list) -> list[Any]:\r\n    \"\"\"This function returns the mode(Mode as in the measures of\r\n    central tendency) of the input data.\r\n\r\n    The input list may contain any Datastructure or any Datatype.\r\n\r\n    >>> mode([2, 3, 4, 5, 3, 4, 2, 5, 2, 2, 4, 2, 2, 2])\r\n    [2]\r\n    >>> mode([3, 4, 5, 3, 4, 2, 5, 2, 2, 4, 4, 2, 2, 2])\r\n    [2]\r\n    >>> mode([3, 4, 5, 3, 4, 2, 5, 2, 2, 4, 4, 4, 2, 2, 4, 2])\r\n    [2, 4]\r\n    >>> mode([\"x\", \"y\", \"y\", \"z\"])\r\n    ['y']\r\n    >>> mode([\"x\", \"x\" , \"y\", \"y\", \"z\"])\r\n    ['x', 'y']\r\n    \"\"\"\r\n    if not input_list:\r\n        return []\r\n    result = [input_list.count(value) for value in input_list]\r\n    y = max(result)  # Gets the maximum count in the input list.\r\n    # Gets values of modes\r\n    return sorted({input_list[i] for i, value in enumerate(result) if value == y})\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n"
  },
  {
    "path": "maths/bailey_borwein_plouffe.py",
    "content": "def bailey_borwein_plouffe(digit_position: int, precision: int = 1000) -> str:\n    \"\"\"\n    Implement a popular pi-digit-extraction algorithm known as the\n    Bailey-Borwein-Plouffe (BBP) formula to calculate the nth hex digit of pi.\n    Wikipedia page:\n    https://en.wikipedia.org/wiki/Bailey%E2%80%93Borwein%E2%80%93Plouffe_formula\n    @param digit_position: a positive integer representing the position of the digit to\n    extract.\n    The digit immediately after the decimal point is located at position 1.\n    @param precision: number of terms in the second summation to calculate.\n    A higher number reduces the chance of an error but increases the runtime.\n    @return: a hexadecimal digit representing the digit at the nth position\n    in pi's decimal expansion.\n\n    >>> \"\".join(bailey_borwein_plouffe(i) for i in range(1, 11))\n    '243f6a8885'\n    >>> bailey_borwein_plouffe(5, 10000)\n    '6'\n    >>> bailey_borwein_plouffe(-10)\n    Traceback (most recent call last):\n      ...\n    ValueError: Digit position must be a positive integer\n    >>> bailey_borwein_plouffe(0)\n    Traceback (most recent call last):\n      ...\n    ValueError: Digit position must be a positive integer\n    >>> bailey_borwein_plouffe(1.7)\n    Traceback (most recent call last):\n      ...\n    ValueError: Digit position must be a positive integer\n    >>> bailey_borwein_plouffe(2, -10)\n    Traceback (most recent call last):\n      ...\n    ValueError: Precision must be a nonnegative integer\n    >>> bailey_borwein_plouffe(2, 1.6)\n    Traceback (most recent call last):\n      ...\n    ValueError: Precision must be a nonnegative integer\n    \"\"\"\n    if (not isinstance(digit_position, int)) or (digit_position <= 0):\n        raise ValueError(\"Digit position must be a positive integer\")\n    elif (not isinstance(precision, int)) or (precision < 0):\n        raise ValueError(\"Precision must be a nonnegative integer\")\n\n    # compute an approximation of (16 ** (n - 1)) * pi whose fractional part is mostly\n    # accurate\n    sum_result = (\n        4 * _subsum(digit_position, 1, precision)\n        - 2 * _subsum(digit_position, 4, precision)\n        - _subsum(digit_position, 5, precision)\n        - _subsum(digit_position, 6, precision)\n    )\n\n    # return the first hex digit of the fractional part of the result\n    return hex(int((sum_result % 1) * 16))[2:]\n\n\ndef _subsum(\n    digit_pos_to_extract: int, denominator_addend: int, precision: int\n) -> float:\n    # only care about first digit of fractional part; don't need decimal\n    \"\"\"\n    Private helper function to implement the summation\n    functionality.\n    @param digit_pos_to_extract: digit position to extract\n    @param denominator_addend: added to denominator of fractions in the formula\n    @param precision: same as precision in main function\n    @return: floating-point number whose integer part is not important\n    \"\"\"\n    total = 0.0\n    for sum_index in range(digit_pos_to_extract + precision):\n        denominator = 8 * sum_index + denominator_addend\n        if sum_index < digit_pos_to_extract:\n            # if the exponential term is an integer and we mod it by the denominator\n            # before dividing, only the integer part of the sum will change;\n            # the fractional part will not\n            exponential_term = pow(\n                16, digit_pos_to_extract - 1 - sum_index, denominator\n            )\n        else:\n            exponential_term = pow(16, digit_pos_to_extract - 1 - sum_index)\n        total += exponential_term / denominator\n    return total\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/base_neg2_conversion.py",
    "content": "def decimal_to_negative_base_2(num: int) -> int:\n    \"\"\"\n    This function returns the number negative base 2\n        of the decimal number of the input data.\n\n    Args:\n        int: The decimal number to convert.\n\n    Returns:\n        int: The negative base 2 number.\n\n    Examples:\n        >>> decimal_to_negative_base_2(0)\n        0\n        >>> decimal_to_negative_base_2(-19)\n        111101\n        >>> decimal_to_negative_base_2(4)\n        100\n        >>> decimal_to_negative_base_2(7)\n        11011\n    \"\"\"\n    if num == 0:\n        return 0\n    ans = \"\"\n    while num != 0:\n        num, rem = divmod(num, -2)\n        if rem < 0:\n            rem += 2\n            num += 1\n        ans = str(rem) + ans\n    return int(ans)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/basic_maths.py",
    "content": "\"\"\"Implementation of Basic Math in Python.\"\"\"\r\n\r\nimport math\r\n\r\n\r\ndef prime_factors(n: int) -> list:\r\n    \"\"\"Find Prime Factors.\r\n    >>> prime_factors(100)\r\n    [2, 2, 5, 5]\r\n    >>> prime_factors(0)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Only positive integers have prime factors\r\n    >>> prime_factors(-10)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Only positive integers have prime factors\r\n    \"\"\"\r\n    if n <= 0:\r\n        raise ValueError(\"Only positive integers have prime factors\")\r\n    pf = []\r\n    while n % 2 == 0:\r\n        pf.append(2)\r\n        n = int(n / 2)\r\n    for i in range(3, int(math.sqrt(n)) + 1, 2):\r\n        while n % i == 0:\r\n            pf.append(i)\r\n            n = int(n / i)\r\n    if n > 2:\r\n        pf.append(n)\r\n    return pf\r\n\r\n\r\ndef number_of_divisors(n: int) -> int:\r\n    \"\"\"Calculate Number of Divisors of an Integer.\r\n    >>> number_of_divisors(100)\r\n    9\r\n    >>> number_of_divisors(0)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Only positive numbers are accepted\r\n    >>> number_of_divisors(-10)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Only positive numbers are accepted\r\n    \"\"\"\r\n    if n <= 0:\r\n        raise ValueError(\"Only positive numbers are accepted\")\r\n    div = 1\r\n    temp = 1\r\n    while n % 2 == 0:\r\n        temp += 1\r\n        n = int(n / 2)\r\n    div *= temp\r\n    for i in range(3, int(math.sqrt(n)) + 1, 2):\r\n        temp = 1\r\n        while n % i == 0:\r\n            temp += 1\r\n            n = int(n / i)\r\n        div *= temp\r\n    if n > 1:\r\n        div *= 2\r\n    return div\r\n\r\n\r\ndef sum_of_divisors(n: int) -> int:\r\n    \"\"\"Calculate Sum of Divisors.\r\n    >>> sum_of_divisors(100)\r\n    217\r\n    >>> sum_of_divisors(0)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Only positive numbers are accepted\r\n    >>> sum_of_divisors(-10)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Only positive numbers are accepted\r\n    \"\"\"\r\n    if n <= 0:\r\n        raise ValueError(\"Only positive numbers are accepted\")\r\n    s = 1\r\n    temp = 1\r\n    while n % 2 == 0:\r\n        temp += 1\r\n        n = int(n / 2)\r\n    if temp > 1:\r\n        s *= (2**temp - 1) / (2 - 1)\r\n    for i in range(3, int(math.sqrt(n)) + 1, 2):\r\n        temp = 1\r\n        while n % i == 0:\r\n            temp += 1\r\n            n = int(n / i)\r\n        if temp > 1:\r\n            s *= (i**temp - 1) / (i - 1)\r\n    return int(s)\r\n\r\n\r\ndef euler_phi(n: int) -> int:\r\n    \"\"\"Calculate Euler's Phi Function.\r\n    >>> euler_phi(100)\r\n    40\r\n    >>> euler_phi(0)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Only positive numbers are accepted\r\n    >>> euler_phi(-10)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Only positive numbers are accepted\r\n    \"\"\"\r\n    if n <= 0:\r\n        raise ValueError(\"Only positive numbers are accepted\")\r\n    s = n\r\n    for x in set(prime_factors(n)):\r\n        s *= (x - 1) / x\r\n    return int(s)\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n"
  },
  {
    "path": "maths/binary_exponentiation.py",
    "content": "\"\"\"\nBinary Exponentiation\n\nThis is a method to find a^b in O(log b) time complexity and is one of the most commonly\nused methods of exponentiation. The method is also useful for modular exponentiation,\nwhen the solution to (a^b) % c is required.\n\nTo calculate a^b:\n- If b is even, then a^b = (a * a)^(b / 2)\n- If b is odd, then a^b = a * a^(b - 1)\nRepeat until b = 1 or b = 0\n\nFor modular exponentiation, we use the fact that (a * b) % c = ((a % c) * (b % c)) % c\n\"\"\"\n\n\ndef binary_exp_recursive(base: float, exponent: int) -> float:\n    \"\"\"\n    Computes a^b recursively, where a is the base and b is the exponent\n\n    >>> binary_exp_recursive(3, 5)\n    243\n    >>> binary_exp_recursive(11, 13)\n    34522712143931\n    >>> binary_exp_recursive(-1, 3)\n    -1\n    >>> binary_exp_recursive(0, 5)\n    0\n    >>> binary_exp_recursive(3, 1)\n    3\n    >>> binary_exp_recursive(3, 0)\n    1\n    >>> binary_exp_recursive(1.5, 4)\n    5.0625\n    >>> binary_exp_recursive(3, -1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Exponent must be a non-negative integer\n    \"\"\"\n    if exponent < 0:\n        raise ValueError(\"Exponent must be a non-negative integer\")\n\n    if exponent == 0:\n        return 1\n\n    if exponent % 2 == 1:\n        return binary_exp_recursive(base, exponent - 1) * base\n\n    b = binary_exp_recursive(base, exponent // 2)\n    return b * b\n\n\ndef binary_exp_iterative(base: float, exponent: int) -> float:\n    \"\"\"\n    Computes a^b iteratively, where a is the base and b is the exponent\n\n    >>> binary_exp_iterative(3, 5)\n    243\n    >>> binary_exp_iterative(11, 13)\n    34522712143931\n    >>> binary_exp_iterative(-1, 3)\n    -1\n    >>> binary_exp_iterative(0, 5)\n    0\n    >>> binary_exp_iterative(3, 1)\n    3\n    >>> binary_exp_iterative(3, 0)\n    1\n    >>> binary_exp_iterative(1.5, 4)\n    5.0625\n    >>> binary_exp_iterative(3, -1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Exponent must be a non-negative integer\n    \"\"\"\n    if exponent < 0:\n        raise ValueError(\"Exponent must be a non-negative integer\")\n\n    res: int | float = 1\n    while exponent > 0:\n        if exponent & 1:\n            res *= base\n\n        base *= base\n        exponent >>= 1\n\n    return res\n\n\ndef binary_exp_mod_recursive(base: float, exponent: int, modulus: int) -> float:\n    \"\"\"\n    Computes a^b % c recursively, where a is the base, b is the exponent, and c is the\n    modulus\n\n    >>> binary_exp_mod_recursive(3, 4, 5)\n    1\n    >>> binary_exp_mod_recursive(11, 13, 7)\n    4\n    >>> binary_exp_mod_recursive(1.5, 4, 3)\n    2.0625\n    >>> binary_exp_mod_recursive(7, -1, 10)\n    Traceback (most recent call last):\n        ...\n    ValueError: Exponent must be a non-negative integer\n    >>> binary_exp_mod_recursive(7, 13, 0)\n    Traceback (most recent call last):\n        ...\n    ValueError: Modulus must be a positive integer\n    \"\"\"\n    if exponent < 0:\n        raise ValueError(\"Exponent must be a non-negative integer\")\n    if modulus <= 0:\n        raise ValueError(\"Modulus must be a positive integer\")\n\n    if exponent == 0:\n        return 1\n\n    if exponent % 2 == 1:\n        return (binary_exp_mod_recursive(base, exponent - 1, modulus) * base) % modulus\n\n    r = binary_exp_mod_recursive(base, exponent // 2, modulus)\n    return (r * r) % modulus\n\n\ndef binary_exp_mod_iterative(base: float, exponent: int, modulus: int) -> float:\n    \"\"\"\n    Computes a^b % c iteratively, where a is the base, b is the exponent, and c is the\n    modulus\n\n    >>> binary_exp_mod_iterative(3, 4, 5)\n    1\n    >>> binary_exp_mod_iterative(11, 13, 7)\n    4\n    >>> binary_exp_mod_iterative(1.5, 4, 3)\n    2.0625\n    >>> binary_exp_mod_iterative(7, -1, 10)\n    Traceback (most recent call last):\n        ...\n    ValueError: Exponent must be a non-negative integer\n    >>> binary_exp_mod_iterative(7, 13, 0)\n    Traceback (most recent call last):\n        ...\n    ValueError: Modulus must be a positive integer\n    \"\"\"\n    if exponent < 0:\n        raise ValueError(\"Exponent must be a non-negative integer\")\n    if modulus <= 0:\n        raise ValueError(\"Modulus must be a positive integer\")\n\n    res: int | float = 1\n    while exponent > 0:\n        if exponent & 1:\n            res = ((res % modulus) * (base % modulus)) % modulus\n\n        base *= base\n        exponent >>= 1\n\n    return res\n\n\nif __name__ == \"__main__\":\n    from timeit import timeit\n\n    a = 1269380576\n    b = 374\n    c = 34\n\n    runs = 100_000\n    print(\n        timeit(\n            f\"binary_exp_recursive({a}, {b})\",\n            setup=\"from __main__ import binary_exp_recursive\",\n            number=runs,\n        )\n    )\n    print(\n        timeit(\n            f\"binary_exp_iterative({a}, {b})\",\n            setup=\"from __main__ import binary_exp_iterative\",\n            number=runs,\n        )\n    )\n    print(\n        timeit(\n            f\"binary_exp_mod_recursive({a}, {b}, {c})\",\n            setup=\"from __main__ import binary_exp_mod_recursive\",\n            number=runs,\n        )\n    )\n    print(\n        timeit(\n            f\"binary_exp_mod_iterative({a}, {b}, {c})\",\n            setup=\"from __main__ import binary_exp_mod_iterative\",\n            number=runs,\n        )\n    )\n"
  },
  {
    "path": "maths/binary_multiplication.py",
    "content": "\"\"\"\nBinary Multiplication\nThis is a method to find a*b in a time complexity of O(log b)\nThis is one of the most commonly used methods of finding result of multiplication.\nAlso useful in cases where solution to (a*b)%c is required,\nwhere a,b,c can be numbers over the computers calculation limits.\nDone using iteration, can also be done using recursion\n\nLet's say you need to calculate a * b\nRULE 1 : a * b = (a+a) * (b/2) ---- example : 4 * 4 = (4+4) * (4/2) = 8 * 2\nRULE 2 : IF b is odd, then ---- a * b = a + (a * (b - 1)), where (b - 1) is even.\nOnce b is even, repeat the process to get a * b\nRepeat the process until b = 1 or b = 0, because a*1 = a and a*0 = 0\n\nAs far as the modulo is concerned,\nthe fact : (a+b) % c = ((a%c) + (b%c)) % c\nNow apply RULE 1 or 2, whichever is required.\n\n@author chinmoy159\n\"\"\"\n\n\ndef binary_multiply(a: int, b: int) -> int:\n    \"\"\"\n    Multiply 'a' and 'b' using bitwise multiplication.\n\n    Parameters:\n    a (int): The first number.\n    b (int): The second number.\n\n    Returns:\n    int: a * b\n\n    Examples:\n    >>> binary_multiply(2, 3)\n    6\n    >>> binary_multiply(5, 0)\n    0\n    >>> binary_multiply(3, 4)\n    12\n    >>> binary_multiply(10, 5)\n    50\n    >>> binary_multiply(0, 5)\n    0\n    >>> binary_multiply(2, 1)\n    2\n    >>> binary_multiply(1, 10)\n    10\n    \"\"\"\n    res = 0\n    while b > 0:\n        if b & 1:\n            res += a\n\n        a += a\n        b >>= 1\n\n    return res\n\n\ndef binary_mod_multiply(a: int, b: int, modulus: int) -> int:\n    \"\"\"\n    Calculate (a * b) % c using binary multiplication and modular arithmetic.\n\n    Parameters:\n    a (int): The first number.\n    b (int): The second number.\n    modulus (int): The modulus.\n\n    Returns:\n    int: (a * b) % modulus.\n\n    Examples:\n    >>> binary_mod_multiply(2, 3, 5)\n    1\n    >>> binary_mod_multiply(5, 0, 7)\n    0\n    >>> binary_mod_multiply(3, 4, 6)\n    0\n    >>> binary_mod_multiply(10, 5, 13)\n    11\n    >>> binary_mod_multiply(2, 1, 5)\n    2\n    >>> binary_mod_multiply(1, 10, 3)\n    1\n    \"\"\"\n    res = 0\n    while b > 0:\n        if b & 1:\n            res = ((res % modulus) + (a % modulus)) % modulus\n\n        a += a\n        b >>= 1\n\n    return res\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/binomial_coefficient.py",
    "content": "def binomial_coefficient(n: int, r: int) -> int:\n    \"\"\"\n    Find binomial coefficient using Pascal's triangle.\n\n    Calculate C(n, r) using Pascal's triangle.\n\n    :param n: The total number of items.\n    :param r: The number of items to choose.\n    :return: The binomial coefficient C(n, r).\n\n    >>> binomial_coefficient(10, 5)\n    252\n    >>> binomial_coefficient(10, 0)\n    1\n    >>> binomial_coefficient(0, 10)\n    1\n    >>> binomial_coefficient(10, 10)\n    1\n    >>> binomial_coefficient(5, 2)\n    10\n    >>> binomial_coefficient(5, 6)\n    0\n    >>> binomial_coefficient(3, 5)\n    0\n    >>> binomial_coefficient(-2, 3)\n    Traceback (most recent call last):\n        ...\n    ValueError: n and r must be non-negative integers\n    >>> binomial_coefficient(5, -1)\n    Traceback (most recent call last):\n        ...\n    ValueError: n and r must be non-negative integers\n    >>> binomial_coefficient(10.1, 5)\n    Traceback (most recent call last):\n        ...\n    TypeError: 'float' object cannot be interpreted as an integer\n    >>> binomial_coefficient(10, 5.1)\n    Traceback (most recent call last):\n        ...\n    TypeError: 'float' object cannot be interpreted as an integer\n    \"\"\"\n    if n < 0 or r < 0:\n        raise ValueError(\"n and r must be non-negative integers\")\n    if 0 in (n, r):\n        return 1\n    c = [0 for i in range(r + 1)]\n    # nc0 = 1\n    c[0] = 1\n    for i in range(1, n + 1):\n        # to compute current row from previous row.\n        j = min(i, r)\n        while j > 0:\n            c[j] += c[j - 1]\n            j -= 1\n    return c[r]\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    print(binomial_coefficient(n=10, r=5))\n"
  },
  {
    "path": "maths/binomial_distribution.py",
    "content": "\"\"\"For more information about the Binomial Distribution -\r\nhttps://en.wikipedia.org/wiki/Binomial_distribution\"\"\"\r\n\r\nfrom math import factorial\r\n\r\n\r\ndef binomial_distribution(successes: int, trials: int, prob: float) -> float:\r\n    \"\"\"\r\n    Return probability of k successes out of n tries, with p probability for one\r\n    success\r\n\r\n    The function uses the factorial function in order to calculate the binomial\r\n    coefficient\r\n\r\n    >>> binomial_distribution(3, 5, 0.7)\r\n    0.30870000000000003\r\n    >>> binomial_distribution (2, 4, 0.5)\r\n    0.375\r\n    \"\"\"\r\n    if successes > trials:\r\n        raise ValueError(\"\"\"successes must be lower or equal to trials\"\"\")\r\n    if trials < 0 or successes < 0:\r\n        raise ValueError(\"the function is defined for non-negative integers\")\r\n    if not isinstance(successes, int) or not isinstance(trials, int):\r\n        raise ValueError(\"the function is defined for non-negative integers\")\r\n    if not 0 < prob < 1:\r\n        raise ValueError(\"prob has to be in range of 1 - 0\")\r\n    probability = (prob**successes) * ((1 - prob) ** (trials - successes))\r\n    # Calculate the binomial coefficient: n! / k!(n-k)!\r\n    coefficient = float(factorial(trials))\r\n    coefficient /= factorial(successes) * factorial(trials - successes)\r\n    return probability * coefficient\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    from doctest import testmod\r\n\r\n    testmod()\r\n    print(\"Probability of 2 successes out of 4 trails\")\r\n    print(\"with probability of 0.75 is:\", end=\" \")\r\n    print(binomial_distribution(2, 4, 0.75))\r\n"
  },
  {
    "path": "maths/ceil.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/Floor_and_ceiling_functions\n\"\"\"\n\n\ndef ceil(x: float) -> int:\n    \"\"\"\n    Return the ceiling of x as an Integral.\n\n    :param x: the number\n    :return: the smallest integer >= x.\n\n    >>> import math\n    >>> all(ceil(n) == math.ceil(n) for n\n    ...     in (1, -1, 0, -0, 1.1, -1.1, 1.0, -1.0, 1_000_000_000))\n    True\n    \"\"\"\n    return int(x) if x - int(x) <= 0 else int(x) + 1\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/chebyshev_distance.py",
    "content": "def chebyshev_distance(point_a: list[float], point_b: list[float]) -> float:\n    \"\"\"\n    This function calculates the Chebyshev distance (also known as the\n    Chessboard distance) between two n-dimensional points represented as lists.\n\n    https://en.wikipedia.org/wiki/Chebyshev_distance\n\n    >>> chebyshev_distance([1.0, 1.0], [2.0, 2.0])\n    1.0\n    >>> chebyshev_distance([1.0, 1.0, 9.0], [2.0, 2.0, -5.2])\n    14.2\n    >>> chebyshev_distance([1.0], [2.0, 2.0])\n    Traceback (most recent call last):\n        ...\n    ValueError: Both points must have the same dimension.\n    \"\"\"\n    if len(point_a) != len(point_b):\n        raise ValueError(\"Both points must have the same dimension.\")\n\n    return max(abs(a - b) for a, b in zip(point_a, point_b))\n"
  },
  {
    "path": "maths/check_polygon.py",
    "content": "from __future__ import annotations\n\n\ndef check_polygon(nums: list[float]) -> bool:\n    \"\"\"\n    Takes list of possible side lengths and determines whether a\n    two-dimensional polygon with such side lengths can exist.\n\n    Returns a boolean value for the < comparison\n    of the largest side length with sum of the rest.\n    Wiki: https://en.wikipedia.org/wiki/Triangle_inequality\n\n    >>> check_polygon([6, 10, 5])\n    True\n    >>> check_polygon([3, 7, 13, 2])\n    False\n    >>> check_polygon([1, 4.3, 5.2, 12.2])\n    False\n    >>> nums = [3, 7, 13, 2]\n    >>> _ = check_polygon(nums) #   Run function, do not show answer in output\n    >>> nums #  Check numbers are not reordered\n    [3, 7, 13, 2]\n    >>> check_polygon([])\n    Traceback (most recent call last):\n        ...\n    ValueError: Monogons and Digons are not polygons in the Euclidean space\n    >>> check_polygon([-2, 5, 6])\n    Traceback (most recent call last):\n        ...\n    ValueError: All values must be greater than 0\n    \"\"\"\n    if len(nums) < 2:\n        raise ValueError(\"Monogons and Digons are not polygons in the Euclidean space\")\n    if any(i <= 0 for i in nums):\n        raise ValueError(\"All values must be greater than 0\")\n    copy_nums = nums.copy()\n    copy_nums.sort()\n    return copy_nums[-1] < sum(copy_nums[:-1])\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/chinese_remainder_theorem.py",
    "content": "\"\"\"\nChinese Remainder Theorem:\nGCD ( Greatest Common Divisor ) or HCF ( Highest Common Factor )\n\nIf GCD(a,b) = 1, then for any remainder ra modulo a and any remainder rb modulo b\nthere exists integer n, such that n = ra (mod a) and n = ra(mod b).  If n1 and n2 are\ntwo such integers, then n1=n2(mod ab)\n\nAlgorithm :\n\n1. Use extended euclid algorithm to find x,y such that a*x + b*y = 1\n2. Take n = ra*by + rb*ax\n\"\"\"\n\nfrom __future__ import annotations\n\n\n# Extended Euclid\ndef extended_euclid(a: int, b: int) -> tuple[int, int]:\n    \"\"\"\n    >>> extended_euclid(10, 6)\n    (-1, 2)\n\n    >>> extended_euclid(7, 5)\n    (-2, 3)\n\n    \"\"\"\n    if b == 0:\n        return (1, 0)\n    (x, y) = extended_euclid(b, a % b)\n    k = a // b\n    return (y, x - k * y)\n\n\n# Uses ExtendedEuclid to find inverses\ndef chinese_remainder_theorem(n1: int, r1: int, n2: int, r2: int) -> int:\n    \"\"\"\n    >>> chinese_remainder_theorem(5,1,7,3)\n    31\n\n    Explanation : 31 is the smallest number such that\n                (i)  When we divide it by 5, we get remainder 1\n                (ii) When we divide it by 7, we get remainder 3\n\n    >>> chinese_remainder_theorem(6,1,4,3)\n    14\n\n    \"\"\"\n    (x, y) = extended_euclid(n1, n2)\n    m = n1 * n2\n    n = r2 * x * n1 + r1 * y * n2\n    return (n % m + m) % m\n\n\n# ----------SAME SOLUTION USING InvertModulo instead ExtendedEuclid----------------\n\n\n# This function find the inverses of a i.e., a^(-1)\ndef invert_modulo(a: int, n: int) -> int:\n    \"\"\"\n    >>> invert_modulo(2, 5)\n    3\n\n    >>> invert_modulo(8,7)\n    1\n\n    \"\"\"\n    (b, _x) = extended_euclid(a, n)\n    if b < 0:\n        b = (b % n + n) % n\n    return b\n\n\n# Same a above using InvertingModulo\ndef chinese_remainder_theorem2(n1: int, r1: int, n2: int, r2: int) -> int:\n    \"\"\"\n    >>> chinese_remainder_theorem2(5,1,7,3)\n    31\n\n    >>> chinese_remainder_theorem2(6,1,4,3)\n    14\n\n    \"\"\"\n    x, y = invert_modulo(n1, n2), invert_modulo(n2, n1)\n    m = n1 * n2\n    n = r2 * x * n1 + r1 * y * n2\n    return (n % m + m) % m\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod(name=\"chinese_remainder_theorem\", verbose=True)\n    testmod(name=\"chinese_remainder_theorem2\", verbose=True)\n    testmod(name=\"invert_modulo\", verbose=True)\n    testmod(name=\"extended_euclid\", verbose=True)\n"
  },
  {
    "path": "maths/chudnovsky_algorithm.py",
    "content": "from decimal import Decimal, getcontext\nfrom math import ceil, factorial\n\n\ndef pi(precision: int) -> str:\n    \"\"\"\n    The Chudnovsky algorithm is a fast method for calculating the digits of PI,\n    based on Ramanujan's PI formulae.\n\n    https://en.wikipedia.org/wiki/Chudnovsky_algorithm\n\n    PI = constant_term / ((multinomial_term * linear_term) / exponential_term)\n        where constant_term = 426880 * sqrt(10005)\n\n    The linear_term and the exponential_term can be defined iteratively as follows:\n        L_k+1 = L_k + 545140134            where L_0 = 13591409\n        X_k+1 = X_k * -262537412640768000  where X_0 = 1\n\n    The multinomial_term is defined as follows:\n        6k! / ((3k)! * (k!) ^ 3)\n            where k is the k_th iteration.\n\n    This algorithm correctly calculates around 14 digits of PI per iteration\n\n    >>> pi(10)\n    '3.14159265'\n    >>> pi(100)\n    '3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706'\n    >>> pi('hello')\n    Traceback (most recent call last):\n        ...\n    TypeError: Undefined for non-integers\n    >>> pi(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Undefined for non-natural numbers\n    \"\"\"\n\n    if not isinstance(precision, int):\n        raise TypeError(\"Undefined for non-integers\")\n    elif precision < 1:\n        raise ValueError(\"Undefined for non-natural numbers\")\n\n    getcontext().prec = precision\n    num_iterations = ceil(precision / 14)\n    constant_term = 426880 * Decimal(10005).sqrt()\n    exponential_term = 1\n    linear_term = 13591409\n    partial_sum = Decimal(linear_term)\n    for k in range(1, num_iterations):\n        multinomial_term = factorial(6 * k) // (factorial(3 * k) * factorial(k) ** 3)\n        linear_term += 545140134\n        exponential_term *= -262537412640768000\n        partial_sum += Decimal(multinomial_term * linear_term) / exponential_term\n    return str(constant_term / partial_sum)[:-1]\n\n\nif __name__ == \"__main__\":\n    n = 50\n    print(f\"The first {n} digits of pi is: {pi(n)}\")\n"
  },
  {
    "path": "maths/collatz_sequence.py",
    "content": "\"\"\"\nThe Collatz conjecture is a famous unsolved problem in mathematics. Given a starting\npositive integer, define the following sequence:\n- If the current term n is even, then the next term is n/2.\n- If the current term n is odd, then the next term is 3n + 1.\nThe conjecture claims that this sequence will always reach 1 for any starting number.\n\nOther names for this problem include the 3n + 1 problem, the Ulam conjecture, Kakutani's\nproblem, the Thwaites conjecture, Hasse's algorithm, the Syracuse problem, and the\nhailstone sequence.\n\nReference: https://en.wikipedia.org/wiki/Collatz_conjecture\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections.abc import Generator\n\n\ndef collatz_sequence(n: int) -> Generator[int]:\n    \"\"\"\n    Generate the Collatz sequence starting at n.\n    >>> tuple(collatz_sequence(2.1))\n    Traceback (most recent call last):\n        ...\n    Exception: Sequence only defined for positive integers\n    >>> tuple(collatz_sequence(0))\n    Traceback (most recent call last):\n        ...\n    Exception: Sequence only defined for positive integers\n    >>> tuple(collatz_sequence(4))\n    (4, 2, 1)\n    >>> tuple(collatz_sequence(11))\n    (11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1)\n    >>> tuple(collatz_sequence(31))     # doctest: +NORMALIZE_WHITESPACE\n    (31, 94, 47, 142, 71, 214, 107, 322, 161, 484, 242, 121, 364, 182, 91, 274, 137,\n    412, 206, 103, 310, 155, 466, 233, 700, 350, 175, 526, 263, 790, 395, 1186, 593,\n    1780, 890, 445, 1336, 668, 334, 167, 502, 251, 754, 377, 1132, 566, 283, 850, 425,\n    1276, 638, 319, 958, 479, 1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288, 3644,\n    1822, 911, 2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732,\n    866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35, 106, 53,\n    160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1)\n    >>> tuple(collatz_sequence(43))     # doctest: +NORMALIZE_WHITESPACE\n    (43, 130, 65, 196, 98, 49, 148, 74, 37, 112, 56, 28, 14, 7, 22, 11, 34, 17, 52, 26,\n    13, 40, 20, 10, 5, 16, 8, 4, 2, 1)\n    \"\"\"\n    if not isinstance(n, int) or n < 1:\n        raise Exception(\"Sequence only defined for positive integers\")\n\n    yield n\n    while n != 1:\n        if n % 2 == 0:\n            n //= 2\n        else:\n            n = 3 * n + 1\n        yield n\n\n\ndef main():\n    n = int(input(\"Your number: \"))\n    sequence = tuple(collatz_sequence(n))\n    print(sequence)\n    print(f\"Collatz sequence from {n} took {len(sequence)} steps.\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "maths/combinations.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/Combination\n\"\"\"\n\n\ndef combinations(n: int, k: int) -> int:\n    \"\"\"\n    Returns the number of different combinations of k length which can\n    be made from n values, where n >= k.\n\n    Examples:\n    >>> combinations(10,5)\n    252\n\n    >>> combinations(6,3)\n    20\n\n    >>> combinations(20,5)\n    15504\n\n    >>> combinations(52, 5)\n    2598960\n\n    >>> combinations(0, 0)\n    1\n\n    >>> combinations(-4, -5)\n    ...\n    Traceback (most recent call last):\n    ValueError: Please enter positive integers for n and k where n >= k\n    \"\"\"\n\n    # If either of the conditions are true, the function is being asked\n    # to calculate a factorial of a negative number, which is not possible\n    if n < k or k < 0:\n        raise ValueError(\"Please enter positive integers for n and k where n >= k\")\n    res = 1\n    for i in range(k):\n        res *= n - i\n        res //= i + 1\n    return res\n\n\nif __name__ == \"__main__\":\n    print(\n        \"The number of five-card hands possible from a standard\",\n        f\"fifty-two card deck is: {combinations(52, 5)}\\n\",\n    )\n\n    print(\n        \"If a class of 40 students must be arranged into groups of\",\n        f\"4 for group projects, there are {combinations(40, 4)} ways\",\n        \"to arrange them.\\n\",\n    )\n\n    print(\n        \"If 10 teams are competing in a Formula One race, there\",\n        f\"are {combinations(10, 3)} ways that first, second and\",\n        \"third place can be awarded.\",\n    )\n"
  },
  {
    "path": "maths/continued_fraction.py",
    "content": "\"\"\"\nFinding the continuous fraction for a rational number using python\n\nhttps://en.wikipedia.org/wiki/Continued_fraction\n\"\"\"\n\nfrom fractions import Fraction\nfrom math import floor\n\n\ndef continued_fraction(num: Fraction) -> list[int]:\n    \"\"\"\n    :param num:\n    Fraction of the number whose continued fractions to be found.\n    Use Fraction(str(number)) for more accurate results due to\n    float inaccuracies.\n\n    :return:\n    The continued fraction of rational number.\n    It is the all commas in the (n + 1)-tuple notation.\n\n    >>> continued_fraction(Fraction(2))\n    [2]\n    >>> continued_fraction(Fraction(\"3.245\"))\n    [3, 4, 12, 4]\n    >>> continued_fraction(Fraction(\"2.25\"))\n    [2, 4]\n    >>> continued_fraction(1/Fraction(\"2.25\"))\n    [0, 2, 4]\n    >>> continued_fraction(Fraction(\"415/93\"))\n    [4, 2, 6, 7]\n    >>> continued_fraction(Fraction(0))\n    [0]\n    >>> continued_fraction(Fraction(0.75))\n    [0, 1, 3]\n    >>> continued_fraction(Fraction(\"-2.25\"))    # -2.25 = -3 + 0.75\n    [-3, 1, 3]\n    \"\"\"\n    numerator, denominator = num.as_integer_ratio()\n    continued_fraction_list: list[int] = []\n    while True:\n        integer_part = floor(numerator / denominator)\n        continued_fraction_list.append(integer_part)\n        numerator -= integer_part * denominator\n        if numerator == 0:\n            break\n        numerator, denominator = denominator, numerator\n\n    return continued_fraction_list\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    print(\"Continued Fraction of 0.84375 is: \", continued_fraction(Fraction(\"0.84375\")))\n"
  },
  {
    "path": "maths/decimal_isolate.py",
    "content": "\"\"\"\nIsolate the Decimal part of a Number\nhttps://stackoverflow.com/questions/3886402/how-to-get-numbers-after-decimal-point\n\"\"\"\n\n\ndef decimal_isolate(number: float, digit_amount: int) -> float:\n    \"\"\"\n    Isolates the decimal part of a number.\n    If digitAmount > 0 round to that decimal place, else print the entire decimal.\n    >>> decimal_isolate(1.53, 0)\n    0.53\n    >>> decimal_isolate(35.345, 1)\n    0.3\n    >>> decimal_isolate(35.345, 2)\n    0.34\n    >>> decimal_isolate(35.345, 3)\n    0.345\n    >>> decimal_isolate(-14.789, 3)\n    -0.789\n    >>> decimal_isolate(0, 2)\n    0\n    >>> decimal_isolate(-14.123, 1)\n    -0.1\n    >>> decimal_isolate(-14.123, 2)\n    -0.12\n    >>> decimal_isolate(-14.123, 3)\n    -0.123\n    \"\"\"\n    if digit_amount > 0:\n        return round(number - int(number), digit_amount)\n    return number - int(number)\n\n\nif __name__ == \"__main__\":\n    print(decimal_isolate(1.53, 0))\n    print(decimal_isolate(35.345, 1))\n    print(decimal_isolate(35.345, 2))\n    print(decimal_isolate(35.345, 3))\n    print(decimal_isolate(-14.789, 3))\n    print(decimal_isolate(0, 2))\n    print(decimal_isolate(-14.123, 1))\n    print(decimal_isolate(-14.123, 2))\n    print(decimal_isolate(-14.123, 3))\n"
  },
  {
    "path": "maths/decimal_to_fraction.py",
    "content": "def decimal_to_fraction(decimal: float | str) -> tuple[int, int]:\n    \"\"\"\n    Return a decimal number in its simplest fraction form\n    >>> decimal_to_fraction(2)\n    (2, 1)\n    >>> decimal_to_fraction(89.)\n    (89, 1)\n    >>> decimal_to_fraction(\"67\")\n    (67, 1)\n    >>> decimal_to_fraction(\"45.0\")\n    (45, 1)\n    >>> decimal_to_fraction(1.5)\n    (3, 2)\n    >>> decimal_to_fraction(\"6.25\")\n    (25, 4)\n    >>> decimal_to_fraction(\"78td\")\n    Traceback (most recent call last):\n    ValueError: Please enter a valid number\n    >>> decimal_to_fraction(0)\n    (0, 1)\n    >>> decimal_to_fraction(-2.5)\n    (-5, 2)\n    >>> decimal_to_fraction(0.125)\n    (1, 8)\n    >>> decimal_to_fraction(1000000.25)\n    (4000001, 4)\n    >>> decimal_to_fraction(1.3333)\n    (13333, 10000)\n    >>> decimal_to_fraction(\"1.23e2\")\n    (123, 1)\n    >>> decimal_to_fraction(\"0.500\")\n    (1, 2)\n    \"\"\"\n    try:\n        decimal = float(decimal)\n    except ValueError:\n        raise ValueError(\"Please enter a valid number\")\n    fractional_part = decimal - int(decimal)\n    if fractional_part == 0:\n        return int(decimal), 1\n    else:\n        number_of_frac_digits = len(str(decimal).split(\".\")[1])\n        numerator = int(decimal * (10**number_of_frac_digits))\n        denominator = 10**number_of_frac_digits\n        divisor, dividend = denominator, numerator\n        while True:\n            remainder = dividend % divisor\n            if remainder == 0:\n                break\n            dividend, divisor = divisor, remainder\n        numerator, denominator = numerator // divisor, denominator // divisor\n        return numerator, denominator\n\n\nif __name__ == \"__main__\":\n    print(f\"{decimal_to_fraction(2) = }\")\n    print(f\"{decimal_to_fraction(89.0) = }\")\n    print(f\"{decimal_to_fraction('67') = }\")\n    print(f\"{decimal_to_fraction('45.0') = }\")\n    print(f\"{decimal_to_fraction(1.5) = }\")\n    print(f\"{decimal_to_fraction('6.25') = }\")\n    print(f\"{decimal_to_fraction('78td') = }\")\n"
  },
  {
    "path": "maths/dodecahedron.py",
    "content": "# dodecahedron.py\n\n\"\"\"\nA regular dodecahedron is a three-dimensional figure made up of\n12 pentagon faces having the same equal size.\n\"\"\"\n\n\ndef dodecahedron_surface_area(edge: float) -> float:\n    \"\"\"\n    Calculates the surface area of a regular dodecahedron\n    a = 3 * ((25 + 10 * (5** (1 / 2))) ** (1 / 2 )) * (e**2)\n    where:\n    a --> is the area of the dodecahedron\n    e --> is the length of the edge\n    reference-->\"Dodecahedron\" Study.com\n    <https://study.com/academy/lesson/dodecahedron-volume-surface-area-formulas.html>\n\n    :param edge: length of the edge of the dodecahedron\n    :type edge: float\n    :return: the surface area of the dodecahedron as a float\n\n\n    Tests:\n    >>> dodecahedron_surface_area(5)\n    516.1432201766901\n    >>> dodecahedron_surface_area(10)\n    2064.5728807067603\n    >>> dodecahedron_surface_area(-1)\n    Traceback (most recent call last):\n      ...\n    ValueError: Length must be a positive.\n    \"\"\"\n\n    if edge <= 0 or not isinstance(edge, int):\n        raise ValueError(\"Length must be a positive.\")\n    return 3 * ((25 + 10 * (5 ** (1 / 2))) ** (1 / 2)) * (edge**2)\n\n\ndef dodecahedron_volume(edge: float) -> float:\n    \"\"\"\n    Calculates the volume of a regular dodecahedron\n    v = ((15 + (7 * (5** (1 / 2)))) / 4) * (e**3)\n    where:\n    v --> is the volume of the dodecahedron\n    e --> is the length of the edge\n    reference-->\"Dodecahedron\" Study.com\n    <https://study.com/academy/lesson/dodecahedron-volume-surface-area-formulas.html>\n\n    :param edge: length of the edge of the dodecahedron\n    :type edge: float\n    :return: the volume of the dodecahedron as a float\n\n    Tests:\n    >>> dodecahedron_volume(5)\n    957.8898700780791\n    >>> dodecahedron_volume(10)\n    7663.118960624633\n    >>> dodecahedron_volume(-1)\n    Traceback (most recent call last):\n      ...\n    ValueError: Length must be a positive.\n    \"\"\"\n\n    if edge <= 0 or not isinstance(edge, int):\n        raise ValueError(\"Length must be a positive.\")\n    return ((15 + (7 * (5 ** (1 / 2)))) / 4) * (edge**3)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/double_factorial.py",
    "content": "def double_factorial_recursive(n: int) -> int:\n    \"\"\"\n    Compute double factorial using recursive method.\n    Recursion can be costly for large numbers.\n\n    To learn about the theory behind this algorithm:\n    https://en.wikipedia.org/wiki/Double_factorial\n\n    >>> from math import prod\n    >>> all(double_factorial_recursive(i) == prod(range(i, 0, -2)) for i in range(20))\n    True\n    >>> double_factorial_recursive(0.1)\n    Traceback (most recent call last):\n        ...\n    ValueError: double_factorial_recursive() only accepts integral values\n    >>> double_factorial_recursive(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: double_factorial_recursive() not defined for negative values\n    \"\"\"\n    if not isinstance(n, int):\n        raise ValueError(\"double_factorial_recursive() only accepts integral values\")\n    if n < 0:\n        raise ValueError(\"double_factorial_recursive() not defined for negative values\")\n    return 1 if n <= 1 else n * double_factorial_recursive(n - 2)\n\n\ndef double_factorial_iterative(num: int) -> int:\n    \"\"\"\n    Compute double factorial using iterative method.\n\n    To learn about the theory behind this algorithm:\n    https://en.wikipedia.org/wiki/Double_factorial\n\n    >>> from math import prod\n    >>> all(double_factorial_iterative(i) == prod(range(i, 0, -2)) for i in range(20))\n    True\n    >>> double_factorial_iterative(0.1)\n    Traceback (most recent call last):\n        ...\n    ValueError: double_factorial_iterative() only accepts integral values\n    >>> double_factorial_iterative(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: double_factorial_iterative() not defined for negative values\n    \"\"\"\n    if not isinstance(num, int):\n        raise ValueError(\"double_factorial_iterative() only accepts integral values\")\n    if num < 0:\n        raise ValueError(\"double_factorial_iterative() not defined for negative values\")\n    value = 1\n    for i in range(num, 0, -2):\n        value *= i\n    return value\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/dual_number_automatic_differentiation.py",
    "content": "from math import factorial\r\n\r\n\"\"\"\r\nhttps://en.wikipedia.org/wiki/Automatic_differentiation#Automatic_differentiation_using_dual_numbers\r\nhttps://blog.jliszka.org/2013/10/24/exact-numeric-nth-derivatives.html\r\n\r\nNote this only works for basic functions, f(x) where the power of x is positive.\r\n\"\"\"\r\n\r\n\r\nclass Dual:\r\n    def __init__(self, real, rank):\r\n        self.real = real\r\n        if isinstance(rank, int):\r\n            self.duals = [1] * rank\r\n        else:\r\n            self.duals = rank\r\n\r\n    def __repr__(self):\r\n        s = \"+\".join(f\"{dual}E{n}\" for n, dual in enumerate(self.duals, 1))\r\n        return f\"{self.real}+{s}\"\r\n\r\n    def reduce(self):\r\n        cur = self.duals.copy()\r\n        while cur[-1] == 0:\r\n            cur.pop(-1)\r\n        return Dual(self.real, cur)\r\n\r\n    def __add__(self, other):\r\n        if not isinstance(other, Dual):\r\n            return Dual(self.real + other, self.duals)\r\n        s_dual = self.duals.copy()\r\n        o_dual = other.duals.copy()\r\n        if len(s_dual) > len(o_dual):\r\n            o_dual.extend([1] * (len(s_dual) - len(o_dual)))\r\n        elif len(s_dual) < len(o_dual):\r\n            s_dual.extend([1] * (len(o_dual) - len(s_dual)))\r\n        new_duals = []\r\n        for i in range(len(s_dual)):\r\n            new_duals.append(s_dual[i] + o_dual[i])\r\n        return Dual(self.real + other.real, new_duals)\r\n\r\n    __radd__ = __add__\r\n\r\n    def __sub__(self, other):\r\n        return self + other * -1\r\n\r\n    def __mul__(self, other):\r\n        if not isinstance(other, Dual):\r\n            new_duals = []\r\n            for i in self.duals:\r\n                new_duals.append(i * other)\r\n            return Dual(self.real * other, new_duals)\r\n        new_duals = [0] * (len(self.duals) + len(other.duals) + 1)\r\n        for i, item in enumerate(self.duals):\r\n            for j, jtem in enumerate(other.duals):\r\n                new_duals[i + j + 1] += item * jtem\r\n        for k in range(len(self.duals)):\r\n            new_duals[k] += self.duals[k] * other.real\r\n        for index in range(len(other.duals)):\r\n            new_duals[index] += other.duals[index] * self.real\r\n        return Dual(self.real * other.real, new_duals)\r\n\r\n    __rmul__ = __mul__\r\n\r\n    def __truediv__(self, other):\r\n        if not isinstance(other, Dual):\r\n            new_duals = []\r\n            for i in self.duals:\r\n                new_duals.append(i / other)\r\n            return Dual(self.real / other, new_duals)\r\n        raise ValueError\r\n\r\n    def __floordiv__(self, other):\r\n        if not isinstance(other, Dual):\r\n            new_duals = []\r\n            for i in self.duals:\r\n                new_duals.append(i // other)\r\n            return Dual(self.real // other, new_duals)\r\n        raise ValueError\r\n\r\n    def __pow__(self, n):\r\n        if n < 0 or isinstance(n, float):\r\n            raise ValueError(\"power must be a positive integer\")\r\n        if n == 0:\r\n            return 1\r\n        if n == 1:\r\n            return self\r\n        x = self\r\n        for _ in range(n - 1):\r\n            x *= self\r\n        return x\r\n\r\n\r\ndef differentiate(func, position, order):\r\n    \"\"\"\r\n    >>> differentiate(lambda x: x**2, 2, 2)\r\n    2\r\n    >>> differentiate(lambda x: x**2 * x**4, 9, 2)\r\n    196830\r\n    >>> differentiate(lambda y: 0.5 * (y + 3) ** 6, 3.5, 4)\r\n    7605.0\r\n    >>> differentiate(lambda y: y ** 2, 4, 3)\r\n    0\r\n    >>> differentiate(8, 8, 8)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: differentiate() requires a function as input for func\r\n    >>> differentiate(lambda x: x **2, \"\", 1)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: differentiate() requires a float as input for position\r\n    >>> differentiate(lambda x: x**2, 3, \"\")\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: differentiate() requires an int as input for order\r\n    \"\"\"\r\n    if not callable(func):\r\n        raise ValueError(\"differentiate() requires a function as input for func\")\r\n    if not isinstance(position, (float, int)):\r\n        raise ValueError(\"differentiate() requires a float as input for position\")\r\n    if not isinstance(order, int):\r\n        raise ValueError(\"differentiate() requires an int as input for order\")\r\n    d = Dual(position, 1)\r\n    result = func(d)\r\n    if order == 0:\r\n        return result.real\r\n    return result.duals[order - 1] * factorial(order)\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n\r\n    def f(y):\r\n        return y**2 * y**4\r\n\r\n    print(differentiate(f, 9, 2))\r\n"
  },
  {
    "path": "maths/entropy.py",
    "content": "#!/usr/bin/env python3\n\n\"\"\"\nImplementation of entropy of information\nhttps://en.wikipedia.org/wiki/Entropy_(information_theory)\n\"\"\"\n\nfrom __future__ import annotations\n\nimport math\nfrom collections import Counter\nfrom string import ascii_lowercase\n\n\ndef calculate_prob(text: str) -> None:\n    \"\"\"\n    This method takes path and two dict as argument\n    and than calculates entropy of them.\n    :param dict:\n    :param dict:\n    :return: Prints\n    1) Entropy of information based on 1 alphabet\n    2) Entropy of information based on couples of 2 alphabet\n    3) print Entropy of H(X n|Xn-1)\n\n    Text from random books. Also, random quotes.\n    >>> text = (\"Behind Winston's back the voice \"\n    ...         \"from the telescreen was still \"\n    ...         \"babbling and the overfulfilment\")\n    >>> calculate_prob(text)\n    4.0\n    6.0\n    2.0\n\n    >>> text = (\"The Ministry of Truth—Minitrue, in Newspeak [Newspeak was the official\"\n    ...         \"face in elegant lettering, the three\")\n    >>> calculate_prob(text)\n    4.0\n    5.0\n    1.0\n    >>> text = (\"Had repulsive dashwoods suspicion sincerity but advantage now him. \"\n    ...         \"Remark easily garret nor nay.  Civil those mrs enjoy shy fat merry. \"\n    ...         \"You greatest jointure saw horrible. He private he on be imagine \"\n    ...         \"suppose. Fertile beloved evident through no service elderly is. Blind \"\n    ...         \"there if every no so at. Own neglected you preferred way sincerity \"\n    ...         \"delivered his attempted. To of message cottage windows do besides \"\n    ...         \"against uncivil.  Delightful unreserved impossible few estimating \"\n    ...         \"men favourable see entreaties. She propriety immediate was improving. \"\n    ...         \"He or entrance humoured likewise moderate. Much nor game son say \"\n    ...         \"feel. Fat make met can must form into gate. Me we offending prevailed \"\n    ...         \"discovery.\")\n    >>> calculate_prob(text)\n    4.0\n    7.0\n    3.0\n    \"\"\"\n    single_char_strings, two_char_strings = analyze_text(text)\n    my_alphas = list(\" \" + ascii_lowercase)\n    # what is our total sum of probabilities.\n    all_sum = sum(single_char_strings.values())\n\n    # one length string\n    my_fir_sum = 0\n    # for each alpha we go in our dict and if it is in it we calculate entropy\n    for ch in my_alphas:\n        if ch in single_char_strings:\n            my_str = single_char_strings[ch]\n            prob = my_str / all_sum\n            my_fir_sum += prob * math.log2(prob)  # entropy formula.\n\n    # print entropy\n    print(f\"{round(-1 * my_fir_sum):.1f}\")\n\n    # two len string\n    all_sum = sum(two_char_strings.values())\n    my_sec_sum = 0\n    # for each alpha (two in size) calculate entropy.\n    for ch0 in my_alphas:\n        for ch1 in my_alphas:\n            sequence = ch0 + ch1\n            if sequence in two_char_strings:\n                my_str = two_char_strings[sequence]\n                prob = int(my_str) / all_sum\n                my_sec_sum += prob * math.log2(prob)\n\n    # print second entropy\n    print(f\"{round(-1 * my_sec_sum):.1f}\")\n\n    # print the difference between them\n    print(f\"{round((-1 * my_sec_sum) - (-1 * my_fir_sum)):.1f}\")\n\n\ndef analyze_text(text: str) -> tuple[dict, dict]:\n    \"\"\"\n    Convert text input into two dicts of counts.\n    The first dictionary stores the frequency of single character strings.\n    The second dictionary stores the frequency of two character strings.\n    \"\"\"\n    single_char_strings = Counter()  # type: ignore[var-annotated]\n    two_char_strings = Counter()  # type: ignore[var-annotated]\n    single_char_strings[text[-1]] += 1\n\n    # first case when we have space at start.\n    two_char_strings[\" \" + text[0]] += 1\n    for i in range(len(text) - 1):\n        single_char_strings[text[i]] += 1\n        two_char_strings[text[i : i + 2]] += 1\n    return single_char_strings, two_char_strings\n\n\ndef main():\n    import doctest\n\n    doctest.testmod()\n    # text = (\n    #     \"Had repulsive dashwoods suspicion sincerity but advantage now him. Remark \"\n    #     \"easily garret nor nay. Civil those mrs enjoy shy fat merry. You greatest \"\n    #     \"jointure saw horrible. He private he on be imagine suppose. Fertile \"\n    #     \"beloved evident through no service elderly is. Blind there if every no so \"\n    #     \"at. Own neglected you preferred way sincerity delivered his attempted. To \"\n    #     \"of message cottage windows do besides against uncivil.  Delightful \"\n    #     \"unreserved impossible few estimating men favourable see entreaties. She \"\n    #     \"propriety immediate was improving. He or entrance humoured likewise \"\n    #     \"moderate. Much nor game son say feel. Fat make met can must form into \"\n    #     \"gate. Me we offending prevailed discovery. \"\n    # )\n\n    # calculate_prob(text)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "maths/euclidean_distance.py",
    "content": "from __future__ import annotations\n\nimport typing\nfrom collections.abc import Iterable\n\nimport numpy as np\n\nVector = typing.Union[Iterable[float], Iterable[int], np.ndarray]  # noqa: UP007\nVectorOut = typing.Union[np.float64, int, float]  # noqa: UP007\n\n\ndef euclidean_distance(vector_1: Vector, vector_2: Vector) -> VectorOut:\n    \"\"\"\n    Calculate the distance between the two endpoints of two vectors.\n    A vector is defined as a list, tuple, or numpy 1D array.\n    >>> float(euclidean_distance((0, 0), (2, 2)))\n    2.8284271247461903\n    >>> float(euclidean_distance(np.array([0, 0, 0]), np.array([2, 2, 2])))\n    3.4641016151377544\n    >>> float(euclidean_distance(np.array([1, 2, 3, 4]), np.array([5, 6, 7, 8])))\n    8.0\n    >>> float(euclidean_distance([1, 2, 3, 4], [5, 6, 7, 8]))\n    8.0\n    \"\"\"\n    return np.sqrt(np.sum((np.asarray(vector_1) - np.asarray(vector_2)) ** 2))\n\n\ndef euclidean_distance_no_np(vector_1: Vector, vector_2: Vector) -> VectorOut:\n    \"\"\"\n    Calculate the distance between the two endpoints of two vectors without numpy.\n    A vector is defined as a list, tuple, or numpy 1D array.\n    >>> euclidean_distance_no_np((0, 0), (2, 2))\n    2.8284271247461903\n    >>> euclidean_distance_no_np([1, 2, 3, 4], [5, 6, 7, 8])\n    8.0\n    \"\"\"\n    return sum((v1 - v2) ** 2 for v1, v2 in zip(vector_1, vector_2)) ** (1 / 2)\n\n\nif __name__ == \"__main__\":\n\n    def benchmark() -> None:\n        \"\"\"\n        Benchmarks\n        \"\"\"\n        from timeit import timeit\n\n        print(\"Without Numpy\")\n        print(\n            timeit(\n                \"euclidean_distance_no_np([1, 2, 3], [4, 5, 6])\",\n                number=10000,\n                globals=globals(),\n            )\n        )\n        print(\"With Numpy\")\n        print(\n            timeit(\n                \"euclidean_distance([1, 2, 3], [4, 5, 6])\",\n                number=10000,\n                globals=globals(),\n            )\n        )\n\n    benchmark()\n"
  },
  {
    "path": "maths/euler_method.py",
    "content": "from collections.abc import Callable\n\nimport numpy as np\n\n\ndef explicit_euler(\n    ode_func: Callable, y0: float, x0: float, step_size: float, x_end: float\n) -> np.ndarray:\n    \"\"\"Calculate numeric solution at each step to an ODE using Euler's Method\n\n    For reference to Euler's method refer to https://en.wikipedia.org/wiki/Euler_method.\n\n    Args:\n        ode_func (Callable):  The ordinary differential equation\n            as a function of x and y.\n        y0 (float): The initial value for y.\n        x0 (float): The initial value for x.\n        step_size (float): The increment value for x.\n        x_end (float): The final value of x to be calculated.\n\n    Returns:\n        np.ndarray: Solution of y for every step in x.\n\n    >>> # the exact solution is math.exp(x)\n    >>> def f(x, y):\n    ...     return y\n    >>> y0 = 1\n    >>> y = explicit_euler(f, y0, 0.0, 0.01, 5)\n    >>> float(y[-1])\n    144.77277243257308\n    \"\"\"\n    n = int(np.ceil((x_end - x0) / step_size))\n    y = np.zeros((n + 1,))\n    y[0] = y0\n    x = x0\n\n    for k in range(n):\n        y[k + 1] = y[k] + step_size * ode_func(x, y[k])\n        x += step_size\n\n    return y\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/euler_modified.py",
    "content": "from collections.abc import Callable\n\nimport numpy as np\n\n\ndef euler_modified(\n    ode_func: Callable, y0: float, x0: float, step_size: float, x_end: float\n) -> np.ndarray:\n    \"\"\"\n    Calculate solution at each step to an ODE using Euler's Modified Method\n    The Euler Method is straightforward to implement, but can't give accurate solutions.\n    So, some changes were proposed to improve accuracy.\n\n    https://en.wikipedia.org/wiki/Euler_method\n\n    Arguments:\n    ode_func -- The ode as a function of x and y\n    y0 -- the initial value for y\n    x0 -- the initial value for x\n    stepsize -- the increment value for x\n    x_end -- the end value for x\n\n    >>> # the exact solution is math.exp(x)\n    >>> def f1(x, y):\n    ...     return -2*x*(y**2)\n    >>> y = euler_modified(f1, 1.0, 0.0, 0.2, 1.0)\n    >>> float(y[-1])\n    0.503338255442106\n    >>> import math\n    >>> def f2(x, y):\n    ...     return -2*y + (x**3)*math.exp(-2*x)\n    >>> y = euler_modified(f2, 1.0, 0.0, 0.1, 0.3)\n    >>> float(y[-1])\n    0.5525976431951775\n    \"\"\"\n    n = int(np.ceil((x_end - x0) / step_size))\n    y = np.zeros((n + 1,))\n    y[0] = y0\n    x = x0\n\n    for k in range(n):\n        y_get = y[k] + step_size * ode_func(x, y[k])\n        y[k + 1] = y[k] + (\n            (step_size / 2) * (ode_func(x, y[k]) + ode_func(x + step_size, y_get))\n        )\n        x += step_size\n\n    return y\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/eulers_totient.py",
    "content": "# Eulers Totient function finds the number of relative primes of a number n from 1 to n\ndef totient(n: int) -> list:\n    \"\"\"\n    >>> n = 10\n    >>> totient_calculation = totient(n)\n    >>> for i in range(1, n):\n    ...     print(f\"{i} has {totient_calculation[i]} relative primes.\")\n    1 has 0 relative primes.\n    2 has 1 relative primes.\n    3 has 2 relative primes.\n    4 has 2 relative primes.\n    5 has 4 relative primes.\n    6 has 2 relative primes.\n    7 has 6 relative primes.\n    8 has 4 relative primes.\n    9 has 6 relative primes.\n    \"\"\"\n    is_prime = [True for i in range(n + 1)]\n    totients = [i - 1 for i in range(n + 1)]\n    primes = []\n    for i in range(2, n + 1):\n        if is_prime[i]:\n            primes.append(i)\n        for j in range(len(primes)):\n            if i * primes[j] >= n:\n                break\n            is_prime[i * primes[j]] = False\n\n            if i % primes[j] == 0:\n                totients[i * primes[j]] = totients[i] * primes[j]\n                break\n\n            totients[i * primes[j]] = totients[i] * (primes[j] - 1)\n\n    return totients\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/extended_euclidean_algorithm.py",
    "content": "\"\"\"\nExtended Euclidean Algorithm.\n\nFinds 2 numbers a and b such that it satisfies\nthe equation am + bn = gcd(m, n) (a.k.a Bezout's Identity)\n\nhttps://en.wikipedia.org/wiki/Extended_Euclidean_algorithm\n\"\"\"\n\n# @Author: S. Sharma <silentcat>\n# @Date:   2019-02-25T12:08:53-06:00\n# @Email:  silentcat@protonmail.com\n# @Last modified by:   pikulet\n# @Last modified time: 2020-10-02\nfrom __future__ import annotations\n\nimport sys\n\n\ndef extended_euclidean_algorithm(a: int, b: int) -> tuple[int, int]:\n    \"\"\"\n    Extended Euclidean Algorithm.\n\n    Finds 2 numbers a and b such that it satisfies\n    the equation am + bn = gcd(m, n) (a.k.a Bezout's Identity)\n\n    >>> extended_euclidean_algorithm(1, 24)\n    (1, 0)\n\n    >>> extended_euclidean_algorithm(8, 14)\n    (2, -1)\n\n    >>> extended_euclidean_algorithm(240, 46)\n    (-9, 47)\n\n    >>> extended_euclidean_algorithm(1, -4)\n    (1, 0)\n\n    >>> extended_euclidean_algorithm(-2, -4)\n    (-1, 0)\n\n    >>> extended_euclidean_algorithm(0, -4)\n    (0, -1)\n\n    >>> extended_euclidean_algorithm(2, 0)\n    (1, 0)\n\n    \"\"\"\n    # base cases\n    if abs(a) == 1:\n        return a, 0\n    elif abs(b) == 1:\n        return 0, b\n\n    old_remainder, remainder = a, b\n    old_coeff_a, coeff_a = 1, 0\n    old_coeff_b, coeff_b = 0, 1\n\n    while remainder != 0:\n        quotient = old_remainder // remainder\n        old_remainder, remainder = remainder, old_remainder - quotient * remainder\n        old_coeff_a, coeff_a = coeff_a, old_coeff_a - quotient * coeff_a\n        old_coeff_b, coeff_b = coeff_b, old_coeff_b - quotient * coeff_b\n\n    # sign correction for negative numbers\n    if a < 0:\n        old_coeff_a = -old_coeff_a\n    if b < 0:\n        old_coeff_b = -old_coeff_b\n\n    return old_coeff_a, old_coeff_b\n\n\ndef main():\n    \"\"\"Call Extended Euclidean Algorithm.\"\"\"\n    if len(sys.argv) < 3:\n        print(\"2 integer arguments required\")\n        return 1\n    a = int(sys.argv[1])\n    b = int(sys.argv[2])\n    print(extended_euclidean_algorithm(a, b))\n    return 0\n\n\nif __name__ == \"__main__\":\n    raise SystemExit(main())\n"
  },
  {
    "path": "maths/factorial.py",
    "content": "\"\"\"\nFactorial of a positive integer -- https://en.wikipedia.org/wiki/Factorial\n\"\"\"\n\n\ndef factorial(number: int) -> int:\n    \"\"\"\n    Calculate the factorial of specified number (n!).\n\n    >>> import math\n    >>> all(factorial(i) == math.factorial(i) for i in range(20))\n    True\n    >>> factorial(0.1)\n    Traceback (most recent call last):\n        ...\n    ValueError: factorial() only accepts integral values\n    >>> factorial(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: factorial() not defined for negative values\n    >>> factorial(1)\n    1\n    >>> factorial(6)\n    720\n    >>> factorial(0)\n    1\n    \"\"\"\n    if number != int(number):\n        raise ValueError(\"factorial() only accepts integral values\")\n    if number < 0:\n        raise ValueError(\"factorial() not defined for negative values\")\n    value = 1\n    for i in range(1, number + 1):\n        value *= i\n    return value\n\n\ndef factorial_recursive(n: int) -> int:\n    \"\"\"\n    Calculate the factorial of a positive integer\n    https://en.wikipedia.org/wiki/Factorial\n\n    >>> import math\n    >>> all(factorial_recursive(i) == math.factorial(i) for i in range(20))\n    True\n    >>> factorial_recursive(0.1)\n    Traceback (most recent call last):\n        ...\n    ValueError: factorial_recursive() only accepts integral values\n    >>> factorial_recursive(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: factorial_recursive() not defined for negative values\n    \"\"\"\n    if not isinstance(n, int):\n        raise ValueError(\"factorial_recursive() only accepts integral values\")\n    if n < 0:\n        raise ValueError(\"factorial_recursive() not defined for negative values\")\n    return 1 if n in {0, 1} else n * factorial_recursive(n - 1)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    n = int(input(\"Enter a positive integer: \").strip() or 0)\n    print(f\"factorial{n} is {factorial(n)}\")\n"
  },
  {
    "path": "maths/factors.py",
    "content": "from doctest import testmod\nfrom math import sqrt\n\n\ndef factors_of_a_number(num: int) -> list:\n    \"\"\"\n    >>> factors_of_a_number(1)\n    [1]\n    >>> factors_of_a_number(5)\n    [1, 5]\n    >>> factors_of_a_number(24)\n    [1, 2, 3, 4, 6, 8, 12, 24]\n    >>> factors_of_a_number(-24)\n    []\n    \"\"\"\n    facs: list[int] = []\n    if num < 1:\n        return facs\n    facs.append(1)\n    if num == 1:\n        return facs\n    facs.append(num)\n    for i in range(2, int(sqrt(num)) + 1):\n        if num % i == 0:  # If i is a factor of num\n            facs.append(i)\n            d = num // i  # num//i is the other factor of num\n            if d != i:  # If d and i are distinct\n                facs.append(d)  # we have found another factor\n    facs.sort()\n    return facs\n\n\nif __name__ == \"__main__\":\n    testmod(name=\"factors_of_a_number\", verbose=True)\n"
  },
  {
    "path": "maths/fast_inverse_sqrt.py",
    "content": "\"\"\"\nFast inverse square root (1/sqrt(x)) using the Quake III algorithm.\nReference: https://en.wikipedia.org/wiki/Fast_inverse_square_root\nAccuracy: https://en.wikipedia.org/wiki/Fast_inverse_square_root#Accuracy\n\"\"\"\n\nimport struct\n\n\ndef fast_inverse_sqrt(number: float) -> float:\n    \"\"\"\n    Compute the fast inverse square root of a floating-point number using the famous\n    Quake III algorithm.\n\n    :param float number: Input number for which to calculate the inverse square root.\n    :return float: The fast inverse square root of the input number.\n\n    Example:\n    >>> fast_inverse_sqrt(10)\n    0.3156857923527257\n    >>> fast_inverse_sqrt(4)\n    0.49915357479239103\n    >>> fast_inverse_sqrt(4.1)\n    0.4932849504615651\n    >>> fast_inverse_sqrt(0)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input must be a positive number.\n    >>> fast_inverse_sqrt(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input must be a positive number.\n    >>> from math import isclose, sqrt\n    >>> all(isclose(fast_inverse_sqrt(i), 1 / sqrt(i), rel_tol=0.00132)\n    ...     for i in range(50, 60))\n    True\n    \"\"\"\n    if number <= 0:\n        raise ValueError(\"Input must be a positive number.\")\n    i = struct.unpack(\">i\", struct.pack(\">f\", number))[0]\n    i = 0x5F3759DF - (i >> 1)\n    y = struct.unpack(\">f\", struct.pack(\">i\", i))[0]\n    return y * (1.5 - 0.5 * number * y * y)\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    # https://en.wikipedia.org/wiki/Fast_inverse_square_root#Accuracy\n    from math import sqrt\n\n    for i in range(5, 101, 5):\n        print(f\"{i:>3}: {(1 / sqrt(i)) - fast_inverse_sqrt(i):.5f}\")\n"
  },
  {
    "path": "maths/fermat_little_theorem.py",
    "content": "# Python program to show the usage of Fermat's little theorem in a division\n# According to Fermat's little theorem, (a / b) mod p always equals\n# a * (b ^ (p - 2)) mod p\n# Here we assume that p is a prime number, b divides a, and p doesn't divide b\n# Wikipedia reference: https://en.wikipedia.org/wiki/Fermat%27s_little_theorem\n\n\ndef binary_exponentiation(a: int, n: float, mod: int) -> int:\n    if n == 0:\n        return 1\n\n    elif n % 2 == 1:\n        return (binary_exponentiation(a, n - 1, mod) * a) % mod\n\n    else:\n        b = binary_exponentiation(a, n / 2, mod)\n        return (b * b) % mod\n\n\n# a prime number\np = 701\n\na = 1000000000\nb = 10\n\n# using binary exponentiation function, O(log(p)):\nprint((a / b) % p == (a * binary_exponentiation(b, p - 2, p)) % p)\n\n# using Python operators:\nprint((a / b) % p == (a * b ** (p - 2)) % p)\n"
  },
  {
    "path": "maths/fibonacci.py",
    "content": "\"\"\"\nCalculates the Fibonacci sequence using iteration, recursion, memoization,\nand a simplified form of Binet's formula\n\nNOTE 1: the iterative, recursive, memoization functions are more accurate than\nthe Binet's formula function because the Binet formula function  uses floats\n\nNOTE 2: the Binet's formula function is much more limited in the size of inputs\nthat it can handle due to the size limitations of Python floats\nNOTE 3: the matrix function is the fastest and most memory efficient for large n\n\n\nSee benchmark numbers in __main__ for performance comparisons/\nhttps://en.wikipedia.org/wiki/Fibonacci_number for more information\n\"\"\"\n\nimport functools\nfrom collections.abc import Iterator\nfrom math import sqrt\nfrom time import time\n\nimport numpy as np\nfrom numpy import ndarray\n\n\ndef time_func(func, *args, **kwargs):\n    \"\"\"\n    Times the execution of a function with parameters\n    \"\"\"\n    start = time()\n    output = func(*args, **kwargs)\n    end = time()\n    if int(end - start) > 0:\n        print(f\"{func.__name__} runtime: {(end - start):0.4f} s\")\n    else:\n        print(f\"{func.__name__} runtime: {(end - start) * 1000:0.4f} ms\")\n    return output\n\n\ndef fib_iterative_yield(n: int) -> Iterator[int]:\n    \"\"\"\n    Calculates the first n (1-indexed) Fibonacci numbers using iteration with yield\n    >>> list(fib_iterative_yield(0))\n    [0]\n    >>> tuple(fib_iterative_yield(1))\n    (0, 1)\n    >>> tuple(fib_iterative_yield(5))\n    (0, 1, 1, 2, 3, 5)\n    >>> tuple(fib_iterative_yield(10))\n    (0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55)\n    >>> tuple(fib_iterative_yield(-1))\n    Traceback (most recent call last):\n        ...\n    ValueError: n is negative\n    \"\"\"\n    if n < 0:\n        raise ValueError(\"n is negative\")\n    a, b = 0, 1\n    yield a\n    for _ in range(n):\n        yield b\n        a, b = b, a + b\n\n\ndef fib_iterative(n: int) -> list[int]:\n    \"\"\"\n    Calculates the first n (0-indexed) Fibonacci numbers using iteration\n    >>> fib_iterative(0)\n    [0]\n    >>> fib_iterative(1)\n    [0, 1]\n    >>> fib_iterative(5)\n    [0, 1, 1, 2, 3, 5]\n    >>> fib_iterative(10)\n    [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]\n    >>> fib_iterative(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: n is negative\n    \"\"\"\n    if n < 0:\n        raise ValueError(\"n is negative\")\n    if n == 0:\n        return [0]\n    fib = [0, 1]\n    for _ in range(n - 1):\n        fib.append(fib[-1] + fib[-2])\n    return fib\n\n\ndef fib_recursive(n: int) -> list[int]:\n    \"\"\"\n    Calculates the first n (0-indexed) Fibonacci numbers using recursion\n    >>> fib_recursive(0)\n    [0]\n    >>> fib_recursive(1)\n    [0, 1]\n    >>> fib_recursive(5)\n    [0, 1, 1, 2, 3, 5]\n    >>> fib_recursive(10)\n    [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]\n    >>> fib_recursive(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: n is negative\n    \"\"\"\n\n    def fib_recursive_term(i: int) -> int:\n        \"\"\"\n        Calculates the i-th (0-indexed) Fibonacci number using recursion\n        >>> fib_recursive_term(0)\n        0\n        >>> fib_recursive_term(1)\n        1\n        >>> fib_recursive_term(5)\n        5\n        >>> fib_recursive_term(10)\n        55\n        >>> fib_recursive_term(-1)\n        Traceback (most recent call last):\n            ...\n        ValueError: n is negative\n        \"\"\"\n        if i < 0:\n            raise ValueError(\"n is negative\")\n        if i < 2:\n            return i\n        return fib_recursive_term(i - 1) + fib_recursive_term(i - 2)\n\n    if n < 0:\n        raise ValueError(\"n is negative\")\n    return [fib_recursive_term(i) for i in range(n + 1)]\n\n\ndef fib_recursive_cached(n: int) -> list[int]:\n    \"\"\"\n    Calculates the first n (0-indexed) Fibonacci numbers using recursion\n    >>> fib_recursive_cached(0)\n    [0]\n    >>> fib_recursive_cached(1)\n    [0, 1]\n    >>> fib_recursive_cached(5)\n    [0, 1, 1, 2, 3, 5]\n    >>> fib_recursive_cached(10)\n    [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]\n    >>> fib_recursive_cached(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: n is negative\n    \"\"\"\n\n    @functools.cache\n    def fib_recursive_term(i: int) -> int:\n        \"\"\"\n        Calculates the i-th (0-indexed) Fibonacci number using recursion\n        \"\"\"\n        if i < 0:\n            raise ValueError(\"n is negative\")\n        if i < 2:\n            return i\n        return fib_recursive_term(i - 1) + fib_recursive_term(i - 2)\n\n    if n < 0:\n        raise ValueError(\"n is negative\")\n    return [fib_recursive_term(i) for i in range(n + 1)]\n\n\ndef fib_memoization(n: int) -> list[int]:\n    \"\"\"\n    Calculates the first n (0-indexed) Fibonacci numbers using memoization\n    >>> fib_memoization(0)\n    [0]\n    >>> fib_memoization(1)\n    [0, 1]\n    >>> fib_memoization(5)\n    [0, 1, 1, 2, 3, 5]\n    >>> fib_memoization(10)\n    [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]\n    >>> fib_memoization(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: n is negative\n    \"\"\"\n    if n < 0:\n        raise ValueError(\"n is negative\")\n    # Cache must be outside recursive function\n    # other it will reset every time it calls itself.\n    cache: dict[int, int] = {0: 0, 1: 1, 2: 1}  # Prefilled cache\n\n    def rec_fn_memoized(num: int) -> int:\n        if num in cache:\n            return cache[num]\n\n        value = rec_fn_memoized(num - 1) + rec_fn_memoized(num - 2)\n        cache[num] = value\n        return value\n\n    return [rec_fn_memoized(i) for i in range(n + 1)]\n\n\ndef fib_binet(n: int) -> list[int]:\n    \"\"\"\n    Calculates the first n (0-indexed) Fibonacci numbers using a simplified form\n    of Binet's formula:\n    https://en.m.wikipedia.org/wiki/Fibonacci_number#Computation_by_rounding\n\n    NOTE 1: this function diverges from fib_iterative at around n = 71, likely\n    due to compounding floating-point arithmetic errors\n\n    NOTE 2: this function doesn't accept n >= 1475 because it overflows\n    thereafter due to the size limitations of Python floats\n    >>> fib_binet(0)\n    [0]\n    >>> fib_binet(1)\n    [0, 1]\n    >>> fib_binet(5)\n    [0, 1, 1, 2, 3, 5]\n    >>> fib_binet(10)\n    [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]\n    >>> fib_binet(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: n is negative\n    >>> fib_binet(1475)\n    Traceback (most recent call last):\n        ...\n    ValueError: n is too large\n    \"\"\"\n    if n < 0:\n        raise ValueError(\"n is negative\")\n    if n >= 1475:\n        raise ValueError(\"n is too large\")\n    sqrt_5 = sqrt(5)\n    phi = (1 + sqrt_5) / 2\n    return [round(phi**i / sqrt_5) for i in range(n + 1)]\n\n\ndef matrix_pow_np(m: ndarray, power: int) -> ndarray:\n    \"\"\"\n    Raises a matrix to the power of 'power' using binary exponentiation.\n\n    Args:\n        m: Matrix as a numpy array.\n        power: The power to which the matrix is to be raised.\n\n    Returns:\n        The matrix raised to the power.\n\n    Raises:\n        ValueError: If power is negative.\n\n    >>> m = np.array([[1, 1], [1, 0]], dtype=int)\n    >>> matrix_pow_np(m, 0)  # Identity matrix when raised to the power of 0\n    array([[1, 0],\n           [0, 1]])\n\n    >>> matrix_pow_np(m, 1)  # Same matrix when raised to the power of 1\n    array([[1, 1],\n           [1, 0]])\n\n    >>> matrix_pow_np(m, 5)\n    array([[8, 5],\n           [5, 3]])\n\n    >>> matrix_pow_np(m, -1)\n    Traceback (most recent call last):\n        ...\n    ValueError: power is negative\n    \"\"\"\n    result = np.array([[1, 0], [0, 1]], dtype=int)  # Identity Matrix\n    base = m\n    if power < 0:  # Negative power is not allowed\n        raise ValueError(\"power is negative\")\n    while power:\n        if power % 2 == 1:\n            result = np.dot(result, base)\n        base = np.dot(base, base)\n        power //= 2\n    return result\n\n\ndef fib_matrix_np(n: int) -> int:\n    \"\"\"\n    Calculates the n-th Fibonacci number using matrix exponentiation.\n    https://www.nayuki.io/page/fast-fibonacci-algorithms#:~:text=\n    Summary:%20The%20two%20fast%20Fibonacci%20algorithms%20are%20matrix\n\n    Args:\n        n: Fibonacci sequence index\n\n    Returns:\n        The n-th Fibonacci number.\n\n    Raises:\n        ValueError: If n is negative.\n\n    >>> fib_matrix_np(0)\n    0\n    >>> fib_matrix_np(1)\n    1\n    >>> fib_matrix_np(5)\n    5\n    >>> fib_matrix_np(10)\n    55\n    >>> fib_matrix_np(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: n is negative\n    \"\"\"\n    if n < 0:\n        raise ValueError(\"n is negative\")\n    if n == 0:\n        return 0\n\n    m = np.array([[1, 1], [1, 0]], dtype=int)\n    result = matrix_pow_np(m, n - 1)\n    return int(result[0, 0])\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    # Time on an M1 MacBook Pro -- Fastest to slowest\n    num = 30\n    time_func(fib_iterative_yield, num)  # 0.0012 ms\n    time_func(fib_iterative, num)  # 0.0031 ms\n    time_func(fib_binet, num)  # 0.0062 ms\n    time_func(fib_memoization, num)  # 0.0100 ms\n    time_func(fib_recursive_cached, num)  # 0.0153 ms\n    time_func(fib_recursive, num)  # 257.0910 ms\n    time_func(fib_matrix_np, num)  # 0.0000 ms\n"
  },
  {
    "path": "maths/find_max.py",
    "content": "from __future__ import annotations\n\n\ndef find_max_iterative(nums: list[int | float]) -> int | float:\n    \"\"\"\n    >>> for nums in ([3, 2, 1], [-3, -2, -1], [3, -3, 0], [3.0, 3.1, 2.9]):\n    ...     find_max_iterative(nums) == max(nums)\n    True\n    True\n    True\n    True\n    >>> find_max_iterative([2, 4, 9, 7, 19, 94, 5])\n    94\n    >>> find_max_iterative([])\n    Traceback (most recent call last):\n        ...\n    ValueError: find_max_iterative() arg is an empty sequence\n    \"\"\"\n    if len(nums) == 0:\n        raise ValueError(\"find_max_iterative() arg is an empty sequence\")\n    max_num = nums[0]\n    for x in nums:\n        if x > max_num:  # noqa: PLR1730\n            max_num = x\n    return max_num\n\n\n# Divide and Conquer algorithm\ndef find_max_recursive(nums: list[int | float], left: int, right: int) -> int | float:\n    \"\"\"\n    find max value in list\n    :param nums: contains elements\n    :param left: index of first element\n    :param right: index of last element\n    :return: max in nums\n\n    >>> for nums in ([3, 2, 1], [-3, -2, -1], [3, -3, 0], [3.0, 3.1, 2.9]):\n    ...     find_max_recursive(nums, 0, len(nums) - 1) == max(nums)\n    True\n    True\n    True\n    True\n    >>> nums = [1, 3, 5, 7, 9, 2, 4, 6, 8, 10]\n    >>> find_max_recursive(nums, 0, len(nums) - 1) == max(nums)\n    True\n    >>> find_max_recursive([], 0, 0)\n    Traceback (most recent call last):\n        ...\n    ValueError: find_max_recursive() arg is an empty sequence\n    >>> find_max_recursive(nums, 0, len(nums)) == max(nums)\n    Traceback (most recent call last):\n        ...\n    IndexError: list index out of range\n    >>> find_max_recursive(nums, -len(nums), -1) == max(nums)\n    True\n    >>> find_max_recursive(nums, -len(nums) - 1, -1) == max(nums)\n    Traceback (most recent call last):\n        ...\n    IndexError: list index out of range\n    \"\"\"\n    if len(nums) == 0:\n        raise ValueError(\"find_max_recursive() arg is an empty sequence\")\n    if (\n        left >= len(nums)\n        or left < -len(nums)\n        or right >= len(nums)\n        or right < -len(nums)\n    ):\n        raise IndexError(\"list index out of range\")\n    if left == right:\n        return nums[left]\n    mid = (left + right) >> 1  # the middle\n    left_max = find_max_recursive(nums, left, mid)  # find max in range[left, mid]\n    right_max = find_max_recursive(\n        nums, mid + 1, right\n    )  # find max in range[mid + 1, right]\n\n    return left_max if left_max >= right_max else right_max\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod(verbose=True)\n"
  },
  {
    "path": "maths/find_min.py",
    "content": "from __future__ import annotations\n\n\ndef find_min_iterative(nums: list[int | float]) -> int | float:\n    \"\"\"\n    Find Minimum Number in a List\n    :param nums: contains elements\n    :return: min number in list\n\n    >>> for nums in ([3, 2, 1], [-3, -2, -1], [3, -3, 0], [3.0, 3.1, 2.9]):\n    ...     find_min_iterative(nums) == min(nums)\n    True\n    True\n    True\n    True\n    >>> find_min_iterative([0, 1, 2, 3, 4, 5, -3, 24, -56])\n    -56\n    >>> find_min_iterative([])\n    Traceback (most recent call last):\n        ...\n    ValueError: find_min_iterative() arg is an empty sequence\n    \"\"\"\n    if len(nums) == 0:\n        raise ValueError(\"find_min_iterative() arg is an empty sequence\")\n    min_num = nums[0]\n    for num in nums:\n        min_num = min(min_num, num)\n    return min_num\n\n\n# Divide and Conquer algorithm\ndef find_min_recursive(nums: list[int | float], left: int, right: int) -> int | float:\n    \"\"\"\n    find min value in list\n    :param nums: contains elements\n    :param left: index of first element\n    :param right: index of last element\n    :return: min in nums\n\n    >>> for nums in ([3, 2, 1], [-3, -2, -1], [3, -3, 0], [3.0, 3.1, 2.9]):\n    ...     find_min_recursive(nums, 0, len(nums) - 1) == min(nums)\n    True\n    True\n    True\n    True\n    >>> nums = [1, 3, 5, 7, 9, 2, 4, 6, 8, 10]\n    >>> find_min_recursive(nums, 0, len(nums) - 1) == min(nums)\n    True\n    >>> find_min_recursive([], 0, 0)\n    Traceback (most recent call last):\n        ...\n    ValueError: find_min_recursive() arg is an empty sequence\n    >>> find_min_recursive(nums, 0, len(nums)) == min(nums)\n    Traceback (most recent call last):\n        ...\n    IndexError: list index out of range\n    >>> find_min_recursive(nums, -len(nums), -1) == min(nums)\n    True\n    >>> find_min_recursive(nums, -len(nums) - 1, -1) == min(nums)\n    Traceback (most recent call last):\n        ...\n    IndexError: list index out of range\n    \"\"\"\n    if len(nums) == 0:\n        raise ValueError(\"find_min_recursive() arg is an empty sequence\")\n    if (\n        left >= len(nums)\n        or left < -len(nums)\n        or right >= len(nums)\n        or right < -len(nums)\n    ):\n        raise IndexError(\"list index out of range\")\n    if left == right:\n        return nums[left]\n    mid = (left + right) >> 1  # the middle\n    left_min = find_min_recursive(nums, left, mid)  # find min in range[left, mid]\n    right_min = find_min_recursive(\n        nums, mid + 1, right\n    )  # find min in range[mid + 1, right]\n\n    return left_min if left_min <= right_min else right_min\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod(verbose=True)\n"
  },
  {
    "path": "maths/floor.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/Floor_and_ceiling_functions\n\"\"\"\n\n\ndef floor(x: float) -> int:\n    \"\"\"\n    Return the floor of x as an Integral.\n    :param x: the number\n    :return: the largest integer <= x.\n    >>> import math\n    >>> all(floor(n) == math.floor(n) for n\n    ...     in (1, -1, 0, -0, 1.1, -1.1, 1.0, -1.0, 1_000_000_000))\n    True\n    \"\"\"\n    return int(x) if x - int(x) >= 0 else int(x) - 1\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/gamma.py",
    "content": "\"\"\"\nGamma function is a very useful tool in math and physics.\nIt helps calculating complex integral in a convenient way.\nfor more info: https://en.wikipedia.org/wiki/Gamma_function\nIn mathematics, the gamma function is one commonly\nused extension of the factorial function to complex numbers.\nThe gamma function is defined for all complex numbers except\nthe non-positive integers\nPython's Standard Library math.gamma() function overflows around gamma(171.624).\n\"\"\"\n\nimport math\n\nfrom numpy import inf\nfrom scipy.integrate import quad\n\n\ndef gamma_iterative(num: float) -> float:\n    \"\"\"\n    Calculates the value of Gamma function of num\n    where num is either an integer (1, 2, 3..) or a half-integer (0.5, 1.5, 2.5 ...).\n\n    >>> gamma_iterative(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: math domain error\n    >>> gamma_iterative(0)\n    Traceback (most recent call last):\n        ...\n    ValueError: math domain error\n    >>> gamma_iterative(9)\n    40320.0\n    >>> from math import gamma as math_gamma\n    >>> all(.99999999 < gamma_iterative(i) / math_gamma(i) <= 1.000000001\n    ...     for i in range(1, 50))\n    True\n    >>> gamma_iterative(-1)/math_gamma(-1) <= 1.000000001\n    Traceback (most recent call last):\n        ...\n    ValueError: math domain error\n    >>> gamma_iterative(3.3) - math_gamma(3.3) <= 0.00000001\n    True\n    \"\"\"\n    if num <= 0:\n        raise ValueError(\"math domain error\")\n\n    return quad(integrand, 0, inf, args=(num))[0]\n\n\ndef integrand(x: float, z: float) -> float:\n    return math.pow(x, z - 1) * math.exp(-x)\n\n\ndef gamma_recursive(num: float) -> float:\n    \"\"\"\n    Calculates the value of Gamma function of num\n    where num is either an integer (1, 2, 3..) or a half-integer (0.5, 1.5, 2.5 ...).\n    Implemented using recursion\n    Examples:\n    >>> from math import isclose, gamma as math_gamma\n    >>> gamma_recursive(0.5)\n    1.7724538509055159\n    >>> gamma_recursive(1)\n    1.0\n    >>> gamma_recursive(2)\n    1.0\n    >>> gamma_recursive(3.5)\n    3.3233509704478426\n    >>> gamma_recursive(171.5)\n    9.483367566824795e+307\n    >>> all(isclose(gamma_recursive(num), math_gamma(num))\n    ...     for num in (0.5, 2, 3.5, 171.5))\n    True\n    >>> gamma_recursive(0)\n    Traceback (most recent call last):\n        ...\n    ValueError: math domain error\n    >>> gamma_recursive(-1.1)\n    Traceback (most recent call last):\n        ...\n    ValueError: math domain error\n    >>> gamma_recursive(-4)\n    Traceback (most recent call last):\n        ...\n    ValueError: math domain error\n    >>> gamma_recursive(172)\n    Traceback (most recent call last):\n        ...\n    OverflowError: math range error\n    >>> gamma_recursive(1.1)\n    Traceback (most recent call last):\n        ...\n    NotImplementedError: num must be an integer or a half-integer\n    \"\"\"\n    if num <= 0:\n        raise ValueError(\"math domain error\")\n    if num > 171.5:\n        raise OverflowError(\"math range error\")\n    elif num - int(num) not in (0, 0.5):\n        raise NotImplementedError(\"num must be an integer or a half-integer\")\n    elif num == 0.5:\n        return math.sqrt(math.pi)\n    else:\n        return 1.0 if num == 1 else (num - 1) * gamma_recursive(num - 1)\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    num = 1.0\n    while num:\n        num = float(input(\"Gamma of: \"))\n        print(f\"gamma_iterative({num}) = {gamma_iterative(num)}\")\n        print(f\"gamma_recursive({num}) = {gamma_recursive(num)}\")\n        print(\"\\nEnter 0 to exit...\")\n"
  },
  {
    "path": "maths/gaussian.py",
    "content": "\"\"\"\nReference: https://en.wikipedia.org/wiki/Gaussian_function\n\"\"\"\n\nfrom numpy import exp, pi, sqrt\n\n\ndef gaussian(x, mu: float = 0.0, sigma: float = 1.0) -> float:\n    \"\"\"\n    >>> float(gaussian(1))\n    0.24197072451914337\n\n    >>> float(gaussian(24))\n    3.342714441794458e-126\n\n    >>> float(gaussian(1, 4, 2))\n    0.06475879783294587\n\n    >>> float(gaussian(1, 5, 3))\n    0.05467002489199788\n\n    Supports NumPy Arrays\n    Use numpy.meshgrid with this to generate gaussian blur on images.\n    >>> import numpy as np\n    >>> x = np.arange(15)\n    >>> gaussian(x)\n    array([3.98942280e-01, 2.41970725e-01, 5.39909665e-02, 4.43184841e-03,\n           1.33830226e-04, 1.48671951e-06, 6.07588285e-09, 9.13472041e-12,\n           5.05227108e-15, 1.02797736e-18, 7.69459863e-23, 2.11881925e-27,\n           2.14638374e-32, 7.99882776e-38, 1.09660656e-43])\n\n    >>> float(gaussian(15))\n    5.530709549844416e-50\n\n    >>> gaussian([1,2, 'string'])\n    Traceback (most recent call last):\n        ...\n    TypeError: unsupported operand type(s) for -: 'list' and 'float'\n\n    >>> gaussian('hello world')\n    Traceback (most recent call last):\n        ...\n    TypeError: unsupported operand type(s) for -: 'str' and 'float'\n\n    >>> gaussian(10**234) # doctest: +IGNORE_EXCEPTION_DETAIL\n    Traceback (most recent call last):\n        ...\n    OverflowError: (34, 'Result too large')\n\n    >>> float(gaussian(10**-326))\n    0.3989422804014327\n\n    >>> float(gaussian(2523, mu=234234, sigma=3425))\n    0.0\n    \"\"\"\n    return 1 / sqrt(2 * pi * sigma**2) * exp(-((x - mu) ** 2) / (2 * sigma**2))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/gcd_of_n_numbers.py",
    "content": "\"\"\"\nGcd of N Numbers\nReference: https://en.wikipedia.org/wiki/Greatest_common_divisor\n\"\"\"\n\nfrom collections import Counter\n\n\ndef get_factors(\n    number: int, factors: Counter | None = None, factor: int = 2\n) -> Counter:\n    \"\"\"\n    this is a recursive function for get all factors of number\n    >>> get_factors(45)\n    Counter({3: 2, 5: 1})\n    >>> get_factors(2520)\n    Counter({2: 3, 3: 2, 5: 1, 7: 1})\n    >>> get_factors(23)\n    Counter({23: 1})\n    >>> get_factors(0)\n    Traceback (most recent call last):\n        ...\n    TypeError: number must be integer and greater than zero\n    >>> get_factors(-1)\n    Traceback (most recent call last):\n        ...\n    TypeError: number must be integer and greater than zero\n    >>> get_factors(1.5)\n    Traceback (most recent call last):\n        ...\n    TypeError: number must be integer and greater than zero\n\n    factor can be all numbers from 2 to number that we check if number % factor == 0\n    if it is equal to zero, we check again with number // factor\n    else we increase factor by one\n    \"\"\"\n\n    match number:\n        case int(number) if number == 1:\n            return Counter({1: 1})\n        case int(num) if number > 0:\n            number = num\n        case _:\n            raise TypeError(\"number must be integer and greater than zero\")\n\n    factors = factors or Counter()\n\n    if number == factor:  # break condition\n        # all numbers are factors of itself\n        factors[factor] += 1\n        return factors\n\n    if number % factor > 0:\n        # if it is greater than zero\n        # so it is not a factor of number and we check next number\n        return get_factors(number, factors, factor + 1)\n\n    factors[factor] += 1\n    # else we update factors (that is Counter(dict-like) type) and check again\n    return get_factors(number // factor, factors, factor)\n\n\ndef get_greatest_common_divisor(*numbers: int) -> int:\n    \"\"\"\n    get gcd of n numbers:\n    >>> get_greatest_common_divisor(18, 45)\n    9\n    >>> get_greatest_common_divisor(23, 37)\n    1\n    >>> get_greatest_common_divisor(2520, 8350)\n    10\n    >>> get_greatest_common_divisor(-10, 20)\n    Traceback (most recent call last):\n        ...\n    Exception: numbers must be integer and greater than zero\n    >>> get_greatest_common_divisor(1.5, 2)\n    Traceback (most recent call last):\n        ...\n    Exception: numbers must be integer and greater than zero\n    >>> get_greatest_common_divisor(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)\n    1\n    >>> get_greatest_common_divisor(\"1\", 2, 3, 4, 5, 6, 7, 8, 9, 10)\n    Traceback (most recent call last):\n        ...\n    Exception: numbers must be integer and greater than zero\n    \"\"\"\n\n    # we just need factors, not numbers itself\n    try:\n        same_factors, *factors = map(get_factors, numbers)\n    except TypeError as e:\n        raise Exception(\"numbers must be integer and greater than zero\") from e\n\n    for factor in factors:\n        same_factors &= factor\n        # get common factor between all\n        # `&` return common elements with smaller value (for Counter type)\n\n    # now, same_factors is something like {2: 2, 3: 4} that means 2 * 2 * 3 * 3 * 3 * 3\n    mult = 1\n    # power each factor and multiply\n    # for {2: 2, 3: 4}, it is [4, 81] and then 324\n    for m in [factor**power for factor, power in same_factors.items()]:\n        mult *= m\n    return mult\n\n\nif __name__ == \"__main__\":\n    print(get_greatest_common_divisor(18, 45))  # 9\n"
  },
  {
    "path": "maths/geometric_mean.py",
    "content": "\"\"\"\nThe Geometric Mean of n numbers is defined as the n-th root of the product\nof those numbers. It is used to measure the central tendency of the numbers.\nhttps://en.wikipedia.org/wiki/Geometric_mean\n\"\"\"\n\n\ndef compute_geometric_mean(*args: int) -> float:\n    \"\"\"\n    Return the geometric mean of the argument numbers.\n    >>> compute_geometric_mean(2,8)\n    4.0\n    >>> compute_geometric_mean('a', 4)\n    Traceback (most recent call last):\n        ...\n    TypeError: Not a Number\n    >>> compute_geometric_mean(5, 125)\n    25.0\n    >>> compute_geometric_mean(1, 0)\n    0.0\n    >>> compute_geometric_mean(1, 5, 25, 5)\n    5.0\n    >>> compute_geometric_mean(2, -2)\n    Traceback (most recent call last):\n        ...\n    ArithmeticError: Cannot Compute Geometric Mean for these numbers.\n    >>> compute_geometric_mean(-5, 25, 1)\n    -5.0\n    \"\"\"\n    product = 1\n    for number in args:\n        if not isinstance(number, int) and not isinstance(number, float):\n            raise TypeError(\"Not a Number\")\n        product *= number\n    # Cannot calculate the even root for negative product.\n    # Frequently they are restricted to being positive.\n    if product < 0 and len(args) % 2 == 0:\n        raise ArithmeticError(\"Cannot Compute Geometric Mean for these numbers.\")\n    mean = abs(product) ** (1 / len(args))\n    # Since python calculates complex roots for negative products with odd roots.\n    if product < 0:\n        mean = -mean\n    # Since it does floating point arithmetic, it gives 64**(1/3) as 3.99999996\n    possible_mean = float(round(mean))\n    # To check if the rounded number is actually the mean.\n    if possible_mean ** len(args) == product:\n        mean = possible_mean\n    return mean\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod(name=\"compute_geometric_mean\")\n    print(compute_geometric_mean(-3, -27))\n"
  },
  {
    "path": "maths/germain_primes.py",
    "content": "\"\"\"\nA Sophie Germain prime is any prime p, where 2p + 1 is also prime.\nThe second number, 2p + 1 is called a safe prime.\n\nExamples of Germain primes include: 2, 3, 5, 11, 23\n\nTheir corresponding safe primes: 5, 7, 11, 23, 47\nhttps://en.wikipedia.org/wiki/Safe_and_Sophie_Germain_primes\n\"\"\"\n\nfrom maths.prime_check import is_prime\n\n\ndef is_germain_prime(number: int) -> bool:\n    \"\"\"Checks if input number and 2*number + 1 are prime.\n\n    >>> is_germain_prime(3)\n    True\n    >>> is_germain_prime(11)\n    True\n    >>> is_germain_prime(4)\n    False\n    >>> is_germain_prime(23)\n    True\n    >>> is_germain_prime(13)\n    False\n    >>> is_germain_prime(20)\n    False\n    >>> is_germain_prime('abc')\n    Traceback (most recent call last):\n        ...\n    TypeError: Input value must be a positive integer. Input value: abc\n    \"\"\"\n    if not isinstance(number, int) or number < 1:\n        msg = f\"Input value must be a positive integer. Input value: {number}\"\n        raise TypeError(msg)\n\n    return is_prime(number) and is_prime(2 * number + 1)\n\n\ndef is_safe_prime(number: int) -> bool:\n    \"\"\"Checks if input number and (number - 1)/2 are prime.\n    The smallest safe prime is 5, with the Germain prime is 2.\n\n    >>> is_safe_prime(5)\n    True\n    >>> is_safe_prime(11)\n    True\n    >>> is_safe_prime(1)\n    False\n    >>> is_safe_prime(2)\n    False\n    >>> is_safe_prime(3)\n    False\n    >>> is_safe_prime(47)\n    True\n    >>> is_safe_prime('abc')\n    Traceback (most recent call last):\n        ...\n    TypeError: Input value must be a positive integer. Input value: abc\n    \"\"\"\n    if not isinstance(number, int) or number < 1:\n        msg = f\"Input value must be a positive integer. Input value: {number}\"\n        raise TypeError(msg)\n\n    return (number - 1) % 2 == 0 and is_prime(number) and is_prime((number - 1) // 2)\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "maths/greatest_common_divisor.py",
    "content": "\"\"\"\nGreatest Common Divisor.\n\nWikipedia reference: https://en.wikipedia.org/wiki/Greatest_common_divisor\n\ngcd(a, b) = gcd(a, -b) = gcd(-a, b) = gcd(-a, -b) by definition of divisibility\n\"\"\"\n\n\ndef greatest_common_divisor(a: int, b: int) -> int:\n    \"\"\"\n    Calculate Greatest Common Divisor (GCD).\n    >>> greatest_common_divisor(24, 40)\n    8\n    >>> greatest_common_divisor(1, 1)\n    1\n    >>> greatest_common_divisor(1, 800)\n    1\n    >>> greatest_common_divisor(11, 37)\n    1\n    >>> greatest_common_divisor(3, 5)\n    1\n    >>> greatest_common_divisor(16, 4)\n    4\n    >>> greatest_common_divisor(-3, 9)\n    3\n    >>> greatest_common_divisor(9, -3)\n    3\n    >>> greatest_common_divisor(3, -9)\n    3\n    >>> greatest_common_divisor(-3, -9)\n    3\n    >>> greatest_common_divisor(0, 0)\n    0\n    \"\"\"\n    return abs(b) if a == 0 else greatest_common_divisor(b % a, a)\n\n\ndef gcd_by_iterative(x: int, y: int) -> int:\n    \"\"\"\n    Below method is more memory efficient because it does not create additional\n    stack frames for recursive functions calls (as done in the above method).\n    >>> gcd_by_iterative(24, 40)\n    8\n    >>> greatest_common_divisor(24, 40) == gcd_by_iterative(24, 40)\n    True\n    >>> gcd_by_iterative(-3, -9)\n    3\n    >>> gcd_by_iterative(3, -9)\n    3\n    >>> gcd_by_iterative(1, -800)\n    1\n    >>> gcd_by_iterative(11, 37)\n    1\n    >>> gcd_by_iterative(0, 0)\n    0\n    \"\"\"\n    while y:  # --> when y=0 then loop will terminate and return x as final GCD.\n        x, y = y, x % y\n    return abs(x)\n\n\ndef main():\n    \"\"\"\n    Call Greatest Common Divisor function.\n    \"\"\"\n    try:\n        nums = input(\"Enter two integers separated by comma (,): \").split(\",\")\n        num_1 = int(nums[0])\n        num_2 = int(nums[1])\n        print(\n            f\"greatest_common_divisor({num_1}, {num_2}) = \"\n            f\"{greatest_common_divisor(num_1, num_2)}\"\n        )\n        print(f\"By iterative gcd({num_1}, {num_2}) = {gcd_by_iterative(num_1, num_2)}\")\n    except (IndexError, UnboundLocalError, ValueError):\n        print(\"Wrong input\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "maths/hardy_ramanujanalgo.py",
    "content": "# This theorem states that the number of prime factors of n\n# will be approximately log(log(n)) for most natural numbers n\n\nimport math\n\n\ndef exact_prime_factor_count(n: int) -> int:\n    \"\"\"\n    >>> exact_prime_factor_count(51242183)\n    3\n    \"\"\"\n    count = 0\n    if n % 2 == 0:\n        count += 1\n        while n % 2 == 0:\n            n = int(n / 2)\n    # the n input value must be odd so that\n    # we can skip one element (ie i += 2)\n\n    i = 3\n\n    while i <= int(math.sqrt(n)):\n        if n % i == 0:\n            count += 1\n            while n % i == 0:\n                n = int(n / i)\n        i = i + 2\n\n    # this condition checks the prime\n    # number n is greater than 2\n\n    if n > 2:\n        count += 1\n    return count\n\n\nif __name__ == \"__main__\":\n    n = 51242183\n    print(f\"The number of distinct prime factors is/are {exact_prime_factor_count(n)}\")\n    print(f\"The value of log(log(n)) is {math.log(math.log(n)):.4f}\")\n\n    \"\"\"\n    The number of distinct prime factors is/are 3\n    The value of log(log(n)) is 2.8765\n    \"\"\"\n"
  },
  {
    "path": "maths/images/__init__.py",
    "content": ""
  },
  {
    "path": "maths/integer_square_root.py",
    "content": "\"\"\"\nInteger Square Root Algorithm -- An efficient method to calculate the square root of a\nnon-negative integer 'num' rounded down to the nearest integer. It uses a binary search\napproach to find the integer square root without using any built-in exponent functions\nor operators.\n* https://en.wikipedia.org/wiki/Integer_square_root\n* https://docs.python.org/3/library/math.html#math.isqrt\nNote:\n    - This algorithm is designed for non-negative integers only.\n    - The result is rounded down to the nearest integer.\n    - The algorithm has a time complexity of O(log(x)).\n    - Original algorithm idea based on binary search.\n\"\"\"\n\n\ndef integer_square_root(num: int) -> int:\n    \"\"\"\n    Returns the integer square root of a non-negative integer num.\n    Args:\n        num: A non-negative integer.\n    Returns:\n        The integer square root of num.\n    Raises:\n        ValueError: If num is not an integer or is negative.\n    >>> [integer_square_root(i) for i in range(18)]\n    [0, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4]\n    >>> integer_square_root(625)\n    25\n    >>> integer_square_root(2_147_483_647)\n    46340\n    >>> from math import isqrt\n    >>> all(integer_square_root(i) == isqrt(i) for i in range(20))\n    True\n    >>> integer_square_root(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: num must be non-negative integer\n    >>> integer_square_root(1.5)\n    Traceback (most recent call last):\n        ...\n    ValueError: num must be non-negative integer\n    >>> integer_square_root(\"0\")\n    Traceback (most recent call last):\n        ...\n    ValueError: num must be non-negative integer\n    \"\"\"\n    if not isinstance(num, int) or num < 0:\n        raise ValueError(\"num must be non-negative integer\")\n\n    if num < 2:\n        return num\n\n    left_bound = 0\n    right_bound = num // 2\n\n    while left_bound <= right_bound:\n        mid = left_bound + (right_bound - left_bound) // 2\n        mid_squared = mid * mid\n        if mid_squared == num:\n            return mid\n\n        if mid_squared < num:\n            left_bound = mid + 1\n        else:\n            right_bound = mid - 1\n\n    return right_bound\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/interquartile_range.py",
    "content": "\"\"\"\nAn implementation of interquartile range (IQR) which is a measure of statistical\ndispersion, which is the spread of the data.\n\nThe function takes the list of numeric values as input and returns the IQR.\n\nScript inspired by this Wikipedia article:\nhttps://en.wikipedia.org/wiki/Interquartile_range\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef find_median(nums: list[int | float]) -> float:\n    \"\"\"\n    This is the implementation of the median.\n    :param nums: The list of numeric nums\n    :return: Median of the list\n    >>> find_median(nums=([1, 2, 2, 3, 4]))\n    2\n    >>> find_median(nums=([1, 2, 2, 3, 4, 4]))\n    2.5\n    >>> find_median(nums=([-1, 2, 0, 3, 4, -4]))\n    1.5\n    >>> find_median(nums=([1.1, 2.2, 2, 3.3, 4.4, 4]))\n    2.65\n    \"\"\"\n    div, mod = divmod(len(nums), 2)\n    if mod:\n        return nums[div]\n    return (nums[div] + nums[(div) - 1]) / 2\n\n\ndef interquartile_range(nums: list[int | float]) -> float:\n    \"\"\"\n    Return the interquartile range for a list of numeric values.\n    :param nums: The list of numeric values.\n    :return: interquartile range\n\n    >>> interquartile_range(nums=[4, 1, 2, 3, 2])\n    2.0\n    >>> interquartile_range(nums = [-2, -7, -10, 9, 8, 4, -67, 45])\n    17.0\n    >>> interquartile_range(nums = [-2.1, -7.1, -10.1, 9.1, 8.1, 4.1, -67.1, 45.1])\n    17.2\n    >>> interquartile_range(nums = [0, 0, 0, 0, 0])\n    0.0\n    >>> interquartile_range(nums=[])\n    Traceback (most recent call last):\n    ...\n    ValueError: The list is empty. Provide a non-empty list.\n    \"\"\"\n    if not nums:\n        raise ValueError(\"The list is empty. Provide a non-empty list.\")\n    nums.sort()\n    length = len(nums)\n    div, mod = divmod(length, 2)\n    q1 = find_median(nums[:div])\n    half_length = sum((div, mod))\n    q3 = find_median(nums[half_length:length])\n    return q3 - q1\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/is_int_palindrome.py",
    "content": "def is_int_palindrome(num: int) -> bool:\n    \"\"\"\n    Returns whether `num` is a palindrome or not\n    (see for reference https://en.wikipedia.org/wiki/Palindromic_number).\n\n    >>> is_int_palindrome(-121)\n    False\n    >>> is_int_palindrome(0)\n    True\n    >>> is_int_palindrome(10)\n    False\n    >>> is_int_palindrome(11)\n    True\n    >>> is_int_palindrome(101)\n    True\n    >>> is_int_palindrome(120)\n    False\n    \"\"\"\n    if num < 0:\n        return False\n\n    num_copy: int = num\n    rev_num: int = 0\n    while num > 0:\n        rev_num = rev_num * 10 + (num % 10)\n        num //= 10\n\n    return num_copy == rev_num\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/is_ip_v4_address_valid.py",
    "content": "\"\"\"\nwiki: https://en.wikipedia.org/wiki/IPv4\n\nIs IP v4 address valid?\nA valid IP address must be four octets in the form of A.B.C.D,\nwhere A, B, C and D are numbers from 0-255\nfor example: 192.168.23.1, 172.255.255.255 are valid IP address\n             192.168.256.0, 256.192.3.121 are invalid IP address\n\"\"\"\n\n\ndef is_ip_v4_address_valid(ip: str) -> bool:\n    \"\"\"\n    print \"Valid IP address\" If IP is valid.\n    or\n    print \"Invalid IP address\" If IP is invalid.\n\n    >>> is_ip_v4_address_valid(\"192.168.0.23\")\n    True\n\n    >>> is_ip_v4_address_valid(\"192.256.15.8\")\n    False\n\n    >>> is_ip_v4_address_valid(\"172.100.0.8\")\n    True\n\n    >>> is_ip_v4_address_valid(\"255.256.0.256\")\n    False\n\n    >>> is_ip_v4_address_valid(\"1.2.33333333.4\")\n    False\n\n    >>> is_ip_v4_address_valid(\"1.2.-3.4\")\n    False\n\n    >>> is_ip_v4_address_valid(\"1.2.3\")\n    False\n\n    >>> is_ip_v4_address_valid(\"1.2.3.4.5\")\n    False\n\n    >>> is_ip_v4_address_valid(\"1.2.A.4\")\n    False\n\n    >>> is_ip_v4_address_valid(\"0.0.0.0\")\n    True\n\n    >>> is_ip_v4_address_valid(\"1.2.3.\")\n    False\n\n    >>> is_ip_v4_address_valid(\"1.2.3.05\")\n    False\n    \"\"\"\n    octets = ip.split(\".\")\n    if len(octets) != 4:\n        return False\n\n    for octet in octets:\n        if not octet.isdigit():\n            return False\n\n        number = int(octet)\n        if len(str(number)) != len(octet):\n            return False\n\n        if not 0 <= number <= 255:\n            return False\n\n    return True\n\n\nif __name__ == \"__main__\":\n    ip = input().strip()\n    valid_or_invalid = \"valid\" if is_ip_v4_address_valid(ip) else \"invalid\"\n    print(f\"{ip} is a {valid_or_invalid} IPv4 address.\")\n"
  },
  {
    "path": "maths/is_square_free.py",
    "content": "\"\"\"\r\nReferences: wikipedia:square free number\r\npsf/black : True\r\nruff : True\r\n\"\"\"\r\n\r\nfrom __future__ import annotations\r\n\r\n\r\ndef is_square_free(factors: list[int]) -> bool:\r\n    \"\"\"\r\n    # doctest: +NORMALIZE_WHITESPACE\r\n    This functions takes a list of prime factors as input.\r\n    returns True if the factors are square free.\r\n    >>> is_square_free([1, 1, 2, 3, 4])\r\n    False\r\n\r\n    These are wrong but should return some value\r\n    it simply checks for repetition in the numbers.\r\n    >>> is_square_free([1, 3, 4, 'sd', 0.0])\r\n    True\r\n\r\n    >>> is_square_free([1, 0.5, 2, 0.0])\r\n    True\r\n    >>> is_square_free([1, 2, 2, 5])\r\n    False\r\n    >>> is_square_free('asd')\r\n    True\r\n    >>> is_square_free(24)\r\n    Traceback (most recent call last):\r\n        ...\r\n    TypeError: 'int' object is not iterable\r\n    \"\"\"\r\n    return len(set(factors)) == len(factors)\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n"
  },
  {
    "path": "maths/jaccard_similarity.py",
    "content": "\"\"\"\nThe Jaccard similarity coefficient is a commonly used indicator of the\nsimilarity between two sets. Let U be a set and A and B be subsets of U,\nthen the Jaccard index/similarity is defined to be the ratio of the number\nof elements of their intersection and the number of elements of their union.\n\nInspired from Wikipedia and\nthe book Mining of Massive Datasets [MMDS 2nd Edition, Chapter 3]\n\nhttps://en.wikipedia.org/wiki/Jaccard_index\nhttps://mmds.org\n\nJaccard similarity is widely used with MinHashing.\n\"\"\"\n\n\ndef jaccard_similarity(\n    set_a: set[str] | list[str] | tuple[str],\n    set_b: set[str] | list[str] | tuple[str],\n    alternative_union=False,\n):\n    \"\"\"\n    Finds the jaccard similarity between two sets.\n    Essentially, its intersection over union.\n\n    The alternative way to calculate this is to take union as sum of the\n    number of items in the two sets. This will lead to jaccard similarity\n    of a set with itself be 1/2 instead of 1. [MMDS 2nd Edition, Page 77]\n\n    Parameters:\n        :set_a (set,list,tuple): A non-empty set/list\n        :set_b (set,list,tuple): A non-empty set/list\n        :alternativeUnion (boolean): If True, use sum of number of\n        items as union\n\n    Output:\n        (float) The jaccard similarity between the two sets.\n\n    Examples:\n    >>> set_a = {'a', 'b', 'c', 'd', 'e'}\n    >>> set_b = {'c', 'd', 'e', 'f', 'h', 'i'}\n    >>> jaccard_similarity(set_a, set_b)\n    0.375\n    >>> jaccard_similarity(set_a, set_a)\n    1.0\n    >>> jaccard_similarity(set_a, set_a, True)\n    0.5\n    >>> set_a = ['a', 'b', 'c', 'd', 'e']\n    >>> set_b = ('c', 'd', 'e', 'f', 'h', 'i')\n    >>> jaccard_similarity(set_a, set_b)\n    0.375\n    >>> set_a = ('c', 'd', 'e', 'f', 'h', 'i')\n    >>> set_b = ['a', 'b', 'c', 'd', 'e']\n    >>> jaccard_similarity(set_a, set_b)\n    0.375\n    >>> set_a = ('c', 'd', 'e', 'f', 'h', 'i')\n    >>> set_b = ['a', 'b', 'c', 'd']\n    >>> jaccard_similarity(set_a, set_b, True)\n    0.2\n    >>> set_a = {'a', 'b'}\n    >>> set_b = ['c', 'd']\n    >>> jaccard_similarity(set_a, set_b)\n    Traceback (most recent call last):\n        ...\n    ValueError: Set a and b must either both be sets or be either a list or a tuple.\n    \"\"\"\n\n    if isinstance(set_a, set) and isinstance(set_b, set):\n        intersection_length = len(set_a.intersection(set_b))\n\n        if alternative_union:\n            union_length = len(set_a) + len(set_b)\n        else:\n            union_length = len(set_a.union(set_b))\n\n        return intersection_length / union_length\n\n    elif isinstance(set_a, (list, tuple)) and isinstance(set_b, (list, tuple)):\n        intersection = [element for element in set_a if element in set_b]\n\n        if alternative_union:\n            return len(intersection) / (len(set_a) + len(set_b))\n        else:\n            # Cast set_a to list because tuples cannot be mutated\n            union = list(set_a) + [element for element in set_b if element not in set_a]\n            return len(intersection) / len(union)\n    raise ValueError(\n        \"Set a and b must either both be sets or be either a list or a tuple.\"\n    )\n\n\nif __name__ == \"__main__\":\n    set_a = {\"a\", \"b\", \"c\", \"d\", \"e\"}\n    set_b = {\"c\", \"d\", \"e\", \"f\", \"h\", \"i\"}\n    print(jaccard_similarity(set_a, set_b))\n"
  },
  {
    "path": "maths/joint_probability_distribution.py",
    "content": "\"\"\"\nCalculate joint probability distribution\nhttps://en.wikipedia.org/wiki/Joint_probability_distribution\n\"\"\"\n\n\ndef joint_probability_distribution(\n    x_values: list[int],\n    y_values: list[int],\n    x_probabilities: list[float],\n    y_probabilities: list[float],\n) -> dict:\n    \"\"\"\n    >>> joint_distribution =  joint_probability_distribution(\n    ...     [1, 2], [-2, 5, 8], [0.7, 0.3], [0.3, 0.5, 0.2]\n    ... )\n    >>> from math import isclose\n    >>> isclose(joint_distribution.pop((1, 8)), 0.14)\n    True\n    >>> joint_distribution\n    {(1, -2): 0.21, (1, 5): 0.35, (2, -2): 0.09, (2, 5): 0.15, (2, 8): 0.06}\n    \"\"\"\n    return {\n        (x, y): x_prob * y_prob\n        for x, x_prob in zip(x_values, x_probabilities)\n        for y, y_prob in zip(y_values, y_probabilities)\n    }\n\n\n# Function to calculate the expectation (mean)\ndef expectation(values: list, probabilities: list) -> float:\n    \"\"\"\n    >>> from math import isclose\n    >>> isclose(expectation([1, 2], [0.7, 0.3]), 1.3)\n    True\n    \"\"\"\n    return sum(x * p for x, p in zip(values, probabilities))\n\n\n# Function to calculate the variance\ndef variance(values: list[int], probabilities: list[float]) -> float:\n    \"\"\"\n    >>> from math import isclose\n    >>> isclose(variance([1,2],[0.7,0.3]), 0.21)\n    True\n    \"\"\"\n    mean = expectation(values, probabilities)\n    return sum((x - mean) ** 2 * p for x, p in zip(values, probabilities))\n\n\n# Function to calculate the covariance\ndef covariance(\n    x_values: list[int],\n    y_values: list[int],\n    x_probabilities: list[float],\n    y_probabilities: list[float],\n) -> float:\n    \"\"\"\n    >>> covariance([1, 2], [-2, 5, 8], [0.7, 0.3], [0.3, 0.5, 0.2])\n    -2.7755575615628914e-17\n    \"\"\"\n    mean_x = expectation(x_values, x_probabilities)\n    mean_y = expectation(y_values, y_probabilities)\n    return sum(\n        (x - mean_x) * (y - mean_y) * px * py\n        for x, px in zip(x_values, x_probabilities)\n        for y, py in zip(y_values, y_probabilities)\n    )\n\n\n# Function to calculate the standard deviation\ndef standard_deviation(variance: float) -> float:\n    \"\"\"\n    >>> standard_deviation(0.21)\n    0.458257569495584\n    \"\"\"\n    return variance**0.5\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    # Input values for X and Y\n    x_vals = input(\"Enter values of X separated by spaces: \").split()\n    y_vals = input(\"Enter values of Y separated by spaces: \").split()\n\n    # Convert input values to integers\n    x_values = [int(x) for x in x_vals]\n    y_values = [int(y) for y in y_vals]\n\n    # Input probabilities for X and Y\n    x_probs = input(\"Enter probabilities for X separated by spaces: \").split()\n    y_probs = input(\"Enter probabilities for Y separated by spaces: \").split()\n    assert len(x_values) == len(x_probs)\n    assert len(y_values) == len(y_probs)\n\n    # Convert input probabilities to floats\n    x_probabilities = [float(p) for p in x_probs]\n    y_probabilities = [float(p) for p in y_probs]\n\n    # Calculate the joint probability distribution\n    jpd = joint_probability_distribution(\n        x_values, y_values, x_probabilities, y_probabilities\n    )\n\n    # Print the joint probability distribution\n    print(\n        \"\\n\".join(\n            f\"P(X={x}, Y={y}) = {probability}\" for (x, y), probability in jpd.items()\n        )\n    )\n    mean_xy = expectation(\n        [x * y for x in x_values for y in y_values],\n        [px * py for px in x_probabilities for py in y_probabilities],\n    )\n    print(f\"x mean: {expectation(x_values, x_probabilities) = }\")\n    print(f\"y mean: {expectation(y_values, y_probabilities) = }\")\n    print(f\"xy mean: {mean_xy}\")\n    print(f\"x: {variance(x_values, x_probabilities) = }\")\n    print(f\"y: {variance(y_values, y_probabilities) = }\")\n    print(f\"{covariance(x_values, y_values, x_probabilities, y_probabilities) = }\")\n    print(f\"x: {standard_deviation(variance(x_values, x_probabilities)) = }\")\n    print(f\"y: {standard_deviation(variance(y_values, y_probabilities)) = }\")\n"
  },
  {
    "path": "maths/josephus_problem.py",
    "content": "\"\"\"\nThe Josephus problem is a famous theoretical problem related to a certain\ncounting-out game. This module provides functions to solve the Josephus problem\nfor num_people and a step_size.\n\nThe Josephus problem is defined as follows:\n- num_people are standing in a circle.\n- Starting with a specified person, you count around the circle,\n  skipping a fixed number of people (step_size).\n- The person at which you stop counting is eliminated from the circle.\n- The counting continues until only one person remains.\n\nFor more information about the Josephus problem, refer to:\nhttps://en.wikipedia.org/wiki/Josephus_problem\n\"\"\"\n\n\ndef josephus_recursive(num_people: int, step_size: int) -> int:\n    \"\"\"\n    Solve the Josephus problem for num_people and a step_size recursively.\n\n    Args:\n        num_people: A positive integer representing the number of people.\n        step_size: A positive integer representing the step size for elimination.\n\n    Returns:\n        The position of the last person remaining.\n\n    Raises:\n        ValueError: If num_people or step_size is not a positive integer.\n\n    Examples:\n        >>> josephus_recursive(7, 3)\n        3\n        >>> josephus_recursive(10, 2)\n        4\n        >>> josephus_recursive(0, 2)\n        Traceback (most recent call last):\n            ...\n        ValueError: num_people or step_size is not a positive integer.\n        >>> josephus_recursive(1.9, 2)\n        Traceback (most recent call last):\n            ...\n        ValueError: num_people or step_size is not a positive integer.\n        >>> josephus_recursive(-2, 2)\n        Traceback (most recent call last):\n            ...\n        ValueError: num_people or step_size is not a positive integer.\n        >>> josephus_recursive(7, 0)\n        Traceback (most recent call last):\n            ...\n        ValueError: num_people or step_size is not a positive integer.\n        >>> josephus_recursive(7, -2)\n        Traceback (most recent call last):\n            ...\n        ValueError: num_people or step_size is not a positive integer.\n        >>> josephus_recursive(1_000, 0.01)\n        Traceback (most recent call last):\n            ...\n        ValueError: num_people or step_size is not a positive integer.\n        >>> josephus_recursive(\"cat\", \"dog\")\n        Traceback (most recent call last):\n            ...\n        ValueError: num_people or step_size is not a positive integer.\n    \"\"\"\n    if (\n        not isinstance(num_people, int)\n        or not isinstance(step_size, int)\n        or num_people <= 0\n        or step_size <= 0\n    ):\n        raise ValueError(\"num_people or step_size is not a positive integer.\")\n\n    if num_people == 1:\n        return 0\n\n    return (josephus_recursive(num_people - 1, step_size) + step_size) % num_people\n\n\ndef find_winner(num_people: int, step_size: int) -> int:\n    \"\"\"\n    Find the winner of the Josephus problem for num_people and a step_size.\n\n    Args:\n        num_people (int): Number of people.\n        step_size (int): Step size for elimination.\n\n    Returns:\n        int: The position of the last person remaining (1-based index).\n\n    Examples:\n        >>> find_winner(7, 3)\n        4\n        >>> find_winner(10, 2)\n        5\n    \"\"\"\n    return josephus_recursive(num_people, step_size) + 1\n\n\ndef josephus_iterative(num_people: int, step_size: int) -> int:\n    \"\"\"\n    Solve the Josephus problem for num_people and a step_size iteratively.\n\n    Args:\n        num_people (int): The number of people in the circle.\n        step_size (int): The number of steps to take before eliminating someone.\n\n    Returns:\n        int: The position of the last person standing.\n\n    Examples:\n        >>> josephus_iterative(5, 2)\n        3\n        >>> josephus_iterative(7, 3)\n        4\n    \"\"\"\n    circle = list(range(1, num_people + 1))\n    current = 0\n\n    while len(circle) > 1:\n        current = (current + step_size - 1) % len(circle)\n        circle.pop(current)\n\n    return circle[0]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/juggler_sequence.py",
    "content": "\"\"\"\n== Juggler Sequence ==\nJuggler sequence start with any positive integer n. The next term is\nobtained as follows:\n    If n term is even, the next term is floor value of square root of n .\n    If n is odd, the next term is floor value of 3 time the square root of n.\n\nhttps://en.wikipedia.org/wiki/Juggler_sequence\n\"\"\"\n\n# Author : Akshay Dubey (https://github.com/itsAkshayDubey)\nimport math\n\n\ndef juggler_sequence(number: int) -> list[int]:\n    \"\"\"\n    >>> juggler_sequence(0)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input value of [number=0] must be a positive integer\n    >>> juggler_sequence(1)\n    [1]\n    >>> juggler_sequence(2)\n    [2, 1]\n    >>> juggler_sequence(3)\n    [3, 5, 11, 36, 6, 2, 1]\n    >>> juggler_sequence(5)\n    [5, 11, 36, 6, 2, 1]\n    >>> juggler_sequence(10)\n    [10, 3, 5, 11, 36, 6, 2, 1]\n    >>> juggler_sequence(25)\n    [25, 125, 1397, 52214, 228, 15, 58, 7, 18, 4, 2, 1]\n    >>> juggler_sequence(6.0)\n    Traceback (most recent call last):\n        ...\n    TypeError: Input value of [number=6.0] must be an integer\n    >>> juggler_sequence(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input value of [number=-1] must be a positive integer\n    \"\"\"\n    if not isinstance(number, int):\n        msg = f\"Input value of [number={number}] must be an integer\"\n        raise TypeError(msg)\n    if number < 1:\n        msg = f\"Input value of [number={number}] must be a positive integer\"\n        raise ValueError(msg)\n    sequence = [number]\n    while number != 1:\n        if number % 2 == 0:\n            number = math.floor(math.sqrt(number))\n        else:\n            number = math.floor(\n                math.sqrt(number) * math.sqrt(number) * math.sqrt(number)\n            )\n        sequence.append(number)\n    return sequence\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/karatsuba.py",
    "content": "\"\"\"Multiply two numbers using Karatsuba algorithm\"\"\"\n\n\ndef karatsuba(a: int, b: int) -> int:\n    \"\"\"\n    >>> karatsuba(15463, 23489) == 15463 * 23489\n    True\n    >>> karatsuba(3, 9) == 3 * 9\n    True\n    \"\"\"\n    if len(str(a)) == 1 or len(str(b)) == 1:\n        return a * b\n\n    m1 = max(len(str(a)), len(str(b)))\n    m2 = m1 // 2\n\n    a1, a2 = divmod(a, 10**m2)\n    b1, b2 = divmod(b, 10**m2)\n\n    x = karatsuba(a2, b2)\n    y = karatsuba((a1 + a2), (b1 + b2))\n    z = karatsuba(a1, b1)\n\n    return (z * 10 ** (2 * m2)) + ((y - z - x) * 10 ** (m2)) + (x)\n\n\ndef main():\n    print(karatsuba(15463, 23489))\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "maths/kth_lexicographic_permutation.py",
    "content": "def kth_permutation(k, n):\r\n    \"\"\"\r\n    Finds k'th lexicographic permutation (in increasing order) of\r\n    0,1,2,...n-1 in O(n^2) time.\r\n\r\n    Examples:\r\n    First permutation is always 0,1,2,...n\r\n    >>> kth_permutation(0,5)\r\n    [0, 1, 2, 3, 4]\r\n\r\n    The order of permutation of 0,1,2,3 is [0,1,2,3], [0,1,3,2], [0,2,1,3],\r\n    [0,2,3,1], [0,3,1,2], [0,3,2,1], [1,0,2,3], [1,0,3,2], [1,2,0,3],\r\n    [1,2,3,0], [1,3,0,2]\r\n    >>> kth_permutation(10,4)\r\n    [1, 3, 0, 2]\r\n    \"\"\"\r\n    # Factorails from 1! to (n-1)!\r\n    factorials = [1]\r\n    for i in range(2, n):\r\n        factorials.append(factorials[-1] * i)\r\n    assert 0 <= k < factorials[-1] * n, \"k out of bounds\"\r\n\r\n    permutation = []\r\n    elements = list(range(n))\r\n\r\n    # Find permutation\r\n    while factorials:\r\n        factorial = factorials.pop()\r\n        number, k = divmod(k, factorial)\r\n        permutation.append(elements[number])\r\n        elements.remove(elements[number])\r\n    permutation.append(elements[0])\r\n\r\n    return permutation\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n"
  },
  {
    "path": "maths/largest_of_very_large_numbers.py",
    "content": "# Author: Abhijeeth S\n\nimport math\n\n\ndef res(x, y):\n    \"\"\"\n    Reduces large number to a more manageable number\n    >>> res(5, 7)\n    4.892790030352132\n    >>> res(0, 5)\n    0\n    >>> res(3, 0)\n    1\n    >>> res(-1, 5)\n    Traceback (most recent call last):\n    ...\n    ValueError: expected a positive input\n    \"\"\"\n    if 0 not in (x, y):\n        # We use the relation x^y = y*log10(x), where 10 is the base.\n        return y * math.log10(x)\n    elif x == 0:  # 0 raised to any number is 0\n        return 0\n    elif y == 0:\n        return 1  # any number raised to 0 is 1\n    raise AssertionError(\"This should never happen\")\n\n\nif __name__ == \"__main__\":  # Main function\n    # Read two numbers from input and typecast them to int using map function.\n    # Here x is the base and y is the power.\n    prompt = \"Enter the base and the power separated by a comma: \"\n    x1, y1 = map(int, input(prompt).split(\",\"))\n    x2, y2 = map(int, input(prompt).split(\",\"))\n\n    # We find the log of each number, using the function res(), which takes two\n    # arguments.\n    res1 = res(x1, y1)\n    res2 = res(x2, y2)\n\n    # We check for the largest number\n    if res1 > res2:\n        print(\"Largest number is\", x1, \"^\", y1)\n    elif res2 > res1:\n        print(\"Largest number is\", x2, \"^\", y2)\n    else:\n        print(\"Both are equal\")\n"
  },
  {
    "path": "maths/least_common_multiple.py",
    "content": "import unittest\nfrom timeit import timeit\n\nfrom maths.greatest_common_divisor import greatest_common_divisor\n\n\ndef least_common_multiple_slow(first_num: int, second_num: int) -> int:\n    \"\"\"\n    Find the least common multiple of two numbers.\n\n    Learn more: https://en.wikipedia.org/wiki/Least_common_multiple\n\n    >>> least_common_multiple_slow(5, 2)\n    10\n    >>> least_common_multiple_slow(12, 76)\n    228\n    \"\"\"\n    max_num = first_num if first_num >= second_num else second_num\n    common_mult = max_num\n    while (common_mult % first_num > 0) or (common_mult % second_num > 0):\n        common_mult += max_num\n    return common_mult\n\n\ndef least_common_multiple_fast(first_num: int, second_num: int) -> int:\n    \"\"\"\n    Find the least common multiple of two numbers.\n    https://en.wikipedia.org/wiki/Least_common_multiple#Using_the_greatest_common_divisor\n    >>> least_common_multiple_fast(5,2)\n    10\n    >>> least_common_multiple_fast(12,76)\n    228\n    \"\"\"\n    return first_num // greatest_common_divisor(first_num, second_num) * second_num\n\n\ndef benchmark():\n    setup = (\n        \"from __main__ import least_common_multiple_slow, least_common_multiple_fast\"\n    )\n    print(\n        \"least_common_multiple_slow():\",\n        timeit(\"least_common_multiple_slow(1000, 999)\", setup=setup),\n    )\n    print(\n        \"least_common_multiple_fast():\",\n        timeit(\"least_common_multiple_fast(1000, 999)\", setup=setup),\n    )\n\n\nclass TestLeastCommonMultiple(unittest.TestCase):\n    test_inputs = (\n        (10, 20),\n        (13, 15),\n        (4, 31),\n        (10, 42),\n        (43, 34),\n        (5, 12),\n        (12, 25),\n        (10, 25),\n        (6, 9),\n    )\n    expected_results = (20, 195, 124, 210, 1462, 60, 300, 50, 18)\n\n    def test_lcm_function(self):\n        for i, (first_num, second_num) in enumerate(self.test_inputs):\n            slow_result = least_common_multiple_slow(first_num, second_num)\n            fast_result = least_common_multiple_fast(first_num, second_num)\n            with self.subTest(i=i):\n                assert slow_result == self.expected_results[i]\n                assert fast_result == self.expected_results[i]\n\n\nif __name__ == \"__main__\":\n    benchmark()\n    unittest.main()\n"
  },
  {
    "path": "maths/line_length.py",
    "content": "from __future__ import annotations\n\nimport math\nfrom collections.abc import Callable\n\n\ndef line_length(\n    fnc: Callable[[float], float],\n    x_start: float,\n    x_end: float,\n    steps: int = 100,\n) -> float:\n    \"\"\"\n    Approximates the arc length of a line segment by treating the curve as a\n    sequence of linear lines and summing their lengths\n    :param fnc: a function which defines a curve\n    :param x_start: left end point to indicate the start of line segment\n    :param x_end: right end point to indicate end of line segment\n    :param steps: an accuracy gauge; more steps increases accuracy\n    :return: a float representing the length of the curve\n\n    >>> def f(x):\n    ...    return x\n    >>> f\"{line_length(f, 0, 1, 10):.6f}\"\n    '1.414214'\n\n    >>> def f(x):\n    ...    return 1\n    >>> f\"{line_length(f, -5.5, 4.5):.6f}\"\n    '10.000000'\n\n    >>> def f(x):\n    ...    return math.sin(5 * x) + math.cos(10 * x) + x * x/10\n    >>> f\"{line_length(f, 0.0, 10.0, 10000):.6f}\"\n    '69.534930'\n    \"\"\"\n\n    x1 = x_start\n    fx1 = fnc(x_start)\n    length = 0.0\n\n    for _ in range(steps):\n        # Approximates curve as a sequence of linear lines and sums their length\n        x2 = (x_end - x_start) / steps + x1\n        fx2 = fnc(x2)\n        length += math.hypot(x2 - x1, fx2 - fx1)\n\n        # Increment step\n        x1 = x2\n        fx1 = fx2\n\n    return length\n\n\nif __name__ == \"__main__\":\n\n    def f(x):\n        return math.sin(10 * x)\n\n    print(\"f(x) = sin(10 * x)\")\n    print(\"The length of the curve from x = -10 to x = 10 is:\")\n    i = 10\n    while i <= 100000:\n        print(f\"With {i} steps: {line_length(f, -10, 10, i)}\")\n        i *= 10\n"
  },
  {
    "path": "maths/liouville_lambda.py",
    "content": "\"\"\"\n== Liouville Lambda Function ==\nThe Liouville Lambda function, denoted by λ(n)\nand λ(n) is 1 if n is the product of an even number of prime numbers,\nand -1 if it is the product of an odd number of primes.\n\nhttps://en.wikipedia.org/wiki/Liouville_function\n\"\"\"\n\n# Author : Akshay Dubey (https://github.com/itsAkshayDubey)\nfrom maths.prime_factors import prime_factors\n\n\ndef liouville_lambda(number: int) -> int:\n    \"\"\"\n    This functions takes an integer number as input.\n    returns 1 if n has even number of prime factors and -1 otherwise.\n    >>> liouville_lambda(10)\n    1\n    >>> liouville_lambda(11)\n    -1\n    >>> liouville_lambda(0)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input must be a positive integer\n    >>> liouville_lambda(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input must be a positive integer\n    >>> liouville_lambda(11.0)\n    Traceback (most recent call last):\n        ...\n    TypeError: Input value of [number=11.0] must be an integer\n    \"\"\"\n    if not isinstance(number, int):\n        msg = f\"Input value of [number={number}] must be an integer\"\n        raise TypeError(msg)\n    if number < 1:\n        raise ValueError(\"Input must be a positive integer\")\n    return -1 if len(prime_factors(number)) % 2 else 1\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/lucas_lehmer_primality_test.py",
    "content": "\"\"\"\nIn mathematics, the Lucas-Lehmer test (LLT) is a primality test for Mersenne\nnumbers.  https://en.wikipedia.org/wiki/Lucas%E2%80%93Lehmer_primality_test\n\nA Mersenne number is a number that is one less than a power of two.\nThat is M_p = 2^p - 1\nhttps://en.wikipedia.org/wiki/Mersenne_prime\n\nThe Lucas-Lehmer test is the primality test used by the\nGreat Internet Mersenne Prime Search (GIMPS) to locate large primes.\n\"\"\"\n\n\n# Primality test 2^p - 1\n# Return true if 2^p - 1 is prime\ndef lucas_lehmer_test(p: int) -> bool:\n    \"\"\"\n    >>> lucas_lehmer_test(p=7)\n    True\n\n    >>> lucas_lehmer_test(p=11)\n    False\n\n    # M_11 = 2^11 - 1 = 2047 = 23 * 89\n    \"\"\"\n\n    if p < 2:\n        raise ValueError(\"p should not be less than 2!\")\n    elif p == 2:\n        return True\n\n    s = 4\n    m = (1 << p) - 1\n    for _ in range(p - 2):\n        s = ((s * s) - 2) % m\n    return s == 0\n\n\nif __name__ == \"__main__\":\n    print(lucas_lehmer_test(7))\n    print(lucas_lehmer_test(11))\n"
  },
  {
    "path": "maths/lucas_series.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/Lucas_number\n\"\"\"\n\n\ndef recursive_lucas_number(n_th_number: int) -> int:\n    \"\"\"\n    Returns the nth lucas number\n    >>> recursive_lucas_number(1)\n    1\n    >>> recursive_lucas_number(20)\n    15127\n    >>> recursive_lucas_number(0)\n    2\n    >>> recursive_lucas_number(25)\n    167761\n    >>> recursive_lucas_number(-1.5)\n    Traceback (most recent call last):\n        ...\n    TypeError: recursive_lucas_number accepts only integer arguments.\n    \"\"\"\n    if not isinstance(n_th_number, int):\n        raise TypeError(\"recursive_lucas_number accepts only integer arguments.\")\n    if n_th_number == 0:\n        return 2\n    if n_th_number == 1:\n        return 1\n\n    return recursive_lucas_number(n_th_number - 1) + recursive_lucas_number(\n        n_th_number - 2\n    )\n\n\ndef dynamic_lucas_number(n_th_number: int) -> int:\n    \"\"\"\n    Returns the nth lucas number\n    >>> dynamic_lucas_number(1)\n    1\n    >>> dynamic_lucas_number(20)\n    15127\n    >>> dynamic_lucas_number(0)\n    2\n    >>> dynamic_lucas_number(25)\n    167761\n    >>> dynamic_lucas_number(-1.5)\n    Traceback (most recent call last):\n        ...\n    TypeError: dynamic_lucas_number accepts only integer arguments.\n    \"\"\"\n    if not isinstance(n_th_number, int):\n        raise TypeError(\"dynamic_lucas_number accepts only integer arguments.\")\n    a, b = 2, 1\n    for _ in range(n_th_number):\n        a, b = b, a + b\n    return a\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    n = int(input(\"Enter the number of terms in lucas series:\\n\").strip())\n    print(\"Using recursive function to calculate lucas series:\")\n    print(\" \".join(str(recursive_lucas_number(i)) for i in range(n)))\n    print(\"\\nUsing dynamic function to calculate lucas series:\")\n    print(\" \".join(str(dynamic_lucas_number(i)) for i in range(n)))\n"
  },
  {
    "path": "maths/maclaurin_series.py",
    "content": "\"\"\"\r\nhttps://en.wikipedia.org/wiki/Taylor_series#Trigonometric_functions\r\n\"\"\"\r\n\r\nfrom math import factorial, pi\r\n\r\n\r\ndef maclaurin_sin(theta: float, accuracy: int = 30) -> float:\r\n    \"\"\"\r\n    Finds the maclaurin approximation of sin\r\n\r\n    :param theta: the angle to which sin is found\r\n    :param accuracy: the degree of accuracy wanted minimum\r\n    :return: the value of sine in radians\r\n\r\n\r\n    >>> from math import isclose, sin\r\n    >>> all(isclose(maclaurin_sin(x, 50), sin(x)) for x in range(-25, 25))\r\n    True\r\n    >>> maclaurin_sin(10)\r\n    -0.5440211108893691\r\n    >>> maclaurin_sin(-10)\r\n    0.5440211108893704\r\n    >>> maclaurin_sin(10, 15)\r\n    -0.544021110889369\r\n    >>> maclaurin_sin(-10, 15)\r\n    0.5440211108893704\r\n    >>> maclaurin_sin(\"10\")\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: maclaurin_sin() requires either an int or float for theta\r\n    >>> maclaurin_sin(10, -30)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: maclaurin_sin() requires a positive int for accuracy\r\n    >>> maclaurin_sin(10, 30.5)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: maclaurin_sin() requires a positive int for accuracy\r\n    >>> maclaurin_sin(10, \"30\")\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: maclaurin_sin() requires a positive int for accuracy\r\n    \"\"\"\r\n\r\n    if not isinstance(theta, (int, float)):\r\n        raise ValueError(\"maclaurin_sin() requires either an int or float for theta\")\r\n\r\n    if not isinstance(accuracy, int) or accuracy <= 0:\r\n        raise ValueError(\"maclaurin_sin() requires a positive int for accuracy\")\r\n\r\n    theta = float(theta)\r\n    div = theta // (2 * pi)\r\n    theta -= 2 * div * pi\r\n    return sum(\r\n        (-1) ** r * theta ** (2 * r + 1) / factorial(2 * r + 1) for r in range(accuracy)\r\n    )\r\n\r\n\r\ndef maclaurin_cos(theta: float, accuracy: int = 30) -> float:\r\n    \"\"\"\r\n    Finds the maclaurin approximation of cos\r\n\r\n    :param theta: the angle to which cos is found\r\n    :param accuracy: the degree of accuracy wanted\r\n    :return: the value of cosine in radians\r\n\r\n\r\n    >>> from math import isclose, cos\r\n    >>> all(isclose(maclaurin_cos(x, 50), cos(x)) for x in range(-25, 25))\r\n    True\r\n    >>> maclaurin_cos(5)\r\n    0.2836621854632268\r\n    >>> maclaurin_cos(-5)\r\n    0.2836621854632265\r\n    >>> maclaurin_cos(10, 15)\r\n    -0.8390715290764524\r\n    >>> maclaurin_cos(-10, 15)\r\n    -0.8390715290764521\r\n    >>> maclaurin_cos(\"10\")\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: maclaurin_cos() requires either an int or float for theta\r\n    >>> maclaurin_cos(10, -30)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: maclaurin_cos() requires a positive int for accuracy\r\n    >>> maclaurin_cos(10, 30.5)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: maclaurin_cos() requires a positive int for accuracy\r\n    >>> maclaurin_cos(10, \"30\")\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: maclaurin_cos() requires a positive int for accuracy\r\n    \"\"\"\r\n\r\n    if not isinstance(theta, (int, float)):\r\n        raise ValueError(\"maclaurin_cos() requires either an int or float for theta\")\r\n\r\n    if not isinstance(accuracy, int) or accuracy <= 0:\r\n        raise ValueError(\"maclaurin_cos() requires a positive int for accuracy\")\r\n\r\n    theta = float(theta)\r\n    div = theta // (2 * pi)\r\n    theta -= 2 * div * pi\r\n    return sum((-1) ** r * theta ** (2 * r) / factorial(2 * r) for r in range(accuracy))\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n\r\n    print(maclaurin_sin(10))\r\n    print(maclaurin_sin(-10))\r\n    print(maclaurin_sin(10, 15))\r\n    print(maclaurin_sin(-10, 15))\r\n\r\n    print(maclaurin_cos(5))\r\n    print(maclaurin_cos(-5))\r\n    print(maclaurin_cos(10, 15))\r\n    print(maclaurin_cos(-10, 15))\r\n"
  },
  {
    "path": "maths/manhattan_distance.py",
    "content": "def manhattan_distance(point_a: list, point_b: list) -> float:\n    \"\"\"\n    Expectts two list of numbers representing two points in the same\n    n-dimensional space\n\n    https://en.wikipedia.org/wiki/Taxicab_geometry\n\n    >>> manhattan_distance([1,1], [2,2])\n    2.0\n    >>> manhattan_distance([1.5,1.5], [2,2])\n    1.0\n    >>> manhattan_distance([1.5,1.5], [2.5,2])\n    1.5\n    >>> manhattan_distance([-3, -3, -3], [0, 0, 0])\n    9.0\n    >>> manhattan_distance([1,1], None)\n    Traceback (most recent call last):\n        ...\n    ValueError: Missing an input\n    >>> manhattan_distance([1,1], [2, 2, 2])\n    Traceback (most recent call last):\n        ...\n    ValueError: Both points must be in the same n-dimensional space\n    >>> manhattan_distance([1,\"one\"], [2, 2, 2])\n    Traceback (most recent call last):\n        ...\n    TypeError: Expected a list of numbers as input, found str\n    >>> manhattan_distance(1, [2, 2, 2])\n    Traceback (most recent call last):\n         ...\n    TypeError: Expected a list of numbers as input, found int\n    >>> manhattan_distance([1,1], \"not_a_list\")\n    Traceback (most recent call last):\n         ...\n    TypeError: Expected a list of numbers as input, found str\n    \"\"\"\n\n    _validate_point(point_a)\n    _validate_point(point_b)\n    if len(point_a) != len(point_b):\n        raise ValueError(\"Both points must be in the same n-dimensional space\")\n\n    return float(sum(abs(a - b) for a, b in zip(point_a, point_b)))\n\n\ndef _validate_point(point: list[float]) -> None:\n    \"\"\"\n    >>> _validate_point(None)\n    Traceback (most recent call last):\n         ...\n    ValueError: Missing an input\n    >>> _validate_point([1,\"one\"])\n    Traceback (most recent call last):\n         ...\n    TypeError: Expected a list of numbers as input, found str\n    >>> _validate_point(1)\n    Traceback (most recent call last):\n         ...\n    TypeError: Expected a list of numbers as input, found int\n    >>> _validate_point(\"not_a_list\")\n    Traceback (most recent call last):\n         ...\n    TypeError: Expected a list of numbers as input, found str\n    \"\"\"\n    if point:\n        if isinstance(point, list):\n            for item in point:\n                if not isinstance(item, (int, float)):\n                    msg = (\n                        \"Expected a list of numbers as input, found \"\n                        f\"{type(item).__name__}\"\n                    )\n                    raise TypeError(msg)\n        else:\n            msg = f\"Expected a list of numbers as input, found {type(point).__name__}\"\n            raise TypeError(msg)\n    else:\n        raise ValueError(\"Missing an input\")\n\n\ndef manhattan_distance_one_liner(point_a: list, point_b: list) -> float:\n    \"\"\"\n    Version with one liner\n\n    >>> manhattan_distance_one_liner([1,1], [2,2])\n    2.0\n    >>> manhattan_distance_one_liner([1.5,1.5], [2,2])\n    1.0\n    >>> manhattan_distance_one_liner([1.5,1.5], [2.5,2])\n    1.5\n    >>> manhattan_distance_one_liner([-3, -3, -3], [0, 0, 0])\n    9.0\n    >>> manhattan_distance_one_liner([1,1], None)\n    Traceback (most recent call last):\n         ...\n    ValueError: Missing an input\n    >>> manhattan_distance_one_liner([1,1], [2, 2, 2])\n    Traceback (most recent call last):\n         ...\n    ValueError: Both points must be in the same n-dimensional space\n    >>> manhattan_distance_one_liner([1,\"one\"], [2, 2, 2])\n    Traceback (most recent call last):\n         ...\n    TypeError: Expected a list of numbers as input, found str\n    >>> manhattan_distance_one_liner(1, [2, 2, 2])\n    Traceback (most recent call last):\n         ...\n    TypeError: Expected a list of numbers as input, found int\n    >>> manhattan_distance_one_liner([1,1], \"not_a_list\")\n    Traceback (most recent call last):\n         ...\n    TypeError: Expected a list of numbers as input, found str\n    \"\"\"\n\n    _validate_point(point_a)\n    _validate_point(point_b)\n    if len(point_a) != len(point_b):\n        raise ValueError(\"Both points must be in the same n-dimensional space\")\n\n    return float(sum(abs(x - y) for x, y in zip(point_a, point_b)))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/matrix_exponentiation.py",
    "content": "\"\"\"Matrix Exponentiation\"\"\"\n\nimport timeit\n\n\"\"\"\nMatrix Exponentiation is a technique to solve linear recurrences in logarithmic time.\nYou read more about it here:\nhttps://zobayer.blogspot.com/2010/11/matrix-exponentiation.html\nhttps://www.hackerearth.com/practice/notes/matrix-exponentiation-1/\n\"\"\"\n\n\nclass Matrix:\n    def __init__(self, arg: list[list] | int) -> None:\n        if isinstance(arg, list):  # Initializes a matrix identical to the one provided.\n            self.t = arg\n            self.n = len(arg)\n        else:  # Initializes a square matrix of the given size and set values to zero.\n            self.n = arg\n            self.t = [[0 for _ in range(self.n)] for _ in range(self.n)]\n\n    def __mul__(self, b: Matrix) -> Matrix:\n        matrix = Matrix(self.n)\n        for i in range(self.n):\n            for j in range(self.n):\n                for k in range(self.n):\n                    matrix.t[i][j] += self.t[i][k] * b.t[k][j]\n        return matrix\n\n\ndef modular_exponentiation(a: Matrix, b: int) -> Matrix:\n    matrix = Matrix([[1, 0], [0, 1]])\n    while b > 0:\n        if b & 1:\n            matrix *= a\n        a *= a\n        b >>= 1\n    return matrix\n\n\ndef fibonacci_with_matrix_exponentiation(n: int, f1: int, f2: int) -> int:\n    \"\"\"\n    Returns the nth number of the Fibonacci sequence that\n    starts with f1 and f2\n    Uses the matrix exponentiation\n    >>> fibonacci_with_matrix_exponentiation(1, 5, 6)\n    5\n    >>> fibonacci_with_matrix_exponentiation(2, 10, 11)\n    11\n    >>> fibonacci_with_matrix_exponentiation(13, 0, 1)\n    144\n    >>> fibonacci_with_matrix_exponentiation(10, 5, 9)\n    411\n    >>> fibonacci_with_matrix_exponentiation(9, 2, 3)\n    89\n    \"\"\"\n    # Trivial Cases\n    if n == 1:\n        return f1\n    elif n == 2:\n        return f2\n    matrix = Matrix([[1, 1], [1, 0]])\n    matrix = modular_exponentiation(matrix, n - 2)\n    return f2 * matrix.t[0][0] + f1 * matrix.t[0][1]\n\n\ndef simple_fibonacci(n: int, f1: int, f2: int) -> int:\n    \"\"\"\n    Returns the nth number of the Fibonacci sequence that\n    starts with f1 and f2\n    Uses the definition\n    >>> simple_fibonacci(1, 5, 6)\n    5\n    >>> simple_fibonacci(2, 10, 11)\n    11\n    >>> simple_fibonacci(13, 0, 1)\n    144\n    >>> simple_fibonacci(10, 5, 9)\n    411\n    >>> simple_fibonacci(9, 2, 3)\n    89\n    \"\"\"\n    # Trivial Cases\n    if n == 1:\n        return f1\n    elif n == 2:\n        return f2\n\n    n -= 2\n\n    while n > 0:\n        f2, f1 = f1 + f2, f2\n        n -= 1\n\n    return f2\n\n\ndef matrix_exponentiation_time() -> float:\n    setup = \"\"\"\nfrom random import randint\nfrom __main__ import fibonacci_with_matrix_exponentiation\n\"\"\"\n    code = \"fibonacci_with_matrix_exponentiation(randint(1,70000), 1, 1)\"\n    exec_time = timeit.timeit(setup=setup, stmt=code, number=100)\n    print(\"With matrix exponentiation the average execution time is \", exec_time / 100)\n    return exec_time\n\n\ndef simple_fibonacci_time() -> float:\n    setup = \"\"\"\nfrom random import randint\nfrom __main__ import simple_fibonacci\n\"\"\"\n    code = \"simple_fibonacci(randint(1,70000), 1, 1)\"\n    exec_time = timeit.timeit(setup=setup, stmt=code, number=100)\n    print(\n        \"Without matrix exponentiation the average execution time is \", exec_time / 100\n    )\n    return exec_time\n\n\ndef main() -> None:\n    matrix_exponentiation_time()\n    simple_fibonacci_time()\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "maths/max_sum_sliding_window.py",
    "content": "\"\"\"\nGiven an array of integer elements and an integer 'k', we are required to find the\nmaximum sum of 'k' consecutive elements in the array.\n\nInstead of using a nested for loop, in a Brute force approach we will use a technique\ncalled 'Window sliding technique' where the nested loops can be converted to a single\nloop to reduce time complexity.\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef max_sum_in_array(array: list[int], k: int) -> int:\n    \"\"\"\n    Returns the maximum sum of k consecutive elements\n    >>> arr = [1, 4, 2, 10, 2, 3, 1, 0, 20]\n    >>> k = 4\n    >>> max_sum_in_array(arr, k)\n    24\n    >>> k = 10\n    >>> max_sum_in_array(arr,k)\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid Input\n    >>> arr = [1, 4, 2, 10, 2, 13, 1, 0, 2]\n    >>> k = 4\n    >>> max_sum_in_array(arr, k)\n    27\n    \"\"\"\n    if len(array) < k or k < 0:\n        raise ValueError(\"Invalid Input\")\n    max_sum = current_sum = sum(array[:k])\n    for i in range(len(array) - k):\n        current_sum = current_sum - array[i] + array[i + k]\n        max_sum = max(max_sum, current_sum)\n    return max_sum\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n    from random import randint\n\n    testmod()\n    array = [randint(-1000, 1000) for i in range(100)]\n    k = randint(0, 110)\n    print(\n        f\"The maximum sum of {k} consecutive elements is {max_sum_in_array(array, k)}\"\n    )\n"
  },
  {
    "path": "maths/minkowski_distance.py",
    "content": "def minkowski_distance(\n    point_a: list[float],\n    point_b: list[float],\n    order: int,\n) -> float:\n    \"\"\"\n    This function calculates the Minkowski distance for a given order between\n    two n-dimensional points represented as lists. For the case of order = 1,\n    the Minkowski distance degenerates to the Manhattan distance. For\n    order = 2, the usual Euclidean distance is obtained.\n\n    https://en.wikipedia.org/wiki/Minkowski_distance\n\n    Note: due to floating point calculation errors the output of this\n    function may be inaccurate.\n\n    >>> minkowski_distance([1.0, 1.0], [2.0, 2.0], 1)\n    2.0\n    >>> minkowski_distance([1.0, 2.0, 3.0, 4.0], [5.0, 6.0, 7.0, 8.0], 2)\n    8.0\n    >>> import numpy as np\n    >>> bool(np.isclose(5.0, minkowski_distance([5.0], [0.0], 3)))\n    True\n    >>> minkowski_distance([1.0], [2.0], -1)\n    Traceback (most recent call last):\n        ...\n    ValueError: The order must be greater than or equal to 1.\n    >>> minkowski_distance([1.0], [1.0, 2.0], 1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Both points must have the same dimension.\n    \"\"\"\n    if order < 1:\n        raise ValueError(\"The order must be greater than or equal to 1.\")\n\n    if len(point_a) != len(point_b):\n        raise ValueError(\"Both points must have the same dimension.\")\n\n    return sum(abs(a - b) ** order for a, b in zip(point_a, point_b)) ** (1 / order)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/mobius_function.py",
    "content": "\"\"\"\r\nReferences: https://en.wikipedia.org/wiki/M%C3%B6bius_function\r\nReferences: wikipedia:square free number\r\npsf/black : True\r\nruff : True\r\n\"\"\"\r\n\r\nfrom maths.is_square_free import is_square_free\r\nfrom maths.prime_factors import prime_factors\r\n\r\n\r\ndef mobius(n: int) -> int:\r\n    \"\"\"\r\n    Mobius function\r\n    >>> mobius(24)\r\n    0\r\n    >>> mobius(-1)\r\n    1\r\n    >>> mobius('asd')\r\n    Traceback (most recent call last):\r\n        ...\r\n    TypeError: '<=' not supported between instances of 'int' and 'str'\r\n    >>> mobius(10**400)\r\n    0\r\n    >>> mobius(10**-400)\r\n    1\r\n    >>> mobius(-1424)\r\n    1\r\n    >>> mobius([1, '2', 2.0])\r\n    Traceback (most recent call last):\r\n        ...\r\n    TypeError: '<=' not supported between instances of 'int' and 'list'\r\n    \"\"\"\r\n    factors = prime_factors(n)\r\n    if is_square_free(factors):\r\n        return -1 if len(factors) % 2 else 1\r\n    return 0\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n"
  },
  {
    "path": "maths/modular_division.py",
    "content": "from __future__ import annotations\n\n\ndef modular_division(a: int, b: int, n: int) -> int:\n    \"\"\"\n    Modular Division :\n    An efficient algorithm for dividing b by a modulo n.\n\n    GCD ( Greatest Common Divisor ) or HCF ( Highest Common Factor )\n\n    Given three integers a, b, and n, such that gcd(a,n)=1 and n>1, the algorithm should\n    return an integer x such that 0≤x≤n-1, and  b/a=x(modn) (that is, b=ax(modn)).\n\n    Theorem:\n    a has a multiplicative inverse modulo n iff gcd(a,n) = 1\n\n\n    This find x = b*a^(-1) mod n\n    Uses ExtendedEuclid to find the inverse of a\n\n    >>> modular_division(4,8,5)\n    2\n\n    >>> modular_division(3,8,5)\n    1\n\n    >>> modular_division(4, 11, 5)\n    4\n\n    \"\"\"\n    if n <= 1:\n        raise ValueError(\"Modulus n must be greater than 1\")\n    if a <= 0:\n        raise ValueError(\"Divisor a must be a positive integer\")\n    if greatest_common_divisor(a, n) != 1:\n        raise ValueError(\"a and n must be coprime (gcd(a, n) = 1)\")\n\n    (_d, _t, s) = extended_gcd(n, a)  # Implemented below\n    x = (b * s) % n\n    return x\n\n\ndef invert_modulo(a: int, n: int) -> int:\n    \"\"\"\n    This function find the inverses of a i.e., a^(-1)\n\n    >>> invert_modulo(2, 5)\n    3\n\n    >>> invert_modulo(8,7)\n    1\n\n    \"\"\"\n    (b, _x) = extended_euclid(a, n)  # Implemented below\n    if b < 0:\n        b = (b % n + n) % n\n    return b\n\n\n# ------------------ Finding Modular division using invert_modulo -------------------\n\n\ndef modular_division2(a: int, b: int, n: int) -> int:\n    \"\"\"\n    This function used the above inversion of a to find x = (b*a^(-1))mod n\n\n    >>> modular_division2(4,8,5)\n    2\n\n    >>> modular_division2(3,8,5)\n    1\n\n    >>> modular_division2(4, 11, 5)\n    4\n\n    \"\"\"\n    s = invert_modulo(a, n)\n    x = (b * s) % n\n    return x\n\n\ndef extended_gcd(a: int, b: int) -> tuple[int, int, int]:\n    \"\"\"\n    Extended Euclid's Algorithm : If d divides a and b and d = a*x + b*y for integers x\n    and y, then d = gcd(a,b)\n    >>> extended_gcd(10, 6)\n    (2, -1, 2)\n\n    >>> extended_gcd(7, 5)\n    (1, -2, 3)\n\n    ** extended_gcd function is used when d = gcd(a,b) is required in output\n\n    \"\"\"\n    assert a >= 0\n    assert b >= 0\n\n    if b == 0:\n        d, x, y = a, 1, 0\n    else:\n        (d, p, q) = extended_gcd(b, a % b)\n        x = q\n        y = p - q * (a // b)\n\n    assert a % d == 0\n    assert b % d == 0\n    assert d == a * x + b * y\n\n    return (d, x, y)\n\n\ndef extended_euclid(a: int, b: int) -> tuple[int, int]:\n    \"\"\"\n    Extended Euclid\n    >>> extended_euclid(10, 6)\n    (-1, 2)\n\n    >>> extended_euclid(7, 5)\n    (-2, 3)\n\n    \"\"\"\n    if b == 0:\n        return (1, 0)\n    (x, y) = extended_euclid(b, a % b)\n    k = a // b\n    return (y, x - k * y)\n\n\ndef greatest_common_divisor(a: int, b: int) -> int:\n    \"\"\"\n    Euclid's Lemma :  d divides a and b, if and only if d divides a-b and b\n    Euclid's Algorithm\n\n    >>> greatest_common_divisor(7,5)\n    1\n\n    Note : In number theory, two integers a and b are said to be relatively prime,\n        mutually prime, or co-prime if the only positive integer (factor) that divides\n        both of them is 1  i.e., gcd(a,b) = 1.\n\n    >>> greatest_common_divisor(121, 11)\n    11\n\n    \"\"\"\n    if a < b:\n        a, b = b, a\n\n    while a % b != 0:\n        a, b = b, a % b\n\n    return b\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod(name=\"modular_division\", verbose=True)\n    testmod(name=\"modular_division2\", verbose=True)\n    testmod(name=\"invert_modulo\", verbose=True)\n    testmod(name=\"extended_gcd\", verbose=True)\n    testmod(name=\"extended_euclid\", verbose=True)\n    testmod(name=\"greatest_common_divisor\", verbose=True)\n"
  },
  {
    "path": "maths/modular_exponential.py",
    "content": "\"\"\"\nModular Exponential.\nModular exponentiation is a type of exponentiation performed over a modulus.\nFor more explanation, please check\nhttps://en.wikipedia.org/wiki/Modular_exponentiation\n\"\"\"\n\n\"\"\"Calculate Modular Exponential.\"\"\"\n\n\ndef modular_exponential(base: int, power: int, mod: int):\n    \"\"\"\n    >>> modular_exponential(5, 0, 10)\n    1\n    >>> modular_exponential(2, 8, 7)\n    4\n    >>> modular_exponential(3, -2, 9)\n    -1\n    \"\"\"\n\n    if power < 0:\n        return -1\n    base %= mod\n    result = 1\n\n    while power > 0:\n        if power & 1:\n            result = (result * base) % mod\n        power = power >> 1\n        base = (base * base) % mod\n\n    return result\n\n\ndef main():\n    \"\"\"Call Modular Exponential Function.\"\"\"\n    print(modular_exponential(3, 200, 13))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    main()\n"
  },
  {
    "path": "maths/monte_carlo.py",
    "content": "\"\"\"\n@author: MatteoRaso\n\"\"\"\n\nfrom collections.abc import Callable\nfrom math import pi, sqrt\nfrom random import uniform\nfrom statistics import mean\n\n\ndef pi_estimator(iterations: int) -> None:\n    \"\"\"\n    An implementation of the Monte Carlo method used to find pi.\n    1. Draw a 2x2 square centred at (0,0).\n    2. Inscribe a circle within the square.\n    3. For each iteration, place a dot anywhere in the square.\n       a. Record the number of dots within the circle.\n    4. After all the dots are placed, divide the dots in the circle by the total.\n    5. Multiply this value by 4 to get your estimate of pi.\n    6. Print the estimated and numpy value of pi\n    \"\"\"\n\n    # A local function to see if a dot lands in the circle.\n    def is_in_circle(x: float, y: float) -> bool:\n        distance_from_centre = sqrt((x**2) + (y**2))\n        # Our circle has a radius of 1, so a distance\n        # greater than 1 would land outside the circle.\n        return distance_from_centre <= 1\n\n    # The proportion of guesses that landed in the circle\n    proportion = mean(\n        int(is_in_circle(uniform(-1.0, 1.0), uniform(-1.0, 1.0)))\n        for _ in range(iterations)\n    )\n    # The ratio of the area for circle to square is pi/4.\n    pi_estimate = proportion * 4\n    print(f\"The estimated value of pi is {pi_estimate}\")\n    print(f\"The numpy value of pi is {pi}\")\n    print(f\"The total error is {abs(pi - pi_estimate)}\")\n\n\ndef area_under_curve_estimator(\n    iterations: int,\n    function_to_integrate: Callable[[float], float],\n    min_value: float = 0.0,\n    max_value: float = 1.0,\n) -> float:\n    \"\"\"\n    An implementation of the Monte Carlo method to find area under\n       a single variable non-negative real-valued continuous function,\n       say f(x), where x lies within a continuous bounded interval,\n       say [min_value, max_value], where min_value and max_value are\n       finite numbers\n    1. Let x be a uniformly distributed random variable between min_value to\n       max_value\n    2. Expected value of f(x) =\n       (integrate f(x) from min_value to max_value)/(max_value - min_value)\n    3. Finding expected value of f(x):\n        a. Repeatedly draw x from uniform distribution\n        b. Evaluate f(x) at each of the drawn x values\n        c. Expected value = average of the function evaluations\n    4. Estimated value of integral = Expected value * (max_value - min_value)\n    5. Returns estimated value\n    \"\"\"\n\n    return mean(\n        function_to_integrate(uniform(min_value, max_value)) for _ in range(iterations)\n    ) * (max_value - min_value)\n\n\ndef area_under_line_estimator_check(\n    iterations: int, min_value: float = 0.0, max_value: float = 1.0\n) -> None:\n    \"\"\"\n    Checks estimation error for area_under_curve_estimator function\n    for f(x) = x where x lies within min_value to max_value\n    1. Calls \"area_under_curve_estimator\" function\n    2. Compares with the expected value\n    3. Prints estimated, expected and error value\n    \"\"\"\n\n    def identity_function(x: float) -> float:\n        \"\"\"\n        Represents identity function\n        >>> [function_to_integrate(x) for x in [-2.0, -1.0, 0.0, 1.0, 2.0]]\n        [-2.0, -1.0, 0.0, 1.0, 2.0]\n        \"\"\"\n        return x\n\n    estimated_value = area_under_curve_estimator(\n        iterations, identity_function, min_value, max_value\n    )\n    expected_value = (max_value * max_value - min_value * min_value) / 2\n\n    print(\"******************\")\n    print(f\"Estimating area under y=x where x varies from {min_value} to {max_value}\")\n    print(f\"Estimated value is {estimated_value}\")\n    print(f\"Expected value is {expected_value}\")\n    print(f\"Total error is {abs(estimated_value - expected_value)}\")\n    print(\"******************\")\n\n\ndef pi_estimator_using_area_under_curve(iterations: int) -> None:\n    \"\"\"\n    Area under curve y = sqrt(4 - x^2) where x lies in 0 to 2 is equal to pi\n    \"\"\"\n\n    def function_to_integrate(x: float) -> float:\n        \"\"\"\n        Represents semi-circle with radius 2\n        >>> [function_to_integrate(x) for x in [-2.0, 0.0, 2.0]]\n        [0.0, 2.0, 0.0]\n        \"\"\"\n        return sqrt(4.0 - x * x)\n\n    estimated_value = area_under_curve_estimator(\n        iterations, function_to_integrate, 0.0, 2.0\n    )\n\n    print(\"******************\")\n    print(\"Estimating pi using area_under_curve_estimator\")\n    print(f\"Estimated value is {estimated_value}\")\n    print(f\"Expected value is {pi}\")\n    print(f\"Total error is {abs(estimated_value - pi)}\")\n    print(\"******************\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/monte_carlo_dice.py",
    "content": "from __future__ import annotations\n\nimport random\n\n\nclass Dice:\n    NUM_SIDES = 6\n\n    def __init__(self):\n        \"\"\"Initialize a six sided dice\"\"\"\n        self.sides = list(range(1, Dice.NUM_SIDES + 1))\n\n    def roll(self):\n        return random.choice(self.sides)\n\n\ndef throw_dice(num_throws: int, num_dice: int = 2) -> list[float]:\n    \"\"\"\n    Return probability list of all possible sums when throwing dice.\n\n    >>> random.seed(0)\n    >>> throw_dice(10, 1)\n    [10.0, 0.0, 30.0, 50.0, 10.0, 0.0]\n    >>> throw_dice(100, 1)\n    [19.0, 17.0, 17.0, 11.0, 23.0, 13.0]\n    >>> throw_dice(1000, 1)\n    [18.8, 15.5, 16.3, 17.6, 14.2, 17.6]\n    >>> throw_dice(10000, 1)\n    [16.35, 16.89, 16.93, 16.6, 16.52, 16.71]\n    >>> throw_dice(10000, 2)\n    [2.74, 5.6, 7.99, 11.26, 13.92, 16.7, 14.44, 10.63, 8.05, 5.92, 2.75]\n    \"\"\"\n    dices = [Dice() for i in range(num_dice)]\n    count_of_sum = [0] * (len(dices) * Dice.NUM_SIDES + 1)\n    for _ in range(num_throws):\n        count_of_sum[sum(dice.roll() for dice in dices)] += 1\n    probability = [round((count * 100) / num_throws, 2) for count in count_of_sum]\n    return probability[num_dice:]  # remove probability of sums that never appear\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/number_of_digits.py",
    "content": "import math\nfrom timeit import timeit\n\n\ndef num_digits(n: int) -> int:\n    \"\"\"\n    Find the number of digits in a number.\n\n    >>> num_digits(12345)\n    5\n    >>> num_digits(123)\n    3\n    >>> num_digits(0)\n    1\n    >>> num_digits(-1)\n    1\n    >>> num_digits(-123456)\n    6\n    >>> num_digits('123')  # Raises a TypeError for non-integer input\n    Traceback (most recent call last):\n        ...\n    TypeError: Input must be an integer\n    \"\"\"\n\n    if not isinstance(n, int):\n        raise TypeError(\"Input must be an integer\")\n\n    digits = 0\n    n = abs(n)\n    while True:\n        n = n // 10\n        digits += 1\n        if n == 0:\n            break\n    return digits\n\n\ndef num_digits_fast(n: int) -> int:\n    \"\"\"\n    Find the number of digits in a number.\n    abs() is used as logarithm for negative numbers is not defined.\n\n    >>> num_digits_fast(12345)\n    5\n    >>> num_digits_fast(123)\n    3\n    >>> num_digits_fast(0)\n    1\n    >>> num_digits_fast(-1)\n    1\n    >>> num_digits_fast(-123456)\n    6\n    >>> num_digits('123')  # Raises a TypeError for non-integer input\n    Traceback (most recent call last):\n        ...\n    TypeError: Input must be an integer\n    \"\"\"\n\n    if not isinstance(n, int):\n        raise TypeError(\"Input must be an integer\")\n\n    return 1 if n == 0 else math.floor(math.log(abs(n), 10) + 1)\n\n\ndef num_digits_faster(n: int) -> int:\n    \"\"\"\n    Find the number of digits in a number.\n    abs() is used for negative numbers\n\n    >>> num_digits_faster(12345)\n    5\n    >>> num_digits_faster(123)\n    3\n    >>> num_digits_faster(0)\n    1\n    >>> num_digits_faster(-1)\n    1\n    >>> num_digits_faster(-123456)\n    6\n    >>> num_digits('123')  # Raises a TypeError for non-integer input\n    Traceback (most recent call last):\n        ...\n    TypeError: Input must be an integer\n    \"\"\"\n\n    if not isinstance(n, int):\n        raise TypeError(\"Input must be an integer\")\n\n    return len(str(abs(n)))\n\n\ndef benchmark() -> None:\n    \"\"\"\n    Benchmark multiple functions, with three different length int values.\n    \"\"\"\n    from collections.abc import Callable\n\n    def benchmark_a_function(func: Callable, value: int) -> None:\n        call = f\"{func.__name__}({value})\"\n        timing = timeit(f\"__main__.{call}\", setup=\"import __main__\")\n        print(f\"{call}: {func(value)} -- {timing} seconds\")\n\n    for value in (262144, 1125899906842624, 1267650600228229401496703205376):\n        for func in (num_digits, num_digits_fast, num_digits_faster):\n            benchmark_a_function(func, value)\n        print()\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    benchmark()\n"
  },
  {
    "path": "maths/numerical_analysis/__init__.py",
    "content": ""
  },
  {
    "path": "maths/numerical_analysis/adams_bashforth.py",
    "content": "\"\"\"\nUse the Adams-Bashforth methods to solve Ordinary Differential Equations.\n\nhttps://en.wikipedia.org/wiki/Linear_multistep_method\nAuthor : Ravi Kumar\n\"\"\"\n\nfrom collections.abc import Callable\nfrom dataclasses import dataclass\n\nimport numpy as np\n\n\n@dataclass\nclass AdamsBashforth:\n    \"\"\"\n    args:\n    func: An ordinary differential equation (ODE) as function of x and y.\n    x_initials: List containing initial required values of x.\n    y_initials: List containing initial required values of y.\n    step_size: The increment value of x.\n    x_final: The final value of x.\n\n    Returns: Solution of y at each nodal point\n\n    >>> def f(x, y):\n    ...     return x + y\n    >>> AdamsBashforth(f, [0, 0.2, 0.4], [0, 0.2, 1], 0.2, 1)  # doctest: +ELLIPSIS\n    AdamsBashforth(func=..., x_initials=[0, 0.2, 0.4], y_initials=[0, 0.2, 1], step...)\n    >>> AdamsBashforth(f, [0, 0.2, 1], [0, 0, 0.04], 0.2, 1).step_2()\n    Traceback (most recent call last):\n        ...\n    ValueError: The final value of x must be greater than the initial values of x.\n\n    >>> AdamsBashforth(f, [0, 0.2, 0.3], [0, 0, 0.04], 0.2, 1).step_3()\n    Traceback (most recent call last):\n        ...\n    ValueError: x-values must be equally spaced according to step size.\n\n    >>> AdamsBashforth(f,[0,0.2,0.4,0.6,0.8],[0,0,0.04,0.128,0.307],-0.2,1).step_5()\n    Traceback (most recent call last):\n        ...\n    ValueError: Step size must be positive.\n    \"\"\"\n\n    func: Callable[[float, float], float]\n    x_initials: list[float]\n    y_initials: list[float]\n    step_size: float\n    x_final: float\n\n    def __post_init__(self) -> None:\n        if self.x_initials[-1] >= self.x_final:\n            raise ValueError(\n                \"The final value of x must be greater than the initial values of x.\"\n            )\n\n        if self.step_size <= 0:\n            raise ValueError(\"Step size must be positive.\")\n\n        if not all(\n            round(x1 - x0, 10) == self.step_size\n            for x0, x1 in zip(self.x_initials, self.x_initials[1:])\n        ):\n            raise ValueError(\"x-values must be equally spaced according to step size.\")\n\n    def step_2(self) -> np.ndarray:\n        \"\"\"\n        >>> def f(x, y):\n        ...     return x\n        >>> AdamsBashforth(f, [0, 0.2], [0, 0], 0.2, 1).step_2()\n        array([0.  , 0.  , 0.06, 0.16, 0.3 , 0.48])\n\n        >>> AdamsBashforth(f, [0, 0.2, 0.4], [0, 0, 0.04], 0.2, 1).step_2()\n        Traceback (most recent call last):\n            ...\n        ValueError: Insufficient initial points information.\n        \"\"\"\n\n        if len(self.x_initials) != 2 or len(self.y_initials) != 2:\n            raise ValueError(\"Insufficient initial points information.\")\n\n        x_0, x_1 = self.x_initials[:2]\n        y_0, y_1 = self.y_initials[:2]\n\n        n = int((self.x_final - x_1) / self.step_size)\n        y = np.zeros(n + 2)\n        y[0] = y_0\n        y[1] = y_1\n\n        for i in range(n):\n            y[i + 2] = y[i + 1] + (self.step_size / 2) * (\n                3 * self.func(x_1, y[i + 1]) - self.func(x_0, y[i])\n            )\n            x_0 = x_1\n            x_1 += self.step_size\n\n        return y\n\n    def step_3(self) -> np.ndarray:\n        \"\"\"\n        >>> def f(x, y):\n        ...     return x + y\n        >>> y = AdamsBashforth(f, [0, 0.2, 0.4], [0, 0, 0.04], 0.2, 1).step_3()\n        >>> float(y[3])\n        0.15533333333333332\n\n        >>> AdamsBashforth(f, [0, 0.2], [0, 0], 0.2, 1).step_3()\n        Traceback (most recent call last):\n            ...\n        ValueError: Insufficient initial points information.\n        \"\"\"\n        if len(self.x_initials) != 3 or len(self.y_initials) != 3:\n            raise ValueError(\"Insufficient initial points information.\")\n\n        x_0, x_1, x_2 = self.x_initials[:3]\n        y_0, y_1, y_2 = self.y_initials[:3]\n\n        n = int((self.x_final - x_2) / self.step_size)\n        y = np.zeros(n + 4)\n        y[0] = y_0\n        y[1] = y_1\n        y[2] = y_2\n\n        for i in range(n + 1):\n            y[i + 3] = y[i + 2] + (self.step_size / 12) * (\n                23 * self.func(x_2, y[i + 2])\n                - 16 * self.func(x_1, y[i + 1])\n                + 5 * self.func(x_0, y[i])\n            )\n            x_0 = x_1\n            x_1 = x_2\n            x_2 += self.step_size\n\n        return y\n\n    def step_4(self) -> np.ndarray:\n        \"\"\"\n        >>> def f(x,y):\n        ...     return x + y\n        >>> y = AdamsBashforth(\n        ...    f, [0, 0.2, 0.4, 0.6], [0, 0, 0.04, 0.128], 0.2, 1).step_4()\n        >>> float(y[4])\n        0.30699999999999994\n        >>> float(y[5])\n        0.5771083333333333\n\n        >>> AdamsBashforth(f, [0, 0.2, 0.4], [0, 0, 0.04], 0.2, 1).step_4()\n        Traceback (most recent call last):\n            ...\n        ValueError: Insufficient initial points information.\n        \"\"\"\n\n        if len(self.x_initials) != 4 or len(self.y_initials) != 4:\n            raise ValueError(\"Insufficient initial points information.\")\n\n        x_0, x_1, x_2, x_3 = self.x_initials[:4]\n        y_0, y_1, y_2, y_3 = self.y_initials[:4]\n\n        n = int((self.x_final - x_3) / self.step_size)\n        y = np.zeros(n + 4)\n        y[0] = y_0\n        y[1] = y_1\n        y[2] = y_2\n        y[3] = y_3\n\n        for i in range(n):\n            y[i + 4] = y[i + 3] + (self.step_size / 24) * (\n                55 * self.func(x_3, y[i + 3])\n                - 59 * self.func(x_2, y[i + 2])\n                + 37 * self.func(x_1, y[i + 1])\n                - 9 * self.func(x_0, y[i])\n            )\n            x_0 = x_1\n            x_1 = x_2\n            x_2 = x_3\n            x_3 += self.step_size\n\n        return y\n\n    def step_5(self) -> np.ndarray:\n        \"\"\"\n        >>> def f(x,y):\n        ...     return x + y\n        >>> y = AdamsBashforth(\n        ...     f, [0, 0.2, 0.4, 0.6, 0.8], [0, 0.02140, 0.02140, 0.22211, 0.42536],\n        ...     0.2, 1).step_5()\n        >>> float(y[-1])\n        0.05436839444444452\n\n        >>> AdamsBashforth(f, [0, 0.2, 0.4], [0, 0, 0.04], 0.2, 1).step_5()\n        Traceback (most recent call last):\n            ...\n        ValueError: Insufficient initial points information.\n        \"\"\"\n\n        if len(self.x_initials) != 5 or len(self.y_initials) != 5:\n            raise ValueError(\"Insufficient initial points information.\")\n\n        x_0, x_1, x_2, x_3, x_4 = self.x_initials[:5]\n        y_0, y_1, y_2, y_3, y_4 = self.y_initials[:5]\n\n        n = int((self.x_final - x_4) / self.step_size)\n        y = np.zeros(n + 6)\n        y[0] = y_0\n        y[1] = y_1\n        y[2] = y_2\n        y[3] = y_3\n        y[4] = y_4\n\n        for i in range(n + 1):\n            y[i + 5] = y[i + 4] + (self.step_size / 720) * (\n                1901 * self.func(x_4, y[i + 4])\n                - 2774 * self.func(x_3, y[i + 3])\n                - 2616 * self.func(x_2, y[i + 2])\n                - 1274 * self.func(x_1, y[i + 1])\n                + 251 * self.func(x_0, y[i])\n            )\n            x_0 = x_1\n            x_1 = x_2\n            x_2 = x_3\n            x_3 = x_4\n            x_4 += self.step_size\n\n        return y\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/numerical_analysis/bisection.py",
    "content": "from collections.abc import Callable\n\n\ndef bisection(function: Callable[[float], float], a: float, b: float) -> float:\n    \"\"\"\n    finds where function becomes 0 in [a,b] using bolzano\n    >>> bisection(lambda x: x ** 3 - 1, -5, 5)\n    1.0000000149011612\n    >>> bisection(lambda x: x ** 3 - 1, 2, 1000)\n    Traceback (most recent call last):\n        ...\n    ValueError: could not find root in given interval.\n    >>> bisection(lambda x: x ** 2 - 4 * x + 3, 0, 2)\n    1.0\n    >>> bisection(lambda x: x ** 2 - 4 * x + 3, 2, 4)\n    3.0\n    >>> bisection(lambda x: x ** 2 - 4 * x + 3, 4, 1000)\n    Traceback (most recent call last):\n        ...\n    ValueError: could not find root in given interval.\n    \"\"\"\n    start: float = a\n    end: float = b\n    if function(a) == 0:  # one of the a or b is a root for the function\n        return a\n    elif function(b) == 0:\n        return b\n    elif (\n        function(a) * function(b) > 0\n    ):  # if none of these are root and they are both positive or negative,\n        # then this algorithm can't find the root\n        raise ValueError(\"could not find root in given interval.\")\n    else:\n        mid: float = start + (end - start) / 2.0\n        while abs(start - mid) > 10**-7:  # until precisely equals to 10^-7\n            if function(mid) == 0:\n                return mid\n            elif function(mid) * function(start) < 0:\n                end = mid\n            else:\n                start = mid\n            mid = start + (end - start) / 2.0\n        return mid\n\n\ndef f(x: float) -> float:\n    return x**3 - 2 * x - 5\n\n\nif __name__ == \"__main__\":\n    print(bisection(f, 1, 1000))\n\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/numerical_analysis/bisection_2.py",
    "content": "\"\"\"\nGiven a function on floating number f(x) and two floating numbers `a` and `b` such that\nf(a) * f(b) < 0 and f(x) is continuous in [a, b].\nHere f(x) represents algebraic or transcendental equation.\nFind root of function in interval [a, b] (Or find a value of x such that f(x) is 0)\n\nhttps://en.wikipedia.org/wiki/Bisection_method\n\"\"\"\n\n\ndef equation(x: float) -> float:\n    \"\"\"\n    >>> equation(5)\n    -15\n    >>> equation(0)\n    10\n    >>> equation(-5)\n    -15\n    >>> equation(0.1)\n    9.99\n    >>> equation(-0.1)\n    9.99\n    \"\"\"\n    return 10 - x * x\n\n\ndef bisection(a: float, b: float) -> float:\n    \"\"\"\n    >>> bisection(-2, 5)\n    3.1611328125\n    >>> bisection(0, 6)\n    3.158203125\n    >>> bisection(2, 3)\n    Traceback (most recent call last):\n        ...\n    ValueError: Wrong space!\n    \"\"\"\n    # Bolzano theory in order to find if there is a root between a and b\n    if equation(a) * equation(b) >= 0:\n        raise ValueError(\"Wrong space!\")\n\n    c = a\n    while (b - a) >= 0.01:\n        # Find middle point\n        c = (a + b) / 2\n        # Check if middle point is root\n        if equation(c) == 0.0:\n            break\n        # Decide the side to repeat the steps\n        if equation(c) * equation(a) < 0:\n            b = c\n        else:\n            a = c\n    return c\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    print(bisection(-2, 5))\n    print(bisection(0, 6))\n"
  },
  {
    "path": "maths/numerical_analysis/integration_by_simpson_approx.py",
    "content": "\"\"\"\nAuthor : Syed Faizan ( 3rd Year IIIT Pune )\nGithub : faizan2700\n\nPurpose : You have one function f(x) which takes float integer and returns\nfloat you have to integrate the function in limits a to b.\nThe approximation proposed by Thomas Simpson in 1743 is one way to calculate\nintegration.\n\n( read article : https://cp-algorithms.com/num_methods/simpson-integration.html )\n\nsimpson_integration() takes function,lower_limit=a,upper_limit=b,precision and\nreturns the integration of function in given limit.\n\"\"\"\n\n# constants\n# the more the number of steps the more accurate\nN_STEPS = 1000\n\n\ndef f(x: float) -> float:\n    return x * x\n\n\n\"\"\"\nSummary of Simpson Approximation :\n\nBy simpsons integration :\n1. integration of fxdx with limit a to b is =\n    f(x0) + 4 * f(x1) + 2 * f(x2) + 4 * f(x3) + 2 * f(x4)..... + f(xn)\nwhere x0 = a\nxi = a + i * h\nxn = b\n\"\"\"\n\n\ndef simpson_integration(function, a: float, b: float, precision: int = 4) -> float:\n    \"\"\"\n    Args:\n        function : the function which's integration is desired\n        a : the lower limit of integration\n        b : upper limit of integration\n        precision : precision of the result,error required default is 4\n\n    Returns:\n        result : the value of the approximated integration of function in range a to b\n\n    Raises:\n        AssertionError: function is not callable\n        AssertionError: a is not float or integer\n        AssertionError: function should return float or integer\n        AssertionError: b is not float or integer\n        AssertionError: precision is not positive integer\n\n    >>> simpson_integration(lambda x : x*x,1,2,3)\n    2.333\n\n    >>> simpson_integration(lambda x : x*x,'wrong_input',2,3)\n    Traceback (most recent call last):\n        ...\n    AssertionError: a should be float or integer your input : wrong_input\n\n    >>> simpson_integration(lambda x : x*x,1,'wrong_input',3)\n    Traceback (most recent call last):\n        ...\n    AssertionError: b should be float or integer your input : wrong_input\n\n    >>> simpson_integration(lambda x : x*x,1,2,'wrong_input')\n    Traceback (most recent call last):\n        ...\n    AssertionError: precision should be positive integer your input : wrong_input\n    >>> simpson_integration('wrong_input',2,3,4)\n    Traceback (most recent call last):\n        ...\n    AssertionError: the function(object) passed should be callable your input : ...\n\n    >>> simpson_integration(lambda x : x*x,3.45,3.2,1)\n    -2.8\n\n    >>> simpson_integration(lambda x : x*x,3.45,3.2,0)\n    Traceback (most recent call last):\n        ...\n    AssertionError: precision should be positive integer your input : 0\n\n    >>> simpson_integration(lambda x : x*x,3.45,3.2,-1)\n    Traceback (most recent call last):\n        ...\n    AssertionError: precision should be positive integer your input : -1\n\n    \"\"\"\n    assert callable(function), (\n        f\"the function(object) passed should be callable your input : {function}\"\n    )\n    assert isinstance(a, (float, int)), f\"a should be float or integer your input : {a}\"\n    assert isinstance(function(a), (float, int)), (\n        \"the function should return integer or float return type of your function, \"\n        f\"{type(a)}\"\n    )\n    assert isinstance(b, (float, int)), f\"b should be float or integer your input : {b}\"\n    assert isinstance(precision, int) and precision > 0, (\n        f\"precision should be positive integer your input : {precision}\"\n    )\n\n    # just applying the formula of simpson for approximate integration written in\n    # mentioned article in first comment of this file and above this function\n\n    h = (b - a) / N_STEPS\n    result = function(a) + function(b)\n\n    for i in range(1, N_STEPS):\n        a1 = a + h * i\n        result += function(a1) * (4 if i % 2 else 2)\n\n    result *= h / 3\n    return round(result, precision)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/numerical_analysis/intersection.py",
    "content": "import math\nfrom collections.abc import Callable\n\n\ndef intersection(function: Callable[[float], float], x0: float, x1: float) -> float:\n    \"\"\"\n    function is the f we want to find its root\n    x0 and x1 are two random starting points\n    >>> intersection(lambda x: x ** 3 - 1, -5, 5)\n    0.9999999999954654\n    >>> intersection(lambda x: x ** 3 - 1, 5, 5)\n    Traceback (most recent call last):\n        ...\n    ZeroDivisionError: float division by zero, could not find root\n    >>> intersection(lambda x: x ** 3 - 1, 100, 200)\n    1.0000000000003888\n    >>> intersection(lambda x: x ** 2 - 4 * x + 3, 0, 2)\n    0.9999999998088019\n    >>> intersection(lambda x: x ** 2 - 4 * x + 3, 2, 4)\n    2.9999999998088023\n    >>> intersection(lambda x: x ** 2 - 4 * x + 3, 4, 1000)\n    3.0000000001786042\n    >>> intersection(math.sin, -math.pi, math.pi)\n    0.0\n    >>> intersection(math.cos, -math.pi, math.pi)\n    Traceback (most recent call last):\n        ...\n    ZeroDivisionError: float division by zero, could not find root\n    \"\"\"\n    x_n: float = x0\n    x_n1: float = x1\n    while True:\n        if x_n == x_n1 or function(x_n1) == function(x_n):\n            raise ZeroDivisionError(\"float division by zero, could not find root\")\n        x_n2: float = x_n1 - (\n            function(x_n1) / ((function(x_n1) - function(x_n)) / (x_n1 - x_n))\n        )\n        if abs(x_n2 - x_n1) < 10**-5:\n            return x_n2\n        x_n = x_n1\n        x_n1 = x_n2\n\n\ndef f(x: float) -> float:\n    \"\"\"\n    function is f(x) = x^3 - 2x - 5\n    >>> f(2)\n    -1.0\n    \"\"\"\n    return math.pow(x, 3) - (2 * x) - 5\n\n\nif __name__ == \"__main__\":\n    print(intersection(f, 3, 3.5))\n"
  },
  {
    "path": "maths/numerical_analysis/nevilles_method.py",
    "content": "\"\"\"\nPython program to show how to interpolate and evaluate a polynomial\nusing Neville's method.\nNeville's method evaluates a polynomial that passes through a\ngiven set of x and y points for a particular x value (x0) using the\nNewton polynomial form.\nReference:\n    https://rpubs.com/aaronsc32/nevilles-method-polynomial-interpolation\n\"\"\"\n\n\ndef neville_interpolate(x_points: list, y_points: list, x0: int) -> list:\n    \"\"\"\n       Interpolate and evaluate a polynomial using Neville's method.\n       Arguments:\n           x_points, y_points: Iterables of x and corresponding y points through\n            which the polynomial passes.\n           x0: The value of x to evaluate the polynomial for.\n       Return Value: A list of the approximated value and the Neville iterations\n           table respectively.\n    >>> import pprint\n    >>> neville_interpolate((1,2,3,4,6), (6,7,8,9,11), 5)[0]\n    10.0\n    >>> pprint.pprint(neville_interpolate((1,2,3,4,6), (6,7,8,9,11), 99)[1])\n    [[0, 6, 0, 0, 0],\n     [0, 7, 0, 0, 0],\n     [0, 8, 104.0, 0, 0],\n     [0, 9, 104.0, 104.0, 0],\n     [0, 11, 104.0, 104.0, 104.0]]\n    >>> neville_interpolate((1,2,3,4,6), (6,7,8,9,11), 99)[0]\n    104.0\n    >>> neville_interpolate((1,2,3,4,6), (6,7,8,9,11), '')\n    Traceback (most recent call last):\n        ...\n    TypeError: unsupported operand type(s) for -: 'str' and 'int'\n    \"\"\"\n    n = len(x_points)\n    q = [[0] * n for i in range(n)]\n    for i in range(n):\n        q[i][1] = y_points[i]\n\n    for i in range(2, n):\n        for j in range(i, n):\n            q[j][i] = (\n                (x0 - x_points[j - i + 1]) * q[j][i - 1]\n                - (x0 - x_points[j]) * q[j - 1][i - 1]\n            ) / (x_points[j] - x_points[j - i + 1])\n\n    return [q[n - 1][n - 1], q]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/numerical_analysis/newton_forward_interpolation.py",
    "content": "# https://www.geeksforgeeks.org/newton-forward-backward-interpolation/\nfrom __future__ import annotations\n\nimport math\n\n\n# for calculating u value\ndef ucal(u: float, p: int) -> float:\n    \"\"\"\n    >>> ucal(1, 2)\n    0\n    >>> ucal(1.1, 2)\n    0.11000000000000011\n    >>> ucal(1.2, 2)\n    0.23999999999999994\n    \"\"\"\n    temp = u\n    for i in range(1, p):\n        temp = temp * (u - i)\n    return temp\n\n\ndef main() -> None:\n    n = int(input(\"enter the numbers of values: \"))\n    y: list[list[float]] = []\n    for _ in range(n):\n        y.append([])\n    for i in range(n):\n        for j in range(n):\n            y[i].append(j)\n            y[i][j] = 0\n\n    print(\"enter the values of parameters in a list: \")\n    x = list(map(int, input().split()))\n\n    print(\"enter the values of corresponding parameters: \")\n    for i in range(n):\n        y[i][0] = float(input())\n\n    value = int(input(\"enter the value to interpolate: \"))\n    u = (value - x[0]) / (x[1] - x[0])\n\n    # for calculating forward difference table\n\n    for i in range(1, n):\n        for j in range(n - i):\n            y[j][i] = y[j + 1][i - 1] - y[j][i - 1]\n\n    summ = y[0][0]\n    for i in range(1, n):\n        summ += (ucal(u, i) * y[0][i]) / math.factorial(i)\n\n    print(f\"the value at {value} is {summ}\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "maths/numerical_analysis/newton_raphson.py",
    "content": "\"\"\"\nThe Newton-Raphson method (aka the Newton method) is a root-finding algorithm that\napproximates a root of a given real-valued function f(x). It is an iterative method\ngiven by the formula\n\nx_{n + 1} = x_n + f(x_n) / f'(x_n)\n\nwith the precision of the approximation increasing as the number of iterations increase.\n\nReference: https://en.wikipedia.org/wiki/Newton%27s_method\n\"\"\"\n\nfrom collections.abc import Callable\n\nRealFunc = Callable[[float], float]\n\n\ndef calc_derivative(f: RealFunc, x: float, delta_x: float = 1e-3) -> float:\n    \"\"\"\n    Approximate the derivative of a function f(x) at a point x using the finite\n    difference method\n\n    >>> import math\n    >>> tolerance = 1e-5\n    >>> derivative = calc_derivative(lambda x: x**2, 2)\n    >>> math.isclose(derivative, 4, abs_tol=tolerance)\n    True\n    >>> derivative = calc_derivative(math.sin, 0)\n    >>> math.isclose(derivative, 1, abs_tol=tolerance)\n    True\n    \"\"\"\n    return (f(x + delta_x / 2) - f(x - delta_x / 2)) / delta_x\n\n\ndef newton_raphson(\n    f: RealFunc,\n    x0: float = 0,\n    max_iter: int = 100,\n    step: float = 1e-6,\n    max_error: float = 1e-6,\n    log_steps: bool = False,\n) -> tuple[float, float, list[float]]:\n    \"\"\"\n    Find a root of the given function f using the Newton-Raphson method.\n\n    :param f: A real-valued single-variable function\n    :param x0: Initial guess\n    :param max_iter: Maximum number of iterations\n    :param step: Step size of x, used to approximate f'(x)\n    :param max_error: Maximum approximation error\n    :param log_steps: bool denoting whether to log intermediate steps\n\n    :return: A tuple containing the approximation, the error, and the intermediate\n        steps. If log_steps is False, then an empty list is returned for the third\n        element of the tuple.\n\n    :raises ZeroDivisionError: The derivative approaches 0.\n    :raises ArithmeticError: No solution exists, or the solution isn't found before the\n        iteration limit is reached.\n\n    >>> import math\n    >>> tolerance = 1e-15\n    >>> root, *_ = newton_raphson(lambda x: x**2 - 5*x + 2, 0.4, max_error=tolerance)\n    >>> math.isclose(root, (5 - math.sqrt(17)) / 2, abs_tol=tolerance)\n    True\n    >>> root, *_ = newton_raphson(lambda x: math.log(x) - 1, 2, max_error=tolerance)\n    >>> math.isclose(root, math.e, abs_tol=tolerance)\n    True\n    >>> root, *_ = newton_raphson(math.sin, 1, max_error=tolerance)\n    >>> math.isclose(root, 0, abs_tol=tolerance)\n    True\n    >>> newton_raphson(math.cos, 0)\n    Traceback (most recent call last):\n    ...\n    ZeroDivisionError: No converging solution found, zero derivative\n    >>> newton_raphson(lambda x: x**2 + 1, 2)\n    Traceback (most recent call last):\n    ...\n    ArithmeticError: No converging solution found, iteration limit reached\n    \"\"\"\n\n    def f_derivative(x: float) -> float:\n        return calc_derivative(f, x, step)\n\n    a = x0  # Set initial guess\n    steps = []\n    for _ in range(max_iter):\n        if log_steps:  # Log intermediate steps\n            steps.append(a)\n\n        error = abs(f(a))\n        if error < max_error:\n            return a, error, steps\n\n        if f_derivative(a) == 0:\n            raise ZeroDivisionError(\"No converging solution found, zero derivative\")\n        a -= f(a) / f_derivative(a)  # Calculate next estimate\n    raise ArithmeticError(\"No converging solution found, iteration limit reached\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n    from math import exp, tanh\n\n    doctest.testmod()\n\n    def func(x: float) -> float:\n        return tanh(x) ** 2 - exp(3 * x)\n\n    solution, err, steps = newton_raphson(\n        func, x0=10, max_iter=100, step=1e-6, log_steps=True\n    )\n    print(f\"{solution=}, {err=}\")\n    print(\"\\n\".join(str(x) for x in steps))\n"
  },
  {
    "path": "maths/numerical_analysis/numerical_integration.py",
    "content": "\"\"\"\nApproximates the area under the curve using the trapezoidal rule\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections.abc import Callable\n\n\ndef trapezoidal_area(\n    fnc: Callable[[float], float],\n    x_start: float,\n    x_end: float,\n    steps: int = 100,\n) -> float:\n    \"\"\"\n    Treats curve as a collection of linear lines and sums the area of the\n    trapezium shape they form\n    :param fnc: a function which defines a curve\n    :param x_start: left end point to indicate the start of line segment\n    :param x_end: right end point to indicate end of line segment\n    :param steps: an accuracy gauge; more steps increases the accuracy\n    :return: a float representing the length of the curve\n\n    >>> def f(x):\n    ...    return 5\n    >>> '%.3f' % trapezoidal_area(f, 12.0, 14.0, 1000)\n    '10.000'\n\n    >>> def f(x):\n    ...    return 9*x**2\n    >>> '%.4f' % trapezoidal_area(f, -4.0, 0, 10000)\n    '192.0000'\n\n    >>> '%.4f' % trapezoidal_area(f, -4.0, 4.0, 10000)\n    '384.0000'\n    \"\"\"\n    x1 = x_start\n    fx1 = fnc(x_start)\n    area = 0.0\n\n    for _ in range(steps):\n        # Approximates small segments of curve as linear and solve\n        # for trapezoidal area\n        x2 = (x_end - x_start) / steps + x1\n        fx2 = fnc(x2)\n        area += abs(fx2 + fx1) * (x2 - x1) / 2\n\n        # Increment step\n        x1 = x2\n        fx1 = fx2\n    return area\n\n\nif __name__ == \"__main__\":\n\n    def f(x):\n        return x**3\n\n    print(\"f(x) = x^3\")\n    print(\"The area between the curve, x = -10, x = 10 and the x axis is:\")\n    i = 10\n    while i <= 100000:\n        area = trapezoidal_area(f, -5, 5, i)\n        print(f\"with {i} steps: {area}\")\n        i *= 10\n"
  },
  {
    "path": "maths/numerical_analysis/proper_fractions.py",
    "content": "from math import gcd\n\n\ndef proper_fractions(denominator: int) -> list[str]:\n    \"\"\"\n    this algorithm returns a list of proper fractions, in the\n    range between 0 and 1, which can be formed with the given denominator\n    https://en.wikipedia.org/wiki/Fraction#Proper_and_improper_fractions\n\n    >>> proper_fractions(10)\n    ['1/10', '3/10', '7/10', '9/10']\n    >>> proper_fractions(5)\n    ['1/5', '2/5', '3/5', '4/5']\n    >>> proper_fractions(-15)\n    Traceback (most recent call last):\n        ...\n    ValueError: The Denominator Cannot be less than 0\n    >>> proper_fractions(0)\n    []\n    >>> proper_fractions(1.2)\n    Traceback (most recent call last):\n        ...\n    ValueError: The Denominator must be an integer\n    \"\"\"\n\n    if denominator < 0:\n        raise ValueError(\"The Denominator Cannot be less than 0\")\n    elif isinstance(denominator, float):\n        raise ValueError(\"The Denominator must be an integer\")\n    return [\n        f\"{numerator}/{denominator}\"\n        for numerator in range(1, denominator)\n        if gcd(numerator, denominator) == 1\n    ]\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "maths/numerical_analysis/runge_kutta.py",
    "content": "import numpy as np\n\n\ndef runge_kutta(f, y0, x0, h, x_end):\n    \"\"\"\n    Calculate the numeric solution at each step to the ODE f(x, y) using RK4\n\n    https://en.wikipedia.org/wiki/Runge-Kutta_methods\n\n    Arguments:\n    f -- The ode as a function of x and y\n    y0 -- the initial value for y\n    x0 -- the initial value for x\n    h -- the stepsize\n    x_end -- the end value for x\n\n    >>> # the exact solution is math.exp(x)\n    >>> def f(x, y):\n    ...     return y\n    >>> y0 = 1\n    >>> y = runge_kutta(f, y0, 0.0, 0.01, 5)\n    >>> float(y[-1])\n    148.41315904125113\n    \"\"\"\n    n = int(np.ceil((x_end - x0) / h))\n    y = np.zeros((n + 1,))\n    y[0] = y0\n    x = x0\n\n    for k in range(n):\n        k1 = f(x, y[k])\n        k2 = f(x + 0.5 * h, y[k] + 0.5 * h * k1)\n        k3 = f(x + 0.5 * h, y[k] + 0.5 * h * k2)\n        k4 = f(x + h, y[k] + h * k3)\n        y[k + 1] = y[k] + (1 / 6) * h * (k1 + 2 * k2 + 2 * k3 + k4)\n        x += h\n\n    return y\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/numerical_analysis/runge_kutta_fehlberg_45.py",
    "content": "\"\"\"\nUse the Runge-Kutta-Fehlberg method to solve Ordinary Differential Equations.\n\"\"\"\n\nfrom collections.abc import Callable\n\nimport numpy as np\n\n\ndef runge_kutta_fehlberg_45(\n    func: Callable,\n    x_initial: float,\n    y_initial: float,\n    step_size: float,\n    x_final: float,\n) -> np.ndarray:\n    \"\"\"\n    Solve an Ordinary Differential Equations using Runge-Kutta-Fehlberg Method (rkf45)\n    of order 5.\n\n    https://en.wikipedia.org/wiki/Runge%E2%80%93Kutta%E2%80%93Fehlberg_method\n\n    args:\n    func: An ordinary differential equation (ODE) as function of x and y.\n    x_initial: The initial value of x.\n    y_initial: The initial value of y.\n    step_size: The increment value of x.\n    x_final: The final value of x.\n\n    Returns:\n        Solution of y at each nodal point\n\n    # exact value of y[1] is tan(0.2) = 0.2027100937470787\n    >>> def f(x, y):\n    ...     return 1 + y**2\n    >>> y = runge_kutta_fehlberg_45(f, 0, 0, 0.2, 1)\n    >>> float(y[1])\n    0.2027100937470787\n    >>> def f(x,y):\n    ...     return x\n    >>> y = runge_kutta_fehlberg_45(f, -1, 0, 0.2, 0)\n    >>> float(y[1])\n    -0.18000000000000002\n    >>> y = runge_kutta_fehlberg_45(5, 0, 0, 0.1, 1)\n    Traceback (most recent call last):\n        ...\n    TypeError: 'int' object is not callable\n    >>> def f(x, y):\n    ...     return x + y\n    >>> y = runge_kutta_fehlberg_45(f, 0, 0, 0.2, -1)\n    Traceback (most recent call last):\n        ...\n    ValueError: The final value of x must be greater than initial value of x.\n    >>> def f(x, y):\n    ...     return x\n    >>> y = runge_kutta_fehlberg_45(f, -1, 0, -0.2, 0)\n    Traceback (most recent call last):\n        ...\n    ValueError: Step size must be positive.\n    \"\"\"\n    if x_initial >= x_final:\n        raise ValueError(\n            \"The final value of x must be greater than initial value of x.\"\n        )\n\n    if step_size <= 0:\n        raise ValueError(\"Step size must be positive.\")\n\n    n = int((x_final - x_initial) / step_size)\n    y = np.zeros(\n        (n + 1),\n    )\n    x = np.zeros(n + 1)\n    y[0] = y_initial\n    x[0] = x_initial\n    for i in range(n):\n        k1 = step_size * func(x[i], y[i])\n        k2 = step_size * func(x[i] + step_size / 4, y[i] + k1 / 4)\n        k3 = step_size * func(\n            x[i] + (3 / 8) * step_size, y[i] + (3 / 32) * k1 + (9 / 32) * k2\n        )\n        k4 = step_size * func(\n            x[i] + (12 / 13) * step_size,\n            y[i] + (1932 / 2197) * k1 - (7200 / 2197) * k2 + (7296 / 2197) * k3,\n        )\n        k5 = step_size * func(\n            x[i] + step_size,\n            y[i] + (439 / 216) * k1 - 8 * k2 + (3680 / 513) * k3 - (845 / 4104) * k4,\n        )\n        k6 = step_size * func(\n            x[i] + step_size / 2,\n            y[i]\n            - (8 / 27) * k1\n            + 2 * k2\n            - (3544 / 2565) * k3\n            + (1859 / 4104) * k4\n            - (11 / 40) * k5,\n        )\n        y[i + 1] = (\n            y[i]\n            + (16 / 135) * k1\n            + (6656 / 12825) * k3\n            + (28561 / 56430) * k4\n            - (9 / 50) * k5\n            + (2 / 55) * k6\n        )\n        x[i + 1] = step_size + x[i]\n    return y\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/numerical_analysis/runge_kutta_gills.py",
    "content": "\"\"\"\nUse the Runge-Kutta-Gill's method of order 4 to solve Ordinary Differential Equations.\n\nhttps://www.geeksforgeeks.org/gills-4th-order-method-to-solve-differential-equations/\nAuthor : Ravi Kumar\n\"\"\"\n\nfrom collections.abc import Callable\nfrom math import sqrt\n\nimport numpy as np\n\n\ndef runge_kutta_gills(\n    func: Callable[[float, float], float],\n    x_initial: float,\n    y_initial: float,\n    step_size: float,\n    x_final: float,\n) -> np.ndarray:\n    \"\"\"\n    Solve an Ordinary Differential Equations using Runge-Kutta-Gills Method of order 4.\n\n    args:\n    func: An ordinary differential equation (ODE) as function of x and y.\n    x_initial: The initial value of x.\n    y_initial: The initial value of y.\n    step_size: The increment value of x.\n    x_final: The final value of x.\n\n    Returns:\n        Solution of y at each nodal point\n\n    >>> def f(x, y):\n    ...     return (x-y)/2\n    >>> y = runge_kutta_gills(f, 0, 3, 0.2, 5)\n    >>> float(y[-1])\n    3.4104259225717537\n\n    >>> def f(x,y):\n    ...     return x\n    >>> y = runge_kutta_gills(f, -1, 0, 0.2, 0)\n    >>> y\n    array([ 0.  , -0.18, -0.32, -0.42, -0.48, -0.5 ])\n\n    >>> def f(x, y):\n    ...     return x + y\n    >>> y = runge_kutta_gills(f, 0, 0, 0.2, -1)\n    Traceback (most recent call last):\n        ...\n    ValueError: The final value of x must be greater than initial value of x.\n\n    >>> def f(x, y):\n    ...     return x\n    >>> y = runge_kutta_gills(f, -1, 0, -0.2, 0)\n    Traceback (most recent call last):\n        ...\n    ValueError: Step size must be positive.\n    \"\"\"\n    if x_initial >= x_final:\n        raise ValueError(\n            \"The final value of x must be greater than initial value of x.\"\n        )\n\n    if step_size <= 0:\n        raise ValueError(\"Step size must be positive.\")\n\n    n = int((x_final - x_initial) / step_size)\n    y = np.zeros(n + 1)\n    y[0] = y_initial\n    for i in range(n):\n        k1 = step_size * func(x_initial, y[i])\n        k2 = step_size * func(x_initial + step_size / 2, y[i] + k1 / 2)\n        k3 = step_size * func(\n            x_initial + step_size / 2,\n            y[i] + (-0.5 + 1 / sqrt(2)) * k1 + (1 - 1 / sqrt(2)) * k2,\n        )\n        k4 = step_size * func(\n            x_initial + step_size, y[i] - (1 / sqrt(2)) * k2 + (1 + 1 / sqrt(2)) * k3\n        )\n\n        y[i + 1] = y[i] + (k1 + (2 - sqrt(2)) * k2 + (2 + sqrt(2)) * k3 + k4) / 6\n        x_initial += step_size\n    return y\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/numerical_analysis/secant_method.py",
    "content": "\"\"\"\nImplementing Secant method in Python\nAuthor: dimgrichr\n\"\"\"\n\nfrom math import exp\n\n\ndef f(x: float) -> float:\n    \"\"\"\n    >>> f(5)\n    39.98652410600183\n    \"\"\"\n    return 8 * x - 2 * exp(-x)\n\n\ndef secant_method(lower_bound: float, upper_bound: float, repeats: int) -> float:\n    \"\"\"\n    >>> secant_method(1, 3, 2)\n    0.2139409276214589\n    \"\"\"\n    x0 = lower_bound\n    x1 = upper_bound\n    for _ in range(repeats):\n        x0, x1 = x1, x1 - (f(x1) * (x1 - x0)) / (f(x1) - f(x0))\n    return x1\n\n\nif __name__ == \"__main__\":\n    print(f\"Example: {secant_method(1, 3, 2)}\")\n"
  },
  {
    "path": "maths/numerical_analysis/simpson_rule.py",
    "content": "\"\"\"\nNumerical integration or quadrature for a smooth function f with known values at x_i\n\nThis method is the classical approach of summing 'Equally Spaced Abscissas'\n\nmethod 2:\n\"Simpson Rule\"\n\n\"\"\"\n\n\ndef method_2(boundary: list[int], steps: int) -> float:\n    # \"Simpson Rule\"\n    # int(f) = delta_x/2 * (b-a)/3*(f1 + 4f2 + 2f_3 + ... + fn)\n    \"\"\"\n    Calculate the definite integral of a function using Simpson's Rule.\n    :param boundary: A list containing the lower and upper bounds of integration.\n    :param steps: The number of steps or resolution for the integration.\n    :return: The approximate integral value.\n\n    >>> round(method_2([0, 2, 4], 10), 10)\n    2.6666666667\n    >>> round(method_2([2, 0], 10), 10)\n    -0.2666666667\n    >>> round(method_2([-2, -1], 10), 10)\n    2.172\n    >>> round(method_2([0, 1], 10), 10)\n    0.3333333333\n    >>> round(method_2([0, 2], 10), 10)\n    2.6666666667\n    >>> round(method_2([0, 2], 100), 10)\n    2.5621226667\n    >>> round(method_2([0, 1], 1000), 10)\n    0.3320026653\n    >>> round(method_2([0, 2], 0), 10)\n    Traceback (most recent call last):\n        ...\n    ZeroDivisionError: Number of steps must be greater than zero\n    >>> round(method_2([0, 2], -10), 10)\n    Traceback (most recent call last):\n        ...\n    ZeroDivisionError: Number of steps must be greater than zero\n    \"\"\"\n    if steps <= 0:\n        raise ZeroDivisionError(\"Number of steps must be greater than zero\")\n\n    h = (boundary[1] - boundary[0]) / steps\n    a = boundary[0]\n    b = boundary[1]\n    x_i = make_points(a, b, h)\n    y = 0.0\n    y += (h / 3.0) * f(a)\n    cnt = 2\n    for i in x_i:\n        y += (h / 3) * (4 - 2 * (cnt % 2)) * f(i)\n        cnt += 1\n    y += (h / 3.0) * f(b)\n    return y\n\n\ndef make_points(a, b, h):\n    x = a + h\n    while x < (b - h):\n        yield x\n        x = x + h\n\n\ndef f(x):  # enter your function here\n    y = (x - 0) * (x - 0)\n    return y\n\n\ndef main():\n    a = 0.0  # Lower bound of integration\n    b = 1.0  # Upper bound of integration\n    steps = 10.0  # number of steps or resolution\n    boundary = [a, b]  # boundary of integration\n    y = method_2(boundary, steps)\n    print(f\"y = {y}\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    main()\n"
  },
  {
    "path": "maths/numerical_analysis/square_root.py",
    "content": "import math\n\n\ndef fx(x: float, a: float) -> float:\n    return math.pow(x, 2) - a\n\n\ndef fx_derivative(x: float) -> float:\n    return 2 * x\n\n\ndef get_initial_point(a: float) -> float:\n    start = 2.0\n\n    while start <= a:\n        start = math.pow(start, 2)\n\n    return start\n\n\ndef square_root_iterative(\n    a: float, max_iter: int = 9999, tolerance: float = 1e-14\n) -> float:\n    \"\"\"\n    Square root approximated using Newton's method.\n    https://en.wikipedia.org/wiki/Newton%27s_method\n\n    >>> all(abs(square_root_iterative(i) - math.sqrt(i)) <= 1e-14 for i in range(500))\n    True\n\n    >>> square_root_iterative(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: math domain error\n\n    >>> square_root_iterative(4)\n    2.0\n\n    >>> square_root_iterative(3.2)\n    1.788854381999832\n\n    >>> square_root_iterative(140)\n    11.832159566199232\n    \"\"\"\n\n    if a < 0:\n        raise ValueError(\"math domain error\")\n\n    value = get_initial_point(a)\n\n    for _ in range(max_iter):\n        prev_value = value\n        value = value - fx(value, a) / fx_derivative(value)\n        if abs(prev_value - value) < tolerance:\n            return value\n\n    return value\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "maths/numerical_analysis/weierstrass_method.py",
    "content": "from collections.abc import Callable\n\nimport numpy as np\n\n\ndef weierstrass_method(\n    polynomial: Callable[[np.ndarray], np.ndarray],\n    degree: int,\n    roots: np.ndarray | None = None,\n    max_iter: int = 100,\n) -> np.ndarray:\n    \"\"\"\n    Approximates all complex roots of a polynomial using the\n    Weierstrass (Durand-Kerner) method.\n    Args:\n        polynomial: A function that takes a NumPy array of complex numbers and returns\n                    the polynomial values at those points.\n        degree: Degree of the polynomial (number of roots to find). Must be ≥ 1.\n        roots:  Optional initial guess as a NumPy array of complex numbers.\n                Must have length equal to 'degree'.\n                If None, perturbed complex roots of unity are used.\n        max_iter: Number of iterations to perform (default: 100).\n\n    Returns:\n        np.ndarray: Array of approximated complex roots.\n\n    Raises:\n        ValueError: If degree < 1, or if initial roots length doesn't match the degree.\n\n    Note:\n        - Root updates are clipped to prevent numerical overflow.\n\n    Example:\n        >>> import numpy as np\n        >>> def check(poly, degree, expected):\n        ...     roots = weierstrass_method(poly, degree)\n        ...     return np.allclose(np.sort(roots), np.sort(expected))\n\n        >>> check(\n        ...     lambda x: x**2 - 1,\n        ...     2,\n        ...     np.array([-1, 1]))\n        True\n\n        >>> check(\n        ...     lambda x: x**3 - 4.5*x**2 + 5.75*x - 1.875,\n        ...     3,\n        ...     np.array([1.5, 0.5, 2.5])\n        ... )\n        True\n\n    See Also:\n        https://en.wikipedia.org/wiki/Durand%E2%80%93Kerner_method\n    \"\"\"\n\n    if degree < 1:\n        raise ValueError(\"Degree of the polynomial must be at least 1.\")\n\n    if roots is None:\n        # Use perturbed complex roots of unity as initial guesses\n        rng = np.random.default_rng()\n        roots = np.array(\n            [\n                np.exp(2j * np.pi * i / degree) * (1 + 1e-3 * rng.random())\n                for i in range(degree)\n            ],\n            dtype=np.complex128,\n        )\n\n    else:\n        roots = np.asarray(roots, dtype=np.complex128)\n        if roots.shape[0] != degree:\n            raise ValueError(\n                \"Length of initial roots must match the degree of the polynomial.\"\n            )\n\n    for _ in range(max_iter):\n        # Construct the product denominator for each root\n        denominator = np.array([root - roots for root in roots], dtype=np.complex128)\n        np.fill_diagonal(denominator, 1.0)  # Avoid zero in diagonal\n        denominator = np.prod(denominator, axis=1)\n\n        # Evaluate polynomial at each root\n        numerator = polynomial(roots).astype(np.complex128)\n\n        # Compute update and clip to prevent overflow\n        delta = numerator / denominator\n        delta = np.clip(delta, -1e10, 1e10)\n        roots -= delta\n\n    return roots\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/odd_sieve.py",
    "content": "from itertools import compress, repeat\nfrom math import ceil, sqrt\n\n\ndef odd_sieve(num: int) -> list[int]:\n    \"\"\"\n    Returns the prime numbers < `num`. The prime numbers are calculated using an\n    odd sieve implementation of the Sieve of Eratosthenes algorithm\n    (see for reference https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes).\n\n    >>> odd_sieve(2)\n    []\n    >>> odd_sieve(3)\n    [2]\n    >>> odd_sieve(10)\n    [2, 3, 5, 7]\n    >>> odd_sieve(20)\n    [2, 3, 5, 7, 11, 13, 17, 19]\n    \"\"\"\n\n    if num <= 2:\n        return []\n    if num == 3:\n        return [2]\n\n    # Odd sieve for numbers in range [3, num - 1]\n    sieve = bytearray(b\"\\x01\") * ((num >> 1) - 1)\n\n    for i in range(3, int(sqrt(num)) + 1, 2):\n        if sieve[(i >> 1) - 1]:\n            i_squared = i**2\n            sieve[(i_squared >> 1) - 1 :: i] = repeat(\n                0, ceil((num - i_squared) / (i << 1))\n            )\n\n    return [2, *list(compress(range(3, num, 2), sieve))]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/perfect_cube.py",
    "content": "def perfect_cube(n: int) -> bool:\n    \"\"\"\n    Check if a number is a perfect cube or not.\n\n    >>> perfect_cube(27)\n    True\n    >>> perfect_cube(4)\n    False\n    \"\"\"\n    val = n ** (1 / 3)\n    return (val * val * val) == n\n\n\ndef perfect_cube_binary_search(n: int) -> bool:\n    \"\"\"\n    Check if a number is a perfect cube or not using binary search.\n    Time complexity : O(Log(n))\n    Space complexity: O(1)\n\n    >>> perfect_cube_binary_search(27)\n    True\n    >>> perfect_cube_binary_search(64)\n    True\n    >>> perfect_cube_binary_search(4)\n    False\n    >>> perfect_cube_binary_search(\"a\")\n    Traceback (most recent call last):\n        ...\n    TypeError: perfect_cube_binary_search() only accepts integers\n    >>> perfect_cube_binary_search(0.1)\n    Traceback (most recent call last):\n        ...\n    TypeError: perfect_cube_binary_search() only accepts integers\n    \"\"\"\n    if not isinstance(n, int):\n        raise TypeError(\"perfect_cube_binary_search() only accepts integers\")\n    if n < 0:\n        n = -n\n    left = 0\n    right = n\n    while left <= right:\n        mid = left + (right - left) // 2\n        if mid * mid * mid == n:\n            return True\n        elif mid * mid * mid < n:\n            left = mid + 1\n        else:\n            right = mid - 1\n    return False\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/perfect_number.py",
    "content": "\"\"\"\n== Perfect Number ==\nIn number theory, a perfect number is a positive integer that is equal to the sum of\nits positive divisors, excluding the number itself.\nFor example: 6 ==> divisors[1, 2, 3, 6]\n    Excluding 6, the sum(divisors) is 1 + 2 + 3 = 6\n    So, 6 is a Perfect Number\n\nOther examples of Perfect Numbers: 28, 486, ...\n\nhttps://en.wikipedia.org/wiki/Perfect_number\n\"\"\"\n\n\ndef perfect(number: int) -> bool:\n    \"\"\"\n    Check if a number is a perfect number.\n\n    A perfect number is a positive integer that is equal to the sum of its proper\n    divisors (excluding itself).\n\n    Args:\n        number: The number to be checked.\n\n    Returns:\n        True if the number is a perfect number otherwise, False.\n    Start from 1 because dividing by 0 will raise ZeroDivisionError.\n    A number at most can be divisible by the half of the number except the number\n    itself. For example, 6 is at most can be divisible by 3 except by 6 itself.\n    Examples:\n    >>> perfect(27)\n    False\n    >>> perfect(28)\n    True\n    >>> perfect(29)\n    False\n    >>> perfect(6)\n    True\n    >>> perfect(12)\n    False\n    >>> perfect(496)\n    True\n    >>> perfect(8128)\n    True\n    >>> perfect(0)\n    False\n    >>> perfect(-1)\n    False\n    >>> perfect(33550336)  # Large perfect number\n    True\n    >>> perfect(33550337)  # Just above a large perfect number\n    False\n    >>> perfect(1)  # Edge case: 1 is not a perfect number\n    False\n    >>> perfect(\"123\")  # String representation of a number\n    Traceback (most recent call last):\n    ...\n    ValueError: number must be an integer\n    >>> perfect(12.34)\n    Traceback (most recent call last):\n      ...\n    ValueError: number must be an integer\n    >>> perfect(\"Hello\")\n    Traceback (most recent call last):\n      ...\n    ValueError: number must be an integer\n    \"\"\"\n    if not isinstance(number, int):\n        raise ValueError(\"number must be an integer\")\n    if number <= 0:\n        return False\n    return sum(i for i in range(1, number // 2 + 1) if number % i == 0) == number\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    print(\"Program to check whether a number is a Perfect number or not...\")\n    try:\n        number = int(input(\"Enter a positive integer: \").strip())\n    except ValueError:\n        msg = \"number must be an integer\"\n        raise ValueError(msg)\n\n    print(f\"{number} is {'' if perfect(number) else 'not '}a Perfect Number.\")\n"
  },
  {
    "path": "maths/perfect_square.py",
    "content": "import math\n\n\ndef perfect_square(num: int) -> bool:\n    \"\"\"\n    Check if a number is perfect square number or not\n    :param num: the number to be checked\n    :return: True if number is square number, otherwise False\n\n    >>> perfect_square(9)\n    True\n    >>> perfect_square(16)\n    True\n    >>> perfect_square(1)\n    True\n    >>> perfect_square(0)\n    True\n    >>> perfect_square(10)\n    False\n    \"\"\"\n    return math.sqrt(num) * math.sqrt(num) == num\n\n\ndef perfect_square_binary_search(n: int) -> bool:\n    \"\"\"\n    Check if a number is perfect square using binary search.\n    Time complexity : O(Log(n))\n    Space complexity: O(1)\n\n    >>> perfect_square_binary_search(9)\n    True\n    >>> perfect_square_binary_search(16)\n    True\n    >>> perfect_square_binary_search(1)\n    True\n    >>> perfect_square_binary_search(0)\n    True\n    >>> perfect_square_binary_search(10)\n    False\n    >>> perfect_square_binary_search(-1)\n    False\n    >>> perfect_square_binary_search(1.1)\n    False\n    >>> perfect_square_binary_search(\"a\")\n    Traceback (most recent call last):\n        ...\n    TypeError: '<=' not supported between instances of 'int' and 'str'\n    >>> perfect_square_binary_search(None)\n    Traceback (most recent call last):\n        ...\n    TypeError: '<=' not supported between instances of 'int' and 'NoneType'\n    >>> perfect_square_binary_search([])\n    Traceback (most recent call last):\n        ...\n    TypeError: '<=' not supported between instances of 'int' and 'list'\n    \"\"\"\n    left = 0\n    right = n\n    while left <= right:\n        mid = (left + right) // 2\n        if mid**2 == n:\n            return True\n        elif mid**2 > n:\n            right = mid - 1\n        else:\n            left = mid + 1\n    return False\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/persistence.py",
    "content": "def multiplicative_persistence(num: int) -> int:\n    \"\"\"\n    Return the persistence of a given number.\n\n    https://en.wikipedia.org/wiki/Persistence_of_a_number\n\n    >>> multiplicative_persistence(217)\n    2\n    >>> multiplicative_persistence(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: multiplicative_persistence() does not accept negative values\n    >>> multiplicative_persistence(\"long number\")\n    Traceback (most recent call last):\n        ...\n    ValueError: multiplicative_persistence() only accepts integral values\n    \"\"\"\n\n    if not isinstance(num, int):\n        raise ValueError(\"multiplicative_persistence() only accepts integral values\")\n    if num < 0:\n        raise ValueError(\"multiplicative_persistence() does not accept negative values\")\n\n    steps = 0\n    num_string = str(num)\n\n    while len(num_string) != 1:\n        numbers = [int(i) for i in num_string]\n\n        total = 1\n        for i in range(len(numbers)):\n            total *= numbers[i]\n\n        num_string = str(total)\n\n        steps += 1\n    return steps\n\n\ndef additive_persistence(num: int) -> int:\n    \"\"\"\n    Return the persistence of a given number.\n\n    https://en.wikipedia.org/wiki/Persistence_of_a_number\n\n    >>> additive_persistence(199)\n    3\n    >>> additive_persistence(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: additive_persistence() does not accept negative values\n    >>> additive_persistence(\"long number\")\n    Traceback (most recent call last):\n        ...\n    ValueError: additive_persistence() only accepts integral values\n    \"\"\"\n\n    if not isinstance(num, int):\n        raise ValueError(\"additive_persistence() only accepts integral values\")\n    if num < 0:\n        raise ValueError(\"additive_persistence() does not accept negative values\")\n\n    steps = 0\n    num_string = str(num)\n\n    while len(num_string) != 1:\n        numbers = [int(i) for i in num_string]\n\n        total = 0\n        for i in range(len(numbers)):\n            total += numbers[i]\n\n        num_string = str(total)\n\n        steps += 1\n    return steps\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/pi_generator.py",
    "content": "def calculate_pi(limit: int) -> str:\n    \"\"\"\n    https://en.wikipedia.org/wiki/Leibniz_formula_for_%CF%80\n    Leibniz Formula for Pi\n\n    The Leibniz formula is the special case arctan(1) = pi / 4.\n    Leibniz's formula converges extremely slowly: it exhibits sublinear convergence.\n\n    Convergence (https://en.wikipedia.org/wiki/Leibniz_formula_for_%CF%80#Convergence)\n\n    We cannot try to prove against an interrupted, uncompleted generation.\n    https://en.wikipedia.org/wiki/Leibniz_formula_for_%CF%80#Unusual_behaviour\n    The errors can in fact be predicted, but those calculations also approach infinity\n    for accuracy.\n\n    Our output will be a string so that we can definitely store all digits.\n\n    >>> import math\n    >>> float(calculate_pi(15)) == math.pi\n    True\n\n    Since we cannot predict errors or interrupt any infinite alternating series\n    generation since they approach infinity, or interrupt any alternating series, we'll\n    need math.isclose()\n\n    >>> math.isclose(float(calculate_pi(50)), math.pi)\n    True\n    >>> math.isclose(float(calculate_pi(100)), math.pi)\n    True\n\n    Since math.pi contains only 16 digits, here are some tests with known values:\n\n    >>> calculate_pi(50)\n    '3.14159265358979323846264338327950288419716939937510'\n    >>> calculate_pi(80)\n    '3.14159265358979323846264338327950288419716939937510582097494459230781640628620899'\n    \"\"\"\n    # Variables used for the iteration process\n    q = 1\n    r = 0\n    t = 1\n    k = 1\n    n = 3\n    m = 3\n\n    decimal = limit\n    counter = 0\n\n    result = \"\"\n\n    # We can't compare against anything if we make a generator,\n    # so we'll stick with plain return logic\n    while counter != decimal + 1:\n        if 4 * q + r - t < n * t:\n            result += str(n)\n            if counter == 0:\n                result += \".\"\n\n            if decimal == counter:\n                break\n\n            counter += 1\n            nr = 10 * (r - n * t)\n            n = ((10 * (3 * q + r)) // t) - 10 * n\n            q *= 10\n            r = nr\n        else:\n            nr = (2 * q + r) * m\n            nn = (q * (7 * k) + 2 + (r * m)) // (t * m)\n            q *= k\n            t *= m\n            m += 2\n            k += 1\n            n = nn\n            r = nr\n    return result\n\n\ndef main() -> None:\n    print(f\"{calculate_pi(50) = }\")\n    import doctest\n\n    doctest.testmod()\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "maths/pi_monte_carlo_estimation.py",
    "content": "import random\n\n\nclass Point:\n    def __init__(self, x: float, y: float) -> None:\n        self.x = x\n        self.y = y\n\n    def is_in_unit_circle(self) -> bool:\n        \"\"\"\n        True, if the point lies in the unit circle\n        False, otherwise\n        \"\"\"\n        return (self.x**2 + self.y**2) <= 1\n\n    @classmethod\n    def random_unit_square(cls):\n        \"\"\"\n        Generates a point randomly drawn from the unit square [0, 1) x [0, 1).\n        \"\"\"\n        return cls(x=random.random(), y=random.random())\n\n\ndef estimate_pi(number_of_simulations: int) -> float:\n    \"\"\"\n    Generates an estimate of the mathematical constant PI.\n    See https://en.wikipedia.org/wiki/Monte_Carlo_method#Overview\n\n    The estimate is generated by Monte Carlo simulations. Let U be uniformly drawn from\n    the unit square [0, 1) x [0, 1). The probability that U lies in the unit circle is:\n\n        P[U in unit circle] = 1/4 PI\n\n    and therefore\n\n        PI = 4 * P[U in unit circle]\n\n    We can get an estimate of the probability P[U in unit circle].\n    See https://en.wikipedia.org/wiki/Empirical_probability by:\n\n        1. Draw a point uniformly from the unit square.\n        2. Repeat the first step n times and count the number of points in the unit\n            circle, which is called m.\n        3. An estimate of P[U in unit circle] is m/n\n    \"\"\"\n    if number_of_simulations < 1:\n        raise ValueError(\"At least one simulation is necessary to estimate PI.\")\n\n    number_in_unit_circle = 0\n    for _ in range(number_of_simulations):\n        random_point = Point.random_unit_square()\n\n        if random_point.is_in_unit_circle():\n            number_in_unit_circle += 1\n\n    return 4 * number_in_unit_circle / number_of_simulations\n\n\nif __name__ == \"__main__\":\n    # import doctest\n\n    # doctest.testmod()\n    from math import pi\n\n    prompt = \"Please enter the desired number of Monte Carlo simulations: \"\n    my_pi = estimate_pi(int(input(prompt).strip()))\n    print(f\"An estimate of PI is {my_pi} with an error of {abs(my_pi - pi)}\")\n"
  },
  {
    "path": "maths/points_are_collinear_3d.py",
    "content": "\"\"\"\nCheck if three points are collinear in 3D.\n\nIn short, the idea is that we are able to create a triangle using three points,\nand the area of that triangle can determine if the three points are collinear or not.\n\n\nFirst, we create two vectors with the same initial point from the three points,\nthen we will calculate the cross-product of them.\n\nThe length of the cross vector is numerically equal to the area of a parallelogram.\n\nFinally, the area of the triangle is equal to half of the area of the parallelogram.\n\nSince we are only differentiating between zero and anything else,\nwe can get rid of the square root when calculating the length of the vector,\nand also the division by two at the end.\n\nFrom a second perspective, if the two vectors are parallel and overlapping,\nwe can't get a nonzero perpendicular vector,\nsince there will be an infinite number of orthogonal vectors.\n\nTo simplify the solution we will not calculate the length,\nbut we will decide directly from the vector whether it is equal to (0, 0, 0) or not.\n\n\nRead More:\n    https://math.stackexchange.com/a/1951650\n\"\"\"\n\nVector3d = tuple[float, float, float]\nPoint3d = tuple[float, float, float]\n\n\ndef create_vector(end_point1: Point3d, end_point2: Point3d) -> Vector3d:\n    \"\"\"\n    Pass two points to get the vector from them in the form (x, y, z).\n\n    >>> create_vector((0, 0, 0), (1, 1, 1))\n    (1, 1, 1)\n    >>> create_vector((45, 70, 24), (47, 32, 1))\n    (2, -38, -23)\n    >>> create_vector((-14, -1, -8), (-7, 6, 4))\n    (7, 7, 12)\n    \"\"\"\n    x = end_point2[0] - end_point1[0]\n    y = end_point2[1] - end_point1[1]\n    z = end_point2[2] - end_point1[2]\n    return (x, y, z)\n\n\ndef get_3d_vectors_cross(ab: Vector3d, ac: Vector3d) -> Vector3d:\n    \"\"\"\n    Get the cross of the two vectors AB and AC.\n\n    I used determinant of 2x2 to get the determinant of the 3x3 matrix in the process.\n\n    Read More:\n        https://en.wikipedia.org/wiki/Cross_product\n        https://en.wikipedia.org/wiki/Determinant\n\n    >>> get_3d_vectors_cross((3, 4, 7), (4, 9, 2))\n    (-55, 22, 11)\n    >>> get_3d_vectors_cross((1, 1, 1), (1, 1, 1))\n    (0, 0, 0)\n    >>> get_3d_vectors_cross((-4, 3, 0), (3, -9, -12))\n    (-36, -48, 27)\n    >>> get_3d_vectors_cross((17.67, 4.7, 6.78), (-9.5, 4.78, -19.33))\n    (-123.2594, 277.15110000000004, 129.11260000000001)\n    \"\"\"\n    x = ab[1] * ac[2] - ab[2] * ac[1]  # *i\n    y = (ab[0] * ac[2] - ab[2] * ac[0]) * -1  # *j\n    z = ab[0] * ac[1] - ab[1] * ac[0]  # *k\n    return (x, y, z)\n\n\ndef is_zero_vector(vector: Vector3d, accuracy: int) -> bool:\n    \"\"\"\n    Check if vector is equal to (0, 0, 0) or not.\n\n    Since the algorithm is very accurate, we will never get a zero vector,\n    so we need to round the vector axis,\n    because we want a result that is either True or False.\n    In other applications, we can return a float that represents the collinearity ratio.\n\n    >>> is_zero_vector((0, 0, 0), accuracy=10)\n    True\n    >>> is_zero_vector((15, 74, 32), accuracy=10)\n    False\n    >>> is_zero_vector((-15, -74, -32), accuracy=10)\n    False\n    \"\"\"\n    return tuple(round(x, accuracy) for x in vector) == (0, 0, 0)\n\n\ndef are_collinear(a: Point3d, b: Point3d, c: Point3d, accuracy: int = 10) -> bool:\n    \"\"\"\n    Check if three points are collinear or not.\n\n    1- Create two vectors AB and AC.\n    2- Get the cross vector of the two vectors.\n    3- Calculate the length of the cross vector.\n    4- If the length is zero then the points are collinear, else they are not.\n\n    The use of the accuracy parameter is explained in is_zero_vector docstring.\n\n    >>> are_collinear((4.802293498137402, 3.536233125455244, 0),\n    ...               (-2.186788107953106, -9.24561398001649, 7.141509524846482),\n    ...               (1.530169574640268, -2.447927606600034, 3.343487096469054))\n    True\n    >>> are_collinear((-6, -2, 6),\n    ...               (6.200213806439997, -4.930157614926678, -4.482371908289856),\n    ...               (-4.085171149525941, -2.459889509029438, 4.354787180795383))\n    True\n    >>> are_collinear((2.399001826862445, -2.452009976680793, 4.464656666157666),\n    ...               (-3.682816335934376, 5.753788986533145, 9.490993909044244),\n    ...               (1.962903518985307, 3.741415730125627, 7))\n    False\n    >>> are_collinear((1.875375340689544, -7.268426006071538, 7.358196269835993),\n    ...               (-3.546599383667157, -4.630005261513976, 3.208784032924246),\n    ...               (-2.564606140206386, 3.937845170672183, 7))\n    False\n    \"\"\"\n    ab = create_vector(a, b)\n    ac = create_vector(a, c)\n    return is_zero_vector(get_3d_vectors_cross(ab, ac), accuracy)\n"
  },
  {
    "path": "maths/pollard_rho.py",
    "content": "from __future__ import annotations\n\nfrom math import gcd\n\n\ndef pollard_rho(\n    num: int,\n    seed: int = 2,\n    step: int = 1,\n    attempts: int = 3,\n) -> int | None:\n    \"\"\"\n    Use Pollard's Rho algorithm to return a nontrivial factor of ``num``.\n    The returned factor may be composite and require further factorization.\n    If the algorithm will return None if it fails to find a factor within\n    the specified number of attempts or within the specified number of steps.\n    If ``num`` is prime, this algorithm is guaranteed to return None.\n    https://en.wikipedia.org/wiki/Pollard%27s_rho_algorithm\n\n    >>> pollard_rho(18446744073709551617)\n    274177\n    >>> pollard_rho(97546105601219326301)\n    9876543191\n    >>> pollard_rho(100)\n    2\n    >>> pollard_rho(17)\n    >>> pollard_rho(17**3)\n    17\n    >>> pollard_rho(17**3, attempts=1)\n    >>> pollard_rho(3*5*7)\n    21\n    >>> pollard_rho(1)\n    Traceback (most recent call last):\n        ...\n    ValueError: The input value cannot be less than 2\n    \"\"\"\n    # A value less than 2 can cause an infinite loop in the algorithm.\n    if num < 2:\n        raise ValueError(\"The input value cannot be less than 2\")\n\n    # Because of the relationship between ``f(f(x))`` and ``f(x)``, this\n    # algorithm struggles to find factors that are divisible by two.\n    # As a workaround, we specifically check for two and even inputs.\n    #   See: https://math.stackexchange.com/a/2856214/165820\n    if num > 2 and num % 2 == 0:\n        return 2\n\n    # Pollard's Rho algorithm requires a function that returns pseudorandom\n    # values between 0 <= X < ``num``.  It doesn't need to be random in the\n    # sense that the output value is cryptographically secure or difficult\n    # to calculate, it only needs to be random in the sense that all output\n    # values should be equally likely to appear.\n    # For this reason, Pollard suggested using ``f(x) = (x**2 - 1) % num``\n    # However, the success of Pollard's algorithm isn't guaranteed and is\n    # determined in part by the initial seed and the chosen random function.\n    # To make retries easier, we will instead use ``f(x) = (x**2 + C) % num``\n    # where ``C`` is a value that we can modify between each attempt.\n    def rand_fn(value: int, step: int, modulus: int) -> int:\n        \"\"\"\n        Returns a pseudorandom value modulo ``modulus`` based on the\n        input ``value`` and attempt-specific ``step`` size.\n\n        >>> rand_fn(0, 0, 0)\n        Traceback (most recent call last):\n            ...\n        ZeroDivisionError: integer division or modulo by zero\n        >>> rand_fn(1, 2, 3)\n        0\n        >>> rand_fn(0, 10, 7)\n        3\n        >>> rand_fn(1234, 1, 17)\n        16\n        \"\"\"\n        return (pow(value, 2) + step) % modulus\n\n    for _ in range(attempts):\n        # These track the position within the cycle detection logic.\n        tortoise = seed\n        hare = seed\n\n        while True:\n            # At each iteration, the tortoise moves one step and the hare moves two.\n            tortoise = rand_fn(tortoise, step, num)\n            hare = rand_fn(hare, step, num)\n            hare = rand_fn(hare, step, num)\n\n            # At some point both the tortoise and the hare will enter a cycle whose\n            # length ``p`` is a divisor of ``num``.  Once in that cycle, at some point\n            # the tortoise and hare will end up on the same value modulo ``p``.\n            # We can detect when this happens because the position difference between\n            # the tortoise and the hare will share a common divisor with ``num``.\n            divisor = gcd(hare - tortoise, num)\n\n            if divisor == 1:\n                # No common divisor yet, just keep searching.\n                continue\n            # We found a common divisor!\n            elif divisor == num:\n                # Unfortunately, the divisor is ``num`` itself and is useless.\n                break\n            else:\n                # The divisor is a nontrivial factor of ``num``!\n                return divisor\n\n        # If we made it here, then this attempt failed.\n        # We need to pick a new starting seed for the tortoise and hare\n        # in addition to a new step value for the random function.\n        # To keep this example implementation deterministic, the\n        # new values will be generated based on currently available\n        # values instead of using something like ``random.randint``.\n\n        # We can use the hare's position as the new seed.\n        # This is actually what Richard Brent's the \"optimized\" variant does.\n        seed = hare\n\n        # The new step value for the random function can just be incremented.\n        # At first the results will be similar to what the old function would\n        # have produced, but the value will quickly diverge after a bit.\n        step += 1\n\n    # We haven't found a divisor within the requested number of attempts.\n    # We were unlucky or ``num`` itself is actually prime.\n    return None\n\n\nif __name__ == \"__main__\":\n    import argparse\n\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\n        \"num\",\n        type=int,\n        help=\"The value to find a divisor of\",\n    )\n    parser.add_argument(\n        \"--attempts\",\n        type=int,\n        default=3,\n        help=\"The number of attempts before giving up\",\n    )\n    args = parser.parse_args()\n\n    divisor = pollard_rho(args.num, attempts=args.attempts)\n    if divisor is None:\n        print(f\"{args.num} is probably prime\")\n    else:\n        quotient = args.num // divisor\n        print(f\"{args.num} = {divisor} * {quotient}\")\n"
  },
  {
    "path": "maths/polynomial_evaluation.py",
    "content": "from collections.abc import Sequence\n\n\ndef evaluate_poly(poly: Sequence[float], x: float) -> float:\n    \"\"\"Evaluate a polynomial f(x) at specified point x and return the value.\n\n    Arguments:\n    poly -- the coefficients of a polynomial as an iterable in order of\n            ascending degree\n    x -- the point at which to evaluate the polynomial\n\n    >>> evaluate_poly((0.0, 0.0, 5.0, 9.3, 7.0), 10.0)\n    79800.0\n    \"\"\"\n    return sum(c * (x**i) for i, c in enumerate(poly))\n\n\ndef horner(poly: Sequence[float], x: float) -> float:\n    \"\"\"Evaluate a polynomial at specified point using Horner's method.\n\n    In terms of computational complexity, Horner's method is an efficient method\n    of evaluating a polynomial. It avoids the use of expensive exponentiation,\n    and instead uses only multiplication and addition to evaluate the polynomial\n    in O(n), where n is the degree of the polynomial.\n\n    https://en.wikipedia.org/wiki/Horner's_method\n\n    Arguments:\n    poly -- the coefficients of a polynomial as an iterable in order of\n            ascending degree\n    x -- the point at which to evaluate the polynomial\n\n    >>> horner((0.0, 0.0, 5.0, 9.3, 7.0), 10.0)\n    79800.0\n    \"\"\"\n    result = 0.0\n    for coeff in reversed(poly):\n        result = result * x + coeff\n    return result\n\n\nif __name__ == \"__main__\":\n    \"\"\"\n    Example:\n    >>> poly = (0.0, 0.0, 5.0, 9.3, 7.0)  # f(x) = 7.0x^4 + 9.3x^3 + 5.0x^2\n    >>> x = -13.0\n    >>> # f(-13) = 7.0(-13)^4 + 9.3(-13)^3 + 5.0(-13)^2 = 180339.9\n    >>> evaluate_poly(poly, x)\n    180339.9\n    \"\"\"\n    poly = (0.0, 0.0, 5.0, 9.3, 7.0)\n    x = 10.0\n    print(evaluate_poly(poly, x))\n    print(horner(poly, x))\n"
  },
  {
    "path": "maths/polynomials/__init__.py",
    "content": ""
  },
  {
    "path": "maths/polynomials/single_indeterminate_operations.py",
    "content": "\"\"\"\n\nThis module implements a single indeterminate polynomials class\nwith some basic operations\n\nReference: https://en.wikipedia.org/wiki/Polynomial\n\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections.abc import MutableSequence\n\n\nclass Polynomial:\n    def __init__(self, degree: int, coefficients: MutableSequence[float]) -> None:\n        \"\"\"\n        The coefficients should be in order of degree, from smallest to largest.\n        >>> p = Polynomial(2, [1, 2, 3])\n        >>> p = Polynomial(2, [1, 2, 3, 4])\n        Traceback (most recent call last):\n        ...\n        ValueError: The number of coefficients should be equal to the degree + 1.\n\n        \"\"\"\n        if len(coefficients) != degree + 1:\n            raise ValueError(\n                \"The number of coefficients should be equal to the degree + 1.\"\n            )\n\n        self.coefficients: list[float] = list(coefficients)\n        self.degree = degree\n\n    def __add__(self, polynomial_2: Polynomial) -> Polynomial:\n        \"\"\"\n        Polynomial addition\n        >>> p = Polynomial(2, [1, 2, 3])\n        >>> q = Polynomial(2, [1, 2, 3])\n        >>> p + q\n        6x^2 + 4x + 2\n        \"\"\"\n\n        if self.degree > polynomial_2.degree:\n            coefficients = self.coefficients[:]\n            for i in range(polynomial_2.degree + 1):\n                coefficients[i] += polynomial_2.coefficients[i]\n            return Polynomial(self.degree, coefficients)\n        else:\n            coefficients = polynomial_2.coefficients[:]\n            for i in range(self.degree + 1):\n                coefficients[i] += self.coefficients[i]\n            return Polynomial(polynomial_2.degree, coefficients)\n\n    def __sub__(self, polynomial_2: Polynomial) -> Polynomial:\n        \"\"\"\n        Polynomial subtraction\n        >>> p = Polynomial(2, [1, 2, 4])\n        >>> q = Polynomial(2, [1, 2, 3])\n        >>> p - q\n        1x^2\n        \"\"\"\n        return self + polynomial_2 * Polynomial(0, [-1])\n\n    def __neg__(self) -> Polynomial:\n        \"\"\"\n        Polynomial negation\n        >>> p = Polynomial(2, [1, 2, 3])\n        >>> -p\n         - 3x^2 - 2x - 1\n        \"\"\"\n        return Polynomial(self.degree, [-c for c in self.coefficients])\n\n    def __mul__(self, polynomial_2: Polynomial) -> Polynomial:\n        \"\"\"\n        Polynomial multiplication\n        >>> p = Polynomial(2, [1, 2, 3])\n        >>> q = Polynomial(2, [1, 2, 3])\n        >>> p * q\n        9x^4 + 12x^3 + 10x^2 + 4x + 1\n        \"\"\"\n        coefficients: list[float] = [0] * (self.degree + polynomial_2.degree + 1)\n        for i in range(self.degree + 1):\n            for j in range(polynomial_2.degree + 1):\n                coefficients[i + j] += (\n                    self.coefficients[i] * polynomial_2.coefficients[j]\n                )\n\n        return Polynomial(self.degree + polynomial_2.degree, coefficients)\n\n    def evaluate(self, substitution: float) -> float:\n        \"\"\"\n        Evaluates the polynomial at x.\n        >>> p = Polynomial(2, [1, 2, 3])\n        >>> p.evaluate(2)\n        17\n        \"\"\"\n        result: int | float = 0\n        for i in range(self.degree + 1):\n            result += self.coefficients[i] * (substitution**i)\n        return result\n\n    def __str__(self) -> str:\n        \"\"\"\n        >>> p = Polynomial(2, [1, 2, 3])\n        >>> print(p)\n        3x^2 + 2x + 1\n        \"\"\"\n        polynomial = \"\"\n        for i in range(self.degree, -1, -1):\n            if self.coefficients[i] == 0:\n                continue\n            elif self.coefficients[i] > 0:\n                if polynomial:\n                    polynomial += \" + \"\n            else:\n                polynomial += \" - \"\n\n            if i == 0:\n                polynomial += str(abs(self.coefficients[i]))\n            elif i == 1:\n                polynomial += str(abs(self.coefficients[i])) + \"x\"\n            else:\n                polynomial += str(abs(self.coefficients[i])) + \"x^\" + str(i)\n\n        return polynomial\n\n    def __repr__(self) -> str:\n        \"\"\"\n        >>> p = Polynomial(2, [1, 2, 3])\n        >>> p\n        3x^2 + 2x + 1\n        \"\"\"\n        return self.__str__()\n\n    def derivative(self) -> Polynomial:\n        \"\"\"\n        Returns the derivative of the polynomial.\n        >>> p = Polynomial(2, [1, 2, 3])\n        >>> p.derivative()\n        6x + 2\n        \"\"\"\n        coefficients: list[float] = [0] * self.degree\n        for i in range(self.degree):\n            coefficients[i] = self.coefficients[i + 1] * (i + 1)\n        return Polynomial(self.degree - 1, coefficients)\n\n    def integral(self, constant: float = 0) -> Polynomial:\n        \"\"\"\n        Returns the integral of the polynomial.\n        >>> p = Polynomial(2, [1, 2, 3])\n        >>> p.integral()\n        1.0x^3 + 1.0x^2 + 1.0x\n        \"\"\"\n        coefficients: list[float] = [0] * (self.degree + 2)\n        coefficients[0] = constant\n        for i in range(self.degree + 1):\n            coefficients[i + 1] = self.coefficients[i] / (i + 1)\n        return Polynomial(self.degree + 1, coefficients)\n\n    def __eq__(self, polynomial_2: object) -> bool:\n        \"\"\"\n        Checks if two polynomials are equal.\n        >>> p = Polynomial(2, [1, 2, 3])\n        >>> q = Polynomial(2, [1, 2, 3])\n        >>> p == q\n        True\n        \"\"\"\n        if not isinstance(polynomial_2, Polynomial):\n            return False\n\n        if self.degree != polynomial_2.degree:\n            return False\n\n        for i in range(self.degree + 1):\n            if self.coefficients[i] != polynomial_2.coefficients[i]:\n                return False\n\n        return True\n\n    def __ne__(self, polynomial_2: object) -> bool:\n        \"\"\"\n        Checks if two polynomials are not equal.\n        >>> p = Polynomial(2, [1, 2, 3])\n        >>> q = Polynomial(2, [1, 2, 3])\n        >>> p != q\n        False\n        \"\"\"\n        return not self.__eq__(polynomial_2)\n"
  },
  {
    "path": "maths/power_using_recursion.py",
    "content": "\"\"\"\n== Raise base to the power of exponent using recursion ==\n    Input -->\n        Enter the base: 3\n        Enter the exponent: 4\n    Output  -->\n        3 to the power of 4 is 81\n    Input -->\n        Enter the base: 2\n        Enter the exponent: 0\n    Output -->\n        2 to the power of 0 is 1\n\"\"\"\n\n\ndef power(base: int, exponent: int) -> float:\n    \"\"\"\n    Calculate the power of a base raised to an exponent.\n\n    >>> power(3, 4)\n    81\n    >>> power(2, 0)\n    1\n    >>> all(power(base, exponent) == pow(base, exponent)\n    ...     for base in range(-10, 10) for exponent in range(10))\n    True\n    >>> power('a', 1)\n    'a'\n    >>> power('a', 2)\n    Traceback (most recent call last):\n        ...\n    TypeError: can't multiply sequence by non-int of type 'str'\n    >>> power('a', 'b')\n    Traceback (most recent call last):\n        ...\n    TypeError: unsupported operand type(s) for -: 'str' and 'int'\n    >>> power(2, -1)\n    Traceback (most recent call last):\n        ...\n    RecursionError: maximum recursion depth exceeded\n    >>> power(0, 0)\n    1\n    >>> power(0, 1)\n    0\n    >>> power(5,6)\n    15625\n    >>> power(23, 12)\n    21914624432020321\n    \"\"\"\n    return base * power(base, (exponent - 1)) if exponent else 1\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    print(\"Raise base to the power of exponent using recursion...\")\n    base = int(input(\"Enter the base: \").strip())\n    exponent = int(input(\"Enter the exponent: \").strip())\n    result = power(base, abs(exponent))\n    if exponent < 0:  # power() does not properly deal w/ negative exponents\n        result = 1 / result\n    print(f\"{base} to the power of {exponent} is {result}\")\n"
  },
  {
    "path": "maths/prime_check.py",
    "content": "\"\"\"Prime Check.\"\"\"\n\nimport math\nimport unittest\n\nimport pytest\n\n\ndef is_prime(number: int) -> bool:\n    \"\"\"Checks to see if a number is a prime in O(sqrt(n)).\n\n    A number is prime if it has exactly two factors: 1 and itself.\n\n    >>> is_prime(0)\n    False\n    >>> is_prime(1)\n    False\n    >>> is_prime(2)\n    True\n    >>> is_prime(3)\n    True\n    >>> is_prime(27)\n    False\n    >>> is_prime(87)\n    False\n    >>> is_prime(563)\n    True\n    >>> is_prime(2999)\n    True\n    >>> is_prime(67483)\n    False\n    >>> is_prime(16.1)\n    Traceback (most recent call last):\n        ...\n    ValueError: is_prime() only accepts positive integers\n    >>> is_prime(-4)\n    Traceback (most recent call last):\n        ...\n    ValueError: is_prime() only accepts positive integers\n    \"\"\"\n\n    # precondition\n    if not isinstance(number, int) or not number >= 0:\n        raise ValueError(\"is_prime() only accepts positive integers\")\n\n    if 1 < number < 4:\n        # 2 and 3 are primes\n        return True\n    elif number < 2 or number % 2 == 0 or number % 3 == 0:\n        # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes\n        return False\n\n    # All primes number are in format of 6k +/- 1\n    for i in range(5, int(math.sqrt(number) + 1), 6):\n        if number % i == 0 or number % (i + 2) == 0:\n            return False\n    return True\n\n\nclass Test(unittest.TestCase):\n    def test_primes(self):\n        assert is_prime(2)\n        assert is_prime(3)\n        assert is_prime(5)\n        assert is_prime(7)\n        assert is_prime(11)\n        assert is_prime(13)\n        assert is_prime(17)\n        assert is_prime(19)\n        assert is_prime(23)\n        assert is_prime(29)\n\n    def test_not_primes(self):\n        with pytest.raises(ValueError):\n            is_prime(-19)\n        assert not is_prime(0), (\n            \"Zero doesn't have any positive factors, primes must have exactly two.\"\n        )\n        assert not is_prime(1), (\n            \"One only has 1 positive factor, primes must have exactly two.\"\n        )\n        assert not is_prime(2 * 2)\n        assert not is_prime(2 * 3)\n        assert not is_prime(3 * 3)\n        assert not is_prime(3 * 5)\n        assert not is_prime(3 * 5 * 7)\n\n\nif __name__ == \"__main__\":\n    unittest.main()\n"
  },
  {
    "path": "maths/prime_factors.py",
    "content": "\"\"\"\npython/black : True\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef prime_factors(n: int) -> list[int]:\n    \"\"\"\n    Returns prime factors of n as a list.\n\n    >>> prime_factors(0)\n    []\n    >>> prime_factors(100)\n    [2, 2, 5, 5]\n    >>> prime_factors(2560)\n    [2, 2, 2, 2, 2, 2, 2, 2, 2, 5]\n    >>> prime_factors(10**-2)\n    []\n    >>> prime_factors(0.02)\n    []\n    >>> x = prime_factors(10**241) # doctest: +NORMALIZE_WHITESPACE\n    >>> x == [2]*241 + [5]*241\n    True\n    >>> prime_factors(10**-354)\n    []\n    >>> prime_factors('hello')\n    Traceback (most recent call last):\n        ...\n    TypeError: '<=' not supported between instances of 'int' and 'str'\n    >>> prime_factors([1,2,'hello'])\n    Traceback (most recent call last):\n        ...\n    TypeError: '<=' not supported between instances of 'int' and 'list'\n\n    \"\"\"\n    i = 2\n    factors = []\n    while i * i <= n:\n        if n % i:\n            i += 1\n        else:\n            n //= i\n            factors.append(i)\n    if n > 1:\n        factors.append(n)\n    return factors\n\n\ndef unique_prime_factors(n: int) -> list[int]:\n    \"\"\"\n    Returns unique prime factors of n as a list.\n\n    >>> unique_prime_factors(0)\n    []\n    >>> unique_prime_factors(100)\n    [2, 5]\n    >>> unique_prime_factors(2560)\n    [2, 5]\n    >>> unique_prime_factors(10**-2)\n    []\n    >>> unique_prime_factors(0.02)\n    []\n    >>> unique_prime_factors(10**241)\n    [2, 5]\n    >>> unique_prime_factors(10**-354)\n    []\n    >>> unique_prime_factors('hello')\n    Traceback (most recent call last):\n        ...\n    TypeError: '<=' not supported between instances of 'int' and 'str'\n    >>> unique_prime_factors([1,2,'hello'])\n    Traceback (most recent call last):\n        ...\n    TypeError: '<=' not supported between instances of 'int' and 'list'\n    \"\"\"\n    i = 2\n    factors = []\n    while i * i <= n:\n        if not n % i:\n            while not n % i:\n                n //= i\n            factors.append(i)\n        i += 1\n    if n > 1:\n        factors.append(n)\n    return factors\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/prime_numbers.py",
    "content": "import math\nfrom collections.abc import Generator\n\n\ndef slow_primes(max_n: int) -> Generator[int]:\n    \"\"\"\n    Return a list of all primes numbers up to max.\n    >>> list(slow_primes(0))\n    []\n    >>> list(slow_primes(-1))\n    []\n    >>> list(slow_primes(-10))\n    []\n    >>> list(slow_primes(25))\n    [2, 3, 5, 7, 11, 13, 17, 19, 23]\n    >>> list(slow_primes(11))\n    [2, 3, 5, 7, 11]\n    >>> list(slow_primes(33))\n    [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]\n    >>> list(slow_primes(1000))[-1]\n    997\n    \"\"\"\n    numbers: Generator = (i for i in range(1, (max_n + 1)))\n    for i in (n for n in numbers if n > 1):\n        for j in range(2, i):\n            if (i % j) == 0:\n                break\n        else:\n            yield i\n\n\ndef primes(max_n: int) -> Generator[int]:\n    \"\"\"\n    Return a list of all primes numbers up to max.\n    >>> list(primes(0))\n    []\n    >>> list(primes(-1))\n    []\n    >>> list(primes(-10))\n    []\n    >>> list(primes(25))\n    [2, 3, 5, 7, 11, 13, 17, 19, 23]\n    >>> list(primes(11))\n    [2, 3, 5, 7, 11]\n    >>> list(primes(33))\n    [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]\n    >>> list(primes(1000))[-1]\n    997\n    \"\"\"\n    numbers: Generator = (i for i in range(1, (max_n + 1)))\n    for i in (n for n in numbers if n > 1):\n        # only need to check for factors up to sqrt(i)\n        bound = int(math.sqrt(i)) + 1\n        for j in range(2, bound):\n            if (i % j) == 0:\n                break\n        else:\n            yield i\n\n\ndef fast_primes(max_n: int) -> Generator[int]:\n    \"\"\"\n    Return a list of all primes numbers up to max.\n    >>> list(fast_primes(0))\n    []\n    >>> list(fast_primes(-1))\n    []\n    >>> list(fast_primes(-10))\n    []\n    >>> list(fast_primes(25))\n    [2, 3, 5, 7, 11, 13, 17, 19, 23]\n    >>> list(fast_primes(11))\n    [2, 3, 5, 7, 11]\n    >>> list(fast_primes(33))\n    [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]\n    >>> list(fast_primes(1000))[-1]\n    997\n    \"\"\"\n    numbers: Generator = (i for i in range(1, (max_n + 1), 2))\n    # It's useless to test even numbers as they will not be prime\n    if max_n > 2:\n        yield 2  # Because 2 will not be tested, it's necessary to yield it now\n    for i in (n for n in numbers if n > 1):\n        bound = int(math.sqrt(i)) + 1\n        for j in range(3, bound, 2):\n            # As we removed the even numbers, we don't need them now\n            if (i % j) == 0:\n                break\n        else:\n            yield i\n\n\ndef benchmark():\n    \"\"\"\n    Let's benchmark our functions side-by-side...\n    \"\"\"\n    from timeit import timeit\n\n    setup = \"from __main__ import slow_primes, primes, fast_primes\"\n    print(timeit(\"slow_primes(1_000_000_000_000)\", setup=setup, number=1_000_000))\n    print(timeit(\"primes(1_000_000_000_000)\", setup=setup, number=1_000_000))\n    print(timeit(\"fast_primes(1_000_000_000_000)\", setup=setup, number=1_000_000))\n\n\nif __name__ == \"__main__\":\n    number = int(input(\"Calculate primes up to:\\n>> \").strip())\n    for ret in primes(number):\n        print(ret)\n    benchmark()\n"
  },
  {
    "path": "maths/prime_sieve_eratosthenes.py",
    "content": "\"\"\"\nSieve of Eratosthenes\n\nInput: n = 10\nOutput: 2 3 5 7\n\nInput: n = 20\nOutput: 2 3 5 7 11 13 17 19\n\nyou can read in detail about this at\nhttps://en.wikipedia.org/wiki/Sieve_of_Eratosthenes\n\"\"\"\n\n\ndef prime_sieve_eratosthenes(num: int) -> list[int]:\n    \"\"\"\n    Print the prime numbers up to n\n\n    >>> prime_sieve_eratosthenes(10)\n    [2, 3, 5, 7]\n    >>> prime_sieve_eratosthenes(20)\n    [2, 3, 5, 7, 11, 13, 17, 19]\n    >>> prime_sieve_eratosthenes(2)\n    [2]\n    >>> prime_sieve_eratosthenes(1)\n    []\n    >>> prime_sieve_eratosthenes(-1)\n    Traceback (most recent call last):\n    ...\n    ValueError: Input must be a positive integer\n    \"\"\"\n\n    if num <= 0:\n        raise ValueError(\"Input must be a positive integer\")\n\n    primes = [True] * (num + 1)\n\n    p = 2\n    while p * p <= num:\n        if primes[p]:\n            for i in range(p * p, num + 1, p):\n                primes[i] = False\n        p += 1\n\n    return [prime for prime in range(2, num + 1) if primes[prime]]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    user_num = int(input(\"Enter a positive integer: \").strip())\n    print(prime_sieve_eratosthenes(user_num))\n"
  },
  {
    "path": "maths/primelib.py",
    "content": "\"\"\"\nCreated on Thu Oct  5 16:44:23 2017\n\n@author: Christian Bender\n\nThis Python library contains some useful functions to deal with\nprime numbers and whole numbers.\n\nOverview:\n\nis_prime(number)\nsieve_er(N)\nget_prime_numbers(N)\nprime_factorization(number)\ngreatest_prime_factor(number)\nsmallest_prime_factor(number)\nget_prime(n)\nget_primes_between(pNumber1, pNumber2)\n\n----\n\nis_even(number)\nis_odd(number)\nkg_v(number1, number2)  // least common multiple\nget_divisors(number)    // all divisors of 'number' inclusive 1, number\nis_perfect_number(number)\n\nNEW-FUNCTIONS\n\nsimplify_fraction(numerator, denominator)\nfactorial (n) // n!\nfib (n) // calculate the n-th fibonacci term.\n\n-----\n\ngoldbach(number)  // Goldbach's assumption\n\n\"\"\"\n\nfrom math import sqrt\n\nfrom maths.greatest_common_divisor import gcd_by_iterative\n\n\ndef is_prime(number: int) -> bool:\n    \"\"\"\n    input: positive integer 'number'\n    returns true if 'number' is prime otherwise false.\n\n    >>> is_prime(3)\n    True\n    >>> is_prime(10)\n    False\n    >>> is_prime(97)\n    True\n    >>> is_prime(9991)\n    False\n    >>> is_prime(-1)\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'number' must been an int and positive\n    >>> is_prime(\"test\")\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'number' must been an int and positive\n    \"\"\"\n\n    # precondition\n    assert isinstance(number, int) and (number >= 0), (\n        \"'number' must been an int and positive\"\n    )\n\n    status = True\n\n    # 0 and 1 are none primes.\n    if number <= 1:\n        status = False\n\n    for divisor in range(2, round(sqrt(number)) + 1):\n        # if 'number' divisible by 'divisor' then sets 'status'\n        # of false and break up the loop.\n        if number % divisor == 0:\n            status = False\n            break\n\n    # precondition\n    assert isinstance(status, bool), \"'status' must been from type bool\"\n\n    return status\n\n\n# ------------------------------------------\n\n\ndef sieve_er(n):\n    \"\"\"\n    input: positive integer 'N' > 2\n    returns a list of prime numbers from 2 up to N.\n\n    This function implements the algorithm called\n    sieve of erathostenes.\n\n    >>> sieve_er(8)\n    [2, 3, 5, 7]\n    >>> sieve_er(-1)\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'N' must been an int and > 2\n    >>> sieve_er(\"test\")\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'N' must been an int and > 2\n    \"\"\"\n\n    # precondition\n    assert isinstance(n, int) and (n > 2), \"'N' must been an int and > 2\"\n\n    # beginList: contains all natural numbers from 2 up to N\n    begin_list = list(range(2, n + 1))\n\n    ans = []  # this list will be returns.\n\n    # actual sieve of erathostenes\n    for i in range(len(begin_list)):\n        for j in range(i + 1, len(begin_list)):\n            if (begin_list[i] != 0) and (begin_list[j] % begin_list[i] == 0):\n                begin_list[j] = 0\n\n    # filters actual prime numbers.\n    ans = [x for x in begin_list if x != 0]\n\n    # precondition\n    assert isinstance(ans, list), \"'ans' must been from type list\"\n\n    return ans\n\n\n# --------------------------------\n\n\ndef get_prime_numbers(n):\n    \"\"\"\n    input: positive integer 'N' > 2\n    returns a list of prime numbers from 2 up to N (inclusive)\n    This function is more efficient as function 'sieveEr(...)'\n\n    >>> get_prime_numbers(8)\n    [2, 3, 5, 7]\n    >>> get_prime_numbers(-1)\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'N' must been an int and > 2\n    >>> get_prime_numbers(\"test\")\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'N' must been an int and > 2\n    \"\"\"\n\n    # precondition\n    assert isinstance(n, int) and (n > 2), \"'N' must been an int and > 2\"\n\n    ans = []\n\n    # iterates over all numbers between 2 up to N+1\n    # if a number is prime then appends to list 'ans'\n    for number in range(2, n + 1):\n        if is_prime(number):\n            ans.append(number)\n\n    # precondition\n    assert isinstance(ans, list), \"'ans' must been from type list\"\n\n    return ans\n\n\n# -----------------------------------------\n\n\ndef prime_factorization(number):\n    \"\"\"\n    input: positive integer 'number'\n    returns a list of the prime number factors of 'number'\n\n    >>> prime_factorization(0)\n    [0]\n    >>> prime_factorization(8)\n    [2, 2, 2]\n    >>> prime_factorization(287)\n    [7, 41]\n    >>> prime_factorization(-1)\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'number' must been an int and >= 0\n    >>> prime_factorization(\"test\")\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'number' must been an int and >= 0\n    \"\"\"\n\n    # precondition\n    assert isinstance(number, int) and number >= 0, \"'number' must been an int and >= 0\"\n\n    ans = []  # this list will be returns of the function.\n\n    # potential prime number factors.\n\n    factor = 2\n\n    quotient = number\n\n    if number in {0, 1}:\n        ans.append(number)\n\n    # if 'number' not prime then builds the prime factorization of 'number'\n    elif not is_prime(number):\n        while quotient != 1:\n            if is_prime(factor) and (quotient % factor == 0):\n                ans.append(factor)\n                quotient /= factor\n            else:\n                factor += 1\n\n    else:\n        ans.append(number)\n\n    # precondition\n    assert isinstance(ans, list), \"'ans' must been from type list\"\n\n    return ans\n\n\n# -----------------------------------------\n\n\ndef greatest_prime_factor(number):\n    \"\"\"\n    input: positive integer 'number' >= 0\n    returns the greatest prime number factor of 'number'\n\n    >>> greatest_prime_factor(0)\n    0\n    >>> greatest_prime_factor(8)\n    2\n    >>> greatest_prime_factor(287)\n    41\n    >>> greatest_prime_factor(-1)\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'number' must been an int and >= 0\n    >>> greatest_prime_factor(\"test\")\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'number' must been an int and >= 0\n    \"\"\"\n\n    # precondition\n    assert isinstance(number, int) and (number >= 0), (\n        \"'number' must been an int and >= 0\"\n    )\n\n    ans = 0\n\n    # prime factorization of 'number'\n    prime_factors = prime_factorization(number)\n\n    ans = max(prime_factors)\n\n    # precondition\n    assert isinstance(ans, int), \"'ans' must been from type int\"\n\n    return ans\n\n\n# ----------------------------------------------\n\n\ndef smallest_prime_factor(number):\n    \"\"\"\n    input: integer 'number' >= 0\n    returns the smallest prime number factor of 'number'\n\n    >>> smallest_prime_factor(0)\n    0\n    >>> smallest_prime_factor(8)\n    2\n    >>> smallest_prime_factor(287)\n    7\n    >>> smallest_prime_factor(-1)\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'number' must been an int and >= 0\n    >>> smallest_prime_factor(\"test\")\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'number' must been an int and >= 0\n    \"\"\"\n\n    # precondition\n    assert isinstance(number, int) and (number >= 0), (\n        \"'number' must been an int and >= 0\"\n    )\n\n    ans = 0\n\n    # prime factorization of 'number'\n    prime_factors = prime_factorization(number)\n\n    ans = min(prime_factors)\n\n    # precondition\n    assert isinstance(ans, int), \"'ans' must been from type int\"\n\n    return ans\n\n\n# ----------------------\n\n\ndef is_even(number):\n    \"\"\"\n    input: integer 'number'\n    returns true if 'number' is even, otherwise false.\n\n    >>> is_even(0)\n    True\n    >>> is_even(8)\n    True\n    >>> is_even(287)\n    False\n    >>> is_even(-1)\n    False\n    >>> is_even(\"test\")\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'number' must been an int\n    \"\"\"\n\n    # precondition\n    assert isinstance(number, int), \"'number' must been an int\"\n    assert isinstance(number % 2 == 0, bool), \"compare must been from type bool\"\n\n    return number % 2 == 0\n\n\n# ------------------------\n\n\ndef is_odd(number):\n    \"\"\"\n    input: integer 'number'\n    returns true if 'number' is odd, otherwise false.\n\n    >>> is_odd(0)\n    False\n    >>> is_odd(8)\n    False\n    >>> is_odd(287)\n    True\n    >>> is_odd(-1)\n    True\n    >>> is_odd(\"test\")\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'number' must been an int\n    \"\"\"\n\n    # precondition\n    assert isinstance(number, int), \"'number' must been an int\"\n    assert isinstance(number % 2 != 0, bool), \"compare must been from type bool\"\n\n    return number % 2 != 0\n\n\n# ------------------------\n\n\ndef goldbach(number):\n    \"\"\"\n    Goldbach's assumption\n    input: a even positive integer 'number' > 2\n    returns a list of two prime numbers whose sum is equal to 'number'\n\n    >>> goldbach(8)\n    [3, 5]\n    >>> goldbach(824)\n    [3, 821]\n    >>> goldbach(0)\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'number' must been an int, even and > 2\n    >>> goldbach(-1)\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'number' must been an int, even and > 2\n    >>> goldbach(\"test\")\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'number' must been an int, even and > 2\n    \"\"\"\n\n    # precondition\n    assert isinstance(number, int) and (number > 2) and is_even(number), (\n        \"'number' must been an int, even and > 2\"\n    )\n\n    ans = []  # this list will returned\n\n    # creates a list of prime numbers between 2 up to 'number'\n    prime_numbers = get_prime_numbers(number)\n    len_pn = len(prime_numbers)\n\n    # run variable for while-loops.\n    i = 0\n    j = None\n\n    # exit variable. for break up the loops\n    loop = True\n\n    while i < len_pn and loop:\n        j = i + 1\n\n        while j < len_pn and loop:\n            if prime_numbers[i] + prime_numbers[j] == number:\n                loop = False\n                ans.append(prime_numbers[i])\n                ans.append(prime_numbers[j])\n\n            j += 1\n\n        i += 1\n\n    # precondition\n    assert (\n        isinstance(ans, list)\n        and (len(ans) == 2)\n        and (ans[0] + ans[1] == number)\n        and is_prime(ans[0])\n        and is_prime(ans[1])\n    ), \"'ans' must contains two primes. And sum of elements must been eq 'number'\"\n\n    return ans\n\n\n# ----------------------------------------------\n\n\ndef kg_v(number1, number2):\n    \"\"\"\n    Least common multiple\n    input: two positive integer 'number1' and 'number2'\n    returns the least common multiple of 'number1' and 'number2'\n\n    >>> kg_v(8,10)\n    40\n    >>> kg_v(824,67)\n    55208\n    >>> kg_v(1, 10)\n    10\n    >>> kg_v(0)\n    Traceback (most recent call last):\n        ...\n    TypeError: kg_v() missing 1 required positional argument: 'number2'\n    >>> kg_v(10,-1)\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'number1' and 'number2' must been positive integer.\n    >>> kg_v(\"test\",\"test2\")\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'number1' and 'number2' must been positive integer.\n    \"\"\"\n\n    # precondition\n    assert (\n        isinstance(number1, int)\n        and isinstance(number2, int)\n        and (number1 >= 1)\n        and (number2 >= 1)\n    ), \"'number1' and 'number2' must been positive integer.\"\n\n    ans = 1  # actual answer that will be return.\n\n    # for kgV (x,1)\n    if number1 > 1 and number2 > 1:\n        # builds the prime factorization of 'number1' and 'number2'\n        prime_fac_1 = prime_factorization(number1)\n        prime_fac_2 = prime_factorization(number2)\n\n    elif number1 == 1 or number2 == 1:\n        prime_fac_1 = []\n        prime_fac_2 = []\n        ans = max(number1, number2)\n\n    count1 = 0\n    count2 = 0\n\n    done = []  # captured numbers int both 'primeFac1' and 'primeFac2'\n\n    # iterates through primeFac1\n    for n in prime_fac_1:\n        if n not in done:\n            if n in prime_fac_2:\n                count1 = prime_fac_1.count(n)\n                count2 = prime_fac_2.count(n)\n\n                for _ in range(max(count1, count2)):\n                    ans *= n\n\n            else:\n                count1 = prime_fac_1.count(n)\n\n                for _ in range(count1):\n                    ans *= n\n\n            done.append(n)\n\n    # iterates through primeFac2\n    for n in prime_fac_2:\n        if n not in done:\n            count2 = prime_fac_2.count(n)\n\n            for _ in range(count2):\n                ans *= n\n\n            done.append(n)\n\n    # precondition\n    assert isinstance(ans, int) and (ans >= 0), (\n        \"'ans' must been from type int and positive\"\n    )\n\n    return ans\n\n\n# ----------------------------------\n\n\ndef get_prime(n):\n    \"\"\"\n    Gets the n-th prime number.\n    input: positive integer 'n' >= 0\n    returns the n-th prime number, beginning at index 0\n\n    >>> get_prime(0)\n    2\n    >>> get_prime(8)\n    23\n    >>> get_prime(824)\n    6337\n    >>> get_prime(-1)\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'number' must been a positive int\n    >>> get_prime(\"test\")\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'number' must been a positive int\n    \"\"\"\n\n    # precondition\n    assert isinstance(n, int) and (n >= 0), \"'number' must been a positive int\"\n\n    index = 0\n    ans = 2  # this variable holds the answer\n\n    while index < n:\n        index += 1\n\n        ans += 1  # counts to the next number\n\n        # if ans not prime then\n        # runs to the next prime number.\n        while not is_prime(ans):\n            ans += 1\n\n    # precondition\n    assert isinstance(ans, int) and is_prime(ans), (\n        \"'ans' must been a prime number and from type int\"\n    )\n\n    return ans\n\n\n# ---------------------------------------------------\n\n\ndef get_primes_between(p_number_1, p_number_2):\n    \"\"\"\n    input: prime numbers 'pNumber1' and 'pNumber2'\n            pNumber1 < pNumber2\n    returns a list of all prime numbers between 'pNumber1' (exclusive)\n            and 'pNumber2' (exclusive)\n\n    >>> get_primes_between(3, 67)\n    [5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61]\n    >>> get_primes_between(0)\n    Traceback (most recent call last):\n        ...\n    TypeError: get_primes_between() missing 1 required positional argument: 'p_number_2'\n    >>> get_primes_between(0, 1)\n    Traceback (most recent call last):\n        ...\n    AssertionError: The arguments must been prime numbers and 'pNumber1' < 'pNumber2'\n    >>> get_primes_between(-1, 3)\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'number' must been an int and positive\n    >>> get_primes_between(\"test\",\"test\")\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'number' must been an int and positive\n    \"\"\"\n\n    # precondition\n    assert (\n        is_prime(p_number_1) and is_prime(p_number_2) and (p_number_1 < p_number_2)\n    ), \"The arguments must been prime numbers and 'pNumber1' < 'pNumber2'\"\n\n    number = p_number_1 + 1  # jump to the next number\n\n    ans = []  # this list will be returns.\n\n    # if number is not prime then\n    # fetch the next prime number.\n    while not is_prime(number):\n        number += 1\n\n    while number < p_number_2:\n        ans.append(number)\n\n        number += 1\n\n        # fetch the next prime number.\n        while not is_prime(number):\n            number += 1\n\n    # precondition\n    assert (\n        isinstance(ans, list)\n        and ans[0] != p_number_1\n        and ans[len(ans) - 1] != p_number_2\n    ), \"'ans' must been a list without the arguments\"\n\n    # 'ans' contains not 'pNumber1' and 'pNumber2' !\n    return ans\n\n\n# ----------------------------------------------------\n\n\ndef get_divisors(n):\n    \"\"\"\n    input: positive integer 'n' >= 1\n    returns all divisors of n (inclusive 1 and 'n')\n\n    >>> get_divisors(8)\n    [1, 2, 4, 8]\n    >>> get_divisors(824)\n    [1, 2, 4, 8, 103, 206, 412, 824]\n    >>> get_divisors(-1)\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'n' must been int and >= 1\n    >>> get_divisors(\"test\")\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'n' must been int and >= 1\n    \"\"\"\n\n    # precondition\n    assert isinstance(n, int) and (n >= 1), \"'n' must been int and >= 1\"\n\n    ans = []  # will be returned.\n\n    for divisor in range(1, n + 1):\n        if n % divisor == 0:\n            ans.append(divisor)\n\n    # precondition\n    assert ans[0] == 1 and ans[len(ans) - 1] == n, \"Error in function getDivisiors(...)\"\n\n    return ans\n\n\n# ----------------------------------------------------\n\n\ndef is_perfect_number(number):\n    \"\"\"\n    input: positive integer 'number' > 1\n    returns true if 'number' is a perfect number otherwise false.\n\n    >>> is_perfect_number(28)\n    True\n    >>> is_perfect_number(824)\n    False\n    >>> is_perfect_number(-1)\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'number' must been an int and >= 1\n    >>> is_perfect_number(\"test\")\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'number' must been an int and >= 1\n    \"\"\"\n\n    # precondition\n    assert isinstance(number, int) and (number > 1), (\n        \"'number' must been an int and >= 1\"\n    )\n\n    divisors = get_divisors(number)\n\n    # precondition\n    assert (\n        isinstance(divisors, list)\n        and (divisors[0] == 1)\n        and (divisors[len(divisors) - 1] == number)\n    ), \"Error in help-function getDivisiors(...)\"\n\n    # summed all divisors up to 'number' (exclusive), hence [:-1]\n    return sum(divisors[:-1]) == number\n\n\n# ------------------------------------------------------------\n\n\ndef simplify_fraction(numerator, denominator):\n    \"\"\"\n    input: two integer 'numerator' and 'denominator'\n    assumes: 'denominator' != 0\n    returns: a tuple with simplify numerator and denominator.\n\n    >>> simplify_fraction(10, 20)\n    (1, 2)\n    >>> simplify_fraction(10, -1)\n    (10, -1)\n    >>> simplify_fraction(\"test\",\"test\")\n    Traceback (most recent call last):\n        ...\n    AssertionError: The arguments must been from type int and 'denominator' != 0\n    \"\"\"\n\n    # precondition\n    assert (\n        isinstance(numerator, int)\n        and isinstance(denominator, int)\n        and (denominator != 0)\n    ), \"The arguments must been from type int and 'denominator' != 0\"\n\n    # build the greatest common divisor of numerator and denominator.\n    gcd_of_fraction = gcd_by_iterative(abs(numerator), abs(denominator))\n\n    # precondition\n    assert (\n        isinstance(gcd_of_fraction, int)\n        and (numerator % gcd_of_fraction == 0)\n        and (denominator % gcd_of_fraction == 0)\n    ), \"Error in function gcd_by_iterative(...,...)\"\n\n    return (numerator // gcd_of_fraction, denominator // gcd_of_fraction)\n\n\n# -----------------------------------------------------------------\n\n\ndef factorial(n):\n    \"\"\"\n    input: positive integer 'n'\n    returns the factorial of 'n' (n!)\n\n    >>> factorial(0)\n    1\n    >>> factorial(20)\n    2432902008176640000\n    >>> factorial(-1)\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'n' must been a int and >= 0\n    >>> factorial(\"test\")\n    Traceback (most recent call last):\n        ...\n    AssertionError: 'n' must been a int and >= 0\n    \"\"\"\n\n    # precondition\n    assert isinstance(n, int) and (n >= 0), \"'n' must been a int and >= 0\"\n\n    ans = 1  # this will be return.\n\n    for factor in range(1, n + 1):\n        ans *= factor\n\n    return ans\n\n\n# -------------------------------------------------------------------\n\n\ndef fib(n: int) -> int:\n    \"\"\"\n    input: positive integer 'n'\n    returns the n-th fibonacci term , indexing by 0\n\n    >>> fib(0)\n    1\n    >>> fib(5)\n    8\n    >>> fib(20)\n    10946\n    >>> fib(99)\n    354224848179261915075\n    >>> fib(-1)\n    Traceback (most recent call last):\n    ...\n    AssertionError: 'n' must been an int and >= 0\n    >>> fib(\"test\")\n    Traceback (most recent call last):\n    ...\n    AssertionError: 'n' must been an int and >= 0\n    \"\"\"\n\n    # precondition\n    assert isinstance(n, int) and (n >= 0), \"'n' must been an int and >= 0\"\n\n    tmp = 0\n    fib1 = 1\n    ans = 1  # this will be return\n\n    for _ in range(n - 1):\n        tmp = ans\n        ans += fib1\n        fib1 = tmp\n\n    return ans\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/print_multiplication_table.py",
    "content": "def multiplication_table(number: int, number_of_terms: int) -> str:\n    \"\"\"\n    Prints the multiplication table of a given number till the given number of terms\n\n    >>> print(multiplication_table(3, 5))\n    3 * 1 = 3\n    3 * 2 = 6\n    3 * 3 = 9\n    3 * 4 = 12\n    3 * 5 = 15\n\n    >>> print(multiplication_table(-4, 6))\n    -4 * 1 = -4\n    -4 * 2 = -8\n    -4 * 3 = -12\n    -4 * 4 = -16\n    -4 * 5 = -20\n    -4 * 6 = -24\n    \"\"\"\n    return \"\\n\".join(\n        f\"{number} * {i} = {number * i}\" for i in range(1, number_of_terms + 1)\n    )\n\n\nif __name__ == \"__main__\":\n    print(multiplication_table(number=5, number_of_terms=10))\n"
  },
  {
    "path": "maths/pythagoras.py",
    "content": "\"\"\"Uses Pythagoras theorem to calculate the distance between two points in space.\"\"\"\n\nimport math\n\n\nclass Point:\n    def __init__(self, x, y, z):\n        self.x = x\n        self.y = y\n        self.z = z\n\n    def __repr__(self) -> str:\n        return f\"Point({self.x}, {self.y}, {self.z})\"\n\n\ndef distance(a: Point, b: Point) -> float:\n    \"\"\"\n    >>> point1 = Point(2, -1, 7)\n    >>> point2 = Point(1, -3, 5)\n    >>> print(f\"Distance from {point1} to {point2} is {distance(point1, point2)}\")\n    Distance from Point(2, -1, 7) to Point(1, -3, 5) is 3.0\n    \"\"\"\n    return math.sqrt(abs((b.x - a.x) ** 2 + (b.y - a.y) ** 2 + (b.z - a.z) ** 2))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/qr_decomposition.py",
    "content": "import numpy as np\n\n\ndef qr_householder(a: np.ndarray):\n    \"\"\"Return a QR-decomposition of the matrix A using Householder reflection.\n\n    The QR-decomposition decomposes the matrix A of shape (m, n) into an\n    orthogonal matrix Q of shape (m, m) and an upper triangular matrix R of\n    shape (m, n).  Note that the matrix A does not have to be square.  This\n    method of decomposing A uses the Householder reflection, which is\n    numerically stable and of complexity O(n^3).\n\n    https://en.wikipedia.org/wiki/QR_decomposition#Using_Householder_reflections\n\n    Arguments:\n    A -- a numpy.ndarray of shape (m, n)\n\n    Note: several optimizations can be made for numeric efficiency, but this is\n    intended to demonstrate how it would be represented in a mathematics\n    textbook.  In cases where efficiency is particularly important, an optimized\n    version from BLAS should be used.\n\n    >>> A = np.array([[12, -51, 4], [6, 167, -68], [-4, 24, -41]], dtype=float)\n    >>> Q, R = qr_householder(A)\n\n    >>> # check that the decomposition is correct\n    >>> np.allclose(Q@R, A)\n    True\n\n    >>> # check that Q is orthogonal\n    >>> np.allclose(Q@Q.T, np.eye(A.shape[0]))\n    True\n    >>> np.allclose(Q.T@Q, np.eye(A.shape[0]))\n    True\n\n    >>> # check that R is upper triangular\n    >>> np.allclose(np.triu(R), R)\n    True\n    \"\"\"\n    m, n = a.shape\n    t = min(m, n)\n    q = np.eye(m)\n    r = a.copy()\n\n    for k in range(t - 1):\n        # select a column of modified matrix A':\n        x = r[k:, [k]]\n        # construct first basis vector\n        e1 = np.zeros_like(x)\n        e1[0] = 1.0\n        # determine scaling factor\n        alpha = np.linalg.norm(x)\n        # construct vector v for Householder reflection\n        v = x + np.sign(x[0]) * alpha * e1\n        v /= np.linalg.norm(v)\n\n        # construct the Householder matrix\n        q_k = np.eye(m - k) - 2.0 * v @ v.T\n        # pad with ones and zeros as necessary\n        q_k = np.block([[np.eye(k), np.zeros((k, m - k))], [np.zeros((m - k, k)), q_k]])\n\n        q = q @ q_k.T\n        r = q_k @ r\n\n    return q, r\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/quadratic_equations_complex_numbers.py",
    "content": "from __future__ import annotations\n\nfrom cmath import sqrt\n\n\ndef quadratic_roots(a: int, b: int, c: int) -> tuple[complex, complex]:\n    \"\"\"\n    Given the numerical coefficients a, b and c,\n    calculates the roots for any quadratic equation of the form ax^2 + bx + c\n\n    >>> quadratic_roots(a=1, b=3, c=-4)\n    (1.0, -4.0)\n    >>> quadratic_roots(5, 6, 1)\n    (-0.2, -1.0)\n    >>> quadratic_roots(1, -6, 25)\n    ((3+4j), (3-4j))\n    \"\"\"\n\n    if a == 0:\n        raise ValueError(\"Coefficient 'a' must not be zero.\")\n    delta = b * b - 4 * a * c\n\n    root_1 = (-b + sqrt(delta)) / (2 * a)\n    root_2 = (-b - sqrt(delta)) / (2 * a)\n\n    return (\n        root_1.real if not root_1.imag else root_1,\n        root_2.real if not root_2.imag else root_2,\n    )\n\n\ndef main():\n    solution1, solution2 = quadratic_roots(a=5, b=6, c=1)\n    print(f\"The solutions are: {solution1} and {solution2}\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "maths/radians.py",
    "content": "from math import pi\n\n\ndef radians(degree: float) -> float:\n    \"\"\"\n    Converts the given angle from degrees to radians\n    https://en.wikipedia.org/wiki/Radian\n\n    >>> radians(180)\n    3.141592653589793\n    >>> radians(92)\n    1.6057029118347832\n    >>> radians(274)\n    4.782202150464463\n    >>> radians(109.82)\n    1.9167205845401725\n\n    >>> from math import radians as math_radians\n    >>> all(abs(radians(i) - math_radians(i)) <= 1e-8 for i in range(-2, 361))\n    True\n    \"\"\"\n\n    return degree / (180 / pi)\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "maths/radix2_fft.py",
    "content": "\"\"\"\r\nFast Polynomial Multiplication using radix-2 fast Fourier Transform.\r\n\"\"\"\r\n\r\nimport mpmath  # for roots of unity\r\nimport numpy as np\r\n\r\n\r\nclass FFT:\r\n    \"\"\"\r\n    Fast Polynomial Multiplication using radix-2 fast Fourier Transform.\r\n\r\n    Reference:\r\n    https://en.wikipedia.org/wiki/Cooley%E2%80%93Tukey_FFT_algorithm#The_radix-2_DIT_case\r\n\r\n    For polynomials of degree m and n the algorithms has complexity\r\n    O(n*logn + m*logm)\r\n\r\n    The main part of the algorithm is split in two parts:\r\n        1) __DFT: We compute the discrete fourier transform (DFT) of A and B using a\r\n        bottom-up dynamic approach -\r\n        2) __multiply: Once we obtain the DFT of A*B, we can similarly\r\n        invert it to obtain A*B\r\n\r\n    The class FFT takes two polynomials A and B with complex coefficients as arguments;\r\n    The two polynomials should be represented as a sequence of coefficients starting\r\n    from the free term. Thus, for instance x + 2*x^3 could be represented as\r\n    [0,1,0,2] or (0,1,0,2). The constructor adds some zeros at the end so that the\r\n    polynomials have the same length which is a power of 2 at least the length of\r\n    their product.\r\n\r\n    Example:\r\n\r\n    Create two polynomials as sequences\r\n    >>> A = [0, 1, 0, 2]  # x+2x^3\r\n    >>> B = (2, 3, 4, 0)  # 2+3x+4x^2\r\n\r\n    Create an FFT object with them\r\n    >>> x = FFT(A, B)\r\n\r\n    Print product\r\n    >>> x.product  # 2x + 3x^2 + 8x^3 + 6x^4 + 8x^5\r\n    [(-0-0j), (2+0j), (3-0j), (8-0j), (6+0j), (8+0j)]\r\n\r\n    __str__ test\r\n    >>> print(x)\r\n    A = 0*x^0 + 1*x^1 + 0*x^2 + 2*x^3\r\n    B = 2*x^0 + 3*x^1 + 4*x^2\r\n    A*B = (-0-0j)*x^0 + (2+0j)*x^1 + (3-0j)*x^2 + (8-0j)*x^3 + (6+0j)*x^4 + (8+0j)*x^5\r\n    \"\"\"\r\n\r\n    def __init__(self, poly_a=None, poly_b=None):\r\n        # Input as list\r\n        self.polyA = list(poly_a or [0])[:]\r\n        self.polyB = list(poly_b or [0])[:]\r\n\r\n        # Remove leading zero coefficients\r\n        while self.polyA[-1] == 0:\r\n            self.polyA.pop()\r\n        self.len_A = len(self.polyA)\r\n\r\n        while self.polyB[-1] == 0:\r\n            self.polyB.pop()\r\n        self.len_B = len(self.polyB)\r\n\r\n        # Add 0 to make lengths equal a power of 2\r\n        self.c_max_length = int(\r\n            2 ** np.ceil(np.log2(len(self.polyA) + len(self.polyB) - 1))\r\n        )\r\n\r\n        while len(self.polyA) < self.c_max_length:\r\n            self.polyA.append(0)\r\n        while len(self.polyB) < self.c_max_length:\r\n            self.polyB.append(0)\r\n        # A complex root used for the fourier transform\r\n        self.root = complex(mpmath.root(x=1, n=self.c_max_length, k=1))\r\n\r\n        # The product\r\n        self.product = self.__multiply()\r\n\r\n    # Discrete fourier transform of A and B\r\n    def __dft(self, which):\r\n        dft = [[x] for x in self.polyA] if which == \"A\" else [[x] for x in self.polyB]\r\n        # Corner case\r\n        if len(dft) <= 1:\r\n            return dft[0]\r\n        next_ncol = self.c_max_length // 2\r\n        while next_ncol > 0:\r\n            new_dft = [[] for i in range(next_ncol)]\r\n            root = self.root**next_ncol\r\n\r\n            # First half of next step\r\n            current_root = 1\r\n            for j in range(self.c_max_length // (next_ncol * 2)):\r\n                for i in range(next_ncol):\r\n                    new_dft[i].append(dft[i][j] + current_root * dft[i + next_ncol][j])\r\n                current_root *= root\r\n            # Second half of next step\r\n            current_root = 1\r\n            for j in range(self.c_max_length // (next_ncol * 2)):\r\n                for i in range(next_ncol):\r\n                    new_dft[i].append(dft[i][j] - current_root * dft[i + next_ncol][j])\r\n                current_root *= root\r\n            # Update\r\n            dft = new_dft\r\n            next_ncol = next_ncol // 2\r\n        return dft[0]\r\n\r\n    # multiply the DFTs of  A and B and find A*B\r\n    def __multiply(self):\r\n        dft_a = self.__dft(\"A\")\r\n        dft_b = self.__dft(\"B\")\r\n        inverce_c = [[dft_a[i] * dft_b[i] for i in range(self.c_max_length)]]\r\n        del dft_a\r\n        del dft_b\r\n\r\n        # Corner Case\r\n        if len(inverce_c[0]) <= 1:\r\n            return inverce_c[0]\r\n        # Inverse DFT\r\n        next_ncol = 2\r\n        while next_ncol <= self.c_max_length:\r\n            new_inverse_c = [[] for i in range(next_ncol)]\r\n            root = self.root ** (next_ncol // 2)\r\n            current_root = 1\r\n            # First half of next step\r\n            for j in range(self.c_max_length // next_ncol):\r\n                for i in range(next_ncol // 2):\r\n                    # Even positions\r\n                    new_inverse_c[i].append(\r\n                        (\r\n                            inverce_c[i][j]\r\n                            + inverce_c[i][j + self.c_max_length // next_ncol]\r\n                        )\r\n                        / 2\r\n                    )\r\n                    # Odd positions\r\n                    new_inverse_c[i + next_ncol // 2].append(\r\n                        (\r\n                            inverce_c[i][j]\r\n                            - inverce_c[i][j + self.c_max_length // next_ncol]\r\n                        )\r\n                        / (2 * current_root)\r\n                    )\r\n                current_root *= root\r\n            # Update\r\n            inverce_c = new_inverse_c\r\n            next_ncol *= 2\r\n        # Unpack\r\n        inverce_c = [\r\n            complex(round(x[0].real, 8), round(x[0].imag, 8)) for x in inverce_c\r\n        ]\r\n\r\n        # Remove leading 0's\r\n        while inverce_c[-1] == 0:\r\n            inverce_c.pop()\r\n        return inverce_c\r\n\r\n    # Overwrite __str__ for print(); Shows A, B and A*B\r\n    def __str__(self):\r\n        a = \"A = \" + \" + \".join(\r\n            f\"{coef}*x^{i}\" for i, coef in enumerate(self.polyA[: self.len_A])\r\n        )\r\n        b = \"B = \" + \" + \".join(\r\n            f\"{coef}*x^{i}\" for i, coef in enumerate(self.polyB[: self.len_B])\r\n        )\r\n        c = \"A*B = \" + \" + \".join(\r\n            f\"{coef}*x^{i}\" for i, coef in enumerate(self.product)\r\n        )\r\n\r\n        return f\"{a}\\n{b}\\n{c}\"\r\n\r\n\r\n# Unit tests\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n"
  },
  {
    "path": "maths/remove_digit.py",
    "content": "def remove_digit(num: int) -> int:\n    \"\"\"\n\n    returns the biggest possible result\n    that can be achieved by removing\n    one digit from the given number\n\n    >>> remove_digit(152)\n    52\n    >>> remove_digit(6385)\n    685\n    >>> remove_digit(-11)\n    1\n    >>> remove_digit(2222222)\n    222222\n    >>> remove_digit(\"2222222\")\n    Traceback (most recent call last):\n    TypeError: only integers accepted as input\n    >>> remove_digit(\"string input\")\n    Traceback (most recent call last):\n    TypeError: only integers accepted as input\n    \"\"\"\n\n    if not isinstance(num, int):\n        raise TypeError(\"only integers accepted as input\")\n    else:\n        num_str = str(abs(num))\n        num_transpositions = [list(num_str) for char in range(len(num_str))]\n        for index in range(len(num_str)):\n            num_transpositions[index].pop(index)\n        return max(\n            int(\"\".join(list(transposition))) for transposition in num_transpositions\n        )\n\n\nif __name__ == \"__main__\":\n    __import__(\"doctest\").testmod()\n"
  },
  {
    "path": "maths/segmented_sieve.py",
    "content": "\"\"\"Segmented Sieve.\"\"\"\r\n\r\nimport math\r\n\r\n\r\ndef sieve(n: int) -> list[int]:\r\n    \"\"\"\r\n    Segmented Sieve.\r\n\r\n    Examples:\r\n    >>> sieve(8)\r\n    [2, 3, 5, 7]\r\n\r\n    >>> sieve(27)\r\n    [2, 3, 5, 7, 11, 13, 17, 19, 23]\r\n\r\n    >>> sieve(0)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Number 0 must instead be a positive integer\r\n\r\n    >>> sieve(-1)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Number -1 must instead be a positive integer\r\n\r\n    >>> sieve(22.2)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Number 22.2 must instead be a positive integer\r\n    \"\"\"\r\n\r\n    if n <= 0 or isinstance(n, float):\r\n        msg = f\"Number {n} must instead be a positive integer\"\r\n        raise ValueError(msg)\r\n\r\n    in_prime = []\r\n    start = 2\r\n    end = int(math.sqrt(n))  # Size of every segment\r\n    temp = [True] * (end + 1)\r\n    prime = []\r\n\r\n    while start <= end:\r\n        if temp[start] is True:\r\n            in_prime.append(start)\r\n            for i in range(start * start, end + 1, start):\r\n                temp[i] = False\r\n        start += 1\r\n    prime += in_prime\r\n\r\n    low = end + 1\r\n    high = min(2 * end, n)\r\n\r\n    while low <= n:\r\n        temp = [True] * (high - low + 1)\r\n        for each in in_prime:\r\n            t = math.floor(low / each) * each\r\n            if t < low:\r\n                t += each\r\n\r\n            for j in range(t, high + 1, each):\r\n                temp[j - low] = False\r\n\r\n        for j in range(len(temp)):\r\n            if temp[j] is True:\r\n                prime.append(j + low)\r\n\r\n        low = high + 1\r\n        high = min(high + end, n)\r\n\r\n    return prime\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n\r\n    print(f\"{sieve(10**6) = }\")\r\n"
  },
  {
    "path": "maths/series/__init__.py",
    "content": ""
  },
  {
    "path": "maths/series/arithmetic.py",
    "content": "\"\"\"\nArithmetic mean\nReference: https://en.wikipedia.org/wiki/Arithmetic_mean\n\nArithmetic series\nReference: https://en.wikipedia.org/wiki/Arithmetic_series\n(The URL above will redirect you to arithmetic progression)\n\"\"\"\n\n\ndef is_arithmetic_series(series: list) -> bool:\n    \"\"\"\n    checking whether the input series is arithmetic series or not\n    >>> is_arithmetic_series([2, 4, 6])\n    True\n    >>> is_arithmetic_series([3, 6, 12, 24])\n    False\n    >>> is_arithmetic_series([1, 2, 3])\n    True\n    >>> is_arithmetic_series(4)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input series is not valid, valid series - [2, 4, 6]\n    >>> is_arithmetic_series([])\n    Traceback (most recent call last):\n        ...\n    ValueError: Input list must be a non empty list\n    \"\"\"\n    if not isinstance(series, list):\n        raise ValueError(\"Input series is not valid, valid series - [2, 4, 6]\")\n    if len(series) == 0:\n        raise ValueError(\"Input list must be a non empty list\")\n    if len(series) == 1:\n        return True\n    common_diff = series[1] - series[0]\n    for index in range(len(series) - 1):\n        if series[index + 1] - series[index] != common_diff:\n            return False\n    return True\n\n\ndef arithmetic_mean(series: list) -> float:\n    \"\"\"\n    return the arithmetic mean of series\n\n    >>> arithmetic_mean([2, 4, 6])\n    4.0\n    >>> arithmetic_mean([3, 6, 9, 12])\n    7.5\n    >>> arithmetic_mean(4)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input series is not valid, valid series - [2, 4, 6]\n    >>> arithmetic_mean([4, 8, 1])\n    4.333333333333333\n    >>> arithmetic_mean([1, 2, 3])\n    2.0\n    >>> arithmetic_mean([])\n    Traceback (most recent call last):\n        ...\n    ValueError: Input list must be a non empty list\n\n    \"\"\"\n    if not isinstance(series, list):\n        raise ValueError(\"Input series is not valid, valid series - [2, 4, 6]\")\n    if len(series) == 0:\n        raise ValueError(\"Input list must be a non empty list\")\n    answer = 0\n    for val in series:\n        answer += val\n    return answer / len(series)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/series/geometric.py",
    "content": "\"\"\"\nGeometric Mean\nReference :  https://en.wikipedia.org/wiki/Geometric_mean\n\nGeometric series\nReference: https://en.wikipedia.org/wiki/Geometric_series\n\"\"\"\n\n\ndef is_geometric_series(series: list) -> bool:\n    \"\"\"\n    checking whether the input series is geometric series or not\n    >>> is_geometric_series([2, 4, 8])\n    True\n    >>> is_geometric_series([3, 6, 12, 24])\n    True\n    >>> is_geometric_series([1, 2, 3])\n    False\n    >>> is_geometric_series([0, 0, 3])\n    False\n    >>> is_geometric_series([])\n    Traceback (most recent call last):\n        ...\n    ValueError: Input list must be a non empty list\n    >>> is_geometric_series(4)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input series is not valid, valid series - [2, 4, 8]\n    \"\"\"\n    if not isinstance(series, list):\n        raise ValueError(\"Input series is not valid, valid series - [2, 4, 8]\")\n    if len(series) == 0:\n        raise ValueError(\"Input list must be a non empty list\")\n    if len(series) == 1:\n        return True\n    try:\n        common_ratio = series[1] / series[0]\n        for index in range(len(series) - 1):\n            if series[index + 1] / series[index] != common_ratio:\n                return False\n    except ZeroDivisionError:\n        return False\n    return True\n\n\ndef geometric_mean(series: list) -> float:\n    \"\"\"\n    return the geometric mean of series\n\n    >>> geometric_mean([2, 4, 8])\n    3.9999999999999996\n    >>> geometric_mean([3, 6, 12, 24])\n    8.48528137423857\n    >>> geometric_mean([4, 8, 16])\n    7.999999999999999\n    >>> geometric_mean(4)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input series is not valid, valid series - [2, 4, 8]\n    >>> geometric_mean([1, 2, 3])\n    1.8171205928321397\n    >>> geometric_mean([0, 2, 3])\n    0.0\n    >>> geometric_mean([])\n    Traceback (most recent call last):\n        ...\n    ValueError: Input list must be a non empty list\n\n    \"\"\"\n    if not isinstance(series, list):\n        raise ValueError(\"Input series is not valid, valid series - [2, 4, 8]\")\n    if len(series) == 0:\n        raise ValueError(\"Input list must be a non empty list\")\n    answer = 1\n    for value in series:\n        answer *= value\n    return pow(answer, 1 / len(series))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/series/geometric_series.py",
    "content": "\"\"\"\nThis is a pure Python implementation of the Geometric Series algorithm\nhttps://en.wikipedia.org/wiki/Geometric_series\nRun the doctests with the following command:\npython3 -m doctest -v geometric_series.py\nor\npython -m doctest -v geometric_series.py\nFor manual testing run:\npython3 geometric_series.py\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef geometric_series(\n    nth_term: float,\n    start_term_a: float,\n    common_ratio_r: float,\n) -> list[float]:\n    \"\"\"\n    Pure Python implementation of Geometric Series algorithm\n\n    :param nth_term: The last term (nth term of Geometric Series)\n    :param start_term_a : The first term of Geometric Series\n    :param common_ratio_r : The common ratio between all the terms\n    :return: The Geometric Series starting from first term a and multiple of common\n        ration with first term with increase in power till last term (nth term)\n    Examples:\n    >>> geometric_series(4, 2, 2)\n    [2, 4.0, 8.0, 16.0]\n    >>> geometric_series(4.0, 2.0, 2.0)\n    [2.0, 4.0, 8.0, 16.0]\n    >>> geometric_series(4.1, 2.1, 2.1)\n    [2.1, 4.41, 9.261000000000001, 19.448100000000004]\n    >>> geometric_series(4, 2, -2)\n    [2, -4.0, 8.0, -16.0]\n    >>> geometric_series(4, -2, 2)\n    [-2, -4.0, -8.0, -16.0]\n    >>> geometric_series(-4, 2, 2)\n    []\n    >>> geometric_series(0, 100, 500)\n    []\n    >>> geometric_series(1, 1, 1)\n    [1]\n    >>> geometric_series(0, 0, 0)\n    []\n    \"\"\"\n    if not all((nth_term, start_term_a, common_ratio_r)):\n        return []\n    series: list[float] = []\n    power = 1\n    multiple = common_ratio_r\n    for _ in range(int(nth_term)):\n        if not series:\n            series.append(start_term_a)\n        else:\n            power += 1\n            series.append(float(start_term_a * multiple))\n            multiple = pow(float(common_ratio_r), power)\n    return series\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    nth_term = float(input(\"Enter the last number (n term) of the Geometric Series\"))\n    start_term_a = float(input(\"Enter the starting term (a) of the Geometric Series\"))\n    common_ratio_r = float(\n        input(\"Enter the common ratio between two terms (r) of the Geometric Series\")\n    )\n    print(\"Formula of Geometric Series => a + ar + ar^2 ... +ar^n\")\n    print(geometric_series(nth_term, start_term_a, common_ratio_r))\n"
  },
  {
    "path": "maths/series/harmonic.py",
    "content": "\"\"\"\nHarmonic mean\nReference: https://en.wikipedia.org/wiki/Harmonic_mean\n\nHarmonic series\nReference: https://en.wikipedia.org/wiki/Harmonic_series(mathematics)\n\"\"\"\n\n\ndef is_harmonic_series(series: list) -> bool:\n    \"\"\"\n    checking whether the input series is arithmetic series or not\n    >>> is_harmonic_series([ 1, 2/3, 1/2, 2/5, 1/3])\n    True\n    >>> is_harmonic_series([ 1, 2/3, 2/5, 1/3])\n    False\n    >>> is_harmonic_series([1, 2, 3])\n    False\n    >>> is_harmonic_series([1/2, 1/3, 1/4])\n    True\n    >>> is_harmonic_series([2/5, 2/10, 2/15, 2/20, 2/25])\n    True\n    >>> is_harmonic_series(4)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input series is not valid, valid series - [1, 2/3, 2]\n    >>> is_harmonic_series([])\n    Traceback (most recent call last):\n        ...\n    ValueError: Input list must be a non empty list\n    >>> is_harmonic_series([0])\n    Traceback (most recent call last):\n        ...\n    ValueError: Input series cannot have 0 as an element\n    >>> is_harmonic_series([1,2,0,6])\n    Traceback (most recent call last):\n        ...\n    ValueError: Input series cannot have 0 as an element\n    \"\"\"\n    if not isinstance(series, list):\n        raise ValueError(\"Input series is not valid, valid series - [1, 2/3, 2]\")\n    if len(series) == 0:\n        raise ValueError(\"Input list must be a non empty list\")\n    if len(series) == 1 and series[0] != 0:\n        return True\n    rec_series = []\n    series_len = len(series)\n    for i in range(series_len):\n        if series[i] == 0:\n            raise ValueError(\"Input series cannot have 0 as an element\")\n        rec_series.append(1 / series[i])\n    common_diff = rec_series[1] - rec_series[0]\n    for index in range(2, series_len):\n        if rec_series[index] - rec_series[index - 1] != common_diff:\n            return False\n    return True\n\n\ndef harmonic_mean(series: list) -> float:\n    \"\"\"\n    return the harmonic mean of series\n\n    >>> harmonic_mean([1, 4, 4])\n    2.0\n    >>> harmonic_mean([3, 6, 9, 12])\n    5.759999999999999\n    >>> harmonic_mean(4)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input series is not valid, valid series - [2, 4, 6]\n    >>> harmonic_mean([1, 2, 3])\n    1.6363636363636365\n    >>> harmonic_mean([])\n    Traceback (most recent call last):\n        ...\n    ValueError: Input list must be a non empty list\n\n    \"\"\"\n    if not isinstance(series, list):\n        raise ValueError(\"Input series is not valid, valid series - [2, 4, 6]\")\n    if len(series) == 0:\n        raise ValueError(\"Input list must be a non empty list\")\n    answer = 0\n    for val in series:\n        answer += 1 / val\n    return len(series) / answer\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/series/harmonic_series.py",
    "content": "\"\"\"\nThis is a pure Python implementation of the Harmonic Series algorithm\nhttps://en.wikipedia.org/wiki/Harmonic_series_(mathematics)\n\nFor doctests run following command:\npython -m doctest -v harmonic_series.py\nor\npython3 -m doctest -v harmonic_series.py\n\nFor manual testing run:\npython3 harmonic_series.py\n\"\"\"\n\n\ndef harmonic_series(n_term: str) -> list:\n    \"\"\"Pure Python implementation of Harmonic Series algorithm\n\n    :param n_term: The last (nth) term of Harmonic Series\n    :return: The Harmonic Series starting from 1 to last (nth) term\n\n    Examples:\n    >>> harmonic_series(5)\n    ['1', '1/2', '1/3', '1/4', '1/5']\n    >>> harmonic_series(5.0)\n    ['1', '1/2', '1/3', '1/4', '1/5']\n    >>> harmonic_series(5.1)\n    ['1', '1/2', '1/3', '1/4', '1/5']\n    >>> harmonic_series(-5)\n    []\n    >>> harmonic_series(0)\n    []\n    >>> harmonic_series(1)\n    ['1']\n    \"\"\"\n    if n_term == \"\":\n        return []\n    series: list = []\n    for temp in range(int(n_term)):\n        series.append(f\"1/{temp + 1}\" if series else \"1\")\n    return series\n\n\nif __name__ == \"__main__\":\n    nth_term = input(\"Enter the last number (nth term) of the Harmonic Series\")\n    print(\"Formula of Harmonic Series => 1+1/2+1/3 ..... 1/n\")\n    print(harmonic_series(nth_term))\n"
  },
  {
    "path": "maths/series/hexagonal_numbers.py",
    "content": "\"\"\"\r\nA hexagonal number sequence is a sequence of figurate numbers\r\nwhere the nth hexagonal number hₙ is the number of distinct dots\r\nin a pattern of dots consisting of the outlines of regular\r\nhexagons with sides up to n dots, when the hexagons are overlaid\r\nso that they share one vertex.\r\n\r\n    Calculates the hexagonal numbers sequence with a formula\r\n        hₙ = n(2n-1)\r\n        where:\r\n        hₙ --> is nth element of the sequence\r\n        n --> is the number of element in the sequence\r\n        reference-->\"Hexagonal number\" Wikipedia\r\n        <https://en.wikipedia.org/wiki/Hexagonal_number>\r\n\"\"\"\r\n\r\n\r\ndef hexagonal_numbers(length: int) -> list[int]:\r\n    \"\"\"\r\n    :param len: max number of elements\r\n    :type len: int\r\n    :return: Hexagonal numbers as a list\r\n\r\n    Tests:\r\n    >>> hexagonal_numbers(10)\r\n    [0, 1, 6, 15, 28, 45, 66, 91, 120, 153]\r\n    >>> hexagonal_numbers(5)\r\n    [0, 1, 6, 15, 28]\r\n    >>> hexagonal_numbers(0)\r\n    Traceback (most recent call last):\r\n      ...\r\n    ValueError: Length must be a positive integer.\r\n    \"\"\"\r\n\r\n    if length <= 0 or not isinstance(length, int):\r\n        raise ValueError(\"Length must be a positive integer.\")\r\n    return [n * (2 * n - 1) for n in range(length)]\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    print(hexagonal_numbers(length=5))\r\n    print(hexagonal_numbers(length=10))\r\n"
  },
  {
    "path": "maths/series/p_series.py",
    "content": "\"\"\"\nThis is a pure Python implementation of the P-Series algorithm\nhttps://en.wikipedia.org/wiki/Harmonic_series_(mathematics)#P-series\nFor doctests run following command:\npython -m doctest -v p_series.py\nor\npython3 -m doctest -v p_series.py\nFor manual testing run:\npython3 p_series.py\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef p_series(nth_term: float | str, power: float | str) -> list[str]:\n    \"\"\"\n    Pure Python implementation of P-Series algorithm\n    :return: The P-Series starting from 1 to last (nth) term\n    Examples:\n    >>> p_series(5, 2)\n    ['1', '1 / 4', '1 / 9', '1 / 16', '1 / 25']\n    >>> p_series(-5, 2)\n    []\n    >>> p_series(5, -2)\n    ['1', '1 / 0.25', '1 / 0.1111111111111111', '1 / 0.0625', '1 / 0.04']\n    >>> p_series(\"\", 1000)\n    ['']\n    >>> p_series(0, 0)\n    []\n    >>> p_series(1, 1)\n    ['1']\n    \"\"\"\n    if nth_term == \"\":\n        return [\"\"]\n    nth_term = int(nth_term)\n    power = int(power)\n    series: list[str] = []\n    for temp in range(int(nth_term)):\n        series.append(f\"1 / {pow(temp + 1, int(power))}\" if series else \"1\")\n    return series\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    nth_term = int(input(\"Enter the last number (nth term) of the P-Series\"))\n    power = int(input(\"Enter the power for  P-Series\"))\n    print(\"Formula of P-Series => 1+1/2^p+1/3^p ..... 1/n^p\")\n    print(p_series(nth_term, power))\n"
  },
  {
    "path": "maths/sieve_of_eratosthenes.py",
    "content": "\"\"\"\r\nSieve of Eratosthones\r\n\r\nThe sieve of Eratosthenes is an algorithm used to find prime numbers, less than or\r\nequal to a given value.\r\nIllustration:\r\nhttps://upload.wikimedia.org/wikipedia/commons/b/b9/Sieve_of_Eratosthenes_animation.gif\r\nReference: https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes\r\n\r\ndoctest provider: Bruno Simas Hadlich (https://github.com/brunohadlich)\r\nAlso thanks to Dmitry (https://github.com/LizardWizzard) for finding the problem\r\n\"\"\"\r\n\r\nfrom __future__ import annotations\r\n\r\nimport math\r\n\r\n\r\ndef prime_sieve(num: int) -> list[int]:\r\n    \"\"\"\r\n    Returns a list with all prime numbers up to n.\r\n\r\n    >>> prime_sieve(50)\r\n    [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]\r\n    >>> prime_sieve(25)\r\n    [2, 3, 5, 7, 11, 13, 17, 19, 23]\r\n    >>> prime_sieve(10)\r\n    [2, 3, 5, 7]\r\n    >>> prime_sieve(9)\r\n    [2, 3, 5, 7]\r\n    >>> prime_sieve(2)\r\n    [2]\r\n    >>> prime_sieve(1)\r\n    []\r\n    \"\"\"\r\n\r\n    if num <= 0:\r\n        msg = f\"{num}: Invalid input, please enter a positive integer.\"\r\n        raise ValueError(msg)\r\n\r\n    sieve = [True] * (num + 1)\r\n    prime = []\r\n    start = 2\r\n    end = int(math.sqrt(num))\r\n\r\n    while start <= end:\r\n        # If start is a prime\r\n        if sieve[start] is True:\r\n            prime.append(start)\r\n\r\n            # Set multiples of start be False\r\n            for i in range(start * start, num + 1, start):\r\n                if sieve[i] is True:\r\n                    sieve[i] = False\r\n\r\n        start += 1\r\n\r\n    for j in range(end + 1, num + 1):\r\n        if sieve[j] is True:\r\n            prime.append(j)\r\n\r\n    return prime\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    print(prime_sieve(int(input(\"Enter a positive integer: \").strip())))\r\n"
  },
  {
    "path": "maths/sigmoid.py",
    "content": "\"\"\"\nThis script demonstrates the implementation of the Sigmoid function.\n\nThe function takes a vector of K real numbers as input and then 1 / (1 + exp(-x)).\nAfter through Sigmoid, the element of the vector mostly 0 between 1. or 1 between -1.\n\nScript inspired from its corresponding Wikipedia article\nhttps://en.wikipedia.org/wiki/Sigmoid_function\n\"\"\"\n\nimport numpy as np\n\n\ndef sigmoid(vector: np.ndarray) -> np.ndarray:\n    \"\"\"\n    Implements the sigmoid function\n\n    Parameters:\n        vector (np.array): A  numpy array of shape (1,n)\n        consisting of real values\n\n    Returns:\n        sigmoid_vec (np.array): The input numpy array, after applying\n        sigmoid.\n\n    Examples:\n    >>> sigmoid(np.array([-1.0, 1.0, 2.0]))\n    array([0.26894142, 0.73105858, 0.88079708])\n\n    >>> sigmoid(np.array([0.0]))\n    array([0.5])\n    \"\"\"\n    return 1 / (1 + np.exp(-vector))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/signum.py",
    "content": "\"\"\"\nSignum function -- https://en.wikipedia.org/wiki/Sign_function\n\"\"\"\n\n\ndef signum(num: float) -> int:\n    \"\"\"\n    Applies signum function on the number\n\n    Custom test cases:\n    >>> signum(-10)\n    -1\n    >>> signum(10)\n    1\n    >>> signum(0)\n    0\n    >>> signum(-20.5)\n    -1\n    >>> signum(20.5)\n    1\n    >>> signum(-1e-6)\n    -1\n    >>> signum(1e-6)\n    1\n    >>> signum(\"Hello\")\n    Traceback (most recent call last):\n        ...\n    TypeError: '<' not supported between instances of 'str' and 'int'\n    >>> signum([])\n    Traceback (most recent call last):\n        ...\n    TypeError: '<' not supported between instances of 'list' and 'int'\n    \"\"\"\n    if num < 0:\n        return -1\n    return 1 if num else 0\n\n\ndef test_signum() -> None:\n    \"\"\"\n    Tests the signum function\n    >>> test_signum()\n    \"\"\"\n    assert signum(5) == 1\n    assert signum(-5) == -1\n    assert signum(0) == 0\n    assert signum(10.5) == 1\n    assert signum(-10.5) == -1\n    assert signum(1e-6) == 1\n    assert signum(-1e-6) == -1\n    assert signum(123456789) == 1\n    assert signum(-123456789) == -1\n\n\nif __name__ == \"__main__\":\n    print(signum(12))\n    print(signum(-12))\n    print(signum(0))\n"
  },
  {
    "path": "maths/simultaneous_linear_equation_solver.py",
    "content": "\"\"\"\r\nhttps://en.wikipedia.org/wiki/Augmented_matrix\r\n\r\nThis algorithm solves simultaneous linear equations of the form\r\nλa + λb + λc + λd + ... = y as [λ, λ, λ, λ, ..., y]\r\nWhere λ & y are individual coefficients, the no. of equations = no. of coefficients - 1\r\n\r\nNote in order to work there must exist 1 equation where all instances of λ and y != 0\r\n\"\"\"\r\n\r\n\r\ndef simplify(current_set: list[list]) -> list[list]:\r\n    \"\"\"\r\n    >>> simplify([[1, 2, 3], [4, 5, 6]])\r\n    [[1.0, 2.0, 3.0], [0.0, 0.75, 1.5]]\r\n    >>> simplify([[5, 2, 5], [5, 1, 10]])\r\n    [[1.0, 0.4, 1.0], [0.0, 0.2, -1.0]]\r\n    \"\"\"\r\n    # Divide each row by magnitude of first term --> creates 'unit' matrix\r\n    duplicate_set = current_set.copy()\r\n    for row_index, row in enumerate(duplicate_set):\r\n        magnitude = row[0]\r\n        for column_index, column in enumerate(row):\r\n            if magnitude == 0:\r\n                current_set[row_index][column_index] = column\r\n                continue\r\n            current_set[row_index][column_index] = column / magnitude\r\n    # Subtract to cancel term\r\n    first_row = current_set[0]\r\n    final_set = [first_row]\r\n    current_set = current_set[1::]\r\n    for row in current_set:\r\n        temp_row = []\r\n        # If first term is 0, it is already in form we want, so we preserve it\r\n        if row[0] == 0:\r\n            final_set.append(row)\r\n            continue\r\n        for column_index in range(len(row)):\r\n            temp_row.append(first_row[column_index] - row[column_index])\r\n        final_set.append(temp_row)\r\n    # Create next recursion iteration set\r\n    if len(final_set[0]) != 3:\r\n        current_first_row = final_set[0]\r\n        current_first_column = []\r\n        next_iteration = []\r\n        for row in final_set[1::]:\r\n            current_first_column.append(row[0])\r\n            next_iteration.append(row[1::])\r\n        resultant = simplify(next_iteration)\r\n        for i in range(len(resultant)):\r\n            resultant[i].insert(0, current_first_column[i])\r\n        resultant.insert(0, current_first_row)\r\n        final_set = resultant\r\n    return final_set\r\n\r\n\r\ndef solve_simultaneous(equations: list[list]) -> list:\r\n    \"\"\"\r\n    >>> solve_simultaneous([[1, 2, 3],[4, 5, 6]])\r\n    [-1.0, 2.0]\r\n    >>> solve_simultaneous([[0, -3, 1, 7],[3, 2, -1, 11],[5, 1, -2, 12]])\r\n    [6.4, 1.2, 10.6]\r\n    >>> solve_simultaneous([])\r\n    Traceback (most recent call last):\r\n        ...\r\n    IndexError: solve_simultaneous() requires n lists of length n+1\r\n    >>> solve_simultaneous([[1, 2, 3],[1, 2]])\r\n    Traceback (most recent call last):\r\n        ...\r\n    IndexError: solve_simultaneous() requires n lists of length n+1\r\n    >>> solve_simultaneous([[1, 2, 3],[\"a\", 7, 8]])\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: solve_simultaneous() requires lists of integers\r\n    >>> solve_simultaneous([[0, 2, 3],[4, 0, 6]])\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: solve_simultaneous() requires at least 1 full equation\r\n    \"\"\"\r\n    if len(equations) == 0:\r\n        raise IndexError(\"solve_simultaneous() requires n lists of length n+1\")\r\n    _length = len(equations) + 1\r\n    if any(len(item) != _length for item in equations):\r\n        raise IndexError(\"solve_simultaneous() requires n lists of length n+1\")\r\n    for row in equations:\r\n        if any(not isinstance(column, (int, float)) for column in row):\r\n            raise ValueError(\"solve_simultaneous() requires lists of integers\")\r\n    if len(equations) == 1:\r\n        return [equations[0][-1] / equations[0][0]]\r\n    data_set = equations.copy()\r\n    if any(0 in row for row in data_set):\r\n        temp_data = data_set.copy()\r\n        full_row = []\r\n        for row_index, row in enumerate(temp_data):\r\n            if 0 not in row:\r\n                full_row = data_set.pop(row_index)\r\n                break\r\n        if not full_row:\r\n            raise ValueError(\"solve_simultaneous() requires at least 1 full equation\")\r\n        data_set.insert(0, full_row)\r\n    useable_form = data_set.copy()\r\n    simplified = simplify(useable_form)\r\n    simplified = simplified[::-1]\r\n    solutions: list = []\r\n    for row in simplified:\r\n        current_solution = row[-1]\r\n        if not solutions:\r\n            if row[-2] == 0:\r\n                solutions.append(0)\r\n                continue\r\n            solutions.append(current_solution / row[-2])\r\n            continue\r\n        temp_row = row.copy()[: len(row) - 1 :]\r\n        while temp_row[0] == 0:\r\n            temp_row.pop(0)\r\n        if len(temp_row) == 0:\r\n            solutions.append(0)\r\n            continue\r\n        temp_row = temp_row[1::]\r\n        temp_row = temp_row[::-1]\r\n        for column_index, column in enumerate(temp_row):\r\n            current_solution -= column * solutions[column_index]\r\n        solutions.append(current_solution)\r\n    final = []\r\n    for item in solutions:\r\n        final.append(float(round(item, 5)))\r\n    return final[::-1]\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n    eq = [\r\n        [2, 1, 1, 1, 1, 4],\r\n        [1, 2, 1, 1, 1, 5],\r\n        [1, 1, 2, 1, 1, 6],\r\n        [1, 1, 1, 2, 1, 7],\r\n        [1, 1, 1, 1, 2, 8],\r\n    ]\r\n    print(solve_simultaneous(eq))\r\n    print(solve_simultaneous([[4, 2]]))\r\n"
  },
  {
    "path": "maths/sin.py",
    "content": "\"\"\"\nCalculate sin function.\n\nIt's not a perfect function so I am rounding the result to 10 decimal places by default.\n\nFormula: sin(x) = x - x^3/3! + x^5/5! - x^7/7! + ...\nWhere: x = angle in randians.\n\nSource:\n    https://www.homeschoolmath.net/teaching/sine_calculator.php\n\n\"\"\"\n\nfrom math import factorial, radians\n\n\ndef sin(\n    angle_in_degrees: float, accuracy: int = 18, rounded_values_count: int = 10\n) -> float:\n    \"\"\"\n    Implement sin function.\n\n    >>> sin(0.0)\n    0.0\n    >>> sin(90.0)\n    1.0\n    >>> sin(180.0)\n    0.0\n    >>> sin(270.0)\n    -1.0\n    >>> sin(0.68)\n    0.0118679603\n    >>> sin(1.97)\n    0.0343762121\n    >>> sin(64.0)\n    0.8987940463\n    >>> sin(9999.0)\n    -0.9876883406\n    >>> sin(-689.0)\n    0.5150380749\n    >>> sin(89.7)\n    0.9999862922\n    \"\"\"\n    # Simplify the angle to be between 360 and -360 degrees.\n    angle_in_degrees = angle_in_degrees - ((angle_in_degrees // 360.0) * 360.0)\n\n    # Converting from degrees to radians\n    angle_in_radians = radians(angle_in_degrees)\n\n    result = angle_in_radians\n    a = 3\n    b = -1\n\n    for _ in range(accuracy):\n        result += (b * (angle_in_radians**a)) / factorial(a)\n\n        b = -b  # One positive term and the next will be negative and so on...\n        a += 2  # Increased by 2 for every term.\n\n    return round(result, rounded_values_count)\n\n\nif __name__ == \"__main__\":\n    __import__(\"doctest\").testmod()\n"
  },
  {
    "path": "maths/sock_merchant.py",
    "content": "from collections import Counter\n\n\ndef sock_merchant(colors: list[int]) -> int:\n    \"\"\"\n    >>> sock_merchant([10, 20, 20, 10, 10, 30, 50, 10, 20])\n    3\n    >>> sock_merchant([1, 1, 3, 3])\n    2\n    \"\"\"\n    return sum(socks_by_color // 2 for socks_by_color in Counter(colors).values())\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    colors = [int(x) for x in input(\"Enter socks by color :\").rstrip().split()]\n    print(f\"sock_merchant({colors}) = {sock_merchant(colors)}\")\n"
  },
  {
    "path": "maths/softmax.py",
    "content": "\"\"\"\nThis script demonstrates the implementation of the Softmax function.\n\nIts a function that takes as input a vector of K real numbers, and normalizes\nit into a probability distribution consisting of K probabilities proportional\nto the exponentials of the input numbers. After softmax, the elements of the\nvector always sum up to 1.\n\nScript inspired from its corresponding Wikipedia article\nhttps://en.wikipedia.org/wiki/Softmax_function\n\"\"\"\n\nimport numpy as np\n\n\ndef softmax(vector):\n    \"\"\"\n    Implements the softmax function\n\n    Parameters:\n        vector (np.array,list,tuple): A  numpy array of shape (1,n)\n        consisting of real values or a similar list,tuple\n\n\n    Returns:\n        softmax_vec (np.array): The input numpy array  after applying\n        softmax.\n\n    The softmax vector adds up to one. We need to ceil to mitigate for\n    precision\n    >>> float(np.ceil(np.sum(softmax([1,2,3,4]))))\n    1.0\n\n    >>> vec = np.array([5,5])\n    >>> softmax(vec)\n    array([0.5, 0.5])\n\n    >>> softmax([0])\n    array([1.])\n    \"\"\"\n\n    # Calculate e^x for each x in your vector where e is Euler's\n    # number (approximately 2.718)\n    exponent_vector = np.exp(vector)\n\n    # Add up the all the exponentials\n    sum_of_exponents = np.sum(exponent_vector)\n\n    # Divide every exponent by the sum of all exponents\n    softmax_vector = exponent_vector / sum_of_exponents\n\n    return softmax_vector\n\n\nif __name__ == \"__main__\":\n    print(softmax((0,)))\n"
  },
  {
    "path": "maths/solovay_strassen_primality_test.py",
    "content": "\"\"\"\nThis script implements the Solovay-Strassen Primality test.\n\nThis probabilistic primality test is based on Euler's criterion. It is similar\nto the Fermat test but uses quadratic residues. It can quickly identify\ncomposite numbers but may occasionally classify composite numbers as prime.\n\nMore details and concepts about this can be found on:\nhttps://en.wikipedia.org/wiki/Solovay%E2%80%93Strassen_primality_test\n\"\"\"\n\nimport random\n\n\ndef jacobi_symbol(random_a: int, number: int) -> int:\n    \"\"\"\n    Calculate the Jacobi symbol. The Jacobi symbol is a generalization\n    of the Legendre symbol, which can be used to simplify computations involving\n    quadratic residues. The Jacobi symbol is used in primality tests, like the\n    Solovay-Strassen test, because it helps determine if an integer is a\n    quadratic residue modulo a given modulus, providing valuable information\n    about the number's potential primality or compositeness.\n\n    Parameters:\n        random_a: A randomly chosen integer from 2 to n-2 (inclusive)\n        number: The number that is tested for primality\n\n    Returns:\n        jacobi_symbol: The Jacobi symbol is a mathematical function\n        used to determine whether an integer is a quadratic residue modulo\n        another integer (usually prime) or not.\n\n    >>> jacobi_symbol(2, 13)\n    -1\n    >>> jacobi_symbol(5, 19)\n    1\n    >>> jacobi_symbol(7, 14)\n    0\n    \"\"\"\n\n    if random_a in (0, 1):\n        return random_a\n\n    random_a %= number\n    t = 1\n\n    while random_a != 0:\n        while random_a % 2 == 0:\n            random_a //= 2\n            r = number % 8\n            if r in (3, 5):\n                t = -t\n\n        random_a, number = number, random_a\n\n        if random_a % 4 == number % 4 == 3:\n            t = -t\n\n        random_a %= number\n\n    return t if number == 1 else 0\n\n\ndef solovay_strassen(number: int, iterations: int) -> bool:\n    \"\"\"\n    Check whether the input number is prime or not using\n    the Solovay-Strassen Primality test\n\n    Parameters:\n        number: The number that is tested for primality\n        iterations: The number of times that the test is run\n        which effects the accuracy\n\n    Returns:\n        result: True if number is probably prime and false\n        if not\n\n    >>> random.seed(10)\n    >>> solovay_strassen(13, 5)\n    True\n    >>> solovay_strassen(9, 10)\n    False\n    >>> solovay_strassen(17, 15)\n    True\n    \"\"\"\n\n    if number <= 1:\n        return False\n    if number <= 3:\n        return True\n\n    for _ in range(iterations):\n        a = random.randint(2, number - 2)\n        x = jacobi_symbol(a, number)\n        y = pow(a, (number - 1) // 2, number)\n\n        if x == 0 or y != x % number:\n            return False\n\n    return True\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/spearman_rank_correlation_coefficient.py",
    "content": "from collections.abc import Sequence\n\n\ndef assign_ranks(data: Sequence[float]) -> list[int]:\n    \"\"\"\n    Assigns ranks to elements in the array.\n\n    :param data: List of floats.\n    :return: List of ints representing the ranks.\n\n    Example:\n    >>> assign_ranks([3.2, 1.5, 4.0, 2.7, 5.1])\n    [3, 1, 4, 2, 5]\n\n    >>> assign_ranks([10.5, 8.1, 12.4, 9.3, 11.0])\n    [3, 1, 5, 2, 4]\n    \"\"\"\n    ranked_data = sorted((value, index) for index, value in enumerate(data))\n    ranks = [0] * len(data)\n\n    for position, (_, index) in enumerate(ranked_data):\n        ranks[index] = position + 1\n\n    return ranks\n\n\ndef calculate_spearman_rank_correlation(\n    variable_1: Sequence[float], variable_2: Sequence[float]\n) -> float:\n    \"\"\"\n    Calculates Spearman's rank correlation coefficient.\n\n    :param variable_1: List of floats representing the first variable.\n    :param variable_2: List of floats representing the second variable.\n    :return: Spearman's rank correlation coefficient.\n\n    Example Usage:\n\n    >>> x = [1, 2, 3, 4, 5]\n    >>> y = [5, 4, 3, 2, 1]\n    >>> calculate_spearman_rank_correlation(x, y)\n    -1.0\n\n    >>> x = [1, 2, 3, 4, 5]\n    >>> y = [2, 4, 6, 8, 10]\n    >>> calculate_spearman_rank_correlation(x, y)\n    1.0\n\n    >>> x = [1, 2, 3, 4, 5]\n    >>> y = [5, 1, 2, 9, 5]\n    >>> calculate_spearman_rank_correlation(x, y)\n    0.6\n    \"\"\"\n    n = len(variable_1)\n    rank_var1 = assign_ranks(variable_1)\n    rank_var2 = assign_ranks(variable_2)\n\n    # Calculate differences of ranks\n    d = [rx - ry for rx, ry in zip(rank_var1, rank_var2)]\n\n    # Calculate the sum of squared differences\n    d_squared = sum(di**2 for di in d)\n\n    # Calculate the Spearman's rank correlation coefficient\n    rho = 1 - (6 * d_squared) / (n * (n**2 - 1))\n\n    return rho\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    # Example usage:\n    print(\n        f\"{calculate_spearman_rank_correlation([1, 2, 3, 4, 5], [2, 4, 6, 8, 10]) = }\"\n    )\n\n    print(f\"{calculate_spearman_rank_correlation([1, 2, 3, 4, 5], [5, 4, 3, 2, 1]) = }\")\n\n    print(f\"{calculate_spearman_rank_correlation([1, 2, 3, 4, 5], [5, 1, 2, 9, 5]) = }\")\n"
  },
  {
    "path": "maths/special_numbers/__init__.py",
    "content": ""
  },
  {
    "path": "maths/special_numbers/armstrong_numbers.py",
    "content": "\"\"\"\nAn Armstrong number is equal to the sum of its own digits each raised to the\npower of the number of digits.\n\nFor example, 370 is an Armstrong number because 3*3*3 + 7*7*7 + 0*0*0 = 370.\n\nArmstrong numbers are also called Narcissistic numbers and Pluperfect numbers.\n\nOn-Line Encyclopedia of Integer Sequences entry: https://oeis.org/A005188\n\"\"\"\n\nPASSING = (1, 153, 370, 371, 1634, 24678051, 115132219018763992565095597973971522401)\nFAILING: tuple = (-153, -1, 0, 1.2, 200, \"A\", [], {}, None)\n\n\ndef armstrong_number(n: int) -> bool:\n    \"\"\"\n    Return True if n is an Armstrong number or False if it is not.\n\n    >>> all(armstrong_number(n) for n in PASSING)\n    True\n    >>> any(armstrong_number(n) for n in FAILING)\n    False\n    \"\"\"\n    if not isinstance(n, int) or n < 1:\n        return False\n\n    # Initialization of sum and number of digits.\n    total = 0\n    number_of_digits = 0\n    temp = n\n    # Calculation of digits of the number\n    number_of_digits = len(str(n))\n    # Dividing number into separate digits and find Armstrong number\n    temp = n\n    while temp > 0:\n        rem = temp % 10\n        total += rem**number_of_digits\n        temp //= 10\n    return n == total\n\n\ndef pluperfect_number(n: int) -> bool:\n    \"\"\"Return True if n is a pluperfect number or False if it is not\n\n    >>> all(pluperfect_number(n) for n in PASSING)\n    True\n    >>> any(pluperfect_number(n) for n in FAILING)\n    False\n    \"\"\"\n    if not isinstance(n, int) or n < 1:\n        return False\n\n    # Init a \"histogram\" of the digits\n    digit_histogram = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]\n    digit_total = 0\n    total = 0\n    temp = n\n    while temp > 0:\n        temp, rem = divmod(temp, 10)\n        digit_histogram[rem] += 1\n        digit_total += 1\n\n    for cnt, i in zip(digit_histogram, range(len(digit_histogram))):\n        total += cnt * i**digit_total\n\n    return n == total\n\n\ndef narcissistic_number(n: int) -> bool:\n    \"\"\"Return True if n is a narcissistic number or False if it is not.\n\n    >>> all(narcissistic_number(n) for n in PASSING)\n    True\n    >>> any(narcissistic_number(n) for n in FAILING)\n    False\n    \"\"\"\n    if not isinstance(n, int) or n < 1:\n        return False\n    expo = len(str(n))  # the power that all digits will be raised to\n    # check if sum of each digit multiplied expo times is equal to number\n    return n == sum(int(i) ** expo for i in str(n))\n\n\ndef main():\n    \"\"\"\n    Request that user input an integer and tell them if it is Armstrong number.\n    \"\"\"\n    num = int(input(\"Enter an integer to see if it is an Armstrong number: \").strip())\n    print(f\"{num} is {'' if armstrong_number(num) else 'not '}an Armstrong number.\")\n    print(f\"{num} is {'' if narcissistic_number(num) else 'not '}an Armstrong number.\")\n    print(f\"{num} is {'' if pluperfect_number(num) else 'not '}an Armstrong number.\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    main()\n"
  },
  {
    "path": "maths/special_numbers/automorphic_number.py",
    "content": "\"\"\"\n== Automorphic Numbers ==\nA number n is said to be a Automorphic number if\nthe square of n \"ends\" in the same digits as n itself.\n\nExamples of Automorphic Numbers: 0, 1, 5, 6, 25, 76, 376, 625, 9376, 90625, ...\nhttps://en.wikipedia.org/wiki/Automorphic_number\n\"\"\"\n\n# Author : Akshay Dubey (https://github.com/itsAkshayDubey)\n# Time Complexity : O(log10n)\n\n\ndef is_automorphic_number(number: int) -> bool:\n    \"\"\"\n    # doctest: +NORMALIZE_WHITESPACE\n    This functions takes an integer number as input.\n    returns True if the number is automorphic.\n    >>> is_automorphic_number(-1)\n    False\n    >>> is_automorphic_number(0)\n    True\n    >>> is_automorphic_number(5)\n    True\n    >>> is_automorphic_number(6)\n    True\n    >>> is_automorphic_number(7)\n    False\n    >>> is_automorphic_number(25)\n    True\n    >>> is_automorphic_number(259918212890625)\n    True\n    >>> is_automorphic_number(259918212890636)\n    False\n    >>> is_automorphic_number(740081787109376)\n    True\n    >>> is_automorphic_number(5.0)\n    Traceback (most recent call last):\n        ...\n    TypeError: Input value of [number=5.0] must be an integer\n    \"\"\"\n    if not isinstance(number, int):\n        msg = f\"Input value of [number={number}] must be an integer\"\n        raise TypeError(msg)\n    if number < 0:\n        return False\n    number_square = number * number\n    while number > 0:\n        if number % 10 != number_square % 10:\n            return False\n        number //= 10\n        number_square //= 10\n    return True\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/special_numbers/bell_numbers.py",
    "content": "\"\"\"\nBell numbers represent the number of ways to partition a set into non-empty\nsubsets. This module provides functions to calculate Bell numbers for sets of\nintegers. In other words, the first (n + 1) Bell numbers.\n\nFor more information about Bell numbers, refer to:\nhttps://en.wikipedia.org/wiki/Bell_number\n\"\"\"\n\n\ndef bell_numbers(max_set_length: int) -> list[int]:\n    \"\"\"\n    Calculate Bell numbers for the sets of lengths from 0 to max_set_length.\n    In other words, calculate first (max_set_length + 1) Bell numbers.\n\n    Args:\n        max_set_length (int): The maximum length of the sets for which\n        Bell numbers are calculated.\n\n    Returns:\n        list: A list of Bell numbers for sets of lengths from 0 to max_set_length.\n\n    Examples:\n    >>> bell_numbers(-2)\n    Traceback (most recent call last):\n        ...\n    ValueError: max_set_length must be non-negative\n    >>> bell_numbers(0)\n    [1]\n    >>> bell_numbers(1)\n    [1, 1]\n    >>> bell_numbers(5)\n    [1, 1, 2, 5, 15, 52]\n    \"\"\"\n    if max_set_length < 0:\n        raise ValueError(\"max_set_length must be non-negative\")\n\n    bell = [0] * (max_set_length + 1)\n    bell[0] = 1\n\n    for i in range(1, max_set_length + 1):\n        for j in range(i):\n            bell[i] += _binomial_coefficient(i - 1, j) * bell[j]\n\n    return bell\n\n\ndef _binomial_coefficient(total_elements: int, elements_to_choose: int) -> int:\n    \"\"\"\n    Calculate the binomial coefficient C(total_elements, elements_to_choose)\n\n    Args:\n        total_elements (int): The total number of elements.\n        elements_to_choose (int): The number of elements to choose.\n\n    Returns:\n        int: The binomial coefficient C(total_elements, elements_to_choose).\n\n    Examples:\n    >>> _binomial_coefficient(5, 2)\n    10\n    >>> _binomial_coefficient(6, 3)\n    20\n    \"\"\"\n    if elements_to_choose in {0, total_elements}:\n        return 1\n\n    elements_to_choose = min(elements_to_choose, total_elements - elements_to_choose)\n\n    coefficient = 1\n    for i in range(elements_to_choose):\n        coefficient *= total_elements - i\n        coefficient //= i + 1\n\n    return coefficient\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/special_numbers/carmichael_number.py",
    "content": "\"\"\"\n== Carmichael Numbers ==\nA number n is said to be a Carmichael number if it\nsatisfies the following modular arithmetic condition:\n\n    power(b, n-1) MOD n = 1,\n    for all b ranging from 1 to n such that b and\n    n are relatively prime, i.e, gcd(b, n) = 1\n\nExamples of Carmichael Numbers: 561, 1105, ...\nhttps://en.wikipedia.org/wiki/Carmichael_number\n\"\"\"\n\nfrom maths.greatest_common_divisor import greatest_common_divisor\n\n\ndef power(x: int, y: int, mod: int) -> int:\n    \"\"\"\n    Examples:\n    >>> power(2, 15, 3)\n    2\n    >>> power(5, 1, 30)\n    5\n    \"\"\"\n\n    if y == 0:\n        return 1\n    temp = power(x, y // 2, mod) % mod\n    temp = (temp * temp) % mod\n    if y % 2 == 1:\n        temp = (temp * x) % mod\n    return temp\n\n\ndef is_carmichael_number(n: int) -> bool:\n    \"\"\"\n    Examples:\n    >>> is_carmichael_number(4)\n    False\n    >>> is_carmichael_number(561)\n    True\n    >>> is_carmichael_number(562)\n    False\n    >>> is_carmichael_number(900)\n    False\n    >>> is_carmichael_number(1105)\n    True\n    >>> is_carmichael_number(8911)\n    True\n    >>> is_carmichael_number(5.1)\n    Traceback (most recent call last):\n         ...\n    ValueError: Number 5.1 must instead be a positive integer\n\n    >>> is_carmichael_number(-7)\n    Traceback (most recent call last):\n         ...\n    ValueError: Number -7 must instead be a positive integer\n\n    >>> is_carmichael_number(0)\n    Traceback (most recent call last):\n         ...\n    ValueError: Number 0 must instead be a positive integer\n    \"\"\"\n\n    if n <= 0 or not isinstance(n, int):\n        msg = f\"Number {n} must instead be a positive integer\"\n        raise ValueError(msg)\n\n    return all(\n        power(b, n - 1, n) == 1\n        for b in range(2, n)\n        if greatest_common_divisor(b, n) == 1\n    )\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    number = int(input(\"Enter number: \").strip())\n    if is_carmichael_number(number):\n        print(f\"{number} is a Carmichael Number.\")\n    else:\n        print(f\"{number} is not a Carmichael Number.\")\n"
  },
  {
    "path": "maths/special_numbers/catalan_number.py",
    "content": "\"\"\"\n\nCalculate the nth Catalan number\n\nSource:\n    https://en.wikipedia.org/wiki/Catalan_number\n\n\"\"\"\n\n\ndef catalan(number: int) -> int:\n    \"\"\"\n    :param number: nth catalan number to calculate\n    :return: the nth catalan number\n    Note: A catalan number is only defined for positive integers\n\n    >>> catalan(5)\n    14\n    >>> catalan(0)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input value of [number=0] must be > 0\n    >>> catalan(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input value of [number=-1] must be > 0\n    >>> catalan(5.0)\n    Traceback (most recent call last):\n        ...\n    TypeError: Input value of [number=5.0] must be an integer\n    \"\"\"\n\n    if not isinstance(number, int):\n        msg = f\"Input value of [number={number}] must be an integer\"\n        raise TypeError(msg)\n\n    if number < 1:\n        msg = f\"Input value of [number={number}] must be > 0\"\n        raise ValueError(msg)\n\n    current_number = 1\n\n    for i in range(1, number):\n        current_number *= 4 * i - 2\n        current_number //= i + 1\n\n    return current_number\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/special_numbers/hamming_numbers.py",
    "content": "\"\"\"\nA Hamming number is a positive integer of the form 2^i*3^j*5^k, for some\nnon-negative integers i, j, and k. They are often referred to as regular numbers.\nMore info at: https://en.wikipedia.org/wiki/Regular_number.\n\"\"\"\n\n\ndef hamming(n_element: int) -> list:\n    \"\"\"\n    This function creates an ordered list of n length as requested, and afterwards\n    returns the last value of the list. It must be given a positive integer.\n\n    :param n_element: The number of elements on the list\n    :return: The nth element of the list\n\n    >>> hamming(-5)\n    Traceback (most recent call last):\n        ...\n    ValueError: n_element should be a positive number\n    >>> hamming(5)\n    [1, 2, 3, 4, 5]\n    >>> hamming(10)\n    [1, 2, 3, 4, 5, 6, 8, 9, 10, 12]\n    >>> hamming(15)\n    [1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24]\n    \"\"\"\n    n_element = int(n_element)\n    if n_element < 1:\n        my_error = ValueError(\"n_element should be a positive number\")\n        raise my_error\n\n    hamming_list = [1]\n    i, j, k = (0, 0, 0)\n    index = 1\n    while index < n_element:\n        while hamming_list[i] * 2 <= hamming_list[-1]:\n            i += 1\n        while hamming_list[j] * 3 <= hamming_list[-1]:\n            j += 1\n        while hamming_list[k] * 5 <= hamming_list[-1]:\n            k += 1\n        hamming_list.append(\n            min(hamming_list[i] * 2, hamming_list[j] * 3, hamming_list[k] * 5)\n        )\n        index += 1\n    return hamming_list\n\n\nif __name__ == \"__main__\":\n    n = input(\"Enter the last number (nth term) of the Hamming Number Series: \")\n    print(\"Formula of Hamming Number Series => 2^i * 3^j * 5^k\")\n    hamming_numbers = hamming(int(n))\n    print(\"-----------------------------------------------------\")\n    print(f\"The list with nth numbers is: {hamming_numbers}\")\n    print(\"-----------------------------------------------------\")\n"
  },
  {
    "path": "maths/special_numbers/happy_number.py",
    "content": "def is_happy_number(number: int) -> bool:\r\n    \"\"\"\r\n    A happy number is a number which eventually reaches 1 when replaced by the sum of\r\n    the square of each digit.\r\n\r\n    :param number: The number to check for happiness.\r\n    :return: True if the number is a happy number, False otherwise.\r\n\r\n    >>> is_happy_number(19)\r\n    True\r\n    >>> is_happy_number(2)\r\n    False\r\n    >>> is_happy_number(23)\r\n    True\r\n    >>> is_happy_number(1)\r\n    True\r\n    >>> is_happy_number(0)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: number=0 must be a positive integer\r\n    >>> is_happy_number(-19)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: number=-19 must be a positive integer\r\n    >>> is_happy_number(19.1)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: number=19.1 must be a positive integer\r\n    >>> is_happy_number(\"happy\")\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: number='happy' must be a positive integer\r\n    \"\"\"\r\n    if not isinstance(number, int) or number <= 0:\r\n        msg = f\"{number=} must be a positive integer\"\r\n        raise ValueError(msg)\r\n\r\n    seen = set()\r\n    while number != 1 and number not in seen:\r\n        seen.add(number)\r\n        number = sum(int(digit) ** 2 for digit in str(number))\r\n    return number == 1\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n"
  },
  {
    "path": "maths/special_numbers/harshad_numbers.py",
    "content": "\"\"\"\nA harshad number (or more specifically an n-harshad number) is a number that's\ndivisible by the sum of its digits in some given base n.\nReference: https://en.wikipedia.org/wiki/Harshad_number\n\"\"\"\n\n\ndef int_to_base(number: int, base: int) -> str:\n    \"\"\"\n    Convert a given positive decimal integer to base 'base'.\n    Where 'base' ranges from 2 to 36.\n\n    Examples:\n    >>> int_to_base(0, 21)\n    '0'\n    >>> int_to_base(23, 2)\n    '10111'\n    >>> int_to_base(58, 5)\n    '213'\n    >>> int_to_base(167, 16)\n    'A7'\n    >>> # bases below 2 and beyond 36 will error\n    >>> int_to_base(98, 1)\n    Traceback (most recent call last):\n        ...\n    ValueError: 'base' must be between 2 and 36 inclusive\n    >>> int_to_base(98, 37)\n    Traceback (most recent call last):\n        ...\n    ValueError: 'base' must be between 2 and 36 inclusive\n    >>> int_to_base(-99, 16)\n    Traceback (most recent call last):\n        ...\n    ValueError: number must be a positive integer\n    \"\"\"\n\n    if base < 2 or base > 36:\n        raise ValueError(\"'base' must be between 2 and 36 inclusive\")\n\n    digits = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n    result = \"\"\n\n    if number < 0:\n        raise ValueError(\"number must be a positive integer\")\n\n    while number > 0:\n        number, remainder = divmod(number, base)\n        result = digits[remainder] + result\n\n    if result == \"\":\n        result = \"0\"\n\n    return result\n\n\ndef sum_of_digits(num: int, base: int) -> str:\n    \"\"\"\n    Calculate the sum of digit values in a positive integer\n    converted to the given 'base'.\n    Where 'base' ranges from 2 to 36.\n\n    Examples:\n    >>> sum_of_digits(103, 12)\n    '13'\n    >>> sum_of_digits(1275, 4)\n    '30'\n    >>> sum_of_digits(6645, 2)\n    '1001'\n    >>> # bases below 2 and beyond 36 will error\n    >>> sum_of_digits(543, 1)\n    Traceback (most recent call last):\n        ...\n    ValueError: 'base' must be between 2 and 36 inclusive\n    >>> sum_of_digits(543, 37)\n    Traceback (most recent call last):\n        ...\n    ValueError: 'base' must be between 2 and 36 inclusive\n    \"\"\"\n\n    if base < 2 or base > 36:\n        raise ValueError(\"'base' must be between 2 and 36 inclusive\")\n\n    num_str = int_to_base(num, base)\n    res = sum(int(char, base) for char in num_str)\n    res_str = int_to_base(res, base)\n    return res_str\n\n\ndef harshad_numbers_in_base(limit: int, base: int) -> list[str]:\n    \"\"\"\n    Finds all Harshad numbers smaller than num in base 'base'.\n    Where 'base' ranges from 2 to 36.\n\n    Examples:\n    >>> harshad_numbers_in_base(15, 2)\n    ['1', '10', '100', '110', '1000', '1010', '1100']\n    >>> harshad_numbers_in_base(12, 34)\n    ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B']\n    >>> harshad_numbers_in_base(12, 4)\n    ['1', '2', '3', '10', '12', '20', '21']\n    >>> # bases below 2 and beyond 36 will error\n    >>> harshad_numbers_in_base(234, 37)\n    Traceback (most recent call last):\n        ...\n    ValueError: 'base' must be between 2 and 36 inclusive\n    >>> harshad_numbers_in_base(234, 1)\n    Traceback (most recent call last):\n        ...\n    ValueError: 'base' must be between 2 and 36 inclusive\n    >>> harshad_numbers_in_base(-12, 6)\n    []\n    \"\"\"\n\n    if base < 2 or base > 36:\n        raise ValueError(\"'base' must be between 2 and 36 inclusive\")\n\n    if limit < 0:\n        return []\n\n    numbers = [\n        int_to_base(i, base)\n        for i in range(1, limit)\n        if i % int(sum_of_digits(i, base), base) == 0\n    ]\n\n    return numbers\n\n\ndef is_harshad_number_in_base(num: int, base: int) -> bool:\n    \"\"\"\n    Determines whether n in base 'base' is a harshad number.\n    Where 'base' ranges from 2 to 36.\n\n    Examples:\n    >>> is_harshad_number_in_base(18, 10)\n    True\n    >>> is_harshad_number_in_base(21, 10)\n    True\n    >>> is_harshad_number_in_base(-21, 5)\n    False\n    >>> # bases below 2 and beyond 36 will error\n    >>> is_harshad_number_in_base(45, 37)\n    Traceback (most recent call last):\n        ...\n    ValueError: 'base' must be between 2 and 36 inclusive\n    >>> is_harshad_number_in_base(45, 1)\n    Traceback (most recent call last):\n        ...\n    ValueError: 'base' must be between 2 and 36 inclusive\n    \"\"\"\n\n    if base < 2 or base > 36:\n        raise ValueError(\"'base' must be between 2 and 36 inclusive\")\n\n    if num < 0:\n        return False\n\n    n = int_to_base(num, base)\n    d = sum_of_digits(num, base)\n    return int(n, base) % int(d, base) == 0\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/special_numbers/hexagonal_number.py",
    "content": "\"\"\"\n== Hexagonal Number ==\nThe nth hexagonal number hn is the number of distinct dots\nin a pattern of dots consisting of the outlines of regular\nhexagons with sides up to n dots, when the hexagons are\noverlaid so that they share one vertex.\n\nhttps://en.wikipedia.org/wiki/Hexagonal_number\n\"\"\"\n\n# Author : Akshay Dubey (https://github.com/itsAkshayDubey)\n\n\ndef hexagonal(number: int) -> int:\n    \"\"\"\n    :param number: nth hexagonal number to calculate\n    :return: the nth hexagonal number\n    Note: A hexagonal number is only defined for positive integers\n    >>> hexagonal(4)\n    28\n    >>> hexagonal(11)\n    231\n    >>> hexagonal(22)\n    946\n    >>> hexagonal(0)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input must be a positive integer\n    >>> hexagonal(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input must be a positive integer\n    >>> hexagonal(11.0)\n    Traceback (most recent call last):\n        ...\n    TypeError: Input value of [number=11.0] must be an integer\n    \"\"\"\n    if not isinstance(number, int):\n        msg = f\"Input value of [number={number}] must be an integer\"\n        raise TypeError(msg)\n    if number < 1:\n        raise ValueError(\"Input must be a positive integer\")\n    return number * (2 * number - 1)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/special_numbers/krishnamurthy_number.py",
    "content": "\"\"\"\n == Krishnamurthy Number ==\nIt is also known as Peterson Number\nA Krishnamurthy Number is a number whose sum of the\nfactorial of the digits equals to the original\nnumber itself.\n\nFor example: 145 = 1! + 4! + 5!\n    So, 145 is a Krishnamurthy Number\n\"\"\"\n\n\ndef factorial(digit: int) -> int:\n    \"\"\"\n    >>> factorial(3)\n    6\n    >>> factorial(0)\n    1\n    >>> factorial(5)\n    120\n    \"\"\"\n\n    return 1 if digit in (0, 1) else (digit * factorial(digit - 1))\n\n\ndef krishnamurthy(number: int) -> bool:\n    \"\"\"\n    >>> krishnamurthy(145)\n    True\n    >>> krishnamurthy(240)\n    False\n    >>> krishnamurthy(1)\n    True\n    \"\"\"\n\n    fact_sum = 0\n    duplicate = number\n    while duplicate > 0:\n        duplicate, digit = divmod(duplicate, 10)\n        fact_sum += factorial(digit)\n    return fact_sum == number\n\n\nif __name__ == \"__main__\":\n    print(\"Program to check whether a number is a Krisnamurthy Number or not.\")\n    number = int(input(\"Enter number: \").strip())\n    print(\n        f\"{number} is {'' if krishnamurthy(number) else 'not '}a Krishnamurthy Number.\"\n    )\n"
  },
  {
    "path": "maths/special_numbers/perfect_number.py",
    "content": "\"\"\"\n== Perfect Number ==\nIn number theory, a perfect number is a positive integer that is equal to the sum of\nits positive divisors, excluding the number itself.\nFor example: 6 ==> divisors[1, 2, 3, 6]\n    Excluding 6, the sum(divisors) is 1 + 2 + 3 = 6\n    So, 6 is a Perfect Number\n\nOther examples of Perfect Numbers: 28, 486, ...\n\nhttps://en.wikipedia.org/wiki/Perfect_number\n\"\"\"\n\n\ndef perfect(number: int) -> bool:\n    \"\"\"\n    Check if a number is a perfect number.\n\n    A perfect number is a positive integer that is equal to the sum of its proper\n    divisors (excluding itself).\n\n    Args:\n        number: The number to be checked.\n\n    Returns:\n        True if the number is a perfect number, False otherwise.\n\n    Start from 1 because dividing by 0 will raise ZeroDivisionError.\n    A number at most can be divisible by the half of the number except the number\n    itself. For example, 6 is at most can be divisible by 3 except by 6 itself.\n\n    Examples:\n    >>> perfect(27)\n    False\n    >>> perfect(28)\n    True\n    >>> perfect(29)\n    False\n    >>> perfect(6)\n    True\n    >>> perfect(12)\n    False\n    >>> perfect(496)\n    True\n    >>> perfect(8128)\n    True\n    >>> perfect(0)\n    False\n    >>> perfect(-1)\n    False\n    >>> perfect(12.34)\n    Traceback (most recent call last):\n      ...\n    ValueError: number must be an integer\n    >>> perfect(\"Hello\")\n    Traceback (most recent call last):\n      ...\n    ValueError: number must be an integer\n    \"\"\"\n    if not isinstance(number, int):\n        raise ValueError(\"number must be an integer\")\n    if number <= 0:\n        return False\n    return sum(i for i in range(1, number // 2 + 1) if number % i == 0) == number\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    print(\"Program to check whether a number is a Perfect number or not...\")\n    try:\n        number = int(input(\"Enter a positive integer: \").strip())\n    except ValueError:\n        msg = \"number must be an integer\"\n        print(msg)\n        raise ValueError(msg)\n\n    print(f\"{number} is {'' if perfect(number) else 'not '}a Perfect Number.\")\n"
  },
  {
    "path": "maths/special_numbers/polygonal_numbers.py",
    "content": "def polygonal_num(num: int, sides: int) -> int:\n    \"\"\"\n    Returns the `num`th `sides`-gonal number. It is assumed that `num` >= 0 and\n    `sides` >= 3 (see for reference https://en.wikipedia.org/wiki/Polygonal_number).\n\n    >>> polygonal_num(0, 3)\n    0\n    >>> polygonal_num(3, 3)\n    6\n    >>> polygonal_num(5, 4)\n    25\n    >>> polygonal_num(2, 5)\n    5\n    >>> polygonal_num(-1, 0)\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid input: num must be >= 0 and sides must be >= 3.\n    >>> polygonal_num(0, 2)\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid input: num must be >= 0 and sides must be >= 3.\n    \"\"\"\n    if num < 0 or sides < 3:\n        raise ValueError(\"Invalid input: num must be >= 0 and sides must be >= 3.\")\n\n    return ((sides - 2) * num**2 - (sides - 4) * num) // 2\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/special_numbers/pronic_number.py",
    "content": "\"\"\"\n== Pronic Number ==\nA number n is said to be a Proic number if\nthere exists an integer m such that n = m * (m + 1)\n\nExamples of Proic Numbers: 0, 2, 6, 12, 20, 30, 42, 56, 72, 90, 110 ...\nhttps://en.wikipedia.org/wiki/Pronic_number\n\"\"\"\n\n# Author : Akshay Dubey (https://github.com/itsAkshayDubey)\n\n\ndef is_pronic(number: int) -> bool:\n    \"\"\"\n    # doctest: +NORMALIZE_WHITESPACE\n    This functions takes an integer number as input.\n    returns True if the number is pronic.\n    >>> is_pronic(-1)\n    False\n    >>> is_pronic(0)\n    True\n    >>> is_pronic(2)\n    True\n    >>> is_pronic(5)\n    False\n    >>> is_pronic(6)\n    True\n    >>> is_pronic(8)\n    False\n    >>> is_pronic(30)\n    True\n    >>> is_pronic(32)\n    False\n    >>> is_pronic(2147441940)\n    True\n    >>> is_pronic(9223372033963249500)\n    True\n    >>> is_pronic(6.0)\n    Traceback (most recent call last):\n        ...\n    TypeError: Input value of [number=6.0] must be an integer\n    \"\"\"\n    if not isinstance(number, int):\n        msg = f\"Input value of [number={number}] must be an integer\"\n        raise TypeError(msg)\n    if number < 0 or number % 2 == 1:\n        return False\n    number_sqrt = int(number**0.5)\n    return number == number_sqrt * (number_sqrt + 1)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/special_numbers/proth_number.py",
    "content": "\"\"\"\nCalculate the nth Proth number\nSource:\n    https://handwiki.org/wiki/Proth_number\n\"\"\"\n\nimport math\n\n\ndef proth(number: int) -> int:\n    \"\"\"\n    :param number: nth number to calculate in the sequence\n    :return: the nth number in Proth number\n    Note: indexing starts at 1 i.e. proth(1) gives the first Proth number of 3\n    >>> proth(6)\n    25\n    >>> proth(0)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input value of [number=0] must be > 0\n    >>> proth(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input value of [number=-1] must be > 0\n    >>> proth(6.0)\n    Traceback (most recent call last):\n        ...\n    TypeError: Input value of [number=6.0] must be an integer\n    \"\"\"\n\n    if not isinstance(number, int):\n        msg = f\"Input value of [number={number}] must be an integer\"\n        raise TypeError(msg)\n\n    if number < 1:\n        msg = f\"Input value of [number={number}] must be > 0\"\n        raise ValueError(msg)\n    elif number == 1:\n        return 3\n    elif number == 2:\n        return 5\n    else:\n        \"\"\"\n        +1 for binary starting at 0 i.e. 2^0, 2^1, etc.\n        +1 to start the sequence at the 3rd Proth number\n        Hence, we have a +2 in the below statement\n        \"\"\"\n        block_index = int(math.log(number // 3, 2)) + 2\n\n        proth_list = [3, 5]\n        proth_index = 2\n        increment = 3\n        for block in range(1, block_index):\n            for _ in range(increment):\n                proth_list.append(2 ** (block + 1) + proth_list[proth_index - 1])\n                proth_index += 1\n            increment *= 2\n\n    return proth_list[number - 1]\n\n\ndef is_proth_number(number: int) -> bool:\n    \"\"\"\n    :param number: positive integer number\n    :return: true if number is a Proth number, false otherwise\n    >>> is_proth_number(1)\n    False\n    >>> is_proth_number(2)\n    False\n    >>> is_proth_number(3)\n    True\n    >>> is_proth_number(4)\n    False\n    >>> is_proth_number(5)\n    True\n    >>> is_proth_number(34)\n    False\n    >>> is_proth_number(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Input value of [number=-1] must be > 0\n    >>> is_proth_number(6.0)\n    Traceback (most recent call last):\n        ...\n    TypeError: Input value of [number=6.0] must be an integer\n    \"\"\"\n    if not isinstance(number, int):\n        message = f\"Input value of [{number=}] must be an integer\"\n        raise TypeError(message)\n\n    if number <= 0:\n        message = f\"Input value of [{number=}] must be > 0\"\n        raise ValueError(message)\n\n    if number == 1:\n        return False\n\n    number -= 1\n    n = 0\n    while number % 2 == 0:\n        n += 1\n        number //= 2\n    return number < 2**n\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    for number in range(11):\n        value = 0\n        try:\n            value = proth(number)\n        except ValueError:\n            print(f\"ValueError: there is no {number}th Proth number\")\n            continue\n\n        print(f\"The {number}th Proth number: {value}\")\n\n    for number in [1, 2, 3, 4, 5, 9, 13, 49, 57, 193, 241, 163, 201]:\n        if is_proth_number(number):\n            print(f\"{number} is a Proth number\")\n        else:\n            print(f\"{number} is not a Proth number\")\n"
  },
  {
    "path": "maths/special_numbers/triangular_numbers.py",
    "content": "\"\"\"\nA triangular number or triangle number counts objects arranged in an\nequilateral triangle. This module provides a function to generate n'th\ntriangular number.\n\nFor more information about triangular numbers, refer to:\nhttps://en.wikipedia.org/wiki/Triangular_number\n\"\"\"\n\n\ndef triangular_number(position: int) -> int:\n    \"\"\"\n    Generate the triangular number at the specified position.\n\n    Args:\n        position (int): The position of the triangular number to generate.\n\n    Returns:\n        int: The triangular number at the specified position.\n\n    Raises:\n        ValueError: If `position` is negative.\n\n    Examples:\n    >>> triangular_number(1)\n    1\n    >>> triangular_number(3)\n    6\n    >>> triangular_number(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: param `position` must be non-negative\n    \"\"\"\n    if position < 0:\n        raise ValueError(\"param `position` must be non-negative\")\n\n    return position * (position + 1) // 2\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/special_numbers/ugly_numbers.py",
    "content": "\"\"\"\nUgly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence\n1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, … shows the first 11 ugly numbers. By convention,\n1 is included.\nGiven an integer n, we have to find the nth ugly number.\n\nFor more details, refer this article\nhttps://www.geeksforgeeks.org/ugly-numbers/\n\"\"\"\n\n\ndef ugly_numbers(n: int) -> int:\n    \"\"\"\n    Returns the nth ugly number.\n    >>> ugly_numbers(100)\n    1536\n    >>> ugly_numbers(0)\n    1\n    >>> ugly_numbers(20)\n    36\n    >>> ugly_numbers(-5)\n    1\n    >>> ugly_numbers(-5.5)\n    Traceback (most recent call last):\n        ...\n    TypeError: 'float' object cannot be interpreted as an integer\n    \"\"\"\n    ugly_nums = [1]\n\n    i2, i3, i5 = 0, 0, 0\n    next_2 = ugly_nums[i2] * 2\n    next_3 = ugly_nums[i3] * 3\n    next_5 = ugly_nums[i5] * 5\n\n    for _ in range(1, n):\n        next_num = min(next_2, next_3, next_5)\n        ugly_nums.append(next_num)\n        if next_num == next_2:\n            i2 += 1\n            next_2 = ugly_nums[i2] * 2\n        if next_num == next_3:\n            i3 += 1\n            next_3 = ugly_nums[i3] * 3\n        if next_num == next_5:\n            i5 += 1\n            next_5 = ugly_nums[i5] * 5\n    return ugly_nums[-1]\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod(verbose=True)\n    print(f\"{ugly_numbers(200) = }\")\n"
  },
  {
    "path": "maths/special_numbers/weird_number.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/Weird_number\n\nFun fact: The set of weird numbers has positive asymptotic density.\n\"\"\"\n\nfrom math import sqrt\n\n\ndef factors(number: int) -> list[int]:\n    \"\"\"\n    >>> factors(12)\n    [1, 2, 3, 4, 6]\n    >>> factors(1)\n    [1]\n    >>> factors(100)\n    [1, 2, 4, 5, 10, 20, 25, 50]\n\n    # >>> factors(-12)\n    # [1, 2, 3, 4, 6]\n    \"\"\"\n\n    values = [1]\n    for i in range(2, int(sqrt(number)) + 1, 1):\n        if number % i == 0:\n            values.append(i)\n            if int(number // i) != i:\n                values.append(int(number // i))\n    return sorted(values)\n\n\ndef abundant(n: int) -> bool:\n    \"\"\"\n    >>> abundant(0)\n    True\n    >>> abundant(1)\n    False\n    >>> abundant(12)\n    True\n    >>> abundant(13)\n    False\n    >>> abundant(20)\n    True\n\n    # >>> abundant(-12)\n    # True\n    \"\"\"\n    return sum(factors(n)) > n\n\n\ndef semi_perfect(number: int) -> bool:\n    \"\"\"\n    >>> semi_perfect(0)\n    True\n    >>> semi_perfect(1)\n    True\n    >>> semi_perfect(12)\n    True\n    >>> semi_perfect(13)\n    False\n\n    # >>> semi_perfect(-12)\n    # True\n    \"\"\"\n    values = factors(number)\n    r = len(values)\n    subset = [[0 for i in range(number + 1)] for j in range(r + 1)]\n    for i in range(r + 1):\n        subset[i][0] = True\n\n    for i in range(1, number + 1):\n        subset[0][i] = False\n\n    for i in range(1, r + 1):\n        for j in range(1, number + 1):\n            if j < values[i - 1]:\n                subset[i][j] = subset[i - 1][j]\n            else:\n                subset[i][j] = subset[i - 1][j] or subset[i - 1][j - values[i - 1]]\n\n    return subset[r][number] != 0\n\n\ndef weird(number: int) -> bool:\n    \"\"\"\n    >>> weird(0)\n    False\n    >>> weird(70)\n    True\n    >>> weird(77)\n    False\n    \"\"\"\n    return abundant(number) and not semi_perfect(number)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod(verbose=True)\n    for number in (69, 70, 71):\n        print(f\"{number} is {'' if weird(number) else 'not '}weird.\")\n"
  },
  {
    "path": "maths/sum_of_arithmetic_series.py",
    "content": "# DarkCoder\ndef sum_of_series(first_term: int, common_diff: int, num_of_terms: int) -> float:\n    \"\"\"\n    Find the sum of n terms in an arithmetic progression.\n\n    >>> sum_of_series(1, 1, 10)\n    55.0\n    >>> sum_of_series(1, 10, 100)\n    49600.0\n    \"\"\"\n    total = (num_of_terms / 2) * (2 * first_term + (num_of_terms - 1) * common_diff)\n    # formula for sum of series\n    return total\n\n\ndef main():\n    print(sum_of_series(1, 1, 10))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/sum_of_digits.py",
    "content": "def sum_of_digits(n: int) -> int:\n    \"\"\"\n    Find the sum of digits of a number.\n    >>> sum_of_digits(12345)\n    15\n    >>> sum_of_digits(123)\n    6\n    >>> sum_of_digits(-123)\n    6\n    >>> sum_of_digits(0)\n    0\n    \"\"\"\n    n = abs(n)\n    res = 0\n    while n > 0:\n        res += n % 10\n        n //= 10\n    return res\n\n\ndef sum_of_digits_recursion(n: int) -> int:\n    \"\"\"\n    Find the sum of digits of a number using recursion\n    >>> sum_of_digits_recursion(12345)\n    15\n    >>> sum_of_digits_recursion(123)\n    6\n    >>> sum_of_digits_recursion(-123)\n    6\n    >>> sum_of_digits_recursion(0)\n    0\n    \"\"\"\n    n = abs(n)\n    return n if n < 10 else n % 10 + sum_of_digits(n // 10)\n\n\ndef sum_of_digits_compact(n: int) -> int:\n    \"\"\"\n    Find the sum of digits of a number\n    >>> sum_of_digits_compact(12345)\n    15\n    >>> sum_of_digits_compact(123)\n    6\n    >>> sum_of_digits_compact(-123)\n    6\n    >>> sum_of_digits_compact(0)\n    0\n    \"\"\"\n    return sum(int(c) for c in str(abs(n)))\n\n\ndef benchmark() -> None:\n    \"\"\"\n    Benchmark multiple functions, with three different length int values.\n    \"\"\"\n    from collections.abc import Callable\n    from timeit import timeit\n\n    def benchmark_a_function(func: Callable, value: int) -> None:\n        call = f\"{func.__name__}({value})\"\n        timing = timeit(f\"__main__.{call}\", setup=\"import __main__\")\n        print(f\"{call:56} = {func(value)} -- {timing:.4f} seconds\")\n\n    for value in (262144, 1125899906842624, 1267650600228229401496703205376):\n        for func in (sum_of_digits, sum_of_digits_recursion, sum_of_digits_compact):\n            benchmark_a_function(func, value)\n        print()\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    benchmark()\n"
  },
  {
    "path": "maths/sum_of_geometric_progression.py",
    "content": "def sum_of_geometric_progression(\r\n    first_term: int, common_ratio: int, num_of_terms: int\r\n) -> float:\r\n    \"\"\" \"\r\n    Return the sum of n terms in a geometric progression.\r\n    >>> sum_of_geometric_progression(1, 2, 10)\r\n    1023.0\r\n    >>> sum_of_geometric_progression(1, 10, 5)\r\n    11111.0\r\n    >>> sum_of_geometric_progression(0, 2, 10)\r\n    0.0\r\n    >>> sum_of_geometric_progression(1, 0, 10)\r\n    1.0\r\n    >>> sum_of_geometric_progression(1, 2, 0)\r\n    -0.0\r\n    >>> sum_of_geometric_progression(-1, 2, 10)\r\n    -1023.0\r\n    >>> sum_of_geometric_progression(1, -2, 10)\r\n    -341.0\r\n    >>> sum_of_geometric_progression(1, 2, -10)\r\n    -0.9990234375\r\n    \"\"\"\r\n    if common_ratio == 1:\r\n        # Formula for sum if common ratio is 1\r\n        return num_of_terms * first_term\r\n\r\n    # Formula for finding sum of n terms of a GeometricProgression\r\n    return (first_term / (1 - common_ratio)) * (1 - common_ratio**num_of_terms)\r\n"
  },
  {
    "path": "maths/sum_of_harmonic_series.py",
    "content": "def sum_of_harmonic_progression(\n    first_term: float, common_difference: float, number_of_terms: int\n) -> float:\n    \"\"\"\n    https://en.wikipedia.org/wiki/Harmonic_progression_(mathematics)\n\n    Find the sum of n terms in an harmonic progression.  The calculation starts with the\n    first_term and loops adding the common difference of Arithmetic Progression by which\n    the given Harmonic Progression is linked.\n\n    >>> sum_of_harmonic_progression(1 / 2, 2, 2)\n    0.75\n    >>> sum_of_harmonic_progression(1 / 5, 5, 5)\n    0.45666666666666667\n    \"\"\"\n    arithmetic_progression = [1 / first_term]\n    first_term = 1 / first_term\n    for _ in range(number_of_terms - 1):\n        first_term += common_difference\n        arithmetic_progression.append(first_term)\n    harmonic_series = [1 / step for step in arithmetic_progression]\n    return sum(harmonic_series)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    print(sum_of_harmonic_progression(1 / 2, 2, 2))\n"
  },
  {
    "path": "maths/sumset.py",
    "content": "\"\"\"\n\nCalculates the SumSet of two sets of numbers (A and B)\n\nSource:\n    https://en.wikipedia.org/wiki/Sumset\n\n\"\"\"\n\n\ndef sumset(set_a: set, set_b: set) -> set:\n    \"\"\"\n    :param first set: a set of numbers\n    :param second set: a set of numbers\n    :return: the nth number in Sylvester's sequence\n\n    >>> sumset({1, 2, 3}, {4, 5, 6})\n    {5, 6, 7, 8, 9}\n\n    >>> sumset({1, 2, 3}, {4, 5, 6, 7})\n    {5, 6, 7, 8, 9, 10}\n\n    >>> sumset({1, 2, 3, 4}, 3)\n    Traceback (most recent call last):\n    ...\n    AssertionError: The input value of [set_b=3] is not a set\n    \"\"\"\n    assert isinstance(set_a, set), f\"The input value of [set_a={set_a}] is not a set\"\n    assert isinstance(set_b, set), f\"The input value of [set_b={set_b}] is not a set\"\n\n    return {a + b for a in set_a for b in set_b}\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "maths/sylvester_sequence.py",
    "content": "\"\"\"\n\nCalculates the nth number in Sylvester's sequence\n\nSource:\n    https://en.wikipedia.org/wiki/Sylvester%27s_sequence\n\n\"\"\"\n\n\ndef sylvester(number: int) -> int:\n    \"\"\"\n    :param number: nth number to calculate in the sequence\n    :return: the nth number in Sylvester's sequence\n\n    >>> sylvester(8)\n    113423713055421844361000443\n\n    >>> sylvester(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: The input value of [n=-1] has to be > 0\n\n    >>> sylvester(8.0)\n    Traceback (most recent call last):\n        ...\n    AssertionError: The input value of [n=8.0] is not an integer\n    \"\"\"\n    assert isinstance(number, int), f\"The input value of [n={number}] is not an integer\"\n\n    if number == 1:\n        return 2\n    elif number < 1:\n        msg = f\"The input value of [n={number}] has to be > 0\"\n        raise ValueError(msg)\n    else:\n        num = sylvester(number - 1)\n        lower = num - 1\n        upper = num\n        return lower * upper + 1\n\n\nif __name__ == \"__main__\":\n    print(f\"The 8th number in Sylvester's sequence: {sylvester(8)}\")\n"
  },
  {
    "path": "maths/tanh.py",
    "content": "\"\"\"\nThis script demonstrates the implementation of the tangent hyperbolic\nor tanh function.\n\nThe function takes a vector of K real numbers as input and\nthen (e^x - e^(-x))/(e^x + e^(-x)). After through tanh, the\nelement of the vector mostly -1 between 1.\n\nScript inspired from its corresponding Wikipedia article\nhttps://en.wikipedia.org/wiki/Activation_function\n\"\"\"\n\nimport numpy as np\n\n\ndef tangent_hyperbolic(vector: np.ndarray) -> np.ndarray:\n    \"\"\"\n        Implements the tanh function\n\n        Parameters:\n            vector: np.ndarray\n\n        Returns:\n            tanh (np.array): The input numpy array after applying tanh.\n\n        mathematically (e^x - e^(-x))/(e^x + e^(-x)) can be written as (2/(1+e^(-2x))-1\n\n    Examples:\n        >>> tangent_hyperbolic(np.array([1,5,6,-0.67]))\n        array([ 0.76159416,  0.9999092 ,  0.99998771, -0.58497988])\n\n        >>> tangent_hyperbolic(np.array([8,10,2,-0.98,13]))\n        array([ 0.99999977,  1.        ,  0.96402758, -0.7530659 ,  1.        ])\n\n    \"\"\"\n\n    return (2 / (1 + np.exp(-2 * vector))) - 1\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/test_factorial.py",
    "content": "# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"pytest\",\n# ]\n# ///\n\nimport pytest\n\nfrom maths.factorial import factorial, factorial_recursive\n\n\n@pytest.mark.parametrize(\"function\", [factorial, factorial_recursive])\ndef test_zero(function):\n    assert function(0) == 1\n\n\n@pytest.mark.parametrize(\"function\", [factorial, factorial_recursive])\ndef test_positive_integers(function):\n    assert function(1) == 1\n    assert function(5) == 120\n    assert function(7) == 5040\n\n\n@pytest.mark.parametrize(\"function\", [factorial, factorial_recursive])\ndef test_large_number(function):\n    assert function(10) == 3628800\n\n\n@pytest.mark.parametrize(\"function\", [factorial, factorial_recursive])\ndef test_negative_number(function):\n    with pytest.raises(ValueError):\n        function(-3)\n\n\n@pytest.mark.parametrize(\"function\", [factorial, factorial_recursive])\ndef test_float_number(function):\n    with pytest.raises(ValueError):\n        function(1.5)\n\n\nif __name__ == \"__main__\":\n    pytest.main([\"-v\", __file__])\n"
  },
  {
    "path": "maths/test_prime_check.py",
    "content": "\"\"\"\nMinimalist file that allows pytest to find and run the Test unittest.  For details, see:\nhttps://doc.pytest.org/en/latest/goodpractices.html#conventions-for-python-test-discovery\n\"\"\"\n\nfrom .prime_check import Test\n\nTest()\n"
  },
  {
    "path": "maths/three_sum.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/3SUM\n\"\"\"\n\n\ndef three_sum(nums: list[int]) -> list[list[int]]:\n    \"\"\"\n    Find all unique triplets in a sorted array of integers that sum up to zero.\n\n    Args:\n        nums: A sorted list of integers.\n\n    Returns:\n        A list of lists containing unique triplets that sum up to zero.\n\n    >>> three_sum([-1, 0, 1, 2, -1, -4])\n    [[-1, -1, 2], [-1, 0, 1]]\n    >>> three_sum([1, 2, 3, 4])\n    []\n    \"\"\"\n    nums.sort()\n    ans = []\n    for i in range(len(nums) - 2):\n        if i == 0 or (nums[i] != nums[i - 1]):\n            low, high, c = i + 1, len(nums) - 1, 0 - nums[i]\n            while low < high:\n                if nums[low] + nums[high] == c:\n                    ans.append([nums[i], nums[low], nums[high]])\n\n                    while low < high and nums[low] == nums[low + 1]:\n                        low += 1\n                    while low < high and nums[high] == nums[high - 1]:\n                        high -= 1\n\n                    low += 1\n                    high -= 1\n                elif nums[low] + nums[high] < c:\n                    low += 1\n                else:\n                    high -= 1\n    return ans\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/trapezoidal_rule.py",
    "content": "\"\"\"\nNumerical integration or quadrature for a smooth function f with known values at x_i\n\"\"\"\n\n\ndef trapezoidal_rule(boundary, steps):\n    \"\"\"\n    Implements the extended trapezoidal rule for numerical integration.\n    The function f(x) is provided below.\n\n    :param boundary: List containing the lower and upper bounds of integration [a, b]\n    :param steps: The number of steps (intervals) used in the approximation\n    :return: The numerical approximation of the integral\n\n    >>> abs(trapezoidal_rule([0, 1], 10) - 0.33333) < 0.01\n    True\n    >>> abs(trapezoidal_rule([0, 1], 100) - 0.33333) < 0.01\n    True\n    >>> abs(trapezoidal_rule([0, 2], 1000) - 2.66667) < 0.01\n    True\n    >>> abs(trapezoidal_rule([1, 2], 1000) - 2.33333) < 0.01\n    True\n    \"\"\"\n    h = (boundary[1] - boundary[0]) / steps\n    a = boundary[0]\n    b = boundary[1]\n    x_i = make_points(a, b, h)\n    y = 0.0\n    y += (h / 2.0) * f(a)\n    for i in x_i:\n        y += h * f(i)\n    y += (h / 2.0) * f(b)\n    return y\n\n\ndef make_points(a, b, h):\n    \"\"\"\n    Generates points between a and b with step size h for trapezoidal integration.\n\n    :param a: The lower bound of integration\n    :param b: The upper bound of integration\n    :param h: The step size\n    :yield: The next x-value in the range (a, b)\n\n    >>> list(make_points(0, 1, 0.1))    # doctest: +NORMALIZE_WHITESPACE\n    [0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6, 0.7, 0.7999999999999999, \\\n    0.8999999999999999]\n    >>> list(make_points(0, 10, 2.5))\n    [2.5, 5.0, 7.5]\n    >>> list(make_points(0, 10, 2))\n    [2, 4, 6, 8]\n    >>> list(make_points(1, 21, 5))\n    [6, 11, 16]\n    >>> list(make_points(1, 5, 2))\n    [3]\n    >>> list(make_points(1, 4, 3))\n    []\n    \"\"\"\n    x = a + h\n    while x <= (b - h):\n        yield x\n        x += h\n\n\ndef f(x):\n    \"\"\"\n    This is the function to integrate, f(x) = (x - 0)^2 = x^2.\n\n    :param x: The input value\n    :return: The value of f(x)\n\n    >>> f(0)\n    0\n    >>> f(1)\n    1\n    >>> f(0.5)\n    0.25\n    \"\"\"\n    return x**2\n\n\ndef main():\n    \"\"\"\n    Main function to test the trapezoidal rule.\n    :a: Lower bound of integration\n    :b: Upper bound of integration\n    :steps: define number of steps or resolution\n    :boundary: define boundary of integration\n\n    >>> main()\n    y = 0.3349999999999999\n    \"\"\"\n    a = 0.0\n    b = 1.0\n    steps = 10.0\n    boundary = [a, b]\n    y = trapezoidal_rule(boundary, steps)\n    print(f\"y = {y}\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    main()\n"
  },
  {
    "path": "maths/triplet_sum.py",
    "content": "\"\"\"\nGiven an array of integers and another integer target,\nwe are required to find a triplet from the array such that it's sum is equal to\nthe target.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom itertools import permutations\nfrom random import randint\nfrom timeit import repeat\n\n\ndef make_dataset() -> tuple[list[int], int]:\n    arr = [randint(-1000, 1000) for i in range(10)]\n    r = randint(-5000, 5000)\n    return (arr, r)\n\n\ndataset = make_dataset()\n\n\ndef triplet_sum1(arr: list[int], target: int) -> tuple[int, ...]:\n    \"\"\"\n    Returns a triplet in the array with sum equal to target,\n    else (0, 0, 0).\n    >>> triplet_sum1([13, 29, 7, 23, 5], 35)\n    (5, 7, 23)\n    >>> triplet_sum1([37, 9, 19, 50, 44], 65)\n    (9, 19, 37)\n    >>> arr = [6, 47, 27, 1, 15]\n    >>> target = 11\n    >>> triplet_sum1(arr, target)\n    (0, 0, 0)\n    \"\"\"\n    for triplet in permutations(arr, 3):\n        if sum(triplet) == target:\n            return tuple(sorted(triplet))\n    return (0, 0, 0)\n\n\ndef triplet_sum2(arr: list[int], target: int) -> tuple[int, int, int]:\n    \"\"\"\n    Returns a triplet in the array with sum equal to target,\n    else (0, 0, 0).\n    >>> triplet_sum2([13, 29, 7, 23, 5], 35)\n    (5, 7, 23)\n    >>> triplet_sum2([37, 9, 19, 50, 44], 65)\n    (9, 19, 37)\n    >>> arr = [6, 47, 27, 1, 15]\n    >>> target = 11\n    >>> triplet_sum2(arr, target)\n    (0, 0, 0)\n    \"\"\"\n    arr.sort()\n    n = len(arr)\n    for i in range(n - 1):\n        left, right = i + 1, n - 1\n        while left < right:\n            if arr[i] + arr[left] + arr[right] == target:\n                return (arr[i], arr[left], arr[right])\n            elif arr[i] + arr[left] + arr[right] < target:\n                left += 1\n            elif arr[i] + arr[left] + arr[right] > target:\n                right -= 1\n    return (0, 0, 0)\n\n\ndef solution_times() -> tuple[float, float]:\n    setup_code = \"\"\"\nfrom __main__ import dataset, triplet_sum1, triplet_sum2\n\"\"\"\n    test_code1 = \"\"\"\ntriplet_sum1(*dataset)\n\"\"\"\n    test_code2 = \"\"\"\ntriplet_sum2(*dataset)\n\"\"\"\n    times1 = repeat(setup=setup_code, stmt=test_code1, repeat=5, number=10000)\n    times2 = repeat(setup=setup_code, stmt=test_code2, repeat=5, number=10000)\n    return (min(times1), min(times2))\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    times = solution_times()\n    print(f\"The time for naive implementation is {times[0]}.\")\n    print(f\"The time for optimized implementation is {times[1]}.\")\n"
  },
  {
    "path": "maths/twin_prime.py",
    "content": "\"\"\"\n== Twin Prime ==\nA number n+2 is said to be a Twin prime of number n if\nboth n and n+2 are prime.\n\nExamples of Twin pairs: (3, 5), (5, 7), (11, 13), (17, 19), (29, 31), (41, 43), ...\nhttps://en.wikipedia.org/wiki/Twin_prime\n\"\"\"\n\n# Author : Akshay Dubey (https://github.com/itsAkshayDubey)\nfrom maths.prime_check import is_prime\n\n\ndef twin_prime(number: int) -> int:\n    \"\"\"\n    # doctest: +NORMALIZE_WHITESPACE\n    This functions takes an integer number as input.\n    returns n+2 if n and n+2 are prime numbers and -1 otherwise.\n    >>> twin_prime(3)\n    5\n    >>> twin_prime(4)\n    -1\n    >>> twin_prime(5)\n    7\n    >>> twin_prime(17)\n    19\n    >>> twin_prime(0)\n    -1\n    >>> twin_prime(6.0)\n    Traceback (most recent call last):\n        ...\n    TypeError: Input value of [number=6.0] must be an integer\n    \"\"\"\n    if not isinstance(number, int):\n        msg = f\"Input value of [number={number}] must be an integer\"\n        raise TypeError(msg)\n    if is_prime(number) and is_prime(number + 2):\n        return number + 2\n    else:\n        return -1\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "maths/two_pointer.py",
    "content": "\"\"\"\nGiven a sorted array of integers, return indices of the two numbers such\nthat they add up to a specific target using the two pointers technique.\n\nYou may assume that each input would have exactly one solution, and you\nmay not use the same element twice.\n\nThis is an alternative solution of the two-sum problem, which uses a\nmap to solve the problem. Hence can not solve the issue if there is a\nconstraint not use the same index twice. [1]\n\nExample:\nGiven nums = [2, 7, 11, 15], target = 9,\n\nBecause nums[0] + nums[1] = 2 + 7 = 9,\nreturn [0, 1].\n\n[1]: https://github.com/TheAlgorithms/Python/blob/master/other/two_sum.py\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef two_pointer(nums: list[int], target: int) -> list[int]:\n    \"\"\"\n    >>> two_pointer([2, 7, 11, 15], 9)\n    [0, 1]\n    >>> two_pointer([2, 7, 11, 15], 17)\n    [0, 3]\n    >>> two_pointer([2, 7, 11, 15], 18)\n    [1, 2]\n    >>> two_pointer([2, 7, 11, 15], 26)\n    [2, 3]\n    >>> two_pointer([1, 3, 3], 6)\n    [1, 2]\n    >>> two_pointer([2, 7, 11, 15], 8)\n    []\n    >>> two_pointer([3 * i for i in range(10)], 19)\n    []\n    >>> two_pointer([1, 2, 3], 6)\n    []\n    \"\"\"\n    i = 0\n    j = len(nums) - 1\n\n    while i < j:\n        if nums[i] + nums[j] == target:\n            return [i, j]\n        elif nums[i] + nums[j] < target:\n            i = i + 1\n        else:\n            j = j - 1\n\n    return []\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    print(f\"{two_pointer([2, 7, 11, 15], 9) = }\")\n"
  },
  {
    "path": "maths/two_sum.py",
    "content": "\"\"\"\nGiven an array of integers, return indices of the two numbers such that they add up to\na specific target.\n\nYou may assume that each input would have exactly one solution, and you may not use the\nsame element twice.\n\nExample:\nGiven nums = [2, 7, 11, 15], target = 9,\n\nBecause nums[0] + nums[1] = 2 + 7 = 9,\nreturn [0, 1].\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef two_sum(nums: list[int], target: int) -> list[int]:\n    \"\"\"\n    >>> two_sum([2, 7, 11, 15], 9)\n    [0, 1]\n    >>> two_sum([15, 2, 11, 7], 13)\n    [1, 2]\n    >>> two_sum([2, 7, 11, 15], 17)\n    [0, 3]\n    >>> two_sum([7, 15, 11, 2], 18)\n    [0, 2]\n    >>> two_sum([2, 7, 11, 15], 26)\n    [2, 3]\n    >>> two_sum([2, 7, 11, 15], 8)\n    []\n    >>> two_sum([3 * i for i in range(10)], 19)\n    []\n    \"\"\"\n    chk_map: dict[int, int] = {}\n    for index, val in enumerate(nums):\n        compl = target - val\n        if compl in chk_map:\n            return [chk_map[compl], index]\n        chk_map[val] = index\n    return []\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    print(f\"{two_sum([2, 7, 11, 15], 9) = }\")\n"
  },
  {
    "path": "maths/volume.py",
    "content": "\"\"\"\nFind the volume of various shapes.\n\n* https://en.wikipedia.org/wiki/Volume\n* https://en.wikipedia.org/wiki/Spherical_cap\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom math import pi, pow  # noqa: A004\n\n\ndef vol_cube(side_length: float) -> float:\n    \"\"\"\n    Calculate the Volume of a Cube.\n\n    >>> vol_cube(1)\n    1.0\n    >>> vol_cube(3)\n    27.0\n    >>> vol_cube(0)\n    0.0\n    >>> vol_cube(1.6)\n    4.096000000000001\n    >>> vol_cube(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_cube() only accepts non-negative values\n    \"\"\"\n    if side_length < 0:\n        raise ValueError(\"vol_cube() only accepts non-negative values\")\n    return pow(side_length, 3)\n\n\ndef vol_spherical_cap(height: float, radius: float) -> float:\n    \"\"\"\n    Calculate the volume of the spherical cap.\n\n    >>> vol_spherical_cap(1, 2)\n    5.235987755982988\n    >>> vol_spherical_cap(1.6, 2.6)\n    16.621119532592402\n    >>> vol_spherical_cap(0, 0)\n    0.0\n    >>> vol_spherical_cap(-1, 2)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_spherical_cap() only accepts non-negative values\n    >>> vol_spherical_cap(1, -2)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_spherical_cap() only accepts non-negative values\n    \"\"\"\n    if height < 0 or radius < 0:\n        raise ValueError(\"vol_spherical_cap() only accepts non-negative values\")\n    # Volume is 1/3 pi * height squared * (3 * radius - height)\n    return 1 / 3 * pi * pow(height, 2) * (3 * radius - height)\n\n\ndef vol_spheres_intersect(\n    radius_1: float, radius_2: float, centers_distance: float\n) -> float:\n    r\"\"\"\n    Calculate the volume of the intersection of two spheres.\n\n    The intersection is composed by two spherical caps and therefore its volume is the\n    sum of the volumes of the spherical caps.\n    First, it calculates the heights :math:`(h_1, h_2)` of the spherical caps,\n    then the two volumes and it returns the sum.\n    The height formulas are\n\n    .. math::\n        h_1 = \\frac{(radius_1 - radius_2 + centers\\_distance)\n                    \\cdot (radius_1 + radius_2 - centers\\_distance)}\n                   {2 \\cdot centers\\_distance}\n\n        h_2 = \\frac{(radius_2 - radius_1 + centers\\_distance)\n                    \\cdot (radius_2 + radius_1 - centers\\_distance)}\n                   {2 \\cdot centers\\_distance}\n\n    if `centers_distance` is 0 then it returns the volume of the smallers sphere\n\n    :return: ``vol_spherical_cap`` (:math:`h_1`, :math:`radius_2`)\n             + ``vol_spherical_cap`` (:math:`h_2`, :math:`radius_1`)\n\n    >>> vol_spheres_intersect(2, 2, 1)\n    21.205750411731103\n    >>> vol_spheres_intersect(2.6, 2.6, 1.6)\n    40.71504079052372\n    >>> vol_spheres_intersect(0, 0, 0)\n    0.0\n    >>> vol_spheres_intersect(-2, 2, 1)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_spheres_intersect() only accepts non-negative values\n    >>> vol_spheres_intersect(2, -2, 1)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_spheres_intersect() only accepts non-negative values\n    >>> vol_spheres_intersect(2, 2, -1)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_spheres_intersect() only accepts non-negative values\n    \"\"\"\n    if radius_1 < 0 or radius_2 < 0 or centers_distance < 0:\n        raise ValueError(\"vol_spheres_intersect() only accepts non-negative values\")\n    if centers_distance == 0:\n        return vol_sphere(min(radius_1, radius_2))\n\n    h1 = (\n        (radius_1 - radius_2 + centers_distance)\n        * (radius_1 + radius_2 - centers_distance)\n        / (2 * centers_distance)\n    )\n    h2 = (\n        (radius_2 - radius_1 + centers_distance)\n        * (radius_2 + radius_1 - centers_distance)\n        / (2 * centers_distance)\n    )\n\n    return vol_spherical_cap(h1, radius_2) + vol_spherical_cap(h2, radius_1)\n\n\ndef vol_spheres_union(\n    radius_1: float, radius_2: float, centers_distance: float\n) -> float:\n    r\"\"\"\n    Calculate the volume of the union of two spheres that possibly intersect.\n\n    It is the sum of sphere :math:`A` and sphere :math:`B` minus their intersection.\n    First, it calculates the volumes :math:`(v_1, v_2)` of the spheres,\n    then the volume of the intersection :math:`i` and\n    it returns the sum :math:`v_1 + v_2 - i`.\n    If `centers_distance` is 0 then it returns the volume of the larger sphere\n\n    :return: ``vol_sphere`` (:math:`radius_1`) + ``vol_sphere`` (:math:`radius_2`)\n             - ``vol_spheres_intersect``\n             (:math:`radius_1`, :math:`radius_2`, :math:`centers\\_distance`)\n\n    >>> vol_spheres_union(2, 2, 1)\n    45.814892864851146\n    >>> vol_spheres_union(1.56, 2.2, 1.4)\n    48.77802773671288\n    >>> vol_spheres_union(0, 2, 1)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_spheres_union() only accepts non-negative values, non-zero radius\n    >>> vol_spheres_union('1.56', '2.2', '1.4')\n    Traceback (most recent call last):\n        ...\n    TypeError: '<=' not supported between instances of 'str' and 'int'\n    >>> vol_spheres_union(1, None, 1)\n    Traceback (most recent call last):\n        ...\n    TypeError: '<=' not supported between instances of 'NoneType' and 'int'\n    \"\"\"\n\n    if radius_1 <= 0 or radius_2 <= 0 or centers_distance < 0:\n        raise ValueError(\n            \"vol_spheres_union() only accepts non-negative values, non-zero radius\"\n        )\n\n    if centers_distance == 0:\n        return vol_sphere(max(radius_1, radius_2))\n\n    return (\n        vol_sphere(radius_1)\n        + vol_sphere(radius_2)\n        - vol_spheres_intersect(radius_1, radius_2, centers_distance)\n    )\n\n\ndef vol_cuboid(width: float, height: float, length: float) -> float:\n    \"\"\"\n    Calculate the Volume of a Cuboid.\n\n    :return: multiple of `width`, `length` and `height`\n\n    >>> vol_cuboid(1, 1, 1)\n    1.0\n    >>> vol_cuboid(1, 2, 3)\n    6.0\n    >>> vol_cuboid(1.6, 2.6, 3.6)\n    14.976\n    >>> vol_cuboid(0, 0, 0)\n    0.0\n    >>> vol_cuboid(-1, 2, 3)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_cuboid() only accepts non-negative values\n    >>> vol_cuboid(1, -2, 3)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_cuboid() only accepts non-negative values\n    >>> vol_cuboid(1, 2, -3)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_cuboid() only accepts non-negative values\n    \"\"\"\n    if width < 0 or height < 0 or length < 0:\n        raise ValueError(\"vol_cuboid() only accepts non-negative values\")\n    return float(width * height * length)\n\n\ndef vol_cone(area_of_base: float, height: float) -> float:\n    r\"\"\"\n    | Calculate the Volume of a Cone.\n    | Wikipedia reference: https://en.wikipedia.org/wiki/Cone\n\n    :return: :math:`\\frac{1}{3} \\cdot area\\_of\\_base \\cdot height`\n\n    >>> vol_cone(10, 3)\n    10.0\n    >>> vol_cone(1, 1)\n    0.3333333333333333\n    >>> vol_cone(1.6, 1.6)\n    0.8533333333333335\n    >>> vol_cone(0, 0)\n    0.0\n    >>> vol_cone(-1, 1)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_cone() only accepts non-negative values\n    >>> vol_cone(1, -1)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_cone() only accepts non-negative values\n    \"\"\"\n    if height < 0 or area_of_base < 0:\n        raise ValueError(\"vol_cone() only accepts non-negative values\")\n    return area_of_base * height / 3.0\n\n\ndef vol_right_circ_cone(radius: float, height: float) -> float:\n    r\"\"\"\n    | Calculate the Volume of a Right Circular Cone.\n    | Wikipedia reference: https://en.wikipedia.org/wiki/Cone\n\n    :return: :math:`\\frac{1}{3} \\cdot \\pi \\cdot radius^2 \\cdot height`\n\n    >>> vol_right_circ_cone(2, 3)\n    12.566370614359172\n    >>> vol_right_circ_cone(0, 0)\n    0.0\n    >>> vol_right_circ_cone(1.6, 1.6)\n    4.289321169701265\n    >>> vol_right_circ_cone(-1, 1)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_right_circ_cone() only accepts non-negative values\n    >>> vol_right_circ_cone(1, -1)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_right_circ_cone() only accepts non-negative values\n    \"\"\"\n    if height < 0 or radius < 0:\n        raise ValueError(\"vol_right_circ_cone() only accepts non-negative values\")\n    return pi * pow(radius, 2) * height / 3.0\n\n\ndef vol_prism(area_of_base: float, height: float) -> float:\n    r\"\"\"\n    | Calculate the Volume of a Prism.\n    | Wikipedia reference: https://en.wikipedia.org/wiki/Prism_(geometry)\n\n    :return: :math:`V = B \\cdot h`\n\n    >>> vol_prism(10, 2)\n    20.0\n    >>> vol_prism(11, 1)\n    11.0\n    >>> vol_prism(1.6, 1.6)\n    2.5600000000000005\n    >>> vol_prism(0, 0)\n    0.0\n    >>> vol_prism(-1, 1)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_prism() only accepts non-negative values\n    >>> vol_prism(1, -1)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_prism() only accepts non-negative values\n    \"\"\"\n    if height < 0 or area_of_base < 0:\n        raise ValueError(\"vol_prism() only accepts non-negative values\")\n    return float(area_of_base * height)\n\n\ndef vol_pyramid(area_of_base: float, height: float) -> float:\n    r\"\"\"\n    | Calculate the Volume of a Pyramid.\n    | Wikipedia reference: https://en.wikipedia.org/wiki/Pyramid_(geometry)\n\n    :return: :math:`\\frac{1}{3} \\cdot B \\cdot h`\n\n    >>> vol_pyramid(10, 3)\n    10.0\n    >>> vol_pyramid(1.5, 3)\n    1.5\n    >>> vol_pyramid(1.6, 1.6)\n    0.8533333333333335\n    >>> vol_pyramid(0, 0)\n    0.0\n    >>> vol_pyramid(-1, 1)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_pyramid() only accepts non-negative values\n    >>> vol_pyramid(1, -1)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_pyramid() only accepts non-negative values\n    \"\"\"\n    if height < 0 or area_of_base < 0:\n        raise ValueError(\"vol_pyramid() only accepts non-negative values\")\n    return area_of_base * height / 3.0\n\n\ndef vol_sphere(radius: float) -> float:\n    r\"\"\"\n    | Calculate the Volume of a Sphere.\n    | Wikipedia reference: https://en.wikipedia.org/wiki/Sphere\n\n    :return: :math:`\\frac{4}{3} \\cdot \\pi \\cdot r^3`\n\n    >>> vol_sphere(5)\n    523.5987755982989\n    >>> vol_sphere(1)\n    4.1887902047863905\n    >>> vol_sphere(1.6)\n    17.15728467880506\n    >>> vol_sphere(0)\n    0.0\n    >>> vol_sphere(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_sphere() only accepts non-negative values\n    \"\"\"\n    if radius < 0:\n        raise ValueError(\"vol_sphere() only accepts non-negative values\")\n    # Volume is 4/3 * pi * radius cubed\n    return 4 / 3 * pi * pow(radius, 3)\n\n\ndef vol_hemisphere(radius: float) -> float:\n    r\"\"\"\n    | Calculate the volume of a hemisphere\n    | Wikipedia reference: https://en.wikipedia.org/wiki/Hemisphere\n    | Other references: https://www.cuemath.com/geometry/hemisphere\n\n    :return: :math:`\\frac{2}{3} \\cdot \\pi \\cdot radius^3`\n\n    >>> vol_hemisphere(1)\n    2.0943951023931953\n    >>> vol_hemisphere(7)\n    718.377520120866\n    >>> vol_hemisphere(1.6)\n    8.57864233940253\n    >>> vol_hemisphere(0)\n    0.0\n    >>> vol_hemisphere(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_hemisphere() only accepts non-negative values\n    \"\"\"\n    if radius < 0:\n        raise ValueError(\"vol_hemisphere() only accepts non-negative values\")\n    # Volume is radius cubed * pi * 2/3\n    return pow(radius, 3) * pi * 2 / 3\n\n\ndef vol_circular_cylinder(radius: float, height: float) -> float:\n    r\"\"\"\n    | Calculate the Volume of a Circular Cylinder.\n    | Wikipedia reference: https://en.wikipedia.org/wiki/Cylinder\n\n    :return: :math:`\\pi \\cdot radius^2 \\cdot height`\n\n    >>> vol_circular_cylinder(1, 1)\n    3.141592653589793\n    >>> vol_circular_cylinder(4, 3)\n    150.79644737231007\n    >>> vol_circular_cylinder(1.6, 1.6)\n    12.867963509103795\n    >>> vol_circular_cylinder(0, 0)\n    0.0\n    >>> vol_circular_cylinder(-1, 1)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_circular_cylinder() only accepts non-negative values\n    >>> vol_circular_cylinder(1, -1)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_circular_cylinder() only accepts non-negative values\n    \"\"\"\n    if height < 0 or radius < 0:\n        raise ValueError(\"vol_circular_cylinder() only accepts non-negative values\")\n    # Volume is radius squared * height * pi\n    return pow(radius, 2) * height * pi\n\n\ndef vol_hollow_circular_cylinder(\n    inner_radius: float, outer_radius: float, height: float\n) -> float:\n    \"\"\"\n    Calculate the Volume of a Hollow Circular Cylinder.\n\n    >>> vol_hollow_circular_cylinder(1, 2, 3)\n    28.274333882308138\n    >>> vol_hollow_circular_cylinder(1.6, 2.6, 3.6)\n    47.50088092227767\n    >>> vol_hollow_circular_cylinder(-1, 2, 3)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_hollow_circular_cylinder() only accepts non-negative values\n    >>> vol_hollow_circular_cylinder(1, -2, 3)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_hollow_circular_cylinder() only accepts non-negative values\n    >>> vol_hollow_circular_cylinder(1, 2, -3)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_hollow_circular_cylinder() only accepts non-negative values\n    >>> vol_hollow_circular_cylinder(2, 1, 3)\n    Traceback (most recent call last):\n        ...\n    ValueError: outer_radius must be greater than inner_radius\n    >>> vol_hollow_circular_cylinder(0, 0, 0)\n    Traceback (most recent call last):\n        ...\n    ValueError: outer_radius must be greater than inner_radius\n    \"\"\"\n    # Volume - (outer_radius squared - inner_radius squared) * pi * height\n    if inner_radius < 0 or outer_radius < 0 or height < 0:\n        raise ValueError(\n            \"vol_hollow_circular_cylinder() only accepts non-negative values\"\n        )\n    if outer_radius <= inner_radius:\n        raise ValueError(\"outer_radius must be greater than inner_radius\")\n    return pi * (pow(outer_radius, 2) - pow(inner_radius, 2)) * height\n\n\ndef vol_conical_frustum(height: float, radius_1: float, radius_2: float) -> float:\n    \"\"\"\n    | Calculate the Volume of a Conical Frustum.\n    | Wikipedia reference: https://en.wikipedia.org/wiki/Frustum\n\n    >>> vol_conical_frustum(45, 7, 28)\n    48490.482608158454\n    >>> vol_conical_frustum(1, 1, 2)\n    7.330382858376184\n    >>> vol_conical_frustum(1.6, 2.6, 3.6)\n    48.7240076620753\n    >>> vol_conical_frustum(0, 0, 0)\n    0.0\n    >>> vol_conical_frustum(-2, 2, 1)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_conical_frustum() only accepts non-negative values\n    >>> vol_conical_frustum(2, -2, 1)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_conical_frustum() only accepts non-negative values\n    >>> vol_conical_frustum(2, 2, -1)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_conical_frustum() only accepts non-negative values\n    \"\"\"\n    # Volume is 1/3 * pi * height *\n    #           (radius_1 squared + radius_2 squared + radius_1 * radius_2)\n    if radius_1 < 0 or radius_2 < 0 or height < 0:\n        raise ValueError(\"vol_conical_frustum() only accepts non-negative values\")\n    return (\n        1\n        / 3\n        * pi\n        * height\n        * (pow(radius_1, 2) + pow(radius_2, 2) + radius_1 * radius_2)\n    )\n\n\ndef vol_torus(torus_radius: float, tube_radius: float) -> float:\n    r\"\"\"\n    | Calculate the Volume of a Torus.\n    | Wikipedia reference: https://en.wikipedia.org/wiki/Torus\n\n    :return: :math:`2 \\pi^2 \\cdot torus\\_radius \\cdot tube\\_radius^2`\n\n    >>> vol_torus(1, 1)\n    19.739208802178716\n    >>> vol_torus(4, 3)\n    710.6115168784338\n    >>> vol_torus(3, 4)\n    947.4820225045784\n    >>> vol_torus(1.6, 1.6)\n    80.85179925372404\n    >>> vol_torus(0, 0)\n    0.0\n    >>> vol_torus(-1, 1)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_torus() only accepts non-negative values\n    >>> vol_torus(1, -1)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_torus() only accepts non-negative values\n    \"\"\"\n    if torus_radius < 0 or tube_radius < 0:\n        raise ValueError(\"vol_torus() only accepts non-negative values\")\n    return 2 * pow(pi, 2) * torus_radius * pow(tube_radius, 2)\n\n\ndef vol_icosahedron(tri_side: float) -> float:\n    \"\"\"\n    | Calculate the Volume of an Icosahedron.\n    | Wikipedia reference: https://en.wikipedia.org/wiki/Regular_icosahedron\n\n    >>> from math import isclose\n    >>> isclose(vol_icosahedron(2.5), 34.088984228514256)\n    True\n    >>> isclose(vol_icosahedron(10), 2181.694990624912374)\n    True\n    >>> isclose(vol_icosahedron(5), 272.711873828114047)\n    True\n    >>> isclose(vol_icosahedron(3.49), 92.740688412033628)\n    True\n    >>> vol_icosahedron(0)\n    0.0\n    >>> vol_icosahedron(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_icosahedron() only accepts non-negative values\n    >>> vol_icosahedron(-0.2)\n    Traceback (most recent call last):\n        ...\n    ValueError: vol_icosahedron() only accepts non-negative values\n    \"\"\"\n    if tri_side < 0:\n        raise ValueError(\"vol_icosahedron() only accepts non-negative values\")\n    return tri_side**3 * (3 + 5**0.5) * 5 / 12\n\n\ndef main():\n    \"\"\"Print the Results of Various Volume Calculations.\"\"\"\n    print(\"Volumes:\")\n    print(f\"Cube: {vol_cube(2) = }\")  # = 8\n    print(f\"Cuboid: {vol_cuboid(2, 2, 2) = }\")  # = 8\n    print(f\"Cone: {vol_cone(2, 2) = }\")  # ~= 1.33\n    print(f\"Right Circular Cone: {vol_right_circ_cone(2, 2) = }\")  # ~= 8.38\n    print(f\"Prism: {vol_prism(2, 2) = }\")  # = 4\n    print(f\"Pyramid: {vol_pyramid(2, 2) = }\")  # ~= 1.33\n    print(f\"Sphere: {vol_sphere(2) = }\")  # ~= 33.5\n    print(f\"Hemisphere: {vol_hemisphere(2) = }\")  # ~= 16.75\n    print(f\"Circular Cylinder: {vol_circular_cylinder(2, 2) = }\")  # ~= 25.1\n    print(f\"Torus: {vol_torus(2, 2) = }\")  # ~= 157.9\n    print(f\"Conical Frustum: {vol_conical_frustum(2, 2, 4) = }\")  # ~= 58.6\n    print(f\"Spherical cap: {vol_spherical_cap(1, 2) = }\")  # ~= 5.24\n    print(f\"Spheres intersection: {vol_spheres_intersect(2, 2, 1) = }\")  # ~= 21.21\n    print(f\"Spheres union: {vol_spheres_union(2, 2, 1) = }\")  # ~= 45.81\n    print(\n        f\"Hollow Circular Cylinder: {vol_hollow_circular_cylinder(1, 2, 3) = }\"\n    )  # ~= 28.3\n    print(f\"Icosahedron: {vol_icosahedron(2.5) = }\")  # ~=34.09\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "maths/zellers_congruence.py",
    "content": "import argparse\nimport datetime\n\n\ndef zeller(date_input: str) -> str:\n    \"\"\"\n    | Zellers Congruence Algorithm\n    | Find the day of the week for nearly any Gregorian or Julian calendar date\n\n    >>> zeller('01-31-2010')\n    'Your date 01-31-2010, is a Sunday!'\n\n    Validate out of range month:\n\n    >>> zeller('13-31-2010')\n    Traceback (most recent call last):\n        ...\n    ValueError: Month must be between 1 - 12\n    >>> zeller('.2-31-2010')\n    Traceback (most recent call last):\n        ...\n    ValueError: invalid literal for int() with base 10: '.2'\n\n    Validate out of range date:\n\n    >>> zeller('01-33-2010')\n    Traceback (most recent call last):\n        ...\n    ValueError: Date must be between 1 - 31\n    >>> zeller('01-.4-2010')\n    Traceback (most recent call last):\n        ...\n    ValueError: invalid literal for int() with base 10: '.4'\n\n    Validate second separator:\n\n    >>> zeller('01-31*2010')\n    Traceback (most recent call last):\n        ...\n    ValueError: Date separator must be '-' or '/'\n\n    Validate first separator:\n\n    >>> zeller('01^31-2010')\n    Traceback (most recent call last):\n        ...\n    ValueError: Date separator must be '-' or '/'\n\n    Validate out of range year:\n\n    >>> zeller('01-31-8999')\n    Traceback (most recent call last):\n        ...\n    ValueError: Year out of range. There has to be some sort of limit...right?\n\n    Test null input:\n\n    >>> zeller()\n    Traceback (most recent call last):\n        ...\n    TypeError: zeller() missing 1 required positional argument: 'date_input'\n\n    Test length of `date_input`:\n\n    >>> zeller('')\n    Traceback (most recent call last):\n        ...\n    ValueError: Must be 10 characters long\n    >>> zeller('01-31-19082939')\n    Traceback (most recent call last):\n        ...\n    ValueError: Must be 10 characters long\"\"\"\n\n    # Days of the week for response\n    days = {\n        \"0\": \"Sunday\",\n        \"1\": \"Monday\",\n        \"2\": \"Tuesday\",\n        \"3\": \"Wednesday\",\n        \"4\": \"Thursday\",\n        \"5\": \"Friday\",\n        \"6\": \"Saturday\",\n    }\n\n    convert_datetime_days = {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 0}\n\n    # Validate\n    if not 0 < len(date_input) < 11:\n        raise ValueError(\"Must be 10 characters long\")\n\n    # Get month\n    m: int = int(date_input[0] + date_input[1])\n    # Validate\n    if not 0 < m < 13:\n        raise ValueError(\"Month must be between 1 - 12\")\n\n    sep_1: str = date_input[2]\n    # Validate\n    if sep_1 not in [\"-\", \"/\"]:\n        raise ValueError(\"Date separator must be '-' or '/'\")\n\n    # Get day\n    d: int = int(date_input[3] + date_input[4])\n    # Validate\n    if not 0 < d < 32:\n        raise ValueError(\"Date must be between 1 - 31\")\n\n    # Get second separator\n    sep_2: str = date_input[5]\n    # Validate\n    if sep_2 not in [\"-\", \"/\"]:\n        raise ValueError(\"Date separator must be '-' or '/'\")\n\n    # Get year\n    y: int = int(date_input[6] + date_input[7] + date_input[8] + date_input[9])\n    # Arbitrary year range\n    if not 45 < y < 8500:\n        raise ValueError(\n            \"Year out of range. There has to be some sort of limit...right?\"\n        )\n\n    # Get datetime obj for validation\n    dt_ck = datetime.date(int(y), int(m), int(d))\n\n    # Start math\n    if m <= 2:\n        y = y - 1\n        m = m + 12\n    # maths var\n    c: int = int(str(y)[:2])\n    k: int = int(str(y)[2:])\n    t: int = int(2.6 * m - 5.39)\n    u: int = int(c / 4)\n    v: int = int(k / 4)\n    x: int = int(d + k)\n    z: int = int(t + u + v + x)\n    w: int = int(z - (2 * c))\n    f: int = round(w % 7)\n    # End math\n\n    # Validate math\n    if f != convert_datetime_days[dt_ck.weekday()]:\n        raise AssertionError(\"The date was evaluated incorrectly. Contact developer.\")\n\n    # Response\n    response: str = f\"Your date {date_input}, is a {days[str(f)]}!\"\n    return response\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    parser = argparse.ArgumentParser(\n        description=(\n            \"Find out what day of the week nearly any date is or was. Enter \"\n            \"date as a string in the mm-dd-yyyy or mm/dd/yyyy format\"\n        )\n    )\n    parser.add_argument(\n        \"date_input\", type=str, help=\"Date as a string (mm-dd-yyyy or mm/dd/yyyy)\"\n    )\n    args = parser.parse_args()\n    zeller(args.date_input)\n"
  },
  {
    "path": "matrix/__init__.py",
    "content": ""
  },
  {
    "path": "matrix/binary_search_matrix.py",
    "content": "def binary_search(array: list, lower_bound: int, upper_bound: int, value: int) -> int:\n    \"\"\"\n    This function carries out Binary search on a 1d array and\n    return -1 if it do not exist\n    array: A 1d sorted array\n    value : the value meant to be searched\n    >>> matrix = [1, 4, 7, 11, 15]\n    >>> binary_search(matrix, 0, len(matrix) - 1, 1)\n    0\n    >>> binary_search(matrix, 0, len(matrix) - 1, 23)\n    -1\n    \"\"\"\n\n    r = int((lower_bound + upper_bound) // 2)\n    if array[r] == value:\n        return r\n    if lower_bound >= upper_bound:\n        return -1\n    if array[r] < value:\n        return binary_search(array, r + 1, upper_bound, value)\n    else:\n        return binary_search(array, lower_bound, r - 1, value)\n\n\ndef mat_bin_search(value: int, matrix: list) -> list:\n    \"\"\"\n    This function loops over a 2d matrix and calls binarySearch on\n    the selected 1d array and returns [-1, -1] is it do not exist\n    value : value meant to be searched\n    matrix = a sorted 2d matrix\n    >>> matrix = [[1, 4, 7, 11, 15],\n    ...           [2, 5, 8, 12, 19],\n    ...           [3, 6, 9, 16, 22],\n    ...           [10, 13, 14, 17, 24],\n    ...           [18, 21, 23, 26, 30]]\n    >>> target = 1\n    >>> mat_bin_search(target, matrix)\n    [0, 0]\n    >>> target = 34\n    >>> mat_bin_search(target, matrix)\n    [-1, -1]\n    \"\"\"\n    index = 0\n    if matrix[index][0] == value:\n        return [index, 0]\n    while index < len(matrix) and matrix[index][0] < value:\n        r = binary_search(matrix[index], 0, len(matrix[index]) - 1, value)\n        if r != -1:\n            return [index, r]\n        index += 1\n    return [-1, -1]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "matrix/count_islands_in_matrix.py",
    "content": "# An island in matrix is a group of linked areas, all having the same value.\n# This code counts number of islands in a given matrix, with including diagonal\n# connections.\n\n\nclass Matrix:  # Public class to implement a graph\n    def __init__(self, row: int, col: int, graph: list[list[bool]]) -> None:\n        self.ROW = row\n        self.COL = col\n        self.graph = graph\n\n    def is_safe(self, i: int, j: int, visited: list[list[bool]]) -> bool:\n        return (\n            0 <= i < self.ROW\n            and 0 <= j < self.COL\n            and not visited[i][j]\n            and self.graph[i][j]\n        )\n\n    def diffs(self, i: int, j: int, visited: list[list[bool]]) -> None:\n        # Checking all 8 elements surrounding nth element\n        row_nbr = [-1, -1, -1, 0, 0, 1, 1, 1]  # Coordinate order\n        col_nbr = [-1, 0, 1, -1, 1, -1, 0, 1]\n        visited[i][j] = True  # Make those cells visited\n        for k in range(8):\n            if self.is_safe(i + row_nbr[k], j + col_nbr[k], visited):\n                self.diffs(i + row_nbr[k], j + col_nbr[k], visited)\n\n    def count_islands(self) -> int:  # And finally, count all islands.\n        visited = [[False for j in range(self.COL)] for i in range(self.ROW)]\n        count = 0\n        for i in range(self.ROW):\n            for j in range(self.COL):\n                if visited[i][j] is False and self.graph[i][j] == 1:\n                    self.diffs(i, j, visited)\n                    count += 1\n        return count\n"
  },
  {
    "path": "matrix/count_negative_numbers_in_sorted_matrix.py",
    "content": "\"\"\"\nGiven an matrix of numbers in which all rows and all columns are sorted in decreasing\norder, return the number of negative numbers in grid.\n\nReference: https://leetcode.com/problems/count-negative-numbers-in-a-sorted-matrix\n\"\"\"\n\n\ndef generate_large_matrix() -> list[list[int]]:\n    \"\"\"\n    >>> generate_large_matrix() # doctest: +ELLIPSIS\n    [[1000, ..., -999], [999, ..., -1001], ..., [2, ..., -1998]]\n    \"\"\"\n    return [list(range(1000 - i, -1000 - i, -1)) for i in range(1000)]\n\n\ngrid = generate_large_matrix()\ntest_grids = (\n    [[4, 3, 2, -1], [3, 2, 1, -1], [1, 1, -1, -2], [-1, -1, -2, -3]],\n    [[3, 2], [1, 0]],\n    [[7, 7, 6]],\n    [[7, 7, 6], [-1, -2, -3]],\n    grid,\n)\n\n\ndef validate_grid(grid: list[list[int]]) -> None:\n    \"\"\"\n    Validate that the rows and columns of the grid is sorted in decreasing order.\n    >>> for grid in test_grids:\n    ...     validate_grid(grid)\n    \"\"\"\n    assert all(row == sorted(row, reverse=True) for row in grid)\n    assert all(list(col) == sorted(col, reverse=True) for col in zip(*grid))\n\n\ndef find_negative_index(array: list[int]) -> int:\n    \"\"\"\n    Find the smallest negative index\n\n    >>> find_negative_index([0,0,0,0])\n    4\n    >>> find_negative_index([4,3,2,-1])\n    3\n    >>> find_negative_index([1,0,-1,-10])\n    2\n    >>> find_negative_index([0,0,0,-1])\n    3\n    >>> find_negative_index([11,8,7,-3,-5,-9])\n    3\n    >>> find_negative_index([-1,-1,-2,-3])\n    0\n    >>> find_negative_index([5,1,0])\n    3\n    >>> find_negative_index([-5,-5,-5])\n    0\n    >>> find_negative_index([0])\n    1\n    >>> find_negative_index([])\n    0\n    \"\"\"\n    left = 0\n    right = len(array) - 1\n\n    # Edge cases such as no values or all numbers are negative.\n    if not array or array[0] < 0:\n        return 0\n\n    while right + 1 > left:\n        mid = (left + right) // 2\n        num = array[mid]\n\n        # Num must be negative and the index must be greater than or equal to 0.\n        if num < 0 and array[mid - 1] >= 0:\n            return mid\n\n        if num >= 0:\n            left = mid + 1\n        else:\n            right = mid - 1\n    # No negative numbers so return the last index of the array + 1 which is the length.\n    return len(array)\n\n\ndef count_negatives_binary_search(grid: list[list[int]]) -> int:\n    \"\"\"\n    An O(m logn) solution that uses binary search in order to find the boundary between\n    positive and negative numbers\n\n    >>> [count_negatives_binary_search(grid) for grid in test_grids]\n    [8, 0, 0, 3, 1498500]\n    \"\"\"\n    total = 0\n    bound = len(grid[0])\n\n    for i in range(len(grid)):\n        bound = find_negative_index(grid[i][:bound])\n        total += bound\n    return (len(grid) * len(grid[0])) - total\n\n\ndef count_negatives_brute_force(grid: list[list[int]]) -> int:\n    \"\"\"\n    This solution is O(n^2) because it iterates through every column and row.\n\n    >>> [count_negatives_brute_force(grid) for grid in test_grids]\n    [8, 0, 0, 3, 1498500]\n    \"\"\"\n    return len([number for row in grid for number in row if number < 0])\n\n\ndef count_negatives_brute_force_with_break(grid: list[list[int]]) -> int:\n    \"\"\"\n    Similar to the brute force solution above but uses break in order to reduce the\n    number of iterations.\n\n    >>> [count_negatives_brute_force_with_break(grid) for grid in test_grids]\n    [8, 0, 0, 3, 1498500]\n    \"\"\"\n    total = 0\n    for row in grid:\n        for i, number in enumerate(row):\n            if number < 0:\n                total += len(row) - i\n                break\n    return total\n\n\ndef benchmark() -> None:\n    \"\"\"Benchmark our functions next to each other\"\"\"\n    from timeit import timeit\n\n    print(\"Running benchmarks\")\n    setup = (\n        \"from __main__ import count_negatives_binary_search, \"\n        \"count_negatives_brute_force, count_negatives_brute_force_with_break, grid\"\n    )\n    for func in (\n        \"count_negatives_binary_search\",  # took 0.7727 seconds\n        \"count_negatives_brute_force_with_break\",  # took 4.6505 seconds\n        \"count_negatives_brute_force\",  # took 12.8160 seconds\n    ):\n        time = timeit(f\"{func}(grid=grid)\", setup=setup, number=500)\n        print(f\"{func}() took {time:0.4f} seconds\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    benchmark()\n"
  },
  {
    "path": "matrix/count_paths.py",
    "content": "\"\"\"\nGiven a grid, where you start from the top left position [0, 0],\nyou want to find how many paths you can take to get to the bottom right position.\n\nstart here  ->   0  0  0  0\n                 1  1  0  0\n                 0  0  0  1\n                 0  1  0  0  <- finish here\nhow many 'distinct' paths can you take to get to the finish?\nUsing a recursive depth-first search algorithm below, you are able to\nfind the number of distinct unique paths (count).\n\n'*' will demonstrate a path\nIn the example above, there are two distinct paths:\n1.                2.\n    *  *  *  0      *  *  *  *\n    1  1  *  0      1  1  *  *\n    0  0  *  1      0  0  *  1\n    0  1  *  *      0  1  *  *\n\"\"\"\n\n\ndef depth_first_search(grid: list[list[int]], row: int, col: int, visit: set) -> int:\n    \"\"\"\n    Recursive Backtracking Depth First Search Algorithm\n\n    Starting from top left of a matrix, count the number of\n    paths that can reach the bottom right of a matrix.\n    1 represents a block (inaccessible)\n    0 represents a valid space (accessible)\n\n    0  0  0  0\n    1  1  0  0\n    0  0  0  1\n    0  1  0  0\n    >>> grid = [[0, 0, 0, 0], [1, 1, 0, 0], [0, 0, 0, 1], [0, 1, 0, 0]]\n    >>> depth_first_search(grid, 0, 0, set())\n    2\n\n    0  0  0  0  0\n    0  1  1  1  0\n    0  1  1  1  0\n    0  0  0  0  0\n    >>> grid = [[0, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 0]]\n    >>> depth_first_search(grid, 0, 0, set())\n    2\n    \"\"\"\n    row_length, col_length = len(grid), len(grid[0])\n    if (\n        min(row, col) < 0\n        or row == row_length\n        or col == col_length\n        or (row, col) in visit\n        or grid[row][col] == 1\n    ):\n        return 0\n    if row == row_length - 1 and col == col_length - 1:\n        return 1\n\n    visit.add((row, col))\n\n    count = 0\n    count += depth_first_search(grid, row + 1, col, visit)\n    count += depth_first_search(grid, row - 1, col, visit)\n    count += depth_first_search(grid, row, col + 1, visit)\n    count += depth_first_search(grid, row, col - 1, visit)\n\n    visit.remove((row, col))\n    return count\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "matrix/cramers_rule_2x2.py",
    "content": "# https://www.chilimath.com/lessons/advanced-algebra/cramers-rule-with-two-variables\n# https://en.wikipedia.org/wiki/Cramer%27s_rule\n\n\ndef cramers_rule_2x2(equation1: list[int], equation2: list[int]) -> tuple[float, float]:\n    \"\"\"\n    Solves the system of linear equation in 2 variables.\n    :param: equation1: list of 3 numbers\n    :param: equation2: list of 3 numbers\n    :return: String of result\n    input format : [a1, b1, d1], [a2, b2, d2]\n    determinant = [[a1, b1], [a2, b2]]\n    determinant_x = [[d1, b1], [d2, b2]]\n    determinant_y = [[a1, d1], [a2, d2]]\n\n    >>> cramers_rule_2x2([2, 3, 0], [5, 1, 0])\n    (0.0, 0.0)\n    >>> cramers_rule_2x2([0, 4, 50], [2, 0, 26])\n    (13.0, 12.5)\n    >>> cramers_rule_2x2([11, 2, 30], [1, 0, 4])\n    (4.0, -7.0)\n    >>> cramers_rule_2x2([4, 7, 1], [1, 2, 0])\n    (2.0, -1.0)\n\n    >>> cramers_rule_2x2([1, 2, 3], [2, 4, 6])\n    Traceback (most recent call last):\n        ...\n    ValueError: Infinite solutions. (Consistent system)\n    >>> cramers_rule_2x2([1, 2, 3], [2, 4, 7])\n    Traceback (most recent call last):\n        ...\n    ValueError: No solution. (Inconsistent system)\n    >>> cramers_rule_2x2([1, 2, 3], [11, 22])\n    Traceback (most recent call last):\n        ...\n    ValueError: Please enter a valid equation.\n    >>> cramers_rule_2x2([0, 1, 6], [0, 0, 3])\n    Traceback (most recent call last):\n        ...\n    ValueError: No solution. (Inconsistent system)\n    >>> cramers_rule_2x2([0, 0, 6], [0, 0, 3])\n    Traceback (most recent call last):\n        ...\n    ValueError: Both a & b of two equations can't be zero.\n    >>> cramers_rule_2x2([1, 2, 3], [1, 2, 3])\n    Traceback (most recent call last):\n        ...\n    ValueError: Infinite solutions. (Consistent system)\n    >>> cramers_rule_2x2([0, 4, 50], [0, 3, 99])\n    Traceback (most recent call last):\n        ...\n    ValueError: No solution. (Inconsistent system)\n    \"\"\"\n\n    # Check if the input is valid\n    if not len(equation1) == len(equation2) == 3:\n        raise ValueError(\"Please enter a valid equation.\")\n    if equation1[0] == equation1[1] == equation2[0] == equation2[1] == 0:\n        raise ValueError(\"Both a & b of two equations can't be zero.\")\n\n    # Extract the coefficients\n    a1, b1, c1 = equation1\n    a2, b2, c2 = equation2\n\n    # Calculate the determinants of the matrices\n    determinant = a1 * b2 - a2 * b1\n    determinant_x = c1 * b2 - c2 * b1\n    determinant_y = a1 * c2 - a2 * c1\n\n    # Check if the system of linear equations has a solution (using Cramer's rule)\n    if determinant == 0:\n        if determinant_x == determinant_y == 0:\n            raise ValueError(\"Infinite solutions. (Consistent system)\")\n        else:\n            raise ValueError(\"No solution. (Inconsistent system)\")\n    elif determinant_x == determinant_y == 0:\n        # Trivial solution (Inconsistent system)\n        return (0.0, 0.0)\n    else:\n        x = determinant_x / determinant\n        y = determinant_y / determinant\n        # Non-Trivial Solution (Consistent system)\n        return (x, y)\n"
  },
  {
    "path": "matrix/inverse_of_matrix.py",
    "content": "from __future__ import annotations\r\n\r\nfrom decimal import Decimal\r\n\r\nfrom numpy import array\r\n\r\n\r\ndef inverse_of_matrix(matrix: list[list[float]]) -> list[list[float]]:\r\n    \"\"\"\r\n    A matrix multiplied with its inverse gives the identity matrix.\r\n    This function finds the inverse of a 2x2 and 3x3 matrix.\r\n    If the determinant of a matrix is 0, its inverse does not exist.\r\n\r\n    Sources for fixing inaccurate float arithmetic:\r\n    https://stackoverflow.com/questions/6563058/how-do-i-use-accurate-float-arithmetic-in-python\r\n    https://docs.python.org/3/library/decimal.html\r\n\r\n    Doctests for 2x2\r\n    >>> inverse_of_matrix([[2, 5], [2, 0]])\r\n    [[0.0, 0.5], [0.2, -0.2]]\r\n    >>> inverse_of_matrix([[2.5, 5], [1, 2]])\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: This matrix has no inverse.\r\n    >>> inverse_of_matrix([[12, -16], [-9, 0]])\r\n    [[0.0, -0.1111111111111111], [-0.0625, -0.08333333333333333]]\r\n    >>> inverse_of_matrix([[12, 3], [16, 8]])\r\n    [[0.16666666666666666, -0.0625], [-0.3333333333333333, 0.25]]\r\n    >>> inverse_of_matrix([[10, 5], [3, 2.5]])\r\n    [[0.25, -0.5], [-0.3, 1.0]]\r\n\r\n    Doctests for 3x3\r\n    >>> inverse_of_matrix([[2, 5, 7], [2, 0, 1], [1, 2, 3]])\r\n    [[2.0, 5.0, -4.0], [1.0, 1.0, -1.0], [-5.0, -12.0, 10.0]]\r\n    >>> inverse_of_matrix([[1, 2, 2], [1, 2, 2], [3, 2, -1]])\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: This matrix has no inverse.\r\n\r\n    >>> inverse_of_matrix([[],[]])\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Please provide a matrix of size 2x2 or 3x3.\r\n\r\n    >>> inverse_of_matrix([[1, 2], [3, 4], [5, 6]])\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Please provide a matrix of size 2x2 or 3x3.\r\n\r\n    >>> inverse_of_matrix([[1, 2, 1], [0,3, 4]])\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Please provide a matrix of size 2x2 or 3x3.\r\n\r\n    >>> inverse_of_matrix([[1, 2, 3], [7, 8, 9], [7, 8, 9]])\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: This matrix has no inverse.\r\n\r\n    >>> inverse_of_matrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]])\r\n    [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]]\r\n    \"\"\"\r\n\r\n    d = Decimal\r\n\r\n    # Check if the provided matrix has 2 rows and 2 columns\r\n    # since this implementation only works for 2x2 matrices\r\n    if len(matrix) == 2 and len(matrix[0]) == 2 and len(matrix[1]) == 2:\r\n        # Calculate the determinant of the matrix\r\n        determinant = float(\r\n            d(matrix[0][0]) * d(matrix[1][1]) - d(matrix[1][0]) * d(matrix[0][1])\r\n        )\r\n        if determinant == 0:\r\n            raise ValueError(\"This matrix has no inverse.\")\r\n\r\n        # Creates a copy of the matrix with swapped positions of the elements\r\n        swapped_matrix = [[0.0, 0.0], [0.0, 0.0]]\r\n        swapped_matrix[0][0], swapped_matrix[1][1] = matrix[1][1], matrix[0][0]\r\n        swapped_matrix[1][0], swapped_matrix[0][1] = -matrix[1][0], -matrix[0][1]\r\n\r\n        # Calculate the inverse of the matrix\r\n        return [\r\n            [(float(d(n)) / determinant) or 0.0 for n in row] for row in swapped_matrix\r\n        ]\r\n    elif (\r\n        len(matrix) == 3\r\n        and len(matrix[0]) == 3\r\n        and len(matrix[1]) == 3\r\n        and len(matrix[2]) == 3\r\n    ):\r\n        # Calculate the determinant of the matrix using Sarrus rule\r\n        determinant = float(\r\n            (\r\n                (d(matrix[0][0]) * d(matrix[1][1]) * d(matrix[2][2]))\r\n                + (d(matrix[0][1]) * d(matrix[1][2]) * d(matrix[2][0]))\r\n                + (d(matrix[0][2]) * d(matrix[1][0]) * d(matrix[2][1]))\r\n            )\r\n            - (\r\n                (d(matrix[0][2]) * d(matrix[1][1]) * d(matrix[2][0]))\r\n                + (d(matrix[0][1]) * d(matrix[1][0]) * d(matrix[2][2]))\r\n                + (d(matrix[0][0]) * d(matrix[1][2]) * d(matrix[2][1]))\r\n            )\r\n        )\r\n        if determinant == 0:\r\n            raise ValueError(\"This matrix has no inverse.\")\r\n\r\n        # Creating cofactor matrix\r\n        cofactor_matrix = [\r\n            [d(0.0), d(0.0), d(0.0)],\r\n            [d(0.0), d(0.0), d(0.0)],\r\n            [d(0.0), d(0.0), d(0.0)],\r\n        ]\r\n        cofactor_matrix[0][0] = (d(matrix[1][1]) * d(matrix[2][2])) - (\r\n            d(matrix[1][2]) * d(matrix[2][1])\r\n        )\r\n        cofactor_matrix[0][1] = -(\r\n            (d(matrix[1][0]) * d(matrix[2][2])) - (d(matrix[1][2]) * d(matrix[2][0]))\r\n        )\r\n        cofactor_matrix[0][2] = (d(matrix[1][0]) * d(matrix[2][1])) - (\r\n            d(matrix[1][1]) * d(matrix[2][0])\r\n        )\r\n        cofactor_matrix[1][0] = -(\r\n            (d(matrix[0][1]) * d(matrix[2][2])) - (d(matrix[0][2]) * d(matrix[2][1]))\r\n        )\r\n        cofactor_matrix[1][1] = (d(matrix[0][0]) * d(matrix[2][2])) - (\r\n            d(matrix[0][2]) * d(matrix[2][0])\r\n        )\r\n        cofactor_matrix[1][2] = -(\r\n            (d(matrix[0][0]) * d(matrix[2][1])) - (d(matrix[0][1]) * d(matrix[2][0]))\r\n        )\r\n        cofactor_matrix[2][0] = (d(matrix[0][1]) * d(matrix[1][2])) - (\r\n            d(matrix[0][2]) * d(matrix[1][1])\r\n        )\r\n        cofactor_matrix[2][1] = -(\r\n            (d(matrix[0][0]) * d(matrix[1][2])) - (d(matrix[0][2]) * d(matrix[1][0]))\r\n        )\r\n        cofactor_matrix[2][2] = (d(matrix[0][0]) * d(matrix[1][1])) - (\r\n            d(matrix[0][1]) * d(matrix[1][0])\r\n        )\r\n\r\n        # Transpose the cofactor matrix (Adjoint matrix)\r\n        adjoint_matrix = array(cofactor_matrix)\r\n        for i in range(3):\r\n            for j in range(3):\r\n                adjoint_matrix[i][j] = cofactor_matrix[j][i]\r\n\r\n        # Inverse of the matrix using the formula (1/determinant) * adjoint matrix\r\n        inverse_matrix = array(cofactor_matrix)\r\n        for i in range(3):\r\n            for j in range(3):\r\n                inverse_matrix[i][j] /= d(determinant)\r\n\r\n        # Calculate the inverse of the matrix\r\n        return [[float(d(n)) or 0.0 for n in row] for row in inverse_matrix]\r\n    raise ValueError(\"Please provide a matrix of size 2x2 or 3x3.\")\r\n"
  },
  {
    "path": "matrix/largest_square_area_in_matrix.py",
    "content": "\"\"\"\nQuestion:\nGiven a binary matrix mat of size n * m, find out the maximum size square\nsub-matrix with all 1s.\n\n---\nExample 1:\n\nInput:\nn = 2, m = 2\nmat = [[1, 1],\n       [1, 1]]\n\nOutput:\n2\n\nExplanation: The maximum size of the square\nsub-matrix is 2. The matrix itself is the\nmaximum sized sub-matrix in this case.\n---\nExample 2\n\nInput:\nn = 2, m = 2\nmat = [[0, 0],\n       [0, 0]]\nOutput: 0\n\nExplanation: There is no 1 in the matrix.\n\n\nApproach:\nWe initialize another matrix (dp) with the same dimensions\nas the original one initialized with all 0's.\n\ndp_array(i,j) represents the side length of the maximum square whose\nbottom right corner is the cell with index (i,j) in the original matrix.\n\nStarting from index (0,0), for every 1 found in the original matrix,\nwe update the value of the current element as\n\ndp_array(i,j)=dp_array(dp(i-1,j),dp_array(i-1,j-1),dp_array(i,j-1)) + 1.\n\"\"\"\n\n\ndef largest_square_area_in_matrix_top_down_approch(\n    rows: int, cols: int, mat: list[list[int]]\n) -> int:\n    \"\"\"\n    Function updates the largest_square_area[0], if recursive call found\n    square with maximum area.\n\n    We aren't using dp_array here, so the time complexity would be exponential.\n\n    >>> largest_square_area_in_matrix_top_down_approch(2, 2, [[1,1], [1,1]])\n    2\n    >>> largest_square_area_in_matrix_top_down_approch(2, 2, [[0,0], [0,0]])\n    0\n    \"\"\"\n\n    def update_area_of_max_square(row: int, col: int) -> int:\n        # BASE CASE\n        if row >= rows or col >= cols:\n            return 0\n\n        right = update_area_of_max_square(row, col + 1)\n        diagonal = update_area_of_max_square(row + 1, col + 1)\n        down = update_area_of_max_square(row + 1, col)\n\n        if mat[row][col]:\n            sub_problem_sol = 1 + min([right, diagonal, down])\n            largest_square_area[0] = max(largest_square_area[0], sub_problem_sol)\n            return sub_problem_sol\n        else:\n            return 0\n\n    largest_square_area = [0]\n    update_area_of_max_square(0, 0)\n    return largest_square_area[0]\n\n\ndef largest_square_area_in_matrix_top_down_approch_with_dp(\n    rows: int, cols: int, mat: list[list[int]]\n) -> int:\n    \"\"\"\n    Function updates the largest_square_area[0], if recursive call found\n    square with maximum area.\n\n    We are using dp_array here, so the time complexity would be O(N^2).\n\n    >>> largest_square_area_in_matrix_top_down_approch_with_dp(2, 2, [[1,1], [1,1]])\n    2\n    >>> largest_square_area_in_matrix_top_down_approch_with_dp(2, 2, [[0,0], [0,0]])\n    0\n    \"\"\"\n\n    def update_area_of_max_square_using_dp_array(\n        row: int, col: int, dp_array: list[list[int]]\n    ) -> int:\n        if row >= rows or col >= cols:\n            return 0\n        if dp_array[row][col] != -1:\n            return dp_array[row][col]\n\n        right = update_area_of_max_square_using_dp_array(row, col + 1, dp_array)\n        diagonal = update_area_of_max_square_using_dp_array(row + 1, col + 1, dp_array)\n        down = update_area_of_max_square_using_dp_array(row + 1, col, dp_array)\n\n        if mat[row][col]:\n            sub_problem_sol = 1 + min([right, diagonal, down])\n            largest_square_area[0] = max(largest_square_area[0], sub_problem_sol)\n            dp_array[row][col] = sub_problem_sol\n            return sub_problem_sol\n        else:\n            return 0\n\n    largest_square_area = [0]\n    dp_array = [[-1] * cols for _ in range(rows)]\n    update_area_of_max_square_using_dp_array(0, 0, dp_array)\n\n    return largest_square_area[0]\n\n\ndef largest_square_area_in_matrix_bottom_up(\n    rows: int, cols: int, mat: list[list[int]]\n) -> int:\n    \"\"\"\n    Function updates the largest_square_area, using bottom up approach.\n\n    >>> largest_square_area_in_matrix_bottom_up(2, 2, [[1,1], [1,1]])\n    2\n    >>> largest_square_area_in_matrix_bottom_up(2, 2, [[0,0], [0,0]])\n    0\n\n    \"\"\"\n    dp_array = [[0] * (cols + 1) for _ in range(rows + 1)]\n    largest_square_area = 0\n    for row in range(rows - 1, -1, -1):\n        for col in range(cols - 1, -1, -1):\n            right = dp_array[row][col + 1]\n            diagonal = dp_array[row + 1][col + 1]\n            bottom = dp_array[row + 1][col]\n\n            if mat[row][col] == 1:\n                dp_array[row][col] = 1 + min(right, diagonal, bottom)\n                largest_square_area = max(dp_array[row][col], largest_square_area)\n            else:\n                dp_array[row][col] = 0\n\n    return largest_square_area\n\n\ndef largest_square_area_in_matrix_bottom_up_space_optimization(\n    rows: int, cols: int, mat: list[list[int]]\n) -> int:\n    \"\"\"\n    Function updates the largest_square_area, using bottom up\n    approach. with space optimization.\n\n    >>> largest_square_area_in_matrix_bottom_up_space_optimization(2, 2, [[1,1], [1,1]])\n    2\n    >>> largest_square_area_in_matrix_bottom_up_space_optimization(2, 2, [[0,0], [0,0]])\n    0\n    \"\"\"\n    current_row = [0] * (cols + 1)\n    next_row = [0] * (cols + 1)\n    largest_square_area = 0\n    for row in range(rows - 1, -1, -1):\n        for col in range(cols - 1, -1, -1):\n            right = current_row[col + 1]\n            diagonal = next_row[col + 1]\n            bottom = next_row[col]\n\n            if mat[row][col] == 1:\n                current_row[col] = 1 + min(right, diagonal, bottom)\n                largest_square_area = max(current_row[col], largest_square_area)\n            else:\n                current_row[col] = 0\n        next_row = current_row\n\n    return largest_square_area\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    print(largest_square_area_in_matrix_bottom_up(2, 2, [[1, 1], [1, 1]]))\n"
  },
  {
    "path": "matrix/matrix_based_game.py",
    "content": "\"\"\"\nMatrix-Based Game Script\n=========================\nThis script implements a matrix-based game where players interact with a grid of\nelements. The primary goals are to:\n- Identify connected elements of the same type from a selected position.\n- Remove those elements, adjust the matrix by simulating gravity, and reorganize empty\n  columns.\n- Calculate and display the score based on the number of elements removed in each move.\n\nFunctions:\n-----------\n1. `find_repeat`: Finds all connected elements of the same type.\n2. `increment_score`: Calculates the score for a given move.\n3. `move_x`: Simulates gravity in a column.\n4. `move_y`: Reorganizes the matrix by shifting columns leftward when a column becomes\n    empty.\n5. `play`: Executes a single move, updating the matrix and returning the score.\n\nInput Format:\n--------------\n1. Matrix size (`lines`): Integer specifying the size of the matrix (N x N).\n2. Matrix content (`matrix`): Rows of the matrix, each consisting of characters.\n3. Number of moves (`movs`): Integer indicating the number of moves.\n4. List of moves (`movements`): A comma-separated string of coordinates for each move.\n\n(0,0) position starts from first left column to last right, and below row to up row\n\n\nExample Input:\n---------------\n4\nRRBG\nRBBG\nYYGG\nXYGG\n2\n0 1,1 1\n\nExample (0,0) = X\n\nOutput:\n--------\nThe script outputs the total score after processing all moves.\n\nUsage:\n-------\nRun the script and provide the required inputs as prompted.\n\n\"\"\"\n\n\ndef validate_matrix_size(size: int) -> None:\n    \"\"\"\n    >>> validate_matrix_size(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Matrix size must be a positive integer.\n    \"\"\"\n    if not isinstance(size, int) or size <= 0:\n        raise ValueError(\"Matrix size must be a positive integer.\")\n\n\ndef validate_matrix_content(matrix: list[str], size: int) -> None:\n    \"\"\"\n    Validates that the number of elements in the matrix matches the given size.\n\n    >>> validate_matrix_content(['aaaa', 'aaaa', 'aaaa', 'aaaa'], 3)\n    Traceback (most recent call last):\n        ...\n    ValueError: The matrix dont match with size.\n    >>> validate_matrix_content(['aa%', 'aaa', 'aaa'], 3)\n    Traceback (most recent call last):\n        ...\n    ValueError: Matrix rows can only contain letters and numbers.\n    >>> validate_matrix_content(['aaa', 'aaa', 'aaaa'], 3)\n    Traceback (most recent call last):\n        ...\n    ValueError: Each row in the matrix must have exactly 3 characters.\n    \"\"\"\n    print(matrix)\n    if len(matrix) != size:\n        raise ValueError(\"The matrix dont match with size.\")\n    for row in matrix:\n        if len(row) != size:\n            msg = f\"Each row in the matrix must have exactly {size} characters.\"\n            raise ValueError(msg)\n        if not all(char.isalnum() for char in row):\n            raise ValueError(\"Matrix rows can only contain letters and numbers.\")\n\n\ndef validate_moves(moves: list[tuple[int, int]], size: int) -> None:\n    \"\"\"\n    >>> validate_moves([(1, 2), (-1, 0)], 3)\n    Traceback (most recent call last):\n        ...\n    ValueError: Move is out of bounds for a matrix.\n    \"\"\"\n    for move in moves:\n        x, y = move\n        if not (0 <= x < size and 0 <= y < size):\n            raise ValueError(\"Move is out of bounds for a matrix.\")\n\n\ndef parse_moves(input_str: str) -> list[tuple[int, int]]:\n    \"\"\"\n    >>> parse_moves(\"0 1, 1 1\")\n    [(0, 1), (1, 1)]\n    >>> parse_moves(\"0 1, 1 1, 2\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Each move must have exactly two numbers.\n    >>> parse_moves(\"0 1, 1 1, 2 4 5 6\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Each move must have exactly two numbers.\n    \"\"\"\n    moves = []\n    for pair in input_str.split(\",\"):\n        parts = pair.strip().split()\n        if len(parts) != 2:\n            raise ValueError(\"Each move must have exactly two numbers.\")\n        x, y = map(int, parts)\n        moves.append((x, y))\n    return moves\n\n\ndef find_repeat(\n    matrix_g: list[list[str]], row: int, column: int, size: int\n) -> set[tuple[int, int]]:\n    \"\"\"\n    Finds all connected elements of the same type from a given position.\n\n    >>> find_repeat([['A', 'B', 'A'], ['A', 'B', 'A'], ['A', 'A', 'A']], 0, 0, 3)\n    {(1, 2), (2, 1), (0, 0), (2, 0), (0, 2), (2, 2), (1, 0)}\n    >>> find_repeat([['-', '-', '-'], ['-', '-', '-'], ['-', '-', '-']], 1, 1, 3)\n    set()\n    \"\"\"\n\n    column = size - 1 - column\n    visited = set()\n    repeated = set()\n\n    if (color := matrix_g[column][row]) != \"-\":\n\n        def dfs(row_n: int, column_n: int) -> None:\n            if row_n < 0 or row_n >= size or column_n < 0 or column_n >= size:\n                return\n            if (row_n, column_n) in visited:\n                return\n            visited.add((row_n, column_n))\n            if matrix_g[row_n][column_n] == color:\n                repeated.add((row_n, column_n))\n                dfs(row_n - 1, column_n)\n                dfs(row_n + 1, column_n)\n                dfs(row_n, column_n - 1)\n                dfs(row_n, column_n + 1)\n\n        dfs(column, row)\n\n    return repeated\n\n\ndef increment_score(count: int) -> int:\n    \"\"\"\n    Calculates the score for a move based on the number of elements removed.\n\n    >>> increment_score(3)\n    6\n    >>> increment_score(0)\n    0\n    \"\"\"\n    return int(count * (count + 1) / 2)\n\n\ndef move_x(matrix_g: list[list[str]], column: int, size: int) -> list[list[str]]:\n    \"\"\"\n    Simulates gravity in a specific column.\n\n    >>> move_x([['-', 'A'], ['-', '-'], ['-', 'C']], 1, 2)\n    [['-', '-'], ['-', 'A'], ['-', 'C']]\n    \"\"\"\n\n    new_list = []\n\n    for row in range(size):\n        if matrix_g[row][column] != \"-\":\n            new_list.append(matrix_g[row][column])\n        else:\n            new_list.insert(0, matrix_g[row][column])\n    for row in range(size):\n        matrix_g[row][column] = new_list[row]\n    return matrix_g\n\n\ndef move_y(matrix_g: list[list[str]], size: int) -> list[list[str]]:\n    \"\"\"\n    Shifts all columns leftward when an entire column becomes empty.\n\n    >>> move_y([['-', 'A'], ['-', '-'], ['-', 'C']], 2)\n    [['A', '-'], ['-', '-'], ['-', 'C']]\n    \"\"\"\n\n    empty_columns = []\n\n    for column in range(size - 1, -1, -1):\n        if all(matrix_g[row][column] == \"-\" for row in range(size)):\n            empty_columns.append(column)\n\n    for column in empty_columns:\n        for col in range(column + 1, size):\n            for row in range(size):\n                matrix_g[row][col - 1] = matrix_g[row][col]\n        for row in range(size):\n            matrix_g[row][-1] = \"-\"\n\n    return matrix_g\n\n\ndef play(\n    matrix_g: list[list[str]], pos_x: int, pos_y: int, size: int\n) -> tuple[list[list[str]], int]:\n    \"\"\"\n    Processes a single move, updating the matrix and calculating the score.\n\n    >>> play([['R', 'G'], ['R', 'G']], 0, 0, 2)\n    ([['G', '-'], ['G', '-']], 3)\n    \"\"\"\n\n    same_colors = find_repeat(matrix_g, pos_x, pos_y, size)\n\n    if len(same_colors) != 0:\n        for pos in same_colors:\n            matrix_g[pos[0]][pos[1]] = \"-\"\n        for column in range(size):\n            matrix_g = move_x(matrix_g, column, size)\n\n        matrix_g = move_y(matrix_g, size)\n\n    return (matrix_g, increment_score(len(same_colors)))\n\n\ndef process_game(size: int, matrix: list[str], moves: list[tuple[int, int]]) -> int:\n    \"\"\"Processes the game logic for the given matrix and moves.\n\n    Args:\n        size (int): Size of the game board.\n        matrix (List[str]): Initial game matrix.\n        moves (List[Tuple[int, int]]): List of moves as (x, y) coordinates.\n\n    Returns:\n        int: The total score obtained.\n    >>> process_game(3, ['aaa', 'bbb', 'ccc'], [(0, 0)])\n    6\n    \"\"\"\n\n    game_matrix = [list(row) for row in matrix]\n    total_score = 0\n\n    for move in moves:\n        pos_x, pos_y = move\n        game_matrix, score = play(game_matrix, pos_x, pos_y, size)\n        total_score += score\n\n    return total_score\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod(verbose=True)\n    try:\n        size = int(input(\"Enter the size of the matrix: \"))\n        validate_matrix_size(size)\n        print(f\"Enter the {size} rows of the matrix:\")\n        matrix = [input(f\"Row {i + 1}: \") for i in range(size)]\n        validate_matrix_content(matrix, size)\n        moves_input = input(\"Enter the moves (e.g., '0 0, 1 1'): \")\n        moves = parse_moves(moves_input)\n        validate_moves(moves, size)\n        score = process_game(size, matrix, moves)\n        print(f\"Total score: {score}\")\n    except ValueError as e:\n        print(f\"{e}\")\n"
  },
  {
    "path": "matrix/matrix_class.py",
    "content": "# An OOP approach to representing and manipulating matrices\n\nfrom __future__ import annotations\n\n\nclass Matrix:\n    \"\"\"\n    Matrix object generated from a 2D array where each element is an array representing\n    a row.\n    Rows can contain type int or float.\n    Common operations and information available.\n    >>> rows = [\n    ...     [1, 2, 3],\n    ...     [4, 5, 6],\n    ...     [7, 8, 9]\n    ... ]\n    >>> matrix = Matrix(rows)\n    >>> print(matrix)\n    [[1. 2. 3.]\n     [4. 5. 6.]\n     [7. 8. 9.]]\n\n    Matrix rows and columns are available as 2D arrays\n    >>> matrix.rows\n    [[1, 2, 3], [4, 5, 6], [7, 8, 9]]\n    >>> matrix.columns()\n    [[1, 4, 7], [2, 5, 8], [3, 6, 9]]\n\n    Order is returned as a tuple\n    >>> matrix.order\n    (3, 3)\n\n    Squareness and invertability are represented as bool\n    >>> matrix.is_square\n    True\n    >>> matrix.is_invertable()\n    False\n\n    Identity, Minors, Cofactors and Adjugate are returned as Matrices.  Inverse can be\n    a Matrix or Nonetype\n    >>> print(matrix.identity())\n    [[1. 0. 0.]\n     [0. 1. 0.]\n     [0. 0. 1.]]\n    >>> print(matrix.minors())\n    [[-3. -6. -3.]\n     [-6. -12. -6.]\n     [-3. -6. -3.]]\n    >>> print(matrix.cofactors())\n    [[-3. 6. -3.]\n     [6. -12. 6.]\n     [-3. 6. -3.]]\n    >>>  # won't be apparent due to the nature of the cofactor matrix\n    >>> print(matrix.adjugate())\n    [[-3. 6. -3.]\n     [6. -12. 6.]\n     [-3. 6. -3.]]\n    >>> matrix.inverse()\n    Traceback (most recent call last):\n        ...\n    TypeError: Only matrices with a non-zero determinant have an inverse\n\n    Determinant is an int, float, or Nonetype\n    >>> matrix.determinant()\n    0\n\n    Negation, scalar multiplication, addition, subtraction, multiplication and\n    exponentiation are available and all return a Matrix\n    >>> print(-matrix)\n    [[-1. -2. -3.]\n     [-4. -5. -6.]\n     [-7. -8. -9.]]\n    >>> matrix2 = matrix * 3\n    >>> print(matrix2)\n    [[3. 6. 9.]\n     [12. 15. 18.]\n     [21. 24. 27.]]\n    >>> print(matrix + matrix2)\n    [[4. 8. 12.]\n     [16. 20. 24.]\n     [28. 32. 36.]]\n    >>> print(matrix - matrix2)\n    [[-2. -4. -6.]\n     [-8. -10. -12.]\n     [-14. -16. -18.]]\n    >>> print(matrix ** 3)\n    [[468. 576. 684.]\n     [1062. 1305. 1548.]\n     [1656. 2034. 2412.]]\n\n    Matrices can also be modified\n    >>> matrix.add_row([10, 11, 12])\n    >>> print(matrix)\n    [[1. 2. 3.]\n     [4. 5. 6.]\n     [7. 8. 9.]\n     [10. 11. 12.]]\n    >>> matrix2.add_column([8, 16, 32])\n    >>> print(matrix2)\n    [[3. 6. 9. 8.]\n     [12. 15. 18. 16.]\n     [21. 24. 27. 32.]]\n    >>> print(matrix *  matrix2)\n    [[90. 108. 126. 136.]\n     [198. 243. 288. 304.]\n     [306. 378. 450. 472.]\n     [414. 513. 612. 640.]]\n    \"\"\"\n\n    def __init__(self, rows: list[list[int]]):\n        error = TypeError(\n            \"Matrices must be formed from a list of zero or more lists containing at \"\n            \"least one and the same number of values, each of which must be of type \"\n            \"int or float.\"\n        )\n        if len(rows) != 0:\n            cols = len(rows[0])\n            if cols == 0:\n                raise error\n            for row in rows:\n                if len(row) != cols:\n                    raise error\n                for value in row:\n                    if not isinstance(value, (int, float)):\n                        raise error\n            self.rows = rows\n        else:\n            self.rows = []\n\n    # MATRIX INFORMATION\n    def columns(self) -> list[list[int]]:\n        return [[row[i] for row in self.rows] for i in range(len(self.rows[0]))]\n\n    @property\n    def num_rows(self) -> int:\n        return len(self.rows)\n\n    @property\n    def num_columns(self) -> int:\n        return len(self.rows[0])\n\n    @property\n    def order(self) -> tuple[int, int]:\n        return self.num_rows, self.num_columns\n\n    @property\n    def is_square(self) -> bool:\n        return self.order[0] == self.order[1]\n\n    def identity(self) -> Matrix:\n        values = [\n            [0 if column_num != row_num else 1 for column_num in range(self.num_rows)]\n            for row_num in range(self.num_rows)\n        ]\n        return Matrix(values)\n\n    def determinant(self) -> int:\n        if not self.is_square:\n            return 0\n        if self.order == (0, 0):\n            return 1\n        if self.order == (1, 1):\n            return int(self.rows[0][0])\n        if self.order == (2, 2):\n            return int(\n                (self.rows[0][0] * self.rows[1][1])\n                - (self.rows[0][1] * self.rows[1][0])\n            )\n        else:\n            return sum(\n                self.rows[0][column] * self.cofactors().rows[0][column]\n                for column in range(self.num_columns)\n            )\n\n    def is_invertable(self) -> bool:\n        return bool(self.determinant())\n\n    def get_minor(self, row: int, column: int) -> int:\n        values = [\n            [\n                self.rows[other_row][other_column]\n                for other_column in range(self.num_columns)\n                if other_column != column\n            ]\n            for other_row in range(self.num_rows)\n            if other_row != row\n        ]\n        return Matrix(values).determinant()\n\n    def get_cofactor(self, row: int, column: int) -> int:\n        if (row + column) % 2 == 0:\n            return self.get_minor(row, column)\n        return -1 * self.get_minor(row, column)\n\n    def minors(self) -> Matrix:\n        return Matrix(\n            [\n                [self.get_minor(row, column) for column in range(self.num_columns)]\n                for row in range(self.num_rows)\n            ]\n        )\n\n    def cofactors(self) -> Matrix:\n        return Matrix(\n            [\n                [\n                    self.minors().rows[row][column]\n                    if (row + column) % 2 == 0\n                    else self.minors().rows[row][column] * -1\n                    for column in range(self.minors().num_columns)\n                ]\n                for row in range(self.minors().num_rows)\n            ]\n        )\n\n    def adjugate(self) -> Matrix:\n        values = [\n            [self.cofactors().rows[column][row] for column in range(self.num_columns)]\n            for row in range(self.num_rows)\n        ]\n        return Matrix(values)\n\n    def inverse(self) -> Matrix:\n        determinant = self.determinant()\n        if not determinant:\n            raise TypeError(\"Only matrices with a non-zero determinant have an inverse\")\n        return self.adjugate() * (1 / determinant)\n\n    def __repr__(self) -> str:\n        return str(self.rows)\n\n    def __str__(self) -> str:\n        if self.num_rows == 0:\n            return \"[]\"\n        if self.num_rows == 1:\n            return \"[[\" + \". \".join(str(self.rows[0])) + \"]]\"\n        return (\n            \"[\"\n            + \"\\n \".join(\n                [\n                    \"[\" + \". \".join([str(value) for value in row]) + \".]\"\n                    for row in self.rows\n                ]\n            )\n            + \"]\"\n        )\n\n    # MATRIX MANIPULATION\n    def add_row(self, row: list[int], position: int | None = None) -> None:\n        type_error = TypeError(\"Row must be a list containing all ints and/or floats\")\n        if not isinstance(row, list):\n            raise type_error\n        for value in row:\n            if not isinstance(value, (int, float)):\n                raise type_error\n        if len(row) != self.num_columns:\n            raise ValueError(\n                \"Row must be equal in length to the other rows in the matrix\"\n            )\n        if position is None:\n            self.rows.append(row)\n        else:\n            self.rows = [*self.rows[0:position], row, *self.rows[position:]]\n\n    def add_column(self, column: list[int], position: int | None = None) -> None:\n        type_error = TypeError(\n            \"Column must be a list containing all ints and/or floats\"\n        )\n        if not isinstance(column, list):\n            raise type_error\n        for value in column:\n            if not isinstance(value, (int, float)):\n                raise type_error\n        if len(column) != self.num_rows:\n            raise ValueError(\n                \"Column must be equal in length to the other columns in the matrix\"\n            )\n        if position is None:\n            self.rows = [self.rows[i] + [column[i]] for i in range(self.num_rows)]\n        else:\n            self.rows = [\n                [*self.rows[i][0:position], column[i], *self.rows[i][position:]]\n                for i in range(self.num_rows)\n            ]\n\n    # MATRIX OPERATIONS\n    def __eq__(self, other: object) -> bool:\n        if not isinstance(other, Matrix):\n            return NotImplemented\n        return self.rows == other.rows\n\n    def __ne__(self, other: object) -> bool:\n        return not self == other\n\n    def __neg__(self) -> Matrix:\n        return self * -1\n\n    def __add__(self, other: Matrix) -> Matrix:\n        if self.order != other.order:\n            raise ValueError(\"Addition requires matrices of the same order\")\n        return Matrix(\n            [\n                [self.rows[i][j] + other.rows[i][j] for j in range(self.num_columns)]\n                for i in range(self.num_rows)\n            ]\n        )\n\n    def __sub__(self, other: Matrix) -> Matrix:\n        if self.order != other.order:\n            raise ValueError(\"Subtraction requires matrices of the same order\")\n        return Matrix(\n            [\n                [self.rows[i][j] - other.rows[i][j] for j in range(self.num_columns)]\n                for i in range(self.num_rows)\n            ]\n        )\n\n    def __mul__(self, other: Matrix | float) -> Matrix:\n        if isinstance(other, (int, float)):\n            return Matrix(\n                [[int(element * other) for element in row] for row in self.rows]\n            )\n        elif isinstance(other, Matrix):\n            if self.num_columns != other.num_rows:\n                raise ValueError(\n                    \"The number of columns in the first matrix must \"\n                    \"be equal to the number of rows in the second\"\n                )\n            return Matrix(\n                [\n                    [Matrix.dot_product(row, column) for column in other.columns()]\n                    for row in self.rows\n                ]\n            )\n        else:\n            raise TypeError(\n                \"A Matrix can only be multiplied by an int, float, or another matrix\"\n            )\n\n    def __pow__(self, other: int) -> Matrix:\n        if not isinstance(other, int):\n            raise TypeError(\"A Matrix can only be raised to the power of an int\")\n        if not self.is_square:\n            raise ValueError(\"Only square matrices can be raised to a power\")\n        if other == 0:\n            return self.identity()\n        if other < 0:\n            if self.is_invertable():\n                return self.inverse() ** (-other)\n            raise ValueError(\n                \"Only invertable matrices can be raised to a negative power\"\n            )\n        result = self\n        for _ in range(other - 1):\n            result *= self\n        return result\n\n    @classmethod\n    def dot_product(cls, row: list[int], column: list[int]) -> int:\n        return sum(row[i] * column[i] for i in range(len(row)))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "matrix/matrix_equalization.py",
    "content": "from sys import maxsize\n\n\ndef array_equalization(vector: list[int], step_size: int) -> int:\n    \"\"\"\n    This algorithm equalizes all elements of the input vector\n    to a common value, by making the minimal number of\n    \"updates\" under the constraint of a step size (step_size).\n\n    >>> array_equalization([1, 1, 6, 2, 4, 6, 5, 1, 7, 2, 2, 1, 7, 2, 2], 4)\n    4\n    >>> array_equalization([22, 81, 88, 71, 22, 81, 632, 81, 81, 22, 92], 2)\n    5\n    >>> array_equalization([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 5)\n    0\n    >>> array_equalization([22, 22, 22, 33, 33, 33], 2)\n    2\n    >>> array_equalization([1, 2, 3], 0)\n    Traceback (most recent call last):\n    ValueError: Step size must be positive and non-zero.\n    >>> array_equalization([1, 2, 3], -1)\n    Traceback (most recent call last):\n    ValueError: Step size must be positive and non-zero.\n    >>> array_equalization([1, 2, 3], 0.5)\n    Traceback (most recent call last):\n    ValueError: Step size must be an integer.\n    >>> array_equalization([1, 2, 3], maxsize)\n    1\n    \"\"\"\n    if step_size <= 0:\n        raise ValueError(\"Step size must be positive and non-zero.\")\n    if not isinstance(step_size, int):\n        raise ValueError(\"Step size must be an integer.\")\n\n    unique_elements = set(vector)\n    min_updates = maxsize\n\n    for element in unique_elements:\n        elem_index = 0\n        updates = 0\n        while elem_index < len(vector):\n            if vector[elem_index] != element:\n                updates += 1\n                elem_index += step_size\n            else:\n                elem_index += 1\n        min_updates = min(min_updates, updates)\n\n    return min_updates\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "matrix/matrix_multiplication_recursion.py",
    "content": "# @Author  : ojas-wani\n# @File    : matrix_multiplication_recursion.py\n# @Date    : 10/06/2023\n\n\n\"\"\"\nPerform matrix multiplication using a recursive algorithm.\nhttps://en.wikipedia.org/wiki/Matrix_multiplication\n\"\"\"\n\n# type Matrix = list[list[int]]  # psf/black currenttly fails on this line\nMatrix = list[list[int]]\n\nmatrix_1_to_4 = [\n    [1, 2],\n    [3, 4],\n]\n\nmatrix_5_to_8 = [\n    [5, 6],\n    [7, 8],\n]\n\nmatrix_5_to_9_high = [\n    [5, 6],\n    [7, 8],\n    [9],\n]\n\nmatrix_5_to_9_wide = [\n    [5, 6],\n    [7, 8, 9],\n]\n\nmatrix_count_up = [\n    [1, 2, 3, 4],\n    [5, 6, 7, 8],\n    [9, 10, 11, 12],\n    [13, 14, 15, 16],\n]\n\nmatrix_unordered = [\n    [5, 8, 1, 2],\n    [6, 7, 3, 0],\n    [4, 5, 9, 1],\n    [2, 6, 10, 14],\n]\nmatrices = (\n    matrix_1_to_4,\n    matrix_5_to_8,\n    matrix_5_to_9_high,\n    matrix_5_to_9_wide,\n    matrix_count_up,\n    matrix_unordered,\n)\n\n\ndef is_square(matrix: Matrix) -> bool:\n    \"\"\"\n    >>> is_square([])\n    True\n    >>> is_square(matrix_1_to_4)\n    True\n    >>> is_square(matrix_5_to_9_high)\n    False\n    \"\"\"\n    len_matrix = len(matrix)\n    return all(len(row) == len_matrix for row in matrix)\n\n\ndef matrix_multiply(matrix_a: Matrix, matrix_b: Matrix) -> Matrix:\n    \"\"\"\n    >>> matrix_multiply(matrix_1_to_4, matrix_5_to_8)\n    [[19, 22], [43, 50]]\n    \"\"\"\n    return [\n        [sum(a * b for a, b in zip(row, col)) for col in zip(*matrix_b)]\n        for row in matrix_a\n    ]\n\n\ndef matrix_multiply_recursive(matrix_a: Matrix, matrix_b: Matrix) -> Matrix:\n    \"\"\"\n    :param matrix_a: A square Matrix.\n    :param matrix_b: Another square Matrix with the same dimensions as matrix_a.\n    :return: Result of matrix_a * matrix_b.\n    :raises ValueError: If the matrices cannot be multiplied.\n\n    >>> matrix_multiply_recursive([], [])\n    []\n    >>> matrix_multiply_recursive(matrix_1_to_4, matrix_5_to_8)\n    [[19, 22], [43, 50]]\n    >>> matrix_multiply_recursive(matrix_count_up, matrix_unordered)\n    [[37, 61, 74, 61], [105, 165, 166, 129], [173, 269, 258, 197], [241, 373, 350, 265]]\n    >>> matrix_multiply_recursive(matrix_1_to_4, matrix_5_to_9_wide)\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid matrix dimensions\n    >>> matrix_multiply_recursive(matrix_1_to_4, matrix_5_to_9_high)\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid matrix dimensions\n    >>> matrix_multiply_recursive(matrix_1_to_4, matrix_count_up)\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid matrix dimensions\n    \"\"\"\n    if not matrix_a or not matrix_b:\n        return []\n    if not all(\n        (len(matrix_a) == len(matrix_b), is_square(matrix_a), is_square(matrix_b))\n    ):\n        raise ValueError(\"Invalid matrix dimensions\")\n\n    # Initialize the result matrix with zeros\n    result = [[0] * len(matrix_b[0]) for _ in range(len(matrix_a))]\n\n    # Recursive multiplication of matrices\n    def multiply(\n        i_loop: int,\n        j_loop: int,\n        k_loop: int,\n        matrix_a: Matrix,\n        matrix_b: Matrix,\n        result: Matrix,\n    ) -> None:\n        \"\"\"\n        :param matrix_a: A square Matrix.\n        :param matrix_b: Another square Matrix with the same dimensions as matrix_a.\n        :param result: Result matrix\n        :param i: Index used for iteration during multiplication.\n        :param j: Index used for iteration during multiplication.\n        :param k: Index used for iteration during multiplication.\n        >>> 0 > 1  # Doctests in inner functions are never run\n        True\n        \"\"\"\n        if i_loop >= len(matrix_a):\n            return\n        if j_loop >= len(matrix_b[0]):\n            return multiply(i_loop + 1, 0, 0, matrix_a, matrix_b, result)\n        if k_loop >= len(matrix_b):\n            return multiply(i_loop, j_loop + 1, 0, matrix_a, matrix_b, result)\n        result[i_loop][j_loop] += matrix_a[i_loop][k_loop] * matrix_b[k_loop][j_loop]\n        return multiply(i_loop, j_loop, k_loop + 1, matrix_a, matrix_b, result)\n\n    # Perform the recursive matrix multiplication\n    multiply(0, 0, 0, matrix_a, matrix_b, result)\n    return result\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    failure_count, test_count = testmod()\n    if not failure_count:\n        matrix_a = matrices[0]\n        for matrix_b in matrices[1:]:\n            print(\"Multiplying:\")\n            for row in matrix_a:\n                print(row)\n            print(\"By:\")\n            for row in matrix_b:\n                print(row)\n            print(\"Result:\")\n            try:\n                result = matrix_multiply_recursive(matrix_a, matrix_b)\n                for row in result:\n                    print(row)\n                assert result == matrix_multiply(matrix_a, matrix_b)\n            except ValueError as e:\n                print(f\"{e!r}\")\n            print()\n            matrix_a = matrix_b\n\n    print(\"Benchmark:\")\n    from functools import partial\n    from timeit import timeit\n\n    mytimeit = partial(timeit, globals=globals(), number=100_000)\n    for func in (\"matrix_multiply\", \"matrix_multiply_recursive\"):\n        print(f\"{func:>25}(): {mytimeit(f'{func}(matrix_count_up, matrix_unordered)')}\")\n"
  },
  {
    "path": "matrix/matrix_operation.py",
    "content": "\"\"\"\nFunctions for 2D matrix operations\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom typing import Any\n\n\ndef add(*matrix_s: list[list[int]]) -> list[list[int]]:\n    \"\"\"\n    >>> add([[1,2],[3,4]],[[2,3],[4,5]])\n    [[3, 5], [7, 9]]\n    >>> add([[1.2,2.4],[3,4]],[[2,3],[4,5]])\n    [[3.2, 5.4], [7, 9]]\n    >>> add([[1, 2], [4, 5]], [[3, 7], [3, 4]], [[3, 5], [5, 7]])\n    [[7, 14], [12, 16]]\n    >>> add([3], [4, 5])\n    Traceback (most recent call last):\n      ...\n    TypeError: Expected a matrix, got int/list instead\n    \"\"\"\n    if all(_check_not_integer(m) for m in matrix_s):\n        for i in matrix_s[1:]:\n            _verify_matrix_sizes(matrix_s[0], i)\n        return [[sum(t) for t in zip(*m)] for m in zip(*matrix_s)]\n    raise TypeError(\"Expected a matrix, got int/list instead\")\n\n\ndef subtract(matrix_a: list[list[int]], matrix_b: list[list[int]]) -> list[list[int]]:\n    \"\"\"\n    >>> subtract([[1,2],[3,4]],[[2,3],[4,5]])\n    [[-1, -1], [-1, -1]]\n    >>> subtract([[1,2.5],[3,4]],[[2,3],[4,5.5]])\n    [[-1, -0.5], [-1, -1.5]]\n    >>> subtract([3], [4, 5])\n    Traceback (most recent call last):\n      ...\n    TypeError: Expected a matrix, got int/list instead\n    \"\"\"\n    if (\n        _check_not_integer(matrix_a)\n        and _check_not_integer(matrix_b)\n        and _verify_matrix_sizes(matrix_a, matrix_b)\n    ):\n        return [[i - j for i, j in zip(*m)] for m in zip(matrix_a, matrix_b)]\n    raise TypeError(\"Expected a matrix, got int/list instead\")\n\n\ndef scalar_multiply(matrix: list[list[int]], n: float) -> list[list[float]]:\n    \"\"\"\n    >>> scalar_multiply([[1,2],[3,4]],5)\n    [[5, 10], [15, 20]]\n    >>> scalar_multiply([[1.4,2.3],[3,4]],5)\n    [[7.0, 11.5], [15, 20]]\n    \"\"\"\n    return [[x * n for x in row] for row in matrix]\n\n\ndef multiply(matrix_a: list[list[int]], matrix_b: list[list[int]]) -> list[list[int]]:\n    \"\"\"\n    >>> multiply([[1,2],[3,4]],[[5,5],[7,5]])\n    [[19, 15], [43, 35]]\n    >>> multiply([[1,2.5],[3,4.5]],[[5,5],[7,5]])\n    [[22.5, 17.5], [46.5, 37.5]]\n    >>> multiply([[1, 2, 3]], [[2], [3], [4]])\n    [[20]]\n    \"\"\"\n    if _check_not_integer(matrix_a) and _check_not_integer(matrix_b):\n        rows, cols = _verify_matrix_sizes(matrix_a, matrix_b)\n\n    if cols[0] != rows[1]:\n        msg = (\n            \"Cannot multiply matrix of dimensions \"\n            f\"({rows[0]},{cols[0]}) and ({rows[1]},{cols[1]})\"\n        )\n        raise ValueError(msg)\n    return [\n        [sum(m * n for m, n in zip(i, j)) for j in zip(*matrix_b)] for i in matrix_a\n    ]\n\n\ndef identity(n: int) -> list[list[int]]:\n    \"\"\"\n    :param n: dimension for nxn matrix\n    :type n: int\n    :return: Identity matrix of shape [n, n]\n    >>> identity(3)\n    [[1, 0, 0], [0, 1, 0], [0, 0, 1]]\n    \"\"\"\n    n = int(n)\n    return [[int(row == column) for column in range(n)] for row in range(n)]\n\n\ndef transpose(\n    matrix: list[list[int]], return_map: bool = True\n) -> list[list[int]] | map[list[int]]:\n    \"\"\"\n    >>> transpose([[1,2],[3,4]]) # doctest: +ELLIPSIS\n    <map object at ...\n    >>> transpose([[1,2],[3,4]], return_map=False)\n    [[1, 3], [2, 4]]\n    >>> transpose([1, [2, 3]])\n    Traceback (most recent call last):\n      ...\n    TypeError: Expected a matrix, got int/list instead\n    \"\"\"\n    if _check_not_integer(matrix):\n        if return_map:\n            return map(list, zip(*matrix))\n        else:\n            return list(map(list, zip(*matrix)))\n    raise TypeError(\"Expected a matrix, got int/list instead\")\n\n\ndef minor(matrix: list[list[int]], row: int, column: int) -> list[list[int]]:\n    \"\"\"\n    >>> minor([[1, 2], [3, 4]], 1, 1)\n    [[1]]\n    \"\"\"\n    minor = matrix[:row] + matrix[row + 1 :]\n    return [row[:column] + row[column + 1 :] for row in minor]\n\n\ndef determinant(matrix: list[list[int]]) -> Any:\n    \"\"\"\n    >>> determinant([[1, 2], [3, 4]])\n    -2\n    >>> determinant([[1.5, 2.5], [3, 4]])\n    -1.5\n    \"\"\"\n    if len(matrix) == 1:\n        return matrix[0][0]\n\n    return sum(\n        x * determinant(minor(matrix, 0, i)) * (-1) ** i\n        for i, x in enumerate(matrix[0])\n    )\n\n\ndef inverse(matrix: list[list[int]]) -> list[list[float]] | None:\n    \"\"\"\n    >>> inverse([[1, 2], [3, 4]])\n    [[-2.0, 1.0], [1.5, -0.5]]\n    >>> inverse([[1, 1], [1, 1]])\n    \"\"\"\n    # https://stackoverflow.com/questions/20047519/python-doctests-test-for-none\n    det = determinant(matrix)\n    if det == 0:\n        return None\n\n    matrix_minor = [\n        [determinant(minor(matrix, i, j)) for j in range(len(matrix))]\n        for i in range(len(matrix))\n    ]\n\n    cofactors = [\n        [x * (-1) ** (row + col) for col, x in enumerate(matrix_minor[row])]\n        for row in range(len(matrix))\n    ]\n    adjugate = list(transpose(cofactors))\n    return scalar_multiply(adjugate, 1 / det)\n\n\ndef _check_not_integer(matrix: list[list[int]]) -> bool:\n    return not isinstance(matrix, int) and not isinstance(matrix[0], int)\n\n\ndef _shape(matrix: list[list[int]]) -> tuple[int, int]:\n    return len(matrix), len(matrix[0])\n\n\ndef _verify_matrix_sizes(\n    matrix_a: list[list[int]], matrix_b: list[list[int]]\n) -> tuple[tuple[int, int], tuple[int, int]]:\n    shape = _shape(matrix_a) + _shape(matrix_b)\n    if shape[0] != shape[3] or shape[1] != shape[2]:\n        msg = (\n            \"operands could not be broadcast together with shape \"\n            f\"({shape[0], shape[1]}), ({shape[2], shape[3]})\"\n        )\n        raise ValueError(msg)\n    return (shape[0], shape[2]), (shape[1], shape[3])\n\n\ndef main() -> None:\n    matrix_a = [[12, 10], [3, 9]]\n    matrix_b = [[3, 4], [7, 4]]\n    matrix_c = [[11, 12, 13, 14], [21, 22, 23, 24], [31, 32, 33, 34], [41, 42, 43, 44]]\n    matrix_d = [[3, 0, 2], [2, 0, -2], [0, 1, 1]]\n    print(f\"Add Operation, {add(matrix_a, matrix_b) = } \\n\")\n    print(f\"Multiply Operation, {multiply(matrix_a, matrix_b) = } \\n\")\n    print(f\"Identity: {identity(5)}\\n\")\n    print(f\"Minor of {matrix_c} = {minor(matrix_c, 1, 2)} \\n\")\n    print(f\"Determinant of {matrix_b} = {determinant(matrix_b)} \\n\")\n    print(f\"Inverse of {matrix_d} = {inverse(matrix_d)}\\n\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    main()\n"
  },
  {
    "path": "matrix/max_area_of_island.py",
    "content": "\"\"\"\nGiven an two dimensional binary matrix grid. An island is a group of 1's (representing\nland) connected 4-directionally (horizontal or vertical.) You may assume all four edges\nof the grid are surrounded by water.  The area of an island is the number of cells with\na value 1 in the island. Return the maximum area of an island in a grid. If there is no\nisland, return 0.\n\"\"\"\n\nmatrix = [\n    [0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0],\n    [0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0],\n    [0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0],\n    [0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0],\n    [0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0],\n]\n\n\ndef is_safe(row: int, col: int, rows: int, cols: int) -> bool:\n    \"\"\"\n    Checking whether coordinate (row, col) is valid or not.\n\n    >>> is_safe(0, 0, 5, 5)\n    True\n    >>> is_safe(-1,-1, 5, 5)\n    False\n    \"\"\"\n    return 0 <= row < rows and 0 <= col < cols\n\n\ndef depth_first_search(row: int, col: int, seen: set, mat: list[list[int]]) -> int:\n    \"\"\"\n    Returns the current area of the island\n\n    >>> depth_first_search(0, 0, set(), matrix)\n    0\n    \"\"\"\n    rows = len(mat)\n    cols = len(mat[0])\n    if is_safe(row, col, rows, cols) and (row, col) not in seen and mat[row][col] == 1:\n        seen.add((row, col))\n        return (\n            1\n            + depth_first_search(row + 1, col, seen, mat)\n            + depth_first_search(row - 1, col, seen, mat)\n            + depth_first_search(row, col + 1, seen, mat)\n            + depth_first_search(row, col - 1, seen, mat)\n        )\n    else:\n        return 0\n\n\ndef find_max_area(mat: list[list[int]]) -> int:\n    \"\"\"\n    Finds the area of all islands and returns the maximum area.\n\n    >>> find_max_area(matrix)\n    6\n    \"\"\"\n    seen: set = set()\n\n    max_area = 0\n    for row, line in enumerate(mat):\n        for col, item in enumerate(line):\n            if item == 1 and (row, col) not in seen:\n                # Maximizing the area\n                max_area = max(max_area, depth_first_search(row, col, seen, mat))\n    return max_area\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    print(find_max_area(matrix))  # Output -> 6\n\n    \"\"\"\n    Explanation:\n    We are allowed to move in four directions (horizontal or vertical) so the possible\n    in a matrix if we are at x and y position the possible moving are\n\n    Directions are [(x, y+1), (x, y-1), (x+1, y), (x-1, y)] but we need to take care of\n    boundary cases as well which are x and y can not be smaller than 0 and greater than\n    the number of rows and columns respectively.\n\n    Visualization\n    mat = [\n        [0,0,A,0,0,0,0,B,0,0,0,0,0],\n        [0,0,0,0,0,0,0,B,B,B,0,0,0],\n        [0,C,C,0,D,0,0,0,0,0,0,0,0],\n        [0,C,0,0,D,D,0,0,E,0,E,0,0],\n        [0,C,0,0,D,D,0,0,E,E,E,0,0],\n        [0,0,0,0,0,0,0,0,0,0,E,0,0],\n        [0,0,0,0,0,0,0,F,F,F,0,0,0],\n        [0,0,0,0,0,0,0,F,F,0,0,0,0]\n    ]\n\n    For visualization, I have defined the connected island with letters\n    by observation, we can see that\n        A island is of area 1\n        B island is of area 4\n        C island is of area 4\n        D island is of area 5\n        E island is of area 6 and\n        F island is of area 5\n\n    it has 6 unique islands of mentioned areas\n    and the maximum of all of them is 6 so we return 6.\n    \"\"\"\n\n    doctest.testmod()\n"
  },
  {
    "path": "matrix/median_matrix.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/Median\n\"\"\"\n\n\ndef median(matrix: list[list[int]]) -> int:\n    \"\"\"\n    Calculate the median of a sorted matrix.\n\n    Args:\n        matrix: A 2D matrix of integers.\n\n    Returns:\n        The median value of the matrix.\n\n    Examples:\n        >>> matrix = [[1, 3, 5], [2, 6, 9], [3, 6, 9]]\n        >>> median(matrix)\n        5\n\n        >>> matrix = [[1, 2, 3], [4, 5, 6]]\n        >>> median(matrix)\n        3\n    \"\"\"\n    # Flatten the matrix into a sorted 1D list\n    linear = sorted(num for row in matrix for num in row)\n\n    # Calculate the middle index\n    mid = (len(linear) - 1) // 2\n\n    # Return the median\n    return linear[mid]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "matrix/nth_fibonacci_using_matrix_exponentiation.py",
    "content": "\"\"\"\nImplementation of finding nth fibonacci number using matrix exponentiation.\nTime Complexity is about O(log(n)*8), where 8 is the complexity of matrix\nmultiplication of size 2 by 2.\nAnd on the other hand complexity of bruteforce solution is O(n).\nAs we know\n    f[n] = f[n-1] + f[n-1]\nConverting to matrix,\n    [f(n),f(n-1)] = [[1,1],[1,0]] * [f(n-1),f(n-2)]\n->  [f(n),f(n-1)] = [[1,1],[1,0]]^2 * [f(n-2),f(n-3)]\n    ...\n    ...\n->  [f(n),f(n-1)] = [[1,1],[1,0]]^(n-1) * [f(1),f(0)]\nSo we just need the n times multiplication of the matrix [1,1],[1,0]].\nWe can decrease the n times multiplication by following the divide and conquer approach.\n\"\"\"\n\n\ndef multiply(matrix_a: list[list[int]], matrix_b: list[list[int]]) -> list[list[int]]:\n    matrix_c = []\n    n = len(matrix_a)\n    for i in range(n):\n        list_1 = []\n        for j in range(n):\n            val = 0\n            for k in range(n):\n                val = val + matrix_a[i][k] * matrix_b[k][j]\n            list_1.append(val)\n        matrix_c.append(list_1)\n    return matrix_c\n\n\ndef identity(n: int) -> list[list[int]]:\n    return [[int(row == column) for column in range(n)] for row in range(n)]\n\n\ndef nth_fibonacci_matrix(n: int) -> int:\n    \"\"\"\n    >>> nth_fibonacci_matrix(100)\n    354224848179261915075\n    >>> nth_fibonacci_matrix(-100)\n    -100\n    \"\"\"\n    if n <= 1:\n        return n\n    res_matrix = identity(2)\n    fibonacci_matrix = [[1, 1], [1, 0]]\n    n = n - 1\n    while n > 0:\n        if n % 2 == 1:\n            res_matrix = multiply(res_matrix, fibonacci_matrix)\n        fibonacci_matrix = multiply(fibonacci_matrix, fibonacci_matrix)\n        n = int(n / 2)\n    return res_matrix[0][0]\n\n\ndef nth_fibonacci_bruteforce(n: int) -> int:\n    \"\"\"\n    >>> nth_fibonacci_bruteforce(100)\n    354224848179261915075\n    >>> nth_fibonacci_bruteforce(-100)\n    -100\n    \"\"\"\n    if n <= 1:\n        return n\n    fib0 = 0\n    fib1 = 1\n    for _ in range(2, n + 1):\n        fib0, fib1 = fib1, fib0 + fib1\n    return fib1\n\n\ndef main() -> None:\n    for ordinal in \"0th 1st 2nd 3rd 10th 100th 1000th\".split():\n        n = int(\"\".join(c for c in ordinal if c in \"0123456789\"))  # 1000th --> 1000\n        print(\n            f\"{ordinal} fibonacci number using matrix exponentiation is \"\n            f\"{nth_fibonacci_matrix(n)} and using bruteforce is \"\n            f\"{nth_fibonacci_bruteforce(n)}\\n\"\n        )\n    # from timeit import timeit\n    # print(timeit(\"nth_fibonacci_matrix(1000000)\",\n    #              \"from main import nth_fibonacci_matrix\", number=5))\n    # print(timeit(\"nth_fibonacci_bruteforce(1000000)\",\n    #              \"from main import nth_fibonacci_bruteforce\", number=5))\n    # 2.3342058970001744\n    # 57.256506615000035\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    main()\n"
  },
  {
    "path": "matrix/pascal_triangle.py",
    "content": "\"\"\"\nThis implementation demonstrates how to generate the elements of a Pascal's triangle.\nThe element havingva row index of r and column index of c can be derivedvas follows:\ntriangle[r][c] = triangle[r-1][c-1]+triangle[r-1][c]\n\nA Pascal's triangle is a triangular array containing binomial coefficients.\nhttps://en.wikipedia.org/wiki/Pascal%27s_triangle\n\"\"\"\n\n\ndef print_pascal_triangle(num_rows: int) -> None:\n    \"\"\"\n    Print Pascal's triangle for different number of rows\n    >>> print_pascal_triangle(5)\n        1\n       1 1\n      1 2 1\n     1 3 3 1\n    1 4 6 4 1\n    \"\"\"\n    triangle = generate_pascal_triangle(num_rows)\n    for row_idx in range(num_rows):\n        # Print left spaces\n        for _ in range(num_rows - row_idx - 1):\n            print(end=\" \")\n        # Print row values\n        for col_idx in range(row_idx + 1):\n            if col_idx != row_idx:\n                print(triangle[row_idx][col_idx], end=\" \")\n            else:\n                print(triangle[row_idx][col_idx], end=\"\")\n        print()\n\n\ndef generate_pascal_triangle(num_rows: int) -> list[list[int]]:\n    \"\"\"\n    Create Pascal's triangle for different number of rows\n    >>> generate_pascal_triangle(0)\n    []\n    >>> generate_pascal_triangle(1)\n    [[1]]\n    >>> generate_pascal_triangle(2)\n    [[1], [1, 1]]\n    >>> generate_pascal_triangle(3)\n    [[1], [1, 1], [1, 2, 1]]\n    >>> generate_pascal_triangle(4)\n    [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1]]\n    >>> generate_pascal_triangle(5)\n    [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]\n    >>> generate_pascal_triangle(-5)\n    Traceback (most recent call last):\n        ...\n    ValueError: The input value of 'num_rows' should be greater than or equal to 0\n    >>> generate_pascal_triangle(7.89)\n    Traceback (most recent call last):\n        ...\n    TypeError: The input value of 'num_rows' should be 'int'\n    \"\"\"\n\n    if not isinstance(num_rows, int):\n        raise TypeError(\"The input value of 'num_rows' should be 'int'\")\n\n    if num_rows == 0:\n        return []\n    elif num_rows < 0:\n        raise ValueError(\n            \"The input value of 'num_rows' should be greater than or equal to 0\"\n        )\n\n    triangle: list[list[int]] = []\n    for current_row_idx in range(num_rows):\n        current_row = populate_current_row(triangle, current_row_idx)\n        triangle.append(current_row)\n    return triangle\n\n\ndef populate_current_row(triangle: list[list[int]], current_row_idx: int) -> list[int]:\n    \"\"\"\n    >>> triangle = [[1]]\n    >>> populate_current_row(triangle, 1)\n    [1, 1]\n    \"\"\"\n    current_row = [-1] * (current_row_idx + 1)\n    # first and last elements of current row are equal to 1\n    current_row[0], current_row[-1] = 1, 1\n    for current_col_idx in range(1, current_row_idx):\n        calculate_current_element(\n            triangle, current_row, current_row_idx, current_col_idx\n        )\n    return current_row\n\n\ndef calculate_current_element(\n    triangle: list[list[int]],\n    current_row: list[int],\n    current_row_idx: int,\n    current_col_idx: int,\n) -> None:\n    \"\"\"\n    >>> triangle = [[1], [1, 1]]\n    >>> current_row = [1, -1, 1]\n    >>> calculate_current_element(triangle, current_row, 2, 1)\n    >>> current_row\n    [1, 2, 1]\n    \"\"\"\n    above_to_left_elt = triangle[current_row_idx - 1][current_col_idx - 1]\n    above_to_right_elt = triangle[current_row_idx - 1][current_col_idx]\n    current_row[current_col_idx] = above_to_left_elt + above_to_right_elt\n\n\ndef generate_pascal_triangle_optimized(num_rows: int) -> list[list[int]]:\n    \"\"\"\n    This function returns a matrix representing the corresponding pascal's triangle\n    according to the given input of number of rows of Pascal's triangle to be generated.\n    It reduces the operations done to generate a row by half\n    by eliminating redundant calculations.\n\n    :param num_rows: Integer specifying the number of rows in the Pascal's triangle\n    :return: 2-D List (matrix) representing the Pascal's triangle\n\n    Return the Pascal's triangle of given rows\n    >>> generate_pascal_triangle_optimized(3)\n    [[1], [1, 1], [1, 2, 1]]\n    >>> generate_pascal_triangle_optimized(1)\n    [[1]]\n    >>> generate_pascal_triangle_optimized(0)\n    []\n    >>> generate_pascal_triangle_optimized(-5)\n    Traceback (most recent call last):\n        ...\n    ValueError: The input value of 'num_rows' should be greater than or equal to 0\n    >>> generate_pascal_triangle_optimized(7.89)\n    Traceback (most recent call last):\n        ...\n    TypeError: The input value of 'num_rows' should be 'int'\n    \"\"\"\n\n    if not isinstance(num_rows, int):\n        raise TypeError(\"The input value of 'num_rows' should be 'int'\")\n\n    if num_rows == 0:\n        return []\n    elif num_rows < 0:\n        raise ValueError(\n            \"The input value of 'num_rows' should be greater than or equal to 0\"\n        )\n\n    result: list[list[int]] = [[1]]\n\n    for row_index in range(1, num_rows):\n        temp_row = [0] + result[-1] + [0]\n        row_length = row_index + 1\n        # Calculate the number of distinct elements in a row\n        distinct_elements = sum(divmod(row_length, 2))\n        row_first_half = [\n            temp_row[i - 1] + temp_row[i] for i in range(1, distinct_elements + 1)\n        ]\n        row_second_half = row_first_half[: (row_index + 1) // 2]\n        row_second_half.reverse()\n        row = row_first_half + row_second_half\n        result.append(row)\n\n    return result\n\n\ndef benchmark() -> None:\n    \"\"\"\n    Benchmark multiple functions, with three different length int values.\n    \"\"\"\n    from collections.abc import Callable\n    from timeit import timeit\n\n    def benchmark_a_function(func: Callable, value: int) -> None:\n        call = f\"{func.__name__}({value})\"\n        timing = timeit(f\"__main__.{call}\", setup=\"import __main__\")\n        # print(f\"{call:38} = {func(value)} -- {timing:.4f} seconds\")\n        print(f\"{call:38} -- {timing:.4f} seconds\")\n\n    for value in range(15):  # (1, 7, 14):\n        for func in (generate_pascal_triangle, generate_pascal_triangle_optimized):\n            benchmark_a_function(func, value)\n        print()\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    benchmark()\n"
  },
  {
    "path": "matrix/rotate_matrix.py",
    "content": "\"\"\"\nIn this problem, we want to rotate the matrix elements by 90, 180, 270\n(counterclockwise)\nDiscussion in stackoverflow:\nhttps://stackoverflow.com/questions/42519/how-do-you-rotate-a-two-dimensional-array\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef make_matrix(row_size: int = 4) -> list[list[int]]:\n    \"\"\"\n    >>> make_matrix()\n    [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]\n    >>> make_matrix(1)\n    [[1]]\n    >>> make_matrix(-2)\n    [[1, 2], [3, 4]]\n    >>> make_matrix(3)\n    [[1, 2, 3], [4, 5, 6], [7, 8, 9]]\n    >>> make_matrix() == make_matrix(4)\n    True\n    \"\"\"\n    row_size = abs(row_size) or 4\n    return [[1 + x + y * row_size for x in range(row_size)] for y in range(row_size)]\n\n\ndef rotate_90(matrix: list[list[int]]) -> list[list[int]]:\n    \"\"\"\n    >>> rotate_90(make_matrix())\n    [[4, 8, 12, 16], [3, 7, 11, 15], [2, 6, 10, 14], [1, 5, 9, 13]]\n    >>> rotate_90(make_matrix()) == transpose(reverse_column(make_matrix()))\n    True\n    \"\"\"\n\n    return reverse_row(transpose(matrix))\n    # OR.. transpose(reverse_column(matrix))\n\n\ndef rotate_180(matrix: list[list[int]]) -> list[list[int]]:\n    \"\"\"\n    >>> rotate_180(make_matrix())\n    [[16, 15, 14, 13], [12, 11, 10, 9], [8, 7, 6, 5], [4, 3, 2, 1]]\n    >>> rotate_180(make_matrix()) == reverse_column(reverse_row(make_matrix()))\n    True\n    \"\"\"\n\n    return reverse_row(reverse_column(matrix))\n    # OR.. reverse_column(reverse_row(matrix))\n\n\ndef rotate_270(matrix: list[list[int]]) -> list[list[int]]:\n    \"\"\"\n    >>> rotate_270(make_matrix())\n    [[13, 9, 5, 1], [14, 10, 6, 2], [15, 11, 7, 3], [16, 12, 8, 4]]\n    >>> rotate_270(make_matrix()) == transpose(reverse_row(make_matrix()))\n    True\n    \"\"\"\n\n    return reverse_column(transpose(matrix))\n    # OR.. transpose(reverse_row(matrix))\n\n\ndef transpose(matrix: list[list[int]]) -> list[list[int]]:\n    matrix[:] = [list(x) for x in zip(*matrix)]\n    return matrix\n\n\ndef reverse_row(matrix: list[list[int]]) -> list[list[int]]:\n    matrix[:] = matrix[::-1]\n    return matrix\n\n\ndef reverse_column(matrix: list[list[int]]) -> list[list[int]]:\n    matrix[:] = [x[::-1] for x in matrix]\n    return matrix\n\n\ndef print_matrix(matrix: list[list[int]]) -> None:\n    for i in matrix:\n        print(*i)\n\n\nif __name__ == \"__main__\":\n    matrix = make_matrix()\n    print(\"\\norigin:\\n\")\n    print_matrix(matrix)\n    print(\"\\nrotate 90 counterclockwise:\\n\")\n    print_matrix(rotate_90(matrix))\n\n    matrix = make_matrix()\n    print(\"\\norigin:\\n\")\n    print_matrix(matrix)\n    print(\"\\nrotate 180:\\n\")\n    print_matrix(rotate_180(matrix))\n\n    matrix = make_matrix()\n    print(\"\\norigin:\\n\")\n    print_matrix(matrix)\n    print(\"\\nrotate 270 counterclockwise:\\n\")\n    print_matrix(rotate_270(matrix))\n"
  },
  {
    "path": "matrix/searching_in_sorted_matrix.py",
    "content": "from __future__ import annotations\n\n\ndef search_in_a_sorted_matrix(mat: list[list[int]], m: int, n: int, key: float) -> None:\n    \"\"\"\n    >>> search_in_a_sorted_matrix(\n    ...     [[2, 5, 7], [4, 8, 13], [9, 11, 15], [12, 17, 20]], 3, 3, 5)\n    Key 5 found at row- 1 column- 2\n    >>> search_in_a_sorted_matrix(\n    ...     [[2, 5, 7], [4, 8, 13], [9, 11, 15], [12, 17, 20]], 3, 3, 21)\n    Key 21 not found\n    >>> search_in_a_sorted_matrix(\n    ...     [[2.1, 5, 7], [4, 8, 13], [9, 11, 15], [12, 17, 20]], 3, 3, 2.1)\n    Key 2.1 found at row- 1 column- 1\n    >>> search_in_a_sorted_matrix(\n    ...     [[2.1, 5, 7], [4, 8, 13], [9, 11, 15], [12, 17, 20]], 3, 3, 2.2)\n    Key 2.2 not found\n    \"\"\"\n    i, j = m - 1, 0\n    while i >= 0 and j < n:\n        if key == mat[i][j]:\n            print(f\"Key {key} found at row- {i + 1} column- {j + 1}\")\n            return\n        if key < mat[i][j]:\n            i -= 1\n        else:\n            j += 1\n    print(f\"Key {key} not found\")\n\n\ndef main() -> None:\n    mat = [[2, 5, 7], [4, 8, 13], [9, 11, 15], [12, 17, 20]]\n    x = int(input(\"Enter the element to be searched:\"))\n    print(mat)\n    search_in_a_sorted_matrix(mat, len(mat), len(mat[0]), x)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    main()\n"
  },
  {
    "path": "matrix/sherman_morrison.py",
    "content": "from __future__ import annotations\n\nfrom typing import Any\n\n\nclass Matrix:\n    \"\"\"\n    <class Matrix>\n    Matrix structure.\n    \"\"\"\n\n    def __init__(self, row: int, column: int, default_value: float = 0) -> None:\n        \"\"\"\n        <method Matrix.__init__>\n        Initialize matrix with given size and default value.\n        Example:\n        >>> a = Matrix(2, 3, 1)\n        >>> a\n        Matrix consist of 2 rows and 3 columns\n        [1, 1, 1]\n        [1, 1, 1]\n        \"\"\"\n\n        self.row, self.column = row, column\n        self.array = [[default_value for _ in range(column)] for _ in range(row)]\n\n    def __str__(self) -> str:\n        \"\"\"\n        <method Matrix.__str__>\n        Return string representation of this matrix.\n        \"\"\"\n\n        # Prefix\n        s = f\"Matrix consist of {self.row} rows and {self.column} columns\\n\"\n\n        # Make string identifier\n        max_element_length = 0\n        for row_vector in self.array:\n            for obj in row_vector:\n                max_element_length = max(max_element_length, len(str(obj)))\n        string_format_identifier = f\"%{max_element_length}s\"\n\n        # Make string and return\n        def single_line(row_vector: list[float]) -> str:\n            nonlocal string_format_identifier\n            line = \"[\"\n            line += \", \".join(string_format_identifier % (obj,) for obj in row_vector)\n            line += \"]\"\n            return line\n\n        s += \"\\n\".join(single_line(row_vector) for row_vector in self.array)\n        return s\n\n    def __repr__(self) -> str:\n        return str(self)\n\n    def validate_indices(self, loc: tuple[int, int]) -> bool:\n        \"\"\"\n        <method Matrix.validate_indicies>\n        Check if given indices are valid to pick element from matrix.\n        Example:\n        >>> a = Matrix(2, 6, 0)\n        >>> a.validate_indices((2, 7))\n        False\n        >>> a.validate_indices((0, 0))\n        True\n        \"\"\"\n        if not (isinstance(loc, (list, tuple)) and len(loc) == 2):  # noqa: SIM114\n            return False\n        elif not (0 <= loc[0] < self.row and 0 <= loc[1] < self.column):\n            return False\n        else:\n            return True\n\n    def __getitem__(self, loc: tuple[int, int]) -> Any:\n        \"\"\"\n        <method Matrix.__getitem__>\n        Return array[row][column] where loc = (row, column).\n        Example:\n        >>> a = Matrix(3, 2, 7)\n        >>> a[1, 0]\n        7\n        \"\"\"\n        assert self.validate_indices(loc)\n        return self.array[loc[0]][loc[1]]\n\n    def __setitem__(self, loc: tuple[int, int], value: float) -> None:\n        \"\"\"\n        <method Matrix.__setitem__>\n        Set array[row][column] = value where loc = (row, column).\n        Example:\n        >>> a = Matrix(2, 3, 1)\n        >>> a[1, 2] = 51\n        >>> a\n        Matrix consist of 2 rows and 3 columns\n        [ 1,  1,  1]\n        [ 1,  1, 51]\n        \"\"\"\n        assert self.validate_indices(loc)\n        self.array[loc[0]][loc[1]] = value\n\n    def __add__(self, another: Matrix) -> Matrix:\n        \"\"\"\n        <method Matrix.__add__>\n        Return self + another.\n        Example:\n        >>> a = Matrix(2, 1, -4)\n        >>> b = Matrix(2, 1, 3)\n        >>> a+b\n        Matrix consist of 2 rows and 1 columns\n        [-1]\n        [-1]\n        \"\"\"\n\n        # Validation\n        assert isinstance(another, Matrix)\n        assert self.row == another.row\n        assert self.column == another.column\n\n        # Add\n        result = Matrix(self.row, self.column)\n        for r in range(self.row):\n            for c in range(self.column):\n                result[r, c] = self[r, c] + another[r, c]\n        return result\n\n    def __neg__(self) -> Matrix:\n        \"\"\"\n        <method Matrix.__neg__>\n        Return -self.\n        Example:\n        >>> a = Matrix(2, 2, 3)\n        >>> a[0, 1] = a[1, 0] = -2\n        >>> -a\n        Matrix consist of 2 rows and 2 columns\n        [-3,  2]\n        [ 2, -3]\n        \"\"\"\n\n        result = Matrix(self.row, self.column)\n        for r in range(self.row):\n            for c in range(self.column):\n                result[r, c] = -self[r, c]\n        return result\n\n    def __sub__(self, another: Matrix) -> Matrix:\n        return self + (-another)\n\n    def __mul__(self, another: float | Matrix) -> Matrix:\n        \"\"\"\n        <method Matrix.__mul__>\n        Return self * another.\n        Example:\n        >>> a = Matrix(2, 3, 1)\n        >>> a[0,2] = a[1,2] = 3\n        >>> a * -2\n        Matrix consist of 2 rows and 3 columns\n        [-2, -2, -6]\n        [-2, -2, -6]\n        \"\"\"\n\n        if isinstance(another, (int, float)):  # Scalar multiplication\n            result = Matrix(self.row, self.column)\n            for r in range(self.row):\n                for c in range(self.column):\n                    result[r, c] = self[r, c] * another\n            return result\n        elif isinstance(another, Matrix):  # Matrix multiplication\n            assert self.column == another.row\n            result = Matrix(self.row, another.column)\n            for r in range(self.row):\n                for c in range(another.column):\n                    for i in range(self.column):\n                        result[r, c] += self[r, i] * another[i, c]\n            return result\n        else:\n            msg = f\"Unsupported type given for another ({type(another)})\"\n            raise TypeError(msg)\n\n    def transpose(self) -> Matrix:\n        \"\"\"\n        <method Matrix.transpose>\n        Return self^T.\n        Example:\n        >>> a = Matrix(2, 3)\n        >>> for r in range(2):\n        ...     for c in range(3):\n        ...             a[r,c] = r*c\n        ...\n        >>> a.transpose()\n        Matrix consist of 3 rows and 2 columns\n        [0, 0]\n        [0, 1]\n        [0, 2]\n        \"\"\"\n\n        result = Matrix(self.column, self.row)\n        for r in range(self.row):\n            for c in range(self.column):\n                result[c, r] = self[r, c]\n        return result\n\n    def sherman_morrison(self, u: Matrix, v: Matrix) -> Any:\n        \"\"\"\n        <method Matrix.sherman_morrison>\n        Apply Sherman-Morrison formula in O(n^2).\n        To learn this formula, please look this:\n        https://en.wikipedia.org/wiki/Sherman%E2%80%93Morrison_formula\n        This method returns (A + uv^T)^(-1) where A^(-1) is self. Returns None if it's\n        impossible to calculate.\n        Warning: This method doesn't check if self is invertible.\n            Make sure self is invertible before execute this method.\n        Example:\n        >>> ainv = Matrix(3, 3, 0)\n        >>> for i in range(3): ainv[i,i] = 1\n        ...\n        >>> u = Matrix(3, 1, 0)\n        >>> u[0,0], u[1,0], u[2,0] = 1, 2, -3\n        >>> v = Matrix(3, 1, 0)\n        >>> v[0,0], v[1,0], v[2,0] = 4, -2, 5\n        >>> ainv.sherman_morrison(u, v)\n        Matrix consist of 3 rows and 3 columns\n        [  1.2857142857142856, -0.14285714285714285,   0.3571428571428571]\n        [  0.5714285714285714,   0.7142857142857143,   0.7142857142857142]\n        [ -0.8571428571428571,  0.42857142857142855,  -0.0714285714285714]\n        \"\"\"\n\n        # Size validation\n        assert isinstance(u, Matrix)\n        assert isinstance(v, Matrix)\n        assert self.row == self.column == u.row == v.row  # u, v should be column vector\n        assert u.column == v.column == 1  # u, v should be column vector\n\n        # Calculate\n        v_t = v.transpose()\n        numerator_factor = (v_t * self * u)[0, 0] + 1\n        if numerator_factor == 0:\n            return None  # It's not invertible\n        return self - ((self * u) * (v_t * self) * (1.0 / numerator_factor))\n\n\n# Testing\nif __name__ == \"__main__\":\n\n    def test1() -> None:\n        # a^(-1)\n        ainv = Matrix(3, 3, 0)\n        for i in range(3):\n            ainv[i, i] = 1\n        print(f\"a^(-1) is {ainv}\")\n        # u, v\n        u = Matrix(3, 1, 0)\n        u[0, 0], u[1, 0], u[2, 0] = 1, 2, -3\n        v = Matrix(3, 1, 0)\n        v[0, 0], v[1, 0], v[2, 0] = 4, -2, 5\n        print(f\"u is {u}\")\n        print(f\"v is {v}\")\n        print(f\"uv^T is {u * v.transpose()}\")\n        # Sherman Morrison\n        print(f\"(a + uv^T)^(-1) is {ainv.sherman_morrison(u, v)}\")\n\n    def test2() -> None:\n        import doctest\n\n        doctest.testmod()\n\n    test2()\n"
  },
  {
    "path": "matrix/spiral_print.py",
    "content": "\"\"\"\nThis program print the matrix in spiral form.\nThis problem has been solved through recursive way.\n      Matrix must satisfy below conditions\n        i) matrix should be only one or two dimensional\n        ii) number of column of all rows should be equal\n\"\"\"\n\n\ndef check_matrix(matrix: list[list[int]]) -> bool:\n    # must be\n    matrix = [list(row) for row in matrix]\n    if matrix and isinstance(matrix, list):\n        if isinstance(matrix[0], list):\n            prev_len = 0\n            for row in matrix:\n                if prev_len == 0:\n                    prev_len = len(row)\n                    result = True\n                else:\n                    result = prev_len == len(row)\n        else:\n            result = True\n    else:\n        result = False\n\n    return result\n\n\ndef spiral_print_clockwise(a: list[list[int]]) -> None:\n    \"\"\"\n    >>> spiral_print_clockwise([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])\n    1\n    2\n    3\n    4\n    8\n    12\n    11\n    10\n    9\n    5\n    6\n    7\n    \"\"\"\n    if check_matrix(a) and len(a) > 0:\n        a = [list(row) for row in a]\n        mat_row = len(a)\n        if isinstance(a[0], list):\n            mat_col = len(a[0])\n        else:\n            for dat in a:\n                print(dat)\n            return\n\n        # horizotal printing increasing\n        for i in range(mat_col):\n            print(a[0][i])\n        # vertical printing down\n        for i in range(1, mat_row):\n            print(a[i][mat_col - 1])\n        # horizotal printing decreasing\n        if mat_row > 1:\n            for i in range(mat_col - 2, -1, -1):\n                print(a[mat_row - 1][i])\n        # vertical printing up\n        for i in range(mat_row - 2, 0, -1):\n            print(a[i][0])\n        remain_mat = [row[1 : mat_col - 1] for row in a[1 : mat_row - 1]]\n        if len(remain_mat) > 0:\n            spiral_print_clockwise(remain_mat)\n        else:\n            return\n    else:\n        print(\"Not a valid matrix\")\n        return\n\n\n# Other Easy to understand Approach\n\n\ndef spiral_traversal(matrix: list[list]) -> list[int]:\n    \"\"\"\n    >>> spiral_traversal([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])\n    [1, 2, 3, 4, 8, 12, 11, 10, 9, 5, 6, 7]\n\n    Example:\n    matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]\n    Algorithm:\n        Step 1. first pop the 0 index list. (which is [1,2,3,4] and concatenate the\n                output of [step 2])\n        Step 2. Now perform matrix's Transpose operation (Change rows to column\n                and vice versa) and reverse the resultant matrix.\n        Step 3. Pass the output of [2nd step], to same recursive function till\n                base case hits.\n    Dry Run:\n    Stage 1.\n    [1, 2, 3, 4] +   spiral_traversal([\n        [8, 12], [7, 11], [6, 10], [5, 9]]\n     ])\n    Stage 2.\n    [1, 2, 3, 4, 8, 12] + spiral_traversal([\n        [11, 10, 9], [7, 6, 5]\n    ])\n    Stage 3.\n    [1, 2, 3, 4, 8, 12, 11, 10, 9] + spiral_traversal([\n        [5], [6], [7]\n    ])\n    Stage 4.\n    [1, 2, 3, 4, 8, 12, 11, 10, 9, 5] + spiral_traversal([\n        [5], [6], [7]\n    ])\n    Stage 5.\n    [1, 2, 3, 4, 8, 12, 11, 10, 9, 5] + spiral_traversal([[6, 7]])\n    Stage 6.\n    [1, 2, 3, 4, 8, 12, 11, 10, 9, 5, 6, 7] + spiral_traversal([])\n    \"\"\"\n    if matrix:\n        return list(matrix.pop(0)) + spiral_traversal(\n            [list(row) for row in zip(*matrix)][::-1]\n        )\n    else:\n        return []\n\n\n# driver code\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    a = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]\n    spiral_print_clockwise(a)\n"
  },
  {
    "path": "matrix/tests/__init__.py",
    "content": ""
  },
  {
    "path": "matrix/tests/pytest.ini",
    "content": "[pytest]\nmarkers =\n    mat_ops: tests for matrix operations\n"
  },
  {
    "path": "matrix/tests/test_matrix_operation.py",
    "content": "\"\"\"\nTesting here assumes that numpy and linalg is ALWAYS correct!!!!\n\nIf running from PyCharm you can place the following line in \"Additional Arguments\" for\nthe pytest run configuration\n-vv -m mat_ops -p no:cacheprovider\n\"\"\"\n\nimport logging\n\n# standard libraries\nimport sys\n\nimport numpy as np\nimport pytest\n\n# Custom/local libraries\nfrom matrix import matrix_operation as matop\n\nmat_a = [[12, 10], [3, 9]]\nmat_b = [[3, 4], [7, 4]]\nmat_c = [[3, 0, 2], [2, 0, -2], [0, 1, 1]]\nmat_d = [[3, 0, -2], [2, 0, 2], [0, 1, 1]]\nmat_e = [[3, 0, 2], [2, 0, -2], [0, 1, 1], [2, 0, -2]]\nmat_f = [1]\nmat_h = [2]\n\nlogger = logging.getLogger()\nlogger.level = logging.DEBUG\nstream_handler = logging.StreamHandler(sys.stdout)\nlogger.addHandler(stream_handler)\n\n\n@pytest.mark.mat_ops\n@pytest.mark.parametrize(\n    (\"mat1\", \"mat2\"), [(mat_a, mat_b), (mat_c, mat_d), (mat_d, mat_e), (mat_f, mat_h)]\n)\ndef test_addition(mat1, mat2):\n    if (np.array(mat1)).shape < (2, 2) or (np.array(mat2)).shape < (2, 2):\n        logger.info(f\"\\n\\t{test_addition.__name__} returned integer\")\n        with pytest.raises(TypeError):\n            matop.add(mat1, mat2)\n    elif (np.array(mat1)).shape == (np.array(mat2)).shape:\n        logger.info(f\"\\n\\t{test_addition.__name__} with same matrix dims\")\n        act = (np.array(mat1) + np.array(mat2)).tolist()\n        theo = matop.add(mat1, mat2)\n        assert theo == act\n    else:\n        logger.info(f\"\\n\\t{test_addition.__name__} with different matrix dims\")\n        with pytest.raises(ValueError):\n            matop.add(mat1, mat2)\n\n\n@pytest.mark.mat_ops\n@pytest.mark.parametrize(\n    (\"mat1\", \"mat2\"), [(mat_a, mat_b), (mat_c, mat_d), (mat_d, mat_e), (mat_f, mat_h)]\n)\ndef test_subtraction(mat1, mat2):\n    if (np.array(mat1)).shape < (2, 2) or (np.array(mat2)).shape < (2, 2):\n        logger.info(f\"\\n\\t{test_subtraction.__name__} returned integer\")\n        with pytest.raises(TypeError):\n            matop.subtract(mat1, mat2)\n    elif (np.array(mat1)).shape == (np.array(mat2)).shape:\n        logger.info(f\"\\n\\t{test_subtraction.__name__} with same matrix dims\")\n        act = (np.array(mat1) - np.array(mat2)).tolist()\n        theo = matop.subtract(mat1, mat2)\n        assert theo == act\n    else:\n        logger.info(f\"\\n\\t{test_subtraction.__name__} with different matrix dims\")\n        with pytest.raises(ValueError):\n            assert matop.subtract(mat1, mat2)\n\n\n@pytest.mark.mat_ops\n@pytest.mark.parametrize(\n    (\"mat1\", \"mat2\"), [(mat_a, mat_b), (mat_c, mat_d), (mat_d, mat_e), (mat_f, mat_h)]\n)\ndef test_multiplication(mat1, mat2):\n    if (np.array(mat1)).shape < (2, 2) or (np.array(mat2)).shape < (2, 2):\n        logger.info(f\"\\n\\t{test_multiplication.__name__} returned integer\")\n        with pytest.raises(TypeError):\n            matop.add(mat1, mat2)\n    elif (np.array(mat1)).shape == (np.array(mat2)).shape:\n        logger.info(f\"\\n\\t{test_multiplication.__name__} meets dim requirements\")\n        act = (np.matmul(mat1, mat2)).tolist()\n        theo = matop.multiply(mat1, mat2)\n        assert theo == act\n    else:\n        logger.info(\n            f\"\\n\\t{test_multiplication.__name__} does not meet dim requirements\"\n        )\n        with pytest.raises(ValueError):\n            assert matop.subtract(mat1, mat2)\n\n\n@pytest.mark.mat_ops\ndef test_scalar_multiply():\n    act = (3.5 * np.array(mat_a)).tolist()\n    theo = matop.scalar_multiply(mat_a, 3.5)\n    assert theo == act\n\n\n@pytest.mark.mat_ops\ndef test_identity():\n    act = (np.identity(5)).tolist()\n    theo = matop.identity(5)\n    assert theo == act\n\n\n@pytest.mark.mat_ops\n@pytest.mark.parametrize(\"mat\", [mat_a, mat_b, mat_c, mat_d, mat_e, mat_f])\ndef test_transpose(mat):\n    if (np.array(mat)).shape < (2, 2):\n        logger.info(f\"\\n\\t{test_transpose.__name__} returned integer\")\n        with pytest.raises(TypeError):\n            matop.transpose(mat)\n    else:\n        act = (np.transpose(mat)).tolist()\n        theo = matop.transpose(mat, return_map=False)\n        assert theo == act\n"
  },
  {
    "path": "matrix/validate_sudoku_board.py",
    "content": "\"\"\"\nLeetCode 36. Valid Sudoku\nhttps://leetcode.com/problems/valid-sudoku/\nhttps://en.wikipedia.org/wiki/Sudoku\n\nDetermine if a 9 x 9 Sudoku board is valid. Only the filled cells need to be\nvalidated according to the following rules:\n\n- Each row must contain the digits 1-9 without repetition.\n- Each column must contain the digits 1-9 without repetition.\n- Each of the nine 3 x 3 sub-boxes of the grid must contain the digits 1-9\n  without repetition.\n\nNote:\n\nA Sudoku board (partially filled) could be valid but is not necessarily\nsolvable.\n\nOnly the filled cells need to be validated according to the mentioned rules.\n\"\"\"\n\nfrom collections import defaultdict\n\nNUM_SQUARES = 9\nEMPTY_CELL = \".\"\n\n\ndef is_valid_sudoku_board(sudoku_board: list[list[str]]) -> bool:\n    \"\"\"\n    This function validates (but does not solve) a sudoku board.\n    The board may be valid but unsolvable.\n\n    >>> is_valid_sudoku_board([\n    ...  [\"5\",\"3\",\".\",\".\",\"7\",\".\",\".\",\".\",\".\"]\n    ... ,[\"6\",\".\",\".\",\"1\",\"9\",\"5\",\".\",\".\",\".\"]\n    ... ,[\".\",\"9\",\"8\",\".\",\".\",\".\",\".\",\"6\",\".\"]\n    ... ,[\"8\",\".\",\".\",\".\",\"6\",\".\",\".\",\".\",\"3\"]\n    ... ,[\"4\",\".\",\".\",\"8\",\".\",\"3\",\".\",\".\",\"1\"]\n    ... ,[\"7\",\".\",\".\",\".\",\"2\",\".\",\".\",\".\",\"6\"]\n    ... ,[\".\",\"6\",\".\",\".\",\".\",\".\",\"2\",\"8\",\".\"]\n    ... ,[\".\",\".\",\".\",\"4\",\"1\",\"9\",\".\",\".\",\"5\"]\n    ... ,[\".\",\".\",\".\",\".\",\"8\",\".\",\".\",\"7\",\"9\"]\n    ... ])\n    True\n    >>> is_valid_sudoku_board([\n    ...  [\"8\",\"3\",\".\",\".\",\"7\",\".\",\".\",\".\",\".\"]\n    ... ,[\"6\",\".\",\".\",\"1\",\"9\",\"5\",\".\",\".\",\".\"]\n    ... ,[\".\",\"9\",\"8\",\".\",\".\",\".\",\".\",\"6\",\".\"]\n    ... ,[\"8\",\".\",\".\",\".\",\"6\",\".\",\".\",\".\",\"3\"]\n    ... ,[\"4\",\".\",\".\",\"8\",\".\",\"3\",\".\",\".\",\"1\"]\n    ... ,[\"7\",\".\",\".\",\".\",\"2\",\".\",\".\",\".\",\"6\"]\n    ... ,[\".\",\"6\",\".\",\".\",\".\",\".\",\"2\",\"8\",\".\"]\n    ... ,[\".\",\".\",\".\",\"4\",\"1\",\"9\",\".\",\".\",\"5\"]\n    ... ,[\".\",\".\",\".\",\".\",\"8\",\".\",\".\",\"7\",\"9\"]\n    ... ])\n    False\n    >>> is_valid_sudoku_board([\n    ...  [\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\"]\n    ... ,[\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"1\",\"2\",\"3\"]\n    ... ,[\"7\",\"8\",\"9\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\"]\n    ... ,[\".\",\".\",\".\",\".\",\".\",\".\",\".\",\".\",\".\"]\n    ... ,[\".\",\".\",\".\",\".\",\".\",\".\",\".\",\".\",\".\"]\n    ... ,[\".\",\".\",\".\",\".\",\".\",\".\",\".\",\".\",\".\"]\n    ... ,[\".\",\".\",\".\",\".\",\".\",\".\",\".\",\".\",\".\"]\n    ... ,[\".\",\".\",\".\",\".\",\".\",\".\",\".\",\".\",\".\"]\n    ... ,[\".\",\".\",\".\",\".\",\".\",\".\",\".\",\".\",\".\"]\n    ... ])\n    True\n    >>> is_valid_sudoku_board([\n    ...  [\"1\",\"2\",\"3\",\".\",\".\",\".\",\".\",\".\",\".\"]\n    ... ,[\"4\",\"5\",\"6\",\".\",\".\",\".\",\".\",\".\",\".\"]\n    ... ,[\"7\",\"8\",\"9\",\".\",\".\",\".\",\".\",\".\",\".\"]\n    ... ,[\".\",\".\",\".\",\"4\",\"5\",\"6\",\".\",\".\",\".\"]\n    ... ,[\".\",\".\",\".\",\"7\",\"8\",\"9\",\".\",\".\",\".\"]\n    ... ,[\".\",\".\",\".\",\"1\",\"2\",\"3\",\".\",\".\",\".\"]\n    ... ,[\".\",\".\",\".\",\".\",\".\",\".\",\"7\",\"8\",\"9\"]\n    ... ,[\".\",\".\",\".\",\".\",\".\",\".\",\"1\",\"2\",\"3\"]\n    ... ,[\".\",\".\",\".\",\".\",\".\",\".\",\"4\",\"5\",\"6\"]\n    ... ])\n    True\n    >>> is_valid_sudoku_board([\n    ...  [\"1\",\"2\",\"3\",\".\",\".\",\".\",\"5\",\"6\",\"4\"]\n    ... ,[\"4\",\"5\",\"6\",\".\",\".\",\".\",\"8\",\"9\",\"7\"]\n    ... ,[\"7\",\"8\",\"9\",\".\",\".\",\".\",\"2\",\"3\",\"1\"]\n    ... ,[\".\",\".\",\".\",\"4\",\"5\",\"6\",\".\",\".\",\".\"]\n    ... ,[\".\",\".\",\".\",\"7\",\"8\",\"9\",\".\",\".\",\".\"]\n    ... ,[\".\",\".\",\".\",\"1\",\"2\",\"3\",\".\",\".\",\".\"]\n    ... ,[\"3\",\"1\",\"2\",\".\",\".\",\".\",\"7\",\"8\",\"9\"]\n    ... ,[\"6\",\"4\",\"5\",\".\",\".\",\".\",\"1\",\"2\",\"3\"]\n    ... ,[\"9\",\"7\",\"8\",\".\",\".\",\".\",\"4\",\"5\",\"6\"]\n    ... ])\n    True\n    >>> is_valid_sudoku_board([\n    ...  [\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\"]\n    ... ,[\"2\",\".\",\".\",\".\",\".\",\".\",\".\",\".\",\"8\"]\n    ... ,[\"3\",\".\",\".\",\".\",\".\",\".\",\".\",\".\",\"7\"]\n    ... ,[\"4\",\".\",\".\",\".\",\".\",\".\",\".\",\".\",\"6\"]\n    ... ,[\"5\",\".\",\".\",\".\",\".\",\".\",\".\",\".\",\"5\"]\n    ... ,[\"6\",\".\",\".\",\".\",\".\",\".\",\".\",\".\",\"4\"]\n    ... ,[\"7\",\".\",\".\",\".\",\".\",\".\",\".\",\".\",\"3\"]\n    ... ,[\"8\",\".\",\".\",\".\",\".\",\".\",\".\",\".\",\"2\"]\n    ... ,[\"9\",\"8\",\"7\",\"6\",\"5\",\"4\",\"3\",\"2\",\"1\"]\n    ... ])\n    False\n    >>> is_valid_sudoku_board([\n    ...  [\"1\",\"2\",\"3\",\"8\",\"9\",\"7\",\"5\",\"6\",\"4\"]\n    ... ,[\"4\",\"5\",\"6\",\"2\",\"3\",\"1\",\"8\",\"9\",\"7\"]\n    ... ,[\"7\",\"8\",\"9\",\"5\",\"6\",\"4\",\"2\",\"3\",\"1\"]\n    ... ,[\"2\",\"3\",\"1\",\"4\",\"5\",\"6\",\"9\",\"7\",\"8\"]\n    ... ,[\"5\",\"6\",\"4\",\"7\",\"8\",\"9\",\"3\",\"1\",\"2\"]\n    ... ,[\"8\",\"9\",\"7\",\"1\",\"2\",\"3\",\"6\",\"4\",\"5\"]\n    ... ,[\"3\",\"1\",\"2\",\"6\",\"4\",\"5\",\"7\",\"8\",\"9\"]\n    ... ,[\"6\",\"4\",\"5\",\"9\",\"7\",\"8\",\"1\",\"2\",\"3\"]\n    ... ,[\"9\",\"7\",\"8\",\"3\",\"1\",\"2\",\"4\",\"5\",\"6\"]\n    ... ])\n    True\n    >>> is_valid_sudoku_board([[\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"]])\n    Traceback (most recent call last):\n        ...\n    ValueError: Sudoku boards must be 9x9 squares.\n    >>> is_valid_sudoku_board(\n    ...        [[\"1\"], [\"2\"], [\"3\"], [\"4\"], [\"5\"], [\"6\"], [\"7\"], [\"8\"], [\"9\"]]\n    ...  )\n    Traceback (most recent call last):\n        ...\n    ValueError: Sudoku boards must be 9x9 squares.\n    \"\"\"\n    if len(sudoku_board) != NUM_SQUARES or (\n        any(len(row) != NUM_SQUARES for row in sudoku_board)\n    ):\n        error_message = f\"Sudoku boards must be {NUM_SQUARES}x{NUM_SQUARES} squares.\"\n        raise ValueError(error_message)\n\n    row_values: defaultdict[int, set[str]] = defaultdict(set)\n    col_values: defaultdict[int, set[str]] = defaultdict(set)\n    box_values: defaultdict[tuple[int, int], set[str]] = defaultdict(set)\n\n    for row in range(NUM_SQUARES):\n        for col in range(NUM_SQUARES):\n            value = sudoku_board[row][col]\n\n            if value == EMPTY_CELL:\n                continue\n\n            box = (row // 3, col // 3)\n\n            if (\n                value in row_values[row]\n                or value in col_values[col]\n                or value in box_values[box]\n            ):\n                return False\n\n            row_values[row].add(value)\n            col_values[col].add(value)\n            box_values[box].add(value)\n\n    return True\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n    from timeit import timeit\n\n    testmod()\n    print(timeit(\"is_valid_sudoku_board(valid_board)\", globals=globals()))\n    print(timeit(\"is_valid_sudoku_board(invalid_board)\", globals=globals()))\n"
  },
  {
    "path": "networking_flow/__init__.py",
    "content": ""
  },
  {
    "path": "networking_flow/ford_fulkerson.py",
    "content": "\"\"\"\nFord-Fulkerson Algorithm for Maximum Flow Problem\n* https://en.wikipedia.org/wiki/Ford%E2%80%93Fulkerson_algorithm\n\nDescription:\n    (1) Start with initial flow as 0\n    (2) Choose the augmenting path from source to sink and add the path to flow\n\"\"\"\n\ngraph = [\n    [0, 16, 13, 0, 0, 0],\n    [0, 0, 10, 12, 0, 0],\n    [0, 4, 0, 0, 14, 0],\n    [0, 0, 9, 0, 0, 20],\n    [0, 0, 0, 7, 0, 4],\n    [0, 0, 0, 0, 0, 0],\n]\n\n\ndef breadth_first_search(graph: list, source: int, sink: int, parents: list) -> bool:\n    \"\"\"\n    This function returns True if there is a node that has not iterated.\n\n    Args:\n        graph: Adjacency matrix of graph\n        source: Source\n        sink: Sink\n        parents: Parent list\n\n    Returns:\n        True if there is a node that has not iterated.\n\n    >>> breadth_first_search(graph, 0, 5, [-1, -1, -1, -1, -1, -1])\n    True\n    >>> breadth_first_search(graph, 0, 6, [-1, -1, -1, -1, -1, -1])\n    Traceback (most recent call last):\n        ...\n    IndexError: list index out of range\n    \"\"\"\n    visited = [False] * len(graph)  # Mark all nodes as not visited\n    queue = []  # breadth-first search queue\n\n    # Source node\n    queue.append(source)\n    visited[source] = True\n\n    while queue:\n        u = queue.pop(0)  # Pop the front node\n        # Traverse all adjacent nodes of u\n        for ind, node in enumerate(graph[u]):\n            if visited[ind] is False and node > 0:\n                queue.append(ind)\n                visited[ind] = True\n                parents[ind] = u\n    return visited[sink]\n\n\ndef ford_fulkerson(graph: list, source: int, sink: int) -> int:\n    \"\"\"\n    This function returns the maximum flow from source to sink in the given graph.\n\n    CAUTION: This function changes the given graph.\n\n    Args:\n        graph: Adjacency matrix of graph\n        source: Source\n        sink: Sink\n\n    Returns:\n        Maximum flow\n\n    >>> test_graph = [\n    ...     [0, 16, 13, 0, 0, 0],\n    ...     [0, 0, 10, 12, 0, 0],\n    ...     [0, 4, 0, 0, 14, 0],\n    ...     [0, 0, 9, 0, 0, 20],\n    ...     [0, 0, 0, 7, 0, 4],\n    ...     [0, 0, 0, 0, 0, 0],\n    ... ]\n    >>> ford_fulkerson(test_graph, 0, 5)\n    23\n    \"\"\"\n    # This array is filled by breadth-first search and to store path\n    parent = [-1] * (len(graph))\n    max_flow = 0\n\n    # While there is a path from source to sink\n    while breadth_first_search(graph, source, sink, parent):\n        path_flow = int(1e9)  # Infinite value\n        s = sink\n\n        while s != source:\n            # Find the minimum value in the selected path\n            path_flow = min(path_flow, graph[parent[s]][s])\n            s = parent[s]\n\n        max_flow += path_flow\n        v = sink\n\n        while v != source:\n            u = parent[v]\n            graph[u][v] -= path_flow\n            graph[v][u] += path_flow\n            v = parent[v]\n\n    return max_flow\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    print(f\"{ford_fulkerson(graph, source=0, sink=5) = }\")\n"
  },
  {
    "path": "networking_flow/minimum_cut.py",
    "content": "# Minimum cut on Ford_Fulkerson algorithm.\n\ntest_graph = [\n    [0, 16, 13, 0, 0, 0],\n    [0, 0, 10, 12, 0, 0],\n    [0, 4, 0, 0, 14, 0],\n    [0, 0, 9, 0, 0, 20],\n    [0, 0, 0, 7, 0, 4],\n    [0, 0, 0, 0, 0, 0],\n]\n\n\ndef bfs(graph, s, t, parent):\n    # Return True if there is node that has not iterated.\n    visited = [False] * len(graph)\n    queue = [s]\n    visited[s] = True\n\n    while queue:\n        u = queue.pop(0)\n        for ind in range(len(graph[u])):\n            if visited[ind] is False and graph[u][ind] > 0:\n                queue.append(ind)\n                visited[ind] = True\n                parent[ind] = u\n\n    return visited[t]\n\n\ndef mincut(graph, source, sink):\n    \"\"\"This array is filled by BFS and to store path\n    >>> mincut(test_graph, source=0, sink=5)\n    [(1, 3), (4, 3), (4, 5)]\n    \"\"\"\n    parent = [-1] * (len(graph))\n    max_flow = 0\n    res = []\n    temp = [i[:] for i in graph]  # Record original cut, copy.\n    while bfs(graph, source, sink, parent):\n        path_flow = float(\"Inf\")\n        s = sink\n\n        while s != source:\n            # Find the minimum value in select path\n            path_flow = min(path_flow, graph[parent[s]][s])\n            s = parent[s]\n\n        max_flow += path_flow\n        v = sink\n\n        while v != source:\n            u = parent[v]\n            graph[u][v] -= path_flow\n            graph[v][u] += path_flow\n            v = parent[v]\n\n    for i in range(len(graph)):\n        for j in range(len(graph[0])):\n            if graph[i][j] == 0 and temp[i][j] > 0:\n                res.append((i, j))\n\n    return res\n\n\nif __name__ == \"__main__\":\n    print(mincut(test_graph, source=0, sink=5))\n"
  },
  {
    "path": "neural_network/__init__.py",
    "content": ""
  },
  {
    "path": "neural_network/activation_functions/__init__.py",
    "content": ""
  },
  {
    "path": "neural_network/activation_functions/binary_step.py",
    "content": "\"\"\"\nThis script demonstrates the implementation of the Binary Step function.\n\nIt's an activation function in which the neuron is activated if the input is positive\nor 0, else it is deactivated\n\nIt's a simple activation function which is mentioned in this wikipedia article:\nhttps://en.wikipedia.org/wiki/Activation_function\n\"\"\"\n\nimport numpy as np\n\n\ndef binary_step(vector: np.ndarray) -> np.ndarray:\n    \"\"\"\n    Implements the binary step function\n\n    Parameters:\n        vector (ndarray): A vector that consists of numeric values\n\n    Returns:\n        vector (ndarray): Input vector after applying binary step function\n\n    >>> vector = np.array([-1.2, 0, 2, 1.45, -3.7, 0.3])\n    >>> binary_step(vector)\n    array([0, 1, 1, 1, 0, 1])\n    \"\"\"\n\n    return np.where(vector >= 0, 1, 0)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "neural_network/activation_functions/exponential_linear_unit.py",
    "content": "\"\"\"\nImplements the Exponential Linear Unit or ELU function.\n\nThe function takes a vector of K real numbers and a real number alpha as\ninput and then applies the ELU function to each element of the vector.\n\nScript inspired from its corresponding Wikipedia article\nhttps://en.wikipedia.org/wiki/Rectifier_(neural_networks)\n\"\"\"\n\nimport numpy as np\n\n\ndef exponential_linear_unit(vector: np.ndarray, alpha: float) -> np.ndarray:\n    \"\"\"\n         Implements the ELU activation function.\n         Parameters:\n             vector: the array containing input of elu activation\n             alpha: hyper-parameter\n         return:\n         elu (np.array): The input numpy array after applying elu.\n\n         Mathematically, f(x) = x, x>0 else (alpha * (e^x -1)), x<=0, alpha >=0\n\n    Examples:\n    >>> exponential_linear_unit(vector=np.array([2.3,0.6,-2,-3.8]), alpha=0.3)\n    array([ 2.3       ,  0.6       , -0.25939942, -0.29328877])\n\n    >>> exponential_linear_unit(vector=np.array([-9.2,-0.3,0.45,-4.56]), alpha=0.067)\n    array([-0.06699323, -0.01736518,  0.45      , -0.06629904])\n\n\n    \"\"\"\n    return np.where(vector > 0, vector, (alpha * (np.exp(vector) - 1)))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "neural_network/activation_functions/gaussian_error_linear_unit.py",
    "content": "\"\"\"\nThis script demonstrates an implementation of the Gaussian Error Linear Unit function.\n* https://en.wikipedia.org/wiki/Activation_function#Comparison_of_activation_functions\n\nThe function takes a vector of K real numbers as input and returns x * sigmoid(1.702*x).\nGaussian Error Linear Unit (GELU) is a high-performing neural network activation\nfunction.\n\nThis script is inspired by a corresponding research paper.\n* https://arxiv.org/abs/1606.08415\n\"\"\"\n\nimport numpy as np\n\n\ndef sigmoid(vector: np.ndarray) -> np.ndarray:\n    \"\"\"\n    Mathematical function sigmoid takes a vector x of K real numbers as input and\n    returns 1/ (1 + e^-x).\n    https://en.wikipedia.org/wiki/Sigmoid_function\n\n    >>> sigmoid(np.array([-1.0, 1.0, 2.0]))\n    array([0.26894142, 0.73105858, 0.88079708])\n    \"\"\"\n    return 1 / (1 + np.exp(-vector))\n\n\ndef gaussian_error_linear_unit(vector: np.ndarray) -> np.ndarray:\n    \"\"\"\n    Implements the Gaussian Error Linear Unit (GELU) function\n\n    Parameters:\n        vector (np.ndarray): A  numpy array of shape (1, n) consisting of real values\n\n    Returns:\n        gelu_vec (np.ndarray): The input numpy array, after applying gelu\n\n    Examples:\n    >>> gaussian_error_linear_unit(np.array([-1.0, 1.0, 2.0]))\n    array([-0.15420423,  0.84579577,  1.93565862])\n\n    >>> gaussian_error_linear_unit(np.array([-3]))\n    array([-0.01807131])\n    \"\"\"\n    return vector * sigmoid(1.702 * vector)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "neural_network/activation_functions/leaky_rectified_linear_unit.py",
    "content": "\"\"\"\nLeaky Rectified Linear Unit (Leaky ReLU)\n\nUse Case: Leaky ReLU addresses the problem of the vanishing gradient.\nFor more detailed information, you can refer to the following link:\nhttps://en.wikipedia.org/wiki/Rectifier_(neural_networks)#Leaky_ReLU\n\"\"\"\n\nimport numpy as np\n\n\ndef leaky_rectified_linear_unit(vector: np.ndarray, alpha: float) -> np.ndarray:\n    \"\"\"\n        Implements the LeakyReLU activation function.\n\n        Parameters:\n            vector (np.ndarray): The input array for LeakyReLU activation.\n            alpha (float): The slope for negative values.\n\n        Returns:\n            np.ndarray: The input array after applying the LeakyReLU activation.\n\n        Formula: f(x) = x if x > 0 else f(x) = alpha * x\n\n    Examples:\n    >>> leaky_rectified_linear_unit(vector=np.array([2.3,0.6,-2,-3.8]), alpha=0.3)\n    array([ 2.3 ,  0.6 , -0.6 , -1.14])\n\n    >>> leaky_rectified_linear_unit(np.array([-9.2, -0.3, 0.45, -4.56]), alpha=0.067)\n    array([-0.6164 , -0.0201 ,  0.45   , -0.30552])\n\n    \"\"\"\n    return np.where(vector > 0, vector, alpha * vector)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "neural_network/activation_functions/mish.py",
    "content": "\"\"\"\nMish Activation Function\n\nUse Case: Improved version of the ReLU activation function used in Computer Vision.\nFor more detailed information, you can refer to the following link:\nhttps://en.wikipedia.org/wiki/Rectifier_(neural_networks)#Mish\n\"\"\"\n\nimport numpy as np\n\nfrom .softplus import softplus\n\n\ndef mish(vector: np.ndarray) -> np.ndarray:\n    \"\"\"\n        Implements the Mish activation function.\n\n        Parameters:\n            vector (np.ndarray): The input array for Mish activation.\n\n        Returns:\n            np.ndarray: The input array after applying the Mish activation.\n\n        Formula:\n            f(x) = x * tanh(softplus(x)) = x * tanh(ln(1 + e^x))\n\n    Examples:\n    >>> mish(vector=np.array([2.3,0.6,-2,-3.8]))\n    array([ 2.26211893,  0.46613649, -0.25250148, -0.08405831])\n\n    >>> mish(np.array([-9.2, -0.3, 0.45, -4.56]))\n    array([-0.00092952, -0.15113318,  0.33152014, -0.04745745])\n\n    \"\"\"\n    return vector * np.tanh(softplus(vector))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "neural_network/activation_functions/rectified_linear_unit.py",
    "content": "\"\"\"\nThis script demonstrates the implementation of the ReLU function.\n\nIt's a kind of activation function defined as the positive part of its argument in the\ncontext of neural network.\nThe function takes a vector of K real numbers as input and then argmax(x, 0).\nAfter through ReLU, the element of the vector always 0 or real number.\n\nScript inspired from its corresponding Wikipedia article\nhttps://en.wikipedia.org/wiki/Rectifier_(neural_networks)\n\"\"\"\n\nfrom __future__ import annotations\n\nimport numpy as np\n\n\ndef relu(vector: list[float]):\n    \"\"\"\n    Implements the relu function\n\n    Parameters:\n        vector (np.array,list,tuple): A  numpy array of shape (1,n)\n        consisting of real values or a similar list,tuple\n\n\n    Returns:\n        relu_vec (np.array): The input numpy array, after applying\n        relu.\n\n    >>> vec = np.array([-1, 0, 5])\n    >>> relu(vec)\n    array([0, 0, 5])\n    \"\"\"\n\n    # compare two arrays and then return element-wise maxima.\n    return np.maximum(0, vector)\n\n\nif __name__ == \"__main__\":\n    print(np.array(relu([-1, 0, 5])))  # --> [0, 0, 5]\n"
  },
  {
    "path": "neural_network/activation_functions/scaled_exponential_linear_unit.py",
    "content": "\"\"\"\nImplements the Scaled Exponential Linear Unit or SELU function.\nThe function takes a vector of K real numbers and two real numbers\nalpha(default = 1.6732) & lambda (default = 1.0507) as input and\nthen applies the SELU function to each element of the vector.\nSELU is a self-normalizing activation function. It is a variant\nof the ELU. The main advantage of SELU is that we can be sure\nthat the output will always be standardized due to its\nself-normalizing behavior. That means there is no need to\ninclude Batch-Normalization layers.\nReferences :\nhttps://iq.opengenus.org/scaled-exponential-linear-unit/\n\"\"\"\n\nimport numpy as np\n\n\ndef scaled_exponential_linear_unit(\n    vector: np.ndarray, alpha: float = 1.6732, lambda_: float = 1.0507\n) -> np.ndarray:\n    \"\"\"\n    Applies the Scaled Exponential Linear Unit function to each element of the vector.\n    Parameters :\n        vector : np.ndarray\n        alpha : float (default = 1.6732)\n        lambda_ : float (default = 1.0507)\n\n    Returns : np.ndarray\n    Formula : f(x) = lambda_ * x if x > 0\n                     lambda_ * alpha * (e**x - 1) if x <= 0\n    Examples :\n    >>> scaled_exponential_linear_unit(vector=np.array([1.3, 3.7, 2.4]))\n    array([1.36591, 3.88759, 2.52168])\n\n    >>> scaled_exponential_linear_unit(vector=np.array([1.3, 4.7, 8.2]))\n    array([1.36591, 4.93829, 8.61574])\n    \"\"\"\n    return lambda_ * np.where(vector > 0, vector, alpha * (np.exp(vector) - 1))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "neural_network/activation_functions/soboleva_modified_hyperbolic_tangent.py",
    "content": "\"\"\"\nThis script implements the Soboleva Modified Hyperbolic Tangent function.\n\nThe function applies the Soboleva Modified Hyperbolic Tangent function\nto each element of the vector.\n\nMore details about the activation function can be found on:\nhttps://en.wikipedia.org/wiki/Soboleva_modified_hyperbolic_tangent\n\"\"\"\n\nimport numpy as np\n\n\ndef soboleva_modified_hyperbolic_tangent(\n    vector: np.ndarray, a_value: float, b_value: float, c_value: float, d_value: float\n) -> np.ndarray:\n    \"\"\"\n    Implements the Soboleva Modified Hyperbolic Tangent function\n\n    Parameters:\n        vector (ndarray): A vector that consists of numeric values\n        a_value (float): parameter a of the equation\n        b_value (float): parameter b of the equation\n        c_value (float): parameter c of the equation\n        d_value (float): parameter d of the equation\n\n    Returns:\n        vector (ndarray): Input array after applying SMHT function\n\n    >>> vector = np.array([5.4, -2.4, 6.3, -5.23, 3.27, 0.56])\n    >>> soboleva_modified_hyperbolic_tangent(vector, 0.2, 0.4, 0.6, 0.8)\n    array([ 0.11075085, -0.28236685,  0.07861169, -0.1180085 ,  0.22999056,\n            0.1566043 ])\n    \"\"\"\n\n    # Separate the numerator and denominator for simplicity\n    # Calculate the numerator and denominator element-wise\n    numerator = np.exp(a_value * vector) - np.exp(-b_value * vector)\n    denominator = np.exp(c_value * vector) + np.exp(-d_value * vector)\n\n    # Calculate and return the final result element-wise\n    return numerator / denominator\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "neural_network/activation_functions/softplus.py",
    "content": "\"\"\"\nSoftplus Activation Function\n\nUse Case: The Softplus function is a smooth approximation of the ReLU function.\nFor more detailed information, you can refer to the following link:\nhttps://en.wikipedia.org/wiki/Rectifier_(neural_networks)#Softplus\n\"\"\"\n\nimport numpy as np\n\n\ndef softplus(vector: np.ndarray) -> np.ndarray:\n    \"\"\"\n    Implements the Softplus activation function.\n\n    Parameters:\n        vector (np.ndarray): The input array for the Softplus activation.\n\n    Returns:\n        np.ndarray: The input array after applying the Softplus activation.\n\n    Formula: f(x) = ln(1 + e^x)\n\n    Examples:\n    >>> softplus(np.array([2.3, 0.6, -2, -3.8]))\n    array([2.39554546, 1.03748795, 0.12692801, 0.02212422])\n\n    >>> softplus(np.array([-9.2, -0.3, 0.45, -4.56]))\n    array([1.01034298e-04, 5.54355244e-01, 9.43248946e-01, 1.04077103e-02])\n    \"\"\"\n    return np.log(1 + np.exp(vector))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "neural_network/activation_functions/squareplus.py",
    "content": "\"\"\"\nSquareplus Activation Function\n\nUse Case: Squareplus designed to enhance positive values and suppress negative values.\nFor more detailed information, you can refer to the following link:\nhttps://en.wikipedia.org/wiki/Rectifier_(neural_networks)#Squareplus\n\"\"\"\n\nimport numpy as np\n\n\ndef squareplus(vector: np.ndarray, beta: float) -> np.ndarray:\n    \"\"\"\n    Implements the SquarePlus activation function.\n\n    Parameters:\n        vector (np.ndarray): The input array for the SquarePlus activation.\n        beta (float): size of the curved region\n\n    Returns:\n        np.ndarray: The input array after applying the SquarePlus activation.\n\n    Formula: f(x) = ( x + sqrt(x^2 + b) ) / 2\n\n    Examples:\n    >>> squareplus(np.array([2.3, 0.6, -2, -3.8]), beta=2)\n    array([2.5       , 1.06811457, 0.22474487, 0.12731349])\n\n    >>> squareplus(np.array([-9.2, -0.3, 0.45, -4.56]), beta=3)\n    array([0.0808119 , 0.72891979, 1.11977651, 0.15893419])\n    \"\"\"\n    return (vector + np.sqrt(vector**2 + beta)) / 2\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "neural_network/activation_functions/swish.py",
    "content": "\"\"\"\nThis script demonstrates the implementation of the Sigmoid Linear Unit (SiLU)\nor swish function.\n* https://en.wikipedia.org/wiki/Rectifier_(neural_networks)\n* https://en.wikipedia.org/wiki/Swish_function\n\nThe function takes a vector x of K real numbers as input and returns x * sigmoid(x).\nSwish is a smooth, non-monotonic function defined as f(x) = x * sigmoid(x).\nExtensive experiments shows that Swish consistently matches or outperforms ReLU\non deep networks applied to a variety of challenging domains such as\nimage classification and machine translation.\n\nThis script is inspired by a corresponding research paper.\n* https://arxiv.org/abs/1710.05941\n* https://blog.paperspace.com/swish-activation-function/\n\"\"\"\n\nimport numpy as np\n\n\ndef sigmoid(vector: np.ndarray) -> np.ndarray:\n    \"\"\"\n    Mathematical function sigmoid takes a vector x of K real numbers as input and\n    returns 1/ (1 + e^-x).\n    https://en.wikipedia.org/wiki/Sigmoid_function\n\n    >>> sigmoid(np.array([-1.0, 1.0, 2.0]))\n    array([0.26894142, 0.73105858, 0.88079708])\n    \"\"\"\n    return 1 / (1 + np.exp(-vector))\n\n\ndef sigmoid_linear_unit(vector: np.ndarray) -> np.ndarray:\n    \"\"\"\n    Implements the Sigmoid Linear Unit (SiLU) or swish function\n\n    Parameters:\n        vector (np.ndarray): A  numpy array consisting of real values\n\n    Returns:\n        swish_vec (np.ndarray): The input numpy array, after applying swish\n\n    Examples:\n    >>> sigmoid_linear_unit(np.array([-1.0, 1.0, 2.0]))\n    array([-0.26894142,  0.73105858,  1.76159416])\n\n    >>> sigmoid_linear_unit(np.array([-2]))\n    array([-0.23840584])\n    \"\"\"\n    return vector * sigmoid(vector)\n\n\ndef swish(vector: np.ndarray, trainable_parameter: int) -> np.ndarray:\n    \"\"\"\n    Parameters:\n        vector (np.ndarray): A  numpy array consisting of real values\n        trainable_parameter: Use to implement various Swish Activation Functions\n\n    Returns:\n        swish_vec (np.ndarray): The input numpy array, after applying swish\n\n    Examples:\n    >>> swish(np.array([-1.0, 1.0, 2.0]), 2)\n    array([-0.11920292,  0.88079708,  1.96402758])\n\n    >>> swish(np.array([-2]), 1)\n    array([-0.23840584])\n    \"\"\"\n    return vector * sigmoid(trainable_parameter * vector)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "neural_network/back_propagation_neural_network.py",
    "content": "#!/usr/bin/python\n\n\"\"\"\n\nA Framework of Back Propagation Neural Network (BP) model\n\nEasy to use:\n    * add many layers as you want ! ! !\n    * clearly see how the loss decreasing\nEasy to expand:\n    * more activation functions\n    * more loss functions\n    * more optimization method\n\nAuthor: Stephen Lee\nGithub : https://github.com/RiptideBo\nDate: 2017.11.23\n\n\"\"\"\n\nimport numpy as np\nfrom matplotlib import pyplot as plt\n\n\ndef sigmoid(x: np.ndarray) -> np.ndarray:\n    return 1 / (1 + np.exp(-x))\n\n\nclass DenseLayer:\n    \"\"\"\n    Layers of BP neural network\n    \"\"\"\n\n    def __init__(\n        self, units, activation=None, learning_rate=None, is_input_layer=False\n    ):\n        \"\"\"\n        common connected layer of bp network\n        :param units: numbers of neural units\n        :param activation: activation function\n        :param learning_rate: learning rate for paras\n        :param is_input_layer: whether it is input layer or not\n        \"\"\"\n        self.units = units\n        self.weight = None\n        self.bias = None\n        self.activation = activation\n        if learning_rate is None:\n            learning_rate = 0.3\n        self.learn_rate = learning_rate\n        self.is_input_layer = is_input_layer\n\n    def initializer(self, back_units):\n        rng = np.random.default_rng()\n        self.weight = np.asmatrix(rng.normal(0, 0.5, (self.units, back_units)))\n        self.bias = np.asmatrix(rng.normal(0, 0.5, self.units)).T\n        if self.activation is None:\n            self.activation = sigmoid\n\n    def cal_gradient(self):\n        # activation function may be sigmoid or linear\n        if self.activation == sigmoid:\n            gradient_mat = np.dot(self.output, (1 - self.output).T)\n            gradient_activation = np.diag(np.diag(gradient_mat))\n        else:\n            gradient_activation = 1\n        return gradient_activation\n\n    def forward_propagation(self, xdata):\n        self.xdata = xdata\n        if self.is_input_layer:\n            # input layer\n            self.wx_plus_b = xdata\n            self.output = xdata\n            return xdata\n        else:\n            self.wx_plus_b = np.dot(self.weight, self.xdata) - self.bias\n            self.output = self.activation(self.wx_plus_b)\n            return self.output\n\n    def back_propagation(self, gradient):\n        gradient_activation = self.cal_gradient()  # i * i 维\n        gradient = np.asmatrix(np.dot(gradient.T, gradient_activation))\n\n        self._gradient_weight = np.asmatrix(self.xdata)\n        self._gradient_bias = -1\n        self._gradient_x = self.weight\n\n        self.gradient_weight = np.dot(gradient.T, self._gradient_weight.T)\n        self.gradient_bias = gradient * self._gradient_bias\n        self.gradient = np.dot(gradient, self._gradient_x).T\n        # upgrade: the Negative gradient direction\n        self.weight = self.weight - self.learn_rate * self.gradient_weight\n        self.bias = self.bias - self.learn_rate * self.gradient_bias.T\n        # updates the weights and bias according to learning rate (0.3 if undefined)\n        return self.gradient\n\n\nclass BPNN:\n    \"\"\"\n    Back Propagation Neural Network model\n    \"\"\"\n\n    def __init__(self):\n        self.layers = []\n        self.train_mse = []\n        self.fig_loss = plt.figure()\n        self.ax_loss = self.fig_loss.add_subplot(1, 1, 1)\n\n    def add_layer(self, layer):\n        self.layers.append(layer)\n\n    def build(self):\n        for i, layer in enumerate(self.layers[:]):\n            if i < 1:\n                layer.is_input_layer = True\n            else:\n                layer.initializer(self.layers[i - 1].units)\n\n    def summary(self):\n        for i, layer in enumerate(self.layers[:]):\n            print(f\"------- layer {i} -------\")\n            print(\"weight.shape \", np.shape(layer.weight))\n            print(\"bias.shape \", np.shape(layer.bias))\n\n    def train(self, xdata, ydata, train_round, accuracy):\n        self.train_round = train_round\n        self.accuracy = accuracy\n\n        self.ax_loss.hlines(self.accuracy, 0, self.train_round * 1.1)\n\n        x_shape = np.shape(xdata)\n        for _ in range(train_round):\n            all_loss = 0\n            for row in range(x_shape[0]):\n                _xdata = np.asmatrix(xdata[row, :]).T\n                _ydata = np.asmatrix(ydata[row, :]).T\n\n                # forward propagation\n                for layer in self.layers:\n                    _xdata = layer.forward_propagation(_xdata)\n\n                loss, gradient = self.cal_loss(_ydata, _xdata)\n                all_loss = all_loss + loss\n\n                # back propagation: the input_layer does not upgrade\n                for layer in self.layers[:0:-1]:\n                    gradient = layer.back_propagation(gradient)\n\n            mse = all_loss / x_shape[0]\n            self.train_mse.append(mse)\n\n            self.plot_loss()\n\n            if mse < self.accuracy:\n                print(\"----达到精度----\")\n                return mse\n        return None\n\n    def cal_loss(self, ydata, ydata_):\n        self.loss = np.sum(np.power((ydata - ydata_), 2))\n        self.loss_gradient = 2 * (ydata_ - ydata)\n        # vector (shape is the same as _ydata.shape)\n        return self.loss, self.loss_gradient\n\n    def plot_loss(self):\n        if self.ax_loss.lines:\n            self.ax_loss.lines.remove(self.ax_loss.lines[0])\n        self.ax_loss.plot(self.train_mse, \"r-\")\n        plt.ion()\n        plt.xlabel(\"step\")\n        plt.ylabel(\"loss\")\n        plt.show()\n        plt.pause(0.1)\n\n\ndef example():\n    rng = np.random.default_rng()\n    x = rng.normal(size=(10, 10))\n    y = np.asarray(\n        [\n            [0.8, 0.4],\n            [0.4, 0.3],\n            [0.34, 0.45],\n            [0.67, 0.32],\n            [0.88, 0.67],\n            [0.78, 0.77],\n            [0.55, 0.66],\n            [0.55, 0.43],\n            [0.54, 0.1],\n            [0.1, 0.5],\n        ]\n    )\n    model = BPNN()\n    for i in (10, 20, 30, 2):\n        model.add_layer(DenseLayer(i))\n    model.build()\n    model.summary()\n    model.train(xdata=x, ydata=y, train_round=100, accuracy=0.01)\n\n\nif __name__ == \"__main__\":\n    example()\n"
  },
  {
    "path": "neural_network/convolution_neural_network.py",
    "content": "\"\"\"\n - - - - - -- - - - - - - - - - - - - - - - - - - - - - -\nName - - CNN - Convolution Neural Network For Photo Recognizing\nGoal - - Recognize Handwriting Word Photo\nDetail: Total 5 layers neural network\n        * Convolution layer\n        * Pooling layer\n        * Input layer layer of BP\n        * Hidden layer of BP\n        * Output layer of BP\nAuthor: Stephen Lee\nGithub: 245885195@qq.com\nDate: 2017.9.20\n- - - - - -- - - - - - - - - - - - - - - - - - - - - - -\n\"\"\"\n\nimport pickle\n\nimport numpy as np\nfrom matplotlib import pyplot as plt\n\n\nclass CNN:\n    def __init__(\n        self, conv1_get, size_p1, bp_num1, bp_num2, bp_num3, rate_w=0.2, rate_t=0.2\n    ):\n        \"\"\"\n        :param conv1_get: [a,c,d], size, number, step of convolution kernel\n        :param size_p1: pooling size\n        :param bp_num1: units number of flatten layer\n        :param bp_num2: units number of hidden layer\n        :param bp_num3: units number of output layer\n        :param rate_w: rate of weight learning\n        :param rate_t: rate of threshold learning\n        \"\"\"\n        self.num_bp1 = bp_num1\n        self.num_bp2 = bp_num2\n        self.num_bp3 = bp_num3\n        self.conv1 = conv1_get[:2]\n        self.step_conv1 = conv1_get[2]\n        self.size_pooling1 = size_p1\n        self.rate_weight = rate_w\n        self.rate_thre = rate_t\n        rng = np.random.default_rng()\n        self.w_conv1 = [\n            np.asmatrix(-1 * rng.random((self.conv1[0], self.conv1[0])) + 0.5)\n            for i in range(self.conv1[1])\n        ]\n        self.wkj = np.asmatrix(-1 * rng.random((self.num_bp3, self.num_bp2)) + 0.5)\n        self.vji = np.asmatrix(-1 * rng.random((self.num_bp2, self.num_bp1)) + 0.5)\n        self.thre_conv1 = -2 * rng.random(self.conv1[1]) + 1\n        self.thre_bp2 = -2 * rng.random(self.num_bp2) + 1\n        self.thre_bp3 = -2 * rng.random(self.num_bp3) + 1\n\n    def save_model(self, save_path):\n        # save model dict with pickle\n        model_dic = {\n            \"num_bp1\": self.num_bp1,\n            \"num_bp2\": self.num_bp2,\n            \"num_bp3\": self.num_bp3,\n            \"conv1\": self.conv1,\n            \"step_conv1\": self.step_conv1,\n            \"size_pooling1\": self.size_pooling1,\n            \"rate_weight\": self.rate_weight,\n            \"rate_thre\": self.rate_thre,\n            \"w_conv1\": self.w_conv1,\n            \"wkj\": self.wkj,\n            \"vji\": self.vji,\n            \"thre_conv1\": self.thre_conv1,\n            \"thre_bp2\": self.thre_bp2,\n            \"thre_bp3\": self.thre_bp3,\n        }\n        with open(save_path, \"wb\") as f:\n            pickle.dump(model_dic, f)\n\n        print(f\"Model saved: {save_path}\")\n\n    @classmethod\n    def read_model(cls, model_path):\n        # read saved model\n        with open(model_path, \"rb\") as f:\n            model_dic = pickle.load(f)  # noqa: S301\n\n        conv_get = model_dic.get(\"conv1\")\n        conv_get.append(model_dic.get(\"step_conv1\"))\n        size_p1 = model_dic.get(\"size_pooling1\")\n        bp1 = model_dic.get(\"num_bp1\")\n        bp2 = model_dic.get(\"num_bp2\")\n        bp3 = model_dic.get(\"num_bp3\")\n        r_w = model_dic.get(\"rate_weight\")\n        r_t = model_dic.get(\"rate_thre\")\n        # create model instance\n        conv_ins = CNN(conv_get, size_p1, bp1, bp2, bp3, r_w, r_t)\n        # modify model parameter\n        conv_ins.w_conv1 = model_dic.get(\"w_conv1\")\n        conv_ins.wkj = model_dic.get(\"wkj\")\n        conv_ins.vji = model_dic.get(\"vji\")\n        conv_ins.thre_conv1 = model_dic.get(\"thre_conv1\")\n        conv_ins.thre_bp2 = model_dic.get(\"thre_bp2\")\n        conv_ins.thre_bp3 = model_dic.get(\"thre_bp3\")\n        return conv_ins\n\n    def sig(self, x):\n        return 1 / (1 + np.exp(-1 * x))\n\n    def do_round(self, x):\n        return round(x, 3)\n\n    def convolute(self, data, convs, w_convs, thre_convs, conv_step):\n        # convolution process\n        size_conv = convs[0]\n        num_conv = convs[1]\n        size_data = np.shape(data)[0]\n        # get the data slice of original image data, data_focus\n        data_focus = []\n        for i_focus in range(0, size_data - size_conv + 1, conv_step):\n            for j_focus in range(0, size_data - size_conv + 1, conv_step):\n                focus = data[\n                    i_focus : i_focus + size_conv, j_focus : j_focus + size_conv\n                ]\n                data_focus.append(focus)\n        # calculate the feature map of every single kernel, and saved as list of matrix\n        data_featuremap = []\n        size_feature_map = int((size_data - size_conv) / conv_step + 1)\n        for i_map in range(num_conv):\n            featuremap = []\n            for i_focus in range(len(data_focus)):\n                net_focus = (\n                    np.sum(np.multiply(data_focus[i_focus], w_convs[i_map]))\n                    - thre_convs[i_map]\n                )\n                featuremap.append(self.sig(net_focus))\n            featuremap = np.asmatrix(featuremap).reshape(\n                size_feature_map, size_feature_map\n            )\n            data_featuremap.append(featuremap)\n\n        # expanding the data slice to one dimension\n        focus1_list = []\n        for each_focus in data_focus:\n            focus1_list.extend(self.Expand_Mat(each_focus))\n        focus_list = np.asarray(focus1_list)\n        return focus_list, data_featuremap\n\n    def pooling(self, featuremaps, size_pooling, pooling_type=\"average_pool\"):\n        # pooling process\n        size_map = len(featuremaps[0])\n        size_pooled = int(size_map / size_pooling)\n        featuremap_pooled = []\n        for i_map in range(len(featuremaps)):\n            feature_map = featuremaps[i_map]\n            map_pooled = []\n            for i_focus in range(0, size_map, size_pooling):\n                for j_focus in range(0, size_map, size_pooling):\n                    focus = feature_map[\n                        i_focus : i_focus + size_pooling,\n                        j_focus : j_focus + size_pooling,\n                    ]\n                    if pooling_type == \"average_pool\":\n                        # average pooling\n                        map_pooled.append(np.average(focus))\n                    elif pooling_type == \"max_pooling\":\n                        # max pooling\n                        map_pooled.append(np.max(focus))\n            map_pooled = np.asmatrix(map_pooled).reshape(size_pooled, size_pooled)\n            featuremap_pooled.append(map_pooled)\n        return featuremap_pooled\n\n    def _expand(self, data):\n        # expanding three dimension data to one dimension list\n        data_expanded = []\n        for i in range(len(data)):\n            shapes = np.shape(data[i])\n            data_listed = data[i].reshape(1, shapes[0] * shapes[1])\n            data_listed = data_listed.getA().tolist()[0]\n            data_expanded.extend(data_listed)\n        data_expanded = np.asarray(data_expanded)\n        return data_expanded\n\n    def _expand_mat(self, data_mat):\n        # expanding matrix to one dimension list\n        data_mat = np.asarray(data_mat)\n        shapes = np.shape(data_mat)\n        data_expanded = data_mat.reshape(1, shapes[0] * shapes[1])\n        return data_expanded\n\n    def _calculate_gradient_from_pool(\n        self, out_map, pd_pool, num_map, size_map, size_pooling\n    ):\n        \"\"\"\n        calculate the gradient from the data slice of pool layer\n        pd_pool: list of matrix\n        out_map: the shape of data slice(size_map*size_map)\n        return: pd_all: list of matrix, [num, size_map, size_map]\n        \"\"\"\n        pd_all = []\n        i_pool = 0\n        for i_map in range(num_map):\n            pd_conv1 = np.ones((size_map, size_map))\n            for i in range(0, size_map, size_pooling):\n                for j in range(0, size_map, size_pooling):\n                    pd_conv1[i : i + size_pooling, j : j + size_pooling] = pd_pool[\n                        i_pool\n                    ]\n                    i_pool = i_pool + 1\n            pd_conv2 = np.multiply(\n                pd_conv1, np.multiply(out_map[i_map], (1 - out_map[i_map]))\n            )\n            pd_all.append(pd_conv2)\n        return pd_all\n\n    def train(\n        self, patterns, datas_train, datas_teach, n_repeat, error_accuracy, draw_e=bool\n    ):\n        # model training\n        print(\"----------------------Start Training-------------------------\")\n        print((\" - - Shape: Train_Data  \", np.shape(datas_train)))\n        print((\" - - Shape: Teach_Data  \", np.shape(datas_teach)))\n        rp = 0\n        all_mse = []\n        mse = 10000\n        while rp < n_repeat and mse >= error_accuracy:\n            error_count = 0\n            print(f\"-------------Learning Time {rp}--------------\")\n            for p in range(len(datas_train)):\n                # print('------------Learning Image: %d--------------'%p)\n                data_train = np.asmatrix(datas_train[p])\n                data_teach = np.asarray(datas_teach[p])\n                data_focus1, data_conved1 = self.convolute(\n                    data_train,\n                    self.conv1,\n                    self.w_conv1,\n                    self.thre_conv1,\n                    conv_step=self.step_conv1,\n                )\n                data_pooled1 = self.pooling(data_conved1, self.size_pooling1)\n                shape_featuremap1 = np.shape(data_conved1)\n                \"\"\"\n                print('  -----original shape   ', np.shape(data_train))\n                print('  ---- after convolution  ',np.shape(data_conv1))\n                print('  -----after pooling  ',np.shape(data_pooled1))\n               \"\"\"\n                data_bp_input = self._expand(data_pooled1)\n                bp_out1 = data_bp_input\n\n                bp_net_j = np.dot(bp_out1, self.vji.T) - self.thre_bp2\n                bp_out2 = self.sig(bp_net_j)\n                bp_net_k = np.dot(bp_out2, self.wkj.T) - self.thre_bp3\n                bp_out3 = self.sig(bp_net_k)\n\n                # --------------Model Leaning ------------------------\n                # calculate error and gradient---------------\n                pd_k_all = np.multiply(\n                    (data_teach - bp_out3), np.multiply(bp_out3, (1 - bp_out3))\n                )\n                pd_j_all = np.multiply(\n                    np.dot(pd_k_all, self.wkj), np.multiply(bp_out2, (1 - bp_out2))\n                )\n                pd_i_all = np.dot(pd_j_all, self.vji)\n\n                pd_conv1_pooled = pd_i_all / (self.size_pooling1 * self.size_pooling1)\n                pd_conv1_pooled = pd_conv1_pooled.T.getA().tolist()\n                pd_conv1_all = self._calculate_gradient_from_pool(\n                    data_conved1,\n                    pd_conv1_pooled,\n                    shape_featuremap1[0],\n                    shape_featuremap1[1],\n                    self.size_pooling1,\n                )\n                # weight and threshold learning process---------\n                # convolution layer\n                for k_conv in range(self.conv1[1]):\n                    pd_conv_list = self._expand_mat(pd_conv1_all[k_conv])\n                    delta_w = self.rate_weight * np.dot(pd_conv_list, data_focus1)\n\n                    self.w_conv1[k_conv] = self.w_conv1[k_conv] + delta_w.reshape(\n                        (self.conv1[0], self.conv1[0])\n                    )\n\n                    self.thre_conv1[k_conv] = (\n                        self.thre_conv1[k_conv]\n                        - np.sum(pd_conv1_all[k_conv]) * self.rate_thre\n                    )\n                # all connected layer\n                self.wkj = self.wkj + pd_k_all.T * bp_out2 * self.rate_weight\n                self.vji = self.vji + pd_j_all.T * bp_out1 * self.rate_weight\n                self.thre_bp3 = self.thre_bp3 - pd_k_all * self.rate_thre\n                self.thre_bp2 = self.thre_bp2 - pd_j_all * self.rate_thre\n                # calculate the sum error of all single image\n                errors = np.sum(abs(data_teach - bp_out3))\n                error_count += errors\n                # print('   ----Teach      ',data_teach)\n                # print('   ----BP_output  ',bp_out3)\n            rp = rp + 1\n            mse = error_count / patterns\n            all_mse.append(mse)\n\n        def draw_error():\n            yplot = [error_accuracy for i in range(int(n_repeat * 1.2))]\n            plt.plot(all_mse, \"+-\")\n            plt.plot(yplot, \"r--\")\n            plt.xlabel(\"Learning Times\")\n            plt.ylabel(\"All_mse\")\n            plt.grid(True, alpha=0.5)\n            plt.show()\n\n        print(\"------------------Training Complete---------------------\")\n        print((\" - - Training epoch: \", rp, f\"     - - Mse: {mse:.6f}\"))\n        if draw_e:\n            draw_error()\n        return mse\n\n    def predict(self, datas_test):\n        # model predict\n        produce_out = []\n        print(\"-------------------Start Testing-------------------------\")\n        print((\" - - Shape: Test_Data  \", np.shape(datas_test)))\n        for p in range(len(datas_test)):\n            data_test = np.asmatrix(datas_test[p])\n            _data_focus1, data_conved1 = self.convolute(\n                data_test,\n                self.conv1,\n                self.w_conv1,\n                self.thre_conv1,\n                conv_step=self.step_conv1,\n            )\n            data_pooled1 = self.pooling(data_conved1, self.size_pooling1)\n            data_bp_input = self._expand(data_pooled1)\n\n            bp_out1 = data_bp_input\n            bp_net_j = bp_out1 * self.vji.T - self.thre_bp2\n            bp_out2 = self.sig(bp_net_j)\n            bp_net_k = bp_out2 * self.wkj.T - self.thre_bp3\n            bp_out3 = self.sig(bp_net_k)\n            produce_out.extend(bp_out3.getA().tolist())\n        res = [list(map(self.do_round, each)) for each in produce_out]\n        return np.asarray(res)\n\n    def convolution(self, data):\n        # return the data of image after convoluting process so we can check it out\n        data_test = np.asmatrix(data)\n        _data_focus1, data_conved1 = self.convolute(\n            data_test,\n            self.conv1,\n            self.w_conv1,\n            self.thre_conv1,\n            conv_step=self.step_conv1,\n        )\n        data_pooled1 = self.pooling(data_conved1, self.size_pooling1)\n\n        return data_conved1, data_pooled1\n\n\nif __name__ == \"__main__\":\n    \"\"\"\n    I will put the example in another file\n    \"\"\"\n"
  },
  {
    "path": "neural_network/gan.py_tf",
    "content": "import matplotlib.gridspec as gridspec\nimport matplotlib.pyplot as plt\nimport numpy as np\nfrom sklearn.utils import shuffle\nimport input_data\n\nrandom_numer = 42\n\nnp.random.seed(random_numer)\n\n\ndef ReLu(x):\n    mask = (x > 0) * 1.0\n    return mask * x\n\n\ndef d_ReLu(x):\n    mask = (x > 0) * 1.0\n    return mask\n\n\ndef arctan(x):\n    return np.arctan(x)\n\n\ndef d_arctan(x):\n    return 1 / (1 + x ** 2)\n\n\ndef log(x):\n    return 1 / (1 + np.exp(-1 * x))\n\n\ndef d_log(x):\n    return log(x) * (1 - log(x))\n\n\ndef tanh(x):\n    return np.tanh(x)\n\n\ndef d_tanh(x):\n    return 1 - np.tanh(x) ** 2\n\n\ndef plot(samples):\n    fig = plt.figure(figsize=(4, 4))\n    gs = gridspec.GridSpec(4, 4)\n    gs.update(wspace=0.05, hspace=0.05)\n\n    for i, sample in enumerate(samples):\n        ax = plt.subplot(gs[i])\n        plt.axis(\"off\")\n        ax.set_xticklabels([])\n        ax.set_yticklabels([])\n        ax.set_aspect(\"equal\")\n        plt.imshow(sample.reshape(28, 28), cmap=\"Greys_r\")\n\n    return fig\n\n\nif __name__ == \"__main__\":\n    # 1. Load Data and declare hyper\n    print(\"--------- Load Data ----------\")\n    mnist = input_data.read_data_sets(\"MNIST_data\", one_hot=False)\n    temp = mnist.test\n    images, labels = temp.images, temp.labels\n    images, labels = shuffle(np.asarray(images), np.asarray(labels))\n    num_epoch = 10\n    learing_rate = 0.00009\n    G_input = 100\n    hidden_input, hidden_input2, hidden_input3 = 128, 256, 346\n    hidden_input4, hidden_input5, hidden_input6 = 480, 560, 686\n\n    print(\"--------- Declare Hyper Parameters ----------\")\n    # 2. Declare Weights\n    D_W1 = (\n        np.random.normal(size=(784, hidden_input), scale=(1.0 / np.sqrt(784 / 2.0)))\n        * 0.002\n    )\n    # D_b1 = np.random.normal(size=(128),scale=(1. / np.sqrt(128 / 2.)))       *0.002\n    D_b1 = np.zeros(hidden_input)\n\n    D_W2 = (\n        np.random.normal(\n            size=(hidden_input, 1), scale=(1.0 / np.sqrt(hidden_input / 2.0))\n        )\n        * 0.002\n    )\n    # D_b2 = np.random.normal(size=(1),scale=(1. / np.sqrt(1 / 2.)))           *0.002\n    D_b2 = np.zeros(1)\n\n    G_W1 = (\n        np.random.normal(\n            size=(G_input, hidden_input), scale=(1.0 / np.sqrt(G_input / 2.0))\n        )\n        * 0.002\n    )\n    # G_b1 = np.random.normal(size=(128),scale=(1. / np.sqrt(128 / 2.)))      *0.002\n    G_b1 = np.zeros(hidden_input)\n\n    G_W2 = (\n        np.random.normal(\n            size=(hidden_input, hidden_input2),\n            scale=(1.0 / np.sqrt(hidden_input / 2.0)),\n        )\n        * 0.002\n    )\n    # G_b1 = np.random.normal(size=(128),scale=(1. / np.sqrt(128 / 2.)))      *0.002\n    G_b2 = np.zeros(hidden_input2)\n\n    G_W3 = (\n        np.random.normal(\n            size=(hidden_input2, hidden_input3),\n            scale=(1.0 / np.sqrt(hidden_input2 / 2.0)),\n        )\n        * 0.002\n    )\n    # G_b1 = np.random.normal(size=(128),scale=(1. / np.sqrt(128 / 2.)))      *0.002\n    G_b3 = np.zeros(hidden_input3)\n\n    G_W4 = (\n        np.random.normal(\n            size=(hidden_input3, hidden_input4),\n            scale=(1.0 / np.sqrt(hidden_input3 / 2.0)),\n        )\n        * 0.002\n    )\n    # G_b1 = np.random.normal(size=(128),scale=(1. / np.sqrt(128 / 2.)))      *0.002\n    G_b4 = np.zeros(hidden_input4)\n\n    G_W5 = (\n        np.random.normal(\n            size=(hidden_input4, hidden_input5),\n            scale=(1.0 / np.sqrt(hidden_input4 / 2.0)),\n        )\n        * 0.002\n    )\n    # G_b1 = np.random.normal(size=(128),scale=(1. / np.sqrt(128 / 2.)))      *0.002\n    G_b5 = np.zeros(hidden_input5)\n\n    G_W6 = (\n        np.random.normal(\n            size=(hidden_input5, hidden_input6),\n            scale=(1.0 / np.sqrt(hidden_input5 / 2.0)),\n        )\n        * 0.002\n    )\n    # G_b1 = np.random.normal(size=(128),scale=(1. / np.sqrt(128 / 2.)))      *0.002\n    G_b6 = np.zeros(hidden_input6)\n\n    G_W7 = (\n        np.random.normal(\n            size=(hidden_input6, 784), scale=(1.0 / np.sqrt(hidden_input6 / 2.0))\n        )\n        * 0.002\n    )\n    # G_b2 = np.random.normal(size=(784),scale=(1. / np.sqrt(784 / 2.)))      *0.002\n    G_b7 = np.zeros(784)\n\n    # 3. For Adam Optimizer\n    v1, m1 = 0, 0\n    v2, m2 = 0, 0\n    v3, m3 = 0, 0\n    v4, m4 = 0, 0\n\n    v5, m5 = 0, 0\n    v6, m6 = 0, 0\n    v7, m7 = 0, 0\n    v8, m8 = 0, 0\n    v9, m9 = 0, 0\n    v10, m10 = 0, 0\n    v11, m11 = 0, 0\n    v12, m12 = 0, 0\n\n    v13, m13 = 0, 0\n    v14, m14 = 0, 0\n\n    v15, m15 = 0, 0\n    v16, m16 = 0, 0\n\n    v17, m17 = 0, 0\n    v18, m18 = 0, 0\n\n    beta_1, beta_2, eps = 0.9, 0.999, 0.00000001\n\n    print(\"--------- Started Training ----------\")\n    for iter in range(num_epoch):\n\n        random_int = np.random.randint(len(images) - 5)\n        current_image = np.expand_dims(images[random_int], axis=0)\n\n        # Func: Generate The first Fake Data\n        Z = np.random.uniform(-1.0, 1.0, size=[1, G_input])\n        Gl1 = Z.dot(G_W1) + G_b1\n        Gl1A = arctan(Gl1)\n        Gl2 = Gl1A.dot(G_W2) + G_b2\n        Gl2A = ReLu(Gl2)\n        Gl3 = Gl2A.dot(G_W3) + G_b3\n        Gl3A = arctan(Gl3)\n\n        Gl4 = Gl3A.dot(G_W4) + G_b4\n        Gl4A = ReLu(Gl4)\n        Gl5 = Gl4A.dot(G_W5) + G_b5\n        Gl5A = tanh(Gl5)\n        Gl6 = Gl5A.dot(G_W6) + G_b6\n        Gl6A = ReLu(Gl6)\n        Gl7 = Gl6A.dot(G_W7) + G_b7\n\n        current_fake_data = log(Gl7)\n\n        # Func: Forward Feed for Real data\n        Dl1_r = current_image.dot(D_W1) + D_b1\n        Dl1_rA = ReLu(Dl1_r)\n        Dl2_r = Dl1_rA.dot(D_W2) + D_b2\n        Dl2_rA = log(Dl2_r)\n\n        # Func: Forward Feed for Fake Data\n        Dl1_f = current_fake_data.dot(D_W1) + D_b1\n        Dl1_fA = ReLu(Dl1_f)\n        Dl2_f = Dl1_fA.dot(D_W2) + D_b2\n        Dl2_fA = log(Dl2_f)\n\n        # Func: Cost D\n        D_cost = -np.log(Dl2_rA) + np.log(1.0 - Dl2_fA)\n\n        # Func: Gradient\n        grad_f_w2_part_1 = 1 / (1.0 - Dl2_fA)\n        grad_f_w2_part_2 = d_log(Dl2_f)\n        grad_f_w2_part_3 = Dl1_fA\n        grad_f_w2 = grad_f_w2_part_3.T.dot(grad_f_w2_part_1 * grad_f_w2_part_2)\n        grad_f_b2 = grad_f_w2_part_1 * grad_f_w2_part_2\n\n        grad_f_w1_part_1 = (grad_f_w2_part_1 * grad_f_w2_part_2).dot(D_W2.T)\n        grad_f_w1_part_2 = d_ReLu(Dl1_f)\n        grad_f_w1_part_3 = current_fake_data\n        grad_f_w1 = grad_f_w1_part_3.T.dot(grad_f_w1_part_1 * grad_f_w1_part_2)\n        grad_f_b1 = grad_f_w1_part_1 * grad_f_w1_part_2\n\n        grad_r_w2_part_1 = -1 / Dl2_rA\n        grad_r_w2_part_2 = d_log(Dl2_r)\n        grad_r_w2_part_3 = Dl1_rA\n        grad_r_w2 = grad_r_w2_part_3.T.dot(grad_r_w2_part_1 * grad_r_w2_part_2)\n        grad_r_b2 = grad_r_w2_part_1 * grad_r_w2_part_2\n\n        grad_r_w1_part_1 = (grad_r_w2_part_1 * grad_r_w2_part_2).dot(D_W2.T)\n        grad_r_w1_part_2 = d_ReLu(Dl1_r)\n        grad_r_w1_part_3 = current_image\n        grad_r_w1 = grad_r_w1_part_3.T.dot(grad_r_w1_part_1 * grad_r_w1_part_2)\n        grad_r_b1 = grad_r_w1_part_1 * grad_r_w1_part_2\n\n        grad_w1 = grad_f_w1 + grad_r_w1\n        grad_b1 = grad_f_b1 + grad_r_b1\n\n        grad_w2 = grad_f_w2 + grad_r_w2\n        grad_b2 = grad_f_b2 + grad_r_b2\n\n        # ---- Update Gradient ----\n        m1 = beta_1 * m1 + (1 - beta_1) * grad_w1\n        v1 = beta_2 * v1 + (1 - beta_2) * grad_w1 ** 2\n\n        m2 = beta_1 * m2 + (1 - beta_1) * grad_b1\n        v2 = beta_2 * v2 + (1 - beta_2) * grad_b1 ** 2\n\n        m3 = beta_1 * m3 + (1 - beta_1) * grad_w2\n        v3 = beta_2 * v3 + (1 - beta_2) * grad_w2 ** 2\n\n        m4 = beta_1 * m4 + (1 - beta_1) * grad_b2\n        v4 = beta_2 * v4 + (1 - beta_2) * grad_b2 ** 2\n\n        D_W1 = D_W1 - (learing_rate / (np.sqrt(v1 / (1 - beta_2)) + eps)) * (\n            m1 / (1 - beta_1)\n        )\n        D_b1 = D_b1 - (learing_rate / (np.sqrt(v2 / (1 - beta_2)) + eps)) * (\n            m2 / (1 - beta_1)\n        )\n\n        D_W2 = D_W2 - (learing_rate / (np.sqrt(v3 / (1 - beta_2)) + eps)) * (\n            m3 / (1 - beta_1)\n        )\n        D_b2 = D_b2 - (learing_rate / (np.sqrt(v4 / (1 - beta_2)) + eps)) * (\n            m4 / (1 - beta_1)\n        )\n\n        # Func: Forward Feed for G\n        Z = np.random.uniform(-1.0, 1.0, size=[1, G_input])\n        Gl1 = Z.dot(G_W1) + G_b1\n        Gl1A = arctan(Gl1)\n        Gl2 = Gl1A.dot(G_W2) + G_b2\n        Gl2A = ReLu(Gl2)\n        Gl3 = Gl2A.dot(G_W3) + G_b3\n        Gl3A = arctan(Gl3)\n\n        Gl4 = Gl3A.dot(G_W4) + G_b4\n        Gl4A = ReLu(Gl4)\n        Gl5 = Gl4A.dot(G_W5) + G_b5\n        Gl5A = tanh(Gl5)\n        Gl6 = Gl5A.dot(G_W6) + G_b6\n        Gl6A = ReLu(Gl6)\n        Gl7 = Gl6A.dot(G_W7) + G_b7\n\n        current_fake_data = log(Gl7)\n\n        Dl1 = current_fake_data.dot(D_W1) + D_b1\n        Dl1_A = ReLu(Dl1)\n        Dl2 = Dl1_A.dot(D_W2) + D_b2\n        Dl2_A = log(Dl2)\n\n        # Func: Cost G\n        G_cost = -np.log(Dl2_A)\n\n        # Func: Gradient\n        grad_G_w7_part_1 = ((-1 / Dl2_A) * d_log(Dl2).dot(D_W2.T) * (d_ReLu(Dl1))).dot(\n            D_W1.T\n        )\n        grad_G_w7_part_2 = d_log(Gl7)\n        grad_G_w7_part_3 = Gl6A\n        grad_G_w7 = grad_G_w7_part_3.T.dot(grad_G_w7_part_1 * grad_G_w7_part_1)\n        grad_G_b7 = grad_G_w7_part_1 * grad_G_w7_part_2\n\n        grad_G_w6_part_1 = (grad_G_w7_part_1 * grad_G_w7_part_2).dot(G_W7.T)\n        grad_G_w6_part_2 = d_ReLu(Gl6)\n        grad_G_w6_part_3 = Gl5A\n        grad_G_w6 = grad_G_w6_part_3.T.dot(grad_G_w6_part_1 * grad_G_w6_part_2)\n        grad_G_b6 = grad_G_w6_part_1 * grad_G_w6_part_2\n\n        grad_G_w5_part_1 = (grad_G_w6_part_1 * grad_G_w6_part_2).dot(G_W6.T)\n        grad_G_w5_part_2 = d_tanh(Gl5)\n        grad_G_w5_part_3 = Gl4A\n        grad_G_w5 = grad_G_w5_part_3.T.dot(grad_G_w5_part_1 * grad_G_w5_part_2)\n        grad_G_b5 = grad_G_w5_part_1 * grad_G_w5_part_2\n\n        grad_G_w4_part_1 = (grad_G_w5_part_1 * grad_G_w5_part_2).dot(G_W5.T)\n        grad_G_w4_part_2 = d_ReLu(Gl4)\n        grad_G_w4_part_3 = Gl3A\n        grad_G_w4 = grad_G_w4_part_3.T.dot(grad_G_w4_part_1 * grad_G_w4_part_2)\n        grad_G_b4 = grad_G_w4_part_1 * grad_G_w4_part_2\n\n        grad_G_w3_part_1 = (grad_G_w4_part_1 * grad_G_w4_part_2).dot(G_W4.T)\n        grad_G_w3_part_2 = d_arctan(Gl3)\n        grad_G_w3_part_3 = Gl2A\n        grad_G_w3 = grad_G_w3_part_3.T.dot(grad_G_w3_part_1 * grad_G_w3_part_2)\n        grad_G_b3 = grad_G_w3_part_1 * grad_G_w3_part_2\n\n        grad_G_w2_part_1 = (grad_G_w3_part_1 * grad_G_w3_part_2).dot(G_W3.T)\n        grad_G_w2_part_2 = d_ReLu(Gl2)\n        grad_G_w2_part_3 = Gl1A\n        grad_G_w2 = grad_G_w2_part_3.T.dot(grad_G_w2_part_1 * grad_G_w2_part_2)\n        grad_G_b2 = grad_G_w2_part_1 * grad_G_w2_part_2\n\n        grad_G_w1_part_1 = (grad_G_w2_part_1 * grad_G_w2_part_2).dot(G_W2.T)\n        grad_G_w1_part_2 = d_arctan(Gl1)\n        grad_G_w1_part_3 = Z\n        grad_G_w1 = grad_G_w1_part_3.T.dot(grad_G_w1_part_1 * grad_G_w1_part_2)\n        grad_G_b1 = grad_G_w1_part_1 * grad_G_w1_part_2\n\n        # ---- Update Gradient ----\n        m5 = beta_1 * m5 + (1 - beta_1) * grad_G_w1\n        v5 = beta_2 * v5 + (1 - beta_2) * grad_G_w1 ** 2\n\n        m6 = beta_1 * m6 + (1 - beta_1) * grad_G_b1\n        v6 = beta_2 * v6 + (1 - beta_2) * grad_G_b1 ** 2\n\n        m7 = beta_1 * m7 + (1 - beta_1) * grad_G_w2\n        v7 = beta_2 * v7 + (1 - beta_2) * grad_G_w2 ** 2\n\n        m8 = beta_1 * m8 + (1 - beta_1) * grad_G_b2\n        v8 = beta_2 * v8 + (1 - beta_2) * grad_G_b2 ** 2\n\n        m9 = beta_1 * m9 + (1 - beta_1) * grad_G_w3\n        v9 = beta_2 * v9 + (1 - beta_2) * grad_G_w3 ** 2\n\n        m10 = beta_1 * m10 + (1 - beta_1) * grad_G_b3\n        v10 = beta_2 * v10 + (1 - beta_2) * grad_G_b3 ** 2\n\n        m11 = beta_1 * m11 + (1 - beta_1) * grad_G_w4\n        v11 = beta_2 * v11 + (1 - beta_2) * grad_G_w4 ** 2\n\n        m12 = beta_1 * m12 + (1 - beta_1) * grad_G_b4\n        v12 = beta_2 * v12 + (1 - beta_2) * grad_G_b4 ** 2\n\n        m13 = beta_1 * m13 + (1 - beta_1) * grad_G_w5\n        v13 = beta_2 * v13 + (1 - beta_2) * grad_G_w5 ** 2\n\n        m14 = beta_1 * m14 + (1 - beta_1) * grad_G_b5\n        v14 = beta_2 * v14 + (1 - beta_2) * grad_G_b5 ** 2\n\n        m15 = beta_1 * m15 + (1 - beta_1) * grad_G_w6\n        v15 = beta_2 * v15 + (1 - beta_2) * grad_G_w6 ** 2\n\n        m16 = beta_1 * m16 + (1 - beta_1) * grad_G_b6\n        v16 = beta_2 * v16 + (1 - beta_2) * grad_G_b6 ** 2\n\n        m17 = beta_1 * m17 + (1 - beta_1) * grad_G_w7\n        v17 = beta_2 * v17 + (1 - beta_2) * grad_G_w7 ** 2\n\n        m18 = beta_1 * m18 + (1 - beta_1) * grad_G_b7\n        v18 = beta_2 * v18 + (1 - beta_2) * grad_G_b7 ** 2\n\n        G_W1 = G_W1 - (learing_rate / (np.sqrt(v5 / (1 - beta_2)) + eps)) * (\n            m5 / (1 - beta_1)\n        )\n        G_b1 = G_b1 - (learing_rate / (np.sqrt(v6 / (1 - beta_2)) + eps)) * (\n            m6 / (1 - beta_1)\n        )\n\n        G_W2 = G_W2 - (learing_rate / (np.sqrt(v7 / (1 - beta_2)) + eps)) * (\n            m7 / (1 - beta_1)\n        )\n        G_b2 = G_b2 - (learing_rate / (np.sqrt(v8 / (1 - beta_2)) + eps)) * (\n            m8 / (1 - beta_1)\n        )\n\n        G_W3 = G_W3 - (learing_rate / (np.sqrt(v9 / (1 - beta_2)) + eps)) * (\n            m9 / (1 - beta_1)\n        )\n        G_b3 = G_b3 - (learing_rate / (np.sqrt(v10 / (1 - beta_2)) + eps)) * (\n            m10 / (1 - beta_1)\n        )\n\n        G_W4 = G_W4 - (learing_rate / (np.sqrt(v11 / (1 - beta_2)) + eps)) * (\n            m11 / (1 - beta_1)\n        )\n        G_b4 = G_b4 - (learing_rate / (np.sqrt(v12 / (1 - beta_2)) + eps)) * (\n            m12 / (1 - beta_1)\n        )\n\n        G_W5 = G_W5 - (learing_rate / (np.sqrt(v13 / (1 - beta_2)) + eps)) * (\n            m13 / (1 - beta_1)\n        )\n        G_b5 = G_b5 - (learing_rate / (np.sqrt(v14 / (1 - beta_2)) + eps)) * (\n            m14 / (1 - beta_1)\n        )\n\n        G_W6 = G_W6 - (learing_rate / (np.sqrt(v15 / (1 - beta_2)) + eps)) * (\n            m15 / (1 - beta_1)\n        )\n        G_b6 = G_b6 - (learing_rate / (np.sqrt(v16 / (1 - beta_2)) + eps)) * (\n            m16 / (1 - beta_1)\n        )\n\n        G_W7 = G_W7 - (learing_rate / (np.sqrt(v17 / (1 - beta_2)) + eps)) * (\n            m17 / (1 - beta_1)\n        )\n        G_b7 = G_b7 - (learing_rate / (np.sqrt(v18 / (1 - beta_2)) + eps)) * (\n            m18 / (1 - beta_1)\n        )\n\n        # --- Print Error ----\n        # print(\"Current Iter: \",iter, \" Current D cost:\",D_cost, \" Current G cost: \", G_cost,end='\\r')\n\n        if iter == 0:\n            learing_rate = learing_rate * 0.01\n        if iter == 40:\n            learing_rate = learing_rate * 0.01\n\n        # ---- Print to Out put ----\n        if iter % 10 == 0:\n\n            print(\n                \"Current Iter: \",\n                iter,\n                \" Current D cost:\",\n                D_cost,\n                \" Current G cost: \",\n                G_cost,\n                end=\"\\r\",\n            )\n            print(\"--------- Show Example Result See Tab Above ----------\")\n            print(\"--------- Wait for the image to load ---------\")\n            Z = np.random.uniform(-1.0, 1.0, size=[16, G_input])\n\n            Gl1 = Z.dot(G_W1) + G_b1\n            Gl1A = arctan(Gl1)\n            Gl2 = Gl1A.dot(G_W2) + G_b2\n            Gl2A = ReLu(Gl2)\n            Gl3 = Gl2A.dot(G_W3) + G_b3\n            Gl3A = arctan(Gl3)\n\n            Gl4 = Gl3A.dot(G_W4) + G_b4\n            Gl4A = ReLu(Gl4)\n            Gl5 = Gl4A.dot(G_W5) + G_b5\n            Gl5A = tanh(Gl5)\n            Gl6 = Gl5A.dot(G_W6) + G_b6\n            Gl6A = ReLu(Gl6)\n            Gl7 = Gl6A.dot(G_W7) + G_b7\n\n            current_fake_data = log(Gl7)\n\n            fig = plot(current_fake_data)\n            fig.savefig(\n                \"Click_Me_{}.png\".format(\n                    str(iter).zfill(3)\n                    + \"_Ginput_\"\n                    + str(G_input)\n                    + \"_hiddenone\"\n                    + str(hidden_input)\n                    + \"_hiddentwo\"\n                    + str(hidden_input2)\n                    + \"_LR_\"\n                    + str(learing_rate)\n                ),\n                bbox_inches=\"tight\",\n            )\n    # for complete explanation visit https://towardsdatascience.com/only-numpy-implementing-gan-general-adversarial-networks-and-adam-optimizer-using-numpy-with-2a7e4e032021\n    # -- end code --\n"
  },
  {
    "path": "neural_network/input_data.py",
    "content": "# Copyright 2016 The TensorFlow Authors. All Rights Reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# ==============================================================================\n\"\"\"Functions for downloading and reading MNIST data (deprecated).\n\nThis module and all its submodules are deprecated.\n\"\"\"\n\nimport gzip\nimport os\nimport typing\nimport urllib\n\nimport numpy as np\nfrom tensorflow.python.framework import dtypes, random_seed\nfrom tensorflow.python.platform import gfile\nfrom tensorflow.python.util.deprecation import deprecated\n\n\nclass _Datasets(typing.NamedTuple):\n    train: \"_DataSet\"\n    validation: \"_DataSet\"\n    test: \"_DataSet\"\n\n\n# CVDF mirror of http://yann.lecun.com/exdb/mnist/\nDEFAULT_SOURCE_URL = \"https://storage.googleapis.com/cvdf-datasets/mnist/\"\n\n\ndef _read32(bytestream):\n    dt = np.dtype(np.uint32).newbyteorder(\">\")\n    return np.frombuffer(bytestream.read(4), dtype=dt)[0]\n\n\n@deprecated(None, \"Please use tf.data to implement this functionality.\")\ndef _extract_images(f):\n    \"\"\"Extract the images into a 4D uint8 numpy array [index, y, x, depth].\n\n    Args:\n      f: A file object that can be passed into a gzip reader.\n\n    Returns:\n      data: A 4D uint8 numpy array [index, y, x, depth].\n\n    Raises:\n      ValueError: If the bytestream does not start with 2051.\n\n    \"\"\"\n    print(\"Extracting\", f.name)\n    with gzip.GzipFile(fileobj=f) as bytestream:\n        magic = _read32(bytestream)\n        if magic != 2051:\n            msg = f\"Invalid magic number {magic} in MNIST image file: {f.name}\"\n            raise ValueError(msg)\n        num_images = _read32(bytestream)\n        rows = _read32(bytestream)\n        cols = _read32(bytestream)\n        buf = bytestream.read(rows * cols * num_images)\n        data = np.frombuffer(buf, dtype=np.uint8)\n        data = data.reshape(num_images, rows, cols, 1)\n        return data\n\n\n@deprecated(None, \"Please use tf.one_hot on tensors.\")\ndef _dense_to_one_hot(labels_dense, num_classes):\n    \"\"\"Convert class labels from scalars to one-hot vectors.\"\"\"\n    num_labels = labels_dense.shape[0]\n    index_offset = np.arange(num_labels) * num_classes\n    labels_one_hot = np.zeros((num_labels, num_classes))\n    labels_one_hot.flat[index_offset + labels_dense.ravel()] = 1\n    return labels_one_hot\n\n\n@deprecated(None, \"Please use tf.data to implement this functionality.\")\ndef _extract_labels(f, one_hot=False, num_classes=10):\n    \"\"\"Extract the labels into a 1D uint8 numpy array [index].\n\n    Args:\n      f: A file object that can be passed into a gzip reader.\n      one_hot: Does one hot encoding for the result.\n      num_classes: Number of classes for the one hot encoding.\n\n    Returns:\n      labels: a 1D uint8 numpy array.\n\n    Raises:\n      ValueError: If the bystream doesn't start with 2049.\n    \"\"\"\n    print(\"Extracting\", f.name)\n    with gzip.GzipFile(fileobj=f) as bytestream:\n        magic = _read32(bytestream)\n        if magic != 2049:\n            msg = f\"Invalid magic number {magic} in MNIST label file: {f.name}\"\n            raise ValueError(msg)\n        num_items = _read32(bytestream)\n        buf = bytestream.read(num_items)\n        labels = np.frombuffer(buf, dtype=np.uint8)\n        if one_hot:\n            return _dense_to_one_hot(labels, num_classes)\n        return labels\n\n\nclass _DataSet:\n    \"\"\"Container class for a _DataSet (deprecated).\n\n    THIS CLASS IS DEPRECATED.\n    \"\"\"\n\n    @deprecated(\n        None,\n        \"Please use alternatives such as official/mnist/_DataSet.py\"\n        \" from tensorflow/models.\",\n    )\n    def __init__(\n        self,\n        images,\n        labels,\n        fake_data=False,\n        one_hot=False,\n        dtype=dtypes.float32,\n        reshape=True,\n        seed=None,\n    ):\n        \"\"\"Construct a _DataSet.\n\n        one_hot arg is used only if fake_data is true.  `dtype` can be either\n        `uint8` to leave the input as `[0, 255]`, or `float32` to rescale into\n        `[0, 1]`.  Seed arg provides for convenient deterministic testing.\n\n        Args:\n          images: The images\n          labels: The labels\n          fake_data: Ignore inages and labels, use fake data.\n          one_hot: Bool, return the labels as one hot vectors (if True) or ints (if\n            False).\n          dtype: Output image dtype. One of [uint8, float32]. `uint8` output has\n            range [0,255]. float32 output has range [0,1].\n          reshape: Bool. If True returned images are returned flattened to vectors.\n          seed: The random seed to use.\n        \"\"\"\n        seed1, seed2 = random_seed.get_seed(seed)\n        # If op level seed is not set, use whatever graph level seed is returned\n        self._rng = np.random.default_rng(seed1 if seed is None else seed2)\n        dtype = dtypes.as_dtype(dtype).base_dtype\n        if dtype not in (dtypes.uint8, dtypes.float32):\n            msg = f\"Invalid image dtype {dtype!r}, expected uint8 or float32\"\n            raise TypeError(msg)\n        if fake_data:\n            self._num_examples = 10000\n            self.one_hot = one_hot\n        else:\n            assert images.shape[0] == labels.shape[0], (\n                f\"images.shape: {images.shape} labels.shape: {labels.shape}\"\n            )\n            self._num_examples = images.shape[0]\n\n            # Convert shape from [num examples, rows, columns, depth]\n            # to [num examples, rows*columns] (assuming depth == 1)\n            if reshape:\n                assert images.shape[3] == 1\n                images = images.reshape(\n                    images.shape[0], images.shape[1] * images.shape[2]\n                )\n            if dtype == dtypes.float32:\n                # Convert from [0, 255] -> [0.0, 1.0].\n                images = images.astype(np.float32)\n                images = np.multiply(images, 1.0 / 255.0)\n        self._images = images\n        self._labels = labels\n        self._epochs_completed = 0\n        self._index_in_epoch = 0\n\n    @property\n    def images(self):\n        return self._images\n\n    @property\n    def labels(self):\n        return self._labels\n\n    @property\n    def num_examples(self):\n        return self._num_examples\n\n    @property\n    def epochs_completed(self):\n        return self._epochs_completed\n\n    def next_batch(self, batch_size, fake_data=False, shuffle=True):\n        \"\"\"Return the next `batch_size` examples from this data set.\"\"\"\n        if fake_data:\n            fake_image = [1] * 784\n            fake_label = [1] + [0] * 9 if self.one_hot else 0\n            return (\n                [fake_image for _ in range(batch_size)],\n                [fake_label for _ in range(batch_size)],\n            )\n        start = self._index_in_epoch\n        # Shuffle for the first epoch\n        if self._epochs_completed == 0 and start == 0 and shuffle:\n            perm0 = np.arange(self._num_examples)\n            self._rng.shuffle(perm0)\n            self._images = self.images[perm0]\n            self._labels = self.labels[perm0]\n        # Go to the next epoch\n        if start + batch_size > self._num_examples:\n            # Finished epoch\n            self._epochs_completed += 1\n            # Get the rest examples in this epoch\n            rest_num_examples = self._num_examples - start\n            images_rest_part = self._images[start : self._num_examples]\n            labels_rest_part = self._labels[start : self._num_examples]\n            # Shuffle the data\n            if shuffle:\n                perm = np.arange(self._num_examples)\n                self._rng.shuffle(perm)\n                self._images = self.images[perm]\n                self._labels = self.labels[perm]\n            # Start next epoch\n            start = 0\n            self._index_in_epoch = batch_size - rest_num_examples\n            end = self._index_in_epoch\n            images_new_part = self._images[start:end]\n            labels_new_part = self._labels[start:end]\n            return (\n                np.concatenate((images_rest_part, images_new_part), axis=0),\n                np.concatenate((labels_rest_part, labels_new_part), axis=0),\n            )\n        else:\n            self._index_in_epoch += batch_size\n            end = self._index_in_epoch\n            return self._images[start:end], self._labels[start:end]\n\n\n@deprecated(None, \"Please write your own downloading logic.\")\ndef _maybe_download(filename, work_directory, source_url):\n    \"\"\"Download the data from source url, unless it's already here.\n\n    Args:\n        filename: string, name of the file in the directory.\n        work_directory: string, path to working directory.\n        source_url: url to download from if file doesn't exist.\n\n    Returns:\n        Path to resulting file.\n    \"\"\"\n    if not gfile.Exists(work_directory):\n        gfile.MakeDirs(work_directory)\n    filepath = os.path.join(work_directory, filename)\n    if not gfile.Exists(filepath):\n        urllib.request.urlretrieve(source_url, filepath)  # noqa: S310\n        with gfile.GFile(filepath) as f:\n            size = f.size()\n        print(\"Successfully downloaded\", filename, size, \"bytes.\")\n    return filepath\n\n\n@deprecated(None, \"Please use alternatives such as: tensorflow_datasets.load('mnist')\")\ndef read_data_sets(\n    train_dir,\n    fake_data=False,\n    one_hot=False,\n    dtype=dtypes.float32,\n    reshape=True,\n    validation_size=5000,\n    seed=None,\n    source_url=DEFAULT_SOURCE_URL,\n):\n    if fake_data:\n\n        def fake():\n            return _DataSet(\n                [], [], fake_data=True, one_hot=one_hot, dtype=dtype, seed=seed\n            )\n\n        train = fake()\n        validation = fake()\n        test = fake()\n        return _Datasets(train=train, validation=validation, test=test)\n\n    if not source_url:  # empty string check\n        source_url = DEFAULT_SOURCE_URL\n\n    train_images_file = \"train-images-idx3-ubyte.gz\"\n    train_labels_file = \"train-labels-idx1-ubyte.gz\"\n    test_images_file = \"t10k-images-idx3-ubyte.gz\"\n    test_labels_file = \"t10k-labels-idx1-ubyte.gz\"\n\n    local_file = _maybe_download(\n        train_images_file, train_dir, source_url + train_images_file\n    )\n    with gfile.Open(local_file, \"rb\") as f:\n        train_images = _extract_images(f)\n\n    local_file = _maybe_download(\n        train_labels_file, train_dir, source_url + train_labels_file\n    )\n    with gfile.Open(local_file, \"rb\") as f:\n        train_labels = _extract_labels(f, one_hot=one_hot)\n\n    local_file = _maybe_download(\n        test_images_file, train_dir, source_url + test_images_file\n    )\n    with gfile.Open(local_file, \"rb\") as f:\n        test_images = _extract_images(f)\n\n    local_file = _maybe_download(\n        test_labels_file, train_dir, source_url + test_labels_file\n    )\n    with gfile.Open(local_file, \"rb\") as f:\n        test_labels = _extract_labels(f, one_hot=one_hot)\n\n    if not 0 <= validation_size <= len(train_images):\n        msg = (\n            \"Validation size should be between 0 and \"\n            f\"{len(train_images)}. Received: {validation_size}.\"\n        )\n        raise ValueError(msg)\n\n    validation_images = train_images[:validation_size]\n    validation_labels = train_labels[:validation_size]\n    train_images = train_images[validation_size:]\n    train_labels = train_labels[validation_size:]\n\n    options = {\"dtype\": dtype, \"reshape\": reshape, \"seed\": seed}\n\n    train = _DataSet(train_images, train_labels, **options)\n    validation = _DataSet(validation_images, validation_labels, **options)\n    test = _DataSet(test_images, test_labels, **options)\n\n    return _Datasets(train=train, validation=validation, test=test)\n"
  },
  {
    "path": "neural_network/perceptron.py.DISABLED",
    "content": "\"\"\"\n    Perceptron\n    w = w + N * (d(k) - y) * x(k)\n\n    Using perceptron network for oil analysis, with Measuring of 3 parameters\n    that represent chemical characteristics we can classify the oil, in p1 or p2\n    p1 = -1\n    p2 = 1\n\"\"\"\nimport random\n\n\nclass Perceptron:\n    def __init__(\n        self,\n        sample: list[list[float]],\n        target: list[int],\n        learning_rate: float = 0.01,\n        epoch_number: int = 1000,\n        bias: float = -1,\n    ) -> None:\n        \"\"\"\n        Initializes a Perceptron network for oil analysis\n        :param sample: sample dataset of 3 parameters with shape [30,3]\n        :param target: variable for classification with two possible states -1 or 1\n        :param learning_rate: learning rate used in optimizing.\n        :param epoch_number: number of epochs to train network on.\n        :param bias: bias value for the network.\n\n        >>> p = Perceptron([], (0, 1, 2))\n        Traceback (most recent call last):\n            ...\n        ValueError: Sample data can not be empty\n        >>> p = Perceptron(([0], 1, 2), [])\n        Traceback (most recent call last):\n            ...\n        ValueError: Target data can not be empty\n        >>> p = Perceptron(([0], 1, 2), (0, 1))\n        Traceback (most recent call last):\n            ...\n        ValueError: Sample data and Target data do not have matching lengths\n        \"\"\"\n        self.sample = sample\n        if len(self.sample) == 0:\n            raise ValueError(\"Sample data can not be empty\")\n        self.target = target\n        if len(self.target) == 0:\n            raise ValueError(\"Target data can not be empty\")\n        if len(self.sample) != len(self.target):\n            raise ValueError(\"Sample data and Target data do not have matching lengths\")\n        self.learning_rate = learning_rate\n        self.epoch_number = epoch_number\n        self.bias = bias\n        self.number_sample = len(sample)\n        self.col_sample = len(sample[0])  # number of columns in dataset\n        self.weight: list = []\n\n    def training(self) -> None:\n        \"\"\"\n        Trains perceptron for epochs <= given number of epochs\n        :return: None\n        >>> data = [[2.0149, 0.6192, 10.9263]]\n        >>> targets = [-1]\n        >>> perceptron = Perceptron(data,targets)\n        >>> perceptron.training() # doctest: +ELLIPSIS\n        ('\\\\nEpoch:\\\\n', ...)\n        ...\n        \"\"\"\n        for sample in self.sample:\n            sample.insert(0, self.bias)\n\n        for _ in range(self.col_sample):\n            self.weight.append(random.random())\n\n        self.weight.insert(0, self.bias)\n\n        epoch_count = 0\n\n        while True:\n            has_misclassified = False\n            for i in range(self.number_sample):\n                u = 0\n                for j in range(self.col_sample + 1):\n                    u = u + self.weight[j] * self.sample[i][j]\n                y = self.sign(u)\n                if y != self.target[i]:\n                    for j in range(self.col_sample + 1):\n                        self.weight[j] = (\n                            self.weight[j]\n                            + self.learning_rate\n                            * (self.target[i] - y)\n                            * self.sample[i][j]\n                        )\n                    has_misclassified = True\n            # print('Epoch: \\n',epoch_count)\n            epoch_count = epoch_count + 1\n            # if you want control the epoch or just by error\n            if not has_misclassified:\n                print((\"\\nEpoch:\\n\", epoch_count))\n                print(\"------------------------\\n\")\n                # if epoch_count > self.epoch_number or not error:\n                break\n\n    def sort(self, sample: list[float]) -> None:\n        \"\"\"\n        :param sample: example row to classify as P1 or P2\n        :return: None\n        >>> data = [[2.0149, 0.6192, 10.9263]]\n        >>> targets = [-1]\n        >>> perceptron = Perceptron(data,targets)\n        >>> perceptron.training() # doctest: +ELLIPSIS\n        ('\\\\nEpoch:\\\\n', ...)\n        ...\n        >>> perceptron.sort([-0.6508, 0.1097, 4.0009]) # doctest: +ELLIPSIS\n        ('Sample: ', ...)\n        classification: P...\n        \"\"\"\n        if len(self.sample) == 0:\n            raise ValueError(\"Sample data can not be empty\")\n        sample.insert(0, self.bias)\n        u = 0\n        for i in range(self.col_sample + 1):\n            u = u + self.weight[i] * sample[i]\n\n        y = self.sign(u)\n\n        if y == -1:\n            print((\"Sample: \", sample))\n            print(\"classification: P1\")\n        else:\n            print((\"Sample: \", sample))\n            print(\"classification: P2\")\n\n    def sign(self, u: float) -> int:\n        \"\"\"\n        threshold function for classification\n        :param u: input number\n        :return: 1 if the input is greater than 0, otherwise -1\n        >>> data = [[0],[-0.5],[0.5]]\n        >>> targets = [1,-1,1]\n        >>> perceptron = Perceptron(data,targets)\n        >>> perceptron.sign(0)\n        1\n        >>> perceptron.sign(-0.5)\n        -1\n        >>> perceptron.sign(0.5)\n        1\n        \"\"\"\n        return 1 if u >= 0 else -1\n\n\nsamples = [\n    [-0.6508, 0.1097, 4.0009],\n    [-1.4492, 0.8896, 4.4005],\n    [2.0850, 0.6876, 12.0710],\n    [0.2626, 1.1476, 7.7985],\n    [0.6418, 1.0234, 7.0427],\n    [0.2569, 0.6730, 8.3265],\n    [1.1155, 0.6043, 7.4446],\n    [0.0914, 0.3399, 7.0677],\n    [0.0121, 0.5256, 4.6316],\n    [-0.0429, 0.4660, 5.4323],\n    [0.4340, 0.6870, 8.2287],\n    [0.2735, 1.0287, 7.1934],\n    [0.4839, 0.4851, 7.4850],\n    [0.4089, -0.1267, 5.5019],\n    [1.4391, 0.1614, 8.5843],\n    [-0.9115, -0.1973, 2.1962],\n    [0.3654, 1.0475, 7.4858],\n    [0.2144, 0.7515, 7.1699],\n    [0.2013, 1.0014, 6.5489],\n    [0.6483, 0.2183, 5.8991],\n    [-0.1147, 0.2242, 7.2435],\n    [-0.7970, 0.8795, 3.8762],\n    [-1.0625, 0.6366, 2.4707],\n    [0.5307, 0.1285, 5.6883],\n    [-1.2200, 0.7777, 1.7252],\n    [0.3957, 0.1076, 5.6623],\n    [-0.1013, 0.5989, 7.1812],\n    [2.4482, 0.9455, 11.2095],\n    [2.0149, 0.6192, 10.9263],\n    [0.2012, 0.2611, 5.4631],\n]\n\ntarget = [\n    -1,\n    -1,\n    -1,\n    1,\n    1,\n    -1,\n    1,\n    -1,\n    1,\n    1,\n    -1,\n    1,\n    -1,\n    -1,\n    -1,\n    -1,\n    1,\n    1,\n    1,\n    1,\n    -1,\n    1,\n    1,\n    1,\n    1,\n    -1,\n    -1,\n    1,\n    -1,\n    1,\n]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    network = Perceptron(\n        sample=samples, target=target, learning_rate=0.01, epoch_number=1000, bias=-1\n    )\n    network.training()\n    print(\"Finished training perceptron\")\n    print(\"Enter values to predict or q to exit\")\n    while True:\n        sample: list = []\n        for i in range(len(samples[0])):\n            user_input = input(\"value: \").strip()\n            if user_input == \"q\":\n                break\n            observation = float(user_input)\n            sample.insert(i, observation)\n        network.sort(sample)\n"
  },
  {
    "path": "neural_network/simple_neural_network.py",
    "content": "\"\"\"\nForward propagation explanation:\nhttps://towardsdatascience.com/forward-propagation-in-neural-networks-simplified-math-and-code-version-bbcfef6f9250\n\"\"\"\n\nimport math\nimport random\n\n\n# Sigmoid\ndef sigmoid_function(value: float, deriv: bool = False) -> float:\n    \"\"\"Return the sigmoid function of a float.\n\n    >>> sigmoid_function(3.5)\n    0.9706877692486436\n    >>> sigmoid_function(3.5, True)\n    -8.75\n    \"\"\"\n    if deriv:\n        return value * (1 - value)\n    return 1 / (1 + math.exp(-value))\n\n\n# Initial Value\nINITIAL_VALUE = 0.02\n\n\ndef forward_propagation(expected: int, number_propagations: int) -> float:\n    \"\"\"Return the value found after the forward propagation training.\n\n    >>> res = forward_propagation(32, 450_000)  # Was 10_000_000\n    >>> res > 31 and res < 33\n    True\n\n    >>> res = forward_propagation(32, 1000)\n    >>> res > 31 and res < 33\n    False\n    \"\"\"\n\n    # Random weight\n    weight = float(2 * (random.randint(1, 100)) - 1)\n\n    for _ in range(number_propagations):\n        # Forward propagation\n        layer_1 = sigmoid_function(INITIAL_VALUE * weight)\n        # How much did we miss?\n        layer_1_error = (expected / 100) - layer_1\n        # Error delta\n        layer_1_delta = layer_1_error * sigmoid_function(layer_1, True)\n        # Update weight\n        weight += INITIAL_VALUE * layer_1_delta\n\n    return layer_1 * 100\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    expected = int(input(\"Expected value: \"))\n    number_propagations = int(input(\"Number of propagations: \"))\n    print(forward_propagation(expected, number_propagations))\n"
  },
  {
    "path": "neural_network/two_hidden_layers_neural_network.py",
    "content": "\"\"\"\nReferences:\n    - http://neuralnetworksanddeeplearning.com/chap2.html (Backpropagation)\n    - https://en.wikipedia.org/wiki/Sigmoid_function (Sigmoid activation function)\n    - https://en.wikipedia.org/wiki/Feedforward_neural_network (Feedforward)\n\"\"\"\n\nimport numpy as np\n\n\nclass TwoHiddenLayerNeuralNetwork:\n    def __init__(self, input_array: np.ndarray, output_array: np.ndarray) -> None:\n        \"\"\"\n        This function initializes the TwoHiddenLayerNeuralNetwork class with random\n        weights for every layer and initializes predicted output with zeroes.\n\n        input_array : input values for training the neural network (i.e training data) .\n        output_array : expected output values of the given inputs.\n        \"\"\"\n\n        # Input values provided for training the model.\n        self.input_array = input_array\n\n        # Random initial weights are assigned where first argument is the\n        # number of nodes in previous layer and second argument is the\n        # number of nodes in the next layer.\n\n        # Random initial weights are assigned.\n        # self.input_array.shape[1] is used to represent number of nodes in input layer.\n        # First hidden layer consists of 4 nodes.\n        rng = np.random.default_rng()\n        self.input_layer_and_first_hidden_layer_weights = rng.random(\n            (self.input_array.shape[1], 4)\n        )\n\n        # Random initial values for the first hidden layer.\n        # First hidden layer has 4 nodes.\n        # Second hidden layer has 3 nodes.\n        self.first_hidden_layer_and_second_hidden_layer_weights = rng.random((4, 3))\n\n        # Random initial values for the second hidden layer.\n        # Second hidden layer has 3 nodes.\n        # Output layer has 1 node.\n        self.second_hidden_layer_and_output_layer_weights = rng.random((3, 1))\n\n        # Real output values provided.\n        self.output_array = output_array\n\n        # Predicted output values by the neural network.\n        # Predicted_output array initially consists of zeroes.\n        self.predicted_output = np.zeros(output_array.shape)\n\n    def feedforward(self) -> np.ndarray:\n        \"\"\"\n        The information moves in only one direction i.e. forward from the input nodes,\n        through the two hidden nodes and to the output nodes.\n        There are no cycles or loops in the network.\n\n        Return layer_between_second_hidden_layer_and_output\n            (i.e the last layer of the neural network).\n\n        >>> input_val = np.array(([0, 0, 0], [0, 0, 0], [0, 0, 0]), dtype=float)\n        >>> output_val = np.array(([0], [0], [0]), dtype=float)\n        >>> nn = TwoHiddenLayerNeuralNetwork(input_val, output_val)\n        >>> res = nn.feedforward()\n        >>> array_sum = np.sum(res)\n        >>> bool(np.isnan(array_sum))\n        False\n        \"\"\"\n        # Layer_between_input_and_first_hidden_layer is the layer connecting the\n        # input nodes with the first hidden layer nodes.\n        self.layer_between_input_and_first_hidden_layer = sigmoid(\n            np.dot(self.input_array, self.input_layer_and_first_hidden_layer_weights)\n        )\n\n        # layer_between_first_hidden_layer_and_second_hidden_layer is the layer\n        # connecting the first hidden set of nodes with the second hidden set of nodes.\n        self.layer_between_first_hidden_layer_and_second_hidden_layer = sigmoid(\n            np.dot(\n                self.layer_between_input_and_first_hidden_layer,\n                self.first_hidden_layer_and_second_hidden_layer_weights,\n            )\n        )\n\n        # layer_between_second_hidden_layer_and_output is the layer connecting\n        # second hidden layer with the output node.\n        self.layer_between_second_hidden_layer_and_output = sigmoid(\n            np.dot(\n                self.layer_between_first_hidden_layer_and_second_hidden_layer,\n                self.second_hidden_layer_and_output_layer_weights,\n            )\n        )\n\n        return self.layer_between_second_hidden_layer_and_output\n\n    def back_propagation(self) -> None:\n        \"\"\"\n        Function for fine-tuning the weights of the neural net based on the\n        error rate obtained in the previous epoch (i.e., iteration).\n        Updation is done using derivative of sogmoid activation function.\n\n        >>> input_val = np.array(([0, 0, 0], [0, 0, 0], [0, 0, 0]), dtype=float)\n        >>> output_val = np.array(([0], [0], [0]), dtype=float)\n        >>> nn = TwoHiddenLayerNeuralNetwork(input_val, output_val)\n        >>> res = nn.feedforward()\n        >>> nn.back_propagation()\n        >>> updated_weights = nn.second_hidden_layer_and_output_layer_weights\n        >>> bool((res == updated_weights).all())\n        False\n        \"\"\"\n\n        updated_second_hidden_layer_and_output_layer_weights = np.dot(\n            self.layer_between_first_hidden_layer_and_second_hidden_layer.T,\n            2\n            * (self.output_array - self.predicted_output)\n            * sigmoid_derivative(self.predicted_output),\n        )\n        updated_first_hidden_layer_and_second_hidden_layer_weights = np.dot(\n            self.layer_between_input_and_first_hidden_layer.T,\n            np.dot(\n                2\n                * (self.output_array - self.predicted_output)\n                * sigmoid_derivative(self.predicted_output),\n                self.second_hidden_layer_and_output_layer_weights.T,\n            )\n            * sigmoid_derivative(\n                self.layer_between_first_hidden_layer_and_second_hidden_layer\n            ),\n        )\n        updated_input_layer_and_first_hidden_layer_weights = np.dot(\n            self.input_array.T,\n            np.dot(\n                np.dot(\n                    2\n                    * (self.output_array - self.predicted_output)\n                    * sigmoid_derivative(self.predicted_output),\n                    self.second_hidden_layer_and_output_layer_weights.T,\n                )\n                * sigmoid_derivative(\n                    self.layer_between_first_hidden_layer_and_second_hidden_layer\n                ),\n                self.first_hidden_layer_and_second_hidden_layer_weights.T,\n            )\n            * sigmoid_derivative(self.layer_between_input_and_first_hidden_layer),\n        )\n\n        self.input_layer_and_first_hidden_layer_weights += (\n            updated_input_layer_and_first_hidden_layer_weights\n        )\n        self.first_hidden_layer_and_second_hidden_layer_weights += (\n            updated_first_hidden_layer_and_second_hidden_layer_weights\n        )\n        self.second_hidden_layer_and_output_layer_weights += (\n            updated_second_hidden_layer_and_output_layer_weights\n        )\n\n    def train(self, output: np.ndarray, iterations: int, give_loss: bool) -> None:\n        \"\"\"\n        Performs the feedforwarding and back propagation process for the\n        given number of iterations.\n        Every iteration will update the weights of neural network.\n\n        output : real output values,required for calculating loss.\n        iterations : number of times the weights are to be updated.\n        give_loss : boolean value, If True then prints loss for each iteration,\n                    If False then nothing is printed\n\n        >>> input_val = np.array(([0, 0, 0], [0, 1, 0], [0, 0, 1]), dtype=float)\n        >>> output_val = np.array(([0], [1], [1]), dtype=float)\n        >>> nn = TwoHiddenLayerNeuralNetwork(input_val, output_val)\n        >>> first_iteration_weights = nn.feedforward()\n        >>> nn.back_propagation()\n        >>> updated_weights = nn.second_hidden_layer_and_output_layer_weights\n        >>> bool((first_iteration_weights == updated_weights).all())\n        False\n        \"\"\"\n        for iteration in range(1, iterations + 1):\n            self.output = self.feedforward()\n            self.back_propagation()\n            if give_loss:\n                loss = np.mean(np.square(output - self.feedforward()))\n                print(f\"Iteration {iteration} Loss: {loss}\")\n\n    def predict(self, input_arr: np.ndarray) -> int:\n        \"\"\"\n        Predict's the output for the given input values using\n        the trained neural network.\n\n        The output value given by the model ranges in-between 0 and 1.\n        The predict function returns 1 if the model value is greater\n        than the threshold value else returns 0,\n        as the real output values are in binary.\n\n        >>> input_val = np.array(([0, 0, 0], [0, 1, 0], [0, 0, 1]), dtype=float)\n        >>> output_val = np.array(([0], [1], [1]), dtype=float)\n        >>> nn = TwoHiddenLayerNeuralNetwork(input_val, output_val)\n        >>> nn.train(output_val, 1000, False)\n        >>> nn.predict([0, 1, 0]) in (0, 1)\n        True\n        \"\"\"\n\n        # Input values for which the predictions are to be made.\n        self.array = input_arr\n\n        self.layer_between_input_and_first_hidden_layer = sigmoid(\n            np.dot(self.array, self.input_layer_and_first_hidden_layer_weights)\n        )\n\n        self.layer_between_first_hidden_layer_and_second_hidden_layer = sigmoid(\n            np.dot(\n                self.layer_between_input_and_first_hidden_layer,\n                self.first_hidden_layer_and_second_hidden_layer_weights,\n            )\n        )\n\n        self.layer_between_second_hidden_layer_and_output = sigmoid(\n            np.dot(\n                self.layer_between_first_hidden_layer_and_second_hidden_layer,\n                self.second_hidden_layer_and_output_layer_weights,\n            )\n        )\n\n        return int((self.layer_between_second_hidden_layer_and_output > 0.6)[0])\n\n\ndef sigmoid(value: np.ndarray) -> np.ndarray:\n    \"\"\"\n    Applies sigmoid activation function.\n\n    return normalized values\n\n    >>> sigmoid(np.array(([1, 0, 2], [1, 0, 0]), dtype=np.float64))\n    array([[0.73105858, 0.5       , 0.88079708],\n           [0.73105858, 0.5       , 0.5       ]])\n    \"\"\"\n    return 1 / (1 + np.exp(-value))\n\n\ndef sigmoid_derivative(value: np.ndarray) -> np.ndarray:\n    \"\"\"\n    Provides the derivative value of the sigmoid function.\n\n    returns derivative of the sigmoid value\n\n    >>> sigmoid_derivative(np.array(([1, 0, 2], [1, 0, 0]), dtype=np.float64))\n    array([[ 0.,  0., -2.],\n           [ 0.,  0.,  0.]])\n    \"\"\"\n    return (value) * (1 - (value))\n\n\ndef example() -> int:\n    \"\"\"\n    Example for \"how to use the neural network class and use the\n    respected methods for the desired output\".\n    Calls the TwoHiddenLayerNeuralNetwork class and\n    provides the fixed input output values to the model.\n    Model is trained for a fixed amount of iterations then the predict method is called.\n    In this example the output is divided into 2 classes i.e. binary classification,\n    the two classes are represented by '0' and '1'.\n\n    >>> example() in (0, 1)\n    True\n    \"\"\"\n    # Input values.\n    test_input = np.array(\n        (\n            [0, 0, 0],\n            [0, 0, 1],\n            [0, 1, 0],\n            [0, 1, 1],\n            [1, 0, 0],\n            [1, 0, 1],\n            [1, 1, 0],\n            [1, 1, 1],\n        ),\n        dtype=np.float64,\n    )\n\n    # True output values for the given input values.\n    output = np.array(([0], [1], [1], [0], [1], [0], [0], [1]), dtype=np.float64)\n\n    # Calling neural network class.\n    neural_network = TwoHiddenLayerNeuralNetwork(\n        input_array=test_input, output_array=output\n    )\n\n    # Calling training function.\n    # Set give_loss to True if you want to see loss in every iteration.\n    neural_network.train(output=output, iterations=10, give_loss=False)\n\n    return neural_network.predict(np.array(([1, 1, 1]), dtype=np.float64))\n\n\nif __name__ == \"__main__\":\n    example()\n"
  },
  {
    "path": "other/__init__.py",
    "content": ""
  },
  {
    "path": "other/activity_selection.py",
    "content": "\"\"\"The following implementation assumes that the activities\nare already sorted according to their finish time\"\"\"\n\n\"\"\"Prints a maximum set of activities that can be done by a\nsingle person, one at a time\"\"\"\n# n --> Total number of activities\n# start[]--> An array that contains start time of all activities\n# finish[] --> An array that contains finish time of all activities\n\n\ndef print_max_activities(start: list[int], finish: list[int]) -> None:\n    \"\"\"\n    >>> start = [1, 3, 0, 5, 8, 5]\n    >>> finish = [2, 4, 6, 7, 9, 9]\n    >>> print_max_activities(start, finish)\n    The following activities are selected:\n    0,1,3,4,\n    \"\"\"\n    n = len(finish)\n    print(\"The following activities are selected:\")\n\n    # The first activity is always selected\n    i = 0\n    print(i, end=\",\")\n\n    # Consider rest of the activities\n    for j in range(n):\n        # If this activity has start time greater than\n        # or equal to the finish time of previously\n        # selected activity, then select it\n        if start[j] >= finish[i]:\n            print(j, end=\",\")\n            i = j\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    start = [1, 3, 0, 5, 8, 5]\n    finish = [2, 4, 6, 7, 9, 9]\n    print_max_activities(start, finish)\n"
  },
  {
    "path": "other/alternative_list_arrange.py",
    "content": "def alternative_list_arrange(first_input_list: list, second_input_list: list) -> list:\n    \"\"\"\n    The method arranges two lists as one list in alternative forms of the list elements.\n    :param first_input_list:\n    :param second_input_list:\n    :return: List\n    >>> alternative_list_arrange([1, 2, 3, 4, 5], [\"A\", \"B\", \"C\"])\n    [1, 'A', 2, 'B', 3, 'C', 4, 5]\n    >>> alternative_list_arrange([\"A\", \"B\", \"C\"], [1, 2, 3, 4, 5])\n    ['A', 1, 'B', 2, 'C', 3, 4, 5]\n    >>> alternative_list_arrange([\"X\", \"Y\", \"Z\"], [9, 8, 7, 6])\n    ['X', 9, 'Y', 8, 'Z', 7, 6]\n    >>> alternative_list_arrange([1, 2, 3, 4, 5], [])\n    [1, 2, 3, 4, 5]\n    \"\"\"\n    first_input_list_length: int = len(first_input_list)\n    second_input_list_length: int = len(second_input_list)\n    abs_length: int = (\n        first_input_list_length\n        if first_input_list_length > second_input_list_length\n        else second_input_list_length\n    )\n    output_result_list: list = []\n    for char_count in range(abs_length):\n        if char_count < first_input_list_length:\n            output_result_list.append(first_input_list[char_count])\n        if char_count < second_input_list_length:\n            output_result_list.append(second_input_list[char_count])\n\n    return output_result_list\n\n\nif __name__ == \"__main__\":\n    print(alternative_list_arrange([\"A\", \"B\", \"C\"], [1, 2, 3, 4, 5]), end=\" \")\n"
  },
  {
    "path": "other/bankers_algorithm.py",
    "content": "# A Python implementation of the Banker's Algorithm in Operating Systems using\n# Processes and Resources\n# {\n# \"Author: \"Biney Kingsley (bluedistro@github.io), bineykingsley36@gmail.com\",\n# \"Date\": 28-10-2018\n# }\n\"\"\"\nThe Banker's algorithm is a resource allocation and deadlock avoidance algorithm\ndeveloped by Edsger Dijkstra that tests for safety by simulating the allocation of\npredetermined maximum possible amounts of all resources, and then makes a \"s-state\"\ncheck to test for possible deadlock conditions for all other pending activities,\nbefore deciding whether allocation should be allowed to continue.\n\n| [Source] Wikipedia\n| [Credit] Rosetta Code C implementation helped very much.\n| (https://rosettacode.org/wiki/Banker%27s_algorithm)\n\"\"\"\n\nfrom __future__ import annotations\n\nimport numpy as np\n\ntest_claim_vector = [8, 5, 9, 7]\ntest_allocated_res_table = [\n    [2, 0, 1, 1],\n    [0, 1, 2, 1],\n    [4, 0, 0, 3],\n    [0, 2, 1, 0],\n    [1, 0, 3, 0],\n]\ntest_maximum_claim_table = [\n    [3, 2, 1, 4],\n    [0, 2, 5, 2],\n    [5, 1, 0, 5],\n    [1, 5, 3, 0],\n    [3, 0, 3, 3],\n]\n\n\nclass BankersAlgorithm:\n    def __init__(\n        self,\n        claim_vector: list[int],\n        allocated_resources_table: list[list[int]],\n        maximum_claim_table: list[list[int]],\n    ) -> None:\n        \"\"\"\n        :param claim_vector: A nxn/nxm list depicting the amount of each resources\n         (eg. memory, interface, semaphores, etc.) available.\n        :param allocated_resources_table: A nxn/nxm list depicting the amount of each\n         resource each process is currently holding\n        :param maximum_claim_table: A nxn/nxm list depicting how much of each resource\n         the system currently has available\n        \"\"\"\n        self.__claim_vector = claim_vector\n        self.__allocated_resources_table = allocated_resources_table\n        self.__maximum_claim_table = maximum_claim_table\n\n    def __processes_resource_summation(self) -> list[int]:\n        \"\"\"\n        Check for allocated resources in line with each resource in the claim vector\n        \"\"\"\n        return [\n            sum(p_item[i] for p_item in self.__allocated_resources_table)\n            for i in range(len(self.__allocated_resources_table[0]))\n        ]\n\n    def __available_resources(self) -> list[int]:\n        \"\"\"\n        Check for available resources in line with each resource in the claim vector\n        \"\"\"\n        return np.array(self.__claim_vector) - np.array(\n            self.__processes_resource_summation()\n        )\n\n    def __need(self) -> list[list[int]]:\n        \"\"\"\n        Implement safety checker that calculates the needs by ensuring that\n        ``max_claim[i][j] - alloc_table[i][j] <= avail[j]``\n        \"\"\"\n        return [\n            list(np.array(self.__maximum_claim_table[i]) - np.array(allocated_resource))\n            for i, allocated_resource in enumerate(self.__allocated_resources_table)\n        ]\n\n    def __need_index_manager(self) -> dict[int, list[int]]:\n        \"\"\"\n        This function builds an index control dictionary to track original ids/indices\n        of processes when altered during execution of method \"main\"\n\n            :Return: {0: [a: int, b: int], 1: [c: int, d: int]}\n\n        >>> index_control = BankersAlgorithm(\n        ...     test_claim_vector, test_allocated_res_table, test_maximum_claim_table\n        ... )._BankersAlgorithm__need_index_manager()\n        >>> {key: [int(x) for x in value] for key, value\n        ...     in index_control.items()}  # doctest: +NORMALIZE_WHITESPACE\n        {0: [1, 2, 0, 3], 1: [0, 1, 3, 1], 2: [1, 1, 0, 2], 3: [1, 3, 2, 0],\n         4: [2, 0, 0, 3]}\n        \"\"\"\n        return {self.__need().index(i): i for i in self.__need()}\n\n    def main(self, **kwargs) -> None:\n        \"\"\"\n        Utilize various methods in this class to simulate the Banker's algorithm\n            :Return: None\n\n        >>> BankersAlgorithm(test_claim_vector, test_allocated_res_table,\n        ...    test_maximum_claim_table).main(describe=True)\n                 Allocated Resource Table\n        P1       2        0        1        1\n        <BLANKLINE>\n        P2       0        1        2        1\n        <BLANKLINE>\n        P3       4        0        0        3\n        <BLANKLINE>\n        P4       0        2        1        0\n        <BLANKLINE>\n        P5       1        0        3        0\n        <BLANKLINE>\n                 System Resource Table\n        P1       3        2        1        4\n        <BLANKLINE>\n        P2       0        2        5        2\n        <BLANKLINE>\n        P3       5        1        0        5\n        <BLANKLINE>\n        P4       1        5        3        0\n        <BLANKLINE>\n        P5       3        0        3        3\n        <BLANKLINE>\n        Current Usage by Active Processes: 8 5 9 7\n        Initial Available Resources:       1 2 2 2\n        __________________________________________________\n        <BLANKLINE>\n        Process 3 is executing.\n        Updated available resource stack for processes: 5 2 2 5\n        The process is in a safe state.\n        <BLANKLINE>\n        Process 1 is executing.\n        Updated available resource stack for processes: 7 2 3 6\n        The process is in a safe state.\n        <BLANKLINE>\n        Process 2 is executing.\n        Updated available resource stack for processes: 7 3 5 7\n        The process is in a safe state.\n        <BLANKLINE>\n        Process 4 is executing.\n        Updated available resource stack for processes: 7 5 6 7\n        The process is in a safe state.\n        <BLANKLINE>\n        Process 5 is executing.\n        Updated available resource stack for processes: 8 5 9 7\n        The process is in a safe state.\n        <BLANKLINE>\n        \"\"\"\n        need_list = self.__need()\n        alloc_resources_table = self.__allocated_resources_table\n        available_resources = self.__available_resources()\n        need_index_manager = self.__need_index_manager()\n        for kw, val in kwargs.items():\n            if kw and val is True:\n                self.__pretty_data()\n        print(\"_\" * 50 + \"\\n\")\n        while need_list:\n            safe = False\n            for each_need in need_list:\n                execution = True\n                for index, need in enumerate(each_need):\n                    if need > available_resources[index]:\n                        execution = False\n                        break\n                if execution:\n                    safe = True\n                    # get the original index of the process from ind_ctrl db\n                    for original_need_index, need_clone in need_index_manager.items():\n                        if each_need == need_clone:\n                            process_number = original_need_index\n                    print(f\"Process {process_number + 1} is executing.\")\n                    # remove the process run from stack\n                    need_list.remove(each_need)\n                    # update available/freed resources stack\n                    available_resources = np.array(available_resources) + np.array(\n                        alloc_resources_table[process_number]\n                    )\n                    print(\n                        \"Updated available resource stack for processes: \"\n                        + \" \".join([str(x) for x in available_resources])\n                    )\n                    break\n            if safe:\n                print(\"The process is in a safe state.\\n\")\n            else:\n                print(\"System in unsafe state. Aborting...\\n\")\n                break\n\n    def __pretty_data(self):\n        \"\"\"\n        Properly align display of the algorithm's solution\n        \"\"\"\n        print(\" \" * 9 + \"Allocated Resource Table\")\n        for item in self.__allocated_resources_table:\n            print(\n                f\"P{self.__allocated_resources_table.index(item) + 1}\"\n                + \" \".join(f\"{it:>8}\" for it in item)\n                + \"\\n\"\n            )\n        print(\" \" * 9 + \"System Resource Table\")\n        for item in self.__maximum_claim_table:\n            print(\n                f\"P{self.__maximum_claim_table.index(item) + 1}\"\n                + \" \".join(f\"{it:>8}\" for it in item)\n                + \"\\n\"\n            )\n        print(\n            \"Current Usage by Active Processes: \"\n            + \" \".join(str(x) for x in self.__claim_vector)\n        )\n        print(\n            \"Initial Available Resources:       \"\n            + \" \".join(str(x) for x in self.__available_resources())\n        )\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "other/davis_putnam_logemann_loveland.py",
    "content": "#!/usr/bin/env python3\n\n\"\"\"\nDavis-Putnam-Logemann-Loveland (DPLL) algorithm is a complete, backtracking-based\nsearch algorithm for deciding the satisfiability of propositional logic formulae in\nconjunctive normal form, i.e, for solving the Conjunctive Normal Form SATisfiability\n(CNF-SAT) problem.\n\nFor more information about the algorithm: https://en.wikipedia.org/wiki/DPLL_algorithm\n\"\"\"\n\nfrom __future__ import annotations\n\nimport random\nfrom collections.abc import Iterable\n\n\nclass Clause:\n    \"\"\"\n    | A clause represented in Conjunctive Normal Form.\n    | A clause is a set of literals, either complemented or otherwise.\n\n    For example:\n        * {A1, A2, A3'} is the clause (A1 v A2 v A3')\n        * {A5', A2', A1} is the clause (A5' v A2' v A1)\n\n    Create model\n\n    >>> clause = Clause([\"A1\", \"A2'\", \"A3\"])\n    >>> clause.evaluate({\"A1\": True})\n    True\n    \"\"\"\n\n    def __init__(self, literals: list[str]) -> None:\n        \"\"\"\n        Represent the literals and an assignment in a clause.\"\n        \"\"\"\n        # Assign all literals to None initially\n        self.literals: dict[str, bool | None] = dict.fromkeys(literals)\n\n    def __str__(self) -> str:\n        \"\"\"\n        To print a clause as in Conjunctive Normal Form.\n\n        >>> str(Clause([\"A1\", \"A2'\", \"A3\"]))\n        \"{A1 , A2' , A3}\"\n        \"\"\"\n        return \"{\" + \" , \".join(self.literals) + \"}\"\n\n    def __len__(self) -> int:\n        \"\"\"\n        To print a clause as in Conjunctive Normal Form.\n\n        >>> len(Clause([]))\n        0\n        >>> len(Clause([\"A1\", \"A2'\", \"A3\"]))\n        3\n        \"\"\"\n        return len(self.literals)\n\n    def assign(self, model: dict[str, bool | None]) -> None:\n        \"\"\"\n        Assign values to literals of the clause as given by model.\n        \"\"\"\n        for literal in self.literals:\n            symbol = literal[:2]\n            if symbol in model:\n                value = model[symbol]\n            else:\n                continue\n            # Complement assignment if literal is in complemented form\n            if value is not None and literal.endswith(\"'\"):\n                value = not value\n            self.literals[literal] = value\n\n    def evaluate(self, model: dict[str, bool | None]) -> bool | None:\n        \"\"\"\n        Evaluates the clause with the assignments in model.\n\n        This has the following steps:\n          1. Return ``True`` if both a literal and its complement exist in the clause.\n          2. Return ``True`` if a single literal has the assignment ``True``.\n          3. Return ``None`` (unable to complete evaluation)\n             if a literal has no assignment.\n          4. Compute disjunction of all values assigned in clause.\n        \"\"\"\n        for literal in self.literals:\n            symbol = literal.rstrip(\"'\") if literal.endswith(\"'\") else literal + \"'\"\n            if symbol in self.literals:\n                return True\n\n        self.assign(model)\n        for value in self.literals.values():\n            if value in (True, None):\n                return value\n        return any(self.literals.values())\n\n\nclass Formula:\n    \"\"\"\n    | A formula represented in Conjunctive Normal Form.\n    | A formula is a set of clauses.\n    | For example,\n    |   {{A1, A2, A3'}, {A5', A2', A1}} is ((A1 v A2 v A3') and (A5' v A2' v A1))\n    \"\"\"\n\n    def __init__(self, clauses: Iterable[Clause]) -> None:\n        \"\"\"\n        Represent the number of clauses and the clauses themselves.\n        \"\"\"\n        self.clauses = list(clauses)\n\n    def __str__(self) -> str:\n        \"\"\"\n        To print a formula as in Conjunctive Normal Form.\n\n        >>> str(Formula([Clause([\"A1\", \"A2'\", \"A3\"]), Clause([\"A5'\", \"A2'\", \"A1\"])]))\n        \"{{A1 , A2' , A3} , {A5' , A2' , A1}}\"\n        \"\"\"\n        return \"{\" + \" , \".join(str(clause) for clause in self.clauses) + \"}\"\n\n\ndef generate_clause() -> Clause:\n    \"\"\"\n    | Randomly generate a clause.\n    | All literals have the name Ax, where x is an integer from ``1`` to ``5``.\n    \"\"\"\n    literals = []\n    no_of_literals = random.randint(1, 5)\n    base_var = \"A\"\n    i = 0\n    while i < no_of_literals:\n        var_no = random.randint(1, 5)\n        var_name = base_var + str(var_no)\n        var_complement = random.randint(0, 1)\n        if var_complement == 1:\n            var_name += \"'\"\n        if var_name in literals:\n            i -= 1\n        else:\n            literals.append(var_name)\n        i += 1\n    return Clause(literals)\n\n\ndef generate_formula() -> Formula:\n    \"\"\"\n    Randomly generate a formula.\n    \"\"\"\n    clauses: set[Clause] = set()\n    no_of_clauses = random.randint(1, 10)\n    while len(clauses) < no_of_clauses:\n        clauses.add(generate_clause())\n    return Formula(clauses)\n\n\ndef generate_parameters(formula: Formula) -> tuple[list[Clause], list[str]]:\n    \"\"\"\n    | Return the clauses and symbols from a formula.\n    | A symbol is the uncomplemented form of a literal.\n\n    For example,\n      * Symbol of A3 is A3.\n      * Symbol of A5' is A5.\n\n    >>> formula = Formula([Clause([\"A1\", \"A2'\", \"A3\"]), Clause([\"A5'\", \"A2'\", \"A1\"])])\n    >>> clauses, symbols = generate_parameters(formula)\n    >>> clauses_list = [str(i) for i in clauses]\n    >>> clauses_list\n    [\"{A1 , A2' , A3}\", \"{A5' , A2' , A1}\"]\n    >>> symbols\n    ['A1', 'A2', 'A3', 'A5']\n    \"\"\"\n    clauses = formula.clauses\n    symbols_set = []\n    for clause in formula.clauses:\n        for literal in clause.literals:\n            symbol = literal[:2]\n            if symbol not in symbols_set:\n                symbols_set.append(symbol)\n    return clauses, symbols_set\n\n\ndef find_pure_symbols(\n    clauses: list[Clause], symbols: list[str], model: dict[str, bool | None]\n) -> tuple[list[str], dict[str, bool | None]]:\n    \"\"\"\n    | Return pure symbols and their values to satisfy clause.\n    | Pure symbols are symbols in a formula that exist only in one form,\n    | either complemented or otherwise.\n    | For example,\n    |   {{A4 , A3 , A5' , A1 , A3'} , {A4} , {A3}} has pure symbols A4, A5' and A1.\n\n    This has the following steps:\n      1. Ignore clauses that have already evaluated to be ``True``.\n      2. Find symbols that occur only in one form in the rest of the clauses.\n      3. Assign value ``True`` or ``False`` depending on whether the symbols occurs\n         in normal or complemented form respectively.\n\n    >>> formula = Formula([Clause([\"A1\", \"A2'\", \"A3\"]), Clause([\"A5'\", \"A2'\", \"A1\"])])\n    >>> clauses, symbols = generate_parameters(formula)\n    >>> pure_symbols, values = find_pure_symbols(clauses, symbols, {})\n    >>> pure_symbols\n    ['A1', 'A2', 'A3', 'A5']\n    >>> values\n    {'A1': True, 'A2': False, 'A3': True, 'A5': False}\n    \"\"\"\n    pure_symbols = []\n    assignment: dict[str, bool | None] = {}\n    literals = []\n\n    for clause in clauses:\n        if clause.evaluate(model):\n            continue\n        for literal in clause.literals:\n            literals.append(literal)\n\n    for s in symbols:\n        sym = s + \"'\"\n        if (s in literals and sym not in literals) or (\n            s not in literals and sym in literals\n        ):\n            pure_symbols.append(s)\n    for p in pure_symbols:\n        assignment[p] = None\n    for s in pure_symbols:\n        sym = s + \"'\"\n        if s in literals:\n            assignment[s] = True\n        elif sym in literals:\n            assignment[s] = False\n    return pure_symbols, assignment\n\n\ndef find_unit_clauses(\n    clauses: list[Clause],\n    model: dict[str, bool | None],  # noqa: ARG001\n) -> tuple[list[str], dict[str, bool | None]]:\n    \"\"\"\n    Returns the unit symbols and their values to satisfy clause.\n\n    Unit symbols are symbols in a formula that are:\n      - Either the only symbol in a clause\n      - Or all other literals in that clause have been assigned ``False``\n\n    This has the following steps:\n      1. Find symbols that are the only occurrences in a clause.\n      2. Find symbols in a clause where all other literals are assigned ``False``.\n      3. Assign ``True`` or ``False`` depending on whether the symbols occurs in\n         normal or complemented form respectively.\n\n    >>> clause1 = Clause([\"A4\", \"A3\", \"A5'\", \"A1\", \"A3'\"])\n    >>> clause2 = Clause([\"A4\"])\n    >>> clause3 = Clause([\"A3\"])\n    >>> clauses, symbols = generate_parameters(Formula([clause1, clause2, clause3]))\n    >>> unit_clauses, values = find_unit_clauses(clauses, {})\n    >>> unit_clauses\n    ['A4', 'A3']\n    >>> values\n    {'A4': True, 'A3': True}\n    \"\"\"\n    unit_symbols = []\n    for clause in clauses:\n        if len(clause) == 1:\n            unit_symbols.append(next(iter(clause.literals.keys())))\n        else:\n            f_count, n_count = 0, 0\n            for literal, value in clause.literals.items():\n                if value is False:\n                    f_count += 1\n                elif value is None:\n                    sym = literal\n                    n_count += 1\n            if f_count == len(clause) - 1 and n_count == 1:\n                unit_symbols.append(sym)\n    assignment: dict[str, bool | None] = {}\n    for i in unit_symbols:\n        symbol = i[:2]\n        assignment[symbol] = len(i) == 2\n    unit_symbols = [i[:2] for i in unit_symbols]\n\n    return unit_symbols, assignment\n\n\ndef dpll_algorithm(\n    clauses: list[Clause], symbols: list[str], model: dict[str, bool | None]\n) -> tuple[bool | None, dict[str, bool | None] | None]:\n    \"\"\"\n    Returns the model if the formula is satisfiable, else ``None``\n\n    This has the following steps:\n      1. If every clause in clauses is ``True``, return ``True``.\n      2. If some clause in clauses is ``False``, return ``False``.\n      3. Find pure symbols.\n      4. Find unit symbols.\n\n    >>> formula = Formula([Clause([\"A4\", \"A3\", \"A5'\", \"A1\", \"A3'\"]), Clause([\"A4\"])])\n    >>> clauses, symbols = generate_parameters(formula)\n    >>> soln, model = dpll_algorithm(clauses, symbols, {})\n    >>> soln\n    True\n    >>> model\n    {'A4': True}\n    \"\"\"\n    check_clause_all_true = True\n    for clause in clauses:\n        clause_check = clause.evaluate(model)\n        if clause_check is False:\n            return False, None\n        elif clause_check is None:\n            check_clause_all_true = False\n            continue\n\n    if check_clause_all_true:\n        return True, model\n\n    try:\n        pure_symbols, assignment = find_pure_symbols(clauses, symbols, model)\n    except RecursionError:\n        print(\"raises a RecursionError and is\")\n        return None, {}\n    p = None\n    if len(pure_symbols) > 0:\n        p, value = pure_symbols[0], assignment[pure_symbols[0]]\n\n    if p:\n        tmp_model = model\n        tmp_model[p] = value\n        tmp_symbols = list(symbols)\n        if p in tmp_symbols:\n            tmp_symbols.remove(p)\n        return dpll_algorithm(clauses, tmp_symbols, tmp_model)\n\n    unit_symbols, assignment = find_unit_clauses(clauses, model)\n    p = None\n    if len(unit_symbols) > 0:\n        p, value = unit_symbols[0], assignment[unit_symbols[0]]\n    if p:\n        tmp_model = model\n        tmp_model[p] = value\n        tmp_symbols = list(symbols)\n        if p in tmp_symbols:\n            tmp_symbols.remove(p)\n        return dpll_algorithm(clauses, tmp_symbols, tmp_model)\n    p = symbols[0]\n    rest = symbols[1:]\n    tmp1, tmp2 = model, model\n    tmp1[p], tmp2[p] = True, False\n\n    return dpll_algorithm(clauses, rest, tmp1) or dpll_algorithm(clauses, rest, tmp2)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    formula = generate_formula()\n    print(f\"The formula {formula} is\", end=\" \")\n\n    clauses, symbols = generate_parameters(formula)\n    solution, model = dpll_algorithm(clauses, symbols, {})\n\n    if solution:\n        print(f\"satisfiable with the assignment {model}.\")\n    else:\n        print(\"not satisfiable.\")\n"
  },
  {
    "path": "other/doomsday.py",
    "content": "#!/bin/python3\n# Doomsday algorithm info: https://en.wikipedia.org/wiki/Doomsday_rule\n\nDOOMSDAY_LEAP = [4, 1, 7, 4, 2, 6, 4, 1, 5, 3, 7, 5]\nDOOMSDAY_NOT_LEAP = [3, 7, 7, 4, 2, 6, 4, 1, 5, 3, 7, 5]\nWEEK_DAY_NAMES = {\n    0: \"Sunday\",\n    1: \"Monday\",\n    2: \"Tuesday\",\n    3: \"Wednesday\",\n    4: \"Thursday\",\n    5: \"Friday\",\n    6: \"Saturday\",\n}\n\n\ndef get_week_day(year: int, month: int, day: int) -> str:\n    \"\"\"Returns the week-day name out of a given date.\n\n    >>> get_week_day(2020, 10, 24)\n    'Saturday'\n    >>> get_week_day(2017, 10, 24)\n    'Tuesday'\n    >>> get_week_day(2019, 5, 3)\n    'Friday'\n    >>> get_week_day(1970, 9, 16)\n    'Wednesday'\n    >>> get_week_day(1870, 8, 13)\n    'Saturday'\n    >>> get_week_day(2040, 3, 14)\n    'Wednesday'\n\n    \"\"\"\n    # minimal input check:\n    assert len(str(year)) > 2, \"year should be in YYYY format\"\n    assert 1 <= month <= 12, \"month should be between 1 to 12\"\n    assert 1 <= day <= 31, \"day should be between 1 to 31\"\n\n    # Doomsday algorithm:\n    century = year // 100\n    century_anchor = (5 * (century % 4) + 2) % 7\n    centurian = year % 100\n    centurian_m = centurian % 12\n    dooms_day = (\n        (centurian // 12) + centurian_m + (centurian_m // 4) + century_anchor\n    ) % 7\n    day_anchor = (\n        DOOMSDAY_NOT_LEAP[month - 1]\n        if year % 4 != 0 or (centurian == 0 and year % 400 != 0)\n        else DOOMSDAY_LEAP[month - 1]\n    )\n    week_day = (dooms_day + day - day_anchor) % 7\n    return WEEK_DAY_NAMES[week_day]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "other/fischer_yates_shuffle.py",
    "content": "#!/usr/bin/python\n\"\"\"\nThe Fisher-Yates shuffle is an algorithm for generating a random permutation of a\nfinite sequence.\nFor more details visit\nwikipedia/Fischer-Yates-Shuffle.\n\"\"\"\n\nimport random\nfrom typing import Any\n\n\ndef fisher_yates_shuffle(data: list) -> list[Any]:\n    for _ in range(len(data)):\n        a = random.randint(0, len(data) - 1)\n        b = random.randint(0, len(data) - 1)\n        data[a], data[b] = data[b], data[a]\n    return data\n\n\nif __name__ == \"__main__\":\n    integers = [0, 1, 2, 3, 4, 5, 6, 7]\n    strings = [\"python\", \"says\", \"hello\", \"!\"]\n    print(\"Fisher-Yates Shuffle:\")\n    print(\"List\", integers, strings)\n    print(\"FY Shuffle\", fisher_yates_shuffle(integers), fisher_yates_shuffle(strings))\n"
  },
  {
    "path": "other/gauss_easter.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/Computus#Gauss'_Easter_algorithm\n\"\"\"\n\nimport math\nfrom datetime import UTC, datetime, timedelta\n\n\ndef gauss_easter(year: int) -> datetime:\n    \"\"\"\n    Calculation Gregorian easter date for given year\n\n    >>> gauss_easter(2007)\n    datetime.datetime(2007, 4, 8, 0, 0, tzinfo=datetime.timezone.utc)\n\n    >>> gauss_easter(2008)\n    datetime.datetime(2008, 3, 23, 0, 0, tzinfo=datetime.timezone.utc)\n\n    >>> gauss_easter(2020)\n    datetime.datetime(2020, 4, 12, 0, 0, tzinfo=datetime.timezone.utc)\n\n    >>> gauss_easter(2021)\n    datetime.datetime(2021, 4, 4, 0, 0, tzinfo=datetime.timezone.utc)\n    \"\"\"\n    metonic_cycle = year % 19\n    julian_leap_year = year % 4\n    non_leap_year = year % 7\n    leap_day_inhibits = math.floor(year / 100)\n    lunar_orbit_correction = math.floor((13 + 8 * leap_day_inhibits) / 25)\n    leap_day_reinstall_number = leap_day_inhibits / 4\n    secular_moon_shift = (\n        15 - lunar_orbit_correction + leap_day_inhibits - leap_day_reinstall_number\n    ) % 30\n    century_starting_point = (4 + leap_day_inhibits - leap_day_reinstall_number) % 7\n\n    # days to be added to March 21\n    days_to_add = (19 * metonic_cycle + secular_moon_shift) % 30\n\n    # PHM -> Paschal Full Moon\n    days_from_phm_to_sunday = (\n        2 * julian_leap_year\n        + 4 * non_leap_year\n        + 6 * days_to_add\n        + century_starting_point\n    ) % 7\n\n    if days_to_add == 29 and days_from_phm_to_sunday == 6:\n        return datetime(year, 4, 19, tzinfo=UTC)\n    elif days_to_add == 28 and days_from_phm_to_sunday == 6:\n        return datetime(year, 4, 18, tzinfo=UTC)\n    else:\n        return datetime(year, 3, 22, tzinfo=UTC) + timedelta(\n            days=int(days_to_add + days_from_phm_to_sunday)\n        )\n\n\nif __name__ == \"__main__\":\n    for year in (1994, 2000, 2010, 2021, 2023, 2032, 2100):\n        tense = \"will be\" if year > datetime.now(tz=UTC).year else \"was\"\n        print(f\"Easter in {year} {tense} {gauss_easter(year)}\")\n"
  },
  {
    "path": "other/graham_scan.py",
    "content": "\"\"\"\nThis is a pure Python implementation of the Graham scan algorithm\nSource: https://en.wikipedia.org/wiki/Graham_scan\n\nFor doctests run following command:\npython3 -m doctest -v graham_scan.py\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections import deque\nfrom enum import Enum\nfrom math import atan2, degrees\nfrom sys import maxsize\n\n\n# traversal from the lowest and the most left point in anti-clockwise direction\n# if direction gets right, the previous point is not the convex hull.\nclass Direction(Enum):\n    left = 1\n    straight = 2\n    right = 3\n\n    def __repr__(self):\n        return f\"{self.__class__.__name__}.{self.name}\"\n\n\ndef angle_comparer(point: tuple[int, int], minx: int, miny: int) -> float:\n    \"\"\"Return the angle toward to point from (minx, miny)\n\n    :param point: The target point\n           minx: The starting point's x\n           miny: The starting point's y\n    :return: the angle\n\n    Examples:\n    >>> angle_comparer((1,1), 0, 0)\n    45.0\n\n    >>> angle_comparer((100,1), 10, 10)\n    -5.710593137499642\n\n    >>> angle_comparer((5,5), 2, 3)\n    33.690067525979785\n    \"\"\"\n    # sort the points accorgind to the angle from the lowest and the most left point\n    x, y = point\n    return degrees(atan2(y - miny, x - minx))\n\n\ndef check_direction(\n    starting: tuple[int, int], via: tuple[int, int], target: tuple[int, int]\n) -> Direction:\n    \"\"\"Return the direction toward to the line from via to target from starting\n\n    :param starting: The starting point\n           via: The via point\n           target: The target point\n    :return: the Direction\n\n    Examples:\n    >>> check_direction((1,1), (2,2), (3,3))\n    Direction.straight\n\n    >>> check_direction((60,1), (-50,199), (30,2))\n    Direction.left\n\n    >>> check_direction((0,0), (5,5), (10,0))\n    Direction.right\n    \"\"\"\n    x0, y0 = starting\n    x1, y1 = via\n    x2, y2 = target\n    via_angle = degrees(atan2(y1 - y0, x1 - x0))\n    via_angle %= 360\n    target_angle = degrees(atan2(y2 - y0, x2 - x0))\n    target_angle %= 360\n    # t-\n    #  \\ \\\n    #   \\ v\n    #    \\|\n    #     s\n    # via_angle is always lower than target_angle, if direction is left.\n    # If they are same, it means they are on a same line of convex hull.\n    if target_angle > via_angle:\n        return Direction.left\n    elif target_angle == via_angle:\n        return Direction.straight\n    else:\n        return Direction.right\n\n\ndef graham_scan(points: list[tuple[int, int]]) -> list[tuple[int, int]]:\n    \"\"\"Pure implementation of graham scan algorithm in Python\n\n    :param points: The unique points on coordinates.\n    :return: The points on convex hell.\n\n    Examples:\n    >>> graham_scan([(9, 6), (3, 1), (0, 0), (5, 5), (5, 2), (7, 0), (3, 3), (1, 4)])\n    [(0, 0), (7, 0), (9, 6), (5, 5), (1, 4)]\n\n    >>> graham_scan([(0, 0), (1, 0), (1, 1), (0, 1)])\n    [(0, 0), (1, 0), (1, 1), (0, 1)]\n\n    >>> graham_scan([(0, 0), (1, 1), (2, 2), (3, 3), (-1, 2)])\n    [(0, 0), (1, 1), (2, 2), (3, 3), (-1, 2)]\n\n    >>> graham_scan([(-100, 20), (99, 3), (1, 10000001), (5133186, -25), (-66, -4)])\n    [(5133186, -25), (1, 10000001), (-100, 20), (-66, -4)]\n    \"\"\"\n\n    if len(points) <= 2:\n        # There is no convex hull\n        raise ValueError(\"graham_scan: argument must contain more than 3 points.\")\n    if len(points) == 3:\n        return points\n    # find the lowest and the most left point\n    minidx = 0\n    miny, minx = maxsize, maxsize\n    for i, point in enumerate(points):\n        x = point[0]\n        y = point[1]\n        if y < miny:\n            miny = y\n            minx = x\n            minidx = i\n        if y == miny and x < minx:\n            minx = x\n            minidx = i\n\n    # remove the lowest and the most left point from points for preparing for sort\n    points.pop(minidx)\n\n    sorted_points = sorted(points, key=lambda point: angle_comparer(point, minx, miny))\n    # This insert actually costs complexity,\n    # and you should instead add (minx, miny) into stack later.\n    # I'm using insert just for easy understanding.\n    sorted_points.insert(0, (minx, miny))\n\n    stack: deque[tuple[int, int]] = deque()\n    stack.append(sorted_points[0])\n    stack.append(sorted_points[1])\n    stack.append(sorted_points[2])\n    # The first 3 points lines are towards the left because we sort them by their angle\n    # from minx, miny.\n    current_direction = Direction.left\n\n    for i in range(3, len(sorted_points)):\n        while True:\n            starting = stack[-2]\n            via = stack[-1]\n            target = sorted_points[i]\n            next_direction = check_direction(starting, via, target)\n\n            if next_direction == Direction.left:\n                current_direction = Direction.left\n                break\n            if next_direction == Direction.straight:\n                if current_direction == Direction.left:\n                    # We keep current_direction as left.\n                    # Because if the straight line keeps as straight,\n                    # we want to know if this straight line is towards left.\n                    break\n                elif current_direction == Direction.right:\n                    # If the straight line is towards right,\n                    # every previous points on that straight line is not convex hull.\n                    stack.pop()\n            if next_direction == Direction.right:\n                stack.pop()\n        stack.append(sorted_points[i])\n    return list(stack)\n"
  },
  {
    "path": "other/greedy.py",
    "content": "class Things:\n    def __init__(self, name, value, weight):\n        self.name = name\n        self.value = value\n        self.weight = weight\n\n    def __repr__(self):\n        return f\"{self.__class__.__name__}({self.name}, {self.value}, {self.weight})\"\n\n    def get_value(self):\n        return self.value\n\n    def get_name(self):\n        return self.name\n\n    def get_weight(self):\n        return self.weight\n\n    def value_weight(self):\n        return self.value / self.weight\n\n\ndef build_menu(name, value, weight):\n    menu = []\n    for i in range(len(value)):\n        menu.append(Things(name[i], value[i], weight[i]))\n    return menu\n\n\ndef greedy(item, max_cost, key_func):\n    items_copy = sorted(item, key=key_func, reverse=True)\n    result = []\n    total_value, total_cost = 0.0, 0.0\n    for i in range(len(items_copy)):\n        if (total_cost + items_copy[i].get_weight()) <= max_cost:\n            result.append(items_copy[i])\n            total_cost += items_copy[i].get_weight()\n            total_value += items_copy[i].get_value()\n    return (result, total_value)\n\n\ndef test_greedy():\n    \"\"\"\n    >>> food = [\"Burger\", \"Pizza\", \"Coca Cola\", \"Rice\",\n    ...         \"Sambhar\", \"Chicken\", \"Fries\", \"Milk\"]\n    >>> value = [80, 100, 60, 70, 50, 110, 90, 60]\n    >>> weight = [40, 60, 40, 70, 100, 85, 55, 70]\n    >>> foods = build_menu(food, value, weight)\n    >>> foods  # doctest: +NORMALIZE_WHITESPACE\n    [Things(Burger, 80, 40), Things(Pizza, 100, 60), Things(Coca Cola, 60, 40),\n     Things(Rice, 70, 70), Things(Sambhar, 50, 100), Things(Chicken, 110, 85),\n     Things(Fries, 90, 55), Things(Milk, 60, 70)]\n    >>> greedy(foods, 500, Things.get_value)  # doctest: +NORMALIZE_WHITESPACE\n    ([Things(Chicken, 110, 85), Things(Pizza, 100, 60), Things(Fries, 90, 55),\n      Things(Burger, 80, 40), Things(Rice, 70, 70), Things(Coca Cola, 60, 40),\n      Things(Milk, 60, 70)], 570.0)\n    \"\"\"\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "other/guess_the_number_search.py",
    "content": "\"\"\"\nguess the number using lower,higher and the value to find or guess\n\nsolution works by dividing lower and higher of number guessed\n\nsuppose lower is 0, higher is 1000 and the number to guess is 355\n\n>>> guess_the_number(10, 1000, 17)\nstarted...\nguess the number : 17\ndetails : [505, 257, 133, 71, 40, 25, 17]\n\n\"\"\"\n\n\ndef temp_input_value(\n    min_val: int = 10, max_val: int = 1000, option: bool = True\n) -> int:\n    \"\"\"\n    Temporary input values for tests\n\n    >>> temp_input_value(option=True)\n    10\n\n    >>> temp_input_value(option=False)\n    1000\n\n    >>> temp_input_value(min_val=100, option=True)\n    100\n\n    >>> temp_input_value(min_val=100, max_val=50)\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid value for min_val or max_val (min_value < max_value)\n\n    >>> temp_input_value(\"ten\",\"fifty\",1)\n    Traceback (most recent call last):\n        ...\n    AssertionError: Invalid type of value(s) specified to function!\n\n    >>> temp_input_value(min_val=-100, max_val=500)\n    -100\n\n    >>> temp_input_value(min_val=-5100, max_val=-100)\n    -5100\n    \"\"\"\n    assert (\n        isinstance(min_val, int)\n        and isinstance(max_val, int)\n        and isinstance(option, bool)\n    ), \"Invalid type of value(s) specified to function!\"\n\n    if min_val > max_val:\n        raise ValueError(\"Invalid value for min_val or max_val (min_value < max_value)\")\n    return min_val if option else max_val\n\n\ndef get_avg(number_1: int, number_2: int) -> int:\n    \"\"\"\n    Return the mid-number(whole) of two integers a and b\n\n    >>> get_avg(10, 15)\n    12\n\n    >>> get_avg(20, 300)\n    160\n\n    >>> get_avg(\"abcd\", 300)\n    Traceback (most recent call last):\n        ...\n    TypeError: can only concatenate str (not \"int\") to str\n\n    >>> get_avg(10.5,50.25)\n    30\n    \"\"\"\n    return int((number_1 + number_2) / 2)\n\n\ndef guess_the_number(lower: int, higher: int, to_guess: int) -> None:\n    \"\"\"\n    The `guess_the_number` function that guess the number by some operations\n    and using inner functions\n\n    >>> guess_the_number(10, 1000, 17)\n    started...\n    guess the number : 17\n    details : [505, 257, 133, 71, 40, 25, 17]\n\n    >>> guess_the_number(-10000, 10000, 7)\n    started...\n    guess the number : 7\n    details : [0, 5000, 2500, 1250, 625, 312, 156, 78, 39, 19, 9, 4, 6, 7]\n\n    >>> guess_the_number(10, 1000, \"a\")\n    Traceback (most recent call last):\n        ...\n    AssertionError: argument values must be type of \"int\"\n\n    >>> guess_the_number(10, 1000, 5)\n    Traceback (most recent call last):\n        ...\n    ValueError: guess value must be within the range of lower and higher value\n\n    >>> guess_the_number(10000, 100, 5)\n    Traceback (most recent call last):\n        ...\n    ValueError: argument value for lower and higher must be(lower > higher)\n    \"\"\"\n    assert (\n        isinstance(lower, int) and isinstance(higher, int) and isinstance(to_guess, int)\n    ), 'argument values must be type of \"int\"'\n\n    if lower > higher:\n        raise ValueError(\"argument value for lower and higher must be(lower > higher)\")\n\n    if not lower < to_guess < higher:\n        raise ValueError(\n            \"guess value must be within the range of lower and higher value\"\n        )\n\n    def answer(number: int) -> str:\n        \"\"\"\n        Returns value by comparing with entered `to_guess` number\n        \"\"\"\n        if number > to_guess:\n            return \"high\"\n        elif number < to_guess:\n            return \"low\"\n        else:\n            return \"same\"\n\n    print(\"started...\")\n\n    last_lowest = lower\n    last_highest = higher\n\n    last_numbers = []\n\n    while True:\n        number = get_avg(last_lowest, last_highest)\n        last_numbers.append(number)\n\n        if answer(number) == \"low\":\n            last_lowest = number\n        elif answer(number) == \"high\":\n            last_highest = number\n        else:\n            break\n\n    print(f\"guess the number : {last_numbers[-1]}\")\n    print(f\"details : {last_numbers!s}\")\n\n\ndef main() -> None:\n    \"\"\"\n    starting point or function of script\n    \"\"\"\n    lower = int(input(\"Enter lower value : \").strip())\n    higher = int(input(\"Enter high value : \").strip())\n    guess = int(input(\"Enter value to guess : \").strip())\n    guess_the_number(lower, higher, guess)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "other/h_index.py",
    "content": "\"\"\"\nTask:\nGiven an array of integers citations where citations[i] is the number of\ncitations a researcher received for their ith paper, return compute the\nresearcher's h-index.\n\nAccording to the definition of h-index on Wikipedia: A scientist has an\nindex h if h of their n papers have at least h citations each, and the other\nn - h papers have no more than h citations each.\n\nIf there are several possible values for h, the maximum one is taken as the\nh-index.\n\nH-Index link: https://en.wikipedia.org/wiki/H-index\n\nImplementation notes:\nUse sorting of array\n\nLeetcode link: https://leetcode.com/problems/h-index/description/\n\nn = len(citations)\nRuntime Complexity: O(n * log(n))\nSpace  Complexity: O(1)\n\n\"\"\"\n\n\ndef h_index(citations: list[int]) -> int:\n    \"\"\"\n    Return H-index of citations\n\n    >>> h_index([3, 0, 6, 1, 5])\n    3\n    >>> h_index([1, 3, 1])\n    1\n    >>> h_index([1, 2, 3])\n    2\n    >>> h_index('test')\n    Traceback (most recent call last):\n        ...\n    ValueError: The citations should be a list of non negative integers.\n    >>> h_index([1,2,'3'])\n    Traceback (most recent call last):\n        ...\n    ValueError: The citations should be a list of non negative integers.\n    >>> h_index([1,2,-3])\n    Traceback (most recent call last):\n        ...\n    ValueError: The citations should be a list of non negative integers.\n    \"\"\"\n\n    # validate:\n    if not isinstance(citations, list) or not all(\n        isinstance(item, int) and item >= 0 for item in citations\n    ):\n        raise ValueError(\"The citations should be a list of non negative integers.\")\n\n    citations.sort()\n    len_citations = len(citations)\n\n    for i in range(len_citations):\n        if citations[len_citations - 1 - i] <= i:\n            return i\n\n    return len_citations\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "other/least_recently_used.py",
    "content": "from __future__ import annotations\n\nimport sys\nfrom collections import deque\nfrom typing import TypeVar\n\nT = TypeVar(\"T\")\n\n\nclass LRUCache[T]:\n    \"\"\"\n    Page Replacement Algorithm, Least Recently Used (LRU) Caching.\n\n    >>> lru_cache: LRUCache[str | int] = LRUCache(4)\n    >>> lru_cache.refer(\"A\")\n    >>> lru_cache.refer(2)\n    >>> lru_cache.refer(3)\n\n    >>> lru_cache\n    LRUCache(4) => [3, 2, 'A']\n\n    >>> lru_cache.refer(\"A\")\n    >>> lru_cache\n    LRUCache(4) => ['A', 3, 2]\n\n    >>> lru_cache.refer(4)\n    >>> lru_cache.refer(5)\n    >>> lru_cache\n    LRUCache(4) => [5, 4, 'A', 3]\n\n    \"\"\"\n\n    dq_store: deque[T]  # Cache store of keys\n    key_reference: set[T]  # References of the keys in cache\n    _MAX_CAPACITY: int = 10  # Maximum capacity of cache\n\n    def __init__(self, n: int) -> None:\n        \"\"\"Creates an empty store and map for the keys.\n        The LRUCache is set the size n.\n        \"\"\"\n        self.dq_store = deque()\n        self.key_reference = set()\n        if not n:\n            LRUCache._MAX_CAPACITY = sys.maxsize\n        elif n < 0:\n            raise ValueError(\"n should be an integer greater than 0.\")\n        else:\n            LRUCache._MAX_CAPACITY = n\n\n    def refer(self, x: T) -> None:\n        \"\"\"\n        Looks for a page in the cache store and adds reference to the set.\n        Remove the least recently used key if the store is full.\n        Update store to reflect recent access.\n        \"\"\"\n        if x not in self.key_reference:\n            if len(self.dq_store) == LRUCache._MAX_CAPACITY:\n                last_element = self.dq_store.pop()\n                self.key_reference.remove(last_element)\n        else:\n            self.dq_store.remove(x)\n\n        self.dq_store.appendleft(x)\n        self.key_reference.add(x)\n\n    def display(self) -> None:\n        \"\"\"\n        Prints all the elements in the store.\n        \"\"\"\n        for k in self.dq_store:\n            print(k)\n\n    def __repr__(self) -> str:\n        return f\"LRUCache({self._MAX_CAPACITY}) => {list(self.dq_store)}\"\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    lru_cache: LRUCache[str | int] = LRUCache(4)\n    lru_cache.refer(\"A\")\n    lru_cache.refer(2)\n    lru_cache.refer(3)\n    lru_cache.refer(\"A\")\n    lru_cache.refer(4)\n    lru_cache.refer(5)\n    lru_cache.display()\n\n    print(lru_cache)\n    assert str(lru_cache) == \"LRUCache(4) => [5, 4, 'A', 3]\"\n"
  },
  {
    "path": "other/lfu_cache.py",
    "content": "from __future__ import annotations\n\nfrom collections.abc import Callable\nfrom typing import TypeVar\n\nT = TypeVar(\"T\")\nU = TypeVar(\"U\")\n\n\nclass DoubleLinkedListNode[T, U]:\n    \"\"\"\n    Double Linked List Node built specifically for LFU Cache\n\n    >>> node = DoubleLinkedListNode(1,1)\n    >>> node\n    Node: key: 1, val: 1, freq: 0, has next: False, has prev: False\n    \"\"\"\n\n    def __init__(self, key: T | None, val: U | None):\n        self.key = key\n        self.val = val\n        self.freq: int = 0\n        self.next: DoubleLinkedListNode[T, U] | None = None\n        self.prev: DoubleLinkedListNode[T, U] | None = None\n\n    def __repr__(self) -> str:\n        return (\n            f\"Node: key: {self.key}, val: {self.val}, freq: {self.freq}, \"\n            f\"has next: {self.next is not None}, has prev: {self.prev is not None}\"\n        )\n\n\nclass DoubleLinkedList[T, U]:\n    \"\"\"\n    Double Linked List built specifically for LFU Cache\n\n    >>> dll: DoubleLinkedList = DoubleLinkedList()\n    >>> dll\n    DoubleLinkedList,\n        Node: key: None, val: None, freq: 0, has next: True, has prev: False,\n        Node: key: None, val: None, freq: 0, has next: False, has prev: True\n\n    >>> first_node = DoubleLinkedListNode(1,10)\n    >>> first_node\n    Node: key: 1, val: 10, freq: 0, has next: False, has prev: False\n\n\n    >>> dll.add(first_node)\n    >>> dll\n    DoubleLinkedList,\n        Node: key: None, val: None, freq: 0, has next: True, has prev: False,\n        Node: key: 1, val: 10, freq: 1, has next: True, has prev: True,\n        Node: key: None, val: None, freq: 0, has next: False, has prev: True\n\n    >>> # node is mutated\n    >>> first_node\n    Node: key: 1, val: 10, freq: 1, has next: True, has prev: True\n\n    >>> second_node = DoubleLinkedListNode(2,20)\n    >>> second_node\n    Node: key: 2, val: 20, freq: 0, has next: False, has prev: False\n\n    >>> dll.add(second_node)\n    >>> dll\n    DoubleLinkedList,\n        Node: key: None, val: None, freq: 0, has next: True, has prev: False,\n        Node: key: 1, val: 10, freq: 1, has next: True, has prev: True,\n        Node: key: 2, val: 20, freq: 1, has next: True, has prev: True,\n        Node: key: None, val: None, freq: 0, has next: False, has prev: True\n\n    >>> removed_node = dll.remove(first_node)\n    >>> assert removed_node == first_node\n    >>> dll\n    DoubleLinkedList,\n        Node: key: None, val: None, freq: 0, has next: True, has prev: False,\n        Node: key: 2, val: 20, freq: 1, has next: True, has prev: True,\n        Node: key: None, val: None, freq: 0, has next: False, has prev: True\n\n\n    >>> # Attempt to remove node not on list\n    >>> removed_node = dll.remove(first_node)\n    >>> removed_node is None\n    True\n\n    >>> # Attempt to remove head or rear\n    >>> dll.head\n    Node: key: None, val: None, freq: 0, has next: True, has prev: False\n    >>> dll.remove(dll.head) is None\n    True\n\n    >>> # Attempt to remove head or rear\n    >>> dll.rear\n    Node: key: None, val: None, freq: 0, has next: False, has prev: True\n    >>> dll.remove(dll.rear) is None\n    True\n\n\n    \"\"\"\n\n    def __init__(self) -> None:\n        self.head: DoubleLinkedListNode[T, U] = DoubleLinkedListNode(None, None)\n        self.rear: DoubleLinkedListNode[T, U] = DoubleLinkedListNode(None, None)\n        self.head.next, self.rear.prev = self.rear, self.head\n\n    def __repr__(self) -> str:\n        rep = [\"DoubleLinkedList\"]\n        node = self.head\n        while node.next is not None:\n            rep.append(str(node))\n            node = node.next\n        rep.append(str(self.rear))\n        return \",\\n    \".join(rep)\n\n    def add(self, node: DoubleLinkedListNode[T, U]) -> None:\n        \"\"\"\n        Adds the given node at the tail of the list and shifting it to proper position\n        \"\"\"\n\n        previous = self.rear.prev\n\n        # All nodes other than self.head are guaranteed to have non-None previous\n        assert previous is not None\n\n        previous.next = node\n        node.prev = previous\n        self.rear.prev = node\n        node.next = self.rear\n        node.freq += 1\n        self._position_node(node)\n\n    def _position_node(self, node: DoubleLinkedListNode[T, U]) -> None:\n        \"\"\"\n        Moves node forward to maintain invariant of sort by freq value\n        \"\"\"\n\n        while node.prev is not None and node.prev.freq > node.freq:\n            # swap node with previous node\n            previous_node = node.prev\n\n            node.prev = previous_node.prev\n            previous_node.next = node.prev\n            node.next = previous_node\n            previous_node.prev = node\n\n    def remove(\n        self, node: DoubleLinkedListNode[T, U]\n    ) -> DoubleLinkedListNode[T, U] | None:\n        \"\"\"\n        Removes and returns the given node from the list\n\n        Returns None if node.prev or node.next is None\n        \"\"\"\n\n        if node.prev is None or node.next is None:\n            return None\n\n        node.prev.next = node.next\n        node.next.prev = node.prev\n        node.prev = None\n        node.next = None\n        return node\n\n\nclass LFUCache[T, U]:\n    \"\"\"\n    LFU Cache to store a given capacity of data. Can be used as a stand-alone object\n    or as a function decorator.\n\n    >>> cache = LFUCache(2)\n    >>> cache.put(1, 1)\n    >>> cache.put(2, 2)\n    >>> cache.get(1)\n    1\n    >>> cache.put(3, 3)\n    >>> cache.get(2) is None\n    True\n    >>> cache.put(4, 4)\n    >>> cache.get(1) is None\n    True\n    >>> cache.get(3)\n    3\n    >>> cache.get(4)\n    4\n    >>> cache\n    CacheInfo(hits=3, misses=2, capacity=2, current_size=2)\n    >>> @LFUCache.decorator(100)\n    ... def fib(num):\n    ...     if num in (1, 2):\n    ...         return 1\n    ...     return fib(num - 1) + fib(num - 2)\n\n    >>> for i in range(1, 101):\n    ...     res = fib(i)\n\n    >>> fib.cache_info()\n    CacheInfo(hits=196, misses=100, capacity=100, current_size=100)\n    \"\"\"\n\n    def __init__(self, capacity: int):\n        self.list: DoubleLinkedList[T, U] = DoubleLinkedList()\n        self.capacity = capacity\n        self.num_keys = 0\n        self.hits = 0\n        self.miss = 0\n        self.cache: dict[T, DoubleLinkedListNode[T, U]] = {}\n\n    def __repr__(self) -> str:\n        \"\"\"\n        Return the details for the cache instance\n        [hits, misses, capacity, current_size]\n        \"\"\"\n\n        return (\n            f\"CacheInfo(hits={self.hits}, misses={self.miss}, \"\n            f\"capacity={self.capacity}, current_size={self.num_keys})\"\n        )\n\n    def __contains__(self, key: T) -> bool:\n        \"\"\"\n        >>> cache = LFUCache(1)\n\n        >>> 1 in cache\n        False\n\n        >>> cache.put(1, 1)\n        >>> 1 in cache\n        True\n        \"\"\"\n\n        return key in self.cache\n\n    def get(self, key: T) -> U | None:\n        \"\"\"\n        Returns the value for the input key and updates the Double Linked List. Returns\n        Returns None if key is not present in cache\n        \"\"\"\n\n        if key in self.cache:\n            self.hits += 1\n            value_node: DoubleLinkedListNode[T, U] = self.cache[key]\n            node = self.list.remove(self.cache[key])\n            assert node == value_node\n\n            # node is guaranteed not None because it is in self.cache\n            assert node is not None\n            self.list.add(node)\n            return node.val\n        self.miss += 1\n        return None\n\n    def put(self, key: T, value: U) -> None:\n        \"\"\"\n        Sets the value for the input key and updates the Double Linked List\n        \"\"\"\n\n        if key not in self.cache:\n            if self.num_keys >= self.capacity:\n                # delete first node when over capacity\n                first_node = self.list.head.next\n\n                # guaranteed to have a non-None first node when num_keys > 0\n                # explain to type checker via assertions\n                assert first_node is not None\n                assert first_node.key is not None\n                assert self.list.remove(first_node) is not None\n                # first_node guaranteed to be in list\n\n                del self.cache[first_node.key]\n                self.num_keys -= 1\n            self.cache[key] = DoubleLinkedListNode(key, value)\n            self.list.add(self.cache[key])\n            self.num_keys += 1\n\n        else:\n            node = self.list.remove(self.cache[key])\n            assert node is not None  # node guaranteed to be in list\n            node.val = value\n            self.list.add(node)\n\n    @classmethod\n    def decorator(\n        cls: type[LFUCache[T, U]], size: int = 128\n    ) -> Callable[[Callable[[T], U]], Callable[..., U]]:\n        \"\"\"\n        Decorator version of LFU Cache\n\n        Decorated function must be function of T -> U\n        \"\"\"\n\n        def cache_decorator_inner(func: Callable[[T], U]) -> Callable[..., U]:\n            # variable to map the decorator functions to their respective instance\n            decorator_function_to_instance_map: dict[\n                Callable[[T], U], LFUCache[T, U]\n            ] = {}\n\n            def cache_decorator_wrapper(*args: T) -> U:\n                if func not in decorator_function_to_instance_map:\n                    decorator_function_to_instance_map[func] = LFUCache(size)\n\n                result = decorator_function_to_instance_map[func].get(args[0])\n                if result is None:\n                    result = func(*args)\n                    decorator_function_to_instance_map[func].put(args[0], result)\n                return result\n\n            def cache_info() -> LFUCache[T, U]:\n                return decorator_function_to_instance_map[func]\n\n            setattr(cache_decorator_wrapper, \"cache_info\", cache_info)  # noqa: B010\n\n            return cache_decorator_wrapper\n\n        return cache_decorator_inner\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "other/linear_congruential_generator.py",
    "content": "__author__ = \"Tobias Carryer\"\n\nfrom time import time\n\n\nclass LinearCongruentialGenerator:\n    \"\"\"\n    A pseudorandom number generator.\n    \"\"\"\n\n    # The default value for **seed** is the result of a function call, which is not\n    # normally recommended and causes ruff to raise a B008 error. However, in this case,\n    # it is acceptable because `LinearCongruentialGenerator.__init__()` will only be\n    # called once per instance and it ensures that each instance will generate a unique\n    # sequence of numbers.\n\n    def __init__(self, multiplier, increment, modulo, seed=int(time())):  # noqa: B008\n        \"\"\"\n        These parameters are saved and used when nextNumber() is called.\n\n        modulo is the largest number that can be generated (exclusive). The most\n        efficient values are powers of 2. 2^32 is a common value.\n        \"\"\"\n        self.multiplier = multiplier\n        self.increment = increment\n        self.modulo = modulo\n        self.seed = seed\n\n    def next_number(self):\n        \"\"\"\n        The smallest number that can be generated is zero.\n        The largest number that can be generated is modulo-1. modulo is set in the\n        constructor.\n        \"\"\"\n        self.seed = (self.multiplier * self.seed + self.increment) % self.modulo\n        return self.seed\n\n\nif __name__ == \"__main__\":\n    # Show the LCG in action.\n    lcg = LinearCongruentialGenerator(1664525, 1013904223, 2 << 31)\n    while True:\n        print(lcg.next_number())\n"
  },
  {
    "path": "other/lru_cache.py",
    "content": "from __future__ import annotations\n\nfrom collections.abc import Callable\nfrom typing import TypeVar\n\nT = TypeVar(\"T\")\nU = TypeVar(\"U\")\n\n\nclass DoubleLinkedListNode[T, U]:\n    \"\"\"\n    Double Linked List Node built specifically for LRU Cache\n\n    >>> DoubleLinkedListNode(1,1)\n    Node: key: 1, val: 1, has next: False, has prev: False\n    \"\"\"\n\n    def __init__(self, key: T | None, val: U | None):\n        self.key = key\n        self.val = val\n        self.next: DoubleLinkedListNode[T, U] | None = None\n        self.prev: DoubleLinkedListNode[T, U] | None = None\n\n    def __repr__(self) -> str:\n        return (\n            f\"Node: key: {self.key}, val: {self.val}, \"\n            f\"has next: {bool(self.next)}, has prev: {bool(self.prev)}\"\n        )\n\n\nclass DoubleLinkedList[T, U]:\n    \"\"\"\n    Double Linked List built specifically for LRU Cache\n\n    >>> dll: DoubleLinkedList = DoubleLinkedList()\n    >>> dll\n    DoubleLinkedList,\n        Node: key: None, val: None, has next: True, has prev: False,\n        Node: key: None, val: None, has next: False, has prev: True\n\n    >>> first_node = DoubleLinkedListNode(1,10)\n    >>> first_node\n    Node: key: 1, val: 10, has next: False, has prev: False\n\n\n    >>> dll.add(first_node)\n    >>> dll\n    DoubleLinkedList,\n        Node: key: None, val: None, has next: True, has prev: False,\n        Node: key: 1, val: 10, has next: True, has prev: True,\n        Node: key: None, val: None, has next: False, has prev: True\n\n    >>> # node is mutated\n    >>> first_node\n    Node: key: 1, val: 10, has next: True, has prev: True\n\n    >>> second_node = DoubleLinkedListNode(2,20)\n    >>> second_node\n    Node: key: 2, val: 20, has next: False, has prev: False\n\n    >>> dll.add(second_node)\n    >>> dll\n    DoubleLinkedList,\n        Node: key: None, val: None, has next: True, has prev: False,\n        Node: key: 1, val: 10, has next: True, has prev: True,\n        Node: key: 2, val: 20, has next: True, has prev: True,\n        Node: key: None, val: None, has next: False, has prev: True\n\n    >>> removed_node = dll.remove(first_node)\n    >>> assert removed_node == first_node\n    >>> dll\n    DoubleLinkedList,\n        Node: key: None, val: None, has next: True, has prev: False,\n        Node: key: 2, val: 20, has next: True, has prev: True,\n        Node: key: None, val: None, has next: False, has prev: True\n\n\n    >>> # Attempt to remove node not on list\n    >>> removed_node = dll.remove(first_node)\n    >>> removed_node is None\n    True\n\n    >>> # Attempt to remove head or rear\n    >>> dll.head\n    Node: key: None, val: None, has next: True, has prev: False\n    >>> dll.remove(dll.head) is None\n    True\n\n    >>> # Attempt to remove head or rear\n    >>> dll.rear\n    Node: key: None, val: None, has next: False, has prev: True\n    >>> dll.remove(dll.rear) is None\n    True\n\n\n    \"\"\"\n\n    def __init__(self) -> None:\n        self.head: DoubleLinkedListNode[T, U] = DoubleLinkedListNode(None, None)\n        self.rear: DoubleLinkedListNode[T, U] = DoubleLinkedListNode(None, None)\n        self.head.next, self.rear.prev = self.rear, self.head\n\n    def __repr__(self) -> str:\n        rep = [\"DoubleLinkedList\"]\n        node = self.head\n        while node.next is not None:\n            rep.append(str(node))\n            node = node.next\n        rep.append(str(self.rear))\n        return \",\\n    \".join(rep)\n\n    def add(self, node: DoubleLinkedListNode[T, U]) -> None:\n        \"\"\"\n        Adds the given node to the end of the list (before rear)\n        \"\"\"\n\n        previous = self.rear.prev\n\n        # All nodes other than self.head are guaranteed to have non-None previous\n        assert previous is not None\n\n        previous.next = node\n        node.prev = previous\n        self.rear.prev = node\n        node.next = self.rear\n\n    def remove(\n        self, node: DoubleLinkedListNode[T, U]\n    ) -> DoubleLinkedListNode[T, U] | None:\n        \"\"\"\n        Removes and returns the given node from the list\n\n        Returns None if node.prev or node.next is None\n        \"\"\"\n\n        if node.prev is None or node.next is None:\n            return None\n\n        node.prev.next = node.next\n        node.next.prev = node.prev\n        node.prev = None\n        node.next = None\n        return node\n\n\nclass LRUCache[T, U]:\n    \"\"\"\n    LRU Cache to store a given capacity of data. Can be used as a stand-alone object\n    or as a function decorator.\n\n    >>> cache = LRUCache(2)\n\n    >>> cache.put(1, 1)\n    >>> cache.put(2, 2)\n    >>> cache.get(1)\n    1\n\n    >>> cache.list\n    DoubleLinkedList,\n        Node: key: None, val: None, has next: True, has prev: False,\n        Node: key: 2, val: 2, has next: True, has prev: True,\n        Node: key: 1, val: 1, has next: True, has prev: True,\n        Node: key: None, val: None, has next: False, has prev: True\n\n    >>> cache.cache  # doctest: +NORMALIZE_WHITESPACE\n    {1: Node: key: 1, val: 1, has next: True, has prev: True, \\\n     2: Node: key: 2, val: 2, has next: True, has prev: True}\n\n    >>> cache.put(3, 3)\n\n    >>> cache.list\n    DoubleLinkedList,\n        Node: key: None, val: None, has next: True, has prev: False,\n        Node: key: 1, val: 1, has next: True, has prev: True,\n        Node: key: 3, val: 3, has next: True, has prev: True,\n        Node: key: None, val: None, has next: False, has prev: True\n\n    >>> cache.cache  # doctest: +NORMALIZE_WHITESPACE\n    {1: Node: key: 1, val: 1, has next: True, has prev: True, \\\n     3: Node: key: 3, val: 3, has next: True, has prev: True}\n\n    >>> cache.get(2) is None\n    True\n\n    >>> cache.put(4, 4)\n\n    >>> cache.get(1) is None\n    True\n\n    >>> cache.get(3)\n    3\n\n    >>> cache.get(4)\n    4\n\n    >>> cache\n    CacheInfo(hits=3, misses=2, capacity=2, current size=2)\n\n    >>> @LRUCache.decorator(100)\n    ... def fib(num):\n    ...     if num in (1, 2):\n    ...         return 1\n    ...     return fib(num - 1) + fib(num - 2)\n\n    >>> for i in range(1, 100):\n    ...     res = fib(i)\n\n    >>> fib.cache_info()\n    CacheInfo(hits=194, misses=99, capacity=100, current size=99)\n    \"\"\"\n\n    def __init__(self, capacity: int):\n        self.list: DoubleLinkedList[T, U] = DoubleLinkedList()\n        self.capacity = capacity\n        self.num_keys = 0\n        self.hits = 0\n        self.miss = 0\n        self.cache: dict[T, DoubleLinkedListNode[T, U]] = {}\n\n    def __repr__(self) -> str:\n        \"\"\"\n        Return the details for the cache instance\n        [hits, misses, capacity, current_size]\n        \"\"\"\n\n        return (\n            f\"CacheInfo(hits={self.hits}, misses={self.miss}, \"\n            f\"capacity={self.capacity}, current size={self.num_keys})\"\n        )\n\n    def __contains__(self, key: T) -> bool:\n        \"\"\"\n        >>> cache = LRUCache(1)\n\n        >>> 1 in cache\n        False\n\n        >>> cache.put(1, 1)\n\n        >>> 1 in cache\n        True\n        \"\"\"\n\n        return key in self.cache\n\n    def get(self, key: T) -> U | None:\n        \"\"\"\n        Returns the value for the input key and updates the Double Linked List.\n        Returns None if key is not present in cache\n        \"\"\"\n        # Note: pythonic interface would throw KeyError rather than return None\n\n        if key in self.cache:\n            self.hits += 1\n            value_node: DoubleLinkedListNode[T, U] = self.cache[key]\n            node = self.list.remove(self.cache[key])\n            assert node == value_node\n\n            # node is guaranteed not None because it is in self.cache\n            assert node is not None\n            self.list.add(node)\n            return node.val\n        self.miss += 1\n        return None\n\n    def put(self, key: T, value: U) -> None:\n        \"\"\"\n        Sets the value for the input key and updates the Double Linked List\n        \"\"\"\n\n        if key not in self.cache:\n            if self.num_keys >= self.capacity:\n                # delete first node (oldest) when over capacity\n                first_node = self.list.head.next\n\n                # guaranteed to have a non-None first node when num_keys > 0\n                # explain to type checker via assertions\n                assert first_node is not None\n                assert first_node.key is not None\n                assert (\n                    self.list.remove(first_node) is not None\n                )  # node guaranteed to be in list assert node.key is not None\n\n                del self.cache[first_node.key]\n                self.num_keys -= 1\n            self.cache[key] = DoubleLinkedListNode(key, value)\n            self.list.add(self.cache[key])\n            self.num_keys += 1\n\n        else:\n            # bump node to the end of the list, update value\n            node = self.list.remove(self.cache[key])\n            assert node is not None  # node guaranteed to be in list\n            node.val = value\n            self.list.add(node)\n\n    @classmethod\n    def decorator(\n        cls, size: int = 128\n    ) -> Callable[[Callable[[T], U]], Callable[..., U]]:\n        \"\"\"\n        Decorator version of LRU Cache\n\n        Decorated function must be function of T -> U\n        \"\"\"\n\n        def cache_decorator_inner(func: Callable[[T], U]) -> Callable[..., U]:\n            # variable to map the decorator functions to their respective instance\n            decorator_function_to_instance_map: dict[\n                Callable[[T], U], LRUCache[T, U]\n            ] = {}\n\n            def cache_decorator_wrapper(*args: T) -> U:\n                if func not in decorator_function_to_instance_map:\n                    decorator_function_to_instance_map[func] = LRUCache(size)\n\n                result = decorator_function_to_instance_map[func].get(args[0])\n                if result is None:\n                    result = func(*args)\n                    decorator_function_to_instance_map[func].put(args[0], result)\n                return result\n\n            def cache_info() -> LRUCache[T, U]:\n                return decorator_function_to_instance_map[func]\n\n            setattr(cache_decorator_wrapper, \"cache_info\", cache_info)  # noqa: B010\n\n            return cache_decorator_wrapper\n\n        return cache_decorator_inner\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "other/magicdiamondpattern.py",
    "content": "# Python program for generating diamond pattern in Python 3.7+\r\n\r\n\r\n# Function to print upper half of diamond (pyramid)\r\ndef floyd(n):\r\n    \"\"\"\r\n    Print the upper half of a diamond pattern with '*' characters.\r\n\r\n    Args:\r\n        n (int): Size of the pattern.\r\n\r\n    Examples:\r\n        >>> floyd(3)\r\n        '  * \\\\n * * \\\\n* * * \\\\n'\r\n\r\n        >>> floyd(5)\r\n        '    * \\\\n   * * \\\\n  * * * \\\\n * * * * \\\\n* * * * * \\\\n'\r\n    \"\"\"\r\n    result = \"\"\r\n    for i in range(n):\r\n        for _ in range(n - i - 1):  # printing spaces\r\n            result += \" \"\r\n        for _ in range(i + 1):  # printing stars\r\n            result += \"* \"\r\n        result += \"\\n\"\r\n    return result\r\n\r\n\r\n# Function to print lower half of diamond (pyramid)\r\ndef reverse_floyd(n):\r\n    \"\"\"\r\n    Print the lower half of a diamond pattern with '*' characters.\r\n\r\n    Args:\r\n        n (int): Size of the pattern.\r\n\r\n    Examples:\r\n        >>> reverse_floyd(3)\r\n        '* * * \\\\n * * \\\\n  * \\\\n   '\r\n\r\n        >>> reverse_floyd(5)\r\n        '* * * * * \\\\n * * * * \\\\n  * * * \\\\n   * * \\\\n    * \\\\n     '\r\n    \"\"\"\r\n    result = \"\"\r\n    for i in range(n, 0, -1):\r\n        for _ in range(i, 0, -1):  # printing stars\r\n            result += \"* \"\r\n        result += \"\\n\"\r\n        for _ in range(n - i + 1, 0, -1):  # printing spaces\r\n            result += \" \"\r\n    return result\r\n\r\n\r\n# Function to print complete diamond pattern of \"*\"\r\ndef pretty_print(n):\r\n    \"\"\"\r\n    Print a complete diamond pattern with '*' characters.\r\n\r\n    Args:\r\n        n (int): Size of the pattern.\r\n\r\n    Examples:\r\n        >>> pretty_print(0)\r\n        '       ...       ....        nothing printing :('\r\n\r\n        >>> pretty_print(3)\r\n        '  * \\\\n * * \\\\n* * * \\\\n* * * \\\\n * * \\\\n  * \\\\n   '\r\n    \"\"\"\r\n    if n <= 0:\r\n        return \"       ...       ....        nothing printing :(\"\r\n    upper_half = floyd(n)  # upper half\r\n    lower_half = reverse_floyd(n)  # lower half\r\n    return upper_half + lower_half\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n"
  },
  {
    "path": "other/majority_vote_algorithm.py",
    "content": "\"\"\"\nThis is Booyer-Moore Majority Vote Algorithm. The problem statement goes like this:\nGiven an integer array of size n, find all elements that appear more than ⌊ n/k ⌋ times.\nWe have to solve in O(n) time and O(1) Space.\nURL : https://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_majority_vote_algorithm\n\"\"\"\n\nfrom collections import Counter\n\n\ndef majority_vote(votes: list[int], votes_needed_to_win: int) -> list[int]:\n    \"\"\"\n    >>> majority_vote([1, 2, 2, 3, 1, 3, 2], 3)\n    [2]\n    >>> majority_vote([1, 2, 2, 3, 1, 3, 2], 2)\n    []\n    >>> majority_vote([1, 2, 2, 3, 1, 3, 2], 4)\n    [1, 2, 3]\n    \"\"\"\n    majority_candidate_counter: Counter[int] = Counter()\n    for vote in votes:\n        majority_candidate_counter[vote] += 1\n        if len(majority_candidate_counter) == votes_needed_to_win:\n            majority_candidate_counter -= Counter(set(majority_candidate_counter))\n    majority_candidate_counter = Counter(\n        vote for vote in votes if vote in majority_candidate_counter\n    )\n    return [\n        vote\n        for vote in majority_candidate_counter\n        if majority_candidate_counter[vote] > len(votes) / votes_needed_to_win\n    ]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "other/maximum_subsequence.py",
    "content": "from collections.abc import Sequence\n\n\ndef max_subsequence_sum(nums: Sequence[int] | None = None) -> int:\n    \"\"\"Return the maximum possible sum amongst all non - empty subsequences.\n\n    Raises:\n      ValueError: when nums is empty.\n\n    >>> max_subsequence_sum([1,2,3,4,-2])\n    10\n    >>> max_subsequence_sum([-2, -3, -1, -4, -6])\n    -1\n    >>> max_subsequence_sum([])\n    Traceback (most recent call last):\n        . . .\n    ValueError: Input sequence should not be empty\n    >>> max_subsequence_sum()\n    Traceback (most recent call last):\n        . . .\n    ValueError: Input sequence should not be empty\n    \"\"\"\n    if nums is None or not nums:\n        raise ValueError(\"Input sequence should not be empty\")\n\n    ans = nums[0]\n    for i in range(1, len(nums)):\n        num = nums[i]\n        ans = max(ans, ans + num, num)\n\n    return ans\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    # Try on a sample input from the user\n    n = int(input(\"Enter number of elements : \").strip())\n    array = list(map(int, input(\"\\nEnter the numbers : \").strip().split()))[:n]\n    print(max_subsequence_sum(array))\n"
  },
  {
    "path": "other/nested_brackets.py",
    "content": "\"\"\"\nThe nested brackets problem is a problem that determines if a sequence of\nbrackets are properly nested.  A sequence of brackets s is considered properly nested\nif any of the following conditions are true:\n\n    - s is empty\n    - s has the form (U) or [U] or {U} where U is a properly nested string\n    - s has the form VW where V and W are properly nested strings\n\nFor example, the string \"()()[()]\" is properly nested but \"[(()]\" is not.\n\nThe function called is_balanced takes as input a string S which is a sequence of\nbrackets and returns true if S is nested and false otherwise.\n\"\"\"\n\n\ndef is_balanced(s: str) -> bool:\n    \"\"\"\n    >>> is_balanced(\"\")\n    True\n    >>> is_balanced(\"()\")\n    True\n    >>> is_balanced(\"[]\")\n    True\n    >>> is_balanced(\"{}\")\n    True\n    >>> is_balanced(\"()[]{}\")\n    True\n    >>> is_balanced(\"(())\")\n    True\n    >>> is_balanced(\"[[\")\n    False\n    >>> is_balanced(\"([{}])\")\n    True\n    >>> is_balanced(\"(()[)]\")\n    False\n    >>> is_balanced(\"([)]\")\n    False\n    >>> is_balanced(\"[[()]]\")\n    True\n    >>> is_balanced(\"(()(()))\")\n    True\n    >>> is_balanced(\"]\")\n    False\n    >>> is_balanced(\"Life is a bowl of cherries.\")\n    True\n    >>> is_balanced(\"Life is a bowl of che{}ies.\")\n    True\n    >>> is_balanced(\"Life is a bowl of che}{ies.\")\n    False\n    \"\"\"\n    open_to_closed = {\"{\": \"}\", \"[\": \"]\", \"(\": \")\"}\n    stack = []\n    for symbol in s:\n        if symbol in open_to_closed:\n            stack.append(symbol)\n        elif symbol in open_to_closed.values() and (\n            not stack or open_to_closed[stack.pop()] != symbol\n        ):\n            return False\n    return not stack  # stack should be empty\n\n\ndef main():\n    s = input(\"Enter sequence of brackets: \")\n    print(f\"'{s}' is {'' if is_balanced(s) else 'not '}balanced.\")\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    main()\n"
  },
  {
    "path": "other/number_container_system.py",
    "content": "\"\"\"\nA number container system that uses binary search to delete and insert values into\narrays with O(log n) write times and O(1) read times.\n\nThis container system holds integers at indexes.\n\nFurther explained in this leetcode problem\n> https://leetcode.com/problems/minimum-cost-tree-from-leaf-values\n\"\"\"\n\n\nclass NumberContainer:\n    def __init__(self) -> None:\n        # numbermap keys are the number and its values are lists of indexes sorted\n        # in ascending order\n        self.numbermap: dict[int, list[int]] = {}\n        # indexmap keys are an index and it's values are the number at that index\n        self.indexmap: dict[int, int] = {}\n\n    def binary_search_delete(self, array: list | str | range, item: int) -> list[int]:\n        \"\"\"\n        Removes the item from the sorted array and returns\n        the new array.\n\n        >>> NumberContainer().binary_search_delete([1,2,3], 2)\n        [1, 3]\n        >>> NumberContainer().binary_search_delete([0, 0, 0], 0)\n        [0, 0]\n        >>> NumberContainer().binary_search_delete([-1, -1, -1], -1)\n        [-1, -1]\n        >>> NumberContainer().binary_search_delete([-1, 0], 0)\n        [-1]\n        >>> NumberContainer().binary_search_delete([-1, 0], -1)\n        [0]\n        >>> NumberContainer().binary_search_delete(range(7), 3)\n        [0, 1, 2, 4, 5, 6]\n        >>> NumberContainer().binary_search_delete([1.1, 2.2, 3.3], 2.2)\n        [1.1, 3.3]\n        >>> NumberContainer().binary_search_delete(\"abcde\", \"c\")\n        ['a', 'b', 'd', 'e']\n        >>> NumberContainer().binary_search_delete([0, -1, 2, 4], 0)\n        Traceback (most recent call last):\n            ...\n        ValueError: Either the item is not in the array or the array was unsorted\n        >>> NumberContainer().binary_search_delete([2, 0, 4, -1, 11], -1)\n        Traceback (most recent call last):\n            ...\n        ValueError: Either the item is not in the array or the array was unsorted\n        >>> NumberContainer().binary_search_delete(125, 1)\n        Traceback (most recent call last):\n            ...\n        TypeError: binary_search_delete() only accepts either a list, range or str\n        \"\"\"\n        if isinstance(array, (range, str)):\n            array = list(array)\n        elif not isinstance(array, list):\n            raise TypeError(\n                \"binary_search_delete() only accepts either a list, range or str\"\n            )\n\n        low = 0\n        high = len(array) - 1\n\n        while low <= high:\n            mid = (low + high) // 2\n            if array[mid] == item:\n                array.pop(mid)\n                return array\n            elif array[mid] < item:\n                low = mid + 1\n            else:\n                high = mid - 1\n        raise ValueError(\n            \"Either the item is not in the array or the array was unsorted\"\n        )\n\n    def binary_search_insert(self, array: list | str | range, index: int) -> list[int]:\n        \"\"\"\n        Inserts the index into the sorted array\n        at the correct position.\n\n        >>> NumberContainer().binary_search_insert([1,2,3], 2)\n        [1, 2, 2, 3]\n        >>> NumberContainer().binary_search_insert([0,1,3], 2)\n        [0, 1, 2, 3]\n        >>> NumberContainer().binary_search_insert([-5, -3, 0, 0, 11, 103], 51)\n        [-5, -3, 0, 0, 11, 51, 103]\n        >>> NumberContainer().binary_search_insert([-5, -3, 0, 0, 11, 100, 103], 101)\n        [-5, -3, 0, 0, 11, 100, 101, 103]\n        >>> NumberContainer().binary_search_insert(range(10), 4)\n        [0, 1, 2, 3, 4, 4, 5, 6, 7, 8, 9]\n        >>> NumberContainer().binary_search_insert(\"abd\", \"c\")\n        ['a', 'b', 'c', 'd']\n        >>> NumberContainer().binary_search_insert(131, 23)\n        Traceback (most recent call last):\n            ...\n        TypeError: binary_search_insert() only accepts either a list, range or str\n        \"\"\"\n        if isinstance(array, (range, str)):\n            array = list(array)\n        elif not isinstance(array, list):\n            raise TypeError(\n                \"binary_search_insert() only accepts either a list, range or str\"\n            )\n\n        low = 0\n        high = len(array) - 1\n\n        while low <= high:\n            mid = (low + high) // 2\n            if array[mid] == index:\n                # If the item already exists in the array,\n                # insert it after the existing item\n                array.insert(mid + 1, index)\n                return array\n            elif array[mid] < index:\n                low = mid + 1\n            else:\n                high = mid - 1\n\n        # If the item doesn't exist in the array, insert it at the appropriate position\n        array.insert(low, index)\n        return array\n\n    def change(self, index: int, number: int) -> None:\n        \"\"\"\n        Changes (sets) the index as number\n\n        >>> cont = NumberContainer()\n        >>> cont.change(0, 10)\n        >>> cont.change(0, 20)\n        >>> cont.change(-13, 20)\n        >>> cont.change(-100030, 20032903290)\n        \"\"\"\n        # Remove previous index\n        if index in self.indexmap:\n            n = self.indexmap[index]\n            if len(self.numbermap[n]) == 1:\n                del self.numbermap[n]\n            else:\n                self.numbermap[n] = self.binary_search_delete(self.numbermap[n], index)\n\n        # Set new index\n        self.indexmap[index] = number\n\n        # Number not seen before or empty so insert number value\n        if number not in self.numbermap:\n            self.numbermap[number] = [index]\n\n        # Here we need to perform a binary search insertion in order to insert\n        # The item in the correct place\n        else:\n            self.numbermap[number] = self.binary_search_insert(\n                self.numbermap[number], index\n            )\n\n    def find(self, number: int) -> int:\n        \"\"\"\n        Returns the smallest index where the number is.\n\n        >>> cont = NumberContainer()\n        >>> cont.find(10)\n        -1\n        >>> cont.change(0, 10)\n        >>> cont.find(10)\n        0\n        >>> cont.change(0, 20)\n        >>> cont.find(10)\n        -1\n        >>> cont.find(20)\n        0\n        \"\"\"\n        # Simply return the 0th index (smallest) of the indexes found (or -1)\n        return self.numbermap.get(number, [-1])[0]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "other/password.py",
    "content": "import secrets\nfrom random import shuffle\nfrom string import ascii_letters, ascii_lowercase, ascii_uppercase, digits, punctuation\n\n\ndef password_generator(length: int = 8) -> str:\n    \"\"\"\n    Password Generator allows you to generate a random password of length N.\n\n    >>> len(password_generator())\n    8\n    >>> len(password_generator(length=16))\n    16\n    >>> len(password_generator(257))\n    257\n    >>> len(password_generator(length=0))\n    0\n    >>> len(password_generator(-1))\n    0\n    \"\"\"\n    chars = ascii_letters + digits + punctuation\n    return \"\".join(secrets.choice(chars) for _ in range(length))\n\n\n# ALTERNATIVE METHODS\n# chars_incl= characters that must be in password\n# i= how many letters or characters the password length will be\ndef alternative_password_generator(chars_incl: str, i: int) -> str:\n    # Password Generator = full boot with random_number, random_letters, and\n    # random_character FUNCTIONS\n    # Put your code here...\n    i -= len(chars_incl)\n    quotient = i // 3\n    remainder = i % 3\n    # chars = chars_incl + random_letters(ascii_letters, i / 3 + remainder) +\n    #     random_number(digits, i / 3) + random_characters(punctuation, i / 3)\n    chars = (\n        chars_incl\n        + random(ascii_letters, quotient + remainder)\n        + random(digits, quotient)\n        + random(punctuation, quotient)\n    )\n    list_of_chars = list(chars)\n    shuffle(list_of_chars)\n    return \"\".join(list_of_chars)\n\n    # random is a generalised function for letters, characters and numbers\n\n\ndef random(chars_incl: str, i: int) -> str:\n    return \"\".join(secrets.choice(chars_incl) for _ in range(i))\n\n\ndef is_strong_password(password: str, min_length: int = 8) -> bool:\n    \"\"\"\n    This will check whether a given password is strong or not. The password must be at\n    least as long as the provided minimum length, and it must contain at least 1\n    lowercase letter, 1 uppercase letter, 1 number and 1 special character.\n\n    >>> is_strong_password('Hwea7$2!')\n    True\n    >>> is_strong_password('Sh0r1')\n    False\n    >>> is_strong_password('Hello123')\n    False\n    >>> is_strong_password('Hello1238udfhiaf038fajdvjjf!jaiuFhkqi1')\n    True\n    >>> is_strong_password('0')\n    False\n    \"\"\"\n\n    if len(password) < min_length:\n        return False\n\n    upper = any(char in ascii_uppercase for char in password)\n    lower = any(char in ascii_lowercase for char in password)\n    num = any(char in digits for char in password)\n    spec_char = any(char in punctuation for char in password)\n\n    return upper and lower and num and spec_char\n\n\ndef main():\n    length = int(input(\"Please indicate the max length of your password: \").strip())\n    chars_incl = input(\n        \"Please indicate the characters that must be in your password: \"\n    ).strip()\n    print(\"Password generated:\", password_generator(length))\n    print(\n        \"Alternative Password generated:\",\n        alternative_password_generator(chars_incl, length),\n    )\n    print(\"[If you are thinking of using this password, You better save it.]\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "other/quine.py",
    "content": "#!/bin/python3\n# ruff: noqa: PLC3002\n\"\"\"\nQuine:\n\nA quine is a computer program which takes no input and produces a copy of its\nown source code as its only output (disregarding this docstring and the shebang).\n\nMore info on: https://en.wikipedia.org/wiki/Quine_(computing)\n\"\"\"\n\nprint((lambda quine: quine % quine)(\"print((lambda quine: quine %% quine)(%r))\"))\n"
  },
  {
    "path": "other/scoring_algorithm.py",
    "content": "\"\"\"\n| developed by: markmelnic\n| original repo: https://github.com/markmelnic/Scoring-Algorithm\n\nAnalyse data using a range based percentual proximity algorithm\nand calculate the linear maximum likelihood estimation.\nThe basic principle is that all values supplied will be broken\ndown to a range from ``0`` to ``1`` and each column's score will be added\nup to get the total score.\n\nExample for data of vehicles\n::\n\n    price|mileage|registration_year\n    20k  |60k    |2012\n    22k  |50k    |2011\n    23k  |90k    |2015\n    16k  |210k   |2010\n\nWe want the vehicle with the lowest price,\nlowest mileage but newest registration year.\nThus the weights for each column are as follows:\n``[0, 0, 1]``\n\"\"\"\n\n\ndef get_data(source_data: list[list[float]]) -> list[list[float]]:\n    \"\"\"\n    >>> get_data([[20, 60, 2012],[23, 90, 2015],[22, 50, 2011]])\n    [[20.0, 23.0, 22.0], [60.0, 90.0, 50.0], [2012.0, 2015.0, 2011.0]]\n    \"\"\"\n    data_lists: list[list[float]] = []\n    for data in source_data:\n        for i, el in enumerate(data):\n            if len(data_lists) < i + 1:\n                data_lists.append([])\n            data_lists[i].append(float(el))\n    return data_lists\n\n\ndef calculate_each_score(\n    data_lists: list[list[float]], weights: list[int]\n) -> list[list[float]]:\n    \"\"\"\n    >>> calculate_each_score([[20, 23, 22], [60, 90, 50], [2012, 2015, 2011]],\n    ...                      [0, 0, 1])\n    [[1.0, 0.0, 0.33333333333333337], [0.75, 0.0, 1.0], [0.25, 1.0, 0.0]]\n    \"\"\"\n    score_lists: list[list[float]] = []\n    for dlist, weight in zip(data_lists, weights):\n        mind = min(dlist)\n        maxd = max(dlist)\n\n        score: list[float] = []\n        # for weight 0 score is 1 - actual score\n        if weight == 0:\n            for item in dlist:\n                try:\n                    score.append(1 - ((item - mind) / (maxd - mind)))\n                except ZeroDivisionError:\n                    score.append(1)\n\n        elif weight == 1:\n            for item in dlist:\n                try:\n                    score.append((item - mind) / (maxd - mind))\n                except ZeroDivisionError:\n                    score.append(0)\n\n        # weight not 0 or 1\n        else:\n            msg = f\"Invalid weight of {weight:f} provided\"\n            raise ValueError(msg)\n\n        score_lists.append(score)\n\n    return score_lists\n\n\ndef generate_final_scores(score_lists: list[list[float]]) -> list[float]:\n    \"\"\"\n    >>> generate_final_scores([[1.0, 0.0, 0.33333333333333337],\n    ...                        [0.75, 0.0, 1.0],\n    ...                        [0.25, 1.0, 0.0]])\n    [2.0, 1.0, 1.3333333333333335]\n    \"\"\"\n    # initialize final scores\n    final_scores: list[float] = [0 for i in range(len(score_lists[0]))]\n\n    for slist in score_lists:\n        for j, ele in enumerate(slist):\n            final_scores[j] = final_scores[j] + ele\n\n    return final_scores\n\n\ndef procentual_proximity(\n    source_data: list[list[float]], weights: list[int]\n) -> list[list[float]]:\n    \"\"\"\n    | `weights` - ``int`` list\n    | possible values - ``0`` / ``1``\n\n        * ``0`` if lower values have higher weight in the data set\n        * ``1`` if higher values have higher weight in the data set\n\n    >>> procentual_proximity([[20, 60, 2012],[23, 90, 2015],[22, 50, 2011]], [0, 0, 1])\n    [[20, 60, 2012, 2.0], [23, 90, 2015, 1.0], [22, 50, 2011, 1.3333333333333335]]\n    \"\"\"\n\n    data_lists = get_data(source_data)\n    score_lists = calculate_each_score(data_lists, weights)\n    final_scores = generate_final_scores(score_lists)\n\n    # append scores to source data\n    for i, ele in enumerate(final_scores):\n        source_data[i].append(ele)\n\n    return source_data\n"
  },
  {
    "path": "other/sdes.py",
    "content": "def apply_table(inp, table):\r\n    \"\"\"\r\n    >>> apply_table(\"0123456789\", list(range(10)))\r\n    '9012345678'\r\n    >>> apply_table(\"0123456789\", list(range(9, -1, -1)))\r\n    '8765432109'\r\n    \"\"\"\r\n    res = \"\"\r\n    for i in table:\r\n        res += inp[i - 1]\r\n    return res\r\n\r\n\r\ndef left_shift(data):\r\n    \"\"\"\r\n    >>> left_shift(\"0123456789\")\r\n    '1234567890'\r\n    \"\"\"\r\n    return data[1:] + data[0]\r\n\r\n\r\ndef xor(a, b):\r\n    \"\"\"\r\n    >>> xor(\"01010101\", \"00001111\")\r\n    '01011010'\r\n    \"\"\"\r\n    res = \"\"\r\n    for i in range(len(a)):\r\n        if a[i] == b[i]:\r\n            res += \"0\"\r\n        else:\r\n            res += \"1\"\r\n    return res\r\n\r\n\r\ndef apply_sbox(s, data):\r\n    row = int(\"0b\" + data[0] + data[-1], 2)\r\n    col = int(\"0b\" + data[1:3], 2)\r\n    return bin(s[row][col])[2:]\r\n\r\n\r\ndef function(expansion, s0, s1, key, message):\r\n    left = message[:4]\r\n    right = message[4:]\r\n    temp = apply_table(right, expansion)\r\n    temp = xor(temp, key)\r\n    left_bin_str = apply_sbox(s0, temp[:4])\r\n    right_bin_str = apply_sbox(s1, temp[4:])\r\n    left_bin_str = \"0\" * (2 - len(left_bin_str)) + left_bin_str\r\n    right_bin_str = \"0\" * (2 - len(right_bin_str)) + right_bin_str\r\n    temp = apply_table(left_bin_str + right_bin_str, p4_table)\r\n    temp = xor(left, temp)\r\n    return temp + right\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    key = input(\"Enter 10 bit key: \")\r\n    message = input(\"Enter 8 bit message: \")\r\n\r\n    p8_table = [6, 3, 7, 4, 8, 5, 10, 9]\r\n    p10_table = [3, 5, 2, 7, 4, 10, 1, 9, 8, 6]\r\n    p4_table = [2, 4, 3, 1]\r\n    IP = [2, 6, 3, 1, 4, 8, 5, 7]\r\n    IP_inv = [4, 1, 3, 5, 7, 2, 8, 6]\r\n    expansion = [4, 1, 2, 3, 2, 3, 4, 1]\r\n    s0 = [[1, 0, 3, 2], [3, 2, 1, 0], [0, 2, 1, 3], [3, 1, 3, 2]]\r\n    s1 = [[0, 1, 2, 3], [2, 0, 1, 3], [3, 0, 1, 0], [2, 1, 0, 3]]\r\n\r\n    # key generation\r\n    temp = apply_table(key, p10_table)\r\n    left = temp[:5]\r\n    right = temp[5:]\r\n    left = left_shift(left)\r\n    right = left_shift(right)\r\n    key1 = apply_table(left + right, p8_table)\r\n    left = left_shift(left)\r\n    right = left_shift(right)\r\n    left = left_shift(left)\r\n    right = left_shift(right)\r\n    key2 = apply_table(left + right, p8_table)\r\n\r\n    # encryption\r\n    temp = apply_table(message, IP)\r\n    temp = function(expansion, s0, s1, key1, temp)\r\n    temp = temp[4:] + temp[:4]\r\n    temp = function(expansion, s0, s1, key2, temp)\r\n    CT = apply_table(temp, IP_inv)\r\n    print(\"Cipher text is:\", CT)\r\n\r\n    # decryption\r\n    temp = apply_table(CT, IP)\r\n    temp = function(expansion, s0, s1, key2, temp)\r\n    temp = temp[4:] + temp[:4]\r\n    temp = function(expansion, s0, s1, key1, temp)\r\n    PT = apply_table(temp, IP_inv)\r\n    print(\"Plain text after decypting is:\", PT)\r\n"
  },
  {
    "path": "other/sliding_window_maximum.py",
    "content": "from collections import deque\n\n\ndef sliding_window_maximum(numbers: list[int], window_size: int) -> list[int]:\n    \"\"\"\n    Return a list containing the maximum of each sliding window of size window_size.\n\n    This implementation uses a monotonic deque to achieve O(n) time complexity.\n\n    Args:\n        numbers: List of integers representing the input array.\n        window_size: Size of the sliding window (must be positive).\n\n    Returns:\n        List of maximum values for each valid window.\n\n    Raises:\n        ValueError: If window_size is not a positive integer.\n\n    Time Complexity: O(n) - each element is added and removed at most once\n    Space Complexity: O(k) - deque stores at most window_size indices\n\n    Examples:\n    >>> sliding_window_maximum([1, 3, -1, -3, 5, 3, 6, 7], 3)\n    [3, 3, 5, 5, 6, 7]\n    >>> sliding_window_maximum([9, 11], 2)\n    [11]\n    >>> sliding_window_maximum([], 3)\n    []\n    >>> sliding_window_maximum([4, 2, 12, 3], 1)\n    [4, 2, 12, 3]\n    >>> sliding_window_maximum([1], 1)\n    [1]\n    \"\"\"\n    if window_size <= 0:\n        raise ValueError(\"Window size must be a positive integer\")\n    if not numbers:\n        return []\n\n    result: list[int] = []\n    index_deque: deque[int] = deque()\n\n    for current_index, current_value in enumerate(numbers):\n        # Remove the element which is out of this window\n        if index_deque and index_deque[0] == current_index - window_size:\n            index_deque.popleft()\n\n        # Remove useless elements (smaller than current) from back\n        while index_deque and numbers[index_deque[-1]] < current_value:\n            index_deque.pop()\n\n        index_deque.append(current_index)\n\n        # Start adding to result once we have a full window\n        if current_index >= window_size - 1:\n            result.append(numbers[index_deque[0]])\n\n    return result\n"
  },
  {
    "path": "other/tower_of_hanoi.py",
    "content": "def move_tower(height, from_pole, to_pole, with_pole):\n    \"\"\"\n    >>> move_tower(3, 'A', 'B', 'C')\n    moving disk from A to B\n    moving disk from A to C\n    moving disk from B to C\n    moving disk from A to B\n    moving disk from C to A\n    moving disk from C to B\n    moving disk from A to B\n    \"\"\"\n    if height >= 1:\n        move_tower(height - 1, from_pole, with_pole, to_pole)\n        move_disk(from_pole, to_pole)\n        move_tower(height - 1, with_pole, to_pole, from_pole)\n\n\ndef move_disk(fp, tp):\n    print(\"moving disk from\", fp, \"to\", tp)\n\n\ndef main():\n    height = int(input(\"Height of hanoi: \").strip())\n    move_tower(height, \"A\", \"B\", \"C\")\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "other/word_search.py",
    "content": "\"\"\"\nCreates a random wordsearch with eight different directions\nthat are best described as compass locations.\n\n@ https://en.wikipedia.org/wiki/Word_search\n\"\"\"\n\nfrom random import choice, randint, shuffle\n\n# The words to display on the word search -\n# can be made dynamic by randonly selecting a certain number of\n# words from a predefined word file, while ensuring the character\n# count fits within the matrix size (n x m)\nWORDS = [\"cat\", \"dog\", \"snake\", \"fish\"]\n\nWIDTH = 10\nHEIGHT = 10\n\n\nclass WordSearch:\n    \"\"\"\n    >>> ws = WordSearch(WORDS, WIDTH, HEIGHT)\n    >>> ws.board  # doctest: +ELLIPSIS\n    [[None, ..., None], ..., [None, ..., None]]\n    >>> ws.generate_board()\n    \"\"\"\n\n    def __init__(self, words: list[str], width: int, height: int) -> None:\n        self.words = words\n        self.width = width\n        self.height = height\n\n        # Board matrix holding each letter\n        self.board: list[list[str | None]] = [[None] * width for _ in range(height)]\n\n    def insert_north(self, word: str, rows: list[int], cols: list[int]) -> None:\n        \"\"\"\n        >>> ws = WordSearch(WORDS, 3, 3)\n        >>> ws.insert_north(\"cat\", [2], [2])\n        >>> ws.board  # doctest: +NORMALIZE_WHITESPACE\n        [[None, None, 't'],\n        [None, None, 'a'],\n        [None, None, 'c']]\n        >>> ws.insert_north(\"at\", [0, 1, 2], [2, 1])\n        >>> ws.board  # doctest: +NORMALIZE_WHITESPACE\n        [[None, 't', 't'],\n        [None, 'a', 'a'],\n        [None, None, 'c']]\n        \"\"\"\n        word_length = len(word)\n        # Attempt to insert the word into each row and when successful, exit\n        for row in rows:\n            # Check if there is space above the row to fit in the word\n            if word_length > row + 1:\n                continue\n\n            # Attempt to insert the word into each column\n            for col in cols:\n                # Only check to be made here is if there are existing letters\n                # above the column that will be overwritten\n                letters_above = [self.board[row - i][col] for i in range(word_length)]\n                if all(letter is None for letter in letters_above):\n                    # Successful, insert the word north\n                    for i in range(word_length):\n                        self.board[row - i][col] = word[i]\n                    return\n\n    def insert_northeast(self, word: str, rows: list[int], cols: list[int]) -> None:\n        \"\"\"\n        >>> ws = WordSearch(WORDS, 3, 3)\n        >>> ws.insert_northeast(\"cat\", [2], [0])\n        >>> ws.board  # doctest: +NORMALIZE_WHITESPACE\n        [[None, None, 't'],\n        [None, 'a', None],\n        ['c', None, None]]\n        >>> ws.insert_northeast(\"at\", [0, 1], [2, 1, 0])\n        >>> ws.board  # doctest: +NORMALIZE_WHITESPACE\n        [[None, 't', 't'],\n        ['a', 'a', None],\n        ['c', None, None]]\n        \"\"\"\n        word_length = len(word)\n        # Attempt to insert the word into each row and when successful, exit\n        for row in rows:\n            # Check if there is space for the word above the row\n            if word_length > row + 1:\n                continue\n\n            # Attempt to insert the word into each column\n            for col in cols:\n                # Check if there is space to the right of the word as well as above\n                if word_length + col > self.width:\n                    continue\n\n                # Check if there are existing letters\n                # to the right of the column that will be overwritten\n                letters_diagonal_left = [\n                    self.board[row - i][col + i] for i in range(word_length)\n                ]\n                if all(letter is None for letter in letters_diagonal_left):\n                    # Successful, insert the word northeast\n                    for i in range(word_length):\n                        self.board[row - i][col + i] = word[i]\n                    return\n\n    def insert_east(self, word: str, rows: list[int], cols: list[int]) -> None:\n        \"\"\"\n        >>> ws = WordSearch(WORDS, 3, 3)\n        >>> ws.insert_east(\"cat\", [1], [0])\n        >>> ws.board  # doctest: +NORMALIZE_WHITESPACE\n        [[None, None, None],\n        ['c', 'a', 't'],\n        [None, None, None]]\n        >>> ws.insert_east(\"at\", [1, 0], [2, 1, 0])\n        >>> ws.board  # doctest: +NORMALIZE_WHITESPACE\n        [[None, 'a', 't'],\n        ['c', 'a', 't'],\n        [None, None, None]]\n        \"\"\"\n        word_length = len(word)\n        # Attempt to insert the word into each row and when successful, exit\n        for row in rows:\n            # Attempt to insert the word into each column\n            for col in cols:\n                # Check if there is space to the right of the word\n                if word_length + col > self.width:\n                    continue\n\n                # Check if there are existing letters\n                # to the right of the column that will be overwritten\n                letters_left = [self.board[row][col + i] for i in range(word_length)]\n                if all(letter is None for letter in letters_left):\n                    # Successful, insert the word east\n                    for i in range(word_length):\n                        self.board[row][col + i] = word[i]\n                    return\n\n    def insert_southeast(self, word: str, rows: list[int], cols: list[int]) -> None:\n        \"\"\"\n        >>> ws = WordSearch(WORDS, 3, 3)\n        >>> ws.insert_southeast(\"cat\", [0], [0])\n        >>> ws.board  # doctest: +NORMALIZE_WHITESPACE\n        [['c', None, None],\n        [None, 'a', None],\n        [None, None, 't']]\n        >>> ws.insert_southeast(\"at\", [1, 0], [2, 1, 0])\n        >>> ws.board  # doctest: +NORMALIZE_WHITESPACE\n        [['c', None, None],\n        ['a', 'a', None],\n        [None, 't', 't']]\n        \"\"\"\n        word_length = len(word)\n        # Attempt to insert the word into each row and when successful, exit\n        for row in rows:\n            # Check if there is space for the word below the row\n            if word_length + row > self.height:\n                continue\n\n            # Attempt to insert the word into each column\n            for col in cols:\n                # Check if there is space to the right of the word as well as below\n                if word_length + col > self.width:\n                    continue\n\n                # Check if there are existing letters\n                # to the right of the column that will be overwritten\n                letters_diagonal_left = [\n                    self.board[row + i][col + i] for i in range(word_length)\n                ]\n                if all(letter is None for letter in letters_diagonal_left):\n                    # Successful, insert the word southeast\n                    for i in range(word_length):\n                        self.board[row + i][col + i] = word[i]\n                    return\n\n    def insert_south(self, word: str, rows: list[int], cols: list[int]) -> None:\n        \"\"\"\n        >>> ws = WordSearch(WORDS, 3, 3)\n        >>> ws.insert_south(\"cat\", [0], [0])\n        >>> ws.board  # doctest: +NORMALIZE_WHITESPACE\n        [['c', None, None],\n        ['a', None, None],\n        ['t', None, None]]\n        >>> ws.insert_south(\"at\", [2, 1, 0], [0, 1, 2])\n        >>> ws.board  # doctest: +NORMALIZE_WHITESPACE\n        [['c', None, None],\n        ['a', 'a', None],\n        ['t', 't', None]]\n        \"\"\"\n        word_length = len(word)\n        # Attempt to insert the word into each row and when successful, exit\n        for row in rows:\n            # Check if there is space below the row to fit in the word\n            if word_length + row > self.height:\n                continue\n\n            # Attempt to insert the word into each column\n            for col in cols:\n                # Only check to be made here is if there are existing letters\n                # below the column that will be overwritten\n                letters_below = [self.board[row + i][col] for i in range(word_length)]\n                if all(letter is None for letter in letters_below):\n                    # Successful, insert the word south\n                    for i in range(word_length):\n                        self.board[row + i][col] = word[i]\n                    return\n\n    def insert_southwest(self, word: str, rows: list[int], cols: list[int]) -> None:\n        \"\"\"\n        >>> ws = WordSearch(WORDS, 3, 3)\n        >>> ws.insert_southwest(\"cat\", [0], [2])\n        >>> ws.board  # doctest: +NORMALIZE_WHITESPACE\n        [[None, None, 'c'],\n        [None, 'a', None],\n        ['t', None, None]]\n        >>> ws.insert_southwest(\"at\", [1, 2], [2, 1, 0])\n        >>> ws.board  # doctest: +NORMALIZE_WHITESPACE\n        [[None, None, 'c'],\n        [None, 'a', 'a'],\n        ['t', 't', None]]\n        \"\"\"\n        word_length = len(word)\n        # Attempt to insert the word into each row and when successful, exit\n        for row in rows:\n            # Check if there is space for the word below the row\n            if word_length + row > self.height:\n                continue\n\n            # Attempt to insert the word into each column\n            for col in cols:\n                # Check if there is space to the left of the word as well as below\n                if word_length > col + 1:\n                    continue\n\n                # Check if there are existing letters\n                # to the right of the column that will be overwritten\n                letters_diagonal_left = [\n                    self.board[row + i][col - i] for i in range(word_length)\n                ]\n                if all(letter is None for letter in letters_diagonal_left):\n                    # Successful, insert the word southwest\n                    for i in range(word_length):\n                        self.board[row + i][col - i] = word[i]\n                    return\n\n    def insert_west(self, word: str, rows: list[int], cols: list[int]) -> None:\n        \"\"\"\n        >>> ws = WordSearch(WORDS, 3, 3)\n        >>> ws.insert_west(\"cat\", [1], [2])\n        >>> ws.board  # doctest: +NORMALIZE_WHITESPACE\n        [[None, None, None],\n        ['t', 'a', 'c'],\n        [None, None, None]]\n        >>> ws.insert_west(\"at\", [1, 0], [1, 2, 0])\n        >>> ws.board  # doctest: +NORMALIZE_WHITESPACE\n        [['t', 'a', None],\n        ['t', 'a', 'c'],\n        [None, None, None]]\n        \"\"\"\n        word_length = len(word)\n        # Attempt to insert the word into each row and when successful, exit\n        for row in rows:\n            # Attempt to insert the word into each column\n            for col in cols:\n                # Check if there is space to the left of the word\n                if word_length > col + 1:\n                    continue\n\n                # Check if there are existing letters\n                # to the left of the column that will be overwritten\n                letters_left = [self.board[row][col - i] for i in range(word_length)]\n                if all(letter is None for letter in letters_left):\n                    # Successful, insert the word west\n                    for i in range(word_length):\n                        self.board[row][col - i] = word[i]\n                    return\n\n    def insert_northwest(self, word: str, rows: list[int], cols: list[int]) -> None:\n        \"\"\"\n        >>> ws = WordSearch(WORDS, 3, 3)\n        >>> ws.insert_northwest(\"cat\", [2], [2])\n        >>> ws.board  # doctest: +NORMALIZE_WHITESPACE\n        [['t', None, None],\n        [None, 'a', None],\n        [None, None, 'c']]\n        >>> ws.insert_northwest(\"at\", [1, 2], [0, 1])\n        >>> ws.board  # doctest: +NORMALIZE_WHITESPACE\n        [['t', None, None],\n        ['t', 'a', None],\n        [None, 'a', 'c']]\n        \"\"\"\n        word_length = len(word)\n        # Attempt to insert the word into each row and when successful, exit\n        for row in rows:\n            # Check if there is space for the word above the row\n            if word_length > row + 1:\n                continue\n\n            # Attempt to insert the word into each column\n            for col in cols:\n                # Check if there is space to the left of the word as well as above\n                if word_length > col + 1:\n                    continue\n\n                # Check if there are existing letters\n                # to the right of the column that will be overwritten\n                letters_diagonal_left = [\n                    self.board[row - i][col - i] for i in range(word_length)\n                ]\n                if all(letter is None for letter in letters_diagonal_left):\n                    # Successful, insert the word northwest\n                    for i in range(word_length):\n                        self.board[row - i][col - i] = word[i]\n                    return\n\n    def generate_board(self) -> None:\n        \"\"\"\n        Generates a board with a random direction for each word.\n\n        >>> wt = WordSearch(WORDS, WIDTH, HEIGHT)\n        >>> wt.generate_board()\n        >>> len(list(filter(lambda word: word is not None, sum(wt.board, start=[])))\n        ... ) == sum(map(lambda word: len(word), WORDS))\n        True\n        \"\"\"\n        directions = (\n            self.insert_north,\n            self.insert_northeast,\n            self.insert_east,\n            self.insert_southeast,\n            self.insert_south,\n            self.insert_southwest,\n            self.insert_west,\n            self.insert_northwest,\n        )\n        for word in self.words:\n            # Shuffle the row order and column order that is used when brute forcing\n            # the insertion of the word\n            rows, cols = list(range(self.height)), list(range(self.width))\n            shuffle(rows)\n            shuffle(cols)\n\n            # Insert the word via the direction\n            choice(directions)(word, rows, cols)\n\n\ndef visualise_word_search(\n    board: list[list[str | None]] | None = None, *, add_fake_chars: bool = True\n) -> None:\n    \"\"\"\n    Graphically displays the word search in the terminal.\n\n    >>> ws = WordSearch(WORDS, 5, 5)\n    >>> ws.insert_north(\"cat\", [4], [4])\n    >>> visualise_word_search(\n    ...     ws.board, add_fake_chars=False)  # doctest: +NORMALIZE_WHITESPACE\n    # # # # #\n    # # # # #\n    # # # # t\n    # # # # a\n    # # # # c\n    >>> ws.insert_northeast(\"snake\", [4], [4, 3, 2, 1, 0])\n    >>> visualise_word_search(\n    ...     ws.board, add_fake_chars=False)  # doctest: +NORMALIZE_WHITESPACE\n    # # # # e\n    # # # k #\n    # # a # t\n    # n # # a\n    s # # # c\n    \"\"\"\n    if board is None:\n        word_search = WordSearch(WORDS, WIDTH, HEIGHT)\n        word_search.generate_board()\n        board = word_search.board\n\n    result = \"\"\n    for row in range(len(board)):\n        for col in range(len(board[0])):\n            character = \"#\"\n            if (letter := board[row][col]) is not None:\n                character = letter\n            # Empty char, so add a fake char\n            elif add_fake_chars:\n                character = chr(randint(97, 122))\n            result += f\"{character} \"\n        result += \"\\n\"\n    print(result, end=\"\")\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    visualise_word_search()\n"
  },
  {
    "path": "physics/__init__.py",
    "content": ""
  },
  {
    "path": "physics/altitude_pressure.py",
    "content": "\"\"\"\nTitle : Calculate altitude using Pressure\n\nDescription :\n    The below algorithm approximates the altitude using Barometric formula\n\n\n\"\"\"\n\n\ndef get_altitude_at_pressure(pressure: float) -> float:\n    \"\"\"\n    This method calculates the altitude from Pressure wrt to\n    Sea level pressure as reference .Pressure is in Pascals\n    https://en.wikipedia.org/wiki/Pressure_altitude\n    https://community.bosch-sensortec.com/t5/Question-and-answers/How-to-calculate-the-altitude-from-the-pressure-sensor-data/qaq-p/5702\n\n    H = 44330 * [1 - (P/p0)^(1/5.255) ]\n\n    Where :\n    H = altitude (m)\n    P = measured pressure\n    p0 = reference pressure at sea level 101325 Pa\n\n    Examples:\n    >>> get_altitude_at_pressure(pressure=100_000)\n    105.47836610778828\n    >>> get_altitude_at_pressure(pressure=101_325)\n    0.0\n    >>> get_altitude_at_pressure(pressure=80_000)\n    1855.873388064995\n    >>> get_altitude_at_pressure(pressure=201_325)\n    Traceback (most recent call last):\n      ...\n    ValueError: Value Higher than Pressure at Sea Level !\n    >>> get_altitude_at_pressure(pressure=-80_000)\n    Traceback (most recent call last):\n      ...\n    ValueError: Atmospheric Pressure can not be negative !\n    \"\"\"\n\n    if pressure > 101325:\n        raise ValueError(\"Value Higher than Pressure at Sea Level !\")\n    if pressure < 0:\n        raise ValueError(\"Atmospheric Pressure can not be negative !\")\n    return 44_330 * (1 - (pressure / 101_325) ** (1 / 5.5255))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "physics/archimedes_principle_of_buoyant_force.py",
    "content": "\"\"\"\nCalculate the buoyant force of any body completely or partially submerged in a static\nfluid.  This principle was discovered by the Greek mathematician Archimedes.\n\nEquation for calculating buoyant force:\nFb = p * V * g\n\nhttps://en.wikipedia.org/wiki/Archimedes%27_principle\n\"\"\"\n\n# Acceleration Constant on Earth (unit m/s^2)\ng = 9.80665  # Also available in scipy.constants.g\n\n\ndef archimedes_principle(\n    fluid_density: float, volume: float, gravity: float = g\n) -> float:\n    \"\"\"\n    Args:\n        fluid_density: density of fluid (kg/m^3)\n        volume: volume of object/liquid being displaced by the object (m^3)\n        gravity: Acceleration from gravity. Gravitational force on the system,\n            The default is Earth Gravity\n    returns:\n        the buoyant force on an object in Newtons\n\n    >>> archimedes_principle(fluid_density=500, volume=4, gravity=9.8)\n    19600.0\n    >>> archimedes_principle(fluid_density=997, volume=0.5, gravity=9.8)\n    4885.3\n    >>> archimedes_principle(fluid_density=997, volume=0.7)\n    6844.061035\n    >>> archimedes_principle(fluid_density=997, volume=-0.7)\n    Traceback (most recent call last):\n        ...\n    ValueError: Impossible object volume\n    >>> archimedes_principle(fluid_density=0, volume=0.7)\n    Traceback (most recent call last):\n        ...\n    ValueError: Impossible fluid density\n    >>> archimedes_principle(fluid_density=997, volume=0.7, gravity=0)\n    0.0\n    >>> archimedes_principle(fluid_density=997, volume=0.7, gravity=-9.8)\n    Traceback (most recent call last):\n        ...\n    ValueError: Impossible gravity\n    \"\"\"\n\n    if fluid_density <= 0:\n        raise ValueError(\"Impossible fluid density\")\n    if volume <= 0:\n        raise ValueError(\"Impossible object volume\")\n    if gravity < 0:\n        raise ValueError(\"Impossible gravity\")\n\n    return fluid_density * gravity * volume\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "physics/basic_orbital_capture.py",
    "content": "\"\"\"\nThese two functions will return the radii of impact for a target object\nof mass M and radius R as well as it's effective cross sectional area sigma.\nThat is to say any projectile with velocity v passing within sigma, will impact the\ntarget object with mass M. The derivation of which is given at the bottom\nof this file.\n\nThe derivation shows that a projectile does not need to aim directly at the target\nbody in order to hit it, as  R_capture>R_target. Astronomers refer to the effective\ncross section for capture as sigma=π*R_capture**2.\n\nThis algorithm does not account for an N-body problem.\n\"\"\"\n\nfrom math import pow, sqrt  # noqa: A004\n\nfrom scipy.constants import G, c, pi\n\n\ndef capture_radii(\n    target_body_radius: float, target_body_mass: float, projectile_velocity: float\n) -> float:\n    \"\"\"\n    Input Params:\n    -------------\n    target_body_radius: Radius of the central body SI units: meters | m\n    target_body_mass: Mass of the central body SI units: kilograms | kg\n    projectile_velocity: Velocity of object moving toward central body\n        SI units: meters/second | m/s\n    Returns:\n    --------\n    >>> capture_radii(6.957e8, 1.99e30, 25000.0)\n    17209590691.0\n    >>> capture_radii(-6.957e8, 1.99e30, 25000.0)\n    Traceback (most recent call last):\n        ...\n    ValueError: Radius cannot be less than 0\n    >>> capture_radii(6.957e8, -1.99e30, 25000.0)\n    Traceback (most recent call last):\n        ...\n    ValueError: Mass cannot be less than 0\n    >>> capture_radii(6.957e8, 1.99e30, c+1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Cannot go beyond speed of light\n\n    Returned SI units:\n    ------------------\n    meters | m\n    \"\"\"\n\n    if target_body_mass < 0:\n        raise ValueError(\"Mass cannot be less than 0\")\n    if target_body_radius < 0:\n        raise ValueError(\"Radius cannot be less than 0\")\n    if projectile_velocity > c:\n        raise ValueError(\"Cannot go beyond speed of light\")\n\n    escape_velocity_squared = (2 * G * target_body_mass) / target_body_radius\n    capture_radius = target_body_radius * sqrt(\n        1 + escape_velocity_squared / pow(projectile_velocity, 2)\n    )\n    return round(capture_radius, 0)\n\n\ndef capture_area(capture_radius: float) -> float:\n    \"\"\"\n    Input Param:\n    ------------\n    capture_radius: The radius of orbital capture and impact for a central body of\n    mass M and a projectile moving towards it with velocity v\n        SI units: meters | m\n    Returns:\n    --------\n    >>> capture_area(17209590691)\n    9.304455331329126e+20\n    >>> capture_area(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Cannot have a capture radius less than 0\n\n    Returned SI units:\n    ------------------\n    meters*meters | m**2\n    \"\"\"\n\n    if capture_radius < 0:\n        raise ValueError(\"Cannot have a capture radius less than 0\")\n    sigma = pi * pow(capture_radius, 2)\n    return round(sigma, 0)\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n\n\"\"\"\nDerivation:\n\nLet: Mt=target mass, Rt=target radius, v=projectile_velocity,\n     r_0=radius of projectile at instant 0 to CM of target\n     v_p=v at closest approach,\n     r_p=radius from projectile to target CM at closest approach,\n     R_capture= radius of impact for projectile with velocity v\n\n(1)At time=0  the projectile's energy falling from infinity| E=K+U=0.5*m*(v**2)+0\n\n    E_initial=0.5*m*(v**2)\n\n(2)at time=0 the angular momentum of the projectile relative to CM target|\n    L_initial=m*r_0*v*sin(Θ)->m*r_0*v*(R_capture/r_0)->m*v*R_capture\n\n    L_i=m*v*R_capture\n\n(3)The energy of the projectile at closest approach will be its kinetic energy\n   at closest approach plus gravitational potential energy(-(GMm)/R)|\n    E_p=K_p+U_p->E_p=0.5*m*(v_p**2)-(G*Mt*m)/r_p\n\n    E_p=0.0.5*m*(v_p**2)-(G*Mt*m)/r_p\n\n(4)The angular momentum of the projectile relative to the target at closest\n   approach will be L_p=m*r_p*v_p*sin(Θ), however relative to the target Θ=90°\n   sin(90°)=1|\n\n    L_p=m*r_p*v_p\n(5)Using conservation of angular momentum and energy, we can write a quadratic\n   equation that solves for r_p|\n\n   (a)\n    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\n\n   (b)\n    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\n\n   (c) b plugs int a|\n    v**2=((v*R_capture)/r_p)**2-(2*G*Mt)/r_p->\n\n    v**2-(v**2)*(R_c**2)/(r_p**2)+(2*G*Mt)/r_p=0->\n\n    (v**2)*(r_p**2)+2*G*Mt*r_p-(v**2)*(R_c**2)=0\n\n   (d) Using the quadratic formula, we'll solve for r_p then rearrange to solve to\n       R_capture\n\n    r_p=(-2*G*Mt ± sqrt(4*G^2*Mt^2+ 4(v^4*R_c^2)))/(2*v^2)->\n\n    r_p=(-G*Mt ± sqrt(G^2*Mt+v^4*R_c^2))/v^2->\n\n    r_p<0 is something we can ignore, as it has no physical meaning for our purposes.->\n\n    r_p=(-G*Mt)/v^2 + sqrt(G^2*Mt^2/v^4 + R_c^2)\n\n   (e)We are trying to solve for R_c. We are looking for impact, so we want r_p=Rt\n\n    Rt + G*Mt/v^2 = sqrt(G^2*Mt^2/v^4 + R_c^2)->\n\n    (Rt + G*Mt/v^2)^2 = G^2*Mt^2/v^4 + R_c^2->\n\n    Rt^2 + 2*G*Mt*Rt/v^2 + G^2*Mt^2/v^4 = G^2*Mt^2/v^4 + R_c^2->\n\n    Rt**2 + 2*G*Mt*Rt/v**2 = R_c**2->\n\n    Rt**2 * (1 + 2*G*Mt/Rt *1/v**2) = R_c**2->\n\n    escape velocity = sqrt(2GM/R)= v_escape**2=2GM/R->\n\n    Rt**2 * (1 + v_esc**2/v**2) = R_c**2->\n\n(6)\n    R_capture = Rt * sqrt(1 + v_esc**2/v**2)\n\nSource: Problem Set 3 #8 c.Fall_2017|Honors Astronomy|Professor Rachel Bezanson\n\nSource #2: http://www.nssc.ac.cn/wxzygx/weixin/201607/P020160718380095698873.pdf\n           8.8 Planetary Rendezvous: Pg.368\n\"\"\"\n"
  },
  {
    "path": "physics/casimir_effect.py",
    "content": "\"\"\"\nTitle : Finding the value of magnitude of either the Casimir force, the surface area\nof one of the plates or distance between the plates provided that the other\ntwo parameters are given.\n\nDescription : In quantum field theory, the Casimir effect is a physical force\nacting on the macroscopic boundaries of a confined space which arises from the\nquantum fluctuations of the field. It is a physical force exerted between separate\nobjects, which is due to neither charge, gravity, nor the exchange of particles,\nbut instead is due to resonance of all-pervasive energy fields in the intervening\nspace between the objects. Since the strength of the force falls off rapidly with\ndistance it is only measurable when the distance between the objects is extremely\nsmall. On a submicron scale, this force becomes so strong that it becomes the\ndominant force between uncharged conductors.\n\nDutch physicist Hendrik B. G. Casimir first proposed the existence of the force,\nand he formulated an experiment to detect it in 1948 while participating in research\nat Philips Research Labs. The classic form of his experiment used a pair of uncharged\nparallel metal plates in a vacuum, and successfully demonstrated the force to within\n15% of the value he had predicted according to his theory.\n\nThe Casimir force F for idealized, perfectly conducting plates of surface area\nA square meter and placed at a distance of a meter apart with vacuum between\nthem is expressed as -\n\nF = - ((Reduced Planck Constant ℏ) * c * Pi^2 * A) / (240 * a^4)\n\nHere, the negative sign indicates the force is attractive in nature. For the ease\nof calculation, only the magnitude of the force is considered.\n\nSource :\n- https://en.wikipedia.org/wiki/Casimir_effect\n- https://www.cs.mcgill.ca/~rwest/wikispeedia/wpcd/wp/c/Casimir_effect.htm\n- Casimir, H. B. ; Polder, D. (1948) \"The Influence of Retardation on the\n  London-van der Waals Forces\", Physical Review, vol. 73, Issue 4, pp. 360-372\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom math import pi\n\n# Define the Reduced Planck Constant ℏ (H bar), speed of light C, value of\n# Pi and the function\nREDUCED_PLANCK_CONSTANT = 1.054571817e-34  # unit of ℏ : J * s\n\nSPEED_OF_LIGHT = 3e8  # unit of c : m * s^-1\n\n\ndef casimir_force(force: float, area: float, distance: float) -> dict[str, float]:\n    \"\"\"\n    Input Parameters\n    ----------------\n    force -> Casimir Force : magnitude in Newtons\n\n    area -> Surface area of each plate : magnitude in square meters\n\n    distance -> Distance between two plates : distance in Meters\n\n    Returns\n    -------\n    result : dict name, value pair of the parameter having Zero as it's value\n\n    Returns the value of one of the parameters specified as 0, provided the values of\n    other parameters are given.\n    >>> casimir_force(force = 0, area = 4, distance = 0.03)\n    {'force': 6.4248189174864216e-21}\n\n    >>> casimir_force(force = 2635e-13, area = 0.0023, distance = 0)\n    {'distance': 1.0323056015031114e-05}\n\n    >>> casimir_force(force = 2737e-21, area = 0, distance = 0.0023746)\n    {'area': 0.06688838837354052}\n\n    >>> casimir_force(force = 3457e-12, area = 0, distance = 0)\n    Traceback (most recent call last):\n        ...\n    ValueError: One and only one argument must be 0\n\n    >>> casimir_force(force = 3457e-12, area = 0, distance = -0.00344)\n    Traceback (most recent call last):\n        ...\n    ValueError: Distance can not be negative\n\n    >>> casimir_force(force = -912e-12, area = 0, distance = 0.09374)\n    Traceback (most recent call last):\n        ...\n    ValueError: Magnitude of force can not be negative\n    \"\"\"\n\n    if (force, area, distance).count(0) != 1:\n        raise ValueError(\"One and only one argument must be 0\")\n    if force < 0:\n        raise ValueError(\"Magnitude of force can not be negative\")\n    if distance < 0:\n        raise ValueError(\"Distance can not be negative\")\n    if area < 0:\n        raise ValueError(\"Area can not be negative\")\n    if force == 0:\n        force = (REDUCED_PLANCK_CONSTANT * SPEED_OF_LIGHT * pi**2 * area) / (\n            240 * (distance) ** 4\n        )\n        return {\"force\": force}\n    elif area == 0:\n        area = (240 * force * (distance) ** 4) / (\n            REDUCED_PLANCK_CONSTANT * SPEED_OF_LIGHT * pi**2\n        )\n        return {\"area\": area}\n    elif distance == 0:\n        distance = (\n            (REDUCED_PLANCK_CONSTANT * SPEED_OF_LIGHT * pi**2 * area) / (240 * force)\n        ) ** (1 / 4)\n        return {\"distance\": distance}\n    raise ValueError(\"One and only one argument must be 0\")\n\n\n# Run doctest\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "physics/center_of_mass.py",
    "content": "\"\"\"\nCalculating the center of mass for a discrete system of particles, given their\npositions and masses.\n\nDescription:\n\nIn physics, the center of mass of a distribution of mass in space (sometimes referred\nto as the barycenter or balance point) is the unique point at any given time where the\nweighted relative position of the distributed mass sums to zero. This is the point to\nwhich a force may be applied to cause a linear acceleration without an angular\nacceleration.\n\nCalculations in mechanics are often simplified when formulated with respect to the\ncenter of mass. It is a hypothetical point where the entire mass of an object may be\nassumed to be concentrated to visualize its motion. In other words, the center of mass\nis the particle equivalent of a given object for the application of Newton's laws of\nmotion.\n\nIn the case of a system of particles P_i, i = 1, ..., n , each with mass m_i that are\nlocated in space with coordinates r_i, i = 1, ..., n , the coordinates R of the center\nof mass corresponds to:\n\nR = (Σ(mi * ri) / Σ(mi))\n\nReference: https://en.wikipedia.org/wiki/Center_of_mass\n\"\"\"\n\nfrom collections import namedtuple\n\nParticle = namedtuple(\"Particle\", \"x y z mass\")  # noqa: PYI024\nCoord3D = namedtuple(\"Coord3D\", \"x y z\")  # noqa: PYI024\n\n\ndef center_of_mass(particles: list[Particle]) -> Coord3D:\n    \"\"\"\n    Input Parameters\n    ----------------\n    particles: list(Particle):\n    A list of particles where each particle is a tuple with it's (x, y, z) position and\n    it's mass.\n\n    Returns\n    -------\n    Coord3D:\n    A tuple with the coordinates of the center of mass (Xcm, Ycm, Zcm) rounded to two\n    decimal places.\n\n    Examples\n    --------\n    >>> center_of_mass([\n    ...     Particle(1.5, 4, 3.4, 4),\n    ...     Particle(5, 6.8, 7, 8.1),\n    ...     Particle(9.4, 10.1, 11.6, 12)\n    ... ])\n    Coord3D(x=6.61, y=7.98, z=8.69)\n\n    >>> center_of_mass([\n    ...     Particle(1, 2, 3, 4),\n    ...     Particle(5, 6, 7, 8),\n    ...     Particle(9, 10, 11, 12)\n    ... ])\n    Coord3D(x=6.33, y=7.33, z=8.33)\n\n    >>> center_of_mass([\n    ...     Particle(1, 2, 3, -4),\n    ...     Particle(5, 6, 7, 8),\n    ...     Particle(9, 10, 11, 12)\n    ... ])\n    Traceback (most recent call last):\n        ...\n    ValueError: Mass of all particles must be greater than 0\n\n    >>> center_of_mass([\n    ...     Particle(1, 2, 3, 0),\n    ...     Particle(5, 6, 7, 8),\n    ...     Particle(9, 10, 11, 12)\n    ... ])\n    Traceback (most recent call last):\n        ...\n    ValueError: Mass of all particles must be greater than 0\n\n    >>> center_of_mass([])\n    Traceback (most recent call last):\n        ...\n    ValueError: No particles provided\n    \"\"\"\n    if not particles:\n        raise ValueError(\"No particles provided\")\n\n    if any(particle.mass <= 0 for particle in particles):\n        raise ValueError(\"Mass of all particles must be greater than 0\")\n\n    total_mass = sum(particle.mass for particle in particles)\n\n    center_of_mass_x = round(\n        sum(particle.x * particle.mass for particle in particles) / total_mass, 2\n    )\n    center_of_mass_y = round(\n        sum(particle.y * particle.mass for particle in particles) / total_mass, 2\n    )\n    center_of_mass_z = round(\n        sum(particle.z * particle.mass for particle in particles) / total_mass, 2\n    )\n    return Coord3D(center_of_mass_x, center_of_mass_y, center_of_mass_z)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "physics/centripetal_force.py",
    "content": "\"\"\"\nDescription : Centripetal force is the force acting on an object in\ncurvilinear motion directed towards the axis of rotation\nor centre of curvature.\n\nThe unit of centripetal force is newton.\n\nThe centripetal force is always directed perpendicular to the\ndirection of the object's displacement. Using Newton's second\nlaw of motion, it is found that the centripetal force of an object\nmoving in a circular path always acts towards the centre of the circle.\nThe Centripetal Force Formula is given as the product of mass (in kg)\nand tangential velocity (in meters per second) squared, divided by the\nradius (in meters) that implies that on doubling the tangential velocity,\nthe centripetal force will be quadrupled. Mathematically it is written as:\nF = mv²/r\nWhere, F is the Centripetal force, m is the mass of the object, v is the\nspeed or velocity of the object and r is the radius.\n\nReference: https://byjus.com/physics/centripetal-and-centrifugal-force/\n\"\"\"\n\n\ndef centripetal(mass: float, velocity: float, radius: float) -> float:\n    \"\"\"\n    The Centripetal Force formula is given as: (m*v*v)/r\n\n    >>> round(centripetal(15.5,-30,10),2)\n    1395.0\n    >>> round(centripetal(10,15,5),2)\n    450.0\n    >>> round(centripetal(20,-50,15),2)\n    3333.33\n    >>> round(centripetal(12.25,40,25),2)\n    784.0\n    >>> round(centripetal(50,100,50),2)\n    10000.0\n    \"\"\"\n    if mass < 0:\n        raise ValueError(\"The mass of the body cannot be negative\")\n    if radius <= 0:\n        raise ValueError(\"The radius is always a positive non zero integer\")\n    return (mass * (velocity) ** 2) / radius\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod(verbose=True)\n"
  },
  {
    "path": "physics/coulombs_law.py",
    "content": "\"\"\"\nCoulomb's law states that the magnitude of the electrostatic force of attraction\nor repulsion between two point charges is directly proportional to the product\nof the magnitudes of charges and inversely proportional to the square of the\ndistance between them.\n\nF = k * q1 * q2 / r^2\n\nk is Coulomb's constant and equals 1/(4π*ε0)\nq1 is charge of first body (C)\nq2 is charge of second body (C)\nr is distance between two charged bodies (m)\n\nReference: https://en.wikipedia.org/wiki/Coulomb%27s_law\n\"\"\"\n\n\ndef coulombs_law(q1: float, q2: float, radius: float) -> float:\n    \"\"\"\n    Calculate the electrostatic force of attraction or repulsion\n    between two point charges\n\n    >>> coulombs_law(15.5, 20, 15)\n    12382849136.06\n    >>> coulombs_law(1, 15, 5)\n    5392531075.38\n    >>> coulombs_law(20, -50, 15)\n    -39944674632.44\n    >>> coulombs_law(-5, -8, 10)\n    3595020716.92\n    >>> coulombs_law(50, 100, 50)\n    17975103584.6\n    \"\"\"\n    if radius <= 0:\n        raise ValueError(\"The radius is always a positive number\")\n    return round(((8.9875517923 * 10**9) * q1 * q2) / (radius**2), 2)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "physics/doppler_frequency.py",
    "content": "\"\"\"\nDoppler's effect\n\nThe Doppler effect (also Doppler shift) is the change in the frequency of a wave in\nrelation to an observer who is moving relative to the source of the wave.  The Doppler\neffect is named after the physicist Christian Doppler.  A common example of Doppler\nshift is the change of pitch heard when a vehicle sounding a horn approaches and\nrecedes from an observer.\n\nThe reason for the Doppler effect is that when the source of the waves is moving\ntowards the observer, each successive wave crest is emitted from a position closer to\nthe observer than the crest of the previous wave.  Therefore, each wave takes slightly\nless time to reach the observer than the previous wave. Hence, the time between the\narrivals of successive wave crests at the observer is reduced, causing an increase in\nthe frequency.  Similarly, if the source of waves is moving away from the observer,\neach wave is emitted from a position farther from the observer than the previous wave,\nso the arrival time between successive waves is increased, reducing the frequency.\n\nIf the source of waves is stationary but the observer is moving with respect to the\nsource, the transmission velocity of the waves changes (ie the rate at which the\nobserver receives waves) even if the wavelength and frequency emitted from the source\nremain constant.\n\nThese results are all summarized by the Doppler formula:\n\n    f = (f0 * (v + v0)) / (v - vs)\n\nwhere:\n    f: frequency of the wave\n    f0: frequency of the wave when the source is stationary\n    v: velocity of the wave in the medium\n    v0: velocity of the observer, positive if the observer is moving towards the source\n    vs: velocity of the source, positive if the source is moving towards the observer\n\nDoppler's effect has many applications in physics and engineering, such as radar,\nastronomy, medical imaging, and seismology.\n\nReferences:\nhttps://en.wikipedia.org/wiki/Doppler_effect\n\nNow, we will implement a function that calculates the frequency of a wave as a function\nof the frequency of the wave when the source is stationary, the velocity of the wave\nin the medium, the velocity of the observer and the velocity of the source.\n\"\"\"\n\n\ndef doppler_effect(\n    org_freq: float, wave_vel: float, obs_vel: float, src_vel: float\n) -> float:\n    \"\"\"\n    Input Parameters:\n    -----------------\n    org_freq: frequency of the wave when the source is stationary\n    wave_vel: velocity of the wave in the medium\n    obs_vel: velocity of the observer, +ve if the observer is moving towards the source\n    src_vel: velocity of the source, +ve if the source is moving towards the observer\n\n    Returns:\n    --------\n    f: frequency of the wave as perceived by the observer\n\n    Docstring Tests:\n    >>> doppler_effect(100, 330, 10, 0)  # observer moving towards the source\n    103.03030303030303\n    >>> doppler_effect(100, 330, -10, 0)  # observer moving away from the source\n    96.96969696969697\n    >>> doppler_effect(100, 330, 0, 10)  # source moving towards the observer\n    103.125\n    >>> doppler_effect(100, 330, 0, -10)  # source moving away from the observer\n    97.05882352941177\n    >>> doppler_effect(100, 330, 10, 10)  # source & observer moving towards each other\n    106.25\n    >>> doppler_effect(100, 330, -10, -10)  # source and observer moving away\n    94.11764705882354\n    >>> doppler_effect(100, 330, 10, 330)  # source moving at same speed as the wave\n    Traceback (most recent call last):\n        ...\n    ZeroDivisionError: Division by zero implies vs=v and observer in front of the source\n    >>> doppler_effect(100, 330, 10, 340)  # source moving faster than the wave\n    Traceback (most recent call last):\n        ...\n    ValueError: Non-positive frequency implies vs>v or v0>v (in the opposite direction)\n    >>> doppler_effect(100, 330, -340, 10)  # observer moving faster than the wave\n    Traceback (most recent call last):\n        ...\n    ValueError: Non-positive frequency implies vs>v or v0>v (in the opposite direction)\n    \"\"\"\n\n    if wave_vel == src_vel:\n        raise ZeroDivisionError(\n            \"Division by zero implies vs=v and observer in front of the source\"\n        )\n    doppler_freq = (org_freq * (wave_vel + obs_vel)) / (wave_vel - src_vel)\n    if doppler_freq <= 0:\n        raise ValueError(\n            \"Non-positive frequency implies vs>v or v0>v (in the opposite direction)\"\n        )\n    return doppler_freq\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "physics/escape_velocity.py",
    "content": "import math\n\n\ndef escape_velocity(mass: float, radius: float) -> float:\n    \"\"\"\n    Calculates the escape velocity needed to break free from a celestial body's\n    gravitational field.\n\n    The formula used is:\n        v = sqrt(2 * G * M / R)\n\n    where:\n        v = escape velocity (m/s)\n        G = gravitational constant (6.67430 * 10^-11 m^3 kg^-1 s^-2)\n        M = mass of the celestial body (kg)\n        R = radius from the center of mass (m)\n\n    Source:\n        https://en.wikipedia.org/wiki/Escape_velocity\n\n    Args:\n        mass (float): Mass of the celestial body in kilograms.\n        radius (float): Radius from the center of mass in meters.\n\n    Returns:\n        float: Escape velocity in meters per second, rounded to 3 decimal places.\n\n    Examples:\n        >>> escape_velocity(mass=5.972e24, radius=6.371e6)  # Earth\n        11185.978\n        >>> escape_velocity(mass=7.348e22, radius=1.737e6)  # Moon\n        2376.307\n        >>> escape_velocity(mass=1.898e27, radius=6.9911e7)  # Jupiter\n        60199.545\n        >>> escape_velocity(mass=0, radius=1.0)\n        0.0\n        >>> escape_velocity(mass=1.0, radius=0)\n        Traceback (most recent call last):\n            ...\n        ZeroDivisionError: Radius cannot be zero.\n    \"\"\"\n    gravitational_constant = 6.67430e-11  # m^3 kg^-1 s^-2\n\n    if radius == 0:\n        raise ZeroDivisionError(\"Radius cannot be zero.\")\n\n    velocity = math.sqrt(2 * gravitational_constant * mass / radius)\n    return round(velocity, 3)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    print(\"Calculate escape velocity of a celestial body...\\n\")\n\n    try:\n        mass = float(input(\"Enter mass of the celestial body (in kgs): \").strip())\n        radius = float(input(\"Enter radius from the center of mass (in ms): \").strip())\n\n        velocity = escape_velocity(mass=mass, radius=radius)\n        print(f\"Escape velocity is {velocity} m/s\")\n\n    except ValueError:\n        print(\"Invalid input. Please enter valid numeric values.\")\n    except ZeroDivisionError as e:\n        print(e)\n"
  },
  {
    "path": "physics/grahams_law.py",
    "content": "\"\"\"\nTitle: Graham's Law of Effusion\n\nDescription: Graham's law of effusion states that the rate of effusion of a gas is\ninversely proportional to the square root of the molar mass of its particles:\n\nr1/r2 = sqrt(m2/m1)\n\nr1 = Rate of effusion for the first gas.\nr2 = Rate of effusion for the second gas.\nm1 = Molar mass of the first gas.\nm2 = Molar mass of the second gas.\n\n(Description adapted from https://en.wikipedia.org/wiki/Graham%27s_law)\n\"\"\"\n\nfrom math import pow, sqrt  # noqa: A004\n\n\ndef validate(*values: float) -> bool:\n    \"\"\"\n    Input Parameters:\n    -----------------\n    effusion_rate_1: Effustion rate of first gas (m^2/s, mm^2/s, etc.)\n    effusion_rate_2: Effustion rate of second gas (m^2/s, mm^2/s, etc.)\n    molar_mass_1: Molar mass of the first gas (g/mol, kg/kmol, etc.)\n    molar_mass_2: Molar mass of the second gas (g/mol, kg/kmol, etc.)\n\n    Returns:\n    --------\n    >>> validate(2.016, 4.002)\n    True\n    >>> validate(-2.016, 4.002)\n    False\n    >>> validate()\n    False\n    \"\"\"\n    result = len(values) > 0 and all(value > 0.0 for value in values)\n    return result\n\n\ndef effusion_ratio(molar_mass_1: float, molar_mass_2: float) -> float | ValueError:\n    \"\"\"\n    Input Parameters:\n    -----------------\n    molar_mass_1: Molar mass of the first gas (g/mol, kg/kmol, etc.)\n    molar_mass_2: Molar mass of the second gas (g/mol, kg/kmol, etc.)\n\n    Returns:\n    --------\n    >>> effusion_ratio(2.016, 4.002)\n    1.408943\n    >>> effusion_ratio(-2.016, 4.002)\n    ValueError('Input Error: Molar mass values must greater than 0.')\n    >>> effusion_ratio(2.016)\n    Traceback (most recent call last):\n      ...\n    TypeError: effusion_ratio() missing 1 required positional argument: 'molar_mass_2'\n    \"\"\"\n    return (\n        round(sqrt(molar_mass_2 / molar_mass_1), 6)\n        if validate(molar_mass_1, molar_mass_2)\n        else ValueError(\"Input Error: Molar mass values must greater than 0.\")\n    )\n\n\ndef first_effusion_rate(\n    effusion_rate: float, molar_mass_1: float, molar_mass_2: float\n) -> float | ValueError:\n    \"\"\"\n    Input Parameters:\n    -----------------\n    effusion_rate: Effustion rate of second gas (m^2/s, mm^2/s, etc.)\n    molar_mass_1: Molar mass of the first gas (g/mol, kg/kmol, etc.)\n    molar_mass_2: Molar mass of the second gas (g/mol, kg/kmol, etc.)\n\n    Returns:\n    --------\n    >>> first_effusion_rate(1, 2.016, 4.002)\n    1.408943\n    >>> first_effusion_rate(-1, 2.016, 4.002)\n    ValueError('Input Error: Molar mass and effusion rate values must greater than 0.')\n    >>> first_effusion_rate(1)\n    Traceback (most recent call last):\n      ...\n    TypeError: first_effusion_rate() missing 2 required positional arguments: \\\n'molar_mass_1' and 'molar_mass_2'\n    >>> first_effusion_rate(1, 2.016)\n    Traceback (most recent call last):\n      ...\n    TypeError: first_effusion_rate() missing 1 required positional argument: \\\n'molar_mass_2'\n    \"\"\"\n    return (\n        round(effusion_rate * sqrt(molar_mass_2 / molar_mass_1), 6)\n        if validate(effusion_rate, molar_mass_1, molar_mass_2)\n        else ValueError(\n            \"Input Error: Molar mass and effusion rate values must greater than 0.\"\n        )\n    )\n\n\ndef second_effusion_rate(\n    effusion_rate: float, molar_mass_1: float, molar_mass_2: float\n) -> float | ValueError:\n    \"\"\"\n    Input Parameters:\n    -----------------\n    effusion_rate: Effustion rate of second gas (m^2/s, mm^2/s, etc.)\n    molar_mass_1: Molar mass of the first gas (g/mol, kg/kmol, etc.)\n    molar_mass_2: Molar mass of the second gas (g/mol, kg/kmol, etc.)\n\n    Returns:\n    --------\n    >>> second_effusion_rate(1, 2.016, 4.002)\n    0.709752\n    >>> second_effusion_rate(-1, 2.016, 4.002)\n    ValueError('Input Error: Molar mass and effusion rate values must greater than 0.')\n    >>> second_effusion_rate(1)\n    Traceback (most recent call last):\n      ...\n    TypeError: second_effusion_rate() missing 2 required positional arguments: \\\n'molar_mass_1' and 'molar_mass_2'\n    >>> second_effusion_rate(1, 2.016)\n    Traceback (most recent call last):\n      ...\n    TypeError: second_effusion_rate() missing 1 required positional argument: \\\n'molar_mass_2'\n    \"\"\"\n    return (\n        round(effusion_rate / sqrt(molar_mass_2 / molar_mass_1), 6)\n        if validate(effusion_rate, molar_mass_1, molar_mass_2)\n        else ValueError(\n            \"Input Error: Molar mass and effusion rate values must greater than 0.\"\n        )\n    )\n\n\ndef first_molar_mass(\n    molar_mass: float, effusion_rate_1: float, effusion_rate_2: float\n) -> float | ValueError:\n    \"\"\"\n    Input Parameters:\n    -----------------\n    molar_mass: Molar mass of the first gas (g/mol, kg/kmol, etc.)\n    effusion_rate_1: Effustion rate of first gas (m^2/s, mm^2/s, etc.)\n    effusion_rate_2: Effustion rate of second gas (m^2/s, mm^2/s, etc.)\n\n    Returns:\n    --------\n    >>> first_molar_mass(2, 1.408943, 0.709752)\n    0.507524\n    >>> first_molar_mass(-1, 2.016, 4.002)\n    ValueError('Input Error: Molar mass and effusion rate values must greater than 0.')\n    >>> first_molar_mass(1)\n    Traceback (most recent call last):\n      ...\n    TypeError: first_molar_mass() missing 2 required positional arguments: \\\n'effusion_rate_1' and 'effusion_rate_2'\n    >>> first_molar_mass(1, 2.016)\n    Traceback (most recent call last):\n      ...\n    TypeError: first_molar_mass() missing 1 required positional argument: \\\n'effusion_rate_2'\n    \"\"\"\n    return (\n        round(molar_mass / pow(effusion_rate_1 / effusion_rate_2, 2), 6)\n        if validate(molar_mass, effusion_rate_1, effusion_rate_2)\n        else ValueError(\n            \"Input Error: Molar mass and effusion rate values must greater than 0.\"\n        )\n    )\n\n\ndef second_molar_mass(\n    molar_mass: float, effusion_rate_1: float, effusion_rate_2: float\n) -> float | ValueError:\n    \"\"\"\n    Input Parameters:\n    -----------------\n    molar_mass: Molar mass of the first gas (g/mol, kg/kmol, etc.)\n    effusion_rate_1: Effustion rate of first gas (m^2/s, mm^2/s, etc.)\n    effusion_rate_2: Effustion rate of second gas (m^2/s, mm^2/s, etc.)\n\n    Returns:\n    --------\n    >>> second_molar_mass(2, 1.408943, 0.709752)\n    1.970351\n    >>> second_molar_mass(-2, 1.408943, 0.709752)\n    ValueError('Input Error: Molar mass and effusion rate values must greater than 0.')\n    >>> second_molar_mass(1)\n    Traceback (most recent call last):\n      ...\n    TypeError: second_molar_mass() missing 2 required positional arguments: \\\n'effusion_rate_1' and 'effusion_rate_2'\n    >>> second_molar_mass(1, 2.016)\n    Traceback (most recent call last):\n      ...\n    TypeError: second_molar_mass() missing 1 required positional argument: \\\n'effusion_rate_2'\n    \"\"\"\n    return (\n        round(pow(effusion_rate_1 / effusion_rate_2, 2) / molar_mass, 6)\n        if validate(molar_mass, effusion_rate_1, effusion_rate_2)\n        else ValueError(\n            \"Input Error: Molar mass and effusion rate values must greater than 0.\"\n        )\n    )\n"
  },
  {
    "path": "physics/horizontal_projectile_motion.py",
    "content": "\"\"\"\nHorizontal Projectile Motion problem in physics.\n\nThis algorithm solves a specific problem in which\nthe motion starts from the ground as can be seen below::\n\n          (v = 0)\n                   *  *\n               *          *\n            *                *\n          *                    *\n        *                        *\n       *                          *\n    GROUND                      GROUND\n\nFor more info: https://en.wikipedia.org/wiki/Projectile_motion\n\"\"\"\n\n# Importing packages\nfrom math import radians as deg_to_rad\nfrom math import sin\n\n# Acceleration Constant on Earth (unit m/s^2)\ng = 9.80665\n\n\ndef check_args(init_velocity: float, angle: float) -> None:\n    \"\"\"\n    Check that the arguments are valid\n    \"\"\"\n\n    # Ensure valid instance\n    if not isinstance(init_velocity, (int, float)):\n        raise TypeError(\"Invalid velocity. Should be an integer or float.\")\n\n    if not isinstance(angle, (int, float)):\n        raise TypeError(\"Invalid angle. Should be an integer or float.\")\n\n    # Ensure valid angle\n    if angle > 90 or angle < 1:\n        raise ValueError(\"Invalid angle. Range is 1-90 degrees.\")\n\n    # Ensure valid velocity\n    if init_velocity < 0:\n        raise ValueError(\"Invalid velocity. Should be a positive number.\")\n\n\ndef horizontal_distance(init_velocity: float, angle: float) -> float:\n    r\"\"\"\n    Returns the horizontal distance that the object cover\n\n    Formula:\n        .. math::\n            \\frac{v_0^2 \\cdot \\sin(2 \\alpha)}{g}\n\n            v_0 - \\text{initial velocity}\n\n            \\alpha - \\text{angle}\n\n    >>> horizontal_distance(30, 45)\n    91.77\n    >>> horizontal_distance(100, 78)\n    414.76\n    >>> horizontal_distance(-1, 20)\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid velocity. Should be a positive number.\n    >>> horizontal_distance(30, -20)\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid angle. Range is 1-90 degrees.\n    \"\"\"\n    check_args(init_velocity, angle)\n    radians = deg_to_rad(2 * angle)\n    return round(init_velocity**2 * sin(radians) / g, 2)\n\n\ndef max_height(init_velocity: float, angle: float) -> float:\n    r\"\"\"\n    Returns the maximum height that the object reach\n\n    Formula:\n        .. math::\n            \\frac{v_0^2 \\cdot \\sin^2 (\\alpha)}{2 g}\n\n            v_0 - \\text{initial velocity}\n\n            \\alpha - \\text{angle}\n\n    >>> max_height(30, 45)\n    22.94\n    >>> max_height(100, 78)\n    487.82\n    >>> max_height(\"a\", 20)\n    Traceback (most recent call last):\n        ...\n    TypeError: Invalid velocity. Should be an integer or float.\n    >>> horizontal_distance(30, \"b\")\n    Traceback (most recent call last):\n        ...\n    TypeError: Invalid angle. Should be an integer or float.\n    \"\"\"\n    check_args(init_velocity, angle)\n    radians = deg_to_rad(angle)\n    return round(init_velocity**2 * sin(radians) ** 2 / (2 * g), 2)\n\n\ndef total_time(init_velocity: float, angle: float) -> float:\n    r\"\"\"\n    Returns total time of the motion\n\n    Formula:\n        .. math::\n            \\frac{2 v_0 \\cdot \\sin (\\alpha)}{g}\n\n            v_0 - \\text{initial velocity}\n\n            \\alpha - \\text{angle}\n\n    >>> total_time(30, 45)\n    4.33\n    >>> total_time(100, 78)\n    19.95\n    >>> total_time(-10, 40)\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid velocity. Should be a positive number.\n    >>> total_time(30, \"b\")\n    Traceback (most recent call last):\n        ...\n    TypeError: Invalid angle. Should be an integer or float.\n    \"\"\"\n    check_args(init_velocity, angle)\n    radians = deg_to_rad(angle)\n    return round(2 * init_velocity * sin(radians) / g, 2)\n\n\ndef test_motion() -> None:\n    \"\"\"\n    Test motion\n\n    >>> test_motion()\n    \"\"\"\n    v0, angle = 25, 20\n    assert horizontal_distance(v0, angle) == 40.97\n    assert max_height(v0, angle) == 3.73\n    assert total_time(v0, angle) == 1.74\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n\n    # Get input from user\n    init_vel = float(input(\"Initial Velocity: \").strip())\n\n    # Get input from user\n    angle = float(input(\"angle: \").strip())\n\n    # Print results\n    print()\n    print(\"Results: \")\n    print(f\"Horizontal Distance: {horizontal_distance(init_vel, angle)!s} [m]\")\n    print(f\"Maximum Height: {max_height(init_vel, angle)!s} [m]\")\n    print(f\"Total Time: {total_time(init_vel, angle)!s} [s]\")\n"
  },
  {
    "path": "physics/hubble_parameter.py",
    "content": "\"\"\"\nTitle : Calculating the Hubble Parameter\n\nDescription : The Hubble parameter H is the Universe expansion rate\nin any time. In cosmology is customary to use the redshift redshift\nin place of time, becausethe redshift is directily mensure\nin the light of galaxies moving away from us.\n\nSo, the general relation that we obtain is\n\nH = hubble_constant*(radiation_density*(redshift+1)**4\n                     + matter_density*(redshift+1)**3\n                     + curvature*(redshift+1)**2 + dark_energy)**(1/2)\n\nwhere radiation_density, matter_density, dark_energy are the relativity\n(the percentage) energy densities that exist\nin the Universe today. Here, matter_density is the\nsum of the barion density and the\ndark matter. Curvature is the curvature parameter and can be written in term\nof the densities by the completeness\n\n\ncurvature = 1 - (matter_density + radiation_density + dark_energy)\n\nSource :\nhttps://www.sciencedirect.com/topics/mathematics/hubble-parameter\n\"\"\"\n\n\ndef hubble_parameter(\n    hubble_constant: float,\n    radiation_density: float,\n    matter_density: float,\n    dark_energy: float,\n    redshift: float,\n) -> float:\n    \"\"\"\n    Input Parameters\n    ----------------\n    hubble_constant: Hubble constante is the expansion rate today usually\n    given in km/(s*Mpc)\n\n    radiation_density: relative radiation density today\n\n    matter_density: relative mass density today\n\n    dark_energy: relative dark energy density today\n\n    redshift: the light redshift\n\n    Returns\n    -------\n    result : Hubble parameter in and the unit km/s/Mpc (the unit can be\n    changed if you want, just need to change the unit of the Hubble constant)\n\n    >>> hubble_parameter(hubble_constant=68.3, radiation_density=1e-4,\n    ... matter_density=-0.3, dark_energy=0.7, redshift=1)\n    Traceback (most recent call last):\n    ...\n    ValueError: All input parameters must be positive\n\n    >>> hubble_parameter(hubble_constant=68.3, radiation_density=1e-4,\n    ... matter_density= 1.2, dark_energy=0.7, redshift=1)\n    Traceback (most recent call last):\n    ...\n    ValueError: Relative densities cannot be greater than one\n\n    >>> hubble_parameter(hubble_constant=68.3, radiation_density=1e-4,\n    ... matter_density= 0.3, dark_energy=0.7, redshift=0)\n    68.3\n    \"\"\"\n    parameters = [redshift, radiation_density, matter_density, dark_energy]\n    if any(p < 0 for p in parameters):\n        raise ValueError(\"All input parameters must be positive\")\n\n    if any(p > 1 for p in parameters[1:4]):\n        raise ValueError(\"Relative densities cannot be greater than one\")\n    else:\n        curvature = 1 - (matter_density + radiation_density + dark_energy)\n\n        e_2 = (\n            radiation_density * (redshift + 1) ** 4\n            + matter_density * (redshift + 1) ** 3\n            + curvature * (redshift + 1) ** 2\n            + dark_energy\n        )\n\n        hubble = hubble_constant * e_2 ** (1 / 2)\n        return hubble\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    # run doctest\n    doctest.testmod()\n\n    # demo LCDM approximation\n    matter_density = 0.3\n\n    print(\n        hubble_parameter(\n            hubble_constant=68.3,\n            radiation_density=1e-4,\n            matter_density=matter_density,\n            dark_energy=1 - matter_density,\n            redshift=0,\n        )\n    )\n"
  },
  {
    "path": "physics/ideal_gas_law.py",
    "content": "\"\"\"\nThe ideal gas law, also called the general gas equation, is the\nequation of state of a hypothetical ideal gas. It is a good approximation\nof the behavior of many gases under many conditions, although it has\nseveral limitations. It was first stated by Benoît Paul Émile Clapeyron\nin 1834 as a combination of the empirical Boyle's law, Charles's law,\nAvogadro's law, and Gay-Lussac's law.[1] The ideal gas law is often written\nin an empirical form:\n ------------\n | PV = nRT |\n ------------\nP\t=\tPressure (Pa)\nV\t=\tVolume (m^3)\nn\t=\tAmount of substance (mol)\nR\t=\tUniversal gas constant\nT\t=\tAbsolute temperature (Kelvin)\n\n(Description adapted from https://en.wikipedia.org/wiki/Ideal_gas_law )\n\"\"\"\n\nUNIVERSAL_GAS_CONSTANT = 8.314462  # Unit - J mol-1 K-1\n\n\ndef pressure_of_gas_system(moles: float, kelvin: float, volume: float) -> float:\n    \"\"\"\n    >>> pressure_of_gas_system(2, 100, 5)\n    332.57848\n    >>> pressure_of_gas_system(0.5, 273, 0.004)\n    283731.01575\n    >>> pressure_of_gas_system(3, -0.46, 23.5)\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid inputs. Enter positive value.\n    \"\"\"\n    if moles < 0 or kelvin < 0 or volume < 0:\n        raise ValueError(\"Invalid inputs. Enter positive value.\")\n    return moles * kelvin * UNIVERSAL_GAS_CONSTANT / volume\n\n\ndef volume_of_gas_system(moles: float, kelvin: float, pressure: float) -> float:\n    \"\"\"\n    >>> volume_of_gas_system(2, 100, 5)\n    332.57848\n    >>> volume_of_gas_system(0.5, 273, 0.004)\n    283731.01575\n    >>> volume_of_gas_system(3, -0.46, 23.5)\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid inputs. Enter positive value.\n    \"\"\"\n    if moles < 0 or kelvin < 0 or pressure < 0:\n        raise ValueError(\"Invalid inputs. Enter positive value.\")\n    return moles * kelvin * UNIVERSAL_GAS_CONSTANT / pressure\n\n\ndef temperature_of_gas_system(moles: float, volume: float, pressure: float) -> float:\n    \"\"\"\n    >>> temperature_of_gas_system(2, 100, 5)\n    30.068090996146232\n    >>> temperature_of_gas_system(11, 5009, 1000)\n    54767.66101807144\n    >>> temperature_of_gas_system(3, -0.46, 23.5)\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid inputs. Enter positive value.\n    \"\"\"\n    if moles < 0 or volume < 0 or pressure < 0:\n        raise ValueError(\"Invalid inputs. Enter positive value.\")\n\n    return pressure * volume / (moles * UNIVERSAL_GAS_CONSTANT)\n\n\ndef moles_of_gas_system(kelvin: float, volume: float, pressure: float) -> float:\n    \"\"\"\n    >>> moles_of_gas_system(100, 5, 10)\n    0.06013618199229246\n    >>> moles_of_gas_system(110, 5009, 1000)\n    5476.766101807144\n    >>> moles_of_gas_system(3, -0.46, 23.5)\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid inputs. Enter positive value.\n    \"\"\"\n    if kelvin < 0 or volume < 0 or pressure < 0:\n        raise ValueError(\"Invalid inputs. Enter positive value.\")\n\n    return pressure * volume / (kelvin * UNIVERSAL_GAS_CONSTANT)\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "physics/image_data/__init__.py",
    "content": ""
  },
  {
    "path": "physics/in_static_equilibrium.py",
    "content": "\"\"\"\nChecks if a system of forces is in static equilibrium.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom numpy import array, cos, cross, float64, radians, sin\nfrom numpy.typing import NDArray\n\n\ndef polar_force(\n    magnitude: float, angle: float, radian_mode: bool = False\n) -> list[float]:\n    \"\"\"\n    Resolves force along rectangular components.\n    (force, angle) => (force_x, force_y)\n    >>> import math\n    >>> force = polar_force(10, 45)\n    >>> math.isclose(force[0], 7.071067811865477)\n    True\n    >>> math.isclose(force[1], 7.0710678118654755)\n    True\n    >>> force = polar_force(10, 3.14, radian_mode=True)\n    >>> math.isclose(force[0], -9.999987317275396)\n    True\n    >>> math.isclose(force[1], 0.01592652916486828)\n    True\n    \"\"\"\n    if radian_mode:\n        return [magnitude * cos(angle), magnitude * sin(angle)]\n    return [magnitude * cos(radians(angle)), magnitude * sin(radians(angle))]\n\n\ndef in_static_equilibrium(\n    forces: NDArray[float64], location: NDArray[float64], eps: float = 10**-1\n) -> bool:\n    \"\"\"\n    Check if a system is in equilibrium.\n    It takes two numpy.array objects.\n    forces ==>  [\n                        [force1_x, force1_y],\n                        [force2_x, force2_y],\n                        ....]\n    location ==>  [\n                        [x1, y1],\n                        [x2, y2],\n                        ....]\n    >>> force = array([[1, 1], [-1, 2]])\n    >>> location = array([[1, 0], [10, 0]])\n    >>> in_static_equilibrium(force, location)\n    False\n    \"\"\"\n    # summation of moments is zero\n    moments: NDArray[float64] = cross(location, forces)\n    sum_moments: float = sum(moments)\n    return bool(abs(sum_moments) < eps)\n\n\nif __name__ == \"__main__\":\n    # Test to check if it works\n    forces = array(\n        [\n            polar_force(718.4, 180 - 30),\n            polar_force(879.54, 45),\n            polar_force(100, -90),\n        ]\n    )\n\n    location: NDArray[float64] = array([[0, 0], [0, 0], [0, 0]])\n\n    assert in_static_equilibrium(forces, location)\n\n    # Problem 1 in image_data/2D_problems.jpg\n    forces = array(\n        [\n            polar_force(30 * 9.81, 15),\n            polar_force(215, 180 - 45),\n            polar_force(264, 90 - 30),\n        ]\n    )\n\n    location = array([[0, 0], [0, 0], [0, 0]])\n\n    assert in_static_equilibrium(forces, location)\n\n    # Problem in image_data/2D_problems_1.jpg\n    forces = array([[0, -2000], [0, -1200], [0, 15600], [0, -12400]])\n\n    location = array([[0, 0], [6, 0], [10, 0], [12, 0]])\n\n    assert in_static_equilibrium(forces, location)\n\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "physics/kinetic_energy.py",
    "content": "\"\"\"\nFind the kinetic energy of an object, given its mass and velocity.\n\nDescription : In physics, the kinetic energy of an object is the energy that it\npossesses due to its motion.It is defined as the work needed to accelerate a body of a\ngiven mass from rest to its stated velocity.Having gained this energy during its\nacceleration, the body maintains this kinetic energy unless its speed changes.The same\namount of work is done by the body when decelerating from its current speed to a state\nof rest.Formally, a kinetic energy is any term in a system's Lagrangian which includes\na derivative with respect to time.\n\nIn classical mechanics, the kinetic energy of a non-rotating object of mass m traveling\nat a speed v is ½mv².In relativistic mechanics, this is a good approximation only when\nv is much less than the speed of light.The standard unit of kinetic energy is the\njoule, while the English unit of kinetic energy is the foot-pound.\n\nReference : https://en.m.wikipedia.org/wiki/Kinetic_energy\n\"\"\"\n\n\ndef kinetic_energy(mass: float, velocity: float) -> float:\n    \"\"\"\n    Calculate kinetic energy.\n\n    The kinetic energy of a non-rotating object of mass m traveling at a speed v is ½mv²\n\n    >>> kinetic_energy(10,10)\n    500.0\n    >>> kinetic_energy(0,10)\n    0.0\n    >>> kinetic_energy(10,0)\n    0.0\n    >>> kinetic_energy(20,-20)\n    4000.0\n    >>> kinetic_energy(0,0)\n    0.0\n    >>> kinetic_energy(2,2)\n    4.0\n    >>> kinetic_energy(100,100)\n    500000.0\n    \"\"\"\n    if mass < 0:\n        raise ValueError(\"The mass of a body cannot be negative\")\n    return 0.5 * mass * abs(velocity) * abs(velocity)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod(verbose=True)\n"
  },
  {
    "path": "physics/lens_formulae.py",
    "content": "\"\"\"\nThis module has functions which calculate focal length of lens, distance of\nimage from the lens and distance of object from the lens.\nThe above is calculated using the lens formula.\n\nIn optics, the relationship between the distance of the image (v),\nthe distance of the object (u), and\nthe focal length (f) of the lens is given by the formula known as the Lens formula.\nThe Lens formula is applicable for convex as well as concave lenses. The formula\nis given as follows:\n\n-------------------\n| 1/f = 1/v + 1/u |\n-------------------\n\nWhere\n    f = focal length of the lens in meters.\n    v = distance of the image from the lens in meters.\n    u = distance of the object from the lens in meters.\n\nTo make our calculations easy few assumptions are made while deriving the formula\nwhich are important to keep in mind before solving this equation.\nThe assumptions are as follows:\n    1. The object O is a point object lying somewhere on the principle axis.\n    2. The lens is thin.\n    3. The aperture of the lens taken must be small.\n    4. The angles of incidence and angle of refraction should be small.\n\nSign convention is a set of rules to set signs for image distance, object distance,\nfocal length, etc\nfor mathematical analysis of image formation. According to it:\n    1. Object is always placed to the left of lens.\n    2. All distances are measured from the optical centre of the mirror.\n    3. Distances measured in the direction of the incident ray are positive and\n    the distances measured in the direction opposite\n    to that of the incident rays are negative.\n    4. Distances measured along y-axis above the principal axis are positive and\n    that measured along y-axis below the principal\n    axis are negative.\n\nNote: Sign convention can be reversed and will still give the correct results.\n\nReference for Sign convention:\nhttps://www.toppr.com/ask/content/concept/sign-convention-for-lenses-210246/\n\nReference for assumptions:\nhttps://testbook.com/physics/derivation-of-lens-maker-formula\n\"\"\"\n\n\ndef focal_length_of_lens(\n    object_distance_from_lens: float, image_distance_from_lens: float\n) -> float:\n    \"\"\"\n    Doctests:\n    >>> from math import isclose\n    >>> isclose(focal_length_of_lens(10,4), 6.666666666666667)\n    True\n    >>> from math import isclose\n    >>> isclose(focal_length_of_lens(2.7,5.8), -5.0516129032258075)\n    True\n    >>> focal_length_of_lens(0, 20)  # doctest: +NORMALIZE_WHITESPACE\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid inputs. Enter non zero values with respect\n    to the sign convention.\n    \"\"\"\n\n    if object_distance_from_lens == 0 or image_distance_from_lens == 0:\n        raise ValueError(\n            \"Invalid inputs. Enter non zero values with respect to the sign convention.\"\n        )\n    focal_length = 1 / (\n        (1 / image_distance_from_lens) - (1 / object_distance_from_lens)\n    )\n    return focal_length\n\n\ndef object_distance(\n    focal_length_of_lens: float, image_distance_from_lens: float\n) -> float:\n    \"\"\"\n    Doctests:\n    >>> from math import isclose\n    >>> isclose(object_distance(10,40), -13.333333333333332)\n    True\n\n    >>> from math import isclose\n    >>> isclose(object_distance(6.2,1.5), 1.9787234042553192)\n    True\n\n    >>> object_distance(0, 20)  # doctest: +NORMALIZE_WHITESPACE\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid inputs. Enter non zero values with respect\n    to the sign convention.\n    \"\"\"\n\n    if image_distance_from_lens == 0 or focal_length_of_lens == 0:\n        raise ValueError(\n            \"Invalid inputs. Enter non zero values with respect to the sign convention.\"\n        )\n\n    object_distance = 1 / ((1 / image_distance_from_lens) - (1 / focal_length_of_lens))\n    return object_distance\n\n\ndef image_distance(\n    focal_length_of_lens: float, object_distance_from_lens: float\n) -> float:\n    \"\"\"\n    Doctests:\n    >>> from math import isclose\n    >>> isclose(image_distance(50,40), 22.22222222222222)\n    True\n    >>> from math import isclose\n    >>> isclose(image_distance(5.3,7.9), 3.1719696969696973)\n    True\n\n    >>> object_distance(0, 20)  # doctest: +NORMALIZE_WHITESPACE\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid inputs. Enter non zero values with respect\n    to the sign convention.\n    \"\"\"\n    if object_distance_from_lens == 0 or focal_length_of_lens == 0:\n        raise ValueError(\n            \"Invalid inputs. Enter non zero values with respect to the sign convention.\"\n        )\n    image_distance = 1 / ((1 / object_distance_from_lens) + (1 / focal_length_of_lens))\n    return image_distance\n"
  },
  {
    "path": "physics/lorentz_transformation_four_vector.py",
    "content": "\"\"\"\nLorentz transformations describe the transition between two inertial reference\nframes F and F', each of which is moving in some direction with respect to the\nother. This code only calculates Lorentz transformations for movement in the x\ndirection with no spatial rotation (i.e., a Lorentz boost in the x direction).\nThe Lorentz transformations are calculated here as linear transformations of\nfour-vectors [ct, x, y, z] described by Minkowski space. Note that t (time) is\nmultiplied by c (the speed of light) in the first entry of each four-vector.\n\nThus, if X = [ct; x; y; z] and X' = [ct'; x'; y'; z'] are the four-vectors for\ntwo inertial reference frames and X' moves in the x direction with velocity v\nwith respect to X, then the Lorentz transformation from X to X' is X' = BX,\nwhere\n\n    | y  -γβ  0  0|\nB = |-γβ  y   0  0|\n    | 0   0   1  0|\n    | 0   0   0  1|\n\nis the matrix describing the Lorentz boost between X and X',\ny = 1 / √(1 - v²/c²) is the Lorentz factor, and β = v/c is the velocity as\na fraction of c.\n\nReference: https://en.wikipedia.org/wiki/Lorentz_transformation\n\"\"\"\n\nfrom math import sqrt\n\nimport numpy as np\nfrom sympy import symbols\n\n# Coefficient\n# Speed of light (m/s)\nc = 299792458\n\n# Symbols\nct, x, y, z = symbols(\"ct x y z\")\n\n\n# Vehicle's speed divided by speed of light (no units)\ndef beta(velocity: float) -> float:\n    \"\"\"\n    Calculates β = v/c, the given velocity as a fraction of c\n    >>> beta(c)\n    1.0\n    >>> beta(199792458)\n    0.666435904801848\n    >>> beta(1e5)\n    0.00033356409519815205\n    >>> beta(0.2)\n    Traceback (most recent call last):\n      ...\n    ValueError: Speed must be greater than or equal to 1!\n    \"\"\"\n    if velocity > c:\n        raise ValueError(\"Speed must not exceed light speed 299,792,458 [m/s]!\")\n    elif velocity < 1:\n        # Usually the speed should be much higher than 1 (c order of magnitude)\n        raise ValueError(\"Speed must be greater than or equal to 1!\")\n\n    return velocity / c\n\n\ndef gamma(velocity: float) -> float:\n    \"\"\"\n    Calculate the Lorentz factor y = 1 / √(1 - v²/c²) for a given velocity\n    >>> gamma(4)\n    1.0000000000000002\n    >>> gamma(1e5)\n    1.0000000556325075\n    >>> gamma(3e7)\n    1.005044845777813\n    >>> gamma(2.8e8)\n    2.7985595722318277\n    >>> gamma(299792451)\n    4627.49902669495\n    >>> gamma(0.3)\n    Traceback (most recent call last):\n      ...\n    ValueError: Speed must be greater than or equal to 1!\n    >>> gamma(2 * c)\n    Traceback (most recent call last):\n      ...\n    ValueError: Speed must not exceed light speed 299,792,458 [m/s]!\n    \"\"\"\n    return 1 / sqrt(1 - beta(velocity) ** 2)\n\n\ndef transformation_matrix(velocity: float) -> np.ndarray:\n    \"\"\"\n    Calculate the Lorentz transformation matrix for movement in the x direction:\n\n    | y  -γβ  0  0|\n    |-γβ  y   0  0|\n    | 0   0   1  0|\n    | 0   0   0  1|\n\n    where y is the Lorentz factor and β is the velocity as a fraction of c\n    >>> transformation_matrix(29979245)\n    array([[ 1.00503781, -0.10050378,  0.        ,  0.        ],\n           [-0.10050378,  1.00503781,  0.        ,  0.        ],\n           [ 0.        ,  0.        ,  1.        ,  0.        ],\n           [ 0.        ,  0.        ,  0.        ,  1.        ]])\n    >>> transformation_matrix(19979245.2)\n    array([[ 1.00222811, -0.06679208,  0.        ,  0.        ],\n           [-0.06679208,  1.00222811,  0.        ,  0.        ],\n           [ 0.        ,  0.        ,  1.        ,  0.        ],\n           [ 0.        ,  0.        ,  0.        ,  1.        ]])\n    >>> transformation_matrix(1)\n    array([[ 1.00000000e+00, -3.33564095e-09,  0.00000000e+00,\n             0.00000000e+00],\n           [-3.33564095e-09,  1.00000000e+00,  0.00000000e+00,\n             0.00000000e+00],\n           [ 0.00000000e+00,  0.00000000e+00,  1.00000000e+00,\n             0.00000000e+00],\n           [ 0.00000000e+00,  0.00000000e+00,  0.00000000e+00,\n             1.00000000e+00]])\n    >>> transformation_matrix(0)\n    Traceback (most recent call last):\n      ...\n    ValueError: Speed must be greater than or equal to 1!\n    >>> transformation_matrix(c * 1.5)\n    Traceback (most recent call last):\n      ...\n    ValueError: Speed must not exceed light speed 299,792,458 [m/s]!\n    \"\"\"\n    return np.array(\n        [\n            [gamma(velocity), -gamma(velocity) * beta(velocity), 0, 0],\n            [-gamma(velocity) * beta(velocity), gamma(velocity), 0, 0],\n            [0, 0, 1, 0],\n            [0, 0, 0, 1],\n        ]\n    )\n\n\ndef transform(velocity: float, event: np.ndarray | None = None) -> np.ndarray:\n    \"\"\"\n    Calculate a Lorentz transformation for movement in the x direction given a\n    velocity and a four-vector for an inertial reference frame\n\n    If no four-vector is given, then calculate the transformation symbolically\n    with variables\n    >>> transform(29979245, np.array([1, 2, 3, 4]))\n    array([ 3.01302757e+08, -3.01302729e+07,  3.00000000e+00,  4.00000000e+00])\n    >>> transform(29979245)\n    array([1.00503781498831*ct - 0.100503778816875*x,\n           -0.100503778816875*ct + 1.00503781498831*x, 1.0*y, 1.0*z],\n          dtype=object)\n    >>> transform(19879210.2)\n    array([1.0022057787097*ct - 0.066456172618675*x,\n           -0.066456172618675*ct + 1.0022057787097*x, 1.0*y, 1.0*z],\n          dtype=object)\n    >>> transform(299792459, np.array([1, 1, 1, 1]))\n    Traceback (most recent call last):\n      ...\n    ValueError: Speed must not exceed light speed 299,792,458 [m/s]!\n    >>> transform(-1, np.array([1, 1, 1, 1]))\n    Traceback (most recent call last):\n      ...\n    ValueError: Speed must be greater than or equal to 1!\n    \"\"\"\n    # Ensure event is not empty\n    if event is None:\n        event = np.array([ct, x, y, z])  # Symbolic four vector\n    else:\n        event[0] *= c  # x0 is ct (speed of light * time)\n\n    return transformation_matrix(velocity) @ event\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    # Example of symbolic vector:\n    four_vector = transform(29979245)\n    print(\"Example of four vector: \")\n    print(f\"ct' = {four_vector[0]}\")\n    print(f\"x' = {four_vector[1]}\")\n    print(f\"y' = {four_vector[2]}\")\n    print(f\"z' = {four_vector[3]}\")\n\n    # Substitute symbols with numerical values\n    sub_dict = {ct: c, x: 1, y: 1, z: 1}\n    numerical_vector = [four_vector[i].subs(sub_dict) for i in range(4)]\n\n    print(f\"\\n{numerical_vector}\")\n"
  },
  {
    "path": "physics/malus_law.py",
    "content": "import math\n\n\"\"\"\nFinding the intensity of light transmitted through a polariser using Malus Law\nand by taking initial intensity and angle between polariser and axis as input\n\nDescription : Malus's law, which is named after Étienne-Louis Malus,\nsays that when a perfect polarizer is placed in a polarized\nbeam of light, the irradiance, I, of the light that passes\nthrough is given by\n I=I'cos²θ\nwhere I' is the initial intensity and θ is the angle between the light's\ninitial polarization direction and the axis of the polarizer.\nA beam of unpolarized light can be thought of as containing a\nuniform mixture of linear polarizations at all possible angles.\nSince the average value of cos²θ is 1/2, the transmission coefficient becomes\nI/I' = 1/2\nIn practice, some light is lost in the polarizer and the actual transmission\nwill be somewhat lower than this, around 38% for Polaroid-type polarizers but\nconsiderably higher (>49.9%) for some birefringent prism types.\nIf two polarizers are placed one after another (the second polarizer is\ngenerally called an analyzer), the mutual angle between their polarizing axes\ngives the value of θ in Malus's law. If the two axes are orthogonal, the\npolarizers are crossed and in theory no light is transmitted, though again\npractically speaking no polarizer is perfect and the transmission is not exactly\nzero (for example, crossed Polaroid sheets appear slightly blue in colour because\ntheir extinction ratio is better in the red). If a transparent object is placed\nbetween the crossed polarizers, any polarization effects present in the sample\n(such as birefringence) will be shown as an increase in transmission.\nThis effect is used in polarimetry to measure the optical activity of a sample.\nReal polarizers are also not perfect blockers of the polarization orthogonal to\ntheir polarization axis; the ratio of the transmission of the unwanted component\nto the wanted component is called the extinction ratio, and varies from around\n1:500 for Polaroid to about 1:106 for Glan-Taylor prism polarizers.\n\nReference : \"https://en.wikipedia.org/wiki/Polarizer#Malus's_law_and_other_properties\"\n\"\"\"\n\n\ndef malus_law(initial_intensity: float, angle: float) -> float:\n    \"\"\"\n    >>> round(malus_law(10,45),2)\n    5.0\n    >>> round(malus_law(100,60),2)\n    25.0\n    >>> round(malus_law(50,150),2)\n    37.5\n    >>> round(malus_law(75,270),2)\n    0.0\n    >>> round(malus_law(10,-900),2)\n    Traceback (most recent call last):\n        ...\n    ValueError: In Malus Law, the angle is in the range 0-360 degrees\n    >>> round(malus_law(10,900),2)\n    Traceback (most recent call last):\n        ...\n    ValueError: In Malus Law, the angle is in the range 0-360 degrees\n    >>> round(malus_law(-100,900),2)\n    Traceback (most recent call last):\n        ...\n    ValueError: The value of intensity cannot be negative\n    >>> round(malus_law(100,180),2)\n    100.0\n    >>> round(malus_law(100,360),2)\n    100.0\n    \"\"\"\n\n    if initial_intensity < 0:\n        raise ValueError(\"The value of intensity cannot be negative\")\n        # handling of negative values of initial intensity\n    if angle < 0 or angle > 360:\n        raise ValueError(\"In Malus Law, the angle is in the range 0-360 degrees\")\n        # handling of values out of allowed range\n    return initial_intensity * (math.cos(math.radians(angle)) ** 2)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod(name=\"malus_law\")\n"
  },
  {
    "path": "physics/mass_energy_equivalence.py",
    "content": "\"\"\"\nTitle:\nFinding the energy equivalence of mass and mass equivalence of energy\nby Einstein's equation.\n\nDescription:\nEinstein's mass-energy equivalence is a pivotal concept in theoretical physics.\nIt asserts that energy (E) and mass (m) are directly related by the speed of\nlight in vacuum (c) squared, as described in the equation E = mc². This means that\nmass and energy are interchangeable; a mass increase corresponds to an energy increase,\nand vice versa. This principle has profound implications in nuclear reactions,\nexplaining the release of immense energy from minuscule changes in atomic nuclei.\n\nEquations:\nE = mc² and m = E/c², where m is mass, E is Energy, c is speed of light in vacuum.\n\nReference:\nhttps://en.wikipedia.org/wiki/Mass%E2%80%93energy_equivalence\n\"\"\"\n\nfrom scipy.constants import c  # speed of light in vacuum (299792458 m/s)\n\n\ndef energy_from_mass(mass: float) -> float:\n    \"\"\"\n    Calculates the Energy equivalence of the Mass using E = mc²\n    in SI units J from Mass in kg.\n\n    mass (float): Mass of body.\n\n    Usage example:\n    >>> energy_from_mass(124.56)\n    1.11948945063458e+19\n    >>> energy_from_mass(320)\n    2.8760165719578165e+19\n    >>> energy_from_mass(0)\n    0.0\n    >>> energy_from_mass(-967.9)\n    Traceback (most recent call last):\n        ...\n    ValueError: Mass can't be negative.\n\n    \"\"\"\n    if mass < 0:\n        raise ValueError(\"Mass can't be negative.\")\n    return mass * c**2\n\n\ndef mass_from_energy(energy: float) -> float:\n    \"\"\"\n    Calculates the Mass equivalence of the Energy using m = E/c²\n    in SI units kg from Energy in J.\n\n    energy (float): Mass of body.\n\n    Usage example:\n    >>> mass_from_energy(124.56)\n    1.3859169098203872e-15\n    >>> mass_from_energy(320)\n    3.560480179371579e-15\n    >>> mass_from_energy(0)\n    0.0\n    >>> mass_from_energy(-967.9)\n    Traceback (most recent call last):\n        ...\n    ValueError: Energy can't be negative.\n\n    \"\"\"\n    if energy < 0:\n        raise ValueError(\"Energy can't be negative.\")\n    return energy / c**2\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "physics/mirror_formulae.py",
    "content": "\"\"\"\nThis module contains the functions to calculate the focal length, object distance\nand image distance of a mirror.\n\nThe mirror formula is an equation that relates the object distance (u),\nimage distance (v), and focal length (f) of a spherical mirror.\nIt is commonly used in optics to determine the position and characteristics\nof an image formed by a mirror. It is expressed using the formulae :\n\n-------------------\n| 1/f = 1/v + 1/u |\n-------------------\n\nWhere,\nf = Focal length of the spherical mirror (metre)\nv = Image distance from the mirror (metre)\nu = Object distance from the mirror (metre)\n\n\nThe signs of the distances are taken with respect to the sign convention.\nThe sign convention is as follows:\n    1) Object is always placed to the left of mirror\n    2) Distances measured in the direction of the incident ray are positive\n    and the distances measured in the direction opposite to that of the incident\n    rays are negative.\n    3) All distances are measured from the pole of the mirror.\n\n\nThere are a few assumptions that are made while using the mirror formulae.\nThey are as follows:\n    1) Thin Mirror: The mirror is assumed to be thin, meaning its thickness is\n    negligible compared to its radius of curvature. This assumption allows\n    us to treat the mirror as a two-dimensional surface.\n    2) Spherical Mirror: The mirror is assumed to have a spherical shape. While this\n    assumption may not hold exactly for all mirrors, it is a reasonable approximation\n    for most practical purposes.\n    3) Small Angles: The angles involved in the derivation are assumed to be small.\n    This assumption allows us to use the small-angle approximation, where the tangent\n    of a small angle is approximately equal to the angle itself. It simplifies the\n    calculations and makes the derivation more manageable.\n    4) Paraxial Rays: The mirror formula is derived using paraxial rays, which are\n    rays that are close to the principal axis and make small angles with it. This\n    assumption ensures that the rays are close enough to the principal axis, making the\n    calculations more accurate.\n    5) Reflection and Refraction Laws: The derivation assumes that the laws of\n    reflection and refraction hold.\n    These laws state that the angle of incidence is equal to the angle of reflection\n    for reflection, and the incident and refracted rays lie in the same plane and\n    obey Snell's law for refraction.\n\n(Description and Assumptions adapted from\nhttps://www.collegesearch.in/articles/mirror-formula-derivation)\n\n(Sign Convention adapted from\nhttps://www.toppr.com/ask/content/concept/sign-convention-for-mirrors-210189/)\n\n\n\"\"\"\n\n\ndef focal_length(distance_of_object: float, distance_of_image: float) -> float:\n    \"\"\"\n    >>> from math import isclose\n    >>> isclose(focal_length(10, 20), 6.66666666666666)\n    True\n    >>> from math import isclose\n    >>> isclose(focal_length(9.5, 6.7), 3.929012346)\n    True\n    >>> focal_length(0, 20)  # doctest: +NORMALIZE_WHITESPACE\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid inputs. Enter non zero values with respect\n    to the sign convention.\n    \"\"\"\n\n    if distance_of_object == 0 or distance_of_image == 0:\n        raise ValueError(\n            \"Invalid inputs. Enter non zero values with respect to the sign convention.\"\n        )\n    focal_length = 1 / ((1 / distance_of_object) + (1 / distance_of_image))\n    return focal_length\n\n\ndef object_distance(focal_length: float, distance_of_image: float) -> float:\n    \"\"\"\n    >>> from math import isclose\n    >>> isclose(object_distance(30, 20), -60.0)\n    True\n    >>> from math import isclose\n    >>> isclose(object_distance(10.5, 11.7), 102.375)\n    True\n    >>> object_distance(90, 0)  # doctest: +NORMALIZE_WHITESPACE\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid inputs. Enter non zero values with respect\n    to the sign convention.\n    \"\"\"\n\n    if distance_of_image == 0 or focal_length == 0:\n        raise ValueError(\n            \"Invalid inputs. Enter non zero values with respect to the sign convention.\"\n        )\n    object_distance = 1 / ((1 / focal_length) - (1 / distance_of_image))\n    return object_distance\n\n\ndef image_distance(focal_length: float, distance_of_object: float) -> float:\n    \"\"\"\n    >>> from math import isclose\n    >>> isclose(image_distance(10, 40), 13.33333333)\n    True\n    >>> from math import isclose\n    >>> isclose(image_distance(1.5, 6.7), 1.932692308)\n    True\n    >>> image_distance(0, 0)  # doctest: +NORMALIZE_WHITESPACE\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid inputs. Enter non zero values with respect\n    to the sign convention.\n    \"\"\"\n\n    if distance_of_object == 0 or focal_length == 0:\n        raise ValueError(\n            \"Invalid inputs. Enter non zero values with respect to the sign convention.\"\n        )\n    image_distance = 1 / ((1 / focal_length) - (1 / distance_of_object))\n    return image_distance\n"
  },
  {
    "path": "physics/n_body_simulation.py",
    "content": "\"\"\"\r\nIn physics and astronomy, a gravitational N-body simulation is a simulation of a\r\ndynamical system of particles under the influence of gravity. The system\r\nconsists of a number of bodies, each of which exerts a gravitational force on all\r\nother bodies. These forces are calculated using Newton's law of universal\r\ngravitation. The Euler method is used at each time-step to calculate the change in\r\nvelocity and position brought about by these forces. Softening is used to prevent\r\nnumerical divergences when a particle comes too close to another (and the force\r\ngoes to infinity).\r\n(Description adapted from https://en.wikipedia.org/wiki/N-body_simulation )\r\n(See also http://www.shodor.org/refdesk/Resources/Algorithms/EulersMethod/ )\r\n\"\"\"\r\n\r\nfrom __future__ import annotations\r\n\r\nimport random\r\n\r\nfrom matplotlib import animation\r\nfrom matplotlib import pyplot as plt\r\n\r\n# Frame rate of the animation\r\nINTERVAL = 20\r\n\r\n# Time between time steps in seconds\r\nDELTA_TIME = INTERVAL / 1000\r\n\r\n\r\nclass Body:\r\n    def __init__(\r\n        self,\r\n        position_x: float,\r\n        position_y: float,\r\n        velocity_x: float,\r\n        velocity_y: float,\r\n        mass: float = 1.0,\r\n        size: float = 1.0,\r\n        color: str = \"blue\",\r\n    ) -> None:\r\n        \"\"\"\r\n        The parameters \"size\" & \"color\" are not relevant for the simulation itself,\r\n        they are only used for plotting.\r\n        \"\"\"\r\n        self.position_x = position_x\r\n        self.position_y = position_y\r\n        self.velocity_x = velocity_x\r\n        self.velocity_y = velocity_y\r\n        self.mass = mass\r\n        self.size = size\r\n        self.color = color\r\n\r\n    @property\r\n    def position(self) -> tuple[float, float]:\r\n        return self.position_x, self.position_y\r\n\r\n    @property\r\n    def velocity(self) -> tuple[float, float]:\r\n        return self.velocity_x, self.velocity_y\r\n\r\n    def update_velocity(\r\n        self, force_x: float, force_y: float, delta_time: float\r\n    ) -> None:\r\n        \"\"\"\r\n        Euler algorithm for velocity\r\n\r\n        >>> body_1 = Body(0.,0.,0.,0.)\r\n        >>> body_1.update_velocity(1.,0.,1.)\r\n        >>> body_1.velocity\r\n        (1.0, 0.0)\r\n\r\n        >>> body_1.update_velocity(1.,0.,1.)\r\n        >>> body_1.velocity\r\n        (2.0, 0.0)\r\n\r\n        >>> body_2 = Body(0.,0.,5.,0.)\r\n        >>> body_2.update_velocity(0.,-10.,10.)\r\n        >>> body_2.velocity\r\n        (5.0, -100.0)\r\n\r\n        >>> body_2.update_velocity(0.,-10.,10.)\r\n        >>> body_2.velocity\r\n        (5.0, -200.0)\r\n        \"\"\"\r\n        self.velocity_x += force_x * delta_time\r\n        self.velocity_y += force_y * delta_time\r\n\r\n    def update_position(self, delta_time: float) -> None:\r\n        \"\"\"\r\n        Euler algorithm for position\r\n\r\n        >>> body_1 = Body(0.,0.,1.,0.)\r\n        >>> body_1.update_position(1.)\r\n        >>> body_1.position\r\n        (1.0, 0.0)\r\n\r\n        >>> body_1.update_position(1.)\r\n        >>> body_1.position\r\n        (2.0, 0.0)\r\n\r\n        >>> body_2 = Body(10.,10.,0.,-2.)\r\n        >>> body_2.update_position(1.)\r\n        >>> body_2.position\r\n        (10.0, 8.0)\r\n\r\n        >>> body_2.update_position(1.)\r\n        >>> body_2.position\r\n        (10.0, 6.0)\r\n        \"\"\"\r\n        self.position_x += self.velocity_x * delta_time\r\n        self.position_y += self.velocity_y * delta_time\r\n\r\n\r\nclass BodySystem:\r\n    \"\"\"\r\n    This class is used to hold the bodies, the gravitation constant, the time\r\n    factor and the softening factor. The time factor is used to control the speed\r\n    of the simulation. The softening factor is used for softening, a numerical\r\n    trick for N-body simulations to prevent numerical divergences when two bodies\r\n    get too close to each other.\r\n    \"\"\"\r\n\r\n    def __init__(\r\n        self,\r\n        bodies: list[Body],\r\n        gravitation_constant: float = 1.0,\r\n        time_factor: float = 1.0,\r\n        softening_factor: float = 0.0,\r\n    ) -> None:\r\n        self.bodies = bodies\r\n        self.gravitation_constant = gravitation_constant\r\n        self.time_factor = time_factor\r\n        self.softening_factor = softening_factor\r\n\r\n    def __len__(self) -> int:\r\n        return len(self.bodies)\r\n\r\n    def update_system(self, delta_time: float) -> None:\r\n        \"\"\"\r\n        For each body, loop through all other bodies to calculate the total\r\n        force they exert on it. Use that force to update the body's velocity.\r\n\r\n        >>> body_system_1 = BodySystem([Body(0,0,0,0), Body(10,0,0,0)])\r\n        >>> len(body_system_1)\r\n        2\r\n        >>> body_system_1.update_system(1)\r\n        >>> body_system_1.bodies[0].position\r\n        (0.01, 0.0)\r\n        >>> body_system_1.bodies[0].velocity\r\n        (0.01, 0.0)\r\n\r\n        >>> body_system_2 = BodySystem([Body(-10,0,0,0), Body(10,0,0,0, mass=4)], 1, 10)\r\n        >>> body_system_2.update_system(1)\r\n        >>> body_system_2.bodies[0].position\r\n        (-9.0, 0.0)\r\n        >>> body_system_2.bodies[0].velocity\r\n        (0.1, 0.0)\r\n        \"\"\"\r\n        for body1 in self.bodies:\r\n            force_x = 0.0\r\n            force_y = 0.0\r\n            for body2 in self.bodies:\r\n                if body1 != body2:\r\n                    dif_x = body2.position_x - body1.position_x\r\n                    dif_y = body2.position_y - body1.position_y\r\n\r\n                    # Calculation of the distance using Pythagoras's theorem\r\n                    # Extra factor due to the softening technique\r\n                    distance = (dif_x**2 + dif_y**2 + self.softening_factor) ** (1 / 2)\r\n\r\n                    # Newton's law of universal gravitation.\r\n                    force_x += (\r\n                        self.gravitation_constant * body2.mass * dif_x / distance**3\r\n                    )\r\n                    force_y += (\r\n                        self.gravitation_constant * body2.mass * dif_y / distance**3\r\n                    )\r\n\r\n            # Update the body's velocity once all the force components have been added\r\n            body1.update_velocity(force_x, force_y, delta_time * self.time_factor)\r\n\r\n        # Update the positions only after all the velocities have been updated\r\n        for body in self.bodies:\r\n            body.update_position(delta_time * self.time_factor)\r\n\r\n\r\ndef update_step(\r\n    body_system: BodySystem, delta_time: float, patches: list[plt.Circle]\r\n) -> None:\r\n    \"\"\"\r\n    Updates the body-system and applies the change to the patch-list used for plotting\r\n\r\n    >>> body_system_1 = BodySystem([Body(0,0,0,0), Body(10,0,0,0)])\r\n    >>> patches_1 = [plt.Circle((body.position_x, body.position_y), body.size,\r\n    ... fc=body.color)for body in body_system_1.bodies] #doctest: +ELLIPSIS\r\n    >>> update_step(body_system_1, 1, patches_1)\r\n    >>> patches_1[0].center\r\n    (0.01, 0.0)\r\n\r\n    >>> body_system_2 = BodySystem([Body(-10,0,0,0), Body(10,0,0,0, mass=4)], 1, 10)\r\n    >>> patches_2 = [plt.Circle((body.position_x, body.position_y), body.size,\r\n    ... fc=body.color)for body in body_system_2.bodies] #doctest: +ELLIPSIS\r\n    >>> update_step(body_system_2, 1, patches_2)\r\n    >>> patches_2[0].center\r\n    (-9.0, 0.0)\r\n    \"\"\"\r\n    # Update the positions of the bodies\r\n    body_system.update_system(delta_time)\r\n\r\n    # Update the positions of the patches\r\n    for patch, body in zip(patches, body_system.bodies):\r\n        patch.center = (body.position_x, body.position_y)\r\n\r\n\r\ndef plot(\r\n    title: str,\r\n    body_system: BodySystem,\r\n    x_start: float = -1,\r\n    x_end: float = 1,\r\n    y_start: float = -1,\r\n    y_end: float = 1,\r\n) -> None:\r\n    \"\"\"\r\n    Utility function to plot how the given body-system evolves over time.\r\n    No doctest provided since this function does not have a return value.\r\n    \"\"\"\r\n    fig = plt.figure()\r\n    fig.canvas.manager.set_window_title(title)\r\n    ax = plt.axes(\r\n        xlim=(x_start, x_end), ylim=(y_start, y_end)\r\n    )  # Set section to be plotted\r\n    plt.gca().set_aspect(\"equal\")  # Fix aspect ratio\r\n\r\n    # Each body is drawn as a patch by the plt-function\r\n    patches = [\r\n        plt.Circle((body.position_x, body.position_y), body.size, fc=body.color)\r\n        for body in body_system.bodies\r\n    ]\r\n\r\n    for patch in patches:\r\n        ax.add_patch(patch)\r\n\r\n    # Function called at each step of the animation\r\n    def update(frame: int) -> list[plt.Circle]:  # noqa: ARG001\r\n        update_step(body_system, DELTA_TIME, patches)\r\n        return patches\r\n\r\n    anim = animation.FuncAnimation(  # noqa: F841\r\n        fig, update, interval=INTERVAL, blit=True\r\n    )\r\n\r\n    plt.show()\r\n\r\n\r\ndef example_1() -> BodySystem:\r\n    \"\"\"\r\n    Example 1: figure-8 solution to the 3-body-problem\r\n    This example can be seen as a test of the implementation: given the right\r\n    initial conditions, the bodies should move in a figure-8.\r\n    (initial conditions taken from http://www.artcompsci.org/vol_1/v1_web/node56.html)\r\n    >>> body_system = example_1()\r\n    >>> len(body_system)\r\n    3\r\n    \"\"\"\r\n\r\n    position_x = 0.9700436\r\n    position_y = -0.24308753\r\n    velocity_x = 0.466203685\r\n    velocity_y = 0.43236573\r\n\r\n    bodies1 = [\r\n        Body(position_x, position_y, velocity_x, velocity_y, size=0.2, color=\"red\"),\r\n        Body(-position_x, -position_y, velocity_x, velocity_y, size=0.2, color=\"green\"),\r\n        Body(0, 0, -2 * velocity_x, -2 * velocity_y, size=0.2, color=\"blue\"),\r\n    ]\r\n    return BodySystem(bodies1, time_factor=3)\r\n\r\n\r\ndef example_2() -> BodySystem:\r\n    \"\"\"\r\n    Example 2: Moon's orbit around the earth\r\n    This example can be seen as a test of the implementation: given the right\r\n    initial conditions, the moon should orbit around the earth as it actually does.\r\n    (mass, velocity and distance taken from https://en.wikipedia.org/wiki/Earth\r\n    and https://en.wikipedia.org/wiki/Moon)\r\n    No doctest provided since this function does not have a return value.\r\n    \"\"\"\r\n\r\n    moon_mass = 7.3476e22\r\n    earth_mass = 5.972e24\r\n    velocity_dif = 1022\r\n    earth_moon_distance = 384399000\r\n    gravitation_constant = 6.674e-11\r\n\r\n    # Calculation of the respective velocities so that total impulse is zero,\r\n    # i.e. the two bodies together don't move\r\n    moon_velocity = earth_mass * velocity_dif / (earth_mass + moon_mass)\r\n    earth_velocity = moon_velocity - velocity_dif\r\n\r\n    moon = Body(-earth_moon_distance, 0, 0, moon_velocity, moon_mass, 10000000, \"grey\")\r\n    earth = Body(0, 0, 0, earth_velocity, earth_mass, 50000000, \"blue\")\r\n    return BodySystem([earth, moon], gravitation_constant, time_factor=1000000)\r\n\r\n\r\ndef example_3() -> BodySystem:\r\n    \"\"\"\r\n    Example 3: Random system with many bodies.\r\n    No doctest provided since this function does not have a return value.\r\n    \"\"\"\r\n\r\n    bodies = []\r\n    for _ in range(10):\r\n        velocity_x = random.uniform(-0.5, 0.5)\r\n        velocity_y = random.uniform(-0.5, 0.5)\r\n\r\n        # Bodies are created pairwise with opposite velocities so that the\r\n        # total impulse remains zero\r\n        bodies.append(\r\n            Body(\r\n                random.uniform(-0.5, 0.5),\r\n                random.uniform(-0.5, 0.5),\r\n                velocity_x,\r\n                velocity_y,\r\n                size=0.05,\r\n            )\r\n        )\r\n        bodies.append(\r\n            Body(\r\n                random.uniform(-0.5, 0.5),\r\n                random.uniform(-0.5, 0.5),\r\n                -velocity_x,\r\n                -velocity_y,\r\n                size=0.05,\r\n            )\r\n        )\r\n    return BodySystem(bodies, 0.01, 10, 0.1)\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    plot(\"Figure-8 solution to the 3-body-problem\", example_1(), -2, 2, -2, 2)\r\n    plot(\r\n        \"Moon's orbit around the earth\",\r\n        example_2(),\r\n        -430000000,\r\n        430000000,\r\n        -430000000,\r\n        430000000,\r\n    )\r\n    plot(\"Random system with many bodies\", example_3(), -1.5, 1.5, -1.5, 1.5)\r\n"
  },
  {
    "path": "physics/newtons_law_of_gravitation.py",
    "content": "\"\"\"\nTitle : Finding the value of either Gravitational Force, one of the masses or distance\nprovided that the other three parameters are given.\n\nDescription : Newton's Law of Universal Gravitation explains the presence of force of\nattraction between bodies having a definite mass situated at a distance. It is usually\nstated as that, every particle attracts every other particle in the universe with a\nforce that is directly proportional to the product of their masses and inversely\nproportional to the square of the distance between their centers. The publication of the\ntheory has become known as the \"first great unification\", as it marked the unification\nof the previously described phenomena of gravity on Earth with known astronomical\nbehaviors.\n\nThe equation for the universal gravitation is as follows:\nF = (G * mass_1 * mass_2) / (distance)^2\n\nSource :\n- https://en.wikipedia.org/wiki/Newton%27s_law_of_universal_gravitation\n- Newton (1687) \"Philosophiæ Naturalis Principia Mathematica\"\n\"\"\"\n\nfrom __future__ import annotations\n\n# Define the Gravitational Constant G and the function\nGRAVITATIONAL_CONSTANT = 6.6743e-11  # unit of G : m^3 * kg^-1 * s^-2\n\n\ndef gravitational_law(\n    force: float, mass_1: float, mass_2: float, distance: float\n) -> dict[str, float]:\n    \"\"\"\n    Input Parameters\n    ----------------\n    force : magnitude in Newtons\n\n    mass_1 : mass in Kilograms\n\n    mass_2 : mass in Kilograms\n\n    distance : distance in Meters\n\n    Returns\n    -------\n    result : dict name, value pair of the parameter having Zero as it's value\n\n    Returns the value of one of the parameters specified as 0, provided the values of\n    other parameters are given.\n    >>> gravitational_law(force=0, mass_1=5, mass_2=10, distance=20)\n    {'force': 8.342875e-12}\n\n    >>> gravitational_law(force=7367.382, mass_1=0, mass_2=74, distance=3048)\n    {'mass_1': 1.385816317292268e+19}\n\n    >>> gravitational_law(force=36337.283, mass_1=0, mass_2=0, distance=35584)\n    Traceback (most recent call last):\n        ...\n    ValueError: One and only one argument must be 0\n\n    >>> gravitational_law(force=36337.283, mass_1=-674, mass_2=0, distance=35584)\n    Traceback (most recent call last):\n        ...\n    ValueError: Mass can not be negative\n\n    >>> gravitational_law(force=-847938e12, mass_1=674, mass_2=0, distance=9374)\n    Traceback (most recent call last):\n        ...\n    ValueError: Gravitational force can not be negative\n    \"\"\"\n\n    product_of_mass = mass_1 * mass_2\n\n    if (force, mass_1, mass_2, distance).count(0) != 1:\n        raise ValueError(\"One and only one argument must be 0\")\n    if force < 0:\n        raise ValueError(\"Gravitational force can not be negative\")\n    if distance < 0:\n        raise ValueError(\"Distance can not be negative\")\n    if mass_1 < 0 or mass_2 < 0:\n        raise ValueError(\"Mass can not be negative\")\n    if force == 0:\n        force = GRAVITATIONAL_CONSTANT * product_of_mass / (distance**2)\n        return {\"force\": force}\n    elif mass_1 == 0:\n        mass_1 = (force) * (distance**2) / (GRAVITATIONAL_CONSTANT * mass_2)\n        return {\"mass_1\": mass_1}\n    elif mass_2 == 0:\n        mass_2 = (force) * (distance**2) / (GRAVITATIONAL_CONSTANT * mass_1)\n        return {\"mass_2\": mass_2}\n    elif distance == 0:\n        distance = (GRAVITATIONAL_CONSTANT * product_of_mass / (force)) ** 0.5\n        return {\"distance\": distance}\n    raise ValueError(\"One and only one argument must be 0\")\n\n\n# Run doctest\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "physics/newtons_second_law_of_motion.py",
    "content": "r\"\"\"\nDescription:\n    Newton's second law of motion pertains to the behavior of objects for which\n    all existing forces are not balanced.\n    The second law states that the acceleration of an object is dependent upon\n    two variables - the net force acting upon the object and the mass of the object.\n    The acceleration of an object depends directly\n    upon the net force acting upon the object,\n    and inversely upon the mass of the object.\n    As the force acting upon an object is increased,\n    the acceleration of the object is increased.\n    As the mass of an object is increased, the acceleration of the object is decreased.\n\nSource: https://www.physicsclassroom.com/class/newtlaws/Lesson-3/Newton-s-Second-Law\n\nFormulation: F_net = m • a\n\nDiagrammatic Explanation::\n\n              Forces are unbalanced\n                        |\n                        |\n                        |\n                        V\n               There is acceleration\n                        /\\\n                       /  \\\n                      /    \\\n                     /      \\\n                    /        \\\n                   /          \\\n                  /            \\\n    __________________      ____________________\n   | The acceleration |    | The acceleration   |\n   | depends directly |    | depends inversely  |\n   | on the net force |    | upon the object's  |\n   |                  |    | mass               |\n   |__________________|    |____________________|\n\nUnits: 1 Newton = 1 kg • meters/seconds^2\n\nHow to use?\n\nInputs::\n\n    ______________ _____________________ ___________\n   | Name         | Units               | Type      |\n   |--------------|---------------------|-----------|\n   | mass         | in kgs              | float     |\n   |--------------|---------------------|-----------|\n   | acceleration | in meters/seconds^2 | float     |\n   |______________|_____________________|___________|\n\nOutput::\n\n    ______________ _______________________ ___________\n   | Name         | Units                 | Type      |\n   |--------------|-----------------------|-----------|\n   | force        | in Newtons            | float     |\n   |______________|_______________________|___________|\n\n\"\"\"\n\n\ndef newtons_second_law_of_motion(mass: float, acceleration: float) -> float:\n    \"\"\"\n    Calculates force from `mass` and `acceleration`\n\n    >>> newtons_second_law_of_motion(10, 10)\n    100\n    >>> newtons_second_law_of_motion(2.0, 1)\n    2.0\n    \"\"\"\n    force = 0.0\n    try:\n        force = mass * acceleration\n    except Exception:\n        return -0.0\n    return force\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    # run doctest\n    doctest.testmod()\n\n    # demo\n    mass = 12.5\n    acceleration = 10\n    force = newtons_second_law_of_motion(mass, acceleration)\n    print(\"The force is \", force, \"N\")\n"
  },
  {
    "path": "physics/orbital_transfer_work.py",
    "content": "def orbital_transfer_work(\n    mass_central: float, mass_object: float, r_initial: float, r_final: float\n) -> str:\n    \"\"\"\n    Calculates the work required to move an object from one orbit to another in a\n    gravitational field based on the change in total mechanical energy.\n\n    The formula used is:\n        W = (G * M * m / 2) * (1/r_initial - 1/r_final)\n\n    where:\n        W = work done (Joules)\n        G = gravitational constant (6.67430 * 10^-11 m^3 kg^-1 s^-2)\n        M = mass of the central body (kg)\n        m = mass of the orbiting object (kg)\n        r_initial = initial orbit radius (m)\n        r_final = final orbit radius (m)\n\n    Args:\n        mass_central (float): Mass of the central body (kg)\n        mass_object (float): Mass of the object being moved (kg)\n        r_initial (float): Initial orbital radius (m)\n        r_final (float): Final orbital radius (m)\n\n    Returns:\n        str: Work done in Joules as a string in scientific notation (3 decimals)\n\n    Examples:\n        >>> orbital_transfer_work(5.972e24, 1000, 6.371e6, 7e6)\n        '2.811e+09'\n        >>> orbital_transfer_work(5.972e24, 500, 7e6, 6.371e6)\n        '-1.405e+09'\n        >>> orbital_transfer_work(1.989e30, 1000, 1.5e11, 2.28e11)\n        '1.514e+11'\n    \"\"\"\n    gravitational_constant = 6.67430e-11\n\n    if r_initial <= 0 or r_final <= 0:\n        raise ValueError(\"Orbital radii must be greater than zero.\")\n\n    work = (gravitational_constant * mass_central * mass_object / 2) * (\n        1 / r_initial - 1 / r_final\n    )\n    return f\"{work:.3e}\"\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    print(\"Orbital transfer work calculator\\n\")\n\n    try:\n        M = float(input(\"Enter mass of central body (kg): \").strip())\n        if M <= 0:\n            r1 = float(input(\"Enter initial orbit radius (m): \").strip())\n        if r1 <= 0:\n            raise ValueError(\"Initial orbit radius must be greater than zero.\")\n\n        r2 = float(input(\"Enter final orbit radius (m): \").strip())\n        if r2 <= 0:\n            raise ValueError(\"Final orbit radius must be greater than zero.\")\n        m = float(input(\"Enter mass of orbiting object (kg): \").strip())\n        if m <= 0:\n            raise ValueError(\"Mass of the orbiting object must be greater than zero.\")\n        r1 = float(input(\"Enter initial orbit radius (m): \").strip())\n        r2 = float(input(\"Enter final orbit radius (m): \").strip())\n\n        result = orbital_transfer_work(M, m, r1, r2)\n        print(f\"Work done in orbital transfer: {result} Joules\")\n\n    except ValueError as e:\n        print(f\"Input error: {e}\")\n"
  },
  {
    "path": "physics/period_of_pendulum.py",
    "content": "\"\"\"\nTitle : Computing the time period of a simple pendulum\n\nThe simple pendulum is a mechanical system that sways or moves in an\noscillatory motion. The simple pendulum comprises of a small bob of\nmass m suspended by a thin string of length L and secured to a platform\nat its upper end. Its motion occurs in a vertical plane and is mainly\ndriven by gravitational force. The period of the pendulum depends on the\nlength of the string and the amplitude (the maximum angle) of oscillation.\nHowever, the effect of the amplitude can be ignored if the amplitude is\nsmall. It should be noted that the period does not depend on the mass of\nthe bob.\n\nFor small amplitudes, the period of a simple pendulum is given by the\nfollowing approximation:\nT ≈ 2π * √(L / g)\n\nwhere:\nL = length of string from which the bob is hanging (in m)\ng = acceleration due to gravity (approx 9.8 m/s²)\n\nReference : https://byjus.com/jee/simple-pendulum/\n\"\"\"\n\nfrom math import pi\n\nfrom scipy.constants import g\n\n\ndef period_of_pendulum(length: float) -> float:\n    \"\"\"\n    >>> period_of_pendulum(1.23)\n    2.2252155506257845\n    >>> period_of_pendulum(2.37)\n    3.0888278441908574\n    >>> period_of_pendulum(5.63)\n    4.76073193364765\n    >>> period_of_pendulum(-12)\n    Traceback (most recent call last):\n        ...\n    ValueError: The length should be non-negative\n    >>> period_of_pendulum(0)\n    0.0\n    \"\"\"\n    if length < 0:\n        raise ValueError(\"The length should be non-negative\")\n    return 2 * pi * (length / g) ** 0.5\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "physics/photoelectric_effect.py",
    "content": "\"\"\"\r\nThe photoelectric effect is the emission of electrons when electromagnetic radiation ,\r\nsuch as light, hits a material. Electrons emitted in this manner are called\r\nphotoelectrons.\r\n\r\nIn 1905, Einstein proposed a theory of the photoelectric effect using a concept that\r\nlight consists of tiny packets of energy known as photons or light quanta. Each packet\r\ncarries energy hv that is proportional to the frequency v of the corresponding\r\nelectromagnetic wave. The proportionality constant h has become known as the\r\nPlanck constant. In the range of kinetic energies of the electrons that are removed from\r\ntheir varying atomic bindings by the absorption of a photon of energy hv, the highest\r\nkinetic energy K_max is :\r\n\r\nK_max = hv-W\r\n\r\nHere, W is the minimum energy required to remove an electron from the surface of the\r\nmaterial. It is called the work function of the surface\r\n\r\nReference: https://en.wikipedia.org/wiki/Photoelectric_effect\r\n\r\n\"\"\"\r\n\r\nPLANCK_CONSTANT_JS = 6.6261 * pow(10, -34)  # in SI (Js)\r\nPLANCK_CONSTANT_EVS = 4.1357 * pow(10, -15)  # in eVs\r\n\r\n\r\ndef maximum_kinetic_energy(\r\n    frequency: float, work_function: float, in_ev: bool = False\r\n) -> float:\r\n    \"\"\"\r\n    Calculates the maximum kinetic energy of emitted electron from the surface.\r\n    if the maximum kinetic energy is zero then no electron will be emitted\r\n    or given electromagnetic wave frequency is small.\r\n\r\n    frequency (float): Frequency of electromagnetic wave.\r\n    work_function (float): Work function of the surface.\r\n    in_ev (optional)(bool): Pass True if values are in eV.\r\n\r\n    Usage example:\r\n    >>> maximum_kinetic_energy(1000000,2)\r\n    0\r\n    >>> maximum_kinetic_energy(1000000,2,True)\r\n    0\r\n    >>> maximum_kinetic_energy(10000000000000000,2,True)\r\n    39.357000000000006\r\n    >>> maximum_kinetic_energy(-9,20)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Frequency can't be negative.\r\n\r\n    >>> maximum_kinetic_energy(1000,\"a\")\r\n    Traceback (most recent call last):\r\n        ...\r\n    TypeError: unsupported operand type(s) for -: 'float' and 'str'\r\n\r\n    \"\"\"\r\n    if frequency < 0:\r\n        raise ValueError(\"Frequency can't be negative.\")\r\n    if in_ev:\r\n        return max(PLANCK_CONSTANT_EVS * frequency - work_function, 0)\r\n    return max(PLANCK_CONSTANT_JS * frequency - work_function, 0)\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n"
  },
  {
    "path": "physics/potential_energy.py",
    "content": "from scipy.constants import g\n\n\"\"\"\nFinding the gravitational potential energy of an object with reference\nto the earth,by taking its mass and height above the ground as input\n\n\nDescription : Gravitational energy or gravitational potential energy\nis the potential energy a massive object has in relation to another\nmassive object due to gravity. It is the potential energy associated\nwith the gravitational field, which is released (converted into\nkinetic energy) when the objects fall towards each other.\nGravitational potential energy increases when two objects\nare brought further apart.\n\nFor two pairwise interacting point particles, the gravitational\npotential energy U is given by\nU=-GMm/R\nwhere M and m are the masses of the two particles, R is the distance\nbetween them, and G is the gravitational constant.\nClose to the Earth's surface, the gravitational field is approximately\nconstant, and the gravitational potential energy of an object reduces to\nU=mgh\nwhere m is the object's mass, g=GM/R² is the gravity of Earth, and h is\nthe height of the object's center of mass above a chosen reference level.\n\nReference : \"https://en.m.wikipedia.org/wiki/Gravitational_energy\"\n\"\"\"\n\n\ndef potential_energy(mass: float, height: float) -> float:\n    # function will accept mass and height as parameters and return potential energy\n    \"\"\"\n    >>> potential_energy(10,10)\n    980.665\n    >>> potential_energy(0,5)\n    0.0\n    >>> potential_energy(8,0)\n    0.0\n    >>> potential_energy(10,5)\n    490.3325\n    >>> potential_energy(0,0)\n    0.0\n    >>> potential_energy(2,8)\n    156.9064\n    >>> potential_energy(20,100)\n    19613.3\n    \"\"\"\n    if mass < 0:\n        # handling of negative values of mass\n        raise ValueError(\"The mass of a body cannot be negative\")\n    if height < 0:\n        # handling of negative values of height\n        raise ValueError(\"The height above the ground cannot be negative\")\n    return mass * g * height\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod(name=\"potential_energy\")\n"
  },
  {
    "path": "physics/rainfall_intensity.py",
    "content": "\"\"\"\nRainfall Intensity\n==================\nThis module contains functions to calculate the intensity of\na rainfall event for a given duration and return period.\n\nThis function uses the Sherman intensity-duration-frequency curve.\n\nReferences\n----------\n- Aparicio, F. (1997): Fundamentos de Hidrología de Superficie.\n    Balderas, México, Limusa. 303 p.\n- https://en.wikipedia.org/wiki/Intensity-duration-frequency_curve\n\"\"\"\n\n\ndef rainfall_intensity(\n    coefficient_k: float,\n    coefficient_a: float,\n    coefficient_b: float,\n    coefficient_c: float,\n    return_period: float,\n    duration: float,\n) -> float:\n    \"\"\"\n    Calculate the intensity of a rainfall event for a given duration and return period.\n    It's based on the Sherman intensity-duration-frequency curve:\n\n    I = k * T^a / (D + b)^c\n\n    where:\n        I = Intensity of the rainfall event [mm/h]\n        k, a, b, c = Coefficients obtained through statistical distribution adjust\n        T = Return period in years\n        D = Rainfall event duration in minutes\n\n    Parameters\n    ----------\n    coefficient_k : float\n        Coefficient obtained through statistical distribution adjust.\n    coefficient_a : float\n        Coefficient obtained through statistical distribution adjust.\n    coefficient_b : float\n        Coefficient obtained through statistical distribution adjust.\n    coefficient_c : float\n        Coefficient obtained through statistical distribution adjust.\n    return_period : float\n        Return period in years.\n    duration : float\n        Rainfall event duration in minutes.\n\n    Returns\n    -------\n    intensity : float\n        Intensity of the rainfall event in mm/h.\n\n    Raises\n    ------\n    ValueError\n        If any of the parameters are not positive.\n\n    Examples\n    --------\n\n    >>> rainfall_intensity(1000, 0.2, 11.6, 0.81, 10, 60)\n    49.83339231138578\n\n    >>> rainfall_intensity(1000, 0.2, 11.6, 0.81, 10, 30)\n    77.36319588106228\n\n    >>> rainfall_intensity(1000, 0.2, 11.6, 0.81, 5, 60)\n    43.382487747633625\n\n    >>> rainfall_intensity(0, 0.2, 11.6, 0.81, 10, 60)\n    Traceback (most recent call last):\n    ...\n    ValueError: All parameters must be positive.\n\n    >>> rainfall_intensity(1000, -0.2, 11.6, 0.81, 10, 60)\n    Traceback (most recent call last):\n    ...\n    ValueError: All parameters must be positive.\n\n    >>> rainfall_intensity(1000, 0.2, -11.6, 0.81, 10, 60)\n    Traceback (most recent call last):\n    ...\n    ValueError: All parameters must be positive.\n\n    >>> rainfall_intensity(1000, 0.2, 11.6, -0.81, 10, 60)\n    Traceback (most recent call last):\n    ...\n    ValueError: All parameters must be positive.\n\n    >>> rainfall_intensity(1000, 0, 11.6, 0.81, 10, 60)\n    Traceback (most recent call last):\n    ...\n    ValueError: All parameters must be positive.\n\n    >>> rainfall_intensity(1000, 0.2, 0, 0.81, 10, 60)\n    Traceback (most recent call last):\n    ...\n    ValueError: All parameters must be positive.\n\n    >>> rainfall_intensity(1000, 0.2, 11.6, 0, 10, 60)\n    Traceback (most recent call last):\n    ...\n    ValueError: All parameters must be positive.\n\n    >>> rainfall_intensity(0, 0.2, 11.6, 0.81, 10, 60)\n    Traceback (most recent call last):\n    ...\n    ValueError: All parameters must be positive.\n\n    >>> rainfall_intensity(1000, 0.2, 11.6, 0.81, 0, 60)\n    Traceback (most recent call last):\n    ...\n    ValueError: All parameters must be positive.\n\n    >>> rainfall_intensity(1000, 0.2, 11.6, 0.81, 10, 0)\n    Traceback (most recent call last):\n    ...\n    ValueError: All parameters must be positive.\n\n    \"\"\"\n    if (\n        coefficient_k <= 0\n        or coefficient_a <= 0\n        or coefficient_b <= 0\n        or coefficient_c <= 0\n        or return_period <= 0\n        or duration <= 0\n    ):\n        raise ValueError(\"All parameters must be positive.\")\n    intensity = (coefficient_k * (return_period**coefficient_a)) / (\n        (duration + coefficient_b) ** coefficient_c\n    )\n    return intensity\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "physics/reynolds_number.py",
    "content": "\"\"\"\nTitle : computing the Reynolds number to find\n        out the type of flow (laminar or turbulent)\n\nReynolds number is a dimensionless quantity that is used to determine\nthe type of flow pattern as laminar or turbulent while flowing through a\npipe. Reynolds number is defined by the ratio of inertial forces to that of\nviscous forces.\n\nR = Inertial Forces / Viscous Forces\nR = (p * V * D)/μ\n\nwhere :\np = Density of fluid (in Kg/m^3)\nD = Diameter of pipe through which fluid flows (in m)\nV = Velocity of flow of the fluid (in m/s)\nμ = Viscosity of the fluid (in Ns/m^2)\n\nIf the Reynolds number calculated is high (greater than 2000), then the\nflow through the pipe is said to be turbulent. If Reynolds number is low\n(less than 2000), the flow is said to be laminar. Numerically, these are\nacceptable values, although in general the laminar and turbulent flows\nare classified according to a range. Laminar flow falls below Reynolds\nnumber of 1100 and turbulent falls in a range greater than 2200.\nLaminar flow is the type of flow in which the fluid travels smoothly in\nregular paths. Conversely, turbulent flow isn't smooth and follows an\nirregular path with lots of mixing.\n\nReference : https://byjus.com/physics/reynolds-number/\n\"\"\"\n\n\ndef reynolds_number(\n    density: float, velocity: float, diameter: float, viscosity: float\n) -> float:\n    \"\"\"\n    >>> reynolds_number(900, 2.5, 0.05, 0.4)\n    281.25\n    >>> reynolds_number(450, 3.86, 0.078, 0.23)\n    589.0695652173912\n    >>> reynolds_number(234, -4.5, 0.3, 0.44)\n    717.9545454545454\n    >>> reynolds_number(-90, 2, 0.045, 1)\n    Traceback (most recent call last):\n        ...\n    ValueError: please ensure that density, diameter and viscosity are positive\n    >>> reynolds_number(0, 2, -0.4, -2)\n    Traceback (most recent call last):\n        ...\n    ValueError: please ensure that density, diameter and viscosity are positive\n    \"\"\"\n\n    if density <= 0 or diameter <= 0 or viscosity <= 0:\n        raise ValueError(\n            \"please ensure that density, diameter and viscosity are positive\"\n        )\n    return (density * abs(velocity) * diameter) / viscosity\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "physics/rms_speed_of_molecule.py",
    "content": "\"\"\"\nThe root-mean-square speed is essential in measuring the average speed of particles\ncontained in a gas, defined as,\n -----------------\n | Vrms = √3RT/M |\n -----------------\n\nIn Kinetic Molecular Theory, gasified particles are in a condition of constant random\nmotion; each particle moves at a completely different pace, perpetually clashing and\nchanging directions consistently velocity is used to describe the movement of gas\nparticles, thereby taking into account both speed and direction. Although the velocity\nof gaseous particles is constantly changing, the distribution of velocities does not\nchange.\nWe cannot gauge the velocity of every individual particle, thus we frequently reason\nin terms of the particles average behavior. Particles moving in opposite directions\nhave velocities of opposite signs. Since gas particles are in random motion, it's\nplausible that there'll be about as several moving in one direction as within the other\nway, which means that the average velocity for a collection of gas particles equals\nzero; as this value is unhelpful, the average of velocities can be determined using an\nalternative method.\n\"\"\"\n\nUNIVERSAL_GAS_CONSTANT = 8.3144598\n\n\ndef rms_speed_of_molecule(temperature: float, molar_mass: float) -> float:\n    \"\"\"\n    >>> rms_speed_of_molecule(100, 2)\n    35.315279554323226\n    >>> rms_speed_of_molecule(273, 12)\n    23.821458421977443\n    \"\"\"\n    if temperature < 0:\n        raise Exception(\"Temperature cannot be less than 0 K\")\n    if molar_mass <= 0:\n        raise Exception(\"Molar mass cannot be less than or equal to 0 kg/mol\")\n    else:\n        return (3 * UNIVERSAL_GAS_CONSTANT * temperature / molar_mass) ** 0.5\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    # run doctest\n    doctest.testmod()\n\n    # example\n    temperature = 300\n    molar_mass = 28\n    vrms = rms_speed_of_molecule(temperature, molar_mass)\n    print(f\"Vrms of Nitrogen gas at 300 K is {vrms} m/s\")\n"
  },
  {
    "path": "physics/shear_stress.py",
    "content": "from __future__ import annotations\n\n\"\"\"\nShear stress is a component of stress that is coplanar to the material cross-section.\nIt arises due to a shear force, the component of the force vector parallel to the\nmaterial cross-section.\n\nhttps://en.wikipedia.org/wiki/Shear_stress\n\"\"\"\n\n\ndef shear_stress(\n    stress: float,\n    tangential_force: float,\n    area: float,\n) -> tuple[str, float]:\n    \"\"\"\n    This function can calculate any one of the three -\n    1. Shear Stress\n    2. Tangential Force\n    3. Cross-sectional Area\n    This is calculated from the other two provided values\n    Examples -\n    >>> shear_stress(stress=25, tangential_force=100, area=0)\n    ('area', 4.0)\n    >>> shear_stress(stress=0, tangential_force=1600, area=200)\n    ('stress', 8.0)\n    >>> shear_stress(stress=1000, tangential_force=0, area=1200)\n    ('tangential_force', 1200000)\n    \"\"\"\n    if (stress, tangential_force, area).count(0) != 1:\n        raise ValueError(\"You cannot supply more or less than 2 values\")\n    elif stress < 0:\n        raise ValueError(\"Stress cannot be negative\")\n    elif tangential_force < 0:\n        raise ValueError(\"Tangential Force cannot be negative\")\n    elif area < 0:\n        raise ValueError(\"Area cannot be negative\")\n    elif stress == 0:\n        return (\n            \"stress\",\n            tangential_force / area,\n        )\n    elif tangential_force == 0:\n        return (\n            \"tangential_force\",\n            stress * area,\n        )\n    else:\n        return (\n            \"area\",\n            tangential_force / stress,\n        )\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "physics/speed_of_sound.py",
    "content": "\"\"\"\nTitle : Calculating the speed of sound\n\nDescription :\n    The speed of sound (c) is the speed that a sound wave travels per unit time (m/s).\n    During propagation, the sound wave propagates through an elastic medium.\n\n    Sound propagates as longitudinal waves in liquids and gases and as transverse waves\n    in solids. This file calculates the speed of sound in a fluid based on its bulk\n    module and density.\n\n    Equation for the speed of sound in a fluid:\n    c_fluid = sqrt(K_s / p)\n\n    c_fluid: speed of sound in fluid\n    K_s: isentropic bulk modulus\n    p: density of fluid\n\nSource : https://en.wikipedia.org/wiki/Speed_of_sound\n\"\"\"\n\n\ndef speed_of_sound_in_a_fluid(density: float, bulk_modulus: float) -> float:\n    \"\"\"\n    Calculates the speed of sound in a fluid from its density and bulk modulus\n\n    Examples:\n    Example 1 --> Water 20°C: bulk_modulus= 2.15MPa, density=998kg/m³\n    Example 2 --> Mercury 20°C: bulk_modulus= 28.5MPa, density=13600kg/m³\n\n    >>> speed_of_sound_in_a_fluid(bulk_modulus=2.15e9, density=998)\n    1467.7563207952705\n    >>> speed_of_sound_in_a_fluid(bulk_modulus=28.5e9, density=13600)\n    1447.614670861731\n    \"\"\"\n\n    if density <= 0:\n        raise ValueError(\"Impossible fluid density\")\n    if bulk_modulus <= 0:\n        raise ValueError(\"Impossible bulk modulus\")\n\n    return (bulk_modulus / density) ** 0.5\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "physics/speeds_of_gas_molecules.py",
    "content": "\"\"\"\nThe root-mean-square, average and most probable speeds of gas molecules are\nderived from the Maxwell-Boltzmann distribution. The Maxwell-Boltzmann\ndistribution is a probability distribution that describes the distribution of\nspeeds of particles in an ideal gas.\n\nThe distribution is given by the following equation::\n\n        -------------------------------------------------\n        | f(v) = (M/2πRT)^(3/2) * 4πv^2 * e^(-Mv^2/2RT) |\n        -------------------------------------------------\n\nwhere:\n    * ``f(v)`` is the fraction of molecules with a speed ``v``\n    * ``M`` is the molar mass of the gas in kg/mol\n    * ``R`` is the gas constant\n    * ``T`` is the absolute temperature\n\nMore information about the Maxwell-Boltzmann distribution can be found here:\nhttps://en.wikipedia.org/wiki/Maxwell%E2%80%93Boltzmann_distribution\n\nThe average speed can be calculated by integrating the Maxwell-Boltzmann distribution\nfrom 0 to infinity and dividing by the total number of molecules. The result is::\n\n        ----------------------\n        | v_avg = √(8RT/πM)  |\n        ----------------------\n\nThe most probable speed is the speed at which the Maxwell-Boltzmann distribution\nis at its maximum. This can be found by differentiating the Maxwell-Boltzmann\ndistribution with respect to ``v`` and setting the result equal to zero. The result is::\n\n        ----------------------\n        | v_mp = √(2RT/M)    |\n        ----------------------\n\nThe root-mean-square speed is another measure of the average speed\nof the molecules in a gas. It is calculated by taking the square root\nof the average of the squares of the speeds of the molecules. The result is::\n\n        ----------------------\n        | v_rms = √(3RT/M)   |\n        ----------------------\n\nHere we have defined functions to calculate the average and\nmost probable speeds of molecules in a gas given the\ntemperature and molar mass of the gas.\n\"\"\"\n\n# import the constants R and pi from the scipy.constants library\nfrom scipy.constants import R, pi\n\n\ndef avg_speed_of_molecule(temperature: float, molar_mass: float) -> float:\n    \"\"\"\n    Takes the temperature (in K) and molar mass (in kg/mol) of a gas\n    and returns the average speed of a molecule in the gas (in m/s).\n\n    Examples:\n\n    >>> avg_speed_of_molecule(273, 0.028) # nitrogen at 273 K\n    454.3488755062257\n    >>> avg_speed_of_molecule(300, 0.032) # oxygen at 300 K\n    445.5257273433045\n    >>> avg_speed_of_molecule(-273, 0.028) # invalid temperature\n    Traceback (most recent call last):\n        ...\n    Exception: Absolute temperature cannot be less than 0 K\n    >>> avg_speed_of_molecule(273, 0) # invalid molar mass\n    Traceback (most recent call last):\n        ...\n    Exception: Molar mass should be greater than 0 kg/mol\n    \"\"\"\n\n    if temperature < 0:\n        raise Exception(\"Absolute temperature cannot be less than 0 K\")\n    if molar_mass <= 0:\n        raise Exception(\"Molar mass should be greater than 0 kg/mol\")\n    return (8 * R * temperature / (pi * molar_mass)) ** 0.5\n\n\ndef mps_speed_of_molecule(temperature: float, molar_mass: float) -> float:\n    \"\"\"\n    Takes the temperature (in K) and molar mass (in kg/mol) of a gas\n    and returns the most probable speed of a molecule in the gas (in m/s).\n\n    Examples:\n\n    >>> mps_speed_of_molecule(273, 0.028) # nitrogen at 273 K\n    402.65620702280023\n    >>> mps_speed_of_molecule(300, 0.032) # oxygen at 300 K\n    394.8368955535605\n    >>> mps_speed_of_molecule(-273, 0.028) # invalid temperature\n    Traceback (most recent call last):\n        ...\n    Exception: Absolute temperature cannot be less than 0 K\n    >>> mps_speed_of_molecule(273, 0) # invalid molar mass\n    Traceback (most recent call last):\n        ...\n    Exception: Molar mass should be greater than 0 kg/mol\n    \"\"\"\n\n    if temperature < 0:\n        raise Exception(\"Absolute temperature cannot be less than 0 K\")\n    if molar_mass <= 0:\n        raise Exception(\"Molar mass should be greater than 0 kg/mol\")\n    return (2 * R * temperature / molar_mass) ** 0.5\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "physics/terminal_velocity.py",
    "content": "\"\"\"\nTitle : Computing the terminal velocity of an object falling\n        through a fluid.\n\nTerminal velocity is defined as the highest velocity attained by an\nobject falling through a fluid. It is observed when the sum of drag force\nand buoyancy is equal to the downward gravity force acting on the\nobject. The acceleration of the object is zero as the net force acting on\nthe object is zero.\n\nVt = ((2 * m * g)/(p * A * Cd))^0.5\n\nwhere :\nVt = Terminal velocity (in m/s)\nm = Mass of the falling object (in Kg)\ng = Acceleration due to gravity (value taken : imported from scipy)\np = Density of the fluid through which the object is falling (in Kg/m^3)\nA = Projected area of the object (in m^2)\nCd = Drag coefficient (dimensionless)\n\nReference : https://byjus.com/physics/derivation-of-terminal-velocity/\n\"\"\"\n\nfrom scipy.constants import g\n\n\ndef terminal_velocity(\n    mass: float, density: float, area: float, drag_coefficient: float\n) -> float:\n    \"\"\"\n    >>> terminal_velocity(1, 25, 0.6, 0.77)\n    1.3031197996044768\n    >>> terminal_velocity(2, 100, 0.45, 0.23)\n    1.9467947148674276\n    >>> terminal_velocity(5, 50, 0.2, 0.5)\n    4.428690551393267\n    >>> terminal_velocity(-5, 50, -0.2, -2)\n    Traceback (most recent call last):\n        ...\n    ValueError: mass, density, area and the drag coefficient all need to be positive\n    >>> terminal_velocity(3, -20, -1, 2)\n    Traceback (most recent call last):\n        ...\n    ValueError: mass, density, area and the drag coefficient all need to be positive\n    >>> terminal_velocity(-2, -1, -0.44, -1)\n    Traceback (most recent call last):\n        ...\n    ValueError: mass, density, area and the drag coefficient all need to be positive\n    \"\"\"\n    if mass <= 0 or density <= 0 or area <= 0 or drag_coefficient <= 0:\n        raise ValueError(\n            \"mass, density, area and the drag coefficient all need to be positive\"\n        )\n    return ((2 * mass * g) / (density * area * drag_coefficient)) ** 0.5\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "project_euler/README.md",
    "content": "# Project Euler\n\nProblems are taken from https://projecteuler.net/, the Project Euler. [Problems are licensed under CC BY-NC-SA 4.0](https://projecteuler.net/copyright).\n\nProject Euler is a series of challenging mathematical/computer programming problems that require more than just mathematical\ninsights to solve. Project Euler is ideal for mathematicians who are learning to code.\n\nThe 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.\n\n\n## Solution Guidelines\n\nWelcome 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.\n\n### Coding Style\n\n* Please maintain consistency in project directory and solution file names. Keep the following points in mind:\n  * Create a new directory only for the problems which do not exist yet.\n  * If you create a new directory, please create an empty `__init__.py` file inside it as well.\n  * 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.\n\n* Please provide a link to the problem and other references, if used, in the **module-level docstring**.\n\n* All imports should come ***after*** the module-level docstring.\n\n* 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:\n  * 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)`.\n  * When the `solution` function is called without any arguments like so: `solution()`, it should return the answer to the problem.\n\n* 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.\n  * 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):\n\n  ```python\n  def solution(limit: int = 1000):\n      \"\"\"\n      A brief statement mentioning what the function is about.\n\n      You can have a detailed explanation about the solution method in the\n      module-level docstring.\n\n      >>> solution(1)\n      ...\n      >>> solution(16)\n      ...\n      >>> solution(100)\n      ...\n      \"\"\"\n    ```\n\n### Solution Template\n\nYou 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.\n\nPlease 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.\n\n```python\n\"\"\"\nProject Euler Problem [problem number]: [link to the original problem]\n\n... [Entire problem statement] ...\n\n... [Solution explanation - Optional] ...\n\nReferences [Optional]:\n- [Wikipedia link to the topic]\n- [Stackoverflow link]\n...\n\n\"\"\"\nimport module1\nimport module2\n...\n\ndef helper1(arg1: [type hint], arg2: [type hint], ...) -> [Return type hint]:\n    \"\"\"\n    A brief statement explaining what the function is about.\n\n    ... A more elaborate description ... [Optional]\n\n    ...\n    [Doctest]\n    ...\n\n    \"\"\"\n    ...\n    # calculations\n    ...\n\n    return\n\n\n# You can have multiple helper functions but the solution function should be\n# after all the helper functions ...\n\n\ndef solution(arg1: [type hint], arg2: [type hint], ...) -> [Return type hint]:\n    \"\"\"\n    A brief statement mentioning what the function is about.\n\n    You can have a detailed explanation about the solution in the\n    module-level docstring.\n\n    ...\n    [Doctest as mentioned above]\n    ...\n\n    \"\"\"\n\n    ...\n    # calculations\n    ...\n\n    return answer\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n```\n"
  },
  {
    "path": "project_euler/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_001/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_001/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 1: https://projecteuler.net/problem=1\n\nMultiples of 3 and 5\n\nIf we list all the natural numbers below 10 that are multiples of 3 or 5,\nwe get 3, 5, 6 and 9. The sum of these multiples is 23.\n\nFind the sum of all the multiples of 3 or 5 below 1000.\n\"\"\"\n\n\ndef solution(n: int = 1000) -> int:\n    \"\"\"\n    Returns the sum of all the multiples of 3 or 5 below n.\n\n    >>> solution(3)\n    0\n    >>> solution(4)\n    3\n    >>> solution(10)\n    23\n    >>> solution(600)\n    83700\n    >>> solution(-7)\n    0\n    \"\"\"\n\n    return sum(e for e in range(3, n) if e % 3 == 0 or e % 5 == 0)\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_001/sol2.py",
    "content": "\"\"\"\nProject Euler Problem 1: https://projecteuler.net/problem=1\n\nMultiples of 3 and 5\n\nIf we list all the natural numbers below 10 that are multiples of 3 or 5,\nwe get 3, 5, 6 and 9. The sum of these multiples is 23.\n\nFind the sum of all the multiples of 3 or 5 below 1000.\n\"\"\"\n\n\ndef solution(n: int = 1000) -> int:\n    \"\"\"\n    Returns the sum of all the multiples of 3 or 5 below n.\n\n    >>> solution(3)\n    0\n    >>> solution(4)\n    3\n    >>> solution(10)\n    23\n    >>> solution(600)\n    83700\n    \"\"\"\n\n    total = 0\n    terms = (n - 1) // 3\n    total += ((terms) * (6 + (terms - 1) * 3)) // 2  # total of an A.P.\n    terms = (n - 1) // 5\n    total += ((terms) * (10 + (terms - 1) * 5)) // 2\n    terms = (n - 1) // 15\n    total -= ((terms) * (30 + (terms - 1) * 15)) // 2\n    return total\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_001/sol3.py",
    "content": "\"\"\"\nProject Euler Problem 1: https://projecteuler.net/problem=1\n\nMultiples of 3 and 5\n\nIf we list all the natural numbers below 10 that are multiples of 3 or 5,\nwe get 3, 5, 6 and 9. The sum of these multiples is 23.\n\nFind the sum of all the multiples of 3 or 5 below 1000.\n\"\"\"\n\n\ndef solution(n: int = 1000) -> int:\n    \"\"\"\n    This solution is based on the pattern that the successive numbers in the\n    series follow: 0+3,+2,+1,+3,+1,+2,+3.\n    Returns the sum of all the multiples of 3 or 5 below n.\n\n    >>> solution(3)\n    0\n    >>> solution(4)\n    3\n    >>> solution(10)\n    23\n    >>> solution(600)\n    83700\n    \"\"\"\n\n    total = 0\n    num = 0\n    while 1:\n        num += 3\n        if num >= n:\n            break\n        total += num\n        num += 2\n        if num >= n:\n            break\n        total += num\n        num += 1\n        if num >= n:\n            break\n        total += num\n        num += 3\n        if num >= n:\n            break\n        total += num\n        num += 1\n        if num >= n:\n            break\n        total += num\n        num += 2\n        if num >= n:\n            break\n        total += num\n        num += 3\n        if num >= n:\n            break\n        total += num\n    return total\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_001/sol4.py",
    "content": "\"\"\"\nProject Euler Problem 1: https://projecteuler.net/problem=1\n\nMultiples of 3 and 5\n\nIf we list all the natural numbers below 10 that are multiples of 3 or 5,\nwe get 3, 5, 6 and 9. The sum of these multiples is 23.\n\nFind the sum of all the multiples of 3 or 5 below 1000.\n\"\"\"\n\n\ndef solution(n: int = 1000) -> int:\n    \"\"\"\n    Returns the sum of all the multiples of 3 or 5 below n.\n\n    >>> solution(3)\n    0\n    >>> solution(4)\n    3\n    >>> solution(10)\n    23\n    >>> solution(600)\n    83700\n    \"\"\"\n\n    xmulti = []\n    zmulti = []\n    z = 3\n    x = 5\n    temp = 1\n    while True:\n        result = z * temp\n        if result < n:\n            zmulti.append(result)\n            temp += 1\n        else:\n            temp = 1\n            break\n    while True:\n        result = x * temp\n        if result < n:\n            xmulti.append(result)\n            temp += 1\n        else:\n            break\n    collection = list(set(xmulti + zmulti))\n    return sum(collection)\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_001/sol5.py",
    "content": "\"\"\"\nProject Euler Problem 1: https://projecteuler.net/problem=1\n\nMultiples of 3 and 5\n\nIf we list all the natural numbers below 10 that are multiples of 3 or 5,\nwe get 3, 5, 6 and 9. The sum of these multiples is 23.\n\nFind the sum of all the multiples of 3 or 5 below 1000.\n\"\"\"\n\n\ndef solution(n: int = 1000) -> int:\n    \"\"\"\n    Returns the sum of all the multiples of 3 or 5 below n.\n    A straightforward pythonic solution using list comprehension.\n\n    >>> solution(3)\n    0\n    >>> solution(4)\n    3\n    >>> solution(10)\n    23\n    >>> solution(600)\n    83700\n    \"\"\"\n\n    return sum(i for i in range(n) if i % 3 == 0 or i % 5 == 0)\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_001/sol6.py",
    "content": "\"\"\"\nProject Euler Problem 1: https://projecteuler.net/problem=1\n\nMultiples of 3 and 5\n\nIf we list all the natural numbers below 10 that are multiples of 3 or 5,\nwe get 3, 5, 6 and 9. The sum of these multiples is 23.\n\nFind the sum of all the multiples of 3 or 5 below 1000.\n\"\"\"\n\n\ndef solution(n: int = 1000) -> int:\n    \"\"\"\n    Returns the sum of all the multiples of 3 or 5 below n.\n\n    >>> solution(3)\n    0\n    >>> solution(4)\n    3\n    >>> solution(10)\n    23\n    >>> solution(600)\n    83700\n    \"\"\"\n\n    a = 3\n    result = 0\n    while a < n:\n        if a % 3 == 0 or a % 5 == 0:\n            result += a\n        elif a % 15 == 0:\n            result -= a\n        a += 1\n    return result\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_001/sol7.py",
    "content": "\"\"\"\nProject Euler Problem 1: https://projecteuler.net/problem=1\n\nMultiples of 3 and 5\n\nIf we list all the natural numbers below 10 that are multiples of 3 or 5,\nwe get 3, 5, 6 and 9. The sum of these multiples is 23.\n\nFind the sum of all the multiples of 3 or 5 below 1000.\n\"\"\"\n\n\ndef solution(n: int = 1000) -> int:\n    \"\"\"\n    Returns the sum of all the multiples of 3 or 5 below n.\n\n    >>> solution(3)\n    0\n    >>> solution(4)\n    3\n    >>> solution(10)\n    23\n    >>> solution(600)\n    83700\n    \"\"\"\n\n    result = 0\n    for i in range(n):\n        if i % 3 == 0 or i % 5 == 0:\n            result += i\n    return result\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_002/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_002/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 2: https://projecteuler.net/problem=2\n\nEven Fibonacci Numbers\n\nEach new term in the Fibonacci sequence is generated by adding the previous\ntwo terms. By starting with 1 and 2, the first 10 terms will be:\n\n1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...\n\nBy considering the terms in the Fibonacci sequence whose values do not exceed\nfour million, find the sum of the even-valued terms.\n\nReferences:\n    - https://en.wikipedia.org/wiki/Fibonacci_number\n\"\"\"\n\n\ndef solution(n: int = 4000000) -> int:\n    \"\"\"\n    Returns the sum of all even fibonacci sequence elements that are lower\n    or equal to n.\n\n    >>> solution(10)\n    10\n    >>> solution(15)\n    10\n    >>> solution(2)\n    2\n    >>> solution(1)\n    0\n    >>> solution(34)\n    44\n    \"\"\"\n\n    i = 1\n    j = 2\n    total = 0\n    while j <= n:\n        if j % 2 == 0:\n            total += j\n        i, j = j, i + j\n\n    return total\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_002/sol2.py",
    "content": "\"\"\"\nProject Euler Problem 2: https://projecteuler.net/problem=2\n\nEven Fibonacci Numbers\n\nEach new term in the Fibonacci sequence is generated by adding the previous\ntwo terms. By starting with 1 and 2, the first 10 terms will be:\n\n1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...\n\nBy considering the terms in the Fibonacci sequence whose values do not exceed\nfour million, find the sum of the even-valued terms.\n\nReferences:\n    - https://en.wikipedia.org/wiki/Fibonacci_number\n\"\"\"\n\n\ndef solution(n: int = 4000000) -> int:\n    \"\"\"\n    Returns the sum of all even fibonacci sequence elements that are lower\n    or equal to n.\n\n    >>> solution(10)\n    10\n    >>> solution(15)\n    10\n    >>> solution(2)\n    2\n    >>> solution(1)\n    0\n    >>> solution(34)\n    44\n    \"\"\"\n\n    even_fibs = []\n    a, b = 0, 1\n    while b <= n:\n        if b % 2 == 0:\n            even_fibs.append(b)\n        a, b = b, a + b\n    return sum(even_fibs)\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_002/sol3.py",
    "content": "\"\"\"\nProject Euler Problem 2: https://projecteuler.net/problem=2\n\nEven Fibonacci Numbers\n\nEach new term in the Fibonacci sequence is generated by adding the previous\ntwo terms. By starting with 1 and 2, the first 10 terms will be:\n\n1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...\n\nBy considering the terms in the Fibonacci sequence whose values do not exceed\nfour million, find the sum of the even-valued terms.\n\nReferences:\n    - https://en.wikipedia.org/wiki/Fibonacci_number\n\"\"\"\n\n\ndef solution(n: int = 4000000) -> int:\n    \"\"\"\n    Returns the sum of all even fibonacci sequence elements that are lower\n    or equal to n.\n\n    >>> solution(10)\n    10\n    >>> solution(15)\n    10\n    >>> solution(2)\n    2\n    >>> solution(1)\n    0\n    >>> solution(34)\n    44\n    \"\"\"\n\n    if n <= 1:\n        return 0\n    a = 0\n    b = 2\n    count = 0\n    while 4 * b + a <= n:\n        a, b = b, 4 * b + a\n        count += a\n    return count + b\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_002/sol4.py",
    "content": "\"\"\"\nProject Euler Problem 2: https://projecteuler.net/problem=2\n\nEven Fibonacci Numbers\n\nEach new term in the Fibonacci sequence is generated by adding the previous\ntwo terms. By starting with 1 and 2, the first 10 terms will be:\n\n1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...\n\nBy considering the terms in the Fibonacci sequence whose values do not exceed\nfour million, find the sum of the even-valued terms.\n\nReferences:\n    - https://en.wikipedia.org/wiki/Fibonacci_number\n\"\"\"\n\nimport math\nfrom decimal import Decimal, getcontext\n\n\ndef solution(n: int = 4000000) -> int:\n    \"\"\"\n    Returns the sum of all even fibonacci sequence elements that are lower\n    or equal to n.\n\n    >>> solution(10)\n    10\n    >>> solution(15)\n    10\n    >>> solution(2)\n    2\n    >>> solution(1)\n    0\n    >>> solution(34)\n    44\n    >>> solution(3.4)\n    2\n    >>> solution(0)\n    Traceback (most recent call last):\n        ...\n    ValueError: Parameter n must be greater than or equal to one.\n    >>> solution(-17)\n    Traceback (most recent call last):\n        ...\n    ValueError: Parameter n must be greater than or equal to one.\n    >>> solution([])\n    Traceback (most recent call last):\n        ...\n    TypeError: Parameter n must be int or castable to int.\n    >>> solution(\"asd\")\n    Traceback (most recent call last):\n        ...\n    TypeError: Parameter n must be int or castable to int.\n    \"\"\"\n\n    try:\n        n = int(n)\n    except (TypeError, ValueError):\n        raise TypeError(\"Parameter n must be int or castable to int.\")\n    if n <= 0:\n        raise ValueError(\"Parameter n must be greater than or equal to one.\")\n    getcontext().prec = 100\n    phi = (Decimal(5) ** Decimal(\"0.5\") + 1) / Decimal(2)\n\n    index = (math.floor(math.log(n * (phi + 2), phi) - 1) // 3) * 3 + 2\n    num = Decimal(round(phi ** Decimal(index + 1))) / (phi + 2)\n    total = num // 2\n    return int(total)\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_002/sol5.py",
    "content": "\"\"\"\nProject Euler Problem 2: https://projecteuler.net/problem=2\n\nEven Fibonacci Numbers\n\nEach new term in the Fibonacci sequence is generated by adding the previous\ntwo terms. By starting with 1 and 2, the first 10 terms will be:\n\n1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...\n\nBy considering the terms in the Fibonacci sequence whose values do not exceed\nfour million, find the sum of the even-valued terms.\n\nReferences:\n    - https://en.wikipedia.org/wiki/Fibonacci_number\n\"\"\"\n\n\ndef solution(n: int = 4000000) -> int:\n    \"\"\"\n    Returns the sum of all even fibonacci sequence elements that are lower\n    or equal to n.\n\n    >>> solution(10)\n    10\n    >>> solution(15)\n    10\n    >>> solution(2)\n    2\n    >>> solution(1)\n    0\n    >>> solution(34)\n    44\n    \"\"\"\n\n    fib = [0, 1]\n    i = 0\n    while fib[i] <= n:\n        fib.append(fib[i] + fib[i + 1])\n        if fib[i + 2] > n:\n            break\n        i += 1\n    total = 0\n    for j in range(len(fib) - 1):\n        if fib[j] % 2 == 0:\n            total += fib[j]\n\n    return total\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_003/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_003/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 3: https://projecteuler.net/problem=3\n\nLargest prime factor\n\nThe prime factors of 13195 are 5, 7, 13 and 29.\n\nWhat is the largest prime factor of the number 600851475143?\n\nReferences:\n    - https://en.wikipedia.org/wiki/Prime_number#Unique_factorization\n\"\"\"\n\nimport math\n\n\ndef is_prime(number: int) -> bool:\n    \"\"\"Checks to see if a number is a prime in O(sqrt(n)).\n    A number is prime if it has exactly two factors: 1 and itself.\n    Returns boolean representing primality of given number (i.e., if the\n    result is true, then the number is indeed prime else it is not).\n\n    >>> is_prime(2)\n    True\n    >>> is_prime(3)\n    True\n    >>> is_prime(27)\n    False\n    >>> is_prime(2999)\n    True\n    >>> is_prime(0)\n    False\n    >>> is_prime(1)\n    False\n    \"\"\"\n\n    if 1 < number < 4:\n        # 2 and 3 are primes\n        return True\n    elif number < 2 or number % 2 == 0 or number % 3 == 0:\n        # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes\n        return False\n\n    # All primes number are in format of 6k +/- 1\n    for i in range(5, int(math.sqrt(number) + 1), 6):\n        if number % i == 0 or number % (i + 2) == 0:\n            return False\n    return True\n\n\ndef solution(n: int = 600851475143) -> int:\n    \"\"\"\n    Returns the largest prime factor of a given number n.\n\n    >>> solution(13195)\n    29\n    >>> solution(10)\n    5\n    >>> solution(17)\n    17\n    >>> solution(3.4)\n    3\n    >>> solution(0)\n    Traceback (most recent call last):\n        ...\n    ValueError: Parameter n must be greater than or equal to one.\n    >>> solution(-17)\n    Traceback (most recent call last):\n        ...\n    ValueError: Parameter n must be greater than or equal to one.\n    >>> solution([])\n    Traceback (most recent call last):\n        ...\n    TypeError: Parameter n must be int or castable to int.\n    >>> solution(\"asd\")\n    Traceback (most recent call last):\n        ...\n    TypeError: Parameter n must be int or castable to int.\n    \"\"\"\n\n    try:\n        n = int(n)\n    except (TypeError, ValueError):\n        raise TypeError(\"Parameter n must be int or castable to int.\")\n    if n <= 0:\n        raise ValueError(\"Parameter n must be greater than or equal to one.\")\n    max_number = 0\n    if is_prime(n):\n        return n\n    while n % 2 == 0:\n        n //= 2\n    if is_prime(n):\n        return n\n    for i in range(3, int(math.sqrt(n)) + 1, 2):\n        if n % i == 0:\n            if is_prime(n // i):\n                max_number = n // i\n                break\n            elif is_prime(i):\n                max_number = i\n    return max_number\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_003/sol2.py",
    "content": "\"\"\"\nProject Euler Problem 3: https://projecteuler.net/problem=3\n\nLargest prime factor\n\nThe prime factors of 13195 are 5, 7, 13 and 29.\n\nWhat is the largest prime factor of the number 600851475143?\n\nReferences:\n    - https://en.wikipedia.org/wiki/Prime_number#Unique_factorization\n\"\"\"\n\n\ndef solution(n: int = 600851475143) -> int:\n    \"\"\"\n    Returns the largest prime factor of a given number n.\n\n    >>> solution(13195)\n    29\n    >>> solution(10)\n    5\n    >>> solution(17)\n    17\n    >>> solution(3.4)\n    3\n    >>> solution(0)\n    Traceback (most recent call last):\n        ...\n    ValueError: Parameter n must be greater than or equal to one.\n    >>> solution(-17)\n    Traceback (most recent call last):\n        ...\n    ValueError: Parameter n must be greater than or equal to one.\n    >>> solution([])\n    Traceback (most recent call last):\n        ...\n    TypeError: Parameter n must be int or castable to int.\n    >>> solution(\"asd\")\n    Traceback (most recent call last):\n        ...\n    TypeError: Parameter n must be int or castable to int.\n    \"\"\"\n\n    try:\n        n = int(n)\n    except (TypeError, ValueError):\n        raise TypeError(\"Parameter n must be int or castable to int.\")\n    if n <= 0:\n        raise ValueError(\"Parameter n must be greater than or equal to one.\")\n    prime = 1\n    i = 2\n    while i * i <= n:\n        while n % i == 0:\n            prime = i\n            n //= i\n        i += 1\n    if n > 1:\n        prime = n\n    return int(prime)\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_003/sol3.py",
    "content": "\"\"\"\nProject Euler Problem 3: https://projecteuler.net/problem=3\n\nLargest prime factor\n\nThe prime factors of 13195 are 5, 7, 13 and 29.\n\nWhat is the largest prime factor of the number 600851475143?\n\nReferences:\n    - https://en.wikipedia.org/wiki/Prime_number#Unique_factorization\n\"\"\"\n\n\ndef solution(n: int = 600851475143) -> int:\n    \"\"\"\n    Returns the largest prime factor of a given number n.\n\n    >>> solution(13195)\n    29\n    >>> solution(10)\n    5\n    >>> solution(17)\n    17\n    >>> solution(3.4)\n    3\n    >>> solution(0)\n    Traceback (most recent call last):\n        ...\n    ValueError: Parameter n must be greater than or equal to one.\n    >>> solution(-17)\n    Traceback (most recent call last):\n        ...\n    ValueError: Parameter n must be greater than or equal to one.\n    >>> solution([])\n    Traceback (most recent call last):\n        ...\n    TypeError: Parameter n must be int or castable to int.\n    >>> solution(\"asd\")\n    Traceback (most recent call last):\n        ...\n    TypeError: Parameter n must be int or castable to int.\n    \"\"\"\n\n    try:\n        n = int(n)\n    except (TypeError, ValueError):\n        raise TypeError(\"Parameter n must be int or castable to int.\")\n    if n <= 0:\n        raise ValueError(\"Parameter n must be greater than or equal to one.\")\n    i = 2\n    ans = 0\n    if n == 2:\n        return 2\n    while n > 2:\n        while n % i != 0:\n            i += 1\n        ans = i\n        while n % i == 0:\n            n = n // i\n        i += 1\n    return int(ans)\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_004/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_004/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 4: https://projecteuler.net/problem=4\n\nLargest palindrome product\n\nA palindromic number reads the same both ways. The largest palindrome made\nfrom the product of two 2-digit numbers is 9009 = 91 x 99.\n\nFind the largest palindrome made from the product of two 3-digit numbers.\n\nReferences:\n    - https://en.wikipedia.org/wiki/Palindromic_number\n\"\"\"\n\n\ndef solution(n: int = 998001) -> int:\n    \"\"\"\n    Returns the largest palindrome made from the product of two 3-digit\n    numbers which is less than n.\n\n    >>> solution(20000)\n    19591\n    >>> solution(30000)\n    29992\n    >>> solution(40000)\n    39893\n    >>> solution(10000)\n    Traceback (most recent call last):\n        ...\n    ValueError: That number is larger than our acceptable range.\n    \"\"\"\n\n    # fetches the next number\n    for number in range(n - 1, 9999, -1):\n        str_number = str(number)\n\n        # checks whether 'str_number' is a palindrome.\n        if str_number == str_number[::-1]:\n            divisor = 999\n\n            # if 'number' is a product of two 3-digit numbers\n            # then number is the answer otherwise fetch next number.\n            while divisor != 99:\n                if (number % divisor == 0) and (len(str(number // divisor)) == 3.0):\n                    return number\n                divisor -= 1\n    raise ValueError(\"That number is larger than our acceptable range.\")\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_004/sol2.py",
    "content": "\"\"\"\nProject Euler Problem 4: https://projecteuler.net/problem=4\n\nLargest palindrome product\n\nA palindromic number reads the same both ways. The largest palindrome made\nfrom the product of two 2-digit numbers is 9009 = 91 x 99.\n\nFind the largest palindrome made from the product of two 3-digit numbers.\n\nReferences:\n    - https://en.wikipedia.org/wiki/Palindromic_number\n\"\"\"\n\n\ndef solution(n: int = 998001) -> int:\n    \"\"\"\n    Returns the largest palindrome made from the product of two 3-digit\n    numbers which is less than n.\n\n    >>> solution(20000)\n    19591\n    >>> solution(30000)\n    29992\n    >>> solution(40000)\n    39893\n    \"\"\"\n\n    answer = 0\n    for i in range(999, 99, -1):  # 3 digit numbers range from 999 down to 100\n        for j in range(999, 99, -1):\n            product_string = str(i * j)\n            if product_string == product_string[::-1] and i * j < n:\n                answer = max(answer, i * j)\n    return answer\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_005/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_005/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 5: https://projecteuler.net/problem=5\n\nSmallest multiple\n\n2520 is the smallest number that can be divided by each of the numbers\nfrom 1 to 10 without any remainder.\n\nWhat is the smallest positive number that is _evenly divisible_ by all\nof the numbers from 1 to 20?\n\nReferences:\n    - https://en.wiktionary.org/wiki/evenly_divisible\n\"\"\"\n\n\ndef solution(n: int = 20) -> int:\n    \"\"\"\n    Returns the smallest positive number that is evenly divisible (divisible\n    with no remainder) by all of the numbers from 1 to n.\n\n    >>> solution(10)\n    2520\n    >>> solution(15)\n    360360\n    >>> solution(22)\n    232792560\n    >>> solution(3.4)\n    6\n    >>> solution(0)\n    Traceback (most recent call last):\n        ...\n    ValueError: Parameter n must be greater than or equal to one.\n    >>> solution(-17)\n    Traceback (most recent call last):\n        ...\n    ValueError: Parameter n must be greater than or equal to one.\n    >>> solution([])\n    Traceback (most recent call last):\n        ...\n    TypeError: Parameter n must be int or castable to int.\n    >>> solution(\"asd\")\n    Traceback (most recent call last):\n        ...\n    TypeError: Parameter n must be int or castable to int.\n    \"\"\"\n\n    try:\n        n = int(n)\n    except (TypeError, ValueError):\n        raise TypeError(\"Parameter n must be int or castable to int.\")\n    if n <= 0:\n        raise ValueError(\"Parameter n must be greater than or equal to one.\")\n    i = 0\n    while 1:\n        i += n * (n - 1)\n        nfound = 0\n        for j in range(2, n):\n            if i % j != 0:\n                nfound = 1\n                break\n        if nfound == 0:\n            if i == 0:\n                i = 1\n            return i\n    return None\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_005/sol2.py",
    "content": "from maths.greatest_common_divisor import greatest_common_divisor\n\n\"\"\"\nProject Euler Problem 5: https://projecteuler.net/problem=5\n\nSmallest multiple\n\n2520 is the smallest number that can be divided by each of the numbers\nfrom 1 to 10 without any remainder.\n\nWhat is the smallest positive number that is _evenly divisible_ by all\nof the numbers from 1 to 20?\n\nReferences:\n    - https://en.wiktionary.org/wiki/evenly_divisible\n    - https://en.wikipedia.org/wiki/Euclidean_algorithm\n    - https://en.wikipedia.org/wiki/Least_common_multiple\n\"\"\"\n\n\ndef lcm(x: int, y: int) -> int:\n    \"\"\"\n    Least Common Multiple.\n\n    Using the property that lcm(a, b) * greatest_common_divisor(a, b) = a*b\n\n    >>> lcm(3, 15)\n    15\n    >>> lcm(1, 27)\n    27\n    >>> lcm(13, 27)\n    351\n    >>> lcm(64, 48)\n    192\n    \"\"\"\n\n    return (x * y) // greatest_common_divisor(x, y)\n\n\ndef solution(n: int = 20) -> int:\n    \"\"\"\n    Returns the smallest positive number that is evenly divisible (divisible\n    with no remainder) by all of the numbers from 1 to n.\n\n    >>> solution(10)\n    2520\n    >>> solution(15)\n    360360\n    >>> solution(22)\n    232792560\n    \"\"\"\n\n    g = 1\n    for i in range(1, n + 1):\n        g = lcm(g, i)\n    return g\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_006/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_006/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 6: https://projecteuler.net/problem=6\n\nSum square difference\n\nThe sum of the squares of the first ten natural numbers is,\n    1^2 + 2^2 + ... + 10^2 = 385\n\nThe square of the sum of the first ten natural numbers is,\n    (1 + 2 + ... + 10)^2 = 55^2 = 3025\n\nHence the difference between the sum of the squares of the first ten\nnatural numbers and the square of the sum is 3025 - 385 = 2640.\n\nFind the difference between the sum of the squares of the first one\nhundred natural numbers and the square of the sum.\n\"\"\"\n\n\ndef solution(n: int = 100) -> int:\n    \"\"\"\n    Returns the difference between the sum of the squares of the first n\n    natural numbers and the square of the sum.\n\n    >>> solution(10)\n    2640\n    >>> solution(15)\n    13160\n    >>> solution(20)\n    41230\n    >>> solution(50)\n    1582700\n    \"\"\"\n\n    sum_of_squares = 0\n    sum_of_ints = 0\n    for i in range(1, n + 1):\n        sum_of_squares += i**2\n        sum_of_ints += i\n    return sum_of_ints**2 - sum_of_squares\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_006/sol2.py",
    "content": "\"\"\"\nProject Euler Problem 6: https://projecteuler.net/problem=6\n\nSum square difference\n\nThe sum of the squares of the first ten natural numbers is,\n    1^2 + 2^2 + ... + 10^2 = 385\n\nThe square of the sum of the first ten natural numbers is,\n    (1 + 2 + ... + 10)^2 = 55^2 = 3025\n\nHence the difference between the sum of the squares of the first ten\nnatural numbers and the square of the sum is 3025 - 385 = 2640.\n\nFind the difference between the sum of the squares of the first one\nhundred natural numbers and the square of the sum.\n\"\"\"\n\n\ndef solution(n: int = 100) -> int:\n    \"\"\"\n    Returns the difference between the sum of the squares of the first n\n    natural numbers and the square of the sum.\n\n    >>> solution(10)\n    2640\n    >>> solution(15)\n    13160\n    >>> solution(20)\n    41230\n    >>> solution(50)\n    1582700\n    \"\"\"\n\n    sum_cubes = (n * (n + 1) // 2) ** 2\n    sum_squares = n * (n + 1) * (2 * n + 1) // 6\n    return sum_cubes - sum_squares\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_006/sol3.py",
    "content": "\"\"\"\nProject Euler Problem 6: https://projecteuler.net/problem=6\n\nSum square difference\n\nThe sum of the squares of the first ten natural numbers is,\n    1^2 + 2^2 + ... + 10^2 = 385\n\nThe square of the sum of the first ten natural numbers is,\n    (1 + 2 + ... + 10)^2 = 55^2 = 3025\n\nHence the difference between the sum of the squares of the first ten\nnatural numbers and the square of the sum is 3025 - 385 = 2640.\n\nFind the difference between the sum of the squares of the first one\nhundred natural numbers and the square of the sum.\n\"\"\"\n\nimport math\n\n\ndef solution(n: int = 100) -> int:\n    \"\"\"\n    Returns the difference between the sum of the squares of the first n\n    natural numbers and the square of the sum.\n\n    >>> solution(10)\n    2640\n    >>> solution(15)\n    13160\n    >>> solution(20)\n    41230\n    >>> solution(50)\n    1582700\n    \"\"\"\n\n    sum_of_squares = sum(i * i for i in range(1, n + 1))\n    square_of_sum = int(math.pow(sum(range(1, n + 1)), 2))\n    return square_of_sum - sum_of_squares\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_006/sol4.py",
    "content": "\"\"\"\nProject Euler Problem 6: https://projecteuler.net/problem=6\n\nSum square difference\n\nThe sum of the squares of the first ten natural numbers is,\n    1^2 + 2^2 + ... + 10^2 = 385\n\nThe square of the sum of the first ten natural numbers is,\n    (1 + 2 + ... + 10)^2 = 55^2 = 3025\n\nHence the difference between the sum of the squares of the first ten\nnatural numbers and the square of the sum is 3025 - 385 = 2640.\n\nFind the difference between the sum of the squares of the first one\nhundred natural numbers and the square of the sum.\n\"\"\"\n\n\ndef solution(n: int = 100) -> int:\n    \"\"\"\n    Returns the difference between the sum of the squares of the first n\n    natural numbers and the square of the sum.\n\n    >>> solution(10)\n    2640\n    >>> solution(15)\n    13160\n    >>> solution(20)\n    41230\n    >>> solution(50)\n    1582700\n    \"\"\"\n\n    sum_of_squares = n * (n + 1) * (2 * n + 1) / 6\n    square_of_sum = (n * (n + 1) / 2) ** 2\n    return int(square_of_sum - sum_of_squares)\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_007/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_007/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 7: https://projecteuler.net/problem=7\n\n10001st prime\n\nBy listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we\ncan see that the 6th prime is 13.\n\nWhat is the 10001st prime number?\n\nReferences:\n    - https://en.wikipedia.org/wiki/Prime_number\n\"\"\"\n\nfrom math import sqrt\n\n\ndef is_prime(number: int) -> bool:\n    \"\"\"Checks to see if a number is a prime in O(sqrt(n)).\n    A number is prime if it has exactly two factors: 1 and itself.\n    Returns boolean representing primality of given number (i.e., if the\n    result is true, then the number is indeed prime else it is not).\n\n    >>> is_prime(2)\n    True\n    >>> is_prime(3)\n    True\n    >>> is_prime(27)\n    False\n    >>> is_prime(2999)\n    True\n    >>> is_prime(0)\n    False\n    >>> is_prime(1)\n    False\n    \"\"\"\n\n    if 1 < number < 4:\n        # 2 and 3 are primes\n        return True\n    elif number < 2 or number % 2 == 0 or number % 3 == 0:\n        # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes\n        return False\n\n    # All primes number are in format of 6k +/- 1\n    for i in range(5, int(sqrt(number) + 1), 6):\n        if number % i == 0 or number % (i + 2) == 0:\n            return False\n    return True\n\n\ndef solution(nth: int = 10001) -> int:\n    \"\"\"\n    Returns the n-th prime number.\n\n    >>> solution(6)\n    13\n    >>> solution(1)\n    2\n    >>> solution(3)\n    5\n    >>> solution(20)\n    71\n    >>> solution(50)\n    229\n    >>> solution(100)\n    541\n    \"\"\"\n\n    count = 0\n    number = 1\n    while count != nth and number < 3:\n        number += 1\n        if is_prime(number):\n            count += 1\n    while count != nth:\n        number += 2\n        if is_prime(number):\n            count += 1\n    return number\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_007/sol2.py",
    "content": "\"\"\"\nProject Euler Problem 7: https://projecteuler.net/problem=7\n\n10001st prime\n\nBy listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we\ncan see that the 6th prime is 13.\n\nWhat is the 10001st prime number?\n\nReferences:\n    - https://en.wikipedia.org/wiki/Prime_number\n\"\"\"\n\nimport math\n\n\ndef is_prime(number: int) -> bool:\n    \"\"\"Checks to see if a number is a prime in O(sqrt(n)).\n    A number is prime if it has exactly two factors: 1 and itself.\n    Returns boolean representing primality of given number (i.e., if the\n    result is true, then the number is indeed prime else it is not).\n\n    >>> is_prime(2)\n    True\n    >>> is_prime(3)\n    True\n    >>> is_prime(27)\n    False\n    >>> is_prime(2999)\n    True\n    >>> is_prime(0)\n    False\n    >>> is_prime(1)\n    False\n    \"\"\"\n\n    if 1 < number < 4:\n        # 2 and 3 are primes\n        return True\n    elif number < 2 or number % 2 == 0 or number % 3 == 0:\n        # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes\n        return False\n\n    # All primes number are in format of 6k +/- 1\n    for i in range(5, int(math.sqrt(number) + 1), 6):\n        if number % i == 0 or number % (i + 2) == 0:\n            return False\n    return True\n\n\ndef solution(nth: int = 10001) -> int:\n    \"\"\"\n    Returns the n-th prime number.\n\n    >>> solution(6)\n    13\n    >>> solution(1)\n    2\n    >>> solution(3)\n    5\n    >>> solution(20)\n    71\n    >>> solution(50)\n    229\n    >>> solution(100)\n    541\n    >>> solution(3.4)\n    5\n    >>> solution(0)\n    Traceback (most recent call last):\n        ...\n    ValueError: Parameter nth must be greater than or equal to one.\n    >>> solution(-17)\n    Traceback (most recent call last):\n        ...\n    ValueError: Parameter nth must be greater than or equal to one.\n    >>> solution([])\n    Traceback (most recent call last):\n        ...\n    TypeError: Parameter nth must be int or castable to int.\n    >>> solution(\"asd\")\n    Traceback (most recent call last):\n        ...\n    TypeError: Parameter nth must be int or castable to int.\n    \"\"\"\n\n    try:\n        nth = int(nth)\n    except (TypeError, ValueError):\n        raise TypeError(\"Parameter nth must be int or castable to int.\") from None\n    if nth <= 0:\n        raise ValueError(\"Parameter nth must be greater than or equal to one.\")\n    primes: list[int] = []\n    num = 2\n    while len(primes) < nth:\n        if is_prime(num):\n            primes.append(num)\n            num += 1\n        else:\n            num += 1\n    return primes[len(primes) - 1]\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_007/sol3.py",
    "content": "\"\"\"\nProject Euler Problem 7: https://projecteuler.net/problem=7\n\n10001st prime\n\nBy listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we\ncan see that the 6th prime is 13.\n\nWhat is the 10001st prime number?\n\nReferences:\n    - https://en.wikipedia.org/wiki/Prime_number\n\"\"\"\n\nimport itertools\nimport math\n\n\ndef is_prime(number: int) -> bool:\n    \"\"\"Checks to see if a number is a prime in O(sqrt(n)).\n    A number is prime if it has exactly two factors: 1 and itself.\n    Returns boolean representing primality of given number (i.e., if the\n    result is true, then the number is indeed prime else it is not).\n\n    >>> is_prime(2)\n    True\n    >>> is_prime(3)\n    True\n    >>> is_prime(27)\n    False\n    >>> is_prime(2999)\n    True\n    >>> is_prime(0)\n    False\n    >>> is_prime(1)\n    False\n    \"\"\"\n\n    if 1 < number < 4:\n        # 2 and 3 are primes\n        return True\n    elif number < 2 or number % 2 == 0 or number % 3 == 0:\n        # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes\n        return False\n\n    # All primes number are in format of 6k +/- 1\n    for i in range(5, int(math.sqrt(number) + 1), 6):\n        if number % i == 0 or number % (i + 2) == 0:\n            return False\n    return True\n\n\ndef prime_generator():\n    \"\"\"\n    Generate a sequence of prime numbers\n    \"\"\"\n\n    num = 2\n    while True:\n        if is_prime(num):\n            yield num\n        num += 1\n\n\ndef solution(nth: int = 10001) -> int:\n    \"\"\"\n    Returns the n-th prime number.\n\n    >>> solution(6)\n    13\n    >>> solution(1)\n    2\n    >>> solution(3)\n    5\n    >>> solution(20)\n    71\n    >>> solution(50)\n    229\n    >>> solution(100)\n    541\n    \"\"\"\n    return next(itertools.islice(prime_generator(), nth - 1, nth))\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_008/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_008/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 8: https://projecteuler.net/problem=8\n\nLargest product in a series\n\nThe four adjacent digits in the 1000-digit number that have the greatest\nproduct are 9 x 9 x 8 x 9 = 5832.\n\n    73167176531330624919225119674426574742355349194934\n    96983520312774506326239578318016984801869478851843\n    85861560789112949495459501737958331952853208805511\n    12540698747158523863050715693290963295227443043557\n    66896648950445244523161731856403098711121722383113\n    62229893423380308135336276614282806444486645238749\n    30358907296290491560440772390713810515859307960866\n    70172427121883998797908792274921901699720888093776\n    65727333001053367881220235421809751254540594752243\n    52584907711670556013604839586446706324415722155397\n    53697817977846174064955149290862569321978468622482\n    83972241375657056057490261407972968652414535100474\n    82166370484403199890008895243450658541227588666881\n    16427171479924442928230863465674813919123162824586\n    17866458359124566529476545682848912883142607690042\n    24219022671055626321111109370544217506941658960408\n    07198403850962455444362981230987879927244284909188\n    84580156166097919133875499200524063689912560717606\n    05886116467109405077541002256983155200055935729725\n    71636269561882670428252483600823257530420752963450\n\nFind the thirteen adjacent digits in the 1000-digit number that have the\ngreatest product. What is the value of this product?\n\"\"\"\n\nimport sys\n\nN = (\n    \"73167176531330624919225119674426574742355349194934\"\n    \"96983520312774506326239578318016984801869478851843\"\n    \"85861560789112949495459501737958331952853208805511\"\n    \"12540698747158523863050715693290963295227443043557\"\n    \"66896648950445244523161731856403098711121722383113\"\n    \"62229893423380308135336276614282806444486645238749\"\n    \"30358907296290491560440772390713810515859307960866\"\n    \"70172427121883998797908792274921901699720888093776\"\n    \"65727333001053367881220235421809751254540594752243\"\n    \"52584907711670556013604839586446706324415722155397\"\n    \"53697817977846174064955149290862569321978468622482\"\n    \"83972241375657056057490261407972968652414535100474\"\n    \"82166370484403199890008895243450658541227588666881\"\n    \"16427171479924442928230863465674813919123162824586\"\n    \"17866458359124566529476545682848912883142607690042\"\n    \"24219022671055626321111109370544217506941658960408\"\n    \"07198403850962455444362981230987879927244284909188\"\n    \"84580156166097919133875499200524063689912560717606\"\n    \"05886116467109405077541002256983155200055935729725\"\n    \"71636269561882670428252483600823257530420752963450\"\n)\n\n\ndef solution(n: str = N) -> int:\n    \"\"\"\n    Find the thirteen adjacent digits in the 1000-digit number n that have\n    the greatest product and returns it.\n\n    >>> solution(\"13978431290823798458352374\")\n    609638400\n    >>> solution(\"13978431295823798458352374\")\n    2612736000\n    >>> solution(\"1397843129582379841238352374\")\n    209018880\n    \"\"\"\n\n    largest_product = -sys.maxsize - 1\n    for i in range(len(n) - 12):\n        product = 1\n        for j in range(13):\n            product *= int(n[i + j])\n        largest_product = max(largest_product, product)\n    return largest_product\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_008/sol2.py",
    "content": "\"\"\"\nProject Euler Problem 8: https://projecteuler.net/problem=8\n\nLargest product in a series\n\nThe four adjacent digits in the 1000-digit number that have the greatest\nproduct are 9 x 9 x 8 x 9 = 5832.\n\n    73167176531330624919225119674426574742355349194934\n    96983520312774506326239578318016984801869478851843\n    85861560789112949495459501737958331952853208805511\n    12540698747158523863050715693290963295227443043557\n    66896648950445244523161731856403098711121722383113\n    62229893423380308135336276614282806444486645238749\n    30358907296290491560440772390713810515859307960866\n    70172427121883998797908792274921901699720888093776\n    65727333001053367881220235421809751254540594752243\n    52584907711670556013604839586446706324415722155397\n    53697817977846174064955149290862569321978468622482\n    83972241375657056057490261407972968652414535100474\n    82166370484403199890008895243450658541227588666881\n    16427171479924442928230863465674813919123162824586\n    17866458359124566529476545682848912883142607690042\n    24219022671055626321111109370544217506941658960408\n    07198403850962455444362981230987879927244284909188\n    84580156166097919133875499200524063689912560717606\n    05886116467109405077541002256983155200055935729725\n    71636269561882670428252483600823257530420752963450\n\nFind the thirteen adjacent digits in the 1000-digit number that have the\ngreatest product. What is the value of this product?\n\"\"\"\n\nfrom functools import reduce\n\nN = (\n    \"73167176531330624919225119674426574742355349194934\"\n    \"96983520312774506326239578318016984801869478851843\"\n    \"85861560789112949495459501737958331952853208805511\"\n    \"12540698747158523863050715693290963295227443043557\"\n    \"66896648950445244523161731856403098711121722383113\"\n    \"62229893423380308135336276614282806444486645238749\"\n    \"30358907296290491560440772390713810515859307960866\"\n    \"70172427121883998797908792274921901699720888093776\"\n    \"65727333001053367881220235421809751254540594752243\"\n    \"52584907711670556013604839586446706324415722155397\"\n    \"53697817977846174064955149290862569321978468622482\"\n    \"83972241375657056057490261407972968652414535100474\"\n    \"82166370484403199890008895243450658541227588666881\"\n    \"16427171479924442928230863465674813919123162824586\"\n    \"17866458359124566529476545682848912883142607690042\"\n    \"24219022671055626321111109370544217506941658960408\"\n    \"07198403850962455444362981230987879927244284909188\"\n    \"84580156166097919133875499200524063689912560717606\"\n    \"05886116467109405077541002256983155200055935729725\"\n    \"71636269561882670428252483600823257530420752963450\"\n)\n\n\ndef solution(n: str = N) -> int:\n    \"\"\"\n    Find the thirteen adjacent digits in the 1000-digit number n that have\n    the greatest product and returns it.\n\n    >>> solution(\"13978431290823798458352374\")\n    609638400\n    >>> solution(\"13978431295823798458352374\")\n    2612736000\n    >>> solution(\"1397843129582379841238352374\")\n    209018880\n    \"\"\"\n\n    return max(\n        # mypy cannot properly interpret reduce\n        int(reduce(lambda x, y: str(int(x) * int(y)), n[i : i + 13]))\n        for i in range(len(n) - 12)\n    )\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_008/sol3.py",
    "content": "\"\"\"\nProject Euler Problem 8: https://projecteuler.net/problem=8\n\nLargest product in a series\n\nThe four adjacent digits in the 1000-digit number that have the greatest\nproduct are 9 x 9 x 8 x 9 = 5832.\n\n    73167176531330624919225119674426574742355349194934\n    96983520312774506326239578318016984801869478851843\n    85861560789112949495459501737958331952853208805511\n    12540698747158523863050715693290963295227443043557\n    66896648950445244523161731856403098711121722383113\n    62229893423380308135336276614282806444486645238749\n    30358907296290491560440772390713810515859307960866\n    70172427121883998797908792274921901699720888093776\n    65727333001053367881220235421809751254540594752243\n    52584907711670556013604839586446706324415722155397\n    53697817977846174064955149290862569321978468622482\n    83972241375657056057490261407972968652414535100474\n    82166370484403199890008895243450658541227588666881\n    16427171479924442928230863465674813919123162824586\n    17866458359124566529476545682848912883142607690042\n    24219022671055626321111109370544217506941658960408\n    07198403850962455444362981230987879927244284909188\n    84580156166097919133875499200524063689912560717606\n    05886116467109405077541002256983155200055935729725\n    71636269561882670428252483600823257530420752963450\n\nFind the thirteen adjacent digits in the 1000-digit number that have the\ngreatest product. What is the value of this product?\n\"\"\"\n\nimport sys\n\nN = (\n    \"73167176531330624919225119674426574742355349194934\"\n    \"96983520312774506326239578318016984801869478851843\"\n    \"85861560789112949495459501737958331952853208805511\"\n    \"12540698747158523863050715693290963295227443043557\"\n    \"66896648950445244523161731856403098711121722383113\"\n    \"62229893423380308135336276614282806444486645238749\"\n    \"30358907296290491560440772390713810515859307960866\"\n    \"70172427121883998797908792274921901699720888093776\"\n    \"65727333001053367881220235421809751254540594752243\"\n    \"52584907711670556013604839586446706324415722155397\"\n    \"53697817977846174064955149290862569321978468622482\"\n    \"83972241375657056057490261407972968652414535100474\"\n    \"82166370484403199890008895243450658541227588666881\"\n    \"16427171479924442928230863465674813919123162824586\"\n    \"17866458359124566529476545682848912883142607690042\"\n    \"24219022671055626321111109370544217506941658960408\"\n    \"07198403850962455444362981230987879927244284909188\"\n    \"84580156166097919133875499200524063689912560717606\"\n    \"05886116467109405077541002256983155200055935729725\"\n    \"71636269561882670428252483600823257530420752963450\"\n)\n\n\ndef str_eval(s: str) -> int:\n    \"\"\"\n    Returns product of digits in given string n\n\n    >>> str_eval(\"987654321\")\n    362880\n    >>> str_eval(\"22222222\")\n    256\n    \"\"\"\n\n    product = 1\n    for digit in s:\n        product *= int(digit)\n    return product\n\n\ndef solution(n: str = N) -> int:\n    \"\"\"\n    Find the thirteen adjacent digits in the 1000-digit number n that have\n    the greatest product and returns it.\n    \"\"\"\n\n    largest_product = -sys.maxsize - 1\n    substr = n[:13]\n    cur_index = 13\n    while cur_index < len(n) - 13:\n        if int(n[cur_index]) >= int(substr[0]):\n            substr = substr[1:] + n[cur_index]\n            cur_index += 1\n        else:\n            largest_product = max(largest_product, str_eval(substr))\n            substr = n[cur_index : cur_index + 13]\n            cur_index += 13\n    return largest_product\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_009/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_009/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 9: https://projecteuler.net/problem=9\n\nSpecial Pythagorean triplet\n\nA Pythagorean triplet is a set of three natural numbers, a < b < c, for which,\n\n    a^2 + b^2 = c^2\n\nFor example, 3^2 + 4^2 = 9 + 16 = 25 = 5^2.\n\nThere exists exactly one Pythagorean triplet for which a + b + c = 1000.\nFind the product a*b*c.\n\nReferences:\n    - https://en.wikipedia.org/wiki/Pythagorean_triple\n\"\"\"\n\n\ndef solution() -> int:\n    \"\"\"\n    Returns the product of a,b,c which are Pythagorean Triplet that satisfies\n    the following:\n      1. a < b < c\n      2. a**2 + b**2 = c**2\n      3. a + b + c = 1000\n\n    >>> solution()\n    31875000\n    \"\"\"\n\n    for a in range(300):\n        for b in range(a + 1, 400):\n            for c in range(b + 1, 500):\n                if (a + b + c) == 1000 and (a**2) + (b**2) == (c**2):\n                    return a * b * c\n\n    return -1\n\n\ndef solution_fast() -> int:\n    \"\"\"\n    Returns the product of a,b,c which are Pythagorean Triplet that satisfies\n    the following:\n      1. a < b < c\n      2. a**2 + b**2 = c**2\n      3. a + b + c = 1000\n\n    >>> solution_fast()\n    31875000\n    \"\"\"\n\n    for a in range(300):\n        for b in range(400):\n            c = 1000 - a - b\n            if a < b < c and (a**2) + (b**2) == (c**2):\n                return a * b * c\n\n    return -1\n\n\ndef benchmark() -> None:\n    \"\"\"\n    Benchmark code comparing two different version function.\n    \"\"\"\n    import timeit\n\n    print(\n        timeit.timeit(\"solution()\", setup=\"from __main__ import solution\", number=1000)\n    )\n    print(\n        timeit.timeit(\n            \"solution_fast()\", setup=\"from __main__ import solution_fast\", number=1000\n        )\n    )\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_009/sol2.py",
    "content": "\"\"\"\nProject Euler Problem 9: https://projecteuler.net/problem=9\n\nSpecial Pythagorean triplet\n\nA Pythagorean triplet is a set of three natural numbers, a < b < c, for which,\n\n    a^2 + b^2 = c^2\n\nFor example, 3^2 + 4^2 = 9 + 16 = 25 = 5^2.\n\nThere exists exactly one Pythagorean triplet for which a + b + c = 1000.\nFind the product a*b*c.\n\nReferences:\n    - https://en.wikipedia.org/wiki/Pythagorean_triple\n\"\"\"\n\n\ndef solution(n: int = 1000) -> int:\n    \"\"\"\n    Return the product of a,b,c which are Pythagorean Triplet that satisfies\n    the following:\n      1. a < b < c\n      2. a**2 + b**2 = c**2\n      3. a + b + c = n\n\n    >>> solution(36)\n    1620\n    >>> solution(126)\n    66780\n    \"\"\"\n\n    product = -1\n    candidate = 0\n    for a in range(1, n // 3):\n        # Solving the two equations a**2+b**2=c**2 and a+b+c=N eliminating c\n        b = (n * n - 2 * a * n) // (2 * n - 2 * a)\n        c = n - a - b\n        if c * c == (a * a + b * b):\n            candidate = a * b * c\n            product = max(product, candidate)\n    return product\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_009/sol3.py",
    "content": "\"\"\"\nProject Euler Problem 9: https://projecteuler.net/problem=9\n\nSpecial Pythagorean triplet\n\nA Pythagorean triplet is a set of three natural numbers, a < b < c, for which,\n\n    a^2 + b^2 = c^2\n\nFor example, 3^2 + 4^2 = 9 + 16 = 25 = 5^2.\n\nThere exists exactly one Pythagorean triplet for which a + b + c = 1000.\nFind the product a*b*c.\n\nReferences:\n    - https://en.wikipedia.org/wiki/Pythagorean_triple\n\"\"\"\n\n\ndef solution() -> int:\n    \"\"\"\n    Returns the product of a,b,c which are Pythagorean Triplet that satisfies\n    the following:\n      1. a**2 + b**2 = c**2\n      2. a + b + c = 1000\n\n    >>> solution()\n    31875000\n    \"\"\"\n\n    return next(\n        iter(\n            [\n                a * b * (1000 - a - b)\n                for a in range(1, 999)\n                for b in range(a, 999)\n                if (a * a + b * b == (1000 - a - b) ** 2)\n            ]\n        )\n    )\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_009/sol4.py",
    "content": "\"\"\"\nProject Euler Problem 9: https://projecteuler.net/problem=9\n\nSpecial Pythagorean triplet\n\nA Pythagorean triplet is a set of three natural numbers, a < b < c, for which,\n\n    a^2 + b^2 = c^2.\n\nFor example, 3^2 + 4^2 = 9 + 16 = 25 = 5^2.\n\nThere exists exactly one Pythagorean triplet for which a + b + c = 1000.\nFind the product abc.\n\nReferences:\n    - https://en.wikipedia.org/wiki/Pythagorean_triple\n\"\"\"\n\n\ndef get_squares(n: int) -> list[int]:\n    \"\"\"\n    >>> get_squares(0)\n    []\n    >>> get_squares(1)\n    [0]\n    >>> get_squares(2)\n    [0, 1]\n    >>> get_squares(3)\n    [0, 1, 4]\n    >>> get_squares(4)\n    [0, 1, 4, 9]\n    \"\"\"\n    return [number * number for number in range(n)]\n\n\ndef solution(n: int = 1000) -> int:\n    \"\"\"\n    Precomputing squares and checking if a^2 + b^2 is the square by set look-up.\n\n    >>> solution(12)\n    60\n    >>> solution(36)\n    1620\n    \"\"\"\n\n    squares = get_squares(n)\n    squares_set = set(squares)\n    for a in range(1, n // 3):\n        for b in range(a + 1, (n - a) // 2 + 1):\n            if (\n                squares[a] + squares[b] in squares_set\n                and squares[n - a - b] == squares[a] + squares[b]\n            ):\n                return a * b * (n - a - b)\n\n    return -1\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_010/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_010/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 10: https://projecteuler.net/problem=10\n\nSummation of primes\n\nThe sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.\n\nFind the sum of all the primes below two million.\n\nReferences:\n    - https://en.wikipedia.org/wiki/Prime_number\n\"\"\"\n\nimport math\n\n\ndef is_prime(number: int) -> bool:\n    \"\"\"Checks to see if a number is a prime in O(sqrt(n)).\n    A number is prime if it has exactly two factors: 1 and itself.\n    Returns boolean representing primality of given number num (i.e., if the\n    result is true, then the number is indeed prime else it is not).\n\n    >>> is_prime(2)\n    True\n    >>> is_prime(3)\n    True\n    >>> is_prime(27)\n    False\n    >>> is_prime(2999)\n    True\n    >>> is_prime(0)\n    False\n    >>> is_prime(1)\n    False\n    \"\"\"\n\n    if 1 < number < 4:\n        # 2 and 3 are primes\n        return True\n    elif number < 2 or number % 2 == 0 or number % 3 == 0:\n        # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes\n        return False\n\n    # All primes number are in format of 6k +/- 1\n    for i in range(5, int(math.sqrt(number) + 1), 6):\n        if number % i == 0 or number % (i + 2) == 0:\n            return False\n    return True\n\n\ndef solution(n: int = 2000000) -> int:\n    \"\"\"\n    Returns the sum of all the primes below n.\n\n    >>> solution(1000)\n    76127\n    >>> solution(5000)\n    1548136\n    >>> solution(10000)\n    5736396\n    >>> solution(7)\n    10\n    \"\"\"\n\n    return sum(num for num in range(3, n, 2) if is_prime(num)) + 2 if n > 2 else 0\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_010/sol2.py",
    "content": "\"\"\"\nProject Euler Problem 10: https://projecteuler.net/problem=10\n\nSummation of primes\n\nThe sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.\n\nFind the sum of all the primes below two million.\n\nReferences:\n    - https://en.wikipedia.org/wiki/Prime_number\n\"\"\"\n\nimport math\nfrom collections.abc import Iterator\nfrom itertools import takewhile\n\n\ndef is_prime(number: int) -> bool:\n    \"\"\"Checks to see if a number is a prime in O(sqrt(n)).\n    A number is prime if it has exactly two factors: 1 and itself.\n    Returns boolean representing primality of given number num (i.e., if the\n    result is true, then the number is indeed prime else it is not).\n\n    >>> is_prime(2)\n    True\n    >>> is_prime(3)\n    True\n    >>> is_prime(27)\n    False\n    >>> is_prime(2999)\n    True\n    >>> is_prime(0)\n    False\n    >>> is_prime(1)\n    False\n    \"\"\"\n\n    if 1 < number < 4:\n        # 2 and 3 are primes\n        return True\n    elif number < 2 or number % 2 == 0 or number % 3 == 0:\n        # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes\n        return False\n\n    # All primes number are in format of 6k +/- 1\n    for i in range(5, int(math.sqrt(number) + 1), 6):\n        if number % i == 0 or number % (i + 2) == 0:\n            return False\n    return True\n\n\ndef prime_generator() -> Iterator[int]:\n    \"\"\"\n    Generate a list sequence of prime numbers\n    \"\"\"\n\n    num = 2\n    while True:\n        if is_prime(num):\n            yield num\n        num += 1\n\n\ndef solution(n: int = 2000000) -> int:\n    \"\"\"\n    Returns the sum of all the primes below n.\n\n    >>> solution(1000)\n    76127\n    >>> solution(5000)\n    1548136\n    >>> solution(10000)\n    5736396\n    >>> solution(7)\n    10\n    \"\"\"\n\n    return sum(takewhile(lambda x: x < n, prime_generator()))\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_010/sol3.py",
    "content": "\"\"\"\nProject Euler Problem 10: https://projecteuler.net/problem=10\n\nSummation of primes\n\nThe sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.\n\nFind the sum of all the primes below two million.\n\nReferences:\n    - https://en.wikipedia.org/wiki/Prime_number\n    - https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes\n\"\"\"\n\n\ndef solution(n: int = 2000000) -> int:\n    \"\"\"\n    Returns the sum of all the primes below n using Sieve of Eratosthenes:\n\n    The sieve of Eratosthenes is one of the most efficient ways to find all primes\n    smaller than n when n is smaller than 10 million.  Only for positive numbers.\n\n    >>> solution(1000)\n    76127\n    >>> solution(5000)\n    1548136\n    >>> solution(10000)\n    5736396\n    >>> solution(7)\n    10\n    >>> solution(7.1)  # doctest: +ELLIPSIS\n    Traceback (most recent call last):\n        ...\n    TypeError: 'float' object cannot be interpreted as an integer\n    >>> solution(-7)  # doctest: +ELLIPSIS\n    Traceback (most recent call last):\n        ...\n    IndexError: list assignment index out of range\n    >>> solution(\"seven\")  # doctest: +ELLIPSIS\n    Traceback (most recent call last):\n        ...\n    TypeError: can only concatenate str (not \"int\") to str\n    \"\"\"\n\n    primality_list = [0 for i in range(n + 1)]\n    primality_list[0] = 1\n    primality_list[1] = 1\n\n    for i in range(2, int(n**0.5) + 1):\n        if primality_list[i] == 0:\n            for j in range(i * i, n + 1, i):\n                primality_list[j] = 1\n    sum_of_primes = 0\n    for i in range(n):\n        if primality_list[i] == 0:\n            sum_of_primes += i\n    return sum_of_primes\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_011/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_011/grid.txt",
    "content": "08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08\n49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00\n81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65\n52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91\n22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80\n24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50\n32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70\n67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21\n24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72\n21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95\n78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92\n16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57\n86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58\n19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40\n04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66\n88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69\n04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36\n20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16\n20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54\n01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48\n"
  },
  {
    "path": "project_euler/problem_011/sol1.py",
    "content": "\"\"\"\nWhat is the greatest product of four adjacent numbers (horizontally,\nvertically, or diagonally) in this 20x20 array?\n\n08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08\n49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00\n81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65\n52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91\n22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80\n24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50\n32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70\n67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21\n24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72\n21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95\n78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92\n16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57\n86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58\n19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40\n04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66\n88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69\n04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36\n20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16\n20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54\n01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48\n\"\"\"\n\nimport os\n\n\ndef largest_product(grid):\n    n_columns = len(grid[0])\n    n_rows = len(grid)\n\n    largest = 0\n    lr_diag_product = 0\n    rl_diag_product = 0\n\n    # Check vertically, horizontally, diagonally at the same time (only works\n    # for nxn grid)\n    for i in range(n_columns):\n        for j in range(n_rows - 3):\n            vert_product = grid[j][i] * grid[j + 1][i] * grid[j + 2][i] * grid[j + 3][i]\n            horz_product = grid[i][j] * grid[i][j + 1] * grid[i][j + 2] * grid[i][j + 3]\n\n            # Left-to-right diagonal (\\) product\n            if i < n_columns - 3:\n                lr_diag_product = (\n                    grid[i][j]\n                    * grid[i + 1][j + 1]\n                    * grid[i + 2][j + 2]\n                    * grid[i + 3][j + 3]\n                )\n\n            # Right-to-left diagonal(/) product\n            if i > 2:\n                rl_diag_product = (\n                    grid[i][j]\n                    * grid[i - 1][j + 1]\n                    * grid[i - 2][j + 2]\n                    * grid[i - 3][j + 3]\n                )\n\n            max_product = max(\n                vert_product, horz_product, lr_diag_product, rl_diag_product\n            )\n            largest = max(largest, max_product)\n\n    return largest\n\n\ndef solution():\n    \"\"\"Returns the greatest product of four adjacent numbers (horizontally,\n    vertically, or diagonally).\n\n    >>> solution()\n    70600674\n    \"\"\"\n    grid = []\n    with open(os.path.dirname(__file__) + \"/grid.txt\") as file:\n        for line in file:\n            grid.append(line.strip(\"\\n\").split(\" \"))\n\n    grid = [[int(i) for i in grid[j]] for j in range(len(grid))]\n\n    return largest_product(grid)\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_011/sol2.py",
    "content": "\"\"\"\nWhat is the greatest product of four adjacent numbers (horizontally,\nvertically, or diagonally) in this 20x20 array?\n\n08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08\n49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00\n81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65\n52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91\n22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80\n24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50\n32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70\n67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21\n24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72\n21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95\n78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92\n16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57\n86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58\n19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40\n04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66\n88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69\n04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36\n20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16\n20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54\n01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48\n\"\"\"\n\nimport os\n\n\ndef solution():\n    \"\"\"Returns the greatest product of four adjacent numbers (horizontally,\n    vertically, or diagonally).\n\n    >>> solution()\n    70600674\n    \"\"\"\n    with open(os.path.dirname(__file__) + \"/grid.txt\") as f:\n        grid = []\n        for _ in range(20):\n            grid.append([int(x) for x in f.readline().split()])\n\n        maximum = 0\n\n        # right\n        for i in range(20):\n            for j in range(17):\n                temp = grid[i][j] * grid[i][j + 1] * grid[i][j + 2] * grid[i][j + 3]\n                maximum = max(maximum, temp)\n\n        # down\n        for i in range(17):\n            for j in range(20):\n                temp = grid[i][j] * grid[i + 1][j] * grid[i + 2][j] * grid[i + 3][j]\n                maximum = max(maximum, temp)\n\n        # diagonal 1\n        for i in range(17):\n            for j in range(17):\n                temp = (\n                    grid[i][j]\n                    * grid[i + 1][j + 1]\n                    * grid[i + 2][j + 2]\n                    * grid[i + 3][j + 3]\n                )\n                maximum = max(maximum, temp)\n\n        # diagonal 2\n        for i in range(17):\n            for j in range(3, 20):\n                temp = (\n                    grid[i][j]\n                    * grid[i + 1][j - 1]\n                    * grid[i + 2][j - 2]\n                    * grid[i + 3][j - 3]\n                )\n                maximum = max(maximum, temp)\n        return maximum\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_012/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_012/sol1.py",
    "content": "\"\"\"\nHighly divisible triangular numbers\nProblem 12\nThe sequence of triangle numbers is generated by adding the natural numbers. So\nthe 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten\nterms would be:\n\n1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...\n\nLet us list the factors of the first seven triangle numbers:\n\n 1: 1\n 3: 1,3\n 6: 1,2,3,6\n10: 1,2,5,10\n15: 1,3,5,15\n21: 1,3,7,21\n28: 1,2,4,7,14,28\nWe can see that 28 is the first triangle number to have over five divisors.\n\nWhat is the value of the first triangle number to have over five hundred\ndivisors?\n\"\"\"\n\n\ndef count_divisors(n):\n    n_divisors = 1\n    i = 2\n    while i * i <= n:\n        multiplicity = 0\n        while n % i == 0:\n            n //= i\n            multiplicity += 1\n        n_divisors *= multiplicity + 1\n        i += 1\n    if n > 1:\n        n_divisors *= 2\n    return n_divisors\n\n\ndef solution():\n    \"\"\"Returns the value of the first triangle number to have over five hundred\n    divisors.\n\n    >>> solution()\n    76576500\n    \"\"\"\n    t_num = 1\n    i = 1\n\n    while True:\n        i += 1\n        t_num += i\n\n        if count_divisors(t_num) > 500:\n            break\n\n    return t_num\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_012/sol2.py",
    "content": "\"\"\"\nHighly divisible triangular numbers\nProblem 12\nThe sequence of triangle numbers is generated by adding the natural numbers. So\nthe 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten\nterms would be:\n\n1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...\n\nLet us list the factors of the first seven triangle numbers:\n\n 1: 1\n 3: 1,3\n 6: 1,2,3,6\n10: 1,2,5,10\n15: 1,3,5,15\n21: 1,3,7,21\n28: 1,2,4,7,14,28\nWe can see that 28 is the first triangle number to have over five divisors.\n\nWhat is the value of the first triangle number to have over five hundred\ndivisors?\n\"\"\"\n\n\ndef triangle_number_generator():\n    for n in range(1, 1000000):\n        yield n * (n + 1) // 2\n\n\ndef count_divisors(n):\n    divisors_count = 1\n    i = 2\n    while i * i <= n:\n        multiplicity = 0\n        while n % i == 0:\n            n //= i\n            multiplicity += 1\n        divisors_count *= multiplicity + 1\n        i += 1\n    if n > 1:\n        divisors_count *= 2\n    return divisors_count\n\n\ndef solution():\n    \"\"\"Returns the value of the first triangle number to have over five hundred\n    divisors.\n\n    >>> solution()\n    76576500\n    \"\"\"\n    return next(i for i in triangle_number_generator() if count_divisors(i) > 500)\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_013/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_013/num.txt",
    "content": "37107287533902102798797998220837590246510135740250\n46376937677490009712648124896970078050417018260538\n74324986199524741059474233309513058123726617309629\n91942213363574161572522430563301811072406154908250\n23067588207539346171171980310421047513778063246676\n89261670696623633820136378418383684178734361726757\n28112879812849979408065481931592621691275889832738\n44274228917432520321923589422876796487670272189318\n47451445736001306439091167216856844588711603153276\n70386486105843025439939619828917593665686757934951\n62176457141856560629502157223196586755079324193331\n64906352462741904929101432445813822663347944758178\n92575867718337217661963751590579239728245598838407\n58203565325359399008402633568948830189458628227828\n80181199384826282014278194139940567587151170094390\n35398664372827112653829987240784473053190104293586\n86515506006295864861532075273371959191420517255829\n71693888707715466499115593487603532921714970056938\n54370070576826684624621495650076471787294438377604\n53282654108756828443191190634694037855217779295145\n36123272525000296071075082563815656710885258350721\n45876576172410976447339110607218265236877223636045\n17423706905851860660448207621209813287860733969412\n81142660418086830619328460811191061556940512689692\n51934325451728388641918047049293215058642563049483\n62467221648435076201727918039944693004732956340691\n15732444386908125794514089057706229429197107928209\n55037687525678773091862540744969844508330393682126\n18336384825330154686196124348767681297534375946515\n80386287592878490201521685554828717201219257766954\n78182833757993103614740356856449095527097864797581\n16726320100436897842553539920931837441497806860984\n48403098129077791799088218795327364475675590848030\n87086987551392711854517078544161852424320693150332\n59959406895756536782107074926966537676326235447210\n69793950679652694742597709739166693763042633987085\n41052684708299085211399427365734116182760315001271\n65378607361501080857009149939512557028198746004375\n35829035317434717326932123578154982629742552737307\n94953759765105305946966067683156574377167401875275\n88902802571733229619176668713819931811048770190271\n25267680276078003013678680992525463401061632866526\n36270218540497705585629946580636237993140746255962\n24074486908231174977792365466257246923322810917141\n91430288197103288597806669760892938638285025333403\n34413065578016127815921815005561868836468420090470\n23053081172816430487623791969842487255036638784583\n11487696932154902810424020138335124462181441773470\n63783299490636259666498587618221225225512486764533\n67720186971698544312419572409913959008952310058822\n95548255300263520781532296796249481641953868218774\n76085327132285723110424803456124867697064507995236\n37774242535411291684276865538926205024910326572967\n23701913275725675285653248258265463092207058596522\n29798860272258331913126375147341994889534765745501\n18495701454879288984856827726077713721403798879715\n38298203783031473527721580348144513491373226651381\n34829543829199918180278916522431027392251122869539\n40957953066405232632538044100059654939159879593635\n29746152185502371307642255121183693803580388584903\n41698116222072977186158236678424689157993532961922\n62467957194401269043877107275048102390895523597457\n23189706772547915061505504953922979530901129967519\n86188088225875314529584099251203829009407770775672\n11306739708304724483816533873502340845647058077308\n82959174767140363198008187129011875491310547126581\n97623331044818386269515456334926366572897563400500\n42846280183517070527831839425882145521227251250327\n55121603546981200581762165212827652751691296897789\n32238195734329339946437501907836945765883352399886\n75506164965184775180738168837861091527357929701337\n62177842752192623401942399639168044983993173312731\n32924185707147349566916674687634660915035914677504\n99518671430235219628894890102423325116913619626622\n73267460800591547471830798392868535206946944540724\n76841822524674417161514036427982273348055556214818\n97142617910342598647204516893989422179826088076852\n87783646182799346313767754307809363333018982642090\n10848802521674670883215120185883543223812876952786\n71329612474782464538636993009049310363619763878039\n62184073572399794223406235393808339651327408011116\n66627891981488087797941876876144230030984490851411\n60661826293682836764744779239180335110989069790714\n85786944089552990653640447425576083659976645795096\n66024396409905389607120198219976047599490197230297\n64913982680032973156037120041377903785566085089252\n16730939319872750275468906903707539413042652315011\n94809377245048795150954100921645863754710598436791\n78639167021187492431995700641917969777599028300699\n15368713711936614952811305876380278410754449733078\n40789923115535562561142322423255033685442488917353\n44889911501440648020369068063960672322193204149535\n41503128880339536053299340368006977710650566631954\n81234880673210146739058568557934581403627822703280\n82616570773948327592232845941706525094512325230608\n22918802058777319719839450180888072429661980811197\n77158542502016545090413245809786882778948721859617\n72107838435069186155435662884062257473692284509516\n20849603980134001723930671666823555245252804609722\n53503534226472524250874054075591789781264330331690\n"
  },
  {
    "path": "project_euler/problem_013/sol1.py",
    "content": "\"\"\"\nProblem 13: https://projecteuler.net/problem=13\n\nProblem Statement:\nWork out the first ten digits of the sum of the following one-hundred 50-digit\nnumbers.\n\"\"\"\n\nimport os\n\n\ndef solution():\n    \"\"\"\n    Returns the first ten digits of the sum of the array elements\n    from the file num.txt\n\n    >>> solution()\n    '5537376230'\n    \"\"\"\n    file_path = os.path.join(os.path.dirname(__file__), \"num.txt\")\n    with open(file_path) as file_hand:\n        return str(sum(int(line) for line in file_hand))[:10]\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_014/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_014/sol1.py",
    "content": "\"\"\"\nProblem 14: https://projecteuler.net/problem=14\n\nProblem Statement:\nThe following iterative sequence is defined for the set of positive integers:\n\n    n → n/2 (n is even)\n    n → 3n + 1 (n is odd)\n\nUsing the rule above and starting with 13, we generate the following sequence:\n\n    13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1\n\nIt can be seen that this sequence (starting at 13 and finishing at 1) contains\n10 terms. Although it has not been proved yet (Collatz Problem), it is thought\nthat all starting numbers finish at 1.\n\nWhich starting number, under one million, produces the longest chain?\n\"\"\"\n\n\ndef solution(n: int = 1000000) -> int:\n    \"\"\"Returns the number under n that generates the longest sequence using the\n    formula:\n    n → n/2 (n is even)\n    n → 3n + 1 (n is odd)\n\n    >>> solution(1000000)\n    837799\n    >>> solution(200)\n    171\n    >>> solution(5000)\n    3711\n    >>> solution(15000)\n    13255\n    \"\"\"\n    largest_number = 1\n    pre_counter = 1\n    counters = {1: 1}\n\n    for input1 in range(2, n):\n        counter = 0\n        number = input1\n\n        while True:\n            if number in counters:\n                counter += counters[number]\n                break\n            if number % 2 == 0:\n                number //= 2\n                counter += 1\n            else:\n                number = (3 * number) + 1\n                counter += 1\n\n        if input1 not in counters:\n            counters[input1] = counter\n\n        if counter > pre_counter:\n            largest_number = input1\n            pre_counter = counter\n    return largest_number\n\n\nif __name__ == \"__main__\":\n    print(solution(int(input().strip())))\n"
  },
  {
    "path": "project_euler/problem_014/sol2.py",
    "content": "\"\"\"\nProblem 14: https://projecteuler.net/problem=14\n\nCollatz conjecture: start with any positive integer n. Next term obtained from\nthe previous term as follows:\n\nIf the previous term is even, the next term is one half the previous term.\nIf the previous term is odd, the next term is 3 times the previous term plus 1.\nThe conjecture states the sequence will always reach 1 regardless of starting\nn.\n\nProblem Statement:\nThe following iterative sequence is defined for the set of positive integers:\n\n    n → n/2 (n is even)\n    n → 3n + 1 (n is odd)\n\nUsing the rule above and starting with 13, we generate the following sequence:\n\n    13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1\n\nIt can be seen that this sequence (starting at 13 and finishing at 1) contains\n10 terms. Although it has not been proved yet (Collatz Problem), it is thought\nthat all starting numbers finish at 1.\n\nWhich starting number, under one million, produces the longest chain?\n\"\"\"\n\nfrom __future__ import annotations\n\nCOLLATZ_SEQUENCE_LENGTHS = {1: 1}\n\n\ndef collatz_sequence_length(n: int) -> int:\n    \"\"\"Returns the Collatz sequence length for n.\"\"\"\n    if n in COLLATZ_SEQUENCE_LENGTHS:\n        return COLLATZ_SEQUENCE_LENGTHS[n]\n    next_n = n // 2 if n % 2 == 0 else 3 * n + 1\n    sequence_length = collatz_sequence_length(next_n) + 1\n    COLLATZ_SEQUENCE_LENGTHS[n] = sequence_length\n    return sequence_length\n\n\ndef solution(n: int = 1000000) -> int:\n    \"\"\"Returns the number under n that generates the longest Collatz sequence.\n\n    >>> solution(1000000)\n    837799\n    >>> solution(200)\n    171\n    >>> solution(5000)\n    3711\n    >>> solution(15000)\n    13255\n    \"\"\"\n\n    result = max((collatz_sequence_length(i), i) for i in range(1, n))\n    return result[1]\n\n\nif __name__ == \"__main__\":\n    print(solution(int(input().strip())))\n"
  },
  {
    "path": "project_euler/problem_015/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_015/sol1.py",
    "content": "\"\"\"\nProblem 15: https://projecteuler.net/problem=15\n\nStarting in the top left corner of a 2x2 grid, and only being able to move to\nthe right and down, there are exactly 6 routes to the bottom right corner.\nHow many such routes are there through a 20x20 grid?\n\"\"\"\n\nfrom math import factorial\n\n\ndef solution(n: int = 20) -> int:\n    \"\"\"\n    Returns the number of paths possible in a n x n grid starting at top left\n    corner going to bottom right corner and being able to move right and down\n    only.\n    >>> solution(25)\n    126410606437752\n    >>> solution(23)\n    8233430727600\n    >>> solution(20)\n    137846528820\n    >>> solution(15)\n    155117520\n    >>> solution(1)\n    2\n    \"\"\"\n    n = 2 * n  # middle entry of odd rows starting at row 3 is the solution for n = 1,\n    # 2, 3,...\n    k = n // 2\n\n    return int(factorial(n) / (factorial(k) * factorial(n - k)))\n\n\nif __name__ == \"__main__\":\n    import sys\n\n    if len(sys.argv) == 1:\n        print(solution(20))\n    else:\n        try:\n            n = int(sys.argv[1])\n            print(solution(n))\n        except ValueError:\n            print(\"Invalid entry - please enter a number.\")\n"
  },
  {
    "path": "project_euler/problem_015/sol2.py",
    "content": "\"\"\"\nProblem 15: https://projecteuler.net/problem=15\n\nStarting in the top left corner of a 2x2 grid, and only being able to move to\nthe right and down, there are exactly 6 routes to the bottom right corner.\nHow many such routes are there through a 20x20 grid?\n\"\"\"\n\n\ndef solution(n: int = 20) -> int:\n    \"\"\"\n    Solve by explicitly counting the paths with dynamic programming.\n\n    >>> solution(6)\n    924\n    >>> solution(2)\n    6\n    >>> solution(1)\n    2\n    \"\"\"\n\n    counts = [[1 for _ in range(n + 1)] for _ in range(n + 1)]\n\n    for i in range(1, n + 1):\n        for j in range(1, n + 1):\n            counts[i][j] = counts[i - 1][j] + counts[i][j - 1]\n\n    return counts[n][n]\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_016/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_016/sol1.py",
    "content": "\"\"\"\nProblem 16: https://projecteuler.net/problem=16\n\n2^15 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26.\n\nWhat is the sum of the digits of the number 2^1000?\n\"\"\"\n\n\ndef solution(power: int = 1000) -> int:\n    \"\"\"Returns the sum of the digits of the number 2^power.\n    >>> solution(1000)\n    1366\n    >>> solution(50)\n    76\n    >>> solution(20)\n    31\n    >>> solution(15)\n    26\n    \"\"\"\n    num = 2**power\n    string_num = str(num)\n    list_num = list(string_num)\n    sum_of_num = 0\n\n    for i in list_num:\n        sum_of_num += int(i)\n\n    return sum_of_num\n\n\nif __name__ == \"__main__\":\n    power = int(input(\"Enter the power of 2: \").strip())\n    print(\"2 ^ \", power, \" = \", 2**power)\n    result = solution(power)\n    print(\"Sum of the digits is: \", result)\n"
  },
  {
    "path": "project_euler/problem_016/sol2.py",
    "content": "\"\"\"\nProblem 16: https://projecteuler.net/problem=16\n\n2^15 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26.\n\nWhat is the sum of the digits of the number 2^1000?\n\"\"\"\n\n\ndef solution(power: int = 1000) -> int:\n    \"\"\"Returns the sum of the digits of the number 2^power.\n\n    >>> solution(1000)\n    1366\n    >>> solution(50)\n    76\n    >>> solution(20)\n    31\n    >>> solution(15)\n    26\n    \"\"\"\n    n = 2**power\n    r = 0\n    while n:\n        r, n = r + n % 10, n // 10\n    return r\n\n\nif __name__ == \"__main__\":\n    print(solution(int(str(input()).strip())))\n"
  },
  {
    "path": "project_euler/problem_017/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_017/sol1.py",
    "content": "\"\"\"\nNumber letter counts\nProblem 17: https://projecteuler.net/problem=17\n\nIf the numbers 1 to 5 are written out in words: one, two, three, four, five,\nthen there are 3 + 3 + 5 + 4 + 4 = 19 letters used in total.\n\nIf all the numbers from 1 to 1000 (one thousand) inclusive were written out in\nwords, how many letters would be used?\n\n\nNOTE: Do not count spaces or hyphens. For example, 342 (three hundred and\nforty-two) contains 23 letters and 115 (one hundred and fifteen) contains 20\nletters. The use of \"and\" when writing out numbers is in compliance withBritish\nusage.\n\"\"\"\n\n\ndef solution(n: int = 1000) -> int:\n    \"\"\"Returns the number of letters used to write all numbers from 1 to n.\n    where n is lower or equals to 1000.\n    >>> solution(1000)\n    21124\n    >>> solution(5)\n    19\n    \"\"\"\n    # number of letters in zero, one, two, ..., nineteen (0 for zero since it's\n    # never said aloud)\n    ones_counts = [0, 3, 3, 5, 4, 4, 3, 5, 5, 4, 3, 6, 6, 8, 8, 7, 7, 9, 8, 8]\n    # number of letters in twenty, thirty, ..., ninety (0 for numbers less than\n    # 20 due to inconsistency in teens)\n    tens_counts = [0, 0, 6, 6, 5, 5, 5, 7, 6, 6]\n\n    count = 0\n\n    for i in range(1, n + 1):\n        if i < 1000:\n            if i >= 100:\n                # add number of letters for \"n hundred\"\n                count += ones_counts[i // 100] + 7\n\n                if i % 100 != 0:\n                    # add number of letters for \"and\" if number is not multiple\n                    # of 100\n                    count += 3\n\n            if 0 < i % 100 < 20:\n                # add number of letters for one, two, three, ..., nineteen\n                # (could be combined with below if not for inconsistency in\n                # teens)\n                count += ones_counts[i % 100]\n            else:\n                # add number of letters for twenty, twenty one, ..., ninety\n                # nine\n                count += ones_counts[i % 10]\n                count += tens_counts[(i % 100 - i % 10) // 10]\n        else:\n            count += ones_counts[i // 1000] + 8\n    return count\n\n\nif __name__ == \"__main__\":\n    print(solution(int(input().strip())))\n"
  },
  {
    "path": "project_euler/problem_018/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_018/solution.py",
    "content": "\"\"\"\nBy starting at the top of the triangle below and moving to adjacent numbers on\nthe row below, the maximum total from top to bottom is 23.\n\n3\n7 4\n2 4 6\n8 5 9 3\n\nThat is, 3 + 7 + 4 + 9 = 23.\n\nFind the maximum total from top to bottom of the triangle below:\n\n75\n95 64\n17 47 82\n18 35 87 10\n20 04 82 47 65\n19 01 23 75 03 34\n88 02 77 73 07 63 67\n99 65 04 28 06 16 70 92\n41 41 26 56 83 40 80 70 33\n41 48 72 33 47 32 37 16 94 29\n53 71 44 65 25 43 91 52 97 51 14\n70 11 33 28 77 73 17 78 39 68 17 57\n91 71 52 38 17 14 91 43 58 50 27 29 48\n63 66 04 68 89 53 67 30 73 16 69 87 40 31\n04 62 98 27 23 09 70 98 73 93 38 53 60 04 23\n\"\"\"\n\nimport os\n\n\ndef solution():\n    \"\"\"\n    Finds the maximum total in a triangle as described by the problem statement\n    above.\n\n    >>> solution()\n    1074\n    \"\"\"\n    script_dir = os.path.dirname(os.path.realpath(__file__))\n    triangle = os.path.join(script_dir, \"triangle.txt\")\n\n    with open(triangle) as f:\n        triangle = f.readlines()\n\n    a = [[int(y) for y in x.rstrip(\"\\r\\n\").split(\" \")] for x in triangle]\n\n    for i in range(1, len(a)):\n        for j in range(len(a[i])):\n            number1 = a[i - 1][j] if j != len(a[i - 1]) else 0\n            number2 = a[i - 1][j - 1] if j > 0 else 0\n            a[i][j] += max(number1, number2)\n    return max(a[-1])\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_018/triangle.txt",
    "content": "75\n95 64\n17 47 82\n18 35 87 10\n20 04 82 47 65\n19 01 23 75 03 34\n88 02 77 73 07 63 67\n99 65 04 28 06 16 70 92\n41 41 26 56 83 40 80 70 33\n41 48 72 33 47 32 37 16 94 29\n53 71 44 65 25 43 91 52 97 51 14\n70 11 33 28 77 73 17 78 39 68 17 57\n91 71 52 38 17 14 91 43 58 50 27 29 48\n63 66 04 68 89 53 67 30 73 16 69 87 40 31\n04 62 98 27 23 09 70 98 73 93 38 53 60 04 23\n"
  },
  {
    "path": "project_euler/problem_019/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_019/sol1.py",
    "content": "\"\"\"\nCounting Sundays\nProblem 19\n\nYou are given the following information, but you may prefer to do some research\nfor yourself.\n\n1 Jan 1900 was a Monday.\nThirty days has September,\nApril, June and November.\nAll the rest have thirty-one,\nSaving February alone,\nWhich has twenty-eight, rain or shine.\nAnd on leap years, twenty-nine.\n\nA leap year occurs on any year evenly divisible by 4, but not on a century\nunless it is divisible by 400.\n\nHow many Sundays fell on the first of the month during the twentieth century\n(1 Jan 1901 to 31 Dec 2000)?\n\"\"\"\n\n\ndef solution():\n    \"\"\"Returns the number of mondays that fall on the first of the month during\n    the twentieth century (1 Jan 1901 to 31 Dec 2000)?\n\n    >>> solution()\n    171\n    \"\"\"\n    days_per_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]\n\n    day = 6\n    month = 1\n    year = 1901\n\n    sundays = 0\n\n    while year < 2001:\n        day += 7\n\n        if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):\n            if day > days_per_month[month - 1] and month != 2:\n                month += 1\n                day = day - days_per_month[month - 2]\n            elif day > 29 and month == 2:\n                month += 1\n                day = day - 29\n        elif day > days_per_month[month - 1]:\n            month += 1\n            day = day - days_per_month[month - 2]\n\n        if month > 12:\n            year += 1\n            month = 1\n\n        if year < 2001 and day == 1:\n            sundays += 1\n    return sundays\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_020/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_020/sol1.py",
    "content": "\"\"\"\nProblem 20: https://projecteuler.net/problem=20\n\nn! means n x (n - 1) x ... x 3 x 2 x 1\n\nFor example, 10! = 10 x 9 x ... x 3 x 2 x 1 = 3628800,\nand the sum of the digits in the number 10! is 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27.\n\nFind the sum of the digits in the number 100!\n\"\"\"\n\n\ndef factorial(num: int) -> int:\n    \"\"\"Find the factorial of a given number n\"\"\"\n    fact = 1\n    for i in range(1, num + 1):\n        fact *= i\n    return fact\n\n\ndef split_and_add(number: int) -> int:\n    \"\"\"Split number digits and add them.\"\"\"\n    sum_of_digits = 0\n    while number > 0:\n        last_digit = number % 10\n        sum_of_digits += last_digit\n        number = number // 10  # Removing the last_digit from the given number\n    return sum_of_digits\n\n\ndef solution(num: int = 100) -> int:\n    \"\"\"Returns the sum of the digits in the factorial of num\n    >>> solution(100)\n    648\n    >>> solution(50)\n    216\n    >>> solution(10)\n    27\n    >>> solution(5)\n    3\n    >>> solution(3)\n    6\n    >>> solution(2)\n    2\n    >>> solution(1)\n    1\n    \"\"\"\n    nfact = factorial(num)\n    result = split_and_add(nfact)\n    return result\n\n\nif __name__ == \"__main__\":\n    print(solution(int(input(\"Enter the Number: \").strip())))\n"
  },
  {
    "path": "project_euler/problem_020/sol2.py",
    "content": "\"\"\"\nProblem 20: https://projecteuler.net/problem=20\n\nn! means n x (n - 1) x ... x 3 x 2 x 1\n\nFor example, 10! = 10 x 9 x ... x 3 x 2 x 1 = 3628800,\nand the sum of the digits in the number 10! is 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27.\n\nFind the sum of the digits in the number 100!\n\"\"\"\n\nfrom math import factorial\n\n\ndef solution(num: int = 100) -> int:\n    \"\"\"Returns the sum of the digits in the factorial of num\n    >>> solution(100)\n    648\n    >>> solution(50)\n    216\n    >>> solution(10)\n    27\n    >>> solution(5)\n    3\n    >>> solution(3)\n    6\n    >>> solution(2)\n    2\n    >>> solution(1)\n    1\n    \"\"\"\n    return sum(int(x) for x in str(factorial(num)))\n\n\nif __name__ == \"__main__\":\n    print(solution(int(input(\"Enter the Number: \").strip())))\n"
  },
  {
    "path": "project_euler/problem_020/sol3.py",
    "content": "\"\"\"\nProblem 20: https://projecteuler.net/problem=20\n\nn! means n x (n - 1) x ... x 3 x 2 x 1\n\nFor example, 10! = 10 x 9 x ... x 3 x 2 x 1 = 3628800,\nand the sum of the digits in the number 10! is 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27.\n\nFind the sum of the digits in the number 100!\n\"\"\"\n\nfrom math import factorial\n\n\ndef solution(num: int = 100) -> int:\n    \"\"\"Returns the sum of the digits in the factorial of num\n    >>> solution(1000)\n    10539\n    >>> solution(200)\n    1404\n    >>> solution(100)\n    648\n    >>> solution(50)\n    216\n    >>> solution(10)\n    27\n    >>> solution(5)\n    3\n    >>> solution(3)\n    6\n    >>> solution(2)\n    2\n    >>> solution(1)\n    1\n    >>> solution(0)\n    1\n    \"\"\"\n    return sum(map(int, str(factorial(num))))\n\n\nif __name__ == \"__main__\":\n    print(solution(int(input(\"Enter the Number: \").strip())))\n"
  },
  {
    "path": "project_euler/problem_020/sol4.py",
    "content": "\"\"\"\nProblem 20: https://projecteuler.net/problem=20\n\nn! means n x (n - 1) x ... x 3 x 2 x 1\n\nFor example, 10! = 10 x 9 x ... x 3 x 2 x 1 = 3628800,\nand the sum of the digits in the number 10! is 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27.\n\nFind the sum of the digits in the number 100!\n\"\"\"\n\n\ndef solution(num: int = 100) -> int:\n    \"\"\"Returns the sum of the digits in the factorial of num\n    >>> solution(100)\n    648\n    >>> solution(50)\n    216\n    >>> solution(10)\n    27\n    >>> solution(5)\n    3\n    >>> solution(3)\n    6\n    >>> solution(2)\n    2\n    >>> solution(1)\n    1\n    \"\"\"\n    fact = 1\n    result = 0\n    for i in range(1, num + 1):\n        fact *= i\n\n    for j in str(fact):\n        result += int(j)\n\n    return result\n\n\nif __name__ == \"__main__\":\n    print(solution(int(input(\"Enter the Number: \").strip())))\n"
  },
  {
    "path": "project_euler/problem_021/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_021/sol1.py",
    "content": "\"\"\"\nAmicable Numbers\nProblem 21\n\nLet d(n) be defined as the sum of proper divisors of n (numbers less than n\nwhich divide evenly into n).\nIf d(a) = b and d(b) = a, where a ≠ b, then a and b are an amicable pair and\neach of a and b are called amicable numbers.\n\nFor example, the proper divisors of 220 are 1, 2, 4, 5, 10, 11, 20, 22, 44, 55\nand 110; therefore d(220) = 284. The proper divisors of 284 are 1, 2, 4, 71 and\n142; so d(284) = 220.\n\nEvaluate the sum of all the amicable numbers under 10000.\n\"\"\"\n\nfrom math import sqrt\n\n\ndef sum_of_divisors(n: int) -> int:\n    total = 0\n    for i in range(1, int(sqrt(n) + 1)):\n        if n % i == 0 and i != sqrt(n):\n            total += i + n // i\n        elif i == sqrt(n):\n            total += i\n    return total - n\n\n\ndef solution(n: int = 10000) -> int:\n    \"\"\"Returns the sum of all the amicable numbers under n.\n\n    >>> solution(10000)\n    31626\n    >>> solution(5000)\n    8442\n    >>> solution(1000)\n    504\n    >>> solution(100)\n    0\n    >>> solution(50)\n    0\n    \"\"\"\n    total = sum(\n        i\n        for i in range(1, n)\n        if sum_of_divisors(sum_of_divisors(i)) == i and sum_of_divisors(i) != i\n    )\n    return total\n\n\nif __name__ == \"__main__\":\n    print(solution(int(str(input()).strip())))\n"
  },
  {
    "path": "project_euler/problem_022/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_022/p022_names.txt",
    "content": "\"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\""
  },
  {
    "path": "project_euler/problem_022/sol1.py",
    "content": "\"\"\"\nName scores\nProblem 22\n\nUsing names.txt (right click and 'Save Link/Target As...'), a 46K text file\ncontaining over five-thousand first names, begin by sorting it into\nalphabetical order. Then working out the alphabetical value for each name,\nmultiply this value by its alphabetical position in the list to obtain a name\nscore.\n\nFor example, when the list is sorted into alphabetical order, COLIN, which is\nworth 3 + 15 + 12 + 9 + 14 = 53, is the 938th name in the list. So, COLIN would\nobtain a score of 938 x 53 = 49714.\n\nWhat is the total of all the name scores in the file?\n\"\"\"\n\nimport os\n\n\ndef solution():\n    \"\"\"Returns the total of all the name scores in the file.\n\n    >>> solution()\n    871198282\n    \"\"\"\n    with open(os.path.dirname(__file__) + \"/p022_names.txt\") as file:\n        names = str(file.readlines()[0])\n        names = names.replace('\"', \"\").split(\",\")\n\n    names.sort()\n\n    name_score = 0\n    total_score = 0\n\n    for i, name in enumerate(names):\n        for letter in name:\n            name_score += ord(letter) - 64\n\n        total_score += (i + 1) * name_score\n        name_score = 0\n    return total_score\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_022/sol2.py",
    "content": "\"\"\"\nName scores\nProblem 22\n\nUsing names.txt (right click and 'Save Link/Target As...'), a 46K text file\ncontaining over five-thousand first names, begin by sorting it into\nalphabetical order. Then working out the alphabetical value for each name,\nmultiply this value by its alphabetical position in the list to obtain a name\nscore.\n\nFor example, when the list is sorted into alphabetical order, COLIN, which is\nworth 3 + 15 + 12 + 9 + 14 = 53, is the 938th name in the list. So, COLIN would\nobtain a score of 938 x 53 = 49714.\n\nWhat is the total of all the name scores in the file?\n\"\"\"\n\nimport os\n\n\ndef solution():\n    \"\"\"Returns the total of all the name scores in the file.\n\n    >>> solution()\n    871198282\n    \"\"\"\n    total_sum = 0\n    temp_sum = 0\n    with open(os.path.dirname(__file__) + \"/p022_names.txt\") as file:\n        name = str(file.readlines()[0])\n        name = name.replace('\"', \"\").split(\",\")\n\n    name.sort()\n    for i in range(len(name)):\n        for j in name[i]:\n            temp_sum += ord(j) - ord(\"A\") + 1\n        total_sum += (i + 1) * temp_sum\n        temp_sum = 0\n    return total_sum\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_023/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_023/sol1.py",
    "content": "\"\"\"\nA perfect number is a number for which the sum of its proper divisors is exactly\nequal to the number. For example, the sum of the proper divisors of 28 would be\n1 + 2 + 4 + 7 + 14 = 28, which means that 28 is a perfect number.\n\nA number n is called deficient if the sum of its proper divisors is less than n\nand it is called abundant if this sum exceeds n.\n\nAs 12 is the smallest abundant number, 1 + 2 + 3 + 4 + 6 = 16, the smallest\nnumber that can be written as the sum of two abundant numbers is 24. By\nmathematical analysis, it can be shown that all integers greater than 28123\ncan be written as the sum of two abundant numbers. However, this upper limit\ncannot be reduced any further by analysis even though it is known that the\ngreatest number that cannot be expressed as the sum of two abundant numbers\nis less than this limit.\n\nFind the sum of all the positive integers which cannot be written as the sum\nof two abundant numbers.\n\"\"\"\n\n\ndef solution(limit=28123):\n    \"\"\"\n    Finds the sum of all the positive integers which cannot be written as\n    the sum of two abundant numbers\n    as described by the statement above.\n\n    >>> solution()\n    4179871\n    \"\"\"\n    sum_divs = [1] * (limit + 1)\n\n    for i in range(2, int(limit**0.5) + 1):\n        sum_divs[i * i] += i\n        for k in range(i + 1, limit // i + 1):\n            sum_divs[k * i] += k + i\n\n    abundants = set()\n    res = 0\n\n    for n in range(1, limit + 1):\n        if sum_divs[n] > n:\n            abundants.add(n)\n\n        if not any((n - a in abundants) for a in abundants):\n            res += n\n\n    return res\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_024/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_024/sol1.py",
    "content": "\"\"\"\nA permutation is an ordered arrangement of objects. For example, 3124 is one\npossible permutation of the digits 1, 2, 3 and 4. If all of the permutations\nare listed numerically or alphabetically, we call it lexicographic order. The\nlexicographic permutations of 0, 1 and 2 are:\n\n    012   021   102   120   201   210\n\nWhat is the millionth lexicographic permutation of the digits 0, 1, 2, 3, 4, 5,\n6, 7, 8 and 9?\n\"\"\"\n\nfrom itertools import permutations\n\n\ndef solution():\n    \"\"\"Returns the millionth lexicographic permutation of the digits 0, 1, 2,\n    3, 4, 5, 6, 7, 8 and 9.\n\n    >>> solution()\n    '2783915460'\n    \"\"\"\n    result = list(map(\"\".join, permutations(\"0123456789\")))\n    return result[999999]\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_025/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_025/sol1.py",
    "content": "\"\"\"\nThe Fibonacci sequence is defined by the recurrence relation:\n\n    Fn = Fn-1 + Fn-2, where F1 = 1 and F2 = 1.\n\nHence the first 12 terms will be:\n\n    F1 = 1\n    F2 = 1\n    F3 = 2\n    F4 = 3\n    F5 = 5\n    F6 = 8\n    F7 = 13\n    F8 = 21\n    F9 = 34\n    F10 = 55\n    F11 = 89\n    F12 = 144\n\nThe 12th term, F12, is the first term to contain three digits.\n\nWhat is the index of the first term in the Fibonacci sequence to contain 1000\ndigits?\n\"\"\"\n\n\ndef fibonacci(n: int) -> int:\n    \"\"\"\n    Computes the Fibonacci number for input n by iterating through n numbers\n    and creating an array of ints using the Fibonacci formula.\n    Returns the nth element of the array.\n\n    >>> fibonacci(2)\n    1\n    >>> fibonacci(3)\n    2\n    >>> fibonacci(5)\n    5\n    >>> fibonacci(10)\n    55\n    >>> fibonacci(12)\n    144\n\n    \"\"\"\n    if n == 1 or not isinstance(n, int):\n        return 0\n    elif n == 2:\n        return 1\n    else:\n        sequence = [0, 1]\n        for i in range(2, n + 1):\n            sequence.append(sequence[i - 1] + sequence[i - 2])\n\n        return sequence[n]\n\n\ndef fibonacci_digits_index(n: int) -> int:\n    \"\"\"\n    Computes incrementing Fibonacci numbers starting from 3 until the length\n    of the resulting Fibonacci result is the input value n. Returns the term\n    of the Fibonacci sequence where this occurs.\n\n    >>> fibonacci_digits_index(1000)\n    4782\n    >>> fibonacci_digits_index(100)\n    476\n    >>> fibonacci_digits_index(50)\n    237\n    >>> fibonacci_digits_index(3)\n    12\n    \"\"\"\n    digits = 0\n    index = 2\n\n    while digits < n:\n        index += 1\n        digits = len(str(fibonacci(index)))\n\n    return index\n\n\ndef solution(n: int = 1000) -> int:\n    \"\"\"\n    Returns the index of the first term in the Fibonacci sequence to contain\n    n digits.\n\n    >>> solution(1000)\n    4782\n    >>> solution(100)\n    476\n    >>> solution(50)\n    237\n    >>> solution(3)\n    12\n    \"\"\"\n    return fibonacci_digits_index(n)\n\n\nif __name__ == \"__main__\":\n    print(solution(int(str(input()).strip())))\n"
  },
  {
    "path": "project_euler/problem_025/sol2.py",
    "content": "\"\"\"\nThe Fibonacci sequence is defined by the recurrence relation:\n\n    Fn = Fn-1 + Fn-2, where F1 = 1 and F2 = 1.\n\nHence the first 12 terms will be:\n\n    F1 = 1\n    F2 = 1\n    F3 = 2\n    F4 = 3\n    F5 = 5\n    F6 = 8\n    F7 = 13\n    F8 = 21\n    F9 = 34\n    F10 = 55\n    F11 = 89\n    F12 = 144\n\nThe 12th term, F12, is the first term to contain three digits.\n\nWhat is the index of the first term in the Fibonacci sequence to contain 1000\ndigits?\n\"\"\"\n\nfrom collections.abc import Generator\n\n\ndef fibonacci_generator() -> Generator[int]:\n    \"\"\"\n    A generator that produces numbers in the Fibonacci sequence\n\n    >>> generator = fibonacci_generator()\n    >>> next(generator)\n    1\n    >>> next(generator)\n    2\n    >>> next(generator)\n    3\n    >>> next(generator)\n    5\n    >>> next(generator)\n    8\n    \"\"\"\n    a, b = 0, 1\n    while True:\n        a, b = b, a + b\n        yield b\n\n\ndef solution(n: int = 1000) -> int:\n    \"\"\"Returns the index of the first term in the Fibonacci sequence to contain\n    n digits.\n\n    >>> solution(1000)\n    4782\n    >>> solution(100)\n    476\n    >>> solution(50)\n    237\n    >>> solution(3)\n    12\n    \"\"\"\n    answer = 1\n    gen = fibonacci_generator()\n    while len(str(next(gen))) < n:\n        answer += 1\n    return answer + 1\n\n\nif __name__ == \"__main__\":\n    print(solution(int(str(input()).strip())))\n"
  },
  {
    "path": "project_euler/problem_025/sol3.py",
    "content": "\"\"\"\nThe Fibonacci sequence is defined by the recurrence relation:\n\n    Fn = Fn-1 + Fn-2, where F1 = 1 and F2 = 1.\n\nHence the first 12 terms will be:\n\n    F1 = 1\n    F2 = 1\n    F3 = 2\n    F4 = 3\n    F5 = 5\n    F6 = 8\n    F7 = 13\n    F8 = 21\n    F9 = 34\n    F10 = 55\n    F11 = 89\n    F12 = 144\n\nThe 12th term, F12, is the first term to contain three digits.\n\nWhat is the index of the first term in the Fibonacci sequence to contain 1000\ndigits?\n\"\"\"\n\n\ndef solution(n: int = 1000) -> int:\n    \"\"\"Returns the index of the first term in the Fibonacci sequence to contain\n    n digits.\n\n    >>> solution(1000)\n    4782\n    >>> solution(100)\n    476\n    >>> solution(50)\n    237\n    >>> solution(3)\n    12\n    \"\"\"\n    f1, f2 = 1, 1\n    index = 2\n    while True:\n        i = 0\n        f = f1 + f2\n        f1, f2 = f2, f\n        index += 1\n        for _ in str(f):\n            i += 1\n        if i == n:\n            break\n    return index\n\n\nif __name__ == \"__main__\":\n    print(solution(int(str(input()).strip())))\n"
  },
  {
    "path": "project_euler/problem_026/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_026/sol1.py",
    "content": "\"\"\"\nEuler Problem 26\nhttps://projecteuler.net/problem=26\n\nProblem Statement:\n\nA unit fraction contains 1 in the numerator. The decimal representation of the\nunit fractions with denominators 2 to 10 are given:\n\n1/2\t= \t0.5\n1/3\t= \t0.(3)\n1/4\t= \t0.25\n1/5\t= \t0.2\n1/6\t= \t0.1(6)\n1/7\t= \t0.(142857)\n1/8\t= \t0.125\n1/9\t= \t0.(1)\n1/10\t= \t0.1\nWhere 0.1(6) means 0.166666..., and has a 1-digit recurring cycle. It can be\nseen that 1/7 has a 6-digit recurring cycle.\n\nFind the value of d < 1000 for which 1/d contains the longest recurring cycle\nin its decimal fraction part.\n\"\"\"\n\n\ndef solution(numerator: int = 1, digit: int = 1000) -> int:\n    \"\"\"\n    Considering any range can be provided,\n    because as per the problem, the digit d < 1000\n    >>> solution(1, 10)\n    7\n    >>> solution(10, 100)\n    97\n    >>> solution(10, 1000)\n    983\n    \"\"\"\n    the_digit = 1\n    longest_list_length = 0\n\n    for divide_by_number in range(numerator, digit + 1):\n        has_been_divided: list[int] = []\n        now_divide = numerator\n        for _ in range(1, digit + 1):\n            if now_divide in has_been_divided:\n                if longest_list_length < len(has_been_divided):\n                    longest_list_length = len(has_been_divided)\n                    the_digit = divide_by_number\n            else:\n                has_been_divided.append(now_divide)\n                now_divide = now_divide * 10 % divide_by_number\n\n    return the_digit\n\n\n# Tests\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "project_euler/problem_027/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_027/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 27\nhttps://projecteuler.net/problem=27\n\nProblem Statement:\n\nEuler discovered the remarkable quadratic formula:\nn2 + n + 41\nIt turns out that the formula will produce 40 primes for the consecutive values\nn = 0 to 39. However, when n = 40, 402 + 40 + 41 = 40(40 + 1) + 41 is divisible\nby 41, and certainly when n = 41, 412 + 41 + 41 is clearly divisible by 41.\nThe incredible formula  n2 - 79n + 1601 was discovered, which produces 80 primes\nfor the consecutive values n = 0 to 79. The product of the coefficients, -79 and\n1601, is -126479.\nConsidering quadratics of the form:\nn² + an + b, where |a| &lt; 1000 and |b| &lt; 1000\nwhere |n| is the modulus/absolute value of ne.g. |11| = 11 and |-4| = 4\nFind the product of the coefficients, a and b, for the quadratic expression that\nproduces the maximum number of primes for consecutive values of n, starting with\nn = 0.\n\"\"\"\n\nimport math\n\n\ndef is_prime(number: int) -> bool:\n    \"\"\"Checks to see if a number is a prime in O(sqrt(n)).\n    A number is prime if it has exactly two factors: 1 and itself.\n    Returns boolean representing primality of given number num (i.e., if the\n    result is true, then the number is indeed prime else it is not).\n\n    >>> is_prime(2)\n    True\n    >>> is_prime(3)\n    True\n    >>> is_prime(27)\n    False\n    >>> is_prime(2999)\n    True\n    >>> is_prime(0)\n    False\n    >>> is_prime(1)\n    False\n    >>> is_prime(-10)\n    False\n    \"\"\"\n\n    if 1 < number < 4:\n        # 2 and 3 are primes\n        return True\n    elif number < 2 or number % 2 == 0 or number % 3 == 0:\n        # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes\n        return False\n\n    # All primes number are in format of 6k +/- 1\n    for i in range(5, int(math.sqrt(number) + 1), 6):\n        if number % i == 0 or number % (i + 2) == 0:\n            return False\n    return True\n\n\ndef solution(a_limit: int = 1000, b_limit: int = 1000) -> int:\n    \"\"\"\n    >>> solution(1000, 1000)\n    -59231\n    >>> solution(200, 1000)\n    -59231\n    >>> solution(200, 200)\n    -4925\n    >>> solution(-1000, 1000)\n    0\n    >>> solution(-1000, -1000)\n    0\n    \"\"\"\n    longest = [0, 0, 0]  # length, a, b\n    for a in range((a_limit * -1) + 1, a_limit):\n        for b in range(2, b_limit):\n            if is_prime(b):\n                count = 0\n                n = 0\n                while is_prime((n**2) + (a * n) + b):\n                    count += 1\n                    n += 1\n                if count > longest[0]:\n                    longest = [count, a, b]\n    ans = longest[1] * longest[2]\n    return ans\n\n\nif __name__ == \"__main__\":\n    print(solution(1000, 1000))\n"
  },
  {
    "path": "project_euler/problem_028/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_028/sol1.py",
    "content": "\"\"\"\nProblem 28\nUrl: https://projecteuler.net/problem=28\nStatement:\nStarting with the number 1 and moving to the right in a clockwise direction a 5\nby 5 spiral is formed as follows:\n\n    21 22 23 24 25\n    20  7  8  9 10\n    19  6  1  2 11\n    18  5  4  3 12\n    17 16 15 14 13\n\nIt can be verified that the sum of the numbers on the diagonals is 101.\n\nWhat is the sum of the numbers on the diagonals in a 1001 by 1001 spiral formed\nin the same way?\n\"\"\"\n\nfrom math import ceil\n\n\ndef solution(n: int = 1001) -> int:\n    \"\"\"Returns the sum of the numbers on the diagonals in a n by n spiral\n    formed in the same way.\n\n    >>> solution(1001)\n    669171001\n    >>> solution(500)\n    82959497\n    >>> solution(100)\n    651897\n    >>> solution(50)\n    79697\n    >>> solution(10)\n    537\n    \"\"\"\n    total = 1\n\n    for i in range(1, ceil(n / 2.0)):\n        odd = 2 * i + 1\n        even = 2 * i\n        total = total + 4 * odd**2 - 6 * even\n\n    return total\n\n\nif __name__ == \"__main__\":\n    import sys\n\n    if len(sys.argv) == 1:\n        print(solution())\n    else:\n        try:\n            n = int(sys.argv[1])\n            print(solution(n))\n        except ValueError:\n            print(\"Invalid entry - please enter a number\")\n"
  },
  {
    "path": "project_euler/problem_029/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_029/sol1.py",
    "content": "\"\"\"\nConsider all integer combinations of ab for 2 <= a <= 5 and 2 <= b <= 5:\n\n2^2=4,  2^3=8,   2^4=16,  2^5=32\n3^2=9,  3^3=27,  3^4=81,  3^5=243\n4^2=16, 4^3=64,  4^4=256, 4^5=1024\n5^2=25, 5^3=125, 5^4=625, 5^5=3125\n\nIf they are then placed in numerical order, with any repeats removed, we get\nthe following sequence of 15 distinct terms:\n\n4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125\n\nHow many distinct terms are in the sequence generated by ab\nfor 2 <= a <= 100 and 2 <= b <= 100?\n\"\"\"\n\n\ndef solution(n: int = 100) -> int:\n    \"\"\"Returns the number of distinct terms in the sequence generated by a^b\n    for 2 <= a <= 100 and 2 <= b <= 100.\n\n    >>> solution(100)\n    9183\n    >>> solution(50)\n    2184\n    >>> solution(20)\n    324\n    >>> solution(5)\n    15\n    >>> solution(2)\n    1\n    >>> solution(1)\n    0\n    \"\"\"\n    collect_powers = set()\n\n    current_pow = 0\n\n    n = n + 1  # maximum limit\n\n    for a in range(2, n):\n        for b in range(2, n):\n            current_pow = a**b  # calculates the current power\n            collect_powers.add(current_pow)  # adds the result to the set\n    return len(collect_powers)\n\n\nif __name__ == \"__main__\":\n    print(\"Number of terms \", solution(int(str(input()).strip())))\n"
  },
  {
    "path": "project_euler/problem_030/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_030/sol1.py",
    "content": "\"\"\"Problem Statement (Digit Fifth Powers): https://projecteuler.net/problem=30\n\nSurprisingly there are only three numbers that can be written as the sum of fourth\npowers of their digits:\n\n1634 = 1^4 + 6^4 + 3^4 + 4^4\n8208 = 8^4 + 2^4 + 0^4 + 8^4\n9474 = 9^4 + 4^4 + 7^4 + 4^4\nAs 1 = 1^4 is not a sum it is not included.\n\nThe sum of these numbers is 1634 + 8208 + 9474 = 19316.\n\nFind the sum of all the numbers that can be written as the sum of fifth powers of their\ndigits.\n\n9^5 = 59049\n59049 * 7 = 413343 (which is only 6 digit number)\nSo, numbers greater than 999999 are rejected\nand also 59049 * 3 = 177147 (which exceeds the criteria of number being 3 digit)\nSo, number > 999\nand hence a number between 1000 and 1000000\n\"\"\"\n\nDIGITS_FIFTH_POWER = {str(digit): digit**5 for digit in range(10)}\n\n\ndef digits_fifth_powers_sum(number: int) -> int:\n    \"\"\"\n    >>> digits_fifth_powers_sum(1234)\n    1300\n    \"\"\"\n    return sum(DIGITS_FIFTH_POWER[digit] for digit in str(number))\n\n\ndef solution() -> int:\n    return sum(\n        number\n        for number in range(1000, 1000000)\n        if number == digits_fifth_powers_sum(number)\n    )\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_031/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_031/sol1.py",
    "content": "\"\"\"\nCoin sums\nProblem 31: https://projecteuler.net/problem=31\n\nIn England the currency is made up of pound, f, and pence, p, and there are\neight coins in general circulation:\n\n1p, 2p, 5p, 10p, 20p, 50p, f1 (100p) and f2 (200p).\nIt is possible to make f2 in the following way:\n\n1xf1 + 1x50p + 2x20p + 1x5p + 1x2p + 3x1p\nHow many different ways can f2 be made using any number of coins?\n\"\"\"\n\n\ndef one_pence() -> int:\n    return 1\n\n\ndef two_pence(x: int) -> int:\n    return 0 if x < 0 else two_pence(x - 2) + one_pence()\n\n\ndef five_pence(x: int) -> int:\n    return 0 if x < 0 else five_pence(x - 5) + two_pence(x)\n\n\ndef ten_pence(x: int) -> int:\n    return 0 if x < 0 else ten_pence(x - 10) + five_pence(x)\n\n\ndef twenty_pence(x: int) -> int:\n    return 0 if x < 0 else twenty_pence(x - 20) + ten_pence(x)\n\n\ndef fifty_pence(x: int) -> int:\n    return 0 if x < 0 else fifty_pence(x - 50) + twenty_pence(x)\n\n\ndef one_pound(x: int) -> int:\n    return 0 if x < 0 else one_pound(x - 100) + fifty_pence(x)\n\n\ndef two_pound(x: int) -> int:\n    return 0 if x < 0 else two_pound(x - 200) + one_pound(x)\n\n\ndef solution(n: int = 200) -> int:\n    \"\"\"Returns the number of different ways can n pence be made using any number of\n    coins?\n\n    >>> solution(500)\n    6295434\n    >>> solution(200)\n    73682\n    >>> solution(50)\n    451\n    >>> solution(10)\n    11\n    \"\"\"\n    return two_pound(n)\n\n\nif __name__ == \"__main__\":\n    print(solution(int(input().strip())))\n"
  },
  {
    "path": "project_euler/problem_031/sol2.py",
    "content": "\"\"\"\nProblem 31: https://projecteuler.net/problem=31\n\nCoin sums\n\nIn England the currency is made up of pound, f, and pence, p, and there are\neight coins in general circulation:\n\n1p, 2p, 5p, 10p, 20p, 50p, f1 (100p) and f2 (200p).\nIt is possible to make f2 in the following way:\n\n1xf1 + 1x50p + 2x20p + 1x5p + 1x2p + 3x1p\nHow many different ways can f2 be made using any number of coins?\n\nHint:\n    > There are 100 pence in a pound (f1 = 100p)\n    > There are coins(in pence) are available: 1, 2, 5, 10, 20, 50, 100 and 200.\n    > how many different ways you can combine these values to create 200 pence.\n\nExample:\n    to make 6p there are 5 ways\n      1,1,1,1,1,1\n      1,1,1,1,2\n      1,1,2,2\n      2,2,2\n      1,5\n    to make 5p there are 4 ways\n      1,1,1,1,1\n      1,1,1,2\n      1,2,2\n      5\n\"\"\"\n\n\ndef solution(pence: int = 200) -> int:\n    \"\"\"Returns the number of different ways to make X pence using any number of coins.\n    The solution is based on dynamic programming paradigm in a bottom-up fashion.\n\n    >>> solution(500)\n    6295434\n    >>> solution(200)\n    73682\n    >>> solution(50)\n    451\n    >>> solution(10)\n    11\n    \"\"\"\n    coins = [1, 2, 5, 10, 20, 50, 100, 200]\n    number_of_ways = [0] * (pence + 1)\n    number_of_ways[0] = 1  # base case: 1 way to make 0 pence\n\n    for coin in coins:\n        for i in range(coin, pence + 1, 1):\n            number_of_ways[i] += number_of_ways[i - coin]\n    return number_of_ways[pence]\n\n\nif __name__ == \"__main__\":\n    assert solution(200) == 73682\n"
  },
  {
    "path": "project_euler/problem_032/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_032/sol32.py",
    "content": "\"\"\"\nWe shall say that an n-digit number is pandigital if it makes use of all the\ndigits 1 to n exactly once; for example, the 5-digit number, 15234, is 1 through\n5 pandigital.\n\nThe product 7254 is unusual, as the identity, 39 x 186 = 7254, containing\nmultiplicand, multiplier, and product is 1 through 9 pandigital.\n\nFind the sum of all products whose multiplicand/multiplier/product identity can\nbe written as a 1 through 9 pandigital.\n\nHINT: Some products can be obtained in more than one way so be sure to only\ninclude it once in your sum.\n\"\"\"\n\nimport itertools\n\n\ndef is_combination_valid(combination):\n    \"\"\"\n    Checks if a combination (a tuple of 9 digits)\n    is a valid product equation.\n\n    >>> is_combination_valid(('3', '9', '1', '8', '6', '7', '2', '5', '4'))\n    True\n\n    >>> is_combination_valid(('1', '2', '3', '4', '5', '6', '7', '8', '9'))\n    False\n\n    \"\"\"\n    return (\n        int(\"\".join(combination[0:2])) * int(\"\".join(combination[2:5]))\n        == int(\"\".join(combination[5:9]))\n    ) or (\n        int(\"\".join(combination[0])) * int(\"\".join(combination[1:5]))\n        == int(\"\".join(combination[5:9]))\n    )\n\n\ndef solution():\n    \"\"\"\n    Finds the sum of all products whose multiplicand/multiplier/product identity\n    can be written as a 1 through 9 pandigital\n\n    >>> solution()\n    45228\n    \"\"\"\n\n    return sum(\n        {\n            int(\"\".join(pandigital[5:9]))\n            for pandigital in itertools.permutations(\"123456789\")\n            if is_combination_valid(pandigital)\n        }\n    )\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_033/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_033/sol1.py",
    "content": "\"\"\"\nProblem 33: https://projecteuler.net/problem=33\n\nThe fraction 49/98 is a curious fraction, as an inexperienced\nmathematician in attempting to simplify it may incorrectly believe\nthat 49/98 = 4/8, which is correct, is obtained by cancelling the 9s.\n\nWe shall consider fractions like, 30/50 = 3/5, to be trivial examples.\n\nThere are exactly four non-trivial examples of this type of fraction,\nless than one in value, and containing two digits in the numerator\nand denominator.\n\nIf the product of these four fractions is given in its lowest common\nterms, find the value of the denominator.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom fractions import Fraction\n\n\ndef is_digit_cancelling(num: int, den: int) -> bool:\n    return (\n        num != den and num % 10 == den // 10 and (num // 10) / (den % 10) == num / den\n    )\n\n\ndef fraction_list(digit_len: int) -> list[str]:\n    \"\"\"\n    >>> fraction_list(2)\n    ['16/64', '19/95', '26/65', '49/98']\n    >>> fraction_list(3)\n    ['16/64', '19/95', '26/65', '49/98']\n    >>> fraction_list(4)\n    ['16/64', '19/95', '26/65', '49/98']\n    >>> fraction_list(0)\n    []\n    >>> fraction_list(5)\n    ['16/64', '19/95', '26/65', '49/98']\n    \"\"\"\n    solutions = []\n    den = 11\n    last_digit = int(\"1\" + \"0\" * digit_len)\n    for num in range(den, last_digit):\n        while den <= 99:\n            if (\n                (num != den)\n                and (num % 10 == den // 10)\n                and (den % 10 != 0)\n                and is_digit_cancelling(num, den)\n            ):\n                solutions.append(f\"{num}/{den}\")\n            den += 1\n        num += 1\n        den = 10\n    return solutions\n\n\ndef solution(n: int = 2) -> int:\n    \"\"\"\n    Return the solution to the problem\n    \"\"\"\n    result = 1.0\n    for fraction in fraction_list(n):\n        frac = Fraction(fraction)\n        result *= frac.denominator / frac.numerator\n    return int(result)\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_034/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_034/sol1.py",
    "content": "\"\"\"\r\nProblem 34: https://projecteuler.net/problem=34\r\n\r\n145 is a curious number, as 1! + 4! + 5! = 1 + 24 + 120 = 145.\r\nFind the sum of all numbers which are equal to the sum of the factorial of their digits.\r\nNote: As 1! = 1 and 2! = 2 are not sums they are not included.\r\n\"\"\"\r\n\r\nfrom math import factorial\r\n\r\nDIGIT_FACTORIAL = {str(d): factorial(d) for d in range(10)}\r\n\r\n\r\ndef sum_of_digit_factorial(n: int) -> int:\r\n    \"\"\"\r\n    Returns the sum of the factorial of digits in n\r\n    >>> sum_of_digit_factorial(15)\r\n    121\r\n    >>> sum_of_digit_factorial(0)\r\n    1\r\n    \"\"\"\r\n    return sum(DIGIT_FACTORIAL[d] for d in str(n))\r\n\r\n\r\ndef solution() -> int:\r\n    \"\"\"\r\n    Returns the sum of all numbers whose\r\n    sum of the factorials of all digits\r\n    add up to the number itself.\r\n    >>> solution()\r\n    40730\r\n    \"\"\"\r\n    limit = 7 * factorial(9) + 1\r\n    return sum(i for i in range(3, limit) if sum_of_digit_factorial(i) == i)\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    print(f\"{solution() = }\")\r\n"
  },
  {
    "path": "project_euler/problem_035/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_035/sol1.py",
    "content": "\"\"\"\r\nProject Euler Problem 35\r\nhttps://projecteuler.net/problem=35\r\n\r\nProblem Statement:\r\n\r\nThe number 197 is called a circular prime because all rotations of the digits:\r\n197, 971, and 719, are themselves prime.\r\nThere are thirteen such primes below 100: 2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73,\r\n79, and 97.\r\nHow many circular primes are there below one million?\r\n\r\nTo solve this problem in an efficient manner, we will first mark all the primes\r\nbelow 1 million using the Sieve of Eratosthenes. Then, out of all these primes,\r\nwe will rule out the numbers which contain an even digit. After this we will\r\ngenerate each circular combination of the number and check if all are prime.\r\n\"\"\"\r\n\r\nfrom __future__ import annotations\r\n\r\nsieve = [True] * 1000001\r\ni = 2\r\nwhile i * i <= 1000000:\r\n    if sieve[i]:\r\n        for j in range(i * i, 1000001, i):\r\n            sieve[j] = False\r\n    i += 1\r\n\r\n\r\ndef is_prime(n: int) -> bool:\r\n    \"\"\"\r\n    For 2 <= n <= 1000000, return True if n is prime.\r\n    >>> is_prime(87)\r\n    False\r\n    >>> is_prime(23)\r\n    True\r\n    >>> is_prime(25363)\r\n    False\r\n    \"\"\"\r\n    return sieve[n]\r\n\r\n\r\ndef contains_an_even_digit(n: int) -> bool:\r\n    \"\"\"\r\n    Return True if n contains an even digit.\r\n    >>> contains_an_even_digit(0)\r\n    True\r\n    >>> contains_an_even_digit(975317933)\r\n    False\r\n    >>> contains_an_even_digit(-245679)\r\n    True\r\n    \"\"\"\r\n    return any(digit in \"02468\" for digit in str(n))\r\n\r\n\r\ndef find_circular_primes(limit: int = 1000000) -> list[int]:\r\n    \"\"\"\r\n    Return circular primes below limit.\r\n    >>> len(find_circular_primes(100))\r\n    13\r\n    >>> len(find_circular_primes(1000000))\r\n    55\r\n    \"\"\"\r\n    result = [2]  # result already includes the number 2.\r\n    for num in range(3, limit + 1, 2):\r\n        if is_prime(num) and not contains_an_even_digit(num):\r\n            str_num = str(num)\r\n            list_nums = [int(str_num[j:] + str_num[:j]) for j in range(len(str_num))]\r\n            if all(is_prime(i) for i in list_nums):\r\n                result.append(num)\r\n    return result\r\n\r\n\r\ndef solution() -> int:\r\n    \"\"\"\r\n    >>> solution()\r\n    55\r\n    \"\"\"\r\n    return len(find_circular_primes())\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    print(f\"{len(find_circular_primes()) = }\")\r\n"
  },
  {
    "path": "project_euler/problem_036/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_036/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 36\nhttps://projecteuler.net/problem=36\n\nProblem Statement:\n\nDouble-base palindromes\nProblem 36\nThe decimal number, 585 = 10010010012 (binary), is palindromic in both bases.\n\nFind the sum of all numbers, less than one million, which are palindromic in\nbase 10 and base 2.\n\n(Please note that the palindromic number, in either base, may not include\nleading zeros.)\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef is_palindrome(n: int | str) -> bool:\n    \"\"\"\n    Return true if the input n is a palindrome.\n    Otherwise return false. n can be an integer or a string.\n\n    >>> is_palindrome(909)\n    True\n    >>> is_palindrome(908)\n    False\n    >>> is_palindrome('10101')\n    True\n    >>> is_palindrome('10111')\n    False\n    \"\"\"\n    n = str(n)\n    return n == n[::-1]\n\n\ndef solution(n: int = 1000000):\n    \"\"\"Return the sum of all numbers, less than n , which are palindromic in\n    base 10 and base 2.\n\n    >>> solution(1000000)\n    872187\n    >>> solution(500000)\n    286602\n    >>> solution(100000)\n    286602\n    >>> solution(1000)\n    1772\n    >>> solution(100)\n    157\n    >>> solution(10)\n    25\n    >>> solution(2)\n    1\n    >>> solution(1)\n    0\n    \"\"\"\n    total = 0\n\n    for i in range(1, n):\n        if is_palindrome(i) and is_palindrome(bin(i).split(\"b\")[1]):\n            total += i\n    return total\n\n\nif __name__ == \"__main__\":\n    print(solution(int(str(input().strip()))))\n"
  },
  {
    "path": "project_euler/problem_037/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_037/sol1.py",
    "content": "\"\"\"\r\nTruncatable primes\r\nProblem 37: https://projecteuler.net/problem=37\r\n\r\nThe number 3797 has an interesting property. Being prime itself, it is possible\r\nto continuously remove digits from left to right, and remain prime at each stage:\r\n3797, 797, 97, and 7. Similarly we can work from right to left: 3797, 379, 37, and 3.\r\n\r\nFind the sum of the only eleven primes that are both truncatable from left to right\r\nand right to left.\r\n\r\nNOTE: 2, 3, 5, and 7 are not considered to be truncatable primes.\r\n\"\"\"\r\n\r\nfrom __future__ import annotations\r\n\r\nimport math\r\n\r\n\r\ndef is_prime(number: int) -> bool:\r\n    \"\"\"Checks to see if a number is a prime in O(sqrt(n)).\r\n\r\n    A number is prime if it has exactly two factors: 1 and itself.\r\n\r\n    >>> is_prime(0)\r\n    False\r\n    >>> is_prime(1)\r\n    False\r\n    >>> is_prime(2)\r\n    True\r\n    >>> is_prime(3)\r\n    True\r\n    >>> is_prime(27)\r\n    False\r\n    >>> is_prime(87)\r\n    False\r\n    >>> is_prime(563)\r\n    True\r\n    >>> is_prime(2999)\r\n    True\r\n    >>> is_prime(67483)\r\n    False\r\n    \"\"\"\r\n\r\n    if 1 < number < 4:\r\n        # 2 and 3 are primes\r\n        return True\r\n    elif number < 2 or number % 2 == 0 or number % 3 == 0:\r\n        # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes\r\n        return False\r\n\r\n    # All primes number are in format of 6k +/- 1\r\n    for i in range(5, int(math.sqrt(number) + 1), 6):\r\n        if number % i == 0 or number % (i + 2) == 0:\r\n            return False\r\n    return True\r\n\r\n\r\ndef list_truncated_nums(n: int) -> list[int]:\r\n    \"\"\"\r\n    Returns a list of all left and right truncated numbers of n\r\n    >>> list_truncated_nums(927628)\r\n    [927628, 27628, 92762, 7628, 9276, 628, 927, 28, 92, 8, 9]\r\n    >>> list_truncated_nums(467)\r\n    [467, 67, 46, 7, 4]\r\n    >>> list_truncated_nums(58)\r\n    [58, 8, 5]\r\n    \"\"\"\r\n    str_num = str(n)\r\n    list_nums = [n]\r\n    for i in range(1, len(str_num)):\r\n        list_nums.append(int(str_num[i:]))\r\n        list_nums.append(int(str_num[:-i]))\r\n    return list_nums\r\n\r\n\r\ndef validate(n: int) -> bool:\r\n    \"\"\"\r\n    To optimize the approach, we will rule out the numbers above 1000,\r\n    whose first or last three digits are not prime\r\n    >>> validate(74679)\r\n    False\r\n    >>> validate(235693)\r\n    False\r\n    >>> validate(3797)\r\n    True\r\n    \"\"\"\r\n    return not (\r\n        len(str(n)) > 3\r\n        and (not is_prime(int(str(n)[-3:])) or not is_prime(int(str(n)[:3])))\r\n    )\r\n\r\n\r\ndef compute_truncated_primes(count: int = 11) -> list[int]:\r\n    \"\"\"\r\n    Returns the list of truncated primes\r\n    >>> compute_truncated_primes(11)\r\n    [23, 37, 53, 73, 313, 317, 373, 797, 3137, 3797, 739397]\r\n    \"\"\"\r\n    list_truncated_primes: list[int] = []\r\n    num = 13\r\n    while len(list_truncated_primes) != count:\r\n        if validate(num):\r\n            list_nums = list_truncated_nums(num)\r\n            if all(is_prime(i) for i in list_nums):\r\n                list_truncated_primes.append(num)\r\n        num += 2\r\n    return list_truncated_primes\r\n\r\n\r\ndef solution() -> int:\r\n    \"\"\"\r\n    Returns the sum of truncated primes\r\n    \"\"\"\r\n    return sum(compute_truncated_primes(11))\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    print(f\"{sum(compute_truncated_primes(11)) = }\")\r\n"
  },
  {
    "path": "project_euler/problem_038/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_038/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 38: https://projecteuler.net/problem=38\n\nTake the number 192 and multiply it by each of 1, 2, and 3:\n\n192 x 1 = 192\n192 x 2 = 384\n192 x 3 = 576\n\nBy concatenating each product we get the 1 to 9 pandigital, 192384576. We will call\n192384576 the concatenated product of 192 and (1,2,3)\n\nThe same can be achieved by starting with 9 and multiplying by 1, 2, 3, 4, and 5,\ngiving the pandigital, 918273645, which is the concatenated product of 9 and\n(1,2,3,4,5).\n\nWhat is the largest 1 to 9 pandigital 9-digit number that can be formed as the\nconcatenated product of an integer with (1,2, ... , n) where n > 1?\n\nSolution:\nSince n>1, the largest candidate for the solution will be a concactenation of\na 4-digit number and its double, a 5-digit number.\nLet a be the 4-digit number.\na  has 4 digits  =>  1000 <=  a  < 10000\n2a has 5 digits  => 10000 <= 2a  < 100000\n=>  5000 <= a < 10000\n\nThe concatenation of a with 2a = a * 10^5 + 2a\nso our candidate for a given a is 100002 * a.\nWe iterate through the search space 5000 <= a < 10000 in reverse order,\ncalculating the candidates for each a and checking if they are 1-9 pandigital.\n\nIn case there are no 4-digit numbers that satisfy this property, we check\nthe 3-digit numbers with a similar formula (the example a=192 gives a lower\nbound on the length of a):\na has 3 digits, etc...\n=>  100 <= a < 334, candidate = a * 10^6 + 2a * 10^3 + 3a\n                              = 1002003 * a\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef is_9_pandigital(n: int) -> bool:\n    \"\"\"\n    Checks whether n is a 9-digit 1 to 9 pandigital number.\n    >>> is_9_pandigital(12345)\n    False\n    >>> is_9_pandigital(156284973)\n    True\n    >>> is_9_pandigital(1562849733)\n    False\n    \"\"\"\n    s = str(n)\n    return len(s) == 9 and set(s) == set(\"123456789\")\n\n\ndef solution() -> int | None:\n    \"\"\"\n    Return the largest 1 to 9 pandigital 9-digital number that can be formed as the\n    concatenated product of an integer with (1,2,...,n) where n > 1.\n    \"\"\"\n    for base_num in range(9999, 4999, -1):\n        candidate = 100002 * base_num\n        if is_9_pandigital(candidate):\n            return candidate\n\n    for base_num in range(333, 99, -1):\n        candidate = 1002003 * base_num\n        if is_9_pandigital(candidate):\n            return candidate\n\n    return None\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_039/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_039/sol1.py",
    "content": "\"\"\"\r\nProblem 39: https://projecteuler.net/problem=39\r\n\r\nIf p is the perimeter of a right angle triangle with integral length sides,\r\n{a,b,c}, there are exactly three solutions for p = 120.\r\n{20,48,52}, {24,45,51}, {30,40,50}\r\n\r\nFor which value of p ≤ 1000, is the number of solutions maximised?\r\n\"\"\"\r\n\r\nfrom __future__ import annotations\r\n\r\nimport typing\r\nfrom collections import Counter\r\n\r\n\r\ndef pythagorean_triple(max_perimeter: int) -> typing.Counter[int]:\r\n    \"\"\"\r\n    Returns a dictionary with keys as the perimeter of a right angled triangle\r\n    and value as the number of corresponding triplets.\r\n    >>> pythagorean_triple(15)\r\n    Counter({12: 1})\r\n    >>> pythagorean_triple(40)\r\n    Counter({12: 1, 30: 1, 24: 1, 40: 1, 36: 1})\r\n    >>> pythagorean_triple(50)\r\n    Counter({12: 1, 30: 1, 24: 1, 40: 1, 36: 1, 48: 1})\r\n    \"\"\"\r\n    triplets: typing.Counter[int] = Counter()\r\n    for base in range(1, max_perimeter + 1):\r\n        for perpendicular in range(base, max_perimeter + 1):\r\n            hypotenuse = (base * base + perpendicular * perpendicular) ** 0.5\r\n            if hypotenuse == int(hypotenuse):\r\n                perimeter = int(base + perpendicular + hypotenuse)\r\n                if perimeter > max_perimeter:\r\n                    continue\r\n                triplets[perimeter] += 1\r\n    return triplets\r\n\r\n\r\ndef solution(n: int = 1000) -> int:\r\n    \"\"\"\r\n    Returns perimeter with maximum solutions.\r\n    >>> solution(100)\r\n    90\r\n    >>> solution(200)\r\n    180\r\n    >>> solution(1000)\r\n    840\r\n    \"\"\"\r\n    triplets = pythagorean_triple(n)\r\n    return triplets.most_common(1)[0][0]\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    print(f\"Perimeter {solution()} has maximum solutions\")\r\n"
  },
  {
    "path": "project_euler/problem_040/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_040/sol1.py",
    "content": "\"\"\"\nChampernowne's constant\nProblem 40\nAn irrational decimal fraction is created by concatenating the positive\nintegers:\n\n0.123456789101112131415161718192021...\n\nIt can be seen that the 12th digit of the fractional part is 1.\n\nIf dn represents the nth digit of the fractional part, find the value of the\nfollowing expression.\n\nd1 x d10 x d100 x d1000 x d10000 x d100000 x d1000000\n\"\"\"\n\n\ndef solution():\n    \"\"\"Returns\n\n    >>> solution()\n    210\n    \"\"\"\n    constant = []\n    i = 1\n\n    while len(constant) < 1e6:\n        constant.append(str(i))\n        i += 1\n\n    constant = \"\".join(constant)\n\n    return (\n        int(constant[0])\n        * int(constant[9])\n        * int(constant[99])\n        * int(constant[999])\n        * int(constant[9999])\n        * int(constant[99999])\n        * int(constant[999999])\n    )\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_041/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_041/sol1.py",
    "content": "\"\"\"\r\nPandigital prime\r\nProblem 41: https://projecteuler.net/problem=41\r\n\r\nWe shall say that an n-digit number is pandigital if it makes use of all the digits\r\n1 to n exactly once. For example, 2143 is a 4-digit pandigital and is also prime.\r\nWhat is the largest n-digit pandigital prime that exists?\r\n\r\nAll pandigital numbers except for 1, 4 ,7 pandigital numbers are divisible by 3.\r\nSo we will check only 7 digit pandigital numbers to obtain the largest possible\r\npandigital prime.\r\n\"\"\"\r\n\r\nfrom __future__ import annotations\r\n\r\nimport math\r\nfrom itertools import permutations\r\n\r\n\r\ndef is_prime(number: int) -> bool:\r\n    \"\"\"Checks to see if a number is a prime in O(sqrt(n)).\r\n\r\n    A number is prime if it has exactly two factors: 1 and itself.\r\n\r\n    >>> is_prime(0)\r\n    False\r\n    >>> is_prime(1)\r\n    False\r\n    >>> is_prime(2)\r\n    True\r\n    >>> is_prime(3)\r\n    True\r\n    >>> is_prime(27)\r\n    False\r\n    >>> is_prime(87)\r\n    False\r\n    >>> is_prime(563)\r\n    True\r\n    >>> is_prime(2999)\r\n    True\r\n    >>> is_prime(67483)\r\n    False\r\n    \"\"\"\r\n\r\n    if 1 < number < 4:\r\n        # 2 and 3 are primes\r\n        return True\r\n    elif number < 2 or number % 2 == 0 or number % 3 == 0:\r\n        # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes\r\n        return False\r\n\r\n    # All primes number are in format of 6k +/- 1\r\n    for i in range(5, int(math.sqrt(number) + 1), 6):\r\n        if number % i == 0 or number % (i + 2) == 0:\r\n            return False\r\n    return True\r\n\r\n\r\ndef solution(n: int = 7) -> int:\r\n    \"\"\"\r\n    Returns the maximum pandigital prime number of length n.\r\n    If there are none, then it will return 0.\r\n    >>> solution(2)\r\n    0\r\n    >>> solution(4)\r\n    4231\r\n    >>> solution(7)\r\n    7652413\r\n    \"\"\"\r\n    pandigital_str = \"\".join(str(i) for i in range(1, n + 1))\r\n    perm_list = [int(\"\".join(i)) for i in permutations(pandigital_str, n)]\r\n    pandigitals = [num for num in perm_list if is_prime(num)]\r\n    return max(pandigitals) if pandigitals else 0\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    print(f\"{solution() = }\")\r\n"
  },
  {
    "path": "project_euler/problem_042/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_042/solution42.py",
    "content": "\"\"\"\nThe nth term of the sequence of triangle numbers is given by, tn = ½n(n+1); so\nthe first ten triangle numbers are:\n\n1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...\n\nBy converting each letter in a word to a number corresponding to its\nalphabetical position and adding these values we form a word value. For example,\nthe word value for SKY is 19 + 11 + 25 = 55 = t10. If the word value is a\ntriangle number then we shall call the word a triangle word.\n\nUsing words.txt (right click and 'Save Link/Target As...'), a 16K text file\ncontaining nearly two-thousand common English words, how many are triangle\nwords?\n\"\"\"\n\nimport os\n\n# Precomputes a list of the 100 first triangular numbers\nTRIANGULAR_NUMBERS = [int(0.5 * n * (n + 1)) for n in range(1, 101)]\n\n\ndef solution():\n    \"\"\"\n    Finds the amount of triangular words in the words file.\n\n    >>> solution()\n    162\n    \"\"\"\n    script_dir = os.path.dirname(os.path.realpath(__file__))\n    words_file_path = os.path.join(script_dir, \"words.txt\")\n\n    words = \"\"\n    with open(words_file_path) as f:\n        words = f.readline()\n\n    words = [word.strip('\"') for word in words.strip(\"\\r\\n\").split(\",\")]\n    words = [\n        word\n        for word in [sum(ord(x) - 64 for x in word) for word in words]\n        if word in TRIANGULAR_NUMBERS\n    ]\n    return len(words)\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_042/words.txt",
    "content": "\"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\"\n"
  },
  {
    "path": "project_euler/problem_043/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_043/sol1.py",
    "content": "\"\"\"\r\nProblem 43: https://projecteuler.net/problem=43\r\n\r\nThe number, 1406357289, is a 0 to 9 pandigital number because it is made up of\r\neach of the digits 0 to 9 in some order, but it also has a rather interesting\r\nsub-string divisibility property.\r\n\r\nLet d1 be the 1st digit, d2 be the 2nd digit, and so on. In this way, we note\r\nthe following:\r\n\r\nd2d3d4=406 is divisible by 2\r\nd3d4d5=063 is divisible by 3\r\nd4d5d6=635 is divisible by 5\r\nd5d6d7=357 is divisible by 7\r\nd6d7d8=572 is divisible by 11\r\nd7d8d9=728 is divisible by 13\r\nd8d9d10=289 is divisible by 17\r\nFind the sum of all 0 to 9 pandigital numbers with this property.\r\n\"\"\"\r\n\r\nfrom itertools import permutations\r\n\r\n\r\ndef is_substring_divisible(num: tuple) -> bool:\r\n    \"\"\"\r\n    Returns True if the pandigital number passes\r\n    all the divisibility tests.\r\n    >>> is_substring_divisible((0, 1, 2, 4, 6, 5, 7, 3, 8, 9))\r\n    False\r\n    >>> is_substring_divisible((5, 1, 2, 4, 6, 0, 7, 8, 3, 9))\r\n    False\r\n    >>> is_substring_divisible((1, 4, 0, 6, 3, 5, 7, 2, 8, 9))\r\n    True\r\n    \"\"\"\r\n    if num[3] % 2 != 0:\r\n        return False\r\n\r\n    if (num[2] + num[3] + num[4]) % 3 != 0:\r\n        return False\r\n\r\n    if num[5] % 5 != 0:\r\n        return False\r\n\r\n    tests = [7, 11, 13, 17]\r\n    for i, test in enumerate(tests):\r\n        if (num[i + 4] * 100 + num[i + 5] * 10 + num[i + 6]) % test != 0:\r\n            return False\r\n    return True\r\n\r\n\r\ndef solution(n: int = 10) -> int:\r\n    \"\"\"\r\n    Returns the sum of all pandigital numbers which pass the\r\n    divisibility tests.\r\n    >>> solution(10)\r\n    16695334890\r\n    \"\"\"\r\n    return sum(\r\n        int(\"\".join(map(str, num)))\r\n        for num in permutations(range(n))\r\n        if is_substring_divisible(num)\r\n    )\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    print(f\"{solution() = }\")\r\n"
  },
  {
    "path": "project_euler/problem_044/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_044/sol1.py",
    "content": "\"\"\"\r\nProblem 44: https://projecteuler.net/problem=44\r\n\r\nPentagonal numbers are generated by the formula, Pn=n(3n-1)/2. The first ten\r\npentagonal numbers are:\r\n1, 5, 12, 22, 35, 51, 70, 92, 117, 145, ...\r\nIt can be seen that P4 + P7 = 22 + 70 = 92 = P8. However, their difference,\r\n70 - 22 = 48, is not pentagonal.\r\n\r\nFind the pair of pentagonal numbers, Pj and Pk, for which their sum and difference\r\nare pentagonal and D = |Pk - Pj| is minimised; what is the value of D?\r\n\"\"\"\r\n\r\n\r\ndef is_pentagonal(n: int) -> bool:\r\n    \"\"\"\r\n    Returns True if n is pentagonal, False otherwise.\r\n    >>> is_pentagonal(330)\r\n    True\r\n    >>> is_pentagonal(7683)\r\n    False\r\n    >>> is_pentagonal(2380)\r\n    True\r\n    \"\"\"\r\n    root = (1 + 24 * n) ** 0.5\r\n    return ((1 + root) / 6) % 1 == 0\r\n\r\n\r\ndef solution(limit: int = 5000) -> int:\r\n    \"\"\"\r\n    Returns the minimum difference of two pentagonal numbers P1 and P2 such that\r\n    P1 + P2 is pentagonal and P2 - P1 is pentagonal.\r\n    >>> solution(5000)\r\n    5482660\r\n    \"\"\"\r\n    pentagonal_nums = [(i * (3 * i - 1)) // 2 for i in range(1, limit)]\r\n    for i, pentagonal_i in enumerate(pentagonal_nums):\r\n        for j in range(i, len(pentagonal_nums)):\r\n            pentagonal_j = pentagonal_nums[j]\r\n            a = pentagonal_i + pentagonal_j\r\n            b = pentagonal_j - pentagonal_i\r\n            if is_pentagonal(a) and is_pentagonal(b):\r\n                return b\r\n\r\n    return -1\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    print(f\"{solution() = }\")\r\n"
  },
  {
    "path": "project_euler/problem_045/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_045/sol1.py",
    "content": "\"\"\"\r\nProblem 45: https://projecteuler.net/problem=45\r\n\r\nTriangle, pentagonal, and hexagonal numbers are generated by the following formulae:\r\nTriangle\t \tT(n) = (n * (n + 1)) / 2\t \t1, 3, 6, 10, 15, ...\r\nPentagonal\t \tP(n) = (n * (3 * n - 1)) / 2\t \t1, 5, 12, 22, 35, ...\r\nHexagonal\t \tH(n) = n * (2 * n - 1)\t \t1, 6, 15, 28, 45, ...\r\nIt can be verified that T(285) = P(165) = H(143) = 40755.\r\n\r\nFind the next triangle number that is also pentagonal and hexagonal.\r\nAll triangle numbers are hexagonal numbers.\r\nT(2n-1) = n * (2 * n - 1) = H(n)\r\nSo we shall check only for hexagonal numbers which are also pentagonal.\r\n\"\"\"\r\n\r\n\r\ndef hexagonal_num(n: int) -> int:\r\n    \"\"\"\r\n    Returns nth hexagonal number\r\n    >>> hexagonal_num(143)\r\n    40755\r\n    >>> hexagonal_num(21)\r\n    861\r\n    >>> hexagonal_num(10)\r\n    190\r\n    \"\"\"\r\n    return n * (2 * n - 1)\r\n\r\n\r\ndef is_pentagonal(n: int) -> bool:\r\n    \"\"\"\r\n    Returns True if n is pentagonal, False otherwise.\r\n    >>> is_pentagonal(330)\r\n    True\r\n    >>> is_pentagonal(7683)\r\n    False\r\n    >>> is_pentagonal(2380)\r\n    True\r\n    \"\"\"\r\n    root = (1 + 24 * n) ** 0.5\r\n    return ((1 + root) / 6) % 1 == 0\r\n\r\n\r\ndef solution(start: int = 144) -> int:\r\n    \"\"\"\r\n    Returns the next number which is triangular, pentagonal and hexagonal.\r\n    >>> solution(144)\r\n    1533776805\r\n    \"\"\"\r\n    n = start\r\n    num = hexagonal_num(n)\r\n    while not is_pentagonal(num):\r\n        n += 1\r\n        num = hexagonal_num(n)\r\n    return num\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    print(f\"{solution()} = \")\r\n"
  },
  {
    "path": "project_euler/problem_046/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_046/sol1.py",
    "content": "\"\"\"\r\nProblem 46: https://projecteuler.net/problem=46\r\n\r\nIt was proposed by Christian Goldbach that every odd composite number can be\r\nwritten as the sum of a prime and twice a square.\r\n\r\n9 = 7 + 2 x 12\r\n15 = 7 + 2 x 22\r\n21 = 3 + 2 x 32\r\n25 = 7 + 2 x 32\r\n27 = 19 + 2 x 22\r\n33 = 31 + 2 x 12\r\n\r\nIt turns out that the conjecture was false.\r\n\r\nWhat is the smallest odd composite that cannot be written as the sum of a\r\nprime and twice a square?\r\n\"\"\"\r\n\r\nfrom __future__ import annotations\r\n\r\nimport math\r\n\r\n\r\ndef is_prime(number: int) -> bool:\r\n    \"\"\"Checks to see if a number is a prime in O(sqrt(n)).\r\n\r\n    A number is prime if it has exactly two factors: 1 and itself.\r\n\r\n    >>> is_prime(0)\r\n    False\r\n    >>> is_prime(1)\r\n    False\r\n    >>> is_prime(2)\r\n    True\r\n    >>> is_prime(3)\r\n    True\r\n    >>> is_prime(27)\r\n    False\r\n    >>> is_prime(87)\r\n    False\r\n    >>> is_prime(563)\r\n    True\r\n    >>> is_prime(2999)\r\n    True\r\n    >>> is_prime(67483)\r\n    False\r\n    \"\"\"\r\n\r\n    if 1 < number < 4:\r\n        # 2 and 3 are primes\r\n        return True\r\n    elif number < 2 or number % 2 == 0 or number % 3 == 0:\r\n        # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes\r\n        return False\r\n\r\n    # All primes number are in format of 6k +/- 1\r\n    for i in range(5, int(math.sqrt(number) + 1), 6):\r\n        if number % i == 0 or number % (i + 2) == 0:\r\n            return False\r\n    return True\r\n\r\n\r\nodd_composites = [num for num in range(3, 100001, 2) if not is_prime(num)]\r\n\r\n\r\ndef compute_nums(n: int) -> list[int]:\r\n    \"\"\"\r\n    Returns a list of first n odd composite numbers which do\r\n    not follow the conjecture.\r\n    >>> compute_nums(1)\r\n    [5777]\r\n    >>> compute_nums(2)\r\n    [5777, 5993]\r\n    >>> compute_nums(0)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: n must be >= 0\r\n    >>> compute_nums(\"a\")\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: n must be an integer\r\n    >>> compute_nums(1.1)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: n must be an integer\r\n\r\n    \"\"\"\r\n    if not isinstance(n, int):\r\n        raise ValueError(\"n must be an integer\")\r\n    if n <= 0:\r\n        raise ValueError(\"n must be >= 0\")\r\n\r\n    list_nums = []\r\n    for num in range(len(odd_composites)):\r\n        i = 0\r\n        while 2 * i * i <= odd_composites[num]:\r\n            rem = odd_composites[num] - 2 * i * i\r\n            if is_prime(rem):\r\n                break\r\n            i += 1\r\n        else:\r\n            list_nums.append(odd_composites[num])\r\n            if len(list_nums) == n:\r\n                return list_nums\r\n\r\n    return []\r\n\r\n\r\ndef solution() -> int:\r\n    \"\"\"Return the solution to the problem\"\"\"\r\n    return compute_nums(1)[0]\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    print(f\"{solution() = }\")\r\n"
  },
  {
    "path": "project_euler/problem_047/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_047/sol1.py",
    "content": "\"\"\"\nCombinatoric selections\n\nProblem 47\n\nThe first two consecutive numbers to have two distinct prime factors are:\n\n14 = 2 x 7\n15 = 3 x 5\n\nThe first three consecutive numbers to have three distinct prime factors are:\n\n644 = 2² x 7 x 23\n645 = 3 x 5 x 43\n646 = 2 x 17 x 19.\n\nFind the first four consecutive integers to have four distinct prime factors each.\nWhat is the first of these numbers?\n\"\"\"\n\nfrom functools import lru_cache\n\n\ndef unique_prime_factors(n: int) -> set:\n    \"\"\"\n    Find unique prime factors of an integer.\n    Tests include sorting because only the set matters,\n    not the order in which it is produced.\n    >>> sorted(set(unique_prime_factors(14)))\n    [2, 7]\n    >>> sorted(set(unique_prime_factors(644)))\n    [2, 7, 23]\n    >>> sorted(set(unique_prime_factors(646)))\n    [2, 17, 19]\n    \"\"\"\n    i = 2\n    factors = set()\n    while i * i <= n:\n        if n % i:\n            i += 1\n        else:\n            n //= i\n            factors.add(i)\n    if n > 1:\n        factors.add(n)\n    return factors\n\n\n@lru_cache\ndef upf_len(num: int) -> int:\n    \"\"\"\n    Memoize upf() length results for a given value.\n    >>> upf_len(14)\n    2\n    \"\"\"\n    return len(unique_prime_factors(num))\n\n\ndef equality(iterable: list) -> bool:\n    \"\"\"\n    Check the equality of ALL elements in an iterable\n    >>> equality([1, 2, 3, 4])\n    False\n    >>> equality([2, 2, 2, 2])\n    True\n    >>> equality([1, 2, 3, 2, 1])\n    False\n    \"\"\"\n    return len(set(iterable)) in (0, 1)\n\n\ndef run(n: int) -> list[int]:\n    \"\"\"\n    Runs core process to find problem solution.\n    >>> run(3)\n    [644, 645, 646]\n    \"\"\"\n\n    # Incrementor variable for our group list comprehension.\n    # This is the first number in each list of values\n    # to test.\n    base = 2\n\n    while True:\n        # Increment each value of a generated range\n        group = [base + i for i in range(n)]\n\n        # Run elements through the unique_prime_factors function\n        # Append our target number to the end.\n        checker = [upf_len(x) for x in group]\n        checker.append(n)\n\n        # If all numbers in the list are equal, return the group variable.\n        if equality(checker):\n            return group\n\n        # Increment our base variable by 1\n        base += 1\n\n\ndef solution(n: int = 4) -> int | None:\n    \"\"\"Return the first value of the first four consecutive integers to have four\n    distinct prime factors each.\n    >>> solution()\n    134043\n    \"\"\"\n    results = run(n)\n    return results[0] if len(results) else None\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_048/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_048/sol1.py",
    "content": "\"\"\"\nSelf Powers\nProblem 48\n\nThe series, 1^1 + 2^2 + 3^3 + ... + 10^10 = 10405071317.\n\nFind the last ten digits of the series, 1^1 + 2^2 + 3^3 + ... + 1000^1000.\n\"\"\"\n\n\ndef solution():\n    \"\"\"\n    Returns the last 10 digits of the series, 1^1 + 2^2 + 3^3 + ... + 1000^1000.\n\n    >>> solution()\n    '9110846700'\n    \"\"\"\n    total = 0\n    for i in range(1, 1001):\n        total += i**i\n    return str(total)[-10:]\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_049/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_049/sol1.py",
    "content": "\"\"\"\nPrime permutations\n\nProblem 49\n\nThe arithmetic sequence, 1487, 4817, 8147, in which each of\nthe terms increases by 3330, is unusual in two ways:\n(i) each of the three terms are prime,\n(ii) each of the 4-digit numbers are permutations of one another.\n\nThere are no arithmetic sequences made up of three 1-, 2-, or 3-digit primes,\nexhibiting this property, but there is one other 4-digit increasing sequence.\n\nWhat 12-digit number do you form by concatenating the three terms in this sequence?\n\nSolution:\n\nFirst, we need to generate all 4 digits prime numbers. Then greedy\nall of them and use permutation to form new numbers. Use binary search\nto check if the permutated numbers is in our prime list and include\nthem in a candidate list.\n\nAfter that, bruteforce all passed candidates sequences using\n3 nested loops since we know the answer will be 12 digits.\nThe bruteforce of this solution will be about 1 sec.\n\"\"\"\n\nimport math\nfrom itertools import permutations\n\n\ndef is_prime(number: int) -> bool:\n    \"\"\"Checks to see if a number is a prime in O(sqrt(n)).\n\n    A number is prime if it has exactly two factors: 1 and itself.\n\n    >>> is_prime(0)\n    False\n    >>> is_prime(1)\n    False\n    >>> is_prime(2)\n    True\n    >>> is_prime(3)\n    True\n    >>> is_prime(27)\n    False\n    >>> is_prime(87)\n    False\n    >>> is_prime(563)\n    True\n    >>> is_prime(2999)\n    True\n    >>> is_prime(67483)\n    False\n    \"\"\"\n\n    if 1 < number < 4:\n        # 2 and 3 are primes\n        return True\n    elif number < 2 or number % 2 == 0 or number % 3 == 0:\n        # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes\n        return False\n\n    # All primes number are in format of 6k +/- 1\n    for i in range(5, int(math.sqrt(number) + 1), 6):\n        if number % i == 0 or number % (i + 2) == 0:\n            return False\n    return True\n\n\ndef search(target: int, prime_list: list) -> bool:\n    \"\"\"\n    function to search a number in a list using Binary Search.\n    >>> search(3, [1, 2, 3])\n    True\n    >>> search(4, [1, 2, 3])\n    False\n    >>> search(101, list(range(-100, 100)))\n    False\n    \"\"\"\n\n    left, right = 0, len(prime_list) - 1\n    while left <= right:\n        middle = (left + right) // 2\n        if prime_list[middle] == target:\n            return True\n        elif prime_list[middle] < target:\n            left = middle + 1\n        else:\n            right = middle - 1\n\n    return False\n\n\ndef solution():\n    \"\"\"\n    Return the solution of the problem.\n    >>> solution()\n    296962999629\n    \"\"\"\n    prime_list = [n for n in range(1001, 10000, 2) if is_prime(n)]\n    candidates = []\n\n    for number in prime_list:\n        tmp_numbers = []\n\n        for prime_member in permutations(list(str(number))):\n            prime = int(\"\".join(prime_member))\n\n            if prime % 2 == 0:\n                continue\n\n            if search(prime, prime_list):\n                tmp_numbers.append(prime)\n\n        tmp_numbers.sort()\n        if len(tmp_numbers) >= 3:\n            candidates.append(tmp_numbers)\n\n    passed = []\n    for candidate in candidates:\n        length = len(candidate)\n        found = False\n\n        for i in range(length):\n            for j in range(i + 1, length):\n                for k in range(j + 1, length):\n                    if (\n                        abs(candidate[i] - candidate[j])\n                        == abs(candidate[j] - candidate[k])\n                        and len({candidate[i], candidate[j], candidate[k]}) == 3\n                    ):\n                        passed.append(\n                            sorted([candidate[i], candidate[j], candidate[k]])\n                        )\n                        found = True\n\n                    if found:\n                        break\n                if found:\n                    break\n            if found:\n                break\n\n    answer = set()\n    for seq in passed:\n        answer.add(\"\".join([str(i) for i in seq]))\n\n    return max(int(x) for x in answer)\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_050/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_050/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 50: https://projecteuler.net/problem=50\n\nConsecutive prime sum\n\nThe prime 41, can be written as the sum of six consecutive primes:\n41 = 2 + 3 + 5 + 7 + 11 + 13\n\nThis is the longest sum of consecutive primes that adds to a prime below\none-hundred.\n\nThe longest sum of consecutive primes below one-thousand that adds to a prime,\ncontains 21 terms, and is equal to 953.\n\nWhich prime, below one-million, can be written as the sum of the most\nconsecutive primes?\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef prime_sieve(limit: int) -> list[int]:\n    \"\"\"\n    Sieve of Erotosthenes\n    Function to return all the prime numbers up to a number 'limit'\n    https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes\n\n    >>> prime_sieve(3)\n    [2]\n\n    >>> prime_sieve(50)\n    [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]\n    \"\"\"\n    is_prime = [True] * limit\n    is_prime[0] = False\n    is_prime[1] = False\n    is_prime[2] = True\n\n    for i in range(3, int(limit**0.5 + 1), 2):\n        index = i * 2\n        while index < limit:\n            is_prime[index] = False\n            index = index + i\n\n    primes = [2]\n\n    for i in range(3, limit, 2):\n        if is_prime[i]:\n            primes.append(i)\n\n    return primes\n\n\ndef solution(ceiling: int = 1_000_000) -> int:\n    \"\"\"\n    Returns the biggest prime, below the celing, that can be written as the sum\n    of consecutive the most consecutive primes.\n\n    >>> solution(500)\n    499\n\n    >>> solution(1_000)\n    953\n\n    >>> solution(10_000)\n    9521\n    \"\"\"\n    primes = prime_sieve(ceiling)\n    length = 0\n    largest = 0\n\n    for i in range(len(primes)):\n        for j in range(i + length, len(primes)):\n            sol = sum(primes[i:j])\n            if sol >= ceiling:\n                break\n\n            if sol in primes:\n                length = j - i\n                largest = sol\n\n    return largest\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_051/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_051/sol1.py",
    "content": "\"\"\"\nhttps://projecteuler.net/problem=51\nPrime digit replacements\nProblem 51\n\nBy replacing the 1st digit of the 2-digit number *3, it turns out that six of\nthe nine possible values: 13, 23, 43, 53, 73, and 83, are all prime.\n\nBy replacing the 3rd and 4th digits of 56**3 with the same digit, this 5-digit\nnumber is the first example having seven primes among the ten generated numbers,\nyielding the family: 56003, 56113, 56333, 56443, 56663, 56773, and 56993.\nConsequently 56003, being the first member of this family, is the smallest prime\nwith this property.\n\nFind the smallest prime which, by replacing part of the number (not necessarily\nadjacent digits) with the same digit, is part of an eight prime value family.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections import Counter\n\n\ndef prime_sieve(n: int) -> list[int]:\n    \"\"\"\n    Sieve of Erotosthenes\n    Function to return all the prime numbers up to a certain number\n    https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes\n\n    >>> prime_sieve(3)\n    [2]\n\n    >>> prime_sieve(50)\n    [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]\n    \"\"\"\n    is_prime = [True] * n\n    is_prime[0] = False\n    is_prime[1] = False\n    is_prime[2] = True\n\n    for i in range(3, int(n**0.5 + 1), 2):\n        index = i * 2\n        while index < n:\n            is_prime[index] = False\n            index = index + i\n\n    primes = [2]\n\n    for i in range(3, n, 2):\n        if is_prime[i]:\n            primes.append(i)\n\n    return primes\n\n\ndef digit_replacements(number: int) -> list[list[int]]:\n    \"\"\"\n    Returns all the possible families of digit replacements in a number which\n    contains at least one repeating digit\n\n    >>> digit_replacements(544)\n    [[500, 511, 522, 533, 544, 555, 566, 577, 588, 599]]\n\n    >>> digit_replacements(3112)\n    [[3002, 3112, 3222, 3332, 3442, 3552, 3662, 3772, 3882, 3992]]\n    \"\"\"\n    number_str = str(number)\n    replacements = []\n    digits = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"]\n\n    for duplicate in Counter(number_str) - Counter(set(number_str)):\n        family = [int(number_str.replace(duplicate, digit)) for digit in digits]\n        replacements.append(family)\n\n    return replacements\n\n\ndef solution(family_length: int = 8) -> int:\n    \"\"\"\n    Returns the solution of the problem\n\n    >>> solution(2)\n    229399\n\n    >>> solution(3)\n    221311\n    \"\"\"\n    numbers_checked = set()\n\n    # Filter primes with less than 3 replaceable digits\n    primes = {\n        x for x in set(prime_sieve(1_000_000)) if len(str(x)) - len(set(str(x))) >= 3\n    }\n\n    for prime in primes:\n        if prime in numbers_checked:\n            continue\n\n        replacements = digit_replacements(prime)\n\n        for family in replacements:\n            numbers_checked.update(family)\n            primes_in_family = primes.intersection(family)\n\n            if len(primes_in_family) != family_length:\n                continue\n\n            return min(primes_in_family)\n\n    return -1\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_052/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_052/sol1.py",
    "content": "\"\"\"\nPermuted multiples\nProblem 52\n\nIt can be seen that the number, 125874, and its double, 251748, contain exactly\nthe same digits, but in a different order.\n\nFind the smallest positive integer, x, such that 2x, 3x, 4x, 5x, and 6x,\ncontain the same digits.\n\"\"\"\n\n\ndef solution():\n    \"\"\"Returns the smallest positive integer, x, such that 2x, 3x, 4x, 5x, and\n    6x, contain the same digits.\n\n    >>> solution()\n    142857\n    \"\"\"\n    i = 1\n\n    while True:\n        if (\n            sorted(str(i))\n            == sorted(str(2 * i))\n            == sorted(str(3 * i))\n            == sorted(str(4 * i))\n            == sorted(str(5 * i))\n            == sorted(str(6 * i))\n        ):\n            return i\n\n        i += 1\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_053/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_053/sol1.py",
    "content": "\"\"\"\nCombinatoric selections\nProblem 53\n\nThere are exactly ten ways of selecting three from five, 12345:\n\n    123, 124, 125, 134, 135, 145, 234, 235, 245, and 345\n\nIn combinatorics, we use the notation, 5C3 = 10.\n\nIn general,\n\nnCr = n!/(r!(n-r)!),where r ≤ n, n! = nx(n-1)x...x3x2x1, and 0! = 1.\nIt is not until n = 23, that a value exceeds one-million: 23C10 = 1144066.\n\nHow many, not necessarily distinct, values of nCr, for 1 ≤ n ≤ 100, are greater\nthan one-million?\n\"\"\"\n\nfrom math import factorial\n\n\ndef combinations(n, r):\n    return factorial(n) / (factorial(r) * factorial(n - r))\n\n\ndef solution():\n    \"\"\"Returns the number of values of nCr, for 1 ≤ n ≤ 100, are greater than\n    one-million\n\n    >>> solution()\n    4075\n    \"\"\"\n    total = 0\n\n    for i in range(1, 101):\n        for j in range(1, i + 1):\n            if combinations(i, j) > 1e6:\n                total += 1\n    return total\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_054/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_054/poker_hands.txt",
    "content": "8C TS KC 9H 4S 7D 2S 5D 3S AC\n5C AD 5D AC 9C 7C 5H 8D TD KS\n3H 7H 6S KC JS QH TD JC 2D 8S\nTH 8H 5C QS TC 9H 4D JC KS JS\n7C 5H KC QH JD AS KH 4C AD 4S\n5H KS 9C 7D 9H 8D 3S 5D 5C AH\n6H 4H 5C 3H 2H 3S QH 5S 6S AS\nTD 8C 4H 7C TC KC 4C 3H 7S KS\n7C 9C 6D KD 3H 4C QS QC AC KH\nJC 6S 5H 2H 2D KD 9D 7C AS JS\nAD QH TH 9D 8H TS 6D 3S AS AC\n2H 4S 5C 5S TC KC JD 6C TS 3C\nQD AS 6H JS 2C 3D 9H KC 4H 8S\nKD 8S 9S 7C 2S 3S 6D 6S 4H KC\n3C 8C 2D 7D 4D 9S 4S QH 4H JD\n8C KC 7S TC 2D TS 8H QD AC 5C\n3D KH QD 6C 6S AD AS 8H 2H QS\n6S 8D 4C 8S 6C QH TC 6D 7D 9D\n2S 8D 8C 4C TS 9S 9D 9C AC 3D\n3C QS 2S 4H JH 3D 2D TD 8S 9H\n5H QS 8S 6D 3C 8C JD AS 7H 7D\n6H TD 9D AS JH 6C QC 9S KD JC\nAH 8S QS 4D TH AC TS 3C 3D 5C\n5S 4D JS 3D 8H 6C TS 3S AD 8C\n6D 7C 5D 5H 3S 5C JC 2H 5S 3D\n5H 6H 2S KS 3D 5D JD 7H JS 8H\nKH 4H AS JS QS QC TC 6D 7C KS\n3D QS TS 2H JS 4D AS 9S JC KD\nQD 5H 4D 5D KH 7H 3D JS KD 4H\n2C 9H 6H 5C 9D 6C JC 2D TH 9S\n7D 6D AS QD JH 4D JS 7C QS 5C\n3H KH QD AD 8C 8H 3S TH 9D 5S\nAH 9S 4D 9D 8S 4H JS 3C TC 8D\n2C KS 5H QD 3S TS 9H AH AD 8S\n5C 7H 5D KD 9H 4D 3D 2D KS AD\nKS KC 9S 6D 2C QH 9D 9H TS TC\n9C 6H 5D QH 4D AD 6D QC JS KH\n9S 3H 9D JD 5C 4D 9H AS TC QH\n2C 6D JC 9C 3C AD 9S KH 9D 7D\nKC 9C 7C JC JS KD 3H AS 3C 7D\nQD KH QS 2C 3S 8S 8H 9H 9C JC\nQH 8D 3C KC 4C 4H 6D AD 9H 9D\n3S KS QS 7H KH 7D 5H 5D JD AD\n2H 2C 6H TH TC 7D 8D 4H 8C AS\n4S 2H AC QC 3S 6D TH 4D 4C KH\n4D TC KS AS 7C 3C 6D 2D 9H 6C\n8C TD 5D QS 2C 7H 4C 9C 3H 9H\n5H JH TS 7S TD 6H AD QD 8H 8S\n5S AD 9C 8C 7C 8D 5H 9D 8S 2S\n4H KH KS 9S 2S KC 5S AD 4S 7D\nQS 9C QD 6H JS 5D AC 8D 2S AS\nKH AC JC 3S 9D 9S 3C 9C 5S JS\nAD 3C 3D KS 3S 5C 9C 8C TS 4S\nJH 8D 5D 6H KD QS QD 3D 6C KC\n8S JD 6C 3S 8C TC QC 3C QH JS\nKC JC 8H 2S 9H 9C JH 8S 8C 9S\n8S 2H QH 4D QC 9D KC AS TH 3C\n8S 6H TH 7C 2H 6S 3C 3H AS 7S\nQH 5S JS 4H 5H TS 8H AH AC JC\n9D 8H 2S 4S TC JC 3C 7H 3H 5C\n3D AD 3C 3S 4C QC AS 5D TH 8C\n6S 9D 4C JS KH AH TS JD 8H AD\n4C 6S 9D 7S AC 4D 3D 3S TC JD\nAD 7H 6H 4H JH KC TD TS 7D 6S\n8H JH TC 3S 8D 8C 9S 2C 5C 4D\n2C 9D KC QH TH QS JC 9C 4H TS\nQS 3C QD 8H KH 4H 8D TD 8S AC\n7C 3C TH 5S 8H 8C 9C JD TC KD\nQC TC JD TS 8C 3H 6H KD 7C TD\nJH QS KS 9C 6D 6S AS 9H KH 6H\n2H 4D AH 2D JH 6H TD 5D 4H JD\nKD 8C 9S JH QD JS 2C QS 5C 7C\n4S TC 7H 8D 2S 6H 7S 9C 7C KC\n8C 5D 7H 4S TD QC 8S JS 4H KS\nAD 8S JH 6D TD KD 7C 6C 2D 7D\nJC 6H 6S JS 4H QH 9H AH 4C 3C\n6H 5H AS 7C 7S 3D KH KC 5D 5C\nJC 3D TD AS 4D 6D 6S QH JD KS\n8C 7S 8S QH 2S JD 5C 7H AH QD\n8S 3C 6H 6C 2C 8D TD 7D 4C 4D\n5D QH KH 7C 2S 7H JS 6D QC QD\nAD 6C 6S 7D TH 6H 2H 8H KH 4H\nKS JS KD 5D 2D KH 7D 9C 8C 3D\n9C 6D QD 3C KS 3S 7S AH JD 2D\nAH QH AS JC 8S 8H 4C KC TH 7D\nJC 5H TD 7C 5D KD 4C AD 8H JS\nKC 2H AC AH 7D JH KH 5D 7S 6D\n9S 5S 9C 6H 8S TD JD 9H 6C AC\n7D 8S 6D TS KD 7H AC 5S 7C 5D\nAH QC JC 4C TC 8C 2H TS 2C 7D\nKD KC 6S 3D 7D 2S 8S 3H 5S 5C\n8S 5D 8H 4C 6H KC 3H 7C 5S KD\nJH 8C 3D 3C 6C KC TD 7H 7C 4C\nJC KC 6H TS QS TD KS 8H 8C 9S\n6C 5S 9C QH 7D AH KS KC 9S 2C\n4D 4S 8H TD 9C 3S 7D 9D AS TH\n6S 7D 3C 6H 5D KD 2C 5C 9D 9C\n2H KC 3D AD 3H QD QS 8D JC 4S\n8C 3H 9C 7C AD 5D JC 9D JS AS\n5D 9H 5C 7H 6S 6C QC JC QD 9S\nJC QS JH 2C 6S 9C QC 3D 4S TC\n4H 5S 8D 3D 4D 2S KC 2H JS 2C\nTD 3S TH KD 4D 7H JH JS KS AC\n7S 8C 9S 2D 8S 7D 5C AD 9D AS\n8C 7H 2S 6C TH 3H 4C 3S 8H AC\nKD 5H JC 8H JD 2D 4H TD JH 5C\n3D AS QH KS 7H JD 8S 5S 6D 5H\n9S 6S TC QS JC 5C 5D 9C TH 8C\n5H 3S JH 9H 2S 2C 6S 7S AS KS\n8C QD JC QS TC QC 4H AC KH 6C\nTC 5H 7D JH 4H 2H 8D JC KS 4D\n5S 9C KH KD 9H 5C TS 3D 7D 2D\n5H AS TC 4D 8C 2C TS 9D 3H 8D\n6H 8D 2D 9H JD 6C 4S 5H 5S 6D\nAD 9C JC 7D 6H 9S 6D JS 9H 3C\nAD JH TC QS 4C 5D 9S 7C 9C AH\nKD 6H 2H TH 8S QD KS 9D 9H AS\n4H 8H 8D 5H 6C AH 5S AS AD 8S\nQS 5D 4S 2H TD KS 5H AC 3H JC\n9C 7D QD KD AC 6D 5H QH 6H 5S\nKC AH QH 2H 7D QS 3H KS 7S JD\n6C 8S 3H 6D KS QD 5D 5C 8H TC\n9H 4D 4S 6S 9D KH QC 4H 6C JD\nTD 2D QH 4S 6H JH KD 3C QD 8C\n4S 6H 7C QD 9D AS AH 6S AD 3C\n2C KC TH 6H 8D AH 5C 6D 8S 5D\nTD TS 7C AD JC QD 9H 3C KC 7H\n5D 4D 5S 8H 4H 7D 3H JD KD 2D\nJH TD 6H QS 4S KD 5C 8S 7D 8H\nAC 3D AS 8C TD 7H KH 5D 6C JD\n9D KS 7C 6D QH TC JD KD AS KC\nJH 8S 5S 7S 7D AS 2D 3D AD 2H\n2H 5D AS 3C QD KC 6H 9H 9S 2C\n9D 5D TH 4C JH 3H 8D TC 8H 9H\n6H KD 2C TD 2H 6C 9D 2D JS 8C\nKD 7S 3C 7C AS QH TS AD 8C 2S\nQS 8H 6C JS 4C 9S QC AD TD TS\n2H 7C TS TC 8C 3C 9H 2D 6D JC\nTC 2H 8D JH KS 6D 3H TD TH 8H\n9D TD 9H QC 5D 6C 8H 8C KC TS\n2H 8C 3D AH 4D TH TC 7D 8H KC\nTS 5C 2D 8C 6S KH AH 5H 6H KC\n5S 5D AH TC 4C JD 8D 6H 8C 6C\nKC QD 3D 8H 2D JC 9H 4H AD 2S\nTD 6S 7D JS KD 4H QS 2S 3S 8C\n4C 9H JH TS 3S 4H QC 5S 9S 9C\n2C KD 9H JS 9S 3H JC TS 5D AC\nAS 2H 5D AD 5H JC 7S TD JS 4C\n2D 4S 8H 3D 7D 2C AD KD 9C TS\n7H QD JH 5H JS AC 3D TH 4C 8H\n6D KH KC QD 5C AD 7C 2D 4H AC\n3D 9D TC 8S QD 2C JC 4H JD AH\n6C TD 5S TC 8S AH 2C 5D AS AC\nTH 7S 3D AS 6C 4C 7H 7D 4H AH\n5C 2H KS 6H 7S 4H 5H 3D 3C 7H\n3C 9S AC 7S QH 2H 3D 6S 3S 3H\n2D 3H AS 2C 6H TC JS 6S 9C 6C\nQH KD QD 6D AC 6H KH 2C TS 8C\n8H 7D 3S 9H 5D 3H 4S QC 9S 5H\n2D 9D 7H 6H 3C 8S 5H 4D 3S 4S\nKD 9S 4S TC 7S QC 3S 8S 2H 7H\nTC 3D 8C 3H 6C 2H 6H KS KD 4D\nKC 3D 9S 3H JS 4S 8H 2D 6C 8S\n6H QS 6C TC QD 9H 7D 7C 5H 4D\nTD 9D 8D 6S 6C TC 5D TS JS 8H\n4H KC JD 9H TC 2C 6S 5H 8H AS\nJS 9C 5C 6S 9D JD 8H KC 4C 6D\n4D 8D 8S 6C 7C 6H 7H 8H 5C KC\nTC 3D JC 6D KS 9S 6H 7S 9C 2C\n6C 3S KD 5H TS 7D 9H 9S 6H KH\n3D QD 4C 6H TS AC 3S 5C 2H KD\n4C AS JS 9S 7C TS 7H 9H JC KS\n4H 8C JD 3H 6H AD 9S 4S 5S KS\n4C 2C 7D 3D AS 9C 2S QS KC 6C\n8S 5H 3D 2S AC 9D 6S 3S 4D TD\nQD TH 7S TS 3D AC 7H 6C 5D QC\nTC QD AD 9C QS 5C 8D KD 3D 3C\n9D 8H AS 3S 7C 8S JD 2D 8D KC\n4C TH AC QH JS 8D 7D 7S 9C KH\n9D 8D 4C JH 2C 2S QD KD TS 4H\n4D 6D 5D 2D JH 3S 8S 3H TC KH\nAD 4D 2C QS 8C KD JH JD AH 5C\n5C 6C 5H 2H JH 4H KS 7C TC 3H\n3C 4C QC 5D JH 9C QD KH 8D TC\n3H 9C JS 7H QH AS 7C 9H 5H JC\n2D 5S QD 4S 3C KC 6S 6C 5C 4C\n5D KH 2D TS 8S 9C AS 9S 7C 4C\n7C AH 8C 8D 5S KD QH QS JH 2C\n8C 9D AH 2H AC QC 5S 8H 7H 2C\nQD 9H 5S QS QC 9C 5H JC TH 4H\n6C 6S 3H 5H 3S 6H KS 8D AC 7S\nAC QH 7H 8C 4S KC 6C 3D 3S TC\n9D 3D JS TH AC 5H 3H 8S 3S TC\nQD KH JS KS 9S QC 8D AH 3C AC\n5H 6C KH 3S 9S JH 2D QD AS 8C\n6C 4D 7S 7H 5S JC 6S 9H 4H JH\nAH 5S 6H 9S AD 3S TH 2H 9D 8C\n4C 8D 9H 7C QC AD 4S 9C KC 5S\n9D 6H 4D TC 4C JH 2S 5D 3S AS\n2H 6C 7C KH 5C AD QS TH JD 8S\n3S 4S 7S AH AS KC JS 2S AD TH\nJS KC 2S 7D 8C 5C 9C TS 5H 9D\n7S 9S 4D TD JH JS KH 6H 5D 2C\nJD JS JC TH 2D 3D QD 8C AC 5H\n7S KH 5S 9D 5D TD 4S 6H 3C 2D\n4S 5D AC 8D 4D 7C AD AS AH 9C\n6S TH TS KS 2C QC AH AS 3C 4S\n2H 8C 3S JC 5C 7C 3H 3C KH JH\n7S 3H JC 5S 6H 4C 2S 4D KC 7H\n4D 7C 4H 9S 8S 6S AD TC 6C JC\nKH QS 3S TC 4C 8H 8S AC 3C TS\nQD QS TH 3C TS 7H 7D AH TD JC\nTD JD QC 4D 9S 7S TS AD 7D AC\nAH 7H 4S 6D 7C 2H 9D KS JC TD\n7C AH JD 4H 6D QS TS 2H 2C 5C\nTC KC 8C 9S 4C JS 3C JC 6S AH\nAS 7D QC 3D 5S JC JD 9D TD KH\nTH 3C 2S 6H AH AC 5H 5C 7S 8H\nQC 2D AC QD 2S 3S JD QS 6S 8H\nKC 4H 3C 9D JS 6H 3S 8S AS 8C\n7H KC 7D JD 2H JC QH 5S 3H QS\n9H TD 3S 8H 7S AC 5C 6C AH 7C\n8D 9H AH JD TD QS 7D 3S 9C 8S\nAH QH 3C JD KC 4S 5S 5D TD KS\n9H 7H 6S JH TH 4C 7C AD 5C 2D\n7C KD 5S TC 9D 6S 6C 5D 2S TH\nKC 9H 8D 5H 7H 4H QC 3D 7C AS\n6S 8S QC TD 4S 5C TH QS QD 2S\n8S 5H TH QC 9H 6S KC 7D 7C 5C\n7H KD AH 4D KH 5C 4S 2D KC QH\n6S 2C TD JC AS 4D 6C 8C 4H 5S\nJC TC JD 5S 6S 8D AS 9D AD 3S\n6D 6H 5D 5S TC 3D 7D QS 9D QD\n4S 6C 8S 3S 7S AD KS 2D 7D 7C\nKC QH JC AC QD 5D 8D QS 7H 7D\nJS AH 8S 5H 3D TD 3H 4S 6C JH\n4S QS 7D AS 9H JS KS 6D TC 5C\n2D 5C 6H TC 4D QH 3D 9H 8S 6C\n6D 7H TC TH 5S JD 5C 9C KS KD\n8D TD QH 6S 4S 6C 8S KC 5C TC\n5S 3D KS AC 4S 7D QD 4C TH 2S\nTS 8H 9S 6S 7S QH 3C AH 7H 8C\n4C 8C TS JS QC 3D 7D 5D 7S JH\n8S 7S 9D QC AC 7C 6D 2H JH KC\nJS KD 3C 6S 4S 7C AH QC KS 5H\nKS 6S 4H JD QS TC 8H KC 6H AS\nKH 7C TC 6S TD JC 5C 7D AH 3S\n3H 4C 4H TC TH 6S 7H 6D 9C QH\n7D 5H 4S 8C JS 4D 3D 8S QH KC\n3H 6S AD 7H 3S QC 8S 4S 7S JS\n3S JD KH TH 6H QS 9C 6C 2D QD\n4S QH 4D 5H KC 7D 6D 8D TH 5S\nTD AD 6S 7H KD KH 9H 5S KC JC\n3H QC AS TS 4S QD KS 9C 7S KC\nTS 6S QC 6C TH TC 9D 5C 5D KD\nJS 3S 4H KD 4C QD 6D 9S JC 9D\n8S JS 6D 4H JH 6H 6S 6C KS KH\nAC 7D 5D TC 9S KH 6S QD 6H AS\nAS 7H 6D QH 8D TH 2S KH 5C 5H\n4C 7C 3D QC TC 4S KH 8C 2D JS\n6H 5D 7S 5H 9C 9H JH 8S TH 7H\nAS JS 2S QD KH 8H 4S AC 8D 8S\n3H 4C TD KD 8C JC 5C QS 2D JD\nTS 7D 5D 6C 2C QS 2H 3C AH KS\n4S 7C 9C 7D JH 6C 5C 8H 9D QD\n2S TD 7S 6D 9C 9S QS KH QH 5C\nJC 6S 9C QH JH 8D 7S JS KH 2H\n8D 5H TH KC 4D 4S 3S 6S 3D QS\n2D JD 4C TD 7C 6D TH 7S JC AH\nQS 7S 4C TH 9D TS AD 4D 3H 6H\n2D 3H 7D JD 3D AS 2S 9C QC 8S\n4H 9H 9C 2C 7S JH KD 5C 5D 6H\nTC 9H 8H JC 3C 9S 8D KS AD KC\nTS 5H JD QS QH QC 8D 5D KH AH\n5D AS 8S 6S 4C AH QC QD TH 7H\n3H 4H 7D 6S 4S 9H AS 8H JS 9D\nJD 8C 2C 9D 7D 5H 5S 9S JC KD\nKD 9C 4S QD AH 7C AD 9D AC TD\n6S 4H 4S 9C 8D KS TC 9D JH 7C\n5S JC 5H 4S QH AC 2C JS 2S 9S\n8C 5H AS QD AD 5C 7D 8S QC TD\nJC 4C 8D 5C KH QS 4D 6H 2H 2C\nTH 4S 2D KC 3H QD AC 7H AD 9D\nKH QD AS 8H TH KC 8D 7S QH 8C\nJC 6C 7D 8C KH AD QS 2H 6S 2D\nJC KH 2D 7D JS QC 5H 4C 5D AD\nTS 3S AD 4S TD 2D TH 6S 9H JH\n9H 2D QS 2C 4S 3D KH AS AC 9D\nKH 6S 8H 4S KD 7D 9D TS QD QC\nJH 5H AH KS AS AD JC QC 5S KH\n5D 7D 6D KS KD 3D 7C 4D JD 3S\nAC JS 8D 5H 9C 3H 4H 4D TS 2C\n6H KS KH 9D 7C 2S 6S 8S 2H 3D\n6H AC JS 7S 3S TD 8H 3H 4H TH\n9H TC QC KC 5C KS 6H 4H AC 8S\nTC 7D QH 4S JC TS 6D 6C AC KH\nQH 7D 7C JH QS QD TH 3H 5D KS\n3D 5S 8D JS 4C 2C KS 7H 9C 4H\n5H 8S 4H TD 2C 3S QD QC 3H KC\nQC JS KD 9C AD 5S 9D 7D 7H TS\n8C JC KH 7C 7S 6C TS 2C QD TH\n5S 9D TH 3C 7S QH 8S 9C 2H 5H\n5D 9H 6H 2S JS KH 3H 7C 2H 5S\nJD 5D 5S 2C TC 2S 6S 6C 3C 8S\n4D KH 8H 4H 2D KS 3H 5C 2S 9H\n3S 2D TD 7H 8S 6H JD KC 9C 8D\n6S QD JH 7C 9H 5H 8S 8H TH TD\nQS 7S TD 7D TS JC KD 7C 3C 2C\n3C JD 8S 4H 2D 2S TD AS 4D AC\nAH KS 6C 4C 4S 7D 8C 9H 6H AS\n5S 3C 9S 2C QS KD 4D 4S AC 5D\n2D TS 2C JS KH QH 5D 8C AS KC\nKD 3H 6C TH 8S 7S KH 6H 9S AC\n6H 7S 6C QS AH 2S 2H 4H 5D 5H\n5H JC QD 2C 2S JD AS QC 6S 7D\n6C TC AS KD 8H 9D 2C 7D JH 9S\n2H 4C 6C AH 8S TD 3H TH 7C TS\nKD 4S TS 6C QH 8D 9D 9C AH 7D\n6D JS 5C QD QC 9C 5D 8C 2H KD\n3C QH JH AD 6S AH KC 8S 6D 6H\n3D 7C 4C 7S 5S 3S 6S 5H JC 3C\nQH 7C 5H 3C 3S 8C TS 4C KD 9C\nQD 3S 7S 5H 7H QH JC 7C 8C KD\n3C KD KH 2S 4C TS AC 6S 2C 7C\n2C KH 3C 4C 6H 4D 5H 5S 7S QD\n4D 7C 8S QD TS 9D KS 6H KD 3C\nQS 4D TS 7S 4C 3H QD 8D 9S TC\nTS QH AC 6S 3C 9H 9D QS 8S 6H\n3S 7S 5D 4S JS 2D 6C QH 6S TH\n4C 4H AS JS 5D 3D TS 9C AC 8S\n6S 9C 7C 3S 5C QS AD AS 6H 3C\n9S 8C 7H 3H 6S 7C AS 9H JD KH\n3D 3H 7S 4D 6C 7C AC 2H 9C TH\n4H 5S 3H AC TC TH 9C 9H 9S 8D\n8D 9H 5H 4D 6C 2H QD 6S 5D 3S\n4C 5C JD QS 4D 3H TH AC QH 8C\nQC 5S 3C 7H AD 4C KS 4H JD 6D\nQS AH 3H KS 9H 2S JS JH 5H 2H\n2H 5S TH 6S TS 3S KS 3C 5H JS\n2D 9S 7H 3D KC JH 6D 7D JS TD\nAC JS 8H 2C 8C JH JC 2D TH 7S\n5D 9S 8H 2H 3D TC AH JC KD 9C\n9D QD JC 2H 6D KH TS 9S QH TH\n2C 8D 4S JD 5H 3H TH TC 9C KC\nAS 3D 9H 7D 4D TH KH 2H 7S 3H\n4H 7S KS 2S JS TS 8S 2H QD 8D\n5S 6H JH KS 8H 2S QC AC 6S 3S\nJC AS AD QS 8H 6C KH 4C 4D QD\n2S 3D TS TD 9S KS 6S QS 5C 8D\n3C 6D 4S QC KC JH QD TH KH AD\n9H AH 4D KS 2S 8D JH JC 7C QS\n2D 6C TH 3C 8H QD QH 2S 3S KS\n6H 5D 9S 4C TS TD JS QD 9D JD\n5H 8H KH 8S KS 7C TD AD 4S KD\n2C 7C JC 5S AS 6C 7D 8S 5H 9C\n6S QD 9S TS KH QS 5S QH 3C KC\n7D 3H 3C KD 5C AS JH 7H 6H JD\n9D 5C 9H KC 8H KS 4S AD 4D 2S\n3S JD QD 8D 2S 7C 5S 6S 5H TS\n6D 9S KC TD 3S 6H QD JD 5C 8D\n5H 9D TS KD 8D 6H TD QC 4C 7D\n6D 4S JD 9D AH 9S AS TD 9H QD\n2D 5S 2H 9C 6H 9S TD QC 7D TC\n3S 2H KS TS 2C 9C 8S JS 9D 7D\n3C KC 6D 5D 6C 6H 8S AS 7S QS\nJH 9S 2H 8D 4C 8H 9H AD TH KH\nQC AS 2S JS 5C 6H KD 3H 7H 2C\nQD 8H 2S 8D 3S 6D AH 2C TC 5C\nJD JS TS 8S 3H 5D TD KC JC 6H\n6S QS TC 3H 5D AH JC 7C 7D 4H\n7C 5D 8H 9C 2H 9H JH KH 5S 2C\n9C 7H 6S TH 3S QC QD 4C AC JD\n2H 5D 9S 7D KC 3S QS 2D AS KH\n2S 4S 2H 7D 5C TD TH QH 9S 4D\n6D 3S TS 6H 4H KS 9D 8H 5S 2D\n9H KS 4H 3S 5C 5D KH 6H 6S JS\nKC AS 8C 4C JC KH QC TH QD AH\n6S KH 9S 2C 5H TC 3C 7H JC 4D\nJD 4S 6S 5S 8D 7H 7S 4D 4C 2H\n7H 9H 5D KH 9C 7C TS TC 7S 5H\n4C 8D QC TS 4S 9H 3D AD JS 7C\n8C QS 5C 5D 3H JS AH KC 4S 9D\nTS JD 8S QS TH JH KH 2D QD JS\nJD QC 5D 6S 9H 3S 2C 8H 9S TS\n2S 4C AD 7H JC 5C 2D 6D 4H 3D\n7S JS 2C 4H 8C AD QD 9C 3S TD\nJD TS 4C 6H 9H 7D QD 6D 3C AS\nAS 7C 4C 6S 5D 5S 5C JS QC 4S\nKD 6S 9S 7C 3C 5S 7D JH QD JS\n4S 7S JH 2C 8S 5D 7H 3D QH AD\nTD 6H 2H 8D 4H 2D 7C AD KH 5D\nTS 3S 5H 2C QD AH 2S 5C KH TD\nKC 4D 8C 5D AS 6C 2H 2S 9H 7C\nKD JS QC TS QS KH JH 2C 5D AD\n3S 5H KC 6C 9H 3H 2H AD 7D 7S\n7S JS JH KD 8S 7D 2S 9H 7C 2H\n9H 2D 8D QC 6S AD AS 8H 5H 6C\n2S 7H 6C 6D 7D 8C 5D 9D JC 3C\n7C 9C 7H JD 2H KD 3S KH AD 4S\nQH AS 9H 4D JD KS KD TS KH 5H\n4C 8H 5S 3S 3D 7D TD AD 7S KC\nJS 8S 5S JC 8H TH 9C 4D 5D KC\n7C 5S 9C QD 2C QH JS 5H 8D KH\nTD 2S KS 3D AD KC 7S TC 3C 5D\n4C 2S AD QS 6C 9S QD TH QH 5C\n8C AD QS 2D 2S KC JD KS 6C JC\n8D 4D JS 2H 5D QD 7S 7D QH TS\n6S 7H 3S 8C 8S 9D QS 8H 6C 9S\n4S TC 2S 5C QD 4D QS 6D TH 6S\n3S 5C 9D 6H 8D 4C 7D TC 7C TD\nAH 6S AS 7H 5S KD 3H 5H AC 4C\n8D 8S AH KS QS 2C AD 6H 7D 5D\n6H 9H 9S 2H QS 8S 9C 5D 2D KD\nTS QC 5S JH 7D 7S TH 9S 9H AC\n7H 3H 6S KC 4D 6D 5C 4S QD TS\nTD 2S 7C QD 3H JH 9D 4H 7S 7H\nKS 3D 4H 5H TC 2S AS 2D 6D 7D\n8H 3C 7H TD 3H AD KC TH 9C KH\nTC 4C 2C 9S 9D 9C 5C 2H JD 3C\n3H AC TS 5D AD 8D 6H QC 6S 8C\n2S TS 3S JD 7H 8S QH 4C 5S 8D\nAC 4S 6C 3C KH 3D 7C 2D 8S 2H\n4H 6C 8S TH 2H 4S 8H 9S 3H 7S\n7C 4C 9C 2C 5C AS 5D KD 4D QH\n9H 4H TS AS 7D 8D 5D 9S 8C 2H\nQC KD AC AD 2H 7S AS 3S 2D 9S\n2H QC 8H TC 6D QD QS 5D KH 3C\nTH JD QS 4C 2S 5S AD 7H 3S AS\n7H JS 3D 6C 3S 6D AS 9S AC QS\n9C TS AS 8C TC 8S 6H 9D 8D 6C\n4D JD 9C KC 7C 6D KS 3S 8C AS\n3H 6S TC 8D TS 3S KC 9S 7C AS\n8C QC 4H 4S 8S 6C 3S TC AH AC\n4D 7D 5C AS 2H 6S TS QC AD TC\nQD QC 8S 4S TH 3D AH TS JH 4H\n5C 2D 9S 2C 3H 3C 9D QD QH 7D\nKC 9H 6C KD 7S 3C 4D AS TC 2D\n3D JS 4D 9D KS 7D TH QC 3H 3C\n8D 5S 2H 9D 3H 8C 4C 4H 3C TH\nJC TH 4S 6S JD 2D 4D 6C 3D 4C\nTS 3S 2D 4H AC 2C 6S 2H JH 6H\nTD 8S AD TC AH AC JH 9S 6S 7S\n6C KC 4S JD 8D 9H 5S 7H QH AH\nKD 8D TS JH 5C 5H 3H AD AS JS\n2D 4H 3D 6C 8C 7S AD 5D 5C 8S\nTD 5D 7S 9C 4S 5H 6C 8C 4C 8S\nJS QH 9C AS 5C QS JC 3D QC 7C\nJC 9C KH JH QS QC 2C TS 3D AD\n5D JH AC 5C 9S TS 4C JD 8C KS\nKC AS 2D KH 9H 2C 5S 4D 3D 6H\nTH AH 2D 8S JC 3D 8C QH 7S 3S\n8H QD 4H JC AS KH KS 3C 9S 6D\n9S QH 7D 9C 4S AC 7H KH 4D KD\nAH AD TH 6D 9C 9S KD KS QH 4H\nQD 6H 9C 7C QS 6D 6S 9D 5S JH\nAH 8D 5H QD 2H JC KS 4H KH 5S\n5C 2S JS 8D 9C 8C 3D AS KC AH\nJD 9S 2H QS 8H 5S 8C TH 5C 4C\nQC QS 8C 2S 2C 3S 9C 4C KS KH\n2D 5D 8S AH AD TD 2C JS KS 8C\nTC 5S 5H 8H QC 9H 6H JD 4H 9S\n3C JH 4H 9H AH 4S 2H 4C 8D AC\n8S TH 4D 7D 6D QD QS 7S TC 7C\nKH 6D 2D JD 5H JS QD JH 4H 4S\n9C 7S JH 4S 3S TS QC 8C TC 4H\nQH 9D 4D JH QS 3S 2C 7C 6C 2D\n4H 9S JD 5C 5H AH 9D TS 2D 4C\nKS JH TS 5D 2D AH JS 7H AS 8D\nJS AH 8C AD KS 5S 8H 2C 6C TH\n2H 5D AD AC KS 3D 8H TS 6H QC\n6D 4H TS 9C 5H JS JH 6S JD 4C\nJH QH 4H 2C 6D 3C 5D 4C QS KC\n6H 4H 6C 7H 6S 2S 8S KH QC 8C\n3H 3D 5D KS 4H TD AD 3S 4D TS\n5S 7C 8S 7D 2C KS 7S 6C 8C JS\n5D 2H 3S 7C 5C QD 5H 6D 9C 9H\nJS 2S KD 9S 8D TD TS AC 8C 9D\n5H QD 2S AC 8C 9H KS 7C 4S 3C\nKH AS 3H 8S 9C JS QS 4S AD 4D\nAS 2S TD AD 4D 9H JC 4C 5H QS\n5D 7C 4H TC 2D 6C JS 4S KC 3S\n4C 2C 5D AC 9H 3D JD 8S QS QH\n2C 8S 6H 3C QH 6D TC KD AC AH\nQC 6C 3S QS 4S AC 8D 5C AD KH\n5S 4C AC KH AS QC 2C 5C 8D 9C\n8H JD 3C KH 8D 5C 9C QD QH 9D\n7H TS 2C 8C 4S TD JC 9C 5H QH\nJS 4S 2C 7C TH 6C AS KS 7S JD\nJH 7C 9H 7H TC 5H 3D 6D 5D 4D\n2C QD JH 2H 9D 5S 3D TD AD KS\nJD QH 3S 4D TH 7D 6S QS KS 4H\nTC KS 5S 8D 8H AD 2S 2D 4C JH\n5S JH TC 3S 2D QS 9D 4C KD 9S\nAC KH 3H AS 9D KC 9H QD 6C 6S\n9H 7S 3D 5C 7D KC TD 8H 4H 6S\n3C 7H 8H TC QD 4D 7S 6S QH 6C\n6D AD 4C QD 6C 5D 7D 9D KS TS\nJH 2H JD 9S 7S TS KH 8D 5D 8H\n2D 9S 4C 7D 9D 5H QD 6D AC 6S\n7S 6D JC QD JH 4C 6S QS 2H 7D\n8C TD JH KD 2H 5C QS 2C JS 7S\nTC 5H 4H JH QD 3S 5S 5D 8S KH\nKS KH 7C 2C 5D JH 6S 9C 6D JC\n5H AH JD 9C JS KC 2H 6H 4D 5S\nAS 3C TH QC 6H 9C 8S 8C TD 7C\nKC 2C QD 9C KH 4D 7S 3C TS 9H\n9C QC 2S TS 8C TD 9S QD 3S 3C\n4D 9D TH JH AH 6S 2S JD QH JS\nQD 9H 6C KD 7D 7H 5D 6S 8H AH\n8H 3C 4S 2H 5H QS QH 7S 4H AC\nQS 3C 7S 9S 4H 3S AH KS 9D 7C\nAD 5S 6S 2H 2D 5H TC 4S 3C 8C\nQH TS 6S 4D JS KS JH AS 8S 6D\n2C 8S 2S TD 5H AS TC TS 6C KC\nKC TS 8H 2H 3H 7C 4C 5S TH TD\nKD AD KH 7H 7S 5D 5H 5S 2D 9C\nAD 9S 3D 7S 8C QC 7C 9C KD KS\n3C QC 9S 8C 4D 5C AS QD 6C 2C\n2H KC 8S JD 7S AC 8D 5C 2S 4D\n9D QH 3D 2S TC 3S KS 3C 9H TD\nKD 6S AC 2C 7H 5H 3S 6C 6H 8C\nQH TC 8S 6S KH TH 4H 5D TS 4D\n8C JS 4H 6H 2C 2H 7D AC QD 3D\nQS KC 6S 2D 5S 4H TD 3H JH 4C\n7S 5H 7H 8H KH 6H QS TH KD 7D\n5H AD KD 7C KH 5S TD 6D 3C 6C\n8C 9C 5H JD 7C KC KH 7H 2H 3S\n7S 4H AD 4D 8S QS TH 3D 7H 5S\n8D TC KS KD 9S 6D AD JD 5C 2S\n7H 8H 6C QD 2H 6H 9D TC 9S 7C\n8D 6D 4C 7C 6C 3C TH KH JS JH\n5S 3S 8S JS 9H AS AD 8H 7S KD\nJH 7C 2C KC 5H AS AD 9C 9S JS\nAD AC 2C 6S QD 7C 3H TH KS KD\n9D JD 4H 8H 4C KH 7S TS 8C KC\n3S 5S 2H 7S 6H 7D KS 5C 6D AD\n5S 8C 9H QS 7H 7S 2H 6C 7D TD\nQS 5S TD AC 9D KC 3D TC 2D 4D\nTD 2H 7D JD QD 4C 7H 5D KC 3D\n4C 3H 8S KD QH 5S QC 9H TC 5H\n9C QD TH 5H TS 5C 9H AH QH 2C\n4D 6S 3C AC 6C 3D 2C 2H TD TH\nAC 9C 5D QC 4D AD 8D 6D 8C KC\nAD 3C 4H AC 8D 8H 7S 9S TD JC\n4H 9H QH JS 2D TH TD TC KD KS\n5S 6S 9S 8D TH AS KH 5H 5C 8S\nJD 2S 9S 6S 5S 8S 5D 7S 7H 9D\n5D 8C 4C 9D AD TS 2C 7D KD TC\n8S QS 4D KC 5C 8D 4S KH JD KD\nAS 5C AD QH 7D 2H 9S 7H 7C TC\n2S 8S JD KH 7S 6C 6D AD 5D QC\n9H 6H 3S 8C 8H AH TC 4H JS TD\n2C TS 4D 7H 2D QC 9C 5D TH 7C\n6C 8H QC 5D TS JH 5C 5H 9H 4S\n2D QC 7H AS JS 8S 2H 4C 4H 8D\nJS 6S AC KD 3D 3C 4S 7H TH KC\nQH KH 6S QS 5S 4H 3C QD 3S 3H\n7H AS KH 8C 4H 9C 5S 3D 6S TS\n9C 7C 3H 5S QD 2C 3D AD AC 5H\nJH TD 2D 4C TS 3H KH AD 3S 7S\nAS 4C 5H 4D 6S KD JC 3C 6H 2D\n3H 6S 8C 2D TH 4S AH QH AD 5H\n7C 2S 9H 7H KC 5C 6D 5S 3H JC\n3C TC 9C 4H QD TD JH 6D 9H 5S\n7C 6S 5C 5D 6C 4S 7H 9H 6H AH\nAD 2H 7D KC 2C 4C 2S 9S 7H 3S\nTH 4C 8S 6S 3S AD KS AS JH TD\n5C TD 4S 4D AD 6S 5D TC 9C 7D\n8H 3S 4D 4S 5S 6H 5C AC 3H 3D\n9H 3C AC 4S QS 8S 9D QH 5H 4D\nJC 6C 5H TS AC 9C JD 8C 7C QD\n8S 8H 9C JD 2D QC QH 6H 3C 8D\nKS JS 2H 6H 5H QH QS 3H 7C 6D\nTC 3H 4S 7H QC 2H 3S 8C JS KH\nAH 8H 5S 4C 9H JD 3H 7S JC AC\n3C 2D 4C 5S 6C 4S QS 3S JD 3D\n5H 2D TC AH KS 6D 7H AD 8C 6H\n6C 7S 3C JD 7C 8H KS KH AH 6D\nAH 7D 3H 8H 8S 7H QS 5H 9D 2D\nJD AC 4H 7S 8S 9S KS AS 9D QH\n7S 2C 8S 5S JH QS JC AH KD 4C\nAH 2S 9H 4H 8D TS TD 6H QH JD\n4H JC 3H QS 6D 7S 9C 8S 9D 8D\n5H TD 4S 9S 4C 8C 8D 7H 3H 3D\nQS KH 3S 2C 2S 3C 7S TD 4S QD\n7C TD 4D 5S KH AC AS 7H 4C 6C\n2S 5H 6D JD 9H QS 8S 2C 2H TD\n2S TS 6H 9H 7S 4H JC 4C 5D 5S\n2C 5H 7D 4H 3S QH JC JS 6D 8H\n4C QH 7C QD 3S AD TH 8S 5S TS\n9H TC 2S TD JC 7D 3S 3D TH QH\n7D 4C 8S 5C JH 8H 6S 3S KC 3H\nJC 3H KH TC QH TH 6H 2C AC 5H\nQS 2H 9D 2C AS 6S 6C 2S 8C 8S\n9H 7D QC TH 4H KD QS AC 7S 3C\n4D JH 6S 5S 8H KS 9S QC 3S AS\nJD 2D 6S 7S TC 9H KC 3H 7D KD\n2H KH 7C 4D 4S 3H JS QD 7D KC\n4C JC AS 9D 3C JS 6C 8H QD 4D\nAH JS 3S 6C 4C 3D JH 6D 9C 9H\n9H 2D 8C 7H 5S KS 6H 9C 2S TC\n6C 8C AD 7H 6H 3D KH AS 5D TH\nKS 8C 3S TS 8S 4D 5S 9S 6C 4H\n9H 4S 4H 5C 7D KC 2D 2H 9D JH\n5C JS TC 9D 9H 5H 7S KH JC 6S\n7C 9H 8H 4D JC KH JD 2H TD TC\n8H 6C 2H 2C KH 6H 9D QS QH 5H\nAC 7D 2S 3D QD JC 2D 8D JD JH\n2H JC 2D 7H 2C 3C 8D KD TD 4H\n3S 4H 6D 8D TS 3H TD 3D 6H TH\nJH JC 3S AC QH 9H 7H 8S QC 2C\n7H TD QS 4S 8S 9C 2S 5D 4D 2H\n3D TS 3H 2S QC 8H 6H KC JC KS\n5D JD 7D TC 8C 6C 9S 3D 8D AC\n8H 6H JH 6C 5D 8D 8S 4H AD 2C\n9D 4H 2D 2C 3S TS AS TC 3C 5D\n4D TH 5H KS QS 6C 4S 2H 3D AD\n5C KC 6H 2C 5S 3C 4D 2D 9H 9S\nJD 4C 3H TH QH 9H 5S AH 8S AC\n7D 9S 6S 2H TD 9C 4H 8H QS 4C\n3C 6H 5D 4H 8C 9C KC 6S QD QS\n3S 9H KD TC 2D JS 8C 6S 4H 4S\n2S 4C 8S QS 6H KH 3H TH 8C 5D\n2C KH 5S 3S 7S 7H 6C 9D QD 8D\n8H KS AC 2D KH TS 6C JS KC 7H\n9C KS 5C TD QC AH 6C 5H 9S 7C\n5D 4D 3H 4H 6S 7C 7S AH QD TD\n2H 7D QC 6S TC TS AH 7S 9D 3H\nTH 5H QD 9S KS 7S 7C 6H 8C TD\nTH 2D 4D QC 5C 7D JD AH 9C 4H\n4H 3H AH 8D 6H QC QH 9H 2H 2C\n2D AD 4C TS 6H 7S TH 4H QS TD\n3C KD 2H 3H QS JD TC QC 5D 8H\nKS JC QD TH 9S KD 8D 8C 2D 9C\n3C QD KD 6D 4D 8D AH AD QC 8S\n8H 3S 9D 2S 3H KS 6H 4C 7C KC\nTH 9S 5C 3D 7D 6H AC 7S 4D 2C\n5C 3D JD 4D 2D 6D 5H 9H 4C KH\nAS 7H TD 6C 2H 3D QD KS 4C 4S\nJC 3C AC 7C JD JS 8H 9S QC 5D\nJD 6S 5S 2H AS 8C 7D 5H JH 3D\n8D TC 5S 9S 8S 3H JC 5H 7S AS\n5C TD 3D 7D 4H 8D 7H 4D 5D JS\nQS 9C KS TD 2S 8S 5C 2H 4H AS\nTH 7S 4H 7D 3H JD KD 5D 2S KC\nJD 7H 4S 8H 4C JS 6H QH 5S 4H\n2C QS 8C 5S 3H QC 2S 6C QD AD\n8C 3D JD TC 4H 2H AD 5S AC 2S\n5D 2C JS 2D AD 9D 3D 4C 4S JH\n8D 5H 5D 6H 7S 4D KS 9D TD JD\n3D 6D 9C 2S AS 7D 5S 5C 8H JD\n7C 8S 3S 6S 5H JD TC AD 7H 7S\n2S 9D TS 4D AC 8D 6C QD JD 3H\n9S KH 2C 3C AC 3D 5H 6H 8D 5D\nKS 3D 2D 6S AS 4C 2S 7C 7H KH\nAC 2H 3S JC 5C QH 4D 2D 5H 7S\nTS AS JD 8C 6H JC 8S 5S 2C 5D\n7S QH 7H 6C QC 8H 2D 7C JD 2S\n2C QD 2S 2H JC 9C 5D 2D JD JH\n7C 5C 9C 8S 7D 6D 8D 6C 9S JH\n2C AD 6S 5H 3S KS 7S 9D KH 4C\n7H 6C 2C 5C TH 9D 8D 3S QC AH\n5S KC 6H TC 5H 8S TH 6D 3C AH\n9C KD 4H AD TD 9S 4S 7D 6H 5D\n7H 5C 5H 6D AS 4C KD KH 4H 9D\n3C 2S 5C 6C JD QS 2H 9D 7D 3H\nAC 2S 6S 7S JS QD 5C QS 6H AD\n5H TH QC 7H TC 3S 7C 6D KC 3D\n4H 3D QC 9S 8H 2C 3S JC KS 5C\n4S 6S 2C 6H 8S 3S 3D 9H 3H JS\n4S 8C 4D 2D 8H 9H 7D 9D AH TS\n9S 2C 9H 4C 8D AS 7D 3D 6D 5S\n6S 4C 7H 8C 3H 5H JC AH 9D 9C\n2S 7C 5S JD 8C 3S 3D 4D 7D 6S\n3C KC 4S 5D 7D 3D JD 7H 3H 4H\n9C 9H 4H 4D TH 6D QD 8S 9S 7S\n2H AC 8S 4S AD 8C 2C AH 7D TC\nTS 9H 3C AD KS TC 3D 8C 8H JD\nQC 8D 2C 3C 7D 7C JD 9H 9C 6C\nAH 6S JS JH 5D AS QC 2C JD TD\n9H KD 2H 5D 2D 3S 7D TC AH TS\nTD 8H AS 5D AH QC AC 6S TC 5H\nKS 4S 7H 4D 8D 9C TC 2H 6H 3H\n3H KD 4S QD QH 3D 8H 8C TD 7S\n8S JD TC AH JS QS 2D KH KS 4D\n3C AD JC KD JS KH 4S TH 9H 2C\nQC 5S JS 9S KS AS 7C QD 2S JD\nKC 5S QS 3S 2D AC 5D 9H 8H KS\n6H 9C TC AD 2C 6D 5S JD 6C 7C\nQS KH TD QD 2C 3H 8S 2S QC AH\n9D 9H JH TC QH 3C 2S JS 5C 7H\n6C 3S 3D 2S 4S QD 2D TH 5D 2C\n2D 6H 6D 2S JC QH AS 7H 4H KH\n5H 6S KS AD TC TS 7C AC 4S 4H\nAD 3C 4H QS 8C 9D KS 2H 2D 4D\n4S 9D 6C 6D 9C AC 8D 3H 7H KD\nJC AH 6C TS JD 6D AD 3S 5D QD\nJC JH JD 3S 7S 8S JS QC 3H 4S\nJD TH 5C 2C AD JS 7H 9S 2H 7S\n8D 3S JH 4D QC AS JD 2C KC 6H\n2C AC 5H KD 5S 7H QD JH AH 2D\nJC QH 8D 8S TC 5H 5C AH 8C 6C\n3H JS 8S QD JH 3C 4H 6D 5C 3S\n6D 4S 4C AH 5H 5S 3H JD 7C 8D\n8H AH 2H 3H JS 3C 7D QC 4H KD\n6S 2H KD 5H 8H 2D 3C 8S 7S QD\n2S 7S KC QC AH TC QS 6D 4C 8D\n5S 9H 2C 3S QD 7S 6C 2H 7C 9D\n3C 6C 5C 5S JD JC KS 3S 5D TS\n7C KS 6S 5S 2S 2D TC 2H 5H QS\nAS 7H 6S TS 5H 9S 9D 3C KD 2H\n4S JS QS 3S 4H 7C 2S AC 6S 9D\n8C JH 2H 5H 7C 5D QH QS KH QC\n3S TD 3H 7C KC 8D 5H 8S KH 8C\n4H KH JD TS 3C 7H AS QC JS 5S\nAH 9D 2C 8D 4D 2D 6H 6C KC 6S\n2S 6H 9D 3S 7H 4D KH 8H KD 3D\n9C TC AC JH KH 4D JD 5H TD 3S\n7S 4H 9D AS 4C 7D QS 9S 2S KH\n3S 8D 8S KS 8C JC 5C KH 2H 5D\n8S QH 2C 4D KC JS QC 9D AC 6H\n8S 8C 7C JS JD 6S 4C 9C AC 4S\nQH 5D 2C 7D JC 8S 2D JS JH 4C\nJS 4C 7S TS JH KC KH 5H QD 4S\nQD 8C 8D 2D 6S TD 9D AC QH 5S\nQH QC JS 3D 3C 5C 4H KH 8S 7H\n7C 2C 5S JC 8S 3H QC 5D 2H KC\n5S 8D KD 6H 4H QD QH 6D AH 3D\n7S KS 6C 2S 4D AC QS 5H TS JD\n7C 2D TC 5D QS AC JS QC 6C KC\n2C KS 4D 3H TS 8S AD 4H 7S 9S\nQD 9H QH 5H 4H 4D KH 3S JC AD\n4D AC KC 8D 6D 4C 2D KH 2C JD\n2C 9H 2D AH 3H 6D 9C 7D TC KS\n8C 3H KD 7C 5C 2S 4S 5H AS AH\nTH JD 4H KD 3H TC 5C 3S AC KH\n6D 7H AH 7S QC 6H 2D TD JD AS\nJH 5D 7H TC 9S 7D JC AS 5S KH\n2H 8C AD TH 6H QD KD 9H 6S 6C\nQH KC 9D 4D 3S JS JH 4H 2C 9H\nTC 7H KH 4H JC 7D 9S 3H QS 7S\nAD 7D JH 6C 7H 4H 3S 3H 4D QH\nJD 2H 5C AS 6C QC 4D 3C TC JH\nAC JD 3H 6H 4C JC AD 7D 7H 9H\n4H TC TS 2C 8C 6S KS 2H JD 9S\n4C 3H QS QC 9S 9H 6D KC 9D 9C\n5C AD 8C 2C QH TH QD JC 8D 8H\nQC 2C 2S QD 9C 4D 3S 8D JH QS\n9D 3S 2C 7S 7C JC TD 3C TC 9H\n3C TS 8H 5C 4C 2C 6S 8D 7C 4H\nKS 7H 2H TC 4H 2C 3S AS AH QS\n8C 2D 2H 2C 4S 4C 6S 7D 5S 3S\nTH QC 5D TD 3C QS KD KC KS AS\n4D AH KD 9H KS 5C 4C 6H JC 7S\nKC 4H 5C QS TC 2H JC 9S AH QH\n4S 9H 3H 5H 3C QD 2H QC JH 8H\n5D AS 7H 2C 3D JH 6H 4C 6S 7D\n9C JD 9H AH JS 8S QH 3H KS 8H\n3S AC QC TS 4D AD 3D AH 8S 9H\n7H 3H QS 9C 9S 5H JH JS AH AC\n8D 3C JD 2H AC 9C 7H 5S 4D 8H\n7C JH 9H 6C JS 9S 7H 8C 9D 4H\n2D AS 9S 6H 4D JS JH 9H AD QD\n6H 7S JH KH AH 7H TD 5S 6S 2C\n8H JH 6S 5H 5S 9D TC 4C QC 9S\n7D 2C KD 3H 5H AS QD 7H JS 4D\nTS QH 6C 8H TH 5H 3C 3H 9C 9D\nAD KH JS 5D 3H AS AC 9S 5C KC\n2C KH 8C JC QS 6D AH 2D KC TC\n9D 3H 2S 7C 4D 6D KH KS 8D 7D\n9H 2S TC JH AC QC 3H 5S 3S 8H\n3S AS KD 8H 4C 3H 7C JH QH TS\n7S 6D 7H 9D JH 4C 3D 3S 6C AS\n4S 2H 2C 4C 8S 5H KC 8C QC QD\n3H 3S 6C QS QC 2D 6S 5D 2C 9D\n2H 8D JH 2S 3H 2D 6C 5C 7S AD\n9H JS 5D QH 8S TS 2H 7S 6S AD\n6D QC 9S 7H 5H 5C 7D KC JD 4H\nQC 5S 9H 9C 4D 6S KS 2S 4C 7C\n9H 7C 4H 8D 3S 6H 5C 8H JS 7S\n2D 6H JS TD 4H 4D JC TH 5H KC\nAC 7C 8D TH 3H 9S 2D 4C KC 4D\nKD QS 9C 7S 3D KS AD TS 4C 4H\nQH 9C 8H 2S 7D KS 7H 5D KD 4C\n9C 2S 2H JC 6S 6C TC QC JH 5C\n7S AC 8H KC 8S 6H QS JC 3D 6S\nJS 2D JH 8C 4S 6H 8H 6D 5D AD\n6H 7D 2S 4H 9H 7C AS AC 8H 5S\n3C JS 4S 6D 5H 2S QH 6S 9C 2C\n3D 5S 6S 9S 4C QS 8D QD 8S TC\n9C 3D AH 9H 5S 2C 7D AD JC 3S\n7H TC AS 3C 6S 6D 7S KH KC 9H\n3S TC 8H 6S 5H JH 8C 7D AC 2S\nQD 9D 9C 3S JC 8C KS 8H 5D 4D\nJS AH JD 6D 9D 8C 9H 9S 8H 3H\n2D 6S 4C 4D 8S AD 4S TC AH 9H\nTS AC QC TH KC 6D 4H 7S 8C 2H\n3C QD JS 9D 5S JC AH 2H TS 9H\n3H 4D QH 5D 9C 5H 7D 4S JC 3S\n8S TH 3H 7C 2H JD JS TS AC 8D\n9C 2H TD KC JD 2S 8C 5S AD 2C\n3D KD 7C 5H 4D QH QD TC 6H 7D\n7H 2C KC 5S KD 6H AH QC 7S QH\n6H 5C AC 5H 2C 9C 2D 7C TD 2S\n4D 9D AH 3D 7C JD 4H 8C 4C KS\nTH 3C JS QH 8H 4C AS 3D QS QC\n4D 7S 5H JH 6D 7D 6H JS KH 3C\nQD 8S 7D 2H 2C 7C JC 2S 5H 8C\nQH 8S 9D TC 2H AD 7C 8D QD 6S\n3S 7C AD 9H 2H 9S JD TS 4C 2D\n3S AS 4H QC 2C 8H 8S 7S TD TC\nJH TH TD 3S 4D 4H 5S 5D QS 2C\n8C QD QH TC 6D 4S 9S 9D 4H QC\n8C JS 9D 6H JD 3H AD 6S TD QC\nKC 8S 3D 7C TD 7D 8D 9H 4S 3S\n6C 4S 3D 9D KD TC KC KS AC 5S\n7C 6S QH 3D JS KD 6H 6D 2D 8C\nJD 2S 5S 4H 8S AC 2D 6S TS 5C\n5H 8C 5S 3C 4S 3D 7C 8D AS 3H\nAS TS 7C 3H AD 7D JC QS 6C 6H\n3S 9S 4C AC QH 5H 5D 9H TS 4H\n6C 5C 7H 7S TD AD JD 5S 2H 2S\n7D 6C KC 3S JD 8D 8S TS QS KH\n8S QS 8D 6C TH AC AH 2C 8H 9S\n7H TD KH QH 8S 3D 4D AH JD AS\nTS 3D 2H JC 2S JH KH 6C QC JS\nKC TH 2D 6H 7S 2S TC 8C 9D QS\n3C 9D 6S KH 8H 6D 5D TH 2C 2H\n6H TC 7D AD 4D 8S TS 9H TD 7S\nJS 6D JD JC 2H AC 6C 3D KH 8D\nKH JD 9S 5D 4H 4C 3H 7S QS 5C\n4H JD 5D 3S 3C 4D KH QH QS 7S\nJD TS 8S QD AH 4C 6H 3S 5S 2C\nQS 3D JD AS 8D TH 7C 6S QC KS\n7S 2H 8C QC 7H AC 6D 2D TH KH\n5S 6C 7H KH 7D AH 8C 5C 7S 3D\n3C KD AD 7D 6C 4D KS 2D 8C 4S\n7C 8D 5S 2D 2S AH AD 2C 9D TD\n3C AD 4S KS JH 7C 5C 8C 9C TH\nAS TD 4D 7C JD 8C QH 3C 5H 9S\n3H 9C 8S 9S 6S QD KS AH 5H JH\nQC 9C 5S 4H 2H TD 7D AS 8C 9D\n8C 2C 9D KD TC 7S 3D KH QC 3C\n4D AS 4C QS 5S 9D 6S JD QH KS\n6D AH 6C 4C 5H TS 9H 7D 3D 5S\nQS JD 7C 8D 9C AC 3S 6S 6C KH\n8H JH 5D 9S 6D AS 6S 3S QC 7H\nQD AD 5C JH 2H AH 4H AS KC 2C\nJH 9C 2C 6H 2D JS 5D 9H KC 6D\n7D 9D KD TH 3H AS 6S QC 6H AD\nJD 4H 7D KC 3H JS 3C TH 3D QS\n4C 3H 8C QD 5H 6H AS 8H AD JD\nTH 8S KD 5D QC 7D JS 5S 5H TS\n7D KC 9D QS 3H 3C 6D TS 7S AH\n7C 4H 7H AH QC AC 4D 5D 6D TH\n3C 4H 2S KD 8H 5H JH TC 6C JD\n4S 8C 3D 4H JS TD 7S JH QS KD\n7C QC KD 4D 7H 6S AD TD TC KH\n5H 9H KC 3H 4D 3D AD 6S QD 6H\nTH 7C 6H TS QH 5S 2C KC TD 6S\n7C 4D 5S JD JH 7D AC KD KH 4H\n7D 6C 8D 8H 5C JH 8S QD TH JD\n8D 7D 6C 7C 9D KD AS 5C QH JH\n9S 2C 8C 3C 4C KS JH 2D 8D 4H\n7S 6C JH KH 8H 3H 9D 2D AH 6D\n4D TC 9C 8D 7H TD KS TH KD 3C\nJD 9H 8D QD AS KD 9D 2C 2S 9C\n8D 3H 5C 7H KS 5H QH 2D 8C 9H\n2D TH 6D QD 6C KC 3H 3S AD 4C\n4H 3H JS 9D 3C TC 5H QH QC JC\n3D 5C 6H 3S 3C JC 5S 7S 2S QH\nAC 5C 8C 4D 5D 4H 2S QD 3C 3H\n2C TD AH 9C KD JS 6S QD 4C QC\nQS 8C 3S 4H TC JS 3H 7C JC AD\n5H 4D 9C KS JC TD 9S TS 8S 9H\nQD TS 7D AS AC 2C TD 6H 8H AH\n6S AD 8C 4S 9H 8D 9D KH 8S 3C\nQS 4D 2D 7S KH JS JC AD 4C 3C\nQS 9S 7H KC TD TH 5H JS AC JH\n6D AC 2S QS 7C AS KS 6S KH 5S\n6D 8H KH 3C QS 2H 5C 9C 9D 6C\nJS 2C 4C 6H 7D JC AC QD TD 3H\n4H QC 8H JD 4C KD KS 5C KC 7S\n6D 2D 3H 2S QD 5S 7H AS TH 6S\nAS 6D 8D 2C 8S TD 8H QD JC AH\n9C 9H 2D TD QH 2H 5C TC 3D 8H\nKC 8S 3D KH 2S TS TC 6S 4D JH\n9H 9D QS AC KC 6H 5D 4D 8D AH\n9S 5C QS 4H 7C 7D 2H 8S AD JS\n3D AC 9S AS 2C 2D 2H 3H JC KH\n7H QH KH JD TC KS 5S 8H 4C 8D\n2H 7H 3S 2S 5H QS 3C AS 9H KD\nAD 3D JD 6H 5S 9C 6D AC 9S 3S\n3D 5D 9C 2D AC 4S 2S AD 6C 6S\nQC 4C 2D 3H 6S KC QH QD 2H JH\nQC 3C 8S 4D 9S 2H 5C 8H QS QD\n6D KD 6S 7H 3S KH 2H 5C JC 6C\n3S 9S TC 6S 8H 2D AD 7S 8S TS\n3C 6H 9C 3H 5C JC 8H QH TD QD\n3C JS QD 5D TD 2C KH 9H TH AS\n9S TC JD 3D 5C 5H AD QH 9H KC\nTC 7H 4H 8H 3H TD 6S AC 7C 2S\nQS 9D 5D 3C JC KS 4D 6C JH 2S\n9S 6S 3C 7H TS 4C KD 6D 3D 9C\n2D 9H AH AC 7H 2S JH 3S 7C QC\nQD 9H 3C 2H AC AS 8S KD 8C KH\n2D 7S TD TH 6D JD 8D 4D 2H 5S\n8S QH KD JD QS JH 4D KC 5H 3S\n3C KH QC 6D 8H 3S AH 7D TD 2D\n5S 9H QH 4S 6S 6C 6D TS TH 7S\n6C 4C 6D QS JS 9C TS 3H 8D 8S\nJS 5C 7S AS 2C AH 2H AD 5S TC\nKD 6C 9C 9D TS 2S JC 4H 2C QD\nQS 9H TC 3H KC KS 4H 3C AD TH\nKH 9C 2H KD 9D TC 7S KC JH 2D\n7C 3S KC AS 8C 5D 9C 9S QH 3H\n2D 8C TD 4C 2H QC 5D TC 2C 7D\nKS 4D 6C QH TD KH 5D 7C AD 8D\n2S 9S 8S 4C 8C 3D 6H QD 7C 7H\n6C 8S QH 5H TS 5C 3C 4S 2S 2H\n8S 6S 2H JC 3S 3H 9D 8C 2S 7H\nQC 2C 8H 9C AC JD 4C 4H 6S 3S\n3H 3S 7D 4C 9S 5H 8H JC 3D TC\nQH 2S 2D 9S KD QD 9H AD 6D 9C\n8D 2D KS 9S JC 4C JD KC 4S TH\nKH TS 6D 4D 5C KD 5H AS 9H AD\nQD JS 7C 6D 5D 5C TH 5H QH QS\n9D QH KH 5H JH 4C 4D TC TH 6C\nKH AS TS 9D KD 9C 7S 4D 8H 5S\nKH AS 2S 7D 9D 4C TS TH AH 7C\nKS 4D AC 8S 9S 8D TH QH 9D 5C\n5D 5C 8C QS TC 4C 3D 3S 2C 8D\n9D KS 2D 3C KC 4S 8C KH 6C JC\n8H AH 6H 7D 7S QD 3C 4C 6C KC\n3H 2C QH 8H AS 7D 4C 8C 4H KC\nQD 5S 4H 2C TD AH JH QH 4C 8S\n3H QS 5S JS 8H 2S 9H 9C 3S 2C\n6H TS 7S JC QD AC TD KC 5S 3H\nQH AS QS 7D JC KC 2C 4C 5C 5S\nQH 3D AS JS 4H 8D 7H JC 2S 9C\n5D 4D 2S 4S 9D 9C 2D QS 8H 7H\n6D 7H 3H JS TS AC 2D JH 7C 8S\nJH 5H KC 3C TC 5S 9H 4C 8H 9D\n8S KC 5H 9H AD KS 9D KH 8D AH\nJC 2H 9H KS 6S 3H QC 5H AH 9C\n5C KH 5S AD 6C JC 9H QC 9C TD\n5S 5D JC QH 2D KS 8H QS 2H TS\nJH 5H 5S AH 7H 3C 8S AS TD KH\n6H 3D JD 2C 4C KC 7S AH 6C JH\n4C KS 9D AD 7S KC 7D 8H 3S 9C\n7H 5C 5H 3C 8H QC 3D KH 6D JC\n2D 4H 5D 7D QC AD AH 9H QH 8H\nKD 8C JS 9D 3S 3C 2H 5D 6D 2S\n8S 6S TS 3C 6H 8D 5S 3H TD 6C\nKS 3D JH 9C 7C 9S QS 5S 4H 6H\n7S 6S TH 4S KC KD 3S JC JH KS\n7C 3C 2S 6D QH 2C 7S 5H 8H AH\nKC 8D QD 6D KH 5C 7H 9D 3D 9C\n6H 2D 8S JS 9S 2S 6D KC 7C TC\nKD 9C JH 7H KC 8S 2S 7S 3D 6H\n4H 9H 2D 4C 8H 7H 5S 8S 2H 8D\nAD 7C 3C 7S 5S 4D 9H 3D JC KH\n5D AS 7D 6D 9C JC 4C QH QS KH\nKD JD 7D 3D QS QC 8S 6D JS QD\n6S 8C 5S QH TH 9H AS AC 2C JD\nQC KS QH 7S 3C 4C 5C KC 5D AH\n6C 4H 9D AH 2C 3H KD 3D TS 5C\nTD 8S QS AS JS 3H KD AC 4H KS\n7D 5D TS 9H 4H 4C 9C 2H 8C QC\n2C 7D 9H 4D KS 4C QH AD KD JS\nQD AD AH KH 9D JS 9H JC KD JD\n8S 3C 4S TS 7S 4D 5C 2S 6H 7C\nJS 7S 5C KD 6D QH 8S TD 2H 6S\nQH 6C TC 6H TD 4C 9D 2H QC 8H\n3D TS 4D 2H 6H 6S 2C 7H 8S 6C\n9H 9D JD JH 3S AH 2C 6S 3H 8S\n2C QS 8C 5S 3H 2S 7D 3C AD 4S\n5C QC QH AS TS 4S 6S 4C 5H JS\nJH 5C TD 4C 6H JS KD KH QS 4H\nTC KH JC 4D 9H 9D 8D KC 3C 8H\n2H TC 8S AD 9S 4H TS 7H 2C 5C\n4H 2S 6C 5S KS AH 9C 7C 8H KD\nTS QH TD QS 3C JH AH 2C 8D 7D\n5D KC 3H 5S AC 4S 7H QS 4C 2H\n3D 7D QC KH JH 6D 6C TD TH KD\n5S 8D TH 6C 9D 7D KH 8C 9S 6D\nJD QS 7S QC 2S QH JC 4S KS 8D\n7S 5S 9S JD KD 9C JC AD 2D 7C\n4S 5H AH JH 9C 5D TD 7C 2D 6S\nKC 6C 7H 6S 9C QD 5S 4H KS TD\n6S 8D KS 2D TH TD 9H JD TS 3S\nKH JS 4H 5D 9D TC TD QC JD TS\nQS QD AC AD 4C 6S 2D AS 3H KC\n4C 7C 3C TD QS 9C KC AS 8D AD\nKC 7H QC 6D 8H 6S 5S AH 7S 8C\n3S AD 9H JC 6D JD AS KH 6S JH\nAD 3D TS KS 7H JH 2D JS QD AC\n9C JD 7C 6D TC 6H 6C JC 3D 3S\nQC KC 3S JC KD 2C 8D AH QS TS\nAS KD 3D JD 8H 7C 8C 5C QD 6C\n"
  },
  {
    "path": "project_euler/problem_054/sol1.py",
    "content": "\"\"\"\nProblem: https://projecteuler.net/problem=54\n\nIn the card game poker, a hand consists of five cards and are ranked,\nfrom lowest to highest, in the following way:\n\nHigh Card: Highest value card.\nOne Pair: Two cards of the same value.\nTwo Pairs: Two different pairs.\nThree of a Kind: Three cards of the same value.\nStraight: All cards are consecutive values.\nFlush: All cards of the same suit.\nFull House: Three of a kind and a pair.\nFour of a Kind: Four cards of the same value.\nStraight Flush: All cards are consecutive values of same suit.\nRoyal Flush: Ten, Jack, Queen, King, Ace, in same suit.\n\nThe cards are valued in the order:\n2, 3, 4, 5, 6, 7, 8, 9, 10, Jack, Queen, King, Ace.\n\nIf two players have the same ranked hands then the rank made up of the highest\nvalue wins; for example, a pair of eights beats a pair of fives.\nBut if two ranks tie, for example, both players have a pair of queens, then highest\ncards in each hand are compared; if the highest cards tie then the next highest\ncards are compared, and so on.\n\nThe file, poker.txt, contains one-thousand random hands dealt to two players.\nEach line of the file contains ten cards (separated by a single space): the\nfirst five are Player 1's cards and the last five are Player 2's cards.\nYou can assume that all hands are valid (no invalid characters or repeated cards),\neach player's hand is in no specific order, and in each hand there is a clear winner.\n\nHow many hands does Player 1 win?\n\nResources used:\nhttps://en.wikipedia.org/wiki/Texas_hold_%27em\nhttps://en.wikipedia.org/wiki/List_of_poker_hands\n\nSimilar problem on codewars:\nhttps://www.codewars.com/kata/ranking-poker-hands\nhttps://www.codewars.com/kata/sortable-poker-hands\n\"\"\"\n\nfrom __future__ import annotations\n\nimport os\n\n\nclass PokerHand:\n    \"\"\"Create an object representing a Poker Hand based on an input of a\n    string which represents the best 5-card combination from the player's hand\n    and board cards.\n\n    Attributes: (read-only)\n        hand: a string representing the hand consisting of five cards\n\n    Methods:\n        compare_with(opponent): takes in player's hand (self) and\n            opponent's hand (opponent) and compares both hands according to\n            the rules of Texas Hold'em.\n            Returns one of 3 strings (Win, Loss, Tie) based on whether\n            player's hand is better than the opponent's hand.\n\n        hand_name(): Returns a string made up of two parts: hand name\n            and high card.\n\n    Supported operators:\n        Rich comparison operators: <, >, <=, >=, ==, !=\n\n    Supported built-in methods and functions:\n        list.sort(), sorted()\n    \"\"\"\n\n    _HAND_NAME = (\n        \"High card\",\n        \"One pair\",\n        \"Two pairs\",\n        \"Three of a kind\",\n        \"Straight\",\n        \"Flush\",\n        \"Full house\",\n        \"Four of a kind\",\n        \"Straight flush\",\n        \"Royal flush\",\n    )\n\n    _CARD_NAME = (\n        \"\",  # placeholder as tuples are zero-indexed\n        \"One\",\n        \"Two\",\n        \"Three\",\n        \"Four\",\n        \"Five\",\n        \"Six\",\n        \"Seven\",\n        \"Eight\",\n        \"Nine\",\n        \"Ten\",\n        \"Jack\",\n        \"Queen\",\n        \"King\",\n        \"Ace\",\n    )\n\n    def __init__(self, hand: str) -> None:\n        \"\"\"\n        Initialize hand.\n        Hand should of type str and should contain only five cards each\n        separated by a space.\n\n        The cards should be of the following format:\n        [card value][card suit]\n\n        The first character is the value of the card:\n        2, 3, 4, 5, 6, 7, 8, 9, T(en), J(ack), Q(ueen), K(ing), A(ce)\n\n        The second character represents the suit:\n        S(pades), H(earts), D(iamonds), C(lubs)\n\n        For example: \"6S 4C KC AS TH\"\n        \"\"\"\n        if not isinstance(hand, str):\n            msg = f\"Hand should be of type 'str': {hand!r}\"\n            raise TypeError(msg)\n        # split removes duplicate whitespaces so no need of strip\n        if len(hand.split(\" \")) != 5:\n            msg = f\"Hand should contain only 5 cards: {hand!r}\"\n            raise ValueError(msg)\n        self._hand = hand\n        self._first_pair = 0\n        self._second_pair = 0\n        self._card_values, self._card_suit = self._internal_state()\n        self._hand_type = self._get_hand_type()\n        self._high_card = self._card_values[0]\n\n    @property\n    def hand(self):\n        \"\"\"Returns the self hand\"\"\"\n        return self._hand\n\n    def compare_with(self, other: PokerHand) -> str:\n        \"\"\"\n        Determines the outcome of comparing self hand with other hand.\n        Returns the output as 'Win', 'Loss', 'Tie' according to the rules of\n        Texas Hold'em.\n\n        Here are some examples:\n        >>> player = PokerHand(\"2H 3H 4H 5H 6H\")  # Stright flush\n        >>> opponent = PokerHand(\"KS AS TS QS JS\")  # Royal flush\n        >>> player.compare_with(opponent)\n        'Loss'\n\n        >>> player = PokerHand(\"2S AH 2H AS AC\")  # Full house\n        >>> opponent = PokerHand(\"2H 3H 5H 6H 7H\")  # Flush\n        >>> player.compare_with(opponent)\n        'Win'\n\n        >>> player = PokerHand(\"2S AH 4H 5S 6C\")  # High card\n        >>> opponent = PokerHand(\"AD 4C 5H 6H 2C\")  # High card\n        >>> player.compare_with(opponent)\n        'Tie'\n        \"\"\"\n        # Breaking the tie works on the following order of precedence:\n        # 1. First pair (default 0)\n        # 2. Second pair (default 0)\n        # 3. Compare all cards in reverse order because they are sorted.\n\n        # First pair and second pair will only be a non-zero value if the card\n        # type is either from the following:\n        # 21: Four of a kind\n        # 20: Full house\n        # 17: Three of a kind\n        # 16: Two pairs\n        # 15: One pair\n        if self._hand_type > other._hand_type:\n            return \"Win\"\n        elif self._hand_type < other._hand_type:\n            return \"Loss\"\n        elif self._first_pair == other._first_pair:\n            if self._second_pair == other._second_pair:\n                return self._compare_cards(other)\n            else:\n                return \"Win\" if self._second_pair > other._second_pair else \"Loss\"\n        return \"Win\" if self._first_pair > other._first_pair else \"Loss\"\n\n    # This function is not part of the problem, I did it just for fun\n    def hand_name(self) -> str:\n        \"\"\"\n        Return the name of the hand in the following format:\n        'hand name, high card'\n\n        Here are some examples:\n        >>> PokerHand(\"KS AS TS QS JS\").hand_name()\n        'Royal flush'\n\n        >>> PokerHand(\"2D 6D 3D 4D 5D\").hand_name()\n        'Straight flush, Six-high'\n\n        >>> PokerHand(\"JC 6H JS JD JH\").hand_name()\n        'Four of a kind, Jacks'\n\n        >>> PokerHand(\"3D 2H 3H 2C 2D\").hand_name()\n        'Full house, Twos over Threes'\n\n        >>> PokerHand(\"2H 4D 3C AS 5S\").hand_name()  # Low ace\n        'Straight, Five-high'\n\n        Source: https://en.wikipedia.org/wiki/List_of_poker_hands\n        \"\"\"\n        name = PokerHand._HAND_NAME[self._hand_type - 14]\n        high = PokerHand._CARD_NAME[self._high_card]\n        pair1 = PokerHand._CARD_NAME[self._first_pair]\n        pair2 = PokerHand._CARD_NAME[self._second_pair]\n        if self._hand_type in [22, 19, 18]:\n            return name + f\", {high}-high\"\n        elif self._hand_type in [21, 17, 15]:\n            return name + f\", {pair1}s\"\n        elif self._hand_type in [20, 16]:\n            join = \"over\" if self._hand_type == 20 else \"and\"\n            return name + f\", {pair1}s {join} {pair2}s\"\n        elif self._hand_type == 23:\n            return name\n        else:\n            return name + f\", {high}\"\n\n    def _compare_cards(self, other: PokerHand) -> str:\n        # Enumerate gives us the index as well as the element of a list\n        for index, card_value in enumerate(self._card_values):\n            if card_value != other._card_values[index]:\n                return \"Win\" if card_value > other._card_values[index] else \"Loss\"\n        return \"Tie\"\n\n    def _get_hand_type(self) -> int:\n        # Number representing the type of hand internally:\n        # 23: Royal flush\n        # 22: Straight flush\n        # 21: Four of a kind\n        # 20: Full house\n        # 19: Flush\n        # 18: Straight\n        # 17: Three of a kind\n        # 16: Two pairs\n        # 15: One pair\n        # 14: High card\n        if self._is_flush():\n            if self._is_five_high_straight() or self._is_straight():\n                return 23 if sum(self._card_values) == 60 else 22\n            return 19\n        elif self._is_five_high_straight() or self._is_straight():\n            return 18\n        return 14 + self._is_same_kind()\n\n    def _is_flush(self) -> bool:\n        return len(self._card_suit) == 1\n\n    def _is_five_high_straight(self) -> bool:\n        # If a card is a five high straight (low ace) change the location of\n        # ace from the start of the list to the end. Check whether the first\n        # element is ace or not. (Don't want to change again)\n        # Five high straight (low ace): AH 2H 3S 4C 5D\n        # Why use sorted here? One call to this function will mutate the list to\n        # [5, 4, 3, 2, 14] and so for subsequent calls (which will be rare) we\n        # need to compare the sorted version.\n        # Refer test_multiple_calls_five_high_straight in test_poker_hand.py\n        if sorted(self._card_values) == [2, 3, 4, 5, 14]:\n            if self._card_values[0] == 14:\n                # Remember, our list is sorted in reverse order\n                ace_card = self._card_values.pop(0)\n                self._card_values.append(ace_card)\n            return True\n        return False\n\n    def _is_straight(self) -> bool:\n        for i in range(4):\n            if self._card_values[i] - self._card_values[i + 1] != 1:\n                return False\n        return True\n\n    def _is_same_kind(self) -> int:\n        # Kind Values for internal use:\n        # 7: Four of a kind\n        # 6: Full house\n        # 3: Three of a kind\n        # 2: Two pairs\n        # 1: One pair\n        # 0: False\n        kind = val1 = val2 = 0\n        for i in range(4):\n            # Compare two cards at a time, if they are same increase 'kind',\n            # add the value of the card to val1, if it is repeating again we\n            # will add 2 to 'kind' as there are now 3 cards with same value.\n            # If we get card of different value than val1, we will do the same\n            # thing with val2\n            if self._card_values[i] == self._card_values[i + 1]:\n                if not val1:\n                    val1 = self._card_values[i]\n                    kind += 1\n                elif val1 == self._card_values[i]:\n                    kind += 2\n                elif not val2:\n                    val2 = self._card_values[i]\n                    kind += 1\n                elif val2 == self._card_values[i]:\n                    kind += 2\n        # For consistency in hand type (look at note in _get_hand_type function)\n        kind = kind + 2 if kind in [4, 5] else kind\n        # first meaning first pair to compare in 'compare_with'\n        first = max(val1, val2)\n        second = min(val1, val2)\n        # If it's full house (three count pair + two count pair), make sure\n        # first pair is three count and if not then switch them both.\n        if kind == 6 and self._card_values.count(first) != 3:\n            first, second = second, first\n        self._first_pair = first\n        self._second_pair = second\n        return kind\n\n    def _internal_state(self) -> tuple[list[int], set[str]]:\n        # Internal representation of hand as a list of card values and\n        # a set of card suit\n        trans: dict = {\"T\": \"10\", \"J\": \"11\", \"Q\": \"12\", \"K\": \"13\", \"A\": \"14\"}\n        new_hand = self._hand.translate(str.maketrans(trans)).split()\n        card_values = [int(card[:-1]) for card in new_hand]\n        card_suit = {card[-1] for card in new_hand}\n        return sorted(card_values, reverse=True), card_suit\n\n    def __repr__(self):\n        return f'{self.__class__}(\"{self._hand}\")'\n\n    def __str__(self):\n        return self._hand\n\n    # Rich comparison operators (used in list.sort() and sorted() builtin functions)\n    # Note that this is not part of the problem but another extra feature where\n    # if you have a list of PokerHand objects, you can sort them just through\n    # the builtin functions.\n    def __eq__(self, other):\n        if isinstance(other, PokerHand):\n            return self.compare_with(other) == \"Tie\"\n        return NotImplemented\n\n    def __lt__(self, other):\n        if isinstance(other, PokerHand):\n            return self.compare_with(other) == \"Loss\"\n        return NotImplemented\n\n    def __le__(self, other):\n        if isinstance(other, PokerHand):\n            return self < other or self == other\n        return NotImplemented\n\n    def __gt__(self, other):\n        if isinstance(other, PokerHand):\n            return not self < other and self != other\n        return NotImplemented\n\n    def __ge__(self, other):\n        if isinstance(other, PokerHand):\n            return not self < other\n        return NotImplemented\n\n    def __hash__(self):\n        return object.__hash__(self)\n\n\ndef solution() -> int:\n    # Solution for problem number 54 from Project Euler\n    # Input from poker_hands.txt file\n    answer = 0\n    script_dir = os.path.abspath(os.path.dirname(__file__))\n    poker_hands = os.path.join(script_dir, \"poker_hands.txt\")\n    with open(poker_hands) as file_hand:\n        for line in file_hand:\n            player_hand = line[:14].strip()\n            opponent_hand = line[15:].strip()\n            player, opponent = PokerHand(player_hand), PokerHand(opponent_hand)\n            output = player.compare_with(opponent)\n            if output == \"Win\":\n                answer += 1\n    return answer\n\n\nif __name__ == \"__main__\":\n    solution()\n"
  },
  {
    "path": "project_euler/problem_054/test_poker_hand.py",
    "content": "import os\nfrom itertools import chain\nfrom random import randrange, shuffle\n\nimport pytest\n\nfrom .sol1 import PokerHand\n\nSORTED_HANDS = (\n    \"4S 3H 2C 7S 5H\",\n    \"9D 8H 2C 6S 7H\",\n    \"2D 6D 9D TH 7D\",\n    \"TC 8C 2S JH 6C\",\n    \"JH 8S TH AH QH\",\n    \"TS KS 5S 9S AC\",\n    \"KD 6S 9D TH AD\",\n    \"KS 8D 4D 9S 4S\",  # pair\n    \"8C 4S KH JS 4D\",  # pair\n    \"QH 8H KD JH 8S\",  # pair\n    \"KC 4H KS 2H 8D\",  # pair\n    \"KD 4S KC 3H 8S\",  # pair\n    \"AH 8S AS KC JH\",  # pair\n    \"3H 4C 4H 3S 2H\",  # 2 pairs\n    \"5S 5D 2C KH KH\",  # 2 pairs\n    \"3C KH 5D 5S KH\",  # 2 pairs\n    \"AS 3C KH AD KH\",  # 2 pairs\n    \"7C 7S 3S 7H 5S\",  # 3 of a kind\n    \"7C 7S KH 2H 7H\",  # 3 of a kind\n    \"AC KH QH AH AS\",  # 3 of a kind\n    \"2H 4D 3C AS 5S\",  # straight (low ace)\n    \"3C 5C 4C 2C 6H\",  # straight\n    \"6S 8S 7S 5H 9H\",  # straight\n    \"JS QS 9H TS KH\",  # straight\n    \"QC KH TS JS AH\",  # straight (high ace)\n    \"8C 9C 5C 3C TC\",  # flush\n    \"3S 8S 9S 5S KS\",  # flush\n    \"4C 5C 9C 8C KC\",  # flush\n    \"JH 8H AH KH QH\",  # flush\n    \"3D 2H 3H 2C 2D\",  # full house\n    \"2H 2C 3S 3H 3D\",  # full house\n    \"KH KC 3S 3H 3D\",  # full house\n    \"JC 6H JS JD JH\",  # 4 of a kind\n    \"JC 7H JS JD JH\",  # 4 of a kind\n    \"JC KH JS JD JH\",  # 4 of a kind\n    \"2S AS 4S 5S 3S\",  # straight flush (low ace)\n    \"2D 6D 3D 4D 5D\",  # straight flush\n    \"5C 6C 3C 7C 4C\",  # straight flush\n    \"JH 9H TH KH QH\",  # straight flush\n    \"JH AH TH KH QH\",  # royal flush (high ace straight flush)\n)\n\nTEST_COMPARE = (\n    (\"2H 3H 4H 5H 6H\", \"KS AS TS QS JS\", \"Loss\"),\n    (\"2H 3H 4H 5H 6H\", \"AS AD AC AH JD\", \"Win\"),\n    (\"AS AH 2H AD AC\", \"JS JD JC JH 3D\", \"Win\"),\n    (\"2S AH 2H AS AC\", \"JS JD JC JH AD\", \"Loss\"),\n    (\"2S AH 2H AS AC\", \"2H 3H 5H 6H 7H\", \"Win\"),\n    (\"AS 3S 4S 8S 2S\", \"2H 3H 5H 6H 7H\", \"Win\"),\n    (\"2H 3H 5H 6H 7H\", \"2S 3H 4H 5S 6C\", \"Win\"),\n    (\"2S 3H 4H 5S 6C\", \"3D 4C 5H 6H 2S\", \"Tie\"),\n    (\"2S 3H 4H 5S 6C\", \"AH AC 5H 6H AS\", \"Win\"),\n    (\"2S 2H 4H 5S 4C\", \"AH AC 5H 6H AS\", \"Loss\"),\n    (\"2S 2H 4H 5S 4C\", \"AH AC 5H 6H 7S\", \"Win\"),\n    (\"6S AD 7H 4S AS\", \"AH AC 5H 6H 7S\", \"Loss\"),\n    (\"2S AH 4H 5S KC\", \"AH AC 5H 6H 7S\", \"Loss\"),\n    (\"2S 3H 6H 7S 9C\", \"7H 3C TH 6H 9S\", \"Loss\"),\n    (\"4S 5H 6H TS AC\", \"3S 5H 6H TS AC\", \"Win\"),\n    (\"2S AH 4H 5S 6C\", \"AD 4C 5H 6H 2C\", \"Tie\"),\n    (\"AS AH 3H AD AC\", \"AS AH 2H AD AC\", \"Win\"),\n    (\"AH AC 5H 5C QS\", \"AH AC 5H 5C KS\", \"Loss\"),\n    (\"AH AC 5H 5C QS\", \"KH KC 5H 5C QS\", \"Win\"),\n    (\"7C 7S KH 2H 7H\", \"3C 3S AH 2H 3H\", \"Win\"),\n    (\"3C 3S AH 2H 3H\", \"7C 7S KH 2H 7H\", \"Loss\"),\n    (\"6H 5H 4H 3H 2H\", \"5H 4H 3H 2H AH\", \"Win\"),\n    (\"5H 4H 3H 2H AH\", \"5H 4H 3H 2H AH\", \"Tie\"),\n    (\"5H 4H 3H 2H AH\", \"6H 5H 4H 3H 2H\", \"Loss\"),\n    (\"AH AD KS KC AC\", \"AH KD KH AC KC\", \"Win\"),\n    (\"2H 4D 3C AS 5S\", \"2H 4D 3C 6S 5S\", \"Loss\"),\n    (\"2H 3S 3C 3H 2S\", \"3S 3C 2S 2H 2D\", \"Win\"),\n    (\"4D 6D 5D 2D JH\", \"3S 8S 3H TC KH\", \"Loss\"),\n    (\"4S 6C 8S 3S 7S\", \"AD KS 2D 7D 7C\", \"Loss\"),\n    (\"6S 4C 7H 8C 3H\", \"5H JC AH 9D 9C\", \"Loss\"),\n    (\"9D 9H JH TC QH\", \"3C 2S JS 5C 7H\", \"Win\"),\n    (\"2H TC 8S AD 9S\", \"4H TS 7H 2C 5C\", \"Win\"),\n    (\"9D 3S 2C 7S 7C\", \"JC TD 3C TC 9H\", \"Loss\"),\n)\n\nTEST_FLUSH = (\n    (\"2H 3H 4H 5H 6H\", True),\n    (\"AS AH 2H AD AC\", False),\n    (\"2H 3H 5H 6H 7H\", True),\n    (\"KS AS TS QS JS\", True),\n    (\"8H 9H QS JS TH\", False),\n    (\"AS 3S 4S 8S 2S\", True),\n)\n\nTEST_STRAIGHT = (\n    (\"2H 3H 4H 5H 6H\", True),\n    (\"AS AH 2H AD AC\", False),\n    (\"2H 3H 5H 6H 7H\", False),\n    (\"KS AS TS QS JS\", True),\n    (\"8H 9H QS JS TH\", True),\n)\n\nTEST_FIVE_HIGH_STRAIGHT = (\n    (\"2H 4D 3C AS 5S\", True, [5, 4, 3, 2, 14]),\n    (\"2H 5D 3C AS 5S\", False, [14, 5, 5, 3, 2]),\n    (\"JH QD KC AS TS\", False, [14, 13, 12, 11, 10]),\n    (\"9D 3S 2C 7S 7C\", False, [9, 7, 7, 3, 2]),\n)\n\nTEST_KIND = (\n    (\"JH AH TH KH QH\", 0),\n    (\"JH 9H TH KH QH\", 0),\n    (\"JC KH JS JD JH\", 7),\n    (\"KH KC 3S 3H 3D\", 6),\n    (\"8C 9C 5C 3C TC\", 0),\n    (\"JS QS 9H TS KH\", 0),\n    (\"7C 7S KH 2H 7H\", 3),\n    (\"3C KH 5D 5S KH\", 2),\n    (\"QH 8H KD JH 8S\", 1),\n    (\"2D 6D 9D TH 7D\", 0),\n)\n\nTEST_TYPES = (\n    (\"JH AH TH KH QH\", 23),\n    (\"JH 9H TH KH QH\", 22),\n    (\"JC KH JS JD JH\", 21),\n    (\"KH KC 3S 3H 3D\", 20),\n    (\"8C 9C 5C 3C TC\", 19),\n    (\"JS QS 9H TS KH\", 18),\n    (\"7C 7S KH 2H 7H\", 17),\n    (\"3C KH 5D 5S KH\", 16),\n    (\"QH 8H KD JH 8S\", 15),\n    (\"2D 6D 9D TH 7D\", 14),\n)\n\n\ndef generate_random_hand():\n    play, oppo = randrange(len(SORTED_HANDS)), randrange(len(SORTED_HANDS))\n    expected = [\"Loss\", \"Tie\", \"Win\"][(play >= oppo) + (play > oppo)]\n    hand, other = SORTED_HANDS[play], SORTED_HANDS[oppo]\n    return hand, other, expected\n\n\ndef generate_random_hands(number_of_hands: int = 100):\n    return (generate_random_hand() for _ in range(number_of_hands))\n\n\n@pytest.mark.parametrize((\"hand\", \"expected\"), TEST_FLUSH)\ndef test_hand_is_flush(hand, expected):\n    assert PokerHand(hand)._is_flush() == expected\n\n\n@pytest.mark.parametrize((\"hand\", \"expected\"), TEST_STRAIGHT)\ndef test_hand_is_straight(hand, expected):\n    assert PokerHand(hand)._is_straight() == expected\n\n\n@pytest.mark.parametrize((\"hand\", \"expected\", \"card_values\"), TEST_FIVE_HIGH_STRAIGHT)\ndef test_hand_is_five_high_straight(hand, expected, card_values):\n    player = PokerHand(hand)\n    assert player._is_five_high_straight() == expected\n    assert player._card_values == card_values\n\n\n@pytest.mark.parametrize((\"hand\", \"expected\"), TEST_KIND)\ndef test_hand_is_same_kind(hand, expected):\n    assert PokerHand(hand)._is_same_kind() == expected\n\n\n@pytest.mark.parametrize((\"hand\", \"expected\"), TEST_TYPES)\ndef test_hand_values(hand, expected):\n    assert PokerHand(hand)._hand_type == expected\n\n\n@pytest.mark.parametrize((\"hand\", \"other\", \"expected\"), TEST_COMPARE)\ndef test_compare_simple(hand, other, expected):\n    assert PokerHand(hand).compare_with(PokerHand(other)) == expected\n\n\n@pytest.mark.parametrize((\"hand\", \"other\", \"expected\"), generate_random_hands())\ndef test_compare_random(hand, other, expected):\n    assert PokerHand(hand).compare_with(PokerHand(other)) == expected\n\n\ndef test_hand_sorted():\n    poker_hands = [PokerHand(hand) for hand in SORTED_HANDS]\n    list_copy = poker_hands.copy()\n    shuffle(list_copy)\n    user_sorted = chain(sorted(list_copy))\n    for index, hand in enumerate(user_sorted):\n        assert hand == poker_hands[index]\n\n\ndef test_custom_sort_five_high_straight():\n    # Test that five high straights are compared correctly.\n    pokerhands = [PokerHand(\"2D AC 3H 4H 5S\"), PokerHand(\"2S 3H 4H 5S 6C\")]\n    pokerhands.sort(reverse=True)\n    assert pokerhands[0].__str__() == \"2S 3H 4H 5S 6C\"\n\n\ndef test_multiple_calls_five_high_straight():\n    # Multiple calls to five_high_straight function should still return True\n    # and shouldn't mutate the list in every call other than the first.\n    pokerhand = PokerHand(\"2C 4S AS 3D 5C\")\n    expected = True\n    expected_card_values = [5, 4, 3, 2, 14]\n    for _ in range(10):\n        assert pokerhand._is_five_high_straight() == expected\n        assert pokerhand._card_values == expected_card_values\n\n\ndef test_euler_project():\n    # Problem number 54 from Project Euler\n    # Testing from poker_hands.txt file\n    answer = 0\n    script_dir = os.path.abspath(os.path.dirname(__file__))\n    poker_hands = os.path.join(script_dir, \"poker_hands.txt\")\n    with open(poker_hands) as file_hand:\n        for line in file_hand:\n            player_hand = line[:14].strip()\n            opponent_hand = line[15:].strip()\n            player, opponent = PokerHand(player_hand), PokerHand(opponent_hand)\n            output = player.compare_with(opponent)\n            if output == \"Win\":\n                answer += 1\n    assert answer == 376\n"
  },
  {
    "path": "project_euler/problem_055/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_055/sol1.py",
    "content": "\"\"\"\r\nLychrel numbers\r\nProblem 55: https://projecteuler.net/problem=55\r\n\r\nIf we take 47, reverse and add, 47 + 74 = 121, which is palindromic.\r\n\r\nNot all numbers produce palindromes so quickly. For example,\r\n349 + 943 = 1292,\r\n1292 + 2921 = 4213\r\n4213 + 3124 = 7337\r\nThat is, 349 took three iterations to arrive at a palindrome.\r\n\r\nAlthough no one has proved it yet, it is thought that some numbers, like 196,\r\nnever produce a palindrome. A number that never forms a palindrome through the\r\nreverse and add process is called a Lychrel number. Due to the theoretical nature\r\nof these numbers, and for the purpose of this problem, we shall assume that a number\r\nis Lychrel until proven otherwise. In addition you are given that for every number\r\nbelow ten-thousand, it will either (i) become a palindrome in less than fifty\r\niterations, or, (ii) no one, with all the computing power that exists, has managed\r\nso far to map it to a palindrome. In fact, 10677 is the first number to be shown\r\nto require over fifty iterations before producing a palindrome:\r\n4668731596684224866951378664 (53 iterations, 28-digits).\r\n\r\nSurprisingly, there are palindromic numbers that are themselves Lychrel numbers;\r\nthe first example is 4994.\r\nHow many Lychrel numbers are there below ten-thousand?\r\n\"\"\"\r\n\r\n\r\ndef is_palindrome(n: int) -> bool:\r\n    \"\"\"\r\n    Returns True if a number is palindrome.\r\n    >>> is_palindrome(12567321)\r\n    False\r\n    >>> is_palindrome(1221)\r\n    True\r\n    >>> is_palindrome(9876789)\r\n    True\r\n    \"\"\"\r\n    return str(n) == str(n)[::-1]\r\n\r\n\r\ndef sum_reverse(n: int) -> int:\r\n    \"\"\"\r\n    Returns the sum of n and reverse of n.\r\n    >>> sum_reverse(123)\r\n    444\r\n    >>> sum_reverse(3478)\r\n    12221\r\n    >>> sum_reverse(12)\r\n    33\r\n    \"\"\"\r\n    return int(n) + int(str(n)[::-1])\r\n\r\n\r\ndef solution(limit: int = 10000) -> int:\r\n    \"\"\"\r\n    Returns the count of all lychrel numbers below limit.\r\n    >>> solution(10000)\r\n    249\r\n    >>> solution(5000)\r\n    76\r\n    >>> solution(1000)\r\n    13\r\n    \"\"\"\r\n    lychrel_nums = []\r\n    for num in range(1, limit):\r\n        iterations = 0\r\n        a = num\r\n        while iterations < 50:\r\n            num = sum_reverse(num)\r\n            iterations += 1\r\n            if is_palindrome(num):\r\n                break\r\n        else:\r\n            lychrel_nums.append(a)\r\n    return len(lychrel_nums)\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    print(f\"{solution() = }\")\r\n"
  },
  {
    "path": "project_euler/problem_056/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_056/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 56: https://projecteuler.net/problem=56\n\nA googol (10^100) is a massive number: one followed by one-hundred zeros;\n100^100 is almost unimaginably large: one followed by two-hundred zeros.\nDespite their size, the sum of the digits in each number is only 1.\n\nConsidering natural numbers of the form, ab, where a, b < 100,\nwhat is the maximum digital sum?\n\"\"\"\n\n\ndef solution(a: int = 100, b: int = 100) -> int:\n    \"\"\"\n    Considering natural numbers of the form, a**b, where a, b < 100,\n    what is the maximum digital sum?\n    :param a:\n    :param b:\n    :return:\n    >>> solution(10,10)\n    45\n\n    >>> solution(100,100)\n    972\n\n    >>> solution(100,200)\n    1872\n    \"\"\"\n\n    # RETURN the MAXIMUM from the list of SUMs of the list of INT converted from STR of\n    # BASE raised to the POWER\n    return max(\n        sum(int(x) for x in str(base**power)) for base in range(a) for power in range(b)\n    )\n\n\n# Tests\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "project_euler/problem_057/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_057/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 57: https://projecteuler.net/problem=57\nIt is possible to show that the square root of two can be expressed as an infinite\ncontinued fraction.\n\nsqrt(2) = 1 + 1 / (2 + 1 / (2 + 1 / (2 + ...)))\n\nBy expanding this for the first four iterations, we get:\n1 + 1 / 2 = 3 / 2 = 1.5\n1 + 1 / (2 + 1 / 2} = 7 / 5 = 1.4\n1 + 1 / (2 + 1 / (2 + 1 / 2)) = 17 / 12 = 1.41666...\n1 + 1 / (2 + 1 / (2 + 1 / (2 + 1 / 2))) = 41/ 29 = 1.41379...\n\nThe next three expansions are 99/70, 239/169, and 577/408, but the eighth expansion,\n1393/985, is the first example where the number of digits in the numerator exceeds\nthe number of digits in the denominator.\n\nIn the first one-thousand expansions, how many fractions contain a numerator with\nmore digits than the denominator?\n\"\"\"\n\n\ndef solution(n: int = 1000) -> int:\n    \"\"\"\n    returns number of fractions containing a numerator with more digits than\n    the denominator in the first n expansions.\n    >>> solution(14)\n    2\n    >>> solution(100)\n    15\n    >>> solution(10000)\n    1508\n    \"\"\"\n    prev_numerator, prev_denominator = 1, 1\n    result = []\n    for i in range(1, n + 1):\n        numerator = prev_numerator + 2 * prev_denominator\n        denominator = prev_numerator + prev_denominator\n        if len(str(numerator)) > len(str(denominator)):\n            result.append(i)\n        prev_numerator = numerator\n        prev_denominator = denominator\n\n    return len(result)\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_058/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_058/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 58:https://projecteuler.net/problem=58\n\n\nStarting with 1 and spiralling anticlockwise in the following way,\na square spiral with side length 7 is formed.\n\n37 36 35 34 33 32 31\n38 17 16 15 14 13 30\n39 18  5  4  3 12 29\n40 19  6  1  2 11 28\n41 20  7  8  9 10 27\n42 21 22 23 24 25 26\n43 44 45 46 47 48 49\n\nIt is interesting to note that the odd squares lie along the bottom right\ndiagonal ,but what is more interesting is that 8 out of the 13 numbers\nlying along both diagonals are prime; that is, a ratio of 8/13 ≈ 62%.\n\nIf one complete new layer is wrapped around the spiral above,\na square spiral with side length 9 will be formed.\nIf this process is continued,\nwhat is the side length of the square spiral for which\nthe ratio of primes along both diagonals first falls below 10%?\n\nSolution: We have to find an odd length side for which square falls below\n10%. With every layer we add 4 elements are being added to the diagonals\n,lets say we have a square spiral of odd length with side length j,\nthen 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)\nj*j+4*(j+1). Out of these 4 only the first three can become prime\nbecause last one reduces to (j+2)*(j+2).\nSo we check individually each one of these before incrementing our\ncount of current primes.\n\n\"\"\"\n\nimport math\n\n\ndef is_prime(number: int) -> bool:\n    \"\"\"Checks to see if a number is a prime in O(sqrt(n)).\n\n    A number is prime if it has exactly two factors: 1 and itself.\n\n    >>> is_prime(0)\n    False\n    >>> is_prime(1)\n    False\n    >>> is_prime(2)\n    True\n    >>> is_prime(3)\n    True\n    >>> is_prime(27)\n    False\n    >>> is_prime(87)\n    False\n    >>> is_prime(563)\n    True\n    >>> is_prime(2999)\n    True\n    >>> is_prime(67483)\n    False\n    \"\"\"\n\n    if 1 < number < 4:\n        # 2 and 3 are primes\n        return True\n    elif number < 2 or number % 2 == 0 or number % 3 == 0:\n        # Negatives, 0, 1, all even numbers, all multiples of 3 are not primes\n        return False\n\n    # All primes number are in format of 6k +/- 1\n    for i in range(5, int(math.sqrt(number) + 1), 6):\n        if number % i == 0 or number % (i + 2) == 0:\n            return False\n    return True\n\n\ndef solution(ratio: float = 0.1) -> int:\n    \"\"\"\n    Returns the side length of the square spiral of odd length greater\n    than 1 for which the ratio of primes along both diagonals\n    first falls below the given ratio.\n    >>> solution(.5)\n    11\n    >>> solution(.2)\n    309\n    >>> solution(.111)\n    11317\n    \"\"\"\n\n    j = 3\n    primes = 3\n\n    while primes / (2 * j - 1) >= ratio:\n        for i in range(j * j + j + 1, (j + 2) * (j + 2), j + 1):\n            primes += is_prime(i)\n        j += 2\n    return j\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "project_euler/problem_059/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_059/p059_cipher.txt",
    "content": "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"
  },
  {
    "path": "project_euler/problem_059/sol1.py",
    "content": "\"\"\"\nEach character on a computer is assigned a unique code and the preferred standard is\nASCII (American Standard Code for Information Interchange).\nFor example, uppercase A = 65, asterisk (*) = 42, and lowercase k = 107.\n\nA modern encryption method is to take a text file, convert the bytes to ASCII, then\nXOR each byte with a given value, taken from a secret key. The advantage with the\nXOR function is that using the same encryption key on the cipher text, restores\nthe plain text; for example, 65 XOR 42 = 107, then 107 XOR 42 = 65.\n\nFor unbreakable encryption, the key is the same length as the plain text message, and\nthe key is made up of random bytes. The user would keep the encrypted message and the\nencryption key in different locations, and without both \"halves\", it is impossible to\ndecrypt the message.\n\nUnfortunately, this method is impractical for most users, so the modified method is\nto use a password as a key. If the password is shorter than the message, which is\nlikely, the key is repeated cyclically throughout the message. The balance for this\nmethod is using a sufficiently long password key for security, but short enough to\nbe memorable.\n\nYour task has been made easy, as the encryption key consists of three lower case\ncharacters. Using p059_cipher.txt (right click and 'Save Link/Target As...'), a\nfile containing the encrypted ASCII codes, and the knowledge that the plain text\nmust contain common English words, decrypt the message and find the sum of the ASCII\nvalues in the original text.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport string\nfrom itertools import cycle, product\nfrom pathlib import Path\n\nVALID_CHARS: str = (\n    string.ascii_letters + string.digits + string.punctuation + string.whitespace\n)\nLOWERCASE_INTS: list[int] = [ord(letter) for letter in string.ascii_lowercase]\nVALID_INTS: set[int] = {ord(char) for char in VALID_CHARS}\n\nCOMMON_WORDS: list[str] = [\"the\", \"be\", \"to\", \"of\", \"and\", \"in\", \"that\", \"have\"]\n\n\ndef try_key(ciphertext: list[int], key: tuple[int, ...]) -> str | None:\n    \"\"\"\n    Given an encrypted message and a possible 3-character key, decrypt the message.\n    If the decrypted message contains a invalid character, i.e. not an ASCII letter,\n    a digit, punctuation or whitespace, then we know the key is incorrect, so return\n    None.\n    >>> try_key([0, 17, 20, 4, 27], (104, 116, 120))\n    'hello'\n    >>> try_key([68, 10, 300, 4, 27], (104, 116, 120)) is None\n    True\n    \"\"\"\n    decoded: str = \"\"\n    keychar: int\n    cipherchar: int\n    decodedchar: int\n\n    for keychar, cipherchar in zip(cycle(key), ciphertext):\n        decodedchar = cipherchar ^ keychar\n        if decodedchar not in VALID_INTS:\n            return None\n        decoded += chr(decodedchar)\n\n    return decoded\n\n\ndef filter_valid_chars(ciphertext: list[int]) -> list[str]:\n    \"\"\"\n    Given an encrypted message, test all 3-character strings to try and find the\n    key. Return a list of the possible decrypted messages.\n    >>> from itertools import cycle\n    >>> text = \"The enemy's gate is down\"\n    >>> key = \"end\"\n    >>> encoded = [ord(k) ^ ord(c) for k,c in zip(cycle(key), text)]\n    >>> text in filter_valid_chars(encoded)\n    True\n    \"\"\"\n    possibles: list[str] = []\n    for key in product(LOWERCASE_INTS, repeat=3):\n        encoded = try_key(ciphertext, key)\n        if encoded is not None:\n            possibles.append(encoded)\n    return possibles\n\n\ndef filter_common_word(possibles: list[str], common_word: str) -> list[str]:\n    \"\"\"\n    Given a list of possible decoded messages, narrow down the possibilities\n    for checking for the presence of a specified common word. Only decoded messages\n    containing common_word will be returned.\n    >>> filter_common_word(['asfla adf', 'I am here', '   !?! #a'], 'am')\n    ['I am here']\n    >>> filter_common_word(['athla amf', 'I am here', '   !?! #a'], 'am')\n    ['athla amf', 'I am here']\n    \"\"\"\n    return [possible for possible in possibles if common_word in possible.lower()]\n\n\ndef solution(filename: str = \"p059_cipher.txt\") -> int:\n    \"\"\"\n    Test the ciphertext against all possible 3-character keys, then narrow down the\n    possibilities by filtering using common words until there's only one possible\n    decoded message.\n    >>> solution(\"test_cipher.txt\")\n    3000\n    \"\"\"\n    ciphertext: list[int]\n    possibles: list[str]\n    common_word: str\n    decoded_text: str\n    data: str = Path(__file__).parent.joinpath(filename).read_text(encoding=\"utf-8\")\n\n    ciphertext = [int(number) for number in data.strip().split(\",\")]\n\n    possibles = filter_valid_chars(ciphertext)\n    for common_word in COMMON_WORDS:\n        possibles = filter_common_word(possibles, common_word)\n        if len(possibles) == 1:\n            break\n\n    decoded_text = possibles[0]\n    return sum(ord(char) for char in decoded_text)\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_059/test_cipher.txt",
    "content": "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\n"
  },
  {
    "path": "project_euler/problem_062/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_062/sol1.py",
    "content": "\"\"\"\nProject Euler 62\nhttps://projecteuler.net/problem=62\n\nThe cube, 41063625 (345^3), can be permuted to produce two other cubes:\n56623104 (384^3) and 66430125 (405^3). In fact, 41063625 is the smallest cube\nwhich has exactly three permutations of its digits which are also cube.\n\nFind the smallest cube for which exactly five permutations of its digits are\ncube.\n\"\"\"\n\nfrom collections import defaultdict\n\n\ndef solution(max_base: int = 5) -> int:\n    \"\"\"\n    Iterate through every possible cube and sort the cube's digits in\n    ascending order. Sorting maintains an ordering of the digits that allows\n    you to compare permutations. Store each sorted sequence of digits in a\n    dictionary, whose key is the sequence of digits and value is a list of\n    numbers that are the base of the cube.\n\n    Once you find 5 numbers that produce the same sequence of digits, return\n    the smallest one, which is at index 0 since we insert each base number in\n    ascending order.\n\n    >>> solution(2)\n    125\n    >>> solution(3)\n    41063625\n    \"\"\"\n    freqs = defaultdict(list)\n    num = 0\n\n    while True:\n        digits = get_digits(num)\n        freqs[digits].append(num)\n\n        if len(freqs[digits]) == max_base:\n            base = freqs[digits][0] ** 3\n            return base\n\n        num += 1\n\n\ndef get_digits(num: int) -> str:\n    \"\"\"\n    Computes the sorted sequence of digits of the cube of num.\n\n    >>> get_digits(3)\n    '27'\n    >>> get_digits(99)\n    '027999'\n    >>> get_digits(123)\n    '0166788'\n    \"\"\"\n    return \"\".join(sorted(str(num**3)))\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_063/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_063/sol1.py",
    "content": "\"\"\"\r\nThe 5-digit number, 16807=75, is also a fifth power. Similarly, the 9-digit number,\r\n134217728=89, is a ninth power.\r\nHow many n-digit positive integers exist which are also an nth power?\r\n\"\"\"\r\n\r\n\"\"\"\r\nThe maximum base can be 9 because all n-digit numbers < 10^n.\r\nNow 9**23 has 22 digits so the maximum power can be 22.\r\nUsing these conclusions, we will calculate the result.\r\n\"\"\"\r\n\r\n\r\ndef solution(max_base: int = 10, max_power: int = 22) -> int:\r\n    \"\"\"\r\n    Returns the count of all n-digit numbers which are nth power\r\n    >>> solution(10, 22)\r\n    49\r\n    >>> solution(0, 0)\r\n    0\r\n    >>> solution(1, 1)\r\n    0\r\n    >>> solution(-1, -1)\r\n    0\r\n    \"\"\"\r\n    bases = range(1, max_base)\r\n    powers = range(1, max_power)\r\n    return sum(\r\n        1 for power in powers for base in bases if len(str(base**power)) == power\r\n    )\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    print(f\"{solution(10, 22) = }\")\r\n"
  },
  {
    "path": "project_euler/problem_064/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_064/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 64: https://projecteuler.net/problem=64\n\nAll square roots are periodic when written as continued fractions.\nFor example, let us consider sqrt(23).\nIt can be seen that the sequence is repeating.\nFor conciseness, we use the notation sqrt(23)=[4;(1,3,1,8)],\nto indicate that the block (1,3,1,8) repeats indefinitely.\nExactly four continued fractions, for N<=13, have an odd period.\nHow many continued fractions for N<=10000 have an odd period?\n\nReferences:\n- https://en.wikipedia.org/wiki/Continued_fraction\n\"\"\"\n\nfrom math import floor, sqrt\n\n\ndef continuous_fraction_period(n: int) -> int:\n    \"\"\"\n    Returns the continued fraction period of a number n.\n\n    >>> continuous_fraction_period(2)\n    1\n    >>> continuous_fraction_period(5)\n    1\n    >>> continuous_fraction_period(7)\n    4\n    >>> continuous_fraction_period(11)\n    2\n    >>> continuous_fraction_period(13)\n    5\n    \"\"\"\n    numerator = 0.0\n    denominator = 1.0\n    root = int(sqrt(n))\n    integer_part = root\n    period = 0\n    while integer_part != 2 * root:\n        numerator = denominator * integer_part - numerator\n        denominator = (n - numerator**2) / denominator\n        integer_part = int((root + numerator) / denominator)\n        period += 1\n    return period\n\n\ndef solution(n: int = 10000) -> int:\n    \"\"\"\n    Returns the count of numbers <= 10000 with odd periods.\n    This function calls continuous_fraction_period for numbers which are\n    not perfect squares.\n    This is checked in if sr - floor(sr) != 0 statement.\n    If an odd period is returned by continuous_fraction_period,\n    count_odd_periods is increased by 1.\n\n    >>> solution(2)\n    1\n    >>> solution(5)\n    2\n    >>> solution(7)\n    2\n    >>> solution(11)\n    3\n    >>> solution(13)\n    4\n    \"\"\"\n    count_odd_periods = 0\n    for i in range(2, n + 1):\n        sr = sqrt(i)\n        if sr - floor(sr) != 0 and continuous_fraction_period(i) % 2 == 1:\n            count_odd_periods += 1\n    return count_odd_periods\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution(int(input().strip()))}\")\n"
  },
  {
    "path": "project_euler/problem_065/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_065/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 65: https://projecteuler.net/problem=65\n\nThe square root of 2 can be written as an infinite continued fraction.\n\nsqrt(2) = 1 + 1 / (2 + 1 / (2 + 1 / (2 + 1 / (2 + ...))))\n\nThe infinite continued fraction can be written, sqrt(2) = [1;(2)], (2)\nindicates that 2 repeats ad infinitum. In a similar way, sqrt(23) =\n[4;(1,3,1,8)].\n\nIt turns out that the sequence of partial values of continued\nfractions for square roots provide the best rational approximations.\nLet us consider the convergents for sqrt(2).\n\n1 + 1 / 2 = 3/2\n1 + 1 / (2 + 1 / 2) = 7/5\n1 + 1 / (2 + 1 / (2 + 1 / 2)) = 17/12\n1 + 1 / (2 + 1 / (2 + 1 / (2 + 1 / 2))) = 41/29\n\nHence the sequence of the first ten convergents for sqrt(2) are:\n1, 3/2, 7/5, 17/12, 41/29, 99/70, 239/169, 577/408, 1393/985, 3363/2378, ...\n\nWhat is most surprising is that the important mathematical constant,\ne = [2;1,2,1,1,4,1,1,6,1,...,1,2k,1,...].\n\nThe first ten terms in the sequence of convergents for e are:\n2, 3, 8/3, 11/4, 19/7, 87/32, 106/39, 193/71, 1264/465, 1457/536, ...\n\nThe sum of digits in the numerator of the 10th convergent is\n1 + 4 + 5 + 7 = 17.\n\nFind the sum of the digits in the numerator of the 100th convergent\nof the continued fraction for e.\n\n-----\n\nThe solution mostly comes down to finding an equation that will generate\nthe numerator of the continued fraction. For the i-th numerator, the\npattern is:\n\nn_i = m_i * n_(i-1) + n_(i-2)\n\nfor m_i = the i-th index of the continued fraction representation of e,\nn_0 = 1, and n_1 = 2 as the first 2 numbers of the representation.\n\nFor example:\nn_9 = 6 * 193 + 106 = 1264\n1 + 2 + 6 + 4 = 13\n\nn_10 = 1 * 193 + 1264 = 1457\n1 + 4 + 5 + 7 = 17\n\"\"\"\n\n\ndef sum_digits(num: int) -> int:\n    \"\"\"\n    Returns the sum of every digit in num.\n\n    >>> sum_digits(1)\n    1\n    >>> sum_digits(12345)\n    15\n    >>> sum_digits(999001)\n    28\n    \"\"\"\n    digit_sum = 0\n    while num > 0:\n        digit_sum += num % 10\n        num //= 10\n    return digit_sum\n\n\ndef solution(max_n: int = 100) -> int:\n    \"\"\"\n    Returns the sum of the digits in the numerator of the max-th convergent of\n    the continued fraction for e.\n\n    >>> solution(9)\n    13\n    >>> solution(10)\n    17\n    >>> solution(50)\n    91\n    \"\"\"\n    pre_numerator = 1\n    cur_numerator = 2\n\n    for i in range(2, max_n + 1):\n        temp = pre_numerator\n        e_cont = 2 * i // 3 if i % 3 == 0 else 1\n        pre_numerator = cur_numerator\n        cur_numerator = e_cont * pre_numerator + temp\n\n    return sum_digits(cur_numerator)\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_067/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_067/sol1.py",
    "content": "\"\"\"\nProblem Statement:\nBy starting at the top of the triangle below and moving to adjacent numbers on\nthe row below, the maximum total from top to bottom is 23.\n3\n7 4\n2 4 6\n8 5 9 3\nThat is, 3 + 7 + 4 + 9 = 23.\nFind the maximum total from top to bottom in triangle.txt (right click and\n'Save Link/Target As...'), a 15K text file containing a triangle with\none-hundred rows.\n\"\"\"\n\nimport os\n\n\ndef solution():\n    \"\"\"\n    Finds the maximum total in a triangle as described by the problem statement\n    above.\n\n    >>> solution()\n    7273\n    \"\"\"\n    script_dir = os.path.dirname(os.path.realpath(__file__))\n    triangle = os.path.join(script_dir, \"triangle.txt\")\n\n    with open(triangle) as f:\n        triangle = f.readlines()\n\n    a = []\n    for line in triangle:\n        numbers_from_line = []\n        for number in line.strip().split(\" \"):\n            numbers_from_line.append(int(number))\n        a.append(numbers_from_line)\n\n    for i in range(1, len(a)):\n        for j in range(len(a[i])):\n            number1 = a[i - 1][j] if j != len(a[i - 1]) else 0\n            number2 = a[i - 1][j - 1] if j > 0 else 0\n            a[i][j] += max(number1, number2)\n    return max(a[-1])\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_067/sol2.py",
    "content": "\"\"\"\nProblem Statement:\nBy starting at the top of the triangle below and moving to adjacent numbers on\nthe row below, the maximum total from top to bottom is 23.\n3\n7 4\n2 4 6\n8 5 9 3\nThat is, 3 + 7 + 4 + 9 = 23.\nFind the maximum total from top to bottom in triangle.txt (right click and\n'Save Link/Target As...'), a 15K text file containing a triangle with\none-hundred rows.\n\"\"\"\n\nimport os\n\n\ndef solution() -> int:\n    \"\"\"\n    Finds the maximum total in a triangle as described by the problem statement\n    above.\n    >>> solution()\n    7273\n    \"\"\"\n    script_dir = os.path.dirname(os.path.realpath(__file__))\n    triangle_path = os.path.join(script_dir, \"triangle.txt\")\n\n    with open(triangle_path) as in_file:\n        triangle = [[int(i) for i in line.split()] for line in in_file]\n\n    while len(triangle) != 1:\n        last_row = triangle.pop()\n        curr_row = triangle[-1]\n        for j in range(len(last_row) - 1):\n            curr_row[j] += max(last_row[j], last_row[j + 1])\n    return triangle[0][0]\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_067/triangle.txt",
    "content": "59\n73 41\n52 40 09\n26 53 06 34\n10 51 87 86 81\n61 95 66 57 25 68\n90 81 80 38 92 67 73\n30 28 51 76 81 18 75 44\n84 14 95 87 62 81 17 78 58\n21 46 71 58 02 79 62 39 31 09\n56 34 35 53 78 31 81 18 90 93 15\n78 53 04 21 84 93 32 13 97 11 37 51\n45 03 81 79 05 18 78 86 13 30 63 99 95\n39 87 96 28 03 38 42 17 82 87 58 07 22 57\n06 17 51 17 07 93 09 07 75 97 95 78 87 08 53\n67 66 59 60 88 99 94 65 55 77 55 34 27 53 78 28\n76 40 41 04 87 16 09 42 75 69 23 97 30 60 10 79 87\n12 10 44 26 21 36 32 84 98 60 13 12 36 16 63 31 91 35\n70 39 06 05 55 27 38 48 28 22 34 35 62 62 15 14 94 89 86\n66 56 68 84 96 21 34 34 34 81 62 40 65 54 62 05 98 03 02 60\n38 89 46 37 99 54 34 53 36 14 70 26 02 90 45 13 31 61 83 73 47\n36 10 63 96 60 49 41 05 37 42 14 58 84 93 96 17 09 43 05 43 06 59\n66 57 87 57 61 28 37 51 84 73 79 15 39 95 88 87 43 39 11 86 77 74 18\n54 42 05 79 30 49 99 73 46 37 50 02 45 09 54 52 27 95 27 65 19 45 26 45\n71 39 17 78 76 29 52 90 18 99 78 19 35 62 71 19 23 65 93 85 49 33 75 09 02\n33 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\n92 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\n24 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\n66 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\n48 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\n37 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\n55 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\n04 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\n75 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\n78 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\n42 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\n52 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\n61 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\n01 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\n93 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\n32 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\n32 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\n92 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\n91 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\n46 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\n99 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\n67 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\n18 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\n68 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\n94 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\n64 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\n43 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\n03 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\n71 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\n73 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\n76 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\n03 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\n49 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\n37 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\n90 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\n57 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\n18 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\n81 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\n90 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\n37 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\n77 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\n22 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\n72 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\n08 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\n56 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\n91 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\n23 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\n09 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\n47 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\n54 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\n96 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\n88 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\n29 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\n37 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\n51 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\n19 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\n13 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\n44 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\n54 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\n52 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\n54 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\n92 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\n41 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\n63 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\n12 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\n30 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\n51 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\n44 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\n65 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\n73 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\n17 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\n60 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\n64 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\n30 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\n23 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\n"
  },
  {
    "path": "project_euler/problem_068/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_068/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 68: https://projecteuler.net/problem=68\n\nMagic 5-gon ring\n\nProblem Statement:\nConsider the following \"magic\" 3-gon ring,\nfilled with the numbers 1 to 6, and each line adding to nine.\n\n   4\n    \\\n     3\n    / \\\n   1 - 2 - 6\n  /\n 5\n\nWorking clockwise, and starting from the group of three\nwith the numerically lowest external node (4,3,2 in this example),\neach solution can be described uniquely.\nFor example, the above solution can be described by the set: 4,3,2; 6,2,1; 5,1,3.\n\nIt is possible to complete the ring with four different totals: 9, 10, 11, and 12.\nThere are eight solutions in total.\nTotal   Solution Set\n9       4,2,3; 5,3,1; 6,1,2\n9       4,3,2; 6,2,1; 5,1,3\n10      2,3,5; 4,5,1; 6,1,3\n10      2,5,3; 6,3,1; 4,1,5\n11      1,4,6; 3,6,2; 5,2,4\n11      1,6,4; 5,4,2; 3,2,6\n12      1,5,6; 2,6,4; 3,4,5\n12      1,6,5; 3,5,4; 2,4,6\n\nBy concatenating each group it is possible to form 9-digit strings;\nthe maximum string for a 3-gon ring is 432621513.\n\nUsing the numbers 1 to 10, and depending on arrangements,\nit is possible to form 16- and 17-digit strings.\nWhat is the maximum 16-digit string for a \"magic\" 5-gon ring?\n\"\"\"\n\nfrom itertools import permutations\n\n\ndef solution(gon_side: int = 5) -> int:\n    \"\"\"\n    Find the maximum number for a \"magic\" gon_side-gon ring\n\n    The gon_side parameter should be in the range [3, 5],\n    other side numbers aren't tested\n\n    >>> solution(3)\n    432621513\n    >>> solution(4)\n    426561813732\n    >>> solution()\n    6531031914842725\n    >>> solution(6)\n    Traceback (most recent call last):\n    ValueError: gon_side must be in the range [3, 5]\n    \"\"\"\n    if gon_side < 3 or gon_side > 5:\n        raise ValueError(\"gon_side must be in the range [3, 5]\")\n\n    # Since it's 16, we know 10 is on the outer ring\n    # Put the big numbers at the end so that they are never the first number\n    small_numbers = list(range(gon_side + 1, 0, -1))\n    big_numbers = list(range(gon_side + 2, gon_side * 2 + 1))\n\n    for perm in permutations(small_numbers + big_numbers):\n        numbers = generate_gon_ring(gon_side, list(perm))\n        if is_magic_gon(numbers):\n            return int(\"\".join(str(n) for n in numbers))\n\n    msg = f\"Magic {gon_side}-gon ring is impossible\"\n    raise ValueError(msg)\n\n\ndef generate_gon_ring(gon_side: int, perm: list[int]) -> list[int]:\n    \"\"\"\n    Generate a gon_side-gon ring from a permutation state\n    The permutation state is the ring, but every duplicate is removed\n\n    >>> generate_gon_ring(3, [4, 2, 3, 5, 1, 6])\n    [4, 2, 3, 5, 3, 1, 6, 1, 2]\n    >>> generate_gon_ring(5, [6, 5, 4, 3, 2, 1, 7, 8, 9, 10])\n    [6, 5, 4, 3, 4, 2, 1, 2, 7, 8, 7, 9, 10, 9, 5]\n    \"\"\"\n    result = [0] * (gon_side * 3)\n    result[0:3] = perm[0:3]\n    perm.append(perm[1])\n\n    magic_number = 1 if gon_side < 5 else 2\n\n    for i in range(1, len(perm) // 3 + magic_number):\n        result[3 * i] = perm[2 * i + 1]\n        result[3 * i + 1] = result[3 * i - 1]\n        result[3 * i + 2] = perm[2 * i + 2]\n\n    return result\n\n\ndef is_magic_gon(numbers: list[int]) -> bool:\n    \"\"\"\n    Check if the solution set is a magic n-gon ring\n    Check that the first number is the smallest number on the outer ring\n    Take a list, and check if the sum of each 3 numbers chunk is equal to the same total\n\n    >>> is_magic_gon([4, 2, 3, 5, 3, 1, 6, 1, 2])\n    True\n    >>> is_magic_gon([4, 3, 2, 6, 2, 1, 5, 1, 3])\n    True\n    >>> is_magic_gon([2, 3, 5, 4, 5, 1, 6, 1, 3])\n    True\n    >>> is_magic_gon([1, 2, 3, 4, 5, 6, 7, 8, 9])\n    False\n    >>> is_magic_gon([1])\n    Traceback (most recent call last):\n    ValueError: a gon ring should have a length that is a multiple of 3\n    \"\"\"\n    if len(numbers) % 3 != 0:\n        raise ValueError(\"a gon ring should have a length that is a multiple of 3\")\n\n    if min(numbers[::3]) != numbers[0]:\n        return False\n\n    total = sum(numbers[:3])\n\n    return all(sum(numbers[i : i + 3]) == total for i in range(3, len(numbers), 3))\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_069/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_069/sol1.py",
    "content": "\"\"\"\nTotient maximum\nProblem 69: https://projecteuler.net/problem=69\n\nEuler's Totient function, φ(n) [sometimes called the phi function],\nis used to determine the number of numbers less than n which are relatively prime to n.\nFor example, as 1, 2, 4, 5, 7, and 8,\nare all less than nine and relatively prime to nine, φ(9)=6.\n\nn\tRelatively Prime\tφ(n)\tn/φ(n)\n2\t1\t                1\t    2\n3\t1,2\t                2\t    1.5\n4\t1,3\t                2\t    2\n5\t1,2,3,4\t            4\t    1.25\n6\t1,5\t\t            2\t    3\n7\t1,2,3,4,5,6\t        6\t    1.1666...\n8\t1,3,5,7\t\t        4\t    2\n9\t1,2,4,5,7,8\t        6\t    1.5\n10\t1,3,7,9\t            4\t    2.5\n\nIt can be seen that n=6 produces a maximum n/φ(n) for n ≤ 10.\n\nFind the value of n ≤ 1,000,000 for which n/φ(n) is a maximum.\n\"\"\"\n\n\ndef solution(n: int = 10**6) -> int:\n    \"\"\"\n    Returns solution to problem.\n    Algorithm:\n    1. Precompute φ(k) for all natural k, k <= n using product formula (wikilink below)\n    https://en.wikipedia.org/wiki/Euler%27s_totient_function#Euler's_product_formula\n\n    2. Find k/φ(k) for all k ≤ n and return the k that attains maximum\n\n    >>> solution(10)\n    6\n\n    >>> solution(100)\n    30\n\n    >>> solution(9973)\n    2310\n\n    \"\"\"\n\n    if n <= 0:\n        raise ValueError(\"Please enter an integer greater than 0\")\n\n    phi = list(range(n + 1))\n    for number in range(2, n + 1):\n        if phi[number] == number:\n            phi[number] -= 1\n            for multiple in range(number * 2, n + 1, number):\n                phi[multiple] = (phi[multiple] // number) * (number - 1)\n\n    answer = 1\n    for number in range(1, n + 1):\n        if (answer / phi[answer]) < (number / phi[number]):\n            answer = number\n\n    return answer\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_070/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_070/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 70: https://projecteuler.net/problem=70\n\nEuler's Totient function, φ(n) [sometimes called the phi function], is used to\ndetermine the number of positive numbers less than or equal to n which are\nrelatively prime to n. For example, as 1, 2, 4, 5, 7, and 8, are all less than\nnine and relatively prime to nine, φ(9)=6.\n\nThe number 1 is considered to be relatively prime to every positive number, so\nφ(1)=1.\n\nInterestingly, φ(87109)=79180, and it can be seen that 87109 is a permutation\nof 79180.\n\nFind the value of n, 1 < n < 10^7, for which φ(n) is a permutation of n and\nthe ratio n/φ(n) produces a minimum.\n\n-----\n\nThis is essentially brute force. Calculate all totients up to 10^7 and\nfind the minimum ratio of n/φ(n) that way. To minimize the ratio, we want\nto minimize n and maximize φ(n) as much as possible, so we can store the\nminimum fraction's numerator and denominator and calculate new fractions\nwith each totient to compare against. To avoid dividing by zero, I opt to\nuse cross multiplication.\n\nReferences:\nFinding totients\nhttps://en.wikipedia.org/wiki/Euler's_totient_function#Euler's_product_formula\n\"\"\"\n\nfrom __future__ import annotations\n\nimport numpy as np\n\n\ndef get_totients(max_one: int) -> list[int]:\n    \"\"\"\n    Calculates a list of totients from 0 to max_one exclusive, using the\n    definition of Euler's product formula.\n\n    >>> get_totients(5)\n    [0, 1, 1, 2, 2]\n\n    >>> get_totients(10)\n    [0, 1, 1, 2, 2, 4, 2, 6, 4, 6]\n    \"\"\"\n    totients = np.arange(max_one)\n\n    for i in range(2, max_one):\n        if totients[i] == i:\n            x = np.arange(i, max_one, i)  # array of indexes to select\n            totients[x] -= totients[x] // i\n\n    return totients.tolist()\n\n\ndef has_same_digits(num1: int, num2: int) -> bool:\n    \"\"\"\n    Return True if num1 and num2 have the same frequency of every digit, False\n    otherwise.\n\n    >>> has_same_digits(123456789, 987654321)\n    True\n\n    >>> has_same_digits(123, 23)\n    False\n\n    >>> has_same_digits(1234566, 123456)\n    False\n    \"\"\"\n    return sorted(str(num1)) == sorted(str(num2))\n\n\ndef solution(max_n: int = 10000000) -> int:\n    \"\"\"\n    Finds the value of n from 1 to max such that n/φ(n) produces a minimum.\n\n    >>> solution(100)\n    21\n\n    >>> solution(10000)\n    4435\n    \"\"\"\n\n    min_numerator = 1  # i\n    min_denominator = 0  # φ(i)\n    totients = get_totients(max_n + 1)\n\n    for i in range(2, max_n + 1):\n        t = totients[i]\n\n        if i * min_denominator < min_numerator * t and has_same_digits(i, t):\n            min_numerator = i\n            min_denominator = t\n\n    return min_numerator\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_071/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_071/sol1.py",
    "content": "\"\"\"\nOrdered fractions\nProblem 71\nhttps://projecteuler.net/problem=71\n\nConsider the fraction n/d, where n and d are positive\nintegers. If n<d and HCF(n,d)=1, it is called a reduced proper fraction.\n\nIf we list the set of reduced proper fractions for d ≤ 8\nin ascending order of size, we get:\n    1/8, 1/7, 1/6, 1/5, 1/4, 2/7, 1/3, 3/8, 2/5, 3/7,\n    1/2, 4/7, 3/5, 5/8, 2/3, 5/7, 3/4, 4/5, 5/6, 6/7, 7/8\n\nIt can be seen that 2/5 is the fraction immediately to the left of 3/7.\n\nBy listing the set of reduced proper fractions for d ≤ 1,000,000\nin ascending order of size, find the numerator of the fraction\nimmediately to the left of 3/7.\n\"\"\"\n\n\ndef solution(numerator: int = 3, denominator: int = 7, limit: int = 1000000) -> int:\n    \"\"\"\n    Returns the closest numerator of the fraction immediately to the\n    left of given fraction (numerator/denominator) from a list of reduced\n    proper fractions.\n    >>> solution()\n    428570\n    >>> solution(3, 7, 8)\n    2\n    >>> solution(6, 7, 60)\n    47\n    \"\"\"\n    max_numerator = 0\n    max_denominator = 1\n\n    for current_denominator in range(1, limit + 1):\n        current_numerator = current_denominator * numerator // denominator\n        if current_denominator % denominator == 0:\n            current_numerator -= 1\n        if current_numerator * max_denominator > current_denominator * max_numerator:\n            max_numerator = current_numerator\n            max_denominator = current_denominator\n    return max_numerator\n\n\nif __name__ == \"__main__\":\n    print(solution(numerator=3, denominator=7, limit=1000000))\n"
  },
  {
    "path": "project_euler/problem_072/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_072/sol1.py",
    "content": "\"\"\"\nProblem 72 Counting fractions: https://projecteuler.net/problem=72\n\nDescription:\n\nConsider the fraction, n/d, where n and d are positive integers. If n<d and HCF(n,d)=1,\nit is called a reduced proper fraction.\nIf we list the set of reduced proper fractions for d ≤ 8 in ascending order of size, we\nget: 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,\n3/4, 4/5, 5/6, 6/7, 7/8\nIt can be seen that there are 21 elements in this set.\nHow many elements would be contained in the set of reduced proper fractions for\nd ≤ 1,000,000?\n\nSolution:\n\nNumber of numbers between 1 and n that are coprime to n is given by the Euler's Totient\nfunction, phi(n). So, the answer is simply the sum of phi(n) for 2 <= n <= 1,000,000\nSum of phi(d), for all d|n = n. This result can be used to find phi(n) using a sieve.\n\nTime: 1 sec\n\"\"\"\n\nimport numpy as np\n\n\ndef solution(limit: int = 1_000_000) -> int:\n    \"\"\"\n    Returns an integer, the solution to the problem\n    >>> solution(10)\n    31\n    >>> solution(100)\n    3043\n    >>> solution(1_000)\n    304191\n    \"\"\"\n\n    # generating an array from -1 to limit\n    phi = np.arange(-1, limit)\n\n    for i in range(2, limit + 1):\n        if phi[i] == i - 1:\n            ind = np.arange(2 * i, limit + 1, i)  # indexes for selection\n            phi[ind] -= phi[ind] // i\n\n    return int(np.sum(phi[2 : limit + 1]))\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_072/sol2.py",
    "content": "\"\"\"\nProject Euler Problem 72: https://projecteuler.net/problem=72\n\nConsider the fraction, n/d, where n and d are positive integers. If n<d and HCF(n,d)=1,\nit is called a reduced proper fraction.\n\nIf we list the set of reduced proper fractions for d ≤ 8 in ascending order of size,\nwe get:\n\n1/8, 1/7, 1/6, 1/5, 1/4, 2/7, 1/3, 3/8, 2/5, 3/7, 1/2,\n4/7, 3/5, 5/8, 2/3, 5/7, 3/4, 4/5, 5/6, 6/7, 7/8\n\nIt can be seen that there are 21 elements in this set.\n\nHow many elements would be contained in the set of reduced proper fractions\nfor d ≤ 1,000,000?\n\"\"\"\n\n\ndef solution(limit: int = 1000000) -> int:\n    \"\"\"\n    Return the number of reduced proper fractions with denominator less than limit.\n    >>> solution(8)\n    21\n    >>> solution(1000)\n    304191\n    \"\"\"\n    primes = set(range(3, limit, 2))\n    primes.add(2)\n    for p in range(3, limit, 2):\n        if p not in primes:\n            continue\n        primes.difference_update(set(range(p * p, limit, p)))\n\n    phi = [float(n) for n in range(limit + 1)]\n\n    for p in primes:\n        for n in range(p, limit + 1, p):\n            phi[n] *= 1 - 1 / p\n\n    return int(sum(phi[2:]))\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_073/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_073/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 73: https://projecteuler.net/problem=73\n\nConsider the fraction, n/d, where n and d are positive integers.\nIf n<d and HCF(n,d)=1, it is called a reduced proper fraction.\n\nIf we list the set of reduced proper fractions for d ≤ 8 in ascending order of size,\nwe get:\n\n1/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,\n5/7, 3/4, 4/5, 5/6, 6/7, 7/8\n\nIt can be seen that there are 3 fractions between 1/3 and 1/2.\n\nHow many fractions lie between 1/3 and 1/2 in the sorted set\nof reduced proper fractions for d ≤ 12,000?\n\"\"\"\n\nfrom math import gcd\n\n\ndef solution(max_d: int = 12_000) -> int:\n    \"\"\"\n    Returns number of fractions lie between 1/3 and 1/2 in the sorted set\n    of reduced proper fractions for d ≤ max_d\n\n    >>> solution(4)\n    0\n\n    >>> solution(5)\n    1\n\n    >>> solution(8)\n    3\n    \"\"\"\n\n    fractions_number = 0\n    for d in range(max_d + 1):\n        n_start = d // 3 + 1\n        n_step = 1\n        if d % 2 == 0:\n            n_start += 1 - n_start % 2\n            n_step = 2\n        for n in range(n_start, (d + 1) // 2, n_step):\n            if gcd(n, d) == 1:\n                fractions_number += 1\n    return fractions_number\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_074/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_074/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 74: https://projecteuler.net/problem=74\n\nThe number 145 is well known for the property that the sum of the factorial of its\ndigits is equal to 145:\n\n1! + 4! + 5! = 1 + 24 + 120 = 145\n\nPerhaps less well known is 169, in that it produces the longest chain of numbers that\nlink back to 169; it turns out that there are only three such loops that exist:\n\n169 → 363601 → 1454 → 169\n871 → 45361 → 871\n872 → 45362 → 872\n\nIt is not difficult to prove that EVERY starting number will eventually get stuck in\na loop. For example,\n\n69 → 363600 → 1454 → 169 → 363601 (→ 1454)\n78 → 45360 → 871 → 45361 (→ 871)\n540 → 145 (→ 145)\n\nStarting with 69 produces a chain of five non-repeating terms, but the longest\nnon-repeating chain with a starting number below one million is sixty terms.\n\nHow many chains, with a starting number below one million, contain exactly sixty\nnon-repeating terms?\n\"\"\"\n\nDIGIT_FACTORIALS = {\n    \"0\": 1,\n    \"1\": 1,\n    \"2\": 2,\n    \"3\": 6,\n    \"4\": 24,\n    \"5\": 120,\n    \"6\": 720,\n    \"7\": 5040,\n    \"8\": 40320,\n    \"9\": 362880,\n}\n\nCACHE_SUM_DIGIT_FACTORIALS = {145: 145}\n\nCHAIN_LENGTH_CACHE = {\n    145: 0,\n    169: 3,\n    36301: 3,\n    1454: 3,\n    871: 2,\n    45361: 2,\n    872: 2,\n}\n\n\ndef sum_digit_factorials(n: int) -> int:\n    \"\"\"\n    Return the sum of the factorial of the digits of n.\n    >>> sum_digit_factorials(145)\n    145\n    >>> sum_digit_factorials(45361)\n    871\n    >>> sum_digit_factorials(540)\n    145\n    \"\"\"\n    if n in CACHE_SUM_DIGIT_FACTORIALS:\n        return CACHE_SUM_DIGIT_FACTORIALS[n]\n    ret = sum(DIGIT_FACTORIALS[let] for let in str(n))\n    CACHE_SUM_DIGIT_FACTORIALS[n] = ret\n    return ret\n\n\ndef chain_length(n: int, previous: set | None = None) -> int:\n    \"\"\"\n    Calculate the length of the chain of non-repeating terms starting with n.\n    Previous is a set containing the previous member of the chain.\n    >>> chain_length(10101)\n    11\n    >>> chain_length(555)\n    20\n    >>> chain_length(178924)\n    39\n    \"\"\"\n    previous = previous or set()\n    if n in CHAIN_LENGTH_CACHE:\n        return CHAIN_LENGTH_CACHE[n]\n    next_number = sum_digit_factorials(n)\n    if next_number in previous:\n        CHAIN_LENGTH_CACHE[n] = 0\n        return 0\n    else:\n        previous.add(n)\n        ret = 1 + chain_length(next_number, previous)\n        CHAIN_LENGTH_CACHE[n] = ret\n        return ret\n\n\ndef solution(num_terms: int = 60, max_start: int = 1000000) -> int:\n    \"\"\"\n    Return the number of chains with a starting number below one million which\n    contain exactly n non-repeating terms.\n    >>> solution(10,1000)\n    28\n    \"\"\"\n    return sum(1 for i in range(1, max_start) if chain_length(i) == num_terms)\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_074/sol2.py",
    "content": "\"\"\"\nProject Euler Problem 074: https://projecteuler.net/problem=74\n\nThe number 145 is well known for the property that the sum of the factorial of its\ndigits is equal to 145:\n\n1! + 4! + 5! = 1 + 24 + 120 = 145\n\nPerhaps less well known is 169, in that it produces the longest chain of numbers that\nlink back to 169; it turns out that there are only three such loops that exist:\n\n169 → 363601 → 1454 → 169\n871 → 45361 → 871\n872 → 45362 → 872\n\nIt is not difficult to prove that EVERY starting number will eventually get stuck in a\nloop. For example,\n\n69 → 363600 → 1454 → 169 → 363601 (→ 1454)\n78 → 45360 → 871 → 45361 (→ 871)\n540 → 145 (→ 145)\n\nStarting with 69 produces a chain of five non-repeating terms, but the longest\nnon-repeating chain with a starting number below one million is sixty terms.\n\nHow many chains, with a starting number below one million, contain exactly sixty\nnon-repeating terms?\n\nSolution approach:\nThis solution simply consists in a loop that generates the chains of non repeating\nitems using the cached sizes of the previous chains.\nThe generation of the chain stops before a repeating item or if the size of the chain\nis greater then the desired one.\nAfter generating each chain, the length is checked and the counter increases.\n\"\"\"\n\nfrom math import factorial\n\nDIGIT_FACTORIAL: dict[str, int] = {str(digit): factorial(digit) for digit in range(10)}\n\n\ndef digit_factorial_sum(number: int) -> int:\n    \"\"\"\n    Function to perform the sum of the factorial of all the digits in number\n\n    >>> digit_factorial_sum(69.0)\n    Traceback (most recent call last):\n        ...\n    TypeError: Parameter number must be int\n\n    >>> digit_factorial_sum(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Parameter number must be greater than or equal to 0\n\n    >>> digit_factorial_sum(0)\n    1\n\n    >>> digit_factorial_sum(69)\n    363600\n    \"\"\"\n    if not isinstance(number, int):\n        raise TypeError(\"Parameter number must be int\")\n\n    if number < 0:\n        raise ValueError(\"Parameter number must be greater than or equal to 0\")\n\n    # Converts number in string to iterate on its digits and adds its factorial.\n    return sum(DIGIT_FACTORIAL[digit] for digit in str(number))\n\n\ndef solution(chain_length: int = 60, number_limit: int = 1000000) -> int:\n    \"\"\"\n    Returns the number of numbers below number_limit that produce chains with exactly\n    chain_length non repeating elements.\n\n    >>> solution(10.0, 1000)\n    Traceback (most recent call last):\n        ...\n    TypeError: Parameters chain_length and number_limit must be int\n\n    >>> solution(10, 1000.0)\n    Traceback (most recent call last):\n        ...\n    TypeError: Parameters chain_length and number_limit must be int\n\n    >>> solution(0, 1000)\n    Traceback (most recent call last):\n        ...\n    ValueError: Parameters chain_length and number_limit must be greater than 0\n\n    >>> solution(10, 0)\n    Traceback (most recent call last):\n        ...\n    ValueError: Parameters chain_length and number_limit must be greater than 0\n\n    >>> solution(10, 1000)\n    26\n    \"\"\"\n\n    if not isinstance(chain_length, int) or not isinstance(number_limit, int):\n        raise TypeError(\"Parameters chain_length and number_limit must be int\")\n\n    if chain_length <= 0 or number_limit <= 0:\n        raise ValueError(\n            \"Parameters chain_length and number_limit must be greater than 0\"\n        )\n\n    # the counter for the chains with the exact desired length\n    chains_counter = 0\n    # the cached sizes of the previous chains\n    chain_sets_lengths: dict[int, int] = {}\n\n    for start_chain_element in range(1, number_limit):\n        # The temporary set will contain the elements of the chain\n        chain_set = set()\n        chain_set_length = 0\n\n        # Stop computing the chain when you find a cached size, a repeating item or the\n        # length is greater then the desired one.\n        chain_element = start_chain_element\n        while (\n            chain_element not in chain_sets_lengths\n            and chain_element not in chain_set\n            and chain_set_length <= chain_length\n        ):\n            chain_set.add(chain_element)\n            chain_set_length += 1\n            chain_element = digit_factorial_sum(chain_element)\n\n        if chain_element in chain_sets_lengths:\n            chain_set_length += chain_sets_lengths[chain_element]\n\n        chain_sets_lengths[start_chain_element] = chain_set_length\n\n        # If chain contains the exact amount of elements increase the counter\n        if chain_set_length == chain_length:\n            chains_counter += 1\n\n    return chains_counter\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    print(f\"{solution()}\")\n"
  },
  {
    "path": "project_euler/problem_075/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_075/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 75: https://projecteuler.net/problem=75\n\nIt turns out that 12 cm is the smallest length of wire that can be bent to form an\ninteger sided right angle triangle in exactly one way, but there are many more examples.\n\n12 cm: (3,4,5)\n24 cm: (6,8,10)\n30 cm: (5,12,13)\n36 cm: (9,12,15)\n40 cm: (8,15,17)\n48 cm: (12,16,20)\n\nIn contrast, some lengths of wire, like 20 cm, cannot be bent to form an integer sided\nright angle triangle, and other lengths allow more than one solution to be found; for\nexample, using 120 cm it is possible to form exactly three different integer sided\nright angle triangles.\n\n120 cm: (30,40,50), (20,48,52), (24,45,51)\n\nGiven that L is the length of the wire, for how many values of L ≤ 1,500,000 can\nexactly one integer sided right angle triangle be formed?\n\nSolution: we generate all pythagorean triples using Euclid's formula and\nkeep track of the frequencies of the perimeters.\n\nReference: https://en.wikipedia.org/wiki/Pythagorean_triple#Generating_a_triple\n\"\"\"\n\nfrom collections import defaultdict\nfrom math import gcd\n\n\ndef solution(limit: int = 1500000) -> int:\n    \"\"\"\n    Return the number of values of L <= limit such that a wire of length L can be\n    formmed into an integer sided right angle triangle in exactly one way.\n    >>> solution(50)\n    6\n    >>> solution(1000)\n    112\n    >>> solution(50000)\n    5502\n    \"\"\"\n    frequencies: defaultdict = defaultdict(int)\n    euclid_m = 2\n    while 2 * euclid_m * (euclid_m + 1) <= limit:\n        for euclid_n in range((euclid_m % 2) + 1, euclid_m, 2):\n            if gcd(euclid_m, euclid_n) > 1:\n                continue\n            primitive_perimeter = 2 * euclid_m * (euclid_m + euclid_n)\n            for perimeter in range(primitive_perimeter, limit + 1, primitive_perimeter):\n                frequencies[perimeter] += 1\n        euclid_m += 1\n    return sum(1 for frequency in frequencies.values() if frequency == 1)\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_076/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_076/sol1.py",
    "content": "\"\"\"\nCounting Summations\nProblem 76: https://projecteuler.net/problem=76\n\nIt is possible to write five as a sum in exactly six different ways:\n\n4 + 1\n3 + 2\n3 + 1 + 1\n2 + 2 + 1\n2 + 1 + 1 + 1\n1 + 1 + 1 + 1 + 1\n\nHow many different ways can one hundred be written as a sum of at least two\npositive integers?\n\"\"\"\n\n\ndef solution(m: int = 100) -> int:\n    \"\"\"\n    Returns the number of different ways the number m can be written as a\n    sum of at least two positive integers.\n\n    >>> solution(100)\n    190569291\n    >>> solution(50)\n    204225\n    >>> solution(30)\n    5603\n    >>> solution(10)\n    41\n    >>> solution(5)\n    6\n    >>> solution(3)\n    2\n    >>> solution(2)\n    1\n    >>> solution(1)\n    0\n    \"\"\"\n    memo = [[0 for _ in range(m)] for _ in range(m + 1)]\n    for i in range(m + 1):\n        memo[i][0] = 1\n\n    for n in range(m + 1):\n        for k in range(1, m):\n            memo[n][k] += memo[n][k - 1]\n            if n > k:\n                memo[n][k] += memo[n - k - 1][k]\n\n    return memo[m][m - 1] - 1\n\n\nif __name__ == \"__main__\":\n    print(solution(int(input(\"Enter a number: \").strip())))\n"
  },
  {
    "path": "project_euler/problem_077/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_077/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 77: https://projecteuler.net/problem=77\n\nIt is possible to write ten as the sum of primes in exactly five different ways:\n\n7 + 3\n5 + 5\n5 + 3 + 2\n3 + 3 + 2 + 2\n2 + 2 + 2 + 2 + 2\n\nWhat is the first value which can be written as the sum of primes in over\nfive thousand different ways?\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom functools import lru_cache\nfrom math import ceil\n\nNUM_PRIMES = 100\n\nprimes = set(range(3, NUM_PRIMES, 2))\nprimes.add(2)\nprime: int\n\nfor prime in range(3, ceil(NUM_PRIMES**0.5), 2):\n    if prime not in primes:\n        continue\n    primes.difference_update(set(range(prime * prime, NUM_PRIMES, prime)))\n\n\n@lru_cache(maxsize=100)\ndef partition(number_to_partition: int) -> set[int]:\n    \"\"\"\n    Return a set of integers corresponding to unique prime partitions of n.\n    The unique prime partitions can be represented as unique prime decompositions,\n    e.g. (7+3) <-> 7*3 = 12, (3+3+2+2) = 3*3*2*2 = 36\n    >>> partition(10)\n    {32, 36, 21, 25, 30}\n    >>> partition(15)\n    {192, 160, 105, 44, 112, 243, 180, 150, 216, 26, 125, 126}\n    >>> len(partition(20))\n    26\n    \"\"\"\n    if number_to_partition < 0:\n        return set()\n    elif number_to_partition == 0:\n        return {1}\n\n    ret: set[int] = set()\n    prime: int\n    sub: int\n\n    for prime in primes:\n        if prime > number_to_partition:\n            continue\n        for sub in partition(number_to_partition - prime):\n            ret.add(sub * prime)\n\n    return ret\n\n\ndef solution(number_unique_partitions: int = 5000) -> int | None:\n    \"\"\"\n    Return the smallest integer that can be written as the sum of primes in over\n    m unique ways.\n    >>> solution(4)\n    10\n    >>> solution(500)\n    45\n    >>> solution(1000)\n    53\n    \"\"\"\n    for number_to_partition in range(1, NUM_PRIMES):\n        if len(partition(number_to_partition)) > number_unique_partitions:\n            return number_to_partition\n    return None\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_078/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_078/sol1.py",
    "content": "\"\"\"\nProblem 78\nUrl: https://projecteuler.net/problem=78\nStatement:\nLet p(n) represent the number of different ways in which n coins\ncan be separated into piles. For example, five coins can be separated\ninto piles in exactly seven different ways, so p(5)=7.\n\n            OOOOO\n            OOOO   O\n            OOO   OO\n            OOO   O   O\n            OO   OO   O\n            OO   O   O   O\n            O   O   O   O   O\nFind the least value of n for which p(n) is divisible by one million.\n\"\"\"\n\nimport itertools\n\n\ndef solution(number: int = 1000000) -> int:\n    \"\"\"\n    >>> solution(1)\n    1\n\n    >>> solution(9)\n    14\n\n    >>> solution()\n    55374\n    \"\"\"\n    partitions = [1]\n\n    for i in itertools.count(len(partitions)):\n        item = 0\n        for j in itertools.count(1):\n            sign = -1 if j % 2 == 0 else +1\n            index = (j * j * 3 - j) // 2\n            if index > i:\n                break\n            item += partitions[i - index] * sign\n            item %= number\n            index += j\n            if index > i:\n                break\n            item += partitions[i - index] * sign\n            item %= number\n\n        if item == 0:\n            return i\n        partitions.append(item)\n\n    return 0\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_079/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_079/keylog.txt",
    "content": "319\n680\n180\n690\n129\n620\n762\n689\n762\n318\n368\n710\n720\n710\n629\n168\n160\n689\n716\n731\n736\n729\n316\n729\n729\n710\n769\n290\n719\n680\n318\n389\n162\n289\n162\n718\n729\n319\n790\n680\n890\n362\n319\n760\n316\n729\n380\n319\n728\n716\n"
  },
  {
    "path": "project_euler/problem_079/keylog_test.txt",
    "content": "319\n680\n180\n690\n129\n620\n698\n318\n328\n310\n320\n610\n629\n198\n190\n631\n"
  },
  {
    "path": "project_euler/problem_079/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 79: https://projecteuler.net/problem=79\n\nPasscode derivation\n\nA common security method used for online banking is to ask the user for three\nrandom characters from a passcode. For example, if the passcode was 531278,\nthey may ask for the 2nd, 3rd, and 5th characters; the expected reply would\nbe: 317.\n\nThe text file, keylog.txt, contains fifty successful login attempts.\n\nGiven that the three characters are always asked for in order, analyse the file\nso as to determine the shortest possible secret passcode of unknown length.\n\"\"\"\n\nimport itertools\nfrom pathlib import Path\n\n\ndef find_secret_passcode(logins: list[str]) -> int:\n    \"\"\"\n    Returns the shortest possible secret passcode of unknown length.\n\n    >>> find_secret_passcode([\"135\", \"259\", \"235\", \"189\", \"690\", \"168\", \"120\",\n    ...     \"136\", \"289\", \"589\", \"160\", \"165\", \"580\", \"369\", \"250\", \"280\"])\n    12365890\n\n    >>> find_secret_passcode([\"426\", \"281\", \"061\", \"819\" \"268\", \"406\", \"420\",\n    ...     \"428\", \"209\", \"689\", \"019\", \"421\", \"469\", \"261\", \"681\", \"201\"])\n    4206819\n    \"\"\"\n\n    # Split each login by character e.g. '319' -> ('3', '1', '9')\n    split_logins = [tuple(login) for login in logins]\n\n    unique_chars = {char for login in split_logins for char in login}\n\n    for permutation in itertools.permutations(unique_chars):\n        satisfied = True\n        for login in logins:\n            if not (\n                permutation.index(login[0])\n                < permutation.index(login[1])\n                < permutation.index(login[2])\n            ):\n                satisfied = False\n                break\n\n        if satisfied:\n            return int(\"\".join(permutation))\n\n    raise Exception(\"Unable to find the secret passcode\")\n\n\ndef solution(input_file: str = \"keylog.txt\") -> int:\n    \"\"\"\n    Returns the shortest possible secret passcode of unknown length\n    for successful login attempts given by `input_file` text file.\n\n    >>> solution(\"keylog_test.txt\")\n    6312980\n    \"\"\"\n    logins = Path(__file__).parent.joinpath(input_file).read_text().splitlines()\n\n    return find_secret_passcode(logins)\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_080/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_080/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 80: https://projecteuler.net/problem=80\nAuthor: Sandeep Gupta\nProblem statement: For the first one hundred natural numbers, find the total of\nthe digital sums of the first one hundred decimal digits for all the irrational\nsquare roots.\nTime: 5 October 2020, 18:30\n\"\"\"\n\nimport decimal\n\n\ndef solution() -> int:\n    \"\"\"\n    To evaluate the sum, Used decimal python module to calculate the decimal\n    places up to 100, the most important thing would be take calculate\n    a few extra places for decimal otherwise there will be rounding\n    error.\n\n    >>> solution()\n    40886\n    \"\"\"\n    answer = 0\n    decimal_context = decimal.Context(prec=105)\n    for i in range(2, 100):\n        number = decimal.Decimal(i)\n        sqrt_number = number.sqrt(decimal_context)\n        if len(str(sqrt_number)) > 1:\n            answer += int(str(sqrt_number)[0])\n            sqrt_number_str = str(sqrt_number)[2:101]\n            answer += sum(int(x) for x in sqrt_number_str)\n    return answer\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_081/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_081/matrix.txt",
    "content": "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\n1096,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\n9607,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\n7206,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\n3620,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\n1074,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\n4295,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\n510,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\n9444,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\n3327,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\n6882,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\n7338,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\n4420,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\n356,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\n9870,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\n192,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\n1046,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\n4659,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\n5759,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\n1571,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\n1822,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\n8738,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\n7047,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\n3975,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\n9248,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\n5093,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\n6237,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\n9905,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\n5825,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\n6223,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\n5826,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\n1861,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\n4052,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\n4629,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\n8316,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\n2341,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\n6430,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\n2810,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\n6206,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\n3847,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\n5458,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\n3266,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\n1998,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\n8878,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\n3637,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\n8497,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\n8188,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\n9935,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\n3466,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\n1005,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\n7280,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\n9517,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\n7444,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\n3287,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\n1772,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\n126,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\n8074,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\n7845,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\n4164,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\n4258,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\n7854,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\n7178,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\n6957,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\n4417,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\n9284,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\n3787,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\n2650,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\n3101,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\n4865,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\n171,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\n3744,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\n2810,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\n7096,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\n8830,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\n2738,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\n6044,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\n8478,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\n2265,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\n2132,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\n5304,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\n"
  },
  {
    "path": "project_euler/problem_081/sol1.py",
    "content": "\"\"\"\nProblem 81: https://projecteuler.net/problem=81\nIn the 5 by 5 matrix below, the minimal path sum from the top left to the bottom right,\nby only moving to the right and down, is indicated in bold red and is equal to 2427.\n\n    [131]   673   234    103    18\n    [201]  [96]  [342]   965   150\n     630   803   [746]  [422]  111\n     537   699   497    [121]  956\n     805   732   524    [37]  [331]\n\nFind the minimal path sum from the top left to the bottom right by only moving right\nand down in matrix.txt (https://projecteuler.net/project/resources/p081_matrix.txt),\na 31K text file containing an 80 by 80 matrix.\n\"\"\"\n\nimport os\n\n\ndef solution(filename: str = \"matrix.txt\") -> int:\n    \"\"\"\n    Returns the minimal path sum from the top left to the bottom right of the matrix.\n    >>> solution()\n    427337\n    \"\"\"\n    with open(os.path.join(os.path.dirname(__file__), filename)) as in_file:\n        data = in_file.read()\n\n    grid = [[int(cell) for cell in row.split(\",\")] for row in data.strip().splitlines()]\n    dp = [[0 for cell in row] for row in grid]\n    n = len(grid[0])\n\n    dp = [[0 for i in range(n)] for j in range(n)]\n    dp[0][0] = grid[0][0]\n    for i in range(1, n):\n        dp[0][i] = grid[0][i] + dp[0][i - 1]\n    for i in range(1, n):\n        dp[i][0] = grid[i][0] + dp[i - 1][0]\n\n    for i in range(1, n):\n        for j in range(1, n):\n            dp[i][j] = grid[i][j] + min(dp[i - 1][j], dp[i][j - 1])\n\n    return dp[-1][-1]\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_082/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_082/input.txt",
    "content": "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\n1096,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\n9607,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\n7206,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\n3620,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\n1074,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\n4295,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\n510,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\n9444,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\n3327,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\n6882,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\n7338,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\n4420,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\n356,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\n9870,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\n192,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\n1046,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\n4659,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\n5759,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\n1571,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\n1822,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\n8738,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\n7047,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\n3975,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\n9248,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\n5093,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\n6237,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\n9905,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\n5825,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\n6223,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\n5826,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\n1861,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\n4052,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\n4629,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\n8316,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\n2341,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\n6430,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\n2810,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\n6206,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\n3847,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\n5458,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\n3266,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\n1998,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\n8878,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\n3637,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\n8497,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\n8188,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\n9935,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\n3466,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\n1005,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\n7280,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\n9517,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\n7444,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\n3287,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\n1772,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\n126,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\n8074,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\n7845,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\n4164,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\n4258,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\n7854,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\n7178,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\n6957,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\n4417,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\n9284,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\n3787,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\n2650,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\n3101,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\n4865,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\n171,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\n3744,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\n2810,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\n7096,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\n8830,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\n2738,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\n6044,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\n8478,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\n2265,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\n2132,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\n5304,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\n"
  },
  {
    "path": "project_euler/problem_082/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 82: https://projecteuler.net/problem=82\n\nThe minimal path sum in the 5 by 5 matrix below, by starting in any cell\nin the left column and finishing in any cell in the right column,\nand only moving up, down, and right, is indicated in red and bold;\nthe sum is equal to 994.\n\n     131    673   [234]  [103]  [18]\n    [201]  [96]   [342]   965    150\n     630    803    746    422    111\n     537    699    497    121    956\n     805    732    524    37     331\n\nFind the minimal path sum from the left column to the right column in matrix.txt\n(https://projecteuler.net/project/resources/p082_matrix.txt)\n(right click and \"Save Link/Target As...\"),\na 31K text file containing an 80 by 80 matrix.\n\"\"\"\n\nimport os\n\n\ndef solution(filename: str = \"input.txt\") -> int:\n    \"\"\"\n    Returns the minimal path sum in the matrix from the file, by starting in any cell\n    in the left column and finishing in any cell in the right column,\n    and only moving up, down, and right\n\n    >>> solution(\"test_matrix.txt\")\n    994\n    \"\"\"\n\n    with open(os.path.join(os.path.dirname(__file__), filename)) as input_file:\n        matrix = [\n            [int(element) for element in line.split(\",\")]\n            for line in input_file.readlines()\n        ]\n\n    rows = len(matrix)\n    cols = len(matrix[0])\n\n    minimal_path_sums = [[-1 for _ in range(cols)] for _ in range(rows)]\n    for i in range(rows):\n        minimal_path_sums[i][0] = matrix[i][0]\n\n    for j in range(1, cols):\n        for i in range(rows):\n            minimal_path_sums[i][j] = minimal_path_sums[i][j - 1] + matrix[i][j]\n\n        for i in range(1, rows):\n            minimal_path_sums[i][j] = min(\n                minimal_path_sums[i][j], minimal_path_sums[i - 1][j] + matrix[i][j]\n            )\n\n        for i in range(rows - 2, -1, -1):\n            minimal_path_sums[i][j] = min(\n                minimal_path_sums[i][j], minimal_path_sums[i + 1][j] + matrix[i][j]\n            )\n\n    return min(minimal_path_sums_row[-1] for minimal_path_sums_row in minimal_path_sums)\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_082/test_matrix.txt",
    "content": "131,673,234,103,18\n201,96,342,965,150\n630,803,746,422,111\n537,699,497,121,956\n805,732,524,37,331\n"
  },
  {
    "path": "project_euler/problem_085/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_085/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 85: https://projecteuler.net/problem=85\n\nBy counting carefully it can be seen that a rectangular grid measuring 3 by 2\ncontains eighteen rectangles.\n￼\nAlthough there exists no rectangular grid that contains exactly two million\nrectangles, find the area of the grid with the nearest solution.\n\nSolution:\n\n    For a grid with side-lengths a and b, the number of rectangles contained in the grid\n    is [a*(a+1)/2] * [b*(b+1)/2)], which happens to be the product of the a-th and b-th\n    triangle numbers. So to find the solution grid (a,b), we need to find the two\n    triangle numbers whose product is closest to two million.\n\n    Denote these two triangle numbers Ta and Tb. We want their product Ta*Tb to be\n    as close as possible to 2m. Assuming that the best solution is fairly close to 2m,\n    We can assume that both Ta and Tb are roughly bounded by 2m. Since Ta = a(a+1)/2,\n    we can assume that a (and similarly b) are roughly bounded by sqrt(2 * 2m) = 2000.\n    Since this is a rough bound, to be on the safe side we add 10%. Therefore we start\n    by generating all the triangle numbers Ta for 1 <= a <= 2200. This can be done\n    iteratively since the ith triangle number is the sum of 1,2, ... ,i, and so\n    T(i) = T(i-1) + i.\n\n    We then search this list of triangle numbers for the two that give a product\n    closest to our target of two million. Rather than testing every combination of 2\n    elements of the list, which would find the result in quadratic time, we can find\n    the best pair in linear time.\n\n    We iterate through the list of triangle numbers using enumerate() so we have a\n    and Ta. Since we want Ta * Tb to be as close as possible to 2m, we know that Tb\n    needs to be roughly 2m / Ta. Using the formula Tb = b*(b+1)/2 as well as the\n    quadratic formula, we can solve for b:\n    b is roughly (-1 + sqrt(1 + 8 * 2m / Ta)) / 2.\n\n    Since the closest integers to this estimate will give product closest to 2m,\n    we only need to consider the integers above and below. It's then a simple matter\n    to get the triangle numbers corresponding to those integers, calculate the product\n    Ta * Tb, compare that product to our target 2m, and keep track of the (a,b) pair\n    that comes the closest.\n\n\nReference: https://en.wikipedia.org/wiki/Triangular_number\n           https://en.wikipedia.org/wiki/Quadratic_formula\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom math import ceil, floor, sqrt\n\n\ndef solution(target: int = 2000000) -> int:\n    \"\"\"\n    Find the area of the grid which contains as close to two million rectangles\n    as possible.\n    >>> solution(20)\n    6\n    >>> solution(2000)\n    72\n    >>> solution(2000000000)\n    86595\n    \"\"\"\n    triangle_numbers: list[int] = [0]\n    idx: int\n\n    for idx in range(1, ceil(sqrt(target * 2) * 1.1)):\n        triangle_numbers.append(triangle_numbers[-1] + idx)\n\n    # we want this to be as close as possible to target\n    best_product: int = 0\n    # the area corresponding to the grid that gives the product closest to target\n    area: int = 0\n    # an estimate of b, using the quadratic formula\n    b_estimate: float\n    # the largest integer less than b_estimate\n    b_floor: int\n    # the largest integer less than b_estimate\n    b_ceil: int\n    # the triangle number corresponding to b_floor\n    triangle_b_first_guess: int\n    # the triangle number corresponding to b_ceil\n    triangle_b_second_guess: int\n\n    for idx_a, triangle_a in enumerate(triangle_numbers[1:], 1):\n        b_estimate = (-1 + sqrt(1 + 8 * target / triangle_a)) / 2\n        b_floor = floor(b_estimate)\n        b_ceil = ceil(b_estimate)\n        triangle_b_first_guess = triangle_numbers[b_floor]\n        triangle_b_second_guess = triangle_numbers[b_ceil]\n\n        if abs(target - triangle_b_first_guess * triangle_a) < abs(\n            target - best_product\n        ):\n            best_product = triangle_b_first_guess * triangle_a\n            area = idx_a * b_floor\n\n        if abs(target - triangle_b_second_guess * triangle_a) < abs(\n            target - best_product\n        ):\n            best_product = triangle_b_second_guess * triangle_a\n            area = idx_a * b_ceil\n\n    return area\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_086/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_086/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 86: https://projecteuler.net/problem=86\n\nA spider, S, sits in one corner of a cuboid room, measuring 6 by 5 by 3, and a fly, F,\nsits in the opposite corner. By travelling on the surfaces of the room the shortest\n\"straight line\" distance from S to F is 10 and the path is shown on the diagram.\n￼\nHowever, there are up to three \"shortest\" path candidates for any given cuboid and the\nshortest route doesn't always have integer length.\n\nIt can be shown that there are exactly 2060 distinct cuboids, ignoring rotations, with\ninteger dimensions, up to a maximum size of M by M by M, for which the shortest route\nhas integer length when M = 100. This is the least value of M for which the number of\nsolutions first exceeds two thousand; the number of solutions when M = 99 is 1975.\n\nFind the least value of M such that the number of solutions first exceeds one million.\n\nSolution:\n    Label the 3 side-lengths of the cuboid a,b,c such that 1 <= a <= b <= c <= M.\n    By conceptually \"opening up\" the cuboid and laying out its faces on a plane,\n    it can be seen that the shortest distance between 2 opposite corners is\n    sqrt((a+b)^2 + c^2). This distance is an integer if and only if (a+b),c make up\n    the first 2 sides of a pythagorean triplet.\n\n    The second useful insight is rather than calculate the number of cuboids\n    with integral shortest distance for each maximum cuboid side-length M,\n    we can calculate this number iteratively each time we increase M, as follows.\n    The set of cuboids satisfying this property with maximum side-length M-1 is a\n    subset of the cuboids satisfying the property with maximum side-length M\n    (since any cuboids with side lengths <= M-1 are also <= M). To calculate the\n    number of cuboids in the larger set (corresponding to M) we need only consider\n    the cuboids which have at least one side of length M. Since we have ordered the\n    side lengths a <= b <= c, we can assume that c = M. Then we just need to count\n    the number of pairs a,b satisfying the conditions:\n        sqrt((a+b)^2 + M^2) is integer\n        1 <= a <= b <= M\n\n    To count the number of pairs (a,b) satisfying these conditions, write d = a+b.\n    Now we have:\n        1 <= a <= b <= M  =>  2 <= d <= 2*M\n                                   we can actually make the second equality strict,\n                                   since d = 2*M => d^2 + M^2 = 5M^2\n                                              => shortest distance = M * sqrt(5)\n                                              => not integral.\n        a + b = d => b = d - a\n                 and a <= b\n                  => a <= d/2\n                also a <= M\n                  => a <= min(M, d//2)\n\n        a + b = d => a = d - b\n                 and b <= M\n                  => a >= d - M\n                also a >= 1\n                  => a >= max(1, d - M)\n\n        So a is in range(max(1, d - M), min(M, d // 2) + 1)\n\n    For a given d, the number of cuboids satisfying the required property with c = M\n    and a + b = d is the length of this range, which is\n        min(M, d // 2) + 1 - max(1, d - M).\n\n    In the code below, d is sum_shortest_sides\n                   and M is max_cuboid_size.\n\n\n\"\"\"\n\nfrom math import sqrt\n\n\ndef solution(limit: int = 1000000) -> int:\n    \"\"\"\n    Return the least value of M such that there are more than one million cuboids\n    of side lengths 1 <= a,b,c <= M such that the shortest distance between two\n    opposite vertices of the cuboid is integral.\n    >>> solution(100)\n    24\n    >>> solution(1000)\n    72\n    >>> solution(2000)\n    100\n    >>> solution(20000)\n    288\n    \"\"\"\n    num_cuboids: int = 0\n    max_cuboid_size: int = 0\n    sum_shortest_sides: int\n\n    while num_cuboids <= limit:\n        max_cuboid_size += 1\n        for sum_shortest_sides in range(2, 2 * max_cuboid_size + 1):\n            if sqrt(sum_shortest_sides**2 + max_cuboid_size**2).is_integer():\n                num_cuboids += (\n                    min(max_cuboid_size, sum_shortest_sides // 2)\n                    - max(1, sum_shortest_sides - max_cuboid_size)\n                    + 1\n                )\n\n    return max_cuboid_size\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_087/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_087/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 87: https://projecteuler.net/problem=87\n\nThe smallest number expressible as the sum of a prime square, prime cube, and prime\nfourth power is 28. In fact, there are exactly four numbers below fifty that can be\nexpressed in such a way:\n\n28 = 22 + 23 + 24\n33 = 32 + 23 + 24\n49 = 52 + 23 + 24\n47 = 22 + 33 + 24\n\nHow many numbers below fifty million can be expressed as the sum of a prime square,\nprime cube, and prime fourth power?\n\"\"\"\n\n\ndef solution(limit: int = 50000000) -> int:\n    \"\"\"\n    Return the number of integers less than limit which can be expressed as the sum\n    of a prime square, prime cube, and prime fourth power.\n    >>> solution(50)\n    4\n    \"\"\"\n    ret = set()\n    prime_square_limit = int((limit - 24) ** (1 / 2))\n\n    primes = set(range(3, prime_square_limit + 1, 2))\n    primes.add(2)\n    for p in range(3, prime_square_limit + 1, 2):\n        if p not in primes:\n            continue\n        primes.difference_update(set(range(p * p, prime_square_limit + 1, p)))\n\n    for prime1 in primes:\n        square = prime1 * prime1\n        for prime2 in primes:\n            cube = prime2 * prime2 * prime2\n            if square + cube >= limit - 16:\n                break\n            for prime3 in primes:\n                tetr = prime3 * prime3 * prime3 * prime3\n                total = square + cube + tetr\n                if total >= limit:\n                    break\n                ret.add(total)\n\n    return len(ret)\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_089/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_089/numeralcleanup_test.txt",
    "content": "IIII\nIV\nIIIIIIIIII\nX\nVIIIII\n"
  },
  {
    "path": "project_euler/problem_089/p089_roman.txt",
    "content": "MMMMDCLXXII\nMMDCCCLXXXIII\nMMMDLXVIIII\nMMMMDXCV\nDCCCLXXII\nMMCCCVI\nMMMCDLXXXVII\nMMMMCCXXI\nMMMCCXX\nMMMMDCCCLXXIII\nMMMCCXXXVII\nMMCCCLXXXXIX\nMDCCCXXIIII\nMMCXCVI\nCCXCVIII\nMMMCCCXXXII\nMDCCXXX\nMMMDCCCL\nMMMMCCLXXXVI\nMMDCCCXCVI\nMMMDCII\nMMMCCXII\nMMMMDCCCCI\nMMDCCCXCII\nMDCXX\nCMLXXXVII\nMMMXXI\nMMMMCCCXIV\nMLXXII\nMCCLXXVIIII\nMMMMCCXXXXI\nMMDCCCLXXII\nMMMMXXXI\nMMMDCCLXXX\nMMDCCCLXXIX\nMMMMLXXXV\nMCXXI\nMDCCCXXXVII\nMMCCCLXVII\nMCDXXXV\nCCXXXIII\nCMXX\nMMMCLXIV\nMCCCLXXXVI\nDCCCXCVIII\nMMMDCCCCXXXIV\nCDXVIIII\nMMCCXXXV\nMDCCCXXXII\nMMMMD\nMMDCCLXIX\nMMMMCCCLXXXXVI\nMMDCCXLII\nMMMDCCCVIIII\nDCCLXXXIIII\nMDCCCCXXXII\nMMCXXVII\nDCCCXXX\nCCLXIX\nMMMXI\nMMMMCMLXXXXVIII\nMMMMDLXXXVII\nMMMMDCCCLX\nMMCCLIV\nCMIX\nMMDCCCLXXXIIII\nCLXXXII\nMMCCCCXXXXV\nMMMMDLXXXVIIII\nMMMDCCCXXI\nMMDCCCCLXXVI\nMCCCCLXX\nMMCDLVIIII\nMMMDCCCLIX\nMMMMCCCCXIX\nMMMDCCCLXXV\nXXXI\nCDLXXXIII\nMMMCXV\nMMDCCLXIII\nMMDXXX\nMMMMCCCLVII\nMMMDCI\nMMMMCDLXXXIIII\nMMMMCCCXVI\nCCCLXXXVIII\nMMMMCML\nMMMMXXIV\nMMMCCCCXXX\nDCCX\nMMMCCLX\nMMDXXXIII\nCCCLXIII\nMMDCCXIII\nMMMCCCXLIV\nCLXXXXI\nCXVI\nMMMMCXXXIII\nCLXX\nDCCCXVIII\nMLXVII\nDLXXXX\nMMDXXI\nMMMMDLXXXXVIII\nMXXII\nLXI\nDCCCCXLIII\nMMMMDV\nMMMMXXXIV\nMDCCCLVIII\nMMMCCLXXII\nMMMMDCCXXXVI\nMMMMLXXXIX\nMDCCCLXXXI\nMMMMDCCCXV\nMMMMCCCCXI\nMMMMCCCLIII\nMDCCCLXXI\nMMCCCCXI\nMLXV\nMMCDLXII\nMMMMDXXXXII\nMMMMDCCCXL\nMMMMCMLVI\nCCLXXXIV\nMMMDCCLXXXVI\nMMCLII\nMMMCCCCXV\nMMLXXXIII\nMMMV\nMMMV\nDCCLXII\nMMDCCCCXVI\nMMDCXLVIII\nCCLIIII\nCCCXXV\nMMDCCLXXXVIIII\nMMMMDCLXXVIII\nMMMMDCCCXCI\nMMMMCCCXX\nMMCCXLV\nMMMDCCCLXIX\nMMCCLXIIII\nMMMDCCCXLIX\nMMMMCCCLXIX\nCMLXXXXI\nMCMLXXXIX\nMMCDLXI\nMMDCLXXVIII\nMMMMDCCLXI\nMCDXXV\nDL\nCCCLXXII\nMXVIIII\nMCCCCLXVIII\nCIII\nMMMDCCLXXIIII\nMMMDVIII\nMMMMCCCLXXXXVII\nMMDXXVII\nMMDCCLXXXXV\nMMMMCXLVI\nMMMDCCLXXXII\nMMMDXXXVI\nMCXXII\nCLI\nDCLXXXIX\nMMMCLI\nMDCLXIII\nMMMMDCCXCVII\nMMCCCLXXXV\nMMMDCXXVIII\nMMMCDLX\nMMMCMLII\nMMMIV\nMMMMDCCCLVIII\nMMMDLXXXVIII\nMCXXIV\nMMMMLXXVI\nCLXXIX\nMMMCCCCXXVIIII\nDCCLXXXV\nMMMDCCCVI\nLI\nCLXXXVI\nMMMMCCCLXXVI\nMCCCLXVI\nCCXXXIX\nMMDXXXXI\nMMDCCCXLI\nDCCCLXXXVIII\nMMMMDCCCIV\nMDCCCCXV\nMMCMVI\nMMMMCMLXXXXV\nMMDCCLVI\nMMMMCCXLVIII\nDCCCCIIII\nMMCCCCIII\nMMMDCCLXXXVIIII\nMDCCCLXXXXV\nDVII\nMMMV\nDCXXV\nMMDCCCXCV\nDCVIII\nMMCDLXVI\nMCXXVIII\nMDCCXCVIII\nMMDCLX\nMMMDCCLXIV\nMMCDLXXVII\nMMDLXXXIIII\nMMMMCCCXXII\nMMMDCCCXLIIII\nDCCCCLXVII\nMMMCLXXXXIII\nMCCXV\nMMMMDCXI\nMMMMDCLXXXXV\nMMMCCCLII\nMMCMIX\nMMDCCXXV\nMMDLXXXVI\nMMMMDCXXVIIII\nDCCCCXXXVIIII\nMMCCXXXIIII\nMMDCCLXXVIII\nMDCCLXVIIII\nMMCCLXXXV\nMMMMDCCCLXXXVIII\nMMCMXCI\nMDXLII\nMMMMDCCXIV\nMMMMLI\nDXXXXIII\nMMDCCXI\nMMMMCCLXXXIII\nMMMDCCCLXXIII\nMDCLVII\nMMCD\nMCCCXXVII\nMMMMDCCIIII\nMMMDCCXLVI\nMMMCLXXXVII\nMMMCCVIIII\nMCCCCLXXIX\nDL\nDCCCLXXVI\nMMDXCI\nMMMMDCCCCXXXVI\nMMCII\nMMMDCCCXXXXV\nMMMCDXLV\nMMDCXXXXIV\nMMD\nMDCCCLXXXX\nMMDCXLIII\nMMCCXXXII\nMMDCXXXXVIIII\nDCCCLXXI\nMDXCVIIII\nMMMMCCLXXVIII\nMDCLVIIII\nMMMCCCLXXXIX\nMDCLXXXV\nMDLVIII\nMMMMCCVII\nMMMMDCXIV\nMMMCCCLXIIII\nMMIIII\nMMMMCCCLXXIII\nCCIII\nMMMCCLV\nMMMDXIII\nMMMCCCXC\nMMMDCCCXXI\nMMMMCCCCXXXII\nCCCLVI\nMMMCCCLXXXVI\nMXVIIII\nMMMCCCCXIIII\nCLXVII\nMMMCCLXX\nCCCCLXIV\nMMXXXXII\nMMMMCCLXXXX\nMXL\nCCXVI\nCCCCLVIIII\nMMCCCII\nMCCCLVIII\nMMMMCCCX\nMCDLXXXXIV\nMDCCCXIII\nMMDCCCXL\nMMMMCCCXXIII\nDXXXIV\nCVI\nMMMMDCLXXX\nDCCCVII\nMMCMLXIIII\nMMMDCCCXXXIII\nDCCC\nMDIII\nMMCCCLXVI\nMMMCCCCLXXI\nMMDCCCCXVIII\nCCXXXVII\nCCCXXV\nMDCCCXII\nMMMCMV\nMMMMCMXV\nMMMMDCXCI\nDXXI\nMMCCXLVIIII\nMMMMCMLII\nMDLXXX\nMMDCLXVI\nCXXI\nMMMDCCCLIIII\nMMMCXXI\nMCCIII\nMMDCXXXXI\nCCXCII\nMMMMDXXXV\nMMMCCCLXV\nMMMMDLXV\nMMMCCCCXXXII\nMMMCCCVIII\nDCCCCLXXXXII\nMMCLXIV\nMMMMCXI\nMLXXXXVII\nMMMCDXXXVIII\nMDXXII\nMLV\nMMMMDLXVI\nMMMCXII\nXXXIII\nMMMMDCCCXXVI\nMMMLXVIIII\nMMMLX\nMMMCDLXVII\nMDCCCLVII\nMMCXXXVII\nMDCCCCXXX\nMMDCCCLXIII\nMMMMDCXLIX\nMMMMCMXLVIII\nDCCCLXXVIIII\nMDCCCLIII\nMMMCMLXI\nMMMMCCLXI\nMMDCCCLIII\nMMMDCCCVI\nMMDXXXXIX\nMMCLXXXXV\nMMDXXX\nMMMXIII\nDCLXXIX\nDCCLXII\nMMMMDCCLXVIII\nMDCCXXXXIII\nCCXXXII\nMMMMDCXXV\nMMMCCCXXVIII\nMDCVIII\nMMMCLXXXXIIII\nCLXXXI\nMDCCCCXXXIII\nMMMMDCXXX\nMMMDCXXIV\nMMMCCXXXVII\nMCCCXXXXIIII\nCXVIII\nMMDCCCCIV\nMMMMCDLXXV\nMMMDLXIV\nMDXCIII\nMCCLXXXI\nMMMDCCCXXIV\nMCXLIII\nMMMDCCCI\nMCCLXXX\nCCXV\nMMDCCLXXI\nMMDLXXXIII\nMMMMDCXVII\nMMMCMLXV\nMCLXVIII\nMMMMCCLXXVI\nMMMDCCLXVIIII\nMMMMDCCCIX\nDLXXXXIX\nDCCCXXII\nMMMMIII\nMMMMCCCLXXVI\nDCCCXCIII\nDXXXI\nMXXXIIII\nCCXII\nMMMDCCLXXXIIII\nMMMCXX\nMMMCMXXVII\nDCCCXXXX\nMMCDXXXVIIII\nMMMMDCCXVIII\nLV\nMMMDCCCCVI\nMCCCII\nMMCMLXVIIII\nMDCCXI\nMMMMDLXVII\nMMCCCCLXI\nMMDCCV\nMMMCCCXXXIIII\nMMMMDI\nMMMDCCCXCV\nMMDCCLXXXXI\nMMMDXXVI\nMMMDCCCLVI\nMMDCXXX\nMCCCVII\nMMMMCCCLXII\nMMMMXXV\nMMCMXXV\nMMLVI\nMMDXXX\nMMMMCVII\nMDC\nMCCIII\nMMMMDCC\nMMCCLXXV\nMMDCCCXXXXVI\nMMMMCCCLXV\nCDXIIII\nMLXIIII\nCCV\nMMMCMXXXI\nCCCCLXVI\nMDXXXII\nMMMMCCCLVIII\nMMV\nMMMCLII\nMCMLI\nMMDCCXX\nMMMMCCCCXXXVI\nMCCLXXXI\nMMMCMVI\nDCCXXX\nMMMMCCCLXV\nDCCCXI\nMMMMDCCCXIV\nCCCXXI\nMMDLXXV\nCCCCLXXXX\nMCCCLXXXXII\nMMDCIX\nDCCXLIIII\nDXIV\nMMMMCLII\nCDLXI\nMMMCXXVII\nMMMMDCCCCLXIII\nMMMDCLIIII\nMCCCCXXXXII\nMMCCCLX\nCCCCLIII\nMDCCLXXVI\nMCMXXIII\nMMMMDLXXVIII\nMMDCCCCLX\nMMMCCCLXXXX\nMMMCDXXVI\nMMMDLVIII\nCCCLXI\nMMMMDCXXII\nMMDCCCXXI\nMMDCCXIII\nMMMMCLXXXVI\nMDCCCCXXVI\nMDV\nMMDCCCCLXXVI\nMMMMCCXXXVII\nMMMDCCLXXVIIII\nMMMCCCCLXVII\nDCCXLI\nMMCLXXXVIII\nMCCXXXVI\nMMDCXLVIII\nMMMMCXXXII\nMMMMDCCLXVI\nMMMMCMLI\nMMMMCLXV\nMMMMDCCCXCIV\nMCCLXXVII\nLXXVIIII\nDCCLII\nMMMCCCXCVI\nMMMCLV\nMMDCCCXXXXVIII\nDCCCXV\nMXC\nMMDCCLXXXXVII\nMMMMCML\nMMDCCCLXXVIII\nDXXI\nMCCCXLI\nDCLXXXXI\nMMCCCLXXXXVIII\nMDCCCCLXXVIII\nMMMMDXXV\nMMMDCXXXVI\nMMMCMXCVII\nMMXVIIII\nMMMDCCLXXIV\nMMMCXXV\nDXXXVIII\nMMMMCLXVI\nMDXII\nMMCCCLXX\nCCLXXI\nDXIV\nMMMCLIII\nDLII\nMMMCCCXLIX\nMMCCCCXXVI\nMMDCXLIII\nMXXXXII\nCCCLXXXV\nMDCLXXVI\nMDCXII\nMMMCCCLXXXIII\nMMDCCCCLXXXII\nMMMMCCCLXXXV\nMMDCXXI\nDCCCXXX\nMMMDCCCCLII\nMMMDCCXXII\nMMMMCDXCVIII\nMMMCCLXVIIII\nMMXXV\nMMMMCDXIX\nMMMMCCCX\nMMMCCCCLXVI\nMMMMDCLXXVIIII\nMMMMDCXXXXIV\nMMMCMXII\nMMMMXXXIII\nMMMMDLXXXII\nDCCCLIV\nMDXVIIII\nMMMCLXXXXV\nCCCCXX\nMMDIX\nMMCMLXXXVIII\nDCCXLIII\nDCCLX\nD\nMCCCVII\nMMMMCCCLXXXIII\nMDCCCLXXIIII\nMMMDCCCCLXXXVII\nMMMMCCCVII\nMMMDCCLXXXXVI\nCDXXXIV\nMCCLXVIII\nMMMMDLX\nMMMMDXII\nMMMMCCCCLIIII\nMCMLXXXXIII\nMMMMDCCCIII\nMMDCLXXXIII\nMDCCCXXXXIV\nXXXXVII\nMMMDCCCXXXII\nMMMDCCCXLII\nMCXXXV\nMDCXXVIIII\nMMMCXXXXIIII\nMMMMCDXVII\nMMMDXXIII\nMMMMCCCCLXI\nDCLXXXXVIIII\nLXXXXI\nCXXXIII\nMCDX\nMCCLVII\nMDCXXXXII\nMMMCXXIV\nMMMMLXXXX\nMMDCCCCXLV\nMLXXX\nMMDCCCCLX\nMCDLIII\nMMMCCCLXVII\nMMMMCCCLXXIV\nMMMDCVIII\nDCCCCXXIII\nMMXCI\nMMDCCIV\nMMMMDCCCXXXIV\nCCCLXXI\nMCCLXXXII\nMCMIII\nCCXXXI\nDCCXXXVIII\nMMMMDCCXLVIIII\nMMMMCMXXXV\nDCCCLXXV\nDCCXCI\nMMMMDVII\nMMMMDCCCLXVIIII\nCCCXCV\nMMMMDCCXX\nMCCCCII\nMMMCCCXC\nMMMCCCII\nMMDCCLXXVII\nMMDCLIIII\nCCXLIII\nMMMDCXVIII\nMMMCCCIX\nMCXV\nMMCCXXV\nMLXXIIII\nMDCCXXVI\nMMMCCCXX\nMMDLXX\nMMCCCCVI\nMMDCCXX\nMMMMDCCCCXCV\nMDCCCXXXII\nMMMMDCCCCXXXX\nXCIV\nMMCCCCLX\nMMXVII\nMLXXI\nMMMDXXVIII\nMDCCCCII\nMMMCMLVII\nMMCLXXXXVIII\nMDCCCCLV\nMCCCCLXXIIII\nMCCCLII\nMCDXLVI\nMMMMDXVIII\nDCCLXXXIX\nMMMDCCLXIV\nMDCCCCXLIII\nCLXXXXV\nMMMMCCXXXVI\nMMMDCCCXXI\nMMMMCDLXXVII\nMCDLIII\nMMCCXLVI\nDCCCLV\nMCDLXX\nDCLXXVIII\nMMDCXXXIX\nMMMMDCLX\nMMDCCLI\nMMCXXXV\nMMMCCXII\nMMMMCMLXII\nMMMMCCV\nMCCCCLXIX\nMMMMCCIII\nCLXVII\nMCCCLXXXXIIII\nMMMMDCVIII\nMMDCCCLXI\nMMLXXIX\nCMLXIX\nMMDCCCXLVIIII\nDCLXII\nMMMCCCXLVII\nMDCCCXXXV\nMMMMDCCXCVI\nDCXXX\nXXVI\nMMLXIX\nMMCXI\nDCXXXVII\nMMMMCCCXXXXVIII\nMMMMDCLXI\nMMMMDCLXXIIII\nMMMMVIII\nMMMMDCCCLXII\nMDCXCI\nMMCCCXXIIII\nCCCCXXXXV\nMMDCCCXXI\nMCVI\nMMDCCLXVIII\nMMMMCXL\nMLXVIII\nCMXXVII\nCCCLV\nMDCCLXXXIX\nMMMCCCCLXV\nMMDCCLXII\nMDLXVI\nMMMCCCXVIII\nMMMMCCLXXXI\nMMCXXVII\nMMDCCCLXVIII\nMMMCXCII\nMMMMDCLVIII\nMMMMDCCCXXXXII\nMMDCCCCLXXXXVI\nMDCCXL\nMDCCLVII\nMMMMDCCCLXXXVI\nDCCXXXIII\nMMMMDCCCCLXXXV\nMMCCXXXXVIII\nMMMCCLXXVIII\nMMMDCLXXVIII\nDCCCI\nMMMMLXXXXVIIII\nMMMCCCCLXXII\nMMCLXXXVII\nCCLXVI\nMCDXLIII\nMMCXXVIII\nMDXIV\nCCCXCVIII\nCLXXVIII\nMMCXXXXVIIII\nMMMDCLXXXIV\nCMLVIII\nMCDLIX\nMMMMDCCCXXXII\nMMMMDCXXXIIII\nMDCXXI\nMMMDCXLV\nMCLXXVIII\nMCDXXII\nIV\nMCDLXXXXIII\nMMMMDCCLXV\nCCLI\nMMMMDCCCXXXVIII\nDCLXII\nMCCCLXVII\nMMMMDCCCXXXVI\nMMDCCXLI\nMLXI\nMMMCDLXVIII\nMCCCCXCIII\nXXXIII\nMMMDCLXIII\nMMMMDCL\nDCCCXXXXIIII\nMMDLVII\nDXXXVII\nMCCCCXXIIII\nMCVII\nMMMMDCCXL\nMMMMCXXXXIIII\nMCCCCXXIV\nMMCLXVIII\nMMXCIII\nMDCCLXXX\nMCCCLIIII\nMMDCLXXI\nMXI\nMCMLIV\nMMMCCIIII\nDCCLXXXVIIII\nMDCLIV\nMMMDCXIX\nCMLXXXI\nDCCLXXXVII\nXXV\nMMMXXXVI\nMDVIIII\nCLXIII\nMMMCDLVIIII\nMMCCCCVII\nMMMLXX\nMXXXXII\nMMMMCCCLXVIII\nMMDCCCXXVIII\nMMMMDCXXXXI\nMMMMDCCCXXXXV\nMMMXV\nMMMMCCXVIIII\nMMDCCXIIII\nMMMXXVII\nMDCCLVIIII\nMMCXXIIII\nMCCCLXXIV\nDCLVIII\nMMMLVII\nMMMCXLV\nMMXCVII\nMMMCCCLXXXVII\nMMMMCCXXII\nDXII\nMMMDLV\nMCCCLXXVIII\nMMMCLIIII\nMMMMCLXXXX\nMMMCLXXXIIII\nMDCXXIII\nMMMMCCXVI\nMMMMDLXXXIII\nMMMDXXXXIII\nMMMMCCCCLV\nMMMDLXXXI\nMMMCCLXXVI\nMMMMXX\nMMMMDLVI\nMCCCCLXXX\nMMMXXII\nMMXXII\nMMDCCCCXXXI\nMMMDXXV\nMMMDCLXXXVIIII\nMMMDLXXXXVII\nMDLXIIII\nCMXC\nMMMXXXVIII\nMDLXXXVIII\nMCCCLXXVI\nMMCDLIX\nMMDCCCXVIII\nMDCCCXXXXVI\nMMMMCMIV\nMMMMDCIIII\nMMCCXXXV\nXXXXVI\nMMMMCCXVII\nMMCCXXIV\nMCMLVIIII\nMLXXXIX\nMMMMLXXXIX\nCLXXXXIX\nMMMDCCCCLVIII\nMMMMCCLXXIII\nMCCCC\nDCCCLIX\nMMMCCCLXXXII\nMMMCCLXVIIII\nMCLXXXV\nCDLXXXVII\nDCVI\nMMX\nMMCCXIII\nMMMMDCXX\nMMMMXXVIII\nDCCCLXII\nMMMMCCCXLIII\nMMMMCLXV\nDXCI\nMMMMCLXXX\nMMMDCCXXXXI\nMMMMXXXXVI\nDCLX\nMMMCCCXI\nMCCLXXX\nMMCDLXXII\nDCCLXXI\nMMMCCCXXXVI\nMCCCCLXXXVIIII\nCDLVIII\nDCCLVI\nMMMMDCXXXVIII\nMMCCCLXXXIII\nMMMMDCCLXXV\nMMMXXXVI\nCCCLXXXXIX\nCV\nCCCCXIII\nCCCCXVI\nMDCCCLXXXIIII\nMMDCCLXXXII\nMMMMCCCCLXXXI\nMXXV\nMMCCCLXXVIIII\nMMMCCXII\nMMMMCCXXXIII\nMMCCCLXXXVI\nMMMDCCCLVIIII\nMCCXXXVII\nMDCLXXV\nXXXV\nMMDLI\nMMMCCXXX\nMMMMCXXXXV\nCCCCLIX\nMMMMDCCCLXXIII\nMMCCCXVII\nDCCCXVI\nMMMCCCXXXXV\nMDCCCCXCV\nCLXXXI\nMMMMDCCLXX\nMMMDCCCIII\nMMCLXXVII\nMMMDCCXXIX\nMMDCCCXCIIII\nMMMCDXXIIII\nMMMMXXVIII\nMMMMDCCCCLXVIII\nMDCCCXX\nMMMMCDXXI\nMMMMDLXXXIX\nCCXVI\nMDVIII\nMMCCLXXI\nMMMDCCCLXXI\nMMMCCCLXXVI\nMMCCLXI\nMMMMDCCCXXXIV\nDLXXXVI\nMMMMDXXXII\nMMMXXIIII\nMMMMCDIV\nMMMMCCCXLVIII\nMMMMCXXXVIII\nMMMCCCLXVI\nMDCCXVIII\nMMCXX\nCCCLIX\nMMMMDCCLXXII\nMDCCCLXXV\nMMMMDCCCXXIV\nDCCCXXXXVIII\nMMMDCCCCXXXVIIII\nMMMMCCXXXV\nMDCLXXXIII\nMMCCLXXXIV\nMCLXXXXIIII\nDXXXXIII\nMCCCXXXXVIII\nMMCLXXIX\nMMMMCCLXIV\nMXXII\nMMMCXIX\nMDCXXXVII\nMMDCCVI\nMCLXXXXVIII\nMMMCXVI\nMCCCLX\nMMMCDX\nCCLXVIIII\nMMMCCLX\nMCXXVIII\nLXXXII\nMCCCCLXXXI\nMMMI\nMMMCCCLXIV\nMMMCCCXXVIIII\nCXXXVIII\nMMCCCXX\nMMMCCXXVIIII\nMCCLXVI\nMMMCCCCXXXXVI\nMMDCCXCIX\nMCMLXXI\nMMCCLXVIII\nCDLXXXXIII\nMMMMDCCXXII\nMMMMDCCLXXXVII\nMMMDCCLIV\nMMCCLXIII\nMDXXXVII\nDCCXXXIIII\nMCII\nMMMDCCCLXXI\nMMMLXXIII\nMDCCCLIII\nMMXXXVIII\nMDCCXVIIII\nMDCCCCXXXVII\nMMCCCXVI\nMCMXXII\nMMMCCCLVIII\nMMMMDCCCXX\nMCXXIII\nMMMDLXI\nMMMMDXXII\nMDCCCX\nMMDXCVIIII\nMMMDCCCCVIII\nMMMMDCCCCXXXXVI\nMMDCCCXXXV\nMMCXCIV\nMCMLXXXXIII\nMMMCCCLXXVI\nMMMMDCLXXXV\nCMLXIX\nDCXCII\nMMXXVIII\nMMMMCCCXXX\nXXXXVIIII"
  },
  {
    "path": "project_euler/problem_089/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 89: https://projecteuler.net/problem=89\n\nFor a number written in Roman numerals to be considered valid there are basic rules\nwhich must be followed. Even though the rules allow some numbers to be expressed in\nmore than one way there is always a \"best\" way of writing a particular number.\n\nFor example, it would appear that there are at least six ways of writing the number\nsixteen:\n\nIIIIIIIIIIIIIIII\nVIIIIIIIIIII\nVVIIIIII\nXIIIIII\nVVVI\nXVI\n\nHowever, according to the rules only XIIIIII and XVI are valid, and the last example\nis considered to be the most efficient, as it uses the least number of numerals.\n\nThe 11K text file, roman.txt (right click and 'Save Link/Target As...'), contains one\nthousand numbers written in valid, but not necessarily minimal, Roman numerals; see\nAbout... Roman Numerals for the definitive rules for this problem.\n\nFind the number of characters saved by writing each of these in their minimal form.\n\nNote: You can assume that all the Roman numerals in the file contain no more than four\nconsecutive identical units.\n\"\"\"\n\nimport os\n\nSYMBOLS = {\"I\": 1, \"V\": 5, \"X\": 10, \"L\": 50, \"C\": 100, \"D\": 500, \"M\": 1000}\n\n\ndef parse_roman_numerals(numerals: str) -> int:\n    \"\"\"\n    Converts a string of roman numerals to an integer.\n    e.g.\n    >>> parse_roman_numerals(\"LXXXIX\")\n    89\n    >>> parse_roman_numerals(\"IIII\")\n    4\n    \"\"\"\n\n    total_value = 0\n\n    index = 0\n    while index < len(numerals) - 1:\n        current_value = SYMBOLS[numerals[index]]\n        next_value = SYMBOLS[numerals[index + 1]]\n        if current_value < next_value:\n            total_value -= current_value\n        else:\n            total_value += current_value\n        index += 1\n    total_value += SYMBOLS[numerals[index]]\n\n    return total_value\n\n\ndef generate_roman_numerals(num: int) -> str:\n    \"\"\"\n    Generates a string of roman numerals for a given integer.\n    e.g.\n    >>> generate_roman_numerals(89)\n    'LXXXIX'\n    >>> generate_roman_numerals(4)\n    'IV'\n    \"\"\"\n\n    numerals = \"\"\n\n    m_count = num // 1000\n    numerals += m_count * \"M\"\n    num %= 1000\n\n    c_count = num // 100\n    if c_count == 9:\n        numerals += \"CM\"\n        c_count -= 9\n    elif c_count == 4:\n        numerals += \"CD\"\n        c_count -= 4\n    if c_count >= 5:\n        numerals += \"D\"\n        c_count -= 5\n    numerals += c_count * \"C\"\n    num %= 100\n\n    x_count = num // 10\n    if x_count == 9:\n        numerals += \"XC\"\n        x_count -= 9\n    elif x_count == 4:\n        numerals += \"XL\"\n        x_count -= 4\n    if x_count >= 5:\n        numerals += \"L\"\n        x_count -= 5\n    numerals += x_count * \"X\"\n    num %= 10\n\n    if num == 9:\n        numerals += \"IX\"\n        num -= 9\n    elif num == 4:\n        numerals += \"IV\"\n        num -= 4\n    if num >= 5:\n        numerals += \"V\"\n        num -= 5\n    numerals += num * \"I\"\n\n    return numerals\n\n\ndef solution(roman_numerals_filename: str = \"/p089_roman.txt\") -> int:\n    \"\"\"\n    Calculates and returns the answer to project euler problem 89.\n\n    >>> solution(\"/numeralcleanup_test.txt\")\n    16\n    \"\"\"\n\n    savings = 0\n\n    with open(os.path.dirname(__file__) + roman_numerals_filename) as file1:\n        lines = file1.readlines()\n\n    for line in lines:\n        original = line.strip()\n        num = parse_roman_numerals(original)\n        shortened = generate_roman_numerals(num)\n        savings += len(original) - len(shortened)\n\n    return savings\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_091/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_091/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 91: https://projecteuler.net/problem=91\n\nThe points P (x1, y1) and Q (x2, y2) are plotted at integer coordinates and\nare joined to the origin, O(0,0), to form ΔOPQ.\n￼\nThere are exactly fourteen triangles containing a right angle that can be formed\nwhen each coordinate lies between 0 and 2 inclusive; that is,\n0 ≤ x1, y1, x2, y2 ≤ 2.\n￼\nGiven that 0 ≤ x1, y1, x2, y2 ≤ 50, how many right triangles can be formed?\n\"\"\"\n\nfrom itertools import combinations, product\n\n\ndef is_right(x1: int, y1: int, x2: int, y2: int) -> bool:\n    \"\"\"\n    Check if the triangle described by P(x1,y1), Q(x2,y2) and O(0,0) is right-angled.\n    Note: this doesn't check if P and Q are equal, but that's handled by the use of\n    itertools.combinations in the solution function.\n\n    >>> is_right(0, 1, 2, 0)\n    True\n    >>> is_right(1, 0, 2, 2)\n    False\n    \"\"\"\n    if x1 == y1 == 0 or x2 == y2 == 0:\n        return False\n    a_square = x1 * x1 + y1 * y1\n    b_square = x2 * x2 + y2 * y2\n    c_square = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)\n    return (\n        a_square + b_square == c_square\n        or a_square + c_square == b_square\n        or b_square + c_square == a_square\n    )\n\n\ndef solution(limit: int = 50) -> int:\n    \"\"\"\n    Return the number of right triangles OPQ that can be formed by two points P, Q\n    which have both x- and y- coordinates between 0 and limit inclusive.\n\n    >>> solution(2)\n    14\n    >>> solution(10)\n    448\n    \"\"\"\n    return sum(\n        1\n        for pt1, pt2 in combinations(product(range(limit + 1), repeat=2), 2)\n        if is_right(*pt1, *pt2)\n    )\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_092/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_092/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 092: https://projecteuler.net/problem=92\nSquare digit chains\nA number chain is created by continuously adding the square of the digits in\na number to form a new number until it has been seen before.\nFor example,\n44 → 32 → 13 → 10 → 1 → 1\n85 → 89 → 145 → 42 → 20 → 4 → 16 → 37 → 58 → 89\nTherefore any chain that arrives at 1 or 89 will become stuck in an endless loop.\nWhat is most amazing is that EVERY starting number will eventually arrive at 1 or 89.\nHow many starting numbers below ten million will arrive at 89?\n\"\"\"\n\nDIGITS_SQUARED = [sum(int(c, 10) ** 2 for c in i.__str__()) for i in range(100000)]\n\n\ndef next_number(number: int) -> int:\n    \"\"\"\n    Returns the next number of the chain by adding the square of each digit\n    to form a new number.\n    For example, if number = 12, next_number() will return 1^2 + 2^2 = 5.\n    Therefore, 5 is the next number of the chain.\n    >>> next_number(44)\n    32\n    >>> next_number(10)\n    1\n    >>> next_number(32)\n    13\n    \"\"\"\n\n    sum_of_digits_squared = 0\n    while number:\n        # Increased Speed Slightly by checking every 5 digits together.\n        sum_of_digits_squared += DIGITS_SQUARED[number % 100000]\n        number //= 100000\n\n    return sum_of_digits_squared\n\n\n# There are 2 Chains made,\n# One ends with 89 with the chain member 58 being the one which when declared first,\n# there will be the least number of iterations for all the members to be checked.\n\n# The other one ends with 1 and has only one element 1.\n\n# So 58 and 1 are chosen to be declared at the starting.\n\n# Changed dictionary to an array to quicken the solution\nCHAINS: list[bool | None] = [None] * 10000000\nCHAINS[0] = True\nCHAINS[57] = False\n\n\ndef chain(number: int) -> bool:\n    \"\"\"\n    The function generates the chain of numbers until the next number is 1 or 89.\n    For example, if starting number is 44, then the function generates the\n    following chain of numbers:\n    44 → 32 → 13 → 10 → 1 → 1.\n    Once the next number generated is 1 or 89, the function returns whether\n    or not the next number generated by next_number() is 1.\n    >>> chain(10)\n    True\n    >>> chain(58)\n    False\n    >>> chain(1)\n    True\n    \"\"\"\n\n    if CHAINS[number - 1] is not None:\n        return CHAINS[number - 1]  # type: ignore[return-value]\n\n    number_chain = chain(next_number(number))\n    CHAINS[number - 1] = number_chain\n\n    while number < 10000000:\n        CHAINS[number - 1] = number_chain\n        number *= 10\n\n    return number_chain\n\n\ndef solution(number: int = 10000000) -> int:\n    \"\"\"\n    The function returns the number of integers that end up being 89 in each chain.\n    The function accepts a range number and the function checks all the values\n    under value number.\n\n    >>> solution(100)\n    80\n    >>> solution(10000000)\n    8581146\n    \"\"\"\n    for i in range(1, number):\n        if CHAINS[i] is None:\n            chain(i + 1)\n\n    return CHAINS[:number].count(False)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_094/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_094/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 94: https://projecteuler.net/problem=94\n\nIt is easily proved that no equilateral triangle exists with integral length sides and\nintegral area. However, the almost equilateral triangle 5-5-6 has an area of 12 square\nunits.\n\nWe shall define an almost equilateral triangle to be a triangle for which two sides are\nequal and the third differs by no more than one unit.\n\nFind the sum of the perimeters of all almost equilateral triangles with integral side\nlengths and area and whose perimeters do not exceed one billion (1,000,000,000).\n\"\"\"\n\n\ndef solution(max_perimeter: int = 10**9) -> int:\n    \"\"\"\n    Returns the sum of the perimeters of all almost equilateral triangles with integral\n    side lengths and area and whose perimeters do not exceed max_perimeter\n\n    >>> solution(20)\n    16\n    \"\"\"\n\n    prev_value = 1\n    value = 2\n\n    perimeters_sum = 0\n    i = 0\n    perimeter = 0\n    while perimeter <= max_perimeter:\n        perimeters_sum += perimeter\n\n        prev_value += 2 * value\n        value += prev_value\n\n        perimeter = 2 * value + 2 if i % 2 == 0 else 2 * value - 2\n        i += 1\n\n    return perimeters_sum\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_095/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_095/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 95: https://projecteuler.net/problem=95\n\nAmicable Chains\n\nThe proper divisors of a number are all the divisors excluding the number itself.\nFor example, the proper divisors of 28 are 1, 2, 4, 7, and 14.\nAs the sum of these divisors is equal to 28, we call it a perfect number.\n\nInterestingly the sum of the proper divisors of 220 is 284 and\nthe sum of the proper divisors of 284 is 220, forming a chain of two numbers.\nFor this reason, 220 and 284 are called an amicable pair.\n\nPerhaps less well known are longer chains.\nFor example, starting with 12496, we form a chain of five numbers:\n    12496 -> 14288 -> 15472 -> 14536 -> 14264 (-> 12496 -> ...)\n\nSince this chain returns to its starting point, it is called an amicable chain.\n\nFind the smallest member of the longest amicable chain with\nno element exceeding one million.\n\nSolution is doing the following:\n- Get relevant prime numbers\n- Iterate over product combination of prime numbers to generate all non-prime\n  numbers up to max number, by keeping track of prime factors\n- Calculate the sum of factors for each number\n- Iterate over found some factors to find longest chain\n\"\"\"\n\nfrom math import isqrt\n\n\ndef generate_primes(max_num: int) -> list[int]:\n    \"\"\"\n    Calculates the list of primes up to and including `max_num`.\n\n    >>> generate_primes(6)\n    [2, 3, 5]\n    \"\"\"\n    are_primes = [True] * (max_num + 1)\n    are_primes[0] = are_primes[1] = False\n    for i in range(2, isqrt(max_num) + 1):\n        if are_primes[i]:\n            for j in range(i * i, max_num + 1, i):\n                are_primes[j] = False\n\n    return [prime for prime, is_prime in enumerate(are_primes) if is_prime]\n\n\ndef multiply(\n    chain: list[int],\n    primes: list[int],\n    min_prime_idx: int,\n    prev_num: int,\n    max_num: int,\n    prev_sum: int,\n    primes_degrees: dict[int, int],\n) -> None:\n    \"\"\"\n    Run over all prime combinations to generate non-prime numbers.\n\n    >>> chain = [0] * 3\n    >>> primes_degrees = {}\n    >>> multiply(\n    ...     chain=chain,\n    ...     primes=[2],\n    ...     min_prime_idx=0,\n    ...     prev_num=1,\n    ...     max_num=2,\n    ...     prev_sum=0,\n    ...     primes_degrees=primes_degrees,\n    ... )\n    >>> chain\n    [0, 0, 1]\n    >>> primes_degrees\n    {2: 1}\n    \"\"\"\n\n    min_prime = primes[min_prime_idx]\n    num = prev_num * min_prime\n\n    min_prime_degree = primes_degrees.get(min_prime, 0)\n    min_prime_degree += 1\n    primes_degrees[min_prime] = min_prime_degree\n\n    new_sum = prev_sum * min_prime + (prev_sum + prev_num) * (min_prime - 1) // (\n        min_prime**min_prime_degree - 1\n    )\n    chain[num] = new_sum\n\n    for prime_idx in range(min_prime_idx, len(primes)):\n        if primes[prime_idx] * num > max_num:\n            break\n\n        multiply(\n            chain=chain,\n            primes=primes,\n            min_prime_idx=prime_idx,\n            prev_num=num,\n            max_num=max_num,\n            prev_sum=new_sum,\n            primes_degrees=primes_degrees.copy(),\n        )\n\n\ndef find_longest_chain(chain: list[int], max_num: int) -> int:\n    \"\"\"\n    Finds the smallest element of longest chain\n\n    >>> find_longest_chain(chain=[0, 0, 0, 0, 0, 0, 6], max_num=6)\n    6\n    \"\"\"\n\n    max_len = 0\n    min_elem = 0\n    for start in range(2, len(chain)):\n        visited = {start}\n        elem = chain[start]\n        length = 1\n\n        while elem > 1 and elem <= max_num and elem not in visited:\n            visited.add(elem)\n            elem = chain[elem]\n            length += 1\n\n        if elem == start and length > max_len:\n            max_len = length\n            min_elem = start\n\n    return min_elem\n\n\ndef solution(max_num: int = 1000000) -> int:\n    \"\"\"\n    Runs the calculation for numbers <= `max_num`.\n\n    >>> solution(10)\n    6\n    >>> solution(200000)\n    12496\n    \"\"\"\n\n    primes = generate_primes(max_num)\n    chain = [0] * (max_num + 1)\n    for prime_idx, prime in enumerate(primes):\n        if prime**2 > max_num:\n            break\n\n        multiply(\n            chain=chain,\n            primes=primes,\n            min_prime_idx=prime_idx,\n            prev_num=1,\n            max_num=max_num,\n            prev_sum=0,\n            primes_degrees={},\n        )\n\n    return find_longest_chain(chain=chain, max_num=max_num)\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_097/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_097/sol1.py",
    "content": "\"\"\"\r\nThe first known prime found to exceed one million digits was discovered in 1999,\r\nand is a Mersenne prime of the form 2**6972593 - 1; it contains exactly 2,098,960\r\ndigits. Subsequently other Mersenne primes, of the form 2**p - 1, have been found\r\nwhich contain more digits.\r\nHowever, in 2004 there was found a massive non-Mersenne prime which contains\r\n2,357,207 digits: (28433 * (2 ** 7830457 + 1)).\r\n\r\nFind the last ten digits of this prime number.\r\n\"\"\"\r\n\r\n\r\ndef solution(n: int = 10) -> str:\r\n    \"\"\"\r\n    Returns the last n digits of NUMBER.\r\n    >>> solution()\r\n    '8739992577'\r\n    >>> solution(8)\r\n    '39992577'\r\n    >>> solution(1)\r\n    '7'\r\n    >>> solution(-1)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Invalid input\r\n    >>> solution(8.3)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Invalid input\r\n    >>> solution(\"a\")\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Invalid input\r\n    \"\"\"\r\n    if not isinstance(n, int) or n < 0:\r\n        raise ValueError(\"Invalid input\")\r\n    modulus = 10**n\r\n    number = 28433 * (pow(2, 7830457, modulus)) + 1\r\n    return str(number % modulus)\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    from doctest import testmod\r\n\r\n    testmod()\r\n    print(f\"{solution(10) = }\")\r\n"
  },
  {
    "path": "project_euler/problem_099/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_099/base_exp.txt",
    "content": "519432,525806\n632382,518061\n78864,613712\n466580,530130\n780495,510032\n525895,525320\n15991,714883\n960290,502358\n760018,511029\n166800,575487\n210884,564478\n555151,523163\n681146,515199\n563395,522587\n738250,512126\n923525,503780\n595148,520429\n177108,572629\n750923,511482\n440902,532446\n881418,505504\n422489,534197\n979858,501616\n685893,514935\n747477,511661\n167214,575367\n234140,559696\n940238,503122\n728969,512609\n232083,560102\n900971,504694\n688801,514772\n189664,569402\n891022,505104\n445689,531996\n119570,591871\n821453,508118\n371084,539600\n911745,504251\n623655,518600\n144361,582486\n352442,541775\n420726,534367\n295298,549387\n6530,787777\n468397,529976\n672336,515696\n431861,533289\n84228,610150\n805376,508857\n444409,532117\n33833,663511\n381850,538396\n402931,536157\n92901,604930\n304825,548004\n731917,512452\n753734,511344\n51894,637373\n151578,580103\n295075,549421\n303590,548183\n333594,544123\n683952,515042\n60090,628880\n951420,502692\n28335,674991\n714940,513349\n343858,542826\n549279,523586\n804571,508887\n260653,554881\n291399,549966\n402342,536213\n408889,535550\n40328,652524\n375856,539061\n768907,510590\n165993,575715\n976327,501755\n898500,504795\n360404,540830\n478714,529095\n694144,514472\n488726,528258\n841380,507226\n328012,544839\n22389,690868\n604053,519852\n329514,544641\n772965,510390\n492798,527927\n30125,670983\n895603,504906\n450785,531539\n840237,507276\n380711,538522\n63577,625673\n76801,615157\n502694,527123\n597706,520257\n310484,547206\n944468,502959\n121283,591152\n451131,531507\n566499,522367\n425373,533918\n40240,652665\n39130,654392\n714926,513355\n469219,529903\n806929,508783\n287970,550487\n92189,605332\n103841,599094\n671839,515725\n452048,531421\n987837,501323\n935192,503321\n88585,607450\n613883,519216\n144551,582413\n647359,517155\n213902,563816\n184120,570789\n258126,555322\n502546,527130\n407655,535678\n401528,536306\n477490,529193\n841085,507237\n732831,512408\n833000,507595\n904694,504542\n581435,521348\n455545,531110\n873558,505829\n94916,603796\n720176,513068\n545034,523891\n246348,557409\n556452,523079\n832015,507634\n173663,573564\n502634,527125\n250732,556611\n569786,522139\n216919,563178\n521815,525623\n92304,605270\n164446,576167\n753413,511364\n11410,740712\n448845,531712\n925072,503725\n564888,522477\n7062,780812\n641155,517535\n738878,512100\n636204,517828\n372540,539436\n443162,532237\n571192,522042\n655350,516680\n299741,548735\n581914,521307\n965471,502156\n513441,526277\n808682,508700\n237589,559034\n543300,524025\n804712,508889\n247511,557192\n543486,524008\n504383,526992\n326529,545039\n792493,509458\n86033,609017\n126554,589005\n579379,521481\n948026,502823\n404777,535969\n265767,554022\n266876,553840\n46631,643714\n492397,527958\n856106,506581\n795757,509305\n748946,511584\n294694,549480\n409781,535463\n775887,510253\n543747,523991\n210592,564536\n517119,525990\n520253,525751\n247926,557124\n592141,520626\n346580,542492\n544969,523902\n506501,526817\n244520,557738\n144745,582349\n69274,620858\n292620,549784\n926027,503687\n736320,512225\n515528,526113\n407549,535688\n848089,506927\n24141,685711\n9224,757964\n980684,501586\n175259,573121\n489160,528216\n878970,505604\n969546,502002\n525207,525365\n690461,514675\n156510,578551\n659778,516426\n468739,529945\n765252,510770\n76703,615230\n165151,575959\n29779,671736\n928865,503569\n577538,521605\n927555,503618\n185377,570477\n974756,501809\n800130,509093\n217016,563153\n365709,540216\n774508,510320\n588716,520851\n631673,518104\n954076,502590\n777828,510161\n990659,501222\n597799,520254\n786905,509727\n512547,526348\n756449,511212\n869787,505988\n653747,516779\n84623,609900\n839698,507295\n30159,670909\n797275,509234\n678136,515373\n897144,504851\n989554,501263\n413292,535106\n55297,633667\n788650,509637\n486748,528417\n150724,580377\n56434,632490\n77207,614869\n588631,520859\n611619,519367\n100006,601055\n528924,525093\n190225,569257\n851155,506789\n682593,515114\n613043,519275\n514673,526183\n877634,505655\n878905,505602\n1926,914951\n613245,519259\n152481,579816\n841774,507203\n71060,619442\n865335,506175\n90244,606469\n302156,548388\n399059,536557\n478465,529113\n558601,522925\n69132,620966\n267663,553700\n988276,501310\n378354,538787\n529909,525014\n161733,576968\n758541,511109\n823425,508024\n149821,580667\n269258,553438\n481152,528891\n120871,591322\n972322,501901\n981350,501567\n676129,515483\n950860,502717\n119000,592114\n392252,537272\n191618,568919\n946699,502874\n289555,550247\n799322,509139\n703886,513942\n194812,568143\n261823,554685\n203052,566221\n217330,563093\n734748,512313\n391759,537328\n807052,508777\n564467,522510\n59186,629748\n113447,594545\n518063,525916\n905944,504492\n613922,519213\n439093,532607\n445946,531981\n230530,560399\n297887,549007\n459029,530797\n403692,536075\n855118,506616\n963127,502245\n841711,507208\n407411,535699\n924729,503735\n914823,504132\n333725,544101\n176345,572832\n912507,504225\n411273,535308\n259774,555036\n632853,518038\n119723,591801\n163902,576321\n22691,689944\n402427,536212\n175769,572988\n837260,507402\n603432,519893\n313679,546767\n538165,524394\n549026,523608\n61083,627945\n898345,504798\n992556,501153\n369999,539727\n32847,665404\n891292,505088\n152715,579732\n824104,507997\n234057,559711\n730507,512532\n960529,502340\n388395,537687\n958170,502437\n57105,631806\n186025,570311\n993043,501133\n576770,521664\n215319,563513\n927342,503628\n521353,525666\n39563,653705\n752516,511408\n110755,595770\n309749,547305\n374379,539224\n919184,503952\n990652,501226\n647780,517135\n187177,570017\n168938,574877\n649558,517023\n278126,552016\n162039,576868\n658512,516499\n498115,527486\n896583,504868\n561170,522740\n747772,511647\n775093,510294\n652081,516882\n724905,512824\n499707,527365\n47388,642755\n646668,517204\n571700,522007\n180430,571747\n710015,513617\n435522,532941\n98137,602041\n759176,511070\n486124,528467\n526942,525236\n878921,505604\n408313,535602\n926980,503640\n882353,505459\n566887,522345\n3326,853312\n911981,504248\n416309,534800\n392991,537199\n622829,518651\n148647,581055\n496483,527624\n666314,516044\n48562,641293\n672618,515684\n443676,532187\n274065,552661\n265386,554079\n347668,542358\n31816,667448\n181575,571446\n961289,502320\n365689,540214\n987950,501317\n932299,503440\n27388,677243\n746701,511701\n492258,527969\n147823,581323\n57918,630985\n838849,507333\n678038,515375\n27852,676130\n850241,506828\n818403,508253\n131717,587014\n850216,506834\n904848,504529\n189758,569380\n392845,537217\n470876,529761\n925353,503711\n285431,550877\n454098,531234\n823910,508003\n318493,546112\n766067,510730\n261277,554775\n421530,534289\n694130,514478\n120439,591498\n213308,563949\n854063,506662\n365255,540263\n165437,575872\n662240,516281\n289970,550181\n847977,506933\n546083,523816\n413252,535113\n975829,501767\n361540,540701\n235522,559435\n224643,561577\n736350,512229\n328303,544808\n35022,661330\n307838,547578\n474366,529458\n873755,505819\n73978,617220\n827387,507845\n670830,515791\n326511,545034\n309909,547285\n400970,536363\n884827,505352\n718307,513175\n28462,674699\n599384,520150\n253565,556111\n284009,551093\n343403,542876\n446557,531921\n992372,501160\n961601,502308\n696629,514342\n919537,503945\n894709,504944\n892201,505051\n358160,541097\n448503,531745\n832156,507636\n920045,503924\n926137,503675\n416754,534757\n254422,555966\n92498,605151\n826833,507873\n660716,516371\n689335,514746\n160045,577467\n814642,508425\n969939,501993\n242856,558047\n76302,615517\n472083,529653\n587101,520964\n99066,601543\n498005,527503\n709800,513624\n708000,513716\n20171,698134\n285020,550936\n266564,553891\n981563,501557\n846502,506991\n334,1190800\n209268,564829\n9844,752610\n996519,501007\n410059,535426\n432931,533188\n848012,506929\n966803,502110\n983434,501486\n160700,577267\n504374,526989\n832061,507640\n392825,537214\n443842,532165\n440352,532492\n745125,511776\n13718,726392\n661753,516312\n70500,619875\n436952,532814\n424724,533973\n21954,692224\n262490,554567\n716622,513264\n907584,504425\n60086,628882\n837123,507412\n971345,501940\n947162,502855\n139920,584021\n68330,621624\n666452,516038\n731446,512481\n953350,502619\n183157,571042\n845400,507045\n651548,516910\n20399,697344\n861779,506331\n629771,518229\n801706,509026\n189207,569512\n737501,512168\n719272,513115\n479285,529045\n136046,585401\n896746,504860\n891735,505067\n684771,514999\n865309,506184\n379066,538702\n503117,527090\n621780,518717\n209518,564775\n677135,515423\n987500,501340\n197049,567613\n329315,544673\n236756,559196\n357092,541226\n520440,525733\n213471,563911\n956852,502490\n702223,514032\n404943,535955\n178880,572152\n689477,514734\n691351,514630\n866669,506128\n370561,539656\n739805,512051\n71060,619441\n624861,518534\n261660,554714\n366137,540160\n166054,575698\n601878,519990\n153445,579501\n279899,551729\n379166,538691\n423209,534125\n675310,515526\n145641,582050\n691353,514627\n917468,504026\n284778,550976\n81040,612235\n161699,576978\n616394,519057\n767490,510661\n156896,578431\n427408,533714\n254849,555884\n737217,512182\n897133,504851\n203815,566051\n270822,553189\n135854,585475\n778805,510111\n784373,509847\n305426,547921\n733418,512375\n732087,512448\n540668,524215\n702898,513996\n628057,518328\n640280,517587\n422405,534204\n10604,746569\n746038,511733\n839808,507293\n457417,530938\n479030,529064\n341758,543090\n620223,518824\n251661,556451\n561790,522696\n497733,527521\n724201,512863\n489217,528217\n415623,534867\n624610,518548\n847541,506953\n432295,533249\n400391,536421\n961158,502319\n139173,584284\n421225,534315\n579083,521501\n74274,617000\n701142,514087\n374465,539219\n217814,562985\n358972,540995\n88629,607424\n288597,550389\n285819,550812\n538400,524385\n809930,508645\n738326,512126\n955461,502535\n163829,576343\n826475,507891\n376488,538987\n102234,599905\n114650,594002\n52815,636341\n434037,533082\n804744,508880\n98385,601905\n856620,506559\n220057,562517\n844734,507078\n150677,580387\n558697,522917\n621751,518719\n207067,565321\n135297,585677\n932968,503404\n604456,519822\n579728,521462\n244138,557813\n706487,513800\n711627,513523\n853833,506674\n497220,527562\n59428,629511\n564845,522486\n623621,518603\n242689,558077\n125091,589591\n363819,540432\n686453,514901\n656813,516594\n489901,528155\n386380,537905\n542819,524052\n243987,557841\n693412,514514\n488484,528271\n896331,504881\n336730,543721\n728298,512647\n604215,519840\n153729,579413\n595687,520398\n540360,524240\n245779,557511\n924873,503730\n509628,526577\n528523,525122\n3509,847707\n522756,525555\n895447,504922\n44840,646067\n45860,644715\n463487,530404\n398164,536654\n894483,504959\n619415,518874\n966306,502129\n990922,501212\n835756,507474\n548881,523618\n453578,531282\n474993,529410\n80085,612879\n737091,512193\n50789,638638\n979768,501620\n792018,509483\n665001,516122\n86552,608694\n462772,530469\n589233,520821\n891694,505072\n592605,520594\n209645,564741\n42531,649269\n554376,523226\n803814,508929\n334157,544042\n175836,572970\n868379,506051\n658166,516520\n278203,551995\n966198,502126\n627162,518387\n296774,549165\n311803,547027\n843797,507118\n702304,514032\n563875,522553\n33103,664910\n191932,568841\n543514,524006\n506835,526794\n868368,506052\n847025,506971\n678623,515342\n876139,505726\n571997,521984\n598632,520198\n213590,563892\n625404,518497\n726508,512738\n689426,514738\n332495,544264\n411366,535302\n242546,558110\n315209,546555\n797544,509219\n93889,604371\n858879,506454\n124906,589666\n449072,531693\n235960,559345\n642403,517454\n720567,513047\n705534,513858\n603692,519870\n488137,528302\n157370,578285\n63515,625730\n666326,516041\n619226,518883\n443613,532186\n597717,520257\n96225,603069\n86940,608450\n40725,651929\n460976,530625\n268875,553508\n270671,553214\n363254,540500\n384248,538137\n762889,510892\n377941,538833\n278878,551890\n176615,572755\n860008,506412\n944392,502967\n608395,519571\n225283,561450\n45095,645728\n333798,544090\n625733,518476\n995584,501037\n506135,526853\n238050,558952\n557943,522972\n530978,524938\n634244,517949\n177168,572616\n85200,609541\n953043,502630\n523661,525484\n999295,500902\n840803,507246\n961490,502312\n471747,529685\n380705,538523\n911180,504275\n334149,544046\n478992,529065\n325789,545133\n335884,543826\n426976,533760\n749007,511582\n667067,516000\n607586,519623\n674054,515599\n188534,569675\n565185,522464\n172090,573988\n87592,608052\n907432,504424\n8912,760841\n928318,503590\n757917,511138\n718693,513153\n315141,546566\n728326,512645\n353492,541647\n638429,517695\n628892,518280\n877286,505672\n620895,518778\n385878,537959\n423311,534113\n633501,517997\n884833,505360\n883402,505416\n999665,500894\n708395,513697\n548142,523667\n756491,511205\n987352,501340\n766520,510705\n591775,520647\n833758,507563\n843890,507108\n925551,503698\n74816,616598\n646942,517187\n354923,541481\n256291,555638\n634470,517942\n930904,503494\n134221,586071\n282663,551304\n986070,501394\n123636,590176\n123678,590164\n481717,528841\n423076,534137\n866246,506145\n93313,604697\n783632,509880\n317066,546304\n502977,527103\n141272,583545\n71708,618938\n617748,518975\n581190,521362\n193824,568382\n682368,515131\n352956,541712\n351375,541905\n505362,526909\n905165,504518\n128645,588188\n267143,553787\n158409,577965\n482776,528754\n628896,518282\n485233,528547\n563606,522574\n111001,595655\n115920,593445\n365510,540237\n959724,502374\n938763,503184\n930044,503520\n970959,501956\n913658,504176\n68117,621790\n989729,501253\n567697,522288\n820427,508163\n54236,634794\n291557,549938\n124961,589646\n403177,536130\n405421,535899\n410233,535417\n815111,508403\n213176,563974\n83099,610879\n998588,500934\n513640,526263\n129817,587733\n1820,921851\n287584,550539\n299160,548820\n860621,506386\n529258,525059\n586297,521017\n953406,502616\n441234,532410\n986217,501386\n781938,509957\n461247,530595\n735424,512277\n146623,581722\n839838,507288\n510667,526494\n935085,503327\n737523,512167\n303455,548204\n992779,501145\n60240,628739\n939095,503174\n794368,509370\n501825,527189\n459028,530798\n884641,505363\n512287,526364\n835165,507499\n307723,547590\n160587,577304\n735043,512300\n493289,527887\n110717,595785\n306480,547772\n318593,546089\n179810,571911\n200531,566799\n314999,546580\n197020,567622\n301465,548487\n237808,559000\n131944,586923\n882527,505449\n468117,530003\n711319,513541\n156240,578628\n965452,502162\n992756,501148\n437959,532715\n739938,512046\n614249,519196\n391496,537356\n62746,626418\n688215,514806\n75501,616091\n883573,505412\n558824,522910\n759371,511061\n173913,573489\n891351,505089\n727464,512693\n164833,576051\n812317,508529\n540320,524243\n698061,514257\n69149,620952\n471673,529694\n159092,577753\n428134,533653\n89997,606608\n711061,513557\n779403,510081\n203327,566155\n798176,509187\n667688,515963\n636120,517833\n137410,584913\n217615,563034\n556887,523038\n667229,515991\n672276,515708\n325361,545187\n172115,573985\n13846,725685\n"
  },
  {
    "path": "project_euler/problem_099/sol1.py",
    "content": "\"\"\"\nProblem:\n\nComparing two numbers written in index form like 2'11 and 3'7 is not difficult, as any\ncalculator would confirm that 2^11 = 2048 < 3^7 = 2187.\n\nHowever, confirming that 632382^518061 > 519432^525806 would be much more difficult, as\nboth numbers contain over three million digits.\n\nUsing base_exp.txt, a 22K text file containing one thousand lines with a base/exponent\npair on each line, determine which line number has the greatest numerical value.\n\nNOTE: The first two lines in the file represent the numbers in the example given above.\n\"\"\"\n\nimport os\nfrom math import log10\n\n\ndef solution(data_file: str = \"base_exp.txt\") -> int:\n    \"\"\"\n    >>> solution()\n    709\n    \"\"\"\n    largest: float = 0\n    result = 0\n    for i, line in enumerate(open(os.path.join(os.path.dirname(__file__), data_file))):\n        a, x = list(map(int, line.split(\",\")))\n        if x * log10(a) > largest:\n            largest = x * log10(a)\n            result = i + 1\n    return result\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_100/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_100/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 100: https://projecteuler.net/problem=100\n\nIf a box contains twenty-one coloured discs, composed of fifteen blue discs and\nsix red discs, and two discs were taken at random, it can be seen that\nthe probability of taking two blue discs, P(BB) = (15/21) x (14/20) = 1/2.\n\nThe next such arrangement, for which there is exactly 50% chance of taking two blue\ndiscs at random, is a box containing eighty-five blue discs and thirty-five red discs.\n\nBy finding the first arrangement to contain over 10^12 = 1,000,000,000,000 discs\nin total, determine the number of blue discs that the box would contain.\n\"\"\"\n\n\ndef solution(min_total: int = 10**12) -> int:\n    \"\"\"\n    Returns the number of blue discs for the first arrangement to contain\n    over min_total discs in total\n\n    >>> solution(2)\n    3\n\n    >>> solution(4)\n    15\n\n    >>> solution(21)\n    85\n    \"\"\"\n\n    prev_numerator = 1\n    prev_denominator = 0\n\n    numerator = 1\n    denominator = 1\n\n    while numerator <= 2 * min_total - 1:\n        prev_numerator += 2 * numerator\n        numerator += 2 * prev_numerator\n\n        prev_denominator += 2 * denominator\n        denominator += 2 * prev_denominator\n\n    return (denominator + 1) // 2\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_101/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_101/sol1.py",
    "content": "\"\"\"\nIf we are presented with the first k terms of a sequence it is impossible to say with\ncertainty the value of the next term, as there are infinitely many polynomial functions\nthat can model the sequence.\n\nAs an example, let us consider the sequence of cube\nnumbers. This is defined by the generating function,\nu(n) = n3: 1, 8, 27, 64, 125, 216, ...\n\nSuppose we were only given the first two terms of this sequence. Working on the\nprinciple that \"simple is best\" we should assume a linear relationship and predict the\nnext term to be 15 (common difference 7). Even if we were presented with the first three\nterms, by the same principle of simplicity, a quadratic relationship should be\nassumed.\n\nWe shall define OP(k, n) to be the nth term of the optimum polynomial\ngenerating function for the first k terms of a sequence. It should be clear that\nOP(k, n) will accurately generate the terms of the sequence for n ≤ k, and potentially\nthe first incorrect term (FIT) will be OP(k, k+1); in which case we shall call it a\nbad OP (BOP).\n\nAs a basis, if we were only given the first term of sequence, it would be most\nsensible to assume constancy; that is, for n ≥ 2, OP(1, n) = u(1).\n\nHence we obtain the\nfollowing OPs for the cubic sequence:\n\nOP(1, n) = 1            1, 1, 1, 1, ...\nOP(2, n) = 7n-6         1, 8, 15, ...\nOP(3, n) = 6n^2-11n+6   1, 8, 27, 58, ...\nOP(4, n) = n^3          1, 8, 27, 64, 125, ...\n\nClearly no BOPs exist for k ≥ 4.\n\nBy considering the sum of FITs generated by the BOPs (indicated in red above), we\nobtain 1 + 15 + 58 = 74.\n\nConsider the following tenth degree polynomial generating function:\n\n1 - n + n^2 - n^3 + n^4 - n^5 + n^6 - n^7 + n^8 - n^9 + n^10\n\nFind the sum of FITs for the BOPs.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections.abc import Callable\n\nMatrix = list[list[float | int]]\n\n\ndef solve(matrix: Matrix, vector: Matrix) -> Matrix:\n    \"\"\"\n    Solve the linear system of equations Ax = b (A = \"matrix\", b = \"vector\")\n    for x using Gaussian elimination and back substitution. We assume that A\n    is an invertible square matrix and that b is a column vector of the\n    same height.\n    >>> solve([[1, 0], [0, 1]], [[1],[2]])\n    [[1.0], [2.0]]\n    >>> solve([[2, 1, -1],[-3, -1, 2],[-2, 1, 2]],[[8], [-11],[-3]])\n    [[2.0], [3.0], [-1.0]]\n    \"\"\"\n    size: int = len(matrix)\n    augmented: Matrix = [[0 for _ in range(size + 1)] for _ in range(size)]\n    row: int\n    row2: int\n    col: int\n    col2: int\n    pivot_row: int\n    ratio: float\n\n    for row in range(size):\n        for col in range(size):\n            augmented[row][col] = matrix[row][col]\n\n        augmented[row][size] = vector[row][0]\n\n    row = 0\n    col = 0\n    while row < size and col < size:\n        # pivoting\n        pivot_row = max((abs(augmented[row2][col]), row2) for row2 in range(col, size))[\n            1\n        ]\n        if augmented[pivot_row][col] == 0:\n            col += 1\n            continue\n        else:\n            augmented[row], augmented[pivot_row] = augmented[pivot_row], augmented[row]\n\n        for row2 in range(row + 1, size):\n            ratio = augmented[row2][col] / augmented[row][col]\n            augmented[row2][col] = 0\n            for col2 in range(col + 1, size + 1):\n                augmented[row2][col2] -= augmented[row][col2] * ratio\n\n        row += 1\n        col += 1\n\n    # back substitution\n    for col in range(1, size):\n        for row in range(col):\n            ratio = augmented[row][col] / augmented[col][col]\n            for col2 in range(col, size + 1):\n                augmented[row][col2] -= augmented[col][col2] * ratio\n\n    # round to get rid of numbers like 2.000000000000004\n    return [\n        [round(augmented[row][size] / augmented[row][row], 10)] for row in range(size)\n    ]\n\n\ndef interpolate(y_list: list[int]) -> Callable[[int], int]:\n    \"\"\"\n    Given a list of data points (1,y0),(2,y1), ..., return a function that\n    interpolates the data points. We find the coefficients of the interpolating\n    polynomial by solving a system of linear equations corresponding to\n    x = 1, 2, 3...\n\n    >>> interpolate([1])(3)\n    1\n    >>> interpolate([1, 8])(3)\n    15\n    >>> interpolate([1, 8, 27])(4)\n    58\n    >>> interpolate([1, 8, 27, 64])(6)\n    216\n    \"\"\"\n\n    size: int = len(y_list)\n    matrix: Matrix = [[0 for _ in range(size)] for _ in range(size)]\n    vector: Matrix = [[0] for _ in range(size)]\n    coeffs: Matrix\n    x_val: int\n    y_val: int\n    col: int\n\n    for x_val, y_val in enumerate(y_list):\n        for col in range(size):\n            matrix[x_val][col] = (x_val + 1) ** (size - col - 1)\n        vector[x_val][0] = y_val\n\n    coeffs = solve(matrix, vector)\n\n    def interpolated_func(var: int) -> int:\n        \"\"\"\n        >>> interpolate([1])(3)\n        1\n        >>> interpolate([1, 8])(3)\n        15\n        >>> interpolate([1, 8, 27])(4)\n        58\n        >>> interpolate([1, 8, 27, 64])(6)\n        216\n        \"\"\"\n        return sum(\n            round(coeffs[x_val][0]) * (var ** (size - x_val - 1))\n            for x_val in range(size)\n        )\n\n    return interpolated_func\n\n\ndef question_function(variable: int) -> int:\n    \"\"\"\n    The generating function u as specified in the question.\n    >>> question_function(0)\n    1\n    >>> question_function(1)\n    1\n    >>> question_function(5)\n    8138021\n    >>> question_function(10)\n    9090909091\n    \"\"\"\n    return (\n        1\n        - variable\n        + variable**2\n        - variable**3\n        + variable**4\n        - variable**5\n        + variable**6\n        - variable**7\n        + variable**8\n        - variable**9\n        + variable**10\n    )\n\n\ndef solution(func: Callable[[int], int] = question_function, order: int = 10) -> int:\n    \"\"\"\n    Find the sum of the FITs of the BOPS. For each interpolating polynomial of order\n    1, 2, ... , 10, find the first x such that the value of the polynomial at x does\n    not equal u(x).\n    >>> solution(lambda n: n ** 3, 3)\n    74\n    \"\"\"\n    data_points: list[int] = [func(x_val) for x_val in range(1, order + 1)]\n\n    polynomials: list[Callable[[int], int]] = [\n        interpolate(data_points[:max_coeff]) for max_coeff in range(1, order + 1)\n    ]\n\n    ret: int = 0\n    poly: Callable[[int], int]\n    x_val: int\n\n    for poly in polynomials:\n        x_val = 1\n        while func(x_val) == poly(x_val):\n            x_val += 1\n\n        ret += poly(x_val)\n\n    return ret\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_102/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_102/p102_triangles.txt",
    "content": "-340,495,-153,-910,835,-947\n-175,41,-421,-714,574,-645\n-547,712,-352,579,951,-786\n419,-864,-83,650,-399,171\n-429,-89,-357,-930,296,-29\n-734,-702,823,-745,-684,-62\n-971,762,925,-776,-663,-157\n162,570,628,485,-807,-896\n641,91,-65,700,887,759\n215,-496,46,-931,422,-30\n-119,359,668,-609,-358,-494\n440,929,968,214,760,-857\n-700,785,838,29,-216,411\n-770,-458,-325,-53,-505,633\n-752,-805,349,776,-799,687\n323,5,561,-36,919,-560\n-907,358,264,320,204,274\n-728,-466,350,969,292,-345\n940,836,272,-533,748,185\n411,998,813,520,316,-949\n-152,326,658,-762,148,-651\n330,507,-9,-628,101,174\n551,-496,772,-541,-702,-45\n-164,-489,-90,322,631,-59\n673,366,-4,-143,-606,-704\n428,-609,801,-449,740,-269\n453,-924,-785,-346,-853,111\n-738,555,-181,467,-426,-20\n958,-692,784,-343,505,-569\n620,27,263,54,-439,-726\n804,87,998,859,871,-78\n-119,-453,-709,-292,-115,-56\n-626,138,-940,-476,-177,-274\n-11,160,142,588,446,158\n538,727,550,787,330,810\n420,-689,854,-546,337,516\n872,-998,-607,748,473,-192\n653,440,-516,-985,808,-857\n374,-158,331,-940,-338,-641\n137,-925,-179,771,734,-715\n-314,198,-115,29,-641,-39\n759,-574,-385,355,590,-603\n-189,-63,-168,204,289,305\n-182,-524,-715,-621,911,-255\n331,-816,-833,471,168,126\n-514,581,-855,-220,-731,-507\n129,169,576,651,-87,-458\n783,-444,-881,658,-266,298\n603,-430,-598,585,368,899\n43,-724,962,-376,851,409\n-610,-646,-883,-261,-482,-881\n-117,-237,978,641,101,-747\n579,125,-715,-712,208,534\n672,-214,-762,372,874,533\n-564,965,38,715,367,242\n500,951,-700,-981,-61,-178\n-382,-224,-959,903,-282,-60\n-355,295,426,-331,-591,655\n892,128,958,-271,-993,274\n-454,-619,302,138,-790,-874\n-642,601,-574,159,-290,-318\n266,-109,257,-686,54,975\n162,628,-478,840,264,-266\n466,-280,982,1,904,-810\n721,839,730,-807,777,981\n-129,-430,748,263,943,96\n434,-94,410,-990,249,-704\n237,42,122,-732,44,-51\n909,-116,-229,545,292,717\n824,-768,-807,-370,-262,30\n675,58,332,-890,-651,791\n363,825,-717,254,684,240\n405,-715,900,166,-589,422\n-476,686,-830,-319,634,-807\n633,837,-971,917,-764,207\n-116,-44,-193,-70,908,809\n-26,-252,998,408,70,-713\n-601,645,-462,842,-644,-591\n-160,653,274,113,-138,687\n369,-273,-181,925,-167,-693\n-338,135,480,-967,-13,-840\n-90,-270,-564,695,161,907\n607,-430,869,-713,461,-469\n919,-165,-776,522,606,-708\n-203,465,288,207,-339,-458\n-453,-534,-715,975,838,-677\n-973,310,-350,934,546,-805\n-835,385,708,-337,-594,-772\n-14,914,900,-495,-627,594\n833,-713,-213,578,-296,699\n-27,-748,484,455,915,291\n270,889,739,-57,442,-516\n119,811,-679,905,184,130\n-678,-469,925,553,612,482\n101,-571,-732,-842,644,588\n-71,-737,566,616,957,-663\n-634,-356,90,-207,936,622\n598,443,964,-895,-58,529\n847,-467,929,-742,91,10\n-633,829,-780,-408,222,-30\n-818,57,275,-38,-746,198\n-722,-825,-549,597,-391,99\n-570,908,430,873,-103,-360\n342,-681,512,434,542,-528\n297,850,479,609,543,-357\n9,784,212,548,56,859\n-152,560,-240,-969,-18,713\n140,-133,34,-635,250,-163\n-272,-22,-169,-662,989,-604\n471,-765,355,633,-742,-118\n-118,146,942,663,547,-376\n583,16,162,264,715,-33\n-230,-446,997,-838,561,555\n372,397,-729,-318,-276,649\n92,982,-970,-390,-922,922\n-981,713,-951,-337,-669,670\n-999,846,-831,-504,7,-128\n455,-954,-370,682,-510,45\n822,-960,-892,-385,-662,314\n-668,-686,-367,-246,530,-341\n-723,-720,-926,-836,-142,757\n-509,-134,384,-221,-873,-639\n-803,-52,-706,-669,373,-339\n933,578,631,-616,770,555\n741,-564,-33,-605,-576,275\n-715,445,-233,-730,734,-704\n120,-10,-266,-685,-490,-17\n-232,-326,-457,-946,-457,-116\n811,52,639,826,-200,147\n-329,279,293,612,943,955\n-721,-894,-393,-969,-642,453\n-688,-826,-352,-75,371,79\n-809,-979,407,497,858,-248\n-485,-232,-242,-582,-81,849\n141,-106,123,-152,806,-596\n-428,57,-992,811,-192,478\n864,393,122,858,255,-876\n-284,-780,240,457,354,-107\n956,605,-477,44,26,-678\n86,710,-533,-815,439,327\n-906,-626,-834,763,426,-48\n201,-150,-904,652,475,412\n-247,149,81,-199,-531,-148\n923,-76,-353,175,-121,-223\n427,-674,453,472,-410,585\n931,776,-33,85,-962,-865\n-655,-908,-902,208,869,792\n-316,-102,-45,-436,-222,885\n-309,768,-574,653,745,-975\n896,27,-226,993,332,198\n323,655,-89,260,240,-902\n501,-763,-424,793,813,616\n993,375,-938,-621,672,-70\n-880,-466,-283,770,-824,143\n63,-283,886,-142,879,-116\n-964,-50,-521,-42,-306,-161\n724,-22,866,-871,933,-383\n-344,135,282,966,-80,917\n-281,-189,420,810,362,-582\n-515,455,-588,814,162,332\n555,-436,-123,-210,869,-943\n589,577,232,286,-554,876\n-773,127,-58,-171,-452,125\n-428,575,906,-232,-10,-224\n437,276,-335,-348,605,878\n-964,511,-386,-407,168,-220\n307,513,912,-463,-423,-416\n-445,539,273,886,-18,760\n-396,-585,-670,414,47,364\n143,-506,754,906,-971,-203\n-544,472,-180,-541,869,-465\n-779,-15,-396,890,972,-220\n-430,-564,503,182,-119,456\n89,-10,-739,399,506,499\n954,162,-810,-973,127,870\n890,952,-225,158,828,237\n-868,952,349,465,574,750\n-915,369,-975,-596,-395,-134\n-135,-601,575,582,-667,640\n413,890,-560,-276,-555,-562\n-633,-269,561,-820,-624,499\n371,-92,-784,-593,864,-717\n-971,655,-439,367,754,-951\n172,-347,36,279,-247,-402\n633,-301,364,-349,-683,-387\n-780,-211,-713,-948,-648,543\n72,58,762,-465,-66,462\n78,502,781,-832,713,836\n-431,-64,-484,-392,208,-343\n-64,101,-29,-860,-329,844\n398,391,828,-858,700,395\n578,-896,-326,-604,314,180\n97,-321,-695,185,-357,852\n854,839,283,-375,951,-209\n194,96,-564,-847,162,524\n-354,532,494,621,580,560\n419,-678,-450,926,-5,-924\n-661,905,519,621,-143,394\n-573,268,296,-562,-291,-319\n-211,266,-196,158,564,-183\n18,-585,-398,777,-581,864\n790,-894,-745,-604,-418,70\n848,-339,150,773,11,851\n-954,-809,-53,-20,-648,-304\n658,-336,-658,-905,853,407\n-365,-844,350,-625,852,-358\n986,-315,-230,-159,21,180\n-15,599,45,-286,-941,847\n-613,-68,184,639,-987,550\n334,675,-56,-861,923,340\n-848,-596,960,231,-28,-34\n707,-811,-994,-356,-167,-171\n-470,-764,72,576,-600,-204\n379,189,-542,-576,585,800\n440,540,-445,-563,379,-334\n-155,64,514,-288,853,106\n-304,751,481,-520,-708,-694\n-709,132,594,126,-844,63\n723,471,421,-138,-962,892\n-440,-263,39,513,-672,-954\n775,809,-581,330,752,-107\n-376,-158,335,-708,-514,578\n-343,-769,456,-187,25,413\n548,-877,-172,300,-500,928\n938,-102,423,-488,-378,-969\n-36,564,-55,131,958,-800\n-322,511,-413,503,700,-847\n-966,547,-88,-17,-359,-67\n637,-341,-437,-181,527,-153\n-74,449,-28,3,485,189\n-997,658,-224,-948,702,-807\n-224,736,-896,127,-945,-850\n-395,-106,439,-553,-128,124\n-841,-445,-758,-572,-489,212\n633,-327,13,-512,952,771\n-940,-171,-6,-46,-923,-425\n-142,-442,-817,-998,843,-695\n340,847,-137,-920,-988,-658\n-653,217,-679,-257,651,-719\n-294,365,-41,342,74,-892\n690,-236,-541,494,408,-516\n180,-807,225,790,494,59\n707,605,-246,656,284,271\n65,294,152,824,442,-442\n-321,781,-540,341,316,415\n420,371,-2,545,995,248\n56,-191,-604,971,615,449\n-981,-31,510,592,-390,-362\n-317,-968,913,365,97,508\n832,63,-864,-510,86,202\n-483,456,-636,340,-310,676\n981,-847,751,-508,-962,-31\n-157,99,73,797,63,-172\n220,858,872,924,866,-381\n996,-169,805,321,-164,971\n896,11,-625,-973,-782,76\n578,-280,730,-729,307,-905\n-580,-749,719,-698,967,603\n-821,874,-103,-623,662,-491\n-763,117,661,-644,672,-607\n592,787,-798,-169,-298,690\n296,644,-526,-762,-447,665\n534,-818,852,-120,57,-379\n-986,-549,-329,294,954,258\n-133,352,-660,-77,904,-356\n748,343,215,500,317,-277\n311,7,910,-896,-809,795\n763,-602,-753,313,-352,917\n668,619,-474,-597,-650,650\n-297,563,-701,-987,486,-902\n-461,-740,-657,233,-482,-328\n-446,-250,-986,-458,-629,520\n542,-49,-327,-469,257,-947\n121,-575,-634,-143,-184,521\n30,504,455,-645,-229,-945\n-12,-295,377,764,771,125\n-686,-133,225,-25,-376,-143\n-6,-46,338,270,-405,-872\n-623,-37,582,467,963,898\n-804,869,-477,420,-475,-303\n94,41,-842,-193,-768,720\n-656,-918,415,645,-357,460\n-47,-486,-911,468,-608,-686\n-158,251,419,-394,-655,-895\n272,-695,979,508,-358,959\n-776,650,-918,-467,-690,-534\n-85,-309,-626,167,-366,-429\n-880,-732,-186,-924,970,-875\n517,645,-274,962,-804,544\n721,402,104,640,478,-499\n198,684,-134,-723,-452,-905\n-245,745,239,238,-826,441\n-217,206,-32,462,-981,-895\n-51,989,526,-173,560,-676\n-480,-659,-976,-580,-727,466\n-996,-90,-995,158,-239,642\n302,288,-194,-294,17,924\n-943,969,-326,114,-500,103\n-619,163,339,-880,230,421\n-344,-601,-795,557,565,-779\n590,345,-129,-202,-125,-58\n-777,-195,159,674,775,411\n-939,312,-665,810,121,855\n-971,254,712,815,452,581\n442,-9,327,-750,61,757\n-342,869,869,-160,390,-772\n620,601,565,-169,-69,-183\n-25,924,-817,964,321,-970\n-64,-6,-133,978,825,-379\n601,436,-24,98,-115,940\n-97,502,614,-574,922,513\n-125,262,-946,695,99,-220\n429,-721,719,-694,197,-558\n326,689,-70,-908,-673,338\n-468,-856,-902,-254,-358,305\n-358,530,542,355,-253,-47\n-438,-74,-362,963,988,788\n137,717,467,622,319,-380\n-86,310,-336,851,918,-288\n721,395,646,-53,255,-425\n255,175,912,84,-209,878\n-632,-485,-400,-357,991,-608\n235,-559,992,-297,857,-591\n87,-71,148,130,647,578\n-290,-584,-639,-788,-21,592\n386,984,625,-731,-993,-336\n-538,634,-209,-828,-150,-774\n-754,-387,607,-781,976,-199\n412,-798,-664,295,709,-537\n-412,932,-880,-232,561,852\n-656,-358,-198,-964,-433,-848\n-762,-668,-632,186,-673,-11\n-876,237,-282,-312,-83,682\n403,73,-57,-436,-622,781\n-587,873,798,976,-39,329\n-369,-622,553,-341,817,794\n-108,-616,920,-849,-679,96\n290,-974,234,239,-284,-321\n-22,394,-417,-419,264,58\n-473,-551,69,923,591,-228\n-956,662,-113,851,-581,-794\n-258,-681,413,-471,-637,-817\n-866,926,992,-653,-7,794\n556,-350,602,917,831,-610\n188,245,-906,361,492,174\n-720,384,-818,329,638,-666\n-246,846,890,-325,-59,-850\n-118,-509,620,-762,-256,15\n-787,-536,-452,-338,-399,813\n458,560,525,-311,-608,-419\n494,-811,-825,-127,-812,894\n-801,890,-629,-860,574,925\n-709,-193,-213,138,-410,-403\n861,91,708,-187,5,-222\n789,646,777,154,90,-49\n-267,-830,-114,531,591,-698\n-126,-82,881,-418,82,652\n-894,130,-726,-935,393,-815\n-142,563,654,638,-712,-597\n-759,60,-23,977,100,-765\n-305,595,-570,-809,482,762\n-161,-267,53,963,998,-529\n-300,-57,798,353,703,486\n-990,696,-764,699,-565,719\n-232,-205,566,571,977,369\n740,865,151,-817,-204,-293\n94,445,-768,229,537,-406\n861,620,37,-424,-36,656\n390,-369,952,733,-464,569\n-482,-604,959,554,-705,-626\n-396,-615,-991,108,272,-723\n143,780,535,142,-917,-147\n138,-629,-217,-908,905,115\n915,103,-852,64,-468,-642\n570,734,-785,-268,-326,-759\n738,531,-332,586,-779,24\n870,440,-217,473,-383,415\n-296,-333,-330,-142,-924,950\n118,120,-35,-245,-211,-652\n61,634,153,-243,838,789\n726,-582,210,105,983,537\n-313,-323,758,234,29,848\n-847,-172,-593,733,-56,617\n54,255,-512,156,-575,675\n-873,-956,-148,623,95,200\n700,-370,926,649,-978,157\n-639,-202,719,130,747,222\n194,-33,955,943,505,114\n-226,-790,28,-930,827,783\n-392,-74,-28,714,218,-612\n209,626,-888,-683,-912,495\n487,751,614,933,631,445\n-348,-34,-411,-106,835,321\n-689,872,-29,-800,312,-542\n-52,566,827,570,-862,-77\n471,992,309,-402,389,912\n24,520,-83,-51,555,503\n-265,-317,283,-970,-472,690\n606,526,137,71,-651,150\n217,-518,663,66,-605,-331\n-562,232,-76,-503,205,-323\n842,-521,546,285,625,-186\n997,-927,344,909,-546,974\n-677,419,81,121,-705,771\n719,-379,-944,-797,784,-155\n-378,286,-317,-797,-111,964\n-288,-573,784,80,-532,-646\n-77,407,-248,-797,769,-816\n-24,-637,287,-858,-927,-333\n-902,37,894,-823,141,684\n125,467,-177,-516,686,399\n-321,-542,641,-590,527,-224\n-400,-712,-876,-208,632,-543\n-676,-429,664,-242,-269,922\n-608,-273,-141,930,687,380\n786,-12,498,494,310,326\n-739,-617,606,-960,804,188\n384,-368,-243,-350,-459,31\n-550,397,320,-868,328,-279\n969,-179,853,864,-110,514\n910,793,302,-822,-285,488\n-605,-128,218,-283,-17,-227\n16,324,667,708,750,3\n485,-813,19,585,71,930\n-218,816,-687,-97,-732,-360\n-497,-151,376,-23,3,315\n-412,-989,-610,-813,372,964\n-878,-280,87,381,-311,69\n-609,-90,-731,-679,150,585\n889,27,-162,605,75,-770\n448,617,-988,0,-103,-504\n-800,-537,-69,627,608,-668\n534,686,-664,942,830,920\n-238,775,495,932,-793,497\n-343,958,-914,-514,-691,651\n568,-136,208,359,728,28\n286,912,-794,683,556,-102\n-638,-629,-484,445,-64,-497\n58,505,-801,-110,872,632\n-390,777,353,267,976,369\n-993,515,105,-133,358,-572\n964,996,355,-212,-667,38\n-725,-614,-35,365,132,-196\n237,-536,-416,-302,312,477\n-664,574,-210,224,48,-925\n869,-261,-256,-240,-3,-698\n712,385,32,-34,916,-315\n895,-409,-100,-346,728,-624\n-806,327,-450,889,-781,-939\n-586,-403,698,318,-939,899\n557,-57,-920,659,333,-51\n-441,232,-918,-205,246,1\n783,167,-797,-595,245,-736\n-36,-531,-486,-426,-813,-160\n777,-843,817,313,-228,-572\n735,866,-309,-564,-81,190\n-413,645,101,719,-719,218\n-83,164,767,796,-430,-459\n122,779,-15,-295,-96,-892\n462,379,70,548,834,-312\n-630,-534,124,187,-737,114\n-299,-604,318,-591,936,826\n-879,218,-642,-483,-318,-866\n-691,62,-658,761,-895,-854\n-822,493,687,569,910,-202\n-223,784,304,-5,541,925\n-914,541,737,-662,-662,-195\n-622,615,414,358,881,-878\n339,745,-268,-968,-280,-227\n-364,855,148,-709,-827,472\n-890,-532,-41,664,-612,577\n-702,-859,971,-722,-660,-920\n-539,-605,737,149,973,-802\n800,42,-448,-811,152,511\n-933,377,-110,-105,-374,-937\n-766,152,482,120,-308,390\n-568,775,-292,899,732,890\n-177,-317,-502,-259,328,-511\n612,-696,-574,-660,132,31\n-119,563,-805,-864,179,-672\n425,-627,183,-331,839,318\n-711,-976,-749,152,-916,261\n181,-63,497,211,262,406\n-537,700,-859,-765,-928,77\n892,832,231,-749,-82,613\n816,216,-642,-216,-669,-912\n-6,624,-937,-370,-344,268\n737,-710,-869,983,-324,-274\n565,952,-547,-158,374,-444\n51,-683,645,-845,515,636\n-953,-631,114,-377,-764,-144\n-8,470,-242,-399,-675,-730\n-540,689,-20,47,-607,590\n-329,-710,-779,942,-388,979\n123,829,674,122,203,563\n46,782,396,-33,386,610\n872,-846,-523,-122,-55,-190\n388,-994,-525,974,127,596\n781,-680,796,-34,-959,-62\n-749,173,200,-384,-745,-446\n379,618,136,-250,-224,970\n-58,240,-921,-760,-901,-626\n366,-185,565,-100,515,688\n489,999,-893,-263,-637,816\n838,-496,-316,-513,419,479\n107,676,-15,882,98,-397\n-999,941,-903,-424,670,-325\n171,-979,835,178,169,-984\n-609,-607,378,-681,184,402\n-316,903,-575,-800,224,983\n591,-18,-460,551,-167,918\n-756,405,-117,441,163,-320\n456,24,6,881,-836,-539\n-489,-585,915,651,-892,-382\n-177,-122,73,-711,-386,591\n181,724,530,686,-131,241\n737,288,886,216,233,33\n-548,-386,-749,-153,-85,-982\n-835,227,904,160,-99,25\n-9,-42,-162,728,840,-963\n217,-763,870,771,47,-846\n-595,808,-491,556,337,-900\n-134,281,-724,441,-134,708\n-789,-508,651,-962,661,315\n-839,-923,339,402,41,-487\n300,-790,48,703,-398,-811\n955,-51,462,-685,960,-717\n910,-880,592,-255,-51,-776\n-885,169,-793,368,-565,458\n-905,940,-492,-630,-535,-988\n245,797,763,869,-82,550\n-310,38,-933,-367,-650,824\n-95,32,-83,337,226,990\n-218,-975,-191,-208,-785,-293\n-672,-953,517,-901,-247,465\n681,-148,261,-857,544,-923\n640,341,446,-618,195,769\n384,398,-846,365,671,815\n578,576,-911,907,762,-859\n548,-428,144,-630,-759,-146\n710,-73,-700,983,-97,-889\n-46,898,-973,-362,-817,-717\n151,-81,-125,-900,-478,-154\n483,615,-537,-932,181,-68\n786,-223,518,25,-306,-12\n-422,268,-809,-683,635,468\n983,-734,-694,-608,-110,4\n-786,-196,749,-354,137,-8\n-181,36,668,-200,691,-973\n-629,-838,692,-736,437,-871\n-208,-536,-159,-596,8,197\n-3,370,-686,170,913,-376\n44,-998,-149,-993,-200,512\n-519,136,859,497,536,434\n77,-985,972,-340,-705,-837\n-381,947,250,360,344,322\n-26,131,699,750,707,384\n-914,655,299,193,406,955\n-883,-921,220,595,-546,794\n-599,577,-569,-404,-704,489\n-594,-963,-624,-460,880,-760\n-603,88,-99,681,55,-328\n976,472,139,-453,-531,-860\n192,-290,513,-89,666,432\n417,487,575,293,567,-668\n655,711,-162,449,-980,972\n-505,664,-685,-239,603,-592\n-625,-802,-67,996,384,-636\n365,-593,522,-666,-200,-431\n-868,708,560,-860,-630,-355\n-702,785,-637,-611,-597,960\n-137,-696,-93,-803,408,406\n891,-123,-26,-609,-610,518\n133,-832,-198,555,708,-110\n791,617,-69,487,696,315\n-900,694,-565,517,-269,-416\n914,135,-781,600,-71,-600\n991,-915,-422,-351,-837,313\n-840,-398,-302,21,590,146\n62,-558,-702,-384,-625,831\n-363,-426,-924,-496,792,-908\n73,361,-817,-466,400,922\n-626,-164,-626,860,-524,286\n255,26,-944,809,-606,986\n-457,-256,-103,50,-867,-871\n-223,803,196,480,612,136\n-820,-928,700,780,-977,721\n717,332,53,-933,-128,793\n-602,-648,562,593,890,702\n-469,-875,-527,911,-475,-222\n110,-281,-552,-536,-816,596\n-981,654,413,-981,-75,-95\n-754,-742,-515,894,-220,-344\n795,-52,156,408,-603,76\n474,-157,423,-499,-807,-791\n260,688,40,-52,702,-122\n-584,-517,-390,-881,302,-504\n61,797,665,708,14,668\n366,166,458,-614,564,-983\n72,539,-378,796,381,-824\n-485,201,-588,842,736,379\n-149,-894,-298,705,-303,-406\n660,-935,-580,521,93,633\n-382,-282,-375,-841,-828,171\n-567,743,-100,43,144,122\n-281,-786,-749,-551,296,304\n11,-426,-792,212,857,-175\n594,143,-699,289,315,137\n341,596,-390,107,-631,-804\n-751,-636,-424,-854,193,651\n-145,384,749,675,-786,517\n224,-865,-323,96,-916,258\n-309,403,-388,826,35,-270\n-942,709,222,158,-699,-103\n-589,842,-997,29,-195,-210\n264,426,566,145,-217,623\n217,965,507,-601,-453,507\n-206,307,-982,4,64,-292\n676,-49,-38,-701,550,883\n5,-850,-438,659,745,-773\n933,238,-574,-570,91,-33\n-866,121,-928,358,459,-843\n-568,-631,-352,-580,-349,189\n-737,849,-963,-486,-662,970\n135,334,-967,-71,-365,-792\n789,21,-227,51,990,-275\n240,412,-886,230,591,256\n-609,472,-853,-754,959,661\n401,521,521,314,929,982\n-499,784,-208,71,-302,296\n-557,-948,-553,-526,-864,793\n270,-626,828,44,37,14\n-412,224,617,-593,502,699\n41,-908,81,562,-849,163\n165,917,761,-197,331,-341\n-687,314,799,755,-969,648\n-164,25,578,439,-334,-576\n213,535,874,-177,-551,24\n-689,291,-795,-225,-496,-125\n465,461,558,-118,-568,-909\n567,660,-810,46,-485,878\n-147,606,685,-690,-774,984\n568,-886,-43,854,-738,616\n-800,386,-614,585,764,-226\n-518,23,-225,-732,-79,440\n-173,-291,-689,636,642,-447\n-598,-16,227,410,496,211\n-474,-930,-656,-321,-420,36\n-435,165,-819,555,540,144\n-969,149,828,568,394,648\n65,-848,257,720,-625,-851\n981,899,275,635,465,-877\n80,290,792,760,-191,-321\n-605,-858,594,33,706,593\n585,-472,318,-35,354,-927\n-365,664,803,581,-965,-814\n-427,-238,-480,146,-55,-606\n879,-193,250,-890,336,117\n-226,-322,-286,-765,-836,-218\n-913,564,-667,-698,937,283\n872,-901,810,-623,-52,-709\n473,171,717,38,-429,-644\n225,824,-219,-475,-180,234\n-530,-797,-948,238,851,-623\n85,975,-363,529,598,28\n-799,166,-804,210,-769,851\n-687,-158,885,736,-381,-461\n447,592,928,-514,-515,-661\n-399,-777,-493,80,-544,-78\n-884,631,171,-825,-333,551\n191,268,-577,676,137,-33\n212,-853,709,798,583,-56\n-908,-172,-540,-84,-135,-56\n303,311,406,-360,-240,811\n798,-708,824,59,234,-57\n491,693,-74,585,-85,877\n509,-65,-936,329,-51,722\n-122,858,-52,467,-77,-609\n850,760,547,-495,-953,-952\n-460,-541,890,910,286,724\n-914,843,-579,-983,-387,-460\n989,-171,-877,-326,-899,458\n846,175,-915,540,-1000,-982\n-852,-920,-306,496,530,-18\n338,-991,160,85,-455,-661\n-186,-311,-460,-563,-231,-414\n-932,-302,959,597,793,748\n-366,-402,-788,-279,514,53\n-940,-956,447,-956,211,-285\n564,806,-911,-914,934,754\n575,-858,-277,15,409,-714\n848,462,100,-381,135,242\n330,718,-24,-190,860,-78\n479,458,941,108,-866,-653\n212,980,962,-962,115,841\n-827,-474,-206,881,323,765\n506,-45,-30,-293,524,-133\n832,-173,547,-852,-561,-842\n-397,-661,-708,819,-545,-228\n521,51,-489,852,36,-258\n227,-164,189,465,-987,-882\n-73,-997,641,-995,449,-615\n151,-995,-638,415,257,-400\n-663,-297,-748,537,-734,198\n-585,-401,-81,-782,-80,-105\n99,-21,238,-365,-704,-368\n45,416,849,-211,-371,-1\n-404,-443,795,-406,36,-933\n272,-363,981,-491,-380,77\n713,-342,-366,-849,643,911\n-748,671,-537,813,961,-200\n-194,-909,703,-662,-601,188\n281,500,724,286,267,197\n-832,847,-595,820,-316,637\n520,521,-54,261,923,-10\n4,-808,-682,-258,441,-695\n-793,-107,-969,905,798,446\n-108,-739,-590,69,-855,-365\n380,-623,-930,817,468,713\n759,-849,-236,433,-723,-931\n95,-320,-686,124,-69,-329\n-655,518,-210,-523,284,-866\n144,303,639,70,-171,269\n173,-333,947,-304,55,40\n274,878,-482,-888,-835,375\n-982,-854,-36,-218,-114,-230\n905,-979,488,-485,-479,114\n877,-157,553,-530,-47,-321\n350,664,-881,442,-220,-284\n434,-423,-365,878,-726,584\n535,909,-517,-447,-660,-141\n-966,191,50,353,182,-642\n-785,-634,123,-907,-162,511\n146,-850,-214,814,-704,25\n692,1,521,492,-637,274\n-662,-372,-313,597,983,-647\n-962,-526,68,-549,-819,231\n740,-890,-318,797,-666,948\n-190,-12,-468,-455,948,284\n16,478,-506,-888,628,-154\n272,630,-976,308,433,3\n-169,-391,-132,189,302,-388\n109,-784,474,-167,-265,-31\n-177,-532,283,464,421,-73\n650,635,592,-138,1,-387\n-932,703,-827,-492,-355,686\n586,-311,340,-618,645,-434\n-951,736,647,-127,-303,590\n188,444,903,718,-931,500\n-872,-642,-296,-571,337,241\n23,65,152,125,880,470\n512,823,-42,217,823,-263\n180,-831,-380,886,607,762\n722,443,-149,-216,-115,759\n-19,660,-36,901,923,231\n562,-322,-626,-968,194,-825\n204,-920,938,784,362,150\n-410,-266,-715,559,-672,124\n-198,446,-140,454,-461,-447\n83,-346,830,-493,-759,-382\n-881,601,581,234,-134,-925\n-494,914,-42,899,235,629\n-390,50,956,437,774,-700\n-514,514,44,-512,-576,-313\n63,-688,808,-534,-570,-399\n-726,572,-896,102,-294,-28\n-688,757,401,406,955,-511\n-283,423,-485,480,-767,908\n-541,952,-594,116,-854,451\n-273,-796,236,625,-626,257\n-407,-493,373,826,-309,297\n-750,955,-476,641,-809,713\n8,415,695,226,-111,2\n733,209,152,-920,401,995\n921,-103,-919,66,871,-947\n-907,89,-869,-214,851,-559\n-307,748,524,-755,314,-711\n188,897,-72,-763,482,103\n545,-821,-232,-596,-334,-754\n-217,-788,-820,388,-200,-662\n779,160,-723,-975,-142,-998\n-978,-519,-78,-981,842,904\n-504,-736,-295,21,-472,-482\n391,115,-705,574,652,-446\n813,-988,865,830,-263,487\n194,80,774,-493,-761,-872\n-415,-284,-803,7,-810,670\n-484,-4,881,-872,55,-852\n-379,822,-266,324,-48,748\n-304,-278,406,-60,959,-89\n404,756,577,-643,-332,658\n291,460,125,491,-312,83\n311,-734,-141,582,282,-557\n-450,-661,-981,710,-177,794\n328,264,-787,971,-743,-407\n-622,518,993,-241,-738,229\n273,-826,-254,-917,-710,-111\n809,770,96,368,-818,725\n-488,773,502,-342,534,745\n-28,-414,236,-315,-484,363\n179,-466,-566,713,-683,56\n560,-240,-597,619,916,-940\n893,473,872,-868,-642,-461\n799,489,383,-321,-776,-833\n980,490,-508,764,-512,-426\n917,961,-16,-675,440,559\n-812,212,784,-987,-132,554\n-886,454,747,806,190,231\n910,341,21,-66,708,725\n29,929,-831,-494,-303,389\n-103,492,-271,-174,-515,529\n-292,119,419,788,247,-951\n483,543,-347,-673,664,-549\n-926,-871,-437,337,162,-877\n299,472,-771,5,-88,-643\n-103,525,-725,-998,264,22\n-505,708,550,-545,823,347\n-738,931,59,147,-156,-259\n456,968,-162,889,132,-911\n535,120,968,-517,-864,-541\n24,-395,-593,-766,-565,-332\n834,611,825,-576,280,629\n211,-548,140,-278,-592,929\n-999,-240,-63,-78,793,573\n-573,160,450,987,529,322\n63,353,315,-187,-461,577\n189,-950,-247,656,289,241\n209,-297,397,664,-805,484\n-655,452,435,-556,917,874\n253,-756,262,-888,-778,-214\n793,-451,323,-251,-401,-458\n-396,619,-651,-287,-668,-781\n698,720,-349,742,-807,546\n738,280,680,279,-540,858\n-789,387,530,-36,-551,-491\n162,579,-427,-272,228,710\n689,356,917,-580,729,217\n-115,-638,866,424,-82,-194\n411,-338,-917,172,227,-29\n-612,63,630,-976,-64,-204\n-200,911,583,-571,682,-579\n91,298,396,-183,788,-955\n141,-873,-277,149,-396,916\n321,958,-136,573,541,-777\n797,-909,-469,-877,988,-653\n784,-198,129,883,-203,399\n-68,-810,223,-423,-467,-512\n531,-445,-603,-997,-841,641\n-274,-242,174,261,-636,-158\n-574,494,-796,-798,-798,99\n95,-82,-613,-954,-753,986\n-883,-448,-864,-401,938,-392\n913,930,-542,-988,310,410\n506,-99,43,512,790,-222\n724,31,49,-950,260,-134\n-287,-947,-234,-700,56,588\n-33,782,-144,948,105,-791\n548,-546,-652,-293,881,-520\n691,-91,76,991,-631,742\n-520,-429,-244,-296,724,-48\n778,646,377,50,-188,56\n-895,-507,-898,-165,-674,652\n654,584,-634,177,-349,-620\n114,-980,355,62,182,975\n516,9,-442,-298,274,-579\n-238,262,-431,-896,506,-850\n47,748,846,821,-537,-293\n839,726,593,285,-297,840\n634,-486,468,-304,-887,-567\n-864,914,296,-124,335,233\n88,-253,-523,-956,-554,803\n-587,417,281,-62,-409,-363\n-136,-39,-292,-768,-264,876\n-127,506,-891,-331,-744,-430\n778,584,-750,-129,-479,-94\n-876,-771,-987,-757,180,-641\n-777,-694,411,-87,329,190\n-347,-999,-882,158,-754,232\n-105,918,188,237,-110,-591\n-209,703,-838,77,838,909\n-995,-339,-762,750,860,472\n185,271,-289,173,811,-300\n2,65,-656,-22,36,-139\n765,-210,883,974,961,-905\n-212,295,-615,-840,77,474\n211,-910,-440,703,-11,859\n-559,-4,-196,841,-277,969\n-73,-159,-887,126,978,-371\n-569,633,-423,-33,512,-393\n503,143,-383,-109,-649,-998\n-663,339,-317,-523,-2,596\n690,-380,570,378,-652,132\n72,-744,-930,399,-525,935\n865,-983,115,37,995,826\n594,-621,-872,443,188,-241\n-1000,291,754,234,-435,-869\n-868,901,654,-907,59,181\n-868,-793,-431,596,-446,-564\n900,-944,-680,-796,902,-366\n331,430,943,853,-851,-942\n315,-538,-354,-909,139,721\n170,-884,-225,-818,-808,-657\n-279,-34,-533,-871,-972,552\n691,-986,-800,-950,654,-747\n603,988,899,841,-630,591\n876,-949,809,562,602,-536\n-693,363,-189,495,738,-1000\n-383,431,-633,297,665,959\n-740,686,-207,-803,188,-520\n-820,226,31,-339,10,121\n-312,-844,624,-516,483,621\n-822,-529,69,-278,800,328\n834,-82,-759,420,811,-264\n-960,-240,-921,561,173,46\n-324,909,-790,-814,-2,-785\n976,334,-290,-891,704,-581\n150,-798,689,-823,237,-639\n-551,-320,876,-502,-622,-628\n-136,845,904,595,-702,-261\n-857,-377,-522,-101,-943,-805\n-682,-787,-888,-459,-752,-985\n-571,-81,623,-133,447,643\n-375,-158,72,-387,-324,-696\n-660,-650,340,188,569,526\n727,-218,16,-7,-595,-988\n-966,-684,802,-783,-272,-194\n115,-566,-888,47,712,180\n-237,-69,45,-272,981,-812\n48,897,439,417,50,325\n348,616,180,254,104,-784\n-730,811,-548,612,-736,790\n138,-810,123,930,65,865\n-768,-299,-49,-895,-692,-418\n487,-531,802,-159,-12,634\n808,-179,552,-73,470,717\n720,-644,886,-141,625,144\n-485,-505,-347,-244,-916,66\n600,-565,995,-5,324,227\n-771,-35,904,-482,753,-303\n-701,65,426,-763,-504,-479\n409,733,-823,475,64,718\n865,975,368,893,-413,-433\n812,-597,-970,819,813,624\n193,-642,-381,-560,545,398\n711,28,-316,771,717,-865\n-509,462,809,-136,786,635\n618,-49,484,169,635,547\n-747,685,-882,-496,-332,82\n-501,-851,870,563,290,570\n-279,-829,-509,397,457,816\n-508,80,850,-188,483,-326\n860,-100,360,119,-205,787\n-870,21,-39,-827,-185,932\n826,284,-136,-866,-330,-97\n-944,-82,745,899,-97,365\n929,262,564,632,-115,632\n244,-276,713,330,-897,-214\n-890,-109,664,876,-974,-907\n716,249,816,489,723,141\n-96,-560,-272,45,-70,645\n762,-503,414,-828,-254,-646\n909,-13,903,-422,-344,-10\n658,-486,743,545,50,674\n-241,507,-367,18,-48,-241\n886,-268,884,-762,120,-486\n-412,-528,879,-647,223,-393\n851,810,234,937,-726,797\n-999,942,839,-134,-996,-189\n100,979,-527,-521,378,800\n544,-844,-832,-530,-77,-641\n43,889,31,442,-934,-503\n-330,-370,-309,-439,173,547\n169,945,62,-753,-542,-597\n208,751,-372,-647,-520,70\n765,-840,907,-257,379,918\n334,-135,-689,730,-427,618\n137,-508,66,-695,78,169\n-962,-123,400,-417,151,969\n328,689,666,427,-555,-642\n-907,343,605,-341,-647,582\n-667,-363,-571,818,-265,-399\n525,-938,904,898,725,692\n-176,-802,-858,-9,780,275\n580,170,-740,287,691,-97\n365,557,-375,361,-288,859\n193,737,842,-808,520,282\n-871,65,-799,836,179,-720\n958,-144,744,-789,797,-48\n122,582,662,912,68,757\n595,241,-801,513,388,186\n-103,-677,-259,-731,-281,-857\n921,319,-696,683,-88,-997\n775,200,78,858,648,768\n316,821,-763,68,-290,-741\n564,664,691,504,760,787\n694,-119,973,-385,309,-760\n777,-947,-57,990,74,19\n971,626,-496,-781,-602,-239\n-651,433,11,-339,939,294\n-965,-728,560,569,-708,-247\n"
  },
  {
    "path": "project_euler/problem_102/sol1.py",
    "content": "\"\"\"\nThree distinct points are plotted at random on a Cartesian plane,\nfor which -1000 ≤ x, y ≤ 1000, such that a triangle is formed.\n\nConsider the following two triangles:\n\nA(-340,495), B(-153,-910), C(835,-947)\n\nX(-175,41), Y(-421,-714), Z(574,-645)\n\nIt can be verified that triangle ABC contains the origin, whereas\ntriangle XYZ does not.\n\nUsing triangles.txt (right click and 'Save Link/Target As...'), a 27K text\nfile containing the coordinates of one thousand \"random\" triangles, find\nthe number of triangles for which the interior contains the origin.\n\nNOTE: The first two examples in the file represent the triangles in the\nexample given above.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom pathlib import Path\n\n\ndef vector_product(point1: tuple[int, int], point2: tuple[int, int]) -> int:\n    \"\"\"\n    Return the 2-d vector product of two vectors.\n    >>> vector_product((1, 2), (-5, 0))\n    10\n    >>> vector_product((3, 1), (6, 10))\n    24\n    \"\"\"\n    return point1[0] * point2[1] - point1[1] * point2[0]\n\n\ndef contains_origin(x1: int, y1: int, x2: int, y2: int, x3: int, y3: int) -> bool:\n    \"\"\"\n    Check if the triangle given by the points A(x1, y1), B(x2, y2), C(x3, y3)\n    contains the origin.\n    >>> contains_origin(-340, 495, -153, -910, 835, -947)\n    True\n    >>> contains_origin(-175, 41, -421, -714, 574, -645)\n    False\n    \"\"\"\n    point_a: tuple[int, int] = (x1, y1)\n    point_a_to_b: tuple[int, int] = (x2 - x1, y2 - y1)\n    point_a_to_c: tuple[int, int] = (x3 - x1, y3 - y1)\n    a: float = -vector_product(point_a, point_a_to_b) / vector_product(\n        point_a_to_c, point_a_to_b\n    )\n    b: float = +vector_product(point_a, point_a_to_c) / vector_product(\n        point_a_to_c, point_a_to_b\n    )\n\n    return a > 0 and b > 0 and a + b < 1\n\n\ndef solution(filename: str = \"p102_triangles.txt\") -> int:\n    \"\"\"\n    Find the number of triangles whose interior contains the origin.\n    >>> solution(\"test_triangles.txt\")\n    1\n    \"\"\"\n    data: str = Path(__file__).parent.joinpath(filename).read_text(encoding=\"utf-8\")\n\n    triangles: list[list[int]] = []\n    for line in data.strip().split(\"\\n\"):\n        triangles.append([int(number) for number in line.split(\",\")])\n\n    ret: int = 0\n    triangle: list[int]\n\n    for triangle in triangles:\n        ret += contains_origin(*triangle)\n\n    return ret\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_102/test_triangles.txt",
    "content": "-340,495,-153,-910,835,-947\n-175,41,-421,-714,574,-645\n"
  },
  {
    "path": "project_euler/problem_104/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_104/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 104 : https://projecteuler.net/problem=104\n\nThe Fibonacci sequence is defined by the recurrence relation:\n\nFn = Fn-1 + Fn-2, where F1 = 1 and F2 = 1.\nIt turns out that F541, which contains 113 digits, is the first Fibonacci number\nfor which the last nine digits are 1-9 pandigital (contain all the digits 1 to 9,\nbut not necessarily in order). And F2749, which contains 575 digits, is the first\nFibonacci number for which the first nine digits are 1-9 pandigital.\n\nGiven that Fk is the first Fibonacci number for which the first nine digits AND\nthe last nine digits are 1-9 pandigital, find k.\n\"\"\"\n\nimport sys\n\nsys.set_int_max_str_digits(0)\n\n\ndef check(number: int) -> bool:\n    \"\"\"\n    Takes a number and checks if it is pandigital both from start and end\n\n\n    >>> check(123456789987654321)\n    True\n\n    >>> check(120000987654321)\n    False\n\n    >>> check(1234567895765677987654321)\n    True\n\n    \"\"\"\n\n    check_last = [0] * 11\n    check_front = [0] * 11\n\n    # mark last 9 numbers\n    for _ in range(9):\n        check_last[int(number % 10)] = 1\n        number = number // 10\n    # flag\n    f = True\n\n    # check last 9 numbers for pandigitality\n\n    for x in range(9):\n        if not check_last[x + 1]:\n            f = False\n    if not f:\n        return f\n\n    # mark first 9 numbers\n    number = int(str(number)[:9])\n\n    for _ in range(9):\n        check_front[int(number % 10)] = 1\n        number = number // 10\n\n    # check first 9 numbers for pandigitality\n\n    for x in range(9):\n        if not check_front[x + 1]:\n            f = False\n    return f\n\n\ndef check1(number: int) -> bool:\n    \"\"\"\n    Takes a number and checks if it is pandigital from END\n\n    >>> check1(123456789987654321)\n    True\n\n    >>> check1(120000987654321)\n    True\n\n    >>> check1(12345678957656779870004321)\n    False\n\n    \"\"\"\n\n    check_last = [0] * 11\n\n    # mark last 9 numbers\n    for _ in range(9):\n        check_last[int(number % 10)] = 1\n        number = number // 10\n    # flag\n    f = True\n\n    # check last 9 numbers for pandigitality\n\n    for x in range(9):\n        if not check_last[x + 1]:\n            f = False\n    return f\n\n\ndef solution() -> int:\n    \"\"\"\n    Outputs the answer is the least Fibonacci number pandigital from both sides.\n    >>> solution()\n    329468\n    \"\"\"\n\n    a = 1\n    b = 1\n    c = 2\n    # temporary Fibonacci numbers\n\n    a1 = 1\n    b1 = 1\n    c1 = 2\n    # temporary Fibonacci numbers mod 1e9\n\n    # mod m=1e9, done for fast optimisation\n    tocheck = [0] * 1000000\n    m = 1000000000\n\n    for x in range(1000000):\n        c1 = (a1 + b1) % m\n        a1 = b1 % m\n        b1 = c1 % m\n        if check1(b1):\n            tocheck[x + 3] = 1\n\n    for x in range(1000000):\n        c = a + b\n        a = b\n        b = c\n        # perform check only if in tocheck\n        if tocheck[x + 3] and check(b):\n            return x + 3  # first 2 already done\n    return -1\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_107/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_107/p107_network.txt",
    "content": "-,-,-,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\n-,-,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\n-,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\n427,-,-,-,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\n668,-,926,366,-,-,-,250,268,-,503,944,-,677,-,727,793,457,981,191,-,-,-,351,969,925,987,328,282,589,-,873,477,-,-,19,450,-,-,-\n495,508,-,-,-,-,-,765,711,819,305,302,926,-,-,582,-,861,-,683,293,-,-,66,-,27,-,-,290,-,786,-,554,817,33,-,54,506,386,381\n377,472,958,-,-,-,-,-,-,120,42,-,134,219,457,639,538,374,-,-,-,966,-,-,-,-,-,449,120,797,358,232,550,-,305,997,662,744,686,239\n678,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\n-,-,647,-,268,711,-,-,-,283,-,172,-,663,236,36,403,286,986,-,-,810,761,574,53,793,-,-,777,330,936,883,286,-,174,-,-,-,828,711\n177,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\n-,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\n-,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,-\n870,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,-\n-,143,-,854,677,-,219,652,663,36,-,-,313,-,132,-,433,598,-,-,168,870,-,-,-,128,437,-,383,364,966,227,-,-,807,993,-,-,526,17\n869,-,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,-\n624,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,-\n300,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\n609,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,-\n131,-,252,258,981,-,-,605,986,565,154,266,248,-,613,664,73,-,-,686,-,-,575,627,817,282,-,698,398,222,-,649,-,-,-,-,-,654,-,-\n-,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\n251,802,264,760,-,293,-,-,-,-,474,-,-,168,-,542,318,136,-,-,-,-,392,-,-,-,267,407,27,651,80,927,-,974,977,-,-,457,117,-\n-,941,637,909,-,-,966,-,810,103,650,104,826,870,261,-,-,399,-,389,-,-,-,202,-,-,-,-,867,140,403,962,785,-,511,-,1,-,707,-\n-,922,349,529,-,-,-,-,761,810,402,867,359,-,-,999,-,-,575,729,392,-,-,388,939,-,959,-,83,463,361,-,-,512,931,-,224,690,369,-\n-,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,-\n856,531,-,404,969,-,-,-,53,733,-,-,-,-,379,-,-,707,817,304,-,-,939,164,-,-,616,716,728,-,889,349,-,963,150,447,-,292,586,264\n221,539,-,-,925,27,-,712,793,665,-,270,234,128,885,-,968,156,282,703,-,-,-,829,-,-,-,822,-,-,-,736,576,-,697,946,443,-,205,194\n514,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\n-,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\n591,-,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,-,-\n762,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\n182,-,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\n56,-,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,-\n-,315,-,-,477,554,550,-,286,342,932,250,814,-,900,193,504,-,-,351,-,785,-,-,-,576,102,779,341,723,302,474,-,689,-,-,-,451,-,-\n884,649,898,409,-,817,-,901,-,470,7,686,218,-,-,-,757,-,-,477,974,-,512,490,963,-,790,-,384,-,676,178,689,-,245,596,445,-,-,343\n412,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\n273,-,-,221,19,-,997,-,-,-,823,366,-,993,818,-,542,501,-,-,-,-,-,695,447,946,-,880,992,186,-,-,-,596,949,-,91,-,768,273\n636,185,575,-,450,54,662,225,-,-,391,191,-,-,639,390,-,-,-,-,-,1,224,-,-,443,439,116,507,-,327,-,-,445,-,91,-,248,-,344\n-,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\n-,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\n774,289,833,257,-,381,239,722,711,468,933,-,-,17,-,-,148,-,-,853,-,-,-,-,264,194,260,947,-,752,147,-,-,343,112,273,344,680,540,-\n"
  },
  {
    "path": "project_euler/problem_107/sol1.py",
    "content": "\"\"\"\nThe following undirected network consists of seven vertices and twelve edges\nwith a total weight of 243.\n￼\nThe same network can be represented by the matrix below.\n\n    A   B   C   D   E   F   G\nA   -   16  12  21  -   -   -\nB   16  -   -   17  20  -   -\nC   12  -   -   28  -   31  -\nD   21  17  28  -   18  19  23\nE   -   20  -   18  -   -   11\nF   -   -   31  19  -   -   27\nG   -   -   -   23  11  27  -\n\nHowever, it is possible to optimise the network by removing some edges and still\nensure that all points on the network remain connected. The network which achieves\nthe maximum saving is shown below. It has a weight of 93, representing a saving of\n243 - 93 = 150 from the original network.\n\nUsing network.txt (right click and 'Save Link/Target As...'), a 6K text file\ncontaining a network with forty vertices, and given in matrix form, find the maximum\nsaving which can be achieved by removing redundant edges whilst ensuring that the\nnetwork remains connected.\n\nSolution:\n    We use Prim's algorithm to find a Minimum Spanning Tree.\n    Reference: https://en.wikipedia.org/wiki/Prim%27s_algorithm\n\"\"\"\n\nfrom __future__ import annotations\n\nimport os\nfrom collections.abc import Mapping\n\nEdgeT = tuple[int, int]\n\n\nclass Graph:\n    \"\"\"\n    A class representing an undirected weighted graph.\n    \"\"\"\n\n    def __init__(self, vertices: set[int], edges: Mapping[EdgeT, int]) -> None:\n        self.vertices: set[int] = vertices\n        self.edges: dict[EdgeT, int] = {\n            (min(edge), max(edge)): weight for edge, weight in edges.items()\n        }\n\n    def add_edge(self, edge: EdgeT, weight: int) -> None:\n        \"\"\"\n        Add a new edge to the graph.\n        >>> graph = Graph({1, 2}, {(2, 1): 4})\n        >>> graph.add_edge((3, 1), 5)\n        >>> sorted(graph.vertices)\n        [1, 2, 3]\n        >>> sorted([(v,k) for k,v in graph.edges.items()])\n        [(4, (1, 2)), (5, (1, 3))]\n        \"\"\"\n        self.vertices.add(edge[0])\n        self.vertices.add(edge[1])\n        self.edges[(min(edge), max(edge))] = weight\n\n    def prims_algorithm(self) -> Graph:\n        \"\"\"\n        Run Prim's algorithm to find the minimum spanning tree.\n        Reference: https://en.wikipedia.org/wiki/Prim%27s_algorithm\n        >>> graph = Graph({1,2,3,4},{(1,2):5, (1,3):10, (1,4):20, (2,4):30, (3,4):1})\n        >>> mst = graph.prims_algorithm()\n        >>> sorted(mst.vertices)\n        [1, 2, 3, 4]\n        >>> sorted(mst.edges)\n        [(1, 2), (1, 3), (3, 4)]\n        \"\"\"\n        subgraph: Graph = Graph({min(self.vertices)}, {})\n        min_edge: EdgeT\n        min_weight: int\n        edge: EdgeT\n        weight: int\n\n        while len(subgraph.vertices) < len(self.vertices):\n            min_weight = max(self.edges.values()) + 1\n            for edge, weight in self.edges.items():\n                if (edge[0] in subgraph.vertices) ^ (\n                    edge[1] in subgraph.vertices\n                ) and weight < min_weight:\n                    min_edge = edge\n                    min_weight = weight\n\n            subgraph.add_edge(min_edge, min_weight)\n\n        return subgraph\n\n\ndef solution(filename: str = \"p107_network.txt\") -> int:\n    \"\"\"\n    Find the maximum saving which can be achieved by removing redundant edges\n    whilst ensuring that the network remains connected.\n    >>> solution(\"test_network.txt\")\n    150\n    \"\"\"\n    script_dir: str = os.path.abspath(os.path.dirname(__file__))\n    network_file: str = os.path.join(script_dir, filename)\n    edges: dict[EdgeT, int] = {}\n    data: list[str]\n    edge1: int\n    edge2: int\n\n    with open(network_file) as f:\n        data = f.read().strip().split(\"\\n\")\n\n    adjaceny_matrix = [line.split(\",\") for line in data]\n\n    for edge1 in range(1, len(adjaceny_matrix)):\n        for edge2 in range(edge1):\n            if adjaceny_matrix[edge1][edge2] != \"-\":\n                edges[(edge2, edge1)] = int(adjaceny_matrix[edge1][edge2])\n\n    graph: Graph = Graph(set(range(len(adjaceny_matrix))), edges)\n\n    subgraph: Graph = graph.prims_algorithm()\n\n    initial_total: int = sum(graph.edges.values())\n    optimal_total: int = sum(subgraph.edges.values())\n\n    return initial_total - optimal_total\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_107/test_network.txt",
    "content": "-,16,12,21,-,-,-\n16,-,-,17,20,-,-\n12,-,-,28,-,31,-\n21,17,28,-,18,19,23\n-,20,-,18,-,-,11\n-,-,31,19,-,-,27\n-,-,-,23,11,27,-\n"
  },
  {
    "path": "project_euler/problem_109/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_109/sol1.py",
    "content": "\"\"\"\nIn the game of darts a player throws three darts at a target board which is\nsplit into twenty equal sized sections numbered one to twenty.\n￼\nThe score of a dart is determined by the number of the region that the dart\nlands in. A dart landing outside the red/green outer ring scores zero. The black\nand cream regions inside this ring represent single scores. However, the red/green\nouter ring and middle ring score double and treble scores respectively.\n\nAt the centre of the board are two concentric circles called the bull region, or\nbulls-eye. The outer bull is worth 25 points and the inner bull is a double,\nworth 50 points.\n\nThere are many variations of rules but in the most popular game the players will\nbegin with a score 301 or 501 and the first player to reduce their running total\nto zero is a winner. However, it is normal to play a \"doubles out\" system, which\nmeans that the player must land a double (including the double bulls-eye at the\ncentre of the board) on their final dart to win; any other dart that would reduce\ntheir running total to one or lower means the score for that set of three darts\nis \"bust\".\n\nWhen a player is able to finish on their current score it is called a \"checkout\"\nand the highest checkout is 170: T20 T20 D25 (two treble 20s and double bull).\n\nThere are exactly eleven distinct ways to checkout on a score of 6:\n\nD3\nD1  D2\nS2  D2\nD2  D1\nS4  D1\nS1  S1  D2\nS1  T1  D1\nS1  S3  D1\nD1  D1  D1\nD1  S2  D1\nS2  S2  D1\n\nNote that D1 D2 is considered different to D2 D1 as they finish on different\ndoubles. However, the combination S1 T1 D1 is considered the same as T1 S1 D1.\n\nIn addition we shall not include misses in considering combinations; for example,\nD3 is the same as 0 D3 and 0 0 D3.\n\nIncredibly there are 42336 distinct ways of checking out in total.\n\nHow many distinct ways can a player checkout with a score less than 100?\n\nSolution:\n    We first construct a list of the possible dart values, separated by type.\n    We then iterate through the doubles, followed by the possible 2 following throws.\n    If the total of these three darts is less than the given limit, we increment\n    the counter.\n\"\"\"\n\nfrom itertools import combinations_with_replacement\n\n\ndef solution(limit: int = 100) -> int:\n    \"\"\"\n    Count the number of distinct ways a player can checkout with a score\n    less than limit.\n    >>> solution(171)\n    42336\n    >>> solution(50)\n    12577\n    \"\"\"\n    singles: list[int] = [*list(range(1, 21)), 25]\n    doubles: list[int] = [2 * x for x in range(1, 21)] + [50]\n    triples: list[int] = [3 * x for x in range(1, 21)]\n    all_values: list[int] = singles + doubles + triples + [0]\n\n    num_checkouts: int = 0\n    double: int\n    throw1: int\n    throw2: int\n    checkout_total: int\n\n    for double in doubles:\n        for throw1, throw2 in combinations_with_replacement(all_values, 2):\n            checkout_total = double + throw1 + throw2\n            if checkout_total < limit:\n                num_checkouts += 1\n\n    return num_checkouts\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_112/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_112/sol1.py",
    "content": "\"\"\"\r\nProblem 112: https://projecteuler.net/problem=112\r\n\r\nWorking from left-to-right if no digit is exceeded by the digit to its left it is\r\ncalled an increasing number; for example, 134468.\r\nSimilarly if no digit is exceeded by the digit to its right it is called a decreasing\r\nnumber; for example, 66420.\r\nWe shall call a positive integer that is neither increasing nor decreasing a \"bouncy\"\r\nnumber, for example, 155349.\r\nClearly there cannot be any bouncy numbers below one-hundred, but just over half of\r\nthe numbers below one-thousand (525) are bouncy. In fact, the least number for which\r\nthe proportion of bouncy numbers first reaches 50% is 538.\r\nSurprisingly, bouncy numbers become more and more common and by the time we reach\r\n21780 the proportion of bouncy numbers is equal to 90%.\r\n\r\nFind the least number for which the proportion of bouncy numbers is exactly 99%.\r\n\"\"\"\r\n\r\n\r\ndef check_bouncy(n: int) -> bool:\r\n    \"\"\"\r\n    Returns True if number is bouncy, False otherwise\r\n    >>> check_bouncy(6789)\r\n    False\r\n    >>> check_bouncy(-12345)\r\n    False\r\n    >>> check_bouncy(0)\r\n    False\r\n    >>> check_bouncy(6.74)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: check_bouncy() accepts only integer arguments\r\n    >>> check_bouncy(132475)\r\n    True\r\n    >>> check_bouncy(34)\r\n    False\r\n    >>> check_bouncy(341)\r\n    True\r\n    >>> check_bouncy(47)\r\n    False\r\n    >>> check_bouncy(-12.54)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: check_bouncy() accepts only integer arguments\r\n    >>> check_bouncy(-6548)\r\n    True\r\n    \"\"\"\r\n    if not isinstance(n, int):\r\n        raise ValueError(\"check_bouncy() accepts only integer arguments\")\r\n    str_n = str(n)\r\n    sorted_str_n = \"\".join(sorted(str_n))\r\n    return str_n not in {sorted_str_n, sorted_str_n[::-1]}\r\n\r\n\r\ndef solution(percent: float = 99) -> int:\r\n    \"\"\"\r\n    Returns the least number for which the proportion of bouncy numbers is\r\n    exactly 'percent'\r\n    >>> solution(50)\r\n    538\r\n    >>> solution(90)\r\n    21780\r\n    >>> solution(80)\r\n    4770\r\n    >>> solution(105)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: solution() only accepts values from 0 to 100\r\n    >>> solution(100.011)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: solution() only accepts values from 0 to 100\r\n    \"\"\"\r\n    if not 0 < percent < 100:\r\n        raise ValueError(\"solution() only accepts values from 0 to 100\")\r\n    bouncy_num = 0\r\n    num = 1\r\n\r\n    while True:\r\n        if check_bouncy(num):\r\n            bouncy_num += 1\r\n        if (bouncy_num / num) * 100 >= percent:\r\n            return num\r\n        num += 1\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    from doctest import testmod\r\n\r\n    testmod()\r\n    print(f\"{solution(99)}\")\r\n"
  },
  {
    "path": "project_euler/problem_113/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_113/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 113: https://projecteuler.net/problem=113\n\nWorking from left-to-right if no digit is exceeded by the digit to its left it is\ncalled an increasing number; for example, 134468.\n\nSimilarly if no digit is exceeded by the digit to its right it is called a decreasing\nnumber; for example, 66420.\n\nWe shall call a positive integer that is neither increasing nor decreasing a\n\"bouncy\" number; for example, 155349.\n\nAs n increases, the proportion of bouncy numbers below n increases such that there\nare only 12951 numbers below one-million that are not bouncy and only 277032\nnon-bouncy numbers below 10^10.\n\nHow many numbers below a googol (10^100) are not bouncy?\n\"\"\"\n\n\ndef choose(n: int, r: int) -> int:\n    \"\"\"\n    Calculate the binomial coefficient c(n,r) using the multiplicative formula.\n    >>> choose(4,2)\n    6\n    >>> choose(5,3)\n    10\n    >>> choose(20,6)\n    38760\n    \"\"\"\n    ret = 1.0\n    for i in range(1, r + 1):\n        ret *= (n + 1 - i) / i\n    return round(ret)\n\n\ndef non_bouncy_exact(n: int) -> int:\n    \"\"\"\n    Calculate the number of non-bouncy numbers with at most n digits.\n    >>> non_bouncy_exact(1)\n    9\n    >>> non_bouncy_exact(6)\n    7998\n    >>> non_bouncy_exact(10)\n    136126\n    \"\"\"\n    return choose(8 + n, n) + choose(9 + n, n) - 10\n\n\ndef non_bouncy_upto(n: int) -> int:\n    \"\"\"\n    Calculate the number of non-bouncy numbers with at most n digits.\n    >>> non_bouncy_upto(1)\n    9\n    >>> non_bouncy_upto(6)\n    12951\n    >>> non_bouncy_upto(10)\n    277032\n    \"\"\"\n    return sum(non_bouncy_exact(i) for i in range(1, n + 1))\n\n\ndef solution(num_digits: int = 100) -> int:\n    \"\"\"\n    Calculate the number of non-bouncy numbers less than a googol.\n    >>> solution(6)\n    12951\n    >>> solution(10)\n    277032\n    \"\"\"\n    return non_bouncy_upto(num_digits)\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_114/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_114/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 114: https://projecteuler.net/problem=114\n\nA row measuring seven units in length has red blocks with a minimum length\nof three units placed on it, such that any two red blocks\n(which are allowed to be different lengths) are separated by at least one grey square.\nThere are exactly seventeen ways of doing this.\n\n    |g|g|g|g|g|g|g|    |r,r,r|g|g|g|g|\n\n    |g|r,r,r|g|g|g|    |g|g|r,r,r|g|g|\n\n    |g|g|g|r,r,r|g|    |g|g|g|g|r,r,r|\n\n    |r,r,r|g|r,r,r|    |r,r,r,r|g|g|g|\n\n    |g|r,r,r,r|g|g|    |g|g|r,r,r,r|g|\n\n    |g|g|g|r,r,r,r|    |r,r,r,r,r|g|g|\n\n    |g|r,r,r,r,r|g|    |g|g|r,r,r,r,r|\n\n    |r,r,r,r,r,r|g|    |g|r,r,r,r,r,r|\n\n    |r,r,r,r,r,r,r|\n\nHow many ways can a row measuring fifty units in length be filled?\n\nNOTE: Although the example above does not lend itself to the possibility,\nin general it is permitted to mix block sizes. For example,\non a row measuring eight units in length you could use red (3), grey (1), and red (4).\n\"\"\"\n\n\ndef solution(length: int = 50) -> int:\n    \"\"\"\n    Returns the number of ways a row of the given length can be filled\n\n    >>> solution(7)\n    17\n    \"\"\"\n\n    ways_number = [1] * (length + 1)\n\n    for row_length in range(3, length + 1):\n        for block_length in range(3, row_length + 1):\n            for block_start in range(row_length - block_length):\n                ways_number[row_length] += ways_number[\n                    row_length - block_start - block_length - 1\n                ]\n\n            ways_number[row_length] += 1\n\n    return ways_number[length]\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_115/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_115/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 115: https://projecteuler.net/problem=115\n\nNOTE: This is a more difficult version of Problem 114\n(https://projecteuler.net/problem=114).\n\nA row measuring n units in length has red blocks\nwith a minimum length of m units placed on it, such that any two red blocks\n(which are allowed to be different lengths) are separated by at least one black square.\n\nLet the fill-count function, F(m, n),\nrepresent the number of ways that a row can be filled.\n\nFor example, F(3, 29) = 673135 and F(3, 30) = 1089155.\n\nThat is, for m = 3, it can be seen that n = 30 is the smallest value\nfor which the fill-count function first exceeds one million.\n\nIn the same way, for m = 10, it can be verified that\nF(10, 56) = 880711 and F(10, 57) = 1148904, so n = 57 is the least value\nfor which the fill-count function first exceeds one million.\n\nFor m = 50, find the least value of n\nfor which the fill-count function first exceeds one million.\n\"\"\"\n\nfrom itertools import count\n\n\ndef solution(min_block_length: int = 50) -> int:\n    \"\"\"\n    Returns for given minimum block length the least value of n\n    for which the fill-count function first exceeds one million\n\n    >>> solution(3)\n    30\n\n    >>> solution(10)\n    57\n    \"\"\"\n\n    fill_count_functions = [1] * min_block_length\n\n    for n in count(min_block_length):\n        fill_count_functions.append(1)\n\n        for block_length in range(min_block_length, n + 1):\n            for block_start in range(n - block_length):\n                fill_count_functions[n] += fill_count_functions[\n                    n - block_start - block_length - 1\n                ]\n\n            fill_count_functions[n] += 1\n\n        if fill_count_functions[n] > 1_000_000:\n            break\n\n    return n\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_116/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_116/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 116: https://projecteuler.net/problem=116\n\nA row of five grey square tiles is to have a number of its tiles\nreplaced with coloured oblong tiles chosen\nfrom red (length two), green (length three), or blue (length four).\n\nIf red tiles are chosen there are exactly seven ways this can be done.\n\n    |red,red|grey|grey|grey|    |grey|red,red|grey|grey|\n\n    |grey|grey|red,red|grey|    |grey|grey|grey|red,red|\n\n    |red,red|red,red|grey|      |red,red|grey|red,red|\n\n    |grey|red,red|red,red|\n\nIf green tiles are chosen there are three ways.\n\n    |green,green,green|grey|grey|    |grey|green,green,green|grey|\n\n    |grey|grey|green,green,green|\n\nAnd if blue tiles are chosen there are two ways.\n\n    |blue,blue,blue,blue|grey|    |grey|blue,blue,blue,blue|\n\nAssuming that colours cannot be mixed there are 7 + 3 + 2 = 12 ways\nof replacing the grey tiles in a row measuring five units in length.\n\nHow many different ways can the grey tiles in a row measuring fifty units in length\nbe replaced if colours cannot be mixed and at least one coloured tile must be used?\n\nNOTE: This is related to Problem 117 (https://projecteuler.net/problem=117).\n\"\"\"\n\n\ndef solution(length: int = 50) -> int:\n    \"\"\"\n    Returns the number of different ways can the grey tiles in a row\n    of the given length be replaced if colours cannot be mixed\n    and at least one coloured tile must be used\n\n    >>> solution(5)\n    12\n    \"\"\"\n\n    different_colour_ways_number = [[0] * 3 for _ in range(length + 1)]\n\n    for row_length in range(length + 1):\n        for tile_length in range(2, 5):\n            for tile_start in range(row_length - tile_length + 1):\n                different_colour_ways_number[row_length][tile_length - 2] += (\n                    different_colour_ways_number[row_length - tile_start - tile_length][\n                        tile_length - 2\n                    ]\n                    + 1\n                )\n\n    return sum(different_colour_ways_number[length])\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_117/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_117/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 117: https://projecteuler.net/problem=117\n\nUsing a combination of grey square tiles and oblong tiles chosen from:\nred tiles (measuring two units), green tiles (measuring three units),\nand blue tiles (measuring four units),\nit is possible to tile a row measuring five units in length\nin exactly fifteen different ways.\n\n    |grey|grey|grey|grey|grey|       |red,red|grey|grey|grey|\n\n    |grey|red,red|grey|grey|         |grey|grey|red,red|grey|\n\n    |grey|grey|grey|red,red|         |red,red|red,red|grey|\n\n    |red,red|grey|red,red|           |grey|red,red|red,red|\n\n    |green,green,green|grey|grey|    |grey|green,green,green|grey|\n\n    |grey|grey|green,green,green|    |red,red|green,green,green|\n\n    |green,green,green|red,red|      |blue,blue,blue,blue|grey|\n\n    |grey|blue,blue,blue,blue|\n\nHow many ways can a row measuring fifty units in length be tiled?\n\nNOTE: This is related to Problem 116 (https://projecteuler.net/problem=116).\n\"\"\"\n\n\ndef solution(length: int = 50) -> int:\n    \"\"\"\n    Returns the number of ways can a row of the given length be tiled\n\n    >>> solution(5)\n    15\n    \"\"\"\n\n    ways_number = [1] * (length + 1)\n\n    for row_length in range(length + 1):\n        for tile_length in range(2, 5):\n            for tile_start in range(row_length - tile_length + 1):\n                ways_number[row_length] += ways_number[\n                    row_length - tile_start - tile_length\n                ]\n\n    return ways_number[length]\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_119/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_119/sol1.py",
    "content": "\"\"\"\nProblem 119: https://projecteuler.net/problem=119\n\nName: Digit power sum\n\nThe number 512 is interesting because it is equal to the sum of its digits\nraised to some power: 5 + 1 + 2 = 8, and 8^3 = 512. Another example of a number\nwith this property is 614656 = 28^4. We shall define an to be the nth term of\nthis sequence and insist that a number must contain at least two digits to have a sum.\nYou are given that a2 = 512 and a10 = 614656. Find a30\n\"\"\"\n\nimport math\n\n\ndef digit_sum(n: int) -> int:\n    \"\"\"\n    Returns the sum of the digits of the number.\n    >>> digit_sum(123)\n    6\n    >>> digit_sum(456)\n    15\n    >>> digit_sum(78910)\n    25\n    \"\"\"\n    return sum(int(digit) for digit in str(n))\n\n\ndef solution(n: int = 30) -> int:\n    \"\"\"\n    Returns the value of 30th digit power sum.\n    >>> solution(2)\n    512\n    >>> solution(5)\n    5832\n    >>> solution(10)\n    614656\n    \"\"\"\n    digit_to_powers = []\n    for digit in range(2, 100):\n        for power in range(2, 100):\n            number = int(math.pow(digit, power))\n            if digit == digit_sum(number):\n                digit_to_powers.append(number)\n\n    digit_to_powers.sort()\n    return digit_to_powers[n - 1]\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_120/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_120/sol1.py",
    "content": "\"\"\"\nProblem 120 Square remainders: https://projecteuler.net/problem=120\n\nDescription:\n\nLet r be the remainder when (a-1)^n + (a+1)^n is divided by a^2.\nFor example, if a = 7 and n = 3, then r = 42: 6^3 + 8^3 = 728 ≡ 42 mod 49.\nAnd as n varies, so too will r, but for a = 7 it turns out that r_max = 42.\nFor 3 ≤ a ≤ 1000, find ∑ r_max.\n\nSolution:\n\nOn expanding the terms, we get 2 if n is even and 2an if n is odd.\nFor maximizing the value, 2an < a*a => n <= (a - 1)/2 (integer division)\n\"\"\"\n\n\ndef solution(n: int = 1000) -> int:\n    \"\"\"\n    Returns ∑ r_max for 3 <= a <= n as explained above\n    >>> solution(10)\n    300\n    >>> solution(100)\n    330750\n    >>> solution(1000)\n    333082500\n    \"\"\"\n    return sum(2 * a * ((a - 1) // 2) for a in range(3, n + 1))\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_121/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_121/sol1.py",
    "content": "\"\"\"\nA bag contains one red disc and one blue disc. In a game of chance a player takes a\ndisc at random and its colour is noted. After each turn the disc is returned to the\nbag, an extra red disc is added, and another disc is taken at random.\n\nThe player pays £1 to play and wins if they have taken more blue discs than red\ndiscs at the end of the game.\n\nIf the game is played for four turns, the probability of a player winning is exactly\n11/120, and so the maximum prize fund the banker should allocate for winning in this\ngame would be £10 before they would expect to incur a loss. Note that any payout will\nbe a whole number of pounds and also includes the original £1 paid to play the game,\nso in the example given the player actually wins £9.\n\nFind the maximum prize fund that should be allocated to a single game in which\nfifteen turns are played.\n\n\nSolution:\n    For each 15-disc sequence of red and blue for which there are more red than blue,\n    we calculate the probability of that sequence and add it to the total probability\n    of the player winning. The inverse of this probability gives an upper bound for\n    the prize if the banker wants to avoid an expected loss.\n\"\"\"\n\nfrom itertools import product\n\n\ndef solution(num_turns: int = 15) -> int:\n    \"\"\"\n    Find the maximum prize fund that should be allocated to a single game in which\n    fifteen turns are played.\n    >>> solution(4)\n    10\n    >>> solution(10)\n    225\n    \"\"\"\n    total_prob: float = 0.0\n    prob: float\n    num_blue: int\n    num_red: int\n    ind: int\n    col: int\n    series: tuple[int, ...]\n\n    for series in product(range(2), repeat=num_turns):\n        num_blue = series.count(1)\n        num_red = num_turns - num_blue\n        if num_red >= num_blue:\n            continue\n        prob = 1.0\n        for ind, col in enumerate(series, 2):\n            if col == 0:\n                prob *= (ind - 1) / ind\n            else:\n                prob *= 1 / ind\n\n        total_prob += prob\n\n    return int(1 / total_prob)\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_122/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_122/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 122: https://projecteuler.net/problem=122\n\nEfficient Exponentiation\n\nThe most naive way of computing n^15 requires fourteen multiplications:\n\n                                               n x n x ... x n = n^15.\n\nBut using a \"binary\" method you can compute it in six multiplications:\n\n                                                         n x n = n^2\n                                                     n^2 x n^2 = n^4\n                                                     n^4 x n^4 = n^8\n                                                     n^8 x n^4 = n^12\n                                                    n^12 x n^2 = n^14\n                                                      n^14 x n = n^15\n\nHowever it is yet possible to compute it in only five multiplications:\n\n                                                                n x n = n^2\n                                                              n^2 x n = n^3\n                                                            n^3 x n^3 = n^6\n                                                            n^6 x n^6 = n^12\n                                                           n^12 x n^3 = n^15\n\nWe shall define m(k) to be the minimum number of multiplications to compute n^k;\nfor example m(15) = 5.\n\nFind sum_{k = 1}^200 m(k).\n\nIt uses the fact that for rather small n, applicable for this problem, the solution\nfor each number can be formed by increasing the largest element.\n\nReferences:\n- https://en.wikipedia.org/wiki/Addition_chain\n\"\"\"\n\n\ndef solve(nums: list[int], goal: int, depth: int) -> bool:\n    \"\"\"\n    Checks if nums can have a sum equal to goal, given that length of nums does\n    not exceed depth.\n\n    >>> solve([1], 2, 2)\n    True\n    >>> solve([1], 2, 0)\n    False\n    \"\"\"\n    if len(nums) > depth:\n        return False\n    for el in nums:\n        if el + nums[-1] == goal:\n            return True\n        nums.append(el + nums[-1])\n        if solve(nums=nums, goal=goal, depth=depth):\n            return True\n        del nums[-1]\n    return False\n\n\ndef solution(n: int = 200) -> int:\n    \"\"\"\n    Calculates sum of smallest number of multiplactions for each number up to\n    and including n.\n\n    >>> solution(1)\n    0\n    >>> solution(2)\n    1\n    >>> solution(14)\n    45\n    >>> solution(15)\n    50\n    \"\"\"\n    total = 0\n    for i in range(2, n + 1):\n        max_length = 0\n        while True:\n            nums = [1]\n            max_length += 1\n            if solve(nums=nums, goal=i, depth=max_length):\n                break\n        total += max_length\n    return total\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_123/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_123/sol1.py",
    "content": "\"\"\"\nProblem 123: https://projecteuler.net/problem=123\n\nName: Prime square remainders\n\nLet pn be the nth prime: 2, 3, 5, 7, 11, ..., and\nlet r be the remainder when (pn-1)^n + (pn+1)^n is divided by pn^2.\n\nFor example, when n = 3, p3 = 5, and 43 + 63 = 280 ≡ 5 mod 25.\nThe least value of n for which the remainder first exceeds 10^9 is 7037.\n\nFind the least value of n for which the remainder first exceeds 10^10.\n\n\nSolution:\n\nn=1: (p-1) + (p+1) = 2p\nn=2: (p-1)^2 + (p+1)^2\n     = p^2 + 1 - 2p + p^2 + 1 + 2p  (Using (p+b)^2 = (p^2 + b^2 + 2pb),\n                                           (p-b)^2 = (p^2 + b^2 - 2pb) and b = 1)\n     = 2p^2 + 2\nn=3: (p-1)^3 + (p+1)^3  (Similarly using (p+b)^3 & (p-b)^3 formula and so on)\n     = 2p^3 + 6p\nn=4: 2p^4 + 12p^2 + 2\nn=5: 2p^5 + 20p^3 + 10p\n\nAs you could see, when the expression is divided by p^2.\nExcept for the last term, the rest will result in the remainder 0.\n\nn=1: 2p\nn=2: 2\nn=3: 6p\nn=4: 2\nn=5: 10p\n\nSo it could be simplified as,\n    r = 2pn when n is odd\n    r = 2   when n is even.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections.abc import Generator\n\n\ndef sieve() -> Generator[int]:\n    \"\"\"\n    Returns a prime number generator using sieve method.\n    >>> type(sieve())\n    <class 'generator'>\n    >>> primes = sieve()\n    >>> next(primes)\n    2\n    >>> next(primes)\n    3\n    >>> next(primes)\n    5\n    >>> next(primes)\n    7\n    >>> next(primes)\n    11\n    >>> next(primes)\n    13\n    \"\"\"\n    factor_map: dict[int, int] = {}\n    prime = 2\n    while True:\n        factor = factor_map.pop(prime, None)\n        if factor:\n            x = factor + prime\n            while x in factor_map:\n                x += factor\n            factor_map[x] = factor\n        else:\n            factor_map[prime * prime] = prime\n            yield prime\n        prime += 1\n\n\ndef solution(limit: float = 1e10) -> int:\n    \"\"\"\n    Returns the least value of n for which the remainder first exceeds 10^10.\n    >>> solution(1e8)\n    2371\n    >>> solution(1e9)\n    7037\n    \"\"\"\n    primes = sieve()\n\n    n = 1\n    while True:\n        prime = next(primes)\n        if (2 * prime * n) > limit:\n            return n\n        # Ignore the next prime as the reminder will be 2.\n        next(primes)\n        n += 2\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_125/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_125/sol1.py",
    "content": "\"\"\"\nProblem 125: https://projecteuler.net/problem=125\n\nThe palindromic number 595 is interesting because it can be written as the sum\nof consecutive squares: 6^2 + 7^2 + 8^2 + 9^2 + 10^2 + 11^2 + 12^2.\n\nThere are exactly eleven palindromes below one-thousand that can be written as\nconsecutive square sums, and the sum of these palindromes is 4164. Note that\n1 = 0^2 + 1^2 has not been included as this problem is concerned with the\nsquares of positive integers.\n\nFind the sum of all the numbers less than 10^8 that are both palindromic and can\nbe written as the sum of consecutive squares.\n\"\"\"\n\nLIMIT = 10**8\n\n\ndef is_palindrome(n: int) -> bool:\n    \"\"\"\n    Check if an integer is palindromic.\n    >>> is_palindrome(12521)\n    True\n    >>> is_palindrome(12522)\n    False\n    >>> is_palindrome(12210)\n    False\n    \"\"\"\n    if n % 10 == 0:\n        return False\n    s = str(n)\n    return s == s[::-1]\n\n\ndef solution() -> int:\n    \"\"\"\n    Returns the sum of all numbers less than 1e8 that are both palindromic and\n    can be written as the sum of consecutive squares.\n    \"\"\"\n    answer = set()\n    first_square = 1\n    sum_squares = 5\n    while sum_squares < LIMIT:\n        last_square = first_square + 1\n        while sum_squares < LIMIT:\n            if is_palindrome(sum_squares):\n                answer.add(sum_squares)\n            last_square += 1\n            sum_squares += last_square**2\n        first_square += 1\n        sum_squares = first_square**2 + (first_square + 1) ** 2\n\n    return sum(answer)\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_129/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_129/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 129: https://projecteuler.net/problem=129\n\nA number consisting entirely of ones is called a repunit. We shall define R(k) to be\na repunit of length k; for example, R(6) = 111111.\n\nGiven that n is a positive integer and GCD(n, 10) = 1, it can be shown that there\nalways exists a value, k, for which R(k) is divisible by n, and let A(n) be the least\nsuch value of k; for example, A(7) = 6 and A(41) = 5.\n\nThe least value of n for which A(n) first exceeds ten is 17.\n\nFind the least value of n for which A(n) first exceeds one-million.\n\"\"\"\n\n\ndef least_divisible_repunit(divisor: int) -> int:\n    \"\"\"\n    Return the least value k such that the Repunit of length k is divisible by divisor.\n    >>> least_divisible_repunit(7)\n    6\n    >>> least_divisible_repunit(41)\n    5\n    >>> least_divisible_repunit(1234567)\n    34020\n    \"\"\"\n    if divisor % 5 == 0 or divisor % 2 == 0:\n        return 0\n    repunit = 1\n    repunit_index = 1\n    while repunit:\n        repunit = (10 * repunit + 1) % divisor\n        repunit_index += 1\n    return repunit_index\n\n\ndef solution(limit: int = 1000000) -> int:\n    \"\"\"\n    Return the least value of n for which least_divisible_repunit(n)\n    first exceeds limit.\n    >>> solution(10)\n    17\n    >>> solution(100)\n    109\n    >>> solution(1000)\n    1017\n    \"\"\"\n    divisor = limit - 1\n    if divisor % 2 == 0:\n        divisor += 1\n    while least_divisible_repunit(divisor) <= limit:\n        divisor += 2\n    return divisor\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_131/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_131/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 131: https://projecteuler.net/problem=131\n\nThere are some prime values, p, for which there exists a positive integer, n,\nsuch that the expression n^3 + n^2p is a perfect cube.\n\nFor example, when p = 19, 8^3 + 8^2 x 19 = 12^3.\n\nWhat is perhaps most surprising is that for each prime with this property\nthe value of n is unique, and there are only four such primes below one-hundred.\n\nHow many primes below one million have this remarkable property?\n\"\"\"\n\nfrom math import isqrt\n\n\ndef is_prime(number: int) -> bool:\n    \"\"\"\n    Determines whether number is prime\n\n    >>> is_prime(3)\n    True\n\n    >>> is_prime(4)\n    False\n    \"\"\"\n\n    return all(number % divisor != 0 for divisor in range(2, isqrt(number) + 1))\n\n\ndef solution(max_prime: int = 10**6) -> int:\n    \"\"\"\n    Returns number of primes below max_prime with the property\n\n    >>> solution(100)\n    4\n    \"\"\"\n\n    primes_count = 0\n    cube_index = 1\n    prime_candidate = 7\n    while prime_candidate < max_prime:\n        primes_count += is_prime(prime_candidate)\n\n        cube_index += 1\n        prime_candidate += 6 * cube_index\n\n    return primes_count\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_135/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_135/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 135: https://projecteuler.net/problem=135\n\nGiven the positive integers, x, y, and z, are consecutive terms of an arithmetic\nprogression, the least value of the positive integer, n, for which the equation,\nx2 - y2 - z2 = n, has exactly two solutions is n = 27:\n\n342 - 272 - 202 = 122 - 92 - 62 = 27\n\nIt turns out that n = 1155 is the least value which has exactly ten solutions.\n\nHow many values of n less than one million have exactly ten distinct solutions?\n\n\nTaking x, y, z of the form a + d, a, a - d respectively, the given equation reduces to\na * (4d - a) = n.\nCalculating no of solutions for every n till 1 million by fixing a, and n must be a\nmultiple of a. Total no of steps = n * (1/1 + 1/2 + 1/3 + 1/4 + ... + 1/n), so roughly\nO(nlogn) time complexity.\n\"\"\"\n\n\ndef solution(limit: int = 1000000) -> int:\n    \"\"\"\n    returns the values of n less than or equal to the limit\n    have exactly ten distinct solutions.\n    >>> solution(100)\n    0\n    >>> solution(10000)\n    45\n    >>> solution(50050)\n    292\n    \"\"\"\n    limit = limit + 1\n    frequency = [0] * limit\n    for first_term in range(1, limit):\n        for n in range(first_term, limit, first_term):\n            common_difference = first_term + n / first_term\n            if common_difference % 4:  # d must be divisible by 4\n                continue\n            else:\n                common_difference /= 4\n                if (\n                    first_term > common_difference\n                    and first_term < 4 * common_difference\n                ):  # since x, y, z are positive integers\n                    frequency[n] += 1  # so z > 0, a > d and 4d < a\n\n    count = sum(1 for x in frequency[1:limit] if x == 10)\n\n    return count\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_136/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_136/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 136: https://projecteuler.net/problem=136\n\nSingleton Difference\n\nThe positive integers, x, y, and z, are consecutive terms of an arithmetic progression.\nGiven that n is a positive integer, the equation, x^2 - y^2 - z^2 = n,\nhas exactly one solution when n = 20:\n                              13^2 - 10^2 - 7^2 = 20.\n\nIn fact there are twenty-five values of n below one hundred for which\nthe equation has a unique solution.\n\nHow many values of n less than fifty million have exactly one solution?\n\nBy change of variables\n\nx = y + delta\nz = y - delta\n\nThe expression can be rewritten:\n\nx^2 - y^2 - z^2 = y * (4 * delta - y) = n\n\nThe algorithm loops over delta and y, which is restricted in upper and lower limits,\nto count how many solutions each n has.\nIn the end it is counted how many n's have one solution.\n\"\"\"\n\n\ndef solution(n_limit: int = 50 * 10**6) -> int:\n    \"\"\"\n    Define n count list and loop over delta, y to get the counts, then check\n    which n has count == 1.\n\n    >>> solution(3)\n    0\n    >>> solution(10)\n    3\n    >>> solution(100)\n    25\n    >>> solution(110)\n    27\n    \"\"\"\n    n_sol = [0] * n_limit\n\n    for delta in range(1, (n_limit + 1) // 4 + 1):\n        for y in range(4 * delta - 1, delta, -1):\n            n = y * (4 * delta - y)\n            if n >= n_limit:\n                break\n            n_sol[n] += 1\n\n    ans = 0\n    for i in range(n_limit):\n        if n_sol[i] == 1:\n            ans += 1\n\n    return ans\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_144/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_144/sol1.py",
    "content": "\"\"\"\nIn laser physics, a \"white cell\" is a mirror system that acts as a delay line for the\nlaser beam. The beam enters the cell, bounces around on the mirrors, and eventually\nworks its way back out.\n\nThe specific white cell we will be considering is an ellipse with the equation\n4x^2 + y^2 = 100\n\nThe section corresponding to -0.01 ≤ x ≤ +0.01 at the top is missing, allowing the\nlight to enter and exit through the hole.\n￼￼\nThe light beam in this problem starts at the point (0.0,10.1) just outside the white\ncell, and the beam first impacts the mirror at (1.4,-9.6).\n\nEach time the laser beam hits the surface of the ellipse, it follows the usual law of\nreflection \"angle of incidence equals angle of reflection.\" That is, both the incident\nand reflected beams make the same angle with the normal line at the point of incidence.\n\nIn the figure on the left, the red line shows the first two points of contact between\nthe laser beam and the wall of the white cell; the blue line shows the line tangent to\nthe ellipse at the point of incidence of the first bounce.\n\nThe slope m of the tangent line at any point (x,y) of the given ellipse is: m = -4x/y\n\nThe normal line is perpendicular to this tangent line at the point of incidence.\n\nThe animation on the right shows the first 10 reflections of the beam.\n\nHow many times does the beam hit the internal surface of the white cell before exiting?\n\"\"\"\n\nfrom math import isclose, sqrt\n\n\ndef next_point(\n    point_x: float, point_y: float, incoming_gradient: float\n) -> tuple[float, float, float]:\n    \"\"\"\n    Given that a laser beam hits the interior of the white cell at point\n    (point_x, point_y) with gradient incoming_gradient, return a tuple (x,y,m1)\n    where the next point of contact with the interior is (x,y) with gradient m1.\n    >>> next_point(5.0, 0.0, 0.0)\n    (-5.0, 0.0, 0.0)\n    >>> next_point(5.0, 0.0, -2.0)\n    (0.0, -10.0, 2.0)\n    \"\"\"\n    # normal_gradient = gradient of line through which the beam is reflected\n    # outgoing_gradient = gradient of reflected line\n    normal_gradient = point_y / 4 / point_x\n    s2 = 2 * normal_gradient / (1 + normal_gradient * normal_gradient)\n    c2 = (1 - normal_gradient * normal_gradient) / (\n        1 + normal_gradient * normal_gradient\n    )\n    outgoing_gradient = (s2 - c2 * incoming_gradient) / (c2 + s2 * incoming_gradient)\n\n    # to find the next point, solve the simultaeneous equations:\n    # y^2 + 4x^2 = 100\n    # y - b = m * (x - a)\n    # ==> A x^2 + B x + C = 0\n    quadratic_term = outgoing_gradient**2 + 4\n    linear_term = 2 * outgoing_gradient * (point_y - outgoing_gradient * point_x)\n    constant_term = (point_y - outgoing_gradient * point_x) ** 2 - 100\n\n    x_minus = (\n        -linear_term - sqrt(linear_term**2 - 4 * quadratic_term * constant_term)\n    ) / (2 * quadratic_term)\n    x_plus = (\n        -linear_term + sqrt(linear_term**2 - 4 * quadratic_term * constant_term)\n    ) / (2 * quadratic_term)\n\n    # two solutions, one of which is our input point\n    next_x = x_minus if isclose(x_plus, point_x) else x_plus\n    next_y = point_y + outgoing_gradient * (next_x - point_x)\n\n    return next_x, next_y, outgoing_gradient\n\n\ndef solution(first_x_coord: float = 1.4, first_y_coord: float = -9.6) -> int:\n    \"\"\"\n    Return the number of times that the beam hits the interior wall of the\n    cell before exiting.\n    >>> solution(0.00001,-10)\n    1\n    >>> solution(5, 0)\n    287\n    \"\"\"\n    num_reflections: int = 0\n    point_x: float = first_x_coord\n    point_y: float = first_y_coord\n    gradient: float = (10.1 - point_y) / (0.0 - point_x)\n\n    while not (-0.01 <= point_x <= 0.01 and point_y > 0):\n        point_x, point_y, gradient = next_point(point_x, point_y, gradient)\n        num_reflections += 1\n\n    return num_reflections\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_145/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_145/sol1.py",
    "content": "\"\"\"\nProject Euler problem 145: https://projecteuler.net/problem=145\nAuthor: Vineet Rao, Maxim Smolskiy\nProblem statement:\n\nSome positive integers n have the property that the sum [ n + reverse(n) ]\nconsists entirely of odd (decimal) digits.\nFor instance, 36 + 63 = 99 and 409 + 904 = 1313.\nWe will call such numbers reversible; so 36, 63, 409, and 904 are reversible.\nLeading zeroes are not allowed in either n or reverse(n).\n\nThere are 120 reversible numbers below one-thousand.\n\nHow many reversible numbers are there below one-billion (10^9)?\n\"\"\"\n\nEVEN_DIGITS = [0, 2, 4, 6, 8]\nODD_DIGITS = [1, 3, 5, 7, 9]\n\n\ndef slow_reversible_numbers(\n    remaining_length: int, remainder: int, digits: list[int], length: int\n) -> int:\n    \"\"\"\n    Count the number of reversible numbers of given length.\n    Iterate over possible digits considering parity of current sum remainder.\n    >>> slow_reversible_numbers(1, 0, [0], 1)\n    0\n    >>> slow_reversible_numbers(2, 0, [0] * 2, 2)\n    20\n    >>> slow_reversible_numbers(3, 0, [0] * 3, 3)\n    100\n    \"\"\"\n    if remaining_length == 0:\n        if digits[0] == 0 or digits[-1] == 0:\n            return 0\n\n        for i in range(length // 2 - 1, -1, -1):\n            remainder += digits[i] + digits[length - i - 1]\n\n            if remainder % 2 == 0:\n                return 0\n\n            remainder //= 10\n\n        return 1\n\n    if remaining_length == 1:\n        if remainder % 2 == 0:\n            return 0\n\n        result = 0\n        for digit in range(10):\n            digits[length // 2] = digit\n            result += slow_reversible_numbers(\n                0, (remainder + 2 * digit) // 10, digits, length\n            )\n        return result\n\n    result = 0\n    for digit1 in range(10):\n        digits[(length + remaining_length) // 2 - 1] = digit1\n\n        if (remainder + digit1) % 2 == 0:\n            other_parity_digits = ODD_DIGITS\n        else:\n            other_parity_digits = EVEN_DIGITS\n\n        for digit2 in other_parity_digits:\n            digits[(length - remaining_length) // 2] = digit2\n            result += slow_reversible_numbers(\n                remaining_length - 2,\n                (remainder + digit1 + digit2) // 10,\n                digits,\n                length,\n            )\n    return result\n\n\ndef slow_solution(max_power: int = 9) -> int:\n    \"\"\"\n    To evaluate the solution, use solution()\n    >>> slow_solution(3)\n    120\n    >>> slow_solution(6)\n    18720\n    >>> slow_solution(7)\n    68720\n    \"\"\"\n    result = 0\n    for length in range(1, max_power + 1):\n        result += slow_reversible_numbers(length, 0, [0] * length, length)\n    return result\n\n\ndef reversible_numbers(\n    remaining_length: int, remainder: int, digits: list[int], length: int\n) -> int:\n    \"\"\"\n    Count the number of reversible numbers of given length.\n    Iterate over possible digits considering parity of current sum remainder.\n    >>> reversible_numbers(1, 0, [0], 1)\n    0\n    >>> reversible_numbers(2, 0, [0] * 2, 2)\n    20\n    >>> reversible_numbers(3, 0, [0] * 3, 3)\n    100\n    \"\"\"\n    # There exist no reversible 1, 5, 9, 13 (ie. 4k+1) digit numbers\n    if (length - 1) % 4 == 0:\n        return 0\n\n    return slow_reversible_numbers(remaining_length, remainder, digits, length)\n\n\ndef solution(max_power: int = 9) -> int:\n    \"\"\"\n    To evaluate the solution, use solution()\n    >>> solution(3)\n    120\n    >>> solution(6)\n    18720\n    >>> solution(7)\n    68720\n    \"\"\"\n    result = 0\n    for length in range(1, max_power + 1):\n        result += reversible_numbers(length, 0, [0] * length, length)\n    return result\n\n\ndef benchmark() -> None:\n    \"\"\"\n    Benchmarks\n    \"\"\"\n    # Running performance benchmarks...\n    # slow_solution : 292.9300301000003\n    # solution      : 54.90970860000016\n\n    from timeit import timeit\n\n    print(\"Running performance benchmarks...\")\n\n    print(f\"slow_solution : {timeit('slow_solution()', globals=globals(), number=10)}\")\n    print(f\"solution      : {timeit('solution()', globals=globals(), number=10)}\")\n\n\nif __name__ == \"__main__\":\n    print(f\"Solution : {solution()}\")\n    benchmark()\n\n    # for i in range(1, 15):\n    #     print(f\"{i}. {reversible_numbers(i, 0, [0]*i, i)}\")\n"
  },
  {
    "path": "project_euler/problem_164/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_164/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 164: https://projecteuler.net/problem=164\n\nThree Consecutive Digital Sum Limit\n\nHow many 20 digit numbers n (without any leading zero) exist such that no three\nconsecutive digits of n have a sum greater than 9?\n\nBrute-force recursive solution with caching of intermediate results.\n\"\"\"\n\n\ndef solve(\n    digit: int, prev1: int, prev2: int, sum_max: int, first: bool, cache: dict[str, int]\n) -> int:\n    \"\"\"\n    Solve for remaining 'digit' digits, with previous 'prev1' digit, and\n    previous-previous 'prev2' digit, total sum of 'sum_max'.\n    Pass around 'cache' to store/reuse intermediate results.\n\n    >>> solve(digit=1, prev1=0, prev2=0, sum_max=9, first=True, cache={})\n    9\n    >>> solve(digit=1, prev1=0, prev2=0, sum_max=9, first=False, cache={})\n    10\n    \"\"\"\n    if digit == 0:\n        return 1\n\n    cache_str = f\"{digit},{prev1},{prev2}\"\n    if cache_str in cache:\n        return cache[cache_str]\n\n    comb = 0\n    for curr in range(sum_max - prev1 - prev2 + 1):\n        if first and curr == 0:\n            continue\n\n        comb += solve(\n            digit=digit - 1,\n            prev1=curr,\n            prev2=prev1,\n            sum_max=sum_max,\n            first=False,\n            cache=cache,\n        )\n\n    cache[cache_str] = comb\n    return comb\n\n\ndef solution(n_digits: int = 20) -> int:\n    \"\"\"\n    Solves the problem for n_digits number of digits.\n\n    >>> solution(2)\n    45\n    >>> solution(10)\n    21838806\n    \"\"\"\n    cache: dict[str, int] = {}\n    return solve(digit=n_digits, prev1=0, prev2=0, sum_max=9, first=True, cache=cache)\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution(10) = }\")\n"
  },
  {
    "path": "project_euler/problem_173/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_173/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 173: https://projecteuler.net/problem=173\n\nWe shall define a square lamina to be a square outline with a square \"hole\" so that\nthe shape possesses vertical and horizontal symmetry. For example, using exactly\nthirty-two square tiles we can form two different square laminae:\n\nWith one-hundred tiles, and not necessarily using all of the tiles at one time, it is\npossible to form forty-one different square laminae.\n\nUsing up to one million tiles how many different square laminae can be formed?\n\"\"\"\n\nfrom math import ceil, sqrt\n\n\ndef solution(limit: int = 1000000) -> int:\n    \"\"\"\n    Return the number of different square laminae that can be formed using up to\n    one million tiles.\n    >>> solution(100)\n    41\n    \"\"\"\n    answer = 0\n\n    for outer_width in range(3, (limit // 4) + 2):\n        if outer_width**2 > limit:\n            hole_width_lower_bound = max(ceil(sqrt(outer_width**2 - limit)), 1)\n        else:\n            hole_width_lower_bound = 1\n        if (outer_width - hole_width_lower_bound) % 2:\n            hole_width_lower_bound += 1\n\n        answer += (outer_width - hole_width_lower_bound - 2) // 2 + 1\n\n    return answer\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_174/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_174/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 174: https://projecteuler.net/problem=174\n\nWe shall define a square lamina to be a square outline with a square \"hole\" so that\nthe shape possesses vertical and horizontal symmetry.\n\nGiven eight tiles it is possible to form a lamina in only one way: 3x3 square with a\n1x1 hole in the middle. However, using thirty-two tiles it is possible to form two\ndistinct laminae.\n\nIf t represents the number of tiles used, we shall say that t = 8 is type L(1) and\nt = 32 is type L(2).\n\nLet N(n) be the number of t ≤ 1000000 such that t is type L(n); for example,\nN(15) = 832.\n\nWhat is sum N(n) for 1 ≤ n ≤ 10?\n\"\"\"\n\nfrom collections import defaultdict\nfrom math import ceil, sqrt\n\n\ndef solution(t_limit: int = 1000000, n_limit: int = 10) -> int:\n    \"\"\"\n    Return the sum of N(n) for 1 <= n <= n_limit.\n\n    >>> solution(1000,5)\n    222\n    >>> solution(1000,10)\n    249\n    >>> solution(10000,10)\n    2383\n    \"\"\"\n    count: defaultdict = defaultdict(int)\n\n    for outer_width in range(3, (t_limit // 4) + 2):\n        if outer_width * outer_width > t_limit:\n            hole_width_lower_bound = max(\n                ceil(sqrt(outer_width * outer_width - t_limit)), 1\n            )\n        else:\n            hole_width_lower_bound = 1\n\n        hole_width_lower_bound += (outer_width - hole_width_lower_bound) % 2\n\n        for hole_width in range(hole_width_lower_bound, outer_width - 1, 2):\n            count[outer_width * outer_width - hole_width * hole_width] += 1\n\n    return sum(1 for n in count.values() if 1 <= n <= n_limit)\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_180/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_180/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 234: https://projecteuler.net/problem=234\n\nFor any integer n, consider the three functions\n\nf1,n(x,y,z) = x^(n+1) + y^(n+1) - z^(n+1)\nf2,n(x,y,z) = (xy + yz + zx)*(x^(n-1) + y^(n-1) - z^(n-1))\nf3,n(x,y,z) = xyz*(xn-2 + yn-2 - zn-2)\n\nand their combination\n\nfn(x,y,z) = f1,n(x,y,z) + f2,n(x,y,z) - f3,n(x,y,z)\n\nWe call (x,y,z) a golden triple of order k if x, y, and z are all rational numbers\nof the form a / b with 0 < a < b ≤ k and there is (at least) one integer n,\nso that fn(x,y,z) = 0.\n\nLet s(x,y,z) = x + y + z.\nLet t = u / v be the sum of all distinct s(x,y,z) for all golden triples\n(x,y,z) of order 35.\nAll the s(x,y,z) and t must be in reduced form.\n\nFind u + v.\n\n\nSolution:\n\nBy expanding the brackets it is easy to show that\nfn(x, y, z) = (x + y + z) * (x^n + y^n - z^n).\n\nSince x,y,z are positive, the requirement fn(x, y, z) = 0 is fulfilled if and\nonly if x^n + y^n = z^n.\n\nBy Fermat's Last Theorem, this means that the absolute value of n can not\nexceed 2, i.e. n is in {-2, -1, 0, 1, 2}. We can eliminate n = 0 since then the\nequation would reduce to 1 + 1 = 1, for which there are no solutions.\n\nSo all we have to do is iterate through the possible numerators and denominators\nof x and y, calculate the corresponding z, and check if the corresponding numerator and\ndenominator are integer and satisfy 0 < z_num < z_den <= 0. We use a set \"uniquq_s\"\nto make sure there are no duplicates, and the fractions.Fraction class to make sure\nwe get the right numerator and denominator.\n\nReference:\nhttps://en.wikipedia.org/wiki/Fermat%27s_Last_Theorem\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom fractions import Fraction\nfrom math import gcd, sqrt\n\n\ndef is_sq(number: int) -> bool:\n    \"\"\"\n    Check if number is a perfect square.\n\n    >>> is_sq(1)\n    True\n    >>> is_sq(1000001)\n    False\n    >>> is_sq(1000000)\n    True\n    \"\"\"\n    sq: int = int(number**0.5)\n    return number == sq * sq\n\n\ndef add_three(\n    x_num: int, x_den: int, y_num: int, y_den: int, z_num: int, z_den: int\n) -> tuple[int, int]:\n    \"\"\"\n    Given the numerators and denominators of three fractions, return the\n    numerator and denominator of their sum in lowest form.\n    >>> add_three(1, 3, 1, 3, 1, 3)\n    (1, 1)\n    >>> add_three(2, 5, 4, 11, 12, 3)\n    (262, 55)\n    \"\"\"\n    top: int = x_num * y_den * z_den + y_num * x_den * z_den + z_num * x_den * y_den\n    bottom: int = x_den * y_den * z_den\n    hcf: int = gcd(top, bottom)\n    top //= hcf\n    bottom //= hcf\n    return top, bottom\n\n\ndef solution(order: int = 35) -> int:\n    \"\"\"\n    Find the sum of the numerator and denominator of the sum of all s(x,y,z) for\n    golden triples (x,y,z) of the given order.\n\n    >>> solution(5)\n    296\n    >>> solution(10)\n    12519\n    >>> solution(20)\n    19408891927\n    \"\"\"\n    unique_s: set = set()\n    hcf: int\n    total: Fraction = Fraction(0)\n    fraction_sum: tuple[int, int]\n\n    for x_num in range(1, order + 1):\n        for x_den in range(x_num + 1, order + 1):\n            for y_num in range(1, order + 1):\n                for y_den in range(y_num + 1, order + 1):\n                    # n=1\n                    z_num = x_num * y_den + x_den * y_num\n                    z_den = x_den * y_den\n                    hcf = gcd(z_num, z_den)\n                    z_num //= hcf\n                    z_den //= hcf\n                    if 0 < z_num < z_den <= order:\n                        fraction_sum = add_three(\n                            x_num, x_den, y_num, y_den, z_num, z_den\n                        )\n                        unique_s.add(fraction_sum)\n\n                    # n=2\n                    z_num = (\n                        x_num * x_num * y_den * y_den + x_den * x_den * y_num * y_num\n                    )\n                    z_den = x_den * x_den * y_den * y_den\n                    if is_sq(z_num) and is_sq(z_den):\n                        z_num = int(sqrt(z_num))\n                        z_den = int(sqrt(z_den))\n                        hcf = gcd(z_num, z_den)\n                        z_num //= hcf\n                        z_den //= hcf\n                        if 0 < z_num < z_den <= order:\n                            fraction_sum = add_three(\n                                x_num, x_den, y_num, y_den, z_num, z_den\n                            )\n                            unique_s.add(fraction_sum)\n\n                    # n=-1\n                    z_num = x_num * y_num\n                    z_den = x_den * y_num + x_num * y_den\n                    hcf = gcd(z_num, z_den)\n                    z_num //= hcf\n                    z_den //= hcf\n                    if 0 < z_num < z_den <= order:\n                        fraction_sum = add_three(\n                            x_num, x_den, y_num, y_den, z_num, z_den\n                        )\n                        unique_s.add(fraction_sum)\n\n                    # n=2\n                    z_num = x_num * x_num * y_num * y_num\n                    z_den = (\n                        x_den * x_den * y_num * y_num + x_num * x_num * y_den * y_den\n                    )\n                    if is_sq(z_num) and is_sq(z_den):\n                        z_num = int(sqrt(z_num))\n                        z_den = int(sqrt(z_den))\n                        hcf = gcd(z_num, z_den)\n                        z_num //= hcf\n                        z_den //= hcf\n                        if 0 < z_num < z_den <= order:\n                            fraction_sum = add_three(\n                                x_num, x_den, y_num, y_den, z_num, z_den\n                            )\n                            unique_s.add(fraction_sum)\n\n    for num, den in unique_s:\n        total += Fraction(num, den)\n\n    return total.denominator + total.numerator\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_187/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_187/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 187: https://projecteuler.net/problem=187\n\nA composite is a number containing at least two prime factors.\nFor example, 15 = 3 x 5; 9 = 3 x 3; 12 = 2 x 2 x 3.\n\nThere are ten composites below thirty containing precisely two,\nnot necessarily distinct, prime factors: 4, 6, 9, 10, 14, 15, 21, 22, 25, 26.\n\nHow many composite integers, n < 10^8, have precisely two,\nnot necessarily distinct, prime factors?\n\"\"\"\n\nfrom math import isqrt\n\n\ndef slow_calculate_prime_numbers(max_number: int) -> list[int]:\n    \"\"\"\n    Returns prime numbers below max_number.\n    See: https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes\n\n    >>> slow_calculate_prime_numbers(10)\n    [2, 3, 5, 7]\n\n    >>> slow_calculate_prime_numbers(2)\n    []\n    \"\"\"\n\n    # List containing a bool value for every number below max_number/2\n    is_prime = [True] * max_number\n\n    for i in range(2, isqrt(max_number - 1) + 1):\n        if is_prime[i]:\n            # Mark all multiple of i as not prime\n            for j in range(i**2, max_number, i):\n                is_prime[j] = False\n\n    return [i for i in range(2, max_number) if is_prime[i]]\n\n\ndef calculate_prime_numbers(max_number: int) -> list[int]:\n    \"\"\"\n    Returns prime numbers below max_number.\n    See: https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes\n\n    >>> calculate_prime_numbers(10)\n    [2, 3, 5, 7]\n\n    >>> calculate_prime_numbers(2)\n    []\n    \"\"\"\n\n    if max_number <= 2:\n        return []\n\n    # List containing a bool value for every odd number below max_number/2\n    is_prime = [True] * (max_number // 2)\n\n    for i in range(3, isqrt(max_number - 1) + 1, 2):\n        if is_prime[i // 2]:\n            # Mark all multiple of i as not prime using list slicing\n            is_prime[i**2 // 2 :: i] = [False] * (\n                # Same as: (max_number - (i**2)) // (2 * i) + 1\n                # but faster than len(is_prime[i**2 // 2 :: i])\n                len(range(i**2 // 2, max_number // 2, i))\n            )\n\n    return [2] + [2 * i + 1 for i in range(1, max_number // 2) if is_prime[i]]\n\n\ndef slow_solution(max_number: int = 10**8) -> int:\n    \"\"\"\n    Returns the number of composite integers below max_number have precisely two,\n    not necessarily distinct, prime factors.\n\n    >>> slow_solution(30)\n    10\n    \"\"\"\n\n    prime_numbers = slow_calculate_prime_numbers(max_number // 2)\n\n    semiprimes_count = 0\n    left = 0\n    right = len(prime_numbers) - 1\n    while left <= right:\n        while prime_numbers[left] * prime_numbers[right] >= max_number:\n            right -= 1\n        semiprimes_count += right - left + 1\n        left += 1\n\n    return semiprimes_count\n\n\ndef while_solution(max_number: int = 10**8) -> int:\n    \"\"\"\n    Returns the number of composite integers below max_number have precisely two,\n    not necessarily distinct, prime factors.\n\n    >>> while_solution(30)\n    10\n    \"\"\"\n\n    prime_numbers = calculate_prime_numbers(max_number // 2)\n\n    semiprimes_count = 0\n    left = 0\n    right = len(prime_numbers) - 1\n    while left <= right:\n        while prime_numbers[left] * prime_numbers[right] >= max_number:\n            right -= 1\n        semiprimes_count += right - left + 1\n        left += 1\n\n    return semiprimes_count\n\n\ndef solution(max_number: int = 10**8) -> int:\n    \"\"\"\n    Returns the number of composite integers below max_number have precisely two,\n    not necessarily distinct, prime factors.\n\n    >>> solution(30)\n    10\n    \"\"\"\n\n    prime_numbers = calculate_prime_numbers(max_number // 2)\n\n    semiprimes_count = 0\n    right = len(prime_numbers) - 1\n    for left in range(len(prime_numbers)):\n        if left > right:\n            break\n        for r in range(right, left - 2, -1):\n            if prime_numbers[left] * prime_numbers[r] < max_number:\n                break\n        right = r\n        semiprimes_count += right - left + 1\n\n    return semiprimes_count\n\n\ndef benchmark() -> None:\n    \"\"\"\n    Benchmarks\n    \"\"\"\n    # Running performance benchmarks...\n    # slow_solution : 108.50874730000032\n    # while_sol     : 28.09581200000048\n    # solution      : 25.063097400000515\n\n    from timeit import timeit\n\n    print(\"Running performance benchmarks...\")\n\n    print(f\"slow_solution : {timeit('slow_solution()', globals=globals(), number=10)}\")\n    print(f\"while_sol     : {timeit('while_solution()', globals=globals(), number=10)}\")\n    print(f\"solution      : {timeit('solution()', globals=globals(), number=10)}\")\n\n\nif __name__ == \"__main__\":\n    print(f\"Solution: {solution()}\")\n    benchmark()\n"
  },
  {
    "path": "project_euler/problem_188/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_188/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 188: https://projecteuler.net/problem=188\n\nThe hyperexponentiation of a number\n\nThe hyperexponentiation or tetration of a number a by a positive integer b,\ndenoted by a↑↑b or b^a, is recursively defined by:\n\na↑↑1 = a,\na↑↑(k+1) = a(a↑↑k).\n\nThus we have e.g. 3↑↑2 = 3^3 = 27, hence 3↑↑3 = 3^27 = 7625597484987 and\n3↑↑4 is roughly 103.6383346400240996*10^12.\n\nFind the last 8 digits of 1777↑↑1855.\n\nReferences:\n    - https://en.wikipedia.org/wiki/Tetration\n\"\"\"\n\n\n# small helper function for modular exponentiation (fast exponentiation algorithm)\ndef _modexpt(base: int, exponent: int, modulo_value: int) -> int:\n    \"\"\"\n    Returns the modular exponentiation, that is the value\n    of `base ** exponent % modulo_value`, without calculating\n    the actual number.\n    >>> _modexpt(2, 4, 10)\n    6\n    >>> _modexpt(2, 1024, 100)\n    16\n    >>> _modexpt(13, 65535, 7)\n    6\n    \"\"\"\n\n    if exponent == 1:\n        return base\n    if exponent % 2 == 0:\n        x = _modexpt(base, exponent // 2, modulo_value) % modulo_value\n        return (x * x) % modulo_value\n    else:\n        return (base * _modexpt(base, exponent - 1, modulo_value)) % modulo_value\n\n\ndef solution(base: int = 1777, height: int = 1855, digits: int = 8) -> int:\n    \"\"\"\n    Returns the last 8 digits of the hyperexponentiation of base by\n    height, i.e. the number base↑↑height:\n\n    >>> solution(base=3, height=2)\n    27\n    >>> solution(base=3, height=3)\n    97484987\n    >>> solution(base=123, height=456, digits=4)\n    2547\n    \"\"\"\n\n    # calculate base↑↑height by right-assiciative repeated modular\n    # exponentiation\n    result = base\n    for _ in range(1, height):\n        result = _modexpt(base, result, 10**digits)\n\n    return result\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_190/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_190/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 190: https://projecteuler.net/problem=190\n\nMaximising a Weighted Product\n\nLet S_m = (x_1, x_2, ..., x_m) be the m-tuple of positive real numbers with\nx_1 + x_2 + ... + x_m = m for which P_m = x_1 * x_2^2 * ... * x_m^m is maximised.\n\nFor example, it can be verified that |_ P_10 _| = 4112\n(|_ _| is the integer part function).\n\nFind Sum_{m=2}^15 = |_ P_m _|.\n\nSolution:\n- Fix x_1 = m - x_2 - ... - x_m.\n- Calculate partial derivatives of P_m wrt the x_2, ..., x_m. This gives that\n  x_2 = 2 * x_1, x_3 = 3 * x_1, ..., x_m = m * x_1.\n- Calculate partial second order derivatives of P_m wrt the x_2, ..., x_m.\n  By plugging in the values from the previous step, can verify that solution is maximum.\n\"\"\"\n\n\ndef solution(n: int = 15) -> int:\n    \"\"\"\n    Calculate sum of |_ P_m _| for m from 2 to n.\n\n    >>> solution(2)\n    1\n    >>> solution(3)\n    2\n    >>> solution(4)\n    4\n    >>> solution(5)\n    10\n    \"\"\"\n    total = 0\n    for m in range(2, n + 1):\n        x1 = 2 / (m + 1)\n        p = 1.0\n        for i in range(1, m + 1):\n            xi = i * x1\n            p *= xi**i\n        total += int(p)\n    return total\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_191/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_191/sol1.py",
    "content": "\"\"\"\nPrize Strings\nProblem 191\n\nA particular school offers cash rewards to children with good attendance and\npunctuality. If they are absent for three consecutive days or late on more\nthan one occasion then they forfeit their prize.\n\nDuring an n-day period a trinary string is formed for each child consisting\nof L's (late), O's (on time), and A's (absent).\n\nAlthough there are eighty-one trinary strings for a 4-day period that can be\nformed, exactly forty-three strings would lead to a prize:\n\nOOOO OOOA OOOL OOAO OOAA OOAL OOLO OOLA OAOO OAOA\nOAOL OAAO OAAL OALO OALA OLOO OLOA OLAO OLAA AOOO\nAOOA AOOL AOAO AOAA AOAL AOLO AOLA AAOO AAOA AAOL\nAALO AALA ALOO ALOA ALAO ALAA LOOO LOOA LOAO LOAA\nLAOO LAOA LAAO\n\nHow many \"prize\" strings exist over a 30-day period?\n\nReferences:\n    - The original Project Euler project page:\n      https://projecteuler.net/problem=191\n\"\"\"\n\ncache: dict[tuple[int, int, int], int] = {}\n\n\ndef _calculate(days: int, absent: int, late: int) -> int:\n    \"\"\"\n    A small helper function for the recursion, mainly to have\n    a clean interface for the solution() function below.\n\n    It should get called with the number of days (corresponding\n    to the desired length of the 'prize strings'), and the\n    initial values for the number of consecutive absent days and\n    number of total late days.\n\n    >>> _calculate(days=4, absent=0, late=0)\n    43\n    >>> _calculate(days=30, absent=2, late=0)\n    0\n    >>> _calculate(days=30, absent=1, late=0)\n    98950096\n    \"\"\"\n\n    # if we are absent twice, or late 3 consecutive days,\n    # no further prize strings are possible\n    if late == 3 or absent == 2:\n        return 0\n\n    # if we have no days left, and have not failed any other rules,\n    # we have a prize string\n    if days == 0:\n        return 1\n\n    # No easy solution, so now we need to do the recursive calculation\n\n    # First, check if the combination is already in the cache, and\n    # if yes, return the stored value from there since we already\n    # know the number of possible prize strings from this point on\n    key = (days, absent, late)\n    if key in cache:\n        return cache[key]\n\n    # now we calculate the three possible ways that can unfold from\n    # this point on, depending on our attendance today\n\n    # 1) if we are late (but not absent), the \"absent\" counter stays as\n    # it is, but the \"late\" counter increases by one\n    state_late = _calculate(days - 1, absent, late + 1)\n\n    # 2) if we are absent, the \"absent\" counter increases by 1, and the\n    # \"late\" counter resets to 0\n    state_absent = _calculate(days - 1, absent + 1, 0)\n\n    # 3) if we are on time, this resets the \"late\" counter and keeps the\n    # absent counter\n    state_ontime = _calculate(days - 1, absent, 0)\n\n    prizestrings = state_late + state_absent + state_ontime\n\n    cache[key] = prizestrings\n    return prizestrings\n\n\ndef solution(days: int = 30) -> int:\n    \"\"\"\n    Returns the number of possible prize strings for a particular number\n    of days, using a simple recursive function with caching to speed it up.\n\n    >>> solution()\n    1918080160\n    >>> solution(4)\n    43\n    \"\"\"\n\n    return _calculate(days, absent=0, late=0)\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_203/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_203/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 203: https://projecteuler.net/problem=203\n\nThe binomial coefficients (n k) can be arranged in triangular form, Pascal's\ntriangle, like this:\n                            1\n                        1       1\n                    1\t\t2       1\n                1\t\t3\t\t3       1\n            1\t\t4\t\t6\t\t4\t\t1\n        1\t\t5\t\t10\t\t10\t\t5\t\t1\n    1\t\t6\t\t15\t\t20\t\t15\t\t6\t\t1\n1\t\t7\t\t21\t\t35\t\t35\t\t21\t\t7\t\t1\n                        .........\n\nIt can be seen that the first eight rows of Pascal's triangle contain twelve\ndistinct numbers: 1, 2, 3, 4, 5, 6, 7, 10, 15, 20, 21 and 35.\n\nA positive integer n is called squarefree if no square of a prime divides n.\nOf the twelve distinct numbers in the first eight rows of Pascal's triangle,\nall except 4 and 20 are squarefree. The sum of the distinct squarefree numbers\nin the first eight rows is 105.\n\nFind the sum of the distinct squarefree numbers in the first 51 rows of\nPascal's triangle.\n\nReferences:\n- https://en.wikipedia.org/wiki/Pascal%27s_triangle\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef get_pascal_triangle_unique_coefficients(depth: int) -> set[int]:\n    \"\"\"\n    Returns the unique coefficients of a Pascal's triangle of depth \"depth\".\n\n    The coefficients of this triangle are symmetric. A further improvement to this\n    method could be to calculate the coefficients once per level. Nonetheless,\n    the current implementation is fast enough for the original problem.\n\n    >>> get_pascal_triangle_unique_coefficients(1)\n    {1}\n    >>> get_pascal_triangle_unique_coefficients(2)\n    {1}\n    >>> get_pascal_triangle_unique_coefficients(3)\n    {1, 2}\n    >>> get_pascal_triangle_unique_coefficients(8)\n    {1, 2, 3, 4, 5, 6, 7, 35, 10, 15, 20, 21}\n    \"\"\"\n    coefficients = {1}\n    previous_coefficients = [1]\n    for _ in range(2, depth + 1):\n        coefficients_begins_one = [*previous_coefficients, 0]\n        coefficients_ends_one = [0, *previous_coefficients]\n        previous_coefficients = []\n        for x, y in zip(coefficients_begins_one, coefficients_ends_one):\n            coefficients.add(x + y)\n            previous_coefficients.append(x + y)\n    return coefficients\n\n\ndef get_squarefrees(unique_coefficients: set[int]) -> set[int]:\n    \"\"\"\n    Calculates the squarefree numbers inside unique_coefficients.\n\n    Based on the definition of a non-squarefree number, then any non-squarefree\n    n can be decomposed as n = p*p*r, where p is positive prime number and r\n    is a positive integer.\n\n    Under the previous formula, any coefficient that is lower than p*p is\n    squarefree as r cannot be negative. On the contrary, if any r exists such\n    that n = p*p*r, then the number is non-squarefree.\n\n    >>> get_squarefrees({1})\n    {1}\n    >>> get_squarefrees({1, 2})\n    {1, 2}\n    >>> get_squarefrees({1, 2, 3, 4, 5, 6, 7, 35, 10, 15, 20, 21})\n    {1, 2, 3, 5, 6, 7, 35, 10, 15, 21}\n    \"\"\"\n\n    non_squarefrees = set()\n    for number in unique_coefficients:\n        divisor = 2\n        copy_number = number\n        while divisor**2 <= copy_number:\n            multiplicity = 0\n            while copy_number % divisor == 0:\n                copy_number //= divisor\n                multiplicity += 1\n            if multiplicity >= 2:\n                non_squarefrees.add(number)\n                break\n            divisor += 1\n\n    return unique_coefficients.difference(non_squarefrees)\n\n\ndef solution(n: int = 51) -> int:\n    \"\"\"\n    Returns the sum of squarefrees for a given Pascal's Triangle of depth n.\n\n    >>> solution(1)\n    1\n    >>> solution(8)\n    105\n    >>> solution(9)\n    175\n    \"\"\"\n    unique_coefficients = get_pascal_triangle_unique_coefficients(n)\n    squarefrees = get_squarefrees(unique_coefficients)\n    return sum(squarefrees)\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_205/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_205/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 205: https://projecteuler.net/problem=205\n\nPeter has nine four-sided (pyramidal) dice, each with faces numbered 1, 2, 3, 4.\nColin has six six-sided (cubic) dice, each with faces numbered 1, 2, 3, 4, 5, 6.\n\nPeter and Colin roll their dice and compare totals: the highest total wins.\nThe result is a draw if the totals are equal.\n\nWhat is the probability that Pyramidal Peter beats Cubic Colin?\nGive your answer rounded to seven decimal places in the form 0.abcdefg\n\"\"\"\n\nfrom itertools import product\n\n\ndef total_frequency_distribution(sides_number: int, dice_number: int) -> list[int]:\n    \"\"\"\n    Returns frequency distribution of total\n\n    >>> total_frequency_distribution(sides_number=6, dice_number=1)\n    [0, 1, 1, 1, 1, 1, 1]\n\n    >>> total_frequency_distribution(sides_number=4, dice_number=2)\n    [0, 0, 1, 2, 3, 4, 3, 2, 1]\n    \"\"\"\n\n    max_face_number = sides_number\n    max_total = max_face_number * dice_number\n    totals_frequencies = [0] * (max_total + 1)\n\n    min_face_number = 1\n    faces_numbers = range(min_face_number, max_face_number + 1)\n    for dice_numbers in product(faces_numbers, repeat=dice_number):\n        total = sum(dice_numbers)\n        totals_frequencies[total] += 1\n\n    return totals_frequencies\n\n\ndef solution() -> float:\n    \"\"\"\n    Returns probability that Pyramidal Peter beats Cubic Colin\n    rounded to seven decimal places in the form 0.abcdefg\n\n    >>> solution()\n    0.5731441\n    \"\"\"\n\n    peter_totals_frequencies = total_frequency_distribution(\n        sides_number=4, dice_number=9\n    )\n    colin_totals_frequencies = total_frequency_distribution(\n        sides_number=6, dice_number=6\n    )\n\n    peter_wins_count = 0\n    min_peter_total = 9\n    max_peter_total = 4 * 9\n    min_colin_total = 6\n    for peter_total in range(min_peter_total, max_peter_total + 1):\n        peter_wins_count += peter_totals_frequencies[peter_total] * sum(\n            colin_totals_frequencies[min_colin_total:peter_total]\n        )\n\n    total_games_number = (4**9) * (6**6)\n    peter_win_probability = peter_wins_count / total_games_number\n\n    rounded_peter_win_probability = round(peter_win_probability, ndigits=7)\n\n    return rounded_peter_win_probability\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_206/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_206/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 206: https://projecteuler.net/problem=206\n\nFind the unique positive integer whose square has the form 1_2_3_4_5_6_7_8_9_0,\nwhere each “_” is a single digit.\n\n-----\n\nInstead of computing every single permutation of that number and going\nthrough a 10^9 search space, we can narrow it down considerably.\n\nIf the square ends in a 0, then the square root must also end in a 0. Thus,\nthe last missing digit must be 0 and the square root is a multiple of 10.\nWe can narrow the search space down to the first 8 digits and multiply the\nresult of that by 10 at the end.\n\nNow the last digit is a 9, which can only happen if the square root ends\nin a 3 or 7. From this point, we can try one of two different methods to find\nthe answer:\n\n1. Start at the lowest possible base number whose square would be in the\nformat, and count up. The base we would start at is 101010103, whose square is\nthe closest number to 10203040506070809. Alternate counting up by 4 and 6 so\nthe last digit of the base is always a 3 or 7.\n\n2. Start at the highest possible base number whose square would be in the\nformat, and count down. That base would be 138902663, whose square is the\nclosest number to 1929394959697989. Alternate counting down by 6 and 4 so the\nlast digit of the base is always a 3 or 7.\n\nThe solution does option 2 because the answer happens to be much closer to the\nstarting point.\n\"\"\"\n\n\ndef is_square_form(num: int) -> bool:\n    \"\"\"\n    Determines if num is in the form 1_2_3_4_5_6_7_8_9\n\n    >>> is_square_form(1)\n    False\n    >>> is_square_form(112233445566778899)\n    True\n    >>> is_square_form(123456789012345678)\n    False\n    \"\"\"\n    digit = 9\n\n    while num > 0:\n        if num % 10 != digit:\n            return False\n        num //= 100\n        digit -= 1\n\n    return True\n\n\ndef solution() -> int:\n    \"\"\"\n    Returns the first integer whose square is of the form 1_2_3_4_5_6_7_8_9_0\n    \"\"\"\n    num = 138902663\n\n    while not is_square_form(num * num):\n        if num % 10 == 3:\n            num -= 6  # (3 - 6) % 10 = 7\n        else:\n            num -= 4  # (7 - 4) % 10 = 3\n\n    return num * 10\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_207/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_207/sol1.py",
    "content": "\"\"\"\n\nProject Euler Problem 207: https://projecteuler.net/problem=207\n\nProblem Statement:\nFor some positive integers k, there exists an integer partition of the form\n4**t = 2**t + k, where 4**t, 2**t, and k are all positive integers and t is a real\nnumber. The first two such partitions are 4**1 = 2**1 + 2 and\n4**1.5849625... = 2**1.5849625... + 6.\nPartitions where t is also an integer are called perfect.\nFor any m ≥ 1 let P(m) be the proportion of such partitions that are perfect with\nk ≤ m.\nThus P(6) = 1/2.\nIn the following table are listed some values of P(m)\n\n   P(5) = 1/1\n   P(10) = 1/2\n   P(15) = 2/3\n   P(20) = 1/2\n   P(25) = 1/2\n   P(30) = 2/5\n   ...\n   P(180) = 1/4\n   P(185) = 3/13\n\nFind the smallest m for which P(m) < 1/12345\n\nSolution:\nEquation 4**t = 2**t + k solved for t gives:\n    t = log2(sqrt(4*k+1)/2 + 1/2)\nFor t to be real valued, sqrt(4*k+1) must be an integer which is implemented in\nfunction check_t_real(k). For a perfect partition t must be an integer.\nTo speed up significantly the search for partitions, instead of incrementing k by one\nper iteration, the next valid k is found by k = (i**2 - 1) / 4 with an integer i and\nk has to be a positive integer. If this is the case a partition is found. The partition\nis perfect if t os an integer. The integer i is increased with increment 1 until the\nproportion perfect partitions / total partitions drops under the given value.\n\n\"\"\"\n\nimport math\n\n\ndef check_partition_perfect(positive_integer: int) -> bool:\n    \"\"\"\n\n    Check if t = f(positive_integer) = log2(sqrt(4*positive_integer+1)/2 + 1/2) is a\n    real number.\n\n    >>> check_partition_perfect(2)\n    True\n\n    >>> check_partition_perfect(6)\n    False\n\n    \"\"\"\n\n    exponent = math.log2(math.sqrt(4 * positive_integer + 1) / 2 + 1 / 2)\n\n    return exponent == int(exponent)\n\n\ndef solution(max_proportion: float = 1 / 12345) -> int:\n    \"\"\"\n    Find m for which the proportion of perfect partitions to total partitions is lower\n    than max_proportion\n\n    >>> solution(1) > 5\n    True\n\n    >>> solution(1/2) > 10\n    True\n\n    >>> solution(3 / 13) > 185\n    True\n\n    \"\"\"\n\n    total_partitions = 0\n    perfect_partitions = 0\n\n    integer = 3\n    while True:\n        partition_candidate = (integer**2 - 1) / 4\n        # if candidate is an integer, then there is a partition for k\n        if partition_candidate == int(partition_candidate):\n            partition_candidate = int(partition_candidate)\n            total_partitions += 1\n            if check_partition_perfect(partition_candidate):\n                perfect_partitions += 1\n        if (\n            perfect_partitions > 0\n            and perfect_partitions / total_partitions < max_proportion\n        ):\n            return int(partition_candidate)\n        integer += 1\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_234/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_234/sol1.py",
    "content": "\"\"\"\nhttps://projecteuler.net/problem=234\n\nFor an integer n ≥ 4, we define the lower prime square root of n, denoted by\nlps(n), as the largest prime ≤ √n and the upper prime square root of n, ups(n),\nas the smallest prime ≥ √n.\n\nSo, for example, lps(4) = 2 = ups(4), lps(1000) = 31, ups(1000) = 37. Let us\ncall an integer n ≥ 4 semidivisible, if one of lps(n) and ups(n) divides n,\nbut not both.\n\nThe sum of the semidivisible numbers not exceeding 15 is 30, the numbers are 8,\n10 and 12. 15 is not semidivisible because it is a multiple of both lps(15) = 3\nand ups(15) = 5. As a further example, the sum of the 92 semidivisible numbers\nup to 1000 is 34825.\n\nWhat is the sum of all semidivisible numbers not exceeding 999966663333 ?\n\"\"\"\n\nimport math\n\n\ndef prime_sieve(n: int) -> list:\n    \"\"\"\n    Sieve of Erotosthenes\n    Function to return all the prime numbers up to a certain number\n    https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes\n    >>> prime_sieve(3)\n    [2]\n    >>> prime_sieve(50)\n    [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]\n    \"\"\"\n    is_prime = [True] * n\n    is_prime[0] = False\n    is_prime[1] = False\n    is_prime[2] = True\n\n    for i in range(3, int(n**0.5 + 1), 2):\n        index = i * 2\n        while index < n:\n            is_prime[index] = False\n            index = index + i\n\n    primes = [2]\n\n    for i in range(3, n, 2):\n        if is_prime[i]:\n            primes.append(i)\n\n    return primes\n\n\ndef solution(limit: int = 999_966_663_333) -> int:\n    \"\"\"\n    Computes the solution to the problem up to the specified limit\n    >>> solution(1000)\n    34825\n\n    >>> solution(10_000)\n    1134942\n\n    >>> solution(100_000)\n    36393008\n    \"\"\"\n    primes_upper_bound = math.floor(math.sqrt(limit)) + 100\n    primes = prime_sieve(primes_upper_bound)\n\n    matches_sum = 0\n    prime_index = 0\n    last_prime = primes[prime_index]\n\n    while (last_prime**2) <= limit:\n        next_prime = primes[prime_index + 1]\n\n        lower_bound = last_prime**2\n        upper_bound = next_prime**2\n\n        # Get numbers divisible by lps(current)\n        current = lower_bound + last_prime\n        while upper_bound > current <= limit:\n            matches_sum += current\n            current += last_prime\n\n        # Reset the upper_bound\n        while (upper_bound - next_prime) > limit:\n            upper_bound -= next_prime\n\n        # Add the numbers divisible by ups(current)\n        current = upper_bound - next_prime\n        while current > lower_bound:\n            matches_sum += current\n            current -= next_prime\n\n        # Remove the numbers divisible by both ups and lps\n        current = 0\n        while upper_bound > current <= limit:\n            if current <= lower_bound:\n                # Increment the current number\n                current += last_prime * next_prime\n                continue\n\n            if current > limit:\n                break\n\n            # Remove twice since it was added by both ups and lps\n            matches_sum -= current * 2\n\n            # Increment the current number\n            current += last_prime * next_prime\n\n        # Setup for next pair\n        last_prime = next_prime\n        prime_index += 1\n\n    return matches_sum\n\n\nif __name__ == \"__main__\":\n    print(solution())\n"
  },
  {
    "path": "project_euler/problem_301/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_301/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 301: https://projecteuler.net/problem=301\n\nProblem Statement:\nNim is a game played with heaps of stones, where two players take\nit in turn to remove any number of stones from any heap until no stones remain.\n\nWe'll consider the three-heap normal-play version of\nNim, which works as follows:\n- At the start of the game there are three heaps of stones.\n- On each player's turn, the player may remove any positive\n  number of stones from any single heap.\n- The first player unable to move (because no stones remain) loses.\n\nIf (n1, n2, n3) indicates a Nim position consisting of heaps of size\nn1, n2, and n3, then there is a simple function, which you may look up\nor attempt to deduce for yourself, X(n1, n2, n3) that returns:\n- zero if, with perfect strategy, the player about to\n  move will eventually lose; or\n- non-zero if, with perfect strategy, the player about\n  to move will eventually win.\n\nFor example X(1,2,3) = 0 because, no matter what the current player does,\nthe opponent can respond with a move that leaves two heaps of equal size,\nat which point every move by the current player can be mirrored by the\nopponent until no stones remain; so the current player loses. To illustrate:\n- current player moves to (1,2,1)\n- opponent moves to (1,0,1)\n- current player moves to (0,0,1)\n- opponent moves to (0,0,0), and so wins.\n\nFor how many positive integers n <= 2^30 does X(n,2n,3n) = 0?\n\"\"\"\n\n\ndef solution(exponent: int = 30) -> int:\n    \"\"\"\n    For any given exponent x >= 0, 1 <= n <= 2^x.\n    This function returns how many Nim games are lost given that\n    each Nim game has three heaps of the form (n, 2*n, 3*n).\n    >>> solution(0)\n    1\n    >>> solution(2)\n    3\n    >>> solution(10)\n    144\n    \"\"\"\n    # To find how many total games were lost for a given exponent x,\n    # we need to find the Fibonacci number F(x+2).\n    fibonacci_index = exponent + 2\n    phi = (1 + 5**0.5) / 2\n    fibonacci = (phi**fibonacci_index - (phi - 1) ** fibonacci_index) / 5**0.5\n\n    return int(fibonacci)\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_345/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_345/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 345: https://projecteuler.net/problem=345\n\nMatrix Sum\n\nWe define the Matrix Sum of a matrix as the maximum possible sum of\nmatrix elements such that none of the selected elements share the same row or column.\n\nFor example, the Matrix Sum of the matrix below equals\n3315 ( = 863 + 383 + 343 + 959 + 767):\n      7  53 183 439 863\n    497 383 563  79 973\n    287  63 343 169 583\n    627 343 773 959 943\n    767 473 103 699 303\n\nFind the Matrix Sum of:\n      7  53 183 439 863 497 383 563  79 973 287  63 343 169 583\n    627 343 773 959 943 767 473 103 699 303 957 703 583 639 913\n    447 283 463  29  23 487 463 993 119 883 327 493 423 159 743\n    217 623   3 399 853 407 103 983  89 463 290 516 212 462 350\n    960 376 682 962 300 780 486 502 912 800 250 346 172 812 350\n    870 456 192 162 593 473 915  45 989 873 823 965 425 329 803\n    973 965 905 919 133 673 665 235 509 613 673 815 165 992 326\n    322 148 972 962 286 255 941 541 265 323 925 281 601  95 973\n    445 721  11 525 473  65 511 164 138 672  18 428 154 448 848\n    414 456 310 312 798 104 566 520 302 248 694 976 430 392 198\n    184 829 373 181 631 101 969 613 840 740 778 458 284 760 390\n    821 461 843 513  17 901 711 993 293 157 274  94 192 156 574\n     34 124   4 878 450 476 712 914 838 669 875 299 823 329 699\n    815 559 813 459 522 788 168 586 966 232 308 833 251 631 107\n    813 883 451 509 615  77 281 613 459 205 380 274 302  35 805\n\nBrute force solution, with caching intermediate steps to speed up the calculation.\n\"\"\"\n\nimport numpy as np\nfrom numpy.typing import NDArray\n\nMATRIX_1 = [\n    \"7 53 183 439 863\",\n    \"497 383 563 79 973\",\n    \"287 63 343 169 583\",\n    \"627 343 773 959 943\",\n    \"767 473 103 699 303\",\n]\n\nMATRIX_2 = [\n    \"7 53 183 439 863 497 383 563 79 973 287 63 343 169 583\",\n    \"627 343 773 959 943 767 473 103 699 303 957 703 583 639 913\",\n    \"447 283 463 29 23 487 463 993 119 883 327 493 423 159 743\",\n    \"217 623 3 399 853 407 103 983 89 463 290 516 212 462 350\",\n    \"960 376 682 962 300 780 486 502 912 800 250 346 172 812 350\",\n    \"870 456 192 162 593 473 915 45 989 873 823 965 425 329 803\",\n    \"973 965 905 919 133 673 665 235 509 613 673 815 165 992 326\",\n    \"322 148 972 962 286 255 941 541 265 323 925 281 601 95 973\",\n    \"445 721 11 525 473 65 511 164 138 672 18 428 154 448 848\",\n    \"414 456 310 312 798 104 566 520 302 248 694 976 430 392 198\",\n    \"184 829 373 181 631 101 969 613 840 740 778 458 284 760 390\",\n    \"821 461 843 513 17 901 711 993 293 157 274 94 192 156 574\",\n    \"34 124 4 878 450 476 712 914 838 669 875 299 823 329 699\",\n    \"815 559 813 459 522 788 168 586 966 232 308 833 251 631 107\",\n    \"813 883 451 509 615 77 281 613 459 205 380 274 302 35 805\",\n]\n\n\ndef solve(arr: NDArray, row: int, cols: set[int], cache: dict[str, int]) -> int:\n    \"\"\"\n    Finds the max sum for array `arr` starting with row index `row`, and with columns\n    included in `cols`. `cache` is used for caching intermediate results.\n\n    >>> solve(arr=np.array([[1, 2], [3, 4]]), row=0, cols={0, 1}, cache={})\n    5\n    \"\"\"\n\n    cache_id = f\"{row}, {sorted(cols)}\"\n    if cache_id in cache:\n        return cache[cache_id]\n\n    if row == len(arr):\n        return 0\n\n    max_sum = 0\n    for col in cols:\n        new_cols = cols - {col}\n        max_sum = max(\n            max_sum,\n            int(arr[row, col])\n            + solve(arr=arr, row=row + 1, cols=new_cols, cache=cache),\n        )\n    cache[cache_id] = max_sum\n    return max_sum\n\n\ndef solution(matrix_str: list[str] = MATRIX_2) -> int:\n    \"\"\"\n    Takes list of strings `matrix_str` to parse the matrix and calculates the max sum.\n\n    >>> solution([\"1 2\", \"3 4\"])\n    5\n    >>> solution(MATRIX_1)\n    3315\n    \"\"\"\n\n    n = len(matrix_str)\n    arr = np.empty(shape=(n, n), dtype=int)\n    for row, matrix_row_str in enumerate(matrix_str):\n        matrix_row_list_str = matrix_row_str.split()\n        for col, elem_str in enumerate(matrix_row_list_str):\n            arr[row, col] = int(elem_str)\n\n    cache: dict[str, int] = {}\n    return solve(arr=arr, row=0, cols=set(range(n)), cache=cache)\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_493/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_493/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 493: https://projecteuler.net/problem=493\n\n70 coloured balls are placed in an urn, 10 for each of the seven rainbow colours.\nWhat is the expected number of distinct colours in 20 randomly picked balls?\nGive your answer with nine digits after the decimal point (a.bcdefghij).\n\n-----\n\nThis combinatorial problem can be solved by decomposing the problem into the\nfollowing steps:\n1. Calculate the total number of possible picking combinations\n[combinations := binom_coeff(70, 20)]\n2. Calculate the number of combinations with one colour missing\n[missing := binom_coeff(60, 20)]\n3. Calculate the probability of one colour missing\n[missing_prob := missing / combinations]\n4. Calculate the probability of no colour missing\n[no_missing_prob := 1 - missing_prob]\n5. Calculate the expected number of distinct colours\n[expected = 7 * no_missing_prob]\n\nReferences:\n- https://en.wikipedia.org/wiki/Binomial_coefficient\n\"\"\"\n\nimport math\n\nBALLS_PER_COLOUR = 10\nNUM_COLOURS = 7\nNUM_BALLS = BALLS_PER_COLOUR * NUM_COLOURS\n\n\ndef solution(num_picks: int = 20) -> str:\n    \"\"\"\n    Calculates the expected number of distinct colours\n\n    >>> solution(10)\n    '5.669644129'\n\n    >>> solution(30)\n    '6.985042712'\n    \"\"\"\n    total = math.comb(NUM_BALLS, num_picks)\n    missing_colour = math.comb(NUM_BALLS - BALLS_PER_COLOUR, num_picks)\n\n    result = NUM_COLOURS * (1 - missing_colour / total)\n\n    return f\"{result:.9f}\"\n\n\nif __name__ == \"__main__\":\n    print(solution(20))\n"
  },
  {
    "path": "project_euler/problem_551/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_551/sol1.py",
    "content": "\"\"\"\nSum of digits sequence\nProblem 551\n\nLet a(0), a(1),... be an integer sequence defined by:\n     a(0) = 1\n     for n >= 1, a(n) is the sum of the digits of all preceding terms\n\nThe sequence starts with 1, 1, 2, 4, 8, ...\nYou are given a(10^6) = 31054319.\n\nFind a(10^15)\n\"\"\"\n\nks = range(2, 20 + 1)\nbase = [10**k for k in range(ks[-1] + 1)]\nmemo: dict[int, dict[int, list[list[int]]]] = {}\n\n\ndef next_term(a_i, k, i, n):\n    \"\"\"\n    Calculates and updates a_i in-place to either the n-th term or the\n    smallest term for which c > 10^k when the terms are written in the form:\n            a(i) = b * 10^k + c\n\n    For any a(i), if digitsum(b) and c have the same value, the difference\n    between subsequent terms will be the same until c >= 10^k.  This difference\n    is cached to greatly speed up the computation.\n\n    Arguments:\n    a_i -- array of digits starting from the one's place that represent\n           the i-th term in the sequence\n    k --  k when terms are written in the from a(i) = b*10^k + c.\n          Term are calulcated until c > 10^k or the n-th term is reached.\n    i -- position along the sequence\n    n -- term to calculate up to if k is large enough\n\n    Return: a tuple of difference between ending term and starting term, and\n    the number of terms calculated. ex. if starting term is a_0=1, and\n    ending term is a_10=62, then (61, 9) is returned.\n    \"\"\"\n    # ds_b - digitsum(b)\n    ds_b = sum(a_i[j] for j in range(k, len(a_i)))\n    c = sum(a_i[j] * base[j] for j in range(min(len(a_i), k)))\n\n    diff, dn = 0, 0\n    max_dn = n - i\n\n    sub_memo = memo.get(ds_b)\n\n    if sub_memo is not None:\n        jumps = sub_memo.get(c)\n\n        if jumps is not None and len(jumps) > 0:\n            # find and make the largest jump without going over\n            max_jump = -1\n            for _k in range(len(jumps) - 1, -1, -1):\n                if jumps[_k][2] <= k and jumps[_k][1] <= max_dn:\n                    max_jump = _k\n                    break\n\n            if max_jump >= 0:\n                diff, dn, _kk = jumps[max_jump]\n                # since the difference between jumps is cached, add c\n                new_c = diff + c\n                for j in range(min(k, len(a_i))):\n                    new_c, a_i[j] = divmod(new_c, 10)\n                if new_c > 0:\n                    add(a_i, k, new_c)\n\n        else:\n            sub_memo[c] = []\n    else:\n        sub_memo = {c: []}\n        memo[ds_b] = sub_memo\n\n    if dn >= max_dn or c + diff >= base[k]:\n        return diff, dn\n\n    if k > ks[0]:\n        while True:\n            # keep doing smaller jumps\n            _diff, terms_jumped = next_term(a_i, k - 1, i + dn, n)\n            diff += _diff\n            dn += terms_jumped\n\n            if dn >= max_dn or c + diff >= base[k]:\n                break\n    else:\n        # would be too small a jump, just compute sequential terms instead\n        _diff, terms_jumped = compute(a_i, k, i + dn, n)\n        diff += _diff\n        dn += terms_jumped\n\n    jumps = sub_memo[c]\n\n    # keep jumps sorted by # of terms skipped\n    j = 0\n    while j < len(jumps):\n        if jumps[j][1] > dn:\n            break\n        j += 1\n\n    # cache the jump for this value digitsum(b) and c\n    sub_memo[c].insert(j, (diff, dn, k))\n    return (diff, dn)\n\n\ndef compute(a_i, k, i, n):\n    \"\"\"\n    same as next_term(a_i, k, i, n) but computes terms without memoizing results.\n    \"\"\"\n    if i >= n:\n        return 0, i\n    if k > len(a_i):\n        a_i.extend([0 for _ in range(k - len(a_i))])\n\n    # note: a_i -> b * 10^k + c\n    # ds_b -> digitsum(b)\n    # ds_c -> digitsum(c)\n    start_i = i\n    ds_b, ds_c, diff = 0, 0, 0\n    for j in range(len(a_i)):\n        if j >= k:\n            ds_b += a_i[j]\n        else:\n            ds_c += a_i[j]\n\n    while i < n:\n        i += 1\n        addend = ds_c + ds_b\n        diff += addend\n        ds_c = 0\n        for j in range(k):\n            s = a_i[j] + addend\n            addend, a_i[j] = divmod(s, 10)\n\n            ds_c += a_i[j]\n\n        if addend > 0:\n            break\n\n    if addend > 0:\n        add(a_i, k, addend)\n    return diff, i - start_i\n\n\ndef add(digits, k, addend):\n    \"\"\"\n    adds addend to digit array given in digits\n    starting at index k\n    \"\"\"\n    for j in range(k, len(digits)):\n        s = digits[j] + addend\n        if s >= 10:\n            quotient, digits[j] = divmod(s, 10)\n            addend = addend // 10 + quotient\n        else:\n            digits[j] = s\n            addend = addend // 10\n\n        if addend == 0:\n            break\n\n    while addend > 0:\n        addend, digit = divmod(addend, 10)\n        digits.append(digit)\n\n\ndef solution(n: int = 10**15) -> int:\n    \"\"\"\n    returns n-th term of sequence\n\n    >>> solution(10)\n    62\n\n    >>> solution(10**6)\n    31054319\n\n    >>> solution(10**15)\n    73597483551591773\n    \"\"\"\n\n    digits = [1]\n    i = 1\n    dn = 0\n    while True:\n        _diff, terms_jumped = next_term(digits, 20, i + dn, n)\n        dn += terms_jumped\n        if dn == n - i:\n            break\n\n    a_n = 0\n    for j in range(len(digits)):\n        a_n += digits[j] * 10**j\n    return a_n\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_587/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_587/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 587: https://projecteuler.net/problem=587\n\nA square is drawn around a circle as shown in the diagram below on the left.\nWe shall call the blue shaded region the L-section.\nA line is drawn from the bottom left of the square to the top right\nas shown in the diagram on the right.\nWe shall call the orange shaded region a concave triangle.\n\nIt should be clear that the concave triangle occupies exactly half of the L-section.\n\nTwo circles are placed next to each other horizontally,\na rectangle is drawn around both circles, and\na line is drawn from the bottom left to the top right as shown in the diagram below.\n\nThis time the concave triangle occupies approximately 36.46% of the L-section.\n\nIf n circles are placed next to each other horizontally,\na rectangle is drawn around the n circles, and\na line is drawn from the bottom left to the top right,\nthen it can be shown that the least value of n\nfor which the concave triangle occupies less than 10% of the L-section is n = 15.\n\nWhat is the least value of n\nfor which the concave triangle occupies less than 0.1% of the L-section?\n\"\"\"\n\nfrom itertools import count\nfrom math import asin, pi, sqrt\n\n\ndef circle_bottom_arc_integral(point: float) -> float:\n    \"\"\"\n    Returns integral of circle bottom arc y = 1 / 2 - sqrt(1 / 4 - (x - 1 / 2) ^ 2)\n\n    >>> circle_bottom_arc_integral(0)\n    0.39269908169872414\n\n    >>> circle_bottom_arc_integral(1 / 2)\n    0.44634954084936207\n\n    >>> circle_bottom_arc_integral(1)\n    0.5\n    \"\"\"\n\n    return (\n        (1 - 2 * point) * sqrt(point - point**2) + 2 * point + asin(sqrt(1 - point))\n    ) / 4\n\n\ndef concave_triangle_area(circles_number: int) -> float:\n    \"\"\"\n    Returns area of concave triangle\n\n    >>> concave_triangle_area(1)\n    0.026825229575318944\n\n    >>> concave_triangle_area(2)\n    0.01956236140083944\n    \"\"\"\n\n    intersection_y = (circles_number + 1 - sqrt(2 * circles_number)) / (\n        2 * (circles_number**2 + 1)\n    )\n    intersection_x = circles_number * intersection_y\n\n    triangle_area = intersection_x * intersection_y / 2\n    concave_region_area = circle_bottom_arc_integral(\n        1 / 2\n    ) - circle_bottom_arc_integral(intersection_x)\n\n    return triangle_area + concave_region_area\n\n\ndef solution(fraction: float = 1 / 1000) -> int:\n    \"\"\"\n    Returns least value of n\n    for which the concave triangle occupies less than fraction of the L-section\n\n    >>> solution(1 / 10)\n    15\n    \"\"\"\n\n    l_section_area = (1 - pi / 4) / 4\n\n    for n in count(1):\n        if concave_triangle_area(n) / l_section_area < fraction:\n            return n\n\n    return -1\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_686/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_686/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 686: https://projecteuler.net/problem=686\n\n2^7 = 128 is the first power of two whose leading digits are \"12\".\nThe next power of two whose leading digits are \"12\" is 2^80.\n\nDefine p(L,n) to be the nth-smallest value of j such that\nthe base 10 representation of 2^j begins with the digits of L.\n\nSo p(12, 1) = 7 and p(12, 2) = 80.\n\nYou are given that p(123, 45) = 12710.\n\nFind p(123, 678910).\n\"\"\"\n\nimport math\n\n\ndef log_difference(number: int) -> float:\n    \"\"\"\n    This function returns the decimal value of a number multiplied with log(2)\n    Since the problem is on powers of two, finding the powers of two with\n    large exponents is time consuming. Hence we use log to reduce compute time.\n\n    We can find out that the first power of 2 with starting digits 123 is 90.\n    Computing 2^90 is time consuming.\n    Hence we find log(2^90) = 90*log(2) = 27.092699609758302\n    But we require only the decimal part to determine whether the power starts with 123.\n    So we just return the decimal part of the log product.\n    Therefore we return 0.092699609758302\n\n    >>> log_difference(90)\n    0.092699609758302\n    >>> log_difference(379)\n    0.090368356648852\n\n    \"\"\"\n\n    log_number = math.log(2, 10) * number\n    difference = round((log_number - int(log_number)), 15)\n\n    return difference\n\n\ndef solution(number: int = 678910) -> int:\n    \"\"\"\n    This function calculates the power of two which is nth (n = number)\n    smallest value of power of 2\n    such that the starting digits of the 2^power is 123.\n\n    For example the powers of 2 for which starting digits is 123 are:\n    90, 379, 575, 864, 1060, 1545, 1741, 2030, 2226, 2515 and so on.\n    90 is the first power of 2 whose starting digits are 123,\n    379 is second power of 2 whose starting digits are 123,\n    and so on.\n\n    So if number = 10, then solution returns 2515 as we observe from above series.\n\n    We will define a lowerbound and upperbound.\n    lowerbound = log(1.23), upperbound = log(1.24)\n    because we need to find the powers that yield 123 as starting digits.\n\n    log(1.23) = 0.08990511143939792, log(1,24) = 0.09342168516223506.\n    We use 1.23 and not 12.3 or 123, because log(1.23) yields only decimal value\n    which is less than 1.\n    log(12.3) will be same decimal value but 1 added to it\n    which is log(12.3) = 1.093421685162235.\n    We observe that decimal value remains same no matter 1.23 or 12.3\n    Since we use the function log_difference(),\n    which returns the value that is only decimal part, using 1.23 is logical.\n\n    If we see, 90*log(2) = 27.092699609758302,\n    decimal part = 0.092699609758302, which is inside the range of lowerbound\n    and upperbound.\n\n    If we compute the difference between all the powers which lead to 123\n    starting digits is as follows:\n\n    379 - 90 = 289\n    575 - 379 = 196\n    864 - 575 = 289\n    1060 - 864 = 196\n\n    We see a pattern here. The difference is either 196 or 289 = 196 + 93.\n\n    Hence to optimize the algorithm we will increment by 196 or 93 depending upon the\n    log_difference() value.\n\n    Let's take for example 90.\n    Since 90 is the first power leading to staring digits as 123,\n    we will increment iterator by 196.\n    Because the difference between any two powers leading to 123\n    as staring digits is greater than or equal to 196.\n    After incrementing by 196 we get 286.\n\n    log_difference(286) = 0.09457875989861 which is greater than upperbound.\n    The next power is 379, and we need to add 93 to get there.\n    The iterator will now become 379,\n    which is the next power leading to 123 as starting digits.\n\n    Let's take 1060. We increment by 196, we get 1256.\n    log_difference(1256) = 0.09367455396034,\n    Which is greater than upperbound hence we increment by 93. Now iterator is 1349.\n    log_difference(1349) = 0.08946415071057 which is less than lowerbound.\n    The next power is 1545 and we need to add 196 to get 1545.\n\n    Conditions are as follows:\n\n    1) If we find a power whose log_difference() is in the range of\n    lower and upperbound, we will increment by 196.\n    which implies that the power is a number which will lead to 123 as starting digits.\n    2) If we find a power, whose log_difference() is greater than or equal upperbound,\n    we will increment by 93.\n    3) if log_difference() < lowerbound, we increment by 196.\n\n    Reference to the above logic:\n    https://math.stackexchange.com/questions/4093970/powers-of-2-starting-with-123-does-a-pattern-exist\n\n    >>> solution(1000)\n    284168\n\n    >>> solution(56000)\n    15924915\n\n    >>> solution(678910)\n    193060223\n\n    \"\"\"\n\n    power_iterator = 90\n    position = 0\n\n    lower_limit = math.log(1.23, 10)\n    upper_limit = math.log(1.24, 10)\n    previous_power = 0\n\n    while position < number:\n        difference = log_difference(power_iterator)\n\n        if difference >= upper_limit:\n            power_iterator += 93\n\n        elif difference < lower_limit:\n            power_iterator += 196\n\n        else:\n            previous_power = power_iterator\n            power_iterator += 196\n            position += 1\n\n    return previous_power\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "project_euler/problem_800/__init__.py",
    "content": ""
  },
  {
    "path": "project_euler/problem_800/sol1.py",
    "content": "\"\"\"\nProject Euler Problem 800: https://projecteuler.net/problem=800\n\nAn integer of the form p^q q^p with prime numbers p != q is called a hybrid-integer.\nFor example, 800 = 2^5 5^2 is a hybrid-integer.\n\nWe define C(n) to be the number of hybrid-integers less than or equal to n.\nYou are given C(800) = 2 and C(800^800) = 10790\n\nFind C(800800^800800)\n\"\"\"\n\nfrom math import isqrt, log2\n\n\ndef calculate_prime_numbers(max_number: int) -> list[int]:\n    \"\"\"\n    Returns prime numbers below max_number\n\n    >>> calculate_prime_numbers(10)\n    [2, 3, 5, 7]\n    \"\"\"\n\n    is_prime = [True] * max_number\n    for i in range(2, isqrt(max_number - 1) + 1):\n        if is_prime[i]:\n            for j in range(i**2, max_number, i):\n                is_prime[j] = False\n\n    return [i for i in range(2, max_number) if is_prime[i]]\n\n\ndef solution(base: int = 800800, degree: int = 800800) -> int:\n    \"\"\"\n    Returns the number of hybrid-integers less than or equal to base^degree\n\n    >>> solution(800, 1)\n    2\n\n    >>> solution(800, 800)\n    10790\n    \"\"\"\n\n    upper_bound = degree * log2(base)\n    max_prime = int(upper_bound)\n    prime_numbers = calculate_prime_numbers(max_prime)\n\n    hybrid_integers_count = 0\n    left = 0\n    right = len(prime_numbers) - 1\n    while left < right:\n        while (\n            prime_numbers[right] * log2(prime_numbers[left])\n            + prime_numbers[left] * log2(prime_numbers[right])\n            > upper_bound\n        ):\n            right -= 1\n        hybrid_integers_count += right - left\n        left += 1\n\n    return hybrid_integers_count\n\n\nif __name__ == \"__main__\":\n    print(f\"{solution() = }\")\n"
  },
  {
    "path": "pyproject.toml",
    "content": "[project]\nname = \"thealgorithms-python\"\nversion = \"0.0.1\"\ndescription = \"TheAlgorithms in Python\"\nauthors = [ { name = \"TheAlgorithms Contributors\" } ]\nrequires-python = \">=3.14\"\nclassifiers = [\n  \"Programming Language :: Python :: 3 :: Only\",\n  \"Programming Language :: Python :: 3.14\",\n]\ndependencies = [\n  \"beautifulsoup4>=4.12.3\",\n  \"cython>=3.1.2\",\n  \"fake-useragent>=1.5.1\",\n  \"httpx>=0.28.1\",\n  \"imageio>=2.36.1\",\n  \"keras>=3.7\",\n  \"lxml>=6\",\n  \"matplotlib>=3.9.3\",\n  \"numpy>=2.1.3\",\n  \"opencv-python>=4.10.0.84\",\n  \"pandas>=2.2.3\",\n  \"pillow>=11.3\",\n  \"rich>=13.9.4\",\n  \"scikit-learn>=1.5.2\",\n  \"scipy>=1.16.2\",\n  \"sphinx-pyproject>=0.3\",\n  \"statsmodels>=0.14.4\",\n  \"sympy>=1.13.3\",\n  \"tweepy>=4.14\",\n  \"typing-extensions>=4.12.2\",\n  \"xgboost>=2.1.3\",\n]\n\n[dependency-groups]\ntest = [\n  \"pytest>=8.4.1\",\n  \"pytest-cov>=6\",\n]\n\ndocs = [\n  \"myst-parser>=4\",\n  \"sphinx-autoapi>=3.4\",\n  \"sphinx-pyproject>=0.3\",\n]\neuler-validate = [\n  \"httpx>=0.28.1\",\n  \"numpy>=2.1.3\",\n]\n\n[tool.ruff]\ntarget-version = \"py314\"\n\noutput-format = \"full\"\nlint.select = [\n  # https://beta.ruff.rs/docs/rules\n  \"A\",     # flake8-builtins\n  \"ARG\",   # flake8-unused-arguments\n  \"ASYNC\", # flake8-async\n  \"B\",     # flake8-bugbear\n  \"BLE\",   # flake8-blind-except\n  \"C4\",    # flake8-comprehensions\n  \"C90\",   # McCabe cyclomatic complexity\n  \"DJ\",    # flake8-django\n  \"DTZ\",   # flake8-datetimez\n  \"E\",     # pycodestyle\n  \"EM\",    # flake8-errmsg\n  \"EXE\",   # flake8-executable\n  \"F\",     # Pyflakes\n  \"FA\",    # flake8-future-annotations\n  \"FLY\",   # flynt\n  \"G\",     # flake8-logging-format\n  \"I\",     # isort\n  \"ICN\",   # flake8-import-conventions\n  \"INP\",   # flake8-no-pep420\n  \"INT\",   # flake8-gettext\n  \"ISC\",   # flake8-implicit-str-concat\n  \"N\",     # pep8-naming\n  \"NPY\",   # NumPy-specific rules\n  \"PD\",    # pandas-vet\n  \"PGH\",   # pygrep-hooks\n  \"PIE\",   # flake8-pie\n  \"PL\",    # Pylint\n  \"PT\",    # flake8-pytest-style\n  \"PYI\",   # flake8-pyi\n  \"RSE\",   # flake8-raise\n  \"RUF\",   # Ruff-specific rules\n  \"S\",     # flake8-bandit\n  \"SIM\",   # flake8-simplify\n  \"SLF\",   # flake8-self\n  \"T10\",   # flake8-debugger\n  \"TD\",    # flake8-todos\n  \"TID\",   # flake8-tidy-imports\n  \"UP\",    # pyupgrade\n  \"W\",     # pycodestyle\n  \"YTT\",   # flake8-2020\n  # \"ANN\",  # flake8-annotations -- FIX ME?\n  # \"COM\",  # flake8-commas -- DO NOT FIX\n  # \"D\",    # pydocstyle -- FIX ME?\n  # \"ERA\",  # eradicate -- DO NOT FIX\n  # \"FBT\",  # flake8-boolean-trap  # FIX ME\n  # \"PTH\",  # flake8-use-pathlib  # FIX ME\n  # \"Q\",    # flake8-quotes\n  # \"RET\",  # flake8-return  # FIX ME?\n  # \"T20\",  # flake8-print\n  # \"TCH\",  # flake8-type-checking\n  # \"TRY\",  # tryceratops\n]\nlint.ignore = [\n  # `ruff rule S101` for a description of that rule\n  \"B904\",    # Within an `except` clause, raise exceptions with `raise ... from err` -- FIX ME\n  \"B905\",    # `zip()` without an explicit `strict=` parameter -- FIX ME\n  \"EM101\",   # Exception must not use a string literal, assign to a variable first\n  \"EXE001\",  # Shebang is present but file is not executable -- DO NOT FIX\n  \"G004\",    # Logging statement uses f-string\n  \"ISC001\",  # Conflicts with ruff format -- DO NOT FIX\n  \"PLC0415\", # import-outside-top-level -- DO NOT FIX\n  \"PLC1901\", # `{}` can be simplified to `{}` as an empty string is falsey\n  \"PLW060\",  # Using global for `{name}` but no assignment is done -- DO NOT FIX\n  \"PLW1641\", # eq-without-hash\n  \"PLW2901\", # PLW2901: Redefined loop variable -- FIX ME\n  \"PT011\",   # `pytest.raises(Exception)` is too broad, set the `match` parameter or use a more specific exception\n  \"PT018\",   # Assertion should be broken down into multiple parts\n  \"PT028\",   # pytest-parameter-with-default-argument\n  \"S101\",    # Use of `assert` detected -- DO NOT FIX\n  \"S311\",    # Standard pseudo-random generators are not suitable for cryptographic purposes -- FIX ME\n  \"SIM905\",  # Consider using a list literal instead of `str.split` -- DO NOT FIX\n  \"SLF001\",  # Private member accessed: `_Iterator` -- FIX ME\n  \"UP037\",   # FIX ME\n]\n\nlint.per-file-ignores.\"data_structures/hashing/tests/test_hash_map.py\" = [\n  \"BLE001\",\n]\nlint.per-file-ignores.\"hashes/enigma_machine.py\" = [\n  \"BLE001\",\n]\nlint.per-file-ignores.\"machine_learning/sequential_minimum_optimization.py\" = [\n  \"SIM115\",\n]\nlint.per-file-ignores.\"matrix/sherman_morrison.py\" = [\n  \"SIM103\",\n]\nlint.per-file-ignores.\"physics/newtons_second_law_of_motion.py\" = [\n  \"BLE001\",\n]\nlint.per-file-ignores.\"project_euler/problem_099/sol1.py\" = [\n  \"SIM115\",\n]\nlint.per-file-ignores.\"sorts/external_sort.py\" = [\n  \"SIM115\",\n]\nlint.mccabe.max-complexity = 17 # default: 10\nlint.pylint.allow-magic-value-types = [\n  \"float\",\n  \"int\",\n  \"str\",\n]\nlint.pylint.max-args = 10 # default: 5\nlint.pylint.max-branches = 20 # default: 12\nlint.pylint.max-returns = 8 # default: 6\nlint.pylint.max-statements = 88 # default: 50\n\n[tool.codespell]\nignore-words-list = \"3rt,abd,aer,ans,bitap,crate,damon,fo,followings,hist,iff,kwanza,manuel,mater,secant,som,sur,tim,toi,zar\"\nskip = \"./.*,*.json,*.lock,ciphers/prehistoric_men.txt,project_euler/problem_022/p022_names.txt,pyproject.toml,strings/dictionary.txt,strings/words.txt\"\n\n[tool.pytest.ini_options]\nmarkers = [\n  \"mat_ops: mark a test as utilizing matrix operations.\",\n]\naddopts = [\n  \"--durations=10\",\n  \"--doctest-modules\",\n  \"--showlocals\",\n]\n\n[tool.coverage.report]\nomit = [\n  \".env/*\",\n  \"project_euler/*\",\n]\nsort = \"Cover\"\n\n[tool.sphinx-pyproject]\ncopyright = \"2014, TheAlgorithms\"\nautoapi_dirs = [\n  \"audio_filters\",\n  \"backtracking\",\n  \"bit_manipulation\",\n  \"blockchain\",\n  \"boolean_algebra\",\n  \"cellular_automata\",\n  \"ciphers\",\n  \"computer_vision\",\n  \"conversions\",\n  \"data_compression\",\n  \"data_structures\",\n  \"digital_image_processing\",\n  \"divide_and_conquer\",\n  \"dynamic_programming\",\n  \"electronics\",\n  \"file_transfer\",\n  \"financial\",\n  \"fractals\",\n  \"fuzzy_logic\",\n  \"genetic_algorithm\",\n  \"geodesy\",\n  \"geometry\",\n  \"graphics\",\n  \"graphs\",\n  \"greedy_methods\",\n  \"hashes\",\n  \"knapsack\",\n  \"linear_algebra\",\n  \"linear_programming\",\n  \"machine_learning\",\n  \"maths\",\n  \"matrix\",\n  \"networking_flow\",\n  \"neural_network\",\n  \"other\",\n  \"physics\",\n  \"project_euler\",\n  \"quantum\",\n  \"scheduling\",\n  \"searches\",\n  \"sorts\",\n  \"strings\",\n  \"web_programming\",\n]\nautoapi_member_order = \"groupwise\"\n# autoapi_python_use_implicit_namespaces = true\nexclude_patterns = [\n  \".*/*\",\n  \"docs/\",\n]\nextensions = [\n  \"autoapi.extension\",\n  \"myst_parser\",\n]\nhtml_static_path = [ \"_static\" ]\nhtml_theme = \"alabaster\"\nmyst_enable_extensions = [\n  \"amsmath\",\n  \"attrs_inline\",\n  \"colon_fence\",\n  \"deflist\",\n  \"dollarmath\",\n  \"fieldlist\",\n  \"html_admonition\",\n  \"html_image\",\n  # \"linkify\",\n  \"replacements\",\n  \"smartquotes\",\n  \"strikethrough\",\n  \"substitution\",\n  \"tasklist\",\n]\nmyst_fence_as_directive = [\n  \"include\",\n]\ntemplates_path = [ \"_templates\" ]\n[tool.sphinx-pyproject.source_suffix]\n\".rst\" = \"restructuredtext\"\n# \".txt\" = \"markdown\"\n\".md\" = \"markdown\"\n"
  },
  {
    "path": "quantum/README.md",
    "content": "# Welcome to Quantum Algorithms\n\nStarted at https://github.com/TheAlgorithms/Python/issues/1831\n\n* D-Wave: https://www.dwavesys.com and https://github.com/dwavesystems\n* Google: https://research.google/teams/applied-science/quantum\n* IBM: https://qiskit.org and https://github.com/Qiskit\n* Rigetti: https://rigetti.com and https://github.com/rigetti\n* Zapata: https://www.zapatacomputing.com and https://github.com/zapatacomputing\n\n## IBM Qiskit\n- Start using by installing `pip install qiskit`, refer the [docs](https://qiskit.org/documentation/install.html) for more info.\n- Tutorials & References\n  - https://github.com/Qiskit/qiskit-tutorials\n  - https://quantum-computing.ibm.com/docs/iql/first-circuit\n  - https://medium.com/qiskit/how-to-program-a-quantum-computer-982a9329ed02\n\n## Google Cirq\n- Start using by installing `python -m pip install cirq`, refer the [docs](https://quantumai.google/cirq/start/install) for more info.\n- Tutorials & references\n  - https://github.com/quantumlib/cirq\n  - https://quantumai.google/cirq/experiments\n  - https://tanishabassan.medium.com/quantum-programming-with-google-cirq-3209805279bc\n"
  },
  {
    "path": "quantum/__init__.py",
    "content": ""
  },
  {
    "path": "quantum/bb84.py.DISABLED.txt",
    "content": "#!/usr/bin/env python3\n\"\"\"\nSimulation of the Quantum Key Distribution (QKD) protocol called BB84,\ncreated by Charles Bennett and Gilles Brassard in 1984.\n\nBB84 is a key-distribution protocol that ensures secure key distribution\nusing qubits instead of classical bits. The generated key is the result\nof simulating a quantum circuit. Our algorithm to construct the circuit\nis as follows:\n\nAlice generates two binary strings. One encodes the basis for each qubit:\n\n - 0 -> {0,1} basis.\n - 1 -> {+,-} basis.\n\nThe other encodes the state:\n\n - 0 -> |0> or |+>.\n - 1 -> |1> or |->.\n\nBob also generates a binary string and uses the same convention to choose\na basis for measurement. Based on the following results, we follow the\nalgorithm below:\n\nX|0> = |1>\n\nH|0> = |+>\n\nHX|0> = |->\n\n1. Whenever Alice wants to encode 1 in a qubit, she applies an\nX (NOT) gate to the qubit. To encode 0, no action is needed.\n\n2. Wherever she wants to encode it in the {+,-} basis, she applies\nan H (Hadamard) gate. No action is necessary to encode a qubit in\nthe {0,1} basis.\n\n3. She then sends the qubits to Bob (symbolically represented in\nthis circuit using wires).\n\n4. Bob measures the qubits according to his binary string for\nmeasurement. To measure a qubit in the {+,-} basis, he applies\nan H gate to the corresponding qubit and then performs a measurement.\n\nReferences:\nhttps://en.wikipedia.org/wiki/BB84\nhttps://qiskit.org/textbook/ch-algorithms/quantum-key-distribution.html\n\"\"\"\nimport numpy as np\nimport qiskit\n\n\ndef bb84(key_len: int = 8, seed: int | None = None) -> str:\n    \"\"\"\n    Performs the BB84 protocol using a key made of `key_len` bits.\n    The two parties in the key distribution are called Alice and Bob.\n    Args:\n        key_len: The length of the generated key in bits. The default is 8.\n\n        seed: Seed for the random number generator.\n        Mostly used for testing. Default is None.\n\n    Returns:\n        key: The key generated using BB84 protocol.\n\n    >>> bb84(16, seed=0)\n    '0111110111010010'\n\n    >>> bb84(8, seed=0)\n    '10110001'\n    \"\"\"\n    # Set up the random number generator.\n    rng = np.random.default_rng(seed=seed)\n\n    # Roughly 25% of the qubits will contribute to the key.\n    # So we take more than we need.\n    num_qubits = 6 * key_len\n    # Measurement basis for Alice's qubits.\n    alice_basis = rng.integers(2, size=num_qubits)\n    # The set of states Alice will prepare.\n    alice_state = rng.integers(2, size=num_qubits)\n    # Measurement basis for Bob's qubits.\n    bob_basis = rng.integers(2, size=num_qubits)\n\n    # Quantum Circuit to simulate BB84\n    bb84_circ = qiskit.QuantumCircuit(num_qubits, name=\"BB84\")\n\n    # Alice prepares her qubits according to rules above.\n    for index, _ in enumerate(alice_basis):\n        if alice_state[index] == 1:\n            bb84_circ.x(index)\n        if alice_basis[index] == 1:\n            bb84_circ.h(index)\n    bb84_circ.barrier()\n\n    # Bob measures the received qubits according to rules above.\n    for index, _ in enumerate(bob_basis):\n        if bob_basis[index] == 1:\n            bb84_circ.h(index)\n\n    bb84_circ.barrier()\n    bb84_circ.measure_all()\n\n    # Simulate the quantum circuit.\n    sim = qiskit.Aer.get_backend(\"aer_simulator\")\n    # We only need to run one shot because the key is unique.\n    # Multiple shots will produce the same key.\n    job = qiskit.execute(bb84_circ, sim, shots=1, seed_simulator=seed)\n    # Returns the result of measurement.\n    result = job.result().get_counts(bb84_circ).most_frequent()\n\n    # Extracting the generated key from the simulation results.\n    # Only keep measurement results where Alice and Bob chose the same basis.\n    gen_key = \"\".join(\n        [\n            result_bit\n            for alice_basis_bit, bob_basis_bit, result_bit in zip(\n                alice_basis, bob_basis, result\n            )\n            if alice_basis_bit == bob_basis_bit\n        ]\n    )\n\n    # Get final key. Pad with 0 if too short, otherwise truncate.\n    key = gen_key[:key_len] if len(gen_key) >= key_len else gen_key.ljust(key_len, \"0\")\n    return key\n\n\nif __name__ == \"__main__\":\n    print(f\"The generated key is : {bb84(8, seed=0)}\")\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "quantum/deutsch_jozsa.py.DISABLED.txt",
    "content": "# DISABLED!!\n#!/usr/bin/env python3\n\"\"\"\nDeutsch-Jozsa Algorithm is one of the first examples of a quantum\nalgorithm that is exponentially faster than any possible deterministic\nclassical algorithm\n\nPremise:\nWe are given a hidden Boolean function f,\nwhich takes as input a string of bits, and returns either 0 or 1:\n\nf({x0,x1,x2,...}) -> 0 or 1, where xn is 0 or 1\n\nThe property of the given Boolean function is that it is guaranteed to\neither be balanced or constant. A constant function returns all 0's\nor all 1's for any input, while a balanced function returns  0's for\nexactly half of all inputs and 1's for the other half. Our task is to\ndetermine whether the given function is balanced or constant.\n\nReferences:\n- https://en.wikipedia.org/wiki/Deutsch-Jozsa_algorithm\n- https://qiskit.org/textbook/ch-algorithms/deutsch-jozsa.html\n\"\"\"\n\nimport numpy as np\nimport qiskit\n\n\ndef dj_oracle(case: str, num_qubits: int) -> qiskit.QuantumCircuit:\n    \"\"\"\n    Returns a Quantum Circuit for the Oracle function.\n    The circuit returned can represent balanced or constant function,\n    according to the arguments passed\n    \"\"\"\n    # This circuit has num_qubits+1 qubits: the size of the input,\n    # plus one output qubit\n    oracle_qc = qiskit.QuantumCircuit(num_qubits + 1)\n\n    # First, let's deal with the case in which oracle is balanced\n    if case == \"balanced\":\n        # First generate a random number that tells us which CNOTs to\n        # wrap in X-gates:\n        b = np.random.randint(1, 2**num_qubits)\n        # Next, format 'b' as a binary string of length 'n', padded with zeros:\n        b_str = format(b, f\"0{num_qubits}b\")\n        # Next, we place the first X-gates. Each digit in our binary string\n        # corresponds to a qubit, if the digit is 0, we do nothing, if it's 1\n        # we apply an X-gate to that qubit:\n        for index, bit in enumerate(b_str):\n            if bit == \"1\":\n                oracle_qc.x(index)\n        # Do the controlled-NOT gates for each qubit, using the output qubit\n        # as the target:\n        for index in range(num_qubits):\n            oracle_qc.cx(index, num_qubits)\n        # Next, place the final X-gates\n        for index, bit in enumerate(b_str):\n            if bit == \"1\":\n                oracle_qc.x(index)\n\n    # Case in which oracle is constant\n    if case == \"constant\":\n        # First decide what the fixed output of the oracle will be\n        # (either always 0 or always 1)\n        output = np.random.randint(2)\n        if output == 1:\n            oracle_qc.x(num_qubits)\n\n    oracle_gate = oracle_qc.to_gate()\n    oracle_gate.name = \"Oracle\"  # To show when we display the circuit\n    return oracle_gate\n\n\ndef dj_algorithm(\n    oracle: qiskit.QuantumCircuit, num_qubits: int\n) -> qiskit.QuantumCircuit:\n    \"\"\"\n    Returns the complete Deutsch-Jozsa Quantum Circuit,\n    adding Input & Output registers and Hadamard & Measurement Gates,\n    to the Oracle Circuit passed in arguments\n    \"\"\"\n    dj_circuit = qiskit.QuantumCircuit(num_qubits + 1, num_qubits)\n    # Set up the output qubit:\n    dj_circuit.x(num_qubits)\n    dj_circuit.h(num_qubits)\n    # And set up the input register:\n    for qubit in range(num_qubits):\n        dj_circuit.h(qubit)\n    # Let's append the oracle gate to our circuit:\n    dj_circuit.append(oracle, range(num_qubits + 1))\n    # Finally, perform the H-gates again and measure:\n    for qubit in range(num_qubits):\n        dj_circuit.h(qubit)\n\n    for i in range(num_qubits):\n        dj_circuit.measure(i, i)\n\n    return dj_circuit\n\n\ndef deutsch_jozsa(case: str, num_qubits: int) -> qiskit.result.counts.Counts:\n    \"\"\"\n    Main function that builds the circuit using other helper functions,\n    runs the experiment 1000 times & returns the resultant qubit counts\n    >>> deutsch_jozsa(\"constant\", 3)\n    {'000': 1000}\n    >>> deutsch_jozsa(\"balanced\", 3)\n    {'111': 1000}\n    \"\"\"\n    # Use Aer's simulator\n    simulator = qiskit.Aer.get_backend(\"aer_simulator\")\n\n    oracle_gate = dj_oracle(case, num_qubits)\n    dj_circuit = dj_algorithm(oracle_gate, num_qubits)\n\n    # Execute the circuit on the simulator\n    job = qiskit.execute(dj_circuit, simulator, shots=1000)\n\n    # Return the histogram data of the results of the experiment.\n    return job.result().get_counts(dj_circuit)\n\n\nif __name__ == \"__main__\":\n    print(f\"Deutsch Jozsa - Constant Oracle: {deutsch_jozsa('constant', 3)}\")\n    print(f\"Deutsch Jozsa - Balanced Oracle: {deutsch_jozsa('balanced', 3)}\")\n"
  },
  {
    "path": "quantum/half_adder.py.DISABLED.txt",
    "content": "# DISABLED!!\n#!/usr/bin/env python3\n\"\"\"\nBuild a half-adder quantum circuit that takes two bits as input,\nencodes them into qubits, then runs the half-adder circuit calculating\nthe sum and carry qubits, observed over 1000 runs of the experiment\n.\n\nReferences:\nhttps://en.wikipedia.org/wiki/Adder_(electronics)\nhttps://qiskit.org/textbook/ch-states/atoms-computation.html#4.2-Remembering-how-to-add-\n\"\"\"\n\nimport qiskit\n\n\ndef half_adder(bit0: int, bit1: int) -> qiskit.result.counts.Counts:\n    \"\"\"\n    >>> half_adder(0, 0)\n    {'00': 1000}\n    >>> half_adder(0, 1)\n    {'01': 1000}\n    >>> half_adder(1, 0)\n    {'01': 1000}\n    >>> half_adder(1, 1)\n    {'10': 1000}\n    \"\"\"\n    # Use Aer's simulator\n    simulator = qiskit.Aer.get_backend(\"aer_simulator\")\n\n    qc_ha = qiskit.QuantumCircuit(4, 2)\n    # encode inputs in qubits 0 and 1\n    if bit0 == 1:\n        qc_ha.x(0)\n    if bit1 == 1:\n        qc_ha.x(1)\n    qc_ha.barrier()\n\n    # use cnots to write XOR of the inputs on qubit2\n    qc_ha.cx(0, 2)\n    qc_ha.cx(1, 2)\n\n    # use ccx / toffoli gate to write AND of the inputs on qubit3\n    qc_ha.ccx(0, 1, 3)\n    qc_ha.barrier()\n\n    # extract outputs\n    qc_ha.measure(2, 0)  # extract XOR value\n    qc_ha.measure(3, 1)  # extract AND value\n\n    # Execute the circuit on the qasm simulator\n    job = qiskit.execute(qc_ha, simulator, shots=1000)\n\n    # Return the histogram data of the results of the experiment\n    return job.result().get_counts(qc_ha)\n\n\nif __name__ == \"__main__\":\n    counts = half_adder(1, 1)\n    print(f\"Half Adder Output Qubit Counts: {counts}\")\n"
  },
  {
    "path": "quantum/not_gate.py.DISABLED.txt",
    "content": "#!/usr/bin/env python3\n\"\"\"\nBuild a simple bare-minimum quantum circuit that starts with a single\nqubit (by default, in state 0) and inverts it. Run the experiment 1000\ntimes and print the total count of the states finally observed.\nQiskit Docs: https://qiskit.org/documentation/getting_started.html\n\"\"\"\n\nimport qiskit\n\n\ndef single_qubit_measure(\n    qubits: int, classical_bits: int\n) -> qiskit.result.counts.Counts:\n    \"\"\"\n    >>> single_qubit_measure(2, 2)\n    {'11': 1000}\n    >>> single_qubit_measure(4, 4)\n    {'0011': 1000}\n    \"\"\"\n    # Use Aer's simulator\n    simulator = qiskit.Aer.get_backend(\"aer_simulator\")\n\n    # Create a Quantum Circuit acting on the q register\n    circuit = qiskit.QuantumCircuit(qubits, classical_bits)\n\n    # Apply X (NOT) Gate to Qubits 0 & 1\n    circuit.x(0)\n    circuit.x(1)\n\n    # Map the quantum measurement to the classical bits\n    circuit.measure([0, 1], [0, 1])\n\n    # Execute the circuit on the qasm simulator\n    job = qiskit.execute(circuit, simulator, shots=1000)\n\n    # Return the histogram data of the results of the experiment.\n    return job.result().get_counts(circuit)\n\n\nif __name__ == \"__main__\":\n    counts = single_qubit_measure(2, 2)\n    print(f\"Total count for various states are: {counts}\")\n"
  },
  {
    "path": "quantum/q_fourier_transform.py",
    "content": "\"\"\"\nBuild the quantum fourier transform (qft) for a desire\nnumber of quantum bits using Qiskit framework. This\nexperiment run in IBM Q simulator with 10000 shots.\nThis circuit can be use as a building block to design\nthe Shor's algorithm in quantum computing. As well as,\nquantum phase estimation among others.\n.\nReferences:\nhttps://en.wikipedia.org/wiki/Quantum_Fourier_transform\nhttps://qiskit.org/textbook/ch-algorithms/quantum-fourier-transform.html\n\"\"\"\n\nimport math\n\nimport numpy as np\nimport qiskit\nfrom qiskit import Aer, ClassicalRegister, QuantumCircuit, QuantumRegister, execute\n\n\ndef quantum_fourier_transform(number_of_qubits: int = 3) -> qiskit.result.counts.Counts:\n    \"\"\"\n    # >>> quantum_fourier_transform(2)\n    # {'00': 2500, '01': 2500, '11': 2500, '10': 2500}\n    # quantum circuit for number_of_qubits = 3:\n                                               ┌───┐\n    qr_0: ──────■──────────────────────■───────┤ H ├─X─\n                │                ┌───┐ │P(π/2) └───┘ │\n    qr_1: ──────┼────────■───────┤ H ├─■─────────────┼─\n          ┌───┐ │P(π/4)  │P(π/2) └───┘               │\n    qr_2: ┤ H ├─■────────■───────────────────────────X─\n          └───┘\n    cr: 3/═════════════════════════════════════════════\n    Args:\n        n : number of qubits\n    Returns:\n        qiskit.result.counts.Counts: distribute counts.\n\n    >>> quantum_fourier_transform(2)\n    {'00': 2500, '01': 2500, '10': 2500, '11': 2500}\n    >>> quantum_fourier_transform(-1)\n    Traceback (most recent call last):\n        ...\n    ValueError: number of qubits must be > 0.\n    >>> quantum_fourier_transform('a')\n    Traceback (most recent call last):\n        ...\n    TypeError: number of qubits must be a integer.\n    >>> quantum_fourier_transform(100)\n    Traceback (most recent call last):\n        ...\n    ValueError: number of qubits too large to simulate(>10).\n    >>> quantum_fourier_transform(0.5)\n    Traceback (most recent call last):\n        ...\n    ValueError: number of qubits must be exact integer.\n    \"\"\"\n    if isinstance(number_of_qubits, str):\n        raise TypeError(\"number of qubits must be a integer.\")\n    if number_of_qubits <= 0:\n        raise ValueError(\"number of qubits must be > 0.\")\n    if math.floor(number_of_qubits) != number_of_qubits:\n        raise ValueError(\"number of qubits must be exact integer.\")\n    if number_of_qubits > 10:\n        raise ValueError(\"number of qubits too large to simulate(>10).\")\n\n    qr = QuantumRegister(number_of_qubits, \"qr\")\n    cr = ClassicalRegister(number_of_qubits, \"cr\")\n\n    quantum_circuit = QuantumCircuit(qr, cr)\n\n    counter = number_of_qubits\n\n    for i in range(counter):\n        quantum_circuit.h(number_of_qubits - i - 1)\n        counter -= 1\n        for j in range(counter):\n            quantum_circuit.cp(np.pi / 2 ** (counter - j), j, counter)\n\n    for k in range(number_of_qubits // 2):\n        quantum_circuit.swap(k, number_of_qubits - k - 1)\n\n    # measure all the qubits\n    quantum_circuit.measure(qr, cr)\n    # simulate with 10000 shots\n    backend = Aer.get_backend(\"qasm_simulator\")\n    job = execute(quantum_circuit, backend, shots=10000)\n\n    return job.result().get_counts(quantum_circuit)\n\n\nif __name__ == \"__main__\":\n    print(\n        f\"Total count for quantum fourier transform state is: \\\n    {quantum_fourier_transform(3)}\"\n    )\n"
  },
  {
    "path": "quantum/q_full_adder.py.DISABLED.txt",
    "content": "\"\"\"\nBuild the quantum full adder (QFA) for any sum of\ntwo quantum registers and one carry in. This circuit\nis designed using the Qiskit framework. This\nexperiment run in IBM Q simulator with 1000 shots.\n.\nReferences:\nhttps://www.quantum-inspire.com/kbase/full-adder/\n\"\"\"\n\nimport math\n\nimport qiskit\n\n\ndef quantum_full_adder(\n    input_1: int = 1, input_2: int = 1, carry_in: int = 1\n) -> qiskit.result.counts.Counts:\n    \"\"\"\n    # >>> q_full_adder(inp_1, inp_2, cin)\n    # the inputs can be 0/1 for qubits in define\n    # values, or can be in a superposition of both\n    # states with hadamard gate using the input value 2.\n    # result for default values: {11: 1000}\n    qr_0: ──■────■──────────────■──\n            │  ┌─┴─┐          ┌─┴─┐\n    qr_1: ──■──┤ X ├──■────■──┤ X ├\n            │  └───┘  │  ┌─┴─┐└───┘\n    qr_2: ──┼─────────■──┤ X ├─────\n          ┌─┴─┐     ┌─┴─┐└───┘\n    qr_3: ┤ X ├─────┤ X ├──────────\n          └───┘     └───┘\n    cr: 2/═════════════════════════\n    Args:\n        input_1: input 1 for the circuit.\n        input_2: input 2 for the circuit.\n        carry_in: carry in for the circuit.\n    Returns:\n        qiskit.result.counts.Counts: sum result counts.\n    >>> quantum_full_adder(1, 1, 1)\n    {'11': 1000}\n    >>> quantum_full_adder(0, 0, 1)\n    {'01': 1000}\n    >>> quantum_full_adder(1, 0, 1)\n    {'10': 1000}\n    >>> quantum_full_adder(1, -4, 1)\n    Traceback (most recent call last):\n        ...\n    ValueError: inputs must be positive.\n    >>> quantum_full_adder('q', 0, 1)\n    Traceback (most recent call last):\n        ...\n    TypeError: inputs must be integers.\n    >>> quantum_full_adder(0.5, 0, 1)\n    Traceback (most recent call last):\n        ...\n    ValueError: inputs must be exact integers.\n    >>> quantum_full_adder(0, 1, 3)\n    Traceback (most recent call last):\n        ...\n    ValueError: inputs must be less or equal to 2.\n    \"\"\"\n    if (\n        isinstance(input_1, str)\n        or isinstance(input_2, str)\n        or isinstance(carry_in, str)\n    ):\n        raise TypeError(\"inputs must be integers.\")\n\n    if (input_1 < 0) or (input_2 < 0) or (carry_in < 0):\n        raise ValueError(\"inputs must be positive.\")\n\n    if (\n        (math.floor(input_1) != input_1)\n        or (math.floor(input_2) != input_2)\n        or (math.floor(carry_in) != carry_in)\n    ):\n        raise ValueError(\"inputs must be exact integers.\")\n\n    if (input_1 > 2) or (input_2 > 2) or (carry_in > 2):\n        raise ValueError(\"inputs must be less or equal to 2.\")\n\n    # build registers\n    qr = qiskit.QuantumRegister(4, \"qr\")\n    cr = qiskit.ClassicalRegister(2, \"cr\")\n    # list the entries\n    entry = [input_1, input_2, carry_in]\n\n    quantum_circuit = qiskit.QuantumCircuit(qr, cr)\n\n    for i in range(3):\n        if entry[i] == 2:\n            quantum_circuit.h(i)  # for hadamard entries\n        elif entry[i] == 1:\n            quantum_circuit.x(i)  # for 1 entries\n        elif entry[i] == 0:\n            quantum_circuit.i(i)  # for 0 entries\n\n    # build the circuit\n    quantum_circuit.ccx(0, 1, 3)  # ccx = toffoli gate\n    quantum_circuit.cx(0, 1)\n    quantum_circuit.ccx(1, 2, 3)\n    quantum_circuit.cx(1, 2)\n    quantum_circuit.cx(0, 1)\n\n    quantum_circuit.measure([2, 3], cr)  # measure the last two qbits\n\n    backend = qiskit.Aer.get_backend(\"aer_simulator\")\n    job = qiskit.execute(quantum_circuit, backend, shots=1000)\n\n    return job.result().get_counts(quantum_circuit)\n\n\nif __name__ == \"__main__\":\n    print(f\"Total sum count for state is: {quantum_full_adder(1, 1, 1)}\")\n"
  },
  {
    "path": "quantum/quantum_entanglement.py.DISABLED.txt",
    "content": "#!/usr/bin/env python3\n\"\"\"\nBuild a quantum circuit with pair or group of qubits to perform\nquantum entanglement.\nQuantum entanglement is a phenomenon observed at the quantum scale\nwhere entangled particles stay connected (in some sense) so that\nthe actions performed on one of the particles affects the other,\nno matter the distance between two particles.\n\"\"\"\n\nimport qiskit\n\n\ndef quantum_entanglement(qubits: int = 2) -> qiskit.result.counts.Counts:\n    \"\"\"\n    # >>> quantum_entanglement(2)\n    # {'00': 500, '11': 500}\n    #      ┌───┐     ┌─┐\n    # q_0: ┤ H ├──■──┤M├───\n    #      └───┘┌─┴─┐└╥┘┌─┐\n    # q_1: ─────┤ X ├─╫─┤M├\n    #           └───┘ ║ └╥┘\n    # c: 2/═══════════╩══╩═\n    #                 0  1\n    Args:\n        qubits (int): number of quibits to use. Defaults to 2\n    Returns:\n        qiskit.result.counts.Counts: mapping of states to its counts\n    \"\"\"\n    classical_bits = qubits\n\n    # Using Aer's simulator\n    simulator = qiskit.Aer.get_backend(\"aer_simulator\")\n\n    # Creating a Quantum Circuit acting on the q register\n    circuit = qiskit.QuantumCircuit(qubits, classical_bits)\n\n    # Adding a H gate on qubit 0 (now q0 in superposition)\n    circuit.h(0)\n\n    for i in range(1, qubits):\n        # Adding CX (CNOT) gate\n        circuit.cx(i - 1, i)\n\n    # Mapping the quantum measurement to the classical bits\n    circuit.measure(list(range(qubits)), list(range(classical_bits)))\n\n    # Now measuring any one qubit would affect other qubits to collapse\n    # their super position and have same state as the measured one.\n\n    # Executing the circuit on the simulator\n    job = qiskit.execute(circuit, simulator, shots=1000)\n\n    return job.result().get_counts(circuit)\n\n\nif __name__ == \"__main__\":\n    print(f\"Total count for various states are: {quantum_entanglement(3)}\")\n"
  },
  {
    "path": "quantum/quantum_random.py.DISABLED.txt",
    "content": "import doctest\n\nimport projectq\nfrom projectq.ops import H, Measure\n\n\ndef get_random_number(quantum_engine: projectq.cengines._main.MainEngine) -> int:\n    \"\"\"\n    >>> isinstance(get_random_number(projectq.MainEngine()), int)\n    True\n    \"\"\"\n    qubit = quantum_engine.allocate_qubit()\n    H | qubit\n    Measure | qubit\n    return int(qubit)\n\n\nif __name__ == \"__main__\":\n    doctest.testmod()\n\n    # initialises a new quantum backend\n    quantum_engine = projectq.MainEngine()\n\n    # Generate a list of 10 random numbers\n    random_numbers_list = [get_random_number(quantum_engine) for _ in range(10)]\n\n    # Flushes the quantum engine from memory\n    quantum_engine.flush()\n\n    print(\"Random numbers\", random_numbers_list)\n"
  },
  {
    "path": "quantum/quantum_teleportation.py.DISABLED.txt",
    "content": "#!/usr/bin/env python3\n\"\"\"\nBuild quantum teleportation circuit using three quantum bits\nand 1 classical bit. The main idea is to send one qubit from\nAlice to Bob using the entanglement properties. This experiment\nrun in IBM Q simulator with 1000 shots.\n.\nReferences:\nhttps://en.wikipedia.org/wiki/Quantum_teleportation\nhttps://qiskit.org/textbook/ch-algorithms/teleportation.html\n\"\"\"\n\nimport numpy as np\nimport qiskit\nfrom qiskit import Aer, ClassicalRegister, QuantumCircuit, QuantumRegister, execute\n\n\ndef quantum_teleportation(\n    theta: float = np.pi / 2, phi: float = np.pi / 2, lam: float = np.pi / 2\n) -> qiskit.result.counts.Counts:\n    \"\"\"\n    # >>> quantum_teleportation()\n    #{'00': 500, '11': 500} # ideally\n    #      ┌─────────────────┐          ┌───┐\n    #qr_0: ┤  U(π/2,π/2,π/2) ├───────■──┤ H ├─■─────────\n    #      └──────┬───┬──────┘     ┌─┴─┐└───┘ │\n    #qr_1: ───────┤ H ├─────────■──┤ X ├──────┼───■─────\n    #             └───┘       ┌─┴─┐└───┘      │ ┌─┴─┐┌─┐\n    #qr_2: ───────────────────┤ X ├───────────■─┤ X ├┤M├\n    #                         └───┘             └───┘└╥┘\n    #cr: 1/═══════════════════════════════════════════╩═\n    Args:\n        theta (float): Single qubit rotation U Gate theta parameter. Default to np.pi/2\n        phi (float): Single qubit rotation U Gate phi parameter. Default to np.pi/2\n        lam (float): Single qubit rotation U Gate lam parameter. Default to np.pi/2\n    Returns:\n        qiskit.result.counts.Counts: Teleported qubit counts.\n    \"\"\"\n\n    qr = QuantumRegister(3, \"qr\")  # Define the number of quantum bits\n    cr = ClassicalRegister(1, \"cr\")  # Define the number of classical bits\n\n    quantum_circuit = QuantumCircuit(qr, cr)  # Define the quantum circuit.\n\n    # Build the circuit\n    quantum_circuit.u(theta, phi, lam, 0)  # Quantum State to teleport\n    quantum_circuit.h(1)  # add hadamard gate\n    quantum_circuit.cx(\n        1, 2\n    )  # add control gate with qubit 1 as control and 2 as target.\n    quantum_circuit.cx(0, 1)\n    quantum_circuit.h(0)\n    quantum_circuit.cz(0, 2)  # add control z gate.\n    quantum_circuit.cx(1, 2)\n\n    quantum_circuit.measure([2], [0])  # measure the qubit.\n\n    # Simulate the circuit using qasm simulator\n    backend = Aer.get_backend(\"aer_simulator\")\n    job = execute(quantum_circuit, backend, shots=1000)\n\n    return job.result().get_counts(quantum_circuit)\n\n\nif __name__ == \"__main__\":\n    print(\n        \"Total count for teleported state is: \"\n        f\"{quantum_teleportation(np.pi/2, np.pi/2, np.pi/2)}\"\n    )\n"
  },
  {
    "path": "quantum/ripple_adder_classic.py.DISABLED.txt",
    "content": "# https://github.com/rupansh/QuantumComputing/blob/master/rippleadd.py\n# https://en.wikipedia.org/wiki/Adder_(electronics)#Full_adder\n# https://en.wikipedia.org/wiki/Controlled_NOT_gate\n\nimport qiskit\nfrom qiskit.providers import Backend\n\n\ndef store_two_classics(val1: int, val2: int) -> tuple[qiskit.QuantumCircuit, str, str]:\n    \"\"\"\n    Generates a Quantum Circuit which stores two classical integers\n    Returns the circuit and binary representation of the integers\n    \"\"\"\n    x, y = bin(val1)[2:], bin(val2)[2:]  # Remove leading '0b'\n\n    # Ensure that both strings are of the same length\n    if len(x) > len(y):\n        y = y.zfill(len(x))\n    else:\n        x = x.zfill(len(y))\n\n    # We need (3 * number of bits in the larger number)+1 qBits\n    # The second parameter is the number of classical registers, to measure the result\n    circuit = qiskit.QuantumCircuit((len(x) * 3) + 1, len(x) + 1)\n\n    # We are essentially \"not-ing\" the bits that are 1\n    # Reversed because it's easier to perform ops on more significant bits\n    for i in range(len(x)):\n        if x[::-1][i] == \"1\":\n            circuit.x(i)\n    for j in range(len(y)):\n        if y[::-1][j] == \"1\":\n            circuit.x(len(x) + j)\n\n    return circuit, x, y\n\n\ndef full_adder(\n    circuit: qiskit.QuantumCircuit,\n    input1_loc: int,\n    input2_loc: int,\n    carry_in: int,\n    carry_out: int,\n):\n    \"\"\"\n    Quantum Equivalent of a Full Adder Circuit\n    CX/CCX is like 2-way/3-way XOR\n    \"\"\"\n    circuit.ccx(input1_loc, input2_loc, carry_out)\n    circuit.cx(input1_loc, input2_loc)\n    circuit.ccx(input2_loc, carry_in, carry_out)\n    circuit.cx(input2_loc, carry_in)\n    circuit.cx(input1_loc, input2_loc)\n\n\n# The default value for **backend** is the result of a function call which is not\n# normally recommended and causes ruff to raise a B008 error. However, in this case,\n# this is acceptable because `Aer.get_backend()` is called when the function is defined\n# and that same backend is then reused for all function calls.\n\n\ndef ripple_adder(\n    val1: int,\n    val2: int,\n    backend: Backend = qiskit.Aer.get_backend(\"aer_simulator\"),  # noqa: B008\n) -> int:\n    \"\"\"\n    Quantum Equivalent of a Ripple Adder Circuit\n    Uses qasm_simulator backend by default\n\n    Currently only adds 'emulated' Classical Bits\n    but nothing prevents us from doing this with hadamard'd bits :)\n\n    Only supports adding positive integers\n\n    >>> ripple_adder(3, 4)\n    7\n    >>> ripple_adder(10, 4)\n    14\n    >>> ripple_adder(-1, 10)\n    Traceback (most recent call last):\n        ...\n    ValueError: Both Integers must be positive!\n    \"\"\"\n\n    if val1 < 0 or val2 < 0:\n        raise ValueError(\"Both Integers must be positive!\")\n\n    # Store the Integers\n    circuit, x, y = store_two_classics(val1, val2)\n\n    \"\"\"\n    We are essentially using each bit of x & y respectively as full_adder's input\n    the carry_input is used from the previous circuit (for circuit num > 1)\n\n    the carry_out is just below carry_input because\n    it will be essentially the carry_input for the next full_adder\n    \"\"\"\n    for i in range(len(x)):\n        full_adder(circuit, i, len(x) + i, len(x) + len(y) + i, len(x) + len(y) + i + 1)\n        circuit.barrier()  # Optional, just for aesthetics\n\n    # Measure the resultant qBits\n    for i in range(len(x) + 1):\n        circuit.measure([(len(x) * 2) + i], [i])\n\n    res = qiskit.execute(circuit, backend, shots=1).result()\n\n    # The result is in binary. Convert it back to int\n    return int(next(iter(res.get_counts())), 2)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "quantum/single_qubit_measure.py.DISABLED.txt",
    "content": "#!/usr/bin/env python3\n\"\"\"\nBuild a simple bare-minimum quantum circuit that starts with a single\nqubit (by default, in state 0), runs the experiment 1000 times, and\nfinally prints the total count of the states finally observed.\nQiskit Docs: https://qiskit.org/documentation/getting_started.html\n\"\"\"\n\nimport qiskit\n\n\ndef single_qubit_measure(\n    qubits: int, classical_bits: int\n) -> qiskit.result.counts.Counts:\n    \"\"\"\n    >>> single_qubit_measure(1, 1)\n    {'0': 1000}\n    \"\"\"\n    # Use Aer's simulator\n    simulator = qiskit.Aer.get_backend(\"aer_simulator\")\n\n    # Create a Quantum Circuit acting on the q register\n    circuit = qiskit.QuantumCircuit(qubits, classical_bits)\n\n    # Map the quantum measurement to the classical bits\n    circuit.measure([0], [0])\n\n    # Execute the circuit on the simulator\n    job = qiskit.execute(circuit, simulator, shots=1000)\n\n    # Return the histogram data of the results of the experiment.\n    return job.result().get_counts(circuit)\n\n\nif __name__ == \"__main__\":\n    print(f\"Total count for various states are: {single_qubit_measure(1, 1)}\")\n"
  },
  {
    "path": "quantum/superdense_coding.py.DISABLED.txt",
    "content": "\"\"\"\nBuild the superdense coding protocol. This quantum\ncircuit can send two classical bits using one quantum\nbit. This circuit is designed using the Qiskit\nframework. This experiment run in IBM Q simulator\nwith 1000 shots.\n.\nReferences:\nhttps://qiskit.org/textbook/ch-algorithms/superdense-coding.html\nhttps://en.wikipedia.org/wiki/Superdense_coding\n\"\"\"\n\nimport math\n\nimport qiskit\nfrom qiskit import Aer, ClassicalRegister, QuantumCircuit, QuantumRegister, execute\n\n\ndef superdense_coding(bit_1: int = 1, bit_2: int = 1) -> qiskit.result.counts.Counts:\n    \"\"\"\n    The input refer to the classical message\n    that you wants to send. {'00','01','10','11'}\n    result for default values: {11: 1000}\n               ┌───┐          ┌───┐\n    qr_0: ─────┤ X ├──────────┤ X ├─────\n          ┌───┐└─┬─┘┌───┐┌───┐└─┬─┘┌───┐\n    qr_1: ┤ H ├──■──┤ X ├┤ Z ├──■──┤ H ├\n          └───┘     └───┘└───┘     └───┘\n    cr: 2/══════════════════════════════\n    Args:\n        bit_1: bit 1 of classical information to send.\n        bit_2: bit 2 of classical information to send.\n    Returns:\n        qiskit.result.counts.Counts: counts of send state.\n    >>> superdense_coding(0,0)\n    {'00': 1000}\n    >>> superdense_coding(0,1)\n    {'01': 1000}\n    >>> superdense_coding(-1,0)\n    Traceback (most recent call last):\n        ...\n    ValueError: inputs must be positive.\n    >>> superdense_coding(1,'j')\n    Traceback (most recent call last):\n        ...\n    TypeError: inputs must be integers.\n    >>> superdense_coding(1,0.5)\n    Traceback (most recent call last):\n        ...\n    ValueError: inputs must be exact integers.\n    >>> superdense_coding(2,1)\n    Traceback (most recent call last):\n        ...\n    ValueError: inputs must be less or equal to 1.\n    \"\"\"\n    if isinstance(bit_1, str) or isinstance(bit_2, str):\n        raise TypeError(\"inputs must be integers.\")\n    if (bit_1 < 0) or (bit_2 < 0):\n        raise ValueError(\"inputs must be positive.\")\n    if (math.floor(bit_1) != bit_1) or (math.floor(bit_2) != bit_2):\n        raise ValueError(\"inputs must be exact integers.\")\n    if (bit_1 > 1) or (bit_2 > 1):\n        raise ValueError(\"inputs must be less or equal to 1.\")\n\n    # build registers\n    qr = QuantumRegister(2, \"qr\")\n    cr = ClassicalRegister(2, \"cr\")\n\n    quantum_circuit = QuantumCircuit(qr, cr)\n\n    # entanglement the qubits\n    quantum_circuit.h(1)\n    quantum_circuit.cx(1, 0)\n\n    # send the information\n    c_information = str(bit_1) + str(bit_2)\n\n    if c_information == \"11\":\n        quantum_circuit.x(1)\n        quantum_circuit.z(1)\n    elif c_information == \"10\":\n        quantum_circuit.z(1)\n    elif c_information == \"01\":\n        quantum_circuit.x(1)\n    else:\n        quantum_circuit.i(1)\n\n    # unentangled the circuit\n    quantum_circuit.cx(1, 0)\n    quantum_circuit.h(1)\n\n    # measure the circuit\n    quantum_circuit.measure(qr, cr)\n\n    backend = Aer.get_backend(\"aer_simulator\")\n    job = execute(quantum_circuit, backend, shots=1000)\n\n    return job.result().get_counts(quantum_circuit)\n\n\nif __name__ == \"__main__\":\n    print(f\"Counts for classical state send: {superdense_coding(1,1)}\")\n"
  },
  {
    "path": "scheduling/__init__.py",
    "content": ""
  },
  {
    "path": "scheduling/first_come_first_served.py",
    "content": "# Implementation of First Come First Served scheduling algorithm\n# In this Algorithm we just care about the order that the processes arrived\n# without carring about their duration time\n# https://en.wikipedia.org/wiki/Scheduling_(computing)#First_come,_first_served\nfrom __future__ import annotations\n\n\ndef calculate_waiting_times(duration_times: list[int]) -> list[int]:\n    \"\"\"\n    This function calculates the waiting time of some processes that have a\n    specified duration time.\n        Return: The waiting time for each process.\n    >>> calculate_waiting_times([5, 10, 15])\n    [0, 5, 15]\n    >>> calculate_waiting_times([1, 2, 3, 4, 5])\n    [0, 1, 3, 6, 10]\n    >>> calculate_waiting_times([10, 3])\n    [0, 10]\n    \"\"\"\n    waiting_times = [0] * len(duration_times)\n    for i in range(1, len(duration_times)):\n        waiting_times[i] = duration_times[i - 1] + waiting_times[i - 1]\n    return waiting_times\n\n\ndef calculate_turnaround_times(\n    duration_times: list[int], waiting_times: list[int]\n) -> list[int]:\n    \"\"\"\n    This function calculates the turnaround time of some processes.\n        Return: The time difference between the completion time and the\n                arrival time.\n                Practically waiting_time + duration_time\n    >>> calculate_turnaround_times([5, 10, 15], [0, 5, 15])\n    [5, 15, 30]\n    >>> calculate_turnaround_times([1, 2, 3, 4, 5], [0, 1, 3, 6, 10])\n    [1, 3, 6, 10, 15]\n    >>> calculate_turnaround_times([10, 3], [0, 10])\n    [10, 13]\n    \"\"\"\n    return [\n        duration_time + waiting_times[i]\n        for i, duration_time in enumerate(duration_times)\n    ]\n\n\ndef calculate_average_turnaround_time(turnaround_times: list[int]) -> float:\n    \"\"\"\n    This function calculates the average of the turnaround times\n        Return: The average of the turnaround times.\n    >>> calculate_average_turnaround_time([0, 5, 16])\n    7.0\n    >>> calculate_average_turnaround_time([1, 5, 8, 12])\n    6.5\n    >>> calculate_average_turnaround_time([10, 24])\n    17.0\n    \"\"\"\n    return sum(turnaround_times) / len(turnaround_times)\n\n\ndef calculate_average_waiting_time(waiting_times: list[int]) -> float:\n    \"\"\"\n    This function calculates the average of the waiting times\n        Return: The average of the waiting times.\n    >>> calculate_average_waiting_time([0, 5, 16])\n    7.0\n    >>> calculate_average_waiting_time([1, 5, 8, 12])\n    6.5\n    >>> calculate_average_waiting_time([10, 24])\n    17.0\n    \"\"\"\n    return sum(waiting_times) / len(waiting_times)\n\n\nif __name__ == \"__main__\":\n    # process id's\n    processes = [1, 2, 3]\n\n    # ensure that we actually have processes\n    if len(processes) == 0:\n        print(\"Zero amount of processes\")\n        raise SystemExit(0)\n\n    # duration time of all processes\n    duration_times = [19, 8, 9]\n\n    # ensure we can match each id to a duration time\n    if len(duration_times) != len(processes):\n        print(\"Unable to match all id's with their duration time\")\n        raise SystemExit(0)\n\n    # get the waiting times and the turnaround times\n    waiting_times = calculate_waiting_times(duration_times)\n    turnaround_times = calculate_turnaround_times(duration_times, waiting_times)\n\n    # get the average times\n    average_waiting_time = calculate_average_waiting_time(waiting_times)\n    average_turnaround_time = calculate_average_turnaround_time(turnaround_times)\n\n    # print all the results\n    print(\"Process ID\\tDuration Time\\tWaiting Time\\tTurnaround Time\")\n    for i, process in enumerate(processes):\n        print(\n            f\"{process}\\t\\t{duration_times[i]}\\t\\t{waiting_times[i]}\\t\\t\"\n            f\"{turnaround_times[i]}\"\n        )\n    print(f\"Average waiting time = {average_waiting_time}\")\n    print(f\"Average turn around time = {average_turnaround_time}\")\n"
  },
  {
    "path": "scheduling/highest_response_ratio_next.py",
    "content": "\"\"\"\nHighest response ratio next (HRRN) scheduling is a non-preemptive discipline.\nIt was developed as modification of shortest job next or shortest job first (SJN or SJF)\nto mitigate the problem of process starvation.\nhttps://en.wikipedia.org/wiki/Highest_response_ratio_next\n\"\"\"\n\nfrom statistics import mean\n\nimport numpy as np\n\n\ndef calculate_turn_around_time(\n    process_name: list, arrival_time: list, burst_time: list, no_of_process: int\n) -> list:\n    \"\"\"\n    Calculate the turn around time of each processes\n\n    Return: The turn around time time for each process.\n    >>> calculate_turn_around_time([\"A\", \"B\", \"C\"], [3, 5, 8], [2, 4, 6], 3)\n    [2, 4, 7]\n    >>> calculate_turn_around_time([\"A\", \"B\", \"C\"], [0, 2, 4], [3, 5, 7], 3)\n    [3, 6, 11]\n    \"\"\"\n\n    current_time = 0\n    # Number of processes finished\n    finished_process_count = 0\n    # Displays the finished process.\n    # If it is 0, the performance is completed if it is 1, before the performance.\n    finished_process = [0] * no_of_process\n    # List to include calculation results\n    turn_around_time = [0] * no_of_process\n\n    # Sort by arrival time.\n    burst_time = [burst_time[i] for i in np.argsort(arrival_time)]\n    process_name = [process_name[i] for i in np.argsort(arrival_time)]\n    arrival_time.sort()\n\n    while no_of_process > finished_process_count:\n        \"\"\"\n        If the current time is less than the arrival time of\n        the process that arrives first among the processes that have not been performed,\n        change the current time.\n        \"\"\"\n        i = 0\n        while finished_process[i] == 1:\n            i += 1\n        current_time = max(current_time, arrival_time[i])\n\n        response_ratio = 0\n        # Index showing the location of the process being performed\n        loc = 0\n        # Saves the current response ratio.\n        temp = 0\n        for i in range(no_of_process):\n            if finished_process[i] == 0 and arrival_time[i] <= current_time:\n                temp = (burst_time[i] + (current_time - arrival_time[i])) / burst_time[\n                    i\n                ]\n            if response_ratio < temp:\n                response_ratio = temp\n                loc = i\n\n        # Calculate the turn around time\n        turn_around_time[loc] = current_time + burst_time[loc] - arrival_time[loc]\n        current_time += burst_time[loc]\n        # Indicates that the process has been performed.\n        finished_process[loc] = 1\n        # Increase finished_process_count by 1\n        finished_process_count += 1\n\n    return turn_around_time\n\n\ndef calculate_waiting_time(\n    process_name: list,  # noqa: ARG001\n    turn_around_time: list,\n    burst_time: list,\n    no_of_process: int,\n) -> list:\n    \"\"\"\n    Calculate the waiting time of each processes.\n\n    Return: The waiting time for each process.\n    >>> calculate_waiting_time([\"A\", \"B\", \"C\"], [2, 4, 7], [2, 4, 6], 3)\n    [0, 0, 1]\n    >>> calculate_waiting_time([\"A\", \"B\", \"C\"], [3, 6, 11], [3, 5, 7], 3)\n    [0, 1, 4]\n    \"\"\"\n\n    waiting_time = [0] * no_of_process\n    for i in range(no_of_process):\n        waiting_time[i] = turn_around_time[i] - burst_time[i]\n    return waiting_time\n\n\nif __name__ == \"__main__\":\n    no_of_process = 5\n    process_name = [\"A\", \"B\", \"C\", \"D\", \"E\"]\n    arrival_time = [1, 2, 3, 4, 5]\n    burst_time = [1, 2, 3, 4, 5]\n\n    turn_around_time = calculate_turn_around_time(\n        process_name, arrival_time, burst_time, no_of_process\n    )\n    waiting_time = calculate_waiting_time(\n        process_name, turn_around_time, burst_time, no_of_process\n    )\n\n    print(\"Process name \\tArrival time \\tBurst time \\tTurn around time \\tWaiting time\")\n    for i in range(no_of_process):\n        print(\n            f\"{process_name[i]}\\t\\t{arrival_time[i]}\\t\\t{burst_time[i]}\\t\\t\"\n            f\"{turn_around_time[i]}\\t\\t\\t{waiting_time[i]}\"\n        )\n\n    print(f\"average waiting time : {mean(waiting_time):.5f}\")\n    print(f\"average turn around time : {mean(turn_around_time):.5f}\")\n"
  },
  {
    "path": "scheduling/job_sequence_with_deadline.py",
    "content": "\"\"\"\nGiven a list of tasks, each with a deadline and reward, calculate which tasks can be\ncompleted to yield the maximum reward.  Each task takes one unit of time to complete,\nand we can only work on one task at a time.  Once a task has passed its deadline, it\ncan no longer be scheduled.\n\nExample :\ntasks_info = [(4, 20), (1, 10), (1, 40), (1, 30)]\nmax_tasks will return (2, [2, 0]) -\nScheduling these tasks would result in a reward of 40 + 20\n\nThis problem can be solved using the concept of \"GREEDY ALGORITHM\".\nTime Complexity - O(n log n)\nhttps://medium.com/@nihardudhat2000/job-sequencing-with-deadline-17ddbb5890b5\n\"\"\"\n\nfrom dataclasses import dataclass\nfrom operator import attrgetter\n\n\n@dataclass\nclass Task:\n    task_id: int\n    deadline: int\n    reward: int\n\n\ndef max_tasks(tasks_info: list[tuple[int, int]]) -> list[int]:\n    \"\"\"\n    Create a list of Task objects that are sorted so the highest rewards come first.\n    Return a list of those task ids that can be completed before i becomes too high.\n    >>> max_tasks([(4, 20), (1, 10), (1, 40), (1, 30)])\n    [2, 0]\n    >>> max_tasks([(1, 10), (2, 20), (3, 30), (2, 40)])\n    [3, 2]\n    >>> max_tasks([(9, 10)])\n    [0]\n    >>> max_tasks([(-9, 10)])\n    []\n    >>> max_tasks([])\n    []\n    >>> max_tasks([(0, 10), (0, 20), (0, 30), (0, 40)])\n    []\n    >>> max_tasks([(-1, 10), (-2, 20), (-3, 30), (-4, 40)])\n    []\n    \"\"\"\n    tasks = sorted(\n        (\n            Task(task_id, deadline, reward)\n            for task_id, (deadline, reward) in enumerate(tasks_info)\n        ),\n        key=attrgetter(\"reward\"),\n        reverse=True,\n    )\n    return [task.task_id for i, task in enumerate(tasks, start=1) if task.deadline >= i]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    print(f\"{max_tasks([(4, 20), (1, 10), (1, 40), (1, 30)]) = }\")\n    print(f\"{max_tasks([(1, 10), (2, 20), (3, 30), (2, 40)]) = }\")\n"
  },
  {
    "path": "scheduling/job_sequencing_with_deadline.py",
    "content": "def job_sequencing_with_deadlines(jobs: list) -> list:\n    \"\"\"\n    Function to find the maximum profit by doing jobs in a given time frame\n\n    Args:\n        jobs [list]: A list of tuples of (job_id, deadline, profit)\n\n    Returns:\n        max_profit [int]: Maximum profit that can be earned by doing jobs\n        in a given time frame\n\n    Examples:\n    >>> job_sequencing_with_deadlines(\n    ... [(1, 4, 20), (2, 1, 10), (3, 1, 40), (4, 1, 30)])\n    [2, 60]\n    >>> job_sequencing_with_deadlines(\n    ... [(1, 2, 100), (2, 1, 19), (3, 2, 27), (4, 1, 25), (5, 1, 15)])\n    [2, 127]\n    \"\"\"\n\n    # Sort the jobs in descending order of profit\n    jobs = sorted(jobs, key=lambda value: value[2], reverse=True)\n\n    # Create a list of size equal to the maximum deadline\n    # and initialize it with -1\n    max_deadline = max(jobs, key=lambda value: value[1])[1]\n    time_slots = [-1] * max_deadline\n\n    # Finding the maximum profit and the count of jobs\n    count = 0\n    max_profit = 0\n    for job in jobs:\n        # Find a free time slot for this job\n        # (Note that we start from the last possible slot)\n        for i in range(job[1] - 1, -1, -1):\n            if time_slots[i] == -1:\n                time_slots[i] = job[0]\n                count += 1\n                max_profit += job[2]\n                break\n    return [count, max_profit]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "scheduling/multi_level_feedback_queue.py",
    "content": "from collections import deque\n\n\nclass Process:\n    def __init__(self, process_name: str, arrival_time: int, burst_time: int) -> None:\n        self.process_name = process_name  # process name\n        self.arrival_time = arrival_time  # arrival time of the process\n        # completion time of finished process or last interrupted time\n        self.stop_time = arrival_time\n        self.burst_time = burst_time  # remaining burst time\n        self.waiting_time = 0  # total time of the process wait in ready queue\n        self.turnaround_time = 0  # time from arrival time to completion time\n\n\nclass MLFQ:\n    \"\"\"\n    MLFQ(Multi Level Feedback Queue)\n    https://en.wikipedia.org/wiki/Multilevel_feedback_queue\n    MLFQ has a lot of queues that have different priority\n    In this MLFQ,\n    The first Queue(0) to last second Queue(N-2) of MLFQ have Round Robin Algorithm\n    The last Queue(N-1) has First Come, First Served Algorithm\n    \"\"\"\n\n    def __init__(\n        self,\n        number_of_queues: int,\n        time_slices: list[int],\n        queue: deque[Process],\n        current_time: int,\n    ) -> None:\n        # total number of mlfq's queues\n        self.number_of_queues = number_of_queues\n        # time slice of queues that round robin algorithm applied\n        self.time_slices = time_slices\n        # unfinished process is in this ready_queue\n        self.ready_queue = queue\n        # current time\n        self.current_time = current_time\n        # finished process is in this sequence queue\n        self.finish_queue: deque[Process] = deque()\n\n    def calculate_sequence_of_finish_queue(self) -> list[str]:\n        \"\"\"\n        This method returns the sequence of finished processes\n        >>> P1 = Process(\"P1\", 0, 53)\n        >>> P2 = Process(\"P2\", 0, 17)\n        >>> P3 = Process(\"P3\", 0, 68)\n        >>> P4 = Process(\"P4\", 0, 24)\n        >>> mlfq = MLFQ(3, [17, 25], deque([P1, P2, P3, P4]), 0)\n        >>> _ = mlfq.multi_level_feedback_queue()\n        >>> mlfq.calculate_sequence_of_finish_queue()\n        ['P2', 'P4', 'P1', 'P3']\n        \"\"\"\n        sequence = []\n        for i in range(len(self.finish_queue)):\n            sequence.append(self.finish_queue[i].process_name)\n        return sequence\n\n    def calculate_waiting_time(self, queue: list[Process]) -> list[int]:\n        \"\"\"\n        This method calculates waiting time of processes\n        >>> P1 = Process(\"P1\", 0, 53)\n        >>> P2 = Process(\"P2\", 0, 17)\n        >>> P3 = Process(\"P3\", 0, 68)\n        >>> P4 = Process(\"P4\", 0, 24)\n        >>> mlfq = MLFQ(3, [17, 25], deque([P1, P2, P3, P4]), 0)\n        >>> _ = mlfq.multi_level_feedback_queue()\n        >>> mlfq.calculate_waiting_time([P1, P2, P3, P4])\n        [83, 17, 94, 101]\n        \"\"\"\n        waiting_times = []\n        for i in range(len(queue)):\n            waiting_times.append(queue[i].waiting_time)\n        return waiting_times\n\n    def calculate_turnaround_time(self, queue: list[Process]) -> list[int]:\n        \"\"\"\n        This method calculates turnaround time of processes\n        >>> P1 = Process(\"P1\", 0, 53)\n        >>> P2 = Process(\"P2\", 0, 17)\n        >>> P3 = Process(\"P3\", 0, 68)\n        >>> P4 = Process(\"P4\", 0, 24)\n        >>> mlfq = MLFQ(3, [17, 25], deque([P1, P2, P3, P4]), 0)\n        >>> _ = mlfq.multi_level_feedback_queue()\n        >>> mlfq.calculate_turnaround_time([P1, P2, P3, P4])\n        [136, 34, 162, 125]\n        \"\"\"\n        turnaround_times = []\n        for i in range(len(queue)):\n            turnaround_times.append(queue[i].turnaround_time)\n        return turnaround_times\n\n    def calculate_completion_time(self, queue: list[Process]) -> list[int]:\n        \"\"\"\n        This method calculates completion time of processes\n        >>> P1 = Process(\"P1\", 0, 53)\n        >>> P2 = Process(\"P2\", 0, 17)\n        >>> P3 = Process(\"P3\", 0, 68)\n        >>> P4 = Process(\"P4\", 0, 24)\n        >>> mlfq = MLFQ(3, [17, 25], deque([P1, P2, P3, P4]), 0)\n        >>> _ = mlfq.multi_level_feedback_queue()\n        >>> mlfq.calculate_turnaround_time([P1, P2, P3, P4])\n        [136, 34, 162, 125]\n        \"\"\"\n        completion_times = []\n        for i in range(len(queue)):\n            completion_times.append(queue[i].stop_time)\n        return completion_times\n\n    def calculate_remaining_burst_time_of_processes(\n        self, queue: deque[Process]\n    ) -> list[int]:\n        \"\"\"\n        This method calculate remaining burst time of processes\n        >>> P1 = Process(\"P1\", 0, 53)\n        >>> P2 = Process(\"P2\", 0, 17)\n        >>> P3 = Process(\"P3\", 0, 68)\n        >>> P4 = Process(\"P4\", 0, 24)\n        >>> mlfq = MLFQ(3, [17, 25], deque([P1, P2, P3, P4]), 0)\n        >>> finish_queue, ready_queue = mlfq.round_robin(deque([P1, P2, P3, P4]), 17)\n        >>> mlfq.calculate_remaining_burst_time_of_processes(mlfq.finish_queue)\n        [0]\n        >>> mlfq.calculate_remaining_burst_time_of_processes(ready_queue)\n        [36, 51, 7]\n        >>> finish_queue, ready_queue = mlfq.round_robin(ready_queue, 25)\n        >>> mlfq.calculate_remaining_burst_time_of_processes(mlfq.finish_queue)\n        [0, 0]\n        >>> mlfq.calculate_remaining_burst_time_of_processes(ready_queue)\n        [11, 26]\n        \"\"\"\n        return [q.burst_time for q in queue]\n\n    def update_waiting_time(self, process: Process) -> int:\n        \"\"\"\n        This method updates waiting times of unfinished processes\n        >>> P1 = Process(\"P1\", 0, 53)\n        >>> P2 = Process(\"P2\", 0, 17)\n        >>> P3 = Process(\"P3\", 0, 68)\n        >>> P4 = Process(\"P4\", 0, 24)\n        >>> mlfq = MLFQ(3, [17, 25], deque([P1, P2, P3, P4]), 0)\n        >>> mlfq.current_time = 10\n        >>> P1.stop_time = 5\n        >>> mlfq.update_waiting_time(P1)\n        5\n        \"\"\"\n        process.waiting_time += self.current_time - process.stop_time\n        return process.waiting_time\n\n    def first_come_first_served(self, ready_queue: deque[Process]) -> deque[Process]:\n        \"\"\"\n        FCFS(First Come, First Served)\n        FCFS will be applied to MLFQ's last queue\n        A first came process will be finished at first\n        >>> P1 = Process(\"P1\", 0, 53)\n        >>> P2 = Process(\"P2\", 0, 17)\n        >>> P3 = Process(\"P3\", 0, 68)\n        >>> P4 = Process(\"P4\", 0, 24)\n        >>> mlfq = MLFQ(3, [17, 25], deque([P1, P2, P3, P4]), 0)\n        >>> _ = mlfq.first_come_first_served(mlfq.ready_queue)\n        >>> mlfq.calculate_sequence_of_finish_queue()\n        ['P1', 'P2', 'P3', 'P4']\n        \"\"\"\n        finished: deque[Process] = deque()  # sequence deque of finished process\n        while len(ready_queue) != 0:\n            cp = ready_queue.popleft()  # current process\n\n            # if process's arrival time is later than current time, update current time\n            if self.current_time < cp.arrival_time:\n                self.current_time += cp.arrival_time\n\n            # update waiting time of current process\n            self.update_waiting_time(cp)\n            # update current time\n            self.current_time += cp.burst_time\n            # finish the process and set the process's burst-time 0\n            cp.burst_time = 0\n            # set the process's turnaround time because it is finished\n            cp.turnaround_time = self.current_time - cp.arrival_time\n            # set the completion time\n            cp.stop_time = self.current_time\n            # add the process to queue that has finished queue\n            finished.append(cp)\n\n        self.finish_queue.extend(finished)  # add finished process to finish queue\n        # FCFS will finish all remaining processes\n        return finished\n\n    def round_robin(\n        self, ready_queue: deque[Process], time_slice: int\n    ) -> tuple[deque[Process], deque[Process]]:\n        \"\"\"\n        RR(Round Robin)\n        RR will be applied to MLFQ's all queues except last queue\n        All processes can't use CPU for time more than time_slice\n        If the process consume CPU up to time_slice, it will go back to ready queue\n        >>> P1 = Process(\"P1\", 0, 53)\n        >>> P2 = Process(\"P2\", 0, 17)\n        >>> P3 = Process(\"P3\", 0, 68)\n        >>> P4 = Process(\"P4\", 0, 24)\n        >>> mlfq = MLFQ(3, [17, 25], deque([P1, P2, P3, P4]), 0)\n        >>> finish_queue, ready_queue = mlfq.round_robin(mlfq.ready_queue, 17)\n        >>> mlfq.calculate_sequence_of_finish_queue()\n        ['P2']\n        \"\"\"\n        finished: deque[Process] = deque()  # sequence deque of terminated process\n        # just for 1 cycle and unfinished processes will go back to queue\n        for _ in range(len(ready_queue)):\n            cp = ready_queue.popleft()  # current process\n\n            # if process's arrival time is later than current time, update current time\n            if self.current_time < cp.arrival_time:\n                self.current_time += cp.arrival_time\n\n            # update waiting time of unfinished processes\n            self.update_waiting_time(cp)\n            # if the burst time of process is bigger than time-slice\n            if cp.burst_time > time_slice:\n                # use CPU for only time-slice\n                self.current_time += time_slice\n                # update remaining burst time\n                cp.burst_time -= time_slice\n                # update end point time\n                cp.stop_time = self.current_time\n                # locate the process behind the queue because it is not finished\n                ready_queue.append(cp)\n            else:\n                # use CPU for remaining burst time\n                self.current_time += cp.burst_time\n                # set burst time 0 because the process is finished\n                cp.burst_time = 0\n                # set the finish time\n                cp.stop_time = self.current_time\n                # update the process' turnaround time because it is finished\n                cp.turnaround_time = self.current_time - cp.arrival_time\n                # add the process to queue that has finished queue\n                finished.append(cp)\n\n        self.finish_queue.extend(finished)  # add finished process to finish queue\n        # return finished processes queue and remaining processes queue\n        return finished, ready_queue\n\n    def multi_level_feedback_queue(self) -> deque[Process]:\n        \"\"\"\n        MLFQ(Multi Level Feedback Queue)\n        >>> P1 = Process(\"P1\", 0, 53)\n        >>> P2 = Process(\"P2\", 0, 17)\n        >>> P3 = Process(\"P3\", 0, 68)\n        >>> P4 = Process(\"P4\", 0, 24)\n        >>> mlfq = MLFQ(3, [17, 25], deque([P1, P2, P3, P4]), 0)\n        >>> finish_queue = mlfq.multi_level_feedback_queue()\n        >>> mlfq.calculate_sequence_of_finish_queue()\n        ['P2', 'P4', 'P1', 'P3']\n        \"\"\"\n\n        #  all queues except last one have round_robin algorithm\n        for i in range(self.number_of_queues - 1):\n            _finished, self.ready_queue = self.round_robin(\n                self.ready_queue, self.time_slices[i]\n            )\n        #  the last queue has first_come_first_served algorithm\n        self.first_come_first_served(self.ready_queue)\n\n        return self.finish_queue\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    P1 = Process(\"P1\", 0, 53)\n    P2 = Process(\"P2\", 0, 17)\n    P3 = Process(\"P3\", 0, 68)\n    P4 = Process(\"P4\", 0, 24)\n    number_of_queues = 3\n    time_slices = [17, 25]\n    queue = deque([P1, P2, P3, P4])\n\n    if len(time_slices) != number_of_queues - 1:\n        raise SystemExit(0)\n\n    doctest.testmod(extraglobs={\"queue\": deque([P1, P2, P3, P4])})\n\n    P1 = Process(\"P1\", 0, 53)\n    P2 = Process(\"P2\", 0, 17)\n    P3 = Process(\"P3\", 0, 68)\n    P4 = Process(\"P4\", 0, 24)\n    number_of_queues = 3\n    time_slices = [17, 25]\n    queue = deque([P1, P2, P3, P4])\n    mlfq = MLFQ(number_of_queues, time_slices, queue, 0)\n    finish_queue = mlfq.multi_level_feedback_queue()\n\n    # print total waiting times of processes(P1, P2, P3, P4)\n    print(\n        f\"waiting time:\\\n        \\t\\t\\t{MLFQ.calculate_waiting_time(mlfq, [P1, P2, P3, P4])}\"\n    )\n    # print completion times of processes(P1, P2, P3, P4)\n    print(\n        f\"completion time:\\\n        \\t\\t{MLFQ.calculate_completion_time(mlfq, [P1, P2, P3, P4])}\"\n    )\n    # print total turnaround times of processes(P1, P2, P3, P4)\n    print(\n        f\"turnaround time:\\\n        \\t\\t{MLFQ.calculate_turnaround_time(mlfq, [P1, P2, P3, P4])}\"\n    )\n    # print sequence of finished processes\n    print(\n        f\"sequence of finished processes:\\\n        {mlfq.calculate_sequence_of_finish_queue()}\"\n    )\n"
  },
  {
    "path": "scheduling/non_preemptive_shortest_job_first.py",
    "content": "\"\"\"\nNon-preemptive Shortest Job First\nShortest execution time process is chosen for the next execution.\nhttps://www.guru99.com/shortest-job-first-sjf-scheduling.html\nhttps://en.wikipedia.org/wiki/Shortest_job_next\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom statistics import mean\n\n\ndef calculate_waitingtime(\n    arrival_time: list[int], burst_time: list[int], no_of_processes: int\n) -> list[int]:\n    \"\"\"\n    Calculate the waiting time of each processes\n\n    Return: The waiting time for each process.\n    >>> calculate_waitingtime([0,1,2], [10, 5, 8], 3)\n    [0, 9, 13]\n    >>> calculate_waitingtime([1,2,2,4], [4, 6, 3, 1], 4)\n    [0, 7, 4, 1]\n    >>> calculate_waitingtime([0,0,0], [12, 2, 10],3)\n    [12, 0, 2]\n    \"\"\"\n\n    waiting_time = [0] * no_of_processes\n    remaining_time = [0] * no_of_processes\n\n    # Initialize remaining_time to waiting_time.\n\n    for i in range(no_of_processes):\n        remaining_time[i] = burst_time[i]\n    ready_process: list[int] = []\n\n    completed = 0\n    total_time = 0\n\n    # When processes are not completed,\n    # A process whose arrival time has passed \\\n    # and has remaining execution time is put into the ready_process.\n    # The shortest process in the ready_process, target_process is executed.\n\n    while completed != no_of_processes:\n        ready_process = []\n        target_process = -1\n\n        for i in range(no_of_processes):\n            if (arrival_time[i] <= total_time) and (remaining_time[i] > 0):\n                ready_process.append(i)\n\n        if len(ready_process) > 0:\n            target_process = ready_process[0]\n            for i in ready_process:\n                if remaining_time[i] < remaining_time[target_process]:\n                    target_process = i\n            total_time += burst_time[target_process]\n            completed += 1\n            remaining_time[target_process] = 0\n            waiting_time[target_process] = (\n                total_time - arrival_time[target_process] - burst_time[target_process]\n            )\n        else:\n            total_time += 1\n\n    return waiting_time\n\n\ndef calculate_turnaroundtime(\n    burst_time: list[int], no_of_processes: int, waiting_time: list[int]\n) -> list[int]:\n    \"\"\"\n    Calculate the turnaround time of each process.\n\n    Return: The turnaround time for each process.\n    >>> calculate_turnaroundtime([0,1,2], 3, [0, 10, 15])\n    [0, 11, 17]\n    >>> calculate_turnaroundtime([1,2,2,4], 4, [1, 8, 5, 4])\n    [2, 10, 7, 8]\n    >>> calculate_turnaroundtime([0,0,0], 3, [12, 0, 2])\n    [12, 0, 2]\n    \"\"\"\n\n    turn_around_time = [0] * no_of_processes\n    for i in range(no_of_processes):\n        turn_around_time[i] = burst_time[i] + waiting_time[i]\n    return turn_around_time\n\n\nif __name__ == \"__main__\":\n    print(\"[TEST CASE 01]\")\n\n    no_of_processes = 4\n    burst_time = [2, 5, 3, 7]\n    arrival_time = [0, 0, 0, 0]\n    waiting_time = calculate_waitingtime(arrival_time, burst_time, no_of_processes)\n    turn_around_time = calculate_turnaroundtime(\n        burst_time, no_of_processes, waiting_time\n    )\n\n    # Printing the Result\n    print(\"PID\\tBurst Time\\tArrival Time\\tWaiting Time\\tTurnaround Time\")\n    for i, process_id in enumerate(list(range(1, 5))):\n        print(\n            f\"{process_id}\\t{burst_time[i]}\\t\\t\\t{arrival_time[i]}\\t\\t\\t\\t\"\n            f\"{waiting_time[i]}\\t\\t\\t\\t{turn_around_time[i]}\"\n        )\n    print(f\"\\nAverage waiting time = {mean(waiting_time):.5f}\")\n    print(f\"Average turnaround time = {mean(turn_around_time):.5f}\")\n"
  },
  {
    "path": "scheduling/round_robin.py",
    "content": "\"\"\"\r\nRound Robin is a scheduling algorithm.\r\nIn Round Robin each process is assigned a fixed time slot in a cyclic way.\r\nhttps://en.wikipedia.org/wiki/Round-robin_scheduling\r\n\"\"\"\r\n\r\nfrom __future__ import annotations\r\n\r\nfrom statistics import mean\r\n\r\n\r\ndef calculate_waiting_times(burst_times: list[int]) -> list[int]:\r\n    \"\"\"\r\n    Calculate the waiting times of a list of processes that have a specified duration.\r\n\r\n    Return: The waiting time for each process.\r\n    >>> calculate_waiting_times([10, 5, 8])\r\n    [13, 10, 13]\r\n    >>> calculate_waiting_times([4, 6, 3, 1])\r\n    [5, 8, 9, 6]\r\n    >>> calculate_waiting_times([12, 2, 10])\r\n    [12, 2, 12]\r\n    \"\"\"\r\n    quantum = 2\r\n    rem_burst_times = list(burst_times)\r\n    waiting_times = [0] * len(burst_times)\r\n    t = 0\r\n    while True:\r\n        done = True\r\n        for i, burst_time in enumerate(burst_times):\r\n            if rem_burst_times[i] > 0:\r\n                done = False\r\n                if rem_burst_times[i] > quantum:\r\n                    t += quantum\r\n                    rem_burst_times[i] -= quantum\r\n                else:\r\n                    t += rem_burst_times[i]\r\n                    waiting_times[i] = t - burst_time\r\n                    rem_burst_times[i] = 0\r\n        if done is True:\r\n            return waiting_times\r\n\r\n\r\ndef calculate_turn_around_times(\r\n    burst_times: list[int], waiting_times: list[int]\r\n) -> list[int]:\r\n    \"\"\"\r\n    >>> calculate_turn_around_times([1, 2, 3, 4], [0, 1, 3])\r\n    [1, 3, 6]\r\n    >>> calculate_turn_around_times([10, 3, 7], [10, 6, 11])\r\n    [20, 9, 18]\r\n    \"\"\"\r\n    return [burst + waiting for burst, waiting in zip(burst_times, waiting_times)]\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    burst_times = [3, 5, 7]\r\n    waiting_times = calculate_waiting_times(burst_times)\r\n    turn_around_times = calculate_turn_around_times(burst_times, waiting_times)\r\n    print(\"Process ID \\tBurst Time \\tWaiting Time \\tTurnaround Time\")\r\n    for i, burst_time in enumerate(burst_times):\r\n        print(\r\n            f\"  {i + 1}\\t\\t  {burst_time}\\t\\t  {waiting_times[i]}\\t\\t  \"\r\n            f\"{turn_around_times[i]}\"\r\n        )\r\n    print(f\"\\nAverage waiting time = {mean(waiting_times):.5f}\")\r\n    print(f\"Average turn around time = {mean(turn_around_times):.5f}\")\r\n"
  },
  {
    "path": "scheduling/shortest_job_first.py",
    "content": "\"\"\"\nShortest job remaining first\nPlease note arrival time and burst\nPlease use spaces to separate times entered.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport pandas as pd\n\n\ndef calculate_waitingtime(\n    arrival_time: list[int], burst_time: list[int], no_of_processes: int\n) -> list[int]:\n    \"\"\"\n    Calculate the waiting time of each processes\n    Return: List of waiting times.\n    >>> calculate_waitingtime([1,2,3,4],[3,3,5,1],4)\n    [0, 3, 5, 0]\n    >>> calculate_waitingtime([1,2,3],[2,5,1],3)\n    [0, 2, 0]\n    >>> calculate_waitingtime([2,3],[5,1],2)\n    [1, 0]\n    \"\"\"\n    remaining_time = [0] * no_of_processes\n    waiting_time = [0] * no_of_processes\n    # Copy the burst time into remaining_time[]\n    for i in range(no_of_processes):\n        remaining_time[i] = burst_time[i]\n\n    complete = 0\n    increment_time = 0\n    minm = 999999999\n    short = 0\n    check = False\n\n    # Process until all processes are completed\n    while complete != no_of_processes:\n        for j in range(no_of_processes):\n            if (\n                arrival_time[j] <= increment_time\n                and remaining_time[j] > 0\n                and remaining_time[j] < minm\n            ):\n                minm = remaining_time[j]\n                short = j\n                check = True\n\n        if not check:\n            increment_time += 1\n            continue\n        remaining_time[short] -= 1\n\n        minm = remaining_time[short]\n        if minm == 0:\n            minm = 999999999\n\n        if remaining_time[short] == 0:\n            complete += 1\n            check = False\n\n            # Find finish time of current process\n            finish_time = increment_time + 1\n\n            # Calculate waiting time\n            finar = finish_time - arrival_time[short]\n            waiting_time[short] = finar - burst_time[short]\n\n            waiting_time[short] = max(waiting_time[short], 0)\n\n        # Increment time\n        increment_time += 1\n    return waiting_time\n\n\ndef calculate_turnaroundtime(\n    burst_time: list[int], no_of_processes: int, waiting_time: list[int]\n) -> list[int]:\n    \"\"\"\n    Calculate the turn around time of each Processes\n    Return: list of turn around times.\n    >>> calculate_turnaroundtime([3,3,5,1], 4, [0,3,5,0])\n    [3, 6, 10, 1]\n    >>> calculate_turnaroundtime([3,3], 2, [0,3])\n    [3, 6]\n    >>> calculate_turnaroundtime([8,10,1], 3, [1,0,3])\n    [9, 10, 4]\n    \"\"\"\n    turn_around_time = [0] * no_of_processes\n    for i in range(no_of_processes):\n        turn_around_time[i] = burst_time[i] + waiting_time[i]\n    return turn_around_time\n\n\ndef calculate_average_times(\n    waiting_time: list[int], turn_around_time: list[int], no_of_processes: int\n) -> None:\n    \"\"\"\n    This function calculates the average of the waiting & turnaround times\n    Prints: Average Waiting time & Average Turn Around Time\n    >>> calculate_average_times([0,3,5,0],[3,6,10,1],4)\n    Average waiting time = 2.00000\n    Average turn around time = 5.0\n    >>> calculate_average_times([2,3],[3,6],2)\n    Average waiting time = 2.50000\n    Average turn around time = 4.5\n    >>> calculate_average_times([10,4,3],[2,7,6],3)\n    Average waiting time = 5.66667\n    Average turn around time = 5.0\n    \"\"\"\n    total_waiting_time = 0\n    total_turn_around_time = 0\n    for i in range(no_of_processes):\n        total_waiting_time = total_waiting_time + waiting_time[i]\n        total_turn_around_time = total_turn_around_time + turn_around_time[i]\n    print(f\"Average waiting time = {total_waiting_time / no_of_processes:.5f}\")\n    print(\"Average turn around time =\", total_turn_around_time / no_of_processes)\n\n\nif __name__ == \"__main__\":\n    print(\"Enter how many process you want to analyze\")\n    no_of_processes = int(input())\n    burst_time = [0] * no_of_processes\n    arrival_time = [0] * no_of_processes\n    processes = list(range(1, no_of_processes + 1))\n\n    for i in range(no_of_processes):\n        print(\"Enter the arrival time and burst time for process:--\" + str(i + 1))\n        arrival_time[i], burst_time[i] = map(int, input().split())\n\n    waiting_time = calculate_waitingtime(arrival_time, burst_time, no_of_processes)\n\n    bt = burst_time\n    n = no_of_processes\n    wt = waiting_time\n    turn_around_time = calculate_turnaroundtime(bt, n, wt)\n\n    calculate_average_times(waiting_time, turn_around_time, no_of_processes)\n\n    fcfs = pd.DataFrame(\n        list(zip(processes, burst_time, arrival_time, waiting_time, turn_around_time)),\n        columns=[\n            \"Process\",\n            \"BurstTime\",\n            \"ArrivalTime\",\n            \"WaitingTime\",\n            \"TurnAroundTime\",\n        ],\n    )\n\n    # Printing the dataFrame\n    pd.set_option(\"display.max_rows\", fcfs.shape[0] + 1)\n    print(fcfs)\n"
  },
  {
    "path": "scripts/README.md",
    "content": "Dealing with the onslaught of Hacktoberfest\n* https://hacktoberfest.com\n\nEach year, October brings a swarm of new contributors participating in Hacktoberfest.  This event has its pros and cons, but it presents a monumental workload for the few active maintainers of this repo.  The maintainer workload is further impacted by a new version of CPython being released in the first week of each October.\n\nTo help make our algorithms more valuable to visitors, our CONTRIBUTING.md file outlines several strict requirements, such as tests, type hints, descriptive names, functions, and/or classes. Maintainers reviewing pull requests should try to encourage improvements to meet these goals, but when the workload becomes overwhelming (esp. in October), pull requests that do not meet these goals should be closed.\n\nBelow are a few [`gh`](https://cli.github.com) scripts that should close pull requests that do not match the definition of an acceptable algorithm as defined in CONTRIBUTING.md.  I tend to run these scripts in the following order.\n\n* close_pull_requests_with_require_descriptive_names.sh\n* close_pull_requests_with_require_tests.sh\n* close_pull_requests_with_require_type_hints.sh\n* close_pull_requests_with_failing_tests.sh\n* close_pull_requests_with_awaiting_changes.sh\n* find_git_conflicts.sh\n\n### Run on 14 Oct 2025: 107 of 541 (19.77%) pull requests closed.\n\nScript run | Open pull requests | Pull requests closed\n--- | --- | ---\nNone | 541 | 0\nrequire_descriptive_names | 515 | 26\nrequire_tests | 498 | 17\nrequire_type_hints | 496 | 2\nfailing_tests | 438 | ___58___\nawaiting_changes | 434 | 4\ngit_conflicts | [ broken ] | 0\n"
  },
  {
    "path": "scripts/__init__.py",
    "content": ""
  },
  {
    "path": "scripts/build_directory_md.py",
    "content": "#!/usr/bin/env python3\n\nimport os\nfrom collections.abc import Iterator\n\n\ndef good_file_paths(top_dir: str = \".\") -> Iterator[str]:\n    for dir_path, dir_names, filenames in os.walk(top_dir):\n        dir_names[:] = [\n            d\n            for d in dir_names\n            if d != \"scripts\" and d[0] not in \"._\" and \"venv\" not in d\n        ]\n        for filename in filenames:\n            if filename == \"__init__.py\":\n                continue\n            if os.path.splitext(filename)[1] in (\".py\", \".ipynb\"):\n                yield os.path.join(dir_path, filename).lstrip(\"./\")\n\n\ndef md_prefix(indent: int) -> str:\n    \"\"\"\n    Markdown prefix based on indent for bullet points\n\n    >>> md_prefix(0)\n    '\\\\n##'\n    >>> md_prefix(1)\n    '  *'\n    >>> md_prefix(2)\n    '    *'\n    >>> md_prefix(3)\n    '      *'\n    \"\"\"\n    return f\"{indent * '  '}*\" if indent else \"\\n##\"\n\n\ndef print_path(old_path: str, new_path: str) -> str:\n    old_parts = old_path.split(os.sep)\n    for i, new_part in enumerate(new_path.split(os.sep)):\n        if (i + 1 > len(old_parts) or old_parts[i] != new_part) and new_part:\n            print(f\"{md_prefix(i)} {new_part.replace('_', ' ').title()}\")\n    return new_path\n\n\ndef print_directory_md(top_dir: str = \".\") -> None:\n    old_path = \"\"\n    for filepath in sorted(good_file_paths(top_dir)):\n        filepath, filename = os.path.split(filepath)\n        if filepath != old_path:\n            old_path = print_path(old_path, filepath)\n        indent = (filepath.count(os.sep) + 1) if filepath else 0\n        url = f\"{filepath}/{filename}\".replace(\" \", \"%20\")\n        filename = os.path.splitext(filename.replace(\"_\", \" \").title())[0]\n        print(f\"{md_prefix(indent)} [{filename}]({url})\")\n\n\nif __name__ == \"__main__\":\n    print_directory_md(\".\")\n"
  },
  {
    "path": "scripts/close_pull_requests_with_awaiting_changes.sh",
    "content": "#!/bin/bash\n\n# List all open pull requests\nprs=$(gh pr list --state open --json number,title,labels --limit 500)\n\n# Loop through each pull request\necho \"$prs\" | jq -c '.[]' | while read -r pr; do\n  pr_number=$(echo \"$pr\" | jq -r '.number')\n  pr_title=$(echo \"$pr\" | jq -r '.title')\n  pr_labels=$(echo \"$pr\" | jq -r '.labels')\n\n  # Check if the \"awaiting changes\" label is present\n  awaiting_changes=$(echo \"$pr_labels\" | jq -r '.[] | select(.name == \"awaiting changes\")')\n  echo \"Checking PR #$pr_number $pr_title ($awaiting_changes) ($pr_labels)\"\n\n  # If awaiting_changes, close the pull request\n  if [[ -n \"$awaiting_changes\" ]]; then\n    echo \"Closing PR #$pr_number $pr_title due to awaiting_changes label\"\n    gh pr close \"$pr_number\" --comment \"Closing awaiting_changes PRs to prepare for Hacktoberfest\"\n    sleep 2\n  fi\ndone\n"
  },
  {
    "path": "scripts/close_pull_requests_with_failing_tests.sh",
    "content": "#!/bin/bash\n\n# List all open pull requests\nprs=$(gh pr list --state open --json number,title,labels --limit 500)\n\n# Loop through each pull request\necho \"$prs\" | jq -c '.[]' | while read -r pr; do\n  pr_number=$(echo \"$pr\" | jq -r '.number')\n  pr_title=$(echo \"$pr\" | jq -r '.title')\n  pr_labels=$(echo \"$pr\" | jq -r '.labels')\n\n  # Check if the \"tests are failing\" label is present\n  tests_are_failing=$(echo \"$pr_labels\" | jq -r '.[] | select(.name == \"tests are failing\")')\n  echo \"Checking PR #$pr_number $pr_title ($tests_are_failing) ($pr_labels)\"\n\n  # If there are failing tests, close the pull request\n  if [[ -n \"$tests_are_failing\" ]]; then\n    echo \"Closing PR #$pr_number $pr_title due to tests_are_failing label\"\n    gh pr close \"$pr_number\" --comment \"Closing tests_are_failing PRs to prepare for Hacktoberfest\"\n    sleep 2\n  fi\ndone\n"
  },
  {
    "path": "scripts/close_pull_requests_with_require_descriptive_names.sh",
    "content": "#!/bin/bash\n\n# List all open pull requests\nprs=$(gh pr list --state open --json number,title,labels --limit 500)\n\n# Loop through each pull request\necho \"$prs\" | jq -c '.[]' | while read -r pr; do\n  pr_number=$(echo \"$pr\" | jq -r '.number')\n  pr_title=$(echo \"$pr\" | jq -r '.title')\n  pr_labels=$(echo \"$pr\" | jq -r '.labels')\n\n  # Check if the \"require descriptive names\" label is present\n  require_descriptive_names=$(echo \"$pr_labels\" | jq -r '.[] | select(.name == \"require descriptive names\")')\n  echo \"Checking PR #$pr_number $pr_title ($require_descriptive_names) ($pr_labels)\"\n\n  # If there are require_descriptive_names, close the pull request\n  if [[ -n \"$require_descriptive_names\" ]]; then\n    echo \"Closing PR #$pr_number $pr_title due to require_descriptive_names label\"\n    gh pr close \"$pr_number\" --comment \"Closing require_descriptive_names PRs to prepare for Hacktoberfest\"\n  fi\ndone\n"
  },
  {
    "path": "scripts/close_pull_requests_with_require_tests.sh",
    "content": "#!/bin/bash\n\n# List all open pull requests\nprs=$(gh pr list --state open --json number,title,labels --limit 500)\n\n# Loop through each pull request\necho \"$prs\" | jq -c '.[]' | while read -r pr; do\n  pr_number=$(echo \"$pr\" | jq -r '.number')\n  pr_title=$(echo \"$pr\" | jq -r '.title')\n  pr_labels=$(echo \"$pr\" | jq -r '.labels')\n\n  # Check if the \"require_tests\" label is present\n  require_tests=$(echo \"$pr_labels\" | jq -r '.[] | select(.name == \"require tests\")')\n  echo \"Checking PR #$pr_number $pr_title ($require_tests) ($pr_labels)\"\n\n  # If there require tests, close the pull request\n  if [[ -n \"$require_tests\" ]]; then\n    echo \"Closing PR #$pr_number $pr_title due to require_tests label\"\n    gh pr close \"$pr_number\" --comment \"Closing require_tests PRs to prepare for Hacktoberfest\"\n    # sleep 2\n  fi\ndone\n"
  },
  {
    "path": "scripts/close_pull_requests_with_require_type_hints.sh",
    "content": "#!/bin/bash\n\n# List all open pull requests\nprs=$(gh pr list --state open --json number,title,labels --limit 500)\n\n# Loop through each pull request\necho \"$prs\" | jq -c '.[]' | while read -r pr; do\n  pr_number=$(echo \"$pr\" | jq -r '.number')\n  pr_title=$(echo \"$pr\" | jq -r '.title')\n  pr_labels=$(echo \"$pr\" | jq -r '.labels')\n\n  # Check if the \"require type hints\" label is present\n  require_type_hints=$(echo \"$pr_labels\" | jq -r '.[] | select(.name == \"require type hints\")')\n  echo \"Checking PR #$pr_number $pr_title ($require_type_hints) ($pr_labels)\"\n\n  # If require_type_hints, close the pull request\n  if [[ -n \"$require_type_hints\" ]]; then\n    echo \"Closing PR #$pr_number $pr_title due to require_type_hints label\"\n    gh pr close \"$pr_number\" --comment \"Closing require_type_hints PRs to prepare for Hacktoberfest\"\n  fi\ndone\n"
  },
  {
    "path": "scripts/find_git_conflicts.sh",
    "content": "#!/bin/bash\n\n# Replace with your repository (format: owner/repo)\nREPO=\"TheAlgorithms/Python\"\n\n# Fetch open pull requests with conflicts into a variable\necho \"Checking for pull requests with conflicts in $REPO...\"\n\nprs=$(gh pr list --repo \"$REPO\" --state open --json number,title,mergeable --jq '.[] | select(.mergeable == \"CONFLICTING\") | {number, title}' --limit 500)\n\n# Process each conflicting PR\necho \"$prs\" | jq -c '.[]' | while read -r pr; do\n    PR_NUMBER=$(echo \"$pr\" | jq -r '.number')\n    PR_TITLE=$(echo \"$pr\" | jq -r '.title')\n    echo \"PR #$PR_NUMBER - $PR_TITLE has conflicts.\"\ndone\n"
  },
  {
    "path": "scripts/project_euler_answers.json",
    "content": "{\n  \"001\": \"c0b20f4665d0388d564f0b6ecf3edc9f9480cb15fff87198b95701d9f5fe1f7b\",\n  \"002\": \"1f5882e19314ac13acca52ad5503184b3cb1fd8dbeea82e0979d799af2361704\",\n  \"003\": \"5c09f0554518a413e58e6bc5964ba90655713483d0b2bbc94572ad6b0b4dda28\",\n  \"004\": \"aa74f52b4c428d89606b411bc165eb81a6266821ecc9b4f30cdb70c5c930f4d9\",\n  \"005\": \"1ba90ab11bfb2d2400545337212b0de2a5c7f399215175ade6396e91388912b1\",\n  \"006\": \"537942be3eb323c507623a6a73fa87bf5aeb97b7c7422993a82aa7c15f6d9cd6\",\n  \"007\": \"ecbe74e25cfa4763dbc304ccac2ffb9912e9625cd9993a84bd0dd6d7dc0ca021\",\n  \"008\": \"b9fb30b6553415e9150051ce5710a93d0f55b22557c0068d8e16619a388f145a\",\n  \"009\": \"d912d9d473ef86f12da1fb2011c5c0c155bd3a0ebdb4bbd7ea275cecdcb63731\",\n  \"010\": \"bed2d160e02f0540f19a64ca738aacb79cfcd08ba7e2421567b16cb6e7e3e90e\",\n  \"011\": \"9ded5bc849d33e477aa9c944138d34f0aacc485a372e84464e8a572712a5b7da\",\n  \"012\": \"3e7be445b6c19e6db58c2482005c1f78cb74011a4279249ca632011a9f1b61a2\",\n  \"013\": \"3cb265a96c5645a9ad11d47551f015c25f3f99792c951617656d84626fbc4868\",\n  \"014\": \"78a262dd40eba0f7195686ec7f3891a39437523456f8d16fa9065a34409eeac6\",\n  \"015\": \"7b8f812ca89e311e1b16b903de76fa7b0800a939b3028d9dc4d35f6fa4050281\",\n  \"016\": \"a6f988d30328bd706c66f8ac0d92aac21dd732149cdd69cb31f459dca20c5abe\",\n  \"017\": \"1a455b216c6e916943acf3fa4c7e57a7a5cac66d97cc51befca810c223ef9c23\",\n  \"018\": \"fde3f2e7127f6810eb4160bf7bb0563240d78c9d75a9a590b6d6244748a7f4ff\",\n  \"019\": \"284de502c9847342318c17d474733ef468fbdbe252cddf6e4b4be0676706d9d0\",\n  \"020\": \"c86a2932e1c79343a3c16fb218b9944791aaeedd3e30c87d1c7f505c0e588f7c\",\n  \"021\": \"e8c6ef4a1736a245b5682e0262c5c43862cfb233ca5e286be2f5bb4d8a974ecf\",\n  \"022\": \"85148c096c25e3ed3da55c7e9c89448018b0f5f53ad8d042129c33d9beac6736\",\n  \"023\": \"42e2552a2f589e021824339e2508629ffa00b3489ea467f47e77a1ea97e735c9\",\n  \"024\": \"4677b3d9daa3b30a9665e4558f826e04f7833dda886b8ef24f7176519a0db537\",\n  \"025\": \"7d398da8791745001b3d1c41030676d1c036687eb1ab32e0b5a1832e7579c073\",\n  \"026\": \"fbe10beedf9d29cf53137ba38859ffd1dbe7642cedb7ef0a102a3ab109b47842\",\n  \"027\": \"e4110e0852a2f70703f0081fc91c4a20f595919a038729cb37c564d68b875c6f\",\n  \"028\": \"261171a770d594f6a7fc76c1a839eda7f6dd4e9495e00e75048578fc86d8adf0\",\n  \"029\": \"a207c35d8417aeed4c9e78bcf83f936cd8191c702893be62aa690ce16bc909ca\",\n  \"030\": \"46e68e4199ab0a663ab306651528b06756556c9f0d8b819095af45e036dfbe6b\",\n  \"031\": \"8de34b4ba97b184c7a2096b9266776175242b87d67bc8d77d7289be6f70cd105\",\n  \"032\": \"0d246750daa7f1b367a21f55da454ddc8f62e0a95d163062e9b9273320d5130f\",\n  \"033\": \"ad57366865126e55649ecb23ae1d48887544976efea46a48eb5d85a6eeb4d306\",\n  \"034\": \"728b8d7d6d5d34cad9cbb7c3ea15f807ae57144594b1740b3c73b82314ccd1ed\",\n  \"035\": \"02d20bbd7e394ad5999a4cebabac9619732c343a4cac99470c03e23ba2bdc2bc\",\n  \"036\": \"9480c0160719234b57defc0681c0949a175ffb3ff4a3bf5e8163ac843f383f35\",\n  \"037\": \"e9800abda89919edac504e90dac91f95e0778e3ba0f21a0bac4e77a84766eaaf\",\n  \"038\": \"b2004522103364a6e842b9d042c0707d79af68dec7810078729d061fb7948912\",\n  \"039\": \"fd0f7e53c5b02b688a57ee37f3d52065cb168a7b9fd5a3abd93d37e1559fbd30\",\n  \"040\": \"d29d53701d3c859e29e1b90028eec1ca8e2f29439198b6e036c60951fb458aa1\",\n  \"041\": \"bf05020e70de94e26dba112bb6fb7b0755db5ca88c7225e99187c5a08c8a0428\",\n  \"042\": \"79d6eaa2676189eb927f2e16a70091474078e2117c3fc607d35cdc6b591ef355\",\n  \"043\": \"6512f20c244844b6130204379601855098826afa1b55ff91c293c853ddf67db5\",\n  \"044\": \"97e2524fd3796e83b06c0f89fdcb16e4c544e76e9c0496f57ac84834869f4cc3\",\n  \"045\": \"8b0300d71656b9cf0716318be9453c99a13bb8644d227fd683d06124e6a28b35\",\n  \"046\": \"8485ee802cc628b8cbd82476133d11b57af87e00711516a703525a9af0193b12\",\n  \"047\": \"c7274da71333bd93201fa1e05b1ed54e0074d83f259bd7148c70ddc43082bde1\",\n  \"048\": \"743d17cbff06ab458b99ecbb32e1d6bb9a7ff2ac804118f7743177dd969cfc61\",\n  \"049\": \"47c6094ff1ff6e37788def89190c8256619ef1511681c503fea02c171569d16e\",\n  \"050\": \"6ee74ef623df9fb69facd30b91ed78fe70370462bb267097f0dfeef9d9b057bb\",\n  \"051\": \"d17cec28356b4f9a7f1ec0f20cca4c89e270aeb0e75d70d485b05bb1f28e9f6d\",\n  \"052\": \"ebd72b510911af3e254a030cd891cb804e1902189eee7a0f6199472eb5e4dba2\",\n  \"053\": \"9705cc6128a60cc22581217b715750a6053b2ddda67cc3af7e14803b27cf0c1f\",\n  \"054\": \"12e2c8df501501b2bb531e941a737ffa7a2a491e849c5c5841e3b6132291bc35\",\n  \"055\": \"9f484139a27415ae2e8612bf6c65a8101a18eb5e9b7809e74ca63a45a65f17f4\",\n  \"056\": \"3658d7fa3c43456f3c9c87db0490e872039516e6375336254560167cc3db2ea2\",\n  \"057\": \"620c9c332101a5bae955c66ae72268fbcd3972766179522c8deede6a249addb7\",\n  \"058\": \"196f327021627b6a48db9c6e0a3388d110909d4bb957eb3fbc90ff1ecbda42cb\",\n  \"059\": \"0295239a9d71f7452b93e920b7e0e462f712af5444579d25e06b9614ed77de74\",\n  \"060\": \"ad7c26db722221bfb1bf7e3c36b501bedf8be857b1cfa8664fccb074b54354f9\",\n  \"061\": \"94e4fb283c1abcccae4b8b28e39a294a323cdc9732c3d3ce1133c518d0a286f6\",\n  \"062\": \"d25a595036aa8722157aca38f90084acb369b00df1070f49e203d5a3b7a0736d\",\n  \"063\": \"0e17daca5f3e175f448bacace3bc0da47d0655a74c8dd0dc497a3afbdad95f1f\",\n  \"064\": \"6d62aa4b52071e39f064a930d190b85ab327eb1a5045a8050ac538666ee765ca\",\n  \"065\": \"1c6c0bb2c7ecdc3be8e134f79b9de45155258c1f554ae7542dce48f5cc8d63f0\",\n  \"066\": \"316c0f93c7fe125865d85d6e7e7a31b79e9a46c414c45078b732080fa22ef2a3\",\n  \"067\": \"53f66b6783cb7552d83015df01b0d5229569fce1dd7d1856335c7244b9a3ded6\",\n  \"068\": \"4bf689d09a156621220881a2264dc031b2bfb181213b26d6ff2c338408cf94c3\",\n  \"069\": \"79555e4b891e2885525c136f8b834cc0b1e9416960b12e371111a5cb2da0479f\",\n  \"070\": \"08c6a7c8c06a01d2b17993ada398084b0707652bcfbd580f9173bcddf120ac2c\",\n  \"071\": \"63f032489227c969135c6a6571fe9b33d6970dc6eca32c2086c61a4a099c98fa\",\n  \"072\": \"9ef8a4249d4b8f24147ab6e9ad2536eb04f10fb886a8099e88e0e7c41cf7c616\",\n  \"073\": \"ae9f9c786cd0f24fe03196d5061545862d87a208580570d46e2cfb371319aa68\",\n  \"074\": \"b7c7470e59e2a2df1bfd0a4705488ee6fe0c5c125de15cccdfab0e00d6c03dc0\",\n  \"075\": \"8a426e100572b8e2ea7c1b404a1ee694699346632cf4942705c54f05162bc07a\",\n  \"076\": \"81c54809c3bdfc23f844fde21ae645525817b6e1bee1525270f49282888a5546\",\n  \"077\": \"7f2253d7e228b22a08bda1f09c516f6fead81df6536eb02fa991a34bb38d9be8\",\n  \"078\": \"71374036b661ac8ffe4b78c191050c3ccd1c956ca8a5f465ea1956f7ce571f63\",\n  \"079\": \"2df095aea1862ebfed8df7fb26e8c4a518ca1a8f604a31cfba9da991fc1d6422\",\n  \"080\": \"58bfe3a44f8ae452aaa6ef6267bafc3e841cfe7f9672bdfeb841d2e3a62c1587\",\n  \"081\": \"04bad90d08bdf11010267ec9d1c9bbb49a813194dace245868ea8140aec9a1f7\",\n  \"082\": \"52c42c55daea3131d5357498b8a0ddcf99d1babd16f6ccaee67cb3d0a665b772\",\n  \"083\": \"a825281bc5ce8fe70d66a04e96314e7de070f11fed0f78bc81e007ca7c92e8b0\",\n  \"084\": \"692a776beae0e92d1121fed36427c10d0860344614ead6b4760d1b7091a6ab1f\",\n  \"085\": \"7b2e7211fb4f4d8352c9215c591252344775c56d58b9a5ff88bda8358628ec4e\",\n  \"086\": \"8ffe8459134b46975acd31df13a50c51dbeacf1c19a764bf1602ba7c73ffc8fb\",\n  \"087\": \"cec1917df3b3ee1f43b3468596ed3042df700dc7a752fefc06c4142a2832995d\",\n  \"088\": \"c06356fdcaff01810e1f794263f3e44a75f28e8902a145a0d01a1fff77614722\",\n  \"089\": \"0df5486b7bca884d5f00c502e216f734b2865b202397f24bca25ac9b8a95ab4a\",\n  \"090\": \"cb69775effd93fc34ef38dfbfcdc4c593b1a3d8e7ab70c0f05d627dbc5cbd298\",\n  \"091\": \"327f057e054d1e6a9a1be4ac6acc4b1dedc63d8a88222396ffe98b3194067347\",\n  \"092\": \"538cd20a275b610698691d714b2adf4e4c321915def05667f4d25d97413ec076\",\n  \"093\": \"d8ed8ca27d83a63df6982905ea53b4613b9d7974edcee06f301cf43d63177f47\",\n  \"094\": \"d1b79281d95ce5bfa848060de4e0c80af2c3cae1ff7453cca31ff31e2d67ac14\",\n  \"095\": \"0a3ddcd71cf30a567070630f947ab79fc168865ba0bf112aed9b71fb4e76c32f\",\n  \"096\": \"9c527d233befbf357335e18e6dd5b14ef3a62e19ef34f90bd3fb9e5a2a0a0111\",\n  \"097\": \"f0e2911e303617c9648692ee8056beeb045d89e469315716abed47cd94a3cd56\",\n  \"098\": \"ededac5db280586f534cde4f69ce2c134d2360d6b5da3c3ebc400494cc016e78\",\n  \"099\": \"92c5fd0421c1d619cbf1bdba83a207261f2c5f764aed46db9b4d2de03b72b654\",\n  \"100\": \"993189cbf49fef4c913aa081f2ef44d360b84bf33d19df93fce4663ac34e9927\",\n  \"101\": \"e8539f8b271851cad65d551354874d3086fa9ff7b6f6a2ab9890d63f5ba16c68\",\n  \"102\": \"9d693eeee1d1899cbc50b6d45df953d3835acf28ee869879b45565fccc814765\",\n  \"103\": \"1f17277005b8d58ad32f2cbee4c482cb8c0f3687c3cfe764ec30ee99827c3b1d\",\n  \"104\": \"87dfcf5471e77980d098ff445701dbada0f6f7bac2fa5e43fa7685ec435040e1\",\n  \"105\": \"a76f4e7fa1357a955743d5c0acb2e641c50bcaf0eec27eb4aaffebb45fe12994\",\n  \"106\": \"197f5e68d1e83af7e40a7c7717acc6a99767bf8c53eece9253131a3790a02063\",\n  \"107\": \"bf13bc90121776d7de3c4c3ca4c400a4c12284c3da684b3d530113236813ce81\",\n  \"108\": \"3dea386e2c4a8a0633b667fdd4beacd8bb3fe27c282f886c828ad7d6b42c2d73\",\n  \"109\": \"735cc3e619b9a1e3ac503ba5195c43c02d968113fd3795373ca085ed7777b54d\",\n  \"110\": \"01b4e8163485356b46f612c9d40ed4b8602621d4d02289623e7dbb3dcbe03395\",\n  \"111\": \"97c1b054c094337ec1397cd5ccdf6c9efe1067ad16f531824a94eaadb3c0953b\",\n  \"112\": \"c99c843e0f6d6566132d97c829780332218e005efc14b633e25a5badb912d63a\",\n  \"113\": \"8dbc8319e5d8923ef7ab42108341ee2c32a34ffc0d19d5ae5677f1564813314a\",\n  \"114\": \"b3b9ebc9f9ddadb6b630eeef5d7ba724b3bb4d071b249318093eb7547949bbb9\",\n  \"115\": \"80c3cd40fa35f9088b8741bd8be6153de05f661cfeeb4625ffbf5f4a6c3c02c4\",\n  \"116\": \"a39208d7130682b772d6206acd746bc3779cc1bc0033f0a472e97993d0a32d5b\",\n  \"117\": \"54201fbc7a70d21c1b0acede7708f1658d8e87032ab666001e888e7887c67d50\",\n  \"118\": \"834e6235764ae632737ebf7cd0be66634c4fb70fe1e55e858efd260a66a0e3a9\",\n  \"119\": \"bcabd9609d7293a3a3f1640c2937e302fa52ff03a95c117f87f2c465817eba5e\",\n  \"120\": \"2bd8cabf5aecfcadde03beda142ac26c00b6ccfc59fdcb685672cd79a92f63a6\",\n  \"121\": \"5292478e83f6b244c7c7c5c1fe272121abdc2982f66ed11fcbc6ea7e73af124d\",\n  \"122\": \"6d78b19a042a64f08cc4df0d42fb91cd757829718e60e82a54e3498f03f3ef32\",\n  \"123\": \"057b9b6e49d03958b3f38e812d2cfdd0f500e35e537b4fa9afedd2f3444db8a2\",\n  \"124\": \"d251170c5287da10bffc1ac8af344e0c434ef5f649fd430fcf1049f90d45cf45\",\n  \"125\": \"e9b7a676dc359ffce7075886373af79e3348ddbf344502614d9940eecd0532c1\",\n  \"126\": \"38752ed2e711a3c001d5139cb3c945c0f780939db4ea80d68f31e6763b11cfba\",\n  \"127\": \"e707d9f315269a34d94d9d9fa4f8b29328e66b53447ef38419c6033e57d5d123\",\n  \"128\": \"5e15922fba7f61ddccb2ee579b5ec35034cc32def25ff156ae2b0a3e98c4414e\",\n  \"129\": \"3cc4ad1254491787f52a66e595dbb573e13ceb554c51d81e42d5490a575da070\",\n  \"130\": \"7a6e9899cccb6a01e05013c622422717f54853f7f2581bc3b88a78b25981da08\",\n  \"131\": \"4a8596a7790b5ca9e067da401c018b3206befbcf95c38121854d1a0158e7678a\",\n  \"132\": \"ed77e05f47f7f19f09cae9b272bfd6daa1682b426d39dcb7f473234c0c9381c5\",\n  \"133\": \"e456d3fec55d88653dd88c3f8bbde1f8240c8ceb7882016d19e6f329e412a4ae\",\n  \"134\": \"b144116982f4f0930038299efbdd56afc1528ef59047fb75bade8777309fde4b\",\n  \"135\": \"0709e1008834c2ca8648376ac62d74ac8df5457069cbfedf2b0776dab07a3c5b\",\n  \"136\": \"84692ebaa4fc17e9cfce27126b3fc5a92c1e33e1d94658de0544f8b35a597592\",\n  \"137\": \"6eca481578c967fb9373fe4ce7930b39d8eefe1c0c9c7cb5af241a766bd4dfbc\",\n  \"138\": \"1b5f0f504917592dea2e878497b0e12655366f2a7a163e0a081d785124982d2c\",\n  \"139\": \"0d2f26ec4004c99171fc415282ec714afa617208480b45aeb104c039dc653f5d\",\n  \"140\": \"78ceab5e434a86a6a6bb4f486707bffaf536ef6cb2cc5b45a90b3edd89a03283\",\n  \"141\": \"d74ae4b07f05779065fb038b35d85a21444ed3bed2373f51d9e22d85a16a704c\",\n  \"142\": \"f59af8b0b63a3d0eb580405092c1539261aec18890ea5b6d6e2d93697d67cd38\",\n  \"143\": \"66e9d1093f00eef9a32e704232219f462138f13c493cc0775c507cf51cb231ed\",\n  \"144\": \"09a1b036b82baba3177d83c27c1f7d0beacaac6de1c5fdcc9680c49f638c5fb9\",\n  \"145\": \"b910b9b7bf3c3f071e410e0474958931a022d20c717a298a568308250ed2b0da\",\n  \"146\": \"5292f0166523ea1a89c9f7f2d69064dee481a7d3c119841442cd36f03c42b657\",\n  \"147\": \"cdb162a8a376b1df385dac44ce7b10777c9fea049961cb303078ebbd08d70de8\",\n  \"148\": \"54f631973f7bc002a958b818a1e99e2fc1a91c41eafe19b9136fac9a4eb8d7b8\",\n  \"149\": \"c49382eb9fc41e750239ac7b209513a266e80a268c83cf4d0c79f571629bac48\",\n  \"150\": \"c89b0574a2e2f4a63845fe0fd9d51122d9d4149d887995051c3e53d2244bba41\",\n  \"151\": \"5d09e3b57ced9fd215acc96186743e422ce48900b8992c9b6c74d3e4117e4140\",\n  \"152\": \"c3ea99f86b2f8a74ef4145bb245155ff5f91cd856f287523481c15a1959d5fd1\",\n  \"153\": \"fb57f89f289ee59c36cede64d2d13828b8997766b49aa4530aabfc18ff4a4f17\",\n  \"154\": \"c877d90a178511a52ae2b2119e99e0b8b643cec44d5fd864bd3ef3e0d7f1f4bb\",\n  \"155\": \"58801bebc14c905b79c209affab74e176e2e971c1d9799a1a342ae6a3c2afbc1\",\n  \"156\": \"983d2222220ab7ffa243f48274f6eb82f92258445b93b23724770995575d77fe\",\n  \"157\": \"023344e94ad747fbc529e3e68b95e596badcc445c85c1c7c8fa590e3d492779a\",\n  \"158\": \"d1b58f4c07d1db5eb97785807b6d97a0d1ee1340e7dbcc7bb289f3547559f2fc\",\n  \"159\": \"cd3a3d2cf8973c5f2c97ebed2460784818513e7d0fee8f98f4fdcf510295e159\",\n  \"160\": \"3a926519b024ea9df5e7ad79d0b1c4400f78f58d07834f5ecd7be522112b676d\",\n  \"161\": \"2b3d09a4c76b282db1428342c82c5a55c0ab57c7a7640e0850d82021164477e9\",\n  \"162\": \"d50ce1ab3a25a5c5e020517092128ab3ec4a3bd5b58673b2e6cda86bcc0c48a0\",\n  \"163\": \"7e17ce0fca5d559f76015765c652d76b8468f9ddc91c2069d7799867b9d52769\",\n  \"164\": \"5c680d0b2c4dfac8aade87be60cb4d04a4c3d4db398f51e2cbf131d699b630a8\",\n  \"165\": \"304de2e63f91f8f74faaebae7a7ec2e0c6e0d8d322d8a747e4e3be88de2d3505\",\n  \"166\": \"14212843872dab188a86eb1f0f7012e1b72ea1097545f29377b3b9b52822af76\",\n  \"167\": \"18c18f8710f831a82eb74ae979bd36d609bee818c972ff88f8d8fa065270f951\",\n  \"168\": \"66640021d592f79b510f9d6101bd8eca89893187d23919c8edff4075e73ae390\",\n  \"169\": \"819b01e0394727fd089f84b9351243176920f03d0c6e33e5ff136016da5d8d4e\",\n  \"170\": \"e68fadd33a8c41d9a259577a278d8518aeb8b81c67b8cf03ccf43fc451ec8bd8\",\n  \"171\": \"33bf9ed4714b0e5da8828f8b3d9d3e9d0cf55c1d496324acb04a3f195252749c\",\n  \"172\": \"b9a27b513dc15448772cac5e914de61f02efe323f528892c0bff86d19913a6bd\",\n  \"173\": \"1b2a5e44fda5dfee3ce230f44fe73c672249f6620cdbaa343ba0ba808034958c\",\n  \"174\": \"98aabf085c6c8647f5e8a4775dc1d036513742d8e03b8c5c51e41bdfc9c3e7ae\",\n  \"175\": \"c03dcb22b7faf121d99542018dd10a07a778abee2678d35c03394a8d207b826b\",\n  \"176\": \"4fff1a7beda4291446d76e5ed5177c3f36e52a10481009fdaf2976da39e802ae\",\n  \"177\": \"614d3df0ba5fdffab2328eff8e9ca2d76b09bbc447c06bf1fab0419ae278fae9\",\n  \"178\": \"094a2ba3011118efdd9d4c1f839e6747dee8ba953b52e9012fe2977e32599375\",\n  \"179\": \"9f5563a5ea90ca7023f0304acba78005ee6b7351245a8a668a94dfef160f8d29\",\n  \"180\": \"dbef09115a57784ea4ea14c1fe35571301b0d6139bea29d1b9e0babf2c2aae05\",\n  \"181\": \"3920627e86db42beb1cdf61d026f9f7798082f1221db25a17fb7feb6c1d49027\",\n  \"182\": \"58096166bb8199abf4e07a9ef0f960065e5a635443c1937a1a3c527ade51d594\",\n  \"183\": \"bdf84a73b16a5dd5ece189dc970ab2c8f0cb5334c96bdd1d6ba2bad6e7f8a213\",\n  \"184\": \"c1e8c0f1b1eb3c258923e9daa46ef055bd79512b485c7dc73a9c5e395d5e6911\",\n  \"185\": \"0ea72907eb6c1120740cd80ee6b9a935cd754edcf69379328f24dfc3f09b9986\",\n  \"186\": \"3c0078aeae0362b6b7561518d3eb28400193fec73aab35980f138c28b6579433\",\n  \"187\": \"f2bc655b33e35669ee9adc841cbda98e0834083eb0657d10f7170e70081db7e0\",\n  \"188\": \"38e0291a3f5438779b157e5efcae6cef9db21cbac5607cd08882844cf981febd\",\n  \"189\": \"9b2a65ac4c35f6b392501dee2a28221a3975aac5f0866b476f5e6a5a59f3fcc2\",\n  \"190\": \"606fe2cb6525dabfcdab93afb594dbc8399cb967fc05f0ca93f6084d3f8fb591\",\n  \"191\": \"ea1977e7b22df383de61bded2a4bb3064cf17fcc0170be452330256f938b8d55\",\n  \"192\": \"91d614f139082168d730003f04b87135c64e13709ced2a96001ed60796867825\",\n  \"193\": \"65648f18a50a7f9195fe56bb8cb9e25421c6d777ad2447a3b566dc8c54f3399a\",\n  \"194\": \"cdd31847c6138853597261756d5e795884566220a9361217daa5ba7f87560404\",\n  \"195\": \"d12224510de6c98076f6289cbe342a7ec7ea3c5453f6e3cf8d37d9eea74bd07e\",\n  \"196\": \"1349b472d2821dff215e54d683dbfca49f0b490ade6a30b1db9667bc94e5312d\",\n  \"197\": \"e2aa8f7cb3ba893af8bddbffa6240e7eb71a4f4c4498f2a360f3db7b513094df\",\n  \"198\": \"a29d9edd0dceca9a72d2238a50dbb728846cd06594baec35a1b2c053faeab93d\",\n  \"199\": \"50a6b9725ef854537a554584ca74612a4d37d0ec35d85d04812c3ae730a4c8cc\",\n  \"200\": \"5b439098a3081d99496a7b1b2df6500ca5f66c2f170c709a57b27c6be717538a\",\n  \"201\": \"b4e86186652a11df0b9ec8f601c68b4823ae0bafd96357051371fde5d11a25ed\",\n  \"202\": \"057243f52fd25fa90a16219d945950ed5523ddb7eb6f2f361b33f8b85af25930\",\n  \"203\": \"2742f7af8ce9e20185e940bb4e27afc5fefe8cd7d01d7d8e16c7a5aaf3ad47aa\",\n  \"204\": \"15f5e9ae4636a6bf8bdd52f582774b9696b485671f4a64ab8c717166dc085205\",\n  \"205\": \"e03c2f4ceabf677ec502d235064a62271ce2ee91132b33f57382c4150c295784\",\n  \"206\": \"16bb96da8f20d738bbd735404ea148818ef5942d4d1bc4c707171f9e5e476b1e\",\n  \"207\": \"133fea765d0b055894d8aba573f47891c1f7f715f53edeefb200fbda758a1884\",\n  \"208\": \"90831cd89b4cceacaf099c9bae2452132cfa2f2b5553c651ef4948460e53d1f3\",\n  \"209\": \"570fab1574a3fd9aca6404083dec1c150e858e137692ee0c8011e702ec3e902f\",\n  \"210\": \"ae9a76ce3418c06d0eac3375a82744fb4250a2f380e723c404334d8572faead0\",\n  \"211\": \"aa4b2bc3a136b27bf10a858ac6a8d48f41e40f769182c444df89c5b9f0ed84e5\",\n  \"212\": \"81489bf56605b69cc48f0bce22615d4415b2eea882a11a33e1b317c4facba6eb\",\n  \"213\": \"a497e789f49b77d647de0e80cd2699acd3d384cc29c534d6609c700968124d14\",\n  \"214\": \"409520c6a94de382003db04a3dfee85a6dbb71324f8bd033e566e510ad47e747\",\n  \"215\": \"0eccb27846f417380a12dfd588a353e151b328425ecf3794c9cf7b7eec1a1110\",\n  \"216\": \"f735b4b441635ecded989bdc2862e35c75f5179d118d0533ae827a84ed29e81b\",\n  \"217\": \"9aa88ac109aefaa7ce79c7b085495863a70679058b106a5deb76b2772a531faa\",\n  \"218\": \"5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9\",\n  \"219\": \"9da1307fd12f4c9a21a34e612920cec286d937418a2d5040676408ba0c47f3d8\",\n  \"220\": \"a262318d02a14747ed2137c701f94248bf8651a23d1f82826952e66c25029588\",\n  \"221\": \"bfb4e53578fa42f83eda027da0467a351298dd65e3e8e84a987d69fc275e9f2d\",\n  \"222\": \"4308f4374b84e657aa7a21e5f5fe42ed16386b6dc7a74bff0d24d08ad62acd26\",\n  \"223\": \"3790f82f65ce7bc071b4096ca22544548b3413a755f58bfc401eff3ddf487a86\",\n  \"224\": \"96356c050fa66d919c75212d789544db81b012bbaf1f7915b053cb9ba2d67de7\",\n  \"225\": \"f37f3f2b0dc57a86dee4ba6ff855283bb4d2f0dea1c5bd1b708853444c2ffcec\",\n  \"226\": \"49bd28d97a79875007a6713aa9700df14464217c28a6e76bc93ded57b75a33f5\",\n  \"227\": \"b1f73471a3e6ea1dfb04610bd89ccb110994780084280fae872d42a2786f9131\",\n  \"228\": \"e38da154f6cccd06cd0001924ec2dad8de5bdcd0b78b68e8d8347768d99ac0bd\",\n  \"229\": \"098ffc6baaa32734053275ce38f4bbe58efe0ff946bf31e0e2df4c6a169e23d8\",\n  \"230\": \"2c72b887a8638941b85765645b45c5cdb73255427e14d5114f6830f847a6b861\",\n  \"231\": \"4aa0c92e77eeed08994650ac6129d77db9f026ae2aee78ad5c9fde132fac0505\",\n  \"232\": \"5f7905b71cb897bc7cc6db7e29cc38ee459e2fd8f5d58ba4746d3acd4e46d444\",\n  \"233\": \"8d986e287ad21475728b0dbd9e935623d69db4e5fdca0d42bc32d70eda48985b\",\n  \"234\": \"2d9d03b778af897e305caa8a1a14a117737bbdd549003c6d7477dd3be8331694\",\n  \"235\": \"7168cff545d365b09e8997bb9450343c7090913876c8f7eb9f0e9849c6fc7dd5\",\n  \"236\": \"ceb3002bad36c22c5da82fd422b36bad91b97a7d3f5409ed5d16aa9b42dc137a\",\n  \"237\": \"c857d8fa78c8fde91f29b3fbe332c2e781f7e8b54532f4c352693d6676fda2a8\",\n  \"238\": \"3e2edae8b8ddbcfaecd5aa6c69cb5960b84cc16f7b3232f3386aae9ecbd23f20\",\n  \"239\": \"49df3a63ca6509687cabb3d208e92b057630231e66b87fe8c781baabb12a55f8\",\n  \"240\": \"5034a21557b2de1c5c2d2aadfe8ffe62162c23f42d1aaabc705ed8519e91a3c1\",\n  \"241\": \"85abbe1913df41c57d1e6f00cecea416edb19c64681d1bb43fb5024e2f48d409\",\n  \"242\": \"4da30e6198a3d9ae6a538c2366e08ee218de6efe2c5b8f231493e21489c21a7e\",\n  \"243\": \"7404bb7881a010271831847e71162ee7a393843922ee93cf7cf3455a0074279c\",\n  \"244\": \"21aa3213adeb0a562ec7161e1cfcb5f1701303f1c9f03ed726c536283e080db6\",\n  \"245\": \"22b9cfa9ab97c84eb64e3478a43acd4d95b90cae8c3453c968457a89c6387a81\",\n  \"246\": \"729e3de7687fc597be2eb4c592d697ff29c78cff6945c9690cfb1ee67550eeed\",\n  \"247\": \"f49b98df95a1f826c24cf622ba4d80427a0e0767dffcc28a9206c58508863cca\",\n  \"248\": \"44b8116c29dafbdfa984b3751c1dfd057b3e93fc57c8cd18495f1c0f605496bc\",\n  \"249\": \"49e96b6ba41e88901dbd118139ef6f013b4fc59e2347058a7e726cf6a2f14067\",\n  \"250\": \"f0e0dc05fb555ae5ba9820586bef3bb8a3a82905ece3d8a998a3015fc91c1c3e\",\n  \"251\": \"8c1ece1b350c210380456da2bab70054f717731b0dfb34bc3cf4abfacf696f15\",\n  \"252\": \"ad20a49374f9176bd26460d35f96f30d734df3cf6fc63b4642380b4e866848de\",\n  \"253\": \"ba1a2bbccabbcddbf29ee0b56d0d56b4f026e8a7b97e97de2d48c133ccbdf2a1\",\n  \"254\": \"381a2eac64a984a81671722bd95ca5b8b6508a6f490af46780e9f393c6797223\",\n  \"255\": \"5e6ece13372bad4a6ea011c933389dfaefedad5860aefba2ab97fe5f59156c42\",\n  \"256\": \"068d4a3c845803bf66a9e5320261a0fd7b6292a8230b271a6a83f0dc8c73e907\",\n  \"257\": \"d80ac9215ffa7adacb22711cc88f5b580272d0d65c49e1ea48e69d17e264d91a\",\n  \"258\": \"256c4d399703b7f16dadef9201efc0ef9f6aa6ee05ddfa2d3e26ff6efe09704d\",\n  \"259\": \"275a4e84039a1596ac7e8bbe186163dcfb02bfa99c209653ff5d505a29b4cb10\",\n  \"260\": \"f461ff2df66653be1a2e579b1aea515d4a84f2ae5ebea3aa21fb2477a53699f4\",\n  \"261\": \"178ecd56cd79c7aaec1353093571ce89845130991d64c5a715a02da83a2705ab\",\n  \"262\": \"2e0cb5e8fc8ef04c50a5b9ab9a9eecad446598ebc2527b19c447143e5ae09736\",\n  \"263\": \"c870fd75ed0d5ed92ec35789c522d029f364328a16282a1c5eb9b3b7e121eff3\",\n  \"264\": \"da5d6bdd89eacf70a88810935f80e4725da4feaf2aa86adb13985d7d9e1c247f\",\n  \"265\": \"13f16351c3971c286fae5e9cfbaf6f0a128a6507804fd280971a600019e352e8\",\n  \"266\": \"4f39cdd293598de9259231592e99bfc5fde82a0bc1820a4c5faeb54f96037f00\",\n  \"267\": \"3e054d92034d3d32c3d4e7acadf1c09232e468fc2520d23d2c7d183ec0735aa3\",\n  \"268\": \"2d47c47a2b19178cef9e4eba1a53dd39b5f8657bbe011a71c8d402d294d50132\",\n  \"269\": \"4448f310ab9bff796ca70c7b7d0cd3b9c517f72744a8615112f65ba30a6d61f7\",\n  \"270\": \"ce71f5bd1db540762e4bc6c4798d8b7f3d2b7068e91c300fd271a46298aea2aa\",\n  \"271\": \"5a05e212b9b6ccf6092081f567aa73d27da399d45418f674628a8154f9182b6b\",\n  \"272\": \"a326c2d7121d80861aaf110826615e560aa4efdec0cc9fdfce051c6b9038e781\",\n  \"273\": \"d32b75411f407c5da6a9a6b4a3907b9a9ebbca6b651324c03432d549671bb837\",\n  \"274\": \"b5740ac928d58f53537b05ecc80b7463dc1fd5a53400f57aa55573ecbd5faa56\",\n  \"275\": \"e1c843ff0e97692a180e384c1a9c03c7de06ef92ccad5aa6157fabf0dbe5b804\",\n  \"276\": \"2edf523574e0a062cacf21f51ed6f81128537f27a3cd27b84a8b5d2478d0092d\",\n  \"277\": \"130c990ad499345b7638e57dce365442e2ab2d2571546aae60a9fa6ed3834b8d\",\n  \"278\": \"2204d89df74e664621dfe8892277d50e7774f60613561d70ae06ee0eb4c483d4\",\n  \"279\": \"4618456c7239784964b8fcd27155e01cf5417a16cdca7b163cc885d598ba93f4\",\n  \"280\": \"4b2d9501483d450371ec4413519b0b3461502aabb970fb2b07766d0a3d3a3f85\",\n  \"281\": \"b04a4a02fa0ae20b657dcfe3f80ef84fd446daa1521aabae006b61bb8fa5a7da\",\n  \"282\": \"6dab2ee10b0dc8db525aeaa2f000f3bd35580ba91e71fe92bcd120ad83cf82c5\",\n  \"283\": \"c964c01082a258f4c6bb66a983615686cb4ae363f4d25bd0bdad14cd628cfce8\",\n  \"284\": \"df960dabff27b2404555d6b83aed7a58ef9a887104d85b6d5296f1c379b28494\",\n  \"285\": \"087de77e5f379e7733505f196e483390596050c75dad56a999b1079ea89246ed\",\n  \"286\": \"8f3e5fda508a37403238471d09494dde8c206beadfa0a71381bd8c6ac93abaf4\",\n  \"287\": \"5d834d4c0ca68d0dca107ffe9dbaddac7fc038b0ad6ccc7ba3cfb53920236103\",\n  \"288\": \"20a3ef9e411065c7265deff5e9b4d398cab6f71faa134353ccea35d2b279af04\",\n  \"289\": \"9dda7eb623939f599551ad1d39dbf405211352ae4e65ddd87fe3e31899ca571b\",\n  \"290\": \"a629c35ad526f4a6c0bb42f35f3e3fa1077c34e1898eac658775072730c40d6b\",\n  \"291\": \"81b1e5196bec98afe72f4412cf907a2816515bad0680bd4062f2b2c715643088\",\n  \"292\": \"614950a1cff05f4cf403f55393ed9d7807febbae49522ef83b97e0390038ae03\",\n  \"293\": \"9e4067ac93c6febda554d724d453d78bf3e28a7742cdec57ee47c5c706fbe940\",\n  \"294\": \"9ac900bf0fbb4c3c7e26986ac33698c46c6c3e8102ab75b40b8df94fc3a0c7a1\",\n  \"295\": \"2fdcd631f3c68bef3c90f8679b7aef685fa33f20c2d6eb5965cd2a62267c2ffa\",\n  \"296\": \"dfc947e61ea2138ebe47234ba503cf5246ecec530b12e363acb240822ddf0b34\",\n  \"297\": \"4d5af88ba8a28b49a79773d3e6521e8731ff07d49765203b157481469e6ae6d0\",\n  \"298\": \"94aa77eadafaad7327acb8e653888f00e114cca2fbe04691dabdafa2a0c8cd64\",\n  \"299\": \"0f221ba58a8ea417e13847ef91af9ff029561ac18c74bbeeb3f5509af81a3b03\",\n  \"300\": \"50a79fb6e417fb4a34e155a9af683aa9a74ee922a6c156a58bfedd22cf3185c4\",\n  \"301\": \"eb09a0097a47e7a95b892ad7230475a1a28343b47db4faeb3e47f227aeb04738\",\n  \"302\": \"fcf9736fe8c20a6d02f00e9b1e719de06aff4afa99d2eba166592aeff1b8f3b7\",\n  \"303\": \"e6266f575c94d805a67fcd3f2391d0961b4b121b8a66afbfbae76dfc34e5c06b\",\n  \"304\": \"189bd2a8daf5b638ede7c50035fcf426d125de87a401382f66ab75f35b2ac1f7\",\n  \"305\": \"0ac58c6eb8513f4ffe911bf0f044e0153862ee89c04939fd9b294860a37ec9ce\",\n  \"306\": \"335998d7e2a3fae2da75a5192d62c37dd006be96831fd37e7438ec6d84451c44\",\n  \"307\": \"4f1f2695b1b6b1660f3ef6ac31a81630ca74da9368eafbfb214ec1980705c13c\",\n  \"308\": \"bc5ae127f8690ba7f6e9ddad98a49137acb45abf4e187eaf3648f197c72fbe90\",\n  \"309\": \"6b78ed4c4bfc942b9b5dc340961f19c690d56f9d721b6b764d1db31da53139db\",\n  \"310\": \"0d183ec2ff1cbc768a9eb7eb06c2a354f6c8bab00e64ca2aed2da00825f33c05\",\n  \"311\": \"3ae7fdad095eed78e0c63cfe4e28ab7ba2b977259590ed38722e9c44727e598b\",\n  \"312\": \"329d107b5743a96e3551084832587a6346e410aa89641d83f03f1242a7244473\",\n  \"313\": \"ecc63ee12cbe487e5390007271890b8aa5df2cf48b8e692404895d3c2af20758\",\n  \"314\": \"5fa65495795c52818aea910c24e4d3176c71817f5268c34e1cb259b256737352\",\n  \"315\": \"95bd03b9913be37d24809d30e7bfd31a1b7a127d03d65e52086857bb3a364b5d\",\n  \"316\": \"ca6ec6c9159e10719cd8d2cfcfaf2fe2d3637fb3d497e2c80866de6b593632e6\",\n  \"317\": \"5b0d72d34b406ce20714a59f1c4d5340c5559285e340497dbcad68729a9db786\",\n  \"318\": \"3e2b479fafb86b8ab097588b8fa12ae8a078f8b5801e15c7faa1ef23d87a631b\",\n  \"319\": \"e04b18947b36771937dea491f47b75fedf42a6db684035f5690e6c2bd7e6031e\",\n  \"320\": \"e546e4a4c9020669c78a095aa5c5038242dd78e0f98517c0e23c43aefeb58138\",\n  \"321\": \"3da0198df2f98a7306ee6d2e12b96ba9a6ad837a6c2d4f316d3cd8589b6af308\",\n  \"322\": \"07e511e9002147c33739c924c17a61126d12823d143069535a615a97f86d936f\",\n  \"323\": \"be514911dd6258f860c2773253f6df6c22ca975a10c4e34db5903269f2975faf\",\n  \"324\": \"53ed94369b59a84d003ff3155edbf481a0eef362325539d6ab1a7f370ce919c8\",\n  \"325\": \"43c8dc1907d3e1eb30deb565475ec1ad4f807baf6ef34178508ec85071722f0a\",\n  \"326\": \"b08d72606988ea5a82e0caf15e68d81b4f2e8dbb4af6a22437916f3fc53e3dea\",\n  \"327\": \"f70bb9cb351daf610a91a3c769d84bbb3f3b8f1169b10839196b65b8585e7c38\",\n  \"328\": \"6e26ed661a0add2e583229066d304f7e765a0ea337b6a93bf979e4027b70b94e\",\n  \"329\": \"89d8b56a1e05d90ccde0df482ff2fec3d44270739810f3c5d06856c38d801380\",\n  \"330\": \"2dfac8e04d08dc5eefcbba4e475164103d339f844896a75ef3af2229185118f9\",\n  \"331\": \"a20f9b06c126f4ee65e3f3a0bf345007b35ecb69d035dd0ad848e09300130fcb\",\n  \"332\": \"6593d40f4e3f53a73191c704d388c7cd1639403da6e679c8e4169b26ade19f3f\",\n  \"333\": \"7499bc84f6bd2211365fec34943d64f6be80a53ee2efb21c099c1c910ca29967\",\n  \"334\": \"f24dd99fe5b46bb7a7a30c5eff61e71cab21e05f1b03132d7da9c943f65713f6\",\n  \"335\": \"8e2111c24160d92b1b29dd010b8b3a0a4f9af55f1d30bd5892756c58ffaec201\",\n  \"336\": \"eed2e8d970c1c5031220476e6b700d16e5065d7893a2766a53600825b4ad3ae5\",\n  \"337\": \"44e298d1b55c51c9f127989da1149ccf6bda24c40041f777d35d5b8f192753d2\",\n  \"338\": \"b3a60e80296f79cfdfc02354acc674162faefcb3fb78b9672254c9cfc6eb113f\",\n  \"339\": \"2b55688ba27d72202632783186211ee24ea39c53915066578291fffd9db73128\",\n  \"340\": \"15765221271275022a6ef57634d836b052ffbab6d7d5a6899992972143841e3c\",\n  \"341\": \"f7340563f85e057709a2fcc71bd448fed8d6de6907d8ba5f91fefa2abffda6cf\",\n  \"342\": \"f252eec230c2e92ed1fa04834bc0738b79597c3b0d2a66c787fdd520e63cb3d3\",\n  \"343\": \"1d65c53a04f7eea94ebf76d797c0f79fe3d251bd33e5edc16c780715531b4345\",\n  \"344\": \"86d3fb095439bddbc0d6e6e8e433d54aff04350e2da2ad05f53d607113075c8b\",\n  \"345\": \"21db551743591f9cd20fffcedf3bda17f9f178bc9fbca528a56c2c61b9e7c731\",\n  \"346\": \"f326e2241b7e57320914aa279f9ba2e155ea77f809a188958e0b590bea9c3ada\",\n  \"347\": \"0fb6749b98280cc8c26950a2cb9c9dbecac18f8760e161e9bab887dcb0077653\",\n  \"348\": \"0cdb77330ae73fbbd0f287240f82b7547a0ef42d37004003a9c759f86b686d61\",\n  \"349\": \"690ad38e4357b34368966b9de08d89e0c095246bf55969842f373f1976f86062\",\n  \"350\": \"5b427d47f98e296cb78875619fe67d42f41868b78886d560d8fcac89043fe945\",\n  \"351\": \"93dcda27a0c12f0c32cc35f0de161e7f7792d11abe5d4c50d7fd5192ab8b11c0\",\n  \"352\": \"d01c0cd49e7649289a1f13162757de494bb9104b20ac8bdb30a4180df5225889\",\n  \"353\": \"3d856f38821d7b221aaaa9baa3d7927f6e360919e8f8505d7499f9bbd85c44b8\",\n  \"354\": \"36dd3030dec4a8050d2079678250c9c6c86c66c64fdbe7f5b82e79024bb8d5a7\",\n  \"355\": \"b0a915b700e415ba3acc3ef261128680b921b5df9bd6fb1d35c2d1180e7f61d7\",\n  \"356\": \"a309814f13708f2eb5ee8dd1a3114e8f8b15646b8c797bc7119ceaa3f6911f0e\",\n  \"357\": \"61c9c81a41fd294a8f07033c8373706694faab4df3652d310e84904356cf5e6c\",\n  \"358\": \"7d59500b8883d81040173b88462a73849e0d386a53830d599e6a042f4c1c165f\",\n  \"359\": \"0793805920db4896155cbce40fb58570a3cc952d0c15ee57393fa3c6ca7a8222\",\n  \"360\": \"ee8cacd40fb7515e510cbbe7deb6005369ce7d9800ecff897f3fd8721fd6ef71\",\n  \"361\": \"e96f225fa470174b4ac787b21579ad1556804de85c0c83da99a92ddc2c56c7ac\",\n  \"362\": \"9a4ce079c1a882a306e21e0c145dab75a2698cba3860152f03dafc802ad9006e\",\n  \"363\": \"258a6e6ea10385ca3c0cf08377d13ef31135bd9479d5a4983beadf158e19ccc6\",\n  \"364\": \"13aefde214541fab44d2a3013c532637a3da82199fb6c0a1a941c3108f76b9cf\",\n  \"365\": \"0cd978902035027c6898d6b5fc11fb5931f06f8e8ec9c24b4706143c91de9450\",\n  \"366\": \"47495a92574a6d7b150eb3f4338748ba03672ff93162139f98e03847f96551cb\",\n  \"367\": \"fad9203cd26fccb99f0f89fdc569c230eda46cd72ed3fb7e5f6fbcce78ced1a9\",\n  \"368\": \"a237e13fa6c32b66695b8c8de6472d5c93c7650989f047f62a17438c07036845\",\n  \"369\": \"da4c450ba0c4f76556fce54bc3f6b2a754a626cf1f87ba3280f545e023942640\",\n  \"370\": \"5000899cd3070e1937d42a68766c840bdb9629a49c6112bea5cff52fdb4e9f7a\",\n  \"371\": \"7afb55ee21c0447f7b961265abe7ccf87f59af6206949bb1da19fd36334b09df\",\n  \"372\": \"fcf734716ed1fa724e7228a489304e3c55e813734fb5792a83f806ab04e40485\",\n  \"373\": \"83c98f0431cf944440dfe0a9831275ed451b0d16856aba4100f53170c55c2e6c\",\n  \"374\": \"d998ea6616a5a7a9f7beb3ec02f8cbed4a9c5f17be978c31f32ac0f9f4e4460d\",\n  \"375\": \"6a72aba5c61e27e281235b1f001ab68b840f6e8bef0e6bbd7bfd8eec1abf844e\",\n  \"376\": \"980dce9435a9fc03250df4e809c2f68c48601b64c30d32c6e67bf1faa35fe274\",\n  \"377\": \"7b4a0b6958cf23951636b5e27af8041dd9901256c53de44c9be313ffd0a01ea0\",\n  \"378\": \"a1b13bda78da3ccab1af6c330d3e768fce62841f924933285e7b1f7a8b7dcd5f\",\n  \"379\": \"c957fcbb90e1afe9a342e95608ca035596a7dfd4cef398ada55e05a2462aba14\",\n  \"380\": \"b794fae83475a77832f46e69799419f9881bd774e1bfda56773b587c42591039\",\n  \"381\": \"e7208f3630a20b01a5e1bf5d0537be9dae9fd7529773cac12b96c4ac2b0f8dbf\",\n  \"382\": \"70480c0d26a6d76eba0faf3ee047d6214b2ca4d1442070ae5e79893192ffa699\",\n  \"383\": \"3c814d251089cb2a92a78ec3424b2a729cfbbfc6a996fd48148261312364a9a8\",\n  \"384\": \"f709015ae0f8ad20bd2efd94d01af3858234e381942b5b15391ff7f77211b116\",\n  \"385\": \"0bca6cad1f4ff336b93c9f86c4ac872bda67ee0cd41b1862a7a663852717535d\",\n  \"386\": \"3e1748647b60bbf292aacae65b3608ccce8e55e203a36ff062ee787cd8c14480\",\n  \"387\": \"cf592fa81780e727a56553df32410beba6de9c33543dd1ef1155b368ba9a9b9f\",\n  \"388\": \"911326fcfb0638154f69eabb87e4c0c141df09e56274c8522e9c13b7b577f00f\",\n  \"389\": \"cdd56fb06838a10149f2c7229bbc76f78b4a5a58945fb70a47261f1bf635c404\",\n  \"390\": \"07dde4848eb878808635fb7b366261b1e9cb158635e76577eecc48ccf941323f\",\n  \"391\": \"76cd3def1eea8e2631d333798f4d282bf40f6254b2d18c02c78cb56b33462093\",\n  \"392\": \"c4f7ecf21a8738c3ad0114a1ee6a2d16668e71b499741381f30827ed451dc817\",\n  \"393\": \"7bbc419f89fde57d2862bfb3678ddab96614693dfca109d0f444e4762a2b7a8f\",\n  \"394\": \"7781ca3332d6da18b1b9be5e2eff634b526ae9e8088f6e479b49d657f4f41525\",\n  \"395\": \"5b5de0def2c4a989a54ae3e748362c78cd018778d5adc4dec13c1bde6ffdc139\",\n  \"396\": \"d42c389d6abc7d8102b8cd1b906e4600da08394388d4dcd432ec955e6d8b311d\",\n  \"397\": \"629e23dc358ed2a8c202e1b870e270e401aecc5d726a679b542df8e6becb4200\",\n  \"398\": \"c30114e73097c3fa4efb203915f3b828b1b8c432ddeab2b7e1ba3fe63c50e190\",\n  \"399\": \"a681ef7bdb22145a3e051ecf7bfb694c18b255c80dae6fb8d49f187d28f3c58f\",\n  \"400\": \"c993a792804e09c9f60313f4144953eec072ca6a8a27f44d8718ce53d9429585\",\n  \"401\": \"074b576ae2054cd030ffcfa132b1465f8f49b836f505cd4bb01af4a98f4f5337\",\n  \"402\": \"d45f88fc3c00673ef7e628d867a54a4ea281b3b2620735cea85a8da3b06321df\",\n  \"403\": \"a09086d3cdab7d6ff8a9fba1746c5d236e0ad0abe088be99bb172e80c6f0f8f3\",\n  \"404\": \"55a774ac3423440dda50d73e472887195940d5e9df605b30deeb0f2528b001a4\",\n  \"405\": \"ee9fa61ae8153df7979be3afe6377e584fbdad624833424a5cff64f6ea94c9da\",\n  \"406\": \"584cba4abd5711b8f558fde97620b8ff0fe91586bad052ccff87c49c13f72555\",\n  \"407\": \"ac50b37409f7ea91f90856bbfa716731013deffb5f5b51540a99736e08e5378e\",\n  \"408\": \"2c12c3cf062c3d9cf2c53e6e4dafce70ca5c7a38c97479c3b013cd91076ecf4a\",\n  \"409\": \"5a55b5fb584c359f4b6ee2d21deb62923b0b25e1b4c3da0a6f351079ce657173\",\n  \"410\": \"9e224b6ab0b7f20759b63d1799b426a8652c9e637b1f38d3eaf8beff73c80c67\",\n  \"411\": \"66c0c1ab79e9887b5daf2c510f2c2c4097044b69fee6bd4ffcff73ad4816b8c7\",\n  \"412\": \"27f1768d99e22f8b55d010b8b7acd904e8b66751d5310d32c4d017a0ad34d650\",\n  \"413\": \"7c99634a1161e424a14d60b516291655096eb90ed055326325d7f5de7a44a3e7\",\n  \"414\": \"4e03e038e99870b1faf45a0a29d6124379d05a0a3553a11aaaa91b8ba56eac5f\",\n  \"415\": \"955e433ea745016af2a5df015f1cc223ddd84ddccaee60d5302b7ad61542d9e1\",\n  \"416\": \"8d07a87b9012a166f5bec4dcd646d5957c9b3633a1a37c40c584ede75cb7ad22\",\n  \"417\": \"3f738338cef45597e3b839536953104186f11d94d16877c77abd8a067c152dc3\",\n  \"418\": \"0c813356b30108f89fb37e8774a98af4f9eca3df49e963f985ecea82a88b1437\",\n  \"419\": \"8ea8d93a9e874f8c8ceeb240f1f1245a077a7c0a62287d3044feaf855b5dae78\",\n  \"420\": \"af7ac1e90e07f189afbb284ae24614d9e713e32098bc39bb81d6484d47351444\",\n  \"421\": \"f45e155846624f37cf2ee08be2a63cb1ca35bf795fb0f770b4c91ab549f22b25\",\n  \"422\": \"69d728f7e25055dbebd41684bc6de61be6b4db4119d7ecdcef5b5d8ead976537\",\n  \"423\": \"3e78c62395be704a59a3a6a65e457725105619e0a6f9f3aa6b311c4f7762b0a0\",\n  \"424\": \"fbd6edb36c3754a35e7de936839c4fd0564db873924ba97b35cd43e065835582\",\n  \"425\": \"ee5bb631b2a9edf8ed05781b192f42e24ae748f3aa4ba5e635374c094d28ddac\",\n  \"426\": \"3e913e088a689d2d33bc797040cea94512bf54a61f96501f60576ab22ed0304b\",\n  \"427\": \"415e6da4c7f92da36e2d8c43fa8056d0050ae127e648451e2fada49bf2c936d1\",\n  \"428\": \"389bded7b0c14212fb69b559fd1ade4f5b235b976c9655365c45481c3afda486\",\n  \"429\": \"3007beefa50c509b89b86c54f53757ff701f795dc5f7ed47a1520c2b092455f7\",\n  \"430\": \"59ec8ec2866ca502ad558ade9f8a06a9ff815a1ed649bd1cb513f417f1d4727c\",\n  \"431\": \"d3f28dffa4e22b3bed74c3c2c9ded1e4a8be49d3757368e4e3efaf7f79affb15\",\n  \"432\": \"59fd80dbc8eb4af9596e4ce8a87313d363da41313351a69ab3525faeb905c27e\",\n  \"433\": \"471a7ddde597fbaaaed1941f42ca1fc0f4f047e17f2197f8999dea98b38213f3\",\n  \"434\": \"319cb430c66d9f418aa90a3d6f9c2dfc8171383d6f4af5803a73684afcf18e15\",\n  \"435\": \"aa29c0119ca84133617c8bc7455afdfcf5b05a569393ff21ebcb10d32ffde2c8\",\n  \"436\": \"928f772ad7a9fc501f71cdef6dfe60e2d8cb5d5c5800b519d01afeae0681dd08\",\n  \"437\": \"ea70162a014b8294ede65af6fcdc11fb365ab2b126aef8d47983d58816fd6a54\",\n  \"438\": \"43633662392854b5d9f9f0fa564605212d016c9ea9377d2a6ab52137238d4191\",\n  \"439\": \"42f7e88fab5c9cb31d4bb34403d7958abd5023e9cf9ac05cd29626c5df763584\",\n  \"440\": \"cd08ef4f14b804e3106ee88f9d2b24864d5e2fec6c7cd7dddfa2713e1431375a\",\n  \"441\": \"daa69bac44ce5f57b4b43ab6ece3b2b3561292c0f4c6e82a506ce2973713f749\",\n  \"442\": \"910d2abf184cfd7b1964cec906a79f3e45f59e3d42ec20b22f56de59c9018927\",\n  \"443\": \"7a14ac86724d318e6d40464e710c17625d441d1e7adf83d3062305de2f85d445\",\n  \"444\": \"390877dded07897360921e8d0d126bf45d6a379d47292c90826d775bd1897f2f\",\n  \"445\": \"5ee5723341b0b81c9e0172fcb654f8b24322244bc2d1b55afcb78b180ada180b\",\n  \"446\": \"8b2dcb0168e8701dc9da286489a1e68e43e1b17638e5990edd882196d7fd5a29\",\n  \"447\": \"179af1c75faa5f42e89ce3b41496a64b2d2846361f76dd5d87f4ce97ec2bec07\",\n  \"448\": \"18173b14e0c0bf403b5f0d4aa23515ecf44622b3a860d80e866cd498f107123c\",\n  \"449\": \"22d7739bccf54ea1159ce6aca3e215482deba85a4db0676cf86d82a760c44a6c\",\n  \"450\": \"938bf7cdedab94bd7208b69047014e3d9ab7b54d1223bd649eb3de0bd61ab47e\",\n  \"451\": \"abd88e378f54b649e818d6e1d8e06c9f8cf225ac96b4085523acbb1f0c1df24b\",\n  \"452\": \"4119701c51dd8c457b74a19ed7ae3bdf069f5fd915c8085e9a15d909a39db036\",\n  \"453\": \"381ba093e8ece9e14efc965ee94bb8adbd1c0bf140875ef95f8f11050d5ed489\",\n  \"454\": \"b7613128b0401fdbc07a4015eb3935f6677b84dff936fc5e7e9f424d0ba1006e\",\n  \"455\": \"35ee11c9763f48a68f2b60b4b9c3919d3a895afc7071e8dcac5abd5845dfe79f\",\n  \"456\": \"8b129a3c7163dae86f1f43c18557296240a02bdac70ad29538eb5dce00e51f4d\",\n  \"457\": \"629c99f9af0e962f00b812057c0967861a9b6db9dd652233ac4b37f368d09206\",\n  \"458\": \"02df8a1d11130bde8af932dfc5cafe7d8e6c2fc12b82df5d222a91e4eed8e2f8\",\n  \"459\": \"062b225facc7a897e0e42e6b0f95deeb8b02de64267bf5cea4cb5280ccec1562\",\n  \"460\": \"a05f9a7cb049c40760ea2196eb41df1826ad492e6e5fc4696ce7bfcf7a842811\",\n  \"461\": \"95e5e99da04c0cd73e1818a62be3fc0de98c76d5cbdc81261672824ed5b8c1a7\",\n  \"462\": \"69eafed1b3d4022fc245a8416c1120bdcd039716db8cd43351a96e6c7d10691d\",\n  \"463\": \"018efbd353bb456112cf2c760b4d96aef02aa899ef74d4aadfb3dcf374a22987\",\n  \"464\": \"cd4447e836cdbed7f6a3998b50c4ab467aedaeb8e54c377da34245e90fddbe12\",\n  \"465\": \"da0612471988c89ea2fb190838f9f5e9029fd106330a801e66280c967ff1c52b\",\n  \"466\": \"8d16100c0148ed7bd41003b4a0612cbc5fa150ddabe5f9916ed6eac3fcfdefa4\",\n  \"467\": \"d6ea164cb91d14d6aba2d482926cb6cbd1a3644737a0530abac635083a97b8a4\",\n  \"468\": \"8d0e3f6bff322ff11d1267f1f8303a8ce1e2d796b7dc2d9eb3e3da939dd850b5\",\n  \"469\": \"35e2072f22c7cb980fbe797e30c25e9224328813eb81d07d3c88820492ce9a1f\",\n  \"470\": \"4993f275946ae0d444410821faa3ef4a448f10888c50ff59f7ae01d0b50328d9\",\n  \"471\": \"b9af9323a0237fbf88fdb14b8bce95c084351325249629ffd4fbb32fe9d6da5d\",\n  \"472\": \"5b278c08ab97d82c1779411fb1018b07feac7ddf38a69e4d398240a495c54271\",\n  \"473\": \"4448b03417a784f554c44eb15ad2d4cc022bd9cb5abe2547811eb8085355aaaa\",\n  \"474\": \"1c64fc4076d6b00aff86a180fd9af927b7c1c9ba87a2ca3c83dd80ba5e5ea973\",\n  \"475\": \"e571b4b8218a2961ed2b04f62f816eb18686d82b7f2693694b9c774acef4a0ff\",\n  \"476\": \"a6383ed918d7851ed7503921a64201a032a33c9e1cbd4e08d1233f543bd21be9\",\n  \"477\": \"c871da03e684e099190c4ce787a9588ae85841246ad7bcc9cb4c302d617f881d\",\n  \"478\": \"96d8bec6b787a7aea2da8dfa8a1226e00881afc218c211fc59da830775d55acb\",\n  \"479\": \"b35720df96afbd98c6a4f081ae1173fdce21d63f75f7b455f4c2b9fc0aa672c2\",\n  \"480\": \"2db876e9625c8638c66103ad0206c9a51b68d4c6a3222f403b195a81837856e3\",\n  \"481\": \"bac35824e79af403a2058b08cbc84f8e4df93a21d1766e4ea1de6414e2a8a926\",\n  \"482\": \"0f9797e2f3691bc7291d81d1ddd5d88cb4e10b0be555e2ebfbd3c5b12b7cd2b2\",\n  \"483\": \"8f3348df383ec9ee00e18d41c419370d42ca6ebf71c510690aa5435a679b7e4f\",\n  \"484\": \"3b3bac32669c5b66faaa42b89a2dcb4de0bb9aa0bd279d60061dbe9e7039f5dc\",\n  \"485\": \"25d0335a0576f974617351ef5aec889f311fc8d7cddb997862b10b2496842d4d\",\n  \"486\": \"93b9a59a937594d2196271416ea3b2221d32b3b40a04bbebbdf97e8bdc557e0a\",\n  \"487\": \"a643c75a8d062b87a1c8635fdf439c04d949ce01f75dde10ab6edba90cbaee77\",\n  \"488\": \"984593c12abbff5d009091cd3c1883c87efc535f760727ed12f06df0902bfa75\",\n  \"489\": \"926ac61244f94e10270a2d40169de025be6db342b3de7f0db33a50b07176c143\",\n  \"490\": \"e2c8142e501b0b0b808d2d36f5f38266f99cd3aaca7d2f70f4bba386ae1d2025\",\n  \"491\": \"1a1c8b472424f8057c94a9f5e0c0b673551fbe9ea4cde5ca2d90df1de76a5c76\",\n  \"492\": \"345a83966ead821efa2a9de93aeb0fd5bd60a8f50e162caae2447f1f4d9462bd\",\n  \"493\": \"ee7018d63b08bc7226d6f77c2345a87e09fc7cc87b0a003aaf3a4a3f622edffd\",\n  \"494\": \"3d69e540997d79f21f249d4d8f73cd75119d81bcfb8bd80782863249f0d7c62c\",\n  \"495\": \"b717f1088b0ce24851c30d54bc8dad9f3ae93402b91c874e385e5c699323a5e2\",\n  \"496\": \"fbe77ec1978ad86e73e5a3f494fa7c198fe334b511298f5a0f2d04d6a7f51d01\",\n  \"497\": \"a4a66d6c7c555a2997ca59a8dbab512388adf20902293a5617132a16df76d954\",\n  \"498\": \"d71813b8175fa2d70181d87ae8f839e79792516a1cfa99a7e6b29500c057617f\",\n  \"499\": \"477d5b817df8c0b6f0928d02a58fc39fde2224493cec89393bd6dc349e5235bf\",\n  \"500\": \"3ac8e26d4864c538936efa7c5920435107a50c01306adaee5a4aeaa2ef378f7d\",\n  \"501\": \"766448b05b248ac3d6e991baa3e4b2d53b02aac426bda312c2299b2b983e145e\",\n  \"502\": \"50218b55f5b7207438137f2b0c71e3f6d37afd76aa5b1f2106111f3432b4cef8\",\n  \"503\": \"1d7c24799a287d42e97dd4ccc5bbd3713ce139e6294896cc5fe2efb80a1be7ad\",\n  \"504\": \"9878db5eb2218b18568dc8cfa13bc8363a1c93e6a59a05cc76da0588fd54af46\",\n  \"505\": \"872fc20275833f09c8aaef277abfe77f67be6bd443b489e0cb8bdf9d4ca9fac7\",\n  \"506\": \"d66834cc7ebe58cce2ee1c02bb11ae69672d711ead6a0a58ab592339cddbf02e\",\n  \"507\": \"ae955394665befbbc89e2ba85b5e520cb293b8d03209b1f71d78ce2cc807a437\",\n  \"508\": \"3917ce4173af47bfaf8525f0917736bde3f4bee0ed5fae721c3e2fa957ab1675\",\n  \"509\": \"2f64571cd71f0e59006da84808abf3d3ccff9a38884321533d448b3e8e3cae05\",\n  \"510\": \"41ce72f4701e786427413b68fb70bd77d921c06648ca15033ce1926a9f1224cb\",\n  \"511\": \"c9fc787389265492e60d5503f279714d5b19760ea7b2e1a720e6fc0251fe087c\",\n  \"512\": \"a8af6acf3744af13cde63540e37bb9bc722ea19a012656e3a3c5bfff8292c423\",\n  \"513\": \"506b90816555d1083be7d211f02a5db364e5c2337fc85b1ba845c1a806689373\",\n  \"514\": \"e4e9536766181eda627721723bfbdbca85859a3ba92d439f58ac0009c102430c\",\n  \"515\": \"16daaa62fa87776bc4843d226988cc83ee846ceef7b885ab63e10789b30071ae\",\n  \"516\": \"44b6de4eb51dd8f762142f284b154d3153592549cdea3b94467fa95484a4f172\",\n  \"517\": \"bb72c6d437197a8c1f1132626b3b47adb9827f4f9b912d1069cfcc75575371b5\",\n  \"518\": \"ff57c1f518651af805bb4b258130c7c5b0726422c3390327217562088785b4ba\",\n  \"519\": \"159b59f1261b7a31d7172cdc28d9515d0731e5117cb30f34a497bc3bd0496da2\",\n  \"520\": \"bdfb7f17c8c841c0b61ee7f00e51f09e4c78c90f7977548b72050a7aa12dfa3f\",\n  \"521\": \"bd27ca9292c19160cbb0568f750b247fbb805b85f4a2316fcf2c3a35d3ae031d\",\n  \"522\": \"98e0ef155297aac8a4060d204614753f26f6ba5357deb78c683783dc7ae30191\",\n  \"523\": \"9bfc344c80d1200fe12bea3ba4cacf8d5ac9693258962f2f15f42b30ce8ef3ef\",\n  \"524\": \"8df22d8716d7ca6354ea42b8e522d286ff9362cfa5881f527efcf1a953ed1151\",\n  \"525\": \"13dc6d869fbe2c3d95f715e55f02bc3d5787874b4c88d7da1d05360afd2025fa\",\n  \"526\": \"dfbe442040ce9afba654773fb14f307d67ab614267d3feb6b18df03182b5b60f\",\n  \"527\": \"ba634833af68fcf0ca7bcb08fa699b2c5fab934eb81ecd85e7464b01bca131ca\",\n  \"528\": \"016f7b569dc1c3466c97754c7dcc0f76c2a32a76c22357cc521bcc330d86daf5\",\n  \"529\": \"4960ff863e3d21a58f9e81c3d94075cb7a4daea5fcf396812382111e462fc57f\",\n  \"530\": \"6a2e45fdfcad65e0ee84d206d59cbac998026d7415d16a5c0b8c55e4a7d6bb3f\",\n  \"531\": \"95ec72fa8c409255d43e7c8d4e957bcb9239534973187b3b4cc2557b09bdba98\",\n  \"532\": \"fee6802490757983c499a08831d9bdc75a9eff08700bd29e8e5c134583ee07b3\",\n  \"533\": \"8a056666bd75d853a12d22b8317042a3f5500cfb21f6698d90ab41e01edcf81d\",\n  \"534\": \"8f65c9feb935e09a04c87143d1b2c63e38f08738199ebcc2758f67ee914d8a48\",\n  \"535\": \"ed8970f8ef1e2374289fc735aedff90b010c311a3b80d16df6bca2d3c250fdeb\",\n  \"536\": \"f82635851b442ec0ee95c5c2b7377ba382aa364cc49ff4e981d509ef324bb356\",\n  \"537\": \"54fc97bb6f3d7c724d4e245df37111c20334972300297fe38b590354fb9dfe92\",\n  \"538\": \"650c7f5f382c295cf6e7fb092db6fdfff164c861bcfcfe1fb38a50268f53f50a\",\n  \"539\": \"0bfb3df290912d8a70dc5e1e2761151cdf2c4b75d4b37c8fdcbed7483ada85fd\",\n  \"540\": \"08f1b2bffa88a9d01eecb8c9da6636b5e668a5478d8876a63ec3a74d7f932205\",\n  \"541\": \"5e59cf440336e86b67c17ed61f7bee7e548c434f475c415294b3b652d1aec606\",\n  \"542\": \"1257b6a3ad900df97f5aabc1e18b9f7ddae8c7d7ad60216ae21b5b7310cbda84\",\n  \"543\": \"8a783bfbe11c7f7b24431a15a0eb582f6fe5f75d1d21a3d55f8d8d81ba6b411c\",\n  \"544\": \"ce93bedef94ffbf62ad449cb0c68e8103a0bd005563ab854daa5e470664b4d7b\",\n  \"545\": \"40c253003d601fd2c90908bffcd8133e77489fe247e74ec03901895318fe69de\",\n  \"546\": \"d40739115f18fee96817266232ff1b8845e7966778fdcc644028fe5c759469be\",\n  \"547\": \"fa32a8de8fdcfc551d808c5dd0ff5545a199027acd32e380959b91f3b3d04643\",\n  \"548\": \"72e66168068b6ffcd2988e24124c8b1dba9a5b52a383a937397575e3c1e3f031\",\n  \"549\": \"a23baaa745a976b4f212836beb81a0a7b42d9f2e923c2412e2c07c63ff660ceb\",\n  \"550\": \"f58ff320639b2c47c76ed8aba487e31da0fd4656c3be6e33807cd00f77456e5d\",\n  \"551\": \"0449ec4d6d5b2e88603e62f3ec0287ed711cff682bbdfe298a197144ab24e80b\",\n  \"552\": \"f125761e8a0d02b17b1dc4be40216f2791727fd4e4bc56f60ebea1925c2fbf36\",\n  \"553\": \"dbb93b2a6cbf972bb1f94d1f8656cd113a09a02cbc44f25737e7d75c986646e1\",\n  \"554\": \"dcfd1e7a4a32ff0fae296b8211b5c9e91ab81844a0308933f598c712c1bc313d\",\n  \"555\": \"cebbca914f917f990202f110e77285132d2a5a3ba9a7475c93e3561d8ba88ea0\",\n  \"556\": \"0d5518ef165979b758fcc8df9c8cf536861f376f8640541ba6112ee7610ed82e\",\n  \"557\": \"0547c86b57c7c8c590f6d7a5131778f5b6ab2eeccc5e819e5fd095a6d4e68b08\",\n  \"558\": \"e763aa1dd494e097251484381ddb057c7d79b739c3f8644b1759e786e12f5b40\",\n  \"559\": \"e48eea4c3b4c9d58fe02739accf31bb64dd9c31623ad4cc06c740463d664c098\",\n  \"560\": \"77a09dc1ea6f1ae669004b8c9429dd83ead1148c62e0d945173edac45d9000a4\",\n  \"561\": \"756d226727e611d4bd22aa33747da2f635eeec070906dbc3262ef29e341e2a6d\",\n  \"562\": \"29de450d6e440c528287b98bcb4b76fb5155ab573df4721467446114661936ed\",\n  \"563\": \"7703d943dbbfdccb90acad65ed7c0eb13a10034ad01809472a55eb3162b7e53b\",\n  \"564\": \"65712c105411e6fc0ed35b9347de8cbaea33b0c5e57cf162f48dc257dd4f05b5\",\n  \"565\": \"2945ef4779089c9e49a9a9f5e2a67ba7e393aa20a955ed9302da6677cb03a9cd\",\n  \"566\": \"95d936e1d454df2e1e7d486c43af387b39a50cb57e57c7712d967bc9ec556f41\",\n  \"567\": \"2abe8af9ee20c6b8ad5034bc31fc1f4f16769595d5b4fc2837db3e76a90ac405\",\n  \"568\": \"fdc104338866e50ae2bffc1ea19719136f639df6c25f38a8680a70e9375a9378\",\n  \"569\": \"25677266de2b900788dfa047cb53f5585c37b564b3a711243fad52e186ec184a\",\n  \"570\": \"9101edb48d98c3742ceb713de591d261b79e90481d28f83f2d2c74d7034f4b46\",\n  \"571\": \"c364dde8cce2080d073eb1f9666cca97ccdeba61b2bf19ca0c84987e6f8d3576\",\n  \"572\": \"9cc3049e9464376b95fb88d6fff4331e0e40196f92a0a9aa1c5d10dfe33079f7\",\n  \"573\": \"2ade73491e183608b340f312d08cfd39c10ecb581c87b873443590452580a43e\",\n  \"574\": \"96325b210d18a7a1d6873e00a859648c4754bd4c91c324aa812ed78bd047118b\",\n  \"575\": \"33942a261a9150e2b5ce2ffe5b934a81f3972cf5aa5a9414a9d5f63f6b55324b\",\n  \"576\": \"7fca01a835681914b5fe5014d5649b5170faf459375ccc2bf9ad71ebaa73940c\",\n  \"577\": \"2bdc7a0e8adacf885c6ea0f6534b935b8a9dd338c5dcff05a74c162c3e9dd531\",\n  \"578\": \"ce6b6de1d907c8839b84f5f3967f6af7e9a3644a0bd7dffe80cfe531de08f8ca\",\n  \"579\": \"03dbff2575902a3c56a64483c8e8ca38d9888f72c6a71a6236eb07b808fb24ab\",\n  \"580\": \"96892003c30358ed55a39e13e6159fad09ebc3916e34492b91d63832fa86f731\",\n  \"581\": \"4fc5533c52133e54f8b54dcbfc4555638ae809676dbfec9d1400ab032f30648d\",\n  \"582\": \"7ba9b154acf699c8a123df5471fd40ad556cf6fc630136c686c87b09c88ff546\",\n  \"583\": \"ec10ea6801eadac9ae8ead5f222e0580f419b67d2ad5cd5c8ac914dcf5cfd69f\",\n  \"584\": \"510001c4104c80517a13f967df6ee071f15fb7b65e97229bc91b2925cbe4e93e\",\n  \"585\": \"ced737da53940337c5dff81720024fbaf4cee38aed1d3514d2a75c7b1271acf8\",\n  \"586\": \"9ab074d1d480d718930c9abac8b616a0bc5c30846381d6d9bce1741e9bca1991\",\n  \"587\": \"ec3fdcd8136188e3b476270894351cdc05dc44a4df50d1c4ed727294fb89430f\",\n  \"588\": \"31400607f95129fcc531604b7b0478a748d2495746280dc07ff30e39cd6f4a97\",\n  \"589\": \"3051de9b2a7ced941140aa1074952029f532e133beb41c18bfd990f43bfbd9ae\",\n  \"590\": \"4af295f83800334d77a04d56be7524ff6241e3d8b2f23820c9c54580b7996086\",\n  \"591\": \"2ecf2c1ab8d9e5cef5224842732af17bd2259598e4363e1d46cb172dccc39022\",\n  \"592\": \"2e71a26370d45781f31ede0c7810c2705706ce63291a52d5cd6f060ae16aeb01\",\n  \"593\": \"423867f77b64f725f823204796301ae09b427190cdbb62d472bc1395507da9a2\",\n  \"594\": \"6c28830e35913c59000dfce4432db255f7dd34809285881f05a9e9749f5d8452\",\n  \"595\": \"53fc00ae32e0b0d701175ac17ac0b91e05859ae6d7f3e5bf0548dad36e3d68f9\",\n  \"596\": \"9ccbee33387383d458e7ffa2c9c0cb9e4f5bbe3d1b949463a98232ae67d29956\",\n  \"597\": \"921102754e24e8ba99480e77652d88764020202e6dcd67adddbb1660204e8e78\",\n  \"598\": \"430f975f490ce37df74bc346556cb2186f7a47a58d3b282ab42f35b33a812f7c\",\n  \"599\": \"b603988248769444a1566b058ef3660cac528086b8193efd6d0be4080b834780\",\n  \"600\": \"dd539cd38fade63aa0d14899c7c75ff459ab839148b15b4efacd4bdfa0408dae\",\n  \"601\": \"571c5ade4cd89b460b7d2568a44d1efb05e2927ec840d8ecf149dc9e0ff09734\",\n  \"602\": \"edef32d6c2c7193b4b30a0e2c7d3ab37e0ec21db62543f4bf78169b683792e41\",\n  \"603\": \"cce7491b7ddf0e3ebde191e0e57614e61602cfaa2b52be5c2d657d9ae5e1f1b1\",\n  \"604\": \"d08fe0e5c0fc10640043f9d645446e23fa8efbfdf29c93c87794e5b6405ff51e\",\n  \"605\": \"1bdd74af73e2434db6149fd8089bd294defe3cedfaaf92f532568ddc6c48e2ea\",\n  \"606\": \"30e44b49f18048323d1c1bf4631587df8f0dbd477ebc79b7ef860a792953d932\",\n  \"607\": \"2d9b6a1b4810a39471e5dae85eadf595fc108097eeda746c8925a7be057464de\",\n  \"608\": \"cd3fdc5ee5b6e606349b9e5775d6e632e0424d6190f632632bd7435d5622b20d\",\n  \"609\": \"8b86933e27e64e6840bedc8087fa31326d9527a424c63ecc61823894c81f867d\",\n  \"610\": \"a781fd7cb6970e8f6f679296be5bb0fe7ea62207caa7ce86635257186a5a70d9\",\n  \"611\": \"4a3a0b9877d68deb8d7db624ec2d7f4b1c467fe337f803a220292ac6131acc05\",\n  \"612\": \"6e95bb170c3a521fc7befa446cad879a36b7b3d0e0e8eab1df6ddbd753156ab7\",\n  \"613\": \"afe8c7002c5e15859be829b4b69f0da00c1298971d5afa469b050016fc021978\",\n  \"614\": \"f85495a58ad9d5c4d16167084bbc3581ea22e6dfc39423b70d7fe486e316d951\",\n  \"615\": \"8da9fc3356df220081c71ccfc9c67251e6dd7058fb11258ecfc88ea9b8c00c92\",\n  \"616\": \"0fadf4975e2c27aae12447e080505d604258102f61c8667a5c2594ee033567e8\",\n  \"617\": \"06d9e8723de7ffd20129f1d8b5993926a97cad1261dc0cf01a37d8fa728ee996\",\n  \"618\": \"04d0dc62694f26c61871d8129259540884ad2296a3cf455f6b92fc911f98c336\",\n  \"619\": \"a93d0ec83cbbd4ec0866c97b372e4374a9d6724cc3767f5230e8316734cbb0eb\",\n  \"620\": \"071da5dc1dd87c2558b45247c29a92092bc5a00ef3cd46d70d08e18b791d2926\",\n  \"621\": \"458ca388a6b74c57ae13d1233984d5b66abb1f18dbfa12aa14ba868a9b5a708d\",\n  \"622\": \"1ad0227dc5f8c259ada5120d9db05ac7a013bd1bd84cbbca2f0ae6b174dac129\",\n  \"623\": \"d82d0401e10767b022417dbb64d348bc6c03ed4bb7e4553493e8d9e65525d229\",\n  \"624\": \"1d25005c86a9635d3483ea63ce95fa097f95792ebab86319c12bc66ea1d2ac83\",\n  \"625\": \"3fc397ed884cabc16bf30bb7487c8211424a08279a166d4fa4da6dc151a02cd1\",\n  \"626\": \"7c42e09e504cb269512dae989ee7fffe1f3bfea499c990e8edea796761331ccb\",\n  \"627\": \"5062b75aa39c974a579b0a3360c4da32e481d2242de72106f651c7d7de631cf1\",\n  \"628\": \"dc656eef13928f18d14a9265be6a923bc7d76048b861cdf1523e397801a8ef52\",\n  \"629\": \"9eefedc5b5995658be337f48146e37020db4ed3bb61e2af1fc57f698bd398b0d\",\n  \"630\": \"6e17ecc4a4d07ffbd67c49a59d31b7efeabd3bfead49fdf1ec005836e6030ebf\",\n  \"631\": \"781372694518c122f62566aec8867772e492fefef32c00e24b5604297dc1d44c\",\n  \"632\": \"c978055ae1d71dfdfd8bb4e845bb82fc4211b14560bf6001edefa4367e1d4403\",\n  \"633\": \"af4ff4b546369974642b3f68d4d3e90f0a0496b3b5d1572b638378fb49c7b4fa\",\n  \"634\": \"f6af89331ee087a2fc03e0bddd738e2716b49ed616ceb3b47743cf3806c6d8c2\",\n  \"635\": \"e4251ea6989571d8b83993560b537b7a9d0777ba54e6941757580cbfc14aab5f\",\n  \"636\": \"dc15b5ccabd8fd3141c244b7dbc6fe95078299ea3ce3016cbb483893fcdd4236\",\n  \"637\": \"053571be83ed06ab23a96d4e8fa129a4ce7e740de17dc35b000fb56c35a5ab80\",\n  \"638\": \"df57e1f418a24e38b39011048084c6b5cc91a56c1deb643ab605e0350f329b4b\",\n  \"639\": \"56930902baea90d1a8e505a227e5d7ac4da6b60f6c370ab75a0011cb3746818f\",\n  \"640\": \"c105d171242fa8e35f26491ba2f932d1577dfab2a4a6e75034ae69f062e8aa71\",\n  \"641\": \"0f6c3873a87ce630accf7f3b19feb764aac3fa0c3933042a817a82e6a9963aea\",\n  \"642\": \"c20081830b70a00d1bcc6f4b6572d511d534986c10ea3c057db304a1f26df2da\",\n  \"643\": \"143de023a92c7c8ce5fc0b839644e897267c44c8ba4e715743dc99686415a8b5\",\n  \"644\": \"7a8c9f1db1b1bce9a3b8d91e5b1a39a92a478029d975f5e45d593b7ca81a7134\",\n  \"645\": \"932a51e4c0cc5e30041ca5db1fd0674820638563a9df1300bece7df12c23017e\",\n  \"646\": \"a49cbd2966ea8248816b0a53b6eedea4aef2525aac45272b862d7d52e604625a\",\n  \"647\": \"40ad98735f3b5417ea1916f6146b69b7659963263caed186abf0790de0d9dae9\",\n  \"648\": \"53b288529a83c376f2399e986e5ca25c5993a6640063386fdb2de491afba2e81\",\n  \"649\": \"c0bebda0473186148087feb9828a418ab8d50726a1ff5c39ec69c4a6232c6b67\",\n  \"650\": \"98ac68d2bc42f89dbe97b3392ac691ed6c2c4f36a44665555bf7f816ca97cd27\",\n  \"651\": \"81f8287532f504b4f4a21e6d6ed573845bff197c479fb52e4c5b6f2fc1cfc40f\",\n  \"652\": \"fa32d8e7c1c766a6126b0f1cdd9d752cad55f54d0c05839e89d4da238615d9ed\",\n  \"653\": \"311cec39a42837f803ce8cfa5e6df32cc27fe541de108e3e7cf7ba3242e414ee\",\n  \"654\": \"f2b3d205c2da66cdf9a596e2caa1098132b832758eea2b14da071b8dd9584ec9\",\n  \"655\": \"39517ea688972769cccd46ad15b4f06ac2a6175d053dc97f849fa11a63a163e8\",\n  \"656\": \"2a21e5e89d9b019c1195c50af7c6e1864cbab05068d10e11519fb6d4766ceae5\",\n  \"657\": \"bbf54db41dc18753a3caa5001aae99c0c998e8a07b6e7390932054d7882498e3\",\n  \"658\": \"ca8e7b53b095939e5fafefa56e9b45b40c396145acf2a767f9f2430fbba75a79\",\n  \"659\": \"3d6c8492fbfe1c76e3f9d66485a7447489b89763623127deb6ed327a0c2a011b\",\n  \"660\": \"23d754ebe35981ad5de850f66bb2294a22280a8ad0b4160b1c29dfb5487505d9\",\n  \"661\": \"fd7eaca9690ee0384770e855ed600c96080c5c23565bfdae01c6045a87d9550a\",\n  \"662\": \"b93bc0a52860ee0a1fdc28adeca7b39288b1119e0f318467f0a193236e00f99c\",\n  \"663\": \"f73e3335b21c11b78987deb5a6eace1cef327981322f53a070adfbe31b56e7d0\",\n  \"664\": \"f3f0de955603850bd411690d11a5391e63f515a29e31e9241c66c62d688bcf72\",\n  \"665\": \"f2650e75f39098e5a114077b6e07bc15325adce22e1ab4b20569a4eeda5c6ca6\",\n  \"666\": \"a01a34d1c29aff5618a96046605adb74fa49b834975051d4ac82672567727a21\",\n  \"667\": \"2db51646a4038b38c88512738f79bb21776d39c7bfa3086538cccba0b63024db\",\n  \"668\": \"2f3336b7f1211fcc180cd76dc6442fecb412771aa45ef1a7675aa437d04e582b\",\n  \"669\": \"28bf022d827392eff1ec8ec121767ec24778f1b69da8605b4ab059023b8ad28a\",\n  \"670\": \"38db5dbb2a3ce2d31d1958f5b3ca4c3555eb0ac4193ebffa3f42ffd6bb4806e3\",\n  \"671\": \"0580cf2ef8abd3afbf91fba2032c2d51e43306bebb7f979bb750c3d7bd14c961\",\n  \"672\": \"394f1b74ccfac5a4fa958d813b5932371c5f8c2f3dbd1eb7202af2223aa08afb\",\n  \"673\": \"61c90400cd197b8ea6d7de90fcd1af0959fc37625fe163363fdae0ac4a724bfd\",\n  \"674\": \"6037c38f696b10fb531c26396890cd3b48d5408c5b37e61d03a72ae2f7b64ed6\",\n  \"675\": \"39c8b1bd1d534381b811bd8050e54b753106c1bfaf5d3cc63d8fe92a94471915\",\n  \"676\": \"346d1e2de9915fa2f4ce3675ccebadccb8e9d14239f1e53b6d08d09f5c26297d\",\n  \"677\": \"36841bba8f77d669e9d8f4e09ec580ce2c7a36c37da719815e65cc641eb1fdeb\",\n  \"678\": \"09532ddbaffb710f02964e270f8658bd8a09149744726a82f618708b35a5fa26\",\n  \"679\": \"774f8d6f89a5875342b21e8337aa5e3ab0539960a5b42554bc8d8a0fffce7d65\",\n  \"680\": \"48d62baa62c2a9c561612192ec39a7dbcecc8badadc0ddc755191648597a42f9\",\n  \"681\": \"7adc09dd86f3e73979d9f8a4b3232102ca52bc41d043614fe989cd908ed88c76\",\n  \"682\": \"522f0ff3ae2f1761dca78207dec1c9b52556eba2db7503ca03441abf62f65c76\",\n  \"683\": \"376e3c3e4b88ee76cb0f02390751a7248fcf1562013b1390b1e276a3f3d7da63\",\n  \"684\": \"6363f306f081683781908acd4bedd92b3a75c796243cdacadc4b9896d8cfaaaa\",\n  \"685\": \"29f2c4c5325cf626b392a910e6e22b6d2a989bfbb38439c20162b7b786b5e2f8\",\n  \"686\": \"990ae3583a1f7a32b7581a8ace626511c812e0bd910b8064fefb31e625b9c22d\",\n  \"687\": \"7e78b4b91851b976f5cc2a1341b9389ae7bdd0248ae7f7c53e7ebb2d86bbc73c\",\n  \"688\": \"1ada92e769892b4bb540d75cbf40017a24b5b309b28a097ed62eb7f2727518e7\",\n  \"689\": \"17a0ba5b100d0a92f3f82e2e6f31c71a6ca53a0f043094a6419331e22036150b\",\n  \"690\": \"f9658a8f0687d69f420f655c500304c3c0888f298a68075ab6a2165a3bc47c53\",\n  \"691\": \"3ff8aa53eb2f7e700fdc7cb838ca7f7b495948bb997ef70d196c10592fa64680\",\n  \"692\": \"c01c3e579b2743866cd3d0c1d9039871356143a99c572593d2702f387e9f629f\",\n  \"693\": \"c08e2dd3686459c2989cd6a367d2cc64b2bc2af460417102e9856e91b5f78fa4\",\n  \"694\": \"063e59bfd9cbed08afa508954ac9c1c313b80331d6a917fd2202e15e1eeb00e9\",\n  \"695\": \"c3259eeed96a5837a6630fd9d1245de7c77e10d0733b6129a3dc99548bd92800\",\n  \"696\": \"9ab20a4d8c3c0de897a1c8afa95733d0f7f79870c6379064ef4cf1f5baae67e6\",\n  \"697\": \"62c07adf4da24a20a723f6c32e35a51f2b942e363dc9fa35070e34991a5a9c1d\",\n  \"698\": \"632f1a4eba12f5c80401d82c4bad7c5679f55ccc89bf2da3e3930ff3d6671ba1\",\n  \"699\": \"8c40c5c92fad7ed2774080ddd39f62cdc94ca05dde4273344497ab4206499484\",\n  \"700\": \"3dccee8e873d2c9c2f8359417e666b702f97b60b90b229e3c41190909ff9388b\",\n  \"701\": \"65a57fc7ebcdab77821276a1eba1c1a625bf2bae575b025359de492592ded205\",\n  \"702\": \"c1b0ade78aadbf0d5576489c2200439ef825fe74452115edbc908e9ff955efc0\",\n  \"703\": \"1e5ea7fffdcdbca5fc91694b200db8e2e3737e829b7694e4dcf3b937b41be330\",\n  \"704\": \"9ddf38880f294ac1a759c764c394cacd4635735880f326a0b5e4a896e4fdce8c\",\n  \"705\": \"2bb033d9eeb9157fc6ae835e99b9523bfb1d61173cfb34941cbfdc4c0d3ea67e\",\n  \"706\": \"51a0e8daacbd6537efd583c48c5815a9bd22fef0eb9b8e15dbe2ee87c76e2a6b\",\n  \"707\": \"9f50d3b52dc4ebae279c6f6021258ca8cd60b8cd13e358f29a2879caa390a774\",\n  \"708\": \"42e0a9be7737aaab1fd27543c0273f4c97dd3bd6471e6ec04b1fc7b79542db71\",\n  \"709\": \"ac2605c16873ea2b5f0ce5008089a55e37588f45313ad06ccc7dfd96f407eb8a\",\n  \"710\": \"09214942caed4184e7155b4016b1e0de37c0a142deaebee3879c770438a28276\",\n  \"711\": \"8d8ea19a78bcb10e502f91a057bac1b200ab17db66e11cdf42b63ec65a8e6c18\",\n  \"712\": \"001493340cc232a48125f958308be6d0567ff2684e0625e55af8b0a024c4ccca\",\n  \"713\": \"98a124df4ffa11cca86fbd959f4d091665fc871a4a86cc1024429d1c116b556e\",\n  \"714\": \"cd175b00873a9a3369c628861c1f20df57a4ca75074530ebf5b974d04b8b93c4\",\n  \"715\": \"cdb954d8620ad2d95915f94243cdcf71170cfc363334b2f831544f55f0d15746\",\n  \"716\": \"abb62293fb9df9bc7a6e80ea24f0da1049f894ade937367e24563a3277f953ef\",\n  \"717\": \"319369720bf1831be4c73600c26f5d08dcf6cf85fd32340c28263e39c1dda5e6\",\n  \"718\": \"412ce061b1ae228d2226fdb3bf2cb68421870465d6a8cf7ae58515c02fe54684\",\n  \"719\": \"c461587d4f3a41c375628e94fb9f971cc2829b8608d3c7aca840e62a6c8f1929\",\n  \"720\": \"3651d0d1f023c90e42be5c6ccf28ca71203d1c67d85249323d35db28f146786f\",\n  \"721\": \"8430fc43038ba44efb6e9ecbd5aa3dfeaeaf73f2d04a2d5596855c7de5de9c20\",\n  \"722\": \"9687101dfe209fd65f57a10603baa38ba83c9152e43a8b802b96f1e07f568e0e\",\n  \"723\": \"74832787e7d4e0cb7991256c8f6d02775dffec0684de234786f25f898003f2de\",\n  \"724\": \"fa05e2b497e7eafa64574017a4c45aadef6b163d907b03d63ba3f4021096d329\",\n  \"725\": \"005c873563f51bbebfdb1f8dbc383259e9a98e506bc87ae8d8c9044b81fc6418\",\n  \"726\": \"93e41c533136bf4b436e493090fd4e7b277234db2a69c62a871f775ff26681bf\",\n  \"727\": \"c366f7426ca9351dcdde2e3bea01181897cda4d9b44977678ea3828419b84851\",\n  \"728\": \"8de62a644511d27c7c23c7722f56112b3c1ab9b05a078a98a0891f09f92464c6\",\n  \"729\": \"0ae82177174eef99fc80a2ec921295f61a6ac4dfed86a1bf333a50c26d01955c\",\n  \"730\": \"78cd876a176c8fbf7c2155b80dccbdededdbc43c28ef17b5a6e554d649325d38\",\n  \"731\": \"54afb9f829be51d29f90eecbfe40e5ba91f3a3bf538de62f3e34674af15eb542\",\n  \"732\": \"c4dc4610dcafc806b30e5d3f5560b57f462218a04397809843a7110838f0ebac\",\n  \"733\": \"bdde7d98d057d6a6ae360fd2f872d8bccb7e7f2971df37a3c5f20712ea3c618f\",\n  \"734\": \"9a514875bd9af26fcc565337771f852d311cd77033186e4d957e7b6c7b8ce018\",\n  \"735\": \"8bbc5a27c0031d8c44f3f73c99622a202cd6ea9a080049d615a7ae80ce6024f9\",\n  \"736\": \"e0d4c78b9b3dae51940877aff28275d036eccfc641111c8e34227ff6015a0fab\",\n  \"737\": \"a600884bcaa01797310c83b198bad58c98530289305af29b0bf75f679af38d3a\",\n  \"738\": \"c85f15fdaafe7d5525acff960afef7e4b8ffded5a7ee0d1dc2b0e8d0c26b9b46\",\n  \"739\": \"8716e9302f0fb90153e2f522bd88a710361a897480e4ccc0542473c704793518\",\n  \"740\": \"6ff41ee34b263b742cda109aee3be9ad6c95eec2ce31d6a9fc5353bba1b41afd\",\n  \"741\": \"99ac0eb9589b895e5755895206bbad5febd6bc29b2912df1c7544c547e26bca3\",\n  \"742\": \"7d2761a240aa577348df4813ea248088d0d6d8d421142c712ed576cdc90d4df9\",\n  \"743\": \"d93c42a129c0961b4e36738efae3b7e8ffae3a4daeced20e85bb740d3d72522d\",\n  \"744\": \"211f76700a010461486dde6c723720be85e68c192cd8a8ed0a88860b8ae9b0f0\",\n  \"745\": \"2d32dc1fea2f1b8600c0ada927b057b566870ceb5362cce71ac3693dcb7136ae\",\n  \"746\": \"2df1c2a0181f0c25e8d13d2a1eadba55a6b06267a2b22075fcf6867fb2e10c02\",\n  \"747\": \"a8d8f93142e320c6f0dd386c7a3bfb011bbdc15b85291a9be8f0266b3608175e\",\n  \"748\": \"7de937e04c10386b240afb8bb2ff590009946df8b7850a0329ccdb59fca8955f\",\n  \"749\": \"1a55f5484ccf964aeb186faedefa01db05d87180891dc2280b6eb85b6efb4779\",\n  \"750\": \"fa4318c213179e6af1c949be7cf47210f4383e0a44d191e2bad44228d3192f14\",\n  \"751\": \"12fe650fcb3afc214b3d647c655070e8142cfd397441fc7636ad7e6ffcaefde2\",\n  \"752\": \"e416c0123bc6b82df8726b328494db31aa4781d938a0a6e2107b1e44c73c0434\",\n  \"753\": \"0ee3299bc89e1e4c2fc79285fb1cd84c887456358a825e56be92244b7115f5af\",\n  \"754\": \"1370574b16207c41d3dafb62aa898379ec101ac36843634b1633b7b509d4c35a\",\n  \"755\": \"78bb4b18b13f5254cfafe872c0e93791ab5206b2851960dc6aebea8f62b9580c\",\n  \"756\": \"6becaabbda2e9ea22373e62e989b6b70467efa24fbe2f0d124d7a99a53e93f74\",\n  \"757\": \"fbfee0a5c4fa57a1dd6cf0c9bb2423cf7e7bcb130e67114aa360e42234987314\",\n  \"758\": \"8e4dfc259cec9dfd89d4b4ac8c33c75af6e0f5f7926526ee22ad4d45f93d3c18\",\n  \"759\": \"40bac0ed2e4f7861a6d9a2d87191a9034e177c319aa40a43638cc1b69572e5f2\",\n  \"760\": \"7ab50386a211f0815593389ab05b57a1a5eb5cbf5b9a85fe4afc517dcab74e06\",\n  \"761\": \"1cdb0318ac16e11c8d2ae7b1d7ca7138f7b1a461e9d75bd69be0f9cdd3add0c5\",\n  \"762\": \"84c4662267d5809380a540dfc2881665b3019047d74d5ef0a01f86e45f4b5b59\",\n  \"763\": \"f0def5903139447fabe7d106db5fff660d94b45af7b8b48d789596cf65ab2514\",\n  \"764\": \"7b4131f4d1e13d091ca7dd4d32317a14a2a24e6e1abd214df1c14c215287b330\",\n  \"765\": \"7558b775727426bccd945f5aa6b3e131e6034a7b1ff8576332329ef65d6a1663\",\n  \"766\": \"23c309430fa9546adb617457dbfd30fb7432904595c8c000e9b67ea23f32a53b\",\n  \"767\": \"70aef22ac2db8a5bdfcc42ff8dafbd2901e85e268f5f3c45085aa40c590b1d42\",\n  \"768\": \"b69a808dfc654b037e2f47ace16f48fe3bb553b3c8eed3e2b6421942fbf521d0\",\n  \"769\": \"78537a30577e806c6d8d94725e54d2d52e56f7f39f89c133cd5d0a2aad7e46e4\",\n  \"770\": \"c9d80c19c4895d1498bf809fcc37c447fa961fb325e5667eb35d6aa992966b41\",\n  \"771\": \"9803ace30c0d90d422e703fdf25a10a9342d0178a277ebc20c7bd6feac4c7a15\",\n  \"772\": \"f5a1e391af815ea6453db58a1bd71790f433c44ed63e5e93d8f5c045dfd5a464\",\n  \"773\": \"e1b93fc323c4d9c383100603339548e1e56ce9c38bcdcc425024c12b862ea8cb\",\n  \"774\": \"3646cd098b213014fb7bbc9597871585e62ee0cf2770e141f1df771237cc09ab\",\n  \"775\": \"d9d7d515ce7350c9e5696d85f68bbb42daa74b9e171a601dd04c823b18bb7757\",\n  \"776\": \"83286074d3bc86a5b449facb5fe5eafc91eb4c8031e2fb5e716443402cd8ed0f\",\n  \"777\": \"e62616a387d05b619d47cee3d49d5d2db19393736bf54b6cdd20933c0531cb7e\",\n  \"778\": \"d4de958ba44d25353de5b380e04d06c7968794ad50dbf6231ad0049ff53e106b\",\n  \"779\": \"c08ce54a59afc4af62f28b80a9c9a5190822d124eed8d73fd6db3e19c81e2157\",\n  \"780\": \"fc7ba646c16482f0f4f5ce2b06d21183dba2bdeaf9469b36b55bc7bc2d87baf3\",\n  \"781\": \"8fa5733f06838fb61b55b3e9d59c5061d922147e59947fe52e566dd975b2199f\",\n  \"782\": \"9f757d92df401ee049bc066bb2625c6287e5e4bcd38c958396a77a578f036a24\",\n  \"783\": \"270ff37f60c267a673bd4b223e44941f01ae9cfbf6bbdf99ca57af89b1e9a66f\",\n  \"784\": \"388b17c4c7b829cef767f83b4686c903faeec1241edfe5f58ee91d2b0c7f8dfc\",\n  \"785\": \"77cf600204c5265e1d5d3d26bf28ba1e92e6f24def040c16977450bec8b1cb99\",\n  \"786\": \"fb14022b7edbc6c7bfde27f35b49f6acaa4f0fc383af27614cb9d4a1980e626b\",\n  \"787\": \"7516ba0ac1951665723dcc4adcc52764d9497e7b6ed30bdb9937ac9df82b7c4f\",\n  \"788\": \"adede1d30258bb0f353af11f559b67f8b823304c71e967f52db52d002760c24f\",\n  \"789\": \"0c82e744a1f9bc57fd8ae8b2f479998455bc45126de971c59b68541c254e303a\",\n  \"790\": \"319847122251afd20d4d650047c55981a509fa2be78abd7c9c3caa0555e60a05\",\n  \"791\": \"2e0bbdcd0a8460e1e33c55668d0dc9752379a78b9f3561d7a17b922a5541a3fb\",\n  \"792\": \"5f77834c5a509023dd95dd98411eae1dd4bafd125deca590632f409f92fd257b\",\n  \"793\": \"dbfd900a3b31eeec2f14b916f5151611541cb716d80b7b9a1229de12293a02ea\",\n  \"794\": \"d019fe415aba832c4c761140d60c466c9aaad52b504df3167c17f2d3f0b277a7\",\n  \"795\": \"617b259349da44c2af2664acde113673ab3bb03a85d31f1be8f01027d0ebd4d3\",\n  \"796\": \"cba6b30a818d073398e5802211987f0897523e4752987bb445b2bca079670e22\",\n  \"797\": \"61e42cac3d7858b8850111a8c64c56432a18dd058dfb6afd773f07d703703b1a\",\n  \"798\": \"ae8b155d6b77522af79f7e4017fefe92aaa5d45eff132c83dc4d4bcfc9686020\",\n  \"799\": \"a41cb14ddf8f1948a01f590fbe53d9ca4e2faf48375ce1c306f91acf7c94e005\",\n  \"800\": \"c6a47bc6f02cf06be16728fb308c83f2f2ae350325ef7016867f5bdaea849d71\",\n  \"801\": \"d14b358c76b55106613f9c0a2112393338dfd01513b0fd231b79fc8db20e41f0\",\n  \"802\": \"22ae33e67fb48accfaa3b36e70c5a19066b974194c3130680de0c7cdce2d0f2e\",\n  \"803\": \"d95b3f9bbb7054042c1fba4db02f7223a2dad94977a36f08c8aaf92f373f9e78\",\n  \"804\": \"b0b1cf7253593eb2334c75e66dbe22b4b4540347485f1ea24e80226b4b18171c\",\n  \"805\": \"41b1ff5db0e70984ad20c50d1a9ac2b5a53ccd5f42796c8e948ae8880005fbb9\",\n  \"806\": \"b9c813beb39671adb8e1530555cadca44c21ddc7127932274918df2091dbd9ca\",\n  \"807\": \"745fd9ba97970d85a29877942839e41fc192794420e86f3bde39fd26db7a8bff\",\n  \"808\": \"6c73b947eb603602a7e8afadc83eaaa381a46db8b82a6fb89c9c1d93cb023fce\",\n  \"809\": \"eebac7753da4c1230dfce0f15fc124ffff01b0e432f0b74623b60cff71bbc9a9\",\n  \"810\": \"42be7899672a1a0046823603ce60dbeda7250a56fcb8d0913093850c85394307\",\n  \"811\": \"8698cd28ae4d93db36631870c33e4a8a527d970050d994666115f54260b64138\",\n  \"812\": \"dc2495924f37353db8b846323b8085fae9db502e890c513ed2e64ed7281f567f\",\n  \"813\": \"92179dde05aa6557baca65699fda50ca024d33a77078d8e128caa3c5db84064b\",\n  \"814\": \"344ed8cb7684307c00b7f03d751729a7f9d2a5f4a4cb4574594113d69593c0c1\",\n  \"815\": \"f642cf15345af3feab60e26a02aee038f759914906a5b2b469b46fdeee50ff59\",\n  \"816\": \"058178444e85f2aedb2f75d824a469747381f0bd3235d8c72df4385fec86eb07\",\n  \"817\": \"582fdc2233298192b09ceaf1463d6be06a09894075532630aa9d9efcfcb31da4\",\n  \"818\": \"67f6964d6ff114a43371b8375c44db2f1362df4f110b4a7ce8d79cf1b76621a0\",\n  \"819\": \"c7a82513ad48dfc87f2c1e0f2915b71464b7f5a16501c71df4ae4a8741dceef3\",\n  \"820\": \"9b23ae0181f320aadda2637ac2179c8b41b00715630c3acb643c7aee3b81cf90\",\n  \"821\": \"0941e396ff15b98fd7827de8e33ef94996d48ba719a88ba8e2da7f2605df3e5c\",\n  \"822\": \"ed8ef7f568939b9df1b77ae58344940b91c7e154a4367fe2b179bc7b9484d4e6\",\n  \"823\": \"05139328571a86096032b57e3a6a02a61acad4fb0d8f8e1b5d0ffb0d063ba697\",\n  \"826\": \"7f40f14ca65e5c06dd9ec9bbb212adb4d97a503199cb3c30ed921a04373bbe1c\",\n  \"827\": \"80461f02c63654c642382a6ffb7a44d0a3554434dfcfcea00ba91537724c7106\",\n  \"828\": \"520c196175625a0230afb76579ea26033372de3ef4c78aceb146b84322bfa871\",\n  \"829\": \"ed0089e61cf5540dd4a8fef1c468b96cf57f1d2bb79968755ba856d547ddafdf\",\n  \"831\": \"8ec445084427419ca6da405e0ded9814a4b4e11a2be84d88a8dea421f8e49992\",\n  \"832\": \"cfcb9ebef9308823f64798b5e12a59bf77ff6f92b0eae3790a61c0a26f577010\",\n  \"833\": \"e6ff3a5b257eb53366a32bfc8ea410a00a78bafa63650c76ac2bceddfbb42ff5\",\n  \"834\": \"b0d2a7e7d629ef14db9e7352a9a06d6ca66f750429170bb169ca52c172b8cc96\",\n  \"835\": \"bdfa1b1eecbad79f5de48bc6daee4d2b07689d7fb172aa306dd6094172b396f0\"\n}\n"
  },
  {
    "path": "scripts/validate_filenames.py",
    "content": "#!/usr/bin/env python3\n\nimport os\n\ntry:\n    from .build_directory_md import good_file_paths\nexcept ImportError:\n    from build_directory_md import good_file_paths  # type: ignore[no-redef]\n\nfilepaths = list(good_file_paths())\nassert filepaths, \"good_file_paths() failed!\"\n\nif upper_files := [file for file in filepaths if file != file.lower()]:\n    print(f\"{len(upper_files)} files contain uppercase characters:\")\n    print(\"\\n\".join(upper_files) + \"\\n\")\n\nif space_files := [file for file in filepaths if \" \" in file]:\n    print(f\"{len(space_files)} files contain space characters:\")\n    print(\"\\n\".join(space_files) + \"\\n\")\n\nif hyphen_files := [\n    file for file in filepaths if \"-\" in file and \"/site-packages/\" not in file\n]:\n    print(f\"{len(hyphen_files)} files contain hyphen characters:\")\n    print(\"\\n\".join(hyphen_files) + \"\\n\")\n\nif nodir_files := [file for file in filepaths if os.sep not in file]:\n    print(f\"{len(nodir_files)} files are not in a directory:\")\n    print(\"\\n\".join(nodir_files) + \"\\n\")\n\nif bad_files := len(upper_files + space_files + hyphen_files + nodir_files):\n    import sys\n\n    sys.exit(bad_files)\n"
  },
  {
    "path": "scripts/validate_solutions.py",
    "content": "#!/usr/bin/env python3\n\n# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"httpx\",\n#     \"pytest\",\n# ]\n# ///\n\nimport hashlib\nimport importlib.util\nimport json\nimport os\nimport pathlib\nfrom types import ModuleType\n\nimport httpx\nimport pytest\n\nPROJECT_EULER_DIR_PATH = pathlib.Path.cwd().joinpath(\"project_euler\")\nPROJECT_EULER_ANSWERS_PATH = pathlib.Path.cwd().joinpath(\n    \"scripts\", \"project_euler_answers.json\"\n)\n\nwith open(PROJECT_EULER_ANSWERS_PATH) as file_handle:\n    PROBLEM_ANSWERS: dict[str, str] = json.load(file_handle)\n\n\ndef convert_path_to_module(file_path: pathlib.Path) -> ModuleType:\n    \"\"\"Converts a file path to a Python module\"\"\"\n    spec = importlib.util.spec_from_file_location(file_path.name, str(file_path))\n    module = importlib.util.module_from_spec(spec)  # type: ignore[arg-type]\n    spec.loader.exec_module(module)  # type: ignore[union-attr]\n    return module\n\n\ndef all_solution_file_paths() -> list[pathlib.Path]:\n    \"\"\"Collects all the solution file path in the Project Euler directory\"\"\"\n    solution_file_paths = []\n    for problem_dir_path in PROJECT_EULER_DIR_PATH.iterdir():\n        if problem_dir_path.is_file() or problem_dir_path.name.startswith(\"_\"):\n            continue\n        for file_path in problem_dir_path.iterdir():\n            if file_path.suffix != \".py\" or file_path.name.startswith((\"_\", \"test\")):\n                continue\n            solution_file_paths.append(file_path)\n    return solution_file_paths\n\n\ndef get_files_url() -> str:\n    \"\"\"Return the pull request number which triggered this action.\"\"\"\n    with open(os.environ[\"GITHUB_EVENT_PATH\"]) as file:\n        event = json.load(file)\n    return event[\"pull_request\"][\"url\"] + \"/files\"\n\n\ndef added_solution_file_path() -> list[pathlib.Path]:\n    \"\"\"Collects only the solution file path which got added in the current\n    pull request.\n\n    This will only be triggered if the script is ran from GitHub Actions.\n    \"\"\"\n    solution_file_paths = []\n    headers = {\n        \"Accept\": \"application/vnd.github.v3+json\",\n        \"Authorization\": \"token \" + os.environ[\"GITHUB_TOKEN\"],\n    }\n    files = httpx.get(get_files_url(), headers=headers, timeout=10).json()\n    for file in files:\n        filepath = pathlib.Path.cwd().joinpath(file[\"filename\"])\n        if (\n            filepath.suffix != \".py\"\n            or filepath.name.startswith((\"_\", \"test\"))\n            or not filepath.name.startswith(\"sol\")\n        ):\n            continue\n        solution_file_paths.append(filepath)\n    return solution_file_paths\n\n\ndef collect_solution_file_paths() -> list[pathlib.Path]:\n    # Return only if there are any, otherwise default to all solutions\n    if (\n        os.environ.get(\"CI\")\n        and os.environ.get(\"GITHUB_EVENT_NAME\") == \"pull_request\"\n        and (filepaths := added_solution_file_path())\n    ):\n        return filepaths\n    return all_solution_file_paths()\n\n\n@pytest.mark.parametrize(\n    \"solution_path\",\n    collect_solution_file_paths(),\n    ids=lambda path: f\"{path.parent.name}/{path.name}\",\n)\ndef test_project_euler(solution_path: pathlib.Path) -> None:\n    \"\"\"Testing for all Project Euler solutions\"\"\"\n    # problem_[extract this part] and pad it with zeroes for width 3\n    problem_number: str = solution_path.parent.name[8:].zfill(3)\n    expected: str = PROBLEM_ANSWERS[problem_number]\n    solution_module = convert_path_to_module(solution_path)\n    answer = str(solution_module.solution())\n    answer = hashlib.sha256(answer.encode()).hexdigest()\n    assert answer == expected, (\n        f\"Expected solution to {problem_number} to have hash {expected}, got {answer}\"\n    )\n"
  },
  {
    "path": "searches/__init__.py",
    "content": ""
  },
  {
    "path": "searches/binary_search.py",
    "content": "#!/usr/bin/env python3\n\n\"\"\"\nPure Python implementations of binary search algorithms\n\nFor doctests run the following command:\npython3 -m doctest -v binary_search.py\n\nFor manual testing run:\npython3 binary_search.py\n\"\"\"\n\nimport bisect\nfrom itertools import pairwise\n\n\ndef bisect_left(\n    sorted_collection: list[int], item: int, lo: int = 0, hi: int = -1\n) -> int:\n    \"\"\"\n    Locates the first element in a sorted array that is larger or equal to a given\n    value.\n\n    It has the same interface as\n    https://docs.python.org/3/library/bisect.html#bisect.bisect_left .\n\n    :param sorted_collection: some ascending sorted collection with comparable items\n    :param item: item to bisect\n    :param lo: lowest index to consider (as in sorted_collection[lo:hi])\n    :param hi: past the highest index to consider (as in sorted_collection[lo:hi])\n    :return: index i such that all values in sorted_collection[lo:i] are < item and all\n        values in sorted_collection[i:hi] are >= item.\n\n    Examples:\n    >>> bisect_left([0, 5, 7, 10, 15], 0)\n    0\n    >>> bisect_left([0, 5, 7, 10, 15], 6)\n    2\n    >>> bisect_left([0, 5, 7, 10, 15], 20)\n    5\n    >>> bisect_left([0, 5, 7, 10, 15], 15, 1, 3)\n    3\n    >>> bisect_left([0, 5, 7, 10, 15], 6, 2)\n    2\n    \"\"\"\n    if hi < 0:\n        hi = len(sorted_collection)\n\n    while lo < hi:\n        mid = lo + (hi - lo) // 2\n        if sorted_collection[mid] < item:\n            lo = mid + 1\n        else:\n            hi = mid\n\n    return lo\n\n\ndef bisect_right(\n    sorted_collection: list[int], item: int, lo: int = 0, hi: int = -1\n) -> int:\n    \"\"\"\n    Locates the first element in a sorted array that is larger than a given value.\n\n    It has the same interface as\n    https://docs.python.org/3/library/bisect.html#bisect.bisect_right .\n\n    :param sorted_collection: some ascending sorted collection with comparable items\n    :param item: item to bisect\n    :param lo: lowest index to consider (as in sorted_collection[lo:hi])\n    :param hi: past the highest index to consider (as in sorted_collection[lo:hi])\n    :return: index i such that all values in sorted_collection[lo:i] are <= item and\n        all values in sorted_collection[i:hi] are > item.\n\n    Examples:\n    >>> bisect_right([0, 5, 7, 10, 15], 0)\n    1\n    >>> bisect_right([0, 5, 7, 10, 15], 15)\n    5\n    >>> bisect_right([0, 5, 7, 10, 15], 6)\n    2\n    >>> bisect_right([0, 5, 7, 10, 15], 15, 1, 3)\n    3\n    >>> bisect_right([0, 5, 7, 10, 15], 6, 2)\n    2\n    \"\"\"\n    if hi < 0:\n        hi = len(sorted_collection)\n\n    while lo < hi:\n        mid = lo + (hi - lo) // 2\n        if sorted_collection[mid] <= item:\n            lo = mid + 1\n        else:\n            hi = mid\n\n    return lo\n\n\ndef insort_left(\n    sorted_collection: list[int], item: int, lo: int = 0, hi: int = -1\n) -> None:\n    \"\"\"\n    Inserts a given value into a sorted array before other values with the same value.\n\n    It has the same interface as\n    https://docs.python.org/3/library/bisect.html#bisect.insort_left .\n\n    :param sorted_collection: some ascending sorted collection with comparable items\n    :param item: item to insert\n    :param lo: lowest index to consider (as in sorted_collection[lo:hi])\n    :param hi: past the highest index to consider (as in sorted_collection[lo:hi])\n\n    Examples:\n    >>> sorted_collection = [0, 5, 7, 10, 15]\n    >>> insort_left(sorted_collection, 6)\n    >>> sorted_collection\n    [0, 5, 6, 7, 10, 15]\n    >>> sorted_collection = [(0, 0), (5, 5), (7, 7), (10, 10), (15, 15)]\n    >>> item = (5, 5)\n    >>> insort_left(sorted_collection, item)\n    >>> sorted_collection\n    [(0, 0), (5, 5), (5, 5), (7, 7), (10, 10), (15, 15)]\n    >>> item is sorted_collection[1]\n    True\n    >>> item is sorted_collection[2]\n    False\n    >>> sorted_collection = [0, 5, 7, 10, 15]\n    >>> insort_left(sorted_collection, 20)\n    >>> sorted_collection\n    [0, 5, 7, 10, 15, 20]\n    >>> sorted_collection = [0, 5, 7, 10, 15]\n    >>> insort_left(sorted_collection, 15, 1, 3)\n    >>> sorted_collection\n    [0, 5, 7, 15, 10, 15]\n    \"\"\"\n    sorted_collection.insert(bisect_left(sorted_collection, item, lo, hi), item)\n\n\ndef insort_right(\n    sorted_collection: list[int], item: int, lo: int = 0, hi: int = -1\n) -> None:\n    \"\"\"\n    Inserts a given value into a sorted array after other values with the same value.\n\n    It has the same interface as\n    https://docs.python.org/3/library/bisect.html#bisect.insort_right .\n\n    :param sorted_collection: some ascending sorted collection with comparable items\n    :param item: item to insert\n    :param lo: lowest index to consider (as in sorted_collection[lo:hi])\n    :param hi: past the highest index to consider (as in sorted_collection[lo:hi])\n\n    Examples:\n    >>> sorted_collection = [0, 5, 7, 10, 15]\n    >>> insort_right(sorted_collection, 6)\n    >>> sorted_collection\n    [0, 5, 6, 7, 10, 15]\n    >>> sorted_collection = [(0, 0), (5, 5), (7, 7), (10, 10), (15, 15)]\n    >>> item = (5, 5)\n    >>> insort_right(sorted_collection, item)\n    >>> sorted_collection\n    [(0, 0), (5, 5), (5, 5), (7, 7), (10, 10), (15, 15)]\n    >>> item is sorted_collection[1]\n    False\n    >>> item is sorted_collection[2]\n    True\n    >>> sorted_collection = [0, 5, 7, 10, 15]\n    >>> insort_right(sorted_collection, 20)\n    >>> sorted_collection\n    [0, 5, 7, 10, 15, 20]\n    >>> sorted_collection = [0, 5, 7, 10, 15]\n    >>> insort_right(sorted_collection, 15, 1, 3)\n    >>> sorted_collection\n    [0, 5, 7, 15, 10, 15]\n    \"\"\"\n    sorted_collection.insert(bisect_right(sorted_collection, item, lo, hi), item)\n\n\ndef binary_search(sorted_collection: list[int], item: int) -> int:\n    \"\"\"Pure implementation of a binary search algorithm in Python\n\n    Be careful collection must be ascending sorted otherwise, the result will be\n    unpredictable\n\n    :param sorted_collection: some ascending sorted collection with comparable items\n    :param item: item value to search\n    :return: index of the found item or -1 if the item is not found\n\n    Examples:\n    >>> binary_search([0, 5, 7, 10, 15], 0)\n    0\n    >>> binary_search([0, 5, 7, 10, 15], 15)\n    4\n    >>> binary_search([0, 5, 7, 10, 15], 5)\n    1\n    >>> binary_search([0, 5, 7, 10, 15], 6)\n    -1\n    \"\"\"\n    if any(a > b for a, b in pairwise(sorted_collection)):\n        raise ValueError(\"sorted_collection must be sorted in ascending order\")\n    left = 0\n    right = len(sorted_collection) - 1\n\n    while left <= right:\n        midpoint = left + (right - left) // 2\n        current_item = sorted_collection[midpoint]\n        if current_item == item:\n            return midpoint\n        elif item < current_item:\n            right = midpoint - 1\n        else:\n            left = midpoint + 1\n    return -1\n\n\ndef binary_search_std_lib(sorted_collection: list[int], item: int) -> int:\n    \"\"\"Pure implementation of a binary search algorithm in Python using stdlib\n\n    Be careful collection must be ascending sorted otherwise, the result will be\n    unpredictable\n\n    :param sorted_collection: some ascending sorted collection with comparable items\n    :param item: item value to search\n    :return: index of the found item or -1 if the item is not found\n\n    Examples:\n    >>> binary_search_std_lib([0, 5, 7, 10, 15], 0)\n    0\n    >>> binary_search_std_lib([0, 5, 7, 10, 15], 15)\n    4\n    >>> binary_search_std_lib([0, 5, 7, 10, 15], 5)\n    1\n    >>> binary_search_std_lib([0, 5, 7, 10, 15], 6)\n    -1\n    \"\"\"\n    if list(sorted_collection) != sorted(sorted_collection):\n        raise ValueError(\"sorted_collection must be sorted in ascending order\")\n    index = bisect.bisect_left(sorted_collection, item)\n    if index != len(sorted_collection) and sorted_collection[index] == item:\n        return index\n    return -1\n\n\ndef binary_search_with_duplicates(sorted_collection: list[int], item: int) -> list[int]:\n    \"\"\"Pure implementation of a binary search algorithm in Python that supports\n    duplicates.\n\n    Resources used:\n    https://stackoverflow.com/questions/13197552/using-binary-search-with-sorted-array-with-duplicates\n\n    The collection must be sorted in ascending order; otherwise the result will be\n    unpredictable. If the target appears multiple times, this function returns a\n    list of all indexes where the target occurs. If the target is not found,\n    this function returns an empty list.\n\n    :param sorted_collection: some ascending sorted collection with comparable items\n    :param item: item value to search for\n    :return: a list of indexes where the item is found (empty list if not found)\n\n    Examples:\n    >>> binary_search_with_duplicates([0, 5, 7, 10, 15], 0)\n    [0]\n    >>> binary_search_with_duplicates([0, 5, 7, 10, 15], 15)\n    [4]\n    >>> binary_search_with_duplicates([1, 2, 2, 2, 3], 2)\n    [1, 2, 3]\n    >>> binary_search_with_duplicates([1, 2, 2, 2, 3], 4)\n    []\n    \"\"\"\n    if list(sorted_collection) != sorted(sorted_collection):\n        raise ValueError(\"sorted_collection must be sorted in ascending order\")\n\n    def lower_bound(sorted_collection: list[int], item: int) -> int:\n        \"\"\"\n        Returns the index of the first element greater than or equal to the item.\n\n        :param sorted_collection: The sorted list to search.\n        :param item: The item to find the lower bound for.\n        :return: The index where the item can be inserted while maintaining order.\n        \"\"\"\n        left = 0\n        right = len(sorted_collection)\n        while left < right:\n            midpoint = left + (right - left) // 2\n            current_item = sorted_collection[midpoint]\n            if current_item < item:\n                left = midpoint + 1\n            else:\n                right = midpoint\n        return left\n\n    def upper_bound(sorted_collection: list[int], item: int) -> int:\n        \"\"\"\n        Returns the index of the first element strictly greater than the item.\n\n        :param sorted_collection: The sorted list to search.\n        :param item: The item to find the upper bound for.\n        :return: The index where the item can be inserted after all existing instances.\n        \"\"\"\n        left = 0\n        right = len(sorted_collection)\n        while left < right:\n            midpoint = left + (right - left) // 2\n            current_item = sorted_collection[midpoint]\n            if current_item <= item:\n                left = midpoint + 1\n            else:\n                right = midpoint\n        return left\n\n    left = lower_bound(sorted_collection, item)\n    right = upper_bound(sorted_collection, item)\n\n    if left == len(sorted_collection) or sorted_collection[left] != item:\n        return []\n    return list(range(left, right))\n\n\ndef binary_search_by_recursion(\n    sorted_collection: list[int], item: int, left: int = 0, right: int = -1\n) -> int:\n    \"\"\"Pure implementation of a binary search algorithm in Python by recursion\n\n    Be careful collection must be ascending sorted otherwise, the result will be\n    unpredictable\n    First recursion should be started with left=0 and right=(len(sorted_collection)-1)\n\n    :param sorted_collection: some ascending sorted collection with comparable items\n    :param item: item value to search\n    :return: index of the found item or -1 if the item is not found\n\n    Examples:\n    >>> binary_search_by_recursion([0, 5, 7, 10, 15], 0, 0, 4)\n    0\n    >>> binary_search_by_recursion([0, 5, 7, 10, 15], 15, 0, 4)\n    4\n    >>> binary_search_by_recursion([0, 5, 7, 10, 15], 5, 0, 4)\n    1\n    >>> binary_search_by_recursion([0, 5, 7, 10, 15], 6, 0, 4)\n    -1\n    \"\"\"\n    if right < 0:\n        right = len(sorted_collection) - 1\n    if list(sorted_collection) != sorted(sorted_collection):\n        raise ValueError(\"sorted_collection must be sorted in ascending order\")\n    if right < left:\n        return -1\n\n    midpoint = left + (right - left) // 2\n\n    if sorted_collection[midpoint] == item:\n        return midpoint\n    elif sorted_collection[midpoint] > item:\n        return binary_search_by_recursion(sorted_collection, item, left, midpoint - 1)\n    else:\n        return binary_search_by_recursion(sorted_collection, item, midpoint + 1, right)\n\n\ndef exponential_search(sorted_collection: list[int], item: int) -> int:\n    \"\"\"Pure implementation of an exponential search algorithm in Python\n    Resources used:\n    https://en.wikipedia.org/wiki/Exponential_search\n\n    Be careful collection must be ascending sorted otherwise, result will be\n    unpredictable\n\n    :param sorted_collection: some ascending sorted collection with comparable items\n    :param item: item value to search\n    :return: index of the found item or -1 if the item is not found\n\n    the order of this algorithm is O(lg I) where I is index position of item if exist\n\n    Examples:\n    >>> exponential_search([0, 5, 7, 10, 15], 0)\n    0\n    >>> exponential_search([0, 5, 7, 10, 15], 15)\n    4\n    >>> exponential_search([0, 5, 7, 10, 15], 5)\n    1\n    >>> exponential_search([0, 5, 7, 10, 15], 6)\n    -1\n    \"\"\"\n    if list(sorted_collection) != sorted(sorted_collection):\n        raise ValueError(\"sorted_collection must be sorted in ascending order\")\n    bound = 1\n    while bound < len(sorted_collection) and sorted_collection[bound] < item:\n        bound *= 2\n    left = bound // 2\n    right = min(bound, len(sorted_collection) - 1)\n    last_result = binary_search_by_recursion(\n        sorted_collection=sorted_collection, item=item, left=left, right=right\n    )\n    if last_result is None:\n        return -1\n    return last_result\n\n\nsearches = (  # Fastest to slowest...\n    binary_search_std_lib,\n    binary_search,\n    exponential_search,\n    binary_search_by_recursion,\n)\n\n\nif __name__ == \"__main__\":\n    import doctest\n    import timeit\n\n    doctest.testmod()\n    for search in searches:\n        name = f\"{search.__name__:>26}\"\n        print(f\"{name}: {search([0, 5, 7, 10, 15], 10) = }\")  # type: ignore[operator]\n\n    print(\"\\nBenchmarks...\")\n    setup = \"collection = range(1000)\"\n    for search in searches:\n        name = search.__name__\n        print(\n            f\"{name:>26}:\",\n            timeit.timeit(\n                f\"{name}(collection, 500)\", setup=setup, number=5_000, globals=globals()\n            ),\n        )\n\n    user_input = input(\"\\nEnter numbers separated by comma: \").strip()\n    collection = sorted(int(item) for item in user_input.split(\",\"))\n    target = int(input(\"Enter a single number to be found in the list: \"))\n    result = binary_search(sorted_collection=collection, item=target)\n    if result == -1:\n        print(f\"{target} was not found in {collection}.\")\n    else:\n        print(f\"{target} was found at position {result} of {collection}.\")\n"
  },
  {
    "path": "searches/binary_tree_traversal.py",
    "content": "\"\"\"\nThis is pure Python implementation of tree traversal algorithms\n\"\"\"\n\nfrom __future__ import annotations\n\nimport queue\n\n\nclass TreeNode:\n    def __init__(self, data):\n        self.data = data\n        self.right = None\n        self.left = None\n\n\ndef build_tree() -> TreeNode:\n    print(\"\\n********Press N to stop entering at any point of time********\\n\")\n    check = input(\"Enter the value of the root node: \").strip().lower()\n    q: queue.Queue = queue.Queue()\n    tree_node = TreeNode(int(check))\n    q.put(tree_node)\n    while not q.empty():\n        node_found = q.get()\n        msg = f\"Enter the left node of {node_found.data}: \"\n        check = input(msg).strip().lower() or \"n\"\n        if check == \"n\":\n            return tree_node\n        left_node = TreeNode(int(check))\n        node_found.left = left_node\n        q.put(left_node)\n        msg = f\"Enter the right node of {node_found.data}: \"\n        check = input(msg).strip().lower() or \"n\"\n        if check == \"n\":\n            return tree_node\n        right_node = TreeNode(int(check))\n        node_found.right = right_node\n        q.put(right_node)\n    raise ValueError(\"Something went wrong\")\n\n\ndef pre_order(node: TreeNode) -> None:\n    \"\"\"\n    >>> root = TreeNode(1)\n    >>> tree_node2 = TreeNode(2)\n    >>> tree_node3 = TreeNode(3)\n    >>> tree_node4 = TreeNode(4)\n    >>> tree_node5 = TreeNode(5)\n    >>> tree_node6 = TreeNode(6)\n    >>> tree_node7 = TreeNode(7)\n    >>> root.left, root.right = tree_node2, tree_node3\n    >>> tree_node2.left, tree_node2.right = tree_node4 , tree_node5\n    >>> tree_node3.left, tree_node3.right = tree_node6 , tree_node7\n    >>> pre_order(root)\n    1,2,4,5,3,6,7,\n    \"\"\"\n    if not isinstance(node, TreeNode) or not node:\n        return\n    print(node.data, end=\",\")\n    pre_order(node.left)\n    pre_order(node.right)\n\n\ndef in_order(node: TreeNode) -> None:\n    \"\"\"\n    >>> root = TreeNode(1)\n    >>> tree_node2 = TreeNode(2)\n    >>> tree_node3 = TreeNode(3)\n    >>> tree_node4 = TreeNode(4)\n    >>> tree_node5 = TreeNode(5)\n    >>> tree_node6 = TreeNode(6)\n    >>> tree_node7 = TreeNode(7)\n    >>> root.left, root.right = tree_node2, tree_node3\n    >>> tree_node2.left, tree_node2.right = tree_node4 , tree_node5\n    >>> tree_node3.left, tree_node3.right = tree_node6 , tree_node7\n    >>> in_order(root)\n    4,2,5,1,6,3,7,\n    \"\"\"\n    if not isinstance(node, TreeNode) or not node:\n        return\n    in_order(node.left)\n    print(node.data, end=\",\")\n    in_order(node.right)\n\n\ndef post_order(node: TreeNode) -> None:\n    \"\"\"\n    >>> root = TreeNode(1)\n    >>> tree_node2 = TreeNode(2)\n    >>> tree_node3 = TreeNode(3)\n    >>> tree_node4 = TreeNode(4)\n    >>> tree_node5 = TreeNode(5)\n    >>> tree_node6 = TreeNode(6)\n    >>> tree_node7 = TreeNode(7)\n    >>> root.left, root.right = tree_node2, tree_node3\n    >>> tree_node2.left, tree_node2.right = tree_node4 , tree_node5\n    >>> tree_node3.left, tree_node3.right = tree_node6 , tree_node7\n    >>> post_order(root)\n    4,5,2,6,7,3,1,\n    \"\"\"\n    if not isinstance(node, TreeNode) or not node:\n        return\n    post_order(node.left)\n    post_order(node.right)\n    print(node.data, end=\",\")\n\n\ndef level_order(node: TreeNode) -> None:\n    \"\"\"\n    >>> root = TreeNode(1)\n    >>> tree_node2 = TreeNode(2)\n    >>> tree_node3 = TreeNode(3)\n    >>> tree_node4 = TreeNode(4)\n    >>> tree_node5 = TreeNode(5)\n    >>> tree_node6 = TreeNode(6)\n    >>> tree_node7 = TreeNode(7)\n    >>> root.left, root.right = tree_node2, tree_node3\n    >>> tree_node2.left, tree_node2.right = tree_node4 , tree_node5\n    >>> tree_node3.left, tree_node3.right = tree_node6 , tree_node7\n    >>> level_order(root)\n    1,2,3,4,5,6,7,\n    \"\"\"\n    if not isinstance(node, TreeNode) or not node:\n        return\n    q: queue.Queue = queue.Queue()\n    q.put(node)\n    while not q.empty():\n        node_dequeued = q.get()\n        print(node_dequeued.data, end=\",\")\n        if node_dequeued.left:\n            q.put(node_dequeued.left)\n        if node_dequeued.right:\n            q.put(node_dequeued.right)\n\n\ndef level_order_actual(node: TreeNode) -> None:\n    \"\"\"\n    >>> root = TreeNode(1)\n    >>> tree_node2 = TreeNode(2)\n    >>> tree_node3 = TreeNode(3)\n    >>> tree_node4 = TreeNode(4)\n    >>> tree_node5 = TreeNode(5)\n    >>> tree_node6 = TreeNode(6)\n    >>> tree_node7 = TreeNode(7)\n    >>> root.left, root.right = tree_node2, tree_node3\n    >>> tree_node2.left, tree_node2.right = tree_node4 , tree_node5\n    >>> tree_node3.left, tree_node3.right = tree_node6 , tree_node7\n    >>> level_order_actual(root)\n    1,\n    2,3,\n    4,5,6,7,\n    \"\"\"\n    if not isinstance(node, TreeNode) or not node:\n        return\n    q: queue.Queue = queue.Queue()\n    q.put(node)\n    while not q.empty():\n        list_ = []\n        while not q.empty():\n            node_dequeued = q.get()\n            print(node_dequeued.data, end=\",\")\n            if node_dequeued.left:\n                list_.append(node_dequeued.left)\n            if node_dequeued.right:\n                list_.append(node_dequeued.right)\n        print()\n        for inner_node in list_:\n            q.put(inner_node)\n\n\n# iteration version\ndef pre_order_iter(node: TreeNode) -> None:\n    \"\"\"\n    >>> root = TreeNode(1)\n    >>> tree_node2 = TreeNode(2)\n    >>> tree_node3 = TreeNode(3)\n    >>> tree_node4 = TreeNode(4)\n    >>> tree_node5 = TreeNode(5)\n    >>> tree_node6 = TreeNode(6)\n    >>> tree_node7 = TreeNode(7)\n    >>> root.left, root.right = tree_node2, tree_node3\n    >>> tree_node2.left, tree_node2.right = tree_node4 , tree_node5\n    >>> tree_node3.left, tree_node3.right = tree_node6 , tree_node7\n    >>> pre_order_iter(root)\n    1,2,4,5,3,6,7,\n    \"\"\"\n    if not isinstance(node, TreeNode) or not node:\n        return\n    stack: list[TreeNode] = []\n    n = node\n    while n or stack:\n        while n:  # start from root node, find its left child\n            print(n.data, end=\",\")\n            stack.append(n)\n            n = n.left\n        # end of while means current node doesn't have left child\n        n = stack.pop()\n        # start to traverse its right child\n        n = n.right\n\n\ndef in_order_iter(node: TreeNode) -> None:\n    \"\"\"\n    >>> root = TreeNode(1)\n    >>> tree_node2 = TreeNode(2)\n    >>> tree_node3 = TreeNode(3)\n    >>> tree_node4 = TreeNode(4)\n    >>> tree_node5 = TreeNode(5)\n    >>> tree_node6 = TreeNode(6)\n    >>> tree_node7 = TreeNode(7)\n    >>> root.left, root.right = tree_node2, tree_node3\n    >>> tree_node2.left, tree_node2.right = tree_node4 , tree_node5\n    >>> tree_node3.left, tree_node3.right = tree_node6 , tree_node7\n    >>> in_order_iter(root)\n    4,2,5,1,6,3,7,\n    \"\"\"\n    if not isinstance(node, TreeNode) or not node:\n        return\n    stack: list[TreeNode] = []\n    n = node\n    while n or stack:\n        while n:\n            stack.append(n)\n            n = n.left\n        n = stack.pop()\n        print(n.data, end=\",\")\n        n = n.right\n\n\ndef post_order_iter(node: TreeNode) -> None:\n    \"\"\"\n    >>> root = TreeNode(1)\n    >>> tree_node2 = TreeNode(2)\n    >>> tree_node3 = TreeNode(3)\n    >>> tree_node4 = TreeNode(4)\n    >>> tree_node5 = TreeNode(5)\n    >>> tree_node6 = TreeNode(6)\n    >>> tree_node7 = TreeNode(7)\n    >>> root.left, root.right = tree_node2, tree_node3\n    >>> tree_node2.left, tree_node2.right = tree_node4 , tree_node5\n    >>> tree_node3.left, tree_node3.right = tree_node6 , tree_node7\n    >>> post_order_iter(root)\n    4,5,2,6,7,3,1,\n    \"\"\"\n    if not isinstance(node, TreeNode) or not node:\n        return\n    stack1, stack2 = [], []\n    n = node\n    stack1.append(n)\n    while stack1:  # to find the reversed order of post order, store it in stack2\n        n = stack1.pop()\n        if n.left:\n            stack1.append(n.left)\n        if n.right:\n            stack1.append(n.right)\n        stack2.append(n)\n    while stack2:  # pop up from stack2 will be the post order\n        print(stack2.pop().data, end=\",\")\n\n\ndef prompt(s: str = \"\", width=50, char=\"*\") -> str:\n    if not s:\n        return \"\\n\" + width * char\n    left, extra = divmod(width - len(s) - 2, 2)\n    return f\"{left * char} {s} {(left + extra) * char}\"\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    print(prompt(\"Binary Tree Traversals\"))\n\n    node: TreeNode = build_tree()\n    print(prompt(\"Pre Order Traversal\"))\n    pre_order(node)\n    print(prompt() + \"\\n\")\n\n    print(prompt(\"In Order Traversal\"))\n    in_order(node)\n    print(prompt() + \"\\n\")\n\n    print(prompt(\"Post Order Traversal\"))\n    post_order(node)\n    print(prompt() + \"\\n\")\n\n    print(prompt(\"Level Order Traversal\"))\n    level_order(node)\n    print(prompt() + \"\\n\")\n\n    print(prompt(\"Actual Level Order Traversal\"))\n    level_order_actual(node)\n    print(\"*\" * 50 + \"\\n\")\n\n    print(prompt(\"Pre Order Traversal - Iteration Version\"))\n    pre_order_iter(node)\n    print(prompt() + \"\\n\")\n\n    print(prompt(\"In Order Traversal - Iteration Version\"))\n    in_order_iter(node)\n    print(prompt() + \"\\n\")\n\n    print(prompt(\"Post Order Traversal - Iteration Version\"))\n    post_order_iter(node)\n    print(prompt())\n"
  },
  {
    "path": "searches/double_linear_search.py",
    "content": "from __future__ import annotations\r\n\r\n\r\ndef double_linear_search(array: list[int], search_item: int) -> int:\r\n    \"\"\"\r\n    Iterate through the array from both sides to find the index of search_item.\r\n\r\n    :param array: the array to be searched\r\n    :param search_item: the item to be searched\r\n    :return the index of search_item, if search_item is in array, else -1\r\n\r\n    Examples:\r\n    >>> double_linear_search([1, 5, 5, 10], 1)\r\n    0\r\n    >>> double_linear_search([1, 5, 5, 10], 5)\r\n    1\r\n    >>> double_linear_search([1, 5, 5, 10], 100)\r\n    -1\r\n    >>> double_linear_search([1, 5, 5, 10], 10)\r\n    3\r\n    \"\"\"\r\n    # define the start and end index of the given array\r\n    start_ind, end_ind = 0, len(array) - 1\r\n    while start_ind <= end_ind:\r\n        if array[start_ind] == search_item:\r\n            return start_ind\r\n        elif array[end_ind] == search_item:\r\n            return end_ind\r\n        else:\r\n            start_ind += 1\r\n            end_ind -= 1\r\n    # returns -1 if search_item is not found in array\r\n    return -1\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    print(double_linear_search(list(range(100)), 40))\r\n"
  },
  {
    "path": "searches/double_linear_search_recursion.py",
    "content": "def search(list_data: list, key: int, left: int = 0, right: int = 0) -> int:\n    \"\"\"\n    Iterate through the array to find the index of key using recursion.\n    :param list_data: the list to be searched\n    :param key: the key to be searched\n    :param left: the index of first element\n    :param right: the index of last element\n    :return: the index of key value if found, -1 otherwise.\n\n    >>> search(list(range(0, 11)), 5)\n    5\n    >>> search([1, 2, 4, 5, 3], 4)\n    2\n    >>> search([1, 2, 4, 5, 3], 6)\n    -1\n    >>> search([5], 5)\n    0\n    >>> search([], 1)\n    -1\n    \"\"\"\n    right = right or len(list_data) - 1\n    if left > right:\n        return -1\n    elif list_data[left] == key:\n        return left\n    elif list_data[right] == key:\n        return right\n    else:\n        return search(list_data, key, left + 1, right - 1)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "searches/exponential_search.py",
    "content": "#!/usr/bin/env python3\n\n\"\"\"\nPure Python implementation of exponential search algorithm\n\nFor more information, see the Wikipedia page:\nhttps://en.wikipedia.org/wiki/Exponential_search\n\nFor doctests run the following command:\npython3 -m doctest -v exponential_search.py\n\nFor manual testing run:\npython3 exponential_search.py\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef binary_search_by_recursion(\n    sorted_collection: list[int], item: int, left: int = 0, right: int = -1\n) -> int:\n    \"\"\"Pure implementation of binary search algorithm in Python using recursion\n\n    Be careful: the collection must be ascending sorted otherwise, the result will be\n    unpredictable.\n\n    :param sorted_collection: some ascending sorted collection with comparable items\n    :param item: item value to search\n    :param left: starting index for the search\n    :param right: ending index for the search\n    :return: index of the found item or -1 if the item is not found\n\n    Examples:\n    >>> binary_search_by_recursion([0, 5, 7, 10, 15], 0, 0, 4)\n    0\n    >>> binary_search_by_recursion([0, 5, 7, 10, 15], 15, 0, 4)\n    4\n    >>> binary_search_by_recursion([0, 5, 7, 10, 15], 5, 0, 4)\n    1\n    >>> binary_search_by_recursion([0, 5, 7, 10, 15], 6, 0, 4)\n    -1\n    \"\"\"\n    if right < 0:\n        right = len(sorted_collection) - 1\n    if list(sorted_collection) != sorted(sorted_collection):\n        raise ValueError(\"sorted_collection must be sorted in ascending order\")\n    if right < left:\n        return -1\n\n    midpoint = left + (right - left) // 2\n\n    if sorted_collection[midpoint] == item:\n        return midpoint\n    elif sorted_collection[midpoint] > item:\n        return binary_search_by_recursion(sorted_collection, item, left, midpoint - 1)\n    else:\n        return binary_search_by_recursion(sorted_collection, item, midpoint + 1, right)\n\n\ndef exponential_search(sorted_collection: list[int], item: int) -> int:\n    \"\"\"\n    Pure implementation of an exponential search algorithm in Python.\n    For more information, refer to:\n    https://en.wikipedia.org/wiki/Exponential_search\n\n    Be careful: the collection must be ascending sorted, otherwise the result will be\n    unpredictable.\n\n    :param sorted_collection: some ascending sorted collection with comparable items\n    :param item: item value to search\n    :return: index of the found item or -1 if the item is not found\n\n    The time complexity of this algorithm is O(log i) where i is the index of the item.\n\n    Examples:\n    >>> exponential_search([0, 5, 7, 10, 15], 0)\n    0\n    >>> exponential_search([0, 5, 7, 10, 15], 15)\n    4\n    >>> exponential_search([0, 5, 7, 10, 15], 5)\n    1\n    >>> exponential_search([0, 5, 7, 10, 15], 6)\n    -1\n    \"\"\"\n    if list(sorted_collection) != sorted(sorted_collection):\n        raise ValueError(\"sorted_collection must be sorted in ascending order\")\n\n    if sorted_collection[0] == item:\n        return 0\n\n    bound = 1\n    while bound < len(sorted_collection) and sorted_collection[bound] < item:\n        bound *= 2\n\n    left = bound // 2\n    right = min(bound, len(sorted_collection) - 1)\n    return binary_search_by_recursion(sorted_collection, item, left, right)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    # Manual testing\n    user_input = input(\"Enter numbers separated by commas: \").strip()\n    collection = sorted(int(item) for item in user_input.split(\",\"))\n    target = int(input(\"Enter a number to search for: \"))\n    result = exponential_search(sorted_collection=collection, item=target)\n    if result == -1:\n        print(f\"{target} was not found in {collection}.\")\n    else:\n        print(f\"{target} was found at index {result} in {collection}.\")\n"
  },
  {
    "path": "searches/fibonacci_search.py",
    "content": "\"\"\"\nThis is pure Python implementation of fibonacci search.\n\nResources used:\nhttps://en.wikipedia.org/wiki/Fibonacci_search_technique\n\nFor doctests run following command:\npython3 -m doctest -v fibonacci_search.py\n\nFor manual testing run:\npython3 fibonacci_search.py\n\"\"\"\n\nfrom functools import lru_cache\n\n\n@lru_cache\ndef fibonacci(k: int) -> int:\n    \"\"\"Finds fibonacci number in index k.\n\n    Parameters\n    ----------\n    k :\n        Index of fibonacci.\n\n    Returns\n    -------\n    int\n        Fibonacci number in position k.\n\n    >>> fibonacci(0)\n    0\n    >>> fibonacci(2)\n    1\n    >>> fibonacci(5)\n    5\n    >>> fibonacci(15)\n    610\n    >>> fibonacci('a')\n    Traceback (most recent call last):\n    TypeError: k must be an integer.\n    >>> fibonacci(-5)\n    Traceback (most recent call last):\n    ValueError: k integer must be greater or equal to zero.\n    \"\"\"\n    if not isinstance(k, int):\n        raise TypeError(\"k must be an integer.\")\n    if k < 0:\n        raise ValueError(\"k integer must be greater or equal to zero.\")\n    if k == 0:\n        return 0\n    elif k == 1:\n        return 1\n    else:\n        return fibonacci(k - 1) + fibonacci(k - 2)\n\n\ndef fibonacci_search(arr: list, val: int) -> int:\n    \"\"\"A pure Python implementation of a fibonacci search algorithm.\n\n    Parameters\n    ----------\n    arr\n        List of sorted elements.\n    val\n        Element to search in list.\n\n    Returns\n    -------\n    int\n        The index of the element in the array.\n        -1 if the element is not found.\n\n    >>> fibonacci_search([4, 5, 6, 7], 4)\n    0\n    >>> fibonacci_search([4, 5, 6, 7], -10)\n    -1\n    >>> fibonacci_search([-18, 2], -18)\n    0\n    >>> fibonacci_search([5], 5)\n    0\n    >>> fibonacci_search(['a', 'c', 'd'], 'c')\n    1\n    >>> fibonacci_search(['a', 'c', 'd'], 'f')\n    -1\n    >>> fibonacci_search([], 1)\n    -1\n    >>> fibonacci_search([.1, .4 , 7], .4)\n    1\n    >>> fibonacci_search([], 9)\n    -1\n    >>> fibonacci_search(list(range(100)), 63)\n    63\n    >>> fibonacci_search(list(range(100)), 99)\n    99\n    >>> fibonacci_search(list(range(-100, 100, 3)), -97)\n    1\n    >>> fibonacci_search(list(range(-100, 100, 3)), 0)\n    -1\n    >>> fibonacci_search(list(range(-100, 100, 5)), 0)\n    20\n    >>> fibonacci_search(list(range(-100, 100, 5)), 95)\n    39\n    \"\"\"\n    len_list = len(arr)\n    # Find m such that F_m >= n where F_i is the i_th fibonacci number.\n    i = 0\n    while True:\n        if fibonacci(i) >= len_list:\n            fibb_k = i\n            break\n        i += 1\n    offset = 0\n    while fibb_k > 0:\n        index_k = min(\n            offset + fibonacci(fibb_k - 1), len_list - 1\n        )  # Prevent out of range\n        item_k_1 = arr[index_k]\n        if item_k_1 == val:\n            return index_k\n        elif val < item_k_1:\n            fibb_k -= 1\n        elif val > item_k_1:\n            offset += fibonacci(fibb_k - 1)\n            fibb_k -= 2\n    return -1\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "searches/hill_climbing.py",
    "content": "# https://en.wikipedia.org/wiki/Hill_climbing\nimport math\n\n\nclass SearchProblem:\n    \"\"\"\n    An interface to define search problems.\n    The interface will be illustrated using the example of mathematical function.\n    \"\"\"\n\n    def __init__(self, x: int, y: int, step_size: int, function_to_optimize):\n        \"\"\"\n        The constructor of the search problem.\n\n        x: the x coordinate of the current search state.\n        y: the y coordinate of the current search state.\n        step_size: size of the step to take when looking for neighbors.\n        function_to_optimize: a function to optimize having the signature f(x, y).\n        \"\"\"\n        self.x = x\n        self.y = y\n        self.step_size = step_size\n        self.function = function_to_optimize\n\n    def score(self) -> int:\n        \"\"\"\n        Returns the output of the function called with current x and y coordinates.\n        >>> def test_function(x, y):\n        ...     return x + y\n        >>> SearchProblem(0, 0, 1, test_function).score()  # 0 + 0 = 0\n        0\n        >>> SearchProblem(5, 7, 1, test_function).score()  # 5 + 7 = 12\n        12\n        \"\"\"\n        return self.function(self.x, self.y)\n\n    def get_neighbors(self):\n        \"\"\"\n        Returns a list of coordinates of neighbors adjacent to the current coordinates.\n\n        Neighbors:\n        | 0 | 1 | 2 |\n        | 3 | _ | 4 |\n        | 5 | 6 | 7 |\n        \"\"\"\n        step_size = self.step_size\n        return [\n            SearchProblem(x, y, step_size, self.function)\n            for x, y in (\n                (self.x - step_size, self.y - step_size),\n                (self.x - step_size, self.y),\n                (self.x - step_size, self.y + step_size),\n                (self.x, self.y - step_size),\n                (self.x, self.y + step_size),\n                (self.x + step_size, self.y - step_size),\n                (self.x + step_size, self.y),\n                (self.x + step_size, self.y + step_size),\n            )\n        ]\n\n    def __hash__(self):\n        \"\"\"\n        hash the string representation of the current search state.\n        \"\"\"\n        return hash(str(self))\n\n    def __eq__(self, obj):\n        \"\"\"\n        Check if the 2 objects are equal.\n        \"\"\"\n        if isinstance(obj, SearchProblem):\n            return hash(str(self)) == hash(str(obj))\n        return False\n\n    def __str__(self):\n        \"\"\"\n        string representation of the current search state.\n        >>> str(SearchProblem(0, 0, 1, None))\n        'x: 0 y: 0'\n        >>> str(SearchProblem(2, 5, 1, None))\n        'x: 2 y: 5'\n        \"\"\"\n        return f\"x: {self.x} y: {self.y}\"\n\n\ndef hill_climbing(\n    search_prob,\n    find_max: bool = True,\n    max_x: float = math.inf,\n    min_x: float = -math.inf,\n    max_y: float = math.inf,\n    min_y: float = -math.inf,\n    visualization: bool = False,\n    max_iter: int = 10000,\n) -> SearchProblem:\n    \"\"\"\n    Implementation of the hill climbling algorithm.\n    We start with a given state, find all its neighbors,\n    move towards the neighbor which provides the maximum (or minimum) change.\n    We keep doing this until we are at a state where we do not have any\n    neighbors which can improve the solution.\n        Args:\n            search_prob: The search state at the start.\n            find_max: If True, the algorithm should find the maximum else the minimum.\n            max_x, min_x, max_y, min_y: the maximum and minimum bounds of x and y.\n            visualization: If True, a matplotlib graph is displayed.\n            max_iter: number of times to run the iteration.\n        Returns a search state having the maximum (or minimum) score.\n    \"\"\"\n    current_state = search_prob\n    scores = []  # list to store the current score at each iteration\n    iterations = 0\n    solution_found = False\n    visited = set()\n    while not solution_found and iterations < max_iter:\n        visited.add(current_state)\n        iterations += 1\n        current_score = current_state.score()\n        scores.append(current_score)\n        neighbors = current_state.get_neighbors()\n        max_change = -math.inf\n        min_change = math.inf\n        next_state = None  # to hold the next best neighbor\n        for neighbor in neighbors:\n            if neighbor in visited:\n                continue  # do not want to visit the same state again\n            if (\n                neighbor.x > max_x\n                or neighbor.x < min_x\n                or neighbor.y > max_y\n                or neighbor.y < min_y\n            ):\n                continue  # neighbor outside our bounds\n            change = neighbor.score() - current_score\n            if find_max:  # finding max\n                # going to direction with greatest ascent\n                if change > max_change and change > 0:\n                    max_change = change\n                    next_state = neighbor\n            elif change < min_change and change < 0:  # finding min\n                # to direction with greatest descent\n                min_change = change\n                next_state = neighbor\n        if next_state is not None:\n            # we found at least one neighbor which improved the current state\n            current_state = next_state\n        else:\n            # since we have no neighbor that improves the solution we stop the search\n            solution_found = True\n\n    if visualization:\n        from matplotlib import pyplot as plt\n\n        plt.plot(range(iterations), scores)\n        plt.xlabel(\"Iterations\")\n        plt.ylabel(\"Function values\")\n        plt.show()\n\n    return current_state\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    def test_f1(x, y):\n        return (x**2) + (y**2)\n\n    # starting the problem with initial coordinates (3, 4)\n    prob = SearchProblem(x=3, y=4, step_size=1, function_to_optimize=test_f1)\n    local_min = hill_climbing(prob, find_max=False)\n    print(\n        \"The minimum score for f(x, y) = x^2 + y^2 found via hill climbing: \"\n        f\"{local_min.score()}\"\n    )\n\n    # starting the problem with initial coordinates (12, 47)\n    prob = SearchProblem(x=12, y=47, step_size=1, function_to_optimize=test_f1)\n    local_min = hill_climbing(\n        prob, find_max=False, max_x=100, min_x=5, max_y=50, min_y=-5, visualization=True\n    )\n    print(\n        \"The minimum score for f(x, y) = x^2 + y^2 with the domain 100 > x > 5 \"\n        f\"and 50 > y > - 5 found via hill climbing: {local_min.score()}\"\n    )\n\n    def test_f2(x, y):\n        return (3 * x**2) - (6 * y)\n\n    prob = SearchProblem(x=3, y=4, step_size=1, function_to_optimize=test_f1)\n    local_min = hill_climbing(prob, find_max=True)\n    print(\n        \"The maximum score for f(x, y) = x^2 + y^2 found via hill climbing: \"\n        f\"{local_min.score()}\"\n    )\n"
  },
  {
    "path": "searches/interpolation_search.py",
    "content": "\"\"\"\nThis is pure Python implementation of interpolation search algorithm\n\"\"\"\n\n\ndef interpolation_search(sorted_collection: list[int], item: int) -> int | None:\n    \"\"\"\n    Searches for an item in a sorted collection by interpolation search algorithm.\n\n    Args:\n        sorted_collection: sorted list of integers\n        item: item value to search\n\n    Returns:\n        int: The index of the found item, or None if the item is not found.\n    Examples:\n    >>> interpolation_search([1, 2, 3, 4, 5], 2)\n    1\n    >>> interpolation_search([1, 2, 3, 4, 5], 4)\n    3\n    >>> interpolation_search([1, 2, 3, 4, 5], 6) is None\n    True\n    >>> interpolation_search([], 1) is None\n    True\n    >>> interpolation_search([100], 100)\n    0\n    >>> interpolation_search([1, 2, 3, 4, 5], 0) is None\n    True\n    >>> interpolation_search([1, 2, 3, 4, 5], 7) is None\n    True\n    >>> interpolation_search([1, 2, 3, 4, 5], 2)\n    1\n    >>> interpolation_search([1, 2, 3, 4, 5], 0) is None\n    True\n    >>> interpolation_search([1, 2, 3, 4, 5], 7) is None\n    True\n    >>> interpolation_search([1, 2, 3, 4, 5], 2)\n    1\n    >>> interpolation_search([5, 5, 5, 5, 5], 3) is None\n    True\n    \"\"\"\n    left = 0\n    right = len(sorted_collection) - 1\n\n    while left <= right:\n        # avoid divided by 0 during interpolation\n        if sorted_collection[left] == sorted_collection[right]:\n            if sorted_collection[left] == item:\n                return left\n            return None\n\n        point = left + ((item - sorted_collection[left]) * (right - left)) // (\n            sorted_collection[right] - sorted_collection[left]\n        )\n\n        # out of range check\n        if point < 0 or point >= len(sorted_collection):\n            return None\n\n        current_item = sorted_collection[point]\n        if current_item == item:\n            return point\n        if point < left:\n            right = left\n            left = point\n        elif point > right:\n            left = right\n            right = point\n        elif item < current_item:\n            right = point - 1\n        else:\n            left = point + 1\n    return None\n\n\ndef interpolation_search_by_recursion(\n    sorted_collection: list[int], item: int, left: int = 0, right: int | None = None\n) -> int | None:\n    \"\"\"Pure implementation of interpolation search algorithm in Python by recursion\n    Be careful collection must be ascending sorted, otherwise result will be\n    unpredictable\n    First recursion should be started with left=0 and right=(len(sorted_collection)-1)\n\n    Args:\n        sorted_collection: some sorted collection with comparable items\n        item: item value to search\n        left: left index in collection\n        right: right index in collection\n\n    Returns:\n        index of item in collection or None if item is not present\n\n    Examples:\n    >>> interpolation_search_by_recursion([0, 5, 7, 10, 15], 0)\n    0\n    >>> interpolation_search_by_recursion([0, 5, 7, 10, 15], 15)\n    4\n    >>> interpolation_search_by_recursion([0, 5, 7, 10, 15], 5)\n    1\n    >>> interpolation_search_by_recursion([0, 5, 7, 10, 15], 100) is None\n    True\n    >>> interpolation_search_by_recursion([5, 5, 5, 5, 5], 3) is None\n    True\n    \"\"\"\n    if right is None:\n        right = len(sorted_collection) - 1\n    # avoid divided by 0 during interpolation\n    if sorted_collection[left] == sorted_collection[right]:\n        if sorted_collection[left] == item:\n            return left\n        return None\n\n    point = left + ((item - sorted_collection[left]) * (right - left)) // (\n        sorted_collection[right] - sorted_collection[left]\n    )\n\n    # out of range check\n    if point < 0 or point >= len(sorted_collection):\n        return None\n\n    if sorted_collection[point] == item:\n        return point\n    if point < left:\n        return interpolation_search_by_recursion(sorted_collection, item, point, left)\n    if point > right:\n        return interpolation_search_by_recursion(sorted_collection, item, right, left)\n    if sorted_collection[point] > item:\n        return interpolation_search_by_recursion(\n            sorted_collection, item, left, point - 1\n        )\n    return interpolation_search_by_recursion(sorted_collection, item, point + 1, right)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "searches/jump_search.py",
    "content": "\"\"\"\nPure Python implementation of the jump search algorithm.\nThis algorithm iterates through a sorted collection with a step of n^(1/2),\nuntil the element compared is bigger than the one searched.\nIt will then perform a linear search until it matches the wanted number.\nIf not found, it returns -1.\n\nhttps://en.wikipedia.org/wiki/Jump_search\n\"\"\"\n\nimport math\nfrom collections.abc import Sequence\nfrom typing import Any, Protocol\n\n\nclass Comparable(Protocol):\n    def __lt__(self, other: Any, /) -> bool: ...\n\n\ndef jump_search[T: Comparable](arr: Sequence[T], item: T) -> int:\n    \"\"\"\n    Python implementation of the jump search algorithm.\n    Return the index if the `item` is found, otherwise return -1.\n\n    Examples:\n    >>> jump_search([0, 1, 2, 3, 4, 5], 3)\n    3\n    >>> jump_search([-5, -2, -1], -1)\n    2\n    >>> jump_search([0, 5, 10, 20], 8)\n    -1\n    >>> jump_search([0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610], 55)\n    10\n    >>> jump_search([\"aa\", \"bb\", \"cc\", \"dd\", \"ee\", \"ff\"], \"ee\")\n    4\n    \"\"\"\n\n    arr_size = len(arr)\n    block_size = int(math.sqrt(arr_size))\n\n    prev = 0\n    step = block_size\n    while arr[min(step, arr_size) - 1] < item:\n        prev = step\n        step += block_size\n        if prev >= arr_size:\n            return -1\n\n    while arr[prev] < item:\n        prev += 1\n        if prev == min(step, arr_size):\n            return -1\n    if arr[prev] == item:\n        return prev\n    return -1\n\n\nif __name__ == \"__main__\":\n    user_input = input(\"Enter numbers separated by a comma:\\n\").strip()\n    array = [int(item) for item in user_input.split(\",\")]\n    x = int(input(\"Enter the number to be searched:\\n\"))\n\n    res = jump_search(array, x)\n    if res == -1:\n        print(\"Number not found!\")\n    else:\n        print(f\"Number {x} is at index {res}\")\n"
  },
  {
    "path": "searches/linear_search.py",
    "content": "\"\"\"\nThis is a pure Python implementation of the linear search algorithm.\n\nFor doctests run following command:\npython3 -m doctest -v linear_search.py\n\nFor manual testing run:\npython3 linear_search.py\n\"\"\"\n\n\ndef linear_search(sequence: list, target: int) -> int:\n    \"\"\"A pure Python implementation of a linear search algorithm\n\n    :param sequence: a collection with comparable items (sorting is not required for\n        linear search)\n    :param target: item value to search\n    :return: index of found item or -1 if item is not found\n\n    Examples:\n    >>> linear_search([0, 5, 7, 10, 15], 0)\n    0\n    >>> linear_search([0, 5, 7, 10, 15], 15)\n    4\n    >>> linear_search([0, 5, 7, 10, 15], 5)\n    1\n    >>> linear_search([0, 5, 7, 10, 15], 6)\n    -1\n    \"\"\"\n    for index, item in enumerate(sequence):\n        if item == target:\n            return index\n    return -1\n\n\ndef rec_linear_search(sequence: list, low: int, high: int, target: int) -> int:\n    \"\"\"\n    A pure Python implementation of a recursive linear search algorithm\n\n    :param sequence: a collection with comparable items (as sorted items not required\n        in Linear Search)\n    :param low: Lower bound of the array\n    :param high: Higher bound of the array\n    :param target: The element to be found\n    :return: Index of the key or -1 if key not found\n\n    Examples:\n    >>> rec_linear_search([0, 30, 500, 100, 700], 0, 4, 0)\n    0\n    >>> rec_linear_search([0, 30, 500, 100, 700], 0, 4, 700)\n    4\n    >>> rec_linear_search([0, 30, 500, 100, 700], 0, 4, 30)\n    1\n    >>> rec_linear_search([0, 30, 500, 100, 700], 0, 4, -6)\n    -1\n    \"\"\"\n    if not (0 <= high < len(sequence) and 0 <= low < len(sequence)):\n        raise Exception(\"Invalid upper or lower bound!\")\n    if high < low:\n        return -1\n    if sequence[low] == target:\n        return low\n    if sequence[high] == target:\n        return high\n    return rec_linear_search(sequence, low + 1, high - 1, target)\n\n\nif __name__ == \"__main__\":\n    user_input = input(\"Enter numbers separated by comma:\\n\").strip()\n    sequence = [int(item.strip()) for item in user_input.split(\",\")]\n\n    target = int(input(\"Enter a single number to be found in the list:\\n\").strip())\n    result = linear_search(sequence, target)\n    if result != -1:\n        print(f\"linear_search({sequence}, {target}) = {result}\")\n    else:\n        print(f\"{target} was not found in {sequence}\")\n"
  },
  {
    "path": "searches/median_of_medians.py",
    "content": "\"\"\"\nA Python implementation of the Median of Medians algorithm\nto select pivots for quick_select, which is efficient for\ncalculating the value that would appear in the index of a\nlist if it would be sorted, even if it is not already\nsorted. Search in time complexity O(n) at any rank\ndeterministically\nhttps://en.wikipedia.org/wiki/Median_of_medians\n\"\"\"\n\n\ndef median_of_five(arr: list) -> int:\n    \"\"\"\n    Return the median of the input list\n    :param arr: Array to find median of\n    :return: median of arr\n\n    >>> median_of_five([2, 4, 5, 7, 899])\n    5\n    >>> median_of_five([5, 7, 899, 54, 32])\n    32\n    >>> median_of_five([5, 4, 3, 2])\n    4\n    >>> median_of_five([3, 5, 7, 10, 2])\n    5\n    \"\"\"\n    arr = sorted(arr)\n    return arr[len(arr) // 2]\n\n\ndef median_of_medians(arr: list) -> int:\n    \"\"\"\n    Return a pivot to partition data on by calculating\n    Median of medians of input data\n    :param arr: The data to be checked (a list)\n    :return: median of medians of input array\n\n    >>> median_of_medians([2, 4, 5, 7, 899, 54, 32])\n    54\n    >>> median_of_medians([5, 7, 899, 54, 32])\n    32\n    >>> median_of_medians([5, 4, 3, 2])\n    4\n    >>> median_of_medians([3, 5, 7, 10, 2, 12])\n    12\n    \"\"\"\n\n    if len(arr) <= 5:\n        return median_of_five(arr)\n    medians = []\n    i = 0\n    while i < len(arr):\n        if (i + 4) <= len(arr):\n            medians.append(median_of_five(arr[i:].copy()))\n        else:\n            medians.append(median_of_five(arr[i : i + 5].copy()))\n        i += 5\n    return median_of_medians(medians)\n\n\ndef quick_select(arr: list, target: int) -> int:\n    \"\"\"\n    Two way partition the data into smaller and greater lists,\n    in relationship to the pivot\n    :param arr: The data to be searched (a list)\n    :param target: The rank to be searched\n    :return: element at rank target\n\n    >>> quick_select([2, 4, 5, 7, 899, 54, 32], 5)\n    32\n    >>> quick_select([2, 4, 5, 7, 899, 54, 32], 1)\n    2\n    >>> quick_select([5, 4, 3, 2], 2)\n    3\n    >>> quick_select([3, 5, 7, 10, 2, 12], 3)\n    5\n    \"\"\"\n\n    # Invalid Input\n    if target > len(arr):\n        return -1\n\n    # x is the estimated pivot by median of medians algorithm\n    x = median_of_medians(arr)\n    left = []\n    right = []\n    check = False\n    for i in range(len(arr)):\n        if arr[i] < x:\n            left.append(arr[i])\n        elif arr[i] > x:\n            right.append(arr[i])\n        elif arr[i] == x and not check:\n            check = True\n        else:\n            right.append(arr[i])\n    rank_x = len(left) + 1\n    if rank_x == target:\n        answer = x\n    elif rank_x > target:\n        answer = quick_select(left, target)\n    elif rank_x < target:\n        answer = quick_select(right, target - rank_x)\n    return answer\n\n\nprint(median_of_five([5, 4, 3, 2]))\n"
  },
  {
    "path": "searches/quick_select.py",
    "content": "\"\"\"\nA Python implementation of the quick select algorithm, which is efficient for\ncalculating the value that would appear in the index of a list if it would be\nsorted, even if it is not already sorted\nhttps://en.wikipedia.org/wiki/Quickselect\n\"\"\"\n\nimport random\n\n\ndef _partition(data: list, pivot) -> tuple:\n    \"\"\"\n    Three way partition the data into smaller, equal and greater lists,\n    in relationship to the pivot\n    :param data: The data to be sorted (a list)\n    :param pivot: The value to partition the data on\n    :return: Three list: smaller, equal and greater\n    \"\"\"\n    less, equal, greater = [], [], []\n    for element in data:\n        if element < pivot:\n            less.append(element)\n        elif element > pivot:\n            greater.append(element)\n        else:\n            equal.append(element)\n    return less, equal, greater\n\n\ndef quick_select(items: list, index: int):\n    \"\"\"\n    >>> quick_select([2, 4, 5, 7, 899, 54, 32], 5)\n    54\n    >>> quick_select([2, 4, 5, 7, 899, 54, 32], 1)\n    4\n    >>> quick_select([5, 4, 3, 2], 2)\n    4\n    >>> quick_select([3, 5, 7, 10, 2, 12], 3)\n    7\n    \"\"\"\n    # index = len(items) // 2 when trying to find the median\n    #   (value of index when items is sorted)\n\n    # invalid input\n    if index >= len(items) or index < 0:\n        return None\n\n    pivot = items[random.randint(0, len(items) - 1)]\n    count = 0\n    smaller, equal, larger = _partition(items, pivot)\n    count = len(equal)\n    m = len(smaller)\n\n    # index is the pivot\n    if m <= index < m + count:\n        return pivot\n    # must be in smaller\n    elif m > index:\n        return quick_select(smaller, index)\n    # must be in larger\n    else:\n        return quick_select(larger, index - (m + count))\n\n\ndef median(items: list):\n    \"\"\"\n    One common application of Quickselect is finding the median, which is\n    the middle element (or average of the two middle elements) in a sorted dataset.\n    It works efficiently on unsorted lists by partially sorting the data without\n    fully sorting the entire list.\n\n    >>> median([3, 2, 2, 9, 9])\n    3\n\n    >>> median([2, 2, 9, 9, 9, 3])\n    6.0\n    \"\"\"\n    mid, rem = divmod(len(items), 2)\n    if rem != 0:\n        return quick_select(items=items, index=mid)\n    else:\n        low_mid = quick_select(items=items, index=mid - 1)\n        high_mid = quick_select(items=items, index=mid)\n        return (low_mid + high_mid) / 2\n"
  },
  {
    "path": "searches/sentinel_linear_search.py",
    "content": "\"\"\"\nThis is pure Python implementation of sentinel linear search algorithm\n\nFor doctests run following command:\npython -m doctest -v sentinel_linear_search.py\nor\npython3 -m doctest -v sentinel_linear_search.py\n\nFor manual testing run:\npython sentinel_linear_search.py\n\"\"\"\n\n\ndef sentinel_linear_search(sequence, target):\n    \"\"\"Pure implementation of sentinel linear search algorithm in Python\n\n    :param sequence: some sequence with comparable items\n    :param target: item value to search\n    :return: index of found item or None if item is not found\n\n    Examples:\n    >>> sentinel_linear_search([0, 5, 7, 10, 15], 0)\n    0\n\n    >>> sentinel_linear_search([0, 5, 7, 10, 15], 15)\n    4\n\n    >>> sentinel_linear_search([0, 5, 7, 10, 15], 5)\n    1\n\n    >>> sentinel_linear_search([0, 5, 7, 10, 15], 6)\n\n    \"\"\"\n    sequence.append(target)\n\n    index = 0\n    while sequence[index] != target:\n        index += 1\n\n    sequence.pop()\n\n    if index == len(sequence):\n        return None\n\n    return index\n\n\nif __name__ == \"__main__\":\n    user_input = input(\"Enter numbers separated by comma:\\n\").strip()\n    sequence = [int(item) for item in user_input.split(\",\")]\n\n    target_input = input(\"Enter a single number to be found in the list:\\n\")\n    target = int(target_input)\n    result = sentinel_linear_search(sequence, target)\n    if result is not None:\n        print(f\"{target} found at positions: {result}\")\n    else:\n        print(\"Not found\")\n"
  },
  {
    "path": "searches/simple_binary_search.py",
    "content": "\"\"\"\nPure Python implementation of a binary search algorithm.\n\nFor doctests run following command:\npython3 -m doctest -v simple_binary_search.py\n\nFor manual testing run:\npython3 simple_binary_search.py\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef binary_search(a_list: list[int], item: int) -> bool:\n    \"\"\"\n    >>> test_list = [0, 1, 2, 8, 13, 17, 19, 32, 42]\n    >>> binary_search(test_list, 3)\n    False\n    >>> binary_search(test_list, 13)\n    True\n    >>> binary_search([4, 4, 5, 6, 7], 4)\n    True\n    >>> binary_search([4, 4, 5, 6, 7], -10)\n    False\n    >>> binary_search([-18, 2], -18)\n    True\n    >>> binary_search([5], 5)\n    True\n    >>> binary_search(['a', 'c', 'd'], 'c')\n    True\n    >>> binary_search(['a', 'c', 'd'], 'f')\n    False\n    >>> binary_search([], 1)\n    False\n    >>> binary_search([-.1, .1 , .8], .1)\n    True\n    >>> binary_search(range(-5000, 5000, 10), 80)\n    True\n    >>> binary_search(range(-5000, 5000, 10), 1255)\n    False\n    >>> binary_search(range(0, 10000, 5), 2)\n    False\n    \"\"\"\n    if len(a_list) == 0:\n        return False\n    midpoint = len(a_list) // 2\n    if a_list[midpoint] == item:\n        return True\n    if item < a_list[midpoint]:\n        return binary_search(a_list[:midpoint], item)\n    else:\n        return binary_search(a_list[midpoint + 1 :], item)\n\n\nif __name__ == \"__main__\":\n    user_input = input(\"Enter numbers separated by comma:\\n\").strip()\n    sequence = [int(item.strip()) for item in user_input.split(\",\")]\n    target = int(input(\"Enter the number to be found in the list:\\n\").strip())\n    not_str = \"\" if binary_search(sequence, target) else \"not \"\n    print(f\"{target} was {not_str}found in {sequence}\")\n"
  },
  {
    "path": "searches/simulated_annealing.py",
    "content": "# https://en.wikipedia.org/wiki/Simulated_annealing\nimport math\nimport random\nfrom typing import Any\n\nfrom .hill_climbing import SearchProblem\n\n\ndef simulated_annealing(\n    search_prob,\n    find_max: bool = True,\n    max_x: float = math.inf,\n    min_x: float = -math.inf,\n    max_y: float = math.inf,\n    min_y: float = -math.inf,\n    visualization: bool = False,\n    start_temperate: float = 100,\n    rate_of_decrease: float = 0.01,\n    threshold_temp: float = 1,\n) -> Any:\n    \"\"\"\n    Implementation of the simulated annealing algorithm. We start with a given state,\n    find all its neighbors. Pick a random neighbor, if that neighbor improves the\n    solution, we move in that direction, if that neighbor does not improve the solution,\n    we generate a random real number between 0 and 1, if the number is within a certain\n    range (calculated using temperature) we move in that direction, else we pick\n    another neighbor randomly and repeat the process.\n\n    Args:\n        search_prob: The search state at the start.\n        find_max: If True, the algorithm should find the minimum else the minimum.\n        max_x, min_x, max_y, min_y: the maximum and minimum bounds of x and y.\n        visualization: If True, a matplotlib graph is displayed.\n        start_temperate: the initial temperate of the system when the program starts.\n        rate_of_decrease: the rate at which the temperate decreases in each iteration.\n        threshold_temp: the threshold temperature below which we end the search\n    Returns a search state having the maximum (or minimum) score.\n    \"\"\"\n    search_end = False\n    current_state = search_prob\n    current_temp = start_temperate\n    scores = []\n    iterations = 0\n    best_state = None\n\n    while not search_end:\n        current_score = current_state.score()\n        if best_state is None or current_score > best_state.score():\n            best_state = current_state\n        scores.append(current_score)\n        iterations += 1\n        next_state = None\n        neighbors = current_state.get_neighbors()\n        while (\n            next_state is None and neighbors\n        ):  # till we do not find a neighbor that we can move to\n            index = random.randint(0, len(neighbors) - 1)  # picking a random neighbor\n            picked_neighbor = neighbors.pop(index)\n            change = picked_neighbor.score() - current_score\n\n            if (\n                picked_neighbor.x > max_x\n                or picked_neighbor.x < min_x\n                or picked_neighbor.y > max_y\n                or picked_neighbor.y < min_y\n            ):\n                continue  # neighbor outside our bounds\n\n            if not find_max:\n                change = change * -1  # in case we are finding minimum\n            if change > 0:  # improves the solution\n                next_state = picked_neighbor\n            else:\n                probability = (math.e) ** (\n                    change / current_temp\n                )  # probability generation function\n                if random.random() < probability:  # random number within probability\n                    next_state = picked_neighbor\n        current_temp = current_temp - (current_temp * rate_of_decrease)\n\n        if current_temp < threshold_temp or next_state is None:\n            # temperature below threshold, or could not find a suitable neighbor\n            search_end = True\n        else:\n            current_state = next_state\n\n    if visualization:\n        from matplotlib import pyplot as plt\n\n        plt.plot(range(iterations), scores)\n        plt.xlabel(\"Iterations\")\n        plt.ylabel(\"Function values\")\n        plt.show()\n    return best_state\n\n\nif __name__ == \"__main__\":\n\n    def test_f1(x, y):\n        return (x**2) + (y**2)\n\n    # starting the problem with initial coordinates (12, 47)\n    prob = SearchProblem(x=12, y=47, step_size=1, function_to_optimize=test_f1)\n    local_min = simulated_annealing(\n        prob, find_max=False, max_x=100, min_x=5, max_y=50, min_y=-5, visualization=True\n    )\n    print(\n        \"The minimum score for f(x, y) = x^2 + y^2 with the domain 100 > x > 5 \"\n        f\"and 50 > y > - 5 found via hill climbing: {local_min.score()}\"\n    )\n\n    # starting the problem with initial coordinates (12, 47)\n    prob = SearchProblem(x=12, y=47, step_size=1, function_to_optimize=test_f1)\n    local_min = simulated_annealing(\n        prob, find_max=True, max_x=100, min_x=5, max_y=50, min_y=-5, visualization=True\n    )\n    print(\n        \"The maximum score for f(x, y) = x^2 + y^2 with the domain 100 > x > 5 \"\n        f\"and 50 > y > - 5 found via hill climbing: {local_min.score()}\"\n    )\n\n    def test_f2(x, y):\n        return (3 * x**2) - (6 * y)\n\n    prob = SearchProblem(x=3, y=4, step_size=1, function_to_optimize=test_f1)\n    local_min = simulated_annealing(prob, find_max=False, visualization=True)\n    print(\n        \"The minimum score for f(x, y) = 3*x^2 - 6*y found via hill climbing: \"\n        f\"{local_min.score()}\"\n    )\n\n    prob = SearchProblem(x=3, y=4, step_size=1, function_to_optimize=test_f1)\n    local_min = simulated_annealing(prob, find_max=True, visualization=True)\n    print(\n        \"The maximum score for f(x, y) = 3*x^2 - 6*y found via hill climbing: \"\n        f\"{local_min.score()}\"\n    )\n"
  },
  {
    "path": "searches/tabu_search.py",
    "content": "\"\"\"\nThis is pure Python implementation of Tabu search algorithm for a Travelling Salesman\nProblem, that the distances between the cities are symmetric (the distance between city\n'a' and city 'b' is the same between city 'b' and city 'a').\nThe TSP can be represented into a graph. The cities are represented by nodes and the\ndistance between them is represented by the weight of the ark between the nodes.\n\nThe .txt file with the graph has the form:\n\nnode1 node2 distance_between_node1_and_node2\nnode1 node3 distance_between_node1_and_node3\n...\n\nBe careful node1, node2 and the distance between them, must exist only once. This means\nin the .txt file should not exist:\nnode1 node2 distance_between_node1_and_node2\nnode2 node1 distance_between_node2_and_node1\n\nFor pytests run following command:\npytest\n\nFor manual testing run:\npython tabu_search.py -f your_file_name.txt -number_of_iterations_of_tabu_search \\\n    -s size_of_tabu_search\ne.g. python tabu_search.py -f tabudata2.txt -i 4 -s 3\n\"\"\"\n\nimport argparse\nimport copy\n\n\ndef generate_neighbours(path):\n    \"\"\"\n    Pure implementation of generating a dictionary of neighbors and the cost with each\n    neighbor, given a path file that includes a graph.\n\n    :param path: The path to the .txt file that includes the graph (e.g.tabudata2.txt)\n    :return dict_of_neighbours: Dictionary with key each node and value a list of lists\n        with the neighbors of the node and the cost (distance) for each neighbor.\n\n    Example of dict_of_neighbours:\n    >>) dict_of_neighbours[a]\n    [[b,20],[c,18],[d,22],[e,26]]\n\n    This indicates the neighbors of node (city) 'a', which has neighbor the node 'b'\n    with distance 20, the node 'c' with distance 18, the node 'd' with distance 22 and\n    the node 'e' with distance 26.\n    \"\"\"\n\n    dict_of_neighbours = {}\n\n    with open(path) as f:\n        for line in f:\n            if line.split()[0] not in dict_of_neighbours:\n                _list = []\n                _list.append([line.split()[1], line.split()[2]])\n                dict_of_neighbours[line.split()[0]] = _list\n            else:\n                dict_of_neighbours[line.split()[0]].append(\n                    [line.split()[1], line.split()[2]]\n                )\n            if line.split()[1] not in dict_of_neighbours:\n                _list = []\n                _list.append([line.split()[0], line.split()[2]])\n                dict_of_neighbours[line.split()[1]] = _list\n            else:\n                dict_of_neighbours[line.split()[1]].append(\n                    [line.split()[0], line.split()[2]]\n                )\n\n    return dict_of_neighbours\n\n\ndef generate_first_solution(path, dict_of_neighbours):\n    \"\"\"\n    Pure implementation of generating the first solution for the Tabu search to start,\n    with the redundant resolution strategy. That means that we start from the starting\n    node (e.g. node 'a'), then we go to the city nearest (lowest distance) to this node\n    (let's assume is node 'c'), then we go to the nearest city of the node 'c', etc.\n    till we have visited all cities and return to the starting node.\n\n    :param path: The path to the .txt file that includes the graph (e.g.tabudata2.txt)\n    :param dict_of_neighbours: Dictionary with key each node and value a list of lists\n        with the neighbors of the node and the cost (distance) for each neighbor.\n    :return first_solution: The solution for the first iteration of Tabu search using\n        the redundant resolution strategy in a list.\n    :return distance_of_first_solution: The total distance that Travelling Salesman\n        will travel, if he follows the path in first_solution.\n    \"\"\"\n\n    with open(path) as f:\n        start_node = f.read(1)\n    end_node = start_node\n\n    first_solution = []\n\n    visiting = start_node\n\n    distance_of_first_solution = 0\n    while visiting not in first_solution:\n        minim = 10000\n        for k in dict_of_neighbours[visiting]:\n            if int(k[1]) < int(minim) and k[0] not in first_solution:\n                minim = k[1]\n                best_node = k[0]\n\n        first_solution.append(visiting)\n        distance_of_first_solution = distance_of_first_solution + int(minim)\n        visiting = best_node\n\n    first_solution.append(end_node)\n\n    position = 0\n    for k in dict_of_neighbours[first_solution[-2]]:\n        if k[0] == start_node:\n            break\n        position += 1\n\n    distance_of_first_solution = (\n        distance_of_first_solution\n        + int(dict_of_neighbours[first_solution[-2]][position][1])\n        - 10000\n    )\n    return first_solution, distance_of_first_solution\n\n\ndef find_neighborhood(solution, dict_of_neighbours):\n    \"\"\"\n    Pure implementation of generating the neighborhood (sorted by total distance of\n    each solution from lowest to highest) of a solution with 1-1 exchange method, that\n    means we exchange each node in a solution with each other node and generating a\n    number of solution named neighborhood.\n\n    :param solution: The solution in which we want to find the neighborhood.\n    :param dict_of_neighbours: Dictionary with key each node and value a list of lists\n        with the neighbors of the node and the cost (distance) for each neighbor.\n    :return neighborhood_of_solution: A list that includes the solutions and the total\n        distance of each solution (in form of list) that are produced with 1-1 exchange\n        from the solution that the method took as an input\n\n    Example:\n    >>> find_neighborhood(['a', 'c', 'b', 'd', 'e', 'a'],\n    ...                   {'a': [['b', '20'], ['c', '18'], ['d', '22'], ['e', '26']],\n    ...                    'c': [['a', '18'], ['b', '10'], ['d', '23'], ['e', '24']],\n    ...                    'b': [['a', '20'], ['c', '10'], ['d', '11'], ['e', '12']],\n    ...                    'e': [['a', '26'], ['b', '12'], ['c', '24'], ['d', '40']],\n    ...                    'd': [['a', '22'], ['b', '11'], ['c', '23'], ['e', '40']]}\n    ...                   )  # doctest: +NORMALIZE_WHITESPACE\n    [['a', 'e', 'b', 'd', 'c', 'a', 90],\n     ['a', 'c', 'd', 'b', 'e', 'a', 90],\n     ['a', 'd', 'b', 'c', 'e', 'a', 93],\n     ['a', 'c', 'b', 'e', 'd', 'a', 102],\n     ['a', 'c', 'e', 'd', 'b', 'a', 113],\n     ['a', 'b', 'c', 'd', 'e', 'a', 119]]\n    \"\"\"\n\n    neighborhood_of_solution = []\n\n    for n in solution[1:-1]:\n        idx1 = solution.index(n)\n        for kn in solution[1:-1]:\n            idx2 = solution.index(kn)\n            if n == kn:\n                continue\n\n            _tmp = copy.deepcopy(solution)\n            _tmp[idx1] = kn\n            _tmp[idx2] = n\n\n            distance = 0\n\n            for k in _tmp[:-1]:\n                next_node = _tmp[_tmp.index(k) + 1]\n                for i in dict_of_neighbours[k]:\n                    if i[0] == next_node:\n                        distance = distance + int(i[1])\n            _tmp.append(distance)\n\n            if _tmp not in neighborhood_of_solution:\n                neighborhood_of_solution.append(_tmp)\n\n    index_of_last_item_in_the_list = len(neighborhood_of_solution[0]) - 1\n\n    neighborhood_of_solution.sort(key=lambda x: x[index_of_last_item_in_the_list])\n    return neighborhood_of_solution\n\n\ndef tabu_search(\n    first_solution, distance_of_first_solution, dict_of_neighbours, iters, size\n):\n    \"\"\"\n    Pure implementation of Tabu search algorithm for a Travelling Salesman Problem in\n    Python.\n\n    :param first_solution: The solution for the first iteration of Tabu search using\n        the redundant resolution strategy in a list.\n    :param distance_of_first_solution: The total distance that Travelling Salesman will\n        travel, if he follows the path in first_solution.\n    :param dict_of_neighbours: Dictionary with key each node and value a list of lists\n        with the neighbors of the node and the cost (distance) for each neighbor.\n    :param iters: The number of iterations that Tabu search will execute.\n    :param size: The size of Tabu List.\n    :return best_solution_ever: The solution with the lowest distance that occurred\n        during the execution of Tabu search.\n    :return best_cost: The total distance that Travelling Salesman will travel, if he\n        follows the path in best_solution ever.\n    \"\"\"\n    count = 1\n    solution = first_solution\n    tabu_list = []\n    best_cost = distance_of_first_solution\n    best_solution_ever = solution\n\n    while count <= iters:\n        neighborhood = find_neighborhood(solution, dict_of_neighbours)\n        index_of_best_solution = 0\n        best_solution = neighborhood[index_of_best_solution]\n        best_cost_index = len(best_solution) - 1\n\n        found = False\n        while not found:\n            i = 0\n            while i < len(best_solution):\n                if best_solution[i] != solution[i]:\n                    first_exchange_node = best_solution[i]\n                    second_exchange_node = solution[i]\n                    break\n                i = i + 1\n\n            if [first_exchange_node, second_exchange_node] not in tabu_list and [\n                second_exchange_node,\n                first_exchange_node,\n            ] not in tabu_list:\n                tabu_list.append([first_exchange_node, second_exchange_node])\n                found = True\n                solution = best_solution[:-1]\n                cost = neighborhood[index_of_best_solution][best_cost_index]\n                if cost < best_cost:\n                    best_cost = cost\n                    best_solution_ever = solution\n            else:\n                index_of_best_solution = index_of_best_solution + 1\n                best_solution = neighborhood[index_of_best_solution]\n\n        if len(tabu_list) >= size:\n            tabu_list.pop(0)\n\n        count = count + 1\n\n    return best_solution_ever, best_cost\n\n\ndef main(args=None):\n    dict_of_neighbours = generate_neighbours(args.File)\n\n    first_solution, distance_of_first_solution = generate_first_solution(\n        args.File, dict_of_neighbours\n    )\n\n    best_sol, best_cost = tabu_search(\n        first_solution,\n        distance_of_first_solution,\n        dict_of_neighbours,\n        args.Iterations,\n        args.Size,\n    )\n\n    print(f\"Best solution: {best_sol}, with total distance: {best_cost}.\")\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(description=\"Tabu Search\")\n    parser.add_argument(\n        \"-f\",\n        \"--File\",\n        type=str,\n        help=\"Path to the file containing the data\",\n        required=True,\n    )\n    parser.add_argument(\n        \"-i\",\n        \"--Iterations\",\n        type=int,\n        help=\"How many iterations the algorithm should perform\",\n        required=True,\n    )\n    parser.add_argument(\n        \"-s\", \"--Size\", type=int, help=\"Size of the tabu list\", required=True\n    )\n\n    # Pass the arguments to main method\n    main(parser.parse_args())\n"
  },
  {
    "path": "searches/tabu_test_data.txt",
    "content": "a b 20\na c 18\na d 22\na e 26\nb c 10\nb d 11\nb e 12\nc d 23\nc e 24\nd e 40\n"
  },
  {
    "path": "searches/ternary_search.py",
    "content": "\"\"\"\nThis is a type of divide and conquer algorithm which divides the search space into\n3 parts and finds the target value based on the property of the array or list\n(usually monotonic property).\n\nTime Complexity  : O(log3 N)\nSpace Complexity : O(1)\n\"\"\"\n\nfrom __future__ import annotations\n\n# This is the precision for this function which can be altered.\n# It is recommended for users to keep this number greater than or equal to 10.\nprecision = 10\n\n\n# This is the linear search that will occur after the search space has become smaller.\n\n\ndef lin_search(left: int, right: int, array: list[int], target: int) -> int:\n    \"\"\"Perform linear search in list. Returns -1 if element is not found.\n\n    Parameters\n    ----------\n    left : int\n        left index bound.\n    right : int\n        right index bound.\n    array : List[int]\n        List of elements to be searched on\n    target : int\n        Element that is searched\n\n    Returns\n    -------\n    int\n        index of element that is looked for.\n\n    Examples\n    --------\n    >>> lin_search(0, 4, [4, 5, 6, 7], 7)\n    3\n    >>> lin_search(0, 3, [4, 5, 6, 7], 7)\n    -1\n    >>> lin_search(0, 2, [-18, 2], -18)\n    0\n    >>> lin_search(0, 1, [5], 5)\n    0\n    >>> lin_search(0, 3, ['a', 'c', 'd'], 'c')\n    1\n    >>> lin_search(0, 3, [.1, .4 , -.1], .1)\n    0\n    >>> lin_search(0, 3, [.1, .4 , -.1], -.1)\n    2\n    \"\"\"\n    for i in range(left, right):\n        if array[i] == target:\n            return i\n    return -1\n\n\ndef ite_ternary_search(array: list[int], target: int) -> int:\n    \"\"\"Iterative method of the ternary search algorithm.\n    >>> test_list = [0, 1, 2, 8, 13, 17, 19, 32, 42]\n    >>> ite_ternary_search(test_list, 3)\n    -1\n    >>> ite_ternary_search(test_list, 13)\n    4\n    >>> ite_ternary_search([4, 5, 6, 7], 4)\n    0\n    >>> ite_ternary_search([4, 5, 6, 7], -10)\n    -1\n    >>> ite_ternary_search([-18, 2], -18)\n    0\n    >>> ite_ternary_search([5], 5)\n    0\n    >>> ite_ternary_search(['a', 'c', 'd'], 'c')\n    1\n    >>> ite_ternary_search(['a', 'c', 'd'], 'f')\n    -1\n    >>> ite_ternary_search([], 1)\n    -1\n    >>> ite_ternary_search([.1, .4 , -.1], .1)\n    0\n    \"\"\"\n\n    left = 0\n    right = len(array)\n    while left <= right:\n        if right - left < precision:\n            return lin_search(left, right, array, target)\n\n        one_third = (left + right) // 3 + 1\n        two_third = 2 * (left + right) // 3 + 1\n\n        if array[one_third] == target:\n            return one_third\n        elif array[two_third] == target:\n            return two_third\n\n        elif target < array[one_third]:\n            right = one_third - 1\n        elif array[two_third] < target:\n            left = two_third + 1\n\n        else:\n            left = one_third + 1\n            right = two_third - 1\n    return -1\n\n\ndef rec_ternary_search(left: int, right: int, array: list[int], target: int) -> int:\n    \"\"\"Recursive method of the ternary search algorithm.\n\n    >>> test_list = [0, 1, 2, 8, 13, 17, 19, 32, 42]\n    >>> rec_ternary_search(0, len(test_list), test_list, 3)\n    -1\n    >>> rec_ternary_search(4, len(test_list), test_list, 42)\n    8\n    >>> rec_ternary_search(0, 2, [4, 5, 6, 7], 4)\n    0\n    >>> rec_ternary_search(0, 3, [4, 5, 6, 7], -10)\n    -1\n    >>> rec_ternary_search(0, 1, [-18, 2], -18)\n    0\n    >>> rec_ternary_search(0, 1, [5], 5)\n    0\n    >>> rec_ternary_search(0, 2, ['a', 'c', 'd'], 'c')\n    1\n    >>> rec_ternary_search(0, 2, ['a', 'c', 'd'], 'f')\n    -1\n    >>> rec_ternary_search(0, 0, [], 1)\n    -1\n    >>> rec_ternary_search(0, 3, [.1, .4 , -.1], .1)\n    0\n    \"\"\"\n    if left < right:\n        if right - left < precision:\n            return lin_search(left, right, array, target)\n        one_third = (left + right) // 3 + 1\n        two_third = 2 * (left + right) // 3 + 1\n\n        if array[one_third] == target:\n            return one_third\n        elif array[two_third] == target:\n            return two_third\n\n        elif target < array[one_third]:\n            return rec_ternary_search(left, one_third - 1, array, target)\n        elif array[two_third] < target:\n            return rec_ternary_search(two_third + 1, right, array, target)\n        else:\n            return rec_ternary_search(one_third + 1, two_third - 1, array, target)\n    else:\n        return -1\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    user_input = input(\"Enter numbers separated by comma:\\n\").strip()\n    collection = [int(item.strip()) for item in user_input.split(\",\")]\n    assert collection == sorted(collection), f\"List must be ordered.\\n{collection}.\"\n    target = int(input(\"Enter the number to be found in the list:\\n\").strip())\n    result1 = ite_ternary_search(collection, target)\n    result2 = rec_ternary_search(0, len(collection) - 1, collection, target)\n    if result2 != -1:\n        print(f\"Iterative search: {target} found at positions: {result1}\")\n        print(f\"Recursive search: {target} found at positions: {result2}\")\n    else:\n        print(\"Not found\")\n"
  },
  {
    "path": "sorts/README.md",
    "content": "# Sorting Algorithms\nSorting is the process of putting data in a specific order. The way to arrange data in a specific order\nis specified by the sorting algorithm. The most typical orders are lexical or numerical. The significance\nof sorting lies in the fact that, if data is stored in a sorted manner, data searching can be highly optimised.\nAnother use for sorting is to represent data in a more readable manner.\n\nThis section contains a lot of important algorithms that help us to use sorting algorithms in various scenarios.\n## References\n* <https://www.tutorialspoint.com/python_data_structure/python_sorting_algorithms.htm>\n* <https://www.geeksforgeeks.org/sorting-algorithms-in-python>\n* <https://realpython.com/sorting-algorithms-python>\n"
  },
  {
    "path": "sorts/__init__.py",
    "content": ""
  },
  {
    "path": "sorts/bead_sort.py",
    "content": "\"\"\"\nBead sort only works for sequences of non-negative integers.\nhttps://en.wikipedia.org/wiki/Bead_sort\n\"\"\"\n\n\ndef bead_sort(sequence: list) -> list:\n    \"\"\"\n    >>> bead_sort([6, 11, 12, 4, 1, 5])\n    [1, 4, 5, 6, 11, 12]\n\n    >>> bead_sort([9, 8, 7, 6, 5, 4 ,3, 2, 1])\n    [1, 2, 3, 4, 5, 6, 7, 8, 9]\n\n    >>> bead_sort([5, 0, 4, 3])\n    [0, 3, 4, 5]\n\n    >>> bead_sort([8, 2, 1])\n    [1, 2, 8]\n\n    >>> bead_sort([1, .9, 0.0, 0, -1, -.9])\n    Traceback (most recent call last):\n        ...\n    TypeError: Sequence must be list of non-negative integers\n\n    >>> bead_sort(\"Hello world\")\n    Traceback (most recent call last):\n        ...\n    TypeError: Sequence must be list of non-negative integers\n    \"\"\"\n    if any(not isinstance(x, int) or x < 0 for x in sequence):\n        raise TypeError(\"Sequence must be list of non-negative integers\")\n    for _ in range(len(sequence)):\n        for i, (rod_upper, rod_lower) in enumerate(zip(sequence, sequence[1:])):  # noqa: RUF007\n            if rod_upper > rod_lower:\n                sequence[i] -= rod_upper - rod_lower\n                sequence[i + 1] += rod_upper - rod_lower\n    return sequence\n\n\nif __name__ == \"__main__\":\n    assert bead_sort([5, 4, 3, 2, 1]) == [1, 2, 3, 4, 5]\n    assert bead_sort([7, 9, 4, 3, 5]) == [3, 4, 5, 7, 9]\n"
  },
  {
    "path": "sorts/binary_insertion_sort.py",
    "content": "\"\"\"\nThis is a pure Python implementation of the binary insertion sort algorithm\n\nFor doctests run following command:\npython -m doctest -v binary_insertion_sort.py\nor\npython3 -m doctest -v binary_insertion_sort.py\n\nFor manual testing run:\npython binary_insertion_sort.py\n\"\"\"\n\n\ndef binary_insertion_sort(collection: list) -> list:\n    \"\"\"\n    Sorts a list using the binary insertion sort algorithm.\n\n    :param collection: A mutable ordered collection with comparable items.\n    :return: The same collection ordered in ascending order.\n\n    Examples:\n    >>> binary_insertion_sort([0, 4, 1234, 4, 1])\n    [0, 1, 4, 4, 1234]\n    >>> binary_insertion_sort([]) == sorted([])\n    True\n    >>> binary_insertion_sort([-1, -2, -3]) == sorted([-1, -2, -3])\n    True\n    >>> lst = ['d', 'a', 'b', 'e', 'c']\n    >>> binary_insertion_sort(lst) == sorted(lst)\n    True\n    >>> import random\n    >>> collection = random.sample(range(-50, 50), 100)\n    >>> binary_insertion_sort(collection) == sorted(collection)\n    True\n    >>> import string\n    >>> collection = random.choices(string.ascii_letters + string.digits, k=100)\n    >>> binary_insertion_sort(collection) == sorted(collection)\n    True\n    \"\"\"\n\n    n = len(collection)\n    for i in range(1, n):\n        value_to_insert = collection[i]\n        low = 0\n        high = i - 1\n\n        while low <= high:\n            mid = (low + high) // 2\n            if value_to_insert < collection[mid]:\n                high = mid - 1\n            else:\n                low = mid + 1\n        for j in range(i, low, -1):\n            collection[j] = collection[j - 1]\n        collection[low] = value_to_insert\n    return collection\n\n\nif __name__ == \"__main__\":\n    user_input = input(\"Enter numbers separated by a comma:\\n\").strip()\n    try:\n        unsorted = [int(item) for item in user_input.split(\",\")]\n    except ValueError:\n        print(\"Invalid input. Please enter valid integers separated by commas.\")\n        raise\n    print(f\"{binary_insertion_sort(unsorted) = }\")\n"
  },
  {
    "path": "sorts/bitonic_sort.py",
    "content": "\"\"\"\nPython program for Bitonic Sort.\n\nNote that this program works only when size of input is a power of 2.\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef comp_and_swap(array: list[int], index1: int, index2: int, direction: int) -> None:\n    \"\"\"Compare the value at given index1 and index2 of the array and swap them as per\n    the given direction.\n\n    The parameter direction indicates the sorting direction, ASCENDING(1) or\n    DESCENDING(0); if (a[i] > a[j]) agrees with the direction, then a[i] and a[j] are\n    interchanged.\n\n    >>> arr = [12, 42, -21, 1]\n    >>> comp_and_swap(arr, 1, 2, 1)\n    >>> arr\n    [12, -21, 42, 1]\n\n    >>> comp_and_swap(arr, 1, 2, 0)\n    >>> arr\n    [12, 42, -21, 1]\n\n    >>> comp_and_swap(arr, 0, 3, 1)\n    >>> arr\n    [1, 42, -21, 12]\n\n    >>> comp_and_swap(arr, 0, 3, 0)\n    >>> arr\n    [12, 42, -21, 1]\n    \"\"\"\n    if (direction == 1 and array[index1] > array[index2]) or (\n        direction == 0 and array[index1] < array[index2]\n    ):\n        array[index1], array[index2] = array[index2], array[index1]\n\n\ndef bitonic_merge(array: list[int], low: int, length: int, direction: int) -> None:\n    \"\"\"\n    It recursively sorts a bitonic sequence in ascending order, if direction = 1, and in\n    descending if direction = 0.\n    The sequence to be sorted starts at index position low, the parameter length is the\n    number of elements to be sorted.\n\n    >>> arr = [12, 42, -21, 1]\n    >>> bitonic_merge(arr, 0, 4, 1)\n    >>> arr\n    [-21, 1, 12, 42]\n\n    >>> bitonic_merge(arr, 0, 4, 0)\n    >>> arr\n    [42, 12, 1, -21]\n    \"\"\"\n    if length > 1:\n        middle = int(length / 2)\n        for i in range(low, low + middle):\n            comp_and_swap(array, i, i + middle, direction)\n        bitonic_merge(array, low, middle, direction)\n        bitonic_merge(array, low + middle, middle, direction)\n\n\ndef bitonic_sort(array: list[int], low: int, length: int, direction: int) -> None:\n    \"\"\"\n    This function first produces a bitonic sequence by recursively sorting its two\n    halves in opposite sorting orders, and then calls bitonic_merge to make them in the\n    same order.\n\n    >>> arr = [12, 34, 92, -23, 0, -121, -167, 145]\n    >>> bitonic_sort(arr, 0, 8, 1)\n    >>> arr\n    [-167, -121, -23, 0, 12, 34, 92, 145]\n\n    >>> bitonic_sort(arr, 0, 8, 0)\n    >>> arr\n    [145, 92, 34, 12, 0, -23, -121, -167]\n    \"\"\"\n    if length > 1:\n        middle = int(length / 2)\n        bitonic_sort(array, low, middle, 1)\n        bitonic_sort(array, low + middle, middle, 0)\n        bitonic_merge(array, low, length, direction)\n\n\nif __name__ == \"__main__\":\n    user_input = input(\"Enter numbers separated by a comma:\\n\").strip()\n    unsorted = [int(item.strip()) for item in user_input.split(\",\")]\n\n    bitonic_sort(unsorted, 0, len(unsorted), 1)\n    print(\"\\nSorted array in ascending order is: \", end=\"\")\n    print(*unsorted, sep=\", \")\n\n    bitonic_merge(unsorted, 0, len(unsorted), 0)\n    print(\"Sorted array in descending order is: \", end=\"\")\n    print(*unsorted, sep=\", \")\n"
  },
  {
    "path": "sorts/bogo_sort.py",
    "content": "\"\"\"\nThis is a pure Python implementation of the bogosort algorithm,\nalso known as permutation sort, stupid sort, slowsort, shotgun sort, or monkey sort.\nBogosort generates random permutations until it guesses the correct one.\n\nMore info on: https://en.wikipedia.org/wiki/Bogosort\n\nFor doctests run following command:\npython -m doctest -v bogo_sort.py\nor\npython3 -m doctest -v bogo_sort.py\nFor manual testing run:\npython bogo_sort.py\n\"\"\"\n\nimport random\n\n\ndef bogo_sort(collection: list) -> list:\n    \"\"\"Pure implementation of the bogosort algorithm in Python\n    :param collection: some mutable ordered collection with heterogeneous\n    comparable items inside\n    :return: the same collection ordered by ascending\n    Examples:\n    >>> bogo_sort([0, 5, 3, 2, 2])\n    [0, 2, 2, 3, 5]\n    >>> bogo_sort([])\n    []\n    >>> bogo_sort([-2, -5, -45])\n    [-45, -5, -2]\n    \"\"\"\n\n    def is_sorted(collection: list) -> bool:\n        for i in range(len(collection) - 1):\n            if collection[i] > collection[i + 1]:\n                return False\n        return True\n\n    while not is_sorted(collection):\n        random.shuffle(collection)\n    return collection\n\n\nif __name__ == \"__main__\":\n    user_input = input(\"Enter numbers separated by a comma:\\n\").strip()\n    unsorted = [int(item) for item in user_input.split(\",\")]\n    print(bogo_sort(unsorted))\n"
  },
  {
    "path": "sorts/bubble_sort.py",
    "content": "from typing import Any\n\n\ndef bubble_sort_iterative(collection: list[Any]) -> list[Any]:\n    \"\"\"Pure implementation of bubble sort algorithm in Python\n\n    :param collection: some mutable ordered collection with heterogeneous\n    comparable items inside\n    :return: the same collection ordered in ascending order\n\n    Examples:\n    >>> bubble_sort_iterative([0, 5, 2, 3, 2])\n    [0, 2, 2, 3, 5]\n    >>> bubble_sort_iterative([])\n    []\n    >>> bubble_sort_iterative([-2, -45, -5])\n    [-45, -5, -2]\n    >>> bubble_sort_iterative([-23, 0, 6, -4, 34])\n    [-23, -4, 0, 6, 34]\n    >>> bubble_sort_iterative([1, 2, 3, 4])\n    [1, 2, 3, 4]\n    >>> bubble_sort_iterative([3, 3, 3, 3])\n    [3, 3, 3, 3]\n    >>> bubble_sort_iterative([56])\n    [56]\n    >>> bubble_sort_iterative([0, 5, 2, 3, 2]) == sorted([0, 5, 2, 3, 2])\n    True\n    >>> bubble_sort_iterative([]) == sorted([])\n    True\n    >>> bubble_sort_iterative([-2, -45, -5]) == sorted([-2, -45, -5])\n    True\n    >>> bubble_sort_iterative([-23, 0, 6, -4, 34]) == sorted([-23, 0, 6, -4, 34])\n    True\n    >>> bubble_sort_iterative(['d', 'a', 'b', 'e']) == sorted(['d', 'a', 'b', 'e'])\n    True\n    >>> bubble_sort_iterative(['z', 'a', 'y', 'b', 'x', 'c'])\n    ['a', 'b', 'c', 'x', 'y', 'z']\n    >>> bubble_sort_iterative([1.1, 3.3, 5.5, 7.7, 2.2, 4.4, 6.6])\n    [1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7]\n    >>> bubble_sort_iterative([1, 3.3, 5, 7.7, 2, 4.4, 6])\n    [1, 2, 3.3, 4.4, 5, 6, 7.7]\n    >>> import random\n    >>> collection_arg = random.sample(range(-50, 50), 100)\n    >>> bubble_sort_iterative(collection_arg) == sorted(collection_arg)\n    True\n    >>> import string\n    >>> collection_arg = random.choices(string.ascii_letters + string.digits, k=100)\n    >>> bubble_sort_iterative(collection_arg) == sorted(collection_arg)\n    True\n    \"\"\"\n    length = len(collection)\n    for i in reversed(range(length)):\n        swapped = False\n        for j in range(i):\n            if collection[j] > collection[j + 1]:\n                swapped = True\n                collection[j], collection[j + 1] = collection[j + 1], collection[j]\n        if not swapped:\n            break  # Stop iteration if the collection is sorted.\n    return collection\n\n\ndef bubble_sort_recursive(collection: list[Any]) -> list[Any]:\n    \"\"\"It is similar iterative bubble sort but recursive.\n\n    :param collection: mutable ordered sequence of elements\n    :return: the same list in ascending order\n\n    Examples:\n    >>> bubble_sort_recursive([0, 5, 2, 3, 2])\n    [0, 2, 2, 3, 5]\n    >>> bubble_sort_recursive([])\n    []\n    >>> bubble_sort_recursive([-2, -45, -5])\n    [-45, -5, -2]\n    >>> bubble_sort_recursive([-23, 0, 6, -4, 34])\n    [-23, -4, 0, 6, 34]\n    >>> bubble_sort_recursive([0, 5, 2, 3, 2]) == sorted([0, 5, 2, 3, 2])\n    True\n    >>> bubble_sort_recursive([]) == sorted([])\n    True\n    >>> bubble_sort_recursive([-2, -45, -5]) == sorted([-2, -45, -5])\n    True\n    >>> bubble_sort_recursive([-23, 0, 6, -4, 34]) == sorted([-23, 0, 6, -4, 34])\n    True\n    >>> bubble_sort_recursive(['d', 'a', 'b', 'e']) == sorted(['d', 'a', 'b', 'e'])\n    True\n    >>> bubble_sort_recursive(['z', 'a', 'y', 'b', 'x', 'c'])\n    ['a', 'b', 'c', 'x', 'y', 'z']\n    >>> bubble_sort_recursive([1.1, 3.3, 5.5, 7.7, 2.2, 4.4, 6.6])\n    [1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7]\n    >>> bubble_sort_recursive([1, 3.3, 5, 7.7, 2, 4.4, 6])\n    [1, 2, 3.3, 4.4, 5, 6, 7.7]\n    >>> bubble_sort_recursive(['a', 'Z', 'B', 'C', 'A', 'c'])\n    ['A', 'B', 'C', 'Z', 'a', 'c']\n    >>> import random\n    >>> collection_arg = random.sample(range(-50, 50), 100)\n    >>> bubble_sort_recursive(collection_arg) == sorted(collection_arg)\n    True\n    >>> import string\n    >>> collection_arg = random.choices(string.ascii_letters + string.digits, k=100)\n    >>> bubble_sort_recursive(collection_arg) == sorted(collection_arg)\n    True\n    \"\"\"\n    length = len(collection)\n    swapped = False\n    for i in range(length - 1):\n        if collection[i] > collection[i + 1]:\n            collection[i], collection[i + 1] = collection[i + 1], collection[i]\n            swapped = True\n\n    return collection if not swapped else bubble_sort_recursive(collection)\n\n\nif __name__ == \"__main__\":\n    import doctest\n    from random import sample\n    from timeit import timeit\n\n    doctest.testmod()\n\n    # Benchmark: Iterative seems slightly faster than recursive.\n    num_runs = 10_000\n    unsorted = sample(range(-50, 50), 100)\n    timer_iterative = timeit(\n        \"bubble_sort_iterative(unsorted[:])\", globals=globals(), number=num_runs\n    )\n    print(\"\\nIterative bubble sort:\")\n    print(*bubble_sort_iterative(unsorted), sep=\",\")\n    print(f\"Processing time (iterative): {timer_iterative:.5f}s for {num_runs:,} runs\")\n\n    unsorted = sample(range(-50, 50), 100)\n    timer_recursive = timeit(\n        \"bubble_sort_recursive(unsorted[:])\", globals=globals(), number=num_runs\n    )\n    print(\"\\nRecursive bubble sort:\")\n    print(*bubble_sort_recursive(unsorted), sep=\",\")\n    print(f\"Processing time (recursive): {timer_recursive:.5f}s for {num_runs:,} runs\")\n"
  },
  {
    "path": "sorts/bucket_sort.py",
    "content": "#!/usr/bin/env python3\n\"\"\"\nIllustrate how to implement bucket sort algorithm.\n\nAuthor: OMKAR PATHAK\nThis program will illustrate how to implement bucket sort algorithm\n\nWikipedia says: Bucket sort, or bin sort, is a sorting algorithm that works\nby distributing the elements of an array into a number of buckets.\nEach bucket is then sorted individually, either using a different sorting\nalgorithm, or by recursively applying the bucket sorting algorithm. It is a\ndistribution sort, and is a cousin of radix sort in the most to least\nsignificant digit flavour.\nBucket sort is a generalization of pigeonhole sort. Bucket sort can be\nimplemented with comparisons and therefore can also be considered a\ncomparison sort algorithm. The computational complexity estimates involve the\nnumber of buckets.\n\nTime Complexity of Solution:\nWorst case scenario occurs when all the elements are placed in a single bucket.\nThe overall performance would then be dominated by the algorithm used to sort each\nbucket. In this case, O(n log n), because of TimSort\n\nAverage Case O(n + (n^2)/k + k), where k is the number of buckets\n\nIf k = O(n), time complexity is O(n)\n\nSource: https://en.wikipedia.org/wiki/Bucket_sort\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef bucket_sort(my_list: list, bucket_count: int = 10) -> list:\n    \"\"\"\n    >>> data = [-1, 2, -5, 0]\n    >>> bucket_sort(data) == sorted(data)\n    True\n    >>> data = [9, 8, 7, 6, -12]\n    >>> bucket_sort(data) == sorted(data)\n    True\n    >>> data = [.4, 1.2, .1, .2, -.9]\n    >>> bucket_sort(data) == sorted(data)\n    True\n    >>> bucket_sort([]) == sorted([])\n    True\n    >>> data = [-1e10, 1e10]\n    >>> bucket_sort(data) == sorted(data)\n    True\n    >>> import random\n    >>> collection = random.sample(range(-50, 50), 50)\n    >>> bucket_sort(collection) == sorted(collection)\n    True\n    >>> data = [1, 2, 2, 1, 1, 3]\n    >>> bucket_sort(data) == sorted(data)\n    True\n    >>> data = [5, 5, 5, 5, 5]\n    >>> bucket_sort(data) == sorted(data)\n    True\n    >>> data = [1000, -1000, 500, -500, 0]\n    >>> bucket_sort(data) == sorted(data)\n    True\n    >>> data = [5.5, 2.2, -1.1, 3.3, 0.0]\n    >>> bucket_sort(data) == sorted(data)\n    True\n    >>> bucket_sort([1]) == [1]\n    True\n    >>> data = [-1.1, -1.5, -3.4, 2.5, 3.6, -3.3]\n    >>> bucket_sort(data) == sorted(data)\n    True\n    >>> data = [9, 2, 7, 1, 5]\n    >>> bucket_sort(data) == sorted(data)\n    True\n    \"\"\"\n\n    if len(my_list) == 0 or bucket_count <= 0:\n        return []\n\n    min_value, max_value = min(my_list), max(my_list)\n    if min_value == max_value:\n        return my_list\n\n    bucket_size = (max_value - min_value) / bucket_count\n    buckets: list[list] = [[] for _ in range(bucket_count)]\n\n    for val in my_list:\n        index = min(int((val - min_value) / bucket_size), bucket_count - 1)\n        buckets[index].append(val)\n\n    return [val for bucket in buckets for val in sorted(bucket)]\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    assert bucket_sort([4, 5, 3, 2, 1]) == [1, 2, 3, 4, 5]\n    assert bucket_sort([0, 1, -10, 15, 2, -2]) == [-10, -2, 0, 1, 2, 15]\n    assert bucket_sort([1.1, 1.2, -1.2, 0, 2.4]) == [-1.2, 0, 1.1, 1.2, 2.4]\n    assert bucket_sort([5, 5, 5, 5, 5]) == [5, 5, 5, 5, 5]\n    assert bucket_sort([-5, -1, -6, -2]) == [-6, -5, -2, -1]\n"
  },
  {
    "path": "sorts/circle_sort.py",
    "content": "\"\"\"\nThis is a Python implementation of the circle sort algorithm\n\nFor doctests run following command:\npython3 -m doctest -v circle_sort.py\n\nFor manual testing run:\npython3 circle_sort.py\n\"\"\"\n\n\ndef circle_sort(collection: list) -> list:\n    \"\"\"A pure Python implementation of circle sort algorithm\n\n    :param collection: a mutable collection of comparable items in any order\n    :return: the same collection in ascending order\n\n    Examples:\n    >>> circle_sort([0, 5, 3, 2, 2])\n    [0, 2, 2, 3, 5]\n    >>> circle_sort([])\n    []\n    >>> circle_sort([-2, 5, 0, -45])\n    [-45, -2, 0, 5]\n    >>> collections = ([], [0, 5, 3, 2, 2], [-2, 5, 0, -45])\n    >>> all(sorted(collection) == circle_sort(collection) for collection in collections)\n    True\n    \"\"\"\n\n    if len(collection) < 2:\n        return collection\n\n    def circle_sort_util(collection: list, low: int, high: int) -> bool:\n        \"\"\"\n        >>> arr = [5,4,3,2,1]\n        >>> circle_sort_util(lst, 0, 2)\n        True\n        >>> arr\n        [3, 4, 5, 2, 1]\n        \"\"\"\n\n        swapped = False\n\n        if low == high:\n            return swapped\n\n        left = low\n        right = high\n\n        while left < right:\n            if collection[left] > collection[right]:\n                collection[left], collection[right] = (\n                    collection[right],\n                    collection[left],\n                )\n                swapped = True\n\n            left += 1\n            right -= 1\n\n        if left == right and collection[left] > collection[right + 1]:\n            collection[left], collection[right + 1] = (\n                collection[right + 1],\n                collection[left],\n            )\n\n            swapped = True\n\n        mid = low + int((high - low) / 2)\n        left_swap = circle_sort_util(collection, low, mid)\n        right_swap = circle_sort_util(collection, mid + 1, high)\n\n        return swapped or left_swap or right_swap\n\n    is_not_sorted = True\n\n    while is_not_sorted is True:\n        is_not_sorted = circle_sort_util(collection, 0, len(collection) - 1)\n\n    return collection\n\n\nif __name__ == \"__main__\":\n    user_input = input(\"Enter numbers separated by a comma:\\n\").strip()\n    unsorted = [int(item) for item in user_input.split(\",\")]\n    print(circle_sort(unsorted))\n"
  },
  {
    "path": "sorts/cocktail_shaker_sort.py",
    "content": "\"\"\"\nAn implementation of the cocktail shaker sort algorithm in pure Python.\n\nhttps://en.wikipedia.org/wiki/Cocktail_shaker_sort\n\"\"\"\n\n\ndef cocktail_shaker_sort(arr: list[int]) -> list[int]:\n    \"\"\"\n    Sorts a list using the Cocktail Shaker Sort algorithm.\n\n    :param arr: List of elements to be sorted.\n    :return: Sorted list.\n\n    >>> cocktail_shaker_sort([4, 5, 2, 1, 2])\n    [1, 2, 2, 4, 5]\n    >>> cocktail_shaker_sort([-4, 5, 0, 1, 2, 11])\n    [-4, 0, 1, 2, 5, 11]\n    >>> cocktail_shaker_sort([0.1, -2.4, 4.4, 2.2])\n    [-2.4, 0.1, 2.2, 4.4]\n    >>> cocktail_shaker_sort([1, 2, 3, 4, 5])\n    [1, 2, 3, 4, 5]\n    >>> cocktail_shaker_sort([-4, -5, -24, -7, -11])\n    [-24, -11, -7, -5, -4]\n    >>> cocktail_shaker_sort([\"elderberry\", \"banana\", \"date\", \"apple\", \"cherry\"])\n    ['apple', 'banana', 'cherry', 'date', 'elderberry']\n    >>> cocktail_shaker_sort((-4, -5, -24, -7, -11))\n    Traceback (most recent call last):\n        ...\n    TypeError: 'tuple' object does not support item assignment\n    \"\"\"\n    start, end = 0, len(arr) - 1\n\n    while start < end:\n        swapped = False\n\n        # Pass from left to right\n        for i in range(start, end):\n            if arr[i] > arr[i + 1]:\n                arr[i], arr[i + 1] = arr[i + 1], arr[i]\n                swapped = True\n\n        if not swapped:\n            break\n\n        end -= 1  # Decrease the end pointer after each pass\n\n        # Pass from right to left\n        for i in range(end, start, -1):\n            if arr[i] < arr[i - 1]:\n                arr[i], arr[i - 1] = arr[i - 1], arr[i]\n                swapped = True\n\n        if not swapped:\n            break\n\n        start += 1  # Increase the start pointer after each pass\n\n    return arr\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    user_input = input(\"Enter numbers separated by a comma:\\n\").strip()\n    unsorted = [int(item) for item in user_input.split(\",\")]\n    print(f\"{cocktail_shaker_sort(unsorted) = }\")\n"
  },
  {
    "path": "sorts/comb_sort.py",
    "content": "\"\"\"\nThis is pure Python implementation of comb sort algorithm.\nComb sort is a relatively simple sorting algorithm originally designed by Wlodzimierz\nDobosiewicz in 1980.  It was rediscovered by Stephen Lacey and Richard Box in 1991.\nComb sort improves on bubble sort algorithm.\nIn bubble sort, distance (or gap) between two compared elements is always one.\nComb sort improvement is that gap can be much more than 1, in order to prevent slowing\ndown by small values at the end of a list.\n\nMore info on: https://en.wikipedia.org/wiki/Comb_sort\n\nFor doctests run following command:\npython -m doctest -v comb_sort.py\nor\npython3 -m doctest -v comb_sort.py\n\nFor manual testing run:\npython comb_sort.py\n\"\"\"\n\n\ndef comb_sort(data: list) -> list:\n    \"\"\"Pure implementation of comb sort algorithm in Python\n    :param data: mutable collection with comparable items\n    :return: the same collection in ascending order\n    Examples:\n    >>> comb_sort([0, 5, 3, 2, 2])\n    [0, 2, 2, 3, 5]\n    >>> comb_sort([])\n    []\n    >>> comb_sort([99, 45, -7, 8, 2, 0, -15, 3])\n    [-15, -7, 0, 2, 3, 8, 45, 99]\n    \"\"\"\n    shrink_factor = 1.3\n    gap = len(data)\n    completed = False\n\n    while not completed:\n        # Update the gap value for a next comb\n        gap = int(gap / shrink_factor)\n        if gap <= 1:\n            completed = True\n\n        index = 0\n        while index + gap < len(data):\n            if data[index] > data[index + gap]:\n                # Swap values\n                data[index], data[index + gap] = data[index + gap], data[index]\n                completed = False\n            index += 1\n\n    return data\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    user_input = input(\"Enter numbers separated by a comma:\\n\").strip()\n    unsorted = [int(item) for item in user_input.split(\",\")]\n    print(comb_sort(unsorted))\n"
  },
  {
    "path": "sorts/counting_sort.py",
    "content": "\"\"\"\nThis is pure Python implementation of counting sort algorithm\nFor doctests run following command:\npython -m doctest -v counting_sort.py\nor\npython3 -m doctest -v counting_sort.py\nFor manual testing run:\npython counting_sort.py\n\"\"\"\n\n\ndef counting_sort(collection):\n    \"\"\"Pure implementation of counting sort algorithm in Python\n    :param collection: some mutable ordered collection with heterogeneous\n    comparable items inside\n    :return: the same collection ordered by ascending\n    Examples:\n    >>> counting_sort([0, 5, 3, 2, 2])\n    [0, 2, 2, 3, 5]\n    >>> counting_sort([])\n    []\n    >>> counting_sort([-2, -5, -45])\n    [-45, -5, -2]\n    \"\"\"\n    # if the collection is empty, returns empty\n    if collection == []:\n        return []\n\n    # get some information about the collection\n    coll_len = len(collection)\n    coll_max = max(collection)\n    coll_min = min(collection)\n\n    # create the counting array\n    counting_arr_length = coll_max + 1 - coll_min\n    counting_arr = [0] * counting_arr_length\n\n    # count how much a number appears in the collection\n    for number in collection:\n        counting_arr[number - coll_min] += 1\n\n    # sum each position with it's predecessors. now, counting_arr[i] tells\n    # us how many elements <= i has in the collection\n    for i in range(1, counting_arr_length):\n        counting_arr[i] = counting_arr[i] + counting_arr[i - 1]\n\n    # create the output collection\n    ordered = [0] * coll_len\n\n    # place the elements in the output, respecting the original order (stable\n    # sort) from end to begin, updating counting_arr\n    for i in reversed(range(coll_len)):\n        ordered[counting_arr[collection[i] - coll_min] - 1] = collection[i]\n        counting_arr[collection[i] - coll_min] -= 1\n\n    return ordered\n\n\ndef counting_sort_string(string):\n    \"\"\"\n    >>> counting_sort_string(\"thisisthestring\")\n    'eghhiiinrsssttt'\n    \"\"\"\n    return \"\".join([chr(i) for i in counting_sort([ord(c) for c in string])])\n\n\nif __name__ == \"__main__\":\n    # Test string sort\n    assert counting_sort_string(\"thisisthestring\") == \"eghhiiinrsssttt\"\n\n    user_input = input(\"Enter numbers separated by a comma:\\n\").strip()\n    unsorted = [int(item) for item in user_input.split(\",\")]\n    print(counting_sort(unsorted))\n"
  },
  {
    "path": "sorts/cycle_sort.py",
    "content": "\"\"\"\nCode contributed by Honey Sharma\nSource: https://en.wikipedia.org/wiki/Cycle_sort\n\"\"\"\n\n\ndef cycle_sort(array: list) -> list:\n    \"\"\"\n    >>> cycle_sort([4, 3, 2, 1])\n    [1, 2, 3, 4]\n\n    >>> cycle_sort([-4, 20, 0, -50, 100, -1])\n    [-50, -4, -1, 0, 20, 100]\n\n    >>> cycle_sort([-.1, -.2, 1.3, -.8])\n    [-0.8, -0.2, -0.1, 1.3]\n\n    >>> cycle_sort([])\n    []\n    \"\"\"\n    array_len = len(array)\n    for cycle_start in range(array_len - 1):\n        item = array[cycle_start]\n\n        pos = cycle_start\n        for i in range(cycle_start + 1, array_len):\n            if array[i] < item:\n                pos += 1\n\n        if pos == cycle_start:\n            continue\n\n        while item == array[pos]:\n            pos += 1\n\n        array[pos], item = item, array[pos]\n        while pos != cycle_start:\n            pos = cycle_start\n            for i in range(cycle_start + 1, array_len):\n                if array[i] < item:\n                    pos += 1\n\n            while item == array[pos]:\n                pos += 1\n\n            array[pos], item = item, array[pos]\n\n    return array\n\n\nif __name__ == \"__main__\":\n    assert cycle_sort([4, 5, 3, 2, 1]) == [1, 2, 3, 4, 5]\n    assert cycle_sort([0, 1, -10, 15, 2, -2]) == [-10, -2, 0, 1, 2, 15]\n"
  },
  {
    "path": "sorts/cyclic_sort.py",
    "content": "\"\"\"\nThis is a pure Python implementation of the Cyclic Sort algorithm.\n\nFor doctests run following command:\npython -m doctest -v cyclic_sort.py\nor\npython3 -m doctest -v cyclic_sort.py\nFor manual testing run:\npython cyclic_sort.py\nor\npython3 cyclic_sort.py\n\"\"\"\n\n\ndef cyclic_sort(nums: list[int]) -> list[int]:\n    \"\"\"\n    Sorts the input list of n integers from 1 to n in-place\n    using the Cyclic Sort algorithm.\n\n    :param nums: List of n integers from 1 to n to be sorted.\n    :return: The same list sorted in ascending order.\n\n    Time complexity: O(n), where n is the number of integers in the list.\n\n    Examples:\n    >>> cyclic_sort([])\n    []\n    >>> cyclic_sort([3, 5, 2, 1, 4])\n    [1, 2, 3, 4, 5]\n    \"\"\"\n\n    # Perform cyclic sort\n    index = 0\n    while index < len(nums):\n        # Calculate the correct index for the current element\n        correct_index = nums[index] - 1\n        # If the current element is not at its correct position,\n        # swap it with the element at its correct index\n        if index != correct_index:\n            nums[index], nums[correct_index] = nums[correct_index], nums[index]\n        else:\n            # If the current element is already in its correct position,\n            # move to the next element\n            index += 1\n\n    return nums\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    user_input = input(\"Enter numbers separated by a comma:\\n\").strip()\n    unsorted = [int(item) for item in user_input.split(\",\")]\n    print(*cyclic_sort(unsorted), sep=\",\")\n"
  },
  {
    "path": "sorts/double_sort.py",
    "content": "from typing import Any\r\n\r\n\r\ndef double_sort(collection: list[Any]) -> list[Any]:\r\n    \"\"\"This sorting algorithm sorts an array using the principle of bubble sort,\r\n    but does it both from left to right and right to left.\r\n    Hence, it's called \"Double sort\"\r\n    :param collection: mutable ordered sequence of elements\r\n    :return: the same collection in ascending order\r\n    Examples:\r\n    >>> double_sort([-1 ,-2 ,-3 ,-4 ,-5 ,-6 ,-7])\r\n    [-7, -6, -5, -4, -3, -2, -1]\r\n    >>> double_sort([])\r\n    []\r\n    >>> double_sort([-1 ,-2 ,-3 ,-4 ,-5 ,-6])\r\n    [-6, -5, -4, -3, -2, -1]\r\n    >>> double_sort([-3, 10, 16, -42, 29]) == sorted([-3, 10, 16, -42, 29])\r\n    True\r\n    \"\"\"\r\n    no_of_elements = len(collection)\r\n    for _ in range(\r\n        int(((no_of_elements - 1) / 2) + 1)\r\n    ):  # we don't need to traverse to end of list as\r\n        for j in range(no_of_elements - 1):\r\n            # apply the bubble sort algorithm from left to right (or forwards)\r\n            if collection[j + 1] < collection[j]:\r\n                collection[j], collection[j + 1] = collection[j + 1], collection[j]\r\n            # apply the bubble sort algorithm from right to left (or backwards)\r\n            if collection[no_of_elements - 1 - j] < collection[no_of_elements - 2 - j]:\r\n                (\r\n                    collection[no_of_elements - 1 - j],\r\n                    collection[no_of_elements - 2 - j],\r\n                ) = (\r\n                    collection[no_of_elements - 2 - j],\r\n                    collection[no_of_elements - 1 - j],\r\n                )\r\n    return collection\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    # allow the user to input the elements of the list on one line\r\n    unsorted = [int(x) for x in input(\"Enter the list to be sorted: \").split() if x]\r\n    print(\"the sorted list is\")\r\n    print(f\"{double_sort(unsorted) = }\")\r\n"
  },
  {
    "path": "sorts/dutch_national_flag_sort.py",
    "content": "\"\"\"\nA pure implementation of Dutch national flag (DNF) sort algorithm in Python.\nDutch National Flag algorithm is an algorithm originally designed by Edsger Dijkstra.\nIt is the most optimal sort for 3 unique values (eg. 0, 1, 2) in a sequence.  DNF can\nsort a sequence of n size with [0 <= a[i] <= 2] at guaranteed O(n) complexity in a\nsingle pass.\n\nThe flag of the Netherlands consists of three colors: white, red, and blue.\nThe task is to randomly arrange balls of white, red, and blue in such a way that balls\nof the same color are placed together.  DNF sorts a sequence of 0, 1, and 2's in linear\ntime that does not consume any extra space.  This algorithm can be implemented only on\na sequence that contains three unique elements.\n\n1) Time complexity is O(n).\n2) Space complexity is O(1).\n\nMore info on: https://en.wikipedia.org/wiki/Dutch_national_flag_problem\n\nFor doctests run following command:\npython3 -m doctest -v dutch_national_flag_sort.py\n\nFor manual testing run:\npython dnf_sort.py\n\"\"\"\n\n# Python program to sort a sequence containing only 0, 1 and 2 in a single pass.\nred = 0  # The first color of the flag.\nwhite = 1  # The second color of the flag.\nblue = 2  # The third color of the flag.\ncolors = (red, white, blue)\n\n\ndef dutch_national_flag_sort(sequence: list) -> list:\n    \"\"\"\n    A pure Python implementation of Dutch National Flag sort algorithm.\n    :param data: 3 unique integer values (e.g., 0, 1, 2) in an sequence\n    :return: The same collection in ascending order\n\n    >>> dutch_national_flag_sort([])\n    []\n    >>> dutch_national_flag_sort([0])\n    [0]\n    >>> dutch_national_flag_sort([2, 1, 0, 0, 1, 2])\n    [0, 0, 1, 1, 2, 2]\n    >>> dutch_national_flag_sort([0, 1, 1, 0, 1, 2, 1, 2, 0, 0, 0, 1])\n    [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2]\n    >>> dutch_national_flag_sort(\"abacab\")\n    Traceback (most recent call last):\n      ...\n    ValueError: The elements inside the sequence must contains only (0, 1, 2) values\n    >>> dutch_national_flag_sort(\"Abacab\")\n    Traceback (most recent call last):\n      ...\n    ValueError: The elements inside the sequence must contains only (0, 1, 2) values\n    >>> dutch_national_flag_sort([3, 2, 3, 1, 3, 0, 3])\n    Traceback (most recent call last):\n      ...\n    ValueError: The elements inside the sequence must contains only (0, 1, 2) values\n    >>> dutch_national_flag_sort([-1, 2, -1, 1, -1, 0, -1])\n    Traceback (most recent call last):\n      ...\n    ValueError: The elements inside the sequence must contains only (0, 1, 2) values\n    >>> dutch_national_flag_sort([1.1, 2, 1.1, 1, 1.1, 0, 1.1])\n    Traceback (most recent call last):\n      ...\n    ValueError: The elements inside the sequence must contains only (0, 1, 2) values\n    \"\"\"\n    if not sequence:\n        return []\n    if len(sequence) == 1:\n        return list(sequence)\n    low = 0\n    high = len(sequence) - 1\n    mid = 0\n    while mid <= high:\n        if sequence[mid] == colors[0]:\n            sequence[low], sequence[mid] = sequence[mid], sequence[low]\n            low += 1\n            mid += 1\n        elif sequence[mid] == colors[1]:\n            mid += 1\n        elif sequence[mid] == colors[2]:\n            sequence[mid], sequence[high] = sequence[high], sequence[mid]\n            high -= 1\n        else:\n            msg = f\"The elements inside the sequence must contains only {colors} values\"\n            raise ValueError(msg)\n    return sequence\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    user_input = input(\"Enter numbers separated by commas:\\n\").strip()\n    unsorted = [int(item.strip()) for item in user_input.split(\",\")]\n    print(f\"{dutch_national_flag_sort(unsorted)}\")\n"
  },
  {
    "path": "sorts/exchange_sort.py",
    "content": "def exchange_sort(numbers: list[int]) -> list[int]:\n    \"\"\"\n    Uses exchange sort to sort a list of numbers.\n    Source: https://en.wikipedia.org/wiki/Sorting_algorithm#Exchange_sort\n    >>> exchange_sort([5, 4, 3, 2, 1])\n    [1, 2, 3, 4, 5]\n    >>> exchange_sort([-1, -2, -3])\n    [-3, -2, -1]\n    >>> exchange_sort([1, 2, 3, 4, 5])\n    [1, 2, 3, 4, 5]\n    >>> exchange_sort([0, 10, -2, 5, 3])\n    [-2, 0, 3, 5, 10]\n    >>> exchange_sort([])\n    []\n    \"\"\"\n    numbers_length = len(numbers)\n    for i in range(numbers_length):\n        for j in range(i + 1, numbers_length):\n            if numbers[j] < numbers[i]:\n                numbers[i], numbers[j] = numbers[j], numbers[i]\n    return numbers\n\n\nif __name__ == \"__main__\":\n    user_input = input(\"Enter numbers separated by a comma:\\n\").strip()\n    unsorted = [int(item) for item in user_input.split(\",\")]\n    print(exchange_sort(unsorted))\n"
  },
  {
    "path": "sorts/external_sort.py",
    "content": "#!/usr/bin/env python\n\n#\n# Sort large text files in a minimum amount of memory\n#\nimport argparse\nimport os\n\n\nclass FileSplitter:\n    BLOCK_FILENAME_FORMAT = \"block_{0}.dat\"\n\n    def __init__(self, filename):\n        self.filename = filename\n        self.block_filenames = []\n\n    def write_block(self, data, block_number):\n        filename = self.BLOCK_FILENAME_FORMAT.format(block_number)\n        with open(filename, \"w\") as file:\n            file.write(data)\n        self.block_filenames.append(filename)\n\n    def get_block_filenames(self):\n        return self.block_filenames\n\n    def split(self, block_size, sort_key=None):\n        i = 0\n        with open(self.filename) as file:\n            while True:\n                lines = file.readlines(block_size)\n\n                if lines == []:\n                    break\n\n                if sort_key is None:\n                    lines.sort()\n                else:\n                    lines.sort(key=sort_key)\n\n                self.write_block(\"\".join(lines), i)\n                i += 1\n\n    def cleanup(self):\n        map(os.remove, self.block_filenames)\n\n\nclass NWayMerge:\n    def select(self, choices):\n        min_index = -1\n        min_str = None\n\n        for i in range(len(choices)):\n            if min_str is None or choices[i] < min_str:\n                min_index = i\n\n        return min_index\n\n\nclass FilesArray:\n    def __init__(self, files):\n        self.files = files\n        self.empty = set()\n        self.num_buffers = len(files)\n        self.buffers = dict.fromkeys(range(self.num_buffers))\n\n    def get_dict(self):\n        return {\n            i: self.buffers[i] for i in range(self.num_buffers) if i not in self.empty\n        }\n\n    def refresh(self):\n        for i in range(self.num_buffers):\n            if self.buffers[i] is None and i not in self.empty:\n                self.buffers[i] = self.files[i].readline()\n\n                if self.buffers[i] == \"\":\n                    self.empty.add(i)\n                    self.files[i].close()\n\n        return len(self.empty) != self.num_buffers\n\n    def unshift(self, index):\n        value = self.buffers[index]\n        self.buffers[index] = None\n\n        return value\n\n\nclass FileMerger:\n    def __init__(self, merge_strategy):\n        self.merge_strategy = merge_strategy\n\n    def merge(self, filenames, outfilename, buffer_size):\n        buffers = FilesArray(self.get_file_handles(filenames, buffer_size))\n        with open(outfilename, \"w\", buffer_size) as outfile:\n            while buffers.refresh():\n                min_index = self.merge_strategy.select(buffers.get_dict())\n                outfile.write(buffers.unshift(min_index))\n\n    def get_file_handles(self, filenames, buffer_size):\n        files = {}\n\n        for i in range(len(filenames)):\n            files[i] = open(filenames[i], \"r\", buffer_size)  # noqa: UP015\n\n        return files\n\n\nclass ExternalSort:\n    def __init__(self, block_size):\n        self.block_size = block_size\n\n    def sort(self, filename, sort_key=None):\n        num_blocks = self.get_number_blocks(filename, self.block_size)\n        splitter = FileSplitter(filename)\n        splitter.split(self.block_size, sort_key)\n\n        merger = FileMerger(NWayMerge())\n        buffer_size = self.block_size / (num_blocks + 1)\n        merger.merge(splitter.get_block_filenames(), filename + \".out\", buffer_size)\n\n        splitter.cleanup()\n\n    def get_number_blocks(self, filename, block_size):\n        return (os.stat(filename).st_size / block_size) + 1\n\n\ndef parse_memory(string):\n    if string[-1].lower() == \"k\":\n        return int(string[:-1]) * 1024\n    elif string[-1].lower() == \"m\":\n        return int(string[:-1]) * 1024 * 1024\n    elif string[-1].lower() == \"g\":\n        return int(string[:-1]) * 1024 * 1024 * 1024\n    else:\n        return int(string)\n\n\ndef main():\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\n        \"-m\", \"--mem\", help=\"amount of memory to use for sorting\", default=\"100M\"\n    )\n    parser.add_argument(\n        \"filename\", metavar=\"<filename>\", nargs=1, help=\"name of file to sort\"\n    )\n    args = parser.parse_args()\n\n    sorter = ExternalSort(parse_memory(args.mem))\n    sorter.sort(args.filename[0])\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "sorts/gnome_sort.py",
    "content": "\"\"\"\nGnome Sort Algorithm (A.K.A. Stupid Sort)\n\nThis algorithm iterates over a list comparing an element with the previous one.\nIf order is not respected, it swaps element backward until order is respected with\nprevious element.  It resumes the initial iteration from element new position.\n\nFor doctests run following command:\npython3 -m doctest -v gnome_sort.py\n\nFor manual testing run:\npython3 gnome_sort.py\n\"\"\"\n\n\ndef gnome_sort(lst: list) -> list:\n    \"\"\"\n    Pure implementation of the gnome sort algorithm in Python\n\n    Take some mutable ordered collection with heterogeneous comparable items inside as\n    arguments, return the same collection ordered by ascending.\n\n    Examples:\n    >>> gnome_sort([0, 5, 3, 2, 2])\n    [0, 2, 2, 3, 5]\n\n    >>> gnome_sort([])\n    []\n\n    >>> gnome_sort([-2, -5, -45])\n    [-45, -5, -2]\n\n    >>> \"\".join(gnome_sort(list(set(\"Gnomes are stupid!\"))))\n    ' !Gadeimnoprstu'\n    \"\"\"\n    if len(lst) <= 1:\n        return lst\n\n    i = 1\n\n    while i < len(lst):\n        if lst[i - 1] <= lst[i]:\n            i += 1\n        else:\n            lst[i - 1], lst[i] = lst[i], lst[i - 1]\n            i -= 1\n            if i == 0:\n                i = 1\n\n    return lst\n\n\nif __name__ == \"__main__\":\n    user_input = input(\"Enter numbers separated by a comma:\\n\").strip()\n    unsorted = [int(item) for item in user_input.split(\",\")]\n    print(gnome_sort(unsorted))\n"
  },
  {
    "path": "sorts/heap_sort.py",
    "content": "\"\"\"\nA pure Python implementation of the heap sort algorithm.\n\"\"\"\n\n\ndef heapify(unsorted: list[int], index: int, heap_size: int) -> None:\n    \"\"\"\n    :param unsorted: unsorted list containing integers numbers\n    :param index: index\n    :param heap_size: size of the heap\n    :return: None\n    >>> unsorted = [1, 4, 3, 5, 2]\n    >>> heapify(unsorted, 0, len(unsorted))\n    >>> unsorted\n    [4, 5, 3, 1, 2]\n    >>> heapify(unsorted, 0, len(unsorted))\n    >>> unsorted\n    [5, 4, 3, 1, 2]\n    \"\"\"\n    largest = index\n    left_index = 2 * index + 1\n    right_index = 2 * index + 2\n    if left_index < heap_size and unsorted[left_index] > unsorted[largest]:\n        largest = left_index\n\n    if right_index < heap_size and unsorted[right_index] > unsorted[largest]:\n        largest = right_index\n\n    if largest != index:\n        unsorted[largest], unsorted[index] = (unsorted[index], unsorted[largest])\n        heapify(unsorted, largest, heap_size)\n\n\ndef heap_sort(unsorted: list[int]) -> list[int]:\n    \"\"\"\n    A pure Python implementation of the heap sort algorithm\n\n    :param collection: a mutable ordered collection of heterogeneous comparable items\n    :return: the same collection ordered by ascending\n\n    Examples:\n    >>> heap_sort([0, 5, 3, 2, 2])\n    [0, 2, 2, 3, 5]\n    >>> heap_sort([])\n    []\n    >>> heap_sort([-2, -5, -45])\n    [-45, -5, -2]\n    >>> heap_sort([3, 7, 9, 28, 123, -5, 8, -30, -200, 0, 4])\n    [-200, -30, -5, 0, 3, 4, 7, 8, 9, 28, 123]\n    \"\"\"\n    n = len(unsorted)\n    for i in range(n // 2 - 1, -1, -1):\n        heapify(unsorted, i, n)\n    for i in range(n - 1, 0, -1):\n        unsorted[0], unsorted[i] = unsorted[i], unsorted[0]\n        heapify(unsorted, 0, i)\n    return unsorted\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    user_input = input(\"Enter numbers separated by a comma:\\n\").strip()\n    if user_input:\n        unsorted = [int(item) for item in user_input.split(\",\")]\n        print(f\"{heap_sort(unsorted) = }\")\n"
  },
  {
    "path": "sorts/insertion_sort.py",
    "content": "\"\"\"\nA pure Python implementation of the insertion sort algorithm\n\nThis algorithm sorts a collection by comparing adjacent elements.\nWhen it finds that order is not respected, it moves the element compared\nbackward until the order is correct.  It then goes back directly to the\nelement's initial position resuming forward comparison.\n\nFor doctests run following command:\npython3 -m doctest -v insertion_sort.py\n\nFor manual testing run:\npython3 insertion_sort.py\n\"\"\"\n\nfrom collections.abc import MutableSequence\nfrom typing import Any, Protocol, TypeVar\n\n\nclass Comparable(Protocol):\n    def __lt__(self, other: Any, /) -> bool: ...\n\n\nT = TypeVar(\"T\", bound=Comparable)\n\n\ndef insertion_sort[T: Comparable](collection: MutableSequence[T]) -> MutableSequence[T]:\n    \"\"\"A pure Python implementation of the insertion sort algorithm\n\n    :param collection: some mutable ordered collection with heterogeneous\n    comparable items inside\n    :return: the same collection ordered by ascending\n\n    Examples:\n    >>> insertion_sort([0, 5, 3, 2, 2])\n    [0, 2, 2, 3, 5]\n    >>> insertion_sort([]) == sorted([])\n    True\n    >>> insertion_sort([-2, -5, -45]) == sorted([-2, -5, -45])\n    True\n    >>> insertion_sort(['d', 'a', 'b', 'e', 'c']) == sorted(['d', 'a', 'b', 'e', 'c'])\n    True\n    >>> import random\n    >>> collection = random.sample(range(-50, 50), 100)\n    >>> insertion_sort(collection) == sorted(collection)\n    True\n    >>> import string\n    >>> collection = random.choices(string.ascii_letters + string.digits, k=100)\n    >>> insertion_sort(collection) == sorted(collection)\n    True\n    \"\"\"\n\n    for insert_index in range(1, len(collection)):\n        insert_value = collection[insert_index]\n        while insert_index > 0 and insert_value < collection[insert_index - 1]:\n            collection[insert_index] = collection[insert_index - 1]\n            insert_index -= 1\n        collection[insert_index] = insert_value\n    return collection\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n\n    user_input = input(\"Enter numbers separated by a comma:\\n\").strip()\n    unsorted = [int(item) for item in user_input.split(\",\")]\n    print(f\"{insertion_sort(unsorted) = }\")\n"
  },
  {
    "path": "sorts/intro_sort.py",
    "content": "\"\"\"\nIntrospective Sort is a hybrid sort (Quick Sort + Heap Sort + Insertion Sort)\nif the size of the list is under 16, use insertion sort\nhttps://en.wikipedia.org/wiki/Introsort\n\"\"\"\n\nimport math\n\n\ndef insertion_sort(array: list, start: int = 0, end: int = 0) -> list:\n    \"\"\"\n    >>> array = [4, 2, 6, 8, 1, 7, 8, 22, 14, 56, 27, 79, 23, 45, 14, 12]\n    >>> insertion_sort(array, 0, len(array))\n    [1, 2, 4, 6, 7, 8, 8, 12, 14, 14, 22, 23, 27, 45, 56, 79]\n    >>> array = [21, 15, 11, 45, -2, -11, 46]\n    >>> insertion_sort(array, 0, len(array))\n    [-11, -2, 11, 15, 21, 45, 46]\n    >>> array = [-2, 0, 89, 11, 48, 79, 12]\n    >>> insertion_sort(array, 0, len(array))\n    [-2, 0, 11, 12, 48, 79, 89]\n    >>> array = ['a', 'z', 'd', 'p', 'v', 'l', 'o', 'o']\n    >>> insertion_sort(array, 0, len(array))\n    ['a', 'd', 'l', 'o', 'o', 'p', 'v', 'z']\n    >>> array = [73.568, 73.56, -45.03, 1.7, 0, 89.45]\n    >>> insertion_sort(array, 0, len(array))\n    [-45.03, 0, 1.7, 73.56, 73.568, 89.45]\n    \"\"\"\n    end = end or len(array)\n    for i in range(start, end):\n        temp_index = i\n        temp_index_value = array[i]\n        while temp_index != start and temp_index_value < array[temp_index - 1]:\n            array[temp_index] = array[temp_index - 1]\n            temp_index -= 1\n        array[temp_index] = temp_index_value\n    return array\n\n\ndef heapify(array: list, index: int, heap_size: int) -> None:  # Max Heap\n    \"\"\"\n    >>> array = [4, 2, 6, 8, 1, 7, 8, 22, 14, 56, 27, 79, 23, 45, 14, 12]\n    >>> heapify(array, len(array) // 2, len(array))\n    \"\"\"\n    largest = index\n    left_index = 2 * index + 1  # Left Node\n    right_index = 2 * index + 2  # Right Node\n\n    if left_index < heap_size and array[largest] < array[left_index]:\n        largest = left_index\n\n    if right_index < heap_size and array[largest] < array[right_index]:\n        largest = right_index\n\n    if largest != index:\n        array[index], array[largest] = array[largest], array[index]\n        heapify(array, largest, heap_size)\n\n\ndef heap_sort(array: list) -> list:\n    \"\"\"\n    >>> heap_sort([4, 2, 6, 8, 1, 7, 8, 22, 14, 56, 27, 79, 23, 45, 14, 12])\n    [1, 2, 4, 6, 7, 8, 8, 12, 14, 14, 22, 23, 27, 45, 56, 79]\n    >>> heap_sort([-2, -11, 0, 0, 0, 87, 45, -69, 78, 12, 10, 103, 89, 52])\n    [-69, -11, -2, 0, 0, 0, 10, 12, 45, 52, 78, 87, 89, 103]\n    >>> heap_sort(['b', 'd', 'e', 'f', 'g', 'p', 'x', 'z', 'b', 's', 'e', 'u', 'v'])\n    ['b', 'b', 'd', 'e', 'e', 'f', 'g', 'p', 's', 'u', 'v', 'x', 'z']\n    >>> heap_sort([6.2, -45.54, 8465.20, 758.56, -457.0, 0, 1, 2.879, 1.7, 11.7])\n    [-457.0, -45.54, 0, 1, 1.7, 2.879, 6.2, 11.7, 758.56, 8465.2]\n    \"\"\"\n    n = len(array)\n\n    for i in range(n // 2, -1, -1):\n        heapify(array, i, n)\n\n    for i in range(n - 1, 0, -1):\n        array[i], array[0] = array[0], array[i]\n        heapify(array, 0, i)\n\n    return array\n\n\ndef median_of_3(\n    array: list, first_index: int, middle_index: int, last_index: int\n) -> int:\n    \"\"\"\n    >>> array = [4, 2, 6, 8, 1, 7, 8, 22, 14, 56, 27, 79, 23, 45, 14, 12]\n    >>> median_of_3(array, 0, ((len(array) - 0) // 2) + 1, len(array) - 1)\n    12\n    >>> array = [13, 2, 6, 8, 1, 7, 8, 22, 14, 56, 27, 79, 23, 45, 14, 12]\n    >>> median_of_3(array, 0, ((len(array) - 0) // 2) + 1, len(array) - 1)\n    13\n    >>> array = [4, 2, 6, 8, 1, 7, 8, 22, 15, 14, 27, 79, 23, 45, 14, 16]\n    >>> median_of_3(array, 0, ((len(array) - 0) // 2) + 1, len(array) - 1)\n    14\n    \"\"\"\n    if (array[first_index] > array[middle_index]) != (\n        array[first_index] > array[last_index]\n    ):\n        return array[first_index]\n    elif (array[middle_index] > array[first_index]) != (\n        array[middle_index] > array[last_index]\n    ):\n        return array[middle_index]\n    else:\n        return array[last_index]\n\n\ndef partition(array: list, low: int, high: int, pivot: int) -> int:\n    \"\"\"\n    >>> array = [4, 2, 6, 8, 1, 7, 8, 22, 14, 56, 27, 79, 23, 45, 14, 12]\n    >>> partition(array, 0, len(array), 12)\n    8\n    >>> array = [21, 15, 11, 45, -2, -11, 46]\n    >>> partition(array, 0, len(array), 15)\n    3\n    >>> array = ['a', 'z', 'd', 'p', 'v', 'l', 'o', 'o']\n    >>> partition(array, 0, len(array), 'p')\n    5\n    >>> array = [6.2, -45.54, 8465.20, 758.56, -457.0, 0, 1, 2.879, 1.7, 11.7]\n    >>> partition(array, 0, len(array), 2.879)\n    6\n    \"\"\"\n    i = low\n    j = high\n    while True:\n        while array[i] < pivot:\n            i += 1\n        j -= 1\n        while pivot < array[j]:\n            j -= 1\n        if i >= j:\n            return i\n        array[i], array[j] = array[j], array[i]\n        i += 1\n\n\ndef sort(array: list) -> list:\n    \"\"\"\n    :param collection: some mutable ordered collection with heterogeneous\n    comparable items inside\n    :return: the same collection ordered by ascending\n\n    Examples:\n    >>> sort([4, 2, 6, 8, 1, 7, 8, 22, 14, 56, 27, 79, 23, 45, 14, 12])\n    [1, 2, 4, 6, 7, 8, 8, 12, 14, 14, 22, 23, 27, 45, 56, 79]\n    >>> sort([-1, -5, -3, -13, -44])\n    [-44, -13, -5, -3, -1]\n    >>> sort([])\n    []\n    >>> sort([5])\n    [5]\n    >>> sort([-3, 0, -7, 6, 23, -34])\n    [-34, -7, -3, 0, 6, 23]\n    >>> sort([1.7, 1.0, 3.3, 2.1, 0.3 ])\n    [0.3, 1.0, 1.7, 2.1, 3.3]\n    >>> sort(['d', 'a', 'b', 'e', 'c'])\n    ['a', 'b', 'c', 'd', 'e']\n    \"\"\"\n    if len(array) == 0:\n        return array\n    max_depth = 2 * math.ceil(math.log2(len(array)))\n    size_threshold = 16\n    return intro_sort(array, 0, len(array), size_threshold, max_depth)\n\n\ndef intro_sort(\n    array: list, start: int, end: int, size_threshold: int, max_depth: int\n) -> list:\n    \"\"\"\n    >>> array = [4, 2, 6, 8, 1, 7, 8, 22, 14, 56, 27, 79, 23, 45, 14, 12]\n    >>> max_depth = 2 * math.ceil(math.log2(len(array)))\n    >>> intro_sort(array, 0, len(array), 16, max_depth)\n    [1, 2, 4, 6, 7, 8, 8, 12, 14, 14, 22, 23, 27, 45, 56, 79]\n    \"\"\"\n    while end - start > size_threshold:\n        if max_depth == 0:\n            return heap_sort(array)\n        max_depth -= 1\n        pivot = median_of_3(array, start, start + ((end - start) // 2) + 1, end - 1)\n        p = partition(array, start, end, pivot)\n        intro_sort(array, p, end, size_threshold, max_depth)\n        end = p\n    return insertion_sort(array, start, end)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    user_input = input(\"Enter numbers separated by a comma : \").strip()\n    unsorted = [float(item) for item in user_input.split(\",\")]\n    print(f\"{sort(unsorted) = }\")\n"
  },
  {
    "path": "sorts/iterative_merge_sort.py",
    "content": "\"\"\"\nImplementation of iterative merge sort in Python\nAuthor: Aman Gupta\n\nFor doctests run following command:\npython3 -m doctest -v iterative_merge_sort.py\n\nFor manual testing run:\npython3 iterative_merge_sort.py\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef merge(input_list: list, low: int, mid: int, high: int) -> list:\n    \"\"\"\n    sorting left-half and right-half individually\n    then merging them into result\n    \"\"\"\n    result = []\n    left, right = input_list[low:mid], input_list[mid : high + 1]\n    while left and right:\n        result.append((left if left[0] <= right[0] else right).pop(0))\n    input_list[low : high + 1] = result + left + right\n    return input_list\n\n\n# iteration over the unsorted list\ndef iter_merge_sort(input_list: list) -> list:\n    \"\"\"\n    Return a sorted copy of the input list\n\n    >>> iter_merge_sort([5, 9, 8, 7, 1, 2, 7])\n    [1, 2, 5, 7, 7, 8, 9]\n    >>> iter_merge_sort([1])\n    [1]\n    >>> iter_merge_sort([2, 1])\n    [1, 2]\n    >>> iter_merge_sort([2, 1, 3])\n    [1, 2, 3]\n    >>> iter_merge_sort([4, 3, 2, 1])\n    [1, 2, 3, 4]\n    >>> iter_merge_sort([5, 4, 3, 2, 1])\n    [1, 2, 3, 4, 5]\n    >>> iter_merge_sort(['c', 'b', 'a'])\n    ['a', 'b', 'c']\n    >>> iter_merge_sort([0.3, 0.2, 0.1])\n    [0.1, 0.2, 0.3]\n    >>> iter_merge_sort(['dep', 'dang', 'trai'])\n    ['dang', 'dep', 'trai']\n    >>> iter_merge_sort([6])\n    [6]\n    >>> iter_merge_sort([])\n    []\n    >>> iter_merge_sort([-2, -9, -1, -4])\n    [-9, -4, -2, -1]\n    >>> iter_merge_sort([1.1, 1, 0.0, -1, -1.1])\n    [-1.1, -1, 0.0, 1, 1.1]\n    >>> iter_merge_sort(['c', 'b', 'a'])\n    ['a', 'b', 'c']\n    >>> iter_merge_sort('cba')\n    ['a', 'b', 'c']\n    \"\"\"\n    if len(input_list) <= 1:\n        return input_list\n    input_list = list(input_list)\n\n    # iteration for two-way merging\n    p = 2\n    while p <= len(input_list):\n        # getting low, high and middle value for merge-sort of single list\n        for i in range(0, len(input_list), p):\n            low = i\n            high = i + p - 1\n            mid = (low + high + 1) // 2\n            input_list = merge(input_list, low, mid, high)\n        # final merge of last two parts\n        if p * 2 >= len(input_list):\n            mid = i\n            input_list = merge(input_list, 0, mid, len(input_list) - 1)\n            break\n        p *= 2\n\n    return input_list\n\n\nif __name__ == \"__main__\":\n    user_input = input(\"Enter numbers separated by a comma:\\n\").strip()\n    if user_input == \"\":\n        unsorted = []\n    else:\n        unsorted = [int(item.strip()) for item in user_input.split(\",\")]\n    print(iter_merge_sort(unsorted))\n"
  },
  {
    "path": "sorts/merge_insertion_sort.py",
    "content": "\"\"\"\nThis is a pure Python implementation of the merge-insertion sort algorithm\nSource: https://en.wikipedia.org/wiki/Merge-insertion_sort\n\nFor doctests run following command:\npython3 -m doctest -v merge_insertion_sort.py\nor\npython -m doctest -v merge_insertion_sort.py\n\nFor manual testing run:\npython3 merge_insertion_sort.py\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef binary_search_insertion(sorted_list, item):\n    \"\"\"\n    >>> binary_search_insertion([1, 2, 7, 9, 10], 4)\n    [1, 2, 4, 7, 9, 10]\n    \"\"\"\n    left = 0\n    right = len(sorted_list) - 1\n    while left <= right:\n        middle = (left + right) // 2\n        if left == right:\n            if sorted_list[middle] < item:\n                left = middle + 1\n            break\n        elif sorted_list[middle] < item:\n            left = middle + 1\n        else:\n            right = middle - 1\n    sorted_list.insert(left, item)\n    return sorted_list\n\n\ndef merge(left, right):\n    \"\"\"\n    >>> merge([[1, 6], [9, 10]], [[2, 3], [4, 5], [7, 8]])\n    [[1, 6], [2, 3], [4, 5], [7, 8], [9, 10]]\n    \"\"\"\n    result = []\n    while left and right:\n        if left[0][0] < right[0][0]:\n            result.append(left.pop(0))\n        else:\n            result.append(right.pop(0))\n    return result + left + right\n\n\ndef sortlist_2d(list_2d):\n    \"\"\"\n    >>> sortlist_2d([[9, 10], [1, 6], [7, 8], [2, 3], [4, 5]])\n    [[1, 6], [2, 3], [4, 5], [7, 8], [9, 10]]\n    \"\"\"\n    length = len(list_2d)\n    if length <= 1:\n        return list_2d\n    middle = length // 2\n    return merge(sortlist_2d(list_2d[:middle]), sortlist_2d(list_2d[middle:]))\n\n\ndef merge_insertion_sort(collection: list[int]) -> list[int]:\n    \"\"\"Pure implementation of merge-insertion sort algorithm in Python\n\n    :param collection: some mutable ordered collection with heterogeneous\n    comparable items inside\n    :return: the same collection ordered by ascending\n\n    Examples:\n    >>> merge_insertion_sort([0, 5, 3, 2, 2])\n    [0, 2, 2, 3, 5]\n\n    >>> merge_insertion_sort([99])\n    [99]\n\n    >>> merge_insertion_sort([-2, -5, -45])\n    [-45, -5, -2]\n\n    Testing with all permutations on range(0,5):\n    >>> import itertools\n    >>> permutations = list(itertools.permutations([0, 1, 2, 3, 4]))\n    >>> all(merge_insertion_sort(p) == [0, 1, 2, 3, 4] for p in permutations)\n    True\n    \"\"\"\n\n    if len(collection) <= 1:\n        return collection\n\n    \"\"\"\n    Group the items into two pairs, and leave one element if there is a last odd item.\n\n    Example: [999, 100, 75, 40, 10000]\n                -> [999, 100], [75, 40]. Leave 10000.\n    \"\"\"\n    two_paired_list = []\n    has_last_odd_item = False\n    for i in range(0, len(collection), 2):\n        if i == len(collection) - 1:\n            has_last_odd_item = True\n        else:\n            \"\"\"\n            Sort two-pairs in each groups.\n\n            Example: [999, 100], [75, 40]\n                        -> [100, 999], [40, 75]\n            \"\"\"\n            if collection[i] < collection[i + 1]:\n                two_paired_list.append([collection[i], collection[i + 1]])\n            else:\n                two_paired_list.append([collection[i + 1], collection[i]])\n\n    \"\"\"\n    Sort two_paired_list.\n\n    Example: [100, 999], [40, 75]\n                -> [40, 75], [100, 999]\n    \"\"\"\n    sorted_list_2d = sortlist_2d(two_paired_list)\n\n    \"\"\"\n    40 < 100 is sure because it has already been sorted.\n    Generate the sorted_list of them so that you can avoid unnecessary comparison.\n\n    Example:\n           group0 group1\n           40     100\n           75     999\n        ->\n           group0 group1\n           [40,   100]\n           75     999\n    \"\"\"\n    result = [i[0] for i in sorted_list_2d]\n\n    \"\"\"\n    100 < 999 is sure because it has already been sorted.\n    Put 999 in last of the sorted_list so that you can avoid unnecessary comparison.\n\n    Example:\n           group0 group1\n           [40,   100]\n           75     999\n        ->\n           group0 group1\n           [40,   100,   999]\n           75\n    \"\"\"\n    result.append(sorted_list_2d[-1][1])\n\n    \"\"\"\n    Insert the last odd item left if there is.\n\n    Example:\n           group0 group1\n           [40,   100,   999]\n           75\n        ->\n           group0 group1\n           [40,   100,   999,   10000]\n           75\n    \"\"\"\n    if has_last_odd_item:\n        pivot = collection[-1]\n        result = binary_search_insertion(result, pivot)\n\n    \"\"\"\n    Insert the remaining items.\n    In this case, 40 < 75 is sure because it has already been sorted.\n    Therefore, you only need to insert 75 into [100, 999, 10000],\n    so that you can avoid unnecessary comparison.\n\n    Example:\n           group0 group1\n           [40,   100,   999,   10000]\n            ^ You don't need to compare with this as 40 < 75 is already sure.\n           75\n        ->\n           [40,   75,    100,   999,   10000]\n    \"\"\"\n    is_last_odd_item_inserted_before_this_index = False\n    for i in range(len(sorted_list_2d) - 1):\n        if result[i] == collection[-1] and has_last_odd_item:\n            is_last_odd_item_inserted_before_this_index = True\n        pivot = sorted_list_2d[i][1]\n        # If last_odd_item is inserted before the item's index,\n        # you should forward index one more.\n        if is_last_odd_item_inserted_before_this_index:\n            result = result[: i + 2] + binary_search_insertion(result[i + 2 :], pivot)\n        else:\n            result = result[: i + 1] + binary_search_insertion(result[i + 1 :], pivot)\n\n    return result\n\n\nif __name__ == \"__main__\":\n    user_input = input(\"Enter numbers separated by a comma:\\n\").strip()\n    unsorted = [int(item) for item in user_input.split(\",\")]\n    print(merge_insertion_sort(unsorted))\n"
  },
  {
    "path": "sorts/merge_sort.py",
    "content": "\"\"\"\nThis is a pure Python implementation of the merge sort algorithm.\n\nFor doctests run following command:\npython -m doctest -v merge_sort.py\nor\npython3 -m doctest -v merge_sort.py\nFor manual testing run:\npython merge_sort.py\n\"\"\"\n\n\ndef merge_sort(collection: list) -> list:\n    \"\"\"\n    Sorts a list using the merge sort algorithm.\n\n    :param collection: A mutable ordered collection with comparable items.\n    :return: The same collection ordered in ascending order.\n\n    Time Complexity: O(n log n)\n    Space Complexity: O(n)\n\n    Examples:\n    >>> merge_sort([0, 5, 3, 2, 2])\n    [0, 2, 2, 3, 5]\n    >>> merge_sort([])\n    []\n    >>> merge_sort([-2, -5, -45])\n    [-45, -5, -2]\n    \"\"\"\n\n    def merge(left: list, right: list) -> list:\n        \"\"\"\n        Merge two sorted lists into a single sorted list.\n\n        :param left: Left collection\n        :param right: Right collection\n        :return: Merged result\n        \"\"\"\n        result = []\n        while left and right:\n            result.append(left.pop(0) if left[0] <= right[0] else right.pop(0))\n        result.extend(left)\n        result.extend(right)\n        return result\n\n    if len(collection) <= 1:\n        return collection\n    mid_index = len(collection) // 2\n    return merge(merge_sort(collection[:mid_index]), merge_sort(collection[mid_index:]))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    try:\n        user_input = input(\"Enter numbers separated by a comma:\\n\").strip()\n        unsorted = [int(item) for item in user_input.split(\",\")]\n        sorted_list = merge_sort(unsorted)\n        print(*sorted_list, sep=\",\")\n    except ValueError:\n        print(\"Invalid input. Please enter valid integers separated by commas.\")\n"
  },
  {
    "path": "sorts/msd_radix_sort.py",
    "content": "\"\"\"\nPython implementation of the MSD radix sort algorithm.\nIt used the binary representation of the integers to sort\nthem.\nhttps://en.wikipedia.org/wiki/Radix_sort\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef msd_radix_sort(list_of_ints: list[int]) -> list[int]:\n    \"\"\"\n    Implementation of the MSD radix sort algorithm. Only works\n    with positive integers\n    :param list_of_ints: A list of integers\n    :return: Returns the sorted list\n    >>> msd_radix_sort([40, 12, 1, 100, 4])\n    [1, 4, 12, 40, 100]\n    >>> msd_radix_sort([])\n    []\n    >>> msd_radix_sort([123, 345, 123, 80])\n    [80, 123, 123, 345]\n    >>> msd_radix_sort([1209, 834598, 1, 540402, 45])\n    [1, 45, 1209, 540402, 834598]\n    >>> msd_radix_sort([-1, 34, 45])\n    Traceback (most recent call last):\n        ...\n    ValueError: All numbers must be positive\n    \"\"\"\n    if not list_of_ints:\n        return []\n\n    if min(list_of_ints) < 0:\n        raise ValueError(\"All numbers must be positive\")\n\n    most_bits = max(len(bin(x)[2:]) for x in list_of_ints)\n    return _msd_radix_sort(list_of_ints, most_bits)\n\n\ndef _msd_radix_sort(list_of_ints: list[int], bit_position: int) -> list[int]:\n    \"\"\"\n    Sort the given list based on the bit at bit_position. Numbers with a\n    0 at that position will be at the start of the list, numbers with a\n    1 at the end.\n    :param list_of_ints: A list of integers\n    :param bit_position: the position of the bit that gets compared\n    :return: Returns a partially sorted list\n    >>> _msd_radix_sort([45, 2, 32], 1)\n    [2, 32, 45]\n    >>> _msd_radix_sort([10, 4, 12], 2)\n    [4, 12, 10]\n    \"\"\"\n    if bit_position == 0 or len(list_of_ints) in [0, 1]:\n        return list_of_ints\n\n    zeros = []\n    ones = []\n    # Split numbers based on bit at bit_position from the right\n    for number in list_of_ints:\n        if (number >> (bit_position - 1)) & 1:\n            # number has a one at bit bit_position\n            ones.append(number)\n        else:\n            # number has a zero at bit bit_position\n            zeros.append(number)\n\n    # recursively split both lists further\n    zeros = _msd_radix_sort(zeros, bit_position - 1)\n    ones = _msd_radix_sort(ones, bit_position - 1)\n\n    # recombine lists\n    res = zeros\n    res.extend(ones)\n\n    return res\n\n\ndef msd_radix_sort_inplace(list_of_ints: list[int]):\n    \"\"\"\n    Inplace implementation of the MSD radix sort algorithm.\n    Sorts based on the binary representation of the integers.\n    >>> lst = [1, 345, 23, 89, 0, 3]\n    >>> msd_radix_sort_inplace(lst)\n    >>> lst == sorted(lst)\n    True\n    >>> lst = [1, 43, 0, 0, 0, 24, 3, 3]\n    >>> msd_radix_sort_inplace(lst)\n    >>> lst == sorted(lst)\n    True\n    >>> lst = []\n    >>> msd_radix_sort_inplace(lst)\n    >>> lst == []\n    True\n    >>> lst = [-1, 34, 23, 4, -42]\n    >>> msd_radix_sort_inplace(lst)\n    Traceback (most recent call last):\n        ...\n    ValueError: All numbers must be positive\n    \"\"\"\n\n    length = len(list_of_ints)\n    if not list_of_ints or length == 1:\n        return\n\n    if min(list_of_ints) < 0:\n        raise ValueError(\"All numbers must be positive\")\n\n    most_bits = max(len(bin(x)[2:]) for x in list_of_ints)\n    _msd_radix_sort_inplace(list_of_ints, most_bits, 0, length)\n\n\ndef _msd_radix_sort_inplace(\n    list_of_ints: list[int], bit_position: int, begin_index: int, end_index: int\n):\n    \"\"\"\n    Sort the given list based on the bit at bit_position. Numbers with a\n    0 at that position will be at the start of the list, numbers with a\n    1 at the end.\n    >>> lst = [45, 2, 32, 24, 534, 2932]\n    >>> _msd_radix_sort_inplace(lst, 1, 0, 3)\n    >>> lst == [32, 2, 45, 24, 534, 2932]\n    True\n    >>> lst = [0, 2, 1, 3, 12, 10, 4, 90, 54, 2323, 756]\n    >>> _msd_radix_sort_inplace(lst, 2, 4, 7)\n    >>> lst == [0, 2, 1, 3, 12, 4, 10, 90, 54, 2323, 756]\n    True\n    \"\"\"\n    if bit_position == 0 or end_index - begin_index <= 1:\n        return\n\n    bit_position -= 1\n\n    i = begin_index\n    j = end_index - 1\n    while i <= j:\n        changed = False\n        if not (list_of_ints[i] >> bit_position) & 1:\n            # found zero at the beginning\n            i += 1\n            changed = True\n        if (list_of_ints[j] >> bit_position) & 1:\n            # found one at the end\n            j -= 1\n            changed = True\n\n        if changed:\n            continue\n\n        list_of_ints[i], list_of_ints[j] = list_of_ints[j], list_of_ints[i]\n        j -= 1\n        if j != i:\n            i += 1\n\n    _msd_radix_sort_inplace(list_of_ints, bit_position, begin_index, i)\n    _msd_radix_sort_inplace(list_of_ints, bit_position, i, end_index)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "sorts/natural_sort.py",
    "content": "from __future__ import annotations\n\nimport re\n\n\ndef natural_sort(input_list: list[str]) -> list[str]:\n    \"\"\"\n    Sort the given list of strings in the way that humans expect.\n\n    The normal Python sort algorithm sorts lexicographically,\n    so you might not get the results that you expect...\n\n    >>> example1 = ['2 ft 7 in', '1 ft 5 in', '10 ft 2 in', '2 ft 11 in', '7 ft 6 in']\n    >>> sorted(example1)\n    ['1 ft 5 in', '10 ft 2 in', '2 ft 11 in', '2 ft 7 in', '7 ft 6 in']\n    >>> # The natural sort algorithm sort based on meaning and not computer code point.\n    >>> natural_sort(example1)\n    ['1 ft 5 in', '2 ft 7 in', '2 ft 11 in', '7 ft 6 in', '10 ft 2 in']\n\n    >>> example2 = ['Elm11', 'Elm12', 'Elm2', 'elm0', 'elm1', 'elm10', 'elm13', 'elm9']\n    >>> sorted(example2)\n    ['Elm11', 'Elm12', 'Elm2', 'elm0', 'elm1', 'elm10', 'elm13', 'elm9']\n    >>> natural_sort(example2)\n    ['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13']\n    \"\"\"\n\n    def alphanum_key(key):\n        return [int(s) if s.isdigit() else s.lower() for s in re.split(\"([0-9]+)\", key)]\n\n    return sorted(input_list, key=alphanum_key)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "sorts/normal_distribution_quick_sort.md",
    "content": "# Normal Distribution QuickSort\n\nQuickSort 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.\n\n## Array elements\n\nThe array elements are taken from a Standard Normal Distribution, having mean = 0 and standard deviation = 1.\n\n### The code\n\n```python\n\n>>> import numpy as np\n>>> from tempfile import TemporaryFile\n>>> outfile = TemporaryFile()\n>>> p = 100 # 100 elements are to be sorted\n>>> mu, sigma = 0, 1 # mean and standard deviation\n>>> X = np.random.normal(mu, sigma, p)\n>>> np.save(outfile, X)\n>>> 'The array is'\n>>> X\n\n```\n\n------\n\n#### The distribution of the array elements\n\n```python\n>>> mu, sigma = 0, 1 # mean and standard deviation\n>>> s = np.random.normal(mu, sigma, p)\n>>> count, bins, ignored = plt.hist(s, 30, normed=True)\n>>> plt.plot(bins , 1/(sigma * np.sqrt(2 * np.pi)) *np.exp( - (bins - mu)**2 / (2 * sigma**2) ),linewidth=2, color='r')\n>>> plt.show()\n```\n\n------\n![normal distribution large](https://upload.wikimedia.org/wikipedia/commons/thumb/2/25/The_Normal_Distribution.svg/1280px-The_Normal_Distribution.svg.png)\n\n------\n\n## Comparing the numbers of comparisons\n\nWe can plot the function for Checking 'The Number of Comparisons' taking place between Normal Distribution QuickSort and Ordinary QuickSort:\n\n```python\n>>> import matplotlib.pyplot as plt\n\n    # Normal Distribution QuickSort is red\n>>> 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')\n\n    # Ordinary QuickSort is green\n>>> 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')\n\n>>> plt.show()\n```\n"
  },
  {
    "path": "sorts/odd_even_sort.py",
    "content": "\"\"\"\nOdd even sort implementation.\n\nhttps://en.wikipedia.org/wiki/Odd%E2%80%93even_sort\n\"\"\"\n\n\ndef odd_even_sort(input_list: list) -> list:\n    \"\"\"\n    Sort input with odd even sort.\n\n    This algorithm uses the same idea of bubblesort,\n    but by first dividing in two phase (odd and even).\n    Originally developed for use on parallel processors\n    with local interconnections.\n    :param collection: mutable ordered sequence of elements\n    :return: same collection in ascending order\n    Examples:\n    >>> odd_even_sort([5 , 4 ,3 ,2 ,1])\n    [1, 2, 3, 4, 5]\n    >>> odd_even_sort([])\n    []\n    >>> odd_even_sort([-10 ,-1 ,10 ,2])\n    [-10, -1, 2, 10]\n    >>> odd_even_sort([1 ,2 ,3 ,4])\n    [1, 2, 3, 4]\n    \"\"\"\n    is_sorted = False\n    while is_sorted is False:  # Until all the indices are traversed keep looping\n        is_sorted = True\n        for i in range(0, len(input_list) - 1, 2):  # iterating over all even indices\n            if input_list[i] > input_list[i + 1]:\n                input_list[i], input_list[i + 1] = input_list[i + 1], input_list[i]\n                # swapping if elements not in order\n                is_sorted = False\n\n        for i in range(1, len(input_list) - 1, 2):  # iterating over all odd indices\n            if input_list[i] > input_list[i + 1]:\n                input_list[i], input_list[i + 1] = input_list[i + 1], input_list[i]\n                # swapping if elements not in order\n                is_sorted = False\n    return input_list\n\n\nif __name__ == \"__main__\":\n    print(\"Enter list to be sorted\")\n    input_list = [int(x) for x in input().split()]\n    # inputing elements of the list in one line\n    sorted_list = odd_even_sort(input_list)\n    print(\"The sorted list is\")\n    print(sorted_list)\n"
  },
  {
    "path": "sorts/odd_even_transposition_parallel.py",
    "content": "\"\"\"\nThis is an implementation of odd-even transposition sort.\n\nIt works by performing a series of parallel swaps between odd and even pairs of\nvariables in the list.\n\nThis implementation represents each variable in the list with a process and\neach process communicates with its neighboring processes in the list to perform\ncomparisons.\nThey are synchronized with locks and message passing but other forms of\nsynchronization could be used.\n\"\"\"\n\nimport multiprocessing as mp\n\n# lock used to ensure that two processes do not access a pipe at the same time\n# NOTE This breaks testing on build runner. May work better locally\n# process_lock = mp.Lock()\n\n\"\"\"\nThe function run by the processes that sorts the list\n\nposition = the position in the list the process represents, used to know which\n            neighbor we pass our value to\nvalue = the initial value at list[position]\nLSend, RSend = the pipes we use to send to our left and right neighbors\nLRcv, RRcv = the pipes we use to receive from our left and right neighbors\nresultPipe = the pipe used to send results back to main\n\"\"\"\n\n\ndef oe_process(\n    position,\n    value,\n    l_send,\n    r_send,\n    lr_cv,\n    rr_cv,\n    result_pipe,\n    multiprocessing_context,\n):\n    process_lock = multiprocessing_context.Lock()\n\n    # we perform n swaps since after n swaps we know we are sorted\n    # we *could* stop early if we are sorted already, but it takes as long to\n    # find out we are sorted as it does to sort the list with this algorithm\n    for i in range(10):\n        if (i + position) % 2 == 0 and r_send is not None:\n            # send your value to your right neighbor\n            with process_lock:\n                r_send[1].send(value)\n\n            # receive your right neighbor's value\n            with process_lock:\n                temp = rr_cv[0].recv()\n\n            # take the lower value since you are on the left\n            value = min(value, temp)\n        elif (i + position) % 2 != 0 and l_send is not None:\n            # send your value to your left neighbor\n            with process_lock:\n                l_send[1].send(value)\n\n            # receive your left neighbor's value\n            with process_lock:\n                temp = lr_cv[0].recv()\n\n            # take the higher value since you are on the right\n            value = max(value, temp)\n    # after all swaps are performed, send the values back to main\n    result_pipe[1].send(value)\n\n\n\"\"\"\nthe function which creates the processes that perform the parallel swaps\n\narr = the list to be sorted\n\"\"\"\n\n\ndef odd_even_transposition(arr):\n    \"\"\"\n    >>> odd_even_transposition(list(range(10)[::-1])) == sorted(list(range(10)[::-1]))\n    True\n    >>> odd_even_transposition([\"a\", \"x\", \"c\"]) == sorted([\"x\", \"a\", \"c\"])\n    True\n    >>> odd_even_transposition([1.9, 42.0, 2.8]) == sorted([1.9, 42.0, 2.8])\n    True\n    >>> odd_even_transposition([False, True, False]) == sorted([False, False, True])\n    True\n    >>> odd_even_transposition([1, 32.0, 9]) == sorted([False, False, True])\n    False\n    >>> odd_even_transposition([1, 32.0, 9]) == sorted([1.0, 32, 9.0])\n    True\n    >>> unsorted_list = [-442, -98, -554, 266, -491, 985, -53, -529, 82, -429]\n    >>> odd_even_transposition(unsorted_list) == sorted(unsorted_list)\n    True\n    >>> unsorted_list = [-442, -98, -554, 266, -491, 985, -53, -529, 82, -429]\n    >>> odd_even_transposition(unsorted_list) == sorted(unsorted_list + [1])\n    False\n    \"\"\"\n    # spawn method is considered safer than fork\n    multiprocessing_context = mp.get_context(\"spawn\")\n\n    process_array_ = []\n    result_pipe = []\n    # initialize the list of pipes where the values will be retrieved\n    for _ in arr:\n        result_pipe.append(multiprocessing_context.Pipe())\n    # creates the processes\n    # the first and last process only have one neighbor so they are made outside\n    # of the loop\n    temp_rs = multiprocessing_context.Pipe()\n    temp_rr = multiprocessing_context.Pipe()\n    process_array_.append(\n        multiprocessing_context.Process(\n            target=oe_process,\n            args=(\n                0,\n                arr[0],\n                None,\n                temp_rs,\n                None,\n                temp_rr,\n                result_pipe[0],\n                multiprocessing_context,\n            ),\n        )\n    )\n    temp_lr = temp_rs\n    temp_ls = temp_rr\n\n    for i in range(1, len(arr) - 1):\n        temp_rs = multiprocessing_context.Pipe()\n        temp_rr = multiprocessing_context.Pipe()\n        process_array_.append(\n            multiprocessing_context.Process(\n                target=oe_process,\n                args=(\n                    i,\n                    arr[i],\n                    temp_ls,\n                    temp_rs,\n                    temp_lr,\n                    temp_rr,\n                    result_pipe[i],\n                    multiprocessing_context,\n                ),\n            )\n        )\n        temp_lr = temp_rs\n        temp_ls = temp_rr\n\n    process_array_.append(\n        multiprocessing_context.Process(\n            target=oe_process,\n            args=(\n                len(arr) - 1,\n                arr[len(arr) - 1],\n                temp_ls,\n                None,\n                temp_lr,\n                None,\n                result_pipe[len(arr) - 1],\n                multiprocessing_context,\n            ),\n        )\n    )\n\n    # start the processes\n    for p in process_array_:\n        p.start()\n\n    # wait for the processes to end and write their values to the list\n    for p in range(len(result_pipe)):\n        arr[p] = result_pipe[p][0].recv()\n        process_array_[p].join()\n    return arr\n\n\n# creates a reverse sorted list and sorts it\ndef main():\n    arr = list(range(10, 0, -1))\n    print(\"Initial List\")\n    print(*arr)\n    arr = odd_even_transposition(arr)\n    print(\"Sorted List\\n\")\n    print(*arr)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "sorts/odd_even_transposition_single_threaded.py",
    "content": "\"\"\"\nSource: https://en.wikipedia.org/wiki/Odd%E2%80%93even_sort\n\nThis is a non-parallelized implementation of odd-even transposition sort.\n\nNormally the swaps in each set happen simultaneously, without that the algorithm\nis no better than bubble sort.\n\"\"\"\n\n\ndef odd_even_transposition(arr: list) -> list:\n    \"\"\"\n    >>> odd_even_transposition([5, 4, 3, 2, 1])\n    [1, 2, 3, 4, 5]\n\n    >>> odd_even_transposition([13, 11, 18, 0, -1])\n    [-1, 0, 11, 13, 18]\n\n    >>> odd_even_transposition([-.1, 1.1, .1, -2.9])\n    [-2.9, -0.1, 0.1, 1.1]\n    \"\"\"\n    arr_size = len(arr)\n    for _ in range(arr_size):\n        for i in range(_ % 2, arr_size - 1, 2):\n            if arr[i + 1] < arr[i]:\n                arr[i], arr[i + 1] = arr[i + 1], arr[i]\n\n    return arr\n\n\nif __name__ == \"__main__\":\n    arr = list(range(10, 0, -1))\n    print(f\"Original: {arr}. Sorted: {odd_even_transposition(arr)}\")\n"
  },
  {
    "path": "sorts/pancake_sort.py",
    "content": "\"\"\"\nThis is a pure Python implementation of the pancake sort algorithm\nFor doctests run following command:\npython3 -m doctest -v pancake_sort.py\nor\npython -m doctest -v pancake_sort.py\nFor manual testing run:\npython pancake_sort.py\n\"\"\"\n\n\ndef pancake_sort(arr):\n    \"\"\"Sort Array with Pancake Sort.\n    :param arr: Collection containing comparable items\n    :return: Collection ordered in ascending order of items\n    Examples:\n    >>> pancake_sort([0, 5, 3, 2, 2])\n    [0, 2, 2, 3, 5]\n    >>> pancake_sort([])\n    []\n    >>> pancake_sort([-2, -5, -45])\n    [-45, -5, -2]\n    \"\"\"\n    cur = len(arr)\n    while cur > 1:\n        # Find the maximum number in arr\n        mi = arr.index(max(arr[0:cur]))\n        # Reverse from 0 to mi\n        arr = arr[mi::-1] + arr[mi + 1 : len(arr)]\n        # Reverse whole list\n        arr = arr[cur - 1 :: -1] + arr[cur : len(arr)]\n        cur -= 1\n    return arr\n\n\nif __name__ == \"__main__\":\n    user_input = input(\"Enter numbers separated by a comma:\\n\").strip()\n    unsorted = [int(item) for item in user_input.split(\",\")]\n    print(pancake_sort(unsorted))\n"
  },
  {
    "path": "sorts/patience_sort.py",
    "content": "from __future__ import annotations\n\nfrom bisect import bisect_left\nfrom functools import total_ordering\nfrom heapq import merge\n\n\"\"\"\nA pure Python implementation of the patience sort algorithm\n\nFor more information: https://en.wikipedia.org/wiki/Patience_sorting\n\nThis algorithm is based on the card game patience\n\nFor doctests run following command:\npython3 -m doctest -v patience_sort.py\n\nFor manual testing run:\npython3 patience_sort.py\n\"\"\"\n\n\n@total_ordering\nclass Stack(list):\n    def __lt__(self, other):\n        return self[-1] < other[-1]\n\n    def __eq__(self, other):\n        return self[-1] == other[-1]\n\n\ndef patience_sort(collection: list) -> list:\n    \"\"\"A pure implementation of patience sort algorithm in Python\n\n    :param collection: some mutable ordered collection with heterogeneous\n    comparable items inside\n    :return: the same collection ordered by ascending\n\n    Examples:\n    >>> patience_sort([1, 9, 5, 21, 17, 6])\n    [1, 5, 6, 9, 17, 21]\n\n    >>> patience_sort([])\n    []\n\n    >>> patience_sort([-3, -17, -48])\n    [-48, -17, -3]\n    \"\"\"\n    stacks: list[Stack] = []\n    # sort into stacks\n    for element in collection:\n        new_stacks = Stack([element])\n        i = bisect_left(stacks, new_stacks)\n        if i != len(stacks):\n            stacks[i].append(element)\n        else:\n            stacks.append(new_stacks)\n\n    # use a heap-based merge to merge stack efficiently\n    collection[:] = merge(*(reversed(stack) for stack in stacks))\n    return collection\n\n\nif __name__ == \"__main__\":\n    user_input = input(\"Enter numbers separated by a comma:\\n\").strip()\n    unsorted = [int(item) for item in user_input.split(\",\")]\n    print(patience_sort(unsorted))\n"
  },
  {
    "path": "sorts/pigeon_sort.py",
    "content": "\"\"\"\nThis is an implementation of Pigeon Hole Sort.\nFor doctests run following command:\n\npython3 -m doctest -v pigeon_sort.py\nor\npython -m doctest -v pigeon_sort.py\n\nFor manual testing run:\npython pigeon_sort.py\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef pigeon_sort(array: list[int]) -> list[int]:\n    \"\"\"\n    Implementation of pigeon hole sort algorithm\n    :param array: Collection of comparable items\n    :return: Collection sorted in ascending order\n    >>> pigeon_sort([0, 5, 3, 2, 2])\n    [0, 2, 2, 3, 5]\n    >>> pigeon_sort([])\n    []\n    >>> pigeon_sort([-2, -5, -45])\n    [-45, -5, -2]\n    \"\"\"\n    if len(array) == 0:\n        return array\n\n    _min, _max = min(array), max(array)\n\n    # Compute the variables\n    holes_range = _max - _min + 1\n    holes, holes_repeat = [0] * holes_range, [0] * holes_range\n\n    # Make the sorting.\n    for i in array:\n        index = i - _min\n        holes[index] = i\n        holes_repeat[index] += 1\n\n    # Makes the array back by replacing the numbers.\n    index = 0\n    for i in range(holes_range):\n        while holes_repeat[i] > 0:\n            array[index] = holes[i]\n            index += 1\n            holes_repeat[i] -= 1\n\n    # Returns the sorted array.\n    return array\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    user_input = input(\"Enter numbers separated by comma:\\n\")\n    unsorted = [int(x) for x in user_input.split(\",\")]\n    print(pigeon_sort(unsorted))\n"
  },
  {
    "path": "sorts/pigeonhole_sort.py",
    "content": "# Python program to implement Pigeonhole Sorting in python\n\n# Algorithm for the pigeonhole sorting\n\n\ndef pigeonhole_sort(a):\n    \"\"\"\n    >>> a = [8, 3, 2, 7, 4, 6, 8]\n    >>> b = sorted(a)  # a nondestructive sort\n    >>> pigeonhole_sort(a)  # a destructive sort\n    >>> a == b\n    True\n    \"\"\"\n    # size of range of values in the list (ie, number of pigeonholes we need)\n\n    min_val = min(a)  # min() finds the minimum value\n    max_val = max(a)  # max() finds the maximum value\n\n    size = max_val - min_val + 1  # size is difference of max and min values plus one\n\n    # list of pigeonholes of size equal to the variable size\n    holes = [0] * size\n\n    # Populate the pigeonholes.\n    for x in a:\n        assert isinstance(x, int), \"integers only please\"\n        holes[x - min_val] += 1\n\n    # Putting the elements back into the array in an order.\n    i = 0\n    for count in range(size):\n        while holes[count] > 0:\n            holes[count] -= 1\n            a[i] = count + min_val\n            i += 1\n\n\ndef main():\n    a = [8, 3, 2, 7, 4, 6, 8]\n    pigeonhole_sort(a)\n    print(\"Sorted order is:\", \" \".join(a))\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "sorts/quick_sort.py",
    "content": "\"\"\"\nA pure Python implementation of the quick sort algorithm\n\nFor doctests run following command:\npython3 -m doctest -v quick_sort.py\n\nFor manual testing run:\npython3 quick_sort.py\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom random import randrange\n\n\ndef quick_sort(collection: list) -> list:\n    \"\"\"A pure Python implementation of quicksort algorithm.\n\n    :param collection: a mutable collection of comparable items\n    :return: the same collection ordered in ascending order\n\n    Examples:\n    >>> quick_sort([0, 5, 3, 2, 2])\n    [0, 2, 2, 3, 5]\n    >>> quick_sort([])\n    []\n    >>> quick_sort([-2, 5, 0, -45])\n    [-45, -2, 0, 5]\n    \"\"\"\n    # Base case: if the collection has 0 or 1 elements, it is already sorted\n    if len(collection) < 2:\n        return collection\n\n    # Randomly select a pivot index and remove the pivot element from the collection\n    pivot_index = randrange(len(collection))\n    pivot = collection.pop(pivot_index)\n\n    # Partition the remaining elements into two groups: lesser or equal, and greater\n    lesser = [item for item in collection if item <= pivot]\n    greater = [item for item in collection if item > pivot]\n\n    # Recursively sort the lesser and greater groups, and combine with the pivot\n    return [*quick_sort(lesser), pivot, *quick_sort(greater)]\n\n\nif __name__ == \"__main__\":\n    # Get user input and convert it into a list of integers\n    user_input = input(\"Enter numbers separated by a comma:\\n\").strip()\n    unsorted = [int(item) for item in user_input.split(\",\")]\n\n    # Print the result of sorting the user-provided list\n    print(quick_sort(unsorted))\n"
  },
  {
    "path": "sorts/quick_sort_3_partition.py",
    "content": "def quick_sort_3partition(sorting: list, left: int, right: int) -> None:\n    \"\"\" \"\n    Python implementation of quick sort algorithm with 3-way partition.\n    The idea of 3-way quick sort is based on \"Dutch National Flag algorithm\".\n\n    :param sorting: sort list\n    :param left: left endpoint of sorting\n    :param right: right endpoint of sorting\n    :return: None\n\n    Examples:\n    >>> array1 = [5, -1, -1, 5, 5, 24, 0]\n    >>> quick_sort_3partition(array1, 0, 6)\n    >>> array1\n    [-1, -1, 0, 5, 5, 5, 24]\n    >>> array2 = [9, 0, 2, 6]\n    >>> quick_sort_3partition(array2, 0, 3)\n    >>> array2\n    [0, 2, 6, 9]\n    >>> array3 = []\n    >>> quick_sort_3partition(array3, 0, 0)\n    >>> array3\n    []\n    \"\"\"\n    if right <= left:\n        return\n    a = i = left\n    b = right\n    pivot = sorting[left]\n    while i <= b:\n        if sorting[i] < pivot:\n            sorting[a], sorting[i] = sorting[i], sorting[a]\n            a += 1\n            i += 1\n        elif sorting[i] > pivot:\n            sorting[b], sorting[i] = sorting[i], sorting[b]\n            b -= 1\n        else:\n            i += 1\n    quick_sort_3partition(sorting, left, a - 1)\n    quick_sort_3partition(sorting, b + 1, right)\n\n\ndef quick_sort_lomuto_partition(sorting: list, left: int, right: int) -> None:\n    \"\"\"\n    A pure Python implementation of quick sort algorithm(in-place)\n    with Lomuto partition scheme:\n    https://en.wikipedia.org/wiki/Quicksort#Lomuto_partition_scheme\n\n    :param sorting: sort list\n    :param left: left endpoint of sorting\n    :param right: right endpoint of sorting\n    :return: None\n\n    Examples:\n    >>> nums1 = [0, 5, 3, 1, 2]\n    >>> quick_sort_lomuto_partition(nums1, 0, 4)\n    >>> nums1\n    [0, 1, 2, 3, 5]\n    >>> nums2 = []\n    >>> quick_sort_lomuto_partition(nums2, 0, 0)\n    >>> nums2\n    []\n    >>> nums3 = [-2, 5, 0, -4]\n    >>> quick_sort_lomuto_partition(nums3, 0, 3)\n    >>> nums3\n    [-4, -2, 0, 5]\n    \"\"\"\n    if left < right:\n        pivot_index = lomuto_partition(sorting, left, right)\n        quick_sort_lomuto_partition(sorting, left, pivot_index - 1)\n        quick_sort_lomuto_partition(sorting, pivot_index + 1, right)\n\n\ndef lomuto_partition(sorting: list, left: int, right: int) -> int:\n    \"\"\"\n    Example:\n    >>> lomuto_partition([1,5,7,6], 0, 3)\n    2\n    \"\"\"\n    pivot = sorting[right]\n    store_index = left\n    for i in range(left, right):\n        if sorting[i] < pivot:\n            sorting[store_index], sorting[i] = sorting[i], sorting[store_index]\n            store_index += 1\n    sorting[right], sorting[store_index] = sorting[store_index], sorting[right]\n    return store_index\n\n\ndef three_way_radix_quicksort(sorting: list) -> list:\n    \"\"\"\n    Three-way radix quicksort:\n    https://en.wikipedia.org/wiki/Quicksort#Three-way_radix_quicksort\n    First divide the list into three parts.\n    Then recursively sort the \"less than\" and \"greater than\" partitions.\n\n    >>> three_way_radix_quicksort([])\n    []\n    >>> three_way_radix_quicksort([1])\n    [1]\n    >>> three_way_radix_quicksort([-5, -2, 1, -2, 0, 1])\n    [-5, -2, -2, 0, 1, 1]\n    >>> three_way_radix_quicksort([1, 2, 5, 1, 2, 0, 0, 5, 2, -1])\n    [-1, 0, 0, 1, 1, 2, 2, 2, 5, 5]\n    \"\"\"\n    if len(sorting) <= 1:\n        return sorting\n    return (\n        three_way_radix_quicksort([i for i in sorting if i < sorting[0]])\n        + [i for i in sorting if i == sorting[0]]\n        + three_way_radix_quicksort([i for i in sorting if i > sorting[0]])\n    )\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod(verbose=True)\n\n    user_input = input(\"Enter numbers separated by a comma:\\n\").strip()\n    unsorted = [int(item) for item in user_input.split(\",\")]\n    quick_sort_3partition(unsorted, 0, len(unsorted) - 1)\n    print(unsorted)\n"
  },
  {
    "path": "sorts/radix_sort.py",
    "content": "\"\"\"\nThis is a pure Python implementation of the radix sort algorithm\n\nSource: https://en.wikipedia.org/wiki/Radix_sort\n\"\"\"\n\nfrom __future__ import annotations\n\nRADIX = 10\n\n\ndef radix_sort(list_of_ints: list[int]) -> list[int]:\n    \"\"\"\n    Examples:\n    >>> radix_sort([0, 5, 3, 2, 2])\n    [0, 2, 2, 3, 5]\n\n    >>> radix_sort(list(range(15))) == sorted(range(15))\n    True\n    >>> radix_sort(list(range(14,-1,-1))) == sorted(range(15))\n    True\n    >>> radix_sort([1,100,10,1000]) == sorted([1,100,10,1000])\n    True\n    \"\"\"\n    placement = 1\n    max_digit = max(list_of_ints)\n    while placement <= max_digit:\n        # declare and initialize empty buckets\n        buckets: list[list] = [[] for _ in range(RADIX)]\n        # split list_of_ints between the buckets\n        for i in list_of_ints:\n            tmp = int((i / placement) % RADIX)\n            buckets[tmp].append(i)\n        # put each buckets' contents into list_of_ints\n        a = 0\n        for b in range(RADIX):\n            for i in buckets[b]:\n                list_of_ints[a] = i\n                a += 1\n        # move to next\n        placement *= RADIX\n    return list_of_ints\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "sorts/recursive_insertion_sort.py",
    "content": "\"\"\"\nA recursive implementation of the insertion sort algorithm\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef rec_insertion_sort(collection: list, n: int):\n    \"\"\"\n    Given a collection of numbers and its length, sorts the collections\n    in ascending order\n\n    :param collection: A mutable collection of comparable elements\n    :param n: The length of collections\n\n    >>> col = [1, 2, 1]\n    >>> rec_insertion_sort(col, len(col))\n    >>> col\n    [1, 1, 2]\n\n    >>> col = [2, 1, 0, -1, -2]\n    >>> rec_insertion_sort(col, len(col))\n    >>> col\n    [-2, -1, 0, 1, 2]\n\n    >>> col = [1]\n    >>> rec_insertion_sort(col, len(col))\n    >>> col\n    [1]\n    \"\"\"\n    # Checks if the entire collection has been sorted\n    if len(collection) <= 1 or n <= 1:\n        return\n\n    insert_next(collection, n - 1)\n    rec_insertion_sort(collection, n - 1)\n\n\ndef insert_next(collection: list, index: int):\n    \"\"\"\n    Inserts the '(index-1)th' element into place\n\n    >>> col = [3, 2, 4, 2]\n    >>> insert_next(col, 1)\n    >>> col\n    [2, 3, 4, 2]\n\n    >>> col = [3, 2, 3]\n    >>> insert_next(col, 2)\n    >>> col\n    [3, 2, 3]\n\n    >>> col = []\n    >>> insert_next(col, 1)\n    >>> col\n    []\n    \"\"\"\n    # Checks order between adjacent elements\n    if index >= len(collection) or collection[index - 1] <= collection[index]:\n        return\n\n    # Swaps adjacent elements since they are not in ascending order\n    collection[index - 1], collection[index] = (\n        collection[index],\n        collection[index - 1],\n    )\n\n    insert_next(collection, index + 1)\n\n\nif __name__ == \"__main__\":\n    numbers = input(\"Enter integers separated by spaces: \")\n    number_list: list[int] = [int(num) for num in numbers.split()]\n    rec_insertion_sort(number_list, len(number_list))\n    print(number_list)\n"
  },
  {
    "path": "sorts/recursive_mergesort_array.py",
    "content": "\"\"\"A merge sort which accepts an array as input and recursively\nsplits an array in half and sorts and combines them.\n\"\"\"\n\n\"\"\"https://en.wikipedia.org/wiki/Merge_sort \"\"\"\n\n\ndef merge(arr: list[int]) -> list[int]:\n    \"\"\"Return a sorted array.\n    >>> merge([10,9,8,7,6,5,4,3,2,1])\n    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n    >>> merge([1,2,3,4,5,6,7,8,9,10])\n    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\n    >>> merge([10,22,1,2,3,9,15,23])\n    [1, 2, 3, 9, 10, 15, 22, 23]\n    >>> merge([100])\n    [100]\n    >>> merge([])\n    []\n    \"\"\"\n    if len(arr) > 1:\n        middle_length = len(arr) // 2  # Finds the middle of the array\n        left_array = arr[\n            :middle_length\n        ]  # Creates an array of the elements in the first half.\n        right_array = arr[\n            middle_length:\n        ]  # Creates an array of the elements in the second half.\n        left_size = len(left_array)\n        right_size = len(right_array)\n        merge(left_array)  # Starts sorting the left.\n        merge(right_array)  # Starts sorting the right\n        left_index = 0  # Left Counter\n        right_index = 0  # Right Counter\n        index = 0  # Position Counter\n        while (\n            left_index < left_size and right_index < right_size\n        ):  # Runs until the lowers size of the left and right are sorted.\n            if left_array[left_index] < right_array[right_index]:\n                arr[index] = left_array[left_index]\n                left_index += 1\n            else:\n                arr[index] = right_array[right_index]\n                right_index += 1\n            index += 1\n        while (\n            left_index < left_size\n        ):  # Adds the left over elements in the left half of the array\n            arr[index] = left_array[left_index]\n            left_index += 1\n            index += 1\n        while (\n            right_index < right_size\n        ):  # Adds the left over elements in the right half of the array\n            arr[index] = right_array[right_index]\n            right_index += 1\n            index += 1\n    return arr\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "sorts/recursive_quick_sort.py",
    "content": "def quick_sort(data: list) -> list:\n    \"\"\"\n    >>> for data in ([2, 1, 0], [2.2, 1.1, 0], \"quick_sort\"):\n    ...     quick_sort(data) == sorted(data)\n    True\n    True\n    True\n    \"\"\"\n    if len(data) <= 1:\n        return data\n    else:\n        return [\n            *quick_sort([e for e in data[1:] if e <= data[0]]),\n            data[0],\n            *quick_sort([e for e in data[1:] if e > data[0]]),\n        ]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "sorts/selection_sort.py",
    "content": "def selection_sort(collection: list[int]) -> list[int]:\n    \"\"\"\n    Sorts a list in ascending order using the selection sort algorithm.\n\n    :param collection: A list of integers to be sorted.\n    :return: The sorted list.\n\n    Examples:\n    >>> selection_sort([0, 5, 3, 2, 2])\n    [0, 2, 2, 3, 5]\n\n    >>> selection_sort([])\n    []\n\n    >>> selection_sort([-2, -5, -45])\n    [-45, -5, -2]\n    \"\"\"\n\n    length = len(collection)\n    for i in range(length - 1):\n        min_index = i\n        for k in range(i + 1, length):\n            if collection[k] < collection[min_index]:\n                min_index = k\n        if min_index != i:\n            collection[i], collection[min_index] = collection[min_index], collection[i]\n    return collection\n\n\nif __name__ == \"__main__\":\n    user_input = input(\"Enter numbers separated by a comma:\\n\").strip()\n    unsorted = [int(item) for item in user_input.split(\",\")]\n    sorted_list = selection_sort(unsorted)\n    print(\"Sorted List:\", sorted_list)\n"
  },
  {
    "path": "sorts/shell_sort.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/Shellsort#Pseudocode\n\"\"\"\n\n\ndef shell_sort(collection: list[int]) -> list[int]:\n    \"\"\"Pure implementation of shell sort algorithm in Python\n    :param collection:  Some mutable ordered collection with heterogeneous\n    comparable items inside\n    :return:  the same collection ordered by ascending\n\n    >>> shell_sort([0, 5, 3, 2, 2])\n    [0, 2, 2, 3, 5]\n    >>> shell_sort([])\n    []\n    >>> shell_sort([-2, -5, -45])\n    [-45, -5, -2]\n    \"\"\"\n    # Marcin Ciura's gap sequence\n\n    gaps = [701, 301, 132, 57, 23, 10, 4, 1]\n    for gap in gaps:\n        for i in range(gap, len(collection)):\n            insert_value = collection[i]\n            j = i\n            while j >= gap and collection[j - gap] > insert_value:\n                collection[j] = collection[j - gap]\n                j -= gap\n            if j != i:\n                collection[j] = insert_value\n    return collection\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    user_input = input(\"Enter numbers separated by a comma:\\n\").strip()\n    unsorted = [int(item) for item in user_input.split(\",\")]\n    print(shell_sort(unsorted))\n"
  },
  {
    "path": "sorts/shrink_shell_sort.py",
    "content": "\"\"\"\nThis function implements the shell sort algorithm\nwhich is slightly faster than its pure implementation.\n\nThis shell sort is implemented using a gap, which\nshrinks by a certain factor each iteration. In this\nimplementation, the gap is initially set to the\nlength of the collection. The gap is then reduced by\na certain factor (1.3) each iteration.\n\nFor each iteration, the algorithm compares elements\nthat are a certain number of positions apart\n(determined by the gap). If the element at the higher\nposition is greater than the element at the lower\nposition, the two elements are swapped. The process\nis repeated until the gap is equal to 1.\n\nThe reason this is more efficient is that it reduces\nthe number of comparisons that need to be made. By\nusing a smaller gap, the list is sorted more quickly.\n\"\"\"\n\n\ndef shell_sort(collection: list) -> list:\n    \"\"\"Implementation of shell sort algorithm in Python\n    :param collection:  Some mutable ordered collection with heterogeneous\n    comparable items inside\n    :return:  the same collection ordered by ascending\n\n    >>> shell_sort([3, 2, 1])\n    [1, 2, 3]\n    >>> shell_sort([])\n    []\n    >>> shell_sort([1])\n    [1]\n    \"\"\"\n\n    # Choose an initial gap value\n    gap = len(collection)\n\n    # Set the gap value to be decreased by a factor of 1.3\n    # after each iteration\n    shrink = 1.3\n\n    # Continue sorting until the gap is 1\n    while gap > 1:\n        # Decrease the gap value\n        gap = int(gap / shrink)\n\n        # Sort the elements using insertion sort\n        for i in range(gap, len(collection)):\n            temp = collection[i]\n            j = i\n            while j >= gap and collection[j - gap] > temp:\n                collection[j] = collection[j - gap]\n                j -= gap\n            collection[j] = temp\n\n    return collection\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "sorts/slowsort.py",
    "content": "\"\"\"\nSlowsort is a sorting algorithm. It is of humorous nature and not useful.\nIt's based on the principle of multiply and surrender,\na tongue-in-cheek joke of divide and conquer.\nIt was published in 1986 by Andrei Broder and Jorge Stolfi\nin their paper Pessimal Algorithms and Simplexity Analysis\n(a parody of optimal algorithms and complexity analysis).\n\nSource: https://en.wikipedia.org/wiki/Slowsort\n\"\"\"\n\nfrom __future__ import annotations\n\n\ndef slowsort(sequence: list, start: int | None = None, end: int | None = None) -> None:\n    \"\"\"\n    Sorts sequence[start..end] (both inclusive) in-place.\n    start defaults to 0 if not given.\n    end defaults to len(sequence) - 1 if not given.\n    It returns None.\n    >>> seq = [1, 6, 2, 5, 3, 4, 4, 5]; slowsort(seq); seq\n    [1, 2, 3, 4, 4, 5, 5, 6]\n    >>> seq = []; slowsort(seq); seq\n    []\n    >>> seq = [2]; slowsort(seq); seq\n    [2]\n    >>> seq = [1, 2, 3, 4]; slowsort(seq); seq\n    [1, 2, 3, 4]\n    >>> seq = [4, 3, 2, 1]; slowsort(seq); seq\n    [1, 2, 3, 4]\n    >>> seq = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(seq, 2, 7); seq\n    [9, 8, 2, 3, 4, 5, 6, 7, 1, 0]\n    >>> seq = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(seq, end = 4); seq\n    [5, 6, 7, 8, 9, 4, 3, 2, 1, 0]\n    >>> seq = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; slowsort(seq, start = 5); seq\n    [9, 8, 7, 6, 5, 0, 1, 2, 3, 4]\n    \"\"\"\n    if start is None:\n        start = 0\n\n    if end is None:\n        end = len(sequence) - 1\n\n    if start >= end:\n        return\n\n    mid = (start + end) // 2\n\n    slowsort(sequence, start, mid)\n    slowsort(sequence, mid + 1, end)\n\n    if sequence[end] < sequence[mid]:\n        sequence[end], sequence[mid] = sequence[mid], sequence[end]\n\n    slowsort(sequence, start, end - 1)\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "sorts/stalin_sort.py",
    "content": "\"\"\"\nStalin Sort algorithm: Removes elements that are out of order.\nElements that are not greater than or equal to the previous element are discarded.\nReference: https://medium.com/@kaweendra/the-ultimate-sorting-algorithm-6513d6968420\n\"\"\"\n\n\ndef stalin_sort(sequence: list[int]) -> list[int]:\n    \"\"\"\n    Sorts a list using the Stalin sort algorithm.\n\n    >>> stalin_sort([4, 3, 5, 2, 1, 7])\n    [4, 5, 7]\n\n    >>> stalin_sort([1, 2, 3, 4])\n    [1, 2, 3, 4]\n\n    >>> stalin_sort([4, 5, 5, 2, 3])\n    [4, 5, 5]\n\n    >>> stalin_sort([6, 11, 12, 4, 1, 5])\n    [6, 11, 12]\n\n    >>> stalin_sort([5, 0, 4, 3])\n    [5]\n\n    >>> stalin_sort([5, 4, 3, 2, 1])\n    [5]\n\n    >>> stalin_sort([1, 2, 3, 4, 5])\n    [1, 2, 3, 4, 5]\n\n    >>> stalin_sort([1, 2, 8, 7, 6])\n    [1, 2, 8]\n    \"\"\"\n    result = [sequence[0]]\n    for element in sequence[1:]:\n        if element >= result[-1]:\n            result.append(element)\n\n    return result\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "sorts/stooge_sort.py",
    "content": "def stooge_sort(arr: list[int]) -> list[int]:\r\n    \"\"\"\r\n    Examples:\r\n    >>> stooge_sort([18.1, 0, -7.1, -1, 2, 2])\r\n    [-7.1, -1, 0, 2, 2, 18.1]\r\n\r\n    >>> stooge_sort([])\r\n    []\r\n    \"\"\"\r\n    stooge(arr, 0, len(arr) - 1)\r\n    return arr\r\n\r\n\r\ndef stooge(arr: list[int], i: int, h: int) -> None:\r\n    if i >= h:\r\n        return\r\n\r\n    # If first element is smaller than the last then swap them\r\n    if arr[i] > arr[h]:\r\n        arr[i], arr[h] = arr[h], arr[i]\r\n\r\n    # If there are more than 2 elements in the array\r\n    if h - i + 1 > 2:\r\n        t = (int)((h - i + 1) / 3)\r\n\r\n        # Recursively sort first 2/3 elements\r\n        stooge(arr, i, (h - t))\r\n\r\n        # Recursively sort last 2/3 elements\r\n        stooge(arr, i + t, (h))\r\n\r\n        # Recursively sort first 2/3 elements\r\n        stooge(arr, i, (h - t))\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    user_input = input(\"Enter numbers separated by a comma:\\n\").strip()\r\n    unsorted = [int(item) for item in user_input.split(\",\")]\r\n    print(stooge_sort(unsorted))\r\n"
  },
  {
    "path": "sorts/strand_sort.py",
    "content": "import operator\n\n\ndef strand_sort(arr: list, reverse: bool = False, solution: list | None = None) -> list:\n    \"\"\"\n    Strand sort implementation\n    source: https://en.wikipedia.org/wiki/Strand_sort\n\n    :param arr: Unordered input list\n    :param reverse: Descent ordering flag\n    :param solution: Ordered items container\n\n    Examples:\n    >>> strand_sort([4, 2, 5, 3, 0, 1])\n    [0, 1, 2, 3, 4, 5]\n\n    >>> strand_sort([4, 2, 5, 3, 0, 1], reverse=True)\n    [5, 4, 3, 2, 1, 0]\n    \"\"\"\n    _operator = operator.lt if reverse else operator.gt\n    solution = solution or []\n\n    if not arr:\n        return solution\n\n    sublist = [arr.pop(0)]\n    for i, item in enumerate(arr):\n        if _operator(item, sublist[-1]):\n            sublist.append(item)\n            arr.pop(i)\n\n    #  merging sublist into solution list\n    if not solution:\n        solution.extend(sublist)\n    else:\n        while sublist:\n            item = sublist.pop(0)\n            for i, xx in enumerate(solution):\n                if not _operator(item, xx):\n                    solution.insert(i, item)\n                    break\n            else:\n                solution.append(item)\n\n    strand_sort(arr, reverse, solution)\n    return solution\n\n\nif __name__ == \"__main__\":\n    assert strand_sort([4, 3, 5, 1, 2]) == [1, 2, 3, 4, 5]\n    assert strand_sort([4, 3, 5, 1, 2], reverse=True) == [5, 4, 3, 2, 1]\n"
  },
  {
    "path": "sorts/tim_sort.py",
    "content": "def binary_search(lst, item, start, end):\n    if start == end:\n        return start if lst[start] > item else start + 1\n    if start > end:\n        return start\n\n    mid = (start + end) // 2\n    if lst[mid] < item:\n        return binary_search(lst, item, mid + 1, end)\n    elif lst[mid] > item:\n        return binary_search(lst, item, start, mid - 1)\n    else:\n        return mid\n\n\ndef insertion_sort(lst):\n    length = len(lst)\n\n    for index in range(1, length):\n        value = lst[index]\n        pos = binary_search(lst, value, 0, index - 1)\n        lst = [*lst[:pos], value, *lst[pos:index], *lst[index + 1 :]]\n\n    return lst\n\n\ndef merge(left, right):\n    if not left:\n        return right\n\n    if not right:\n        return left\n\n    if left[0] < right[0]:\n        return [left[0], *merge(left[1:], right)]\n\n    return [right[0], *merge(left, right[1:])]\n\n\ndef tim_sort(lst):\n    \"\"\"\n    >>> tim_sort(\"Python\")\n    ['P', 'h', 'n', 'o', 't', 'y']\n    >>> tim_sort((1.1, 1, 0, -1, -1.1))\n    [-1.1, -1, 0, 1, 1.1]\n    >>> tim_sort(list(reversed(list(range(7)))))\n    [0, 1, 2, 3, 4, 5, 6]\n    >>> tim_sort([3, 2, 1]) == insertion_sort([3, 2, 1])\n    True\n    >>> tim_sort([3, 2, 1]) == sorted([3, 2, 1])\n    True\n    \"\"\"\n    length = len(lst)\n    runs, sorted_runs = [], []\n    new_run = [lst[0]]\n    sorted_array = []\n    i = 1\n    while i < length:\n        if lst[i] < lst[i - 1]:\n            runs.append(new_run)\n            new_run = [lst[i]]\n        else:\n            new_run.append(lst[i])\n        i += 1\n    runs.append(new_run)\n\n    for run in runs:\n        sorted_runs.append(insertion_sort(run))\n    for run in sorted_runs:\n        sorted_array = merge(sorted_array, run)\n\n    return sorted_array\n\n\ndef main():\n    lst = [5, 9, 10, 3, -4, 5, 178, 92, 46, -18, 0, 7]\n    sorted_lst = tim_sort(lst)\n    print(sorted_lst)\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "sorts/topological_sort.py",
    "content": "\"\"\"Topological Sort.\"\"\"\n\n#     a\n#    / \\\n#   b  c\n#  / \\\n# d  e\nedges: dict[str, list[str]] = {\n    \"a\": [\"c\", \"b\"],\n    \"b\": [\"d\", \"e\"],\n    \"c\": [],\n    \"d\": [],\n    \"e\": [],\n}\nvertices: list[str] = [\"a\", \"b\", \"c\", \"d\", \"e\"]\n\n\ndef topological_sort(start: str, visited: list[str], sort: list[str]) -> list[str]:\n    \"\"\"Perform topological sort on a directed acyclic graph.\"\"\"\n    current = start\n    # add current to visited\n    visited.append(current)\n    neighbors = edges[current]\n    for neighbor in neighbors:\n        # if neighbor not in visited, visit\n        if neighbor not in visited:\n            sort = topological_sort(neighbor, visited, sort)\n    # if all neighbors visited add current to sort\n    sort.append(current)\n    # if all vertices haven't been visited select a new one to visit\n    if len(visited) != len(vertices):\n        for vertice in vertices:\n            if vertice not in visited:\n                sort = topological_sort(vertice, visited, sort)\n    # return sort\n    return sort\n\n\nif __name__ == \"__main__\":\n    sort = topological_sort(\"a\", [], [])\n    print(sort)\n"
  },
  {
    "path": "sorts/tree_sort.py",
    "content": "\"\"\"\nTree_sort algorithm.\n\nBuild a Binary Search Tree and then iterate thru it to get a sorted list.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom collections.abc import Iterator\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass Node:\n    val: int\n    left: Node | None = None\n    right: Node | None = None\n\n    def __iter__(self) -> Iterator[int]:\n        if self.left:\n            yield from self.left\n        yield self.val\n        if self.right:\n            yield from self.right\n\n    def __len__(self) -> int:\n        return sum(1 for _ in self)\n\n    def insert(self, val: int) -> None:\n        if val < self.val:\n            if self.left is None:\n                self.left = Node(val)\n            else:\n                self.left.insert(val)\n        elif val > self.val:\n            if self.right is None:\n                self.right = Node(val)\n            else:\n                self.right.insert(val)\n\n\ndef tree_sort(arr: list[int]) -> tuple[int, ...]:\n    \"\"\"\n    >>> tree_sort([])\n    ()\n    >>> tree_sort((1,))\n    (1,)\n    >>> tree_sort((1, 2))\n    (1, 2)\n    >>> tree_sort([5, 2, 7])\n    (2, 5, 7)\n    >>> tree_sort((5, -4, 9, 2, 7))\n    (-4, 2, 5, 7, 9)\n    >>> tree_sort([5, 6, 1, -1, 4, 37, 2, 7])\n    (-1, 1, 2, 4, 5, 6, 7, 37)\n\n    # >>> tree_sort(range(10, -10, -1)) == tuple(sorted(range(10, -10, -1)))\n    # True\n    \"\"\"\n    if len(arr) == 0:\n        return tuple(arr)\n    root = Node(arr[0])\n    for item in arr[1:]:\n        root.insert(item)\n    return tuple(root)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    print(f\"{tree_sort([5, 6, 1, -1, 4, 37, -3, 7]) = }\")\n"
  },
  {
    "path": "sorts/unknown_sort.py",
    "content": "\"\"\"\nPython implementation of a sort algorithm.\nBest Case Scenario : O(n)\nWorst Case Scenario : O(n^2) because native Python functions:min, max and remove are\nalready O(n)\n\"\"\"\n\n\ndef merge_sort(collection):\n    \"\"\"Pure implementation of the fastest merge sort algorithm in Python\n\n    :param collection: some mutable ordered collection with heterogeneous\n    comparable items inside\n    :return: a collection ordered by ascending\n\n    Examples:\n    >>> merge_sort([0, 5, 3, 2, 2])\n    [0, 2, 2, 3, 5]\n\n    >>> merge_sort([])\n    []\n\n    >>> merge_sort([-2, -5, -45])\n    [-45, -5, -2]\n    \"\"\"\n    start, end = [], []\n    while len(collection) > 1:\n        min_one, max_one = min(collection), max(collection)\n        start.append(min_one)\n        end.append(max_one)\n        collection.remove(min_one)\n        collection.remove(max_one)\n    end.reverse()\n    return start + collection + end\n\n\nif __name__ == \"__main__\":\n    user_input = input(\"Enter numbers separated by a comma:\\n\").strip()\n    unsorted = [int(item) for item in user_input.split(\",\")]\n    print(*merge_sort(unsorted), sep=\",\")\n"
  },
  {
    "path": "sorts/wiggle_sort.py",
    "content": "\"\"\"\nWiggle Sort.\n\nGiven an unsorted array nums, reorder it such\nthat nums[0] < nums[1] > nums[2] < nums[3]....\nFor example:\nif input numbers = [3, 5, 2, 1, 6, 4]\none possible Wiggle Sorted answer is [3, 5, 1, 6, 2, 4].\n\"\"\"\n\n\ndef wiggle_sort(nums: list) -> list:\n    \"\"\"\n    Python implementation of wiggle.\n    Example:\n    >>> wiggle_sort([0, 5, 3, 2, 2])\n    [0, 5, 2, 3, 2]\n    >>> wiggle_sort([])\n    []\n    >>> wiggle_sort([-2, -5, -45])\n    [-45, -2, -5]\n    >>> wiggle_sort([-2.1, -5.68, -45.11])\n    [-45.11, -2.1, -5.68]\n    \"\"\"\n    for i, _ in enumerate(nums):\n        if (i % 2 == 1) == (nums[i - 1] > nums[i]):\n            nums[i - 1], nums[i] = nums[i], nums[i - 1]\n\n    return nums\n\n\nif __name__ == \"__main__\":\n    print(\"Enter the array elements:\")\n    array = list(map(int, input().split()))\n    print(\"The unsorted array is:\")\n    print(array)\n    print(\"Array after Wiggle sort:\")\n    print(wiggle_sort(array))\n"
  },
  {
    "path": "strings/__init__.py",
    "content": ""
  },
  {
    "path": "strings/aho_corasick.py",
    "content": "from __future__ import annotations\n\nfrom collections import deque\n\n\nclass Automaton:\n    def __init__(self, keywords: list[str]):\n        self.adlist: list[dict] = []\n        self.adlist.append(\n            {\"value\": \"\", \"next_states\": [], \"fail_state\": 0, \"output\": []}\n        )\n\n        for keyword in keywords:\n            self.add_keyword(keyword)\n        self.set_fail_transitions()\n\n    def find_next_state(self, current_state: int, char: str) -> int | None:\n        for state in self.adlist[current_state][\"next_states\"]:\n            if char == self.adlist[state][\"value\"]:\n                return state\n        return None\n\n    def add_keyword(self, keyword: str) -> None:\n        current_state = 0\n        for character in keyword:\n            next_state = self.find_next_state(current_state, character)\n            if next_state is None:\n                self.adlist.append(\n                    {\n                        \"value\": character,\n                        \"next_states\": [],\n                        \"fail_state\": 0,\n                        \"output\": [],\n                    }\n                )\n                self.adlist[current_state][\"next_states\"].append(len(self.adlist) - 1)\n                current_state = len(self.adlist) - 1\n            else:\n                current_state = next_state\n        self.adlist[current_state][\"output\"].append(keyword)\n\n    def set_fail_transitions(self) -> None:\n        q: deque = deque()\n        for node in self.adlist[0][\"next_states\"]:\n            q.append(node)\n            self.adlist[node][\"fail_state\"] = 0\n        while q:\n            r = q.popleft()\n            for child in self.adlist[r][\"next_states\"]:\n                q.append(child)\n                state = self.adlist[r][\"fail_state\"]\n                while (\n                    self.find_next_state(state, self.adlist[child][\"value\"]) is None\n                    and state != 0\n                ):\n                    state = self.adlist[state][\"fail_state\"]\n                self.adlist[child][\"fail_state\"] = self.find_next_state(\n                    state, self.adlist[child][\"value\"]\n                )\n                if self.adlist[child][\"fail_state\"] is None:\n                    self.adlist[child][\"fail_state\"] = 0\n                self.adlist[child][\"output\"] = (\n                    self.adlist[child][\"output\"]\n                    + self.adlist[self.adlist[child][\"fail_state\"]][\"output\"]\n                )\n\n    def search_in(self, string: str) -> dict[str, list[int]]:\n        \"\"\"\n        >>> A = Automaton([\"what\", \"hat\", \"ver\", \"er\"])\n        >>> A.search_in(\"whatever, err ... , wherever\")\n        {'what': [0], 'hat': [1], 'ver': [5, 25], 'er': [6, 10, 22, 26]}\n        \"\"\"\n        result: dict = {}  # returns a dict with keywords and list of its occurrences\n        current_state = 0\n        for i in range(len(string)):\n            while (\n                self.find_next_state(current_state, string[i]) is None\n                and current_state != 0\n            ):\n                current_state = self.adlist[current_state][\"fail_state\"]\n            next_state = self.find_next_state(current_state, string[i])\n            if next_state is None:\n                current_state = 0\n            else:\n                current_state = next_state\n                for key in self.adlist[current_state][\"output\"]:\n                    if key not in result:\n                        result[key] = []\n                    result[key].append(i - len(key) + 1)\n        return result\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "strings/alternative_string_arrange.py",
    "content": "def alternative_string_arrange(first_str: str, second_str: str) -> str:\n    \"\"\"\n    Return the alternative arrangements of the two strings.\n    :param first_str:\n    :param second_str:\n    :return: String\n    >>> alternative_string_arrange(\"ABCD\", \"XY\")\n    'AXBYCD'\n    >>> alternative_string_arrange(\"XY\", \"ABCD\")\n    'XAYBCD'\n    >>> alternative_string_arrange(\"AB\", \"XYZ\")\n    'AXBYZ'\n    >>> alternative_string_arrange(\"ABC\", \"\")\n    'ABC'\n    \"\"\"\n    first_str_length: int = len(first_str)\n    second_str_length: int = len(second_str)\n    abs_length: int = (\n        first_str_length if first_str_length > second_str_length else second_str_length\n    )\n    output_list: list = []\n    for char_count in range(abs_length):\n        if char_count < first_str_length:\n            output_list.append(first_str[char_count])\n        if char_count < second_str_length:\n            output_list.append(second_str[char_count])\n    return \"\".join(output_list)\n\n\nif __name__ == \"__main__\":\n    print(alternative_string_arrange(\"AB\", \"XYZ\"), end=\" \")\n"
  },
  {
    "path": "strings/anagrams.py",
    "content": "from __future__ import annotations\n\nimport collections\nimport pprint\nfrom pathlib import Path\n\n\ndef signature(word: str) -> str:\n    \"\"\"\n    Return a word's frequency-based signature.\n\n    >>> signature(\"test\")\n    'e1s1t2'\n    >>> signature(\"this is a test\")\n    ' 3a1e1h1i2s3t3'\n    >>> signature(\"finaltest\")\n    'a1e1f1i1l1n1s1t2'\n    \"\"\"\n    frequencies = collections.Counter(word)\n    return \"\".join(\n        f\"{char}{frequency}\" for char, frequency in sorted(frequencies.items())\n    )\n\n\ndef anagram(my_word: str) -> list[str]:\n    \"\"\"\n    Return every anagram of the given word from the dictionary.\n\n    >>> anagram('test')\n    ['sett', 'stet', 'test']\n    >>> anagram('this is a test')\n    []\n    >>> anagram('final')\n    ['final']\n    \"\"\"\n    return word_by_signature[signature(my_word)]\n\n\ndata: str = Path(__file__).parent.joinpath(\"words.txt\").read_text(encoding=\"utf-8\")\nword_list = sorted({word.strip().lower() for word in data.splitlines()})\n\nword_by_signature = collections.defaultdict(list)\nfor word in word_list:\n    word_by_signature[signature(word)].append(word)\n\nif __name__ == \"__main__\":\n    all_anagrams = {word: anagram(word) for word in word_list if len(anagram(word)) > 1}\n\n    with open(\"anagrams.txt\", \"w\") as file:\n        file.write(\"all_anagrams = \\n\")\n        file.write(pprint.pformat(all_anagrams))\n"
  },
  {
    "path": "strings/anagrams.txt",
    "content": "all_anagrams =\n {'aal': ['aal', 'ala'],\n 'aam': ['aam', 'ama'],\n 'aaronic': ['aaronic', 'nicarao', 'ocarina'],\n 'aaronite': ['aaronite', 'aeration'],\n 'aaru': ['aaru', 'aura'],\n 'ab': ['ab', 'ba'],\n 'aba': ['aba', 'baa'],\n 'abac': ['abac', 'caba'],\n 'abactor': ['abactor', 'acrobat'],\n 'abaft': ['abaft', 'bafta'],\n 'abalone': ['abalone', 'balonea'],\n 'abandoner': ['abandoner', 'reabandon'],\n 'abanic': ['abanic', 'bianca'],\n 'abaris': ['abaris', 'arabis'],\n 'abas': ['abas', 'saba'],\n 'abaser': ['abaser', 'abrase'],\n 'abate': ['abate', 'ateba', 'batea', 'beata'],\n 'abater': ['abater', 'artabe', 'eartab', 'trabea'],\n 'abb': ['abb', 'bab'],\n 'abba': ['abba', 'baba'],\n 'abbey': ['abbey', 'bebay'],\n 'abby': ['abby', 'baby'],\n 'abdat': ['abdat', 'batad'],\n 'abdiel': ['abdiel', 'baldie'],\n 'abdominovaginal': ['abdominovaginal', 'vaginoabdominal'],\n 'abdominovesical': ['abdominovesical', 'vesicoabdominal'],\n 'abe': ['abe', 'bae', 'bea'],\n 'abed': ['abed', 'bade', 'bead'],\n 'abel': ['abel', 'able', 'albe', 'bale', 'beal', 'bela', 'blae'],\n 'abele': ['abele', 'albee'],\n 'abelian': ['abelian', 'nebalia'],\n 'abenteric': ['abenteric', 'bicrenate'],\n 'aberia': ['aberia', 'baeria', 'baiera'],\n 'abet': ['abet', 'bate', 'beat', 'beta'],\n 'abetment': ['abetment', 'batement'],\n 'abettor': ['abettor', 'taboret'],\n 'abhorrent': ['abhorrent', 'earthborn'],\n 'abhorrer': ['abhorrer', 'harborer'],\n 'abider': ['abider', 'bardie'],\n 'abies': ['abies', 'beisa'],\n 'abilla': ['abilla', 'labial'],\n 'abilo': ['abilo', 'aboil'],\n 'abir': ['abir', 'bari', 'rabi'],\n 'abiston': ['abiston', 'bastion'],\n 'abiuret': ['abiuret', 'aubrite', 'biurate', 'rubiate'],\n 'abkar': ['abkar', 'arkab'],\n 'abkhas': ['abkhas', 'kasbah'],\n 'ablactate': ['ablactate', 'cabaletta'],\n 'ablare': ['ablare', 'arable', 'arbela'],\n 'ablastemic': ['ablastemic', 'masticable'],\n 'ablation': ['ablation', 'obtainal'],\n 'ablaut': ['ablaut', 'tabula'],\n 'able': ['abel', 'able', 'albe', 'bale', 'beal', 'bela', 'blae'],\n 'ableness': ['ableness', 'blaeness', 'sensable'],\n 'ablepsia': ['ablepsia', 'epibasal'],\n 'abler': ['abler', 'baler', 'belar', 'blare', 'blear'],\n 'ablest': ['ablest', 'stable', 'tables'],\n 'abloom': ['abloom', 'mabolo'],\n 'ablow': ['ablow', 'balow', 'bowla'],\n 'ablude': ['ablude', 'belaud'],\n 'abluent': ['abluent', 'tunable'],\n 'ablution': ['ablution', 'abutilon'],\n 'ably': ['ably', 'blay', 'yalb'],\n 'abmho': ['abmho', 'abohm'],\n 'abner': ['abner', 'arneb', 'reban'],\n 'abnet': ['abnet', 'beant'],\n 'abo': ['abo', 'boa'],\n 'aboard': ['aboard', 'aborad', 'abroad'],\n 'abode': ['abode', 'adobe'],\n 'abohm': ['abmho', 'abohm'],\n 'aboil': ['abilo', 'aboil'],\n 'abolisher': ['abolisher', 'reabolish'],\n 'abongo': ['abongo', 'gaboon'],\n 'aborad': ['aboard', 'aborad', 'abroad'],\n 'aboral': ['aboral', 'arbalo'],\n 'abord': ['abord', 'bardo', 'board', 'broad', 'dobra', 'dorab'],\n 'abort': ['abort', 'tabor'],\n 'aborticide': ['aborticide', 'bacterioid'],\n 'abortient': ['abortient', 'torbanite'],\n 'abortin': ['abortin', 'taborin'],\n 'abortion': ['abortion', 'robotian'],\n 'abortive': ['abortive', 'bravoite'],\n 'abouts': ['abouts', 'basuto'],\n 'abram': ['abram', 'ambar'],\n 'abramis': ['abramis', 'arabism'],\n 'abrasax': ['abrasax', 'abraxas'],\n 'abrase': ['abaser', 'abrase'],\n 'abrasion': ['abrasion', 'sorabian'],\n 'abrastol': ['abrastol', 'albatros'],\n 'abraxas': ['abrasax', 'abraxas'],\n 'abreact': ['abreact', 'bractea', 'cabaret'],\n 'abret': ['abret', 'bater', 'berat'],\n 'abridge': ['abridge', 'brigade'],\n 'abrim': ['abrim', 'birma'],\n 'abrin': ['abrin', 'bairn', 'brain', 'brian', 'rabin'],\n 'abristle': ['abristle', 'libertas'],\n 'abroad': ['aboard', 'aborad', 'abroad'],\n 'abrotine': ['abrotine', 'baritone', 'obtainer', 'reobtain'],\n 'abrus': ['abrus', 'bursa', 'subra'],\n 'absalom': ['absalom', 'balsamo'],\n 'abscise': ['abscise', 'scabies'],\n 'absent': ['absent', 'basten'],\n 'absenter': ['absenter', 'reabsent'],\n 'absi': ['absi', 'bais', 'bias', 'isba'],\n 'absit': ['absit', 'batis'],\n 'absmho': ['absmho', 'absohm'],\n 'absohm': ['absmho', 'absohm'],\n 'absorber': ['absorber', 'reabsorb'],\n 'absorpt': ['absorpt', 'barpost'],\n 'abthain': ['abthain', 'habitan'],\n 'abulic': ['abulic', 'baculi'],\n 'abut': ['abut', 'tabu', 'tuba'],\n 'abuta': ['abuta', 'bauta'],\n 'abutilon': ['ablution', 'abutilon'],\n 'aby': ['aby', 'bay'],\n 'abysmal': ['abysmal', 'balsamy'],\n 'academite': ['academite', 'acetamide'],\n 'acadie': ['acadie', 'acedia', 'adicea'],\n 'acaleph': ['acaleph', 'acephal'],\n 'acalepha': ['acalepha', 'acephala'],\n 'acalephae': ['acalephae', 'apalachee'],\n 'acalephan': ['acalephan', 'acephalan'],\n 'acalyptrate': ['acalyptrate', 'calyptratae'],\n 'acamar': ['acamar', 'camara', 'maraca'],\n 'acanth': ['acanth', 'anchat', 'tanach'],\n 'acanthia': ['acanthia', 'achatina'],\n 'acanthial': ['acanthial', 'calathian'],\n 'acanthin': ['acanthin', 'chinanta'],\n 'acara': ['acara', 'araca'],\n 'acardia': ['acardia', 'acarida', 'arcadia'],\n 'acarian': ['acarian', 'acarina', 'acrania'],\n 'acarid': ['acarid', 'cardia', 'carida'],\n 'acarida': ['acardia', 'acarida', 'arcadia'],\n 'acarina': ['acarian', 'acarina', 'acrania'],\n 'acarine': ['acarine', 'acraein', 'arecain'],\n 'acastus': ['acastus', 'astacus'],\n 'acatholic': ['acatholic', 'chaotical'],\n 'acaudate': ['acaudate', 'ecaudata'],\n 'acca': ['acca', 'caca'],\n 'accelerator': ['accelerator', 'retrocaecal'],\n 'acception': ['acception', 'peccation'],\n 'accessioner': ['accessioner', 'reaccession'],\n 'accipitres': ['accipitres', 'preascitic'],\n 'accite': ['accite', 'acetic'],\n 'acclinate': ['acclinate', 'analectic'],\n 'accoil': ['accoil', 'calico'],\n 'accomplisher': ['accomplisher', 'reaccomplish'],\n 'accompt': ['accompt', 'compact'],\n 'accorder': ['accorder', 'reaccord'],\n 'accoy': ['accoy', 'ccoya'],\n 'accretion': ['accretion', 'anorectic', 'neoarctic'],\n 'accrual': ['accrual', 'carucal'],\n 'accurate': ['accurate', 'carucate'],\n 'accurse': ['accurse', 'accuser'],\n 'accusable': ['accusable', 'subcaecal'],\n 'accused': ['accused', 'succade'],\n 'accuser': ['accurse', 'accuser'],\n 'acedia': ['acadie', 'acedia', 'adicea'],\n 'acedy': ['acedy', 'decay'],\n 'acentric': ['acentric', 'encratic', 'nearctic'],\n 'acentrous': ['acentrous', 'courtesan', 'nectarous'],\n 'acephal': ['acaleph', 'acephal'],\n 'acephala': ['acalepha', 'acephala'],\n 'acephalan': ['acalephan', 'acephalan'],\n 'acephali': ['acephali', 'phacelia'],\n 'acephalina': ['acephalina', 'phalaecian'],\n 'acer': ['acer', 'acre', 'care', 'crea', 'race'],\n 'aceraceae': ['aceraceae', 'arecaceae'],\n 'aceraceous': ['aceraceous', 'arecaceous'],\n 'acerb': ['acerb', 'brace', 'caber'],\n 'acerbic': ['acerbic', 'breccia'],\n 'acerdol': ['acerdol', 'coraled'],\n 'acerin': ['acerin', 'cearin'],\n 'acerous': ['acerous', 'carouse', 'euscaro'],\n 'acervate': ['acervate', 'revacate'],\n 'acervation': ['acervation', 'vacationer'],\n 'acervuline': ['acervuline', 'avirulence'],\n 'acetamide': ['academite', 'acetamide'],\n 'acetamido': ['acetamido', 'coadamite'],\n 'acetanilid': ['acetanilid', 'laciniated', 'teniacidal'],\n 'acetanion': ['acetanion', 'antoecian'],\n 'acetation': ['acetation', 'itaconate'],\n 'acetic': ['accite', 'acetic'],\n 'acetin': ['acetin', 'actine', 'enatic'],\n 'acetmethylanilide': ['acetmethylanilide', 'methylacetanilide'],\n 'acetoin': ['acetoin', 'aconite', 'anoetic', 'antoeci', 'cetonia'],\n 'acetol': ['acetol', 'colate', 'locate'],\n 'acetone': ['acetone', 'oceanet'],\n 'acetonuria': ['acetonuria', 'aeronautic'],\n 'acetopyrin': ['acetopyrin', 'capernoity'],\n 'acetous': ['acetous', 'outcase'],\n 'acetum': ['acetum', 'tecuma'],\n 'aceturic': ['aceturic', 'cruciate'],\n 'ach': ['ach', 'cha'],\n 'achar': ['achar', 'chara'],\n 'achate': ['achate', 'chaeta'],\n 'achatina': ['acanthia', 'achatina'],\n 'ache': ['ache', 'each', 'haec'],\n 'acheirus': ['acheirus', 'eucharis'],\n 'achen': ['achen', 'chane', 'chena', 'hance'],\n 'acher': ['acher', 'arche', 'chare', 'chera', 'rache', 'reach'],\n 'acherontic': ['acherontic', 'anchoretic'],\n 'acherontical': ['acherontical', 'anchoretical'],\n 'achete': ['achete', 'hecate', 'teache', 'thecae'],\n 'acheulean': ['acheulean', 'euchlaena'],\n 'achill': ['achill', 'cahill', 'chilla'],\n 'achillea': ['achillea', 'heliacal'],\n 'acholia': ['acholia', 'alochia'],\n 'achondrite': ['achondrite', 'ditrochean', 'ordanchite'],\n 'achor': ['achor', 'chora', 'corah', 'orach', 'roach'],\n 'achras': ['achras', 'charas'],\n 'achromat': ['achromat', 'trachoma'],\n 'achromatin': ['achromatin', 'chariotman', 'machinator'],\n 'achromatinic': ['achromatinic', 'chromatician'],\n 'achtel': ['achtel', 'chalet', 'thecal', 'thecla'],\n 'achy': ['achy', 'chay'],\n 'aciculated': ['aciculated', 'claudicate'],\n 'acid': ['acid', 'cadi', 'caid'],\n 'acidanthera': ['acidanthera', 'cantharidae'],\n 'acider': ['acider', 'ericad'],\n 'acidimeter': ['acidimeter', 'mediatrice'],\n 'acidity': ['acidity', 'adicity'],\n 'acidly': ['acidly', 'acidyl'],\n 'acidometry': ['acidometry', 'medicatory', 'radiectomy'],\n 'acidophilous': ['acidophilous', 'aphidicolous'],\n 'acidyl': ['acidly', 'acidyl'],\n 'acier': ['acier', 'aeric', 'ceria', 'erica'],\n 'acieral': ['acieral', 'aerical'],\n 'aciform': ['aciform', 'formica'],\n 'acilius': ['acilius', 'iliacus'],\n 'acinar': ['acinar',\n            'arnica',\n            'canari',\n            'carian',\n            'carina',\n            'crania',\n            'narica'],\n 'acinic': ['acinic', 'incaic'],\n 'aciniform': ['aciniform', 'formicina'],\n 'acipenserid': ['acipenserid', 'presidencia'],\n 'acis': ['acis', 'asci', 'saic'],\n 'acker': ['acker', 'caker', 'crake', 'creak'],\n 'ackey': ['ackey', 'cakey'],\n 'acle': ['acle', 'alec', 'lace'],\n 'acleistous': ['acleistous', 'ossiculate'],\n 'aclemon': ['aclemon', 'cloamen'],\n 'aclinal': ['aclinal', 'ancilla'],\n 'aclys': ['aclys', 'scaly'],\n 'acme': ['acme', 'came', 'mace'],\n 'acmite': ['acmite', 'micate'],\n 'acne': ['acne', 'cane', 'nace'],\n 'acnemia': ['acnemia', 'anaemic'],\n 'acnida': ['acnida', 'anacid', 'dacian'],\n 'acnodal': ['acnodal', 'canadol', 'locanda'],\n 'acnode': ['acnode', 'deacon'],\n 'acoin': ['acoin', 'oncia'],\n 'acoma': ['acoma', 'macao'],\n 'acone': ['acone', 'canoe', 'ocean'],\n 'aconital': ['aconital', 'actional', 'anatolic'],\n 'aconite': ['acetoin', 'aconite', 'anoetic', 'antoeci', 'cetonia'],\n 'aconitic': ['aconitic', 'cationic', 'itaconic'],\n 'aconitin': ['aconitin', 'inaction', 'nicotian'],\n 'aconitum': ['aconitum', 'acontium'],\n 'acontias': ['acontias', 'tacsonia'],\n 'acontium': ['aconitum', 'acontium'],\n 'acontius': ['acontius', 'anticous'],\n 'acopon': ['acopon', 'poonac'],\n 'acor': ['acor', 'caro', 'cora', 'orca'],\n 'acorn': ['acorn', 'acron', 'racon'],\n 'acorus': ['acorus', 'soucar'],\n 'acosmist': ['acosmist', 'massicot', 'somatics'],\n 'acquest': ['acquest', 'casquet'],\n 'acrab': ['acrab', 'braca'],\n 'acraein': ['acarine', 'acraein', 'arecain'],\n 'acrania': ['acarian', 'acarina', 'acrania'],\n 'acraniate': ['acraniate', 'carinatae'],\n 'acratia': ['acratia', 'cataria'],\n 'acre': ['acer', 'acre', 'care', 'crea', 'race'],\n 'acream': ['acream', 'camera', 'mareca'],\n 'acred': ['acred', 'cader', 'cadre', 'cedar'],\n 'acrid': ['acrid', 'caird', 'carid', 'darci', 'daric', 'dirca'],\n 'acridan': ['acridan', 'craniad'],\n 'acridian': ['acridian', 'cnidaria'],\n 'acrididae': ['acrididae', 'cardiidae', 'cidaridae'],\n 'acridly': ['acridly', 'acridyl'],\n 'acridonium': ['acridonium', 'dicoumarin'],\n 'acridyl': ['acridly', 'acridyl'],\n 'acrimonious': ['acrimonious', 'isocoumarin'],\n 'acrisius': ['acrisius', 'sicarius'],\n 'acrita': ['acrita', 'arctia'],\n 'acritan': ['acritan', 'arctian'],\n 'acrite': ['acrite', 'arcite', 'tercia', 'triace', 'tricae'],\n 'acroa': ['acroa', 'caroa'],\n 'acrobat': ['abactor', 'acrobat'],\n 'acrocera': ['acrocera', 'caracore'],\n 'acroclinium': ['acroclinium', 'alcicornium'],\n 'acrodus': ['acrodus', 'crusado'],\n 'acrogen': ['acrogen', 'cornage'],\n 'acrolein': ['acrolein',\n              'arecolin',\n              'caroline',\n              'colinear',\n              'cornelia',\n              'creolian',\n              'lonicera'],\n 'acrolith': ['acrolith', 'trochila'],\n 'acron': ['acorn', 'acron', 'racon'],\n 'acronical': ['acronical', 'alcoranic'],\n 'acronym': ['acronym', 'romancy'],\n 'acropetal': ['acropetal', 'cleopatra'],\n 'acrose': ['acrose', 'coarse'],\n 'acrostic': ['acrostic', 'sarcotic', 'socratic'],\n 'acrostical': ['acrostical', 'socratical'],\n 'acrostically': ['acrostically', 'socratically'],\n 'acrosticism': ['acrosticism', 'socraticism'],\n 'acrotic': ['acrotic', 'carotic'],\n 'acrotism': ['acrotism', 'rotacism'],\n 'acrotrophic': ['acrotrophic', 'prothoracic'],\n 'acryl': ['acryl', 'caryl', 'clary'],\n 'act': ['act', 'cat'],\n 'actaeonidae': ['actaeonidae', 'donatiaceae'],\n 'actian': ['actian', 'natica', 'tanica'],\n 'actifier': ['actifier', 'artifice'],\n 'actin': ['actin', 'antic'],\n 'actinal': ['actinal', 'alantic', 'alicant', 'antical'],\n 'actine': ['acetin', 'actine', 'enatic'],\n 'actiniform': ['actiniform', 'naticiform'],\n 'actinine': ['actinine', 'naticine'],\n 'actinism': ['actinism', 'manistic'],\n 'actinogram': ['actinogram', 'morganatic'],\n 'actinoid': ['actinoid', 'diatonic', 'naticoid'],\n 'actinon': ['actinon', 'cantion', 'contain'],\n 'actinopteran': ['actinopteran', 'precantation'],\n 'actinopteri': ['actinopteri', 'crepitation', 'precitation'],\n 'actinost': ['actinost', 'oscitant'],\n 'actinula': ['actinula', 'nautical'],\n 'action': ['action', 'atonic', 'cation'],\n 'actional': ['aconital', 'actional', 'anatolic'],\n 'actioner': ['actioner', 'anerotic', 'ceration', 'creation', 'reaction'],\n 'activable': ['activable', 'biclavate'],\n 'activate': ['activate', 'cavitate'],\n 'activation': ['activation', 'cavitation'],\n 'activin': ['activin', 'civitan'],\n 'actomyosin': ['actomyosin', 'inocystoma'],\n 'acton': ['acton', 'canto', 'octan'],\n 'actor': ['actor', 'corta', 'croat', 'rocta', 'taroc', 'troca'],\n 'actorship': ['actorship', 'strophaic'],\n 'acts': ['acts', 'cast', 'scat'],\n 'actuator': ['actuator', 'autocrat'],\n 'acture': ['acture', 'cauter', 'curate'],\n 'acuan': ['acuan', 'aucan'],\n 'acubens': ['acubens', 'benacus'],\n 'acumen': ['acumen', 'cueman'],\n 'acuminose': ['acuminose', 'mniaceous'],\n 'acutenaculum': ['acutenaculum', 'unaccumulate'],\n 'acuteness': ['acuteness', 'encaustes'],\n 'acutorsion': ['acutorsion', 'octonarius'],\n 'acyl': ['acyl', 'clay', 'lacy'],\n 'acylation': ['acylation', 'claytonia'],\n 'acylogen': ['acylogen', 'cynogale'],\n 'ad': ['ad', 'da'],\n 'adad': ['adad', 'adda', 'dada'],\n 'adage': ['adage', 'agade'],\n 'adam': ['adam', 'dama'],\n 'adamic': ['adamic', 'cadmia'],\n 'adamine': ['adamine', 'manidae'],\n 'adamite': ['adamite', 'amidate'],\n 'adamsite': ['adamsite', 'diastema'],\n 'adance': ['adance', 'ecanda'],\n 'adapter': ['adapter', 'predata', 'readapt'],\n 'adaption': ['adaption', 'adoptian'],\n 'adaptionism': ['adaptionism', 'adoptianism'],\n 'adar': ['adar', 'arad', 'raad', 'rada'],\n 'adarme': ['adarme', 'adream'],\n 'adat': ['adat', 'data'],\n 'adawn': ['adawn', 'wadna'],\n 'adays': ['adays', 'dasya'],\n 'add': ['add', 'dad'],\n 'adda': ['adad', 'adda', 'dada'],\n 'addendum': ['addendum', 'unmadded'],\n 'adder': ['adder', 'dread', 'readd'],\n 'addicent': ['addicent', 'dedicant'],\n 'addlings': ['addlings', 'saddling'],\n 'addresser': ['addresser', 'readdress'],\n 'addu': ['addu', 'dadu', 'daud', 'duad'],\n 'addy': ['addy', 'dyad'],\n 'ade': ['ade', 'dae'],\n 'adeem': ['adeem', 'ameed', 'edema'],\n 'adela': ['adela', 'dalea'],\n 'adeline': ['adeline', 'daniele', 'delaine'],\n 'adeling': ['adeling', 'dealing', 'leading'],\n 'adelops': ['adelops', 'deposal'],\n 'ademonist': ['ademonist', 'demoniast', 'staminode'],\n 'ademption': ['ademption', 'tampioned'],\n 'adendric': ['adendric', 'riddance'],\n 'adenectopic': ['adenectopic', 'pentadecoic'],\n 'adenia': ['adenia', 'idaean'],\n 'adenochondroma': ['adenochondroma', 'chondroadenoma'],\n 'adenocystoma': ['adenocystoma', 'cystoadenoma'],\n 'adenofibroma': ['adenofibroma', 'fibroadenoma'],\n 'adenolipoma': ['adenolipoma', 'palaemonoid'],\n 'adenosarcoma': ['adenosarcoma', 'sarcoadenoma'],\n 'adenylic': ['adenylic', 'lycaenid'],\n 'adeptness': ['adeptness', 'pedantess'],\n 'adequation': ['adequation', 'deaquation'],\n 'adermia': ['adermia', 'madeira'],\n 'adermin': ['adermin', 'amerind', 'dimeran'],\n 'adet': ['adet', 'date', 'tade', 'tead', 'teda'],\n 'adevism': ['adevism', 'vedaism'],\n 'adhere': ['adhere', 'header', 'hedera', 'rehead'],\n 'adherent': ['adherent', 'headrent', 'neatherd', 'threaden'],\n 'adiaphon': ['adiaphon', 'aphodian'],\n 'adib': ['adib', 'ibad'],\n 'adicea': ['acadie', 'acedia', 'adicea'],\n 'adicity': ['acidity', 'adicity'],\n 'adiel': ['adiel', 'delia', 'ideal'],\n 'adieux': ['adieux', 'exaudi'],\n 'adighe': ['adighe', 'hidage'],\n 'adin': ['adin', 'andi', 'dain', 'dani', 'dian', 'naid'],\n 'adinole': ['adinole', 'idoneal'],\n 'adion': ['adion', 'danio', 'doina', 'donia'],\n 'adipocele': ['adipocele', 'cepolidae', 'ploceidae'],\n 'adipocere': ['adipocere', 'percoidea'],\n 'adipyl': ['adipyl', 'plaidy'],\n 'adit': ['adit', 'dita'],\n 'adital': ['adital', 'altaid'],\n 'aditus': ['aditus', 'studia'],\n 'adjuster': ['adjuster', 'readjust'],\n 'adlai': ['adlai', 'alida'],\n 'adlay': ['adlay', 'dayal'],\n 'adlet': ['adlet', 'dealt', 'delta', 'lated', 'taled'],\n 'adlumine': ['adlumine', 'unmailed'],\n 'adman': ['adman', 'daman', 'namda'],\n 'admi': ['admi', 'amid', 'madi', 'maid'],\n 'adminicle': ['adminicle', 'medicinal'],\n 'admire': ['admire', 'armied', 'damier', 'dimera', 'merida'],\n 'admired': ['admired', 'diaderm'],\n 'admirer': ['admirer', 'madrier', 'married'],\n 'admissive': ['admissive', 'misadvise'],\n 'admit': ['admit', 'atmid'],\n 'admittee': ['admittee', 'meditate'],\n 'admonisher': ['admonisher', 'rhamnoside'],\n 'admonition': ['admonition', 'domination'],\n 'admonitive': ['admonitive', 'dominative'],\n 'admonitor': ['admonitor', 'dominator'],\n 'adnascence': ['adnascence', 'ascendance'],\n 'adnascent': ['adnascent', 'ascendant'],\n 'adnate': ['adnate', 'entada'],\n 'ado': ['ado', 'dao', 'oda'],\n 'adobe': ['abode', 'adobe'],\n 'adolph': ['adolph', 'pholad'],\n 'adonai': ['adonai', 'adonia'],\n 'adonia': ['adonai', 'adonia'],\n 'adonic': ['adonic', 'anodic'],\n 'adonin': ['adonin', 'nanoid', 'nonaid'],\n 'adoniram': ['adoniram', 'radioman'],\n 'adonize': ['adonize', 'anodize'],\n 'adopter': ['adopter', 'protead', 'readopt'],\n 'adoptian': ['adaption', 'adoptian'],\n 'adoptianism': ['adaptionism', 'adoptianism'],\n 'adoptional': ['adoptional', 'aplodontia'],\n 'adorability': ['adorability', 'roadability'],\n 'adorable': ['adorable', 'roadable'],\n 'adorant': ['adorant', 'ondatra'],\n 'adore': ['adore', 'oared', 'oread'],\n 'adorer': ['adorer', 'roader'],\n 'adorn': ['adorn', 'donar', 'drona', 'radon'],\n 'adorner': ['adorner', 'readorn'],\n 'adpao': ['adpao', 'apoda'],\n 'adpromission': ['adpromission', 'proadmission'],\n 'adream': ['adarme', 'adream'],\n 'adrenin': ['adrenin', 'nardine'],\n 'adrenine': ['adrenine', 'adrienne'],\n 'adrenolytic': ['adrenolytic', 'declinatory'],\n 'adrenotropic': ['adrenotropic', 'incorporated'],\n 'adrian': ['adrian', 'andira', 'andria', 'radian', 'randia'],\n 'adrienne': ['adrenine', 'adrienne'],\n 'adrip': ['adrip', 'rapid'],\n 'adroitly': ['adroitly', 'dilatory', 'idolatry'],\n 'adrop': ['adrop', 'pardo'],\n 'adry': ['adry', 'dray', 'yard'],\n 'adscendent': ['adscendent', 'descendant'],\n 'adsmith': ['adsmith', 'mahdist'],\n 'adular': ['adular', 'aludra', 'radula'],\n 'adulation': ['adulation', 'laudation'],\n 'adulator': ['adulator', 'laudator'],\n 'adulatory': ['adulatory', 'laudatory'],\n 'adult': ['adult', 'dulat'],\n 'adulterine': ['adulterine', 'laurentide'],\n 'adultness': ['adultness', 'dauntless'],\n 'adustion': ['adustion', 'sudation'],\n 'advene': ['advene', 'evadne'],\n 'adventism': ['adventism', 'vedantism'],\n 'adventist': ['adventist', 'vedantist'],\n 'adventure': ['adventure', 'unaverted'],\n 'advice': ['advice', 'vedaic'],\n 'ady': ['ady', 'day', 'yad'],\n 'adz': ['adz', 'zad'],\n 'adze': ['adze', 'daze'],\n 'adzer': ['adzer', 'zerda'],\n 'ae': ['ae', 'ea'],\n 'aecidioform': ['aecidioform', 'formicoidea'],\n 'aedilian': ['aedilian', 'laniidae'],\n 'aedilic': ['aedilic', 'elaidic'],\n 'aedility': ['aedility', 'ideality'],\n 'aegipan': ['aegipan', 'apinage'],\n 'aegirine': ['aegirine', 'erigenia'],\n 'aegirite': ['aegirite', 'ariegite'],\n 'aegle': ['aegle', 'eagle', 'galee'],\n 'aenean': ['aenean', 'enaena'],\n 'aeolharmonica': ['aeolharmonica', 'chloroanaemia'],\n 'aeolian': ['aeolian', 'aeolina', 'aeonial'],\n 'aeolic': ['aeolic', 'coelia'],\n 'aeolina': ['aeolian', 'aeolina', 'aeonial'],\n 'aeolis': ['aeolis', 'laiose'],\n 'aeolist': ['aeolist', 'isolate'],\n 'aeolistic': ['aeolistic', 'socialite'],\n 'aeon': ['aeon', 'eoan'],\n 'aeonial': ['aeolian', 'aeolina', 'aeonial'],\n 'aeonist': ['aeonist', 'asiento', 'satieno'],\n 'aer': ['aer', 'are', 'ear', 'era', 'rea'],\n 'aerage': ['aerage', 'graeae'],\n 'aerarian': ['aerarian', 'arenaria'],\n 'aeration': ['aaronite', 'aeration'],\n 'aerial': ['aerial', 'aralie'],\n 'aeric': ['acier', 'aeric', 'ceria', 'erica'],\n 'aerical': ['acieral', 'aerical'],\n 'aeried': ['aeried', 'dearie'],\n 'aerogenic': ['aerogenic', 'recoinage'],\n 'aerographer': ['aerographer', 'areographer'],\n 'aerographic': ['aerographic', 'areographic'],\n 'aerographical': ['aerographical', 'areographical'],\n 'aerography': ['aerography', 'areography'],\n 'aerologic': ['aerologic', 'areologic'],\n 'aerological': ['aerological', 'areological'],\n 'aerologist': ['aerologist', 'areologist'],\n 'aerology': ['aerology', 'areology'],\n 'aeromantic': ['aeromantic', 'cameration', 'maceration', 'racemation'],\n 'aerometer': ['aerometer', 'areometer'],\n 'aerometric': ['aerometric', 'areometric'],\n 'aerometry': ['aerometry', 'areometry'],\n 'aeronautic': ['acetonuria', 'aeronautic'],\n 'aeronautism': ['aeronautism', 'measuration'],\n 'aerope': ['aerope', 'operae'],\n 'aerophilic': ['aerophilic', 'epichorial'],\n 'aerosol': ['aerosol', 'roseola'],\n 'aerostatics': ['aerostatics', 'aortectasis'],\n 'aery': ['aery', 'eyra', 'yare', 'year'],\n 'aes': ['aes', 'ase', 'sea'],\n 'aesthetic': ['aesthetic', 'chaetites'],\n 'aethalioid': ['aethalioid', 'haliotidae'],\n 'aetian': ['aetian', 'antiae', 'taenia'],\n 'aetobatus': ['aetobatus', 'eastabout'],\n 'afebrile': ['afebrile', 'balefire', 'fireable'],\n 'afenil': ['afenil', 'finale'],\n 'affair': ['affair', 'raffia'],\n 'affecter': ['affecter', 'reaffect'],\n 'affeer': ['affeer', 'raffee'],\n 'affiance': ['affiance', 'caffeina'],\n 'affirmer': ['affirmer', 'reaffirm'],\n 'afflicter': ['afflicter', 'reafflict'],\n 'affy': ['affy', 'yaff'],\n 'afghan': ['afghan', 'hafgan'],\n 'afield': ['afield', 'defial'],\n 'afire': ['afire', 'feria'],\n 'aflare': ['aflare', 'rafael'],\n 'aflat': ['aflat', 'fatal'],\n 'afresh': ['afresh', 'fasher', 'ferash'],\n 'afret': ['afret', 'after'],\n 'afric': ['afric', 'firca'],\n 'afshar': ['afshar', 'ashraf'],\n 'aft': ['aft', 'fat'],\n 'after': ['afret', 'after'],\n 'afteract': ['afteract', 'artefact', 'farcetta', 'farctate'],\n 'afterage': ['afterage', 'fregatae'],\n 'afterblow': ['afterblow', 'batfowler'],\n 'aftercome': ['aftercome', 'forcemeat'],\n 'aftercrop': ['aftercrop', 'prefactor'],\n 'aftergo': ['aftergo', 'fagoter'],\n 'afterguns': ['afterguns', 'transfuge'],\n 'aftermath': ['aftermath', 'hamfatter'],\n 'afterstate': ['afterstate', 'aftertaste'],\n 'aftertaste': ['afterstate', 'aftertaste'],\n 'afunctional': ['afunctional', 'unfactional'],\n 'agade': ['adage', 'agade'],\n 'agal': ['agal', 'agla', 'alga', 'gala'],\n 'agalite': ['agalite', 'tailage', 'taliage'],\n 'agalma': ['agalma', 'malaga'],\n 'agama': ['agama', 'amaga'],\n 'agamid': ['agamid', 'madiga'],\n 'agapeti': ['agapeti', 'agpaite'],\n 'agapornis': ['agapornis', 'sporangia'],\n 'agar': ['agar', 'agra', 'gara', 'raga'],\n 'agaricin': ['agaricin', 'garcinia'],\n 'agau': ['agau', 'agua'],\n 'aged': ['aged', 'egad', 'gade'],\n 'ageless': ['ageless', 'eagless'],\n 'agen': ['agen', 'gaen', 'gane', 'gean', 'gena'],\n 'agenesic': ['agenesic', 'genesiac'],\n 'agenesis': ['agenesis', 'assignee'],\n 'agential': ['agential', 'alginate'],\n 'agentive': ['agentive', 'negative'],\n 'ager': ['ager', 'agre', 'gare', 'gear', 'rage'],\n 'agger': ['agger', 'gager', 'regga'],\n 'aggeration': ['aggeration', 'agregation'],\n 'aggry': ['aggry', 'raggy'],\n 'agialid': ['agialid', 'galidia'],\n 'agib': ['agib', 'biga', 'gabi'],\n 'agiel': ['agiel', 'agile', 'galei'],\n 'agile': ['agiel', 'agile', 'galei'],\n 'agileness': ['agileness', 'signalese'],\n 'agistment': ['agistment', 'magnetist'],\n 'agistor': ['agistor', 'agrotis', 'orgiast'],\n 'agla': ['agal', 'agla', 'alga', 'gala'],\n 'aglaos': ['aglaos', 'salago'],\n 'aglare': ['aglare', 'alegar', 'galera', 'laager'],\n 'aglet': ['aglet', 'galet'],\n 'agley': ['agley', 'galey'],\n 'agmatine': ['agmatine', 'agminate'],\n 'agminate': ['agmatine', 'agminate'],\n 'agminated': ['agminated', 'diamagnet'],\n 'agnail': ['agnail', 'linaga'],\n 'agname': ['agname', 'manage'],\n 'agnel': ['agnel', 'angel', 'angle', 'galen', 'genal', 'glean', 'lagen'],\n 'agnes': ['agnes', 'gesan'],\n 'agnize': ['agnize', 'ganzie'],\n 'agnosis': ['agnosis', 'ganosis'],\n 'agnostic': ['agnostic', 'coasting'],\n 'agnus': ['agnus', 'angus', 'sugan'],\n 'ago': ['ago', 'goa'],\n 'agon': ['agon', 'ango', 'gaon', 'goan', 'gona'],\n 'agonal': ['agonal', 'angola'],\n 'agone': ['agone', 'genoa'],\n 'agoniadin': ['agoniadin', 'anangioid', 'ganoidian'],\n 'agonic': ['agonic', 'angico', 'gaonic', 'goniac'],\n 'agonista': ['agonista', 'santiago'],\n 'agonizer': ['agonizer', 'orangize', 'organize'],\n 'agpaite': ['agapeti', 'agpaite'],\n 'agra': ['agar', 'agra', 'gara', 'raga'],\n 'agral': ['agral', 'argal'],\n 'agrania': ['agrania', 'angaria', 'niagara'],\n 'agre': ['ager', 'agre', 'gare', 'gear', 'rage'],\n 'agree': ['agree', 'eager', 'eagre'],\n 'agreed': ['agreed', 'geared'],\n 'agregation': ['aggeration', 'agregation'],\n 'agrege': ['agrege', 'raggee'],\n 'agrestian': ['agrestian', 'gerastian', 'stangeria'],\n 'agrestic': ['agrestic', 'ergastic'],\n 'agria': ['agria', 'igara'],\n 'agricolist': ['agricolist', 'algoristic'],\n 'agrilus': ['agrilus', 'gularis'],\n 'agrin': ['agrin', 'grain'],\n 'agrito': ['agrito', 'ortiga'],\n 'agroan': ['agroan', 'angora', 'anogra', 'arango', 'argoan', 'onagra'],\n 'agrom': ['agrom', 'morga'],\n 'agrotis': ['agistor', 'agrotis', 'orgiast'],\n 'aground': ['aground', 'durango'],\n 'agrufe': ['agrufe', 'gaufer', 'gaufre'],\n 'agrypnia': ['agrypnia', 'paginary'],\n 'agsam': ['agsam', 'magas'],\n 'agua': ['agau', 'agua'],\n 'ague': ['ague', 'auge'],\n 'agush': ['agush', 'saugh'],\n 'agust': ['agust', 'tsuga'],\n 'agy': ['agy', 'gay'],\n 'ah': ['ah', 'ha'],\n 'ahem': ['ahem', 'haem', 'hame'],\n 'ahet': ['ahet', 'haet', 'hate', 'heat', 'thea'],\n 'ahey': ['ahey', 'eyah', 'yeah'],\n 'ahind': ['ahind', 'dinah'],\n 'ahint': ['ahint', 'hiant', 'tahin'],\n 'ahir': ['ahir', 'hair'],\n 'ahmed': ['ahmed', 'hemad'],\n 'ahmet': ['ahmet', 'thema'],\n 'aho': ['aho', 'hao'],\n 'ahom': ['ahom', 'moha'],\n 'ahong': ['ahong', 'hogan'],\n 'ahorse': ['ahorse', 'ashore', 'hoarse', 'shorea'],\n 'ahoy': ['ahoy', 'hoya'],\n 'ahriman': ['ahriman', 'miranha'],\n 'ahsan': ['ahsan', 'hansa', 'hasan'],\n 'aht': ['aht', 'hat', 'tha'],\n 'ahtena': ['ahtena', 'aneath', 'athena'],\n 'ahu': ['ahu', 'auh', 'hau'],\n 'ahum': ['ahum', 'huma'],\n 'ahunt': ['ahunt', 'haunt', 'thuan', 'unhat'],\n 'aid': ['aid', 'ida'],\n 'aidance': ['aidance', 'canidae'],\n 'aide': ['aide', 'idea'],\n 'aidenn': ['aidenn', 'andine', 'dannie', 'indane'],\n 'aider': ['aider', 'deair', 'irade', 'redia'],\n 'aides': ['aides', 'aside', 'sadie'],\n 'aiel': ['aiel', 'aile', 'elia'],\n 'aiglet': ['aiglet', 'ligate', 'taigle', 'tailge'],\n 'ail': ['ail', 'ila', 'lai'],\n 'ailantine': ['ailantine', 'antialien'],\n 'ailanto': ['ailanto', 'alation', 'laotian', 'notalia'],\n 'aile': ['aiel', 'aile', 'elia'],\n 'aileen': ['aileen', 'elaine'],\n 'aileron': ['aileron', 'alienor'],\n 'ailing': ['ailing', 'angili', 'nilgai'],\n 'ailment': ['ailment', 'aliment'],\n 'aim': ['aim', 'ami', 'ima'],\n 'aimer': ['aimer', 'maire', 'marie', 'ramie'],\n 'aimless': ['aimless', 'melissa', 'seismal'],\n 'ainaleh': ['ainaleh', 'halenia'],\n 'aint': ['aint', 'anti', 'tain', 'tina'],\n 'aion': ['aion', 'naio'],\n 'air': ['air', 'ira', 'ria'],\n 'aira': ['aira', 'aria', 'raia'],\n 'airan': ['airan', 'arain', 'arian'],\n 'airdrome': ['airdrome', 'armoried'],\n 'aire': ['aire', 'eria'],\n 'airer': ['airer', 'arrie'],\n 'airlike': ['airlike', 'kiliare'],\n 'airman': ['airman', 'amarin', 'marian', 'marina', 'mirana'],\n 'airplane': ['airplane', 'perianal'],\n 'airplanist': ['airplanist', 'triplasian'],\n 'airt': ['airt', 'rita', 'tari', 'tiar'],\n 'airy': ['airy', 'yair'],\n 'aisle': ['aisle', 'elias'],\n 'aisled': ['aisled', 'deasil', 'ladies', 'sailed'],\n 'aisling': ['aisling', 'sailing'],\n 'aissor': ['aissor', 'rissoa'],\n 'ait': ['ait', 'ati', 'ita', 'tai'],\n 'aitch': ['aitch', 'chait', 'chati', 'chita', 'taich', 'tchai'],\n 'aition': ['aition', 'itonia'],\n 'aizle': ['aizle', 'eliza'],\n 'ajar': ['ajar', 'jara', 'raja'],\n 'ajhar': ['ajhar', 'rajah'],\n 'ajuga': ['ajuga', 'jagua'],\n 'ak': ['ak', 'ka'],\n 'akal': ['akal', 'kala'],\n 'akali': ['akali', 'alaki'],\n 'akan': ['akan', 'kana'],\n 'ake': ['ake', 'kea'],\n 'akebi': ['akebi', 'bakie'],\n 'akha': ['akha', 'kaha'],\n 'akim': ['akim', 'maki'],\n 'akin': ['akin', 'kina', 'naik'],\n 'akka': ['akka', 'kaka'],\n 'aknee': ['aknee', 'ankee', 'keena'],\n 'ako': ['ako', 'koa', 'oak', 'oka'],\n 'akoasma': ['akoasma', 'amakosa'],\n 'aku': ['aku', 'auk', 'kua'],\n 'al': ['al', 'la'],\n 'ala': ['aal', 'ala'],\n 'alacritous': ['alacritous', 'lactarious', 'lactosuria'],\n 'alain': ['alain', 'alani', 'liana'],\n 'alaki': ['akali', 'alaki'],\n 'alalite': ['alalite', 'tillaea'],\n 'alamo': ['alamo', 'aloma'],\n 'alan': ['alan', 'anal', 'lana'],\n 'alangin': ['alangin', 'anginal', 'anglian', 'nagnail'],\n 'alangine': ['alangine', 'angelina', 'galenian'],\n 'alani': ['alain', 'alani', 'liana'],\n 'alanine': ['alanine', 'linnaea'],\n 'alans': ['alans', 'lanas', 'nasal'],\n 'alantic': ['actinal', 'alantic', 'alicant', 'antical'],\n 'alantolic': ['alantolic', 'allantoic'],\n 'alanyl': ['alanyl', 'anally'],\n 'alares': ['alares', 'arales'],\n 'alaria': ['alaria', 'aralia'],\n 'alaric': ['alaric', 'racial'],\n 'alarm': ['alarm', 'malar', 'maral', 'marla', 'ramal'],\n 'alarmable': ['alarmable', 'ambarella'],\n 'alarmedly': ['alarmedly', 'medallary'],\n 'alarming': ['alarming', 'marginal'],\n 'alarmingly': ['alarmingly', 'marginally'],\n 'alarmist': ['alarmist', 'alastrim'],\n 'alas': ['alas', 'lasa'],\n 'alastair': ['alastair', 'salariat'],\n 'alaster': ['alaster', 'tarsale'],\n 'alastrim': ['alarmist', 'alastrim'],\n 'alatern': ['alatern', 'lateran'],\n 'alaternus': ['alaternus', 'saturnale'],\n 'alation': ['ailanto', 'alation', 'laotian', 'notalia'],\n 'alb': ['alb', 'bal', 'lab'],\n 'alba': ['alba', 'baal', 'bala'],\n 'alban': ['alban', 'balan', 'banal', 'laban', 'nabal', 'nabla'],\n 'albanite': ['albanite', 'balanite', 'nabalite'],\n 'albardine': ['albardine', 'drainable'],\n 'albarium': ['albarium', 'brumalia'],\n 'albata': ['albata', 'atabal', 'balata'],\n 'albatros': ['abrastol', 'albatros'],\n 'albe': ['abel', 'able', 'albe', 'bale', 'beal', 'bela', 'blae'],\n 'albedo': ['albedo', 'doable'],\n 'albee': ['abele', 'albee'],\n 'albeit': ['albeit',\n            'albite',\n            'baltei',\n            'belait',\n            'betail',\n            'bletia',\n            'libate'],\n 'albert': ['albert', 'balter', 'labret', 'tabler'],\n 'alberta': ['alberta', 'latebra', 'ratable'],\n 'albertina': ['albertina', 'trainable'],\n 'alberto': ['alberto', 'bloater', 'latrobe'],\n 'albetad': ['albetad', 'datable'],\n 'albi': ['albi', 'bail', 'bali'],\n 'albian': ['albian', 'bilaan'],\n 'albin': ['albin', 'binal', 'blain'],\n 'albino': ['albino', 'albion', 'alboin', 'oliban'],\n 'albion': ['albino', 'albion', 'alboin', 'oliban'],\n 'albite': ['albeit',\n            'albite',\n            'baltei',\n            'belait',\n            'betail',\n            'bletia',\n            'libate'],\n 'alboin': ['albino', 'albion', 'alboin', 'oliban'],\n 'alboranite': ['alboranite', 'rationable'],\n 'albronze': ['albronze', 'blazoner'],\n 'albuca': ['albuca', 'bacula'],\n 'albuminate': ['albuminate', 'antelabium'],\n 'alburnum': ['alburnum', 'laburnum'],\n 'alcaic': ['alcaic', 'cicala'],\n 'alcaide': ['alcaide', 'alcidae'],\n 'alcamine': ['alcamine', 'analcime', 'calamine', 'camelina'],\n 'alcantarines': ['alcantarines', 'lancasterian'],\n 'alcedo': ['alcedo', 'dacelo'],\n 'alces': ['alces', 'casel', 'scale'],\n 'alchemic': ['alchemic', 'chemical'],\n 'alchemistic': ['alchemistic', 'hemiclastic'],\n 'alchera': ['alchera', 'archeal'],\n 'alchitran': ['alchitran', 'clathrina'],\n 'alcicornium': ['acroclinium', 'alcicornium'],\n 'alcidae': ['alcaide', 'alcidae'],\n 'alcidine': ['alcidine', 'danielic', 'lecaniid'],\n 'alcine': ['alcine', 'ancile'],\n 'alco': ['alco', 'coal', 'cola', 'loca'],\n 'alcoate': ['alcoate', 'coelata'],\n 'alcogel': ['alcogel', 'collage'],\n 'alcor': ['alcor', 'calor', 'carlo', 'carol', 'claro', 'coral'],\n 'alcoran': ['alcoran', 'ancoral', 'carolan'],\n 'alcoranic': ['acronical', 'alcoranic'],\n 'alcove': ['alcove', 'coeval', 'volcae'],\n 'alcyon': ['alcyon', 'cyanol'],\n 'alcyone': ['alcyone', 'cyanole'],\n 'aldamine': ['aldamine', 'lamnidae'],\n 'aldeament': ['aldeament', 'mandelate'],\n 'alder': ['alder', 'daler', 'lader'],\n 'aldermanry': ['aldermanry', 'marylander'],\n 'aldern': ['aldern',\n            'darnel',\n            'enlard',\n            'lander',\n            'lenard',\n            'randle',\n            'reland'],\n 'aldime': ['aldime', 'mailed', 'medial'],\n 'aldine': ['aldine', 'daniel', 'delian', 'denial', 'enalid', 'leadin'],\n 'aldus': ['aldus', 'sauld'],\n 'ale': ['ale', 'lea'],\n 'alec': ['acle', 'alec', 'lace'],\n 'aleconner': ['aleconner', 'noncereal'],\n 'alecost': ['alecost', 'lactose', 'scotale', 'talcose'],\n 'alectoris': ['alectoris', 'sarcolite', 'sclerotia', 'sectorial'],\n 'alectrion': ['alectrion', 'clarionet', 'crotaline', 'locarnite'],\n 'alectryon': ['alectryon', 'tolerancy'],\n 'alecup': ['alecup', 'clupea'],\n 'alef': ['alef', 'feal', 'flea', 'leaf'],\n 'aleft': ['aleft', 'alfet', 'fetal', 'fleta'],\n 'alegar': ['aglare', 'alegar', 'galera', 'laager'],\n 'alem': ['alem', 'alme', 'lame', 'leam', 'male', 'meal', 'mela'],\n 'alemanni': ['alemanni', 'melanian'],\n 'alemite': ['alemite', 'elamite'],\n 'alen': ['alen', 'lane', 'lean', 'lena', 'nael', 'neal'],\n 'aleph': ['aleph', 'pheal'],\n 'alepot': ['alepot', 'pelota'],\n 'alerce': ['alerce', 'cereal', 'relace'],\n 'alerse': ['alerse', 'leaser', 'reales', 'resale', 'reseal', 'sealer'],\n 'alert': ['alert', 'alter', 'artel', 'later', 'ratel', 'taler', 'telar'],\n 'alertly': ['alertly', 'elytral'],\n 'alestake': ['alestake', 'eastlake'],\n 'aletap': ['aletap', 'palate', 'platea'],\n 'aletris': ['aletris', 'alister', 'listera', 'realist', 'saltier'],\n 'aleuronic': ['aleuronic', 'urceolina'],\n 'aleut': ['aleut', 'atule'],\n 'aleutic': ['aleutic', 'auletic', 'caulite', 'lutecia'],\n 'alevin': ['alevin', 'alvine', 'valine', 'veinal', 'venial', 'vineal'],\n 'alex': ['alex', 'axel', 'axle'],\n 'alexandrian': ['alexandrian', 'alexandrina'],\n 'alexandrina': ['alexandrian', 'alexandrina'],\n 'alexin': ['alexin', 'xenial'],\n 'aleyard': ['aleyard', 'already'],\n 'alfenide': ['alfenide', 'enfilade'],\n 'alfet': ['aleft', 'alfet', 'fetal', 'fleta'],\n 'alfred': ['alfred', 'fardel'],\n 'alfur': ['alfur', 'fural'],\n 'alga': ['agal', 'agla', 'alga', 'gala'],\n 'algae': ['algae', 'galea'],\n 'algal': ['algal', 'galla'],\n 'algebar': ['algebar', 'algebra'],\n 'algebra': ['algebar', 'algebra'],\n 'algedi': ['algedi', 'galeid'],\n 'algedo': ['algedo', 'geodal'],\n 'algedonic': ['algedonic', 'genocidal'],\n 'algenib': ['algenib', 'bealing', 'belgian', 'bengali'],\n 'algerian': ['algerian', 'geranial', 'regalian'],\n 'algernon': ['algernon', 'nonglare'],\n 'algesia': ['algesia', 'sailage'],\n 'algesis': ['algesis', 'glassie'],\n 'algieba': ['algieba', 'bailage'],\n 'algin': ['algin', 'align', 'langi', 'liang', 'linga'],\n 'alginate': ['agential', 'alginate'],\n 'algine': ['algine', 'genial', 'linage'],\n 'algist': ['algist', 'gaslit'],\n 'algometer': ['algometer', 'glomerate'],\n 'algometric': ['algometric', 'melotragic'],\n 'algomian': ['algomian', 'magnolia'],\n 'algor': ['algor', 'argol', 'goral', 'largo'],\n 'algoristic': ['agricolist', 'algoristic'],\n 'algorithm': ['algorithm', 'logarithm'],\n 'algorithmic': ['algorithmic', 'logarithmic'],\n 'algraphic': ['algraphic', 'graphical'],\n 'algum': ['algum', 'almug', 'glaum', 'gluma', 'mulga'],\n 'alibility': ['alibility', 'liability'],\n 'alible': ['alible', 'belial', 'labile', 'liable'],\n 'alicant': ['actinal', 'alantic', 'alicant', 'antical'],\n 'alice': ['alice', 'celia', 'ileac'],\n 'alichel': ['alichel', 'challie', 'helical'],\n 'alida': ['adlai', 'alida'],\n 'alien': ['alien', 'aline', 'anile', 'elain', 'elian', 'laine', 'linea'],\n 'alienation': ['alienation', 'alineation'],\n 'alienator': ['alienator', 'rationale'],\n 'alienism': ['alienism', 'milesian'],\n 'alienor': ['aileron', 'alienor'],\n 'alif': ['alif', 'fail'],\n 'aligerous': ['aligerous', 'glaireous'],\n 'align': ['algin', 'align', 'langi', 'liang', 'linga'],\n 'aligner': ['aligner', 'engrail', 'realign', 'reginal'],\n 'alignment': ['alignment', 'lamenting'],\n 'alike': ['alike', 'lakie'],\n 'alikeness': ['alikeness', 'leakiness'],\n 'alima': ['alima', 'lamia'],\n 'aliment': ['ailment', 'aliment'],\n 'alimenter': ['alimenter', 'marteline'],\n 'alimentic': ['alimentic', 'antilemic', 'melanitic', 'metanilic'],\n 'alimonied': ['alimonied', 'maleinoid'],\n 'alin': ['alin', 'anil', 'lain', 'lina', 'nail'],\n 'aline': ['alien', 'aline', 'anile', 'elain', 'elian', 'laine', 'linea'],\n 'alineation': ['alienation', 'alineation'],\n 'aliped': ['aliped', 'elapid'],\n 'aliptes': ['aliptes', 'pastile', 'talipes'],\n 'aliptic': ['aliptic', 'aplitic'],\n 'aliseptal': ['aliseptal', 'pallasite'],\n 'alish': ['alish', 'hilsa'],\n 'alisier': ['alisier', 'israeli'],\n 'aliso': ['aliso', 'alois'],\n 'alison': ['alison', 'anolis'],\n 'alisp': ['alisp', 'lapsi'],\n 'alist': ['alist', 'litas', 'slait', 'talis'],\n 'alister': ['aletris', 'alister', 'listera', 'realist', 'saltier'],\n 'alit': ['alit', 'tail', 'tali'],\n 'alite': ['alite', 'laeti'],\n 'aliunde': ['aliunde', 'unideal'],\n 'aliveness': ['aliveness', 'vealiness'],\n 'alix': ['alix', 'axil'],\n 'alk': ['alk', 'lak'],\n 'alkalizer': ['alkalizer', 'lazarlike'],\n 'alkamin': ['alkamin', 'malakin'],\n 'alkene': ['alkene', 'lekane'],\n 'alkes': ['alkes', 'sakel', 'slake'],\n 'alkine': ['alkine', 'ilkane', 'inlake', 'inleak'],\n 'alky': ['alky', 'laky'],\n 'alkylic': ['alkylic', 'lilacky'],\n 'allagite': ['allagite', 'alligate', 'talliage'],\n 'allah': ['allah', 'halal'],\n 'allantoic': ['alantolic', 'allantoic'],\n 'allay': ['allay', 'yalla'],\n 'allayer': ['allayer', 'yallaer'],\n 'allbone': ['allbone', 'bellona'],\n 'alle': ['alle', 'ella', 'leal'],\n 'allecret': ['allecret', 'cellaret'],\n 'allegate': ['allegate', 'ellagate'],\n 'allegorist': ['allegorist', 'legislator'],\n 'allergen': ['allergen', 'generall'],\n 'allergia': ['allergia', 'galleria'],\n 'allergin': ['allergin', 'gralline'],\n 'allergy': ['allergy', 'gallery', 'largely', 'regally'],\n 'alliable': ['alliable', 'labiella'],\n 'alliably': ['alliably', 'labially'],\n 'alliance': ['alliance', 'canaille'],\n 'alliancer': ['alliancer', 'ralliance'],\n 'allie': ['allie', 'leila', 'lelia'],\n 'allies': ['allies', 'aselli'],\n 'alligate': ['allagite', 'alligate', 'talliage'],\n 'allium': ['allium', 'alulim', 'muilla'],\n 'allocation': ['allocation', 'locational'],\n 'allocute': ['allocute', 'loculate'],\n 'allocution': ['allocution', 'loculation'],\n 'allogenic': ['allogenic', 'collegian'],\n 'allonym': ['allonym', 'malonyl'],\n 'allopathy': ['allopathy', 'lalopathy'],\n 'allopatric': ['allopatric', 'patrilocal'],\n 'allot': ['allot', 'atoll'],\n 'allothogenic': ['allothogenic', 'ethnological'],\n 'allover': ['allover', 'overall'],\n 'allower': ['allower', 'reallow'],\n 'alloy': ['alloy', 'loyal'],\n 'allude': ['allude', 'aludel'],\n 'allure': ['allure', 'laurel'],\n 'alma': ['alma', 'amla', 'lama', 'mala'],\n 'almach': ['almach', 'chamal'],\n 'almaciga': ['almaciga', 'macaglia'],\n 'almain': ['almain', 'animal', 'lamina', 'manila'],\n 'alman': ['alman', 'lamna', 'manal'],\n 'almandite': ['almandite', 'laminated'],\n 'alme': ['alem', 'alme', 'lame', 'leam', 'male', 'meal', 'mela'],\n 'almerian': ['almerian', 'manerial'],\n 'almoign': ['almoign', 'loaming'],\n 'almon': ['almon', 'monal'],\n 'almond': ['almond', 'dolman'],\n 'almoner': ['almoner', 'moneral', 'nemoral'],\n 'almonry': ['almonry', 'romanly'],\n 'alms': ['alms', 'salm', 'slam'],\n 'almuce': ['almuce', 'caelum', 'macule'],\n 'almude': ['almude', 'maudle'],\n 'almug': ['algum', 'almug', 'glaum', 'gluma', 'mulga'],\n 'almuten': ['almuten', 'emulant'],\n 'aln': ['aln', 'lan'],\n 'alnage': ['alnage', 'angela', 'galena', 'lagena'],\n 'alnico': ['alnico', 'cliona', 'oilcan'],\n 'alnilam': ['alnilam', 'manilla'],\n 'alnoite': ['alnoite', 'elation', 'toenail'],\n 'alnuin': ['alnuin', 'unnail'],\n 'alo': ['alo', 'lao', 'loa'],\n 'alochia': ['acholia', 'alochia'],\n 'alod': ['alod', 'dola', 'load', 'odal'],\n 'aloe': ['aloe', 'olea'],\n 'aloetic': ['aloetic', 'coalite'],\n 'aloft': ['aloft', 'float', 'flota'],\n 'alogian': ['alogian', 'logania'],\n 'alogical': ['alogical', 'colalgia'],\n 'aloid': ['aloid', 'dolia', 'idola'],\n 'aloin': ['aloin', 'anoil', 'anoli'],\n 'alois': ['aliso', 'alois'],\n 'aloma': ['alamo', 'aloma'],\n 'alone': ['alone', 'anole', 'olena'],\n 'along': ['along', 'gonal', 'lango', 'longa', 'nogal'],\n 'alonso': ['alonso', 'alsoon', 'saloon'],\n 'alonzo': ['alonzo', 'zoonal'],\n 'alop': ['alop', 'opal'],\n 'alopecist': ['alopecist', 'altiscope', 'epicostal', 'scapolite'],\n 'alosa': ['alosa', 'loasa', 'oasal'],\n 'alose': ['alose', 'osela', 'solea'],\n 'alow': ['alow', 'awol', 'lowa'],\n 'aloxite': ['aloxite', 'oxalite'],\n 'alp': ['alp', 'lap', 'pal'],\n 'alpeen': ['alpeen', 'lenape', 'pelean'],\n 'alpen': ['alpen', 'nepal', 'panel', 'penal', 'plane'],\n 'alpestral': ['alpestral', 'palestral'],\n 'alpestrian': ['alpestrian', 'palestrian', 'psalterian'],\n 'alpestrine': ['alpestrine', 'episternal', 'interlapse', 'presential'],\n 'alphenic': ['alphenic', 'cephalin'],\n 'alphonse': ['alphonse', 'phenosal'],\n 'alphos': ['alphos', 'pholas'],\n 'alphosis': ['alphosis', 'haplosis'],\n 'alpid': ['alpid', 'plaid'],\n 'alpieu': ['alpieu', 'paulie'],\n 'alpine': ['alpine', 'nepali', 'penial', 'pineal'],\n 'alpinist': ['alpinist', 'antislip'],\n 'alpist': ['alpist', 'pastil', 'spital'],\n 'alraun': ['alraun', 'alruna', 'ranula'],\n 'already': ['aleyard', 'already'],\n 'alrighty': ['alrighty', 'arightly'],\n 'alruna': ['alraun', 'alruna', 'ranula'],\n 'alsine': ['alsine', 'neslia', 'saline', 'selina', 'silane'],\n 'also': ['also', 'sola'],\n 'alsoon': ['alonso', 'alsoon', 'saloon'],\n 'alstonidine': ['alstonidine', 'nonidealist'],\n 'alstonine': ['alstonine', 'tensional'],\n 'alt': ['alt', 'lat', 'tal'],\n 'altaian': ['altaian', 'latania', 'natalia'],\n 'altaic': ['altaic', 'altica'],\n 'altaid': ['adital', 'altaid'],\n 'altair': ['altair', 'atrail', 'atrial', 'lariat', 'latria', 'talari'],\n 'altamira': ['altamira', 'matralia'],\n 'altar': ['altar', 'artal', 'ratal', 'talar'],\n 'altared': ['altared', 'laterad'],\n 'altarist': ['altarist', 'striatal'],\n 'alter': ['alert', 'alter', 'artel', 'later', 'ratel', 'taler', 'telar'],\n 'alterability': ['alterability', 'bilaterality', 'relatability'],\n 'alterable': ['alterable', 'relatable'],\n 'alterant': ['alterant', 'tarletan'],\n 'alterer': ['alterer', 'realter', 'relater'],\n 'altern': ['altern', 'antler', 'learnt', 'rental', 'ternal'],\n 'alterne': ['alterne', 'enteral', 'eternal', 'teleran', 'teneral'],\n 'althea': ['althea', 'elatha'],\n 'altho': ['altho', 'lhota', 'loath'],\n 'althorn': ['althorn', 'anthrol', 'thronal'],\n 'altica': ['altaic', 'altica'],\n 'altin': ['altin', 'latin'],\n 'altiscope': ['alopecist', 'altiscope', 'epicostal', 'scapolite'],\n 'altitude': ['altitude', 'latitude'],\n 'altitudinal': ['altitudinal', 'latitudinal'],\n 'altitudinarian': ['altitudinarian', 'latitudinarian'],\n 'alto': ['alto', 'lota'],\n 'altrices': ['altrices', 'selictar'],\n 'altruism': ['altruism', 'muralist', 'traulism', 'ultraism'],\n 'altruist': ['altruist', 'ultraist'],\n 'altruistic': ['altruistic', 'truistical', 'ultraistic'],\n 'aludel': ['allude', 'aludel'],\n 'aludra': ['adular', 'aludra', 'radula'],\n 'alulet': ['alulet', 'luteal'],\n 'alulim': ['allium', 'alulim', 'muilla'],\n 'alum': ['alum', 'maul'],\n 'aluminate': ['aluminate', 'alumniate'],\n 'aluminide': ['aluminide', 'unimedial'],\n 'aluminosilicate': ['aluminosilicate', 'silicoaluminate'],\n 'alumna': ['alumna', 'manual'],\n 'alumni': ['alumni', 'unmail'],\n 'alumniate': ['aluminate', 'alumniate'],\n 'alur': ['alur', 'laur', 'lura', 'raul', 'ural'],\n 'alure': ['alure', 'ureal'],\n 'alurgite': ['alurgite', 'ligature'],\n 'aluta': ['aluta', 'taula'],\n 'alvan': ['alvan', 'naval'],\n 'alvar': ['alvar', 'arval', 'larva'],\n 'alveus': ['alveus', 'avulse'],\n 'alvin': ['alvin', 'anvil', 'nival', 'vinal'],\n 'alvine': ['alevin', 'alvine', 'valine', 'veinal', 'venial', 'vineal'],\n 'aly': ['aly', 'lay'],\n 'alypin': ['alypin', 'pialyn'],\n 'alytes': ['alytes', 'astely', 'lysate', 'stealy'],\n 'am': ['am', 'ma'],\n 'ama': ['aam', 'ama'],\n 'amacrine': ['amacrine', 'american', 'camerina', 'cinerama'],\n 'amadi': ['amadi', 'damia', 'madia', 'maida'],\n 'amaethon': ['amaethon', 'thomaean'],\n 'amaga': ['agama', 'amaga'],\n 'amah': ['amah', 'maha'],\n 'amain': ['amain', 'amani', 'amnia', 'anima', 'mania'],\n 'amakosa': ['akoasma', 'amakosa'],\n 'amalgam': ['amalgam', 'malagma'],\n 'amang': ['amang', 'ganam', 'manga'],\n 'amani': ['amain', 'amani', 'amnia', 'anima', 'mania'],\n 'amanist': ['amanist', 'stamina'],\n 'amanitin': ['amanitin', 'maintain'],\n 'amanitine': ['amanitine', 'inanimate'],\n 'amanori': ['amanori', 'moarian'],\n 'amapa': ['amapa', 'apama'],\n 'amar': ['amar', 'amra', 'mara', 'rama'],\n 'amarin': ['airman', 'amarin', 'marian', 'marina', 'mirana'],\n 'amaroid': ['amaroid', 'diorama'],\n 'amarth': ['amarth', 'martha'],\n 'amass': ['amass', 'assam', 'massa', 'samas'],\n 'amasser': ['amasser', 'reamass'],\n 'amati': ['amati', 'amita', 'matai'],\n 'amatorian': ['amatorian', 'inamorata'],\n 'amaurosis': ['amaurosis', 'mosasauri'],\n 'amazonite': ['amazonite', 'anatomize'],\n 'amba': ['amba', 'maba'],\n 'ambar': ['abram', 'ambar'],\n 'ambarella': ['alarmable', 'ambarella'],\n 'ambash': ['ambash', 'shamba'],\n 'ambay': ['ambay', 'mbaya'],\n 'ambeer': ['ambeer', 'beamer'],\n 'amber': ['amber', 'bearm', 'bemar', 'bream', 'embar'],\n 'ambier': ['ambier', 'bremia', 'embira'],\n 'ambit': ['ambit', 'imbat'],\n 'ambivert': ['ambivert', 'verbatim'],\n 'amble': ['amble', 'belam', 'blame', 'mabel'],\n 'ambler': ['ambler', 'blamer', 'lamber', 'marble', 'ramble'],\n 'ambling': ['ambling', 'blaming'],\n 'amblingly': ['amblingly', 'blamingly'],\n 'ambo': ['ambo', 'boma'],\n 'ambos': ['ambos', 'sambo'],\n 'ambrein': ['ambrein', 'mirbane'],\n 'ambrette': ['ambrette', 'tambreet'],\n 'ambrose': ['ambrose', 'mesobar'],\n 'ambrosia': ['ambrosia', 'saboraim'],\n 'ambrosin': ['ambrosin', 'barosmin', 'sabromin'],\n 'ambry': ['ambry', 'barmy'],\n 'ambury': ['ambury', 'aumbry'],\n 'ambush': ['ambush', 'shambu'],\n 'amchoor': ['amchoor', 'ochroma'],\n 'ame': ['ame', 'mae'],\n 'ameed': ['adeem', 'ameed', 'edema'],\n 'ameen': ['ameen', 'amene', 'enema'],\n 'amelification': ['amelification', 'maleficiation'],\n 'ameliorant': ['ameliorant', 'lomentaria'],\n 'amellus': ['amellus', 'malleus'],\n 'amelu': ['amelu', 'leuma', 'ulema'],\n 'amelus': ['amelus', 'samuel'],\n 'amen': ['amen', 'enam', 'mane', 'mean', 'name', 'nema'],\n 'amenability': ['amenability', 'nameability'],\n 'amenable': ['amenable', 'nameable'],\n 'amend': ['amend', 'mande', 'maned'],\n 'amende': ['amende', 'demean', 'meaned', 'nadeem'],\n 'amender': ['amender', 'meander', 'reamend', 'reedman'],\n 'amends': ['amends', 'desman'],\n 'amene': ['ameen', 'amene', 'enema'],\n 'amenia': ['amenia', 'anemia'],\n 'amenism': ['amenism', 'immanes', 'misname'],\n 'amenite': ['amenite', 'etamine', 'matinee'],\n 'amenorrheal': ['amenorrheal', 'melanorrhea'],\n 'ament': ['ament', 'meant', 'teman'],\n 'amental': ['amental', 'leatman'],\n 'amentia': ['amentia', 'aminate', 'anamite', 'animate'],\n 'amerce': ['amerce', 'raceme'],\n 'amercer': ['amercer', 'creamer'],\n 'american': ['amacrine', 'american', 'camerina', 'cinerama'],\n 'amerind': ['adermin', 'amerind', 'dimeran'],\n 'amerism': ['amerism', 'asimmer', 'sammier'],\n 'ameristic': ['ameristic', 'armistice', 'artemisic'],\n 'amesite': ['amesite', 'mesitae', 'semitae'],\n 'ametria': ['ametria', 'artemia', 'meratia', 'ramaite'],\n 'ametrope': ['ametrope', 'metapore'],\n 'amex': ['amex', 'exam', 'xema'],\n 'amgarn': ['amgarn', 'mangar', 'marang', 'ragman'],\n 'amhar': ['amhar', 'mahar', 'mahra'],\n 'amherstite': ['amherstite', 'hemistater'],\n 'amhran': ['amhran', 'harman', 'mahran'],\n 'ami': ['aim', 'ami', 'ima'],\n 'amia': ['amia', 'maia'],\n 'amic': ['amic', 'mica'],\n 'amical': ['amical', 'camail', 'lamaic'],\n 'amiced': ['amiced', 'decima'],\n 'amicicide': ['amicicide', 'cimicidae'],\n 'amicron': ['amicron', 'marconi', 'minorca', 'romanic'],\n 'amid': ['admi', 'amid', 'madi', 'maid'],\n 'amidate': ['adamite', 'amidate'],\n 'amide': ['amide', 'damie', 'media'],\n 'amidide': ['amidide', 'diamide', 'mididae'],\n 'amidin': ['amidin', 'damnii'],\n 'amidine': ['amidine', 'diamine'],\n 'amidism': ['amidism', 'maidism'],\n 'amidist': ['amidist', 'dimatis'],\n 'amidon': ['amidon', 'daimon', 'domain'],\n 'amidophenol': ['amidophenol', 'monodelphia'],\n 'amidst': ['amidst', 'datism'],\n 'amigo': ['amigo', 'imago'],\n 'amiidae': ['amiidae', 'maiidae'],\n 'amil': ['amil', 'amli', 'lima', 'mail', 'mali', 'mila'],\n 'amiles': ['amiles', 'asmile', 'mesail', 'mesial', 'samiel'],\n 'amimia': ['amimia', 'miamia'],\n 'amimide': ['amimide', 'mimidae'],\n 'amin': ['amin', 'main', 'mani', 'mian', 'mina', 'naim'],\n 'aminate': ['amentia', 'aminate', 'anamite', 'animate'],\n 'amination': ['amination', 'animation'],\n 'amine': ['amine', 'anime', 'maine', 'manei'],\n 'amini': ['amini', 'animi'],\n 'aminize': ['aminize', 'animize', 'azimine'],\n 'amino': ['amino', 'inoma', 'naomi', 'omani', 'omina'],\n 'aminoplast': ['aminoplast', 'plasmation'],\n 'amintor': ['amintor', 'tormina'],\n 'amir': ['amir', 'irma', 'mari', 'mira', 'rami', 'rima'],\n 'amiranha': ['amiranha', 'maharani'],\n 'amiray': ['amiray', 'myaria'],\n 'amissness': ['amissness', 'massiness'],\n 'amita': ['amati', 'amita', 'matai'],\n 'amitosis': ['amitosis', 'omasitis'],\n 'amixia': ['amixia', 'ixiama'],\n 'amla': ['alma', 'amla', 'lama', 'mala'],\n 'amli': ['amil', 'amli', 'lima', 'mail', 'mali', 'mila'],\n 'amlong': ['amlong', 'logman'],\n 'amma': ['amma', 'maam'],\n 'ammelin': ['ammelin', 'limeman'],\n 'ammeline': ['ammeline', 'melamine'],\n 'ammeter': ['ammeter', 'metamer'],\n 'ammi': ['ammi', 'imam', 'maim', 'mima'],\n 'ammine': ['ammine', 'immane'],\n 'ammo': ['ammo', 'mamo'],\n 'ammonic': ['ammonic', 'mocmain'],\n 'ammonolytic': ['ammonolytic', 'commonality'],\n 'ammunition': ['ammunition', 'antimonium'],\n 'amnestic': ['amnestic', 'semantic'],\n 'amnia': ['amain', 'amani', 'amnia', 'anima', 'mania'],\n 'amniac': ['amniac', 'caiman', 'maniac'],\n 'amnic': ['amnic', 'manic'],\n 'amnion': ['amnion', 'minoan', 'nomina'],\n 'amnionata': ['amnionata', 'anamniota'],\n 'amnionate': ['amnionate', 'anamniote', 'emanation'],\n 'amniota': ['amniota', 'itonama'],\n 'amniote': ['amniote', 'anomite'],\n 'amniotic': ['amniotic', 'mication'],\n 'amniotome': ['amniotome', 'momotinae'],\n 'amok': ['amok', 'mako'],\n 'amole': ['amole', 'maleo'],\n 'amomis': ['amomis', 'mimosa'],\n 'among': ['among', 'mango'],\n 'amor': ['amor', 'maro', 'mora', 'omar', 'roam'],\n 'amores': ['amores', 'ramose', 'sorema'],\n 'amoret': ['amoret', 'morate'],\n 'amorist': ['amorist', 'aortism', 'miastor'],\n 'amoritic': ['amoritic', 'microtia'],\n 'amorpha': ['amorpha', 'amphora'],\n 'amorphic': ['amorphic', 'amphoric'],\n 'amorphous': ['amorphous', 'amphorous'],\n 'amort': ['amort', 'morat', 'torma'],\n 'amortize': ['amortize', 'atomizer'],\n 'amos': ['amos', 'soam', 'soma'],\n 'amotion': ['amotion', 'otomian'],\n 'amount': ['amount', 'moutan', 'outman'],\n 'amoy': ['amoy', 'mayo'],\n 'ampelis': ['ampelis', 'lepisma'],\n 'ampelite': ['ampelite', 'pimelate'],\n 'ampelitic': ['ampelitic', 'implicate'],\n 'amper': ['amper', 'remap'],\n 'amperemeter': ['amperemeter', 'permeameter'],\n 'amperian': ['amperian', 'paramine', 'pearmain'],\n 'amphicyon': ['amphicyon', 'hypomanic'],\n 'amphigenous': ['amphigenous', 'musophagine'],\n 'amphiphloic': ['amphiphloic', 'amphophilic'],\n 'amphipodous': ['amphipodous', 'hippodamous'],\n 'amphitropous': ['amphitropous', 'pastophorium'],\n 'amphophilic': ['amphiphloic', 'amphophilic'],\n 'amphora': ['amorpha', 'amphora'],\n 'amphore': ['amphore', 'morphea'],\n 'amphorette': ['amphorette', 'haptometer'],\n 'amphoric': ['amorphic', 'amphoric'],\n 'amphorous': ['amorphous', 'amphorous'],\n 'amphoteric': ['amphoteric', 'metaphoric'],\n 'ample': ['ample', 'maple'],\n 'ampliate': ['ampliate', 'palamite'],\n 'amplification': ['amplification', 'palmification'],\n 'amply': ['amply', 'palmy'],\n 'ampul': ['ampul', 'pluma'],\n 'ampulla': ['ampulla', 'palmula'],\n 'amra': ['amar', 'amra', 'mara', 'rama'],\n 'amsath': ['amsath', 'asthma'],\n 'amsel': ['amsel', 'melas', 'mesal', 'samel'],\n 'amsonia': ['amsonia', 'anosmia'],\n 'amt': ['amt', 'mat', 'tam'],\n 'amulet': ['amulet', 'muleta'],\n 'amunam': ['amunam', 'manuma'],\n 'amuse': ['amuse', 'mesua'],\n 'amused': ['amused', 'masdeu', 'medusa'],\n 'amusee': ['amusee', 'saeume'],\n 'amuser': ['amuser', 'mauser'],\n 'amusgo': ['amusgo', 'sugamo'],\n 'amvis': ['amvis', 'mavis'],\n 'amy': ['amy', 'may', 'mya', 'yam'],\n 'amyelic': ['amyelic', 'mycelia'],\n 'amyl': ['amyl', 'lyam', 'myal'],\n 'amylan': ['amylan', 'lamany', 'layman'],\n 'amylenol': ['amylenol', 'myelonal'],\n 'amylidene': ['amylidene', 'mydaleine'],\n 'amylin': ['amylin', 'mainly'],\n 'amylo': ['amylo', 'loamy'],\n 'amylon': ['amylon', 'onymal'],\n 'amyotrophy': ['amyotrophy', 'myoatrophy'],\n 'amyrol': ['amyrol', 'molary'],\n 'an': ['an', 'na'],\n 'ana': ['ana', 'naa'],\n 'anacara': ['anacara', 'aracana'],\n 'anacard': ['anacard', 'caranda'],\n 'anaces': ['anaces', 'scaean'],\n 'anachorism': ['anachorism', 'chorasmian', 'maraschino'],\n 'anacid': ['acnida', 'anacid', 'dacian'],\n 'anacreontic': ['anacreontic', 'canceration'],\n 'anacusis': ['anacusis', 'ascanius'],\n 'anadem': ['anadem', 'maenad'],\n 'anadenia': ['anadenia', 'danainae'],\n 'anadrom': ['anadrom', 'madrona', 'mandora', 'monarda', 'roadman'],\n 'anaemic': ['acnemia', 'anaemic'],\n 'anaeretic': ['anaeretic', 'ecarinate'],\n 'anal': ['alan', 'anal', 'lana'],\n 'analcime': ['alcamine', 'analcime', 'calamine', 'camelina'],\n 'analcite': ['analcite', 'anticlea', 'laitance'],\n 'analcitite': ['analcitite', 'catalinite'],\n 'analectic': ['acclinate', 'analectic'],\n 'analeptical': ['analeptical', 'placentalia'],\n 'anally': ['alanyl', 'anally'],\n 'analogic': ['analogic', 'calinago'],\n 'analogist': ['analogist', 'nostalgia'],\n 'anam': ['anam', 'mana', 'naam', 'nama'],\n 'anamesite': ['anamesite', 'seamanite'],\n 'anamirta': ['anamirta', 'araminta'],\n 'anamite': ['amentia', 'aminate', 'anamite', 'animate'],\n 'anamniota': ['amnionata', 'anamniota'],\n 'anamniote': ['amnionate', 'anamniote', 'emanation'],\n 'anan': ['anan', 'anna', 'nana'],\n 'ananda': ['ananda', 'danaan'],\n 'anandria': ['anandria', 'andriana'],\n 'anangioid': ['agoniadin', 'anangioid', 'ganoidian'],\n 'ananism': ['ananism', 'samnani'],\n 'ananite': ['ananite', 'anatine', 'taenian'],\n 'anaphoric': ['anaphoric', 'pharaonic'],\n 'anaphorical': ['anaphorical', 'pharaonical'],\n 'anapnea': ['anapnea', 'napaean'],\n 'anapsid': ['anapsid', 'sapinda'],\n 'anapsida': ['anapsida', 'anaspida'],\n 'anaptotic': ['anaptotic', 'captation'],\n 'anarchic': ['anarchic', 'characin'],\n 'anarchism': ['anarchism', 'arachnism'],\n 'anarchist': ['anarchist', 'archsaint', 'cantharis'],\n 'anarcotin': ['anarcotin', 'cantorian', 'carnation', 'narcotina'],\n 'anaretic': ['anaretic', 'arcanite', 'carinate', 'craniate'],\n 'anarthropod': ['anarthropod', 'arthropodan'],\n 'anas': ['anas', 'ansa', 'saan'],\n 'anasa': ['anasa', 'asana'],\n 'anaspida': ['anapsida', 'anaspida'],\n 'anastaltic': ['anastaltic', 'catalanist'],\n 'anat': ['anat', 'anta', 'tana'],\n 'anatidae': ['anatidae', 'taeniada'],\n 'anatine': ['ananite', 'anatine', 'taenian'],\n 'anatocism': ['anatocism', 'anosmatic'],\n 'anatole': ['anatole', 'notaeal'],\n 'anatolic': ['aconital', 'actional', 'anatolic'],\n 'anatomicopathologic': ['anatomicopathologic', 'pathologicoanatomic'],\n 'anatomicopathological': ['anatomicopathological', 'pathologicoanatomical'],\n 'anatomicophysiologic': ['anatomicophysiologic', 'physiologicoanatomic'],\n 'anatomism': ['anatomism', 'nomismata'],\n 'anatomize': ['amazonite', 'anatomize'],\n 'anatum': ['anatum', 'mantua', 'tamanu'],\n 'anay': ['anay', 'yana'],\n 'anba': ['anba', 'bana'],\n 'ancestor': ['ancestor', 'entosarc'],\n 'ancestral': ['ancestral', 'lancaster'],\n 'anchat': ['acanth', 'anchat', 'tanach'],\n 'anchietin': ['anchietin', 'cathinine'],\n 'anchistea': ['anchistea', 'hanseatic'],\n 'anchor': ['anchor', 'archon', 'charon', 'rancho'],\n 'anchored': ['anchored', 'rondache'],\n 'anchorer': ['anchorer', 'ranchero', 'reanchor'],\n 'anchoretic': ['acherontic', 'anchoretic'],\n 'anchoretical': ['acherontical', 'anchoretical'],\n 'anchoretism': ['anchoretism', 'trichomanes'],\n 'anchorite': ['anchorite', 'antechoir', 'heatronic', 'hectorian'],\n 'anchoritism': ['anchoritism', 'chiromantis', 'chrismation', 'harmonistic'],\n 'ancile': ['alcine', 'ancile'],\n 'ancilla': ['aclinal', 'ancilla'],\n 'ancillary': ['ancillary', 'carlylian', 'cranially'],\n 'ancon': ['ancon', 'canon'],\n 'anconitis': ['anconitis', 'antiscion', 'onanistic'],\n 'ancony': ['ancony', 'canyon'],\n 'ancoral': ['alcoran', 'ancoral', 'carolan'],\n 'ancylus': ['ancylus', 'unscaly'],\n 'ancyrene': ['ancyrene', 'cerynean'],\n 'and': ['and', 'dan'],\n 'anda': ['anda', 'dana'],\n 'andante': ['andante', 'dantean'],\n 'ande': ['ande', 'dane', 'dean', 'edna'],\n 'andesitic': ['andesitic', 'dianetics'],\n 'andhra': ['andhra', 'dharna'],\n 'andi': ['adin', 'andi', 'dain', 'dani', 'dian', 'naid'],\n 'andian': ['andian', 'danian', 'nidana'],\n 'andine': ['aidenn', 'andine', 'dannie', 'indane'],\n 'andira': ['adrian', 'andira', 'andria', 'radian', 'randia'],\n 'andorite': ['andorite', 'nadorite', 'ordinate', 'rodentia'],\n 'andre': ['andre', 'arend', 'daren', 'redan'],\n 'andrew': ['andrew', 'redawn', 'wander', 'warden'],\n 'andria': ['adrian', 'andira', 'andria', 'radian', 'randia'],\n 'andriana': ['anandria', 'andriana'],\n 'andrias': ['andrias', 'sardian', 'sarinda'],\n 'andric': ['andric', 'cardin', 'rancid'],\n 'andries': ['andries', 'isander', 'sardine'],\n 'androgynus': ['androgynus', 'gynandrous'],\n 'androl': ['androl', 'arnold', 'lardon', 'roland', 'ronald'],\n 'andronicus': ['andronicus', 'unsardonic'],\n 'androtomy': ['androtomy', 'dynamotor'],\n 'anear': ['anear', 'arean', 'arena'],\n 'aneath': ['ahtena', 'aneath', 'athena'],\n 'anecdota': ['anecdota', 'coadnate'],\n 'anele': ['anele', 'elean'],\n 'anematosis': ['anematosis', 'menostasia'],\n 'anemia': ['amenia', 'anemia'],\n 'anemic': ['anemic', 'cinema', 'iceman'],\n 'anemograph': ['anemograph', 'phanerogam'],\n 'anemographic': ['anemographic', 'phanerogamic'],\n 'anemography': ['anemography', 'phanerogamy'],\n 'anemone': ['anemone', 'monaene'],\n 'anent': ['anent', 'annet', 'nenta'],\n 'anepia': ['anepia', 'apinae'],\n 'aneretic': ['aneretic', 'centiare', 'creatine', 'increate', 'iterance'],\n 'anergic': ['anergic', 'garnice', 'garniec', 'geranic', 'grecian'],\n 'anergy': ['anergy', 'rangey'],\n 'anerly': ['anerly', 'nearly'],\n 'aneroid': ['aneroid', 'arenoid'],\n 'anerotic': ['actioner', 'anerotic', 'ceration', 'creation', 'reaction'],\n 'anes': ['anes', 'sane', 'sean'],\n 'anesis': ['anesis', 'anseis', 'sanies', 'sansei', 'sasine'],\n 'aneuric': ['aneuric', 'rinceau'],\n 'aneurin': ['aneurin', 'uranine'],\n 'aneurism': ['aneurism', 'arsenium', 'sumerian'],\n 'anew': ['anew', 'wane', 'wean'],\n 'angami': ['angami', 'magani', 'magian'],\n 'angara': ['angara', 'aranga', 'nagara'],\n 'angaria': ['agrania', 'angaria', 'niagara'],\n 'angel': ['agnel', 'angel', 'angle', 'galen', 'genal', 'glean', 'lagen'],\n 'angela': ['alnage', 'angela', 'galena', 'lagena'],\n 'angeldom': ['angeldom', 'lodgeman'],\n 'angelet': ['angelet', 'elegant'],\n 'angelic': ['angelic', 'galenic'],\n 'angelical': ['angelical', 'englacial', 'galenical'],\n 'angelically': ['angelically', 'englacially'],\n 'angelin': ['angelin', 'leaning'],\n 'angelina': ['alangine', 'angelina', 'galenian'],\n 'angelique': ['angelique', 'equiangle'],\n 'angelo': ['angelo', 'engaol'],\n 'angelot': ['angelot', 'tangelo'],\n 'anger': ['anger', 'areng', 'grane', 'range'],\n 'angerly': ['angerly', 'geranyl'],\n 'angers': ['angers', 'sanger', 'serang'],\n 'angico': ['agonic', 'angico', 'gaonic', 'goniac'],\n 'angie': ['angie', 'gaine'],\n 'angild': ['angild', 'lading'],\n 'angili': ['ailing', 'angili', 'nilgai'],\n 'angina': ['angina', 'inanga'],\n 'anginal': ['alangin', 'anginal', 'anglian', 'nagnail'],\n 'angiocholitis': ['angiocholitis', 'cholangioitis'],\n 'angiochondroma': ['angiochondroma', 'chondroangioma'],\n 'angiofibroma': ['angiofibroma', 'fibroangioma'],\n 'angioid': ['angioid', 'gonidia'],\n 'angiokeratoma': ['angiokeratoma', 'keratoangioma'],\n 'angiometer': ['angiometer', 'ergotamine', 'geometrina'],\n 'angka': ['angka', 'kanga'],\n 'anglaise': ['anglaise', 'gelasian'],\n 'angle': ['agnel', 'angel', 'angle', 'galen', 'genal', 'glean', 'lagen'],\n 'angled': ['angled', 'dangle', 'englad', 'lagend'],\n 'angler': ['angler', 'arleng', 'garnel', 'largen', 'rangle', 'regnal'],\n 'angles': ['angles', 'gansel'],\n 'angleworm': ['angleworm', 'lawmonger'],\n 'anglian': ['alangin', 'anginal', 'anglian', 'nagnail'],\n 'anglic': ['anglic', 'lacing'],\n 'anglish': ['anglish', 'ashling'],\n 'anglist': ['anglist', 'lasting', 'salting', 'slating', 'staling'],\n 'angloid': ['angloid', 'loading'],\n 'ango': ['agon', 'ango', 'gaon', 'goan', 'gona'],\n 'angola': ['agonal', 'angola'],\n 'angolar': ['angolar', 'organal'],\n 'angor': ['angor',\n           'argon',\n           'goran',\n           'grano',\n           'groan',\n           'nagor',\n           'orang',\n           'organ',\n           'rogan',\n           'ronga'],\n 'angora': ['agroan', 'angora', 'anogra', 'arango', 'argoan', 'onagra'],\n 'angriness': ['angriness', 'ranginess'],\n 'angrite': ['angrite', 'granite', 'ingrate', 'tangier', 'tearing', 'tigrean'],\n 'angry': ['angry', 'rangy'],\n 'angst': ['angst', 'stang', 'tangs'],\n 'angster': ['angster', 'garnets', 'nagster', 'strange'],\n 'anguid': ['anguid', 'gaduin'],\n 'anguine': ['anguine', 'guanine', 'guinean'],\n 'angula': ['angula', 'nagual'],\n 'angular': ['angular', 'granula'],\n 'angulate': ['angulate', 'gaetulan'],\n 'anguria': ['anguria', 'gaurian', 'guarani'],\n 'angus': ['agnus', 'angus', 'sugan'],\n 'anharmonic': ['anharmonic', 'monarchian'],\n 'anhematosis': ['anhematosis', 'somasthenia'],\n 'anhidrotic': ['anhidrotic', 'trachinoid'],\n 'anhistous': ['anhistous', 'isanthous'],\n 'anhydridize': ['anhydridize', 'hydrazidine'],\n 'anhydrize': ['anhydrize', 'hydrazine'],\n 'ani': ['ani', 'ian'],\n 'anice': ['anice', 'eniac'],\n 'aniconic': ['aniconic', 'ciconian'],\n 'aniconism': ['aniconism', 'insomniac'],\n 'anicular': ['anicular', 'caulinar'],\n 'anicut': ['anicut', 'nautic', 'ticuna', 'tunica'],\n 'anidian': ['anidian', 'indiana'],\n 'aniente': ['aniente', 'itenean'],\n 'anight': ['anight', 'athing'],\n 'anil': ['alin', 'anil', 'lain', 'lina', 'nail'],\n 'anile': ['alien', 'aline', 'anile', 'elain', 'elian', 'laine', 'linea'],\n 'anilic': ['anilic', 'clinia'],\n 'anilid': ['anilid', 'dialin', 'dianil', 'inlaid'],\n 'anilide': ['anilide', 'elaidin'],\n 'anilidic': ['anilidic', 'indicial'],\n 'anima': ['amain', 'amani', 'amnia', 'anima', 'mania'],\n 'animable': ['animable', 'maniable'],\n 'animal': ['almain', 'animal', 'lamina', 'manila'],\n 'animalic': ['animalic', 'limacina'],\n 'animate': ['amentia', 'aminate', 'anamite', 'animate'],\n 'animated': ['animated', 'mandaite', 'mantidae'],\n 'animater': ['animater', 'marinate'],\n 'animating': ['animating', 'imaginant'],\n 'animation': ['amination', 'animation'],\n 'animator': ['animator', 'tamanoir'],\n 'anime': ['amine', 'anime', 'maine', 'manei'],\n 'animi': ['amini', 'animi'],\n 'animist': ['animist', 'santimi'],\n 'animize': ['aminize', 'animize', 'azimine'],\n 'animus': ['animus', 'anisum', 'anusim', 'manius'],\n 'anionic': ['anionic', 'iconian'],\n 'anis': ['anis', 'nais', 'nasi', 'nias', 'sain', 'sina'],\n 'anisal': ['anisal', 'nasial', 'salian', 'salina'],\n 'anisate': ['anisate', 'entasia'],\n 'anise': ['anise', 'insea', 'siena', 'sinae'],\n 'anisette': ['anisette', 'atestine', 'settaine'],\n 'anisic': ['anisic', 'sicani', 'sinaic'],\n 'anisilic': ['anisilic', 'sicilian'],\n 'anisodont': ['anisodont', 'sondation'],\n 'anisometric': ['anisometric',\n                 'creationism',\n                 'miscreation',\n                 'ramisection',\n                 'reactionism'],\n 'anisopod': ['anisopod', 'isopodan'],\n 'anisoptera': ['anisoptera', 'asperation', 'separation'],\n 'anisum': ['animus', 'anisum', 'anusim', 'manius'],\n 'anisuria': ['anisuria', 'isaurian'],\n 'anisyl': ['anisyl', 'snaily'],\n 'anita': ['anita', 'niata', 'tania'],\n 'anither': ['anither', 'inearth', 'naither'],\n 'ankee': ['aknee', 'ankee', 'keena'],\n 'anker': ['anker', 'karen', 'naker'],\n 'ankh': ['ankh', 'hank', 'khan'],\n 'anklet': ['anklet', 'lanket', 'tankle'],\n 'ankoli': ['ankoli', 'kaolin'],\n 'ankus': ['ankus', 'kusan'],\n 'ankyroid': ['ankyroid', 'dikaryon'],\n 'anlace': ['anlace', 'calean'],\n 'ann': ['ann', 'nan'],\n 'anna': ['anan', 'anna', 'nana'],\n 'annale': ['annale', 'anneal'],\n 'annaline': ['annaline', 'linnaean'],\n 'annalist': ['annalist', 'santalin'],\n 'annalize': ['annalize', 'zelanian'],\n 'annam': ['annam', 'manna'],\n 'annamite': ['annamite', 'manatine'],\n 'annard': ['annard', 'randan'],\n 'annat': ['annat', 'tanan'],\n 'annates': ['annates', 'tannase'],\n 'anne': ['anne', 'nane'],\n 'anneal': ['annale', 'anneal'],\n 'annealer': ['annealer', 'lernaean', 'reanneal'],\n 'annelid': ['annelid', 'lindane'],\n 'annelism': ['annelism', 'linesman'],\n 'anneloid': ['anneloid', 'nonideal'],\n 'annet': ['anent', 'annet', 'nenta'],\n 'annexer': ['annexer', 'reannex'],\n 'annie': ['annie', 'inane'],\n 'annite': ['annite', 'innate', 'tinean'],\n 'annotine': ['annotine', 'tenonian'],\n 'annoy': ['annoy', 'nonya'],\n 'annoyancer': ['annoyancer', 'rayonnance'],\n 'annoyer': ['annoyer', 'reannoy'],\n 'annualist': ['annualist', 'sultanian'],\n 'annulation': ['annulation', 'unnational'],\n 'annulet': ['annulet', 'nauntle'],\n 'annulment': ['annulment', 'tunnelman'],\n 'annuloid': ['annuloid', 'uninodal'],\n 'anodic': ['adonic', 'anodic'],\n 'anodize': ['adonize', 'anodize'],\n 'anodynic': ['anodynic', 'cydonian'],\n 'anoestrous': ['anoestrous', 'treasonous'],\n 'anoestrum': ['anoestrum', 'neuromast'],\n 'anoetic': ['acetoin', 'aconite', 'anoetic', 'antoeci', 'cetonia'],\n 'anogenic': ['anogenic', 'canoeing'],\n 'anogra': ['agroan', 'angora', 'anogra', 'arango', 'argoan', 'onagra'],\n 'anoil': ['aloin', 'anoil', 'anoli'],\n 'anoint': ['anoint', 'nation'],\n 'anointer': ['anointer', 'inornate', 'nonirate', 'reanoint'],\n 'anole': ['alone', 'anole', 'olena'],\n 'anoli': ['aloin', 'anoil', 'anoli'],\n 'anolis': ['alison', 'anolis'],\n 'anomaliped': ['anomaliped', 'palaemonid'],\n 'anomalism': ['anomalism', 'malmaison'],\n 'anomalist': ['anomalist', 'atonalism'],\n 'anomiidae': ['anomiidae', 'maioidean'],\n 'anomite': ['amniote', 'anomite'],\n 'anomodont': ['anomodont', 'monodonta'],\n 'anomural': ['anomural', 'monaural'],\n 'anon': ['anon', 'nona', 'onan'],\n 'anophyte': ['anophyte', 'typhoean'],\n 'anopia': ['anopia', 'aponia', 'poiana'],\n 'anorak': ['anorak', 'korana'],\n 'anorchism': ['anorchism', 'harmonics'],\n 'anorectic': ['accretion', 'anorectic', 'neoarctic'],\n 'anorthic': ['anorthic', 'anthroic', 'tanchoir'],\n 'anorthitite': ['anorthitite', 'trithionate'],\n 'anorthose': ['anorthose', 'hoarstone'],\n 'anosia': ['anosia', 'asonia'],\n 'anosmatic': ['anatocism', 'anosmatic'],\n 'anosmia': ['amsonia', 'anosmia'],\n 'anosmic': ['anosmic', 'masonic'],\n 'anoterite': ['anoterite', 'orientate'],\n 'another': ['another', 'athenor', 'rheotan'],\n 'anotia': ['anotia', 'atonia'],\n 'anoxia': ['anoxia', 'axonia'],\n 'anoxic': ['anoxic', 'oxanic'],\n 'ansa': ['anas', 'ansa', 'saan'],\n 'ansar': ['ansar', 'saran', 'sarna'],\n 'ansation': ['ansation', 'sonatina'],\n 'anseis': ['anesis', 'anseis', 'sanies', 'sansei', 'sasine'],\n 'ansel': ['ansel', 'slane'],\n 'anselm': ['anselm', 'mensal'],\n 'anser': ['anser', 'nares', 'rasen', 'snare'],\n 'anserine': ['anserine', 'reinsane'],\n 'anserous': ['anserous', 'arsenous'],\n 'ansu': ['ansu', 'anus'],\n 'answerer': ['answerer', 'reanswer'],\n 'ant': ['ant', 'nat', 'tan'],\n 'anta': ['anat', 'anta', 'tana'],\n 'antacrid': ['antacrid', 'cardiant', 'radicant', 'tridacna'],\n 'antagonism': ['antagonism', 'montagnais'],\n 'antagonist': ['antagonist', 'stagnation'],\n 'antal': ['antal', 'natal'],\n 'antanemic': ['antanemic', 'cinnamate'],\n 'antar': ['antar', 'antra'],\n 'antarchistical': ['antarchistical', 'charlatanistic'],\n 'ante': ['ante', 'aten', 'etna', 'nate', 'neat', 'taen', 'tane', 'tean'],\n 'anteact': ['anteact', 'cantate'],\n 'anteal': ['anteal', 'lanate', 'teanal'],\n 'antechoir': ['anchorite', 'antechoir', 'heatronic', 'hectorian'],\n 'antecornu': ['antecornu', 'connature'],\n 'antedate': ['antedate', 'edentata'],\n 'antelabium': ['albuminate', 'antelabium'],\n 'antelopian': ['antelopian', 'neapolitan', 'panelation'],\n 'antelucan': ['antelucan', 'cannulate'],\n 'antelude': ['antelude', 'unelated'],\n 'anteluminary': ['anteluminary', 'unalimentary'],\n 'antemedial': ['antemedial', 'delaminate'],\n 'antenatal': ['antenatal', 'atlantean', 'tantalean'],\n 'anteriad': ['anteriad', 'atridean', 'dentaria'],\n 'anteroinferior': ['anteroinferior', 'inferoanterior'],\n 'anterosuperior': ['anterosuperior', 'superoanterior'],\n 'antes': ['antes', 'nates', 'stane', 'stean'],\n 'anthela': ['anthela', 'ethanal'],\n 'anthem': ['anthem', 'hetman', 'mentha'],\n 'anthemwise': ['anthemwise', 'whitmanese'],\n 'anther': ['anther', 'nather', 'tharen', 'thenar'],\n 'anthericum': ['anthericum', 'narthecium'],\n 'anthicidae': ['anthicidae', 'tachinidae'],\n 'anthinae': ['anthinae', 'athenian'],\n 'anthogenous': ['anthogenous', 'neognathous'],\n 'anthonomus': ['anthonomus', 'monanthous'],\n 'anthophile': ['anthophile', 'lithophane'],\n 'anthracia': ['anthracia', 'antiarcha', 'catharina'],\n 'anthroic': ['anorthic', 'anthroic', 'tanchoir'],\n 'anthrol': ['althorn', 'anthrol', 'thronal'],\n 'anthropic': ['anthropic', 'rhapontic'],\n 'anti': ['aint', 'anti', 'tain', 'tina'],\n 'antiabrin': ['antiabrin', 'britannia'],\n 'antiae': ['aetian', 'antiae', 'taenia'],\n 'antiager': ['antiager', 'trainage'],\n 'antialbumid': ['antialbumid', 'balantidium'],\n 'antialien': ['ailantine', 'antialien'],\n 'antiarcha': ['anthracia', 'antiarcha', 'catharina'],\n 'antiaris': ['antiaris', 'intarsia'],\n 'antibenzaldoxime': ['antibenzaldoxime', 'benzantialdoxime'],\n 'antiblue': ['antiblue', 'nubilate'],\n 'antic': ['actin', 'antic'],\n 'antical': ['actinal', 'alantic', 'alicant', 'antical'],\n 'anticaste': ['anticaste', 'ataentsic'],\n 'anticlea': ['analcite', 'anticlea', 'laitance'],\n 'anticlinorium': ['anticlinorium', 'inclinatorium'],\n 'anticly': ['anticly', 'cantily'],\n 'anticness': ['anticness', 'cantiness', 'incessant'],\n 'anticor': ['anticor', 'carotin', 'cortina', 'ontaric'],\n 'anticouncil': ['anticouncil', 'inculcation'],\n 'anticourt': ['anticourt', 'curtation', 'ructation'],\n 'anticous': ['acontius', 'anticous'],\n 'anticreative': ['anticreative', 'antireactive'],\n 'anticreep': ['anticreep', 'apenteric', 'increpate'],\n 'antidote': ['antidote', 'tetanoid'],\n 'antidotical': ['antidotical', 'dictational'],\n 'antietam': ['antietam', 'manettia'],\n 'antiextreme': ['antiextreme', 'exterminate'],\n 'antifouler': ['antifouler', 'fluorinate', 'uniflorate'],\n 'antifriction': ['antifriction', 'nitrifaction'],\n 'antifungin': ['antifungin', 'unfainting'],\n 'antigen': ['antigen', 'gentian'],\n 'antigenic': ['antigenic', 'gentianic'],\n 'antiglare': ['antiglare', 'raglanite'],\n 'antigod': ['antigod', 'doating'],\n 'antigone': ['antigone', 'negation'],\n 'antiheroic': ['antiheroic', 'theorician'],\n 'antilemic': ['alimentic', 'antilemic', 'melanitic', 'metanilic'],\n 'antilia': ['antilia', 'italian'],\n 'antilipase': ['antilipase', 'sapiential'],\n 'antilope': ['antilope', 'antipole'],\n 'antimallein': ['antimallein', 'inalimental'],\n 'antimasque': ['antimasque', 'squamatine'],\n 'antimeric': ['antimeric', 'carminite', 'criminate', 'metrician'],\n 'antimerina': ['antimerina', 'maintainer', 'remaintain'],\n 'antimeter': ['antimeter', 'attermine', 'interteam', 'terminate', 'tetramine'],\n 'antimodel': ['antimodel', 'maldonite', 'monilated'],\n 'antimodern': ['antimodern', 'ordainment'],\n 'antimonial': ['antimonial', 'lamination'],\n 'antimonic': ['antimonic', 'antinomic'],\n 'antimonium': ['ammunition', 'antimonium'],\n 'antimony': ['antimony', 'antinomy'],\n 'antimoral': ['antimoral', 'tailorman'],\n 'antimosquito': ['antimosquito', 'misquotation'],\n 'antinegro': ['antinegro', 'argentino', 'argention'],\n 'antinepotic': ['antinepotic', 'pectination'],\n 'antineutral': ['antineutral', 'triannulate'],\n 'antinial': ['antinial', 'latinian'],\n 'antinome': ['antinome', 'nominate'],\n 'antinomian': ['antinomian', 'innominata'],\n 'antinomic': ['antimonic', 'antinomic'],\n 'antinomy': ['antimony', 'antinomy'],\n 'antinormal': ['antinormal', 'nonmarital', 'nonmartial'],\n 'antiphonetic': ['antiphonetic', 'pentathionic'],\n 'antiphonic': ['antiphonic', 'napthionic'],\n 'antiphony': ['antiphony', 'typhonian'],\n 'antiphrasis': ['antiphrasis', 'artisanship'],\n 'antipodic': ['antipodic', 'diapnotic'],\n 'antipole': ['antilope', 'antipole'],\n 'antipolo': ['antipolo', 'antipool', 'optional'],\n 'antipool': ['antipolo', 'antipool', 'optional'],\n 'antipope': ['antipope', 'appointe'],\n 'antiprotease': ['antiprotease', 'entoparasite'],\n 'antipsoric': ['antipsoric', 'ascription', 'crispation'],\n 'antiptosis': ['antiptosis', 'panostitis'],\n 'antiputrid': ['antiputrid', 'tripudiant'],\n 'antipyretic': ['antipyretic', 'pertinacity'],\n 'antique': ['antique', 'quinate'],\n 'antiquer': ['antiquer', 'quartine'],\n 'antirabies': ['antirabies', 'bestiarian'],\n 'antiracer': ['antiracer', 'tarriance'],\n 'antireactive': ['anticreative', 'antireactive'],\n 'antired': ['antired', 'detrain', 'randite', 'trained'],\n 'antireducer': ['antireducer', 'reincrudate', 'untraceried'],\n 'antiroyalist': ['antiroyalist', 'stationarily'],\n 'antirumor': ['antirumor', 'ruminator'],\n 'antirun': ['antirun', 'untrain', 'urinant'],\n 'antirust': ['antirust', 'naturist'],\n 'antiscion': ['anconitis', 'antiscion', 'onanistic'],\n 'antisepsin': ['antisepsin', 'paintiness'],\n 'antisepsis': ['antisepsis', 'inspissate'],\n 'antiseptic': ['antiseptic', 'psittacine'],\n 'antiserum': ['antiserum', 'misaunter'],\n 'antisi': ['antisi', 'isatin'],\n 'antislip': ['alpinist', 'antislip'],\n 'antisoporific': ['antisoporific', 'prosification', 'sporification'],\n 'antispace': ['antispace', 'panaceist'],\n 'antistes': ['antistes', 'titaness'],\n 'antisun': ['antisun', 'unsaint', 'unsatin', 'unstain'],\n 'antitheism': ['antitheism', 'themistian'],\n 'antitonic': ['antitonic', 'nictation'],\n 'antitorpedo': ['antitorpedo', 'deportation'],\n 'antitrade': ['antitrade', 'attainder'],\n 'antitrope': ['antitrope', 'patronite', 'tritanope'],\n 'antitropic': ['antitropic', 'tritanopic'],\n 'antitropical': ['antitropical', 'practitional'],\n 'antivice': ['antivice', 'inactive', 'vineatic'],\n 'antler': ['altern', 'antler', 'learnt', 'rental', 'ternal'],\n 'antlia': ['antlia', 'latian', 'nalita'],\n 'antliate': ['antliate', 'latinate'],\n 'antlid': ['antlid', 'tindal'],\n 'antling': ['antling', 'tanling'],\n 'antoeci': ['acetoin', 'aconite', 'anoetic', 'antoeci', 'cetonia'],\n 'antoecian': ['acetanion', 'antoecian'],\n 'anton': ['anton', 'notan', 'tonna'],\n 'antproof': ['antproof', 'tanproof'],\n 'antra': ['antar', 'antra'],\n 'antral': ['antral', 'tarnal'],\n 'antre': ['antre', 'arent', 'retan', 'terna'],\n 'antrocele': ['antrocele', 'coeternal', 'tolerance'],\n 'antronasal': ['antronasal', 'nasoantral'],\n 'antroscope': ['antroscope', 'contrapose'],\n 'antroscopy': ['antroscopy', 'syncopator'],\n 'antrotome': ['antrotome', 'nototrema'],\n 'antrustion': ['antrustion', 'nasturtion'],\n 'antu': ['antu', 'aunt', 'naut', 'taun', 'tuan', 'tuna'],\n 'anubis': ['anubis', 'unbias'],\n 'anura': ['anura', 'ruana'],\n 'anuresis': ['anuresis', 'senarius'],\n 'anuretic': ['anuretic', 'centauri', 'centuria', 'teucrian'],\n 'anuria': ['anuria', 'urania'],\n 'anuric': ['anuric', 'cinura', 'uranic'],\n 'anurous': ['anurous', 'uranous'],\n 'anury': ['anury', 'unary', 'unray'],\n 'anus': ['ansu', 'anus'],\n 'anusim': ['animus', 'anisum', 'anusim', 'manius'],\n 'anvil': ['alvin', 'anvil', 'nival', 'vinal'],\n 'any': ['any', 'nay', 'yan'],\n 'aonach': ['aonach', 'choana'],\n 'aoristic': ['aoristic', 'iscariot'],\n 'aortal': ['aortal', 'rotala'],\n 'aortectasis': ['aerostatics', 'aortectasis'],\n 'aortism': ['amorist', 'aortism', 'miastor'],\n 'aosmic': ['aosmic', 'mosaic'],\n 'apachite': ['apachite', 'hepatica'],\n 'apalachee': ['acalephae', 'apalachee'],\n 'apama': ['amapa', 'apama'],\n 'apanthropy': ['apanthropy', 'panatrophy'],\n 'apar': ['apar', 'paar', 'para'],\n 'apart': ['apart', 'trapa'],\n 'apatetic': ['apatetic', 'capitate'],\n 'ape': ['ape', 'pea'],\n 'apedom': ['apedom', 'pomade'],\n 'apeiron': ['apeiron', 'peorian'],\n 'apelet': ['apelet', 'ptelea'],\n 'apelike': ['apelike', 'pealike'],\n 'apeling': ['apeling', 'leaping'],\n 'apenteric': ['anticreep', 'apenteric', 'increpate'],\n 'apeptic': ['apeptic', 'catpipe'],\n 'aper': ['aper', 'pare', 'pear', 'rape', 'reap'],\n 'aperch': ['aperch', 'eparch', 'percha', 'preach'],\n 'aperitive': ['aperitive', 'petiveria'],\n 'apert': ['apert', 'pater', 'peart', 'prate', 'taper', 'terap'],\n 'apertly': ['apertly', 'peartly', 'platery', 'pteryla', 'taperly'],\n 'apertness': ['apertness', 'peartness', 'taperness'],\n 'apertured': ['apertured', 'departure'],\n 'apery': ['apery', 'payer', 'repay'],\n 'aphanes': ['aphanes', 'saphena'],\n 'aphasia': ['aphasia', 'asaphia'],\n 'aphasic': ['aphasic', 'asaphic'],\n 'aphemic': ['aphemic', 'impeach'],\n 'aphetic': ['aphetic', 'caphite', 'hepatic'],\n 'aphetism': ['aphetism', 'mateship', 'shipmate', 'spithame'],\n 'aphetize': ['aphetize', 'hepatize'],\n 'aphides': ['aphides', 'diphase'],\n 'aphidicolous': ['acidophilous', 'aphidicolous'],\n 'aphis': ['aphis', 'apish', 'hispa', 'saiph', 'spahi'],\n 'aphodian': ['adiaphon', 'aphodian'],\n 'aphonic': ['aphonic', 'phocian'],\n 'aphorismical': ['aphorismical', 'parochialism'],\n 'aphotic': ['aphotic', 'picotah'],\n 'aphra': ['aphra', 'harpa', 'parah'],\n 'aphrodistic': ['aphrodistic', 'diastrophic'],\n 'aphrodite': ['aphrodite', 'atrophied', 'diaporthe'],\n 'apian': ['apian', 'apina'],\n 'apiator': ['apiator', 'atropia', 'parotia'],\n 'apical': ['apical', 'palaic'],\n 'apicular': ['apicular', 'piacular'],\n 'apina': ['apian', 'apina'],\n 'apinae': ['anepia', 'apinae'],\n 'apinage': ['aegipan', 'apinage'],\n 'apinch': ['apinch', 'chapin', 'phanic'],\n 'aping': ['aping', 'ngapi', 'pangi'],\n 'apiole': ['apiole', 'leipoa'],\n 'apiolin': ['apiolin', 'pinolia'],\n 'apionol': ['apionol', 'polonia'],\n 'apiose': ['apiose', 'apoise'],\n 'apis': ['apis', 'pais', 'pasi', 'saip'],\n 'apish': ['aphis', 'apish', 'hispa', 'saiph', 'spahi'],\n 'apishly': ['apishly', 'layship'],\n 'apism': ['apism', 'sampi'],\n 'apitpat': ['apitpat', 'pitapat'],\n 'apivorous': ['apivorous', 'oviparous'],\n 'aplenty': ['aplenty', 'penalty'],\n 'aplite': ['aplite', 'pilate'],\n 'aplitic': ['aliptic', 'aplitic'],\n 'aplodontia': ['adoptional', 'aplodontia'],\n 'aplome': ['aplome', 'malope'],\n 'apnea': ['apnea', 'paean'],\n 'apneal': ['apneal', 'panela'],\n 'apochromat': ['apochromat', 'archoptoma'],\n 'apocrita': ['apocrita', 'aproctia'],\n 'apocryph': ['apocryph', 'hypocarp'],\n 'apod': ['apod', 'dopa'],\n 'apoda': ['adpao', 'apoda'],\n 'apogon': ['apogon', 'poonga'],\n 'apoise': ['apiose', 'apoise'],\n 'apolaustic': ['apolaustic', 'autopsical'],\n 'apolistan': ['apolistan', 'lapsation'],\n 'apollo': ['apollo', 'palolo'],\n 'aponia': ['anopia', 'aponia', 'poiana'],\n 'aponic': ['aponic', 'ponica'],\n 'aporetic': ['aporetic', 'capriote', 'operatic'],\n 'aporetical': ['aporetical', 'operatical'],\n 'aporia': ['aporia', 'piaroa'],\n 'aport': ['aport', 'parto', 'porta'],\n 'aportoise': ['aportoise', 'esotropia'],\n 'aposporous': ['aposporous', 'aprosopous'],\n 'apostil': ['apostil', 'topsail'],\n 'apostle': ['apostle', 'aseptol'],\n 'apostrophus': ['apostrophus', 'pastophorus'],\n 'apothesine': ['apothesine', 'isoheptane'],\n 'apout': ['apout', 'taupo'],\n 'appall': ['appall', 'palpal'],\n 'apparent': ['apparent', 'trappean'],\n 'appealer': ['appealer', 'reappeal'],\n 'appealing': ['appealing', 'lagniappe', 'panplegia'],\n 'appearer': ['appearer', 'rapparee', 'reappear'],\n 'append': ['append', 'napped'],\n 'applauder': ['applauder', 'reapplaud'],\n 'applicator': ['applicator', 'procapital'],\n 'applier': ['applier', 'aripple'],\n 'appointe': ['antipope', 'appointe'],\n 'appointer': ['appointer', 'reappoint'],\n 'appointor': ['appointor', 'apportion'],\n 'apportion': ['appointor', 'apportion'],\n 'apportioner': ['apportioner', 'reapportion'],\n 'appraisable': ['appraisable', 'parablepsia'],\n 'apprehender': ['apprehender', 'reapprehend'],\n 'approacher': ['approacher', 'reapproach'],\n 'apricot': ['apricot', 'atropic', 'parotic', 'patrico'],\n 'april': ['april', 'pilar', 'ripal'],\n 'aprilis': ['aprilis', 'liparis'],\n 'aproctia': ['apocrita', 'aproctia'],\n 'apronless': ['apronless', 'responsal'],\n 'aprosopous': ['aposporous', 'aprosopous'],\n 'apse': ['apse', 'pesa', 'spae'],\n 'apsidiole': ['apsidiole', 'episodial'],\n 'apt': ['apt', 'pat', 'tap'],\n 'aptal': ['aptal', 'palta', 'talpa'],\n 'aptera': ['aptera', 'parate', 'patera'],\n 'apterial': ['apterial', 'parietal'],\n 'apteroid': ['apteroid', 'proteida'],\n 'aptian': ['aptian', 'patina', 'taipan'],\n 'aptly': ['aptly', 'patly', 'platy', 'typal'],\n 'aptness': ['aptness', 'patness'],\n 'aptote': ['aptote', 'optate', 'potate', 'teapot'],\n 'apulian': ['apulian', 'paulian', 'paulina'],\n 'apulse': ['apulse', 'upseal'],\n 'apus': ['apus', 'supa', 'upas'],\n 'aquabelle': ['aquabelle', 'equalable'],\n 'aqueoigneous': ['aqueoigneous', 'igneoaqueous'],\n 'aquicolous': ['aquicolous', 'loquacious'],\n 'ar': ['ar', 'ra'],\n 'arab': ['arab', 'arba', 'baar', 'bara'],\n 'arabic': ['arabic', 'cairba'],\n 'arabinic': ['arabinic', 'cabirian', 'carabini', 'cibarian'],\n 'arabis': ['abaris', 'arabis'],\n 'arabism': ['abramis', 'arabism'],\n 'arabist': ['arabist', 'bartsia'],\n 'arabit': ['arabit', 'tabira'],\n 'arable': ['ablare', 'arable', 'arbela'],\n 'araca': ['acara', 'araca'],\n 'aracana': ['anacara', 'aracana'],\n 'aracanga': ['aracanga', 'caragana'],\n 'arachic': ['arachic', 'archaic'],\n 'arachidonic': ['arachidonic', 'characinoid'],\n 'arachis': ['arachis', 'asiarch', 'saharic'],\n 'arachne': ['arachne', 'archean'],\n 'arachnism': ['anarchism', 'arachnism'],\n 'arachnitis': ['arachnitis', 'christiana'],\n 'arad': ['adar', 'arad', 'raad', 'rada'],\n 'arain': ['airan', 'arain', 'arian'],\n 'arales': ['alares', 'arales'],\n 'aralia': ['alaria', 'aralia'],\n 'aralie': ['aerial', 'aralie'],\n 'aramaic': ['aramaic', 'cariama'],\n 'aramina': ['aramina', 'mariana'],\n 'araminta': ['anamirta', 'araminta'],\n 'aramus': ['aramus', 'asarum'],\n 'araneid': ['araneid', 'ariadne', 'ranidae'],\n 'aranein': ['aranein', 'raninae'],\n 'aranga': ['angara', 'aranga', 'nagara'],\n 'arango': ['agroan', 'angora', 'anogra', 'arango', 'argoan', 'onagra'],\n 'arati': ['arati', 'atria', 'riata', 'tarai', 'tiara'],\n 'aration': ['aration', 'otarian'],\n 'arauan': ['arauan', 'arauna'],\n 'arauna': ['arauan', 'arauna'],\n 'arba': ['arab', 'arba', 'baar', 'bara'],\n 'arbacin': ['arbacin', 'carabin', 'cariban'],\n 'arbalester': ['arbalester', 'arbalestre', 'arrestable'],\n 'arbalestre': ['arbalester', 'arbalestre', 'arrestable'],\n 'arbalister': ['arbalister', 'breastrail'],\n 'arbalo': ['aboral', 'arbalo'],\n 'arbela': ['ablare', 'arable', 'arbela'],\n 'arbiter': ['arbiter', 'rarebit'],\n 'arbored': ['arbored', 'boarder', 'reboard'],\n 'arboret': ['arboret', 'roberta', 'taborer'],\n 'arboretum': ['arboretum', 'tambourer'],\n 'arborist': ['arborist', 'ribroast'],\n 'arbuscle': ['arbuscle', 'buscarle'],\n 'arbutin': ['arbutin', 'tribuna'],\n 'arc': ['arc', 'car'],\n 'arca': ['arca', 'cara'],\n 'arcadia': ['acardia', 'acarida', 'arcadia'],\n 'arcadic': ['arcadic', 'cardiac'],\n 'arcane': ['arcane', 'carane'],\n 'arcanite': ['anaretic', 'arcanite', 'carinate', 'craniate'],\n 'arcate': ['arcate', 'cerata'],\n 'arch': ['arch', 'char', 'rach'],\n 'archae': ['archae', 'areach'],\n 'archaic': ['arachic', 'archaic'],\n 'archaism': ['archaism', 'charisma'],\n 'archapostle': ['archapostle', 'thecasporal'],\n 'archcount': ['archcount', 'crouchant'],\n 'arche': ['acher', 'arche', 'chare', 'chera', 'rache', 'reach'],\n 'archeal': ['alchera', 'archeal'],\n 'archean': ['arachne', 'archean'],\n 'archer': ['archer', 'charer', 'rechar'],\n 'arches': ['arches', 'chaser', 'eschar', 'recash', 'search'],\n 'archidome': ['archidome', 'chromidae'],\n 'archil': ['archil', 'chiral'],\n 'arching': ['arching', 'chagrin'],\n 'architis': ['architis', 'rachitis'],\n 'archocele': ['archocele', 'cochleare'],\n 'archon': ['anchor', 'archon', 'charon', 'rancho'],\n 'archontia': ['archontia', 'tocharian'],\n 'archoptoma': ['apochromat', 'archoptoma'],\n 'archpoet': ['archpoet', 'protheca'],\n 'archprelate': ['archprelate', 'pretracheal'],\n 'archsaint': ['anarchist', 'archsaint', 'cantharis'],\n 'archsee': ['archsee', 'rechase'],\n 'archsin': ['archsin', 'incrash'],\n 'archy': ['archy', 'chary'],\n 'arcidae': ['arcidae', 'caridea'],\n 'arcing': ['arcing', 'racing'],\n 'arcite': ['acrite', 'arcite', 'tercia', 'triace', 'tricae'],\n 'arcked': ['arcked', 'dacker'],\n 'arcking': ['arcking', 'carking', 'racking'],\n 'arcos': ['arcos', 'crosa', 'oscar', 'sacro'],\n 'arctia': ['acrita', 'arctia'],\n 'arctian': ['acritan', 'arctian'],\n 'arcticize': ['arcticize', 'cicatrize'],\n 'arctiid': ['arctiid', 'triacid', 'triadic'],\n 'arctoid': ['arctoid', 'carotid', 'dartoic'],\n 'arctoidean': ['arctoidean', 'carotidean', 'cordaitean', 'dinocerata'],\n 'arctomys': ['arctomys', 'costmary', 'mascotry'],\n 'arctos': ['arctos', 'castor', 'costar', 'scrota'],\n 'arcual': ['arcual', 'arcula'],\n 'arcuale': ['arcuale', 'caurale'],\n 'arcubalist': ['arcubalist', 'ultrabasic'],\n 'arcula': ['arcual', 'arcula'],\n 'arculite': ['arculite', 'cutleria', 'lucretia', 'reticula', 'treculia'],\n 'ardea': ['ardea', 'aread'],\n 'ardeb': ['ardeb', 'beard', 'bread', 'debar'],\n 'ardelia': ['ardelia', 'laridae', 'radiale'],\n 'ardella': ['ardella', 'dareall'],\n 'ardency': ['ardency', 'dancery'],\n 'ardish': ['ardish', 'radish'],\n 'ardoise': ['ardoise', 'aroides', 'soredia'],\n 'ardu': ['ardu', 'daur', 'dura'],\n 'are': ['aer', 'are', 'ear', 'era', 'rea'],\n 'areach': ['archae', 'areach'],\n 'aread': ['ardea', 'aread'],\n 'areal': ['areal', 'reaal'],\n 'arean': ['anear', 'arean', 'arena'],\n 'arecaceae': ['aceraceae', 'arecaceae'],\n 'arecaceous': ['aceraceous', 'arecaceous'],\n 'arecain': ['acarine', 'acraein', 'arecain'],\n 'arecolin': ['acrolein',\n              'arecolin',\n              'caroline',\n              'colinear',\n              'cornelia',\n              'creolian',\n              'lonicera'],\n 'arecoline': ['arecoline', 'arenicole'],\n 'arecuna': ['arecuna', 'aucaner'],\n 'ared': ['ared', 'daer', 'dare', 'dear', 'read'],\n 'areel': ['areel', 'earle'],\n 'arena': ['anear', 'arean', 'arena'],\n 'arenaria': ['aerarian', 'arenaria'],\n 'arend': ['andre', 'arend', 'daren', 'redan'],\n 'areng': ['anger', 'areng', 'grane', 'range'],\n 'arenga': ['arenga', 'argean'],\n 'arenicole': ['arecoline', 'arenicole'],\n 'arenicolite': ['arenicolite', 'ricinoleate'],\n 'arenig': ['arenig', 'earing', 'gainer', 'reagin', 'regain'],\n 'arenoid': ['aneroid', 'arenoid'],\n 'arenose': ['arenose', 'serenoa'],\n 'arent': ['antre', 'arent', 'retan', 'terna'],\n 'areographer': ['aerographer', 'areographer'],\n 'areographic': ['aerographic', 'areographic'],\n 'areographical': ['aerographical', 'areographical'],\n 'areography': ['aerography', 'areography'],\n 'areologic': ['aerologic', 'areologic'],\n 'areological': ['aerological', 'areological'],\n 'areologist': ['aerologist', 'areologist'],\n 'areology': ['aerology', 'areology'],\n 'areometer': ['aerometer', 'areometer'],\n 'areometric': ['aerometric', 'areometric'],\n 'areometry': ['aerometry', 'areometry'],\n 'arete': ['arete', 'eater', 'teaer'],\n 'argal': ['agral', 'argal'],\n 'argali': ['argali', 'garial'],\n 'argans': ['argans', 'sangar'],\n 'argante': ['argante', 'granate', 'tanager'],\n 'argas': ['argas', 'sagra'],\n 'argean': ['arenga', 'argean'],\n 'argeers': ['argeers', 'greaser', 'serrage'],\n 'argel': ['argel', 'ergal', 'garle', 'glare', 'lager', 'large', 'regal'],\n 'argenol': ['argenol', 'longear'],\n 'argent': ['argent', 'garnet', 'garten', 'tanger'],\n 'argentamid': ['argentamid', 'marginated'],\n 'argenter': ['argenter', 'garneter'],\n 'argenteum': ['argenteum', 'augmenter'],\n 'argentic': ['argentic', 'citrange'],\n 'argentide': ['argentide', 'denigrate', 'dinergate'],\n 'argentiferous': ['argentiferous', 'garnetiferous'],\n 'argentina': ['argentina', 'tanagrine'],\n 'argentine': ['argentine', 'tangerine'],\n 'argentino': ['antinegro', 'argentino', 'argention'],\n 'argention': ['antinegro', 'argentino', 'argention'],\n 'argentite': ['argentite', 'integrate'],\n 'argentol': ['argentol', 'gerontal'],\n 'argenton': ['argenton', 'negatron'],\n 'argentous': ['argentous', 'neotragus'],\n 'argentum': ['argentum', 'argument'],\n 'arghan': ['arghan', 'hangar'],\n 'argil': ['argil', 'glair', 'grail'],\n 'arginine': ['arginine', 'nigerian'],\n 'argive': ['argive', 'rivage'],\n 'argo': ['argo', 'garo', 'gora'],\n 'argoan': ['agroan', 'angora', 'anogra', 'arango', 'argoan', 'onagra'],\n 'argol': ['algor', 'argol', 'goral', 'largo'],\n 'argolet': ['argolet', 'gloater', 'legator'],\n 'argolian': ['argolian', 'gloriana'],\n 'argolic': ['argolic', 'cograil'],\n 'argolid': ['argolid', 'goliard'],\n 'argon': ['angor',\n           'argon',\n           'goran',\n           'grano',\n           'groan',\n           'nagor',\n           'orang',\n           'organ',\n           'rogan',\n           'ronga'],\n 'argot': ['argot', 'gator', 'gotra', 'groat'],\n 'argue': ['argue', 'auger'],\n 'argulus': ['argulus', 'lagurus'],\n 'argument': ['argentum', 'argument'],\n 'argus': ['argus', 'sugar'],\n 'arguslike': ['arguslike', 'sugarlike'],\n 'argute': ['argute', 'guetar', 'rugate', 'tuareg'],\n 'argyle': ['argyle', 'gleary'],\n 'arhar': ['arhar', 'arrah'],\n 'arhat': ['arhat', 'artha', 'athar'],\n 'aria': ['aira', 'aria', 'raia'],\n 'ariadne': ['araneid', 'ariadne', 'ranidae'],\n 'arian': ['airan', 'arain', 'arian'],\n 'arianrhod': ['arianrhod', 'hordarian'],\n 'aribine': ['aribine', 'bairnie', 'iberian'],\n 'arician': ['arician', 'icarian'],\n 'arid': ['arid', 'dari', 'raid'],\n 'aridian': ['aridian', 'diarian'],\n 'aridly': ['aridly', 'lyraid'],\n 'ariegite': ['aegirite', 'ariegite'],\n 'aries': ['aries', 'arise', 'raise', 'serai'],\n 'arietid': ['arietid', 'iridate'],\n 'arietta': ['arietta', 'ratitae'],\n 'aright': ['aright', 'graith'],\n 'arightly': ['alrighty', 'arightly'],\n 'ariidae': ['ariidae', 'raiidae'],\n 'aril': ['aril', 'lair', 'lari', 'liar', 'lira', 'rail', 'rial'],\n 'ariled': ['ariled', 'derail', 'dialer'],\n 'arillate': ['arillate', 'tiarella'],\n 'arion': ['arion', 'noria'],\n 'ariot': ['ariot', 'ratio'],\n 'aripple': ['applier', 'aripple'],\n 'arise': ['aries', 'arise', 'raise', 'serai'],\n 'arisen': ['arisen', 'arsine', 'resina', 'serian'],\n 'arist': ['arist',\n           'astir',\n           'sitar',\n           'stair',\n           'stria',\n           'tarsi',\n           'tisar',\n           'trias'],\n 'arista': ['arista', 'tarsia'],\n 'aristeas': ['aristeas', 'asterias'],\n 'aristol': ['aristol', 'oralist', 'ortalis', 'striola'],\n 'aristulate': ['aristulate', 'australite'],\n 'arite': ['arite', 'artie', 'irate', 'retia', 'tarie'],\n 'arithmic': ['arithmic', 'mithraic', 'mithriac'],\n 'arius': ['arius', 'asuri'],\n 'arizona': ['arizona', 'azorian', 'zonaria'],\n 'ark': ['ark', 'kra'],\n 'arkab': ['abkar', 'arkab'],\n 'arkite': ['arkite', 'karite'],\n 'arkose': ['arkose', 'resoak', 'soaker'],\n 'arlene': ['arlene', 'leaner'],\n 'arleng': ['angler', 'arleng', 'garnel', 'largen', 'rangle', 'regnal'],\n 'arles': ['arles', 'arsle', 'laser', 'seral', 'slare'],\n 'arline': ['arline', 'larine', 'linear', 'nailer', 'renail'],\n 'arm': ['arm', 'mar', 'ram'],\n 'armada': ['armada', 'damara', 'ramada'],\n 'armangite': ['armangite', 'marginate'],\n 'armata': ['armata', 'matara', 'tamara'],\n 'armed': ['armed', 'derma', 'dream', 'ramed'],\n 'armenian': ['armenian', 'marianne'],\n 'armenic': ['armenic', 'carmine', 'ceriman', 'crimean', 'mercian'],\n 'armer': ['armer', 'rearm'],\n 'armeria': ['armeria', 'mararie'],\n 'armet': ['armet',\n           'mater',\n           'merat',\n           'metra',\n           'ramet',\n           'tamer',\n           'terma',\n           'trame',\n           'trema'],\n 'armful': ['armful', 'fulmar'],\n 'armgaunt': ['armgaunt', 'granatum'],\n 'armied': ['admire', 'armied', 'damier', 'dimera', 'merida'],\n 'armiferous': ['armiferous', 'ramiferous'],\n 'armigerous': ['armigerous', 'ramigerous'],\n 'armil': ['armil', 'marli', 'rimal'],\n 'armilla': ['armilla', 'marilla'],\n 'armillated': ['armillated', 'malladrite', 'mallardite'],\n 'arming': ['arming', 'ingram', 'margin'],\n 'armistice': ['ameristic', 'armistice', 'artemisic'],\n 'armlet': ['armlet', 'malter', 'martel'],\n 'armonica': ['armonica', 'macaroni', 'marocain'],\n 'armoried': ['airdrome', 'armoried'],\n 'armpit': ['armpit', 'impart'],\n 'armplate': ['armplate', 'malapert'],\n 'arms': ['arms', 'mars'],\n 'armscye': ['armscye', 'screamy'],\n 'army': ['army', 'mary', 'myra', 'yarm'],\n 'arn': ['arn', 'nar', 'ran'],\n 'arna': ['arna', 'rana'],\n 'arnaut': ['arnaut', 'arunta'],\n 'arne': ['arne', 'earn', 'rane'],\n 'arneb': ['abner', 'arneb', 'reban'],\n 'arni': ['arni', 'iran', 'nair', 'rain', 'rani'],\n 'arnica': ['acinar',\n            'arnica',\n            'canari',\n            'carian',\n            'carina',\n            'crania',\n            'narica'],\n 'arnold': ['androl', 'arnold', 'lardon', 'roland', 'ronald'],\n 'arnotta': ['arnotta', 'natator'],\n 'arnotto': ['arnotto', 'notator'],\n 'arnut': ['arnut', 'tuarn', 'untar'],\n 'aro': ['aro', 'oar', 'ora'],\n 'aroast': ['aroast', 'ostara'],\n 'arock': ['arock', 'croak'],\n 'aroid': ['aroid', 'doria', 'radio'],\n 'aroides': ['ardoise', 'aroides', 'soredia'],\n 'aroint': ['aroint', 'ration'],\n 'aromatic': ['aromatic', 'macrotia'],\n 'aroon': ['aroon', 'oraon'],\n 'arose': ['arose', 'oreas'],\n 'around': ['around', 'arundo'],\n 'arpen': ['arpen', 'paren'],\n 'arpent': ['arpent',\n            'enrapt',\n            'entrap',\n            'panter',\n            'parent',\n            'pretan',\n            'trepan'],\n 'arrah': ['arhar', 'arrah'],\n 'arras': ['arras', 'sarra'],\n 'arrau': ['arrau', 'aurar'],\n 'arrayer': ['arrayer', 'rearray'],\n 'arrect': ['arrect', 'carter', 'crater', 'recart', 'tracer'],\n 'arrector': ['arrector', 'carroter'],\n 'arrent': ['arrent', 'errant', 'ranter', 'ternar'],\n 'arrest': ['arrest', 'astrer', 'raster', 'starer'],\n 'arrestable': ['arbalester', 'arbalestre', 'arrestable'],\n 'arrester': ['arrester', 'rearrest'],\n 'arresting': ['arresting', 'astringer'],\n 'arretine': ['arretine', 'eretrian', 'eritrean', 'retainer'],\n 'arride': ['arride', 'raider'],\n 'arrie': ['airer', 'arrie'],\n 'arriet': ['arriet', 'tarrie'],\n 'arrish': ['arrish', 'harris', 'rarish', 'sirrah'],\n 'arrive': ['arrive', 'varier'],\n 'arrogance': ['arrogance', 'coarrange'],\n 'arrogant': ['arrogant', 'tarragon'],\n 'arrogative': ['arrogative', 'variegator'],\n 'arrowy': ['arrowy', 'yarrow'],\n 'arry': ['arry', 'yarr'],\n 'arsacid': ['arsacid', 'ascarid'],\n 'arse': ['arse', 'rase', 'sare', 'sear', 'sera'],\n 'arsedine': ['arsedine', 'arsenide', 'sedanier', 'siderean'],\n 'arsenal': ['arsenal', 'ranales'],\n 'arsenate': ['arsenate', 'serenata'],\n 'arsenation': ['arsenation', 'senatorian', 'sonneratia'],\n 'arseniate': ['arseniate', 'saernaite'],\n 'arsenic': ['arsenic', 'cerasin', 'sarcine'],\n 'arsenide': ['arsedine', 'arsenide', 'sedanier', 'siderean'],\n 'arsenite': ['arsenite', 'resinate', 'teresian', 'teresina'],\n 'arsenium': ['aneurism', 'arsenium', 'sumerian'],\n 'arseniuret': ['arseniuret', 'uniserrate'],\n 'arseno': ['arseno', 'reason'],\n 'arsenopyrite': ['arsenopyrite', 'pyroarsenite'],\n 'arsenous': ['anserous', 'arsenous'],\n 'arses': ['arses', 'rasse'],\n 'arshine': ['arshine', 'nearish', 'rhesian', 'sherani'],\n 'arsine': ['arisen', 'arsine', 'resina', 'serian'],\n 'arsino': ['arsino', 'rasion', 'sonrai'],\n 'arsis': ['arsis', 'sarsi'],\n 'arsle': ['arles', 'arsle', 'laser', 'seral', 'slare'],\n 'arson': ['arson', 'saron', 'sonar'],\n 'arsonic': ['arsonic', 'saronic'],\n 'arsonite': ['arsonite', 'asterion', 'oestrian', 'rosinate', 'serotina'],\n 'art': ['art', 'rat', 'tar', 'tra'],\n 'artaba': ['artaba', 'batara'],\n 'artabe': ['abater', 'artabe', 'eartab', 'trabea'],\n 'artal': ['altar', 'artal', 'ratal', 'talar'],\n 'artamus': ['artamus', 'sumatra'],\n 'artarine': ['artarine', 'errantia'],\n 'artefact': ['afteract', 'artefact', 'farcetta', 'farctate'],\n 'artel': ['alert', 'alter', 'artel', 'later', 'ratel', 'taler', 'telar'],\n 'artemas': ['artemas', 'astream'],\n 'artemia': ['ametria', 'artemia', 'meratia', 'ramaite'],\n 'artemis': ['artemis', 'maestri', 'misrate'],\n 'artemisic': ['ameristic', 'armistice', 'artemisic'],\n 'arterial': ['arterial', 'triareal'],\n 'arterin': ['arterin', 'retrain', 'terrain', 'trainer'],\n 'arterious': ['arterious', 'autoriser'],\n 'artesian': ['artesian', 'asterina', 'asternia', 'erastian', 'seatrain'],\n 'artgum': ['artgum', 'targum'],\n 'artha': ['arhat', 'artha', 'athar'],\n 'arthel': ['arthel', 'halter', 'lather', 'thaler'],\n 'arthemis': ['arthemis', 'marshite', 'meharist'],\n 'arthrochondritis': ['arthrochondritis', 'chondroarthritis'],\n 'arthromere': ['arthromere', 'metrorrhea'],\n 'arthropodan': ['anarthropod', 'arthropodan'],\n 'arthrosteitis': ['arthrosteitis', 'ostearthritis'],\n 'article': ['article', 'recital'],\n 'articled': ['articled', 'lacertid'],\n 'artie': ['arite', 'artie', 'irate', 'retia', 'tarie'],\n 'artifice': ['actifier', 'artifice'],\n 'artisan': ['artisan', 'astrain', 'sartain', 'tsarina'],\n 'artisanship': ['antiphrasis', 'artisanship'],\n 'artist': ['artist', 'strait', 'strati'],\n 'artiste': ['artiste', 'striate'],\n 'artlet': ['artlet', 'latter', 'rattle', 'tartle', 'tatler'],\n 'artlike': ['artlike', 'ratlike', 'tarlike'],\n 'arty': ['arty', 'atry', 'tray'],\n 'aru': ['aru', 'rua', 'ura'],\n 'aruac': ['aruac', 'carua'],\n 'arui': ['arui', 'uria'],\n 'arum': ['arum', 'maru', 'mura'],\n 'arundo': ['around', 'arundo'],\n 'arunta': ['arnaut', 'arunta'],\n 'arusa': ['arusa', 'saura', 'usara'],\n 'arusha': ['arusha', 'aushar'],\n 'arustle': ['arustle', 'estrual', 'saluter', 'saulter'],\n 'arval': ['alvar', 'arval', 'larva'],\n 'arvel': ['arvel', 'larve', 'laver', 'ravel', 'velar'],\n 'arx': ['arx', 'rax'],\n 'ary': ['ary', 'ray', 'yar'],\n 'arya': ['arya', 'raya'],\n 'aryan': ['aryan', 'nayar', 'rayan'],\n 'aryl': ['aryl', 'lyra', 'ryal', 'yarl'],\n 'as': ['as', 'sa'],\n 'asa': ['asa', 'saa'],\n 'asak': ['asak', 'kasa', 'saka'],\n 'asana': ['anasa', 'asana'],\n 'asaph': ['asaph', 'pasha'],\n 'asaphia': ['aphasia', 'asaphia'],\n 'asaphic': ['aphasic', 'asaphic'],\n 'asaprol': ['asaprol', 'parasol'],\n 'asarh': ['asarh', 'raash', 'sarah'],\n 'asarite': ['asarite', 'asteria', 'atresia', 'setaria'],\n 'asarum': ['aramus', 'asarum'],\n 'asbest': ['asbest', 'basset'],\n 'ascanius': ['anacusis', 'ascanius'],\n 'ascare': ['ascare', 'caesar', 'resaca'],\n 'ascarid': ['arsacid', 'ascarid'],\n 'ascaris': ['ascaris', 'carissa'],\n 'ascendance': ['adnascence', 'ascendance'],\n 'ascendant': ['adnascent', 'ascendant'],\n 'ascender': ['ascender', 'reascend'],\n 'ascent': ['ascent', 'secant', 'stance'],\n 'ascertain': ['ascertain', 'cartesian', 'cartisane', 'sectarian'],\n 'ascertainer': ['ascertainer', 'reascertain', 'secretarian'],\n 'ascetic': ['ascetic', 'castice', 'siccate'],\n 'ascham': ['ascham', 'chasma'],\n 'asci': ['acis', 'asci', 'saic'],\n 'ascian': ['ascian', 'sacian', 'scania', 'sicana'],\n 'ascidia': ['ascidia', 'diascia'],\n 'ascii': ['ascii', 'isiac'],\n 'ascites': ['ascites', 'ectasis'],\n 'ascitic': ['ascitic', 'sciatic'],\n 'ascitical': ['ascitical', 'sciatical'],\n 'asclent': ['asclent', 'scantle'],\n 'asclepian': ['asclepian', 'spalacine'],\n 'ascolichen': ['ascolichen', 'chalcosine'],\n 'ascon': ['ascon', 'canso', 'oscan'],\n 'ascot': ['ascot', 'coast', 'costa', 'tacso', 'tasco'],\n 'ascription': ['antipsoric', 'ascription', 'crispation'],\n 'ascry': ['ascry', 'scary', 'scray'],\n 'ascula': ['ascula', 'calusa', 'casual', 'casula', 'causal'],\n 'asdic': ['asdic', 'sadic'],\n 'ase': ['aes', 'ase', 'sea'],\n 'asearch': ['asearch', 'eschara'],\n 'aselli': ['allies', 'aselli'],\n 'asem': ['asem', 'mesa', 'same', 'seam'],\n 'asemia': ['asemia', 'saeima'],\n 'aseptic': ['aseptic', 'spicate'],\n 'aseptol': ['apostle', 'aseptol'],\n 'ash': ['ash', 'sah', 'sha'],\n 'ashanti': ['ashanti', 'sanhita', 'shaitan', 'thasian'],\n 'ashen': ['ashen', 'hanse', 'shane', 'shean'],\n 'asher': ['asher', 'share', 'shear'],\n 'ashet': ['ashet', 'haste', 'sheat'],\n 'ashimmer': ['ashimmer', 'haremism'],\n 'ashir': ['ashir', 'shari'],\n 'ashling': ['anglish', 'ashling'],\n 'ashman': ['ashman', 'shaman'],\n 'ashore': ['ahorse', 'ashore', 'hoarse', 'shorea'],\n 'ashraf': ['afshar', 'ashraf'],\n 'ashur': ['ashur', 'surah'],\n 'ashy': ['ashy', 'shay'],\n 'asian': ['asian', 'naias', 'sanai'],\n 'asiarch': ['arachis', 'asiarch', 'saharic'],\n 'aside': ['aides', 'aside', 'sadie'],\n 'asideu': ['asideu', 'suidae'],\n 'asiento': ['aeonist', 'asiento', 'satieno'],\n 'asilid': ['asilid', 'sialid'],\n 'asilidae': ['asilidae', 'sialidae'],\n 'asilus': ['asilus', 'lasius'],\n 'asimen': ['asimen', 'inseam', 'mesian'],\n 'asimmer': ['amerism', 'asimmer', 'sammier'],\n 'asiphonate': ['asiphonate', 'asthenopia'],\n 'ask': ['ask', 'sak'],\n 'asker': ['asker', 'reask', 'saker', 'sekar'],\n 'askew': ['askew', 'wakes'],\n 'askip': ['askip', 'spaik'],\n 'askr': ['askr', 'kras', 'sark'],\n 'aslant': ['aslant', 'lansat', 'natals', 'santal'],\n 'asleep': ['asleep', 'elapse', 'please'],\n 'aslope': ['aslope', 'poales'],\n 'asmalte': ['asmalte', 'maltase'],\n 'asmile': ['amiles', 'asmile', 'mesail', 'mesial', 'samiel'],\n 'asnort': ['asnort', 'satron'],\n 'asoak': ['asoak', 'asoka'],\n 'asok': ['asok', 'soak', 'soka'],\n 'asoka': ['asoak', 'asoka'],\n 'asonia': ['anosia', 'asonia'],\n 'asop': ['asop', 'sapo', 'soap'],\n 'asor': ['asor', 'rosa', 'soar', 'sora'],\n 'asp': ['asp', 'sap', 'spa'],\n 'aspartic': ['aspartic', 'satrapic'],\n 'aspection': ['aspection', 'stenopaic'],\n 'aspectual': ['aspectual', 'capsulate'],\n 'aspen': ['aspen', 'panse', 'snape', 'sneap', 'spane', 'spean'],\n 'asper': ['asper', 'parse', 'prase', 'spaer', 'spare', 'spear'],\n 'asperate': ['asperate', 'separate'],\n 'asperation': ['anisoptera', 'asperation', 'separation'],\n 'asperge': ['asperge', 'presage'],\n 'asperger': ['asperger', 'presager'],\n 'aspergil': ['aspergil', 'splairge'],\n 'asperite': ['asperite', 'parietes'],\n 'aspermia': ['aspermia', 'sapremia'],\n 'aspermic': ['aspermic', 'sapremic'],\n 'asperser': ['asperser', 'repasser'],\n 'asperulous': ['asperulous', 'pleasurous'],\n 'asphalt': ['asphalt', 'spathal', 'taplash'],\n 'aspic': ['aspic', 'spica'],\n 'aspidinol': ['aspidinol', 'diplasion'],\n 'aspirant': ['aspirant', 'partisan', 'spartina'],\n 'aspirata': ['aspirata', 'parasita'],\n 'aspirate': ['aspirate', 'parasite'],\n 'aspire': ['aspire', 'paries', 'praise', 'sirpea', 'spirea'],\n 'aspirer': ['aspirer', 'praiser', 'serpari'],\n 'aspiring': ['aspiring', 'praising', 'singarip'],\n 'aspiringly': ['aspiringly', 'praisingly'],\n 'aspish': ['aspish', 'phasis'],\n 'asporous': ['asporous', 'saporous'],\n 'asport': ['asport', 'pastor', 'sproat'],\n 'aspread': ['aspread', 'saperda'],\n 'aspring': ['aspring', 'rasping', 'sparing'],\n 'asquirm': ['asquirm', 'marquis'],\n 'assagai': ['assagai', 'gaiassa'],\n 'assailer': ['assailer', 'reassail'],\n 'assam': ['amass', 'assam', 'massa', 'samas'],\n 'assaulter': ['assaulter', 'reassault', 'saleratus'],\n 'assayer': ['assayer', 'reassay'],\n 'assemble': ['assemble', 'beamless'],\n 'assent': ['assent', 'snaste'],\n 'assenter': ['assenter', 'reassent', 'sarsenet'],\n 'assentor': ['assentor', 'essorant', 'starnose'],\n 'assert': ['assert', 'tasser'],\n 'asserter': ['asserter', 'reassert'],\n 'assertible': ['assertible', 'resistable'],\n 'assertional': ['assertional', 'sensatorial'],\n 'assertor': ['assertor', 'assorter', 'oratress', 'reassort'],\n 'asset': ['asset', 'tasse'],\n 'assets': ['assets', 'stases'],\n 'assidean': ['assidean', 'nassidae'],\n 'assiento': ['assiento', 'ossetian'],\n 'assignee': ['agenesis', 'assignee'],\n 'assigner': ['assigner', 'reassign'],\n 'assist': ['assist', 'stasis'],\n 'assister': ['assister', 'reassist'],\n 'associationism': ['associationism', 'misassociation'],\n 'assoilment': ['assoilment', 'salmonsite'],\n 'assorter': ['assertor', 'assorter', 'oratress', 'reassort'],\n 'assuage': ['assuage', 'sausage'],\n 'assume': ['assume', 'seamus'],\n 'assumer': ['assumer', 'erasmus', 'masseur'],\n 'ast': ['ast', 'sat'],\n 'astacus': ['acastus', 'astacus'],\n 'astare': ['astare', 'satrae'],\n 'astart': ['astart', 'strata'],\n 'astartian': ['astartian', 'astrantia'],\n 'astatine': ['astatine', 'sanitate'],\n 'asteep': ['asteep', 'peseta'],\n 'asteer': ['asteer',\n            'easter',\n            'eastre',\n            'reseat',\n            'saeter',\n            'seater',\n            'staree',\n            'teaser',\n            'teresa'],\n 'astelic': ['astelic', 'elastic', 'latices'],\n 'astely': ['alytes', 'astely', 'lysate', 'stealy'],\n 'aster': ['aster', 'serta', 'stare', 'strae', 'tarse', 'teras'],\n 'asteria': ['asarite', 'asteria', 'atresia', 'setaria'],\n 'asterias': ['aristeas', 'asterias'],\n 'asterikos': ['asterikos', 'keratosis'],\n 'asterin': ['asterin', 'eranist', 'restain', 'stainer', 'starnie', 'stearin'],\n 'asterina': ['artesian', 'asterina', 'asternia', 'erastian', 'seatrain'],\n 'asterion': ['arsonite', 'asterion', 'oestrian', 'rosinate', 'serotina'],\n 'astern': ['astern', 'enstar', 'stenar', 'sterna'],\n 'asternia': ['artesian', 'asterina', 'asternia', 'erastian', 'seatrain'],\n 'asteroid': ['asteroid', 'troiades'],\n 'asterope': ['asterope', 'protease'],\n 'asthenopia': ['asiphonate', 'asthenopia'],\n 'asthma': ['amsath', 'asthma'],\n 'asthmogenic': ['asthmogenic', 'mesognathic'],\n 'asthore': ['asthore', 'earshot'],\n 'astian': ['astian', 'tasian'],\n 'astigmism': ['astigmism', 'sigmatism'],\n 'astilbe': ['astilbe', 'bestial', 'blastie', 'stabile'],\n 'astint': ['astint', 'tanist'],\n 'astir': ['arist',\n           'astir',\n           'sitar',\n           'stair',\n           'stria',\n           'tarsi',\n           'tisar',\n           'trias'],\n 'astomous': ['astomous', 'somatous'],\n 'astonied': ['astonied', 'sedation'],\n 'astonisher': ['astonisher', 'reastonish', 'treasonish'],\n 'astor': ['astor', 'roast'],\n 'astragali': ['astragali', 'tarsalgia'],\n 'astrain': ['artisan', 'astrain', 'sartain', 'tsarina'],\n 'astral': ['astral', 'tarsal'],\n 'astrantia': ['astartian', 'astrantia'],\n 'astream': ['artemas', 'astream'],\n 'astrer': ['arrest', 'astrer', 'raster', 'starer'],\n 'astrict': ['astrict', 'cartist', 'stratic'],\n 'astride': ['astride', 'diaster', 'disrate', 'restiad', 'staired'],\n 'astrier': ['astrier', 'tarsier'],\n 'astringe': ['astringe', 'ganister', 'gantries'],\n 'astringent': ['astringent', 'transigent'],\n 'astringer': ['arresting', 'astringer'],\n 'astrodome': ['astrodome', 'roomstead'],\n 'astrofel': ['astrofel', 'forestal'],\n 'astroite': ['astroite', 'ostraite', 'storiate'],\n 'astrolabe': ['astrolabe', 'roastable'],\n 'astrut': ['astrut', 'rattus', 'stuart'],\n 'astur': ['astur', 'surat', 'sutra'],\n 'asturian': ['asturian', 'austrian', 'saturnia'],\n 'astute': ['astute', 'statue'],\n 'astylar': ['astylar', 'saltary'],\n 'asunder': ['asunder', 'drusean'],\n 'asuri': ['arius', 'asuri'],\n 'aswail': ['aswail', 'sawali'],\n 'asweat': ['asweat', 'awaste'],\n 'aswim': ['aswim', 'swami'],\n 'aswing': ['aswing', 'sawing'],\n 'asyla': ['asyla', 'salay', 'sayal'],\n 'asyllabic': ['asyllabic', 'basically'],\n 'asyndetic': ['asyndetic', 'cystidean', 'syndicate'],\n 'asynergia': ['asynergia', 'gainsayer'],\n 'at': ['at', 'ta'],\n 'ata': ['ata', 'taa'],\n 'atabal': ['albata', 'atabal', 'balata'],\n 'atabrine': ['atabrine', 'rabatine'],\n 'atacaman': ['atacaman', 'tamanaca'],\n 'ataentsic': ['anticaste', 'ataentsic'],\n 'atalan': ['atalan', 'tanala'],\n 'atap': ['atap', 'pata', 'tapa'],\n 'atazir': ['atazir', 'ziarat'],\n 'atchison': ['atchison', 'chitosan'],\n 'ate': ['ate', 'eat', 'eta', 'tae', 'tea'],\n 'ateba': ['abate', 'ateba', 'batea', 'beata'],\n 'atebrin': ['atebrin', 'rabinet'],\n 'atechnic': ['atechnic', 'catechin', 'technica'],\n 'atechny': ['atechny', 'chantey'],\n 'ateeter': ['ateeter', 'treatee'],\n 'atef': ['atef', 'fate', 'feat'],\n 'ateles': ['ateles', 'saltee', 'sealet', 'stelae', 'teasel'],\n 'atelets': ['atelets', 'tsatlee'],\n 'atelier': ['atelier', 'tiralee'],\n 'aten': ['ante', 'aten', 'etna', 'nate', 'neat', 'taen', 'tane', 'tean'],\n 'atenism': ['atenism', 'inmeats', 'insteam', 'samnite'],\n 'atenist': ['atenist', 'instate', 'satient', 'steatin'],\n 'ates': ['ates', 'east', 'eats', 'sate', 'seat', 'seta'],\n 'atestine': ['anisette', 'atestine', 'settaine'],\n 'athar': ['arhat', 'artha', 'athar'],\n 'atheism': ['atheism', 'hamites'],\n 'athena': ['ahtena', 'aneath', 'athena'],\n 'athenian': ['anthinae', 'athenian'],\n 'athenor': ['another', 'athenor', 'rheotan'],\n 'athens': ['athens', 'hasten', 'snathe', 'sneath'],\n 'atherine': ['atherine', 'herniate'],\n 'atheris': ['atheris', 'sheriat'],\n 'athermic': ['athermic', 'marchite', 'rhematic'],\n 'athing': ['anight', 'athing'],\n 'athirst': ['athirst', 'rattish', 'tartish'],\n 'athletic': ['athletic', 'thetical'],\n 'athletics': ['athletics', 'statelich'],\n 'athort': ['athort', 'throat'],\n 'athrive': ['athrive', 'hervati'],\n 'ati': ['ait', 'ati', 'ita', 'tai'],\n 'atik': ['atik', 'ikat'],\n 'atimon': ['atimon', 'manito', 'montia'],\n 'atingle': ['atingle', 'gelatin', 'genital', 'langite', 'telinga'],\n 'atip': ['atip', 'pita'],\n 'atis': ['atis', 'sita', 'tsia'],\n 'atlantean': ['antenatal', 'atlantean', 'tantalean'],\n 'atlantic': ['atlantic', 'tantalic'],\n 'atlantid': ['atlantid', 'dilatant'],\n 'atlantite': ['atlantite', 'tantalite'],\n 'atlas': ['atlas', 'salat', 'salta'],\n 'atle': ['atle', 'laet', 'late', 'leat', 'tael', 'tale', 'teal'],\n 'atlee': ['atlee', 'elate'],\n 'atloidean': ['atloidean', 'dealation'],\n 'atma': ['atma', 'tama'],\n 'atman': ['atman', 'manta'],\n 'atmid': ['admit', 'atmid'],\n 'atmo': ['atmo', 'atom', 'moat', 'toma'],\n 'atmogenic': ['atmogenic', 'geomantic'],\n 'atmos': ['atmos', 'stoma', 'tomas'],\n 'atmosphere': ['atmosphere', 'shapometer'],\n 'atmostea': ['atmostea', 'steatoma'],\n 'atnah': ['atnah', 'tanha', 'thana'],\n 'atocia': ['atocia', 'coaita'],\n 'atokal': ['atokal', 'lakota'],\n 'atoll': ['allot', 'atoll'],\n 'atom': ['atmo', 'atom', 'moat', 'toma'],\n 'atomic': ['atomic', 'matico'],\n 'atomics': ['atomics', 'catoism', 'cosmati', 'osmatic', 'somatic'],\n 'atomize': ['atomize', 'miaotze'],\n 'atomizer': ['amortize', 'atomizer'],\n 'atonal': ['atonal', 'latona'],\n 'atonalism': ['anomalist', 'atonalism'],\n 'atone': ['atone', 'oaten'],\n 'atoner': ['atoner', 'norate', 'ornate'],\n 'atonia': ['anotia', 'atonia'],\n 'atonic': ['action', 'atonic', 'cation'],\n 'atony': ['atony', 'ayont'],\n 'atop': ['atop', 'pato'],\n 'atopic': ['atopic', 'capito', 'copita'],\n 'atorai': ['atorai', 'otaria'],\n 'atrail': ['altair', 'atrail', 'atrial', 'lariat', 'latria', 'talari'],\n 'atrepsy': ['atrepsy', 'yapster'],\n 'atresia': ['asarite', 'asteria', 'atresia', 'setaria'],\n 'atresic': ['atresic', 'stearic'],\n 'atresy': ['atresy', 'estray', 'reasty', 'stayer'],\n 'atretic': ['atretic', 'citrate'],\n 'atria': ['arati', 'atria', 'riata', 'tarai', 'tiara'],\n 'atrial': ['altair', 'atrail', 'atrial', 'lariat', 'latria', 'talari'],\n 'atridean': ['anteriad', 'atridean', 'dentaria'],\n 'atrip': ['atrip', 'tapir'],\n 'atrocity': ['atrocity', 'citatory'],\n 'atrophied': ['aphrodite', 'atrophied', 'diaporthe'],\n 'atropia': ['apiator', 'atropia', 'parotia'],\n 'atropic': ['apricot', 'atropic', 'parotic', 'patrico'],\n 'atroscine': ['atroscine', 'certosina', 'ostracine', 'tinoceras', 'tricosane'],\n 'atry': ['arty', 'atry', 'tray'],\n 'attacco': ['attacco', 'toccata'],\n 'attach': ['attach', 'chatta'],\n 'attache': ['attache', 'thecata'],\n 'attacher': ['attacher', 'reattach'],\n 'attacker': ['attacker', 'reattack'],\n 'attain': ['attain', 'tatian'],\n 'attainder': ['antitrade', 'attainder'],\n 'attainer': ['attainer', 'reattain', 'tertiana'],\n 'attar': ['attar', 'tatar'],\n 'attempter': ['attempter', 'reattempt'],\n 'attender': ['attender', 'nattered', 'reattend'],\n 'attention': ['attention', 'tentation'],\n 'attentive': ['attentive', 'tentative'],\n 'attentively': ['attentively', 'tentatively'],\n 'attentiveness': ['attentiveness', 'tentativeness'],\n 'atter': ['atter', 'tater', 'teart', 'tetra', 'treat'],\n 'attermine': ['antimeter', 'attermine', 'interteam', 'terminate', 'tetramine'],\n 'attern': ['attern', 'natter', 'ratten', 'tarten'],\n 'attery': ['attery', 'treaty', 'yatter'],\n 'attester': ['attester', 'reattest'],\n 'attic': ['attic', 'catti', 'tacit'],\n 'attical': ['attical', 'cattail'],\n 'attinge': ['attinge', 'tintage'],\n 'attire': ['attire', 'ratite', 'tertia'],\n 'attired': ['attired', 'tradite'],\n 'attorn': ['attorn', 'ratton', 'rottan'],\n 'attracter': ['attracter', 'reattract'],\n 'attractor': ['attractor', 'tractator'],\n 'attrite': ['attrite', 'titrate'],\n 'attrition': ['attrition', 'titration'],\n 'attune': ['attune', 'nutate', 'tauten'],\n 'atule': ['aleut', 'atule'],\n 'atumble': ['atumble', 'mutable'],\n 'atwin': ['atwin', 'twain', 'witan'],\n 'atypic': ['atypic', 'typica'],\n 'aube': ['aube', 'beau'],\n 'aubrite': ['abiuret', 'aubrite', 'biurate', 'rubiate'],\n 'aucan': ['acuan', 'aucan'],\n 'aucaner': ['arecuna', 'aucaner'],\n 'auchlet': ['auchlet', 'cutheal', 'taluche'],\n 'auction': ['auction', 'caution'],\n 'auctionary': ['auctionary', 'cautionary'],\n 'audiencier': ['audiencier', 'enicuridae'],\n 'auge': ['ague', 'auge'],\n 'augen': ['augen', 'genua'],\n 'augend': ['augend', 'engaud', 'unaged'],\n 'auger': ['argue', 'auger'],\n 'augerer': ['augerer', 'reargue'],\n 'augh': ['augh', 'guha'],\n 'augmenter': ['argenteum', 'augmenter'],\n 'augustan': ['augustan', 'guatusan'],\n 'auh': ['ahu', 'auh', 'hau'],\n 'auk': ['aku', 'auk', 'kua'],\n 'auld': ['auld', 'dual', 'laud', 'udal'],\n 'aulete': ['aulete', 'eluate'],\n 'auletic': ['aleutic', 'auletic', 'caulite', 'lutecia'],\n 'auletris': ['auletris', 'lisuarte'],\n 'aulic': ['aulic', 'lucia'],\n 'aulostoma': ['aulostoma', 'autosomal'],\n 'aulu': ['aulu', 'ulua'],\n 'aum': ['aum', 'mau'],\n 'aumbry': ['ambury', 'aumbry'],\n 'aumil': ['aumil', 'miaul'],\n 'aumrie': ['aumrie', 'uremia'],\n 'auncel': ['auncel', 'cuneal', 'lacune', 'launce', 'unlace'],\n 'aunt': ['antu', 'aunt', 'naut', 'taun', 'tuan', 'tuna'],\n 'auntie': ['auntie', 'uniate'],\n 'auntish': ['auntish', 'inhaust'],\n 'auntly': ['auntly', 'lutany'],\n 'auntsary': ['auntsary', 'unastray'],\n 'aura': ['aaru', 'aura'],\n 'aural': ['aural', 'laura'],\n 'aurar': ['arrau', 'aurar'],\n 'auresca': ['auresca', 'caesura'],\n 'aureus': ['aureus', 'uraeus'],\n 'auricle': ['auricle', 'ciruela'],\n 'auricled': ['auricled', 'radicule'],\n 'auride': ['auride', 'rideau'],\n 'aurin': ['aurin', 'urian'],\n 'aurir': ['aurir', 'urari'],\n 'auriscalp': ['auriscalp', 'spiracula'],\n 'auscult': ['auscult', 'scutula'],\n 'aushar': ['arusha', 'aushar'],\n 'auster': ['auster', 'reatus'],\n 'austere': ['austere', 'euaster'],\n 'australian': ['australian', 'saturnalia'],\n 'australic': ['australic', 'lactarius'],\n 'australite': ['aristulate', 'australite'],\n 'austrian': ['asturian', 'austrian', 'saturnia'],\n 'aute': ['aute', 'etua'],\n 'autecism': ['autecism', 'musicate'],\n 'authotype': ['authotype', 'autophyte'],\n 'autoclave': ['autoclave', 'vacuolate'],\n 'autocrat': ['actuator', 'autocrat'],\n 'autoheterosis': ['autoheterosis', 'heteroousiast'],\n 'autometric': ['autometric', 'tautomeric'],\n 'autometry': ['autometry', 'tautomery'],\n 'autophyte': ['authotype', 'autophyte'],\n 'autoplast': ['autoplast', 'postulata'],\n 'autopsic': ['autopsic', 'captious'],\n 'autopsical': ['apolaustic', 'autopsical'],\n 'autoradiograph': ['autoradiograph', 'radioautograph'],\n 'autoradiographic': ['autoradiographic', 'radioautographic'],\n 'autoradiography': ['autoradiography', 'radioautography'],\n 'autoriser': ['arterious', 'autoriser'],\n 'autosomal': ['aulostoma', 'autosomal'],\n 'auxetic': ['auxetic', 'eutaxic'],\n 'aval': ['aval', 'lava'],\n 'avanti': ['avanti', 'vinata'],\n 'avar': ['avar', 'vara'],\n 'ave': ['ave', 'eva'],\n 'avenge': ['avenge', 'geneva', 'vangee'],\n 'avenger': ['avenger', 'engrave'],\n 'avenin': ['avenin', 'vienna'],\n 'aventine': ['aventine', 'venetian'],\n 'aventurine': ['aventurine', 'uninervate'],\n 'aver': ['aver', 'rave', 'vare', 'vera'],\n 'avera': ['avera', 'erava'],\n 'averil': ['averil', 'elvira'],\n 'averin': ['averin', 'ravine'],\n 'avert': ['avert', 'tarve', 'taver', 'trave'],\n 'avertible': ['avertible', 'veritable'],\n 'avertin': ['avertin', 'vitrean'],\n 'aves': ['aves', 'save', 'vase'],\n 'aviatic': ['aviatic', 'viatica'],\n 'aviator': ['aviator', 'tovaria'],\n 'avicular': ['avicular', 'varicula'],\n 'avid': ['avid', 'diva'],\n 'avidous': ['avidous', 'vaudois'],\n 'avignonese': ['avignonese', 'ingaevones'],\n 'avine': ['avine', 'naive', 'vinea'],\n 'avirulence': ['acervuline', 'avirulence'],\n 'avis': ['avis', 'siva', 'visa'],\n 'avitic': ['avitic', 'viatic'],\n 'avo': ['avo', 'ova'],\n 'avocet': ['avocet', 'octave', 'vocate'],\n 'avodire': ['avodire', 'avoider', 'reavoid'],\n 'avoider': ['avodire', 'avoider', 'reavoid'],\n 'avolation': ['avolation', 'ovational'],\n 'avolitional': ['avolitional', 'violational'],\n 'avoucher': ['avoucher', 'reavouch'],\n 'avower': ['avower', 'reavow'],\n 'avshar': ['avshar', 'varsha'],\n 'avulse': ['alveus', 'avulse'],\n 'aw': ['aw', 'wa'],\n 'awag': ['awag', 'waag'],\n 'awaiter': ['awaiter', 'reawait'],\n 'awakener': ['awakener', 'reawaken'],\n 'awarder': ['awarder', 'reaward'],\n 'awash': ['awash', 'sawah'],\n 'awaste': ['asweat', 'awaste'],\n 'awat': ['awat', 'tawa'],\n 'awd': ['awd', 'daw', 'wad'],\n 'awe': ['awe', 'wae', 'wea'],\n 'aweather': ['aweather', 'wheatear'],\n 'aweek': ['aweek', 'keawe'],\n 'awesome': ['awesome', 'waesome'],\n 'awest': ['awest', 'sweat', 'tawse', 'waste'],\n 'awfu': ['awfu', 'wauf'],\n 'awful': ['awful', 'fulwa'],\n 'awhet': ['awhet', 'wheat'],\n 'awin': ['awin', 'wain'],\n 'awing': ['awing', 'wigan'],\n 'awl': ['awl', 'law'],\n 'awn': ['awn', 'naw', 'wan'],\n 'awned': ['awned', 'dewan', 'waned'],\n 'awner': ['awner', 'newar'],\n 'awning': ['awning', 'waning'],\n 'awny': ['awny', 'wany', 'yawn'],\n 'awol': ['alow', 'awol', 'lowa'],\n 'awork': ['awork', 'korwa'],\n 'awreck': ['awreck', 'wacker'],\n 'awrong': ['awrong', 'growan'],\n 'awry': ['awry', 'wary'],\n 'axel': ['alex', 'axel', 'axle'],\n 'axes': ['axes', 'saxe', 'seax'],\n 'axil': ['alix', 'axil'],\n 'axile': ['axile', 'lexia'],\n 'axine': ['axine', 'xenia'],\n 'axle': ['alex', 'axel', 'axle'],\n 'axon': ['axon', 'noxa', 'oxan'],\n 'axonal': ['axonal', 'oxalan'],\n 'axonia': ['anoxia', 'axonia'],\n 'ay': ['ay', 'ya'],\n 'ayah': ['ayah', 'haya'],\n 'aye': ['aye', 'yea'],\n 'ayont': ['atony', 'ayont'],\n 'azimine': ['aminize', 'animize', 'azimine'],\n 'azo': ['azo', 'zoa'],\n 'azole': ['azole', 'zoeal'],\n 'azon': ['azon', 'onza', 'ozan'],\n 'azorian': ['arizona', 'azorian', 'zonaria'],\n 'azorite': ['azorite', 'zoarite'],\n 'azoxine': ['azoxine', 'oxazine'],\n 'azteca': ['azteca', 'zacate'],\n 'azurine': ['azurine', 'urazine'],\n 'ba': ['ab', 'ba'],\n 'baa': ['aba', 'baa'],\n 'baal': ['alba', 'baal', 'bala'],\n 'baalath': ['baalath', 'bathala'],\n 'baalite': ['baalite', 'bialate', 'labiate'],\n 'baalshem': ['baalshem', 'shamable'],\n 'baar': ['arab', 'arba', 'baar', 'bara'],\n 'bab': ['abb', 'bab'],\n 'baba': ['abba', 'baba'],\n 'babbler': ['babbler', 'blabber', 'brabble'],\n 'babery': ['babery', 'yabber'],\n 'babhan': ['babhan', 'habnab'],\n 'babishly': ['babishly', 'shabbily'],\n 'babishness': ['babishness', 'shabbiness'],\n 'babite': ['babite', 'bebait'],\n 'babu': ['babu', 'buba'],\n 'babul': ['babul', 'bubal'],\n 'baby': ['abby', 'baby'],\n 'babylonish': ['babylonish', 'nabobishly'],\n 'bac': ['bac', 'cab'],\n 'bacao': ['bacao', 'caoba'],\n 'bach': ['bach', 'chab'],\n 'bache': ['bache', 'beach'],\n 'bachel': ['bachel', 'bleach'],\n 'bachelor': ['bachelor', 'crabhole'],\n 'bacillar': ['bacillar', 'cabrilla'],\n 'bacis': ['bacis', 'basic'],\n 'backblow': ['backblow', 'blowback'],\n 'backen': ['backen', 'neback'],\n 'backer': ['backer', 'reback'],\n 'backfall': ['backfall', 'fallback'],\n 'backfire': ['backfire', 'fireback'],\n 'backlog': ['backlog', 'gablock'],\n 'backrun': ['backrun', 'runback'],\n 'backsaw': ['backsaw', 'sawback'],\n 'backset': ['backset', 'setback'],\n 'backstop': ['backstop', 'stopback'],\n 'backswing': ['backswing', 'swingback'],\n 'backward': ['backward', 'drawback'],\n 'backway': ['backway', 'wayback'],\n 'bacon': ['bacon', 'banco'],\n 'bacterial': ['bacterial', 'calibrate'],\n 'bacteriform': ['bacteriform', 'bracteiform'],\n 'bacterin': ['bacterin', 'centibar'],\n 'bacterioid': ['aborticide', 'bacterioid'],\n 'bacterium': ['bacterium', 'cumbraite'],\n 'bactrian': ['bactrian', 'cantabri'],\n 'bacula': ['albuca', 'bacula'],\n 'baculi': ['abulic', 'baculi'],\n 'baculite': ['baculite', 'cubitale'],\n 'baculites': ['baculites', 'bisulcate'],\n 'baculoid': ['baculoid', 'cuboidal'],\n 'bad': ['bad', 'dab'],\n 'badaga': ['badaga', 'dagaba', 'gadaba'],\n 'badan': ['badan', 'banda'],\n 'bade': ['abed', 'bade', 'bead'],\n 'badge': ['badge', 'begad'],\n 'badian': ['badian', 'indaba'],\n 'badigeon': ['badigeon', 'gabioned'],\n 'badly': ['badly', 'baldy', 'blady'],\n 'badon': ['badon', 'bando'],\n 'bae': ['abe', 'bae', 'bea'],\n 'baeria': ['aberia', 'baeria', 'baiera'],\n 'baetulus': ['baetulus', 'subulate'],\n 'baetyl': ['baetyl', 'baylet', 'bleaty'],\n 'baetylic': ['baetylic', 'biacetyl'],\n 'bafta': ['abaft', 'bafta'],\n 'bag': ['bag', 'gab'],\n 'bagani': ['bagani', 'bangia', 'ibanag'],\n 'bagel': ['bagel', 'belga', 'gable', 'gleba'],\n 'bagger': ['bagger', 'beggar'],\n 'bagnio': ['bagnio', 'gabion', 'gobian'],\n 'bago': ['bago', 'boga'],\n 'bagre': ['bagre', 'barge', 'begar', 'rebag'],\n 'bahar': ['bahar', 'bhara'],\n 'bahoe': ['bahoe', 'bohea', 'obeah'],\n 'baht': ['baht', 'bath', 'bhat'],\n 'baiera': ['aberia', 'baeria', 'baiera'],\n 'baignet': ['baignet', 'beating'],\n 'bail': ['albi', 'bail', 'bali'],\n 'bailage': ['algieba', 'bailage'],\n 'bailer': ['bailer', 'barile'],\n 'baillone': ['baillone', 'bonellia'],\n 'bailment': ['bailment', 'libament'],\n 'bailor': ['bailor', 'bioral'],\n 'bailsman': ['bailsman', 'balanism', 'nabalism'],\n 'bain': ['bain', 'bani', 'iban'],\n 'baioc': ['baioc', 'cabio', 'cobia'],\n 'bairam': ['bairam', 'bramia'],\n 'bairn': ['abrin', 'bairn', 'brain', 'brian', 'rabin'],\n 'bairnie': ['aribine', 'bairnie', 'iberian'],\n 'bairnish': ['bairnish', 'bisharin'],\n 'bais': ['absi', 'bais', 'bias', 'isba'],\n 'baister': ['baister', 'tribase'],\n 'baiter': ['baiter', 'barite', 'rebait', 'terbia'],\n 'baith': ['baith', 'habit'],\n 'bajocian': ['bajocian', 'jacobian'],\n 'bakal': ['bakal', 'balak'],\n 'bakatan': ['bakatan', 'batakan'],\n 'bake': ['bake', 'beak'],\n 'baker': ['baker', 'brake', 'break'],\n 'bakerless': ['bakerless', 'brakeless', 'breakless'],\n 'bakery': ['bakery', 'barkey'],\n 'bakie': ['akebi', 'bakie'],\n 'baku': ['baku', 'kuba'],\n 'bal': ['alb', 'bal', 'lab'],\n 'bala': ['alba', 'baal', 'bala'],\n 'baladine': ['baladine', 'balaenid'],\n 'balaenid': ['baladine', 'balaenid'],\n 'balagan': ['balagan', 'bangala'],\n 'balai': ['balai', 'labia'],\n 'balak': ['bakal', 'balak'],\n 'balan': ['alban', 'balan', 'banal', 'laban', 'nabal', 'nabla'],\n 'balancer': ['balancer', 'barnacle'],\n 'balangay': ['balangay', 'bangalay'],\n 'balanic': ['balanic', 'caliban'],\n 'balanid': ['balanid', 'banilad'],\n 'balanism': ['bailsman', 'balanism', 'nabalism'],\n 'balanite': ['albanite', 'balanite', 'nabalite'],\n 'balanites': ['balanites', 'basaltine', 'stainable'],\n 'balantidium': ['antialbumid', 'balantidium'],\n 'balanus': ['balanus', 'nabalus', 'subanal'],\n 'balas': ['balas', 'balsa', 'basal', 'sabal'],\n 'balata': ['albata', 'atabal', 'balata'],\n 'balatron': ['balatron', 'laborant'],\n 'balaustine': ['balaustine', 'unsatiable'],\n 'balaustre': ['balaustre', 'saturable'],\n 'bald': ['bald', 'blad'],\n 'balden': ['balden', 'bandle'],\n 'balder': ['balder', 'bardel', 'bedlar', 'bedral', 'belard', 'blader'],\n 'baldie': ['abdiel', 'baldie'],\n 'baldish': ['baldish', 'bladish'],\n 'baldmoney': ['baldmoney', 'molybdena'],\n 'baldness': ['baldness', 'bandless'],\n 'baldy': ['badly', 'baldy', 'blady'],\n 'bale': ['abel', 'able', 'albe', 'bale', 'beal', 'bela', 'blae'],\n 'balearic': ['balearic', 'cebalrai'],\n 'baleen': ['baleen', 'enable'],\n 'balefire': ['afebrile', 'balefire', 'fireable'],\n 'baleise': ['baleise', 'besaiel'],\n 'baler': ['abler', 'baler', 'belar', 'blare', 'blear'],\n 'balete': ['balete', 'belate'],\n 'bali': ['albi', 'bail', 'bali'],\n 'baline': ['baline', 'blaine'],\n 'balinger': ['balinger', 'ringable'],\n 'balker': ['balker', 'barkle'],\n 'ballaster': ['ballaster', 'reballast'],\n 'ballate': ['ballate', 'tabella'],\n 'balli': ['balli', 'billa'],\n 'balloter': ['balloter', 'reballot'],\n 'ballplayer': ['ballplayer', 'preallably'],\n 'ballroom': ['ballroom', 'moorball'],\n 'ballweed': ['ballweed', 'weldable'],\n 'balm': ['balm', 'lamb'],\n 'balminess': ['balminess', 'lambiness'],\n 'balmlike': ['balmlike', 'lamblike'],\n 'balmy': ['balmy', 'lamby'],\n 'balolo': ['balolo', 'lobola'],\n 'balonea': ['abalone', 'balonea'],\n 'balor': ['balor', 'bolar', 'boral', 'labor', 'lobar'],\n 'balow': ['ablow', 'balow', 'bowla'],\n 'balsa': ['balas', 'balsa', 'basal', 'sabal'],\n 'balsam': ['balsam', 'sambal'],\n 'balsamic': ['balsamic', 'cabalism'],\n 'balsamo': ['absalom', 'balsamo'],\n 'balsamy': ['abysmal', 'balsamy'],\n 'balt': ['balt', 'blat'],\n 'baltei': ['albeit',\n            'albite',\n            'baltei',\n            'belait',\n            'betail',\n            'bletia',\n            'libate'],\n 'balter': ['albert', 'balter', 'labret', 'tabler'],\n 'balteus': ['balteus', 'sublate'],\n 'baltis': ['baltis', 'bisalt'],\n 'balu': ['balu', 'baul', 'bual', 'luba'],\n 'balunda': ['balunda', 'bulanda'],\n 'baluster': ['baluster', 'rustable'],\n 'balut': ['balut', 'tubal'],\n 'bam': ['bam', 'mab'],\n 'ban': ['ban', 'nab'],\n 'bana': ['anba', 'bana'],\n 'banak': ['banak', 'nabak'],\n 'banal': ['alban', 'balan', 'banal', 'laban', 'nabal', 'nabla'],\n 'banat': ['banat', 'batan'],\n 'banca': ['banca', 'caban'],\n 'bancal': ['bancal', 'blanca'],\n 'banco': ['bacon', 'banco'],\n 'banda': ['badan', 'banda'],\n 'bandage': ['bandage', 'dagbane'],\n 'bandar': ['bandar', 'raband'],\n 'bandarlog': ['bandarlog', 'langobard'],\n 'bande': ['bande', 'benda'],\n 'bander': ['bander', 'brenda'],\n 'banderma': ['banderma', 'breadman'],\n 'banderole': ['banderole', 'bandoleer'],\n 'bandhook': ['bandhook', 'handbook'],\n 'bandle': ['balden', 'bandle'],\n 'bandless': ['baldness', 'bandless'],\n 'bando': ['badon', 'bando'],\n 'bandoleer': ['banderole', 'bandoleer'],\n 'bandor': ['bandor', 'bondar', 'roband'],\n 'bandore': ['bandore', 'broaden'],\n 'bane': ['bane', 'bean', 'bena'],\n 'bangala': ['balagan', 'bangala'],\n 'bangalay': ['balangay', 'bangalay'],\n 'bangash': ['bangash', 'nashgab'],\n 'banger': ['banger', 'engarb', 'graben'],\n 'banghy': ['banghy', 'hangby'],\n 'bangia': ['bagani', 'bangia', 'ibanag'],\n 'bangle': ['bangle', 'bengal'],\n 'bani': ['bain', 'bani', 'iban'],\n 'banilad': ['balanid', 'banilad'],\n 'banisher': ['banisher', 'rebanish'],\n 'baniva': ['baniva', 'bavian'],\n 'baniya': ['baniya', 'banyai'],\n 'banjoist': ['banjoist', 'bostanji'],\n 'bank': ['bank', 'knab', 'nabk'],\n 'banker': ['banker', 'barken'],\n 'banshee': ['banshee', 'benshea'],\n 'bantam': ['bantam', 'batman'],\n 'banteng': ['banteng', 'bentang'],\n 'banyai': ['baniya', 'banyai'],\n 'banzai': ['banzai', 'zabian'],\n 'bar': ['bar', 'bra', 'rab'],\n 'bara': ['arab', 'arba', 'baar', 'bara'],\n 'barabra': ['barabra', 'barbara'],\n 'barad': ['barad', 'draba'],\n 'barb': ['barb', 'brab'],\n 'barbara': ['barabra', 'barbara'],\n 'barbe': ['barbe', 'bebar', 'breba', 'rebab'],\n 'barbed': ['barbed', 'dabber'],\n 'barbel': ['barbel', 'labber', 'rabble'],\n 'barbet': ['barbet', 'rabbet', 'tabber'],\n 'barbette': ['barbette', 'bebatter'],\n 'barbion': ['barbion', 'rabboni'],\n 'barbitone': ['barbitone', 'barbotine'],\n 'barbone': ['barbone', 'bebaron'],\n 'barbotine': ['barbitone', 'barbotine'],\n 'barcella': ['barcella', 'caballer'],\n 'barcoo': ['barcoo', 'baroco'],\n 'bard': ['bard', 'brad', 'drab'],\n 'bardel': ['balder', 'bardel', 'bedlar', 'bedral', 'belard', 'blader'],\n 'bardie': ['abider', 'bardie'],\n 'bardily': ['bardily', 'rabidly', 'ridably'],\n 'bardiness': ['bardiness', 'rabidness'],\n 'barding': ['barding', 'brigand'],\n 'bardo': ['abord', 'bardo', 'board', 'broad', 'dobra', 'dorab'],\n 'bardy': ['bardy', 'darby'],\n 'bare': ['bare', 'bear', 'brae'],\n 'barefaced': ['barefaced', 'facebread'],\n 'barefoot': ['barefoot', 'bearfoot'],\n 'barehanded': ['barehanded', 'bradenhead', 'headbander'],\n 'barehead': ['barehead', 'braehead'],\n 'barely': ['barely', 'barley', 'bleary'],\n 'barer': ['barer', 'rebar'],\n 'baretta': ['baretta', 'rabatte', 'tabaret'],\n 'bargainer': ['bargainer', 'rebargain'],\n 'barge': ['bagre', 'barge', 'begar', 'rebag'],\n 'bargeer': ['bargeer', 'gerbera'],\n 'bargeese': ['bargeese', 'begrease'],\n 'bari': ['abir', 'bari', 'rabi'],\n 'baric': ['baric', 'carib', 'rabic'],\n 'barid': ['barid', 'bidar', 'braid', 'rabid'],\n 'barie': ['barie', 'beira', 'erbia', 'rebia'],\n 'barile': ['bailer', 'barile'],\n 'baris': ['baris', 'sabir'],\n 'barish': ['barish', 'shibar'],\n 'barit': ['barit', 'ribat'],\n 'barite': ['baiter', 'barite', 'rebait', 'terbia'],\n 'baritone': ['abrotine', 'baritone', 'obtainer', 'reobtain'],\n 'barken': ['banker', 'barken'],\n 'barker': ['barker', 'braker'],\n 'barkey': ['bakery', 'barkey'],\n 'barkle': ['balker', 'barkle'],\n 'barky': ['barky', 'braky'],\n 'barley': ['barely', 'barley', 'bleary'],\n 'barling': ['barling', 'bringal'],\n 'barm': ['barm', 'bram'],\n 'barmbrack': ['barmbrack', 'brambrack'],\n 'barmote': ['barmote', 'bromate'],\n 'barmy': ['ambry', 'barmy'],\n 'barn': ['barn', 'bran'],\n 'barnabite': ['barnabite', 'rabbanite', 'rabbinate'],\n 'barnacle': ['balancer', 'barnacle'],\n 'barney': ['barney', 'nearby'],\n 'barny': ['barny', 'bryan'],\n 'baroco': ['barcoo', 'baroco'],\n 'barolo': ['barolo', 'robalo'],\n 'baron': ['baron', 'boran'],\n 'baronet': ['baronet', 'reboant'],\n 'barong': ['barong', 'brogan'],\n 'barosmin': ['ambrosin', 'barosmin', 'sabromin'],\n 'barothermograph': ['barothermograph', 'thermobarograph'],\n 'barotse': ['barotse', 'boaster', 'reboast', 'sorbate'],\n 'barpost': ['absorpt', 'barpost'],\n 'barracan': ['barracan', 'barranca'],\n 'barranca': ['barracan', 'barranca'],\n 'barrelet': ['barrelet', 'terebral'],\n 'barret': ['barret', 'barter'],\n 'barrette': ['barrette', 'batterer'],\n 'barrio': ['barrio', 'brairo'],\n 'barsac': ['barsac', 'scarab'],\n 'barse': ['barse', 'besra', 'saber', 'serab'],\n 'bart': ['bart', 'brat'],\n 'barter': ['barret', 'barter'],\n 'barton': ['barton', 'brotan'],\n 'bartsia': ['arabist', 'bartsia'],\n 'barundi': ['barundi', 'unbraid'],\n 'barvel': ['barvel', 'blaver', 'verbal'],\n 'barwise': ['barwise', 'swarbie'],\n 'barye': ['barye', 'beray', 'yerba'],\n 'baryta': ['baryta', 'taryba'],\n 'barytine': ['barytine', 'bryanite'],\n 'baryton': ['baryton', 'brotany'],\n 'bas': ['bas', 'sab'],\n 'basal': ['balas', 'balsa', 'basal', 'sabal'],\n 'basally': ['basally', 'salably'],\n 'basaltic': ['basaltic', 'cabalist'],\n 'basaltine': ['balanites', 'basaltine', 'stainable'],\n 'base': ['base', 'besa', 'sabe', 'seba'],\n 'basella': ['basella', 'sabella', 'salable'],\n 'bash': ['bash', 'shab'],\n 'basial': ['basial', 'blasia'],\n 'basic': ['bacis', 'basic'],\n 'basically': ['asyllabic', 'basically'],\n 'basidium': ['basidium', 'diiambus'],\n 'basil': ['basil', 'labis'],\n 'basileus': ['basileus', 'issuable', 'suasible'],\n 'basilweed': ['basilweed', 'bladewise'],\n 'basinasal': ['basinasal', 'bassalian'],\n 'basinet': ['basinet', 'besaint', 'bestain'],\n 'basion': ['basion', 'bonsai', 'sabino'],\n 'basiparachromatin': ['basiparachromatin', 'marsipobranchiata'],\n 'basket': ['basket', 'betask'],\n 'basketwork': ['basketwork', 'workbasket'],\n 'basos': ['basos', 'basso'],\n 'bassalian': ['basinasal', 'bassalian'],\n 'bassanite': ['bassanite', 'sebastian'],\n 'basset': ['asbest', 'basset'],\n 'basso': ['basos', 'basso'],\n 'bast': ['bast', 'bats', 'stab'],\n 'basta': ['basta', 'staab'],\n 'baste': ['baste', 'beast', 'tabes'],\n 'basten': ['absent', 'basten'],\n 'baster': ['baster', 'bestar', 'breast'],\n 'bastille': ['bastille', 'listable'],\n 'bastion': ['abiston', 'bastion'],\n 'bastionet': ['bastionet', 'obstinate'],\n 'bastite': ['bastite', 'batiste', 'bistate'],\n 'basto': ['basto', 'boast', 'sabot'],\n 'basuto': ['abouts', 'basuto'],\n 'bat': ['bat', 'tab'],\n 'batad': ['abdat', 'batad'],\n 'batakan': ['bakatan', 'batakan'],\n 'bataleur': ['bataleur', 'tabulare'],\n 'batan': ['banat', 'batan'],\n 'batara': ['artaba', 'batara'],\n 'batcher': ['batcher', 'berchta', 'brachet'],\n 'bate': ['abet', 'bate', 'beat', 'beta'],\n 'batea': ['abate', 'ateba', 'batea', 'beata'],\n 'batel': ['batel', 'blate', 'bleat', 'table'],\n 'batement': ['abetment', 'batement'],\n 'bater': ['abret', 'bater', 'berat'],\n 'batfowler': ['afterblow', 'batfowler'],\n 'bath': ['baht', 'bath', 'bhat'],\n 'bathala': ['baalath', 'bathala'],\n 'bathe': ['bathe', 'beath'],\n 'bather': ['bather', 'bertha', 'breath'],\n 'bathonian': ['bathonian', 'nabothian'],\n 'batik': ['batik', 'kitab'],\n 'batino': ['batino', 'oatbin', 'obtain'],\n 'batis': ['absit', 'batis'],\n 'batiste': ['bastite', 'batiste', 'bistate'],\n 'batling': ['batling', 'tabling'],\n 'batman': ['bantam', 'batman'],\n 'batophobia': ['batophobia', 'tabophobia'],\n 'batrachia': ['batrachia', 'brachiata'],\n 'batrachian': ['batrachian', 'branchiata'],\n 'bats': ['bast', 'bats', 'stab'],\n 'battel': ['battel', 'battle', 'tablet'],\n 'batteler': ['batteler', 'berattle'],\n 'battening': ['battening', 'bitangent'],\n 'batter': ['batter', 'bertat', 'tabret', 'tarbet'],\n 'batterer': ['barrette', 'batterer'],\n 'battle': ['battel', 'battle', 'tablet'],\n 'battler': ['battler', 'blatter', 'brattle'],\n 'battue': ['battue', 'tubate'],\n 'batule': ['batule', 'betula', 'tabule'],\n 'batyphone': ['batyphone', 'hypnobate'],\n 'batzen': ['batzen', 'bezant', 'tanzeb'],\n 'baud': ['baud', 'buda', 'daub'],\n 'baul': ['balu', 'baul', 'bual', 'luba'],\n 'baun': ['baun', 'buna', 'nabu', 'nuba'],\n 'bauta': ['abuta', 'bauta'],\n 'bavian': ['baniva', 'bavian'],\n 'baw': ['baw', 'wab'],\n 'bawl': ['bawl', 'blaw'],\n 'bawler': ['bawler', 'brelaw', 'rebawl', 'warble'],\n 'bay': ['aby', 'bay'],\n 'baya': ['baya', 'yaba'],\n 'bayed': ['bayed', 'beady', 'beday'],\n 'baylet': ['baetyl', 'baylet', 'bleaty'],\n 'bayonet': ['bayonet', 'betoyan'],\n 'baze': ['baze', 'ezba'],\n 'bea': ['abe', 'bae', 'bea'],\n 'beach': ['bache', 'beach'],\n 'bead': ['abed', 'bade', 'bead'],\n 'beaded': ['beaded', 'bedead'],\n 'beader': ['beader', 'bedare'],\n 'beadleism': ['beadleism', 'demisable'],\n 'beadlet': ['beadlet', 'belated'],\n 'beady': ['bayed', 'beady', 'beday'],\n 'beagle': ['beagle', 'belage', 'belgae'],\n 'beak': ['bake', 'beak'],\n 'beaker': ['beaker', 'berake', 'rebake'],\n 'beal': ['abel', 'able', 'albe', 'bale', 'beal', 'bela', 'blae'],\n 'bealing': ['algenib', 'bealing', 'belgian', 'bengali'],\n 'beam': ['beam', 'bema'],\n 'beamer': ['ambeer', 'beamer'],\n 'beamless': ['assemble', 'beamless'],\n 'beamster': ['beamster', 'bemaster', 'bestream'],\n 'beamwork': ['beamwork', 'bowmaker'],\n 'beamy': ['beamy', 'embay', 'maybe'],\n 'bean': ['bane', 'bean', 'bena'],\n 'beanfield': ['beanfield', 'definable'],\n 'beant': ['abnet', 'beant'],\n 'bear': ['bare', 'bear', 'brae'],\n 'bearance': ['bearance', 'carabeen'],\n 'beard': ['ardeb', 'beard', 'bread', 'debar'],\n 'beardless': ['beardless', 'breadless'],\n 'beardlessness': ['beardlessness', 'breadlessness'],\n 'bearer': ['bearer', 'rebear'],\n 'bearess': ['bearess', 'bessera'],\n 'bearfoot': ['barefoot', 'bearfoot'],\n 'bearing': ['bearing', 'begrain', 'brainge', 'rigbane'],\n 'bearlet': ['bearlet', 'bleater', 'elberta', 'retable'],\n 'bearm': ['amber', 'bearm', 'bemar', 'bream', 'embar'],\n 'beast': ['baste', 'beast', 'tabes'],\n 'beastlily': ['beastlily', 'bestially'],\n 'beat': ['abet', 'bate', 'beat', 'beta'],\n 'beata': ['abate', 'ateba', 'batea', 'beata'],\n 'beater': ['beater', 'berate', 'betear', 'rebate', 'rebeat'],\n 'beath': ['bathe', 'beath'],\n 'beating': ['baignet', 'beating'],\n 'beau': ['aube', 'beau'],\n 'bebait': ['babite', 'bebait'],\n 'bebar': ['barbe', 'bebar', 'breba', 'rebab'],\n 'bebaron': ['barbone', 'bebaron'],\n 'bebaste': ['bebaste', 'bebeast'],\n 'bebatter': ['barbette', 'bebatter'],\n 'bebay': ['abbey', 'bebay'],\n 'bebeast': ['bebaste', 'bebeast'],\n 'bebog': ['bebog', 'begob', 'gobbe'],\n 'becard': ['becard', 'braced'],\n 'becater': ['becater', 'betrace'],\n 'because': ['because', 'besauce'],\n 'becharm': ['becharm', 'brecham', 'chamber'],\n 'becher': ['becher', 'breech'],\n 'bechern': ['bechern', 'bencher'],\n 'bechirp': ['bechirp', 'brephic'],\n 'becker': ['becker', 'rebeck'],\n 'beclad': ['beclad', 'cabled'],\n 'beclart': ['beclart', 'crablet'],\n 'becloud': ['becloud', 'obclude'],\n 'becram': ['becram', 'camber', 'crambe'],\n 'becrimson': ['becrimson', 'scombrine'],\n 'becry': ['becry', 'bryce'],\n 'bed': ['bed', 'deb'],\n 'bedamn': ['bedamn', 'bedman'],\n 'bedare': ['beader', 'bedare'],\n 'bedark': ['bedark', 'debark'],\n 'beday': ['bayed', 'beady', 'beday'],\n 'bedead': ['beaded', 'bedead'],\n 'bedel': ['bedel', 'bleed'],\n 'beden': ['beden', 'deben', 'deneb'],\n 'bedim': ['bedim', 'imbed'],\n 'bedip': ['bedip', 'biped'],\n 'bedismal': ['bedismal', 'semibald'],\n 'bedlam': ['bedlam', 'beldam', 'blamed'],\n 'bedlar': ['balder', 'bardel', 'bedlar', 'bedral', 'belard', 'blader'],\n 'bedless': ['bedless', 'blessed'],\n 'bedman': ['bedamn', 'bedman'],\n 'bedoctor': ['bedoctor', 'codebtor'],\n 'bedog': ['bedog', 'bodge'],\n 'bedrail': ['bedrail', 'bridale', 'ridable'],\n 'bedral': ['balder', 'bardel', 'bedlar', 'bedral', 'belard', 'blader'],\n 'bedrid': ['bedrid', 'bidder'],\n 'bedrip': ['bedrip', 'prebid'],\n 'bedrock': ['bedrock', 'brocked'],\n 'bedroom': ['bedroom', 'boerdom', 'boredom'],\n 'bedrown': ['bedrown', 'browden'],\n 'bedrug': ['bedrug', 'budger'],\n 'bedsick': ['bedsick', 'sickbed'],\n 'beduck': ['beduck', 'bucked'],\n 'bedur': ['bedur', 'rebud', 'redub'],\n 'bedusk': ['bedusk', 'busked'],\n 'bedust': ['bedust', 'bestud', 'busted'],\n 'beearn': ['beearn', 'berean'],\n 'beeman': ['beeman', 'bemean', 'bename'],\n 'been': ['been', 'bene', 'eben'],\n 'beer': ['beer', 'bere', 'bree'],\n 'beest': ['beest', 'beset'],\n 'beeswing': ['beeswing', 'beswinge'],\n 'befathered': ['befathered', 'featherbed'],\n 'befile': ['befile', 'belief'],\n 'befinger': ['befinger', 'befringe'],\n 'beflea': ['beflea', 'beleaf'],\n 'beflour': ['beflour', 'fourble'],\n 'beflum': ['beflum', 'fumble'],\n 'befret': ['befret', 'bereft'],\n 'befringe': ['befinger', 'befringe'],\n 'begad': ['badge', 'begad'],\n 'begall': ['begall', 'glebal'],\n 'begar': ['bagre', 'barge', 'begar', 'rebag'],\n 'begash': ['begash', 'beshag'],\n 'begat': ['begat', 'betag'],\n 'begettal': ['begettal', 'gettable'],\n 'beggar': ['bagger', 'beggar'],\n 'beggarer': ['beggarer', 'rebeggar'],\n 'begin': ['begin', 'being', 'binge'],\n 'begird': ['begird', 'bridge'],\n 'beglic': ['beglic', 'belgic'],\n 'bego': ['bego', 'egbo'],\n 'begob': ['bebog', 'begob', 'gobbe'],\n 'begone': ['begone', 'engobe'],\n 'begrain': ['bearing', 'begrain', 'brainge', 'rigbane'],\n 'begrease': ['bargeese', 'begrease'],\n 'behaviorism': ['behaviorism', 'misbehavior'],\n 'behears': ['behears', 'beshear'],\n 'behint': ['behint', 'henbit'],\n 'beholder': ['beholder', 'rebehold'],\n 'behorn': ['behorn', 'brehon'],\n 'beid': ['beid', 'bide', 'debi', 'dieb'],\n 'being': ['begin', 'being', 'binge'],\n 'beira': ['barie', 'beira', 'erbia', 'rebia'],\n 'beisa': ['abies', 'beisa'],\n 'bel': ['bel', 'elb'],\n 'bela': ['abel', 'able', 'albe', 'bale', 'beal', 'bela', 'blae'],\n 'belabor': ['belabor', 'borable'],\n 'belaced': ['belaced', 'debacle'],\n 'belage': ['beagle', 'belage', 'belgae'],\n 'belait': ['albeit',\n            'albite',\n            'baltei',\n            'belait',\n            'betail',\n            'bletia',\n            'libate'],\n 'belam': ['amble', 'belam', 'blame', 'mabel'],\n 'belar': ['abler', 'baler', 'belar', 'blare', 'blear'],\n 'belard': ['balder', 'bardel', 'bedlar', 'bedral', 'belard', 'blader'],\n 'belate': ['balete', 'belate'],\n 'belated': ['beadlet', 'belated'],\n 'belaud': ['ablude', 'belaud'],\n 'beldam': ['bedlam', 'beldam', 'blamed'],\n 'beleaf': ['beflea', 'beleaf'],\n 'beleap': ['beleap', 'bepale'],\n 'belga': ['bagel', 'belga', 'gable', 'gleba'],\n 'belgae': ['beagle', 'belage', 'belgae'],\n 'belgian': ['algenib', 'bealing', 'belgian', 'bengali'],\n 'belgic': ['beglic', 'belgic'],\n 'belial': ['alible', 'belial', 'labile', 'liable'],\n 'belief': ['befile', 'belief'],\n 'belili': ['belili', 'billie'],\n 'belite': ['belite', 'beltie', 'bietle'],\n 'belitter': ['belitter', 'tribelet'],\n 'belive': ['belive', 'beveil'],\n 'bella': ['bella', 'label'],\n 'bellied': ['bellied', 'delible'],\n 'bellona': ['allbone', 'bellona'],\n 'bellonian': ['bellonian', 'nonliable'],\n 'bellote': ['bellote', 'lobelet'],\n 'bellower': ['bellower', 'rebellow'],\n 'belltail': ['belltail', 'bletilla', 'tillable'],\n 'bellyer': ['bellyer', 'rebelly'],\n 'bellypinch': ['bellypinch', 'pinchbelly'],\n 'beloid': ['beloid', 'boiled', 'bolide'],\n 'belonger': ['belonger', 'rebelong'],\n 'belonid': ['belonid', 'boldine'],\n 'belord': ['belord', 'bordel', 'rebold'],\n 'below': ['below', 'bowel', 'elbow'],\n 'belt': ['belt', 'blet'],\n 'beltane': ['beltane', 'tenable'],\n 'belter': ['belter', 'elbert', 'treble'],\n 'beltie': ['belite', 'beltie', 'bietle'],\n 'beltine': ['beltine', 'tenible'],\n 'beltir': ['beltir', 'riblet'],\n 'beltman': ['beltman', 'lambent'],\n 'belve': ['belve', 'bevel'],\n 'bema': ['beam', 'bema'],\n 'bemail': ['bemail', 'lambie'],\n 'beman': ['beman', 'nambe'],\n 'bemar': ['amber', 'bearm', 'bemar', 'bream', 'embar'],\n 'bemaster': ['beamster', 'bemaster', 'bestream'],\n 'bemaul': ['bemaul', 'blumea'],\n 'bemeal': ['bemeal', 'meable'],\n 'bemean': ['beeman', 'bemean', 'bename'],\n 'bemire': ['bemire', 'bireme'],\n 'bemitred': ['bemitred', 'timbered'],\n 'bemoil': ['bemoil', 'mobile'],\n 'bemole': ['bemole', 'embole'],\n 'bemusk': ['bemusk', 'embusk'],\n 'ben': ['ben', 'neb'],\n 'bena': ['bane', 'bean', 'bena'],\n 'benacus': ['acubens', 'benacus'],\n 'bename': ['beeman', 'bemean', 'bename'],\n 'benami': ['benami', 'bimane'],\n 'bencher': ['bechern', 'bencher'],\n 'benchwork': ['benchwork', 'workbench'],\n 'benda': ['bande', 'benda'],\n 'bender': ['bender', 'berend', 'rebend'],\n 'bene': ['been', 'bene', 'eben'],\n 'benedight': ['benedight', 'benighted'],\n 'benefiter': ['benefiter', 'rebenefit'],\n 'bengal': ['bangle', 'bengal'],\n 'bengali': ['algenib', 'bealing', 'belgian', 'bengali'],\n 'beni': ['beni', 'bien', 'bine', 'inbe'],\n 'benighted': ['benedight', 'benighted'],\n 'beno': ['beno', 'bone', 'ebon'],\n 'benote': ['benote', 'betone'],\n 'benshea': ['banshee', 'benshea'],\n 'benshee': ['benshee', 'shebeen'],\n 'bentang': ['banteng', 'bentang'],\n 'benton': ['benton', 'bonnet'],\n 'benu': ['benu', 'unbe'],\n 'benward': ['benward', 'brawned'],\n 'benzantialdoxime': ['antibenzaldoxime', 'benzantialdoxime'],\n 'benzein': ['benzein', 'benzine'],\n 'benzine': ['benzein', 'benzine'],\n 'benzo': ['benzo', 'bonze'],\n 'benzofluorene': ['benzofluorene', 'fluorobenzene'],\n 'benzonitrol': ['benzonitrol', 'nitrobenzol'],\n 'bepale': ['beleap', 'bepale'],\n 'bepart': ['bepart', 'berapt', 'betrap'],\n 'bepaste': ['bepaste', 'bespate'],\n 'bepester': ['bepester', 'prebeset'],\n 'beplaster': ['beplaster', 'prestable'],\n 'ber': ['ber', 'reb'],\n 'berake': ['beaker', 'berake', 'rebake'],\n 'berapt': ['bepart', 'berapt', 'betrap'],\n 'berat': ['abret', 'bater', 'berat'],\n 'berate': ['beater', 'berate', 'betear', 'rebate', 'rebeat'],\n 'berattle': ['batteler', 'berattle'],\n 'beraunite': ['beraunite', 'unebriate'],\n 'beray': ['barye', 'beray', 'yerba'],\n 'berberi': ['berberi', 'rebribe'],\n 'berchta': ['batcher', 'berchta', 'brachet'],\n 'bere': ['beer', 'bere', 'bree'],\n 'berean': ['beearn', 'berean'],\n 'bereft': ['befret', 'bereft'],\n 'berend': ['bender', 'berend', 'rebend'],\n 'berg': ['berg', 'gerb'],\n 'bergama': ['bergama', 'megabar'],\n 'bergamo': ['bergamo', 'embargo'],\n 'beri': ['beri', 'bier', 'brei', 'ribe'],\n 'beringed': ['beringed', 'breeding'],\n 'berinse': ['berinse', 'besiren'],\n 'berley': ['berley', 'bleery'],\n 'berlinite': ['berlinite', 'libertine'],\n 'bermudite': ['bermudite', 'demibrute'],\n 'bernard': ['bernard', 'brander', 'rebrand'],\n 'bernese': ['bernese', 'besneer'],\n 'beroe': ['beroe', 'boree'],\n 'beroida': ['beroida', 'boreiad'],\n 'beroll': ['beroll', 'boller'],\n 'berossos': ['berossos', 'obsessor'],\n 'beround': ['beround', 'bounder', 'rebound', 'unbored', 'unorbed', 'unrobed'],\n 'berri': ['berri', 'brier'],\n 'berried': ['berried', 'briered'],\n 'berrybush': ['berrybush', 'shrubbery'],\n 'bersil': ['bersil', 'birsle'],\n 'bert': ['bert', 'bret'],\n 'bertat': ['batter', 'bertat', 'tabret', 'tarbet'],\n 'berth': ['berth', 'breth'],\n 'bertha': ['bather', 'bertha', 'breath'],\n 'berther': ['berther', 'herbert'],\n 'berthing': ['berthing', 'brighten'],\n 'bertie': ['bertie', 'betire', 'rebite'],\n 'bertolonia': ['bertolonia', 'borolanite'],\n 'berust': ['berust', 'buster', 'stuber'],\n 'bervie': ['bervie', 'brieve'],\n 'beryllia': ['beryllia', 'reliably'],\n 'besa': ['base', 'besa', 'sabe', 'seba'],\n 'besaiel': ['baleise', 'besaiel'],\n 'besaint': ['basinet', 'besaint', 'bestain'],\n 'besauce': ['because', 'besauce'],\n 'bescour': ['bescour', 'buceros', 'obscure'],\n 'beset': ['beest', 'beset'],\n 'beshadow': ['beshadow', 'bodewash'],\n 'beshag': ['begash', 'beshag'],\n 'beshear': ['behears', 'beshear'],\n 'beshod': ['beshod', 'debosh'],\n 'besiren': ['berinse', 'besiren'],\n 'besit': ['besit', 'betis'],\n 'beslaver': ['beslaver', 'servable', 'versable'],\n 'beslime': ['beslime', 'besmile'],\n 'beslings': ['beslings', 'blessing', 'glibness'],\n 'beslow': ['beslow', 'bowels'],\n 'besmile': ['beslime', 'besmile'],\n 'besneer': ['bernese', 'besneer'],\n 'besoot': ['besoot', 'bootes'],\n 'besot': ['besot', 'betso'],\n 'besoul': ['besoul', 'blouse', 'obelus'],\n 'besour': ['besour', 'boreus', 'bourse', 'bouser'],\n 'bespate': ['bepaste', 'bespate'],\n 'besra': ['barse', 'besra', 'saber', 'serab'],\n 'bessera': ['bearess', 'bessera'],\n 'bestain': ['basinet', 'besaint', 'bestain'],\n 'bestar': ['baster', 'bestar', 'breast'],\n 'besteer': ['besteer', 'rebeset'],\n 'bestial': ['astilbe', 'bestial', 'blastie', 'stabile'],\n 'bestially': ['beastlily', 'bestially'],\n 'bestiarian': ['antirabies', 'bestiarian'],\n 'bestiary': ['bestiary', 'sybarite'],\n 'bestir': ['bestir', 'bister'],\n 'bestorm': ['bestorm', 'mobster'],\n 'bestowal': ['bestowal', 'stowable'],\n 'bestower': ['bestower', 'rebestow'],\n 'bestraw': ['bestraw', 'wabster'],\n 'bestream': ['beamster', 'bemaster', 'bestream'],\n 'bestrew': ['bestrew', 'webster'],\n 'bestride': ['bestride', 'bistered'],\n 'bestud': ['bedust', 'bestud', 'busted'],\n 'beswinge': ['beeswing', 'beswinge'],\n 'beta': ['abet', 'bate', 'beat', 'beta'],\n 'betag': ['begat', 'betag'],\n 'betail': ['albeit',\n            'albite',\n            'baltei',\n            'belait',\n            'betail',\n            'bletia',\n            'libate'],\n 'betailor': ['betailor', 'laborite', 'orbitale'],\n 'betask': ['basket', 'betask'],\n 'betear': ['beater', 'berate', 'betear', 'rebate', 'rebeat'],\n 'beth': ['beth', 'theb'],\n 'betire': ['bertie', 'betire', 'rebite'],\n 'betis': ['besit', 'betis'],\n 'betone': ['benote', 'betone'],\n 'betoss': ['betoss', 'bosset'],\n 'betoya': ['betoya', 'teaboy'],\n 'betoyan': ['bayonet', 'betoyan'],\n 'betrace': ['becater', 'betrace'],\n 'betrail': ['betrail', 'librate', 'triable', 'trilabe'],\n 'betrap': ['bepart', 'berapt', 'betrap'],\n 'betrayal': ['betrayal', 'tearably'],\n 'betrayer': ['betrayer', 'eatberry', 'rebetray', 'teaberry'],\n 'betread': ['betread', 'debater'],\n 'betrim': ['betrim', 'timber', 'timbre'],\n 'betso': ['besot', 'betso'],\n 'betta': ['betta', 'tabet'],\n 'bettina': ['bettina', 'tabinet', 'tibetan'],\n 'betula': ['batule', 'betula', 'tabule'],\n 'betulin': ['betulin', 'bluntie'],\n 'beturbaned': ['beturbaned', 'unrabbeted'],\n 'beveil': ['belive', 'beveil'],\n 'bevel': ['belve', 'bevel'],\n 'bever': ['bever', 'breve'],\n 'bewailer': ['bewailer', 'rebewail'],\n 'bework': ['bework', 'bowker'],\n 'bey': ['bey', 'bye'],\n 'beydom': ['beydom', 'embody'],\n 'bezant': ['batzen', 'bezant', 'tanzeb'],\n 'bezzo': ['bezzo', 'bozze'],\n 'bhakti': ['bhakti', 'khatib'],\n 'bhandari': ['bhandari', 'hairband'],\n 'bhar': ['bhar', 'harb'],\n 'bhara': ['bahar', 'bhara'],\n 'bhat': ['baht', 'bath', 'bhat'],\n 'bhima': ['bhima', 'biham'],\n 'bhotia': ['bhotia', 'tobiah'],\n 'bhutani': ['bhutani', 'unhabit'],\n 'biacetyl': ['baetylic', 'biacetyl'],\n 'bialate': ['baalite', 'bialate', 'labiate'],\n 'bialveolar': ['bialveolar', 'labiovelar'],\n 'bianca': ['abanic', 'bianca'],\n 'bianco': ['bianco', 'bonaci'],\n 'biangular': ['biangular', 'bulgarian'],\n 'bias': ['absi', 'bais', 'bias', 'isba'],\n 'biatomic': ['biatomic', 'moabitic'],\n 'bible': ['bible', 'blibe'],\n 'bicarpellary': ['bicarpellary', 'prebacillary'],\n 'bickern': ['bickern', 'bricken'],\n 'biclavate': ['activable', 'biclavate'],\n 'bicorn': ['bicorn', 'bicron'],\n 'bicornate': ['bicornate', 'carbonite', 'reboantic'],\n 'bicrenate': ['abenteric', 'bicrenate'],\n 'bicron': ['bicorn', 'bicron'],\n 'bicrural': ['bicrural', 'rubrical'],\n 'bid': ['bid', 'dib'],\n 'bidar': ['barid', 'bidar', 'braid', 'rabid'],\n 'bidder': ['bedrid', 'bidder'],\n 'bide': ['beid', 'bide', 'debi', 'dieb'],\n 'bident': ['bident', 'indebt'],\n 'bidented': ['bidented', 'indebted'],\n 'bider': ['bider', 'bredi', 'bride', 'rebid'],\n 'bidet': ['bidet', 'debit'],\n 'biduous': ['biduous', 'dubious'],\n 'bien': ['beni', 'bien', 'bine', 'inbe'],\n 'bier': ['beri', 'bier', 'brei', 'ribe'],\n 'bietle': ['belite', 'beltie', 'bietle'],\n 'bifer': ['bifer', 'brief', 'fiber'],\n 'big': ['big', 'gib'],\n 'biga': ['agib', 'biga', 'gabi'],\n 'bigamous': ['bigamous', 'subimago'],\n 'bigener': ['bigener', 'rebegin'],\n 'bigential': ['bigential', 'tangibile'],\n 'biggin': ['biggin', 'gibing'],\n 'bigoted': ['bigoted', 'dogbite'],\n 'biham': ['bhima', 'biham'],\n 'bihari': ['bihari', 'habiri'],\n 'bike': ['bike', 'kibe'],\n 'bikram': ['bikram', 'imbark'],\n 'bilaan': ['albian', 'bilaan'],\n 'bilaterality': ['alterability', 'bilaterality', 'relatability'],\n 'bilati': ['bilati', 'tibial'],\n 'bilby': ['bilby', 'libby'],\n 'bildar': ['bildar', 'bridal', 'ribald'],\n 'bilge': ['bilge', 'gibel'],\n 'biliate': ['biliate', 'tibiale'],\n 'bilinear': ['bilinear', 'liberian'],\n 'billa': ['balli', 'billa'],\n 'billboard': ['billboard', 'broadbill'],\n 'biller': ['biller', 'rebill'],\n 'billeter': ['billeter', 'rebillet'],\n 'billie': ['belili', 'billie'],\n 'bilo': ['bilo', 'boil'],\n 'bilobated': ['bilobated', 'bobtailed'],\n 'biltong': ['biltong', 'bolting'],\n 'bim': ['bim', 'mib'],\n 'bimane': ['benami', 'bimane'],\n 'bimodality': ['bimodality', 'myliobatid'],\n 'bimotors': ['bimotors', 'robotism'],\n 'bin': ['bin', 'nib'],\n 'binal': ['albin', 'binal', 'blain'],\n 'binary': ['binary', 'brainy'],\n 'binder': ['binder', 'inbred', 'rebind'],\n 'bindwood': ['bindwood', 'woodbind'],\n 'bine': ['beni', 'bien', 'bine', 'inbe'],\n 'binge': ['begin', 'being', 'binge'],\n 'bino': ['bino', 'bion', 'boni'],\n 'binocular': ['binocular', 'caliburno', 'colubrina'],\n 'binomial': ['binomial', 'mobilian'],\n 'binuclear': ['binuclear', 'incurable'],\n 'biod': ['biod', 'boid'],\n 'bion': ['bino', 'bion', 'boni'],\n 'biopsychological': ['biopsychological', 'psychobiological'],\n 'biopsychology': ['biopsychology', 'psychobiology'],\n 'bioral': ['bailor', 'bioral'],\n 'biorgan': ['biorgan', 'grobian'],\n 'bios': ['bios', 'bois'],\n 'biosociological': ['biosociological', 'sociobiological'],\n 'biota': ['biota', 'ibota'],\n 'biotics': ['biotics', 'cobitis'],\n 'bipartile': ['bipartile', 'pretibial'],\n 'biped': ['bedip', 'biped'],\n 'bipedal': ['bipedal', 'piebald'],\n 'bipersonal': ['bipersonal', 'prisonable'],\n 'bipolar': ['bipolar', 'parboil'],\n 'biracial': ['biracial', 'cibarial'],\n 'birchen': ['birchen', 'brichen'],\n 'bird': ['bird', 'drib'],\n 'birdeen': ['birdeen', 'inbreed'],\n 'birdlet': ['birdlet', 'driblet'],\n 'birdling': ['birdling', 'bridling', 'lingbird'],\n 'birdman': ['birdman', 'manbird'],\n 'birdseed': ['birdseed', 'seedbird'],\n 'birdstone': ['birdstone', 'stonebird'],\n 'bireme': ['bemire', 'bireme'],\n 'biretta': ['biretta', 'brattie', 'ratbite'],\n 'birle': ['birle', 'liber'],\n 'birma': ['abrim', 'birma'],\n 'birn': ['birn', 'brin'],\n 'birny': ['birny', 'briny'],\n 'biron': ['biron', 'inorb', 'robin'],\n 'birse': ['birse', 'ribes'],\n 'birsle': ['bersil', 'birsle'],\n 'birth': ['birth', 'brith'],\n 'bis': ['bis', 'sib'],\n 'bisalt': ['baltis', 'bisalt'],\n 'bisaltae': ['bisaltae', 'satiable'],\n 'bisharin': ['bairnish', 'bisharin'],\n 'bistate': ['bastite', 'batiste', 'bistate'],\n 'bister': ['bestir', 'bister'],\n 'bistered': ['bestride', 'bistered'],\n 'bisti': ['bisti', 'bitis'],\n 'bisulcate': ['baculites', 'bisulcate'],\n 'bit': ['bit', 'tib'],\n 'bitangent': ['battening', 'bitangent'],\n 'bitemporal': ['bitemporal', 'importable'],\n 'biter': ['biter', 'tribe'],\n 'bitis': ['bisti', 'bitis'],\n 'bito': ['bito', 'obit'],\n 'bitonality': ['bitonality', 'notability'],\n 'bittern': ['bittern', 'britten'],\n 'bitumed': ['bitumed', 'budtime'],\n 'biurate': ['abiuret', 'aubrite', 'biurate', 'rubiate'],\n 'biwa': ['biwa', 'wabi'],\n 'bizarre': ['bizarre', 'brazier'],\n 'bizet': ['bizet', 'zibet'],\n 'blabber': ['babbler', 'blabber', 'brabble'],\n 'blackacre': ['blackacre', 'crackable'],\n 'blad': ['bald', 'blad'],\n 'blader': ['balder', 'bardel', 'bedlar', 'bedral', 'belard', 'blader'],\n 'bladewise': ['basilweed', 'bladewise'],\n 'bladish': ['baldish', 'bladish'],\n 'blady': ['badly', 'baldy', 'blady'],\n 'blae': ['abel', 'able', 'albe', 'bale', 'beal', 'bela', 'blae'],\n 'blaeberry': ['blaeberry', 'bleaberry'],\n 'blaeness': ['ableness', 'blaeness', 'sensable'],\n 'blain': ['albin', 'binal', 'blain'],\n 'blaine': ['baline', 'blaine'],\n 'blair': ['blair', 'brail', 'libra'],\n 'blake': ['blake', 'bleak', 'kabel'],\n 'blame': ['amble', 'belam', 'blame', 'mabel'],\n 'blamed': ['bedlam', 'beldam', 'blamed'],\n 'blamer': ['ambler', 'blamer', 'lamber', 'marble', 'ramble'],\n 'blaming': ['ambling', 'blaming'],\n 'blamingly': ['amblingly', 'blamingly'],\n 'blanca': ['bancal', 'blanca'],\n 'blare': ['abler', 'baler', 'belar', 'blare', 'blear'],\n 'blarina': ['blarina', 'branial'],\n 'blarney': ['blarney', 'renably'],\n 'blas': ['blas', 'slab'],\n 'blase': ['blase', 'sable'],\n 'blasia': ['basial', 'blasia'],\n 'blastema': ['blastema', 'lambaste'],\n 'blastemic': ['blastemic', 'cembalist'],\n 'blaster': ['blaster', 'reblast', 'stabler'],\n 'blastie': ['astilbe', 'bestial', 'blastie', 'stabile'],\n 'blasting': ['blasting', 'stabling'],\n 'blastoderm': ['blastoderm', 'dermoblast'],\n 'blastogenic': ['blastogenic', 'genoblastic'],\n 'blastomeric': ['blastomeric', 'meroblastic'],\n 'blastomycetic': ['blastomycetic', 'cytoblastemic'],\n 'blastomycetous': ['blastomycetous', 'cytoblastemous'],\n 'blasty': ['blasty', 'stably'],\n 'blat': ['balt', 'blat'],\n 'blate': ['batel', 'blate', 'bleat', 'table'],\n 'blather': ['blather', 'halbert'],\n 'blatter': ['battler', 'blatter', 'brattle'],\n 'blaver': ['barvel', 'blaver', 'verbal'],\n 'blaw': ['bawl', 'blaw'],\n 'blay': ['ably', 'blay', 'yalb'],\n 'blazoner': ['albronze', 'blazoner'],\n 'bleaberry': ['blaeberry', 'bleaberry'],\n 'bleach': ['bachel', 'bleach'],\n 'bleacher': ['bleacher', 'rebleach'],\n 'bleak': ['blake', 'bleak', 'kabel'],\n 'bleaky': ['bleaky', 'kabyle'],\n 'blear': ['abler', 'baler', 'belar', 'blare', 'blear'],\n 'bleared': ['bleared', 'reblade'],\n 'bleary': ['barely', 'barley', 'bleary'],\n 'bleat': ['batel', 'blate', 'bleat', 'table'],\n 'bleater': ['bearlet', 'bleater', 'elberta', 'retable'],\n 'bleating': ['bleating', 'tangible'],\n 'bleaty': ['baetyl', 'baylet', 'bleaty'],\n 'bleed': ['bedel', 'bleed'],\n 'bleery': ['berley', 'bleery'],\n 'blender': ['blender', 'reblend'],\n 'blendure': ['blendure', 'rebundle'],\n 'blennoid': ['blennoid', 'blondine'],\n 'blennoma': ['blennoma', 'nobleman'],\n 'bleo': ['bleo', 'bole', 'lobe'],\n 'blepharocera': ['blepharocera', 'reproachable'],\n 'blessed': ['bedless', 'blessed'],\n 'blesser': ['blesser', 'rebless'],\n 'blessing': ['beslings', 'blessing', 'glibness'],\n 'blet': ['belt', 'blet'],\n 'bletia': ['albeit',\n            'albite',\n            'baltei',\n            'belait',\n            'betail',\n            'bletia',\n            'libate'],\n 'bletilla': ['belltail', 'bletilla', 'tillable'],\n 'blibe': ['bible', 'blibe'],\n 'blighter': ['blighter', 'therblig'],\n 'blimy': ['blimy', 'limby'],\n 'blister': ['blister', 'bristle'],\n 'blisterwort': ['blisterwort', 'bristlewort'],\n 'blitter': ['blitter', 'brittle', 'triblet'],\n 'blo': ['blo', 'lob'],\n 'bloated': ['bloated', 'lobated'],\n 'bloater': ['alberto', 'bloater', 'latrobe'],\n 'bloating': ['bloating', 'obligant'],\n 'blocker': ['blocker', 'brockle', 'reblock'],\n 'blonde': ['blonde', 'bolden'],\n 'blondine': ['blennoid', 'blondine'],\n 'blood': ['blood', 'boldo'],\n 'bloodleaf': ['bloodleaf', 'floodable'],\n 'bloomer': ['bloomer', 'rebloom'],\n 'bloomy': ['bloomy', 'lomboy'],\n 'blore': ['blore', 'roble'],\n 'blosmy': ['blosmy', 'symbol'],\n 'blot': ['blot', 'bolt'],\n 'blotless': ['blotless', 'boltless'],\n 'blotter': ['blotter', 'bottler'],\n 'blotting': ['blotting', 'bottling'],\n 'blouse': ['besoul', 'blouse', 'obelus'],\n 'blow': ['blow', 'bowl'],\n 'blowback': ['backblow', 'blowback'],\n 'blower': ['blower', 'bowler', 'reblow', 'worble'],\n 'blowfly': ['blowfly', 'flyblow'],\n 'blowing': ['blowing', 'bowling'],\n 'blowout': ['blowout', 'outblow', 'outbowl'],\n 'blowup': ['blowup', 'upblow'],\n 'blowy': ['blowy', 'bowly'],\n 'blub': ['blub', 'bulb'],\n 'blubber': ['blubber', 'bubbler'],\n 'blue': ['blue', 'lube'],\n 'bluegill': ['bluegill', 'gullible'],\n 'bluenose': ['bluenose', 'nebulose'],\n 'bluer': ['bluer', 'brule', 'burel', 'ruble'],\n 'blues': ['blues', 'bulse'],\n 'bluffer': ['bluffer', 'rebluff'],\n 'bluishness': ['bluishness', 'blushiness'],\n 'bluism': ['bluism', 'limbus'],\n 'blumea': ['bemaul', 'blumea'],\n 'blunder': ['blunder', 'bundler'],\n 'blunderer': ['blunderer', 'reblunder'],\n 'blunge': ['blunge', 'bungle'],\n 'blunger': ['blunger', 'bungler'],\n 'bluntie': ['betulin', 'bluntie'],\n 'blur': ['blur', 'burl'],\n 'blushiness': ['bluishness', 'blushiness'],\n 'bluster': ['bluster', 'brustle', 'bustler'],\n 'boa': ['abo', 'boa'],\n 'boar': ['boar', 'bora'],\n 'board': ['abord', 'bardo', 'board', 'broad', 'dobra', 'dorab'],\n 'boarder': ['arbored', 'boarder', 'reboard'],\n 'boardly': ['boardly', 'broadly'],\n 'boardy': ['boardy', 'boyard', 'byroad'],\n 'boast': ['basto', 'boast', 'sabot'],\n 'boaster': ['barotse', 'boaster', 'reboast', 'sorbate'],\n 'boasting': ['boasting', 'bostangi'],\n 'boat': ['boat', 'bota', 'toba'],\n 'boater': ['boater', 'borate', 'rebato'],\n 'boathouse': ['boathouse', 'houseboat'],\n 'bobac': ['bobac', 'cabob'],\n 'bobfly': ['bobfly', 'flobby'],\n 'bobo': ['bobo', 'boob'],\n 'bobtailed': ['bilobated', 'bobtailed'],\n 'bocardo': ['bocardo', 'cordoba'],\n 'boccale': ['boccale', 'cabocle'],\n 'bocher': ['bocher', 'broche'],\n 'bocking': ['bocking', 'kingcob'],\n 'bod': ['bod', 'dob'],\n 'bode': ['bode', 'dobe'],\n 'boden': ['boden', 'boned'],\n 'boder': ['boder', 'orbed'],\n 'bodewash': ['beshadow', 'bodewash'],\n 'bodge': ['bedog', 'bodge'],\n 'bodhi': ['bodhi', 'dhobi'],\n 'bodice': ['bodice', 'ceboid'],\n 'bodier': ['bodier', 'boride', 'brodie'],\n 'bodle': ['bodle', 'boled', 'lobed'],\n 'bodo': ['bodo', 'bood', 'doob'],\n 'body': ['body', 'boyd', 'doby'],\n 'boer': ['boer', 'bore', 'robe'],\n 'boerdom': ['bedroom', 'boerdom', 'boredom'],\n 'boethian': ['boethian', 'nebaioth'],\n 'bog': ['bog', 'gob'],\n 'boga': ['bago', 'boga'],\n 'bogan': ['bogan', 'goban'],\n 'bogeyman': ['bogeyman', 'moneybag'],\n 'boggler': ['boggler', 'broggle'],\n 'boglander': ['boglander', 'longbeard'],\n 'bogle': ['bogle', 'globe'],\n 'boglet': ['boglet', 'goblet'],\n 'bogo': ['bogo', 'gobo'],\n 'bogue': ['bogue', 'bouge'],\n 'bogum': ['bogum', 'gumbo'],\n 'bogy': ['bogy', 'bygo', 'goby'],\n 'bohea': ['bahoe', 'bohea', 'obeah'],\n 'boho': ['boho', 'hobo'],\n 'bohor': ['bohor', 'rohob'],\n 'boid': ['biod', 'boid'],\n 'boil': ['bilo', 'boil'],\n 'boiled': ['beloid', 'boiled', 'bolide'],\n 'boiler': ['boiler', 'reboil'],\n 'boilover': ['boilover', 'overboil'],\n 'bois': ['bios', 'bois'],\n 'bojo': ['bojo', 'jobo'],\n 'bolar': ['balor', 'bolar', 'boral', 'labor', 'lobar'],\n 'bolden': ['blonde', 'bolden'],\n 'bolderian': ['bolderian', 'ordinable'],\n 'boldine': ['belonid', 'boldine'],\n 'boldness': ['boldness', 'bondless'],\n 'boldo': ['blood', 'boldo'],\n 'bole': ['bleo', 'bole', 'lobe'],\n 'boled': ['bodle', 'boled', 'lobed'],\n 'bolelia': ['bolelia', 'lobelia', 'obelial'],\n 'bolide': ['beloid', 'boiled', 'bolide'],\n 'boller': ['beroll', 'boller'],\n 'bolo': ['bolo', 'bool', 'lobo', 'obol'],\n 'bolster': ['bolster', 'lobster'],\n 'bolt': ['blot', 'bolt'],\n 'boltage': ['boltage', 'globate'],\n 'bolter': ['bolter', 'orblet', 'reblot', 'rebolt'],\n 'bolthead': ['bolthead', 'theobald'],\n 'bolting': ['biltong', 'bolting'],\n 'boltless': ['blotless', 'boltless'],\n 'boltonia': ['boltonia', 'lobation', 'oblation'],\n 'bom': ['bom', 'mob'],\n 'boma': ['ambo', 'boma'],\n 'bombable': ['bombable', 'mobbable'],\n 'bombacaceae': ['bombacaceae', 'cabombaceae'],\n 'bomber': ['bomber', 'mobber'],\n 'bon': ['bon', 'nob'],\n 'bonaci': ['bianco', 'bonaci'],\n 'bonair': ['bonair', 'borani'],\n 'bondage': ['bondage', 'dogbane'],\n 'bondar': ['bandor', 'bondar', 'roband'],\n 'bondless': ['boldness', 'bondless'],\n 'bone': ['beno', 'bone', 'ebon'],\n 'boned': ['boden', 'boned'],\n 'bonefish': ['bonefish', 'fishbone'],\n 'boneless': ['boneless', 'noblesse'],\n 'bonellia': ['baillone', 'bonellia'],\n 'boner': ['boner', 'borne'],\n 'boney': ['boney', 'ebony'],\n 'boni': ['bino', 'bion', 'boni'],\n 'bonitary': ['bonitary', 'trainboy'],\n 'bonk': ['bonk', 'knob'],\n 'bonnet': ['benton', 'bonnet'],\n 'bonsai': ['basion', 'bonsai', 'sabino'],\n 'bonus': ['bonus', 'bosun'],\n 'bony': ['bony', 'byon'],\n 'bonze': ['benzo', 'bonze'],\n 'bonzer': ['bonzer', 'bronze'],\n 'boob': ['bobo', 'boob'],\n 'bood': ['bodo', 'bood', 'doob'],\n 'booger': ['booger', 'goober'],\n 'bookcase': ['bookcase', 'casebook'],\n 'booker': ['booker', 'brooke', 'rebook'],\n 'bookland': ['bookland', 'landbook'],\n 'bookshop': ['bookshop', 'shopbook'],\n 'bookward': ['bookward', 'woodbark'],\n 'bookwork': ['bookwork', 'workbook'],\n 'bool': ['bolo', 'bool', 'lobo', 'obol'],\n 'booly': ['booly', 'looby'],\n 'boomingly': ['boomingly', 'myoglobin'],\n 'boopis': ['boopis', 'obispo'],\n 'boor': ['boor', 'boro', 'broo'],\n 'boort': ['boort', 'robot'],\n 'boost': ['boost', 'boots'],\n 'bootes': ['besoot', 'bootes'],\n 'boother': ['boother', 'theorbo'],\n 'boots': ['boost', 'boots'],\n 'bop': ['bop', 'pob'],\n 'bor': ['bor', 'orb', 'rob'],\n 'bora': ['boar', 'bora'],\n 'borable': ['belabor', 'borable'],\n 'boracic': ['boracic', 'braccio'],\n 'boral': ['balor', 'bolar', 'boral', 'labor', 'lobar'],\n 'boran': ['baron', 'boran'],\n 'borani': ['bonair', 'borani'],\n 'borate': ['boater', 'borate', 'rebato'],\n 'bord': ['bord', 'brod'],\n 'bordel': ['belord', 'bordel', 'rebold'],\n 'bordello': ['bordello', 'doorbell'],\n 'border': ['border', 'roberd'],\n 'borderer': ['borderer', 'broderer'],\n 'bordure': ['bordure', 'bourder'],\n 'bore': ['boer', 'bore', 'robe'],\n 'boredom': ['bedroom', 'boerdom', 'boredom'],\n 'boree': ['beroe', 'boree'],\n 'boreen': ['boreen', 'enrobe', 'neebor', 'rebone'],\n 'boreiad': ['beroida', 'boreiad'],\n 'boreism': ['boreism', 'semiorb'],\n 'borer': ['borer', 'rerob', 'rober'],\n 'boreus': ['besour', 'boreus', 'bourse', 'bouser'],\n 'borg': ['borg', 'brog', 'gorb'],\n 'boric': ['boric', 'cribo', 'orbic'],\n 'boride': ['bodier', 'boride', 'brodie'],\n 'boring': ['boring', 'robing'],\n 'boringly': ['boringly', 'goblinry'],\n 'borlase': ['borlase', 'labrose', 'rosabel'],\n 'borne': ['boner', 'borne'],\n 'borneo': ['borneo', 'oberon'],\n 'bornite': ['bornite', 'robinet'],\n 'boro': ['boor', 'boro', 'broo'],\n 'borocaine': ['borocaine', 'coenobiar'],\n 'borofluohydric': ['borofluohydric', 'hydrofluoboric'],\n 'borolanite': ['bertolonia', 'borolanite'],\n 'boron': ['boron', 'broon'],\n 'boronic': ['boronic', 'cobiron'],\n 'borrower': ['borrower', 'reborrow'],\n 'borscht': ['borscht', 'bortsch'],\n 'bort': ['bort', 'brot'],\n 'bortsch': ['borscht', 'bortsch'],\n 'bos': ['bos', 'sob'],\n 'bosc': ['bosc', 'scob'],\n 'boser': ['boser', 'brose', 'sober'],\n 'bosn': ['bosn', 'nobs', 'snob'],\n 'bosselation': ['bosselation', 'eosinoblast'],\n 'bosset': ['betoss', 'bosset'],\n 'bostangi': ['boasting', 'bostangi'],\n 'bostanji': ['banjoist', 'bostanji'],\n 'bosun': ['bonus', 'bosun'],\n 'bota': ['boat', 'bota', 'toba'],\n 'botanical': ['botanical', 'catabolin'],\n 'botanophilist': ['botanophilist', 'philobotanist'],\n 'bote': ['bote', 'tobe'],\n 'botein': ['botein', 'tobine'],\n 'both': ['both', 'thob'],\n 'bottler': ['blotter', 'bottler'],\n 'bottling': ['blotting', 'bottling'],\n 'bouge': ['bogue', 'bouge'],\n 'bouget': ['bouget', 'outbeg'],\n 'bouk': ['bouk', 'kobu'],\n 'boulder': ['boulder', 'doubler'],\n 'bouldering': ['bouldering', 'redoubling'],\n 'boulter': ['boulter', 'trouble'],\n 'bounden': ['bounden', 'unboned'],\n 'bounder': ['beround', 'bounder', 'rebound', 'unbored', 'unorbed', 'unrobed'],\n 'bounding': ['bounding', 'unboding'],\n 'bourder': ['bordure', 'bourder'],\n 'bourn': ['bourn', 'bruno'],\n 'bourse': ['besour', 'boreus', 'bourse', 'bouser'],\n 'bouser': ['besour', 'boreus', 'bourse', 'bouser'],\n 'bousy': ['bousy', 'byous'],\n 'bow': ['bow', 'wob'],\n 'bowel': ['below', 'bowel', 'elbow'],\n 'boweled': ['boweled', 'elbowed'],\n 'bowels': ['beslow', 'bowels'],\n 'bowery': ['bowery', 'bowyer', 'owerby'],\n 'bowie': ['bowie', 'woibe'],\n 'bowker': ['bework', 'bowker'],\n 'bowl': ['blow', 'bowl'],\n 'bowla': ['ablow', 'balow', 'bowla'],\n 'bowler': ['blower', 'bowler', 'reblow', 'worble'],\n 'bowling': ['blowing', 'bowling'],\n 'bowly': ['blowy', 'bowly'],\n 'bowmaker': ['beamwork', 'bowmaker'],\n 'bowyer': ['bowery', 'bowyer', 'owerby'],\n 'boxer': ['boxer', 'rebox'],\n 'boxwork': ['boxwork', 'workbox'],\n 'boyang': ['boyang', 'yagnob'],\n 'boyard': ['boardy', 'boyard', 'byroad'],\n 'boyd': ['body', 'boyd', 'doby'],\n 'boyship': ['boyship', 'shipboy'],\n 'bozo': ['bozo', 'zobo'],\n 'bozze': ['bezzo', 'bozze'],\n 'bra': ['bar', 'bra', 'rab'],\n 'brab': ['barb', 'brab'],\n 'brabble': ['babbler', 'blabber', 'brabble'],\n 'braca': ['acrab', 'braca'],\n 'braccio': ['boracic', 'braccio'],\n 'brace': ['acerb', 'brace', 'caber'],\n 'braced': ['becard', 'braced'],\n 'braceleted': ['braceleted', 'celebrated'],\n 'bracer': ['bracer', 'craber'],\n 'braces': ['braces', 'scrabe'],\n 'brachet': ['batcher', 'berchta', 'brachet'],\n 'brachiata': ['batrachia', 'brachiata'],\n 'brachiofacial': ['brachiofacial', 'faciobrachial'],\n 'brachiopode': ['brachiopode', 'cardiophobe'],\n 'bracon': ['bracon', 'carbon', 'corban'],\n 'bractea': ['abreact', 'bractea', 'cabaret'],\n 'bracteal': ['bracteal', 'cartable'],\n 'bracteiform': ['bacteriform', 'bracteiform'],\n 'bracteose': ['bracteose', 'obsecrate'],\n 'brad': ['bard', 'brad', 'drab'],\n 'bradenhead': ['barehanded', 'bradenhead', 'headbander'],\n 'brae': ['bare', 'bear', 'brae'],\n 'braehead': ['barehead', 'braehead'],\n 'brag': ['brag', 'garb', 'grab'],\n 'bragi': ['bragi', 'girba'],\n 'bragless': ['bragless', 'garbless'],\n 'brahmi': ['brahmi', 'mihrab'],\n 'brahui': ['brahui', 'habiru'],\n 'braid': ['barid', 'bidar', 'braid', 'rabid'],\n 'braider': ['braider', 'rebraid'],\n 'brail': ['blair', 'brail', 'libra'],\n 'braille': ['braille', 'liberal'],\n 'brain': ['abrin', 'bairn', 'brain', 'brian', 'rabin'],\n 'brainache': ['brainache', 'branchiae'],\n 'brainge': ['bearing', 'begrain', 'brainge', 'rigbane'],\n 'brainwater': ['brainwater', 'waterbrain'],\n 'brainy': ['binary', 'brainy'],\n 'braird': ['braird', 'briard'],\n 'brairo': ['barrio', 'brairo'],\n 'braise': ['braise', 'rabies', 'rebias'],\n 'brake': ['baker', 'brake', 'break'],\n 'brakeage': ['brakeage', 'breakage'],\n 'brakeless': ['bakerless', 'brakeless', 'breakless'],\n 'braker': ['barker', 'braker'],\n 'braky': ['barky', 'braky'],\n 'bram': ['barm', 'bram'],\n 'brambrack': ['barmbrack', 'brambrack'],\n 'bramia': ['bairam', 'bramia'],\n 'bran': ['barn', 'bran'],\n 'brancher': ['brancher', 'rebranch'],\n 'branchiae': ['brainache', 'branchiae'],\n 'branchiata': ['batrachian', 'branchiata'],\n 'branchiopoda': ['branchiopoda', 'podobranchia'],\n 'brander': ['bernard', 'brander', 'rebrand'],\n 'brandi': ['brandi', 'riband'],\n 'brandisher': ['brandisher', 'rebrandish'],\n 'branial': ['blarina', 'branial'],\n 'brankie': ['brankie', 'inbreak'],\n 'brash': ['brash', 'shrab'],\n 'brasiletto': ['brasiletto', 'strobilate'],\n 'brassie': ['brassie', 'rebasis'],\n 'brat': ['bart', 'brat'],\n 'brattie': ['biretta', 'brattie', 'ratbite'],\n 'brattle': ['battler', 'blatter', 'brattle'],\n 'braunite': ['braunite', 'urbanite', 'urbinate'],\n 'brave': ['brave', 'breva'],\n 'bravoite': ['abortive', 'bravoite'],\n 'brawler': ['brawler', 'warbler'],\n 'brawling': ['brawling', 'warbling'],\n 'brawlingly': ['brawlingly', 'warblingly'],\n 'brawly': ['brawly', 'byrlaw', 'warbly'],\n 'brawned': ['benward', 'brawned'],\n 'bray': ['bray', 'yarb'],\n 'braza': ['braza', 'zabra'],\n 'braze': ['braze', 'zebra'],\n 'brazier': ['bizarre', 'brazier'],\n 'bread': ['ardeb', 'beard', 'bread', 'debar'],\n 'breadless': ['beardless', 'breadless'],\n 'breadlessness': ['beardlessness', 'breadlessness'],\n 'breadman': ['banderma', 'breadman'],\n 'breadnut': ['breadnut', 'turbaned'],\n 'breaghe': ['breaghe', 'herbage'],\n 'break': ['baker', 'brake', 'break'],\n 'breakage': ['brakeage', 'breakage'],\n 'breakless': ['bakerless', 'brakeless', 'breakless'],\n 'breakout': ['breakout', 'outbreak'],\n 'breakover': ['breakover', 'overbreak'],\n 'breakstone': ['breakstone', 'stonebreak'],\n 'breakup': ['breakup', 'upbreak'],\n 'breakwind': ['breakwind', 'windbreak'],\n 'bream': ['amber', 'bearm', 'bemar', 'bream', 'embar'],\n 'breast': ['baster', 'bestar', 'breast'],\n 'breasting': ['breasting', 'brigantes'],\n 'breastpin': ['breastpin', 'stepbairn'],\n 'breastrail': ['arbalister', 'breastrail'],\n 'breastweed': ['breastweed', 'sweetbread'],\n 'breath': ['bather', 'bertha', 'breath'],\n 'breathe': ['breathe', 'rebathe'],\n 'breba': ['barbe', 'bebar', 'breba', 'rebab'],\n 'breccia': ['acerbic', 'breccia'],\n 'brecham': ['becharm', 'brecham', 'chamber'],\n 'brede': ['brede', 'breed', 'rebed'],\n 'bredi': ['bider', 'bredi', 'bride', 'rebid'],\n 'bree': ['beer', 'bere', 'bree'],\n 'breech': ['becher', 'breech'],\n 'breed': ['brede', 'breed', 'rebed'],\n 'breeder': ['breeder', 'rebreed'],\n 'breeding': ['beringed', 'breeding'],\n 'brehon': ['behorn', 'brehon'],\n 'brei': ['beri', 'bier', 'brei', 'ribe'],\n 'brelaw': ['bawler', 'brelaw', 'rebawl', 'warble'],\n 'breme': ['breme', 'ember'],\n 'bremia': ['ambier', 'bremia', 'embira'],\n 'brenda': ['bander', 'brenda'],\n 'brephic': ['bechirp', 'brephic'],\n 'bret': ['bert', 'bret'],\n 'breth': ['berth', 'breth'],\n 'breva': ['brave', 'breva'],\n 'breve': ['bever', 'breve'],\n 'brewer': ['brewer', 'rebrew'],\n 'brey': ['brey', 'byre', 'yerb'],\n 'brian': ['abrin', 'bairn', 'brain', 'brian', 'rabin'],\n 'briard': ['braird', 'briard'],\n 'briber': ['briber', 'ribber'],\n 'brichen': ['birchen', 'brichen'],\n 'brickel': ['brickel', 'brickle'],\n 'bricken': ['bickern', 'bricken'],\n 'brickle': ['brickel', 'brickle'],\n 'bricole': ['bricole', 'corbeil', 'orbicle'],\n 'bridal': ['bildar', 'bridal', 'ribald'],\n 'bridale': ['bedrail', 'bridale', 'ridable'],\n 'bridally': ['bridally', 'ribaldly'],\n 'bride': ['bider', 'bredi', 'bride', 'rebid'],\n 'bridelace': ['bridelace', 'calibered'],\n 'bridge': ['begird', 'bridge'],\n 'bridgeward': ['bridgeward', 'drawbridge'],\n 'bridling': ['birdling', 'bridling', 'lingbird'],\n 'brief': ['bifer', 'brief', 'fiber'],\n 'briefless': ['briefless', 'fiberless', 'fibreless'],\n 'brier': ['berri', 'brier'],\n 'briered': ['berried', 'briered'],\n 'brieve': ['bervie', 'brieve'],\n 'brigade': ['abridge', 'brigade'],\n 'brigand': ['barding', 'brigand'],\n 'brigantes': ['breasting', 'brigantes'],\n 'brighten': ['berthing', 'brighten'],\n 'brin': ['birn', 'brin'],\n 'brine': ['brine', 'enrib'],\n 'bringal': ['barling', 'bringal'],\n 'bringer': ['bringer', 'rebring'],\n 'briny': ['birny', 'briny'],\n 'bristle': ['blister', 'bristle'],\n 'bristlewort': ['blisterwort', 'bristlewort'],\n 'brisure': ['brisure', 'bruiser'],\n 'britannia': ['antiabrin', 'britannia'],\n 'brith': ['birth', 'brith'],\n 'brither': ['brither', 'rebirth'],\n 'britten': ['bittern', 'britten'],\n 'brittle': ['blitter', 'brittle', 'triblet'],\n 'broacher': ['broacher', 'rebroach'],\n 'broad': ['abord', 'bardo', 'board', 'broad', 'dobra', 'dorab'],\n 'broadbill': ['billboard', 'broadbill'],\n 'broadcaster': ['broadcaster', 'rebroadcast'],\n 'broaden': ['bandore', 'broaden'],\n 'broadhead': ['broadhead', 'headboard'],\n 'broadly': ['boardly', 'broadly'],\n 'broadside': ['broadside', 'sideboard'],\n 'broadspread': ['broadspread', 'spreadboard'],\n 'broadtail': ['broadtail', 'tailboard'],\n 'brochan': ['brochan', 'charbon'],\n 'broche': ['bocher', 'broche'],\n 'brocho': ['brocho', 'brooch'],\n 'brocked': ['bedrock', 'brocked'],\n 'brockle': ['blocker', 'brockle', 'reblock'],\n 'brod': ['bord', 'brod'],\n 'broderer': ['borderer', 'broderer'],\n 'brodie': ['bodier', 'boride', 'brodie'],\n 'brog': ['borg', 'brog', 'gorb'],\n 'brogan': ['barong', 'brogan'],\n 'broggle': ['boggler', 'broggle'],\n 'brolga': ['brolga', 'gorbal'],\n 'broma': ['broma', 'rambo'],\n 'bromate': ['barmote', 'bromate'],\n 'brome': ['brome', 'omber'],\n 'brominate': ['brominate', 'tribonema'],\n 'bromohydrate': ['bromohydrate', 'hydrobromate'],\n 'bronze': ['bonzer', 'bronze'],\n 'broo': ['boor', 'boro', 'broo'],\n 'brooch': ['brocho', 'brooch'],\n 'brooke': ['booker', 'brooke', 'rebook'],\n 'broon': ['boron', 'broon'],\n 'brose': ['boser', 'brose', 'sober'],\n 'brot': ['bort', 'brot'],\n 'brotan': ['barton', 'brotan'],\n 'brotany': ['baryton', 'brotany'],\n 'broth': ['broth', 'throb'],\n 'brothelry': ['brothelry', 'brotherly'],\n 'brotherly': ['brothelry', 'brotherly'],\n 'browden': ['bedrown', 'browden'],\n 'browner': ['browner', 'rebrown'],\n 'browntail': ['browntail', 'wrainbolt'],\n 'bruce': ['bruce', 'cebur', 'cuber'],\n 'brucina': ['brucina', 'rubican'],\n 'bruckle': ['bruckle', 'buckler'],\n 'brugh': ['brugh', 'burgh'],\n 'bruin': ['bruin', 'burin', 'inrub'],\n 'bruiser': ['brisure', 'bruiser'],\n 'bruke': ['bruke', 'burke'],\n 'brule': ['bluer', 'brule', 'burel', 'ruble'],\n 'brulee': ['brulee', 'burele', 'reblue'],\n 'brumal': ['brumal', 'labrum', 'lumbar', 'umbral'],\n 'brumalia': ['albarium', 'brumalia'],\n 'brume': ['brume', 'umber'],\n 'brumous': ['brumous', 'umbrous'],\n 'brunellia': ['brunellia', 'unliberal'],\n 'brunet': ['brunet', 'bunter', 'burnet'],\n 'bruno': ['bourn', 'bruno'],\n 'brunt': ['brunt', 'burnt'],\n 'brush': ['brush', 'shrub'],\n 'brushed': ['brushed', 'subherd'],\n 'brusher': ['brusher', 'rebrush'],\n 'brushland': ['brushland', 'shrubland'],\n 'brushless': ['brushless', 'shrubless'],\n 'brushlet': ['brushlet', 'shrublet'],\n 'brushlike': ['brushlike', 'shrublike'],\n 'brushwood': ['brushwood', 'shrubwood'],\n 'brustle': ['bluster', 'brustle', 'bustler'],\n 'brut': ['brut', 'burt', 'trub', 'turb'],\n 'bruta': ['bruta', 'tubar'],\n 'brute': ['brute', 'buret', 'rebut', 'tuber'],\n 'brutely': ['brutely', 'butlery'],\n 'bryan': ['barny', 'bryan'],\n 'bryanite': ['barytine', 'bryanite'],\n 'bryce': ['becry', 'bryce'],\n 'bual': ['balu', 'baul', 'bual', 'luba'],\n 'buba': ['babu', 'buba'],\n 'bubal': ['babul', 'bubal'],\n 'bubbler': ['blubber', 'bubbler'],\n 'buccocervical': ['buccocervical', 'cervicobuccal'],\n 'bucconasal': ['bucconasal', 'nasobuccal'],\n 'buceros': ['bescour', 'buceros', 'obscure'],\n 'buckbush': ['buckbush', 'bushbuck'],\n 'bucked': ['beduck', 'bucked'],\n 'buckler': ['bruckle', 'buckler'],\n 'bucksaw': ['bucksaw', 'sawbuck'],\n 'bucrane': ['bucrane', 'unbrace'],\n 'bud': ['bud', 'dub'],\n 'buda': ['baud', 'buda', 'daub'],\n 'budder': ['budder', 'redbud'],\n 'budger': ['bedrug', 'budger'],\n 'budgeter': ['budgeter', 'rebudget'],\n 'budtime': ['bitumed', 'budtime'],\n 'buffer': ['buffer', 'rebuff'],\n 'buffeter': ['buffeter', 'rebuffet'],\n 'bugan': ['bugan', 'bunga', 'unbag'],\n 'bughouse': ['bughouse', 'housebug'],\n 'bugi': ['bugi', 'guib'],\n 'bugle': ['bugle', 'bulge'],\n 'bugler': ['bugler', 'bulger', 'burgle'],\n 'bugre': ['bugre', 'gebur'],\n 'builder': ['builder', 'rebuild'],\n 'buildup': ['buildup', 'upbuild'],\n 'buirdly': ['buirdly', 'ludibry'],\n 'bulanda': ['balunda', 'bulanda'],\n 'bulb': ['blub', 'bulb'],\n 'bulgarian': ['biangular', 'bulgarian'],\n 'bulge': ['bugle', 'bulge'],\n 'bulger': ['bugler', 'bulger', 'burgle'],\n 'bulimic': ['bulimic', 'umbilic'],\n 'bulimiform': ['bulimiform', 'umbiliform'],\n 'bulker': ['bulker', 'rebulk'],\n 'bulla': ['bulla', 'lulab'],\n 'bullace': ['bullace', 'cueball'],\n 'bulletin': ['bulletin', 'unbillet'],\n 'bullfeast': ['bullfeast', 'stableful'],\n 'bulse': ['blues', 'bulse'],\n 'bulter': ['bulter', 'burlet', 'butler'],\n 'bummler': ['bummler', 'mumbler'],\n 'bun': ['bun', 'nub'],\n 'buna': ['baun', 'buna', 'nabu', 'nuba'],\n 'buncal': ['buncal', 'lucban'],\n 'buncher': ['buncher', 'rebunch'],\n 'bunder': ['bunder', 'burden', 'burned', 'unbred'],\n 'bundle': ['bundle', 'unbled'],\n 'bundler': ['blunder', 'bundler'],\n 'bundu': ['bundu', 'unbud', 'undub'],\n 'bunga': ['bugan', 'bunga', 'unbag'],\n 'bungle': ['blunge', 'bungle'],\n 'bungler': ['blunger', 'bungler'],\n 'bungo': ['bungo', 'unbog'],\n 'bunk': ['bunk', 'knub'],\n 'bunter': ['brunet', 'bunter', 'burnet'],\n 'bunty': ['bunty', 'butyn'],\n 'bunya': ['bunya', 'unbay'],\n 'bur': ['bur', 'rub'],\n 'buran': ['buran', 'unbar', 'urban'],\n 'burble': ['burble', 'lubber', 'rubble'],\n 'burbler': ['burbler', 'rubbler'],\n 'burbly': ['burbly', 'rubbly'],\n 'burd': ['burd', 'drub'],\n 'burdalone': ['burdalone', 'unlabored'],\n 'burden': ['bunder', 'burden', 'burned', 'unbred'],\n 'burdener': ['burdener', 'reburden'],\n 'burdie': ['burdie', 'buried', 'rubied'],\n 'bure': ['bure', 'reub', 'rube'],\n 'burel': ['bluer', 'brule', 'burel', 'ruble'],\n 'burele': ['brulee', 'burele', 'reblue'],\n 'buret': ['brute', 'buret', 'rebut', 'tuber'],\n 'burfish': ['burfish', 'furbish'],\n 'burg': ['burg', 'grub'],\n 'burgh': ['brugh', 'burgh'],\n 'burgle': ['bugler', 'bulger', 'burgle'],\n 'burian': ['burian', 'urbian'],\n 'buried': ['burdie', 'buried', 'rubied'],\n 'burin': ['bruin', 'burin', 'inrub'],\n 'burke': ['bruke', 'burke'],\n 'burl': ['blur', 'burl'],\n 'burler': ['burler', 'burrel'],\n 'burlet': ['bulter', 'burlet', 'butler'],\n 'burletta': ['burletta', 'rebuttal'],\n 'burmite': ['burmite', 'imbrute', 'terbium'],\n 'burned': ['bunder', 'burden', 'burned', 'unbred'],\n 'burner': ['burner', 'reburn'],\n 'burnet': ['brunet', 'bunter', 'burnet'],\n 'burnfire': ['burnfire', 'fireburn'],\n 'burnie': ['burnie', 'rubine'],\n 'burnisher': ['burnisher', 'reburnish'],\n 'burnout': ['burnout', 'outburn'],\n 'burnover': ['burnover', 'overburn'],\n 'burnsides': ['burnsides', 'sideburns'],\n 'burnt': ['brunt', 'burnt'],\n 'burny': ['burny', 'runby'],\n 'buro': ['buro', 'roub'],\n 'burrel': ['burler', 'burrel'],\n 'burro': ['burro', 'robur', 'rubor'],\n 'bursa': ['abrus', 'bursa', 'subra'],\n 'bursal': ['bursal', 'labrus'],\n 'bursate': ['bursate', 'surbate'],\n 'burse': ['burse', 'rebus', 'suber'],\n 'burst': ['burst', 'strub'],\n 'burster': ['burster', 'reburst'],\n 'burt': ['brut', 'burt', 'trub', 'turb'],\n 'burut': ['burut', 'trubu'],\n 'bury': ['bury', 'ruby'],\n 'bus': ['bus', 'sub'],\n 'buscarle': ['arbuscle', 'buscarle'],\n 'bushbuck': ['buckbush', 'bushbuck'],\n 'busher': ['busher', 'rebush'],\n 'bushwood': ['bushwood', 'woodbush'],\n 'busied': ['busied', 'subdie'],\n 'busked': ['bedusk', 'busked'],\n 'busman': ['busman', 'subman'],\n 'bust': ['bust', 'stub'],\n 'busted': ['bedust', 'bestud', 'busted'],\n 'buster': ['berust', 'buster', 'stuber'],\n 'bustic': ['bustic', 'cubist'],\n 'bustle': ['bustle', 'sublet', 'subtle'],\n 'bustler': ['bluster', 'brustle', 'bustler'],\n 'but': ['but', 'tub'],\n 'bute': ['bute', 'tebu', 'tube'],\n 'butea': ['butea', 'taube', 'tubae'],\n 'butein': ['butein', 'butine', 'intube'],\n 'butic': ['butic', 'cubit'],\n 'butine': ['butein', 'butine', 'intube'],\n 'butler': ['bulter', 'burlet', 'butler'],\n 'butleress': ['butleress', 'tuberless'],\n 'butlery': ['brutely', 'butlery'],\n 'buttle': ['buttle', 'tublet'],\n 'buttoner': ['buttoner', 'rebutton'],\n 'butyn': ['bunty', 'butyn'],\n 'buyer': ['buyer', 'rebuy'],\n 'bye': ['bey', 'bye'],\n 'byeman': ['byeman', 'byname'],\n 'byerite': ['byerite', 'ebriety'],\n 'bygo': ['bogy', 'bygo', 'goby'],\n 'byname': ['byeman', 'byname'],\n 'byon': ['bony', 'byon'],\n 'byous': ['bousy', 'byous'],\n 'byre': ['brey', 'byre', 'yerb'],\n 'byrlaw': ['brawly', 'byrlaw', 'warbly'],\n 'byroad': ['boardy', 'boyard', 'byroad'],\n 'cab': ['bac', 'cab'],\n 'caba': ['abac', 'caba'],\n 'cabaan': ['cabaan', 'cabana', 'canaba'],\n 'cabala': ['cabala', 'calaba'],\n 'cabaletta': ['ablactate', 'cabaletta'],\n 'cabalism': ['balsamic', 'cabalism'],\n 'cabalist': ['basaltic', 'cabalist'],\n 'caballer': ['barcella', 'caballer'],\n 'caban': ['banca', 'caban'],\n 'cabana': ['cabaan', 'cabana', 'canaba'],\n 'cabaret': ['abreact', 'bractea', 'cabaret'],\n 'cabbler': ['cabbler', 'clabber'],\n 'caber': ['acerb', 'brace', 'caber'],\n 'cabio': ['baioc', 'cabio', 'cobia'],\n 'cabiri': ['cabiri', 'caribi'],\n 'cabirian': ['arabinic', 'cabirian', 'carabini', 'cibarian'],\n 'cable': ['cable', 'caleb'],\n 'cabled': ['beclad', 'cabled'],\n 'cabob': ['bobac', 'cabob'],\n 'cabocle': ['boccale', 'cabocle'],\n 'cabombaceae': ['bombacaceae', 'cabombaceae'],\n 'cabrilla': ['bacillar', 'cabrilla'],\n 'caca': ['acca', 'caca'],\n 'cachet': ['cachet', 'chacte'],\n 'cachou': ['cachou', 'caucho'],\n 'cackler': ['cackler', 'clacker', 'crackle'],\n 'cacodaemonic': ['cacodaemonic', 'cacodemoniac'],\n 'cacodemoniac': ['cacodaemonic', 'cacodemoniac'],\n 'cacomistle': ['cacomistle', 'cosmetical'],\n 'cacoxenite': ['cacoxenite', 'excecation'],\n 'cactaceae': ['cactaceae', 'taccaceae'],\n 'cactaceous': ['cactaceous', 'taccaceous'],\n 'cacti': ['cacti', 'ticca'],\n 'cactoid': ['cactoid', 'octadic'],\n 'caddice': ['caddice', 'decadic'],\n 'caddie': ['caddie', 'eddaic'],\n 'cade': ['cade', 'dace', 'ecad'],\n 'cadent': ['cadent', 'canted', 'decant'],\n 'cadential': ['cadential', 'dancalite'],\n 'cader': ['acred', 'cader', 'cadre', 'cedar'],\n 'cadet': ['cadet', 'ectad'],\n 'cadge': ['cadge', 'caged'],\n 'cadger': ['cadger', 'cradge'],\n 'cadi': ['acid', 'cadi', 'caid'],\n 'cadinene': ['cadinene', 'decennia', 'enneadic'],\n 'cadmia': ['adamic', 'cadmia'],\n 'cados': ['cados', 'scoad'],\n 'cadre': ['acred', 'cader', 'cadre', 'cedar'],\n 'cadua': ['cadua', 'cauda'],\n 'caduac': ['caduac', 'caduca'],\n 'caduca': ['caduac', 'caduca'],\n 'cadus': ['cadus', 'dacus'],\n 'caeciliae': ['caeciliae', 'ilicaceae'],\n 'caedmonian': ['caedmonian', 'macedonian'],\n 'caedmonic': ['caedmonic', 'macedonic'],\n 'caelum': ['almuce', 'caelum', 'macule'],\n 'caelus': ['caelus', 'caules', 'clause'],\n 'caesar': ['ascare', 'caesar', 'resaca'],\n 'caesarist': ['caesarist', 'staircase'],\n 'caesura': ['auresca', 'caesura'],\n 'caffeina': ['affiance', 'caffeina'],\n 'caged': ['cadge', 'caged'],\n 'cageling': ['cageling', 'glaceing'],\n 'cager': ['cager', 'garce', 'grace'],\n 'cahill': ['achill', 'cahill', 'chilla'],\n 'cahita': ['cahita', 'ithaca'],\n 'cahnite': ['cahnite', 'cathine'],\n 'caid': ['acid', 'cadi', 'caid'],\n 'caiman': ['amniac', 'caiman', 'maniac'],\n 'caimito': ['caimito', 'comitia'],\n 'cain': ['cain', 'inca'],\n 'cainism': ['cainism', 'misniac'],\n 'cairba': ['arabic', 'cairba'],\n 'caird': ['acrid', 'caird', 'carid', 'darci', 'daric', 'dirca'],\n 'cairene': ['cairene', 'cinerea'],\n 'cairn': ['cairn', 'crain', 'naric'],\n 'cairned': ['cairned', 'candier'],\n 'cairny': ['cairny', 'riancy'],\n 'cairo': ['cairo', 'oaric'],\n 'caisson': ['caisson', 'cassino'],\n 'cajoler': ['cajoler', 'jecoral'],\n 'caker': ['acker', 'caker', 'crake', 'creak'],\n 'cakey': ['ackey', 'cakey'],\n 'cal': ['cal', 'lac'],\n 'calaba': ['cabala', 'calaba'],\n 'calamine': ['alcamine', 'analcime', 'calamine', 'camelina'],\n 'calamint': ['calamint', 'claimant'],\n 'calamitean': ['calamitean', 'catamenial'],\n 'calander': ['calander', 'calendar'],\n 'calandrinae': ['calandrinae', 'calendarian'],\n 'calas': ['calas', 'casal', 'scala'],\n 'calash': ['calash', 'lachsa'],\n 'calathian': ['acanthial', 'calathian'],\n 'calaverite': ['calaverite', 'lacerative'],\n 'calcareocorneous': ['calcareocorneous', 'corneocalcareous'],\n 'calcareosiliceous': ['calcareosiliceous', 'siliceocalcareous'],\n 'calciner': ['calciner', 'larcenic'],\n 'calculary': ['calculary', 'calycular'],\n 'calculative': ['calculative', 'claviculate'],\n 'calden': ['calden', 'candle', 'lanced'],\n 'calean': ['anlace', 'calean'],\n 'caleb': ['cable', 'caleb'],\n 'caledonia': ['caledonia', 'laodicean'],\n 'caledonite': ['caledonite', 'celadonite'],\n 'calendar': ['calander', 'calendar'],\n 'calendarial': ['calendarial', 'dalecarlian'],\n 'calendarian': ['calandrinae', 'calendarian'],\n 'calender': ['calender', 'encradle'],\n 'calenture': ['calenture', 'crenulate'],\n 'calepin': ['calepin', 'capelin', 'panicle', 'pelican', 'pinacle'],\n 'calfkill': ['calfkill', 'killcalf'],\n 'caliban': ['balanic', 'caliban'],\n 'caliber': ['caliber', 'calibre'],\n 'calibered': ['bridelace', 'calibered'],\n 'calibrate': ['bacterial', 'calibrate'],\n 'calibre': ['caliber', 'calibre'],\n 'caliburno': ['binocular', 'caliburno', 'colubrina'],\n 'calico': ['accoil', 'calico'],\n 'calidity': ['calidity', 'dialytic'],\n 'caliga': ['caliga', 'cigala'],\n 'calinago': ['analogic', 'calinago'],\n 'calinut': ['calinut', 'lunatic'],\n 'caliper': ['caliper', 'picarel', 'replica'],\n 'calipers': ['calipers', 'spiracle'],\n 'caliphate': ['caliphate', 'hepatical'],\n 'calite': ['calite', 'laetic', 'tecali'],\n 'caliver': ['caliver', 'caviler', 'claiver', 'clavier', 'valeric', 'velaric'],\n 'calk': ['calk', 'lack'],\n 'calker': ['calker', 'lacker', 'rackle', 'recalk', 'reckla'],\n 'callboy': ['callboy', 'collyba'],\n 'caller': ['caller', 'cellar', 'recall'],\n 'calli': ['calli', 'lilac'],\n 'calligraphy': ['calligraphy', 'graphically'],\n 'calliopsis': ['calliopsis', 'lipoclasis'],\n 'callisection': ['callisection', 'clinoclasite'],\n 'callitype': ['callitype', 'plicately'],\n 'callo': ['callo', 'colla', 'local'],\n 'callosal': ['callosal', 'scallola'],\n 'callose': ['callose', 'oscella'],\n 'callosity': ['callosity', 'stoically'],\n 'callosum': ['callosum', 'mollusca'],\n 'calluna': ['calluna', 'lacunal'],\n 'callus': ['callus', 'sulcal'],\n 'calm': ['calm', 'clam'],\n 'calmant': ['calmant', 'clamant'],\n 'calmative': ['calmative', 'clamative'],\n 'calmer': ['calmer', 'carmel', 'clamer', 'marcel', 'mercal'],\n 'calmierer': ['calmierer', 'reclaimer'],\n 'calomba': ['calomba', 'cambalo'],\n 'calonectria': ['calonectria', 'ectocranial'],\n 'calor': ['alcor', 'calor', 'carlo', 'carol', 'claro', 'coral'],\n 'calorie': ['calorie', 'cariole'],\n 'calorist': ['calorist', 'coralist'],\n 'calorite': ['calorite', 'erotical', 'loricate'],\n 'calorize': ['calorize', 'coalizer'],\n 'calotermes': ['calotermes', 'mesorectal', 'metacresol'],\n 'calotermitid': ['calotermitid', 'dilatometric'],\n 'calp': ['calp', 'clap'],\n 'caltha': ['caltha', 'chalta'],\n 'caltrop': ['caltrop', 'proctal'],\n 'calusa': ['ascula', 'calusa', 'casual', 'casula', 'causal'],\n 'calvaria': ['calvaria', 'clavaria'],\n 'calvary': ['calvary', 'cavalry'],\n 'calve': ['calve', 'cavel', 'clave'],\n 'calver': ['calver', 'carvel', 'claver'],\n 'calves': ['calves', 'scavel'],\n 'calycular': ['calculary', 'calycular'],\n 'calyptratae': ['acalyptrate', 'calyptratae'],\n 'cam': ['cam', 'mac'],\n 'camaca': ['camaca', 'macaca'],\n 'camail': ['amical', 'camail', 'lamaic'],\n 'caman': ['caman', 'macan'],\n 'camara': ['acamar', 'camara', 'maraca'],\n 'cambalo': ['calomba', 'cambalo'],\n 'camber': ['becram', 'camber', 'crambe'],\n 'cambrel': ['cambrel', 'clamber', 'cramble'],\n 'came': ['acme', 'came', 'mace'],\n 'cameist': ['cameist', 'etacism', 'sematic'],\n 'camel': ['camel', 'clame', 'cleam', 'macle'],\n 'camelid': ['camelid', 'decimal', 'declaim', 'medical'],\n 'camelina': ['alcamine', 'analcime', 'calamine', 'camelina'],\n 'camelish': ['camelish', 'schalmei'],\n 'camellus': ['camellus', 'sacellum'],\n 'cameloid': ['cameloid', 'comedial', 'melodica'],\n 'cameograph': ['cameograph', 'macrophage'],\n 'camera': ['acream', 'camera', 'mareca'],\n 'cameral': ['cameral', 'caramel', 'carmela', 'ceramal', 'reclama'],\n 'camerate': ['camerate', 'macerate', 'racemate'],\n 'camerated': ['camerated', 'demarcate'],\n 'cameration': ['aeromantic', 'cameration', 'maceration', 'racemation'],\n 'camerina': ['amacrine', 'american', 'camerina', 'cinerama'],\n 'camerist': ['camerist', 'ceramist', 'matrices'],\n 'camion': ['camion', 'conima', 'manioc', 'monica'],\n 'camisado': ['camisado', 'caodaism'],\n 'camise': ['camise', 'macies'],\n 'campaign': ['campaign', 'pangamic'],\n 'campaigner': ['campaigner', 'recampaign'],\n 'camphire': ['camphire', 'hemicarp'],\n 'campine': ['campine', 'pemican'],\n 'campoo': ['campoo', 'capomo'],\n 'camptonite': ['camptonite', 'pentatomic'],\n 'camus': ['camus', 'musca', 'scaum', 'sumac'],\n 'camused': ['camused', 'muscade'],\n 'canaba': ['cabaan', 'cabana', 'canaba'],\n 'canadol': ['acnodal', 'canadol', 'locanda'],\n 'canaille': ['alliance', 'canaille'],\n 'canape': ['canape', 'panace'],\n 'canari': ['acinar',\n            'arnica',\n            'canari',\n            'carian',\n            'carina',\n            'crania',\n            'narica'],\n 'canarin': ['canarin', 'cranian'],\n 'canariote': ['canariote', 'ceratonia'],\n 'canary': ['canary', 'cynara'],\n 'canaut': ['canaut', 'tucana'],\n 'canceler': ['canceler', 'clarence', 'recancel'],\n 'cancer': ['cancer', 'crance'],\n 'cancerate': ['cancerate', 'reactance'],\n 'canceration': ['anacreontic', 'canceration'],\n 'cancri': ['cancri', 'carnic', 'cranic'],\n 'cancroid': ['cancroid', 'draconic'],\n 'candela': ['candela', 'decanal'],\n 'candier': ['cairned', 'candier'],\n 'candiru': ['candiru', 'iracund'],\n 'candle': ['calden', 'candle', 'lanced'],\n 'candor': ['candor', 'cardon', 'conrad'],\n 'candroy': ['candroy', 'dacryon'],\n 'cane': ['acne', 'cane', 'nace'],\n 'canel': ['canel', 'clean', 'lance', 'lenca'],\n 'canelo': ['canelo', 'colane'],\n 'canephor': ['canephor', 'chaperno', 'chaperon'],\n 'canephore': ['canephore', 'chaperone'],\n 'canephroi': ['canephroi', 'parochine'],\n 'caner': ['caner', 'crane', 'crena', 'nacre', 'rance'],\n 'canful': ['canful', 'flucan'],\n 'cangle': ['cangle', 'glance'],\n 'cangler': ['cangler', 'glancer', 'reclang'],\n 'cangue': ['cangue', 'uncage'],\n 'canicola': ['canicola', 'laconica'],\n 'canid': ['canid', 'cnida', 'danic'],\n 'canidae': ['aidance', 'canidae'],\n 'canine': ['canine', 'encina', 'neanic'],\n 'canis': ['canis', 'scian'],\n 'canister': ['canister', 'cestrian', 'cisterna', 'irascent'],\n 'canker': ['canker', 'neckar'],\n 'cankerworm': ['cankerworm', 'crownmaker'],\n 'cannel': ['cannel', 'lencan'],\n 'cannot': ['cannot', 'canton', 'conant', 'nonact'],\n 'cannulate': ['antelucan', 'cannulate'],\n 'canny': ['canny', 'nancy'],\n 'canoe': ['acone', 'canoe', 'ocean'],\n 'canoeing': ['anogenic', 'canoeing'],\n 'canoeist': ['canoeist', 'cotesian'],\n 'canon': ['ancon', 'canon'],\n 'canonist': ['canonist', 'sanction', 'sonantic'],\n 'canoodler': ['canoodler', 'coronaled'],\n 'canroy': ['canroy', 'crayon', 'cyrano', 'nyroca'],\n 'canso': ['ascon', 'canso', 'oscan'],\n 'cantabri': ['bactrian', 'cantabri'],\n 'cantala': ['cantala', 'catalan', 'lantaca'],\n 'cantalite': ['cantalite', 'lactinate', 'tetanical'],\n 'cantara': ['cantara', 'nacarat'],\n 'cantaro': ['cantaro', 'croatan'],\n 'cantate': ['anteact', 'cantate'],\n 'canted': ['cadent', 'canted', 'decant'],\n 'canteen': ['canteen', 'centena'],\n 'canter': ['canter',\n            'creant',\n            'cretan',\n            'nectar',\n            'recant',\n            'tanrec',\n            'trance'],\n 'canterer': ['canterer', 'recanter', 'recreant', 'terrance'],\n 'cantharidae': ['acidanthera', 'cantharidae'],\n 'cantharis': ['anarchist', 'archsaint', 'cantharis'],\n 'canthus': ['canthus', 'staunch'],\n 'cantico': ['cantico', 'catonic', 'taconic'],\n 'cantilena': ['cantilena', 'lancinate'],\n 'cantilever': ['cantilever', 'trivalence'],\n 'cantily': ['anticly', 'cantily'],\n 'cantina': ['cantina', 'tannaic'],\n 'cantiness': ['anticness', 'cantiness', 'incessant'],\n 'cantion': ['actinon', 'cantion', 'contain'],\n 'cantle': ['cantle', 'cental', 'lancet', 'tancel'],\n 'canto': ['acton', 'canto', 'octan'],\n 'canton': ['cannot', 'canton', 'conant', 'nonact'],\n 'cantonal': ['cantonal', 'connatal'],\n 'cantor': ['cantor', 'carton', 'contra'],\n 'cantorian': ['anarcotin', 'cantorian', 'carnation', 'narcotina'],\n 'cantoris': ['cantoris', 'castorin', 'corsaint'],\n 'cantred': ['cantred', 'centrad', 'tranced'],\n 'cantus': ['cantus', 'tuscan', 'uncast'],\n 'canun': ['canun', 'cunan'],\n 'cany': ['cany', 'cyan'],\n 'canyon': ['ancony', 'canyon'],\n 'caoba': ['bacao', 'caoba'],\n 'caodaism': ['camisado', 'caodaism'],\n 'cap': ['cap', 'pac'],\n 'capable': ['capable', 'pacable'],\n 'caparison': ['caparison', 'paranosic'],\n 'cape': ['cape', 'cepa', 'pace'],\n 'caped': ['caped', 'decap', 'paced'],\n 'capel': ['capel', 'place'],\n 'capelin': ['calepin', 'capelin', 'panicle', 'pelican', 'pinacle'],\n 'capeline': ['capeline', 'pelecani'],\n 'caper': ['caper', 'crape', 'pacer', 'perca', 'recap'],\n 'capernaite': ['capernaite', 'paraenetic'],\n 'capernoited': ['capernoited', 'deprecation'],\n 'capernoity': ['acetopyrin', 'capernoity'],\n 'capes': ['capes', 'scape', 'space'],\n 'caph': ['caph', 'chap'],\n 'caphite': ['aphetic', 'caphite', 'hepatic'],\n 'caphtor': ['caphtor', 'toparch'],\n 'capias': ['capias', 'pisaca'],\n 'capillament': ['capillament', 'implacental'],\n 'capillarity': ['capillarity', 'piratically'],\n 'capital': ['capital', 'palatic'],\n 'capitan': ['capitan', 'captain'],\n 'capitate': ['apatetic', 'capitate'],\n 'capitellar': ['capitellar', 'prelatical'],\n 'capito': ['atopic', 'capito', 'copita'],\n 'capitol': ['capitol', 'coalpit', 'optical', 'topical'],\n 'capomo': ['campoo', 'capomo'],\n 'capon': ['capon', 'ponca'],\n 'caponier': ['caponier', 'coprinae', 'procaine'],\n 'capot': ['capot', 'coapt'],\n 'capote': ['capote', 'toecap'],\n 'capreol': ['capreol', 'polacre'],\n 'capri': ['capri', 'picra', 'rapic'],\n 'caprid': ['caprid', 'carpid', 'picard'],\n 'capriote': ['aporetic', 'capriote', 'operatic'],\n 'capsian': ['capsian', 'caspian', 'nascapi', 'panisca'],\n 'capstone': ['capstone', 'opencast'],\n 'capsula': ['capsula', 'pascual', 'scapula'],\n 'capsular': ['capsular', 'scapular'],\n 'capsulate': ['aspectual', 'capsulate'],\n 'capsulated': ['capsulated', 'scapulated'],\n 'capsule': ['capsule', 'specula', 'upscale'],\n 'capsulectomy': ['capsulectomy', 'scapulectomy'],\n 'capsuler': ['capsuler', 'specular'],\n 'captain': ['capitan', 'captain'],\n 'captation': ['anaptotic', 'captation'],\n 'caption': ['caption', 'paction'],\n 'captious': ['autopsic', 'captious'],\n 'captor': ['captor', 'copart'],\n 'capture': ['capture', 'uptrace'],\n 'car': ['arc', 'car'],\n 'cara': ['arca', 'cara'],\n 'carabeen': ['bearance', 'carabeen'],\n 'carabin': ['arbacin', 'carabin', 'cariban'],\n 'carabini': ['arabinic', 'cabirian', 'carabini', 'cibarian'],\n 'caracoli': ['caracoli', 'coracial'],\n 'caracore': ['acrocera', 'caracore'],\n 'caragana': ['aracanga', 'caragana'],\n 'caramel': ['cameral', 'caramel', 'carmela', 'ceramal', 'reclama'],\n 'caranda': ['anacard', 'caranda'],\n 'carandas': ['carandas', 'sandarac'],\n 'carane': ['arcane', 'carane'],\n 'carangid': ['carangid', 'cardigan'],\n 'carapine': ['carapine', 'carpaine'],\n 'caravel': ['caravel', 'lavacre'],\n 'carbamide': ['carbamide', 'crambidae'],\n 'carbamine': ['carbamine', 'crambinae'],\n 'carbamino': ['carbamino', 'macrobian'],\n 'carbeen': ['carbeen', 'carbene'],\n 'carbene': ['carbeen', 'carbene'],\n 'carbo': ['carbo', 'carob', 'coarb', 'cobra'],\n 'carbohydride': ['carbohydride', 'hydrocarbide'],\n 'carbon': ['bracon', 'carbon', 'corban'],\n 'carbonite': ['bicornate', 'carbonite', 'reboantic'],\n 'carcel': ['carcel', 'cercal'],\n 'carcinoma': ['carcinoma', 'macaronic'],\n 'carcinosarcoma': ['carcinosarcoma', 'sarcocarcinoma'],\n 'carcoon': ['carcoon', 'raccoon'],\n 'cardel': ['cardel', 'cradle'],\n 'cardia': ['acarid', 'cardia', 'carida'],\n 'cardiac': ['arcadic', 'cardiac'],\n 'cardial': ['cardial', 'radical'],\n 'cardiant': ['antacrid', 'cardiant', 'radicant', 'tridacna'],\n 'cardigan': ['carangid', 'cardigan'],\n 'cardiidae': ['acrididae', 'cardiidae', 'cidaridae'],\n 'cardin': ['andric', 'cardin', 'rancid'],\n 'cardinal': ['cardinal', 'clarinda'],\n 'cardioid': ['cardioid', 'caridoid'],\n 'cardiophobe': ['brachiopode', 'cardiophobe'],\n 'cardo': ['cardo', 'draco'],\n 'cardon': ['candor', 'cardon', 'conrad'],\n 'cardoon': ['cardoon', 'coronad'],\n 'care': ['acer', 'acre', 'care', 'crea', 'race'],\n 'careen': ['careen', 'carene', 'enrace'],\n 'carene': ['careen', 'carene', 'enrace'],\n 'carer': ['carer', 'crare', 'racer'],\n 'carest': ['carest', 'caster', 'recast'],\n 'caret': ['caret',\n           'carte',\n           'cater',\n           'crate',\n           'creat',\n           'creta',\n           'react',\n           'recta',\n           'trace'],\n 'caretta': ['caretta', 'teacart', 'tearcat'],\n 'carful': ['carful', 'furcal'],\n 'carhop': ['carhop', 'paroch'],\n 'cariama': ['aramaic', 'cariama'],\n 'carian': ['acinar',\n            'arnica',\n            'canari',\n            'carian',\n            'carina',\n            'crania',\n            'narica'],\n 'carib': ['baric', 'carib', 'rabic'],\n 'cariban': ['arbacin', 'carabin', 'cariban'],\n 'caribi': ['cabiri', 'caribi'],\n 'carid': ['acrid', 'caird', 'carid', 'darci', 'daric', 'dirca'],\n 'carida': ['acarid', 'cardia', 'carida'],\n 'caridea': ['arcidae', 'caridea'],\n 'caridean': ['caridean', 'dircaean', 'radiance'],\n 'caridoid': ['cardioid', 'caridoid'],\n 'carina': ['acinar',\n            'arnica',\n            'canari',\n            'carian',\n            'carina',\n            'crania',\n            'narica'],\n 'carinal': ['carinal', 'carlina', 'clarain', 'cranial'],\n 'carinatae': ['acraniate', 'carinatae'],\n 'carinate': ['anaretic', 'arcanite', 'carinate', 'craniate'],\n 'carinated': ['carinated', 'eradicant'],\n 'cariole': ['calorie', 'cariole'],\n 'carious': ['carious', 'curiosa'],\n 'carisa': ['carisa', 'sciara'],\n 'carissa': ['ascaris', 'carissa'],\n 'cark': ['cark', 'rack'],\n 'carking': ['arcking', 'carking', 'racking'],\n 'carkingly': ['carkingly', 'rackingly'],\n 'carless': ['carless', 'classer', 'reclass'],\n 'carlet': ['carlet', 'cartel', 'claret', 'rectal', 'talcer'],\n 'carlie': ['carlie', 'claire', 'eclair', 'erical'],\n 'carlin': ['carlin', 'clarin', 'crinal'],\n 'carlina': ['carinal', 'carlina', 'clarain', 'cranial'],\n 'carlist': ['carlist', 'clarist'],\n 'carlo': ['alcor', 'calor', 'carlo', 'carol', 'claro', 'coral'],\n 'carlot': ['carlot', 'crotal'],\n 'carlylian': ['ancillary', 'carlylian', 'cranially'],\n 'carman': ['carman', 'marcan'],\n 'carmel': ['calmer', 'carmel', 'clamer', 'marcel', 'mercal'],\n 'carmela': ['cameral', 'caramel', 'carmela', 'ceramal', 'reclama'],\n 'carmele': ['carmele', 'cleamer'],\n 'carmelite': ['carmelite', 'melicerta'],\n 'carmeloite': ['carmeloite', 'ectromelia', 'meteorical'],\n 'carmine': ['armenic', 'carmine', 'ceriman', 'crimean', 'mercian'],\n 'carminette': ['carminette', 'remittance'],\n 'carminite': ['antimeric', 'carminite', 'criminate', 'metrician'],\n 'carmot': ['carmot', 'comart'],\n 'carnage': ['carnage', 'cranage', 'garance'],\n 'carnalite': ['carnalite', 'claretian', 'lacertian', 'nectarial'],\n 'carnate': ['carnate', 'cateran'],\n 'carnation': ['anarcotin', 'cantorian', 'carnation', 'narcotina'],\n 'carnationed': ['carnationed', 'dinoceratan'],\n 'carnelian': ['carnelian', 'encranial'],\n 'carneol': ['carneol', 'corneal'],\n 'carneous': ['carneous', 'nacreous'],\n 'carney': ['carney', 'craney'],\n 'carnic': ['cancri', 'carnic', 'cranic'],\n 'carniolan': ['carniolan', 'nonracial'],\n 'carnose': ['carnose', 'coarsen', 'narcose'],\n 'carnosity': ['carnosity', 'crayonist'],\n 'carnotite': ['carnotite', 'cortinate'],\n 'carnous': ['carnous', 'nacrous', 'narcous'],\n 'caro': ['acor', 'caro', 'cora', 'orca'],\n 'caroa': ['acroa', 'caroa'],\n 'carob': ['carbo', 'carob', 'coarb', 'cobra'],\n 'caroche': ['caroche', 'coacher', 'recoach'],\n 'caroid': ['caroid', 'cordia'],\n 'carol': ['alcor', 'calor', 'carlo', 'carol', 'claro', 'coral'],\n 'carolan': ['alcoran', 'ancoral', 'carolan'],\n 'carole': ['carole', 'coaler', 'coelar', 'oracle', 'recoal'],\n 'carolean': ['carolean', 'lecanora'],\n 'caroler': ['caroler', 'correal'],\n 'caroli': ['caroli', 'corial', 'lorica'],\n 'carolin': ['carolin', 'clarion', 'colarin', 'locrian'],\n 'carolina': ['carolina', 'conarial'],\n 'caroline': ['acrolein',\n              'arecolin',\n              'caroline',\n              'colinear',\n              'cornelia',\n              'creolian',\n              'lonicera'],\n 'carolingian': ['carolingian', 'inorganical'],\n 'carolus': ['carolus', 'oscular'],\n 'carom': ['carom', 'coram', 'macro', 'marco'],\n 'carone': ['carone', 'cornea'],\n 'caroon': ['caroon', 'corona', 'racoon'],\n 'carotenoid': ['carotenoid', 'coronadite', 'decoration'],\n 'carotic': ['acrotic', 'carotic'],\n 'carotid': ['arctoid', 'carotid', 'dartoic'],\n 'carotidean': ['arctoidean', 'carotidean', 'cordaitean', 'dinocerata'],\n 'carotin': ['anticor', 'carotin', 'cortina', 'ontaric'],\n 'carouse': ['acerous', 'carouse', 'euscaro'],\n 'carp': ['carp', 'crap'],\n 'carpaine': ['carapine', 'carpaine'],\n 'carpel': ['carpel', 'parcel', 'placer'],\n 'carpellary': ['carpellary', 'parcellary'],\n 'carpellate': ['carpellate', 'parcellate', 'prelacteal'],\n 'carpent': ['carpent', 'precant'],\n 'carpet': ['carpet', 'peract', 'preact'],\n 'carpholite': ['carpholite', 'proethical'],\n 'carpid': ['caprid', 'carpid', 'picard'],\n 'carpiodes': ['carpiodes', 'scorpidae'],\n 'carpocerite': ['carpocerite', 'reciprocate'],\n 'carpogonial': ['carpogonial', 'coprolagnia'],\n 'carpolite': ['carpolite', 'petricola'],\n 'carpolith': ['carpolith', 'politarch', 'trophical'],\n 'carposperm': ['carposperm', 'spermocarp'],\n 'carrot': ['carrot', 'trocar'],\n 'carroter': ['arrector', 'carroter'],\n 'carse': ['carse', 'caser', 'ceras', 'scare', 'scrae'],\n 'carsmith': ['carsmith', 'chartism'],\n 'cartable': ['bracteal', 'cartable'],\n 'carte': ['caret',\n           'carte',\n           'cater',\n           'crate',\n           'creat',\n           'creta',\n           'react',\n           'recta',\n           'trace'],\n 'cartel': ['carlet', 'cartel', 'claret', 'rectal', 'talcer'],\n 'cartelize': ['cartelize', 'zelatrice'],\n 'carter': ['arrect', 'carter', 'crater', 'recart', 'tracer'],\n 'cartesian': ['ascertain', 'cartesian', 'cartisane', 'sectarian'],\n 'cartesianism': ['cartesianism', 'sectarianism'],\n 'cartier': ['cartier', 'cirrate', 'erratic'],\n 'cartilage': ['cartilage', 'rectalgia'],\n 'cartisane': ['ascertain', 'cartesian', 'cartisane', 'sectarian'],\n 'cartist': ['astrict', 'cartist', 'stratic'],\n 'carton': ['cantor', 'carton', 'contra'],\n 'cartoon': ['cartoon', 'coranto'],\n 'cartoonist': ['cartoonist', 'scortation'],\n 'carty': ['carty', 'tracy'],\n 'carua': ['aruac', 'carua'],\n 'carucal': ['accrual', 'carucal'],\n 'carucate': ['accurate', 'carucate'],\n 'carum': ['carum', 'cumar'],\n 'carve': ['carve', 'crave', 'varec'],\n 'carvel': ['calver', 'carvel', 'claver'],\n 'carven': ['carven', 'cavern', 'craven'],\n 'carver': ['carver', 'craver'],\n 'carving': ['carving', 'craving'],\n 'cary': ['cary', 'racy'],\n 'caryl': ['acryl', 'caryl', 'clary'],\n 'casabe': ['casabe', 'sabeca'],\n 'casal': ['calas', 'casal', 'scala'],\n 'cascade': ['cascade', 'saccade'],\n 'case': ['case', 'esca'],\n 'casebook': ['bookcase', 'casebook'],\n 'caseful': ['caseful', 'fucales'],\n 'casein': ['casein', 'incase'],\n 'casel': ['alces', 'casel', 'scale'],\n 'caser': ['carse', 'caser', 'ceras', 'scare', 'scrae'],\n 'casern': ['casern', 'rescan'],\n 'cashable': ['cashable', 'chasable'],\n 'cashel': ['cashel', 'laches', 'sealch'],\n 'cask': ['cask', 'sack'],\n 'casket': ['casket', 'tesack'],\n 'casking': ['casking', 'sacking'],\n 'casklike': ['casklike', 'sacklike'],\n 'casper': ['casper', 'escarp', 'parsec', 'scrape', 'secpar', 'spacer'],\n 'caspian': ['capsian', 'caspian', 'nascapi', 'panisca'],\n 'casque': ['casque', 'sacque'],\n 'casquet': ['acquest', 'casquet'],\n 'casse': ['casse', 'scase'],\n 'cassian': ['cassian', 'cassina'],\n 'cassina': ['cassian', 'cassina'],\n 'cassino': ['caisson', 'cassino'],\n 'cassock': ['cassock', 'cossack'],\n 'cast': ['acts', 'cast', 'scat'],\n 'castalia': ['castalia', 'sacalait'],\n 'castalian': ['castalian', 'satanical'],\n 'caste': ['caste', 'sceat'],\n 'castelet': ['castelet', 'telecast'],\n 'caster': ['carest', 'caster', 'recast'],\n 'castice': ['ascetic', 'castice', 'siccate'],\n 'castle': ['castle', 'sclate'],\n 'castoff': ['castoff', 'offcast'],\n 'castor': ['arctos', 'castor', 'costar', 'scrota'],\n 'castores': ['castores', 'coassert'],\n 'castoreum': ['castoreum', 'outscream'],\n 'castoridae': ['castoridae', 'cestodaria'],\n 'castorin': ['cantoris', 'castorin', 'corsaint'],\n 'castra': ['castra', 'tarasc'],\n 'casual': ['ascula', 'calusa', 'casual', 'casula', 'causal'],\n 'casuality': ['casuality', 'causality'],\n 'casually': ['casually', 'causally'],\n 'casula': ['ascula', 'calusa', 'casual', 'casula', 'causal'],\n 'cat': ['act', 'cat'],\n 'catabolin': ['botanical', 'catabolin'],\n 'catalan': ['cantala', 'catalan', 'lantaca'],\n 'catalanist': ['anastaltic', 'catalanist'],\n 'catalase': ['catalase', 'salaceta'],\n 'catalinite': ['analcitite', 'catalinite'],\n 'catalogue': ['catalogue', 'coagulate'],\n 'catalyte': ['catalyte', 'cattleya'],\n 'catamenial': ['calamitean', 'catamenial'],\n 'catapultier': ['catapultier', 'particulate'],\n 'cataria': ['acratia', 'cataria'],\n 'catcher': ['catcher', 'recatch'],\n 'catchup': ['catchup', 'upcatch'],\n 'cate': ['cate', 'teca'],\n 'catechin': ['atechnic', 'catechin', 'technica'],\n 'catechism': ['catechism', 'schematic'],\n 'catechol': ['catechol', 'coachlet'],\n 'categoric': ['categoric', 'geocratic'],\n 'catella': ['catella', 'lacteal'],\n 'catenated': ['catenated', 'decantate'],\n 'cater': ['caret',\n           'carte',\n           'cater',\n           'crate',\n           'creat',\n           'creta',\n           'react',\n           'recta',\n           'trace'],\n 'cateran': ['carnate', 'cateran'],\n 'caterer': ['caterer', 'recrate', 'retrace', 'terrace'],\n 'cateress': ['cateress', 'cerastes'],\n 'catfish': ['catfish', 'factish'],\n 'cathari': ['cathari', 'chirata', 'cithara'],\n 'catharina': ['anthracia', 'antiarcha', 'catharina'],\n 'cathartae': ['cathartae', 'tracheata'],\n 'cathepsin': ['cathepsin', 'stephanic'],\n 'catherine': ['catherine', 'heritance'],\n 'catheter': ['catheter', 'charette'],\n 'cathine': ['cahnite', 'cathine'],\n 'cathinine': ['anchietin', 'cathinine'],\n 'cathion': ['cathion', 'chatino'],\n 'cathograph': ['cathograph', 'tachograph'],\n 'cathole': ['cathole', 'cholate'],\n 'cathro': ['cathro', 'orchat'],\n 'cathryn': ['cathryn', 'chantry'],\n 'cathy': ['cathy', 'cyath', 'yacht'],\n 'cation': ['action', 'atonic', 'cation'],\n 'cationic': ['aconitic', 'cationic', 'itaconic'],\n 'catkin': ['catkin', 'natick'],\n 'catlin': ['catlin', 'tincal'],\n 'catlinite': ['catlinite', 'intactile'],\n 'catmalison': ['catmalison', 'monastical'],\n 'catoism': ['atomics', 'catoism', 'cosmati', 'osmatic', 'somatic'],\n 'catonian': ['catonian', 'taconian'],\n 'catonic': ['cantico', 'catonic', 'taconic'],\n 'catonism': ['catonism', 'monastic'],\n 'catoptric': ['catoptric', 'protactic'],\n 'catpipe': ['apeptic', 'catpipe'],\n 'catstone': ['catstone', 'constate'],\n 'catsup': ['catsup', 'upcast'],\n 'cattail': ['attical', 'cattail'],\n 'catti': ['attic', 'catti', 'tacit'],\n 'cattily': ['cattily', 'tacitly'],\n 'cattiness': ['cattiness', 'tacitness'],\n 'cattle': ['cattle', 'tectal'],\n 'cattleya': ['catalyte', 'cattleya'],\n 'catvine': ['catvine', 'venatic'],\n 'caucho': ['cachou', 'caucho'],\n 'cauda': ['cadua', 'cauda'],\n 'caudle': ['caudle', 'cedula', 'claude'],\n 'caudodorsal': ['caudodorsal', 'dorsocaudal'],\n 'caudofemoral': ['caudofemoral', 'femorocaudal'],\n 'caudolateral': ['caudolateral', 'laterocaudal'],\n 'caul': ['caul', 'ucal'],\n 'cauld': ['cauld', 'ducal'],\n 'caules': ['caelus', 'caules', 'clause'],\n 'cauliform': ['cauliform', 'formulaic', 'fumarolic'],\n 'caulinar': ['anicular', 'caulinar'],\n 'caulis': ['caulis', 'clusia', 'sicula'],\n 'caulite': ['aleutic', 'auletic', 'caulite', 'lutecia'],\n 'caulome': ['caulome', 'leucoma'],\n 'caulomic': ['caulomic', 'coumalic'],\n 'caulote': ['caulote', 'colutea', 'oculate'],\n 'caunch': ['caunch', 'cuchan'],\n 'caurale': ['arcuale', 'caurale'],\n 'causal': ['ascula', 'calusa', 'casual', 'casula', 'causal'],\n 'causality': ['casuality', 'causality'],\n 'causally': ['casually', 'causally'],\n 'cause': ['cause', 'sauce'],\n 'causeless': ['causeless', 'sauceless'],\n 'causer': ['causer', 'saucer'],\n 'causey': ['causey', 'cayuse'],\n 'cautelous': ['cautelous', 'lutaceous'],\n 'cauter': ['acture', 'cauter', 'curate'],\n 'caution': ['auction', 'caution'],\n 'cautionary': ['auctionary', 'cautionary'],\n 'cautioner': ['cautioner', 'cointreau'],\n 'caval': ['caval', 'clava'],\n 'cavalry': ['calvary', 'cavalry'],\n 'cavate': ['cavate', 'caveat', 'vacate'],\n 'caveat': ['cavate', 'caveat', 'vacate'],\n 'cavel': ['calve', 'cavel', 'clave'],\n 'cavern': ['carven', 'cavern', 'craven'],\n 'cavil': ['cavil', 'lavic'],\n 'caviler': ['caliver', 'caviler', 'claiver', 'clavier', 'valeric', 'velaric'],\n 'cavillation': ['cavillation', 'vacillation'],\n 'cavitate': ['activate', 'cavitate'],\n 'cavitation': ['activation', 'cavitation'],\n 'cavitied': ['cavitied', 'vaticide'],\n 'caw': ['caw', 'wac'],\n 'cawk': ['cawk', 'wack'],\n 'cawky': ['cawky', 'wacky'],\n 'cayapa': ['cayapa', 'pacaya'],\n 'cayuse': ['causey', 'cayuse'],\n 'ccoya': ['accoy', 'ccoya'],\n 'ceanothus': ['ceanothus', 'oecanthus'],\n 'cearin': ['acerin', 'cearin'],\n 'cebalrai': ['balearic', 'cebalrai'],\n 'ceboid': ['bodice', 'ceboid'],\n 'cebur': ['bruce', 'cebur', 'cuber'],\n 'cecily': ['cecily', 'cicely'],\n 'cedar': ['acred', 'cader', 'cadre', 'cedar'],\n 'cedarn': ['cedarn', 'dancer', 'nacred'],\n 'cedent': ['cedent', 'decent'],\n 'ceder': ['ceder', 'cedre', 'cered', 'creed'],\n 'cedrat': ['cedrat', 'decart', 'redact'],\n 'cedrate': ['cedrate', 'cerated'],\n 'cedre': ['ceder', 'cedre', 'cered', 'creed'],\n 'cedrela': ['cedrela', 'creedal', 'declare'],\n 'cedrin': ['cedrin', 'cinder', 'crined'],\n 'cedriret': ['cedriret', 'directer', 'recredit', 'redirect'],\n 'cedrol': ['cedrol', 'colder', 'cordel'],\n 'cedron': ['cedron', 'conred'],\n 'cedrus': ['cedrus', 'cursed'],\n 'cedry': ['cedry', 'decry'],\n 'cedula': ['caudle', 'cedula', 'claude'],\n 'ceilinged': ['ceilinged', 'diligence'],\n 'celadonite': ['caledonite', 'celadonite'],\n 'celandine': ['celandine', 'decennial'],\n 'celarent': ['celarent', 'centrale', 'enclaret'],\n 'celature': ['celature', 'ulcerate'],\n 'celebrate': ['celebrate', 'erectable'],\n 'celebrated': ['braceleted', 'celebrated'],\n 'celemin': ['celemin', 'melenic'],\n 'celia': ['alice', 'celia', 'ileac'],\n 'cellar': ['caller', 'cellar', 'recall'],\n 'cellaret': ['allecret', 'cellaret'],\n 'celloid': ['celloid', 'codille', 'collide', 'collied'],\n 'celloidin': ['celloidin', 'collidine', 'decillion'],\n 'celsian': ['celsian', 'escalin', 'sanicle', 'secalin'],\n 'celtiberi': ['celtiberi', 'terebilic'],\n 'celtis': ['celtis', 'clites'],\n 'cembalist': ['blastemic', 'cembalist'],\n 'cementer': ['cementer', 'cerement', 'recement'],\n 'cendre': ['cendre', 'decern'],\n 'cenosity': ['cenosity', 'cytosine'],\n 'cense': ['cense', 'scene', 'sence'],\n 'censer': ['censer', 'scerne', 'screen', 'secern'],\n 'censerless': ['censerless', 'screenless'],\n 'censorial': ['censorial', 'sarcoline'],\n 'censual': ['censual', 'unscale'],\n 'censureless': ['censureless', 'recluseness'],\n 'cental': ['cantle', 'cental', 'lancet', 'tancel'],\n 'centare': ['centare', 'crenate'],\n 'centaur': ['centaur', 'untrace'],\n 'centauri': ['anuretic', 'centauri', 'centuria', 'teucrian'],\n 'centaury': ['centaury', 'cyanuret'],\n 'centena': ['canteen', 'centena'],\n 'centenar': ['centenar', 'entrance'],\n 'centenier': ['centenier', 'renitence'],\n 'center': ['center', 'recent', 'tenrec'],\n 'centered': ['centered', 'decenter', 'decentre', 'recedent'],\n 'centerer': ['centerer', 'recenter', 'recentre', 'terrence'],\n 'centermost': ['centermost', 'escortment'],\n 'centesimal': ['centesimal', 'lemniscate'],\n 'centiar': ['centiar', 'certain', 'citrean', 'nacrite', 'nectria'],\n 'centiare': ['aneretic', 'centiare', 'creatine', 'increate', 'iterance'],\n 'centibar': ['bacterin', 'centibar'],\n 'centimeter': ['centimeter', 'recitement', 'remittence'],\n 'centimo': ['centimo', 'entomic', 'tecomin'],\n 'centimolar': ['centimolar', 'melicraton'],\n 'centinormal': ['centinormal', 'conterminal', 'nonmetrical'],\n 'cento': ['cento', 'conte', 'tecon'],\n 'centrad': ['cantred', 'centrad', 'tranced'],\n 'centrale': ['celarent', 'centrale', 'enclaret'],\n 'centranth': ['centranth', 'trenchant'],\n 'centraxonia': ['centraxonia', 'excarnation'],\n 'centriole': ['centriole', 'electrion', 'relection'],\n 'centrodorsal': ['centrodorsal', 'dorsocentral'],\n 'centroid': ['centroid', 'doctrine'],\n 'centrolineal': ['centrolineal', 'crenellation'],\n 'centunculus': ['centunculus', 'unsucculent'],\n 'centuria': ['anuretic', 'centauri', 'centuria', 'teucrian'],\n 'centurial': ['centurial', 'lucretian', 'ultranice'],\n 'centuried': ['centuried', 'unrecited'],\n 'centurion': ['centurion', 'continuer', 'cornutine'],\n 'cepa': ['cape', 'cepa', 'pace'],\n 'cephalin': ['alphenic', 'cephalin'],\n 'cephalina': ['cephalina', 'epilachna'],\n 'cephaloid': ['cephaloid', 'pholcidae'],\n 'cephalomeningitis': ['cephalomeningitis', 'meningocephalitis'],\n 'cephalometric': ['cephalometric', 'petrochemical'],\n 'cephalopodous': ['cephalopodous', 'podocephalous'],\n 'cephas': ['cephas', 'pesach'],\n 'cepolidae': ['adipocele', 'cepolidae', 'ploceidae'],\n 'ceps': ['ceps', 'spec'],\n 'ceptor': ['ceptor', 'copter'],\n 'ceral': ['ceral', 'clare', 'clear', 'lacer'],\n 'ceramal': ['cameral', 'caramel', 'carmela', 'ceramal', 'reclama'],\n 'ceramic': ['ceramic', 'racemic'],\n 'ceramist': ['camerist', 'ceramist', 'matrices'],\n 'ceras': ['carse', 'caser', 'ceras', 'scare', 'scrae'],\n 'cerasein': ['cerasein', 'increase'],\n 'cerasin': ['arsenic', 'cerasin', 'sarcine'],\n 'cerastes': ['cateress', 'cerastes'],\n 'cerata': ['arcate', 'cerata'],\n 'cerate': ['cerate', 'create', 'ecarte'],\n 'cerated': ['cedrate', 'cerated'],\n 'ceratiid': ['ceratiid', 'raticide'],\n 'ceration': ['actioner', 'anerotic', 'ceration', 'creation', 'reaction'],\n 'ceratium': ['ceratium', 'muricate'],\n 'ceratonia': ['canariote', 'ceratonia'],\n 'ceratosa': ['ceratosa', 'ostracea'],\n 'ceratothecal': ['ceratothecal', 'chloracetate'],\n 'cerberic': ['cerberic', 'cerebric'],\n 'cercal': ['carcel', 'cercal'],\n 'cerci': ['cerci', 'ceric', 'cicer', 'circe'],\n 'cercus': ['cercus', 'cruces'],\n 'cerdonian': ['cerdonian', 'ordinance'],\n 'cere': ['cere', 'cree'],\n 'cereal': ['alerce', 'cereal', 'relace'],\n 'cerealin': ['cerealin', 'cinereal', 'reliance'],\n 'cerebra': ['cerebra', 'rebrace'],\n 'cerebric': ['cerberic', 'cerebric'],\n 'cerebroma': ['cerebroma', 'embraceor'],\n 'cerebromeningitis': ['cerebromeningitis', 'meningocerebritis'],\n 'cerebrum': ['cerebrum', 'cumberer'],\n 'cered': ['ceder', 'cedre', 'cered', 'creed'],\n 'cerement': ['cementer', 'cerement', 'recement'],\n 'ceremonial': ['ceremonial', 'neomiracle'],\n 'ceresin': ['ceresin', 'sincere'],\n 'cereus': ['cereus', 'ceruse', 'recuse', 'rescue', 'secure'],\n 'cerevis': ['cerevis', 'scrieve', 'service'],\n 'ceria': ['acier', 'aeric', 'ceria', 'erica'],\n 'ceric': ['cerci', 'ceric', 'cicer', 'circe'],\n 'ceride': ['ceride', 'deicer'],\n 'cerillo': ['cerillo', 'colleri', 'collier'],\n 'ceriman': ['armenic', 'carmine', 'ceriman', 'crimean', 'mercian'],\n 'cerin': ['cerin', 'crine'],\n 'cerion': ['cerion', 'coiner', 'neroic', 'orcein', 'recoin'],\n 'ceriops': ['ceriops', 'persico'],\n 'cerite': ['cerite', 'certie', 'recite', 'tierce'],\n 'cerium': ['cerium', 'uremic'],\n 'cernuous': ['cernuous', 'coenurus'],\n 'cero': ['cero', 'core'],\n 'ceroma': ['ceroma', 'corema'],\n 'ceroplast': ['ceroplast', 'precostal'],\n 'ceroplastic': ['ceroplastic', 'cleistocarp', 'coreplastic'],\n 'ceroplasty': ['ceroplasty', 'coreplasty'],\n 'cerotic': ['cerotic', 'orectic'],\n 'cerotin': ['cerotin', 'cointer', 'cotrine', 'cretion', 'noticer', 'rection'],\n 'cerous': ['cerous', 'course', 'crouse', 'source'],\n 'certain': ['centiar', 'certain', 'citrean', 'nacrite', 'nectria'],\n 'certhia': ['certhia', 'rhaetic', 'theriac'],\n 'certie': ['cerite', 'certie', 'recite', 'tierce'],\n 'certifiable': ['certifiable', 'rectifiable'],\n 'certification': ['certification', 'cretification', 'rectification'],\n 'certificative': ['certificative', 'rectificative'],\n 'certificator': ['certificator', 'rectificator'],\n 'certificatory': ['certificatory', 'rectificatory'],\n 'certified': ['certified', 'rectified'],\n 'certifier': ['certifier', 'rectifier'],\n 'certify': ['certify', 'cretify', 'rectify'],\n 'certis': ['certis', 'steric'],\n 'certitude': ['certitude', 'rectitude'],\n 'certosina': ['atroscine', 'certosina', 'ostracine', 'tinoceras', 'tricosane'],\n 'certosino': ['certosino', 'cortisone', 'socotrine'],\n 'cerulean': ['cerulean', 'laurence'],\n 'ceruminal': ['ceruminal', 'melanuric', 'numerical'],\n 'ceruse': ['cereus', 'ceruse', 'recuse', 'rescue', 'secure'],\n 'cervicobuccal': ['buccocervical', 'cervicobuccal'],\n 'cervicodorsal': ['cervicodorsal', 'dorsocervical'],\n 'cervicodynia': ['cervicodynia', 'corycavidine'],\n 'cervicofacial': ['cervicofacial', 'faciocervical'],\n 'cervicolabial': ['cervicolabial', 'labiocervical'],\n 'cervicovesical': ['cervicovesical', 'vesicocervical'],\n 'cervoid': ['cervoid', 'divorce'],\n 'cervuline': ['cervuline', 'virulence'],\n 'ceryl': ['ceryl', 'clyer'],\n 'cerynean': ['ancyrene', 'cerynean'],\n 'cesare': ['cesare', 'crease', 'recase', 'searce'],\n 'cesarolite': ['cesarolite', 'esoterical'],\n 'cesium': ['cesium', 'miscue'],\n 'cesser': ['cesser', 'recess'],\n 'cession': ['cession', 'oscines'],\n 'cessor': ['cessor', 'crosse', 'scorse'],\n 'cest': ['cest', 'sect'],\n 'cestodaria': ['castoridae', 'cestodaria'],\n 'cestrian': ['canister', 'cestrian', 'cisterna', 'irascent'],\n 'cetane': ['cetane', 'tenace'],\n 'cetene': ['cetene', 'ectene'],\n 'ceti': ['ceti', 'cite', 'tice'],\n 'cetid': ['cetid', 'edict'],\n 'cetomorphic': ['cetomorphic', 'chemotropic', 'ectomorphic'],\n 'cetonia': ['acetoin', 'aconite', 'anoetic', 'antoeci', 'cetonia'],\n 'cetonian': ['cetonian', 'enaction'],\n 'cetorhinus': ['cetorhinus', 'urosthenic'],\n 'cetus': ['cetus', 'scute'],\n 'cevenol': ['cevenol', 'clovene'],\n 'cevine': ['cevine', 'evince', 'venice'],\n 'cha': ['ach', 'cha'],\n 'chab': ['bach', 'chab'],\n 'chabouk': ['chabouk', 'chakobu'],\n 'chaco': ['chaco', 'choca', 'coach'],\n 'chacte': ['cachet', 'chacte'],\n 'chaenolobus': ['chaenolobus', 'unchoosable'],\n 'chaeta': ['achate', 'chaeta'],\n 'chaetites': ['aesthetic', 'chaetites'],\n 'chaetognath': ['chaetognath', 'gnathotheca'],\n 'chaetopod': ['chaetopod', 'podotheca'],\n 'chafer': ['chafer', 'frache'],\n 'chagan': ['chagan', 'changa'],\n 'chagrin': ['arching', 'chagrin'],\n 'chai': ['chai', 'chia'],\n 'chain': ['chain', 'chian', 'china'],\n 'chained': ['chained', 'echidna'],\n 'chainer': ['chainer', 'enchair', 'rechain'],\n 'chainlet': ['chainlet', 'ethnical'],\n 'chainman': ['chainman', 'chinaman'],\n 'chair': ['chair', 'chria'],\n 'chairer': ['chairer', 'charier'],\n 'chait': ['aitch', 'chait', 'chati', 'chita', 'taich', 'tchai'],\n 'chakar': ['chakar', 'chakra', 'charka'],\n 'chakari': ['chakari', 'chikara', 'kachari'],\n 'chakobu': ['chabouk', 'chakobu'],\n 'chakra': ['chakar', 'chakra', 'charka'],\n 'chalcon': ['chalcon', 'clochan', 'conchal'],\n 'chalcosine': ['ascolichen', 'chalcosine'],\n 'chaldron': ['chaldron', 'chlordan', 'chondral'],\n 'chalet': ['achtel', 'chalet', 'thecal', 'thecla'],\n 'chalker': ['chalker', 'hackler'],\n 'chalky': ['chalky', 'hackly'],\n 'challie': ['alichel', 'challie', 'helical'],\n 'chalmer': ['chalmer', 'charmel'],\n 'chalon': ['chalon', 'lochan'],\n 'chalone': ['chalone', 'cholane'],\n 'chalta': ['caltha', 'chalta'],\n 'chamal': ['almach', 'chamal'],\n 'chamar': ['chamar', 'machar'],\n 'chamber': ['becharm', 'brecham', 'chamber'],\n 'chamberer': ['chamberer', 'rechamber'],\n 'chamian': ['chamian', 'mahican'],\n 'chamisal': ['chamisal', 'chiasmal'],\n 'chamiso': ['chamiso', 'chamois'],\n 'chamite': ['chamite', 'hematic'],\n 'chamois': ['chamiso', 'chamois'],\n 'champa': ['champa', 'mapach'],\n 'champain': ['champain', 'chinampa'],\n 'chancer': ['chancer', 'chancre'],\n 'chanchito': ['chanchito', 'nachitoch'],\n 'chanco': ['chanco', 'concha'],\n 'chancre': ['chancer', 'chancre'],\n 'chandu': ['chandu', 'daunch'],\n 'chane': ['achen', 'chane', 'chena', 'hance'],\n 'chang': ['chang', 'ganch'],\n 'changa': ['chagan', 'changa'],\n 'changer': ['changer', 'genarch'],\n 'chanidae': ['chanidae', 'hacienda'],\n 'channeler': ['channeler', 'encharnel'],\n 'chanst': ['chanst', 'snatch', 'stanch'],\n 'chant': ['chant', 'natch'],\n 'chanter': ['chanter', 'rechant'],\n 'chantey': ['atechny', 'chantey'],\n 'chantry': ['cathryn', 'chantry'],\n 'chaos': ['chaos', 'oshac'],\n 'chaotical': ['acatholic', 'chaotical'],\n 'chap': ['caph', 'chap'],\n 'chaparro': ['chaparro', 'parachor'],\n 'chape': ['chape', 'cheap', 'peach'],\n 'chaped': ['chaped', 'phecda'],\n 'chapel': ['chapel', 'lepcha', 'pleach'],\n 'chapelet': ['chapelet', 'peachlet'],\n 'chapelmaster': ['chapelmaster', 'spermathecal'],\n 'chaperno': ['canephor', 'chaperno', 'chaperon'],\n 'chaperon': ['canephor', 'chaperno', 'chaperon'],\n 'chaperone': ['canephore', 'chaperone'],\n 'chaperonless': ['chaperonless', 'proseneschal'],\n 'chapin': ['apinch', 'chapin', 'phanic'],\n 'chapiter': ['chapiter', 'phreatic'],\n 'chaps': ['chaps', 'pasch'],\n 'chapt': ['chapt', 'pacht', 'patch'],\n 'chapter': ['chapter', 'patcher', 'repatch'],\n 'char': ['arch', 'char', 'rach'],\n 'chara': ['achar', 'chara'],\n 'charac': ['charac', 'charca'],\n 'characin': ['anarchic', 'characin'],\n 'characinoid': ['arachidonic', 'characinoid'],\n 'charadrii': ['charadrii', 'richardia'],\n 'charas': ['achras', 'charas'],\n 'charbon': ['brochan', 'charbon'],\n 'charca': ['charac', 'charca'],\n 'chare': ['acher', 'arche', 'chare', 'chera', 'rache', 'reach'],\n 'charer': ['archer', 'charer', 'rechar'],\n 'charette': ['catheter', 'charette'],\n 'charge': ['charge', 'creagh'],\n 'charier': ['chairer', 'charier'],\n 'chariot': ['chariot', 'haricot'],\n 'charioted': ['charioted', 'trochidae'],\n 'chariotman': ['achromatin', 'chariotman', 'machinator'],\n 'charism': ['charism', 'chrisma'],\n 'charisma': ['archaism', 'charisma'],\n 'chark': ['chark', 'karch'],\n 'charka': ['chakar', 'chakra', 'charka'],\n 'charlatanistic': ['antarchistical', 'charlatanistic'],\n 'charleen': ['charleen', 'charlene'],\n 'charlene': ['charleen', 'charlene'],\n 'charles': ['charles', 'clasher'],\n 'charm': ['charm', 'march'],\n 'charmel': ['chalmer', 'charmel'],\n 'charmer': ['charmer', 'marcher', 'remarch'],\n 'charnel': ['charnel', 'larchen'],\n 'charon': ['anchor', 'archon', 'charon', 'rancho'],\n 'charpoy': ['charpoy', 'corypha'],\n 'chart': ['chart', 'ratch'],\n 'charter': ['charter', 'ratcher'],\n 'charterer': ['charterer', 'recharter'],\n 'charting': ['charting', 'ratching'],\n 'chartism': ['carsmith', 'chartism'],\n 'charuk': ['charuk', 'chukar'],\n 'chary': ['archy', 'chary'],\n 'chasable': ['cashable', 'chasable'],\n 'chaser': ['arches', 'chaser', 'eschar', 'recash', 'search'],\n 'chasma': ['ascham', 'chasma'],\n 'chaste': ['chaste', 'sachet', 'scathe', 'scheat'],\n 'chasten': ['chasten', 'sanetch'],\n 'chastener': ['chastener', 'rechasten'],\n 'chastity': ['chastity', 'yachtist'],\n 'chasuble': ['chasuble', 'subchela'],\n 'chat': ['chat', 'tach'],\n 'chatelainry': ['chatelainry', 'trachylinae'],\n 'chati': ['aitch', 'chait', 'chati', 'chita', 'taich', 'tchai'],\n 'chatino': ['cathion', 'chatino'],\n 'chatsome': ['chatsome', 'moschate'],\n 'chatta': ['attach', 'chatta'],\n 'chattation': ['chattation', 'thanatotic'],\n 'chattel': ['chattel', 'latchet'],\n 'chatter': ['chatter', 'ratchet'],\n 'chattery': ['chattery', 'ratchety', 'trachyte'],\n 'chatti': ['chatti', 'hattic'],\n 'chatty': ['chatty', 'tatchy'],\n 'chatwood': ['chatwood', 'woodchat'],\n 'chaute': ['chaute', 'chueta'],\n 'chawan': ['chawan', 'chwana', 'wachna'],\n 'chawer': ['chawer', 'rechaw'],\n 'chawk': ['chawk', 'whack'],\n 'chay': ['achy', 'chay'],\n 'cheap': ['chape', 'cheap', 'peach'],\n 'cheapen': ['cheapen', 'peachen'],\n 'cheapery': ['cheapery', 'peachery'],\n 'cheapside': ['cheapside', 'sphecidae'],\n 'cheat': ['cheat', 'tache', 'teach', 'theca'],\n 'cheatable': ['cheatable', 'teachable'],\n 'cheatableness': ['cheatableness', 'teachableness'],\n 'cheater': ['cheater', 'hectare', 'recheat', 'reteach', 'teacher'],\n 'cheatery': ['cheatery', 'cytherea', 'teachery'],\n 'cheating': ['cheating', 'teaching'],\n 'cheatingly': ['cheatingly', 'teachingly'],\n 'cheatrie': ['cheatrie', 'hetaeric'],\n 'checker': ['checker', 'recheck'],\n 'chee': ['chee', 'eche'],\n 'cheek': ['cheek', 'cheke', 'keech'],\n 'cheerer': ['cheerer', 'recheer'],\n 'cheerly': ['cheerly', 'lechery'],\n 'cheery': ['cheery', 'reechy'],\n 'cheet': ['cheet', 'hecte'],\n 'cheir': ['cheir', 'rheic'],\n 'cheiropodist': ['cheiropodist', 'coeditorship'],\n 'cheka': ['cheka', 'keach'],\n 'cheke': ['cheek', 'cheke', 'keech'],\n 'chela': ['chela', 'lache', 'leach'],\n 'chelide': ['chelide', 'heliced'],\n 'chelidon': ['chelidon', 'chelonid', 'delichon'],\n 'chelidonate': ['chelidonate', 'endothecial'],\n 'chelodina': ['chelodina', 'hedonical'],\n 'chelone': ['chelone', 'echelon'],\n 'chelonid': ['chelidon', 'chelonid', 'delichon'],\n 'cheloniid': ['cheloniid', 'lichenoid'],\n 'chemiatrist': ['chemiatrist', 'chrismatite', 'theatricism'],\n 'chemical': ['alchemic', 'chemical'],\n 'chemicomechanical': ['chemicomechanical', 'mechanicochemical'],\n 'chemicophysical': ['chemicophysical', 'physicochemical'],\n 'chemicovital': ['chemicovital', 'vitochemical'],\n 'chemiloon': ['chemiloon', 'homocline'],\n 'chemotaxy': ['chemotaxy', 'myxotheca'],\n 'chemotropic': ['cetomorphic', 'chemotropic', 'ectomorphic'],\n 'chena': ['achen', 'chane', 'chena', 'hance'],\n 'chenica': ['chenica', 'chicane'],\n 'chenille': ['chenille', 'hellenic'],\n 'chenopod': ['chenopod', 'ponchoed'],\n 'chera': ['acher', 'arche', 'chare', 'chera', 'rache', 'reach'],\n 'chermes': ['chermes', 'schemer'],\n 'chert': ['chert', 'retch'],\n 'cherte': ['cherte', 'etcher'],\n 'chervil': ['chervil', 'chilver'],\n 'cheson': ['cheson', 'chosen', 'schone'],\n 'chest': ['chest', 'stech'],\n 'chestily': ['chestily', 'lecythis'],\n 'chesty': ['chesty', 'scythe'],\n 'chet': ['chet', 'etch', 'tche', 'tech'],\n 'chettik': ['chettik', 'thicket'],\n 'chetty': ['chetty', 'tetchy'],\n 'chewer': ['chewer', 'rechew'],\n 'chewink': ['chewink', 'whicken'],\n 'chi': ['chi', 'hic', 'ich'],\n 'chia': ['chai', 'chia'],\n 'chiam': ['chiam', 'machi', 'micah'],\n 'chian': ['chain', 'chian', 'china'],\n 'chiasmal': ['chamisal', 'chiasmal'],\n 'chiastolite': ['chiastolite', 'heliostatic'],\n 'chicane': ['chenica', 'chicane'],\n 'chicle': ['chicle', 'cliche'],\n 'chid': ['chid', 'dich'],\n 'chider': ['chider', 'herdic'],\n 'chidra': ['chidra', 'diarch'],\n 'chief': ['chief', 'fiche'],\n 'chield': ['chield', 'childe'],\n 'chien': ['chien', 'chine', 'niche'],\n 'chikara': ['chakari', 'chikara', 'kachari'],\n 'chil': ['chil', 'lich'],\n 'childe': ['chield', 'childe'],\n 'chilean': ['chilean', 'echinal', 'nichael'],\n 'chili': ['chili', 'lichi'],\n 'chiliasm': ['chiliasm', 'hilasmic', 'machilis'],\n 'chilla': ['achill', 'cahill', 'chilla'],\n 'chiloma': ['chiloma', 'malicho'],\n 'chilopod': ['chilopod', 'pholcoid'],\n 'chilopoda': ['chilopoda', 'haplodoci'],\n 'chilostome': ['chilostome', 'schooltime'],\n 'chilver': ['chervil', 'chilver'],\n 'chimane': ['chimane', 'machine'],\n 'chime': ['chime', 'hemic', 'miche'],\n 'chimer': ['chimer', 'mechir', 'micher'],\n 'chimera': ['chimera', 'hermaic'],\n 'chimney': ['chimney', 'hymenic'],\n 'chimu': ['chimu', 'humic'],\n 'chin': ['chin', 'inch'],\n 'china': ['chain', 'chian', 'china'],\n 'chinaman': ['chainman', 'chinaman'],\n 'chinampa': ['champain', 'chinampa'],\n 'chinanta': ['acanthin', 'chinanta'],\n 'chinar': ['chinar', 'inarch'],\n 'chine': ['chien', 'chine', 'niche'],\n 'chined': ['chined', 'inched'],\n 'chink': ['chink', 'kinch'],\n 'chinkle': ['chinkle', 'kelchin'],\n 'chinks': ['chinks', 'skinch'],\n 'chinoa': ['chinoa', 'noahic'],\n 'chinotti': ['chinotti', 'tithonic'],\n 'chint': ['chint', 'nitch'],\n 'chiolite': ['chiolite', 'eolithic'],\n 'chionididae': ['chionididae', 'onchidiidae'],\n 'chiral': ['archil', 'chiral'],\n 'chirapsia': ['chirapsia', 'pharisaic'],\n 'chirata': ['cathari', 'chirata', 'cithara'],\n 'chiro': ['chiro', 'choir', 'ichor'],\n 'chiromancist': ['chiromancist', 'monarchistic'],\n 'chiromant': ['chiromant', 'chromatin'],\n 'chiromantic': ['chiromantic', 'chromatinic'],\n 'chiromantis': ['anchoritism', 'chiromantis', 'chrismation', 'harmonistic'],\n 'chirometer': ['chirometer', 'rheometric'],\n 'chiroplasty': ['chiroplasty', 'polyarchist'],\n 'chiropter': ['chiropter', 'peritroch'],\n 'chirosophist': ['chirosophist', 'opisthorchis'],\n 'chirotes': ['chirotes', 'theorics'],\n 'chirotype': ['chirotype', 'hypocrite'],\n 'chirp': ['chirp', 'prich'],\n 'chirper': ['chirper', 'prerich'],\n 'chiseler': ['chiseler', 'rechisel'],\n 'chit': ['chit', 'itch', 'tchi'],\n 'chita': ['aitch', 'chait', 'chati', 'chita', 'taich', 'tchai'],\n 'chital': ['chital', 'claith'],\n 'chitinoid': ['chitinoid', 'dithionic'],\n 'chitosan': ['atchison', 'chitosan'],\n 'chitose': ['chitose', 'echoist'],\n 'chloe': ['chloe', 'choel'],\n 'chloracetate': ['ceratothecal', 'chloracetate'],\n 'chloranthy': ['chloranthy', 'rhynchotal'],\n 'chlorate': ['chlorate', 'trochlea'],\n 'chlordan': ['chaldron', 'chlordan', 'chondral'],\n 'chlore': ['chlore', 'choler', 'orchel'],\n 'chloremia': ['chloremia', 'homerical'],\n 'chlorinate': ['chlorinate', 'ectorhinal', 'tornachile'],\n 'chlorite': ['chlorite', 'clothier'],\n 'chloritic': ['chloritic', 'trochilic'],\n 'chloroamine': ['chloroamine', 'melanochroi'],\n 'chloroanaemia': ['aeolharmonica', 'chloroanaemia'],\n 'chloroanemia': ['chloroanemia', 'choleromania'],\n 'chloroiodide': ['chloroiodide', 'iodochloride'],\n 'chloroplatinic': ['chloroplatinic', 'platinochloric'],\n 'cho': ['cho', 'och'],\n 'choana': ['aonach', 'choana'],\n 'choca': ['chaco', 'choca', 'coach'],\n 'choco': ['choco', 'hocco'],\n 'choel': ['chloe', 'choel'],\n 'choenix': ['choenix', 'hexonic'],\n 'choes': ['choes', 'chose'],\n 'choiak': ['choiak', 'kochia'],\n 'choice': ['choice', 'echoic'],\n 'choil': ['choil', 'choli', 'olchi'],\n 'choir': ['chiro', 'choir', 'ichor'],\n 'choirman': ['choirman', 'harmonic', 'omniarch'],\n 'choker': ['choker', 'hocker'],\n 'choky': ['choky', 'hocky'],\n 'chol': ['chol', 'loch'],\n 'chola': ['chola', 'loach', 'olcha'],\n 'cholane': ['chalone', 'cholane'],\n 'cholangioitis': ['angiocholitis', 'cholangioitis'],\n 'cholanic': ['cholanic', 'colchian'],\n 'cholate': ['cathole', 'cholate'],\n 'cholecystoduodenostomy': ['cholecystoduodenostomy', 'duodenocholecystostomy'],\n 'choler': ['chlore', 'choler', 'orchel'],\n 'cholera': ['cholera', 'choreal'],\n 'cholerine': ['cholerine', 'rhinocele'],\n 'choleromania': ['chloroanemia', 'choleromania'],\n 'cholesteremia': ['cholesteremia', 'heteroecismal'],\n 'choli': ['choil', 'choli', 'olchi'],\n 'choline': ['choline', 'helicon'],\n 'cholo': ['cholo', 'cohol'],\n 'chondral': ['chaldron', 'chlordan', 'chondral'],\n 'chondrite': ['chondrite', 'threnodic'],\n 'chondroadenoma': ['adenochondroma', 'chondroadenoma'],\n 'chondroangioma': ['angiochondroma', 'chondroangioma'],\n 'chondroarthritis': ['arthrochondritis', 'chondroarthritis'],\n 'chondrocostal': ['chondrocostal', 'costochondral'],\n 'chondrofibroma': ['chondrofibroma', 'fibrochondroma'],\n 'chondrolipoma': ['chondrolipoma', 'lipochondroma'],\n 'chondromyxoma': ['chondromyxoma', 'myxochondroma'],\n 'chondromyxosarcoma': ['chondromyxosarcoma', 'myxochondrosarcoma'],\n 'choop': ['choop', 'pooch'],\n 'chopa': ['chopa', 'phoca', 'poach'],\n 'chopin': ['chopin', 'phonic'],\n 'chopine': ['chopine', 'phocine'],\n 'chora': ['achor', 'chora', 'corah', 'orach', 'roach'],\n 'choral': ['choral', 'lorcha'],\n 'chorasmian': ['anachorism', 'chorasmian', 'maraschino'],\n 'chordal': ['chordal', 'dorlach'],\n 'chorditis': ['chorditis', 'orchidist'],\n 'chordotonal': ['chordotonal', 'notochordal'],\n 'chore': ['chore', 'ocher'],\n 'chorea': ['chorea', 'ochrea', 'rochea'],\n 'choreal': ['cholera', 'choreal'],\n 'choree': ['choree', 'cohere', 'echoer'],\n 'choreoid': ['choreoid', 'ochidore'],\n 'choreus': ['choreus', 'chouser', 'rhoecus'],\n 'choric': ['choric', 'orchic'],\n 'choriocele': ['choriocele', 'orchiocele'],\n 'chorioidoretinitis': ['chorioidoretinitis', 'retinochorioiditis'],\n 'chorism': ['chorism', 'chrisom'],\n 'chorist': ['chorist', 'ostrich'],\n 'choristate': ['choristate', 'rheostatic'],\n 'chorization': ['chorization', 'rhizoctonia', 'zonotrichia'],\n 'choroid': ['choroid', 'ochroid'],\n 'chort': ['chort', 'rotch', 'torch'],\n 'chorten': ['chorten', 'notcher'],\n 'chorti': ['chorti', 'orthic', 'thoric', 'trochi'],\n 'chose': ['choes', 'chose'],\n 'chosen': ['cheson', 'chosen', 'schone'],\n 'chou': ['chou', 'ouch'],\n 'chough': ['chough', 'hughoc'],\n 'choup': ['choup', 'pouch'],\n 'chous': ['chous', 'hocus'],\n 'chouser': ['choreus', 'chouser', 'rhoecus'],\n 'chowder': ['chowder', 'cowherd'],\n 'chria': ['chair', 'chria'],\n 'chrism': ['chrism', 'smirch'],\n 'chrisma': ['charism', 'chrisma'],\n 'chrismation': ['anchoritism', 'chiromantis', 'chrismation', 'harmonistic'],\n 'chrismatite': ['chemiatrist', 'chrismatite', 'theatricism'],\n 'chrisom': ['chorism', 'chrisom'],\n 'christ': ['christ', 'strich'],\n 'christen': ['christen', 'snitcher'],\n 'christener': ['christener', 'rechristen'],\n 'christian': ['christian', 'christina'],\n 'christiana': ['arachnitis', 'christiana'],\n 'christina': ['christian', 'christina'],\n 'christophe': ['christophe', 'hectorship'],\n 'chromatician': ['achromatinic', 'chromatician'],\n 'chromatid': ['chromatid', 'dichromat'],\n 'chromatin': ['chiromant', 'chromatin'],\n 'chromatinic': ['chiromantic', 'chromatinic'],\n 'chromatocyte': ['chromatocyte', 'thoracectomy'],\n 'chromatoid': ['chromatoid', 'tichodroma'],\n 'chromatone': ['chromatone', 'enomotarch'],\n 'chromid': ['chromid', 'richdom'],\n 'chromidae': ['archidome', 'chromidae'],\n 'chromite': ['chromite', 'trichome'],\n 'chromocyte': ['chromocyte', 'cytochrome'],\n 'chromolithography': ['chromolithography', 'lithochromography'],\n 'chromophotography': ['chromophotography', 'photochromography'],\n 'chromophotolithograph': ['chromophotolithograph', 'photochromolithograph'],\n 'chromopsia': ['chromopsia', 'isocamphor'],\n 'chromotype': ['chromotype', 'cormophyte', 'ectomorphy'],\n 'chromotypic': ['chromotypic', 'cormophytic', 'mycotrophic'],\n 'chronophotograph': ['chronophotograph', 'photochronograph'],\n 'chronophotographic': ['chronophotographic', 'photochronographic'],\n 'chronophotography': ['chronophotography', 'photochronography'],\n 'chrysography': ['chrysography', 'psychorrhagy'],\n 'chrysolite': ['chrysolite', 'chrysotile'],\n 'chrysopid': ['chrysopid', 'dysphoric'],\n 'chrysotile': ['chrysolite', 'chrysotile'],\n 'chucker': ['chucker', 'rechuck'],\n 'chueta': ['chaute', 'chueta'],\n 'chukar': ['charuk', 'chukar'],\n 'chulan': ['chulan', 'launch', 'nuchal'],\n 'chum': ['chum', 'much'],\n 'chumpish': ['chumpish', 'chumship'],\n 'chumship': ['chumpish', 'chumship'],\n 'chunari': ['chunari', 'unchair'],\n 'chunnia': ['chunnia', 'unchain'],\n 'chuprassie': ['chuprassie', 'haruspices'],\n 'churl': ['churl', 'lurch'],\n 'churn': ['churn', 'runch'],\n 'chut': ['chut', 'tchu', 'utch'],\n 'chwana': ['chawan', 'chwana', 'wachna'],\n 'chyak': ['chyak', 'hacky'],\n 'chylous': ['chylous', 'slouchy'],\n 'cibarial': ['biracial', 'cibarial'],\n 'cibarian': ['arabinic', 'cabirian', 'carabini', 'cibarian'],\n 'cibolan': ['cibolan', 'coalbin'],\n 'cicala': ['alcaic', 'cicala'],\n 'cicatrize': ['arcticize', 'cicatrize'],\n 'cicely': ['cecily', 'cicely'],\n 'cicer': ['cerci', 'ceric', 'cicer', 'circe'],\n 'cicerone': ['cicerone', 'croceine'],\n 'cicindela': ['cicindela', 'cinclidae', 'icelandic'],\n 'ciclatoun': ['ciclatoun', 'noctiluca'],\n 'ciconian': ['aniconic', 'ciconian'],\n 'ciconine': ['ciconine', 'conicine'],\n 'cidaridae': ['acrididae', 'cardiidae', 'cidaridae'],\n 'cidaris': ['cidaris', 'sciarid'],\n 'cider': ['cider', 'cried', 'deric', 'dicer'],\n 'cigala': ['caliga', 'cigala'],\n 'cigar': ['cigar', 'craig'],\n 'cilia': ['cilia', 'iliac'],\n 'ciliation': ['ciliation', 'coinitial'],\n 'cilice': ['cilice', 'icicle'],\n 'cimbia': ['cimbia', 'iambic'],\n 'cimicidae': ['amicicide', 'cimicidae'],\n 'cinchonine': ['cinchonine', 'conchinine'],\n 'cinclidae': ['cicindela', 'cinclidae', 'icelandic'],\n 'cinder': ['cedrin', 'cinder', 'crined'],\n 'cinderous': ['cinderous', 'decursion'],\n 'cindie': ['cindie', 'incide'],\n 'cine': ['cine', 'nice'],\n 'cinel': ['cinel', 'cline'],\n 'cinema': ['anemic', 'cinema', 'iceman'],\n 'cinematographer': ['cinematographer', 'megachiropteran'],\n 'cinene': ['cinene', 'nicene'],\n 'cineole': ['cineole', 'coeline'],\n 'cinerama': ['amacrine', 'american', 'camerina', 'cinerama'],\n 'cineration': ['cineration', 'inceration'],\n 'cinerea': ['cairene', 'cinerea'],\n 'cinereal': ['cerealin', 'cinereal', 'reliance'],\n 'cingulum': ['cingulum', 'glucinum'],\n 'cinnamate': ['antanemic', 'cinnamate'],\n 'cinnamol': ['cinnamol', 'nonclaim'],\n 'cinnamon': ['cinnamon', 'mannonic'],\n 'cinnamoned': ['cinnamoned', 'demicannon'],\n 'cinque': ['cinque', 'quince'],\n 'cinter': ['cinter', 'cretin', 'crinet'],\n 'cinura': ['anuric', 'cinura', 'uranic'],\n 'cion': ['cion', 'coin', 'icon'],\n 'cipher': ['cipher', 'rechip'],\n 'cipo': ['cipo', 'pico'],\n 'circe': ['cerci', 'ceric', 'cicer', 'circe'],\n 'circle': ['circle', 'cleric'],\n 'cirrate': ['cartier', 'cirrate', 'erratic'],\n 'cirrated': ['cirrated', 'craterid'],\n 'cirrhotic': ['cirrhotic', 'trichroic'],\n 'cirrose': ['cirrose', 'crosier'],\n 'cirsectomy': ['cirsectomy', 'citromyces'],\n 'cirsoid': ['cirsoid', 'soricid'],\n 'ciruela': ['auricle', 'ciruela'],\n 'cise': ['cise', 'sice'],\n 'cisplatine': ['cisplatine', 'plasticine'],\n 'cispontine': ['cispontine', 'inspection'],\n 'cissoidal': ['cissoidal', 'dissocial'],\n 'cistern': ['cistern', 'increst'],\n 'cisterna': ['canister', 'cestrian', 'cisterna', 'irascent'],\n 'cisternal': ['cisternal', 'larcenist'],\n 'cistvaen': ['cistvaen', 'vesicant'],\n 'cit': ['cit', 'tic'],\n 'citadel': ['citadel', 'deltaic', 'dialect', 'edictal', 'lactide'],\n 'citatory': ['atrocity', 'citatory'],\n 'cite': ['ceti', 'cite', 'tice'],\n 'citer': ['citer', 'recti', 'ticer', 'trice'],\n 'cithara': ['cathari', 'chirata', 'cithara'],\n 'citharist': ['citharist', 'trachitis'],\n 'citharoedic': ['citharoedic', 'diachoretic'],\n 'cither': ['cither', 'thrice'],\n 'citied': ['citied', 'dietic'],\n 'citizen': ['citizen', 'zincite'],\n 'citral': ['citral', 'rictal'],\n 'citramide': ['citramide', 'diametric', 'matricide'],\n 'citrange': ['argentic', 'citrange'],\n 'citrate': ['atretic', 'citrate'],\n 'citrated': ['citrated', 'tetracid', 'tetradic'],\n 'citrean': ['centiar', 'certain', 'citrean', 'nacrite', 'nectria'],\n 'citrene': ['citrene', 'enteric', 'enticer', 'tercine'],\n 'citreous': ['citreous', 'urticose'],\n 'citric': ['citric', 'critic'],\n 'citrin': ['citrin', 'nitric'],\n 'citrination': ['citrination', 'intrication'],\n 'citrine': ['citrine', 'crinite', 'inciter', 'neritic'],\n 'citromyces': ['cirsectomy', 'citromyces'],\n 'citron': ['citron', 'cortin', 'crotin'],\n 'citronade': ['citronade', 'endaortic', 'redaction'],\n 'citronella': ['citronella', 'interlocal'],\n 'citrus': ['citrus', 'curtis', 'rictus', 'rustic'],\n 'cive': ['cive', 'vice'],\n 'civet': ['civet', 'evict'],\n 'civetone': ['civetone', 'evection'],\n 'civitan': ['activin', 'civitan'],\n 'cixo': ['cixo', 'coix'],\n 'clabber': ['cabbler', 'clabber'],\n 'clacker': ['cackler', 'clacker', 'crackle'],\n 'cladine': ['cladine', 'decalin', 'iceland'],\n 'cladonia': ['cladonia', 'condalia', 'diaconal'],\n 'cladophyll': ['cladophyll', 'phylloclad'],\n 'claim': ['claim', 'clima', 'malic'],\n 'claimant': ['calamint', 'claimant'],\n 'claimer': ['claimer', 'miracle', 'reclaim'],\n 'clairce': ['clairce', 'clarice'],\n 'claire': ['carlie', 'claire', 'eclair', 'erical'],\n 'claith': ['chital', 'claith'],\n 'claiver': ['caliver', 'caviler', 'claiver', 'clavier', 'valeric', 'velaric'],\n 'clam': ['calm', 'clam'],\n 'clamant': ['calmant', 'clamant'],\n 'clamative': ['calmative', 'clamative'],\n 'clamatores': ['clamatores', 'scleromata'],\n 'clamber': ['cambrel', 'clamber', 'cramble'],\n 'clame': ['camel', 'clame', 'cleam', 'macle'],\n 'clamer': ['calmer', 'carmel', 'clamer', 'marcel', 'mercal'],\n 'clamor': ['clamor', 'colmar'],\n 'clamorist': ['clamorist', 'crotalism'],\n 'clangingly': ['clangingly', 'glancingly'],\n 'clap': ['calp', 'clap'],\n 'clapper': ['clapper', 'crapple'],\n 'claquer': ['claquer', 'lacquer'],\n 'clarain': ['carinal', 'carlina', 'clarain', 'cranial'],\n 'clare': ['ceral', 'clare', 'clear', 'lacer'],\n 'clarence': ['canceler', 'clarence', 'recancel'],\n 'claret': ['carlet', 'cartel', 'claret', 'rectal', 'talcer'],\n 'claretian': ['carnalite', 'claretian', 'lacertian', 'nectarial'],\n 'clarice': ['clairce', 'clarice'],\n 'clarin': ['carlin', 'clarin', 'crinal'],\n 'clarinda': ['cardinal', 'clarinda'],\n 'clarion': ['carolin', 'clarion', 'colarin', 'locrian'],\n 'clarionet': ['alectrion', 'clarionet', 'crotaline', 'locarnite'],\n 'clarist': ['carlist', 'clarist'],\n 'claro': ['alcor', 'calor', 'carlo', 'carol', 'claro', 'coral'],\n 'clary': ['acryl', 'caryl', 'clary'],\n 'clasher': ['charles', 'clasher'],\n 'clasp': ['clasp', 'scalp'],\n 'clasper': ['clasper', 'reclasp', 'scalper'],\n 'clasping': ['clasping', 'scalping'],\n 'classed': ['classed', 'declass'],\n 'classer': ['carless', 'classer', 'reclass'],\n 'classism': ['classism', 'misclass'],\n 'classwork': ['classwork', 'crosswalk'],\n 'clat': ['clat', 'talc'],\n 'clathrina': ['alchitran', 'clathrina'],\n 'clathrose': ['clathrose', 'searcloth'],\n 'clatterer': ['clatterer', 'craterlet'],\n 'claude': ['caudle', 'cedula', 'claude'],\n 'claudian': ['claudian', 'dulciana'],\n 'claudicate': ['aciculated', 'claudicate'],\n 'clause': ['caelus', 'caules', 'clause'],\n 'claustral': ['claustral', 'lacustral'],\n 'clava': ['caval', 'clava'],\n 'clavacin': ['clavacin', 'vaccinal'],\n 'clavaria': ['calvaria', 'clavaria'],\n 'clave': ['calve', 'cavel', 'clave'],\n 'claver': ['calver', 'carvel', 'claver'],\n 'claviculate': ['calculative', 'claviculate'],\n 'clavier': ['caliver', 'caviler', 'claiver', 'clavier', 'valeric', 'velaric'],\n 'clavis': ['clavis', 'slavic'],\n 'clay': ['acyl', 'clay', 'lacy'],\n 'clayer': ['clayer', 'lacery'],\n 'claytonia': ['acylation', 'claytonia'],\n 'clead': ['clead', 'decal', 'laced'],\n 'cleam': ['camel', 'clame', 'cleam', 'macle'],\n 'cleamer': ['carmele', 'cleamer'],\n 'clean': ['canel', 'clean', 'lance', 'lenca'],\n 'cleaner': ['cleaner', 'reclean'],\n 'cleanly': ['cleanly', 'lancely'],\n 'cleanout': ['cleanout', 'outlance'],\n 'cleanse': ['cleanse', 'scalene'],\n 'cleanup': ['cleanup', 'unplace'],\n 'clear': ['ceral', 'clare', 'clear', 'lacer'],\n 'clearable': ['clearable', 'lacerable'],\n 'clearer': ['clearer', 'reclear'],\n 'cleat': ['cleat', 'eclat', 'ectal', 'lacet', 'tecla'],\n 'clefted': ['clefted', 'deflect'],\n 'cleistocarp': ['ceroplastic', 'cleistocarp', 'coreplastic'],\n 'cleistogeny': ['cleistogeny', 'lysogenetic'],\n 'cleoid': ['cleoid', 'coiled', 'docile'],\n 'cleopatra': ['acropetal', 'cleopatra'],\n 'cleric': ['circle', 'cleric'],\n 'clericature': ['clericature', 'recirculate'],\n 'clerkess': ['clerkess', 'reckless'],\n 'clerking': ['clerking', 'reckling'],\n 'clerus': ['clerus', 'cruels'],\n 'clethra': ['clethra', 'latcher', 'ratchel', 'relatch', 'talcher', 'trachle'],\n 'cleveite': ['cleveite', 'elective'],\n 'cliche': ['chicle', 'cliche'],\n 'clicker': ['clicker', 'crickle'],\n 'clidastes': ['clidastes', 'discastle'],\n 'clientage': ['clientage', 'genetical'],\n 'cliented': ['cliented', 'denticle'],\n 'cliftonia': ['cliftonia', 'fictional'],\n 'clima': ['claim', 'clima', 'malic'],\n 'climber': ['climber', 'reclimb'],\n 'clime': ['clime', 'melic'],\n 'cline': ['cinel', 'cline'],\n 'clinger': ['clinger', 'cringle'],\n 'clinia': ['anilic', 'clinia'],\n 'clinicopathological': ['clinicopathological', 'pathologicoclinical'],\n 'clinium': ['clinium', 'ulminic'],\n 'clinker': ['clinker', 'crinkle'],\n 'clinoclase': ['clinoclase', 'oscillance'],\n 'clinoclasite': ['callisection', 'clinoclasite'],\n 'clinodome': ['clinodome', 'melodicon', 'monocleid'],\n 'clinology': ['clinology', 'coolingly'],\n 'clinometer': ['clinometer', 'recoilment'],\n 'clinospore': ['clinospore', 'necropolis'],\n 'clio': ['clio', 'coil', 'coli', 'loci'],\n 'cliona': ['alnico', 'cliona', 'oilcan'],\n 'clione': ['clione', 'coelin', 'encoil', 'enolic'],\n 'clipeus': ['clipeus', 'spicule'],\n 'clipper': ['clipper', 'cripple'],\n 'clipse': ['clipse', 'splice'],\n 'clipsome': ['clipsome', 'polemics'],\n 'clite': ['clite', 'telic'],\n 'clites': ['celtis', 'clites'],\n 'clitia': ['clitia', 'italic'],\n 'clition': ['clition', 'nilotic'],\n 'clitoria': ['clitoria', 'loricati'],\n 'clitoridean': ['clitoridean', 'directional'],\n 'clitoris': ['clitoris', 'coistril'],\n 'clive': ['clive', 'velic'],\n 'cloacinal': ['cloacinal', 'cocillana'],\n 'cloam': ['cloam', 'comal'],\n 'cloamen': ['aclemon', 'cloamen'],\n 'clobber': ['clobber', 'cobbler'],\n 'clochan': ['chalcon', 'clochan', 'conchal'],\n 'clocked': ['clocked', 'cockled'],\n 'clocker': ['clocker', 'cockler'],\n 'clod': ['clod', 'cold'],\n 'clodder': ['clodder', 'coddler'],\n 'cloggy': ['cloggy', 'coggly'],\n 'cloister': ['cloister', 'coistrel'],\n 'cloisteral': ['cloisteral', 'sclerotial'],\n 'cloit': ['cloit', 'lotic'],\n 'clonicotonic': ['clonicotonic', 'tonicoclonic'],\n 'clonus': ['clonus', 'consul'],\n 'clop': ['clop', 'colp'],\n 'close': ['close', 'socle'],\n 'closer': ['closer', 'cresol', 'escrol'],\n 'closter': ['closter', 'costrel'],\n 'closterium': ['closterium', 'sclerotium'],\n 'clot': ['clot', 'colt'],\n 'clothier': ['chlorite', 'clothier'],\n 'clotho': ['clotho', 'coolth'],\n 'clotter': ['clotter', 'crottle'],\n 'cloture': ['cloture', 'clouter'],\n 'cloud': ['cloud', 'could'],\n 'clouter': ['cloture', 'clouter'],\n 'clovene': ['cevenol', 'clovene'],\n 'clow': ['clow', 'cowl'],\n 'cloy': ['cloy', 'coly'],\n 'clue': ['clue', 'luce'],\n 'clumse': ['clumse', 'muscle'],\n 'clumsily': ['clumsily', 'scyllium'],\n 'clumsy': ['clumsy', 'muscly'],\n 'clunist': ['clunist', 'linctus'],\n 'clupea': ['alecup', 'clupea'],\n 'clupeine': ['clupeine', 'pulicene'],\n 'clusia': ['caulis', 'clusia', 'sicula'],\n 'clutch': ['clutch', 'cultch'],\n 'clutter': ['clutter', 'cuttler'],\n 'clyde': ['clyde', 'decyl'],\n 'clyer': ['ceryl', 'clyer'],\n 'clymenia': ['clymenia', 'mycelian'],\n 'clypeolate': ['clypeolate', 'ptyalocele'],\n 'clysis': ['clysis', 'lyssic'],\n 'clysmic': ['clysmic', 'cyclism'],\n 'cnemial': ['cnemial', 'melanic'],\n 'cnemis': ['cnemis', 'mnesic'],\n 'cneorum': ['cneorum', 'corneum'],\n 'cnicus': ['cnicus', 'succin'],\n 'cnida': ['canid', 'cnida', 'danic'],\n 'cnidaria': ['acridian', 'cnidaria'],\n 'cnidian': ['cnidian', 'indican'],\n 'cnidophore': ['cnidophore', 'princehood'],\n 'coach': ['chaco', 'choca', 'coach'],\n 'coacher': ['caroche', 'coacher', 'recoach'],\n 'coachlet': ['catechol', 'coachlet'],\n 'coactor': ['coactor', 'tarocco'],\n 'coadamite': ['acetamido', 'coadamite'],\n 'coadnate': ['anecdota', 'coadnate'],\n 'coadunite': ['coadunite', 'education', 'noctuidae'],\n 'coagent': ['coagent', 'cognate'],\n 'coagulate': ['catalogue', 'coagulate'],\n 'coaita': ['atocia', 'coaita'],\n 'coal': ['alco', 'coal', 'cola', 'loca'],\n 'coalbin': ['cibolan', 'coalbin'],\n 'coaler': ['carole', 'coaler', 'coelar', 'oracle', 'recoal'],\n 'coalite': ['aloetic', 'coalite'],\n 'coalition': ['coalition', 'lociation'],\n 'coalitionist': ['coalitionist', 'solicitation'],\n 'coalizer': ['calorize', 'coalizer'],\n 'coalpit': ['capitol', 'coalpit', 'optical', 'topical'],\n 'coaltitude': ['coaltitude', 'colatitude'],\n 'coaming': ['coaming', 'macigno'],\n 'coan': ['coan', 'onca'],\n 'coapt': ['capot', 'coapt'],\n 'coarb': ['carbo', 'carob', 'coarb', 'cobra'],\n 'coarrange': ['arrogance', 'coarrange'],\n 'coarse': ['acrose', 'coarse'],\n 'coarsen': ['carnose', 'coarsen', 'narcose'],\n 'coassert': ['castores', 'coassert'],\n 'coast': ['ascot', 'coast', 'costa', 'tacso', 'tasco'],\n 'coastal': ['coastal', 'salacot'],\n 'coaster': ['coaster', 'recoast'],\n 'coasting': ['agnostic', 'coasting'],\n 'coated': ['coated', 'decoat'],\n 'coater': ['coater', 'recoat'],\n 'coating': ['coating', 'cotinga'],\n 'coatroom': ['coatroom', 'morocota'],\n 'coax': ['coax', 'coxa'],\n 'cobbler': ['clobber', 'cobbler'],\n 'cobia': ['baioc', 'cabio', 'cobia'],\n 'cobiron': ['boronic', 'cobiron'],\n 'cobitis': ['biotics', 'cobitis'],\n 'cobra': ['carbo', 'carob', 'coarb', 'cobra'],\n 'cocaine': ['cocaine', 'oceanic'],\n 'cocainist': ['cocainist', 'siccation'],\n 'cocama': ['cocama', 'macaco'],\n 'cocamine': ['cocamine', 'comacine'],\n 'cochleare': ['archocele', 'cochleare'],\n 'cochleitis': ['cochleitis', 'ochlesitic'],\n 'cocillana': ['cloacinal', 'cocillana'],\n 'cocker': ['cocker', 'recock'],\n 'cockily': ['cockily', 'colicky'],\n 'cockled': ['clocked', 'cockled'],\n 'cockler': ['clocker', 'cockler'],\n 'cockup': ['cockup', 'upcock'],\n 'cocreditor': ['cocreditor', 'codirector'],\n 'cocurrent': ['cocurrent', 'occurrent', 'uncorrect'],\n 'cod': ['cod', 'doc'],\n 'codamine': ['codamine', 'comedian', 'daemonic', 'demoniac'],\n 'codder': ['codder', 'corded'],\n 'coddler': ['clodder', 'coddler'],\n 'code': ['code', 'coed'],\n 'codebtor': ['bedoctor', 'codebtor'],\n 'coder': ['coder', 'cored', 'credo'],\n 'coderive': ['coderive', 'divorcee'],\n 'codicil': ['codicil', 'dicolic'],\n 'codille': ['celloid', 'codille', 'collide', 'collied'],\n 'codirector': ['cocreditor', 'codirector'],\n 'codium': ['codium', 'mucoid'],\n 'coed': ['code', 'coed'],\n 'coeditorship': ['cheiropodist', 'coeditorship'],\n 'coelar': ['carole', 'coaler', 'coelar', 'oracle', 'recoal'],\n 'coelata': ['alcoate', 'coelata'],\n 'coelection': ['coelection', 'entocoelic'],\n 'coelia': ['aeolic', 'coelia'],\n 'coelin': ['clione', 'coelin', 'encoil', 'enolic'],\n 'coeline': ['cineole', 'coeline'],\n 'coelogyne': ['coelogyne', 'gonyocele'],\n 'coenactor': ['coenactor', 'croconate'],\n 'coenobiar': ['borocaine', 'coenobiar'],\n 'coenurus': ['cernuous', 'coenurus'],\n 'coestate': ['coestate', 'ecostate'],\n 'coeternal': ['antrocele', 'coeternal', 'tolerance'],\n 'coeval': ['alcove', 'coeval', 'volcae'],\n 'cofaster': ['cofaster', 'forecast'],\n 'coferment': ['coferment', 'forcement'],\n 'cogeneric': ['cogeneric', 'concierge'],\n 'coggly': ['cloggy', 'coggly'],\n 'cognate': ['coagent', 'cognate'],\n 'cognatical': ['cognatical', 'galactonic'],\n 'cognation': ['cognation', 'contagion'],\n 'cognition': ['cognition', 'incognito'],\n 'cognominal': ['cognominal', 'gnomonical'],\n 'cogon': ['cogon', 'congo'],\n 'cograil': ['argolic', 'cograil'],\n 'coheir': ['coheir', 'heroic'],\n 'cohen': ['cohen', 'enoch'],\n 'cohere': ['choree', 'cohere', 'echoer'],\n 'cohol': ['cholo', 'cohol'],\n 'cohune': ['cohune', 'hounce'],\n 'coif': ['coif', 'fico', 'foci'],\n 'coign': ['coign', 'incog'],\n 'coil': ['clio', 'coil', 'coli', 'loci'],\n 'coiled': ['cleoid', 'coiled', 'docile'],\n 'coiler': ['coiler', 'recoil'],\n 'coin': ['cion', 'coin', 'icon'],\n 'coinclude': ['coinclude', 'undecolic'],\n 'coiner': ['cerion', 'coiner', 'neroic', 'orcein', 'recoin'],\n 'coinfer': ['coinfer', 'conifer'],\n 'coinherence': ['coinherence', 'incoherence'],\n 'coinherent': ['coinherent', 'incoherent'],\n 'coinitial': ['ciliation', 'coinitial'],\n 'coinmate': ['coinmate', 'maconite'],\n 'coinspire': ['coinspire', 'precision'],\n 'coinsure': ['coinsure', 'corineus', 'cusinero'],\n 'cointer': ['cerotin', 'cointer', 'cotrine', 'cretion', 'noticer', 'rection'],\n 'cointreau': ['cautioner', 'cointreau'],\n 'coistrel': ['cloister', 'coistrel'],\n 'coistril': ['clitoris', 'coistril'],\n 'coix': ['cixo', 'coix'],\n 'coker': ['coker', 'corke', 'korec'],\n 'coky': ['coky', 'yock'],\n 'cola': ['alco', 'coal', 'cola', 'loca'],\n 'colalgia': ['alogical', 'colalgia'],\n 'colan': ['colan', 'conal'],\n 'colane': ['canelo', 'colane'],\n 'colarin': ['carolin', 'clarion', 'colarin', 'locrian'],\n 'colate': ['acetol', 'colate', 'locate'],\n 'colation': ['colation', 'coontail', 'location'],\n 'colatitude': ['coaltitude', 'colatitude'],\n 'colchian': ['cholanic', 'colchian'],\n 'colcine': ['colcine', 'concile', 'conicle'],\n 'colcothar': ['colcothar', 'ochlocrat'],\n 'cold': ['clod', 'cold'],\n 'colder': ['cedrol', 'colder', 'cordel'],\n 'colectomy': ['colectomy', 'cyclotome'],\n 'colemanite': ['colemanite', 'melaconite'],\n 'coleur': ['coleur', 'colure'],\n 'coleus': ['coleus', 'oscule'],\n 'coli': ['clio', 'coil', 'coli', 'loci'],\n 'colias': ['colias', 'scolia', 'social'],\n 'colicky': ['cockily', 'colicky'],\n 'colima': ['colima', 'olamic'],\n 'colin': ['colin', 'nicol'],\n 'colinear': ['acrolein',\n              'arecolin',\n              'caroline',\n              'colinear',\n              'cornelia',\n              'creolian',\n              'lonicera'],\n 'colitis': ['colitis', 'solicit'],\n 'colk': ['colk', 'lock'],\n 'colla': ['callo', 'colla', 'local'],\n 'collage': ['alcogel', 'collage'],\n 'collare': ['collare', 'corella', 'ocellar'],\n 'collaret': ['collaret', 'corallet'],\n 'collarino': ['collarino', 'coronilla'],\n 'collatee': ['collatee', 'ocellate'],\n 'collationer': ['collationer', 'recollation'],\n 'collectioner': ['collectioner', 'recollection'],\n 'collegial': ['collegial', 'gallicole'],\n 'collegian': ['allogenic', 'collegian'],\n 'colleri': ['cerillo', 'colleri', 'collier'],\n 'colleter': ['colleter', 'coteller', 'coterell', 'recollet'],\n 'colletia': ['colletia', 'teocalli'],\n 'collide': ['celloid', 'codille', 'collide', 'collied'],\n 'collidine': ['celloidin', 'collidine', 'decillion'],\n 'collie': ['collie', 'ocelli'],\n 'collied': ['celloid', 'codille', 'collide', 'collied'],\n 'collier': ['cerillo', 'colleri', 'collier'],\n 'colligate': ['colligate', 'cotillage'],\n 'colline': ['colline', 'lioncel'],\n 'collinear': ['collinear', 'coralline'],\n 'collinsia': ['collinsia', 'isoclinal'],\n 'collotypy': ['collotypy', 'polycotyl'],\n 'collusive': ['collusive', 'colluvies'],\n 'colluvies': ['collusive', 'colluvies'],\n 'collyba': ['callboy', 'collyba'],\n 'colmar': ['clamor', 'colmar'],\n 'colobus': ['colobus', 'subcool'],\n 'coloenteritis': ['coloenteritis', 'enterocolitis'],\n 'colombian': ['colombian', 'colombina'],\n 'colombina': ['colombian', 'colombina'],\n 'colonalgia': ['colonalgia', 'naological'],\n 'colonate': ['colonate', 'ecotonal'],\n 'colonialist': ['colonialist', 'oscillation'],\n 'coloproctitis': ['coloproctitis', 'proctocolitis'],\n 'color': ['color', 'corol', 'crool'],\n 'colored': ['colored', 'croodle', 'decolor'],\n 'colorer': ['colorer', 'recolor'],\n 'colorin': ['colorin', 'orcinol'],\n 'colorman': ['colorman', 'conormal'],\n 'colp': ['clop', 'colp'],\n 'colpeurynter': ['colpeurynter', 'counterreply'],\n 'colpitis': ['colpitis', 'politics', 'psilotic'],\n 'colporrhagia': ['colporrhagia', 'orographical'],\n 'colt': ['clot', 'colt'],\n 'colter': ['colter', 'lector', 'torcel'],\n 'coltskin': ['coltskin', 'linstock'],\n 'colubrina': ['binocular', 'caliburno', 'colubrina'],\n 'columbo': ['columbo', 'coulomb'],\n 'columbotitanate': ['columbotitanate', 'titanocolumbate'],\n 'columnated': ['columnated', 'documental'],\n 'columned': ['columned', 'uncledom'],\n 'colunar': ['colunar', 'cornual', 'courlan'],\n 'colure': ['coleur', 'colure'],\n 'colutea': ['caulote', 'colutea', 'oculate'],\n 'coly': ['cloy', 'coly'],\n 'coma': ['coma', 'maco'],\n 'comacine': ['cocamine', 'comacine'],\n 'comal': ['cloam', 'comal'],\n 'coman': ['coman', 'macon', 'manoc'],\n 'comart': ['carmot', 'comart'],\n 'comate': ['comate', 'metoac', 'tecoma'],\n 'combat': ['combat', 'tombac'],\n 'comber': ['comber', 'recomb'],\n 'combinedly': ['combinedly', 'molybdenic'],\n 'comedial': ['cameloid', 'comedial', 'melodica'],\n 'comedian': ['codamine', 'comedian', 'daemonic', 'demoniac'],\n 'comediant': ['comediant', 'metaconid'],\n 'comedist': ['comedist', 'demotics', 'docetism', 'domestic'],\n 'comedown': ['comedown', 'downcome'],\n 'comeliness': ['comeliness', 'incomeless'],\n 'comeling': ['comeling', 'comingle'],\n 'comenic': ['comenic', 'encomic', 'meconic'],\n 'comer': ['comer', 'crome'],\n 'comforter': ['comforter', 'recomfort'],\n 'comid': ['comid', 'domic'],\n 'coming': ['coming', 'gnomic'],\n 'comingle': ['comeling', 'comingle'],\n 'comintern': ['comintern', 'nonmetric'],\n 'comitia': ['caimito', 'comitia'],\n 'comitragedy': ['comitragedy', 'tragicomedy'],\n 'comity': ['comity', 'myotic'],\n 'commander': ['commander', 'recommand'],\n 'commation': ['commation', 'monatomic'],\n 'commelina': ['commelina', 'melomanic'],\n 'commender': ['commender', 'recommend'],\n 'commentarial': ['commentarial', 'manometrical'],\n 'commination': ['commination', 'monamniotic'],\n 'commissioner': ['commissioner', 'recommission'],\n 'commonality': ['ammonolytic', 'commonality'],\n 'commorient': ['commorient', 'metronomic', 'monometric'],\n 'compact': ['accompt', 'compact'],\n 'compacter': ['compacter', 'recompact'],\n 'company': ['company', 'copyman'],\n 'compare': ['compare', 'compear'],\n 'comparition': ['comparition', 'proamniotic'],\n 'compasser': ['compasser', 'recompass'],\n 'compear': ['compare', 'compear'],\n 'compenetrate': ['compenetrate', 'contemperate'],\n 'competitioner': ['competitioner', 'recompetition'],\n 'compile': ['compile', 'polemic'],\n 'compiler': ['compiler', 'complier'],\n 'complainer': ['complainer', 'procnemial', 'recomplain'],\n 'complaint': ['complaint', 'compliant'],\n 'complanate': ['complanate', 'placentoma'],\n 'compliant': ['complaint', 'compliant'],\n 'complier': ['compiler', 'complier'],\n 'compounder': ['compounder', 'recompound'],\n 'comprehender': ['comprehender', 'recomprehend'],\n 'compressed': ['compressed', 'decompress'],\n 'comprise': ['comprise', 'perosmic'],\n 'compromission': ['compromission', 'procommission'],\n 'conal': ['colan', 'conal'],\n 'conamed': ['conamed', 'macedon'],\n 'conant': ['cannot', 'canton', 'conant', 'nonact'],\n 'conarial': ['carolina', 'conarial'],\n 'conarium': ['conarium', 'coumarin'],\n 'conative': ['conative', 'invocate'],\n 'concealer': ['concealer', 'reconceal'],\n 'concent': ['concent', 'connect'],\n 'concenter': ['concenter', 'reconnect'],\n 'concentive': ['concentive', 'connective'],\n 'concertize': ['concertize', 'concretize'],\n 'concessioner': ['concessioner', 'reconcession'],\n 'concha': ['chanco', 'concha'],\n 'conchal': ['chalcon', 'clochan', 'conchal'],\n 'conchinine': ['cinchonine', 'conchinine'],\n 'concierge': ['cogeneric', 'concierge'],\n 'concile': ['colcine', 'concile', 'conicle'],\n 'concocter': ['concocter', 'reconcoct'],\n 'concreter': ['concreter', 'reconcert'],\n 'concretize': ['concertize', 'concretize'],\n 'concretor': ['concretor', 'conrector'],\n 'condalia': ['cladonia', 'condalia', 'diaconal'],\n 'condemner': ['condemner', 'recondemn'],\n 'condite': ['condite', 'ctenoid'],\n 'conditioner': ['conditioner', 'recondition'],\n 'condor': ['condor', 'cordon'],\n 'conduit': ['conduit', 'duction', 'noctuid'],\n 'condylomatous': ['condylomatous', 'monodactylous'],\n 'cone': ['cone', 'once'],\n 'conepate': ['conepate', 'tepecano'],\n 'coner': ['coner', 'crone', 'recon'],\n 'cones': ['cones', 'scone'],\n 'confesser': ['confesser', 'reconfess'],\n 'configurationism': ['configurationism', 'misconfiguration'],\n 'confirmer': ['confirmer', 'reconfirm'],\n 'confirmor': ['confirmor', 'corniform'],\n 'conflate': ['conflate', 'falconet'],\n 'conformer': ['conformer', 'reconform'],\n 'confounder': ['confounder', 'reconfound'],\n 'confrere': ['confrere', 'enforcer', 'reconfer'],\n 'confronter': ['confronter', 'reconfront'],\n 'congealer': ['congealer', 'recongeal'],\n 'congeneric': ['congeneric', 'necrogenic'],\n 'congenerous': ['congenerous', 'necrogenous'],\n 'congenial': ['congenial', 'goclenian'],\n 'congo': ['cogon', 'congo'],\n 'congreet': ['congreet', 'coregent'],\n 'congreve': ['congreve', 'converge'],\n 'conical': ['conical', 'laconic'],\n 'conicine': ['ciconine', 'conicine'],\n 'conicle': ['colcine', 'concile', 'conicle'],\n 'conicoid': ['conicoid', 'conoidic'],\n 'conidium': ['conidium', 'mucinoid', 'oncidium'],\n 'conifer': ['coinfer', 'conifer'],\n 'conima': ['camion', 'conima', 'manioc', 'monica'],\n 'conin': ['conin', 'nonic', 'oncin'],\n 'conine': ['conine', 'connie', 'ennoic'],\n 'conjoiner': ['conjoiner', 'reconjoin'],\n 'conk': ['conk', 'nock'],\n 'conker': ['conker', 'reckon'],\n 'conkers': ['conkers', 'snocker'],\n 'connarite': ['connarite', 'container', 'cotarnine', 'crenation', 'narcotine'],\n 'connatal': ['cantonal', 'connatal'],\n 'connation': ['connation', 'nonaction'],\n 'connature': ['antecornu', 'connature'],\n 'connect': ['concent', 'connect'],\n 'connectival': ['connectival', 'conventical'],\n 'connective': ['concentive', 'connective'],\n 'connie': ['conine', 'connie', 'ennoic'],\n 'connoissance': ['connoissance', 'nonaccession'],\n 'conoidal': ['conoidal', 'dolciano'],\n 'conoidic': ['conicoid', 'conoidic'],\n 'conor': ['conor', 'croon', 'ronco'],\n 'conormal': ['colorman', 'conormal'],\n 'conoy': ['conoy', 'coony'],\n 'conrad': ['candor', 'cardon', 'conrad'],\n 'conrector': ['concretor', 'conrector'],\n 'conred': ['cedron', 'conred'],\n 'conringia': ['conringia', 'inorganic'],\n 'consenter': ['consenter', 'nonsecret', 'reconsent'],\n 'conservable': ['conservable', 'conversable'],\n 'conservancy': ['conservancy', 'conversancy'],\n 'conservant': ['conservant', 'conversant'],\n 'conservation': ['conservation', 'conversation'],\n 'conservational': ['conservational', 'conversational'],\n 'conservationist': ['conservationist', 'conversationist'],\n 'conservative': ['conservative', 'conversative'],\n 'conserve': ['conserve', 'converse'],\n 'conserver': ['conserver', 'converser'],\n 'considerate': ['considerate', 'desecration'],\n 'considerative': ['considerative', 'devisceration'],\n 'considered': ['considered', 'deconsider'],\n 'considerer': ['considerer', 'reconsider'],\n 'consigner': ['consigner', 'reconsign'],\n 'conspiracy': ['conspiracy', 'snipocracy'],\n 'conspire': ['conspire', 'incorpse'],\n 'constate': ['catstone', 'constate'],\n 'constitutionalism': ['constitutionalism', 'misconstitutional'],\n 'constitutioner': ['constitutioner', 'reconstitution'],\n 'constrain': ['constrain', 'transonic'],\n 'constructer': ['constructer', 'reconstruct'],\n 'constructionism': ['constructionism', 'misconstruction'],\n 'consul': ['clonus', 'consul'],\n 'consulage': ['consulage', 'glucosane'],\n 'consulary': ['consulary', 'cynosural'],\n 'consulter': ['consulter', 'reconsult'],\n 'consume': ['consume', 'muscone'],\n 'consumer': ['consumer', 'mucrones'],\n 'consute': ['consute', 'contuse'],\n 'contagion': ['cognation', 'contagion'],\n 'contain': ['actinon', 'cantion', 'contain'],\n 'container': ['connarite', 'container', 'cotarnine', 'crenation', 'narcotine'],\n 'conte': ['cento', 'conte', 'tecon'],\n 'contemperate': ['compenetrate', 'contemperate'],\n 'contender': ['contender', 'recontend'],\n 'conter': ['conter', 'cornet', 'cronet', 'roncet'],\n 'conterminal': ['centinormal', 'conterminal', 'nonmetrical'],\n 'contester': ['contester', 'recontest'],\n 'continual': ['continual', 'inoculant', 'unctional'],\n 'continued': ['continued', 'unnoticed'],\n 'continuer': ['centurion', 'continuer', 'cornutine'],\n 'contise': ['contise', 'noetics', 'section'],\n 'contline': ['contline', 'nonlicet'],\n 'contortae': ['contortae', 'crotonate'],\n 'contour': ['contour', 'cornuto', 'countor', 'crouton'],\n 'contra': ['cantor', 'carton', 'contra'],\n 'contracter': ['contracter', 'correctant', 'recontract'],\n 'contrapose': ['antroscope', 'contrapose'],\n 'contravene': ['contravene', 'covenanter'],\n 'contrite': ['contrite', 'tetronic'],\n 'contrive': ['contrive', 'invector'],\n 'conturbation': ['conturbation', 'obtruncation'],\n 'contuse': ['consute', 'contuse'],\n 'conure': ['conure', 'rounce', 'uncore'],\n 'conventical': ['connectival', 'conventical'],\n 'conventioner': ['conventioner', 'reconvention'],\n 'converge': ['congreve', 'converge'],\n 'conversable': ['conservable', 'conversable'],\n 'conversancy': ['conservancy', 'conversancy'],\n 'conversant': ['conservant', 'conversant'],\n 'conversation': ['conservation', 'conversation'],\n 'conversational': ['conservational', 'conversational'],\n 'conversationist': ['conservationist', 'conversationist'],\n 'conversative': ['conservative', 'conversative'],\n 'converse': ['conserve', 'converse'],\n 'converser': ['conserver', 'converser'],\n 'converter': ['converter', 'reconvert'],\n 'convertise': ['convertise', 'ventricose'],\n 'conveyer': ['conveyer', 'reconvey'],\n 'conycatcher': ['conycatcher', 'technocracy'],\n 'conyrine': ['conyrine', 'corynine'],\n 'cooker': ['cooker', 'recook'],\n 'cool': ['cool', 'loco'],\n 'coolant': ['coolant', 'octonal'],\n 'cooler': ['cooler', 'recool'],\n 'coolingly': ['clinology', 'coolingly'],\n 'coolth': ['clotho', 'coolth'],\n 'coolweed': ['coolweed', 'locoweed'],\n 'cooly': ['cooly', 'coyol'],\n 'coonroot': ['coonroot', 'octoroon'],\n 'coontail': ['colation', 'coontail', 'location'],\n 'coony': ['conoy', 'coony'],\n 'coop': ['coop', 'poco'],\n 'coos': ['coos', 'soco'],\n 'coost': ['coost', 'scoot'],\n 'coot': ['coot', 'coto', 'toco'],\n 'copa': ['copa', 'paco'],\n 'copable': ['copable', 'placebo'],\n 'copalite': ['copalite', 'poetical'],\n 'coparent': ['coparent', 'portance'],\n 'copart': ['captor', 'copart'],\n 'copartner': ['copartner', 'procreant'],\n 'copatain': ['copatain', 'pacation'],\n 'copehan': ['copehan', 'panoche', 'phocean'],\n 'copen': ['copen', 'ponce'],\n 'coperta': ['coperta', 'pectora', 'porcate'],\n 'copied': ['copied', 'epodic'],\n 'copis': ['copis', 'pisco'],\n 'copist': ['copist', 'coptis', 'optics', 'postic'],\n 'copita': ['atopic', 'capito', 'copita'],\n 'coplanar': ['coplanar', 'procanal'],\n 'copleased': ['copleased', 'escaloped'],\n 'copperer': ['copperer', 'recopper'],\n 'coppery': ['coppery', 'precopy'],\n 'copr': ['copr', 'corp', 'crop'],\n 'coprinae': ['caponier', 'coprinae', 'procaine'],\n 'coprinus': ['coprinus', 'poncirus'],\n 'coprolagnia': ['carpogonial', 'coprolagnia'],\n 'coprophagist': ['coprophagist', 'topographics'],\n 'coprose': ['coprose', 'scooper'],\n 'copse': ['copse', 'pecos', 'scope'],\n 'copter': ['ceptor', 'copter'],\n 'coptis': ['copist', 'coptis', 'optics', 'postic'],\n 'copula': ['copula', 'cupola'],\n 'copular': ['copular', 'croupal', 'cupolar', 'porcula'],\n 'copulate': ['copulate', 'outplace'],\n 'copulation': ['copulation', 'poculation'],\n 'copus': ['copus', 'scoup'],\n 'copyman': ['company', 'copyman'],\n 'copyrighter': ['copyrighter', 'recopyright'],\n 'coque': ['coque', 'ocque'],\n 'coquitlam': ['coquitlam', 'quamoclit'],\n 'cor': ['cor', 'cro', 'orc', 'roc'],\n 'cora': ['acor', 'caro', 'cora', 'orca'],\n 'coraciae': ['coraciae', 'icacorea'],\n 'coracial': ['caracoli', 'coracial'],\n 'coracias': ['coracias', 'rascacio'],\n 'coradicate': ['coradicate', 'ectocardia'],\n 'corah': ['achor', 'chora', 'corah', 'orach', 'roach'],\n 'coraise': ['coraise', 'scoriae'],\n 'coral': ['alcor', 'calor', 'carlo', 'carol', 'claro', 'coral'],\n 'coraled': ['acerdol', 'coraled'],\n 'coralist': ['calorist', 'coralist'],\n 'corallet': ['collaret', 'corallet'],\n 'corallian': ['corallian', 'corallina'],\n 'corallina': ['corallian', 'corallina'],\n 'coralline': ['collinear', 'coralline'],\n 'corallite': ['corallite', 'lectorial'],\n 'coram': ['carom', 'coram', 'macro', 'marco'],\n 'coranto': ['cartoon', 'coranto'],\n 'corban': ['bracon', 'carbon', 'corban'],\n 'corbeil': ['bricole', 'corbeil', 'orbicle'],\n 'cordaitean': ['arctoidean', 'carotidean', 'cordaitean', 'dinocerata'],\n 'cordate': ['cordate', 'decator', 'redcoat'],\n 'corded': ['codder', 'corded'],\n 'cordel': ['cedrol', 'colder', 'cordel'],\n 'corder': ['corder', 'record'],\n 'cordia': ['caroid', 'cordia'],\n 'cordial': ['cordial', 'dorical'],\n 'cordicole': ['cordicole', 'crocodile'],\n 'cordierite': ['cordierite', 'directoire'],\n 'cordoba': ['bocardo', 'cordoba'],\n 'cordon': ['condor', 'cordon'],\n 'core': ['cero', 'core'],\n 'cored': ['coder', 'cored', 'credo'],\n 'coregent': ['congreet', 'coregent'],\n 'coreless': ['coreless', 'sclerose'],\n 'corella': ['collare', 'corella', 'ocellar'],\n 'corema': ['ceroma', 'corema'],\n 'coreplastic': ['ceroplastic', 'cleistocarp', 'coreplastic'],\n 'coreplasty': ['ceroplasty', 'coreplasty'],\n 'corer': ['corer', 'crore'],\n 'coresidual': ['coresidual', 'radiculose'],\n 'coresign': ['coresign', 'cosigner'],\n 'corge': ['corge', 'gorce'],\n 'corgi': ['corgi', 'goric', 'orgic'],\n 'corial': ['caroli', 'corial', 'lorica'],\n 'coriamyrtin': ['coriamyrtin', 'criminatory'],\n 'corin': ['corin', 'noric', 'orcin'],\n 'corindon': ['corindon', 'nodicorn'],\n 'corineus': ['coinsure', 'corineus', 'cusinero'],\n 'corinna': ['corinna', 'cronian'],\n 'corinne': ['corinne', 'cornein', 'neronic'],\n 'cork': ['cork', 'rock'],\n 'corke': ['coker', 'corke', 'korec'],\n 'corked': ['corked', 'docker', 'redock'],\n 'corker': ['corker', 'recork', 'rocker'],\n 'corkiness': ['corkiness', 'rockiness'],\n 'corking': ['corking', 'rocking'],\n 'corkish': ['corkish', 'rockish'],\n 'corkwood': ['corkwood', 'rockwood', 'woodrock'],\n 'corky': ['corky', 'rocky'],\n 'corm': ['corm', 'crom'],\n 'cormophyte': ['chromotype', 'cormophyte', 'ectomorphy'],\n 'cormophytic': ['chromotypic', 'cormophytic', 'mycotrophic'],\n 'cornage': ['acrogen', 'cornage'],\n 'cornea': ['carone', 'cornea'],\n 'corneal': ['carneol', 'corneal'],\n 'cornein': ['corinne', 'cornein', 'neronic'],\n 'cornelia': ['acrolein',\n              'arecolin',\n              'caroline',\n              'colinear',\n              'cornelia',\n              'creolian',\n              'lonicera'],\n 'cornelius': ['cornelius', 'inclosure', 'reclusion'],\n 'corneocalcareous': ['calcareocorneous', 'corneocalcareous'],\n 'cornet': ['conter', 'cornet', 'cronet', 'roncet'],\n 'corneum': ['cneorum', 'corneum'],\n 'cornic': ['cornic', 'crocin'],\n 'cornice': ['cornice', 'crocein'],\n 'corniform': ['confirmor', 'corniform'],\n 'cornin': ['cornin', 'rincon'],\n 'cornish': ['cornish', 'cronish', 'sorchin'],\n 'cornual': ['colunar', 'cornual', 'courlan'],\n 'cornuate': ['cornuate', 'courante', 'cuneator', 'outrance'],\n 'cornuated': ['cornuated', 'undercoat'],\n 'cornucopiate': ['cornucopiate', 'reoccupation'],\n 'cornulites': ['cornulites', 'uncloister'],\n 'cornute': ['cornute', 'counter', 'recount', 'trounce'],\n 'cornutine': ['centurion', 'continuer', 'cornutine'],\n 'cornuto': ['contour', 'cornuto', 'countor', 'crouton'],\n 'corny': ['corny', 'crony'],\n 'corol': ['color', 'corol', 'crool'],\n 'corollated': ['corollated', 'decollator'],\n 'corona': ['caroon', 'corona', 'racoon'],\n 'coronad': ['cardoon', 'coronad'],\n 'coronadite': ['carotenoid', 'coronadite', 'decoration'],\n 'coronal': ['coronal', 'locarno'],\n 'coronaled': ['canoodler', 'coronaled'],\n 'coronate': ['coronate', 'octonare', 'otocrane'],\n 'coronated': ['coronated', 'creodonta'],\n 'coroner': ['coroner', 'crooner', 'recroon'],\n 'coronilla': ['collarino', 'coronilla'],\n 'corp': ['copr', 'corp', 'crop'],\n 'corporealist': ['corporealist', 'prosectorial'],\n 'corradiate': ['corradiate', 'cortaderia', 'eradicator'],\n 'correal': ['caroler', 'correal'],\n 'correctant': ['contracter', 'correctant', 'recontract'],\n 'correctioner': ['correctioner', 'recorrection'],\n 'corrente': ['corrente', 'terceron'],\n 'correption': ['correption', 'porrection'],\n 'corrodentia': ['corrodentia', 'recordation'],\n 'corrupter': ['corrupter', 'recorrupt'],\n 'corsage': ['corsage', 'socager'],\n 'corsaint': ['cantoris', 'castorin', 'corsaint'],\n 'corse': ['corse', 'score'],\n 'corselet': ['corselet', 'sclerote', 'selector'],\n 'corset': ['corset', 'cortes', 'coster', 'escort', 'scoter', 'sector'],\n 'corta': ['actor', 'corta', 'croat', 'rocta', 'taroc', 'troca'],\n 'cortaderia': ['corradiate', 'cortaderia', 'eradicator'],\n 'cortes': ['corset', 'cortes', 'coster', 'escort', 'scoter', 'sector'],\n 'cortical': ['cortical', 'crotalic'],\n 'cortices': ['cortices', 'cresotic'],\n 'corticose': ['corticose', 'creosotic'],\n 'cortin': ['citron', 'cortin', 'crotin'],\n 'cortina': ['anticor', 'carotin', 'cortina', 'ontaric'],\n 'cortinate': ['carnotite', 'cortinate'],\n 'cortisone': ['certosino', 'cortisone', 'socotrine'],\n 'corton': ['corton', 'croton'],\n 'corvinae': ['corvinae', 'veronica'],\n 'cory': ['cory', 'croy'],\n 'corycavidine': ['cervicodynia', 'corycavidine'],\n 'corydon': ['corydon', 'croydon'],\n 'corynine': ['conyrine', 'corynine'],\n 'corypha': ['charpoy', 'corypha'],\n 'coryphene': ['coryphene', 'hypercone'],\n 'cos': ['cos', 'osc', 'soc'],\n 'cosalite': ['cosalite', 'societal'],\n 'coset': ['coset', 'estoc', 'scote'],\n 'cosh': ['cosh', 'scho'],\n 'cosharer': ['cosharer', 'horsecar'],\n 'cosigner': ['coresign', 'cosigner'],\n 'cosine': ['cosine', 'oscine'],\n 'cosmati': ['atomics', 'catoism', 'cosmati', 'osmatic', 'somatic'],\n 'cosmetical': ['cacomistle', 'cosmetical'],\n 'cosmetician': ['cosmetician', 'encomiastic'],\n 'cosmist': ['cosmist', 'scotism'],\n 'cossack': ['cassock', 'cossack'],\n 'cosse': ['cosse', 'secos'],\n 'cost': ['cost', 'scot'],\n 'costa': ['ascot', 'coast', 'costa', 'tacso', 'tasco'],\n 'costar': ['arctos', 'castor', 'costar', 'scrota'],\n 'costean': ['costean', 'tsoneca'],\n 'coster': ['corset', 'cortes', 'coster', 'escort', 'scoter', 'sector'],\n 'costing': ['costing', 'gnostic'],\n 'costispinal': ['costispinal', 'pansciolist'],\n 'costmary': ['arctomys', 'costmary', 'mascotry'],\n 'costochondral': ['chondrocostal', 'costochondral'],\n 'costosternal': ['costosternal', 'sternocostal'],\n 'costovertebral': ['costovertebral', 'vertebrocostal'],\n 'costrel': ['closter', 'costrel'],\n 'costula': ['costula', 'locusta', 'talcous'],\n 'costumer': ['costumer', 'customer'],\n 'cosurety': ['cosurety', 'courtesy'],\n 'cosustain': ['cosustain', 'scusation'],\n 'cotarius': ['cotarius', 'octarius', 'suctoria'],\n 'cotarnine': ['connarite', 'container', 'cotarnine', 'crenation', 'narcotine'],\n 'cote': ['cote', 'teco'],\n 'coteline': ['coteline', 'election'],\n 'coteller': ['colleter', 'coteller', 'coterell', 'recollet'],\n 'coterell': ['colleter', 'coteller', 'coterell', 'recollet'],\n 'cotesian': ['canoeist', 'cotesian'],\n 'coth': ['coth', 'ocht'],\n 'cotidal': ['cotidal', 'lactoid', 'talcoid'],\n 'cotillage': ['colligate', 'cotillage'],\n 'cotillion': ['cotillion', 'octillion'],\n 'cotinga': ['coating', 'cotinga'],\n 'cotinus': ['cotinus', 'suction', 'unstoic'],\n 'cotise': ['cotise', 'oecist'],\n 'coto': ['coot', 'coto', 'toco'],\n 'cotranspire': ['cotranspire', 'pornerastic'],\n 'cotrine': ['cerotin', 'cointer', 'cotrine', 'cretion', 'noticer', 'rection'],\n 'cotripper': ['cotripper', 'periproct'],\n 'cotte': ['cotte', 'octet'],\n 'cotylosaur': ['cotylosaur', 'osculatory'],\n 'cotype': ['cotype', 'ectopy'],\n 'coude': ['coude', 'douce'],\n 'could': ['cloud', 'could'],\n 'coulisse': ['coulisse', 'leucosis', 'ossicule'],\n 'coulomb': ['columbo', 'coulomb'],\n 'coumalic': ['caulomic', 'coumalic'],\n 'coumarin': ['conarium', 'coumarin'],\n 'counsel': ['counsel', 'unclose'],\n 'counter': ['cornute', 'counter', 'recount', 'trounce'],\n 'counteracter': ['counteracter', 'countercarte'],\n 'countercarte': ['counteracter', 'countercarte'],\n 'countercharm': ['countercharm', 'countermarch'],\n 'counterguard': ['counterguard', 'uncorrugated'],\n 'counteridea': ['counteridea', 'decurionate'],\n 'countermarch': ['countercharm', 'countermarch'],\n 'counterpaled': ['counterpaled', 'counterplead', 'unpercolated'],\n 'counterpaly': ['counterpaly', 'counterplay'],\n 'counterplay': ['counterpaly', 'counterplay'],\n 'counterplead': ['counterpaled', 'counterplead', 'unpercolated'],\n 'counterreply': ['colpeurynter', 'counterreply'],\n 'countersale': ['countersale', 'counterseal'],\n 'countersea': ['countersea', 'nectareous'],\n 'counterseal': ['countersale', 'counterseal'],\n 'countershade': ['countershade', 'decantherous'],\n 'counterstand': ['counterstand', 'uncontrasted'],\n 'countertail': ['countertail', 'reluctation'],\n 'countertrades': ['countertrades', 'unstercorated'],\n 'countervail': ['countervail', 'involucrate'],\n 'countervair': ['countervair', 'overcurtain', 'recurvation'],\n 'countor': ['contour', 'cornuto', 'countor', 'crouton'],\n 'coupe': ['coupe', 'pouce'],\n 'couper': ['couper', 'croupe', 'poucer', 'recoup'],\n 'couplement': ['couplement', 'uncomplete'],\n 'couplet': ['couplet', 'octuple'],\n 'coupon': ['coupon', 'uncoop'],\n 'couponed': ['couponed', 'uncooped'],\n 'courante': ['cornuate', 'courante', 'cuneator', 'outrance'],\n 'courbaril': ['courbaril', 'orbicular'],\n 'courlan': ['colunar', 'cornual', 'courlan'],\n 'cours': ['cours', 'scour'],\n 'course': ['cerous', 'course', 'crouse', 'source'],\n 'coursed': ['coursed', 'scoured'],\n 'courser': ['courser', 'scourer'],\n 'coursing': ['coursing', 'scouring'],\n 'court': ['court', 'crout', 'turco'],\n 'courtesan': ['acentrous', 'courtesan', 'nectarous'],\n 'courtesy': ['cosurety', 'courtesy'],\n 'courtier': ['courtier', 'outcrier'],\n 'courtiership': ['courtiership', 'peritrichous'],\n 'courtin': ['courtin', 'ruction'],\n 'courtman': ['courtman', 'turcoman'],\n 'couter': ['couter', 'croute'],\n 'couth': ['couth', 'thuoc', 'touch'],\n 'couthily': ['couthily', 'touchily'],\n 'couthiness': ['couthiness', 'touchiness'],\n 'couthless': ['couthless', 'touchless'],\n 'coutil': ['coutil', 'toluic'],\n 'covenanter': ['contravene', 'covenanter'],\n 'coverer': ['coverer', 'recover'],\n 'coversine': ['coversine', 'vernicose'],\n 'covert': ['covert', 'vector'],\n 'covisit': ['covisit', 'ovistic'],\n 'cowardy': ['cowardy', 'cowyard'],\n 'cowherd': ['chowder', 'cowherd'],\n 'cowl': ['clow', 'cowl'],\n 'cowyard': ['cowardy', 'cowyard'],\n 'coxa': ['coax', 'coxa'],\n 'coxite': ['coxite', 'exotic'],\n 'coyness': ['coyness', 'sycones'],\n 'coyol': ['cooly', 'coyol'],\n 'coyote': ['coyote', 'oocyte'],\n 'craber': ['bracer', 'craber'],\n 'crabhole': ['bachelor', 'crabhole'],\n 'crablet': ['beclart', 'crablet'],\n 'crackable': ['blackacre', 'crackable'],\n 'crackle': ['cackler', 'clacker', 'crackle'],\n 'crackmans': ['crackmans', 'cracksman'],\n 'cracksman': ['crackmans', 'cracksman'],\n 'cradge': ['cadger', 'cradge'],\n 'cradle': ['cardel', 'cradle'],\n 'cradlemate': ['cradlemate', 'malcreated'],\n 'craig': ['cigar', 'craig'],\n 'crain': ['cairn', 'crain', 'naric'],\n 'crake': ['acker', 'caker', 'crake', 'creak'],\n 'cram': ['cram', 'marc'],\n 'cramasie': ['cramasie', 'mesaraic'],\n 'crambe': ['becram', 'camber', 'crambe'],\n 'crambidae': ['carbamide', 'crambidae'],\n 'crambinae': ['carbamine', 'crambinae'],\n 'cramble': ['cambrel', 'clamber', 'cramble'],\n 'cramper': ['cramper', 'recramp'],\n 'crampon': ['crampon', 'cropman'],\n 'cranage': ['carnage', 'cranage', 'garance'],\n 'crance': ['cancer', 'crance'],\n 'crane': ['caner', 'crane', 'crena', 'nacre', 'rance'],\n 'craner': ['craner', 'rancer'],\n 'craney': ['carney', 'craney'],\n 'crania': ['acinar',\n            'arnica',\n            'canari',\n            'carian',\n            'carina',\n            'crania',\n            'narica'],\n 'craniad': ['acridan', 'craniad'],\n 'cranial': ['carinal', 'carlina', 'clarain', 'cranial'],\n 'cranially': ['ancillary', 'carlylian', 'cranially'],\n 'cranian': ['canarin', 'cranian'],\n 'craniate': ['anaretic', 'arcanite', 'carinate', 'craniate'],\n 'cranic': ['cancri', 'carnic', 'cranic'],\n 'craniectomy': ['craniectomy', 'cyanometric'],\n 'craniognomy': ['craniognomy', 'organonymic'],\n 'craniota': ['craniota', 'croatian', 'narcotia', 'raincoat'],\n 'cranker': ['cranker', 'recrank'],\n 'crap': ['carp', 'crap'],\n 'crape': ['caper', 'crape', 'pacer', 'perca', 'recap'],\n 'crappie': ['crappie', 'epicarp'],\n 'crapple': ['clapper', 'crapple'],\n 'crappo': ['crappo', 'croppa'],\n 'craps': ['craps', 'scarp', 'scrap'],\n 'crapulous': ['crapulous', 'opuscular'],\n 'crare': ['carer', 'crare', 'racer'],\n 'crate': ['caret',\n           'carte',\n           'cater',\n           'crate',\n           'creat',\n           'creta',\n           'react',\n           'recta',\n           'trace'],\n 'crateful': ['crateful', 'fulcrate'],\n 'crater': ['arrect', 'carter', 'crater', 'recart', 'tracer'],\n 'craterid': ['cirrated', 'craterid'],\n 'crateriform': ['crateriform', 'terraciform'],\n 'crateris': ['crateris', 'serratic'],\n 'craterlet': ['clatterer', 'craterlet'],\n 'craterous': ['craterous', 'recusator'],\n 'cratinean': ['cratinean', 'incarnate', 'nectarian'],\n 'cratometric': ['cratometric', 'metrocratic'],\n 'crave': ['carve', 'crave', 'varec'],\n 'craven': ['carven', 'cavern', 'craven'],\n 'craver': ['carver', 'craver'],\n 'craving': ['carving', 'craving'],\n 'crayon': ['canroy', 'crayon', 'cyrano', 'nyroca'],\n 'crayonist': ['carnosity', 'crayonist'],\n 'crea': ['acer', 'acre', 'care', 'crea', 'race'],\n 'creagh': ['charge', 'creagh'],\n 'creak': ['acker', 'caker', 'crake', 'creak'],\n 'cream': ['cream', 'macer'],\n 'creamer': ['amercer', 'creamer'],\n 'creant': ['canter',\n            'creant',\n            'cretan',\n            'nectar',\n            'recant',\n            'tanrec',\n            'trance'],\n 'crease': ['cesare', 'crease', 'recase', 'searce'],\n 'creaser': ['creaser', 'searcer'],\n 'creasing': ['creasing', 'scirenga'],\n 'creat': ['caret',\n           'carte',\n           'cater',\n           'crate',\n           'creat',\n           'creta',\n           'react',\n           'recta',\n           'trace'],\n 'creatable': ['creatable', 'traceable'],\n 'create': ['cerate', 'create', 'ecarte'],\n 'creatine': ['aneretic', 'centiare', 'creatine', 'increate', 'iterance'],\n 'creatinine': ['creatinine', 'incinerate'],\n 'creation': ['actioner', 'anerotic', 'ceration', 'creation', 'reaction'],\n 'creational': ['creational', 'crotalinae', 'laceration', 'reactional'],\n 'creationary': ['creationary', 'reactionary'],\n 'creationism': ['anisometric',\n                 'creationism',\n                 'miscreation',\n                 'ramisection',\n                 'reactionism'],\n 'creationist': ['creationist', 'reactionist'],\n 'creative': ['creative', 'reactive'],\n 'creatively': ['creatively', 'reactively'],\n 'creativeness': ['creativeness', 'reactiveness'],\n 'creativity': ['creativity', 'reactivity'],\n 'creator': ['creator', 'reactor'],\n 'crebrous': ['crebrous', 'obscurer'],\n 'credential': ['credential', 'interlaced', 'reclinated'],\n 'credit': ['credit', 'direct'],\n 'creditable': ['creditable', 'directable'],\n 'creditive': ['creditive', 'directive'],\n 'creditor': ['creditor', 'director'],\n 'creditorship': ['creditorship', 'directorship'],\n 'creditress': ['creditress', 'directress'],\n 'creditrix': ['creditrix', 'directrix'],\n 'crednerite': ['crednerite', 'interceder'],\n 'credo': ['coder', 'cored', 'credo'],\n 'cree': ['cere', 'cree'],\n 'creed': ['ceder', 'cedre', 'cered', 'creed'],\n 'creedal': ['cedrela', 'creedal', 'declare'],\n 'creedalism': ['creedalism', 'misdeclare'],\n 'creedist': ['creedist', 'desertic', 'discreet', 'discrete'],\n 'creep': ['creep', 'crepe'],\n 'creepered': ['creepered', 'predecree'],\n 'creepie': ['creepie', 'repiece'],\n 'cremation': ['cremation', 'manticore'],\n 'cremator': ['cremator', 'mercator'],\n 'crematorial': ['crematorial', 'mercatorial'],\n 'cremor': ['cremor', 'cromer'],\n 'crena': ['caner', 'crane', 'crena', 'nacre', 'rance'],\n 'crenate': ['centare', 'crenate'],\n 'crenated': ['crenated', 'decanter', 'nectared'],\n 'crenation': ['connarite', 'container', 'cotarnine', 'crenation', 'narcotine'],\n 'crenelate': ['crenelate', 'lanceteer'],\n 'crenelation': ['crenelation', 'intolerance'],\n 'crenele': ['crenele', 'encreel'],\n 'crenellation': ['centrolineal', 'crenellation'],\n 'crenitic': ['crenitic', 'cretinic'],\n 'crenology': ['crenology', 'necrology'],\n 'crenula': ['crenula', 'lucarne', 'nuclear', 'unclear'],\n 'crenulate': ['calenture', 'crenulate'],\n 'creodonta': ['coronated', 'creodonta'],\n 'creolian': ['acrolein',\n              'arecolin',\n              'caroline',\n              'colinear',\n              'cornelia',\n              'creolian',\n              'lonicera'],\n 'creolin': ['creolin', 'licorne', 'locrine'],\n 'creosotic': ['corticose', 'creosotic'],\n 'crepe': ['creep', 'crepe'],\n 'crepidula': ['crepidula', 'pedicular'],\n 'crepine': ['crepine', 'increep'],\n 'crepiness': ['crepiness', 'princesse'],\n 'crepis': ['crepis', 'cripes', 'persic', 'precis', 'spicer'],\n 'crepitant': ['crepitant', 'pittancer'],\n 'crepitation': ['actinopteri', 'crepitation', 'precitation'],\n 'crepitous': ['crepitous', 'euproctis', 'uroseptic'],\n 'crepitus': ['crepitus', 'piecrust'],\n 'crepon': ['crepon', 'procne'],\n 'crepy': ['crepy', 'cypre', 'percy'],\n 'cresol': ['closer', 'cresol', 'escrol'],\n 'cresolin': ['cresolin', 'licensor'],\n 'cresotic': ['cortices', 'cresotic'],\n 'cresson': ['cresson', 'crosnes'],\n 'crestline': ['crestline', 'stenciler'],\n 'crestmoreite': ['crestmoreite', 'stereometric'],\n 'creta': ['caret',\n           'carte',\n           'cater',\n           'crate',\n           'creat',\n           'creta',\n           'react',\n           'recta',\n           'trace'],\n 'cretan': ['canter',\n            'creant',\n            'cretan',\n            'nectar',\n            'recant',\n            'tanrec',\n            'trance'],\n 'crete': ['crete', 'erect'],\n 'cretification': ['certification', 'cretification', 'rectification'],\n 'cretify': ['certify', 'cretify', 'rectify'],\n 'cretin': ['cinter', 'cretin', 'crinet'],\n 'cretinic': ['crenitic', 'cretinic'],\n 'cretinoid': ['cretinoid', 'direction'],\n 'cretion': ['cerotin', 'cointer', 'cotrine', 'cretion', 'noticer', 'rection'],\n 'cretism': ['cretism', 'metrics'],\n 'crewer': ['crewer', 'recrew'],\n 'cribo': ['boric', 'cribo', 'orbic'],\n 'crickle': ['clicker', 'crickle'],\n 'cricothyroid': ['cricothyroid', 'thyrocricoid'],\n 'cried': ['cider', 'cried', 'deric', 'dicer'],\n 'crier': ['crier', 'ricer'],\n 'criey': ['criey', 'ricey'],\n 'crile': ['crile', 'elric', 'relic'],\n 'crimean': ['armenic', 'carmine', 'ceriman', 'crimean', 'mercian'],\n 'crimeful': ['crimeful', 'merciful'],\n 'crimeless': ['crimeless', 'merciless'],\n 'crimelessness': ['crimelessness', 'mercilessness'],\n 'criminalese': ['criminalese', 'misreliance'],\n 'criminate': ['antimeric', 'carminite', 'criminate', 'metrician'],\n 'criminatory': ['coriamyrtin', 'criminatory'],\n 'crimpage': ['crimpage', 'pergamic'],\n 'crinal': ['carlin', 'clarin', 'crinal'],\n 'crinanite': ['crinanite', 'natricine'],\n 'crinated': ['crinated', 'dicentra'],\n 'crine': ['cerin', 'crine'],\n 'crined': ['cedrin', 'cinder', 'crined'],\n 'crinet': ['cinter', 'cretin', 'crinet'],\n 'cringle': ['clinger', 'cringle'],\n 'crinite': ['citrine', 'crinite', 'inciter', 'neritic'],\n 'crinkle': ['clinker', 'crinkle'],\n 'cripes': ['crepis', 'cripes', 'persic', 'precis', 'spicer'],\n 'cripple': ['clipper', 'cripple'],\n 'crisp': ['crisp', 'scrip'],\n 'crispation': ['antipsoric', 'ascription', 'crispation'],\n 'crisped': ['crisped', 'discerp'],\n 'crispy': ['crispy', 'cypris'],\n 'crista': ['crista', 'racist'],\n 'cristopher': ['cristopher', 'rectorship'],\n 'criteria': ['criteria', 'triceria'],\n 'criterion': ['criterion', 'tricerion'],\n 'criterium': ['criterium', 'tricerium'],\n 'crith': ['crith', 'richt'],\n 'critic': ['citric', 'critic'],\n 'cro': ['cor', 'cro', 'orc', 'roc'],\n 'croak': ['arock', 'croak'],\n 'croat': ['actor', 'corta', 'croat', 'rocta', 'taroc', 'troca'],\n 'croatan': ['cantaro', 'croatan'],\n 'croatian': ['craniota', 'croatian', 'narcotia', 'raincoat'],\n 'crocein': ['cornice', 'crocein'],\n 'croceine': ['cicerone', 'croceine'],\n 'crocetin': ['crocetin', 'necrotic'],\n 'crocidolite': ['crocidolite', 'crocodilite'],\n 'crocin': ['cornic', 'crocin'],\n 'crocodile': ['cordicole', 'crocodile'],\n 'crocodilite': ['crocidolite', 'crocodilite'],\n 'croconate': ['coenactor', 'croconate'],\n 'crocus': ['crocus', 'succor'],\n 'crom': ['corm', 'crom'],\n 'crome': ['comer', 'crome'],\n 'cromer': ['cremor', 'cromer'],\n 'crone': ['coner', 'crone', 'recon'],\n 'cronet': ['conter', 'cornet', 'cronet', 'roncet'],\n 'cronian': ['corinna', 'cronian'],\n 'cronish': ['cornish', 'cronish', 'sorchin'],\n 'crony': ['corny', 'crony'],\n 'croodle': ['colored', 'croodle', 'decolor'],\n 'crool': ['color', 'corol', 'crool'],\n 'croon': ['conor', 'croon', 'ronco'],\n 'crooner': ['coroner', 'crooner', 'recroon'],\n 'crop': ['copr', 'corp', 'crop'],\n 'cropman': ['crampon', 'cropman'],\n 'croppa': ['crappo', 'croppa'],\n 'crore': ['corer', 'crore'],\n 'crosa': ['arcos', 'crosa', 'oscar', 'sacro'],\n 'crosier': ['cirrose', 'crosier'],\n 'crosnes': ['cresson', 'crosnes'],\n 'crosse': ['cessor', 'crosse', 'scorse'],\n 'crosser': ['crosser', 'recross'],\n 'crossite': ['crossite', 'crosstie'],\n 'crossover': ['crossover', 'overcross'],\n 'crosstie': ['crossite', 'crosstie'],\n 'crosstied': ['crosstied', 'dissector'],\n 'crosstree': ['crosstree', 'rectoress'],\n 'crosswalk': ['classwork', 'crosswalk'],\n 'crotal': ['carlot', 'crotal'],\n 'crotalic': ['cortical', 'crotalic'],\n 'crotalinae': ['creational', 'crotalinae', 'laceration', 'reactional'],\n 'crotaline': ['alectrion', 'clarionet', 'crotaline', 'locarnite'],\n 'crotalism': ['clamorist', 'crotalism'],\n 'crotalo': ['crotalo', 'locator'],\n 'crotaloid': ['crotaloid', 'doctorial'],\n 'crotin': ['citron', 'cortin', 'crotin'],\n 'croton': ['corton', 'croton'],\n 'crotonate': ['contortae', 'crotonate'],\n 'crottle': ['clotter', 'crottle'],\n 'crouchant': ['archcount', 'crouchant'],\n 'croupal': ['copular', 'croupal', 'cupolar', 'porcula'],\n 'croupe': ['couper', 'croupe', 'poucer', 'recoup'],\n 'croupily': ['croupily', 'polyuric'],\n 'croupiness': ['croupiness', 'percussion', 'supersonic'],\n 'crouse': ['cerous', 'course', 'crouse', 'source'],\n 'crout': ['court', 'crout', 'turco'],\n 'croute': ['couter', 'croute'],\n 'crouton': ['contour', 'cornuto', 'countor', 'crouton'],\n 'crowder': ['crowder', 'recrowd'],\n 'crowned': ['crowned', 'decrown'],\n 'crowner': ['crowner', 'recrown'],\n 'crownmaker': ['cankerworm', 'crownmaker'],\n 'croy': ['cory', 'croy'],\n 'croydon': ['corydon', 'croydon'],\n 'cruces': ['cercus', 'cruces'],\n 'cruciate': ['aceturic', 'cruciate'],\n 'crudwort': ['crudwort', 'curdwort'],\n 'cruel': ['cruel', 'lucre', 'ulcer'],\n 'cruels': ['clerus', 'cruels'],\n 'cruelty': ['cruelty', 'cutlery'],\n 'cruet': ['cruet', 'eruct', 'recut', 'truce'],\n 'cruise': ['cruise', 'crusie'],\n 'cruisken': ['cruisken', 'unsicker'],\n 'crunode': ['crunode', 'uncored'],\n 'crureus': ['crureus', 'surcrue'],\n 'crurogenital': ['crurogenital', 'genitocrural'],\n 'cruroinguinal': ['cruroinguinal', 'inguinocrural'],\n 'crus': ['crus', 'scur'],\n 'crusado': ['acrodus', 'crusado'],\n 'crusca': ['crusca', 'curcas'],\n 'cruse': ['cruse', 'curse', 'sucre'],\n 'crusher': ['crusher', 'recrush'],\n 'crusie': ['cruise', 'crusie'],\n 'crust': ['crust', 'curst'],\n 'crustate': ['crustate', 'scrutate'],\n 'crustation': ['crustation', 'scrutation'],\n 'crustily': ['crustily', 'rusticly'],\n 'crustiness': ['crustiness', 'rusticness'],\n 'crusty': ['crusty', 'curtsy'],\n 'cruth': ['cruth', 'rutch'],\n 'cryosel': ['cryosel', 'scroyle'],\n 'cryptodire': ['cryptodire', 'predictory'],\n 'cryptomeria': ['cryptomeria', 'imprecatory'],\n 'cryptostomate': ['cryptostomate', 'prostatectomy'],\n 'ctenidial': ['ctenidial', 'identical'],\n 'ctenoid': ['condite', 'ctenoid'],\n 'ctenolium': ['ctenolium', 'monticule'],\n 'ctenophore': ['ctenophore', 'nectophore'],\n 'ctetology': ['ctetology', 'tectology'],\n 'cuailnge': ['cuailnge', 'glaucine'],\n 'cuarteron': ['cuarteron', 'raconteur'],\n 'cubanite': ['cubanite', 'incubate'],\n 'cuber': ['bruce', 'cebur', 'cuber'],\n 'cubist': ['bustic', 'cubist'],\n 'cubit': ['butic', 'cubit'],\n 'cubitale': ['baculite', 'cubitale'],\n 'cuboidal': ['baculoid', 'cuboidal'],\n 'cuchan': ['caunch', 'cuchan'],\n 'cueball': ['bullace', 'cueball'],\n 'cueman': ['acumen', 'cueman'],\n 'cuir': ['cuir', 'uric'],\n 'culebra': ['culebra', 'curable'],\n 'culet': ['culet', 'lucet'],\n 'culinary': ['culinary', 'uranylic'],\n 'culmy': ['culmy', 'cumyl'],\n 'culpose': ['culpose', 'ploceus', 'upclose'],\n 'cultch': ['clutch', 'cultch'],\n 'cultivar': ['cultivar', 'curvital'],\n 'culturine': ['culturine', 'inculture'],\n 'cumaean': ['cumaean', 'encauma'],\n 'cumar': ['carum', 'cumar'],\n 'cumber': ['cumber', 'cumbre'],\n 'cumberer': ['cerebrum', 'cumberer'],\n 'cumbraite': ['bacterium', 'cumbraite'],\n 'cumbre': ['cumber', 'cumbre'],\n 'cumic': ['cumic', 'mucic'],\n 'cumin': ['cumin', 'mucin'],\n 'cumol': ['cumol', 'locum'],\n 'cumulite': ['cumulite', 'lutecium'],\n 'cumyl': ['culmy', 'cumyl'],\n 'cuna': ['cuna', 'unca'],\n 'cunan': ['canun', 'cunan'],\n 'cuneal': ['auncel', 'cuneal', 'lacune', 'launce', 'unlace'],\n 'cuneator': ['cornuate', 'courante', 'cuneator', 'outrance'],\n 'cunila': ['cunila', 'lucian', 'lucina', 'uncial'],\n 'cuon': ['cuon', 'unco'],\n 'cuorin': ['cuorin', 'uronic'],\n 'cupid': ['cupid', 'pudic'],\n 'cupidity': ['cupidity', 'pudicity'],\n 'cupidone': ['cupidone', 'uncopied'],\n 'cupola': ['copula', 'cupola'],\n 'cupolar': ['copular', 'croupal', 'cupolar', 'porcula'],\n 'cupreous': ['cupreous', 'upcourse'],\n 'cuprite': ['cuprite', 'picture'],\n 'curable': ['culebra', 'curable'],\n 'curate': ['acture', 'cauter', 'curate'],\n 'curateship': ['curateship', 'pasticheur'],\n 'curation': ['curation', 'nocturia'],\n 'curatory': ['curatory', 'outcarry'],\n 'curcas': ['crusca', 'curcas'],\n 'curdle': ['curdle', 'curled'],\n 'curdwort': ['crudwort', 'curdwort'],\n 'cure': ['cure', 'ecru', 'eruc'],\n 'curer': ['curer', 'recur'],\n 'curial': ['curial', 'lauric', 'uracil', 'uralic'],\n 'curialist': ['curialist', 'rusticial'],\n 'curie': ['curie', 'ureic'],\n 'curin': ['curin', 'incur', 'runic'],\n 'curine': ['curine', 'erucin', 'neuric'],\n 'curiosa': ['carious', 'curiosa'],\n 'curite': ['curite', 'teucri', 'uretic'],\n 'curled': ['curdle', 'curled'],\n 'curler': ['curler', 'recurl'],\n 'cursa': ['cursa', 'scaur'],\n 'cursal': ['cursal', 'sulcar'],\n 'curse': ['cruse', 'curse', 'sucre'],\n 'cursed': ['cedrus', 'cursed'],\n 'curst': ['crust', 'curst'],\n 'cursus': ['cursus', 'ruscus'],\n 'curtail': ['curtail', 'trucial'],\n 'curtailer': ['curtailer', 'recruital', 'reticular'],\n 'curtain': ['curtain', 'turacin', 'turcian'],\n 'curtation': ['anticourt', 'curtation', 'ructation'],\n 'curtilage': ['curtilage', 'cutigeral', 'graticule'],\n 'curtis': ['citrus', 'curtis', 'rictus', 'rustic'],\n 'curtise': ['curtise', 'icterus'],\n 'curtsy': ['crusty', 'curtsy'],\n 'curvital': ['cultivar', 'curvital'],\n 'cush': ['cush', 'such'],\n 'cushionless': ['cushionless', 'slouchiness'],\n 'cusinero': ['coinsure', 'corineus', 'cusinero'],\n 'cusk': ['cusk', 'suck'],\n 'cusp': ['cusp', 'scup'],\n 'cuspal': ['cuspal', 'placus'],\n 'custom': ['custom', 'muscot'],\n 'customer': ['costumer', 'customer'],\n 'cutheal': ['auchlet', 'cutheal', 'taluche'],\n 'cutigeral': ['curtilage', 'cutigeral', 'graticule'],\n 'cutin': ['cutin', 'incut', 'tunic'],\n 'cutis': ['cutis', 'ictus'],\n 'cutler': ['cutler', 'reluct'],\n 'cutleress': ['cutleress', 'lecturess', 'truceless'],\n 'cutleria': ['arculite', 'cutleria', 'lucretia', 'reticula', 'treculia'],\n 'cutlery': ['cruelty', 'cutlery'],\n 'cutlet': ['cutlet', 'cuttle'],\n 'cutoff': ['cutoff', 'offcut'],\n 'cutout': ['cutout', 'outcut'],\n 'cutover': ['cutover', 'overcut'],\n 'cuttle': ['cutlet', 'cuttle'],\n 'cuttler': ['clutter', 'cuttler'],\n 'cutup': ['cutup', 'upcut'],\n 'cuya': ['cuya', 'yuca'],\n 'cyamus': ['cyamus', 'muysca'],\n 'cyan': ['cany', 'cyan'],\n 'cyanidine': ['cyanidine', 'dicyanine'],\n 'cyanol': ['alcyon', 'cyanol'],\n 'cyanole': ['alcyone', 'cyanole'],\n 'cyanometric': ['craniectomy', 'cyanometric'],\n 'cyanophycin': ['cyanophycin', 'phycocyanin'],\n 'cyanuret': ['centaury', 'cyanuret'],\n 'cyath': ['cathy', 'cyath', 'yacht'],\n 'cyclamine': ['cyclamine', 'macilency'],\n 'cyclian': ['cyclian', 'cynical'],\n 'cyclide': ['cyclide', 'decylic', 'dicycle'],\n 'cyclism': ['clysmic', 'cyclism'],\n 'cyclotome': ['colectomy', 'cyclotome'],\n 'cydonian': ['anodynic', 'cydonian'],\n 'cylindrite': ['cylindrite', 'indirectly'],\n 'cylix': ['cylix', 'xylic'],\n 'cymation': ['cymation', 'myatonic', 'onymatic'],\n 'cymoid': ['cymoid', 'mycoid'],\n 'cymometer': ['cymometer', 'mecometry'],\n 'cymose': ['cymose', 'mycose'],\n 'cymule': ['cymule', 'lyceum'],\n 'cynara': ['canary', 'cynara'],\n 'cynaroid': ['cynaroid', 'dicaryon'],\n 'cynical': ['cyclian', 'cynical'],\n 'cynogale': ['acylogen', 'cynogale'],\n 'cynophilic': ['cynophilic', 'philocynic'],\n 'cynosural': ['consulary', 'cynosural'],\n 'cyphonism': ['cyphonism', 'symphonic'],\n 'cypre': ['crepy', 'cypre', 'percy'],\n 'cypria': ['cypria', 'picary', 'piracy'],\n 'cyprian': ['cyprian', 'cyprina'],\n 'cyprina': ['cyprian', 'cyprina'],\n 'cyprine': ['cyprine', 'pyrenic'],\n 'cypris': ['crispy', 'cypris'],\n 'cyrano': ['canroy', 'crayon', 'cyrano', 'nyroca'],\n 'cyril': ['cyril', 'lyric'],\n 'cyrilla': ['cyrilla', 'lyrical'],\n 'cyrtopia': ['cyrtopia', 'poticary'],\n 'cyst': ['cyst', 'scyt'],\n 'cystidean': ['asyndetic', 'cystidean', 'syndicate'],\n 'cystitis': ['cystitis', 'scytitis'],\n 'cystoadenoma': ['adenocystoma', 'cystoadenoma'],\n 'cystofibroma': ['cystofibroma', 'fibrocystoma'],\n 'cystolith': ['cystolith', 'lithocyst'],\n 'cystomyxoma': ['cystomyxoma', 'myxocystoma'],\n 'cystonephrosis': ['cystonephrosis', 'nephrocystosis'],\n 'cystopyelitis': ['cystopyelitis', 'pyelocystitis'],\n 'cystotome': ['cystotome', 'cytostome', 'ostectomy'],\n 'cystourethritis': ['cystourethritis', 'urethrocystitis'],\n 'cytase': ['cytase', 'stacey'],\n 'cytherea': ['cheatery', 'cytherea', 'teachery'],\n 'cytherean': ['cytherean', 'enchytrae'],\n 'cytisine': ['cytisine', 'syenitic'],\n 'cytoblastemic': ['blastomycetic', 'cytoblastemic'],\n 'cytoblastemous': ['blastomycetous', 'cytoblastemous'],\n 'cytochrome': ['chromocyte', 'cytochrome'],\n 'cytoid': ['cytoid', 'docity'],\n 'cytomere': ['cytomere', 'merocyte'],\n 'cytophil': ['cytophil', 'phycitol'],\n 'cytosine': ['cenosity', 'cytosine'],\n 'cytosome': ['cytosome', 'otomyces'],\n 'cytost': ['cytost', 'scotty'],\n 'cytostome': ['cystotome', 'cytostome', 'ostectomy'],\n 'czarian': ['czarian', 'czarina'],\n 'czarina': ['czarian', 'czarina'],\n 'da': ['ad', 'da'],\n 'dab': ['bad', 'dab'],\n 'dabber': ['barbed', 'dabber'],\n 'dabbler': ['dabbler', 'drabble'],\n 'dabitis': ['dabitis', 'dibatis'],\n 'dablet': ['dablet', 'tabled'],\n 'dace': ['cade', 'dace', 'ecad'],\n 'dacelo': ['alcedo', 'dacelo'],\n 'dacian': ['acnida', 'anacid', 'dacian'],\n 'dacker': ['arcked', 'dacker'],\n 'dacryolith': ['dacryolith', 'hydrotical'],\n 'dacryon': ['candroy', 'dacryon'],\n 'dactylonomy': ['dactylonomy', 'monodactyly'],\n 'dactylopteridae': ['dactylopteridae', 'pterodactylidae'],\n 'dactylopterus': ['dactylopterus', 'pterodactylus'],\n 'dacus': ['cadus', 'dacus'],\n 'dad': ['add', 'dad'],\n 'dada': ['adad', 'adda', 'dada'],\n 'dadap': ['dadap', 'padda'],\n 'dade': ['dade', 'dead', 'edda'],\n 'dadu': ['addu', 'dadu', 'daud', 'duad'],\n 'dae': ['ade', 'dae'],\n 'daemon': ['daemon', 'damone', 'modena'],\n 'daemonic': ['codamine', 'comedian', 'daemonic', 'demoniac'],\n 'daer': ['ared', 'daer', 'dare', 'dear', 'read'],\n 'dag': ['dag', 'gad'],\n 'dagaba': ['badaga', 'dagaba', 'gadaba'],\n 'dagame': ['dagame', 'damage'],\n 'dagbane': ['bandage', 'dagbane'],\n 'dagestan': ['dagestan', 'standage'],\n 'dagger': ['dagger', 'gadger', 'ragged'],\n 'daggers': ['daggers', 'seggard'],\n 'daggle': ['daggle', 'lagged'],\n 'dago': ['dago', 'goad'],\n 'dagomba': ['dagomba', 'gambado'],\n 'dags': ['dags', 'sgad'],\n 'dah': ['dah', 'dha', 'had'],\n 'daidle': ['daidle', 'laddie'],\n 'daikon': ['daikon', 'nodiak'],\n 'dail': ['dail', 'dali', 'dial', 'laid', 'lida'],\n 'daily': ['daily', 'lydia'],\n 'daimen': ['daimen', 'damine', 'maiden', 'median', 'medina'],\n 'daimio': ['daimio', 'maioid'],\n 'daimon': ['amidon', 'daimon', 'domain'],\n 'dain': ['adin', 'andi', 'dain', 'dani', 'dian', 'naid'],\n 'dairi': ['dairi', 'darii', 'radii'],\n 'dairy': ['dairy', 'diary', 'yaird'],\n 'dais': ['dais', 'dasi', 'disa', 'said', 'sida'],\n 'daisy': ['daisy', 'sayid'],\n 'daker': ['daker', 'drake', 'kedar', 'radek'],\n 'dal': ['dal', 'lad'],\n 'dale': ['dale', 'deal', 'lade', 'lead', 'leda'],\n 'dalea': ['adela', 'dalea'],\n 'dalecarlian': ['calendarial', 'dalecarlian'],\n 'daleman': ['daleman', 'lademan', 'leadman'],\n 'daler': ['alder', 'daler', 'lader'],\n 'dalesman': ['dalesman', 'leadsman'],\n 'dali': ['dail', 'dali', 'dial', 'laid', 'lida'],\n 'dalle': ['dalle', 'della', 'ladle'],\n 'dallying': ['dallying', 'ladyling'],\n 'dalt': ['dalt', 'tald'],\n 'dalteen': ['dalteen', 'dentale', 'edental'],\n 'dam': ['dam', 'mad'],\n 'dama': ['adam', 'dama'],\n 'damage': ['dagame', 'damage'],\n 'daman': ['adman', 'daman', 'namda'],\n 'damara': ['armada', 'damara', 'ramada'],\n 'dame': ['dame', 'made', 'mead'],\n 'damewort': ['damewort', 'wardmote'],\n 'damia': ['amadi', 'damia', 'madia', 'maida'],\n 'damie': ['amide', 'damie', 'media'],\n 'damier': ['admire', 'armied', 'damier', 'dimera', 'merida'],\n 'damine': ['daimen', 'damine', 'maiden', 'median', 'medina'],\n 'dammer': ['dammer', 'dramme'],\n 'dammish': ['dammish', 'mahdism'],\n 'damn': ['damn', 'mand'],\n 'damnation': ['damnation', 'mandation'],\n 'damnatory': ['damnatory', 'mandatory'],\n 'damned': ['damned', 'demand', 'madden'],\n 'damner': ['damner', 'manred', 'randem', 'remand'],\n 'damnii': ['amidin', 'damnii'],\n 'damnous': ['damnous', 'osmunda'],\n 'damon': ['damon', 'monad', 'nomad'],\n 'damone': ['daemon', 'damone', 'modena'],\n 'damonico': ['damonico', 'monoacid'],\n 'dampen': ['dampen', 'madnep'],\n 'damper': ['damper', 'ramped'],\n 'dampish': ['dampish', 'madship', 'phasmid'],\n 'dan': ['and', 'dan'],\n 'dana': ['anda', 'dana'],\n 'danaan': ['ananda', 'danaan'],\n 'danai': ['danai', 'diana', 'naiad'],\n 'danainae': ['anadenia', 'danainae'],\n 'danakil': ['danakil', 'dankali', 'kaldani', 'ladakin'],\n 'danalite': ['danalite', 'detainal'],\n 'dancalite': ['cadential', 'dancalite'],\n 'dance': ['dance', 'decan'],\n 'dancer': ['cedarn', 'dancer', 'nacred'],\n 'dancery': ['ardency', 'dancery'],\n 'dander': ['dander', 'darned', 'nadder'],\n 'dandle': ['dandle', 'landed'],\n 'dandler': ['dandler', 'dendral'],\n 'dane': ['ande', 'dane', 'dean', 'edna'],\n 'danewort': ['danewort', 'teardown'],\n 'danger': ['danger', 'gander', 'garden', 'ranged'],\n 'dangerful': ['dangerful', 'gardenful'],\n 'dangerless': ['dangerless', 'gardenless'],\n 'dangle': ['angled', 'dangle', 'englad', 'lagend'],\n 'dangler': ['dangler', 'gnarled'],\n 'danglin': ['danglin', 'landing'],\n 'dani': ['adin', 'andi', 'dain', 'dani', 'dian', 'naid'],\n 'danian': ['andian', 'danian', 'nidana'],\n 'danic': ['canid', 'cnida', 'danic'],\n 'daniel': ['aldine', 'daniel', 'delian', 'denial', 'enalid', 'leadin'],\n 'daniele': ['adeline', 'daniele', 'delaine'],\n 'danielic': ['alcidine', 'danielic', 'lecaniid'],\n 'danio': ['adion', 'danio', 'doina', 'donia'],\n 'danish': ['danish', 'sandhi'],\n 'danism': ['danism', 'disman'],\n 'danite': ['danite', 'detain'],\n 'dankali': ['danakil', 'dankali', 'kaldani', 'ladakin'],\n 'danli': ['danli', 'ladin', 'linda', 'nidal'],\n 'dannie': ['aidenn', 'andine', 'dannie', 'indane'],\n 'danseuse': ['danseuse', 'sudanese'],\n 'dantean': ['andante', 'dantean'],\n 'dantist': ['dantist', 'distant'],\n 'danuri': ['danuri', 'diurna', 'dunair', 'durain', 'durani', 'durian'],\n 'dao': ['ado', 'dao', 'oda'],\n 'daoine': ['daoine', 'oneida'],\n 'dap': ['dap', 'pad'],\n 'daphnis': ['daphnis', 'dishpan'],\n 'dapicho': ['dapicho', 'phacoid'],\n 'dapple': ['dapple', 'lapped', 'palped'],\n 'dar': ['dar', 'rad'],\n 'daraf': ['daraf', 'farad'],\n 'darby': ['bardy', 'darby'],\n 'darci': ['acrid', 'caird', 'carid', 'darci', 'daric', 'dirca'],\n 'dare': ['ared', 'daer', 'dare', 'dear', 'read'],\n 'dareall': ['ardella', 'dareall'],\n 'daren': ['andre', 'arend', 'daren', 'redan'],\n 'darer': ['darer', 'drear'],\n 'darg': ['darg', 'drag', 'grad'],\n 'darger': ['darger', 'gerard', 'grader', 'redrag', 'regard'],\n 'dargo': ['dargo', 'dogra', 'drago'],\n 'dargsman': ['dargsman', 'dragsman'],\n 'dari': ['arid', 'dari', 'raid'],\n 'daric': ['acrid', 'caird', 'carid', 'darci', 'daric', 'dirca'],\n 'darien': ['darien', 'draine'],\n 'darii': ['dairi', 'darii', 'radii'],\n 'darin': ['darin', 'dinar', 'drain', 'indra', 'nadir', 'ranid'],\n 'daring': ['daring', 'dingar', 'gradin'],\n 'darius': ['darius', 'radius'],\n 'darken': ['darken', 'kanred', 'ranked'],\n 'darkener': ['darkener', 'redarken'],\n 'darn': ['darn', 'nard', 'rand'],\n 'darned': ['dander', 'darned', 'nadder'],\n 'darnel': ['aldern',\n            'darnel',\n            'enlard',\n            'lander',\n            'lenard',\n            'randle',\n            'reland'],\n 'darner': ['darner', 'darren', 'errand', 'rander', 'redarn'],\n 'darning': ['darning', 'randing'],\n 'darrein': ['darrein', 'drainer'],\n 'darren': ['darner', 'darren', 'errand', 'rander', 'redarn'],\n 'darshana': ['darshana', 'shardana'],\n 'darst': ['darst', 'darts', 'strad'],\n 'dart': ['dart', 'drat'],\n 'darter': ['darter',\n            'dartre',\n            'redart',\n            'retard',\n            'retrad',\n            'tarred',\n            'trader'],\n 'darting': ['darting', 'trading'],\n 'dartle': ['dartle', 'tardle'],\n 'dartoic': ['arctoid', 'carotid', 'dartoic'],\n 'dartre': ['darter',\n            'dartre',\n            'redart',\n            'retard',\n            'retrad',\n            'tarred',\n            'trader'],\n 'dartrose': ['dartrose', 'roadster'],\n 'darts': ['darst', 'darts', 'strad'],\n 'daryl': ['daryl', 'lardy', 'lyard'],\n 'das': ['das', 'sad'],\n 'dash': ['dash', 'sadh', 'shad'],\n 'dashed': ['dashed', 'shaded'],\n 'dasheen': ['dasheen', 'enshade'],\n 'dasher': ['dasher', 'shader', 'sheard'],\n 'dashing': ['dashing', 'shading'],\n 'dashnak': ['dashnak', 'shadkan'],\n 'dashy': ['dashy', 'shady'],\n 'dasi': ['dais', 'dasi', 'disa', 'said', 'sida'],\n 'dasnt': ['dasnt', 'stand'],\n 'dasturi': ['dasturi', 'rudista'],\n 'dasya': ['adays', 'dasya'],\n 'dasyurine': ['dasyurine', 'dysneuria'],\n 'data': ['adat', 'data'],\n 'datable': ['albetad', 'datable'],\n 'dataria': ['dataria', 'radiata'],\n 'date': ['adet', 'date', 'tade', 'tead', 'teda'],\n 'dateless': ['dateless', 'detassel'],\n 'dater': ['dater', 'derat', 'detar', 'drate', 'rated', 'trade', 'tread'],\n 'datil': ['datil', 'dital', 'tidal', 'tilda'],\n 'datism': ['amidst', 'datism'],\n 'daub': ['baud', 'buda', 'daub'],\n 'dauber': ['dauber', 'redaub'],\n 'daubster': ['daubster', 'subtread'],\n 'daud': ['addu', 'dadu', 'daud', 'duad'],\n 'daunch': ['chandu', 'daunch'],\n 'daunter': ['daunter', 'unarted', 'unrated', 'untread'],\n 'dauntless': ['adultness', 'dauntless'],\n 'daur': ['ardu', 'daur', 'dura'],\n 'dave': ['dave', 'deva', 'vade', 'veda'],\n 'daven': ['daven', 'vaned'],\n 'davy': ['davy', 'vady'],\n 'daw': ['awd', 'daw', 'wad'],\n 'dawdler': ['dawdler', 'waddler'],\n 'dawdling': ['dawdling', 'waddling'],\n 'dawdlingly': ['dawdlingly', 'waddlingly'],\n 'dawdy': ['dawdy', 'waddy'],\n 'dawn': ['dawn', 'wand'],\n 'dawnlike': ['dawnlike', 'wandlike'],\n 'dawny': ['dawny', 'wandy'],\n 'day': ['ady', 'day', 'yad'],\n 'dayal': ['adlay', 'dayal'],\n 'dayfly': ['dayfly', 'ladyfy'],\n 'days': ['days', 'dyas'],\n 'daysman': ['daysman', 'mandyas'],\n 'daytime': ['daytime', 'maytide'],\n 'daywork': ['daywork', 'workday'],\n 'daze': ['adze', 'daze'],\n 'de': ['de', 'ed'],\n 'deacon': ['acnode', 'deacon'],\n 'deaconship': ['deaconship', 'endophasic'],\n 'dead': ['dade', 'dead', 'edda'],\n 'deadborn': ['deadborn', 'endboard'],\n 'deadener': ['deadener', 'endeared'],\n 'deadlock': ['deadlock', 'deckload'],\n 'deaf': ['deaf', 'fade'],\n 'deair': ['aider', 'deair', 'irade', 'redia'],\n 'deal': ['dale', 'deal', 'lade', 'lead', 'leda'],\n 'dealable': ['dealable', 'leadable'],\n 'dealation': ['atloidean', 'dealation'],\n 'dealer': ['dealer', 'leader', 'redeal', 'relade', 'relead'],\n 'dealership': ['dealership', 'leadership'],\n 'dealing': ['adeling', 'dealing', 'leading'],\n 'dealt': ['adlet', 'dealt', 'delta', 'lated', 'taled'],\n 'deaminase': ['deaminase', 'mesadenia'],\n 'dean': ['ande', 'dane', 'dean', 'edna'],\n 'deaner': ['deaner', 'endear'],\n 'deaness': ['deaness', 'edessan'],\n 'deaquation': ['adequation', 'deaquation'],\n 'dear': ['ared', 'daer', 'dare', 'dear', 'read'],\n 'dearie': ['aeried', 'dearie'],\n 'dearth': ['dearth', 'hatred', 'rathed', 'thread'],\n 'deary': ['deary', 'deray', 'rayed', 'ready', 'yeard'],\n 'deash': ['deash', 'hades', 'sadhe', 'shade'],\n 'deasil': ['aisled', 'deasil', 'ladies', 'sailed'],\n 'deave': ['deave', 'eaved', 'evade'],\n 'deb': ['bed', 'deb'],\n 'debacle': ['belaced', 'debacle'],\n 'debar': ['ardeb', 'beard', 'bread', 'debar'],\n 'debark': ['bedark', 'debark'],\n 'debaser': ['debaser', 'sabered'],\n 'debater': ['betread', 'debater'],\n 'deben': ['beden', 'deben', 'deneb'],\n 'debi': ['beid', 'bide', 'debi', 'dieb'],\n 'debile': ['debile', 'edible'],\n 'debit': ['bidet', 'debit'],\n 'debosh': ['beshod', 'debosh'],\n 'debrief': ['debrief', 'defiber', 'fibered'],\n 'debutant': ['debutant', 'unbatted'],\n 'debutante': ['debutante', 'unabetted'],\n 'decachord': ['decachord', 'dodecarch'],\n 'decadic': ['caddice', 'decadic'],\n 'decal': ['clead', 'decal', 'laced'],\n 'decalin': ['cladine', 'decalin', 'iceland'],\n 'decaliter': ['decaliter', 'decalitre'],\n 'decalitre': ['decaliter', 'decalitre'],\n 'decameter': ['decameter', 'decametre'],\n 'decametre': ['decameter', 'decametre'],\n 'decan': ['dance', 'decan'],\n 'decanal': ['candela', 'decanal'],\n 'decani': ['decani', 'decian'],\n 'decant': ['cadent', 'canted', 'decant'],\n 'decantate': ['catenated', 'decantate'],\n 'decanter': ['crenated', 'decanter', 'nectared'],\n 'decantherous': ['countershade', 'decantherous'],\n 'decap': ['caped', 'decap', 'paced'],\n 'decart': ['cedrat', 'decart', 'redact'],\n 'decastere': ['decastere', 'desecrate'],\n 'decator': ['cordate', 'decator', 'redcoat'],\n 'decay': ['acedy', 'decay'],\n 'deceiver': ['deceiver', 'received'],\n 'decennia': ['cadinene', 'decennia', 'enneadic'],\n 'decennial': ['celandine', 'decennial'],\n 'decent': ['cedent', 'decent'],\n 'decenter': ['centered', 'decenter', 'decentre', 'recedent'],\n 'decentre': ['centered', 'decenter', 'decentre', 'recedent'],\n 'decern': ['cendre', 'decern'],\n 'decian': ['decani', 'decian'],\n 'deciatine': ['deciatine', 'diacetine', 'taenicide', 'teniacide'],\n 'decider': ['decider', 'decried'],\n 'decillion': ['celloidin', 'collidine', 'decillion'],\n 'decima': ['amiced', 'decima'],\n 'decimal': ['camelid', 'decimal', 'declaim', 'medical'],\n 'decimally': ['decimally', 'medically'],\n 'decimate': ['decimate', 'medicate'],\n 'decimation': ['decimation', 'medication'],\n 'decimator': ['decimator', 'medicator', 'mordicate'],\n 'decimestrial': ['decimestrial', 'sedimetrical'],\n 'decimosexto': ['decimosexto', 'sextodecimo'],\n 'deckel': ['deckel', 'deckle'],\n 'decker': ['decker', 'redeck'],\n 'deckle': ['deckel', 'deckle'],\n 'deckload': ['deadlock', 'deckload'],\n 'declaim': ['camelid', 'decimal', 'declaim', 'medical'],\n 'declaimer': ['declaimer', 'demiracle'],\n 'declaration': ['declaration', 'redactional'],\n 'declare': ['cedrela', 'creedal', 'declare'],\n 'declass': ['classed', 'declass'],\n 'declinate': ['declinate', 'encitadel'],\n 'declinatory': ['adrenolytic', 'declinatory'],\n 'decoat': ['coated', 'decoat'],\n 'decollate': ['decollate', 'ocellated'],\n 'decollator': ['corollated', 'decollator'],\n 'decolor': ['colored', 'croodle', 'decolor'],\n 'decompress': ['compressed', 'decompress'],\n 'deconsider': ['considered', 'deconsider'],\n 'decorate': ['decorate', 'ocreated'],\n 'decoration': ['carotenoid', 'coronadite', 'decoration'],\n 'decorist': ['decorist', 'sectroid'],\n 'decream': ['decream', 'racemed'],\n 'decree': ['decree', 'recede'],\n 'decreer': ['decreer', 'receder'],\n 'decreet': ['decreet', 'decrete'],\n 'decrepit': ['decrepit', 'depicter', 'precited'],\n 'decrete': ['decreet', 'decrete'],\n 'decretist': ['decretist', 'trisected'],\n 'decrial': ['decrial', 'radicel', 'radicle'],\n 'decried': ['decider', 'decried'],\n 'decrown': ['crowned', 'decrown'],\n 'decry': ['cedry', 'decry'],\n 'decurionate': ['counteridea', 'decurionate'],\n 'decurrency': ['decurrency', 'recrudency'],\n 'decursion': ['cinderous', 'decursion'],\n 'decus': ['decus', 'duces'],\n 'decyl': ['clyde', 'decyl'],\n 'decylic': ['cyclide', 'decylic', 'dicycle'],\n 'dedan': ['dedan', 'denda'],\n 'dedicant': ['addicent', 'dedicant'],\n 'dedo': ['dedo', 'dode', 'eddo'],\n 'deduce': ['deduce', 'deuced'],\n 'deduct': ['deduct', 'ducted'],\n 'deem': ['deem', 'deme', 'mede', 'meed'],\n 'deemer': ['deemer', 'meered', 'redeem', 'remede'],\n 'deep': ['deep', 'peed'],\n 'deer': ['deer', 'dere', 'dree', 'rede', 'reed'],\n 'deerhair': ['deerhair', 'dehairer'],\n 'deerhorn': ['deerhorn', 'dehorner'],\n 'deerwood': ['deerwood', 'doorweed'],\n 'defat': ['defat', 'fated'],\n 'defaulter': ['defaulter', 'redefault'],\n 'defeater': ['defeater', 'federate', 'redefeat'],\n 'defensor': ['defensor', 'foresend'],\n 'defer': ['defer', 'freed'],\n 'defial': ['afield', 'defial'],\n 'defiber': ['debrief', 'defiber', 'fibered'],\n 'defile': ['defile', 'fidele'],\n 'defiled': ['defiled', 'fielded'],\n 'defiler': ['defiler', 'fielder'],\n 'definable': ['beanfield', 'definable'],\n 'define': ['define', 'infeed'],\n 'definer': ['definer', 'refined'],\n 'deflect': ['clefted', 'deflect'],\n 'deflesh': ['deflesh', 'fleshed'],\n 'deflex': ['deflex', 'flexed'],\n 'deflower': ['deflower', 'flowered'],\n 'defluent': ['defluent', 'unfelted'],\n 'defog': ['defog', 'fodge'],\n 'deforciant': ['deforciant', 'fornicated'],\n 'deforest': ['deforest', 'forested'],\n 'deform': ['deform', 'formed'],\n 'deformer': ['deformer', 'reformed'],\n 'defray': ['defray', 'frayed'],\n 'defrost': ['defrost', 'frosted'],\n 'deg': ['deg', 'ged'],\n 'degarnish': ['degarnish', 'garnished'],\n 'degasser': ['degasser', 'dressage'],\n 'degelation': ['degelation', 'delegation'],\n 'degrain': ['degrain', 'deraign', 'deringa', 'gradine', 'grained', 'reading'],\n 'degu': ['degu', 'gude'],\n 'dehair': ['dehair', 'haired'],\n 'dehairer': ['deerhair', 'dehairer'],\n 'dehorn': ['dehorn', 'horned'],\n 'dehorner': ['deerhorn', 'dehorner'],\n 'dehors': ['dehors', 'rhodes', 'shoder', 'shored'],\n 'dehortation': ['dehortation', 'theriodonta'],\n 'dehusk': ['dehusk', 'husked'],\n 'deicer': ['ceride', 'deicer'],\n 'deictical': ['deictical', 'dialectic'],\n 'deification': ['deification', 'edification'],\n 'deificatory': ['deificatory', 'edificatory'],\n 'deifier': ['deifier', 'edifier'],\n 'deify': ['deify', 'edify'],\n 'deign': ['deign', 'dinge', 'nidge'],\n 'deino': ['deino', 'dione', 'edoni'],\n 'deinocephalia': ['deinocephalia', 'palaeechinoid'],\n 'deinos': ['deinos', 'donsie', 'inodes', 'onside'],\n 'deipara': ['deipara', 'paridae'],\n 'deirdre': ['deirdre', 'derider', 'derride', 'ridered'],\n 'deism': ['deism', 'disme'],\n 'deist': ['deist', 'steid'],\n 'deistic': ['deistic', 'dietics'],\n 'deistically': ['deistically', 'dialystelic'],\n 'deity': ['deity', 'tydie'],\n 'deityship': ['deityship', 'diphysite'],\n 'del': ['del', 'eld', 'led'],\n 'delaine': ['adeline', 'daniele', 'delaine'],\n 'delaminate': ['antemedial', 'delaminate'],\n 'delapse': ['delapse', 'sepaled'],\n 'delate': ['delate', 'elated'],\n 'delater': ['delater', 'related', 'treadle'],\n 'delator': ['delator', 'leotard'],\n 'delawn': ['delawn', 'lawned', 'wandle'],\n 'delay': ['delay', 'leady'],\n 'delayer': ['delayer', 'layered', 'redelay'],\n 'delayful': ['delayful', 'feudally'],\n 'dele': ['dele', 'lede', 'leed'],\n 'delead': ['delead', 'leaded'],\n 'delegation': ['degelation', 'delegation'],\n 'delegatory': ['delegatory', 'derogately'],\n 'delete': ['delete', 'teedle'],\n 'delf': ['delf', 'fled'],\n 'delhi': ['delhi', 'hield'],\n 'delia': ['adiel', 'delia', 'ideal'],\n 'delian': ['aldine', 'daniel', 'delian', 'denial', 'enalid', 'leadin'],\n 'delible': ['bellied', 'delible'],\n 'delicateness': ['delicateness', 'delicatessen'],\n 'delicatessen': ['delicateness', 'delicatessen'],\n 'delichon': ['chelidon', 'chelonid', 'delichon'],\n 'delict': ['delict', 'deltic'],\n 'deligation': ['deligation', 'gadolinite', 'gelatinoid'],\n 'delignate': ['delignate', 'gelatined'],\n 'delimit': ['delimit', 'limited'],\n 'delimitation': ['delimitation', 'mniotiltidae'],\n 'delineator': ['delineator', 'rondeletia'],\n 'delint': ['delint', 'dentil'],\n 'delirament': ['delirament', 'derailment'],\n 'deliriant': ['deliriant', 'draintile', 'interlaid'],\n 'deliver': ['deliver', 'deviler', 'livered'],\n 'deliverer': ['deliverer', 'redeliver'],\n 'della': ['dalle', 'della', 'ladle'],\n 'deloul': ['deloul', 'duello'],\n 'delphinius': ['delphinius', 'sulphinide'],\n 'delta': ['adlet', 'dealt', 'delta', 'lated', 'taled'],\n 'deltaic': ['citadel', 'deltaic', 'dialect', 'edictal', 'lactide'],\n 'deltic': ['delict', 'deltic'],\n 'deluding': ['deluding', 'ungilded'],\n 'delusion': ['delusion', 'unsoiled'],\n 'delusionist': ['delusionist', 'indissolute'],\n 'deluster': ['deluster', 'ulstered'],\n 'demal': ['demal', 'medal'],\n 'demand': ['damned', 'demand', 'madden'],\n 'demander': ['demander', 'redemand'],\n 'demanding': ['demanding', 'maddening'],\n 'demandingly': ['demandingly', 'maddeningly'],\n 'demantoid': ['demantoid', 'dominated'],\n 'demarcate': ['camerated', 'demarcate'],\n 'demarcation': ['demarcation', 'democratian'],\n 'demark': ['demark', 'marked'],\n 'demast': ['demast', 'masted'],\n 'deme': ['deem', 'deme', 'mede', 'meed'],\n 'demean': ['amende', 'demean', 'meaned', 'nadeem'],\n 'demeanor': ['demeanor', 'enamored'],\n 'dementia': ['dementia', 'mendaite'],\n 'demerit': ['demerit', 'dimeter', 'merited', 'mitered'],\n 'demerol': ['demerol', 'modeler', 'remodel'],\n 'demetrian': ['demetrian', 'dermatine', 'meandrite', 'minareted'],\n 'demi': ['demi', 'diem', 'dime', 'mide'],\n 'demibrute': ['bermudite', 'demibrute'],\n 'demicannon': ['cinnamoned', 'demicannon'],\n 'demicanon': ['demicanon', 'dominance'],\n 'demidog': ['demidog', 'demigod'],\n 'demigod': ['demidog', 'demigod'],\n 'demiluster': ['demiluster', 'demilustre'],\n 'demilustre': ['demiluster', 'demilustre'],\n 'demiparallel': ['demiparallel', 'imparalleled'],\n 'demipronation': ['demipronation', 'preadmonition', 'predomination'],\n 'demiracle': ['declaimer', 'demiracle'],\n 'demiram': ['demiram', 'mermaid'],\n 'demirep': ['demirep', 'epiderm', 'impeder', 'remiped'],\n 'demirobe': ['demirobe', 'embodier'],\n 'demisable': ['beadleism', 'demisable'],\n 'demise': ['demise', 'diseme'],\n 'demit': ['demit', 'timed'],\n 'demiturned': ['demiturned', 'undertimed'],\n 'demob': ['demob', 'mobed'],\n 'democratian': ['demarcation', 'democratian'],\n 'demolisher': ['demolisher', 'redemolish'],\n 'demoniac': ['codamine', 'comedian', 'daemonic', 'demoniac'],\n 'demoniacism': ['demoniacism', 'seminomadic'],\n 'demonial': ['demonial', 'melanoid'],\n 'demoniast': ['ademonist', 'demoniast', 'staminode'],\n 'demonish': ['demonish', 'hedonism'],\n 'demonism': ['demonism', 'medimnos', 'misnomed'],\n 'demotics': ['comedist', 'demotics', 'docetism', 'domestic'],\n 'demotion': ['demotion', 'entomoid', 'moontide'],\n 'demount': ['demount', 'mounted'],\n 'demurrer': ['demurrer', 'murderer'],\n 'demurring': ['demurring', 'murdering'],\n 'demurringly': ['demurringly', 'murderingly'],\n 'demy': ['demy', 'emyd'],\n 'den': ['den', 'end', 'ned'],\n 'denarius': ['denarius', 'desaurin', 'unraised'],\n 'denaro': ['denaro', 'orenda'],\n 'denary': ['denary', 'yander'],\n 'denat': ['denat', 'entad'],\n 'denature': ['denature', 'undereat'],\n 'denda': ['dedan', 'denda'],\n 'dendral': ['dandler', 'dendral'],\n 'dendrite': ['dendrite', 'tindered'],\n 'dendrites': ['dendrites', 'distender', 'redistend'],\n 'dene': ['dene', 'eden', 'need'],\n 'deneb': ['beden', 'deben', 'deneb'],\n 'dengue': ['dengue', 'unedge'],\n 'denial': ['aldine', 'daniel', 'delian', 'denial', 'enalid', 'leadin'],\n 'denier': ['denier', 'nereid'],\n 'denierer': ['denierer', 'reindeer'],\n 'denigrate': ['argentide', 'denigrate', 'dinergate'],\n 'denim': ['denim', 'mendi'],\n 'denis': ['denis', 'snide'],\n 'denominate': ['denominate', 'emendation'],\n 'denotable': ['denotable', 'detonable'],\n 'denotation': ['denotation', 'detonation'],\n 'denotative': ['denotative', 'detonative'],\n 'denotive': ['denotive', 'devonite'],\n 'denouncer': ['denouncer', 'unencored'],\n 'dense': ['dense', 'needs'],\n 'denshare': ['denshare', 'seerhand'],\n 'denshire': ['denshire', 'drisheen'],\n 'density': ['density', 'destiny'],\n 'dent': ['dent', 'tend'],\n 'dental': ['dental', 'tandle'],\n 'dentale': ['dalteen', 'dentale', 'edental'],\n 'dentalism': ['dentalism', 'dismantle'],\n 'dentaria': ['anteriad', 'atridean', 'dentaria'],\n 'dentatoserrate': ['dentatoserrate', 'serratodentate'],\n 'dentatosinuate': ['dentatosinuate', 'sinuatodentate'],\n 'denter': ['denter', 'rented', 'tender'],\n 'dentex': ['dentex', 'extend'],\n 'denticle': ['cliented', 'denticle'],\n 'denticular': ['denticular', 'unarticled'],\n 'dentil': ['delint', 'dentil'],\n 'dentilingual': ['dentilingual', 'indulgential', 'linguidental'],\n 'dentin': ['dentin', 'indent', 'intend', 'tinned'],\n 'dentinal': ['dentinal', 'teinland', 'tendinal'],\n 'dentine': ['dentine', 'nineted'],\n 'dentinitis': ['dentinitis', 'tendinitis'],\n 'dentinoma': ['dentinoma', 'nominated'],\n 'dentist': ['dentist', 'distent', 'stinted'],\n 'dentolabial': ['dentolabial', 'labiodental'],\n 'dentolingual': ['dentolingual', 'linguodental'],\n 'denture': ['denture', 'untreed'],\n 'denudative': ['denudative', 'undeviated'],\n 'denude': ['denude', 'dudeen'],\n 'denumeral': ['denumeral', 'undermeal', 'unrealmed'],\n 'denunciator': ['denunciator', 'underaction'],\n 'deny': ['deny', 'dyne'],\n 'deoppilant': ['deoppilant', 'pentaploid'],\n 'deota': ['deota', 'todea'],\n 'depa': ['depa', 'peda'],\n 'depaint': ['depaint', 'inadept', 'painted', 'patined'],\n 'depart': ['depart', 'parted', 'petard'],\n 'departition': ['departition', 'partitioned', 'trepidation'],\n 'departure': ['apertured', 'departure'],\n 'depas': ['depas', 'sepad', 'spade'],\n 'depencil': ['depencil', 'penciled', 'pendicle'],\n 'depender': ['depender', 'redepend'],\n 'depetticoat': ['depetticoat', 'petticoated'],\n 'depicter': ['decrepit', 'depicter', 'precited'],\n 'depiction': ['depiction', 'pectinoid'],\n 'depilate': ['depilate', 'leptidae', 'pileated'],\n 'depletion': ['depletion', 'diplotene'],\n 'deploration': ['deploration', 'periodontal'],\n 'deploy': ['deploy', 'podley'],\n 'depoh': ['depoh', 'ephod', 'hoped'],\n 'depolish': ['depolish', 'polished'],\n 'deport': ['deport', 'ported', 'redtop'],\n 'deportation': ['antitorpedo', 'deportation'],\n 'deposal': ['adelops', 'deposal'],\n 'deposer': ['deposer', 'reposed'],\n 'deposit': ['deposit', 'topside'],\n 'deposition': ['deposition', 'positioned'],\n 'depositional': ['depositional', 'despoliation'],\n 'depositure': ['depositure', 'pterideous'],\n 'deprave': ['deprave', 'pervade'],\n 'depraver': ['depraver', 'pervader'],\n 'depravingly': ['depravingly', 'pervadingly'],\n 'deprecable': ['deprecable', 'precedable'],\n 'deprecation': ['capernoited', 'deprecation'],\n 'depreciation': ['depreciation', 'predeication'],\n 'depressant': ['depressant', 'partedness'],\n 'deprint': ['deprint', 'printed'],\n 'deprival': ['deprival', 'prevalid'],\n 'deprivate': ['deprivate', 'predative'],\n 'deprive': ['deprive', 'previde'],\n 'depriver': ['depriver', 'predrive'],\n 'depurant': ['depurant', 'unparted'],\n 'depuration': ['depuration', 'portunidae'],\n 'deraign': ['degrain', 'deraign', 'deringa', 'gradine', 'grained', 'reading'],\n 'derail': ['ariled', 'derail', 'dialer'],\n 'derailment': ['delirament', 'derailment'],\n 'derange': ['derange', 'enraged', 'gardeen', 'gerenda', 'grandee', 'grenade'],\n 'deranged': ['deranged', 'gardened'],\n 'deranger': ['deranger', 'gardener'],\n 'derat': ['dater', 'derat', 'detar', 'drate', 'rated', 'trade', 'tread'],\n 'derate': ['derate', 'redate'],\n 'derater': ['derater', 'retrade', 'retread', 'treader'],\n 'deray': ['deary', 'deray', 'rayed', 'ready', 'yeard'],\n 'dere': ['deer', 'dere', 'dree', 'rede', 'reed'],\n 'deregister': ['deregister', 'registered'],\n 'derelict': ['derelict', 'relicted'],\n 'deric': ['cider', 'cried', 'deric', 'dicer'],\n 'derider': ['deirdre', 'derider', 'derride', 'ridered'],\n 'deringa': ['degrain', 'deraign', 'deringa', 'gradine', 'grained', 'reading'],\n 'derision': ['derision', 'ironside', 'resinoid', 'sirenoid'],\n 'derivation': ['derivation', 'ordinative'],\n 'derivational': ['derivational', 'revalidation'],\n 'derive': ['derive', 'redive'],\n 'deriver': ['deriver', 'redrive', 'rivered'],\n 'derma': ['armed', 'derma', 'dream', 'ramed'],\n 'dermad': ['dermad', 'madder'],\n 'dermal': ['dermal', 'marled', 'medlar'],\n 'dermatic': ['dermatic', 'timecard'],\n 'dermatine': ['demetrian', 'dermatine', 'meandrite', 'minareted'],\n 'dermatoneurosis': ['dermatoneurosis', 'neurodermatosis'],\n 'dermatophone': ['dermatophone', 'herpetomonad'],\n 'dermoblast': ['blastoderm', 'dermoblast'],\n 'dermol': ['dermol', 'molder', 'remold'],\n 'dermosclerite': ['dermosclerite', 'sclerodermite'],\n 'dern': ['dern', 'rend'],\n 'derogately': ['delegatory', 'derogately'],\n 'derogation': ['derogation', 'trogonidae'],\n 'derout': ['derout', 'detour', 'douter'],\n 'derride': ['deirdre', 'derider', 'derride', 'ridered'],\n 'derries': ['derries', 'desirer', 'resider', 'serried'],\n 'derringer': ['derringer', 'regrinder'],\n 'derry': ['derry', 'redry', 'ryder'],\n 'derust': ['derust', 'duster'],\n 'desalt': ['desalt', 'salted'],\n 'desand': ['desand', 'sadden', 'sanded'],\n 'desaurin': ['denarius', 'desaurin', 'unraised'],\n 'descendant': ['adscendent', 'descendant'],\n 'descender': ['descender', 'redescend'],\n 'descent': ['descent', 'scented'],\n 'description': ['description', 'discerption'],\n 'desecrate': ['decastere', 'desecrate'],\n 'desecration': ['considerate', 'desecration'],\n 'deseed': ['deseed', 'seeded'],\n 'desertic': ['creedist', 'desertic', 'discreet', 'discrete'],\n 'desertion': ['desertion', 'detersion'],\n 'deserver': ['deserver', 'reserved', 'reversed'],\n 'desex': ['desex', 'sexed'],\n 'deshabille': ['deshabille', 'shieldable'],\n 'desi': ['desi', 'ides', 'seid', 'side'],\n 'desiccation': ['desiccation', 'discoactine'],\n 'desight': ['desight', 'sighted'],\n 'design': ['design', 'singed'],\n 'designer': ['designer', 'redesign', 'resigned'],\n 'desilver': ['desilver', 'silvered'],\n 'desirable': ['desirable', 'redisable'],\n 'desire': ['desire', 'reside'],\n 'desirer': ['derries', 'desirer', 'resider', 'serried'],\n 'desirous': ['desirous', 'siderous'],\n 'desition': ['desition', 'sedition'],\n 'desma': ['desma', 'mesad'],\n 'desman': ['amends', 'desman'],\n 'desmopathy': ['desmopathy', 'phymatodes'],\n 'desorption': ['desorption', 'priodontes'],\n 'despair': ['despair', 'pardesi'],\n 'despairing': ['despairing', 'spinigrade'],\n 'desperation': ['desperation', 'esperantido'],\n 'despise': ['despise', 'pedesis'],\n 'despiser': ['despiser', 'disperse'],\n 'despoil': ['despoil', 'soliped', 'spoiled'],\n 'despoiler': ['despoiler', 'leprosied'],\n 'despoliation': ['depositional', 'despoliation'],\n 'despot': ['despot', 'posted'],\n 'despotat': ['despotat', 'postdate'],\n 'dessert': ['dessert', 'tressed'],\n 'destain': ['destain', 'instead', 'sainted', 'satined'],\n 'destine': ['destine', 'edestin'],\n 'destinism': ['destinism', 'timidness'],\n 'destiny': ['density', 'destiny'],\n 'desugar': ['desugar', 'sugared'],\n 'detail': ['detail', 'dietal', 'dilate', 'edital', 'tailed'],\n 'detailer': ['detailer', 'elaterid'],\n 'detain': ['danite', 'detain'],\n 'detainal': ['danalite', 'detainal'],\n 'detar': ['dater', 'derat', 'detar', 'drate', 'rated', 'trade', 'tread'],\n 'detassel': ['dateless', 'detassel'],\n 'detax': ['detax', 'taxed'],\n 'detecter': ['detecter', 'redetect'],\n 'detent': ['detent', 'netted', 'tented'],\n 'deter': ['deter', 'treed'],\n 'determinant': ['determinant', 'detrainment'],\n 'detersion': ['desertion', 'detersion'],\n 'detest': ['detest', 'tested'],\n 'dethrone': ['dethrone', 'threnode'],\n 'detin': ['detin', 'teind', 'tined'],\n 'detinet': ['detinet', 'dinette'],\n 'detonable': ['denotable', 'detonable'],\n 'detonation': ['denotation', 'detonation'],\n 'detonative': ['denotative', 'detonative'],\n 'detonator': ['detonator', 'tetraodon'],\n 'detour': ['derout', 'detour', 'douter'],\n 'detracter': ['detracter', 'retracted'],\n 'detraction': ['detraction', 'doctrinate', 'tetarconid'],\n 'detrain': ['antired', 'detrain', 'randite', 'trained'],\n 'detrainment': ['determinant', 'detrainment'],\n 'detrusion': ['detrusion', 'tinderous', 'unstoried'],\n 'detrusive': ['detrusive', 'divesture', 'servitude'],\n 'deuce': ['deuce', 'educe'],\n 'deuced': ['deduce', 'deuced'],\n 'deul': ['deul', 'duel', 'leud'],\n 'deva': ['dave', 'deva', 'vade', 'veda'],\n 'devance': ['devance', 'vendace'],\n 'develin': ['develin', 'endevil'],\n 'developer': ['developer', 'redevelop'],\n 'devil': ['devil', 'divel', 'lived'],\n 'deviler': ['deliver', 'deviler', 'livered'],\n 'devisceration': ['considerative', 'devisceration'],\n 'deviser': ['deviser', 'diverse', 'revised'],\n 'devitrify': ['devitrify', 'fervidity'],\n 'devoid': ['devoid', 'voided'],\n 'devoir': ['devoir', 'voider'],\n 'devonite': ['denotive', 'devonite'],\n 'devourer': ['devourer', 'overdure', 'overrude'],\n 'devow': ['devow', 'vowed'],\n 'dew': ['dew', 'wed'],\n 'dewan': ['awned', 'dewan', 'waned'],\n 'dewater': ['dewater', 'tarweed', 'watered'],\n 'dewer': ['dewer', 'ewder', 'rewed'],\n 'dewey': ['dewey', 'weedy'],\n 'dewily': ['dewily', 'widely', 'wieldy'],\n 'dewiness': ['dewiness', 'wideness'],\n 'dewool': ['dewool', 'elwood', 'wooled'],\n 'deworm': ['deworm', 'wormed'],\n 'dewy': ['dewy', 'wyde'],\n 'dextraural': ['dextraural', 'extradural'],\n 'dextrosinistral': ['dextrosinistral', 'sinistrodextral'],\n 'dey': ['dey', 'dye', 'yed'],\n 'deyhouse': ['deyhouse', 'dyehouse'],\n 'deyship': ['deyship', 'diphyes'],\n 'dezinc': ['dezinc', 'zendic'],\n 'dha': ['dah', 'dha', 'had'],\n 'dhamnoo': ['dhamnoo', 'hoodman', 'manhood'],\n 'dhan': ['dhan', 'hand'],\n 'dharna': ['andhra', 'dharna'],\n 'dheri': ['dheri', 'hider', 'hired'],\n 'dhobi': ['bodhi', 'dhobi'],\n 'dhoon': ['dhoon', 'hondo'],\n 'dhu': ['dhu', 'hud'],\n 'di': ['di', 'id'],\n 'diabolist': ['diabolist', 'idioblast'],\n 'diacetin': ['diacetin', 'indicate'],\n 'diacetine': ['deciatine', 'diacetine', 'taenicide', 'teniacide'],\n 'diacetyl': ['diacetyl', 'lyctidae'],\n 'diachoretic': ['citharoedic', 'diachoretic'],\n 'diaclase': ['diaclase', 'sidalcea'],\n 'diaconal': ['cladonia', 'condalia', 'diaconal'],\n 'diact': ['diact', 'dicta'],\n 'diadem': ['diadem', 'mediad'],\n 'diaderm': ['admired', 'diaderm'],\n 'diaeretic': ['diaeretic', 'icteridae'],\n 'diagenetic': ['diagenetic', 'digenetica'],\n 'diageotropism': ['diageotropism', 'geodiatropism'],\n 'diagonal': ['diagonal', 'ganoidal', 'gonadial'],\n 'dial': ['dail', 'dali', 'dial', 'laid', 'lida'],\n 'dialect': ['citadel', 'deltaic', 'dialect', 'edictal', 'lactide'],\n 'dialectic': ['deictical', 'dialectic'],\n 'dialector': ['dialector', 'lacertoid'],\n 'dialer': ['ariled', 'derail', 'dialer'],\n 'dialin': ['anilid', 'dialin', 'dianil', 'inlaid'],\n 'dialing': ['dialing', 'gliadin'],\n 'dialister': ['dialister', 'trailside'],\n 'diallelon': ['diallelon', 'llandeilo'],\n 'dialogism': ['dialogism', 'sigmoidal'],\n 'dialystelic': ['deistically', 'dialystelic'],\n 'dialytic': ['calidity', 'dialytic'],\n 'diamagnet': ['agminated', 'diamagnet'],\n 'diamantine': ['diamantine', 'inanimated'],\n 'diameter': ['diameter', 'diatreme'],\n 'diametric': ['citramide', 'diametric', 'matricide'],\n 'diamide': ['amidide', 'diamide', 'mididae'],\n 'diamine': ['amidine', 'diamine'],\n 'diamorphine': ['diamorphine', 'phronimidae'],\n 'dian': ['adin', 'andi', 'dain', 'dani', 'dian', 'naid'],\n 'diana': ['danai', 'diana', 'naiad'],\n 'diander': ['diander', 'drained'],\n 'diane': ['diane', 'idean'],\n 'dianetics': ['andesitic', 'dianetics'],\n 'dianil': ['anilid', 'dialin', 'dianil', 'inlaid'],\n 'diapensia': ['diapensia', 'diaspinae'],\n 'diaper': ['diaper', 'paired'],\n 'diaphote': ['diaphote', 'hepatoid'],\n 'diaphtherin': ['diaphtherin', 'diphtherian'],\n 'diapnoic': ['diapnoic', 'pinacoid'],\n 'diapnotic': ['antipodic', 'diapnotic'],\n 'diaporthe': ['aphrodite', 'atrophied', 'diaporthe'],\n 'diarch': ['chidra', 'diarch'],\n 'diarchial': ['diarchial', 'rachidial'],\n 'diarchy': ['diarchy', 'hyracid'],\n 'diarian': ['aridian', 'diarian'],\n 'diary': ['dairy', 'diary', 'yaird'],\n 'diascia': ['ascidia', 'diascia'],\n 'diascope': ['diascope', 'psocidae', 'scopidae'],\n 'diaspinae': ['diapensia', 'diaspinae'],\n 'diastem': ['diastem', 'misdate'],\n 'diastema': ['adamsite', 'diastema'],\n 'diaster': ['astride', 'diaster', 'disrate', 'restiad', 'staired'],\n 'diastole': ['diastole', 'isolated', 'sodalite', 'solidate'],\n 'diastrophic': ['aphrodistic', 'diastrophic'],\n 'diastrophy': ['diastrophy', 'dystrophia'],\n 'diatomales': ['diatomales', 'mastoidale', 'mastoideal'],\n 'diatomean': ['diatomean', 'mantoidea'],\n 'diatomin': ['diatomin', 'domitian'],\n 'diatonic': ['actinoid', 'diatonic', 'naticoid'],\n 'diatreme': ['diameter', 'diatreme'],\n 'diatropism': ['diatropism', 'prismatoid'],\n 'dib': ['bid', 'dib'],\n 'dibatis': ['dabitis', 'dibatis'],\n 'dibber': ['dibber', 'ribbed'],\n 'dibbler': ['dibbler', 'dribble'],\n 'dibrom': ['dibrom', 'morbid'],\n 'dicaryon': ['cynaroid', 'dicaryon'],\n 'dicast': ['dicast', 'stadic'],\n 'dice': ['dice', 'iced'],\n 'dicentra': ['crinated', 'dicentra'],\n 'dicer': ['cider', 'cried', 'deric', 'dicer'],\n 'diceras': ['diceras', 'radices', 'sidecar'],\n 'dich': ['chid', 'dich'],\n 'dichroite': ['dichroite', 'erichtoid', 'theriodic'],\n 'dichromat': ['chromatid', 'dichromat'],\n 'dichter': ['dichter', 'ditcher'],\n 'dicolic': ['codicil', 'dicolic'],\n 'dicolon': ['dicolon', 'dolcino'],\n 'dicoumarin': ['acridonium', 'dicoumarin'],\n 'dicta': ['diact', 'dicta'],\n 'dictaphone': ['dictaphone', 'endopathic'],\n 'dictational': ['antidotical', 'dictational'],\n 'dictionary': ['dictionary', 'indicatory'],\n 'dicyanine': ['cyanidine', 'dicyanine'],\n 'dicycle': ['cyclide', 'decylic', 'dicycle'],\n 'dicyema': ['dicyema', 'mediacy'],\n 'diddle': ['diddle', 'lidded'],\n 'diddler': ['diddler', 'driddle'],\n 'didym': ['didym', 'middy'],\n 'die': ['die', 'ide'],\n 'dieb': ['beid', 'bide', 'debi', 'dieb'],\n 'diego': ['diego', 'dogie', 'geoid'],\n 'dielytra': ['dielytra', 'tileyard'],\n 'diem': ['demi', 'diem', 'dime', 'mide'],\n 'dier': ['dier', 'dire', 'reid', 'ride'],\n 'diesel': ['diesel', 'sedile', 'seidel'],\n 'diet': ['diet', 'dite', 'edit', 'tide', 'tied'],\n 'dietal': ['detail', 'dietal', 'dilate', 'edital', 'tailed'],\n 'dieter': ['dieter', 'tiered'],\n 'dietic': ['citied', 'dietic'],\n 'dietics': ['deistic', 'dietics'],\n 'dig': ['dig', 'gid'],\n 'digenetica': ['diagenetic', 'digenetica'],\n 'digeny': ['digeny', 'dyeing'],\n 'digester': ['digester', 'redigest'],\n 'digitalein': ['digitalein', 'diligentia'],\n 'digitation': ['digitation', 'goniatitid'],\n 'digitonin': ['digitonin', 'indigotin'],\n 'digredient': ['digredient', 'reddingite'],\n 'dihalo': ['dihalo', 'haloid'],\n 'diiambus': ['basidium', 'diiambus'],\n 'dika': ['dika', 'kaid'],\n 'dikaryon': ['ankyroid', 'dikaryon'],\n 'dike': ['dike', 'keid'],\n 'dilacerate': ['dilacerate', 'lacertidae'],\n 'dilatant': ['atlantid', 'dilatant'],\n 'dilate': ['detail', 'dietal', 'dilate', 'edital', 'tailed'],\n 'dilater': ['dilater', 'lardite', 'redtail'],\n 'dilatometric': ['calotermitid', 'dilatometric'],\n 'dilator': ['dilator', 'ortalid'],\n 'dilatory': ['adroitly', 'dilatory', 'idolatry'],\n 'diligence': ['ceilinged', 'diligence'],\n 'diligentia': ['digitalein', 'diligentia'],\n 'dillue': ['dillue', 'illude'],\n 'dilluer': ['dilluer', 'illuder'],\n 'dilo': ['dilo', 'diol', 'doli', 'idol', 'olid'],\n 'diluent': ['diluent', 'untiled'],\n 'dilute': ['dilute', 'dultie'],\n 'diluted': ['diluted', 'luddite'],\n 'dilutent': ['dilutent', 'untilted', 'untitled'],\n 'diluvian': ['diluvian', 'induvial'],\n 'dim': ['dim', 'mid'],\n 'dimatis': ['amidist', 'dimatis'],\n 'dimble': ['dimble', 'limbed'],\n 'dime': ['demi', 'diem', 'dime', 'mide'],\n 'dimer': ['dimer', 'mider'],\n 'dimera': ['admire', 'armied', 'damier', 'dimera', 'merida'],\n 'dimeran': ['adermin', 'amerind', 'dimeran'],\n 'dimerous': ['dimerous', 'soredium'],\n 'dimeter': ['demerit', 'dimeter', 'merited', 'mitered'],\n 'dimetria': ['dimetria', 'mitridae', 'tiremaid', 'triamide'],\n 'diminisher': ['diminisher', 'rediminish'],\n 'dimit': ['dimit', 'timid'],\n 'dimmer': ['dimmer', 'immerd', 'rimmed'],\n 'dimna': ['dimna', 'manid'],\n 'dimyarian': ['dimyarian', 'myrianida'],\n 'din': ['din', 'ind', 'nid'],\n 'dinah': ['ahind', 'dinah'],\n 'dinar': ['darin', 'dinar', 'drain', 'indra', 'nadir', 'ranid'],\n 'dinder': ['dinder', 'ridden', 'rinded'],\n 'dindle': ['dindle', 'niddle'],\n 'dine': ['dine', 'enid', 'inde', 'nide'],\n 'diner': ['diner', 'riden', 'rinde'],\n 'dinergate': ['argentide', 'denigrate', 'dinergate'],\n 'dinero': ['dinero', 'dorine'],\n 'dinette': ['detinet', 'dinette'],\n 'dineuric': ['dineuric', 'eurindic'],\n 'dingar': ['daring', 'dingar', 'gradin'],\n 'dinge': ['deign', 'dinge', 'nidge'],\n 'dingle': ['dingle', 'elding', 'engild', 'gilden'],\n 'dingo': ['dingo', 'doing', 'gondi', 'gonid'],\n 'dingwall': ['dingwall', 'windgall'],\n 'dingy': ['dingy', 'dying'],\n 'dinheiro': ['dinheiro', 'hernioid'],\n 'dinic': ['dinic', 'indic'],\n 'dining': ['dining', 'indign', 'niding'],\n 'dink': ['dink', 'kind'],\n 'dinkey': ['dinkey', 'kidney'],\n 'dinocerata': ['arctoidean', 'carotidean', 'cordaitean', 'dinocerata'],\n 'dinoceratan': ['carnationed', 'dinoceratan'],\n 'dinomic': ['dinomic', 'dominic'],\n 'dint': ['dint', 'tind'],\n 'dinus': ['dinus', 'indus', 'nidus'],\n 'dioeciopolygamous': ['dioeciopolygamous', 'polygamodioecious'],\n 'diogenite': ['diogenite', 'gideonite'],\n 'diol': ['dilo', 'diol', 'doli', 'idol', 'olid'],\n 'dion': ['dion', 'nodi', 'odin'],\n 'dione': ['deino', 'dione', 'edoni'],\n 'diopter': ['diopter', 'peridot', 'proetid', 'protide', 'pteroid'],\n 'dioptra': ['dioptra', 'parotid'],\n 'dioptral': ['dioptral', 'tripodal'],\n 'dioptric': ['dioptric', 'tripodic'],\n 'dioptrical': ['dioptrical', 'tripodical'],\n 'dioptry': ['dioptry', 'tripody'],\n 'diorama': ['amaroid', 'diorama'],\n 'dioramic': ['dioramic', 'dromicia'],\n 'dioscorein': ['dioscorein', 'dioscorine'],\n 'dioscorine': ['dioscorein', 'dioscorine'],\n 'dioscuri': ['dioscuri', 'sciuroid'],\n 'diose': ['diose', 'idose', 'oside'],\n 'diosmin': ['diosmin', 'odinism'],\n 'diosmotic': ['diosmotic', 'sodomitic'],\n 'diparentum': ['diparentum', 'unimparted'],\n 'dipetto': ['dipetto', 'diptote'],\n 'diphase': ['aphides', 'diphase'],\n 'diphaser': ['diphaser', 'parished', 'raphides', 'sephardi'],\n 'diphosphate': ['diphosphate', 'phosphatide'],\n 'diphtherian': ['diaphtherin', 'diphtherian'],\n 'diphyes': ['deyship', 'diphyes'],\n 'diphysite': ['deityship', 'diphysite'],\n 'dipicrate': ['dipicrate', 'patricide', 'pediatric'],\n 'diplanar': ['diplanar', 'prandial'],\n 'diplasion': ['aspidinol', 'diplasion'],\n 'dipleura': ['dipleura', 'epidural'],\n 'dipleural': ['dipleural', 'preludial'],\n 'diplocephalus': ['diplocephalus', 'pseudophallic'],\n 'diploe': ['diploe', 'dipole'],\n 'diploetic': ['diploetic', 'lepidotic'],\n 'diplotene': ['depletion', 'diplotene'],\n 'dipnoan': ['dipnoan', 'nonpaid', 'pandion'],\n 'dipolar': ['dipolar', 'polarid'],\n 'dipole': ['diploe', 'dipole'],\n 'dipsaceous': ['dipsaceous', 'spadiceous'],\n 'dipter': ['dipter', 'trepid'],\n 'dipteraceous': ['dipteraceous', 'epiceratodus'],\n 'dipteral': ['dipteral', 'tripedal'],\n 'dipterological': ['dipterological', 'pteridological'],\n 'dipterologist': ['dipterologist', 'pteridologist'],\n 'dipterology': ['dipterology', 'pteridology'],\n 'dipteros': ['dipteros', 'portside'],\n 'diptote': ['dipetto', 'diptote'],\n 'dirca': ['acrid', 'caird', 'carid', 'darci', 'daric', 'dirca'],\n 'dircaean': ['caridean', 'dircaean', 'radiance'],\n 'dire': ['dier', 'dire', 'reid', 'ride'],\n 'direct': ['credit', 'direct'],\n 'directable': ['creditable', 'directable'],\n 'directer': ['cedriret', 'directer', 'recredit', 'redirect'],\n 'direction': ['cretinoid', 'direction'],\n 'directional': ['clitoridean', 'directional'],\n 'directive': ['creditive', 'directive'],\n 'directly': ['directly', 'tridecyl'],\n 'directoire': ['cordierite', 'directoire'],\n 'director': ['creditor', 'director'],\n 'directorship': ['creditorship', 'directorship'],\n 'directress': ['creditress', 'directress'],\n 'directrix': ['creditrix', 'directrix'],\n 'direly': ['direly', 'idyler'],\n 'direption': ['direption', 'perdition', 'tropidine'],\n 'dirge': ['dirge', 'gride', 'redig', 'ridge'],\n 'dirgelike': ['dirgelike', 'ridgelike'],\n 'dirgeman': ['dirgeman', 'margined', 'midrange'],\n 'dirgler': ['dirgler', 'girdler'],\n 'dirten': ['dirten', 'rident', 'tinder'],\n 'dis': ['dis', 'sid'],\n 'disa': ['dais', 'dasi', 'disa', 'said', 'sida'],\n 'disadventure': ['disadventure', 'unadvertised'],\n 'disappearer': ['disappearer', 'redisappear'],\n 'disarmed': ['disarmed', 'misdread'],\n 'disastimeter': ['disastimeter', 'semistriated'],\n 'disattire': ['disattire', 'distraite'],\n 'disbud': ['disbud', 'disdub'],\n 'disburse': ['disburse', 'subsider'],\n 'discastle': ['clidastes', 'discastle'],\n 'discern': ['discern', 'rescind'],\n 'discerner': ['discerner', 'rescinder'],\n 'discernment': ['discernment', 'rescindment'],\n 'discerp': ['crisped', 'discerp'],\n 'discerption': ['description', 'discerption'],\n 'disclike': ['disclike', 'sicklied'],\n 'discoactine': ['desiccation', 'discoactine'],\n 'discoid': ['discoid', 'disodic'],\n 'discontinuer': ['discontinuer', 'undiscretion'],\n 'discounter': ['discounter', 'rediscount'],\n 'discoverer': ['discoverer', 'rediscover'],\n 'discreate': ['discreate', 'sericated'],\n 'discreet': ['creedist', 'desertic', 'discreet', 'discrete'],\n 'discreetly': ['discreetly', 'discretely'],\n 'discreetness': ['discreetness', 'discreteness'],\n 'discrepate': ['discrepate', 'pederastic'],\n 'discrete': ['creedist', 'desertic', 'discreet', 'discrete'],\n 'discretely': ['discreetly', 'discretely'],\n 'discreteness': ['discreetness', 'discreteness'],\n 'discretion': ['discretion', 'soricident'],\n 'discriminator': ['discriminator', 'doctrinairism'],\n 'disculpate': ['disculpate', 'spiculated'],\n 'discusser': ['discusser', 'rediscuss'],\n 'discutable': ['discutable', 'subdeltaic', 'subdialect'],\n 'disdub': ['disbud', 'disdub'],\n 'disease': ['disease', 'seaside'],\n 'diseme': ['demise', 'diseme'],\n 'disenact': ['disenact', 'distance'],\n 'disendow': ['disendow', 'downside'],\n 'disentwine': ['disentwine', 'indentwise'],\n 'disharmony': ['disharmony', 'hydramnios'],\n 'dishearten': ['dishearten', 'intershade'],\n 'dished': ['dished', 'eddish'],\n 'disherent': ['disherent', 'hinderest', 'tenderish'],\n 'dishling': ['dishling', 'hidlings'],\n 'dishonor': ['dishonor', 'ironshod'],\n 'dishorn': ['dishorn', 'dronish'],\n 'dishpan': ['daphnis', 'dishpan'],\n 'disilicate': ['disilicate', 'idealistic'],\n 'disimprove': ['disimprove', 'misprovide'],\n 'disk': ['disk', 'kids', 'skid'],\n 'dislocate': ['dislocate', 'lactoside'],\n 'disman': ['danism', 'disman'],\n 'dismantle': ['dentalism', 'dismantle'],\n 'disme': ['deism', 'disme'],\n 'dismemberer': ['dismemberer', 'disremember'],\n 'disnature': ['disnature', 'sturnidae', 'truandise'],\n 'disnest': ['disnest', 'dissent'],\n 'disodic': ['discoid', 'disodic'],\n 'disparage': ['disparage', 'grapsidae'],\n 'disparation': ['disparation', 'tridiapason'],\n 'dispatcher': ['dispatcher', 'redispatch'],\n 'dispensable': ['dispensable', 'piebaldness'],\n 'dispense': ['dispense', 'piedness'],\n 'disperse': ['despiser', 'disperse'],\n 'dispetal': ['dispetal', 'pedalist'],\n 'dispireme': ['dispireme', 'epidermis'],\n 'displayer': ['displayer', 'redisplay'],\n 'displeaser': ['displeaser', 'pearlsides'],\n 'disponee': ['disponee', 'openside'],\n 'disporum': ['disporum', 'misproud'],\n 'disprepare': ['disprepare', 'predespair'],\n 'disrate': ['astride', 'diaster', 'disrate', 'restiad', 'staired'],\n 'disremember': ['dismemberer', 'disremember'],\n 'disrepute': ['disrepute', 'redispute'],\n 'disrespect': ['disrespect', 'disscepter'],\n 'disrupt': ['disrupt', 'prudist'],\n 'disscepter': ['disrespect', 'disscepter'],\n 'disseat': ['disseat', 'sestiad'],\n 'dissector': ['crosstied', 'dissector'],\n 'dissent': ['disnest', 'dissent'],\n 'dissenter': ['dissenter', 'tiredness'],\n 'dissertate': ['dissertate', 'statesider'],\n 'disserve': ['disserve', 'dissever'],\n 'dissever': ['disserve', 'dissever'],\n 'dissocial': ['cissoidal', 'dissocial'],\n 'dissolve': ['dissolve', 'voidless'],\n 'dissoul': ['dissoul', 'dulosis', 'solidus'],\n 'distale': ['distale', 'salited'],\n 'distance': ['disenact', 'distance'],\n 'distant': ['dantist', 'distant'],\n 'distater': ['distater', 'striated'],\n 'distender': ['dendrites', 'distender', 'redistend'],\n 'distent': ['dentist', 'distent', 'stinted'],\n 'distich': ['distich', 'stichid'],\n 'distillage': ['distillage', 'sigillated'],\n 'distiller': ['distiller', 'redistill'],\n 'distinguisher': ['distinguisher', 'redistinguish'],\n 'distoma': ['distoma', 'mastoid'],\n 'distome': ['distome', 'modiste'],\n 'distrainer': ['distrainer', 'redistrain'],\n 'distrait': ['distrait', 'triadist'],\n 'distraite': ['disattire', 'distraite'],\n 'disturber': ['disturber', 'redisturb'],\n 'disulphone': ['disulphone', 'unpolished'],\n 'disuniform': ['disuniform', 'indusiform'],\n 'dit': ['dit', 'tid'],\n 'dita': ['adit', 'dita'],\n 'dital': ['datil', 'dital', 'tidal', 'tilda'],\n 'ditcher': ['dichter', 'ditcher'],\n 'dite': ['diet', 'dite', 'edit', 'tide', 'tied'],\n 'diter': ['diter', 'tired', 'tried'],\n 'dithionic': ['chitinoid', 'dithionic'],\n 'ditone': ['ditone', 'intoed'],\n 'ditrochean': ['achondrite', 'ditrochean', 'ordanchite'],\n 'diuranate': ['diuranate', 'untiaraed'],\n 'diurna': ['danuri', 'diurna', 'dunair', 'durain', 'durani', 'durian'],\n 'diurnation': ['diurnation', 'induration'],\n 'diurne': ['diurne', 'inured', 'ruined', 'unride'],\n 'diva': ['avid', 'diva'],\n 'divan': ['divan', 'viand'],\n 'divata': ['divata', 'dvaita'],\n 'divel': ['devil', 'divel', 'lived'],\n 'diver': ['diver', 'drive'],\n 'diverge': ['diverge', 'grieved'],\n 'diverse': ['deviser', 'diverse', 'revised'],\n 'diverter': ['diverter', 'redivert', 'verditer'],\n 'divest': ['divest', 'vedist'],\n 'divesture': ['detrusive', 'divesture', 'servitude'],\n 'divisionism': ['divisionism', 'misdivision'],\n 'divorce': ['cervoid', 'divorce'],\n 'divorcee': ['coderive', 'divorcee'],\n 'do': ['do', 'od'],\n 'doable': ['albedo', 'doable'],\n 'doarium': ['doarium', 'uramido'],\n 'doat': ['doat', 'toad', 'toda'],\n 'doater': ['doater', 'toader'],\n 'doating': ['antigod', 'doating'],\n 'doatish': ['doatish', 'toadish'],\n 'dob': ['bod', 'dob'],\n 'dobe': ['bode', 'dobe'],\n 'dobra': ['abord', 'bardo', 'board', 'broad', 'dobra', 'dorab'],\n 'dobrao': ['dobrao', 'doorba'],\n 'doby': ['body', 'boyd', 'doby'],\n 'doc': ['cod', 'doc'],\n 'docetism': ['comedist', 'demotics', 'docetism', 'domestic'],\n 'docile': ['cleoid', 'coiled', 'docile'],\n 'docity': ['cytoid', 'docity'],\n 'docker': ['corked', 'docker', 'redock'],\n 'doctorial': ['crotaloid', 'doctorial'],\n 'doctorship': ['doctorship', 'trophodisc'],\n 'doctrinairism': ['discriminator', 'doctrinairism'],\n 'doctrinate': ['detraction', 'doctrinate', 'tetarconid'],\n 'doctrine': ['centroid', 'doctrine'],\n 'documental': ['columnated', 'documental'],\n 'dod': ['dod', 'odd'],\n 'dode': ['dedo', 'dode', 'eddo'],\n 'dodecarch': ['decachord', 'dodecarch'],\n 'dodlet': ['dodlet', 'toddle'],\n 'dodman': ['dodman', 'oddman'],\n 'doe': ['doe', 'edo', 'ode'],\n 'doeg': ['doeg', 'doge', 'gode'],\n 'doer': ['doer', 'redo', 'rode', 'roed'],\n 'does': ['does', 'dose'],\n 'doesnt': ['doesnt', 'stoned'],\n 'dog': ['dog', 'god'],\n 'dogate': ['dogate', 'dotage', 'togaed'],\n 'dogbane': ['bondage', 'dogbane'],\n 'dogbite': ['bigoted', 'dogbite'],\n 'doge': ['doeg', 'doge', 'gode'],\n 'dogger': ['dogger', 'gorged'],\n 'doghead': ['doghead', 'godhead'],\n 'doghood': ['doghood', 'godhood'],\n 'dogie': ['diego', 'dogie', 'geoid'],\n 'dogless': ['dogless', 'glossed', 'godless'],\n 'doglike': ['doglike', 'godlike'],\n 'dogly': ['dogly', 'godly', 'goldy'],\n 'dogra': ['dargo', 'dogra', 'drago'],\n 'dogship': ['dogship', 'godship'],\n 'dogstone': ['dogstone', 'stegodon'],\n 'dogwatch': ['dogwatch', 'watchdog'],\n 'doina': ['adion', 'danio', 'doina', 'donia'],\n 'doing': ['dingo', 'doing', 'gondi', 'gonid'],\n 'doko': ['doko', 'dook'],\n 'dol': ['dol', 'lod', 'old'],\n 'dola': ['alod', 'dola', 'load', 'odal'],\n 'dolcian': ['dolcian', 'nodical'],\n 'dolciano': ['conoidal', 'dolciano'],\n 'dolcino': ['dicolon', 'dolcino'],\n 'dole': ['dole', 'elod', 'lode', 'odel'],\n 'dolesman': ['dolesman', 'lodesman'],\n 'doless': ['doless', 'dossel'],\n 'doli': ['dilo', 'diol', 'doli', 'idol', 'olid'],\n 'dolia': ['aloid', 'dolia', 'idola'],\n 'dolina': ['dolina', 'ladino'],\n 'doline': ['doline', 'indole', 'leonid', 'loined', 'olenid'],\n 'dolium': ['dolium', 'idolum'],\n 'dolly': ['dolly', 'lloyd'],\n 'dolman': ['almond', 'dolman'],\n 'dolor': ['dolor', 'drool'],\n 'dolose': ['dolose', 'oodles', 'soodle'],\n 'dolphin': ['dolphin', 'pinhold'],\n 'dolt': ['dolt', 'told'],\n 'dom': ['dom', 'mod'],\n 'domain': ['amidon', 'daimon', 'domain'],\n 'domainal': ['domainal', 'domanial'],\n 'domal': ['domal', 'modal'],\n 'domanial': ['domainal', 'domanial'],\n 'dome': ['dome', 'mode', 'moed'],\n 'domer': ['domer', 'drome'],\n 'domestic': ['comedist', 'demotics', 'docetism', 'domestic'],\n 'domic': ['comid', 'domic'],\n 'domical': ['domical', 'lacmoid'],\n 'dominance': ['demicanon', 'dominance'],\n 'dominate': ['dominate', 'nematoid'],\n 'dominated': ['demantoid', 'dominated'],\n 'domination': ['admonition', 'domination'],\n 'dominative': ['admonitive', 'dominative'],\n 'dominator': ['admonitor', 'dominator'],\n 'domine': ['domine', 'domnei', 'emodin', 'medino'],\n 'dominial': ['dominial', 'imolinda', 'limoniad'],\n 'dominic': ['dinomic', 'dominic'],\n 'domino': ['domino', 'monoid'],\n 'domitian': ['diatomin', 'domitian'],\n 'domnei': ['domine', 'domnei', 'emodin', 'medino'],\n 'don': ['don', 'nod'],\n 'donal': ['donal', 'nodal'],\n 'donar': ['adorn', 'donar', 'drona', 'radon'],\n 'donated': ['donated', 'nodated'],\n 'donatiaceae': ['actaeonidae', 'donatiaceae'],\n 'donatism': ['donatism', 'saintdom'],\n 'donator': ['donator', 'odorant', 'tornado'],\n 'done': ['done', 'node'],\n 'donet': ['donet', 'noted', 'toned'],\n 'dong': ['dong', 'gond'],\n 'donga': ['donga', 'gonad'],\n 'dongola': ['dongola', 'gondola'],\n 'dongon': ['dongon', 'nongod'],\n 'donia': ['adion', 'danio', 'doina', 'donia'],\n 'donna': ['donna', 'nonda'],\n 'donnert': ['donnert', 'tendron'],\n 'donnie': ['donnie', 'indone', 'ondine'],\n 'donor': ['donor', 'rondo'],\n 'donorship': ['donorship', 'rhodopsin'],\n 'donsie': ['deinos', 'donsie', 'inodes', 'onside'],\n 'donum': ['donum', 'mound'],\n 'doob': ['bodo', 'bood', 'doob'],\n 'dook': ['doko', 'dook'],\n 'dool': ['dool', 'lood'],\n 'dooli': ['dooli', 'iodol'],\n 'doom': ['doom', 'mood'],\n 'doomer': ['doomer', 'mooder', 'redoom', 'roomed'],\n 'dooms': ['dooms', 'sodom'],\n 'door': ['door', 'odor', 'oord', 'rood'],\n 'doorba': ['dobrao', 'doorba'],\n 'doorbell': ['bordello', 'doorbell'],\n 'doored': ['doored', 'odored'],\n 'doorframe': ['doorframe', 'reformado'],\n 'doorless': ['doorless', 'odorless'],\n 'doorplate': ['doorplate', 'leptodora'],\n 'doorpost': ['doorpost', 'doorstop'],\n 'doorstone': ['doorstone', 'roodstone'],\n 'doorstop': ['doorpost', 'doorstop'],\n 'doorweed': ['deerwood', 'doorweed'],\n 'dop': ['dop', 'pod'],\n 'dopa': ['apod', 'dopa'],\n 'doper': ['doper', 'pedro', 'pored'],\n 'dopplerite': ['dopplerite', 'lepidopter'],\n 'dor': ['dor', 'rod'],\n 'dora': ['dora', 'orad', 'road'],\n 'dorab': ['abord', 'bardo', 'board', 'broad', 'dobra', 'dorab'],\n 'doree': ['doree', 'erode'],\n 'dori': ['dori', 'roid'],\n 'doria': ['aroid', 'doria', 'radio'],\n 'dorian': ['dorian', 'inroad', 'ordain'],\n 'dorical': ['cordial', 'dorical'],\n 'dorine': ['dinero', 'dorine'],\n 'dorlach': ['chordal', 'dorlach'],\n 'dormancy': ['dormancy', 'mordancy'],\n 'dormant': ['dormant', 'mordant'],\n 'dormer': ['dormer', 'remord'],\n 'dormie': ['dormie', 'moider'],\n 'dorn': ['dorn', 'rond'],\n 'dornic': ['dornic', 'nordic'],\n 'dorothea': ['dorothea', 'theodora'],\n 'dorp': ['dorp', 'drop', 'prod'],\n 'dorsel': ['dorsel', 'seldor', 'solder'],\n 'dorsoapical': ['dorsoapical', 'prosodiacal'],\n 'dorsocaudal': ['caudodorsal', 'dorsocaudal'],\n 'dorsocentral': ['centrodorsal', 'dorsocentral'],\n 'dorsocervical': ['cervicodorsal', 'dorsocervical'],\n 'dorsolateral': ['dorsolateral', 'laterodorsal'],\n 'dorsomedial': ['dorsomedial', 'mediodorsal'],\n 'dorsosacral': ['dorsosacral', 'sacrodorsal'],\n 'dorsoventrad': ['dorsoventrad', 'ventrodorsad'],\n 'dorsoventral': ['dorsoventral', 'ventrodorsal'],\n 'dorsoventrally': ['dorsoventrally', 'ventrodorsally'],\n 'dos': ['dos', 'ods', 'sod'],\n 'dosa': ['dosa', 'sado', 'soda'],\n 'dosage': ['dosage', 'seadog'],\n 'dose': ['does', 'dose'],\n 'doser': ['doser', 'rosed'],\n 'dosimetric': ['dosimetric', 'mediocrist'],\n 'dossel': ['doless', 'dossel'],\n 'dosser': ['dosser', 'sordes'],\n 'dot': ['dot', 'tod'],\n 'dotage': ['dogate', 'dotage', 'togaed'],\n 'dote': ['dote', 'tode', 'toed'],\n 'doter': ['doter', 'tored', 'trode'],\n 'doty': ['doty', 'tody'],\n 'doubler': ['boulder', 'doubler'],\n 'doubter': ['doubter', 'obtrude', 'outbred', 'redoubt'],\n 'douc': ['douc', 'duco'],\n 'douce': ['coude', 'douce'],\n 'doum': ['doum', 'moud', 'odum'],\n 'doup': ['doup', 'updo'],\n 'dour': ['dour', 'duro', 'ordu', 'roud'],\n 'dourine': ['dourine', 'neuroid'],\n 'dourly': ['dourly', 'lourdy'],\n 'douser': ['douser', 'soured'],\n 'douter': ['derout', 'detour', 'douter'],\n 'dover': ['dover', 'drove', 'vedro'],\n 'dow': ['dow', 'owd', 'wod'],\n 'dowager': ['dowager', 'wordage'],\n 'dower': ['dower', 'rowed'],\n 'dowl': ['dowl', 'wold'],\n 'dowlas': ['dowlas', 'oswald'],\n 'downbear': ['downbear', 'rawboned'],\n 'downcome': ['comedown', 'downcome'],\n 'downer': ['downer', 'wonder', 'worden'],\n 'downingia': ['downingia', 'godwinian'],\n 'downset': ['downset', 'setdown'],\n 'downside': ['disendow', 'downside'],\n 'downtake': ['downtake', 'takedown'],\n 'downthrow': ['downthrow', 'throwdown'],\n 'downturn': ['downturn', 'turndown'],\n 'downward': ['downward', 'drawdown'],\n 'dowry': ['dowry', 'rowdy', 'wordy'],\n 'dowser': ['dowser', 'drowse'],\n 'doxa': ['doxa', 'odax'],\n 'doyle': ['doyle', 'yodel'],\n 'dozen': ['dozen', 'zoned'],\n 'drab': ['bard', 'brad', 'drab'],\n 'draba': ['barad', 'draba'],\n 'drabble': ['dabbler', 'drabble'],\n 'draco': ['cardo', 'draco'],\n 'draconic': ['cancroid', 'draconic'],\n 'draconis': ['draconis', 'sardonic'],\n 'dracontian': ['dracontian', 'octandrian'],\n 'drafter': ['drafter', 'redraft'],\n 'drag': ['darg', 'drag', 'grad'],\n 'draggle': ['draggle', 'raggled'],\n 'dragline': ['dragline', 'reginald', 'ringlead'],\n 'dragman': ['dragman', 'grandam', 'grandma'],\n 'drago': ['dargo', 'dogra', 'drago'],\n 'dragoman': ['dragoman', 'garamond', 'ondagram'],\n 'dragonize': ['dragonize', 'organized'],\n 'dragoon': ['dragoon', 'gadroon'],\n 'dragoonage': ['dragoonage', 'gadroonage'],\n 'dragsman': ['dargsman', 'dragsman'],\n 'drail': ['drail', 'laird', 'larid', 'liard'],\n 'drain': ['darin', 'dinar', 'drain', 'indra', 'nadir', 'ranid'],\n 'drainable': ['albardine', 'drainable'],\n 'drainage': ['drainage', 'gardenia'],\n 'draine': ['darien', 'draine'],\n 'drained': ['diander', 'drained'],\n 'drainer': ['darrein', 'drainer'],\n 'drainman': ['drainman', 'mandarin'],\n 'draintile': ['deliriant', 'draintile', 'interlaid'],\n 'drake': ['daker', 'drake', 'kedar', 'radek'],\n 'dramme': ['dammer', 'dramme'],\n 'drang': ['drang', 'grand'],\n 'drape': ['drape', 'padre'],\n 'drat': ['dart', 'drat'],\n 'drate': ['dater', 'derat', 'detar', 'drate', 'rated', 'trade', 'tread'],\n 'draw': ['draw', 'ward'],\n 'drawable': ['drawable', 'wardable'],\n 'drawback': ['backward', 'drawback'],\n 'drawbore': ['drawbore', 'wardrobe'],\n 'drawbridge': ['bridgeward', 'drawbridge'],\n 'drawdown': ['downward', 'drawdown'],\n 'drawee': ['drawee', 'rewade'],\n 'drawer': ['drawer', 'redraw', 'reward', 'warder'],\n 'drawers': ['drawers', 'resward'],\n 'drawfile': ['drawfile', 'lifeward'],\n 'drawgate': ['drawgate', 'gateward'],\n 'drawhead': ['drawhead', 'headward'],\n 'drawhorse': ['drawhorse', 'shoreward'],\n 'drawing': ['drawing', 'ginward', 'warding'],\n 'drawoff': ['drawoff', 'offward'],\n 'drawout': ['drawout', 'outdraw', 'outward'],\n 'drawsheet': ['drawsheet', 'watershed'],\n 'drawstop': ['drawstop', 'postward'],\n 'dray': ['adry', 'dray', 'yard'],\n 'drayage': ['drayage', 'yardage'],\n 'drayman': ['drayman', 'yardman'],\n 'dread': ['adder', 'dread', 'readd'],\n 'dreadly': ['dreadly', 'laddery'],\n 'dream': ['armed', 'derma', 'dream', 'ramed'],\n 'dreamage': ['dreamage', 'redamage'],\n 'dreamer': ['dreamer', 'redream'],\n 'dreamhole': ['dreamhole', 'heloderma'],\n 'dreamish': ['dreamish', 'semihard'],\n 'dreamland': ['dreamland', 'raddleman'],\n 'drear': ['darer', 'drear'],\n 'dreary': ['dreary', 'yarder'],\n 'dredge': ['dredge', 'gedder'],\n 'dree': ['deer', 'dere', 'dree', 'rede', 'reed'],\n 'dreiling': ['dreiling', 'gridelin'],\n 'dressage': ['degasser', 'dressage'],\n 'dresser': ['dresser', 'redress'],\n 'drib': ['bird', 'drib'],\n 'dribble': ['dibbler', 'dribble'],\n 'driblet': ['birdlet', 'driblet'],\n 'driddle': ['diddler', 'driddle'],\n 'drier': ['drier', 'rider'],\n 'driest': ['driest', 'stride'],\n 'driller': ['driller', 'redrill'],\n 'drillman': ['drillman', 'mandrill'],\n 'dringle': ['dringle', 'grindle'],\n 'drisheen': ['denshire', 'drisheen'],\n 'drive': ['diver', 'drive'],\n 'driven': ['driven', 'nervid', 'verdin'],\n 'drivescrew': ['drivescrew', 'screwdrive'],\n 'drogue': ['drogue', 'gourde'],\n 'drolly': ['drolly', 'lordly'],\n 'drome': ['domer', 'drome'],\n 'dromicia': ['dioramic', 'dromicia'],\n 'drona': ['adorn', 'donar', 'drona', 'radon'],\n 'drone': ['drone', 'ronde'],\n 'drongo': ['drongo', 'gordon'],\n 'dronish': ['dishorn', 'dronish'],\n 'drool': ['dolor', 'drool'],\n 'drop': ['dorp', 'drop', 'prod'],\n 'dropsy': ['dropsy', 'dryops'],\n 'drossel': ['drossel', 'rodless'],\n 'drove': ['dover', 'drove', 'vedro'],\n 'drow': ['drow', 'word'],\n 'drowse': ['dowser', 'drowse'],\n 'drub': ['burd', 'drub'],\n 'drugger': ['drugger', 'grudger'],\n 'druggery': ['druggery', 'grudgery'],\n 'drungar': ['drungar', 'gurnard'],\n 'drupe': ['drupe', 'duper', 'perdu', 'prude', 'pured'],\n 'drusean': ['asunder', 'drusean'],\n 'dryops': ['dropsy', 'dryops'],\n 'duad': ['addu', 'dadu', 'daud', 'duad'],\n 'dual': ['auld', 'dual', 'laud', 'udal'],\n 'duali': ['duali', 'dulia'],\n 'dualin': ['dualin', 'ludian', 'unlaid'],\n 'dualism': ['dualism', 'laudism'],\n 'dualist': ['dualist', 'laudist'],\n 'dub': ['bud', 'dub'],\n 'dubber': ['dubber', 'rubbed'],\n 'dubious': ['biduous', 'dubious'],\n 'dubitate': ['dubitate', 'tabitude'],\n 'ducal': ['cauld', 'ducal'],\n 'duces': ['decus', 'duces'],\n 'duckstone': ['duckstone', 'unstocked'],\n 'duco': ['douc', 'duco'],\n 'ducted': ['deduct', 'ducted'],\n 'duction': ['conduit', 'duction', 'noctuid'],\n 'duculinae': ['duculinae', 'nuculidae'],\n 'dudeen': ['denude', 'dudeen'],\n 'dudler': ['dudler', 'ruddle'],\n 'duel': ['deul', 'duel', 'leud'],\n 'dueler': ['dueler', 'eluder'],\n 'dueling': ['dueling', 'indulge'],\n 'duello': ['deloul', 'duello'],\n 'duenna': ['duenna', 'undean'],\n 'duer': ['duer', 'dure', 'rude', 'urde'],\n 'duffer': ['duffer', 'ruffed'],\n 'dufter': ['dufter', 'turfed'],\n 'dug': ['dug', 'gud'],\n 'duim': ['duim', 'muid'],\n 'dukery': ['dukery', 'duyker'],\n 'dulat': ['adult', 'dulat'],\n 'dulcian': ['dulcian', 'incudal', 'lucanid', 'lucinda'],\n 'dulciana': ['claudian', 'dulciana'],\n 'duler': ['duler', 'urled'],\n 'dulia': ['duali', 'dulia'],\n 'dullify': ['dullify', 'fluidly'],\n 'dulosis': ['dissoul', 'dulosis', 'solidus'],\n 'dulseman': ['dulseman', 'unalmsed'],\n 'dultie': ['dilute', 'dultie'],\n 'dum': ['dum', 'mud'],\n 'duma': ['duma', 'maud'],\n 'dumaist': ['dumaist', 'stadium'],\n 'dumontite': ['dumontite', 'unomitted'],\n 'dumple': ['dumple', 'plumed'],\n 'dunair': ['danuri', 'diurna', 'dunair', 'durain', 'durani', 'durian'],\n 'dunal': ['dunal', 'laund', 'lunda', 'ulnad'],\n 'dunderpate': ['dunderpate', 'undeparted'],\n 'dune': ['dune', 'nude', 'unde'],\n 'dungaree': ['dungaree', 'guardeen', 'unagreed', 'underage', 'ungeared'],\n 'dungeon': ['dungeon', 'negundo'],\n 'dunger': ['dunger', 'gerund', 'greund', 'nudger'],\n 'dungol': ['dungol', 'ungold'],\n 'dungy': ['dungy', 'gundy'],\n 'dunite': ['dunite', 'united', 'untied'],\n 'dunlap': ['dunlap', 'upland'],\n 'dunne': ['dunne', 'unden'],\n 'dunner': ['dunner', 'undern'],\n 'dunpickle': ['dunpickle', 'unpickled'],\n 'dunstable': ['dunstable', 'unblasted', 'unstabled'],\n 'dunt': ['dunt', 'tund'],\n 'duny': ['duny', 'undy'],\n 'duo': ['duo', 'udo'],\n 'duodenal': ['duodenal', 'unloaded'],\n 'duodenocholecystostomy': ['cholecystoduodenostomy', 'duodenocholecystostomy'],\n 'duodenojejunal': ['duodenojejunal', 'jejunoduodenal'],\n 'duodenopancreatectomy': ['duodenopancreatectomy', 'pancreatoduodenectomy'],\n 'dup': ['dup', 'pud'],\n 'duper': ['drupe', 'duper', 'perdu', 'prude', 'pured'],\n 'dupion': ['dupion', 'unipod'],\n 'dupla': ['dupla', 'plaud'],\n 'duplone': ['duplone', 'unpoled'],\n 'dura': ['ardu', 'daur', 'dura'],\n 'durain': ['danuri', 'diurna', 'dunair', 'durain', 'durani', 'durian'],\n 'duramen': ['duramen', 'maunder', 'unarmed'],\n 'durance': ['durance', 'redunca', 'unraced'],\n 'durango': ['aground', 'durango'],\n 'durani': ['danuri', 'diurna', 'dunair', 'durain', 'durani', 'durian'],\n 'durant': ['durant', 'tundra'],\n 'durban': ['durban', 'undrab'],\n 'durdenite': ['durdenite', 'undertide'],\n 'dure': ['duer', 'dure', 'rude', 'urde'],\n 'durene': ['durene', 'endure'],\n 'durenol': ['durenol', 'lounder', 'roundel'],\n 'durgan': ['durgan', 'undrag'],\n 'durian': ['danuri', 'diurna', 'dunair', 'durain', 'durani', 'durian'],\n 'during': ['during', 'ungird'],\n 'durity': ['durity', 'rudity'],\n 'durmast': ['durmast', 'mustard'],\n 'duro': ['dour', 'duro', 'ordu', 'roud'],\n 'dusken': ['dusken', 'sundek'],\n 'dust': ['dust', 'stud'],\n 'duster': ['derust', 'duster'],\n 'dustin': ['dustin', 'nudist'],\n 'dustpan': ['dustpan', 'upstand'],\n 'dusty': ['dusty', 'study'],\n 'duyker': ['dukery', 'duyker'],\n 'dvaita': ['divata', 'dvaita'],\n 'dwale': ['dwale', 'waled', 'weald'],\n 'dwine': ['dwine', 'edwin', 'wendi', 'widen', 'wined'],\n 'dyad': ['addy', 'dyad'],\n 'dyas': ['days', 'dyas'],\n 'dye': ['dey', 'dye', 'yed'],\n 'dyehouse': ['deyhouse', 'dyehouse'],\n 'dyeing': ['digeny', 'dyeing'],\n 'dyer': ['dyer', 'yerd'],\n 'dying': ['dingy', 'dying'],\n 'dynamo': ['dynamo', 'monday'],\n 'dynamoelectric': ['dynamoelectric', 'electrodynamic'],\n 'dynamoelectrical': ['dynamoelectrical', 'electrodynamical'],\n 'dynamotor': ['androtomy', 'dynamotor'],\n 'dyne': ['deny', 'dyne'],\n 'dyophone': ['dyophone', 'honeypod'],\n 'dysluite': ['dysluite', 'sedulity'],\n 'dysneuria': ['dasyurine', 'dysneuria'],\n 'dysphoric': ['chrysopid', 'dysphoric'],\n 'dysphrenia': ['dysphrenia', 'sphyraenid', 'sphyrnidae'],\n 'dystome': ['dystome', 'modesty'],\n 'dystrophia': ['diastrophy', 'dystrophia'],\n 'ea': ['ae', 'ea'],\n 'each': ['ache', 'each', 'haec'],\n 'eager': ['agree', 'eager', 'eagre'],\n 'eagle': ['aegle', 'eagle', 'galee'],\n 'eagless': ['ageless', 'eagless'],\n 'eaglet': ['eaglet', 'legate', 'teagle', 'telega'],\n 'eagre': ['agree', 'eager', 'eagre'],\n 'ean': ['ean', 'nae', 'nea'],\n 'ear': ['aer', 'are', 'ear', 'era', 'rea'],\n 'eared': ['eared', 'erade'],\n 'earful': ['earful', 'farleu', 'ferula'],\n 'earing': ['arenig', 'earing', 'gainer', 'reagin', 'regain'],\n 'earl': ['earl', 'eral', 'lear', 'real'],\n 'earlap': ['earlap', 'parale'],\n 'earle': ['areel', 'earle'],\n 'earlet': ['earlet', 'elater', 'relate'],\n 'earliness': ['earliness', 'naileress'],\n 'earlship': ['earlship', 'pearlish'],\n 'early': ['early', 'layer', 'relay'],\n 'earn': ['arne', 'earn', 'rane'],\n 'earner': ['earner', 'ranere'],\n 'earnest': ['earnest', 'eastern', 'nearest'],\n 'earnestly': ['earnestly', 'easternly'],\n 'earnful': ['earnful', 'funeral'],\n 'earning': ['earning', 'engrain'],\n 'earplug': ['earplug', 'graupel', 'plaguer'],\n 'earring': ['earring', 'grainer'],\n 'earringed': ['earringed', 'grenadier'],\n 'earshot': ['asthore', 'earshot'],\n 'eartab': ['abater', 'artabe', 'eartab', 'trabea'],\n 'earth': ['earth', 'hater', 'heart', 'herat', 'rathe'],\n 'earthborn': ['abhorrent', 'earthborn'],\n 'earthed': ['earthed', 'hearted'],\n 'earthen': ['earthen', 'enheart', 'hearten', 'naether', 'teheran', 'traheen'],\n 'earthian': ['earthian', 'rhaetian'],\n 'earthiness': ['earthiness', 'heartiness'],\n 'earthless': ['earthless', 'heartless'],\n 'earthling': ['earthling', 'heartling'],\n 'earthly': ['earthly', 'heartly', 'lathery', 'rathely'],\n 'earthnut': ['earthnut', 'heartnut'],\n 'earthpea': ['earthpea', 'heartpea'],\n 'earthquake': ['earthquake', 'heartquake'],\n 'earthward': ['earthward', 'heartward'],\n 'earthy': ['earthy', 'hearty', 'yearth'],\n 'earwig': ['earwig', 'grewia'],\n 'earwitness': ['earwitness', 'wateriness'],\n 'easel': ['easel', 'lease'],\n 'easement': ['easement', 'estamene'],\n 'easer': ['easer', 'erase'],\n 'easily': ['easily', 'elysia'],\n 'easing': ['easing', 'sangei'],\n 'east': ['ates', 'east', 'eats', 'sate', 'seat', 'seta'],\n 'eastabout': ['aetobatus', 'eastabout'],\n 'eastbound': ['eastbound', 'unboasted'],\n 'easter': ['asteer',\n            'easter',\n            'eastre',\n            'reseat',\n            'saeter',\n            'seater',\n            'staree',\n            'teaser',\n            'teresa'],\n 'easterling': ['easterling', 'generalist'],\n 'eastern': ['earnest', 'eastern', 'nearest'],\n 'easternly': ['earnestly', 'easternly'],\n 'easting': ['easting',\n             'gainset',\n             'genista',\n             'ingesta',\n             'seating',\n             'signate',\n             'teasing'],\n 'eastlake': ['alestake', 'eastlake'],\n 'eastre': ['asteer',\n            'easter',\n            'eastre',\n            'reseat',\n            'saeter',\n            'seater',\n            'staree',\n            'teaser',\n            'teresa'],\n 'easy': ['easy', 'eyas'],\n 'eat': ['ate', 'eat', 'eta', 'tae', 'tea'],\n 'eatberry': ['betrayer', 'eatberry', 'rebetray', 'teaberry'],\n 'eaten': ['eaten', 'enate'],\n 'eater': ['arete', 'eater', 'teaer'],\n 'eating': ['eating', 'ingate', 'tangie'],\n 'eats': ['ates', 'east', 'eats', 'sate', 'seat', 'seta'],\n 'eave': ['eave', 'evea'],\n 'eaved': ['deave', 'eaved', 'evade'],\n 'eaver': ['eaver', 'reave'],\n 'eaves': ['eaves', 'evase', 'seave'],\n 'eben': ['been', 'bene', 'eben'],\n 'ebenales': ['ebenales', 'lebanese'],\n 'ebon': ['beno', 'bone', 'ebon'],\n 'ebony': ['boney', 'ebony'],\n 'ebriety': ['byerite', 'ebriety'],\n 'eburna': ['eburna', 'unbare', 'unbear', 'urbane'],\n 'eburnated': ['eburnated', 'underbeat', 'unrebated'],\n 'eburnian': ['eburnian', 'inurbane'],\n 'ecad': ['cade', 'dace', 'ecad'],\n 'ecanda': ['adance', 'ecanda'],\n 'ecardinal': ['ecardinal', 'lardacein'],\n 'ecarinate': ['anaeretic', 'ecarinate'],\n 'ecarte': ['cerate', 'create', 'ecarte'],\n 'ecaudata': ['acaudate', 'ecaudata'],\n 'ecclesiasticism': ['ecclesiasticism', 'misecclesiastic'],\n 'eche': ['chee', 'eche'],\n 'echelon': ['chelone', 'echelon'],\n 'echeveria': ['echeveria', 'reachieve'],\n 'echidna': ['chained', 'echidna'],\n 'echinal': ['chilean', 'echinal', 'nichael'],\n 'echinate': ['echinate', 'hecatine'],\n 'echinital': ['echinital', 'inethical'],\n 'echis': ['echis', 'shice'],\n 'echoer': ['choree', 'cohere', 'echoer'],\n 'echoic': ['choice', 'echoic'],\n 'echoist': ['chitose', 'echoist'],\n 'eciton': ['eciton', 'noetic', 'notice', 'octine'],\n 'eckehart': ['eckehart', 'hacktree'],\n 'eclair': ['carlie', 'claire', 'eclair', 'erical'],\n 'eclat': ['cleat', 'eclat', 'ectal', 'lacet', 'tecla'],\n 'eclipsable': ['eclipsable', 'spliceable'],\n 'eclipser': ['eclipser', 'pericles', 'resplice'],\n 'economics': ['economics', 'neocosmic'],\n 'economism': ['economism', 'monoecism', 'monosemic'],\n 'economist': ['economist', 'mesotonic'],\n 'ecorticate': ['ecorticate', 'octaeteric'],\n 'ecostate': ['coestate', 'ecostate'],\n 'ecotonal': ['colonate', 'ecotonal'],\n 'ecotype': ['ecotype', 'ocypete'],\n 'ecrasite': ['ecrasite', 'sericate'],\n 'ecru': ['cure', 'ecru', 'eruc'],\n 'ectad': ['cadet', 'ectad'],\n 'ectal': ['cleat', 'eclat', 'ectal', 'lacet', 'tecla'],\n 'ectasis': ['ascites', 'ectasis'],\n 'ectene': ['cetene', 'ectene'],\n 'ectental': ['ectental', 'tentacle'],\n 'ectiris': ['ectiris', 'eristic'],\n 'ectocardia': ['coradicate', 'ectocardia'],\n 'ectocranial': ['calonectria', 'ectocranial'],\n 'ectoglia': ['ectoglia', 'geotical', 'goetical'],\n 'ectomorph': ['ectomorph', 'topchrome'],\n 'ectomorphic': ['cetomorphic', 'chemotropic', 'ectomorphic'],\n 'ectomorphy': ['chromotype', 'cormophyte', 'ectomorphy'],\n 'ectopia': ['ectopia', 'opacite'],\n 'ectopy': ['cotype', 'ectopy'],\n 'ectorhinal': ['chlorinate', 'ectorhinal', 'tornachile'],\n 'ectosarc': ['ectosarc', 'reaccost'],\n 'ectrogenic': ['ectrogenic', 'egocentric', 'geocentric'],\n 'ectromelia': ['carmeloite', 'ectromelia', 'meteorical'],\n 'ectropion': ['ectropion', 'neotropic'],\n 'ed': ['de', 'ed'],\n 'edda': ['dade', 'dead', 'edda'],\n 'eddaic': ['caddie', 'eddaic'],\n 'eddish': ['dished', 'eddish'],\n 'eddo': ['dedo', 'dode', 'eddo'],\n 'edema': ['adeem', 'ameed', 'edema'],\n 'eden': ['dene', 'eden', 'need'],\n 'edental': ['dalteen', 'dentale', 'edental'],\n 'edentata': ['antedate', 'edentata'],\n 'edessan': ['deaness', 'edessan'],\n 'edestan': ['edestan', 'standee'],\n 'edestin': ['destine', 'edestin'],\n 'edgar': ['edgar', 'grade'],\n 'edger': ['edger', 'greed'],\n 'edgerman': ['edgerman', 'gendarme'],\n 'edgrew': ['edgrew', 'wedger'],\n 'edible': ['debile', 'edible'],\n 'edict': ['cetid', 'edict'],\n 'edictal': ['citadel', 'deltaic', 'dialect', 'edictal', 'lactide'],\n 'edification': ['deification', 'edification'],\n 'edificatory': ['deificatory', 'edificatory'],\n 'edifier': ['deifier', 'edifier'],\n 'edify': ['deify', 'edify'],\n 'edit': ['diet', 'dite', 'edit', 'tide', 'tied'],\n 'edital': ['detail', 'dietal', 'dilate', 'edital', 'tailed'],\n 'edith': ['edith', 'ethid'],\n 'edition': ['edition', 'odinite', 'otidine', 'tineoid'],\n 'editor': ['editor', 'triode'],\n 'editorial': ['editorial', 'radiolite'],\n 'edmund': ['edmund', 'mudden'],\n 'edna': ['ande', 'dane', 'dean', 'edna'],\n 'edo': ['doe', 'edo', 'ode'],\n 'edoni': ['deino', 'dione', 'edoni'],\n 'education': ['coadunite', 'education', 'noctuidae'],\n 'educe': ['deuce', 'educe'],\n 'edward': ['edward', 'wadder', 'warded'],\n 'edwin': ['dwine', 'edwin', 'wendi', 'widen', 'wined'],\n 'eel': ['eel', 'lee'],\n 'eelgrass': ['eelgrass', 'gearless', 'rageless'],\n 'eelpot': ['eelpot', 'opelet'],\n 'eelspear': ['eelspear', 'prelease'],\n 'eely': ['eely', 'yeel'],\n 'eer': ['eer', 'ere', 'ree'],\n 'efik': ['efik', 'fike'],\n 'eft': ['eft', 'fet'],\n 'egad': ['aged', 'egad', 'gade'],\n 'egba': ['egba', 'gabe'],\n 'egbo': ['bego', 'egbo'],\n 'egeran': ['egeran', 'enrage', 'ergane', 'genear', 'genera'],\n 'egest': ['egest', 'geest', 'geste'],\n 'egger': ['egger', 'grege'],\n 'egghot': ['egghot', 'hogget'],\n 'eggler': ['eggler', 'legger'],\n 'eggy': ['eggy', 'yegg'],\n 'eglantine': ['eglantine', 'inelegant', 'legantine'],\n 'eglatere': ['eglatere', 'regelate', 'relegate'],\n 'egma': ['egma', 'game', 'mage'],\n 'ego': ['ego', 'geo'],\n 'egocentric': ['ectrogenic', 'egocentric', 'geocentric'],\n 'egoist': ['egoist', 'stogie'],\n 'egol': ['egol', 'goel', 'loge', 'ogle', 'oleg'],\n 'egotheism': ['egotheism', 'eightsome'],\n 'egret': ['egret', 'greet', 'reget'],\n 'eh': ['eh', 'he'],\n 'ehretia': ['ehretia', 'etheria'],\n 'eident': ['eident', 'endite'],\n 'eidograph': ['eidograph', 'ideograph'],\n 'eidology': ['eidology', 'ideology'],\n 'eighth': ['eighth', 'height'],\n 'eightsome': ['egotheism', 'eightsome'],\n 'eigne': ['eigne', 'genie'],\n 'eileen': ['eileen', 'lienee'],\n 'ekaha': ['ekaha', 'hakea'],\n 'eke': ['eke', 'kee'],\n 'eker': ['eker', 'reek'],\n 'ekoi': ['ekoi', 'okie'],\n 'ekron': ['ekron', 'krone'],\n 'ektene': ['ektene', 'ketene'],\n 'elabrate': ['elabrate', 'tearable'],\n 'elaidic': ['aedilic', 'elaidic'],\n 'elaidin': ['anilide', 'elaidin'],\n 'elain': ['alien', 'aline', 'anile', 'elain', 'elian', 'laine', 'linea'],\n 'elaine': ['aileen', 'elaine'],\n 'elamite': ['alemite', 'elamite'],\n 'elance': ['elance', 'enlace'],\n 'eland': ['eland', 'laden', 'lenad'],\n 'elanet': ['elanet', 'lanete', 'lateen'],\n 'elanus': ['elanus', 'unseal'],\n 'elaphomyces': ['elaphomyces', 'mesocephaly'],\n 'elaphurus': ['elaphurus', 'sulphurea'],\n 'elapid': ['aliped', 'elapid'],\n 'elapoid': ['elapoid', 'oedipal'],\n 'elaps': ['elaps',\n           'lapse',\n           'lepas',\n           'pales',\n           'salep',\n           'saple',\n           'sepal',\n           'slape',\n           'spale',\n           'speal'],\n 'elapse': ['asleep', 'elapse', 'please'],\n 'elastic': ['astelic', 'elastic', 'latices'],\n 'elasticin': ['elasticin', 'inelastic', 'sciential'],\n 'elastin': ['elastin', 'salient', 'saltine', 'slainte'],\n 'elastomer': ['elastomer', 'salometer'],\n 'elate': ['atlee', 'elate'],\n 'elated': ['delate', 'elated'],\n 'elater': ['earlet', 'elater', 'relate'],\n 'elaterid': ['detailer', 'elaterid'],\n 'elaterin': ['elaterin', 'entailer', 'treenail'],\n 'elatha': ['althea', 'elatha'],\n 'elatine': ['elatine', 'lineate'],\n 'elation': ['alnoite', 'elation', 'toenail'],\n 'elator': ['elator', 'lorate'],\n 'elb': ['bel', 'elb'],\n 'elbert': ['belter', 'elbert', 'treble'],\n 'elberta': ['bearlet', 'bleater', 'elberta', 'retable'],\n 'elbow': ['below', 'bowel', 'elbow'],\n 'elbowed': ['boweled', 'elbowed'],\n 'eld': ['del', 'eld', 'led'],\n 'eldin': ['eldin', 'lined'],\n 'elding': ['dingle', 'elding', 'engild', 'gilden'],\n 'elean': ['anele', 'elean'],\n 'election': ['coteline', 'election'],\n 'elective': ['cleveite', 'elective'],\n 'elector': ['elector', 'electro'],\n 'electoral': ['electoral', 'recollate'],\n 'electra': ['electra', 'treacle'],\n 'electragy': ['electragy', 'glycerate'],\n 'electret': ['electret', 'tercelet'],\n 'electric': ['electric', 'lectrice'],\n 'electrion': ['centriole', 'electrion', 'relection'],\n 'electro': ['elector', 'electro'],\n 'electrodynamic': ['dynamoelectric', 'electrodynamic'],\n 'electrodynamical': ['dynamoelectrical', 'electrodynamical'],\n 'electromagnetic': ['electromagnetic', 'magnetoelectric'],\n 'electromagnetical': ['electromagnetical', 'magnetoelectrical'],\n 'electrothermic': ['electrothermic', 'thermoelectric'],\n 'electrothermometer': ['electrothermometer', 'thermoelectrometer'],\n 'elegant': ['angelet', 'elegant'],\n 'elegiambus': ['elegiambus', 'iambelegus'],\n 'elegiast': ['elegiast', 'selagite'],\n 'elemi': ['elemi', 'meile'],\n 'elemin': ['elemin', 'meline'],\n 'elephantic': ['elephantic', 'plancheite'],\n 'elettaria': ['elettaria', 'retaliate'],\n 'eleut': ['eleut', 'elute'],\n 'elevator': ['elevator', 'overlate'],\n 'elfin': ['elfin', 'nifle'],\n 'elfishness': ['elfishness', 'fleshiness'],\n 'elfkin': ['elfkin', 'finkel'],\n 'elfwort': ['elfwort', 'felwort'],\n 'eli': ['eli', 'lei', 'lie'],\n 'elia': ['aiel', 'aile', 'elia'],\n 'elian': ['alien', 'aline', 'anile', 'elain', 'elian', 'laine', 'linea'],\n 'elias': ['aisle', 'elias'],\n 'elicitor': ['elicitor', 'trioleic'],\n 'eliminand': ['eliminand', 'mindelian'],\n 'elinor': ['elinor', 'lienor', 'lorien', 'noiler'],\n 'elinvar': ['elinvar', 'ravelin', 'reanvil', 'valerin'],\n 'elisha': ['elisha', 'hailse', 'sheila'],\n 'elisor': ['elisor', 'resoil'],\n 'elissa': ['elissa', 'lassie'],\n 'elite': ['elite', 'telei'],\n 'eliza': ['aizle', 'eliza'],\n 'elk': ['elk', 'lek'],\n 'ella': ['alle', 'ella', 'leal'],\n 'ellagate': ['allegate', 'ellagate'],\n 'ellenyard': ['ellenyard', 'learnedly'],\n 'ellick': ['ellick', 'illeck'],\n 'elliot': ['elliot', 'oillet'],\n 'elm': ['elm', 'mel'],\n 'elmer': ['elmer', 'merel', 'merle'],\n 'elmy': ['elmy', 'yelm'],\n 'eloah': ['eloah', 'haole'],\n 'elod': ['dole', 'elod', 'lode', 'odel'],\n 'eloge': ['eloge', 'golee'],\n 'elohimic': ['elohimic', 'hemiolic'],\n 'elohist': ['elohist', 'hostile'],\n 'eloign': ['eloign', 'gileno', 'legion'],\n 'eloigner': ['eloigner', 'legioner'],\n 'eloignment': ['eloignment', 'omnilegent'],\n 'elon': ['elon', 'enol', 'leno', 'leon', 'lone', 'noel'],\n 'elonite': ['elonite', 'leonite'],\n 'elops': ['elops', 'slope', 'spole'],\n 'elric': ['crile', 'elric', 'relic'],\n 'els': ['els', 'les'],\n 'elsa': ['elsa', 'sale', 'seal', 'slae'],\n 'else': ['else', 'lees', 'seel', 'sele', 'slee'],\n 'elsin': ['elsin', 'lenis', 'niels', 'silen', 'sline'],\n 'elt': ['elt', 'let'],\n 'eluate': ['aulete', 'eluate'],\n 'eluder': ['dueler', 'eluder'],\n 'elusion': ['elusion', 'luiseno'],\n 'elusory': ['elusory', 'yoursel'],\n 'elute': ['eleut', 'elute'],\n 'elution': ['elution', 'outline'],\n 'elutor': ['elutor', 'louter', 'outler'],\n 'elvan': ['elvan', 'navel', 'venal'],\n 'elvanite': ['elvanite', 'lavenite'],\n 'elver': ['elver', 'lever', 'revel'],\n 'elvet': ['elvet', 'velte'],\n 'elvira': ['averil', 'elvira'],\n 'elvis': ['elvis', 'levis', 'slive'],\n 'elwood': ['dewool', 'elwood', 'wooled'],\n 'elymi': ['elymi', 'emily', 'limey'],\n 'elysia': ['easily', 'elysia'],\n 'elytral': ['alertly', 'elytral'],\n 'elytrin': ['elytrin', 'inertly', 'trinely'],\n 'elytroposis': ['elytroposis', 'proteolysis'],\n 'elytrous': ['elytrous', 'urostyle'],\n 'em': ['em', 'me'],\n 'emanate': ['emanate', 'manatee'],\n 'emanation': ['amnionate', 'anamniote', 'emanation'],\n 'emanatist': ['emanatist', 'staminate', 'tasmanite'],\n 'embalmer': ['embalmer', 'emmarble'],\n 'embar': ['amber', 'bearm', 'bemar', 'bream', 'embar'],\n 'embargo': ['bergamo', 'embargo'],\n 'embark': ['embark', 'markeb'],\n 'embay': ['beamy', 'embay', 'maybe'],\n 'ember': ['breme', 'ember'],\n 'embind': ['embind', 'nimbed'],\n 'embira': ['ambier', 'bremia', 'embira'],\n 'embodier': ['demirobe', 'embodier'],\n 'embody': ['beydom', 'embody'],\n 'embole': ['bemole', 'embole'],\n 'embraceor': ['cerebroma', 'embraceor'],\n 'embrail': ['embrail', 'mirabel'],\n 'embryoid': ['embryoid', 'reimbody'],\n 'embus': ['embus', 'sebum'],\n 'embusk': ['bemusk', 'embusk'],\n 'emcee': ['emcee', 'meece'],\n 'emeership': ['emeership', 'ephemeris'],\n 'emend': ['emend', 'mende'],\n 'emendation': ['denominate', 'emendation'],\n 'emendator': ['emendator', 'ondameter'],\n 'emerita': ['emerita', 'emirate'],\n 'emerse': ['emerse', 'seemer'],\n 'emersion': ['emersion', 'meriones'],\n 'emersonian': ['emersonian', 'mansioneer'],\n 'emesa': ['emesa', 'mease'],\n 'emigrate': ['emigrate', 'remigate'],\n 'emigration': ['emigration', 'remigation'],\n 'emil': ['emil', 'lime', 'mile'],\n 'emilia': ['emilia', 'mailie'],\n 'emily': ['elymi', 'emily', 'limey'],\n 'emim': ['emim', 'mime'],\n 'emir': ['emir', 'imer', 'mire', 'reim', 'remi', 'riem', 'rime'],\n 'emirate': ['emerita', 'emirate'],\n 'emirship': ['emirship', 'imperish'],\n 'emissary': ['emissary', 'missayer'],\n 'emit': ['emit', 'item', 'mite', 'time'],\n 'emitter': ['emitter', 'termite'],\n 'emm': ['emm', 'mem'],\n 'emmarble': ['embalmer', 'emmarble'],\n 'emodin': ['domine', 'domnei', 'emodin', 'medino'],\n 'emotion': ['emotion', 'moonite'],\n 'empanel': ['empanel', 'emplane', 'peelman'],\n 'empathic': ['empathic', 'emphatic'],\n 'empathically': ['empathically', 'emphatically'],\n 'emphasis': ['emphasis', 'misshape'],\n 'emphatic': ['empathic', 'emphatic'],\n 'emphatically': ['empathically', 'emphatically'],\n 'empire': ['empire', 'epimer'],\n 'empiricist': ['empiricist', 'empiristic'],\n 'empiristic': ['empiricist', 'empiristic'],\n 'emplane': ['empanel', 'emplane', 'peelman'],\n 'employer': ['employer', 'polymere'],\n 'emporia': ['emporia', 'meropia'],\n 'emporial': ['emporial', 'proemial'],\n 'emporium': ['emporium', 'pomerium', 'proemium'],\n 'emprise': ['emprise', 'imprese', 'premise', 'spireme'],\n 'empt': ['empt', 'temp'],\n 'emptier': ['emptier', 'impetre'],\n 'emption': ['emption', 'pimento'],\n 'emptional': ['emptional', 'palmitone'],\n 'emptor': ['emptor', 'trompe'],\n 'empyesis': ['empyesis', 'pyemesis'],\n 'emu': ['emu', 'ume'],\n 'emulant': ['almuten', 'emulant'],\n 'emulation': ['emulation', 'laumonite'],\n 'emulsion': ['emulsion', 'solenium'],\n 'emundation': ['emundation', 'mountained'],\n 'emyd': ['demy', 'emyd'],\n 'en': ['en', 'ne'],\n 'enable': ['baleen', 'enable'],\n 'enabler': ['enabler', 'renable'],\n 'enaction': ['cetonian', 'enaction'],\n 'enactor': ['enactor', 'necator', 'orcanet'],\n 'enactory': ['enactory', 'octenary'],\n 'enaena': ['aenean', 'enaena'],\n 'enalid': ['aldine', 'daniel', 'delian', 'denial', 'enalid', 'leadin'],\n 'enaliornis': ['enaliornis', 'rosaniline'],\n 'enaluron': ['enaluron', 'neuronal'],\n 'enam': ['amen', 'enam', 'mane', 'mean', 'name', 'nema'],\n 'enamel': ['enamel', 'melena'],\n 'enameling': ['enameling', 'malengine', 'meningeal'],\n 'enamor': ['enamor', 'monera', 'oreman', 'romane'],\n 'enamored': ['demeanor', 'enamored'],\n 'enanthem': ['enanthem', 'menthane'],\n 'enantiomer': ['enantiomer', 'renominate'],\n 'enapt': ['enapt', 'paten', 'penta', 'tapen'],\n 'enarch': ['enarch', 'ranche'],\n 'enarm': ['enarm', 'namer', 'reman'],\n 'enarme': ['enarme', 'meaner', 'rename'],\n 'enarthrosis': ['enarthrosis', 'nearthrosis'],\n 'enate': ['eaten', 'enate'],\n 'enatic': ['acetin', 'actine', 'enatic'],\n 'enation': ['enation', 'etonian'],\n 'enbrave': ['enbrave', 'verbena'],\n 'encapsule': ['encapsule', 'pelecanus'],\n 'encase': ['encase', 'seance', 'seneca'],\n 'encash': ['encash', 'sanche'],\n 'encauma': ['cumaean', 'encauma'],\n 'encaustes': ['acuteness', 'encaustes'],\n 'encaustic': ['encaustic', 'succinate'],\n 'encephalomeningitis': ['encephalomeningitis', 'meningoencephalitis'],\n 'encephalomeningocele': ['encephalomeningocele', 'meningoencephalocele'],\n 'encephalomyelitis': ['encephalomyelitis', 'myeloencephalitis'],\n 'enchair': ['chainer', 'enchair', 'rechain'],\n 'encharge': ['encharge', 'rechange'],\n 'encharnel': ['channeler', 'encharnel'],\n 'enchytrae': ['cytherean', 'enchytrae'],\n 'encina': ['canine', 'encina', 'neanic'],\n 'encinillo': ['encinillo', 'linolenic'],\n 'encist': ['encist', 'incest', 'insect', 'scient'],\n 'encitadel': ['declinate', 'encitadel'],\n 'enclaret': ['celarent', 'centrale', 'enclaret'],\n 'enclasp': ['enclasp', 'spancel'],\n 'enclave': ['enclave', 'levance', 'valence'],\n 'enclosure': ['enclosure', 'recounsel'],\n 'encoignure': ['encoignure', 'neurogenic'],\n 'encoil': ['clione', 'coelin', 'encoil', 'enolic'],\n 'encomiastic': ['cosmetician', 'encomiastic'],\n 'encomic': ['comenic', 'encomic', 'meconic'],\n 'encomium': ['encomium', 'meconium'],\n 'encoronal': ['encoronal', 'olecranon'],\n 'encoronate': ['encoronate', 'entocornea'],\n 'encradle': ['calender', 'encradle'],\n 'encranial': ['carnelian', 'encranial'],\n 'encratic': ['acentric', 'encratic', 'nearctic'],\n 'encratism': ['encratism', 'miscreant'],\n 'encraty': ['encraty', 'nectary'],\n 'encreel': ['crenele', 'encreel'],\n 'encrinital': ['encrinital', 'tricennial'],\n 'encrisp': ['encrisp', 'pincers'],\n 'encrust': ['encrust', 'uncrest'],\n 'encurl': ['encurl', 'lucern'],\n 'encurtain': ['encurtain', 'runcinate', 'uncertain'],\n 'encyrtidae': ['encyrtidae', 'nycteridae'],\n 'end': ['den', 'end', 'ned'],\n 'endaortic': ['citronade', 'endaortic', 'redaction'],\n 'endboard': ['deadborn', 'endboard'],\n 'endear': ['deaner', 'endear'],\n 'endeared': ['deadener', 'endeared'],\n 'endearing': ['endearing', 'engrained', 'grenadine'],\n 'endearingly': ['endearingly', 'engrainedly'],\n 'endemial': ['endemial', 'madeline'],\n 'endere': ['endere', 'needer', 'reeden'],\n 'enderonic': ['enderonic', 'endocrine'],\n 'endevil': ['develin', 'endevil'],\n 'endew': ['endew', 'wende'],\n 'ending': ['ending', 'ginned'],\n 'endite': ['eident', 'endite'],\n 'endive': ['endive', 'envied', 'veined'],\n 'endoarteritis': ['endoarteritis', 'sideronatrite'],\n 'endocline': ['endocline', 'indolence'],\n 'endocrine': ['enderonic', 'endocrine'],\n 'endome': ['endome', 'omened'],\n 'endopathic': ['dictaphone', 'endopathic'],\n 'endophasic': ['deaconship', 'endophasic'],\n 'endoral': ['endoral', 'ladrone', 'leonard'],\n 'endosarc': ['endosarc', 'secondar'],\n 'endosome': ['endosome', 'moonseed'],\n 'endosporium': ['endosporium', 'imponderous'],\n 'endosteal': ['endosteal', 'leadstone'],\n 'endothecial': ['chelidonate', 'endothecial'],\n 'endothelia': ['endothelia', 'ethanediol', 'ethenoidal'],\n 'endow': ['endow', 'nowed'],\n 'endura': ['endura', 'neurad', 'undear', 'unread'],\n 'endurably': ['endurably', 'undryable'],\n 'endure': ['durene', 'endure'],\n 'endurer': ['endurer', 'underer'],\n 'enduring': ['enduring', 'unringed'],\n 'enduringly': ['enduringly', 'underlying'],\n 'endwise': ['endwise', 'sinewed'],\n 'enema': ['ameen', 'amene', 'enema'],\n 'enemy': ['enemy', 'yemen'],\n 'energesis': ['energesis', 'regenesis'],\n 'energeticist': ['energeticist', 'energetistic'],\n 'energetistic': ['energeticist', 'energetistic'],\n 'energic': ['energic', 'generic'],\n 'energical': ['energical', 'generical'],\n 'energid': ['energid', 'reeding'],\n 'energist': ['energist', 'steering'],\n 'energy': ['energy', 'greeny', 'gyrene'],\n 'enervate': ['enervate', 'venerate'],\n 'enervation': ['enervation', 'veneration'],\n 'enervative': ['enervative', 'venerative'],\n 'enervator': ['enervator', 'renovater', 'venerator'],\n 'enfilade': ['alfenide', 'enfilade'],\n 'enfile': ['enfile', 'enlief', 'enlife', 'feline'],\n 'enflesh': ['enflesh', 'fleshen'],\n 'enfoil': ['enfoil', 'olefin'],\n 'enfold': ['enfold', 'folden', 'fondle'],\n 'enforcer': ['confrere', 'enforcer', 'reconfer'],\n 'enframe': ['enframe', 'freeman'],\n 'engaol': ['angelo', 'engaol'],\n 'engarb': ['banger', 'engarb', 'graben'],\n 'engaud': ['augend', 'engaud', 'unaged'],\n 'engild': ['dingle', 'elding', 'engild', 'gilden'],\n 'engird': ['engird', 'ringed'],\n 'engirdle': ['engirdle', 'reedling'],\n 'engirt': ['engirt', 'tinger'],\n 'englacial': ['angelical', 'englacial', 'galenical'],\n 'englacially': ['angelically', 'englacially'],\n 'englad': ['angled', 'dangle', 'englad', 'lagend'],\n 'englander': ['englander', 'greenland'],\n 'english': ['english', 'shingle'],\n 'englisher': ['englisher', 'reshingle'],\n 'englut': ['englut', 'gluten', 'ungelt'],\n 'engobe': ['begone', 'engobe'],\n 'engold': ['engold', 'golden'],\n 'engrail': ['aligner', 'engrail', 'realign', 'reginal'],\n 'engrailed': ['engrailed', 'geraldine'],\n 'engrailment': ['engrailment', 'realignment'],\n 'engrain': ['earning', 'engrain'],\n 'engrained': ['endearing', 'engrained', 'grenadine'],\n 'engrainedly': ['endearingly', 'engrainedly'],\n 'engram': ['engram', 'german', 'manger'],\n 'engraphic': ['engraphic', 'preaching'],\n 'engrave': ['avenger', 'engrave'],\n 'engross': ['engross', 'grossen'],\n 'enhat': ['enhat', 'ethan', 'nathe', 'neath', 'thane'],\n 'enheart': ['earthen', 'enheart', 'hearten', 'naether', 'teheran', 'traheen'],\n 'enherit': ['enherit', 'etherin', 'neither', 'therein'],\n 'enhydra': ['enhydra', 'henyard'],\n 'eniac': ['anice', 'eniac'],\n 'enicuridae': ['audiencier', 'enicuridae'],\n 'enid': ['dine', 'enid', 'inde', 'nide'],\n 'enif': ['enif', 'fine', 'neif', 'nife'],\n 'enisle': ['enisle', 'ensile', 'senile', 'silene'],\n 'enlace': ['elance', 'enlace'],\n 'enlard': ['aldern',\n            'darnel',\n            'enlard',\n            'lander',\n            'lenard',\n            'randle',\n            'reland'],\n 'enlarge': ['enlarge', 'general', 'gleaner'],\n 'enleaf': ['enleaf', 'leafen'],\n 'enlief': ['enfile', 'enlief', 'enlife', 'feline'],\n 'enlife': ['enfile', 'enlief', 'enlife', 'feline'],\n 'enlight': ['enlight', 'lighten'],\n 'enlist': ['enlist', 'listen', 'silent', 'tinsel'],\n 'enlisted': ['enlisted', 'lintseed'],\n 'enlister': ['enlister', 'esterlin', 'listener', 'relisten'],\n 'enmass': ['enmass', 'maness', 'messan'],\n 'enneadic': ['cadinene', 'decennia', 'enneadic'],\n 'ennobler': ['ennobler', 'nonrebel'],\n 'ennoic': ['conine', 'connie', 'ennoic'],\n 'ennomic': ['ennomic', 'meconin'],\n 'enoch': ['cohen', 'enoch'],\n 'enocyte': ['enocyte', 'neocyte'],\n 'enodal': ['enodal', 'loaden'],\n 'enoil': ['enoil', 'ileon', 'olein'],\n 'enol': ['elon', 'enol', 'leno', 'leon', 'lone', 'noel'],\n 'enolic': ['clione', 'coelin', 'encoil', 'enolic'],\n 'enomania': ['enomania', 'maeonian'],\n 'enomotarch': ['chromatone', 'enomotarch'],\n 'enorganic': ['enorganic', 'ignorance'],\n 'enorm': ['enorm', 'moner', 'morne'],\n 'enormous': ['enormous', 'unmorose'],\n 'enos': ['enos', 'nose'],\n 'enostosis': ['enostosis', 'sootiness'],\n 'enow': ['enow', 'owen', 'wone'],\n 'enphytotic': ['enphytotic', 'entophytic'],\n 'enrace': ['careen', 'carene', 'enrace'],\n 'enrage': ['egeran', 'enrage', 'ergane', 'genear', 'genera'],\n 'enraged': ['derange', 'enraged', 'gardeen', 'gerenda', 'grandee', 'grenade'],\n 'enragedly': ['enragedly', 'legendary'],\n 'enrapt': ['arpent',\n            'enrapt',\n            'entrap',\n            'panter',\n            'parent',\n            'pretan',\n            'trepan'],\n 'enravish': ['enravish', 'ravenish', 'vanisher'],\n 'enray': ['enray', 'yearn'],\n 'enrib': ['brine', 'enrib'],\n 'enrich': ['enrich', 'nicher', 'richen'],\n 'enring': ['enring', 'ginner'],\n 'enrive': ['enrive', 'envier', 'veiner', 'verine'],\n 'enrobe': ['boreen', 'enrobe', 'neebor', 'rebone'],\n 'enrol': ['enrol', 'loren'],\n 'enrolled': ['enrolled', 'rondelle'],\n 'enrough': ['enrough', 'roughen'],\n 'enruin': ['enruin', 'neurin', 'unrein'],\n 'enrut': ['enrut', 'tuner', 'urent'],\n 'ens': ['ens', 'sen'],\n 'ensaint': ['ensaint', 'stanine'],\n 'ensate': ['ensate', 'enseat', 'santee', 'sateen', 'senate'],\n 'ense': ['ense', 'esne', 'nese', 'seen', 'snee'],\n 'enseam': ['enseam', 'semnae'],\n 'enseat': ['ensate', 'enseat', 'santee', 'sateen', 'senate'],\n 'ensepulcher': ['ensepulcher', 'ensepulchre'],\n 'ensepulchre': ['ensepulcher', 'ensepulchre'],\n 'enshade': ['dasheen', 'enshade'],\n 'enshroud': ['enshroud', 'unshored'],\n 'ensigncy': ['ensigncy', 'syngenic'],\n 'ensilage': ['ensilage', 'genesial', 'signalee'],\n 'ensile': ['enisle', 'ensile', 'senile', 'silene'],\n 'ensilver': ['ensilver', 'sniveler'],\n 'ensmall': ['ensmall', 'smallen'],\n 'ensoul': ['ensoul', 'olenus', 'unsole'],\n 'enspirit': ['enspirit', 'pristine'],\n 'enstar': ['astern', 'enstar', 'stenar', 'sterna'],\n 'enstatite': ['enstatite', 'intestate', 'satinette'],\n 'enstool': ['enstool', 'olonets'],\n 'enstore': ['enstore', 'estrone', 'storeen', 'tornese'],\n 'ensue': ['ensue', 'seenu', 'unsee'],\n 'ensuer': ['ensuer', 'ensure'],\n 'ensure': ['ensuer', 'ensure'],\n 'entablature': ['entablature', 'untreatable'],\n 'entach': ['entach', 'netcha'],\n 'entad': ['denat', 'entad'],\n 'entada': ['adnate', 'entada'],\n 'entail': ['entail', 'tineal'],\n 'entailer': ['elaterin', 'entailer', 'treenail'],\n 'ental': ['ental', 'laten', 'leant'],\n 'entasia': ['anisate', 'entasia'],\n 'entasis': ['entasis', 'sestian', 'sestina'],\n 'entelam': ['entelam', 'leetman'],\n 'enter': ['enter', 'neter', 'renet', 'terne', 'treen'],\n 'enteral': ['alterne', 'enteral', 'eternal', 'teleran', 'teneral'],\n 'enterer': ['enterer', 'terrene'],\n 'enteria': ['enteria', 'trainee', 'triaene'],\n 'enteric': ['citrene', 'enteric', 'enticer', 'tercine'],\n 'enterocolitis': ['coloenteritis', 'enterocolitis'],\n 'enterogastritis': ['enterogastritis', 'gastroenteritis'],\n 'enteroid': ['enteroid', 'orendite'],\n 'enteron': ['enteron', 'tenoner'],\n 'enteropexy': ['enteropexy', 'oxyterpene'],\n 'entertain': ['entertain', 'tarentine', 'terentian'],\n 'entheal': ['entheal', 'lethean'],\n 'enthraldom': ['enthraldom', 'motherland'],\n 'enthuse': ['enthuse', 'unsheet'],\n 'entia': ['entia', 'teian', 'tenai', 'tinea'],\n 'enticer': ['citrene', 'enteric', 'enticer', 'tercine'],\n 'entincture': ['entincture', 'unreticent'],\n 'entire': ['entire', 'triene'],\n 'entirely': ['entirely', 'lientery'],\n 'entirety': ['entirety', 'eternity'],\n 'entity': ['entity', 'tinety'],\n 'entocoelic': ['coelection', 'entocoelic'],\n 'entocornea': ['encoronate', 'entocornea'],\n 'entohyal': ['entohyal', 'ethanoyl'],\n 'entoil': ['entoil', 'lionet'],\n 'entomeric': ['entomeric', 'intercome', 'morencite'],\n 'entomic': ['centimo', 'entomic', 'tecomin'],\n 'entomical': ['entomical', 'melanotic'],\n 'entomion': ['entomion', 'noontime'],\n 'entomoid': ['demotion', 'entomoid', 'moontide'],\n 'entomophily': ['entomophily', 'monophylite'],\n 'entomotomy': ['entomotomy', 'omentotomy'],\n 'entoparasite': ['antiprotease', 'entoparasite'],\n 'entophyte': ['entophyte', 'tenophyte'],\n 'entophytic': ['enphytotic', 'entophytic'],\n 'entopic': ['entopic', 'nepotic', 'pentoic'],\n 'entoplastic': ['entoplastic', 'spinotectal', 'tectospinal', 'tenoplastic'],\n 'entoretina': ['entoretina', 'tetraonine'],\n 'entosarc': ['ancestor', 'entosarc'],\n 'entotic': ['entotic', 'tonetic'],\n 'entozoa': ['entozoa', 'ozonate'],\n 'entozoic': ['entozoic', 'enzootic'],\n 'entrail': ['entrail',\n             'latiner',\n             'latrine',\n             'ratline',\n             'reliant',\n             'retinal',\n             'trenail'],\n 'entrain': ['entrain', 'teriann'],\n 'entrance': ['centenar', 'entrance'],\n 'entrap': ['arpent',\n            'enrapt',\n            'entrap',\n            'panter',\n            'parent',\n            'pretan',\n            'trepan'],\n 'entreat': ['entreat', 'ratteen', 'tarente', 'ternate', 'tetrane'],\n 'entreating': ['entreating', 'interagent'],\n 'entree': ['entree', 'rentee', 'retene'],\n 'entrepas': ['entrepas', 'septenar'],\n 'entropion': ['entropion', 'pontonier', 'prenotion'],\n 'entropium': ['entropium', 'importune'],\n 'entrust': ['entrust', 'stunter', 'trusten'],\n 'enumeration': ['enumeration', 'mountaineer'],\n 'enunciation': ['enunciation', 'incuneation'],\n 'enunciator': ['enunciator', 'uncreation'],\n 'enure': ['enure', 'reune'],\n 'envelope': ['envelope', 'ovenpeel'],\n 'enverdure': ['enverdure', 'unrevered'],\n 'envied': ['endive', 'envied', 'veined'],\n 'envier': ['enrive', 'envier', 'veiner', 'verine'],\n 'envious': ['envious', 'niveous', 'veinous'],\n 'envoy': ['envoy', 'nevoy', 'yoven'],\n 'enwood': ['enwood', 'wooden'],\n 'enwound': ['enwound', 'unowned'],\n 'enwrap': ['enwrap', 'pawner', 'repawn'],\n 'enwrite': ['enwrite', 'retwine'],\n 'enzootic': ['entozoic', 'enzootic'],\n 'eoan': ['aeon', 'eoan'],\n 'eogaean': ['eogaean', 'neogaea'],\n 'eolithic': ['chiolite', 'eolithic'],\n 'eon': ['eon', 'neo', 'one'],\n 'eonism': ['eonism', 'mesion', 'oneism', 'simeon'],\n 'eophyton': ['eophyton', 'honeypot'],\n 'eosaurus': ['eosaurus', 'rousseau'],\n 'eosin': ['eosin', 'noise'],\n 'eosinoblast': ['bosselation', 'eosinoblast'],\n 'epacrid': ['epacrid', 'peracid', 'preacid'],\n 'epacris': ['epacris', 'scrapie', 'serapic'],\n 'epactal': ['epactal', 'placate'],\n 'eparch': ['aperch', 'eparch', 'percha', 'preach'],\n 'eparchial': ['eparchial', 'raphaelic'],\n 'eparchy': ['eparchy', 'preachy'],\n 'epha': ['epha', 'heap'],\n 'epharmonic': ['epharmonic', 'pinachrome'],\n 'ephemeris': ['emeership', 'ephemeris'],\n 'ephod': ['depoh', 'ephod', 'hoped'],\n 'ephor': ['ephor', 'hoper'],\n 'ephorus': ['ephorus', 'orpheus', 'upshore'],\n 'epibasal': ['ablepsia', 'epibasal'],\n 'epibole': ['epibole', 'epilobe'],\n 'epic': ['epic', 'pice'],\n 'epical': ['epical', 'piacle', 'plaice'],\n 'epicarp': ['crappie', 'epicarp'],\n 'epicentral': ['epicentral', 'parentelic'],\n 'epiceratodus': ['dipteraceous', 'epiceratodus'],\n 'epichorial': ['aerophilic', 'epichorial'],\n 'epicly': ['epicly', 'pyelic'],\n 'epicostal': ['alopecist', 'altiscope', 'epicostal', 'scapolite'],\n 'epicotyl': ['epicotyl', 'lipocyte'],\n 'epicranial': ['epicranial', 'periacinal'],\n 'epiderm': ['demirep', 'epiderm', 'impeder', 'remiped'],\n 'epiderma': ['epiderma', 'premedia'],\n 'epidermal': ['epidermal', 'impleader', 'premedial'],\n 'epidermis': ['dispireme', 'epidermis'],\n 'epididymovasostomy': ['epididymovasostomy', 'vasoepididymostomy'],\n 'epidural': ['dipleura', 'epidural'],\n 'epigram': ['epigram', 'primage'],\n 'epilabrum': ['epilabrum', 'impuberal'],\n 'epilachna': ['cephalina', 'epilachna'],\n 'epilate': ['epilate', 'epitela', 'pileate'],\n 'epilation': ['epilation', 'polianite'],\n 'epilatory': ['epilatory', 'petiolary'],\n 'epilobe': ['epibole', 'epilobe'],\n 'epimer': ['empire', 'epimer'],\n 'epiotic': ['epiotic', 'poietic'],\n 'epipactis': ['epipactis', 'epipastic'],\n 'epipastic': ['epipactis', 'epipastic'],\n 'epiplasm': ['epiplasm', 'palmipes'],\n 'epiploic': ['epiploic', 'epipolic'],\n 'epipolic': ['epiploic', 'epipolic'],\n 'epirotic': ['epirotic', 'periotic'],\n 'episclera': ['episclera', 'periclase'],\n 'episematic': ['episematic', 'septicemia'],\n 'episodal': ['episodal', 'lapidose', 'sepaloid'],\n 'episodial': ['apsidiole', 'episodial'],\n 'epistatic': ['epistatic', 'pistacite'],\n 'episternal': ['alpestrine', 'episternal', 'interlapse', 'presential'],\n 'episternum': ['episternum', 'uprisement'],\n 'epistlar': ['epistlar', 'pilaster', 'plaister', 'priestal'],\n 'epistle': ['epistle', 'septile'],\n 'epistler': ['epistler', 'spirelet'],\n 'epistoler': ['epistoler', 'peristole', 'perseitol', 'pistoleer'],\n 'epistoma': ['epistoma', 'metopias'],\n 'epistome': ['epistome', 'epsomite'],\n 'epistroma': ['epistroma', 'peristoma'],\n 'epitela': ['epilate', 'epitela', 'pileate'],\n 'epithecal': ['epithecal', 'petechial', 'phacelite'],\n 'epithecate': ['epithecate', 'petechiate'],\n 'epithet': ['epithet', 'heptite'],\n 'epithyme': ['epithyme', 'hemitype'],\n 'epitomizer': ['epitomizer', 'peritomize'],\n 'epizoal': ['epizoal', 'lopezia', 'opalize'],\n 'epoch': ['epoch', 'poche'],\n 'epodic': ['copied', 'epodic'],\n 'epornitic': ['epornitic', 'proteinic'],\n 'epos': ['epos', 'peso', 'pose', 'sope'],\n 'epsilon': ['epsilon', 'sinople'],\n 'epsomite': ['epistome', 'epsomite'],\n 'epulis': ['epulis', 'pileus'],\n 'epulo': ['epulo', 'loupe'],\n 'epuloid': ['epuloid', 'euploid'],\n 'epulosis': ['epulosis', 'pelusios'],\n 'epulotic': ['epulotic', 'poultice'],\n 'epural': ['epural', 'perula', 'pleura'],\n 'epuration': ['epuration', 'eupatorin'],\n 'equal': ['equal', 'quale', 'queal'],\n 'equalable': ['aquabelle', 'equalable'],\n 'equiangle': ['angelique', 'equiangle'],\n 'equinity': ['equinity', 'inequity'],\n 'equip': ['equip', 'pique'],\n 'equitable': ['equitable', 'quietable'],\n 'equitist': ['equitist', 'quietist'],\n 'equus': ['equus', 'usque'],\n 'er': ['er', 're'],\n 'era': ['aer', 'are', 'ear', 'era', 'rea'],\n 'erade': ['eared', 'erade'],\n 'eradicant': ['carinated', 'eradicant'],\n 'eradicator': ['corradiate', 'cortaderia', 'eradicator'],\n 'eral': ['earl', 'eral', 'lear', 'real'],\n 'eranist': ['asterin', 'eranist', 'restain', 'stainer', 'starnie', 'stearin'],\n 'erase': ['easer', 'erase'],\n 'erased': ['erased', 'reseda', 'seared'],\n 'eraser': ['eraser', 'searer'],\n 'erasmian': ['erasmian', 'raiseman'],\n 'erasmus': ['assumer', 'erasmus', 'masseur'],\n 'erastian': ['artesian', 'asterina', 'asternia', 'erastian', 'seatrain'],\n 'erastus': ['erastus', 'ressaut'],\n 'erava': ['avera', 'erava'],\n 'erbia': ['barie', 'beira', 'erbia', 'rebia'],\n 'erbium': ['erbium', 'imbrue'],\n 'erd': ['erd', 'red'],\n 'ere': ['eer', 'ere', 'ree'],\n 'erect': ['crete', 'erect'],\n 'erectable': ['celebrate', 'erectable'],\n 'erecting': ['erecting', 'gentrice'],\n 'erection': ['erection', 'neoteric', 'nocerite', 'renotice'],\n 'eremic': ['eremic', 'merice'],\n 'eremital': ['eremital', 'materiel'],\n 'erept': ['erept', 'peter', 'petre'],\n 'ereptic': ['ereptic', 'precite', 'receipt'],\n 'ereption': ['ereption', 'tropeine'],\n 'erethic': ['erethic', 'etheric', 'heretic', 'heteric', 'teicher'],\n 'erethism': ['erethism', 'etherism', 'heterism'],\n 'erethismic': ['erethismic', 'hetericism'],\n 'erethistic': ['erethistic', 'hetericist'],\n 'eretrian': ['arretine', 'eretrian', 'eritrean', 'retainer'],\n 'erg': ['erg', 'ger', 'reg'],\n 'ergal': ['argel', 'ergal', 'garle', 'glare', 'lager', 'large', 'regal'],\n 'ergamine': ['ergamine', 'merginae'],\n 'ergane': ['egeran', 'enrage', 'ergane', 'genear', 'genera'],\n 'ergastic': ['agrestic', 'ergastic'],\n 'ergates': ['ergates', 'gearset', 'geaster'],\n 'ergoism': ['ergoism', 'ogreism'],\n 'ergomaniac': ['ergomaniac', 'grecomania'],\n 'ergon': ['ergon', 'genro', 'goner', 'negro'],\n 'ergot': ['ergot', 'rotge'],\n 'ergotamine': ['angiometer', 'ergotamine', 'geometrina'],\n 'ergotin': ['ergotin', 'genitor', 'negrito', 'ogtiern', 'trigone'],\n 'ergusia': ['ergusia', 'gerusia', 'sarigue'],\n 'eria': ['aire', 'eria'],\n 'erian': ['erian', 'irena', 'reina'],\n 'eric': ['eric', 'rice'],\n 'erica': ['acier', 'aeric', 'ceria', 'erica'],\n 'ericad': ['acider', 'ericad'],\n 'erical': ['carlie', 'claire', 'eclair', 'erical'],\n 'erichtoid': ['dichroite', 'erichtoid', 'theriodic'],\n 'erigenia': ['aegirine', 'erigenia'],\n 'erigeron': ['erigeron', 'reignore'],\n 'erik': ['erik', 'kier', 'reki'],\n 'erineum': ['erineum', 'unireme'],\n 'erinose': ['erinose', 'roseine'],\n 'eristalis': ['eristalis', 'serialist'],\n 'eristic': ['ectiris', 'eristic'],\n 'eristical': ['eristical', 'realistic'],\n 'erithacus': ['erithacus', 'eucharist'],\n 'eritrean': ['arretine', 'eretrian', 'eritrean', 'retainer'],\n 'erma': ['erma', 'mare', 'rame', 'ream'],\n 'ermani': ['ermani', 'marine', 'remain'],\n 'ermines': ['ermines', 'inermes'],\n 'erne': ['erne', 'neer', 'reen'],\n 'ernest': ['ernest', 'nester', 'resent', 'streen'],\n 'ernie': ['ernie', 'ierne', 'irene'],\n 'ernst': ['ernst', 'stern'],\n 'erode': ['doree', 'erode'],\n 'eros': ['eros', 'rose', 'sero', 'sore'],\n 'erose': ['erose', 'soree'],\n 'erotesis': ['erotesis', 'isostere'],\n 'erotic': ['erotic', 'tercio'],\n 'erotical': ['calorite', 'erotical', 'loricate'],\n 'eroticism': ['eroticism', 'isometric', 'meroistic', 'trioecism'],\n 'erotism': ['erotism', 'mortise', 'trisome'],\n 'erotogenic': ['erotogenic', 'geocronite', 'orogenetic'],\n 'errabund': ['errabund', 'unbarred'],\n 'errand': ['darner', 'darren', 'errand', 'rander', 'redarn'],\n 'errant': ['arrent', 'errant', 'ranter', 'ternar'],\n 'errantia': ['artarine', 'errantia'],\n 'erratic': ['cartier', 'cirrate', 'erratic'],\n 'erratum': ['erratum', 'maturer'],\n 'erring': ['erring', 'rering', 'ringer'],\n 'errite': ['errite', 'reiter', 'retier', 'retire', 'tierer'],\n 'ers': ['ers', 'ser'],\n 'ersar': ['ersar', 'raser', 'serra'],\n 'erse': ['erse', 'rees', 'seer', 'sere'],\n 'erthen': ['erthen', 'henter', 'nether', 'threne'],\n 'eruc': ['cure', 'ecru', 'eruc'],\n 'eruciform': ['eruciform', 'urceiform'],\n 'erucin': ['curine', 'erucin', 'neuric'],\n 'erucivorous': ['erucivorous', 'overcurious'],\n 'eruct': ['cruet', 'eruct', 'recut', 'truce'],\n 'eruction': ['eruction', 'neurotic'],\n 'erugate': ['erugate', 'guetare'],\n 'erumpent': ['erumpent', 'untemper'],\n 'eruption': ['eruption', 'unitrope'],\n 'erwin': ['erwin', 'rewin', 'winer'],\n 'eryngium': ['eryngium', 'gynerium'],\n 'eryon': ['eryon', 'onery'],\n 'eryops': ['eryops', 'osprey'],\n 'erythea': ['erythea', 'hetaery', 'yeather'],\n 'erythrin': ['erythrin', 'tyrrheni'],\n 'erythrophage': ['erythrophage', 'heterography'],\n 'erythrophyllin': ['erythrophyllin', 'phylloerythrin'],\n 'erythropia': ['erythropia', 'pyrotheria'],\n 'es': ['es', 'se'],\n 'esca': ['case', 'esca'],\n 'escalan': ['escalan', 'scalena'],\n 'escalin': ['celsian', 'escalin', 'sanicle', 'secalin'],\n 'escaloped': ['copleased', 'escaloped'],\n 'escapement': ['escapement', 'espacement'],\n 'escaper': ['escaper', 'respace'],\n 'escarp': ['casper', 'escarp', 'parsec', 'scrape', 'secpar', 'spacer'],\n 'eschar': ['arches', 'chaser', 'eschar', 'recash', 'search'],\n 'eschara': ['asearch', 'eschara'],\n 'escheator': ['escheator', 'tocharese'],\n 'escobilla': ['escobilla', 'obeliscal'],\n 'escolar': ['escolar', 'solacer'],\n 'escort': ['corset', 'cortes', 'coster', 'escort', 'scoter', 'sector'],\n 'escortment': ['centermost', 'escortment'],\n 'escrol': ['closer', 'cresol', 'escrol'],\n 'escropulo': ['escropulo', 'supercool'],\n 'esculent': ['esculent', 'unselect'],\n 'esculin': ['esculin', 'incluse'],\n 'esere': ['esere', 'reese', 'resee'],\n 'esexual': ['esexual', 'sexuale'],\n 'eshin': ['eshin', 'shine'],\n 'esiphonal': ['esiphonal', 'phaseolin'],\n 'esker': ['esker', 'keres', 'reesk', 'seker', 'skeer', 'skere'],\n 'eskualdun': ['eskualdun', 'euskaldun'],\n 'eskuara': ['eskuara', 'euskara'],\n 'esne': ['ense', 'esne', 'nese', 'seen', 'snee'],\n 'esophagogastrostomy': ['esophagogastrostomy', 'gastroesophagostomy'],\n 'esopus': ['esopus', 'spouse'],\n 'esoterical': ['cesarolite', 'esoterical'],\n 'esoterist': ['esoterist', 'trisetose'],\n 'esotrope': ['esotrope', 'proteose'],\n 'esotropia': ['aportoise', 'esotropia'],\n 'espacement': ['escapement', 'espacement'],\n 'espadon': ['espadon', 'spadone'],\n 'esparto': ['esparto', 'petrosa', 'seaport'],\n 'esperantic': ['esperantic', 'interspace'],\n 'esperantido': ['desperation', 'esperantido'],\n 'esperantism': ['esperantism', 'strepsinema'],\n 'esperanto': ['esperanto', 'personate'],\n 'espial': ['espial', 'lipase', 'pelias'],\n 'espier': ['espier', 'peiser'],\n 'espinal': ['espinal', 'pinales', 'spaniel'],\n 'espino': ['espino', 'sepion'],\n 'espringal': ['espringal', 'presignal', 'relapsing'],\n 'esquire': ['esquire', 'risquee'],\n 'essence': ['essence', 'senesce'],\n 'essenism': ['essenism', 'messines'],\n 'essie': ['essie', 'seise'],\n 'essling': ['essling', 'singles'],\n 'essoin': ['essoin', 'ossein'],\n 'essonite': ['essonite', 'ossetine'],\n 'essorant': ['assentor', 'essorant', 'starnose'],\n 'estamene': ['easement', 'estamene'],\n 'esteem': ['esteem', 'mestee'],\n 'estella': ['estella', 'sellate'],\n 'ester': ['ester',\n           'estre',\n           'reest',\n           'reset',\n           'steer',\n           'stere',\n           'stree',\n           'terse',\n           'tsere'],\n 'esterlin': ['enlister', 'esterlin', 'listener', 'relisten'],\n 'esterling': ['esterling', 'steerling'],\n 'estevin': ['estevin', 'tensive'],\n 'esth': ['esth', 'hest', 'seth'],\n 'esther': ['esther', 'hester', 'theres'],\n 'estivage': ['estivage', 'vegasite'],\n 'estoc': ['coset', 'estoc', 'scote'],\n 'estonian': ['estonian', 'nasonite'],\n 'estop': ['estop', 'stoep', 'stope'],\n 'estradiol': ['estradiol', 'idolaster'],\n 'estrange': ['estrange', 'segreant', 'sergeant', 'sternage'],\n 'estray': ['atresy', 'estray', 'reasty', 'stayer'],\n 'estre': ['ester',\n           'estre',\n           'reest',\n           'reset',\n           'steer',\n           'stere',\n           'stree',\n           'terse',\n           'tsere'],\n 'estreat': ['estreat', 'restate', 'retaste'],\n 'estrepe': ['estrepe', 'resteep', 'steeper'],\n 'estriate': ['estriate', 'treatise'],\n 'estrin': ['estrin', 'insert', 'sinter', 'sterin', 'triens'],\n 'estriol': ['estriol', 'torsile'],\n 'estrogen': ['estrogen', 'gerontes'],\n 'estrone': ['enstore', 'estrone', 'storeen', 'tornese'],\n 'estrous': ['estrous', 'oestrus', 'sestuor', 'tussore'],\n 'estrual': ['arustle', 'estrual', 'saluter', 'saulter'],\n 'estufa': ['estufa', 'fusate'],\n 'eta': ['ate', 'eat', 'eta', 'tae', 'tea'],\n 'etacism': ['cameist', 'etacism', 'sematic'],\n 'etacist': ['etacist', 'statice'],\n 'etalon': ['etalon', 'tolane'],\n 'etamin': ['etamin', 'inmate', 'taimen', 'tamein'],\n 'etamine': ['amenite', 'etamine', 'matinee'],\n 'etch': ['chet', 'etch', 'tche', 'tech'],\n 'etcher': ['cherte', 'etcher'],\n 'eternal': ['alterne', 'enteral', 'eternal', 'teleran', 'teneral'],\n 'eternalism': ['eternalism', 'streamline'],\n 'eternity': ['entirety', 'eternity'],\n 'etesian': ['etesian', 'senaite'],\n 'ethal': ['ethal', 'lathe', 'leath'],\n 'ethan': ['enhat', 'ethan', 'nathe', 'neath', 'thane'],\n 'ethanal': ['anthela', 'ethanal'],\n 'ethane': ['ethane', 'taheen'],\n 'ethanediol': ['endothelia', 'ethanediol', 'ethenoidal'],\n 'ethanim': ['ethanim', 'hematin'],\n 'ethanoyl': ['entohyal', 'ethanoyl'],\n 'ethel': ['ethel', 'lethe'],\n 'ethenoidal': ['endothelia', 'ethanediol', 'ethenoidal'],\n 'ether': ['ether', 'rethe', 'theer', 'there', 'three'],\n 'etheria': ['ehretia', 'etheria'],\n 'etheric': ['erethic', 'etheric', 'heretic', 'heteric', 'teicher'],\n 'etherin': ['enherit', 'etherin', 'neither', 'therein'],\n 'etherion': ['etherion', 'hereinto', 'heronite'],\n 'etherism': ['erethism', 'etherism', 'heterism'],\n 'etherization': ['etherization', 'heterization'],\n 'etherize': ['etherize', 'heterize'],\n 'ethicism': ['ethicism', 'shemitic'],\n 'ethicist': ['ethicist', 'thecitis', 'theistic'],\n 'ethics': ['ethics', 'sethic'],\n 'ethid': ['edith', 'ethid'],\n 'ethine': ['ethine', 'theine'],\n 'ethiop': ['ethiop', 'ophite', 'peitho'],\n 'ethmoidal': ['ethmoidal', 'oldhamite'],\n 'ethmosphenoid': ['ethmosphenoid', 'sphenoethmoid'],\n 'ethmosphenoidal': ['ethmosphenoidal', 'sphenoethmoidal'],\n 'ethnal': ['ethnal', 'hantle', 'lathen', 'thenal'],\n 'ethnical': ['chainlet', 'ethnical'],\n 'ethnological': ['allothogenic', 'ethnological'],\n 'ethnos': ['ethnos', 'honest'],\n 'ethography': ['ethography', 'hyetograph'],\n 'ethologic': ['ethologic', 'theologic'],\n 'ethological': ['ethological', 'lethologica', 'theological'],\n 'ethology': ['ethology', 'theology'],\n 'ethos': ['ethos', 'shote', 'those'],\n 'ethylic': ['ethylic', 'techily'],\n 'ethylin': ['ethylin', 'thienyl'],\n 'etna': ['ante', 'aten', 'etna', 'nate', 'neat', 'taen', 'tane', 'tean'],\n 'etnean': ['etnean', 'neaten'],\n 'etonian': ['enation', 'etonian'],\n 'etruscan': ['etruscan', 'recusant'],\n 'etta': ['etta', 'tate', 'teat'],\n 'ettarre': ['ettarre', 'retreat', 'treater'],\n 'ettle': ['ettle', 'tetel'],\n 'etua': ['aute', 'etua'],\n 'euaster': ['austere', 'euaster'],\n 'eucalypteol': ['eucalypteol', 'eucalyptole'],\n 'eucalyptole': ['eucalypteol', 'eucalyptole'],\n 'eucatropine': ['eucatropine', 'neurectopia'],\n 'eucharis': ['acheirus', 'eucharis'],\n 'eucharist': ['erithacus', 'eucharist'],\n 'euchlaena': ['acheulean', 'euchlaena'],\n 'eulogism': ['eulogism', 'uglisome'],\n 'eumolpus': ['eumolpus', 'plumeous'],\n 'eunomia': ['eunomia', 'moineau'],\n 'eunomy': ['eunomy', 'euonym'],\n 'euonym': ['eunomy', 'euonym'],\n 'eupatorin': ['epuration', 'eupatorin'],\n 'euplastic': ['euplastic', 'spiculate'],\n 'euploid': ['epuloid', 'euploid'],\n 'euproctis': ['crepitous', 'euproctis', 'uroseptic'],\n 'eurindic': ['dineuric', 'eurindic'],\n 'eurus': ['eurus', 'usure'],\n 'euscaro': ['acerous', 'carouse', 'euscaro'],\n 'euskaldun': ['eskualdun', 'euskaldun'],\n 'euskara': ['eskuara', 'euskara'],\n 'eusol': ['eusol', 'louse'],\n 'eutannin': ['eutannin', 'uninnate'],\n 'eutaxic': ['auxetic', 'eutaxic'],\n 'eutheria': ['eutheria', 'hauerite'],\n 'eutropic': ['eutropic', 'outprice'],\n 'eva': ['ave', 'eva'],\n 'evade': ['deave', 'eaved', 'evade'],\n 'evader': ['evader', 'verdea'],\n 'evadne': ['advene', 'evadne'],\n 'evan': ['evan', 'nave', 'vane'],\n 'evanish': ['evanish', 'inshave'],\n 'evase': ['eaves', 'evase', 'seave'],\n 'eve': ['eve', 'vee'],\n 'evea': ['eave', 'evea'],\n 'evection': ['civetone', 'evection'],\n 'evejar': ['evejar', 'rajeev'],\n 'evelyn': ['evelyn', 'evenly'],\n 'even': ['even', 'neve', 'veen'],\n 'evener': ['evener', 'veneer'],\n 'evenly': ['evelyn', 'evenly'],\n 'evens': ['evens', 'seven'],\n 'eveque': ['eveque', 'queeve'],\n 'ever': ['ever', 'reve', 'veer'],\n 'evert': ['evert', 'revet'],\n 'everwhich': ['everwhich', 'whichever'],\n 'everwho': ['everwho', 'however', 'whoever'],\n 'every': ['every', 'veery'],\n 'evestar': ['evestar', 'versate'],\n 'evict': ['civet', 'evict'],\n 'evil': ['evil', 'levi', 'live', 'veil', 'vile', 'vlei'],\n 'evildoer': ['evildoer', 'overidle'],\n 'evilhearted': ['evilhearted', 'vilehearted'],\n 'evilly': ['evilly', 'lively', 'vilely'],\n 'evilness': ['evilness', 'liveness', 'veinless', 'vileness', 'vineless'],\n 'evince': ['cevine', 'evince', 'venice'],\n 'evisite': ['evisite', 'visitee'],\n 'evitation': ['evitation', 'novitiate'],\n 'evocator': ['evocator', 'overcoat'],\n 'evodia': ['evodia', 'ovidae'],\n 'evoker': ['evoker', 'revoke'],\n 'evolver': ['evolver', 'revolve'],\n 'ewder': ['dewer', 'ewder', 'rewed'],\n 'ewe': ['ewe', 'wee'],\n 'ewer': ['ewer', 'were'],\n 'exacter': ['exacter', 'excreta'],\n 'exalt': ['exalt', 'latex'],\n 'exam': ['amex', 'exam', 'xema'],\n 'examinate': ['examinate', 'exanimate', 'metaxenia'],\n 'examination': ['examination', 'exanimation'],\n 'exanimate': ['examinate', 'exanimate', 'metaxenia'],\n 'exanimation': ['examination', 'exanimation'],\n 'exasperation': ['exasperation', 'xenoparasite'],\n 'exaudi': ['adieux', 'exaudi'],\n 'excarnation': ['centraxonia', 'excarnation'],\n 'excecation': ['cacoxenite', 'excecation'],\n 'except': ['except', 'expect'],\n 'exceptant': ['exceptant', 'expectant'],\n 'exceptive': ['exceptive', 'expective'],\n 'excitation': ['excitation', 'intoxicate'],\n 'excitor': ['excitor', 'xerotic'],\n 'excreta': ['exacter', 'excreta'],\n 'excurse': ['excurse', 'excuser'],\n 'excuser': ['excurse', 'excuser'],\n 'exert': ['exert', 'exter'],\n 'exhilarate': ['exhilarate', 'heteraxial'],\n 'exist': ['exist', 'sixte'],\n 'exocarp': ['exocarp', 'praecox'],\n 'exon': ['exon', 'oxen'],\n 'exordia': ['exordia', 'exradio'],\n 'exotic': ['coxite', 'exotic'],\n 'expatiater': ['expatiater', 'expatriate'],\n 'expatriate': ['expatiater', 'expatriate'],\n 'expect': ['except', 'expect'],\n 'expectant': ['exceptant', 'expectant'],\n 'expective': ['exceptive', 'expective'],\n 'expirator': ['expirator', 'operatrix'],\n 'expiree': ['expiree', 'peixere'],\n 'explicator': ['explicator', 'extropical'],\n 'expressionism': ['expressionism', 'misexpression'],\n 'exradio': ['exordia', 'exradio'],\n 'extend': ['dentex', 'extend'],\n 'exter': ['exert', 'exter'],\n 'exterminate': ['antiextreme', 'exterminate'],\n 'extirpationist': ['extirpationist', 'sextipartition'],\n 'extra': ['extra', 'retax', 'taxer'],\n 'extradural': ['dextraural', 'extradural'],\n 'extropical': ['explicator', 'extropical'],\n 'exultancy': ['exultancy', 'unexactly'],\n 'ey': ['ey', 'ye'],\n 'eyah': ['ahey', 'eyah', 'yeah'],\n 'eyas': ['easy', 'eyas'],\n 'eye': ['eye', 'yee'],\n 'eyed': ['eyed', 'yede'],\n 'eyen': ['eyen', 'eyne'],\n 'eyer': ['eyer', 'eyre', 'yere'],\n 'eyn': ['eyn', 'nye', 'yen'],\n 'eyne': ['eyen', 'eyne'],\n 'eyot': ['eyot', 'yote'],\n 'eyra': ['aery', 'eyra', 'yare', 'year'],\n 'eyre': ['eyer', 'eyre', 'yere'],\n 'ezba': ['baze', 'ezba'],\n 'ezra': ['ezra', 'raze'],\n 'facebread': ['barefaced', 'facebread'],\n 'facer': ['facer', 'farce'],\n 'faciend': ['faciend', 'fancied'],\n 'facile': ['facile', 'filace'],\n 'faciobrachial': ['brachiofacial', 'faciobrachial'],\n 'faciocervical': ['cervicofacial', 'faciocervical'],\n 'factable': ['factable', 'labefact'],\n 'factional': ['factional', 'falcation'],\n 'factish': ['catfish', 'factish'],\n 'facture': ['facture', 'furcate'],\n 'facula': ['facula', 'faucal'],\n 'fade': ['deaf', 'fade'],\n 'fader': ['fader', 'farde'],\n 'faery': ['faery', 'freya'],\n 'fagoter': ['aftergo', 'fagoter'],\n 'faience': ['faience', 'fiancee'],\n 'fail': ['alif', 'fail'],\n 'fain': ['fain', 'naif'],\n 'fainly': ['fainly', 'naifly'],\n 'faint': ['faint', 'fanti'],\n 'fair': ['fair', 'fiar', 'raif'],\n 'fake': ['fake', 'feak'],\n 'faker': ['faker', 'freak'],\n 'fakery': ['fakery', 'freaky'],\n 'fakir': ['fakir', 'fraik', 'kafir', 'rafik'],\n 'falcation': ['factional', 'falcation'],\n 'falco': ['falco', 'focal'],\n 'falconet': ['conflate', 'falconet'],\n 'fallback': ['backfall', 'fallback'],\n 'faller': ['faller', 'refall'],\n 'fallfish': ['fallfish', 'fishfall'],\n 'fallible': ['fallible', 'fillable'],\n 'falling': ['falling', 'fingall'],\n 'falser': ['falser', 'flaser'],\n 'faltboat': ['faltboat', 'flatboat'],\n 'falutin': ['falutin', 'flutina'],\n 'falx': ['falx', 'flax'],\n 'fameless': ['fameless', 'selfsame'],\n 'famelessness': ['famelessness', 'selfsameness'],\n 'famine': ['famine', 'infame'],\n 'fancied': ['faciend', 'fancied'],\n 'fangle': ['fangle', 'flange'],\n 'fannia': ['fannia', 'fianna'],\n 'fanti': ['faint', 'fanti'],\n 'far': ['far', 'fra'],\n 'farad': ['daraf', 'farad'],\n 'farce': ['facer', 'farce'],\n 'farcetta': ['afteract', 'artefact', 'farcetta', 'farctate'],\n 'farctate': ['afteract', 'artefact', 'farcetta', 'farctate'],\n 'farde': ['fader', 'farde'],\n 'fardel': ['alfred', 'fardel'],\n 'fare': ['fare', 'fear', 'frae', 'rafe'],\n 'farfel': ['farfel', 'raffle'],\n 'faring': ['faring', 'frangi'],\n 'farl': ['farl', 'ralf'],\n 'farleu': ['earful', 'farleu', 'ferula'],\n 'farm': ['farm', 'fram'],\n 'farmable': ['farmable', 'framable'],\n 'farmer': ['farmer', 'framer'],\n 'farming': ['farming', 'framing'],\n 'farnesol': ['farnesol', 'forensal'],\n 'faro': ['faro', 'fora'],\n 'farolito': ['farolito', 'footrail'],\n 'farse': ['farse', 'frase'],\n 'farset': ['farset', 'faster', 'strafe'],\n 'farsi': ['farsi', 'sarif'],\n 'fascio': ['fascio', 'fiasco'],\n 'fasher': ['afresh', 'fasher', 'ferash'],\n 'fashioner': ['fashioner', 'refashion'],\n 'fast': ['fast', 'saft'],\n 'fasten': ['fasten', 'nefast', 'stefan'],\n 'fastener': ['fastener', 'fenestra', 'refasten'],\n 'faster': ['farset', 'faster', 'strafe'],\n 'fasthold': ['fasthold', 'holdfast'],\n 'fastland': ['fastland', 'landfast'],\n 'fat': ['aft', 'fat'],\n 'fatal': ['aflat', 'fatal'],\n 'fate': ['atef', 'fate', 'feat'],\n 'fated': ['defat', 'fated'],\n 'father': ['father', 'freath', 'hafter'],\n 'faucal': ['facula', 'faucal'],\n 'faucet': ['faucet', 'fucate'],\n 'faulter': ['faulter', 'refutal', 'tearful'],\n 'faultfind': ['faultfind', 'findfault'],\n 'faunish': ['faunish', 'nusfiah'],\n 'faunist': ['faunist', 'fustian', 'infaust'],\n 'favorer': ['favorer', 'overfar', 'refavor'],\n 'fayles': ['fayles', 'safely'],\n 'feague': ['feague', 'feuage'],\n 'feak': ['fake', 'feak'],\n 'feal': ['alef', 'feal', 'flea', 'leaf'],\n 'fealty': ['fealty', 'featly'],\n 'fear': ['fare', 'fear', 'frae', 'rafe'],\n 'feastful': ['feastful', 'sufflate'],\n 'feat': ['atef', 'fate', 'feat'],\n 'featherbed': ['befathered', 'featherbed'],\n 'featherer': ['featherer', 'hereafter'],\n 'featly': ['fealty', 'featly'],\n 'feckly': ['feckly', 'flecky'],\n 'fecundate': ['fecundate', 'unfaceted'],\n 'fecundator': ['fecundator', 'unfactored'],\n 'federate': ['defeater', 'federate', 'redefeat'],\n 'feeder': ['feeder', 'refeed'],\n 'feeding': ['feeding', 'feigned'],\n 'feel': ['feel', 'flee'],\n 'feeler': ['feeler', 'refeel', 'reflee'],\n 'feer': ['feer', 'free', 'reef'],\n 'feering': ['feering', 'feigner', 'freeing', 'reefing', 'refeign'],\n 'feetless': ['feetless', 'feteless'],\n 'fei': ['fei', 'fie', 'ife'],\n 'feif': ['feif', 'fife'],\n 'feigned': ['feeding', 'feigned'],\n 'feigner': ['feering', 'feigner', 'freeing', 'reefing', 'refeign'],\n 'feil': ['feil', 'file', 'leif', 'lief', 'life'],\n 'feint': ['feint', 'fient'],\n 'feis': ['feis', 'fise', 'sife'],\n 'feist': ['feist', 'stife'],\n 'felapton': ['felapton', 'pantofle'],\n 'felid': ['felid', 'field'],\n 'feline': ['enfile', 'enlief', 'enlife', 'feline'],\n 'felinity': ['felinity', 'finitely'],\n 'fels': ['fels', 'self'],\n 'felt': ['felt', 'flet', 'left'],\n 'felter': ['felter', 'telfer', 'trefle'],\n 'felting': ['felting', 'neftgil'],\n 'feltness': ['feltness', 'leftness'],\n 'felwort': ['elfwort', 'felwort'],\n 'feminal': ['feminal', 'inflame'],\n 'femora': ['femora', 'foamer'],\n 'femorocaudal': ['caudofemoral', 'femorocaudal'],\n 'femorotibial': ['femorotibial', 'tibiofemoral'],\n 'femur': ['femur', 'fumer'],\n 'fen': ['fen', 'nef'],\n 'fender': ['fender', 'ferned'],\n 'fenestra': ['fastener', 'fenestra', 'refasten'],\n 'feodary': ['feodary', 'foreday'],\n 'feral': ['feral', 'flare'],\n 'ferash': ['afresh', 'fasher', 'ferash'],\n 'feria': ['afire', 'feria'],\n 'ferine': ['ferine', 'refine'],\n 'ferison': ['ferison', 'foresin'],\n 'ferity': ['ferity', 'freity'],\n 'ferk': ['ferk', 'kerf'],\n 'ferling': ['ferling', 'flinger', 'refling'],\n 'ferly': ['ferly', 'flyer', 'refly'],\n 'fermail': ['fermail', 'fermila'],\n 'fermenter': ['fermenter', 'referment'],\n 'fermila': ['fermail', 'fermila'],\n 'ferned': ['fender', 'ferned'],\n 'ferri': ['ferri', 'firer', 'freir', 'frier'],\n 'ferrihydrocyanic': ['ferrihydrocyanic', 'hydroferricyanic'],\n 'ferrohydrocyanic': ['ferrohydrocyanic', 'hydroferrocyanic'],\n 'ferry': ['ferry', 'freyr', 'fryer'],\n 'fertil': ['fertil', 'filter', 'lifter', 'relift', 'trifle'],\n 'ferula': ['earful', 'farleu', 'ferula'],\n 'ferule': ['ferule', 'fueler', 'refuel'],\n 'ferulic': ['ferulic', 'lucifer'],\n 'fervidity': ['devitrify', 'fervidity'],\n 'festination': ['festination', 'infestation', 'sinfonietta'],\n 'fet': ['eft', 'fet'],\n 'fetal': ['aleft', 'alfet', 'fetal', 'fleta'],\n 'fetcher': ['fetcher', 'refetch'],\n 'feteless': ['feetless', 'feteless'],\n 'fetial': ['fetial', 'filate', 'lafite', 'leafit'],\n 'fetish': ['fetish', 'fishet'],\n 'fetor': ['fetor', 'forte', 'ofter'],\n 'fetter': ['fetter', 'frette'],\n 'feuage': ['feague', 'feuage'],\n 'feudalism': ['feudalism', 'sulfamide'],\n 'feudally': ['delayful', 'feudally'],\n 'feulamort': ['feulamort', 'formulate'],\n 'fi': ['fi', 'if'],\n 'fiance': ['fiance', 'inface'],\n 'fiancee': ['faience', 'fiancee'],\n 'fianna': ['fannia', 'fianna'],\n 'fiar': ['fair', 'fiar', 'raif'],\n 'fiard': ['fiard', 'fraid'],\n 'fiasco': ['fascio', 'fiasco'],\n 'fiber': ['bifer', 'brief', 'fiber'],\n 'fibered': ['debrief', 'defiber', 'fibered'],\n 'fiberless': ['briefless', 'fiberless', 'fibreless'],\n 'fiberware': ['fiberware', 'fibreware'],\n 'fibreless': ['briefless', 'fiberless', 'fibreless'],\n 'fibreware': ['fiberware', 'fibreware'],\n 'fibroadenoma': ['adenofibroma', 'fibroadenoma'],\n 'fibroangioma': ['angiofibroma', 'fibroangioma'],\n 'fibrochondroma': ['chondrofibroma', 'fibrochondroma'],\n 'fibrocystoma': ['cystofibroma', 'fibrocystoma'],\n 'fibrolipoma': ['fibrolipoma', 'lipofibroma'],\n 'fibromucous': ['fibromucous', 'mucofibrous'],\n 'fibromyoma': ['fibromyoma', 'myofibroma'],\n 'fibromyxoma': ['fibromyxoma', 'myxofibroma'],\n 'fibromyxosarcoma': ['fibromyxosarcoma', 'myxofibrosarcoma'],\n 'fibroneuroma': ['fibroneuroma', 'neurofibroma'],\n 'fibroserous': ['fibroserous', 'serofibrous'],\n 'fiche': ['chief', 'fiche'],\n 'fickleness': ['fickleness', 'fleckiness'],\n 'fickly': ['fickly', 'flicky'],\n 'fico': ['coif', 'fico', 'foci'],\n 'fictional': ['cliftonia', 'fictional'],\n 'ficula': ['ficula', 'fulica'],\n 'fiddler': ['fiddler', 'flidder'],\n 'fidele': ['defile', 'fidele'],\n 'fidget': ['fidget', 'gifted'],\n 'fidicula': ['fidicula', 'fiducial'],\n 'fiducial': ['fidicula', 'fiducial'],\n 'fie': ['fei', 'fie', 'ife'],\n 'fiedlerite': ['fiedlerite', 'friedelite'],\n 'field': ['felid', 'field'],\n 'fielded': ['defiled', 'fielded'],\n 'fielder': ['defiler', 'fielder'],\n 'fieldman': ['fieldman', 'inflamed'],\n 'fiendish': ['fiendish', 'finished'],\n 'fient': ['feint', 'fient'],\n 'fiery': ['fiery', 'reify'],\n 'fife': ['feif', 'fife'],\n 'fifteener': ['fifteener', 'teneriffe'],\n 'fifty': ['fifty', 'tiffy'],\n 'fig': ['fig', 'gif'],\n 'fighter': ['fighter', 'freight', 'refight'],\n 'figurate': ['figurate', 'fruitage'],\n 'fike': ['efik', 'fike'],\n 'filace': ['facile', 'filace'],\n 'filago': ['filago', 'gifola'],\n 'filao': ['filao', 'folia'],\n 'filar': ['filar', 'flair', 'frail'],\n 'filate': ['fetial', 'filate', 'lafite', 'leafit'],\n 'file': ['feil', 'file', 'leif', 'lief', 'life'],\n 'filelike': ['filelike', 'lifelike'],\n 'filer': ['filer', 'flier', 'lifer', 'rifle'],\n 'filet': ['filet', 'flite'],\n 'fillable': ['fallible', 'fillable'],\n 'filler': ['filler', 'refill'],\n 'filo': ['filo', 'foil', 'lifo'],\n 'filter': ['fertil', 'filter', 'lifter', 'relift', 'trifle'],\n 'filterer': ['filterer', 'refilter'],\n 'filthless': ['filthless', 'shelflist'],\n 'filtrable': ['filtrable', 'flirtable'],\n 'filtration': ['filtration', 'flirtation'],\n 'finale': ['afenil', 'finale'],\n 'finder': ['finder', 'friend', 'redfin', 'refind'],\n 'findfault': ['faultfind', 'findfault'],\n 'fine': ['enif', 'fine', 'neif', 'nife'],\n 'finely': ['finely', 'lenify'],\n 'finer': ['finer', 'infer'],\n 'finesser': ['finesser', 'rifeness'],\n 'fingall': ['falling', 'fingall'],\n 'finger': ['finger', 'fringe'],\n 'fingerer': ['fingerer', 'refinger'],\n 'fingerflower': ['fingerflower', 'fringeflower'],\n 'fingerless': ['fingerless', 'fringeless'],\n 'fingerlet': ['fingerlet', 'fringelet'],\n 'fingu': ['fingu', 'fungi'],\n 'finical': ['finical', 'lanific'],\n 'finished': ['fiendish', 'finished'],\n 'finisher': ['finisher', 'refinish'],\n 'finitely': ['felinity', 'finitely'],\n 'finkel': ['elfkin', 'finkel'],\n 'finlet': ['finlet', 'infelt'],\n 'finner': ['finner', 'infern'],\n 'firca': ['afric', 'firca'],\n 'fire': ['fire', 'reif', 'rife'],\n 'fireable': ['afebrile', 'balefire', 'fireable'],\n 'firearm': ['firearm', 'marfire'],\n 'fireback': ['backfire', 'fireback'],\n 'fireburn': ['burnfire', 'fireburn'],\n 'fired': ['fired', 'fried'],\n 'fireplug': ['fireplug', 'gripeful'],\n 'firer': ['ferri', 'firer', 'freir', 'frier'],\n 'fireshaft': ['fireshaft', 'tasheriff'],\n 'firestone': ['firestone', 'forestine'],\n 'firetop': ['firetop', 'potifer'],\n 'firm': ['firm', 'frim'],\n 'first': ['first', 'frist'],\n 'firth': ['firth', 'frith'],\n 'fise': ['feis', 'fise', 'sife'],\n 'fishbone': ['bonefish', 'fishbone'],\n 'fisheater': ['fisheater', 'sherifate'],\n 'fisher': ['fisher', 'sherif'],\n 'fishery': ['fishery', 'sherify'],\n 'fishet': ['fetish', 'fishet'],\n 'fishfall': ['fallfish', 'fishfall'],\n 'fishlet': ['fishlet', 'leftish'],\n 'fishpond': ['fishpond', 'pondfish'],\n 'fishpool': ['fishpool', 'foolship'],\n 'fishwood': ['fishwood', 'woodfish'],\n 'fissury': ['fissury', 'russify'],\n 'fist': ['fist', 'sift'],\n 'fisted': ['fisted', 'sifted'],\n 'fister': ['fister', 'resift', 'sifter', 'strife'],\n 'fisting': ['fisting', 'sifting'],\n 'fitout': ['fitout', 'outfit'],\n 'fitter': ['fitter', 'tifter'],\n 'fixer': ['fixer', 'refix'],\n 'flageolet': ['flageolet', 'folletage'],\n 'flair': ['filar', 'flair', 'frail'],\n 'flamant': ['flamant', 'flatman'],\n 'flame': ['flame', 'fleam'],\n 'flamed': ['flamed', 'malfed'],\n 'flandowser': ['flandowser', 'sandflower'],\n 'flange': ['fangle', 'flange'],\n 'flare': ['feral', 'flare'],\n 'flaser': ['falser', 'flaser'],\n 'flasher': ['flasher', 'reflash'],\n 'flatboat': ['faltboat', 'flatboat'],\n 'flatman': ['flamant', 'flatman'],\n 'flatwise': ['flatwise', 'saltwife'],\n 'flaunt': ['flaunt', 'unflat'],\n 'flax': ['falx', 'flax'],\n 'flea': ['alef', 'feal', 'flea', 'leaf'],\n 'fleam': ['flame', 'fleam'],\n 'fleay': ['fleay', 'leafy'],\n 'fleche': ['fleche', 'fleech'],\n 'flecker': ['flecker', 'freckle'],\n 'fleckiness': ['fickleness', 'fleckiness'],\n 'flecky': ['feckly', 'flecky'],\n 'fled': ['delf', 'fled'],\n 'flee': ['feel', 'flee'],\n 'fleech': ['fleche', 'fleech'],\n 'fleer': ['fleer', 'refel'],\n 'flemish': ['flemish', 'himself'],\n 'flenser': ['flenser', 'fresnel'],\n 'flesh': ['flesh', 'shelf'],\n 'fleshed': ['deflesh', 'fleshed'],\n 'fleshen': ['enflesh', 'fleshen'],\n 'flesher': ['flesher', 'herself'],\n 'fleshful': ['fleshful', 'shelfful'],\n 'fleshiness': ['elfishness', 'fleshiness'],\n 'fleshy': ['fleshy', 'shelfy'],\n 'flet': ['felt', 'flet', 'left'],\n 'fleta': ['aleft', 'alfet', 'fetal', 'fleta'],\n 'fleuret': ['fleuret', 'treeful'],\n 'flew': ['flew', 'welf'],\n 'flexed': ['deflex', 'flexed'],\n 'flexured': ['flexured', 'refluxed'],\n 'flicky': ['fickly', 'flicky'],\n 'flidder': ['fiddler', 'flidder'],\n 'flier': ['filer', 'flier', 'lifer', 'rifle'],\n 'fligger': ['fligger', 'friggle'],\n 'flinger': ['ferling', 'flinger', 'refling'],\n 'flingy': ['flingy', 'flying'],\n 'flirtable': ['filtrable', 'flirtable'],\n 'flirtation': ['filtration', 'flirtation'],\n 'flirter': ['flirter', 'trifler'],\n 'flirting': ['flirting', 'trifling'],\n 'flirtingly': ['flirtingly', 'triflingly'],\n 'flit': ['flit', 'lift'],\n 'flite': ['filet', 'flite'],\n 'fliting': ['fliting', 'lifting'],\n 'flitter': ['flitter', 'triflet'],\n 'flo': ['flo', 'lof'],\n 'float': ['aloft', 'float', 'flota'],\n 'floater': ['floater', 'florate', 'refloat'],\n 'flobby': ['bobfly', 'flobby'],\n 'flodge': ['flodge', 'fodgel'],\n 'floe': ['floe', 'fole'],\n 'flog': ['flog', 'golf'],\n 'flogger': ['flogger', 'frogleg'],\n 'floodable': ['bloodleaf', 'floodable'],\n 'flooder': ['flooder', 'reflood'],\n 'floodwater': ['floodwater', 'toadflower', 'waterflood'],\n 'floorer': ['floorer', 'refloor'],\n 'florate': ['floater', 'florate', 'refloat'],\n 'florentine': ['florentine', 'nonfertile'],\n 'floret': ['floret', 'forlet', 'lofter', 'torfel'],\n 'floria': ['floria', 'foliar'],\n 'floriate': ['floriate', 'foralite'],\n 'florican': ['florican', 'fornical'],\n 'floridan': ['floridan', 'florinda'],\n 'florinda': ['floridan', 'florinda'],\n 'flot': ['flot', 'loft'],\n 'flota': ['aloft', 'float', 'flota'],\n 'flounder': ['flounder', 'reunfold', 'unfolder'],\n 'flour': ['flour', 'fluor'],\n 'flourisher': ['flourisher', 'reflourish'],\n 'flouting': ['flouting', 'outfling'],\n 'flow': ['flow', 'fowl', 'wolf'],\n 'flower': ['flower', 'fowler', 'reflow', 'wolfer'],\n 'flowered': ['deflower', 'flowered'],\n 'flowerer': ['flowerer', 'reflower'],\n 'flowery': ['flowery', 'fowlery'],\n 'flowing': ['flowing', 'fowling'],\n 'floyd': ['floyd', 'foldy'],\n 'fluavil': ['fluavil', 'fluvial', 'vialful'],\n 'flucan': ['canful', 'flucan'],\n 'fluctuant': ['fluctuant', 'untactful'],\n 'flue': ['flue', 'fuel'],\n 'fluent': ['fluent', 'netful', 'unfelt', 'unleft'],\n 'fluidly': ['dullify', 'fluidly'],\n 'flukewort': ['flukewort', 'flutework'],\n 'fluor': ['flour', 'fluor'],\n 'fluorate': ['fluorate', 'outflare'],\n 'fluorinate': ['antifouler', 'fluorinate', 'uniflorate'],\n 'fluorine': ['fluorine', 'neurofil'],\n 'fluorobenzene': ['benzofluorene', 'fluorobenzene'],\n 'flusher': ['flusher', 'reflush'],\n 'flushing': ['flushing', 'lungfish'],\n 'fluster': ['fluster', 'restful'],\n 'flustra': ['flustra', 'starful'],\n 'flutework': ['flukewort', 'flutework'],\n 'flutina': ['falutin', 'flutina'],\n 'fluvial': ['fluavil', 'fluvial', 'vialful'],\n 'fluxer': ['fluxer', 'reflux'],\n 'flyblow': ['blowfly', 'flyblow'],\n 'flyer': ['ferly', 'flyer', 'refly'],\n 'flying': ['flingy', 'flying'],\n 'fo': ['fo', 'of'],\n 'foal': ['foal', 'loaf', 'olaf'],\n 'foamer': ['femora', 'foamer'],\n 'focal': ['falco', 'focal'],\n 'foci': ['coif', 'fico', 'foci'],\n 'focuser': ['focuser', 'refocus'],\n 'fodge': ['defog', 'fodge'],\n 'fodgel': ['flodge', 'fodgel'],\n 'fogeater': ['fogeater', 'foregate'],\n 'fogo': ['fogo', 'goof'],\n 'foil': ['filo', 'foil', 'lifo'],\n 'foister': ['foister', 'forties'],\n 'folden': ['enfold', 'folden', 'fondle'],\n 'folder': ['folder', 'refold'],\n 'foldy': ['floyd', 'foldy'],\n 'fole': ['floe', 'fole'],\n 'folia': ['filao', 'folia'],\n 'foliar': ['floria', 'foliar'],\n 'foliature': ['foliature', 'toluifera'],\n 'folletage': ['flageolet', 'folletage'],\n 'fomenter': ['fomenter', 'refoment'],\n 'fondle': ['enfold', 'folden', 'fondle'],\n 'fondu': ['fondu', 'found'],\n 'foo': ['foo', 'ofo'],\n 'fool': ['fool', 'loof', 'olof'],\n 'foolship': ['fishpool', 'foolship'],\n 'footer': ['footer', 'refoot'],\n 'foothot': ['foothot', 'hotfoot'],\n 'footler': ['footler', 'rooflet'],\n 'footpad': ['footpad', 'padfoot'],\n 'footrail': ['farolito', 'footrail'],\n 'foots': ['foots', 'sfoot', 'stoof'],\n 'footsore': ['footsore', 'sorefoot'],\n 'foppish': ['foppish', 'fopship'],\n 'fopship': ['foppish', 'fopship'],\n 'for': ['for', 'fro', 'orf'],\n 'fora': ['faro', 'fora'],\n 'foralite': ['floriate', 'foralite'],\n 'foramen': ['foramen', 'foreman'],\n 'forcemeat': ['aftercome', 'forcemeat'],\n 'forcement': ['coferment', 'forcement'],\n 'fore': ['fore', 'froe', 'ofer'],\n 'forecast': ['cofaster', 'forecast'],\n 'forecaster': ['forecaster', 'reforecast'],\n 'forecover': ['forecover', 'overforce'],\n 'foreday': ['feodary', 'foreday'],\n 'forefit': ['forefit', 'forfeit'],\n 'foregate': ['fogeater', 'foregate'],\n 'foregirth': ['foregirth', 'foreright'],\n 'forego': ['forego', 'goofer'],\n 'forel': ['forel', 'rolfe'],\n 'forelive': ['forelive', 'overfile'],\n 'foreman': ['foramen', 'foreman'],\n 'foremean': ['foremean', 'forename'],\n 'forename': ['foremean', 'forename'],\n 'forensal': ['farnesol', 'forensal'],\n 'forensic': ['forensic', 'forinsec'],\n 'forepart': ['forepart', 'prefator'],\n 'foreright': ['foregirth', 'foreright'],\n 'foresend': ['defensor', 'foresend'],\n 'foresign': ['foresign', 'foresing'],\n 'foresin': ['ferison', 'foresin'],\n 'foresing': ['foresign', 'foresing'],\n 'forest': ['forest', 'forset', 'foster'],\n 'forestage': ['forestage', 'fosterage'],\n 'forestal': ['astrofel', 'forestal'],\n 'forestate': ['forestate', 'foretaste'],\n 'forested': ['deforest', 'forested'],\n 'forestem': ['forestem', 'fretsome'],\n 'forester': ['forester', 'fosterer', 'reforest'],\n 'forestine': ['firestone', 'forestine'],\n 'foretaste': ['forestate', 'foretaste'],\n 'foreutter': ['foreutter', 'outferret'],\n 'forfeit': ['forefit', 'forfeit'],\n 'forfeiter': ['forfeiter', 'reforfeit'],\n 'forgeman': ['forgeman', 'formagen'],\n 'forinsec': ['forensic', 'forinsec'],\n 'forint': ['forint', 'fortin'],\n 'forlet': ['floret', 'forlet', 'lofter', 'torfel'],\n 'form': ['form', 'from'],\n 'formagen': ['forgeman', 'formagen'],\n 'formalin': ['formalin', 'informal', 'laniform'],\n 'formally': ['formally', 'formylal'],\n 'formed': ['deform', 'formed'],\n 'former': ['former', 'reform'],\n 'formica': ['aciform', 'formica'],\n 'formicina': ['aciniform', 'formicina'],\n 'formicoidea': ['aecidioform', 'formicoidea'],\n 'formin': ['formin', 'inform'],\n 'forminate': ['forminate', 'fremontia', 'taeniform'],\n 'formulae': ['formulae', 'fumarole'],\n 'formulaic': ['cauliform', 'formulaic', 'fumarolic'],\n 'formulate': ['feulamort', 'formulate'],\n 'formulator': ['formulator', 'torulaform'],\n 'formylal': ['formally', 'formylal'],\n 'fornical': ['florican', 'fornical'],\n 'fornicated': ['deforciant', 'fornicated'],\n 'forpit': ['forpit', 'profit'],\n 'forritsome': ['forritsome', 'ostreiform'],\n 'forrue': ['forrue', 'fourer', 'fourre', 'furore'],\n 'forset': ['forest', 'forset', 'foster'],\n 'forst': ['forst', 'frost'],\n 'fort': ['fort', 'frot'],\n 'forte': ['fetor', 'forte', 'ofter'],\n 'forth': ['forth', 'froth'],\n 'forthcome': ['forthcome', 'homecroft'],\n 'forthy': ['forthy', 'frothy'],\n 'forties': ['foister', 'forties'],\n 'fortin': ['forint', 'fortin'],\n 'forward': ['forward', 'froward'],\n 'forwarder': ['forwarder', 'reforward'],\n 'forwardly': ['forwardly', 'frowardly'],\n 'forwardness': ['forwardness', 'frowardness'],\n 'foster': ['forest', 'forset', 'foster'],\n 'fosterage': ['forestage', 'fosterage'],\n 'fosterer': ['forester', 'fosterer', 'reforest'],\n 'fot': ['fot', 'oft'],\n 'fou': ['fou', 'ouf'],\n 'fouler': ['fouler', 'furole'],\n 'found': ['fondu', 'found'],\n 'foundationer': ['foundationer', 'refoundation'],\n 'founder': ['founder', 'refound'],\n 'foundling': ['foundling', 'unfolding'],\n 'fourble': ['beflour', 'fourble'],\n 'fourer': ['forrue', 'fourer', 'fourre', 'furore'],\n 'fourre': ['forrue', 'fourer', 'fourre', 'furore'],\n 'fowl': ['flow', 'fowl', 'wolf'],\n 'fowler': ['flower', 'fowler', 'reflow', 'wolfer'],\n 'fowlery': ['flowery', 'fowlery'],\n 'fowling': ['flowing', 'fowling'],\n 'fra': ['far', 'fra'],\n 'frache': ['chafer', 'frache'],\n 'frae': ['fare', 'fear', 'frae', 'rafe'],\n 'fraghan': ['fraghan', 'harfang'],\n 'fraid': ['fiard', 'fraid'],\n 'fraik': ['fakir', 'fraik', 'kafir', 'rafik'],\n 'frail': ['filar', 'flair', 'frail'],\n 'fraiser': ['fraiser', 'frasier'],\n 'fram': ['farm', 'fram'],\n 'framable': ['farmable', 'framable'],\n 'frame': ['frame', 'fream'],\n 'framer': ['farmer', 'framer'],\n 'framing': ['farming', 'framing'],\n 'frangi': ['faring', 'frangi'],\n 'frantic': ['frantic', 'infarct', 'infract'],\n 'frase': ['farse', 'frase'],\n 'frasier': ['fraiser', 'frasier'],\n 'frat': ['frat', 'raft'],\n 'fratcheous': ['fratcheous', 'housecraft'],\n 'frater': ['frater', 'rafter'],\n 'frayed': ['defray', 'frayed'],\n 'freak': ['faker', 'freak'],\n 'freaky': ['fakery', 'freaky'],\n 'fream': ['frame', 'fream'],\n 'freath': ['father', 'freath', 'hafter'],\n 'freckle': ['flecker', 'freckle'],\n 'free': ['feer', 'free', 'reef'],\n 'freed': ['defer', 'freed'],\n 'freeing': ['feering', 'feigner', 'freeing', 'reefing', 'refeign'],\n 'freeman': ['enframe', 'freeman'],\n 'freer': ['freer', 'refer'],\n 'fregata': ['fregata', 'raftage'],\n 'fregatae': ['afterage', 'fregatae'],\n 'freight': ['fighter', 'freight', 'refight'],\n 'freir': ['ferri', 'firer', 'freir', 'frier'],\n 'freit': ['freit', 'refit'],\n 'freity': ['ferity', 'freity'],\n 'fremontia': ['forminate', 'fremontia', 'taeniform'],\n 'frenetic': ['frenetic', 'infecter', 'reinfect'],\n 'freshener': ['freshener', 'refreshen'],\n 'fresnel': ['flenser', 'fresnel'],\n 'fret': ['fret', 'reft', 'tref'],\n 'fretful': ['fretful', 'truffle'],\n 'fretsome': ['forestem', 'fretsome'],\n 'frette': ['fetter', 'frette'],\n 'freya': ['faery', 'freya'],\n 'freyr': ['ferry', 'freyr', 'fryer'],\n 'fried': ['fired', 'fried'],\n 'friedelite': ['fiedlerite', 'friedelite'],\n 'friend': ['finder', 'friend', 'redfin', 'refind'],\n 'frier': ['ferri', 'firer', 'freir', 'frier'],\n 'friesic': ['friesic', 'serific'],\n 'friggle': ['fligger', 'friggle'],\n 'frightener': ['frightener', 'refrighten'],\n 'frigolabile': ['frigolabile', 'glorifiable'],\n 'frike': ['frike', 'kefir'],\n 'frim': ['firm', 'frim'],\n 'fringe': ['finger', 'fringe'],\n 'fringeflower': ['fingerflower', 'fringeflower'],\n 'fringeless': ['fingerless', 'fringeless'],\n 'fringelet': ['fingerlet', 'fringelet'],\n 'frist': ['first', 'frist'],\n 'frit': ['frit', 'rift'],\n 'frith': ['firth', 'frith'],\n 'friulian': ['friulian', 'unifilar'],\n 'fro': ['for', 'fro', 'orf'],\n 'froe': ['fore', 'froe', 'ofer'],\n 'frogleg': ['flogger', 'frogleg'],\n 'from': ['form', 'from'],\n 'fronter': ['fronter', 'refront'],\n 'frontonasal': ['frontonasal', 'nasofrontal'],\n 'frontooccipital': ['frontooccipital', 'occipitofrontal'],\n 'frontoorbital': ['frontoorbital', 'orbitofrontal'],\n 'frontoparietal': ['frontoparietal', 'parietofrontal'],\n 'frontotemporal': ['frontotemporal', 'temporofrontal'],\n 'frontpiece': ['frontpiece', 'perfection'],\n 'frost': ['forst', 'frost'],\n 'frosted': ['defrost', 'frosted'],\n 'frot': ['fort', 'frot'],\n 'froth': ['forth', 'froth'],\n 'frothy': ['forthy', 'frothy'],\n 'froward': ['forward', 'froward'],\n 'frowardly': ['forwardly', 'frowardly'],\n 'frowardness': ['forwardness', 'frowardness'],\n 'fruitage': ['figurate', 'fruitage'],\n 'fruitless': ['fruitless', 'resistful'],\n 'frush': ['frush', 'shurf'],\n 'frustule': ['frustule', 'sulfuret'],\n 'fruticulose': ['fruticulose', 'luctiferous'],\n 'fryer': ['ferry', 'freyr', 'fryer'],\n 'fucales': ['caseful', 'fucales'],\n 'fucate': ['faucet', 'fucate'],\n 'fuel': ['flue', 'fuel'],\n 'fueler': ['ferule', 'fueler', 'refuel'],\n 'fuerte': ['fuerte', 'refute'],\n 'fuirena': ['fuirena', 'unafire'],\n 'fulcrate': ['crateful', 'fulcrate'],\n 'fulica': ['ficula', 'fulica'],\n 'fulmar': ['armful', 'fulmar'],\n 'fulminatory': ['fulminatory', 'unformality'],\n 'fulminous': ['fulminous', 'sulfonium'],\n 'fulwa': ['awful', 'fulwa'],\n 'fumarole': ['formulae', 'fumarole'],\n 'fumarolic': ['cauliform', 'formulaic', 'fumarolic'],\n 'fumble': ['beflum', 'fumble'],\n 'fumer': ['femur', 'fumer'],\n 'fundable': ['fundable', 'unfabled'],\n 'funder': ['funder', 'refund'],\n 'funebrial': ['funebrial', 'unfriable'],\n 'funeral': ['earnful', 'funeral'],\n 'fungal': ['fungal', 'unflag'],\n 'fungi': ['fingu', 'fungi'],\n 'funori': ['funori', 'furoin'],\n 'fur': ['fur', 'urf'],\n 'fural': ['alfur', 'fural'],\n 'furan': ['furan', 'unfar'],\n 'furbish': ['burfish', 'furbish'],\n 'furbisher': ['furbisher', 'refurbish'],\n 'furcal': ['carful', 'furcal'],\n 'furcate': ['facture', 'furcate'],\n 'furler': ['furler', 'refurl'],\n 'furnish': ['furnish', 'runfish'],\n 'furnisher': ['furnisher', 'refurnish'],\n 'furoin': ['funori', 'furoin'],\n 'furole': ['fouler', 'furole'],\n 'furore': ['forrue', 'fourer', 'fourre', 'furore'],\n 'furstone': ['furstone', 'unforest'],\n 'fusate': ['estufa', 'fusate'],\n 'fusteric': ['fusteric', 'scutifer'],\n 'fustian': ['faunist', 'fustian', 'infaust'],\n 'gab': ['bag', 'gab'],\n 'gabbler': ['gabbler', 'grabble'],\n 'gabe': ['egba', 'gabe'],\n 'gabelle': ['gabelle', 'gelable'],\n 'gabelled': ['gabelled', 'geldable'],\n 'gabi': ['agib', 'biga', 'gabi'],\n 'gabion': ['bagnio', 'gabion', 'gobian'],\n 'gabioned': ['badigeon', 'gabioned'],\n 'gable': ['bagel', 'belga', 'gable', 'gleba'],\n 'gablock': ['backlog', 'gablock'],\n 'gaboon': ['abongo', 'gaboon'],\n 'gad': ['dag', 'gad'],\n 'gadaba': ['badaga', 'dagaba', 'gadaba'],\n 'gadder': ['gadder', 'graded'],\n 'gaddi': ['gaddi', 'gadid'],\n 'gade': ['aged', 'egad', 'gade'],\n 'gadger': ['dagger', 'gadger', 'ragged'],\n 'gadget': ['gadget', 'tagged'],\n 'gadid': ['gaddi', 'gadid'],\n 'gadinine': ['gadinine', 'indigena'],\n 'gadolinite': ['deligation', 'gadolinite', 'gelatinoid'],\n 'gadroon': ['dragoon', 'gadroon'],\n 'gadroonage': ['dragoonage', 'gadroonage'],\n 'gaduin': ['anguid', 'gaduin'],\n 'gael': ['gael', 'gale', 'geal'],\n 'gaen': ['agen', 'gaen', 'gane', 'gean', 'gena'],\n 'gaet': ['gaet', 'gate', 'geat', 'geta'],\n 'gaetulan': ['angulate', 'gaetulan'],\n 'gager': ['agger', 'gager', 'regga'],\n 'gahnite': ['gahnite', 'heating'],\n 'gahrwali': ['gahrwali', 'garhwali'],\n 'gaiassa': ['assagai', 'gaiassa'],\n 'gail': ['gail', 'gali', 'gila', 'glia'],\n 'gain': ['gain', 'inga', 'naig', 'ngai'],\n 'gaincall': ['gaincall', 'gallican'],\n 'gaine': ['angie', 'gaine'],\n 'gainer': ['arenig', 'earing', 'gainer', 'reagin', 'regain'],\n 'gainless': ['gainless', 'glassine'],\n 'gainly': ['gainly', 'laying'],\n 'gainsayer': ['asynergia', 'gainsayer'],\n 'gainset': ['easting',\n             'gainset',\n             'genista',\n             'ingesta',\n             'seating',\n             'signate',\n             'teasing'],\n 'gainstrive': ['gainstrive', 'vinegarist'],\n 'gainturn': ['gainturn', 'naturing'],\n 'gaiter': ['gaiter', 'tairge', 'triage'],\n 'gaize': ['gaize', 'ziega'],\n 'gaj': ['gaj', 'jag'],\n 'gal': ['gal', 'lag'],\n 'gala': ['agal', 'agla', 'alga', 'gala'],\n 'galactonic': ['cognatical', 'galactonic'],\n 'galatae': ['galatae', 'galatea'],\n 'galatea': ['galatae', 'galatea'],\n 'gale': ['gael', 'gale', 'geal'],\n 'galea': ['algae', 'galea'],\n 'galee': ['aegle', 'eagle', 'galee'],\n 'galei': ['agiel', 'agile', 'galei'],\n 'galeid': ['algedi', 'galeid'],\n 'galen': ['agnel', 'angel', 'angle', 'galen', 'genal', 'glean', 'lagen'],\n 'galena': ['alnage', 'angela', 'galena', 'lagena'],\n 'galenian': ['alangine', 'angelina', 'galenian'],\n 'galenic': ['angelic', 'galenic'],\n 'galenical': ['angelical', 'englacial', 'galenical'],\n 'galenist': ['galenist', 'genitals', 'stealing'],\n 'galenite': ['galenite', 'legatine'],\n 'galeoid': ['galeoid', 'geoidal'],\n 'galera': ['aglare', 'alegar', 'galera', 'laager'],\n 'galet': ['aglet', 'galet'],\n 'galewort': ['galewort', 'waterlog'],\n 'galey': ['agley', 'galey'],\n 'galga': ['galga', 'glaga'],\n 'gali': ['gail', 'gali', 'gila', 'glia'],\n 'galidia': ['agialid', 'galidia'],\n 'galik': ['galik', 'glaik'],\n 'galilean': ['galilean', 'gallinae'],\n 'galiot': ['galiot', 'latigo'],\n 'galla': ['algal', 'galla'],\n 'gallate': ['gallate', 'tallage'],\n 'gallein': ['gallein', 'galline', 'nigella'],\n 'galleria': ['allergia', 'galleria'],\n 'gallery': ['allergy', 'gallery', 'largely', 'regally'],\n 'galli': ['galli', 'glial'],\n 'gallican': ['gaincall', 'gallican'],\n 'gallicole': ['collegial', 'gallicole'],\n 'gallinae': ['galilean', 'gallinae'],\n 'galline': ['gallein', 'galline', 'nigella'],\n 'gallnut': ['gallnut', 'nutgall'],\n 'galloper': ['galloper', 'regallop'],\n 'gallotannate': ['gallotannate', 'tannogallate'],\n 'gallotannic': ['gallotannic', 'tannogallic'],\n 'gallstone': ['gallstone', 'stonegall'],\n 'gallybagger': ['gallybagger', 'gallybeggar'],\n 'gallybeggar': ['gallybagger', 'gallybeggar'],\n 'galore': ['galore', 'gaoler'],\n 'galtonia': ['galtonia', 'notalgia'],\n 'galvanopsychic': ['galvanopsychic', 'psychogalvanic'],\n 'galvanothermometer': ['galvanothermometer', 'thermogalvanometer'],\n 'gam': ['gam', 'mag'],\n 'gamaliel': ['gamaliel', 'melalgia'],\n 'gamashes': ['gamashes', 'smashage'],\n 'gamasid': ['gamasid', 'magadis'],\n 'gambado': ['dagomba', 'gambado'],\n 'gambier': ['gambier', 'imbarge'],\n 'gambler': ['gambler', 'gambrel'],\n 'gambrel': ['gambler', 'gambrel'],\n 'game': ['egma', 'game', 'mage'],\n 'gamely': ['gamely', 'gleamy', 'mygale'],\n 'gamene': ['gamene', 'manege', 'menage'],\n 'gamete': ['gamete', 'metage'],\n 'gametogenic': ['gametogenic', 'gamogenetic', 'geomagnetic'],\n 'gamic': ['gamic', 'magic'],\n 'gamin': ['gamin', 'mangi'],\n 'gaming': ['gaming', 'gigman'],\n 'gamma': ['gamma', 'magma'],\n 'gammer': ['gammer', 'gramme'],\n 'gamogenetic': ['gametogenic', 'gamogenetic', 'geomagnetic'],\n 'gamori': ['gamori', 'gomari', 'gromia'],\n 'gan': ['gan', 'nag'],\n 'ganam': ['amang', 'ganam', 'manga'],\n 'ganch': ['chang', 'ganch'],\n 'gander': ['danger', 'gander', 'garden', 'ranged'],\n 'gandul': ['gandul', 'unglad'],\n 'gane': ['agen', 'gaen', 'gane', 'gean', 'gena'],\n 'gangan': ['gangan', 'nagnag'],\n 'ganger': ['ganger', 'grange', 'nagger'],\n 'ganging': ['ganging', 'nagging'],\n 'gangism': ['gangism', 'gigsman'],\n 'ganglioneuron': ['ganglioneuron', 'neuroganglion'],\n 'gangly': ['gangly', 'naggly'],\n 'ganguela': ['ganguela', 'language'],\n 'gangway': ['gangway', 'waygang'],\n 'ganister': ['astringe', 'ganister', 'gantries'],\n 'ganoidal': ['diagonal', 'ganoidal', 'gonadial'],\n 'ganoidean': ['ganoidean', 'indogaean'],\n 'ganoidian': ['agoniadin', 'anangioid', 'ganoidian'],\n 'ganosis': ['agnosis', 'ganosis'],\n 'gansel': ['angles', 'gansel'],\n 'gant': ['gant', 'gnat', 'tang'],\n 'ganta': ['ganta', 'tanga'],\n 'ganton': ['ganton', 'tongan'],\n 'gantries': ['astringe', 'ganister', 'gantries'],\n 'gantry': ['gantry', 'gyrant'],\n 'ganymede': ['ganymede', 'megadyne'],\n 'ganzie': ['agnize', 'ganzie'],\n 'gaol': ['gaol', 'goal', 'gola', 'olga'],\n 'gaoler': ['galore', 'gaoler'],\n 'gaon': ['agon', 'ango', 'gaon', 'goan', 'gona'],\n 'gaonic': ['agonic', 'angico', 'gaonic', 'goniac'],\n 'gapa': ['gapa', 'paga'],\n 'gape': ['gape', 'page', 'peag', 'pega'],\n 'gaper': ['gaper', 'grape', 'pager', 'parge'],\n 'gar': ['gar', 'gra', 'rag'],\n 'gara': ['agar', 'agra', 'gara', 'raga'],\n 'garamond': ['dragoman', 'garamond', 'ondagram'],\n 'garance': ['carnage', 'cranage', 'garance'],\n 'garb': ['brag', 'garb', 'grab'],\n 'garbel': ['garbel', 'garble'],\n 'garble': ['garbel', 'garble'],\n 'garbless': ['bragless', 'garbless'],\n 'garce': ['cager', 'garce', 'grace'],\n 'garcinia': ['agaricin', 'garcinia'],\n 'gardeen': ['derange', 'enraged', 'gardeen', 'gerenda', 'grandee', 'grenade'],\n 'garden': ['danger', 'gander', 'garden', 'ranged'],\n 'gardened': ['deranged', 'gardened'],\n 'gardener': ['deranger', 'gardener'],\n 'gardenful': ['dangerful', 'gardenful'],\n 'gardenia': ['drainage', 'gardenia'],\n 'gardenin': ['gardenin', 'grenadin'],\n 'gardenless': ['dangerless', 'gardenless'],\n 'gare': ['ager', 'agre', 'gare', 'gear', 'rage'],\n 'gareh': ['gareh', 'gerah'],\n 'garetta': ['garetta', 'rattage', 'regatta'],\n 'garewaite': ['garewaite', 'waiterage'],\n 'garfish': ['garfish', 'ragfish'],\n 'garget': ['garget', 'tagger'],\n 'gargety': ['gargety', 'raggety'],\n 'gargle': ['gargle', 'gregal', 'lagger', 'raggle'],\n 'garhwali': ['gahrwali', 'garhwali'],\n 'garial': ['argali', 'garial'],\n 'garle': ['argel', 'ergal', 'garle', 'glare', 'lager', 'large', 'regal'],\n 'garment': ['garment', 'margent'],\n 'garmenture': ['garmenture', 'reargument'],\n 'garn': ['garn', 'gnar', 'rang'],\n 'garnel': ['angler', 'arleng', 'garnel', 'largen', 'rangle', 'regnal'],\n 'garner': ['garner', 'ranger'],\n 'garnet': ['argent', 'garnet', 'garten', 'tanger'],\n 'garneter': ['argenter', 'garneter'],\n 'garnetiferous': ['argentiferous', 'garnetiferous'],\n 'garnets': ['angster', 'garnets', 'nagster', 'strange'],\n 'garnett': ['garnett', 'gnatter', 'gratten', 'tergant'],\n 'garnice': ['anergic', 'garnice', 'garniec', 'geranic', 'grecian'],\n 'garniec': ['anergic', 'garnice', 'garniec', 'geranic', 'grecian'],\n 'garnish': ['garnish', 'rashing'],\n 'garnished': ['degarnish', 'garnished'],\n 'garnisher': ['garnisher', 'regarnish'],\n 'garo': ['argo', 'garo', 'gora'],\n 'garran': ['garran', 'ragnar'],\n 'garret': ['garret', 'garter', 'grater', 'targer'],\n 'garreted': ['garreted', 'gartered'],\n 'garroter': ['garroter', 'regrator'],\n 'garten': ['argent', 'garnet', 'garten', 'tanger'],\n 'garter': ['garret', 'garter', 'grater', 'targer'],\n 'gartered': ['garreted', 'gartered'],\n 'gartering': ['gartering', 'regrating'],\n 'garum': ['garum', 'murga'],\n 'gary': ['gary', 'gray'],\n 'gas': ['gas', 'sag'],\n 'gasan': ['gasan', 'sanga'],\n 'gash': ['gash', 'shag'],\n 'gasless': ['gasless', 'glasses', 'sagless'],\n 'gaslit': ['algist', 'gaslit'],\n 'gasoliner': ['gasoliner', 'seignoral'],\n 'gasper': ['gasper', 'sparge'],\n 'gast': ['gast', 'stag'],\n 'gaster': ['gaster', 'stager'],\n 'gastrin': ['gastrin', 'staring'],\n 'gastroenteritis': ['enterogastritis', 'gastroenteritis'],\n 'gastroesophagostomy': ['esophagogastrostomy', 'gastroesophagostomy'],\n 'gastrohepatic': ['gastrohepatic', 'hepatogastric'],\n 'gastronomic': ['gastronomic', 'monogastric'],\n 'gastropathic': ['gastropathic', 'graphostatic'],\n 'gastrophrenic': ['gastrophrenic', 'nephrogastric', 'phrenogastric'],\n 'gastrular': ['gastrular', 'stragular'],\n 'gat': ['gat', 'tag'],\n 'gate': ['gaet', 'gate', 'geat', 'geta'],\n 'gateman': ['gateman', 'magenta', 'magnate', 'magneta'],\n 'gater': ['gater', 'grate', 'great', 'greta', 'retag', 'targe'],\n 'gateward': ['drawgate', 'gateward'],\n 'gateway': ['gateway', 'getaway', 'waygate'],\n 'gatherer': ['gatherer', 'regather'],\n 'gator': ['argot', 'gator', 'gotra', 'groat'],\n 'gatter': ['gatter', 'target'],\n 'gaucho': ['gaucho', 'guacho'],\n 'gaufer': ['agrufe', 'gaufer', 'gaufre'],\n 'gauffer': ['gauffer', 'gauffre'],\n 'gauffre': ['gauffer', 'gauffre'],\n 'gaufre': ['agrufe', 'gaufer', 'gaufre'],\n 'gaul': ['gaul', 'gula'],\n 'gaulin': ['gaulin', 'lingua'],\n 'gaulter': ['gaulter', 'tegular'],\n 'gaum': ['gaum', 'muga'],\n 'gaun': ['gaun', 'guan', 'guna', 'uang'],\n 'gaunt': ['gaunt', 'tunga'],\n 'gaur': ['gaur', 'guar', 'ruga'],\n 'gaura': ['gaura', 'guara'],\n 'gaurian': ['anguria', 'gaurian', 'guarani'],\n 'gave': ['gave', 'vage', 'vega'],\n 'gavyuti': ['gavyuti', 'vaguity'],\n 'gaw': ['gaw', 'wag'],\n 'gawn': ['gawn', 'gnaw', 'wang'],\n 'gay': ['agy', 'gay'],\n 'gaz': ['gaz', 'zag'],\n 'gazel': ['gazel', 'glaze'],\n 'gazer': ['gazer', 'graze'],\n 'gazon': ['gazon', 'zogan'],\n 'gazy': ['gazy', 'zyga'],\n 'geal': ['gael', 'gale', 'geal'],\n 'gean': ['agen', 'gaen', 'gane', 'gean', 'gena'],\n 'gear': ['ager', 'agre', 'gare', 'gear', 'rage'],\n 'geared': ['agreed', 'geared'],\n 'gearless': ['eelgrass', 'gearless', 'rageless'],\n 'gearman': ['gearman', 'manager'],\n 'gearset': ['ergates', 'gearset', 'geaster'],\n 'geaster': ['ergates', 'gearset', 'geaster'],\n 'geat': ['gaet', 'gate', 'geat', 'geta'],\n 'gebur': ['bugre', 'gebur'],\n 'ged': ['deg', 'ged'],\n 'gedder': ['dredge', 'gedder'],\n 'geest': ['egest', 'geest', 'geste'],\n 'gegger': ['gegger', 'gregge'],\n 'geheimrat': ['geheimrat', 'hermitage'],\n 'gein': ['gein', 'gien'],\n 'geira': ['geira', 'regia'],\n 'geison': ['geison', 'isogen'],\n 'geissospermine': ['geissospermine', 'spermiogenesis'],\n 'gel': ['gel', 'leg'],\n 'gelable': ['gabelle', 'gelable'],\n 'gelasian': ['anglaise', 'gelasian'],\n 'gelastic': ['gelastic', 'gestical'],\n 'gelatin': ['atingle', 'gelatin', 'genital', 'langite', 'telinga'],\n 'gelatinate': ['gelatinate', 'nagatelite'],\n 'gelatined': ['delignate', 'gelatined'],\n 'gelatinizer': ['gelatinizer', 'integralize'],\n 'gelatinoid': ['deligation', 'gadolinite', 'gelatinoid'],\n 'gelation': ['gelation', 'lagonite', 'legation'],\n 'gelatose': ['gelatose', 'segolate'],\n 'geldable': ['gabelled', 'geldable'],\n 'gelder': ['gelder', 'ledger', 'redleg'],\n 'gelding': ['gelding', 'ledging'],\n 'gelid': ['gelid', 'glide'],\n 'gelidness': ['gelidness', 'glideness'],\n 'gelosin': ['gelosin', 'lignose'],\n 'gem': ['gem', 'meg'],\n 'gemara': ['gemara', 'ramage'],\n 'gemaric': ['gemaric', 'grimace', 'megaric'],\n 'gemarist': ['gemarist', 'magister', 'sterigma'],\n 'gematria': ['gematria', 'maritage'],\n 'gemul': ['gemul', 'glume'],\n 'gena': ['agen', 'gaen', 'gane', 'gean', 'gena'],\n 'genal': ['agnel', 'angel', 'angle', 'galen', 'genal', 'glean', 'lagen'],\n 'genarch': ['changer', 'genarch'],\n 'gendarme': ['edgerman', 'gendarme'],\n 'genear': ['egeran', 'enrage', 'ergane', 'genear', 'genera'],\n 'geneat': ['geneat', 'negate', 'tegean'],\n 'genera': ['egeran', 'enrage', 'ergane', 'genear', 'genera'],\n 'generable': ['generable', 'greenable'],\n 'general': ['enlarge', 'general', 'gleaner'],\n 'generalist': ['easterling', 'generalist'],\n 'generall': ['allergen', 'generall'],\n 'generation': ['generation', 'renegation'],\n 'generic': ['energic', 'generic'],\n 'generical': ['energical', 'generical'],\n 'genesiac': ['agenesic', 'genesiac'],\n 'genesial': ['ensilage', 'genesial', 'signalee'],\n 'genetical': ['clientage', 'genetical'],\n 'genetta': ['genetta', 'tentage'],\n 'geneura': ['geneura', 'uneager'],\n 'geneva': ['avenge', 'geneva', 'vangee'],\n 'genial': ['algine', 'genial', 'linage'],\n 'genicular': ['genicular', 'neuralgic'],\n 'genie': ['eigne', 'genie'],\n 'genion': ['genion', 'inogen'],\n 'genipa': ['genipa', 'piegan'],\n 'genista': ['easting',\n             'gainset',\n             'genista',\n             'ingesta',\n             'seating',\n             'signate',\n             'teasing'],\n 'genistein': ['genistein', 'gentisein'],\n 'genital': ['atingle', 'gelatin', 'genital', 'langite', 'telinga'],\n 'genitals': ['galenist', 'genitals', 'stealing'],\n 'genitival': ['genitival', 'vigilante'],\n 'genitocrural': ['crurogenital', 'genitocrural'],\n 'genitor': ['ergotin', 'genitor', 'negrito', 'ogtiern', 'trigone'],\n 'genitorial': ['genitorial', 'religation'],\n 'genitory': ['genitory', 'ortygine'],\n 'genitourinary': ['genitourinary', 'urinogenitary'],\n 'geniture': ['geniture', 'guerinet'],\n 'genizero': ['genizero', 'negroize'],\n 'genoa': ['agone', 'genoa'],\n 'genoblastic': ['blastogenic', 'genoblastic'],\n 'genocidal': ['algedonic', 'genocidal'],\n 'genom': ['genom', 'gnome'],\n 'genotypical': ['genotypical', 'ptyalogenic'],\n 'genre': ['genre', 'green', 'neger', 'reneg'],\n 'genro': ['ergon', 'genro', 'goner', 'negro'],\n 'gent': ['gent', 'teng'],\n 'gentes': ['gentes', 'gesten'],\n 'genthite': ['genthite', 'teething'],\n 'gentian': ['antigen', 'gentian'],\n 'gentianic': ['antigenic', 'gentianic'],\n 'gentisein': ['genistein', 'gentisein'],\n 'gentle': ['gentle', 'telegn'],\n 'gentrice': ['erecting', 'gentrice'],\n 'genua': ['augen', 'genua'],\n 'genual': ['genual', 'leguan'],\n 'genuine': ['genuine', 'ingenue'],\n 'genus': ['genus', 'negus'],\n 'geo': ['ego', 'geo'],\n 'geocentric': ['ectrogenic', 'egocentric', 'geocentric'],\n 'geocratic': ['categoric', 'geocratic'],\n 'geocronite': ['erotogenic', 'geocronite', 'orogenetic'],\n 'geodal': ['algedo', 'geodal'],\n 'geode': ['geode', 'ogeed'],\n 'geodiatropism': ['diageotropism', 'geodiatropism'],\n 'geoduck': ['geoduck', 'goeduck'],\n 'geohydrology': ['geohydrology', 'hydrogeology'],\n 'geoid': ['diego', 'dogie', 'geoid'],\n 'geoidal': ['galeoid', 'geoidal'],\n 'geoisotherm': ['geoisotherm', 'isogeotherm'],\n 'geomagnetic': ['gametogenic', 'gamogenetic', 'geomagnetic'],\n 'geomant': ['geomant', 'magneto', 'megaton', 'montage'],\n 'geomantic': ['atmogenic', 'geomantic'],\n 'geometrical': ['geometrical', 'glaciometer'],\n 'geometrina': ['angiometer', 'ergotamine', 'geometrina'],\n 'geon': ['geon', 'gone'],\n 'geonim': ['geonim', 'imogen'],\n 'georama': ['georama', 'roamage'],\n 'geotectonic': ['geotectonic', 'tocogenetic'],\n 'geotic': ['geotic', 'goetic'],\n 'geotical': ['ectoglia', 'geotical', 'goetical'],\n 'geotonic': ['geotonic', 'otogenic'],\n 'geoty': ['geoty', 'goety'],\n 'ger': ['erg', 'ger', 'reg'],\n 'gerah': ['gareh', 'gerah'],\n 'geraldine': ['engrailed', 'geraldine'],\n 'geranial': ['algerian', 'geranial', 'regalian'],\n 'geranic': ['anergic', 'garnice', 'garniec', 'geranic', 'grecian'],\n 'geraniol': ['geraniol', 'regional'],\n 'geranomorph': ['geranomorph', 'monographer', 'nomographer'],\n 'geranyl': ['angerly', 'geranyl'],\n 'gerard': ['darger', 'gerard', 'grader', 'redrag', 'regard'],\n 'gerastian': ['agrestian', 'gerastian', 'stangeria'],\n 'geraty': ['geraty', 'gyrate'],\n 'gerb': ['berg', 'gerb'],\n 'gerbe': ['gerbe', 'grebe', 'rebeg'],\n 'gerbera': ['bargeer', 'gerbera'],\n 'gerenda': ['derange', 'enraged', 'gardeen', 'gerenda', 'grandee', 'grenade'],\n 'gerendum': ['gerendum', 'unmerged'],\n 'gerent': ['gerent', 'regent'],\n 'gerenuk': ['gerenuk', 'greenuk'],\n 'gerim': ['gerim', 'grime'],\n 'gerip': ['gerip', 'gripe'],\n 'german': ['engram', 'german', 'manger'],\n 'germania': ['germania', 'megarian'],\n 'germanics': ['germanics', 'screaming'],\n 'germanification': ['germanification', 'remagnification'],\n 'germanify': ['germanify', 'remagnify'],\n 'germanious': ['germanious', 'gramineous', 'marigenous'],\n 'germanist': ['germanist', 'streaming'],\n 'germanite': ['germanite', 'germinate', 'gramenite', 'mangerite'],\n 'germanly': ['germanly', 'germanyl'],\n 'germanyl': ['germanly', 'germanyl'],\n 'germinal': ['germinal', 'maligner', 'malinger'],\n 'germinant': ['germinant', 'minargent'],\n 'germinate': ['germanite', 'germinate', 'gramenite', 'mangerite'],\n 'germon': ['germon', 'monger', 'morgen'],\n 'geronomite': ['geronomite', 'goniometer'],\n 'geront': ['geront', 'tonger'],\n 'gerontal': ['argentol', 'gerontal'],\n 'gerontes': ['estrogen', 'gerontes'],\n 'gerontic': ['gerontic', 'negrotic'],\n 'gerontism': ['gerontism', 'monergist'],\n 'gerres': ['gerres', 'serger'],\n 'gersum': ['gersum', 'mergus'],\n 'gerund': ['dunger', 'gerund', 'greund', 'nudger'],\n 'gerundive': ['gerundive', 'ungrieved'],\n 'gerusia': ['ergusia', 'gerusia', 'sarigue'],\n 'gervas': ['gervas', 'graves'],\n 'gervase': ['gervase', 'greaves', 'servage'],\n 'ges': ['ges', 'seg'],\n 'gesan': ['agnes', 'gesan'],\n 'gesith': ['gesith', 'steigh'],\n 'gesning': ['gesning', 'ginseng'],\n 'gest': ['gest', 'steg'],\n 'gestapo': ['gestapo', 'postage'],\n 'gestate': ['gestate', 'tagetes'],\n 'geste': ['egest', 'geest', 'geste'],\n 'gesten': ['gentes', 'gesten'],\n 'gestical': ['gelastic', 'gestical'],\n 'gesticular': ['gesticular', 'scutigeral'],\n 'gesture': ['gesture', 'guester'],\n 'get': ['get', 'teg'],\n 'geta': ['gaet', 'gate', 'geat', 'geta'],\n 'getaway': ['gateway', 'getaway', 'waygate'],\n 'gettable': ['begettal', 'gettable'],\n 'getup': ['getup', 'upget'],\n 'geyerite': ['geyerite', 'tigereye'],\n 'ghaist': ['ghaist', 'tagish'],\n 'ghent': ['ghent', 'thegn'],\n 'ghosty': ['ghosty', 'hogsty'],\n 'ghoul': ['ghoul', 'lough'],\n 'giansar': ['giansar', 'sarangi'],\n 'giant': ['giant', 'tangi', 'tiang'],\n 'gib': ['big', 'gib'],\n 'gibbon': ['gibbon', 'gobbin'],\n 'gibel': ['bilge', 'gibel'],\n 'gibing': ['biggin', 'gibing'],\n 'gid': ['dig', 'gid'],\n 'gideonite': ['diogenite', 'gideonite'],\n 'gien': ['gein', 'gien'],\n 'gienah': ['gienah', 'hangie'],\n 'gif': ['fig', 'gif'],\n 'gifola': ['filago', 'gifola'],\n 'gifted': ['fidget', 'gifted'],\n 'gigman': ['gaming', 'gigman'],\n 'gigsman': ['gangism', 'gigsman'],\n 'gila': ['gail', 'gali', 'gila', 'glia'],\n 'gilaki': ['gilaki', 'giliak'],\n 'gilbertese': ['gilbertese', 'selbergite'],\n 'gilden': ['dingle', 'elding', 'engild', 'gilden'],\n 'gilder': ['gilder', 'girdle', 'glider', 'regild', 'ridgel'],\n 'gilding': ['gilding', 'gliding'],\n 'gileno': ['eloign', 'gileno', 'legion'],\n 'giles': ['giles', 'gilse'],\n 'giliak': ['gilaki', 'giliak'],\n 'giller': ['giller', 'grille', 'regill'],\n 'gilo': ['gilo', 'goli'],\n 'gilpy': ['gilpy', 'pigly'],\n 'gilse': ['giles', 'gilse'],\n 'gim': ['gim', 'mig'],\n 'gimel': ['gimel', 'glime'],\n 'gimmer': ['gimmer', 'grimme', 'megrim'],\n 'gimper': ['gimper', 'impreg'],\n 'gin': ['gin', 'ing', 'nig'],\n 'ginger': ['ginger', 'nigger'],\n 'gingery': ['gingery', 'niggery'],\n 'ginglymodi': ['ginglymodi', 'ginglymoid'],\n 'ginglymoid': ['ginglymodi', 'ginglymoid'],\n 'gink': ['gink', 'king'],\n 'ginned': ['ending', 'ginned'],\n 'ginner': ['enring', 'ginner'],\n 'ginney': ['ginney', 'nignye'],\n 'ginseng': ['gesning', 'ginseng'],\n 'ginward': ['drawing', 'ginward', 'warding'],\n 'gio': ['gio', 'goi'],\n 'giornata': ['giornata', 'gratiano'],\n 'giornatate': ['giornatate', 'tetragonia'],\n 'gip': ['gip', 'pig'],\n 'gipper': ['gipper', 'grippe'],\n 'girandole': ['girandole', 'negroidal'],\n 'girasole': ['girasole', 'seraglio'],\n 'girba': ['bragi', 'girba'],\n 'gird': ['gird', 'grid'],\n 'girder': ['girder', 'ridger'],\n 'girding': ['girding', 'ridging'],\n 'girdingly': ['girdingly', 'ridgingly'],\n 'girdle': ['gilder', 'girdle', 'glider', 'regild', 'ridgel'],\n 'girdler': ['dirgler', 'girdler'],\n 'girdling': ['girdling', 'ridgling'],\n 'girling': ['girling', 'rigling'],\n 'girn': ['girn', 'grin', 'ring'],\n 'girny': ['girny', 'ringy'],\n 'girondin': ['girondin', 'nonrigid'],\n 'girsle': ['girsle', 'gisler', 'glires', 'grilse'],\n 'girt': ['girt', 'grit', 'trig'],\n 'girth': ['girth', 'grith', 'right'],\n 'gish': ['gish', 'sigh'],\n 'gisla': ['gisla', 'ligas', 'sigla'],\n 'gisler': ['girsle', 'gisler', 'glires', 'grilse'],\n 'git': ['git', 'tig'],\n 'gitalin': ['gitalin', 'tailing'],\n 'gith': ['gith', 'thig'],\n 'gitksan': ['gitksan', 'skating', 'takings'],\n 'gittern': ['gittern', 'gritten', 'retting'],\n 'giustina': ['giustina', 'ignatius'],\n 'giver': ['giver', 'vergi'],\n 'glaceing': ['cageling', 'glaceing'],\n 'glacier': ['glacier', 'gracile'],\n 'glaciometer': ['geometrical', 'glaciometer'],\n 'gladdener': ['gladdener', 'glandered', 'regladden'],\n 'glaga': ['galga', 'glaga'],\n 'glaik': ['galik', 'glaik'],\n 'glaiket': ['glaiket', 'taglike'],\n 'glair': ['argil', 'glair', 'grail'],\n 'glaireous': ['aligerous', 'glaireous'],\n 'glaister': ['glaister', 'regalist'],\n 'glaive': ['glaive', 'vagile'],\n 'glance': ['cangle', 'glance'],\n 'glancer': ['cangler', 'glancer', 'reclang'],\n 'glancingly': ['clangingly', 'glancingly'],\n 'glandered': ['gladdener', 'glandered', 'regladden'],\n 'glans': ['glans', 'slang'],\n 'glare': ['argel', 'ergal', 'garle', 'glare', 'lager', 'large', 'regal'],\n 'glariness': ['glariness', 'grainless'],\n 'glary': ['glary', 'gyral'],\n 'glasser': ['glasser', 'largess'],\n 'glasses': ['gasless', 'glasses', 'sagless'],\n 'glassie': ['algesis', 'glassie'],\n 'glassine': ['gainless', 'glassine'],\n 'glaucin': ['glaucin', 'glucina'],\n 'glaucine': ['cuailnge', 'glaucine'],\n 'glaum': ['algum', 'almug', 'glaum', 'gluma', 'mulga'],\n 'glaur': ['glaur', 'gular'],\n 'glaury': ['glaury', 'raguly'],\n 'glaver': ['glaver', 'gravel'],\n 'glaze': ['gazel', 'glaze'],\n 'glazy': ['glazy', 'zygal'],\n 'gleamy': ['gamely', 'gleamy', 'mygale'],\n 'glean': ['agnel', 'angel', 'angle', 'galen', 'genal', 'glean', 'lagen'],\n 'gleaner': ['enlarge', 'general', 'gleaner'],\n 'gleary': ['argyle', 'gleary'],\n 'gleba': ['bagel', 'belga', 'gable', 'gleba'],\n 'glebal': ['begall', 'glebal'],\n 'glede': ['glede', 'gleed', 'ledge'],\n 'gledy': ['gledy', 'ledgy'],\n 'gleed': ['glede', 'gleed', 'ledge'],\n 'gleeman': ['gleeman', 'melange'],\n 'glia': ['gail', 'gali', 'gila', 'glia'],\n 'gliadin': ['dialing', 'gliadin'],\n 'glial': ['galli', 'glial'],\n 'glibness': ['beslings', 'blessing', 'glibness'],\n 'glidder': ['glidder', 'griddle'],\n 'glide': ['gelid', 'glide'],\n 'glideness': ['gelidness', 'glideness'],\n 'glider': ['gilder', 'girdle', 'glider', 'regild', 'ridgel'],\n 'gliding': ['gilding', 'gliding'],\n 'glime': ['gimel', 'glime'],\n 'glink': ['glink', 'kling'],\n 'glires': ['girsle', 'gisler', 'glires', 'grilse'],\n 'glisten': ['glisten', 'singlet'],\n 'glister': ['glister', 'gristle'],\n 'glitnir': ['glitnir', 'ritling'],\n 'glitter': ['glitter', 'grittle'],\n 'gloater': ['argolet', 'gloater', 'legator'],\n 'gloating': ['gloating', 'goatling'],\n 'globate': ['boltage', 'globate'],\n 'globe': ['bogle', 'globe'],\n 'globin': ['globin', 'goblin', 'lobing'],\n 'gloea': ['gloea', 'legoa'],\n 'glome': ['glome', 'golem', 'molge'],\n 'glomerate': ['algometer', 'glomerate'],\n 'glore': ['glore', 'ogler'],\n 'gloria': ['gloria', 'larigo', 'logria'],\n 'gloriana': ['argolian', 'gloriana'],\n 'gloriette': ['gloriette', 'rigolette'],\n 'glorifiable': ['frigolabile', 'glorifiable'],\n 'glossed': ['dogless', 'glossed', 'godless'],\n 'glosser': ['glosser', 'regloss'],\n 'glossitic': ['glossitic', 'logistics'],\n 'glossohyal': ['glossohyal', 'hyoglossal'],\n 'glossolabial': ['glossolabial', 'labioglossal'],\n 'glossolabiolaryngeal': ['glossolabiolaryngeal', 'labioglossolaryngeal'],\n 'glossolabiopharyngeal': ['glossolabiopharyngeal', 'labioglossopharyngeal'],\n 'glottid': ['glottid', 'goldtit'],\n 'glover': ['glover', 'grovel'],\n 'gloveress': ['gloveress', 'groveless'],\n 'glow': ['glow', 'gowl'],\n 'glower': ['glower', 'reglow'],\n 'gloy': ['gloy', 'logy'],\n 'glucemia': ['glucemia', 'mucilage'],\n 'glucina': ['glaucin', 'glucina'],\n 'glucine': ['glucine', 'lucigen'],\n 'glucinum': ['cingulum', 'glucinum'],\n 'glucosane': ['consulage', 'glucosane'],\n 'glue': ['glue', 'gule', 'luge'],\n 'gluer': ['gluer', 'gruel', 'luger'],\n 'gluma': ['algum', 'almug', 'glaum', 'gluma', 'mulga'],\n 'glume': ['gemul', 'glume'],\n 'glumose': ['glumose', 'lugsome'],\n 'gluten': ['englut', 'gluten', 'ungelt'],\n 'glutin': ['glutin', 'luting', 'ungilt'],\n 'glutter': ['glutter', 'guttler'],\n 'glycerate': ['electragy', 'glycerate'],\n 'glycerinize': ['glycerinize', 'glycerizine'],\n 'glycerizine': ['glycerinize', 'glycerizine'],\n 'glycerophosphate': ['glycerophosphate', 'phosphoglycerate'],\n 'glycocin': ['glycocin', 'glyconic'],\n 'glyconic': ['glycocin', 'glyconic'],\n 'glycosine': ['glycosine', 'lysogenic'],\n 'glycosuria': ['glycosuria', 'graciously'],\n 'gnaeus': ['gnaeus', 'unsage'],\n 'gnaphalium': ['gnaphalium', 'phalangium'],\n 'gnar': ['garn', 'gnar', 'rang'],\n 'gnarled': ['dangler', 'gnarled'],\n 'gnash': ['gnash', 'shang'],\n 'gnat': ['gant', 'gnat', 'tang'],\n 'gnatho': ['gnatho', 'thonga'],\n 'gnathotheca': ['chaetognath', 'gnathotheca'],\n 'gnatling': ['gnatling', 'tangling'],\n 'gnatter': ['garnett', 'gnatter', 'gratten', 'tergant'],\n 'gnaw': ['gawn', 'gnaw', 'wang'],\n 'gnetum': ['gnetum', 'nutmeg'],\n 'gnome': ['genom', 'gnome'],\n 'gnomic': ['coming', 'gnomic'],\n 'gnomist': ['gnomist', 'mosting'],\n 'gnomonic': ['gnomonic', 'oncoming'],\n 'gnomonical': ['cognominal', 'gnomonical'],\n 'gnostic': ['costing', 'gnostic'],\n 'gnostical': ['gnostical', 'nostalgic'],\n 'gnu': ['gnu', 'gun'],\n 'go': ['go', 'og'],\n 'goa': ['ago', 'goa'],\n 'goad': ['dago', 'goad'],\n 'goal': ['gaol', 'goal', 'gola', 'olga'],\n 'goan': ['agon', 'ango', 'gaon', 'goan', 'gona'],\n 'goat': ['goat', 'toag', 'toga'],\n 'goatee': ['goatee', 'goetae'],\n 'goatlike': ['goatlike', 'togalike'],\n 'goatling': ['gloating', 'goatling'],\n 'goatly': ['goatly', 'otalgy'],\n 'gob': ['bog', 'gob'],\n 'goban': ['bogan', 'goban'],\n 'gobbe': ['bebog', 'begob', 'gobbe'],\n 'gobbin': ['gibbon', 'gobbin'],\n 'gobelin': ['gobelin', 'gobline', 'ignoble', 'inglobe'],\n 'gobian': ['bagnio', 'gabion', 'gobian'],\n 'goblet': ['boglet', 'goblet'],\n 'goblin': ['globin', 'goblin', 'lobing'],\n 'gobline': ['gobelin', 'gobline', 'ignoble', 'inglobe'],\n 'goblinry': ['boringly', 'goblinry'],\n 'gobo': ['bogo', 'gobo'],\n 'goby': ['bogy', 'bygo', 'goby'],\n 'goclenian': ['congenial', 'goclenian'],\n 'god': ['dog', 'god'],\n 'goddam': ['goddam', 'mogdad'],\n 'gode': ['doeg', 'doge', 'gode'],\n 'godhead': ['doghead', 'godhead'],\n 'godhood': ['doghood', 'godhood'],\n 'godless': ['dogless', 'glossed', 'godless'],\n 'godlike': ['doglike', 'godlike'],\n 'godling': ['godling', 'lodging'],\n 'godly': ['dogly', 'godly', 'goldy'],\n 'godship': ['dogship', 'godship'],\n 'godwinian': ['downingia', 'godwinian'],\n 'goeduck': ['geoduck', 'goeduck'],\n 'goel': ['egol', 'goel', 'loge', 'ogle', 'oleg'],\n 'goer': ['goer', 'gore', 'ogre'],\n 'goes': ['goes', 'sego'],\n 'goetae': ['goatee', 'goetae'],\n 'goetic': ['geotic', 'goetic'],\n 'goetical': ['ectoglia', 'geotical', 'goetical'],\n 'goety': ['geoty', 'goety'],\n 'goglet': ['goglet', 'toggel', 'toggle'],\n 'goi': ['gio', 'goi'],\n 'goidel': ['goidel', 'goldie'],\n 'goitral': ['goitral', 'larigot', 'ligator'],\n 'gol': ['gol', 'log'],\n 'gola': ['gaol', 'goal', 'gola', 'olga'],\n 'golden': ['engold', 'golden'],\n 'goldenmouth': ['goldenmouth', 'longmouthed'],\n 'golder': ['golder', 'lodger'],\n 'goldie': ['goidel', 'goldie'],\n 'goldtit': ['glottid', 'goldtit'],\n 'goldy': ['dogly', 'godly', 'goldy'],\n 'golee': ['eloge', 'golee'],\n 'golem': ['glome', 'golem', 'molge'],\n 'golf': ['flog', 'golf'],\n 'golfer': ['golfer', 'reflog'],\n 'goli': ['gilo', 'goli'],\n 'goliard': ['argolid', 'goliard'],\n 'golo': ['golo', 'gool'],\n 'goma': ['goma', 'ogam'],\n 'gomari': ['gamori', 'gomari', 'gromia'],\n 'gomart': ['gomart', 'margot'],\n 'gomphrena': ['gomphrena', 'nephogram'],\n 'gon': ['gon', 'nog'],\n 'gona': ['agon', 'ango', 'gaon', 'goan', 'gona'],\n 'gonad': ['donga', 'gonad'],\n 'gonadial': ['diagonal', 'ganoidal', 'gonadial'],\n 'gonal': ['along', 'gonal', 'lango', 'longa', 'nogal'],\n 'gond': ['dong', 'gond'],\n 'gondi': ['dingo', 'doing', 'gondi', 'gonid'],\n 'gondola': ['dongola', 'gondola'],\n 'gondolier': ['gondolier', 'negroloid'],\n 'gone': ['geon', 'gone'],\n 'goner': ['ergon', 'genro', 'goner', 'negro'],\n 'gonesome': ['gonesome', 'osmogene'],\n 'gongoresque': ['gongoresque', 'gorgonesque'],\n 'gonia': ['gonia', 'ngaio', 'nogai'],\n 'goniac': ['agonic', 'angico', 'gaonic', 'goniac'],\n 'goniale': ['goniale', 'noilage'],\n 'goniaster': ['goniaster', 'orangeist'],\n 'goniatitid': ['digitation', 'goniatitid'],\n 'gonid': ['dingo', 'doing', 'gondi', 'gonid'],\n 'gonidia': ['angioid', 'gonidia'],\n 'gonidiferous': ['gonidiferous', 'indigoferous'],\n 'goniometer': ['geronomite', 'goniometer'],\n 'gonomery': ['gonomery', 'merogony'],\n 'gonosome': ['gonosome', 'mongoose'],\n 'gonyocele': ['coelogyne', 'gonyocele'],\n 'gonys': ['gonys', 'songy'],\n 'goober': ['booger', 'goober'],\n 'goodyear': ['goodyear', 'goodyera'],\n 'goodyera': ['goodyear', 'goodyera'],\n 'goof': ['fogo', 'goof'],\n 'goofer': ['forego', 'goofer'],\n 'gool': ['golo', 'gool'],\n 'gools': ['gools', 'logos'],\n 'goop': ['goop', 'pogo'],\n 'gor': ['gor', 'rog'],\n 'gora': ['argo', 'garo', 'gora'],\n 'goral': ['algor', 'argol', 'goral', 'largo'],\n 'goran': ['angor',\n           'argon',\n           'goran',\n           'grano',\n           'groan',\n           'nagor',\n           'orang',\n           'organ',\n           'rogan',\n           'ronga'],\n 'gorb': ['borg', 'brog', 'gorb'],\n 'gorbal': ['brolga', 'gorbal'],\n 'gorce': ['corge', 'gorce'],\n 'gordian': ['gordian', 'idorgan', 'roading'],\n 'gordon': ['drongo', 'gordon'],\n 'gordonia': ['gordonia', 'organoid', 'rigadoon'],\n 'gore': ['goer', 'gore', 'ogre'],\n 'gorer': ['gorer', 'roger'],\n 'gorge': ['gorge', 'grego'],\n 'gorged': ['dogger', 'gorged'],\n 'gorger': ['gorger', 'gregor'],\n 'gorgerin': ['gorgerin', 'ringgoer'],\n 'gorgonesque': ['gongoresque', 'gorgonesque'],\n 'goric': ['corgi', 'goric', 'orgic'],\n 'goring': ['goring', 'gringo'],\n 'gorse': ['gorse', 'soger'],\n 'gortonian': ['gortonian', 'organotin'],\n 'gory': ['gory', 'gyro', 'orgy'],\n 'gos': ['gos', 'sog'],\n 'gosain': ['gosain', 'isagon', 'sagoin'],\n 'gosh': ['gosh', 'shog'],\n 'gospel': ['gospel', 'spogel'],\n 'gossipry': ['gossipry', 'gryposis'],\n 'got': ['got', 'tog'],\n 'gotra': ['argot', 'gator', 'gotra', 'groat'],\n 'goup': ['goup', 'ogpu', 'upgo'],\n 'gourde': ['drogue', 'gourde'],\n 'gout': ['gout', 'toug'],\n 'goutish': ['goutish', 'outsigh'],\n 'gowan': ['gowan', 'wagon', 'wonga'],\n 'gowdnie': ['gowdnie', 'widgeon'],\n 'gowl': ['glow', 'gowl'],\n 'gown': ['gown', 'wong'],\n 'goyin': ['goyin', 'yogin'],\n 'gra': ['gar', 'gra', 'rag'],\n 'grab': ['brag', 'garb', 'grab'],\n 'grabble': ['gabbler', 'grabble'],\n 'graben': ['banger', 'engarb', 'graben'],\n 'grace': ['cager', 'garce', 'grace'],\n 'gracile': ['glacier', 'gracile'],\n 'graciously': ['glycosuria', 'graciously'],\n 'grad': ['darg', 'drag', 'grad'],\n 'gradation': ['gradation', 'indagator', 'tanagroid'],\n 'grade': ['edgar', 'grade'],\n 'graded': ['gadder', 'graded'],\n 'grader': ['darger', 'gerard', 'grader', 'redrag', 'regard'],\n 'gradient': ['gradient', 'treading'],\n 'gradienter': ['gradienter', 'intergrade'],\n 'gradientia': ['gradientia', 'grantiidae'],\n 'gradin': ['daring', 'dingar', 'gradin'],\n 'gradine': ['degrain', 'deraign', 'deringa', 'gradine', 'grained', 'reading'],\n 'grading': ['grading', 'niggard'],\n 'graeae': ['aerage', 'graeae'],\n 'graeme': ['graeme', 'meager', 'meagre'],\n 'grafter': ['grafter', 'regraft'],\n 'graian': ['graian', 'nagari'],\n 'grail': ['argil', 'glair', 'grail'],\n 'grailer': ['grailer', 'reglair'],\n 'grain': ['agrin', 'grain'],\n 'grained': ['degrain', 'deraign', 'deringa', 'gradine', 'grained', 'reading'],\n 'grainer': ['earring', 'grainer'],\n 'grainless': ['glariness', 'grainless'],\n 'graith': ['aright', 'graith'],\n 'grallina': ['grallina', 'granilla'],\n 'gralline': ['allergin', 'gralline'],\n 'grame': ['grame', 'marge', 'regma'],\n 'gramenite': ['germanite', 'germinate', 'gramenite', 'mangerite'],\n 'gramineous': ['germanious', 'gramineous', 'marigenous'],\n 'graminiform': ['graminiform', 'marginiform'],\n 'graminous': ['graminous', 'ignoramus'],\n 'gramme': ['gammer', 'gramme'],\n 'gramophonic': ['gramophonic', 'monographic', 'nomographic', 'phonogramic'],\n 'gramophonical': ['gramophonical', 'monographical', 'nomographical'],\n 'gramophonically': ['gramophonically',\n                     'monographically',\n                     'nomographically',\n                     'phonogramically'],\n 'gramophonist': ['gramophonist', 'monographist'],\n 'granadine': ['granadine', 'grenadian'],\n 'granate': ['argante', 'granate', 'tanager'],\n 'granatum': ['armgaunt', 'granatum'],\n 'grand': ['drang', 'grand'],\n 'grandam': ['dragman', 'grandam', 'grandma'],\n 'grandee': ['derange', 'enraged', 'gardeen', 'gerenda', 'grandee', 'grenade'],\n 'grandeeism': ['grandeeism', 'renegadism'],\n 'grandeur': ['grandeur', 'unregard'],\n 'grandeval': ['grandeval', 'landgrave'],\n 'grandiose': ['grandiose', 'sargonide'],\n 'grandma': ['dragman', 'grandam', 'grandma'],\n 'grandparental': ['grandparental', 'grandpaternal'],\n 'grandpaternal': ['grandparental', 'grandpaternal'],\n 'grane': ['anger', 'areng', 'grane', 'range'],\n 'grange': ['ganger', 'grange', 'nagger'],\n 'grangousier': ['grangousier', 'gregarinous'],\n 'granilla': ['grallina', 'granilla'],\n 'granite': ['angrite', 'granite', 'ingrate', 'tangier', 'tearing', 'tigrean'],\n 'granivore': ['granivore', 'overgrain'],\n 'grano': ['angor',\n           'argon',\n           'goran',\n           'grano',\n           'groan',\n           'nagor',\n           'orang',\n           'organ',\n           'rogan',\n           'ronga'],\n 'granophyre': ['granophyre', 'renography'],\n 'grantee': ['grantee', 'greaten', 'reagent', 'rentage'],\n 'granter': ['granter', 'regrant'],\n 'granth': ['granth', 'thrang'],\n 'grantiidae': ['gradientia', 'grantiidae'],\n 'granula': ['angular', 'granula'],\n 'granule': ['granule', 'unlarge', 'unregal'],\n 'granulite': ['granulite', 'traguline'],\n 'grape': ['gaper', 'grape', 'pager', 'parge'],\n 'graperoot': ['graperoot', 'prorogate'],\n 'graphical': ['algraphic', 'graphical'],\n 'graphically': ['calligraphy', 'graphically'],\n 'graphologic': ['graphologic', 'logographic'],\n 'graphological': ['graphological', 'logographical'],\n 'graphology': ['graphology', 'logography'],\n 'graphometer': ['graphometer', 'meteorgraph'],\n 'graphophonic': ['graphophonic', 'phonographic'],\n 'graphostatic': ['gastropathic', 'graphostatic'],\n 'graphotypic': ['graphotypic', 'pictography', 'typographic'],\n 'grapsidae': ['disparage', 'grapsidae'],\n 'grasp': ['grasp', 'sprag'],\n 'grasper': ['grasper', 'regrasp', 'sparger'],\n 'grasser': ['grasser', 'regrass'],\n 'grasshopper': ['grasshopper', 'hoppergrass'],\n 'grassman': ['grassman', 'mangrass'],\n 'grat': ['grat', 'trag'],\n 'grate': ['gater', 'grate', 'great', 'greta', 'retag', 'targe'],\n 'grateman': ['grateman', 'mangrate', 'mentagra', 'targeman'],\n 'grater': ['garret', 'garter', 'grater', 'targer'],\n 'gratiano': ['giornata', 'gratiano'],\n 'graticule': ['curtilage', 'cutigeral', 'graticule'],\n 'gratiolin': ['gratiolin', 'largition', 'tailoring'],\n 'gratis': ['gratis', 'striga'],\n 'gratten': ['garnett', 'gnatter', 'gratten', 'tergant'],\n 'graupel': ['earplug', 'graupel', 'plaguer'],\n 'gravamen': ['gravamen', 'graveman'],\n 'gravel': ['glaver', 'gravel'],\n 'graveman': ['gravamen', 'graveman'],\n 'graves': ['gervas', 'graves'],\n 'gravure': ['gravure', 'verruga'],\n 'gray': ['gary', 'gray'],\n 'grayling': ['grayling', 'ragingly'],\n 'graze': ['gazer', 'graze'],\n 'greaser': ['argeers', 'greaser', 'serrage'],\n 'great': ['gater', 'grate', 'great', 'greta', 'retag', 'targe'],\n 'greaten': ['grantee', 'greaten', 'reagent', 'rentage'],\n 'greater': ['greater', 'regrate', 'terrage'],\n 'greaves': ['gervase', 'greaves', 'servage'],\n 'grebe': ['gerbe', 'grebe', 'rebeg'],\n 'grecian': ['anergic', 'garnice', 'garniec', 'geranic', 'grecian'],\n 'grecomania': ['ergomaniac', 'grecomania'],\n 'greed': ['edger', 'greed'],\n 'green': ['genre', 'green', 'neger', 'reneg'],\n 'greenable': ['generable', 'greenable'],\n 'greener': ['greener', 'regreen', 'reneger'],\n 'greenish': ['greenish', 'sheering'],\n 'greenland': ['englander', 'greenland'],\n 'greenuk': ['gerenuk', 'greenuk'],\n 'greeny': ['energy', 'greeny', 'gyrene'],\n 'greet': ['egret', 'greet', 'reget'],\n 'greeter': ['greeter', 'regreet'],\n 'gregal': ['gargle', 'gregal', 'lagger', 'raggle'],\n 'gregarian': ['gregarian', 'gregarina'],\n 'gregarina': ['gregarian', 'gregarina'],\n 'gregarinous': ['grangousier', 'gregarinous'],\n 'grege': ['egger', 'grege'],\n 'gregge': ['gegger', 'gregge'],\n 'grego': ['gorge', 'grego'],\n 'gregor': ['gorger', 'gregor'],\n 'greige': ['greige', 'reggie'],\n 'grein': ['grein', 'inger', 'nigre', 'regin', 'reign', 'ringe'],\n 'gremial': ['gremial', 'lamiger'],\n 'gremlin': ['gremlin', 'mingler'],\n 'grenade': ['derange', 'enraged', 'gardeen', 'gerenda', 'grandee', 'grenade'],\n 'grenadian': ['granadine', 'grenadian'],\n 'grenadier': ['earringed', 'grenadier'],\n 'grenadin': ['gardenin', 'grenadin'],\n 'grenadine': ['endearing', 'engrained', 'grenadine'],\n 'greta': ['gater', 'grate', 'great', 'greta', 'retag', 'targe'],\n 'gretel': ['gretel', 'reglet'],\n 'greund': ['dunger', 'gerund', 'greund', 'nudger'],\n 'grewia': ['earwig', 'grewia'],\n 'grey': ['grey', 'gyre'],\n 'grid': ['gird', 'grid'],\n 'griddle': ['glidder', 'griddle'],\n 'gride': ['dirge', 'gride', 'redig', 'ridge'],\n 'gridelin': ['dreiling', 'gridelin'],\n 'grieve': ['grieve', 'regive'],\n 'grieved': ['diverge', 'grieved'],\n 'grille': ['giller', 'grille', 'regill'],\n 'grilse': ['girsle', 'gisler', 'glires', 'grilse'],\n 'grimace': ['gemaric', 'grimace', 'megaric'],\n 'grime': ['gerim', 'grime'],\n 'grimme': ['gimmer', 'grimme', 'megrim'],\n 'grin': ['girn', 'grin', 'ring'],\n 'grinder': ['grinder', 'regrind'],\n 'grindle': ['dringle', 'grindle'],\n 'gringo': ['goring', 'gringo'],\n 'grip': ['grip', 'prig'],\n 'gripe': ['gerip', 'gripe'],\n 'gripeful': ['fireplug', 'gripeful'],\n 'griper': ['griper', 'regrip'],\n 'gripman': ['gripman', 'prigman', 'ramping'],\n 'grippe': ['gipper', 'grippe'],\n 'grisounite': ['grisounite', 'grisoutine', 'integrious'],\n 'grisoutine': ['grisounite', 'grisoutine', 'integrious'],\n 'grist': ['grist', 'grits', 'strig'],\n 'gristle': ['glister', 'gristle'],\n 'grit': ['girt', 'grit', 'trig'],\n 'grith': ['girth', 'grith', 'right'],\n 'grits': ['grist', 'grits', 'strig'],\n 'gritten': ['gittern', 'gritten', 'retting'],\n 'grittle': ['glitter', 'grittle'],\n 'grivna': ['grivna', 'raving'],\n 'grizzel': ['grizzel', 'grizzle'],\n 'grizzle': ['grizzel', 'grizzle'],\n 'groan': ['angor',\n           'argon',\n           'goran',\n           'grano',\n           'groan',\n           'nagor',\n           'orang',\n           'organ',\n           'rogan',\n           'ronga'],\n 'groaner': ['groaner', 'oranger', 'organer'],\n 'groaning': ['groaning', 'organing'],\n 'groat': ['argot', 'gator', 'gotra', 'groat'],\n 'grobian': ['biorgan', 'grobian'],\n 'groined': ['groined', 'negroid'],\n 'gromia': ['gamori', 'gomari', 'gromia'],\n 'groove': ['groove', 'overgo'],\n 'grope': ['grope', 'porge'],\n 'groper': ['groper', 'porger'],\n 'groset': ['groset', 'storge'],\n 'grossen': ['engross', 'grossen'],\n 'grot': ['grot', 'trog'],\n 'grotian': ['grotian', 'trigona'],\n 'grotto': ['grotto', 'torgot'],\n 'grounded': ['grounded', 'underdog', 'undergod'],\n 'grouper': ['grouper', 'regroup'],\n 'grouse': ['grouse', 'rugose'],\n 'grousy': ['grousy', 'gyrous'],\n 'grovel': ['glover', 'grovel'],\n 'groveless': ['gloveress', 'groveless'],\n 'growan': ['awrong', 'growan'],\n 'grower': ['grower', 'regrow'],\n 'grown': ['grown', 'wrong'],\n 'grub': ['burg', 'grub'],\n 'grudge': ['grudge', 'rugged'],\n 'grudger': ['drugger', 'grudger'],\n 'grudgery': ['druggery', 'grudgery'],\n 'grue': ['grue', 'urge'],\n 'gruel': ['gluer', 'gruel', 'luger'],\n 'gruelly': ['gruelly', 'gullery'],\n 'grues': ['grues', 'surge'],\n 'grun': ['grun', 'rung'],\n 'grush': ['grush', 'shrug'],\n 'grusinian': ['grusinian', 'unarising'],\n 'grutten': ['grutten', 'turgent'],\n 'gryposis': ['gossipry', 'gryposis'],\n 'guacho': ['gaucho', 'guacho'],\n 'guan': ['gaun', 'guan', 'guna', 'uang'],\n 'guanamine': ['guanamine', 'guineaman'],\n 'guanine': ['anguine', 'guanine', 'guinean'],\n 'guar': ['gaur', 'guar', 'ruga'],\n 'guara': ['gaura', 'guara'],\n 'guarani': ['anguria', 'gaurian', 'guarani'],\n 'guarantorship': ['guarantorship', 'uranographist'],\n 'guardeen': ['dungaree', 'guardeen', 'unagreed', 'underage', 'ungeared'],\n 'guarder': ['guarder', 'reguard'],\n 'guatusan': ['augustan', 'guatusan'],\n 'gud': ['dug', 'gud'],\n 'gude': ['degu', 'gude'],\n 'guenon': ['guenon', 'ungone'],\n 'guepard': ['guepard', 'upgrade'],\n 'guerdon': ['guerdon', 'undergo', 'ungored'],\n 'guerdoner': ['guerdoner', 'reundergo', 'undergoer', 'undergore'],\n 'guerinet': ['geniture', 'guerinet'],\n 'guester': ['gesture', 'guester'],\n 'guetar': ['argute', 'guetar', 'rugate', 'tuareg'],\n 'guetare': ['erugate', 'guetare'],\n 'guha': ['augh', 'guha'],\n 'guiana': ['guiana', 'iguana'],\n 'guib': ['bugi', 'guib'],\n 'guineaman': ['guanamine', 'guineaman'],\n 'guinean': ['anguine', 'guanine', 'guinean'],\n 'guiser': ['guiser', 'sergiu'],\n 'gul': ['gul', 'lug'],\n 'gula': ['gaul', 'gula'],\n 'gulae': ['gulae', 'legua'],\n 'gular': ['glaur', 'gular'],\n 'gularis': ['agrilus', 'gularis'],\n 'gulden': ['gulden', 'lunged'],\n 'gule': ['glue', 'gule', 'luge'],\n 'gules': ['gules', 'gusle'],\n 'gullery': ['gruelly', 'gullery'],\n 'gullible': ['bluegill', 'gullible'],\n 'gulonic': ['gulonic', 'unlogic'],\n 'gulp': ['gulp', 'plug'],\n 'gulpin': ['gulpin', 'puling'],\n 'gum': ['gum', 'mug'],\n 'gumbo': ['bogum', 'gumbo'],\n 'gumshoe': ['gumshoe', 'hugsome'],\n 'gumweed': ['gumweed', 'mugweed'],\n 'gun': ['gnu', 'gun'],\n 'guna': ['gaun', 'guan', 'guna', 'uang'],\n 'gunate': ['gunate', 'tangue'],\n 'gundi': ['gundi', 'undig'],\n 'gundy': ['dungy', 'gundy'],\n 'gunk': ['gunk', 'kung'],\n 'gunl': ['gunl', 'lung'],\n 'gunnership': ['gunnership', 'unsphering'],\n 'gunreach': ['gunreach', 'uncharge'],\n 'gunsel': ['gunsel', 'selung', 'slunge'],\n 'gunshot': ['gunshot', 'shotgun', 'uhtsong'],\n 'gunster': ['gunster', 'surgent'],\n 'gunter': ['gunter', 'gurnet', 'urgent'],\n 'gup': ['gup', 'pug'],\n 'gur': ['gur', 'rug'],\n 'gurgeon': ['gurgeon', 'ungorge'],\n 'gurgle': ['gurgle', 'lugger', 'ruggle'],\n 'gurian': ['gurian', 'ugrian'],\n 'guric': ['guric', 'ugric'],\n 'gurl': ['gurl', 'lurg'],\n 'gurnard': ['drungar', 'gurnard'],\n 'gurnet': ['gunter', 'gurnet', 'urgent'],\n 'gurt': ['gurt', 'trug'],\n 'gush': ['gush', 'shug', 'sugh'],\n 'gusher': ['gusher', 'regush'],\n 'gusle': ['gules', 'gusle'],\n 'gust': ['gust', 'stug'],\n 'gut': ['gut', 'tug'],\n 'gutless': ['gutless', 'tugless'],\n 'gutlike': ['gutlike', 'tuglike'],\n 'gutnish': ['gutnish', 'husting', 'unsight'],\n 'guttler': ['glutter', 'guttler'],\n 'guttular': ['guttular', 'guttural'],\n 'guttural': ['guttular', 'guttural'],\n 'gweed': ['gweed', 'wedge'],\n 'gymnasic': ['gymnasic', 'syngamic'],\n 'gymnastic': ['gymnastic', 'nystagmic'],\n 'gynandrous': ['androgynus', 'gynandrous'],\n 'gynerium': ['eryngium', 'gynerium'],\n 'gynospore': ['gynospore', 'sporogeny'],\n 'gypsine': ['gypsine', 'pigsney'],\n 'gyral': ['glary', 'gyral'],\n 'gyrant': ['gantry', 'gyrant'],\n 'gyrate': ['geraty', 'gyrate'],\n 'gyration': ['gyration', 'organity', 'ortygian'],\n 'gyre': ['grey', 'gyre'],\n 'gyrene': ['energy', 'greeny', 'gyrene'],\n 'gyro': ['gory', 'gyro', 'orgy'],\n 'gyroma': ['gyroma', 'morgay'],\n 'gyromitra': ['gyromitra', 'migratory'],\n 'gyrophora': ['gyrophora', 'orography'],\n 'gyrous': ['grousy', 'gyrous'],\n 'gyrus': ['gyrus', 'surgy'],\n 'ha': ['ah', 'ha'],\n 'haberdine': ['haberdine', 'hebridean'],\n 'habile': ['habile', 'halebi'],\n 'habiri': ['bihari', 'habiri'],\n 'habiru': ['brahui', 'habiru'],\n 'habit': ['baith', 'habit'],\n 'habitan': ['abthain', 'habitan'],\n 'habitat': ['habitat', 'tabitha'],\n 'habited': ['habited', 'thebaid'],\n 'habitus': ['habitus', 'ushabti'],\n 'habnab': ['babhan', 'habnab'],\n 'hacienda': ['chanidae', 'hacienda'],\n 'hackin': ['hackin', 'kachin'],\n 'hackle': ['hackle', 'lekach'],\n 'hackler': ['chalker', 'hackler'],\n 'hackly': ['chalky', 'hackly'],\n 'hacktree': ['eckehart', 'hacktree'],\n 'hackwood': ['hackwood', 'woodhack'],\n 'hacky': ['chyak', 'hacky'],\n 'had': ['dah', 'dha', 'had'],\n 'hadden': ['hadden', 'handed'],\n 'hade': ['hade', 'head'],\n 'hades': ['deash', 'hades', 'sadhe', 'shade'],\n 'hadji': ['hadji', 'jihad'],\n 'haec': ['ache', 'each', 'haec'],\n 'haem': ['ahem', 'haem', 'hame'],\n 'haet': ['ahet', 'haet', 'hate', 'heat', 'thea'],\n 'hafgan': ['afghan', 'hafgan'],\n 'hafter': ['father', 'freath', 'hafter'],\n 'hageen': ['hageen', 'hangee'],\n 'hailse': ['elisha', 'hailse', 'sheila'],\n 'hainan': ['hainan', 'nahani'],\n 'hair': ['ahir', 'hair'],\n 'hairband': ['bhandari', 'hairband'],\n 'haired': ['dehair', 'haired'],\n 'hairen': ['hairen', 'hernia'],\n 'hairlet': ['hairlet', 'therial'],\n 'hairstone': ['hairstone', 'hortensia'],\n 'hairup': ['hairup', 'rupiah'],\n 'hak': ['hak', 'kha'],\n 'hakam': ['hakam', 'makah'],\n 'hakea': ['ekaha', 'hakea'],\n 'hakim': ['hakim', 'khami'],\n 'haku': ['haku', 'kahu'],\n 'halal': ['allah', 'halal'],\n 'halbert': ['blather', 'halbert'],\n 'hale': ['hale', 'heal', 'leah'],\n 'halebi': ['habile', 'halebi'],\n 'halenia': ['ainaleh', 'halenia'],\n 'halesome': ['halesome', 'healsome'],\n 'halicore': ['halicore', 'heroical'],\n 'haliotidae': ['aethalioid', 'haliotidae'],\n 'hallan': ['hallan', 'nallah'],\n 'hallower': ['hallower', 'rehallow'],\n 'halma': ['halma', 'hamal'],\n 'halogeton': ['halogeton', 'theogonal'],\n 'haloid': ['dihalo', 'haloid'],\n 'halophile': ['halophile', 'philohela'],\n 'halophytism': ['halophytism', 'hylopathism'],\n 'hals': ['hals', 'lash'],\n 'halse': ['halse', 'leash', 'selah', 'shale', 'sheal', 'shela'],\n 'halsen': ['halsen', 'hansel', 'lanseh'],\n 'halt': ['halt', 'lath'],\n 'halter': ['arthel', 'halter', 'lather', 'thaler'],\n 'halterbreak': ['halterbreak', 'leatherbark'],\n 'halting': ['halting', 'lathing', 'thingal'],\n 'halve': ['halve', 'havel'],\n 'halver': ['halver', 'lavehr'],\n 'ham': ['ham', 'mah'],\n 'hamal': ['halma', 'hamal'],\n 'hame': ['ahem', 'haem', 'hame'],\n 'hameil': ['hameil', 'hiemal'],\n 'hamel': ['hamel', 'hemal'],\n 'hamfatter': ['aftermath', 'hamfatter'],\n 'hami': ['hami', 'hima', 'mahi'],\n 'hamital': ['hamital', 'thalami'],\n 'hamites': ['atheism', 'hamites'],\n 'hamlet': ['hamlet', 'malthe'],\n 'hammerer': ['hammerer', 'rehammer'],\n 'hamsa': ['hamsa', 'masha', 'shama'],\n 'hamulites': ['hamulites', 'shulamite'],\n 'hamus': ['hamus', 'musha'],\n 'hanaster': ['hanaster', 'sheratan'],\n 'hance': ['achen', 'chane', 'chena', 'hance'],\n 'hand': ['dhan', 'hand'],\n 'handbook': ['bandhook', 'handbook'],\n 'handed': ['hadden', 'handed'],\n 'hander': ['hander', 'harden'],\n 'handicapper': ['handicapper', 'prehandicap'],\n 'handscrape': ['handscrape', 'scaphander'],\n 'handstone': ['handstone', 'stonehand'],\n 'handwork': ['handwork', 'workhand'],\n 'hangar': ['arghan', 'hangar'],\n 'hangby': ['banghy', 'hangby'],\n 'hangee': ['hageen', 'hangee'],\n 'hanger': ['hanger', 'rehang'],\n 'hangie': ['gienah', 'hangie'],\n 'hangnail': ['hangnail', 'langhian'],\n 'hangout': ['hangout', 'tohunga'],\n 'hank': ['ankh', 'hank', 'khan'],\n 'hano': ['hano', 'noah'],\n 'hans': ['hans', 'nash', 'shan'],\n 'hansa': ['ahsan', 'hansa', 'hasan'],\n 'hanse': ['ashen', 'hanse', 'shane', 'shean'],\n 'hanseatic': ['anchistea', 'hanseatic'],\n 'hansel': ['halsen', 'hansel', 'lanseh'],\n 'hant': ['hant', 'tanh', 'than'],\n 'hantle': ['ethnal', 'hantle', 'lathen', 'thenal'],\n 'hao': ['aho', 'hao'],\n 'haole': ['eloah', 'haole'],\n 'haoma': ['haoma', 'omaha'],\n 'haori': ['haori', 'iroha'],\n 'hap': ['hap', 'pah'],\n 'hapalotis': ['hapalotis', 'sapotilha'],\n 'hapi': ['hapi', 'pahi'],\n 'haplodoci': ['chilopoda', 'haplodoci'],\n 'haplont': ['haplont', 'naphtol'],\n 'haplosis': ['alphosis', 'haplosis'],\n 'haply': ['haply', 'phyla'],\n 'happiest': ['happiest', 'peatship'],\n 'haptene': ['haptene', 'heptane', 'phenate'],\n 'haptenic': ['haptenic', 'pantheic', 'pithecan'],\n 'haptere': ['haptere', 'preheat'],\n 'haptic': ['haptic', 'pathic'],\n 'haptics': ['haptics', 'spathic'],\n 'haptometer': ['amphorette', 'haptometer'],\n 'haptophoric': ['haptophoric', 'pathophoric'],\n 'haptophorous': ['haptophorous', 'pathophorous'],\n 'haptotropic': ['haptotropic', 'protopathic'],\n 'hapu': ['hapu', 'hupa'],\n 'harass': ['harass', 'hassar'],\n 'harb': ['bhar', 'harb'],\n 'harborer': ['abhorrer', 'harborer'],\n 'harden': ['hander', 'harden'],\n 'hardener': ['hardener', 'reharden'],\n 'hardenite': ['hardenite', 'herniated'],\n 'hardtail': ['hardtail', 'thaliard'],\n 'hardy': ['hardy', 'hydra'],\n 'hare': ['hare', 'hear', 'rhea'],\n 'harebrain': ['harebrain', 'herbarian'],\n 'harem': ['harem', 'herma', 'rhema'],\n 'haremism': ['ashimmer', 'haremism'],\n 'harfang': ['fraghan', 'harfang'],\n 'haricot': ['chariot', 'haricot'],\n 'hark': ['hark', 'khar', 'rakh'],\n 'harka': ['harka', 'kahar'],\n 'harlot': ['harlot', 'orthal', 'thoral'],\n 'harmala': ['harmala', 'marhala'],\n 'harman': ['amhran', 'harman', 'mahran'],\n 'harmer': ['harmer', 'reharm'],\n 'harmine': ['harmine', 'hireman'],\n 'harmonic': ['choirman', 'harmonic', 'omniarch'],\n 'harmonical': ['harmonical', 'monarchial'],\n 'harmonics': ['anorchism', 'harmonics'],\n 'harmonistic': ['anchoritism', 'chiromantis', 'chrismation', 'harmonistic'],\n 'harnesser': ['harnesser', 'reharness'],\n 'harold': ['harold', 'holard'],\n 'harpa': ['aphra', 'harpa', 'parah'],\n 'harpings': ['harpings', 'phrasing'],\n 'harpist': ['harpist', 'traship'],\n 'harpless': ['harpless', 'splasher'],\n 'harris': ['arrish', 'harris', 'rarish', 'sirrah'],\n 'harrower': ['harrower', 'reharrow'],\n 'hart': ['hart', 'rath', 'tahr', 'thar', 'trah'],\n 'hartin': ['hartin', 'thrain'],\n 'hartite': ['hartite', 'rathite'],\n 'haruspices': ['chuprassie', 'haruspices'],\n 'harvester': ['harvester', 'reharvest'],\n 'hasan': ['ahsan', 'hansa', 'hasan'],\n 'hash': ['hash', 'sahh', 'shah'],\n 'hasher': ['hasher', 'rehash'],\n 'hasidic': ['hasidic', 'sahidic'],\n 'hasidim': ['hasidim', 'maidish'],\n 'hasky': ['hasky', 'shaky'],\n 'haslet': ['haslet', 'lesath', 'shelta'],\n 'hasp': ['hasp', 'pash', 'psha', 'shap'],\n 'hassar': ['harass', 'hassar'],\n 'hassel': ['hassel', 'hassle'],\n 'hassle': ['hassel', 'hassle'],\n 'haste': ['ashet', 'haste', 'sheat'],\n 'hasten': ['athens', 'hasten', 'snathe', 'sneath'],\n 'haster': ['haster', 'hearst', 'hearts'],\n 'hastilude': ['hastilude', 'lustihead'],\n 'hastler': ['hastler', 'slather'],\n 'hasty': ['hasty', 'yasht'],\n 'hat': ['aht', 'hat', 'tha'],\n 'hatchery': ['hatchery', 'thearchy'],\n 'hate': ['ahet', 'haet', 'hate', 'heat', 'thea'],\n 'hateable': ['hateable', 'heatable'],\n 'hateful': ['hateful', 'heatful'],\n 'hateless': ['hateless', 'heatless'],\n 'hater': ['earth', 'hater', 'heart', 'herat', 'rathe'],\n 'hati': ['hati', 'thai'],\n 'hatred': ['dearth', 'hatred', 'rathed', 'thread'],\n 'hatress': ['hatress', 'shaster'],\n 'hatt': ['hatt', 'tath', 'that'],\n 'hattemist': ['hattemist', 'thematist'],\n 'hatter': ['hatter', 'threat'],\n 'hattery': ['hattery', 'theatry'],\n 'hattic': ['chatti', 'hattic'],\n 'hattock': ['hattock', 'totchka'],\n 'hau': ['ahu', 'auh', 'hau'],\n 'hauerite': ['eutheria', 'hauerite'],\n 'haul': ['haul', 'hula'],\n 'hauler': ['hauler', 'rehaul'],\n 'haunt': ['ahunt', 'haunt', 'thuan', 'unhat'],\n 'haunter': ['haunter', 'nauther', 'unearth', 'unheart', 'urethan'],\n 'hauntingly': ['hauntingly', 'unhatingly'],\n 'haurient': ['haurient', 'huterian'],\n 'havel': ['halve', 'havel'],\n 'havers': ['havers', 'shaver', 'shrave'],\n 'haw': ['haw', 'hwa', 'wah', 'wha'],\n 'hawer': ['hawer', 'whare'],\n 'hawm': ['hawm', 'wham'],\n 'hawse': ['hawse', 'shewa', 'whase'],\n 'hawser': ['hawser', 'rewash', 'washer'],\n 'hay': ['hay', 'yah'],\n 'haya': ['ayah', 'haya'],\n 'hayz': ['hayz', 'hazy'],\n 'hazarder': ['hazarder', 'rehazard'],\n 'hazel': ['hazel', 'hazle'],\n 'hazle': ['hazel', 'hazle'],\n 'hazy': ['hayz', 'hazy'],\n 'he': ['eh', 'he'],\n 'head': ['hade', 'head'],\n 'headbander': ['barehanded', 'bradenhead', 'headbander'],\n 'headboard': ['broadhead', 'headboard'],\n 'header': ['adhere', 'header', 'hedera', 'rehead'],\n 'headily': ['headily', 'hylidae'],\n 'headlight': ['headlight', 'lighthead'],\n 'headlong': ['headlong', 'longhead'],\n 'headman': ['headman', 'manhead'],\n 'headmaster': ['headmaster', 'headstream', 'streamhead'],\n 'headnote': ['headnote', 'notehead'],\n 'headrail': ['headrail', 'railhead'],\n 'headrent': ['adherent', 'headrent', 'neatherd', 'threaden'],\n 'headring': ['headring', 'ringhead'],\n 'headset': ['headset', 'sethead'],\n 'headskin': ['headskin', 'nakedish', 'sinkhead'],\n 'headspring': ['headspring', 'springhead'],\n 'headstone': ['headstone', 'stonehead'],\n 'headstream': ['headmaster', 'headstream', 'streamhead'],\n 'headstrong': ['headstrong', 'stronghead'],\n 'headward': ['drawhead', 'headward'],\n 'headwater': ['headwater', 'waterhead'],\n 'heal': ['hale', 'heal', 'leah'],\n 'healer': ['healer', 'rehale', 'reheal'],\n 'healsome': ['halesome', 'healsome'],\n 'heap': ['epha', 'heap'],\n 'heaper': ['heaper', 'reheap'],\n 'heaps': ['heaps', 'pesah', 'phase', 'shape'],\n 'hear': ['hare', 'hear', 'rhea'],\n 'hearer': ['hearer', 'rehear'],\n 'hearken': ['hearken', 'kenareh'],\n 'hearst': ['haster', 'hearst', 'hearts'],\n 'heart': ['earth', 'hater', 'heart', 'herat', 'rathe'],\n 'heartdeep': ['heartdeep', 'preheated'],\n 'hearted': ['earthed', 'hearted'],\n 'heartedness': ['heartedness', 'neatherdess'],\n 'hearten': ['earthen', 'enheart', 'hearten', 'naether', 'teheran', 'traheen'],\n 'heartener': ['heartener', 'rehearten'],\n 'heartiness': ['earthiness', 'heartiness'],\n 'hearting': ['hearting', 'ingather'],\n 'heartless': ['earthless', 'heartless'],\n 'heartling': ['earthling', 'heartling'],\n 'heartly': ['earthly', 'heartly', 'lathery', 'rathely'],\n 'heartnut': ['earthnut', 'heartnut'],\n 'heartpea': ['earthpea', 'heartpea'],\n 'heartquake': ['earthquake', 'heartquake'],\n 'hearts': ['haster', 'hearst', 'hearts'],\n 'heartsome': ['heartsome', 'samothere'],\n 'heartward': ['earthward', 'heartward'],\n 'heartweed': ['heartweed', 'weathered'],\n 'hearty': ['earthy', 'hearty', 'yearth'],\n 'heat': ['ahet', 'haet', 'hate', 'heat', 'thea'],\n 'heatable': ['hateable', 'heatable'],\n 'heater': ['heater', 'hereat', 'reheat'],\n 'heatful': ['hateful', 'heatful'],\n 'heath': ['heath', 'theah'],\n 'heating': ['gahnite', 'heating'],\n 'heatless': ['hateless', 'heatless'],\n 'heatronic': ['anchorite', 'antechoir', 'heatronic', 'hectorian'],\n 'heave': ['heave', 'hevea'],\n 'hebraizer': ['hebraizer', 'herbarize'],\n 'hebridean': ['haberdine', 'hebridean'],\n 'hecate': ['achete', 'hecate', 'teache', 'thecae'],\n 'hecatine': ['echinate', 'hecatine'],\n 'heckle': ['heckle', 'kechel'],\n 'hectare': ['cheater', 'hectare', 'recheat', 'reteach', 'teacher'],\n 'hecte': ['cheet', 'hecte'],\n 'hector': ['hector', 'rochet', 'tocher', 'troche'],\n 'hectorian': ['anchorite', 'antechoir', 'heatronic', 'hectorian'],\n 'hectorship': ['christophe', 'hectorship'],\n 'hedera': ['adhere', 'header', 'hedera', 'rehead'],\n 'hedonical': ['chelodina', 'hedonical'],\n 'hedonism': ['demonish', 'hedonism'],\n 'heehaw': ['heehaw', 'wahehe'],\n 'heel': ['heel', 'hele'],\n 'heeler': ['heeler', 'reheel'],\n 'heelpost': ['heelpost', 'pesthole'],\n 'heer': ['heer', 'here'],\n 'hegari': ['hegari', 'hegira'],\n 'hegemonic': ['hegemonic', 'hemogenic'],\n 'hegira': ['hegari', 'hegira'],\n 'hei': ['hei', 'hie'],\n 'height': ['eighth', 'height'],\n 'heightener': ['heightener', 'reheighten'],\n 'heintzite': ['heintzite', 'hintzeite'],\n 'heinz': ['heinz', 'hienz'],\n 'heir': ['heir', 'hire'],\n 'heirdom': ['heirdom', 'homerid'],\n 'heirless': ['heirless', 'hireless'],\n 'hejazi': ['hejazi', 'jeziah'],\n 'helcosis': ['helcosis', 'ochlesis'],\n 'helcotic': ['helcotic', 'lochetic', 'ochletic'],\n 'hele': ['heel', 'hele'],\n 'heliacal': ['achillea', 'heliacal'],\n 'heliast': ['heliast', 'thesial'],\n 'helical': ['alichel', 'challie', 'helical'],\n 'heliced': ['chelide', 'heliced'],\n 'helicon': ['choline', 'helicon'],\n 'heling': ['heling', 'hingle'],\n 'heliophotography': ['heliophotography', 'photoheliography'],\n 'helios': ['helios', 'isohel'],\n 'heliostatic': ['chiastolite', 'heliostatic'],\n 'heliotactic': ['heliotactic', 'thiolacetic'],\n 'helium': ['helium', 'humlie'],\n 'hellcat': ['hellcat', 'tellach'],\n 'helleborein': ['helleborein', 'helleborine'],\n 'helleborine': ['helleborein', 'helleborine'],\n 'hellenic': ['chenille', 'hellenic'],\n 'helleri': ['helleri', 'hellier'],\n 'hellicat': ['hellicat', 'lecithal'],\n 'hellier': ['helleri', 'hellier'],\n 'helm': ['helm', 'heml'],\n 'heloderma': ['dreamhole', 'heloderma'],\n 'helot': ['helot', 'hotel', 'thole'],\n 'helotize': ['helotize', 'hotelize'],\n 'helpmeet': ['helpmeet', 'meethelp'],\n 'hemad': ['ahmed', 'hemad'],\n 'hemal': ['hamel', 'hemal'],\n 'hemapod': ['hemapod', 'mophead'],\n 'hematic': ['chamite', 'hematic'],\n 'hematin': ['ethanim', 'hematin'],\n 'hematinic': ['hematinic', 'minchiate'],\n 'hematolin': ['hematolin', 'maholtine'],\n 'hematonic': ['hematonic', 'methanoic'],\n 'hematosin': ['hematosin', 'thomasine'],\n 'hematoxic': ['hematoxic', 'hexatomic'],\n 'hematuric': ['hematuric', 'rheumatic'],\n 'hemiasci': ['hemiasci', 'ischemia'],\n 'hemiatrophy': ['hemiatrophy', 'hypothermia'],\n 'hemic': ['chime', 'hemic', 'miche'],\n 'hemicarp': ['camphire', 'hemicarp'],\n 'hemicatalepsy': ['hemicatalepsy', 'mesaticephaly'],\n 'hemiclastic': ['alchemistic', 'hemiclastic'],\n 'hemicrany': ['hemicrany', 'machinery'],\n 'hemiholohedral': ['hemiholohedral', 'holohemihedral'],\n 'hemiolic': ['elohimic', 'hemiolic'],\n 'hemiparesis': ['hemiparesis', 'phariseeism'],\n 'hemistater': ['amherstite', 'hemistater'],\n 'hemiterata': ['hemiterata', 'metatheria'],\n 'hemitype': ['epithyme', 'hemitype'],\n 'heml': ['helm', 'heml'],\n 'hemogenic': ['hegemonic', 'hemogenic'],\n 'hemol': ['hemol', 'mohel'],\n 'hemologist': ['hemologist', 'theologism'],\n 'hemopneumothorax': ['hemopneumothorax', 'pneumohemothorax'],\n 'henbit': ['behint', 'henbit'],\n 'hent': ['hent', 'neth', 'then'],\n 'henter': ['erthen', 'henter', 'nether', 'threne'],\n 'henyard': ['enhydra', 'henyard'],\n 'hepar': ['hepar', 'phare', 'raphe'],\n 'heparin': ['heparin', 'nephria'],\n 'hepatic': ['aphetic', 'caphite', 'hepatic'],\n 'hepatica': ['apachite', 'hepatica'],\n 'hepatical': ['caliphate', 'hepatical'],\n 'hepatize': ['aphetize', 'hepatize'],\n 'hepatocolic': ['hepatocolic', 'otocephalic'],\n 'hepatogastric': ['gastrohepatic', 'hepatogastric'],\n 'hepatoid': ['diaphote', 'hepatoid'],\n 'hepatomegalia': ['hepatomegalia', 'megalohepatia'],\n 'hepatonephric': ['hepatonephric', 'phrenohepatic'],\n 'hepatostomy': ['hepatostomy', 'somatophyte'],\n 'hepialid': ['hepialid', 'phialide'],\n 'heptace': ['heptace', 'tepache'],\n 'heptad': ['heptad', 'pathed'],\n 'heptagon': ['heptagon', 'pathogen'],\n 'heptameron': ['heptameron', 'promethean'],\n 'heptane': ['haptene', 'heptane', 'phenate'],\n 'heptaploidy': ['heptaploidy', 'typhlopidae'],\n 'hepteris': ['hepteris', 'treeship'],\n 'heptine': ['heptine', 'nephite'],\n 'heptite': ['epithet', 'heptite'],\n 'heptorite': ['heptorite', 'tephroite'],\n 'heptylic': ['heptylic', 'phyletic'],\n 'her': ['her', 'reh', 'rhe'],\n 'heraclid': ['heraclid', 'heraldic'],\n 'heraldic': ['heraclid', 'heraldic'],\n 'heraldist': ['heraldist', 'tehsildar'],\n 'herat': ['earth', 'hater', 'heart', 'herat', 'rathe'],\n 'herbage': ['breaghe', 'herbage'],\n 'herbarian': ['harebrain', 'herbarian'],\n 'herbarism': ['herbarism', 'shambrier'],\n 'herbarize': ['hebraizer', 'herbarize'],\n 'herbert': ['berther', 'herbert'],\n 'herbous': ['herbous', 'subhero'],\n 'herdic': ['chider', 'herdic'],\n 'here': ['heer', 'here'],\n 'hereafter': ['featherer', 'hereafter'],\n 'hereat': ['heater', 'hereat', 'reheat'],\n 'herein': ['herein', 'inhere'],\n 'hereinto': ['etherion', 'hereinto', 'heronite'],\n 'herem': ['herem', 'rheme'],\n 'heretic': ['erethic', 'etheric', 'heretic', 'heteric', 'teicher'],\n 'heretically': ['heretically', 'heterically'],\n 'heretication': ['heretication', 'theoretician'],\n 'hereto': ['hereto', 'hetero'],\n 'heritance': ['catherine', 'heritance'],\n 'herl': ['herl', 'hler', 'lehr'],\n 'herma': ['harem', 'herma', 'rhema'],\n 'hermaic': ['chimera', 'hermaic'],\n 'hermitage': ['geheimrat', 'hermitage'],\n 'hermo': ['hermo', 'homer', 'horme'],\n 'herne': ['herne', 'rheen'],\n 'hernia': ['hairen', 'hernia'],\n 'hernial': ['hernial', 'inhaler'],\n 'herniate': ['atherine', 'herniate'],\n 'herniated': ['hardenite', 'herniated'],\n 'hernioid': ['dinheiro', 'hernioid'],\n 'hero': ['hero', 'hoer'],\n 'herodian': ['herodian', 'ironhead'],\n 'heroic': ['coheir', 'heroic'],\n 'heroical': ['halicore', 'heroical'],\n 'heroin': ['heroin', 'hieron', 'hornie'],\n 'heroism': ['heroism', 'moreish'],\n 'heronite': ['etherion', 'hereinto', 'heronite'],\n 'herophile': ['herophile', 'rheophile'],\n 'herpes': ['herpes', 'hesper', 'sphere'],\n 'herpetism': ['herpetism', 'metership', 'metreship', 'temperish'],\n 'herpetological': ['herpetological', 'pretheological'],\n 'herpetomonad': ['dermatophone', 'herpetomonad'],\n 'hers': ['hers', 'resh', 'sher'],\n 'herse': ['herse', 'sereh', 'sheer', 'shree'],\n 'hersed': ['hersed', 'sheder'],\n 'herself': ['flesher', 'herself'],\n 'hersir': ['hersir', 'sherri'],\n 'herulian': ['herulian', 'inhauler'],\n 'hervati': ['athrive', 'hervati'],\n 'hesitater': ['hesitater', 'hetaerist'],\n 'hesper': ['herpes', 'hesper', 'sphere'],\n 'hespera': ['hespera', 'rephase', 'reshape'],\n 'hesperia': ['hesperia', 'pharisee'],\n 'hesperian': ['hesperian', 'phrenesia', 'seraphine'],\n 'hesperid': ['hesperid', 'perished'],\n 'hesperinon': ['hesperinon', 'prehension'],\n 'hesperis': ['hesperis', 'seership'],\n 'hest': ['esth', 'hest', 'seth'],\n 'hester': ['esther', 'hester', 'theres'],\n 'het': ['het', 'the'],\n 'hetaeric': ['cheatrie', 'hetaeric'],\n 'hetaerist': ['hesitater', 'hetaerist'],\n 'hetaery': ['erythea', 'hetaery', 'yeather'],\n 'heteratomic': ['heteratomic', 'theorematic'],\n 'heteraxial': ['exhilarate', 'heteraxial'],\n 'heteric': ['erethic', 'etheric', 'heretic', 'heteric', 'teicher'],\n 'heterically': ['heretically', 'heterically'],\n 'hetericism': ['erethismic', 'hetericism'],\n 'hetericist': ['erethistic', 'hetericist'],\n 'heterism': ['erethism', 'etherism', 'heterism'],\n 'heterization': ['etherization', 'heterization'],\n 'heterize': ['etherize', 'heterize'],\n 'hetero': ['hereto', 'hetero'],\n 'heterocarpus': ['heterocarpus', 'urethrascope'],\n 'heteroclite': ['heteroclite', 'heterotelic'],\n 'heterodromy': ['heterodromy', 'hydrometeor'],\n 'heteroecismal': ['cholesteremia', 'heteroecismal'],\n 'heterography': ['erythrophage', 'heterography'],\n 'heterogynous': ['heterogynous', 'thyreogenous'],\n 'heterology': ['heterology', 'thereology'],\n 'heteromeri': ['heteromeri', 'moerithere'],\n 'heteroousiast': ['autoheterosis', 'heteroousiast'],\n 'heteropathy': ['heteropathy', 'theotherapy'],\n 'heteropodal': ['heteropodal', 'prelatehood'],\n 'heterotelic': ['heteroclite', 'heterotelic'],\n 'heterotic': ['heterotic', 'theoretic'],\n 'hetman': ['anthem', 'hetman', 'mentha'],\n 'hetmanate': ['hetmanate', 'methanate'],\n 'hetter': ['hetter', 'tether'],\n 'hevea': ['heave', 'hevea'],\n 'hevi': ['hevi', 'hive'],\n 'hewel': ['hewel', 'wheel'],\n 'hewer': ['hewer', 'wheer', 'where'],\n 'hewn': ['hewn', 'when'],\n 'hewt': ['hewt', 'thew', 'whet'],\n 'hexacid': ['hexacid', 'hexadic'],\n 'hexadic': ['hexacid', 'hexadic'],\n 'hexakisoctahedron': ['hexakisoctahedron', 'octakishexahedron'],\n 'hexakistetrahedron': ['hexakistetrahedron', 'tetrakishexahedron'],\n 'hexatetrahedron': ['hexatetrahedron', 'tetrahexahedron'],\n 'hexatomic': ['hematoxic', 'hexatomic'],\n 'hexonic': ['choenix', 'hexonic'],\n 'hiant': ['ahint', 'hiant', 'tahin'],\n 'hiatal': ['hiatal', 'thalia'],\n 'hibernate': ['hibernate', 'inbreathe'],\n 'hic': ['chi', 'hic', 'ich'],\n 'hickwall': ['hickwall', 'wallhick'],\n 'hidage': ['adighe', 'hidage'],\n 'hider': ['dheri', 'hider', 'hired'],\n 'hidling': ['hidling', 'hilding'],\n 'hidlings': ['dishling', 'hidlings'],\n 'hidrotic': ['hidrotic', 'trichoid'],\n 'hie': ['hei', 'hie'],\n 'hield': ['delhi', 'hield'],\n 'hiemal': ['hameil', 'hiemal'],\n 'hienz': ['heinz', 'hienz'],\n 'hieron': ['heroin', 'hieron', 'hornie'],\n 'hieros': ['hieros', 'hosier'],\n 'hight': ['hight', 'thigh'],\n 'higuero': ['higuero', 'roughie'],\n 'hilasmic': ['chiliasm', 'hilasmic', 'machilis'],\n 'hilding': ['hidling', 'hilding'],\n 'hillside': ['hillside', 'sidehill'],\n 'hilsa': ['alish', 'hilsa'],\n 'hilt': ['hilt', 'lith'],\n 'hima': ['hami', 'hima', 'mahi'],\n 'himself': ['flemish', 'himself'],\n 'hinderest': ['disherent', 'hinderest', 'tenderish'],\n 'hindu': ['hindu', 'hundi', 'unhid'],\n 'hing': ['hing', 'nigh'],\n 'hinge': ['hinge', 'neigh'],\n 'hingle': ['heling', 'hingle'],\n 'hint': ['hint', 'thin'],\n 'hinter': ['hinter', 'nither', 'theirn'],\n 'hintproof': ['hintproof', 'hoofprint'],\n 'hintzeite': ['heintzite', 'hintzeite'],\n 'hip': ['hip', 'phi'],\n 'hipbone': ['hipbone', 'hopbine'],\n 'hippodamous': ['amphipodous', 'hippodamous'],\n 'hippolyte': ['hippolyte', 'typophile'],\n 'hippus': ['hippus', 'uppish'],\n 'hiram': ['hiram', 'ihram', 'mahri'],\n 'hircine': ['hircine', 'rheinic'],\n 'hire': ['heir', 'hire'],\n 'hired': ['dheri', 'hider', 'hired'],\n 'hireless': ['heirless', 'hireless'],\n 'hireman': ['harmine', 'hireman'],\n 'hiren': ['hiren', 'rhein', 'rhine'],\n 'hirmos': ['hirmos', 'romish'],\n 'hirse': ['hirse', 'shier', 'shire'],\n 'hirsel': ['hirsel', 'hirsle', 'relish'],\n 'hirsle': ['hirsel', 'hirsle', 'relish'],\n 'his': ['his', 'hsi', 'shi'],\n 'hish': ['hish', 'shih'],\n 'hisn': ['hisn', 'shin', 'sinh'],\n 'hispa': ['aphis', 'apish', 'hispa', 'saiph', 'spahi'],\n 'hispanist': ['hispanist', 'saintship'],\n 'hiss': ['hiss', 'sish'],\n 'hist': ['hist', 'sith', 'this', 'tshi'],\n 'histamine': ['histamine', 'semihiant'],\n 'histie': ['histie', 'shiite'],\n 'histioid': ['histioid', 'idiotish'],\n 'histon': ['histon', 'shinto', 'tonish'],\n 'histonal': ['histonal', 'toshnail'],\n 'historic': ['historic', 'orchitis'],\n 'historics': ['historics', 'trichosis'],\n 'history': ['history', 'toryish'],\n 'hittable': ['hittable', 'tithable'],\n 'hitter': ['hitter', 'tither'],\n 'hive': ['hevi', 'hive'],\n 'hives': ['hives', 'shive'],\n 'hler': ['herl', 'hler', 'lehr'],\n 'ho': ['ho', 'oh'],\n 'hoar': ['hoar', 'hora'],\n 'hoard': ['hoard', 'rhoda'],\n 'hoarse': ['ahorse', 'ashore', 'hoarse', 'shorea'],\n 'hoarstone': ['anorthose', 'hoarstone'],\n 'hoast': ['hoast', 'hosta', 'shoat'],\n 'hobbism': ['hobbism', 'mobbish'],\n 'hobo': ['boho', 'hobo'],\n 'hocco': ['choco', 'hocco'],\n 'hock': ['hock', 'koch'],\n 'hocker': ['choker', 'hocker'],\n 'hocky': ['choky', 'hocky'],\n 'hocus': ['chous', 'hocus'],\n 'hodiernal': ['hodiernal', 'rhodaline'],\n 'hoer': ['hero', 'hoer'],\n 'hogan': ['ahong', 'hogan'],\n 'hogget': ['egghot', 'hogget'],\n 'hogmanay': ['hogmanay', 'mahogany'],\n 'hognut': ['hognut', 'nought'],\n 'hogsty': ['ghosty', 'hogsty'],\n 'hoister': ['hoister', 'rehoist'],\n 'hoit': ['hoit', 'hoti', 'thio'],\n 'holard': ['harold', 'holard'],\n 'holconoti': ['holconoti', 'holotonic'],\n 'holcus': ['holcus', 'lochus', 'slouch'],\n 'holdfast': ['fasthold', 'holdfast'],\n 'holdout': ['holdout', 'outhold'],\n 'holdup': ['holdup', 'uphold'],\n 'holeman': ['holeman', 'manhole'],\n 'holey': ['holey', 'hoyle'],\n 'holiday': ['holiday', 'hyaloid', 'hyoidal'],\n 'hollandite': ['hollandite', 'hollantide'],\n 'hollantide': ['hollandite', 'hollantide'],\n 'hollower': ['hollower', 'rehollow'],\n 'holmia': ['holmia', 'maholi'],\n 'holocentrid': ['holocentrid', 'lechriodont'],\n 'holohemihedral': ['hemiholohedral', 'holohemihedral'],\n 'holosteric': ['holosteric', 'thiocresol'],\n 'holotonic': ['holconoti', 'holotonic'],\n 'holster': ['holster', 'hostler'],\n 'homage': ['homage', 'ohmage'],\n 'homarine': ['homarine', 'homerian'],\n 'homecroft': ['forthcome', 'homecroft'],\n 'homeogenous': ['homeogenous', 'homogeneous'],\n 'homeotypic': ['homeotypic', 'mythopoeic'],\n 'homeotypical': ['homeotypical', 'polymetochia'],\n 'homer': ['hermo', 'homer', 'horme'],\n 'homerian': ['homarine', 'homerian'],\n 'homeric': ['homeric', 'moriche'],\n 'homerical': ['chloremia', 'homerical'],\n 'homerid': ['heirdom', 'homerid'],\n 'homerist': ['homerist', 'isotherm', 'otherism', 'theorism'],\n 'homiletics': ['homiletics', 'mesolithic'],\n 'homo': ['homo', 'moho'],\n 'homocline': ['chemiloon', 'homocline'],\n 'homogeneous': ['homeogenous', 'homogeneous'],\n 'homopolic': ['homopolic', 'lophocomi'],\n 'homopteran': ['homopteran', 'trophonema'],\n 'homrai': ['homrai', 'mahori', 'mohair'],\n 'hondo': ['dhoon', 'hondo'],\n 'honest': ['ethnos', 'honest'],\n 'honeypod': ['dyophone', 'honeypod'],\n 'honeypot': ['eophyton', 'honeypot'],\n 'honorer': ['honorer', 'rehonor'],\n 'hontous': ['hontous', 'nothous'],\n 'hoodman': ['dhamnoo', 'hoodman', 'manhood'],\n 'hoofprint': ['hintproof', 'hoofprint'],\n 'hooker': ['hooker', 'rehook'],\n 'hookweed': ['hookweed', 'weedhook'],\n 'hoop': ['hoop', 'phoo', 'pooh'],\n 'hooper': ['hooper', 'rehoop'],\n 'hoot': ['hoot', 'thoo', 'toho'],\n 'hop': ['hop', 'pho', 'poh'],\n 'hopbine': ['hipbone', 'hopbine'],\n 'hopcalite': ['hopcalite', 'phacolite'],\n 'hope': ['hope', 'peho'],\n 'hoped': ['depoh', 'ephod', 'hoped'],\n 'hoper': ['ephor', 'hoper'],\n 'hoplite': ['hoplite', 'pithole'],\n 'hoppergrass': ['grasshopper', 'hoppergrass'],\n 'hoppers': ['hoppers', 'shopper'],\n 'hora': ['hoar', 'hora'],\n 'horal': ['horal', 'lohar'],\n 'hordarian': ['arianrhod', 'hordarian'],\n 'horizontal': ['horizontal', 'notorhizal'],\n 'horme': ['hermo', 'homer', 'horme'],\n 'horned': ['dehorn', 'horned'],\n 'hornet': ['hornet', 'nother', 'theron', 'throne'],\n 'hornie': ['heroin', 'hieron', 'hornie'],\n 'hornpipe': ['hornpipe', 'porphine'],\n 'horopteric': ['horopteric', 'rheotropic', 'trichopore'],\n 'horrent': ['horrent', 'norther'],\n 'horse': ['horse', 'shoer', 'shore'],\n 'horsecar': ['cosharer', 'horsecar'],\n 'horseless': ['horseless', 'shoreless'],\n 'horseman': ['horseman', 'rhamnose', 'shoreman'],\n 'horser': ['horser', 'shorer'],\n 'horsetail': ['horsetail', 'isotheral'],\n 'horseweed': ['horseweed', 'shoreweed'],\n 'horsewhip': ['horsewhip', 'whoreship'],\n 'horsewood': ['horsewood', 'woodhorse'],\n 'horsing': ['horsing', 'shoring'],\n 'horst': ['horst', 'short'],\n 'hortensia': ['hairstone', 'hortensia'],\n 'hortite': ['hortite', 'orthite', 'thorite'],\n 'hose': ['hose', 'shoe'],\n 'hosed': ['hosed', 'shode'],\n 'hosel': ['hosel', 'sheol', 'shole'],\n 'hoseless': ['hoseless', 'shoeless'],\n 'hoseman': ['hoseman', 'shoeman'],\n 'hosier': ['hieros', 'hosier'],\n 'hospitaler': ['hospitaler', 'trophesial'],\n 'host': ['host', 'shot', 'thos', 'tosh'],\n 'hosta': ['hoast', 'hosta', 'shoat'],\n 'hostager': ['hostager', 'shortage'],\n 'hoster': ['hoster', 'tosher'],\n 'hostile': ['elohist', 'hostile'],\n 'hosting': ['hosting', 'onsight'],\n 'hostler': ['holster', 'hostler'],\n 'hostless': ['hostless', 'shotless'],\n 'hostly': ['hostly', 'toshly'],\n 'hot': ['hot', 'tho'],\n 'hotel': ['helot', 'hotel', 'thole'],\n 'hotelize': ['helotize', 'hotelize'],\n 'hotfoot': ['foothot', 'hotfoot'],\n 'hoti': ['hoit', 'hoti', 'thio'],\n 'hotter': ['hotter', 'tother'],\n 'hounce': ['cohune', 'hounce'],\n 'houseboat': ['boathouse', 'houseboat'],\n 'housebug': ['bughouse', 'housebug'],\n 'housecraft': ['fratcheous', 'housecraft'],\n 'housetop': ['housetop', 'pothouse'],\n 'housewarm': ['housewarm', 'warmhouse'],\n 'housewear': ['housewear', 'warehouse'],\n 'housework': ['housework', 'workhouse'],\n 'hovering': ['hovering', 'overnigh'],\n 'how': ['how', 'who'],\n 'howel': ['howel', 'whole'],\n 'however': ['everwho', 'however', 'whoever'],\n 'howlet': ['howlet', 'thowel'],\n 'howso': ['howso', 'woosh'],\n 'howsomever': ['howsomever', 'whomsoever', 'whosomever'],\n 'hoya': ['ahoy', 'hoya'],\n 'hoyle': ['holey', 'hoyle'],\n 'hsi': ['his', 'hsi', 'shi'],\n 'huari': ['huari', 'uriah'],\n 'hubert': ['hubert', 'turbeh'],\n 'hud': ['dhu', 'hud'],\n 'hudsonite': ['hudsonite', 'unhoisted'],\n 'huer': ['huer', 'hure'],\n 'hug': ['hug', 'ugh'],\n 'hughes': ['hughes', 'sheugh'],\n 'hughoc': ['chough', 'hughoc'],\n 'hugo': ['hugo', 'ough'],\n 'hugsome': ['gumshoe', 'hugsome'],\n 'huk': ['huk', 'khu'],\n 'hula': ['haul', 'hula'],\n 'hulsean': ['hulsean', 'unleash'],\n 'hulster': ['hulster', 'hustler', 'sluther'],\n 'huma': ['ahum', 'huma'],\n 'human': ['human', 'nahum'],\n 'humane': ['humane', 'humean'],\n 'humanics': ['humanics', 'inasmuch'],\n 'humean': ['humane', 'humean'],\n 'humeroradial': ['humeroradial', 'radiohumeral'],\n 'humic': ['chimu', 'humic'],\n 'humidor': ['humidor', 'rhodium'],\n 'humlie': ['helium', 'humlie'],\n 'humor': ['humor', 'mohur'],\n 'humoralistic': ['humoralistic', 'humoristical'],\n 'humoristical': ['humoralistic', 'humoristical'],\n 'hump': ['hump', 'umph'],\n 'hundi': ['hindu', 'hundi', 'unhid'],\n 'hunger': ['hunger', 'rehung'],\n 'hunterian': ['hunterian', 'ruthenian'],\n 'hup': ['hup', 'phu'],\n 'hupa': ['hapu', 'hupa'],\n 'hurdis': ['hurdis', 'rudish'],\n 'hurdle': ['hurdle', 'hurled'],\n 'hure': ['huer', 'hure'],\n 'hurled': ['hurdle', 'hurled'],\n 'huron': ['huron', 'rohun'],\n 'hurst': ['hurst', 'trush'],\n 'hurt': ['hurt', 'ruth'],\n 'hurter': ['hurter', 'ruther'],\n 'hurtful': ['hurtful', 'ruthful'],\n 'hurtfully': ['hurtfully', 'ruthfully'],\n 'hurtfulness': ['hurtfulness', 'ruthfulness'],\n 'hurting': ['hurting', 'ungirth', 'unright'],\n 'hurtingest': ['hurtingest', 'shuttering'],\n 'hurtle': ['hurtle', 'luther'],\n 'hurtless': ['hurtless', 'ruthless'],\n 'hurtlessly': ['hurtlessly', 'ruthlessly'],\n 'hurtlessness': ['hurtlessness', 'ruthlessness'],\n 'husbander': ['husbander', 'shabunder'],\n 'husked': ['dehusk', 'husked'],\n 'huso': ['huso', 'shou'],\n 'huspil': ['huspil', 'pulish'],\n 'husting': ['gutnish', 'husting', 'unsight'],\n 'hustle': ['hustle', 'sleuth'],\n 'hustler': ['hulster', 'hustler', 'sluther'],\n 'huterian': ['haurient', 'huterian'],\n 'hwa': ['haw', 'hwa', 'wah', 'wha'],\n 'hyaloid': ['holiday', 'hyaloid', 'hyoidal'],\n 'hydra': ['hardy', 'hydra'],\n 'hydramnios': ['disharmony', 'hydramnios'],\n 'hydrate': ['hydrate', 'thready'],\n 'hydrazidine': ['anhydridize', 'hydrazidine'],\n 'hydrazine': ['anhydrize', 'hydrazine'],\n 'hydriodate': ['hydriodate', 'iodhydrate'],\n 'hydriodic': ['hydriodic', 'iodhydric'],\n 'hydriote': ['hydriote', 'thyreoid'],\n 'hydrobromate': ['bromohydrate', 'hydrobromate'],\n 'hydrocarbide': ['carbohydride', 'hydrocarbide'],\n 'hydrocharis': ['hydrocharis', 'hydrorachis'],\n 'hydroferricyanic': ['ferrihydrocyanic', 'hydroferricyanic'],\n 'hydroferrocyanic': ['ferrohydrocyanic', 'hydroferrocyanic'],\n 'hydrofluoboric': ['borofluohydric', 'hydrofluoboric'],\n 'hydrogeology': ['geohydrology', 'hydrogeology'],\n 'hydroiodic': ['hydroiodic', 'iodohydric'],\n 'hydrometeor': ['heterodromy', 'hydrometeor'],\n 'hydromotor': ['hydromotor', 'orthodromy'],\n 'hydronephrosis': ['hydronephrosis', 'nephrohydrosis'],\n 'hydropneumopericardium': ['hydropneumopericardium', 'pneumohydropericardium'],\n 'hydropneumothorax': ['hydropneumothorax', 'pneumohydrothorax'],\n 'hydrorachis': ['hydrocharis', 'hydrorachis'],\n 'hydrosulphate': ['hydrosulphate', 'sulphohydrate'],\n 'hydrotical': ['dacryolith', 'hydrotical'],\n 'hydrous': ['hydrous', 'shroudy'],\n 'hyetograph': ['ethography', 'hyetograph'],\n 'hylidae': ['headily', 'hylidae'],\n 'hylist': ['hylist', 'slithy'],\n 'hyllus': ['hyllus', 'lushly'],\n 'hylopathism': ['halophytism', 'hylopathism'],\n 'hymenic': ['chimney', 'hymenic'],\n 'hymettic': ['hymettic', 'thymetic'],\n 'hymnologist': ['hymnologist', 'smoothingly'],\n 'hyoglossal': ['glossohyal', 'hyoglossal'],\n 'hyoidal': ['holiday', 'hyaloid', 'hyoidal'],\n 'hyothyreoid': ['hyothyreoid', 'thyreohyoid'],\n 'hyothyroid': ['hyothyroid', 'thyrohyoid'],\n 'hypaethron': ['hypaethron', 'hypothenar'],\n 'hypercone': ['coryphene', 'hypercone'],\n 'hypergamous': ['hypergamous', 'museography'],\n 'hypertoxic': ['hypertoxic', 'xerophytic'],\n 'hypnobate': ['batyphone', 'hypnobate'],\n 'hypnoetic': ['hypnoetic', 'neophytic'],\n 'hypnotic': ['hypnotic', 'phytonic', 'pythonic', 'typhonic'],\n 'hypnotism': ['hypnotism', 'pythonism'],\n 'hypnotist': ['hypnotist', 'pythonist'],\n 'hypnotize': ['hypnotize', 'pythonize'],\n 'hypnotoid': ['hypnotoid', 'pythonoid'],\n 'hypobole': ['hypobole', 'lyophobe'],\n 'hypocarp': ['apocryph', 'hypocarp'],\n 'hypocrite': ['chirotype', 'hypocrite'],\n 'hypodorian': ['hypodorian', 'radiophony'],\n 'hypoglottis': ['hypoglottis', 'phytologist'],\n 'hypomanic': ['amphicyon', 'hypomanic'],\n 'hypopteron': ['hypopteron', 'phonotyper'],\n 'hyporadius': ['hyporadius', 'suprahyoid'],\n 'hyposcleral': ['hyposcleral', 'phylloceras'],\n 'hyposmia': ['hyposmia', 'phymosia'],\n 'hypostomatic': ['hypostomatic', 'somatophytic'],\n 'hypothec': ['hypothec', 'photechy'],\n 'hypothenar': ['hypaethron', 'hypothenar'],\n 'hypothermia': ['hemiatrophy', 'hypothermia'],\n 'hypsiloid': ['hypsiloid', 'syphiloid'],\n 'hyracid': ['diarchy', 'hyracid'],\n 'hyssop': ['hyssop', 'phossy', 'sposhy'],\n 'hysteresial': ['hysteresial', 'hysteriales'],\n 'hysteria': ['hysteria', 'sheriyat'],\n 'hysteriales': ['hysteresial', 'hysteriales'],\n 'hysterolaparotomy': ['hysterolaparotomy', 'laparohysterotomy'],\n 'hysteromyomectomy': ['hysteromyomectomy', 'myomohysterectomy'],\n 'hysteropathy': ['hysteropathy', 'hysterophyta'],\n 'hysterophyta': ['hysteropathy', 'hysterophyta'],\n 'iamb': ['iamb', 'mabi'],\n 'iambelegus': ['elegiambus', 'iambelegus'],\n 'iambic': ['cimbia', 'iambic'],\n 'ian': ['ani', 'ian'],\n 'ianus': ['ianus', 'suina'],\n 'iatraliptics': ['iatraliptics', 'partialistic'],\n 'iatric': ['iatric', 'tricia'],\n 'ibad': ['adib', 'ibad'],\n 'iban': ['bain', 'bani', 'iban'],\n 'ibanag': ['bagani', 'bangia', 'ibanag'],\n 'iberian': ['aribine', 'bairnie', 'iberian'],\n 'ibo': ['ibo', 'obi'],\n 'ibota': ['biota', 'ibota'],\n 'icacorea': ['coraciae', 'icacorea'],\n 'icarian': ['arician', 'icarian'],\n 'icecap': ['icecap', 'ipecac'],\n 'iced': ['dice', 'iced'],\n 'iceland': ['cladine', 'decalin', 'iceland'],\n 'icelandic': ['cicindela', 'cinclidae', 'icelandic'],\n 'iceman': ['anemic', 'cinema', 'iceman'],\n 'ich': ['chi', 'hic', 'ich'],\n 'ichnolite': ['ichnolite', 'neolithic'],\n 'ichor': ['chiro', 'choir', 'ichor'],\n 'icicle': ['cilice', 'icicle'],\n 'icon': ['cion', 'coin', 'icon'],\n 'iconian': ['anionic', 'iconian'],\n 'iconism': ['iconism', 'imsonic', 'miscoin'],\n 'iconolater': ['iconolater', 'relocation'],\n 'iconomania': ['iconomania', 'oniomaniac'],\n 'iconometrical': ['iconometrical', 'intracoelomic'],\n 'icteridae': ['diaeretic', 'icteridae'],\n 'icterine': ['icterine', 'reincite'],\n 'icterus': ['curtise', 'icterus'],\n 'ictonyx': ['ictonyx', 'oxyntic'],\n 'ictus': ['cutis', 'ictus'],\n 'id': ['di', 'id'],\n 'ida': ['aid', 'ida'],\n 'idaean': ['adenia', 'idaean'],\n 'ide': ['die', 'ide'],\n 'idea': ['aide', 'idea'],\n 'ideal': ['adiel', 'delia', 'ideal'],\n 'idealism': ['idealism', 'lamiides'],\n 'idealistic': ['disilicate', 'idealistic'],\n 'ideality': ['aedility', 'ideality'],\n 'idealness': ['idealness', 'leadiness'],\n 'idean': ['diane', 'idean'],\n 'ideation': ['ideation', 'iodinate', 'taenioid'],\n 'identical': ['ctenidial', 'identical'],\n 'ideograph': ['eidograph', 'ideograph'],\n 'ideology': ['eidology', 'ideology'],\n 'ideoplasty': ['ideoplasty', 'stylopidae'],\n 'ides': ['desi', 'ides', 'seid', 'side'],\n 'idiasm': ['idiasm', 'simiad'],\n 'idioblast': ['diabolist', 'idioblast'],\n 'idiomology': ['idiomology', 'oligomyoid'],\n 'idioretinal': ['idioretinal', 'litorinidae'],\n 'idiotish': ['histioid', 'idiotish'],\n 'idle': ['idle', 'lide', 'lied'],\n 'idleman': ['idleman', 'melinda'],\n 'idleset': ['idleset', 'isleted'],\n 'idlety': ['idlety', 'lydite', 'tidely', 'tidley'],\n 'idly': ['idly', 'idyl'],\n 'idocrase': ['idocrase', 'radicose'],\n 'idoism': ['idoism', 'iodism'],\n 'idol': ['dilo', 'diol', 'doli', 'idol', 'olid'],\n 'idola': ['aloid', 'dolia', 'idola'],\n 'idolaster': ['estradiol', 'idolaster'],\n 'idolatry': ['adroitly', 'dilatory', 'idolatry'],\n 'idolum': ['dolium', 'idolum'],\n 'idoneal': ['adinole', 'idoneal'],\n 'idorgan': ['gordian', 'idorgan', 'roading'],\n 'idose': ['diose', 'idose', 'oside'],\n 'idotea': ['idotea', 'iodate', 'otidae'],\n 'idryl': ['idryl', 'lyrid'],\n 'idyl': ['idly', 'idyl'],\n 'idyler': ['direly', 'idyler'],\n 'ierne': ['ernie', 'ierne', 'irene'],\n 'if': ['fi', 'if'],\n 'ife': ['fei', 'fie', 'ife'],\n 'igara': ['agria', 'igara'],\n 'igdyr': ['igdyr', 'ridgy'],\n 'igloo': ['igloo', 'logoi'],\n 'ignatius': ['giustina', 'ignatius'],\n 'igneoaqueous': ['aqueoigneous', 'igneoaqueous'],\n 'ignicolist': ['ignicolist', 'soliciting'],\n 'igniter': ['igniter', 'ringite', 'tigrine'],\n 'ignitor': ['ignitor', 'rioting'],\n 'ignoble': ['gobelin', 'gobline', 'ignoble', 'inglobe'],\n 'ignoramus': ['graminous', 'ignoramus'],\n 'ignorance': ['enorganic', 'ignorance'],\n 'ignorant': ['ignorant', 'tongrian'],\n 'ignore': ['ignore', 'region'],\n 'ignorement': ['ignorement', 'omnigerent'],\n 'iguana': ['guiana', 'iguana'],\n 'ihlat': ['ihlat', 'tahil'],\n 'ihram': ['hiram', 'ihram', 'mahri'],\n 'ijma': ['ijma', 'jami'],\n 'ikat': ['atik', 'ikat'],\n 'ikona': ['ikona', 'konia'],\n 'ikra': ['ikra', 'kari', 'raki'],\n 'ila': ['ail', 'ila', 'lai'],\n 'ileac': ['alice', 'celia', 'ileac'],\n 'ileon': ['enoil', 'ileon', 'olein'],\n 'iliac': ['cilia', 'iliac'],\n 'iliacus': ['acilius', 'iliacus'],\n 'ilian': ['ilian', 'inial'],\n 'ilicaceae': ['caeciliae', 'ilicaceae'],\n 'ilioischiac': ['ilioischiac', 'ischioiliac'],\n 'iliosacral': ['iliosacral', 'oscillaria'],\n 'ilk': ['ilk', 'kil'],\n 'ilka': ['ilka', 'kail', 'kali'],\n 'ilkane': ['alkine', 'ilkane', 'inlake', 'inleak'],\n 'illative': ['illative', 'veiltail'],\n 'illaudatory': ['illaudatory', 'laudatorily'],\n 'illeck': ['ellick', 'illeck'],\n 'illinois': ['illinois', 'illision'],\n 'illision': ['illinois', 'illision'],\n 'illium': ['illium', 'lilium'],\n 'illoricated': ['illoricated', 'lacertiloid'],\n 'illth': ['illth', 'thill'],\n 'illude': ['dillue', 'illude'],\n 'illuder': ['dilluer', 'illuder'],\n 'illy': ['illy', 'lily', 'yill'],\n 'ilmenite': ['ilmenite', 'melinite', 'menilite'],\n 'ilongot': ['ilongot', 'tooling'],\n 'ilot': ['ilot', 'toil'],\n 'ilya': ['ilya', 'yali'],\n 'ima': ['aim', 'ami', 'ima'],\n 'imager': ['imager', 'maigre', 'margie', 'mirage'],\n 'imaginant': ['animating', 'imaginant'],\n 'imaginer': ['imaginer', 'migraine'],\n 'imagist': ['imagist', 'stigmai'],\n 'imago': ['amigo', 'imago'],\n 'imam': ['ammi', 'imam', 'maim', 'mima'],\n 'imaret': ['imaret', 'metria', 'mirate', 'rimate'],\n 'imbarge': ['gambier', 'imbarge'],\n 'imbark': ['bikram', 'imbark'],\n 'imbat': ['ambit', 'imbat'],\n 'imbed': ['bedim', 'imbed'],\n 'imbrue': ['erbium', 'imbrue'],\n 'imbrute': ['burmite', 'imbrute', 'terbium'],\n 'imer': ['emir', 'imer', 'mire', 'reim', 'remi', 'riem', 'rime'],\n 'imerina': ['imerina', 'inermia'],\n 'imitancy': ['imitancy', 'intimacy', 'minacity'],\n 'immane': ['ammine', 'immane'],\n 'immanes': ['amenism', 'immanes', 'misname'],\n 'immaterials': ['immaterials', 'materialism'],\n 'immerd': ['dimmer', 'immerd', 'rimmed'],\n 'immersible': ['immersible', 'semilimber'],\n 'immersion': ['immersion', 'semiminor'],\n 'immi': ['immi', 'mimi'],\n 'imogen': ['geonim', 'imogen'],\n 'imolinda': ['dominial', 'imolinda', 'limoniad'],\n 'imp': ['imp', 'pim'],\n 'impaction': ['impaction', 'ptomainic'],\n 'impages': ['impages', 'mispage'],\n 'impaint': ['impaint', 'timpani'],\n 'impair': ['impair', 'pamiri'],\n 'impala': ['impala', 'malapi'],\n 'impaler': ['impaler', 'impearl', 'lempira', 'premial'],\n 'impalsy': ['impalsy', 'misplay'],\n 'impane': ['impane', 'pieman'],\n 'impanel': ['impanel', 'maniple'],\n 'impar': ['impar', 'pamir', 'prima'],\n 'imparalleled': ['demiparallel', 'imparalleled'],\n 'imparl': ['imparl', 'primal'],\n 'impart': ['armpit', 'impart'],\n 'imparter': ['imparter', 'reimpart'],\n 'impartial': ['impartial', 'primatial'],\n 'impaste': ['impaste', 'pastime'],\n 'impasture': ['impasture', 'septarium'],\n 'impeach': ['aphemic', 'impeach'],\n 'impearl': ['impaler', 'impearl', 'lempira', 'premial'],\n 'impeder': ['demirep', 'epiderm', 'impeder', 'remiped'],\n 'impedient': ['impedient', 'mendipite'],\n 'impenetrable': ['impenetrable', 'intemperable'],\n 'impenetrably': ['impenetrably', 'intemperably'],\n 'impenetrate': ['impenetrate', 'intemperate'],\n 'imperant': ['imperant', 'pairment', 'partimen', 'premiant', 'tripeman'],\n 'imperate': ['imperate', 'premiate'],\n 'imperish': ['emirship', 'imperish'],\n 'imperscriptible': ['imperscriptible', 'imprescriptible'],\n 'impersonate': ['impersonate', 'proseminate'],\n 'impersonation': ['impersonation', 'prosemination', 'semipronation'],\n 'impeticos': ['impeticos', 'poeticism'],\n 'impetre': ['emptier', 'impetre'],\n 'impetus': ['impetus', 'upsmite'],\n 'imphee': ['imphee', 'phemie'],\n 'implacental': ['capillament', 'implacental'],\n 'implanter': ['implanter', 'reimplant'],\n 'implate': ['implate', 'palmite'],\n 'impleader': ['epidermal', 'impleader', 'premedial'],\n 'implicate': ['ampelitic', 'implicate'],\n 'impling': ['impling', 'limping'],\n 'imply': ['imply', 'limpy', 'pilmy'],\n 'impollute': ['impollute', 'multipole'],\n 'imponderous': ['endosporium', 'imponderous'],\n 'imponent': ['imponent', 'pimenton'],\n 'importable': ['bitemporal', 'importable'],\n 'importancy': ['importancy', 'patronymic', 'pyromantic'],\n 'importer': ['importer', 'promerit', 'reimport'],\n 'importunance': ['importunance', 'unimportance'],\n 'importunate': ['importunate', 'permutation'],\n 'importune': ['entropium', 'importune'],\n 'imposal': ['imposal', 'spiloma'],\n 'imposer': ['imposer', 'promise', 'semipro'],\n 'imposter': ['imposter', 'tripsome'],\n 'imposure': ['imposure', 'premious'],\n 'imprecatory': ['cryptomeria', 'imprecatory'],\n 'impreg': ['gimper', 'impreg'],\n 'imprescriptible': ['imperscriptible', 'imprescriptible'],\n 'imprese': ['emprise', 'imprese', 'premise', 'spireme'],\n 'impress': ['impress', 'persism', 'premiss'],\n 'impresser': ['impresser', 'reimpress'],\n 'impressibility': ['impressibility', 'permissibility'],\n 'impressible': ['impressible', 'permissible'],\n 'impressibleness': ['impressibleness', 'permissibleness'],\n 'impressibly': ['impressibly', 'permissibly'],\n 'impression': ['impression', 'permission'],\n 'impressionism': ['impressionism', 'misimpression'],\n 'impressive': ['impressive', 'permissive'],\n 'impressively': ['impressively', 'permissively'],\n 'impressiveness': ['impressiveness', 'permissiveness'],\n 'impressure': ['impressure', 'presurmise'],\n 'imprinter': ['imprinter', 'reimprint'],\n 'imprisoner': ['imprisoner', 'reimprison'],\n 'improcreant': ['improcreant', 'preromantic'],\n 'impship': ['impship', 'pimpish'],\n 'impuberal': ['epilabrum', 'impuberal'],\n 'impugnable': ['impugnable', 'plumbagine'],\n 'impure': ['impure', 'umpire'],\n 'impuritan': ['impuritan', 'partinium'],\n 'imputer': ['imputer', 'trumpie'],\n 'imsonic': ['iconism', 'imsonic', 'miscoin'],\n 'in': ['in', 'ni'],\n 'inaction': ['aconitin', 'inaction', 'nicotian'],\n 'inactivate': ['inactivate', 'vaticinate'],\n 'inactivation': ['inactivation', 'vaticination'],\n 'inactive': ['antivice', 'inactive', 'vineatic'],\n 'inadept': ['depaint', 'inadept', 'painted', 'patined'],\n 'inaja': ['inaja', 'jaina'],\n 'inalimental': ['antimallein', 'inalimental'],\n 'inamorata': ['amatorian', 'inamorata'],\n 'inane': ['annie', 'inane'],\n 'inanga': ['angina', 'inanga'],\n 'inanimate': ['amanitine', 'inanimate'],\n 'inanimated': ['diamantine', 'inanimated'],\n 'inapt': ['inapt', 'paint', 'pinta'],\n 'inaptly': ['inaptly', 'planity', 'ptyalin'],\n 'inarch': ['chinar', 'inarch'],\n 'inarm': ['inarm', 'minar'],\n 'inasmuch': ['humanics', 'inasmuch'],\n 'inaurate': ['inaurate', 'ituraean'],\n 'inbe': ['beni', 'bien', 'bine', 'inbe'],\n 'inbreak': ['brankie', 'inbreak'],\n 'inbreathe': ['hibernate', 'inbreathe'],\n 'inbred': ['binder', 'inbred', 'rebind'],\n 'inbreed': ['birdeen', 'inbreed'],\n 'inca': ['cain', 'inca'],\n 'incaic': ['acinic', 'incaic'],\n 'incarnate': ['cratinean', 'incarnate', 'nectarian'],\n 'incase': ['casein', 'incase'],\n 'incast': ['incast', 'nastic'],\n 'incensation': ['incensation', 'inscenation'],\n 'incept': ['incept', 'pectin'],\n 'inceptor': ['inceptor', 'pretonic'],\n 'inceration': ['cineration', 'inceration'],\n 'incessant': ['anticness', 'cantiness', 'incessant'],\n 'incest': ['encist', 'incest', 'insect', 'scient'],\n 'inch': ['chin', 'inch'],\n 'inched': ['chined', 'inched'],\n 'inchoate': ['inchoate', 'noachite'],\n 'incide': ['cindie', 'incide'],\n 'incinerate': ['creatinine', 'incinerate'],\n 'incisal': ['incisal', 'salicin'],\n 'incision': ['incision', 'inosinic'],\n 'incisure': ['incisure', 'sciurine'],\n 'inciter': ['citrine', 'crinite', 'inciter', 'neritic'],\n 'inclinatorium': ['anticlinorium', 'inclinatorium'],\n 'inclosure': ['cornelius', 'inclosure', 'reclusion'],\n 'include': ['include', 'nuclide'],\n 'incluse': ['esculin', 'incluse'],\n 'incog': ['coign', 'incog'],\n 'incognito': ['cognition', 'incognito'],\n 'incoherence': ['coinherence', 'incoherence'],\n 'incoherent': ['coinherent', 'incoherent'],\n 'incomeless': ['comeliness', 'incomeless'],\n 'incomer': ['incomer', 'moneric'],\n 'incomputable': ['incomputable', 'uncompatible'],\n 'incondite': ['incondite', 'nicotined'],\n 'inconglomerate': ['inconglomerate', 'nongeometrical'],\n 'inconsistent': ['inconsistent', 'nonscientist'],\n 'inconsonant': ['inconsonant', 'nonsanction'],\n 'incontrovertibility': ['incontrovertibility', 'introconvertibility'],\n 'incontrovertible': ['incontrovertible', 'introconvertible'],\n 'incorporate': ['incorporate', 'procreation'],\n 'incorporated': ['adrenotropic', 'incorporated'],\n 'incorpse': ['conspire', 'incorpse'],\n 'incrash': ['archsin', 'incrash'],\n 'increase': ['cerasein', 'increase'],\n 'increate': ['aneretic', 'centiare', 'creatine', 'increate', 'iterance'],\n 'incredited': ['incredited', 'indirected'],\n 'increep': ['crepine', 'increep'],\n 'increpate': ['anticreep', 'apenteric', 'increpate'],\n 'increst': ['cistern', 'increst'],\n 'incruental': ['incruental', 'unicentral'],\n 'incrustant': ['incrustant', 'scrutinant'],\n 'incrustate': ['incrustate', 'scaturient', 'scrutinate'],\n 'incubate': ['cubanite', 'incubate'],\n 'incudal': ['dulcian', 'incudal', 'lucanid', 'lucinda'],\n 'incudomalleal': ['incudomalleal', 'malleoincudal'],\n 'inculcation': ['anticouncil', 'inculcation'],\n 'inculture': ['culturine', 'inculture'],\n 'incuneation': ['enunciation', 'incuneation'],\n 'incur': ['curin', 'incur', 'runic'],\n 'incurable': ['binuclear', 'incurable'],\n 'incus': ['incus', 'usnic'],\n 'incut': ['cutin', 'incut', 'tunic'],\n 'ind': ['din', 'ind', 'nid'],\n 'indaba': ['badian', 'indaba'],\n 'indagator': ['gradation', 'indagator', 'tanagroid'],\n 'indan': ['indan', 'nandi'],\n 'indane': ['aidenn', 'andine', 'dannie', 'indane'],\n 'inde': ['dine', 'enid', 'inde', 'nide'],\n 'indebt': ['bident', 'indebt'],\n 'indebted': ['bidented', 'indebted'],\n 'indefinitude': ['indefinitude', 'unidentified'],\n 'indent': ['dentin', 'indent', 'intend', 'tinned'],\n 'indented': ['indented', 'intended'],\n 'indentedly': ['indentedly', 'intendedly'],\n 'indenter': ['indenter', 'intender', 'reintend'],\n 'indentment': ['indentment', 'intendment'],\n 'indentured': ['indentured', 'underntide'],\n 'indentwise': ['disentwine', 'indentwise'],\n 'indeprivable': ['indeprivable', 'predivinable'],\n 'indesert': ['indesert', 'inserted', 'resident'],\n 'indiana': ['anidian', 'indiana'],\n 'indic': ['dinic', 'indic'],\n 'indican': ['cnidian', 'indican'],\n 'indicate': ['diacetin', 'indicate'],\n 'indicatory': ['dictionary', 'indicatory'],\n 'indicial': ['anilidic', 'indicial'],\n 'indicter': ['indicter', 'indirect', 'reindict'],\n 'indies': ['indies', 'inside'],\n 'indigena': ['gadinine', 'indigena'],\n 'indigitate': ['indigitate', 'tingitidae'],\n 'indign': ['dining', 'indign', 'niding'],\n 'indigoferous': ['gonidiferous', 'indigoferous'],\n 'indigotin': ['digitonin', 'indigotin'],\n 'indirect': ['indicter', 'indirect', 'reindict'],\n 'indirected': ['incredited', 'indirected'],\n 'indirectly': ['cylindrite', 'indirectly'],\n 'indiscreet': ['indiscreet', 'indiscrete', 'iridescent'],\n 'indiscreetly': ['indiscreetly', 'indiscretely', 'iridescently'],\n 'indiscrete': ['indiscreet', 'indiscrete', 'iridescent'],\n 'indiscretely': ['indiscreetly', 'indiscretely', 'iridescently'],\n 'indissolute': ['delusionist', 'indissolute'],\n 'indite': ['indite', 'tineid'],\n 'inditer': ['inditer', 'nitride'],\n 'indogaean': ['ganoidean', 'indogaean'],\n 'indole': ['doline', 'indole', 'leonid', 'loined', 'olenid'],\n 'indolence': ['endocline', 'indolence'],\n 'indoles': ['indoles', 'sondeli'],\n 'indologist': ['indologist', 'nidologist'],\n 'indology': ['indology', 'nidology'],\n 'indone': ['donnie', 'indone', 'ondine'],\n 'indoors': ['indoors', 'sordino'],\n 'indorse': ['indorse', 'ordines', 'siredon', 'sordine'],\n 'indra': ['darin', 'dinar', 'drain', 'indra', 'nadir', 'ranid'],\n 'indrawn': ['indrawn', 'winnard'],\n 'induce': ['induce', 'uniced'],\n 'inducer': ['inducer', 'uncried'],\n 'indulge': ['dueling', 'indulge'],\n 'indulgential': ['dentilingual', 'indulgential', 'linguidental'],\n 'indulger': ['indulger', 'ungirdle'],\n 'indument': ['indument', 'unminted'],\n 'indurable': ['indurable', 'unbrailed', 'unridable'],\n 'indurate': ['indurate', 'turdinae'],\n 'induration': ['diurnation', 'induration'],\n 'indus': ['dinus', 'indus', 'nidus'],\n 'indusiform': ['disuniform', 'indusiform'],\n 'induviae': ['induviae', 'viduinae'],\n 'induvial': ['diluvian', 'induvial'],\n 'inearth': ['anither', 'inearth', 'naither'],\n 'inelastic': ['elasticin', 'inelastic', 'sciential'],\n 'inelegant': ['eglantine', 'inelegant', 'legantine'],\n 'ineludible': ['ineludible', 'unelidible'],\n 'inept': ['inept', 'pinte'],\n 'inequity': ['equinity', 'inequity'],\n 'inerm': ['inerm', 'miner'],\n 'inermes': ['ermines', 'inermes'],\n 'inermia': ['imerina', 'inermia'],\n 'inermous': ['inermous', 'monsieur'],\n 'inert': ['inert', 'inter', 'niter', 'retin', 'trine'],\n 'inertance': ['inertance', 'nectarine'],\n 'inertial': ['inertial', 'linarite'],\n 'inertly': ['elytrin', 'inertly', 'trinely'],\n 'inethical': ['echinital', 'inethical'],\n 'ineunt': ['ineunt', 'untine'],\n 'inez': ['inez', 'zein'],\n 'inface': ['fiance', 'inface'],\n 'infame': ['famine', 'infame'],\n 'infamy': ['infamy', 'manify'],\n 'infarct': ['frantic', 'infarct', 'infract'],\n 'infarction': ['infarction', 'infraction'],\n 'infaust': ['faunist', 'fustian', 'infaust'],\n 'infecter': ['frenetic', 'infecter', 'reinfect'],\n 'infeed': ['define', 'infeed'],\n 'infelt': ['finlet', 'infelt'],\n 'infer': ['finer', 'infer'],\n 'inferable': ['inferable', 'refinable'],\n 'infern': ['finner', 'infern'],\n 'inferoanterior': ['anteroinferior', 'inferoanterior'],\n 'inferoposterior': ['inferoposterior', 'posteroinferior'],\n 'infestation': ['festination', 'infestation', 'sinfonietta'],\n 'infester': ['infester', 'reinfest'],\n 'infidel': ['infidel', 'infield'],\n 'infield': ['infidel', 'infield'],\n 'inflame': ['feminal', 'inflame'],\n 'inflamed': ['fieldman', 'inflamed'],\n 'inflamer': ['inflamer', 'rifleman'],\n 'inflatus': ['inflatus', 'stainful'],\n 'inflicter': ['inflicter', 'reinflict'],\n 'inform': ['formin', 'inform'],\n 'informal': ['formalin', 'informal', 'laniform'],\n 'informer': ['informer', 'reinform', 'reniform'],\n 'infra': ['infra', 'irfan'],\n 'infract': ['frantic', 'infarct', 'infract'],\n 'infraction': ['infarction', 'infraction'],\n 'infringe': ['infringe', 'refining'],\n 'ing': ['gin', 'ing', 'nig'],\n 'inga': ['gain', 'inga', 'naig', 'ngai'],\n 'ingaevones': ['avignonese', 'ingaevones'],\n 'ingate': ['eating', 'ingate', 'tangie'],\n 'ingather': ['hearting', 'ingather'],\n 'ingenue': ['genuine', 'ingenue'],\n 'ingenuous': ['ingenuous', 'unigenous'],\n 'inger': ['grein', 'inger', 'nigre', 'regin', 'reign', 'ringe'],\n 'ingest': ['ingest', 'signet', 'stinge'],\n 'ingesta': ['easting',\n             'gainset',\n             'genista',\n             'ingesta',\n             'seating',\n             'signate',\n             'teasing'],\n 'ingle': ['ingle', 'ligne', 'linge', 'nigel'],\n 'inglobe': ['gobelin', 'gobline', 'ignoble', 'inglobe'],\n 'ingomar': ['ingomar', 'moringa', 'roaming'],\n 'ingram': ['arming', 'ingram', 'margin'],\n 'ingrate': ['angrite', 'granite', 'ingrate', 'tangier', 'tearing', 'tigrean'],\n 'ingrow': ['ingrow', 'rowing'],\n 'ingrowth': ['ingrowth', 'throwing'],\n 'inguinal': ['inguinal', 'unailing'],\n 'inguinocrural': ['cruroinguinal', 'inguinocrural'],\n 'inhabiter': ['inhabiter', 'reinhabit'],\n 'inhaler': ['hernial', 'inhaler'],\n 'inhauler': ['herulian', 'inhauler'],\n 'inhaust': ['auntish', 'inhaust'],\n 'inhere': ['herein', 'inhere'],\n 'inhumer': ['inhumer', 'rhenium'],\n 'inial': ['ilian', 'inial'],\n 'ink': ['ink', 'kin'],\n 'inkle': ['inkle', 'liken'],\n 'inkless': ['inkless', 'kinless'],\n 'inkling': ['inkling', 'linking'],\n 'inknot': ['inknot', 'tonkin'],\n 'inkra': ['inkra', 'krina', 'nakir', 'rinka'],\n 'inks': ['inks', 'sink', 'skin'],\n 'inlaid': ['anilid', 'dialin', 'dianil', 'inlaid'],\n 'inlake': ['alkine', 'ilkane', 'inlake', 'inleak'],\n 'inlaut': ['inlaut', 'unital'],\n 'inlaw': ['inlaw', 'liwan'],\n 'inlay': ['inlay', 'naily'],\n 'inlayer': ['inlayer', 'nailery'],\n 'inleak': ['alkine', 'ilkane', 'inlake', 'inleak'],\n 'inlet': ['inlet', 'linet'],\n 'inlook': ['inlook', 'koilon'],\n 'inly': ['inly', 'liny'],\n 'inmate': ['etamin', 'inmate', 'taimen', 'tamein'],\n 'inmeats': ['atenism', 'inmeats', 'insteam', 'samnite'],\n 'inmost': ['inmost', 'monist', 'omnist'],\n 'innate': ['annite', 'innate', 'tinean'],\n 'innative': ['innative', 'invinate'],\n 'innatural': ['innatural', 'triannual'],\n 'inner': ['inner', 'renin'],\n 'innerve': ['innerve', 'nervine', 'vernine'],\n 'innest': ['innest', 'sennit', 'sinnet', 'tennis'],\n 'innet': ['innet', 'tinne'],\n 'innominata': ['antinomian', 'innominata'],\n 'innovate': ['innovate', 'venation'],\n 'innovationist': ['innovationist', 'nonvisitation'],\n 'ino': ['ino', 'ion'],\n 'inobtainable': ['inobtainable', 'nonbilabiate'],\n 'inocarpus': ['inocarpus', 'unprosaic'],\n 'inoculant': ['continual', 'inoculant', 'unctional'],\n 'inocystoma': ['actomyosin', 'inocystoma'],\n 'inodes': ['deinos', 'donsie', 'inodes', 'onside'],\n 'inogen': ['genion', 'inogen'],\n 'inoma': ['amino', 'inoma', 'naomi', 'omani', 'omina'],\n 'inomyxoma': ['inomyxoma', 'myxoinoma'],\n 'inone': ['inone', 'oenin'],\n 'inoperculata': ['inoperculata', 'precautional'],\n 'inorb': ['biron', 'inorb', 'robin'],\n 'inorganic': ['conringia', 'inorganic'],\n 'inorganical': ['carolingian', 'inorganical'],\n 'inornate': ['anointer', 'inornate', 'nonirate', 'reanoint'],\n 'inosic': ['inosic', 'sinico'],\n 'inosinic': ['incision', 'inosinic'],\n 'inosite': ['inosite', 'sionite'],\n 'inphase': ['inphase', 'phineas'],\n 'inpush': ['inpush', 'punish', 'unship'],\n 'input': ['input', 'punti'],\n 'inquiet': ['inquiet', 'quinite'],\n 'inreality': ['inreality', 'linearity'],\n 'inro': ['inro', 'iron', 'noir', 'nori'],\n 'inroad': ['dorian', 'inroad', 'ordain'],\n 'inroader': ['inroader', 'ordainer', 'reordain'],\n 'inrub': ['bruin', 'burin', 'inrub'],\n 'inrun': ['inrun', 'inurn'],\n 'insane': ['insane', 'sienna'],\n 'insatiably': ['insatiably', 'sanability'],\n 'inscenation': ['incensation', 'inscenation'],\n 'inscient': ['inscient', 'nicenist'],\n 'insculp': ['insculp', 'sculpin'],\n 'insea': ['anise', 'insea', 'siena', 'sinae'],\n 'inseam': ['asimen', 'inseam', 'mesian'],\n 'insect': ['encist', 'incest', 'insect', 'scient'],\n 'insectan': ['insectan', 'instance'],\n 'insectile': ['insectile', 'selenitic'],\n 'insectivora': ['insectivora', 'visceration'],\n 'insecure': ['insecure', 'sinecure'],\n 'insee': ['insee', 'seine'],\n 'inseer': ['inseer', 'nereis', 'seiner', 'serine', 'sirene'],\n 'insert': ['estrin', 'insert', 'sinter', 'sterin', 'triens'],\n 'inserted': ['indesert', 'inserted', 'resident'],\n 'inserter': ['inserter', 'reinsert'],\n 'insessor': ['insessor', 'rosiness'],\n 'inset': ['inset', 'neist', 'snite', 'stein', 'stine', 'tsine'],\n 'insetter': ['insetter', 'interest', 'interset', 'sternite'],\n 'inshave': ['evanish', 'inshave'],\n 'inshoot': ['inshoot', 'insooth'],\n 'inside': ['indies', 'inside'],\n 'insider': ['insider', 'siderin'],\n 'insistent': ['insistent', 'tintiness'],\n 'insister': ['insister', 'reinsist', 'sinister', 'sisterin'],\n 'insole': ['insole', 'leonis', 'lesion', 'selion'],\n 'insomnia': ['insomnia', 'simonian'],\n 'insomniac': ['aniconism', 'insomniac'],\n 'insooth': ['inshoot', 'insooth'],\n 'insorb': ['insorb', 'sorbin'],\n 'insoul': ['insoul', 'linous', 'nilous', 'unsoil'],\n 'inspection': ['cispontine', 'inspection'],\n 'inspiriter': ['inspiriter', 'reinspirit'],\n 'inspissate': ['antisepsis', 'inspissate'],\n 'inspreith': ['inspreith', 'nephritis', 'phrenitis'],\n 'installer': ['installer', 'reinstall'],\n 'instance': ['insectan', 'instance'],\n 'instanter': ['instanter', 'transient'],\n 'instar': ['instar', 'santir', 'strain'],\n 'instate': ['atenist', 'instate', 'satient', 'steatin'],\n 'instead': ['destain', 'instead', 'sainted', 'satined'],\n 'insteam': ['atenism', 'inmeats', 'insteam', 'samnite'],\n 'instep': ['instep', 'spinet'],\n 'instiller': ['instiller', 'reinstill'],\n 'instructer': ['instructer', 'intercrust', 'reinstruct'],\n 'instructional': ['instructional', 'nonaltruistic'],\n 'insula': ['insula', 'lanius', 'lusian'],\n 'insulant': ['insulant', 'sultanin'],\n 'insulse': ['insulse', 'silenus'],\n 'insult': ['insult', 'sunlit', 'unlist', 'unslit'],\n 'insulter': ['insulter', 'lustrine', 'reinsult'],\n 'insunk': ['insunk', 'unskin'],\n 'insurable': ['insurable', 'sublinear'],\n 'insurance': ['insurance', 'nuisancer'],\n 'insurant': ['insurant', 'unstrain'],\n 'insure': ['insure', 'rusine', 'ursine'],\n 'insurge': ['insurge', 'resuing'],\n 'insurgent': ['insurgent', 'unresting'],\n 'intactile': ['catlinite', 'intactile'],\n 'intaglio': ['intaglio', 'ligation'],\n 'intake': ['intake', 'kentia'],\n 'intaker': ['intaker', 'katrine', 'keratin'],\n 'intarsia': ['antiaris', 'intarsia'],\n 'intarsiate': ['intarsiate', 'nestiatria'],\n 'integral': ['integral', 'teraglin', 'triangle'],\n 'integralize': ['gelatinizer', 'integralize'],\n 'integrate': ['argentite', 'integrate'],\n 'integrative': ['integrative', 'vertiginate', 'vinaigrette'],\n 'integrious': ['grisounite', 'grisoutine', 'integrious'],\n 'intemperable': ['impenetrable', 'intemperable'],\n 'intemperably': ['impenetrably', 'intemperably'],\n 'intemperate': ['impenetrate', 'intemperate'],\n 'intemporal': ['intemporal', 'trampoline'],\n 'intend': ['dentin', 'indent', 'intend', 'tinned'],\n 'intended': ['indented', 'intended'],\n 'intendedly': ['indentedly', 'intendedly'],\n 'intender': ['indenter', 'intender', 'reintend'],\n 'intendment': ['indentment', 'intendment'],\n 'intense': ['intense', 'sennite'],\n 'intent': ['intent', 'tinnet'],\n 'intently': ['intently', 'nitently'],\n 'inter': ['inert', 'inter', 'niter', 'retin', 'trine'],\n 'interactional': ['interactional', 'intercalation'],\n 'interagent': ['entreating', 'interagent'],\n 'interally': ['interally', 'reliantly'],\n 'interastral': ['interastral', 'intertarsal'],\n 'intercalation': ['interactional', 'intercalation'],\n 'intercale': ['intercale', 'interlace', 'lacertine', 'reclinate'],\n 'intercede': ['intercede', 'tridecene'],\n 'interceder': ['crednerite', 'interceder'],\n 'intercession': ['intercession', 'recensionist'],\n 'intercome': ['entomeric', 'intercome', 'morencite'],\n 'interconal': ['interconal', 'nonrecital'],\n 'intercrust': ['instructer', 'intercrust', 'reinstruct'],\n 'interdome': ['interdome', 'mordenite', 'nemertoid'],\n 'intereat': ['intereat', 'tinetare'],\n 'interest': ['insetter', 'interest', 'interset', 'sternite'],\n 'interester': ['interester', 'reinterest'],\n 'interfering': ['interfering', 'interfinger'],\n 'interfinger': ['interfering', 'interfinger'],\n 'intergrade': ['gradienter', 'intergrade'],\n 'interim': ['interim', 'termini'],\n 'interimistic': ['interimistic', 'trimesitinic'],\n 'interlace': ['intercale', 'interlace', 'lacertine', 'reclinate'],\n 'interlaced': ['credential', 'interlaced', 'reclinated'],\n 'interlaid': ['deliriant', 'draintile', 'interlaid'],\n 'interlap': ['interlap', 'repliant', 'triplane'],\n 'interlapse': ['alpestrine', 'episternal', 'interlapse', 'presential'],\n 'interlay': ['interlay', 'lyterian'],\n 'interleaf': ['interleaf', 'reinflate'],\n 'interleaver': ['interleaver', 'reverential'],\n 'interlocal': ['citronella', 'interlocal'],\n 'interlope': ['interlope', 'interpole', 'repletion', 'terpineol'],\n 'interlot': ['interlot', 'trotline'],\n 'intermat': ['intermat', 'martinet', 'tetramin'],\n 'intermatch': ['intermatch', 'thermantic'],\n 'intermine': ['intermine', 'nemertini', 'terminine'],\n 'intermorainic': ['intermorainic', 'recrimination'],\n 'intermutual': ['intermutual', 'ultraminute'],\n 'intern': ['intern', 'tinner'],\n 'internality': ['internality', 'itinerantly'],\n 'internecive': ['internecive', 'reincentive'],\n 'internee': ['internee', 'retinene'],\n 'interoceptor': ['interoceptor', 'reprotection'],\n 'interpause': ['interpause', 'resupinate'],\n 'interpave': ['interpave', 'prenative'],\n 'interpeal': ['interpeal', 'interplea'],\n 'interpellate': ['interpellate', 'pantellerite'],\n 'interpellation': ['interpellation', 'interpollinate'],\n 'interphone': ['interphone', 'pinnothere'],\n 'interplay': ['interplay', 'painterly'],\n 'interplea': ['interpeal', 'interplea'],\n 'interplead': ['interplead', 'peridental'],\n 'interpolar': ['interpolar', 'reniportal'],\n 'interpolate': ['interpolate', 'triantelope'],\n 'interpole': ['interlope', 'interpole', 'repletion', 'terpineol'],\n 'interpollinate': ['interpellation', 'interpollinate'],\n 'interpone': ['interpone', 'peritenon', 'pinnotere', 'preintone'],\n 'interposal': ['interposal', 'psalterion'],\n 'interposure': ['interposure', 'neuropteris'],\n 'interpreter': ['interpreter', 'reinterpret'],\n 'interproduce': ['interproduce', 'prereduction'],\n 'interroom': ['interroom', 'remontoir'],\n 'interrupter': ['interrupter', 'reinterrupt'],\n 'intersale': ['intersale', 'larsenite'],\n 'intersectional': ['intersectional', 'intraselection'],\n 'interset': ['insetter', 'interest', 'interset', 'sternite'],\n 'intershade': ['dishearten', 'intershade'],\n 'intersituate': ['intersituate', 'tenuistriate'],\n 'intersocial': ['intersocial', 'orleanistic', 'sclerotinia'],\n 'interspace': ['esperantic', 'interspace'],\n 'interspecific': ['interspecific', 'prescientific'],\n 'interspiration': ['interspiration', 'repristination'],\n 'intersporal': ['intersporal', 'tripersonal'],\n 'interstation': ['interstation', 'strontianite'],\n 'intertalk': ['intertalk', 'latterkin'],\n 'intertarsal': ['interastral', 'intertarsal'],\n 'interteam': ['antimeter', 'attermine', 'interteam', 'terminate', 'tetramine'],\n 'intertie': ['intertie', 'retinite'],\n 'intertone': ['intertone', 'retention'],\n 'intervascular': ['intervascular', 'vernacularist'],\n 'intervention': ['intervention', 'introvenient'],\n 'interverbal': ['interverbal', 'invertebral'],\n 'interviewer': ['interviewer', 'reinterview'],\n 'interwed': ['interwed', 'wintered'],\n 'interwish': ['interwish', 'winterish'],\n 'interwork': ['interwork', 'tinworker'],\n 'interwove': ['interwove', 'overtwine'],\n 'intestate': ['enstatite', 'intestate', 'satinette'],\n 'intestinovesical': ['intestinovesical', 'vesicointestinal'],\n 'inthrong': ['inthrong', 'northing'],\n 'intima': ['intima', 'timani'],\n 'intimacy': ['imitancy', 'intimacy', 'minacity'],\n 'intimater': ['intimater', 'traintime'],\n 'into': ['into', 'nito', 'oint', 'tino'],\n 'intoed': ['ditone', 'intoed'],\n 'intolerance': ['crenelation', 'intolerance'],\n 'intolerating': ['intolerating', 'nitrogelatin'],\n 'intonate': ['intonate', 'totanine'],\n 'intonator': ['intonator', 'tortonian'],\n 'intone': ['intone', 'tenino'],\n 'intonement': ['intonement', 'omnitenent'],\n 'intoner': ['intoner', 'ternion'],\n 'intort': ['intort', 'tornit', 'triton'],\n 'intoxicate': ['excitation', 'intoxicate'],\n 'intracoelomic': ['iconometrical', 'intracoelomic'],\n 'intracosmic': ['intracosmic', 'narcoticism'],\n 'intracostal': ['intracostal', 'stratonical'],\n 'intractile': ['intractile', 'triclinate'],\n 'intrada': ['intrada', 'radiant'],\n 'intraselection': ['intersectional', 'intraselection'],\n 'intraseptal': ['intraseptal', 'paternalist', 'prenatalist'],\n 'intraspinal': ['intraspinal', 'pinnitarsal'],\n 'intreat': ['intreat', 'iterant', 'nitrate', 'tertian'],\n 'intrencher': ['intrencher', 'reintrench'],\n 'intricate': ['intricate', 'triactine'],\n 'intrication': ['citrination', 'intrication'],\n 'intrigue': ['intrigue', 'tigurine'],\n 'introconvertibility': ['incontrovertibility', 'introconvertibility'],\n 'introconvertible': ['incontrovertible', 'introconvertible'],\n 'introduce': ['introduce', 'reduction'],\n 'introit': ['introit', 'nitriot'],\n 'introitus': ['introitus', 'routinist'],\n 'introvenient': ['intervention', 'introvenient'],\n 'intrude': ['intrude', 'turdine', 'untired', 'untried'],\n 'intruse': ['intruse', 'sturine'],\n 'intrust': ['intrust', 'sturtin'],\n 'intube': ['butein', 'butine', 'intube'],\n 'intue': ['intue', 'unite', 'untie'],\n 'inula': ['inula', 'luian', 'uinal'],\n 'inurbane': ['eburnian', 'inurbane'],\n 'inure': ['inure', 'urine'],\n 'inured': ['diurne', 'inured', 'ruined', 'unride'],\n 'inurn': ['inrun', 'inurn'],\n 'inustion': ['inustion', 'unionist'],\n 'invader': ['invader', 'ravined', 'viander'],\n 'invaluable': ['invaluable', 'unvailable'],\n 'invar': ['invar', 'ravin', 'vanir'],\n 'invector': ['contrive', 'invector'],\n 'inveigler': ['inveigler', 'relieving'],\n 'inventer': ['inventer', 'reinvent', 'ventrine', 'vintener'],\n 'inventress': ['inventress', 'vintneress'],\n 'inverness': ['inverness', 'nerviness'],\n 'inversatile': ['inversatile', 'serviential'],\n 'inverse': ['inverse', 'versine'],\n 'invert': ['invert', 'virent'],\n 'invertase': ['invertase', 'servetian'],\n 'invertebral': ['interverbal', 'invertebral'],\n 'inverter': ['inverter', 'reinvert', 'trinerve'],\n 'investigation': ['investigation', 'tenovaginitis'],\n 'invinate': ['innative', 'invinate'],\n 'inviter': ['inviter', 'vitrine'],\n 'invocate': ['conative', 'invocate'],\n 'invoker': ['invoker', 'overink'],\n 'involucrate': ['countervail', 'involucrate'],\n 'involucre': ['involucre', 'volucrine'],\n 'inwards': ['inwards', 'sinward'],\n 'inwith': ['inwith', 'within'],\n 'iodate': ['idotea', 'iodate', 'otidae'],\n 'iodhydrate': ['hydriodate', 'iodhydrate'],\n 'iodhydric': ['hydriodic', 'iodhydric'],\n 'iodinate': ['ideation', 'iodinate', 'taenioid'],\n 'iodinium': ['iodinium', 'ionidium'],\n 'iodism': ['idoism', 'iodism'],\n 'iodite': ['iodite', 'teioid'],\n 'iodo': ['iodo', 'ooid'],\n 'iodocasein': ['iodocasein', 'oniscoidea'],\n 'iodochloride': ['chloroiodide', 'iodochloride'],\n 'iodohydric': ['hydroiodic', 'iodohydric'],\n 'iodol': ['dooli', 'iodol'],\n 'iodothyrin': ['iodothyrin', 'thyroiodin'],\n 'iodous': ['iodous', 'odious'],\n 'ion': ['ino', 'ion'],\n 'ionidium': ['iodinium', 'ionidium'],\n 'ionizer': ['ionizer', 'ironize'],\n 'iota': ['iota', 'tiao'],\n 'iotacist': ['iotacist', 'taoistic'],\n 'ipecac': ['icecap', 'ipecac'],\n 'ipil': ['ipil', 'pili'],\n 'ipseand': ['ipseand', 'panside', 'pansied'],\n 'ira': ['air', 'ira', 'ria'],\n 'iracund': ['candiru', 'iracund'],\n 'irade': ['aider', 'deair', 'irade', 'redia'],\n 'iran': ['arni', 'iran', 'nair', 'rain', 'rani'],\n 'irani': ['irani', 'irian'],\n 'iranism': ['iranism', 'sirmian'],\n 'iranist': ['iranist', 'istrian'],\n 'irascent': ['canister', 'cestrian', 'cisterna', 'irascent'],\n 'irate': ['arite', 'artie', 'irate', 'retia', 'tarie'],\n 'irately': ['irately', 'reality'],\n 'ire': ['ire', 'rie'],\n 'irena': ['erian', 'irena', 'reina'],\n 'irene': ['ernie', 'ierne', 'irene'],\n 'irenic': ['irenic', 'ricine'],\n 'irenics': ['irenics', 'resinic', 'sericin', 'sirenic'],\n 'irenicum': ['irenicum', 'muricine'],\n 'iresine': ['iresine', 'iserine'],\n 'irfan': ['infra', 'irfan'],\n 'irgun': ['irgun', 'ruing', 'unrig'],\n 'irian': ['irani', 'irian'],\n 'iridal': ['iridal', 'lariid'],\n 'iridate': ['arietid', 'iridate'],\n 'iridectomy': ['iridectomy', 'mediocrity'],\n 'irides': ['irides', 'irised'],\n 'iridescent': ['indiscreet', 'indiscrete', 'iridescent'],\n 'iridescently': ['indiscreetly', 'indiscretely', 'iridescently'],\n 'iridosmium': ['iridosmium', 'osmiridium'],\n 'irised': ['irides', 'irised'],\n 'irish': ['irish', 'rishi', 'sirih'],\n 'irk': ['irk', 'rik'],\n 'irma': ['amir', 'irma', 'mari', 'mira', 'rami', 'rima'],\n 'iroha': ['haori', 'iroha'],\n 'irok': ['irok', 'kori'],\n 'iron': ['inro', 'iron', 'noir', 'nori'],\n 'ironclad': ['ironclad', 'rolandic'],\n 'irone': ['irone', 'norie'],\n 'ironhead': ['herodian', 'ironhead'],\n 'ironice': ['ironice', 'oneiric'],\n 'ironize': ['ionizer', 'ironize'],\n 'ironshod': ['dishonor', 'ironshod'],\n 'ironside': ['derision', 'ironside', 'resinoid', 'sirenoid'],\n 'irradiant': ['irradiant', 'triandria'],\n 'irrationable': ['irrationable', 'orbitelarian'],\n 'irredenta': ['irredenta', 'retainder'],\n 'irrelate': ['irrelate', 'retailer'],\n 'irrepentance': ['irrepentance', 'pretercanine'],\n 'irving': ['irving', 'riving', 'virgin'],\n 'irvingiana': ['irvingiana', 'viraginian'],\n 'is': ['is', 'si'],\n 'isabel': ['isabel', 'lesbia'],\n 'isabella': ['isabella', 'sailable'],\n 'isagogical': ['isagogical', 'sialagogic'],\n 'isagon': ['gosain', 'isagon', 'sagoin'],\n 'isander': ['andries', 'isander', 'sardine'],\n 'isanthous': ['anhistous', 'isanthous'],\n 'isatate': ['isatate', 'satiate', 'taetsia'],\n 'isatic': ['isatic', 'saitic'],\n 'isatin': ['antisi', 'isatin'],\n 'isatinic': ['isatinic', 'sinaitic'],\n 'isaurian': ['anisuria', 'isaurian'],\n 'isawa': ['isawa', 'waasi'],\n 'isba': ['absi', 'bais', 'bias', 'isba'],\n 'iscariot': ['aoristic', 'iscariot'],\n 'ischemia': ['hemiasci', 'ischemia'],\n 'ischioiliac': ['ilioischiac', 'ischioiliac'],\n 'ischiorectal': ['ischiorectal', 'sciotherical'],\n 'iserine': ['iresine', 'iserine'],\n 'iseum': ['iseum', 'musie'],\n 'isiac': ['ascii', 'isiac'],\n 'isidore': ['isidore', 'osiride'],\n 'isis': ['isis', 'sisi'],\n 'islam': ['islam', 'ismal', 'simal'],\n 'islamic': ['islamic', 'laicism', 'silicam'],\n 'islamitic': ['islamitic', 'italicism'],\n 'islandy': ['islandy', 'lindsay'],\n 'islay': ['islay', 'saily'],\n 'isle': ['isle', 'lise', 'sile'],\n 'islet': ['islet', 'istle', 'slite', 'stile'],\n 'isleta': ['isleta', 'litsea', 'salite', 'stelai'],\n 'isleted': ['idleset', 'isleted'],\n 'ism': ['ism', 'sim'],\n 'ismal': ['islam', 'ismal', 'simal'],\n 'ismatic': ['ismatic', 'itacism'],\n 'ismatical': ['ismatical', 'lamaistic'],\n 'isocamphor': ['chromopsia', 'isocamphor'],\n 'isoclinal': ['collinsia', 'isoclinal'],\n 'isocline': ['isocline', 'silicone'],\n 'isocoumarin': ['acrimonious', 'isocoumarin'],\n 'isodulcite': ['isodulcite', 'solicitude'],\n 'isogen': ['geison', 'isogen'],\n 'isogeotherm': ['geoisotherm', 'isogeotherm'],\n 'isogon': ['isogon', 'songoi'],\n 'isogram': ['isogram', 'orgiasm'],\n 'isohel': ['helios', 'isohel'],\n 'isoheptane': ['apothesine', 'isoheptane'],\n 'isolate': ['aeolist', 'isolate'],\n 'isolated': ['diastole', 'isolated', 'sodalite', 'solidate'],\n 'isolative': ['isolative', 'soliative'],\n 'isolde': ['isolde', 'soiled'],\n 'isomer': ['isomer', 'rimose'],\n 'isometric': ['eroticism', 'isometric', 'meroistic', 'trioecism'],\n 'isomorph': ['isomorph', 'moorship'],\n 'isonitrile': ['isonitrile', 'resilition'],\n 'isonym': ['isonym', 'myosin', 'simony'],\n 'isophthalyl': ['isophthalyl', 'lithophysal'],\n 'isopodan': ['anisopod', 'isopodan'],\n 'isoptera': ['isoptera', 'septoria'],\n 'isosaccharic': ['isosaccharic', 'sacroischiac'],\n 'isostere': ['erotesis', 'isostere'],\n 'isotac': ['isotac', 'scotia'],\n 'isotheral': ['horsetail', 'isotheral'],\n 'isotherm': ['homerist', 'isotherm', 'otherism', 'theorism'],\n 'isotria': ['isotria', 'oaritis'],\n 'isotron': ['isotron', 'torsion'],\n 'isotrope': ['isotrope', 'portoise'],\n 'isotropism': ['isotropism', 'promitosis'],\n 'isotropy': ['isotropy', 'porosity'],\n 'israel': ['israel', 'relais', 'resail', 'sailer', 'serail', 'serial'],\n 'israeli': ['alisier', 'israeli'],\n 'israelite': ['israelite', 'resiliate'],\n 'issuable': ['basileus', 'issuable', 'suasible'],\n 'issuant': ['issuant', 'sustain'],\n 'issue': ['issue', 'susie'],\n 'issuer': ['issuer', 'uresis'],\n 'ist': ['ist', 'its', 'sit'],\n 'isthmi': ['isthmi', 'timish'],\n 'isthmian': ['isthmian', 'smithian'],\n 'isthmoid': ['isthmoid', 'thomisid'],\n 'istle': ['islet', 'istle', 'slite', 'stile'],\n 'istrian': ['iranist', 'istrian'],\n 'isuret': ['isuret', 'resuit'],\n 'it': ['it', 'ti'],\n 'ita': ['ait', 'ati', 'ita', 'tai'],\n 'itacism': ['ismatic', 'itacism'],\n 'itaconate': ['acetation', 'itaconate'],\n 'itaconic': ['aconitic', 'cationic', 'itaconic'],\n 'itali': ['itali', 'tilia'],\n 'italian': ['antilia', 'italian'],\n 'italic': ['clitia', 'italic'],\n 'italicism': ['islamitic', 'italicism'],\n 'italite': ['italite', 'letitia', 'tilaite'],\n 'italon': ['italon', 'lation', 'talion'],\n 'itaves': ['itaves', 'stevia'],\n 'itch': ['chit', 'itch', 'tchi'],\n 'item': ['emit', 'item', 'mite', 'time'],\n 'iten': ['iten', 'neti', 'tien', 'tine'],\n 'itenean': ['aniente', 'itenean'],\n 'iter': ['iter', 'reit', 'rite', 'teri', 'tier', 'tire'],\n 'iterable': ['iterable', 'liberate'],\n 'iterance': ['aneretic', 'centiare', 'creatine', 'increate', 'iterance'],\n 'iterant': ['intreat', 'iterant', 'nitrate', 'tertian'],\n 'ithaca': ['cahita', 'ithaca'],\n 'ithacan': ['ithacan', 'tachina'],\n 'ither': ['ither', 'their'],\n 'itinerant': ['itinerant', 'nitratine'],\n 'itinerantly': ['internality', 'itinerantly'],\n 'itmo': ['itmo', 'moit', 'omit', 'timo'],\n 'ito': ['ito', 'toi'],\n 'itoism': ['itoism', 'omitis'],\n 'itoist': ['itoist', 'otitis'],\n 'itoland': ['itoland', 'talonid', 'tindalo'],\n 'itonama': ['amniota', 'itonama'],\n 'itonia': ['aition', 'itonia'],\n 'its': ['ist', 'its', 'sit'],\n 'itself': ['itself', 'stifle'],\n 'ituraean': ['inaurate', 'ituraean'],\n 'itza': ['itza', 'tiza', 'zati'],\n 'iva': ['iva', 'vai', 'via'],\n 'ivan': ['ivan', 'vain', 'vina'],\n 'ivorist': ['ivorist', 'visitor'],\n 'iwaiwa': ['iwaiwa', 'waiwai'],\n 'ixiama': ['amixia', 'ixiama'],\n 'ixodic': ['ixodic', 'oxidic'],\n 'iyo': ['iyo', 'yoi'],\n 'izar': ['izar', 'zira'],\n 'jacami': ['jacami', 'jicama'],\n 'jacobian': ['bajocian', 'jacobian'],\n 'jag': ['gaj', 'jag'],\n 'jagir': ['jagir', 'jirga'],\n 'jagua': ['ajuga', 'jagua'],\n 'jail': ['jail', 'lija'],\n 'jailer': ['jailer', 'rejail'],\n 'jaime': ['jaime', 'jamie'],\n 'jain': ['jain', 'jina'],\n 'jaina': ['inaja', 'jaina'],\n 'jalouse': ['jalouse', 'jealous'],\n 'jama': ['jama', 'maja'],\n 'jamesian': ['jamesian', 'jamesina'],\n 'jamesina': ['jamesian', 'jamesina'],\n 'jami': ['ijma', 'jami'],\n 'jamie': ['jaime', 'jamie'],\n 'jane': ['jane', 'jean'],\n 'janos': ['janos', 'jason', 'jonas', 'sonja'],\n 'jantu': ['jantu', 'jaunt', 'junta'],\n 'januslike': ['januslike', 'seljukian'],\n 'japonism': ['japonism', 'pajonism'],\n 'jar': ['jar', 'raj'],\n 'jara': ['ajar', 'jara', 'raja'],\n 'jarmo': ['jarmo', 'major'],\n 'jarnut': ['jarnut', 'jurant'],\n 'jason': ['janos', 'jason', 'jonas', 'sonja'],\n 'jat': ['jat', 'taj'],\n 'jatki': ['jatki', 'tajik'],\n 'jato': ['jato', 'jota'],\n 'jaun': ['jaun', 'juan'],\n 'jaunt': ['jantu', 'jaunt', 'junta'],\n 'jaup': ['jaup', 'puja'],\n 'jealous': ['jalouse', 'jealous'],\n 'jean': ['jane', 'jean'],\n 'jebusitical': ['jebusitical', 'justiciable'],\n 'jecoral': ['cajoler', 'jecoral'],\n 'jeffery': ['jeffery', 'jeffrey'],\n 'jeffrey': ['jeffery', 'jeffrey'],\n 'jejunoduodenal': ['duodenojejunal', 'jejunoduodenal'],\n 'jenine': ['jenine', 'jennie'],\n 'jennie': ['jenine', 'jennie'],\n 'jerker': ['jerker', 'rejerk'],\n 'jerkin': ['jerkin', 'jinker'],\n 'jeziah': ['hejazi', 'jeziah'],\n 'jicama': ['jacami', 'jicama'],\n 'jihad': ['hadji', 'jihad'],\n 'jina': ['jain', 'jina'],\n 'jingoist': ['jingoist', 'joisting'],\n 'jinker': ['jerkin', 'jinker'],\n 'jirga': ['jagir', 'jirga'],\n 'jobo': ['bojo', 'jobo'],\n 'johan': ['johan', 'jonah'],\n 'join': ['join', 'joni'],\n 'joinant': ['joinant', 'jotnian'],\n 'joiner': ['joiner', 'rejoin'],\n 'jointless': ['jointless', 'joltiness'],\n 'joisting': ['jingoist', 'joisting'],\n 'jolter': ['jolter', 'rejolt'],\n 'joltiness': ['jointless', 'joltiness'],\n 'jonah': ['johan', 'jonah'],\n 'jonas': ['janos', 'jason', 'jonas', 'sonja'],\n 'joni': ['join', 'joni'],\n 'joom': ['joom', 'mojo'],\n 'joshi': ['joshi', 'shoji'],\n 'jota': ['jato', 'jota'],\n 'jotnian': ['joinant', 'jotnian'],\n 'journeyer': ['journeyer', 'rejourney'],\n 'joust': ['joust', 'justo'],\n 'juan': ['jaun', 'juan'],\n 'judaic': ['judaic', 'judica'],\n 'judica': ['judaic', 'judica'],\n 'jujitsu': ['jujitsu', 'jujuist'],\n 'jujuist': ['jujitsu', 'jujuist'],\n 'junta': ['jantu', 'jaunt', 'junta'],\n 'jurant': ['jarnut', 'jurant'],\n 'justiciable': ['jebusitical', 'justiciable'],\n 'justo': ['joust', 'justo'],\n 'jute': ['jute', 'teju'],\n 'ka': ['ak', 'ka'],\n 'kabel': ['blake', 'bleak', 'kabel'],\n 'kaberu': ['kaberu', 'kubera'],\n 'kabuli': ['kabuli', 'kiluba'],\n 'kabyle': ['bleaky', 'kabyle'],\n 'kachari': ['chakari', 'chikara', 'kachari'],\n 'kachin': ['hackin', 'kachin'],\n 'kafir': ['fakir', 'fraik', 'kafir', 'rafik'],\n 'kaha': ['akha', 'kaha'],\n 'kahar': ['harka', 'kahar'],\n 'kahu': ['haku', 'kahu'],\n 'kaid': ['dika', 'kaid'],\n 'kaik': ['kaik', 'kaki'],\n 'kail': ['ilka', 'kail', 'kali'],\n 'kainga': ['kainga', 'kanagi'],\n 'kaiwi': ['kaiwi', 'kiwai'],\n 'kaka': ['akka', 'kaka'],\n 'kaki': ['kaik', 'kaki'],\n 'kala': ['akal', 'kala'],\n 'kalamian': ['kalamian', 'malikana'],\n 'kaldani': ['danakil', 'dankali', 'kaldani', 'ladakin'],\n 'kale': ['kale', 'lake', 'leak'],\n 'kali': ['ilka', 'kail', 'kali'],\n 'kalo': ['kalo', 'kola', 'loka'],\n 'kamansi': ['kamansi', 'kamasin'],\n 'kamares': ['kamares', 'seamark'],\n 'kamasin': ['kamansi', 'kamasin'],\n 'kame': ['kame', 'make', 'meak'],\n 'kamel': ['kamel', 'kemal'],\n 'kamiya': ['kamiya', 'yakima'],\n 'kan': ['kan', 'nak'],\n 'kana': ['akan', 'kana'],\n 'kanagi': ['kainga', 'kanagi'],\n 'kanap': ['kanap', 'panak'],\n 'kanat': ['kanat', 'tanak', 'tanka'],\n 'kande': ['kande', 'knead', 'naked'],\n 'kang': ['kang', 'knag'],\n 'kanga': ['angka', 'kanga'],\n 'kangani': ['kangani', 'kiangan'],\n 'kangli': ['kangli', 'laking'],\n 'kanred': ['darken', 'kanred', 'ranked'],\n 'kans': ['kans', 'sank'],\n 'kaolin': ['ankoli', 'kaolin'],\n 'karch': ['chark', 'karch'],\n 'karel': ['karel', 'laker'],\n 'karen': ['anker', 'karen', 'naker'],\n 'kari': ['ikra', 'kari', 'raki'],\n 'karite': ['arkite', 'karite'],\n 'karl': ['karl', 'kral', 'lark'],\n 'karling': ['karling', 'larking'],\n 'karma': ['karma', 'krama', 'marka'],\n 'karo': ['karo', 'kora', 'okra', 'roka'],\n 'karree': ['karree', 'rerake'],\n 'karst': ['karst', 'skart', 'stark'],\n 'karstenite': ['karstenite', 'kersantite'],\n 'kartel': ['kartel', 'retalk', 'talker'],\n 'kasa': ['asak', 'kasa', 'saka'],\n 'kasbah': ['abkhas', 'kasbah'],\n 'kasha': ['kasha', 'khasa', 'sakha', 'shaka'],\n 'kashan': ['kashan', 'sankha'],\n 'kasher': ['kasher', 'shaker'],\n 'kashi': ['kashi', 'khasi'],\n 'kasm': ['kasm', 'mask'],\n 'katar': ['katar', 'takar'],\n 'kate': ['kate', 'keta', 'take', 'teak'],\n 'kath': ['kath', 'khat'],\n 'katharsis': ['katharsis', 'shastraik'],\n 'katie': ['katie', 'keita'],\n 'katik': ['katik', 'tikka'],\n 'katrine': ['intaker', 'katrine', 'keratin'],\n 'katy': ['katy', 'kyat', 'taky'],\n 'kavass': ['kavass', 'vakass'],\n 'kavi': ['kavi', 'kiva'],\n 'kay': ['kay', 'yak'],\n 'kayak': ['kayak', 'yakka'],\n 'kayan': ['kayan', 'yakan'],\n 'kayo': ['kayo', 'oaky'],\n 'kea': ['ake', 'kea'],\n 'keach': ['cheka', 'keach'],\n 'keawe': ['aweek', 'keawe'],\n 'kechel': ['heckle', 'kechel'],\n 'kedar': ['daker', 'drake', 'kedar', 'radek'],\n 'kee': ['eke', 'kee'],\n 'keech': ['cheek', 'cheke', 'keech'],\n 'keel': ['keel', 'kele', 'leek'],\n 'keen': ['keen', 'knee'],\n 'keena': ['aknee', 'ankee', 'keena'],\n 'keep': ['keep', 'peek'],\n 'keepership': ['keepership', 'shipkeeper'],\n 'kees': ['kees', 'seek', 'skee'],\n 'keest': ['keest', 'skeet', 'skete', 'steek'],\n 'kefir': ['frike', 'kefir'],\n 'keid': ['dike', 'keid'],\n 'keita': ['katie', 'keita'],\n 'keith': ['keith', 'kithe'],\n 'keitloa': ['keitloa', 'oatlike'],\n 'kelchin': ['chinkle', 'kelchin'],\n 'kele': ['keel', 'kele', 'leek'],\n 'kelima': ['kelima', 'mikael'],\n 'kelpie': ['kelpie', 'pelike'],\n 'kelty': ['kelty', 'ketyl'],\n 'kemal': ['kamel', 'kemal'],\n 'kemalist': ['kemalist', 'mastlike'],\n 'kenareh': ['hearken', 'kenareh'],\n 'kennel': ['kennel', 'nelken'],\n 'kenotic': ['kenotic', 'ketonic'],\n 'kent': ['kent', 'knet'],\n 'kentia': ['intake', 'kentia'],\n 'kenton': ['kenton', 'nekton'],\n 'kepi': ['kepi', 'kipe', 'pike'],\n 'keralite': ['keralite', 'tearlike'],\n 'kerasin': ['kerasin', 'sarkine'],\n 'kerat': ['kerat', 'taker'],\n 'keratin': ['intaker', 'katrine', 'keratin'],\n 'keratoangioma': ['angiokeratoma', 'keratoangioma'],\n 'keratosis': ['asterikos', 'keratosis'],\n 'keres': ['esker', 'keres', 'reesk', 'seker', 'skeer', 'skere'],\n 'keresan': ['keresan', 'sneaker'],\n 'kerewa': ['kerewa', 'rewake'],\n 'kerf': ['ferk', 'kerf'],\n 'kern': ['kern', 'renk'],\n 'kersantite': ['karstenite', 'kersantite'],\n 'kersey': ['kersey', 'skeery'],\n 'kestrel': ['kestrel', 'skelter'],\n 'keta': ['kate', 'keta', 'take', 'teak'],\n 'ketene': ['ektene', 'ketene'],\n 'keto': ['keto', 'oket', 'toke'],\n 'ketol': ['ketol', 'loket'],\n 'ketonic': ['kenotic', 'ketonic'],\n 'ketu': ['ketu', 'teuk', 'tuke'],\n 'ketupa': ['ketupa', 'uptake'],\n 'ketyl': ['kelty', 'ketyl'],\n 'keup': ['keup', 'puke'],\n 'keuper': ['keuper', 'peruke'],\n 'kevan': ['kevan', 'knave'],\n 'kha': ['hak', 'kha'],\n 'khami': ['hakim', 'khami'],\n 'khan': ['ankh', 'hank', 'khan'],\n 'khar': ['hark', 'khar', 'rakh'],\n 'khasa': ['kasha', 'khasa', 'sakha', 'shaka'],\n 'khasi': ['kashi', 'khasi'],\n 'khat': ['kath', 'khat'],\n 'khatib': ['bhakti', 'khatib'],\n 'khila': ['khila', 'kilah'],\n 'khu': ['huk', 'khu'],\n 'khula': ['khula', 'kulah'],\n 'kiangan': ['kangani', 'kiangan'],\n 'kibe': ['bike', 'kibe'],\n 'kicker': ['kicker', 'rekick'],\n 'kickout': ['kickout', 'outkick'],\n 'kidney': ['dinkey', 'kidney'],\n 'kids': ['disk', 'kids', 'skid'],\n 'kiel': ['kiel', 'like'],\n 'kier': ['erik', 'kier', 'reki'],\n 'kiku': ['kiku', 'kuki'],\n 'kikumon': ['kikumon', 'kokumin'],\n 'kil': ['ilk', 'kil'],\n 'kilah': ['khila', 'kilah'],\n 'kiliare': ['airlike', 'kiliare'],\n 'killcalf': ['calfkill', 'killcalf'],\n 'killer': ['killer', 'rekill'],\n 'kiln': ['kiln', 'link'],\n 'kilnman': ['kilnman', 'linkman'],\n 'kilo': ['kilo', 'koil', 'koli'],\n 'kilp': ['kilp', 'klip'],\n 'kilter': ['kilter', 'kirtle'],\n 'kilting': ['kilting', 'kitling'],\n 'kiluba': ['kabuli', 'kiluba'],\n 'kimberlite': ['kimberlite', 'timberlike'],\n 'kimnel': ['kimnel', 'milken'],\n 'kin': ['ink', 'kin'],\n 'kina': ['akin', 'kina', 'naik'],\n 'kinase': ['kinase', 'sekani'],\n 'kinch': ['chink', 'kinch'],\n 'kind': ['dink', 'kind'],\n 'kindle': ['kindle', 'linked'],\n 'kinetomer': ['kinetomer', 'konimeter'],\n 'king': ['gink', 'king'],\n 'kingcob': ['bocking', 'kingcob'],\n 'kingpin': ['kingpin', 'pinking'],\n 'kingrow': ['kingrow', 'working'],\n 'kinless': ['inkless', 'kinless'],\n 'kinship': ['kinship', 'pinkish'],\n 'kioko': ['kioko', 'kokio'],\n 'kip': ['kip', 'pik'],\n 'kipe': ['kepi', 'kipe', 'pike'],\n 'kirk': ['kirk', 'rikk'],\n 'kirktown': ['kirktown', 'knitwork'],\n 'kirn': ['kirn', 'rink'],\n 'kirsten': ['kirsten', 'kristen', 'stinker'],\n 'kirsty': ['kirsty', 'skirty'],\n 'kirtle': ['kilter', 'kirtle'],\n 'kirve': ['kirve', 'kiver'],\n 'kish': ['kish', 'shik', 'sikh'],\n 'kishen': ['kishen', 'neskhi'],\n 'kisra': ['kisra', 'sikar', 'skair'],\n 'kissar': ['kissar', 'krasis'],\n 'kisser': ['kisser', 'rekiss'],\n 'kist': ['kist', 'skit'],\n 'kistful': ['kistful', 'lutfisk'],\n 'kitab': ['batik', 'kitab'],\n 'kitan': ['kitan', 'takin'],\n 'kitar': ['kitar', 'krait', 'rakit', 'traik'],\n 'kitchen': ['kitchen', 'thicken'],\n 'kitchener': ['kitchener', 'rethicken', 'thickener'],\n 'kithe': ['keith', 'kithe'],\n 'kitling': ['kilting', 'kitling'],\n 'kitlope': ['kitlope', 'potlike', 'toplike'],\n 'kittel': ['kittel', 'kittle'],\n 'kittle': ['kittel', 'kittle'],\n 'kittles': ['kittles', 'skittle'],\n 'kiva': ['kavi', 'kiva'],\n 'kiver': ['kirve', 'kiver'],\n 'kiwai': ['kaiwi', 'kiwai'],\n 'klan': ['klan', 'lank'],\n 'klanism': ['klanism', 'silkman'],\n 'klaus': ['klaus', 'lukas', 'sulka'],\n 'kleistian': ['kleistian', 'saintlike', 'satinlike'],\n 'klendusic': ['klendusic', 'unsickled'],\n 'kling': ['glink', 'kling'],\n 'klip': ['kilp', 'klip'],\n 'klop': ['klop', 'polk'],\n 'knab': ['bank', 'knab', 'nabk'],\n 'knag': ['kang', 'knag'],\n 'knap': ['knap', 'pank'],\n 'knape': ['knape', 'pekan'],\n 'knar': ['knar', 'kran', 'nark', 'rank'],\n 'knave': ['kevan', 'knave'],\n 'knawel': ['knawel', 'wankle'],\n 'knead': ['kande', 'knead', 'naked'],\n 'knee': ['keen', 'knee'],\n 'knet': ['kent', 'knet'],\n 'knit': ['knit', 'tink'],\n 'knitter': ['knitter', 'trinket'],\n 'knitwork': ['kirktown', 'knitwork'],\n 'knob': ['bonk', 'knob'],\n 'knot': ['knot', 'tonk'],\n 'knottiness': ['knottiness', 'stinkstone'],\n 'knower': ['knower', 'reknow', 'wroken'],\n 'knub': ['bunk', 'knub'],\n 'knurly': ['knurly', 'runkly'],\n 'knut': ['knut', 'tunk'],\n 'knute': ['knute', 'unket'],\n 'ko': ['ko', 'ok'],\n 'koa': ['ako', 'koa', 'oak', 'oka'],\n 'koali': ['koali', 'koila'],\n 'kobu': ['bouk', 'kobu'],\n 'koch': ['hock', 'koch'],\n 'kochia': ['choiak', 'kochia'],\n 'koel': ['koel', 'loke'],\n 'koi': ['koi', 'oki'],\n 'koil': ['kilo', 'koil', 'koli'],\n 'koila': ['koali', 'koila'],\n 'koilon': ['inlook', 'koilon'],\n 'kokan': ['kokan', 'konak'],\n 'kokio': ['kioko', 'kokio'],\n 'kokumin': ['kikumon', 'kokumin'],\n 'kola': ['kalo', 'kola', 'loka'],\n 'koli': ['kilo', 'koil', 'koli'],\n 'kolo': ['kolo', 'look'],\n 'kome': ['kome', 'moke'],\n 'komi': ['komi', 'moki'],\n 'kona': ['kona', 'nako'],\n 'konak': ['kokan', 'konak'],\n 'kongo': ['kongo', 'ngoko'],\n 'kongoni': ['kongoni', 'nooking'],\n 'konia': ['ikona', 'konia'],\n 'konimeter': ['kinetomer', 'konimeter'],\n 'kor': ['kor', 'rok'],\n 'kora': ['karo', 'kora', 'okra', 'roka'],\n 'korait': ['korait', 'troika'],\n 'koran': ['koran', 'krona'],\n 'korana': ['anorak', 'korana'],\n 'kore': ['kore', 'roke'],\n 'korec': ['coker', 'corke', 'korec'],\n 'korero': ['korero', 'rooker'],\n 'kori': ['irok', 'kori'],\n 'korimako': ['korimako', 'koromika'],\n 'koromika': ['korimako', 'koromika'],\n 'korwa': ['awork', 'korwa'],\n 'kory': ['kory', 'roky', 'york'],\n 'kos': ['kos', 'sok'],\n 'koso': ['koso', 'skoo', 'sook'],\n 'kotar': ['kotar', 'tarok'],\n 'koto': ['koto', 'toko', 'took'],\n 'kra': ['ark', 'kra'],\n 'krait': ['kitar', 'krait', 'rakit', 'traik'],\n 'kraken': ['kraken', 'nekkar'],\n 'kral': ['karl', 'kral', 'lark'],\n 'krama': ['karma', 'krama', 'marka'],\n 'kran': ['knar', 'kran', 'nark', 'rank'],\n 'kras': ['askr', 'kras', 'sark'],\n 'krasis': ['kissar', 'krasis'],\n 'kraut': ['kraut', 'tukra'],\n 'kreis': ['kreis', 'skier'],\n 'kreistle': ['kreistle', 'triskele'],\n 'krepi': ['krepi', 'piker'],\n 'krina': ['inkra', 'krina', 'nakir', 'rinka'],\n 'kris': ['kris', 'risk'],\n 'krishna': ['krishna', 'rankish'],\n 'kristen': ['kirsten', 'kristen', 'stinker'],\n 'krona': ['koran', 'krona'],\n 'krone': ['ekron', 'krone'],\n 'kroo': ['kroo', 'rook'],\n 'krosa': ['krosa', 'oskar'],\n 'kua': ['aku', 'auk', 'kua'],\n 'kuar': ['kuar', 'raku', 'rauk'],\n 'kuba': ['baku', 'kuba'],\n 'kubera': ['kaberu', 'kubera'],\n 'kuki': ['kiku', 'kuki'],\n 'kulah': ['khula', 'kulah'],\n 'kulimit': ['kulimit', 'tilikum'],\n 'kulm': ['kulm', 'mulk'],\n 'kuman': ['kuman', 'naumk'],\n 'kumhar': ['kumhar', 'kumrah'],\n 'kumrah': ['kumhar', 'kumrah'],\n 'kunai': ['kunai', 'nikau'],\n 'kuneste': ['kuneste', 'netsuke'],\n 'kung': ['gunk', 'kung'],\n 'kurmi': ['kurmi', 'mukri'],\n 'kurt': ['kurt', 'turk'],\n 'kurus': ['kurus', 'ursuk'],\n 'kusa': ['kusa', 'skua'],\n 'kusam': ['kusam', 'sumak'],\n 'kusan': ['ankus', 'kusan'],\n 'kusha': ['kusha', 'shaku', 'ushak'],\n 'kutchin': ['kutchin', 'unthick'],\n 'kutenai': ['kutenai', 'unakite'],\n 'kyar': ['kyar', 'yark'],\n 'kyat': ['katy', 'kyat', 'taky'],\n 'kyle': ['kyle', 'yelk'],\n 'kylo': ['kylo', 'yolk'],\n 'kyte': ['kyte', 'tyke'],\n 'la': ['al', 'la'],\n 'laager': ['aglare', 'alegar', 'galera', 'laager'],\n 'laang': ['laang', 'lagan', 'lagna'],\n 'lab': ['alb', 'bal', 'lab'],\n 'laban': ['alban', 'balan', 'banal', 'laban', 'nabal', 'nabla'],\n 'labber': ['barbel', 'labber', 'rabble'],\n 'labefact': ['factable', 'labefact'],\n 'label': ['bella', 'label'],\n 'labeler': ['labeler', 'relabel'],\n 'labia': ['balai', 'labia'],\n 'labial': ['abilla', 'labial'],\n 'labially': ['alliably', 'labially'],\n 'labiate': ['baalite', 'bialate', 'labiate'],\n 'labiella': ['alliable', 'labiella'],\n 'labile': ['alible', 'belial', 'labile', 'liable'],\n 'labiocervical': ['cervicolabial', 'labiocervical'],\n 'labiodental': ['dentolabial', 'labiodental'],\n 'labioglossal': ['glossolabial', 'labioglossal'],\n 'labioglossolaryngeal': ['glossolabiolaryngeal', 'labioglossolaryngeal'],\n 'labioglossopharyngeal': ['glossolabiopharyngeal', 'labioglossopharyngeal'],\n 'labiomental': ['labiomental', 'mentolabial'],\n 'labionasal': ['labionasal', 'nasolabial'],\n 'labiovelar': ['bialveolar', 'labiovelar'],\n 'labis': ['basil', 'labis'],\n 'labor': ['balor', 'bolar', 'boral', 'labor', 'lobar'],\n 'laborant': ['balatron', 'laborant'],\n 'laborism': ['laborism', 'mislabor'],\n 'laborist': ['laborist', 'strobila'],\n 'laborite': ['betailor', 'laborite', 'orbitale'],\n 'labrador': ['labrador', 'larboard'],\n 'labret': ['albert', 'balter', 'labret', 'tabler'],\n 'labridae': ['labridae', 'radiable'],\n 'labrose': ['borlase', 'labrose', 'rosabel'],\n 'labrum': ['brumal', 'labrum', 'lumbar', 'umbral'],\n 'labrus': ['bursal', 'labrus'],\n 'laburnum': ['alburnum', 'laburnum'],\n 'lac': ['cal', 'lac'],\n 'lace': ['acle', 'alec', 'lace'],\n 'laced': ['clead', 'decal', 'laced'],\n 'laceman': ['laceman', 'manacle'],\n 'lacepod': ['lacepod', 'pedocal', 'placode'],\n 'lacer': ['ceral', 'clare', 'clear', 'lacer'],\n 'lacerable': ['clearable', 'lacerable'],\n 'lacerate': ['lacerate', 'lacertae'],\n 'laceration': ['creational', 'crotalinae', 'laceration', 'reactional'],\n 'lacerative': ['calaverite', 'lacerative'],\n 'lacertae': ['lacerate', 'lacertae'],\n 'lacertian': ['carnalite', 'claretian', 'lacertian', 'nectarial'],\n 'lacertid': ['articled', 'lacertid'],\n 'lacertidae': ['dilacerate', 'lacertidae'],\n 'lacertiloid': ['illoricated', 'lacertiloid'],\n 'lacertine': ['intercale', 'interlace', 'lacertine', 'reclinate'],\n 'lacertoid': ['dialector', 'lacertoid'],\n 'lacery': ['clayer', 'lacery'],\n 'lacet': ['cleat', 'eclat', 'ectal', 'lacet', 'tecla'],\n 'lache': ['chela', 'lache', 'leach'],\n 'laches': ['cashel', 'laches', 'sealch'],\n 'lachrymonasal': ['lachrymonasal', 'nasolachrymal'],\n 'lachsa': ['calash', 'lachsa'],\n 'laciness': ['laciness', 'sensical'],\n 'lacing': ['anglic', 'lacing'],\n 'lacinia': ['lacinia', 'licania'],\n 'laciniated': ['acetanilid', 'laciniated', 'teniacidal'],\n 'lacis': ['lacis', 'salic'],\n 'lack': ['calk', 'lack'],\n 'lacker': ['calker', 'lacker', 'rackle', 'recalk', 'reckla'],\n 'lacmoid': ['domical', 'lacmoid'],\n 'laconic': ['conical', 'laconic'],\n 'laconica': ['canicola', 'laconica'],\n 'laconizer': ['laconizer', 'locarnize'],\n 'lacquer': ['claquer', 'lacquer'],\n 'lacquerer': ['lacquerer', 'relacquer'],\n 'lactarene': ['lactarene', 'nectareal'],\n 'lactarious': ['alacritous', 'lactarious', 'lactosuria'],\n 'lactarium': ['lactarium', 'matricula'],\n 'lactarius': ['australic', 'lactarius'],\n 'lacteal': ['catella', 'lacteal'],\n 'lacteous': ['lacteous', 'osculate'],\n 'lactide': ['citadel', 'deltaic', 'dialect', 'edictal', 'lactide'],\n 'lactinate': ['cantalite', 'lactinate', 'tetanical'],\n 'lacto': ['lacto', 'tlaco'],\n 'lactoid': ['cotidal', 'lactoid', 'talcoid'],\n 'lactoprotein': ['lactoprotein', 'protectional'],\n 'lactose': ['alecost', 'lactose', 'scotale', 'talcose'],\n 'lactoside': ['dislocate', 'lactoside'],\n 'lactosuria': ['alacritous', 'lactarious', 'lactosuria'],\n 'lacunal': ['calluna', 'lacunal'],\n 'lacune': ['auncel', 'cuneal', 'lacune', 'launce', 'unlace'],\n 'lacustral': ['claustral', 'lacustral'],\n 'lacwork': ['lacwork', 'warlock'],\n 'lacy': ['acyl', 'clay', 'lacy'],\n 'lad': ['dal', 'lad'],\n 'ladakin': ['danakil', 'dankali', 'kaldani', 'ladakin'],\n 'ladanum': ['ladanum', 'udalman'],\n 'ladder': ['ladder', 'raddle'],\n 'laddery': ['dreadly', 'laddery'],\n 'laddie': ['daidle', 'laddie'],\n 'lade': ['dale', 'deal', 'lade', 'lead', 'leda'],\n 'lademan': ['daleman', 'lademan', 'leadman'],\n 'laden': ['eland', 'laden', 'lenad'],\n 'lader': ['alder', 'daler', 'lader'],\n 'ladies': ['aisled', 'deasil', 'ladies', 'sailed'],\n 'ladin': ['danli', 'ladin', 'linda', 'nidal'],\n 'lading': ['angild', 'lading'],\n 'ladino': ['dolina', 'ladino'],\n 'ladle': ['dalle', 'della', 'ladle'],\n 'ladrone': ['endoral', 'ladrone', 'leonard'],\n 'ladyfy': ['dayfly', 'ladyfy'],\n 'ladyish': ['ladyish', 'shadily'],\n 'ladyling': ['dallying', 'ladyling'],\n 'laet': ['atle', 'laet', 'late', 'leat', 'tael', 'tale', 'teal'],\n 'laeti': ['alite', 'laeti'],\n 'laetic': ['calite', 'laetic', 'tecali'],\n 'lafite': ['fetial', 'filate', 'lafite', 'leafit'],\n 'lag': ['gal', 'lag'],\n 'lagan': ['laang', 'lagan', 'lagna'],\n 'lagen': ['agnel', 'angel', 'angle', 'galen', 'genal', 'glean', 'lagen'],\n 'lagena': ['alnage', 'angela', 'galena', 'lagena'],\n 'lagend': ['angled', 'dangle', 'englad', 'lagend'],\n 'lager': ['argel', 'ergal', 'garle', 'glare', 'lager', 'large', 'regal'],\n 'lagetto': ['lagetto', 'tagetol'],\n 'lagged': ['daggle', 'lagged'],\n 'laggen': ['laggen', 'naggle'],\n 'lagger': ['gargle', 'gregal', 'lagger', 'raggle'],\n 'lagna': ['laang', 'lagan', 'lagna'],\n 'lagniappe': ['appealing', 'lagniappe', 'panplegia'],\n 'lagonite': ['gelation', 'lagonite', 'legation'],\n 'lagunero': ['lagunero', 'organule', 'uroglena'],\n 'lagurus': ['argulus', 'lagurus'],\n 'lai': ['ail', 'ila', 'lai'],\n 'laicism': ['islamic', 'laicism', 'silicam'],\n 'laid': ['dail', 'dali', 'dial', 'laid', 'lida'],\n 'lain': ['alin', 'anil', 'lain', 'lina', 'nail'],\n 'laine': ['alien', 'aline', 'anile', 'elain', 'elian', 'laine', 'linea'],\n 'laiose': ['aeolis', 'laiose'],\n 'lair': ['aril', 'lair', 'lari', 'liar', 'lira', 'rail', 'rial'],\n 'lairage': ['lairage', 'railage', 'regalia'],\n 'laird': ['drail', 'laird', 'larid', 'liard'],\n 'lairless': ['lairless', 'railless'],\n 'lairman': ['lairman', 'laminar', 'malarin', 'railman'],\n 'lairstone': ['lairstone', 'orleanist', 'serotinal'],\n 'lairy': ['lairy', 'riyal'],\n 'laitance': ['analcite', 'anticlea', 'laitance'],\n 'laity': ['laity', 'taily'],\n 'lak': ['alk', 'lak'],\n 'lake': ['kale', 'lake', 'leak'],\n 'lakeless': ['lakeless', 'leakless'],\n 'laker': ['karel', 'laker'],\n 'lakie': ['alike', 'lakie'],\n 'laking': ['kangli', 'laking'],\n 'lakish': ['lakish', 'shakil'],\n 'lakota': ['atokal', 'lakota'],\n 'laky': ['alky', 'laky'],\n 'lalo': ['lalo', 'lola', 'olla'],\n 'lalopathy': ['allopathy', 'lalopathy'],\n 'lam': ['lam', 'mal'],\n 'lama': ['alma', 'amla', 'lama', 'mala'],\n 'lamaic': ['amical', 'camail', 'lamaic'],\n 'lamaism': ['lamaism', 'miasmal'],\n 'lamaist': ['lamaist', 'lamista'],\n 'lamaistic': ['ismatical', 'lamaistic'],\n 'lamanite': ['lamanite', 'laminate'],\n 'lamany': ['amylan', 'lamany', 'layman'],\n 'lamb': ['balm', 'lamb'],\n 'lambaste': ['blastema', 'lambaste'],\n 'lambent': ['beltman', 'lambent'],\n 'lamber': ['ambler', 'blamer', 'lamber', 'marble', 'ramble'],\n 'lambie': ['bemail', 'lambie'],\n 'lambiness': ['balminess', 'lambiness'],\n 'lamblike': ['balmlike', 'lamblike'],\n 'lamby': ['balmy', 'lamby'],\n 'lame': ['alem', 'alme', 'lame', 'leam', 'male', 'meal', 'mela'],\n 'lamella': ['lamella', 'malella', 'malleal'],\n 'lamellose': ['lamellose', 'semolella'],\n 'lamely': ['lamely', 'mellay'],\n 'lameness': ['lameness', 'maleness', 'maneless', 'nameless'],\n 'lament': ['lament', 'manlet', 'mantel', 'mantle', 'mental'],\n 'lamenter': ['lamenter', 'relament', 'remantle'],\n 'lamenting': ['alignment', 'lamenting'],\n 'lameter': ['lameter', 'metaler', 'remetal'],\n 'lamia': ['alima', 'lamia'],\n 'lamiger': ['gremial', 'lamiger'],\n 'lamiides': ['idealism', 'lamiides'],\n 'lamin': ['lamin', 'liman', 'milan'],\n 'lamina': ['almain', 'animal', 'lamina', 'manila'],\n 'laminae': ['laminae', 'melania'],\n 'laminar': ['lairman', 'laminar', 'malarin', 'railman'],\n 'laminarin': ['laminarin', 'linamarin'],\n 'laminarite': ['laminarite', 'terminalia'],\n 'laminate': ['lamanite', 'laminate'],\n 'laminated': ['almandite', 'laminated'],\n 'lamination': ['antimonial', 'lamination'],\n 'laminboard': ['laminboard', 'lombardian'],\n 'laminectomy': ['laminectomy', 'metonymical'],\n 'laminose': ['laminose', 'lemonias', 'semolina'],\n 'lamish': ['lamish', 'shimal'],\n 'lamista': ['lamaist', 'lamista'],\n 'lamiter': ['lamiter', 'marlite'],\n 'lammer': ['lammer', 'rammel'],\n 'lammy': ['lammy', 'malmy'],\n 'lamna': ['alman', 'lamna', 'manal'],\n 'lamnid': ['lamnid', 'mandil'],\n 'lamnidae': ['aldamine', 'lamnidae'],\n 'lamp': ['lamp', 'palm'],\n 'lampad': ['lampad', 'palmad'],\n 'lampas': ['lampas', 'plasma'],\n 'lamper': ['lamper', 'palmer', 'relamp'],\n 'lampers': ['lampers', 'sampler'],\n 'lampful': ['lampful', 'palmful'],\n 'lampist': ['lampist', 'palmist'],\n 'lampistry': ['lampistry', 'palmistry'],\n 'lampoon': ['lampoon', 'pomonal'],\n 'lamprey': ['lamprey', 'palmery'],\n 'lampyridae': ['lampyridae', 'pyramidale'],\n 'lamus': ['lamus', 'malus', 'musal', 'slaum'],\n 'lamut': ['lamut', 'tamul'],\n 'lan': ['aln', 'lan'],\n 'lana': ['alan', 'anal', 'lana'],\n 'lanas': ['alans', 'lanas', 'nasal'],\n 'lanate': ['anteal', 'lanate', 'teanal'],\n 'lancaster': ['ancestral', 'lancaster'],\n 'lancasterian': ['alcantarines', 'lancasterian'],\n 'lance': ['canel', 'clean', 'lance', 'lenca'],\n 'lanced': ['calden', 'candle', 'lanced'],\n 'lancely': ['cleanly', 'lancely'],\n 'lanceolar': ['lanceolar', 'olecranal'],\n 'lancer': ['lancer', 'rancel'],\n 'lances': ['lances', 'senlac'],\n 'lancet': ['cantle', 'cental', 'lancet', 'tancel'],\n 'lanceteer': ['crenelate', 'lanceteer'],\n 'lancinate': ['cantilena', 'lancinate'],\n 'landbook': ['bookland', 'landbook'],\n 'landed': ['dandle', 'landed'],\n 'lander': ['aldern',\n            'darnel',\n            'enlard',\n            'lander',\n            'lenard',\n            'randle',\n            'reland'],\n 'landfast': ['fastland', 'landfast'],\n 'landgrave': ['grandeval', 'landgrave'],\n 'landimere': ['landimere', 'madrilene'],\n 'landing': ['danglin', 'landing'],\n 'landlubber': ['landlubber', 'lubberland'],\n 'landreeve': ['landreeve', 'reeveland'],\n 'landstorm': ['landstorm', 'transmold'],\n 'landwash': ['landwash', 'washland'],\n 'lane': ['alen', 'lane', 'lean', 'lena', 'nael', 'neal'],\n 'lanete': ['elanet', 'lanete', 'lateen'],\n 'laney': ['laney', 'layne'],\n 'langhian': ['hangnail', 'langhian'],\n 'langi': ['algin', 'align', 'langi', 'liang', 'linga'],\n 'langite': ['atingle', 'gelatin', 'genital', 'langite', 'telinga'],\n 'lango': ['along', 'gonal', 'lango', 'longa', 'nogal'],\n 'langobard': ['bandarlog', 'langobard'],\n 'language': ['ganguela', 'language'],\n 'laniate': ['laniate', 'natalie', 'taenial'],\n 'lanific': ['finical', 'lanific'],\n 'laniform': ['formalin', 'informal', 'laniform'],\n 'laniidae': ['aedilian', 'laniidae'],\n 'lanista': ['lanista', 'santali'],\n 'lanius': ['insula', 'lanius', 'lusian'],\n 'lank': ['klan', 'lank'],\n 'lanket': ['anklet', 'lanket', 'tankle'],\n 'lanner': ['lanner', 'rannel'],\n 'lansat': ['aslant', 'lansat', 'natals', 'santal'],\n 'lanseh': ['halsen', 'hansel', 'lanseh'],\n 'lantaca': ['cantala', 'catalan', 'lantaca'],\n 'lanum': ['lanum', 'manul'],\n 'lao': ['alo', 'lao', 'loa'],\n 'laodicean': ['caledonia', 'laodicean'],\n 'laotian': ['ailanto', 'alation', 'laotian', 'notalia'],\n 'lap': ['alp', 'lap', 'pal'],\n 'laparohysterotomy': ['hysterolaparotomy', 'laparohysterotomy'],\n 'laparosplenotomy': ['laparosplenotomy', 'splenolaparotomy'],\n 'lapidarist': ['lapidarist', 'triapsidal'],\n 'lapidate': ['lapidate', 'talpidae'],\n 'lapideon': ['lapideon', 'palinode', 'pedalion'],\n 'lapidose': ['episodal', 'lapidose', 'sepaloid'],\n 'lapith': ['lapith', 'tilpah'],\n 'lapon': ['lapon', 'nopal'],\n 'lapp': ['lapp', 'palp', 'plap'],\n 'lappa': ['lappa', 'papal'],\n 'lapped': ['dapple', 'lapped', 'palped'],\n 'lapper': ['lapper', 'rappel'],\n 'lappish': ['lappish', 'shiplap'],\n 'lapsation': ['apolistan', 'lapsation'],\n 'lapse': ['elaps',\n           'lapse',\n           'lepas',\n           'pales',\n           'salep',\n           'saple',\n           'sepal',\n           'slape',\n           'spale',\n           'speal'],\n 'lapsi': ['alisp', 'lapsi'],\n 'lapsing': ['lapsing', 'sapling'],\n 'lapstone': ['lapstone', 'pleonast'],\n 'larboard': ['labrador', 'larboard'],\n 'larcenic': ['calciner', 'larcenic'],\n 'larcenist': ['cisternal', 'larcenist'],\n 'larcenous': ['larcenous', 'senocular'],\n 'larchen': ['charnel', 'larchen'],\n 'lardacein': ['ecardinal', 'lardacein'],\n 'lardite': ['dilater', 'lardite', 'redtail'],\n 'lardon': ['androl', 'arnold', 'lardon', 'roland', 'ronald'],\n 'lardy': ['daryl', 'lardy', 'lyard'],\n 'large': ['argel', 'ergal', 'garle', 'glare', 'lager', 'large', 'regal'],\n 'largely': ['allergy', 'gallery', 'largely', 'regally'],\n 'largen': ['angler', 'arleng', 'garnel', 'largen', 'rangle', 'regnal'],\n 'largeness': ['largeness', 'rangeless', 'regalness'],\n 'largess': ['glasser', 'largess'],\n 'largition': ['gratiolin', 'largition', 'tailoring'],\n 'largo': ['algor', 'argol', 'goral', 'largo'],\n 'lari': ['aril', 'lair', 'lari', 'liar', 'lira', 'rail', 'rial'],\n 'lariat': ['altair', 'atrail', 'atrial', 'lariat', 'latria', 'talari'],\n 'larid': ['drail', 'laird', 'larid', 'liard'],\n 'laridae': ['ardelia', 'laridae', 'radiale'],\n 'larigo': ['gloria', 'larigo', 'logria'],\n 'larigot': ['goitral', 'larigot', 'ligator'],\n 'lariid': ['iridal', 'lariid'],\n 'larine': ['arline', 'larine', 'linear', 'nailer', 'renail'],\n 'lark': ['karl', 'kral', 'lark'],\n 'larking': ['karling', 'larking'],\n 'larsenite': ['intersale', 'larsenite'],\n 'larus': ['larus', 'sural', 'ursal'],\n 'larva': ['alvar', 'arval', 'larva'],\n 'larval': ['larval', 'vallar'],\n 'larvate': ['larvate', 'lavaret', 'travale'],\n 'larve': ['arvel', 'larve', 'laver', 'ravel', 'velar'],\n 'larvicide': ['larvicide', 'veridical'],\n 'laryngopharyngeal': ['laryngopharyngeal', 'pharyngolaryngeal'],\n 'laryngopharyngitis': ['laryngopharyngitis', 'pharyngolaryngitis'],\n 'laryngotome': ['laryngotome', 'maternology'],\n 'laryngotracheotomy': ['laryngotracheotomy', 'tracheolaryngotomy'],\n 'las': ['las', 'sal', 'sla'],\n 'lasa': ['alas', 'lasa'],\n 'lascar': ['lascar', 'rascal', 'sacral', 'scalar'],\n 'laser': ['arles', 'arsle', 'laser', 'seral', 'slare'],\n 'lash': ['hals', 'lash'],\n 'lasi': ['lasi', 'lias', 'lisa', 'sail', 'sial'],\n 'lasius': ['asilus', 'lasius'],\n 'lask': ['lask', 'skal'],\n 'lasket': ['lasket', 'sklate'],\n 'laspring': ['laspring', 'sparling', 'springal'],\n 'lasque': ['lasque', 'squeal'],\n 'lasset': ['lasset', 'tassel'],\n 'lassie': ['elissa', 'lassie'],\n 'lasso': ['lasso', 'ossal'],\n 'lassoer': ['lassoer', 'oarless', 'rosales'],\n 'last': ['last', 'salt', 'slat'],\n 'laster': ['laster',\n            'lastre',\n            'rastle',\n            'relast',\n            'resalt',\n            'salter',\n            'slater',\n            'stelar'],\n 'lasting': ['anglist', 'lasting', 'salting', 'slating', 'staling'],\n 'lastly': ['lastly', 'saltly'],\n 'lastness': ['lastness', 'saltness'],\n 'lastre': ['laster',\n            'lastre',\n            'rastle',\n            'relast',\n            'resalt',\n            'salter',\n            'slater',\n            'stelar'],\n 'lasty': ['lasty', 'salty', 'slaty'],\n 'lat': ['alt', 'lat', 'tal'],\n 'lata': ['lata', 'taal', 'tala'],\n 'latania': ['altaian', 'latania', 'natalia'],\n 'latcher': ['clethra', 'latcher', 'ratchel', 'relatch', 'talcher', 'trachle'],\n 'latchet': ['chattel', 'latchet'],\n 'late': ['atle', 'laet', 'late', 'leat', 'tael', 'tale', 'teal'],\n 'latebra': ['alberta', 'latebra', 'ratable'],\n 'lated': ['adlet', 'dealt', 'delta', 'lated', 'taled'],\n 'lateen': ['elanet', 'lanete', 'lateen'],\n 'lately': ['lately', 'lealty'],\n 'laten': ['ental', 'laten', 'leant'],\n 'latent': ['latent', 'latten', 'nattle', 'talent', 'tantle'],\n 'latentness': ['latentness', 'tenantless'],\n 'later': ['alert', 'alter', 'artel', 'later', 'ratel', 'taler', 'telar'],\n 'latera': ['latera', 'relata'],\n 'laterad': ['altared', 'laterad'],\n 'lateralis': ['lateralis', 'stellaria'],\n 'lateran': ['alatern', 'lateran'],\n 'laterite': ['laterite', 'literate', 'teretial'],\n 'laterocaudal': ['caudolateral', 'laterocaudal'],\n 'laterodorsal': ['dorsolateral', 'laterodorsal'],\n 'lateroventral': ['lateroventral', 'ventrolateral'],\n 'latest': ['latest', 'sattle', 'taslet'],\n 'latex': ['exalt', 'latex'],\n 'lath': ['halt', 'lath'],\n 'lathe': ['ethal', 'lathe', 'leath'],\n 'latheman': ['latheman', 'methanal'],\n 'lathen': ['ethnal', 'hantle', 'lathen', 'thenal'],\n 'lather': ['arthel', 'halter', 'lather', 'thaler'],\n 'lathery': ['earthly', 'heartly', 'lathery', 'rathely'],\n 'lathing': ['halting', 'lathing', 'thingal'],\n 'latian': ['antlia', 'latian', 'nalita'],\n 'latibulize': ['latibulize', 'utilizable'],\n 'latices': ['astelic', 'elastic', 'latices'],\n 'laticlave': ['laticlave', 'vacillate'],\n 'latigo': ['galiot', 'latigo'],\n 'latimeria': ['latimeria', 'marialite'],\n 'latin': ['altin', 'latin'],\n 'latinate': ['antliate', 'latinate'],\n 'latiner': ['entrail',\n             'latiner',\n             'latrine',\n             'ratline',\n             'reliant',\n             'retinal',\n             'trenail'],\n 'latinesque': ['latinesque', 'sequential'],\n 'latinian': ['antinial', 'latinian'],\n 'latinizer': ['latinizer', 'trinalize'],\n 'latinus': ['latinus', 'tulisan', 'unalist'],\n 'lation': ['italon', 'lation', 'talion'],\n 'latirostres': ['latirostres', 'setirostral'],\n 'latirus': ['latirus', 'trisula'],\n 'latish': ['latish', 'tahsil'],\n 'latite': ['latite', 'tailet', 'tailte', 'talite'],\n 'latitude': ['altitude', 'latitude'],\n 'latitudinal': ['altitudinal', 'latitudinal'],\n 'latitudinarian': ['altitudinarian', 'latitudinarian'],\n 'latomy': ['latomy', 'tyloma'],\n 'latona': ['atonal', 'latona'],\n 'latonian': ['latonian', 'nataloin', 'national'],\n 'latria': ['altair', 'atrail', 'atrial', 'lariat', 'latria', 'talari'],\n 'latrine': ['entrail',\n             'latiner',\n             'latrine',\n             'ratline',\n             'reliant',\n             'retinal',\n             'trenail'],\n 'latris': ['latris', 'strial'],\n 'latro': ['latro', 'rotal', 'toral'],\n 'latrobe': ['alberto', 'bloater', 'latrobe'],\n 'latrobite': ['latrobite', 'trilobate'],\n 'latrocinium': ['latrocinium', 'tourmalinic'],\n 'latron': ['latron', 'lontar', 'tornal'],\n 'latten': ['latent', 'latten', 'nattle', 'talent', 'tantle'],\n 'latter': ['artlet', 'latter', 'rattle', 'tartle', 'tatler'],\n 'latterkin': ['intertalk', 'latterkin'],\n 'lattice': ['lattice', 'tactile'],\n 'latticinio': ['latticinio', 'licitation'],\n 'latuka': ['latuka', 'taluka'],\n 'latus': ['latus', 'sault', 'talus'],\n 'latvian': ['latvian', 'valiant'],\n 'laubanite': ['laubanite', 'unlabiate'],\n 'laud': ['auld', 'dual', 'laud', 'udal'],\n 'laudation': ['adulation', 'laudation'],\n 'laudator': ['adulator', 'laudator'],\n 'laudatorily': ['illaudatory', 'laudatorily'],\n 'laudatory': ['adulatory', 'laudatory'],\n 'lauder': ['lauder', 'udaler'],\n 'laudism': ['dualism', 'laudism'],\n 'laudist': ['dualist', 'laudist'],\n 'laumonite': ['emulation', 'laumonite'],\n 'laun': ['laun', 'luna', 'ulna', 'unal'],\n 'launce': ['auncel', 'cuneal', 'lacune', 'launce', 'unlace'],\n 'launch': ['chulan', 'launch', 'nuchal'],\n 'launcher': ['launcher', 'relaunch'],\n 'laund': ['dunal', 'laund', 'lunda', 'ulnad'],\n 'launder': ['launder', 'rundale'],\n 'laur': ['alur', 'laur', 'lura', 'raul', 'ural'],\n 'laura': ['aural', 'laura'],\n 'laurel': ['allure', 'laurel'],\n 'laureled': ['laureled', 'reallude'],\n 'laurence': ['cerulean', 'laurence'],\n 'laurent': ['laurent', 'neutral', 'unalert'],\n 'laurentide': ['adulterine', 'laurentide'],\n 'lauric': ['curial', 'lauric', 'uracil', 'uralic'],\n 'laurin': ['laurin', 'urinal'],\n 'laurite': ['laurite', 'uralite'],\n 'laurus': ['laurus', 'ursula'],\n 'lava': ['aval', 'lava'],\n 'lavacre': ['caravel', 'lavacre'],\n 'lavaret': ['larvate', 'lavaret', 'travale'],\n 'lave': ['lave', 'vale', 'veal', 'vela'],\n 'laveer': ['laveer', 'leaver', 'reveal', 'vealer'],\n 'lavehr': ['halver', 'lavehr'],\n 'lavenite': ['elvanite', 'lavenite'],\n 'laver': ['arvel', 'larve', 'laver', 'ravel', 'velar'],\n 'laverania': ['laverania', 'valeriana'],\n 'lavic': ['cavil', 'lavic'],\n 'lavinia': ['lavinia', 'vinalia'],\n 'lavish': ['lavish', 'vishal'],\n 'lavisher': ['lavisher', 'shrieval'],\n 'lavolta': ['lavolta', 'vallota'],\n 'law': ['awl', 'law'],\n 'lawing': ['lawing', 'waling'],\n 'lawk': ['lawk', 'walk'],\n 'lawmonger': ['angleworm', 'lawmonger'],\n 'lawned': ['delawn', 'lawned', 'wandle'],\n 'lawner': ['lawner', 'warnel'],\n 'lawny': ['lawny', 'wanly'],\n 'lawrie': ['lawrie', 'wailer'],\n 'lawter': ['lawter', 'walter'],\n 'lawyer': ['lawyer', 'yawler'],\n 'laxism': ['laxism', 'smilax'],\n 'lay': ['aly', 'lay'],\n 'layer': ['early', 'layer', 'relay'],\n 'layered': ['delayer', 'layered', 'redelay'],\n 'layery': ['layery', 'yearly'],\n 'laying': ['gainly', 'laying'],\n 'layman': ['amylan', 'lamany', 'layman'],\n 'layne': ['laney', 'layne'],\n 'layout': ['layout', 'lutayo', 'outlay'],\n 'layover': ['layover', 'overlay'],\n 'layship': ['apishly', 'layship'],\n 'lazarlike': ['alkalizer', 'lazarlike'],\n 'laze': ['laze', 'zeal'],\n 'lea': ['ale', 'lea'],\n 'leach': ['chela', 'lache', 'leach'],\n 'leachman': ['leachman', 'mechanal'],\n 'lead': ['dale', 'deal', 'lade', 'lead', 'leda'],\n 'leadable': ['dealable', 'leadable'],\n 'leaded': ['delead', 'leaded'],\n 'leader': ['dealer', 'leader', 'redeal', 'relade', 'relead'],\n 'leadership': ['dealership', 'leadership'],\n 'leadin': ['aldine', 'daniel', 'delian', 'denial', 'enalid', 'leadin'],\n 'leadiness': ['idealness', 'leadiness'],\n 'leading': ['adeling', 'dealing', 'leading'],\n 'leadman': ['daleman', 'lademan', 'leadman'],\n 'leads': ['leads', 'slade'],\n 'leadsman': ['dalesman', 'leadsman'],\n 'leadstone': ['endosteal', 'leadstone'],\n 'leady': ['delay', 'leady'],\n 'leaf': ['alef', 'feal', 'flea', 'leaf'],\n 'leafen': ['enleaf', 'leafen'],\n 'leafit': ['fetial', 'filate', 'lafite', 'leafit'],\n 'leafy': ['fleay', 'leafy'],\n 'leah': ['hale', 'heal', 'leah'],\n 'leak': ['kale', 'lake', 'leak'],\n 'leakiness': ['alikeness', 'leakiness'],\n 'leakless': ['lakeless', 'leakless'],\n 'leal': ['alle', 'ella', 'leal'],\n 'lealty': ['lately', 'lealty'],\n 'leam': ['alem', 'alme', 'lame', 'leam', 'male', 'meal', 'mela'],\n 'leamer': ['leamer', 'mealer'],\n 'lean': ['alen', 'lane', 'lean', 'lena', 'nael', 'neal'],\n 'leander': ['leander', 'learned', 'reladen'],\n 'leaner': ['arlene', 'leaner'],\n 'leaning': ['angelin', 'leaning'],\n 'leant': ['ental', 'laten', 'leant'],\n 'leap': ['leap', 'lepa', 'pale', 'peal', 'plea'],\n 'leaper': ['leaper', 'releap', 'repale', 'repeal'],\n 'leaping': ['apeling', 'leaping'],\n 'leapt': ['leapt',\n           'palet',\n           'patel',\n           'pelta',\n           'petal',\n           'plate',\n           'pleat',\n           'tepal'],\n 'lear': ['earl', 'eral', 'lear', 'real'],\n 'learn': ['learn', 'renal'],\n 'learned': ['leander', 'learned', 'reladen'],\n 'learnedly': ['ellenyard', 'learnedly'],\n 'learner': ['learner', 'relearn'],\n 'learnt': ['altern', 'antler', 'learnt', 'rental', 'ternal'],\n 'leasable': ['leasable', 'sealable'],\n 'lease': ['easel', 'lease'],\n 'leaser': ['alerse', 'leaser', 'reales', 'resale', 'reseal', 'sealer'],\n 'leash': ['halse', 'leash', 'selah', 'shale', 'sheal', 'shela'],\n 'leasing': ['leasing', 'sealing'],\n 'least': ['least', 'setal', 'slate', 'stale', 'steal', 'stela', 'tales'],\n 'leat': ['atle', 'laet', 'late', 'leat', 'tael', 'tale', 'teal'],\n 'leath': ['ethal', 'lathe', 'leath'],\n 'leather': ['leather', 'tarheel'],\n 'leatherbark': ['halterbreak', 'leatherbark'],\n 'leatherer': ['leatherer', 'releather', 'tarheeler'],\n 'leatman': ['amental', 'leatman'],\n 'leaver': ['laveer', 'leaver', 'reveal', 'vealer'],\n 'leaves': ['leaves', 'sleave'],\n 'leaving': ['leaving', 'vangeli'],\n 'leavy': ['leavy', 'vealy'],\n 'leban': ['leban', 'nable'],\n 'lebanese': ['ebenales', 'lebanese'],\n 'lebensraum': ['lebensraum', 'mensurable'],\n 'lecaniid': ['alcidine', 'danielic', 'lecaniid'],\n 'lecanora': ['carolean', 'lecanora'],\n 'lecanoroid': ['lecanoroid', 'olecranoid'],\n 'lechery': ['cheerly', 'lechery'],\n 'lechriodont': ['holocentrid', 'lechriodont'],\n 'lecithal': ['hellicat', 'lecithal'],\n 'lecontite': ['lecontite', 'nicolette'],\n 'lector': ['colter', 'lector', 'torcel'],\n 'lectorial': ['corallite', 'lectorial'],\n 'lectorship': ['lectorship', 'leptorchis'],\n 'lectrice': ['electric', 'lectrice'],\n 'lecturess': ['cutleress', 'lecturess', 'truceless'],\n 'lecyth': ['lecyth', 'letchy'],\n 'lecythis': ['chestily', 'lecythis'],\n 'led': ['del', 'eld', 'led'],\n 'leda': ['dale', 'deal', 'lade', 'lead', 'leda'],\n 'lede': ['dele', 'lede', 'leed'],\n 'leden': ['leden', 'neeld'],\n 'ledge': ['glede', 'gleed', 'ledge'],\n 'ledger': ['gelder', 'ledger', 'redleg'],\n 'ledging': ['gelding', 'ledging'],\n 'ledgy': ['gledy', 'ledgy'],\n 'lee': ['eel', 'lee'],\n 'leed': ['dele', 'lede', 'leed'],\n 'leek': ['keel', 'kele', 'leek'],\n 'leep': ['leep', 'peel', 'pele'],\n 'leepit': ['leepit', 'pelite', 'pielet'],\n 'leer': ['leer', 'reel'],\n 'leeringly': ['leeringly', 'reelingly'],\n 'leerness': ['leerness', 'lessener'],\n 'lees': ['else', 'lees', 'seel', 'sele', 'slee'],\n 'leet': ['leet', 'lete', 'teel', 'tele'],\n 'leetman': ['entelam', 'leetman'],\n 'leewan': ['leewan', 'weanel'],\n 'left': ['felt', 'flet', 'left'],\n 'leftish': ['fishlet', 'leftish'],\n 'leftness': ['feltness', 'leftness'],\n 'leg': ['gel', 'leg'],\n 'legalist': ['legalist', 'stillage'],\n 'legantine': ['eglantine', 'inelegant', 'legantine'],\n 'legate': ['eaglet', 'legate', 'teagle', 'telega'],\n 'legatine': ['galenite', 'legatine'],\n 'legation': ['gelation', 'lagonite', 'legation'],\n 'legative': ['legative', 'levigate'],\n 'legator': ['argolet', 'gloater', 'legator'],\n 'legendary': ['enragedly', 'legendary'],\n 'leger': ['leger', 'regle'],\n 'legger': ['eggler', 'legger'],\n 'legion': ['eloign', 'gileno', 'legion'],\n 'legioner': ['eloigner', 'legioner'],\n 'legionry': ['legionry', 'yeorling'],\n 'legislator': ['allegorist', 'legislator'],\n 'legman': ['legman', 'mangel', 'mangle'],\n 'legoa': ['gloea', 'legoa'],\n 'legua': ['gulae', 'legua'],\n 'leguan': ['genual', 'leguan'],\n 'lehr': ['herl', 'hler', 'lehr'],\n 'lei': ['eli', 'lei', 'lie'],\n 'leif': ['feil', 'file', 'leif', 'lief', 'life'],\n 'leila': ['allie', 'leila', 'lelia'],\n 'leipoa': ['apiole', 'leipoa'],\n 'leisten': ['leisten', 'setline', 'tensile'],\n 'leister': ['leister', 'sterile'],\n 'leith': ['leith', 'lithe'],\n 'leitneria': ['leitneria', 'lienteria'],\n 'lek': ['elk', 'lek'],\n 'lekach': ['hackle', 'lekach'],\n 'lekane': ['alkene', 'lekane'],\n 'lelia': ['allie', 'leila', 'lelia'],\n 'leman': ['leman', 'lemna'],\n 'lemma': ['lemma', 'melam'],\n 'lemna': ['leman', 'lemna'],\n 'lemnad': ['lemnad', 'menald'],\n 'lemnian': ['lemnian', 'lineman', 'melanin'],\n 'lemniscate': ['centesimal', 'lemniscate'],\n 'lemon': ['lemon', 'melon', 'monel'],\n 'lemonias': ['laminose', 'lemonias', 'semolina'],\n 'lemonlike': ['lemonlike', 'melonlike'],\n 'lemony': ['lemony', 'myelon'],\n 'lemosi': ['lemosi', 'limose', 'moiles'],\n 'lempira': ['impaler', 'impearl', 'lempira', 'premial'],\n 'lemuria': ['lemuria', 'miauler'],\n 'lemurian': ['lemurian', 'malurine', 'rumelian'],\n 'lemurinae': ['lemurinae', 'neurilema'],\n 'lemurine': ['lemurine', 'meruline', 'relumine'],\n 'lena': ['alen', 'lane', 'lean', 'lena', 'nael', 'neal'],\n 'lenad': ['eland', 'laden', 'lenad'],\n 'lenape': ['alpeen', 'lenape', 'pelean'],\n 'lenard': ['aldern',\n            'darnel',\n            'enlard',\n            'lander',\n            'lenard',\n            'randle',\n            'reland'],\n 'lenca': ['canel', 'clean', 'lance', 'lenca'],\n 'lencan': ['cannel', 'lencan'],\n 'lendee': ['lendee', 'needle'],\n 'lender': ['lender', 'relend'],\n 'lendu': ['lendu', 'unled'],\n 'lengthy': ['lengthy', 'thegnly'],\n 'lenient': ['lenient', 'tenline'],\n 'lenify': ['finely', 'lenify'],\n 'lenis': ['elsin', 'lenis', 'niels', 'silen', 'sline'],\n 'lenity': ['lenity', 'yetlin'],\n 'lenny': ['lenny', 'lynne'],\n 'leno': ['elon', 'enol', 'leno', 'leon', 'lone', 'noel'],\n 'lenora': ['lenora', 'loaner', 'orlean', 'reloan'],\n 'lenticel': ['lenticel', 'lenticle'],\n 'lenticle': ['lenticel', 'lenticle'],\n 'lentil': ['lentil', 'lintel'],\n 'lentisc': ['lentisc', 'scintle', 'stencil'],\n 'lentisco': ['lentisco', 'telsonic'],\n 'lentiscus': ['lentiscus', 'tunicless'],\n 'lento': ['lento', 'olent'],\n 'lentous': ['lentous', 'sultone'],\n 'lenvoy': ['lenvoy', 'ovenly'],\n 'leo': ['leo', 'ole'],\n 'leon': ['elon', 'enol', 'leno', 'leon', 'lone', 'noel'],\n 'leonard': ['endoral', 'ladrone', 'leonard'],\n 'leonhardite': ['leonhardite', 'lionhearted'],\n 'leonid': ['doline', 'indole', 'leonid', 'loined', 'olenid'],\n 'leonines': ['leonines', 'selenion'],\n 'leonis': ['insole', 'leonis', 'lesion', 'selion'],\n 'leonist': ['leonist', 'onliest'],\n 'leonite': ['elonite', 'leonite'],\n 'leonotis': ['leonotis', 'oilstone'],\n 'leoparde': ['leoparde', 'reapdole'],\n 'leopardite': ['leopardite', 'protelidae'],\n 'leotard': ['delator', 'leotard'],\n 'lepa': ['leap', 'lepa', 'pale', 'peal', 'plea'],\n 'lepanto': ['lepanto', 'nepotal', 'petalon', 'polenta'],\n 'lepas': ['elaps',\n           'lapse',\n           'lepas',\n           'pales',\n           'salep',\n           'saple',\n           'sepal',\n           'slape',\n           'spale',\n           'speal'],\n 'lepcha': ['chapel', 'lepcha', 'pleach'],\n 'leper': ['leper', 'perle', 'repel'],\n 'leperdom': ['leperdom', 'premodel'],\n 'lepidopter': ['dopplerite', 'lepidopter'],\n 'lepidosauria': ['lepidosauria', 'pliosauridae'],\n 'lepidote': ['lepidote', 'petioled'],\n 'lepidotic': ['diploetic', 'lepidotic'],\n 'lepisma': ['ampelis', 'lepisma'],\n 'leporid': ['leporid', 'leproid'],\n 'leporis': ['leporis', 'spoiler'],\n 'lepra': ['lepra', 'paler', 'parel', 'parle', 'pearl', 'perla', 'relap'],\n 'leproid': ['leporid', 'leproid'],\n 'leproma': ['leproma', 'palermo', 'pleroma', 'polearm'],\n 'leprosied': ['despoiler', 'leprosied'],\n 'leprosis': ['leprosis', 'plerosis'],\n 'leprous': ['leprous', 'pelorus', 'sporule'],\n 'leptandra': ['leptandra', 'peltandra'],\n 'leptidae': ['depilate', 'leptidae', 'pileated'],\n 'leptiform': ['leptiform', 'peltiform'],\n 'leptodora': ['doorplate', 'leptodora'],\n 'leptome': ['leptome', 'poemlet'],\n 'lepton': ['lepton', 'pentol'],\n 'leptonema': ['leptonema', 'ptolemean'],\n 'leptorchis': ['lectorship', 'leptorchis'],\n 'lepus': ['lepus', 'pulse'],\n 'ler': ['ler', 'rel'],\n 'lernaean': ['annealer', 'lernaean', 'reanneal'],\n 'lerot': ['lerot', 'orlet', 'relot'],\n 'lerwa': ['lerwa', 'waler'],\n 'les': ['els', 'les'],\n 'lesath': ['haslet', 'lesath', 'shelta'],\n 'lesbia': ['isabel', 'lesbia'],\n 'lesche': ['lesche', 'sleech'],\n 'lesion': ['insole', 'leonis', 'lesion', 'selion'],\n 'lesional': ['lesional', 'solenial'],\n 'leslie': ['leslie', 'sellie'],\n 'lessener': ['leerness', 'lessener'],\n 'lest': ['lest', 'selt'],\n 'lester': ['lester', 'selter', 'streel'],\n 'let': ['elt', 'let'],\n 'letchy': ['lecyth', 'letchy'],\n 'lete': ['leet', 'lete', 'teel', 'tele'],\n 'lethargus': ['lethargus', 'slaughter'],\n 'lethe': ['ethel', 'lethe'],\n 'lethean': ['entheal', 'lethean'],\n 'lethologica': ['ethological', 'lethologica', 'theological'],\n 'letitia': ['italite', 'letitia', 'tilaite'],\n 'leto': ['leto', 'lote', 'tole'],\n 'letoff': ['letoff', 'offlet'],\n 'lett': ['lett', 'telt'],\n 'letten': ['letten', 'nettle'],\n 'letterer': ['letterer', 'reletter'],\n 'lettish': ['lettish', 'thistle'],\n 'lettrin': ['lettrin', 'trintle'],\n 'leu': ['leu', 'lue', 'ule'],\n 'leucadian': ['leucadian', 'lucanidae'],\n 'leucocism': ['leucocism', 'muscicole'],\n 'leucoma': ['caulome', 'leucoma'],\n 'leucosis': ['coulisse', 'leucosis', 'ossicule'],\n 'leud': ['deul', 'duel', 'leud'],\n 'leuk': ['leuk', 'luke'],\n 'leuma': ['amelu', 'leuma', 'ulema'],\n 'leung': ['leung', 'lunge'],\n 'levance': ['enclave', 'levance', 'valence'],\n 'levant': ['levant', 'valent'],\n 'levanter': ['levanter', 'relevant', 'revelant'],\n 'levantine': ['levantine', 'valentine'],\n 'leveler': ['leveler', 'relevel'],\n 'lever': ['elver', 'lever', 'revel'],\n 'leverer': ['leverer', 'reveler'],\n 'levi': ['evil', 'levi', 'live', 'veil', 'vile', 'vlei'],\n 'levier': ['levier', 'relive', 'reveil', 'revile', 'veiler'],\n 'levigate': ['legative', 'levigate'],\n 'levin': ['levin', 'liven'],\n 'levining': ['levining', 'nievling'],\n 'levir': ['levir', 'liver', 'livre', 'rivel'],\n 'levirate': ['levirate', 'relative'],\n 'levis': ['elvis', 'levis', 'slive'],\n 'levitation': ['levitation', 'tonalitive', 'velitation'],\n 'levo': ['levo', 'love', 'velo', 'vole'],\n 'levyist': ['levyist', 'sylvite'],\n 'lewd': ['lewd', 'weld'],\n 'lewis': ['lewis', 'swile'],\n 'lexia': ['axile', 'lexia'],\n 'ley': ['ley', 'lye'],\n 'lhota': ['altho', 'lhota', 'loath'],\n 'liability': ['alibility', 'liability'],\n 'liable': ['alible', 'belial', 'labile', 'liable'],\n 'liana': ['alain', 'alani', 'liana'],\n 'liang': ['algin', 'align', 'langi', 'liang', 'linga'],\n 'liar': ['aril', 'lair', 'lari', 'liar', 'lira', 'rail', 'rial'],\n 'liard': ['drail', 'laird', 'larid', 'liard'],\n 'lias': ['lasi', 'lias', 'lisa', 'sail', 'sial'],\n 'liatris': ['liatris', 'trilisa'],\n 'libament': ['bailment', 'libament'],\n 'libate': ['albeit',\n            'albite',\n            'baltei',\n            'belait',\n            'betail',\n            'bletia',\n            'libate'],\n 'libationer': ['libationer', 'liberation'],\n 'libber': ['libber', 'ribble'],\n 'libby': ['bilby', 'libby'],\n 'libellary': ['libellary', 'liberally'],\n 'liber': ['birle', 'liber'],\n 'liberal': ['braille', 'liberal'],\n 'liberally': ['libellary', 'liberally'],\n 'liberate': ['iterable', 'liberate'],\n 'liberation': ['libationer', 'liberation'],\n 'liberator': ['liberator', 'orbitelar'],\n 'liberian': ['bilinear', 'liberian'],\n 'libertas': ['abristle', 'libertas'],\n 'libertine': ['berlinite', 'libertine'],\n 'libra': ['blair', 'brail', 'libra'],\n 'librate': ['betrail', 'librate', 'triable', 'trilabe'],\n 'licania': ['lacinia', 'licania'],\n 'license': ['license', 'selenic', 'silence'],\n 'licensed': ['licensed', 'silenced'],\n 'licenser': ['licenser', 'silencer'],\n 'licensor': ['cresolin', 'licensor'],\n 'lich': ['chil', 'lich'],\n 'lichanos': ['lichanos', 'nicholas'],\n 'lichenoid': ['cheloniid', 'lichenoid'],\n 'lichi': ['chili', 'lichi'],\n 'licitation': ['latticinio', 'licitation'],\n 'licker': ['licker', 'relick', 'rickle'],\n 'lickspit': ['lickspit', 'lipstick'],\n 'licorne': ['creolin', 'licorne', 'locrine'],\n 'lida': ['dail', 'dali', 'dial', 'laid', 'lida'],\n 'lidded': ['diddle', 'lidded'],\n 'lidder': ['lidder', 'riddel', 'riddle'],\n 'lide': ['idle', 'lide', 'lied'],\n 'lie': ['eli', 'lei', 'lie'],\n 'lied': ['idle', 'lide', 'lied'],\n 'lief': ['feil', 'file', 'leif', 'lief', 'life'],\n 'lien': ['lien', 'line', 'neil', 'nile'],\n 'lienal': ['lienal', 'lineal'],\n 'lienee': ['eileen', 'lienee'],\n 'lienor': ['elinor', 'lienor', 'lorien', 'noiler'],\n 'lienteria': ['leitneria', 'lienteria'],\n 'lientery': ['entirely', 'lientery'],\n 'lier': ['lier', 'lire', 'rile'],\n 'lierne': ['lierne', 'reline'],\n 'lierre': ['lierre', 'relier'],\n 'liesh': ['liesh', 'shiel'],\n 'lievaart': ['lievaart', 'varietal'],\n 'life': ['feil', 'file', 'leif', 'lief', 'life'],\n 'lifelike': ['filelike', 'lifelike'],\n 'lifer': ['filer', 'flier', 'lifer', 'rifle'],\n 'lifeward': ['drawfile', 'lifeward'],\n 'lifo': ['filo', 'foil', 'lifo'],\n 'lift': ['flit', 'lift'],\n 'lifter': ['fertil', 'filter', 'lifter', 'relift', 'trifle'],\n 'lifting': ['fliting', 'lifting'],\n 'ligament': ['ligament', 'metaling', 'tegminal'],\n 'ligas': ['gisla', 'ligas', 'sigla'],\n 'ligate': ['aiglet', 'ligate', 'taigle', 'tailge'],\n 'ligation': ['intaglio', 'ligation'],\n 'ligator': ['goitral', 'larigot', 'ligator'],\n 'ligature': ['alurgite', 'ligature'],\n 'lighten': ['enlight', 'lighten'],\n 'lightener': ['lightener', 'relighten', 'threeling'],\n 'lighter': ['lighter', 'relight', 'rightle'],\n 'lighthead': ['headlight', 'lighthead'],\n 'lightness': ['lightness', 'nightless', 'thingless'],\n 'ligne': ['ingle', 'ligne', 'linge', 'nigel'],\n 'lignin': ['lignin', 'lining'],\n 'lignitic': ['lignitic', 'tiglinic'],\n 'lignose': ['gelosin', 'lignose'],\n 'ligroine': ['ligroine', 'religion'],\n 'ligure': ['ligure', 'reguli'],\n 'lija': ['jail', 'lija'],\n 'like': ['kiel', 'like'],\n 'liken': ['inkle', 'liken'],\n 'likewise': ['likewise', 'wiselike'],\n 'lilac': ['calli', 'lilac'],\n 'lilacky': ['alkylic', 'lilacky'],\n 'lilium': ['illium', 'lilium'],\n 'lilt': ['lilt', 'till'],\n 'lily': ['illy', 'lily', 'yill'],\n 'lim': ['lim', 'mil'],\n 'lima': ['amil', 'amli', 'lima', 'mail', 'mali', 'mila'],\n 'limacina': ['animalic', 'limacina'],\n 'limacon': ['limacon', 'malonic'],\n 'liman': ['lamin', 'liman', 'milan'],\n 'limation': ['limation', 'miltonia'],\n 'limbat': ['limbat', 'timbal'],\n 'limbate': ['limbate', 'timable', 'timbale'],\n 'limbed': ['dimble', 'limbed'],\n 'limbus': ['bluism', 'limbus'],\n 'limby': ['blimy', 'limby'],\n 'lime': ['emil', 'lime', 'mile'],\n 'limean': ['limean', 'maline', 'melian', 'menial'],\n 'limeman': ['ammelin', 'limeman'],\n 'limer': ['limer', 'meril', 'miler'],\n 'limes': ['limes', 'miles', 'slime', 'smile'],\n 'limestone': ['limestone', 'melonites', 'milestone'],\n 'limey': ['elymi', 'emily', 'limey'],\n 'liminess': ['liminess', 'senilism'],\n 'limitary': ['limitary', 'military'],\n 'limitate': ['limitate', 'militate'],\n 'limitation': ['limitation', 'militation'],\n 'limited': ['delimit', 'limited'],\n 'limiter': ['limiter', 'relimit'],\n 'limitless': ['limitless', 'semistill'],\n 'limner': ['limner', 'merlin', 'milner'],\n 'limnetic': ['limnetic', 'milicent'],\n 'limoniad': ['dominial', 'imolinda', 'limoniad'],\n 'limosa': ['limosa', 'somali'],\n 'limose': ['lemosi', 'limose', 'moiles'],\n 'limp': ['limp', 'pilm', 'plim'],\n 'limper': ['limper', 'prelim', 'rimple'],\n 'limping': ['impling', 'limping'],\n 'limpsy': ['limpsy', 'simply'],\n 'limpy': ['imply', 'limpy', 'pilmy'],\n 'limsy': ['limsy', 'slimy', 'smily'],\n 'lin': ['lin', 'nil'],\n 'lina': ['alin', 'anil', 'lain', 'lina', 'nail'],\n 'linaga': ['agnail', 'linaga'],\n 'linage': ['algine', 'genial', 'linage'],\n 'linamarin': ['laminarin', 'linamarin'],\n 'linarite': ['inertial', 'linarite'],\n 'linchet': ['linchet', 'tinchel'],\n 'linctus': ['clunist', 'linctus'],\n 'linda': ['danli', 'ladin', 'linda', 'nidal'],\n 'lindane': ['annelid', 'lindane'],\n 'linder': ['linder', 'rindle'],\n 'lindoite': ['lindoite', 'tolidine'],\n 'lindsay': ['islandy', 'lindsay'],\n 'line': ['lien', 'line', 'neil', 'nile'],\n 'linea': ['alien', 'aline', 'anile', 'elain', 'elian', 'laine', 'linea'],\n 'lineal': ['lienal', 'lineal'],\n 'lineament': ['lineament', 'manteline'],\n 'linear': ['arline', 'larine', 'linear', 'nailer', 'renail'],\n 'linearity': ['inreality', 'linearity'],\n 'lineate': ['elatine', 'lineate'],\n 'lineature': ['lineature', 'rutelinae'],\n 'linecut': ['linecut', 'tunicle'],\n 'lined': ['eldin', 'lined'],\n 'lineman': ['lemnian', 'lineman', 'melanin'],\n 'linen': ['linen', 'linne'],\n 'linesman': ['annelism', 'linesman'],\n 'linet': ['inlet', 'linet'],\n 'linga': ['algin', 'align', 'langi', 'liang', 'linga'],\n 'lingbird': ['birdling', 'bridling', 'lingbird'],\n 'linge': ['ingle', 'ligne', 'linge', 'nigel'],\n 'linger': ['linger', 'ringle'],\n 'lingo': ['lingo', 'login'],\n 'lingtow': ['lingtow', 'twoling'],\n 'lingua': ['gaulin', 'lingua'],\n 'lingual': ['lingual', 'lingula'],\n 'linguidental': ['dentilingual', 'indulgential', 'linguidental'],\n 'lingula': ['lingual', 'lingula'],\n 'linguodental': ['dentolingual', 'linguodental'],\n 'lingy': ['lingy', 'lying'],\n 'linha': ['linha', 'nihal'],\n 'lining': ['lignin', 'lining'],\n 'link': ['kiln', 'link'],\n 'linked': ['kindle', 'linked'],\n 'linker': ['linker', 'relink'],\n 'linking': ['inkling', 'linking'],\n 'linkman': ['kilnman', 'linkman'],\n 'links': ['links', 'slink'],\n 'linnaea': ['alanine', 'linnaea'],\n 'linnaean': ['annaline', 'linnaean'],\n 'linne': ['linen', 'linne'],\n 'linnet': ['linnet', 'linten'],\n 'lino': ['lino', 'lion', 'loin', 'noil'],\n 'linolenic': ['encinillo', 'linolenic'],\n 'linometer': ['linometer', 'nilometer'],\n 'linopteris': ['linopteris', 'prosilient'],\n 'linous': ['insoul', 'linous', 'nilous', 'unsoil'],\n 'linsey': ['linsey', 'lysine'],\n 'linstock': ['coltskin', 'linstock'],\n 'lintel': ['lentil', 'lintel'],\n 'linten': ['linnet', 'linten'],\n 'lintseed': ['enlisted', 'lintseed'],\n 'linum': ['linum', 'ulmin'],\n 'linus': ['linus', 'sunil'],\n 'liny': ['inly', 'liny'],\n 'lion': ['lino', 'lion', 'loin', 'noil'],\n 'lioncel': ['colline', 'lioncel'],\n 'lionel': ['lionel', 'niello'],\n 'lionet': ['entoil', 'lionet'],\n 'lionhearted': ['leonhardite', 'lionhearted'],\n 'lipa': ['lipa', 'pail', 'pali', 'pial'],\n 'lipan': ['lipan', 'pinal', 'plain'],\n 'liparis': ['aprilis', 'liparis'],\n 'liparite': ['liparite', 'reptilia'],\n 'liparous': ['liparous', 'pliosaur'],\n 'lipase': ['espial', 'lipase', 'pelias'],\n 'lipin': ['lipin', 'pilin'],\n 'liplet': ['liplet', 'pillet'],\n 'lipochondroma': ['chondrolipoma', 'lipochondroma'],\n 'lipoclasis': ['calliopsis', 'lipoclasis'],\n 'lipocyte': ['epicotyl', 'lipocyte'],\n 'lipofibroma': ['fibrolipoma', 'lipofibroma'],\n 'lipolytic': ['lipolytic', 'politicly'],\n 'lipoma': ['lipoma', 'pimola', 'ploima'],\n 'lipomyoma': ['lipomyoma', 'myolipoma'],\n 'lipomyxoma': ['lipomyxoma', 'myxolipoma'],\n 'liposis': ['liposis', 'pilosis'],\n 'lipotype': ['lipotype', 'polypite'],\n 'lippen': ['lippen', 'nipple'],\n 'lipper': ['lipper', 'ripple'],\n 'lippia': ['lippia', 'pilpai'],\n 'lipsanotheca': ['lipsanotheca', 'sphacelation'],\n 'lipstick': ['lickspit', 'lipstick'],\n 'liquate': ['liquate', 'tequila'],\n 'liquidate': ['liquidate', 'qualitied'],\n 'lira': ['aril', 'lair', 'lari', 'liar', 'lira', 'rail', 'rial'],\n 'lirate': ['lirate', 'retail', 'retial', 'tailer'],\n 'liration': ['liration', 'litorina'],\n 'lire': ['lier', 'lire', 'rile'],\n 'lis': ['lis', 'sil'],\n 'lisa': ['lasi', 'lias', 'lisa', 'sail', 'sial'],\n 'lise': ['isle', 'lise', 'sile'],\n 'lisere': ['lisere', 'resile'],\n 'lisk': ['lisk', 'silk', 'skil'],\n 'lisle': ['lisle', 'selli'],\n 'lisp': ['lisp', 'slip'],\n 'lisper': ['lisper', 'pliers', 'sirple', 'spiler'],\n 'list': ['list', 'silt', 'slit'],\n 'listable': ['bastille', 'listable'],\n 'listen': ['enlist', 'listen', 'silent', 'tinsel'],\n 'listener': ['enlister', 'esterlin', 'listener', 'relisten'],\n 'lister': ['lister', 'relist'],\n 'listera': ['aletris', 'alister', 'listera', 'realist', 'saltier'],\n 'listerian': ['listerian', 'trisilane'],\n 'listerine': ['listerine', 'resilient'],\n 'listerize': ['listerize', 'sterilize'],\n 'listing': ['listing', 'silting'],\n 'listless': ['listless', 'slitless'],\n 'lisuarte': ['auletris', 'lisuarte'],\n 'lit': ['lit', 'til'],\n 'litas': ['alist', 'litas', 'slait', 'talis'],\n 'litchi': ['litchi', 'lithic'],\n 'lite': ['lite', 'teil', 'teli', 'tile'],\n 'liter': ['liter', 'tiler'],\n 'literal': ['literal', 'tallier'],\n 'literary': ['literary', 'trailery'],\n 'literate': ['laterite', 'literate', 'teretial'],\n 'literose': ['literose', 'roselite', 'tirolese'],\n 'lith': ['hilt', 'lith'],\n 'litharge': ['litharge', 'thirlage'],\n 'lithe': ['leith', 'lithe'],\n 'lithectomy': ['lithectomy', 'methylotic'],\n 'lithic': ['litchi', 'lithic'],\n 'litho': ['litho', 'thiol', 'tholi'],\n 'lithochromography': ['chromolithography', 'lithochromography'],\n 'lithocyst': ['cystolith', 'lithocyst'],\n 'lithonephria': ['lithonephria', 'philotherian'],\n 'lithonephrotomy': ['lithonephrotomy', 'nephrolithotomy'],\n 'lithophane': ['anthophile', 'lithophane'],\n 'lithophone': ['lithophone', 'thiophenol'],\n 'lithophotography': ['lithophotography', 'photolithography'],\n 'lithophysal': ['isophthalyl', 'lithophysal'],\n 'lithopone': ['lithopone', 'phonolite'],\n 'lithous': ['lithous', 'loutish'],\n 'litigate': ['litigate', 'tagilite'],\n 'litmus': ['litmus', 'tilmus'],\n 'litorina': ['liration', 'litorina'],\n 'litorinidae': ['idioretinal', 'litorinidae'],\n 'litra': ['litra', 'trail', 'trial'],\n 'litsea': ['isleta', 'litsea', 'salite', 'stelai'],\n 'litster': ['litster', 'slitter', 'stilter', 'testril'],\n 'litten': ['litten', 'tinlet'],\n 'litter': ['litter', 'tilter', 'titler'],\n 'littery': ['littery', 'tritely'],\n 'littoral': ['littoral', 'tortilla'],\n 'lituiform': ['lituiform', 'trifolium'],\n 'litus': ['litus', 'sluit', 'tulsi'],\n 'live': ['evil', 'levi', 'live', 'veil', 'vile', 'vlei'],\n 'lived': ['devil', 'divel', 'lived'],\n 'livedo': ['livedo', 'olived'],\n 'liveliness': ['liveliness', 'villeiness'],\n 'livelong': ['livelong', 'loveling'],\n 'lively': ['evilly', 'lively', 'vilely'],\n 'liven': ['levin', 'liven'],\n 'liveness': ['evilness', 'liveness', 'veinless', 'vileness', 'vineless'],\n 'liver': ['levir', 'liver', 'livre', 'rivel'],\n 'livered': ['deliver', 'deviler', 'livered'],\n 'livery': ['livery', 'verily'],\n 'livier': ['livier', 'virile'],\n 'livonian': ['livonian', 'violanin'],\n 'livre': ['levir', 'liver', 'livre', 'rivel'],\n 'liwan': ['inlaw', 'liwan'],\n 'llandeilo': ['diallelon', 'llandeilo'],\n 'llew': ['llew', 'well'],\n 'lloyd': ['dolly', 'lloyd'],\n 'loa': ['alo', 'lao', 'loa'],\n 'loach': ['chola', 'loach', 'olcha'],\n 'load': ['alod', 'dola', 'load', 'odal'],\n 'loaden': ['enodal', 'loaden'],\n 'loader': ['loader', 'ordeal', 'reload'],\n 'loading': ['angloid', 'loading'],\n 'loaf': ['foal', 'loaf', 'olaf'],\n 'loam': ['loam', 'loma', 'malo', 'mola', 'olam'],\n 'loaminess': ['loaminess', 'melanosis'],\n 'loaming': ['almoign', 'loaming'],\n 'loamy': ['amylo', 'loamy'],\n 'loaner': ['lenora', 'loaner', 'orlean', 'reloan'],\n 'loasa': ['alosa', 'loasa', 'oasal'],\n 'loath': ['altho', 'lhota', 'loath'],\n 'loather': ['loather', 'rathole'],\n 'loathly': ['loathly', 'tallyho'],\n 'lob': ['blo', 'lob'],\n 'lobar': ['balor', 'bolar', 'boral', 'labor', 'lobar'],\n 'lobate': ['lobate', 'oblate'],\n 'lobated': ['bloated', 'lobated'],\n 'lobately': ['lobately', 'oblately'],\n 'lobation': ['boltonia', 'lobation', 'oblation'],\n 'lobe': ['bleo', 'bole', 'lobe'],\n 'lobed': ['bodle', 'boled', 'lobed'],\n 'lobelet': ['bellote', 'lobelet'],\n 'lobelia': ['bolelia', 'lobelia', 'obelial'],\n 'lobing': ['globin', 'goblin', 'lobing'],\n 'lobo': ['bolo', 'bool', 'lobo', 'obol'],\n 'lobola': ['balolo', 'lobola'],\n 'lobscourse': ['lobscourse', 'lobscouser'],\n 'lobscouser': ['lobscourse', 'lobscouser'],\n 'lobster': ['bolster', 'lobster'],\n 'loca': ['alco', 'coal', 'cola', 'loca'],\n 'local': ['callo', 'colla', 'local'],\n 'locanda': ['acnodal', 'canadol', 'locanda'],\n 'locarnite': ['alectrion', 'clarionet', 'crotaline', 'locarnite'],\n 'locarnize': ['laconizer', 'locarnize'],\n 'locarno': ['coronal', 'locarno'],\n 'locate': ['acetol', 'colate', 'locate'],\n 'location': ['colation', 'coontail', 'location'],\n 'locational': ['allocation', 'locational'],\n 'locator': ['crotalo', 'locator'],\n 'loch': ['chol', 'loch'],\n 'lochan': ['chalon', 'lochan'],\n 'lochetic': ['helcotic', 'lochetic', 'ochletic'],\n 'lochus': ['holcus', 'lochus', 'slouch'],\n 'loci': ['clio', 'coil', 'coli', 'loci'],\n 'lociation': ['coalition', 'lociation'],\n 'lock': ['colk', 'lock'],\n 'locker': ['locker', 'relock'],\n 'lockpin': ['lockpin', 'pinlock'],\n 'lockram': ['lockram', 'marlock'],\n 'lockspit': ['lockspit', 'lopstick'],\n 'lockup': ['lockup', 'uplock'],\n 'loco': ['cool', 'loco'],\n 'locoweed': ['coolweed', 'locoweed'],\n 'locrian': ['carolin', 'clarion', 'colarin', 'locrian'],\n 'locrine': ['creolin', 'licorne', 'locrine'],\n 'loculate': ['allocute', 'loculate'],\n 'loculation': ['allocution', 'loculation'],\n 'locum': ['cumol', 'locum'],\n 'locusta': ['costula', 'locusta', 'talcous'],\n 'lod': ['dol', 'lod', 'old'],\n 'lode': ['dole', 'elod', 'lode', 'odel'],\n 'lodesman': ['dolesman', 'lodesman'],\n 'lodgeman': ['angeldom', 'lodgeman'],\n 'lodger': ['golder', 'lodger'],\n 'lodging': ['godling', 'lodging'],\n 'loess': ['loess', 'soles'],\n 'loessic': ['loessic', 'ossicle'],\n 'lof': ['flo', 'lof'],\n 'loft': ['flot', 'loft'],\n 'lofter': ['floret', 'forlet', 'lofter', 'torfel'],\n 'lofty': ['lofty', 'oftly'],\n 'log': ['gol', 'log'],\n 'logania': ['alogian', 'logania'],\n 'logarithm': ['algorithm', 'logarithm'],\n 'logarithmic': ['algorithmic', 'logarithmic'],\n 'loge': ['egol', 'goel', 'loge', 'ogle', 'oleg'],\n 'logger': ['logger', 'roggle'],\n 'logicalist': ['logicalist', 'logistical'],\n 'logicist': ['logicist', 'logistic'],\n 'login': ['lingo', 'login'],\n 'logistic': ['logicist', 'logistic'],\n 'logistical': ['logicalist', 'logistical'],\n 'logistics': ['glossitic', 'logistics'],\n 'logman': ['amlong', 'logman'],\n 'logographic': ['graphologic', 'logographic'],\n 'logographical': ['graphological', 'logographical'],\n 'logography': ['graphology', 'logography'],\n 'logoi': ['igloo', 'logoi'],\n 'logometrical': ['logometrical', 'metrological'],\n 'logos': ['gools', 'logos'],\n 'logotypy': ['logotypy', 'typology'],\n 'logria': ['gloria', 'larigo', 'logria'],\n 'logy': ['gloy', 'logy'],\n 'lohar': ['horal', 'lohar'],\n 'loin': ['lino', 'lion', 'loin', 'noil'],\n 'loined': ['doline', 'indole', 'leonid', 'loined', 'olenid'],\n 'loir': ['loir', 'lori', 'roil'],\n 'lois': ['lois', 'silo', 'siol', 'soil', 'soli'],\n 'loiter': ['loiter', 'toiler', 'triole'],\n 'loka': ['kalo', 'kola', 'loka'],\n 'lokao': ['lokao', 'oolak'],\n 'loke': ['koel', 'loke'],\n 'loket': ['ketol', 'loket'],\n 'lola': ['lalo', 'lola', 'olla'],\n 'loma': ['loam', 'loma', 'malo', 'mola', 'olam'],\n 'lomatine': ['lomatine', 'tolamine'],\n 'lombardian': ['laminboard', 'lombardian'],\n 'lomboy': ['bloomy', 'lomboy'],\n 'loment': ['loment', 'melton', 'molten'],\n 'lomentaria': ['ameliorant', 'lomentaria'],\n 'lomita': ['lomita', 'tomial'],\n 'lone': ['elon', 'enol', 'leno', 'leon', 'lone', 'noel'],\n 'longa': ['along', 'gonal', 'lango', 'longa', 'nogal'],\n 'longanimous': ['longanimous', 'longimanous'],\n 'longbeard': ['boglander', 'longbeard'],\n 'longear': ['argenol', 'longear'],\n 'longhead': ['headlong', 'longhead'],\n 'longimanous': ['longanimous', 'longimanous'],\n 'longimetry': ['longimetry', 'mongrelity'],\n 'longmouthed': ['goldenmouth', 'longmouthed'],\n 'longue': ['longue', 'lounge'],\n 'lonicera': ['acrolein',\n              'arecolin',\n              'caroline',\n              'colinear',\n              'cornelia',\n              'creolian',\n              'lonicera'],\n 'lontar': ['latron', 'lontar', 'tornal'],\n 'looby': ['booly', 'looby'],\n 'lood': ['dool', 'lood'],\n 'loof': ['fool', 'loof', 'olof'],\n 'look': ['kolo', 'look'],\n 'looker': ['looker', 'relook'],\n 'lookout': ['lookout', 'outlook'],\n 'loom': ['loom', 'mool'],\n 'loon': ['loon', 'nolo'],\n 'loop': ['loop', 'polo', 'pool'],\n 'looper': ['looper', 'pooler'],\n 'loopist': ['loopist', 'poloist', 'topsoil'],\n 'loopy': ['loopy', 'pooly'],\n 'loosing': ['loosing', 'sinolog'],\n 'loot': ['loot', 'tool'],\n 'looter': ['looter', 'retool', 'rootle', 'tooler'],\n 'lootie': ['lootie', 'oolite'],\n 'lop': ['lop', 'pol'],\n 'lope': ['lope', 'olpe', 'pole'],\n 'loper': ['loper', 'poler'],\n 'lopezia': ['epizoal', 'lopezia', 'opalize'],\n 'lophine': ['lophine', 'pinhole'],\n 'lophocomi': ['homopolic', 'lophocomi'],\n 'loppet': ['loppet', 'topple'],\n 'loppy': ['loppy', 'polyp'],\n 'lopstick': ['lockspit', 'lopstick'],\n 'loquacious': ['aquicolous', 'loquacious'],\n 'lora': ['lora', 'oral'],\n 'lorandite': ['lorandite', 'rodential'],\n 'lorate': ['elator', 'lorate'],\n 'lorcha': ['choral', 'lorcha'],\n 'lordly': ['drolly', 'lordly'],\n 'lore': ['lore', 'orle', 'role'],\n 'lored': ['lored', 'older'],\n 'loren': ['enrol', 'loren'],\n 'lori': ['loir', 'lori', 'roil'],\n 'lorica': ['caroli', 'corial', 'lorica'],\n 'loricate': ['calorite', 'erotical', 'loricate'],\n 'loricati': ['clitoria', 'loricati'],\n 'lorien': ['elinor', 'lienor', 'lorien', 'noiler'],\n 'loro': ['loro', 'olor', 'orlo', 'rool'],\n 'lose': ['lose', 'sloe', 'sole'],\n 'loser': ['loser', 'orsel', 'rosel', 'soler'],\n 'lost': ['lost', 'lots', 'slot'],\n 'lot': ['lot', 'tol'],\n 'lota': ['alto', 'lota'],\n 'lotase': ['lotase', 'osteal', 'solate', 'stolae', 'talose'],\n 'lote': ['leto', 'lote', 'tole'],\n 'lotic': ['cloit', 'lotic'],\n 'lotrite': ['lotrite', 'tortile', 'triolet'],\n 'lots': ['lost', 'lots', 'slot'],\n 'lotta': ['lotta', 'total'],\n 'lotter': ['lotter', 'rottle', 'tolter'],\n 'lottie': ['lottie', 'toilet', 'tolite'],\n 'lou': ['lou', 'luo'],\n 'loud': ['loud', 'ludo'],\n 'louden': ['louden', 'nodule'],\n 'lough': ['ghoul', 'lough'],\n 'lounder': ['durenol', 'lounder', 'roundel'],\n 'lounge': ['longue', 'lounge'],\n 'loupe': ['epulo', 'loupe'],\n 'lourdy': ['dourly', 'lourdy'],\n 'louse': ['eusol', 'louse'],\n 'lousy': ['lousy', 'souly'],\n 'lout': ['lout', 'tolu'],\n 'louter': ['elutor', 'louter', 'outler'],\n 'loutish': ['lithous', 'loutish'],\n 'louty': ['louty', 'outly'],\n 'louvar': ['louvar', 'ovular'],\n 'louver': ['louver', 'louvre'],\n 'louvre': ['louver', 'louvre'],\n 'lovable': ['lovable', 'volable'],\n 'lovage': ['lovage', 'volage'],\n 'love': ['levo', 'love', 'velo', 'vole'],\n 'loveling': ['livelong', 'loveling'],\n 'lovely': ['lovely', 'volley'],\n 'lovering': ['lovering', 'overling'],\n 'low': ['low', 'lwo', 'owl'],\n 'lowa': ['alow', 'awol', 'lowa'],\n 'lowder': ['lowder', 'weldor', 'wordle'],\n 'lower': ['lower', 'owler', 'rowel'],\n 'lowerer': ['lowerer', 'relower'],\n 'lowery': ['lowery', 'owlery', 'rowley', 'yowler'],\n 'lowish': ['lowish', 'owlish'],\n 'lowishly': ['lowishly', 'owlishly', 'sillyhow'],\n 'lowishness': ['lowishness', 'owlishness'],\n 'lowy': ['lowy', 'owly', 'yowl'],\n 'loyal': ['alloy', 'loyal'],\n 'loyalism': ['loyalism', 'lysiloma'],\n 'loyd': ['loyd', 'odyl'],\n 'luba': ['balu', 'baul', 'bual', 'luba'],\n 'lubber': ['burble', 'lubber', 'rubble'],\n 'lubberland': ['landlubber', 'lubberland'],\n 'lube': ['blue', 'lube'],\n 'lucan': ['lucan', 'nucal'],\n 'lucania': ['lucania', 'luciana'],\n 'lucanid': ['dulcian', 'incudal', 'lucanid', 'lucinda'],\n 'lucanidae': ['leucadian', 'lucanidae'],\n 'lucarne': ['crenula', 'lucarne', 'nuclear', 'unclear'],\n 'lucban': ['buncal', 'lucban'],\n 'luce': ['clue', 'luce'],\n 'luceres': ['luceres', 'recluse'],\n 'lucern': ['encurl', 'lucern'],\n 'lucernal': ['lucernal', 'nucellar', 'uncellar'],\n 'lucet': ['culet', 'lucet'],\n 'lucia': ['aulic', 'lucia'],\n 'lucian': ['cunila', 'lucian', 'lucina', 'uncial'],\n 'luciana': ['lucania', 'luciana'],\n 'lucifer': ['ferulic', 'lucifer'],\n 'lucigen': ['glucine', 'lucigen'],\n 'lucina': ['cunila', 'lucian', 'lucina', 'uncial'],\n 'lucinda': ['dulcian', 'incudal', 'lucanid', 'lucinda'],\n 'lucinoid': ['lucinoid', 'oculinid'],\n 'lucite': ['lucite', 'luetic', 'uletic'],\n 'lucrative': ['lucrative', 'revictual', 'victualer'],\n 'lucre': ['cruel', 'lucre', 'ulcer'],\n 'lucretia': ['arculite', 'cutleria', 'lucretia', 'reticula', 'treculia'],\n 'lucretian': ['centurial', 'lucretian', 'ultranice'],\n 'luctiferous': ['fruticulose', 'luctiferous'],\n 'lucubrate': ['lucubrate', 'tubercula'],\n 'ludden': ['ludden', 'nuddle'],\n 'luddite': ['diluted', 'luddite'],\n 'ludian': ['dualin', 'ludian', 'unlaid'],\n 'ludibry': ['buirdly', 'ludibry'],\n 'ludicroserious': ['ludicroserious', 'serioludicrous'],\n 'ludo': ['loud', 'ludo'],\n 'lue': ['leu', 'lue', 'ule'],\n 'lues': ['lues', 'slue'],\n 'luetic': ['lucite', 'luetic', 'uletic'],\n 'lug': ['gul', 'lug'],\n 'luge': ['glue', 'gule', 'luge'],\n 'luger': ['gluer', 'gruel', 'luger'],\n 'lugger': ['gurgle', 'lugger', 'ruggle'],\n 'lugnas': ['lugnas', 'salung'],\n 'lugsome': ['glumose', 'lugsome'],\n 'luian': ['inula', 'luian', 'uinal'],\n 'luiseno': ['elusion', 'luiseno'],\n 'luite': ['luite', 'utile'],\n 'lukas': ['klaus', 'lukas', 'sulka'],\n 'luke': ['leuk', 'luke'],\n 'lula': ['lula', 'ulla'],\n 'lulab': ['bulla', 'lulab'],\n 'lumbar': ['brumal', 'labrum', 'lumbar', 'umbral'],\n 'lumber': ['lumber', 'rumble', 'umbrel'],\n 'lumbosacral': ['lumbosacral', 'sacrolumbal'],\n 'lumine': ['lumine', 'unlime'],\n 'lump': ['lump', 'plum'],\n 'lumper': ['lumper', 'plumer', 'replum', 'rumple'],\n 'lumpet': ['lumpet', 'plumet'],\n 'lumpiness': ['lumpiness', 'pluminess'],\n 'lumpy': ['lumpy', 'plumy'],\n 'luna': ['laun', 'luna', 'ulna', 'unal'],\n 'lunacy': ['lunacy', 'unclay'],\n 'lunar': ['lunar', 'ulnar', 'urnal'],\n 'lunare': ['lunare', 'neural', 'ulnare', 'unreal'],\n 'lunaria': ['lunaria', 'ulnaria', 'uralian'],\n 'lunary': ['lunary', 'uranyl'],\n 'lunatic': ['calinut', 'lunatic'],\n 'lunation': ['lunation', 'ultonian'],\n 'lunda': ['dunal', 'laund', 'lunda', 'ulnad'],\n 'lung': ['gunl', 'lung'],\n 'lunge': ['leung', 'lunge'],\n 'lunged': ['gulden', 'lunged'],\n 'lungfish': ['flushing', 'lungfish'],\n 'lungsick': ['lungsick', 'suckling'],\n 'lunisolar': ['lunisolar', 'solilunar'],\n 'luo': ['lou', 'luo'],\n 'lupe': ['lupe', 'pelu', 'peul', 'pule'],\n 'luperci': ['luperci', 'pleuric'],\n 'lupicide': ['lupicide', 'pediculi', 'pulicide'],\n 'lupinaster': ['lupinaster', 'palustrine'],\n 'lupine': ['lupine', 'unpile', 'upline'],\n 'lupinus': ['lupinus', 'pinulus'],\n 'lupis': ['lupis', 'pilus'],\n 'lupous': ['lupous', 'opulus'],\n 'lura': ['alur', 'laur', 'lura', 'raul', 'ural'],\n 'lurch': ['churl', 'lurch'],\n 'lure': ['lure', 'rule'],\n 'lurer': ['lurer', 'ruler'],\n 'lurg': ['gurl', 'lurg'],\n 'luringly': ['luringly', 'rulingly'],\n 'luscinia': ['luscinia', 'siculian'],\n 'lush': ['lush', 'shlu', 'shul'],\n 'lusher': ['lusher', 'shuler'],\n 'lushly': ['hyllus', 'lushly'],\n 'lushness': ['lushness', 'shunless'],\n 'lusian': ['insula', 'lanius', 'lusian'],\n 'lusk': ['lusk', 'sulk'],\n 'lusky': ['lusky', 'sulky'],\n 'lusory': ['lusory', 'sourly'],\n 'lust': ['lust', 'slut'],\n 'luster': ['luster', 'result', 'rustle', 'sutler', 'ulster'],\n 'lusterless': ['lusterless', 'lustreless', 'resultless'],\n 'lustihead': ['hastilude', 'lustihead'],\n 'lustreless': ['lusterless', 'lustreless', 'resultless'],\n 'lustrine': ['insulter', 'lustrine', 'reinsult'],\n 'lustring': ['lustring', 'rustling'],\n 'lusty': ['lusty', 'tylus'],\n 'lutaceous': ['cautelous', 'lutaceous'],\n 'lutany': ['auntly', 'lutany'],\n 'lutayo': ['layout', 'lutayo', 'outlay'],\n 'lute': ['lute', 'tule'],\n 'luteal': ['alulet', 'luteal'],\n 'lutecia': ['aleutic', 'auletic', 'caulite', 'lutecia'],\n 'lutecium': ['cumulite', 'lutecium'],\n 'lutein': ['lutein', 'untile'],\n 'lutfisk': ['kistful', 'lutfisk'],\n 'luther': ['hurtle', 'luther'],\n 'lutheran': ['lutheran', 'unhalter'],\n 'lutianoid': ['lutianoid', 'nautiloid'],\n 'lutianus': ['lutianus', 'nautilus', 'ustulina'],\n 'luting': ['glutin', 'luting', 'ungilt'],\n 'lutose': ['lutose', 'solute', 'tousle'],\n 'lutra': ['lutra', 'ultra'],\n 'lutrinae': ['lutrinae', 'retinula', 'rutelian', 'tenurial'],\n 'luxe': ['luxe', 'ulex'],\n 'lwo': ['low', 'lwo', 'owl'],\n 'lyam': ['amyl', 'lyam', 'myal'],\n 'lyard': ['daryl', 'lardy', 'lyard'],\n 'lyas': ['lyas', 'slay'],\n 'lycaenid': ['adenylic', 'lycaenid'],\n 'lyceum': ['cymule', 'lyceum'],\n 'lycopodium': ['lycopodium', 'polycodium'],\n 'lyctidae': ['diacetyl', 'lyctidae'],\n 'lyddite': ['lyddite', 'tiddley'],\n 'lydia': ['daily', 'lydia'],\n 'lydite': ['idlety', 'lydite', 'tidely', 'tidley'],\n 'lye': ['ley', 'lye'],\n 'lying': ['lingy', 'lying'],\n 'lymnaeid': ['lymnaeid', 'maidenly', 'medianly'],\n 'lymphadenia': ['lymphadenia', 'nymphalidae'],\n 'lymphectasia': ['lymphectasia', 'metaphysical'],\n 'lymphopenia': ['lymphopenia', 'polyphemian'],\n 'lynne': ['lenny', 'lynne'],\n 'lyon': ['lyon', 'only'],\n 'lyophobe': ['hypobole', 'lyophobe'],\n 'lyra': ['aryl', 'lyra', 'ryal', 'yarl'],\n 'lyraid': ['aridly', 'lyraid'],\n 'lyrate': ['lyrate', 'raylet', 'realty', 'telary'],\n 'lyre': ['lyre', 'rely'],\n 'lyric': ['cyril', 'lyric'],\n 'lyrical': ['cyrilla', 'lyrical'],\n 'lyrid': ['idryl', 'lyrid'],\n 'lys': ['lys', 'sly'],\n 'lysander': ['lysander', 'synedral'],\n 'lysate': ['alytes', 'astely', 'lysate', 'stealy'],\n 'lyse': ['lyse', 'sley'],\n 'lysiloma': ['loyalism', 'lysiloma'],\n 'lysine': ['linsey', 'lysine'],\n 'lysogenetic': ['cleistogeny', 'lysogenetic'],\n 'lysogenic': ['glycosine', 'lysogenic'],\n 'lyssic': ['clysis', 'lyssic'],\n 'lyterian': ['interlay', 'lyterian'],\n 'lyxose': ['lyxose', 'xylose'],\n 'ma': ['am', 'ma'],\n 'maam': ['amma', 'maam'],\n 'mab': ['bam', 'mab'],\n 'maba': ['amba', 'maba'],\n 'mabel': ['amble', 'belam', 'blame', 'mabel'],\n 'mabi': ['iamb', 'mabi'],\n 'mabolo': ['abloom', 'mabolo'],\n 'mac': ['cam', 'mac'],\n 'macaca': ['camaca', 'macaca'],\n 'macaco': ['cocama', 'macaco'],\n 'macaglia': ['almaciga', 'macaglia'],\n 'macan': ['caman', 'macan'],\n 'macanese': ['macanese', 'maecenas'],\n 'macao': ['acoma', 'macao'],\n 'macarism': ['macarism', 'marasmic'],\n 'macaroni': ['armonica', 'macaroni', 'marocain'],\n 'macaronic': ['carcinoma', 'macaronic'],\n 'mace': ['acme', 'came', 'mace'],\n 'macedon': ['conamed', 'macedon'],\n 'macedonian': ['caedmonian', 'macedonian'],\n 'macedonic': ['caedmonic', 'macedonic'],\n 'macer': ['cream', 'macer'],\n 'macerate': ['camerate', 'macerate', 'racemate'],\n 'maceration': ['aeromantic', 'cameration', 'maceration', 'racemation'],\n 'machar': ['chamar', 'machar'],\n 'machi': ['chiam', 'machi', 'micah'],\n 'machilis': ['chiliasm', 'hilasmic', 'machilis'],\n 'machinator': ['achromatin', 'chariotman', 'machinator'],\n 'machine': ['chimane', 'machine'],\n 'machinery': ['hemicrany', 'machinery'],\n 'macies': ['camise', 'macies'],\n 'macigno': ['coaming', 'macigno'],\n 'macilency': ['cyclamine', 'macilency'],\n 'macle': ['camel', 'clame', 'cleam', 'macle'],\n 'maclura': ['maclura', 'macular'],\n 'maco': ['coma', 'maco'],\n 'macon': ['coman', 'macon', 'manoc'],\n 'maconite': ['coinmate', 'maconite'],\n 'macro': ['carom', 'coram', 'macro', 'marco'],\n 'macrobian': ['carbamino', 'macrobian'],\n 'macromazia': ['macromazia', 'macrozamia'],\n 'macrophage': ['cameograph', 'macrophage'],\n 'macrophotograph': ['macrophotograph', 'photomacrograph'],\n 'macrotia': ['aromatic', 'macrotia'],\n 'macrotin': ['macrotin', 'romantic'],\n 'macrourid': ['macrourid', 'macruroid'],\n 'macrourus': ['macrourus', 'macrurous'],\n 'macrozamia': ['macromazia', 'macrozamia'],\n 'macruroid': ['macrourid', 'macruroid'],\n 'macrurous': ['macrourus', 'macrurous'],\n 'mactra': ['mactra', 'tarmac'],\n 'macular': ['maclura', 'macular'],\n 'macule': ['almuce', 'caelum', 'macule'],\n 'maculose': ['maculose', 'somacule'],\n 'mad': ['dam', 'mad'],\n 'madden': ['damned', 'demand', 'madden'],\n 'maddening': ['demanding', 'maddening'],\n 'maddeningly': ['demandingly', 'maddeningly'],\n 'madder': ['dermad', 'madder'],\n 'made': ['dame', 'made', 'mead'],\n 'madeira': ['adermia', 'madeira'],\n 'madeiran': ['madeiran', 'marinade'],\n 'madeline': ['endemial', 'madeline'],\n 'madi': ['admi', 'amid', 'madi', 'maid'],\n 'madia': ['amadi', 'damia', 'madia', 'maida'],\n 'madiga': ['agamid', 'madiga'],\n 'madman': ['madman', 'nammad'],\n 'madnep': ['dampen', 'madnep'],\n 'madrid': ['madrid', 'riddam'],\n 'madrier': ['admirer', 'madrier', 'married'],\n 'madrilene': ['landimere', 'madrilene'],\n 'madrona': ['anadrom', 'madrona', 'mandora', 'monarda', 'roadman'],\n 'madship': ['dampish', 'madship', 'phasmid'],\n 'madurese': ['madurese', 'measured'],\n 'mae': ['ame', 'mae'],\n 'maecenas': ['macanese', 'maecenas'],\n 'maenad': ['anadem', 'maenad'],\n 'maenadism': ['maenadism', 'mandaeism'],\n 'maeonian': ['enomania', 'maeonian'],\n 'maestri': ['artemis', 'maestri', 'misrate'],\n 'maestro': ['maestro', 'tarsome'],\n 'mag': ['gam', 'mag'],\n 'magadis': ['gamasid', 'magadis'],\n 'magani': ['angami', 'magani', 'magian'],\n 'magas': ['agsam', 'magas'],\n 'mage': ['egma', 'game', 'mage'],\n 'magenta': ['gateman', 'magenta', 'magnate', 'magneta'],\n 'magian': ['angami', 'magani', 'magian'],\n 'magic': ['gamic', 'magic'],\n 'magister': ['gemarist', 'magister', 'sterigma'],\n 'magistrate': ['magistrate', 'sterigmata'],\n 'magma': ['gamma', 'magma'],\n 'magnate': ['gateman', 'magenta', 'magnate', 'magneta'],\n 'magnes': ['magnes', 'semang'],\n 'magneta': ['gateman', 'magenta', 'magnate', 'magneta'],\n 'magnetist': ['agistment', 'magnetist'],\n 'magneto': ['geomant', 'magneto', 'megaton', 'montage'],\n 'magnetod': ['magnetod', 'megadont'],\n 'magnetoelectric': ['electromagnetic', 'magnetoelectric'],\n 'magnetoelectrical': ['electromagnetical', 'magnetoelectrical'],\n 'magnolia': ['algomian', 'magnolia'],\n 'magnus': ['magnus', 'musang'],\n 'magpie': ['magpie', 'piemag'],\n 'magyar': ['magyar', 'margay'],\n 'mah': ['ham', 'mah'],\n 'maha': ['amah', 'maha'],\n 'mahar': ['amhar', 'mahar', 'mahra'],\n 'maharani': ['amiranha', 'maharani'],\n 'mahdism': ['dammish', 'mahdism'],\n 'mahdist': ['adsmith', 'mahdist'],\n 'mahi': ['hami', 'hima', 'mahi'],\n 'mahican': ['chamian', 'mahican'],\n 'mahogany': ['hogmanay', 'mahogany'],\n 'maholi': ['holmia', 'maholi'],\n 'maholtine': ['hematolin', 'maholtine'],\n 'mahori': ['homrai', 'mahori', 'mohair'],\n 'mahra': ['amhar', 'mahar', 'mahra'],\n 'mahran': ['amhran', 'harman', 'mahran'],\n 'mahri': ['hiram', 'ihram', 'mahri'],\n 'maia': ['amia', 'maia'],\n 'maid': ['admi', 'amid', 'madi', 'maid'],\n 'maida': ['amadi', 'damia', 'madia', 'maida'],\n 'maiden': ['daimen', 'damine', 'maiden', 'median', 'medina'],\n 'maidenism': ['maidenism', 'medianism'],\n 'maidenly': ['lymnaeid', 'maidenly', 'medianly'],\n 'maidish': ['hasidim', 'maidish'],\n 'maidism': ['amidism', 'maidism'],\n 'maigre': ['imager', 'maigre', 'margie', 'mirage'],\n 'maiidae': ['amiidae', 'maiidae'],\n 'mail': ['amil', 'amli', 'lima', 'mail', 'mali', 'mila'],\n 'mailed': ['aldime', 'mailed', 'medial'],\n 'mailer': ['mailer', 'remail'],\n 'mailie': ['emilia', 'mailie'],\n 'maim': ['ammi', 'imam', 'maim', 'mima'],\n 'main': ['amin', 'main', 'mani', 'mian', 'mina', 'naim'],\n 'maine': ['amine', 'anime', 'maine', 'manei'],\n 'mainly': ['amylin', 'mainly'],\n 'mainour': ['mainour', 'uramino'],\n 'mainpast': ['mainpast', 'mantispa', 'panamist', 'stampian'],\n 'mainprise': ['mainprise', 'presimian'],\n 'mains': ['mains', 'manis'],\n 'maint': ['maint', 'matin'],\n 'maintain': ['amanitin', 'maintain'],\n 'maintainer': ['antimerina', 'maintainer', 'remaintain'],\n 'maintop': ['maintop', 'ptomain', 'tampion', 'timpano'],\n 'maioid': ['daimio', 'maioid'],\n 'maioidean': ['anomiidae', 'maioidean'],\n 'maire': ['aimer', 'maire', 'marie', 'ramie'],\n 'maja': ['jama', 'maja'],\n 'majoon': ['majoon', 'moonja'],\n 'major': ['jarmo', 'major'],\n 'makah': ['hakam', 'makah'],\n 'makassar': ['makassar', 'samskara'],\n 'make': ['kame', 'make', 'meak'],\n 'maker': ['maker', 'marek', 'merak'],\n 'maki': ['akim', 'maki'],\n 'mako': ['amok', 'mako'],\n 'mal': ['lam', 'mal'],\n 'mala': ['alma', 'amla', 'lama', 'mala'],\n 'malacologist': ['malacologist', 'mastological'],\n 'malaga': ['agalma', 'malaga'],\n 'malagma': ['amalgam', 'malagma'],\n 'malakin': ['alkamin', 'malakin'],\n 'malanga': ['malanga', 'nagmaal'],\n 'malapert': ['armplate', 'malapert'],\n 'malapi': ['impala', 'malapi'],\n 'malar': ['alarm', 'malar', 'maral', 'marla', 'ramal'],\n 'malarin': ['lairman', 'laminar', 'malarin', 'railman'],\n 'malate': ['malate', 'meatal', 'tamale'],\n 'malcreated': ['cradlemate', 'malcreated'],\n 'maldonite': ['antimodel', 'maldonite', 'monilated'],\n 'male': ['alem', 'alme', 'lame', 'leam', 'male', 'meal', 'mela'],\n 'maleficiation': ['amelification', 'maleficiation'],\n 'maleic': ['maleic', 'malice', 'melica'],\n 'maleinoid': ['alimonied', 'maleinoid'],\n 'malella': ['lamella', 'malella', 'malleal'],\n 'maleness': ['lameness', 'maleness', 'maneless', 'nameless'],\n 'malengine': ['enameling', 'malengine', 'meningeal'],\n 'maleo': ['amole', 'maleo'],\n 'malfed': ['flamed', 'malfed'],\n 'malhonest': ['malhonest', 'mashelton'],\n 'mali': ['amil', 'amli', 'lima', 'mail', 'mali', 'mila'],\n 'malic': ['claim', 'clima', 'malic'],\n 'malice': ['maleic', 'malice', 'melica'],\n 'malicho': ['chiloma', 'malicho'],\n 'maligner': ['germinal', 'maligner', 'malinger'],\n 'malikana': ['kalamian', 'malikana'],\n 'maline': ['limean', 'maline', 'melian', 'menial'],\n 'malines': ['malines', 'salmine', 'selamin', 'seminal'],\n 'malinger': ['germinal', 'maligner', 'malinger'],\n 'malison': ['malison', 'manolis', 'osmanli', 'somnial'],\n 'malladrite': ['armillated', 'malladrite', 'mallardite'],\n 'mallardite': ['armillated', 'malladrite', 'mallardite'],\n 'malleal': ['lamella', 'malella', 'malleal'],\n 'mallein': ['mallein', 'manille'],\n 'malleoincudal': ['incudomalleal', 'malleoincudal'],\n 'malleus': ['amellus', 'malleus'],\n 'malmaison': ['anomalism', 'malmaison'],\n 'malmy': ['lammy', 'malmy'],\n 'malo': ['loam', 'loma', 'malo', 'mola', 'olam'],\n 'malonic': ['limacon', 'malonic'],\n 'malonyl': ['allonym', 'malonyl'],\n 'malope': ['aplome', 'malope'],\n 'malpoise': ['malpoise', 'semiopal'],\n 'malposed': ['malposed', 'plasmode'],\n 'maltase': ['asmalte', 'maltase'],\n 'malter': ['armlet', 'malter', 'martel'],\n 'maltese': ['maltese', 'seamlet'],\n 'malthe': ['hamlet', 'malthe'],\n 'malurinae': ['malurinae', 'melanuria'],\n 'malurine': ['lemurian', 'malurine', 'rumelian'],\n 'malurus': ['malurus', 'ramulus'],\n 'malus': ['lamus', 'malus', 'musal', 'slaum'],\n 'mamers': ['mamers', 'sammer'],\n 'mamo': ['ammo', 'mamo'],\n 'man': ['man', 'nam'],\n 'mana': ['anam', 'mana', 'naam', 'nama'],\n 'manacle': ['laceman', 'manacle'],\n 'manacus': ['manacus', 'samucan'],\n 'manage': ['agname', 'manage'],\n 'manager': ['gearman', 'manager'],\n 'manal': ['alman', 'lamna', 'manal'],\n 'manas': ['manas', 'saman'],\n 'manatee': ['emanate', 'manatee'],\n 'manatine': ['annamite', 'manatine'],\n 'manbird': ['birdman', 'manbird'],\n 'manchester': ['manchester', 'searchment'],\n 'mand': ['damn', 'mand'],\n 'mandaeism': ['maenadism', 'mandaeism'],\n 'mandaite': ['animated', 'mandaite', 'mantidae'],\n 'mandarin': ['drainman', 'mandarin'],\n 'mandation': ['damnation', 'mandation'],\n 'mandatory': ['damnatory', 'mandatory'],\n 'mande': ['amend', 'mande', 'maned'],\n 'mandelate': ['aldeament', 'mandelate'],\n 'mandil': ['lamnid', 'mandil'],\n 'mandola': ['mandola', 'odalman'],\n 'mandora': ['anadrom', 'madrona', 'mandora', 'monarda', 'roadman'],\n 'mandra': ['mandra', 'radman'],\n 'mandrill': ['drillman', 'mandrill'],\n 'mandyas': ['daysman', 'mandyas'],\n 'mane': ['amen', 'enam', 'mane', 'mean', 'name', 'nema'],\n 'maned': ['amend', 'mande', 'maned'],\n 'manege': ['gamene', 'manege', 'menage'],\n 'manei': ['amine', 'anime', 'maine', 'manei'],\n 'maneless': ['lameness', 'maleness', 'maneless', 'nameless'],\n 'manent': ['manent', 'netman'],\n 'manerial': ['almerian', 'manerial'],\n 'manes': ['manes', 'manse', 'mensa', 'samen', 'senam'],\n 'maness': ['enmass', 'maness', 'messan'],\n 'manettia': ['antietam', 'manettia'],\n 'maney': ['maney', 'yamen'],\n 'manga': ['amang', 'ganam', 'manga'],\n 'mangar': ['amgarn', 'mangar', 'marang', 'ragman'],\n 'mangel': ['legman', 'mangel', 'mangle'],\n 'mangelin': ['mangelin', 'nameling'],\n 'manger': ['engram', 'german', 'manger'],\n 'mangerite': ['germanite', 'germinate', 'gramenite', 'mangerite'],\n 'mangi': ['gamin', 'mangi'],\n 'mangle': ['legman', 'mangel', 'mangle'],\n 'mango': ['among', 'mango'],\n 'mangrass': ['grassman', 'mangrass'],\n 'mangrate': ['grateman', 'mangrate', 'mentagra', 'targeman'],\n 'mangue': ['mangue', 'maunge'],\n 'manhead': ['headman', 'manhead'],\n 'manhole': ['holeman', 'manhole'],\n 'manhood': ['dhamnoo', 'hoodman', 'manhood'],\n 'mani': ['amin', 'main', 'mani', 'mian', 'mina', 'naim'],\n 'mania': ['amain', 'amani', 'amnia', 'anima', 'mania'],\n 'maniable': ['animable', 'maniable'],\n 'maniac': ['amniac', 'caiman', 'maniac'],\n 'manic': ['amnic', 'manic'],\n 'manid': ['dimna', 'manid'],\n 'manidae': ['adamine', 'manidae'],\n 'manify': ['infamy', 'manify'],\n 'manila': ['almain', 'animal', 'lamina', 'manila'],\n 'manilla': ['alnilam', 'manilla'],\n 'manille': ['mallein', 'manille'],\n 'manioc': ['camion', 'conima', 'manioc', 'monica'],\n 'maniple': ['impanel', 'maniple'],\n 'manipuri': ['manipuri', 'unimpair'],\n 'manis': ['mains', 'manis'],\n 'manist': ['manist', 'mantis', 'matins', 'stamin'],\n 'manistic': ['actinism', 'manistic'],\n 'manito': ['atimon', 'manito', 'montia'],\n 'maniu': ['maniu', 'munia', 'unami'],\n 'manius': ['animus', 'anisum', 'anusim', 'manius'],\n 'maniva': ['maniva', 'vimana'],\n 'manlet': ['lament', 'manlet', 'mantel', 'mantle', 'mental'],\n 'manna': ['annam', 'manna'],\n 'mannite': ['mannite', 'tineman'],\n 'mannonic': ['cinnamon', 'mannonic'],\n 'mano': ['mano', 'moan', 'mona', 'noam', 'noma', 'oman'],\n 'manoc': ['coman', 'macon', 'manoc'],\n 'manolis': ['malison', 'manolis', 'osmanli', 'somnial'],\n 'manometrical': ['commentarial', 'manometrical'],\n 'manometry': ['manometry', 'momentary'],\n 'manor': ['manor', 'moran', 'norma', 'ramon', 'roman'],\n 'manorial': ['manorial', 'morainal'],\n 'manorship': ['manorship', 'orphanism'],\n 'manoscope': ['manoscope', 'moonscape'],\n 'manred': ['damner', 'manred', 'randem', 'remand'],\n 'manrent': ['manrent', 'remnant'],\n 'manrope': ['manrope', 'ropeman'],\n 'manse': ['manes', 'manse', 'mensa', 'samen', 'senam'],\n 'manship': ['manship', 'shipman'],\n 'mansion': ['mansion', 'onanism'],\n 'mansioneer': ['emersonian', 'mansioneer'],\n 'manslaughter': ['manslaughter', 'slaughterman'],\n 'manso': ['manso', 'mason', 'monas'],\n 'manta': ['atman', 'manta'],\n 'mantel': ['lament', 'manlet', 'mantel', 'mantle', 'mental'],\n 'manteline': ['lineament', 'manteline'],\n 'manter': ['manter', 'marten', 'rament'],\n 'mantes': ['mantes', 'stamen'],\n 'manticore': ['cremation', 'manticore'],\n 'mantidae': ['animated', 'mandaite', 'mantidae'],\n 'mantis': ['manist', 'mantis', 'matins', 'stamin'],\n 'mantispa': ['mainpast', 'mantispa', 'panamist', 'stampian'],\n 'mantissa': ['mantissa', 'satanism'],\n 'mantle': ['lament', 'manlet', 'mantel', 'mantle', 'mental'],\n 'manto': ['manto', 'toman'],\n 'mantodea': ['mantodea', 'nematoda'],\n 'mantoidea': ['diatomean', 'mantoidea'],\n 'mantra': ['mantra', 'tarman'],\n 'mantrap': ['mantrap', 'rampant'],\n 'mantua': ['anatum', 'mantua', 'tamanu'],\n 'manual': ['alumna', 'manual'],\n 'manualism': ['manualism', 'musalmani'],\n 'manualiter': ['manualiter', 'unmaterial'],\n 'manuel': ['manuel', 'unlame'],\n 'manul': ['lanum', 'manul'],\n 'manuma': ['amunam', 'manuma'],\n 'manure': ['manure', 'menura'],\n 'manward': ['manward', 'wardman'],\n 'manwards': ['manwards', 'wardsman'],\n 'manway': ['manway', 'wayman'],\n 'manwise': ['manwise', 'wiseman'],\n 'many': ['many', 'myna'],\n 'mao': ['mao', 'oam'],\n 'maori': ['maori', 'mario', 'moira'],\n 'map': ['map', 'pam'],\n 'mapach': ['champa', 'mapach'],\n 'maple': ['ample', 'maple'],\n 'mapper': ['mapper', 'pamper', 'pampre'],\n 'mar': ['arm', 'mar', 'ram'],\n 'mara': ['amar', 'amra', 'mara', 'rama'],\n 'marabout': ['marabout', 'marabuto', 'tamboura'],\n 'marabuto': ['marabout', 'marabuto', 'tamboura'],\n 'maraca': ['acamar', 'camara', 'maraca'],\n 'maral': ['alarm', 'malar', 'maral', 'marla', 'ramal'],\n 'marang': ['amgarn', 'mangar', 'marang', 'ragman'],\n 'mararie': ['armeria', 'mararie'],\n 'marasca': ['marasca', 'mascara'],\n 'maraschino': ['anachorism', 'chorasmian', 'maraschino'],\n 'marasmic': ['macarism', 'marasmic'],\n 'marbelize': ['marbelize', 'marbleize'],\n 'marble': ['ambler', 'blamer', 'lamber', 'marble', 'ramble'],\n 'marbleize': ['marbelize', 'marbleize'],\n 'marbler': ['marbler', 'rambler'],\n 'marbling': ['marbling', 'rambling'],\n 'marc': ['cram', 'marc'],\n 'marcan': ['carman', 'marcan'],\n 'marcel': ['calmer', 'carmel', 'clamer', 'marcel', 'mercal'],\n 'marcescent': ['marcescent', 'scarcement'],\n 'march': ['charm', 'march'],\n 'marcher': ['charmer', 'marcher', 'remarch'],\n 'marchite': ['athermic', 'marchite', 'rhematic'],\n 'marchpane': ['marchpane', 'preachman'],\n 'marci': ['marci', 'mirac'],\n 'marcionist': ['marcionist', 'romanistic'],\n 'marcionite': ['marcionite', 'microtinae', 'remication'],\n 'marco': ['carom', 'coram', 'macro', 'marco'],\n 'marconi': ['amicron', 'marconi', 'minorca', 'romanic'],\n 'mare': ['erma', 'mare', 'rame', 'ream'],\n 'mareca': ['acream', 'camera', 'mareca'],\n 'marek': ['maker', 'marek', 'merak'],\n 'marengo': ['marengo', 'megaron'],\n 'mareotid': ['mareotid', 'mediator'],\n 'marfik': ['marfik', 'mirfak'],\n 'marfire': ['firearm', 'marfire'],\n 'margay': ['magyar', 'margay'],\n 'marge': ['grame', 'marge', 'regma'],\n 'margeline': ['margeline', 'regimenal'],\n 'margent': ['garment', 'margent'],\n 'margie': ['imager', 'maigre', 'margie', 'mirage'],\n 'margin': ['arming', 'ingram', 'margin'],\n 'marginal': ['alarming', 'marginal'],\n 'marginally': ['alarmingly', 'marginally'],\n 'marginate': ['armangite', 'marginate'],\n 'marginated': ['argentamid', 'marginated'],\n 'margined': ['dirgeman', 'margined', 'midrange'],\n 'marginiform': ['graminiform', 'marginiform'],\n 'margot': ['gomart', 'margot'],\n 'marhala': ['harmala', 'marhala'],\n 'mari': ['amir', 'irma', 'mari', 'mira', 'rami', 'rima'],\n 'marialite': ['latimeria', 'marialite'],\n 'marian': ['airman', 'amarin', 'marian', 'marina', 'mirana'],\n 'mariana': ['aramina', 'mariana'],\n 'marianne': ['armenian', 'marianne'],\n 'marie': ['aimer', 'maire', 'marie', 'ramie'],\n 'marigenous': ['germanious', 'gramineous', 'marigenous'],\n 'marilla': ['armilla', 'marilla'],\n 'marina': ['airman', 'amarin', 'marian', 'marina', 'mirana'],\n 'marinade': ['madeiran', 'marinade'],\n 'marinate': ['animater', 'marinate'],\n 'marine': ['ermani', 'marine', 'remain'],\n 'marinist': ['marinist', 'mistrain'],\n 'mario': ['maori', 'mario', 'moira'],\n 'marion': ['marion', 'romain'],\n 'mariou': ['mariou', 'oarium'],\n 'maris': ['maris', 'marsi', 'samir', 'simar'],\n 'marish': ['marish', 'shamir'],\n 'marishness': ['marishness', 'marshiness'],\n 'marist': ['marist', 'matris', 'ramist'],\n 'maritage': ['gematria', 'maritage'],\n 'marital': ['marital', 'martial'],\n 'maritality': ['maritality', 'martiality'],\n 'maritally': ['maritally', 'martially'],\n 'marka': ['karma', 'krama', 'marka'],\n 'markeb': ['embark', 'markeb'],\n 'marked': ['demark', 'marked'],\n 'marker': ['marker', 'remark'],\n 'marketable': ['marketable', 'tablemaker'],\n 'marketeer': ['marketeer', 'treemaker'],\n 'marketer': ['marketer', 'remarket'],\n 'marko': ['marko', 'marok'],\n 'marla': ['alarm', 'malar', 'maral', 'marla', 'ramal'],\n 'marled': ['dermal', 'marled', 'medlar'],\n 'marli': ['armil', 'marli', 'rimal'],\n 'marline': ['marline', 'mineral', 'ramline'],\n 'marlite': ['lamiter', 'marlite'],\n 'marlock': ['lockram', 'marlock'],\n 'maro': ['amor', 'maro', 'mora', 'omar', 'roam'],\n 'marocain': ['armonica', 'macaroni', 'marocain'],\n 'marok': ['marko', 'marok'],\n 'maronian': ['maronian', 'romanian'],\n 'maronist': ['maronist', 'romanist'],\n 'maronite': ['maronite', 'martinoe', 'minorate', 'morenita', 'romanite'],\n 'marquesan': ['marquesan', 'squareman'],\n 'marquis': ['asquirm', 'marquis'],\n 'marree': ['marree', 'reamer'],\n 'married': ['admirer', 'madrier', 'married'],\n 'marrot': ['marrot', 'mortar'],\n 'marrowed': ['marrowed', 'romeward'],\n 'marryer': ['marryer', 'remarry'],\n 'mars': ['arms', 'mars'],\n 'marsh': ['marsh', 'shram'],\n 'marshaler': ['marshaler', 'remarshal'],\n 'marshiness': ['marishness', 'marshiness'],\n 'marshite': ['arthemis', 'marshite', 'meharist'],\n 'marsi': ['maris', 'marsi', 'samir', 'simar'],\n 'marsipobranchiata': ['basiparachromatin', 'marsipobranchiata'],\n 'mart': ['mart', 'tram'],\n 'martel': ['armlet', 'malter', 'martel'],\n 'marteline': ['alimenter', 'marteline'],\n 'marten': ['manter', 'marten', 'rament'],\n 'martes': ['martes', 'master', 'remast', 'stream'],\n 'martha': ['amarth', 'martha'],\n 'martial': ['marital', 'martial'],\n 'martiality': ['maritality', 'martiality'],\n 'martially': ['maritally', 'martially'],\n 'martian': ['martian', 'tamarin'],\n 'martinet': ['intermat', 'martinet', 'tetramin'],\n 'martinico': ['martinico', 'mortician'],\n 'martinoe': ['maronite', 'martinoe', 'minorate', 'morenita', 'romanite'],\n 'martite': ['martite', 'mitrate'],\n 'martius': ['martius', 'matsuri', 'maurist'],\n 'martu': ['martu', 'murat', 'turma'],\n 'marty': ['marty', 'tryma'],\n 'maru': ['arum', 'maru', 'mura'],\n 'mary': ['army', 'mary', 'myra', 'yarm'],\n 'marylander': ['aldermanry', 'marylander'],\n 'marysole': ['marysole', 'ramosely'],\n 'mas': ['mas', 'sam', 'sma'],\n 'mascara': ['marasca', 'mascara'],\n 'mascotry': ['arctomys', 'costmary', 'mascotry'],\n 'masculine': ['masculine', 'semuncial', 'simulance'],\n 'masculist': ['masculist', 'simulcast'],\n 'masdeu': ['amused', 'masdeu', 'medusa'],\n 'mash': ['mash', 'samh', 'sham'],\n 'masha': ['hamsa', 'masha', 'shama'],\n 'mashal': ['mashal', 'shamal'],\n 'mashelton': ['malhonest', 'mashelton'],\n 'masher': ['masher', 'ramesh', 'shamer'],\n 'mashy': ['mashy', 'shyam'],\n 'mask': ['kasm', 'mask'],\n 'masker': ['masker', 'remask'],\n 'mason': ['manso', 'mason', 'monas'],\n 'masoner': ['masoner', 'romanes'],\n 'masonic': ['anosmic', 'masonic'],\n 'masonite': ['masonite', 'misatone'],\n 'maspiter': ['maspiter', 'pastimer', 'primates'],\n 'masque': ['masque', 'squame', 'squeam'],\n 'massa': ['amass', 'assam', 'massa', 'samas'],\n 'masse': ['masse', 'sesma'],\n 'masser': ['masser', 'remass'],\n 'masseter': ['masseter', 'seamster'],\n 'masseur': ['assumer', 'erasmus', 'masseur'],\n 'massicot': ['acosmist', 'massicot', 'somatics'],\n 'massiness': ['amissness', 'massiness'],\n 'masskanne': ['masskanne', 'sneaksman'],\n 'mast': ['mast', 'mats', 'stam'],\n 'masted': ['demast', 'masted'],\n 'master': ['martes', 'master', 'remast', 'stream'],\n 'masterate': ['masterate', 'metatarse'],\n 'masterer': ['masterer', 'restream', 'streamer'],\n 'masterful': ['masterful', 'streamful'],\n 'masterless': ['masterless', 'streamless'],\n 'masterlike': ['masterlike', 'streamlike'],\n 'masterling': ['masterling', 'streamling'],\n 'masterly': ['masterly', 'myrtales'],\n 'mastership': ['mastership', 'shipmaster'],\n 'masterwork': ['masterwork', 'workmaster'],\n 'masterwort': ['masterwort', 'streamwort'],\n 'mastery': ['mastery', 'streamy'],\n 'mastic': ['mastic', 'misact'],\n 'masticable': ['ablastemic', 'masticable'],\n 'mastiche': ['mastiche', 'misteach'],\n 'mastlike': ['kemalist', 'mastlike'],\n 'mastoid': ['distoma', 'mastoid'],\n 'mastoidale': ['diatomales', 'mastoidale', 'mastoideal'],\n 'mastoideal': ['diatomales', 'mastoidale', 'mastoideal'],\n 'mastological': ['malacologist', 'mastological'],\n 'mastomenia': ['mastomenia', 'seminomata'],\n 'mastotomy': ['mastotomy', 'stomatomy'],\n 'masu': ['masu', 'musa', 'saum'],\n 'mat': ['amt', 'mat', 'tam'],\n 'matacan': ['matacan', 'tamanac'],\n 'matai': ['amati', 'amita', 'matai'],\n 'matar': ['matar', 'matra', 'trama'],\n 'matara': ['armata', 'matara', 'tamara'],\n 'matcher': ['matcher', 'rematch'],\n 'mate': ['mate', 'meat', 'meta', 'tame', 'team', 'tema'],\n 'mateless': ['mateless', 'meatless', 'tameless', 'teamless'],\n 'matelessness': ['matelessness', 'tamelessness'],\n 'mately': ['mately', 'tamely'],\n 'mater': ['armet',\n           'mater',\n           'merat',\n           'metra',\n           'ramet',\n           'tamer',\n           'terma',\n           'trame',\n           'trema'],\n 'materialism': ['immaterials', 'materialism'],\n 'materiel': ['eremital', 'materiel'],\n 'maternal': ['maternal', 'ramental'],\n 'maternology': ['laryngotome', 'maternology'],\n 'mateship': ['aphetism', 'mateship', 'shipmate', 'spithame'],\n 'matey': ['matey', 'meaty'],\n 'mathesis': ['mathesis', 'thamesis'],\n 'mathetic': ['mathetic', 'thematic'],\n 'matico': ['atomic', 'matico'],\n 'matin': ['maint', 'matin'],\n 'matinee': ['amenite', 'etamine', 'matinee'],\n 'matins': ['manist', 'mantis', 'matins', 'stamin'],\n 'matra': ['matar', 'matra', 'trama'],\n 'matral': ['matral', 'tramal'],\n 'matralia': ['altamira', 'matralia'],\n 'matrices': ['camerist', 'ceramist', 'matrices'],\n 'matricide': ['citramide', 'diametric', 'matricide'],\n 'matricula': ['lactarium', 'matricula'],\n 'matricular': ['matricular', 'trimacular'],\n 'matris': ['marist', 'matris', 'ramist'],\n 'matrocliny': ['matrocliny', 'romanticly'],\n 'matronism': ['matronism', 'romantism'],\n 'mats': ['mast', 'mats', 'stam'],\n 'matsu': ['matsu', 'tamus', 'tsuma'],\n 'matsuri': ['martius', 'matsuri', 'maurist'],\n 'matter': ['matter', 'mettar'],\n 'mattoir': ['mattoir', 'tritoma'],\n 'maturable': ['maturable', 'metabular'],\n 'maturation': ['maturation', 'natatorium'],\n 'maturer': ['erratum', 'maturer'],\n 'mau': ['aum', 'mau'],\n 'maud': ['duma', 'maud'],\n 'maudle': ['almude', 'maudle'],\n 'mauger': ['mauger', 'murage'],\n 'maul': ['alum', 'maul'],\n 'mauler': ['mauler', 'merula', 'ramule'],\n 'maun': ['maun', 'numa'],\n 'maund': ['maund', 'munda', 'numda', 'undam', 'unmad'],\n 'maunder': ['duramen', 'maunder', 'unarmed'],\n 'maunderer': ['maunderer', 'underream'],\n 'maunge': ['mangue', 'maunge'],\n 'maureen': ['maureen', 'menurae'],\n 'maurice': ['maurice', 'uraemic'],\n 'maurist': ['martius', 'matsuri', 'maurist'],\n 'mauser': ['amuser', 'mauser'],\n 'mavis': ['amvis', 'mavis'],\n 'maw': ['maw', 'mwa'],\n 'mawp': ['mawp', 'wamp'],\n 'may': ['amy', 'may', 'mya', 'yam'],\n 'maybe': ['beamy', 'embay', 'maybe'],\n 'mayer': ['mayer', 'reamy'],\n 'maylike': ['maylike', 'yamilke'],\n 'mayo': ['amoy', 'mayo'],\n 'mayor': ['mayor', 'moray'],\n 'maypoling': ['maypoling', 'pygmalion'],\n 'maysin': ['maysin', 'minyas', 'mysian'],\n 'maytide': ['daytime', 'maytide'],\n 'mazer': ['mazer', 'zerma'],\n 'mazur': ['mazur', 'murza'],\n 'mbaya': ['ambay', 'mbaya'],\n 'me': ['em', 'me'],\n 'meable': ['bemeal', 'meable'],\n 'mead': ['dame', 'made', 'mead'],\n 'meader': ['meader', 'remade'],\n 'meager': ['graeme', 'meager', 'meagre'],\n 'meagre': ['graeme', 'meager', 'meagre'],\n 'meak': ['kame', 'make', 'meak'],\n 'meal': ['alem', 'alme', 'lame', 'leam', 'male', 'meal', 'mela'],\n 'mealer': ['leamer', 'mealer'],\n 'mealiness': ['mealiness', 'messaline'],\n 'mealy': ['mealy', 'yamel'],\n 'mean': ['amen', 'enam', 'mane', 'mean', 'name', 'nema'],\n 'meander': ['amender', 'meander', 'reamend', 'reedman'],\n 'meandrite': ['demetrian', 'dermatine', 'meandrite', 'minareted'],\n 'meandrous': ['meandrous', 'roundseam'],\n 'meaned': ['amende', 'demean', 'meaned', 'nadeem'],\n 'meaner': ['enarme', 'meaner', 'rename'],\n 'meanly': ['meanly', 'namely'],\n 'meant': ['ament', 'meant', 'teman'],\n 'mease': ['emesa', 'mease'],\n 'measly': ['measly', 'samely'],\n 'measuration': ['aeronautism', 'measuration'],\n 'measure': ['measure', 'reamuse'],\n 'measured': ['madurese', 'measured'],\n 'meat': ['mate', 'meat', 'meta', 'tame', 'team', 'tema'],\n 'meatal': ['malate', 'meatal', 'tamale'],\n 'meatless': ['mateless', 'meatless', 'tameless', 'teamless'],\n 'meatman': ['meatman', 'teamman'],\n 'meatus': ['meatus', 'mutase'],\n 'meaty': ['matey', 'meaty'],\n 'mechanal': ['leachman', 'mechanal'],\n 'mechanicochemical': ['chemicomechanical', 'mechanicochemical'],\n 'mechanics': ['mechanics', 'mischance'],\n 'mechir': ['chimer', 'mechir', 'micher'],\n 'mecometry': ['cymometer', 'mecometry'],\n 'meconic': ['comenic', 'encomic', 'meconic'],\n 'meconin': ['ennomic', 'meconin'],\n 'meconioid': ['meconioid', 'monoeidic'],\n 'meconium': ['encomium', 'meconium'],\n 'mecopteron': ['mecopteron', 'protocneme'],\n 'medal': ['demal', 'medal'],\n 'medallary': ['alarmedly', 'medallary'],\n 'mede': ['deem', 'deme', 'mede', 'meed'],\n 'media': ['amide', 'damie', 'media'],\n 'mediacy': ['dicyema', 'mediacy'],\n 'mediad': ['diadem', 'mediad'],\n 'medial': ['aldime', 'mailed', 'medial'],\n 'median': ['daimen', 'damine', 'maiden', 'median', 'medina'],\n 'medianism': ['maidenism', 'medianism'],\n 'medianly': ['lymnaeid', 'maidenly', 'medianly'],\n 'mediator': ['mareotid', 'mediator'],\n 'mediatress': ['mediatress', 'streamside'],\n 'mediatrice': ['acidimeter', 'mediatrice'],\n 'medical': ['camelid', 'decimal', 'declaim', 'medical'],\n 'medically': ['decimally', 'medically'],\n 'medicate': ['decimate', 'medicate'],\n 'medication': ['decimation', 'medication'],\n 'medicator': ['decimator', 'medicator', 'mordicate'],\n 'medicatory': ['acidometry', 'medicatory', 'radiectomy'],\n 'medicinal': ['adminicle', 'medicinal'],\n 'medicophysical': ['medicophysical', 'physicomedical'],\n 'medimnos': ['demonism', 'medimnos', 'misnomed'],\n 'medina': ['daimen', 'damine', 'maiden', 'median', 'medina'],\n 'medino': ['domine', 'domnei', 'emodin', 'medino'],\n 'mediocrist': ['dosimetric', 'mediocrist'],\n 'mediocrity': ['iridectomy', 'mediocrity'],\n 'mediodorsal': ['dorsomedial', 'mediodorsal'],\n 'medioventral': ['medioventral', 'ventromedial'],\n 'meditate': ['admittee', 'meditate'],\n 'meditator': ['meditator', 'trematoid'],\n 'medlar': ['dermal', 'marled', 'medlar'],\n 'medusa': ['amused', 'masdeu', 'medusa'],\n 'medusan': ['medusan', 'sudamen'],\n 'meece': ['emcee', 'meece'],\n 'meed': ['deem', 'deme', 'mede', 'meed'],\n 'meeks': ['meeks', 'smeek'],\n 'meered': ['deemer', 'meered', 'redeem', 'remede'],\n 'meet': ['meet', 'mete', 'teem'],\n 'meeter': ['meeter', 'remeet', 'teemer'],\n 'meethelp': ['helpmeet', 'meethelp'],\n 'meeting': ['meeting', 'teeming', 'tegmine'],\n 'meg': ['gem', 'meg'],\n 'megabar': ['bergama', 'megabar'],\n 'megachiropteran': ['cinematographer', 'megachiropteran'],\n 'megadont': ['magnetod', 'megadont'],\n 'megadyne': ['ganymede', 'megadyne'],\n 'megaera': ['megaera', 'reamage'],\n 'megalodon': ['megalodon', 'moonglade'],\n 'megalohepatia': ['hepatomegalia', 'megalohepatia'],\n 'megalophonous': ['megalophonous', 'omphalogenous'],\n 'megalosplenia': ['megalosplenia', 'splenomegalia'],\n 'megapod': ['megapod', 'pagedom'],\n 'megapodius': ['megapodius', 'pseudimago'],\n 'megarian': ['germania', 'megarian'],\n 'megaric': ['gemaric', 'grimace', 'megaric'],\n 'megaron': ['marengo', 'megaron'],\n 'megaton': ['geomant', 'magneto', 'megaton', 'montage'],\n 'megmho': ['megmho', 'megohm'],\n 'megohm': ['megmho', 'megohm'],\n 'megrim': ['gimmer', 'grimme', 'megrim'],\n 'mehari': ['mehari', 'meriah'],\n 'meharist': ['arthemis', 'marshite', 'meharist'],\n 'meile': ['elemi', 'meile'],\n 'mein': ['mein', 'mien', 'mine'],\n 'meio': ['meio', 'oime'],\n 'mel': ['elm', 'mel'],\n 'mela': ['alem', 'alme', 'lame', 'leam', 'male', 'meal', 'mela'],\n 'melaconite': ['colemanite', 'melaconite'],\n 'melalgia': ['gamaliel', 'melalgia'],\n 'melam': ['lemma', 'melam'],\n 'melamine': ['ammeline', 'melamine'],\n 'melange': ['gleeman', 'melange'],\n 'melania': ['laminae', 'melania'],\n 'melanian': ['alemanni', 'melanian'],\n 'melanic': ['cnemial', 'melanic'],\n 'melanilin': ['melanilin', 'millennia'],\n 'melanin': ['lemnian', 'lineman', 'melanin'],\n 'melanism': ['melanism', 'slimeman'],\n 'melanite': ['melanite', 'meletian', 'metaline', 'nemalite'],\n 'melanitic': ['alimentic', 'antilemic', 'melanitic', 'metanilic'],\n 'melanochroi': ['chloroamine', 'melanochroi'],\n 'melanogen': ['melanogen', 'melongena'],\n 'melanoid': ['demonial', 'melanoid'],\n 'melanorrhea': ['amenorrheal', 'melanorrhea'],\n 'melanosis': ['loaminess', 'melanosis'],\n 'melanotic': ['entomical', 'melanotic'],\n 'melanuria': ['malurinae', 'melanuria'],\n 'melanuric': ['ceruminal', 'melanuric', 'numerical'],\n 'melas': ['amsel', 'melas', 'mesal', 'samel'],\n 'melastoma': ['melastoma', 'metasomal'],\n 'meldrop': ['meldrop', 'premold'],\n 'melena': ['enamel', 'melena'],\n 'melenic': ['celemin', 'melenic'],\n 'meletian': ['melanite', 'meletian', 'metaline', 'nemalite'],\n 'meletski': ['meletski', 'stemlike'],\n 'melian': ['limean', 'maline', 'melian', 'menial'],\n 'meliatin': ['meliatin', 'timaline'],\n 'melic': ['clime', 'melic'],\n 'melica': ['maleic', 'malice', 'melica'],\n 'melicerta': ['carmelite', 'melicerta'],\n 'melicraton': ['centimolar', 'melicraton'],\n 'melinda': ['idleman', 'melinda'],\n 'meline': ['elemin', 'meline'],\n 'melinite': ['ilmenite', 'melinite', 'menilite'],\n 'meliorant': ['meliorant', 'mentorial'],\n 'melissa': ['aimless', 'melissa', 'seismal'],\n 'melitose': ['melitose', 'mesolite'],\n 'mellay': ['lamely', 'mellay'],\n 'mellit': ['mellit', 'millet'],\n 'melodia': ['melodia', 'molidae'],\n 'melodica': ['cameloid', 'comedial', 'melodica'],\n 'melodicon': ['clinodome', 'melodicon', 'monocleid'],\n 'melodist': ['melodist', 'modelist'],\n 'melomanic': ['commelina', 'melomanic'],\n 'melon': ['lemon', 'melon', 'monel'],\n 'melongena': ['melanogen', 'melongena'],\n 'melonist': ['melonist', 'telonism'],\n 'melonites': ['limestone', 'melonites', 'milestone'],\n 'melonlike': ['lemonlike', 'melonlike'],\n 'meloplasty': ['meloplasty', 'myeloplast'],\n 'melosa': ['melosa', 'salome', 'semola'],\n 'melotragic': ['algometric', 'melotragic'],\n 'melotrope': ['melotrope', 'metropole'],\n 'melter': ['melter', 'remelt'],\n 'melters': ['melters', 'resmelt', 'smelter'],\n 'melton': ['loment', 'melton', 'molten'],\n 'melungeon': ['melungeon', 'nonlegume'],\n 'mem': ['emm', 'mem'],\n 'memnon': ['memnon', 'mennom'],\n 'memo': ['memo', 'mome'],\n 'memorandist': ['memorandist', 'moderantism', 'semidormant'],\n 'menage': ['gamene', 'manege', 'menage'],\n 'menald': ['lemnad', 'menald'],\n 'menaspis': ['menaspis', 'semispan'],\n 'mendaite': ['dementia', 'mendaite'],\n 'mende': ['emend', 'mende'],\n 'mender': ['mender', 'remend'],\n 'mendi': ['denim', 'mendi'],\n 'mendipite': ['impedient', 'mendipite'],\n 'menial': ['limean', 'maline', 'melian', 'menial'],\n 'menic': ['menic', 'mince'],\n 'menilite': ['ilmenite', 'melinite', 'menilite'],\n 'meningeal': ['enameling', 'malengine', 'meningeal'],\n 'meningocephalitis': ['cephalomeningitis', 'meningocephalitis'],\n 'meningocerebritis': ['cerebromeningitis', 'meningocerebritis'],\n 'meningoencephalitis': ['encephalomeningitis', 'meningoencephalitis'],\n 'meningoencephalocele': ['encephalomeningocele', 'meningoencephalocele'],\n 'meningomyelitis': ['meningomyelitis', 'myelomeningitis'],\n 'meningomyelocele': ['meningomyelocele', 'myelomeningocele'],\n 'mennom': ['memnon', 'mennom'],\n 'menostasia': ['anematosis', 'menostasia'],\n 'mensa': ['manes', 'manse', 'mensa', 'samen', 'senam'],\n 'mensal': ['anselm', 'mensal'],\n 'mense': ['mense', 'mesne', 'semen'],\n 'menstrual': ['menstrual', 'ulsterman'],\n 'mensurable': ['lebensraum', 'mensurable'],\n 'mentagra': ['grateman', 'mangrate', 'mentagra', 'targeman'],\n 'mental': ['lament', 'manlet', 'mantel', 'mantle', 'mental'],\n 'mentalis': ['mentalis', 'smaltine', 'stileman'],\n 'mentalize': ['mentalize', 'mentzelia'],\n 'mentation': ['mentation', 'montanite'],\n 'mentha': ['anthem', 'hetman', 'mentha'],\n 'menthane': ['enanthem', 'menthane'],\n 'mentigerous': ['mentigerous', 'tergeminous'],\n 'mentolabial': ['labiomental', 'mentolabial'],\n 'mentor': ['mentor', 'merton', 'termon', 'tormen'],\n 'mentorial': ['meliorant', 'mentorial'],\n 'mentzelia': ['mentalize', 'mentzelia'],\n 'menura': ['manure', 'menura'],\n 'menurae': ['maureen', 'menurae'],\n 'menyie': ['menyie', 'yemeni'],\n 'meo': ['meo', 'moe'],\n 'mephisto': ['mephisto', 'pithsome'],\n 'merak': ['maker', 'marek', 'merak'],\n 'merat': ['armet',\n           'mater',\n           'merat',\n           'metra',\n           'ramet',\n           'tamer',\n           'terma',\n           'trame',\n           'trema'],\n 'meratia': ['ametria', 'artemia', 'meratia', 'ramaite'],\n 'mercal': ['calmer', 'carmel', 'clamer', 'marcel', 'mercal'],\n 'mercator': ['cremator', 'mercator'],\n 'mercatorial': ['crematorial', 'mercatorial'],\n 'mercian': ['armenic', 'carmine', 'ceriman', 'crimean', 'mercian'],\n 'merciful': ['crimeful', 'merciful'],\n 'merciless': ['crimeless', 'merciless'],\n 'mercilessness': ['crimelessness', 'mercilessness'],\n 'mere': ['mere', 'reem'],\n 'merel': ['elmer', 'merel', 'merle'],\n 'merely': ['merely', 'yelmer'],\n 'merginae': ['ergamine', 'merginae'],\n 'mergus': ['gersum', 'mergus'],\n 'meriah': ['mehari', 'meriah'],\n 'merice': ['eremic', 'merice'],\n 'merida': ['admire', 'armied', 'damier', 'dimera', 'merida'],\n 'meril': ['limer', 'meril', 'miler'],\n 'meriones': ['emersion', 'meriones'],\n 'merism': ['merism', 'mermis', 'simmer'],\n 'merist': ['merist', 'mister', 'smiter'],\n 'meristem': ['meristem', 'mimester'],\n 'meristic': ['meristic', 'trimesic', 'trisemic'],\n 'merit': ['merit', 'miter', 'mitre', 'remit', 'timer'],\n 'merited': ['demerit', 'dimeter', 'merited', 'mitered'],\n 'meriter': ['meriter', 'miterer', 'trireme'],\n 'merle': ['elmer', 'merel', 'merle'],\n 'merlin': ['limner', 'merlin', 'milner'],\n 'mermaid': ['demiram', 'mermaid'],\n 'mermis': ['merism', 'mermis', 'simmer'],\n 'mero': ['mero', 'more', 'omer', 'rome'],\n 'meroblastic': ['blastomeric', 'meroblastic'],\n 'merocyte': ['cytomere', 'merocyte'],\n 'merogony': ['gonomery', 'merogony'],\n 'meroistic': ['eroticism', 'isometric', 'meroistic', 'trioecism'],\n 'merop': ['merop', 'moper', 'proem', 'remop'],\n 'meropia': ['emporia', 'meropia'],\n 'meros': ['meros', 'mores', 'morse', 'sermo', 'smore'],\n 'merosthenic': ['merosthenic', 'microsthene'],\n 'merostome': ['merostome', 'osmometer'],\n 'merrow': ['merrow', 'wormer'],\n 'merse': ['merse', 'smeer'],\n 'merton': ['mentor', 'merton', 'termon', 'tormen'],\n 'merula': ['mauler', 'merula', 'ramule'],\n 'meruline': ['lemurine', 'meruline', 'relumine'],\n 'mesa': ['asem', 'mesa', 'same', 'seam'],\n 'mesad': ['desma', 'mesad'],\n 'mesadenia': ['deaminase', 'mesadenia'],\n 'mesail': ['amiles', 'asmile', 'mesail', 'mesial', 'samiel'],\n 'mesal': ['amsel', 'melas', 'mesal', 'samel'],\n 'mesalike': ['mesalike', 'seamlike'],\n 'mesaraic': ['cramasie', 'mesaraic'],\n 'mesaticephaly': ['hemicatalepsy', 'mesaticephaly'],\n 'mese': ['mese', 'seem', 'seme', 'smee'],\n 'meshech': ['meshech', 'shechem'],\n 'mesial': ['amiles', 'asmile', 'mesail', 'mesial', 'samiel'],\n 'mesian': ['asimen', 'inseam', 'mesian'],\n 'mesic': ['mesic', 'semic'],\n 'mesion': ['eonism', 'mesion', 'oneism', 'simeon'],\n 'mesitae': ['amesite', 'mesitae', 'semitae'],\n 'mesne': ['mense', 'mesne', 'semen'],\n 'meso': ['meso', 'mose', 'some'],\n 'mesobar': ['ambrose', 'mesobar'],\n 'mesocephaly': ['elaphomyces', 'mesocephaly'],\n 'mesognathic': ['asthmogenic', 'mesognathic'],\n 'mesohepar': ['mesohepar', 'semaphore'],\n 'mesolite': ['melitose', 'mesolite'],\n 'mesolithic': ['homiletics', 'mesolithic'],\n 'mesological': ['mesological', 'semological'],\n 'mesology': ['mesology', 'semology'],\n 'mesomeric': ['mesomeric', 'microseme', 'semicrome'],\n 'mesonotum': ['mesonotum', 'momentous'],\n 'mesorectal': ['calotermes', 'mesorectal', 'metacresol'],\n 'mesotonic': ['economist', 'mesotonic'],\n 'mesoventral': ['mesoventral', 'ventromesal'],\n 'mespil': ['mespil', 'simple'],\n 'mesropian': ['mesropian', 'promnesia', 'spironema'],\n 'messalian': ['messalian', 'seminasal'],\n 'messaline': ['mealiness', 'messaline'],\n 'messan': ['enmass', 'maness', 'messan'],\n 'messelite': ['messelite', 'semisteel', 'teleseism'],\n 'messines': ['essenism', 'messines'],\n 'messor': ['messor', 'mosser', 'somers'],\n 'mestee': ['esteem', 'mestee'],\n 'mester': ['mester', 'restem', 'temser', 'termes'],\n 'mesua': ['amuse', 'mesua'],\n 'meta': ['mate', 'meat', 'meta', 'tame', 'team', 'tema'],\n 'metabular': ['maturable', 'metabular'],\n 'metaconid': ['comediant', 'metaconid'],\n 'metacresol': ['calotermes', 'mesorectal', 'metacresol'],\n 'metage': ['gamete', 'metage'],\n 'metaler': ['lameter', 'metaler', 'remetal'],\n 'metaline': ['melanite', 'meletian', 'metaline', 'nemalite'],\n 'metaling': ['ligament', 'metaling', 'tegminal'],\n 'metalist': ['metalist', 'smaltite'],\n 'metallism': ['metallism', 'smalltime'],\n 'metamer': ['ammeter', 'metamer'],\n 'metanilic': ['alimentic', 'antilemic', 'melanitic', 'metanilic'],\n 'metaphor': ['metaphor', 'trophema'],\n 'metaphoric': ['amphoteric', 'metaphoric'],\n 'metaphorical': ['metaphorical', 'pharmacolite'],\n 'metaphysical': ['lymphectasia', 'metaphysical'],\n 'metaplastic': ['metaplastic', 'palmatisect'],\n 'metapore': ['ametrope', 'metapore'],\n 'metasomal': ['melastoma', 'metasomal'],\n 'metatarse': ['masterate', 'metatarse'],\n 'metatheria': ['hemiterata', 'metatheria'],\n 'metatrophic': ['metatrophic', 'metropathic'],\n 'metaxenia': ['examinate', 'exanimate', 'metaxenia'],\n 'mete': ['meet', 'mete', 'teem'],\n 'meteor': ['meteor', 'remote'],\n 'meteorgraph': ['graphometer', 'meteorgraph'],\n 'meteorical': ['carmeloite', 'ectromelia', 'meteorical'],\n 'meteoristic': ['meteoristic', 'meteoritics'],\n 'meteoritics': ['meteoristic', 'meteoritics'],\n 'meteoroid': ['meteoroid', 'odiometer'],\n 'meter': ['meter', 'retem'],\n 'meterless': ['meterless', 'metreless'],\n 'metership': ['herpetism', 'metership', 'metreship', 'temperish'],\n 'methanal': ['latheman', 'methanal'],\n 'methanate': ['hetmanate', 'methanate'],\n 'methanoic': ['hematonic', 'methanoic'],\n 'mether': ['mether', 'themer'],\n 'method': ['method', 'mothed'],\n 'methylacetanilide': ['acetmethylanilide', 'methylacetanilide'],\n 'methylic': ['methylic', 'thymelic'],\n 'methylotic': ['lithectomy', 'methylotic'],\n 'metier': ['metier', 'retime', 'tremie'],\n 'metin': ['metin', 'temin', 'timne'],\n 'metis': ['metis', 'smite', 'stime', 'times'],\n 'metoac': ['comate', 'metoac', 'tecoma'],\n 'metol': ['metol', 'motel'],\n 'metonymical': ['laminectomy', 'metonymical'],\n 'metope': ['metope', 'poemet'],\n 'metopias': ['epistoma', 'metopias'],\n 'metosteon': ['metosteon', 'tomentose'],\n 'metra': ['armet',\n           'mater',\n           'merat',\n           'metra',\n           'ramet',\n           'tamer',\n           'terma',\n           'trame',\n           'trema'],\n 'metrectasia': ['metrectasia', 'remasticate'],\n 'metreless': ['meterless', 'metreless'],\n 'metreship': ['herpetism', 'metership', 'metreship', 'temperish'],\n 'metria': ['imaret', 'metria', 'mirate', 'rimate'],\n 'metrician': ['antimeric', 'carminite', 'criminate', 'metrician'],\n 'metrics': ['cretism', 'metrics'],\n 'metrocratic': ['cratometric', 'metrocratic'],\n 'metrological': ['logometrical', 'metrological'],\n 'metronome': ['metronome', 'monometer', 'monotreme'],\n 'metronomic': ['commorient', 'metronomic', 'monometric'],\n 'metronomical': ['metronomical', 'monometrical'],\n 'metropathic': ['metatrophic', 'metropathic'],\n 'metrophlebitis': ['metrophlebitis', 'phlebometritis'],\n 'metropole': ['melotrope', 'metropole'],\n 'metroptosia': ['metroptosia', 'prostomiate'],\n 'metrorrhea': ['arthromere', 'metrorrhea'],\n 'metrostyle': ['metrostyle', 'stylometer'],\n 'mettar': ['matter', 'mettar'],\n 'metusia': ['metusia', 'suimate', 'timaeus'],\n 'mew': ['mew', 'wem'],\n 'meward': ['meward', 'warmed'],\n 'mho': ['mho', 'ohm'],\n 'mhometer': ['mhometer', 'ohmmeter'],\n 'miamia': ['amimia', 'miamia'],\n 'mian': ['amin', 'main', 'mani', 'mian', 'mina', 'naim'],\n 'miaotse': ['miaotse', 'ostemia'],\n 'miaotze': ['atomize', 'miaotze'],\n 'mias': ['mias', 'saim', 'siam', 'sima'],\n 'miasmal': ['lamaism', 'miasmal'],\n 'miastor': ['amorist', 'aortism', 'miastor'],\n 'miaul': ['aumil', 'miaul'],\n 'miauler': ['lemuria', 'miauler'],\n 'mib': ['bim', 'mib'],\n 'mica': ['amic', 'mica'],\n 'micah': ['chiam', 'machi', 'micah'],\n 'micate': ['acmite', 'micate'],\n 'mication': ['amniotic', 'mication'],\n 'micellar': ['micellar', 'millrace'],\n 'michael': ['michael', 'micheal'],\n 'miche': ['chime', 'hemic', 'miche'],\n 'micheal': ['michael', 'micheal'],\n 'micher': ['chimer', 'mechir', 'micher'],\n 'micht': ['micht', 'mitch'],\n 'micranthropos': ['micranthropos', 'promonarchist'],\n 'micro': ['micro', 'moric', 'romic'],\n 'microcephal': ['microcephal', 'prochemical'],\n 'microcephaly': ['microcephaly', 'pyrochemical'],\n 'microcinema': ['microcinema', 'microcnemia'],\n 'microcnemia': ['microcinema', 'microcnemia'],\n 'microcrith': ['microcrith', 'trichromic'],\n 'micropetalous': ['micropetalous', 'somatopleuric'],\n 'microphagy': ['microphagy', 'myographic'],\n 'microphone': ['microphone', 'neomorphic'],\n 'microphot': ['microphot', 'morphotic'],\n 'microphotograph': ['microphotograph', 'photomicrograph'],\n 'microphotographic': ['microphotographic', 'photomicrographic'],\n 'microphotography': ['microphotography', 'photomicrography'],\n 'microphotoscope': ['microphotoscope', 'photomicroscope'],\n 'micropterous': ['micropterous', 'prosectorium'],\n 'micropyle': ['micropyle', 'polymeric'],\n 'microradiometer': ['microradiometer', 'radiomicrometer'],\n 'microseme': ['mesomeric', 'microseme', 'semicrome'],\n 'microspectroscope': ['microspectroscope', 'spectromicroscope'],\n 'microstat': ['microstat', 'stromatic'],\n 'microsthene': ['merosthenic', 'microsthene'],\n 'microstome': ['microstome', 'osmometric'],\n 'microtia': ['amoritic', 'microtia'],\n 'microtinae': ['marcionite', 'microtinae', 'remication'],\n 'mid': ['dim', 'mid'],\n 'midden': ['midden', 'minded'],\n 'middler': ['middler', 'mildred'],\n 'middy': ['didym', 'middy'],\n 'mide': ['demi', 'diem', 'dime', 'mide'],\n 'mider': ['dimer', 'mider'],\n 'mididae': ['amidide', 'diamide', 'mididae'],\n 'midrange': ['dirgeman', 'margined', 'midrange'],\n 'midstory': ['midstory', 'modistry'],\n 'miek': ['miek', 'mike'],\n 'mien': ['mein', 'mien', 'mine'],\n 'mig': ['gim', 'mig'],\n 'migraine': ['imaginer', 'migraine'],\n 'migrate': ['migrate', 'ragtime'],\n 'migratory': ['gyromitra', 'migratory'],\n 'mihrab': ['brahmi', 'mihrab'],\n 'mikael': ['kelima', 'mikael'],\n 'mike': ['miek', 'mike'],\n 'mil': ['lim', 'mil'],\n 'mila': ['amil', 'amli', 'lima', 'mail', 'mali', 'mila'],\n 'milan': ['lamin', 'liman', 'milan'],\n 'milden': ['milden', 'mindel'],\n 'mildness': ['mildness', 'mindless'],\n 'mildred': ['middler', 'mildred'],\n 'mile': ['emil', 'lime', 'mile'],\n 'milepost': ['milepost', 'polemist'],\n 'miler': ['limer', 'meril', 'miler'],\n 'miles': ['limes', 'miles', 'slime', 'smile'],\n 'milesian': ['alienism', 'milesian'],\n 'milestone': ['limestone', 'melonites', 'milestone'],\n 'milicent': ['limnetic', 'milicent'],\n 'military': ['limitary', 'military'],\n 'militate': ['limitate', 'militate'],\n 'militation': ['limitation', 'militation'],\n 'milken': ['kimnel', 'milken'],\n 'millennia': ['melanilin', 'millennia'],\n 'miller': ['miller', 'remill'],\n 'millet': ['mellit', 'millet'],\n 'milliare': ['milliare', 'ramillie'],\n 'millrace': ['micellar', 'millrace'],\n 'milner': ['limner', 'merlin', 'milner'],\n 'milo': ['milo', 'moil'],\n 'milsie': ['milsie', 'simile'],\n 'miltonia': ['limation', 'miltonia'],\n 'mima': ['ammi', 'imam', 'maim', 'mima'],\n 'mime': ['emim', 'mime'],\n 'mimester': ['meristem', 'mimester'],\n 'mimi': ['immi', 'mimi'],\n 'mimidae': ['amimide', 'mimidae'],\n 'mimosa': ['amomis', 'mimosa'],\n 'min': ['min', 'nim'],\n 'mina': ['amin', 'main', 'mani', 'mian', 'mina', 'naim'],\n 'minacity': ['imitancy', 'intimacy', 'minacity'],\n 'minar': ['inarm', 'minar'],\n 'minaret': ['minaret', 'raiment', 'tireman'],\n 'minareted': ['demetrian', 'dermatine', 'meandrite', 'minareted'],\n 'minargent': ['germinant', 'minargent'],\n 'minatory': ['minatory', 'romanity'],\n 'mince': ['menic', 'mince'],\n 'minchiate': ['hematinic', 'minchiate'],\n 'mincopie': ['mincopie', 'poimenic'],\n 'minded': ['midden', 'minded'],\n 'mindel': ['milden', 'mindel'],\n 'mindelian': ['eliminand', 'mindelian'],\n 'minder': ['minder', 'remind'],\n 'mindless': ['mildness', 'mindless'],\n 'mine': ['mein', 'mien', 'mine'],\n 'miner': ['inerm', 'miner'],\n 'mineral': ['marline', 'mineral', 'ramline'],\n 'minerva': ['minerva', 'vermian'],\n 'minerval': ['minerval', 'verminal'],\n 'mingler': ['gremlin', 'mingler'],\n 'miniator': ['miniator', 'triamino'],\n 'minish': ['minish', 'nimshi'],\n 'minister': ['minister', 'misinter'],\n 'ministry': ['ministry', 'myristin'],\n 'minkish': ['minkish', 'nimkish'],\n 'minnetaree': ['minnetaree', 'nemertinea'],\n 'minoan': ['amnion', 'minoan', 'nomina'],\n 'minometer': ['minometer', 'omnimeter'],\n 'minor': ['minor', 'morin'],\n 'minorate': ['maronite', 'martinoe', 'minorate', 'morenita', 'romanite'],\n 'minorca': ['amicron', 'marconi', 'minorca', 'romanic'],\n 'minos': ['minos', 'osmin', 'simon'],\n 'minot': ['minot', 'timon', 'tomin'],\n 'mintage': ['mintage', 'teaming', 'tegmina'],\n 'minter': ['minter', 'remint', 'termin'],\n 'minuend': ['minuend', 'unmined'],\n 'minuet': ['minuet', 'minute'],\n 'minute': ['minuet', 'minute'],\n 'minutely': ['minutely', 'untimely'],\n 'minuter': ['minuter', 'unmiter'],\n 'minyas': ['maysin', 'minyas', 'mysian'],\n 'mir': ['mir', 'rim'],\n 'mira': ['amir', 'irma', 'mari', 'mira', 'rami', 'rima'],\n 'mirabel': ['embrail', 'mirabel'],\n 'mirac': ['marci', 'mirac'],\n 'miracle': ['claimer', 'miracle', 'reclaim'],\n 'mirage': ['imager', 'maigre', 'margie', 'mirage'],\n 'mirana': ['airman', 'amarin', 'marian', 'marina', 'mirana'],\n 'miranha': ['ahriman', 'miranha'],\n 'mirate': ['imaret', 'metria', 'mirate', 'rimate'],\n 'mirbane': ['ambrein', 'mirbane'],\n 'mire': ['emir', 'imer', 'mire', 'reim', 'remi', 'riem', 'rime'],\n 'mirfak': ['marfik', 'mirfak'],\n 'mirounga': ['mirounga', 'moringua', 'origanum'],\n 'miry': ['miry', 'rimy', 'yirm'],\n 'mirza': ['mirza', 'mizar'],\n 'misact': ['mastic', 'misact'],\n 'misadvise': ['admissive', 'misadvise'],\n 'misagent': ['misagent', 'steaming'],\n 'misaim': ['misaim', 'misima'],\n 'misandry': ['misandry', 'myrsinad'],\n 'misassociation': ['associationism', 'misassociation'],\n 'misatone': ['masonite', 'misatone'],\n 'misattend': ['misattend', 'tandemist'],\n 'misaunter': ['antiserum', 'misaunter'],\n 'misbehavior': ['behaviorism', 'misbehavior'],\n 'mischance': ['mechanics', 'mischance'],\n 'misclass': ['classism', 'misclass'],\n 'miscoin': ['iconism', 'imsonic', 'miscoin'],\n 'misconfiguration': ['configurationism', 'misconfiguration'],\n 'misconstitutional': ['constitutionalism', 'misconstitutional'],\n 'misconstruction': ['constructionism', 'misconstruction'],\n 'miscreant': ['encratism', 'miscreant'],\n 'miscreation': ['anisometric',\n                 'creationism',\n                 'miscreation',\n                 'ramisection',\n                 'reactionism'],\n 'miscue': ['cesium', 'miscue'],\n 'misdate': ['diastem', 'misdate'],\n 'misdaub': ['misdaub', 'submaid'],\n 'misdeal': ['misdeal', 'mislead'],\n 'misdealer': ['misdealer', 'misleader', 'misleared'],\n 'misdeclare': ['creedalism', 'misdeclare'],\n 'misdiet': ['misdiet', 'misedit', 'mistide'],\n 'misdivision': ['divisionism', 'misdivision'],\n 'misdread': ['disarmed', 'misdread'],\n 'mise': ['mise', 'semi', 'sime'],\n 'misease': ['misease', 'siamese'],\n 'misecclesiastic': ['ecclesiasticism', 'misecclesiastic'],\n 'misedit': ['misdiet', 'misedit', 'mistide'],\n 'misexpression': ['expressionism', 'misexpression'],\n 'mishmash': ['mishmash', 'shammish'],\n 'misima': ['misaim', 'misima'],\n 'misimpression': ['impressionism', 'misimpression'],\n 'misinter': ['minister', 'misinter'],\n 'mislabel': ['mislabel', 'semiball'],\n 'mislabor': ['laborism', 'mislabor'],\n 'mislead': ['misdeal', 'mislead'],\n 'misleader': ['misdealer', 'misleader', 'misleared'],\n 'mislear': ['mislear', 'realism'],\n 'misleared': ['misdealer', 'misleader', 'misleared'],\n 'misname': ['amenism', 'immanes', 'misname'],\n 'misniac': ['cainism', 'misniac'],\n 'misnomed': ['demonism', 'medimnos', 'misnomed'],\n 'misoneism': ['misoneism', 'simeonism'],\n 'mispage': ['impages', 'mispage'],\n 'misperception': ['misperception', 'perceptionism'],\n 'misperform': ['misperform', 'preformism'],\n 'misphrase': ['misphrase', 'seraphism'],\n 'misplay': ['impalsy', 'misplay'],\n 'misplead': ['misplead', 'pedalism'],\n 'misprisal': ['misprisal', 'spiralism'],\n 'misproud': ['disporum', 'misproud'],\n 'misprovide': ['disimprove', 'misprovide'],\n 'misput': ['misput', 'sumpit'],\n 'misquotation': ['antimosquito', 'misquotation'],\n 'misrate': ['artemis', 'maestri', 'misrate'],\n 'misread': ['misread', 'sidearm'],\n 'misreform': ['misreform', 'reformism'],\n 'misrelate': ['misrelate', 'salimeter'],\n 'misrelation': ['misrelation', 'orientalism', 'relationism'],\n 'misreliance': ['criminalese', 'misreliance'],\n 'misreporter': ['misreporter', 'reporterism'],\n 'misrepresentation': ['misrepresentation', 'representationism'],\n 'misrepresenter': ['misrepresenter', 'remisrepresent'],\n 'misrepute': ['misrepute', 'septerium'],\n 'misrhyme': ['misrhyme', 'shimmery'],\n 'misrule': ['misrule', 'simuler'],\n 'missal': ['missal', 'salmis'],\n 'missayer': ['emissary', 'missayer'],\n 'misset': ['misset', 'tmesis'],\n 'misshape': ['emphasis', 'misshape'],\n 'missioner': ['missioner', 'remission'],\n 'misspell': ['misspell', 'psellism'],\n 'missuggestion': ['missuggestion', 'suggestionism'],\n 'missy': ['missy', 'mysis'],\n 'mist': ['mist', 'smit', 'stim'],\n 'misteach': ['mastiche', 'misteach'],\n 'mister': ['merist', 'mister', 'smiter'],\n 'mistide': ['misdiet', 'misedit', 'mistide'],\n 'mistle': ['mistle', 'smilet'],\n 'mistone': ['mistone', 'moisten'],\n 'mistradition': ['mistradition', 'traditionism'],\n 'mistrain': ['marinist', 'mistrain'],\n 'mistreat': ['mistreat', 'teratism'],\n 'mistrial': ['mistrial', 'trialism'],\n 'mistutor': ['mistutor', 'tutorism'],\n 'misty': ['misty', 'stimy'],\n 'misunderstander': ['misunderstander', 'remisunderstand'],\n 'misura': ['misura', 'ramusi'],\n 'misuser': ['misuser', 'surmise'],\n 'mitannish': ['mitannish', 'sminthian'],\n 'mitch': ['micht', 'mitch'],\n 'mite': ['emit', 'item', 'mite', 'time'],\n 'mitella': ['mitella', 'tellima'],\n 'miteproof': ['miteproof', 'timeproof'],\n 'miter': ['merit', 'miter', 'mitre', 'remit', 'timer'],\n 'mitered': ['demerit', 'dimeter', 'merited', 'mitered'],\n 'miterer': ['meriter', 'miterer', 'trireme'],\n 'mithraic': ['arithmic', 'mithraic', 'mithriac'],\n 'mithraicist': ['mithraicist', 'mithraistic'],\n 'mithraistic': ['mithraicist', 'mithraistic'],\n 'mithriac': ['arithmic', 'mithraic', 'mithriac'],\n 'mitra': ['mitra', 'tarmi', 'timar', 'tirma'],\n 'mitral': ['mitral', 'ramtil'],\n 'mitrate': ['martite', 'mitrate'],\n 'mitre': ['merit', 'miter', 'mitre', 'remit', 'timer'],\n 'mitrer': ['mitrer', 'retrim', 'trimer'],\n 'mitridae': ['dimetria', 'mitridae', 'tiremaid', 'triamide'],\n 'mixer': ['mixer', 'remix'],\n 'mizar': ['mirza', 'mizar'],\n 'mnesic': ['cnemis', 'mnesic'],\n 'mniaceous': ['acuminose', 'mniaceous'],\n 'mniotiltidae': ['delimitation', 'mniotiltidae'],\n 'mnium': ['mnium', 'nummi'],\n 'mo': ['mo', 'om'],\n 'moabitic': ['biatomic', 'moabitic'],\n 'moan': ['mano', 'moan', 'mona', 'noam', 'noma', 'oman'],\n 'moarian': ['amanori', 'moarian'],\n 'moat': ['atmo', 'atom', 'moat', 'toma'],\n 'mob': ['bom', 'mob'],\n 'mobbable': ['bombable', 'mobbable'],\n 'mobber': ['bomber', 'mobber'],\n 'mobbish': ['hobbism', 'mobbish'],\n 'mobed': ['demob', 'mobed'],\n 'mobile': ['bemoil', 'mobile'],\n 'mobilian': ['binomial', 'mobilian'],\n 'mobocrat': ['mobocrat', 'motorcab'],\n 'mobship': ['mobship', 'phobism'],\n 'mobster': ['bestorm', 'mobster'],\n 'mocker': ['mocker', 'remock'],\n 'mocmain': ['ammonic', 'mocmain'],\n 'mod': ['dom', 'mod'],\n 'modal': ['domal', 'modal'],\n 'mode': ['dome', 'mode', 'moed'],\n 'modeler': ['demerol', 'modeler', 'remodel'],\n 'modelist': ['melodist', 'modelist'],\n 'modena': ['daemon', 'damone', 'modena'],\n 'modenese': ['modenese', 'needsome'],\n 'moderant': ['moderant', 'normated'],\n 'moderantism': ['memorandist', 'moderantism', 'semidormant'],\n 'modern': ['modern', 'morned'],\n 'modernistic': ['modernistic', 'monstricide'],\n 'modestly': ['modestly', 'styledom'],\n 'modesty': ['dystome', 'modesty'],\n 'modiste': ['distome', 'modiste'],\n 'modistry': ['midstory', 'modistry'],\n 'modius': ['modius', 'sodium'],\n 'moe': ['meo', 'moe'],\n 'moed': ['dome', 'mode', 'moed'],\n 'moerithere': ['heteromeri', 'moerithere'],\n 'mogdad': ['goddam', 'mogdad'],\n 'moha': ['ahom', 'moha'],\n 'mohair': ['homrai', 'mahori', 'mohair'],\n 'mohel': ['hemol', 'mohel'],\n 'mohican': ['mohican', 'monachi'],\n 'moho': ['homo', 'moho'],\n 'mohur': ['humor', 'mohur'],\n 'moider': ['dormie', 'moider'],\n 'moieter': ['moieter', 'romeite'],\n 'moiety': ['moiety', 'moyite'],\n 'moil': ['milo', 'moil'],\n 'moiles': ['lemosi', 'limose', 'moiles'],\n 'moineau': ['eunomia', 'moineau'],\n 'moira': ['maori', 'mario', 'moira'],\n 'moisten': ['mistone', 'moisten'],\n 'moistener': ['moistener', 'neoterism'],\n 'moisture': ['moisture', 'semitour'],\n 'moit': ['itmo', 'moit', 'omit', 'timo'],\n 'mojo': ['joom', 'mojo'],\n 'moke': ['kome', 'moke'],\n 'moki': ['komi', 'moki'],\n 'mola': ['loam', 'loma', 'malo', 'mola', 'olam'],\n 'molar': ['molar', 'moral', 'romal'],\n 'molarity': ['molarity', 'morality'],\n 'molary': ['amyrol', 'molary'],\n 'molder': ['dermol', 'molder', 'remold'],\n 'moler': ['moler', 'morel'],\n 'molge': ['glome', 'golem', 'molge'],\n 'molidae': ['melodia', 'molidae'],\n 'molinia': ['molinia', 'monilia'],\n 'mollusca': ['callosum', 'mollusca'],\n 'moloid': ['moloid', 'oildom'],\n 'molten': ['loment', 'melton', 'molten'],\n 'molybdena': ['baldmoney', 'molybdena'],\n 'molybdenic': ['combinedly', 'molybdenic'],\n 'mome': ['memo', 'mome'],\n 'moment': ['moment', 'montem'],\n 'momentary': ['manometry', 'momentary'],\n 'momentous': ['mesonotum', 'momentous'],\n 'momotinae': ['amniotome', 'momotinae'],\n 'mona': ['mano', 'moan', 'mona', 'noam', 'noma', 'oman'],\n 'monachi': ['mohican', 'monachi'],\n 'monactin': ['monactin', 'montanic'],\n 'monad': ['damon', 'monad', 'nomad'],\n 'monadic': ['monadic', 'nomadic'],\n 'monadical': ['monadical', 'nomadical'],\n 'monadically': ['monadically', 'nomadically'],\n 'monadina': ['monadina', 'nomadian'],\n 'monadism': ['monadism', 'nomadism'],\n 'monaene': ['anemone', 'monaene'],\n 'monal': ['almon', 'monal'],\n 'monamniotic': ['commination', 'monamniotic'],\n 'monanthous': ['anthonomus', 'monanthous'],\n 'monarch': ['monarch', 'nomarch', 'onmarch'],\n 'monarchial': ['harmonical', 'monarchial'],\n 'monarchian': ['anharmonic', 'monarchian'],\n 'monarchistic': ['chiromancist', 'monarchistic'],\n 'monarchy': ['monarchy', 'nomarchy'],\n 'monarda': ['anadrom', 'madrona', 'mandora', 'monarda', 'roadman'],\n 'monas': ['manso', 'mason', 'monas'],\n 'monasa': ['monasa', 'samoan'],\n 'monase': ['monase', 'nosema'],\n 'monaster': ['monaster', 'monstera', 'nearmost', 'storeman'],\n 'monastery': ['monastery', 'oysterman'],\n 'monastic': ['catonism', 'monastic'],\n 'monastical': ['catmalison', 'monastical'],\n 'monatomic': ['commation', 'monatomic'],\n 'monaural': ['anomural', 'monaural'],\n 'monday': ['dynamo', 'monday'],\n 'mone': ['mone', 'nome', 'omen'],\n 'monel': ['lemon', 'melon', 'monel'],\n 'moner': ['enorm', 'moner', 'morne'],\n 'monera': ['enamor', 'monera', 'oreman', 'romane'],\n 'moneral': ['almoner', 'moneral', 'nemoral'],\n 'monergist': ['gerontism', 'monergist'],\n 'moneric': ['incomer', 'moneric'],\n 'monesia': ['monesia', 'osamine', 'osmanie'],\n 'monetary': ['monetary', 'myronate', 'naometry'],\n 'money': ['money', 'moyen'],\n 'moneybag': ['bogeyman', 'moneybag'],\n 'moneyless': ['moneyless', 'moyenless'],\n 'monger': ['germon', 'monger', 'morgen'],\n 'mongler': ['mongler', 'mongrel'],\n 'mongoose': ['gonosome', 'mongoose'],\n 'mongrel': ['mongler', 'mongrel'],\n 'mongrelity': ['longimetry', 'mongrelity'],\n 'monial': ['monial', 'nomial', 'oilman'],\n 'monias': ['monias', 'osamin', 'osmina'],\n 'monica': ['camion', 'conima', 'manioc', 'monica'],\n 'monilated': ['antimodel', 'maldonite', 'monilated'],\n 'monilia': ['molinia', 'monilia'],\n 'monism': ['monism', 'nomism', 'simmon'],\n 'monist': ['inmost', 'monist', 'omnist'],\n 'monistic': ['monistic', 'nicotism', 'nomistic'],\n 'monitory': ['monitory', 'moronity'],\n 'monitress': ['monitress', 'sermonist'],\n 'mono': ['mono', 'moon'],\n 'monoacid': ['damonico', 'monoacid'],\n 'monoazo': ['monoazo', 'monozoa'],\n 'monocleid': ['clinodome', 'melodicon', 'monocleid'],\n 'monoclinous': ['monoclinous', 'monoclonius'],\n 'monoclonius': ['monoclinous', 'monoclonius'],\n 'monocracy': ['monocracy', 'nomocracy'],\n 'monocystidae': ['monocystidae', 'monocystidea'],\n 'monocystidea': ['monocystidae', 'monocystidea'],\n 'monodactylous': ['condylomatous', 'monodactylous'],\n 'monodactyly': ['dactylonomy', 'monodactyly'],\n 'monodelphia': ['amidophenol', 'monodelphia'],\n 'monodonta': ['anomodont', 'monodonta'],\n 'monodram': ['monodram', 'romandom'],\n 'monoecian': ['monoecian', 'neocomian'],\n 'monoecism': ['economism', 'monoecism', 'monosemic'],\n 'monoeidic': ['meconioid', 'monoeidic'],\n 'monogastric': ['gastronomic', 'monogastric'],\n 'monogenist': ['monogenist', 'nomogenist'],\n 'monogenous': ['monogenous', 'nomogenous'],\n 'monogeny': ['monogeny', 'nomogeny'],\n 'monogram': ['monogram', 'nomogram'],\n 'monograph': ['monograph', 'nomograph', 'phonogram'],\n 'monographer': ['geranomorph', 'monographer', 'nomographer'],\n 'monographic': ['gramophonic', 'monographic', 'nomographic', 'phonogramic'],\n 'monographical': ['gramophonical', 'monographical', 'nomographical'],\n 'monographically': ['gramophonically',\n                     'monographically',\n                     'nomographically',\n                     'phonogramically'],\n 'monographist': ['gramophonist', 'monographist'],\n 'monography': ['monography', 'nomography'],\n 'monoid': ['domino', 'monoid'],\n 'monological': ['monological', 'nomological'],\n 'monologist': ['monologist', 'nomologist', 'ontologism'],\n 'monology': ['monology', 'nomology'],\n 'monometer': ['metronome', 'monometer', 'monotreme'],\n 'monometric': ['commorient', 'metronomic', 'monometric'],\n 'monometrical': ['metronomical', 'monometrical'],\n 'monomorphic': ['monomorphic', 'morphonomic'],\n 'monont': ['monont', 'monton'],\n 'monopathy': ['monopathy', 'pathonomy'],\n 'monopersulphuric': ['monopersulphuric', 'permonosulphuric'],\n 'monophote': ['monophote', 'motophone'],\n 'monophylite': ['entomophily', 'monophylite'],\n 'monophyllous': ['monophyllous', 'nomophyllous'],\n 'monoplanist': ['monoplanist', 'postnominal'],\n 'monopsychism': ['monopsychism', 'psychomonism'],\n 'monopteral': ['monopteral', 'protonemal'],\n 'monosemic': ['economism', 'monoecism', 'monosemic'],\n 'monosodium': ['monosodium', 'omnimodous', 'onosmodium'],\n 'monotheism': ['monotheism', 'nomotheism'],\n 'monotheist': ['monotheist', 'thomsonite'],\n 'monothetic': ['monothetic', 'nomothetic'],\n 'monotreme': ['metronome', 'monometer', 'monotreme'],\n 'monotypal': ['monotypal', 'toponymal'],\n 'monotypic': ['monotypic', 'toponymic'],\n 'monotypical': ['monotypical', 'toponymical'],\n 'monozoa': ['monoazo', 'monozoa'],\n 'monozoic': ['monozoic', 'zoonomic'],\n 'monroeism': ['monroeism', 'semimoron'],\n 'monsieur': ['inermous', 'monsieur'],\n 'monstera': ['monaster', 'monstera', 'nearmost', 'storeman'],\n 'monstricide': ['modernistic', 'monstricide'],\n 'montage': ['geomant', 'magneto', 'megaton', 'montage'],\n 'montagnais': ['antagonism', 'montagnais'],\n 'montanic': ['monactin', 'montanic'],\n 'montanite': ['mentation', 'montanite'],\n 'montem': ['moment', 'montem'],\n 'montes': ['montes', 'ostmen'],\n 'montia': ['atimon', 'manito', 'montia'],\n 'monticule': ['ctenolium', 'monticule'],\n 'monton': ['monont', 'monton'],\n 'montu': ['montu', 'mount', 'notum'],\n 'monture': ['monture', 'mounter', 'remount'],\n 'monumentary': ['monumentary', 'unmomentary'],\n 'mood': ['doom', 'mood'],\n 'mooder': ['doomer', 'mooder', 'redoom', 'roomed'],\n 'mool': ['loom', 'mool'],\n 'mools': ['mools', 'sloom'],\n 'moon': ['mono', 'moon'],\n 'moonglade': ['megalodon', 'moonglade'],\n 'moonite': ['emotion', 'moonite'],\n 'moonja': ['majoon', 'moonja'],\n 'moonscape': ['manoscope', 'moonscape'],\n 'moonseed': ['endosome', 'moonseed'],\n 'moontide': ['demotion', 'entomoid', 'moontide'],\n 'moop': ['moop', 'pomo'],\n 'moor': ['moor', 'moro', 'room'],\n 'moorage': ['moorage', 'roomage'],\n 'moorball': ['ballroom', 'moorball'],\n 'moore': ['moore', 'romeo'],\n 'moorn': ['moorn', 'moron'],\n 'moorship': ['isomorph', 'moorship'],\n 'moorup': ['moorup', 'uproom'],\n 'moorwort': ['moorwort', 'rootworm', 'tomorrow', 'wormroot'],\n 'moory': ['moory', 'roomy'],\n 'moost': ['moost', 'smoot'],\n 'moot': ['moot', 'toom'],\n 'mooth': ['mooth', 'thoom'],\n 'mootstead': ['mootstead', 'stomatode'],\n 'mop': ['mop', 'pom'],\n 'mopane': ['mopane', 'pomane'],\n 'mope': ['mope', 'poem', 'pome'],\n 'moper': ['merop', 'moper', 'proem', 'remop'],\n 'mophead': ['hemapod', 'mophead'],\n 'mopish': ['mopish', 'ophism'],\n 'mopla': ['mopla', 'palmo'],\n 'mopsy': ['mopsy', 'myops'],\n 'mora': ['amor', 'maro', 'mora', 'omar', 'roam'],\n 'morainal': ['manorial', 'morainal'],\n 'moraine': ['moraine', 'romaine'],\n 'moral': ['molar', 'moral', 'romal'],\n 'morality': ['molarity', 'morality'],\n 'morals': ['morals', 'morsal'],\n 'moran': ['manor', 'moran', 'norma', 'ramon', 'roman'],\n 'morat': ['amort', 'morat', 'torma'],\n 'morate': ['amoret', 'morate'],\n 'moray': ['mayor', 'moray'],\n 'morbid': ['dibrom', 'morbid'],\n 'mordancy': ['dormancy', 'mordancy'],\n 'mordant': ['dormant', 'mordant'],\n 'mordenite': ['interdome', 'mordenite', 'nemertoid'],\n 'mordicate': ['decimator', 'medicator', 'mordicate'],\n 'more': ['mero', 'more', 'omer', 'rome'],\n 'moreish': ['heroism', 'moreish'],\n 'morel': ['moler', 'morel'],\n 'morencite': ['entomeric', 'intercome', 'morencite'],\n 'morenita': ['maronite', 'martinoe', 'minorate', 'morenita', 'romanite'],\n 'moreote': ['moreote', 'oometer'],\n 'mores': ['meros', 'mores', 'morse', 'sermo', 'smore'],\n 'morga': ['agrom', 'morga'],\n 'morganatic': ['actinogram', 'morganatic'],\n 'morgay': ['gyroma', 'morgay'],\n 'morgen': ['germon', 'monger', 'morgen'],\n 'moribund': ['moribund', 'unmorbid'],\n 'moric': ['micro', 'moric', 'romic'],\n 'moriche': ['homeric', 'moriche'],\n 'morin': ['minor', 'morin'],\n 'moringa': ['ingomar', 'moringa', 'roaming'],\n 'moringua': ['mirounga', 'moringua', 'origanum'],\n 'morn': ['morn', 'norm'],\n 'morne': ['enorm', 'moner', 'morne'],\n 'morned': ['modern', 'morned'],\n 'mornless': ['mornless', 'normless'],\n 'moro': ['moor', 'moro', 'room'],\n 'morocota': ['coatroom', 'morocota'],\n 'moron': ['moorn', 'moron'],\n 'moronic': ['moronic', 'omicron'],\n 'moronity': ['monitory', 'moronity'],\n 'morphea': ['amphore', 'morphea'],\n 'morphonomic': ['monomorphic', 'morphonomic'],\n 'morphotic': ['microphot', 'morphotic'],\n 'morphotropic': ['morphotropic', 'protomorphic'],\n 'morrisean': ['morrisean', 'rosmarine'],\n 'morsal': ['morals', 'morsal'],\n 'morse': ['meros', 'mores', 'morse', 'sermo', 'smore'],\n 'mortacious': ['mortacious', 'urosomatic'],\n 'mortar': ['marrot', 'mortar'],\n 'mortician': ['martinico', 'mortician'],\n 'mortise': ['erotism', 'mortise', 'trisome'],\n 'morton': ['morton', 'tomorn'],\n 'mortuarian': ['mortuarian', 'muratorian'],\n 'mortuary': ['mortuary', 'outmarry'],\n 'mortuous': ['mortuous', 'tumorous'],\n 'morus': ['morus', 'mosur'],\n 'mosaic': ['aosmic', 'mosaic'],\n 'mosandrite': ['mosandrite', 'tarsonemid'],\n 'mosasauri': ['amaurosis', 'mosasauri'],\n 'moschate': ['chatsome', 'moschate'],\n 'mose': ['meso', 'mose', 'some'],\n 'mosker': ['mosker', 'smoker'],\n 'mosser': ['messor', 'mosser', 'somers'],\n 'moste': ['moste', 'smote'],\n 'mosting': ['gnomist', 'mosting'],\n 'mosul': ['mosul', 'mouls', 'solum'],\n 'mosur': ['morus', 'mosur'],\n 'mot': ['mot', 'tom'],\n 'mote': ['mote', 'tome'],\n 'motel': ['metol', 'motel'],\n 'motet': ['motet', 'motte', 'totem'],\n 'mothed': ['method', 'mothed'],\n 'mother': ['mother', 'thermo'],\n 'motherland': ['enthraldom', 'motherland'],\n 'motherward': ['motherward', 'threadworm'],\n 'motograph': ['motograph', 'photogram'],\n 'motographic': ['motographic', 'tomographic'],\n 'motophone': ['monophote', 'motophone'],\n 'motorcab': ['mobocrat', 'motorcab'],\n 'motte': ['motet', 'motte', 'totem'],\n 'moud': ['doum', 'moud', 'odum'],\n 'moudy': ['moudy', 'yomud'],\n 'moul': ['moul', 'ulmo'],\n 'mouls': ['mosul', 'mouls', 'solum'],\n 'mound': ['donum', 'mound'],\n 'mount': ['montu', 'mount', 'notum'],\n 'mountained': ['emundation', 'mountained'],\n 'mountaineer': ['enumeration', 'mountaineer'],\n 'mounted': ['demount', 'mounted'],\n 'mounter': ['monture', 'mounter', 'remount'],\n 'mousery': ['mousery', 'seymour'],\n 'mousoni': ['mousoni', 'ominous'],\n 'mousse': ['mousse', 'smouse'],\n 'moutan': ['amount', 'moutan', 'outman'],\n 'mouther': ['mouther', 'theorum'],\n 'mover': ['mover', 'vomer'],\n 'moy': ['moy', 'yom'],\n 'moyen': ['money', 'moyen'],\n 'moyenless': ['moneyless', 'moyenless'],\n 'moyite': ['moiety', 'moyite'],\n 'mru': ['mru', 'rum'],\n 'mu': ['mu', 'um'],\n 'muang': ['muang', 'munga'],\n 'much': ['chum', 'much'],\n 'mucic': ['cumic', 'mucic'],\n 'mucilage': ['glucemia', 'mucilage'],\n 'mucin': ['cumin', 'mucin'],\n 'mucinoid': ['conidium', 'mucinoid', 'oncidium'],\n 'mucofibrous': ['fibromucous', 'mucofibrous'],\n 'mucoid': ['codium', 'mucoid'],\n 'muconic': ['muconic', 'uncomic'],\n 'mucor': ['mucor', 'mucro'],\n 'mucoserous': ['mucoserous', 'seromucous'],\n 'mucro': ['mucor', 'mucro'],\n 'mucrones': ['consumer', 'mucrones'],\n 'mud': ['dum', 'mud'],\n 'mudar': ['mudar', 'mudra'],\n 'mudden': ['edmund', 'mudden'],\n 'mudir': ['mudir', 'murid'],\n 'mudra': ['mudar', 'mudra'],\n 'mudstone': ['mudstone', 'unmodest'],\n 'mug': ['gum', 'mug'],\n 'muga': ['gaum', 'muga'],\n 'muggles': ['muggles', 'smuggle'],\n 'mugweed': ['gumweed', 'mugweed'],\n 'muid': ['duim', 'muid'],\n 'muilla': ['allium', 'alulim', 'muilla'],\n 'muir': ['muir', 'rimu'],\n 'muishond': ['muishond', 'unmodish'],\n 'muist': ['muist', 'tuism'],\n 'mukri': ['kurmi', 'mukri'],\n 'muleta': ['amulet', 'muleta'],\n 'mulga': ['algum', 'almug', 'glaum', 'gluma', 'mulga'],\n 'mulier': ['mulier', 'muriel'],\n 'mulita': ['mulita', 'ultima'],\n 'mulk': ['kulm', 'mulk'],\n 'multani': ['multani', 'talinum'],\n 'multinervose': ['multinervose', 'volunteerism'],\n 'multipole': ['impollute', 'multipole'],\n 'mumbler': ['bummler', 'mumbler'],\n 'munda': ['maund', 'munda', 'numda', 'undam', 'unmad'],\n 'mundane': ['mundane', 'unamend', 'unmaned', 'unnamed'],\n 'munga': ['muang', 'munga'],\n 'mungo': ['mungo', 'muong'],\n 'munia': ['maniu', 'munia', 'unami'],\n 'munity': ['munity', 'mutiny'],\n 'muong': ['mungo', 'muong'],\n 'mura': ['arum', 'maru', 'mura'],\n 'murage': ['mauger', 'murage'],\n 'mural': ['mural', 'rumal'],\n 'muralist': ['altruism', 'muralist', 'traulism', 'ultraism'],\n 'muran': ['muran', 'ruman', 'unarm', 'unram', 'urman'],\n 'murat': ['martu', 'murat', 'turma'],\n 'muratorian': ['mortuarian', 'muratorian'],\n 'murderer': ['demurrer', 'murderer'],\n 'murdering': ['demurring', 'murdering'],\n 'murderingly': ['demurringly', 'murderingly'],\n 'murex': ['murex', 'rumex'],\n 'murga': ['garum', 'murga'],\n 'muricate': ['ceratium', 'muricate'],\n 'muricine': ['irenicum', 'muricine'],\n 'murid': ['mudir', 'murid'],\n 'muriel': ['mulier', 'muriel'],\n 'murine': ['murine', 'nerium'],\n 'murly': ['murly', 'rumly'],\n 'murmurer': ['murmurer', 'remurmur'],\n 'murrain': ['murrain', 'murrina'],\n 'murrina': ['murrain', 'murrina'],\n 'murut': ['murut', 'utrum'],\n 'murza': ['mazur', 'murza'],\n 'mus': ['mus', 'sum'],\n 'musa': ['masu', 'musa', 'saum'],\n 'musal': ['lamus', 'malus', 'musal', 'slaum'],\n 'musalmani': ['manualism', 'musalmani'],\n 'musang': ['magnus', 'musang'],\n 'musar': ['musar', 'ramus', 'rusma', 'surma'],\n 'musca': ['camus', 'musca', 'scaum', 'sumac'],\n 'muscade': ['camused', 'muscade'],\n 'muscarine': ['muscarine', 'sucramine'],\n 'musci': ['musci', 'music'],\n 'muscicole': ['leucocism', 'muscicole'],\n 'muscinae': ['muscinae', 'semuncia'],\n 'muscle': ['clumse', 'muscle'],\n 'muscly': ['clumsy', 'muscly'],\n 'muscone': ['consume', 'muscone'],\n 'muscot': ['custom', 'muscot'],\n 'mused': ['mused', 'sedum'],\n 'museography': ['hypergamous', 'museography'],\n 'muser': ['muser', 'remus', 'serum'],\n 'musha': ['hamus', 'musha'],\n 'music': ['musci', 'music'],\n 'musicate': ['autecism', 'musicate'],\n 'musico': ['musico', 'suomic'],\n 'musie': ['iseum', 'musie'],\n 'musing': ['musing', 'signum'],\n 'muslined': ['muslined', 'unmisled', 'unsmiled'],\n 'musophagine': ['amphigenous', 'musophagine'],\n 'mussaenda': ['mussaenda', 'unamassed'],\n 'must': ['must', 'smut', 'stum'],\n 'mustang': ['mustang', 'stagnum'],\n 'mustard': ['durmast', 'mustard'],\n 'muster': ['muster', 'sertum', 'stumer'],\n 'musterer': ['musterer', 'remuster'],\n 'mustily': ['mustily', 'mytilus'],\n 'muta': ['muta', 'taum'],\n 'mutable': ['atumble', 'mutable'],\n 'mutant': ['mutant', 'tantum', 'tutman'],\n 'mutase': ['meatus', 'mutase'],\n 'mute': ['mute', 'tume'],\n 'muteness': ['muteness', 'tenesmus'],\n 'mutescence': ['mutescence', 'tumescence'],\n 'mutilate': ['mutilate', 'ultimate'],\n 'mutilation': ['mutilation', 'ultimation'],\n 'mutiny': ['munity', 'mutiny'],\n 'mutism': ['mutism', 'summit'],\n 'mutual': ['mutual', 'umlaut'],\n 'mutulary': ['mutulary', 'tumulary'],\n 'muysca': ['cyamus', 'muysca'],\n 'mwa': ['maw', 'mwa'],\n 'my': ['my', 'ym'],\n 'mya': ['amy', 'may', 'mya', 'yam'],\n 'myal': ['amyl', 'lyam', 'myal'],\n 'myaria': ['amiray', 'myaria'],\n 'myatonic': ['cymation', 'myatonic', 'onymatic'],\n 'mycelia': ['amyelic', 'mycelia'],\n 'mycelian': ['clymenia', 'mycelian'],\n 'mycoid': ['cymoid', 'mycoid'],\n 'mycophagist': ['mycophagist', 'phagocytism'],\n 'mycose': ['cymose', 'mycose'],\n 'mycosterol': ['mycosterol', 'sclerotomy'],\n 'mycotrophic': ['chromotypic', 'cormophytic', 'mycotrophic'],\n 'mycterism': ['mycterism', 'symmetric'],\n 'myctodera': ['myctodera', 'radectomy'],\n 'mydaleine': ['amylidene', 'mydaleine'],\n 'myeloencephalitis': ['encephalomyelitis', 'myeloencephalitis'],\n 'myelomeningitis': ['meningomyelitis', 'myelomeningitis'],\n 'myelomeningocele': ['meningomyelocele', 'myelomeningocele'],\n 'myelon': ['lemony', 'myelon'],\n 'myelonal': ['amylenol', 'myelonal'],\n 'myeloneuritis': ['myeloneuritis', 'neuromyelitis'],\n 'myeloplast': ['meloplasty', 'myeloplast'],\n 'mygale': ['gamely', 'gleamy', 'mygale'],\n 'myitis': ['myitis', 'simity'],\n 'myliobatid': ['bimodality', 'myliobatid'],\n 'mymar': ['mymar', 'rammy'],\n 'myna': ['many', 'myna'],\n 'myoatrophy': ['amyotrophy', 'myoatrophy'],\n 'myocolpitis': ['myocolpitis', 'polysomitic'],\n 'myofibroma': ['fibromyoma', 'myofibroma'],\n 'myoglobin': ['boomingly', 'myoglobin'],\n 'myographic': ['microphagy', 'myographic'],\n 'myographist': ['myographist', 'pythagorism'],\n 'myolipoma': ['lipomyoma', 'myolipoma'],\n 'myomohysterectomy': ['hysteromyomectomy', 'myomohysterectomy'],\n 'myope': ['myope', 'pomey'],\n 'myoplastic': ['myoplastic', 'polymastic'],\n 'myoplasty': ['myoplasty', 'polymasty'],\n 'myopolar': ['myopolar', 'playroom'],\n 'myops': ['mopsy', 'myops'],\n 'myosin': ['isonym', 'myosin', 'simony'],\n 'myosote': ['myosote', 'toysome'],\n 'myotenotomy': ['myotenotomy', 'tenomyotomy'],\n 'myotic': ['comity', 'myotic'],\n 'myra': ['army', 'mary', 'myra', 'yarm'],\n 'myrcia': ['myrcia', 'myrica'],\n 'myrialiter': ['myrialiter', 'myrialitre'],\n 'myrialitre': ['myrialiter', 'myrialitre'],\n 'myriameter': ['myriameter', 'myriametre'],\n 'myriametre': ['myriameter', 'myriametre'],\n 'myrianida': ['dimyarian', 'myrianida'],\n 'myrica': ['myrcia', 'myrica'],\n 'myristate': ['myristate', 'tasimetry'],\n 'myristin': ['ministry', 'myristin'],\n 'myristone': ['myristone', 'smyrniote'],\n 'myronate': ['monetary', 'myronate', 'naometry'],\n 'myrsinad': ['misandry', 'myrsinad'],\n 'myrtales': ['masterly', 'myrtales'],\n 'myrtle': ['myrtle', 'termly'],\n 'mysell': ['mysell', 'smelly'],\n 'mysian': ['maysin', 'minyas', 'mysian'],\n 'mysis': ['missy', 'mysis'],\n 'mysterial': ['mysterial', 'salimetry'],\n 'mystes': ['mystes', 'system'],\n 'mythographer': ['mythographer', 'thermography'],\n 'mythogreen': ['mythogreen', 'thermogeny'],\n 'mythologer': ['mythologer', 'thermology'],\n 'mythopoeic': ['homeotypic', 'mythopoeic'],\n 'mythus': ['mythus', 'thymus'],\n 'mytilid': ['mytilid', 'timidly'],\n 'mytilus': ['mustily', 'mytilus'],\n 'myxochondroma': ['chondromyxoma', 'myxochondroma'],\n 'myxochondrosarcoma': ['chondromyxosarcoma', 'myxochondrosarcoma'],\n 'myxocystoma': ['cystomyxoma', 'myxocystoma'],\n 'myxofibroma': ['fibromyxoma', 'myxofibroma'],\n 'myxofibrosarcoma': ['fibromyxosarcoma', 'myxofibrosarcoma'],\n 'myxoinoma': ['inomyxoma', 'myxoinoma'],\n 'myxolipoma': ['lipomyxoma', 'myxolipoma'],\n 'myxotheca': ['chemotaxy', 'myxotheca'],\n 'na': ['an', 'na'],\n 'naa': ['ana', 'naa'],\n 'naam': ['anam', 'mana', 'naam', 'nama'],\n 'nab': ['ban', 'nab'],\n 'nabak': ['banak', 'nabak'],\n 'nabal': ['alban', 'balan', 'banal', 'laban', 'nabal', 'nabla'],\n 'nabalism': ['bailsman', 'balanism', 'nabalism'],\n 'nabalite': ['albanite', 'balanite', 'nabalite'],\n 'nabalus': ['balanus', 'nabalus', 'subanal'],\n 'nabk': ['bank', 'knab', 'nabk'],\n 'nabla': ['alban', 'balan', 'banal', 'laban', 'nabal', 'nabla'],\n 'nable': ['leban', 'nable'],\n 'nabobishly': ['babylonish', 'nabobishly'],\n 'nabothian': ['bathonian', 'nabothian'],\n 'nabs': ['nabs', 'snab'],\n 'nabu': ['baun', 'buna', 'nabu', 'nuba'],\n 'nacarat': ['cantara', 'nacarat'],\n 'nace': ['acne', 'cane', 'nace'],\n 'nachitoch': ['chanchito', 'nachitoch'],\n 'nacre': ['caner', 'crane', 'crena', 'nacre', 'rance'],\n 'nacred': ['cedarn', 'dancer', 'nacred'],\n 'nacreous': ['carneous', 'nacreous'],\n 'nacrite': ['centiar', 'certain', 'citrean', 'nacrite', 'nectria'],\n 'nacrous': ['carnous', 'nacrous', 'narcous'],\n 'nadder': ['dander', 'darned', 'nadder'],\n 'nadeem': ['amende', 'demean', 'meaned', 'nadeem'],\n 'nadir': ['darin', 'dinar', 'drain', 'indra', 'nadir', 'ranid'],\n 'nadorite': ['andorite', 'nadorite', 'ordinate', 'rodentia'],\n 'nae': ['ean', 'nae', 'nea'],\n 'nael': ['alen', 'lane', 'lean', 'lena', 'nael', 'neal'],\n 'naether': ['earthen', 'enheart', 'hearten', 'naether', 'teheran', 'traheen'],\n 'nag': ['gan', 'nag'],\n 'nagara': ['angara', 'aranga', 'nagara'],\n 'nagari': ['graian', 'nagari'],\n 'nagatelite': ['gelatinate', 'nagatelite'],\n 'nagger': ['ganger', 'grange', 'nagger'],\n 'nagging': ['ganging', 'nagging'],\n 'naggle': ['laggen', 'naggle'],\n 'naggly': ['gangly', 'naggly'],\n 'nagmaal': ['malanga', 'nagmaal'],\n 'nagnag': ['gangan', 'nagnag'],\n 'nagnail': ['alangin', 'anginal', 'anglian', 'nagnail'],\n 'nagor': ['angor',\n           'argon',\n           'goran',\n           'grano',\n           'groan',\n           'nagor',\n           'orang',\n           'organ',\n           'rogan',\n           'ronga'],\n 'nagster': ['angster', 'garnets', 'nagster', 'strange'],\n 'nagual': ['angula', 'nagual'],\n 'nahani': ['hainan', 'nahani'],\n 'nahor': ['nahor', 'norah', 'rohan'],\n 'nahum': ['human', 'nahum'],\n 'naiad': ['danai', 'diana', 'naiad'],\n 'naiant': ['naiant', 'tainan'],\n 'naias': ['asian', 'naias', 'sanai'],\n 'naid': ['adin', 'andi', 'dain', 'dani', 'dian', 'naid'],\n 'naif': ['fain', 'naif'],\n 'naifly': ['fainly', 'naifly'],\n 'naig': ['gain', 'inga', 'naig', 'ngai'],\n 'naik': ['akin', 'kina', 'naik'],\n 'nail': ['alin', 'anil', 'lain', 'lina', 'nail'],\n 'nailer': ['arline', 'larine', 'linear', 'nailer', 'renail'],\n 'naileress': ['earliness', 'naileress'],\n 'nailery': ['inlayer', 'nailery'],\n 'nailless': ['nailless', 'sensilla'],\n 'nailrod': ['nailrod', 'ordinal', 'rinaldo', 'rodinal'],\n 'nailshop': ['nailshop', 'siphonal'],\n 'naily': ['inlay', 'naily'],\n 'naim': ['amin', 'main', 'mani', 'mian', 'mina', 'naim'],\n 'nain': ['nain', 'nina'],\n 'naio': ['aion', 'naio'],\n 'nair': ['arni', 'iran', 'nair', 'rain', 'rani'],\n 'nairy': ['nairy', 'rainy'],\n 'nais': ['anis', 'nais', 'nasi', 'nias', 'sain', 'sina'],\n 'naish': ['naish', 'shina'],\n 'naither': ['anither', 'inearth', 'naither'],\n 'naive': ['avine', 'naive', 'vinea'],\n 'naivete': ['naivete', 'nieveta'],\n 'nak': ['kan', 'nak'],\n 'naked': ['kande', 'knead', 'naked'],\n 'nakedish': ['headskin', 'nakedish', 'sinkhead'],\n 'naker': ['anker', 'karen', 'naker'],\n 'nakir': ['inkra', 'krina', 'nakir', 'rinka'],\n 'nako': ['kona', 'nako'],\n 'nalita': ['antlia', 'latian', 'nalita'],\n 'nallah': ['hallan', 'nallah'],\n 'nam': ['man', 'nam'],\n 'nama': ['anam', 'mana', 'naam', 'nama'],\n 'namaz': ['namaz', 'zaman'],\n 'nambe': ['beman', 'nambe'],\n 'namda': ['adman', 'daman', 'namda'],\n 'name': ['amen', 'enam', 'mane', 'mean', 'name', 'nema'],\n 'nameability': ['amenability', 'nameability'],\n 'nameable': ['amenable', 'nameable'],\n 'nameless': ['lameness', 'maleness', 'maneless', 'nameless'],\n 'nameling': ['mangelin', 'nameling'],\n 'namely': ['meanly', 'namely'],\n 'namer': ['enarm', 'namer', 'reman'],\n 'nammad': ['madman', 'nammad'],\n 'nan': ['ann', 'nan'],\n 'nana': ['anan', 'anna', 'nana'],\n 'nanaimo': ['nanaimo', 'omniana'],\n 'nancy': ['canny', 'nancy'],\n 'nandi': ['indan', 'nandi'],\n 'nane': ['anne', 'nane'],\n 'nanes': ['nanes', 'senna'],\n 'nanoid': ['adonin', 'nanoid', 'nonaid'],\n 'nanosomia': ['nanosomia', 'nosomania'],\n 'nanpie': ['nanpie', 'pennia', 'pinnae'],\n 'naological': ['colonalgia', 'naological'],\n 'naometry': ['monetary', 'myronate', 'naometry'],\n 'naomi': ['amino', 'inoma', 'naomi', 'omani', 'omina'],\n 'naoto': ['naoto', 'toona'],\n 'nap': ['nap', 'pan'],\n 'napaean': ['anapnea', 'napaean'],\n 'nape': ['nape', 'neap', 'nepa', 'pane', 'pean'],\n 'napead': ['napead', 'panade'],\n 'napery': ['napery', 'pyrena'],\n 'naphthalize': ['naphthalize', 'phthalazine'],\n 'naphtol': ['haplont', 'naphtol'],\n 'napkin': ['napkin', 'pankin'],\n 'napped': ['append', 'napped'],\n 'napper': ['napper', 'papern'],\n 'napron': ['napron', 'nonpar'],\n 'napthionic': ['antiphonic', 'napthionic'],\n 'napu': ['napu', 'puan', 'puna'],\n 'nar': ['arn', 'nar', 'ran'],\n 'narcaciontes': ['narcaciontes', 'transoceanic'],\n 'narcose': ['carnose', 'coarsen', 'narcose'],\n 'narcotia': ['craniota', 'croatian', 'narcotia', 'raincoat'],\n 'narcoticism': ['intracosmic', 'narcoticism'],\n 'narcotina': ['anarcotin', 'cantorian', 'carnation', 'narcotina'],\n 'narcotine': ['connarite', 'container', 'cotarnine', 'crenation', 'narcotine'],\n 'narcotism': ['narcotism', 'romancist'],\n 'narcotist': ['narcotist', 'stratonic'],\n 'narcotize': ['narcotize', 'zirconate'],\n 'narcous': ['carnous', 'nacrous', 'narcous'],\n 'nard': ['darn', 'nard', 'rand'],\n 'nardine': ['adrenin', 'nardine'],\n 'nardus': ['nardus', 'sundar', 'sundra'],\n 'nares': ['anser', 'nares', 'rasen', 'snare'],\n 'nargil': ['nargil', 'raglin'],\n 'naric': ['cairn', 'crain', 'naric'],\n 'narica': ['acinar',\n            'arnica',\n            'canari',\n            'carian',\n            'carina',\n            'crania',\n            'narica'],\n 'nariform': ['nariform', 'raniform'],\n 'narine': ['narine', 'ranine'],\n 'nark': ['knar', 'kran', 'nark', 'rank'],\n 'narration': ['narration', 'tornarian'],\n 'narthecium': ['anthericum', 'narthecium'],\n 'nary': ['nary', 'yarn'],\n 'nasab': ['nasab', 'saban'],\n 'nasal': ['alans', 'lanas', 'nasal'],\n 'nasalism': ['nasalism', 'sailsman'],\n 'nasard': ['nasard', 'sandra'],\n 'nascapi': ['capsian', 'caspian', 'nascapi', 'panisca'],\n 'nash': ['hans', 'nash', 'shan'],\n 'nashgab': ['bangash', 'nashgab'],\n 'nasi': ['anis', 'nais', 'nasi', 'nias', 'sain', 'sina'],\n 'nasial': ['anisal', 'nasial', 'salian', 'salina'],\n 'nasitis': ['nasitis', 'sistani'],\n 'nasoantral': ['antronasal', 'nasoantral'],\n 'nasobuccal': ['bucconasal', 'nasobuccal'],\n 'nasofrontal': ['frontonasal', 'nasofrontal'],\n 'nasolabial': ['labionasal', 'nasolabial'],\n 'nasolachrymal': ['lachrymonasal', 'nasolachrymal'],\n 'nasonite': ['estonian', 'nasonite'],\n 'nasoorbital': ['nasoorbital', 'orbitonasal'],\n 'nasopalatal': ['nasopalatal', 'palatonasal'],\n 'nasoseptal': ['nasoseptal', 'septonasal'],\n 'nassa': ['nassa', 'sasan'],\n 'nassidae': ['assidean', 'nassidae'],\n 'nast': ['nast', 'sant', 'stan'],\n 'nastic': ['incast', 'nastic'],\n 'nastily': ['nastily', 'saintly', 'staynil'],\n 'nasturtion': ['antrustion', 'nasturtion'],\n 'nasty': ['nasty', 'styan', 'tansy'],\n 'nasua': ['nasua', 'sauna'],\n 'nasus': ['nasus', 'susan'],\n 'nasute': ['nasute', 'nauset', 'unseat'],\n 'nat': ['ant', 'nat', 'tan'],\n 'nataka': ['nataka', 'tanaka'],\n 'natal': ['antal', 'natal'],\n 'natalia': ['altaian', 'latania', 'natalia'],\n 'natalie': ['laniate', 'natalie', 'taenial'],\n 'nataloin': ['latonian', 'nataloin', 'national'],\n 'natals': ['aslant', 'lansat', 'natals', 'santal'],\n 'natator': ['arnotta', 'natator'],\n 'natatorium': ['maturation', 'natatorium'],\n 'natch': ['chant', 'natch'],\n 'nate': ['ante', 'aten', 'etna', 'nate', 'neat', 'taen', 'tane', 'tean'],\n 'nates': ['antes', 'nates', 'stane', 'stean'],\n 'nathan': ['nathan', 'thanan'],\n 'nathe': ['enhat', 'ethan', 'nathe', 'neath', 'thane'],\n 'nather': ['anther', 'nather', 'tharen', 'thenar'],\n 'natica': ['actian', 'natica', 'tanica'],\n 'naticiform': ['actiniform', 'naticiform'],\n 'naticine': ['actinine', 'naticine'],\n 'natick': ['catkin', 'natick'],\n 'naticoid': ['actinoid', 'diatonic', 'naticoid'],\n 'nation': ['anoint', 'nation'],\n 'national': ['latonian', 'nataloin', 'national'],\n 'native': ['native', 'navite'],\n 'natively': ['natively', 'venality'],\n 'nativist': ['nativist', 'visitant'],\n 'natr': ['natr', 'rant', 'tarn', 'tran'],\n 'natricinae': ['natricinae', 'nectarinia'],\n 'natricine': ['crinanite', 'natricine'],\n 'natrolite': ['natrolite', 'tentorial'],\n 'natter': ['attern', 'natter', 'ratten', 'tarten'],\n 'nattered': ['attender', 'nattered', 'reattend'],\n 'nattily': ['nattily', 'titanyl'],\n 'nattle': ['latent', 'latten', 'nattle', 'talent', 'tantle'],\n 'naturalistic': ['naturalistic', 'unartistical'],\n 'naturing': ['gainturn', 'naturing'],\n 'naturism': ['naturism', 'sturmian', 'turanism'],\n 'naturist': ['antirust', 'naturist'],\n 'naturistic': ['naturistic', 'unartistic'],\n 'naturistically': ['naturistically', 'unartistically'],\n 'nauger': ['nauger', 'raunge', 'ungear'],\n 'naumk': ['kuman', 'naumk'],\n 'naunt': ['naunt', 'tunna'],\n 'nauntle': ['annulet', 'nauntle'],\n 'nauplius': ['nauplius', 'paulinus'],\n 'nauset': ['nasute', 'nauset', 'unseat'],\n 'naut': ['antu', 'aunt', 'naut', 'taun', 'tuan', 'tuna'],\n 'nauther': ['haunter', 'nauther', 'unearth', 'unheart', 'urethan'],\n 'nautic': ['anicut', 'nautic', 'ticuna', 'tunica'],\n 'nautical': ['actinula', 'nautical'],\n 'nautiloid': ['lutianoid', 'nautiloid'],\n 'nautilus': ['lutianus', 'nautilus', 'ustulina'],\n 'naval': ['alvan', 'naval'],\n 'navalist': ['navalist', 'salivant'],\n 'navar': ['navar', 'varan', 'varna'],\n 'nave': ['evan', 'nave', 'vane'],\n 'navel': ['elvan', 'navel', 'venal'],\n 'naviculare': ['naviculare', 'uncavalier'],\n 'navigant': ['navigant', 'vaginant'],\n 'navigate': ['navigate', 'vaginate'],\n 'navite': ['native', 'navite'],\n 'naw': ['awn', 'naw', 'wan'],\n 'nawt': ['nawt', 'tawn', 'want'],\n 'nay': ['any', 'nay', 'yan'],\n 'nayar': ['aryan', 'nayar', 'rayan'],\n 'nazarite': ['nazarite', 'nazirate', 'triazane'],\n 'nazi': ['nazi', 'zain'],\n 'nazim': ['nazim', 'nizam'],\n 'nazirate': ['nazarite', 'nazirate', 'triazane'],\n 'nazirite': ['nazirite', 'triazine'],\n 'ne': ['en', 'ne'],\n 'nea': ['ean', 'nae', 'nea'],\n 'neal': ['alen', 'lane', 'lean', 'lena', 'nael', 'neal'],\n 'neanic': ['canine', 'encina', 'neanic'],\n 'neap': ['nape', 'neap', 'nepa', 'pane', 'pean'],\n 'neapolitan': ['antelopian', 'neapolitan', 'panelation'],\n 'nearby': ['barney', 'nearby'],\n 'nearctic': ['acentric', 'encratic', 'nearctic'],\n 'nearest': ['earnest', 'eastern', 'nearest'],\n 'nearish': ['arshine', 'nearish', 'rhesian', 'sherani'],\n 'nearly': ['anerly', 'nearly'],\n 'nearmost': ['monaster', 'monstera', 'nearmost', 'storeman'],\n 'nearthrosis': ['enarthrosis', 'nearthrosis'],\n 'neat': ['ante', 'aten', 'etna', 'nate', 'neat', 'taen', 'tane', 'tean'],\n 'neaten': ['etnean', 'neaten'],\n 'neath': ['enhat', 'ethan', 'nathe', 'neath', 'thane'],\n 'neatherd': ['adherent', 'headrent', 'neatherd', 'threaden'],\n 'neatherdess': ['heartedness', 'neatherdess'],\n 'neb': ['ben', 'neb'],\n 'neback': ['backen', 'neback'],\n 'nebaioth': ['boethian', 'nebaioth'],\n 'nebalia': ['abelian', 'nebalia'],\n 'nebelist': ['nebelist', 'stilbene', 'tensible'],\n 'nebula': ['nebula', 'unable', 'unbale'],\n 'nebulose': ['bluenose', 'nebulose'],\n 'necator': ['enactor', 'necator', 'orcanet'],\n 'necessarian': ['necessarian', 'renaissance'],\n 'neckar': ['canker', 'neckar'],\n 'necrogenic': ['congeneric', 'necrogenic'],\n 'necrogenous': ['congenerous', 'necrogenous'],\n 'necrology': ['crenology', 'necrology'],\n 'necropoles': ['necropoles', 'preconsole'],\n 'necropolis': ['clinospore', 'necropolis'],\n 'necrotic': ['crocetin', 'necrotic'],\n 'necrotomic': ['necrotomic', 'oncometric'],\n 'necrotomy': ['necrotomy', 'normocyte', 'oncometry'],\n 'nectar': ['canter',\n            'creant',\n            'cretan',\n            'nectar',\n            'recant',\n            'tanrec',\n            'trance'],\n 'nectareal': ['lactarene', 'nectareal'],\n 'nectared': ['crenated', 'decanter', 'nectared'],\n 'nectareous': ['countersea', 'nectareous'],\n 'nectarial': ['carnalite', 'claretian', 'lacertian', 'nectarial'],\n 'nectarian': ['cratinean', 'incarnate', 'nectarian'],\n 'nectaried': ['nectaried', 'tridecane'],\n 'nectarine': ['inertance', 'nectarine'],\n 'nectarinia': ['natricinae', 'nectarinia'],\n 'nectarious': ['nectarious', 'recusation'],\n 'nectarlike': ['nectarlike', 'trancelike'],\n 'nectarous': ['acentrous', 'courtesan', 'nectarous'],\n 'nectary': ['encraty', 'nectary'],\n 'nectophore': ['ctenophore', 'nectophore'],\n 'nectria': ['centiar', 'certain', 'citrean', 'nacrite', 'nectria'],\n 'ned': ['den', 'end', 'ned'],\n 'nedder': ['nedder', 'redden'],\n 'neebor': ['boreen', 'enrobe', 'neebor', 'rebone'],\n 'need': ['dene', 'eden', 'need'],\n 'needer': ['endere', 'needer', 'reeden'],\n 'needfire': ['needfire', 'redefine'],\n 'needily': ['needily', 'yielden'],\n 'needle': ['lendee', 'needle'],\n 'needless': ['needless', 'seldseen'],\n 'needs': ['dense', 'needs'],\n 'needsome': ['modenese', 'needsome'],\n 'neeger': ['neeger', 'reenge', 'renege'],\n 'neeld': ['leden', 'neeld'],\n 'neep': ['neep', 'peen'],\n 'neepour': ['neepour', 'neurope'],\n 'neer': ['erne', 'neer', 'reen'],\n 'neet': ['neet', 'nete', 'teen'],\n 'neetup': ['neetup', 'petune'],\n 'nef': ['fen', 'nef'],\n 'nefast': ['fasten', 'nefast', 'stefan'],\n 'neftgil': ['felting', 'neftgil'],\n 'negate': ['geneat', 'negate', 'tegean'],\n 'negation': ['antigone', 'negation'],\n 'negative': ['agentive', 'negative'],\n 'negativism': ['negativism', 'timesaving'],\n 'negator': ['negator', 'tronage'],\n 'negatron': ['argenton', 'negatron'],\n 'neger': ['genre', 'green', 'neger', 'reneg'],\n 'neglecter': ['neglecter', 'reneglect'],\n 'negritian': ['negritian', 'retaining'],\n 'negrito': ['ergotin', 'genitor', 'negrito', 'ogtiern', 'trigone'],\n 'negritoid': ['negritoid', 'rodingite'],\n 'negro': ['ergon', 'genro', 'goner', 'negro'],\n 'negroid': ['groined', 'negroid'],\n 'negroidal': ['girandole', 'negroidal'],\n 'negroize': ['genizero', 'negroize'],\n 'negroloid': ['gondolier', 'negroloid'],\n 'negrotic': ['gerontic', 'negrotic'],\n 'negundo': ['dungeon', 'negundo'],\n 'negus': ['genus', 'negus'],\n 'neif': ['enif', 'fine', 'neif', 'nife'],\n 'neigh': ['hinge', 'neigh'],\n 'neil': ['lien', 'line', 'neil', 'nile'],\n 'neiper': ['neiper', 'perine', 'pirene', 'repine'],\n 'neist': ['inset', 'neist', 'snite', 'stein', 'stine', 'tsine'],\n 'neither': ['enherit', 'etherin', 'neither', 'therein'],\n 'nekkar': ['kraken', 'nekkar'],\n 'nekton': ['kenton', 'nekton'],\n 'nelken': ['kennel', 'nelken'],\n 'nelsonite': ['nelsonite', 'solentine'],\n 'nelumbian': ['nelumbian', 'unminable'],\n 'nema': ['amen', 'enam', 'mane', 'mean', 'name', 'nema'],\n 'nemalite': ['melanite', 'meletian', 'metaline', 'nemalite'],\n 'nematoda': ['mantodea', 'nematoda'],\n 'nematoid': ['dominate', 'nematoid'],\n 'nematophyton': ['nematophyton', 'tenontophyma'],\n 'nemertinea': ['minnetaree', 'nemertinea'],\n 'nemertini': ['intermine', 'nemertini', 'terminine'],\n 'nemertoid': ['interdome', 'mordenite', 'nemertoid'],\n 'nemoral': ['almoner', 'moneral', 'nemoral'],\n 'nenta': ['anent', 'annet', 'nenta'],\n 'neo': ['eon', 'neo', 'one'],\n 'neoarctic': ['accretion', 'anorectic', 'neoarctic'],\n 'neocomian': ['monoecian', 'neocomian'],\n 'neocosmic': ['economics', 'neocosmic'],\n 'neocyte': ['enocyte', 'neocyte'],\n 'neogaea': ['eogaean', 'neogaea'],\n 'neogenesis': ['neogenesis', 'noegenesis'],\n 'neogenetic': ['neogenetic', 'noegenetic'],\n 'neognathous': ['anthogenous', 'neognathous'],\n 'neolatry': ['neolatry', 'ornately', 'tyrolean'],\n 'neolithic': ['ichnolite', 'neolithic'],\n 'neomiracle': ['ceremonial', 'neomiracle'],\n 'neomorphic': ['microphone', 'neomorphic'],\n 'neon': ['neon', 'none'],\n 'neophilism': ['neophilism', 'philoneism'],\n 'neophytic': ['hypnoetic', 'neophytic'],\n 'neoplasm': ['neoplasm', 'pleonasm', 'polesman', 'splenoma'],\n 'neoplastic': ['neoplastic', 'pleonastic'],\n 'neorama': ['neorama', 'romaean'],\n 'neornithes': ['neornithes', 'rhinestone'],\n 'neossin': ['neossin', 'sension'],\n 'neoteric': ['erection', 'neoteric', 'nocerite', 'renotice'],\n 'neoterism': ['moistener', 'neoterism'],\n 'neotragus': ['argentous', 'neotragus'],\n 'neotropic': ['ectropion', 'neotropic'],\n 'neotropical': ['neotropical', 'percolation'],\n 'neoza': ['neoza', 'ozena'],\n 'nep': ['nep', 'pen'],\n 'nepa': ['nape', 'neap', 'nepa', 'pane', 'pean'],\n 'nepal': ['alpen', 'nepal', 'panel', 'penal', 'plane'],\n 'nepali': ['alpine', 'nepali', 'penial', 'pineal'],\n 'neper': ['neper', 'preen', 'repen'],\n 'nepheloscope': ['nepheloscope', 'phonelescope'],\n 'nephite': ['heptine', 'nephite'],\n 'nephogram': ['gomphrena', 'nephogram'],\n 'nephological': ['nephological', 'phenological'],\n 'nephologist': ['nephologist', 'phenologist'],\n 'nephology': ['nephology', 'phenology'],\n 'nephria': ['heparin', 'nephria'],\n 'nephric': ['nephric', 'phrenic', 'pincher'],\n 'nephrite': ['nephrite', 'prehnite', 'trephine'],\n 'nephritic': ['nephritic', 'phrenitic', 'prehnitic'],\n 'nephritis': ['inspreith', 'nephritis', 'phrenitis'],\n 'nephrocardiac': ['nephrocardiac', 'phrenocardiac'],\n 'nephrocolic': ['nephrocolic', 'phrenocolic'],\n 'nephrocystosis': ['cystonephrosis', 'nephrocystosis'],\n 'nephrogastric': ['gastrophrenic', 'nephrogastric', 'phrenogastric'],\n 'nephrohydrosis': ['hydronephrosis', 'nephrohydrosis'],\n 'nephrolithotomy': ['lithonephrotomy', 'nephrolithotomy'],\n 'nephrologist': ['nephrologist', 'phrenologist'],\n 'nephrology': ['nephrology', 'phrenology'],\n 'nephropathic': ['nephropathic', 'phrenopathic'],\n 'nephropathy': ['nephropathy', 'phrenopathy'],\n 'nephropsidae': ['nephropsidae', 'praesphenoid'],\n 'nephroptosia': ['nephroptosia', 'prosiphonate'],\n 'nephropyelitis': ['nephropyelitis', 'pyelonephritis'],\n 'nephropyosis': ['nephropyosis', 'pyonephrosis'],\n 'nephrosis': ['nephrosis', 'phronesis'],\n 'nephrostoma': ['nephrostoma', 'strophomena'],\n 'nephrotome': ['nephrotome', 'phonometer'],\n 'nephrotomy': ['nephrotomy', 'phonometry'],\n 'nepman': ['nepman', 'penman'],\n 'nepotal': ['lepanto', 'nepotal', 'petalon', 'polenta'],\n 'nepote': ['nepote', 'pontee', 'poteen'],\n 'nepotic': ['entopic', 'nepotic', 'pentoic'],\n 'nereid': ['denier', 'nereid'],\n 'nereis': ['inseer', 'nereis', 'seiner', 'serine', 'sirene'],\n 'neri': ['neri', 'rein', 'rine'],\n 'nerita': ['nerita', 'ratine', 'retain', 'retina', 'tanier'],\n 'neritic': ['citrine', 'crinite', 'inciter', 'neritic'],\n 'neritina': ['neritina', 'retinian'],\n 'neritoid': ['neritoid', 'retinoid'],\n 'nerium': ['murine', 'nerium'],\n 'neroic': ['cerion', 'coiner', 'neroic', 'orcein', 'recoin'],\n 'neronic': ['corinne', 'cornein', 'neronic'],\n 'nerval': ['nerval', 'vernal'],\n 'nervate': ['nervate', 'veteran'],\n 'nervation': ['nervation', 'vernation'],\n 'nerve': ['nerve', 'never'],\n 'nervid': ['driven', 'nervid', 'verdin'],\n 'nervine': ['innerve', 'nervine', 'vernine'],\n 'nerviness': ['inverness', 'nerviness'],\n 'nervish': ['nervish', 'shriven'],\n 'nervulose': ['nervulose', 'unresolve', 'vulnerose'],\n 'nese': ['ense', 'esne', 'nese', 'seen', 'snee'],\n 'nesh': ['nesh', 'shen'],\n 'nesiot': ['nesiot', 'ostein'],\n 'neskhi': ['kishen', 'neskhi'],\n 'neslia': ['alsine', 'neslia', 'saline', 'selina', 'silane'],\n 'nest': ['nest', 'sent', 'sten'],\n 'nester': ['ernest', 'nester', 'resent', 'streen'],\n 'nestiatria': ['intarsiate', 'nestiatria'],\n 'nestlike': ['nestlike', 'skeletin'],\n 'nestor': ['nestor', 'sterno', 'stoner', 'strone', 'tensor'],\n 'net': ['net', 'ten'],\n 'netcha': ['entach', 'netcha'],\n 'nete': ['neet', 'nete', 'teen'],\n 'neter': ['enter', 'neter', 'renet', 'terne', 'treen'],\n 'netful': ['fluent', 'netful', 'unfelt', 'unleft'],\n 'neth': ['hent', 'neth', 'then'],\n 'nether': ['erthen', 'henter', 'nether', 'threne'],\n 'neti': ['iten', 'neti', 'tien', 'tine'],\n 'netman': ['manent', 'netman'],\n 'netsuke': ['kuneste', 'netsuke'],\n 'nettable': ['nettable', 'tentable'],\n 'nettapus': ['nettapus', 'stepaunt'],\n 'netted': ['detent', 'netted', 'tented'],\n 'netter': ['netter', 'retent', 'tenter'],\n 'nettion': ['nettion', 'tention', 'tontine'],\n 'nettle': ['letten', 'nettle'],\n 'nettler': ['nettler', 'ternlet'],\n 'netty': ['netty', 'tenty'],\n 'neurad': ['endura', 'neurad', 'undear', 'unread'],\n 'neural': ['lunare', 'neural', 'ulnare', 'unreal'],\n 'neuralgic': ['genicular', 'neuralgic'],\n 'neuralist': ['neuralist', 'ulsterian', 'unrealist'],\n 'neurectopia': ['eucatropine', 'neurectopia'],\n 'neuric': ['curine', 'erucin', 'neuric'],\n 'neurilema': ['lemurinae', 'neurilema'],\n 'neurin': ['enruin', 'neurin', 'unrein'],\n 'neurism': ['neurism', 'semiurn'],\n 'neurite': ['neurite', 'retinue', 'reunite', 'uterine'],\n 'neuroblast': ['neuroblast', 'unsortable'],\n 'neurodermatosis': ['dermatoneurosis', 'neurodermatosis'],\n 'neurofibroma': ['fibroneuroma', 'neurofibroma'],\n 'neurofil': ['fluorine', 'neurofil'],\n 'neuroganglion': ['ganglioneuron', 'neuroganglion'],\n 'neurogenic': ['encoignure', 'neurogenic'],\n 'neuroid': ['dourine', 'neuroid'],\n 'neurolysis': ['neurolysis', 'resinously'],\n 'neuromast': ['anoestrum', 'neuromast'],\n 'neuromyelitis': ['myeloneuritis', 'neuromyelitis'],\n 'neuronal': ['enaluron', 'neuronal'],\n 'neurope': ['neepour', 'neurope'],\n 'neuropsychological': ['neuropsychological', 'psychoneurological'],\n 'neuropsychosis': ['neuropsychosis', 'psychoneurosis'],\n 'neuropteris': ['interposure', 'neuropteris'],\n 'neurosis': ['neurosis', 'resinous'],\n 'neurotic': ['eruction', 'neurotic'],\n 'neurotripsy': ['neurotripsy', 'tripyrenous'],\n 'neustrian': ['neustrian', 'saturnine', 'sturninae'],\n 'neuter': ['neuter', 'retune', 'runtee', 'tenure', 'tureen'],\n 'neuterly': ['neuterly', 'rutylene'],\n 'neutral': ['laurent', 'neutral', 'unalert'],\n 'neutralism': ['neutralism', 'trimensual'],\n 'neutrally': ['neutrally', 'unalertly'],\n 'neutralness': ['neutralness', 'unalertness'],\n 'nevada': ['nevada', 'vedana', 'venada'],\n 'neve': ['even', 'neve', 'veen'],\n 'never': ['nerve', 'never'],\n 'nevo': ['nevo', 'oven'],\n 'nevoy': ['envoy', 'nevoy', 'yoven'],\n 'nevus': ['nevus', 'venus'],\n 'new': ['new', 'wen'],\n 'newar': ['awner', 'newar'],\n 'newari': ['newari', 'wainer'],\n 'news': ['news', 'sewn', 'snew'],\n 'newt': ['newt', 'went'],\n 'nexus': ['nexus', 'unsex'],\n 'ngai': ['gain', 'inga', 'naig', 'ngai'],\n 'ngaio': ['gonia', 'ngaio', 'nogai'],\n 'ngapi': ['aping', 'ngapi', 'pangi'],\n 'ngoko': ['kongo', 'ngoko'],\n 'ni': ['in', 'ni'],\n 'niagara': ['agrania', 'angaria', 'niagara'],\n 'nias': ['anis', 'nais', 'nasi', 'nias', 'sain', 'sina'],\n 'niata': ['anita', 'niata', 'tania'],\n 'nib': ['bin', 'nib'],\n 'nibs': ['nibs', 'snib'],\n 'nibsome': ['nibsome', 'nimbose'],\n 'nicarao': ['aaronic', 'nicarao', 'ocarina'],\n 'niccolous': ['niccolous', 'occlusion'],\n 'nice': ['cine', 'nice'],\n 'nicene': ['cinene', 'nicene'],\n 'nicenist': ['inscient', 'nicenist'],\n 'nicesome': ['nicesome', 'semicone'],\n 'nichael': ['chilean', 'echinal', 'nichael'],\n 'niche': ['chien', 'chine', 'niche'],\n 'nicher': ['enrich', 'nicher', 'richen'],\n 'nicholas': ['lichanos', 'nicholas'],\n 'nickel': ['nickel', 'nickle'],\n 'nickle': ['nickel', 'nickle'],\n 'nicol': ['colin', 'nicol'],\n 'nicolas': ['nicolas', 'scaloni'],\n 'nicolette': ['lecontite', 'nicolette'],\n 'nicotian': ['aconitin', 'inaction', 'nicotian'],\n 'nicotianin': ['nicotianin', 'nicotinian'],\n 'nicotined': ['incondite', 'nicotined'],\n 'nicotinian': ['nicotianin', 'nicotinian'],\n 'nicotism': ['monistic', 'nicotism', 'nomistic'],\n 'nicotize': ['nicotize', 'tonicize'],\n 'nictate': ['nictate', 'tetanic'],\n 'nictation': ['antitonic', 'nictation'],\n 'nid': ['din', 'ind', 'nid'],\n 'nidal': ['danli', 'ladin', 'linda', 'nidal'],\n 'nidana': ['andian', 'danian', 'nidana'],\n 'nidation': ['nidation', 'notidani'],\n 'niddle': ['dindle', 'niddle'],\n 'nide': ['dine', 'enid', 'inde', 'nide'],\n 'nidge': ['deign', 'dinge', 'nidge'],\n 'nidget': ['nidget', 'tinged'],\n 'niding': ['dining', 'indign', 'niding'],\n 'nidologist': ['indologist', 'nidologist'],\n 'nidology': ['indology', 'nidology'],\n 'nidularia': ['nidularia', 'uniradial'],\n 'nidulate': ['nidulate', 'untailed'],\n 'nidus': ['dinus', 'indus', 'nidus'],\n 'niello': ['lionel', 'niello'],\n 'niels': ['elsin', 'lenis', 'niels', 'silen', 'sline'],\n 'nieve': ['nieve', 'venie'],\n 'nieveta': ['naivete', 'nieveta'],\n 'nievling': ['levining', 'nievling'],\n 'nife': ['enif', 'fine', 'neif', 'nife'],\n 'nifle': ['elfin', 'nifle'],\n 'nig': ['gin', 'ing', 'nig'],\n 'nigel': ['ingle', 'ligne', 'linge', 'nigel'],\n 'nigella': ['gallein', 'galline', 'nigella'],\n 'nigerian': ['arginine', 'nigerian'],\n 'niggard': ['grading', 'niggard'],\n 'nigger': ['ginger', 'nigger'],\n 'niggery': ['gingery', 'niggery'],\n 'nigh': ['hing', 'nigh'],\n 'night': ['night', 'thing'],\n 'nightless': ['lightness', 'nightless', 'thingless'],\n 'nightlike': ['nightlike', 'thinglike'],\n 'nightly': ['nightly', 'thingly'],\n 'nightman': ['nightman', 'thingman'],\n 'nignye': ['ginney', 'nignye'],\n 'nigori': ['nigori', 'origin'],\n 'nigre': ['grein', 'inger', 'nigre', 'regin', 'reign', 'ringe'],\n 'nigrous': ['nigrous', 'rousing', 'souring'],\n 'nihal': ['linha', 'nihal'],\n 'nikau': ['kunai', 'nikau'],\n 'nil': ['lin', 'nil'],\n 'nile': ['lien', 'line', 'neil', 'nile'],\n 'nilgai': ['ailing', 'angili', 'nilgai'],\n 'nilometer': ['linometer', 'nilometer'],\n 'niloscope': ['niloscope', 'scopoline'],\n 'nilotic': ['clition', 'nilotic'],\n 'nilous': ['insoul', 'linous', 'nilous', 'unsoil'],\n 'nim': ['min', 'nim'],\n 'nimbed': ['embind', 'nimbed'],\n 'nimbose': ['nibsome', 'nimbose'],\n 'nimkish': ['minkish', 'nimkish'],\n 'nimshi': ['minish', 'nimshi'],\n 'nina': ['nain', 'nina'],\n 'ninescore': ['ninescore', 'recension'],\n 'nineted': ['dentine', 'nineted'],\n 'ninevite': ['ninevite', 'nivenite'],\n 'ningpo': ['ningpo', 'pignon'],\n 'nintu': ['nintu', 'ninut', 'untin'],\n 'ninut': ['nintu', 'ninut', 'untin'],\n 'niota': ['niota', 'taino'],\n 'nip': ['nip', 'pin'],\n 'nipa': ['nipa', 'pain', 'pani', 'pian', 'pina'],\n 'nippers': ['nippers', 'snipper'],\n 'nipple': ['lippen', 'nipple'],\n 'nipter': ['nipter', 'terpin'],\n 'nisaean': ['nisaean', 'sinaean'],\n 'nisqualli': ['nisqualli', 'squillian'],\n 'nisus': ['nisus', 'sinus'],\n 'nit': ['nit', 'tin'],\n 'nitch': ['chint', 'nitch'],\n 'nitella': ['nitella', 'tellina'],\n 'nitently': ['intently', 'nitently'],\n 'niter': ['inert', 'inter', 'niter', 'retin', 'trine'],\n 'nitered': ['nitered', 'redient', 'teinder'],\n 'nither': ['hinter', 'nither', 'theirn'],\n 'nito': ['into', 'nito', 'oint', 'tino'],\n 'niton': ['niton', 'noint'],\n 'nitrate': ['intreat', 'iterant', 'nitrate', 'tertian'],\n 'nitratine': ['itinerant', 'nitratine'],\n 'nitric': ['citrin', 'nitric'],\n 'nitride': ['inditer', 'nitride'],\n 'nitrifaction': ['antifriction', 'nitrifaction'],\n 'nitriot': ['introit', 'nitriot'],\n 'nitrobenzol': ['benzonitrol', 'nitrobenzol'],\n 'nitrogelatin': ['intolerating', 'nitrogelatin'],\n 'nitrosate': ['nitrosate', 'stationer'],\n 'nitrous': ['nitrous', 'trusion'],\n 'nitter': ['nitter', 'tinter'],\n 'nitty': ['nitty', 'tinty'],\n 'niue': ['niue', 'unie'],\n 'nival': ['alvin', 'anvil', 'nival', 'vinal'],\n 'nivenite': ['ninevite', 'nivenite'],\n 'niveous': ['envious', 'niveous', 'veinous'],\n 'nivosity': ['nivosity', 'vinosity'],\n 'nizam': ['nazim', 'nizam'],\n 'no': ['no', 'on'],\n 'noa': ['noa', 'ona'],\n 'noachite': ['inchoate', 'noachite'],\n 'noah': ['hano', 'noah'],\n 'noahic': ['chinoa', 'noahic'],\n 'noam': ['mano', 'moan', 'mona', 'noam', 'noma', 'oman'],\n 'nob': ['bon', 'nob'],\n 'nobleman': ['blennoma', 'nobleman'],\n 'noblesse': ['boneless', 'noblesse'],\n 'nobs': ['bosn', 'nobs', 'snob'],\n 'nocardia': ['nocardia', 'orcadian'],\n 'nocent': ['nocent', 'nocten'],\n 'nocerite': ['erection', 'neoteric', 'nocerite', 'renotice'],\n 'nock': ['conk', 'nock'],\n 'nocten': ['nocent', 'nocten'],\n 'noctiluca': ['ciclatoun', 'noctiluca'],\n 'noctuid': ['conduit', 'duction', 'noctuid'],\n 'noctuidae': ['coadunite', 'education', 'noctuidae'],\n 'nocturia': ['curation', 'nocturia'],\n 'nod': ['don', 'nod'],\n 'nodal': ['donal', 'nodal'],\n 'nodated': ['donated', 'nodated'],\n 'node': ['done', 'node'],\n 'nodi': ['dion', 'nodi', 'odin'],\n 'nodiak': ['daikon', 'nodiak'],\n 'nodical': ['dolcian', 'nodical'],\n 'nodicorn': ['corindon', 'nodicorn'],\n 'nodule': ['louden', 'nodule'],\n 'nodus': ['nodus', 'ounds', 'sound'],\n 'noegenesis': ['neogenesis', 'noegenesis'],\n 'noegenetic': ['neogenetic', 'noegenetic'],\n 'noel': ['elon', 'enol', 'leno', 'leon', 'lone', 'noel'],\n 'noetic': ['eciton', 'noetic', 'notice', 'octine'],\n 'noetics': ['contise', 'noetics', 'section'],\n 'nog': ['gon', 'nog'],\n 'nogai': ['gonia', 'ngaio', 'nogai'],\n 'nogal': ['along', 'gonal', 'lango', 'longa', 'nogal'],\n 'noil': ['lino', 'lion', 'loin', 'noil'],\n 'noilage': ['goniale', 'noilage'],\n 'noiler': ['elinor', 'lienor', 'lorien', 'noiler'],\n 'noint': ['niton', 'noint'],\n 'noir': ['inro', 'iron', 'noir', 'nori'],\n 'noise': ['eosin', 'noise'],\n 'noiseless': ['noiseless', 'selenosis'],\n 'noisette': ['noisette', 'teosinte'],\n 'nolo': ['loon', 'nolo'],\n 'noma': ['mano', 'moan', 'mona', 'noam', 'noma', 'oman'],\n 'nomad': ['damon', 'monad', 'nomad'],\n 'nomadian': ['monadina', 'nomadian'],\n 'nomadic': ['monadic', 'nomadic'],\n 'nomadical': ['monadical', 'nomadical'],\n 'nomadically': ['monadically', 'nomadically'],\n 'nomadism': ['monadism', 'nomadism'],\n 'nomarch': ['monarch', 'nomarch', 'onmarch'],\n 'nomarchy': ['monarchy', 'nomarchy'],\n 'nome': ['mone', 'nome', 'omen'],\n 'nomeus': ['nomeus', 'unsome'],\n 'nomial': ['monial', 'nomial', 'oilman'],\n 'nomina': ['amnion', 'minoan', 'nomina'],\n 'nominate': ['antinome', 'nominate'],\n 'nominated': ['dentinoma', 'nominated'],\n 'nominature': ['nominature', 'numeration'],\n 'nomism': ['monism', 'nomism', 'simmon'],\n 'nomismata': ['anatomism', 'nomismata'],\n 'nomistic': ['monistic', 'nicotism', 'nomistic'],\n 'nomocracy': ['monocracy', 'nomocracy'],\n 'nomogenist': ['monogenist', 'nomogenist'],\n 'nomogenous': ['monogenous', 'nomogenous'],\n 'nomogeny': ['monogeny', 'nomogeny'],\n 'nomogram': ['monogram', 'nomogram'],\n 'nomograph': ['monograph', 'nomograph', 'phonogram'],\n 'nomographer': ['geranomorph', 'monographer', 'nomographer'],\n 'nomographic': ['gramophonic', 'monographic', 'nomographic', 'phonogramic'],\n 'nomographical': ['gramophonical', 'monographical', 'nomographical'],\n 'nomographically': ['gramophonically',\n                     'monographically',\n                     'nomographically',\n                     'phonogramically'],\n 'nomography': ['monography', 'nomography'],\n 'nomological': ['monological', 'nomological'],\n 'nomologist': ['monologist', 'nomologist', 'ontologism'],\n 'nomology': ['monology', 'nomology'],\n 'nomophyllous': ['monophyllous', 'nomophyllous'],\n 'nomotheism': ['monotheism', 'nomotheism'],\n 'nomothetic': ['monothetic', 'nomothetic'],\n 'nona': ['anon', 'nona', 'onan'],\n 'nonaccession': ['connoissance', 'nonaccession'],\n 'nonact': ['cannot', 'canton', 'conant', 'nonact'],\n 'nonaction': ['connation', 'nonaction'],\n 'nonagent': ['nonagent', 'tannogen'],\n 'nonaid': ['adonin', 'nanoid', 'nonaid'],\n 'nonaltruistic': ['instructional', 'nonaltruistic'],\n 'nonanimal': ['nonanimal', 'nonmanila'],\n 'nonbilabiate': ['inobtainable', 'nonbilabiate'],\n 'noncaste': ['noncaste', 'tsonecan'],\n 'noncereal': ['aleconner', 'noncereal'],\n 'noncertified': ['noncertified', 'nonrectified'],\n 'nonclaim': ['cinnamol', 'nonclaim'],\n 'noncreation': ['noncreation', 'nonreaction'],\n 'noncreative': ['noncreative', 'nonreactive'],\n 'noncurantist': ['noncurantist', 'unconstraint'],\n 'nonda': ['donna', 'nonda'],\n 'nondesecration': ['nondesecration', 'recondensation'],\n 'none': ['neon', 'none'],\n 'nonempirical': ['nonempirical', 'prenominical'],\n 'nonerudite': ['nonerudite', 'unoriented'],\n 'nonesuch': ['nonesuch', 'unchosen'],\n 'nonet': ['nonet', 'tenon'],\n 'nonfertile': ['florentine', 'nonfertile'],\n 'nongeometrical': ['inconglomerate', 'nongeometrical'],\n 'nonglare': ['algernon', 'nonglare'],\n 'nongod': ['dongon', 'nongod'],\n 'nonhepatic': ['nonhepatic', 'pantheonic'],\n 'nonic': ['conin', 'nonic', 'oncin'],\n 'nonideal': ['anneloid', 'nonideal'],\n 'nonidealist': ['alstonidine', 'nonidealist'],\n 'nonirate': ['anointer', 'inornate', 'nonirate', 'reanoint'],\n 'nonius': ['nonius', 'unison'],\n 'nonlegato': ['nonlegato', 'ontogenal'],\n 'nonlegume': ['melungeon', 'nonlegume'],\n 'nonliable': ['bellonian', 'nonliable'],\n 'nonlicet': ['contline', 'nonlicet'],\n 'nonly': ['nonly', 'nonyl', 'nylon'],\n 'nonmanila': ['nonanimal', 'nonmanila'],\n 'nonmarital': ['antinormal', 'nonmarital', 'nonmartial'],\n 'nonmartial': ['antinormal', 'nonmarital', 'nonmartial'],\n 'nonmatter': ['nonmatter', 'remontant'],\n 'nonmetric': ['comintern', 'nonmetric'],\n 'nonmetrical': ['centinormal', 'conterminal', 'nonmetrical'],\n 'nonmolar': ['nonmolar', 'nonmoral'],\n 'nonmoral': ['nonmolar', 'nonmoral'],\n 'nonnat': ['nonnat', 'nontan'],\n 'nonoriental': ['nonoriental', 'nonrelation'],\n 'nonpaid': ['dipnoan', 'nonpaid', 'pandion'],\n 'nonpar': ['napron', 'nonpar'],\n 'nonparental': ['nonparental', 'nonpaternal'],\n 'nonpaternal': ['nonparental', 'nonpaternal'],\n 'nonpearlitic': ['nonpearlitic', 'pratincoline'],\n 'nonpenal': ['nonpenal', 'nonplane'],\n 'nonplane': ['nonpenal', 'nonplane'],\n 'nonracial': ['carniolan', 'nonracial'],\n 'nonrated': ['nonrated', 'nontrade'],\n 'nonreaction': ['noncreation', 'nonreaction'],\n 'nonreactive': ['noncreative', 'nonreactive'],\n 'nonrebel': ['ennobler', 'nonrebel'],\n 'nonrecital': ['interconal', 'nonrecital'],\n 'nonrectified': ['noncertified', 'nonrectified'],\n 'nonrelation': ['nonoriental', 'nonrelation'],\n 'nonreserve': ['nonreserve', 'nonreverse'],\n 'nonreverse': ['nonreserve', 'nonreverse'],\n 'nonrigid': ['girondin', 'nonrigid'],\n 'nonsanction': ['inconsonant', 'nonsanction'],\n 'nonscientist': ['inconsistent', 'nonscientist'],\n 'nonsecret': ['consenter', 'nonsecret', 'reconsent'],\n 'nontan': ['nonnat', 'nontan'],\n 'nontrade': ['nonrated', 'nontrade'],\n 'nonunited': ['nonunited', 'unintoned'],\n 'nonuse': ['nonuse', 'unnose'],\n 'nonvaginal': ['nonvaginal', 'novanglian'],\n 'nonvisitation': ['innovationist', 'nonvisitation'],\n 'nonya': ['annoy', 'nonya'],\n 'nonyl': ['nonly', 'nonyl', 'nylon'],\n 'nooking': ['kongoni', 'nooking'],\n 'noontide': ['noontide', 'notioned'],\n 'noontime': ['entomion', 'noontime'],\n 'noop': ['noop', 'poon'],\n 'noose': ['noose', 'osone'],\n 'nooser': ['nooser', 'seroon', 'sooner'],\n 'nopal': ['lapon', 'nopal'],\n 'nope': ['nope', 'open', 'peon', 'pone'],\n 'nor': ['nor', 'ron'],\n 'nora': ['nora', 'orna', 'roan'],\n 'norah': ['nahor', 'norah', 'rohan'],\n 'norate': ['atoner', 'norate', 'ornate'],\n 'noration': ['noration', 'ornation', 'orotinan'],\n 'nordic': ['dornic', 'nordic'],\n 'nordicity': ['nordicity', 'tyrocidin'],\n 'noreast': ['noreast', 'rosetan', 'seatron', 'senator', 'treason'],\n 'nori': ['inro', 'iron', 'noir', 'nori'],\n 'noria': ['arion', 'noria'],\n 'noric': ['corin', 'noric', 'orcin'],\n 'norie': ['irone', 'norie'],\n 'norite': ['norite', 'orient'],\n 'norm': ['morn', 'norm'],\n 'norma': ['manor', 'moran', 'norma', 'ramon', 'roman'],\n 'normality': ['normality', 'trionymal'],\n 'normated': ['moderant', 'normated'],\n 'normless': ['mornless', 'normless'],\n 'normocyte': ['necrotomy', 'normocyte', 'oncometry'],\n 'norse': ['norse', 'noser', 'seron', 'snore'],\n 'norsk': ['norsk', 'snork'],\n 'north': ['north', 'thorn'],\n 'norther': ['horrent', 'norther'],\n 'northing': ['inthrong', 'northing'],\n 'nosairi': ['nosairi', 'osirian'],\n 'nose': ['enos', 'nose'],\n 'nosean': ['nosean', 'oannes'],\n 'noseless': ['noseless', 'soleness'],\n 'noselite': ['noselite', 'solenite'],\n 'nosema': ['monase', 'nosema'],\n 'noser': ['norse', 'noser', 'seron', 'snore'],\n 'nosesmart': ['nosesmart', 'storesman'],\n 'nosism': ['nosism', 'simson'],\n 'nosomania': ['nanosomia', 'nosomania'],\n 'nostalgia': ['analogist', 'nostalgia'],\n 'nostalgic': ['gnostical', 'nostalgic'],\n 'nostic': ['nostic', 'sintoc', 'tocsin'],\n 'nostoc': ['nostoc', 'oncost'],\n 'nosu': ['nosu', 'nous', 'onus'],\n 'not': ['not', 'ton'],\n 'notability': ['bitonality', 'notability'],\n 'notaeal': ['anatole', 'notaeal'],\n 'notaeum': ['notaeum', 'outname'],\n 'notal': ['notal', 'ontal', 'talon', 'tolan', 'tonal'],\n 'notalgia': ['galtonia', 'notalgia'],\n 'notalia': ['ailanto', 'alation', 'laotian', 'notalia'],\n 'notan': ['anton', 'notan', 'tonna'],\n 'notarial': ['notarial', 'rational', 'rotalian'],\n 'notarially': ['notarially', 'rationally'],\n 'notariate': ['notariate', 'rationate'],\n 'notation': ['notation', 'tonation'],\n 'notator': ['arnotto', 'notator'],\n 'notcher': ['chorten', 'notcher'],\n 'note': ['note', 'tone'],\n 'noted': ['donet', 'noted', 'toned'],\n 'notehead': ['headnote', 'notehead'],\n 'noteless': ['noteless', 'toneless'],\n 'notelessly': ['notelessly', 'tonelessly'],\n 'notelessness': ['notelessness', 'tonelessness'],\n 'noter': ['noter', 'tenor', 'toner', 'trone'],\n 'nother': ['hornet', 'nother', 'theron', 'throne'],\n 'nothous': ['hontous', 'nothous'],\n 'notice': ['eciton', 'noetic', 'notice', 'octine'],\n 'noticer': ['cerotin', 'cointer', 'cotrine', 'cretion', 'noticer', 'rection'],\n 'notidani': ['nidation', 'notidani'],\n 'notify': ['notify', 'tonify'],\n 'notioned': ['noontide', 'notioned'],\n 'notochordal': ['chordotonal', 'notochordal'],\n 'notopterus': ['notopterus', 'portentous'],\n 'notorhizal': ['horizontal', 'notorhizal'],\n 'nototrema': ['antrotome', 'nototrema'],\n 'notour': ['notour', 'unroot'],\n 'notropis': ['notropis', 'positron', 'sorption'],\n 'notum': ['montu', 'mount', 'notum'],\n 'notus': ['notus', 'snout', 'stoun', 'tonus'],\n 'nought': ['hognut', 'nought'],\n 'noup': ['noup', 'puno', 'upon'],\n 'nourisher': ['nourisher', 'renourish'],\n 'nous': ['nosu', 'nous', 'onus'],\n 'novalia': ['novalia', 'valonia'],\n 'novanglian': ['nonvaginal', 'novanglian'],\n 'novem': ['novem', 'venom'],\n 'novitiate': ['evitation', 'novitiate'],\n 'now': ['now', 'own', 'won'],\n 'nowanights': ['nowanights', 'washington'],\n 'nowed': ['endow', 'nowed'],\n 'nowhere': ['nowhere', 'whereon'],\n 'nowise': ['nowise', 'snowie'],\n 'nowness': ['nowness', 'ownness'],\n 'nowt': ['nowt', 'town', 'wont'],\n 'noxa': ['axon', 'noxa', 'oxan'],\n 'noy': ['noy', 'yon'],\n 'nozi': ['nozi', 'zion'],\n 'nu': ['nu', 'un'],\n 'nub': ['bun', 'nub'],\n 'nuba': ['baun', 'buna', 'nabu', 'nuba'],\n 'nubian': ['nubian', 'unbain'],\n 'nubilate': ['antiblue', 'nubilate'],\n 'nubile': ['nubile', 'unible'],\n 'nucal': ['lucan', 'nucal'],\n 'nucellar': ['lucernal', 'nucellar', 'uncellar'],\n 'nuchal': ['chulan', 'launch', 'nuchal'],\n 'nuciferous': ['nuciferous', 'unciferous'],\n 'nuciform': ['nuciform', 'unciform'],\n 'nuclear': ['crenula', 'lucarne', 'nuclear', 'unclear'],\n 'nucleator': ['nucleator', 'recountal'],\n 'nucleoid': ['nucleoid', 'uncoiled'],\n 'nuclide': ['include', 'nuclide'],\n 'nuculid': ['nuculid', 'unlucid'],\n 'nuculidae': ['duculinae', 'nuculidae'],\n 'nudate': ['nudate', 'undate'],\n 'nuddle': ['ludden', 'nuddle'],\n 'nude': ['dune', 'nude', 'unde'],\n 'nudeness': ['nudeness', 'unsensed'],\n 'nudger': ['dunger', 'gerund', 'greund', 'nudger'],\n 'nudist': ['dustin', 'nudist'],\n 'nudity': ['nudity', 'untidy'],\n 'nuisancer': ['insurance', 'nuisancer'],\n 'numa': ['maun', 'numa'],\n 'numberer': ['numberer', 'renumber'],\n 'numda': ['maund', 'munda', 'numda', 'undam', 'unmad'],\n 'numeration': ['nominature', 'numeration'],\n 'numerical': ['ceruminal', 'melanuric', 'numerical'],\n 'numerist': ['numerist', 'terminus'],\n 'numida': ['numida', 'unmaid'],\n 'numidae': ['numidae', 'unaimed'],\n 'nummi': ['mnium', 'nummi'],\n 'nunciate': ['nunciate', 'uncinate'],\n 'nuncio': ['nuncio', 'uncoin'],\n 'nuncioship': ['nuncioship', 'pincushion'],\n 'nunki': ['nunki', 'unkin'],\n 'nunlet': ['nunlet', 'tunnel', 'unlent'],\n 'nunlike': ['nunlike', 'unliken'],\n 'nunnated': ['nunnated', 'untanned'],\n 'nunni': ['nunni', 'uninn'],\n 'nuptial': ['nuptial', 'unplait'],\n 'nurse': ['nurse', 'resun'],\n 'nusfiah': ['faunish', 'nusfiah'],\n 'nut': ['nut', 'tun'],\n 'nutarian': ['nutarian', 'turanian'],\n 'nutate': ['attune', 'nutate', 'tauten'],\n 'nutgall': ['gallnut', 'nutgall'],\n 'nuthatch': ['nuthatch', 'unthatch'],\n 'nutlike': ['nutlike', 'tunlike'],\n 'nutmeg': ['gnetum', 'nutmeg'],\n 'nutramin': ['nutramin', 'ruminant'],\n 'nutrice': ['nutrice', 'teucrin'],\n 'nycteridae': ['encyrtidae', 'nycteridae'],\n 'nycterine': ['nycterine', 'renitency'],\n 'nycteris': ['nycteris', 'stycerin'],\n 'nycturia': ['nycturia', 'tunicary'],\n 'nye': ['eyn', 'nye', 'yen'],\n 'nylast': ['nylast', 'stanly'],\n 'nylon': ['nonly', 'nonyl', 'nylon'],\n 'nymphalidae': ['lymphadenia', 'nymphalidae'],\n 'nyroca': ['canroy', 'crayon', 'cyrano', 'nyroca'],\n 'nystagmic': ['gymnastic', 'nystagmic'],\n 'oak': ['ako', 'koa', 'oak', 'oka'],\n 'oaky': ['kayo', 'oaky'],\n 'oam': ['mao', 'oam'],\n 'oannes': ['nosean', 'oannes'],\n 'oar': ['aro', 'oar', 'ora'],\n 'oared': ['adore', 'oared', 'oread'],\n 'oaric': ['cairo', 'oaric'],\n 'oaritis': ['isotria', 'oaritis'],\n 'oarium': ['mariou', 'oarium'],\n 'oarless': ['lassoer', 'oarless', 'rosales'],\n 'oarman': ['oarman', 'ramona'],\n 'oasal': ['alosa', 'loasa', 'oasal'],\n 'oasis': ['oasis', 'sosia'],\n 'oast': ['oast', 'stoa', 'taos'],\n 'oat': ['oat', 'tao', 'toa'],\n 'oatbin': ['batino', 'oatbin', 'obtain'],\n 'oaten': ['atone', 'oaten'],\n 'oatlike': ['keitloa', 'oatlike'],\n 'obclude': ['becloud', 'obclude'],\n 'obeah': ['bahoe', 'bohea', 'obeah'],\n 'obeisant': ['obeisant', 'sabotine'],\n 'obelial': ['bolelia', 'lobelia', 'obelial'],\n 'obeliscal': ['escobilla', 'obeliscal'],\n 'obelus': ['besoul', 'blouse', 'obelus'],\n 'oberon': ['borneo', 'oberon'],\n 'obi': ['ibo', 'obi'],\n 'obispo': ['boopis', 'obispo'],\n 'obit': ['bito', 'obit'],\n 'objectative': ['objectative', 'objectivate'],\n 'objectivate': ['objectative', 'objectivate'],\n 'oblate': ['lobate', 'oblate'],\n 'oblately': ['lobately', 'oblately'],\n 'oblation': ['boltonia', 'lobation', 'oblation'],\n 'obligant': ['bloating', 'obligant'],\n 'obliviality': ['obliviality', 'violability'],\n 'obol': ['bolo', 'bool', 'lobo', 'obol'],\n 'obscurant': ['obscurant', 'subcantor'],\n 'obscurantic': ['obscurantic', 'subnarcotic'],\n 'obscurantist': ['obscurantist', 'substraction'],\n 'obscure': ['bescour', 'buceros', 'obscure'],\n 'obscurer': ['crebrous', 'obscurer'],\n 'obsecrate': ['bracteose', 'obsecrate'],\n 'observe': ['observe', 'obverse', 'verbose'],\n 'obsessor': ['berossos', 'obsessor'],\n 'obstinate': ['bastionet', 'obstinate'],\n 'obtain': ['batino', 'oatbin', 'obtain'],\n 'obtainal': ['ablation', 'obtainal'],\n 'obtainer': ['abrotine', 'baritone', 'obtainer', 'reobtain'],\n 'obtrude': ['doubter', 'obtrude', 'outbred', 'redoubt'],\n 'obtruncation': ['conturbation', 'obtruncation'],\n 'obturate': ['obturate', 'tabouret'],\n 'obverse': ['observe', 'obverse', 'verbose'],\n 'obversely': ['obversely', 'verbosely'],\n 'ocarina': ['aaronic', 'nicarao', 'ocarina'],\n 'occasioner': ['occasioner', 'reoccasion'],\n 'occipitofrontal': ['frontooccipital', 'occipitofrontal'],\n 'occipitotemporal': ['occipitotemporal', 'temporooccipital'],\n 'occlusion': ['niccolous', 'occlusion'],\n 'occurrent': ['cocurrent', 'occurrent', 'uncorrect'],\n 'ocean': ['acone', 'canoe', 'ocean'],\n 'oceanet': ['acetone', 'oceanet'],\n 'oceanic': ['cocaine', 'oceanic'],\n 'ocellar': ['collare', 'corella', 'ocellar'],\n 'ocellate': ['collatee', 'ocellate'],\n 'ocellated': ['decollate', 'ocellated'],\n 'ocelli': ['collie', 'ocelli'],\n 'och': ['cho', 'och'],\n 'ocher': ['chore', 'ocher'],\n 'ocherous': ['ocherous', 'ochreous'],\n 'ochidore': ['choreoid', 'ochidore'],\n 'ochlesis': ['helcosis', 'ochlesis'],\n 'ochlesitic': ['cochleitis', 'ochlesitic'],\n 'ochletic': ['helcotic', 'lochetic', 'ochletic'],\n 'ochlocrat': ['colcothar', 'ochlocrat'],\n 'ochrea': ['chorea', 'ochrea', 'rochea'],\n 'ochreous': ['ocherous', 'ochreous'],\n 'ochroid': ['choroid', 'ochroid'],\n 'ochroma': ['amchoor', 'ochroma'],\n 'ocht': ['coth', 'ocht'],\n 'ocque': ['coque', 'ocque'],\n 'ocreated': ['decorate', 'ocreated'],\n 'octadic': ['cactoid', 'octadic'],\n 'octaeteric': ['ecorticate', 'octaeteric'],\n 'octakishexahedron': ['hexakisoctahedron', 'octakishexahedron'],\n 'octan': ['acton', 'canto', 'octan'],\n 'octandrian': ['dracontian', 'octandrian'],\n 'octarius': ['cotarius', 'octarius', 'suctoria'],\n 'octastrophic': ['octastrophic', 'postthoracic'],\n 'octave': ['avocet', 'octave', 'vocate'],\n 'octavian': ['octavian', 'octavina', 'vacation'],\n 'octavina': ['octavian', 'octavina', 'vacation'],\n 'octenary': ['enactory', 'octenary'],\n 'octet': ['cotte', 'octet'],\n 'octillion': ['cotillion', 'octillion'],\n 'octine': ['eciton', 'noetic', 'notice', 'octine'],\n 'octometer': ['octometer', 'rectotome', 'tocometer'],\n 'octonal': ['coolant', 'octonal'],\n 'octonare': ['coronate', 'octonare', 'otocrane'],\n 'octonarius': ['acutorsion', 'octonarius'],\n 'octoroon': ['coonroot', 'octoroon'],\n 'octuple': ['couplet', 'octuple'],\n 'ocularist': ['ocularist', 'suctorial'],\n 'oculate': ['caulote', 'colutea', 'oculate'],\n 'oculinid': ['lucinoid', 'oculinid'],\n 'ocypete': ['ecotype', 'ocypete'],\n 'od': ['do', 'od'],\n 'oda': ['ado', 'dao', 'oda'],\n 'odal': ['alod', 'dola', 'load', 'odal'],\n 'odalman': ['mandola', 'odalman'],\n 'odax': ['doxa', 'odax'],\n 'odd': ['dod', 'odd'],\n 'oddman': ['dodman', 'oddman'],\n 'ode': ['doe', 'edo', 'ode'],\n 'odel': ['dole', 'elod', 'lode', 'odel'],\n 'odin': ['dion', 'nodi', 'odin'],\n 'odinism': ['diosmin', 'odinism'],\n 'odinite': ['edition', 'odinite', 'otidine', 'tineoid'],\n 'odiometer': ['meteoroid', 'odiometer'],\n 'odious': ['iodous', 'odious'],\n 'odor': ['door', 'odor', 'oord', 'rood'],\n 'odorant': ['donator', 'odorant', 'tornado'],\n 'odored': ['doored', 'odored'],\n 'odorless': ['doorless', 'odorless'],\n 'ods': ['dos', 'ods', 'sod'],\n 'odum': ['doum', 'moud', 'odum'],\n 'odyl': ['loyd', 'odyl'],\n 'odylist': ['odylist', 'styloid'],\n 'oecanthus': ['ceanothus', 'oecanthus'],\n 'oecist': ['cotise', 'oecist'],\n 'oedipal': ['elapoid', 'oedipal'],\n 'oenin': ['inone', 'oenin'],\n 'oenocarpus': ['oenocarpus', 'uranoscope'],\n 'oer': ['oer', 'ore', 'roe'],\n 'oes': ['oes', 'ose', 'soe'],\n 'oestrian': ['arsonite', 'asterion', 'oestrian', 'rosinate', 'serotina'],\n 'oestrid': ['oestrid', 'steroid', 'storied'],\n 'oestridae': ['oestridae', 'ostreidae', 'sorediate'],\n 'oestrin': ['oestrin', 'tersion'],\n 'oestriol': ['oestriol', 'rosolite'],\n 'oestroid': ['oestroid', 'ordosite', 'ostreoid'],\n 'oestrual': ['oestrual', 'rosulate'],\n 'oestrum': ['oestrum', 'rosetum'],\n 'oestrus': ['estrous', 'oestrus', 'sestuor', 'tussore'],\n 'of': ['fo', 'of'],\n 'ofer': ['fore', 'froe', 'ofer'],\n 'offcast': ['castoff', 'offcast'],\n 'offcut': ['cutoff', 'offcut'],\n 'offender': ['offender', 'reoffend'],\n 'offerer': ['offerer', 'reoffer'],\n 'offlet': ['letoff', 'offlet'],\n 'offset': ['offset', 'setoff'],\n 'offuscate': ['offuscate', 'suffocate'],\n 'offuscation': ['offuscation', 'suffocation'],\n 'offward': ['drawoff', 'offward'],\n 'ofo': ['foo', 'ofo'],\n 'oft': ['fot', 'oft'],\n 'oftens': ['oftens', 'soften'],\n 'ofter': ['fetor', 'forte', 'ofter'],\n 'oftly': ['lofty', 'oftly'],\n 'og': ['go', 'og'],\n 'ogam': ['goma', 'ogam'],\n 'ogeed': ['geode', 'ogeed'],\n 'ogle': ['egol', 'goel', 'loge', 'ogle', 'oleg'],\n 'ogler': ['glore', 'ogler'],\n 'ogpu': ['goup', 'ogpu', 'upgo'],\n 'ogre': ['goer', 'gore', 'ogre'],\n 'ogreism': ['ergoism', 'ogreism'],\n 'ogtiern': ['ergotin', 'genitor', 'negrito', 'ogtiern', 'trigone'],\n 'oh': ['ho', 'oh'],\n 'ohm': ['mho', 'ohm'],\n 'ohmage': ['homage', 'ohmage'],\n 'ohmmeter': ['mhometer', 'ohmmeter'],\n 'oilcan': ['alnico', 'cliona', 'oilcan'],\n 'oilcup': ['oilcup', 'upcoil'],\n 'oildom': ['moloid', 'oildom'],\n 'oiler': ['oiler', 'oriel', 'reoil'],\n 'oillet': ['elliot', 'oillet'],\n 'oilman': ['monial', 'nomial', 'oilman'],\n 'oilstone': ['leonotis', 'oilstone'],\n 'oime': ['meio', 'oime'],\n 'oinomania': ['oinomania', 'oniomania'],\n 'oint': ['into', 'nito', 'oint', 'tino'],\n 'oireachtas': ['oireachtas', 'theocrasia'],\n 'ok': ['ko', 'ok'],\n 'oka': ['ako', 'koa', 'oak', 'oka'],\n 'oket': ['keto', 'oket', 'toke'],\n 'oki': ['koi', 'oki'],\n 'okie': ['ekoi', 'okie'],\n 'okra': ['karo', 'kora', 'okra', 'roka'],\n 'olaf': ['foal', 'loaf', 'olaf'],\n 'olam': ['loam', 'loma', 'malo', 'mola', 'olam'],\n 'olamic': ['colima', 'olamic'],\n 'olcha': ['chola', 'loach', 'olcha'],\n 'olchi': ['choil', 'choli', 'olchi'],\n 'old': ['dol', 'lod', 'old'],\n 'older': ['lored', 'older'],\n 'oldhamite': ['ethmoidal', 'oldhamite'],\n 'ole': ['leo', 'ole'],\n 'olea': ['aloe', 'olea'],\n 'olecranal': ['lanceolar', 'olecranal'],\n 'olecranoid': ['lecanoroid', 'olecranoid'],\n 'olecranon': ['encoronal', 'olecranon'],\n 'olefin': ['enfoil', 'olefin'],\n 'oleg': ['egol', 'goel', 'loge', 'ogle', 'oleg'],\n 'olein': ['enoil', 'ileon', 'olein'],\n 'olena': ['alone', 'anole', 'olena'],\n 'olenid': ['doline', 'indole', 'leonid', 'loined', 'olenid'],\n 'olent': ['lento', 'olent'],\n 'olenus': ['ensoul', 'olenus', 'unsole'],\n 'oleosity': ['oleosity', 'otiosely'],\n 'olga': ['gaol', 'goal', 'gola', 'olga'],\n 'oliban': ['albino', 'albion', 'alboin', 'oliban'],\n 'olibanum': ['olibanum', 'umbonial'],\n 'olid': ['dilo', 'diol', 'doli', 'idol', 'olid'],\n 'oligoclase': ['oligoclase', 'sociolegal'],\n 'oligomyoid': ['idiomology', 'oligomyoid'],\n 'oligonephria': ['oligonephria', 'oligophrenia'],\n 'oligonephric': ['oligonephric', 'oligophrenic'],\n 'oligophrenia': ['oligonephria', 'oligophrenia'],\n 'oligophrenic': ['oligonephric', 'oligophrenic'],\n 'oliprance': ['oliprance', 'porcelain'],\n 'oliva': ['oliva', 'viola'],\n 'olivaceous': ['olivaceous', 'violaceous'],\n 'olive': ['olive', 'ovile', 'voile'],\n 'olived': ['livedo', 'olived'],\n 'oliver': ['oliver', 'violer', 'virole'],\n 'olivescent': ['olivescent', 'violescent'],\n 'olivet': ['olivet', 'violet'],\n 'olivetan': ['olivetan', 'velation'],\n 'olivette': ['olivette', 'violette'],\n 'olivine': ['olivine', 'violine'],\n 'olla': ['lalo', 'lola', 'olla'],\n 'olof': ['fool', 'loof', 'olof'],\n 'olonets': ['enstool', 'olonets'],\n 'olor': ['loro', 'olor', 'orlo', 'rool'],\n 'olpe': ['lope', 'olpe', 'pole'],\n 'olson': ['olson', 'solon'],\n 'olympian': ['olympian', 'polymnia'],\n 'om': ['mo', 'om'],\n 'omaha': ['haoma', 'omaha'],\n 'oman': ['mano', 'moan', 'mona', 'noam', 'noma', 'oman'],\n 'omani': ['amino', 'inoma', 'naomi', 'omani', 'omina'],\n 'omar': ['amor', 'maro', 'mora', 'omar', 'roam'],\n 'omasitis': ['amitosis', 'omasitis'],\n 'omber': ['brome', 'omber'],\n 'omelet': ['omelet', 'telome'],\n 'omen': ['mone', 'nome', 'omen'],\n 'omened': ['endome', 'omened'],\n 'omental': ['omental', 'telamon'],\n 'omentotomy': ['entomotomy', 'omentotomy'],\n 'omer': ['mero', 'more', 'omer', 'rome'],\n 'omicron': ['moronic', 'omicron'],\n 'omina': ['amino', 'inoma', 'naomi', 'omani', 'omina'],\n 'ominous': ['mousoni', 'ominous'],\n 'omit': ['itmo', 'moit', 'omit', 'timo'],\n 'omitis': ['itoism', 'omitis'],\n 'omniana': ['nanaimo', 'omniana'],\n 'omniarch': ['choirman', 'harmonic', 'omniarch'],\n 'omnigerent': ['ignorement', 'omnigerent'],\n 'omnilegent': ['eloignment', 'omnilegent'],\n 'omnimeter': ['minometer', 'omnimeter'],\n 'omnimodous': ['monosodium', 'omnimodous', 'onosmodium'],\n 'omnist': ['inmost', 'monist', 'omnist'],\n 'omnitenent': ['intonement', 'omnitenent'],\n 'omphalogenous': ['megalophonous', 'omphalogenous'],\n 'on': ['no', 'on'],\n 'ona': ['noa', 'ona'],\n 'onager': ['onager', 'orange'],\n 'onagra': ['agroan', 'angora', 'anogra', 'arango', 'argoan', 'onagra'],\n 'onan': ['anon', 'nona', 'onan'],\n 'onanism': ['mansion', 'onanism'],\n 'onanistic': ['anconitis', 'antiscion', 'onanistic'],\n 'onca': ['coan', 'onca'],\n 'once': ['cone', 'once'],\n 'oncetta': ['oncetta', 'tectona'],\n 'onchidiidae': ['chionididae', 'onchidiidae'],\n 'oncia': ['acoin', 'oncia'],\n 'oncidium': ['conidium', 'mucinoid', 'oncidium'],\n 'oncin': ['conin', 'nonic', 'oncin'],\n 'oncometric': ['necrotomic', 'oncometric'],\n 'oncometry': ['necrotomy', 'normocyte', 'oncometry'],\n 'oncoming': ['gnomonic', 'oncoming'],\n 'oncosimeter': ['oncosimeter', 'semicoronet'],\n 'oncost': ['nostoc', 'oncost'],\n 'ondagram': ['dragoman', 'garamond', 'ondagram'],\n 'ondameter': ['emendator', 'ondameter'],\n 'ondatra': ['adorant', 'ondatra'],\n 'ondine': ['donnie', 'indone', 'ondine'],\n 'ondy': ['ondy', 'yond'],\n 'one': ['eon', 'neo', 'one'],\n 'oneida': ['daoine', 'oneida'],\n 'oneiric': ['ironice', 'oneiric'],\n 'oneism': ['eonism', 'mesion', 'oneism', 'simeon'],\n 'oneness': ['oneness', 'senones'],\n 'oner': ['oner', 'rone'],\n 'onery': ['eryon', 'onery'],\n 'oniomania': ['oinomania', 'oniomania'],\n 'oniomaniac': ['iconomania', 'oniomaniac'],\n 'oniscidae': ['oniscidae', 'oscinidae', 'sciaenoid'],\n 'onisciform': ['onisciform', 'somnorific'],\n 'oniscoidea': ['iodocasein', 'oniscoidea'],\n 'onkos': ['onkos', 'snook'],\n 'onlepy': ['onlepy', 'openly'],\n 'onliest': ['leonist', 'onliest'],\n 'only': ['lyon', 'only'],\n 'onmarch': ['monarch', 'nomarch', 'onmarch'],\n 'onosmodium': ['monosodium', 'omnimodous', 'onosmodium'],\n 'ons': ['ons', 'son'],\n 'onset': ['onset', 'seton', 'steno', 'stone'],\n 'onshore': ['onshore', 'sorehon'],\n 'onside': ['deinos', 'donsie', 'inodes', 'onside'],\n 'onsight': ['hosting', 'onsight'],\n 'ontal': ['notal', 'ontal', 'talon', 'tolan', 'tonal'],\n 'ontaric': ['anticor', 'carotin', 'cortina', 'ontaric'],\n 'onto': ['onto', 'oont', 'toon'],\n 'ontogenal': ['nonlegato', 'ontogenal'],\n 'ontological': ['ontological', 'tonological'],\n 'ontologism': ['monologist', 'nomologist', 'ontologism'],\n 'ontology': ['ontology', 'tonology'],\n 'onus': ['nosu', 'nous', 'onus'],\n 'onymal': ['amylon', 'onymal'],\n 'onymatic': ['cymation', 'myatonic', 'onymatic'],\n 'onza': ['azon', 'onza', 'ozan'],\n 'oocyte': ['coyote', 'oocyte'],\n 'oodles': ['dolose', 'oodles', 'soodle'],\n 'ooid': ['iodo', 'ooid'],\n 'oolak': ['lokao', 'oolak'],\n 'oolite': ['lootie', 'oolite'],\n 'oometer': ['moreote', 'oometer'],\n 'oons': ['oons', 'soon'],\n 'oont': ['onto', 'oont', 'toon'],\n 'oopak': ['oopak', 'pooka'],\n 'oord': ['door', 'odor', 'oord', 'rood'],\n 'opacate': ['opacate', 'peacoat'],\n 'opacite': ['ectopia', 'opacite'],\n 'opah': ['opah', 'paho', 'poha'],\n 'opal': ['alop', 'opal'],\n 'opalina': ['opalina', 'pianola'],\n 'opalinine': ['opalinine', 'pleionian'],\n 'opalize': ['epizoal', 'lopezia', 'opalize'],\n 'opata': ['opata', 'patao', 'tapoa'],\n 'opdalite': ['opdalite', 'petaloid'],\n 'ope': ['ope', 'poe'],\n 'opelet': ['eelpot', 'opelet'],\n 'open': ['nope', 'open', 'peon', 'pone'],\n 'opencast': ['capstone', 'opencast'],\n 'opener': ['opener', 'reopen', 'repone'],\n 'openly': ['onlepy', 'openly'],\n 'openside': ['disponee', 'openside'],\n 'operable': ['operable', 'ropeable'],\n 'operae': ['aerope', 'operae'],\n 'operant': ['operant', 'pronate', 'protean'],\n 'operatic': ['aporetic', 'capriote', 'operatic'],\n 'operatical': ['aporetical', 'operatical'],\n 'operating': ['operating', 'pignorate'],\n 'operatrix': ['expirator', 'operatrix'],\n 'opercular': ['opercular', 'preocular'],\n 'ophidion': ['ophidion', 'ophionid'],\n 'ophionid': ['ophidion', 'ophionid'],\n 'ophism': ['mopish', 'ophism'],\n 'ophite': ['ethiop', 'ophite', 'peitho'],\n 'opinant': ['opinant', 'pintano'],\n 'opinator': ['opinator', 'tropaion'],\n 'opiner': ['opiner', 'orpine', 'ponier'],\n 'opiniaster': ['opiniaster', 'opiniastre'],\n 'opiniastre': ['opiniaster', 'opiniastre'],\n 'opiniatrety': ['opiniatrety', 'petitionary'],\n 'opisometer': ['opisometer', 'opsiometer'],\n 'opisthenar': ['opisthenar', 'spheration'],\n 'opisthorchis': ['chirosophist', 'opisthorchis'],\n 'oppian': ['oppian', 'papion', 'popian'],\n 'opposer': ['opposer', 'propose'],\n 'oppugn': ['oppugn', 'popgun'],\n 'opsiometer': ['opisometer', 'opsiometer'],\n 'opsonic': ['opsonic', 'pocosin'],\n 'opsy': ['opsy', 'posy'],\n 'opt': ['opt', 'pot', 'top'],\n 'optable': ['optable', 'potable'],\n 'optableness': ['optableness', 'potableness'],\n 'optate': ['aptote', 'optate', 'potate', 'teapot'],\n 'optation': ['optation', 'potation'],\n 'optative': ['optative', 'potative'],\n 'optic': ['optic', 'picot', 'topic'],\n 'optical': ['capitol', 'coalpit', 'optical', 'topical'],\n 'optically': ['optically', 'topically'],\n 'optics': ['copist', 'coptis', 'optics', 'postic'],\n 'optimal': ['optimal', 'palmito'],\n 'option': ['option', 'potion'],\n 'optional': ['antipolo', 'antipool', 'optional'],\n 'optography': ['optography', 'topography'],\n 'optological': ['optological', 'topological'],\n 'optologist': ['optologist', 'topologist'],\n 'optology': ['optology', 'topology'],\n 'optometer': ['optometer', 'potometer'],\n 'optophone': ['optophone', 'topophone'],\n 'optotype': ['optotype', 'topotype'],\n 'opulaster': ['opulaster', 'sportulae', 'sporulate'],\n 'opulus': ['lupous', 'opulus'],\n 'opuntia': ['opuntia', 'utopian'],\n 'opus': ['opus', 'soup'],\n 'opuscular': ['crapulous', 'opuscular'],\n 'or': ['or', 'ro'],\n 'ora': ['aro', 'oar', 'ora'],\n 'orach': ['achor', 'chora', 'corah', 'orach', 'roach'],\n 'oracle': ['carole', 'coaler', 'coelar', 'oracle', 'recoal'],\n 'orad': ['dora', 'orad', 'road'],\n 'oral': ['lora', 'oral'],\n 'oralist': ['aristol', 'oralist', 'ortalis', 'striola'],\n 'orality': ['orality', 'tailory'],\n 'orang': ['angor',\n           'argon',\n           'goran',\n           'grano',\n           'groan',\n           'nagor',\n           'orang',\n           'organ',\n           'rogan',\n           'ronga'],\n 'orange': ['onager', 'orange'],\n 'orangeist': ['goniaster', 'orangeist'],\n 'oranger': ['groaner', 'oranger', 'organer'],\n 'orangism': ['orangism', 'organism', 'sinogram'],\n 'orangist': ['orangist', 'organist', 'roasting', 'signator'],\n 'orangize': ['agonizer', 'orangize', 'organize'],\n 'orant': ['orant', 'rotan', 'toran', 'trona'],\n 'oraon': ['aroon', 'oraon'],\n 'oratress': ['assertor', 'assorter', 'oratress', 'reassort'],\n 'orb': ['bor', 'orb', 'rob'],\n 'orbed': ['boder', 'orbed'],\n 'orbic': ['boric', 'cribo', 'orbic'],\n 'orbicle': ['bricole', 'corbeil', 'orbicle'],\n 'orbicular': ['courbaril', 'orbicular'],\n 'orbitale': ['betailor', 'laborite', 'orbitale'],\n 'orbitelar': ['liberator', 'orbitelar'],\n 'orbitelarian': ['irrationable', 'orbitelarian'],\n 'orbitofrontal': ['frontoorbital', 'orbitofrontal'],\n 'orbitonasal': ['nasoorbital', 'orbitonasal'],\n 'orblet': ['bolter', 'orblet', 'reblot', 'rebolt'],\n 'orbulina': ['orbulina', 'unilobar'],\n 'orc': ['cor', 'cro', 'orc', 'roc'],\n 'orca': ['acor', 'caro', 'cora', 'orca'],\n 'orcadian': ['nocardia', 'orcadian'],\n 'orcanet': ['enactor', 'necator', 'orcanet'],\n 'orcein': ['cerion', 'coiner', 'neroic', 'orcein', 'recoin'],\n 'orchat': ['cathro', 'orchat'],\n 'orchel': ['chlore', 'choler', 'orchel'],\n 'orchester': ['orchester', 'orchestre'],\n 'orchestre': ['orchester', 'orchestre'],\n 'orchic': ['choric', 'orchic'],\n 'orchid': ['orchid', 'rhodic'],\n 'orchidist': ['chorditis', 'orchidist'],\n 'orchiocele': ['choriocele', 'orchiocele'],\n 'orchitis': ['historic', 'orchitis'],\n 'orcin': ['corin', 'noric', 'orcin'],\n 'orcinol': ['colorin', 'orcinol'],\n 'ordain': ['dorian', 'inroad', 'ordain'],\n 'ordainer': ['inroader', 'ordainer', 'reordain'],\n 'ordainment': ['antimodern', 'ordainment'],\n 'ordanchite': ['achondrite', 'ditrochean', 'ordanchite'],\n 'ordeal': ['loader', 'ordeal', 'reload'],\n 'orderer': ['orderer', 'reorder'],\n 'ordinable': ['bolderian', 'ordinable'],\n 'ordinal': ['nailrod', 'ordinal', 'rinaldo', 'rodinal'],\n 'ordinance': ['cerdonian', 'ordinance'],\n 'ordinate': ['andorite', 'nadorite', 'ordinate', 'rodentia'],\n 'ordinative': ['derivation', 'ordinative'],\n 'ordinator': ['ordinator', 'radiotron'],\n 'ordines': ['indorse', 'ordines', 'siredon', 'sordine'],\n 'ordosite': ['oestroid', 'ordosite', 'ostreoid'],\n 'ordu': ['dour', 'duro', 'ordu', 'roud'],\n 'ore': ['oer', 'ore', 'roe'],\n 'oread': ['adore', 'oared', 'oread'],\n 'oreas': ['arose', 'oreas'],\n 'orectic': ['cerotic', 'orectic'],\n 'oreman': ['enamor', 'monera', 'oreman', 'romane'],\n 'orenda': ['denaro', 'orenda'],\n 'orendite': ['enteroid', 'orendite'],\n 'orestean': ['orestean', 'resonate', 'stearone'],\n 'orf': ['for', 'fro', 'orf'],\n 'organ': ['angor',\n           'argon',\n           'goran',\n           'grano',\n           'groan',\n           'nagor',\n           'orang',\n           'organ',\n           'rogan',\n           'ronga'],\n 'organal': ['angolar', 'organal'],\n 'organer': ['groaner', 'oranger', 'organer'],\n 'organicism': ['organicism', 'organismic'],\n 'organicist': ['organicist', 'organistic'],\n 'organing': ['groaning', 'organing'],\n 'organism': ['orangism', 'organism', 'sinogram'],\n 'organismic': ['organicism', 'organismic'],\n 'organist': ['orangist', 'organist', 'roasting', 'signator'],\n 'organistic': ['organicist', 'organistic'],\n 'organity': ['gyration', 'organity', 'ortygian'],\n 'organize': ['agonizer', 'orangize', 'organize'],\n 'organized': ['dragonize', 'organized'],\n 'organoid': ['gordonia', 'organoid', 'rigadoon'],\n 'organonymic': ['craniognomy', 'organonymic'],\n 'organotin': ['gortonian', 'organotin'],\n 'organule': ['lagunero', 'organule', 'uroglena'],\n 'orgiasm': ['isogram', 'orgiasm'],\n 'orgiast': ['agistor', 'agrotis', 'orgiast'],\n 'orgic': ['corgi', 'goric', 'orgic'],\n 'orgue': ['orgue', 'rogue', 'rouge'],\n 'orgy': ['gory', 'gyro', 'orgy'],\n 'oriel': ['oiler', 'oriel', 'reoil'],\n 'orient': ['norite', 'orient'],\n 'oriental': ['oriental', 'relation', 'tirolean'],\n 'orientalism': ['misrelation', 'orientalism', 'relationism'],\n 'orientalist': ['orientalist', 'relationist'],\n 'orientate': ['anoterite', 'orientate'],\n 'origanum': ['mirounga', 'moringua', 'origanum'],\n 'origin': ['nigori', 'origin'],\n 'orle': ['lore', 'orle', 'role'],\n 'orlean': ['lenora', 'loaner', 'orlean', 'reloan'],\n 'orleanist': ['lairstone', 'orleanist', 'serotinal'],\n 'orleanistic': ['intersocial', 'orleanistic', 'sclerotinia'],\n 'orlet': ['lerot', 'orlet', 'relot'],\n 'orlo': ['loro', 'olor', 'orlo', 'rool'],\n 'orna': ['nora', 'orna', 'roan'],\n 'ornamenter': ['ornamenter', 'reornament'],\n 'ornate': ['atoner', 'norate', 'ornate'],\n 'ornately': ['neolatry', 'ornately', 'tyrolean'],\n 'ornation': ['noration', 'ornation', 'orotinan'],\n 'ornis': ['ornis', 'rosin'],\n 'orniscopic': ['orniscopic', 'scorpionic'],\n 'ornithomantic': ['ornithomantic', 'orthantimonic'],\n 'ornithoptera': ['ornithoptera', 'prototherian'],\n 'orogenetic': ['erotogenic', 'geocronite', 'orogenetic'],\n 'orographical': ['colporrhagia', 'orographical'],\n 'orography': ['gyrophora', 'orography'],\n 'orotinan': ['noration', 'ornation', 'orotinan'],\n 'orotund': ['orotund', 'rotundo'],\n 'orphanism': ['manorship', 'orphanism'],\n 'orpheon': ['orpheon', 'phorone'],\n 'orpheus': ['ephorus', 'orpheus', 'upshore'],\n 'orphical': ['orphical', 'rhopalic'],\n 'orphism': ['orphism', 'rompish'],\n 'orphize': ['orphize', 'phiroze'],\n 'orpine': ['opiner', 'orpine', 'ponier'],\n 'orsel': ['loser', 'orsel', 'rosel', 'soler'],\n 'orselle': ['orselle', 'roselle'],\n 'ort': ['ort', 'rot', 'tor'],\n 'ortalid': ['dilator', 'ortalid'],\n 'ortalis': ['aristol', 'oralist', 'ortalis', 'striola'],\n 'ortet': ['ortet', 'otter', 'toter'],\n 'orthal': ['harlot', 'orthal', 'thoral'],\n 'orthantimonic': ['ornithomantic', 'orthantimonic'],\n 'orthian': ['orthian', 'thorina'],\n 'orthic': ['chorti', 'orthic', 'thoric', 'trochi'],\n 'orthite': ['hortite', 'orthite', 'thorite'],\n 'ortho': ['ortho', 'thoro'],\n 'orthodromy': ['hydromotor', 'orthodromy'],\n 'orthogamy': ['orthogamy', 'othygroma'],\n 'orthogonial': ['orthogonial', 'orthologian'],\n 'orthologian': ['orthogonial', 'orthologian'],\n 'orthose': ['orthose', 'reshoot', 'shooter', 'soother'],\n 'ortiga': ['agrito', 'ortiga'],\n 'ortstein': ['ortstein', 'tenorist'],\n 'ortygian': ['gyration', 'organity', 'ortygian'],\n 'ortygine': ['genitory', 'ortygine'],\n 'ory': ['ory', 'roy', 'yor'],\n 'oryx': ['oryx', 'roxy'],\n 'os': ['os', 'so'],\n 'osamin': ['monias', 'osamin', 'osmina'],\n 'osamine': ['monesia', 'osamine', 'osmanie'],\n 'osc': ['cos', 'osc', 'soc'],\n 'oscan': ['ascon', 'canso', 'oscan'],\n 'oscar': ['arcos', 'crosa', 'oscar', 'sacro'],\n 'oscella': ['callose', 'oscella'],\n 'oscheal': ['oscheal', 'scholae'],\n 'oscillance': ['clinoclase', 'oscillance'],\n 'oscillaria': ['iliosacral', 'oscillaria'],\n 'oscillation': ['colonialist', 'oscillation'],\n 'oscin': ['oscin', 'scion', 'sonic'],\n 'oscine': ['cosine', 'oscine'],\n 'oscines': ['cession', 'oscines'],\n 'oscinian': ['oscinian', 'socinian'],\n 'oscinidae': ['oniscidae', 'oscinidae', 'sciaenoid'],\n 'oscitant': ['actinost', 'oscitant'],\n 'oscular': ['carolus', 'oscular'],\n 'osculate': ['lacteous', 'osculate'],\n 'osculatory': ['cotylosaur', 'osculatory'],\n 'oscule': ['coleus', 'oscule'],\n 'ose': ['oes', 'ose', 'soe'],\n 'osela': ['alose', 'osela', 'solea'],\n 'oshac': ['chaos', 'oshac'],\n 'oside': ['diose', 'idose', 'oside'],\n 'osier': ['osier', 'serio'],\n 'osirian': ['nosairi', 'osirian'],\n 'osiride': ['isidore', 'osiride'],\n 'oskar': ['krosa', 'oskar'],\n 'osmanie': ['monesia', 'osamine', 'osmanie'],\n 'osmanli': ['malison', 'manolis', 'osmanli', 'somnial'],\n 'osmatic': ['atomics', 'catoism', 'cosmati', 'osmatic', 'somatic'],\n 'osmatism': ['osmatism', 'somatism'],\n 'osmerus': ['osmerus', 'smouser'],\n 'osmin': ['minos', 'osmin', 'simon'],\n 'osmina': ['monias', 'osamin', 'osmina'],\n 'osmiridium': ['iridosmium', 'osmiridium'],\n 'osmogene': ['gonesome', 'osmogene'],\n 'osmometer': ['merostome', 'osmometer'],\n 'osmometric': ['microstome', 'osmometric'],\n 'osmophore': ['osmophore', 'sophomore'],\n 'osmotactic': ['osmotactic', 'scotomatic'],\n 'osmunda': ['damnous', 'osmunda'],\n 'osone': ['noose', 'osone'],\n 'osprey': ['eryops', 'osprey'],\n 'ossal': ['lasso', 'ossal'],\n 'ossein': ['essoin', 'ossein'],\n 'osselet': ['osselet', 'sestole', 'toeless'],\n 'ossetian': ['assiento', 'ossetian'],\n 'ossetine': ['essonite', 'ossetine'],\n 'ossicle': ['loessic', 'ossicle'],\n 'ossiculate': ['acleistous', 'ossiculate'],\n 'ossicule': ['coulisse', 'leucosis', 'ossicule'],\n 'ossuary': ['ossuary', 'suasory'],\n 'ostara': ['aroast', 'ostara'],\n 'osteal': ['lotase', 'osteal', 'solate', 'stolae', 'talose'],\n 'ostearthritis': ['arthrosteitis', 'ostearthritis'],\n 'ostectomy': ['cystotome', 'cytostome', 'ostectomy'],\n 'ostein': ['nesiot', 'ostein'],\n 'ostemia': ['miaotse', 'ostemia'],\n 'ostent': ['ostent', 'teston'],\n 'ostentation': ['ostentation', 'tionontates'],\n 'ostentous': ['ostentous', 'sostenuto'],\n 'osteometric': ['osteometric', 'stereotomic'],\n 'osteometrical': ['osteometrical', 'stereotomical'],\n 'osteometry': ['osteometry', 'stereotomy'],\n 'ostic': ['ostic', 'sciot', 'stoic'],\n 'ostmen': ['montes', 'ostmen'],\n 'ostracea': ['ceratosa', 'ostracea'],\n 'ostracean': ['ostracean', 'socratean'],\n 'ostracine': ['atroscine', 'certosina', 'ostracine', 'tinoceras', 'tricosane'],\n 'ostracism': ['ostracism', 'socratism'],\n 'ostracize': ['ostracize', 'socratize'],\n 'ostracon': ['ostracon', 'socotran'],\n 'ostraite': ['astroite', 'ostraite', 'storiate'],\n 'ostreidae': ['oestridae', 'ostreidae', 'sorediate'],\n 'ostreiform': ['forritsome', 'ostreiform'],\n 'ostreoid': ['oestroid', 'ordosite', 'ostreoid'],\n 'ostrich': ['chorist', 'ostrich'],\n 'oswald': ['dowlas', 'oswald'],\n 'otalgy': ['goatly', 'otalgy'],\n 'otaria': ['atorai', 'otaria'],\n 'otarian': ['aration', 'otarian'],\n 'otarine': ['otarine', 'torenia'],\n 'other': ['other', 'thore', 'throe', 'toher'],\n 'otherism': ['homerist', 'isotherm', 'otherism', 'theorism'],\n 'otherist': ['otherist', 'theorist'],\n 'othygroma': ['orthogamy', 'othygroma'],\n 'otiant': ['otiant', 'titano'],\n 'otidae': ['idotea', 'iodate', 'otidae'],\n 'otidine': ['edition', 'odinite', 'otidine', 'tineoid'],\n 'otiosely': ['oleosity', 'otiosely'],\n 'otitis': ['itoist', 'otitis'],\n 'oto': ['oto', 'too'],\n 'otocephalic': ['hepatocolic', 'otocephalic'],\n 'otocrane': ['coronate', 'octonare', 'otocrane'],\n 'otogenic': ['geotonic', 'otogenic'],\n 'otomian': ['amotion', 'otomian'],\n 'otomyces': ['cytosome', 'otomyces'],\n 'ottar': ['ottar', 'tarot', 'torta', 'troat'],\n 'otter': ['ortet', 'otter', 'toter'],\n 'otto': ['otto', 'toot', 'toto'],\n 'otus': ['otus', 'oust', 'suto'],\n 'otyak': ['otyak', 'tokay'],\n 'ouch': ['chou', 'ouch'],\n 'ouf': ['fou', 'ouf'],\n 'ough': ['hugo', 'ough'],\n 'ought': ['ought', 'tough'],\n 'oughtness': ['oughtness', 'toughness'],\n 'ounds': ['nodus', 'ounds', 'sound'],\n 'our': ['our', 'uro'],\n 'ours': ['ours', 'sour'],\n 'oust': ['otus', 'oust', 'suto'],\n 'ouster': ['ouster', 'souter', 'touser', 'trouse'],\n 'out': ['out', 'tou'],\n 'outarde': ['outarde', 'outdare', 'outread'],\n 'outban': ['outban', 'unboat'],\n 'outbar': ['outbar', 'rubato', 'tabour'],\n 'outbeg': ['bouget', 'outbeg'],\n 'outblow': ['blowout', 'outblow', 'outbowl'],\n 'outblunder': ['outblunder', 'untroubled'],\n 'outbowl': ['blowout', 'outblow', 'outbowl'],\n 'outbreak': ['breakout', 'outbreak'],\n 'outbred': ['doubter', 'obtrude', 'outbred', 'redoubt'],\n 'outburn': ['burnout', 'outburn'],\n 'outburst': ['outburst', 'subtutor'],\n 'outbustle': ['outbustle', 'outsubtle'],\n 'outcarol': ['outcarol', 'taurocol'],\n 'outcarry': ['curatory', 'outcarry'],\n 'outcase': ['acetous', 'outcase'],\n 'outcharm': ['outcharm', 'outmarch'],\n 'outcrier': ['courtier', 'outcrier'],\n 'outcut': ['cutout', 'outcut'],\n 'outdance': ['outdance', 'uncoated'],\n 'outdare': ['outarde', 'outdare', 'outread'],\n 'outdraw': ['drawout', 'outdraw', 'outward'],\n 'outer': ['outer', 'outre', 'route'],\n 'outerness': ['outerness', 'outreness'],\n 'outferret': ['foreutter', 'outferret'],\n 'outfit': ['fitout', 'outfit'],\n 'outflare': ['fluorate', 'outflare'],\n 'outfling': ['flouting', 'outfling'],\n 'outfly': ['outfly', 'toyful'],\n 'outgoer': ['outgoer', 'rougeot'],\n 'outgrin': ['outgrin', 'outring', 'routing', 'touring'],\n 'outhire': ['outhire', 'routhie'],\n 'outhold': ['holdout', 'outhold'],\n 'outkick': ['kickout', 'outkick'],\n 'outlance': ['cleanout', 'outlance'],\n 'outlay': ['layout', 'lutayo', 'outlay'],\n 'outleap': ['outleap', 'outpeal'],\n 'outler': ['elutor', 'louter', 'outler'],\n 'outlet': ['outlet', 'tutelo'],\n 'outline': ['elution', 'outline'],\n 'outlinear': ['outlinear', 'uranolite'],\n 'outlined': ['outlined', 'untoiled'],\n 'outlook': ['lookout', 'outlook'],\n 'outly': ['louty', 'outly'],\n 'outman': ['amount', 'moutan', 'outman'],\n 'outmarch': ['outcharm', 'outmarch'],\n 'outmarry': ['mortuary', 'outmarry'],\n 'outmaster': ['outmaster', 'outstream'],\n 'outname': ['notaeum', 'outname'],\n 'outpaint': ['outpaint', 'putation'],\n 'outpass': ['outpass', 'passout'],\n 'outpay': ['outpay', 'tapuyo'],\n 'outpeal': ['outleap', 'outpeal'],\n 'outpitch': ['outpitch', 'pitchout'],\n 'outplace': ['copulate', 'outplace'],\n 'outprice': ['eutropic', 'outprice'],\n 'outpromise': ['outpromise', 'peritomous'],\n 'outrance': ['cornuate', 'courante', 'cuneator', 'outrance'],\n 'outrate': ['outrate', 'outtear', 'torteau'],\n 'outre': ['outer', 'outre', 'route'],\n 'outread': ['outarde', 'outdare', 'outread'],\n 'outremer': ['outremer', 'urometer'],\n 'outreness': ['outerness', 'outreness'],\n 'outring': ['outgrin', 'outring', 'routing', 'touring'],\n 'outrun': ['outrun', 'runout'],\n 'outsaint': ['outsaint', 'titanous'],\n 'outscream': ['castoreum', 'outscream'],\n 'outsell': ['outsell', 'sellout'],\n 'outset': ['outset', 'setout'],\n 'outshake': ['outshake', 'shakeout'],\n 'outshape': ['outshape', 'taphouse'],\n 'outshine': ['outshine', 'tinhouse'],\n 'outshut': ['outshut', 'shutout'],\n 'outside': ['outside', 'tedious'],\n 'outsideness': ['outsideness', 'tediousness'],\n 'outsigh': ['goutish', 'outsigh'],\n 'outsin': ['outsin', 'ustion'],\n 'outslide': ['outslide', 'solitude'],\n 'outsnore': ['outsnore', 'urosteon'],\n 'outsoler': ['outsoler', 'torulose'],\n 'outspend': ['outspend', 'unposted'],\n 'outspit': ['outspit', 'utopist'],\n 'outspring': ['outspring', 'sprouting'],\n 'outspurn': ['outspurn', 'portunus'],\n 'outstair': ['outstair', 'ratitous'],\n 'outstand': ['outstand', 'standout'],\n 'outstate': ['outstate', 'outtaste'],\n 'outstream': ['outmaster', 'outstream'],\n 'outstreet': ['outstreet', 'tetterous'],\n 'outsubtle': ['outbustle', 'outsubtle'],\n 'outtaste': ['outstate', 'outtaste'],\n 'outtear': ['outrate', 'outtear', 'torteau'],\n 'outthrough': ['outthrough', 'throughout'],\n 'outthrow': ['outthrow', 'outworth', 'throwout'],\n 'outtrail': ['outtrail', 'tutorial'],\n 'outturn': ['outturn', 'turnout'],\n 'outturned': ['outturned', 'untutored'],\n 'outwalk': ['outwalk', 'walkout'],\n 'outward': ['drawout', 'outdraw', 'outward'],\n 'outwash': ['outwash', 'washout'],\n 'outwatch': ['outwatch', 'watchout'],\n 'outwith': ['outwith', 'without'],\n 'outwork': ['outwork', 'workout'],\n 'outworth': ['outthrow', 'outworth', 'throwout'],\n 'ova': ['avo', 'ova'],\n 'ovaloid': ['ovaloid', 'ovoidal'],\n 'ovarial': ['ovarial', 'variola'],\n 'ovariotubal': ['ovariotubal', 'tuboovarial'],\n 'ovational': ['avolation', 'ovational'],\n 'oven': ['nevo', 'oven'],\n 'ovenly': ['lenvoy', 'ovenly'],\n 'ovenpeel': ['envelope', 'ovenpeel'],\n 'over': ['over', 'rove'],\n 'overaction': ['overaction', 'revocation'],\n 'overactive': ['overactive', 'revocative'],\n 'overall': ['allover', 'overall'],\n 'overblame': ['overblame', 'removable'],\n 'overblow': ['overblow', 'overbowl'],\n 'overboil': ['boilover', 'overboil'],\n 'overbowl': ['overblow', 'overbowl'],\n 'overbreak': ['breakover', 'overbreak'],\n 'overburden': ['overburden', 'overburned'],\n 'overburn': ['burnover', 'overburn'],\n 'overburned': ['overburden', 'overburned'],\n 'overcall': ['overcall', 'vocaller'],\n 'overcare': ['overcare', 'overrace'],\n 'overcirculate': ['overcirculate', 'uterocervical'],\n 'overcoat': ['evocator', 'overcoat'],\n 'overcross': ['crossover', 'overcross'],\n 'overcup': ['overcup', 'upcover'],\n 'overcurious': ['erucivorous', 'overcurious'],\n 'overcurtain': ['countervair', 'overcurtain', 'recurvation'],\n 'overcut': ['cutover', 'overcut'],\n 'overdamn': ['overdamn', 'ravendom'],\n 'overdare': ['overdare', 'overdear', 'overread'],\n 'overdeal': ['overdeal', 'overlade', 'overlead'],\n 'overdear': ['overdare', 'overdear', 'overread'],\n 'overdraw': ['overdraw', 'overward'],\n 'overdrawer': ['overdrawer', 'overreward'],\n 'overdrip': ['overdrip', 'provider'],\n 'overdure': ['devourer', 'overdure', 'overrude'],\n 'overdust': ['overdust', 'overstud'],\n 'overedit': ['overedit', 'overtide'],\n 'overfar': ['favorer', 'overfar', 'refavor'],\n 'overfile': ['forelive', 'overfile'],\n 'overfilm': ['overfilm', 'veliform'],\n 'overflower': ['overflower', 'reoverflow'],\n 'overforce': ['forecover', 'overforce'],\n 'overgaiter': ['overgaiter', 'revigorate'],\n 'overglint': ['overglint', 'revolting'],\n 'overgo': ['groove', 'overgo'],\n 'overgrain': ['granivore', 'overgrain'],\n 'overhate': ['overhate', 'overheat'],\n 'overheat': ['overhate', 'overheat'],\n 'overheld': ['overheld', 'verdelho'],\n 'overidle': ['evildoer', 'overidle'],\n 'overink': ['invoker', 'overink'],\n 'overinsist': ['overinsist', 'versionist'],\n 'overkeen': ['overkeen', 'overknee'],\n 'overknee': ['overkeen', 'overknee'],\n 'overlade': ['overdeal', 'overlade', 'overlead'],\n 'overlast': ['overlast', 'oversalt'],\n 'overlate': ['elevator', 'overlate'],\n 'overlay': ['layover', 'overlay'],\n 'overlead': ['overdeal', 'overlade', 'overlead'],\n 'overlean': ['overlean', 'valerone'],\n 'overleg': ['overleg', 'reglove'],\n 'overlie': ['overlie', 'relievo'],\n 'overling': ['lovering', 'overling'],\n 'overlisten': ['overlisten', 'oversilent'],\n 'overlive': ['overlive', 'overveil'],\n 'overly': ['overly', 'volery'],\n 'overmantel': ['overmantel', 'overmantle'],\n 'overmantle': ['overmantel', 'overmantle'],\n 'overmaster': ['overmaster', 'overstream'],\n 'overmean': ['overmean', 'overname'],\n 'overmerit': ['overmerit', 'overtimer'],\n 'overname': ['overmean', 'overname'],\n 'overneat': ['overneat', 'renovate'],\n 'overnew': ['overnew', 'rewoven'],\n 'overnigh': ['hovering', 'overnigh'],\n 'overpaint': ['overpaint', 'pronative'],\n 'overpass': ['overpass', 'passover'],\n 'overpet': ['overpet', 'preveto', 'prevote'],\n 'overpick': ['overpick', 'pickover'],\n 'overplain': ['overplain', 'parvoline'],\n 'overply': ['overply', 'plovery'],\n 'overpointed': ['overpointed', 'predevotion'],\n 'overpot': ['overpot', 'overtop'],\n 'overrace': ['overcare', 'overrace'],\n 'overrate': ['overrate', 'overtare'],\n 'overread': ['overdare', 'overdear', 'overread'],\n 'overreward': ['overdrawer', 'overreward'],\n 'overrude': ['devourer', 'overdure', 'overrude'],\n 'overrun': ['overrun', 'runover'],\n 'oversad': ['oversad', 'savored'],\n 'oversale': ['oversale', 'overseal'],\n 'oversalt': ['overlast', 'oversalt'],\n 'oversauciness': ['oversauciness', 'veraciousness'],\n 'overseal': ['oversale', 'overseal'],\n 'overseen': ['overseen', 'veronese'],\n 'overset': ['overset', 'setover'],\n 'oversilent': ['overlisten', 'oversilent'],\n 'overslip': ['overslip', 'slipover'],\n 'overspread': ['overspread', 'spreadover'],\n 'overstain': ['overstain', 'servation', 'versation'],\n 'overstir': ['overstir', 'servitor'],\n 'overstrain': ['overstrain', 'traversion'],\n 'overstream': ['overmaster', 'overstream'],\n 'overstrew': ['overstrew', 'overwrest'],\n 'overstud': ['overdust', 'overstud'],\n 'overt': ['overt', 'rovet', 'torve', 'trove', 'voter'],\n 'overtare': ['overrate', 'overtare'],\n 'overthrow': ['overthrow', 'overwroth'],\n 'overthwart': ['overthwart', 'thwartover'],\n 'overtide': ['overedit', 'overtide'],\n 'overtime': ['overtime', 'remotive'],\n 'overtimer': ['overmerit', 'overtimer'],\n 'overtip': ['overtip', 'pivoter'],\n 'overtop': ['overpot', 'overtop'],\n 'overtrade': ['overtrade', 'overtread'],\n 'overtread': ['overtrade', 'overtread'],\n 'overtrue': ['overtrue', 'overture', 'trouvere'],\n 'overture': ['overtrue', 'overture', 'trouvere'],\n 'overturn': ['overturn', 'turnover'],\n 'overtwine': ['interwove', 'overtwine'],\n 'overveil': ['overlive', 'overveil'],\n 'overwalk': ['overwalk', 'walkover'],\n 'overward': ['overdraw', 'overward'],\n 'overwrest': ['overstrew', 'overwrest'],\n 'overwroth': ['overthrow', 'overwroth'],\n 'ovest': ['ovest', 'stove'],\n 'ovidae': ['evodia', 'ovidae'],\n 'ovidian': ['ovidian', 'vidonia'],\n 'ovile': ['olive', 'ovile', 'voile'],\n 'ovillus': ['ovillus', 'villous'],\n 'oviparous': ['apivorous', 'oviparous'],\n 'ovist': ['ovist', 'visto'],\n 'ovistic': ['covisit', 'ovistic'],\n 'ovoidal': ['ovaloid', 'ovoidal'],\n 'ovular': ['louvar', 'ovular'],\n 'ow': ['ow', 'wo'],\n 'owd': ['dow', 'owd', 'wod'],\n 'owe': ['owe', 'woe'],\n 'owen': ['enow', 'owen', 'wone'],\n 'owenism': ['owenism', 'winsome'],\n 'ower': ['ower', 'wore'],\n 'owerby': ['bowery', 'bowyer', 'owerby'],\n 'owl': ['low', 'lwo', 'owl'],\n 'owler': ['lower', 'owler', 'rowel'],\n 'owlery': ['lowery', 'owlery', 'rowley', 'yowler'],\n 'owlet': ['owlet', 'towel'],\n 'owlish': ['lowish', 'owlish'],\n 'owlishly': ['lowishly', 'owlishly', 'sillyhow'],\n 'owlishness': ['lowishness', 'owlishness'],\n 'owly': ['lowy', 'owly', 'yowl'],\n 'own': ['now', 'own', 'won'],\n 'owner': ['owner', 'reown', 'rowen'],\n 'ownership': ['ownership', 'shipowner'],\n 'ownness': ['nowness', 'ownness'],\n 'owser': ['owser', 'resow', 'serow', 'sower', 'swore', 'worse'],\n 'oxalan': ['axonal', 'oxalan'],\n 'oxalite': ['aloxite', 'oxalite'],\n 'oxan': ['axon', 'noxa', 'oxan'],\n 'oxanic': ['anoxic', 'oxanic'],\n 'oxazine': ['azoxine', 'oxazine'],\n 'oxen': ['exon', 'oxen'],\n 'oxidic': ['ixodic', 'oxidic'],\n 'oximate': ['oximate', 'toxemia'],\n 'oxy': ['oxy', 'yox'],\n 'oxyntic': ['ictonyx', 'oxyntic'],\n 'oxyphenol': ['oxyphenol', 'xylophone'],\n 'oxyterpene': ['enteropexy', 'oxyterpene'],\n 'oyer': ['oyer', 'roey', 'yore'],\n 'oyster': ['oyster', 'rosety'],\n 'oysterish': ['oysterish', 'thyreosis'],\n 'oysterman': ['monastery', 'oysterman'],\n 'ozan': ['azon', 'onza', 'ozan'],\n 'ozena': ['neoza', 'ozena'],\n 'ozonate': ['entozoa', 'ozonate'],\n 'ozonic': ['ozonic', 'zoonic'],\n 'ozotype': ['ozotype', 'zootype'],\n 'paal': ['paal', 'pala'],\n 'paar': ['apar', 'paar', 'para'],\n 'pablo': ['pablo', 'polab'],\n 'pac': ['cap', 'pac'],\n 'pacable': ['capable', 'pacable'],\n 'pacation': ['copatain', 'pacation'],\n 'pacaya': ['cayapa', 'pacaya'],\n 'pace': ['cape', 'cepa', 'pace'],\n 'paced': ['caped', 'decap', 'paced'],\n 'pacer': ['caper', 'crape', 'pacer', 'perca', 'recap'],\n 'pachnolite': ['pachnolite', 'phonetical'],\n 'pachometer': ['pachometer', 'phacometer'],\n 'pacht': ['chapt', 'pacht', 'patch'],\n 'pachylosis': ['pachylosis', 'phacolysis'],\n 'pacificist': ['pacificist', 'pacifistic'],\n 'pacifistic': ['pacificist', 'pacifistic'],\n 'packer': ['packer', 'repack'],\n 'paco': ['copa', 'paco'],\n 'pacolet': ['pacolet', 'polecat'],\n 'paction': ['caption', 'paction'],\n 'pactional': ['pactional', 'pactolian', 'placation'],\n 'pactionally': ['pactionally', 'polyactinal'],\n 'pactolian': ['pactional', 'pactolian', 'placation'],\n 'pad': ['dap', 'pad'],\n 'padda': ['dadap', 'padda'],\n 'padder': ['padder', 'parded'],\n 'padfoot': ['footpad', 'padfoot'],\n 'padle': ['padle', 'paled', 'pedal', 'plead'],\n 'padre': ['drape', 'padre'],\n 'padtree': ['padtree', 'predate', 'tapered'],\n 'paean': ['apnea', 'paean'],\n 'paeanism': ['paeanism', 'spanemia'],\n 'paegel': ['paegel', 'paegle', 'pelage'],\n 'paegle': ['paegel', 'paegle', 'pelage'],\n 'paga': ['gapa', 'paga'],\n 'page': ['gape', 'page', 'peag', 'pega'],\n 'pagedom': ['megapod', 'pagedom'],\n 'pager': ['gaper', 'grape', 'pager', 'parge'],\n 'pageship': ['pageship', 'shippage'],\n 'paginary': ['agrypnia', 'paginary'],\n 'paguridae': ['paguridae', 'paguridea'],\n 'paguridea': ['paguridae', 'paguridea'],\n 'pagurine': ['pagurine', 'perugian'],\n 'pah': ['hap', 'pah'],\n 'pahari': ['pahari', 'pariah', 'raphia'],\n 'pahi': ['hapi', 'pahi'],\n 'paho': ['opah', 'paho', 'poha'],\n 'paigle': ['paigle', 'pilage'],\n 'paik': ['paik', 'pika'],\n 'pail': ['lipa', 'pail', 'pali', 'pial'],\n 'paillasse': ['paillasse', 'palliasse'],\n 'pain': ['nipa', 'pain', 'pani', 'pian', 'pina'],\n 'painless': ['painless', 'spinales'],\n 'paint': ['inapt', 'paint', 'pinta'],\n 'painted': ['depaint', 'inadept', 'painted', 'patined'],\n 'painter': ['painter', 'pertain', 'pterian', 'repaint'],\n 'painterly': ['interplay', 'painterly'],\n 'paintiness': ['antisepsin', 'paintiness'],\n 'paip': ['paip', 'pipa'],\n 'pair': ['pair', 'pari', 'pria', 'ripa'],\n 'paired': ['diaper', 'paired'],\n 'pairer': ['pairer', 'rapier', 'repair'],\n 'pairment': ['imperant', 'pairment', 'partimen', 'premiant', 'tripeman'],\n 'pais': ['apis', 'pais', 'pasi', 'saip'],\n 'pajonism': ['japonism', 'pajonism'],\n 'pal': ['alp', 'lap', 'pal'],\n 'pala': ['paal', 'pala'],\n 'palaeechinoid': ['deinocephalia', 'palaeechinoid'],\n 'palaemonid': ['anomaliped', 'palaemonid'],\n 'palaemonoid': ['adenolipoma', 'palaemonoid'],\n 'palaeornis': ['palaeornis', 'personalia'],\n 'palaestrics': ['palaestrics', 'paracelsist'],\n 'palaic': ['apical', 'palaic'],\n 'palaite': ['palaite', 'petalia', 'pileata'],\n 'palame': ['palame', 'palmae', 'pamela'],\n 'palamite': ['ampliate', 'palamite'],\n 'palas': ['palas', 'salpa'],\n 'palate': ['aletap', 'palate', 'platea'],\n 'palatial': ['palatial', 'palliata'],\n 'palatic': ['capital', 'palatic'],\n 'palation': ['palation', 'talapoin'],\n 'palatonasal': ['nasopalatal', 'palatonasal'],\n 'palau': ['palau', 'paula'],\n 'palay': ['palay', 'playa'],\n 'pale': ['leap', 'lepa', 'pale', 'peal', 'plea'],\n 'paled': ['padle', 'paled', 'pedal', 'plead'],\n 'paleness': ['paleness', 'paneless'],\n 'paleolithy': ['paleolithy', 'polyhalite', 'polythelia'],\n 'paler': ['lepra', 'paler', 'parel', 'parle', 'pearl', 'perla', 'relap'],\n 'palermitan': ['palermitan', 'parliament'],\n 'palermo': ['leproma', 'palermo', 'pleroma', 'polearm'],\n 'pales': ['elaps',\n           'lapse',\n           'lepas',\n           'pales',\n           'salep',\n           'saple',\n           'sepal',\n           'slape',\n           'spale',\n           'speal'],\n 'palestral': ['alpestral', 'palestral'],\n 'palestrian': ['alpestrian', 'palestrian', 'psalterian'],\n 'palet': ['leapt',\n           'palet',\n           'patel',\n           'pelta',\n           'petal',\n           'plate',\n           'pleat',\n           'tepal'],\n 'palette': ['palette', 'peltate'],\n 'pali': ['lipa', 'pail', 'pali', 'pial'],\n 'palification': ['palification', 'pontificalia'],\n 'palinode': ['lapideon', 'palinode', 'pedalion'],\n 'palinodist': ['palinodist', 'plastinoid'],\n 'palisade': ['palisade', 'salpidae'],\n 'palish': ['palish', 'silpha'],\n 'pallasite': ['aliseptal', 'pallasite'],\n 'pallette': ['pallette', 'platelet'],\n 'palliasse': ['paillasse', 'palliasse'],\n 'palliata': ['palatial', 'palliata'],\n 'pallone': ['pallone', 'pleonal'],\n 'palluites': ['palluites', 'pulsatile'],\n 'palm': ['lamp', 'palm'],\n 'palmad': ['lampad', 'palmad'],\n 'palmae': ['palame', 'palmae', 'pamela'],\n 'palmary': ['palmary', 'palmyra'],\n 'palmatilobed': ['palmatilobed', 'palmilobated'],\n 'palmatisect': ['metaplastic', 'palmatisect'],\n 'palmer': ['lamper', 'palmer', 'relamp'],\n 'palmery': ['lamprey', 'palmery'],\n 'palmette': ['palmette', 'template'],\n 'palmful': ['lampful', 'palmful'],\n 'palmification': ['amplification', 'palmification'],\n 'palmilobated': ['palmatilobed', 'palmilobated'],\n 'palmipes': ['epiplasm', 'palmipes'],\n 'palmist': ['lampist', 'palmist'],\n 'palmister': ['palmister', 'prelatism'],\n 'palmistry': ['lampistry', 'palmistry'],\n 'palmite': ['implate', 'palmite'],\n 'palmito': ['optimal', 'palmito'],\n 'palmitone': ['emptional', 'palmitone'],\n 'palmo': ['mopla', 'palmo'],\n 'palmula': ['ampulla', 'palmula'],\n 'palmy': ['amply', 'palmy'],\n 'palmyra': ['palmary', 'palmyra'],\n 'palolo': ['apollo', 'palolo'],\n 'palp': ['lapp', 'palp', 'plap'],\n 'palpal': ['appall', 'palpal'],\n 'palpatory': ['palpatory', 'papolatry'],\n 'palped': ['dapple', 'lapped', 'palped'],\n 'palpi': ['palpi', 'pipal'],\n 'palster': ['palster', 'persalt', 'plaster', 'psalter', 'spartle', 'stapler'],\n 'palsy': ['palsy', 'splay'],\n 'palt': ['palt', 'plat'],\n 'palta': ['aptal', 'palta', 'talpa'],\n 'palter': ['palter', 'plater'],\n 'palterer': ['palterer', 'platerer'],\n 'paltry': ['paltry', 'partly', 'raptly'],\n 'paludian': ['paludian', 'paludina'],\n 'paludic': ['paludic', 'pudical'],\n 'paludina': ['paludian', 'paludina'],\n 'palus': ['palus', 'pasul'],\n 'palustral': ['palustral', 'plaustral'],\n 'palustrine': ['lupinaster', 'palustrine'],\n 'paly': ['paly', 'play', 'pyal', 'pyla'],\n 'pam': ['map', 'pam'],\n 'pamela': ['palame', 'palmae', 'pamela'],\n 'pamir': ['impar', 'pamir', 'prima'],\n 'pamiri': ['impair', 'pamiri'],\n 'pamper': ['mapper', 'pamper', 'pampre'],\n 'pampre': ['mapper', 'pamper', 'pampre'],\n 'pan': ['nap', 'pan'],\n 'panace': ['canape', 'panace'],\n 'panaceist': ['antispace', 'panaceist'],\n 'panade': ['napead', 'panade'],\n 'panak': ['kanap', 'panak'],\n 'panamist': ['mainpast', 'mantispa', 'panamist', 'stampian'],\n 'panary': ['panary', 'panyar'],\n 'panatela': ['panatela', 'plataean'],\n 'panatrophy': ['apanthropy', 'panatrophy'],\n 'pancreatoduodenectomy': ['duodenopancreatectomy', 'pancreatoduodenectomy'],\n 'pandean': ['pandean', 'pannade'],\n 'pandemia': ['pandemia', 'pedimana'],\n 'pander': ['pander', 'repand'],\n 'panderly': ['panderly', 'repandly'],\n 'pandermite': ['pandermite', 'pentamerid'],\n 'panderous': ['panderous', 'repandous'],\n 'pandion': ['dipnoan', 'nonpaid', 'pandion'],\n 'pandour': ['pandour', 'poduran'],\n 'pane': ['nape', 'neap', 'nepa', 'pane', 'pean'],\n 'paned': ['paned', 'penda'],\n 'panel': ['alpen', 'nepal', 'panel', 'penal', 'plane'],\n 'panela': ['apneal', 'panela'],\n 'panelation': ['antelopian', 'neapolitan', 'panelation'],\n 'paneler': ['paneler', 'repanel', 'replane'],\n 'paneless': ['paleness', 'paneless'],\n 'panelist': ['panelist', 'pantelis', 'penalist', 'plastein'],\n 'pangamic': ['campaign', 'pangamic'],\n 'pangane': ['pangane', 'pannage'],\n 'pangen': ['pangen', 'penang'],\n 'pangene': ['pangene', 'pennage'],\n 'pangi': ['aping', 'ngapi', 'pangi'],\n 'pani': ['nipa', 'pain', 'pani', 'pian', 'pina'],\n 'panicle': ['calepin', 'capelin', 'panicle', 'pelican', 'pinacle'],\n 'paniculitis': ['paniculitis', 'paulinistic'],\n 'panisca': ['capsian', 'caspian', 'nascapi', 'panisca'],\n 'panisic': ['panisic', 'piscian', 'piscina', 'sinapic'],\n 'pank': ['knap', 'pank'],\n 'pankin': ['napkin', 'pankin'],\n 'panman': ['panman', 'pannam'],\n 'panmug': ['panmug', 'pugman'],\n 'pannade': ['pandean', 'pannade'],\n 'pannage': ['pangane', 'pannage'],\n 'pannam': ['panman', 'pannam'],\n 'panne': ['panne', 'penna'],\n 'pannicle': ['pannicle', 'pinnacle'],\n 'pannus': ['pannus', 'sannup', 'unsnap', 'unspan'],\n 'panoche': ['copehan', 'panoche', 'phocean'],\n 'panoistic': ['panoistic', 'piscation'],\n 'panornithic': ['panornithic', 'rhaponticin'],\n 'panostitis': ['antiptosis', 'panostitis'],\n 'panplegia': ['appealing', 'lagniappe', 'panplegia'],\n 'pansciolist': ['costispinal', 'pansciolist'],\n 'panse': ['aspen', 'panse', 'snape', 'sneap', 'spane', 'spean'],\n 'panside': ['ipseand', 'panside', 'pansied'],\n 'pansied': ['ipseand', 'panside', 'pansied'],\n 'pansy': ['pansy', 'snapy'],\n 'pantaleon': ['pantaleon', 'pantalone'],\n 'pantalone': ['pantaleon', 'pantalone'],\n 'pantarchy': ['pantarchy', 'pyracanth'],\n 'pantelis': ['panelist', 'pantelis', 'penalist', 'plastein'],\n 'pantellerite': ['interpellate', 'pantellerite'],\n 'panter': ['arpent',\n            'enrapt',\n            'entrap',\n            'panter',\n            'parent',\n            'pretan',\n            'trepan'],\n 'pantheic': ['haptenic', 'pantheic', 'pithecan'],\n 'pantheonic': ['nonhepatic', 'pantheonic'],\n 'pantie': ['pantie', 'patine'],\n 'panties': ['panties', 'sapient', 'spinate'],\n 'pantile': ['pantile', 'pentail', 'platine', 'talpine'],\n 'pantle': ['pantle', 'planet', 'platen'],\n 'pantler': ['pantler', 'planter', 'replant'],\n 'pantofle': ['felapton', 'pantofle'],\n 'pantry': ['pantry', 'trypan'],\n 'panyar': ['panary', 'panyar'],\n 'papabot': ['papabot', 'papboat'],\n 'papal': ['lappa', 'papal'],\n 'papalistic': ['papalistic', 'papistical'],\n 'papboat': ['papabot', 'papboat'],\n 'paper': ['paper', 'rappe'],\n 'papered': ['papered', 'pradeep'],\n 'paperer': ['paperer', 'perpera', 'prepare', 'repaper'],\n 'papern': ['napper', 'papern'],\n 'papery': ['papery', 'prepay', 'yapper'],\n 'papillote': ['papillote', 'popliteal'],\n 'papion': ['oppian', 'papion', 'popian'],\n 'papisher': ['papisher', 'sapphire'],\n 'papistical': ['papalistic', 'papistical'],\n 'papless': ['papless', 'sapples'],\n 'papolatry': ['palpatory', 'papolatry'],\n 'papule': ['papule', 'upleap'],\n 'par': ['par', 'rap'],\n 'para': ['apar', 'paar', 'para'],\n 'parablepsia': ['appraisable', 'parablepsia'],\n 'paracelsist': ['palaestrics', 'paracelsist'],\n 'parachor': ['chaparro', 'parachor'],\n 'paracolitis': ['paracolitis', 'piscatorial'],\n 'paradisaic': ['paradisaic', 'paradisiac'],\n 'paradisaically': ['paradisaically', 'paradisiacally'],\n 'paradise': ['paradise', 'sparidae'],\n 'paradisiac': ['paradisaic', 'paradisiac'],\n 'paradisiacally': ['paradisaically', 'paradisiacally'],\n 'parado': ['parado', 'pardao'],\n 'paraenetic': ['capernaite', 'paraenetic'],\n 'paragrapher': ['paragrapher', 'reparagraph'],\n 'parah': ['aphra', 'harpa', 'parah'],\n 'parale': ['earlap', 'parale'],\n 'param': ['param', 'parma', 'praam'],\n 'paramine': ['amperian', 'paramine', 'pearmain'],\n 'paranephric': ['paranephric', 'paraphrenic'],\n 'paranephritis': ['paranephritis', 'paraphrenitis'],\n 'paranosic': ['caparison', 'paranosic'],\n 'paraphrenic': ['paranephric', 'paraphrenic'],\n 'paraphrenitis': ['paranephritis', 'paraphrenitis'],\n 'parasita': ['aspirata', 'parasita'],\n 'parasite': ['aspirate', 'parasite'],\n 'parasol': ['asaprol', 'parasol'],\n 'parasuchian': ['parasuchian', 'unpharasaic'],\n 'parasyntheton': ['parasyntheton', 'thysanopteran'],\n 'parate': ['aptera', 'parate', 'patera'],\n 'parathion': ['parathion', 'phanariot'],\n 'parazoan': ['parazoan', 'zaparoan'],\n 'parboil': ['bipolar', 'parboil'],\n 'parcel': ['carpel', 'parcel', 'placer'],\n 'parcellary': ['carpellary', 'parcellary'],\n 'parcellate': ['carpellate', 'parcellate', 'prelacteal'],\n 'parchesi': ['parchesi', 'seraphic'],\n 'pard': ['pard', 'prad'],\n 'pardao': ['parado', 'pardao'],\n 'parded': ['padder', 'parded'],\n 'pardesi': ['despair', 'pardesi'],\n 'pardo': ['adrop', 'pardo'],\n 'pardoner': ['pardoner', 'preadorn'],\n 'pare': ['aper', 'pare', 'pear', 'rape', 'reap'],\n 'parel': ['lepra', 'paler', 'parel', 'parle', 'pearl', 'perla', 'relap'],\n 'paren': ['arpen', 'paren'],\n 'parent': ['arpent',\n            'enrapt',\n            'entrap',\n            'panter',\n            'parent',\n            'pretan',\n            'trepan'],\n 'parental': ['parental', 'paternal', 'prenatal'],\n 'parentalia': ['parentalia', 'planetaria'],\n 'parentalism': ['parentalism', 'paternalism'],\n 'parentality': ['parentality', 'paternality'],\n 'parentally': ['parentally', 'paternally', 'prenatally'],\n 'parentelic': ['epicentral', 'parentelic'],\n 'parenticide': ['parenticide', 'preindicate'],\n 'parer': ['parer', 'raper'],\n 'paresis': ['paresis', 'serapis'],\n 'paretic': ['paretic', 'patrice', 'picrate'],\n 'parge': ['gaper', 'grape', 'pager', 'parge'],\n 'pari': ['pair', 'pari', 'pria', 'ripa'],\n 'pariah': ['pahari', 'pariah', 'raphia'],\n 'paridae': ['deipara', 'paridae'],\n 'paries': ['aspire', 'paries', 'praise', 'sirpea', 'spirea'],\n 'parietal': ['apterial', 'parietal'],\n 'parietes': ['asperite', 'parietes'],\n 'parietofrontal': ['frontoparietal', 'parietofrontal'],\n 'parietosquamosal': ['parietosquamosal', 'squamosoparietal'],\n 'parietotemporal': ['parietotemporal', 'temporoparietal'],\n 'parietovisceral': ['parietovisceral', 'visceroparietal'],\n 'parine': ['parine', 'rapine'],\n 'paring': ['paring', 'raping'],\n 'paris': ['paris', 'parsi', 'sarip'],\n 'parish': ['parish', 'raphis', 'rhapis'],\n 'parished': ['diphaser', 'parished', 'raphides', 'sephardi'],\n 'parison': ['parison', 'soprani'],\n 'parity': ['parity', 'piraty'],\n 'parkee': ['parkee', 'peaker'],\n 'parker': ['parker', 'repark'],\n 'parlatory': ['parlatory', 'portrayal'],\n 'parle': ['lepra', 'paler', 'parel', 'parle', 'pearl', 'perla', 'relap'],\n 'parley': ['parley', 'pearly', 'player', 'replay'],\n 'parliament': ['palermitan', 'parliament'],\n 'parly': ['parly', 'pylar', 'pyral'],\n 'parma': ['param', 'parma', 'praam'],\n 'parmesan': ['parmesan', 'spearman'],\n 'parnel': ['parnel', 'planer', 'replan'],\n 'paroch': ['carhop', 'paroch'],\n 'parochialism': ['aphorismical', 'parochialism'],\n 'parochine': ['canephroi', 'parochine'],\n 'parodic': ['parodic', 'picador'],\n 'paroecism': ['paroecism', 'premosaic'],\n 'parol': ['parol', 'polar', 'poral', 'proal'],\n 'parosela': ['parosela', 'psoralea'],\n 'parosteal': ['parosteal', 'pastorale'],\n 'parostotic': ['parostotic', 'postaortic'],\n 'parotia': ['apiator', 'atropia', 'parotia'],\n 'parotic': ['apricot', 'atropic', 'parotic', 'patrico'],\n 'parotid': ['dioptra', 'parotid'],\n 'parotitic': ['parotitic', 'patriotic'],\n 'parotitis': ['parotitis', 'topiarist'],\n 'parous': ['parous', 'upsoar'],\n 'parovarium': ['parovarium', 'vaporarium'],\n 'parrot': ['parrot', 'raptor'],\n 'parroty': ['parroty', 'portray', 'tropary'],\n 'parsable': ['parsable', 'prebasal', 'sparable'],\n 'parse': ['asper', 'parse', 'prase', 'spaer', 'spare', 'spear'],\n 'parsec': ['casper', 'escarp', 'parsec', 'scrape', 'secpar', 'spacer'],\n 'parsee': ['parsee', 'persae', 'persea', 'serape'],\n 'parser': ['parser', 'rasper', 'sparer'],\n 'parsi': ['paris', 'parsi', 'sarip'],\n 'parsley': ['parsley', 'pyrales', 'sparely', 'splayer'],\n 'parsoned': ['parsoned', 'spadrone'],\n 'parsonese': ['parsonese', 'preseason'],\n 'parsonic': ['parsonic', 'scoparin'],\n 'part': ['part', 'prat', 'rapt', 'tarp', 'trap'],\n 'partan': ['partan', 'tarpan'],\n 'parted': ['depart', 'parted', 'petard'],\n 'partedness': ['depressant', 'partedness'],\n 'parter': ['parter', 'prater'],\n 'parthian': ['parthian', 'taphrina'],\n 'partial': ['partial', 'patrial'],\n 'partialistic': ['iatraliptics', 'partialistic'],\n 'particle': ['particle', 'plicater', 'prelatic'],\n 'particulate': ['catapultier', 'particulate'],\n 'partigen': ['partigen', 'tapering'],\n 'partile': ['partile', 'plaiter', 'replait'],\n 'partimen': ['imperant', 'pairment', 'partimen', 'premiant', 'tripeman'],\n 'partinium': ['impuritan', 'partinium'],\n 'partisan': ['aspirant', 'partisan', 'spartina'],\n 'partite': ['partite', 'tearpit'],\n 'partitioned': ['departition', 'partitioned', 'trepidation'],\n 'partitioner': ['partitioner', 'repartition'],\n 'partlet': ['partlet', 'platter', 'prattle'],\n 'partly': ['paltry', 'partly', 'raptly'],\n 'parto': ['aport', 'parto', 'porta'],\n 'parture': ['parture', 'rapture'],\n 'party': ['party', 'trypa'],\n 'parulis': ['parulis', 'spirula', 'uprisal'],\n 'parure': ['parure', 'uprear'],\n 'parvoline': ['overplain', 'parvoline'],\n 'pasan': ['pasan', 'sapan'],\n 'pasch': ['chaps', 'pasch'],\n 'pascha': ['pascha', 'scapha'],\n 'paschite': ['paschite', 'pastiche', 'pistache', 'scaphite'],\n 'pascual': ['capsula', 'pascual', 'scapula'],\n 'pash': ['hasp', 'pash', 'psha', 'shap'],\n 'pasha': ['asaph', 'pasha'],\n 'pashm': ['pashm', 'phasm'],\n 'pashto': ['pashto', 'pathos', 'potash'],\n 'pasi': ['apis', 'pais', 'pasi', 'saip'],\n 'passer': ['passer', 'repass', 'sparse'],\n 'passional': ['passional', 'sponsalia'],\n 'passo': ['passo', 'psoas'],\n 'passout': ['outpass', 'passout'],\n 'passover': ['overpass', 'passover'],\n 'past': ['past', 'spat', 'stap', 'taps'],\n 'paste': ['paste', 'septa', 'spate'],\n 'pastel': ['pastel', 'septal', 'staple'],\n 'paster': ['paster', 'repast', 'trapes'],\n 'pasterer': ['pasterer', 'strepera'],\n 'pasteur': ['pasteur', 'pasture', 'upstare'],\n 'pastiche': ['paschite', 'pastiche', 'pistache', 'scaphite'],\n 'pasticheur': ['curateship', 'pasticheur'],\n 'pastil': ['alpist', 'pastil', 'spital'],\n 'pastile': ['aliptes', 'pastile', 'talipes'],\n 'pastime': ['impaste', 'pastime'],\n 'pastimer': ['maspiter', 'pastimer', 'primates'],\n 'pastophorium': ['amphitropous', 'pastophorium'],\n 'pastophorus': ['apostrophus', 'pastophorus'],\n 'pastor': ['asport', 'pastor', 'sproat'],\n 'pastoral': ['pastoral', 'proatlas'],\n 'pastorale': ['parosteal', 'pastorale'],\n 'pastose': ['pastose', 'petasos'],\n 'pastural': ['pastural', 'spatular'],\n 'pasture': ['pasteur', 'pasture', 'upstare'],\n 'pasty': ['pasty', 'patsy'],\n 'pasul': ['palus', 'pasul'],\n 'pat': ['apt', 'pat', 'tap'],\n 'pata': ['atap', 'pata', 'tapa'],\n 'patao': ['opata', 'patao', 'tapoa'],\n 'patarin': ['patarin', 'tarapin'],\n 'patarine': ['patarine', 'tarpeian'],\n 'patas': ['patas', 'tapas'],\n 'patch': ['chapt', 'pacht', 'patch'],\n 'patcher': ['chapter', 'patcher', 'repatch'],\n 'patchery': ['patchery', 'petchary'],\n 'pate': ['pate', 'peat', 'tape', 'teap'],\n 'patel': ['leapt',\n           'palet',\n           'patel',\n           'pelta',\n           'petal',\n           'plate',\n           'pleat',\n           'tepal'],\n 'paten': ['enapt', 'paten', 'penta', 'tapen'],\n 'patener': ['patener', 'pearten', 'petrean', 'terpane'],\n 'patent': ['patent', 'patten', 'tapnet'],\n 'pater': ['apert', 'pater', 'peart', 'prate', 'taper', 'terap'],\n 'patera': ['aptera', 'parate', 'patera'],\n 'paternal': ['parental', 'paternal', 'prenatal'],\n 'paternalism': ['parentalism', 'paternalism'],\n 'paternalist': ['intraseptal', 'paternalist', 'prenatalist'],\n 'paternality': ['parentality', 'paternality'],\n 'paternally': ['parentally', 'paternally', 'prenatally'],\n 'paternoster': ['paternoster', 'prosternate', 'transportee'],\n 'patesi': ['patesi', 'pietas'],\n 'pathed': ['heptad', 'pathed'],\n 'pathic': ['haptic', 'pathic'],\n 'pathlet': ['pathlet', 'telpath'],\n 'pathogen': ['heptagon', 'pathogen'],\n 'pathologicoanatomic': ['anatomicopathologic', 'pathologicoanatomic'],\n 'pathologicoanatomical': ['anatomicopathological', 'pathologicoanatomical'],\n 'pathologicoclinical': ['clinicopathological', 'pathologicoclinical'],\n 'pathonomy': ['monopathy', 'pathonomy'],\n 'pathophoric': ['haptophoric', 'pathophoric'],\n 'pathophorous': ['haptophorous', 'pathophorous'],\n 'pathos': ['pashto', 'pathos', 'potash'],\n 'pathy': ['pathy', 'typha'],\n 'patiently': ['patiently', 'platynite'],\n 'patina': ['aptian', 'patina', 'taipan'],\n 'patine': ['pantie', 'patine'],\n 'patined': ['depaint', 'inadept', 'painted', 'patined'],\n 'patio': ['patio', 'taipo', 'topia'],\n 'patly': ['aptly', 'patly', 'platy', 'typal'],\n 'patness': ['aptness', 'patness'],\n 'pato': ['atop', 'pato'],\n 'patola': ['patola', 'tapalo'],\n 'patrial': ['partial', 'patrial'],\n 'patriarch': ['patriarch', 'phratriac'],\n 'patrice': ['paretic', 'patrice', 'picrate'],\n 'patricide': ['dipicrate', 'patricide', 'pediatric'],\n 'patrico': ['apricot', 'atropic', 'parotic', 'patrico'],\n 'patrilocal': ['allopatric', 'patrilocal'],\n 'patriotic': ['parotitic', 'patriotic'],\n 'patroclinous': ['patroclinous', 'pratincolous'],\n 'patrol': ['patrol', 'portal', 'tropal'],\n 'patron': ['patron', 'tarpon'],\n 'patroness': ['patroness', 'transpose'],\n 'patronite': ['antitrope', 'patronite', 'tritanope'],\n 'patronymic': ['importancy', 'patronymic', 'pyromantic'],\n 'patsy': ['pasty', 'patsy'],\n 'patte': ['patte', 'tapet'],\n 'pattee': ['pattee', 'tapete'],\n 'patten': ['patent', 'patten', 'tapnet'],\n 'pattener': ['pattener', 'repatent'],\n 'patterer': ['patterer', 'pretreat'],\n 'pattern': ['pattern', 'reptant'],\n 'patterner': ['patterner', 'repattern'],\n 'patu': ['patu', 'paut', 'tapu'],\n 'patulent': ['patulent', 'petulant'],\n 'pau': ['pau', 'pua'],\n 'paul': ['paul', 'upla'],\n 'paula': ['palau', 'paula'],\n 'paulian': ['apulian', 'paulian', 'paulina'],\n 'paulie': ['alpieu', 'paulie'],\n 'paulin': ['paulin', 'pulian'],\n 'paulina': ['apulian', 'paulian', 'paulina'],\n 'paulinistic': ['paniculitis', 'paulinistic'],\n 'paulinus': ['nauplius', 'paulinus'],\n 'paulist': ['paulist', 'stipula'],\n 'paup': ['paup', 'pupa'],\n 'paut': ['patu', 'paut', 'tapu'],\n 'paver': ['paver', 'verpa'],\n 'pavid': ['pavid', 'vapid'],\n 'pavidity': ['pavidity', 'vapidity'],\n 'pavier': ['pavier', 'vipera'],\n 'pavisor': ['pavisor', 'proavis'],\n 'paw': ['paw', 'wap'],\n 'pawner': ['enwrap', 'pawner', 'repawn'],\n 'pay': ['pay', 'pya', 'yap'],\n 'payer': ['apery', 'payer', 'repay'],\n 'payroll': ['payroll', 'polarly'],\n 'pea': ['ape', 'pea'],\n 'peach': ['chape', 'cheap', 'peach'],\n 'peachen': ['cheapen', 'peachen'],\n 'peachery': ['cheapery', 'peachery'],\n 'peachlet': ['chapelet', 'peachlet'],\n 'peacoat': ['opacate', 'peacoat'],\n 'peag': ['gape', 'page', 'peag', 'pega'],\n 'peaker': ['parkee', 'peaker'],\n 'peal': ['leap', 'lepa', 'pale', 'peal', 'plea'],\n 'pealike': ['apelike', 'pealike'],\n 'pean': ['nape', 'neap', 'nepa', 'pane', 'pean'],\n 'pear': ['aper', 'pare', 'pear', 'rape', 'reap'],\n 'pearl': ['lepra', 'paler', 'parel', 'parle', 'pearl', 'perla', 'relap'],\n 'pearled': ['pearled', 'pedaler', 'pleader', 'replead'],\n 'pearlet': ['pearlet', 'pleater', 'prelate', 'ptereal', 'replate', 'repleat'],\n 'pearlin': ['pearlin', 'plainer', 'praline'],\n 'pearlish': ['earlship', 'pearlish'],\n 'pearlsides': ['displeaser', 'pearlsides'],\n 'pearly': ['parley', 'pearly', 'player', 'replay'],\n 'pearmain': ['amperian', 'paramine', 'pearmain'],\n 'peart': ['apert', 'pater', 'peart', 'prate', 'taper', 'terap'],\n 'pearten': ['patener', 'pearten', 'petrean', 'terpane'],\n 'peartly': ['apertly', 'peartly', 'platery', 'pteryla', 'taperly'],\n 'peartness': ['apertness', 'peartness', 'taperness'],\n 'peasantry': ['peasantry', 'synaptera'],\n 'peat': ['pate', 'peat', 'tape', 'teap'],\n 'peatman': ['peatman', 'tapeman'],\n 'peatship': ['happiest', 'peatship'],\n 'peccation': ['acception', 'peccation'],\n 'peckerwood': ['peckerwood', 'woodpecker'],\n 'pecos': ['copse', 'pecos', 'scope'],\n 'pectin': ['incept', 'pectin'],\n 'pectinate': ['pectinate', 'pencatite'],\n 'pectination': ['antinepotic', 'pectination'],\n 'pectinatopinnate': ['pectinatopinnate', 'pinnatopectinate'],\n 'pectinoid': ['depiction', 'pectinoid'],\n 'pectora': ['coperta', 'pectora', 'porcate'],\n 'pecunious': ['pecunious', 'puniceous'],\n 'peda': ['depa', 'peda'],\n 'pedal': ['padle', 'paled', 'pedal', 'plead'],\n 'pedaler': ['pearled', 'pedaler', 'pleader', 'replead'],\n 'pedalier': ['pedalier', 'perlidae'],\n 'pedalion': ['lapideon', 'palinode', 'pedalion'],\n 'pedalism': ['misplead', 'pedalism'],\n 'pedalist': ['dispetal', 'pedalist'],\n 'pedaliter': ['pedaliter', 'predetail'],\n 'pedant': ['pedant', 'pentad'],\n 'pedantess': ['adeptness', 'pedantess'],\n 'pedantic': ['pedantic', 'pentacid'],\n 'pedary': ['pedary', 'preday'],\n 'pederastic': ['discrepate', 'pederastic'],\n 'pedes': ['pedes', 'speed'],\n 'pedesis': ['despise', 'pedesis'],\n 'pedestrial': ['pedestrial', 'pilastered'],\n 'pediatric': ['dipicrate', 'patricide', 'pediatric'],\n 'pedicel': ['pedicel', 'pedicle'],\n 'pedicle': ['pedicel', 'pedicle'],\n 'pedicular': ['crepidula', 'pedicular'],\n 'pediculi': ['lupicide', 'pediculi', 'pulicide'],\n 'pedimana': ['pandemia', 'pedimana'],\n 'pedocal': ['lacepod', 'pedocal', 'placode'],\n 'pedometrician': ['pedometrician', 'premedication'],\n 'pedrail': ['pedrail', 'predial'],\n 'pedro': ['doper', 'pedro', 'pored'],\n 'peed': ['deep', 'peed'],\n 'peek': ['keep', 'peek'],\n 'peel': ['leep', 'peel', 'pele'],\n 'peelman': ['empanel', 'emplane', 'peelman'],\n 'peen': ['neep', 'peen'],\n 'peerly': ['peerly', 'yelper'],\n 'pega': ['gape', 'page', 'peag', 'pega'],\n 'peho': ['hope', 'peho'],\n 'peiser': ['espier', 'peiser'],\n 'peitho': ['ethiop', 'ophite', 'peitho'],\n 'peixere': ['expiree', 'peixere'],\n 'pekan': ['knape', 'pekan'],\n 'pelage': ['paegel', 'paegle', 'pelage'],\n 'pelasgoi': ['pelasgoi', 'spoilage'],\n 'pele': ['leep', 'peel', 'pele'],\n 'pelean': ['alpeen', 'lenape', 'pelean'],\n 'pelecani': ['capeline', 'pelecani'],\n 'pelecanus': ['encapsule', 'pelecanus'],\n 'pelias': ['espial', 'lipase', 'pelias'],\n 'pelican': ['calepin', 'capelin', 'panicle', 'pelican', 'pinacle'],\n 'pelick': ['pelick', 'pickle'],\n 'pelides': ['pelides', 'seedlip'],\n 'pelidnota': ['pelidnota', 'planetoid'],\n 'pelike': ['kelpie', 'pelike'],\n 'pelisse': ['pelisse', 'pieless'],\n 'pelite': ['leepit', 'pelite', 'pielet'],\n 'pellation': ['pellation', 'pollinate'],\n 'pellotine': ['pellotine', 'pollenite'],\n 'pelmet': ['pelmet', 'temple'],\n 'pelon': ['pelon', 'pleon'],\n 'pelops': ['pelops', 'peplos'],\n 'pelorian': ['pelorian', 'peronial', 'proalien'],\n 'peloric': ['peloric', 'precoil'],\n 'pelorus': ['leprous', 'pelorus', 'sporule'],\n 'pelota': ['alepot', 'pelota'],\n 'pelta': ['leapt',\n           'palet',\n           'patel',\n           'pelta',\n           'petal',\n           'plate',\n           'pleat',\n           'tepal'],\n 'peltandra': ['leptandra', 'peltandra'],\n 'peltast': ['peltast', 'spattle'],\n 'peltate': ['palette', 'peltate'],\n 'peltation': ['peltation', 'potential'],\n 'pelter': ['pelter', 'petrel'],\n 'peltiform': ['leptiform', 'peltiform'],\n 'pelting': ['pelting', 'petling'],\n 'peltry': ['peltry', 'pertly'],\n 'pelu': ['lupe', 'pelu', 'peul', 'pule'],\n 'pelusios': ['epulosis', 'pelusios'],\n 'pelycography': ['pelycography', 'pyrgocephaly'],\n 'pemican': ['campine', 'pemican'],\n 'pen': ['nep', 'pen'],\n 'penal': ['alpen', 'nepal', 'panel', 'penal', 'plane'],\n 'penalist': ['panelist', 'pantelis', 'penalist', 'plastein'],\n 'penalty': ['aplenty', 'penalty'],\n 'penang': ['pangen', 'penang'],\n 'penates': ['penates', 'septane'],\n 'pencatite': ['pectinate', 'pencatite'],\n 'penciled': ['depencil', 'penciled', 'pendicle'],\n 'pencilry': ['pencilry', 'princely'],\n 'penda': ['paned', 'penda'],\n 'pendicle': ['depencil', 'penciled', 'pendicle'],\n 'pendulant': ['pendulant', 'unplanted'],\n 'pendular': ['pendular', 'underlap', 'uplander'],\n 'pendulate': ['pendulate', 'unpleated'],\n 'pendulation': ['pendulation', 'pennatuloid'],\n 'pendulum': ['pendulum', 'unlumped', 'unplumed'],\n 'penetrable': ['penetrable', 'repentable'],\n 'penetrance': ['penetrance', 'repentance'],\n 'penetrant': ['penetrant', 'repentant'],\n 'penial': ['alpine', 'nepali', 'penial', 'pineal'],\n 'penis': ['penis', 'snipe', 'spine'],\n 'penitencer': ['penitencer', 'pertinence'],\n 'penman': ['nepman', 'penman'],\n 'penna': ['panne', 'penna'],\n 'pennage': ['pangene', 'pennage'],\n 'pennate': ['pennate', 'pentane'],\n 'pennatulid': ['pennatulid', 'pinnulated'],\n 'pennatuloid': ['pendulation', 'pennatuloid'],\n 'pennia': ['nanpie', 'pennia', 'pinnae'],\n 'pennisetum': ['pennisetum', 'septennium'],\n 'pensioner': ['pensioner', 'repension'],\n 'pensive': ['pensive', 'vespine'],\n 'penster': ['penster', 'present', 'serpent', 'strepen'],\n 'penta': ['enapt', 'paten', 'penta', 'tapen'],\n 'pentace': ['pentace', 'tepanec'],\n 'pentacid': ['pedantic', 'pentacid'],\n 'pentad': ['pedant', 'pentad'],\n 'pentadecoic': ['adenectopic', 'pentadecoic'],\n 'pentail': ['pantile', 'pentail', 'platine', 'talpine'],\n 'pentamerid': ['pandermite', 'pentamerid'],\n 'pentameroid': ['pentameroid', 'predominate'],\n 'pentane': ['pennate', 'pentane'],\n 'pentaploid': ['deoppilant', 'pentaploid'],\n 'pentathionic': ['antiphonetic', 'pentathionic'],\n 'pentatomic': ['camptonite', 'pentatomic'],\n 'pentitol': ['pentitol', 'pointlet'],\n 'pentoic': ['entopic', 'nepotic', 'pentoic'],\n 'pentol': ['lepton', 'pentol'],\n 'pentose': ['pentose', 'posteen'],\n 'pentyl': ['pentyl', 'plenty'],\n 'penult': ['penult', 'punlet', 'puntel'],\n 'peon': ['nope', 'open', 'peon', 'pone'],\n 'peony': ['peony', 'poney'],\n 'peopler': ['peopler', 'popeler'],\n 'peorian': ['apeiron', 'peorian'],\n 'peplos': ['pelops', 'peplos'],\n 'peplum': ['peplum', 'pumple'],\n 'peplus': ['peplus', 'supple'],\n 'pepo': ['pepo', 'pope'],\n 'per': ['per', 'rep'],\n 'peracid': ['epacrid', 'peracid', 'preacid'],\n 'peract': ['carpet', 'peract', 'preact'],\n 'peracute': ['peracute', 'preacute'],\n 'peradventure': ['peradventure', 'preadventure'],\n 'perakim': ['perakim', 'permiak', 'rampike'],\n 'peramble': ['peramble', 'preamble'],\n 'perambulate': ['perambulate', 'preambulate'],\n 'perambulation': ['perambulation', 'preambulation'],\n 'perambulatory': ['perambulatory', 'preambulatory'],\n 'perates': ['perates', 'repaste', 'sperate'],\n 'perbend': ['perbend', 'prebend'],\n 'perborate': ['perborate', 'prorebate', 'reprobate'],\n 'perca': ['caper', 'crape', 'pacer', 'perca', 'recap'],\n 'percale': ['percale', 'replace'],\n 'percaline': ['percaline', 'periclean'],\n 'percent': ['percent', 'precent'],\n 'percept': ['percept', 'precept'],\n 'perception': ['perception', 'preception'],\n 'perceptionism': ['misperception', 'perceptionism'],\n 'perceptive': ['perceptive', 'preceptive'],\n 'perceptively': ['perceptively', 'preceptively'],\n 'perceptual': ['perceptual', 'preceptual'],\n 'perceptually': ['perceptually', 'preceptually'],\n 'percha': ['aperch', 'eparch', 'percha', 'preach'],\n 'perchloric': ['perchloric', 'prechloric'],\n 'percid': ['percid', 'priced'],\n 'perclose': ['perclose', 'preclose'],\n 'percoidea': ['adipocere', 'percoidea'],\n 'percolate': ['percolate', 'prelocate'],\n 'percolation': ['neotropical', 'percolation'],\n 'percompound': ['percompound', 'precompound'],\n 'percontation': ['percontation', 'pernoctation'],\n 'perculsion': ['perculsion', 'preclusion'],\n 'perculsive': ['perculsive', 'preclusive'],\n 'percurrent': ['percurrent', 'precurrent'],\n 'percursory': ['percursory', 'precursory'],\n 'percussion': ['croupiness', 'percussion', 'supersonic'],\n 'percussioner': ['percussioner', 'repercussion'],\n 'percussor': ['percussor', 'procuress'],\n 'percy': ['crepy', 'cypre', 'percy'],\n 'perdicine': ['perdicine', 'recipiend'],\n 'perdition': ['direption', 'perdition', 'tropidine'],\n 'perdu': ['drupe', 'duper', 'perdu', 'prude', 'pured'],\n 'peregrina': ['peregrina', 'pregainer'],\n 'pereion': ['pereion', 'pioneer'],\n 'perendure': ['perendure', 'underpeer'],\n 'peres': ['peres', 'perse', 'speer', 'spree'],\n 'perfect': ['perfect', 'prefect'],\n 'perfected': ['perfected', 'predefect'],\n 'perfection': ['frontpiece', 'perfection'],\n 'perfectly': ['perfectly', 'prefectly'],\n 'perfervid': ['perfervid', 'prefervid'],\n 'perfoliation': ['perfoliation', 'prefoliation'],\n 'perforative': ['perforative', 'prefavorite'],\n 'perform': ['perform', 'preform'],\n 'performant': ['performant', 'preformant'],\n 'performative': ['performative', 'preformative'],\n 'performer': ['performer', 'prereform', 'reperform'],\n 'pergamic': ['crimpage', 'pergamic'],\n 'perhaps': ['perhaps', 'prehaps'],\n 'perhazard': ['perhazard', 'prehazard'],\n 'peri': ['peri', 'pier', 'ripe'],\n 'periacinal': ['epicranial', 'periacinal'],\n 'perianal': ['airplane', 'perianal'],\n 'perianth': ['perianth', 'triphane'],\n 'periapt': ['periapt', 'rappite'],\n 'periaster': ['periaster', 'sparterie'],\n 'pericardiacophrenic': ['pericardiacophrenic', 'phrenicopericardiac'],\n 'pericardiopleural': ['pericardiopleural', 'pleuropericardial'],\n 'perichete': ['perichete', 'perithece'],\n 'periclase': ['episclera', 'periclase'],\n 'periclean': ['percaline', 'periclean'],\n 'pericles': ['eclipser', 'pericles', 'resplice'],\n 'pericopal': ['pericopal', 'periploca'],\n 'periculant': ['periculant', 'unprelatic'],\n 'peridental': ['interplead', 'peridental'],\n 'peridiastolic': ['peridiastolic', 'periodicalist', 'proidealistic'],\n 'peridot': ['diopter', 'peridot', 'proetid', 'protide', 'pteroid'],\n 'perigone': ['perigone', 'pigeoner'],\n 'peril': ['peril', 'piler', 'plier'],\n 'perilous': ['perilous', 'uropsile'],\n 'perimeter': ['perimeter', 'peritreme'],\n 'perine': ['neiper', 'perine', 'pirene', 'repine'],\n 'perineovaginal': ['perineovaginal', 'vaginoperineal'],\n 'periodate': ['periodate', 'proetidae', 'proteidae'],\n 'periodicalist': ['peridiastolic', 'periodicalist', 'proidealistic'],\n 'periodontal': ['deploration', 'periodontal'],\n 'periost': ['periost', 'porites', 'reposit', 'riposte'],\n 'periosteal': ['periosteal', 'praseolite'],\n 'periotic': ['epirotic', 'periotic'],\n 'peripatetic': ['peripatetic', 'precipitate'],\n 'peripatidae': ['peripatidae', 'peripatidea'],\n 'peripatidea': ['peripatidae', 'peripatidea'],\n 'periplaneta': ['periplaneta', 'prepalatine'],\n 'periploca': ['pericopal', 'periploca'],\n 'periplus': ['periplus', 'supplier'],\n 'periportal': ['periportal', 'peritropal'],\n 'periproct': ['cotripper', 'periproct'],\n 'peripterous': ['peripterous', 'prepositure'],\n 'perique': ['perique', 'repique'],\n 'perirectal': ['perirectal', 'prerecital'],\n 'periscian': ['periscian', 'precisian'],\n 'periscopal': ['periscopal', 'sapropelic'],\n 'perish': ['perish', 'reship'],\n 'perished': ['hesperid', 'perished'],\n 'perishment': ['perishment', 'reshipment'],\n 'perisomal': ['perisomal', 'semipolar'],\n 'perisome': ['perisome', 'promisee', 'reimpose'],\n 'perispome': ['perispome', 'preimpose'],\n 'peristole': ['epistoler', 'peristole', 'perseitol', 'pistoleer'],\n 'peristoma': ['epistroma', 'peristoma'],\n 'peristomal': ['peristomal', 'prestomial'],\n 'peristylos': ['peristylos', 'pterylosis'],\n 'perit': ['perit', 'retip', 'tripe'],\n 'perite': ['perite', 'petrie', 'pieter'],\n 'peritenon': ['interpone', 'peritenon', 'pinnotere', 'preintone'],\n 'perithece': ['perichete', 'perithece'],\n 'peritomize': ['epitomizer', 'peritomize'],\n 'peritomous': ['outpromise', 'peritomous'],\n 'peritreme': ['perimeter', 'peritreme'],\n 'peritrichous': ['courtiership', 'peritrichous'],\n 'peritroch': ['chiropter', 'peritroch'],\n 'peritropal': ['periportal', 'peritropal'],\n 'peritropous': ['peritropous', 'proprietous'],\n 'perkin': ['perkin', 'pinker'],\n 'perknite': ['perknite', 'peterkin'],\n 'perla': ['lepra', 'paler', 'parel', 'parle', 'pearl', 'perla', 'relap'],\n 'perle': ['leper', 'perle', 'repel'],\n 'perlection': ['perlection', 'prelection'],\n 'perlidae': ['pedalier', 'perlidae'],\n 'perlingual': ['perlingual', 'prelingual'],\n 'perlite': ['perlite', 'reptile'],\n 'perlitic': ['perlitic', 'triplice'],\n 'permeameter': ['amperemeter', 'permeameter'],\n 'permeance': ['permeance', 'premenace'],\n 'permeant': ['permeant', 'peterman'],\n 'permeation': ['permeation', 'preominate'],\n 'permiak': ['perakim', 'permiak', 'rampike'],\n 'permissibility': ['impressibility', 'permissibility'],\n 'permissible': ['impressible', 'permissible'],\n 'permissibleness': ['impressibleness', 'permissibleness'],\n 'permissibly': ['impressibly', 'permissibly'],\n 'permission': ['impression', 'permission'],\n 'permissive': ['impressive', 'permissive'],\n 'permissively': ['impressively', 'permissively'],\n 'permissiveness': ['impressiveness', 'permissiveness'],\n 'permitter': ['permitter', 'pretermit'],\n 'permixture': ['permixture', 'premixture'],\n 'permonosulphuric': ['monopersulphuric', 'permonosulphuric'],\n 'permutation': ['importunate', 'permutation'],\n 'pernasal': ['pernasal', 'prenasal'],\n 'pernis': ['pernis', 'respin', 'sniper'],\n 'pernoctation': ['percontation', 'pernoctation'],\n 'pernor': ['pernor', 'perron'],\n 'pernyi': ['pernyi', 'pinery'],\n 'peronial': ['pelorian', 'peronial', 'proalien'],\n 'peropus': ['peropus', 'purpose'],\n 'peroral': ['peroral', 'preoral'],\n 'perorally': ['perorally', 'preorally'],\n 'perorate': ['perorate', 'retepora'],\n 'perosmate': ['perosmate', 'sematrope'],\n 'perosmic': ['comprise', 'perosmic'],\n 'perotic': ['perotic', 'proteic', 'tropeic'],\n 'perpera': ['paperer', 'perpera', 'prepare', 'repaper'],\n 'perpetualist': ['perpetualist', 'pluriseptate'],\n 'perplexer': ['perplexer', 'reperplex'],\n 'perron': ['pernor', 'perron'],\n 'perry': ['perry', 'pryer'],\n 'persae': ['parsee', 'persae', 'persea', 'serape'],\n 'persalt': ['palster', 'persalt', 'plaster', 'psalter', 'spartle', 'stapler'],\n 'perscribe': ['perscribe', 'prescribe'],\n 'perse': ['peres', 'perse', 'speer', 'spree'],\n 'persea': ['parsee', 'persae', 'persea', 'serape'],\n 'perseid': ['perseid', 'preside'],\n 'perseitol': ['epistoler', 'peristole', 'perseitol', 'pistoleer'],\n 'perseity': ['perseity', 'speerity'],\n 'persian': ['persian', 'prasine', 'saprine'],\n 'persic': ['crepis', 'cripes', 'persic', 'precis', 'spicer'],\n 'persico': ['ceriops', 'persico'],\n 'persism': ['impress', 'persism', 'premiss'],\n 'persist': ['persist', 'spriest'],\n 'persistent': ['persistent', 'presentist', 'prettiness'],\n 'personalia': ['palaeornis', 'personalia'],\n 'personalistic': ['personalistic', 'pictorialness'],\n 'personate': ['esperanto', 'personate'],\n 'personed': ['personed', 'responde'],\n 'pert': ['pert', 'petr', 'terp'],\n 'pertain': ['painter', 'pertain', 'pterian', 'repaint'],\n 'perten': ['perten', 'repent'],\n 'perthite': ['perthite', 'tephrite'],\n 'perthitic': ['perthitic', 'tephritic'],\n 'pertinacity': ['antipyretic', 'pertinacity'],\n 'pertinence': ['penitencer', 'pertinence'],\n 'pertly': ['peltry', 'pertly'],\n 'perturbational': ['perturbational', 'protuberantial'],\n 'pertussal': ['pertussal', 'supersalt'],\n 'perty': ['perty', 'typer'],\n 'peru': ['peru', 'prue', 'pure'],\n 'perugian': ['pagurine', 'perugian'],\n 'peruke': ['keuper', 'peruke'],\n 'perula': ['epural', 'perula', 'pleura'],\n 'perun': ['perun', 'prune'],\n 'perusable': ['perusable', 'superable'],\n 'perusal': ['perusal', 'serpula'],\n 'peruse': ['peruse', 'respue'],\n 'pervade': ['deprave', 'pervade'],\n 'pervader': ['depraver', 'pervader'],\n 'pervadingly': ['depravingly', 'pervadingly'],\n 'perverse': ['perverse', 'preserve'],\n 'perversion': ['perversion', 'preversion'],\n 'pervious': ['pervious', 'previous', 'viperous'],\n 'perviously': ['perviously', 'previously', 'viperously'],\n 'perviousness': ['perviousness', 'previousness', 'viperousness'],\n 'pesa': ['apse', 'pesa', 'spae'],\n 'pesach': ['cephas', 'pesach'],\n 'pesah': ['heaps', 'pesah', 'phase', 'shape'],\n 'peseta': ['asteep', 'peseta'],\n 'peso': ['epos', 'peso', 'pose', 'sope'],\n 'pess': ['pess', 'seps'],\n 'pessoner': ['pessoner', 'response'],\n 'pest': ['pest', 'sept', 'spet', 'step'],\n 'peste': ['peste', 'steep'],\n 'pester': ['pester', 'preset', 'restep', 'streep'],\n 'pesthole': ['heelpost', 'pesthole'],\n 'pesticidal': ['pesticidal', 'septicidal'],\n 'pestiferous': ['pestiferous', 'septiferous'],\n 'pestle': ['pestle', 'spleet'],\n 'petal': ['leapt',\n           'palet',\n           'patel',\n           'pelta',\n           'petal',\n           'plate',\n           'pleat',\n           'tepal'],\n 'petalia': ['palaite', 'petalia', 'pileata'],\n 'petaline': ['petaline', 'tapeline'],\n 'petalism': ['petalism', 'septimal'],\n 'petalless': ['petalless', 'plateless', 'pleatless'],\n 'petallike': ['petallike', 'platelike'],\n 'petaloid': ['opdalite', 'petaloid'],\n 'petalon': ['lepanto', 'nepotal', 'petalon', 'polenta'],\n 'petard': ['depart', 'parted', 'petard'],\n 'petary': ['petary', 'pratey'],\n 'petasos': ['pastose', 'petasos'],\n 'petchary': ['patchery', 'petchary'],\n 'petechial': ['epithecal', 'petechial', 'phacelite'],\n 'petechiate': ['epithecate', 'petechiate'],\n 'peteman': ['peteman', 'tempean'],\n 'peter': ['erept', 'peter', 'petre'],\n 'peterkin': ['perknite', 'peterkin'],\n 'peterman': ['permeant', 'peterman'],\n 'petiolary': ['epilatory', 'petiolary'],\n 'petiole': ['petiole', 'pilotee'],\n 'petioled': ['lepidote', 'petioled'],\n 'petitionary': ['opiniatrety', 'petitionary'],\n 'petitioner': ['petitioner', 'repetition'],\n 'petiveria': ['aperitive', 'petiveria'],\n 'petling': ['pelting', 'petling'],\n 'peto': ['peto', 'poet', 'pote', 'tope'],\n 'petr': ['pert', 'petr', 'terp'],\n 'petre': ['erept', 'peter', 'petre'],\n 'petrea': ['petrea', 'repeat', 'retape'],\n 'petrean': ['patener', 'pearten', 'petrean', 'terpane'],\n 'petrel': ['pelter', 'petrel'],\n 'petricola': ['carpolite', 'petricola'],\n 'petrie': ['perite', 'petrie', 'pieter'],\n 'petrine': ['petrine', 'terpine'],\n 'petrochemical': ['cephalometric', 'petrochemical'],\n 'petrogale': ['petrogale', 'petrolage', 'prolegate'],\n 'petrographer': ['petrographer', 'pterographer'],\n 'petrographic': ['petrographic', 'pterographic'],\n 'petrographical': ['petrographical', 'pterographical'],\n 'petrographically': ['petrographically', 'pterylographical'],\n 'petrography': ['petrography', 'pterography', 'typographer'],\n 'petrol': ['petrol', 'replot'],\n 'petrolage': ['petrogale', 'petrolage', 'prolegate'],\n 'petrolean': ['petrolean', 'rantepole'],\n 'petrolic': ['petrolic', 'plerotic'],\n 'petrologically': ['petrologically', 'pterylological'],\n 'petrosa': ['esparto', 'petrosa', 'seaport'],\n 'petrosal': ['petrosal', 'polestar'],\n 'petrosquamosal': ['petrosquamosal', 'squamopetrosal'],\n 'petrous': ['petrous', 'posture', 'proetus', 'proteus', 'septuor', 'spouter'],\n 'petticoated': ['depetticoat', 'petticoated'],\n 'petulant': ['patulent', 'petulant'],\n 'petune': ['neetup', 'petune'],\n 'peul': ['lupe', 'pelu', 'peul', 'pule'],\n 'pewy': ['pewy', 'wype'],\n 'peyote': ['peyote', 'poteye'],\n 'peyotl': ['peyotl', 'poetly'],\n 'phacelia': ['acephali', 'phacelia'],\n 'phacelite': ['epithecal', 'petechial', 'phacelite'],\n 'phacoid': ['dapicho', 'phacoid'],\n 'phacolite': ['hopcalite', 'phacolite'],\n 'phacolysis': ['pachylosis', 'phacolysis'],\n 'phacometer': ['pachometer', 'phacometer'],\n 'phaethonic': ['phaethonic', 'theophanic'],\n 'phaeton': ['phaeton', 'phonate'],\n 'phagocytism': ['mycophagist', 'phagocytism'],\n 'phalaecian': ['acephalina', 'phalaecian'],\n 'phalangium': ['gnaphalium', 'phalangium'],\n 'phalera': ['phalera', 'raphael'],\n 'phanariot': ['parathion', 'phanariot'],\n 'phanerogam': ['anemograph', 'phanerogam'],\n 'phanerogamic': ['anemographic', 'phanerogamic'],\n 'phanerogamy': ['anemography', 'phanerogamy'],\n 'phanic': ['apinch', 'chapin', 'phanic'],\n 'phano': ['phano', 'pohna'],\n 'pharaonic': ['anaphoric', 'pharaonic'],\n 'pharaonical': ['anaphorical', 'pharaonical'],\n 'phare': ['hepar', 'phare', 'raphe'],\n 'pharian': ['pharian', 'piranha'],\n 'pharisaic': ['chirapsia', 'pharisaic'],\n 'pharisean': ['pharisean', 'seraphina'],\n 'pharisee': ['hesperia', 'pharisee'],\n 'phariseeism': ['hemiparesis', 'phariseeism'],\n 'pharmacolite': ['metaphorical', 'pharmacolite'],\n 'pharyngolaryngeal': ['laryngopharyngeal', 'pharyngolaryngeal'],\n 'pharyngolaryngitis': ['laryngopharyngitis', 'pharyngolaryngitis'],\n 'pharyngorhinitis': ['pharyngorhinitis', 'rhinopharyngitis'],\n 'phase': ['heaps', 'pesah', 'phase', 'shape'],\n 'phaseless': ['phaseless', 'shapeless'],\n 'phaseolin': ['esiphonal', 'phaseolin'],\n 'phasis': ['aspish', 'phasis'],\n 'phasm': ['pashm', 'phasm'],\n 'phasmid': ['dampish', 'madship', 'phasmid'],\n 'phasmoid': ['phasmoid', 'shopmaid'],\n 'pheal': ['aleph', 'pheal'],\n 'pheasant': ['pheasant', 'stephana'],\n 'phecda': ['chaped', 'phecda'],\n 'phemie': ['imphee', 'phemie'],\n 'phenacite': ['phenacite', 'phenicate'],\n 'phenate': ['haptene', 'heptane', 'phenate'],\n 'phenetole': ['phenetole', 'telephone'],\n 'phenic': ['phenic', 'pinche'],\n 'phenicate': ['phenacite', 'phenicate'],\n 'phenolic': ['phenolic', 'pinochle'],\n 'phenological': ['nephological', 'phenological'],\n 'phenologist': ['nephologist', 'phenologist'],\n 'phenology': ['nephology', 'phenology'],\n 'phenosal': ['alphonse', 'phenosal'],\n 'pheon': ['pheon', 'phone'],\n 'phi': ['hip', 'phi'],\n 'phialide': ['hepialid', 'phialide'],\n 'philobotanist': ['botanophilist', 'philobotanist'],\n 'philocynic': ['cynophilic', 'philocynic'],\n 'philohela': ['halophile', 'philohela'],\n 'philoneism': ['neophilism', 'philoneism'],\n 'philopoet': ['philopoet', 'photopile'],\n 'philotheist': ['philotheist', 'theophilist'],\n 'philotherian': ['lithonephria', 'philotherian'],\n 'philozoic': ['philozoic', 'zoophilic'],\n 'philozoist': ['philozoist', 'zoophilist'],\n 'philter': ['philter', 'thripel'],\n 'phineas': ['inphase', 'phineas'],\n 'phiroze': ['orphize', 'phiroze'],\n 'phit': ['phit', 'pith'],\n 'phlebometritis': ['metrophlebitis', 'phlebometritis'],\n 'phleum': ['phleum', 'uphelm'],\n 'phloretic': ['phloretic', 'plethoric'],\n 'pho': ['hop', 'pho', 'poh'],\n 'phobism': ['mobship', 'phobism'],\n 'phoca': ['chopa', 'phoca', 'poach'],\n 'phocaean': ['phocaean', 'phocaena'],\n 'phocaena': ['phocaean', 'phocaena'],\n 'phocaenine': ['phocaenine', 'phoenicean'],\n 'phocean': ['copehan', 'panoche', 'phocean'],\n 'phocian': ['aphonic', 'phocian'],\n 'phocine': ['chopine', 'phocine'],\n 'phoenicean': ['phocaenine', 'phoenicean'],\n 'pholad': ['adolph', 'pholad'],\n 'pholas': ['alphos', 'pholas'],\n 'pholcidae': ['cephaloid', 'pholcidae'],\n 'pholcoid': ['chilopod', 'pholcoid'],\n 'phonate': ['phaeton', 'phonate'],\n 'phone': ['pheon', 'phone'],\n 'phonelescope': ['nepheloscope', 'phonelescope'],\n 'phonetical': ['pachnolite', 'phonetical'],\n 'phonetics': ['phonetics', 'sphenotic'],\n 'phoniatry': ['phoniatry', 'thiopyran'],\n 'phonic': ['chopin', 'phonic'],\n 'phonogram': ['monograph', 'nomograph', 'phonogram'],\n 'phonogramic': ['gramophonic', 'monographic', 'nomographic', 'phonogramic'],\n 'phonogramically': ['gramophonically',\n                     'monographically',\n                     'nomographically',\n                     'phonogramically'],\n 'phonographic': ['graphophonic', 'phonographic'],\n 'phonolite': ['lithopone', 'phonolite'],\n 'phonometer': ['nephrotome', 'phonometer'],\n 'phonometry': ['nephrotomy', 'phonometry'],\n 'phonophote': ['phonophote', 'photophone'],\n 'phonotyper': ['hypopteron', 'phonotyper'],\n 'phoo': ['hoop', 'phoo', 'pooh'],\n 'phorone': ['orpheon', 'phorone'],\n 'phoronidea': ['phoronidea', 'radiophone'],\n 'phos': ['phos', 'posh', 'shop', 'soph'],\n 'phosphatide': ['diphosphate', 'phosphatide'],\n 'phosphoglycerate': ['glycerophosphate', 'phosphoglycerate'],\n 'phossy': ['hyssop', 'phossy', 'sposhy'],\n 'phot': ['phot', 'toph'],\n 'photechy': ['hypothec', 'photechy'],\n 'photochromography': ['chromophotography', 'photochromography'],\n 'photochromolithograph': ['chromophotolithograph', 'photochromolithograph'],\n 'photochronograph': ['chronophotograph', 'photochronograph'],\n 'photochronographic': ['chronophotographic', 'photochronographic'],\n 'photochronography': ['chronophotography', 'photochronography'],\n 'photogram': ['motograph', 'photogram'],\n 'photographer': ['photographer', 'rephotograph'],\n 'photoheliography': ['heliophotography', 'photoheliography'],\n 'photolithography': ['lithophotography', 'photolithography'],\n 'photomacrograph': ['macrophotograph', 'photomacrograph'],\n 'photometer': ['photometer', 'prototheme'],\n 'photomicrograph': ['microphotograph', 'photomicrograph'],\n 'photomicrographic': ['microphotographic', 'photomicrographic'],\n 'photomicrography': ['microphotography', 'photomicrography'],\n 'photomicroscope': ['microphotoscope', 'photomicroscope'],\n 'photophone': ['phonophote', 'photophone'],\n 'photopile': ['philopoet', 'photopile'],\n 'photostereograph': ['photostereograph', 'stereophotograph'],\n 'phototelegraph': ['phototelegraph', 'telephotograph'],\n 'phototelegraphic': ['phototelegraphic', 'telephotographic'],\n 'phototelegraphy': ['phototelegraphy', 'telephotography'],\n 'phototypography': ['phototypography', 'phytotopography'],\n 'phrase': ['phrase', 'seraph', 'shaper', 'sherpa'],\n 'phraser': ['phraser', 'sharper'],\n 'phrasing': ['harpings', 'phrasing'],\n 'phrasy': ['phrasy', 'sharpy'],\n 'phratriac': ['patriarch', 'phratriac'],\n 'phreatic': ['chapiter', 'phreatic'],\n 'phrenesia': ['hesperian', 'phrenesia', 'seraphine'],\n 'phrenic': ['nephric', 'phrenic', 'pincher'],\n 'phrenicopericardiac': ['pericardiacophrenic', 'phrenicopericardiac'],\n 'phrenics': ['phrenics', 'pinscher'],\n 'phrenitic': ['nephritic', 'phrenitic', 'prehnitic'],\n 'phrenitis': ['inspreith', 'nephritis', 'phrenitis'],\n 'phrenocardiac': ['nephrocardiac', 'phrenocardiac'],\n 'phrenocolic': ['nephrocolic', 'phrenocolic'],\n 'phrenocostal': ['phrenocostal', 'plastochrone'],\n 'phrenogastric': ['gastrophrenic', 'nephrogastric', 'phrenogastric'],\n 'phrenohepatic': ['hepatonephric', 'phrenohepatic'],\n 'phrenologist': ['nephrologist', 'phrenologist'],\n 'phrenology': ['nephrology', 'phrenology'],\n 'phrenopathic': ['nephropathic', 'phrenopathic'],\n 'phrenopathy': ['nephropathy', 'phrenopathy'],\n 'phrenosplenic': ['phrenosplenic', 'splenonephric', 'splenophrenic'],\n 'phronesis': ['nephrosis', 'phronesis'],\n 'phronimidae': ['diamorphine', 'phronimidae'],\n 'phthalazine': ['naphthalize', 'phthalazine'],\n 'phu': ['hup', 'phu'],\n 'phycitol': ['cytophil', 'phycitol'],\n 'phycocyanin': ['cyanophycin', 'phycocyanin'],\n 'phyla': ['haply', 'phyla'],\n 'phyletic': ['heptylic', 'phyletic'],\n 'phylloceras': ['hyposcleral', 'phylloceras'],\n 'phylloclad': ['cladophyll', 'phylloclad'],\n 'phyllodial': ['phyllodial', 'phylloidal'],\n 'phylloerythrin': ['erythrophyllin', 'phylloerythrin'],\n 'phylloidal': ['phyllodial', 'phylloidal'],\n 'phyllopodous': ['phyllopodous', 'podophyllous'],\n 'phyma': ['phyma', 'yamph'],\n 'phymatodes': ['desmopathy', 'phymatodes'],\n 'phymosia': ['hyposmia', 'phymosia'],\n 'physa': ['physa', 'shapy'],\n 'physalite': ['physalite', 'styphelia'],\n 'physic': ['physic', 'scyphi'],\n 'physicochemical': ['chemicophysical', 'physicochemical'],\n 'physicomedical': ['medicophysical', 'physicomedical'],\n 'physiocrat': ['physiocrat', 'psychotria'],\n 'physiologicoanatomic': ['anatomicophysiologic', 'physiologicoanatomic'],\n 'physiopsychological': ['physiopsychological', 'psychophysiological'],\n 'physiopsychology': ['physiopsychology', 'psychophysiology'],\n 'phytic': ['phytic', 'pitchy', 'pythic', 'typhic'],\n 'phytogenesis': ['phytogenesis', 'pythogenesis'],\n 'phytogenetic': ['phytogenetic', 'pythogenetic'],\n 'phytogenic': ['phytogenic', 'pythogenic', 'typhogenic'],\n 'phytogenous': ['phytogenous', 'pythogenous'],\n 'phytoid': ['phytoid', 'typhoid'],\n 'phytologist': ['hypoglottis', 'phytologist'],\n 'phytometer': ['phytometer', 'thermotype'],\n 'phytometric': ['phytometric', 'thermotypic'],\n 'phytometry': ['phytometry', 'thermotypy'],\n 'phytomonas': ['phytomonas', 'somnopathy'],\n 'phyton': ['phyton', 'python'],\n 'phytonic': ['hypnotic', 'phytonic', 'pythonic', 'typhonic'],\n 'phytosis': ['phytosis', 'typhosis'],\n 'phytotopography': ['phototypography', 'phytotopography'],\n 'phytozoa': ['phytozoa', 'zoopathy', 'zoophyta'],\n 'piacle': ['epical', 'piacle', 'plaice'],\n 'piacular': ['apicular', 'piacular'],\n 'pial': ['lipa', 'pail', 'pali', 'pial'],\n 'pialyn': ['alypin', 'pialyn'],\n 'pian': ['nipa', 'pain', 'pani', 'pian', 'pina'],\n 'pianiste': ['pianiste', 'pisanite'],\n 'piannet': ['piannet', 'pinnate'],\n 'pianola': ['opalina', 'pianola'],\n 'piaroa': ['aporia', 'piaroa'],\n 'piast': ['piast', 'stipa', 'tapis'],\n 'piaster': ['piaster', 'piastre', 'raspite', 'spirate', 'traipse'],\n 'piastre': ['piaster', 'piastre', 'raspite', 'spirate', 'traipse'],\n 'picador': ['parodic', 'picador'],\n 'picae': ['picae', 'picea'],\n 'pical': ['pical', 'plica'],\n 'picard': ['caprid', 'carpid', 'picard'],\n 'picarel': ['caliper', 'picarel', 'replica'],\n 'picary': ['cypria', 'picary', 'piracy'],\n 'pice': ['epic', 'pice'],\n 'picea': ['picae', 'picea'],\n 'picene': ['picene', 'piecen'],\n 'picker': ['picker', 'repick'],\n 'pickle': ['pelick', 'pickle'],\n 'pickler': ['pickler', 'prickle'],\n 'pickover': ['overpick', 'pickover'],\n 'picktooth': ['picktooth', 'toothpick'],\n 'pico': ['cipo', 'pico'],\n 'picot': ['optic', 'picot', 'topic'],\n 'picotah': ['aphotic', 'picotah'],\n 'picra': ['capri', 'picra', 'rapic'],\n 'picrate': ['paretic', 'patrice', 'picrate'],\n 'pictography': ['graphotypic', 'pictography', 'typographic'],\n 'pictorialness': ['personalistic', 'pictorialness'],\n 'picture': ['cuprite', 'picture'],\n 'picudilla': ['picudilla', 'pulicidal'],\n 'pidan': ['pidan', 'pinda'],\n 'piebald': ['bipedal', 'piebald'],\n 'piebaldness': ['dispensable', 'piebaldness'],\n 'piecen': ['picene', 'piecen'],\n 'piecer': ['piecer', 'pierce', 'recipe'],\n 'piecework': ['piecework', 'workpiece'],\n 'piecrust': ['crepitus', 'piecrust'],\n 'piedness': ['dispense', 'piedness'],\n 'piegan': ['genipa', 'piegan'],\n 'pieless': ['pelisse', 'pieless'],\n 'pielet': ['leepit', 'pelite', 'pielet'],\n 'piemag': ['magpie', 'piemag'],\n 'pieman': ['impane', 'pieman'],\n 'pien': ['pien', 'pine'],\n 'piend': ['piend', 'pined'],\n 'pier': ['peri', 'pier', 'ripe'],\n 'pierce': ['piecer', 'pierce', 'recipe'],\n 'piercent': ['piercent', 'prentice'],\n 'piercer': ['piercer', 'reprice'],\n 'pierlike': ['pierlike', 'ripelike'],\n 'piet': ['piet', 'tipe'],\n 'pietas': ['patesi', 'pietas'],\n 'pieter': ['perite', 'petrie', 'pieter'],\n 'pig': ['gip', 'pig'],\n 'pigeoner': ['perigone', 'pigeoner'],\n 'pigeontail': ['pigeontail', 'plagionite'],\n 'pigly': ['gilpy', 'pigly'],\n 'pignon': ['ningpo', 'pignon'],\n 'pignorate': ['operating', 'pignorate'],\n 'pigskin': ['pigskin', 'spiking'],\n 'pigsney': ['gypsine', 'pigsney'],\n 'pik': ['kip', 'pik'],\n 'pika': ['paik', 'pika'],\n 'pike': ['kepi', 'kipe', 'pike'],\n 'pikel': ['pikel', 'pikle'],\n 'piker': ['krepi', 'piker'],\n 'pikle': ['pikel', 'pikle'],\n 'pilage': ['paigle', 'pilage'],\n 'pilar': ['april', 'pilar', 'ripal'],\n 'pilaster': ['epistlar', 'pilaster', 'plaister', 'priestal'],\n 'pilastered': ['pedestrial', 'pilastered'],\n 'pilastric': ['pilastric', 'triplasic'],\n 'pilate': ['aplite', 'pilate'],\n 'pileata': ['palaite', 'petalia', 'pileata'],\n 'pileate': ['epilate', 'epitela', 'pileate'],\n 'pileated': ['depilate', 'leptidae', 'pileated'],\n 'piled': ['piled', 'plied'],\n 'piler': ['peril', 'piler', 'plier'],\n 'piles': ['piles', 'plies', 'slipe', 'spiel', 'spile'],\n 'pileus': ['epulis', 'pileus'],\n 'pili': ['ipil', 'pili'],\n 'pilin': ['lipin', 'pilin'],\n 'pillarist': ['pillarist', 'pistillar'],\n 'pillet': ['liplet', 'pillet'],\n 'pilm': ['limp', 'pilm', 'plim'],\n 'pilmy': ['imply', 'limpy', 'pilmy'],\n 'pilosis': ['liposis', 'pilosis'],\n 'pilotee': ['petiole', 'pilotee'],\n 'pilpai': ['lippia', 'pilpai'],\n 'pilus': ['lupis', 'pilus'],\n 'pim': ['imp', 'pim'],\n 'pimelate': ['ampelite', 'pimelate'],\n 'pimento': ['emption', 'pimento'],\n 'pimenton': ['imponent', 'pimenton'],\n 'pimola': ['lipoma', 'pimola', 'ploima'],\n 'pimpish': ['impship', 'pimpish'],\n 'pimplous': ['pimplous', 'pompilus', 'populism'],\n 'pin': ['nip', 'pin'],\n 'pina': ['nipa', 'pain', 'pani', 'pian', 'pina'],\n 'pinaces': ['pinaces', 'pincase'],\n 'pinachrome': ['epharmonic', 'pinachrome'],\n 'pinacle': ['calepin', 'capelin', 'panicle', 'pelican', 'pinacle'],\n 'pinacoid': ['diapnoic', 'pinacoid'],\n 'pinal': ['lipan', 'pinal', 'plain'],\n 'pinales': ['espinal', 'pinales', 'spaniel'],\n 'pinaster': ['pinaster', 'pristane'],\n 'pincase': ['pinaces', 'pincase'],\n 'pincer': ['pincer', 'prince'],\n 'pincerlike': ['pincerlike', 'princelike'],\n 'pincers': ['encrisp', 'pincers'],\n 'pinchbelly': ['bellypinch', 'pinchbelly'],\n 'pinche': ['phenic', 'pinche'],\n 'pincher': ['nephric', 'phrenic', 'pincher'],\n 'pincushion': ['nuncioship', 'pincushion'],\n 'pinda': ['pidan', 'pinda'],\n 'pindari': ['pindari', 'pridian'],\n 'pine': ['pien', 'pine'],\n 'pineal': ['alpine', 'nepali', 'penial', 'pineal'],\n 'pined': ['piend', 'pined'],\n 'piner': ['piner', 'prine', 'repin', 'ripen'],\n 'pinery': ['pernyi', 'pinery'],\n 'pingler': ['pingler', 'pringle'],\n 'pinhold': ['dolphin', 'pinhold'],\n 'pinhole': ['lophine', 'pinhole'],\n 'pinite': ['pinite', 'tiepin'],\n 'pinker': ['perkin', 'pinker'],\n 'pinking': ['kingpin', 'pinking'],\n 'pinkish': ['kinship', 'pinkish'],\n 'pinlock': ['lockpin', 'pinlock'],\n 'pinnacle': ['pannicle', 'pinnacle'],\n 'pinnae': ['nanpie', 'pennia', 'pinnae'],\n 'pinnate': ['piannet', 'pinnate'],\n 'pinnatopectinate': ['pectinatopinnate', 'pinnatopectinate'],\n 'pinnet': ['pinnet', 'tenpin'],\n 'pinnitarsal': ['intraspinal', 'pinnitarsal'],\n 'pinnotere': ['interpone', 'peritenon', 'pinnotere', 'preintone'],\n 'pinnothere': ['interphone', 'pinnothere'],\n 'pinnula': ['pinnula', 'unplain'],\n 'pinnulated': ['pennatulid', 'pinnulated'],\n 'pinochle': ['phenolic', 'pinochle'],\n 'pinole': ['pinole', 'pleion'],\n 'pinolia': ['apiolin', 'pinolia'],\n 'pinscher': ['phrenics', 'pinscher'],\n 'pinta': ['inapt', 'paint', 'pinta'],\n 'pintail': ['pintail', 'tailpin'],\n 'pintano': ['opinant', 'pintano'],\n 'pinte': ['inept', 'pinte'],\n 'pinto': ['pinto', 'point'],\n 'pintura': ['pintura', 'puritan', 'uptrain'],\n 'pinulus': ['lupinus', 'pinulus'],\n 'piny': ['piny', 'pyin'],\n 'pinyl': ['pinyl', 'pliny'],\n 'pioneer': ['pereion', 'pioneer'],\n 'pioted': ['pioted', 'podite'],\n 'pipa': ['paip', 'pipa'],\n 'pipal': ['palpi', 'pipal'],\n 'piperno': ['piperno', 'propine'],\n 'pique': ['equip', 'pique'],\n 'pir': ['pir', 'rip'],\n 'piracy': ['cypria', 'picary', 'piracy'],\n 'piranha': ['pharian', 'piranha'],\n 'piratess': ['piratess', 'serapist', 'tarsipes'],\n 'piratically': ['capillarity', 'piratically'],\n 'piraty': ['parity', 'piraty'],\n 'pirene': ['neiper', 'perine', 'pirene', 'repine'],\n 'pirssonite': ['pirssonite', 'trispinose'],\n 'pisaca': ['capias', 'pisaca'],\n 'pisan': ['pisan', 'sapin', 'spina'],\n 'pisanite': ['pianiste', 'pisanite'],\n 'piscation': ['panoistic', 'piscation'],\n 'piscatorial': ['paracolitis', 'piscatorial'],\n 'piscian': ['panisic', 'piscian', 'piscina', 'sinapic'],\n 'pisciferous': ['pisciferous', 'spiciferous'],\n 'pisciform': ['pisciform', 'spiciform'],\n 'piscina': ['panisic', 'piscian', 'piscina', 'sinapic'],\n 'pisco': ['copis', 'pisco'],\n 'pise': ['pise', 'sipe'],\n 'pish': ['pish', 'ship'],\n 'pisk': ['pisk', 'skip'],\n 'pisky': ['pisky', 'spiky'],\n 'pismire': ['pismire', 'primsie'],\n 'pisonia': ['pisonia', 'sinopia'],\n 'pist': ['pist', 'spit'],\n 'pistache': ['paschite', 'pastiche', 'pistache', 'scaphite'],\n 'pistacite': ['epistatic', 'pistacite'],\n 'pistareen': ['pistareen', 'sparteine'],\n 'pistillar': ['pillarist', 'pistillar'],\n 'pistillary': ['pistillary', 'spiritally'],\n 'pistle': ['pistle', 'stipel'],\n 'pistol': ['pistol', 'postil', 'spoilt'],\n 'pistoleer': ['epistoler', 'peristole', 'perseitol', 'pistoleer'],\n 'pit': ['pit', 'tip'],\n 'pita': ['atip', 'pita'],\n 'pitapat': ['apitpat', 'pitapat'],\n 'pitarah': ['pitarah', 'taphria'],\n 'pitcher': ['pitcher', 'repitch'],\n 'pitchout': ['outpitch', 'pitchout'],\n 'pitchy': ['phytic', 'pitchy', 'pythic', 'typhic'],\n 'pith': ['phit', 'pith'],\n 'pithecan': ['haptenic', 'pantheic', 'pithecan'],\n 'pithole': ['hoplite', 'pithole'],\n 'pithsome': ['mephisto', 'pithsome'],\n 'pitless': ['pitless', 'tipless'],\n 'pitman': ['pitman', 'tampin', 'tipman'],\n 'pittancer': ['crepitant', 'pittancer'],\n 'pittoid': ['pittoid', 'poditti'],\n 'pityroid': ['pityroid', 'pyritoid'],\n 'pivoter': ['overtip', 'pivoter'],\n 'placate': ['epactal', 'placate'],\n 'placation': ['pactional', 'pactolian', 'placation'],\n 'place': ['capel', 'place'],\n 'placebo': ['copable', 'placebo'],\n 'placentalia': ['analeptical', 'placentalia'],\n 'placentoma': ['complanate', 'placentoma'],\n 'placer': ['carpel', 'parcel', 'placer'],\n 'placode': ['lacepod', 'pedocal', 'placode'],\n 'placoid': ['placoid', 'podalic', 'podical'],\n 'placus': ['cuspal', 'placus'],\n 'plagionite': ['pigeontail', 'plagionite'],\n 'plague': ['plague', 'upgale'],\n 'plaguer': ['earplug', 'graupel', 'plaguer'],\n 'plaice': ['epical', 'piacle', 'plaice'],\n 'plaid': ['alpid', 'plaid'],\n 'plaidy': ['adipyl', 'plaidy'],\n 'plain': ['lipan', 'pinal', 'plain'],\n 'plainer': ['pearlin', 'plainer', 'praline'],\n 'plaint': ['plaint', 'pliant'],\n 'plaister': ['epistlar', 'pilaster', 'plaister', 'priestal'],\n 'plaited': ['plaited', 'taliped'],\n 'plaiter': ['partile', 'plaiter', 'replait'],\n 'planate': ['planate', 'planeta', 'plantae', 'platane'],\n 'planation': ['planation', 'platonian'],\n 'plancheite': ['elephantic', 'plancheite'],\n 'plane': ['alpen', 'nepal', 'panel', 'penal', 'plane'],\n 'planer': ['parnel', 'planer', 'replan'],\n 'planera': ['planera', 'preanal'],\n 'planet': ['pantle', 'planet', 'platen'],\n 'planeta': ['planate', 'planeta', 'plantae', 'platane'],\n 'planetabler': ['planetabler', 'replantable'],\n 'planetaria': ['parentalia', 'planetaria'],\n 'planetoid': ['pelidnota', 'planetoid'],\n 'planity': ['inaptly', 'planity', 'ptyalin'],\n 'planker': ['planker', 'prankle'],\n 'planta': ['planta', 'platan'],\n 'plantae': ['planate', 'planeta', 'plantae', 'platane'],\n 'planter': ['pantler', 'planter', 'replant'],\n 'plap': ['lapp', 'palp', 'plap'],\n 'plasher': ['plasher', 'spheral'],\n 'plasm': ['plasm', 'psalm', 'slamp'],\n 'plasma': ['lampas', 'plasma'],\n 'plasmation': ['aminoplast', 'plasmation'],\n 'plasmic': ['plasmic', 'psalmic'],\n 'plasmode': ['malposed', 'plasmode'],\n 'plasmodial': ['plasmodial', 'psalmodial'],\n 'plasmodic': ['plasmodic', 'psalmodic'],\n 'plasson': ['plasson', 'sponsal'],\n 'plastein': ['panelist', 'pantelis', 'penalist', 'plastein'],\n 'plaster': ['palster', 'persalt', 'plaster', 'psalter', 'spartle', 'stapler'],\n 'plasterer': ['plasterer', 'replaster'],\n 'plastery': ['plastery', 'psaltery'],\n 'plasticine': ['cisplatine', 'plasticine'],\n 'plastidome': ['plastidome', 'postmedial'],\n 'plastinoid': ['palinodist', 'plastinoid'],\n 'plastochrone': ['phrenocostal', 'plastochrone'],\n 'plat': ['palt', 'plat'],\n 'plataean': ['panatela', 'plataean'],\n 'platan': ['planta', 'platan'],\n 'platane': ['planate', 'planeta', 'plantae', 'platane'],\n 'plate': ['leapt',\n           'palet',\n           'patel',\n           'pelta',\n           'petal',\n           'plate',\n           'pleat',\n           'tepal'],\n 'platea': ['aletap', 'palate', 'platea'],\n 'plateless': ['petalless', 'plateless', 'pleatless'],\n 'platelet': ['pallette', 'platelet'],\n 'platelike': ['petallike', 'platelike'],\n 'platen': ['pantle', 'planet', 'platen'],\n 'plater': ['palter', 'plater'],\n 'platerer': ['palterer', 'platerer'],\n 'platery': ['apertly', 'peartly', 'platery', 'pteryla', 'taperly'],\n 'platine': ['pantile', 'pentail', 'platine', 'talpine'],\n 'platinochloric': ['chloroplatinic', 'platinochloric'],\n 'platinous': ['platinous', 'pulsation'],\n 'platode': ['platode', 'tadpole'],\n 'platoid': ['platoid', 'talpoid'],\n 'platonian': ['planation', 'platonian'],\n 'platter': ['partlet', 'platter', 'prattle'],\n 'platy': ['aptly', 'patly', 'platy', 'typal'],\n 'platynite': ['patiently', 'platynite'],\n 'platysternal': ['platysternal', 'transeptally'],\n 'plaud': ['dupla', 'plaud'],\n 'plaustral': ['palustral', 'plaustral'],\n 'play': ['paly', 'play', 'pyal', 'pyla'],\n 'playa': ['palay', 'playa'],\n 'player': ['parley', 'pearly', 'player', 'replay'],\n 'playgoer': ['playgoer', 'pylagore'],\n 'playroom': ['myopolar', 'playroom'],\n 'plea': ['leap', 'lepa', 'pale', 'peal', 'plea'],\n 'pleach': ['chapel', 'lepcha', 'pleach'],\n 'plead': ['padle', 'paled', 'pedal', 'plead'],\n 'pleader': ['pearled', 'pedaler', 'pleader', 'replead'],\n 'please': ['asleep', 'elapse', 'please'],\n 'pleaser': ['pleaser', 'preseal', 'relapse'],\n 'pleasure': ['pleasure', 'serpulae'],\n 'pleasurer': ['pleasurer', 'reperusal'],\n 'pleasurous': ['asperulous', 'pleasurous'],\n 'pleat': ['leapt',\n           'palet',\n           'patel',\n           'pelta',\n           'petal',\n           'plate',\n           'pleat',\n           'tepal'],\n 'pleater': ['pearlet', 'pleater', 'prelate', 'ptereal', 'replate', 'repleat'],\n 'pleatless': ['petalless', 'plateless', 'pleatless'],\n 'plectre': ['plectre', 'prelect'],\n 'pleion': ['pinole', 'pleion'],\n 'pleionian': ['opalinine', 'pleionian'],\n 'plenilunar': ['plenilunar', 'plurennial'],\n 'plenty': ['pentyl', 'plenty'],\n 'pleomorph': ['pleomorph', 'prophloem'],\n 'pleon': ['pelon', 'pleon'],\n 'pleonal': ['pallone', 'pleonal'],\n 'pleonasm': ['neoplasm', 'pleonasm', 'polesman', 'splenoma'],\n 'pleonast': ['lapstone', 'pleonast'],\n 'pleonastic': ['neoplastic', 'pleonastic'],\n 'pleroma': ['leproma', 'palermo', 'pleroma', 'polearm'],\n 'plerosis': ['leprosis', 'plerosis'],\n 'plerotic': ['petrolic', 'plerotic'],\n 'plessor': ['plessor', 'preloss'],\n 'plethora': ['plethora', 'traphole'],\n 'plethoric': ['phloretic', 'plethoric'],\n 'pleura': ['epural', 'perula', 'pleura'],\n 'pleuric': ['luperci', 'pleuric'],\n 'pleuropericardial': ['pericardiopleural', 'pleuropericardial'],\n 'pleurotoma': ['pleurotoma', 'tropaeolum'],\n 'pleurovisceral': ['pleurovisceral', 'visceropleural'],\n 'pliancy': ['pliancy', 'pycnial'],\n 'pliant': ['plaint', 'pliant'],\n 'plica': ['pical', 'plica'],\n 'plicately': ['callitype', 'plicately'],\n 'plicater': ['particle', 'plicater', 'prelatic'],\n 'plicator': ['plicator', 'tropical'],\n 'plied': ['piled', 'plied'],\n 'plier': ['peril', 'piler', 'plier'],\n 'pliers': ['lisper', 'pliers', 'sirple', 'spiler'],\n 'plies': ['piles', 'plies', 'slipe', 'spiel', 'spile'],\n 'plighter': ['plighter', 'replight'],\n 'plim': ['limp', 'pilm', 'plim'],\n 'pliny': ['pinyl', 'pliny'],\n 'pliosaur': ['liparous', 'pliosaur'],\n 'pliosauridae': ['lepidosauria', 'pliosauridae'],\n 'ploceidae': ['adipocele', 'cepolidae', 'ploceidae'],\n 'ploceus': ['culpose', 'ploceus', 'upclose'],\n 'plodder': ['plodder', 'proddle'],\n 'ploima': ['lipoma', 'pimola', 'ploima'],\n 'ploration': ['ploration', 'portional', 'prolation'],\n 'plot': ['plot', 'polt'],\n 'plotful': ['plotful', 'topfull'],\n 'plotted': ['plotted', 'pottled'],\n 'plotter': ['plotter', 'portlet'],\n 'plousiocracy': ['plousiocracy', 'procaciously'],\n 'plout': ['plout', 'pluto', 'poult'],\n 'plouter': ['plouter', 'poulter'],\n 'plovery': ['overply', 'plovery'],\n 'plower': ['plower', 'replow'],\n 'ploy': ['ploy', 'poly'],\n 'plucker': ['plucker', 'puckrel'],\n 'plug': ['gulp', 'plug'],\n 'plum': ['lump', 'plum'],\n 'pluma': ['ampul', 'pluma'],\n 'plumbagine': ['impugnable', 'plumbagine'],\n 'plumbic': ['plumbic', 'upclimb'],\n 'plumed': ['dumple', 'plumed'],\n 'plumeous': ['eumolpus', 'plumeous'],\n 'plumer': ['lumper', 'plumer', 'replum', 'rumple'],\n 'plumet': ['lumpet', 'plumet'],\n 'pluminess': ['lumpiness', 'pluminess'],\n 'plumy': ['lumpy', 'plumy'],\n 'plunderer': ['plunderer', 'replunder'],\n 'plunge': ['plunge', 'pungle'],\n 'plup': ['plup', 'pulp'],\n 'plurennial': ['plenilunar', 'plurennial'],\n 'pluriseptate': ['perpetualist', 'pluriseptate'],\n 'plutean': ['plutean', 'unpetal', 'unpleat'],\n 'pluteus': ['pluteus', 'pustule'],\n 'pluto': ['plout', 'pluto', 'poult'],\n 'pluvine': ['pluvine', 'vulpine'],\n 'plyer': ['plyer', 'reply'],\n 'pneumatophony': ['pneumatophony', 'pneumonopathy'],\n 'pneumohemothorax': ['hemopneumothorax', 'pneumohemothorax'],\n 'pneumohydropericardium': ['hydropneumopericardium', 'pneumohydropericardium'],\n 'pneumohydrothorax': ['hydropneumothorax', 'pneumohydrothorax'],\n 'pneumonopathy': ['pneumatophony', 'pneumonopathy'],\n 'pneumopyothorax': ['pneumopyothorax', 'pyopneumothorax'],\n 'poach': ['chopa', 'phoca', 'poach'],\n 'poachy': ['poachy', 'pochay'],\n 'poales': ['aslope', 'poales'],\n 'pob': ['bop', 'pob'],\n 'pochay': ['poachy', 'pochay'],\n 'poche': ['epoch', 'poche'],\n 'pocketer': ['pocketer', 'repocket'],\n 'poco': ['coop', 'poco'],\n 'pocosin': ['opsonic', 'pocosin'],\n 'poculation': ['copulation', 'poculation'],\n 'pod': ['dop', 'pod'],\n 'podalic': ['placoid', 'podalic', 'podical'],\n 'podarthritis': ['podarthritis', 'traditorship'],\n 'podial': ['podial', 'poliad'],\n 'podical': ['placoid', 'podalic', 'podical'],\n 'podiceps': ['podiceps', 'scopiped'],\n 'podite': ['pioted', 'podite'],\n 'poditti': ['pittoid', 'poditti'],\n 'podler': ['podler', 'polder', 'replod'],\n 'podley': ['deploy', 'podley'],\n 'podobranchia': ['branchiopoda', 'podobranchia'],\n 'podocephalous': ['cephalopodous', 'podocephalous'],\n 'podophyllous': ['phyllopodous', 'podophyllous'],\n 'podoscaph': ['podoscaph', 'scaphopod'],\n 'podostomata': ['podostomata', 'stomatopoda'],\n 'podostomatous': ['podostomatous', 'stomatopodous'],\n 'podotheca': ['chaetopod', 'podotheca'],\n 'podura': ['podura', 'uproad'],\n 'poduran': ['pandour', 'poduran'],\n 'poe': ['ope', 'poe'],\n 'poem': ['mope', 'poem', 'pome'],\n 'poemet': ['metope', 'poemet'],\n 'poemlet': ['leptome', 'poemlet'],\n 'poesy': ['poesy', 'posey', 'sepoy'],\n 'poet': ['peto', 'poet', 'pote', 'tope'],\n 'poetastrical': ['poetastrical', 'spectatorial'],\n 'poetical': ['copalite', 'poetical'],\n 'poeticism': ['impeticos', 'poeticism'],\n 'poetics': ['poetics', 'septoic'],\n 'poetly': ['peyotl', 'poetly'],\n 'poetryless': ['poetryless', 'presystole'],\n 'pogo': ['goop', 'pogo'],\n 'poh': ['hop', 'pho', 'poh'],\n 'poha': ['opah', 'paho', 'poha'],\n 'pohna': ['phano', 'pohna'],\n 'poiana': ['anopia', 'aponia', 'poiana'],\n 'poietic': ['epiotic', 'poietic'],\n 'poimenic': ['mincopie', 'poimenic'],\n 'poinder': ['poinder', 'ponerid'],\n 'point': ['pinto', 'point'],\n 'pointel': ['pointel', 'pontile', 'topline'],\n 'pointer': ['pointer', 'protein', 'pterion', 'repoint', 'tropine'],\n 'pointlet': ['pentitol', 'pointlet'],\n 'pointrel': ['pointrel', 'terpinol'],\n 'poisonless': ['poisonless', 'solenopsis'],\n 'poker': ['poker', 'proke'],\n 'pol': ['lop', 'pol'],\n 'polab': ['pablo', 'polab'],\n 'polacre': ['capreol', 'polacre'],\n 'polander': ['polander', 'ponderal', 'prenodal'],\n 'polar': ['parol', 'polar', 'poral', 'proal'],\n 'polarid': ['dipolar', 'polarid'],\n 'polarimetry': ['polarimetry', 'premorality', 'temporarily'],\n 'polaristic': ['polaristic', 'poristical', 'saprolitic'],\n 'polarly': ['payroll', 'polarly'],\n 'polder': ['podler', 'polder', 'replod'],\n 'pole': ['lope', 'olpe', 'pole'],\n 'polearm': ['leproma', 'palermo', 'pleroma', 'polearm'],\n 'polecat': ['pacolet', 'polecat'],\n 'polemic': ['compile', 'polemic'],\n 'polemics': ['clipsome', 'polemics'],\n 'polemist': ['milepost', 'polemist'],\n 'polenta': ['lepanto', 'nepotal', 'petalon', 'polenta'],\n 'poler': ['loper', 'poler'],\n 'polesman': ['neoplasm', 'pleonasm', 'polesman', 'splenoma'],\n 'polestar': ['petrosal', 'polestar'],\n 'poliad': ['podial', 'poliad'],\n 'polianite': ['epilation', 'polianite'],\n 'policyholder': ['policyholder', 'polychloride'],\n 'polio': ['polio', 'pooli'],\n 'polis': ['polis', 'spoil'],\n 'polished': ['depolish', 'polished'],\n 'polisher': ['polisher', 'repolish'],\n 'polistes': ['polistes', 'telopsis'],\n 'politarch': ['carpolith', 'politarch', 'trophical'],\n 'politicly': ['lipolytic', 'politicly'],\n 'politics': ['colpitis', 'politics', 'psilotic'],\n 'polk': ['klop', 'polk'],\n 'pollenite': ['pellotine', 'pollenite'],\n 'poller': ['poller', 'repoll'],\n 'pollinate': ['pellation', 'pollinate'],\n 'polo': ['loop', 'polo', 'pool'],\n 'poloist': ['loopist', 'poloist', 'topsoil'],\n 'polonia': ['apionol', 'polonia'],\n 'polos': ['polos', 'sloop', 'spool'],\n 'polt': ['plot', 'polt'],\n 'poly': ['ploy', 'poly'],\n 'polyacid': ['polyacid', 'polyadic'],\n 'polyactinal': ['pactionally', 'polyactinal'],\n 'polyadic': ['polyacid', 'polyadic'],\n 'polyarchist': ['chiroplasty', 'polyarchist'],\n 'polychloride': ['policyholder', 'polychloride'],\n 'polychroism': ['polychroism', 'polyorchism'],\n 'polycitral': ['polycitral', 'tropically'],\n 'polycodium': ['lycopodium', 'polycodium'],\n 'polycotyl': ['collotypy', 'polycotyl'],\n 'polyeidic': ['polyeidic', 'polyideic'],\n 'polyeidism': ['polyeidism', 'polyideism'],\n 'polyester': ['polyester', 'proselyte'],\n 'polygamodioecious': ['dioeciopolygamous', 'polygamodioecious'],\n 'polyhalite': ['paleolithy', 'polyhalite', 'polythelia'],\n 'polyideic': ['polyeidic', 'polyideic'],\n 'polyideism': ['polyeidism', 'polyideism'],\n 'polymastic': ['myoplastic', 'polymastic'],\n 'polymasty': ['myoplasty', 'polymasty'],\n 'polymere': ['employer', 'polymere'],\n 'polymeric': ['micropyle', 'polymeric'],\n 'polymetochia': ['homeotypical', 'polymetochia'],\n 'polymnia': ['olympian', 'polymnia'],\n 'polymyodi': ['polymyodi', 'polymyoid'],\n 'polymyoid': ['polymyodi', 'polymyoid'],\n 'polyorchism': ['polychroism', 'polyorchism'],\n 'polyp': ['loppy', 'polyp'],\n 'polyphemian': ['lymphopenia', 'polyphemian'],\n 'polyphonist': ['polyphonist', 'psilophyton'],\n 'polypite': ['lipotype', 'polypite'],\n 'polyprene': ['polyprene', 'propylene'],\n 'polypterus': ['polypterus', 'suppletory'],\n 'polysomitic': ['myocolpitis', 'polysomitic'],\n 'polyspore': ['polyspore', 'prosopyle'],\n 'polythelia': ['paleolithy', 'polyhalite', 'polythelia'],\n 'polythene': ['polythene', 'telephony'],\n 'polyuric': ['croupily', 'polyuric'],\n 'pom': ['mop', 'pom'],\n 'pomade': ['apedom', 'pomade'],\n 'pomane': ['mopane', 'pomane'],\n 'pome': ['mope', 'poem', 'pome'],\n 'pomeranian': ['pomeranian', 'praenomina'],\n 'pomerium': ['emporium', 'pomerium', 'proemium'],\n 'pomey': ['myope', 'pomey'],\n 'pomo': ['moop', 'pomo'],\n 'pomonal': ['lampoon', 'pomonal'],\n 'pompilus': ['pimplous', 'pompilus', 'populism'],\n 'pomster': ['pomster', 'stomper'],\n 'ponca': ['capon', 'ponca'],\n 'ponce': ['copen', 'ponce'],\n 'ponchoed': ['chenopod', 'ponchoed'],\n 'poncirus': ['coprinus', 'poncirus'],\n 'ponderal': ['polander', 'ponderal', 'prenodal'],\n 'ponderate': ['ponderate', 'predonate'],\n 'ponderation': ['ponderation', 'predonation'],\n 'ponderer': ['ponderer', 'reponder'],\n 'pondfish': ['fishpond', 'pondfish'],\n 'pone': ['nope', 'open', 'peon', 'pone'],\n 'ponerid': ['poinder', 'ponerid'],\n 'poneroid': ['poneroid', 'porodine'],\n 'poney': ['peony', 'poney'],\n 'ponica': ['aponic', 'ponica'],\n 'ponier': ['opiner', 'orpine', 'ponier'],\n 'pontederia': ['pontederia', 'proteidean'],\n 'pontee': ['nepote', 'pontee', 'poteen'],\n 'pontes': ['pontes', 'posnet'],\n 'ponticular': ['ponticular', 'untropical'],\n 'pontificalia': ['palification', 'pontificalia'],\n 'pontile': ['pointel', 'pontile', 'topline'],\n 'pontonier': ['entropion', 'pontonier', 'prenotion'],\n 'pontus': ['pontus', 'unspot', 'unstop'],\n 'pooch': ['choop', 'pooch'],\n 'pooh': ['hoop', 'phoo', 'pooh'],\n 'pooka': ['oopak', 'pooka'],\n 'pool': ['loop', 'polo', 'pool'],\n 'pooler': ['looper', 'pooler'],\n 'pooli': ['polio', 'pooli'],\n 'pooly': ['loopy', 'pooly'],\n 'poon': ['noop', 'poon'],\n 'poonac': ['acopon', 'poonac'],\n 'poonga': ['apogon', 'poonga'],\n 'poor': ['poor', 'proo'],\n 'poot': ['poot', 'toop', 'topo'],\n 'pope': ['pepo', 'pope'],\n 'popeler': ['peopler', 'popeler'],\n 'popery': ['popery', 'pyrope'],\n 'popgun': ['oppugn', 'popgun'],\n 'popian': ['oppian', 'papion', 'popian'],\n 'popish': ['popish', 'shippo'],\n 'popliteal': ['papillote', 'popliteal'],\n 'poppel': ['poppel', 'popple'],\n 'popple': ['poppel', 'popple'],\n 'populism': ['pimplous', 'pompilus', 'populism'],\n 'populus': ['populus', 'pulpous'],\n 'poral': ['parol', 'polar', 'poral', 'proal'],\n 'porcate': ['coperta', 'pectora', 'porcate'],\n 'porcelain': ['oliprance', 'porcelain'],\n 'porcelanite': ['porcelanite', 'praelection'],\n 'porcula': ['copular', 'croupal', 'cupolar', 'porcula'],\n 'pore': ['pore', 'rope'],\n 'pored': ['doper', 'pedro', 'pored'],\n 'porelike': ['porelike', 'ropelike'],\n 'porer': ['porer', 'prore', 'roper'],\n 'porge': ['grope', 'porge'],\n 'porger': ['groper', 'porger'],\n 'poriness': ['poriness', 'pression', 'ropiness'],\n 'poring': ['poring', 'roping'],\n 'poristical': ['polaristic', 'poristical', 'saprolitic'],\n 'porites': ['periost', 'porites', 'reposit', 'riposte'],\n 'poritidae': ['poritidae', 'triopidae'],\n 'porker': ['porker', 'proker'],\n 'pornerastic': ['cotranspire', 'pornerastic'],\n 'porodine': ['poneroid', 'porodine'],\n 'poros': ['poros', 'proso', 'sopor', 'spoor'],\n 'porosity': ['isotropy', 'porosity'],\n 'porotic': ['porotic', 'portico'],\n 'porpentine': ['porpentine', 'prepontine'],\n 'porphine': ['hornpipe', 'porphine'],\n 'porphyrous': ['porphyrous', 'pyrophorus'],\n 'porrection': ['correption', 'porrection'],\n 'porret': ['porret', 'porter', 'report', 'troper'],\n 'porta': ['aport', 'parto', 'porta'],\n 'portail': ['portail', 'toprail'],\n 'portal': ['patrol', 'portal', 'tropal'],\n 'portance': ['coparent', 'portance'],\n 'ported': ['deport', 'ported', 'redtop'],\n 'portend': ['portend', 'protend'],\n 'porteno': ['porteno', 'protone'],\n 'portension': ['portension', 'protension'],\n 'portent': ['portent', 'torpent'],\n 'portentous': ['notopterus', 'portentous'],\n 'porter': ['porret', 'porter', 'report', 'troper'],\n 'porterage': ['porterage', 'reportage'],\n 'portership': ['portership', 'pretorship'],\n 'portfire': ['portfire', 'profiter'],\n 'portia': ['portia', 'tapiro'],\n 'portico': ['porotic', 'portico'],\n 'portify': ['portify', 'torpify'],\n 'portional': ['ploration', 'portional', 'prolation'],\n 'portioner': ['portioner', 'reportion'],\n 'portlet': ['plotter', 'portlet'],\n 'portly': ['portly', 'protyl', 'tropyl'],\n 'porto': ['porto', 'proto', 'troop'],\n 'portoise': ['isotrope', 'portoise'],\n 'portolan': ['portolan', 'pronotal'],\n 'portor': ['portor', 'torpor'],\n 'portray': ['parroty', 'portray', 'tropary'],\n 'portrayal': ['parlatory', 'portrayal'],\n 'portside': ['dipteros', 'portside'],\n 'portsider': ['portsider', 'postrider'],\n 'portunidae': ['depuration', 'portunidae'],\n 'portunus': ['outspurn', 'portunus'],\n 'pory': ['pory', 'pyro', 'ropy'],\n 'posca': ['posca', 'scopa'],\n 'pose': ['epos', 'peso', 'pose', 'sope'],\n 'poser': ['poser', 'prose', 'ropes', 'spore'],\n 'poseur': ['poseur', 'pouser', 'souper', 'uprose'],\n 'posey': ['poesy', 'posey', 'sepoy'],\n 'posh': ['phos', 'posh', 'shop', 'soph'],\n 'posingly': ['posingly', 'spongily'],\n 'position': ['position', 'sopition'],\n 'positional': ['positional', 'spoilation', 'spoliation'],\n 'positioned': ['deposition', 'positioned'],\n 'positioner': ['positioner', 'reposition'],\n 'positron': ['notropis', 'positron', 'sorption'],\n 'positum': ['positum', 'utopism'],\n 'posnet': ['pontes', 'posnet'],\n 'posse': ['posse', 'speos'],\n 'possessioner': ['possessioner', 'repossession'],\n 'post': ['post', 'spot', 'stop', 'tops'],\n 'postage': ['gestapo', 'postage'],\n 'postaortic': ['parostotic', 'postaortic'],\n 'postdate': ['despotat', 'postdate'],\n 'posted': ['despot', 'posted'],\n 'posteen': ['pentose', 'posteen'],\n 'poster': ['poster', 'presto', 'repost', 'respot', 'stoper'],\n 'posterial': ['posterial', 'saprolite'],\n 'posterior': ['posterior', 'repositor'],\n 'posterish': ['posterish', 'prothesis', 'sophister', 'storeship', 'tephrosis'],\n 'posteroinferior': ['inferoposterior', 'posteroinferior'],\n 'posterosuperior': ['posterosuperior', 'superoposterior'],\n 'postgenial': ['postgenial', 'spangolite'],\n 'posthaste': ['posthaste', 'tosephtas'],\n 'postic': ['copist', 'coptis', 'optics', 'postic'],\n 'postical': ['postical', 'slipcoat'],\n 'postil': ['pistol', 'postil', 'spoilt'],\n 'posting': ['posting', 'stoping'],\n 'postischial': ['postischial', 'sophistical'],\n 'postless': ['postless', 'spotless', 'stopless'],\n 'postlike': ['postlike', 'spotlike'],\n 'postman': ['postman', 'topsman'],\n 'postmedial': ['plastidome', 'postmedial'],\n 'postnaris': ['postnaris', 'sopranist'],\n 'postnominal': ['monoplanist', 'postnominal'],\n 'postrider': ['portsider', 'postrider'],\n 'postsacral': ['postsacral', 'sarcoplast'],\n 'postsign': ['postsign', 'signpost'],\n 'postthoracic': ['octastrophic', 'postthoracic'],\n 'postulata': ['autoplast', 'postulata'],\n 'postural': ['postural', 'pulsator', 'sportula'],\n 'posture': ['petrous', 'posture', 'proetus', 'proteus', 'septuor', 'spouter'],\n 'posturer': ['posturer', 'resprout', 'sprouter'],\n 'postuterine': ['postuterine', 'pretentious'],\n 'postwar': ['postwar', 'sapwort'],\n 'postward': ['drawstop', 'postward'],\n 'postwoman': ['postwoman', 'womanpost'],\n 'posy': ['opsy', 'posy'],\n 'pot': ['opt', 'pot', 'top'],\n 'potable': ['optable', 'potable'],\n 'potableness': ['optableness', 'potableness'],\n 'potash': ['pashto', 'pathos', 'potash'],\n 'potass': ['potass', 'topass'],\n 'potate': ['aptote', 'optate', 'potate', 'teapot'],\n 'potation': ['optation', 'potation'],\n 'potative': ['optative', 'potative'],\n 'potator': ['potator', 'taproot'],\n 'pote': ['peto', 'poet', 'pote', 'tope'],\n 'poteen': ['nepote', 'pontee', 'poteen'],\n 'potential': ['peltation', 'potential'],\n 'poter': ['poter', 'prote', 'repot', 'tepor', 'toper', 'trope'],\n 'poteye': ['peyote', 'poteye'],\n 'pothouse': ['housetop', 'pothouse'],\n 'poticary': ['cyrtopia', 'poticary'],\n 'potifer': ['firetop', 'potifer'],\n 'potion': ['option', 'potion'],\n 'potlatch': ['potlatch', 'tolpatch'],\n 'potlike': ['kitlope', 'potlike', 'toplike'],\n 'potmaker': ['potmaker', 'topmaker'],\n 'potmaking': ['potmaking', 'topmaking'],\n 'potman': ['potman', 'tampon', 'topman'],\n 'potometer': ['optometer', 'potometer'],\n 'potstick': ['potstick', 'tipstock'],\n 'potstone': ['potstone', 'topstone'],\n 'pottled': ['plotted', 'pottled'],\n 'pouce': ['coupe', 'pouce'],\n 'poucer': ['couper', 'croupe', 'poucer', 'recoup'],\n 'pouch': ['choup', 'pouch'],\n 'poulpe': ['poulpe', 'pupelo'],\n 'poult': ['plout', 'pluto', 'poult'],\n 'poulter': ['plouter', 'poulter'],\n 'poultice': ['epulotic', 'poultice'],\n 'pounce': ['pounce', 'uncope'],\n 'pounder': ['pounder', 'repound', 'unroped'],\n 'pour': ['pour', 'roup'],\n 'pourer': ['pourer', 'repour', 'rouper'],\n 'pouser': ['poseur', 'pouser', 'souper', 'uprose'],\n 'pout': ['pout', 'toup'],\n 'pouter': ['pouter', 'roupet', 'troupe'],\n 'pow': ['pow', 'wop'],\n 'powder': ['powder', 'prowed'],\n 'powderer': ['powderer', 'repowder'],\n 'powerful': ['powerful', 'upflower'],\n 'praam': ['param', 'parma', 'praam'],\n 'practitional': ['antitropical', 'practitional'],\n 'prad': ['pard', 'prad'],\n 'pradeep': ['papered', 'pradeep'],\n 'praecox': ['exocarp', 'praecox'],\n 'praelabrum': ['praelabrum', 'preambular'],\n 'praelection': ['porcelanite', 'praelection'],\n 'praelector': ['praelector', 'receptoral'],\n 'praenomina': ['pomeranian', 'praenomina'],\n 'praepostor': ['praepostor', 'pterospora'],\n 'praesphenoid': ['nephropsidae', 'praesphenoid'],\n 'praetor': ['praetor', 'prorate'],\n 'praetorian': ['praetorian', 'reparation'],\n 'praise': ['aspire', 'paries', 'praise', 'sirpea', 'spirea'],\n 'praiser': ['aspirer', 'praiser', 'serpari'],\n 'praising': ['aspiring', 'praising', 'singarip'],\n 'praisingly': ['aspiringly', 'praisingly'],\n 'praline': ['pearlin', 'plainer', 'praline'],\n 'pram': ['pram', 'ramp'],\n 'prandial': ['diplanar', 'prandial'],\n 'prankle': ['planker', 'prankle'],\n 'prase': ['asper', 'parse', 'prase', 'spaer', 'spare', 'spear'],\n 'praseolite': ['periosteal', 'praseolite'],\n 'prasine': ['persian', 'prasine', 'saprine'],\n 'prasinous': ['prasinous', 'psaronius'],\n 'prasoid': ['prasoid', 'sparoid'],\n 'prasophagous': ['prasophagous', 'saprophagous'],\n 'prat': ['part', 'prat', 'rapt', 'tarp', 'trap'],\n 'prate': ['apert', 'pater', 'peart', 'prate', 'taper', 'terap'],\n 'prater': ['parter', 'prater'],\n 'pratey': ['petary', 'pratey'],\n 'pratfall': ['pratfall', 'trapfall'],\n 'pratincoline': ['nonpearlitic', 'pratincoline'],\n 'pratincolous': ['patroclinous', 'pratincolous'],\n 'prattle': ['partlet', 'platter', 'prattle'],\n 'prau': ['prau', 'rupa'],\n 'prawner': ['prawner', 'prewarn'],\n 'prayer': ['prayer', 'repray'],\n 'preach': ['aperch', 'eparch', 'percha', 'preach'],\n 'preacher': ['preacher', 'repreach'],\n 'preaching': ['engraphic', 'preaching'],\n 'preachman': ['marchpane', 'preachman'],\n 'preachy': ['eparchy', 'preachy'],\n 'preacid': ['epacrid', 'peracid', 'preacid'],\n 'preact': ['carpet', 'peract', 'preact'],\n 'preaction': ['preaction', 'precation', 'recaption'],\n 'preactive': ['preactive', 'precative'],\n 'preactively': ['preactively', 'precatively'],\n 'preacute': ['peracute', 'preacute'],\n 'preadmonition': ['demipronation', 'preadmonition', 'predomination'],\n 'preadorn': ['pardoner', 'preadorn'],\n 'preadventure': ['peradventure', 'preadventure'],\n 'preallably': ['ballplayer', 'preallably'],\n 'preallow': ['preallow', 'walloper'],\n 'preamble': ['peramble', 'preamble'],\n 'preambular': ['praelabrum', 'preambular'],\n 'preambulate': ['perambulate', 'preambulate'],\n 'preambulation': ['perambulation', 'preambulation'],\n 'preambulatory': ['perambulatory', 'preambulatory'],\n 'preanal': ['planera', 'preanal'],\n 'prearm': ['prearm', 'ramper'],\n 'preascitic': ['accipitres', 'preascitic'],\n 'preauditory': ['preauditory', 'repudiatory'],\n 'prebacillary': ['bicarpellary', 'prebacillary'],\n 'prebasal': ['parsable', 'prebasal', 'sparable'],\n 'prebend': ['perbend', 'prebend'],\n 'prebeset': ['bepester', 'prebeset'],\n 'prebid': ['bedrip', 'prebid'],\n 'precant': ['carpent', 'precant'],\n 'precantation': ['actinopteran', 'precantation'],\n 'precast': ['precast', 'spectra'],\n 'precation': ['preaction', 'precation', 'recaption'],\n 'precative': ['preactive', 'precative'],\n 'precatively': ['preactively', 'precatively'],\n 'precaution': ['precaution', 'unoperatic'],\n 'precautional': ['inoperculata', 'precautional'],\n 'precedable': ['deprecable', 'precedable'],\n 'preceder': ['preceder', 'precreed'],\n 'precent': ['percent', 'precent'],\n 'precept': ['percept', 'precept'],\n 'preception': ['perception', 'preception'],\n 'preceptive': ['perceptive', 'preceptive'],\n 'preceptively': ['perceptively', 'preceptively'],\n 'preceptual': ['perceptual', 'preceptual'],\n 'preceptually': ['perceptually', 'preceptually'],\n 'prechloric': ['perchloric', 'prechloric'],\n 'prechoose': ['prechoose', 'rheoscope'],\n 'precipitate': ['peripatetic', 'precipitate'],\n 'precipitator': ['precipitator', 'prepatriotic'],\n 'precis': ['crepis', 'cripes', 'persic', 'precis', 'spicer'],\n 'precise': ['precise', 'scripee'],\n 'precisian': ['periscian', 'precisian'],\n 'precision': ['coinspire', 'precision'],\n 'precitation': ['actinopteri', 'crepitation', 'precitation'],\n 'precite': ['ereptic', 'precite', 'receipt'],\n 'precited': ['decrepit', 'depicter', 'precited'],\n 'preclose': ['perclose', 'preclose'],\n 'preclusion': ['perculsion', 'preclusion'],\n 'preclusive': ['perculsive', 'preclusive'],\n 'precoil': ['peloric', 'precoil'],\n 'precompound': ['percompound', 'precompound'],\n 'precondense': ['precondense', 'respondence'],\n 'preconnubial': ['preconnubial', 'pronunciable'],\n 'preconsole': ['necropoles', 'preconsole'],\n 'preconsultor': ['preconsultor', 'supercontrol'],\n 'precontest': ['precontest', 'torpescent'],\n 'precopy': ['coppery', 'precopy'],\n 'precostal': ['ceroplast', 'precostal'],\n 'precredit': ['precredit', 'predirect', 'repredict'],\n 'precreditor': ['precreditor', 'predirector'],\n 'precreed': ['preceder', 'precreed'],\n 'precurrent': ['percurrent', 'precurrent'],\n 'precursory': ['percursory', 'precursory'],\n 'precyst': ['precyst', 'sceptry', 'spectry'],\n 'predata': ['adapter', 'predata', 'readapt'],\n 'predate': ['padtree', 'predate', 'tapered'],\n 'predatism': ['predatism', 'spermatid'],\n 'predative': ['deprivate', 'predative'],\n 'predator': ['predator', 'protrade', 'teardrop'],\n 'preday': ['pedary', 'preday'],\n 'predealer': ['predealer', 'repleader'],\n 'predecree': ['creepered', 'predecree'],\n 'predefect': ['perfected', 'predefect'],\n 'predeication': ['depreciation', 'predeication'],\n 'prederive': ['prederive', 'redeprive'],\n 'predespair': ['disprepare', 'predespair'],\n 'predestine': ['predestine', 'presidente'],\n 'predetail': ['pedaliter', 'predetail'],\n 'predevotion': ['overpointed', 'predevotion'],\n 'predial': ['pedrail', 'predial'],\n 'prediastolic': ['prediastolic', 'psiloceratid'],\n 'predication': ['predication', 'procidentia'],\n 'predictory': ['cryptodire', 'predictory'],\n 'predirect': ['precredit', 'predirect', 'repredict'],\n 'predirector': ['precreditor', 'predirector'],\n 'prediscretion': ['prediscretion', 'redescription'],\n 'predislike': ['predislike', 'spiderlike'],\n 'predivinable': ['indeprivable', 'predivinable'],\n 'predominate': ['pentameroid', 'predominate'],\n 'predomination': ['demipronation', 'preadmonition', 'predomination'],\n 'predonate': ['ponderate', 'predonate'],\n 'predonation': ['ponderation', 'predonation'],\n 'predoubter': ['predoubter', 'preobtrude'],\n 'predrive': ['depriver', 'predrive'],\n 'preen': ['neper', 'preen', 'repen'],\n 'prefactor': ['aftercrop', 'prefactor'],\n 'prefator': ['forepart', 'prefator'],\n 'prefavorite': ['perforative', 'prefavorite'],\n 'prefect': ['perfect', 'prefect'],\n 'prefectly': ['perfectly', 'prefectly'],\n 'prefervid': ['perfervid', 'prefervid'],\n 'prefiction': ['prefiction', 'proficient'],\n 'prefoliation': ['perfoliation', 'prefoliation'],\n 'preform': ['perform', 'preform'],\n 'preformant': ['performant', 'preformant'],\n 'preformative': ['performative', 'preformative'],\n 'preformism': ['misperform', 'preformism'],\n 'pregainer': ['peregrina', 'pregainer'],\n 'prehandicap': ['handicapper', 'prehandicap'],\n 'prehaps': ['perhaps', 'prehaps'],\n 'prehazard': ['perhazard', 'prehazard'],\n 'preheal': ['preheal', 'rephael'],\n 'preheat': ['haptere', 'preheat'],\n 'preheated': ['heartdeep', 'preheated'],\n 'prehension': ['hesperinon', 'prehension'],\n 'prehnite': ['nephrite', 'prehnite', 'trephine'],\n 'prehnitic': ['nephritic', 'phrenitic', 'prehnitic'],\n 'prehuman': ['prehuman', 'unhamper'],\n 'preimpose': ['perispome', 'preimpose'],\n 'preindicate': ['parenticide', 'preindicate'],\n 'preinduce': ['preinduce', 'unpierced'],\n 'preintone': ['interpone', 'peritenon', 'pinnotere', 'preintone'],\n 'prelabrum': ['prelabrum', 'prelumbar'],\n 'prelacteal': ['carpellate', 'parcellate', 'prelacteal'],\n 'prelate': ['pearlet', 'pleater', 'prelate', 'ptereal', 'replate', 'repleat'],\n 'prelatehood': ['heteropodal', 'prelatehood'],\n 'prelatic': ['particle', 'plicater', 'prelatic'],\n 'prelatical': ['capitellar', 'prelatical'],\n 'prelation': ['prelation', 'rantipole'],\n 'prelatism': ['palmister', 'prelatism'],\n 'prelease': ['eelspear', 'prelease'],\n 'prelect': ['plectre', 'prelect'],\n 'prelection': ['perlection', 'prelection'],\n 'prelim': ['limper', 'prelim', 'rimple'],\n 'prelingual': ['perlingual', 'prelingual'],\n 'prelocate': ['percolate', 'prelocate'],\n 'preloss': ['plessor', 'preloss'],\n 'preludial': ['dipleural', 'preludial'],\n 'prelumbar': ['prelabrum', 'prelumbar'],\n 'prelusion': ['prelusion', 'repulsion'],\n 'prelusive': ['prelusive', 'repulsive'],\n 'prelusively': ['prelusively', 'repulsively'],\n 'prelusory': ['prelusory', 'repulsory'],\n 'premate': ['premate', 'tempera'],\n 'premedia': ['epiderma', 'premedia'],\n 'premedial': ['epidermal', 'impleader', 'premedial'],\n 'premedication': ['pedometrician', 'premedication'],\n 'premenace': ['permeance', 'premenace'],\n 'premerit': ['premerit', 'preremit', 'repermit'],\n 'premial': ['impaler', 'impearl', 'lempira', 'premial'],\n 'premiant': ['imperant', 'pairment', 'partimen', 'premiant', 'tripeman'],\n 'premiate': ['imperate', 'premiate'],\n 'premier': ['premier', 'reprime'],\n 'premious': ['imposure', 'premious'],\n 'premise': ['emprise', 'imprese', 'premise', 'spireme'],\n 'premiss': ['impress', 'persism', 'premiss'],\n 'premixture': ['permixture', 'premixture'],\n 'premodel': ['leperdom', 'premodel'],\n 'premolar': ['premolar', 'premoral'],\n 'premold': ['meldrop', 'premold'],\n 'premonetary': ['premonetary', 'pyranometer'],\n 'premoral': ['premolar', 'premoral'],\n 'premorality': ['polarimetry', 'premorality', 'temporarily'],\n 'premosaic': ['paroecism', 'premosaic'],\n 'premover': ['premover', 'prevomer'],\n 'premusical': ['premusical', 'superclaim'],\n 'prenasal': ['pernasal', 'prenasal'],\n 'prenatal': ['parental', 'paternal', 'prenatal'],\n 'prenatalist': ['intraseptal', 'paternalist', 'prenatalist'],\n 'prenatally': ['parentally', 'paternally', 'prenatally'],\n 'prenative': ['interpave', 'prenative'],\n 'prender': ['prender', 'prendre'],\n 'prendre': ['prender', 'prendre'],\n 'prenodal': ['polander', 'ponderal', 'prenodal'],\n 'prenominical': ['nonempirical', 'prenominical'],\n 'prenotice': ['prenotice', 'reception'],\n 'prenotion': ['entropion', 'pontonier', 'prenotion'],\n 'prentice': ['piercent', 'prentice'],\n 'preobtrude': ['predoubter', 'preobtrude'],\n 'preocular': ['opercular', 'preocular'],\n 'preominate': ['permeation', 'preominate'],\n 'preopen': ['preopen', 'propene'],\n 'preopinion': ['preopinion', 'prionopine'],\n 'preoption': ['preoption', 'protopine'],\n 'preoral': ['peroral', 'preoral'],\n 'preorally': ['perorally', 'preorally'],\n 'prep': ['prep', 'repp'],\n 'prepalatine': ['periplaneta', 'prepalatine'],\n 'prepare': ['paperer', 'perpera', 'prepare', 'repaper'],\n 'prepatriotic': ['precipitator', 'prepatriotic'],\n 'prepay': ['papery', 'prepay', 'yapper'],\n 'preplot': ['preplot', 'toppler'],\n 'prepollent': ['prepollent', 'propellent'],\n 'prepontine': ['porpentine', 'prepontine'],\n 'prepositure': ['peripterous', 'prepositure'],\n 'prepuce': ['prepuce', 'upcreep'],\n 'prerational': ['prerational', 'proletarian'],\n 'prerealization': ['prerealization', 'proletarianize'],\n 'prereceive': ['prereceive', 'reperceive'],\n 'prerecital': ['perirectal', 'prerecital'],\n 'prereduction': ['interproduce', 'prereduction'],\n 'prerefer': ['prerefer', 'reprefer'],\n 'prereform': ['performer', 'prereform', 'reperform'],\n 'preremit': ['premerit', 'preremit', 'repermit'],\n 'prerental': ['prerental', 'replanter'],\n 'prerich': ['chirper', 'prerich'],\n 'preromantic': ['improcreant', 'preromantic'],\n 'presage': ['asperge', 'presage'],\n 'presager': ['asperger', 'presager'],\n 'presay': ['presay', 'speary'],\n 'prescapular': ['prescapular', 'supercarpal'],\n 'prescient': ['prescient', 'reinspect'],\n 'prescientific': ['interspecific', 'prescientific'],\n 'prescribe': ['perscribe', 'prescribe'],\n 'prescutal': ['prescutal', 'scalpture'],\n 'preseal': ['pleaser', 'preseal', 'relapse'],\n 'preseason': ['parsonese', 'preseason'],\n 'presell': ['presell', 'respell', 'speller'],\n 'present': ['penster', 'present', 'serpent', 'strepen'],\n 'presenter': ['presenter', 'represent'],\n 'presential': ['alpestrine', 'episternal', 'interlapse', 'presential'],\n 'presentist': ['persistent', 'presentist', 'prettiness'],\n 'presentive': ['presentive', 'pretensive', 'vespertine'],\n 'presentively': ['presentively', 'pretensively'],\n 'presentiveness': ['presentiveness', 'pretensiveness'],\n 'presently': ['presently', 'serpently'],\n 'preserve': ['perverse', 'preserve'],\n 'preset': ['pester', 'preset', 'restep', 'streep'],\n 'preshare': ['preshare', 'rephrase'],\n 'preship': ['preship', 'shipper'],\n 'preshortage': ['preshortage', 'stereograph'],\n 'preside': ['perseid', 'preside'],\n 'presidencia': ['acipenserid', 'presidencia'],\n 'president': ['president', 'serpentid'],\n 'presidente': ['predestine', 'presidente'],\n 'presider': ['presider', 'serriped'],\n 'presign': ['presign', 'springe'],\n 'presignal': ['espringal', 'presignal', 'relapsing'],\n 'presimian': ['mainprise', 'presimian'],\n 'presley': ['presley', 'sleepry'],\n 'presser': ['presser', 'repress'],\n 'pression': ['poriness', 'pression', 'ropiness'],\n 'pressive': ['pressive', 'viperess'],\n 'prest': ['prest', 'spret'],\n 'prestable': ['beplaster', 'prestable'],\n 'prestant': ['prestant', 'transept'],\n 'prestate': ['prestate', 'pretaste'],\n 'presto': ['poster', 'presto', 'repost', 'respot', 'stoper'],\n 'prestock': ['prestock', 'sprocket'],\n 'prestomial': ['peristomal', 'prestomial'],\n 'prestrain': ['prestrain', 'transpire'],\n 'presume': ['presume', 'supreme'],\n 'presurmise': ['impressure', 'presurmise'],\n 'presustain': ['presustain', 'puritaness', 'supersaint'],\n 'presystole': ['poetryless', 'presystole'],\n 'pretan': ['arpent',\n            'enrapt',\n            'entrap',\n            'panter',\n            'parent',\n            'pretan',\n            'trepan'],\n 'pretaste': ['prestate', 'pretaste'],\n 'pretensive': ['presentive', 'pretensive', 'vespertine'],\n 'pretensively': ['presentively', 'pretensively'],\n 'pretensiveness': ['presentiveness', 'pretensiveness'],\n 'pretentious': ['postuterine', 'pretentious'],\n 'pretercanine': ['irrepentance', 'pretercanine'],\n 'preterient': ['preterient', 'triterpene'],\n 'pretermit': ['permitter', 'pretermit'],\n 'pretheological': ['herpetological', 'pretheological'],\n 'pretibial': ['bipartile', 'pretibial'],\n 'pretonic': ['inceptor', 'pretonic'],\n 'pretorship': ['portership', 'pretorship'],\n 'pretrace': ['pretrace', 'recarpet'],\n 'pretracheal': ['archprelate', 'pretracheal'],\n 'pretrain': ['pretrain', 'terrapin'],\n 'pretransmission': ['pretransmission', 'transimpression'],\n 'pretreat': ['patterer', 'pretreat'],\n 'prettiness': ['persistent', 'presentist', 'prettiness'],\n 'prevailer': ['prevailer', 'reprieval'],\n 'prevalid': ['deprival', 'prevalid'],\n 'prevention': ['prevention', 'provenient'],\n 'preversion': ['perversion', 'preversion'],\n 'preveto': ['overpet', 'preveto', 'prevote'],\n 'previde': ['deprive', 'previde'],\n 'previous': ['pervious', 'previous', 'viperous'],\n 'previously': ['perviously', 'previously', 'viperously'],\n 'previousness': ['perviousness', 'previousness', 'viperousness'],\n 'prevoid': ['prevoid', 'provide'],\n 'prevomer': ['premover', 'prevomer'],\n 'prevote': ['overpet', 'preveto', 'prevote'],\n 'prewar': ['prewar', 'rewrap', 'warper'],\n 'prewarn': ['prawner', 'prewarn'],\n 'prewhip': ['prewhip', 'whipper'],\n 'prewrap': ['prewrap', 'wrapper'],\n 'prexy': ['prexy', 'pyrex'],\n 'prey': ['prey', 'pyre', 'rype'],\n 'pria': ['pair', 'pari', 'pria', 'ripa'],\n 'price': ['price', 'repic'],\n 'priced': ['percid', 'priced'],\n 'prich': ['chirp', 'prich'],\n 'prickfoot': ['prickfoot', 'tickproof'],\n 'prickle': ['pickler', 'prickle'],\n 'pride': ['pride', 'pried', 'redip'],\n 'pridian': ['pindari', 'pridian'],\n 'pried': ['pride', 'pried', 'redip'],\n 'prier': ['prier', 'riper'],\n 'priest': ['priest', 'pteris', 'sprite', 'stripe'],\n 'priestal': ['epistlar', 'pilaster', 'plaister', 'priestal'],\n 'priesthood': ['priesthood', 'spritehood'],\n 'priestless': ['priestless', 'stripeless'],\n 'prig': ['grip', 'prig'],\n 'prigman': ['gripman', 'prigman', 'ramping'],\n 'prima': ['impar', 'pamir', 'prima'],\n 'primage': ['epigram', 'primage'],\n 'primal': ['imparl', 'primal'],\n 'primates': ['maspiter', 'pastimer', 'primates'],\n 'primatial': ['impartial', 'primatial'],\n 'primely': ['primely', 'reimply'],\n 'primeness': ['primeness', 'spenerism'],\n 'primost': ['primost', 'tropism'],\n 'primrose': ['primrose', 'promiser'],\n 'primsie': ['pismire', 'primsie'],\n 'primus': ['primus', 'purism'],\n 'prince': ['pincer', 'prince'],\n 'princehood': ['cnidophore', 'princehood'],\n 'princeite': ['princeite', 'recipient'],\n 'princelike': ['pincerlike', 'princelike'],\n 'princely': ['pencilry', 'princely'],\n 'princesse': ['crepiness', 'princesse'],\n 'prine': ['piner', 'prine', 'repin', 'ripen'],\n 'pringle': ['pingler', 'pringle'],\n 'printed': ['deprint', 'printed'],\n 'printer': ['printer', 'reprint'],\n 'priodontes': ['desorption', 'priodontes'],\n 'prionopine': ['preopinion', 'prionopine'],\n 'prisage': ['prisage', 'spairge'],\n 'prisal': ['prisal', 'spiral'],\n 'prismatoid': ['diatropism', 'prismatoid'],\n 'prisometer': ['prisometer', 'spirometer'],\n 'prisonable': ['bipersonal', 'prisonable'],\n 'pristane': ['pinaster', 'pristane'],\n 'pristine': ['enspirit', 'pristine'],\n 'pristis': ['pristis', 'tripsis'],\n 'prius': ['prius', 'sirup'],\n 'proadmission': ['adpromission', 'proadmission'],\n 'proal': ['parol', 'polar', 'poral', 'proal'],\n 'proalien': ['pelorian', 'peronial', 'proalien'],\n 'proamniotic': ['comparition', 'proamniotic'],\n 'proathletic': ['proathletic', 'prothetical'],\n 'proatlas': ['pastoral', 'proatlas'],\n 'proavis': ['pavisor', 'proavis'],\n 'probationer': ['probationer', 'reprobation'],\n 'probe': ['probe', 'rebop'],\n 'procaciously': ['plousiocracy', 'procaciously'],\n 'procaine': ['caponier', 'coprinae', 'procaine'],\n 'procanal': ['coplanar', 'procanal'],\n 'procapital': ['applicator', 'procapital'],\n 'procedure': ['procedure', 'reproduce'],\n 'proceeder': ['proceeder', 'reproceed'],\n 'procellas': ['procellas', 'scalloper'],\n 'procerite': ['procerite', 'receiptor'],\n 'procession': ['procession', 'scorpiones'],\n 'prochemical': ['microcephal', 'prochemical'],\n 'procidentia': ['predication', 'procidentia'],\n 'proclaimer': ['proclaimer', 'reproclaim'],\n 'procne': ['crepon', 'procne'],\n 'procnemial': ['complainer', 'procnemial', 'recomplain'],\n 'procommission': ['compromission', 'procommission'],\n 'procreant': ['copartner', 'procreant'],\n 'procreate': ['procreate', 'pterocera'],\n 'procreation': ['incorporate', 'procreation'],\n 'proctal': ['caltrop', 'proctal'],\n 'proctitis': ['proctitis', 'protistic', 'tropistic'],\n 'proctocolitis': ['coloproctitis', 'proctocolitis'],\n 'procuress': ['percussor', 'procuress'],\n 'prod': ['dorp', 'drop', 'prod'],\n 'proddle': ['plodder', 'proddle'],\n 'proem': ['merop', 'moper', 'proem', 'remop'],\n 'proemial': ['emporial', 'proemial'],\n 'proemium': ['emporium', 'pomerium', 'proemium'],\n 'proethical': ['carpholite', 'proethical'],\n 'proetid': ['diopter', 'peridot', 'proetid', 'protide', 'pteroid'],\n 'proetidae': ['periodate', 'proetidae', 'proteidae'],\n 'proetus': ['petrous', 'posture', 'proetus', 'proteus', 'septuor', 'spouter'],\n 'proficient': ['prefiction', 'proficient'],\n 'profit': ['forpit', 'profit'],\n 'profiter': ['portfire', 'profiter'],\n 'progeny': ['progeny', 'pyrogen'],\n 'prohibiter': ['prohibiter', 'reprohibit'],\n 'proidealistic': ['peridiastolic', 'periodicalist', 'proidealistic'],\n 'proke': ['poker', 'proke'],\n 'proker': ['porker', 'proker'],\n 'prolacrosse': ['prolacrosse', 'sclerospora'],\n 'prolapse': ['prolapse', 'sapropel'],\n 'prolation': ['ploration', 'portional', 'prolation'],\n 'prolegate': ['petrogale', 'petrolage', 'prolegate'],\n 'proletarian': ['prerational', 'proletarian'],\n 'proletarianize': ['prerealization', 'proletarianize'],\n 'proletariat': ['proletariat', 'reptatorial'],\n 'proletary': ['proletary', 'pyrolater'],\n 'prolicense': ['prolicense', 'proselenic'],\n 'prolongate': ['prolongate', 'protogenal'],\n 'promerit': ['importer', 'promerit', 'reimport'],\n 'promethean': ['heptameron', 'promethean'],\n 'promise': ['imposer', 'promise', 'semipro'],\n 'promisee': ['perisome', 'promisee', 'reimpose'],\n 'promiser': ['primrose', 'promiser'],\n 'promitosis': ['isotropism', 'promitosis'],\n 'promnesia': ['mesropian', 'promnesia', 'spironema'],\n 'promonarchist': ['micranthropos', 'promonarchist'],\n 'promote': ['promote', 'protome'],\n 'pronaos': ['pronaos', 'soprano'],\n 'pronate': ['operant', 'pronate', 'protean'],\n 'pronative': ['overpaint', 'pronative'],\n 'proneur': ['proneur', 'purrone'],\n 'pronotal': ['portolan', 'pronotal'],\n 'pronto': ['pronto', 'proton'],\n 'pronunciable': ['preconnubial', 'pronunciable'],\n 'proo': ['poor', 'proo'],\n 'proofer': ['proofer', 'reproof'],\n 'prop': ['prop', 'ropp'],\n 'propellent': ['prepollent', 'propellent'],\n 'propene': ['preopen', 'propene'],\n 'prophloem': ['pleomorph', 'prophloem'],\n 'propine': ['piperno', 'propine'],\n 'propinoic': ['propinoic', 'propionic'],\n 'propionic': ['propinoic', 'propionic'],\n 'propitial': ['propitial', 'triplopia'],\n 'proportioner': ['proportioner', 'reproportion'],\n 'propose': ['opposer', 'propose'],\n 'propraetorial': ['propraetorial', 'protoperlaria'],\n 'proprietous': ['peritropous', 'proprietous'],\n 'propylene': ['polyprene', 'propylene'],\n 'propyne': ['propyne', 'pyropen'],\n 'prorate': ['praetor', 'prorate'],\n 'proration': ['proration', 'troparion'],\n 'prore': ['porer', 'prore', 'roper'],\n 'prorebate': ['perborate', 'prorebate', 'reprobate'],\n 'proreduction': ['proreduction', 'reproduction'],\n 'prorevision': ['prorevision', 'provisioner', 'reprovision'],\n 'prorogate': ['graperoot', 'prorogate'],\n 'prosaist': ['prosaist', 'protasis'],\n 'prosateur': ['prosateur', 'pterosaur'],\n 'prose': ['poser', 'prose', 'ropes', 'spore'],\n 'prosecretin': ['prosecretin', 'reinspector'],\n 'prosectorial': ['corporealist', 'prosectorial'],\n 'prosectorium': ['micropterous', 'prosectorium'],\n 'proselenic': ['prolicense', 'proselenic'],\n 'proselyte': ['polyester', 'proselyte'],\n 'proseminate': ['impersonate', 'proseminate'],\n 'prosemination': ['impersonation', 'prosemination', 'semipronation'],\n 'proseneschal': ['chaperonless', 'proseneschal'],\n 'prosification': ['antisoporific', 'prosification', 'sporification'],\n 'prosilient': ['linopteris', 'prosilient'],\n 'prosiphonate': ['nephroptosia', 'prosiphonate'],\n 'proso': ['poros', 'proso', 'sopor', 'spoor'],\n 'prosodiacal': ['dorsoapical', 'prosodiacal'],\n 'prosopyle': ['polyspore', 'prosopyle'],\n 'prossy': ['prossy', 'spyros'],\n 'prostatectomy': ['cryptostomate', 'prostatectomy'],\n 'prosternate': ['paternoster', 'prosternate', 'transportee'],\n 'prostomiate': ['metroptosia', 'prostomiate'],\n 'protactic': ['catoptric', 'protactic'],\n 'protasis': ['prosaist', 'protasis'],\n 'prote': ['poter', 'prote', 'repot', 'tepor', 'toper', 'trope'],\n 'protead': ['adopter', 'protead', 'readopt'],\n 'protean': ['operant', 'pronate', 'protean'],\n 'protease': ['asterope', 'protease'],\n 'protectional': ['lactoprotein', 'protectional'],\n 'proteic': ['perotic', 'proteic', 'tropeic'],\n 'proteida': ['apteroid', 'proteida'],\n 'proteidae': ['periodate', 'proetidae', 'proteidae'],\n 'proteidean': ['pontederia', 'proteidean'],\n 'protein': ['pointer', 'protein', 'pterion', 'repoint', 'tropine'],\n 'proteinic': ['epornitic', 'proteinic'],\n 'proteles': ['proteles', 'serpolet'],\n 'protelidae': ['leopardite', 'protelidae'],\n 'protend': ['portend', 'protend'],\n 'protension': ['portension', 'protension'],\n 'proteolysis': ['elytroposis', 'proteolysis'],\n 'proteose': ['esotrope', 'proteose'],\n 'protest': ['protest', 'spotter'],\n 'protester': ['protester', 'reprotest'],\n 'proteus': ['petrous', 'posture', 'proetus', 'proteus', 'septuor', 'spouter'],\n 'protheca': ['archpoet', 'protheca'],\n 'prothesis': ['posterish', 'prothesis', 'sophister', 'storeship', 'tephrosis'],\n 'prothetical': ['proathletic', 'prothetical'],\n 'prothoracic': ['acrotrophic', 'prothoracic'],\n 'protide': ['diopter', 'peridot', 'proetid', 'protide', 'pteroid'],\n 'protist': ['protist', 'tropist'],\n 'protistic': ['proctitis', 'protistic', 'tropistic'],\n 'proto': ['porto', 'proto', 'troop'],\n 'protocneme': ['mecopteron', 'protocneme'],\n 'protogenal': ['prolongate', 'protogenal'],\n 'protoma': ['protoma', 'taproom'],\n 'protomagnesium': ['protomagnesium', 'spermatogonium'],\n 'protome': ['promote', 'protome'],\n 'protomorphic': ['morphotropic', 'protomorphic'],\n 'proton': ['pronto', 'proton'],\n 'protone': ['porteno', 'protone'],\n 'protonemal': ['monopteral', 'protonemal'],\n 'protoparent': ['protoparent', 'protopteran'],\n 'protopathic': ['haptotropic', 'protopathic'],\n 'protopathy': ['protopathy', 'protophyta'],\n 'protoperlaria': ['propraetorial', 'protoperlaria'],\n 'protophyta': ['protopathy', 'protophyta'],\n 'protophyte': ['protophyte', 'tropophyte'],\n 'protophytic': ['protophytic', 'tropophytic'],\n 'protopine': ['preoption', 'protopine'],\n 'protopteran': ['protoparent', 'protopteran'],\n 'protore': ['protore', 'trooper'],\n 'protosulphide': ['protosulphide', 'sulphoproteid'],\n 'prototheme': ['photometer', 'prototheme'],\n 'prototherian': ['ornithoptera', 'prototherian'],\n 'prototrophic': ['prototrophic', 'trophotropic'],\n 'protrade': ['predator', 'protrade', 'teardrop'],\n 'protreaty': ['protreaty', 'reptatory'],\n 'protuberantial': ['perturbational', 'protuberantial'],\n 'protyl': ['portly', 'protyl', 'tropyl'],\n 'provenient': ['prevention', 'provenient'],\n 'provide': ['prevoid', 'provide'],\n 'provider': ['overdrip', 'provider'],\n 'provisioner': ['prorevision', 'provisioner', 'reprovision'],\n 'prowed': ['powder', 'prowed'],\n 'prude': ['drupe', 'duper', 'perdu', 'prude', 'pured'],\n 'prudent': ['prudent', 'prunted', 'uptrend'],\n 'prudential': ['prudential', 'putredinal'],\n 'prudist': ['disrupt', 'prudist'],\n 'prudy': ['prudy', 'purdy', 'updry'],\n 'prue': ['peru', 'prue', 'pure'],\n 'prune': ['perun', 'prune'],\n 'prunted': ['prudent', 'prunted', 'uptrend'],\n 'prussic': ['prussic', 'scirpus'],\n 'prut': ['prut', 'turp'],\n 'pry': ['pry', 'pyr'],\n 'pryer': ['perry', 'pryer'],\n 'pryse': ['pryse', 'spyer'],\n 'psalm': ['plasm', 'psalm', 'slamp'],\n 'psalmic': ['plasmic', 'psalmic'],\n 'psalmister': ['psalmister', 'spermalist'],\n 'psalmodial': ['plasmodial', 'psalmodial'],\n 'psalmodic': ['plasmodic', 'psalmodic'],\n 'psaloid': ['psaloid', 'salpoid'],\n 'psalter': ['palster', 'persalt', 'plaster', 'psalter', 'spartle', 'stapler'],\n 'psalterian': ['alpestrian', 'palestrian', 'psalterian'],\n 'psalterion': ['interposal', 'psalterion'],\n 'psaltery': ['plastery', 'psaltery'],\n 'psaltress': ['psaltress', 'strapless'],\n 'psaronius': ['prasinous', 'psaronius'],\n 'psedera': ['psedera', 'respade'],\n 'psellism': ['misspell', 'psellism'],\n 'pseudelytron': ['pseudelytron', 'unproselyted'],\n 'pseudimago': ['megapodius', 'pseudimago'],\n 'pseudophallic': ['diplocephalus', 'pseudophallic'],\n 'psha': ['hasp', 'pash', 'psha', 'shap'],\n 'psi': ['psi', 'sip'],\n 'psiloceratid': ['prediastolic', 'psiloceratid'],\n 'psilophyton': ['polyphonist', 'psilophyton'],\n 'psilotic': ['colpitis', 'politics', 'psilotic'],\n 'psittacine': ['antiseptic', 'psittacine'],\n 'psoadic': ['psoadic', 'scapoid', 'sciapod'],\n 'psoas': ['passo', 'psoas'],\n 'psocidae': ['diascope', 'psocidae', 'scopidae'],\n 'psocine': ['psocine', 'scopine'],\n 'psora': ['psora', 'sapor', 'sarpo'],\n 'psoralea': ['parosela', 'psoralea'],\n 'psoroid': ['psoroid', 'sporoid'],\n 'psorous': ['psorous', 'soursop', 'sporous'],\n 'psychobiological': ['biopsychological', 'psychobiological'],\n 'psychobiology': ['biopsychology', 'psychobiology'],\n 'psychogalvanic': ['galvanopsychic', 'psychogalvanic'],\n 'psychomancy': ['psychomancy', 'scyphomancy'],\n 'psychomonism': ['monopsychism', 'psychomonism'],\n 'psychoneurological': ['neuropsychological', 'psychoneurological'],\n 'psychoneurosis': ['neuropsychosis', 'psychoneurosis'],\n 'psychophysiological': ['physiopsychological', 'psychophysiological'],\n 'psychophysiology': ['physiopsychology', 'psychophysiology'],\n 'psychorrhagy': ['chrysography', 'psychorrhagy'],\n 'psychosomatic': ['psychosomatic', 'somatopsychic'],\n 'psychotechnology': ['psychotechnology', 'technopsychology'],\n 'psychotheism': ['psychotheism', 'theopsychism'],\n 'psychotria': ['physiocrat', 'psychotria'],\n 'ptelea': ['apelet', 'ptelea'],\n 'ptereal': ['pearlet', 'pleater', 'prelate', 'ptereal', 'replate', 'repleat'],\n 'pterian': ['painter', 'pertain', 'pterian', 'repaint'],\n 'pterideous': ['depositure', 'pterideous'],\n 'pteridological': ['dipterological', 'pteridological'],\n 'pteridologist': ['dipterologist', 'pteridologist'],\n 'pteridology': ['dipterology', 'pteridology'],\n 'pterion': ['pointer', 'protein', 'pterion', 'repoint', 'tropine'],\n 'pteris': ['priest', 'pteris', 'sprite', 'stripe'],\n 'pterocera': ['procreate', 'pterocera'],\n 'pterodactylidae': ['dactylopteridae', 'pterodactylidae'],\n 'pterodactylus': ['dactylopterus', 'pterodactylus'],\n 'pterographer': ['petrographer', 'pterographer'],\n 'pterographic': ['petrographic', 'pterographic'],\n 'pterographical': ['petrographical', 'pterographical'],\n 'pterography': ['petrography', 'pterography', 'typographer'],\n 'pteroid': ['diopter', 'peridot', 'proetid', 'protide', 'pteroid'],\n 'pteroma': ['pteroma', 'tempora'],\n 'pteropus': ['pteropus', 'stoppeur'],\n 'pterosaur': ['prosateur', 'pterosaur'],\n 'pterospora': ['praepostor', 'pterospora'],\n 'pteryla': ['apertly', 'peartly', 'platery', 'pteryla', 'taperly'],\n 'pterylographical': ['petrographically', 'pterylographical'],\n 'pterylological': ['petrologically', 'pterylological'],\n 'pterylosis': ['peristylos', 'pterylosis'],\n 'ptilota': ['ptilota', 'talipot', 'toptail'],\n 'ptinus': ['ptinus', 'unspit'],\n 'ptolemean': ['leptonema', 'ptolemean'],\n 'ptomain': ['maintop', 'ptomain', 'tampion', 'timpano'],\n 'ptomainic': ['impaction', 'ptomainic'],\n 'ptyalin': ['inaptly', 'planity', 'ptyalin'],\n 'ptyalocele': ['clypeolate', 'ptyalocele'],\n 'ptyalogenic': ['genotypical', 'ptyalogenic'],\n 'pu': ['pu', 'up'],\n 'pua': ['pau', 'pua'],\n 'puan': ['napu', 'puan', 'puna'],\n 'publisher': ['publisher', 'republish'],\n 'puckball': ['puckball', 'pullback'],\n 'puckrel': ['plucker', 'puckrel'],\n 'pud': ['dup', 'pud'],\n 'pudendum': ['pudendum', 'undumped'],\n 'pudent': ['pudent', 'uptend'],\n 'pudic': ['cupid', 'pudic'],\n 'pudical': ['paludic', 'pudical'],\n 'pudicity': ['cupidity', 'pudicity'],\n 'puerer': ['puerer', 'purree'],\n 'puffer': ['puffer', 'repuff'],\n 'pug': ['gup', 'pug'],\n 'pugman': ['panmug', 'pugman'],\n 'puisne': ['puisne', 'supine'],\n 'puist': ['puist', 'upsit'],\n 'puja': ['jaup', 'puja'],\n 'puke': ['keup', 'puke'],\n 'pule': ['lupe', 'pelu', 'peul', 'pule'],\n 'pulian': ['paulin', 'pulian'],\n 'pulicene': ['clupeine', 'pulicene'],\n 'pulicidal': ['picudilla', 'pulicidal'],\n 'pulicide': ['lupicide', 'pediculi', 'pulicide'],\n 'puling': ['gulpin', 'puling'],\n 'pulish': ['huspil', 'pulish'],\n 'pullback': ['puckball', 'pullback'],\n 'pulp': ['plup', 'pulp'],\n 'pulper': ['pulper', 'purple'],\n 'pulpiter': ['pulpiter', 'repulpit'],\n 'pulpous': ['populus', 'pulpous'],\n 'pulpstone': ['pulpstone', 'unstopple'],\n 'pulsant': ['pulsant', 'upslant'],\n 'pulsate': ['pulsate', 'spatule', 'upsteal'],\n 'pulsatile': ['palluites', 'pulsatile'],\n 'pulsation': ['platinous', 'pulsation'],\n 'pulsator': ['postural', 'pulsator', 'sportula'],\n 'pulse': ['lepus', 'pulse'],\n 'pulsion': ['pulsion', 'unspoil', 'upsilon'],\n 'pulvic': ['pulvic', 'vulpic'],\n 'pumper': ['pumper', 'repump'],\n 'pumple': ['peplum', 'pumple'],\n 'puna': ['napu', 'puan', 'puna'],\n 'puncher': ['puncher', 'unperch'],\n 'punctilio': ['punctilio', 'unpolitic'],\n 'puncturer': ['puncturer', 'upcurrent'],\n 'punger': ['punger', 'repugn'],\n 'pungle': ['plunge', 'pungle'],\n 'puniceous': ['pecunious', 'puniceous'],\n 'punish': ['inpush', 'punish', 'unship'],\n 'punisher': ['punisher', 'repunish'],\n 'punishment': ['punishment', 'unshipment'],\n 'punlet': ['penult', 'punlet', 'puntel'],\n 'punnet': ['punnet', 'unpent'],\n 'puno': ['noup', 'puno', 'upon'],\n 'punta': ['punta', 'unapt', 'untap'],\n 'puntal': ['puntal', 'unplat'],\n 'puntel': ['penult', 'punlet', 'puntel'],\n 'punti': ['input', 'punti'],\n 'punto': ['punto', 'unpot', 'untop'],\n 'pupa': ['paup', 'pupa'],\n 'pupelo': ['poulpe', 'pupelo'],\n 'purana': ['purana', 'uparna'],\n 'purdy': ['prudy', 'purdy', 'updry'],\n 'pure': ['peru', 'prue', 'pure'],\n 'pured': ['drupe', 'duper', 'perdu', 'prude', 'pured'],\n 'puree': ['puree', 'rupee'],\n 'purer': ['purer', 'purre'],\n 'purine': ['purine', 'unripe', 'uprein'],\n 'purism': ['primus', 'purism'],\n 'purist': ['purist', 'spruit', 'uprist', 'upstir'],\n 'puritan': ['pintura', 'puritan', 'uptrain'],\n 'puritaness': ['presustain', 'puritaness', 'supersaint'],\n 'purler': ['purler', 'purrel'],\n 'purple': ['pulper', 'purple'],\n 'purpose': ['peropus', 'purpose'],\n 'purpuroxanthin': ['purpuroxanthin', 'xanthopurpurin'],\n 'purre': ['purer', 'purre'],\n 'purree': ['puerer', 'purree'],\n 'purrel': ['purler', 'purrel'],\n 'purrone': ['proneur', 'purrone'],\n 'purse': ['purse', 'resup', 'sprue', 'super'],\n 'purser': ['purser', 'spruer'],\n 'purslane': ['purslane', 'serpulan', 'supernal'],\n 'purslet': ['purslet', 'spurlet', 'spurtle'],\n 'pursuer': ['pursuer', 'usurper'],\n 'pursy': ['pursy', 'pyrus', 'syrup'],\n 'pus': ['pus', 'sup'],\n 'pushtu': ['pushtu', 'upshut'],\n 'pustule': ['pluteus', 'pustule'],\n 'pustulose': ['pustulose', 'stupulose'],\n 'put': ['put', 'tup'],\n 'putanism': ['putanism', 'sumpitan'],\n 'putation': ['outpaint', 'putation'],\n 'putredinal': ['prudential', 'putredinal'],\n 'putrid': ['putrid', 'turpid'],\n 'putridly': ['putridly', 'turpidly'],\n 'pya': ['pay', 'pya', 'yap'],\n 'pyal': ['paly', 'play', 'pyal', 'pyla'],\n 'pycnial': ['pliancy', 'pycnial'],\n 'pyelic': ['epicly', 'pyelic'],\n 'pyelitis': ['pyelitis', 'sipylite'],\n 'pyelocystitis': ['cystopyelitis', 'pyelocystitis'],\n 'pyelonephritis': ['nephropyelitis', 'pyelonephritis'],\n 'pyeloureterogram': ['pyeloureterogram', 'ureteropyelogram'],\n 'pyemesis': ['empyesis', 'pyemesis'],\n 'pygmalion': ['maypoling', 'pygmalion'],\n 'pyin': ['piny', 'pyin'],\n 'pyla': ['paly', 'play', 'pyal', 'pyla'],\n 'pylades': ['pylades', 'splayed'],\n 'pylagore': ['playgoer', 'pylagore'],\n 'pylar': ['parly', 'pylar', 'pyral'],\n 'pyonephrosis': ['nephropyosis', 'pyonephrosis'],\n 'pyopneumothorax': ['pneumopyothorax', 'pyopneumothorax'],\n 'pyosepticemia': ['pyosepticemia', 'septicopyemia'],\n 'pyosepticemic': ['pyosepticemic', 'septicopyemic'],\n 'pyr': ['pry', 'pyr'],\n 'pyracanth': ['pantarchy', 'pyracanth'],\n 'pyral': ['parly', 'pylar', 'pyral'],\n 'pyrales': ['parsley', 'pyrales', 'sparely', 'splayer'],\n 'pyralid': ['pyralid', 'rapidly'],\n 'pyramidale': ['lampyridae', 'pyramidale'],\n 'pyranometer': ['premonetary', 'pyranometer'],\n 'pyre': ['prey', 'pyre', 'rype'],\n 'pyrena': ['napery', 'pyrena'],\n 'pyrenic': ['cyprine', 'pyrenic'],\n 'pyrenoid': ['pyrenoid', 'pyridone', 'pyrodine'],\n 'pyretogenic': ['pyretogenic', 'pyrogenetic'],\n 'pyrex': ['prexy', 'pyrex'],\n 'pyrgocephaly': ['pelycography', 'pyrgocephaly'],\n 'pyridone': ['pyrenoid', 'pyridone', 'pyrodine'],\n 'pyrites': ['pyrites', 'sperity'],\n 'pyritoid': ['pityroid', 'pyritoid'],\n 'pyro': ['pory', 'pyro', 'ropy'],\n 'pyroarsenite': ['arsenopyrite', 'pyroarsenite'],\n 'pyrochemical': ['microcephaly', 'pyrochemical'],\n 'pyrocomenic': ['pyrocomenic', 'pyromeconic'],\n 'pyrodine': ['pyrenoid', 'pyridone', 'pyrodine'],\n 'pyrogen': ['progeny', 'pyrogen'],\n 'pyrogenetic': ['pyretogenic', 'pyrogenetic'],\n 'pyrolater': ['proletary', 'pyrolater'],\n 'pyromantic': ['importancy', 'patronymic', 'pyromantic'],\n 'pyromeconic': ['pyrocomenic', 'pyromeconic'],\n 'pyrope': ['popery', 'pyrope'],\n 'pyropen': ['propyne', 'pyropen'],\n 'pyrophorus': ['porphyrous', 'pyrophorus'],\n 'pyrotheria': ['erythropia', 'pyrotheria'],\n 'pyruline': ['pyruline', 'unripely'],\n 'pyrus': ['pursy', 'pyrus', 'syrup'],\n 'pyruvil': ['pyruvil', 'pyvuril'],\n 'pythagorism': ['myographist', 'pythagorism'],\n 'pythia': ['pythia', 'typhia'],\n 'pythic': ['phytic', 'pitchy', 'pythic', 'typhic'],\n 'pythogenesis': ['phytogenesis', 'pythogenesis'],\n 'pythogenetic': ['phytogenetic', 'pythogenetic'],\n 'pythogenic': ['phytogenic', 'pythogenic', 'typhogenic'],\n 'pythogenous': ['phytogenous', 'pythogenous'],\n 'python': ['phyton', 'python'],\n 'pythonic': ['hypnotic', 'phytonic', 'pythonic', 'typhonic'],\n 'pythonism': ['hypnotism', 'pythonism'],\n 'pythonist': ['hypnotist', 'pythonist'],\n 'pythonize': ['hypnotize', 'pythonize'],\n 'pythonoid': ['hypnotoid', 'pythonoid'],\n 'pyvuril': ['pyruvil', 'pyvuril'],\n 'quadrual': ['quadrual', 'quadrula'],\n 'quadrula': ['quadrual', 'quadrula'],\n 'quail': ['quail', 'quila'],\n 'quake': ['quake', 'queak'],\n 'quale': ['equal', 'quale', 'queal'],\n 'qualitied': ['liquidate', 'qualitied'],\n 'quamoclit': ['coquitlam', 'quamoclit'],\n 'quannet': ['quannet', 'tanquen'],\n 'quartile': ['quartile', 'requital', 'triequal'],\n 'quartine': ['antiquer', 'quartine'],\n 'quata': ['quata', 'taqua'],\n 'quatrin': ['quatrin', 'tarquin'],\n 'queak': ['quake', 'queak'],\n 'queal': ['equal', 'quale', 'queal'],\n 'queeve': ['eveque', 'queeve'],\n 'quencher': ['quencher', 'requench'],\n 'querier': ['querier', 'require'],\n 'queriman': ['queriman', 'ramequin'],\n 'querist': ['querist', 'squiret'],\n 'quernal': ['quernal', 'ranquel'],\n 'quester': ['quester', 'request'],\n 'questioner': ['questioner', 'requestion'],\n 'questor': ['questor', 'torques'],\n 'quiet': ['quiet', 'quite'],\n 'quietable': ['equitable', 'quietable'],\n 'quieter': ['quieter', 'requite'],\n 'quietist': ['equitist', 'quietist'],\n 'quietsome': ['quietsome', 'semiquote'],\n 'quiina': ['quiina', 'quinia'],\n 'quila': ['quail', 'quila'],\n 'quiles': ['quiles', 'quisle'],\n 'quinate': ['antique', 'quinate'],\n 'quince': ['cinque', 'quince'],\n 'quinia': ['quiina', 'quinia'],\n 'quinite': ['inquiet', 'quinite'],\n 'quinnat': ['quinnat', 'quintan'],\n 'quinse': ['quinse', 'sequin'],\n 'quintan': ['quinnat', 'quintan'],\n 'quintato': ['quintato', 'totaquin'],\n 'quinze': ['quinze', 'zequin'],\n 'quirt': ['quirt', 'qurti'],\n 'quisle': ['quiles', 'quisle'],\n 'quite': ['quiet', 'quite'],\n 'quits': ['quits', 'squit'],\n 'quote': ['quote', 'toque'],\n 'quoter': ['quoter', 'roquet', 'torque'],\n 'qurti': ['quirt', 'qurti'],\n 'ra': ['ar', 'ra'],\n 'raad': ['adar', 'arad', 'raad', 'rada'],\n 'raash': ['asarh', 'raash', 'sarah'],\n 'rab': ['bar', 'bra', 'rab'],\n 'raband': ['bandar', 'raband'],\n 'rabatine': ['atabrine', 'rabatine'],\n 'rabatte': ['baretta', 'rabatte', 'tabaret'],\n 'rabbanite': ['barnabite', 'rabbanite', 'rabbinate'],\n 'rabbet': ['barbet', 'rabbet', 'tabber'],\n 'rabbinate': ['barnabite', 'rabbanite', 'rabbinate'],\n 'rabble': ['barbel', 'labber', 'rabble'],\n 'rabboni': ['barbion', 'rabboni'],\n 'rabi': ['abir', 'bari', 'rabi'],\n 'rabic': ['baric', 'carib', 'rabic'],\n 'rabid': ['barid', 'bidar', 'braid', 'rabid'],\n 'rabidly': ['bardily', 'rabidly', 'ridably'],\n 'rabidness': ['bardiness', 'rabidness'],\n 'rabies': ['braise', 'rabies', 'rebias'],\n 'rabin': ['abrin', 'bairn', 'brain', 'brian', 'rabin'],\n 'rabinet': ['atebrin', 'rabinet'],\n 'raccoon': ['carcoon', 'raccoon'],\n 'race': ['acer', 'acre', 'care', 'crea', 'race'],\n 'racemate': ['camerate', 'macerate', 'racemate'],\n 'racemation': ['aeromantic', 'cameration', 'maceration', 'racemation'],\n 'raceme': ['amerce', 'raceme'],\n 'racemed': ['decream', 'racemed'],\n 'racemic': ['ceramic', 'racemic'],\n 'racer': ['carer', 'crare', 'racer'],\n 'rach': ['arch', 'char', 'rach'],\n 'rache': ['acher', 'arche', 'chare', 'chera', 'rache', 'reach'],\n 'rachel': ['rachel', 'rechal'],\n 'rachianectes': ['rachianectes', 'rhacianectes'],\n 'rachidial': ['diarchial', 'rachidial'],\n 'rachitis': ['architis', 'rachitis'],\n 'racial': ['alaric', 'racial'],\n 'racialist': ['racialist', 'satirical'],\n 'racing': ['arcing', 'racing'],\n 'racist': ['crista', 'racist'],\n 'rack': ['cark', 'rack'],\n 'racker': ['racker', 'rerack'],\n 'racket': ['racket', 'retack', 'tacker'],\n 'racking': ['arcking', 'carking', 'racking'],\n 'rackingly': ['carkingly', 'rackingly'],\n 'rackle': ['calker', 'lacker', 'rackle', 'recalk', 'reckla'],\n 'racon': ['acorn', 'acron', 'racon'],\n 'raconteur': ['cuarteron', 'raconteur'],\n 'racoon': ['caroon', 'corona', 'racoon'],\n 'racy': ['cary', 'racy'],\n 'rad': ['dar', 'rad'],\n 'rada': ['adar', 'arad', 'raad', 'rada'],\n 'raddle': ['ladder', 'raddle'],\n 'raddleman': ['dreamland', 'raddleman'],\n 'radectomy': ['myctodera', 'radectomy'],\n 'radek': ['daker', 'drake', 'kedar', 'radek'],\n 'radiable': ['labridae', 'radiable'],\n 'radiale': ['ardelia', 'laridae', 'radiale'],\n 'radian': ['adrian', 'andira', 'andria', 'radian', 'randia'],\n 'radiance': ['caridean', 'dircaean', 'radiance'],\n 'radiant': ['intrada', 'radiant'],\n 'radiata': ['dataria', 'radiata'],\n 'radical': ['cardial', 'radical'],\n 'radicant': ['antacrid', 'cardiant', 'radicant', 'tridacna'],\n 'radicel': ['decrial', 'radicel', 'radicle'],\n 'radices': ['diceras', 'radices', 'sidecar'],\n 'radicle': ['decrial', 'radicel', 'radicle'],\n 'radicose': ['idocrase', 'radicose'],\n 'radicule': ['auricled', 'radicule'],\n 'radiculose': ['coresidual', 'radiculose'],\n 'radiectomy': ['acidometry', 'medicatory', 'radiectomy'],\n 'radii': ['dairi', 'darii', 'radii'],\n 'radio': ['aroid', 'doria', 'radio'],\n 'radioautograph': ['autoradiograph', 'radioautograph'],\n 'radioautographic': ['autoradiographic', 'radioautographic'],\n 'radioautography': ['autoradiography', 'radioautography'],\n 'radiohumeral': ['humeroradial', 'radiohumeral'],\n 'radiolite': ['editorial', 'radiolite'],\n 'radiolucent': ['radiolucent', 'reductional'],\n 'radioman': ['adoniram', 'radioman'],\n 'radiomicrometer': ['microradiometer', 'radiomicrometer'],\n 'radiophone': ['phoronidea', 'radiophone'],\n 'radiophony': ['hypodorian', 'radiophony'],\n 'radiotelephone': ['radiotelephone', 'teleradiophone'],\n 'radiotron': ['ordinator', 'radiotron'],\n 'radish': ['ardish', 'radish'],\n 'radius': ['darius', 'radius'],\n 'radman': ['mandra', 'radman'],\n 'radon': ['adorn', 'donar', 'drona', 'radon'],\n 'radula': ['adular', 'aludra', 'radula'],\n 'rafael': ['aflare', 'rafael'],\n 'rafe': ['fare', 'fear', 'frae', 'rafe'],\n 'raffee': ['affeer', 'raffee'],\n 'raffia': ['affair', 'raffia'],\n 'raffle': ['farfel', 'raffle'],\n 'rafik': ['fakir', 'fraik', 'kafir', 'rafik'],\n 'raft': ['frat', 'raft'],\n 'raftage': ['fregata', 'raftage'],\n 'rafter': ['frater', 'rafter'],\n 'rag': ['gar', 'gra', 'rag'],\n 'raga': ['agar', 'agra', 'gara', 'raga'],\n 'rage': ['ager', 'agre', 'gare', 'gear', 'rage'],\n 'rageless': ['eelgrass', 'gearless', 'rageless'],\n 'ragfish': ['garfish', 'ragfish'],\n 'ragged': ['dagger', 'gadger', 'ragged'],\n 'raggee': ['agrege', 'raggee'],\n 'raggety': ['gargety', 'raggety'],\n 'raggle': ['gargle', 'gregal', 'lagger', 'raggle'],\n 'raggled': ['draggle', 'raggled'],\n 'raggy': ['aggry', 'raggy'],\n 'ragingly': ['grayling', 'ragingly'],\n 'raglanite': ['antiglare', 'raglanite'],\n 'raglet': ['raglet', 'tergal'],\n 'raglin': ['nargil', 'raglin'],\n 'ragman': ['amgarn', 'mangar', 'marang', 'ragman'],\n 'ragnar': ['garran', 'ragnar'],\n 'ragshag': ['ragshag', 'shagrag'],\n 'ragtag': ['ragtag', 'tagrag'],\n 'ragtime': ['migrate', 'ragtime'],\n 'ragule': ['ragule', 'regula'],\n 'raguly': ['glaury', 'raguly'],\n 'raia': ['aira', 'aria', 'raia'],\n 'raid': ['arid', 'dari', 'raid'],\n 'raider': ['arride', 'raider'],\n 'raif': ['fair', 'fiar', 'raif'],\n 'raiidae': ['ariidae', 'raiidae'],\n 'rail': ['aril', 'lair', 'lari', 'liar', 'lira', 'rail', 'rial'],\n 'railage': ['lairage', 'railage', 'regalia'],\n 'railer': ['railer', 'rerail'],\n 'railhead': ['headrail', 'railhead'],\n 'railless': ['lairless', 'railless'],\n 'railman': ['lairman', 'laminar', 'malarin', 'railman'],\n 'raiment': ['minaret', 'raiment', 'tireman'],\n 'rain': ['arni', 'iran', 'nair', 'rain', 'rani'],\n 'raincoat': ['craniota', 'croatian', 'narcotia', 'raincoat'],\n 'rainful': ['rainful', 'unfrail'],\n 'rainspout': ['rainspout', 'supinator'],\n 'rainy': ['nairy', 'rainy'],\n 'rais': ['rais', 'sair', 'sari'],\n 'raise': ['aries', 'arise', 'raise', 'serai'],\n 'raiseman': ['erasmian', 'raiseman'],\n 'raiser': ['raiser', 'sierra'],\n 'raisin': ['raisin', 'sirian'],\n 'raj': ['jar', 'raj'],\n 'raja': ['ajar', 'jara', 'raja'],\n 'rajah': ['ajhar', 'rajah'],\n 'rajeev': ['evejar', 'rajeev'],\n 'rake': ['rake', 'reak'],\n 'rakesteel': ['rakesteel', 'rakestele'],\n 'rakestele': ['rakesteel', 'rakestele'],\n 'rakh': ['hark', 'khar', 'rakh'],\n 'raki': ['ikra', 'kari', 'raki'],\n 'rakish': ['rakish', 'riksha', 'shikar', 'shikra', 'sikhra'],\n 'rakit': ['kitar', 'krait', 'rakit', 'traik'],\n 'raku': ['kuar', 'raku', 'rauk'],\n 'ralf': ['farl', 'ralf'],\n 'ralliance': ['alliancer', 'ralliance'],\n 'ralline': ['ralline', 'renilla'],\n 'ram': ['arm', 'mar', 'ram'],\n 'rama': ['amar', 'amra', 'mara', 'rama'],\n 'ramada': ['armada', 'damara', 'ramada'],\n 'ramage': ['gemara', 'ramage'],\n 'ramaite': ['ametria', 'artemia', 'meratia', 'ramaite'],\n 'ramal': ['alarm', 'malar', 'maral', 'marla', 'ramal'],\n 'ramanas': ['ramanas', 'sramana'],\n 'ramate': ['ramate', 'retama'],\n 'ramble': ['ambler', 'blamer', 'lamber', 'marble', 'ramble'],\n 'rambler': ['marbler', 'rambler'],\n 'rambling': ['marbling', 'rambling'],\n 'rambo': ['broma', 'rambo'],\n 'rambutan': ['rambutan', 'tamburan'],\n 'rame': ['erma', 'mare', 'rame', 'ream'],\n 'ramed': ['armed', 'derma', 'dream', 'ramed'],\n 'rament': ['manter', 'marten', 'rament'],\n 'ramental': ['maternal', 'ramental'],\n 'ramequin': ['queriman', 'ramequin'],\n 'ramesh': ['masher', 'ramesh', 'shamer'],\n 'ramet': ['armet',\n           'mater',\n           'merat',\n           'metra',\n           'ramet',\n           'tamer',\n           'terma',\n           'trame',\n           'trema'],\n 'rami': ['amir', 'irma', 'mari', 'mira', 'rami', 'rima'],\n 'ramie': ['aimer', 'maire', 'marie', 'ramie'],\n 'ramiferous': ['armiferous', 'ramiferous'],\n 'ramigerous': ['armigerous', 'ramigerous'],\n 'ramillie': ['milliare', 'ramillie'],\n 'ramisection': ['anisometric',\n                 'creationism',\n                 'miscreation',\n                 'ramisection',\n                 'reactionism'],\n 'ramist': ['marist', 'matris', 'ramist'],\n 'ramline': ['marline', 'mineral', 'ramline'],\n 'rammel': ['lammer', 'rammel'],\n 'rammy': ['mymar', 'rammy'],\n 'ramon': ['manor', 'moran', 'norma', 'ramon', 'roman'],\n 'ramona': ['oarman', 'ramona'],\n 'ramose': ['amores', 'ramose', 'sorema'],\n 'ramosely': ['marysole', 'ramosely'],\n 'ramp': ['pram', 'ramp'],\n 'rampant': ['mantrap', 'rampant'],\n 'ramped': ['damper', 'ramped'],\n 'ramper': ['prearm', 'ramper'],\n 'rampike': ['perakim', 'permiak', 'rampike'],\n 'ramping': ['gripman', 'prigman', 'ramping'],\n 'ramsey': ['ramsey', 'smeary'],\n 'ramson': ['ramson', 'ransom'],\n 'ramtil': ['mitral', 'ramtil'],\n 'ramule': ['mauler', 'merula', 'ramule'],\n 'ramulus': ['malurus', 'ramulus'],\n 'ramus': ['musar', 'ramus', 'rusma', 'surma'],\n 'ramusi': ['misura', 'ramusi'],\n 'ran': ['arn', 'nar', 'ran'],\n 'rana': ['arna', 'rana'],\n 'ranales': ['arsenal', 'ranales'],\n 'rance': ['caner', 'crane', 'crena', 'nacre', 'rance'],\n 'rancel': ['lancer', 'rancel'],\n 'rancer': ['craner', 'rancer'],\n 'ranche': ['enarch', 'ranche'],\n 'ranchero': ['anchorer', 'ranchero', 'reanchor'],\n 'rancho': ['anchor', 'archon', 'charon', 'rancho'],\n 'rancid': ['andric', 'cardin', 'rancid'],\n 'rand': ['darn', 'nard', 'rand'],\n 'randan': ['annard', 'randan'],\n 'randem': ['damner', 'manred', 'randem', 'remand'],\n 'rander': ['darner', 'darren', 'errand', 'rander', 'redarn'],\n 'randia': ['adrian', 'andira', 'andria', 'radian', 'randia'],\n 'randing': ['darning', 'randing'],\n 'randite': ['antired', 'detrain', 'randite', 'trained'],\n 'randle': ['aldern',\n            'darnel',\n            'enlard',\n            'lander',\n            'lenard',\n            'randle',\n            'reland'],\n 'random': ['random', 'rodman'],\n 'rane': ['arne', 'earn', 'rane'],\n 'ranere': ['earner', 'ranere'],\n 'rang': ['garn', 'gnar', 'rang'],\n 'range': ['anger', 'areng', 'grane', 'range'],\n 'ranged': ['danger', 'gander', 'garden', 'ranged'],\n 'rangeless': ['largeness', 'rangeless', 'regalness'],\n 'ranger': ['garner', 'ranger'],\n 'rangey': ['anergy', 'rangey'],\n 'ranginess': ['angriness', 'ranginess'],\n 'rangle': ['angler', 'arleng', 'garnel', 'largen', 'rangle', 'regnal'],\n 'rangy': ['angry', 'rangy'],\n 'rani': ['arni', 'iran', 'nair', 'rain', 'rani'],\n 'ranid': ['darin', 'dinar', 'drain', 'indra', 'nadir', 'ranid'],\n 'ranidae': ['araneid', 'ariadne', 'ranidae'],\n 'raniform': ['nariform', 'raniform'],\n 'raninae': ['aranein', 'raninae'],\n 'ranine': ['narine', 'ranine'],\n 'rank': ['knar', 'kran', 'nark', 'rank'],\n 'ranked': ['darken', 'kanred', 'ranked'],\n 'ranker': ['ranker', 'rerank'],\n 'rankish': ['krishna', 'rankish'],\n 'rannel': ['lanner', 'rannel'],\n 'ranquel': ['quernal', 'ranquel'],\n 'ransom': ['ramson', 'ransom'],\n 'rant': ['natr', 'rant', 'tarn', 'tran'],\n 'rantepole': ['petrolean', 'rantepole'],\n 'ranter': ['arrent', 'errant', 'ranter', 'ternar'],\n 'rantipole': ['prelation', 'rantipole'],\n 'ranula': ['alraun', 'alruna', 'ranula'],\n 'rap': ['par', 'rap'],\n 'rape': ['aper', 'pare', 'pear', 'rape', 'reap'],\n 'rapeful': ['rapeful', 'upflare'],\n 'raper': ['parer', 'raper'],\n 'raphael': ['phalera', 'raphael'],\n 'raphaelic': ['eparchial', 'raphaelic'],\n 'raphe': ['hepar', 'phare', 'raphe'],\n 'raphia': ['pahari', 'pariah', 'raphia'],\n 'raphides': ['diphaser', 'parished', 'raphides', 'sephardi'],\n 'raphis': ['parish', 'raphis', 'rhapis'],\n 'rapic': ['capri', 'picra', 'rapic'],\n 'rapid': ['adrip', 'rapid'],\n 'rapidly': ['pyralid', 'rapidly'],\n 'rapier': ['pairer', 'rapier', 'repair'],\n 'rapine': ['parine', 'rapine'],\n 'raping': ['paring', 'raping'],\n 'rapparee': ['appearer', 'rapparee', 'reappear'],\n 'rappe': ['paper', 'rappe'],\n 'rappel': ['lapper', 'rappel'],\n 'rappite': ['periapt', 'rappite'],\n 'rapt': ['part', 'prat', 'rapt', 'tarp', 'trap'],\n 'raptly': ['paltry', 'partly', 'raptly'],\n 'raptor': ['parrot', 'raptor'],\n 'rapture': ['parture', 'rapture'],\n 'rare': ['rare', 'rear'],\n 'rarebit': ['arbiter', 'rarebit'],\n 'rareripe': ['rareripe', 'repairer'],\n 'rarish': ['arrish', 'harris', 'rarish', 'sirrah'],\n 'ras': ['ras', 'sar'],\n 'rasa': ['rasa', 'sara'],\n 'rascacio': ['coracias', 'rascacio'],\n 'rascal': ['lascar', 'rascal', 'sacral', 'scalar'],\n 'rase': ['arse', 'rase', 'sare', 'sear', 'sera'],\n 'rasen': ['anser', 'nares', 'rasen', 'snare'],\n 'raser': ['ersar', 'raser', 'serra'],\n 'rasher': ['rasher', 'sharer'],\n 'rashing': ['garnish', 'rashing'],\n 'rashti': ['rashti', 'tarish'],\n 'rasion': ['arsino', 'rasion', 'sonrai'],\n 'rasp': ['rasp', 'spar'],\n 'rasped': ['rasped', 'spader', 'spread'],\n 'rasper': ['parser', 'rasper', 'sparer'],\n 'rasping': ['aspring', 'rasping', 'sparing'],\n 'raspingly': ['raspingly', 'sparingly'],\n 'raspingness': ['raspingness', 'sparingness'],\n 'raspite': ['piaster', 'piastre', 'raspite', 'spirate', 'traipse'],\n 'raspy': ['raspy', 'spary', 'spray'],\n 'rasse': ['arses', 'rasse'],\n 'raster': ['arrest', 'astrer', 'raster', 'starer'],\n 'rastik': ['rastik', 'sarkit', 'straik'],\n 'rastle': ['laster',\n            'lastre',\n            'rastle',\n            'relast',\n            'resalt',\n            'salter',\n            'slater',\n            'stelar'],\n 'rastus': ['rastus', 'tarsus'],\n 'rat': ['art', 'rat', 'tar', 'tra'],\n 'rata': ['rata', 'taar', 'tara'],\n 'ratable': ['alberta', 'latebra', 'ratable'],\n 'ratal': ['altar', 'artal', 'ratal', 'talar'],\n 'ratanhia': ['ratanhia', 'rhatania'],\n 'ratbite': ['biretta', 'brattie', 'ratbite'],\n 'ratch': ['chart', 'ratch'],\n 'ratchel': ['clethra', 'latcher', 'ratchel', 'relatch', 'talcher', 'trachle'],\n 'ratcher': ['charter', 'ratcher'],\n 'ratchet': ['chatter', 'ratchet'],\n 'ratchety': ['chattery', 'ratchety', 'trachyte'],\n 'ratching': ['charting', 'ratching'],\n 'rate': ['rate', 'tare', 'tear', 'tera'],\n 'rated': ['dater', 'derat', 'detar', 'drate', 'rated', 'trade', 'tread'],\n 'ratel': ['alert', 'alter', 'artel', 'later', 'ratel', 'taler', 'telar'],\n 'rateless': ['rateless', 'tasseler', 'tearless', 'tesseral'],\n 'ratfish': ['ratfish', 'tashrif'],\n 'rath': ['hart', 'rath', 'tahr', 'thar', 'trah'],\n 'rathe': ['earth', 'hater', 'heart', 'herat', 'rathe'],\n 'rathed': ['dearth', 'hatred', 'rathed', 'thread'],\n 'rathely': ['earthly', 'heartly', 'lathery', 'rathely'],\n 'ratherest': ['ratherest', 'shatterer'],\n 'rathest': ['rathest', 'shatter'],\n 'rathite': ['hartite', 'rathite'],\n 'rathole': ['loather', 'rathole'],\n 'raticidal': ['raticidal', 'triadical'],\n 'raticide': ['ceratiid', 'raticide'],\n 'ratine': ['nerita', 'ratine', 'retain', 'retina', 'tanier'],\n 'rating': ['rating', 'tringa'],\n 'ratio': ['ariot', 'ratio'],\n 'ration': ['aroint', 'ration'],\n 'rationable': ['alboranite', 'rationable'],\n 'rational': ['notarial', 'rational', 'rotalian'],\n 'rationale': ['alienator', 'rationale'],\n 'rationalize': ['rationalize', 'realization'],\n 'rationally': ['notarially', 'rationally'],\n 'rationate': ['notariate', 'rationate'],\n 'ratitae': ['arietta', 'ratitae'],\n 'ratite': ['attire', 'ratite', 'tertia'],\n 'ratitous': ['outstair', 'ratitous'],\n 'ratlike': ['artlike', 'ratlike', 'tarlike'],\n 'ratline': ['entrail',\n             'latiner',\n             'latrine',\n             'ratline',\n             'reliant',\n             'retinal',\n             'trenail'],\n 'rattage': ['garetta', 'rattage', 'regatta'],\n 'rattan': ['rattan', 'tantra', 'tartan'],\n 'ratteen': ['entreat', 'ratteen', 'tarente', 'ternate', 'tetrane'],\n 'ratten': ['attern', 'natter', 'ratten', 'tarten'],\n 'ratti': ['ratti', 'titar', 'trait'],\n 'rattish': ['athirst', 'rattish', 'tartish'],\n 'rattle': ['artlet', 'latter', 'rattle', 'tartle', 'tatler'],\n 'rattles': ['rattles', 'slatter', 'starlet', 'startle'],\n 'rattlesome': ['rattlesome', 'saltometer'],\n 'rattly': ['rattly', 'tartly'],\n 'ratton': ['attorn', 'ratton', 'rottan'],\n 'rattus': ['astrut', 'rattus', 'stuart'],\n 'ratwood': ['ratwood', 'tarwood'],\n 'raught': ['raught', 'tughra'],\n 'rauk': ['kuar', 'raku', 'rauk'],\n 'raul': ['alur', 'laur', 'lura', 'raul', 'ural'],\n 'rauli': ['rauli', 'urali', 'urial'],\n 'raun': ['raun', 'uran', 'urna'],\n 'raunge': ['nauger', 'raunge', 'ungear'],\n 'rave': ['aver', 'rave', 'vare', 'vera'],\n 'ravel': ['arvel', 'larve', 'laver', 'ravel', 'velar'],\n 'ravelin': ['elinvar', 'ravelin', 'reanvil', 'valerin'],\n 'ravelly': ['ravelly', 'valeryl'],\n 'ravendom': ['overdamn', 'ravendom'],\n 'ravenelia': ['ravenelia', 'veneralia'],\n 'ravenish': ['enravish', 'ravenish', 'vanisher'],\n 'ravi': ['ravi', 'riva', 'vair', 'vari', 'vira'],\n 'ravigote': ['ravigote', 'rogative'],\n 'ravin': ['invar', 'ravin', 'vanir'],\n 'ravine': ['averin', 'ravine'],\n 'ravined': ['invader', 'ravined', 'viander'],\n 'raving': ['grivna', 'raving'],\n 'ravissant': ['ravissant', 'srivatsan'],\n 'raw': ['raw', 'war'],\n 'rawboned': ['downbear', 'rawboned'],\n 'rawish': ['rawish', 'wairsh', 'warish'],\n 'rax': ['arx', 'rax'],\n 'ray': ['ary', 'ray', 'yar'],\n 'raya': ['arya', 'raya'],\n 'rayan': ['aryan', 'nayar', 'rayan'],\n 'rayed': ['deary', 'deray', 'rayed', 'ready', 'yeard'],\n 'raylet': ['lyrate', 'raylet', 'realty', 'telary'],\n 'rayonnance': ['annoyancer', 'rayonnance'],\n 'raze': ['ezra', 'raze'],\n 're': ['er', 're'],\n 'rea': ['aer', 'are', 'ear', 'era', 'rea'],\n 'reaal': ['areal', 'reaal'],\n 'reabandon': ['abandoner', 'reabandon'],\n 'reabolish': ['abolisher', 'reabolish'],\n 'reabsent': ['absenter', 'reabsent'],\n 'reabsorb': ['absorber', 'reabsorb'],\n 'reaccession': ['accessioner', 'reaccession'],\n 'reaccomplish': ['accomplisher', 'reaccomplish'],\n 'reaccord': ['accorder', 'reaccord'],\n 'reaccost': ['ectosarc', 'reaccost'],\n 'reach': ['acher', 'arche', 'chare', 'chera', 'rache', 'reach'],\n 'reachieve': ['echeveria', 'reachieve'],\n 'react': ['caret',\n           'carte',\n           'cater',\n           'crate',\n           'creat',\n           'creta',\n           'react',\n           'recta',\n           'trace'],\n 'reactance': ['cancerate', 'reactance'],\n 'reaction': ['actioner', 'anerotic', 'ceration', 'creation', 'reaction'],\n 'reactional': ['creational', 'crotalinae', 'laceration', 'reactional'],\n 'reactionary': ['creationary', 'reactionary'],\n 'reactionism': ['anisometric',\n                 'creationism',\n                 'miscreation',\n                 'ramisection',\n                 'reactionism'],\n 'reactionist': ['creationist', 'reactionist'],\n 'reactive': ['creative', 'reactive'],\n 'reactively': ['creatively', 'reactively'],\n 'reactiveness': ['creativeness', 'reactiveness'],\n 'reactivity': ['creativity', 'reactivity'],\n 'reactor': ['creator', 'reactor'],\n 'read': ['ared', 'daer', 'dare', 'dear', 'read'],\n 'readapt': ['adapter', 'predata', 'readapt'],\n 'readd': ['adder', 'dread', 'readd'],\n 'readdress': ['addresser', 'readdress'],\n 'reader': ['reader', 'redare', 'reread'],\n 'reading': ['degrain', 'deraign', 'deringa', 'gradine', 'grained', 'reading'],\n 'readjust': ['adjuster', 'readjust'],\n 'readopt': ['adopter', 'protead', 'readopt'],\n 'readorn': ['adorner', 'readorn'],\n 'ready': ['deary', 'deray', 'rayed', 'ready', 'yeard'],\n 'reaffect': ['affecter', 'reaffect'],\n 'reaffirm': ['affirmer', 'reaffirm'],\n 'reafflict': ['afflicter', 'reafflict'],\n 'reagent': ['grantee', 'greaten', 'reagent', 'rentage'],\n 'reagin': ['arenig', 'earing', 'gainer', 'reagin', 'regain'],\n 'reak': ['rake', 'reak'],\n 'real': ['earl', 'eral', 'lear', 'real'],\n 'reales': ['alerse', 'leaser', 'reales', 'resale', 'reseal', 'sealer'],\n 'realest': ['realest', 'reslate', 'resteal', 'stealer', 'teasler'],\n 'realign': ['aligner', 'engrail', 'realign', 'reginal'],\n 'realignment': ['engrailment', 'realignment'],\n 'realism': ['mislear', 'realism'],\n 'realist': ['aletris', 'alister', 'listera', 'realist', 'saltier'],\n 'realistic': ['eristical', 'realistic'],\n 'reality': ['irately', 'reality'],\n 'realive': ['realive', 'valerie'],\n 'realization': ['rationalize', 'realization'],\n 'reallot': ['reallot', 'rotella', 'tallero'],\n 'reallow': ['allower', 'reallow'],\n 'reallude': ['laureled', 'reallude'],\n 'realmlet': ['realmlet', 'tremella'],\n 'realter': ['alterer', 'realter', 'relater'],\n 'realtor': ['realtor', 'relator'],\n 'realty': ['lyrate', 'raylet', 'realty', 'telary'],\n 'ream': ['erma', 'mare', 'rame', 'ream'],\n 'reamage': ['megaera', 'reamage'],\n 'reamass': ['amasser', 'reamass'],\n 'reamend': ['amender', 'meander', 'reamend', 'reedman'],\n 'reamer': ['marree', 'reamer'],\n 'reamuse': ['measure', 'reamuse'],\n 'reamy': ['mayer', 'reamy'],\n 'reanchor': ['anchorer', 'ranchero', 'reanchor'],\n 'reanneal': ['annealer', 'lernaean', 'reanneal'],\n 'reannex': ['annexer', 'reannex'],\n 'reannoy': ['annoyer', 'reannoy'],\n 'reanoint': ['anointer', 'inornate', 'nonirate', 'reanoint'],\n 'reanswer': ['answerer', 'reanswer'],\n 'reanvil': ['elinvar', 'ravelin', 'reanvil', 'valerin'],\n 'reap': ['aper', 'pare', 'pear', 'rape', 'reap'],\n 'reapdole': ['leoparde', 'reapdole'],\n 'reappeal': ['appealer', 'reappeal'],\n 'reappear': ['appearer', 'rapparee', 'reappear'],\n 'reapplaud': ['applauder', 'reapplaud'],\n 'reappoint': ['appointer', 'reappoint'],\n 'reapportion': ['apportioner', 'reapportion'],\n 'reapprehend': ['apprehender', 'reapprehend'],\n 'reapproach': ['approacher', 'reapproach'],\n 'rear': ['rare', 'rear'],\n 'reargue': ['augerer', 'reargue'],\n 'reargument': ['garmenture', 'reargument'],\n 'rearise': ['rearise', 'reraise'],\n 'rearm': ['armer', 'rearm'],\n 'rearray': ['arrayer', 'rearray'],\n 'rearrest': ['arrester', 'rearrest'],\n 'reascend': ['ascender', 'reascend'],\n 'reascent': ['reascent', 'sarcenet'],\n 'reascertain': ['ascertainer', 'reascertain', 'secretarian'],\n 'reask': ['asker', 'reask', 'saker', 'sekar'],\n 'reason': ['arseno', 'reason'],\n 'reassail': ['assailer', 'reassail'],\n 'reassault': ['assaulter', 'reassault', 'saleratus'],\n 'reassay': ['assayer', 'reassay'],\n 'reassent': ['assenter', 'reassent', 'sarsenet'],\n 'reassert': ['asserter', 'reassert'],\n 'reassign': ['assigner', 'reassign'],\n 'reassist': ['assister', 'reassist'],\n 'reassort': ['assertor', 'assorter', 'oratress', 'reassort'],\n 'reastonish': ['astonisher', 'reastonish', 'treasonish'],\n 'reasty': ['atresy', 'estray', 'reasty', 'stayer'],\n 'reasy': ['reasy', 'resay', 'sayer', 'seary'],\n 'reattach': ['attacher', 'reattach'],\n 'reattack': ['attacker', 'reattack'],\n 'reattain': ['attainer', 'reattain', 'tertiana'],\n 'reattempt': ['attempter', 'reattempt'],\n 'reattend': ['attender', 'nattered', 'reattend'],\n 'reattest': ['attester', 'reattest'],\n 'reattract': ['attracter', 'reattract'],\n 'reattraction': ['reattraction', 'retractation'],\n 'reatus': ['auster', 'reatus'],\n 'reavail': ['reavail', 'valeria'],\n 'reave': ['eaver', 'reave'],\n 'reavoid': ['avodire', 'avoider', 'reavoid'],\n 'reavouch': ['avoucher', 'reavouch'],\n 'reavow': ['avower', 'reavow'],\n 'reawait': ['awaiter', 'reawait'],\n 'reawaken': ['awakener', 'reawaken'],\n 'reaward': ['awarder', 'reaward'],\n 'reb': ['ber', 'reb'],\n 'rebab': ['barbe', 'bebar', 'breba', 'rebab'],\n 'reback': ['backer', 'reback'],\n 'rebag': ['bagre', 'barge', 'begar', 'rebag'],\n 'rebait': ['baiter', 'barite', 'rebait', 'terbia'],\n 'rebake': ['beaker', 'berake', 'rebake'],\n 'reballast': ['ballaster', 'reballast'],\n 'reballot': ['balloter', 'reballot'],\n 'reban': ['abner', 'arneb', 'reban'],\n 'rebanish': ['banisher', 'rebanish'],\n 'rebar': ['barer', 'rebar'],\n 'rebargain': ['bargainer', 'rebargain'],\n 'rebasis': ['brassie', 'rebasis'],\n 'rebate': ['beater', 'berate', 'betear', 'rebate', 'rebeat'],\n 'rebater': ['rebater', 'terebra'],\n 'rebathe': ['breathe', 'rebathe'],\n 'rebato': ['boater', 'borate', 'rebato'],\n 'rebawl': ['bawler', 'brelaw', 'rebawl', 'warble'],\n 'rebear': ['bearer', 'rebear'],\n 'rebeat': ['beater', 'berate', 'betear', 'rebate', 'rebeat'],\n 'rebeck': ['becker', 'rebeck'],\n 'rebed': ['brede', 'breed', 'rebed'],\n 'rebeg': ['gerbe', 'grebe', 'rebeg'],\n 'rebeggar': ['beggarer', 'rebeggar'],\n 'rebegin': ['bigener', 'rebegin'],\n 'rebehold': ['beholder', 'rebehold'],\n 'rebellow': ['bellower', 'rebellow'],\n 'rebelly': ['bellyer', 'rebelly'],\n 'rebelong': ['belonger', 'rebelong'],\n 'rebend': ['bender', 'berend', 'rebend'],\n 'rebenefit': ['benefiter', 'rebenefit'],\n 'rebeset': ['besteer', 'rebeset'],\n 'rebestow': ['bestower', 'rebestow'],\n 'rebetray': ['betrayer', 'eatberry', 'rebetray', 'teaberry'],\n 'rebewail': ['bewailer', 'rebewail'],\n 'rebia': ['barie', 'beira', 'erbia', 'rebia'],\n 'rebias': ['braise', 'rabies', 'rebias'],\n 'rebid': ['bider', 'bredi', 'bride', 'rebid'],\n 'rebill': ['biller', 'rebill'],\n 'rebillet': ['billeter', 'rebillet'],\n 'rebind': ['binder', 'inbred', 'rebind'],\n 'rebirth': ['brither', 'rebirth'],\n 'rebite': ['bertie', 'betire', 'rebite'],\n 'reblade': ['bleared', 'reblade'],\n 'reblast': ['blaster', 'reblast', 'stabler'],\n 'rebleach': ['bleacher', 'rebleach'],\n 'reblend': ['blender', 'reblend'],\n 'rebless': ['blesser', 'rebless'],\n 'reblock': ['blocker', 'brockle', 'reblock'],\n 'rebloom': ['bloomer', 'rebloom'],\n 'reblot': ['bolter', 'orblet', 'reblot', 'rebolt'],\n 'reblow': ['blower', 'bowler', 'reblow', 'worble'],\n 'reblue': ['brulee', 'burele', 'reblue'],\n 'rebluff': ['bluffer', 'rebluff'],\n 'reblunder': ['blunderer', 'reblunder'],\n 'reboant': ['baronet', 'reboant'],\n 'reboantic': ['bicornate', 'carbonite', 'reboantic'],\n 'reboard': ['arbored', 'boarder', 'reboard'],\n 'reboast': ['barotse', 'boaster', 'reboast', 'sorbate'],\n 'reboil': ['boiler', 'reboil'],\n 'rebold': ['belord', 'bordel', 'rebold'],\n 'rebolt': ['bolter', 'orblet', 'reblot', 'rebolt'],\n 'rebone': ['boreen', 'enrobe', 'neebor', 'rebone'],\n 'rebook': ['booker', 'brooke', 'rebook'],\n 'rebop': ['probe', 'rebop'],\n 'rebore': ['rebore', 'rerobe'],\n 'reborrow': ['borrower', 'reborrow'],\n 'rebound': ['beround', 'bounder', 'rebound', 'unbored', 'unorbed', 'unrobed'],\n 'rebounder': ['rebounder', 'underrobe'],\n 'rebox': ['boxer', 'rebox'],\n 'rebrace': ['cerebra', 'rebrace'],\n 'rebraid': ['braider', 'rebraid'],\n 'rebranch': ['brancher', 'rebranch'],\n 'rebrand': ['bernard', 'brander', 'rebrand'],\n 'rebrandish': ['brandisher', 'rebrandish'],\n 'rebreed': ['breeder', 'rebreed'],\n 'rebrew': ['brewer', 'rebrew'],\n 'rebribe': ['berberi', 'rebribe'],\n 'rebring': ['bringer', 'rebring'],\n 'rebroach': ['broacher', 'rebroach'],\n 'rebroadcast': ['broadcaster', 'rebroadcast'],\n 'rebrown': ['browner', 'rebrown'],\n 'rebrush': ['brusher', 'rebrush'],\n 'rebud': ['bedur', 'rebud', 'redub'],\n 'rebudget': ['budgeter', 'rebudget'],\n 'rebuff': ['buffer', 'rebuff'],\n 'rebuffet': ['buffeter', 'rebuffet'],\n 'rebuild': ['builder', 'rebuild'],\n 'rebulk': ['bulker', 'rebulk'],\n 'rebunch': ['buncher', 'rebunch'],\n 'rebundle': ['blendure', 'rebundle'],\n 'reburden': ['burdener', 'reburden'],\n 'reburn': ['burner', 'reburn'],\n 'reburnish': ['burnisher', 'reburnish'],\n 'reburst': ['burster', 'reburst'],\n 'rebus': ['burse', 'rebus', 'suber'],\n 'rebush': ['busher', 'rebush'],\n 'rebut': ['brute', 'buret', 'rebut', 'tuber'],\n 'rebute': ['rebute', 'retube'],\n 'rebuttal': ['burletta', 'rebuttal'],\n 'rebutton': ['buttoner', 'rebutton'],\n 'rebuy': ['buyer', 'rebuy'],\n 'recalk': ['calker', 'lacker', 'rackle', 'recalk', 'reckla'],\n 'recall': ['caller', 'cellar', 'recall'],\n 'recampaign': ['campaigner', 'recampaign'],\n 'recancel': ['canceler', 'clarence', 'recancel'],\n 'recant': ['canter',\n            'creant',\n            'cretan',\n            'nectar',\n            'recant',\n            'tanrec',\n            'trance'],\n 'recantation': ['recantation', 'triacontane'],\n 'recanter': ['canterer', 'recanter', 'recreant', 'terrance'],\n 'recap': ['caper', 'crape', 'pacer', 'perca', 'recap'],\n 'recaption': ['preaction', 'precation', 'recaption'],\n 'recarpet': ['pretrace', 'recarpet'],\n 'recart': ['arrect', 'carter', 'crater', 'recart', 'tracer'],\n 'recase': ['cesare', 'crease', 'recase', 'searce'],\n 'recash': ['arches', 'chaser', 'eschar', 'recash', 'search'],\n 'recast': ['carest', 'caster', 'recast'],\n 'recatch': ['catcher', 'recatch'],\n 'recede': ['decree', 'recede'],\n 'recedent': ['centered', 'decenter', 'decentre', 'recedent'],\n 'receder': ['decreer', 'receder'],\n 'receipt': ['ereptic', 'precite', 'receipt'],\n 'receiptor': ['procerite', 'receiptor'],\n 'receivables': ['receivables', 'serviceable'],\n 'received': ['deceiver', 'received'],\n 'recement': ['cementer', 'cerement', 'recement'],\n 'recension': ['ninescore', 'recension'],\n 'recensionist': ['intercession', 'recensionist'],\n 'recent': ['center', 'recent', 'tenrec'],\n 'recenter': ['centerer', 'recenter', 'recentre', 'terrence'],\n 'recentre': ['centerer', 'recenter', 'recentre', 'terrence'],\n 'reception': ['prenotice', 'reception'],\n 'receptoral': ['praelector', 'receptoral'],\n 'recess': ['cesser', 'recess'],\n 'rechain': ['chainer', 'enchair', 'rechain'],\n 'rechal': ['rachel', 'rechal'],\n 'rechamber': ['chamberer', 'rechamber'],\n 'rechange': ['encharge', 'rechange'],\n 'rechant': ['chanter', 'rechant'],\n 'rechar': ['archer', 'charer', 'rechar'],\n 'recharter': ['charterer', 'recharter'],\n 'rechase': ['archsee', 'rechase'],\n 'rechaser': ['rechaser', 'research', 'searcher'],\n 'rechasten': ['chastener', 'rechasten'],\n 'rechaw': ['chawer', 'rechaw'],\n 'recheat': ['cheater', 'hectare', 'recheat', 'reteach', 'teacher'],\n 'recheck': ['checker', 'recheck'],\n 'recheer': ['cheerer', 'recheer'],\n 'rechew': ['chewer', 'rechew'],\n 'rechip': ['cipher', 'rechip'],\n 'rechisel': ['chiseler', 'rechisel'],\n 'rechristen': ['christener', 'rechristen'],\n 'rechuck': ['chucker', 'rechuck'],\n 'recidivous': ['recidivous', 'veridicous'],\n 'recipe': ['piecer', 'pierce', 'recipe'],\n 'recipiend': ['perdicine', 'recipiend'],\n 'recipient': ['princeite', 'recipient'],\n 'reciprocate': ['carpocerite', 'reciprocate'],\n 'recirculate': ['clericature', 'recirculate'],\n 'recision': ['recision', 'soricine'],\n 'recital': ['article', 'recital'],\n 'recitativo': ['recitativo', 'victoriate'],\n 'recite': ['cerite', 'certie', 'recite', 'tierce'],\n 'recitement': ['centimeter', 'recitement', 'remittence'],\n 'reckla': ['calker', 'lacker', 'rackle', 'recalk', 'reckla'],\n 'reckless': ['clerkess', 'reckless'],\n 'reckling': ['clerking', 'reckling'],\n 'reckon': ['conker', 'reckon'],\n 'reclaim': ['claimer', 'miracle', 'reclaim'],\n 'reclaimer': ['calmierer', 'reclaimer'],\n 'reclama': ['cameral', 'caramel', 'carmela', 'ceramal', 'reclama'],\n 'reclang': ['cangler', 'glancer', 'reclang'],\n 'reclasp': ['clasper', 'reclasp', 'scalper'],\n 'reclass': ['carless', 'classer', 'reclass'],\n 'reclean': ['cleaner', 'reclean'],\n 'reclear': ['clearer', 'reclear'],\n 'reclimb': ['climber', 'reclimb'],\n 'reclinate': ['intercale', 'interlace', 'lacertine', 'reclinate'],\n 'reclinated': ['credential', 'interlaced', 'reclinated'],\n 'recluse': ['luceres', 'recluse'],\n 'recluseness': ['censureless', 'recluseness'],\n 'reclusion': ['cornelius', 'inclosure', 'reclusion'],\n 'reclusive': ['reclusive', 'versicule'],\n 'recoach': ['caroche', 'coacher', 'recoach'],\n 'recoal': ['carole', 'coaler', 'coelar', 'oracle', 'recoal'],\n 'recoast': ['coaster', 'recoast'],\n 'recoat': ['coater', 'recoat'],\n 'recock': ['cocker', 'recock'],\n 'recoil': ['coiler', 'recoil'],\n 'recoilment': ['clinometer', 'recoilment'],\n 'recoin': ['cerion', 'coiner', 'neroic', 'orcein', 'recoin'],\n 'recoinage': ['aerogenic', 'recoinage'],\n 'recollate': ['electoral', 'recollate'],\n 'recollation': ['collationer', 'recollation'],\n 'recollection': ['collectioner', 'recollection'],\n 'recollet': ['colleter', 'coteller', 'coterell', 'recollet'],\n 'recolor': ['colorer', 'recolor'],\n 'recomb': ['comber', 'recomb'],\n 'recomfort': ['comforter', 'recomfort'],\n 'recommand': ['commander', 'recommand'],\n 'recommend': ['commender', 'recommend'],\n 'recommission': ['commissioner', 'recommission'],\n 'recompact': ['compacter', 'recompact'],\n 'recompass': ['compasser', 'recompass'],\n 'recompetition': ['competitioner', 'recompetition'],\n 'recomplain': ['complainer', 'procnemial', 'recomplain'],\n 'recompound': ['compounder', 'recompound'],\n 'recomprehend': ['comprehender', 'recomprehend'],\n 'recon': ['coner', 'crone', 'recon'],\n 'reconceal': ['concealer', 'reconceal'],\n 'reconcert': ['concreter', 'reconcert'],\n 'reconcession': ['concessioner', 'reconcession'],\n 'reconcoct': ['concocter', 'reconcoct'],\n 'recondemn': ['condemner', 'recondemn'],\n 'recondensation': ['nondesecration', 'recondensation'],\n 'recondition': ['conditioner', 'recondition'],\n 'reconfer': ['confrere', 'enforcer', 'reconfer'],\n 'reconfess': ['confesser', 'reconfess'],\n 'reconfirm': ['confirmer', 'reconfirm'],\n 'reconform': ['conformer', 'reconform'],\n 'reconfound': ['confounder', 'reconfound'],\n 'reconfront': ['confronter', 'reconfront'],\n 'recongeal': ['congealer', 'recongeal'],\n 'reconjoin': ['conjoiner', 'reconjoin'],\n 'reconnect': ['concenter', 'reconnect'],\n 'reconnoiter': ['reconnoiter', 'reconnoitre'],\n 'reconnoitre': ['reconnoiter', 'reconnoitre'],\n 'reconsent': ['consenter', 'nonsecret', 'reconsent'],\n 'reconsider': ['considerer', 'reconsider'],\n 'reconsign': ['consigner', 'reconsign'],\n 'reconstitution': ['constitutioner', 'reconstitution'],\n 'reconstruct': ['constructer', 'reconstruct'],\n 'reconsult': ['consulter', 'reconsult'],\n 'recontend': ['contender', 'recontend'],\n 'recontest': ['contester', 'recontest'],\n 'recontinue': ['recontinue', 'unctioneer'],\n 'recontract': ['contracter', 'correctant', 'recontract'],\n 'reconvention': ['conventioner', 'reconvention'],\n 'reconvert': ['converter', 'reconvert'],\n 'reconvey': ['conveyer', 'reconvey'],\n 'recook': ['cooker', 'recook'],\n 'recool': ['cooler', 'recool'],\n 'recopper': ['copperer', 'recopper'],\n 'recopyright': ['copyrighter', 'recopyright'],\n 'record': ['corder', 'record'],\n 'recordation': ['corrodentia', 'recordation'],\n 'recork': ['corker', 'recork', 'rocker'],\n 'recorrection': ['correctioner', 'recorrection'],\n 'recorrupt': ['corrupter', 'recorrupt'],\n 'recounsel': ['enclosure', 'recounsel'],\n 'recount': ['cornute', 'counter', 'recount', 'trounce'],\n 'recountal': ['nucleator', 'recountal'],\n 'recoup': ['couper', 'croupe', 'poucer', 'recoup'],\n 'recourse': ['recourse', 'resource'],\n 'recover': ['coverer', 'recover'],\n 'recramp': ['cramper', 'recramp'],\n 'recrank': ['cranker', 'recrank'],\n 'recrate': ['caterer', 'recrate', 'retrace', 'terrace'],\n 'recreant': ['canterer', 'recanter', 'recreant', 'terrance'],\n 'recredit': ['cedriret', 'directer', 'recredit', 'redirect'],\n 'recrew': ['crewer', 'recrew'],\n 'recrimination': ['intermorainic', 'recrimination'],\n 'recroon': ['coroner', 'crooner', 'recroon'],\n 'recross': ['crosser', 'recross'],\n 'recrowd': ['crowder', 'recrowd'],\n 'recrown': ['crowner', 'recrown'],\n 'recrudency': ['decurrency', 'recrudency'],\n 'recruital': ['curtailer', 'recruital', 'reticular'],\n 'recrush': ['crusher', 'recrush'],\n 'recta': ['caret',\n           'carte',\n           'cater',\n           'crate',\n           'creat',\n           'creta',\n           'react',\n           'recta',\n           'trace'],\n 'rectal': ['carlet', 'cartel', 'claret', 'rectal', 'talcer'],\n 'rectalgia': ['cartilage', 'rectalgia'],\n 'recti': ['citer', 'recti', 'ticer', 'trice'],\n 'rectifiable': ['certifiable', 'rectifiable'],\n 'rectification': ['certification', 'cretification', 'rectification'],\n 'rectificative': ['certificative', 'rectificative'],\n 'rectificator': ['certificator', 'rectificator'],\n 'rectificatory': ['certificatory', 'rectificatory'],\n 'rectified': ['certified', 'rectified'],\n 'rectifier': ['certifier', 'rectifier'],\n 'rectify': ['certify', 'cretify', 'rectify'],\n 'rection': ['cerotin', 'cointer', 'cotrine', 'cretion', 'noticer', 'rection'],\n 'rectitude': ['certitude', 'rectitude'],\n 'rectoress': ['crosstree', 'rectoress'],\n 'rectorship': ['cristopher', 'rectorship'],\n 'rectotome': ['octometer', 'rectotome', 'tocometer'],\n 'rectovesical': ['rectovesical', 'vesicorectal'],\n 'recur': ['curer', 'recur'],\n 'recurl': ['curler', 'recurl'],\n 'recurse': ['recurse', 'rescuer', 'securer'],\n 'recurtain': ['recurtain', 'unerratic'],\n 'recurvation': ['countervair', 'overcurtain', 'recurvation'],\n 'recurvous': ['recurvous', 'verrucous'],\n 'recusance': ['recusance', 'securance'],\n 'recusant': ['etruscan', 'recusant'],\n 'recusation': ['nectarious', 'recusation'],\n 'recusator': ['craterous', 'recusator'],\n 'recuse': ['cereus', 'ceruse', 'recuse', 'rescue', 'secure'],\n 'recut': ['cruet', 'eruct', 'recut', 'truce'],\n 'red': ['erd', 'red'],\n 'redact': ['cedrat', 'decart', 'redact'],\n 'redaction': ['citronade', 'endaortic', 'redaction'],\n 'redactional': ['declaration', 'redactional'],\n 'redamage': ['dreamage', 'redamage'],\n 'redan': ['andre', 'arend', 'daren', 'redan'],\n 'redare': ['reader', 'redare', 'reread'],\n 'redarken': ['darkener', 'redarken'],\n 'redarn': ['darner', 'darren', 'errand', 'rander', 'redarn'],\n 'redart': ['darter',\n            'dartre',\n            'redart',\n            'retard',\n            'retrad',\n            'tarred',\n            'trader'],\n 'redate': ['derate', 'redate'],\n 'redaub': ['dauber', 'redaub'],\n 'redawn': ['andrew', 'redawn', 'wander', 'warden'],\n 'redbait': ['redbait', 'tribade'],\n 'redbud': ['budder', 'redbud'],\n 'redcoat': ['cordate', 'decator', 'redcoat'],\n 'redden': ['nedder', 'redden'],\n 'reddingite': ['digredient', 'reddingite'],\n 'rede': ['deer', 'dere', 'dree', 'rede', 'reed'],\n 'redeal': ['dealer', 'leader', 'redeal', 'relade', 'relead'],\n 'redeck': ['decker', 'redeck'],\n 'redeed': ['redeed', 'reeded'],\n 'redeem': ['deemer', 'meered', 'redeem', 'remede'],\n 'redefault': ['defaulter', 'redefault'],\n 'redefeat': ['defeater', 'federate', 'redefeat'],\n 'redefine': ['needfire', 'redefine'],\n 'redeflect': ['redeflect', 'reflected'],\n 'redelay': ['delayer', 'layered', 'redelay'],\n 'redeliver': ['deliverer', 'redeliver'],\n 'redemand': ['demander', 'redemand'],\n 'redemolish': ['demolisher', 'redemolish'],\n 'redeny': ['redeny', 'yender'],\n 'redepend': ['depender', 'redepend'],\n 'redeprive': ['prederive', 'redeprive'],\n 'rederivation': ['rederivation', 'veratroidine'],\n 'redescend': ['descender', 'redescend'],\n 'redescription': ['prediscretion', 'redescription'],\n 'redesign': ['designer', 'redesign', 'resigned'],\n 'redesman': ['redesman', 'seamrend'],\n 'redetect': ['detecter', 'redetect'],\n 'redevelop': ['developer', 'redevelop'],\n 'redfin': ['finder', 'friend', 'redfin', 'refind'],\n 'redhoop': ['redhoop', 'rhodope'],\n 'redia': ['aider', 'deair', 'irade', 'redia'],\n 'redient': ['nitered', 'redient', 'teinder'],\n 'redig': ['dirge', 'gride', 'redig', 'ridge'],\n 'redigest': ['digester', 'redigest'],\n 'rediminish': ['diminisher', 'rediminish'],\n 'redintegrator': ['redintegrator', 'retrogradient'],\n 'redip': ['pride', 'pried', 'redip'],\n 'redirect': ['cedriret', 'directer', 'recredit', 'redirect'],\n 'redisable': ['desirable', 'redisable'],\n 'redisappear': ['disappearer', 'redisappear'],\n 'rediscount': ['discounter', 'rediscount'],\n 'rediscover': ['discoverer', 'rediscover'],\n 'rediscuss': ['discusser', 'rediscuss'],\n 'redispatch': ['dispatcher', 'redispatch'],\n 'redisplay': ['displayer', 'redisplay'],\n 'redispute': ['disrepute', 'redispute'],\n 'redistend': ['dendrites', 'distender', 'redistend'],\n 'redistill': ['distiller', 'redistill'],\n 'redistinguish': ['distinguisher', 'redistinguish'],\n 'redistrain': ['distrainer', 'redistrain'],\n 'redisturb': ['disturber', 'redisturb'],\n 'redive': ['derive', 'redive'],\n 'redivert': ['diverter', 'redivert', 'verditer'],\n 'redleg': ['gelder', 'ledger', 'redleg'],\n 'redlegs': ['redlegs', 'sledger'],\n 'redo': ['doer', 'redo', 'rode', 'roed'],\n 'redock': ['corked', 'docker', 'redock'],\n 'redolent': ['redolent', 'rondelet'],\n 'redoom': ['doomer', 'mooder', 'redoom', 'roomed'],\n 'redoubling': ['bouldering', 'redoubling'],\n 'redoubt': ['doubter', 'obtrude', 'outbred', 'redoubt'],\n 'redound': ['redound', 'rounded', 'underdo'],\n 'redowa': ['redowa', 'woader'],\n 'redraft': ['drafter', 'redraft'],\n 'redrag': ['darger', 'gerard', 'grader', 'redrag', 'regard'],\n 'redraw': ['drawer', 'redraw', 'reward', 'warder'],\n 'redrawer': ['redrawer', 'rewarder', 'warderer'],\n 'redream': ['dreamer', 'redream'],\n 'redress': ['dresser', 'redress'],\n 'redrill': ['driller', 'redrill'],\n 'redrive': ['deriver', 'redrive', 'rivered'],\n 'redry': ['derry', 'redry', 'ryder'],\n 'redtail': ['dilater', 'lardite', 'redtail'],\n 'redtop': ['deport', 'ported', 'redtop'],\n 'redub': ['bedur', 'rebud', 'redub'],\n 'reductant': ['reductant', 'traducent', 'truncated'],\n 'reduction': ['introduce', 'reduction'],\n 'reductional': ['radiolucent', 'reductional'],\n 'redue': ['redue', 'urdee'],\n 'redunca': ['durance', 'redunca', 'unraced'],\n 'redwithe': ['redwithe', 'withered'],\n 'redye': ['redye', 'reedy'],\n 'ree': ['eer', 'ere', 'ree'],\n 'reechy': ['cheery', 'reechy'],\n 'reed': ['deer', 'dere', 'dree', 'rede', 'reed'],\n 'reeded': ['redeed', 'reeded'],\n 'reeden': ['endere', 'needer', 'reeden'],\n 'reedily': ['reedily', 'reyield', 'yielder'],\n 'reeding': ['energid', 'reeding'],\n 'reedling': ['engirdle', 'reedling'],\n 'reedman': ['amender', 'meander', 'reamend', 'reedman'],\n 'reedwork': ['reedwork', 'reworked'],\n 'reedy': ['redye', 'reedy'],\n 'reef': ['feer', 'free', 'reef'],\n 'reefing': ['feering', 'feigner', 'freeing', 'reefing', 'refeign'],\n 'reek': ['eker', 'reek'],\n 'reel': ['leer', 'reel'],\n 'reeler': ['reeler', 'rereel'],\n 'reelingly': ['leeringly', 'reelingly'],\n 'reem': ['mere', 'reem'],\n 'reeming': ['reeming', 'regimen'],\n 'reen': ['erne', 'neer', 'reen'],\n 'reenge': ['neeger', 'reenge', 'renege'],\n 'rees': ['erse', 'rees', 'seer', 'sere'],\n 'reese': ['esere', 'reese', 'resee'],\n 'reesk': ['esker', 'keres', 'reesk', 'seker', 'skeer', 'skere'],\n 'reest': ['ester',\n           'estre',\n           'reest',\n           'reset',\n           'steer',\n           'stere',\n           'stree',\n           'terse',\n           'tsere'],\n 'reester': ['reester', 'steerer'],\n 'reestle': ['reestle', 'resteel', 'steeler'],\n 'reesty': ['reesty', 'yester'],\n 'reet': ['reet', 'teer', 'tree'],\n 'reetam': ['reetam', 'retame', 'teamer'],\n 'reeveland': ['landreeve', 'reeveland'],\n 'refall': ['faller', 'refall'],\n 'refashion': ['fashioner', 'refashion'],\n 'refasten': ['fastener', 'fenestra', 'refasten'],\n 'refavor': ['favorer', 'overfar', 'refavor'],\n 'refeed': ['feeder', 'refeed'],\n 'refeel': ['feeler', 'refeel', 'reflee'],\n 'refeign': ['feering', 'feigner', 'freeing', 'reefing', 'refeign'],\n 'refel': ['fleer', 'refel'],\n 'refer': ['freer', 'refer'],\n 'referment': ['fermenter', 'referment'],\n 'refetch': ['fetcher', 'refetch'],\n 'refight': ['fighter', 'freight', 'refight'],\n 'refill': ['filler', 'refill'],\n 'refilter': ['filterer', 'refilter'],\n 'refinable': ['inferable', 'refinable'],\n 'refind': ['finder', 'friend', 'redfin', 'refind'],\n 'refine': ['ferine', 'refine'],\n 'refined': ['definer', 'refined'],\n 'refiner': ['refiner', 'reinfer'],\n 'refinger': ['fingerer', 'refinger'],\n 'refining': ['infringe', 'refining'],\n 'refinish': ['finisher', 'refinish'],\n 'refit': ['freit', 'refit'],\n 'refix': ['fixer', 'refix'],\n 'reflash': ['flasher', 'reflash'],\n 'reflected': ['redeflect', 'reflected'],\n 'reflee': ['feeler', 'refeel', 'reflee'],\n 'refling': ['ferling', 'flinger', 'refling'],\n 'refloat': ['floater', 'florate', 'refloat'],\n 'reflog': ['golfer', 'reflog'],\n 'reflood': ['flooder', 'reflood'],\n 'refloor': ['floorer', 'refloor'],\n 'reflourish': ['flourisher', 'reflourish'],\n 'reflow': ['flower', 'fowler', 'reflow', 'wolfer'],\n 'reflower': ['flowerer', 'reflower'],\n 'reflush': ['flusher', 'reflush'],\n 'reflux': ['fluxer', 'reflux'],\n 'refluxed': ['flexured', 'refluxed'],\n 'refly': ['ferly', 'flyer', 'refly'],\n 'refocus': ['focuser', 'refocus'],\n 'refold': ['folder', 'refold'],\n 'refoment': ['fomenter', 'refoment'],\n 'refoot': ['footer', 'refoot'],\n 'reforecast': ['forecaster', 'reforecast'],\n 'reforest': ['forester', 'fosterer', 'reforest'],\n 'reforfeit': ['forfeiter', 'reforfeit'],\n 'reform': ['former', 'reform'],\n 'reformado': ['doorframe', 'reformado'],\n 'reformed': ['deformer', 'reformed'],\n 'reformism': ['misreform', 'reformism'],\n 'reformist': ['reformist', 'restiform'],\n 'reforward': ['forwarder', 'reforward'],\n 'refound': ['founder', 'refound'],\n 'refoundation': ['foundationer', 'refoundation'],\n 'refreshen': ['freshener', 'refreshen'],\n 'refrighten': ['frightener', 'refrighten'],\n 'refront': ['fronter', 'refront'],\n 'reft': ['fret', 'reft', 'tref'],\n 'refuel': ['ferule', 'fueler', 'refuel'],\n 'refund': ['funder', 'refund'],\n 'refurbish': ['furbisher', 'refurbish'],\n 'refurl': ['furler', 'refurl'],\n 'refurnish': ['furnisher', 'refurnish'],\n 'refusingly': ['refusingly', 'syringeful'],\n 'refutal': ['faulter', 'refutal', 'tearful'],\n 'refute': ['fuerte', 'refute'],\n 'reg': ['erg', 'ger', 'reg'],\n 'regain': ['arenig', 'earing', 'gainer', 'reagin', 'regain'],\n 'regal': ['argel', 'ergal', 'garle', 'glare', 'lager', 'large', 'regal'],\n 'regalia': ['lairage', 'railage', 'regalia'],\n 'regalian': ['algerian', 'geranial', 'regalian'],\n 'regalist': ['glaister', 'regalist'],\n 'regallop': ['galloper', 'regallop'],\n 'regally': ['allergy', 'gallery', 'largely', 'regally'],\n 'regalness': ['largeness', 'rangeless', 'regalness'],\n 'regard': ['darger', 'gerard', 'grader', 'redrag', 'regard'],\n 'regarnish': ['garnisher', 'regarnish'],\n 'regather': ['gatherer', 'regather'],\n 'regatta': ['garetta', 'rattage', 'regatta'],\n 'regelate': ['eglatere', 'regelate', 'relegate'],\n 'regelation': ['regelation', 'relegation'],\n 'regenesis': ['energesis', 'regenesis'],\n 'regent': ['gerent', 'regent'],\n 'reges': ['reges', 'serge'],\n 'reget': ['egret', 'greet', 'reget'],\n 'regga': ['agger', 'gager', 'regga'],\n 'reggie': ['greige', 'reggie'],\n 'regia': ['geira', 'regia'],\n 'regild': ['gilder', 'girdle', 'glider', 'regild', 'ridgel'],\n 'regill': ['giller', 'grille', 'regill'],\n 'regimen': ['reeming', 'regimen'],\n 'regimenal': ['margeline', 'regimenal'],\n 'regin': ['grein', 'inger', 'nigre', 'regin', 'reign', 'ringe'],\n 'reginal': ['aligner', 'engrail', 'realign', 'reginal'],\n 'reginald': ['dragline', 'reginald', 'ringlead'],\n 'region': ['ignore', 'region'],\n 'regional': ['geraniol', 'regional'],\n 'registered': ['deregister', 'registered'],\n 'registerer': ['registerer', 'reregister'],\n 'regive': ['grieve', 'regive'],\n 'regladden': ['gladdener', 'glandered', 'regladden'],\n 'reglair': ['grailer', 'reglair'],\n 'regle': ['leger', 'regle'],\n 'reglet': ['gretel', 'reglet'],\n 'regloss': ['glosser', 'regloss'],\n 'reglove': ['overleg', 'reglove'],\n 'reglow': ['glower', 'reglow'],\n 'regma': ['grame', 'marge', 'regma'],\n 'regnal': ['angler', 'arleng', 'garnel', 'largen', 'rangle', 'regnal'],\n 'regraft': ['grafter', 'regraft'],\n 'regrant': ['granter', 'regrant'],\n 'regrasp': ['grasper', 'regrasp', 'sparger'],\n 'regrass': ['grasser', 'regrass'],\n 'regrate': ['greater', 'regrate', 'terrage'],\n 'regrating': ['gartering', 'regrating'],\n 'regrator': ['garroter', 'regrator'],\n 'regreen': ['greener', 'regreen', 'reneger'],\n 'regreet': ['greeter', 'regreet'],\n 'regrind': ['grinder', 'regrind'],\n 'regrinder': ['derringer', 'regrinder'],\n 'regrip': ['griper', 'regrip'],\n 'regroup': ['grouper', 'regroup'],\n 'regrow': ['grower', 'regrow'],\n 'reguard': ['guarder', 'reguard'],\n 'regula': ['ragule', 'regula'],\n 'regulation': ['regulation', 'urogenital'],\n 'reguli': ['ligure', 'reguli'],\n 'regur': ['regur', 'urger'],\n 'regush': ['gusher', 'regush'],\n 'reh': ['her', 'reh', 'rhe'],\n 'rehale': ['healer', 'rehale', 'reheal'],\n 'rehallow': ['hallower', 'rehallow'],\n 'rehammer': ['hammerer', 'rehammer'],\n 'rehang': ['hanger', 'rehang'],\n 'reharden': ['hardener', 'reharden'],\n 'reharm': ['harmer', 'reharm'],\n 'reharness': ['harnesser', 'reharness'],\n 'reharrow': ['harrower', 'reharrow'],\n 'reharvest': ['harvester', 'reharvest'],\n 'rehash': ['hasher', 'rehash'],\n 'rehaul': ['hauler', 'rehaul'],\n 'rehazard': ['hazarder', 'rehazard'],\n 'rehead': ['adhere', 'header', 'hedera', 'rehead'],\n 'reheal': ['healer', 'rehale', 'reheal'],\n 'reheap': ['heaper', 'reheap'],\n 'rehear': ['hearer', 'rehear'],\n 'rehearser': ['rehearser', 'reshearer'],\n 'rehearten': ['heartener', 'rehearten'],\n 'reheat': ['heater', 'hereat', 'reheat'],\n 'reheel': ['heeler', 'reheel'],\n 'reheighten': ['heightener', 'reheighten'],\n 'rehoist': ['hoister', 'rehoist'],\n 'rehollow': ['hollower', 'rehollow'],\n 'rehonor': ['honorer', 'rehonor'],\n 'rehook': ['hooker', 'rehook'],\n 'rehoop': ['hooper', 'rehoop'],\n 'rehung': ['hunger', 'rehung'],\n 'reid': ['dier', 'dire', 'reid', 'ride'],\n 'reif': ['fire', 'reif', 'rife'],\n 'reify': ['fiery', 'reify'],\n 'reign': ['grein', 'inger', 'nigre', 'regin', 'reign', 'ringe'],\n 'reignore': ['erigeron', 'reignore'],\n 'reillustrate': ['reillustrate', 'ultrasterile'],\n 'reim': ['emir', 'imer', 'mire', 'reim', 'remi', 'riem', 'rime'],\n 'reimbody': ['embryoid', 'reimbody'],\n 'reimpart': ['imparter', 'reimpart'],\n 'reimplant': ['implanter', 'reimplant'],\n 'reimply': ['primely', 'reimply'],\n 'reimport': ['importer', 'promerit', 'reimport'],\n 'reimpose': ['perisome', 'promisee', 'reimpose'],\n 'reimpress': ['impresser', 'reimpress'],\n 'reimpression': ['reimpression', 'repermission'],\n 'reimprint': ['imprinter', 'reimprint'],\n 'reimprison': ['imprisoner', 'reimprison'],\n 'rein': ['neri', 'rein', 'rine'],\n 'reina': ['erian', 'irena', 'reina'],\n 'reincentive': ['internecive', 'reincentive'],\n 'reincite': ['icterine', 'reincite'],\n 'reincrudate': ['antireducer', 'reincrudate', 'untraceried'],\n 'reindeer': ['denierer', 'reindeer'],\n 'reindict': ['indicter', 'indirect', 'reindict'],\n 'reindue': ['reindue', 'uredine'],\n 'reinfect': ['frenetic', 'infecter', 'reinfect'],\n 'reinfer': ['refiner', 'reinfer'],\n 'reinfest': ['infester', 'reinfest'],\n 'reinflate': ['interleaf', 'reinflate'],\n 'reinflict': ['inflicter', 'reinflict'],\n 'reinform': ['informer', 'reinform', 'reniform'],\n 'reinhabit': ['inhabiter', 'reinhabit'],\n 'reins': ['reins', 'resin', 'rinse', 'risen', 'serin', 'siren'],\n 'reinsane': ['anserine', 'reinsane'],\n 'reinsert': ['inserter', 'reinsert'],\n 'reinsist': ['insister', 'reinsist', 'sinister', 'sisterin'],\n 'reinspect': ['prescient', 'reinspect'],\n 'reinspector': ['prosecretin', 'reinspector'],\n 'reinspirit': ['inspiriter', 'reinspirit'],\n 'reinstall': ['installer', 'reinstall'],\n 'reinstation': ['reinstation', 'santorinite'],\n 'reinstill': ['instiller', 'reinstill'],\n 'reinstruct': ['instructer', 'intercrust', 'reinstruct'],\n 'reinsult': ['insulter', 'lustrine', 'reinsult'],\n 'reintend': ['indenter', 'intender', 'reintend'],\n 'reinter': ['reinter', 'terrine'],\n 'reinterest': ['interester', 'reinterest'],\n 'reinterpret': ['interpreter', 'reinterpret'],\n 'reinterrupt': ['interrupter', 'reinterrupt'],\n 'reinterview': ['interviewer', 'reinterview'],\n 'reintrench': ['intrencher', 'reintrench'],\n 'reintrude': ['reintrude', 'unretired'],\n 'reinvent': ['inventer', 'reinvent', 'ventrine', 'vintener'],\n 'reinvert': ['inverter', 'reinvert', 'trinerve'],\n 'reinvest': ['reinvest', 'servient'],\n 'reis': ['reis', 'rise', 'seri', 'sier', 'sire'],\n 'reit': ['iter', 'reit', 'rite', 'teri', 'tier', 'tire'],\n 'reiter': ['errite', 'reiter', 'retier', 'retire', 'tierer'],\n 'reiterable': ['reiterable', 'reliberate'],\n 'rejail': ['jailer', 'rejail'],\n 'rejerk': ['jerker', 'rejerk'],\n 'rejoin': ['joiner', 'rejoin'],\n 'rejolt': ['jolter', 'rejolt'],\n 'rejourney': ['journeyer', 'rejourney'],\n 'reki': ['erik', 'kier', 'reki'],\n 'rekick': ['kicker', 'rekick'],\n 'rekill': ['killer', 'rekill'],\n 'rekiss': ['kisser', 'rekiss'],\n 'reknit': ['reknit', 'tinker'],\n 'reknow': ['knower', 'reknow', 'wroken'],\n 'rel': ['ler', 'rel'],\n 'relabel': ['labeler', 'relabel'],\n 'relace': ['alerce', 'cereal', 'relace'],\n 'relacquer': ['lacquerer', 'relacquer'],\n 'relade': ['dealer', 'leader', 'redeal', 'relade', 'relead'],\n 'reladen': ['leander', 'learned', 'reladen'],\n 'relais': ['israel', 'relais', 'resail', 'sailer', 'serail', 'serial'],\n 'relament': ['lamenter', 'relament', 'remantle'],\n 'relamp': ['lamper', 'palmer', 'relamp'],\n 'reland': ['aldern',\n            'darnel',\n            'enlard',\n            'lander',\n            'lenard',\n            'randle',\n            'reland'],\n 'relap': ['lepra', 'paler', 'parel', 'parle', 'pearl', 'perla', 'relap'],\n 'relapse': ['pleaser', 'preseal', 'relapse'],\n 'relapsing': ['espringal', 'presignal', 'relapsing'],\n 'relast': ['laster',\n            'lastre',\n            'rastle',\n            'relast',\n            'resalt',\n            'salter',\n            'slater',\n            'stelar'],\n 'relata': ['latera', 'relata'],\n 'relatability': ['alterability', 'bilaterality', 'relatability'],\n 'relatable': ['alterable', 'relatable'],\n 'relatch': ['clethra', 'latcher', 'ratchel', 'relatch', 'talcher', 'trachle'],\n 'relate': ['earlet', 'elater', 'relate'],\n 'related': ['delater', 'related', 'treadle'],\n 'relater': ['alterer', 'realter', 'relater'],\n 'relation': ['oriental', 'relation', 'tirolean'],\n 'relationism': ['misrelation', 'orientalism', 'relationism'],\n 'relationist': ['orientalist', 'relationist'],\n 'relative': ['levirate', 'relative'],\n 'relativization': ['relativization', 'revitalization'],\n 'relativize': ['relativize', 'revitalize'],\n 'relator': ['realtor', 'relator'],\n 'relaunch': ['launcher', 'relaunch'],\n 'relay': ['early', 'layer', 'relay'],\n 'relead': ['dealer', 'leader', 'redeal', 'relade', 'relead'],\n 'releap': ['leaper', 'releap', 'repale', 'repeal'],\n 'relearn': ['learner', 'relearn'],\n 'releather': ['leatherer', 'releather', 'tarheeler'],\n 'relection': ['centriole', 'electrion', 'relection'],\n 'relegate': ['eglatere', 'regelate', 'relegate'],\n 'relegation': ['regelation', 'relegation'],\n 'relend': ['lender', 'relend'],\n 'reletter': ['letterer', 'reletter'],\n 'relevant': ['levanter', 'relevant', 'revelant'],\n 'relevation': ['relevation', 'revelation'],\n 'relevator': ['relevator', 'revelator', 'veratrole'],\n 'relevel': ['leveler', 'relevel'],\n 'reliably': ['beryllia', 'reliably'],\n 'reliance': ['cerealin', 'cinereal', 'reliance'],\n 'reliant': ['entrail',\n             'latiner',\n             'latrine',\n             'ratline',\n             'reliant',\n             'retinal',\n             'trenail'],\n 'reliantly': ['interally', 'reliantly'],\n 'reliberate': ['reiterable', 'reliberate'],\n 'relic': ['crile', 'elric', 'relic'],\n 'relick': ['licker', 'relick', 'rickle'],\n 'relicted': ['derelict', 'relicted'],\n 'relier': ['lierre', 'relier'],\n 'relieving': ['inveigler', 'relieving'],\n 'relievo': ['overlie', 'relievo'],\n 'relift': ['fertil', 'filter', 'lifter', 'relift', 'trifle'],\n 'religation': ['genitorial', 'religation'],\n 'relight': ['lighter', 'relight', 'rightle'],\n 'relighten': ['lightener', 'relighten', 'threeling'],\n 'religion': ['ligroine', 'religion'],\n 'relimit': ['limiter', 'relimit'],\n 'reline': ['lierne', 'reline'],\n 'relink': ['linker', 'relink'],\n 'relish': ['hirsel', 'hirsle', 'relish'],\n 'relishy': ['relishy', 'shirley'],\n 'relist': ['lister', 'relist'],\n 'relisten': ['enlister', 'esterlin', 'listener', 'relisten'],\n 'relive': ['levier', 'relive', 'reveil', 'revile', 'veiler'],\n 'reload': ['loader', 'ordeal', 'reload'],\n 'reloan': ['lenora', 'loaner', 'orlean', 'reloan'],\n 'relocation': ['iconolater', 'relocation'],\n 'relock': ['locker', 'relock'],\n 'relook': ['looker', 'relook'],\n 'relose': ['relose', 'resole'],\n 'relost': ['relost', 'reslot', 'rostel', 'sterol', 'torsel'],\n 'relot': ['lerot', 'orlet', 'relot'],\n 'relower': ['lowerer', 'relower'],\n 'reluct': ['cutler', 'reluct'],\n 'reluctation': ['countertail', 'reluctation'],\n 'relumine': ['lemurine', 'meruline', 'relumine'],\n 'rely': ['lyre', 'rely'],\n 'remade': ['meader', 'remade'],\n 'remagnification': ['germanification', 'remagnification'],\n 'remagnify': ['germanify', 'remagnify'],\n 'remail': ['mailer', 'remail'],\n 'remain': ['ermani', 'marine', 'remain'],\n 'remains': ['remains', 'seminar'],\n 'remaintain': ['antimerina', 'maintainer', 'remaintain'],\n 'reman': ['enarm', 'namer', 'reman'],\n 'remand': ['damner', 'manred', 'randem', 'remand'],\n 'remanet': ['remanet', 'remeant', 'treeman'],\n 'remantle': ['lamenter', 'relament', 'remantle'],\n 'remap': ['amper', 'remap'],\n 'remarch': ['charmer', 'marcher', 'remarch'],\n 'remark': ['marker', 'remark'],\n 'remarket': ['marketer', 'remarket'],\n 'remarry': ['marryer', 'remarry'],\n 'remarshal': ['marshaler', 'remarshal'],\n 'remask': ['masker', 'remask'],\n 'remass': ['masser', 'remass'],\n 'remast': ['martes', 'master', 'remast', 'stream'],\n 'remasticate': ['metrectasia', 'remasticate'],\n 'rematch': ['matcher', 'rematch'],\n 'remeant': ['remanet', 'remeant', 'treeman'],\n 'remede': ['deemer', 'meered', 'redeem', 'remede'],\n 'remeet': ['meeter', 'remeet', 'teemer'],\n 'remelt': ['melter', 'remelt'],\n 'remend': ['mender', 'remend'],\n 'remetal': ['lameter', 'metaler', 'remetal'],\n 'remi': ['emir', 'imer', 'mire', 'reim', 'remi', 'riem', 'rime'],\n 'remication': ['marcionite', 'microtinae', 'remication'],\n 'remigate': ['emigrate', 'remigate'],\n 'remigation': ['emigration', 'remigation'],\n 'remill': ['miller', 'remill'],\n 'remind': ['minder', 'remind'],\n 'remint': ['minter', 'remint', 'termin'],\n 'remiped': ['demirep', 'epiderm', 'impeder', 'remiped'],\n 'remisrepresent': ['misrepresenter', 'remisrepresent'],\n 'remission': ['missioner', 'remission'],\n 'remisunderstand': ['misunderstander', 'remisunderstand'],\n 'remit': ['merit', 'miter', 'mitre', 'remit', 'timer'],\n 'remittal': ['remittal', 'termital'],\n 'remittance': ['carminette', 'remittance'],\n 'remittence': ['centimeter', 'recitement', 'remittence'],\n 'remitter': ['remitter', 'trimeter'],\n 'remix': ['mixer', 'remix'],\n 'remnant': ['manrent', 'remnant'],\n 'remock': ['mocker', 'remock'],\n 'remodel': ['demerol', 'modeler', 'remodel'],\n 'remold': ['dermol', 'molder', 'remold'],\n 'remontant': ['nonmatter', 'remontant'],\n 'remontoir': ['interroom', 'remontoir'],\n 'remop': ['merop', 'moper', 'proem', 'remop'],\n 'remora': ['remora', 'roamer'],\n 'remord': ['dormer', 'remord'],\n 'remote': ['meteor', 'remote'],\n 'remotive': ['overtime', 'remotive'],\n 'remould': ['remould', 'ruledom'],\n 'remount': ['monture', 'mounter', 'remount'],\n 'removable': ['overblame', 'removable'],\n 'remunerate': ['remunerate', 'renumerate'],\n 'remuneration': ['remuneration', 'renumeration'],\n 'remurmur': ['murmurer', 'remurmur'],\n 'remus': ['muser', 'remus', 'serum'],\n 'remuster': ['musterer', 'remuster'],\n 'renable': ['enabler', 'renable'],\n 'renably': ['blarney', 'renably'],\n 'renail': ['arline', 'larine', 'linear', 'nailer', 'renail'],\n 'renaissance': ['necessarian', 'renaissance'],\n 'renal': ['learn', 'renal'],\n 'rename': ['enarme', 'meaner', 'rename'],\n 'renavigate': ['renavigate', 'vegetarian'],\n 'rend': ['dern', 'rend'],\n 'rendition': ['rendition', 'trinodine'],\n 'reneg': ['genre', 'green', 'neger', 'reneg'],\n 'renegadism': ['grandeeism', 'renegadism'],\n 'renegation': ['generation', 'renegation'],\n 'renege': ['neeger', 'reenge', 'renege'],\n 'reneger': ['greener', 'regreen', 'reneger'],\n 'reneglect': ['neglecter', 'reneglect'],\n 'renerve': ['renerve', 'venerer'],\n 'renes': ['renes', 'sneer'],\n 'renet': ['enter', 'neter', 'renet', 'terne', 'treen'],\n 'reniform': ['informer', 'reinform', 'reniform'],\n 'renilla': ['ralline', 'renilla'],\n 'renin': ['inner', 'renin'],\n 'reniportal': ['interpolar', 'reniportal'],\n 'renish': ['renish', 'shiner', 'shrine'],\n 'renitence': ['centenier', 'renitence'],\n 'renitency': ['nycterine', 'renitency'],\n 'renitent': ['renitent', 'trentine'],\n 'renk': ['kern', 'renk'],\n 'rennet': ['rennet', 'tenner'],\n 'renography': ['granophyre', 'renography'],\n 'renominate': ['enantiomer', 'renominate'],\n 'renotation': ['renotation', 'retonation'],\n 'renotice': ['erection', 'neoteric', 'nocerite', 'renotice'],\n 'renourish': ['nourisher', 'renourish'],\n 'renovate': ['overneat', 'renovate'],\n 'renovater': ['enervator', 'renovater', 'venerator'],\n 'renown': ['renown', 'wonner'],\n 'rent': ['rent', 'tern'],\n 'rentage': ['grantee', 'greaten', 'reagent', 'rentage'],\n 'rental': ['altern', 'antler', 'learnt', 'rental', 'ternal'],\n 'rentaler': ['rentaler', 'rerental'],\n 'rented': ['denter', 'rented', 'tender'],\n 'rentee': ['entree', 'rentee', 'retene'],\n 'renter': ['renter', 'rerent'],\n 'renu': ['renu', 'ruen', 'rune'],\n 'renumber': ['numberer', 'renumber'],\n 'renumerate': ['remunerate', 'renumerate'],\n 'renumeration': ['remuneration', 'renumeration'],\n 'reobtain': ['abrotine', 'baritone', 'obtainer', 'reobtain'],\n 'reoccasion': ['occasioner', 'reoccasion'],\n 'reoccupation': ['cornucopiate', 'reoccupation'],\n 'reoffend': ['offender', 'reoffend'],\n 'reoffer': ['offerer', 'reoffer'],\n 'reoil': ['oiler', 'oriel', 'reoil'],\n 'reopen': ['opener', 'reopen', 'repone'],\n 'reordain': ['inroader', 'ordainer', 'reordain'],\n 'reorder': ['orderer', 'reorder'],\n 'reordinate': ['reordinate', 'treronidae'],\n 'reornament': ['ornamenter', 'reornament'],\n 'reoverflow': ['overflower', 'reoverflow'],\n 'reown': ['owner', 'reown', 'rowen'],\n 'rep': ['per', 'rep'],\n 'repack': ['packer', 'repack'],\n 'repaint': ['painter', 'pertain', 'pterian', 'repaint'],\n 'repair': ['pairer', 'rapier', 'repair'],\n 'repairer': ['rareripe', 'repairer'],\n 'repale': ['leaper', 'releap', 'repale', 'repeal'],\n 'repand': ['pander', 'repand'],\n 'repandly': ['panderly', 'repandly'],\n 'repandous': ['panderous', 'repandous'],\n 'repanel': ['paneler', 'repanel', 'replane'],\n 'repaper': ['paperer', 'perpera', 'prepare', 'repaper'],\n 'reparagraph': ['paragrapher', 'reparagraph'],\n 'reparation': ['praetorian', 'reparation'],\n 'repark': ['parker', 'repark'],\n 'repartee': ['repartee', 'repeater'],\n 'repartition': ['partitioner', 'repartition'],\n 'repass': ['passer', 'repass', 'sparse'],\n 'repasser': ['asperser', 'repasser'],\n 'repast': ['paster', 'repast', 'trapes'],\n 'repaste': ['perates', 'repaste', 'sperate'],\n 'repasture': ['repasture', 'supertare'],\n 'repatch': ['chapter', 'patcher', 'repatch'],\n 'repatent': ['pattener', 'repatent'],\n 'repattern': ['patterner', 'repattern'],\n 'repawn': ['enwrap', 'pawner', 'repawn'],\n 'repay': ['apery', 'payer', 'repay'],\n 'repeal': ['leaper', 'releap', 'repale', 'repeal'],\n 'repeat': ['petrea', 'repeat', 'retape'],\n 'repeater': ['repartee', 'repeater'],\n 'repel': ['leper', 'perle', 'repel'],\n 'repen': ['neper', 'preen', 'repen'],\n 'repension': ['pensioner', 'repension'],\n 'repent': ['perten', 'repent'],\n 'repentable': ['penetrable', 'repentable'],\n 'repentance': ['penetrance', 'repentance'],\n 'repentant': ['penetrant', 'repentant'],\n 'reperceive': ['prereceive', 'reperceive'],\n 'repercussion': ['percussioner', 'repercussion'],\n 'repercussive': ['repercussive', 'superservice'],\n 'reperform': ['performer', 'prereform', 'reperform'],\n 'repermission': ['reimpression', 'repermission'],\n 'repermit': ['premerit', 'preremit', 'repermit'],\n 'reperplex': ['perplexer', 'reperplex'],\n 'reperusal': ['pleasurer', 'reperusal'],\n 'repetition': ['petitioner', 'repetition'],\n 'rephael': ['preheal', 'rephael'],\n 'rephase': ['hespera', 'rephase', 'reshape'],\n 'rephotograph': ['photographer', 'rephotograph'],\n 'rephrase': ['preshare', 'rephrase'],\n 'repic': ['price', 'repic'],\n 'repick': ['picker', 'repick'],\n 'repiece': ['creepie', 'repiece'],\n 'repin': ['piner', 'prine', 'repin', 'ripen'],\n 'repine': ['neiper', 'perine', 'pirene', 'repine'],\n 'repiner': ['repiner', 'ripener'],\n 'repiningly': ['repiningly', 'ripeningly'],\n 'repique': ['perique', 'repique'],\n 'repitch': ['pitcher', 'repitch'],\n 'replace': ['percale', 'replace'],\n 'replait': ['partile', 'plaiter', 'replait'],\n 'replan': ['parnel', 'planer', 'replan'],\n 'replane': ['paneler', 'repanel', 'replane'],\n 'replant': ['pantler', 'planter', 'replant'],\n 'replantable': ['planetabler', 'replantable'],\n 'replanter': ['prerental', 'replanter'],\n 'replaster': ['plasterer', 'replaster'],\n 'replate': ['pearlet', 'pleater', 'prelate', 'ptereal', 'replate', 'repleat'],\n 'replay': ['parley', 'pearly', 'player', 'replay'],\n 'replead': ['pearled', 'pedaler', 'pleader', 'replead'],\n 'repleader': ['predealer', 'repleader'],\n 'repleat': ['pearlet', 'pleater', 'prelate', 'ptereal', 'replate', 'repleat'],\n 'repleteness': ['repleteness', 'terpeneless'],\n 'repletion': ['interlope', 'interpole', 'repletion', 'terpineol'],\n 'repliant': ['interlap', 'repliant', 'triplane'],\n 'replica': ['caliper', 'picarel', 'replica'],\n 'replight': ['plighter', 'replight'],\n 'replod': ['podler', 'polder', 'replod'],\n 'replot': ['petrol', 'replot'],\n 'replow': ['plower', 'replow'],\n 'replum': ['lumper', 'plumer', 'replum', 'rumple'],\n 'replunder': ['plunderer', 'replunder'],\n 'reply': ['plyer', 'reply'],\n 'repocket': ['pocketer', 'repocket'],\n 'repoint': ['pointer', 'protein', 'pterion', 'repoint', 'tropine'],\n 'repolish': ['polisher', 'repolish'],\n 'repoll': ['poller', 'repoll'],\n 'reponder': ['ponderer', 'reponder'],\n 'repone': ['opener', 'reopen', 'repone'],\n 'report': ['porret', 'porter', 'report', 'troper'],\n 'reportage': ['porterage', 'reportage'],\n 'reporterism': ['misreporter', 'reporterism'],\n 'reportion': ['portioner', 'reportion'],\n 'reposed': ['deposer', 'reposed'],\n 'reposit': ['periost', 'porites', 'reposit', 'riposte'],\n 'reposition': ['positioner', 'reposition'],\n 'repositor': ['posterior', 'repositor'],\n 'repossession': ['possessioner', 'repossession'],\n 'repost': ['poster', 'presto', 'repost', 'respot', 'stoper'],\n 'repot': ['poter', 'prote', 'repot', 'tepor', 'toper', 'trope'],\n 'repound': ['pounder', 'repound', 'unroped'],\n 'repour': ['pourer', 'repour', 'rouper'],\n 'repowder': ['powderer', 'repowder'],\n 'repp': ['prep', 'repp'],\n 'repray': ['prayer', 'repray'],\n 'repreach': ['preacher', 'repreach'],\n 'repredict': ['precredit', 'predirect', 'repredict'],\n 'reprefer': ['prerefer', 'reprefer'],\n 'represent': ['presenter', 'represent'],\n 'representationism': ['misrepresentation', 'representationism'],\n 'repress': ['presser', 'repress'],\n 'repressive': ['repressive', 'respersive'],\n 'reprice': ['piercer', 'reprice'],\n 'reprieval': ['prevailer', 'reprieval'],\n 'reprime': ['premier', 'reprime'],\n 'reprint': ['printer', 'reprint'],\n 'reprise': ['reprise', 'respire'],\n 'repristination': ['interspiration', 'repristination'],\n 'reproachable': ['blepharocera', 'reproachable'],\n 'reprobate': ['perborate', 'prorebate', 'reprobate'],\n 'reprobation': ['probationer', 'reprobation'],\n 'reproceed': ['proceeder', 'reproceed'],\n 'reproclaim': ['proclaimer', 'reproclaim'],\n 'reproduce': ['procedure', 'reproduce'],\n 'reproduction': ['proreduction', 'reproduction'],\n 'reprohibit': ['prohibiter', 'reprohibit'],\n 'reproof': ['proofer', 'reproof'],\n 'reproportion': ['proportioner', 'reproportion'],\n 'reprotection': ['interoceptor', 'reprotection'],\n 'reprotest': ['protester', 'reprotest'],\n 'reprovision': ['prorevision', 'provisioner', 'reprovision'],\n 'reps': ['reps', 'resp'],\n 'reptant': ['pattern', 'reptant'],\n 'reptatorial': ['proletariat', 'reptatorial'],\n 'reptatory': ['protreaty', 'reptatory'],\n 'reptile': ['perlite', 'reptile'],\n 'reptilia': ['liparite', 'reptilia'],\n 'republish': ['publisher', 'republish'],\n 'repudiatory': ['preauditory', 'repudiatory'],\n 'repuff': ['puffer', 'repuff'],\n 'repugn': ['punger', 'repugn'],\n 'repulpit': ['pulpiter', 'repulpit'],\n 'repulsion': ['prelusion', 'repulsion'],\n 'repulsive': ['prelusive', 'repulsive'],\n 'repulsively': ['prelusively', 'repulsively'],\n 'repulsory': ['prelusory', 'repulsory'],\n 'repump': ['pumper', 'repump'],\n 'repunish': ['punisher', 'repunish'],\n 'reputative': ['reputative', 'vituperate'],\n 'repute': ['repute', 'uptree'],\n 'requench': ['quencher', 'requench'],\n 'request': ['quester', 'request'],\n 'requestion': ['questioner', 'requestion'],\n 'require': ['querier', 'require'],\n 'requital': ['quartile', 'requital', 'triequal'],\n 'requite': ['quieter', 'requite'],\n 'rerack': ['racker', 'rerack'],\n 'rerail': ['railer', 'rerail'],\n 'reraise': ['rearise', 'reraise'],\n 'rerake': ['karree', 'rerake'],\n 'rerank': ['ranker', 'rerank'],\n 'rerate': ['rerate', 'retare', 'tearer'],\n 'reread': ['reader', 'redare', 'reread'],\n 'rereel': ['reeler', 'rereel'],\n 'reregister': ['registerer', 'reregister'],\n 'rerent': ['renter', 'rerent'],\n 'rerental': ['rentaler', 'rerental'],\n 'rering': ['erring', 'rering', 'ringer'],\n 'rerise': ['rerise', 'sirree'],\n 'rerivet': ['rerivet', 'riveter'],\n 'rerob': ['borer', 'rerob', 'rober'],\n 'rerobe': ['rebore', 'rerobe'],\n 'reroll': ['reroll', 'roller'],\n 'reroof': ['reroof', 'roofer'],\n 'reroot': ['reroot', 'rooter', 'torero'],\n 'rerow': ['rerow', 'rower'],\n 'rerun': ['rerun', 'runer'],\n 'resaca': ['ascare', 'caesar', 'resaca'],\n 'resack': ['resack', 'sacker', 'screak'],\n 'resail': ['israel', 'relais', 'resail', 'sailer', 'serail', 'serial'],\n 'resale': ['alerse', 'leaser', 'reales', 'resale', 'reseal', 'sealer'],\n 'resalt': ['laster',\n            'lastre',\n            'rastle',\n            'relast',\n            'resalt',\n            'salter',\n            'slater',\n            'stelar'],\n 'resanction': ['resanction', 'sanctioner'],\n 'resaw': ['resaw', 'sawer', 'seraw', 'sware', 'swear', 'warse'],\n 'resawer': ['resawer', 'reswear', 'swearer'],\n 'resay': ['reasy', 'resay', 'sayer', 'seary'],\n 'rescan': ['casern', 'rescan'],\n 'rescind': ['discern', 'rescind'],\n 'rescinder': ['discerner', 'rescinder'],\n 'rescindment': ['discernment', 'rescindment'],\n 'rescratch': ['rescratch', 'scratcher'],\n 'rescuable': ['rescuable', 'securable'],\n 'rescue': ['cereus', 'ceruse', 'recuse', 'rescue', 'secure'],\n 'rescuer': ['recurse', 'rescuer', 'securer'],\n 'reseal': ['alerse', 'leaser', 'reales', 'resale', 'reseal', 'sealer'],\n 'reseam': ['reseam', 'seamer'],\n 'research': ['rechaser', 'research', 'searcher'],\n 'reseat': ['asteer',\n            'easter',\n            'eastre',\n            'reseat',\n            'saeter',\n            'seater',\n            'staree',\n            'teaser',\n            'teresa'],\n 'resect': ['resect', 'screet', 'secret'],\n 'resection': ['resection', 'secretion'],\n 'resectional': ['resectional', 'secretional'],\n 'reseda': ['erased', 'reseda', 'seared'],\n 'resee': ['esere', 'reese', 'resee'],\n 'reseed': ['reseed', 'seeder'],\n 'reseek': ['reseek', 'seeker'],\n 'resell': ['resell', 'seller'],\n 'resend': ['resend', 'sender'],\n 'resene': ['resene', 'serene'],\n 'resent': ['ernest', 'nester', 'resent', 'streen'],\n 'reservable': ['reservable', 'reversable'],\n 'reserval': ['reserval', 'reversal', 'slaverer'],\n 'reserve': ['reserve', 'resever', 'reverse', 'severer'],\n 'reserved': ['deserver', 'reserved', 'reversed'],\n 'reservedly': ['reservedly', 'reversedly'],\n 'reserveful': ['reserveful', 'reverseful'],\n 'reserveless': ['reserveless', 'reverseless'],\n 'reserver': ['reserver', 'reverser'],\n 'reservist': ['reservist', 'reversist'],\n 'reset': ['ester',\n           'estre',\n           'reest',\n           'reset',\n           'steer',\n           'stere',\n           'stree',\n           'terse',\n           'tsere'],\n 'resever': ['reserve', 'resever', 'reverse', 'severer'],\n 'resew': ['resew', 'sewer', 'sweer'],\n 'resex': ['resex', 'xeres'],\n 'resh': ['hers', 'resh', 'sher'],\n 'reshape': ['hespera', 'rephase', 'reshape'],\n 'reshare': ['reshare', 'reshear', 'shearer'],\n 'resharpen': ['resharpen', 'sharpener'],\n 'reshear': ['reshare', 'reshear', 'shearer'],\n 'reshearer': ['rehearser', 'reshearer'],\n 'reshift': ['reshift', 'shifter'],\n 'reshingle': ['englisher', 'reshingle'],\n 'reship': ['perish', 'reship'],\n 'reshipment': ['perishment', 'reshipment'],\n 'reshoot': ['orthose', 'reshoot', 'shooter', 'soother'],\n 'reshoulder': ['reshoulder', 'shoulderer'],\n 'reshower': ['reshower', 'showerer'],\n 'reshun': ['reshun', 'rushen'],\n 'reshunt': ['reshunt', 'shunter'],\n 'reshut': ['reshut', 'suther', 'thurse', 'tusher'],\n 'reside': ['desire', 'reside'],\n 'resident': ['indesert', 'inserted', 'resident'],\n 'resider': ['derries', 'desirer', 'resider', 'serried'],\n 'residua': ['residua', 'ursidae'],\n 'resift': ['fister', 'resift', 'sifter', 'strife'],\n 'resigh': ['resigh', 'sigher'],\n 'resign': ['resign', 'resing', 'signer', 'singer'],\n 'resignal': ['resignal', 'seringal', 'signaler'],\n 'resigned': ['designer', 'redesign', 'resigned'],\n 'resile': ['lisere', 'resile'],\n 'resiliate': ['israelite', 'resiliate'],\n 'resilient': ['listerine', 'resilient'],\n 'resilition': ['isonitrile', 'resilition'],\n 'resilver': ['resilver', 'silverer', 'sliverer'],\n 'resin': ['reins', 'resin', 'rinse', 'risen', 'serin', 'siren'],\n 'resina': ['arisen', 'arsine', 'resina', 'serian'],\n 'resinate': ['arsenite', 'resinate', 'teresian', 'teresina'],\n 'resing': ['resign', 'resing', 'signer', 'singer'],\n 'resinic': ['irenics', 'resinic', 'sericin', 'sirenic'],\n 'resinize': ['resinize', 'sirenize'],\n 'resink': ['resink', 'reskin', 'sinker'],\n 'resinlike': ['resinlike', 'sirenlike'],\n 'resinoid': ['derision', 'ironside', 'resinoid', 'sirenoid'],\n 'resinol': ['resinol', 'serolin'],\n 'resinous': ['neurosis', 'resinous'],\n 'resinously': ['neurolysis', 'resinously'],\n 'resiny': ['resiny', 'sireny'],\n 'resist': ['resist', 'restis', 'sister'],\n 'resistable': ['assertible', 'resistable'],\n 'resistance': ['resistance', 'senatrices'],\n 'resistful': ['fruitless', 'resistful'],\n 'resisting': ['resisting', 'sistering'],\n 'resistless': ['resistless', 'sisterless'],\n 'resize': ['resize', 'seizer'],\n 'resketch': ['resketch', 'sketcher'],\n 'reskin': ['resink', 'reskin', 'sinker'],\n 'reslash': ['reslash', 'slasher'],\n 'reslate': ['realest', 'reslate', 'resteal', 'stealer', 'teasler'],\n 'reslay': ['reslay', 'slayer'],\n 'reslot': ['relost', 'reslot', 'rostel', 'sterol', 'torsel'],\n 'resmell': ['resmell', 'smeller'],\n 'resmelt': ['melters', 'resmelt', 'smelter'],\n 'resmooth': ['resmooth', 'romeshot', 'smoother'],\n 'resnap': ['resnap', 'respan', 'snaper'],\n 'resnatch': ['resnatch', 'snatcher', 'stancher'],\n 'resoak': ['arkose', 'resoak', 'soaker'],\n 'resoap': ['resoap', 'soaper'],\n 'resoften': ['resoften', 'softener'],\n 'resoil': ['elisor', 'resoil'],\n 'resojourn': ['resojourn', 'sojourner'],\n 'resolder': ['resolder', 'solderer'],\n 'resole': ['relose', 'resole'],\n 'resolicit': ['resolicit', 'soliciter'],\n 'resolution': ['resolution', 'solutioner'],\n 'resonate': ['orestean', 'resonate', 'stearone'],\n 'resort': ['resort', 'roster', 'sorter', 'storer'],\n 'resorter': ['resorter', 'restorer', 'retrorse'],\n 'resound': ['resound', 'sounder', 'unrosed'],\n 'resource': ['recourse', 'resource'],\n 'resow': ['owser', 'resow', 'serow', 'sower', 'swore', 'worse'],\n 'resp': ['reps', 'resp'],\n 'respace': ['escaper', 'respace'],\n 'respade': ['psedera', 'respade'],\n 'respan': ['resnap', 'respan', 'snaper'],\n 'respeak': ['respeak', 'speaker'],\n 'respect': ['respect', 'scepter', 'specter'],\n 'respectless': ['respectless', 'scepterless'],\n 'respell': ['presell', 'respell', 'speller'],\n 'respersive': ['repressive', 'respersive'],\n 'respin': ['pernis', 'respin', 'sniper'],\n 'respiration': ['respiration', 'retinispora'],\n 'respire': ['reprise', 'respire'],\n 'respirit': ['respirit', 'spiriter'],\n 'respite': ['respite', 'septier'],\n 'resplend': ['resplend', 'splender'],\n 'resplice': ['eclipser', 'pericles', 'resplice'],\n 'responde': ['personed', 'responde'],\n 'respondence': ['precondense', 'respondence'],\n 'responsal': ['apronless', 'responsal'],\n 'response': ['pessoner', 'response'],\n 'respot': ['poster', 'presto', 'repost', 'respot', 'stoper'],\n 'respray': ['respray', 'sprayer'],\n 'respread': ['respread', 'spreader'],\n 'respring': ['respring', 'springer'],\n 'resprout': ['posturer', 'resprout', 'sprouter'],\n 'respue': ['peruse', 'respue'],\n 'resqueak': ['resqueak', 'squeaker'],\n 'ressaut': ['erastus', 'ressaut'],\n 'rest': ['rest', 'sert', 'stre'],\n 'restack': ['restack', 'stacker'],\n 'restaff': ['restaff', 'staffer'],\n 'restain': ['asterin', 'eranist', 'restain', 'stainer', 'starnie', 'stearin'],\n 'restake': ['restake', 'sakeret'],\n 'restamp': ['restamp', 'stamper'],\n 'restart': ['restart', 'starter'],\n 'restate': ['estreat', 'restate', 'retaste'],\n 'resteal': ['realest', 'reslate', 'resteal', 'stealer', 'teasler'],\n 'resteel': ['reestle', 'resteel', 'steeler'],\n 'resteep': ['estrepe', 'resteep', 'steeper'],\n 'restem': ['mester', 'restem', 'temser', 'termes'],\n 'restep': ['pester', 'preset', 'restep', 'streep'],\n 'restful': ['fluster', 'restful'],\n 'restiad': ['astride', 'diaster', 'disrate', 'restiad', 'staired'],\n 'restiffen': ['restiffen', 'stiffener'],\n 'restiform': ['reformist', 'restiform'],\n 'resting': ['resting', 'stinger'],\n 'restio': ['restio', 'sorite', 'sortie', 'triose'],\n 'restis': ['resist', 'restis', 'sister'],\n 'restitch': ['restitch', 'stitcher'],\n 'restive': ['restive', 'servite'],\n 'restock': ['restock', 'stocker'],\n 'restorer': ['resorter', 'restorer', 'retrorse'],\n 'restow': ['restow', 'stower', 'towser', 'worset'],\n 'restowal': ['restowal', 'sealwort'],\n 'restraighten': ['restraighten', 'straightener'],\n 'restrain': ['restrain', 'strainer', 'transire'],\n 'restraint': ['restraint', 'retransit', 'trainster', 'transiter'],\n 'restream': ['masterer', 'restream', 'streamer'],\n 'restrengthen': ['restrengthen', 'strengthener'],\n 'restress': ['restress', 'stresser'],\n 'restretch': ['restretch', 'stretcher'],\n 'restring': ['restring', 'ringster', 'stringer'],\n 'restrip': ['restrip', 'striper'],\n 'restrive': ['restrive', 'reverist'],\n 'restuff': ['restuff', 'stuffer'],\n 'resty': ['resty', 'strey'],\n 'restyle': ['restyle', 'tersely'],\n 'resucceed': ['resucceed', 'succeeder'],\n 'resuck': ['resuck', 'sucker'],\n 'resue': ['resue', 'reuse'],\n 'resuffer': ['resuffer', 'sufferer'],\n 'resuggest': ['resuggest', 'suggester'],\n 'resuing': ['insurge', 'resuing'],\n 'resuit': ['isuret', 'resuit'],\n 'result': ['luster', 'result', 'rustle', 'sutler', 'ulster'],\n 'resulting': ['resulting', 'ulstering'],\n 'resultless': ['lusterless', 'lustreless', 'resultless'],\n 'resummon': ['resummon', 'summoner'],\n 'resun': ['nurse', 'resun'],\n 'resup': ['purse', 'resup', 'sprue', 'super'],\n 'resuperheat': ['resuperheat', 'superheater'],\n 'resupinate': ['interpause', 'resupinate'],\n 'resupination': ['resupination', 'uranospinite'],\n 'resupport': ['resupport', 'supporter'],\n 'resuppose': ['resuppose', 'superpose'],\n 'resupposition': ['resupposition', 'superposition'],\n 'resuppress': ['resuppress', 'suppresser'],\n 'resurrender': ['resurrender', 'surrenderer'],\n 'resurround': ['resurround', 'surrounder'],\n 'resuspect': ['resuspect', 'suspecter'],\n 'resuspend': ['resuspend', 'suspender', 'unpressed'],\n 'reswallow': ['reswallow', 'swallower'],\n 'resward': ['drawers', 'resward'],\n 'reswarm': ['reswarm', 'swarmer'],\n 'reswear': ['resawer', 'reswear', 'swearer'],\n 'resweat': ['resweat', 'sweater'],\n 'resweep': ['resweep', 'sweeper'],\n 'reswell': ['reswell', 'sweller'],\n 'reswill': ['reswill', 'swiller'],\n 'retable': ['bearlet', 'bleater', 'elberta', 'retable'],\n 'retack': ['racket', 'retack', 'tacker'],\n 'retag': ['gater', 'grate', 'great', 'greta', 'retag', 'targe'],\n 'retail': ['lirate', 'retail', 'retial', 'tailer'],\n 'retailer': ['irrelate', 'retailer'],\n 'retain': ['nerita', 'ratine', 'retain', 'retina', 'tanier'],\n 'retainal': ['retainal', 'telarian'],\n 'retainder': ['irredenta', 'retainder'],\n 'retainer': ['arretine', 'eretrian', 'eritrean', 'retainer'],\n 'retaining': ['negritian', 'retaining'],\n 'retaliate': ['elettaria', 'retaliate'],\n 'retalk': ['kartel', 'retalk', 'talker'],\n 'retama': ['ramate', 'retama'],\n 'retame': ['reetam', 'retame', 'teamer'],\n 'retan': ['antre', 'arent', 'retan', 'terna'],\n 'retape': ['petrea', 'repeat', 'retape'],\n 'retard': ['darter',\n            'dartre',\n            'redart',\n            'retard',\n            'retrad',\n            'tarred',\n            'trader'],\n 'retardent': ['retardent', 'tetrander'],\n 'retare': ['rerate', 'retare', 'tearer'],\n 'retaste': ['estreat', 'restate', 'retaste'],\n 'retax': ['extra', 'retax', 'taxer'],\n 'retaxation': ['retaxation', 'tetraxonia'],\n 'retch': ['chert', 'retch'],\n 'reteach': ['cheater', 'hectare', 'recheat', 'reteach', 'teacher'],\n 'retelegraph': ['retelegraph', 'telegrapher'],\n 'retell': ['retell', 'teller'],\n 'retem': ['meter', 'retem'],\n 'retemper': ['retemper', 'temperer'],\n 'retempt': ['retempt', 'tempter'],\n 'retenant': ['retenant', 'tenanter'],\n 'retender': ['retender', 'tenderer'],\n 'retene': ['entree', 'rentee', 'retene'],\n 'retent': ['netter', 'retent', 'tenter'],\n 'retention': ['intertone', 'retention'],\n 'retepora': ['perorate', 'retepora'],\n 'retest': ['retest', 'setter', 'street', 'tester'],\n 'rethank': ['rethank', 'thanker'],\n 'rethatch': ['rethatch', 'thatcher'],\n 'rethaw': ['rethaw', 'thawer', 'wreath'],\n 'rethe': ['ether', 'rethe', 'theer', 'there', 'three'],\n 'retheness': ['retheness', 'thereness', 'threeness'],\n 'rethicken': ['kitchener', 'rethicken', 'thickener'],\n 'rethink': ['rethink', 'thinker'],\n 'rethrash': ['rethrash', 'thrasher'],\n 'rethread': ['rethread', 'threader'],\n 'rethreaten': ['rethreaten', 'threatener'],\n 'rethresh': ['rethresh', 'thresher'],\n 'rethrill': ['rethrill', 'thriller'],\n 'rethrow': ['rethrow', 'thrower'],\n 'rethrust': ['rethrust', 'thruster'],\n 'rethunder': ['rethunder', 'thunderer'],\n 'retia': ['arite', 'artie', 'irate', 'retia', 'tarie'],\n 'retial': ['lirate', 'retail', 'retial', 'tailer'],\n 'reticent': ['reticent', 'tencteri'],\n 'reticket': ['reticket', 'ticketer'],\n 'reticula': ['arculite', 'cutleria', 'lucretia', 'reticula', 'treculia'],\n 'reticular': ['curtailer', 'recruital', 'reticular'],\n 'retier': ['errite', 'reiter', 'retier', 'retire', 'tierer'],\n 'retighten': ['retighten', 'tightener'],\n 'retill': ['retill', 'rillet', 'tiller'],\n 'retimber': ['retimber', 'timberer'],\n 'retime': ['metier', 'retime', 'tremie'],\n 'retin': ['inert', 'inter', 'niter', 'retin', 'trine'],\n 'retina': ['nerita', 'ratine', 'retain', 'retina', 'tanier'],\n 'retinal': ['entrail',\n             'latiner',\n             'latrine',\n             'ratline',\n             'reliant',\n             'retinal',\n             'trenail'],\n 'retinalite': ['retinalite', 'trilineate'],\n 'retinene': ['internee', 'retinene'],\n 'retinian': ['neritina', 'retinian'],\n 'retinispora': ['respiration', 'retinispora'],\n 'retinite': ['intertie', 'retinite'],\n 'retinker': ['retinker', 'tinkerer'],\n 'retinochorioiditis': ['chorioidoretinitis', 'retinochorioiditis'],\n 'retinoid': ['neritoid', 'retinoid'],\n 'retinue': ['neurite', 'retinue', 'reunite', 'uterine'],\n 'retinula': ['lutrinae', 'retinula', 'rutelian', 'tenurial'],\n 'retinular': ['retinular', 'trineural'],\n 'retip': ['perit', 'retip', 'tripe'],\n 'retiral': ['retiral', 'retrial', 'trailer'],\n 'retire': ['errite', 'reiter', 'retier', 'retire', 'tierer'],\n 'retirer': ['retirer', 'terrier'],\n 'retistene': ['retistene', 'serinette'],\n 'retoast': ['retoast', 'rosetta', 'stoater', 'toaster'],\n 'retold': ['retold', 'rodlet'],\n 'retomb': ['retomb', 'trombe'],\n 'retonation': ['renotation', 'retonation'],\n 'retool': ['looter', 'retool', 'rootle', 'tooler'],\n 'retooth': ['retooth', 'toother'],\n 'retort': ['retort', 'retrot', 'rotter'],\n 'retoss': ['retoss', 'tosser'],\n 'retouch': ['retouch', 'toucher'],\n 'retour': ['retour', 'router', 'tourer'],\n 'retrace': ['caterer', 'recrate', 'retrace', 'terrace'],\n 'retrack': ['retrack', 'tracker'],\n 'retractation': ['reattraction', 'retractation'],\n 'retracted': ['detracter', 'retracted'],\n 'retraction': ['retraction', 'triaconter'],\n 'retrad': ['darter',\n            'dartre',\n            'redart',\n            'retard',\n            'retrad',\n            'tarred',\n            'trader'],\n 'retrade': ['derater', 'retrade', 'retread', 'treader'],\n 'retradition': ['retradition', 'traditioner'],\n 'retrain': ['arterin', 'retrain', 'terrain', 'trainer'],\n 'retral': ['retral', 'terral'],\n 'retramp': ['retramp', 'tramper'],\n 'retransform': ['retransform', 'transformer'],\n 'retransit': ['restraint', 'retransit', 'trainster', 'transiter'],\n 'retransplant': ['retransplant', 'transplanter'],\n 'retransport': ['retransport', 'transporter'],\n 'retravel': ['retravel', 'revertal', 'traveler'],\n 'retread': ['derater', 'retrade', 'retread', 'treader'],\n 'retreat': ['ettarre', 'retreat', 'treater'],\n 'retree': ['retree', 'teerer'],\n 'retrench': ['retrench', 'trencher'],\n 'retrial': ['retiral', 'retrial', 'trailer'],\n 'retrim': ['mitrer', 'retrim', 'trimer'],\n 'retrocaecal': ['accelerator', 'retrocaecal'],\n 'retrogradient': ['redintegrator', 'retrogradient'],\n 'retrorse': ['resorter', 'restorer', 'retrorse'],\n 'retrot': ['retort', 'retrot', 'rotter'],\n 'retrue': ['retrue', 'ureter'],\n 'retrust': ['retrust', 'truster'],\n 'retry': ['retry', 'terry'],\n 'retter': ['retter', 'terret'],\n 'retting': ['gittern', 'gritten', 'retting'],\n 'retube': ['rebute', 'retube'],\n 'retuck': ['retuck', 'tucker'],\n 'retune': ['neuter', 'retune', 'runtee', 'tenure', 'tureen'],\n 'returf': ['returf', 'rufter'],\n 'return': ['return', 'turner'],\n 'retuse': ['retuse', 'tereus'],\n 'retwine': ['enwrite', 'retwine'],\n 'retwist': ['retwist', 'twister'],\n 'retzian': ['retzian', 'terzina'],\n 'reub': ['bure', 'reub', 'rube'],\n 'reundergo': ['guerdoner', 'reundergo', 'undergoer', 'undergore'],\n 'reune': ['enure', 'reune'],\n 'reunfold': ['flounder', 'reunfold', 'unfolder'],\n 'reunify': ['reunify', 'unfiery'],\n 'reunionist': ['reunionist', 'sturionine'],\n 'reunite': ['neurite', 'retinue', 'reunite', 'uterine'],\n 'reunpack': ['reunpack', 'unpacker'],\n 'reuphold': ['reuphold', 'upholder'],\n 'reupholster': ['reupholster', 'upholsterer'],\n 'reuplift': ['reuplift', 'uplifter'],\n 'reuse': ['resue', 'reuse'],\n 'reutter': ['reutter', 'utterer'],\n 'revacate': ['acervate', 'revacate'],\n 'revalidation': ['derivational', 'revalidation'],\n 'revamp': ['revamp', 'vamper'],\n 'revarnish': ['revarnish', 'varnisher'],\n 'reve': ['ever', 'reve', 'veer'],\n 'reveal': ['laveer', 'leaver', 'reveal', 'vealer'],\n 'reveil': ['levier', 'relive', 'reveil', 'revile', 'veiler'],\n 'revel': ['elver', 'lever', 'revel'],\n 'revelant': ['levanter', 'relevant', 'revelant'],\n 'revelation': ['relevation', 'revelation'],\n 'revelator': ['relevator', 'revelator', 'veratrole'],\n 'reveler': ['leverer', 'reveler'],\n 'revenant': ['revenant', 'venerant'],\n 'revend': ['revend', 'vender'],\n 'revender': ['revender', 'reverend'],\n 'reveneer': ['reveneer', 'veneerer'],\n 'revent': ['revent', 'venter'],\n 'revenue': ['revenue', 'unreeve'],\n 'rever': ['rever', 'verre'],\n 'reverend': ['revender', 'reverend'],\n 'reverential': ['interleaver', 'reverential'],\n 'reverist': ['restrive', 'reverist'],\n 'revers': ['revers', 'server', 'verser'],\n 'reversable': ['reservable', 'reversable'],\n 'reversal': ['reserval', 'reversal', 'slaverer'],\n 'reverse': ['reserve', 'resever', 'reverse', 'severer'],\n 'reversed': ['deserver', 'reserved', 'reversed'],\n 'reversedly': ['reservedly', 'reversedly'],\n 'reverseful': ['reserveful', 'reverseful'],\n 'reverseless': ['reserveless', 'reverseless'],\n 'reverser': ['reserver', 'reverser'],\n 'reversewise': ['reversewise', 'revieweress'],\n 'reversi': ['reversi', 'reviser'],\n 'reversion': ['reversion', 'versioner'],\n 'reversist': ['reservist', 'reversist'],\n 'revertal': ['retravel', 'revertal', 'traveler'],\n 'revest': ['revest', 'servet', 'sterve', 'verset', 'vester'],\n 'revet': ['evert', 'revet'],\n 'revete': ['revete', 'tervee'],\n 'revictual': ['lucrative', 'revictual', 'victualer'],\n 'review': ['review', 'viewer'],\n 'revieweress': ['reversewise', 'revieweress'],\n 'revigorate': ['overgaiter', 'revigorate'],\n 'revile': ['levier', 'relive', 'reveil', 'revile', 'veiler'],\n 'reviling': ['reviling', 'vierling'],\n 'revisal': ['revisal', 'virales'],\n 'revise': ['revise', 'siever'],\n 'revised': ['deviser', 'diverse', 'revised'],\n 'reviser': ['reversi', 'reviser'],\n 'revision': ['revision', 'visioner'],\n 'revisit': ['revisit', 'visiter'],\n 'revisitant': ['revisitant', 'transitive'],\n 'revitalization': ['relativization', 'revitalization'],\n 'revitalize': ['relativize', 'revitalize'],\n 'revocation': ['overaction', 'revocation'],\n 'revocative': ['overactive', 'revocative'],\n 'revoke': ['evoker', 'revoke'],\n 'revolting': ['overglint', 'revolting'],\n 'revolute': ['revolute', 'truelove'],\n 'revolve': ['evolver', 'revolve'],\n 'revomit': ['revomit', 'vomiter'],\n 'revote': ['revote', 'vetoer'],\n 'revuist': ['revuist', 'stuiver'],\n 'rewade': ['drawee', 'rewade'],\n 'rewager': ['rewager', 'wagerer'],\n 'rewake': ['kerewa', 'rewake'],\n 'rewaken': ['rewaken', 'wakener'],\n 'rewall': ['rewall', 'waller'],\n 'rewallow': ['rewallow', 'wallower'],\n 'reward': ['drawer', 'redraw', 'reward', 'warder'],\n 'rewarder': ['redrawer', 'rewarder', 'warderer'],\n 'rewarm': ['rewarm', 'warmer'],\n 'rewarn': ['rewarn', 'warner', 'warren'],\n 'rewash': ['hawser', 'rewash', 'washer'],\n 'rewater': ['rewater', 'waterer'],\n 'rewave': ['rewave', 'weaver'],\n 'rewax': ['rewax', 'waxer'],\n 'reweaken': ['reweaken', 'weakener'],\n 'rewear': ['rewear', 'warree', 'wearer'],\n 'rewed': ['dewer', 'ewder', 'rewed'],\n 'reweigh': ['reweigh', 'weigher'],\n 'reweld': ['reweld', 'welder'],\n 'rewet': ['rewet', 'tewer', 'twere'],\n 'rewhirl': ['rewhirl', 'whirler'],\n 'rewhisper': ['rewhisper', 'whisperer'],\n 'rewhiten': ['rewhiten', 'whitener'],\n 'rewiden': ['rewiden', 'widener'],\n 'rewin': ['erwin', 'rewin', 'winer'],\n 'rewind': ['rewind', 'winder'],\n 'rewish': ['rewish', 'wisher'],\n 'rewithdraw': ['rewithdraw', 'withdrawer'],\n 'reword': ['reword', 'worder'],\n 'rework': ['rework', 'worker'],\n 'reworked': ['reedwork', 'reworked'],\n 'rewound': ['rewound', 'unrowed', 'wounder'],\n 'rewoven': ['overnew', 'rewoven'],\n 'rewrap': ['prewar', 'rewrap', 'warper'],\n 'reyield': ['reedily', 'reyield', 'yielder'],\n 'rhacianectes': ['rachianectes', 'rhacianectes'],\n 'rhaetian': ['earthian', 'rhaetian'],\n 'rhaetic': ['certhia', 'rhaetic', 'theriac'],\n 'rhamnose': ['horseman', 'rhamnose', 'shoreman'],\n 'rhamnoside': ['admonisher', 'rhamnoside'],\n 'rhapis': ['parish', 'raphis', 'rhapis'],\n 'rhapontic': ['anthropic', 'rhapontic'],\n 'rhaponticin': ['panornithic', 'rhaponticin'],\n 'rhason': ['rhason', 'sharon', 'shoran'],\n 'rhatania': ['ratanhia', 'rhatania'],\n 'rhe': ['her', 'reh', 'rhe'],\n 'rhea': ['hare', 'hear', 'rhea'],\n 'rheen': ['herne', 'rheen'],\n 'rheic': ['cheir', 'rheic'],\n 'rhein': ['hiren', 'rhein', 'rhine'],\n 'rheinic': ['hircine', 'rheinic'],\n 'rhema': ['harem', 'herma', 'rhema'],\n 'rhematic': ['athermic', 'marchite', 'rhematic'],\n 'rheme': ['herem', 'rheme'],\n 'rhemist': ['rhemist', 'smither'],\n 'rhenium': ['inhumer', 'rhenium'],\n 'rheometric': ['chirometer', 'rheometric'],\n 'rheophile': ['herophile', 'rheophile'],\n 'rheoscope': ['prechoose', 'rheoscope'],\n 'rheostatic': ['choristate', 'rheostatic'],\n 'rheotactic': ['rheotactic', 'theocratic'],\n 'rheotan': ['another', 'athenor', 'rheotan'],\n 'rheotropic': ['horopteric', 'rheotropic', 'trichopore'],\n 'rhesian': ['arshine', 'nearish', 'rhesian', 'sherani'],\n 'rhesus': ['rhesus', 'suresh'],\n 'rhetor': ['rhetor', 'rother'],\n 'rhetoricals': ['rhetoricals', 'trochlearis'],\n 'rhetorize': ['rhetorize', 'theorizer'],\n 'rheumatic': ['hematuric', 'rheumatic'],\n 'rhine': ['hiren', 'rhein', 'rhine'],\n 'rhinestone': ['neornithes', 'rhinestone'],\n 'rhineura': ['rhineura', 'unhairer'],\n 'rhinocele': ['cholerine', 'rhinocele'],\n 'rhinopharyngitis': ['pharyngorhinitis', 'rhinopharyngitis'],\n 'rhipidate': ['rhipidate', 'thripidae'],\n 'rhizoctonia': ['chorization', 'rhizoctonia', 'zonotrichia'],\n 'rhoda': ['hoard', 'rhoda'],\n 'rhodaline': ['hodiernal', 'rhodaline'],\n 'rhodanthe': ['rhodanthe', 'thornhead'],\n 'rhodeose': ['rhodeose', 'seerhood'],\n 'rhodes': ['dehors', 'rhodes', 'shoder', 'shored'],\n 'rhodic': ['orchid', 'rhodic'],\n 'rhodite': ['rhodite', 'theroid'],\n 'rhodium': ['humidor', 'rhodium'],\n 'rhodope': ['redhoop', 'rhodope'],\n 'rhodopsin': ['donorship', 'rhodopsin'],\n 'rhoecus': ['choreus', 'chouser', 'rhoecus'],\n 'rhopalic': ['orphical', 'rhopalic'],\n 'rhus': ['rhus', 'rush'],\n 'rhynchotal': ['chloranthy', 'rhynchotal'],\n 'rhyton': ['rhyton', 'thorny'],\n 'ria': ['air', 'ira', 'ria'],\n 'rial': ['aril', 'lair', 'lari', 'liar', 'lira', 'rail', 'rial'],\n 'riancy': ['cairny', 'riancy'],\n 'riant': ['riant', 'tairn', 'tarin', 'train'],\n 'riata': ['arati', 'atria', 'riata', 'tarai', 'tiara'],\n 'ribald': ['bildar', 'bridal', 'ribald'],\n 'ribaldly': ['bridally', 'ribaldly'],\n 'riband': ['brandi', 'riband'],\n 'ribat': ['barit', 'ribat'],\n 'ribbed': ['dibber', 'ribbed'],\n 'ribber': ['briber', 'ribber'],\n 'ribble': ['libber', 'ribble'],\n 'ribbon': ['ribbon', 'robbin'],\n 'ribe': ['beri', 'bier', 'brei', 'ribe'],\n 'ribes': ['birse', 'ribes'],\n 'riblet': ['beltir', 'riblet'],\n 'ribroast': ['arborist', 'ribroast'],\n 'ribspare': ['ribspare', 'sparerib'],\n 'rice': ['eric', 'rice'],\n 'ricer': ['crier', 'ricer'],\n 'ricey': ['criey', 'ricey'],\n 'richardia': ['charadrii', 'richardia'],\n 'richdom': ['chromid', 'richdom'],\n 'richen': ['enrich', 'nicher', 'richen'],\n 'riches': ['riches', 'shicer'],\n 'richt': ['crith', 'richt'],\n 'ricine': ['irenic', 'ricine'],\n 'ricinoleate': ['arenicolite', 'ricinoleate'],\n 'rickets': ['rickets', 'sticker'],\n 'rickle': ['licker', 'relick', 'rickle'],\n 'rictal': ['citral', 'rictal'],\n 'rictus': ['citrus', 'curtis', 'rictus', 'rustic'],\n 'ridable': ['bedrail', 'bridale', 'ridable'],\n 'ridably': ['bardily', 'rabidly', 'ridably'],\n 'riddam': ['madrid', 'riddam'],\n 'riddance': ['adendric', 'riddance'],\n 'riddel': ['lidder', 'riddel', 'riddle'],\n 'ridden': ['dinder', 'ridden', 'rinded'],\n 'riddle': ['lidder', 'riddel', 'riddle'],\n 'ride': ['dier', 'dire', 'reid', 'ride'],\n 'rideau': ['auride', 'rideau'],\n 'riden': ['diner', 'riden', 'rinde'],\n 'rident': ['dirten', 'rident', 'tinder'],\n 'rider': ['drier', 'rider'],\n 'ridered': ['deirdre', 'derider', 'derride', 'ridered'],\n 'ridge': ['dirge', 'gride', 'redig', 'ridge'],\n 'ridgel': ['gilder', 'girdle', 'glider', 'regild', 'ridgel'],\n 'ridgelike': ['dirgelike', 'ridgelike'],\n 'ridger': ['girder', 'ridger'],\n 'ridging': ['girding', 'ridging'],\n 'ridgingly': ['girdingly', 'ridgingly'],\n 'ridgling': ['girdling', 'ridgling'],\n 'ridgy': ['igdyr', 'ridgy'],\n 'rie': ['ire', 'rie'],\n 'riem': ['emir', 'imer', 'mire', 'reim', 'remi', 'riem', 'rime'],\n 'rife': ['fire', 'reif', 'rife'],\n 'rifeness': ['finesser', 'rifeness'],\n 'rifle': ['filer', 'flier', 'lifer', 'rifle'],\n 'rifleman': ['inflamer', 'rifleman'],\n 'rift': ['frit', 'rift'],\n 'rigadoon': ['gordonia', 'organoid', 'rigadoon'],\n 'rigation': ['rigation', 'trigonia'],\n 'rigbane': ['bearing', 'begrain', 'brainge', 'rigbane'],\n 'right': ['girth', 'grith', 'right'],\n 'rightle': ['lighter', 'relight', 'rightle'],\n 'rigling': ['girling', 'rigling'],\n 'rigolette': ['gloriette', 'rigolette'],\n 'rik': ['irk', 'rik'],\n 'rikisha': ['rikisha', 'shikari'],\n 'rikk': ['kirk', 'rikk'],\n 'riksha': ['rakish', 'riksha', 'shikar', 'shikra', 'sikhra'],\n 'rile': ['lier', 'lire', 'rile'],\n 'rillet': ['retill', 'rillet', 'tiller'],\n 'rillett': ['rillett', 'trillet'],\n 'rillock': ['rillock', 'rollick'],\n 'rim': ['mir', 'rim'],\n 'rima': ['amir', 'irma', 'mari', 'mira', 'rami', 'rima'],\n 'rimal': ['armil', 'marli', 'rimal'],\n 'rimate': ['imaret', 'metria', 'mirate', 'rimate'],\n 'rime': ['emir', 'imer', 'mire', 'reim', 'remi', 'riem', 'rime'],\n 'rimmed': ['dimmer', 'immerd', 'rimmed'],\n 'rimose': ['isomer', 'rimose'],\n 'rimple': ['limper', 'prelim', 'rimple'],\n 'rimu': ['muir', 'rimu'],\n 'rimula': ['rimula', 'uramil'],\n 'rimy': ['miry', 'rimy', 'yirm'],\n 'rinaldo': ['nailrod', 'ordinal', 'rinaldo', 'rodinal'],\n 'rinceau': ['aneuric', 'rinceau'],\n 'rincon': ['cornin', 'rincon'],\n 'rinde': ['diner', 'riden', 'rinde'],\n 'rinded': ['dinder', 'ridden', 'rinded'],\n 'rindle': ['linder', 'rindle'],\n 'rine': ['neri', 'rein', 'rine'],\n 'ring': ['girn', 'grin', 'ring'],\n 'ringable': ['balinger', 'ringable'],\n 'ringe': ['grein', 'inger', 'nigre', 'regin', 'reign', 'ringe'],\n 'ringed': ['engird', 'ringed'],\n 'ringer': ['erring', 'rering', 'ringer'],\n 'ringgoer': ['gorgerin', 'ringgoer'],\n 'ringhead': ['headring', 'ringhead'],\n 'ringite': ['igniter', 'ringite', 'tigrine'],\n 'ringle': ['linger', 'ringle'],\n 'ringlead': ['dragline', 'reginald', 'ringlead'],\n 'ringlet': ['ringlet', 'tingler', 'tringle'],\n 'ringster': ['restring', 'ringster', 'stringer'],\n 'ringtail': ['ringtail', 'trailing'],\n 'ringy': ['girny', 'ringy'],\n 'rink': ['kirn', 'rink'],\n 'rinka': ['inkra', 'krina', 'nakir', 'rinka'],\n 'rinse': ['reins', 'resin', 'rinse', 'risen', 'serin', 'siren'],\n 'rio': ['rio', 'roi'],\n 'riot': ['riot', 'roit', 'trio'],\n 'rioting': ['ignitor', 'rioting'],\n 'rip': ['pir', 'rip'],\n 'ripa': ['pair', 'pari', 'pria', 'ripa'],\n 'ripal': ['april', 'pilar', 'ripal'],\n 'ripe': ['peri', 'pier', 'ripe'],\n 'ripelike': ['pierlike', 'ripelike'],\n 'ripen': ['piner', 'prine', 'repin', 'ripen'],\n 'ripener': ['repiner', 'ripener'],\n 'ripeningly': ['repiningly', 'ripeningly'],\n 'riper': ['prier', 'riper'],\n 'ripgut': ['ripgut', 'upgirt'],\n 'ripost': ['ripost', 'triops', 'tripos'],\n 'riposte': ['periost', 'porites', 'reposit', 'riposte'],\n 'rippet': ['rippet', 'tipper'],\n 'ripple': ['lipper', 'ripple'],\n 'ripplet': ['ripplet', 'tippler', 'tripple'],\n 'ripup': ['ripup', 'uprip'],\n 'rise': ['reis', 'rise', 'seri', 'sier', 'sire'],\n 'risen': ['reins', 'resin', 'rinse', 'risen', 'serin', 'siren'],\n 'rishi': ['irish', 'rishi', 'sirih'],\n 'risk': ['kris', 'risk'],\n 'risky': ['risky', 'sirky'],\n 'risper': ['risper', 'sprier'],\n 'risque': ['risque', 'squire'],\n 'risquee': ['esquire', 'risquee'],\n 'rissel': ['rissel', 'rissle'],\n 'rissle': ['rissel', 'rissle'],\n 'rissoa': ['aissor', 'rissoa'],\n 'rist': ['rist', 'stir'],\n 'rit': ['rit', 'tri'],\n 'rita': ['airt', 'rita', 'tari', 'tiar'],\n 'rite': ['iter', 'reit', 'rite', 'teri', 'tier', 'tire'],\n 'riteless': ['riteless', 'tireless'],\n 'ritelessness': ['ritelessness', 'tirelessness'],\n 'ritling': ['glitnir', 'ritling'],\n 'ritualize': ['ritualize', 'uralitize'],\n 'riva': ['ravi', 'riva', 'vair', 'vari', 'vira'],\n 'rivage': ['argive', 'rivage'],\n 'rival': ['rival', 'viral'],\n 'rive': ['rive', 'veri', 'vier', 'vire'],\n 'rivel': ['levir', 'liver', 'livre', 'rivel'],\n 'riven': ['riven', 'viner'],\n 'rivered': ['deriver', 'redrive', 'rivered'],\n 'rivet': ['rivet', 'tirve', 'tiver'],\n 'riveter': ['rerivet', 'riveter'],\n 'rivetless': ['rivetless', 'silvester'],\n 'riving': ['irving', 'riving', 'virgin'],\n 'rivingly': ['rivingly', 'virginly'],\n 'rivose': ['rivose', 'virose'],\n 'riyal': ['lairy', 'riyal'],\n 'ro': ['or', 'ro'],\n 'roach': ['achor', 'chora', 'corah', 'orach', 'roach'],\n 'road': ['dora', 'orad', 'road'],\n 'roadability': ['adorability', 'roadability'],\n 'roadable': ['adorable', 'roadable'],\n 'roader': ['adorer', 'roader'],\n 'roading': ['gordian', 'idorgan', 'roading'],\n 'roadite': ['roadite', 'toadier'],\n 'roadman': ['anadrom', 'madrona', 'mandora', 'monarda', 'roadman'],\n 'roadster': ['dartrose', 'roadster'],\n 'roam': ['amor', 'maro', 'mora', 'omar', 'roam'],\n 'roamage': ['georama', 'roamage'],\n 'roamer': ['remora', 'roamer'],\n 'roaming': ['ingomar', 'moringa', 'roaming'],\n 'roan': ['nora', 'orna', 'roan'],\n 'roast': ['astor', 'roast'],\n 'roastable': ['astrolabe', 'roastable'],\n 'roasting': ['orangist', 'organist', 'roasting', 'signator'],\n 'rob': ['bor', 'orb', 'rob'],\n 'robalo': ['barolo', 'robalo'],\n 'roband': ['bandor', 'bondar', 'roband'],\n 'robbin': ['ribbon', 'robbin'],\n 'robe': ['boer', 'bore', 'robe'],\n 'rober': ['borer', 'rerob', 'rober'],\n 'roberd': ['border', 'roberd'],\n 'roberta': ['arboret', 'roberta', 'taborer'],\n 'robin': ['biron', 'inorb', 'robin'],\n 'robinet': ['bornite', 'robinet'],\n 'robing': ['boring', 'robing'],\n 'roble': ['blore', 'roble'],\n 'robot': ['boort', 'robot'],\n 'robotian': ['abortion', 'robotian'],\n 'robotism': ['bimotors', 'robotism'],\n 'robur': ['burro', 'robur', 'rubor'],\n 'roc': ['cor', 'cro', 'orc', 'roc'],\n 'rochea': ['chorea', 'ochrea', 'rochea'],\n 'rochet': ['hector', 'rochet', 'tocher', 'troche'],\n 'rock': ['cork', 'rock'],\n 'rocker': ['corker', 'recork', 'rocker'],\n 'rocketer': ['rocketer', 'rocktree'],\n 'rockiness': ['corkiness', 'rockiness'],\n 'rocking': ['corking', 'rocking'],\n 'rockish': ['corkish', 'rockish'],\n 'rocktree': ['rocketer', 'rocktree'],\n 'rockwood': ['corkwood', 'rockwood', 'woodrock'],\n 'rocky': ['corky', 'rocky'],\n 'rocta': ['actor', 'corta', 'croat', 'rocta', 'taroc', 'troca'],\n 'rod': ['dor', 'rod'],\n 'rode': ['doer', 'redo', 'rode', 'roed'],\n 'rodentia': ['andorite', 'nadorite', 'ordinate', 'rodentia'],\n 'rodential': ['lorandite', 'rodential'],\n 'rodinal': ['nailrod', 'ordinal', 'rinaldo', 'rodinal'],\n 'rodingite': ['negritoid', 'rodingite'],\n 'rodless': ['drossel', 'rodless'],\n 'rodlet': ['retold', 'rodlet'],\n 'rodman': ['random', 'rodman'],\n 'rodney': ['rodney', 'yonder'],\n 'roe': ['oer', 'ore', 'roe'],\n 'roed': ['doer', 'redo', 'rode', 'roed'],\n 'roey': ['oyer', 'roey', 'yore'],\n 'rog': ['gor', 'rog'],\n 'rogan': ['angor',\n           'argon',\n           'goran',\n           'grano',\n           'groan',\n           'nagor',\n           'orang',\n           'organ',\n           'rogan',\n           'ronga'],\n 'rogative': ['ravigote', 'rogative'],\n 'roger': ['gorer', 'roger'],\n 'roggle': ['logger', 'roggle'],\n 'rogue': ['orgue', 'rogue', 'rouge'],\n 'rohan': ['nahor', 'norah', 'rohan'],\n 'rohob': ['bohor', 'rohob'],\n 'rohun': ['huron', 'rohun'],\n 'roi': ['rio', 'roi'],\n 'roid': ['dori', 'roid'],\n 'roil': ['loir', 'lori', 'roil'],\n 'roister': ['roister', 'storier'],\n 'roit': ['riot', 'roit', 'trio'],\n 'rok': ['kor', 'rok'],\n 'roka': ['karo', 'kora', 'okra', 'roka'],\n 'roke': ['kore', 'roke'],\n 'rokey': ['rokey', 'yoker'],\n 'roky': ['kory', 'roky', 'york'],\n 'roland': ['androl', 'arnold', 'lardon', 'roland', 'ronald'],\n 'rolandic': ['ironclad', 'rolandic'],\n 'role': ['lore', 'orle', 'role'],\n 'rolfe': ['forel', 'rolfe'],\n 'roller': ['reroll', 'roller'],\n 'rollick': ['rillock', 'rollick'],\n 'romaean': ['neorama', 'romaean'],\n 'romain': ['marion', 'romain'],\n 'romaine': ['moraine', 'romaine'],\n 'romal': ['molar', 'moral', 'romal'],\n 'roman': ['manor', 'moran', 'norma', 'ramon', 'roman'],\n 'romancist': ['narcotism', 'romancist'],\n 'romancy': ['acronym', 'romancy'],\n 'romandom': ['monodram', 'romandom'],\n 'romane': ['enamor', 'monera', 'oreman', 'romane'],\n 'romanes': ['masoner', 'romanes'],\n 'romanian': ['maronian', 'romanian'],\n 'romanic': ['amicron', 'marconi', 'minorca', 'romanic'],\n 'romanist': ['maronist', 'romanist'],\n 'romanistic': ['marcionist', 'romanistic'],\n 'romanite': ['maronite', 'martinoe', 'minorate', 'morenita', 'romanite'],\n 'romanity': ['minatory', 'romanity'],\n 'romanly': ['almonry', 'romanly'],\n 'romantic': ['macrotin', 'romantic'],\n 'romanticly': ['matrocliny', 'romanticly'],\n 'romantism': ['matronism', 'romantism'],\n 'rome': ['mero', 'more', 'omer', 'rome'],\n 'romeite': ['moieter', 'romeite'],\n 'romeo': ['moore', 'romeo'],\n 'romero': ['romero', 'roomer'],\n 'romeshot': ['resmooth', 'romeshot', 'smoother'],\n 'romeward': ['marrowed', 'romeward'],\n 'romic': ['micro', 'moric', 'romic'],\n 'romish': ['hirmos', 'romish'],\n 'rompish': ['orphism', 'rompish'],\n 'ron': ['nor', 'ron'],\n 'ronald': ['androl', 'arnold', 'lardon', 'roland', 'ronald'],\n 'roncet': ['conter', 'cornet', 'cronet', 'roncet'],\n 'ronco': ['conor', 'croon', 'ronco'],\n 'rond': ['dorn', 'rond'],\n 'rondache': ['anchored', 'rondache'],\n 'ronde': ['drone', 'ronde'],\n 'rondeau': ['rondeau', 'unoared'],\n 'rondel': ['rondel', 'rondle'],\n 'rondelet': ['redolent', 'rondelet'],\n 'rondeletia': ['delineator', 'rondeletia'],\n 'rondelle': ['enrolled', 'rondelle'],\n 'rondle': ['rondel', 'rondle'],\n 'rondo': ['donor', 'rondo'],\n 'rondure': ['rondure', 'rounder', 'unorder'],\n 'rone': ['oner', 'rone'],\n 'ronga': ['angor',\n           'argon',\n           'goran',\n           'grano',\n           'groan',\n           'nagor',\n           'orang',\n           'organ',\n           'rogan',\n           'ronga'],\n 'rood': ['door', 'odor', 'oord', 'rood'],\n 'roodstone': ['doorstone', 'roodstone'],\n 'roofer': ['reroof', 'roofer'],\n 'rooflet': ['footler', 'rooflet'],\n 'rook': ['kroo', 'rook'],\n 'rooker': ['korero', 'rooker'],\n 'rool': ['loro', 'olor', 'orlo', 'rool'],\n 'room': ['moor', 'moro', 'room'],\n 'roomage': ['moorage', 'roomage'],\n 'roomed': ['doomer', 'mooder', 'redoom', 'roomed'],\n 'roomer': ['romero', 'roomer'],\n 'roomlet': ['roomlet', 'tremolo'],\n 'roomstead': ['astrodome', 'roomstead'],\n 'roomward': ['roomward', 'wardroom'],\n 'roomy': ['moory', 'roomy'],\n 'roost': ['roost', 'torso'],\n 'root': ['root', 'roto', 'toro'],\n 'rooter': ['reroot', 'rooter', 'torero'],\n 'rootle': ['looter', 'retool', 'rootle', 'tooler'],\n 'rootlet': ['rootlet', 'tootler'],\n 'rootworm': ['moorwort', 'rootworm', 'tomorrow', 'wormroot'],\n 'rope': ['pore', 'rope'],\n 'ropeable': ['operable', 'ropeable'],\n 'ropelike': ['porelike', 'ropelike'],\n 'ropeman': ['manrope', 'ropeman'],\n 'roper': ['porer', 'prore', 'roper'],\n 'ropes': ['poser', 'prose', 'ropes', 'spore'],\n 'ropiness': ['poriness', 'pression', 'ropiness'],\n 'roping': ['poring', 'roping'],\n 'ropp': ['prop', 'ropp'],\n 'ropy': ['pory', 'pyro', 'ropy'],\n 'roquet': ['quoter', 'roquet', 'torque'],\n 'rosa': ['asor', 'rosa', 'soar', 'sora'],\n 'rosabel': ['borlase', 'labrose', 'rosabel'],\n 'rosal': ['rosal', 'solar', 'soral'],\n 'rosales': ['lassoer', 'oarless', 'rosales'],\n 'rosalie': ['rosalie', 'seriola'],\n 'rosaniline': ['enaliornis', 'rosaniline'],\n 'rosated': ['rosated', 'torsade'],\n 'rose': ['eros', 'rose', 'sero', 'sore'],\n 'roseal': ['roseal', 'solera'],\n 'rosed': ['doser', 'rosed'],\n 'rosehead': ['rosehead', 'sorehead'],\n 'roseine': ['erinose', 'roseine'],\n 'rosel': ['loser', 'orsel', 'rosel', 'soler'],\n 'roselite': ['literose', 'roselite', 'tirolese'],\n 'roselle': ['orselle', 'roselle'],\n 'roseola': ['aerosol', 'roseola'],\n 'roset': ['roset', 'rotse', 'soter', 'stero', 'store', 'torse'],\n 'rosetan': ['noreast', 'rosetan', 'seatron', 'senator', 'treason'],\n 'rosetime': ['rosetime', 'timorese', 'tiresome'],\n 'rosetta': ['retoast', 'rosetta', 'stoater', 'toaster'],\n 'rosette': ['rosette', 'tetrose'],\n 'rosetum': ['oestrum', 'rosetum'],\n 'rosety': ['oyster', 'rosety'],\n 'rosin': ['ornis', 'rosin'],\n 'rosinate': ['arsonite', 'asterion', 'oestrian', 'rosinate', 'serotina'],\n 'rosine': ['rosine', 'senior', 'soneri'],\n 'rosiness': ['insessor', 'rosiness'],\n 'rosmarine': ['morrisean', 'rosmarine'],\n 'rosolite': ['oestriol', 'rosolite'],\n 'rosorial': ['rosorial', 'sororial'],\n 'rossite': ['rossite', 'sorites'],\n 'rostel': ['relost', 'reslot', 'rostel', 'sterol', 'torsel'],\n 'roster': ['resort', 'roster', 'sorter', 'storer'],\n 'rostra': ['rostra', 'sartor'],\n 'rostrate': ['rostrate', 'trostera'],\n 'rosulate': ['oestrual', 'rosulate'],\n 'rosy': ['rosy', 'sory'],\n 'rot': ['ort', 'rot', 'tor'],\n 'rota': ['rota', 'taro', 'tora'],\n 'rotacism': ['acrotism', 'rotacism'],\n 'rotal': ['latro', 'rotal', 'toral'],\n 'rotala': ['aortal', 'rotala'],\n 'rotalian': ['notarial', 'rational', 'rotalian'],\n 'rotan': ['orant', 'rotan', 'toran', 'trona'],\n 'rotanev': ['rotanev', 'venator'],\n 'rotarian': ['rotarian', 'tornaria'],\n 'rotate': ['rotate', 'tetrao'],\n 'rotch': ['chort', 'rotch', 'torch'],\n 'rote': ['rote', 'tore'],\n 'rotella': ['reallot', 'rotella', 'tallero'],\n 'rotge': ['ergot', 'rotge'],\n 'rother': ['rhetor', 'rother'],\n 'roto': ['root', 'roto', 'toro'],\n 'rotse': ['roset', 'rotse', 'soter', 'stero', 'store', 'torse'],\n 'rottan': ['attorn', 'ratton', 'rottan'],\n 'rotten': ['rotten', 'terton'],\n 'rotter': ['retort', 'retrot', 'rotter'],\n 'rottle': ['lotter', 'rottle', 'tolter'],\n 'rotula': ['rotula', 'torula'],\n 'rotulian': ['rotulian', 'uranotil'],\n 'rotuliform': ['rotuliform', 'toruliform'],\n 'rotulus': ['rotulus', 'torulus'],\n 'rotund': ['rotund', 'untrod'],\n 'rotunda': ['rotunda', 'tandour'],\n 'rotundate': ['rotundate', 'unrotated'],\n 'rotundifoliate': ['rotundifoliate', 'titanofluoride'],\n 'rotundo': ['orotund', 'rotundo'],\n 'roub': ['buro', 'roub'],\n 'roud': ['dour', 'duro', 'ordu', 'roud'],\n 'rouge': ['orgue', 'rogue', 'rouge'],\n 'rougeot': ['outgoer', 'rougeot'],\n 'roughen': ['enrough', 'roughen'],\n 'roughie': ['higuero', 'roughie'],\n 'rouky': ['rouky', 'yurok'],\n 'roulade': ['roulade', 'urodela'],\n 'rounce': ['conure', 'rounce', 'uncore'],\n 'rounded': ['redound', 'rounded', 'underdo'],\n 'roundel': ['durenol', 'lounder', 'roundel'],\n 'rounder': ['rondure', 'rounder', 'unorder'],\n 'roundhead': ['roundhead', 'unhoarded'],\n 'roundseam': ['meandrous', 'roundseam'],\n 'roundup': ['roundup', 'unproud'],\n 'roup': ['pour', 'roup'],\n 'rouper': ['pourer', 'repour', 'rouper'],\n 'roupet': ['pouter', 'roupet', 'troupe'],\n 'rousedness': ['rousedness', 'souredness'],\n 'rouser': ['rouser', 'sourer'],\n 'rousing': ['nigrous', 'rousing', 'souring'],\n 'rousseau': ['eosaurus', 'rousseau'],\n 'roust': ['roust', 'rusot', 'stour', 'sutor', 'torus'],\n 'rouster': ['rouster', 'trouser'],\n 'rousting': ['rousting', 'stouring'],\n 'rout': ['rout', 'toru', 'tour'],\n 'route': ['outer', 'outre', 'route'],\n 'router': ['retour', 'router', 'tourer'],\n 'routh': ['routh', 'throu'],\n 'routhie': ['outhire', 'routhie'],\n 'routine': ['routine', 'tueiron'],\n 'routing': ['outgrin', 'outring', 'routing', 'touring'],\n 'routinist': ['introitus', 'routinist'],\n 'rove': ['over', 'rove'],\n 'rovet': ['overt', 'rovet', 'torve', 'trove', 'voter'],\n 'row': ['row', 'wro'],\n 'rowdily': ['rowdily', 'wordily'],\n 'rowdiness': ['rowdiness', 'wordiness'],\n 'rowdy': ['dowry', 'rowdy', 'wordy'],\n 'rowed': ['dower', 'rowed'],\n 'rowel': ['lower', 'owler', 'rowel'],\n 'rowelhead': ['rowelhead', 'wheelroad'],\n 'rowen': ['owner', 'reown', 'rowen'],\n 'rower': ['rerow', 'rower'],\n 'rowet': ['rowet', 'tower', 'wrote'],\n 'rowing': ['ingrow', 'rowing'],\n 'rowlet': ['rowlet', 'trowel', 'wolter'],\n 'rowley': ['lowery', 'owlery', 'rowley', 'yowler'],\n 'roxy': ['oryx', 'roxy'],\n 'roy': ['ory', 'roy', 'yor'],\n 'royalist': ['royalist', 'solitary'],\n 'royet': ['royet', 'toyer'],\n 'royt': ['royt', 'ryot', 'tory', 'troy', 'tyro'],\n 'rua': ['aru', 'rua', 'ura'],\n 'ruana': ['anura', 'ruana'],\n 'rub': ['bur', 'rub'],\n 'rubasse': ['rubasse', 'surbase'],\n 'rubato': ['outbar', 'rubato', 'tabour'],\n 'rubbed': ['dubber', 'rubbed'],\n 'rubble': ['burble', 'lubber', 'rubble'],\n 'rubbler': ['burbler', 'rubbler'],\n 'rubbly': ['burbly', 'rubbly'],\n 'rube': ['bure', 'reub', 'rube'],\n 'rubella': ['rubella', 'rulable'],\n 'rubescent': ['rubescent', 'subcenter'],\n 'rubiate': ['abiuret', 'aubrite', 'biurate', 'rubiate'],\n 'rubiator': ['rubiator', 'torrubia'],\n 'rubican': ['brucina', 'rubican'],\n 'rubied': ['burdie', 'buried', 'rubied'],\n 'rubification': ['rubification', 'urbification'],\n 'rubify': ['rubify', 'urbify'],\n 'rubine': ['burnie', 'rubine'],\n 'ruble': ['bluer', 'brule', 'burel', 'ruble'],\n 'rubor': ['burro', 'robur', 'rubor'],\n 'rubrical': ['bicrural', 'rubrical'],\n 'ruby': ['bury', 'ruby'],\n 'ructation': ['anticourt', 'curtation', 'ructation'],\n 'ruction': ['courtin', 'ruction'],\n 'rud': ['rud', 'urd'],\n 'rudas': ['rudas', 'sudra'],\n 'ruddle': ['dudler', 'ruddle'],\n 'rude': ['duer', 'dure', 'rude', 'urde'],\n 'rudish': ['hurdis', 'rudish'],\n 'rudista': ['dasturi', 'rudista'],\n 'rudity': ['durity', 'rudity'],\n 'rue': ['rue', 'ure'],\n 'ruen': ['renu', 'ruen', 'rune'],\n 'ruffed': ['duffer', 'ruffed'],\n 'rufter': ['returf', 'rufter'],\n 'rug': ['gur', 'rug'],\n 'ruga': ['gaur', 'guar', 'ruga'],\n 'rugate': ['argute', 'guetar', 'rugate', 'tuareg'],\n 'rugged': ['grudge', 'rugged'],\n 'ruggle': ['gurgle', 'lugger', 'ruggle'],\n 'rugose': ['grouse', 'rugose'],\n 'ruinate': ['ruinate', 'taurine', 'uranite', 'urinate'],\n 'ruination': ['ruination', 'urination'],\n 'ruinator': ['ruinator', 'urinator'],\n 'ruined': ['diurne', 'inured', 'ruined', 'unride'],\n 'ruing': ['irgun', 'ruing', 'unrig'],\n 'ruinous': ['ruinous', 'urinous'],\n 'ruinousness': ['ruinousness', 'urinousness'],\n 'rulable': ['rubella', 'rulable'],\n 'rule': ['lure', 'rule'],\n 'ruledom': ['remould', 'ruledom'],\n 'ruler': ['lurer', 'ruler'],\n 'ruling': ['ruling', 'urling'],\n 'rulingly': ['luringly', 'rulingly'],\n 'rum': ['mru', 'rum'],\n 'rumal': ['mural', 'rumal'],\n 'ruman': ['muran', 'ruman', 'unarm', 'unram', 'urman'],\n 'rumble': ['lumber', 'rumble', 'umbrel'],\n 'rumelian': ['lemurian', 'malurine', 'rumelian'],\n 'rumex': ['murex', 'rumex'],\n 'ruminant': ['nutramin', 'ruminant'],\n 'ruminator': ['antirumor', 'ruminator'],\n 'rumly': ['murly', 'rumly'],\n 'rumple': ['lumper', 'plumer', 'replum', 'rumple'],\n 'run': ['run', 'urn'],\n 'runback': ['backrun', 'runback'],\n 'runby': ['burny', 'runby'],\n 'runch': ['churn', 'runch'],\n 'runcinate': ['encurtain', 'runcinate', 'uncertain'],\n 'rundale': ['launder', 'rundale'],\n 'rundi': ['rundi', 'unrid'],\n 'rundlet': ['rundlet', 'trundle'],\n 'rune': ['renu', 'ruen', 'rune'],\n 'runed': ['runed', 'under', 'unred'],\n 'runer': ['rerun', 'runer'],\n 'runfish': ['furnish', 'runfish'],\n 'rung': ['grun', 'rung'],\n 'runic': ['curin', 'incur', 'runic'],\n 'runically': ['runically', 'unlyrical'],\n 'runite': ['runite', 'triune', 'uniter', 'untire'],\n 'runkly': ['knurly', 'runkly'],\n 'runlet': ['runlet', 'turnel'],\n 'runnet': ['runnet', 'tunner', 'unrent'],\n 'runout': ['outrun', 'runout'],\n 'runover': ['overrun', 'runover'],\n 'runt': ['runt', 'trun', 'turn'],\n 'runted': ['runted', 'tunder', 'turned'],\n 'runtee': ['neuter', 'retune', 'runtee', 'tenure', 'tureen'],\n 'runway': ['runway', 'unwary'],\n 'rupa': ['prau', 'rupa'],\n 'rupee': ['puree', 'rupee'],\n 'rupestrian': ['rupestrian', 'supertrain'],\n 'rupiah': ['hairup', 'rupiah'],\n 'rural': ['rural', 'urlar'],\n 'rus': ['rus', 'sur', 'urs'],\n 'rusa': ['rusa', 'saur', 'sura', 'ursa', 'usar'],\n 'ruscus': ['cursus', 'ruscus'],\n 'ruse': ['ruse', 'suer', 'sure', 'user'],\n 'rush': ['rhus', 'rush'],\n 'rushen': ['reshun', 'rushen'],\n 'rusine': ['insure', 'rusine', 'ursine'],\n 'rusma': ['musar', 'ramus', 'rusma', 'surma'],\n 'rusot': ['roust', 'rusot', 'stour', 'sutor', 'torus'],\n 'russelia': ['russelia', 'siruelas'],\n 'russet': ['russet', 'tusser'],\n 'russify': ['fissury', 'russify'],\n 'russine': ['russine', 'serinus', 'sunrise'],\n 'rustable': ['baluster', 'rustable'],\n 'rustic': ['citrus', 'curtis', 'rictus', 'rustic'],\n 'rusticial': ['curialist', 'rusticial'],\n 'rusticly': ['crustily', 'rusticly'],\n 'rusticness': ['crustiness', 'rusticness'],\n 'rustle': ['luster', 'result', 'rustle', 'sutler', 'ulster'],\n 'rustling': ['lustring', 'rustling'],\n 'rustly': ['rustly', 'sultry'],\n 'rut': ['rut', 'tur'],\n 'ruta': ['ruta', 'taur'],\n 'rutch': ['cruth', 'rutch'],\n 'rutelian': ['lutrinae', 'retinula', 'rutelian', 'tenurial'],\n 'rutelinae': ['lineature', 'rutelinae'],\n 'ruth': ['hurt', 'ruth'],\n 'ruthenian': ['hunterian', 'ruthenian'],\n 'ruther': ['hurter', 'ruther'],\n 'ruthful': ['hurtful', 'ruthful'],\n 'ruthfully': ['hurtfully', 'ruthfully'],\n 'ruthfulness': ['hurtfulness', 'ruthfulness'],\n 'ruthless': ['hurtless', 'ruthless'],\n 'ruthlessly': ['hurtlessly', 'ruthlessly'],\n 'ruthlessness': ['hurtlessness', 'ruthlessness'],\n 'rutilant': ['rutilant', 'turntail'],\n 'rutinose': ['rutinose', 'tursenoi'],\n 'rutter': ['rutter', 'turret'],\n 'rutyl': ['rutyl', 'truly'],\n 'rutylene': ['neuterly', 'rutylene'],\n 'ryal': ['aryl', 'lyra', 'ryal', 'yarl'],\n 'ryder': ['derry', 'redry', 'ryder'],\n 'rye': ['rye', 'yer'],\n 'ryen': ['ryen', 'yern'],\n 'ryot': ['royt', 'ryot', 'tory', 'troy', 'tyro'],\n 'rype': ['prey', 'pyre', 'rype'],\n 'rytina': ['rytina', 'trainy', 'tyrian'],\n 'sa': ['as', 'sa'],\n 'saa': ['asa', 'saa'],\n 'saan': ['anas', 'ansa', 'saan'],\n 'sab': ['bas', 'sab'],\n 'saba': ['abas', 'saba'],\n 'sabal': ['balas', 'balsa', 'basal', 'sabal'],\n 'saban': ['nasab', 'saban'],\n 'sabanut': ['sabanut', 'sabutan', 'tabanus'],\n 'sabe': ['base', 'besa', 'sabe', 'seba'],\n 'sabeca': ['casabe', 'sabeca'],\n 'sabella': ['basella', 'sabella', 'salable'],\n 'sabelli': ['sabelli', 'sebilla'],\n 'sabellid': ['sabellid', 'slidable'],\n 'saber': ['barse', 'besra', 'saber', 'serab'],\n 'sabered': ['debaser', 'sabered'],\n 'sabian': ['sabian', 'sabina'],\n 'sabina': ['sabian', 'sabina'],\n 'sabino': ['basion', 'bonsai', 'sabino'],\n 'sabir': ['baris', 'sabir'],\n 'sable': ['blase', 'sable'],\n 'saboraim': ['ambrosia', 'saboraim'],\n 'sabot': ['basto', 'boast', 'sabot'],\n 'sabotine': ['obeisant', 'sabotine'],\n 'sabromin': ['ambrosin', 'barosmin', 'sabromin'],\n 'sabulite': ['sabulite', 'suitable'],\n 'sabutan': ['sabanut', 'sabutan', 'tabanus'],\n 'sacalait': ['castalia', 'sacalait'],\n 'saccade': ['cascade', 'saccade'],\n 'saccomyian': ['saccomyian', 'saccomyina'],\n 'saccomyina': ['saccomyian', 'saccomyina'],\n 'sacculoutricular': ['sacculoutricular', 'utriculosaccular'],\n 'sacellum': ['camellus', 'sacellum'],\n 'sachem': ['sachem', 'schema'],\n 'sachet': ['chaste', 'sachet', 'scathe', 'scheat'],\n 'sacian': ['ascian', 'sacian', 'scania', 'sicana'],\n 'sack': ['cask', 'sack'],\n 'sackbut': ['sackbut', 'subtack'],\n 'sacken': ['sacken', 'skance'],\n 'sacker': ['resack', 'sacker', 'screak'],\n 'sacking': ['casking', 'sacking'],\n 'sacklike': ['casklike', 'sacklike'],\n 'sacque': ['casque', 'sacque'],\n 'sacral': ['lascar', 'rascal', 'sacral', 'scalar'],\n 'sacrification': ['sacrification', 'scarification'],\n 'sacrificator': ['sacrificator', 'scarificator'],\n 'sacripant': ['sacripant', 'spartanic'],\n 'sacro': ['arcos', 'crosa', 'oscar', 'sacro'],\n 'sacrodorsal': ['dorsosacral', 'sacrodorsal'],\n 'sacroischiac': ['isosaccharic', 'sacroischiac'],\n 'sacrolumbal': ['lumbosacral', 'sacrolumbal'],\n 'sacrovertebral': ['sacrovertebral', 'vertebrosacral'],\n 'sad': ['das', 'sad'],\n 'sadden': ['desand', 'sadden', 'sanded'],\n 'saddling': ['addlings', 'saddling'],\n 'sadh': ['dash', 'sadh', 'shad'],\n 'sadhe': ['deash', 'hades', 'sadhe', 'shade'],\n 'sadic': ['asdic', 'sadic'],\n 'sadie': ['aides', 'aside', 'sadie'],\n 'sadiron': ['sadiron', 'sardoin'],\n 'sado': ['dosa', 'sado', 'soda'],\n 'sadr': ['sadr', 'sard'],\n 'saeima': ['asemia', 'saeima'],\n 'saernaite': ['arseniate', 'saernaite'],\n 'saeter': ['asteer',\n            'easter',\n            'eastre',\n            'reseat',\n            'saeter',\n            'seater',\n            'staree',\n            'teaser',\n            'teresa'],\n 'saeume': ['amusee', 'saeume'],\n 'safar': ['safar', 'saraf'],\n 'safely': ['fayles', 'safely'],\n 'saft': ['fast', 'saft'],\n 'sag': ['gas', 'sag'],\n 'sagai': ['sagai', 'saiga'],\n 'sagene': ['sagene', 'senega'],\n 'sagger': ['sagger', 'seggar'],\n 'sagless': ['gasless', 'glasses', 'sagless'],\n 'sago': ['sago', 'soga'],\n 'sagoin': ['gosain', 'isagon', 'sagoin'],\n 'sagra': ['argas', 'sagra'],\n 'sah': ['ash', 'sah', 'sha'],\n 'saharic': ['arachis', 'asiarch', 'saharic'],\n 'sahh': ['hash', 'sahh', 'shah'],\n 'sahidic': ['hasidic', 'sahidic'],\n 'sahme': ['sahme', 'shame'],\n 'saho': ['saho', 'shoa'],\n 'sai': ['sai', 'sia'],\n 'saic': ['acis', 'asci', 'saic'],\n 'said': ['dais', 'dasi', 'disa', 'said', 'sida'],\n 'saidi': ['saidi', 'saiid'],\n 'saiga': ['sagai', 'saiga'],\n 'saiid': ['saidi', 'saiid'],\n 'sail': ['lasi', 'lias', 'lisa', 'sail', 'sial'],\n 'sailable': ['isabella', 'sailable'],\n 'sailage': ['algesia', 'sailage'],\n 'sailed': ['aisled', 'deasil', 'ladies', 'sailed'],\n 'sailer': ['israel', 'relais', 'resail', 'sailer', 'serail', 'serial'],\n 'sailing': ['aisling', 'sailing'],\n 'sailoring': ['sailoring', 'signorial'],\n 'sailsman': ['nasalism', 'sailsman'],\n 'saily': ['islay', 'saily'],\n 'saim': ['mias', 'saim', 'siam', 'sima'],\n 'sain': ['anis', 'nais', 'nasi', 'nias', 'sain', 'sina'],\n 'sainfoin': ['sainfoin', 'sinfonia'],\n 'saint': ['saint', 'satin', 'stain'],\n 'saintdom': ['donatism', 'saintdom'],\n 'sainted': ['destain', 'instead', 'sainted', 'satined'],\n 'saintless': ['saintless', 'saltiness', 'slatiness', 'stainless'],\n 'saintlike': ['kleistian', 'saintlike', 'satinlike'],\n 'saintly': ['nastily', 'saintly', 'staynil'],\n 'saintship': ['hispanist', 'saintship'],\n 'saip': ['apis', 'pais', 'pasi', 'saip'],\n 'saiph': ['aphis', 'apish', 'hispa', 'saiph', 'spahi'],\n 'sair': ['rais', 'sair', 'sari'],\n 'saite': ['saite', 'taise'],\n 'saithe': ['saithe', 'tashie', 'teaish'],\n 'saitic': ['isatic', 'saitic'],\n 'saivism': ['saivism', 'sivaism'],\n 'sak': ['ask', 'sak'],\n 'saka': ['asak', 'kasa', 'saka'],\n 'sake': ['sake', 'seak'],\n 'sakeen': ['sakeen', 'sekane'],\n 'sakel': ['alkes', 'sakel', 'slake'],\n 'saker': ['asker', 'reask', 'saker', 'sekar'],\n 'sakeret': ['restake', 'sakeret'],\n 'sakha': ['kasha', 'khasa', 'sakha', 'shaka'],\n 'saki': ['saki', 'siak', 'sika'],\n 'sal': ['las', 'sal', 'sla'],\n 'salable': ['basella', 'sabella', 'salable'],\n 'salably': ['basally', 'salably'],\n 'salaceta': ['catalase', 'salaceta'],\n 'salacot': ['coastal', 'salacot'],\n 'salading': ['salading', 'salangid'],\n 'salago': ['aglaos', 'salago'],\n 'salamandarin': ['salamandarin', 'salamandrian', 'salamandrina'],\n 'salamandrian': ['salamandarin', 'salamandrian', 'salamandrina'],\n 'salamandrina': ['salamandarin', 'salamandrian', 'salamandrina'],\n 'salangid': ['salading', 'salangid'],\n 'salariat': ['alastair', 'salariat'],\n 'salat': ['atlas', 'salat', 'salta'],\n 'salay': ['asyla', 'salay', 'sayal'],\n 'sale': ['elsa', 'sale', 'seal', 'slae'],\n 'salele': ['salele', 'sallee'],\n 'salep': ['elaps',\n           'lapse',\n           'lepas',\n           'pales',\n           'salep',\n           'saple',\n           'sepal',\n           'slape',\n           'spale',\n           'speal'],\n 'saleratus': ['assaulter', 'reassault', 'saleratus'],\n 'salian': ['anisal', 'nasial', 'salian', 'salina'],\n 'salic': ['lacis', 'salic'],\n 'salicin': ['incisal', 'salicin'],\n 'salicylide': ['salicylide', 'scylliidae'],\n 'salience': ['salience', 'secaline'],\n 'salient': ['elastin', 'salient', 'saltine', 'slainte'],\n 'salimeter': ['misrelate', 'salimeter'],\n 'salimetry': ['mysterial', 'salimetry'],\n 'salina': ['anisal', 'nasial', 'salian', 'salina'],\n 'saline': ['alsine', 'neslia', 'saline', 'selina', 'silane'],\n 'salinoterreous': ['salinoterreous', 'soliterraneous'],\n 'salite': ['isleta', 'litsea', 'salite', 'stelai'],\n 'salited': ['distale', 'salited'],\n 'saliva': ['saliva', 'salvia'],\n 'salivan': ['salivan', 'slavian'],\n 'salivant': ['navalist', 'salivant'],\n 'salivate': ['salivate', 'vestalia'],\n 'salle': ['salle', 'sella'],\n 'sallee': ['salele', 'sallee'],\n 'sallet': ['sallet', 'stella', 'talles'],\n 'sallow': ['sallow', 'swallo'],\n 'salm': ['alms', 'salm', 'slam'],\n 'salma': ['salma', 'samal'],\n 'salmine': ['malines', 'salmine', 'selamin', 'seminal'],\n 'salmis': ['missal', 'salmis'],\n 'salmo': ['salmo', 'somal'],\n 'salmonsite': ['assoilment', 'salmonsite'],\n 'salome': ['melosa', 'salome', 'semola'],\n 'salometer': ['elastomer', 'salometer'],\n 'salon': ['salon', 'sloan', 'solan'],\n 'saloon': ['alonso', 'alsoon', 'saloon'],\n 'salp': ['salp', 'slap'],\n 'salpa': ['palas', 'salpa'],\n 'salpidae': ['palisade', 'salpidae'],\n 'salpoid': ['psaloid', 'salpoid'],\n 'salt': ['last', 'salt', 'slat'],\n 'salta': ['atlas', 'salat', 'salta'],\n 'saltary': ['astylar', 'saltary'],\n 'saltation': ['saltation', 'stational'],\n 'salted': ['desalt', 'salted'],\n 'saltee': ['ateles', 'saltee', 'sealet', 'stelae', 'teasel'],\n 'salter': ['laster',\n            'lastre',\n            'rastle',\n            'relast',\n            'resalt',\n            'salter',\n            'slater',\n            'stelar'],\n 'saltern': ['saltern', 'starnel', 'sternal'],\n 'saltery': ['saltery', 'stearyl'],\n 'saltier': ['aletris', 'alister', 'listera', 'realist', 'saltier'],\n 'saltine': ['elastin', 'salient', 'saltine', 'slainte'],\n 'saltiness': ['saintless', 'saltiness', 'slatiness', 'stainless'],\n 'salting': ['anglist', 'lasting', 'salting', 'slating', 'staling'],\n 'saltish': ['saltish', 'slatish'],\n 'saltly': ['lastly', 'saltly'],\n 'saltness': ['lastness', 'saltness'],\n 'saltometer': ['rattlesome', 'saltometer'],\n 'saltus': ['saltus', 'tussal'],\n 'saltwife': ['flatwise', 'saltwife'],\n 'salty': ['lasty', 'salty', 'slaty'],\n 'salung': ['lugnas', 'salung'],\n 'salute': ['salute', 'setula'],\n 'saluter': ['arustle', 'estrual', 'saluter', 'saulter'],\n 'salva': ['salva', 'valsa', 'vasal'],\n 'salve': ['salve', 'selva', 'slave', 'valse'],\n 'salver': ['salver', 'serval', 'slaver', 'versal'],\n 'salvia': ['saliva', 'salvia'],\n 'salvy': ['salvy', 'sylva'],\n 'sam': ['mas', 'sam', 'sma'],\n 'samal': ['salma', 'samal'],\n 'saman': ['manas', 'saman'],\n 'samani': ['samani', 'samian'],\n 'samaritan': ['samaritan', 'sarmatian'],\n 'samas': ['amass', 'assam', 'massa', 'samas'],\n 'sambal': ['balsam', 'sambal'],\n 'sambo': ['ambos', 'sambo'],\n 'same': ['asem', 'mesa', 'same', 'seam'],\n 'samel': ['amsel', 'melas', 'mesal', 'samel'],\n 'samely': ['measly', 'samely'],\n 'samen': ['manes', 'manse', 'mensa', 'samen', 'senam'],\n 'samh': ['mash', 'samh', 'sham'],\n 'samian': ['samani', 'samian'],\n 'samiel': ['amiles', 'asmile', 'mesail', 'mesial', 'samiel'],\n 'samir': ['maris', 'marsi', 'samir', 'simar'],\n 'samisen': ['samisen', 'samsien'],\n 'samish': ['samish', 'sisham'],\n 'samite': ['samite', 'semita', 'tamise', 'teaism'],\n 'sammer': ['mamers', 'sammer'],\n 'sammier': ['amerism', 'asimmer', 'sammier'],\n 'samnani': ['ananism', 'samnani'],\n 'samnite': ['atenism', 'inmeats', 'insteam', 'samnite'],\n 'samoan': ['monasa', 'samoan'],\n 'samothere': ['heartsome', 'samothere'],\n 'samoyed': ['samoyed', 'someday'],\n 'samphire': ['samphire', 'seraphim'],\n 'sampi': ['apism', 'sampi'],\n 'sampler': ['lampers', 'sampler'],\n 'samsien': ['samisen', 'samsien'],\n 'samskara': ['makassar', 'samskara'],\n 'samucan': ['manacus', 'samucan'],\n 'samuel': ['amelus', 'samuel'],\n 'sanability': ['insatiably', 'sanability'],\n 'sanai': ['asian', 'naias', 'sanai'],\n 'sanand': ['sanand', 'sandan'],\n 'sanche': ['encash', 'sanche'],\n 'sanct': ['sanct', 'scant'],\n 'sanction': ['canonist', 'sanction', 'sonantic'],\n 'sanctioner': ['resanction', 'sanctioner'],\n 'sanctity': ['sanctity', 'scantity'],\n 'sandak': ['sandak', 'skanda'],\n 'sandan': ['sanand', 'sandan'],\n 'sandarac': ['carandas', 'sandarac'],\n 'sandawe': ['sandawe', 'weasand'],\n 'sanded': ['desand', 'sadden', 'sanded'],\n 'sanderling': ['sanderling', 'slandering'],\n 'sandflower': ['flandowser', 'sandflower'],\n 'sandhi': ['danish', 'sandhi'],\n 'sandra': ['nasard', 'sandra'],\n 'sandworm': ['sandworm', 'swordman', 'wordsman'],\n 'sane': ['anes', 'sane', 'sean'],\n 'sanetch': ['chasten', 'sanetch'],\n 'sang': ['sang', 'snag'],\n 'sanga': ['gasan', 'sanga'],\n 'sangar': ['argans', 'sangar'],\n 'sangei': ['easing', 'sangei'],\n 'sanger': ['angers', 'sanger', 'serang'],\n 'sangrel': ['sangrel', 'snagrel'],\n 'sanhita': ['ashanti', 'sanhita', 'shaitan', 'thasian'],\n 'sanicle': ['celsian', 'escalin', 'sanicle', 'secalin'],\n 'sanies': ['anesis', 'anseis', 'sanies', 'sansei', 'sasine'],\n 'sanious': ['sanious', 'suasion'],\n 'sanitate': ['astatine', 'sanitate'],\n 'sanitize': ['sanitize', 'satinize'],\n 'sanity': ['sanity', 'satiny'],\n 'sank': ['kans', 'sank'],\n 'sankha': ['kashan', 'sankha'],\n 'sannup': ['pannus', 'sannup', 'unsnap', 'unspan'],\n 'sanpoil': ['sanpoil', 'spaniol'],\n 'sansei': ['anesis', 'anseis', 'sanies', 'sansei', 'sasine'],\n 'sansi': ['sansi', 'sasin'],\n 'sant': ['nast', 'sant', 'stan'],\n 'santa': ['santa', 'satan'],\n 'santal': ['aslant', 'lansat', 'natals', 'santal'],\n 'santali': ['lanista', 'santali'],\n 'santalin': ['annalist', 'santalin'],\n 'santee': ['ensate', 'enseat', 'santee', 'sateen', 'senate'],\n 'santiago': ['agonista', 'santiago'],\n 'santimi': ['animist', 'santimi'],\n 'santir': ['instar', 'santir', 'strain'],\n 'santon': ['santon', 'sonant', 'stanno'],\n 'santorinite': ['reinstation', 'santorinite'],\n 'sap': ['asp', 'sap', 'spa'],\n 'sapan': ['pasan', 'sapan'],\n 'sapek': ['sapek', 'speak'],\n 'saperda': ['aspread', 'saperda'],\n 'saphena': ['aphanes', 'saphena'],\n 'sapid': ['sapid', 'spaid'],\n 'sapient': ['panties', 'sapient', 'spinate'],\n 'sapiential': ['antilipase', 'sapiential'],\n 'sapin': ['pisan', 'sapin', 'spina'],\n 'sapinda': ['anapsid', 'sapinda'],\n 'saple': ['elaps',\n           'lapse',\n           'lepas',\n           'pales',\n           'salep',\n           'saple',\n           'sepal',\n           'slape',\n           'spale',\n           'speal'],\n 'sapling': ['lapsing', 'sapling'],\n 'sapo': ['asop', 'sapo', 'soap'],\n 'sapor': ['psora', 'sapor', 'sarpo'],\n 'saporous': ['asporous', 'saporous'],\n 'sapota': ['sapota', 'taposa'],\n 'sapotilha': ['hapalotis', 'sapotilha'],\n 'sapphire': ['papisher', 'sapphire'],\n 'sapples': ['papless', 'sapples'],\n 'sapremia': ['aspermia', 'sapremia'],\n 'sapremic': ['aspermic', 'sapremic'],\n 'saprine': ['persian', 'prasine', 'saprine'],\n 'saprolite': ['posterial', 'saprolite'],\n 'saprolitic': ['polaristic', 'poristical', 'saprolitic'],\n 'sapropel': ['prolapse', 'sapropel'],\n 'sapropelic': ['periscopal', 'sapropelic'],\n 'saprophagous': ['prasophagous', 'saprophagous'],\n 'sapwort': ['postwar', 'sapwort'],\n 'sar': ['ras', 'sar'],\n 'sara': ['rasa', 'sara'],\n 'saraad': ['saraad', 'sarada'],\n 'sarada': ['saraad', 'sarada'],\n 'saraf': ['safar', 'saraf'],\n 'sarah': ['asarh', 'raash', 'sarah'],\n 'saran': ['ansar', 'saran', 'sarna'],\n 'sarangi': ['giansar', 'sarangi'],\n 'sarcenet': ['reascent', 'sarcenet'],\n 'sarcine': ['arsenic', 'cerasin', 'sarcine'],\n 'sarcitis': ['sarcitis', 'triassic'],\n 'sarcle': ['sarcle', 'scaler', 'sclera'],\n 'sarcoadenoma': ['adenosarcoma', 'sarcoadenoma'],\n 'sarcocarcinoma': ['carcinosarcoma', 'sarcocarcinoma'],\n 'sarcoid': ['sarcoid', 'scaroid'],\n 'sarcoline': ['censorial', 'sarcoline'],\n 'sarcolite': ['alectoris', 'sarcolite', 'sclerotia', 'sectorial'],\n 'sarcoplast': ['postsacral', 'sarcoplast'],\n 'sarcotic': ['acrostic', 'sarcotic', 'socratic'],\n 'sard': ['sadr', 'sard'],\n 'sardian': ['andrias', 'sardian', 'sarinda'],\n 'sardine': ['andries', 'isander', 'sardine'],\n 'sardoin': ['sadiron', 'sardoin'],\n 'sardonic': ['draconis', 'sardonic'],\n 'sare': ['arse', 'rase', 'sare', 'sear', 'sera'],\n 'sargonide': ['grandiose', 'sargonide'],\n 'sari': ['rais', 'sair', 'sari'],\n 'sarif': ['farsi', 'sarif'],\n 'sarigue': ['ergusia', 'gerusia', 'sarigue'],\n 'sarinda': ['andrias', 'sardian', 'sarinda'],\n 'sarip': ['paris', 'parsi', 'sarip'],\n 'sark': ['askr', 'kras', 'sark'],\n 'sarkine': ['kerasin', 'sarkine'],\n 'sarkit': ['rastik', 'sarkit', 'straik'],\n 'sarmatian': ['samaritan', 'sarmatian'],\n 'sarment': ['sarment', 'smarten'],\n 'sarmentous': ['sarmentous', 'tarsonemus'],\n 'sarna': ['ansar', 'saran', 'sarna'],\n 'sarod': ['sarod', 'sorda'],\n 'saron': ['arson', 'saron', 'sonar'],\n 'saronic': ['arsonic', 'saronic'],\n 'sarpo': ['psora', 'sapor', 'sarpo'],\n 'sarra': ['arras', 'sarra'],\n 'sarsenet': ['assenter', 'reassent', 'sarsenet'],\n 'sarsi': ['arsis', 'sarsi'],\n 'sart': ['sart', 'star', 'stra', 'tars', 'tsar'],\n 'sartain': ['artisan', 'astrain', 'sartain', 'tsarina'],\n 'sartish': ['sartish', 'shastri'],\n 'sartor': ['rostra', 'sartor'],\n 'sasan': ['nassa', 'sasan'],\n 'sasin': ['sansi', 'sasin'],\n 'sasine': ['anesis', 'anseis', 'sanies', 'sansei', 'sasine'],\n 'sat': ['ast', 'sat'],\n 'satan': ['santa', 'satan'],\n 'satanical': ['castalian', 'satanical'],\n 'satanism': ['mantissa', 'satanism'],\n 'sate': ['ates', 'east', 'eats', 'sate', 'seat', 'seta'],\n 'sateen': ['ensate', 'enseat', 'santee', 'sateen', 'senate'],\n 'sateless': ['sateless', 'seatless'],\n 'satelles': ['satelles', 'tessella'],\n 'satellite': ['satellite', 'telestial'],\n 'satiable': ['bisaltae', 'satiable'],\n 'satiate': ['isatate', 'satiate', 'taetsia'],\n 'satieno': ['aeonist', 'asiento', 'satieno'],\n 'satient': ['atenist', 'instate', 'satient', 'steatin'],\n 'satin': ['saint', 'satin', 'stain'],\n 'satine': ['satine', 'tisane'],\n 'satined': ['destain', 'instead', 'sainted', 'satined'],\n 'satinette': ['enstatite', 'intestate', 'satinette'],\n 'satinite': ['satinite', 'sittinae'],\n 'satinize': ['sanitize', 'satinize'],\n 'satinlike': ['kleistian', 'saintlike', 'satinlike'],\n 'satiny': ['sanity', 'satiny'],\n 'satire': ['satire', 'striae'],\n 'satirical': ['racialist', 'satirical'],\n 'satirist': ['satirist', 'tarsitis'],\n 'satrae': ['astare', 'satrae'],\n 'satrapic': ['aspartic', 'satrapic'],\n 'satron': ['asnort', 'satron'],\n 'sattle': ['latest', 'sattle', 'taslet'],\n 'sattva': ['sattva', 'tavast'],\n 'saturable': ['balaustre', 'saturable'],\n 'saturation': ['saturation', 'titanosaur'],\n 'saturator': ['saturator', 'tartarous'],\n 'saturn': ['saturn', 'unstar'],\n 'saturnale': ['alaternus', 'saturnale'],\n 'saturnalia': ['australian', 'saturnalia'],\n 'saturnia': ['asturian', 'austrian', 'saturnia'],\n 'saturnine': ['neustrian', 'saturnine', 'sturninae'],\n 'saturnism': ['saturnism', 'surmisant'],\n 'satyr': ['satyr', 'stary', 'stray', 'trasy'],\n 'satyrlike': ['satyrlike', 'streakily'],\n 'sauce': ['cause', 'sauce'],\n 'sauceless': ['causeless', 'sauceless'],\n 'sauceline': ['sauceline', 'seleucian'],\n 'saucer': ['causer', 'saucer'],\n 'sauger': ['sauger', 'usager'],\n 'saugh': ['agush', 'saugh'],\n 'saul': ['saul', 'sula'],\n 'sauld': ['aldus', 'sauld'],\n 'sault': ['latus', 'sault', 'talus'],\n 'saulter': ['arustle', 'estrual', 'saluter', 'saulter'],\n 'saum': ['masu', 'musa', 'saum'],\n 'sauna': ['nasua', 'sauna'],\n 'saur': ['rusa', 'saur', 'sura', 'ursa', 'usar'],\n 'saura': ['arusa', 'saura', 'usara'],\n 'saurian': ['saurian', 'suriana'],\n 'saury': ['saury', 'surya'],\n 'sausage': ['assuage', 'sausage'],\n 'saut': ['saut', 'tasu', 'utas'],\n 'sauve': ['sauve', 'suave'],\n 'save': ['aves', 'save', 'vase'],\n 'savin': ['savin', 'sivan'],\n 'saviour': ['saviour', 'various'],\n 'savor': ['savor', 'sorva'],\n 'savored': ['oversad', 'savored'],\n 'saw': ['saw', 'swa', 'was'],\n 'sawah': ['awash', 'sawah'],\n 'sawali': ['aswail', 'sawali'],\n 'sawback': ['backsaw', 'sawback'],\n 'sawbuck': ['bucksaw', 'sawbuck'],\n 'sawer': ['resaw', 'sawer', 'seraw', 'sware', 'swear', 'warse'],\n 'sawing': ['aswing', 'sawing'],\n 'sawish': ['sawish', 'siwash'],\n 'sawn': ['sawn', 'snaw', 'swan'],\n 'sawt': ['sawt', 'staw', 'swat', 'taws', 'twas', 'wast'],\n 'sawyer': ['sawyer', 'swayer'],\n 'saxe': ['axes', 'saxe', 'seax'],\n 'saxten': ['saxten', 'sextan'],\n 'say': ['say', 'yas'],\n 'sayal': ['asyla', 'salay', 'sayal'],\n 'sayer': ['reasy', 'resay', 'sayer', 'seary'],\n 'sayid': ['daisy', 'sayid'],\n 'scabbler': ['scabbler', 'scrabble'],\n 'scabies': ['abscise', 'scabies'],\n 'scaddle': ['scaddle', 'scalded'],\n 'scaean': ['anaces', 'scaean'],\n 'scala': ['calas', 'casal', 'scala'],\n 'scalar': ['lascar', 'rascal', 'sacral', 'scalar'],\n 'scalded': ['scaddle', 'scalded'],\n 'scale': ['alces', 'casel', 'scale'],\n 'scalena': ['escalan', 'scalena'],\n 'scalene': ['cleanse', 'scalene'],\n 'scaler': ['sarcle', 'scaler', 'sclera'],\n 'scallola': ['callosal', 'scallola'],\n 'scalloper': ['procellas', 'scalloper'],\n 'scaloni': ['nicolas', 'scaloni'],\n 'scalp': ['clasp', 'scalp'],\n 'scalper': ['clasper', 'reclasp', 'scalper'],\n 'scalping': ['clasping', 'scalping'],\n 'scalpture': ['prescutal', 'scalpture'],\n 'scaly': ['aclys', 'scaly'],\n 'scambler': ['scambler', 'scramble'],\n 'scampish': ['scampish', 'scaphism'],\n 'scania': ['ascian', 'sacian', 'scania', 'sicana'],\n 'scant': ['sanct', 'scant'],\n 'scantity': ['sanctity', 'scantity'],\n 'scantle': ['asclent', 'scantle'],\n 'scape': ['capes', 'scape', 'space'],\n 'scapeless': ['scapeless', 'spaceless'],\n 'scapha': ['pascha', 'scapha'],\n 'scaphander': ['handscrape', 'scaphander'],\n 'scaphism': ['scampish', 'scaphism'],\n 'scaphite': ['paschite', 'pastiche', 'pistache', 'scaphite'],\n 'scaphopod': ['podoscaph', 'scaphopod'],\n 'scapoid': ['psoadic', 'scapoid', 'sciapod'],\n 'scapolite': ['alopecist', 'altiscope', 'epicostal', 'scapolite'],\n 'scappler': ['scappler', 'scrapple'],\n 'scapula': ['capsula', 'pascual', 'scapula'],\n 'scapular': ['capsular', 'scapular'],\n 'scapulated': ['capsulated', 'scapulated'],\n 'scapulectomy': ['capsulectomy', 'scapulectomy'],\n 'scarab': ['barsac', 'scarab'],\n 'scarcement': ['marcescent', 'scarcement'],\n 'scare': ['carse', 'caser', 'ceras', 'scare', 'scrae'],\n 'scarification': ['sacrification', 'scarification'],\n 'scarificator': ['sacrificator', 'scarificator'],\n 'scarily': ['scarily', 'scraily'],\n 'scarlet': ['scarlet', 'sclater'],\n 'scarn': ['scarn', 'scran'],\n 'scaroid': ['sarcoid', 'scaroid'],\n 'scarp': ['craps', 'scarp', 'scrap'],\n 'scarping': ['scarping', 'scraping'],\n 'scart': ['scart', 'scrat'],\n 'scarth': ['scarth', 'scrath', 'starch'],\n 'scary': ['ascry', 'scary', 'scray'],\n 'scase': ['casse', 'scase'],\n 'scat': ['acts', 'cast', 'scat'],\n 'scathe': ['chaste', 'sachet', 'scathe', 'scheat'],\n 'scatterer': ['scatterer', 'streetcar'],\n 'scaturient': ['incrustate', 'scaturient', 'scrutinate'],\n 'scaum': ['camus', 'musca', 'scaum', 'sumac'],\n 'scaur': ['cursa', 'scaur'],\n 'scaut': ['scaut', 'scuta'],\n 'scavel': ['calves', 'scavel'],\n 'scawl': ['scawl', 'sclaw'],\n 'sceat': ['caste', 'sceat'],\n 'scene': ['cense', 'scene', 'sence'],\n 'scenery': ['scenery', 'screeny'],\n 'scented': ['descent', 'scented'],\n 'scepter': ['respect', 'scepter', 'specter'],\n 'sceptered': ['sceptered', 'spectered'],\n 'scepterless': ['respectless', 'scepterless'],\n 'sceptral': ['sceptral', 'scraplet', 'spectral'],\n 'sceptry': ['precyst', 'sceptry', 'spectry'],\n 'scerne': ['censer', 'scerne', 'screen', 'secern'],\n 'schalmei': ['camelish', 'schalmei'],\n 'scheat': ['chaste', 'sachet', 'scathe', 'scheat'],\n 'schema': ['sachem', 'schema'],\n 'schematic': ['catechism', 'schematic'],\n 'scheme': ['scheme', 'smeech'],\n 'schemer': ['chermes', 'schemer'],\n 'scho': ['cosh', 'scho'],\n 'scholae': ['oscheal', 'scholae'],\n 'schone': ['cheson', 'chosen', 'schone'],\n 'schooltime': ['chilostome', 'schooltime'],\n 'schout': ['schout', 'scouth'],\n 'schute': ['schute', 'tusche'],\n 'sciaenoid': ['oniscidae', 'oscinidae', 'sciaenoid'],\n 'scian': ['canis', 'scian'],\n 'sciapod': ['psoadic', 'scapoid', 'sciapod'],\n 'sciara': ['carisa', 'sciara'],\n 'sciarid': ['cidaris', 'sciarid'],\n 'sciatic': ['ascitic', 'sciatic'],\n 'sciatical': ['ascitical', 'sciatical'],\n 'scient': ['encist', 'incest', 'insect', 'scient'],\n 'sciential': ['elasticin', 'inelastic', 'sciential'],\n 'scillitan': ['scillitan', 'scintilla'],\n 'scintilla': ['scillitan', 'scintilla'],\n 'scintle': ['lentisc', 'scintle', 'stencil'],\n 'scion': ['oscin', 'scion', 'sonic'],\n 'sciot': ['ostic', 'sciot', 'stoic'],\n 'sciotherical': ['ischiorectal', 'sciotherical'],\n 'scious': ['scious', 'socius'],\n 'scirenga': ['creasing', 'scirenga'],\n 'scirpus': ['prussic', 'scirpus'],\n 'scissortail': ['scissortail', 'solaristics'],\n 'sciurine': ['incisure', 'sciurine'],\n 'sciuroid': ['dioscuri', 'sciuroid'],\n 'sclate': ['castle', 'sclate'],\n 'sclater': ['scarlet', 'sclater'],\n 'sclaw': ['scawl', 'sclaw'],\n 'sclera': ['sarcle', 'scaler', 'sclera'],\n 'sclere': ['sclere', 'screel'],\n 'scleria': ['scleria', 'sercial'],\n 'sclerite': ['sclerite', 'silcrete'],\n 'sclerodermite': ['dermosclerite', 'sclerodermite'],\n 'scleromata': ['clamatores', 'scleromata'],\n 'sclerose': ['coreless', 'sclerose'],\n 'sclerospora': ['prolacrosse', 'sclerospora'],\n 'sclerote': ['corselet', 'sclerote', 'selector'],\n 'sclerotia': ['alectoris', 'sarcolite', 'sclerotia', 'sectorial'],\n 'sclerotial': ['cloisteral', 'sclerotial'],\n 'sclerotinia': ['intersocial', 'orleanistic', 'sclerotinia'],\n 'sclerotium': ['closterium', 'sclerotium'],\n 'sclerotomy': ['mycosterol', 'sclerotomy'],\n 'scoad': ['cados', 'scoad'],\n 'scob': ['bosc', 'scob'],\n 'scobicular': ['scobicular', 'scrobicula'],\n 'scolia': ['colias', 'scolia', 'social'],\n 'scolion': ['scolion', 'solonic'],\n 'scombrine': ['becrimson', 'scombrine'],\n 'scone': ['cones', 'scone'],\n 'scooper': ['coprose', 'scooper'],\n 'scoot': ['coost', 'scoot'],\n 'scopa': ['posca', 'scopa'],\n 'scoparin': ['parsonic', 'scoparin'],\n 'scope': ['copse', 'pecos', 'scope'],\n 'scopidae': ['diascope', 'psocidae', 'scopidae'],\n 'scopine': ['psocine', 'scopine'],\n 'scopiped': ['podiceps', 'scopiped'],\n 'scopoline': ['niloscope', 'scopoline'],\n 'scorbutical': ['scorbutical', 'subcortical'],\n 'scorbutically': ['scorbutically', 'subcortically'],\n 'score': ['corse', 'score'],\n 'scorer': ['scorer', 'sorcer'],\n 'scoriae': ['coraise', 'scoriae'],\n 'scorpidae': ['carpiodes', 'scorpidae'],\n 'scorpiones': ['procession', 'scorpiones'],\n 'scorpionic': ['orniscopic', 'scorpionic'],\n 'scorse': ['cessor', 'crosse', 'scorse'],\n 'scortation': ['cartoonist', 'scortation'],\n 'scot': ['cost', 'scot'],\n 'scotale': ['alecost', 'lactose', 'scotale', 'talcose'],\n 'scote': ['coset', 'estoc', 'scote'],\n 'scoter': ['corset', 'cortes', 'coster', 'escort', 'scoter', 'sector'],\n 'scotia': ['isotac', 'scotia'],\n 'scotism': ['cosmist', 'scotism'],\n 'scotomatic': ['osmotactic', 'scotomatic'],\n 'scotty': ['cytost', 'scotty'],\n 'scoup': ['copus', 'scoup'],\n 'scour': ['cours', 'scour'],\n 'scoured': ['coursed', 'scoured'],\n 'scourer': ['courser', 'scourer'],\n 'scourge': ['scourge', 'scrouge'],\n 'scourger': ['scourger', 'scrouger'],\n 'scouring': ['coursing', 'scouring'],\n 'scouth': ['schout', 'scouth'],\n 'scrabble': ['scabbler', 'scrabble'],\n 'scrabe': ['braces', 'scrabe'],\n 'scrae': ['carse', 'caser', 'ceras', 'scare', 'scrae'],\n 'scraily': ['scarily', 'scraily'],\n 'scramble': ['scambler', 'scramble'],\n 'scran': ['scarn', 'scran'],\n 'scrap': ['craps', 'scarp', 'scrap'],\n 'scrape': ['casper', 'escarp', 'parsec', 'scrape', 'secpar', 'spacer'],\n 'scrapie': ['epacris', 'scrapie', 'serapic'],\n 'scraping': ['scarping', 'scraping'],\n 'scraplet': ['sceptral', 'scraplet', 'spectral'],\n 'scrapple': ['scappler', 'scrapple'],\n 'scrat': ['scart', 'scrat'],\n 'scratcher': ['rescratch', 'scratcher'],\n 'scrath': ['scarth', 'scrath', 'starch'],\n 'scray': ['ascry', 'scary', 'scray'],\n 'screak': ['resack', 'sacker', 'screak'],\n 'screaming': ['germanics', 'screaming'],\n 'screamy': ['armscye', 'screamy'],\n 'scree': ['scree', 'secre'],\n 'screel': ['sclere', 'screel'],\n 'screen': ['censer', 'scerne', 'screen', 'secern'],\n 'screenless': ['censerless', 'screenless'],\n 'screeny': ['scenery', 'screeny'],\n 'screet': ['resect', 'screet', 'secret'],\n 'screwdrive': ['drivescrew', 'screwdrive'],\n 'scrieve': ['cerevis', 'scrieve', 'service'],\n 'scrike': ['scrike', 'sicker'],\n 'scrip': ['crisp', 'scrip'],\n 'scripee': ['precise', 'scripee'],\n 'scripula': ['scripula', 'spicular'],\n 'scrobicula': ['scobicular', 'scrobicula'],\n 'scrota': ['arctos', 'castor', 'costar', 'scrota'],\n 'scrouge': ['scourge', 'scrouge'],\n 'scrouger': ['scourger', 'scrouger'],\n 'scrout': ['scrout', 'scruto'],\n 'scroyle': ['cryosel', 'scroyle'],\n 'scruf': ['scruf', 'scurf'],\n 'scruffle': ['scruffle', 'scuffler'],\n 'scruple': ['scruple', 'sculper'],\n 'scrutate': ['crustate', 'scrutate'],\n 'scrutation': ['crustation', 'scrutation'],\n 'scrutinant': ['incrustant', 'scrutinant'],\n 'scrutinate': ['incrustate', 'scaturient', 'scrutinate'],\n 'scruto': ['scrout', 'scruto'],\n 'scudi': ['scudi', 'sudic'],\n 'scuffler': ['scruffle', 'scuffler'],\n 'sculper': ['scruple', 'sculper'],\n 'sculpin': ['insculp', 'sculpin'],\n 'scup': ['cusp', 'scup'],\n 'scur': ['crus', 'scur'],\n 'scurf': ['scruf', 'scurf'],\n 'scusation': ['cosustain', 'scusation'],\n 'scuta': ['scaut', 'scuta'],\n 'scutal': ['scutal', 'suclat'],\n 'scute': ['cetus', 'scute'],\n 'scutifer': ['fusteric', 'scutifer'],\n 'scutigeral': ['gesticular', 'scutigeral'],\n 'scutula': ['auscult', 'scutula'],\n 'scye': ['scye', 'syce'],\n 'scylliidae': ['salicylide', 'scylliidae'],\n 'scyllium': ['clumsily', 'scyllium'],\n 'scyphi': ['physic', 'scyphi'],\n 'scyphomancy': ['psychomancy', 'scyphomancy'],\n 'scyt': ['cyst', 'scyt'],\n 'scythe': ['chesty', 'scythe'],\n 'scytitis': ['cystitis', 'scytitis'],\n 'se': ['es', 'se'],\n 'sea': ['aes', 'ase', 'sea'],\n 'seadog': ['dosage', 'seadog'],\n 'seagirt': ['seagirt', 'strigae'],\n 'seah': ['seah', 'shea'],\n 'seak': ['sake', 'seak'],\n 'seal': ['elsa', 'sale', 'seal', 'slae'],\n 'sealable': ['leasable', 'sealable'],\n 'sealch': ['cashel', 'laches', 'sealch'],\n 'sealer': ['alerse', 'leaser', 'reales', 'resale', 'reseal', 'sealer'],\n 'sealet': ['ateles', 'saltee', 'sealet', 'stelae', 'teasel'],\n 'sealing': ['leasing', 'sealing'],\n 'sealwort': ['restowal', 'sealwort'],\n 'seam': ['asem', 'mesa', 'same', 'seam'],\n 'seamanite': ['anamesite', 'seamanite'],\n 'seamark': ['kamares', 'seamark'],\n 'seamer': ['reseam', 'seamer'],\n 'seamlet': ['maltese', 'seamlet'],\n 'seamlike': ['mesalike', 'seamlike'],\n 'seamrend': ['redesman', 'seamrend'],\n 'seamster': ['masseter', 'seamster'],\n 'seamus': ['assume', 'seamus'],\n 'sean': ['anes', 'sane', 'sean'],\n 'seance': ['encase', 'seance', 'seneca'],\n 'seaplane': ['seaplane', 'spelaean'],\n 'seaport': ['esparto', 'petrosa', 'seaport'],\n 'sear': ['arse', 'rase', 'sare', 'sear', 'sera'],\n 'searce': ['cesare', 'crease', 'recase', 'searce'],\n 'searcer': ['creaser', 'searcer'],\n 'search': ['arches', 'chaser', 'eschar', 'recash', 'search'],\n 'searcher': ['rechaser', 'research', 'searcher'],\n 'searchment': ['manchester', 'searchment'],\n 'searcloth': ['clathrose', 'searcloth'],\n 'seared': ['erased', 'reseda', 'seared'],\n 'searer': ['eraser', 'searer'],\n 'searing': ['searing', 'seringa'],\n 'seary': ['reasy', 'resay', 'sayer', 'seary'],\n 'seaside': ['disease', 'seaside'],\n 'seat': ['ates', 'east', 'eats', 'sate', 'seat', 'seta'],\n 'seated': ['seated', 'sedate'],\n 'seater': ['asteer',\n            'easter',\n            'eastre',\n            'reseat',\n            'saeter',\n            'seater',\n            'staree',\n            'teaser',\n            'teresa'],\n 'seating': ['easting',\n             'gainset',\n             'genista',\n             'ingesta',\n             'seating',\n             'signate',\n             'teasing'],\n 'seatless': ['sateless', 'seatless'],\n 'seatrain': ['artesian', 'asterina', 'asternia', 'erastian', 'seatrain'],\n 'seatron': ['noreast', 'rosetan', 'seatron', 'senator', 'treason'],\n 'seave': ['eaves', 'evase', 'seave'],\n 'seax': ['axes', 'saxe', 'seax'],\n 'seba': ['base', 'besa', 'sabe', 'seba'],\n 'sebastian': ['bassanite', 'sebastian'],\n 'sebilla': ['sabelli', 'sebilla'],\n 'sebum': ['embus', 'sebum'],\n 'secalin': ['celsian', 'escalin', 'sanicle', 'secalin'],\n 'secaline': ['salience', 'secaline'],\n 'secant': ['ascent', 'secant', 'stance'],\n 'secern': ['censer', 'scerne', 'screen', 'secern'],\n 'secernent': ['secernent', 'sentencer'],\n 'secondar': ['endosarc', 'secondar'],\n 'secos': ['cosse', 'secos'],\n 'secpar': ['casper', 'escarp', 'parsec', 'scrape', 'secpar', 'spacer'],\n 'secre': ['scree', 'secre'],\n 'secret': ['resect', 'screet', 'secret'],\n 'secretarian': ['ascertainer', 'reascertain', 'secretarian'],\n 'secretion': ['resection', 'secretion'],\n 'secretional': ['resectional', 'secretional'],\n 'sect': ['cest', 'sect'],\n 'sectarian': ['ascertain', 'cartesian', 'cartisane', 'sectarian'],\n 'sectarianism': ['cartesianism', 'sectarianism'],\n 'section': ['contise', 'noetics', 'section'],\n 'sectism': ['sectism', 'smectis'],\n 'sector': ['corset', 'cortes', 'coster', 'escort', 'scoter', 'sector'],\n 'sectorial': ['alectoris', 'sarcolite', 'sclerotia', 'sectorial'],\n 'sectroid': ['decorist', 'sectroid'],\n 'securable': ['rescuable', 'securable'],\n 'securance': ['recusance', 'securance'],\n 'secure': ['cereus', 'ceruse', 'recuse', 'rescue', 'secure'],\n 'securer': ['recurse', 'rescuer', 'securer'],\n 'sedan': ['sedan', 'snead'],\n 'sedanier': ['arsedine', 'arsenide', 'sedanier', 'siderean'],\n 'sedat': ['sedat', 'stade', 'stead'],\n 'sedate': ['seated', 'sedate'],\n 'sedation': ['astonied', 'sedation'],\n 'sederunt': ['sederunt', 'underset', 'undesert', 'unrested'],\n 'sedile': ['diesel', 'sedile', 'seidel'],\n 'sedimetric': ['sedimetric', 'semidirect'],\n 'sedimetrical': ['decimestrial', 'sedimetrical'],\n 'sedition': ['desition', 'sedition'],\n 'sedulity': ['dysluite', 'sedulity'],\n 'sedum': ['mused', 'sedum'],\n 'seedbird': ['birdseed', 'seedbird'],\n 'seeded': ['deseed', 'seeded'],\n 'seeder': ['reseed', 'seeder'],\n 'seedlip': ['pelides', 'seedlip'],\n 'seeing': ['seeing', 'signee'],\n 'seek': ['kees', 'seek', 'skee'],\n 'seeker': ['reseek', 'seeker'],\n 'seel': ['else', 'lees', 'seel', 'sele', 'slee'],\n 'seem': ['mese', 'seem', 'seme', 'smee'],\n 'seemer': ['emerse', 'seemer'],\n 'seen': ['ense', 'esne', 'nese', 'seen', 'snee'],\n 'seenu': ['ensue', 'seenu', 'unsee'],\n 'seer': ['erse', 'rees', 'seer', 'sere'],\n 'seerband': ['seerband', 'serabend'],\n 'seerhand': ['denshare', 'seerhand'],\n 'seerhood': ['rhodeose', 'seerhood'],\n 'seership': ['hesperis', 'seership'],\n 'seething': ['seething', 'sheeting'],\n 'seg': ['ges', 'seg'],\n 'seggar': ['sagger', 'seggar'],\n 'seggard': ['daggers', 'seggard'],\n 'sego': ['goes', 'sego'],\n 'segolate': ['gelatose', 'segolate'],\n 'segreant': ['estrange', 'segreant', 'sergeant', 'sternage'],\n 'seid': ['desi', 'ides', 'seid', 'side'],\n 'seidel': ['diesel', 'sedile', 'seidel'],\n 'seignioral': ['seignioral', 'seignorial'],\n 'seignoral': ['gasoliner', 'seignoral'],\n 'seignorial': ['seignioral', 'seignorial'],\n 'seine': ['insee', 'seine'],\n 'seiner': ['inseer', 'nereis', 'seiner', 'serine', 'sirene'],\n 'seise': ['essie', 'seise'],\n 'seism': ['seism', 'semis'],\n 'seismal': ['aimless', 'melissa', 'seismal'],\n 'seismotic': ['seismotic', 'societism'],\n 'seit': ['seit', 'site'],\n 'seizable': ['seizable', 'sizeable'],\n 'seizer': ['resize', 'seizer'],\n 'sekane': ['sakeen', 'sekane'],\n 'sekani': ['kinase', 'sekani'],\n 'sekar': ['asker', 'reask', 'saker', 'sekar'],\n 'seker': ['esker', 'keres', 'reesk', 'seker', 'skeer', 'skere'],\n 'selagite': ['elegiast', 'selagite'],\n 'selah': ['halse', 'leash', 'selah', 'shale', 'sheal', 'shela'],\n 'selamin': ['malines', 'salmine', 'selamin', 'seminal'],\n 'selbergite': ['gilbertese', 'selbergite'],\n 'seldor': ['dorsel', 'seldor', 'solder'],\n 'seldseen': ['needless', 'seldseen'],\n 'sele': ['else', 'lees', 'seel', 'sele', 'slee'],\n 'selector': ['corselet', 'sclerote', 'selector'],\n 'selenic': ['license', 'selenic', 'silence'],\n 'selenion': ['leonines', 'selenion'],\n 'selenitic': ['insectile', 'selenitic'],\n 'selenium': ['selenium', 'semilune', 'seminule'],\n 'selenosis': ['noiseless', 'selenosis'],\n 'seleucian': ['sauceline', 'seleucian'],\n 'self': ['fels', 'self'],\n 'selfsame': ['fameless', 'selfsame'],\n 'selfsameness': ['famelessness', 'selfsameness'],\n 'selictar': ['altrices', 'selictar'],\n 'selina': ['alsine', 'neslia', 'saline', 'selina', 'silane'],\n 'selion': ['insole', 'leonis', 'lesion', 'selion'],\n 'seljukian': ['januslike', 'seljukian'],\n 'sella': ['salle', 'sella'],\n 'sellably': ['sellably', 'syllable'],\n 'sellate': ['estella', 'sellate'],\n 'seller': ['resell', 'seller'],\n 'selli': ['lisle', 'selli'],\n 'sellie': ['leslie', 'sellie'],\n 'sellout': ['outsell', 'sellout'],\n 'selt': ['lest', 'selt'],\n 'selter': ['lester', 'selter', 'streel'],\n 'selung': ['gunsel', 'selung', 'slunge'],\n 'selva': ['salve', 'selva', 'slave', 'valse'],\n 'semang': ['magnes', 'semang'],\n 'semantic': ['amnestic', 'semantic'],\n 'semaphore': ['mesohepar', 'semaphore'],\n 'sematic': ['cameist', 'etacism', 'sematic'],\n 'sematrope': ['perosmate', 'sematrope'],\n 'seme': ['mese', 'seem', 'seme', 'smee'],\n 'semen': ['mense', 'mesne', 'semen'],\n 'semeostoma': ['semeostoma', 'semostomae'],\n 'semi': ['mise', 'semi', 'sime'],\n 'semiarch': ['semiarch', 'smachrie'],\n 'semibald': ['bedismal', 'semibald'],\n 'semiball': ['mislabel', 'semiball'],\n 'semic': ['mesic', 'semic'],\n 'semicircle': ['semicircle', 'semicleric'],\n 'semicleric': ['semicircle', 'semicleric'],\n 'semicone': ['nicesome', 'semicone'],\n 'semicoronet': ['oncosimeter', 'semicoronet'],\n 'semicrome': ['mesomeric', 'microseme', 'semicrome'],\n 'semidirect': ['sedimetric', 'semidirect'],\n 'semidormant': ['memorandist', 'moderantism', 'semidormant'],\n 'semihard': ['dreamish', 'semihard'],\n 'semihiant': ['histamine', 'semihiant'],\n 'semilimber': ['immersible', 'semilimber'],\n 'semilunar': ['semilunar', 'unrealism'],\n 'semilune': ['selenium', 'semilune', 'seminule'],\n 'semiminor': ['immersion', 'semiminor'],\n 'semimoron': ['monroeism', 'semimoron'],\n 'seminal': ['malines', 'salmine', 'selamin', 'seminal'],\n 'seminar': ['remains', 'seminar'],\n 'seminasal': ['messalian', 'seminasal'],\n 'seminomadic': ['demoniacism', 'seminomadic'],\n 'seminomata': ['mastomenia', 'seminomata'],\n 'seminule': ['selenium', 'semilune', 'seminule'],\n 'semiopal': ['malpoise', 'semiopal'],\n 'semiorb': ['boreism', 'semiorb'],\n 'semiovaloid': ['semiovaloid', 'semiovoidal'],\n 'semiovoidal': ['semiovaloid', 'semiovoidal'],\n 'semipolar': ['perisomal', 'semipolar'],\n 'semipro': ['imposer', 'promise', 'semipro'],\n 'semipronation': ['impersonation', 'prosemination', 'semipronation'],\n 'semiquote': ['quietsome', 'semiquote'],\n 'semirotund': ['semirotund', 'unmortised'],\n 'semis': ['seism', 'semis'],\n 'semispan': ['menaspis', 'semispan'],\n 'semisteel': ['messelite', 'semisteel', 'teleseism'],\n 'semistill': ['limitless', 'semistill'],\n 'semistriated': ['disastimeter', 'semistriated'],\n 'semita': ['samite', 'semita', 'tamise', 'teaism'],\n 'semitae': ['amesite', 'mesitae', 'semitae'],\n 'semitour': ['moisture', 'semitour'],\n 'semiurban': ['semiurban', 'submarine'],\n 'semiurn': ['neurism', 'semiurn'],\n 'semivector': ['semivector', 'viscometer'],\n 'semnae': ['enseam', 'semnae'],\n 'semola': ['melosa', 'salome', 'semola'],\n 'semolella': ['lamellose', 'semolella'],\n 'semolina': ['laminose', 'lemonias', 'semolina'],\n 'semological': ['mesological', 'semological'],\n 'semology': ['mesology', 'semology'],\n 'semostomae': ['semeostoma', 'semostomae'],\n 'sempiternous': ['sempiternous', 'supermoisten'],\n 'semuncia': ['muscinae', 'semuncia'],\n 'semuncial': ['masculine', 'semuncial', 'simulance'],\n 'sen': ['ens', 'sen'],\n 'senaite': ['etesian', 'senaite'],\n 'senam': ['manes', 'manse', 'mensa', 'samen', 'senam'],\n 'senarius': ['anuresis', 'senarius'],\n 'senate': ['ensate', 'enseat', 'santee', 'sateen', 'senate'],\n 'senator': ['noreast', 'rosetan', 'seatron', 'senator', 'treason'],\n 'senatorian': ['arsenation', 'senatorian', 'sonneratia'],\n 'senatrices': ['resistance', 'senatrices'],\n 'sence': ['cense', 'scene', 'sence'],\n 'senci': ['senci', 'since'],\n 'send': ['send', 'sned'],\n 'sender': ['resend', 'sender'],\n 'seneca': ['encase', 'seance', 'seneca'],\n 'senega': ['sagene', 'senega'],\n 'senesce': ['essence', 'senesce'],\n 'senile': ['enisle', 'ensile', 'senile', 'silene'],\n 'senilism': ['liminess', 'senilism'],\n 'senior': ['rosine', 'senior', 'soneri'],\n 'senlac': ['lances', 'senlac'],\n 'senna': ['nanes', 'senna'],\n 'sennit': ['innest', 'sennit', 'sinnet', 'tennis'],\n 'sennite': ['intense', 'sennite'],\n 'senocular': ['larcenous', 'senocular'],\n 'senones': ['oneness', 'senones'],\n 'sensable': ['ableness', 'blaeness', 'sensable'],\n 'sensatorial': ['assertional', 'sensatorial'],\n 'sensical': ['laciness', 'sensical'],\n 'sensilia': ['sensilia', 'silesian'],\n 'sensilla': ['nailless', 'sensilla'],\n 'sension': ['neossin', 'sension'],\n 'sensuism': ['sensuism', 'senusism'],\n 'sent': ['nest', 'sent', 'sten'],\n 'sentencer': ['secernent', 'sentencer'],\n 'sentition': ['sentition', 'tenonitis'],\n 'senusism': ['sensuism', 'senusism'],\n 'sepad': ['depas', 'sepad', 'spade'],\n 'sepal': ['elaps',\n           'lapse',\n           'lepas',\n           'pales',\n           'salep',\n           'saple',\n           'sepal',\n           'slape',\n           'spale',\n           'speal'],\n 'sepaled': ['delapse', 'sepaled'],\n 'sepaloid': ['episodal', 'lapidose', 'sepaloid'],\n 'separable': ['separable', 'spareable'],\n 'separate': ['asperate', 'separate'],\n 'separation': ['anisoptera', 'asperation', 'separation'],\n 'sephardi': ['diphaser', 'parished', 'raphides', 'sephardi'],\n 'sephen': ['sephen', 'sphene'],\n 'sepian': ['sepian', 'spinae'],\n 'sepic': ['sepic', 'spice'],\n 'sepion': ['espino', 'sepion'],\n 'sepoy': ['poesy', 'posey', 'sepoy'],\n 'seps': ['pess', 'seps'],\n 'sepsis': ['sepsis', 'speiss'],\n 'sept': ['pest', 'sept', 'spet', 'step'],\n 'septa': ['paste', 'septa', 'spate'],\n 'septal': ['pastel', 'septal', 'staple'],\n 'septane': ['penates', 'septane'],\n 'septarium': ['impasture', 'septarium'],\n 'septenar': ['entrepas', 'septenar'],\n 'septennium': ['pennisetum', 'septennium'],\n 'septentrio': ['septentrio', 'tripestone'],\n 'septerium': ['misrepute', 'septerium'],\n 'septi': ['septi', 'spite', 'stipe'],\n 'septicemia': ['episematic', 'septicemia'],\n 'septicidal': ['pesticidal', 'septicidal'],\n 'septicopyemia': ['pyosepticemia', 'septicopyemia'],\n 'septicopyemic': ['pyosepticemic', 'septicopyemic'],\n 'septier': ['respite', 'septier'],\n 'septiferous': ['pestiferous', 'septiferous'],\n 'septile': ['epistle', 'septile'],\n 'septimal': ['petalism', 'septimal'],\n 'septocosta': ['septocosta', 'statoscope'],\n 'septoic': ['poetics', 'septoic'],\n 'septonasal': ['nasoseptal', 'septonasal'],\n 'septoria': ['isoptera', 'septoria'],\n 'septum': ['septum', 'upstem'],\n 'septuor': ['petrous', 'posture', 'proetus', 'proteus', 'septuor', 'spouter'],\n 'sequential': ['latinesque', 'sequential'],\n 'sequin': ['quinse', 'sequin'],\n 'ser': ['ers', 'ser'],\n 'sera': ['arse', 'rase', 'sare', 'sear', 'sera'],\n 'serab': ['barse', 'besra', 'saber', 'serab'],\n 'serabend': ['seerband', 'serabend'],\n 'seraglio': ['girasole', 'seraglio'],\n 'serai': ['aries', 'arise', 'raise', 'serai'],\n 'serail': ['israel', 'relais', 'resail', 'sailer', 'serail', 'serial'],\n 'seral': ['arles', 'arsle', 'laser', 'seral', 'slare'],\n 'serang': ['angers', 'sanger', 'serang'],\n 'serape': ['parsee', 'persae', 'persea', 'serape'],\n 'seraph': ['phrase', 'seraph', 'shaper', 'sherpa'],\n 'seraphic': ['parchesi', 'seraphic'],\n 'seraphim': ['samphire', 'seraphim'],\n 'seraphina': ['pharisean', 'seraphina'],\n 'seraphine': ['hesperian', 'phrenesia', 'seraphine'],\n 'seraphism': ['misphrase', 'seraphism'],\n 'serapic': ['epacris', 'scrapie', 'serapic'],\n 'serapis': ['paresis', 'serapis'],\n 'serapist': ['piratess', 'serapist', 'tarsipes'],\n 'serau': ['serau', 'urase'],\n 'seraw': ['resaw', 'sawer', 'seraw', 'sware', 'swear', 'warse'],\n 'sercial': ['scleria', 'sercial'],\n 'sere': ['erse', 'rees', 'seer', 'sere'],\n 'serean': ['serean', 'serena'],\n 'sereh': ['herse', 'sereh', 'sheer', 'shree'],\n 'serena': ['serean', 'serena'],\n 'serenata': ['arsenate', 'serenata'],\n 'serene': ['resene', 'serene'],\n 'serenoa': ['arenose', 'serenoa'],\n 'serge': ['reges', 'serge'],\n 'sergeant': ['estrange', 'segreant', 'sergeant', 'sternage'],\n 'sergei': ['sergei', 'sieger'],\n 'serger': ['gerres', 'serger'],\n 'serging': ['serging', 'snigger'],\n 'sergiu': ['guiser', 'sergiu'],\n 'seri': ['reis', 'rise', 'seri', 'sier', 'sire'],\n 'serial': ['israel', 'relais', 'resail', 'sailer', 'serail', 'serial'],\n 'serialist': ['eristalis', 'serialist'],\n 'serian': ['arisen', 'arsine', 'resina', 'serian'],\n 'sericate': ['ecrasite', 'sericate'],\n 'sericated': ['discreate', 'sericated'],\n 'sericin': ['irenics', 'resinic', 'sericin', 'sirenic'],\n 'serific': ['friesic', 'serific'],\n 'serin': ['reins', 'resin', 'rinse', 'risen', 'serin', 'siren'],\n 'serine': ['inseer', 'nereis', 'seiner', 'serine', 'sirene'],\n 'serinette': ['retistene', 'serinette'],\n 'seringa': ['searing', 'seringa'],\n 'seringal': ['resignal', 'seringal', 'signaler'],\n 'serinus': ['russine', 'serinus', 'sunrise'],\n 'serio': ['osier', 'serio'],\n 'seriola': ['rosalie', 'seriola'],\n 'serioludicrous': ['ludicroserious', 'serioludicrous'],\n 'sermo': ['meros', 'mores', 'morse', 'sermo', 'smore'],\n 'sermonist': ['monitress', 'sermonist'],\n 'sero': ['eros', 'rose', 'sero', 'sore'],\n 'serofibrous': ['fibroserous', 'serofibrous'],\n 'serolin': ['resinol', 'serolin'],\n 'seromucous': ['mucoserous', 'seromucous'],\n 'seron': ['norse', 'noser', 'seron', 'snore'],\n 'seroon': ['nooser', 'seroon', 'sooner'],\n 'seroot': ['seroot', 'sooter', 'torose'],\n 'serotina': ['arsonite', 'asterion', 'oestrian', 'rosinate', 'serotina'],\n 'serotinal': ['lairstone', 'orleanist', 'serotinal'],\n 'serotine': ['serotine', 'torinese'],\n 'serous': ['serous', 'souser'],\n 'serow': ['owser', 'resow', 'serow', 'sower', 'swore', 'worse'],\n 'serpari': ['aspirer', 'praiser', 'serpari'],\n 'serpent': ['penster', 'present', 'serpent', 'strepen'],\n 'serpentian': ['serpentian', 'serpentina'],\n 'serpentid': ['president', 'serpentid'],\n 'serpentina': ['serpentian', 'serpentina'],\n 'serpentinous': ['serpentinous', 'supertension'],\n 'serpently': ['presently', 'serpently'],\n 'serpiginous': ['serpiginous', 'spinigerous'],\n 'serpolet': ['proteles', 'serpolet'],\n 'serpula': ['perusal', 'serpula'],\n 'serpulae': ['pleasure', 'serpulae'],\n 'serpulan': ['purslane', 'serpulan', 'supernal'],\n 'serpulidae': ['serpulidae', 'superideal'],\n 'serpuline': ['serpuline', 'superline'],\n 'serra': ['ersar', 'raser', 'serra'],\n 'serrage': ['argeers', 'greaser', 'serrage'],\n 'serran': ['serran', 'snarer'],\n 'serrano': ['serrano', 'sornare'],\n 'serratic': ['crateris', 'serratic'],\n 'serratodentate': ['dentatoserrate', 'serratodentate'],\n 'serrature': ['serrature', 'treasurer'],\n 'serried': ['derries', 'desirer', 'resider', 'serried'],\n 'serriped': ['presider', 'serriped'],\n 'sert': ['rest', 'sert', 'stre'],\n 'serta': ['aster', 'serta', 'stare', 'strae', 'tarse', 'teras'],\n 'sertum': ['muster', 'sertum', 'stumer'],\n 'serum': ['muser', 'remus', 'serum'],\n 'serut': ['serut', 'strue', 'turse', 'uster'],\n 'servable': ['beslaver', 'servable', 'versable'],\n 'servage': ['gervase', 'greaves', 'servage'],\n 'serval': ['salver', 'serval', 'slaver', 'versal'],\n 'servant': ['servant', 'versant'],\n 'servation': ['overstain', 'servation', 'versation'],\n 'serve': ['serve', 'sever', 'verse'],\n 'server': ['revers', 'server', 'verser'],\n 'servet': ['revest', 'servet', 'sterve', 'verset', 'vester'],\n 'servetian': ['invertase', 'servetian'],\n 'servian': ['servian', 'vansire'],\n 'service': ['cerevis', 'scrieve', 'service'],\n 'serviceable': ['receivables', 'serviceable'],\n 'servient': ['reinvest', 'servient'],\n 'serviential': ['inversatile', 'serviential'],\n 'servilize': ['servilize', 'silverize'],\n 'servite': ['restive', 'servite'],\n 'servitor': ['overstir', 'servitor'],\n 'servitude': ['detrusive', 'divesture', 'servitude'],\n 'servo': ['servo', 'verso'],\n 'sesma': ['masse', 'sesma'],\n 'sestertium': ['sestertium', 'trusteeism'],\n 'sestet': ['sestet', 'testes', 'tsetse'],\n 'sestiad': ['disseat', 'sestiad'],\n 'sestian': ['entasis', 'sestian', 'sestina'],\n 'sestina': ['entasis', 'sestian', 'sestina'],\n 'sestole': ['osselet', 'sestole', 'toeless'],\n 'sestuor': ['estrous', 'oestrus', 'sestuor', 'tussore'],\n 'sesuto': ['sesuto', 'setous'],\n 'seta': ['ates', 'east', 'eats', 'sate', 'seat', 'seta'],\n 'setae': ['setae', 'tease'],\n 'setal': ['least', 'setal', 'slate', 'stale', 'steal', 'stela', 'tales'],\n 'setaria': ['asarite', 'asteria', 'atresia', 'setaria'],\n 'setback': ['backset', 'setback'],\n 'setdown': ['downset', 'setdown'],\n 'seth': ['esth', 'hest', 'seth'],\n 'sethead': ['headset', 'sethead'],\n 'sethian': ['sethian', 'sthenia'],\n 'sethic': ['ethics', 'sethic'],\n 'setibo': ['setibo', 'sobeit'],\n 'setirostral': ['latirostres', 'setirostral'],\n 'setline': ['leisten', 'setline', 'tensile'],\n 'setoff': ['offset', 'setoff'],\n 'seton': ['onset', 'seton', 'steno', 'stone'],\n 'setous': ['sesuto', 'setous'],\n 'setout': ['outset', 'setout'],\n 'setover': ['overset', 'setover'],\n 'sett': ['sett', 'stet', 'test'],\n 'settable': ['settable', 'testable'],\n 'settaine': ['anisette', 'atestine', 'settaine'],\n 'settee': ['settee', 'testee'],\n 'setter': ['retest', 'setter', 'street', 'tester'],\n 'setting': ['setting', 'testing'],\n 'settler': ['settler', 'sterlet', 'trestle'],\n 'settlor': ['settlor', 'slotter'],\n 'setula': ['salute', 'setula'],\n 'setup': ['setup', 'stupe', 'upset'],\n 'setwall': ['setwall', 'swallet'],\n 'seven': ['evens', 'seven'],\n 'sevener': ['sevener', 'veneres'],\n 'sever': ['serve', 'sever', 'verse'],\n 'severer': ['reserve', 'resever', 'reverse', 'severer'],\n 'sew': ['sew', 'wes'],\n 'sewed': ['sewed', 'swede'],\n 'sewer': ['resew', 'sewer', 'sweer'],\n 'sewered': ['sewered', 'sweered'],\n 'sewing': ['sewing', 'swinge'],\n 'sewn': ['news', 'sewn', 'snew'],\n 'sewround': ['sewround', 'undersow'],\n 'sexed': ['desex', 'sexed'],\n 'sextan': ['saxten', 'sextan'],\n 'sextipartition': ['extirpationist', 'sextipartition'],\n 'sextodecimo': ['decimosexto', 'sextodecimo'],\n 'sextry': ['sextry', 'xyster'],\n 'sexuale': ['esexual', 'sexuale'],\n 'sey': ['sey', 'sye', 'yes'],\n 'seymour': ['mousery', 'seymour'],\n 'sfoot': ['foots', 'sfoot', 'stoof'],\n 'sgad': ['dags', 'sgad'],\n 'sha': ['ash', 'sah', 'sha'],\n 'shab': ['bash', 'shab'],\n 'shabbily': ['babishly', 'shabbily'],\n 'shabbiness': ['babishness', 'shabbiness'],\n 'shabunder': ['husbander', 'shabunder'],\n 'shad': ['dash', 'sadh', 'shad'],\n 'shade': ['deash', 'hades', 'sadhe', 'shade'],\n 'shaded': ['dashed', 'shaded'],\n 'shader': ['dasher', 'shader', 'sheard'],\n 'shadily': ['ladyish', 'shadily'],\n 'shading': ['dashing', 'shading'],\n 'shadkan': ['dashnak', 'shadkan'],\n 'shady': ['dashy', 'shady'],\n 'shafting': ['shafting', 'tangfish'],\n 'shag': ['gash', 'shag'],\n 'shagrag': ['ragshag', 'shagrag'],\n 'shah': ['hash', 'sahh', 'shah'],\n 'shahi': ['shahi', 'shiah'],\n 'shaitan': ['ashanti', 'sanhita', 'shaitan', 'thasian'],\n 'shaivism': ['shaivism', 'shivaism'],\n 'shaka': ['kasha', 'khasa', 'sakha', 'shaka'],\n 'shakeout': ['outshake', 'shakeout'],\n 'shaker': ['kasher', 'shaker'],\n 'shakil': ['lakish', 'shakil'],\n 'shaku': ['kusha', 'shaku', 'ushak'],\n 'shaky': ['hasky', 'shaky'],\n 'shale': ['halse', 'leash', 'selah', 'shale', 'sheal', 'shela'],\n 'shalt': ['shalt', 'slath'],\n 'sham': ['mash', 'samh', 'sham'],\n 'shama': ['hamsa', 'masha', 'shama'],\n 'shamable': ['baalshem', 'shamable'],\n 'shamal': ['mashal', 'shamal'],\n 'shaman': ['ashman', 'shaman'],\n 'shamba': ['ambash', 'shamba'],\n 'shambrier': ['herbarism', 'shambrier'],\n 'shambu': ['ambush', 'shambu'],\n 'shame': ['sahme', 'shame'],\n 'shamer': ['masher', 'ramesh', 'shamer'],\n 'shamir': ['marish', 'shamir'],\n 'shammish': ['mishmash', 'shammish'],\n 'shan': ['hans', 'nash', 'shan'],\n 'shane': ['ashen', 'hanse', 'shane', 'shean'],\n 'shang': ['gnash', 'shang'],\n 'shant': ['shant', 'snath'],\n 'shap': ['hasp', 'pash', 'psha', 'shap'],\n 'shape': ['heaps', 'pesah', 'phase', 'shape'],\n 'shapeless': ['phaseless', 'shapeless'],\n 'shaper': ['phrase', 'seraph', 'shaper', 'sherpa'],\n 'shapometer': ['atmosphere', 'shapometer'],\n 'shapy': ['physa', 'shapy'],\n 'shardana': ['darshana', 'shardana'],\n 'share': ['asher', 'share', 'shear'],\n 'shareman': ['shareman', 'shearman'],\n 'sharer': ['rasher', 'sharer'],\n 'sharesman': ['sharesman', 'shearsman'],\n 'shargar': ['shargar', 'sharrag'],\n 'shari': ['ashir', 'shari'],\n 'sharon': ['rhason', 'sharon', 'shoran'],\n 'sharp': ['sharp', 'shrap'],\n 'sharpener': ['resharpen', 'sharpener'],\n 'sharper': ['phraser', 'sharper'],\n 'sharpy': ['phrasy', 'sharpy'],\n 'sharrag': ['shargar', 'sharrag'],\n 'shasta': ['shasta', 'tassah'],\n 'shaster': ['hatress', 'shaster'],\n 'shastraik': ['katharsis', 'shastraik'],\n 'shastri': ['sartish', 'shastri'],\n 'shat': ['shat', 'tash'],\n 'shatter': ['rathest', 'shatter'],\n 'shatterer': ['ratherest', 'shatterer'],\n 'shattering': ['shattering', 'straighten'],\n 'shauri': ['shauri', 'surahi'],\n 'shave': ['shave', 'sheva'],\n 'shavee': ['shavee', 'sheave'],\n 'shaver': ['havers', 'shaver', 'shrave'],\n 'shavery': ['shavery', 'shravey'],\n 'shaw': ['shaw', 'wash'],\n 'shawano': ['shawano', 'washoan'],\n 'shawl': ['shawl', 'walsh'],\n 'shawy': ['shawy', 'washy'],\n 'shay': ['ashy', 'shay'],\n 'shea': ['seah', 'shea'],\n 'sheal': ['halse', 'leash', 'selah', 'shale', 'sheal', 'shela'],\n 'shean': ['ashen', 'hanse', 'shane', 'shean'],\n 'shear': ['asher', 'share', 'shear'],\n 'shearbill': ['shearbill', 'shillaber'],\n 'sheard': ['dasher', 'shader', 'sheard'],\n 'shearer': ['reshare', 'reshear', 'shearer'],\n 'shearman': ['shareman', 'shearman'],\n 'shearsman': ['sharesman', 'shearsman'],\n 'sheat': ['ashet', 'haste', 'sheat'],\n 'sheave': ['shavee', 'sheave'],\n 'shebeen': ['benshee', 'shebeen'],\n 'shechem': ['meshech', 'shechem'],\n 'sheder': ['hersed', 'sheder'],\n 'sheely': ['sheely', 'sheyle'],\n 'sheer': ['herse', 'sereh', 'sheer', 'shree'],\n 'sheering': ['greenish', 'sheering'],\n 'sheet': ['sheet', 'these'],\n 'sheeter': ['sheeter', 'therese'],\n 'sheeting': ['seething', 'sheeting'],\n 'sheila': ['elisha', 'hailse', 'sheila'],\n 'shela': ['halse', 'leash', 'selah', 'shale', 'sheal', 'shela'],\n 'shelf': ['flesh', 'shelf'],\n 'shelfful': ['fleshful', 'shelfful'],\n 'shelflist': ['filthless', 'shelflist'],\n 'shelfy': ['fleshy', 'shelfy'],\n 'shelta': ['haslet', 'lesath', 'shelta'],\n 'shelty': ['shelty', 'thysel'],\n 'shelve': ['shelve', 'shevel'],\n 'shemitic': ['ethicism', 'shemitic'],\n 'shen': ['nesh', 'shen'],\n 'sheol': ['hosel', 'sheol', 'shole'],\n 'sher': ['hers', 'resh', 'sher'],\n 'sherani': ['arshine', 'nearish', 'rhesian', 'sherani'],\n 'sheratan': ['hanaster', 'sheratan'],\n 'sheriat': ['atheris', 'sheriat'],\n 'sherif': ['fisher', 'sherif'],\n 'sherifate': ['fisheater', 'sherifate'],\n 'sherify': ['fishery', 'sherify'],\n 'sheriyat': ['hysteria', 'sheriyat'],\n 'sherpa': ['phrase', 'seraph', 'shaper', 'sherpa'],\n 'sherri': ['hersir', 'sherri'],\n 'sheugh': ['hughes', 'sheugh'],\n 'sheva': ['shave', 'sheva'],\n 'shevel': ['shelve', 'shevel'],\n 'shevri': ['shevri', 'shiver', 'shrive'],\n 'shewa': ['hawse', 'shewa', 'whase'],\n 'sheyle': ['sheely', 'sheyle'],\n 'shi': ['his', 'hsi', 'shi'],\n 'shiah': ['shahi', 'shiah'],\n 'shibar': ['barish', 'shibar'],\n 'shice': ['echis', 'shice'],\n 'shicer': ['riches', 'shicer'],\n 'shide': ['shide', 'shied', 'sidhe'],\n 'shied': ['shide', 'shied', 'sidhe'],\n 'shiel': ['liesh', 'shiel'],\n 'shieldable': ['deshabille', 'shieldable'],\n 'shier': ['hirse', 'shier', 'shire'],\n 'shiest': ['shiest', 'thesis'],\n 'shifter': ['reshift', 'shifter'],\n 'shih': ['hish', 'shih'],\n 'shiite': ['histie', 'shiite'],\n 'shik': ['kish', 'shik', 'sikh'],\n 'shikar': ['rakish', 'riksha', 'shikar', 'shikra', 'sikhra'],\n 'shikara': ['shikara', 'sikhara'],\n 'shikari': ['rikisha', 'shikari'],\n 'shikra': ['rakish', 'riksha', 'shikar', 'shikra', 'sikhra'],\n 'shillaber': ['shearbill', 'shillaber'],\n 'shimal': ['lamish', 'shimal'],\n 'shimmery': ['misrhyme', 'shimmery'],\n 'shin': ['hisn', 'shin', 'sinh'],\n 'shina': ['naish', 'shina'],\n 'shine': ['eshin', 'shine'],\n 'shiner': ['renish', 'shiner', 'shrine'],\n 'shingle': ['english', 'shingle'],\n 'shinto': ['histon', 'shinto', 'tonish'],\n 'shinty': ['shinty', 'snithy'],\n 'ship': ['pish', 'ship'],\n 'shipboy': ['boyship', 'shipboy'],\n 'shipkeeper': ['keepership', 'shipkeeper'],\n 'shiplap': ['lappish', 'shiplap'],\n 'shipman': ['manship', 'shipman'],\n 'shipmaster': ['mastership', 'shipmaster'],\n 'shipmate': ['aphetism', 'mateship', 'shipmate', 'spithame'],\n 'shipowner': ['ownership', 'shipowner'],\n 'shippage': ['pageship', 'shippage'],\n 'shipper': ['preship', 'shipper'],\n 'shippo': ['popish', 'shippo'],\n 'shipward': ['shipward', 'wardship'],\n 'shipwork': ['shipwork', 'workship'],\n 'shipworm': ['shipworm', 'wormship'],\n 'shire': ['hirse', 'shier', 'shire'],\n 'shirker': ['shirker', 'skirreh'],\n 'shirley': ['relishy', 'shirley'],\n 'shirty': ['shirty', 'thyris'],\n 'shirvan': ['shirvan', 'varnish'],\n 'shita': ['shita', 'thais'],\n 'shivaism': ['shaivism', 'shivaism'],\n 'shive': ['hives', 'shive'],\n 'shiver': ['shevri', 'shiver', 'shrive'],\n 'shlu': ['lush', 'shlu', 'shul'],\n 'sho': ['sho', 'soh'],\n 'shoa': ['saho', 'shoa'],\n 'shoal': ['shoal', 'shola'],\n 'shoat': ['hoast', 'hosta', 'shoat'],\n 'shockable': ['shockable', 'shoeblack'],\n 'shode': ['hosed', 'shode'],\n 'shoder': ['dehors', 'rhodes', 'shoder', 'shored'],\n 'shoe': ['hose', 'shoe'],\n 'shoeblack': ['shockable', 'shoeblack'],\n 'shoebrush': ['shoebrush', 'shorebush'],\n 'shoeless': ['hoseless', 'shoeless'],\n 'shoeman': ['hoseman', 'shoeman'],\n 'shoer': ['horse', 'shoer', 'shore'],\n 'shog': ['gosh', 'shog'],\n 'shoji': ['joshi', 'shoji'],\n 'shola': ['shoal', 'shola'],\n 'shole': ['hosel', 'sheol', 'shole'],\n 'shoo': ['shoo', 'soho'],\n 'shoot': ['shoot', 'sooth', 'sotho', 'toosh'],\n 'shooter': ['orthose', 'reshoot', 'shooter', 'soother'],\n 'shooting': ['shooting', 'soothing'],\n 'shop': ['phos', 'posh', 'shop', 'soph'],\n 'shopbook': ['bookshop', 'shopbook'],\n 'shopmaid': ['phasmoid', 'shopmaid'],\n 'shopper': ['hoppers', 'shopper'],\n 'shopwork': ['shopwork', 'workshop'],\n 'shoran': ['rhason', 'sharon', 'shoran'],\n 'shore': ['horse', 'shoer', 'shore'],\n 'shorea': ['ahorse', 'ashore', 'hoarse', 'shorea'],\n 'shorebush': ['shoebrush', 'shorebush'],\n 'shored': ['dehors', 'rhodes', 'shoder', 'shored'],\n 'shoreless': ['horseless', 'shoreless'],\n 'shoreman': ['horseman', 'rhamnose', 'shoreman'],\n 'shorer': ['horser', 'shorer'],\n 'shoreward': ['drawhorse', 'shoreward'],\n 'shoreweed': ['horseweed', 'shoreweed'],\n 'shoring': ['horsing', 'shoring'],\n 'short': ['horst', 'short'],\n 'shortage': ['hostager', 'shortage'],\n 'shorten': ['shorten', 'threnos'],\n 'shot': ['host', 'shot', 'thos', 'tosh'],\n 'shote': ['ethos', 'shote', 'those'],\n 'shotgun': ['gunshot', 'shotgun', 'uhtsong'],\n 'shotless': ['hostless', 'shotless'],\n 'shotstar': ['shotstar', 'starshot'],\n 'shou': ['huso', 'shou'],\n 'shoulderer': ['reshoulder', 'shoulderer'],\n 'shout': ['shout', 'south'],\n 'shouter': ['shouter', 'souther'],\n 'shouting': ['shouting', 'southing'],\n 'shover': ['shover', 'shrove'],\n 'showerer': ['reshower', 'showerer'],\n 'shrab': ['brash', 'shrab'],\n 'shram': ['marsh', 'shram'],\n 'shrap': ['sharp', 'shrap'],\n 'shrave': ['havers', 'shaver', 'shrave'],\n 'shravey': ['shavery', 'shravey'],\n 'shree': ['herse', 'sereh', 'sheer', 'shree'],\n 'shrewly': ['shrewly', 'welshry'],\n 'shriek': ['shriek', 'shrike'],\n 'shrieval': ['lavisher', 'shrieval'],\n 'shrike': ['shriek', 'shrike'],\n 'shrine': ['renish', 'shiner', 'shrine'],\n 'shrite': ['shrite', 'theirs'],\n 'shrive': ['shevri', 'shiver', 'shrive'],\n 'shriven': ['nervish', 'shriven'],\n 'shroudy': ['hydrous', 'shroudy'],\n 'shrove': ['shover', 'shrove'],\n 'shrub': ['brush', 'shrub'],\n 'shrubbery': ['berrybush', 'shrubbery'],\n 'shrubland': ['brushland', 'shrubland'],\n 'shrubless': ['brushless', 'shrubless'],\n 'shrublet': ['brushlet', 'shrublet'],\n 'shrublike': ['brushlike', 'shrublike'],\n 'shrubwood': ['brushwood', 'shrubwood'],\n 'shrug': ['grush', 'shrug'],\n 'shu': ['shu', 'ush'],\n 'shuba': ['shuba', 'subah'],\n 'shug': ['gush', 'shug', 'sugh'],\n 'shul': ['lush', 'shlu', 'shul'],\n 'shulamite': ['hamulites', 'shulamite'],\n 'shuler': ['lusher', 'shuler'],\n 'shunless': ['lushness', 'shunless'],\n 'shunter': ['reshunt', 'shunter'],\n 'shure': ['shure', 'usher'],\n 'shurf': ['frush', 'shurf'],\n 'shut': ['shut', 'thus', 'tush'],\n 'shutness': ['shutness', 'thusness'],\n 'shutout': ['outshut', 'shutout'],\n 'shuttering': ['hurtingest', 'shuttering'],\n 'shyam': ['mashy', 'shyam'],\n 'si': ['is', 'si'],\n 'sia': ['sai', 'sia'],\n 'siak': ['saki', 'siak', 'sika'],\n 'sial': ['lasi', 'lias', 'lisa', 'sail', 'sial'],\n 'sialagogic': ['isagogical', 'sialagogic'],\n 'sialic': ['sialic', 'silica'],\n 'sialid': ['asilid', 'sialid'],\n 'sialidae': ['asilidae', 'sialidae'],\n 'siam': ['mias', 'saim', 'siam', 'sima'],\n 'siamese': ['misease', 'siamese'],\n 'sib': ['bis', 'sib'],\n 'sibyl': ['sibyl', 'sybil'],\n 'sibylla': ['sibylla', 'syllabi'],\n 'sicana': ['ascian', 'sacian', 'scania', 'sicana'],\n 'sicani': ['anisic', 'sicani', 'sinaic'],\n 'sicarius': ['acrisius', 'sicarius'],\n 'siccate': ['ascetic', 'castice', 'siccate'],\n 'siccation': ['cocainist', 'siccation'],\n 'sice': ['cise', 'sice'],\n 'sicel': ['sicel', 'slice'],\n 'sicilian': ['anisilic', 'sicilian'],\n 'sickbed': ['bedsick', 'sickbed'],\n 'sicker': ['scrike', 'sicker'],\n 'sickerly': ['sickerly', 'slickery'],\n 'sickle': ['sickle', 'skelic'],\n 'sickler': ['sickler', 'slicker'],\n 'sicklied': ['disclike', 'sicklied'],\n 'sickling': ['sickling', 'slicking'],\n 'sicula': ['caulis', 'clusia', 'sicula'],\n 'siculian': ['luscinia', 'siculian'],\n 'sid': ['dis', 'sid'],\n 'sida': ['dais', 'dasi', 'disa', 'said', 'sida'],\n 'sidalcea': ['diaclase', 'sidalcea'],\n 'side': ['desi', 'ides', 'seid', 'side'],\n 'sidearm': ['misread', 'sidearm'],\n 'sideboard': ['broadside', 'sideboard'],\n 'sideburns': ['burnsides', 'sideburns'],\n 'sidecar': ['diceras', 'radices', 'sidecar'],\n 'sidehill': ['hillside', 'sidehill'],\n 'siderean': ['arsedine', 'arsenide', 'sedanier', 'siderean'],\n 'siderin': ['insider', 'siderin'],\n 'sideronatrite': ['endoarteritis', 'sideronatrite'],\n 'siderous': ['desirous', 'siderous'],\n 'sidership': ['sidership', 'spiderish'],\n 'sidesway': ['sidesway', 'sideways'],\n 'sidetrack': ['sidetrack', 'trackside'],\n 'sidewalk': ['sidewalk', 'walkside'],\n 'sideway': ['sideway', 'wayside'],\n 'sideways': ['sidesway', 'sideways'],\n 'sidhe': ['shide', 'shied', 'sidhe'],\n 'sidle': ['sidle', 'slide'],\n 'sidler': ['sidler', 'slider'],\n 'sidling': ['sidling', 'sliding'],\n 'sidlingly': ['sidlingly', 'slidingly'],\n 'sieger': ['sergei', 'sieger'],\n 'siena': ['anise', 'insea', 'siena', 'sinae'],\n 'sienna': ['insane', 'sienna'],\n 'sier': ['reis', 'rise', 'seri', 'sier', 'sire'],\n 'sierra': ['raiser', 'sierra'],\n 'siesta': ['siesta', 'tassie'],\n 'siever': ['revise', 'siever'],\n 'sife': ['feis', 'fise', 'sife'],\n 'sift': ['fist', 'sift'],\n 'sifted': ['fisted', 'sifted'],\n 'sifter': ['fister', 'resift', 'sifter', 'strife'],\n 'sifting': ['fisting', 'sifting'],\n 'sigh': ['gish', 'sigh'],\n 'sigher': ['resigh', 'sigher'],\n 'sighted': ['desight', 'sighted'],\n 'sightlily': ['sightlily', 'slightily'],\n 'sightliness': ['sightliness', 'slightiness'],\n 'sightly': ['sightly', 'slighty'],\n 'sigillated': ['distillage', 'sigillated'],\n 'sigla': ['gisla', 'ligas', 'sigla'],\n 'sigmatism': ['astigmism', 'sigmatism'],\n 'sigmoidal': ['dialogism', 'sigmoidal'],\n 'sign': ['sign', 'sing', 'snig'],\n 'signable': ['signable', 'singable'],\n 'signalee': ['ensilage', 'genesial', 'signalee'],\n 'signaler': ['resignal', 'seringal', 'signaler'],\n 'signalese': ['agileness', 'signalese'],\n 'signally': ['signally', 'singally', 'slangily'],\n 'signary': ['signary', 'syringa'],\n 'signate': ['easting',\n             'gainset',\n             'genista',\n             'ingesta',\n             'seating',\n             'signate',\n             'teasing'],\n 'signator': ['orangist', 'organist', 'roasting', 'signator'],\n 'signee': ['seeing', 'signee'],\n 'signer': ['resign', 'resing', 'signer', 'singer'],\n 'signet': ['ingest', 'signet', 'stinge'],\n 'signorial': ['sailoring', 'signorial'],\n 'signpost': ['postsign', 'signpost'],\n 'signum': ['musing', 'signum'],\n 'sika': ['saki', 'siak', 'sika'],\n 'sikar': ['kisra', 'sikar', 'skair'],\n 'siket': ['siket', 'skite'],\n 'sikh': ['kish', 'shik', 'sikh'],\n 'sikhara': ['shikara', 'sikhara'],\n 'sikhra': ['rakish', 'riksha', 'shikar', 'shikra', 'sikhra'],\n 'sil': ['lis', 'sil'],\n 'silane': ['alsine', 'neslia', 'saline', 'selina', 'silane'],\n 'silas': ['silas', 'sisal'],\n 'silcrete': ['sclerite', 'silcrete'],\n 'sile': ['isle', 'lise', 'sile'],\n 'silen': ['elsin', 'lenis', 'niels', 'silen', 'sline'],\n 'silence': ['license', 'selenic', 'silence'],\n 'silenced': ['licensed', 'silenced'],\n 'silencer': ['licenser', 'silencer'],\n 'silene': ['enisle', 'ensile', 'senile', 'silene'],\n 'silent': ['enlist', 'listen', 'silent', 'tinsel'],\n 'silently': ['silently', 'tinselly'],\n 'silenus': ['insulse', 'silenus'],\n 'silesian': ['sensilia', 'silesian'],\n 'silica': ['sialic', 'silica'],\n 'silicam': ['islamic', 'laicism', 'silicam'],\n 'silicane': ['silicane', 'silicean'],\n 'silicean': ['silicane', 'silicean'],\n 'siliceocalcareous': ['calcareosiliceous', 'siliceocalcareous'],\n 'silicoaluminate': ['aluminosilicate', 'silicoaluminate'],\n 'silicone': ['isocline', 'silicone'],\n 'silicotitanate': ['silicotitanate', 'titanosilicate'],\n 'silicotungstate': ['silicotungstate', 'tungstosilicate'],\n 'silicotungstic': ['silicotungstic', 'tungstosilicic'],\n 'silk': ['lisk', 'silk', 'skil'],\n 'silkaline': ['silkaline', 'snaillike'],\n 'silkman': ['klanism', 'silkman'],\n 'silkness': ['silkness', 'sinkless', 'skinless'],\n 'silly': ['silly', 'silyl'],\n 'sillyhow': ['lowishly', 'owlishly', 'sillyhow'],\n 'silo': ['lois', 'silo', 'siol', 'soil', 'soli'],\n 'silpha': ['palish', 'silpha'],\n 'silt': ['list', 'silt', 'slit'],\n 'silting': ['listing', 'silting'],\n 'siltlike': ['siltlike', 'slitlike'],\n 'silva': ['silva', 'slavi'],\n 'silver': ['silver', 'sliver'],\n 'silvered': ['desilver', 'silvered'],\n 'silverer': ['resilver', 'silverer', 'sliverer'],\n 'silverize': ['servilize', 'silverize'],\n 'silverlike': ['silverlike', 'sliverlike'],\n 'silverwood': ['silverwood', 'woodsilver'],\n 'silvery': ['silvery', 'slivery'],\n 'silvester': ['rivetless', 'silvester'],\n 'silyl': ['silly', 'silyl'],\n 'sim': ['ism', 'sim'],\n 'sima': ['mias', 'saim', 'siam', 'sima'],\n 'simal': ['islam', 'ismal', 'simal'],\n 'simar': ['maris', 'marsi', 'samir', 'simar'],\n 'sime': ['mise', 'semi', 'sime'],\n 'simeon': ['eonism', 'mesion', 'oneism', 'simeon'],\n 'simeonism': ['misoneism', 'simeonism'],\n 'simiad': ['idiasm', 'simiad'],\n 'simile': ['milsie', 'simile'],\n 'simity': ['myitis', 'simity'],\n 'simling': ['simling', 'smiling'],\n 'simmer': ['merism', 'mermis', 'simmer'],\n 'simmon': ['monism', 'nomism', 'simmon'],\n 'simon': ['minos', 'osmin', 'simon'],\n 'simonian': ['insomnia', 'simonian'],\n 'simonist': ['simonist', 'sintoism'],\n 'simony': ['isonym', 'myosin', 'simony'],\n 'simple': ['mespil', 'simple'],\n 'simpleton': ['simpleton', 'spoilment'],\n 'simplicist': ['simplicist', 'simplistic'],\n 'simplistic': ['simplicist', 'simplistic'],\n 'simply': ['limpsy', 'simply'],\n 'simson': ['nosism', 'simson'],\n 'simulance': ['masculine', 'semuncial', 'simulance'],\n 'simulcast': ['masculist', 'simulcast'],\n 'simuler': ['misrule', 'simuler'],\n 'sina': ['anis', 'nais', 'nasi', 'nias', 'sain', 'sina'],\n 'sinae': ['anise', 'insea', 'siena', 'sinae'],\n 'sinaean': ['nisaean', 'sinaean'],\n 'sinaic': ['anisic', 'sicani', 'sinaic'],\n 'sinaitic': ['isatinic', 'sinaitic'],\n 'sinal': ['sinal', 'slain', 'snail'],\n 'sinapic': ['panisic', 'piscian', 'piscina', 'sinapic'],\n 'since': ['senci', 'since'],\n 'sincere': ['ceresin', 'sincere'],\n 'sinecure': ['insecure', 'sinecure'],\n 'sinew': ['sinew', 'swine', 'wisen'],\n 'sinewed': ['endwise', 'sinewed'],\n 'sinewy': ['sinewy', 'swiney'],\n 'sinfonia': ['sainfoin', 'sinfonia'],\n 'sinfonietta': ['festination', 'infestation', 'sinfonietta'],\n 'sing': ['sign', 'sing', 'snig'],\n 'singable': ['signable', 'singable'],\n 'singally': ['signally', 'singally', 'slangily'],\n 'singarip': ['aspiring', 'praising', 'singarip'],\n 'singed': ['design', 'singed'],\n 'singer': ['resign', 'resing', 'signer', 'singer'],\n 'single': ['single', 'slinge'],\n 'singler': ['singler', 'slinger'],\n 'singles': ['essling', 'singles'],\n 'singlet': ['glisten', 'singlet'],\n 'sinh': ['hisn', 'shin', 'sinh'],\n 'sinico': ['inosic', 'sinico'],\n 'sinister': ['insister', 'reinsist', 'sinister', 'sisterin'],\n 'sinistrodextral': ['dextrosinistral', 'sinistrodextral'],\n 'sink': ['inks', 'sink', 'skin'],\n 'sinker': ['resink', 'reskin', 'sinker'],\n 'sinkhead': ['headskin', 'nakedish', 'sinkhead'],\n 'sinkless': ['silkness', 'sinkless', 'skinless'],\n 'sinklike': ['sinklike', 'skinlike'],\n 'sinnet': ['innest', 'sennit', 'sinnet', 'tennis'],\n 'sinoatrial': ['sinoatrial', 'solitarian'],\n 'sinogram': ['orangism', 'organism', 'sinogram'],\n 'sinolog': ['loosing', 'sinolog'],\n 'sinopia': ['pisonia', 'sinopia'],\n 'sinople': ['epsilon', 'sinople'],\n 'sinter': ['estrin', 'insert', 'sinter', 'sterin', 'triens'],\n 'sinto': ['sinto', 'stion'],\n 'sintoc': ['nostic', 'sintoc', 'tocsin'],\n 'sintoism': ['simonist', 'sintoism'],\n 'sintu': ['sintu', 'suint'],\n 'sinuatodentate': ['dentatosinuate', 'sinuatodentate'],\n 'sinuose': ['sinuose', 'suiones'],\n 'sinus': ['nisus', 'sinus'],\n 'sinward': ['inwards', 'sinward'],\n 'siol': ['lois', 'silo', 'siol', 'soil', 'soli'],\n 'sionite': ['inosite', 'sionite'],\n 'sip': ['psi', 'sip'],\n 'sipe': ['pise', 'sipe'],\n 'siper': ['siper', 'spier', 'spire'],\n 'siphonal': ['nailshop', 'siphonal'],\n 'siphuncle': ['siphuncle', 'uncleship'],\n 'sipling': ['sipling', 'spiling'],\n 'sipylite': ['pyelitis', 'sipylite'],\n 'sir': ['sir', 'sri'],\n 'sire': ['reis', 'rise', 'seri', 'sier', 'sire'],\n 'siredon': ['indorse', 'ordines', 'siredon', 'sordine'],\n 'siren': ['reins', 'resin', 'rinse', 'risen', 'serin', 'siren'],\n 'sirene': ['inseer', 'nereis', 'seiner', 'serine', 'sirene'],\n 'sirenic': ['irenics', 'resinic', 'sericin', 'sirenic'],\n 'sirenize': ['resinize', 'sirenize'],\n 'sirenlike': ['resinlike', 'sirenlike'],\n 'sirenoid': ['derision', 'ironside', 'resinoid', 'sirenoid'],\n 'sireny': ['resiny', 'sireny'],\n 'sirian': ['raisin', 'sirian'],\n 'sirih': ['irish', 'rishi', 'sirih'],\n 'sirky': ['risky', 'sirky'],\n 'sirmian': ['iranism', 'sirmian'],\n 'sirpea': ['aspire', 'paries', 'praise', 'sirpea', 'spirea'],\n 'sirple': ['lisper', 'pliers', 'sirple', 'spiler'],\n 'sirrah': ['arrish', 'harris', 'rarish', 'sirrah'],\n 'sirree': ['rerise', 'sirree'],\n 'siruelas': ['russelia', 'siruelas'],\n 'sirup': ['prius', 'sirup'],\n 'siruper': ['siruper', 'upriser'],\n 'siryan': ['siryan', 'syrian'],\n 'sis': ['sis', 'ssi'],\n 'sisal': ['silas', 'sisal'],\n 'sish': ['hiss', 'sish'],\n 'sisham': ['samish', 'sisham'],\n 'sisi': ['isis', 'sisi'],\n 'sisseton': ['sisseton', 'stenosis'],\n 'sistani': ['nasitis', 'sistani'],\n 'sister': ['resist', 'restis', 'sister'],\n 'sisterin': ['insister', 'reinsist', 'sinister', 'sisterin'],\n 'sistering': ['resisting', 'sistering'],\n 'sisterless': ['resistless', 'sisterless'],\n 'sistrum': ['sistrum', 'trismus'],\n 'sit': ['ist', 'its', 'sit'],\n 'sita': ['atis', 'sita', 'tsia'],\n 'sitao': ['sitao', 'staio'],\n 'sitar': ['arist',\n           'astir',\n           'sitar',\n           'stair',\n           'stria',\n           'tarsi',\n           'tisar',\n           'trias'],\n 'sitch': ['sitch', 'stchi', 'stich'],\n 'site': ['seit', 'site'],\n 'sith': ['hist', 'sith', 'this', 'tshi'],\n 'sithens': ['sithens', 'thissen'],\n 'sitient': ['sitient', 'sittine'],\n 'sitology': ['sitology', 'tsiology'],\n 'sittinae': ['satinite', 'sittinae'],\n 'sittine': ['sitient', 'sittine'],\n 'situal': ['situal', 'situla', 'tulasi'],\n 'situate': ['situate', 'usitate'],\n 'situla': ['situal', 'situla', 'tulasi'],\n 'situs': ['situs', 'suist'],\n 'siva': ['avis', 'siva', 'visa'],\n 'sivaism': ['saivism', 'sivaism'],\n 'sivan': ['savin', 'sivan'],\n 'siwan': ['siwan', 'swain'],\n 'siwash': ['sawish', 'siwash'],\n 'sixte': ['exist', 'sixte'],\n 'sixty': ['sixty', 'xysti'],\n 'sizeable': ['seizable', 'sizeable'],\n 'sizeman': ['sizeman', 'zamenis'],\n 'skair': ['kisra', 'sikar', 'skair'],\n 'skal': ['lask', 'skal'],\n 'skance': ['sacken', 'skance'],\n 'skanda': ['sandak', 'skanda'],\n 'skart': ['karst', 'skart', 'stark'],\n 'skat': ['skat', 'task'],\n 'skate': ['skate', 'stake', 'steak'],\n 'skater': ['skater', 'staker', 'strake', 'streak', 'tasker'],\n 'skating': ['gitksan', 'skating', 'takings'],\n 'skean': ['skean', 'snake', 'sneak'],\n 'skee': ['kees', 'seek', 'skee'],\n 'skeel': ['skeel', 'sleek'],\n 'skeeling': ['skeeling', 'sleeking'],\n 'skeely': ['skeely', 'sleeky'],\n 'skeen': ['skeen', 'skene'],\n 'skeer': ['esker', 'keres', 'reesk', 'seker', 'skeer', 'skere'],\n 'skeery': ['kersey', 'skeery'],\n 'skeet': ['keest', 'skeet', 'skete', 'steek'],\n 'skeeter': ['skeeter', 'teskere'],\n 'skeletin': ['nestlike', 'skeletin'],\n 'skelic': ['sickle', 'skelic'],\n 'skelp': ['skelp', 'spelk'],\n 'skelter': ['kestrel', 'skelter'],\n 'skene': ['skeen', 'skene'],\n 'skeo': ['skeo', 'soke'],\n 'skeptic': ['skeptic', 'spicket'],\n 'skere': ['esker', 'keres', 'reesk', 'seker', 'skeer', 'skere'],\n 'sketcher': ['resketch', 'sketcher'],\n 'skete': ['keest', 'skeet', 'skete', 'steek'],\n 'skey': ['skey', 'skye'],\n 'skid': ['disk', 'kids', 'skid'],\n 'skier': ['kreis', 'skier'],\n 'skil': ['lisk', 'silk', 'skil'],\n 'skin': ['inks', 'sink', 'skin'],\n 'skinch': ['chinks', 'skinch'],\n 'skinless': ['silkness', 'sinkless', 'skinless'],\n 'skinlike': ['sinklike', 'skinlike'],\n 'skip': ['pisk', 'skip'],\n 'skippel': ['skippel', 'skipple'],\n 'skipple': ['skippel', 'skipple'],\n 'skirmish': ['skirmish', 'smirkish'],\n 'skirreh': ['shirker', 'skirreh'],\n 'skirret': ['skirret', 'skirter', 'striker'],\n 'skirt': ['skirt', 'stirk'],\n 'skirter': ['skirret', 'skirter', 'striker'],\n 'skirting': ['skirting', 'striking'],\n 'skirtingly': ['skirtingly', 'strikingly'],\n 'skirty': ['kirsty', 'skirty'],\n 'skit': ['kist', 'skit'],\n 'skite': ['siket', 'skite'],\n 'skiter': ['skiter', 'strike'],\n 'skittle': ['kittles', 'skittle'],\n 'sklate': ['lasket', 'sklate'],\n 'sklater': ['sklater', 'stalker'],\n 'sklinter': ['sklinter', 'strinkle'],\n 'skoal': ['skoal', 'sloka'],\n 'skoo': ['koso', 'skoo', 'sook'],\n 'skua': ['kusa', 'skua'],\n 'skun': ['skun', 'sunk'],\n 'skye': ['skey', 'skye'],\n 'sla': ['las', 'sal', 'sla'],\n 'slab': ['blas', 'slab'],\n 'slacken': ['slacken', 'snackle'],\n 'slade': ['leads', 'slade'],\n 'slae': ['elsa', 'sale', 'seal', 'slae'],\n 'slain': ['sinal', 'slain', 'snail'],\n 'slainte': ['elastin', 'salient', 'saltine', 'slainte'],\n 'slait': ['alist', 'litas', 'slait', 'talis'],\n 'slake': ['alkes', 'sakel', 'slake'],\n 'slam': ['alms', 'salm', 'slam'],\n 'slamp': ['plasm', 'psalm', 'slamp'],\n 'slandering': ['sanderling', 'slandering'],\n 'slane': ['ansel', 'slane'],\n 'slang': ['glans', 'slang'],\n 'slangily': ['signally', 'singally', 'slangily'],\n 'slangish': ['slangish', 'slashing'],\n 'slangishly': ['slangishly', 'slashingly'],\n 'slangster': ['slangster', 'strangles'],\n 'slap': ['salp', 'slap'],\n 'slape': ['elaps',\n           'lapse',\n           'lepas',\n           'pales',\n           'salep',\n           'saple',\n           'sepal',\n           'slape',\n           'spale',\n           'speal'],\n 'slare': ['arles', 'arsle', 'laser', 'seral', 'slare'],\n 'slasher': ['reslash', 'slasher'],\n 'slashing': ['slangish', 'slashing'],\n 'slashingly': ['slangishly', 'slashingly'],\n 'slat': ['last', 'salt', 'slat'],\n 'slate': ['least', 'setal', 'slate', 'stale', 'steal', 'stela', 'tales'],\n 'slater': ['laster',\n            'lastre',\n            'rastle',\n            'relast',\n            'resalt',\n            'salter',\n            'slater',\n            'stelar'],\n 'slath': ['shalt', 'slath'],\n 'slather': ['hastler', 'slather'],\n 'slatiness': ['saintless', 'saltiness', 'slatiness', 'stainless'],\n 'slating': ['anglist', 'lasting', 'salting', 'slating', 'staling'],\n 'slatish': ['saltish', 'slatish'],\n 'slatter': ['rattles', 'slatter', 'starlet', 'startle'],\n 'slaty': ['lasty', 'salty', 'slaty'],\n 'slaughter': ['lethargus', 'slaughter'],\n 'slaughterman': ['manslaughter', 'slaughterman'],\n 'slaum': ['lamus', 'malus', 'musal', 'slaum'],\n 'slave': ['salve', 'selva', 'slave', 'valse'],\n 'slaver': ['salver', 'serval', 'slaver', 'versal'],\n 'slaverer': ['reserval', 'reversal', 'slaverer'],\n 'slavey': ['slavey', 'sylvae'],\n 'slavi': ['silva', 'slavi'],\n 'slavian': ['salivan', 'slavian'],\n 'slavic': ['clavis', 'slavic'],\n 'slavonic': ['slavonic', 'volscian'],\n 'slay': ['lyas', 'slay'],\n 'slayer': ['reslay', 'slayer'],\n 'sleave': ['leaves', 'sleave'],\n 'sledger': ['redlegs', 'sledger'],\n 'slee': ['else', 'lees', 'seel', 'sele', 'slee'],\n 'sleech': ['lesche', 'sleech'],\n 'sleek': ['skeel', 'sleek'],\n 'sleeking': ['skeeling', 'sleeking'],\n 'sleeky': ['skeely', 'sleeky'],\n 'sleep': ['sleep', 'speel'],\n 'sleepless': ['sleepless', 'speelless'],\n 'sleepry': ['presley', 'sleepry'],\n 'sleet': ['sleet', 'slete', 'steel', 'stele'],\n 'sleetiness': ['sleetiness', 'steeliness'],\n 'sleeting': ['sleeting', 'steeling'],\n 'sleetproof': ['sleetproof', 'steelproof'],\n 'sleety': ['sleety', 'steely'],\n 'slept': ['slept', 'spelt', 'splet'],\n 'slete': ['sleet', 'slete', 'steel', 'stele'],\n 'sleuth': ['hustle', 'sleuth'],\n 'slew': ['slew', 'wels'],\n 'slewing': ['slewing', 'swingle'],\n 'sley': ['lyse', 'sley'],\n 'slice': ['sicel', 'slice'],\n 'slicht': ['slicht', 'slitch'],\n 'slicken': ['slicken', 'snickle'],\n 'slicker': ['sickler', 'slicker'],\n 'slickery': ['sickerly', 'slickery'],\n 'slicking': ['sickling', 'slicking'],\n 'slidable': ['sabellid', 'slidable'],\n 'slidden': ['slidden', 'sniddle'],\n 'slide': ['sidle', 'slide'],\n 'slider': ['sidler', 'slider'],\n 'sliding': ['sidling', 'sliding'],\n 'slidingly': ['sidlingly', 'slidingly'],\n 'slifter': ['slifter', 'stifler'],\n 'slightily': ['sightlily', 'slightily'],\n 'slightiness': ['sightliness', 'slightiness'],\n 'slighty': ['sightly', 'slighty'],\n 'slime': ['limes', 'miles', 'slime', 'smile'],\n 'slimeman': ['melanism', 'slimeman'],\n 'slimer': ['slimer', 'smiler'],\n 'slimy': ['limsy', 'slimy', 'smily'],\n 'sline': ['elsin', 'lenis', 'niels', 'silen', 'sline'],\n 'slinge': ['single', 'slinge'],\n 'slinger': ['singler', 'slinger'],\n 'slink': ['links', 'slink'],\n 'slip': ['lisp', 'slip'],\n 'slipcoat': ['postical', 'slipcoat'],\n 'slipe': ['piles', 'plies', 'slipe', 'spiel', 'spile'],\n 'slipover': ['overslip', 'slipover'],\n 'slipway': ['slipway', 'waspily'],\n 'slit': ['list', 'silt', 'slit'],\n 'slitch': ['slicht', 'slitch'],\n 'slite': ['islet', 'istle', 'slite', 'stile'],\n 'slithy': ['hylist', 'slithy'],\n 'slitless': ['listless', 'slitless'],\n 'slitlike': ['siltlike', 'slitlike'],\n 'slitted': ['slitted', 'stilted'],\n 'slitter': ['litster', 'slitter', 'stilter', 'testril'],\n 'slitty': ['slitty', 'stilty'],\n 'slive': ['elvis', 'levis', 'slive'],\n 'sliver': ['silver', 'sliver'],\n 'sliverer': ['resilver', 'silverer', 'sliverer'],\n 'sliverlike': ['silverlike', 'sliverlike'],\n 'slivery': ['silvery', 'slivery'],\n 'sloan': ['salon', 'sloan', 'solan'],\n 'slod': ['slod', 'sold'],\n 'sloe': ['lose', 'sloe', 'sole'],\n 'sloka': ['skoal', 'sloka'],\n 'slone': ['slone', 'solen'],\n 'sloo': ['sloo', 'solo', 'sool'],\n 'sloom': ['mools', 'sloom'],\n 'sloop': ['polos', 'sloop', 'spool'],\n 'slope': ['elops', 'slope', 'spole'],\n 'sloper': ['sloper', 'splore'],\n 'slot': ['lost', 'lots', 'slot'],\n 'slote': ['slote', 'stole'],\n 'sloted': ['sloted', 'stoled'],\n 'slotter': ['settlor', 'slotter'],\n 'slouch': ['holcus', 'lochus', 'slouch'],\n 'slouchiness': ['cushionless', 'slouchiness'],\n 'slouchy': ['chylous', 'slouchy'],\n 'slovenian': ['slovenian', 'venosinal'],\n 'slow': ['slow', 'sowl'],\n 'slud': ['slud', 'suld'],\n 'slue': ['lues', 'slue'],\n 'sluit': ['litus', 'sluit', 'tulsi'],\n 'slunge': ['gunsel', 'selung', 'slunge'],\n 'slurp': ['slurp', 'spurl'],\n 'slut': ['lust', 'slut'],\n 'sluther': ['hulster', 'hustler', 'sluther'],\n 'slutter': ['slutter', 'trustle'],\n 'sly': ['lys', 'sly'],\n 'sma': ['mas', 'sam', 'sma'],\n 'smachrie': ['semiarch', 'smachrie'],\n 'smallen': ['ensmall', 'smallen'],\n 'smalltime': ['metallism', 'smalltime'],\n 'smaltine': ['mentalis', 'smaltine', 'stileman'],\n 'smaltite': ['metalist', 'smaltite'],\n 'smart': ['smart', 'stram'],\n 'smarten': ['sarment', 'smarten'],\n 'smashage': ['gamashes', 'smashage'],\n 'smeary': ['ramsey', 'smeary'],\n 'smectis': ['sectism', 'smectis'],\n 'smee': ['mese', 'seem', 'seme', 'smee'],\n 'smeech': ['scheme', 'smeech'],\n 'smeek': ['meeks', 'smeek'],\n 'smeer': ['merse', 'smeer'],\n 'smeeth': ['smeeth', 'smethe'],\n 'smeller': ['resmell', 'smeller'],\n 'smelly': ['mysell', 'smelly'],\n 'smelter': ['melters', 'resmelt', 'smelter'],\n 'smethe': ['smeeth', 'smethe'],\n 'smilax': ['laxism', 'smilax'],\n 'smile': ['limes', 'miles', 'slime', 'smile'],\n 'smiler': ['slimer', 'smiler'],\n 'smilet': ['mistle', 'smilet'],\n 'smiling': ['simling', 'smiling'],\n 'smily': ['limsy', 'slimy', 'smily'],\n 'sminthian': ['mitannish', 'sminthian'],\n 'smirch': ['chrism', 'smirch'],\n 'smirkish': ['skirmish', 'smirkish'],\n 'smit': ['mist', 'smit', 'stim'],\n 'smite': ['metis', 'smite', 'stime', 'times'],\n 'smiter': ['merist', 'mister', 'smiter'],\n 'smither': ['rhemist', 'smither'],\n 'smithian': ['isthmian', 'smithian'],\n 'smoker': ['mosker', 'smoker'],\n 'smoot': ['moost', 'smoot'],\n 'smoother': ['resmooth', 'romeshot', 'smoother'],\n 'smoothingly': ['hymnologist', 'smoothingly'],\n 'smore': ['meros', 'mores', 'morse', 'sermo', 'smore'],\n 'smote': ['moste', 'smote'],\n 'smother': ['smother', 'thermos'],\n 'smouse': ['mousse', 'smouse'],\n 'smouser': ['osmerus', 'smouser'],\n 'smuggle': ['muggles', 'smuggle'],\n 'smut': ['must', 'smut', 'stum'],\n 'smyrniot': ['smyrniot', 'tyronism'],\n 'smyrniote': ['myristone', 'smyrniote'],\n 'snab': ['nabs', 'snab'],\n 'snackle': ['slacken', 'snackle'],\n 'snag': ['sang', 'snag'],\n 'snagrel': ['sangrel', 'snagrel'],\n 'snail': ['sinal', 'slain', 'snail'],\n 'snaillike': ['silkaline', 'snaillike'],\n 'snaily': ['anisyl', 'snaily'],\n 'snaith': ['snaith', 'tahsin'],\n 'snake': ['skean', 'snake', 'sneak'],\n 'snap': ['snap', 'span'],\n 'snape': ['aspen', 'panse', 'snape', 'sneap', 'spane', 'spean'],\n 'snaper': ['resnap', 'respan', 'snaper'],\n 'snapless': ['snapless', 'spanless'],\n 'snapy': ['pansy', 'snapy'],\n 'snare': ['anser', 'nares', 'rasen', 'snare'],\n 'snarer': ['serran', 'snarer'],\n 'snaste': ['assent', 'snaste'],\n 'snatch': ['chanst', 'snatch', 'stanch'],\n 'snatchable': ['snatchable', 'stanchable'],\n 'snatcher': ['resnatch', 'snatcher', 'stancher'],\n 'snath': ['shant', 'snath'],\n 'snathe': ['athens', 'hasten', 'snathe', 'sneath'],\n 'snaw': ['sawn', 'snaw', 'swan'],\n 'snead': ['sedan', 'snead'],\n 'sneak': ['skean', 'snake', 'sneak'],\n 'sneaker': ['keresan', 'sneaker'],\n 'sneaksman': ['masskanne', 'sneaksman'],\n 'sneap': ['aspen', 'panse', 'snape', 'sneap', 'spane', 'spean'],\n 'sneath': ['athens', 'hasten', 'snathe', 'sneath'],\n 'sneathe': ['sneathe', 'thesean'],\n 'sned': ['send', 'sned'],\n 'snee': ['ense', 'esne', 'nese', 'seen', 'snee'],\n 'sneer': ['renes', 'sneer'],\n 'snew': ['news', 'sewn', 'snew'],\n 'snib': ['nibs', 'snib'],\n 'snickle': ['slicken', 'snickle'],\n 'sniddle': ['slidden', 'sniddle'],\n 'snide': ['denis', 'snide'],\n 'snig': ['sign', 'sing', 'snig'],\n 'snigger': ['serging', 'snigger'],\n 'snip': ['snip', 'spin'],\n 'snipe': ['penis', 'snipe', 'spine'],\n 'snipebill': ['snipebill', 'spinebill'],\n 'snipelike': ['snipelike', 'spinelike'],\n 'sniper': ['pernis', 'respin', 'sniper'],\n 'snipocracy': ['conspiracy', 'snipocracy'],\n 'snipper': ['nippers', 'snipper'],\n 'snippet': ['snippet', 'stippen'],\n 'snipy': ['snipy', 'spiny'],\n 'snitcher': ['christen', 'snitcher'],\n 'snite': ['inset', 'neist', 'snite', 'stein', 'stine', 'tsine'],\n 'snithy': ['shinty', 'snithy'],\n 'sniveler': ['ensilver', 'sniveler'],\n 'snively': ['snively', 'sylvine'],\n 'snob': ['bosn', 'nobs', 'snob'],\n 'snocker': ['conkers', 'snocker'],\n 'snod': ['snod', 'sond'],\n 'snoek': ['snoek', 'snoke', 'soken'],\n 'snog': ['snog', 'song'],\n 'snoke': ['snoek', 'snoke', 'soken'],\n 'snook': ['onkos', 'snook'],\n 'snoop': ['snoop', 'spoon'],\n 'snooper': ['snooper', 'spooner'],\n 'snoopy': ['snoopy', 'spoony'],\n 'snoot': ['snoot', 'stoon'],\n 'snore': ['norse', 'noser', 'seron', 'snore'],\n 'snorer': ['snorer', 'sorner'],\n 'snoring': ['snoring', 'sorning'],\n 'snork': ['norsk', 'snork'],\n 'snotter': ['snotter', 'stentor', 'torsten'],\n 'snout': ['notus', 'snout', 'stoun', 'tonus'],\n 'snouter': ['snouter', 'tonsure', 'unstore'],\n 'snow': ['snow', 'sown'],\n 'snowie': ['nowise', 'snowie'],\n 'snowish': ['snowish', 'whisson'],\n 'snowy': ['snowy', 'wyson'],\n 'snug': ['snug', 'sung'],\n 'snup': ['snup', 'spun'],\n 'snurp': ['snurp', 'spurn'],\n 'snurt': ['snurt', 'turns'],\n 'so': ['os', 'so'],\n 'soak': ['asok', 'soak', 'soka'],\n 'soaker': ['arkose', 'resoak', 'soaker'],\n 'soally': ['soally', 'sollya'],\n 'soam': ['amos', 'soam', 'soma'],\n 'soap': ['asop', 'sapo', 'soap'],\n 'soaper': ['resoap', 'soaper'],\n 'soar': ['asor', 'rosa', 'soar', 'sora'],\n 'sob': ['bos', 'sob'],\n 'sobeit': ['setibo', 'sobeit'],\n 'sober': ['boser', 'brose', 'sober'],\n 'sobralite': ['sobralite', 'strobilae'],\n 'soc': ['cos', 'osc', 'soc'],\n 'socager': ['corsage', 'socager'],\n 'social': ['colias', 'scolia', 'social'],\n 'socialite': ['aeolistic', 'socialite'],\n 'societal': ['cosalite', 'societal'],\n 'societism': ['seismotic', 'societism'],\n 'socinian': ['oscinian', 'socinian'],\n 'sociobiological': ['biosociological', 'sociobiological'],\n 'sociolegal': ['oligoclase', 'sociolegal'],\n 'socius': ['scious', 'socius'],\n 'socle': ['close', 'socle'],\n 'soco': ['coos', 'soco'],\n 'socotran': ['ostracon', 'socotran'],\n 'socotrine': ['certosino', 'cortisone', 'socotrine'],\n 'socratean': ['ostracean', 'socratean'],\n 'socratic': ['acrostic', 'sarcotic', 'socratic'],\n 'socratical': ['acrostical', 'socratical'],\n 'socratically': ['acrostically', 'socratically'],\n 'socraticism': ['acrosticism', 'socraticism'],\n 'socratism': ['ostracism', 'socratism'],\n 'socratize': ['ostracize', 'socratize'],\n 'sod': ['dos', 'ods', 'sod'],\n 'soda': ['dosa', 'sado', 'soda'],\n 'sodalite': ['diastole', 'isolated', 'sodalite', 'solidate'],\n 'sodium': ['modius', 'sodium'],\n 'sodom': ['dooms', 'sodom'],\n 'sodomitic': ['diosmotic', 'sodomitic'],\n 'soe': ['oes', 'ose', 'soe'],\n 'soft': ['soft', 'stof'],\n 'soften': ['oftens', 'soften'],\n 'softener': ['resoften', 'softener'],\n 'sog': ['gos', 'sog'],\n 'soga': ['sago', 'soga'],\n 'soger': ['gorse', 'soger'],\n 'soh': ['sho', 'soh'],\n 'soho': ['shoo', 'soho'],\n 'soil': ['lois', 'silo', 'siol', 'soil', 'soli'],\n 'soiled': ['isolde', 'soiled'],\n 'sojourner': ['resojourn', 'sojourner'],\n 'sok': ['kos', 'sok'],\n 'soka': ['asok', 'soak', 'soka'],\n 'soke': ['skeo', 'soke'],\n 'soken': ['snoek', 'snoke', 'soken'],\n 'sola': ['also', 'sola'],\n 'solacer': ['escolar', 'solacer'],\n 'solan': ['salon', 'sloan', 'solan'],\n 'solar': ['rosal', 'solar', 'soral'],\n 'solaristics': ['scissortail', 'solaristics'],\n 'solate': ['lotase', 'osteal', 'solate', 'stolae', 'talose'],\n 'sold': ['slod', 'sold'],\n 'solder': ['dorsel', 'seldor', 'solder'],\n 'solderer': ['resolder', 'solderer'],\n 'soldi': ['soldi', 'solid'],\n 'soldo': ['soldo', 'solod'],\n 'sole': ['lose', 'sloe', 'sole'],\n 'solea': ['alose', 'osela', 'solea'],\n 'solecist': ['solecist', 'solstice'],\n 'solen': ['slone', 'solen'],\n 'soleness': ['noseless', 'soleness'],\n 'solenial': ['lesional', 'solenial'],\n 'solenite': ['noselite', 'solenite'],\n 'solenium': ['emulsion', 'solenium'],\n 'solenopsis': ['poisonless', 'solenopsis'],\n 'solent': ['solent', 'stolen', 'telson'],\n 'solentine': ['nelsonite', 'solentine'],\n 'soler': ['loser', 'orsel', 'rosel', 'soler'],\n 'solera': ['roseal', 'solera'],\n 'soles': ['loess', 'soles'],\n 'soli': ['lois', 'silo', 'siol', 'soil', 'soli'],\n 'soliative': ['isolative', 'soliative'],\n 'solicit': ['colitis', 'solicit'],\n 'solicitation': ['coalitionist', 'solicitation'],\n 'soliciter': ['resolicit', 'soliciter'],\n 'soliciting': ['ignicolist', 'soliciting'],\n 'solicitude': ['isodulcite', 'solicitude'],\n 'solid': ['soldi', 'solid'],\n 'solidate': ['diastole', 'isolated', 'sodalite', 'solidate'],\n 'solidus': ['dissoul', 'dulosis', 'solidus'],\n 'solilunar': ['lunisolar', 'solilunar'],\n 'soliped': ['despoil', 'soliped', 'spoiled'],\n 'solitarian': ['sinoatrial', 'solitarian'],\n 'solitary': ['royalist', 'solitary'],\n 'soliterraneous': ['salinoterreous', 'soliterraneous'],\n 'solitude': ['outslide', 'solitude'],\n 'sollya': ['soally', 'sollya'],\n 'solmizate': ['solmizate', 'zealotism'],\n 'solo': ['sloo', 'solo', 'sool'],\n 'solod': ['soldo', 'solod'],\n 'solon': ['olson', 'solon'],\n 'solonic': ['scolion', 'solonic'],\n 'soloth': ['soloth', 'tholos'],\n 'solotink': ['solotink', 'solotnik'],\n 'solotnik': ['solotink', 'solotnik'],\n 'solstice': ['solecist', 'solstice'],\n 'solum': ['mosul', 'mouls', 'solum'],\n 'solute': ['lutose', 'solute', 'tousle'],\n 'solutioner': ['resolution', 'solutioner'],\n 'soma': ['amos', 'soam', 'soma'],\n 'somacule': ['maculose', 'somacule'],\n 'somal': ['salmo', 'somal'],\n 'somali': ['limosa', 'somali'],\n 'somasthenia': ['anhematosis', 'somasthenia'],\n 'somatic': ['atomics', 'catoism', 'cosmati', 'osmatic', 'somatic'],\n 'somatics': ['acosmist', 'massicot', 'somatics'],\n 'somatism': ['osmatism', 'somatism'],\n 'somatophyte': ['hepatostomy', 'somatophyte'],\n 'somatophytic': ['hypostomatic', 'somatophytic'],\n 'somatopleuric': ['micropetalous', 'somatopleuric'],\n 'somatopsychic': ['psychosomatic', 'somatopsychic'],\n 'somatosplanchnic': ['somatosplanchnic', 'splanchnosomatic'],\n 'somatous': ['astomous', 'somatous'],\n 'somber': ['somber', 'sombre'],\n 'sombre': ['somber', 'sombre'],\n 'some': ['meso', 'mose', 'some'],\n 'someday': ['samoyed', 'someday'],\n 'somers': ['messor', 'mosser', 'somers'],\n 'somnambule': ['somnambule', 'summonable'],\n 'somnial': ['malison', 'manolis', 'osmanli', 'somnial'],\n 'somnopathy': ['phytomonas', 'somnopathy'],\n 'somnorific': ['onisciform', 'somnorific'],\n 'son': ['ons', 'son'],\n 'sonant': ['santon', 'sonant', 'stanno'],\n 'sonantic': ['canonist', 'sanction', 'sonantic'],\n 'sonar': ['arson', 'saron', 'sonar'],\n 'sonatina': ['ansation', 'sonatina'],\n 'sond': ['snod', 'sond'],\n 'sondation': ['anisodont', 'sondation'],\n 'sondeli': ['indoles', 'sondeli'],\n 'soneri': ['rosine', 'senior', 'soneri'],\n 'song': ['snog', 'song'],\n 'songoi': ['isogon', 'songoi'],\n 'songy': ['gonys', 'songy'],\n 'sonic': ['oscin', 'scion', 'sonic'],\n 'sonja': ['janos', 'jason', 'jonas', 'sonja'],\n 'sonneratia': ['arsenation', 'senatorian', 'sonneratia'],\n 'sonnet': ['sonnet', 'stonen', 'tenson'],\n 'sonnetwise': ['sonnetwise', 'swinestone'],\n 'sonrai': ['arsino', 'rasion', 'sonrai'],\n 'sontag': ['sontag', 'tongas'],\n 'soodle': ['dolose', 'oodles', 'soodle'],\n 'sook': ['koso', 'skoo', 'sook'],\n 'sool': ['sloo', 'solo', 'sool'],\n 'soon': ['oons', 'soon'],\n 'sooner': ['nooser', 'seroon', 'sooner'],\n 'sooter': ['seroot', 'sooter', 'torose'],\n 'sooth': ['shoot', 'sooth', 'sotho', 'toosh'],\n 'soother': ['orthose', 'reshoot', 'shooter', 'soother'],\n 'soothing': ['shooting', 'soothing'],\n 'sootiness': ['enostosis', 'sootiness'],\n 'sooty': ['sooty', 'soyot'],\n 'sope': ['epos', 'peso', 'pose', 'sope'],\n 'soph': ['phos', 'posh', 'shop', 'soph'],\n 'sophister': ['posterish', 'prothesis', 'sophister', 'storeship', 'tephrosis'],\n 'sophistical': ['postischial', 'sophistical'],\n 'sophomore': ['osmophore', 'sophomore'],\n 'sopition': ['position', 'sopition'],\n 'sopor': ['poros', 'proso', 'sopor', 'spoor'],\n 'soprani': ['parison', 'soprani'],\n 'sopranist': ['postnaris', 'sopranist'],\n 'soprano': ['pronaos', 'soprano'],\n 'sora': ['asor', 'rosa', 'soar', 'sora'],\n 'sorabian': ['abrasion', 'sorabian'],\n 'soral': ['rosal', 'solar', 'soral'],\n 'sorbate': ['barotse', 'boaster', 'reboast', 'sorbate'],\n 'sorbin': ['insorb', 'sorbin'],\n 'sorcer': ['scorer', 'sorcer'],\n 'sorchin': ['cornish', 'cronish', 'sorchin'],\n 'sorda': ['sarod', 'sorda'],\n 'sordes': ['dosser', 'sordes'],\n 'sordine': ['indorse', 'ordines', 'siredon', 'sordine'],\n 'sordino': ['indoors', 'sordino'],\n 'sore': ['eros', 'rose', 'sero', 'sore'],\n 'soredia': ['ardoise', 'aroides', 'soredia'],\n 'sorediate': ['oestridae', 'ostreidae', 'sorediate'],\n 'soredium': ['dimerous', 'soredium'],\n 'soree': ['erose', 'soree'],\n 'sorefoot': ['footsore', 'sorefoot'],\n 'sorehead': ['rosehead', 'sorehead'],\n 'sorehon': ['onshore', 'sorehon'],\n 'sorema': ['amores', 'ramose', 'sorema'],\n 'soricid': ['cirsoid', 'soricid'],\n 'soricident': ['discretion', 'soricident'],\n 'soricine': ['recision', 'soricine'],\n 'sorite': ['restio', 'sorite', 'sortie', 'triose'],\n 'sorites': ['rossite', 'sorites'],\n 'sornare': ['serrano', 'sornare'],\n 'sorner': ['snorer', 'sorner'],\n 'sorning': ['snoring', 'sorning'],\n 'sororial': ['rosorial', 'sororial'],\n 'sorption': ['notropis', 'positron', 'sorption'],\n 'sortable': ['sortable', 'storable'],\n 'sorted': ['sorted', 'strode'],\n 'sorter': ['resort', 'roster', 'sorter', 'storer'],\n 'sortie': ['restio', 'sorite', 'sortie', 'triose'],\n 'sortilegus': ['sortilegus', 'strigulose'],\n 'sortiment': ['sortiment', 'trimstone'],\n 'sortly': ['sortly', 'styrol'],\n 'sorty': ['sorty', 'story', 'stroy'],\n 'sorva': ['savor', 'sorva'],\n 'sory': ['rosy', 'sory'],\n 'sosia': ['oasis', 'sosia'],\n 'sostenuto': ['ostentous', 'sostenuto'],\n 'soter': ['roset', 'rotse', 'soter', 'stero', 'store', 'torse'],\n 'soterial': ['soterial', 'striolae'],\n 'sotho': ['shoot', 'sooth', 'sotho', 'toosh'],\n 'sotie': ['sotie', 'toise'],\n 'sotnia': ['sotnia', 'tinosa'],\n 'sotol': ['sotol', 'stool'],\n 'sots': ['sots', 'toss'],\n 'sotter': ['sotter', 'testor'],\n 'soucar': ['acorus', 'soucar'],\n 'souchet': ['souchet', 'techous', 'tousche'],\n 'souly': ['lousy', 'souly'],\n 'soum': ['soum', 'sumo'],\n 'soumansite': ['soumansite', 'stamineous'],\n 'sound': ['nodus', 'ounds', 'sound'],\n 'sounder': ['resound', 'sounder', 'unrosed'],\n 'soup': ['opus', 'soup'],\n 'souper': ['poseur', 'pouser', 'souper', 'uprose'],\n 'sour': ['ours', 'sour'],\n 'source': ['cerous', 'course', 'crouse', 'source'],\n 'soured': ['douser', 'soured'],\n 'souredness': ['rousedness', 'souredness'],\n 'souren': ['souren', 'unsore', 'ursone'],\n 'sourer': ['rouser', 'sourer'],\n 'souring': ['nigrous', 'rousing', 'souring'],\n 'sourly': ['lusory', 'sourly'],\n 'soursop': ['psorous', 'soursop', 'sporous'],\n 'soury': ['soury', 'yours'],\n 'souser': ['serous', 'souser'],\n 'souter': ['ouster', 'souter', 'touser', 'trouse'],\n 'souterrain': ['souterrain', 'ternarious', 'trouserian'],\n 'south': ['shout', 'south'],\n 'souther': ['shouter', 'souther'],\n 'southerland': ['southerland', 'southlander'],\n 'southing': ['shouting', 'southing'],\n 'southlander': ['southerland', 'southlander'],\n 'soviet': ['soviet', 'sovite'],\n 'sovite': ['soviet', 'sovite'],\n 'sowdones': ['sowdones', 'woodness'],\n 'sowel': ['sowel', 'sowle'],\n 'sower': ['owser', 'resow', 'serow', 'sower', 'swore', 'worse'],\n 'sowl': ['slow', 'sowl'],\n 'sowle': ['sowel', 'sowle'],\n 'sown': ['snow', 'sown'],\n 'sowt': ['sowt', 'stow', 'swot', 'wots'],\n 'soyot': ['sooty', 'soyot'],\n 'spa': ['asp', 'sap', 'spa'],\n 'space': ['capes', 'scape', 'space'],\n 'spaceless': ['scapeless', 'spaceless'],\n 'spacer': ['casper', 'escarp', 'parsec', 'scrape', 'secpar', 'spacer'],\n 'spade': ['depas', 'sepad', 'spade'],\n 'spader': ['rasped', 'spader', 'spread'],\n 'spadiceous': ['dipsaceous', 'spadiceous'],\n 'spadone': ['espadon', 'spadone'],\n 'spadonic': ['spadonic', 'spondaic', 'spondiac'],\n 'spadrone': ['parsoned', 'spadrone'],\n 'spae': ['apse', 'pesa', 'spae'],\n 'spaer': ['asper', 'parse', 'prase', 'spaer', 'spare', 'spear'],\n 'spahi': ['aphis', 'apish', 'hispa', 'saiph', 'spahi'],\n 'spaid': ['sapid', 'spaid'],\n 'spaik': ['askip', 'spaik'],\n 'spairge': ['prisage', 'spairge'],\n 'spalacine': ['asclepian', 'spalacine'],\n 'spale': ['elaps',\n           'lapse',\n           'lepas',\n           'pales',\n           'salep',\n           'saple',\n           'sepal',\n           'slape',\n           'spale',\n           'speal'],\n 'spalt': ['spalt', 'splat'],\n 'span': ['snap', 'span'],\n 'spancel': ['enclasp', 'spancel'],\n 'spane': ['aspen', 'panse', 'snape', 'sneap', 'spane', 'spean'],\n 'spanemia': ['paeanism', 'spanemia'],\n 'spangler': ['spangler', 'sprangle'],\n 'spangolite': ['postgenial', 'spangolite'],\n 'spaniel': ['espinal', 'pinales', 'spaniel'],\n 'spaniol': ['sanpoil', 'spaniol'],\n 'spanless': ['snapless', 'spanless'],\n 'spar': ['rasp', 'spar'],\n 'sparable': ['parsable', 'prebasal', 'sparable'],\n 'spare': ['asper', 'parse', 'prase', 'spaer', 'spare', 'spear'],\n 'spareable': ['separable', 'spareable'],\n 'sparely': ['parsley', 'pyrales', 'sparely', 'splayer'],\n 'sparer': ['parser', 'rasper', 'sparer'],\n 'sparerib': ['ribspare', 'sparerib'],\n 'sparge': ['gasper', 'sparge'],\n 'sparger': ['grasper', 'regrasp', 'sparger'],\n 'sparidae': ['paradise', 'sparidae'],\n 'sparing': ['aspring', 'rasping', 'sparing'],\n 'sparingly': ['raspingly', 'sparingly'],\n 'sparingness': ['raspingness', 'sparingness'],\n 'sparling': ['laspring', 'sparling', 'springal'],\n 'sparoid': ['prasoid', 'sparoid'],\n 'sparse': ['passer', 'repass', 'sparse'],\n 'spart': ['spart', 'sprat', 'strap', 'traps'],\n 'spartanic': ['sacripant', 'spartanic'],\n 'sparteine': ['pistareen', 'sparteine'],\n 'sparterie': ['periaster', 'sparterie'],\n 'spartina': ['aspirant', 'partisan', 'spartina'],\n 'spartle': ['palster', 'persalt', 'plaster', 'psalter', 'spartle', 'stapler'],\n 'spary': ['raspy', 'spary', 'spray'],\n 'spat': ['past', 'spat', 'stap', 'taps'],\n 'spate': ['paste', 'septa', 'spate'],\n 'spathal': ['asphalt', 'spathal', 'taplash'],\n 'spathe': ['spathe', 'thapes'],\n 'spathic': ['haptics', 'spathic'],\n 'spatling': ['spatling', 'stapling'],\n 'spatter': ['spatter', 'tapster'],\n 'spattering': ['spattering', 'tapestring'],\n 'spattle': ['peltast', 'spattle'],\n 'spatular': ['pastural', 'spatular'],\n 'spatule': ['pulsate', 'spatule', 'upsteal'],\n 'spave': ['spave', 'vespa'],\n 'speak': ['sapek', 'speak'],\n 'speaker': ['respeak', 'speaker'],\n 'speal': ['elaps',\n           'lapse',\n           'lepas',\n           'pales',\n           'salep',\n           'saple',\n           'sepal',\n           'slape',\n           'spale',\n           'speal'],\n 'spean': ['aspen', 'panse', 'snape', 'sneap', 'spane', 'spean'],\n 'spear': ['asper', 'parse', 'prase', 'spaer', 'spare', 'spear'],\n 'spearman': ['parmesan', 'spearman'],\n 'spearmint': ['spearmint', 'spermatin'],\n 'speary': ['presay', 'speary'],\n 'spec': ['ceps', 'spec'],\n 'spectatorial': ['poetastrical', 'spectatorial'],\n 'specter': ['respect', 'scepter', 'specter'],\n 'spectered': ['sceptered', 'spectered'],\n 'spectra': ['precast', 'spectra'],\n 'spectral': ['sceptral', 'scraplet', 'spectral'],\n 'spectromicroscope': ['microspectroscope', 'spectromicroscope'],\n 'spectrotelescope': ['spectrotelescope', 'telespectroscope'],\n 'spectrous': ['spectrous', 'susceptor', 'suspector'],\n 'spectry': ['precyst', 'sceptry', 'spectry'],\n 'specula': ['capsule', 'specula', 'upscale'],\n 'specular': ['capsuler', 'specular'],\n 'speed': ['pedes', 'speed'],\n 'speel': ['sleep', 'speel'],\n 'speelless': ['sleepless', 'speelless'],\n 'speer': ['peres', 'perse', 'speer', 'spree'],\n 'speerity': ['perseity', 'speerity'],\n 'speiss': ['sepsis', 'speiss'],\n 'spelaean': ['seaplane', 'spelaean'],\n 'spelk': ['skelp', 'spelk'],\n 'speller': ['presell', 'respell', 'speller'],\n 'spelt': ['slept', 'spelt', 'splet'],\n 'spenerism': ['primeness', 'spenerism'],\n 'speos': ['posse', 'speos'],\n 'sperate': ['perates', 'repaste', 'sperate'],\n 'sperity': ['pyrites', 'sperity'],\n 'sperling': ['sperling', 'springle'],\n 'spermalist': ['psalmister', 'spermalist'],\n 'spermathecal': ['chapelmaster', 'spermathecal'],\n 'spermatid': ['predatism', 'spermatid'],\n 'spermatin': ['spearmint', 'spermatin'],\n 'spermatogonium': ['protomagnesium', 'spermatogonium'],\n 'spermatozoic': ['spermatozoic', 'zoospermatic'],\n 'spermiogenesis': ['geissospermine', 'spermiogenesis'],\n 'spermocarp': ['carposperm', 'spermocarp'],\n 'spet': ['pest', 'sept', 'spet', 'step'],\n 'spew': ['spew', 'swep'],\n 'sphacelation': ['lipsanotheca', 'sphacelation'],\n 'sphecidae': ['cheapside', 'sphecidae'],\n 'sphene': ['sephen', 'sphene'],\n 'sphenoethmoid': ['ethmosphenoid', 'sphenoethmoid'],\n 'sphenoethmoidal': ['ethmosphenoidal', 'sphenoethmoidal'],\n 'sphenotic': ['phonetics', 'sphenotic'],\n 'spheral': ['plasher', 'spheral'],\n 'spheration': ['opisthenar', 'spheration'],\n 'sphere': ['herpes', 'hesper', 'sphere'],\n 'sphery': ['sphery', 'sypher'],\n 'sphyraenid': ['dysphrenia', 'sphyraenid', 'sphyrnidae'],\n 'sphyrnidae': ['dysphrenia', 'sphyraenid', 'sphyrnidae'],\n 'spica': ['aspic', 'spica'],\n 'spicate': ['aseptic', 'spicate'],\n 'spice': ['sepic', 'spice'],\n 'spicer': ['crepis', 'cripes', 'persic', 'precis', 'spicer'],\n 'spiciferous': ['pisciferous', 'spiciferous'],\n 'spiciform': ['pisciform', 'spiciform'],\n 'spicket': ['skeptic', 'spicket'],\n 'spicular': ['scripula', 'spicular'],\n 'spiculate': ['euplastic', 'spiculate'],\n 'spiculated': ['disculpate', 'spiculated'],\n 'spicule': ['clipeus', 'spicule'],\n 'spider': ['spider', 'spired', 'spried'],\n 'spiderish': ['sidership', 'spiderish'],\n 'spiderlike': ['predislike', 'spiderlike'],\n 'spiel': ['piles', 'plies', 'slipe', 'spiel', 'spile'],\n 'spier': ['siper', 'spier', 'spire'],\n 'spikelet': ['spikelet', 'steplike'],\n 'spiking': ['pigskin', 'spiking'],\n 'spiky': ['pisky', 'spiky'],\n 'spile': ['piles', 'plies', 'slipe', 'spiel', 'spile'],\n 'spiler': ['lisper', 'pliers', 'sirple', 'spiler'],\n 'spiling': ['sipling', 'spiling'],\n 'spiloma': ['imposal', 'spiloma'],\n 'spilt': ['spilt', 'split'],\n 'spin': ['snip', 'spin'],\n 'spina': ['pisan', 'sapin', 'spina'],\n 'spinae': ['sepian', 'spinae'],\n 'spinales': ['painless', 'spinales'],\n 'spinate': ['panties', 'sapient', 'spinate'],\n 'spindled': ['spindled', 'splendid'],\n 'spindler': ['spindler', 'splinder'],\n 'spine': ['penis', 'snipe', 'spine'],\n 'spinebill': ['snipebill', 'spinebill'],\n 'spinel': ['spinel', 'spline'],\n 'spinelike': ['snipelike', 'spinelike'],\n 'spinet': ['instep', 'spinet'],\n 'spinigerous': ['serpiginous', 'spinigerous'],\n 'spinigrade': ['despairing', 'spinigrade'],\n 'spinoid': ['spinoid', 'spionid'],\n 'spinoneural': ['spinoneural', 'unipersonal'],\n 'spinotectal': ['entoplastic', 'spinotectal', 'tectospinal', 'tenoplastic'],\n 'spiny': ['snipy', 'spiny'],\n 'spionid': ['spinoid', 'spionid'],\n 'spiracle': ['calipers', 'spiracle'],\n 'spiracula': ['auriscalp', 'spiracula'],\n 'spiral': ['prisal', 'spiral'],\n 'spiralism': ['misprisal', 'spiralism'],\n 'spiraloid': ['spiraloid', 'sporidial'],\n 'spiran': ['spiran', 'sprain'],\n 'spirant': ['spirant', 'spraint'],\n 'spirate': ['piaster', 'piastre', 'raspite', 'spirate', 'traipse'],\n 'spire': ['siper', 'spier', 'spire'],\n 'spirea': ['aspire', 'paries', 'praise', 'sirpea', 'spirea'],\n 'spired': ['spider', 'spired', 'spried'],\n 'spirelet': ['epistler', 'spirelet'],\n 'spireme': ['emprise', 'imprese', 'premise', 'spireme'],\n 'spiritally': ['pistillary', 'spiritally'],\n 'spiriter': ['respirit', 'spiriter'],\n 'spirometer': ['prisometer', 'spirometer'],\n 'spironema': ['mesropian', 'promnesia', 'spironema'],\n 'spirt': ['spirt', 'sprit', 'stirp', 'strip'],\n 'spirula': ['parulis', 'spirula', 'uprisal'],\n 'spit': ['pist', 'spit'],\n 'spital': ['alpist', 'pastil', 'spital'],\n 'spite': ['septi', 'spite', 'stipe'],\n 'spithame': ['aphetism', 'mateship', 'shipmate', 'spithame'],\n 'spitter': ['spitter', 'tipster'],\n 'splairge': ['aspergil', 'splairge'],\n 'splanchnosomatic': ['somatosplanchnic', 'splanchnosomatic'],\n 'splasher': ['harpless', 'splasher'],\n 'splat': ['spalt', 'splat'],\n 'splay': ['palsy', 'splay'],\n 'splayed': ['pylades', 'splayed'],\n 'splayer': ['parsley', 'pyrales', 'sparely', 'splayer'],\n 'spleet': ['pestle', 'spleet'],\n 'splender': ['resplend', 'splender'],\n 'splendid': ['spindled', 'splendid'],\n 'splenium': ['splenium', 'unsimple'],\n 'splenolaparotomy': ['laparosplenotomy', 'splenolaparotomy'],\n 'splenoma': ['neoplasm', 'pleonasm', 'polesman', 'splenoma'],\n 'splenomegalia': ['megalosplenia', 'splenomegalia'],\n 'splenonephric': ['phrenosplenic', 'splenonephric', 'splenophrenic'],\n 'splenophrenic': ['phrenosplenic', 'splenonephric', 'splenophrenic'],\n 'splet': ['slept', 'spelt', 'splet'],\n 'splice': ['clipse', 'splice'],\n 'spliceable': ['eclipsable', 'spliceable'],\n 'splinder': ['spindler', 'splinder'],\n 'spline': ['spinel', 'spline'],\n 'split': ['spilt', 'split'],\n 'splitter': ['splitter', 'striplet'],\n 'splore': ['sloper', 'splore'],\n 'spogel': ['gospel', 'spogel'],\n 'spoil': ['polis', 'spoil'],\n 'spoilage': ['pelasgoi', 'spoilage'],\n 'spoilation': ['positional', 'spoilation', 'spoliation'],\n 'spoiled': ['despoil', 'soliped', 'spoiled'],\n 'spoiler': ['leporis', 'spoiler'],\n 'spoilment': ['simpleton', 'spoilment'],\n 'spoilt': ['pistol', 'postil', 'spoilt'],\n 'spole': ['elops', 'slope', 'spole'],\n 'spoliation': ['positional', 'spoilation', 'spoliation'],\n 'spondaic': ['spadonic', 'spondaic', 'spondiac'],\n 'spondiac': ['spadonic', 'spondaic', 'spondiac'],\n 'spongily': ['posingly', 'spongily'],\n 'sponsal': ['plasson', 'sponsal'],\n 'sponsalia': ['passional', 'sponsalia'],\n 'spool': ['polos', 'sloop', 'spool'],\n 'spoon': ['snoop', 'spoon'],\n 'spooner': ['snooper', 'spooner'],\n 'spoony': ['snoopy', 'spoony'],\n 'spoonyism': ['spoonyism', 'symposion'],\n 'spoor': ['poros', 'proso', 'sopor', 'spoor'],\n 'spoot': ['spoot', 'stoop'],\n 'sporangia': ['agapornis', 'sporangia'],\n 'spore': ['poser', 'prose', 'ropes', 'spore'],\n 'sporidial': ['spiraloid', 'sporidial'],\n 'sporification': ['antisoporific', 'prosification', 'sporification'],\n 'sporogeny': ['gynospore', 'sporogeny'],\n 'sporoid': ['psoroid', 'sporoid'],\n 'sporotrichum': ['sporotrichum', 'trichosporum'],\n 'sporous': ['psorous', 'soursop', 'sporous'],\n 'sporozoic': ['sporozoic', 'zoosporic'],\n 'sport': ['sport', 'strop'],\n 'sporter': ['sporter', 'strepor'],\n 'sportula': ['postural', 'pulsator', 'sportula'],\n 'sportulae': ['opulaster', 'sportulae', 'sporulate'],\n 'sporulate': ['opulaster', 'sportulae', 'sporulate'],\n 'sporule': ['leprous', 'pelorus', 'sporule'],\n 'sposhy': ['hyssop', 'phossy', 'sposhy'],\n 'spot': ['post', 'spot', 'stop', 'tops'],\n 'spotless': ['postless', 'spotless', 'stopless'],\n 'spotlessness': ['spotlessness', 'stoplessness'],\n 'spotlike': ['postlike', 'spotlike'],\n 'spottedly': ['spottedly', 'spotteldy'],\n 'spotteldy': ['spottedly', 'spotteldy'],\n 'spotter': ['protest', 'spotter'],\n 'spouse': ['esopus', 'spouse'],\n 'spout': ['spout', 'stoup'],\n 'spouter': ['petrous', 'posture', 'proetus', 'proteus', 'septuor', 'spouter'],\n 'sprag': ['grasp', 'sprag'],\n 'sprain': ['spiran', 'sprain'],\n 'spraint': ['spirant', 'spraint'],\n 'sprangle': ['spangler', 'sprangle'],\n 'sprat': ['spart', 'sprat', 'strap', 'traps'],\n 'spray': ['raspy', 'spary', 'spray'],\n 'sprayer': ['respray', 'sprayer'],\n 'spread': ['rasped', 'spader', 'spread'],\n 'spreadboard': ['broadspread', 'spreadboard'],\n 'spreader': ['respread', 'spreader'],\n 'spreadover': ['overspread', 'spreadover'],\n 'spree': ['peres', 'perse', 'speer', 'spree'],\n 'spret': ['prest', 'spret'],\n 'spried': ['spider', 'spired', 'spried'],\n 'sprier': ['risper', 'sprier'],\n 'spriest': ['persist', 'spriest'],\n 'springal': ['laspring', 'sparling', 'springal'],\n 'springe': ['presign', 'springe'],\n 'springer': ['respring', 'springer'],\n 'springhead': ['headspring', 'springhead'],\n 'springhouse': ['springhouse', 'surgeonship'],\n 'springle': ['sperling', 'springle'],\n 'sprit': ['spirt', 'sprit', 'stirp', 'strip'],\n 'sprite': ['priest', 'pteris', 'sprite', 'stripe'],\n 'spritehood': ['priesthood', 'spritehood'],\n 'sproat': ['asport', 'pastor', 'sproat'],\n 'sprocket': ['prestock', 'sprocket'],\n 'sprout': ['sprout', 'stroup', 'stupor'],\n 'sprouter': ['posturer', 'resprout', 'sprouter'],\n 'sprouting': ['outspring', 'sprouting'],\n 'sprue': ['purse', 'resup', 'sprue', 'super'],\n 'spruer': ['purser', 'spruer'],\n 'spruit': ['purist', 'spruit', 'uprist', 'upstir'],\n 'spun': ['snup', 'spun'],\n 'spunkie': ['spunkie', 'unspike'],\n 'spuriae': ['spuriae', 'uparise', 'upraise'],\n 'spurl': ['slurp', 'spurl'],\n 'spurlet': ['purslet', 'spurlet', 'spurtle'],\n 'spurn': ['snurp', 'spurn'],\n 'spurt': ['spurt', 'turps'],\n 'spurtive': ['spurtive', 'upstrive'],\n 'spurtle': ['purslet', 'spurlet', 'spurtle'],\n 'sputa': ['sputa', 'staup', 'stupa'],\n 'sputumary': ['sputumary', 'sumptuary'],\n 'sputumous': ['sputumous', 'sumptuous'],\n 'spyer': ['pryse', 'spyer'],\n 'spyros': ['prossy', 'spyros'],\n 'squail': ['squail', 'squali'],\n 'squali': ['squail', 'squali'],\n 'squamatine': ['antimasque', 'squamatine'],\n 'squame': ['masque', 'squame', 'squeam'],\n 'squameous': ['squameous', 'squeamous'],\n 'squamopetrosal': ['petrosquamosal', 'squamopetrosal'],\n 'squamosoparietal': ['parietosquamosal', 'squamosoparietal'],\n 'squareman': ['marquesan', 'squareman'],\n 'squeaker': ['resqueak', 'squeaker'],\n 'squeal': ['lasque', 'squeal'],\n 'squeam': ['masque', 'squame', 'squeam'],\n 'squeamous': ['squameous', 'squeamous'],\n 'squillian': ['nisqualli', 'squillian'],\n 'squire': ['risque', 'squire'],\n 'squiret': ['querist', 'squiret'],\n 'squit': ['quits', 'squit'],\n 'sramana': ['ramanas', 'sramana'],\n 'sri': ['sir', 'sri'],\n 'srivatsan': ['ravissant', 'srivatsan'],\n 'ssi': ['sis', 'ssi'],\n 'ssu': ['ssu', 'sus'],\n 'staab': ['basta', 'staab'],\n 'stab': ['bast', 'bats', 'stab'],\n 'stabile': ['astilbe', 'bestial', 'blastie', 'stabile'],\n 'stable': ['ablest', 'stable', 'tables'],\n 'stableful': ['bullfeast', 'stableful'],\n 'stabler': ['blaster', 'reblast', 'stabler'],\n 'stabling': ['blasting', 'stabling'],\n 'stably': ['blasty', 'stably'],\n 'staccato': ['staccato', 'stoccata'],\n 'stacey': ['cytase', 'stacey'],\n 'stacher': ['stacher', 'thraces'],\n 'stacker': ['restack', 'stacker'],\n 'stackman': ['stackman', 'tacksman'],\n 'stacy': ['stacy', 'styca'],\n 'stade': ['sedat', 'stade', 'stead'],\n 'stadic': ['dicast', 'stadic'],\n 'stadium': ['dumaist', 'stadium'],\n 'staffer': ['restaff', 'staffer'],\n 'stag': ['gast', 'stag'],\n 'stager': ['gaster', 'stager'],\n 'stagily': ['stagily', 'stygial'],\n 'stagnation': ['antagonist', 'stagnation'],\n 'stagnum': ['mustang', 'stagnum'],\n 'stain': ['saint', 'satin', 'stain'],\n 'stainable': ['balanites', 'basaltine', 'stainable'],\n 'stainer': ['asterin', 'eranist', 'restain', 'stainer', 'starnie', 'stearin'],\n 'stainful': ['inflatus', 'stainful'],\n 'stainless': ['saintless', 'saltiness', 'slatiness', 'stainless'],\n 'staio': ['sitao', 'staio'],\n 'stair': ['arist',\n           'astir',\n           'sitar',\n           'stair',\n           'stria',\n           'tarsi',\n           'tisar',\n           'trias'],\n 'staircase': ['caesarist', 'staircase'],\n 'staired': ['astride', 'diaster', 'disrate', 'restiad', 'staired'],\n 'staithman': ['staithman', 'thanatism'],\n 'staiver': ['staiver', 'taivers'],\n 'stake': ['skate', 'stake', 'steak'],\n 'staker': ['skater', 'staker', 'strake', 'streak', 'tasker'],\n 'stalagmitic': ['stalagmitic', 'stigmatical'],\n 'stale': ['least', 'setal', 'slate', 'stale', 'steal', 'stela', 'tales'],\n 'staling': ['anglist', 'lasting', 'salting', 'slating', 'staling'],\n 'stalker': ['sklater', 'stalker'],\n 'staller': ['staller', 'stellar'],\n 'stam': ['mast', 'mats', 'stam'],\n 'stamen': ['mantes', 'stamen'],\n 'stamin': ['manist', 'mantis', 'matins', 'stamin'],\n 'stamina': ['amanist', 'stamina'],\n 'staminal': ['staminal', 'tailsman', 'talisman'],\n 'staminate': ['emanatist', 'staminate', 'tasmanite'],\n 'stamineous': ['soumansite', 'stamineous'],\n 'staminode': ['ademonist', 'demoniast', 'staminode'],\n 'stammer': ['stammer', 'stremma'],\n 'stampede': ['stampede', 'stepdame'],\n 'stamper': ['restamp', 'stamper'],\n 'stampian': ['mainpast', 'mantispa', 'panamist', 'stampian'],\n 'stan': ['nast', 'sant', 'stan'],\n 'stance': ['ascent', 'secant', 'stance'],\n 'stanch': ['chanst', 'snatch', 'stanch'],\n 'stanchable': ['snatchable', 'stanchable'],\n 'stancher': ['resnatch', 'snatcher', 'stancher'],\n 'stand': ['dasnt', 'stand'],\n 'standage': ['dagestan', 'standage'],\n 'standee': ['edestan', 'standee'],\n 'stander': ['stander', 'sternad'],\n 'standout': ['outstand', 'standout'],\n 'standstill': ['standstill', 'stillstand'],\n 'stane': ['antes', 'nates', 'stane', 'stean'],\n 'stang': ['angst', 'stang', 'tangs'],\n 'stangeria': ['agrestian', 'gerastian', 'stangeria'],\n 'stanine': ['ensaint', 'stanine'],\n 'stanly': ['nylast', 'stanly'],\n 'stanno': ['santon', 'sonant', 'stanno'],\n 'stap': ['past', 'spat', 'stap', 'taps'],\n 'staple': ['pastel', 'septal', 'staple'],\n 'stapler': ['palster', 'persalt', 'plaster', 'psalter', 'spartle', 'stapler'],\n 'stapling': ['spatling', 'stapling'],\n 'star': ['sart', 'star', 'stra', 'tars', 'tsar'],\n 'starch': ['scarth', 'scrath', 'starch'],\n 'stardom': ['stardom', 'tsardom'],\n 'stare': ['aster', 'serta', 'stare', 'strae', 'tarse', 'teras'],\n 'staree': ['asteer',\n            'easter',\n            'eastre',\n            'reseat',\n            'saeter',\n            'seater',\n            'staree',\n            'teaser',\n            'teresa'],\n 'starer': ['arrest', 'astrer', 'raster', 'starer'],\n 'starful': ['flustra', 'starful'],\n 'staring': ['gastrin', 'staring'],\n 'staringly': ['staringly', 'strayling'],\n 'stark': ['karst', 'skart', 'stark'],\n 'starky': ['starky', 'straky'],\n 'starlet': ['rattles', 'slatter', 'starlet', 'startle'],\n 'starlit': ['starlit', 'trisalt'],\n 'starlite': ['starlite', 'taistrel'],\n 'starnel': ['saltern', 'starnel', 'sternal'],\n 'starnie': ['asterin', 'eranist', 'restain', 'stainer', 'starnie', 'stearin'],\n 'starnose': ['assentor', 'essorant', 'starnose'],\n 'starship': ['starship', 'tsarship'],\n 'starshot': ['shotstar', 'starshot'],\n 'starter': ['restart', 'starter'],\n 'startle': ['rattles', 'slatter', 'starlet', 'startle'],\n 'starve': ['starve', 'staver', 'strave', 'tavers', 'versta'],\n 'starwise': ['starwise', 'waitress'],\n 'stary': ['satyr', 'stary', 'stray', 'trasy'],\n 'stases': ['assets', 'stases'],\n 'stasis': ['assist', 'stasis'],\n 'statable': ['statable', 'tastable'],\n 'state': ['state', 'taste', 'tates', 'testa'],\n 'stated': ['stated', 'tasted'],\n 'stateful': ['stateful', 'tasteful'],\n 'statefully': ['statefully', 'tastefully'],\n 'statefulness': ['statefulness', 'tastefulness'],\n 'stateless': ['stateless', 'tasteless'],\n 'statelich': ['athletics', 'statelich'],\n 'stately': ['stately', 'stylate'],\n 'statement': ['statement', 'testament'],\n 'stater': ['stater', 'taster', 'testar'],\n 'statesider': ['dissertate', 'statesider'],\n 'static': ['static', 'sticta'],\n 'statice': ['etacist', 'statice'],\n 'stational': ['saltation', 'stational'],\n 'stationarily': ['antiroyalist', 'stationarily'],\n 'stationer': ['nitrosate', 'stationer'],\n 'statoscope': ['septocosta', 'statoscope'],\n 'statue': ['astute', 'statue'],\n 'stature': ['stature', 'stauter'],\n 'staumer': ['staumer', 'strumae'],\n 'staun': ['staun', 'suant'],\n 'staunch': ['canthus', 'staunch'],\n 'staup': ['sputa', 'staup', 'stupa'],\n 'staurion': ['staurion', 'sutorian'],\n 'stauter': ['stature', 'stauter'],\n 'stave': ['stave', 'vesta'],\n 'staver': ['starve', 'staver', 'strave', 'tavers', 'versta'],\n 'staw': ['sawt', 'staw', 'swat', 'taws', 'twas', 'wast'],\n 'stawn': ['stawn', 'wasnt'],\n 'stayable': ['stayable', 'teasably'],\n 'stayed': ['stayed', 'steady'],\n 'stayer': ['atresy', 'estray', 'reasty', 'stayer'],\n 'staynil': ['nastily', 'saintly', 'staynil'],\n 'stchi': ['sitch', 'stchi', 'stich'],\n 'stead': ['sedat', 'stade', 'stead'],\n 'steady': ['stayed', 'steady'],\n 'steak': ['skate', 'stake', 'steak'],\n 'steal': ['least', 'setal', 'slate', 'stale', 'steal', 'stela', 'tales'],\n 'stealer': ['realest', 'reslate', 'resteal', 'stealer', 'teasler'],\n 'stealing': ['galenist', 'genitals', 'stealing'],\n 'stealy': ['alytes', 'astely', 'lysate', 'stealy'],\n 'steam': ['steam', 'stema'],\n 'steaming': ['misagent', 'steaming'],\n 'stean': ['antes', 'nates', 'stane', 'stean'],\n 'stearic': ['atresic', 'stearic'],\n 'stearin': ['asterin', 'eranist', 'restain', 'stainer', 'starnie', 'stearin'],\n 'stearone': ['orestean', 'resonate', 'stearone'],\n 'stearyl': ['saltery', 'stearyl'],\n 'steatin': ['atenist', 'instate', 'satient', 'steatin'],\n 'steatoma': ['atmostea', 'steatoma'],\n 'steatornis': ['steatornis', 'treasonist'],\n 'stech': ['chest', 'stech'],\n 'steek': ['keest', 'skeet', 'skete', 'steek'],\n 'steel': ['sleet', 'slete', 'steel', 'stele'],\n 'steeler': ['reestle', 'resteel', 'steeler'],\n 'steeliness': ['sleetiness', 'steeliness'],\n 'steeling': ['sleeting', 'steeling'],\n 'steelproof': ['sleetproof', 'steelproof'],\n 'steely': ['sleety', 'steely'],\n 'steen': ['steen', 'teens', 'tense'],\n 'steep': ['peste', 'steep'],\n 'steeper': ['estrepe', 'resteep', 'steeper'],\n 'steepy': ['steepy', 'typees'],\n 'steer': ['ester',\n           'estre',\n           'reest',\n           'reset',\n           'steer',\n           'stere',\n           'stree',\n           'terse',\n           'tsere'],\n 'steerer': ['reester', 'steerer'],\n 'steering': ['energist', 'steering'],\n 'steerling': ['esterling', 'steerling'],\n 'steeve': ['steeve', 'vestee'],\n 'stefan': ['fasten', 'nefast', 'stefan'],\n 'steg': ['gest', 'steg'],\n 'stegodon': ['dogstone', 'stegodon'],\n 'steid': ['deist', 'steid'],\n 'steigh': ['gesith', 'steigh'],\n 'stein': ['inset', 'neist', 'snite', 'stein', 'stine', 'tsine'],\n 'stela': ['least', 'setal', 'slate', 'stale', 'steal', 'stela', 'tales'],\n 'stelae': ['ateles', 'saltee', 'sealet', 'stelae', 'teasel'],\n 'stelai': ['isleta', 'litsea', 'salite', 'stelai'],\n 'stelar': ['laster',\n            'lastre',\n            'rastle',\n            'relast',\n            'resalt',\n            'salter',\n            'slater',\n            'stelar'],\n 'stele': ['sleet', 'slete', 'steel', 'stele'],\n 'stella': ['sallet', 'stella', 'talles'],\n 'stellar': ['staller', 'stellar'],\n 'stellaria': ['lateralis', 'stellaria'],\n 'stema': ['steam', 'stema'],\n 'stemlike': ['meletski', 'stemlike'],\n 'sten': ['nest', 'sent', 'sten'],\n 'stenar': ['astern', 'enstar', 'stenar', 'sterna'],\n 'stencil': ['lentisc', 'scintle', 'stencil'],\n 'stenciler': ['crestline', 'stenciler'],\n 'stenion': ['stenion', 'tension'],\n 'steno': ['onset', 'seton', 'steno', 'stone'],\n 'stenopaic': ['aspection', 'stenopaic'],\n 'stenosis': ['sisseton', 'stenosis'],\n 'stenotic': ['stenotic', 'tonetics'],\n 'stentor': ['snotter', 'stentor', 'torsten'],\n 'step': ['pest', 'sept', 'spet', 'step'],\n 'stepaunt': ['nettapus', 'stepaunt'],\n 'stepbairn': ['breastpin', 'stepbairn'],\n 'stepdame': ['stampede', 'stepdame'],\n 'stephana': ['pheasant', 'stephana'],\n 'stephanic': ['cathepsin', 'stephanic'],\n 'steplike': ['spikelet', 'steplike'],\n 'sterculia': ['sterculia', 'urticales'],\n 'stere': ['ester',\n           'estre',\n           'reest',\n           'reset',\n           'steer',\n           'stere',\n           'stree',\n           'terse',\n           'tsere'],\n 'stereograph': ['preshortage', 'stereograph'],\n 'stereometric': ['crestmoreite', 'stereometric'],\n 'stereophotograph': ['photostereograph', 'stereophotograph'],\n 'stereotelescope': ['stereotelescope', 'telestereoscope'],\n 'stereotomic': ['osteometric', 'stereotomic'],\n 'stereotomical': ['osteometrical', 'stereotomical'],\n 'stereotomy': ['osteometry', 'stereotomy'],\n 'steric': ['certis', 'steric'],\n 'sterigma': ['gemarist', 'magister', 'sterigma'],\n 'sterigmata': ['magistrate', 'sterigmata'],\n 'sterile': ['leister', 'sterile'],\n 'sterilize': ['listerize', 'sterilize'],\n 'sterin': ['estrin', 'insert', 'sinter', 'sterin', 'triens'],\n 'sterlet': ['settler', 'sterlet', 'trestle'],\n 'stern': ['ernst', 'stern'],\n 'sterna': ['astern', 'enstar', 'stenar', 'sterna'],\n 'sternad': ['stander', 'sternad'],\n 'sternage': ['estrange', 'segreant', 'sergeant', 'sternage'],\n 'sternal': ['saltern', 'starnel', 'sternal'],\n 'sternalis': ['sternalis', 'trainless'],\n 'sternite': ['insetter', 'interest', 'interset', 'sternite'],\n 'sterno': ['nestor', 'sterno', 'stoner', 'strone', 'tensor'],\n 'sternocostal': ['costosternal', 'sternocostal'],\n 'sternovertebral': ['sternovertebral', 'vertebrosternal'],\n 'stero': ['roset', 'rotse', 'soter', 'stero', 'store', 'torse'],\n 'steroid': ['oestrid', 'steroid', 'storied'],\n 'sterol': ['relost', 'reslot', 'rostel', 'sterol', 'torsel'],\n 'stert': ['stert', 'stret', 'trest'],\n 'sterve': ['revest', 'servet', 'sterve', 'verset', 'vester'],\n 'stet': ['sett', 'stet', 'test'],\n 'stevan': ['stevan', 'svante'],\n 'stevel': ['stevel', 'svelte'],\n 'stevia': ['itaves', 'stevia'],\n 'stew': ['stew', 'west'],\n 'stewart': ['stewart', 'swatter'],\n 'stewed': ['stewed', 'wedset'],\n 'stewy': ['stewy', 'westy'],\n 'stey': ['stey', 'yest'],\n 'sthenia': ['sethian', 'sthenia'],\n 'stich': ['sitch', 'stchi', 'stich'],\n 'stichid': ['distich', 'stichid'],\n 'sticker': ['rickets', 'sticker'],\n 'stickler': ['stickler', 'strickle'],\n 'sticta': ['static', 'sticta'],\n 'stife': ['feist', 'stife'],\n 'stiffener': ['restiffen', 'stiffener'],\n 'stifle': ['itself', 'stifle'],\n 'stifler': ['slifter', 'stifler'],\n 'stigmai': ['imagist', 'stigmai'],\n 'stigmatical': ['stalagmitic', 'stigmatical'],\n 'stilbene': ['nebelist', 'stilbene', 'tensible'],\n 'stile': ['islet', 'istle', 'slite', 'stile'],\n 'stileman': ['mentalis', 'smaltine', 'stileman'],\n 'stillage': ['legalist', 'stillage'],\n 'stiller': ['stiller', 'trellis'],\n 'stillstand': ['standstill', 'stillstand'],\n 'stilted': ['slitted', 'stilted'],\n 'stilter': ['litster', 'slitter', 'stilter', 'testril'],\n 'stilty': ['slitty', 'stilty'],\n 'stim': ['mist', 'smit', 'stim'],\n 'stime': ['metis', 'smite', 'stime', 'times'],\n 'stimulancy': ['stimulancy', 'unmystical'],\n 'stimy': ['misty', 'stimy'],\n 'stine': ['inset', 'neist', 'snite', 'stein', 'stine', 'tsine'],\n 'stinge': ['ingest', 'signet', 'stinge'],\n 'stinger': ['resting', 'stinger'],\n 'stinker': ['kirsten', 'kristen', 'stinker'],\n 'stinkstone': ['knottiness', 'stinkstone'],\n 'stinted': ['dentist', 'distent', 'stinted'],\n 'stion': ['sinto', 'stion'],\n 'stipa': ['piast', 'stipa', 'tapis'],\n 'stipe': ['septi', 'spite', 'stipe'],\n 'stipel': ['pistle', 'stipel'],\n 'stippen': ['snippet', 'stippen'],\n 'stipula': ['paulist', 'stipula'],\n 'stir': ['rist', 'stir'],\n 'stirk': ['skirt', 'stirk'],\n 'stirp': ['spirt', 'sprit', 'stirp', 'strip'],\n 'stitcher': ['restitch', 'stitcher'],\n 'stiver': ['stiver', 'strive', 'verist'],\n 'stoa': ['oast', 'stoa', 'taos'],\n 'stoach': ['stoach', 'stocah'],\n 'stoat': ['stoat', 'toast'],\n 'stoater': ['retoast', 'rosetta', 'stoater', 'toaster'],\n 'stocah': ['stoach', 'stocah'],\n 'stoccata': ['staccato', 'stoccata'],\n 'stocker': ['restock', 'stocker'],\n 'stoep': ['estop', 'stoep', 'stope'],\n 'stof': ['soft', 'stof'],\n 'stog': ['stog', 'togs'],\n 'stogie': ['egoist', 'stogie'],\n 'stoic': ['ostic', 'sciot', 'stoic'],\n 'stoically': ['callosity', 'stoically'],\n 'stoker': ['stoker', 'stroke'],\n 'stolae': ['lotase', 'osteal', 'solate', 'stolae', 'talose'],\n 'stole': ['slote', 'stole'],\n 'stoled': ['sloted', 'stoled'],\n 'stolen': ['solent', 'stolen', 'telson'],\n 'stoma': ['atmos', 'stoma', 'tomas'],\n 'stomatode': ['mootstead', 'stomatode'],\n 'stomatomy': ['mastotomy', 'stomatomy'],\n 'stomatopoda': ['podostomata', 'stomatopoda'],\n 'stomatopodous': ['podostomatous', 'stomatopodous'],\n 'stomper': ['pomster', 'stomper'],\n 'stone': ['onset', 'seton', 'steno', 'stone'],\n 'stonebird': ['birdstone', 'stonebird'],\n 'stonebreak': ['breakstone', 'stonebreak'],\n 'stoned': ['doesnt', 'stoned'],\n 'stonegall': ['gallstone', 'stonegall'],\n 'stonehand': ['handstone', 'stonehand'],\n 'stonehead': ['headstone', 'stonehead'],\n 'stonen': ['sonnet', 'stonen', 'tenson'],\n 'stoner': ['nestor', 'sterno', 'stoner', 'strone', 'tensor'],\n 'stonewood': ['stonewood', 'woodstone'],\n 'stong': ['stong', 'tongs'],\n 'stonker': ['stonker', 'storken'],\n 'stoof': ['foots', 'sfoot', 'stoof'],\n 'stool': ['sotol', 'stool'],\n 'stoon': ['snoot', 'stoon'],\n 'stoop': ['spoot', 'stoop'],\n 'stop': ['post', 'spot', 'stop', 'tops'],\n 'stopback': ['backstop', 'stopback'],\n 'stope': ['estop', 'stoep', 'stope'],\n 'stoper': ['poster', 'presto', 'repost', 'respot', 'stoper'],\n 'stoping': ['posting', 'stoping'],\n 'stopless': ['postless', 'spotless', 'stopless'],\n 'stoplessness': ['spotlessness', 'stoplessness'],\n 'stoppeur': ['pteropus', 'stoppeur'],\n 'storable': ['sortable', 'storable'],\n 'storage': ['storage', 'tagsore'],\n 'store': ['roset', 'rotse', 'soter', 'stero', 'store', 'torse'],\n 'storeen': ['enstore', 'estrone', 'storeen', 'tornese'],\n 'storeman': ['monaster', 'monstera', 'nearmost', 'storeman'],\n 'storer': ['resort', 'roster', 'sorter', 'storer'],\n 'storeship': ['posterish', 'prothesis', 'sophister', 'storeship', 'tephrosis'],\n 'storesman': ['nosesmart', 'storesman'],\n 'storge': ['groset', 'storge'],\n 'storiate': ['astroite', 'ostraite', 'storiate'],\n 'storied': ['oestrid', 'steroid', 'storied'],\n 'storier': ['roister', 'storier'],\n 'stork': ['stork', 'torsk'],\n 'storken': ['stonker', 'storken'],\n 'storm': ['storm', 'strom'],\n 'stormwind': ['stormwind', 'windstorm'],\n 'story': ['sorty', 'story', 'stroy'],\n 'stot': ['stot', 'tost'],\n 'stotter': ['stotter', 'stretto'],\n 'stoun': ['notus', 'snout', 'stoun', 'tonus'],\n 'stoup': ['spout', 'stoup'],\n 'stour': ['roust', 'rusot', 'stour', 'sutor', 'torus'],\n 'stouring': ['rousting', 'stouring'],\n 'stoutly': ['stoutly', 'tylotus'],\n 'stove': ['ovest', 'stove'],\n 'stover': ['stover', 'strove'],\n 'stow': ['sowt', 'stow', 'swot', 'wots'],\n 'stowable': ['bestowal', 'stowable'],\n 'stower': ['restow', 'stower', 'towser', 'worset'],\n 'stra': ['sart', 'star', 'stra', 'tars', 'tsar'],\n 'strad': ['darst', 'darts', 'strad'],\n 'stradine': ['stradine', 'strained', 'tarnside'],\n 'strae': ['aster', 'serta', 'stare', 'strae', 'tarse', 'teras'],\n 'strafe': ['farset', 'faster', 'strafe'],\n 'stragular': ['gastrular', 'stragular'],\n 'straighten': ['shattering', 'straighten'],\n 'straightener': ['restraighten', 'straightener'],\n 'straightup': ['straightup', 'upstraight'],\n 'straik': ['rastik', 'sarkit', 'straik'],\n 'strain': ['instar', 'santir', 'strain'],\n 'strained': ['stradine', 'strained', 'tarnside'],\n 'strainer': ['restrain', 'strainer', 'transire'],\n 'strainerman': ['strainerman', 'transmarine'],\n 'straint': ['straint', 'transit', 'tristan'],\n 'strait': ['artist', 'strait', 'strati'],\n 'strake': ['skater', 'staker', 'strake', 'streak', 'tasker'],\n 'straky': ['starky', 'straky'],\n 'stram': ['smart', 'stram'],\n 'strange': ['angster', 'garnets', 'nagster', 'strange'],\n 'strangles': ['slangster', 'strangles'],\n 'strap': ['spart', 'sprat', 'strap', 'traps'],\n 'strapless': ['psaltress', 'strapless'],\n 'strata': ['astart', 'strata'],\n 'strategi': ['strategi', 'strigate'],\n 'strath': ['strath', 'thrast'],\n 'strati': ['artist', 'strait', 'strati'],\n 'stratic': ['astrict', 'cartist', 'stratic'],\n 'stratonic': ['narcotist', 'stratonic'],\n 'stratonical': ['intracostal', 'stratonical'],\n 'strave': ['starve', 'staver', 'strave', 'tavers', 'versta'],\n 'straw': ['straw', 'swart', 'warst'],\n 'strawy': ['strawy', 'swarty'],\n 'stray': ['satyr', 'stary', 'stray', 'trasy'],\n 'strayling': ['staringly', 'strayling'],\n 'stre': ['rest', 'sert', 'stre'],\n 'streak': ['skater', 'staker', 'strake', 'streak', 'tasker'],\n 'streakily': ['satyrlike', 'streakily'],\n 'stream': ['martes', 'master', 'remast', 'stream'],\n 'streamer': ['masterer', 'restream', 'streamer'],\n 'streamful': ['masterful', 'streamful'],\n 'streamhead': ['headmaster', 'headstream', 'streamhead'],\n 'streaming': ['germanist', 'streaming'],\n 'streamless': ['masterless', 'streamless'],\n 'streamlike': ['masterlike', 'streamlike'],\n 'streamline': ['eternalism', 'streamline'],\n 'streamling': ['masterling', 'streamling'],\n 'streamside': ['mediatress', 'streamside'],\n 'streamwort': ['masterwort', 'streamwort'],\n 'streamy': ['mastery', 'streamy'],\n 'stree': ['ester',\n           'estre',\n           'reest',\n           'reset',\n           'steer',\n           'stere',\n           'stree',\n           'terse',\n           'tsere'],\n 'streek': ['streek', 'streke'],\n 'streel': ['lester', 'selter', 'streel'],\n 'streen': ['ernest', 'nester', 'resent', 'streen'],\n 'streep': ['pester', 'preset', 'restep', 'streep'],\n 'street': ['retest', 'setter', 'street', 'tester'],\n 'streetcar': ['scatterer', 'streetcar'],\n 'streke': ['streek', 'streke'],\n 'strelitz': ['strelitz', 'streltzi'],\n 'streltzi': ['strelitz', 'streltzi'],\n 'stremma': ['stammer', 'stremma'],\n 'strengthener': ['restrengthen', 'strengthener'],\n 'strepen': ['penster', 'present', 'serpent', 'strepen'],\n 'strepera': ['pasterer', 'strepera'],\n 'strepor': ['sporter', 'strepor'],\n 'strepsinema': ['esperantism', 'strepsinema'],\n 'streptothricosis': ['streptothricosis', 'streptotrichosis'],\n 'streptotrichosis': ['streptothricosis', 'streptotrichosis'],\n 'stresser': ['restress', 'stresser'],\n 'stret': ['stert', 'stret', 'trest'],\n 'stretcher': ['restretch', 'stretcher'],\n 'stretcherman': ['stretcherman', 'trenchmaster'],\n 'stretto': ['stotter', 'stretto'],\n 'strew': ['strew', 'trews', 'wrest'],\n 'strewer': ['strewer', 'wrester'],\n 'strey': ['resty', 'strey'],\n 'streyne': ['streyne', 'styrene', 'yestern'],\n 'stria': ['arist',\n           'astir',\n           'sitar',\n           'stair',\n           'stria',\n           'tarsi',\n           'tisar',\n           'trias'],\n 'striae': ['satire', 'striae'],\n 'strial': ['latris', 'strial'],\n 'striatal': ['altarist', 'striatal'],\n 'striate': ['artiste', 'striate'],\n 'striated': ['distater', 'striated'],\n 'strich': ['christ', 'strich'],\n 'strickle': ['stickler', 'strickle'],\n 'stride': ['driest', 'stride'],\n 'strife': ['fister', 'resift', 'sifter', 'strife'],\n 'strig': ['grist', 'grits', 'strig'],\n 'striga': ['gratis', 'striga'],\n 'strigae': ['seagirt', 'strigae'],\n 'strigate': ['strategi', 'strigate'],\n 'striges': ['striges', 'tigress'],\n 'strigulose': ['sortilegus', 'strigulose'],\n 'strike': ['skiter', 'strike'],\n 'striker': ['skirret', 'skirter', 'striker'],\n 'striking': ['skirting', 'striking'],\n 'strikingly': ['skirtingly', 'strikingly'],\n 'stringer': ['restring', 'ringster', 'stringer'],\n 'strinkle': ['sklinter', 'strinkle'],\n 'striola': ['aristol', 'oralist', 'ortalis', 'striola'],\n 'striolae': ['soterial', 'striolae'],\n 'strip': ['spirt', 'sprit', 'stirp', 'strip'],\n 'stripe': ['priest', 'pteris', 'sprite', 'stripe'],\n 'stripeless': ['priestless', 'stripeless'],\n 'striper': ['restrip', 'striper'],\n 'striplet': ['splitter', 'striplet'],\n 'strippit': ['strippit', 'trippist'],\n 'strit': ['strit', 'trist'],\n 'strive': ['stiver', 'strive', 'verist'],\n 'stroam': ['stroam', 'stroma'],\n 'strobila': ['laborist', 'strobila'],\n 'strobilae': ['sobralite', 'strobilae'],\n 'strobilate': ['brasiletto', 'strobilate'],\n 'strode': ['sorted', 'strode'],\n 'stroke': ['stoker', 'stroke'],\n 'strom': ['storm', 'strom'],\n 'stroma': ['stroam', 'stroma'],\n 'stromatic': ['microstat', 'stromatic'],\n 'strone': ['nestor', 'sterno', 'stoner', 'strone', 'tensor'],\n 'stronghead': ['headstrong', 'stronghead'],\n 'strontian': ['strontian', 'trisonant'],\n 'strontianite': ['interstation', 'strontianite'],\n 'strop': ['sport', 'strop'],\n 'strophaic': ['actorship', 'strophaic'],\n 'strophiolate': ['strophiolate', 'theatropolis'],\n 'strophomena': ['nephrostoma', 'strophomena'],\n 'strounge': ['strounge', 'sturgeon'],\n 'stroup': ['sprout', 'stroup', 'stupor'],\n 'strove': ['stover', 'strove'],\n 'strow': ['strow', 'worst'],\n 'stroy': ['sorty', 'story', 'stroy'],\n 'strub': ['burst', 'strub'],\n 'struck': ['struck', 'trucks'],\n 'strue': ['serut', 'strue', 'turse', 'uster'],\n 'strumae': ['staumer', 'strumae'],\n 'strut': ['strut', 'sturt', 'trust'],\n 'struth': ['struth', 'thrust'],\n 'struthian': ['struthian', 'unathirst'],\n 'stu': ['stu', 'ust'],\n 'stuart': ['astrut', 'rattus', 'stuart'],\n 'stub': ['bust', 'stub'],\n 'stuber': ['berust', 'buster', 'stuber'],\n 'stud': ['dust', 'stud'],\n 'studdie': ['studdie', 'studied'],\n 'student': ['student', 'stunted'],\n 'studia': ['aditus', 'studia'],\n 'studied': ['studdie', 'studied'],\n 'study': ['dusty', 'study'],\n 'stue': ['stue', 'suet'],\n 'stuffer': ['restuff', 'stuffer'],\n 'stug': ['gust', 'stug'],\n 'stuiver': ['revuist', 'stuiver'],\n 'stum': ['must', 'smut', 'stum'],\n 'stumer': ['muster', 'sertum', 'stumer'],\n 'stumper': ['stumper', 'sumpter'],\n 'stun': ['stun', 'sunt', 'tsun'],\n 'stunner': ['stunner', 'unstern'],\n 'stunted': ['student', 'stunted'],\n 'stunter': ['entrust', 'stunter', 'trusten'],\n 'stupa': ['sputa', 'staup', 'stupa'],\n 'stupe': ['setup', 'stupe', 'upset'],\n 'stupor': ['sprout', 'stroup', 'stupor'],\n 'stuprate': ['stuprate', 'upstater'],\n 'stupulose': ['pustulose', 'stupulose'],\n 'sturdiness': ['sturdiness', 'undistress'],\n 'sturgeon': ['strounge', 'sturgeon'],\n 'sturine': ['intruse', 'sturine'],\n 'sturionine': ['reunionist', 'sturionine'],\n 'sturmian': ['naturism', 'sturmian', 'turanism'],\n 'sturnidae': ['disnature', 'sturnidae', 'truandise'],\n 'sturninae': ['neustrian', 'saturnine', 'sturninae'],\n 'sturnus': ['sturnus', 'untruss'],\n 'sturt': ['strut', 'sturt', 'trust'],\n 'sturtin': ['intrust', 'sturtin'],\n 'stut': ['stut', 'tuts'],\n 'stutter': ['stutter', 'tutster'],\n 'styan': ['nasty', 'styan', 'tansy'],\n 'styca': ['stacy', 'styca'],\n 'stycerin': ['nycteris', 'stycerin'],\n 'stygial': ['stagily', 'stygial'],\n 'stylate': ['stately', 'stylate'],\n 'styledom': ['modestly', 'styledom'],\n 'stylite': ['stylite', 'testily'],\n 'styloid': ['odylist', 'styloid'],\n 'stylometer': ['metrostyle', 'stylometer'],\n 'stylopidae': ['ideoplasty', 'stylopidae'],\n 'styphelia': ['physalite', 'styphelia'],\n 'styrene': ['streyne', 'styrene', 'yestern'],\n 'styrol': ['sortly', 'styrol'],\n 'stythe': ['stythe', 'tethys'],\n 'styx': ['styx', 'xyst'],\n 'suability': ['suability', 'usability'],\n 'suable': ['suable', 'usable'],\n 'sualocin': ['sualocin', 'unsocial'],\n 'suant': ['staun', 'suant'],\n 'suasible': ['basileus', 'issuable', 'suasible'],\n 'suasion': ['sanious', 'suasion'],\n 'suasory': ['ossuary', 'suasory'],\n 'suave': ['sauve', 'suave'],\n 'sub': ['bus', 'sub'],\n 'subah': ['shuba', 'subah'],\n 'subalpine': ['subalpine', 'unspiable'],\n 'subanal': ['balanus', 'nabalus', 'subanal'],\n 'subcaecal': ['accusable', 'subcaecal'],\n 'subcantor': ['obscurant', 'subcantor'],\n 'subcapsular': ['subcapsular', 'subscapular'],\n 'subcenter': ['rubescent', 'subcenter'],\n 'subchela': ['chasuble', 'subchela'],\n 'subcool': ['colobus', 'subcool'],\n 'subcortical': ['scorbutical', 'subcortical'],\n 'subcortically': ['scorbutically', 'subcortically'],\n 'subdealer': ['subdealer', 'subleader'],\n 'subdean': ['subdean', 'unbased'],\n 'subdeltaic': ['discutable', 'subdeltaic', 'subdialect'],\n 'subdialect': ['discutable', 'subdeltaic', 'subdialect'],\n 'subdie': ['busied', 'subdie'],\n 'suber': ['burse', 'rebus', 'suber'],\n 'subessential': ['subessential', 'suitableness'],\n 'subherd': ['brushed', 'subherd'],\n 'subhero': ['herbous', 'subhero'],\n 'subhuman': ['subhuman', 'unambush'],\n 'subimago': ['bigamous', 'subimago'],\n 'sublanate': ['sublanate', 'unsatable'],\n 'sublate': ['balteus', 'sublate'],\n 'sublative': ['sublative', 'vestibula'],\n 'subleader': ['subdealer', 'subleader'],\n 'sublet': ['bustle', 'sublet', 'subtle'],\n 'sublinear': ['insurable', 'sublinear'],\n 'sublumbar': ['sublumbar', 'subumbral'],\n 'submaid': ['misdaub', 'submaid'],\n 'subman': ['busman', 'subman'],\n 'submarine': ['semiurban', 'submarine'],\n 'subnarcotic': ['obscurantic', 'subnarcotic'],\n 'subnitrate': ['subnitrate', 'subtertian'],\n 'subnote': ['subnote', 'subtone', 'unbesot'],\n 'suboval': ['suboval', 'subvola'],\n 'subpeltate': ['subpeltate', 'upsettable'],\n 'subplat': ['subplat', 'upblast'],\n 'subra': ['abrus', 'bursa', 'subra'],\n 'subscapular': ['subcapsular', 'subscapular'],\n 'subserve': ['subserve', 'subverse'],\n 'subsider': ['disburse', 'subsider'],\n 'substernal': ['substernal', 'turbanless'],\n 'substraction': ['obscurantist', 'substraction'],\n 'subtack': ['sackbut', 'subtack'],\n 'subterraneal': ['subterraneal', 'unarrestable'],\n 'subtertian': ['subnitrate', 'subtertian'],\n 'subtle': ['bustle', 'sublet', 'subtle'],\n 'subtone': ['subnote', 'subtone', 'unbesot'],\n 'subtread': ['daubster', 'subtread'],\n 'subtutor': ['outburst', 'subtutor'],\n 'subulate': ['baetulus', 'subulate'],\n 'subumbral': ['sublumbar', 'subumbral'],\n 'subverse': ['subserve', 'subverse'],\n 'subvola': ['suboval', 'subvola'],\n 'succade': ['accused', 'succade'],\n 'succeeder': ['resucceed', 'succeeder'],\n 'succin': ['cnicus', 'succin'],\n 'succinate': ['encaustic', 'succinate'],\n 'succor': ['crocus', 'succor'],\n 'such': ['cush', 'such'],\n 'suck': ['cusk', 'suck'],\n 'sucker': ['resuck', 'sucker'],\n 'suckling': ['lungsick', 'suckling'],\n 'suclat': ['scutal', 'suclat'],\n 'sucramine': ['muscarine', 'sucramine'],\n 'sucre': ['cruse', 'curse', 'sucre'],\n 'suction': ['cotinus', 'suction', 'unstoic'],\n 'suctional': ['suctional', 'sulcation', 'unstoical'],\n 'suctoria': ['cotarius', 'octarius', 'suctoria'],\n 'suctorial': ['ocularist', 'suctorial'],\n 'sud': ['sud', 'uds'],\n 'sudamen': ['medusan', 'sudamen'],\n 'sudan': ['sudan', 'unsad'],\n 'sudanese': ['danseuse', 'sudanese'],\n 'sudani': ['sudani', 'unsaid'],\n 'sudation': ['adustion', 'sudation'],\n 'sudic': ['scudi', 'sudic'],\n 'sudra': ['rudas', 'sudra'],\n 'sue': ['sue', 'use'],\n 'suer': ['ruse', 'suer', 'sure', 'user'],\n 'suet': ['stue', 'suet'],\n 'sufferer': ['resuffer', 'sufferer'],\n 'sufflate': ['feastful', 'sufflate'],\n 'suffocate': ['offuscate', 'suffocate'],\n 'suffocation': ['offuscation', 'suffocation'],\n 'sugamo': ['amusgo', 'sugamo'],\n 'sugan': ['agnus', 'angus', 'sugan'],\n 'sugar': ['argus', 'sugar'],\n 'sugared': ['desugar', 'sugared'],\n 'sugarlike': ['arguslike', 'sugarlike'],\n 'suggester': ['resuggest', 'suggester'],\n 'suggestionism': ['missuggestion', 'suggestionism'],\n 'sugh': ['gush', 'shug', 'sugh'],\n 'suidae': ['asideu', 'suidae'],\n 'suimate': ['metusia', 'suimate', 'timaeus'],\n 'suina': ['ianus', 'suina'],\n 'suint': ['sintu', 'suint'],\n 'suiones': ['sinuose', 'suiones'],\n 'suist': ['situs', 'suist'],\n 'suitable': ['sabulite', 'suitable'],\n 'suitableness': ['subessential', 'suitableness'],\n 'suitor': ['suitor', 'tursio'],\n 'sula': ['saul', 'sula'],\n 'sulcal': ['callus', 'sulcal'],\n 'sulcar': ['cursal', 'sulcar'],\n 'sulcation': ['suctional', 'sulcation', 'unstoical'],\n 'suld': ['slud', 'suld'],\n 'sulfamide': ['feudalism', 'sulfamide'],\n 'sulfonium': ['fulminous', 'sulfonium'],\n 'sulfuret': ['frustule', 'sulfuret'],\n 'sulk': ['lusk', 'sulk'],\n 'sulka': ['klaus', 'lukas', 'sulka'],\n 'sulky': ['lusky', 'sulky'],\n 'sulphinide': ['delphinius', 'sulphinide'],\n 'sulphohydrate': ['hydrosulphate', 'sulphohydrate'],\n 'sulphoproteid': ['protosulphide', 'sulphoproteid'],\n 'sulphurea': ['elaphurus', 'sulphurea'],\n 'sultan': ['sultan', 'unsalt'],\n 'sultane': ['sultane', 'unslate'],\n 'sultanian': ['annualist', 'sultanian'],\n 'sultanin': ['insulant', 'sultanin'],\n 'sultone': ['lentous', 'sultone'],\n 'sultry': ['rustly', 'sultry'],\n 'sum': ['mus', 'sum'],\n 'sumac': ['camus', 'musca', 'scaum', 'sumac'],\n 'sumak': ['kusam', 'sumak'],\n 'sumatra': ['artamus', 'sumatra'],\n 'sumerian': ['aneurism', 'arsenium', 'sumerian'],\n 'sumitro': ['sumitro', 'tourism'],\n 'summit': ['mutism', 'summit'],\n 'summonable': ['somnambule', 'summonable'],\n 'summoner': ['resummon', 'summoner'],\n 'sumo': ['soum', 'sumo'],\n 'sumpit': ['misput', 'sumpit'],\n 'sumpitan': ['putanism', 'sumpitan'],\n 'sumpter': ['stumper', 'sumpter'],\n 'sumptuary': ['sputumary', 'sumptuary'],\n 'sumptuous': ['sputumous', 'sumptuous'],\n 'sunbeamed': ['sunbeamed', 'unembased'],\n 'sundar': ['nardus', 'sundar', 'sundra'],\n 'sundek': ['dusken', 'sundek'],\n 'sundra': ['nardus', 'sundar', 'sundra'],\n 'sung': ['snug', 'sung'],\n 'sunil': ['linus', 'sunil'],\n 'sunk': ['skun', 'sunk'],\n 'sunlighted': ['sunlighted', 'unslighted'],\n 'sunlit': ['insult', 'sunlit', 'unlist', 'unslit'],\n 'sunni': ['sunni', 'unsin'],\n 'sunray': ['sunray', 'surnay', 'synura'],\n 'sunrise': ['russine', 'serinus', 'sunrise'],\n 'sunshade': ['sunshade', 'unsashed'],\n 'sunt': ['stun', 'sunt', 'tsun'],\n 'sunup': ['sunup', 'upsun'],\n 'sunweed': ['sunweed', 'unsewed'],\n 'suomic': ['musico', 'suomic'],\n 'sup': ['pus', 'sup'],\n 'supa': ['apus', 'supa', 'upas'],\n 'super': ['purse', 'resup', 'sprue', 'super'],\n 'superable': ['perusable', 'superable'],\n 'supercarpal': ['prescapular', 'supercarpal'],\n 'superclaim': ['premusical', 'superclaim'],\n 'supercontrol': ['preconsultor', 'supercontrol'],\n 'supercool': ['escropulo', 'supercool'],\n 'superheater': ['resuperheat', 'superheater'],\n 'superideal': ['serpulidae', 'superideal'],\n 'superintender': ['superintender', 'unenterprised'],\n 'superline': ['serpuline', 'superline'],\n 'supermoisten': ['sempiternous', 'supermoisten'],\n 'supernacular': ['supernacular', 'supranuclear'],\n 'supernal': ['purslane', 'serpulan', 'supernal'],\n 'superoanterior': ['anterosuperior', 'superoanterior'],\n 'superoposterior': ['posterosuperior', 'superoposterior'],\n 'superpose': ['resuppose', 'superpose'],\n 'superposition': ['resupposition', 'superposition'],\n 'supersaint': ['presustain', 'puritaness', 'supersaint'],\n 'supersalt': ['pertussal', 'supersalt'],\n 'superservice': ['repercussive', 'superservice'],\n 'supersonic': ['croupiness', 'percussion', 'supersonic'],\n 'supertare': ['repasture', 'supertare'],\n 'supertension': ['serpentinous', 'supertension'],\n 'supertotal': ['supertotal', 'tetraplous'],\n 'supertrain': ['rupestrian', 'supertrain'],\n 'supinator': ['rainspout', 'supinator'],\n 'supine': ['puisne', 'supine'],\n 'supper': ['supper', 'uppers'],\n 'supple': ['peplus', 'supple'],\n 'suppletory': ['polypterus', 'suppletory'],\n 'supplier': ['periplus', 'supplier'],\n 'supporter': ['resupport', 'supporter'],\n 'suppresser': ['resuppress', 'suppresser'],\n 'suprahyoid': ['hyporadius', 'suprahyoid'],\n 'supranuclear': ['supernacular', 'supranuclear'],\n 'supreme': ['presume', 'supreme'],\n 'sur': ['rus', 'sur', 'urs'],\n 'sura': ['rusa', 'saur', 'sura', 'ursa', 'usar'],\n 'surah': ['ashur', 'surah'],\n 'surahi': ['shauri', 'surahi'],\n 'sural': ['larus', 'sural', 'ursal'],\n 'surat': ['astur', 'surat', 'sutra'],\n 'surbase': ['rubasse', 'surbase'],\n 'surbate': ['bursate', 'surbate'],\n 'surcrue': ['crureus', 'surcrue'],\n 'sure': ['ruse', 'suer', 'sure', 'user'],\n 'suresh': ['rhesus', 'suresh'],\n 'surette': ['surette', 'trustee'],\n 'surge': ['grues', 'surge'],\n 'surgent': ['gunster', 'surgent'],\n 'surgeonship': ['springhouse', 'surgeonship'],\n 'surgy': ['gyrus', 'surgy'],\n 'suriana': ['saurian', 'suriana'],\n 'surinam': ['surinam', 'uranism'],\n 'surma': ['musar', 'ramus', 'rusma', 'surma'],\n 'surmisant': ['saturnism', 'surmisant'],\n 'surmise': ['misuser', 'surmise'],\n 'surnap': ['surnap', 'unspar'],\n 'surnay': ['sunray', 'surnay', 'synura'],\n 'surprisement': ['surprisement', 'trumperiness'],\n 'surrenderer': ['resurrender', 'surrenderer'],\n 'surrogate': ['surrogate', 'urogaster'],\n 'surrounder': ['resurround', 'surrounder'],\n 'surya': ['saury', 'surya'],\n 'sus': ['ssu', 'sus'],\n 'susan': ['nasus', 'susan'],\n 'suscept': ['suscept', 'suspect'],\n 'susceptible': ['susceptible', 'suspectible'],\n 'susceptor': ['spectrous', 'susceptor', 'suspector'],\n 'susie': ['issue', 'susie'],\n 'suspect': ['suscept', 'suspect'],\n 'suspecter': ['resuspect', 'suspecter'],\n 'suspectible': ['susceptible', 'suspectible'],\n 'suspector': ['spectrous', 'susceptor', 'suspector'],\n 'suspender': ['resuspend', 'suspender', 'unpressed'],\n 'sustain': ['issuant', 'sustain'],\n 'suther': ['reshut', 'suther', 'thurse', 'tusher'],\n 'sutler': ['luster', 'result', 'rustle', 'sutler', 'ulster'],\n 'suto': ['otus', 'oust', 'suto'],\n 'sutor': ['roust', 'rusot', 'stour', 'sutor', 'torus'],\n 'sutorian': ['staurion', 'sutorian'],\n 'sutorious': ['sutorious', 'ustorious'],\n 'sutra': ['astur', 'surat', 'sutra'],\n 'suttin': ['suttin', 'tunist'],\n 'suture': ['suture', 'uterus'],\n 'svante': ['stevan', 'svante'],\n 'svelte': ['stevel', 'svelte'],\n 'swa': ['saw', 'swa', 'was'],\n 'swage': ['swage', 'wages'],\n 'swain': ['siwan', 'swain'],\n 'swale': ['swale', 'sweal', 'wasel'],\n 'swaler': ['swaler', 'warsel', 'warsle'],\n 'swallet': ['setwall', 'swallet'],\n 'swallo': ['sallow', 'swallo'],\n 'swallower': ['reswallow', 'swallower'],\n 'swami': ['aswim', 'swami'],\n 'swan': ['sawn', 'snaw', 'swan'],\n 'swap': ['swap', 'wasp'],\n 'swarbie': ['barwise', 'swarbie'],\n 'sware': ['resaw', 'sawer', 'seraw', 'sware', 'swear', 'warse'],\n 'swarmer': ['reswarm', 'swarmer'],\n 'swart': ['straw', 'swart', 'warst'],\n 'swarty': ['strawy', 'swarty'],\n 'swarve': ['swarve', 'swaver'],\n 'swat': ['sawt', 'staw', 'swat', 'taws', 'twas', 'wast'],\n 'swath': ['swath', 'whats'],\n 'swathe': ['swathe', 'sweath'],\n 'swati': ['swati', 'waist'],\n 'swatter': ['stewart', 'swatter'],\n 'swaver': ['swarve', 'swaver'],\n 'sway': ['sway', 'ways', 'yaws'],\n 'swayer': ['sawyer', 'swayer'],\n 'sweal': ['swale', 'sweal', 'wasel'],\n 'swear': ['resaw', 'sawer', 'seraw', 'sware', 'swear', 'warse'],\n 'swearer': ['resawer', 'reswear', 'swearer'],\n 'sweat': ['awest', 'sweat', 'tawse', 'waste'],\n 'sweater': ['resweat', 'sweater'],\n 'sweatful': ['sweatful', 'wasteful'],\n 'sweath': ['swathe', 'sweath'],\n 'sweatily': ['sweatily', 'tileways'],\n 'sweatless': ['sweatless', 'wasteless'],\n 'sweatproof': ['sweatproof', 'wasteproof'],\n 'swede': ['sewed', 'swede'],\n 'sweep': ['sweep', 'weeps'],\n 'sweeper': ['resweep', 'sweeper'],\n 'sweer': ['resew', 'sewer', 'sweer'],\n 'sweered': ['sewered', 'sweered'],\n 'sweet': ['sweet', 'weste'],\n 'sweetbread': ['breastweed', 'sweetbread'],\n 'sweller': ['reswell', 'sweller'],\n 'swelter': ['swelter', 'wrestle'],\n 'swep': ['spew', 'swep'],\n 'swertia': ['swertia', 'waister'],\n 'swile': ['lewis', 'swile'],\n 'swiller': ['reswill', 'swiller'],\n 'swindle': ['swindle', 'windles'],\n 'swine': ['sinew', 'swine', 'wisen'],\n 'swinestone': ['sonnetwise', 'swinestone'],\n 'swiney': ['sinewy', 'swiney'],\n 'swingback': ['backswing', 'swingback'],\n 'swinge': ['sewing', 'swinge'],\n 'swingle': ['slewing', 'swingle'],\n 'swingtree': ['swingtree', 'westering'],\n 'swipy': ['swipy', 'wispy'],\n 'swire': ['swire', 'wiser'],\n 'swith': ['swith', 'whist', 'whits', 'wisht'],\n 'swithe': ['swithe', 'whites'],\n 'swither': ['swither', 'whister', 'withers'],\n 'swoon': ['swoon', 'woons'],\n 'swordman': ['sandworm', 'swordman', 'wordsman'],\n 'swordmanship': ['swordmanship', 'wordsmanship'],\n 'swore': ['owser', 'resow', 'serow', 'sower', 'swore', 'worse'],\n 'swot': ['sowt', 'stow', 'swot', 'wots'],\n 'sybarite': ['bestiary', 'sybarite'],\n 'sybil': ['sibyl', 'sybil'],\n 'syce': ['scye', 'syce'],\n 'sycones': ['coyness', 'sycones'],\n 'syconoid': ['syconoid', 'syodicon'],\n 'sye': ['sey', 'sye', 'yes'],\n 'syenitic': ['cytisine', 'syenitic'],\n 'syllabi': ['sibylla', 'syllabi'],\n 'syllable': ['sellably', 'syllable'],\n 'sylva': ['salvy', 'sylva'],\n 'sylvae': ['slavey', 'sylvae'],\n 'sylvine': ['snively', 'sylvine'],\n 'sylvite': ['levyist', 'sylvite'],\n 'symbol': ['blosmy', 'symbol'],\n 'symmetric': ['mycterism', 'symmetric'],\n 'sympathy': ['sympathy', 'symphyta'],\n 'symphonic': ['cyphonism', 'symphonic'],\n 'symphyta': ['sympathy', 'symphyta'],\n 'symposion': ['spoonyism', 'symposion'],\n 'synapse': ['synapse', 'yapness'],\n 'synaptera': ['peasantry', 'synaptera'],\n 'syncopator': ['antroscopy', 'syncopator'],\n 'syndicate': ['asyndetic', 'cystidean', 'syndicate'],\n 'synedral': ['lysander', 'synedral'],\n 'syngamic': ['gymnasic', 'syngamic'],\n 'syngenic': ['ensigncy', 'syngenic'],\n 'synura': ['sunray', 'surnay', 'synura'],\n 'syodicon': ['syconoid', 'syodicon'],\n 'sypher': ['sphery', 'sypher'],\n 'syphiloid': ['hypsiloid', 'syphiloid'],\n 'syrian': ['siryan', 'syrian'],\n 'syringa': ['signary', 'syringa'],\n 'syringeful': ['refusingly', 'syringeful'],\n 'syrup': ['pursy', 'pyrus', 'syrup'],\n 'system': ['mystes', 'system'],\n 'systole': ['systole', 'toyless'],\n 'ta': ['at', 'ta'],\n 'taa': ['ata', 'taa'],\n 'taal': ['lata', 'taal', 'tala'],\n 'taar': ['rata', 'taar', 'tara'],\n 'tab': ['bat', 'tab'],\n 'tabanus': ['sabanut', 'sabutan', 'tabanus'],\n 'tabaret': ['baretta', 'rabatte', 'tabaret'],\n 'tabber': ['barbet', 'rabbet', 'tabber'],\n 'tabella': ['ballate', 'tabella'],\n 'tabes': ['baste', 'beast', 'tabes'],\n 'tabet': ['betta', 'tabet'],\n 'tabinet': ['bettina', 'tabinet', 'tibetan'],\n 'tabira': ['arabit', 'tabira'],\n 'tabitha': ['habitat', 'tabitha'],\n 'tabitude': ['dubitate', 'tabitude'],\n 'table': ['batel', 'blate', 'bleat', 'table'],\n 'tabled': ['dablet', 'tabled'],\n 'tablemaker': ['marketable', 'tablemaker'],\n 'tabler': ['albert', 'balter', 'labret', 'tabler'],\n 'tables': ['ablest', 'stable', 'tables'],\n 'tablet': ['battel', 'battle', 'tablet'],\n 'tabletary': ['tabletary', 'treatably'],\n 'tabling': ['batling', 'tabling'],\n 'tabophobia': ['batophobia', 'tabophobia'],\n 'tabor': ['abort', 'tabor'],\n 'taborer': ['arboret', 'roberta', 'taborer'],\n 'taboret': ['abettor', 'taboret'],\n 'taborin': ['abortin', 'taborin'],\n 'tabour': ['outbar', 'rubato', 'tabour'],\n 'tabouret': ['obturate', 'tabouret'],\n 'tabret': ['batter', 'bertat', 'tabret', 'tarbet'],\n 'tabu': ['abut', 'tabu', 'tuba'],\n 'tabula': ['ablaut', 'tabula'],\n 'tabulare': ['bataleur', 'tabulare'],\n 'tabule': ['batule', 'betula', 'tabule'],\n 'taccaceae': ['cactaceae', 'taccaceae'],\n 'taccaceous': ['cactaceous', 'taccaceous'],\n 'tach': ['chat', 'tach'],\n 'tache': ['cheat', 'tache', 'teach', 'theca'],\n 'tacheless': ['tacheless', 'teachless'],\n 'tachina': ['ithacan', 'tachina'],\n 'tachinidae': ['anthicidae', 'tachinidae'],\n 'tachograph': ['cathograph', 'tachograph'],\n 'tacit': ['attic', 'catti', 'tacit'],\n 'tacitly': ['cattily', 'tacitly'],\n 'tacitness': ['cattiness', 'tacitness'],\n 'taciturn': ['taciturn', 'urticant'],\n 'tacker': ['racket', 'retack', 'tacker'],\n 'tacksman': ['stackman', 'tacksman'],\n 'taconian': ['catonian', 'taconian'],\n 'taconic': ['cantico', 'catonic', 'taconic'],\n 'tacso': ['ascot', 'coast', 'costa', 'tacso', 'tasco'],\n 'tacsonia': ['acontias', 'tacsonia'],\n 'tactile': ['lattice', 'tactile'],\n 'tade': ['adet', 'date', 'tade', 'tead', 'teda'],\n 'tadpole': ['platode', 'tadpole'],\n 'tae': ['ate', 'eat', 'eta', 'tae', 'tea'],\n 'tael': ['atle', 'laet', 'late', 'leat', 'tael', 'tale', 'teal'],\n 'taen': ['ante', 'aten', 'etna', 'nate', 'neat', 'taen', 'tane', 'tean'],\n 'taenia': ['aetian', 'antiae', 'taenia'],\n 'taeniada': ['anatidae', 'taeniada'],\n 'taenial': ['laniate', 'natalie', 'taenial'],\n 'taenian': ['ananite', 'anatine', 'taenian'],\n 'taenicide': ['deciatine', 'diacetine', 'taenicide', 'teniacide'],\n 'taeniform': ['forminate', 'fremontia', 'taeniform'],\n 'taenioid': ['ideation', 'iodinate', 'taenioid'],\n 'taetsia': ['isatate', 'satiate', 'taetsia'],\n 'tag': ['gat', 'tag'],\n 'tagetes': ['gestate', 'tagetes'],\n 'tagetol': ['lagetto', 'tagetol'],\n 'tagged': ['gadget', 'tagged'],\n 'tagger': ['garget', 'tagger'],\n 'tagilite': ['litigate', 'tagilite'],\n 'tagish': ['ghaist', 'tagish'],\n 'taglike': ['glaiket', 'taglike'],\n 'tagrag': ['ragtag', 'tagrag'],\n 'tagsore': ['storage', 'tagsore'],\n 'taheen': ['ethane', 'taheen'],\n 'tahil': ['ihlat', 'tahil'],\n 'tahin': ['ahint', 'hiant', 'tahin'],\n 'tahr': ['hart', 'rath', 'tahr', 'thar', 'trah'],\n 'tahsil': ['latish', 'tahsil'],\n 'tahsin': ['snaith', 'tahsin'],\n 'tai': ['ait', 'ati', 'ita', 'tai'],\n 'taich': ['aitch', 'chait', 'chati', 'chita', 'taich', 'tchai'],\n 'taigle': ['aiglet', 'ligate', 'taigle', 'tailge'],\n 'tail': ['alit', 'tail', 'tali'],\n 'tailage': ['agalite', 'tailage', 'taliage'],\n 'tailboard': ['broadtail', 'tailboard'],\n 'tailed': ['detail', 'dietal', 'dilate', 'edital', 'tailed'],\n 'tailer': ['lirate', 'retail', 'retial', 'tailer'],\n 'tailet': ['latite', 'tailet', 'tailte', 'talite'],\n 'tailge': ['aiglet', 'ligate', 'taigle', 'tailge'],\n 'tailing': ['gitalin', 'tailing'],\n 'taille': ['taille', 'telial'],\n 'tailoring': ['gratiolin', 'largition', 'tailoring'],\n 'tailorman': ['antimoral', 'tailorman'],\n 'tailory': ['orality', 'tailory'],\n 'tailpin': ['pintail', 'tailpin'],\n 'tailsman': ['staminal', 'tailsman', 'talisman'],\n 'tailte': ['latite', 'tailet', 'tailte', 'talite'],\n 'taily': ['laity', 'taily'],\n 'taimen': ['etamin', 'inmate', 'taimen', 'tamein'],\n 'tain': ['aint', 'anti', 'tain', 'tina'],\n 'tainan': ['naiant', 'tainan'],\n 'taino': ['niota', 'taino'],\n 'taint': ['taint', 'tanti', 'tinta', 'titan'],\n 'tainture': ['tainture', 'unattire'],\n 'taipan': ['aptian', 'patina', 'taipan'],\n 'taipo': ['patio', 'taipo', 'topia'],\n 'tairge': ['gaiter', 'tairge', 'triage'],\n 'tairn': ['riant', 'tairn', 'tarin', 'train'],\n 'taise': ['saite', 'taise'],\n 'taistrel': ['starlite', 'taistrel'],\n 'taistril': ['taistril', 'trialist'],\n 'taivers': ['staiver', 'taivers'],\n 'taj': ['jat', 'taj'],\n 'tajik': ['jatki', 'tajik'],\n 'takar': ['katar', 'takar'],\n 'take': ['kate', 'keta', 'take', 'teak'],\n 'takedown': ['downtake', 'takedown'],\n 'taker': ['kerat', 'taker'],\n 'takin': ['kitan', 'takin'],\n 'takings': ['gitksan', 'skating', 'takings'],\n 'taky': ['katy', 'kyat', 'taky'],\n 'tal': ['alt', 'lat', 'tal'],\n 'tala': ['lata', 'taal', 'tala'],\n 'talapoin': ['palation', 'talapoin'],\n 'talar': ['altar', 'artal', 'ratal', 'talar'],\n 'talari': ['altair', 'atrail', 'atrial', 'lariat', 'latria', 'talari'],\n 'talc': ['clat', 'talc'],\n 'talcer': ['carlet', 'cartel', 'claret', 'rectal', 'talcer'],\n 'talcher': ['clethra', 'latcher', 'ratchel', 'relatch', 'talcher', 'trachle'],\n 'talcoid': ['cotidal', 'lactoid', 'talcoid'],\n 'talcose': ['alecost', 'lactose', 'scotale', 'talcose'],\n 'talcous': ['costula', 'locusta', 'talcous'],\n 'tald': ['dalt', 'tald'],\n 'tale': ['atle', 'laet', 'late', 'leat', 'tael', 'tale', 'teal'],\n 'taled': ['adlet', 'dealt', 'delta', 'lated', 'taled'],\n 'talent': ['latent', 'latten', 'nattle', 'talent', 'tantle'],\n 'taler': ['alert', 'alter', 'artel', 'later', 'ratel', 'taler', 'telar'],\n 'tales': ['least', 'setal', 'slate', 'stale', 'steal', 'stela', 'tales'],\n 'tali': ['alit', 'tail', 'tali'],\n 'taliage': ['agalite', 'tailage', 'taliage'],\n 'taligrade': ['taligrade', 'tragedial'],\n 'talinum': ['multani', 'talinum'],\n 'talion': ['italon', 'lation', 'talion'],\n 'taliped': ['plaited', 'taliped'],\n 'talipedic': ['talipedic', 'talpicide'],\n 'talipes': ['aliptes', 'pastile', 'talipes'],\n 'talipot': ['ptilota', 'talipot', 'toptail'],\n 'talis': ['alist', 'litas', 'slait', 'talis'],\n 'talisman': ['staminal', 'tailsman', 'talisman'],\n 'talite': ['latite', 'tailet', 'tailte', 'talite'],\n 'talker': ['kartel', 'retalk', 'talker'],\n 'tallage': ['gallate', 'tallage'],\n 'tallero': ['reallot', 'rotella', 'tallero'],\n 'talles': ['sallet', 'stella', 'talles'],\n 'talliage': ['allagite', 'alligate', 'talliage'],\n 'tallier': ['literal', 'tallier'],\n 'tallyho': ['loathly', 'tallyho'],\n 'talon': ['notal', 'ontal', 'talon', 'tolan', 'tonal'],\n 'taloned': ['taloned', 'toledan'],\n 'talonid': ['itoland', 'talonid', 'tindalo'],\n 'talose': ['lotase', 'osteal', 'solate', 'stolae', 'talose'],\n 'talpa': ['aptal', 'palta', 'talpa'],\n 'talpicide': ['talipedic', 'talpicide'],\n 'talpidae': ['lapidate', 'talpidae'],\n 'talpine': ['pantile', 'pentail', 'platine', 'talpine'],\n 'talpoid': ['platoid', 'talpoid'],\n 'taluche': ['auchlet', 'cutheal', 'taluche'],\n 'taluka': ['latuka', 'taluka'],\n 'talus': ['latus', 'sault', 'talus'],\n 'tam': ['amt', 'mat', 'tam'],\n 'tama': ['atma', 'tama'],\n 'tamale': ['malate', 'meatal', 'tamale'],\n 'tamanac': ['matacan', 'tamanac'],\n 'tamanaca': ['atacaman', 'tamanaca'],\n 'tamanoir': ['animator', 'tamanoir'],\n 'tamanu': ['anatum', 'mantua', 'tamanu'],\n 'tamara': ['armata', 'matara', 'tamara'],\n 'tamarao': ['tamarao', 'tamaroa'],\n 'tamarin': ['martian', 'tamarin'],\n 'tamaroa': ['tamarao', 'tamaroa'],\n 'tambor': ['tambor', 'tromba'],\n 'tamboura': ['marabout', 'marabuto', 'tamboura'],\n 'tambourer': ['arboretum', 'tambourer'],\n 'tambreet': ['ambrette', 'tambreet'],\n 'tamburan': ['rambutan', 'tamburan'],\n 'tame': ['mate', 'meat', 'meta', 'tame', 'team', 'tema'],\n 'tamein': ['etamin', 'inmate', 'taimen', 'tamein'],\n 'tameless': ['mateless', 'meatless', 'tameless', 'teamless'],\n 'tamelessness': ['matelessness', 'tamelessness'],\n 'tamely': ['mately', 'tamely'],\n 'tamer': ['armet',\n           'mater',\n           'merat',\n           'metra',\n           'ramet',\n           'tamer',\n           'terma',\n           'trame',\n           'trema'],\n 'tamise': ['samite', 'semita', 'tamise', 'teaism'],\n 'tampin': ['pitman', 'tampin', 'tipman'],\n 'tampion': ['maintop', 'ptomain', 'tampion', 'timpano'],\n 'tampioned': ['ademption', 'tampioned'],\n 'tampon': ['potman', 'tampon', 'topman'],\n 'tamul': ['lamut', 'tamul'],\n 'tamus': ['matsu', 'tamus', 'tsuma'],\n 'tan': ['ant', 'nat', 'tan'],\n 'tana': ['anat', 'anta', 'tana'],\n 'tanach': ['acanth', 'anchat', 'tanach'],\n 'tanager': ['argante', 'granate', 'tanager'],\n 'tanagridae': ['tanagridae', 'tangaridae'],\n 'tanagrine': ['argentina', 'tanagrine'],\n 'tanagroid': ['gradation', 'indagator', 'tanagroid'],\n 'tanak': ['kanat', 'tanak', 'tanka'],\n 'tanaka': ['nataka', 'tanaka'],\n 'tanala': ['atalan', 'tanala'],\n 'tanan': ['annat', 'tanan'],\n 'tanbur': ['tanbur', 'turban'],\n 'tancel': ['cantle', 'cental', 'lancet', 'tancel'],\n 'tanchoir': ['anorthic', 'anthroic', 'tanchoir'],\n 'tandemist': ['misattend', 'tandemist'],\n 'tandle': ['dental', 'tandle'],\n 'tandour': ['rotunda', 'tandour'],\n 'tane': ['ante', 'aten', 'etna', 'nate', 'neat', 'taen', 'tane', 'tean'],\n 'tang': ['gant', 'gnat', 'tang'],\n 'tanga': ['ganta', 'tanga'],\n 'tangaridae': ['tanagridae', 'tangaridae'],\n 'tangelo': ['angelot', 'tangelo'],\n 'tanger': ['argent', 'garnet', 'garten', 'tanger'],\n 'tangerine': ['argentine', 'tangerine'],\n 'tangfish': ['shafting', 'tangfish'],\n 'tangi': ['giant', 'tangi', 'tiang'],\n 'tangibile': ['bigential', 'tangibile'],\n 'tangible': ['bleating', 'tangible'],\n 'tangie': ['eating', 'ingate', 'tangie'],\n 'tangier': ['angrite', 'granite', 'ingrate', 'tangier', 'tearing', 'tigrean'],\n 'tangle': ['tangle', 'telang'],\n 'tangling': ['gnatling', 'tangling'],\n 'tango': ['tango', 'tonga'],\n 'tangs': ['angst', 'stang', 'tangs'],\n 'tangue': ['gunate', 'tangue'],\n 'tangum': ['tangum', 'tugman'],\n 'tangun': ['tangun', 'tungan'],\n 'tanh': ['hant', 'tanh', 'than'],\n 'tanha': ['atnah', 'tanha', 'thana'],\n 'tania': ['anita', 'niata', 'tania'],\n 'tanica': ['actian', 'natica', 'tanica'],\n 'tanier': ['nerita', 'ratine', 'retain', 'retina', 'tanier'],\n 'tanist': ['astint', 'tanist'],\n 'tanitic': ['tanitic', 'titanic'],\n 'tanka': ['kanat', 'tanak', 'tanka'],\n 'tankle': ['anklet', 'lanket', 'tankle'],\n 'tanling': ['antling', 'tanling'],\n 'tannaic': ['cantina', 'tannaic'],\n 'tannase': ['annates', 'tannase'],\n 'tannogallate': ['gallotannate', 'tannogallate'],\n 'tannogallic': ['gallotannic', 'tannogallic'],\n 'tannogen': ['nonagent', 'tannogen'],\n 'tanproof': ['antproof', 'tanproof'],\n 'tanquen': ['quannet', 'tanquen'],\n 'tanrec': ['canter',\n            'creant',\n            'cretan',\n            'nectar',\n            'recant',\n            'tanrec',\n            'trance'],\n 'tansy': ['nasty', 'styan', 'tansy'],\n 'tantalean': ['antenatal', 'atlantean', 'tantalean'],\n 'tantalic': ['atlantic', 'tantalic'],\n 'tantalite': ['atlantite', 'tantalite'],\n 'tantara': ['tantara', 'tartana'],\n 'tantarara': ['tantarara', 'tarantara'],\n 'tanti': ['taint', 'tanti', 'tinta', 'titan'],\n 'tantle': ['latent', 'latten', 'nattle', 'talent', 'tantle'],\n 'tantra': ['rattan', 'tantra', 'tartan'],\n 'tantrism': ['tantrism', 'transmit'],\n 'tantum': ['mutant', 'tantum', 'tutman'],\n 'tanzeb': ['batzen', 'bezant', 'tanzeb'],\n 'tao': ['oat', 'tao', 'toa'],\n 'taoistic': ['iotacist', 'taoistic'],\n 'taos': ['oast', 'stoa', 'taos'],\n 'tap': ['apt', 'pat', 'tap'],\n 'tapa': ['atap', 'pata', 'tapa'],\n 'tapalo': ['patola', 'tapalo'],\n 'tapas': ['patas', 'tapas'],\n 'tape': ['pate', 'peat', 'tape', 'teap'],\n 'tapeline': ['petaline', 'tapeline'],\n 'tapeman': ['peatman', 'tapeman'],\n 'tapen': ['enapt', 'paten', 'penta', 'tapen'],\n 'taper': ['apert', 'pater', 'peart', 'prate', 'taper', 'terap'],\n 'tapered': ['padtree', 'predate', 'tapered'],\n 'tapering': ['partigen', 'tapering'],\n 'taperly': ['apertly', 'peartly', 'platery', 'pteryla', 'taperly'],\n 'taperness': ['apertness', 'peartness', 'taperness'],\n 'tapestring': ['spattering', 'tapestring'],\n 'tapestry': ['tapestry', 'tryptase'],\n 'tapet': ['patte', 'tapet'],\n 'tapete': ['pattee', 'tapete'],\n 'taphouse': ['outshape', 'taphouse'],\n 'taphria': ['pitarah', 'taphria'],\n 'taphrina': ['parthian', 'taphrina'],\n 'tapir': ['atrip', 'tapir'],\n 'tapiro': ['portia', 'tapiro'],\n 'tapirus': ['tapirus', 'upstair'],\n 'tapis': ['piast', 'stipa', 'tapis'],\n 'taplash': ['asphalt', 'spathal', 'taplash'],\n 'tapmost': ['tapmost', 'topmast'],\n 'tapnet': ['patent', 'patten', 'tapnet'],\n 'tapoa': ['opata', 'patao', 'tapoa'],\n 'taposa': ['sapota', 'taposa'],\n 'taproom': ['protoma', 'taproom'],\n 'taproot': ['potator', 'taproot'],\n 'taps': ['past', 'spat', 'stap', 'taps'],\n 'tapster': ['spatter', 'tapster'],\n 'tapu': ['patu', 'paut', 'tapu'],\n 'tapuyo': ['outpay', 'tapuyo'],\n 'taqua': ['quata', 'taqua'],\n 'tar': ['art', 'rat', 'tar', 'tra'],\n 'tara': ['rata', 'taar', 'tara'],\n 'taraf': ['taraf', 'tarfa'],\n 'tarai': ['arati', 'atria', 'riata', 'tarai', 'tiara'],\n 'taranchi': ['taranchi', 'thracian'],\n 'tarantara': ['tantarara', 'tarantara'],\n 'tarapin': ['patarin', 'tarapin'],\n 'tarasc': ['castra', 'tarasc'],\n 'tarbet': ['batter', 'bertat', 'tabret', 'tarbet'],\n 'tardle': ['dartle', 'tardle'],\n 'tardy': ['tardy', 'trady'],\n 'tare': ['rate', 'tare', 'tear', 'tera'],\n 'tarente': ['entreat', 'ratteen', 'tarente', 'ternate', 'tetrane'],\n 'tarentine': ['entertain', 'tarentine', 'terentian'],\n 'tarfa': ['taraf', 'tarfa'],\n 'targe': ['gater', 'grate', 'great', 'greta', 'retag', 'targe'],\n 'targeman': ['grateman', 'mangrate', 'mentagra', 'targeman'],\n 'targer': ['garret', 'garter', 'grater', 'targer'],\n 'target': ['gatter', 'target'],\n 'targetman': ['targetman', 'termagant'],\n 'targum': ['artgum', 'targum'],\n 'tarheel': ['leather', 'tarheel'],\n 'tarheeler': ['leatherer', 'releather', 'tarheeler'],\n 'tari': ['airt', 'rita', 'tari', 'tiar'],\n 'tarie': ['arite', 'artie', 'irate', 'retia', 'tarie'],\n 'tarin': ['riant', 'tairn', 'tarin', 'train'],\n 'tarish': ['rashti', 'tarish'],\n 'tarletan': ['alterant', 'tarletan'],\n 'tarlike': ['artlike', 'ratlike', 'tarlike'],\n 'tarmac': ['mactra', 'tarmac'],\n 'tarman': ['mantra', 'tarman'],\n 'tarmi': ['mitra', 'tarmi', 'timar', 'tirma'],\n 'tarn': ['natr', 'rant', 'tarn', 'tran'],\n 'tarnal': ['antral', 'tarnal'],\n 'tarnish': ['tarnish', 'trishna'],\n 'tarnside': ['stradine', 'strained', 'tarnside'],\n 'taro': ['rota', 'taro', 'tora'],\n 'taroc': ['actor', 'corta', 'croat', 'rocta', 'taroc', 'troca'],\n 'tarocco': ['coactor', 'tarocco'],\n 'tarok': ['kotar', 'tarok'],\n 'tarot': ['ottar', 'tarot', 'torta', 'troat'],\n 'tarp': ['part', 'prat', 'rapt', 'tarp', 'trap'],\n 'tarpan': ['partan', 'tarpan'],\n 'tarpaulin': ['tarpaulin', 'unpartial'],\n 'tarpeian': ['patarine', 'tarpeian'],\n 'tarpon': ['patron', 'tarpon'],\n 'tarquin': ['quatrin', 'tarquin'],\n 'tarragon': ['arrogant', 'tarragon'],\n 'tarred': ['darter',\n            'dartre',\n            'redart',\n            'retard',\n            'retrad',\n            'tarred',\n            'trader'],\n 'tarrer': ['tarrer', 'terrar'],\n 'tarriance': ['antiracer', 'tarriance'],\n 'tarrie': ['arriet', 'tarrie'],\n 'tars': ['sart', 'star', 'stra', 'tars', 'tsar'],\n 'tarsal': ['astral', 'tarsal'],\n 'tarsale': ['alaster', 'tarsale'],\n 'tarsalgia': ['astragali', 'tarsalgia'],\n 'tarse': ['aster', 'serta', 'stare', 'strae', 'tarse', 'teras'],\n 'tarsi': ['arist',\n           'astir',\n           'sitar',\n           'stair',\n           'stria',\n           'tarsi',\n           'tisar',\n           'trias'],\n 'tarsia': ['arista', 'tarsia'],\n 'tarsier': ['astrier', 'tarsier'],\n 'tarsipes': ['piratess', 'serapist', 'tarsipes'],\n 'tarsitis': ['satirist', 'tarsitis'],\n 'tarsome': ['maestro', 'tarsome'],\n 'tarsonemid': ['mosandrite', 'tarsonemid'],\n 'tarsonemus': ['sarmentous', 'tarsonemus'],\n 'tarsus': ['rastus', 'tarsus'],\n 'tartan': ['rattan', 'tantra', 'tartan'],\n 'tartana': ['tantara', 'tartana'],\n 'tartaret': ['tartaret', 'tartrate'],\n 'tartarin': ['tartarin', 'triratna'],\n 'tartarous': ['saturator', 'tartarous'],\n 'tarten': ['attern', 'natter', 'ratten', 'tarten'],\n 'tartish': ['athirst', 'rattish', 'tartish'],\n 'tartle': ['artlet', 'latter', 'rattle', 'tartle', 'tatler'],\n 'tartlet': ['tartlet', 'tattler'],\n 'tartly': ['rattly', 'tartly'],\n 'tartrate': ['tartaret', 'tartrate'],\n 'taruma': ['taruma', 'trauma'],\n 'tarve': ['avert', 'tarve', 'taver', 'trave'],\n 'tarweed': ['dewater', 'tarweed', 'watered'],\n 'tarwood': ['ratwood', 'tarwood'],\n 'taryba': ['baryta', 'taryba'],\n 'tasco': ['ascot', 'coast', 'costa', 'tacso', 'tasco'],\n 'tash': ['shat', 'tash'],\n 'tasheriff': ['fireshaft', 'tasheriff'],\n 'tashie': ['saithe', 'tashie', 'teaish'],\n 'tashrif': ['ratfish', 'tashrif'],\n 'tasian': ['astian', 'tasian'],\n 'tasimetry': ['myristate', 'tasimetry'],\n 'task': ['skat', 'task'],\n 'tasker': ['skater', 'staker', 'strake', 'streak', 'tasker'],\n 'taslet': ['latest', 'sattle', 'taslet'],\n 'tasmanite': ['emanatist', 'staminate', 'tasmanite'],\n 'tassah': ['shasta', 'tassah'],\n 'tasse': ['asset', 'tasse'],\n 'tassel': ['lasset', 'tassel'],\n 'tasseler': ['rateless', 'tasseler', 'tearless', 'tesseral'],\n 'tasser': ['assert', 'tasser'],\n 'tassie': ['siesta', 'tassie'],\n 'tastable': ['statable', 'tastable'],\n 'taste': ['state', 'taste', 'tates', 'testa'],\n 'tasted': ['stated', 'tasted'],\n 'tasteful': ['stateful', 'tasteful'],\n 'tastefully': ['statefully', 'tastefully'],\n 'tastefulness': ['statefulness', 'tastefulness'],\n 'tasteless': ['stateless', 'tasteless'],\n 'taster': ['stater', 'taster', 'testar'],\n 'tasu': ['saut', 'tasu', 'utas'],\n 'tatar': ['attar', 'tatar'],\n 'tatarize': ['tatarize', 'zaratite'],\n 'tatchy': ['chatty', 'tatchy'],\n 'tate': ['etta', 'tate', 'teat'],\n 'tater': ['atter', 'tater', 'teart', 'tetra', 'treat'],\n 'tates': ['state', 'taste', 'tates', 'testa'],\n 'tath': ['hatt', 'tath', 'that'],\n 'tatian': ['attain', 'tatian'],\n 'tatler': ['artlet', 'latter', 'rattle', 'tartle', 'tatler'],\n 'tatterly': ['tatterly', 'tattlery'],\n 'tattler': ['tartlet', 'tattler'],\n 'tattlery': ['tatterly', 'tattlery'],\n 'tatu': ['tatu', 'taut'],\n 'tau': ['tau', 'tua', 'uta'],\n 'taube': ['butea', 'taube', 'tubae'],\n 'taula': ['aluta', 'taula'],\n 'taum': ['muta', 'taum'],\n 'taun': ['antu', 'aunt', 'naut', 'taun', 'tuan', 'tuna'],\n 'taungthu': ['taungthu', 'untaught'],\n 'taupe': ['taupe', 'upeat'],\n 'taupo': ['apout', 'taupo'],\n 'taur': ['ruta', 'taur'],\n 'taurean': ['taurean', 'uranate'],\n 'tauric': ['tauric', 'uratic', 'urtica'],\n 'taurine': ['ruinate', 'taurine', 'uranite', 'urinate'],\n 'taurocol': ['outcarol', 'taurocol'],\n 'taut': ['tatu', 'taut'],\n 'tauten': ['attune', 'nutate', 'tauten'],\n 'tautomeric': ['autometric', 'tautomeric'],\n 'tautomery': ['autometry', 'tautomery'],\n 'tav': ['tav', 'vat'],\n 'tavast': ['sattva', 'tavast'],\n 'tave': ['tave', 'veta'],\n 'taver': ['avert', 'tarve', 'taver', 'trave'],\n 'tavers': ['starve', 'staver', 'strave', 'tavers', 'versta'],\n 'tavert': ['tavert', 'vatter'],\n 'tavola': ['tavola', 'volata'],\n 'taw': ['taw', 'twa', 'wat'],\n 'tawa': ['awat', 'tawa'],\n 'tawer': ['tawer', 'water', 'wreat'],\n 'tawery': ['tawery', 'watery'],\n 'tawite': ['tawite', 'tawtie', 'twaite'],\n 'tawn': ['nawt', 'tawn', 'want'],\n 'tawny': ['tawny', 'wanty'],\n 'taws': ['sawt', 'staw', 'swat', 'taws', 'twas', 'wast'],\n 'tawse': ['awest', 'sweat', 'tawse', 'waste'],\n 'tawtie': ['tawite', 'tawtie', 'twaite'],\n 'taxed': ['detax', 'taxed'],\n 'taxer': ['extra', 'retax', 'taxer'],\n 'tay': ['tay', 'yat'],\n 'tayer': ['tayer', 'teary'],\n 'tchai': ['aitch', 'chait', 'chati', 'chita', 'taich', 'tchai'],\n 'tche': ['chet', 'etch', 'tche', 'tech'],\n 'tchi': ['chit', 'itch', 'tchi'],\n 'tchu': ['chut', 'tchu', 'utch'],\n 'tchwi': ['tchwi', 'wicht', 'witch'],\n 'tea': ['ate', 'eat', 'eta', 'tae', 'tea'],\n 'teaberry': ['betrayer', 'eatberry', 'rebetray', 'teaberry'],\n 'teaboy': ['betoya', 'teaboy'],\n 'teacart': ['caretta', 'teacart', 'tearcat'],\n 'teach': ['cheat', 'tache', 'teach', 'theca'],\n 'teachable': ['cheatable', 'teachable'],\n 'teachableness': ['cheatableness', 'teachableness'],\n 'teache': ['achete', 'hecate', 'teache', 'thecae'],\n 'teacher': ['cheater', 'hectare', 'recheat', 'reteach', 'teacher'],\n 'teachery': ['cheatery', 'cytherea', 'teachery'],\n 'teaching': ['cheating', 'teaching'],\n 'teachingly': ['cheatingly', 'teachingly'],\n 'teachless': ['tacheless', 'teachless'],\n 'tead': ['adet', 'date', 'tade', 'tead', 'teda'],\n 'teaer': ['arete', 'eater', 'teaer'],\n 'teagle': ['eaglet', 'legate', 'teagle', 'telega'],\n 'teaish': ['saithe', 'tashie', 'teaish'],\n 'teaism': ['samite', 'semita', 'tamise', 'teaism'],\n 'teak': ['kate', 'keta', 'take', 'teak'],\n 'teal': ['atle', 'laet', 'late', 'leat', 'tael', 'tale', 'teal'],\n 'team': ['mate', 'meat', 'meta', 'tame', 'team', 'tema'],\n 'teamer': ['reetam', 'retame', 'teamer'],\n 'teaming': ['mintage', 'teaming', 'tegmina'],\n 'teamless': ['mateless', 'meatless', 'tameless', 'teamless'],\n 'teamman': ['meatman', 'teamman'],\n 'teamster': ['teamster', 'trametes'],\n 'tean': ['ante', 'aten', 'etna', 'nate', 'neat', 'taen', 'tane', 'tean'],\n 'teanal': ['anteal', 'lanate', 'teanal'],\n 'teap': ['pate', 'peat', 'tape', 'teap'],\n 'teapot': ['aptote', 'optate', 'potate', 'teapot'],\n 'tear': ['rate', 'tare', 'tear', 'tera'],\n 'tearable': ['elabrate', 'tearable'],\n 'tearably': ['betrayal', 'tearably'],\n 'tearcat': ['caretta', 'teacart', 'tearcat'],\n 'teardown': ['danewort', 'teardown'],\n 'teardrop': ['predator', 'protrade', 'teardrop'],\n 'tearer': ['rerate', 'retare', 'tearer'],\n 'tearful': ['faulter', 'refutal', 'tearful'],\n 'tearing': ['angrite', 'granite', 'ingrate', 'tangier', 'tearing', 'tigrean'],\n 'tearless': ['rateless', 'tasseler', 'tearless', 'tesseral'],\n 'tearlike': ['keralite', 'tearlike'],\n 'tearpit': ['partite', 'tearpit'],\n 'teart': ['atter', 'tater', 'teart', 'tetra', 'treat'],\n 'teary': ['tayer', 'teary'],\n 'teasably': ['stayable', 'teasably'],\n 'tease': ['setae', 'tease'],\n 'teasel': ['ateles', 'saltee', 'sealet', 'stelae', 'teasel'],\n 'teaser': ['asteer',\n            'easter',\n            'eastre',\n            'reseat',\n            'saeter',\n            'seater',\n            'staree',\n            'teaser',\n            'teresa'],\n 'teasing': ['easting',\n             'gainset',\n             'genista',\n             'ingesta',\n             'seating',\n             'signate',\n             'teasing'],\n 'teasler': ['realest', 'reslate', 'resteal', 'stealer', 'teasler'],\n 'teasy': ['teasy', 'yeast'],\n 'teat': ['etta', 'tate', 'teat'],\n 'teather': ['teather', 'theater', 'thereat'],\n 'tebu': ['bute', 'tebu', 'tube'],\n 'teca': ['cate', 'teca'],\n 'tecali': ['calite', 'laetic', 'tecali'],\n 'tech': ['chet', 'etch', 'tche', 'tech'],\n 'techily': ['ethylic', 'techily'],\n 'technica': ['atechnic', 'catechin', 'technica'],\n 'technocracy': ['conycatcher', 'technocracy'],\n 'technopsychology': ['psychotechnology', 'technopsychology'],\n 'techous': ['souchet', 'techous', 'tousche'],\n 'techy': ['techy', 'tyche'],\n 'tecla': ['cleat', 'eclat', 'ectal', 'lacet', 'tecla'],\n 'teco': ['cote', 'teco'],\n 'tecoma': ['comate', 'metoac', 'tecoma'],\n 'tecomin': ['centimo', 'entomic', 'tecomin'],\n 'tecon': ['cento', 'conte', 'tecon'],\n 'tectal': ['cattle', 'tectal'],\n 'tectology': ['ctetology', 'tectology'],\n 'tectona': ['oncetta', 'tectona'],\n 'tectospinal': ['entoplastic', 'spinotectal', 'tectospinal', 'tenoplastic'],\n 'tecuma': ['acetum', 'tecuma'],\n 'tecuna': ['tecuna', 'uncate'],\n 'teda': ['adet', 'date', 'tade', 'tead', 'teda'],\n 'tedious': ['outside', 'tedious'],\n 'tediousness': ['outsideness', 'tediousness'],\n 'teedle': ['delete', 'teedle'],\n 'teel': ['leet', 'lete', 'teel', 'tele'],\n 'teem': ['meet', 'mete', 'teem'],\n 'teemer': ['meeter', 'remeet', 'teemer'],\n 'teeming': ['meeting', 'teeming', 'tegmine'],\n 'teems': ['teems', 'temse'],\n 'teen': ['neet', 'nete', 'teen'],\n 'teens': ['steen', 'teens', 'tense'],\n 'teer': ['reet', 'teer', 'tree'],\n 'teerer': ['retree', 'teerer'],\n 'teest': ['teest', 'teste'],\n 'teet': ['teet', 'tete'],\n 'teeter': ['teeter', 'terete'],\n 'teeth': ['teeth', 'theet'],\n 'teething': ['genthite', 'teething'],\n 'teg': ['get', 'teg'],\n 'tegean': ['geneat', 'negate', 'tegean'],\n 'tegmina': ['mintage', 'teaming', 'tegmina'],\n 'tegminal': ['ligament', 'metaling', 'tegminal'],\n 'tegmine': ['meeting', 'teeming', 'tegmine'],\n 'tegular': ['gaulter', 'tegular'],\n 'teheran': ['earthen', 'enheart', 'hearten', 'naether', 'teheran', 'traheen'],\n 'tehsildar': ['heraldist', 'tehsildar'],\n 'teian': ['entia', 'teian', 'tenai', 'tinea'],\n 'teicher': ['erethic', 'etheric', 'heretic', 'heteric', 'teicher'],\n 'teil': ['lite', 'teil', 'teli', 'tile'],\n 'teind': ['detin', 'teind', 'tined'],\n 'teinder': ['nitered', 'redient', 'teinder'],\n 'teinland': ['dentinal', 'teinland', 'tendinal'],\n 'teioid': ['iodite', 'teioid'],\n 'teju': ['jute', 'teju'],\n 'telamon': ['omental', 'telamon'],\n 'telang': ['tangle', 'telang'],\n 'telar': ['alert', 'alter', 'artel', 'later', 'ratel', 'taler', 'telar'],\n 'telarian': ['retainal', 'telarian'],\n 'telary': ['lyrate', 'raylet', 'realty', 'telary'],\n 'tele': ['leet', 'lete', 'teel', 'tele'],\n 'telecast': ['castelet', 'telecast'],\n 'telega': ['eaglet', 'legate', 'teagle', 'telega'],\n 'telegn': ['gentle', 'telegn'],\n 'telegrapher': ['retelegraph', 'telegrapher'],\n 'telei': ['elite', 'telei'],\n 'telephone': ['phenetole', 'telephone'],\n 'telephony': ['polythene', 'telephony'],\n 'telephotograph': ['phototelegraph', 'telephotograph'],\n 'telephotographic': ['phototelegraphic', 'telephotographic'],\n 'telephotography': ['phototelegraphy', 'telephotography'],\n 'teleradiophone': ['radiotelephone', 'teleradiophone'],\n 'teleran': ['alterne', 'enteral', 'eternal', 'teleran', 'teneral'],\n 'teleseism': ['messelite', 'semisteel', 'teleseism'],\n 'telespectroscope': ['spectrotelescope', 'telespectroscope'],\n 'telestereoscope': ['stereotelescope', 'telestereoscope'],\n 'telestial': ['satellite', 'telestial'],\n 'telestic': ['telestic', 'testicle'],\n 'telfer': ['felter', 'telfer', 'trefle'],\n 'teli': ['lite', 'teil', 'teli', 'tile'],\n 'telial': ['taille', 'telial'],\n 'telic': ['clite', 'telic'],\n 'telinga': ['atingle', 'gelatin', 'genital', 'langite', 'telinga'],\n 'tellach': ['hellcat', 'tellach'],\n 'teller': ['retell', 'teller'],\n 'tellima': ['mitella', 'tellima'],\n 'tellina': ['nitella', 'tellina'],\n 'tellurian': ['tellurian', 'unliteral'],\n 'telome': ['omelet', 'telome'],\n 'telonism': ['melonist', 'telonism'],\n 'telopsis': ['polistes', 'telopsis'],\n 'telpath': ['pathlet', 'telpath'],\n 'telson': ['solent', 'stolen', 'telson'],\n 'telsonic': ['lentisco', 'telsonic'],\n 'telt': ['lett', 'telt'],\n 'tema': ['mate', 'meat', 'meta', 'tame', 'team', 'tema'],\n 'teman': ['ament', 'meant', 'teman'],\n 'temin': ['metin', 'temin', 'timne'],\n 'temp': ['empt', 'temp'],\n 'tempean': ['peteman', 'tempean'],\n 'temper': ['temper', 'tempre'],\n 'tempera': ['premate', 'tempera'],\n 'temperer': ['retemper', 'temperer'],\n 'temperish': ['herpetism', 'metership', 'metreship', 'temperish'],\n 'templar': ['templar', 'trample'],\n 'template': ['palmette', 'template'],\n 'temple': ['pelmet', 'temple'],\n 'tempora': ['pteroma', 'tempora'],\n 'temporarily': ['polarimetry', 'premorality', 'temporarily'],\n 'temporofrontal': ['frontotemporal', 'temporofrontal'],\n 'temporooccipital': ['occipitotemporal', 'temporooccipital'],\n 'temporoparietal': ['parietotemporal', 'temporoparietal'],\n 'tempre': ['temper', 'tempre'],\n 'tempter': ['retempt', 'tempter'],\n 'temse': ['teems', 'temse'],\n 'temser': ['mester', 'restem', 'temser', 'termes'],\n 'temulent': ['temulent', 'unmettle'],\n 'ten': ['net', 'ten'],\n 'tenable': ['beltane', 'tenable'],\n 'tenace': ['cetane', 'tenace'],\n 'tenai': ['entia', 'teian', 'tenai', 'tinea'],\n 'tenanter': ['retenant', 'tenanter'],\n 'tenantless': ['latentness', 'tenantless'],\n 'tencteri': ['reticent', 'tencteri'],\n 'tend': ['dent', 'tend'],\n 'tender': ['denter', 'rented', 'tender'],\n 'tenderer': ['retender', 'tenderer'],\n 'tenderish': ['disherent', 'hinderest', 'tenderish'],\n 'tendinal': ['dentinal', 'teinland', 'tendinal'],\n 'tendinitis': ['dentinitis', 'tendinitis'],\n 'tendour': ['tendour', 'unroted'],\n 'tendril': ['tendril', 'trindle'],\n 'tendron': ['donnert', 'tendron'],\n 'teneral': ['alterne', 'enteral', 'eternal', 'teleran', 'teneral'],\n 'teneriffe': ['fifteener', 'teneriffe'],\n 'tenesmus': ['muteness', 'tenesmus'],\n 'teng': ['gent', 'teng'],\n 'tengu': ['tengu', 'unget'],\n 'teniacidal': ['acetanilid', 'laciniated', 'teniacidal'],\n 'teniacide': ['deciatine', 'diacetine', 'taenicide', 'teniacide'],\n 'tenible': ['beltine', 'tenible'],\n 'tenino': ['intone', 'tenino'],\n 'tenline': ['lenient', 'tenline'],\n 'tenner': ['rennet', 'tenner'],\n 'tennis': ['innest', 'sennit', 'sinnet', 'tennis'],\n 'tenomyotomy': ['myotenotomy', 'tenomyotomy'],\n 'tenon': ['nonet', 'tenon'],\n 'tenoner': ['enteron', 'tenoner'],\n 'tenonian': ['annotine', 'tenonian'],\n 'tenonitis': ['sentition', 'tenonitis'],\n 'tenontophyma': ['nematophyton', 'tenontophyma'],\n 'tenophyte': ['entophyte', 'tenophyte'],\n 'tenoplastic': ['entoplastic', 'spinotectal', 'tectospinal', 'tenoplastic'],\n 'tenor': ['noter', 'tenor', 'toner', 'trone'],\n 'tenorist': ['ortstein', 'tenorist'],\n 'tenovaginitis': ['investigation', 'tenovaginitis'],\n 'tenpin': ['pinnet', 'tenpin'],\n 'tenrec': ['center', 'recent', 'tenrec'],\n 'tense': ['steen', 'teens', 'tense'],\n 'tensible': ['nebelist', 'stilbene', 'tensible'],\n 'tensile': ['leisten', 'setline', 'tensile'],\n 'tension': ['stenion', 'tension'],\n 'tensional': ['alstonine', 'tensional'],\n 'tensive': ['estevin', 'tensive'],\n 'tenson': ['sonnet', 'stonen', 'tenson'],\n 'tensor': ['nestor', 'sterno', 'stoner', 'strone', 'tensor'],\n 'tentable': ['nettable', 'tentable'],\n 'tentacle': ['ectental', 'tentacle'],\n 'tentage': ['genetta', 'tentage'],\n 'tentation': ['attention', 'tentation'],\n 'tentative': ['attentive', 'tentative'],\n 'tentatively': ['attentively', 'tentatively'],\n 'tentativeness': ['attentiveness', 'tentativeness'],\n 'tented': ['detent', 'netted', 'tented'],\n 'tenter': ['netter', 'retent', 'tenter'],\n 'tention': ['nettion', 'tention', 'tontine'],\n 'tentorial': ['natrolite', 'tentorial'],\n 'tenty': ['netty', 'tenty'],\n 'tenuiroster': ['tenuiroster', 'urosternite'],\n 'tenuistriate': ['intersituate', 'tenuistriate'],\n 'tenure': ['neuter', 'retune', 'runtee', 'tenure', 'tureen'],\n 'tenurial': ['lutrinae', 'retinula', 'rutelian', 'tenurial'],\n 'teocalli': ['colletia', 'teocalli'],\n 'teosinte': ['noisette', 'teosinte'],\n 'tepache': ['heptace', 'tepache'],\n 'tepal': ['leapt',\n           'palet',\n           'patel',\n           'pelta',\n           'petal',\n           'plate',\n           'pleat',\n           'tepal'],\n 'tepanec': ['pentace', 'tepanec'],\n 'tepecano': ['conepate', 'tepecano'],\n 'tephrite': ['perthite', 'tephrite'],\n 'tephritic': ['perthitic', 'tephritic'],\n 'tephroite': ['heptorite', 'tephroite'],\n 'tephrosis': ['posterish', 'prothesis', 'sophister', 'storeship', 'tephrosis'],\n 'tepor': ['poter', 'prote', 'repot', 'tepor', 'toper', 'trope'],\n 'tequila': ['liquate', 'tequila'],\n 'tera': ['rate', 'tare', 'tear', 'tera'],\n 'teraglin': ['integral', 'teraglin', 'triangle'],\n 'terap': ['apert', 'pater', 'peart', 'prate', 'taper', 'terap'],\n 'teras': ['aster', 'serta', 'stare', 'strae', 'tarse', 'teras'],\n 'teratism': ['mistreat', 'teratism'],\n 'terbia': ['baiter', 'barite', 'rebait', 'terbia'],\n 'terbium': ['burmite', 'imbrute', 'terbium'],\n 'tercelet': ['electret', 'tercelet'],\n 'terceron': ['corrente', 'terceron'],\n 'tercia': ['acrite', 'arcite', 'tercia', 'triace', 'tricae'],\n 'tercine': ['citrene', 'enteric', 'enticer', 'tercine'],\n 'tercio': ['erotic', 'tercio'],\n 'terebilic': ['celtiberi', 'terebilic'],\n 'terebinthian': ['terebinthian', 'terebinthina'],\n 'terebinthina': ['terebinthian', 'terebinthina'],\n 'terebra': ['rebater', 'terebra'],\n 'terebral': ['barrelet', 'terebral'],\n 'terentian': ['entertain', 'tarentine', 'terentian'],\n 'teresa': ['asteer',\n            'easter',\n            'eastre',\n            'reseat',\n            'saeter',\n            'seater',\n            'staree',\n            'teaser',\n            'teresa'],\n 'teresian': ['arsenite', 'resinate', 'teresian', 'teresina'],\n 'teresina': ['arsenite', 'resinate', 'teresian', 'teresina'],\n 'terete': ['teeter', 'terete'],\n 'teretial': ['laterite', 'literate', 'teretial'],\n 'tereus': ['retuse', 'tereus'],\n 'tergal': ['raglet', 'tergal'],\n 'tergant': ['garnett', 'gnatter', 'gratten', 'tergant'],\n 'tergeminous': ['mentigerous', 'tergeminous'],\n 'teri': ['iter', 'reit', 'rite', 'teri', 'tier', 'tire'],\n 'teriann': ['entrain', 'teriann'],\n 'terma': ['armet',\n           'mater',\n           'merat',\n           'metra',\n           'ramet',\n           'tamer',\n           'terma',\n           'trame',\n           'trema'],\n 'termagant': ['targetman', 'termagant'],\n 'termes': ['mester', 'restem', 'temser', 'termes'],\n 'termin': ['minter', 'remint', 'termin'],\n 'terminal': ['terminal', 'tramline'],\n 'terminalia': ['laminarite', 'terminalia'],\n 'terminate': ['antimeter', 'attermine', 'interteam', 'terminate', 'tetramine'],\n 'termini': ['interim', 'termini'],\n 'terminine': ['intermine', 'nemertini', 'terminine'],\n 'terminus': ['numerist', 'terminus'],\n 'termital': ['remittal', 'termital'],\n 'termite': ['emitter', 'termite'],\n 'termly': ['myrtle', 'termly'],\n 'termon': ['mentor', 'merton', 'termon', 'tormen'],\n 'termor': ['termor', 'tremor'],\n 'tern': ['rent', 'tern'],\n 'terna': ['antre', 'arent', 'retan', 'terna'],\n 'ternal': ['altern', 'antler', 'learnt', 'rental', 'ternal'],\n 'ternar': ['arrent', 'errant', 'ranter', 'ternar'],\n 'ternarious': ['souterrain', 'ternarious', 'trouserian'],\n 'ternate': ['entreat', 'ratteen', 'tarente', 'ternate', 'tetrane'],\n 'terne': ['enter', 'neter', 'renet', 'terne', 'treen'],\n 'ternion': ['intoner', 'ternion'],\n 'ternlet': ['nettler', 'ternlet'],\n 'terp': ['pert', 'petr', 'terp'],\n 'terpane': ['patener', 'pearten', 'petrean', 'terpane'],\n 'terpeneless': ['repleteness', 'terpeneless'],\n 'terpin': ['nipter', 'terpin'],\n 'terpine': ['petrine', 'terpine'],\n 'terpineol': ['interlope', 'interpole', 'repletion', 'terpineol'],\n 'terpinol': ['pointrel', 'terpinol'],\n 'terrace': ['caterer', 'recrate', 'retrace', 'terrace'],\n 'terraciform': ['crateriform', 'terraciform'],\n 'terrage': ['greater', 'regrate', 'terrage'],\n 'terrain': ['arterin', 'retrain', 'terrain', 'trainer'],\n 'terral': ['retral', 'terral'],\n 'terrance': ['canterer', 'recanter', 'recreant', 'terrance'],\n 'terrapin': ['pretrain', 'terrapin'],\n 'terrar': ['tarrer', 'terrar'],\n 'terrence': ['centerer', 'recenter', 'recentre', 'terrence'],\n 'terrene': ['enterer', 'terrene'],\n 'terret': ['retter', 'terret'],\n 'terri': ['terri', 'tirer', 'trier'],\n 'terrier': ['retirer', 'terrier'],\n 'terrine': ['reinter', 'terrine'],\n 'terron': ['terron', 'treron', 'troner'],\n 'terry': ['retry', 'terry'],\n 'terse': ['ester',\n           'estre',\n           'reest',\n           'reset',\n           'steer',\n           'stere',\n           'stree',\n           'terse',\n           'tsere'],\n 'tersely': ['restyle', 'tersely'],\n 'tersion': ['oestrin', 'tersion'],\n 'tertia': ['attire', 'ratite', 'tertia'],\n 'tertian': ['intreat', 'iterant', 'nitrate', 'tertian'],\n 'tertiana': ['attainer', 'reattain', 'tertiana'],\n 'terton': ['rotten', 'terton'],\n 'tervee': ['revete', 'tervee'],\n 'terzina': ['retzian', 'terzina'],\n 'terzo': ['terzo', 'tozer'],\n 'tesack': ['casket', 'tesack'],\n 'teskere': ['skeeter', 'teskere'],\n 'tessella': ['satelles', 'tessella'],\n 'tesseral': ['rateless', 'tasseler', 'tearless', 'tesseral'],\n 'test': ['sett', 'stet', 'test'],\n 'testa': ['state', 'taste', 'tates', 'testa'],\n 'testable': ['settable', 'testable'],\n 'testament': ['statement', 'testament'],\n 'testar': ['stater', 'taster', 'testar'],\n 'teste': ['teest', 'teste'],\n 'tested': ['detest', 'tested'],\n 'testee': ['settee', 'testee'],\n 'tester': ['retest', 'setter', 'street', 'tester'],\n 'testes': ['sestet', 'testes', 'tsetse'],\n 'testicle': ['telestic', 'testicle'],\n 'testicular': ['testicular', 'trisulcate'],\n 'testily': ['stylite', 'testily'],\n 'testing': ['setting', 'testing'],\n 'teston': ['ostent', 'teston'],\n 'testor': ['sotter', 'testor'],\n 'testril': ['litster', 'slitter', 'stilter', 'testril'],\n 'testy': ['testy', 'tyste'],\n 'tetanic': ['nictate', 'tetanic'],\n 'tetanical': ['cantalite', 'lactinate', 'tetanical'],\n 'tetanoid': ['antidote', 'tetanoid'],\n 'tetanus': ['tetanus', 'unstate', 'untaste'],\n 'tetarconid': ['detraction', 'doctrinate', 'tetarconid'],\n 'tetard': ['tetard', 'tetrad'],\n 'tetchy': ['chetty', 'tetchy'],\n 'tete': ['teet', 'tete'],\n 'tetel': ['ettle', 'tetel'],\n 'tether': ['hetter', 'tether'],\n 'tethys': ['stythe', 'tethys'],\n 'tetra': ['atter', 'tater', 'teart', 'tetra', 'treat'],\n 'tetracid': ['citrated', 'tetracid', 'tetradic'],\n 'tetrad': ['tetard', 'tetrad'],\n 'tetradic': ['citrated', 'tetracid', 'tetradic'],\n 'tetragonia': ['giornatate', 'tetragonia'],\n 'tetrahexahedron': ['hexatetrahedron', 'tetrahexahedron'],\n 'tetrakishexahedron': ['hexakistetrahedron', 'tetrakishexahedron'],\n 'tetralin': ['tetralin', 'triental'],\n 'tetramin': ['intermat', 'martinet', 'tetramin'],\n 'tetramine': ['antimeter', 'attermine', 'interteam', 'terminate', 'tetramine'],\n 'tetrander': ['retardent', 'tetrander'],\n 'tetrandrous': ['tetrandrous', 'unrostrated'],\n 'tetrane': ['entreat', 'ratteen', 'tarente', 'ternate', 'tetrane'],\n 'tetrao': ['rotate', 'tetrao'],\n 'tetraodon': ['detonator', 'tetraodon'],\n 'tetraonine': ['entoretina', 'tetraonine'],\n 'tetraplous': ['supertotal', 'tetraplous'],\n 'tetrasporic': ['tetrasporic', 'triceratops'],\n 'tetraxonia': ['retaxation', 'tetraxonia'],\n 'tetrical': ['tetrical', 'tractile'],\n 'tetricous': ['tetricous', 'toreutics'],\n 'tetronic': ['contrite', 'tetronic'],\n 'tetrose': ['rosette', 'tetrose'],\n 'tetterous': ['outstreet', 'tetterous'],\n 'teucri': ['curite', 'teucri', 'uretic'],\n 'teucrian': ['anuretic', 'centauri', 'centuria', 'teucrian'],\n 'teucrin': ['nutrice', 'teucrin'],\n 'teuk': ['ketu', 'teuk', 'tuke'],\n 'tew': ['tew', 'wet'],\n 'tewa': ['tewa', 'twae', 'weta'],\n 'tewel': ['tewel', 'tweel'],\n 'tewer': ['rewet', 'tewer', 'twere'],\n 'tewit': ['tewit', 'twite'],\n 'tewly': ['tewly', 'wetly'],\n 'tha': ['aht', 'hat', 'tha'],\n 'thai': ['hati', 'thai'],\n 'thais': ['shita', 'thais'],\n 'thalami': ['hamital', 'thalami'],\n 'thaler': ['arthel', 'halter', 'lather', 'thaler'],\n 'thalia': ['hiatal', 'thalia'],\n 'thaliard': ['hardtail', 'thaliard'],\n 'thamesis': ['mathesis', 'thamesis'],\n 'than': ['hant', 'tanh', 'than'],\n 'thana': ['atnah', 'tanha', 'thana'],\n 'thanan': ['nathan', 'thanan'],\n 'thanatism': ['staithman', 'thanatism'],\n 'thanatotic': ['chattation', 'thanatotic'],\n 'thane': ['enhat', 'ethan', 'nathe', 'neath', 'thane'],\n 'thanker': ['rethank', 'thanker'],\n 'thapes': ['spathe', 'thapes'],\n 'thar': ['hart', 'rath', 'tahr', 'thar', 'trah'],\n 'tharen': ['anther', 'nather', 'tharen', 'thenar'],\n 'tharm': ['tharm', 'thram'],\n 'thasian': ['ashanti', 'sanhita', 'shaitan', 'thasian'],\n 'that': ['hatt', 'tath', 'that'],\n 'thatcher': ['rethatch', 'thatcher'],\n 'thaw': ['thaw', 'wath', 'what'],\n 'thawer': ['rethaw', 'thawer', 'wreath'],\n 'the': ['het', 'the'],\n 'thea': ['ahet', 'haet', 'hate', 'heat', 'thea'],\n 'theah': ['heath', 'theah'],\n 'thearchy': ['hatchery', 'thearchy'],\n 'theat': ['theat', 'theta'],\n 'theater': ['teather', 'theater', 'thereat'],\n 'theatricism': ['chemiatrist', 'chrismatite', 'theatricism'],\n 'theatropolis': ['strophiolate', 'theatropolis'],\n 'theatry': ['hattery', 'theatry'],\n 'theb': ['beth', 'theb'],\n 'thebaid': ['habited', 'thebaid'],\n 'theca': ['cheat', 'tache', 'teach', 'theca'],\n 'thecae': ['achete', 'hecate', 'teache', 'thecae'],\n 'thecal': ['achtel', 'chalet', 'thecal', 'thecla'],\n 'thecasporal': ['archapostle', 'thecasporal'],\n 'thecata': ['attache', 'thecata'],\n 'thecitis': ['ethicist', 'thecitis', 'theistic'],\n 'thecla': ['achtel', 'chalet', 'thecal', 'thecla'],\n 'theer': ['ether', 'rethe', 'theer', 'there', 'three'],\n 'theet': ['teeth', 'theet'],\n 'thegn': ['ghent', 'thegn'],\n 'thegnly': ['lengthy', 'thegnly'],\n 'theine': ['ethine', 'theine'],\n 'their': ['ither', 'their'],\n 'theirn': ['hinter', 'nither', 'theirn'],\n 'theirs': ['shrite', 'theirs'],\n 'theism': ['theism', 'themis'],\n 'theist': ['theist', 'thetis'],\n 'theistic': ['ethicist', 'thecitis', 'theistic'],\n 'thema': ['ahmet', 'thema'],\n 'thematic': ['mathetic', 'thematic'],\n 'thematist': ['hattemist', 'thematist'],\n 'themer': ['mether', 'themer'],\n 'themis': ['theism', 'themis'],\n 'themistian': ['antitheism', 'themistian'],\n 'then': ['hent', 'neth', 'then'],\n 'thenal': ['ethnal', 'hantle', 'lathen', 'thenal'],\n 'thenar': ['anther', 'nather', 'tharen', 'thenar'],\n 'theobald': ['bolthead', 'theobald'],\n 'theocrasia': ['oireachtas', 'theocrasia'],\n 'theocrat': ['theocrat', 'trochate'],\n 'theocratic': ['rheotactic', 'theocratic'],\n 'theodora': ['dorothea', 'theodora'],\n 'theodore': ['theodore', 'treehood'],\n 'theogonal': ['halogeton', 'theogonal'],\n 'theologic': ['ethologic', 'theologic'],\n 'theological': ['ethological', 'lethologica', 'theological'],\n 'theologism': ['hemologist', 'theologism'],\n 'theology': ['ethology', 'theology'],\n 'theophanic': ['phaethonic', 'theophanic'],\n 'theophilist': ['philotheist', 'theophilist'],\n 'theopsychism': ['psychotheism', 'theopsychism'],\n 'theorbo': ['boother', 'theorbo'],\n 'theorematic': ['heteratomic', 'theorematic'],\n 'theoretic': ['heterotic', 'theoretic'],\n 'theoretician': ['heretication', 'theoretician'],\n 'theorician': ['antiheroic', 'theorician'],\n 'theorics': ['chirotes', 'theorics'],\n 'theorism': ['homerist', 'isotherm', 'otherism', 'theorism'],\n 'theorist': ['otherist', 'theorist'],\n 'theorizer': ['rhetorize', 'theorizer'],\n 'theorum': ['mouther', 'theorum'],\n 'theotherapy': ['heteropathy', 'theotherapy'],\n 'therblig': ['blighter', 'therblig'],\n 'there': ['ether', 'rethe', 'theer', 'there', 'three'],\n 'thereas': ['thereas', 'theresa'],\n 'thereat': ['teather', 'theater', 'thereat'],\n 'therein': ['enherit', 'etherin', 'neither', 'therein'],\n 'thereness': ['retheness', 'thereness', 'threeness'],\n 'thereology': ['heterology', 'thereology'],\n 'theres': ['esther', 'hester', 'theres'],\n 'theresa': ['thereas', 'theresa'],\n 'therese': ['sheeter', 'therese'],\n 'therewithal': ['therewithal', 'whitleather'],\n 'theriac': ['certhia', 'rhaetic', 'theriac'],\n 'therial': ['hairlet', 'therial'],\n 'theriodic': ['dichroite', 'erichtoid', 'theriodic'],\n 'theriodonta': ['dehortation', 'theriodonta'],\n 'thermantic': ['intermatch', 'thermantic'],\n 'thermo': ['mother', 'thermo'],\n 'thermobarograph': ['barothermograph', 'thermobarograph'],\n 'thermoelectric': ['electrothermic', 'thermoelectric'],\n 'thermoelectrometer': ['electrothermometer', 'thermoelectrometer'],\n 'thermogalvanometer': ['galvanothermometer', 'thermogalvanometer'],\n 'thermogeny': ['mythogreen', 'thermogeny'],\n 'thermography': ['mythographer', 'thermography'],\n 'thermology': ['mythologer', 'thermology'],\n 'thermos': ['smother', 'thermos'],\n 'thermotype': ['phytometer', 'thermotype'],\n 'thermotypic': ['phytometric', 'thermotypic'],\n 'thermotypy': ['phytometry', 'thermotypy'],\n 'theroid': ['rhodite', 'theroid'],\n 'theron': ['hornet', 'nother', 'theron', 'throne'],\n 'thersitical': ['thersitical', 'trachelitis'],\n 'these': ['sheet', 'these'],\n 'thesean': ['sneathe', 'thesean'],\n 'thesial': ['heliast', 'thesial'],\n 'thesis': ['shiest', 'thesis'],\n 'theta': ['theat', 'theta'],\n 'thetical': ['athletic', 'thetical'],\n 'thetis': ['theist', 'thetis'],\n 'thew': ['hewt', 'thew', 'whet'],\n 'they': ['they', 'yeth'],\n 'theyre': ['theyre', 'yether'],\n 'thicken': ['kitchen', 'thicken'],\n 'thickener': ['kitchener', 'rethicken', 'thickener'],\n 'thicket': ['chettik', 'thicket'],\n 'thienyl': ['ethylin', 'thienyl'],\n 'thig': ['gith', 'thig'],\n 'thigh': ['hight', 'thigh'],\n 'thill': ['illth', 'thill'],\n 'thin': ['hint', 'thin'],\n 'thing': ['night', 'thing'],\n 'thingal': ['halting', 'lathing', 'thingal'],\n 'thingless': ['lightness', 'nightless', 'thingless'],\n 'thinglet': ['thinglet', 'thlinget'],\n 'thinglike': ['nightlike', 'thinglike'],\n 'thingly': ['nightly', 'thingly'],\n 'thingman': ['nightman', 'thingman'],\n 'thinker': ['rethink', 'thinker'],\n 'thio': ['hoit', 'hoti', 'thio'],\n 'thiocresol': ['holosteric', 'thiocresol'],\n 'thiol': ['litho', 'thiol', 'tholi'],\n 'thiolacetic': ['heliotactic', 'thiolacetic'],\n 'thiophenol': ['lithophone', 'thiophenol'],\n 'thiopyran': ['phoniatry', 'thiopyran'],\n 'thirlage': ['litharge', 'thirlage'],\n 'this': ['hist', 'sith', 'this', 'tshi'],\n 'thissen': ['sithens', 'thissen'],\n 'thistle': ['lettish', 'thistle'],\n 'thlinget': ['thinglet', 'thlinget'],\n 'tho': ['hot', 'tho'],\n 'thob': ['both', 'thob'],\n 'thole': ['helot', 'hotel', 'thole'],\n 'tholi': ['litho', 'thiol', 'tholi'],\n 'tholos': ['soloth', 'tholos'],\n 'thomaean': ['amaethon', 'thomaean'],\n 'thomasine': ['hematosin', 'thomasine'],\n 'thomisid': ['isthmoid', 'thomisid'],\n 'thomsonite': ['monotheist', 'thomsonite'],\n 'thonder': ['thonder', 'thorned'],\n 'thonga': ['gnatho', 'thonga'],\n 'thoo': ['hoot', 'thoo', 'toho'],\n 'thoom': ['mooth', 'thoom'],\n 'thoracectomy': ['chromatocyte', 'thoracectomy'],\n 'thoracic': ['thoracic', 'tocharic', 'trochaic'],\n 'thoral': ['harlot', 'orthal', 'thoral'],\n 'thore': ['other', 'thore', 'throe', 'toher'],\n 'thoric': ['chorti', 'orthic', 'thoric', 'trochi'],\n 'thorina': ['orthian', 'thorina'],\n 'thorite': ['hortite', 'orthite', 'thorite'],\n 'thorn': ['north', 'thorn'],\n 'thorned': ['thonder', 'thorned'],\n 'thornhead': ['rhodanthe', 'thornhead'],\n 'thorny': ['rhyton', 'thorny'],\n 'thoro': ['ortho', 'thoro'],\n 'thort': ['thort', 'troth'],\n 'thos': ['host', 'shot', 'thos', 'tosh'],\n 'those': ['ethos', 'shote', 'those'],\n 'thowel': ['howlet', 'thowel'],\n 'thraces': ['stacher', 'thraces'],\n 'thracian': ['taranchi', 'thracian'],\n 'thraep': ['thraep', 'threap'],\n 'thrain': ['hartin', 'thrain'],\n 'thram': ['tharm', 'thram'],\n 'thrang': ['granth', 'thrang'],\n 'thrasher': ['rethrash', 'thrasher'],\n 'thrast': ['strath', 'thrast'],\n 'thraw': ['thraw', 'warth', 'whart', 'wrath'],\n 'thread': ['dearth', 'hatred', 'rathed', 'thread'],\n 'threaden': ['adherent', 'headrent', 'neatherd', 'threaden'],\n 'threader': ['rethread', 'threader'],\n 'threadworm': ['motherward', 'threadworm'],\n 'thready': ['hydrate', 'thready'],\n 'threap': ['thraep', 'threap'],\n 'threat': ['hatter', 'threat'],\n 'threatener': ['rethreaten', 'threatener'],\n 'three': ['ether', 'rethe', 'theer', 'there', 'three'],\n 'threeling': ['lightener', 'relighten', 'threeling'],\n 'threeness': ['retheness', 'thereness', 'threeness'],\n 'threne': ['erthen', 'henter', 'nether', 'threne'],\n 'threnode': ['dethrone', 'threnode'],\n 'threnodic': ['chondrite', 'threnodic'],\n 'threnos': ['shorten', 'threnos'],\n 'thresher': ['rethresh', 'thresher'],\n 'thrice': ['cither', 'thrice'],\n 'thriller': ['rethrill', 'thriller'],\n 'thripel': ['philter', 'thripel'],\n 'thripidae': ['rhipidate', 'thripidae'],\n 'throat': ['athort', 'throat'],\n 'throb': ['broth', 'throb'],\n 'throe': ['other', 'thore', 'throe', 'toher'],\n 'thronal': ['althorn', 'anthrol', 'thronal'],\n 'throne': ['hornet', 'nother', 'theron', 'throne'],\n 'throu': ['routh', 'throu'],\n 'throughout': ['outthrough', 'throughout'],\n 'throw': ['throw', 'whort', 'worth', 'wroth'],\n 'throwdown': ['downthrow', 'throwdown'],\n 'thrower': ['rethrow', 'thrower'],\n 'throwing': ['ingrowth', 'throwing'],\n 'throwout': ['outthrow', 'outworth', 'throwout'],\n 'thrum': ['thrum', 'thurm'],\n 'thrust': ['struth', 'thrust'],\n 'thruster': ['rethrust', 'thruster'],\n 'thuan': ['ahunt', 'haunt', 'thuan', 'unhat'],\n 'thulr': ['thulr', 'thurl'],\n 'thunderbearing': ['thunderbearing', 'underbreathing'],\n 'thunderer': ['rethunder', 'thunderer'],\n 'thundering': ['thundering', 'underthing'],\n 'thuoc': ['couth', 'thuoc', 'touch'],\n 'thurl': ['thulr', 'thurl'],\n 'thurm': ['thrum', 'thurm'],\n 'thurse': ['reshut', 'suther', 'thurse', 'tusher'],\n 'thurt': ['thurt', 'truth'],\n 'thus': ['shut', 'thus', 'tush'],\n 'thusness': ['shutness', 'thusness'],\n 'thwacker': ['thwacker', 'whatreck'],\n 'thwartover': ['overthwart', 'thwartover'],\n 'thymelic': ['methylic', 'thymelic'],\n 'thymetic': ['hymettic', 'thymetic'],\n 'thymus': ['mythus', 'thymus'],\n 'thyreogenous': ['heterogynous', 'thyreogenous'],\n 'thyreohyoid': ['hyothyreoid', 'thyreohyoid'],\n 'thyreoid': ['hydriote', 'thyreoid'],\n 'thyreoidal': ['thyreoidal', 'thyroideal'],\n 'thyreosis': ['oysterish', 'thyreosis'],\n 'thyris': ['shirty', 'thyris'],\n 'thyrocricoid': ['cricothyroid', 'thyrocricoid'],\n 'thyrogenic': ['thyrogenic', 'trichogyne'],\n 'thyrohyoid': ['hyothyroid', 'thyrohyoid'],\n 'thyroideal': ['thyreoidal', 'thyroideal'],\n 'thyroiodin': ['iodothyrin', 'thyroiodin'],\n 'thyroprivic': ['thyroprivic', 'vitrophyric'],\n 'thysanopteran': ['parasyntheton', 'thysanopteran'],\n 'thysel': ['shelty', 'thysel'],\n 'ti': ['it', 'ti'],\n 'tiang': ['giant', 'tangi', 'tiang'],\n 'tiao': ['iota', 'tiao'],\n 'tiar': ['airt', 'rita', 'tari', 'tiar'],\n 'tiara': ['arati', 'atria', 'riata', 'tarai', 'tiara'],\n 'tiarella': ['arillate', 'tiarella'],\n 'tib': ['bit', 'tib'],\n 'tibetan': ['bettina', 'tabinet', 'tibetan'],\n 'tibial': ['bilati', 'tibial'],\n 'tibiale': ['biliate', 'tibiale'],\n 'tibiofemoral': ['femorotibial', 'tibiofemoral'],\n 'tic': ['cit', 'tic'],\n 'ticca': ['cacti', 'ticca'],\n 'tice': ['ceti', 'cite', 'tice'],\n 'ticer': ['citer', 'recti', 'ticer', 'trice'],\n 'tichodroma': ['chromatoid', 'tichodroma'],\n 'ticketer': ['reticket', 'ticketer'],\n 'tickler': ['tickler', 'trickle'],\n 'tickproof': ['prickfoot', 'tickproof'],\n 'ticuna': ['anicut', 'nautic', 'ticuna', 'tunica'],\n 'ticunan': ['ticunan', 'tunican'],\n 'tid': ['dit', 'tid'],\n 'tidal': ['datil', 'dital', 'tidal', 'tilda'],\n 'tiddley': ['lyddite', 'tiddley'],\n 'tide': ['diet', 'dite', 'edit', 'tide', 'tied'],\n 'tidely': ['idlety', 'lydite', 'tidely', 'tidley'],\n 'tiding': ['tiding', 'tingid'],\n 'tidley': ['idlety', 'lydite', 'tidely', 'tidley'],\n 'tied': ['diet', 'dite', 'edit', 'tide', 'tied'],\n 'tien': ['iten', 'neti', 'tien', 'tine'],\n 'tiepin': ['pinite', 'tiepin'],\n 'tier': ['iter', 'reit', 'rite', 'teri', 'tier', 'tire'],\n 'tierce': ['cerite', 'certie', 'recite', 'tierce'],\n 'tiered': ['dieter', 'tiered'],\n 'tierer': ['errite', 'reiter', 'retier', 'retire', 'tierer'],\n 'tiffy': ['fifty', 'tiffy'],\n 'tifter': ['fitter', 'tifter'],\n 'tig': ['git', 'tig'],\n 'tigella': ['tigella', 'tillage'],\n 'tiger': ['tiger', 'tigre'],\n 'tigereye': ['geyerite', 'tigereye'],\n 'tightener': ['retighten', 'tightener'],\n 'tiglinic': ['lignitic', 'tiglinic'],\n 'tigre': ['tiger', 'tigre'],\n 'tigrean': ['angrite', 'granite', 'ingrate', 'tangier', 'tearing', 'tigrean'],\n 'tigress': ['striges', 'tigress'],\n 'tigrine': ['igniter', 'ringite', 'tigrine'],\n 'tigurine': ['intrigue', 'tigurine'],\n 'tikka': ['katik', 'tikka'],\n 'tikur': ['tikur', 'turki'],\n 'til': ['lit', 'til'],\n 'tilaite': ['italite', 'letitia', 'tilaite'],\n 'tilda': ['datil', 'dital', 'tidal', 'tilda'],\n 'tilde': ['tilde', 'tiled'],\n 'tile': ['lite', 'teil', 'teli', 'tile'],\n 'tiled': ['tilde', 'tiled'],\n 'tiler': ['liter', 'tiler'],\n 'tilery': ['tilery', 'tilyer'],\n 'tileways': ['sweatily', 'tileways'],\n 'tileyard': ['dielytra', 'tileyard'],\n 'tilia': ['itali', 'tilia'],\n 'tilikum': ['kulimit', 'tilikum'],\n 'till': ['lilt', 'till'],\n 'tillable': ['belltail', 'bletilla', 'tillable'],\n 'tillaea': ['alalite', 'tillaea'],\n 'tillage': ['tigella', 'tillage'],\n 'tiller': ['retill', 'rillet', 'tiller'],\n 'tilmus': ['litmus', 'tilmus'],\n 'tilpah': ['lapith', 'tilpah'],\n 'tilter': ['litter', 'tilter', 'titler'],\n 'tilting': ['tilting', 'titling', 'tlingit'],\n 'tiltup': ['tiltup', 'uptilt'],\n 'tilyer': ['tilery', 'tilyer'],\n 'timable': ['limbate', 'timable', 'timbale'],\n 'timaeus': ['metusia', 'suimate', 'timaeus'],\n 'timaline': ['meliatin', 'timaline'],\n 'timani': ['intima', 'timani'],\n 'timar': ['mitra', 'tarmi', 'timar', 'tirma'],\n 'timbal': ['limbat', 'timbal'],\n 'timbale': ['limbate', 'timable', 'timbale'],\n 'timber': ['betrim', 'timber', 'timbre'],\n 'timbered': ['bemitred', 'timbered'],\n 'timberer': ['retimber', 'timberer'],\n 'timberlike': ['kimberlite', 'timberlike'],\n 'timbre': ['betrim', 'timber', 'timbre'],\n 'time': ['emit', 'item', 'mite', 'time'],\n 'timecard': ['dermatic', 'timecard'],\n 'timed': ['demit', 'timed'],\n 'timeproof': ['miteproof', 'timeproof'],\n 'timer': ['merit', 'miter', 'mitre', 'remit', 'timer'],\n 'times': ['metis', 'smite', 'stime', 'times'],\n 'timesaving': ['negativism', 'timesaving'],\n 'timework': ['timework', 'worktime'],\n 'timid': ['dimit', 'timid'],\n 'timidly': ['mytilid', 'timidly'],\n 'timidness': ['destinism', 'timidness'],\n 'timish': ['isthmi', 'timish'],\n 'timne': ['metin', 'temin', 'timne'],\n 'timo': ['itmo', 'moit', 'omit', 'timo'],\n 'timon': ['minot', 'timon', 'tomin'],\n 'timorese': ['rosetime', 'timorese', 'tiresome'],\n 'timpani': ['impaint', 'timpani'],\n 'timpano': ['maintop', 'ptomain', 'tampion', 'timpano'],\n 'tin': ['nit', 'tin'],\n 'tina': ['aint', 'anti', 'tain', 'tina'],\n 'tincal': ['catlin', 'tincal'],\n 'tinchel': ['linchet', 'tinchel'],\n 'tinctorial': ['tinctorial', 'trinoctial'],\n 'tind': ['dint', 'tind'],\n 'tindal': ['antlid', 'tindal'],\n 'tindalo': ['itoland', 'talonid', 'tindalo'],\n 'tinder': ['dirten', 'rident', 'tinder'],\n 'tindered': ['dendrite', 'tindered'],\n 'tinderous': ['detrusion', 'tinderous', 'unstoried'],\n 'tine': ['iten', 'neti', 'tien', 'tine'],\n 'tinea': ['entia', 'teian', 'tenai', 'tinea'],\n 'tineal': ['entail', 'tineal'],\n 'tinean': ['annite', 'innate', 'tinean'],\n 'tined': ['detin', 'teind', 'tined'],\n 'tineid': ['indite', 'tineid'],\n 'tineman': ['mannite', 'tineman'],\n 'tineoid': ['edition', 'odinite', 'otidine', 'tineoid'],\n 'tinetare': ['intereat', 'tinetare'],\n 'tinety': ['entity', 'tinety'],\n 'tinged': ['nidget', 'tinged'],\n 'tinger': ['engirt', 'tinger'],\n 'tingid': ['tiding', 'tingid'],\n 'tingitidae': ['indigitate', 'tingitidae'],\n 'tingler': ['ringlet', 'tingler', 'tringle'],\n 'tinhouse': ['outshine', 'tinhouse'],\n 'tink': ['knit', 'tink'],\n 'tinker': ['reknit', 'tinker'],\n 'tinkerer': ['retinker', 'tinkerer'],\n 'tinkler': ['tinkler', 'trinkle'],\n 'tinlet': ['litten', 'tinlet'],\n 'tinne': ['innet', 'tinne'],\n 'tinned': ['dentin', 'indent', 'intend', 'tinned'],\n 'tinner': ['intern', 'tinner'],\n 'tinnet': ['intent', 'tinnet'],\n 'tino': ['into', 'nito', 'oint', 'tino'],\n 'tinoceras': ['atroscine', 'certosina', 'ostracine', 'tinoceras', 'tricosane'],\n 'tinosa': ['sotnia', 'tinosa'],\n 'tinsel': ['enlist', 'listen', 'silent', 'tinsel'],\n 'tinselly': ['silently', 'tinselly'],\n 'tinta': ['taint', 'tanti', 'tinta', 'titan'],\n 'tintage': ['attinge', 'tintage'],\n 'tinter': ['nitter', 'tinter'],\n 'tintie': ['tintie', 'titien'],\n 'tintiness': ['insistent', 'tintiness'],\n 'tinty': ['nitty', 'tinty'],\n 'tinworker': ['interwork', 'tinworker'],\n 'tionontates': ['ostentation', 'tionontates'],\n 'tip': ['pit', 'tip'],\n 'tipe': ['piet', 'tipe'],\n 'tipful': ['tipful', 'uplift'],\n 'tipless': ['pitless', 'tipless'],\n 'tipman': ['pitman', 'tampin', 'tipman'],\n 'tipper': ['rippet', 'tipper'],\n 'tippler': ['ripplet', 'tippler', 'tripple'],\n 'tipster': ['spitter', 'tipster'],\n 'tipstock': ['potstick', 'tipstock'],\n 'tipula': ['tipula', 'tulipa'],\n 'tiralee': ['atelier', 'tiralee'],\n 'tire': ['iter', 'reit', 'rite', 'teri', 'tier', 'tire'],\n 'tired': ['diter', 'tired', 'tried'],\n 'tiredly': ['tiredly', 'triedly'],\n 'tiredness': ['dissenter', 'tiredness'],\n 'tireless': ['riteless', 'tireless'],\n 'tirelessness': ['ritelessness', 'tirelessness'],\n 'tiremaid': ['dimetria', 'mitridae', 'tiremaid', 'triamide'],\n 'tireman': ['minaret', 'raiment', 'tireman'],\n 'tirer': ['terri', 'tirer', 'trier'],\n 'tiresmith': ['tiresmith', 'tritheism'],\n 'tiresome': ['rosetime', 'timorese', 'tiresome'],\n 'tirma': ['mitra', 'tarmi', 'timar', 'tirma'],\n 'tirolean': ['oriental', 'relation', 'tirolean'],\n 'tirolese': ['literose', 'roselite', 'tirolese'],\n 'tirve': ['rivet', 'tirve', 'tiver'],\n 'tisane': ['satine', 'tisane'],\n 'tisar': ['arist',\n           'astir',\n           'sitar',\n           'stair',\n           'stria',\n           'tarsi',\n           'tisar',\n           'trias'],\n 'titan': ['taint', 'tanti', 'tinta', 'titan'],\n 'titaness': ['antistes', 'titaness'],\n 'titanic': ['tanitic', 'titanic'],\n 'titano': ['otiant', 'titano'],\n 'titanocolumbate': ['columbotitanate', 'titanocolumbate'],\n 'titanofluoride': ['rotundifoliate', 'titanofluoride'],\n 'titanosaur': ['saturation', 'titanosaur'],\n 'titanosilicate': ['silicotitanate', 'titanosilicate'],\n 'titanous': ['outsaint', 'titanous'],\n 'titanyl': ['nattily', 'titanyl'],\n 'titar': ['ratti', 'titar', 'trait'],\n 'titer': ['titer', 'titre', 'trite'],\n 'tithable': ['hittable', 'tithable'],\n 'tither': ['hitter', 'tither'],\n 'tithonic': ['chinotti', 'tithonic'],\n 'titien': ['tintie', 'titien'],\n 'titleboard': ['titleboard', 'trilobated'],\n 'titler': ['litter', 'tilter', 'titler'],\n 'titling': ['tilting', 'titling', 'tlingit'],\n 'titrate': ['attrite', 'titrate'],\n 'titration': ['attrition', 'titration'],\n 'titre': ['titer', 'titre', 'trite'],\n 'tiver': ['rivet', 'tirve', 'tiver'],\n 'tiza': ['itza', 'tiza', 'zati'],\n 'tlaco': ['lacto', 'tlaco'],\n 'tlingit': ['tilting', 'titling', 'tlingit'],\n 'tmesis': ['misset', 'tmesis'],\n 'toa': ['oat', 'tao', 'toa'],\n 'toad': ['doat', 'toad', 'toda'],\n 'toader': ['doater', 'toader'],\n 'toadflower': ['floodwater', 'toadflower', 'waterflood'],\n 'toadier': ['roadite', 'toadier'],\n 'toadish': ['doatish', 'toadish'],\n 'toady': ['toady', 'today'],\n 'toadyish': ['toadyish', 'todayish'],\n 'toag': ['goat', 'toag', 'toga'],\n 'toast': ['stoat', 'toast'],\n 'toaster': ['retoast', 'rosetta', 'stoater', 'toaster'],\n 'toba': ['boat', 'bota', 'toba'],\n 'tobe': ['bote', 'tobe'],\n 'tobiah': ['bhotia', 'tobiah'],\n 'tobine': ['botein', 'tobine'],\n 'toccata': ['attacco', 'toccata'],\n 'tocharese': ['escheator', 'tocharese'],\n 'tocharian': ['archontia', 'tocharian'],\n 'tocharic': ['thoracic', 'tocharic', 'trochaic'],\n 'tocher': ['hector', 'rochet', 'tocher', 'troche'],\n 'toco': ['coot', 'coto', 'toco'],\n 'tocogenetic': ['geotectonic', 'tocogenetic'],\n 'tocometer': ['octometer', 'rectotome', 'tocometer'],\n 'tocsin': ['nostic', 'sintoc', 'tocsin'],\n 'tod': ['dot', 'tod'],\n 'toda': ['doat', 'toad', 'toda'],\n 'today': ['toady', 'today'],\n 'todayish': ['toadyish', 'todayish'],\n 'toddle': ['dodlet', 'toddle'],\n 'tode': ['dote', 'tode', 'toed'],\n 'todea': ['deota', 'todea'],\n 'tody': ['doty', 'tody'],\n 'toecap': ['capote', 'toecap'],\n 'toed': ['dote', 'tode', 'toed'],\n 'toeless': ['osselet', 'sestole', 'toeless'],\n 'toenail': ['alnoite', 'elation', 'toenail'],\n 'tog': ['got', 'tog'],\n 'toga': ['goat', 'toag', 'toga'],\n 'togaed': ['dogate', 'dotage', 'togaed'],\n 'togalike': ['goatlike', 'togalike'],\n 'toggel': ['goglet', 'toggel', 'toggle'],\n 'toggle': ['goglet', 'toggel', 'toggle'],\n 'togs': ['stog', 'togs'],\n 'toher': ['other', 'thore', 'throe', 'toher'],\n 'toho': ['hoot', 'thoo', 'toho'],\n 'tohunga': ['hangout', 'tohunga'],\n 'toi': ['ito', 'toi'],\n 'toil': ['ilot', 'toil'],\n 'toiler': ['loiter', 'toiler', 'triole'],\n 'toilet': ['lottie', 'toilet', 'tolite'],\n 'toiletry': ['toiletry', 'tyrolite'],\n 'toise': ['sotie', 'toise'],\n 'tokay': ['otyak', 'tokay'],\n 'toke': ['keto', 'oket', 'toke'],\n 'toko': ['koto', 'toko', 'took'],\n 'tol': ['lot', 'tol'],\n 'tolamine': ['lomatine', 'tolamine'],\n 'tolan': ['notal', 'ontal', 'talon', 'tolan', 'tonal'],\n 'tolane': ['etalon', 'tolane'],\n 'told': ['dolt', 'told'],\n 'tole': ['leto', 'lote', 'tole'],\n 'toledan': ['taloned', 'toledan'],\n 'toledo': ['toledo', 'toodle'],\n 'tolerance': ['antrocele', 'coeternal', 'tolerance'],\n 'tolerancy': ['alectryon', 'tolerancy'],\n 'tolidine': ['lindoite', 'tolidine'],\n 'tolite': ['lottie', 'toilet', 'tolite'],\n 'tollery': ['tollery', 'trolley'],\n 'tolly': ['tolly', 'tolyl'],\n 'tolpatch': ['potlatch', 'tolpatch'],\n 'tolsey': ['tolsey', 'tylose'],\n 'tolter': ['lotter', 'rottle', 'tolter'],\n 'tolu': ['lout', 'tolu'],\n 'toluic': ['coutil', 'toluic'],\n 'toluifera': ['foliature', 'toluifera'],\n 'tolyl': ['tolly', 'tolyl'],\n 'tom': ['mot', 'tom'],\n 'toma': ['atmo', 'atom', 'moat', 'toma'],\n 'toman': ['manto', 'toman'],\n 'tomas': ['atmos', 'stoma', 'tomas'],\n 'tombac': ['combat', 'tombac'],\n 'tome': ['mote', 'tome'],\n 'tomentose': ['metosteon', 'tomentose'],\n 'tomial': ['lomita', 'tomial'],\n 'tomin': ['minot', 'timon', 'tomin'],\n 'tomographic': ['motographic', 'tomographic'],\n 'tomorn': ['morton', 'tomorn'],\n 'tomorrow': ['moorwort', 'rootworm', 'tomorrow', 'wormroot'],\n 'ton': ['not', 'ton'],\n 'tonal': ['notal', 'ontal', 'talon', 'tolan', 'tonal'],\n 'tonalitive': ['levitation', 'tonalitive', 'velitation'],\n 'tonation': ['notation', 'tonation'],\n 'tone': ['note', 'tone'],\n 'toned': ['donet', 'noted', 'toned'],\n 'toneless': ['noteless', 'toneless'],\n 'tonelessly': ['notelessly', 'tonelessly'],\n 'tonelessness': ['notelessness', 'tonelessness'],\n 'toner': ['noter', 'tenor', 'toner', 'trone'],\n 'tonetic': ['entotic', 'tonetic'],\n 'tonetics': ['stenotic', 'tonetics'],\n 'tonga': ['tango', 'tonga'],\n 'tongan': ['ganton', 'tongan'],\n 'tongas': ['sontag', 'tongas'],\n 'tonger': ['geront', 'tonger'],\n 'tongrian': ['ignorant', 'tongrian'],\n 'tongs': ['stong', 'tongs'],\n 'tonicize': ['nicotize', 'tonicize'],\n 'tonicoclonic': ['clonicotonic', 'tonicoclonic'],\n 'tonify': ['notify', 'tonify'],\n 'tonish': ['histon', 'shinto', 'tonish'],\n 'tonk': ['knot', 'tonk'],\n 'tonkin': ['inknot', 'tonkin'],\n 'tonna': ['anton', 'notan', 'tonna'],\n 'tonological': ['ontological', 'tonological'],\n 'tonology': ['ontology', 'tonology'],\n 'tonsorial': ['tonsorial', 'torsional'],\n 'tonsure': ['snouter', 'tonsure', 'unstore'],\n 'tonsured': ['tonsured', 'unsorted', 'unstored'],\n 'tontine': ['nettion', 'tention', 'tontine'],\n 'tonus': ['notus', 'snout', 'stoun', 'tonus'],\n 'tony': ['tony', 'yont'],\n 'too': ['oto', 'too'],\n 'toodle': ['toledo', 'toodle'],\n 'took': ['koto', 'toko', 'took'],\n 'tool': ['loot', 'tool'],\n 'tooler': ['looter', 'retool', 'rootle', 'tooler'],\n 'tooling': ['ilongot', 'tooling'],\n 'toom': ['moot', 'toom'],\n 'toon': ['onto', 'oont', 'toon'],\n 'toona': ['naoto', 'toona'],\n 'toop': ['poot', 'toop', 'topo'],\n 'toosh': ['shoot', 'sooth', 'sotho', 'toosh'],\n 'toot': ['otto', 'toot', 'toto'],\n 'toother': ['retooth', 'toother'],\n 'toothpick': ['picktooth', 'toothpick'],\n 'tootler': ['rootlet', 'tootler'],\n 'top': ['opt', 'pot', 'top'],\n 'toparch': ['caphtor', 'toparch'],\n 'topass': ['potass', 'topass'],\n 'topchrome': ['ectomorph', 'topchrome'],\n 'tope': ['peto', 'poet', 'pote', 'tope'],\n 'toper': ['poter', 'prote', 'repot', 'tepor', 'toper', 'trope'],\n 'topfull': ['plotful', 'topfull'],\n 'toph': ['phot', 'toph'],\n 'tophus': ['tophus', 'upshot'],\n 'topia': ['patio', 'taipo', 'topia'],\n 'topiarist': ['parotitis', 'topiarist'],\n 'topic': ['optic', 'picot', 'topic'],\n 'topical': ['capitol', 'coalpit', 'optical', 'topical'],\n 'topically': ['optically', 'topically'],\n 'toplike': ['kitlope', 'potlike', 'toplike'],\n 'topline': ['pointel', 'pontile', 'topline'],\n 'topmaker': ['potmaker', 'topmaker'],\n 'topmaking': ['potmaking', 'topmaking'],\n 'topman': ['potman', 'tampon', 'topman'],\n 'topmast': ['tapmost', 'topmast'],\n 'topo': ['poot', 'toop', 'topo'],\n 'topographics': ['coprophagist', 'topographics'],\n 'topography': ['optography', 'topography'],\n 'topological': ['optological', 'topological'],\n 'topologist': ['optologist', 'topologist'],\n 'topology': ['optology', 'topology'],\n 'toponymal': ['monotypal', 'toponymal'],\n 'toponymic': ['monotypic', 'toponymic'],\n 'toponymical': ['monotypical', 'toponymical'],\n 'topophone': ['optophone', 'topophone'],\n 'topotype': ['optotype', 'topotype'],\n 'topple': ['loppet', 'topple'],\n 'toppler': ['preplot', 'toppler'],\n 'toprail': ['portail', 'toprail'],\n 'tops': ['post', 'spot', 'stop', 'tops'],\n 'topsail': ['apostil', 'topsail'],\n 'topside': ['deposit', 'topside'],\n 'topsman': ['postman', 'topsman'],\n 'topsoil': ['loopist', 'poloist', 'topsoil'],\n 'topstone': ['potstone', 'topstone'],\n 'toptail': ['ptilota', 'talipot', 'toptail'],\n 'toque': ['quote', 'toque'],\n 'tor': ['ort', 'rot', 'tor'],\n 'tora': ['rota', 'taro', 'tora'],\n 'toral': ['latro', 'rotal', 'toral'],\n 'toran': ['orant', 'rotan', 'toran', 'trona'],\n 'torbanite': ['abortient', 'torbanite'],\n 'torcel': ['colter', 'lector', 'torcel'],\n 'torch': ['chort', 'rotch', 'torch'],\n 'tore': ['rote', 'tore'],\n 'tored': ['doter', 'tored', 'trode'],\n 'torenia': ['otarine', 'torenia'],\n 'torero': ['reroot', 'rooter', 'torero'],\n 'toreutics': ['tetricous', 'toreutics'],\n 'torfel': ['floret', 'forlet', 'lofter', 'torfel'],\n 'torgot': ['grotto', 'torgot'],\n 'toric': ['toric', 'troic'],\n 'torinese': ['serotine', 'torinese'],\n 'torma': ['amort', 'morat', 'torma'],\n 'tormen': ['mentor', 'merton', 'termon', 'tormen'],\n 'tormina': ['amintor', 'tormina'],\n 'torn': ['torn', 'tron'],\n 'tornachile': ['chlorinate', 'ectorhinal', 'tornachile'],\n 'tornado': ['donator', 'odorant', 'tornado'],\n 'tornal': ['latron', 'lontar', 'tornal'],\n 'tornaria': ['rotarian', 'tornaria'],\n 'tornarian': ['narration', 'tornarian'],\n 'tornese': ['enstore', 'estrone', 'storeen', 'tornese'],\n 'torney': ['torney', 'tyrone'],\n 'tornit': ['intort', 'tornit', 'triton'],\n 'tornus': ['tornus', 'unsort'],\n 'toro': ['root', 'roto', 'toro'],\n 'torose': ['seroot', 'sooter', 'torose'],\n 'torpent': ['portent', 'torpent'],\n 'torpescent': ['precontest', 'torpescent'],\n 'torpid': ['torpid', 'tripod'],\n 'torpify': ['portify', 'torpify'],\n 'torpor': ['portor', 'torpor'],\n 'torque': ['quoter', 'roquet', 'torque'],\n 'torques': ['questor', 'torques'],\n 'torrubia': ['rubiator', 'torrubia'],\n 'torsade': ['rosated', 'torsade'],\n 'torse': ['roset', 'rotse', 'soter', 'stero', 'store', 'torse'],\n 'torsel': ['relost', 'reslot', 'rostel', 'sterol', 'torsel'],\n 'torsile': ['estriol', 'torsile'],\n 'torsion': ['isotron', 'torsion'],\n 'torsional': ['tonsorial', 'torsional'],\n 'torsk': ['stork', 'torsk'],\n 'torso': ['roost', 'torso'],\n 'torsten': ['snotter', 'stentor', 'torsten'],\n 'tort': ['tort', 'trot'],\n 'torta': ['ottar', 'tarot', 'torta', 'troat'],\n 'torteau': ['outrate', 'outtear', 'torteau'],\n 'torticone': ['torticone', 'tritocone'],\n 'tortile': ['lotrite', 'tortile', 'triolet'],\n 'tortilla': ['littoral', 'tortilla'],\n 'tortonian': ['intonator', 'tortonian'],\n 'tortrices': ['tortrices', 'trisector'],\n 'torture': ['torture', 'trouter', 'tutorer'],\n 'toru': ['rout', 'toru', 'tour'],\n 'torula': ['rotula', 'torula'],\n 'torulaform': ['formulator', 'torulaform'],\n 'toruliform': ['rotuliform', 'toruliform'],\n 'torulose': ['outsoler', 'torulose'],\n 'torulus': ['rotulus', 'torulus'],\n 'torus': ['roust', 'rusot', 'stour', 'sutor', 'torus'],\n 'torve': ['overt', 'rovet', 'torve', 'trove', 'voter'],\n 'tory': ['royt', 'ryot', 'tory', 'troy', 'tyro'],\n 'toryish': ['history', 'toryish'],\n 'toryism': ['toryism', 'trisomy'],\n 'tosephtas': ['posthaste', 'tosephtas'],\n 'tosh': ['host', 'shot', 'thos', 'tosh'],\n 'tosher': ['hoster', 'tosher'],\n 'toshly': ['hostly', 'toshly'],\n 'toshnail': ['histonal', 'toshnail'],\n 'toss': ['sots', 'toss'],\n 'tosser': ['retoss', 'tosser'],\n 'tossily': ['tossily', 'tylosis'],\n 'tossup': ['tossup', 'uptoss'],\n 'tost': ['stot', 'tost'],\n 'total': ['lotta', 'total'],\n 'totanine': ['intonate', 'totanine'],\n 'totaquin': ['quintato', 'totaquin'],\n 'totchka': ['hattock', 'totchka'],\n 'totem': ['motet', 'motte', 'totem'],\n 'toter': ['ortet', 'otter', 'toter'],\n 'tother': ['hotter', 'tother'],\n 'toto': ['otto', 'toot', 'toto'],\n 'toty': ['toty', 'tyto'],\n 'tou': ['out', 'tou'],\n 'toucan': ['toucan', 'tucano', 'uncoat'],\n 'touch': ['couth', 'thuoc', 'touch'],\n 'toucher': ['retouch', 'toucher'],\n 'touchily': ['couthily', 'touchily'],\n 'touchiness': ['couthiness', 'touchiness'],\n 'touching': ['touching', 'ungothic'],\n 'touchless': ['couthless', 'touchless'],\n 'toug': ['gout', 'toug'],\n 'tough': ['ought', 'tough'],\n 'toughness': ['oughtness', 'toughness'],\n 'toup': ['pout', 'toup'],\n 'tour': ['rout', 'toru', 'tour'],\n 'tourer': ['retour', 'router', 'tourer'],\n 'touring': ['outgrin', 'outring', 'routing', 'touring'],\n 'tourism': ['sumitro', 'tourism'],\n 'touristy': ['touristy', 'yttrious'],\n 'tourmalinic': ['latrocinium', 'tourmalinic'],\n 'tournamental': ['tournamental', 'ultramontane'],\n 'tourte': ['tourte', 'touter'],\n 'tousche': ['souchet', 'techous', 'tousche'],\n 'touser': ['ouster', 'souter', 'touser', 'trouse'],\n 'tousle': ['lutose', 'solute', 'tousle'],\n 'touter': ['tourte', 'touter'],\n 'tovaria': ['aviator', 'tovaria'],\n 'tow': ['tow', 'two', 'wot'],\n 'towel': ['owlet', 'towel'],\n 'tower': ['rowet', 'tower', 'wrote'],\n 'town': ['nowt', 'town', 'wont'],\n 'towned': ['towned', 'wonted'],\n 'towser': ['restow', 'stower', 'towser', 'worset'],\n 'towy': ['towy', 'yowt'],\n 'toxemia': ['oximate', 'toxemia'],\n 'toy': ['toy', 'yot'],\n 'toyer': ['royet', 'toyer'],\n 'toyful': ['outfly', 'toyful'],\n 'toyless': ['systole', 'toyless'],\n 'toysome': ['myosote', 'toysome'],\n 'tozer': ['terzo', 'tozer'],\n 'tra': ['art', 'rat', 'tar', 'tra'],\n 'trabea': ['abater', 'artabe', 'eartab', 'trabea'],\n 'trace': ['caret',\n           'carte',\n           'cater',\n           'crate',\n           'creat',\n           'creta',\n           'react',\n           'recta',\n           'trace'],\n 'traceable': ['creatable', 'traceable'],\n 'tracer': ['arrect', 'carter', 'crater', 'recart', 'tracer'],\n 'tracheata': ['cathartae', 'tracheata'],\n 'trachelitis': ['thersitical', 'trachelitis'],\n 'tracheolaryngotomy': ['laryngotracheotomy', 'tracheolaryngotomy'],\n 'trachinoid': ['anhidrotic', 'trachinoid'],\n 'trachitis': ['citharist', 'trachitis'],\n 'trachle': ['clethra', 'latcher', 'ratchel', 'relatch', 'talcher', 'trachle'],\n 'trachoma': ['achromat', 'trachoma'],\n 'trachylinae': ['chatelainry', 'trachylinae'],\n 'trachyte': ['chattery', 'ratchety', 'trachyte'],\n 'tracker': ['retrack', 'tracker'],\n 'trackside': ['sidetrack', 'trackside'],\n 'tractator': ['attractor', 'tractator'],\n 'tractile': ['tetrical', 'tractile'],\n 'tracy': ['carty', 'tracy'],\n 'trade': ['dater', 'derat', 'detar', 'drate', 'rated', 'trade', 'tread'],\n 'trader': ['darter',\n            'dartre',\n            'redart',\n            'retard',\n            'retrad',\n            'tarred',\n            'trader'],\n 'trading': ['darting', 'trading'],\n 'tradite': ['attired', 'tradite'],\n 'traditioner': ['retradition', 'traditioner'],\n 'traditionism': ['mistradition', 'traditionism'],\n 'traditorship': ['podarthritis', 'traditorship'],\n 'traducent': ['reductant', 'traducent', 'truncated'],\n 'trady': ['tardy', 'trady'],\n 'trag': ['grat', 'trag'],\n 'tragedial': ['taligrade', 'tragedial'],\n 'tragicomedy': ['comitragedy', 'tragicomedy'],\n 'tragulina': ['tragulina', 'triangula'],\n 'traguline': ['granulite', 'traguline'],\n 'trah': ['hart', 'rath', 'tahr', 'thar', 'trah'],\n 'traheen': ['earthen', 'enheart', 'hearten', 'naether', 'teheran', 'traheen'],\n 'traik': ['kitar', 'krait', 'rakit', 'traik'],\n 'trail': ['litra', 'trail', 'trial'],\n 'trailer': ['retiral', 'retrial', 'trailer'],\n 'trailery': ['literary', 'trailery'],\n 'trailing': ['ringtail', 'trailing'],\n 'trailside': ['dialister', 'trailside'],\n 'train': ['riant', 'tairn', 'tarin', 'train'],\n 'trainable': ['albertina', 'trainable'],\n 'trainage': ['antiager', 'trainage'],\n 'trainboy': ['bonitary', 'trainboy'],\n 'trained': ['antired', 'detrain', 'randite', 'trained'],\n 'trainee': ['enteria', 'trainee', 'triaene'],\n 'trainer': ['arterin', 'retrain', 'terrain', 'trainer'],\n 'trainless': ['sternalis', 'trainless'],\n 'trainster': ['restraint', 'retransit', 'trainster', 'transiter'],\n 'traintime': ['intimater', 'traintime'],\n 'trainy': ['rytina', 'trainy', 'tyrian'],\n 'traipse': ['piaster', 'piastre', 'raspite', 'spirate', 'traipse'],\n 'trait': ['ratti', 'titar', 'trait'],\n 'tram': ['mart', 'tram'],\n 'trama': ['matar', 'matra', 'trama'],\n 'tramal': ['matral', 'tramal'],\n 'trame': ['armet',\n           'mater',\n           'merat',\n           'metra',\n           'ramet',\n           'tamer',\n           'terma',\n           'trame',\n           'trema'],\n 'trametes': ['teamster', 'trametes'],\n 'tramline': ['terminal', 'tramline'],\n 'tramper': ['retramp', 'tramper'],\n 'trample': ['templar', 'trample'],\n 'trampoline': ['intemporal', 'trampoline'],\n 'tran': ['natr', 'rant', 'tarn', 'tran'],\n 'trance': ['canter',\n            'creant',\n            'cretan',\n            'nectar',\n            'recant',\n            'tanrec',\n            'trance'],\n 'tranced': ['cantred', 'centrad', 'tranced'],\n 'trancelike': ['nectarlike', 'trancelike'],\n 'trankum': ['trankum', 'turkman'],\n 'transamination': ['transamination', 'transanimation'],\n 'transanimation': ['transamination', 'transanimation'],\n 'transept': ['prestant', 'transept'],\n 'transeptally': ['platysternal', 'transeptally'],\n 'transformer': ['retransform', 'transformer'],\n 'transfuge': ['afterguns', 'transfuge'],\n 'transient': ['instanter', 'transient'],\n 'transigent': ['astringent', 'transigent'],\n 'transimpression': ['pretransmission', 'transimpression'],\n 'transire': ['restrain', 'strainer', 'transire'],\n 'transit': ['straint', 'transit', 'tristan'],\n 'transiter': ['restraint', 'retransit', 'trainster', 'transiter'],\n 'transitive': ['revisitant', 'transitive'],\n 'transmarine': ['strainerman', 'transmarine'],\n 'transmit': ['tantrism', 'transmit'],\n 'transmold': ['landstorm', 'transmold'],\n 'transoceanic': ['narcaciontes', 'transoceanic'],\n 'transonic': ['constrain', 'transonic'],\n 'transpire': ['prestrain', 'transpire'],\n 'transplanter': ['retransplant', 'transplanter'],\n 'transportee': ['paternoster', 'prosternate', 'transportee'],\n 'transporter': ['retransport', 'transporter'],\n 'transpose': ['patroness', 'transpose'],\n 'transposer': ['transposer', 'transprose'],\n 'transprose': ['transposer', 'transprose'],\n 'trap': ['part', 'prat', 'rapt', 'tarp', 'trap'],\n 'trapa': ['apart', 'trapa'],\n 'trapes': ['paster', 'repast', 'trapes'],\n 'trapfall': ['pratfall', 'trapfall'],\n 'traphole': ['plethora', 'traphole'],\n 'trappean': ['apparent', 'trappean'],\n 'traps': ['spart', 'sprat', 'strap', 'traps'],\n 'traship': ['harpist', 'traship'],\n 'trasy': ['satyr', 'stary', 'stray', 'trasy'],\n 'traulism': ['altruism', 'muralist', 'traulism', 'ultraism'],\n 'trauma': ['taruma', 'trauma'],\n 'travale': ['larvate', 'lavaret', 'travale'],\n 'trave': ['avert', 'tarve', 'taver', 'trave'],\n 'travel': ['travel', 'varlet'],\n 'traveler': ['retravel', 'revertal', 'traveler'],\n 'traversion': ['overstrain', 'traversion'],\n 'travertine': ['travertine', 'trinervate'],\n 'travoy': ['travoy', 'votary'],\n 'tray': ['arty', 'atry', 'tray'],\n 'treacle': ['electra', 'treacle'],\n 'tread': ['dater', 'derat', 'detar', 'drate', 'rated', 'trade', 'tread'],\n 'treader': ['derater', 'retrade', 'retread', 'treader'],\n 'treading': ['gradient', 'treading'],\n 'treadle': ['delater', 'related', 'treadle'],\n 'treason': ['noreast', 'rosetan', 'seatron', 'senator', 'treason'],\n 'treasonish': ['astonisher', 'reastonish', 'treasonish'],\n 'treasonist': ['steatornis', 'treasonist'],\n 'treasonous': ['anoestrous', 'treasonous'],\n 'treasurer': ['serrature', 'treasurer'],\n 'treat': ['atter', 'tater', 'teart', 'tetra', 'treat'],\n 'treatably': ['tabletary', 'treatably'],\n 'treatee': ['ateeter', 'treatee'],\n 'treater': ['ettarre', 'retreat', 'treater'],\n 'treatise': ['estriate', 'treatise'],\n 'treaty': ['attery', 'treaty', 'yatter'],\n 'treble': ['belter', 'elbert', 'treble'],\n 'treculia': ['arculite', 'cutleria', 'lucretia', 'reticula', 'treculia'],\n 'tree': ['reet', 'teer', 'tree'],\n 'treed': ['deter', 'treed'],\n 'treeful': ['fleuret', 'treeful'],\n 'treehood': ['theodore', 'treehood'],\n 'treemaker': ['marketeer', 'treemaker'],\n 'treeman': ['remanet', 'remeant', 'treeman'],\n 'treen': ['enter', 'neter', 'renet', 'terne', 'treen'],\n 'treenail': ['elaterin', 'entailer', 'treenail'],\n 'treeship': ['hepteris', 'treeship'],\n 'tref': ['fret', 'reft', 'tref'],\n 'trefle': ['felter', 'telfer', 'trefle'],\n 'trellis': ['stiller', 'trellis'],\n 'trema': ['armet',\n           'mater',\n           'merat',\n           'metra',\n           'ramet',\n           'tamer',\n           'terma',\n           'trame',\n           'trema'],\n 'trematoid': ['meditator', 'trematoid'],\n 'tremella': ['realmlet', 'tremella'],\n 'tremie': ['metier', 'retime', 'tremie'],\n 'tremolo': ['roomlet', 'tremolo'],\n 'tremor': ['termor', 'tremor'],\n 'trenail': ['entrail',\n             'latiner',\n             'latrine',\n             'ratline',\n             'reliant',\n             'retinal',\n             'trenail'],\n 'trenchant': ['centranth', 'trenchant'],\n 'trencher': ['retrench', 'trencher'],\n 'trenchmaster': ['stretcherman', 'trenchmaster'],\n 'trenchwise': ['trenchwise', 'winchester'],\n 'trentine': ['renitent', 'trentine'],\n 'trepan': ['arpent',\n            'enrapt',\n            'entrap',\n            'panter',\n            'parent',\n            'pretan',\n            'trepan'],\n 'trephine': ['nephrite', 'prehnite', 'trephine'],\n 'trepid': ['dipter', 'trepid'],\n 'trepidation': ['departition', 'partitioned', 'trepidation'],\n 'treron': ['terron', 'treron', 'troner'],\n 'treronidae': ['reordinate', 'treronidae'],\n 'tressed': ['dessert', 'tressed'],\n 'tressful': ['tressful', 'turfless'],\n 'tressour': ['tressour', 'trousers'],\n 'trest': ['stert', 'stret', 'trest'],\n 'trestle': ['settler', 'sterlet', 'trestle'],\n 'trevor': ['trevor', 'trover'],\n 'trews': ['strew', 'trews', 'wrest'],\n 'trey': ['trey', 'tyre'],\n 'tri': ['rit', 'tri'],\n 'triable': ['betrail', 'librate', 'triable', 'trilabe'],\n 'triace': ['acrite', 'arcite', 'tercia', 'triace', 'tricae'],\n 'triacid': ['arctiid', 'triacid', 'triadic'],\n 'triacontane': ['recantation', 'triacontane'],\n 'triaconter': ['retraction', 'triaconter'],\n 'triactine': ['intricate', 'triactine'],\n 'triadic': ['arctiid', 'triacid', 'triadic'],\n 'triadical': ['raticidal', 'triadical'],\n 'triadist': ['distrait', 'triadist'],\n 'triaene': ['enteria', 'trainee', 'triaene'],\n 'triage': ['gaiter', 'tairge', 'triage'],\n 'trial': ['litra', 'trail', 'trial'],\n 'trialism': ['mistrial', 'trialism'],\n 'trialist': ['taistril', 'trialist'],\n 'triamide': ['dimetria', 'mitridae', 'tiremaid', 'triamide'],\n 'triamino': ['miniator', 'triamino'],\n 'triandria': ['irradiant', 'triandria'],\n 'triangle': ['integral', 'teraglin', 'triangle'],\n 'triangula': ['tragulina', 'triangula'],\n 'triannual': ['innatural', 'triannual'],\n 'triannulate': ['antineutral', 'triannulate'],\n 'triantelope': ['interpolate', 'triantelope'],\n 'triapsidal': ['lapidarist', 'triapsidal'],\n 'triareal': ['arterial', 'triareal'],\n 'trias': ['arist',\n           'astir',\n           'sitar',\n           'stair',\n           'stria',\n           'tarsi',\n           'tisar',\n           'trias'],\n 'triassic': ['sarcitis', 'triassic'],\n 'triazane': ['nazarite', 'nazirate', 'triazane'],\n 'triazine': ['nazirite', 'triazine'],\n 'tribade': ['redbait', 'tribade'],\n 'tribase': ['baister', 'tribase'],\n 'tribe': ['biter', 'tribe'],\n 'tribelet': ['belitter', 'tribelet'],\n 'triblet': ['blitter', 'brittle', 'triblet'],\n 'tribonema': ['brominate', 'tribonema'],\n 'tribuna': ['arbutin', 'tribuna'],\n 'tribunal': ['tribunal', 'turbinal', 'untribal'],\n 'tribunate': ['tribunate', 'turbinate'],\n 'tribune': ['tribune', 'tuberin', 'turbine'],\n 'tricae': ['acrite', 'arcite', 'tercia', 'triace', 'tricae'],\n 'trice': ['citer', 'recti', 'ticer', 'trice'],\n 'tricennial': ['encrinital', 'tricennial'],\n 'triceratops': ['tetrasporic', 'triceratops'],\n 'triceria': ['criteria', 'triceria'],\n 'tricerion': ['criterion', 'tricerion'],\n 'tricerium': ['criterium', 'tricerium'],\n 'trichinous': ['trichinous', 'unhistoric'],\n 'trichogyne': ['thyrogenic', 'trichogyne'],\n 'trichoid': ['hidrotic', 'trichoid'],\n 'trichomanes': ['anchoretism', 'trichomanes'],\n 'trichome': ['chromite', 'trichome'],\n 'trichopore': ['horopteric', 'rheotropic', 'trichopore'],\n 'trichosis': ['historics', 'trichosis'],\n 'trichosporum': ['sporotrichum', 'trichosporum'],\n 'trichroic': ['cirrhotic', 'trichroic'],\n 'trichroism': ['trichroism', 'triorchism'],\n 'trichromic': ['microcrith', 'trichromic'],\n 'tricia': ['iatric', 'tricia'],\n 'trickle': ['tickler', 'trickle'],\n 'triclinate': ['intractile', 'triclinate'],\n 'tricolumnar': ['tricolumnar', 'ultramicron'],\n 'tricosane': ['atroscine', 'certosina', 'ostracine', 'tinoceras', 'tricosane'],\n 'tridacna': ['antacrid', 'cardiant', 'radicant', 'tridacna'],\n 'tridecane': ['nectaried', 'tridecane'],\n 'tridecene': ['intercede', 'tridecene'],\n 'tridecyl': ['directly', 'tridecyl'],\n 'tridiapason': ['disparation', 'tridiapason'],\n 'tried': ['diter', 'tired', 'tried'],\n 'triedly': ['tiredly', 'triedly'],\n 'triene': ['entire', 'triene'],\n 'triens': ['estrin', 'insert', 'sinter', 'sterin', 'triens'],\n 'triental': ['tetralin', 'triental'],\n 'triequal': ['quartile', 'requital', 'triequal'],\n 'trier': ['terri', 'tirer', 'trier'],\n 'trifle': ['fertil', 'filter', 'lifter', 'relift', 'trifle'],\n 'trifler': ['flirter', 'trifler'],\n 'triflet': ['flitter', 'triflet'],\n 'trifling': ['flirting', 'trifling'],\n 'triflingly': ['flirtingly', 'triflingly'],\n 'trifolium': ['lituiform', 'trifolium'],\n 'trig': ['girt', 'grit', 'trig'],\n 'trigona': ['grotian', 'trigona'],\n 'trigone': ['ergotin', 'genitor', 'negrito', 'ogtiern', 'trigone'],\n 'trigonia': ['rigation', 'trigonia'],\n 'trigonid': ['trigonid', 'tringoid'],\n 'trigyn': ['trigyn', 'trying'],\n 'trilabe': ['betrail', 'librate', 'triable', 'trilabe'],\n 'trilineate': ['retinalite', 'trilineate'],\n 'trilisa': ['liatris', 'trilisa'],\n 'trillet': ['rillett', 'trillet'],\n 'trilobate': ['latrobite', 'trilobate'],\n 'trilobated': ['titleboard', 'trilobated'],\n 'trimacular': ['matricular', 'trimacular'],\n 'trimensual': ['neutralism', 'trimensual'],\n 'trimer': ['mitrer', 'retrim', 'trimer'],\n 'trimesic': ['meristic', 'trimesic', 'trisemic'],\n 'trimesitinic': ['interimistic', 'trimesitinic'],\n 'trimesyl': ['trimesyl', 'tylerism'],\n 'trimeter': ['remitter', 'trimeter'],\n 'trimstone': ['sortiment', 'trimstone'],\n 'trinalize': ['latinizer', 'trinalize'],\n 'trindle': ['tendril', 'trindle'],\n 'trine': ['inert', 'inter', 'niter', 'retin', 'trine'],\n 'trinely': ['elytrin', 'inertly', 'trinely'],\n 'trinervate': ['travertine', 'trinervate'],\n 'trinerve': ['inverter', 'reinvert', 'trinerve'],\n 'trineural': ['retinular', 'trineural'],\n 'tringa': ['rating', 'tringa'],\n 'tringle': ['ringlet', 'tingler', 'tringle'],\n 'tringoid': ['trigonid', 'tringoid'],\n 'trinket': ['knitter', 'trinket'],\n 'trinkle': ['tinkler', 'trinkle'],\n 'trinoctial': ['tinctorial', 'trinoctial'],\n 'trinodine': ['rendition', 'trinodine'],\n 'trintle': ['lettrin', 'trintle'],\n 'trio': ['riot', 'roit', 'trio'],\n 'triode': ['editor', 'triode'],\n 'trioecism': ['eroticism', 'isometric', 'meroistic', 'trioecism'],\n 'triole': ['loiter', 'toiler', 'triole'],\n 'trioleic': ['elicitor', 'trioleic'],\n 'triolet': ['lotrite', 'tortile', 'triolet'],\n 'trionymal': ['normality', 'trionymal'],\n 'triopidae': ['poritidae', 'triopidae'],\n 'triops': ['ripost', 'triops', 'tripos'],\n 'triorchism': ['trichroism', 'triorchism'],\n 'triose': ['restio', 'sorite', 'sortie', 'triose'],\n 'tripe': ['perit', 'retip', 'tripe'],\n 'tripedal': ['dipteral', 'tripedal'],\n 'tripel': ['tripel', 'triple'],\n 'tripeman': ['imperant', 'pairment', 'partimen', 'premiant', 'tripeman'],\n 'tripersonal': ['intersporal', 'tripersonal'],\n 'tripestone': ['septentrio', 'tripestone'],\n 'triphane': ['perianth', 'triphane'],\n 'triplane': ['interlap', 'repliant', 'triplane'],\n 'triplasian': ['airplanist', 'triplasian'],\n 'triplasic': ['pilastric', 'triplasic'],\n 'triple': ['tripel', 'triple'],\n 'triplice': ['perlitic', 'triplice'],\n 'triplopia': ['propitial', 'triplopia'],\n 'tripod': ['torpid', 'tripod'],\n 'tripodal': ['dioptral', 'tripodal'],\n 'tripodic': ['dioptric', 'tripodic'],\n 'tripodical': ['dioptrical', 'tripodical'],\n 'tripody': ['dioptry', 'tripody'],\n 'tripos': ['ripost', 'triops', 'tripos'],\n 'trippist': ['strippit', 'trippist'],\n 'tripple': ['ripplet', 'tippler', 'tripple'],\n 'tripsis': ['pristis', 'tripsis'],\n 'tripsome': ['imposter', 'tripsome'],\n 'tripudiant': ['antiputrid', 'tripudiant'],\n 'tripyrenous': ['neurotripsy', 'tripyrenous'],\n 'triratna': ['tartarin', 'triratna'],\n 'trireme': ['meriter', 'miterer', 'trireme'],\n 'trisalt': ['starlit', 'trisalt'],\n 'trisected': ['decretist', 'trisected'],\n 'trisector': ['tortrices', 'trisector'],\n 'trisemic': ['meristic', 'trimesic', 'trisemic'],\n 'trisetose': ['esoterist', 'trisetose'],\n 'trishna': ['tarnish', 'trishna'],\n 'trisilane': ['listerian', 'trisilane'],\n 'triskele': ['kreistle', 'triskele'],\n 'trismus': ['sistrum', 'trismus'],\n 'trisome': ['erotism', 'mortise', 'trisome'],\n 'trisomy': ['toryism', 'trisomy'],\n 'trisonant': ['strontian', 'trisonant'],\n 'trispinose': ['pirssonite', 'trispinose'],\n 'trist': ['strit', 'trist'],\n 'tristan': ['straint', 'transit', 'tristan'],\n 'trisula': ['latirus', 'trisula'],\n 'trisulcate': ['testicular', 'trisulcate'],\n 'tritanope': ['antitrope', 'patronite', 'tritanope'],\n 'tritanopic': ['antitropic', 'tritanopic'],\n 'trite': ['titer', 'titre', 'trite'],\n 'tritely': ['littery', 'tritely'],\n 'triterpene': ['preterient', 'triterpene'],\n 'tritheism': ['tiresmith', 'tritheism'],\n 'trithionate': ['anorthitite', 'trithionate'],\n 'tritocone': ['torticone', 'tritocone'],\n 'tritoma': ['mattoir', 'tritoma'],\n 'triton': ['intort', 'tornit', 'triton'],\n 'triune': ['runite', 'triune', 'uniter', 'untire'],\n 'trivalence': ['cantilever', 'trivalence'],\n 'trivial': ['trivial', 'vitrail'],\n 'trivialist': ['trivialist', 'vitrailist'],\n 'troat': ['ottar', 'tarot', 'torta', 'troat'],\n 'troca': ['actor', 'corta', 'croat', 'rocta', 'taroc', 'troca'],\n 'trocar': ['carrot', 'trocar'],\n 'trochaic': ['thoracic', 'tocharic', 'trochaic'],\n 'trochate': ['theocrat', 'trochate'],\n 'troche': ['hector', 'rochet', 'tocher', 'troche'],\n 'trochi': ['chorti', 'orthic', 'thoric', 'trochi'],\n 'trochidae': ['charioted', 'trochidae'],\n 'trochila': ['acrolith', 'trochila'],\n 'trochilic': ['chloritic', 'trochilic'],\n 'trochlea': ['chlorate', 'trochlea'],\n 'trochlearis': ['rhetoricals', 'trochlearis'],\n 'trode': ['doter', 'tored', 'trode'],\n 'trog': ['grot', 'trog'],\n 'trogonidae': ['derogation', 'trogonidae'],\n 'troiades': ['asteroid', 'troiades'],\n 'troic': ['toric', 'troic'],\n 'troika': ['korait', 'troika'],\n 'trolley': ['tollery', 'trolley'],\n 'tromba': ['tambor', 'tromba'],\n 'trombe': ['retomb', 'trombe'],\n 'trompe': ['emptor', 'trompe'],\n 'tron': ['torn', 'tron'],\n 'trona': ['orant', 'rotan', 'toran', 'trona'],\n 'tronage': ['negator', 'tronage'],\n 'trone': ['noter', 'tenor', 'toner', 'trone'],\n 'troner': ['terron', 'treron', 'troner'],\n 'troop': ['porto', 'proto', 'troop'],\n 'trooper': ['protore', 'trooper'],\n 'tropaeolum': ['pleurotoma', 'tropaeolum'],\n 'tropaion': ['opinator', 'tropaion'],\n 'tropal': ['patrol', 'portal', 'tropal'],\n 'troparion': ['proration', 'troparion'],\n 'tropary': ['parroty', 'portray', 'tropary'],\n 'trope': ['poter', 'prote', 'repot', 'tepor', 'toper', 'trope'],\n 'tropeic': ['perotic', 'proteic', 'tropeic'],\n 'tropeine': ['ereption', 'tropeine'],\n 'troper': ['porret', 'porter', 'report', 'troper'],\n 'trophema': ['metaphor', 'trophema'],\n 'trophesial': ['hospitaler', 'trophesial'],\n 'trophical': ['carpolith', 'politarch', 'trophical'],\n 'trophodisc': ['doctorship', 'trophodisc'],\n 'trophonema': ['homopteran', 'trophonema'],\n 'trophotropic': ['prototrophic', 'trophotropic'],\n 'tropical': ['plicator', 'tropical'],\n 'tropically': ['polycitral', 'tropically'],\n 'tropidine': ['direption', 'perdition', 'tropidine'],\n 'tropine': ['pointer', 'protein', 'pterion', 'repoint', 'tropine'],\n 'tropism': ['primost', 'tropism'],\n 'tropist': ['protist', 'tropist'],\n 'tropistic': ['proctitis', 'protistic', 'tropistic'],\n 'tropophyte': ['protophyte', 'tropophyte'],\n 'tropophytic': ['protophytic', 'tropophytic'],\n 'tropyl': ['portly', 'protyl', 'tropyl'],\n 'trostera': ['rostrate', 'trostera'],\n 'trot': ['tort', 'trot'],\n 'troth': ['thort', 'troth'],\n 'trotline': ['interlot', 'trotline'],\n 'trouble': ['boulter', 'trouble'],\n 'troughy': ['troughy', 'yoghurt'],\n 'trounce': ['cornute', 'counter', 'recount', 'trounce'],\n 'troupe': ['pouter', 'roupet', 'troupe'],\n 'trouse': ['ouster', 'souter', 'touser', 'trouse'],\n 'trouser': ['rouster', 'trouser'],\n 'trouserian': ['souterrain', 'ternarious', 'trouserian'],\n 'trousers': ['tressour', 'trousers'],\n 'trout': ['trout', 'tutor'],\n 'trouter': ['torture', 'trouter', 'tutorer'],\n 'troutless': ['troutless', 'tutorless'],\n 'trouty': ['trouty', 'tryout', 'tutory'],\n 'trouvere': ['overtrue', 'overture', 'trouvere'],\n 'trove': ['overt', 'rovet', 'torve', 'trove', 'voter'],\n 'trover': ['trevor', 'trover'],\n 'trow': ['trow', 'wort'],\n 'trowel': ['rowlet', 'trowel', 'wolter'],\n 'troy': ['royt', 'ryot', 'tory', 'troy', 'tyro'],\n 'truandise': ['disnature', 'sturnidae', 'truandise'],\n 'truant': ['truant', 'turtan'],\n 'trub': ['brut', 'burt', 'trub', 'turb'],\n 'trubu': ['burut', 'trubu'],\n 'truce': ['cruet', 'eruct', 'recut', 'truce'],\n 'truceless': ['cutleress', 'lecturess', 'truceless'],\n 'trucial': ['curtail', 'trucial'],\n 'trucks': ['struck', 'trucks'],\n 'truculent': ['truculent', 'unclutter'],\n 'truelove': ['revolute', 'truelove'],\n 'truffle': ['fretful', 'truffle'],\n 'trug': ['gurt', 'trug'],\n 'truistical': ['altruistic', 'truistical', 'ultraistic'],\n 'truly': ['rutyl', 'truly'],\n 'trumperiness': ['surprisement', 'trumperiness'],\n 'trumpie': ['imputer', 'trumpie'],\n 'trun': ['runt', 'trun', 'turn'],\n 'truncated': ['reductant', 'traducent', 'truncated'],\n 'trundle': ['rundlet', 'trundle'],\n 'trush': ['hurst', 'trush'],\n 'trusion': ['nitrous', 'trusion'],\n 'trust': ['strut', 'sturt', 'trust'],\n 'trustee': ['surette', 'trustee'],\n 'trusteeism': ['sestertium', 'trusteeism'],\n 'trusten': ['entrust', 'stunter', 'trusten'],\n 'truster': ['retrust', 'truster'],\n 'trustle': ['slutter', 'trustle'],\n 'truth': ['thurt', 'truth'],\n 'trying': ['trigyn', 'trying'],\n 'tryma': ['marty', 'tryma'],\n 'tryout': ['trouty', 'tryout', 'tutory'],\n 'trypa': ['party', 'trypa'],\n 'trypan': ['pantry', 'trypan'],\n 'tryptase': ['tapestry', 'tryptase'],\n 'tsar': ['sart', 'star', 'stra', 'tars', 'tsar'],\n 'tsardom': ['stardom', 'tsardom'],\n 'tsarina': ['artisan', 'astrain', 'sartain', 'tsarina'],\n 'tsarship': ['starship', 'tsarship'],\n 'tsatlee': ['atelets', 'tsatlee'],\n 'tsere': ['ester',\n           'estre',\n           'reest',\n           'reset',\n           'steer',\n           'stere',\n           'stree',\n           'terse',\n           'tsere'],\n 'tsetse': ['sestet', 'testes', 'tsetse'],\n 'tshi': ['hist', 'sith', 'this', 'tshi'],\n 'tsia': ['atis', 'sita', 'tsia'],\n 'tsine': ['inset', 'neist', 'snite', 'stein', 'stine', 'tsine'],\n 'tsiology': ['sitology', 'tsiology'],\n 'tsoneca': ['costean', 'tsoneca'],\n 'tsonecan': ['noncaste', 'tsonecan'],\n 'tsuga': ['agust', 'tsuga'],\n 'tsuma': ['matsu', 'tamus', 'tsuma'],\n 'tsun': ['stun', 'sunt', 'tsun'],\n 'tu': ['tu', 'ut'],\n 'tua': ['tau', 'tua', 'uta'],\n 'tuan': ['antu', 'aunt', 'naut', 'taun', 'tuan', 'tuna'],\n 'tuareg': ['argute', 'guetar', 'rugate', 'tuareg'],\n 'tuarn': ['arnut', 'tuarn', 'untar'],\n 'tub': ['but', 'tub'],\n 'tuba': ['abut', 'tabu', 'tuba'],\n 'tubae': ['butea', 'taube', 'tubae'],\n 'tubal': ['balut', 'tubal'],\n 'tubar': ['bruta', 'tubar'],\n 'tubate': ['battue', 'tubate'],\n 'tube': ['bute', 'tebu', 'tube'],\n 'tuber': ['brute', 'buret', 'rebut', 'tuber'],\n 'tubercula': ['lucubrate', 'tubercula'],\n 'tuberin': ['tribune', 'tuberin', 'turbine'],\n 'tuberless': ['butleress', 'tuberless'],\n 'tublet': ['buttle', 'tublet'],\n 'tuboovarial': ['ovariotubal', 'tuboovarial'],\n 'tucana': ['canaut', 'tucana'],\n 'tucano': ['toucan', 'tucano', 'uncoat'],\n 'tuchun': ['tuchun', 'uncuth'],\n 'tucker': ['retuck', 'tucker'],\n 'tue': ['tue', 'ute'],\n 'tueiron': ['routine', 'tueiron'],\n 'tug': ['gut', 'tug'],\n 'tughra': ['raught', 'tughra'],\n 'tugless': ['gutless', 'tugless'],\n 'tuglike': ['gutlike', 'tuglike'],\n 'tugman': ['tangum', 'tugman'],\n 'tuism': ['muist', 'tuism'],\n 'tuke': ['ketu', 'teuk', 'tuke'],\n 'tukra': ['kraut', 'tukra'],\n 'tulare': ['tulare', 'uretal'],\n 'tulasi': ['situal', 'situla', 'tulasi'],\n 'tulchan': ['tulchan', 'unlatch'],\n 'tule': ['lute', 'tule'],\n 'tulipa': ['tipula', 'tulipa'],\n 'tulisan': ['latinus', 'tulisan', 'unalist'],\n 'tulsi': ['litus', 'sluit', 'tulsi'],\n 'tumbler': ['tumbler', 'tumbrel'],\n 'tumbrel': ['tumbler', 'tumbrel'],\n 'tume': ['mute', 'tume'],\n 'tumescence': ['mutescence', 'tumescence'],\n 'tumorous': ['mortuous', 'tumorous'],\n 'tumulary': ['mutulary', 'tumulary'],\n 'tun': ['nut', 'tun'],\n 'tuna': ['antu', 'aunt', 'naut', 'taun', 'tuan', 'tuna'],\n 'tunable': ['abluent', 'tunable'],\n 'tunbellied': ['tunbellied', 'unbilleted'],\n 'tunca': ['tunca', 'unact'],\n 'tund': ['dunt', 'tund'],\n 'tunder': ['runted', 'tunder', 'turned'],\n 'tundra': ['durant', 'tundra'],\n 'tuner': ['enrut', 'tuner', 'urent'],\n 'tunga': ['gaunt', 'tunga'],\n 'tungan': ['tangun', 'tungan'],\n 'tungate': ['tungate', 'tutenag'],\n 'tungo': ['tungo', 'ungot'],\n 'tungstosilicate': ['silicotungstate', 'tungstosilicate'],\n 'tungstosilicic': ['silicotungstic', 'tungstosilicic'],\n 'tunic': ['cutin', 'incut', 'tunic'],\n 'tunica': ['anicut', 'nautic', 'ticuna', 'tunica'],\n 'tunican': ['ticunan', 'tunican'],\n 'tunicary': ['nycturia', 'tunicary'],\n 'tunicle': ['linecut', 'tunicle'],\n 'tunicless': ['lentiscus', 'tunicless'],\n 'tunist': ['suttin', 'tunist'],\n 'tunk': ['knut', 'tunk'],\n 'tunker': ['tunker', 'turken'],\n 'tunlike': ['nutlike', 'tunlike'],\n 'tunna': ['naunt', 'tunna'],\n 'tunnel': ['nunlet', 'tunnel', 'unlent'],\n 'tunnelman': ['annulment', 'tunnelman'],\n 'tunner': ['runnet', 'tunner', 'unrent'],\n 'tunnor': ['tunnor', 'untorn'],\n 'tuno': ['tuno', 'unto'],\n 'tup': ['put', 'tup'],\n 'tur': ['rut', 'tur'],\n 'turacin': ['curtain', 'turacin', 'turcian'],\n 'turanian': ['nutarian', 'turanian'],\n 'turanism': ['naturism', 'sturmian', 'turanism'],\n 'turb': ['brut', 'burt', 'trub', 'turb'],\n 'turban': ['tanbur', 'turban'],\n 'turbaned': ['breadnut', 'turbaned'],\n 'turbanless': ['substernal', 'turbanless'],\n 'turbeh': ['hubert', 'turbeh'],\n 'turbinal': ['tribunal', 'turbinal', 'untribal'],\n 'turbinate': ['tribunate', 'turbinate'],\n 'turbine': ['tribune', 'tuberin', 'turbine'],\n 'turbined': ['turbined', 'underbit'],\n 'turcian': ['curtain', 'turacin', 'turcian'],\n 'turco': ['court', 'crout', 'turco'],\n 'turcoman': ['courtman', 'turcoman'],\n 'turdinae': ['indurate', 'turdinae'],\n 'turdine': ['intrude', 'turdine', 'untired', 'untried'],\n 'tureen': ['neuter', 'retune', 'runtee', 'tenure', 'tureen'],\n 'turfed': ['dufter', 'turfed'],\n 'turfen': ['turfen', 'unfret'],\n 'turfless': ['tressful', 'turfless'],\n 'turgent': ['grutten', 'turgent'],\n 'turk': ['kurt', 'turk'],\n 'turken': ['tunker', 'turken'],\n 'turki': ['tikur', 'turki'],\n 'turkman': ['trankum', 'turkman'],\n 'turma': ['martu', 'murat', 'turma'],\n 'turn': ['runt', 'trun', 'turn'],\n 'turndown': ['downturn', 'turndown'],\n 'turned': ['runted', 'tunder', 'turned'],\n 'turnel': ['runlet', 'turnel'],\n 'turner': ['return', 'turner'],\n 'turnhall': ['turnhall', 'unthrall'],\n 'turnout': ['outturn', 'turnout'],\n 'turnover': ['overturn', 'turnover'],\n 'turnpin': ['turnpin', 'unprint'],\n 'turns': ['snurt', 'turns'],\n 'turntail': ['rutilant', 'turntail'],\n 'turnup': ['turnup', 'upturn'],\n 'turp': ['prut', 'turp'],\n 'turpid': ['putrid', 'turpid'],\n 'turpidly': ['putridly', 'turpidly'],\n 'turps': ['spurt', 'turps'],\n 'turret': ['rutter', 'turret'],\n 'turricula': ['turricula', 'utricular'],\n 'turse': ['serut', 'strue', 'turse', 'uster'],\n 'tursenoi': ['rutinose', 'tursenoi'],\n 'tursio': ['suitor', 'tursio'],\n 'turtan': ['truant', 'turtan'],\n 'tuscan': ['cantus', 'tuscan', 'uncast'],\n 'tusche': ['schute', 'tusche'],\n 'tush': ['shut', 'thus', 'tush'],\n 'tusher': ['reshut', 'suther', 'thurse', 'tusher'],\n 'tussal': ['saltus', 'tussal'],\n 'tusser': ['russet', 'tusser'],\n 'tussore': ['estrous', 'oestrus', 'sestuor', 'tussore'],\n 'tutelo': ['outlet', 'tutelo'],\n 'tutenag': ['tungate', 'tutenag'],\n 'tutman': ['mutant', 'tantum', 'tutman'],\n 'tutor': ['trout', 'tutor'],\n 'tutorer': ['torture', 'trouter', 'tutorer'],\n 'tutorial': ['outtrail', 'tutorial'],\n 'tutorism': ['mistutor', 'tutorism'],\n 'tutorless': ['troutless', 'tutorless'],\n 'tutory': ['trouty', 'tryout', 'tutory'],\n 'tuts': ['stut', 'tuts'],\n 'tutster': ['stutter', 'tutster'],\n 'twa': ['taw', 'twa', 'wat'],\n 'twae': ['tewa', 'twae', 'weta'],\n 'twain': ['atwin', 'twain', 'witan'],\n 'twaite': ['tawite', 'tawtie', 'twaite'],\n 'twal': ['twal', 'walt'],\n 'twas': ['sawt', 'staw', 'swat', 'taws', 'twas', 'wast'],\n 'twat': ['twat', 'watt'],\n 'twee': ['twee', 'weet'],\n 'tweel': ['tewel', 'tweel'],\n 'twere': ['rewet', 'tewer', 'twere'],\n 'twi': ['twi', 'wit'],\n 'twigsome': ['twigsome', 'wegotism'],\n 'twin': ['twin', 'wint'],\n 'twiner': ['twiner', 'winter'],\n 'twingle': ['twingle', 'welting', 'winglet'],\n 'twinkle': ['twinkle', 'winklet'],\n 'twinkler': ['twinkler', 'wrinklet'],\n 'twinter': ['twinter', 'written'],\n 'twire': ['twire', 'write'],\n 'twister': ['retwist', 'twister'],\n 'twitchety': ['twitchety', 'witchetty'],\n 'twite': ['tewit', 'twite'],\n 'two': ['tow', 'two', 'wot'],\n 'twoling': ['lingtow', 'twoling'],\n 'tyche': ['techy', 'tyche'],\n 'tydie': ['deity', 'tydie'],\n 'tye': ['tye', 'yet'],\n 'tyke': ['kyte', 'tyke'],\n 'tylerism': ['trimesyl', 'tylerism'],\n 'tyloma': ['latomy', 'tyloma'],\n 'tylose': ['tolsey', 'tylose'],\n 'tylosis': ['tossily', 'tylosis'],\n 'tylotus': ['stoutly', 'tylotus'],\n 'tylus': ['lusty', 'tylus'],\n 'typal': ['aptly', 'patly', 'platy', 'typal'],\n 'typees': ['steepy', 'typees'],\n 'typer': ['perty', 'typer'],\n 'typha': ['pathy', 'typha'],\n 'typhia': ['pythia', 'typhia'],\n 'typhic': ['phytic', 'pitchy', 'pythic', 'typhic'],\n 'typhlopidae': ['heptaploidy', 'typhlopidae'],\n 'typhoean': ['anophyte', 'typhoean'],\n 'typhogenic': ['phytogenic', 'pythogenic', 'typhogenic'],\n 'typhoid': ['phytoid', 'typhoid'],\n 'typhonian': ['antiphony', 'typhonian'],\n 'typhonic': ['hypnotic', 'phytonic', 'pythonic', 'typhonic'],\n 'typhosis': ['phytosis', 'typhosis'],\n 'typica': ['atypic', 'typica'],\n 'typographer': ['petrography', 'pterography', 'typographer'],\n 'typographic': ['graphotypic', 'pictography', 'typographic'],\n 'typology': ['logotypy', 'typology'],\n 'typophile': ['hippolyte', 'typophile'],\n 'tyre': ['trey', 'tyre'],\n 'tyrian': ['rytina', 'trainy', 'tyrian'],\n 'tyro': ['royt', 'ryot', 'tory', 'troy', 'tyro'],\n 'tyrocidin': ['nordicity', 'tyrocidin'],\n 'tyrolean': ['neolatry', 'ornately', 'tyrolean'],\n 'tyrolite': ['toiletry', 'tyrolite'],\n 'tyrone': ['torney', 'tyrone'],\n 'tyronism': ['smyrniot', 'tyronism'],\n 'tyrosine': ['tyrosine', 'tyrsenoi'],\n 'tyrrheni': ['erythrin', 'tyrrheni'],\n 'tyrsenoi': ['tyrosine', 'tyrsenoi'],\n 'tyste': ['testy', 'tyste'],\n 'tyto': ['toty', 'tyto'],\n 'uang': ['gaun', 'guan', 'guna', 'uang'],\n 'ucal': ['caul', 'ucal'],\n 'udal': ['auld', 'dual', 'laud', 'udal'],\n 'udaler': ['lauder', 'udaler'],\n 'udalman': ['ladanum', 'udalman'],\n 'udo': ['duo', 'udo'],\n 'uds': ['sud', 'uds'],\n 'ugh': ['hug', 'ugh'],\n 'uglisome': ['eulogism', 'uglisome'],\n 'ugrian': ['gurian', 'ugrian'],\n 'ugric': ['guric', 'ugric'],\n 'uhtsong': ['gunshot', 'shotgun', 'uhtsong'],\n 'uinal': ['inula', 'luian', 'uinal'],\n 'uinta': ['uinta', 'uniat'],\n 'ulcer': ['cruel', 'lucre', 'ulcer'],\n 'ulcerate': ['celature', 'ulcerate'],\n 'ulcerous': ['ulcerous', 'urceolus'],\n 'ule': ['leu', 'lue', 'ule'],\n 'ulema': ['amelu', 'leuma', 'ulema'],\n 'uletic': ['lucite', 'luetic', 'uletic'],\n 'ulex': ['luxe', 'ulex'],\n 'ulla': ['lula', 'ulla'],\n 'ulling': ['ulling', 'ungill'],\n 'ulmin': ['linum', 'ulmin'],\n 'ulminic': ['clinium', 'ulminic'],\n 'ulmo': ['moul', 'ulmo'],\n 'ulna': ['laun', 'luna', 'ulna', 'unal'],\n 'ulnad': ['dunal', 'laund', 'lunda', 'ulnad'],\n 'ulnar': ['lunar', 'ulnar', 'urnal'],\n 'ulnare': ['lunare', 'neural', 'ulnare', 'unreal'],\n 'ulnaria': ['lunaria', 'ulnaria', 'uralian'],\n 'ulotrichi': ['ulotrichi', 'urolithic'],\n 'ulster': ['luster', 'result', 'rustle', 'sutler', 'ulster'],\n 'ulstered': ['deluster', 'ulstered'],\n 'ulsterian': ['neuralist', 'ulsterian', 'unrealist'],\n 'ulstering': ['resulting', 'ulstering'],\n 'ulsterman': ['menstrual', 'ulsterman'],\n 'ultima': ['mulita', 'ultima'],\n 'ultimate': ['mutilate', 'ultimate'],\n 'ultimation': ['mutilation', 'ultimation'],\n 'ultonian': ['lunation', 'ultonian'],\n 'ultra': ['lutra', 'ultra'],\n 'ultrabasic': ['arcubalist', 'ultrabasic'],\n 'ultraism': ['altruism', 'muralist', 'traulism', 'ultraism'],\n 'ultraist': ['altruist', 'ultraist'],\n 'ultraistic': ['altruistic', 'truistical', 'ultraistic'],\n 'ultramicron': ['tricolumnar', 'ultramicron'],\n 'ultraminute': ['intermutual', 'ultraminute'],\n 'ultramontane': ['tournamental', 'ultramontane'],\n 'ultranice': ['centurial', 'lucretian', 'ultranice'],\n 'ultrasterile': ['reillustrate', 'ultrasterile'],\n 'ulua': ['aulu', 'ulua'],\n 'ulva': ['ulva', 'uval'],\n 'um': ['mu', 'um'],\n 'umbel': ['umbel', 'umble'],\n 'umbellar': ['umbellar', 'umbrella'],\n 'umber': ['brume', 'umber'],\n 'umbilic': ['bulimic', 'umbilic'],\n 'umbiliform': ['bulimiform', 'umbiliform'],\n 'umble': ['umbel', 'umble'],\n 'umbonial': ['olibanum', 'umbonial'],\n 'umbral': ['brumal', 'labrum', 'lumbar', 'umbral'],\n 'umbrel': ['lumber', 'rumble', 'umbrel'],\n 'umbrella': ['umbellar', 'umbrella'],\n 'umbrous': ['brumous', 'umbrous'],\n 'ume': ['emu', 'ume'],\n 'umlaut': ['mutual', 'umlaut'],\n 'umph': ['hump', 'umph'],\n 'umpire': ['impure', 'umpire'],\n 'un': ['nu', 'un'],\n 'unabetted': ['debutante', 'unabetted'],\n 'unabhorred': ['unabhorred', 'unharbored'],\n 'unable': ['nebula', 'unable', 'unbale'],\n 'unaccumulate': ['acutenaculum', 'unaccumulate'],\n 'unact': ['tunca', 'unact'],\n 'unadherent': ['unadherent', 'underneath', 'underthane'],\n 'unadmire': ['unadmire', 'underaim'],\n 'unadmired': ['unadmired', 'undermaid'],\n 'unadored': ['unadored', 'unroaded'],\n 'unadvertised': ['disadventure', 'unadvertised'],\n 'unafire': ['fuirena', 'unafire'],\n 'unaged': ['augend', 'engaud', 'unaged'],\n 'unagreed': ['dungaree', 'guardeen', 'unagreed', 'underage', 'ungeared'],\n 'unailing': ['inguinal', 'unailing'],\n 'unaimed': ['numidae', 'unaimed'],\n 'unaisled': ['unaisled', 'unsailed'],\n 'unakite': ['kutenai', 'unakite'],\n 'unal': ['laun', 'luna', 'ulna', 'unal'],\n 'unalarming': ['unalarming', 'unmarginal'],\n 'unalert': ['laurent', 'neutral', 'unalert'],\n 'unalertly': ['neutrally', 'unalertly'],\n 'unalertness': ['neutralness', 'unalertness'],\n 'unalimentary': ['anteluminary', 'unalimentary'],\n 'unalist': ['latinus', 'tulisan', 'unalist'],\n 'unallotted': ['unallotted', 'untotalled'],\n 'unalmsed': ['dulseman', 'unalmsed'],\n 'unaltered': ['unaltered', 'unrelated'],\n 'unaltering': ['unaltering', 'unrelating'],\n 'unamassed': ['mussaenda', 'unamassed'],\n 'unambush': ['subhuman', 'unambush'],\n 'unamenability': ['unamenability', 'unnameability'],\n 'unamenable': ['unamenable', 'unnameable'],\n 'unamenableness': ['unamenableness', 'unnameableness'],\n 'unamenably': ['unamenably', 'unnameably'],\n 'unamend': ['mundane', 'unamend', 'unmaned', 'unnamed'],\n 'unami': ['maniu', 'munia', 'unami'],\n 'unapt': ['punta', 'unapt', 'untap'],\n 'unarising': ['grusinian', 'unarising'],\n 'unarm': ['muran', 'ruman', 'unarm', 'unram', 'urman'],\n 'unarmed': ['duramen', 'maunder', 'unarmed'],\n 'unarray': ['unarray', 'yaruran'],\n 'unarrestable': ['subterraneal', 'unarrestable'],\n 'unarrested': ['unarrested', 'unserrated'],\n 'unarted': ['daunter', 'unarted', 'unrated', 'untread'],\n 'unarticled': ['denticular', 'unarticled'],\n 'unartistic': ['naturistic', 'unartistic'],\n 'unartistical': ['naturalistic', 'unartistical'],\n 'unartistically': ['naturistically', 'unartistically'],\n 'unary': ['anury', 'unary', 'unray'],\n 'unastray': ['auntsary', 'unastray'],\n 'unathirst': ['struthian', 'unathirst'],\n 'unattire': ['tainture', 'unattire'],\n 'unattuned': ['unattuned', 'untaunted'],\n 'unaverted': ['adventure', 'unaverted'],\n 'unavertible': ['unavertible', 'unveritable'],\n 'unbag': ['bugan', 'bunga', 'unbag'],\n 'unbain': ['nubian', 'unbain'],\n 'unbale': ['nebula', 'unable', 'unbale'],\n 'unbar': ['buran', 'unbar', 'urban'],\n 'unbare': ['eburna', 'unbare', 'unbear', 'urbane'],\n 'unbarred': ['errabund', 'unbarred'],\n 'unbased': ['subdean', 'unbased'],\n 'unbaste': ['unbaste', 'unbeast'],\n 'unbatted': ['debutant', 'unbatted'],\n 'unbay': ['bunya', 'unbay'],\n 'unbe': ['benu', 'unbe'],\n 'unbear': ['eburna', 'unbare', 'unbear', 'urbane'],\n 'unbearded': ['unbearded', 'unbreaded'],\n 'unbeast': ['unbaste', 'unbeast'],\n 'unbeavered': ['unbeavered', 'unbereaved'],\n 'unbelied': ['unbelied', 'unedible'],\n 'unbereaved': ['unbeavered', 'unbereaved'],\n 'unbesot': ['subnote', 'subtone', 'unbesot'],\n 'unbias': ['anubis', 'unbias'],\n 'unbillet': ['bulletin', 'unbillet'],\n 'unbilleted': ['tunbellied', 'unbilleted'],\n 'unblasted': ['dunstable', 'unblasted', 'unstabled'],\n 'unbled': ['bundle', 'unbled'],\n 'unboasted': ['eastbound', 'unboasted'],\n 'unboat': ['outban', 'unboat'],\n 'unboding': ['bounding', 'unboding'],\n 'unbog': ['bungo', 'unbog'],\n 'unboiled': ['unboiled', 'unilobed'],\n 'unboned': ['bounden', 'unboned'],\n 'unborder': ['unborder', 'underorb'],\n 'unbored': ['beround', 'bounder', 'rebound', 'unbored', 'unorbed', 'unrobed'],\n 'unboweled': ['unboweled', 'unelbowed'],\n 'unbrace': ['bucrane', 'unbrace'],\n 'unbraceleted': ['unbraceleted', 'uncelebrated'],\n 'unbraid': ['barundi', 'unbraid'],\n 'unbrailed': ['indurable', 'unbrailed', 'unridable'],\n 'unbreaded': ['unbearded', 'unbreaded'],\n 'unbred': ['bunder', 'burden', 'burned', 'unbred'],\n 'unbribed': ['unbribed', 'unribbed'],\n 'unbrief': ['unbrief', 'unfiber'],\n 'unbriefed': ['unbriefed', 'unfibered'],\n 'unbroiled': ['unbroiled', 'underboil'],\n 'unbrushed': ['unbrushed', 'underbush'],\n 'unbud': ['bundu', 'unbud', 'undub'],\n 'unburden': ['unburden', 'unburned'],\n 'unburned': ['unburden', 'unburned'],\n 'unbuttered': ['unbuttered', 'unrebutted'],\n 'unca': ['cuna', 'unca'],\n 'uncage': ['cangue', 'uncage'],\n 'uncambered': ['uncambered', 'unembraced'],\n 'uncamerated': ['uncamerated', 'unmacerated'],\n 'uncapable': ['uncapable', 'unpacable'],\n 'uncaptious': ['uncaptious', 'usucaption'],\n 'uncarted': ['uncarted', 'uncrated', 'underact', 'untraced'],\n 'uncartooned': ['uncartooned', 'uncoronated'],\n 'uncase': ['uncase', 'usance'],\n 'uncask': ['uncask', 'unsack'],\n 'uncasked': ['uncasked', 'unsacked'],\n 'uncast': ['cantus', 'tuscan', 'uncast'],\n 'uncatalogued': ['uncatalogued', 'uncoagulated'],\n 'uncate': ['tecuna', 'uncate'],\n 'uncaused': ['uncaused', 'unsauced'],\n 'uncavalier': ['naviculare', 'uncavalier'],\n 'uncelebrated': ['unbraceleted', 'uncelebrated'],\n 'uncellar': ['lucernal', 'nucellar', 'uncellar'],\n 'uncenter': ['uncenter', 'unrecent'],\n 'uncertain': ['encurtain', 'runcinate', 'uncertain'],\n 'uncertifiable': ['uncertifiable', 'unrectifiable'],\n 'uncertified': ['uncertified', 'unrectified'],\n 'unchain': ['chunnia', 'unchain'],\n 'unchair': ['chunari', 'unchair'],\n 'unchalked': ['unchalked', 'unhackled'],\n 'uncharge': ['gunreach', 'uncharge'],\n 'uncharm': ['uncharm', 'unmarch'],\n 'uncharming': ['uncharming', 'unmarching'],\n 'uncharred': ['uncharred', 'underarch'],\n 'uncheat': ['uncheat', 'unteach'],\n 'uncheating': ['uncheating', 'unteaching'],\n 'unchoked': ['unchoked', 'unhocked'],\n 'unchoosable': ['chaenolobus', 'unchoosable'],\n 'unchosen': ['nonesuch', 'unchosen'],\n 'uncial': ['cunila', 'lucian', 'lucina', 'uncial'],\n 'unciferous': ['nuciferous', 'unciferous'],\n 'unciform': ['nuciform', 'unciform'],\n 'uncinate': ['nunciate', 'uncinate'],\n 'unclaimed': ['unclaimed', 'undecimal', 'unmedical'],\n 'unclay': ['lunacy', 'unclay'],\n 'unclead': ['unclead', 'unlaced'],\n 'unclear': ['crenula', 'lucarne', 'nuclear', 'unclear'],\n 'uncleared': ['uncleared', 'undeclare'],\n 'uncledom': ['columned', 'uncledom'],\n 'uncleship': ['siphuncle', 'uncleship'],\n 'uncloister': ['cornulites', 'uncloister'],\n 'unclose': ['counsel', 'unclose'],\n 'unclutter': ['truculent', 'unclutter'],\n 'unco': ['cuon', 'unco'],\n 'uncoagulated': ['uncatalogued', 'uncoagulated'],\n 'uncoat': ['toucan', 'tucano', 'uncoat'],\n 'uncoated': ['outdance', 'uncoated'],\n 'uncoiled': ['nucleoid', 'uncoiled'],\n 'uncoin': ['nuncio', 'uncoin'],\n 'uncollapsed': ['uncollapsed', 'unscalloped'],\n 'uncolored': ['uncolored', 'undercool'],\n 'uncomic': ['muconic', 'uncomic'],\n 'uncompatible': ['incomputable', 'uncompatible'],\n 'uncomplaint': ['uncomplaint', 'uncompliant'],\n 'uncomplete': ['couplement', 'uncomplete'],\n 'uncompliant': ['uncomplaint', 'uncompliant'],\n 'unconcerted': ['unconcerted', 'unconcreted'],\n 'unconcreted': ['unconcerted', 'unconcreted'],\n 'unconservable': ['unconservable', 'unconversable'],\n 'unconstraint': ['noncurantist', 'unconstraint'],\n 'uncontrasted': ['counterstand', 'uncontrasted'],\n 'unconversable': ['unconservable', 'unconversable'],\n 'uncoop': ['coupon', 'uncoop'],\n 'uncooped': ['couponed', 'uncooped'],\n 'uncope': ['pounce', 'uncope'],\n 'uncopied': ['cupidone', 'uncopied'],\n 'uncore': ['conure', 'rounce', 'uncore'],\n 'uncored': ['crunode', 'uncored'],\n 'uncorked': ['uncorked', 'unrocked'],\n 'uncoronated': ['uncartooned', 'uncoronated'],\n 'uncorrect': ['cocurrent', 'occurrent', 'uncorrect'],\n 'uncorrugated': ['counterguard', 'uncorrugated'],\n 'uncorseted': ['uncorseted', 'unescorted'],\n 'uncostumed': ['uncostumed', 'uncustomed'],\n 'uncoursed': ['uncoursed', 'unscoured'],\n 'uncouth': ['uncouth', 'untouch'],\n 'uncoverable': ['uncoverable', 'unrevocable'],\n 'uncradled': ['uncradled', 'underclad'],\n 'uncrated': ['uncarted', 'uncrated', 'underact', 'untraced'],\n 'uncreased': ['uncreased', 'undercase'],\n 'uncreatable': ['uncreatable', 'untraceable'],\n 'uncreatableness': ['uncreatableness', 'untraceableness'],\n 'uncreation': ['enunciator', 'uncreation'],\n 'uncreative': ['uncreative', 'unreactive'],\n 'uncredited': ['uncredited', 'undirected'],\n 'uncrest': ['encrust', 'uncrest'],\n 'uncrested': ['uncrested', 'undersect'],\n 'uncried': ['inducer', 'uncried'],\n 'uncrooked': ['uncrooked', 'undercook'],\n 'uncrude': ['uncrude', 'uncured'],\n 'unctional': ['continual', 'inoculant', 'unctional'],\n 'unctioneer': ['recontinue', 'unctioneer'],\n 'uncured': ['uncrude', 'uncured'],\n 'uncustomed': ['uncostumed', 'uncustomed'],\n 'uncuth': ['tuchun', 'uncuth'],\n 'undam': ['maund', 'munda', 'numda', 'undam', 'unmad'],\n 'undangered': ['undangered', 'underanged', 'ungardened'],\n 'undarken': ['undarken', 'unranked'],\n 'undashed': ['undashed', 'unshaded'],\n 'undate': ['nudate', 'undate'],\n 'unde': ['dune', 'nude', 'unde'],\n 'undean': ['duenna', 'undean'],\n 'undear': ['endura', 'neurad', 'undear', 'unread'],\n 'undeceiver': ['undeceiver', 'unreceived'],\n 'undecimal': ['unclaimed', 'undecimal', 'unmedical'],\n 'undeclare': ['uncleared', 'undeclare'],\n 'undecolic': ['coinclude', 'undecolic'],\n 'undecorated': ['undecorated', 'undercoated'],\n 'undefiled': ['undefiled', 'unfielded'],\n 'undeified': ['undeified', 'unedified'],\n 'undelible': ['undelible', 'unlibeled'],\n 'undelight': ['undelight', 'unlighted'],\n 'undelude': ['undelude', 'uneluded'],\n 'undeluding': ['undeluding', 'unindulged'],\n 'undemanded': ['undemanded', 'unmaddened'],\n 'unden': ['dunne', 'unden'],\n 'undeparted': ['dunderpate', 'undeparted'],\n 'undepraved': ['undepraved', 'unpervaded'],\n 'under': ['runed', 'under', 'unred'],\n 'underact': ['uncarted', 'uncrated', 'underact', 'untraced'],\n 'underacted': ['underacted', 'unredacted'],\n 'underaction': ['denunciator', 'underaction'],\n 'underage': ['dungaree', 'guardeen', 'unagreed', 'underage', 'ungeared'],\n 'underaid': ['underaid', 'unraided'],\n 'underaim': ['unadmire', 'underaim'],\n 'underanged': ['undangered', 'underanged', 'ungardened'],\n 'underarch': ['uncharred', 'underarch'],\n 'underarm': ['underarm', 'unmarred'],\n 'underbake': ['underbake', 'underbeak'],\n 'underbeak': ['underbake', 'underbeak'],\n 'underbeat': ['eburnated', 'underbeat', 'unrebated'],\n 'underbit': ['turbined', 'underbit'],\n 'underboil': ['unbroiled', 'underboil'],\n 'underbreathing': ['thunderbearing', 'underbreathing'],\n 'underbrush': ['underbrush', 'undershrub'],\n 'underbush': ['unbrushed', 'underbush'],\n 'undercase': ['uncreased', 'undercase'],\n 'underchap': ['underchap', 'unparched'],\n 'underclad': ['uncradled', 'underclad'],\n 'undercoat': ['cornuated', 'undercoat'],\n 'undercoated': ['undecorated', 'undercoated'],\n 'undercook': ['uncrooked', 'undercook'],\n 'undercool': ['uncolored', 'undercool'],\n 'undercut': ['undercut', 'unreduct'],\n 'underdead': ['underdead', 'undreaded'],\n 'underdig': ['underdig', 'ungirded', 'unridged'],\n 'underdive': ['underdive', 'underived'],\n 'underdo': ['redound', 'rounded', 'underdo'],\n 'underdoer': ['underdoer', 'unordered'],\n 'underdog': ['grounded', 'underdog', 'undergod'],\n 'underdown': ['underdown', 'undrowned'],\n 'underdrag': ['underdrag', 'undergrad'],\n 'underdraw': ['underdraw', 'underward'],\n 'undereat': ['denature', 'undereat'],\n 'underer': ['endurer', 'underer'],\n 'underfiend': ['underfiend', 'unfriended'],\n 'underfill': ['underfill', 'unfrilled'],\n 'underfire': ['underfire', 'unferried'],\n 'underflow': ['underflow', 'wonderful'],\n 'underfur': ['underfur', 'unfurred'],\n 'undergo': ['guerdon', 'undergo', 'ungored'],\n 'undergod': ['grounded', 'underdog', 'undergod'],\n 'undergoer': ['guerdoner', 'reundergo', 'undergoer', 'undergore'],\n 'undergore': ['guerdoner', 'reundergo', 'undergoer', 'undergore'],\n 'undergown': ['undergown', 'unwronged'],\n 'undergrad': ['underdrag', 'undergrad'],\n 'undergrade': ['undergrade', 'unregarded'],\n 'underheat': ['underheat', 'unearthed'],\n 'underhonest': ['underhonest', 'unshortened'],\n 'underhorse': ['underhorse', 'undershore'],\n 'underived': ['underdive', 'underived'],\n 'underkind': ['underkind', 'unkindred'],\n 'underlap': ['pendular', 'underlap', 'uplander'],\n 'underleaf': ['underleaf', 'unfederal'],\n 'underlease': ['underlease', 'unreleased'],\n 'underlegate': ['underlegate', 'unrelegated'],\n 'underlid': ['underlid', 'unriddle'],\n 'underlive': ['underlive', 'unreviled'],\n 'underlying': ['enduringly', 'underlying'],\n 'undermade': ['undermade', 'undreamed'],\n 'undermaid': ['unadmired', 'undermaid'],\n 'undermaker': ['undermaker', 'unremarked'],\n 'undermaster': ['undermaster', 'understream'],\n 'undermeal': ['denumeral', 'undermeal', 'unrealmed'],\n 'undermine': ['undermine', 'unermined'],\n 'undermost': ['undermost', 'unstormed'],\n 'undermotion': ['undermotion', 'unmonitored'],\n 'undern': ['dunner', 'undern'],\n 'underneath': ['unadherent', 'underneath', 'underthane'],\n 'undernote': ['undernote', 'undertone'],\n 'undernoted': ['undernoted', 'undertoned'],\n 'underntide': ['indentured', 'underntide'],\n 'underorb': ['unborder', 'underorb'],\n 'underpay': ['underpay', 'unprayed'],\n 'underpeer': ['perendure', 'underpeer'],\n 'underpick': ['underpick', 'unpricked'],\n 'underpier': ['underpier', 'underripe'],\n 'underpile': ['underpile', 'unreplied'],\n 'underpose': ['underpose', 'unreposed'],\n 'underpuke': ['underpuke', 'unperuked'],\n 'underream': ['maunderer', 'underream'],\n 'underripe': ['underpier', 'underripe'],\n 'underrobe': ['rebounder', 'underrobe'],\n 'undersap': ['undersap', 'unparsed', 'unrasped', 'unspared', 'unspread'],\n 'undersea': ['undersea', 'unerased', 'unseared'],\n 'underseam': ['underseam', 'unsmeared'],\n 'undersect': ['uncrested', 'undersect'],\n 'underserve': ['underserve',\n                'underverse',\n                'undeserver',\n                'unreserved',\n                'unreversed'],\n 'underset': ['sederunt', 'underset', 'undesert', 'unrested'],\n 'undershapen': ['undershapen', 'unsharpened'],\n 'undershore': ['underhorse', 'undershore'],\n 'undershrub': ['underbrush', 'undershrub'],\n 'underside': ['underside', 'undesired'],\n 'undersoil': ['undersoil', 'unsoldier'],\n 'undersow': ['sewround', 'undersow'],\n 'underspar': ['underspar', 'unsparred'],\n 'understain': ['understain', 'unstrained'],\n 'understand': ['understand', 'unstranded'],\n 'understream': ['undermaster', 'understream'],\n 'underthane': ['unadherent', 'underneath', 'underthane'],\n 'underthing': ['thundering', 'underthing'],\n 'undertide': ['durdenite', 'undertide'],\n 'undertime': ['undertime', 'unmerited'],\n 'undertimed': ['demiturned', 'undertimed'],\n 'undertitle': ['undertitle', 'unlittered'],\n 'undertone': ['undernote', 'undertone'],\n 'undertoned': ['undernoted', 'undertoned'],\n 'undertow': ['undertow', 'untrowed'],\n 'undertread': ['undertread', 'unretarded'],\n 'undertutor': ['undertutor', 'untortured'],\n 'underverse': ['underserve',\n                'underverse',\n                'undeserver',\n                'unreserved',\n                'unreversed'],\n 'underwage': ['underwage', 'unwagered'],\n 'underward': ['underdraw', 'underward'],\n 'underwarp': ['underwarp', 'underwrap'],\n 'underwave': ['underwave', 'unwavered'],\n 'underwrap': ['underwarp', 'underwrap'],\n 'undesert': ['sederunt', 'underset', 'undesert', 'unrested'],\n 'undeserve': ['undeserve', 'unsevered'],\n 'undeserver': ['underserve',\n                'underverse',\n                'undeserver',\n                'unreserved',\n                'unreversed'],\n 'undesign': ['undesign', 'unsigned', 'unsinged'],\n 'undesired': ['underside', 'undesired'],\n 'undeviated': ['denudative', 'undeviated'],\n 'undieted': ['undieted', 'unedited'],\n 'undig': ['gundi', 'undig'],\n 'undirect': ['undirect', 'untriced'],\n 'undirected': ['uncredited', 'undirected'],\n 'undiscerned': ['undiscerned', 'unrescinded'],\n 'undiscretion': ['discontinuer', 'undiscretion'],\n 'undistress': ['sturdiness', 'undistress'],\n 'undiverse': ['undiverse', 'unrevised'],\n 'undog': ['undog', 'ungod'],\n 'undrab': ['durban', 'undrab'],\n 'undrag': ['durgan', 'undrag'],\n 'undrape': ['undrape', 'unpared', 'unraped'],\n 'undreaded': ['underdead', 'undreaded'],\n 'undreamed': ['undermade', 'undreamed'],\n 'undrowned': ['underdown', 'undrowned'],\n 'undrugged': ['undrugged', 'ungrudged'],\n 'undryable': ['endurably', 'undryable'],\n 'undub': ['bundu', 'unbud', 'undub'],\n 'undumped': ['pudendum', 'undumped'],\n 'undy': ['duny', 'undy'],\n 'uneager': ['geneura', 'uneager'],\n 'unearned': ['unearned', 'unneared'],\n 'unearnest': ['unearnest', 'uneastern'],\n 'unearth': ['haunter', 'nauther', 'unearth', 'unheart', 'urethan'],\n 'unearthed': ['underheat', 'unearthed'],\n 'unearthly': ['unearthly', 'urethylan'],\n 'uneastern': ['unearnest', 'uneastern'],\n 'uneath': ['uneath', 'unhate'],\n 'unebriate': ['beraunite', 'unebriate'],\n 'unedge': ['dengue', 'unedge'],\n 'unedible': ['unbelied', 'unedible'],\n 'unedified': ['undeified', 'unedified'],\n 'unedited': ['undieted', 'unedited'],\n 'unelapsed': ['unelapsed', 'unpleased'],\n 'unelated': ['antelude', 'unelated'],\n 'unelbowed': ['unboweled', 'unelbowed'],\n 'unelidible': ['ineludible', 'unelidible'],\n 'uneluded': ['undelude', 'uneluded'],\n 'unembased': ['sunbeamed', 'unembased'],\n 'unembraced': ['uncambered', 'unembraced'],\n 'unenabled': ['unenabled', 'unendable'],\n 'unencored': ['denouncer', 'unencored'],\n 'unendable': ['unenabled', 'unendable'],\n 'unending': ['unending', 'unginned'],\n 'unenervated': ['unenervated', 'unvenerated'],\n 'unenlisted': ['unenlisted', 'unlistened', 'untinseled'],\n 'unenterprised': ['superintender', 'unenterprised'],\n 'unenviable': ['unenviable', 'unveniable'],\n 'unenvied': ['unenvied', 'unveined'],\n 'unequitable': ['unequitable', 'unquietable'],\n 'unerased': ['undersea', 'unerased', 'unseared'],\n 'unermined': ['undermine', 'unermined'],\n 'unerratic': ['recurtain', 'unerratic'],\n 'unerupted': ['unerupted', 'unreputed'],\n 'unescorted': ['uncorseted', 'unescorted'],\n 'unevil': ['unevil', 'unlive', 'unveil'],\n 'unexactly': ['exultancy', 'unexactly'],\n 'unexceptable': ['unexceptable', 'unexpectable'],\n 'unexcepted': ['unexcepted', 'unexpected'],\n 'unexcepting': ['unexcepting', 'unexpecting'],\n 'unexpectable': ['unexceptable', 'unexpectable'],\n 'unexpected': ['unexcepted', 'unexpected'],\n 'unexpecting': ['unexcepting', 'unexpecting'],\n 'unfabled': ['fundable', 'unfabled'],\n 'unfaceted': ['fecundate', 'unfaceted'],\n 'unfactional': ['afunctional', 'unfactional'],\n 'unfactored': ['fecundator', 'unfactored'],\n 'unfainting': ['antifungin', 'unfainting'],\n 'unfallible': ['unfallible', 'unfillable'],\n 'unfar': ['furan', 'unfar'],\n 'unfarmed': ['unfarmed', 'unframed'],\n 'unfederal': ['underleaf', 'unfederal'],\n 'unfeeding': ['unfeeding', 'unfeigned'],\n 'unfeeling': ['unfeeling', 'unfleeing'],\n 'unfeigned': ['unfeeding', 'unfeigned'],\n 'unfelt': ['fluent', 'netful', 'unfelt', 'unleft'],\n 'unfelted': ['defluent', 'unfelted'],\n 'unferried': ['underfire', 'unferried'],\n 'unfiber': ['unbrief', 'unfiber'],\n 'unfibered': ['unbriefed', 'unfibered'],\n 'unfielded': ['undefiled', 'unfielded'],\n 'unfiend': ['unfiend', 'unfined'],\n 'unfiery': ['reunify', 'unfiery'],\n 'unfillable': ['unfallible', 'unfillable'],\n 'unfined': ['unfiend', 'unfined'],\n 'unfired': ['unfired', 'unfried'],\n 'unflag': ['fungal', 'unflag'],\n 'unflat': ['flaunt', 'unflat'],\n 'unfleeing': ['unfeeling', 'unfleeing'],\n 'unfloured': ['unfloured', 'unfoldure'],\n 'unfolder': ['flounder', 'reunfold', 'unfolder'],\n 'unfolding': ['foundling', 'unfolding'],\n 'unfoldure': ['unfloured', 'unfoldure'],\n 'unforest': ['furstone', 'unforest'],\n 'unforested': ['unforested', 'unfostered'],\n 'unformality': ['fulminatory', 'unformality'],\n 'unforward': ['unforward', 'unfroward'],\n 'unfostered': ['unforested', 'unfostered'],\n 'unfrail': ['rainful', 'unfrail'],\n 'unframed': ['unfarmed', 'unframed'],\n 'unfret': ['turfen', 'unfret'],\n 'unfriable': ['funebrial', 'unfriable'],\n 'unfried': ['unfired', 'unfried'],\n 'unfriended': ['underfiend', 'unfriended'],\n 'unfriending': ['unfriending', 'uninfringed'],\n 'unfrilled': ['underfill', 'unfrilled'],\n 'unfroward': ['unforward', 'unfroward'],\n 'unfurl': ['unfurl', 'urnful'],\n 'unfurred': ['underfur', 'unfurred'],\n 'ungaite': ['ungaite', 'unitage'],\n 'unganged': ['unganged', 'unnagged'],\n 'ungardened': ['undangered', 'underanged', 'ungardened'],\n 'ungarnish': ['ungarnish', 'unsharing'],\n 'ungear': ['nauger', 'raunge', 'ungear'],\n 'ungeared': ['dungaree', 'guardeen', 'unagreed', 'underage', 'ungeared'],\n 'ungelt': ['englut', 'gluten', 'ungelt'],\n 'ungenerable': ['ungenerable', 'ungreenable'],\n 'unget': ['tengu', 'unget'],\n 'ungilded': ['deluding', 'ungilded'],\n 'ungill': ['ulling', 'ungill'],\n 'ungilt': ['glutin', 'luting', 'ungilt'],\n 'unginned': ['unending', 'unginned'],\n 'ungird': ['during', 'ungird'],\n 'ungirded': ['underdig', 'ungirded', 'unridged'],\n 'ungirdle': ['indulger', 'ungirdle'],\n 'ungirt': ['ungirt', 'untrig'],\n 'ungirth': ['hurting', 'ungirth', 'unright'],\n 'ungirthed': ['ungirthed', 'unrighted'],\n 'unglad': ['gandul', 'unglad'],\n 'unglued': ['unglued', 'unguled'],\n 'ungod': ['undog', 'ungod'],\n 'ungold': ['dungol', 'ungold'],\n 'ungone': ['guenon', 'ungone'],\n 'ungored': ['guerdon', 'undergo', 'ungored'],\n 'ungorge': ['gurgeon', 'ungorge'],\n 'ungot': ['tungo', 'ungot'],\n 'ungothic': ['touching', 'ungothic'],\n 'ungraphic': ['ungraphic', 'uparching'],\n 'ungreenable': ['ungenerable', 'ungreenable'],\n 'ungrieved': ['gerundive', 'ungrieved'],\n 'ungroined': ['ungroined', 'unignored'],\n 'ungrudged': ['undrugged', 'ungrudged'],\n 'ungual': ['ungual', 'ungula'],\n 'ungueal': ['ungueal', 'ungulae'],\n 'ungula': ['ungual', 'ungula'],\n 'ungulae': ['ungueal', 'ungulae'],\n 'unguled': ['unglued', 'unguled'],\n 'ungulp': ['ungulp', 'unplug'],\n 'unhabit': ['bhutani', 'unhabit'],\n 'unhackled': ['unchalked', 'unhackled'],\n 'unhairer': ['rhineura', 'unhairer'],\n 'unhalsed': ['unhalsed', 'unlashed', 'unshaled'],\n 'unhalted': ['unhalted', 'unlathed'],\n 'unhalter': ['lutheran', 'unhalter'],\n 'unhaltered': ['unhaltered', 'unlathered'],\n 'unhamper': ['prehuman', 'unhamper'],\n 'unharbored': ['unabhorred', 'unharbored'],\n 'unhasped': ['unhasped', 'unphased', 'unshaped'],\n 'unhat': ['ahunt', 'haunt', 'thuan', 'unhat'],\n 'unhate': ['uneath', 'unhate'],\n 'unhatingly': ['hauntingly', 'unhatingly'],\n 'unhayed': ['unhayed', 'unheady'],\n 'unheady': ['unhayed', 'unheady'],\n 'unhearsed': ['unhearsed', 'unsheared'],\n 'unheart': ['haunter', 'nauther', 'unearth', 'unheart', 'urethan'],\n 'unhid': ['hindu', 'hundi', 'unhid'],\n 'unhistoric': ['trichinous', 'unhistoric'],\n 'unhittable': ['unhittable', 'untithable'],\n 'unhoarded': ['roundhead', 'unhoarded'],\n 'unhocked': ['unchoked', 'unhocked'],\n 'unhoisted': ['hudsonite', 'unhoisted'],\n 'unhorse': ['unhorse', 'unshore'],\n 'unhose': ['unhose', 'unshoe'],\n 'unhosed': ['unhosed', 'unshoed'],\n 'unhurt': ['unhurt', 'unruth'],\n 'uniat': ['uinta', 'uniat'],\n 'uniate': ['auntie', 'uniate'],\n 'unible': ['nubile', 'unible'],\n 'uniced': ['induce', 'uniced'],\n 'unicentral': ['incruental', 'unicentral'],\n 'unideal': ['aliunde', 'unideal'],\n 'unidentified': ['indefinitude', 'unidentified'],\n 'unidly': ['unidly', 'yildun'],\n 'unie': ['niue', 'unie'],\n 'unifilar': ['friulian', 'unifilar'],\n 'uniflorate': ['antifouler', 'fluorinate', 'uniflorate'],\n 'unigenous': ['ingenuous', 'unigenous'],\n 'unignored': ['ungroined', 'unignored'],\n 'unilobar': ['orbulina', 'unilobar'],\n 'unilobed': ['unboiled', 'unilobed'],\n 'unimedial': ['aluminide', 'unimedial'],\n 'unimpair': ['manipuri', 'unimpair'],\n 'unimparted': ['diparentum', 'unimparted'],\n 'unimportance': ['importunance', 'unimportance'],\n 'unimpressible': ['unimpressible', 'unpermissible'],\n 'unimpressive': ['unimpressive', 'unpermissive'],\n 'unindented': ['unindented', 'unintended'],\n 'unindulged': ['undeluding', 'unindulged'],\n 'uninervate': ['aventurine', 'uninervate'],\n 'uninfringed': ['unfriending', 'uninfringed'],\n 'uningested': ['uningested', 'unsigneted'],\n 'uninn': ['nunni', 'uninn'],\n 'uninnate': ['eutannin', 'uninnate'],\n 'uninodal': ['annuloid', 'uninodal'],\n 'unintended': ['unindented', 'unintended'],\n 'unintoned': ['nonunited', 'unintoned'],\n 'uninured': ['uninured', 'unruined'],\n 'unionist': ['inustion', 'unionist'],\n 'unipersonal': ['spinoneural', 'unipersonal'],\n 'unipod': ['dupion', 'unipod'],\n 'uniradial': ['nidularia', 'uniradial'],\n 'unireme': ['erineum', 'unireme'],\n 'uniserrate': ['arseniuret', 'uniserrate'],\n 'unison': ['nonius', 'unison'],\n 'unitage': ['ungaite', 'unitage'],\n 'unital': ['inlaut', 'unital'],\n 'unite': ['intue', 'unite', 'untie'],\n 'united': ['dunite', 'united', 'untied'],\n 'uniter': ['runite', 'triune', 'uniter', 'untire'],\n 'unitiveness': ['unitiveness', 'unsensitive'],\n 'unitrope': ['eruption', 'unitrope'],\n 'univied': ['univied', 'viduine'],\n 'unket': ['knute', 'unket'],\n 'unkilned': ['unkilned', 'unlinked'],\n 'unkin': ['nunki', 'unkin'],\n 'unkindred': ['underkind', 'unkindred'],\n 'unlabiate': ['laubanite', 'unlabiate'],\n 'unlabored': ['burdalone', 'unlabored'],\n 'unlace': ['auncel', 'cuneal', 'lacune', 'launce', 'unlace'],\n 'unlaced': ['unclead', 'unlaced'],\n 'unlade': ['unlade', 'unlead'],\n 'unlaid': ['dualin', 'ludian', 'unlaid'],\n 'unlame': ['manuel', 'unlame'],\n 'unlapped': ['unlapped', 'unpalped'],\n 'unlarge': ['granule', 'unlarge', 'unregal'],\n 'unlashed': ['unhalsed', 'unlashed', 'unshaled'],\n 'unlasting': ['unlasting', 'unslating'],\n 'unlatch': ['tulchan', 'unlatch'],\n 'unlathed': ['unhalted', 'unlathed'],\n 'unlathered': ['unhaltered', 'unlathered'],\n 'unlay': ['unlay', 'yulan'],\n 'unlead': ['unlade', 'unlead'],\n 'unleasable': ['unleasable', 'unsealable'],\n 'unleased': ['unleased', 'unsealed'],\n 'unleash': ['hulsean', 'unleash'],\n 'unled': ['lendu', 'unled'],\n 'unleft': ['fluent', 'netful', 'unfelt', 'unleft'],\n 'unlent': ['nunlet', 'tunnel', 'unlent'],\n 'unlevied': ['unlevied', 'unveiled'],\n 'unlibeled': ['undelible', 'unlibeled'],\n 'unliberal': ['brunellia', 'unliberal'],\n 'unlicensed': ['unlicensed', 'unsilenced'],\n 'unlighted': ['undelight', 'unlighted'],\n 'unliken': ['nunlike', 'unliken'],\n 'unlime': ['lumine', 'unlime'],\n 'unlinked': ['unkilned', 'unlinked'],\n 'unlist': ['insult', 'sunlit', 'unlist', 'unslit'],\n 'unlistened': ['unenlisted', 'unlistened', 'untinseled'],\n 'unlit': ['unlit', 'until'],\n 'unliteral': ['tellurian', 'unliteral'],\n 'unlittered': ['undertitle', 'unlittered'],\n 'unlive': ['unevil', 'unlive', 'unveil'],\n 'unloaded': ['duodenal', 'unloaded'],\n 'unloaden': ['unloaden', 'unloaned'],\n 'unloader': ['unloader', 'urodelan'],\n 'unloaned': ['unloaden', 'unloaned'],\n 'unlodge': ['unlodge', 'unogled'],\n 'unlogic': ['gulonic', 'unlogic'],\n 'unlooped': ['unlooped', 'unpooled'],\n 'unlooted': ['unlooted', 'untooled'],\n 'unlost': ['unlost', 'unslot'],\n 'unlowered': ['unlowered', 'unroweled'],\n 'unlucid': ['nuculid', 'unlucid'],\n 'unlumped': ['pendulum', 'unlumped', 'unplumed'],\n 'unlured': ['unlured', 'unruled'],\n 'unlyrical': ['runically', 'unlyrical'],\n 'unmacerated': ['uncamerated', 'unmacerated'],\n 'unmad': ['maund', 'munda', 'numda', 'undam', 'unmad'],\n 'unmadded': ['addendum', 'unmadded'],\n 'unmaddened': ['undemanded', 'unmaddened'],\n 'unmaid': ['numida', 'unmaid'],\n 'unmail': ['alumni', 'unmail'],\n 'unmailed': ['adlumine', 'unmailed'],\n 'unmaned': ['mundane', 'unamend', 'unmaned', 'unnamed'],\n 'unmantle': ['unmantle', 'unmental'],\n 'unmarch': ['uncharm', 'unmarch'],\n 'unmarching': ['uncharming', 'unmarching'],\n 'unmarginal': ['unalarming', 'unmarginal'],\n 'unmarred': ['underarm', 'unmarred'],\n 'unmashed': ['unmashed', 'unshamed'],\n 'unmate': ['unmate', 'untame', 'unteam'],\n 'unmated': ['unmated', 'untamed'],\n 'unmaterial': ['manualiter', 'unmaterial'],\n 'unmeated': ['unmeated', 'unteamed'],\n 'unmedical': ['unclaimed', 'undecimal', 'unmedical'],\n 'unmeet': ['unmeet', 'unteem'],\n 'unmemoired': ['unmemoired', 'unmemoried'],\n 'unmemoried': ['unmemoired', 'unmemoried'],\n 'unmental': ['unmantle', 'unmental'],\n 'unmerged': ['gerendum', 'unmerged'],\n 'unmerited': ['undertime', 'unmerited'],\n 'unmettle': ['temulent', 'unmettle'],\n 'unminable': ['nelumbian', 'unminable'],\n 'unmined': ['minuend', 'unmined'],\n 'unminted': ['indument', 'unminted'],\n 'unmisled': ['muslined', 'unmisled', 'unsmiled'],\n 'unmiter': ['minuter', 'unmiter'],\n 'unmodest': ['mudstone', 'unmodest'],\n 'unmodish': ['muishond', 'unmodish'],\n 'unmomentary': ['monumentary', 'unmomentary'],\n 'unmonitored': ['undermotion', 'unmonitored'],\n 'unmorbid': ['moribund', 'unmorbid'],\n 'unmorose': ['enormous', 'unmorose'],\n 'unmortised': ['semirotund', 'unmortised'],\n 'unmotived': ['unmotived', 'unvomited'],\n 'unmystical': ['stimulancy', 'unmystical'],\n 'unnagged': ['unganged', 'unnagged'],\n 'unnail': ['alnuin', 'unnail'],\n 'unnameability': ['unamenability', 'unnameability'],\n 'unnameable': ['unamenable', 'unnameable'],\n 'unnameableness': ['unamenableness', 'unnameableness'],\n 'unnameably': ['unamenably', 'unnameably'],\n 'unnamed': ['mundane', 'unamend', 'unmaned', 'unnamed'],\n 'unnational': ['annulation', 'unnational'],\n 'unnative': ['unnative', 'venutian'],\n 'unneared': ['unearned', 'unneared'],\n 'unnest': ['unnest', 'unsent'],\n 'unnetted': ['unnetted', 'untented'],\n 'unnose': ['nonuse', 'unnose'],\n 'unnoted': ['unnoted', 'untoned'],\n 'unnoticed': ['continued', 'unnoticed'],\n 'unoared': ['rondeau', 'unoared'],\n 'unogled': ['unlodge', 'unogled'],\n 'unomitted': ['dumontite', 'unomitted'],\n 'unoperatic': ['precaution', 'unoperatic'],\n 'unorbed': ['beround', 'bounder', 'rebound', 'unbored', 'unorbed', 'unrobed'],\n 'unorder': ['rondure', 'rounder', 'unorder'],\n 'unordered': ['underdoer', 'unordered'],\n 'unoriented': ['nonerudite', 'unoriented'],\n 'unown': ['unown', 'unwon'],\n 'unowned': ['enwound', 'unowned'],\n 'unpacable': ['uncapable', 'unpacable'],\n 'unpacker': ['reunpack', 'unpacker'],\n 'unpaired': ['unpaired', 'unrepaid'],\n 'unpale': ['unpale', 'uplane'],\n 'unpalped': ['unlapped', 'unpalped'],\n 'unpanel': ['unpanel', 'unpenal'],\n 'unparceled': ['unparceled', 'unreplaced'],\n 'unparched': ['underchap', 'unparched'],\n 'unpared': ['undrape', 'unpared', 'unraped'],\n 'unparsed': ['undersap', 'unparsed', 'unrasped', 'unspared', 'unspread'],\n 'unparted': ['depurant', 'unparted'],\n 'unpartial': ['tarpaulin', 'unpartial'],\n 'unpenal': ['unpanel', 'unpenal'],\n 'unpenetrable': ['unpenetrable', 'unrepentable'],\n 'unpent': ['punnet', 'unpent'],\n 'unperch': ['puncher', 'unperch'],\n 'unpercolated': ['counterpaled', 'counterplead', 'unpercolated'],\n 'unpermissible': ['unimpressible', 'unpermissible'],\n 'unpermissive': ['unimpressive', 'unpermissive'],\n 'unperuked': ['underpuke', 'unperuked'],\n 'unpervaded': ['undepraved', 'unpervaded'],\n 'unpetal': ['plutean', 'unpetal', 'unpleat'],\n 'unpharasaic': ['parasuchian', 'unpharasaic'],\n 'unphased': ['unhasped', 'unphased', 'unshaped'],\n 'unphrased': ['unphrased', 'unsharped'],\n 'unpickled': ['dunpickle', 'unpickled'],\n 'unpierced': ['preinduce', 'unpierced'],\n 'unpile': ['lupine', 'unpile', 'upline'],\n 'unpiled': ['unpiled', 'unplied'],\n 'unplace': ['cleanup', 'unplace'],\n 'unplain': ['pinnula', 'unplain'],\n 'unplait': ['nuptial', 'unplait'],\n 'unplanted': ['pendulant', 'unplanted'],\n 'unplat': ['puntal', 'unplat'],\n 'unpleased': ['unelapsed', 'unpleased'],\n 'unpleat': ['plutean', 'unpetal', 'unpleat'],\n 'unpleated': ['pendulate', 'unpleated'],\n 'unplied': ['unpiled', 'unplied'],\n 'unplug': ['ungulp', 'unplug'],\n 'unplumed': ['pendulum', 'unlumped', 'unplumed'],\n 'unpoled': ['duplone', 'unpoled'],\n 'unpolished': ['disulphone', 'unpolished'],\n 'unpolitic': ['punctilio', 'unpolitic'],\n 'unpooled': ['unlooped', 'unpooled'],\n 'unposted': ['outspend', 'unposted'],\n 'unpot': ['punto', 'unpot', 'untop'],\n 'unprayed': ['underpay', 'unprayed'],\n 'unprelatic': ['periculant', 'unprelatic'],\n 'unpressed': ['resuspend', 'suspender', 'unpressed'],\n 'unpricked': ['underpick', 'unpricked'],\n 'unprint': ['turnpin', 'unprint'],\n 'unprosaic': ['inocarpus', 'unprosaic'],\n 'unproselyted': ['pseudelytron', 'unproselyted'],\n 'unproud': ['roundup', 'unproud'],\n 'unpursued': ['unpursued', 'unusurped'],\n 'unpursuing': ['unpursuing', 'unusurping'],\n 'unquietable': ['unequitable', 'unquietable'],\n 'unrabbeted': ['beturbaned', 'unrabbeted'],\n 'unraced': ['durance', 'redunca', 'unraced'],\n 'unraided': ['underaid', 'unraided'],\n 'unraised': ['denarius', 'desaurin', 'unraised'],\n 'unram': ['muran', 'ruman', 'unarm', 'unram', 'urman'],\n 'unranked': ['undarken', 'unranked'],\n 'unraped': ['undrape', 'unpared', 'unraped'],\n 'unrasped': ['undersap', 'unparsed', 'unrasped', 'unspared', 'unspread'],\n 'unrated': ['daunter', 'unarted', 'unrated', 'untread'],\n 'unravel': ['unravel', 'venular'],\n 'unray': ['anury', 'unary', 'unray'],\n 'unrayed': ['unrayed', 'unready'],\n 'unreactive': ['uncreative', 'unreactive'],\n 'unread': ['endura', 'neurad', 'undear', 'unread'],\n 'unready': ['unrayed', 'unready'],\n 'unreal': ['lunare', 'neural', 'ulnare', 'unreal'],\n 'unrealism': ['semilunar', 'unrealism'],\n 'unrealist': ['neuralist', 'ulsterian', 'unrealist'],\n 'unrealmed': ['denumeral', 'undermeal', 'unrealmed'],\n 'unrebated': ['eburnated', 'underbeat', 'unrebated'],\n 'unrebutted': ['unbuttered', 'unrebutted'],\n 'unreceived': ['undeceiver', 'unreceived'],\n 'unrecent': ['uncenter', 'unrecent'],\n 'unrecited': ['centuried', 'unrecited'],\n 'unrectifiable': ['uncertifiable', 'unrectifiable'],\n 'unrectified': ['uncertified', 'unrectified'],\n 'unred': ['runed', 'under', 'unred'],\n 'unredacted': ['underacted', 'unredacted'],\n 'unreduct': ['undercut', 'unreduct'],\n 'unreeve': ['revenue', 'unreeve'],\n 'unreeving': ['unreeving', 'unveering'],\n 'unregal': ['granule', 'unlarge', 'unregal'],\n 'unregard': ['grandeur', 'unregard'],\n 'unregarded': ['undergrade', 'unregarded'],\n 'unrein': ['enruin', 'neurin', 'unrein'],\n 'unreinstated': ['unreinstated', 'unstraitened'],\n 'unrelated': ['unaltered', 'unrelated'],\n 'unrelating': ['unaltering', 'unrelating'],\n 'unreleased': ['underlease', 'unreleased'],\n 'unrelegated': ['underlegate', 'unrelegated'],\n 'unremarked': ['undermaker', 'unremarked'],\n 'unrent': ['runnet', 'tunner', 'unrent'],\n 'unrented': ['unrented', 'untender'],\n 'unrepaid': ['unpaired', 'unrepaid'],\n 'unrepentable': ['unpenetrable', 'unrepentable'],\n 'unrepined': ['unrepined', 'unripened'],\n 'unrepining': ['unrepining', 'unripening'],\n 'unreplaced': ['unparceled', 'unreplaced'],\n 'unreplied': ['underpile', 'unreplied'],\n 'unreposed': ['underpose', 'unreposed'],\n 'unreputed': ['unerupted', 'unreputed'],\n 'unrescinded': ['undiscerned', 'unrescinded'],\n 'unrescued': ['unrescued', 'unsecured'],\n 'unreserved': ['underserve',\n                'underverse',\n                'undeserver',\n                'unreserved',\n                'unreversed'],\n 'unresisted': ['unresisted', 'unsistered'],\n 'unresolve': ['nervulose', 'unresolve', 'vulnerose'],\n 'unrespect': ['unrespect', 'unscepter', 'unsceptre'],\n 'unrespected': ['unrespected', 'unsceptered'],\n 'unrested': ['sederunt', 'underset', 'undesert', 'unrested'],\n 'unresting': ['insurgent', 'unresting'],\n 'unretarded': ['undertread', 'unretarded'],\n 'unreticent': ['entincture', 'unreticent'],\n 'unretired': ['reintrude', 'unretired'],\n 'unrevered': ['enverdure', 'unrevered'],\n 'unreversed': ['underserve',\n                'underverse',\n                'undeserver',\n                'unreserved',\n                'unreversed'],\n 'unreviled': ['underlive', 'unreviled'],\n 'unrevised': ['undiverse', 'unrevised'],\n 'unrevocable': ['uncoverable', 'unrevocable'],\n 'unribbed': ['unbribed', 'unribbed'],\n 'unrich': ['unrich', 'urchin'],\n 'unrid': ['rundi', 'unrid'],\n 'unridable': ['indurable', 'unbrailed', 'unridable'],\n 'unriddle': ['underlid', 'unriddle'],\n 'unride': ['diurne', 'inured', 'ruined', 'unride'],\n 'unridged': ['underdig', 'ungirded', 'unridged'],\n 'unrig': ['irgun', 'ruing', 'unrig'],\n 'unright': ['hurting', 'ungirth', 'unright'],\n 'unrighted': ['ungirthed', 'unrighted'],\n 'unring': ['unring', 'urning'],\n 'unringed': ['enduring', 'unringed'],\n 'unripe': ['purine', 'unripe', 'uprein'],\n 'unripely': ['pyruline', 'unripely'],\n 'unripened': ['unrepined', 'unripened'],\n 'unripening': ['unrepining', 'unripening'],\n 'unroaded': ['unadored', 'unroaded'],\n 'unrobed': ['beround', 'bounder', 'rebound', 'unbored', 'unorbed', 'unrobed'],\n 'unrocked': ['uncorked', 'unrocked'],\n 'unroot': ['notour', 'unroot'],\n 'unroped': ['pounder', 'repound', 'unroped'],\n 'unrosed': ['resound', 'sounder', 'unrosed'],\n 'unrostrated': ['tetrandrous', 'unrostrated'],\n 'unrotated': ['rotundate', 'unrotated'],\n 'unroted': ['tendour', 'unroted'],\n 'unroused': ['unroused', 'unsoured'],\n 'unrouted': ['unrouted', 'untoured'],\n 'unrowed': ['rewound', 'unrowed', 'wounder'],\n 'unroweled': ['unlowered', 'unroweled'],\n 'unroyalist': ['unroyalist', 'unsolitary'],\n 'unruined': ['uninured', 'unruined'],\n 'unruled': ['unlured', 'unruled'],\n 'unrun': ['unrun', 'unurn'],\n 'unruth': ['unhurt', 'unruth'],\n 'unsack': ['uncask', 'unsack'],\n 'unsacked': ['uncasked', 'unsacked'],\n 'unsacred': ['unsacred', 'unscared'],\n 'unsad': ['sudan', 'unsad'],\n 'unsadden': ['unsadden', 'unsanded'],\n 'unsage': ['gnaeus', 'unsage'],\n 'unsaid': ['sudani', 'unsaid'],\n 'unsailed': ['unaisled', 'unsailed'],\n 'unsaint': ['antisun', 'unsaint', 'unsatin', 'unstain'],\n 'unsainted': ['unsainted', 'unstained'],\n 'unsalt': ['sultan', 'unsalt'],\n 'unsalted': ['unsalted', 'unslated', 'unstaled'],\n 'unsanded': ['unsadden', 'unsanded'],\n 'unsardonic': ['andronicus', 'unsardonic'],\n 'unsashed': ['sunshade', 'unsashed'],\n 'unsatable': ['sublanate', 'unsatable'],\n 'unsatiable': ['balaustine', 'unsatiable'],\n 'unsatin': ['antisun', 'unsaint', 'unsatin', 'unstain'],\n 'unsauced': ['uncaused', 'unsauced'],\n 'unscale': ['censual', 'unscale'],\n 'unscalloped': ['uncollapsed', 'unscalloped'],\n 'unscaly': ['ancylus', 'unscaly'],\n 'unscared': ['unsacred', 'unscared'],\n 'unscepter': ['unrespect', 'unscepter', 'unsceptre'],\n 'unsceptered': ['unrespected', 'unsceptered'],\n 'unsceptre': ['unrespect', 'unscepter', 'unsceptre'],\n 'unscoured': ['uncoursed', 'unscoured'],\n 'unseal': ['elanus', 'unseal'],\n 'unsealable': ['unleasable', 'unsealable'],\n 'unsealed': ['unleased', 'unsealed'],\n 'unseared': ['undersea', 'unerased', 'unseared'],\n 'unseat': ['nasute', 'nauset', 'unseat'],\n 'unseated': ['unseated', 'unsedate', 'unteased'],\n 'unsecured': ['unrescued', 'unsecured'],\n 'unsedate': ['unseated', 'unsedate', 'unteased'],\n 'unsee': ['ensue', 'seenu', 'unsee'],\n 'unseethed': ['unseethed', 'unsheeted'],\n 'unseizable': ['unseizable', 'unsizeable'],\n 'unselect': ['esculent', 'unselect'],\n 'unsensed': ['nudeness', 'unsensed'],\n 'unsensitive': ['unitiveness', 'unsensitive'],\n 'unsent': ['unnest', 'unsent'],\n 'unsepulcher': ['unsepulcher', 'unsepulchre'],\n 'unsepulchre': ['unsepulcher', 'unsepulchre'],\n 'unserrated': ['unarrested', 'unserrated'],\n 'unserved': ['unserved', 'unversed'],\n 'unset': ['unset', 'usent'],\n 'unsevered': ['undeserve', 'unsevered'],\n 'unsewed': ['sunweed', 'unsewed'],\n 'unsex': ['nexus', 'unsex'],\n 'unshaded': ['undashed', 'unshaded'],\n 'unshaled': ['unhalsed', 'unlashed', 'unshaled'],\n 'unshamed': ['unmashed', 'unshamed'],\n 'unshaped': ['unhasped', 'unphased', 'unshaped'],\n 'unsharing': ['ungarnish', 'unsharing'],\n 'unsharped': ['unphrased', 'unsharped'],\n 'unsharpened': ['undershapen', 'unsharpened'],\n 'unsheared': ['unhearsed', 'unsheared'],\n 'unsheet': ['enthuse', 'unsheet'],\n 'unsheeted': ['unseethed', 'unsheeted'],\n 'unship': ['inpush', 'punish', 'unship'],\n 'unshipment': ['punishment', 'unshipment'],\n 'unshoe': ['unhose', 'unshoe'],\n 'unshoed': ['unhosed', 'unshoed'],\n 'unshore': ['unhorse', 'unshore'],\n 'unshored': ['enshroud', 'unshored'],\n 'unshortened': ['underhonest', 'unshortened'],\n 'unsicker': ['cruisken', 'unsicker'],\n 'unsickled': ['klendusic', 'unsickled'],\n 'unsight': ['gutnish', 'husting', 'unsight'],\n 'unsignable': ['unsignable', 'unsingable'],\n 'unsigned': ['undesign', 'unsigned', 'unsinged'],\n 'unsigneted': ['uningested', 'unsigneted'],\n 'unsilenced': ['unlicensed', 'unsilenced'],\n 'unsimple': ['splenium', 'unsimple'],\n 'unsin': ['sunni', 'unsin'],\n 'unsingable': ['unsignable', 'unsingable'],\n 'unsinged': ['undesign', 'unsigned', 'unsinged'],\n 'unsistered': ['unresisted', 'unsistered'],\n 'unsizeable': ['unseizable', 'unsizeable'],\n 'unskin': ['insunk', 'unskin'],\n 'unslate': ['sultane', 'unslate'],\n 'unslated': ['unsalted', 'unslated', 'unstaled'],\n 'unslating': ['unlasting', 'unslating'],\n 'unslept': ['unslept', 'unspelt'],\n 'unslighted': ['sunlighted', 'unslighted'],\n 'unslit': ['insult', 'sunlit', 'unlist', 'unslit'],\n 'unslot': ['unlost', 'unslot'],\n 'unsmeared': ['underseam', 'unsmeared'],\n 'unsmiled': ['muslined', 'unmisled', 'unsmiled'],\n 'unsnap': ['pannus', 'sannup', 'unsnap', 'unspan'],\n 'unsnatch': ['unsnatch', 'unstanch'],\n 'unsnow': ['unsnow', 'unsown'],\n 'unsocial': ['sualocin', 'unsocial'],\n 'unsoil': ['insoul', 'linous', 'nilous', 'unsoil'],\n 'unsoiled': ['delusion', 'unsoiled'],\n 'unsoldier': ['undersoil', 'unsoldier'],\n 'unsole': ['ensoul', 'olenus', 'unsole'],\n 'unsolitary': ['unroyalist', 'unsolitary'],\n 'unsomber': ['unsomber', 'unsombre'],\n 'unsombre': ['unsomber', 'unsombre'],\n 'unsome': ['nomeus', 'unsome'],\n 'unsore': ['souren', 'unsore', 'ursone'],\n 'unsort': ['tornus', 'unsort'],\n 'unsortable': ['neuroblast', 'unsortable'],\n 'unsorted': ['tonsured', 'unsorted', 'unstored'],\n 'unsoured': ['unroused', 'unsoured'],\n 'unsown': ['unsnow', 'unsown'],\n 'unspan': ['pannus', 'sannup', 'unsnap', 'unspan'],\n 'unspar': ['surnap', 'unspar'],\n 'unspared': ['undersap', 'unparsed', 'unrasped', 'unspared', 'unspread'],\n 'unsparred': ['underspar', 'unsparred'],\n 'unspecterlike': ['unspecterlike', 'unspectrelike'],\n 'unspectrelike': ['unspecterlike', 'unspectrelike'],\n 'unsped': ['unsped', 'upsend'],\n 'unspelt': ['unslept', 'unspelt'],\n 'unsphering': ['gunnership', 'unsphering'],\n 'unspiable': ['subalpine', 'unspiable'],\n 'unspike': ['spunkie', 'unspike'],\n 'unspit': ['ptinus', 'unspit'],\n 'unspoil': ['pulsion', 'unspoil', 'upsilon'],\n 'unspot': ['pontus', 'unspot', 'unstop'],\n 'unspread': ['undersap', 'unparsed', 'unrasped', 'unspared', 'unspread'],\n 'unstabled': ['dunstable', 'unblasted', 'unstabled'],\n 'unstain': ['antisun', 'unsaint', 'unsatin', 'unstain'],\n 'unstained': ['unsainted', 'unstained'],\n 'unstaled': ['unsalted', 'unslated', 'unstaled'],\n 'unstanch': ['unsnatch', 'unstanch'],\n 'unstar': ['saturn', 'unstar'],\n 'unstatable': ['unstatable', 'untastable'],\n 'unstate': ['tetanus', 'unstate', 'untaste'],\n 'unstateable': ['unstateable', 'untasteable'],\n 'unstated': ['unstated', 'untasted'],\n 'unstating': ['unstating', 'untasting'],\n 'unstayed': ['unstayed', 'unsteady'],\n 'unsteady': ['unstayed', 'unsteady'],\n 'unstercorated': ['countertrades', 'unstercorated'],\n 'unstern': ['stunner', 'unstern'],\n 'unstocked': ['duckstone', 'unstocked'],\n 'unstoic': ['cotinus', 'suction', 'unstoic'],\n 'unstoical': ['suctional', 'sulcation', 'unstoical'],\n 'unstop': ['pontus', 'unspot', 'unstop'],\n 'unstopple': ['pulpstone', 'unstopple'],\n 'unstore': ['snouter', 'tonsure', 'unstore'],\n 'unstored': ['tonsured', 'unsorted', 'unstored'],\n 'unstoried': ['detrusion', 'tinderous', 'unstoried'],\n 'unstormed': ['undermost', 'unstormed'],\n 'unstrain': ['insurant', 'unstrain'],\n 'unstrained': ['understain', 'unstrained'],\n 'unstraitened': ['unreinstated', 'unstraitened'],\n 'unstranded': ['understand', 'unstranded'],\n 'unstrewed': ['unstrewed', 'unwrested'],\n 'unsucculent': ['centunculus', 'unsucculent'],\n 'unsued': ['unsued', 'unused'],\n 'unsusceptible': ['unsusceptible', 'unsuspectible'],\n 'unsusceptive': ['unsusceptive', 'unsuspective'],\n 'unsuspectible': ['unsusceptible', 'unsuspectible'],\n 'unsuspective': ['unsusceptive', 'unsuspective'],\n 'untactful': ['fluctuant', 'untactful'],\n 'untailed': ['nidulate', 'untailed'],\n 'untame': ['unmate', 'untame', 'unteam'],\n 'untamed': ['unmated', 'untamed'],\n 'untanned': ['nunnated', 'untanned'],\n 'untap': ['punta', 'unapt', 'untap'],\n 'untar': ['arnut', 'tuarn', 'untar'],\n 'untastable': ['unstatable', 'untastable'],\n 'untaste': ['tetanus', 'unstate', 'untaste'],\n 'untasteable': ['unstateable', 'untasteable'],\n 'untasted': ['unstated', 'untasted'],\n 'untasting': ['unstating', 'untasting'],\n 'untaught': ['taungthu', 'untaught'],\n 'untaunted': ['unattuned', 'untaunted'],\n 'unteach': ['uncheat', 'unteach'],\n 'unteaching': ['uncheating', 'unteaching'],\n 'unteam': ['unmate', 'untame', 'unteam'],\n 'unteamed': ['unmeated', 'unteamed'],\n 'unteased': ['unseated', 'unsedate', 'unteased'],\n 'unteem': ['unmeet', 'unteem'],\n 'untemper': ['erumpent', 'untemper'],\n 'untender': ['unrented', 'untender'],\n 'untented': ['unnetted', 'untented'],\n 'unthatch': ['nuthatch', 'unthatch'],\n 'unthick': ['kutchin', 'unthick'],\n 'unthrall': ['turnhall', 'unthrall'],\n 'untiaraed': ['diuranate', 'untiaraed'],\n 'untidy': ['nudity', 'untidy'],\n 'untie': ['intue', 'unite', 'untie'],\n 'untied': ['dunite', 'united', 'untied'],\n 'until': ['unlit', 'until'],\n 'untile': ['lutein', 'untile'],\n 'untiled': ['diluent', 'untiled'],\n 'untilted': ['dilutent', 'untilted', 'untitled'],\n 'untimely': ['minutely', 'untimely'],\n 'untin': ['nintu', 'ninut', 'untin'],\n 'untine': ['ineunt', 'untine'],\n 'untinseled': ['unenlisted', 'unlistened', 'untinseled'],\n 'untirable': ['untirable', 'untriable'],\n 'untire': ['runite', 'triune', 'uniter', 'untire'],\n 'untired': ['intrude', 'turdine', 'untired', 'untried'],\n 'untithable': ['unhittable', 'untithable'],\n 'untitled': ['dilutent', 'untilted', 'untitled'],\n 'unto': ['tuno', 'unto'],\n 'untoiled': ['outlined', 'untoiled'],\n 'untoned': ['unnoted', 'untoned'],\n 'untooled': ['unlooted', 'untooled'],\n 'untop': ['punto', 'unpot', 'untop'],\n 'untorn': ['tunnor', 'untorn'],\n 'untortured': ['undertutor', 'untortured'],\n 'untotalled': ['unallotted', 'untotalled'],\n 'untouch': ['uncouth', 'untouch'],\n 'untoured': ['unrouted', 'untoured'],\n 'untrace': ['centaur', 'untrace'],\n 'untraceable': ['uncreatable', 'untraceable'],\n 'untraceableness': ['uncreatableness', 'untraceableness'],\n 'untraced': ['uncarted', 'uncrated', 'underact', 'untraced'],\n 'untraceried': ['antireducer', 'reincrudate', 'untraceried'],\n 'untradeable': ['untradeable', 'untreadable'],\n 'untrain': ['antirun', 'untrain', 'urinant'],\n 'untread': ['daunter', 'unarted', 'unrated', 'untread'],\n 'untreadable': ['untradeable', 'untreadable'],\n 'untreatable': ['entablature', 'untreatable'],\n 'untreed': ['denture', 'untreed'],\n 'untriable': ['untirable', 'untriable'],\n 'untribal': ['tribunal', 'turbinal', 'untribal'],\n 'untriced': ['undirect', 'untriced'],\n 'untried': ['intrude', 'turdine', 'untired', 'untried'],\n 'untrig': ['ungirt', 'untrig'],\n 'untrod': ['rotund', 'untrod'],\n 'untropical': ['ponticular', 'untropical'],\n 'untroubled': ['outblunder', 'untroubled'],\n 'untrowed': ['undertow', 'untrowed'],\n 'untruss': ['sturnus', 'untruss'],\n 'untutored': ['outturned', 'untutored'],\n 'unurn': ['unrun', 'unurn'],\n 'unused': ['unsued', 'unused'],\n 'unusurped': ['unpursued', 'unusurped'],\n 'unusurping': ['unpursuing', 'unusurping'],\n 'unvailable': ['invaluable', 'unvailable'],\n 'unveering': ['unreeving', 'unveering'],\n 'unveil': ['unevil', 'unlive', 'unveil'],\n 'unveiled': ['unlevied', 'unveiled'],\n 'unveined': ['unenvied', 'unveined'],\n 'unvenerated': ['unenervated', 'unvenerated'],\n 'unveniable': ['unenviable', 'unveniable'],\n 'unveritable': ['unavertible', 'unveritable'],\n 'unversed': ['unserved', 'unversed'],\n 'unvessel': ['unvessel', 'usselven'],\n 'unvest': ['unvest', 'venust'],\n 'unvomited': ['unmotived', 'unvomited'],\n 'unwagered': ['underwage', 'unwagered'],\n 'unwan': ['unwan', 'wunna'],\n 'unware': ['unware', 'wauner'],\n 'unwarp': ['unwarp', 'unwrap'],\n 'unwary': ['runway', 'unwary'],\n 'unwavered': ['underwave', 'unwavered'],\n 'unwept': ['unwept', 'upwent'],\n 'unwon': ['unown', 'unwon'],\n 'unwrap': ['unwarp', 'unwrap'],\n 'unwrested': ['unstrewed', 'unwrested'],\n 'unwronged': ['undergown', 'unwronged'],\n 'unyoung': ['unyoung', 'youngun'],\n 'unze': ['unze', 'zenu'],\n 'up': ['pu', 'up'],\n 'uparching': ['ungraphic', 'uparching'],\n 'uparise': ['spuriae', 'uparise', 'upraise'],\n 'uparna': ['purana', 'uparna'],\n 'upas': ['apus', 'supa', 'upas'],\n 'upblast': ['subplat', 'upblast'],\n 'upblow': ['blowup', 'upblow'],\n 'upbreak': ['breakup', 'upbreak'],\n 'upbuild': ['buildup', 'upbuild'],\n 'upcast': ['catsup', 'upcast'],\n 'upcatch': ['catchup', 'upcatch'],\n 'upclimb': ['plumbic', 'upclimb'],\n 'upclose': ['culpose', 'ploceus', 'upclose'],\n 'upcock': ['cockup', 'upcock'],\n 'upcoil': ['oilcup', 'upcoil'],\n 'upcourse': ['cupreous', 'upcourse'],\n 'upcover': ['overcup', 'upcover'],\n 'upcreep': ['prepuce', 'upcreep'],\n 'upcurrent': ['puncturer', 'upcurrent'],\n 'upcut': ['cutup', 'upcut'],\n 'updo': ['doup', 'updo'],\n 'updraw': ['updraw', 'upward'],\n 'updry': ['prudy', 'purdy', 'updry'],\n 'upeat': ['taupe', 'upeat'],\n 'upflare': ['rapeful', 'upflare'],\n 'upflower': ['powerful', 'upflower'],\n 'upgale': ['plague', 'upgale'],\n 'upget': ['getup', 'upget'],\n 'upgirt': ['ripgut', 'upgirt'],\n 'upgo': ['goup', 'ogpu', 'upgo'],\n 'upgrade': ['guepard', 'upgrade'],\n 'uphelm': ['phleum', 'uphelm'],\n 'uphold': ['holdup', 'uphold'],\n 'upholder': ['reuphold', 'upholder'],\n 'upholsterer': ['reupholster', 'upholsterer'],\n 'upla': ['paul', 'upla'],\n 'upland': ['dunlap', 'upland'],\n 'uplander': ['pendular', 'underlap', 'uplander'],\n 'uplane': ['unpale', 'uplane'],\n 'upleap': ['papule', 'upleap'],\n 'uplift': ['tipful', 'uplift'],\n 'uplifter': ['reuplift', 'uplifter'],\n 'upline': ['lupine', 'unpile', 'upline'],\n 'uplock': ['lockup', 'uplock'],\n 'upon': ['noup', 'puno', 'upon'],\n 'uppers': ['supper', 'uppers'],\n 'uppish': ['hippus', 'uppish'],\n 'upraise': ['spuriae', 'uparise', 'upraise'],\n 'uprear': ['parure', 'uprear'],\n 'uprein': ['purine', 'unripe', 'uprein'],\n 'uprip': ['ripup', 'uprip'],\n 'uprisal': ['parulis', 'spirula', 'uprisal'],\n 'uprisement': ['episternum', 'uprisement'],\n 'upriser': ['siruper', 'upriser'],\n 'uprist': ['purist', 'spruit', 'uprist', 'upstir'],\n 'uproad': ['podura', 'uproad'],\n 'uproom': ['moorup', 'uproom'],\n 'uprose': ['poseur', 'pouser', 'souper', 'uprose'],\n 'upscale': ['capsule', 'specula', 'upscale'],\n 'upseal': ['apulse', 'upseal'],\n 'upsend': ['unsped', 'upsend'],\n 'upset': ['setup', 'stupe', 'upset'],\n 'upsettable': ['subpeltate', 'upsettable'],\n 'upsetter': ['upsetter', 'upstreet'],\n 'upshore': ['ephorus', 'orpheus', 'upshore'],\n 'upshot': ['tophus', 'upshot'],\n 'upshut': ['pushtu', 'upshut'],\n 'upsilon': ['pulsion', 'unspoil', 'upsilon'],\n 'upsit': ['puist', 'upsit'],\n 'upslant': ['pulsant', 'upslant'],\n 'upsmite': ['impetus', 'upsmite'],\n 'upsoar': ['parous', 'upsoar'],\n 'upstair': ['tapirus', 'upstair'],\n 'upstand': ['dustpan', 'upstand'],\n 'upstare': ['pasteur', 'pasture', 'upstare'],\n 'upstater': ['stuprate', 'upstater'],\n 'upsteal': ['pulsate', 'spatule', 'upsteal'],\n 'upstem': ['septum', 'upstem'],\n 'upstir': ['purist', 'spruit', 'uprist', 'upstir'],\n 'upstraight': ['straightup', 'upstraight'],\n 'upstreet': ['upsetter', 'upstreet'],\n 'upstrive': ['spurtive', 'upstrive'],\n 'upsun': ['sunup', 'upsun'],\n 'upsway': ['upsway', 'upways'],\n 'uptake': ['ketupa', 'uptake'],\n 'uptend': ['pudent', 'uptend'],\n 'uptilt': ['tiltup', 'uptilt'],\n 'uptoss': ['tossup', 'uptoss'],\n 'uptrace': ['capture', 'uptrace'],\n 'uptrain': ['pintura', 'puritan', 'uptrain'],\n 'uptree': ['repute', 'uptree'],\n 'uptrend': ['prudent', 'prunted', 'uptrend'],\n 'upturn': ['turnup', 'upturn'],\n 'upward': ['updraw', 'upward'],\n 'upwarp': ['upwarp', 'upwrap'],\n 'upways': ['upsway', 'upways'],\n 'upwent': ['unwept', 'upwent'],\n 'upwind': ['upwind', 'windup'],\n 'upwrap': ['upwarp', 'upwrap'],\n 'ura': ['aru', 'rua', 'ura'],\n 'uracil': ['curial', 'lauric', 'uracil', 'uralic'],\n 'uraemic': ['maurice', 'uraemic'],\n 'uraeus': ['aureus', 'uraeus'],\n 'ural': ['alur', 'laur', 'lura', 'raul', 'ural'],\n 'urali': ['rauli', 'urali', 'urial'],\n 'uralian': ['lunaria', 'ulnaria', 'uralian'],\n 'uralic': ['curial', 'lauric', 'uracil', 'uralic'],\n 'uralite': ['laurite', 'uralite'],\n 'uralitize': ['ritualize', 'uralitize'],\n 'uramido': ['doarium', 'uramido'],\n 'uramil': ['rimula', 'uramil'],\n 'uramino': ['mainour', 'uramino'],\n 'uran': ['raun', 'uran', 'urna'],\n 'uranate': ['taurean', 'uranate'],\n 'urania': ['anuria', 'urania'],\n 'uranic': ['anuric', 'cinura', 'uranic'],\n 'uranine': ['aneurin', 'uranine'],\n 'uranism': ['surinam', 'uranism'],\n 'uranite': ['ruinate', 'taurine', 'uranite', 'urinate'],\n 'uranographist': ['guarantorship', 'uranographist'],\n 'uranolite': ['outlinear', 'uranolite'],\n 'uranoscope': ['oenocarpus', 'uranoscope'],\n 'uranospinite': ['resupination', 'uranospinite'],\n 'uranotil': ['rotulian', 'uranotil'],\n 'uranous': ['anurous', 'uranous'],\n 'uranyl': ['lunary', 'uranyl'],\n 'uranylic': ['culinary', 'uranylic'],\n 'urari': ['aurir', 'urari'],\n 'urase': ['serau', 'urase'],\n 'uratic': ['tauric', 'uratic', 'urtica'],\n 'urazine': ['azurine', 'urazine'],\n 'urban': ['buran', 'unbar', 'urban'],\n 'urbane': ['eburna', 'unbare', 'unbear', 'urbane'],\n 'urbanite': ['braunite', 'urbanite', 'urbinate'],\n 'urbian': ['burian', 'urbian'],\n 'urbification': ['rubification', 'urbification'],\n 'urbify': ['rubify', 'urbify'],\n 'urbinate': ['braunite', 'urbanite', 'urbinate'],\n 'urceiform': ['eruciform', 'urceiform'],\n 'urceole': ['urceole', 'urocele'],\n 'urceolina': ['aleuronic', 'urceolina'],\n 'urceolus': ['ulcerous', 'urceolus'],\n 'urchin': ['unrich', 'urchin'],\n 'urd': ['rud', 'urd'],\n 'urde': ['duer', 'dure', 'rude', 'urde'],\n 'urdee': ['redue', 'urdee'],\n 'ure': ['rue', 'ure'],\n 'ureal': ['alure', 'ureal'],\n 'uredine': ['reindue', 'uredine'],\n 'ureic': ['curie', 'ureic'],\n 'uremia': ['aumrie', 'uremia'],\n 'uremic': ['cerium', 'uremic'],\n 'urena': ['urena', 'urnae'],\n 'urent': ['enrut', 'tuner', 'urent'],\n 'uresis': ['issuer', 'uresis'],\n 'uretal': ['tulare', 'uretal'],\n 'ureter': ['retrue', 'ureter'],\n 'ureteropyelogram': ['pyeloureterogram', 'ureteropyelogram'],\n 'urethan': ['haunter', 'nauther', 'unearth', 'unheart', 'urethan'],\n 'urethrascope': ['heterocarpus', 'urethrascope'],\n 'urethrocystitis': ['cystourethritis', 'urethrocystitis'],\n 'urethylan': ['unearthly', 'urethylan'],\n 'uretic': ['curite', 'teucri', 'uretic'],\n 'urf': ['fur', 'urf'],\n 'urge': ['grue', 'urge'],\n 'urgent': ['gunter', 'gurnet', 'urgent'],\n 'urger': ['regur', 'urger'],\n 'uria': ['arui', 'uria'],\n 'uriah': ['huari', 'uriah'],\n 'urial': ['rauli', 'urali', 'urial'],\n 'urian': ['aurin', 'urian'],\n 'uric': ['cuir', 'uric'],\n 'urinal': ['laurin', 'urinal'],\n 'urinant': ['antirun', 'untrain', 'urinant'],\n 'urinate': ['ruinate', 'taurine', 'uranite', 'urinate'],\n 'urination': ['ruination', 'urination'],\n 'urinator': ['ruinator', 'urinator'],\n 'urine': ['inure', 'urine'],\n 'urinogenitary': ['genitourinary', 'urinogenitary'],\n 'urinous': ['ruinous', 'urinous'],\n 'urinousness': ['ruinousness', 'urinousness'],\n 'urite': ['urite', 'uteri'],\n 'urlar': ['rural', 'urlar'],\n 'urled': ['duler', 'urled'],\n 'urling': ['ruling', 'urling'],\n 'urman': ['muran', 'ruman', 'unarm', 'unram', 'urman'],\n 'urn': ['run', 'urn'],\n 'urna': ['raun', 'uran', 'urna'],\n 'urnae': ['urena', 'urnae'],\n 'urnal': ['lunar', 'ulnar', 'urnal'],\n 'urnful': ['unfurl', 'urnful'],\n 'urning': ['unring', 'urning'],\n 'uro': ['our', 'uro'],\n 'urocele': ['urceole', 'urocele'],\n 'urodela': ['roulade', 'urodela'],\n 'urodelan': ['unloader', 'urodelan'],\n 'urogaster': ['surrogate', 'urogaster'],\n 'urogenital': ['regulation', 'urogenital'],\n 'uroglena': ['lagunero', 'organule', 'uroglena'],\n 'urolithic': ['ulotrichi', 'urolithic'],\n 'urometer': ['outremer', 'urometer'],\n 'uronic': ['cuorin', 'uronic'],\n 'uropsile': ['perilous', 'uropsile'],\n 'uroseptic': ['crepitous', 'euproctis', 'uroseptic'],\n 'urosomatic': ['mortacious', 'urosomatic'],\n 'urosteon': ['outsnore', 'urosteon'],\n 'urosternite': ['tenuiroster', 'urosternite'],\n 'urosthenic': ['cetorhinus', 'urosthenic'],\n 'urostyle': ['elytrous', 'urostyle'],\n 'urs': ['rus', 'sur', 'urs'],\n 'ursa': ['rusa', 'saur', 'sura', 'ursa', 'usar'],\n 'ursal': ['larus', 'sural', 'ursal'],\n 'ursidae': ['residua', 'ursidae'],\n 'ursine': ['insure', 'rusine', 'ursine'],\n 'ursone': ['souren', 'unsore', 'ursone'],\n 'ursuk': ['kurus', 'ursuk'],\n 'ursula': ['laurus', 'ursula'],\n 'urtica': ['tauric', 'uratic', 'urtica'],\n 'urticales': ['sterculia', 'urticales'],\n 'urticant': ['taciturn', 'urticant'],\n 'urticose': ['citreous', 'urticose'],\n 'usability': ['suability', 'usability'],\n 'usable': ['suable', 'usable'],\n 'usager': ['sauger', 'usager'],\n 'usance': ['uncase', 'usance'],\n 'usar': ['rusa', 'saur', 'sura', 'ursa', 'usar'],\n 'usara': ['arusa', 'saura', 'usara'],\n 'use': ['sue', 'use'],\n 'usent': ['unset', 'usent'],\n 'user': ['ruse', 'suer', 'sure', 'user'],\n 'ush': ['shu', 'ush'],\n 'ushabti': ['habitus', 'ushabti'],\n 'ushak': ['kusha', 'shaku', 'ushak'],\n 'usher': ['shure', 'usher'],\n 'usitate': ['situate', 'usitate'],\n 'usnic': ['incus', 'usnic'],\n 'usque': ['equus', 'usque'],\n 'usselven': ['unvessel', 'usselven'],\n 'ust': ['stu', 'ust'],\n 'uster': ['serut', 'strue', 'turse', 'uster'],\n 'ustion': ['outsin', 'ustion'],\n 'ustorious': ['sutorious', 'ustorious'],\n 'ustulina': ['lutianus', 'nautilus', 'ustulina'],\n 'usucaption': ['uncaptious', 'usucaption'],\n 'usure': ['eurus', 'usure'],\n 'usurper': ['pursuer', 'usurper'],\n 'ut': ['tu', 'ut'],\n 'uta': ['tau', 'tua', 'uta'],\n 'utas': ['saut', 'tasu', 'utas'],\n 'utch': ['chut', 'tchu', 'utch'],\n 'ute': ['tue', 'ute'],\n 'uteri': ['urite', 'uteri'],\n 'uterine': ['neurite', 'retinue', 'reunite', 'uterine'],\n 'uterocervical': ['overcirculate', 'uterocervical'],\n 'uterus': ['suture', 'uterus'],\n 'utile': ['luite', 'utile'],\n 'utilizable': ['latibulize', 'utilizable'],\n 'utopian': ['opuntia', 'utopian'],\n 'utopism': ['positum', 'utopism'],\n 'utopist': ['outspit', 'utopist'],\n 'utricular': ['turricula', 'utricular'],\n 'utriculosaccular': ['sacculoutricular', 'utriculosaccular'],\n 'utrum': ['murut', 'utrum'],\n 'utterer': ['reutter', 'utterer'],\n 'uva': ['uva', 'vau'],\n 'uval': ['ulva', 'uval'],\n 'uveal': ['uveal', 'value'],\n 'uviol': ['uviol', 'vouli'],\n 'vacate': ['cavate', 'caveat', 'vacate'],\n 'vacation': ['octavian', 'octavina', 'vacation'],\n 'vacationer': ['acervation', 'vacationer'],\n 'vaccinal': ['clavacin', 'vaccinal'],\n 'vacillate': ['laticlave', 'vacillate'],\n 'vacillation': ['cavillation', 'vacillation'],\n 'vacuolate': ['autoclave', 'vacuolate'],\n 'vade': ['dave', 'deva', 'vade', 'veda'],\n 'vady': ['davy', 'vady'],\n 'vage': ['gave', 'vage', 'vega'],\n 'vagile': ['glaive', 'vagile'],\n 'vaginant': ['navigant', 'vaginant'],\n 'vaginate': ['navigate', 'vaginate'],\n 'vaginoabdominal': ['abdominovaginal', 'vaginoabdominal'],\n 'vaginoperineal': ['perineovaginal', 'vaginoperineal'],\n 'vaginovesical': ['vaginovesical', 'vesicovaginal'],\n 'vaguity': ['gavyuti', 'vaguity'],\n 'vai': ['iva', 'vai', 'via'],\n 'vail': ['vail', 'vali', 'vial', 'vila'],\n 'vain': ['ivan', 'vain', 'vina'],\n 'vair': ['ravi', 'riva', 'vair', 'vari', 'vira'],\n 'vakass': ['kavass', 'vakass'],\n 'vale': ['lave', 'vale', 'veal', 'vela'],\n 'valence': ['enclave', 'levance', 'valence'],\n 'valencia': ['valencia', 'valiance'],\n 'valent': ['levant', 'valent'],\n 'valentine': ['levantine', 'valentine'],\n 'valeria': ['reavail', 'valeria'],\n 'valeriana': ['laverania', 'valeriana'],\n 'valeric': ['caliver', 'caviler', 'claiver', 'clavier', 'valeric', 'velaric'],\n 'valerie': ['realive', 'valerie'],\n 'valerin': ['elinvar', 'ravelin', 'reanvil', 'valerin'],\n 'valerone': ['overlean', 'valerone'],\n 'valeryl': ['ravelly', 'valeryl'],\n 'valeur': ['valeur', 'valuer'],\n 'vali': ['vail', 'vali', 'vial', 'vila'],\n 'valiance': ['valencia', 'valiance'],\n 'valiant': ['latvian', 'valiant'],\n 'valine': ['alevin', 'alvine', 'valine', 'veinal', 'venial', 'vineal'],\n 'vallar': ['larval', 'vallar'],\n 'vallidom': ['vallidom', 'villadom'],\n 'vallota': ['lavolta', 'vallota'],\n 'valonia': ['novalia', 'valonia'],\n 'valor': ['valor', 'volar'],\n 'valsa': ['salva', 'valsa', 'vasal'],\n 'valse': ['salve', 'selva', 'slave', 'valse'],\n 'value': ['uveal', 'value'],\n 'valuer': ['valeur', 'valuer'],\n 'vamper': ['revamp', 'vamper'],\n 'vane': ['evan', 'nave', 'vane'],\n 'vaned': ['daven', 'vaned'],\n 'vangee': ['avenge', 'geneva', 'vangee'],\n 'vangeli': ['leaving', 'vangeli'],\n 'vanir': ['invar', 'ravin', 'vanir'],\n 'vanisher': ['enravish', 'ravenish', 'vanisher'],\n 'vansire': ['servian', 'vansire'],\n 'vapid': ['pavid', 'vapid'],\n 'vapidity': ['pavidity', 'vapidity'],\n 'vaporarium': ['parovarium', 'vaporarium'],\n 'vara': ['avar', 'vara'],\n 'varan': ['navar', 'varan', 'varna'],\n 'vare': ['aver', 'rave', 'vare', 'vera'],\n 'varec': ['carve', 'crave', 'varec'],\n 'vari': ['ravi', 'riva', 'vair', 'vari', 'vira'],\n 'variate': ['variate', 'vateria'],\n 'varices': ['varices', 'viscera'],\n 'varicula': ['avicular', 'varicula'],\n 'variegator': ['arrogative', 'variegator'],\n 'varier': ['arrive', 'varier'],\n 'varietal': ['lievaart', 'varietal'],\n 'variola': ['ovarial', 'variola'],\n 'various': ['saviour', 'various'],\n 'varlet': ['travel', 'varlet'],\n 'varletry': ['varletry', 'veratryl'],\n 'varna': ['navar', 'varan', 'varna'],\n 'varnish': ['shirvan', 'varnish'],\n 'varnisher': ['revarnish', 'varnisher'],\n 'varsha': ['avshar', 'varsha'],\n 'vasal': ['salva', 'valsa', 'vasal'],\n 'vase': ['aves', 'save', 'vase'],\n 'vasoepididymostomy': ['epididymovasostomy', 'vasoepididymostomy'],\n 'vat': ['tav', 'vat'],\n 'vateria': ['variate', 'vateria'],\n 'vaticide': ['cavitied', 'vaticide'],\n 'vaticinate': ['inactivate', 'vaticinate'],\n 'vaticination': ['inactivation', 'vaticination'],\n 'vatter': ['tavert', 'vatter'],\n 'vau': ['uva', 'vau'],\n 'vaudois': ['avidous', 'vaudois'],\n 'veal': ['lave', 'vale', 'veal', 'vela'],\n 'vealer': ['laveer', 'leaver', 'reveal', 'vealer'],\n 'vealiness': ['aliveness', 'vealiness'],\n 'vealy': ['leavy', 'vealy'],\n 'vector': ['covert', 'vector'],\n 'veda': ['dave', 'deva', 'vade', 'veda'],\n 'vedaic': ['advice', 'vedaic'],\n 'vedaism': ['adevism', 'vedaism'],\n 'vedana': ['nevada', 'vedana', 'venada'],\n 'vedanta': ['vedanta', 'vetanda'],\n 'vedantism': ['adventism', 'vedantism'],\n 'vedantist': ['adventist', 'vedantist'],\n 'vedist': ['divest', 'vedist'],\n 'vedro': ['dover', 'drove', 'vedro'],\n 'vee': ['eve', 'vee'],\n 'veen': ['even', 'neve', 'veen'],\n 'veer': ['ever', 'reve', 'veer'],\n 'veery': ['every', 'veery'],\n 'vega': ['gave', 'vage', 'vega'],\n 'vegasite': ['estivage', 'vegasite'],\n 'vegetarian': ['renavigate', 'vegetarian'],\n 'vei': ['vei', 'vie'],\n 'veil': ['evil', 'levi', 'live', 'veil', 'vile', 'vlei'],\n 'veiler': ['levier', 'relive', 'reveil', 'revile', 'veiler'],\n 'veiltail': ['illative', 'veiltail'],\n 'vein': ['vein', 'vine'],\n 'veinal': ['alevin', 'alvine', 'valine', 'veinal', 'venial', 'vineal'],\n 'veined': ['endive', 'envied', 'veined'],\n 'veiner': ['enrive', 'envier', 'veiner', 'verine'],\n 'veinless': ['evilness', 'liveness', 'veinless', 'vileness', 'vineless'],\n 'veinlet': ['veinlet', 'vinelet'],\n 'veinous': ['envious', 'niveous', 'veinous'],\n 'veinstone': ['veinstone', 'vonsenite'],\n 'veinwise': ['veinwise', 'vinewise'],\n 'vela': ['lave', 'vale', 'veal', 'vela'],\n 'velar': ['arvel', 'larve', 'laver', 'ravel', 'velar'],\n 'velaric': ['caliver', 'caviler', 'claiver', 'clavier', 'valeric', 'velaric'],\n 'velation': ['olivetan', 'velation'],\n 'velic': ['clive', 'velic'],\n 'veliform': ['overfilm', 'veliform'],\n 'velitation': ['levitation', 'tonalitive', 'velitation'],\n 'velo': ['levo', 'love', 'velo', 'vole'],\n 'velte': ['elvet', 'velte'],\n 'venada': ['nevada', 'vedana', 'venada'],\n 'venal': ['elvan', 'navel', 'venal'],\n 'venality': ['natively', 'venality'],\n 'venatic': ['catvine', 'venatic'],\n 'venation': ['innovate', 'venation'],\n 'venator': ['rotanev', 'venator'],\n 'venatorial': ['venatorial', 'venoatrial'],\n 'vendace': ['devance', 'vendace'],\n 'vender': ['revend', 'vender'],\n 'veneer': ['evener', 'veneer'],\n 'veneerer': ['reveneer', 'veneerer'],\n 'veneralia': ['ravenelia', 'veneralia'],\n 'venerant': ['revenant', 'venerant'],\n 'venerate': ['enervate', 'venerate'],\n 'veneration': ['enervation', 'veneration'],\n 'venerative': ['enervative', 'venerative'],\n 'venerator': ['enervator', 'renovater', 'venerator'],\n 'venerer': ['renerve', 'venerer'],\n 'veneres': ['sevener', 'veneres'],\n 'veneti': ['veneti', 'venite'],\n 'venetian': ['aventine', 'venetian'],\n 'venial': ['alevin', 'alvine', 'valine', 'veinal', 'venial', 'vineal'],\n 'venice': ['cevine', 'evince', 'venice'],\n 'venie': ['nieve', 'venie'],\n 'venite': ['veneti', 'venite'],\n 'venoatrial': ['venatorial', 'venoatrial'],\n 'venom': ['novem', 'venom'],\n 'venosinal': ['slovenian', 'venosinal'],\n 'venter': ['revent', 'venter'],\n 'ventrad': ['ventrad', 'verdant'],\n 'ventricose': ['convertise', 'ventricose'],\n 'ventrine': ['inventer', 'reinvent', 'ventrine', 'vintener'],\n 'ventrodorsad': ['dorsoventrad', 'ventrodorsad'],\n 'ventrodorsal': ['dorsoventral', 'ventrodorsal'],\n 'ventrodorsally': ['dorsoventrally', 'ventrodorsally'],\n 'ventrolateral': ['lateroventral', 'ventrolateral'],\n 'ventromedial': ['medioventral', 'ventromedial'],\n 'ventromesal': ['mesoventral', 'ventromesal'],\n 'venular': ['unravel', 'venular'],\n 'venus': ['nevus', 'venus'],\n 'venust': ['unvest', 'venust'],\n 'venutian': ['unnative', 'venutian'],\n 'vera': ['aver', 'rave', 'vare', 'vera'],\n 'veraciousness': ['oversauciness', 'veraciousness'],\n 'veratroidine': ['rederivation', 'veratroidine'],\n 'veratrole': ['relevator', 'revelator', 'veratrole'],\n 'veratryl': ['varletry', 'veratryl'],\n 'verbal': ['barvel', 'blaver', 'verbal'],\n 'verbality': ['verbality', 'veritably'],\n 'verbatim': ['ambivert', 'verbatim'],\n 'verbena': ['enbrave', 'verbena'],\n 'verberate': ['verberate', 'vertebrae'],\n 'verbose': ['observe', 'obverse', 'verbose'],\n 'verbosely': ['obversely', 'verbosely'],\n 'verdant': ['ventrad', 'verdant'],\n 'verdea': ['evader', 'verdea'],\n 'verdelho': ['overheld', 'verdelho'],\n 'verdin': ['driven', 'nervid', 'verdin'],\n 'verditer': ['diverter', 'redivert', 'verditer'],\n 'vergi': ['giver', 'vergi'],\n 'veri': ['rive', 'veri', 'vier', 'vire'],\n 'veridical': ['larvicide', 'veridical'],\n 'veridicous': ['recidivous', 'veridicous'],\n 'verily': ['livery', 'verily'],\n 'verine': ['enrive', 'envier', 'veiner', 'verine'],\n 'verism': ['verism', 'vermis'],\n 'verist': ['stiver', 'strive', 'verist'],\n 'veritable': ['avertible', 'veritable'],\n 'veritably': ['verbality', 'veritably'],\n 'vermian': ['minerva', 'vermian'],\n 'verminal': ['minerval', 'verminal'],\n 'vermis': ['verism', 'vermis'],\n 'vernacularist': ['intervascular', 'vernacularist'],\n 'vernal': ['nerval', 'vernal'],\n 'vernation': ['nervation', 'vernation'],\n 'vernicose': ['coversine', 'vernicose'],\n 'vernine': ['innerve', 'nervine', 'vernine'],\n 'veronese': ['overseen', 'veronese'],\n 'veronica': ['corvinae', 'veronica'],\n 'verpa': ['paver', 'verpa'],\n 'verre': ['rever', 'verre'],\n 'verrucous': ['recurvous', 'verrucous'],\n 'verruga': ['gravure', 'verruga'],\n 'versable': ['beslaver', 'servable', 'versable'],\n 'versal': ['salver', 'serval', 'slaver', 'versal'],\n 'versant': ['servant', 'versant'],\n 'versate': ['evestar', 'versate'],\n 'versation': ['overstain', 'servation', 'versation'],\n 'verse': ['serve', 'sever', 'verse'],\n 'verser': ['revers', 'server', 'verser'],\n 'verset': ['revest', 'servet', 'sterve', 'verset', 'vester'],\n 'versicule': ['reclusive', 'versicule'],\n 'versine': ['inverse', 'versine'],\n 'versioner': ['reversion', 'versioner'],\n 'versionist': ['overinsist', 'versionist'],\n 'verso': ['servo', 'verso'],\n 'versta': ['starve', 'staver', 'strave', 'tavers', 'versta'],\n 'vertebrae': ['verberate', 'vertebrae'],\n 'vertebrocostal': ['costovertebral', 'vertebrocostal'],\n 'vertebrosacral': ['sacrovertebral', 'vertebrosacral'],\n 'vertebrosternal': ['sternovertebral', 'vertebrosternal'],\n 'vertiginate': ['integrative', 'vertiginate', 'vinaigrette'],\n 'vesicant': ['cistvaen', 'vesicant'],\n 'vesicoabdominal': ['abdominovesical', 'vesicoabdominal'],\n 'vesicocervical': ['cervicovesical', 'vesicocervical'],\n 'vesicointestinal': ['intestinovesical', 'vesicointestinal'],\n 'vesicorectal': ['rectovesical', 'vesicorectal'],\n 'vesicovaginal': ['vaginovesical', 'vesicovaginal'],\n 'vespa': ['spave', 'vespa'],\n 'vespertine': ['presentive', 'pretensive', 'vespertine'],\n 'vespine': ['pensive', 'vespine'],\n 'vesta': ['stave', 'vesta'],\n 'vestalia': ['salivate', 'vestalia'],\n 'vestee': ['steeve', 'vestee'],\n 'vester': ['revest', 'servet', 'sterve', 'verset', 'vester'],\n 'vestibula': ['sublative', 'vestibula'],\n 'veta': ['tave', 'veta'],\n 'vetanda': ['vedanta', 'vetanda'],\n 'veteran': ['nervate', 'veteran'],\n 'veto': ['veto', 'voet', 'vote'],\n 'vetoer': ['revote', 'vetoer'],\n 'via': ['iva', 'vai', 'via'],\n 'vial': ['vail', 'vali', 'vial', 'vila'],\n 'vialful': ['fluavil', 'fluvial', 'vialful'],\n 'viand': ['divan', 'viand'],\n 'viander': ['invader', 'ravined', 'viander'],\n 'viatic': ['avitic', 'viatic'],\n 'viatica': ['aviatic', 'viatica'],\n 'vibrate': ['vibrate', 'vrbaite'],\n 'vicar': ['vicar', 'vraic'],\n 'vice': ['cive', 'vice'],\n 'vicegeral': ['vicegeral', 'viceregal'],\n 'viceregal': ['vicegeral', 'viceregal'],\n 'victoriate': ['recitativo', 'victoriate'],\n 'victrola': ['victrola', 'vortical'],\n 'victualer': ['lucrative', 'revictual', 'victualer'],\n 'vidonia': ['ovidian', 'vidonia'],\n 'viduinae': ['induviae', 'viduinae'],\n 'viduine': ['univied', 'viduine'],\n 'vie': ['vei', 'vie'],\n 'vienna': ['avenin', 'vienna'],\n 'vier': ['rive', 'veri', 'vier', 'vire'],\n 'vierling': ['reviling', 'vierling'],\n 'view': ['view', 'wive'],\n 'viewer': ['review', 'viewer'],\n 'vigilante': ['genitival', 'vigilante'],\n 'vigor': ['vigor', 'virgo'],\n 'vila': ['vail', 'vali', 'vial', 'vila'],\n 'vile': ['evil', 'levi', 'live', 'veil', 'vile', 'vlei'],\n 'vilehearted': ['evilhearted', 'vilehearted'],\n 'vilely': ['evilly', 'lively', 'vilely'],\n 'vileness': ['evilness', 'liveness', 'veinless', 'vileness', 'vineless'],\n 'villadom': ['vallidom', 'villadom'],\n 'villeiness': ['liveliness', 'villeiness'],\n 'villous': ['ovillus', 'villous'],\n 'vimana': ['maniva', 'vimana'],\n 'vina': ['ivan', 'vain', 'vina'],\n 'vinaigrette': ['integrative', 'vertiginate', 'vinaigrette'],\n 'vinaigrous': ['vinaigrous', 'viraginous'],\n 'vinal': ['alvin', 'anvil', 'nival', 'vinal'],\n 'vinalia': ['lavinia', 'vinalia'],\n 'vinata': ['avanti', 'vinata'],\n 'vinculate': ['vinculate', 'vulcanite'],\n 'vine': ['vein', 'vine'],\n 'vinea': ['avine', 'naive', 'vinea'],\n 'vineal': ['alevin', 'alvine', 'valine', 'veinal', 'venial', 'vineal'],\n 'vineatic': ['antivice', 'inactive', 'vineatic'],\n 'vinegarist': ['gainstrive', 'vinegarist'],\n 'vineless': ['evilness', 'liveness', 'veinless', 'vileness', 'vineless'],\n 'vinelet': ['veinlet', 'vinelet'],\n 'viner': ['riven', 'viner'],\n 'vinewise': ['veinwise', 'vinewise'],\n 'vinosity': ['nivosity', 'vinosity'],\n 'vintener': ['inventer', 'reinvent', 'ventrine', 'vintener'],\n 'vintneress': ['inventress', 'vintneress'],\n 'viola': ['oliva', 'viola'],\n 'violability': ['obliviality', 'violability'],\n 'violaceous': ['olivaceous', 'violaceous'],\n 'violanin': ['livonian', 'violanin'],\n 'violational': ['avolitional', 'violational'],\n 'violer': ['oliver', 'violer', 'virole'],\n 'violescent': ['olivescent', 'violescent'],\n 'violet': ['olivet', 'violet'],\n 'violette': ['olivette', 'violette'],\n 'violine': ['olivine', 'violine'],\n 'vipera': ['pavier', 'vipera'],\n 'viperess': ['pressive', 'viperess'],\n 'viperian': ['viperian', 'viperina'],\n 'viperina': ['viperian', 'viperina'],\n 'viperous': ['pervious', 'previous', 'viperous'],\n 'viperously': ['perviously', 'previously', 'viperously'],\n 'viperousness': ['perviousness', 'previousness', 'viperousness'],\n 'vira': ['ravi', 'riva', 'vair', 'vari', 'vira'],\n 'viraginian': ['irvingiana', 'viraginian'],\n 'viraginous': ['vinaigrous', 'viraginous'],\n 'viral': ['rival', 'viral'],\n 'virales': ['revisal', 'virales'],\n 'vire': ['rive', 'veri', 'vier', 'vire'],\n 'virent': ['invert', 'virent'],\n 'virgate': ['virgate', 'vitrage'],\n 'virgin': ['irving', 'riving', 'virgin'],\n 'virginly': ['rivingly', 'virginly'],\n 'virgo': ['vigor', 'virgo'],\n 'virile': ['livier', 'virile'],\n 'virole': ['oliver', 'violer', 'virole'],\n 'virose': ['rivose', 'virose'],\n 'virtual': ['virtual', 'vitular'],\n 'virtuose': ['virtuose', 'vitreous'],\n 'virulence': ['cervuline', 'virulence'],\n 'visa': ['avis', 'siva', 'visa'],\n 'viscera': ['varices', 'viscera'],\n 'visceration': ['insectivora', 'visceration'],\n 'visceroparietal': ['parietovisceral', 'visceroparietal'],\n 'visceropleural': ['pleurovisceral', 'visceropleural'],\n 'viscometer': ['semivector', 'viscometer'],\n 'viscontal': ['viscontal', 'volcanist'],\n 'vishal': ['lavish', 'vishal'],\n 'visioner': ['revision', 'visioner'],\n 'visit': ['visit', 'vitis'],\n 'visitant': ['nativist', 'visitant'],\n 'visitee': ['evisite', 'visitee'],\n 'visiter': ['revisit', 'visiter'],\n 'visitor': ['ivorist', 'visitor'],\n 'vistal': ['vistal', 'vitals'],\n 'visto': ['ovist', 'visto'],\n 'vitals': ['vistal', 'vitals'],\n 'vitis': ['visit', 'vitis'],\n 'vitochemical': ['chemicovital', 'vitochemical'],\n 'vitrage': ['virgate', 'vitrage'],\n 'vitrail': ['trivial', 'vitrail'],\n 'vitrailist': ['trivialist', 'vitrailist'],\n 'vitrain': ['vitrain', 'vitrina'],\n 'vitrean': ['avertin', 'vitrean'],\n 'vitreous': ['virtuose', 'vitreous'],\n 'vitrina': ['vitrain', 'vitrina'],\n 'vitrine': ['inviter', 'vitrine'],\n 'vitrophyric': ['thyroprivic', 'vitrophyric'],\n 'vitular': ['virtual', 'vitular'],\n 'vituperate': ['reputative', 'vituperate'],\n 'vlei': ['evil', 'levi', 'live', 'veil', 'vile', 'vlei'],\n 'vocaller': ['overcall', 'vocaller'],\n 'vocate': ['avocet', 'octave', 'vocate'],\n 'voet': ['veto', 'voet', 'vote'],\n 'voeten': ['voeten', 'voteen'],\n 'vogue': ['vogue', 'vouge'],\n 'voided': ['devoid', 'voided'],\n 'voider': ['devoir', 'voider'],\n 'voidless': ['dissolve', 'voidless'],\n 'voile': ['olive', 'ovile', 'voile'],\n 'volable': ['lovable', 'volable'],\n 'volage': ['lovage', 'volage'],\n 'volar': ['valor', 'volar'],\n 'volata': ['tavola', 'volata'],\n 'volatic': ['volatic', 'voltaic'],\n 'volcae': ['alcove', 'coeval', 'volcae'],\n 'volcanist': ['viscontal', 'volcanist'],\n 'vole': ['levo', 'love', 'velo', 'vole'],\n 'volery': ['overly', 'volery'],\n 'volitate': ['volitate', 'voltaite'],\n 'volley': ['lovely', 'volley'],\n 'volscian': ['slavonic', 'volscian'],\n 'volta': ['volta', 'votal'],\n 'voltaic': ['volatic', 'voltaic'],\n 'voltaite': ['volitate', 'voltaite'],\n 'volucrine': ['involucre', 'volucrine'],\n 'volunteerism': ['multinervose', 'volunteerism'],\n 'vomer': ['mover', 'vomer'],\n 'vomiter': ['revomit', 'vomiter'],\n 'vonsenite': ['veinstone', 'vonsenite'],\n 'vortical': ['victrola', 'vortical'],\n 'votal': ['volta', 'votal'],\n 'votary': ['travoy', 'votary'],\n 'vote': ['veto', 'voet', 'vote'],\n 'voteen': ['voeten', 'voteen'],\n 'voter': ['overt', 'rovet', 'torve', 'trove', 'voter'],\n 'vouge': ['vogue', 'vouge'],\n 'vouli': ['uviol', 'vouli'],\n 'vowed': ['devow', 'vowed'],\n 'vowel': ['vowel', 'wolve'],\n 'vraic': ['vicar', 'vraic'],\n 'vrbaite': ['vibrate', 'vrbaite'],\n 'vulcanite': ['vinculate', 'vulcanite'],\n 'vulnerose': ['nervulose', 'unresolve', 'vulnerose'],\n 'vulpic': ['pulvic', 'vulpic'],\n 'vulpine': ['pluvine', 'vulpine'],\n 'wa': ['aw', 'wa'],\n 'waag': ['awag', 'waag'],\n 'waasi': ['isawa', 'waasi'],\n 'wab': ['baw', 'wab'],\n 'wabi': ['biwa', 'wabi'],\n 'wabster': ['bestraw', 'wabster'],\n 'wac': ['caw', 'wac'],\n 'wachna': ['chawan', 'chwana', 'wachna'],\n 'wack': ['cawk', 'wack'],\n 'wacker': ['awreck', 'wacker'],\n 'wacky': ['cawky', 'wacky'],\n 'wad': ['awd', 'daw', 'wad'],\n 'wadder': ['edward', 'wadder', 'warded'],\n 'waddler': ['dawdler', 'waddler'],\n 'waddling': ['dawdling', 'waddling'],\n 'waddlingly': ['dawdlingly', 'waddlingly'],\n 'waddy': ['dawdy', 'waddy'],\n 'wadna': ['adawn', 'wadna'],\n 'wadset': ['wadset', 'wasted'],\n 'wae': ['awe', 'wae', 'wea'],\n 'waeg': ['waeg', 'wage', 'wega'],\n 'waer': ['waer', 'ware', 'wear'],\n 'waesome': ['awesome', 'waesome'],\n 'wag': ['gaw', 'wag'],\n 'wage': ['waeg', 'wage', 'wega'],\n 'wagerer': ['rewager', 'wagerer'],\n 'wages': ['swage', 'wages'],\n 'waggel': ['waggel', 'waggle'],\n 'waggle': ['waggel', 'waggle'],\n 'wagnerite': ['wagnerite', 'winterage'],\n 'wagon': ['gowan', 'wagon', 'wonga'],\n 'wah': ['haw', 'hwa', 'wah', 'wha'],\n 'wahehe': ['heehaw', 'wahehe'],\n 'wail': ['wail', 'wali'],\n 'wailer': ['lawrie', 'wailer'],\n 'wain': ['awin', 'wain'],\n 'wainer': ['newari', 'wainer'],\n 'wairsh': ['rawish', 'wairsh', 'warish'],\n 'waist': ['swati', 'waist'],\n 'waister': ['swertia', 'waister'],\n 'waiterage': ['garewaite', 'waiterage'],\n 'waitress': ['starwise', 'waitress'],\n 'waiwai': ['iwaiwa', 'waiwai'],\n 'wake': ['wake', 'weak', 'weka'],\n 'wakener': ['rewaken', 'wakener'],\n 'waker': ['waker', 'wreak'],\n 'wakes': ['askew', 'wakes'],\n 'wale': ['wale', 'weal'],\n 'waled': ['dwale', 'waled', 'weald'],\n 'waler': ['lerwa', 'waler'],\n 'wali': ['wail', 'wali'],\n 'waling': ['lawing', 'waling'],\n 'walk': ['lawk', 'walk'],\n 'walkout': ['outwalk', 'walkout'],\n 'walkover': ['overwalk', 'walkover'],\n 'walkside': ['sidewalk', 'walkside'],\n 'waller': ['rewall', 'waller'],\n 'wallet': ['wallet', 'wellat'],\n 'wallhick': ['hickwall', 'wallhick'],\n 'walloper': ['preallow', 'walloper'],\n 'wallower': ['rewallow', 'wallower'],\n 'walsh': ['shawl', 'walsh'],\n 'walt': ['twal', 'walt'],\n 'walter': ['lawter', 'walter'],\n 'wame': ['wame', 'weam'],\n 'wamp': ['mawp', 'wamp'],\n 'wan': ['awn', 'naw', 'wan'],\n 'wand': ['dawn', 'wand'],\n 'wander': ['andrew', 'redawn', 'wander', 'warden'],\n 'wandle': ['delawn', 'lawned', 'wandle'],\n 'wandlike': ['dawnlike', 'wandlike'],\n 'wandy': ['dawny', 'wandy'],\n 'wane': ['anew', 'wane', 'wean'],\n 'waned': ['awned', 'dewan', 'waned'],\n 'wang': ['gawn', 'gnaw', 'wang'],\n 'wanghee': ['wanghee', 'whangee'],\n 'wangler': ['wangler', 'wrangle'],\n 'waning': ['awning', 'waning'],\n 'wankle': ['knawel', 'wankle'],\n 'wanly': ['lawny', 'wanly'],\n 'want': ['nawt', 'tawn', 'want'],\n 'wanty': ['tawny', 'wanty'],\n 'wany': ['awny', 'wany', 'yawn'],\n 'wap': ['paw', 'wap'],\n 'war': ['raw', 'war'],\n 'warble': ['bawler', 'brelaw', 'rebawl', 'warble'],\n 'warbler': ['brawler', 'warbler'],\n 'warbling': ['brawling', 'warbling'],\n 'warblingly': ['brawlingly', 'warblingly'],\n 'warbly': ['brawly', 'byrlaw', 'warbly'],\n 'ward': ['draw', 'ward'],\n 'wardable': ['drawable', 'wardable'],\n 'warded': ['edward', 'wadder', 'warded'],\n 'warden': ['andrew', 'redawn', 'wander', 'warden'],\n 'warder': ['drawer', 'redraw', 'reward', 'warder'],\n 'warderer': ['redrawer', 'rewarder', 'warderer'],\n 'warding': ['drawing', 'ginward', 'warding'],\n 'wardman': ['manward', 'wardman'],\n 'wardmote': ['damewort', 'wardmote'],\n 'wardrobe': ['drawbore', 'wardrobe'],\n 'wardroom': ['roomward', 'wardroom'],\n 'wardship': ['shipward', 'wardship'],\n 'wardsman': ['manwards', 'wardsman'],\n 'ware': ['waer', 'ware', 'wear'],\n 'warehouse': ['housewear', 'warehouse'],\n 'warf': ['warf', 'wraf'],\n 'warish': ['rawish', 'wairsh', 'warish'],\n 'warlock': ['lacwork', 'warlock'],\n 'warmed': ['meward', 'warmed'],\n 'warmer': ['rewarm', 'warmer'],\n 'warmhouse': ['housewarm', 'warmhouse'],\n 'warmish': ['warmish', 'wishram'],\n 'warn': ['warn', 'wran'],\n 'warnel': ['lawner', 'warnel'],\n 'warner': ['rewarn', 'warner', 'warren'],\n 'warp': ['warp', 'wrap'],\n 'warper': ['prewar', 'rewrap', 'warper'],\n 'warree': ['rewear', 'warree', 'wearer'],\n 'warren': ['rewarn', 'warner', 'warren'],\n 'warri': ['warri', 'wirra'],\n 'warse': ['resaw', 'sawer', 'seraw', 'sware', 'swear', 'warse'],\n 'warsel': ['swaler', 'warsel', 'warsle'],\n 'warsle': ['swaler', 'warsel', 'warsle'],\n 'warst': ['straw', 'swart', 'warst'],\n 'warth': ['thraw', 'warth', 'whart', 'wrath'],\n 'warua': ['warua', 'waura'],\n 'warve': ['warve', 'waver'],\n 'wary': ['awry', 'wary'],\n 'was': ['saw', 'swa', 'was'],\n 'wasel': ['swale', 'sweal', 'wasel'],\n 'wash': ['shaw', 'wash'],\n 'washen': ['washen', 'whenas'],\n 'washer': ['hawser', 'rewash', 'washer'],\n 'washington': ['nowanights', 'washington'],\n 'washland': ['landwash', 'washland'],\n 'washoan': ['shawano', 'washoan'],\n 'washout': ['outwash', 'washout'],\n 'washy': ['shawy', 'washy'],\n 'wasnt': ['stawn', 'wasnt'],\n 'wasp': ['swap', 'wasp'],\n 'waspily': ['slipway', 'waspily'],\n 'wast': ['sawt', 'staw', 'swat', 'taws', 'twas', 'wast'],\n 'waste': ['awest', 'sweat', 'tawse', 'waste'],\n 'wasted': ['wadset', 'wasted'],\n 'wasteful': ['sweatful', 'wasteful'],\n 'wasteless': ['sweatless', 'wasteless'],\n 'wasteproof': ['sweatproof', 'wasteproof'],\n 'wastrel': ['wastrel', 'wrastle'],\n 'wat': ['taw', 'twa', 'wat'],\n 'watchdog': ['dogwatch', 'watchdog'],\n 'watchout': ['outwatch', 'watchout'],\n 'water': ['tawer', 'water', 'wreat'],\n 'waterbrain': ['brainwater', 'waterbrain'],\n 'watered': ['dewater', 'tarweed', 'watered'],\n 'waterer': ['rewater', 'waterer'],\n 'waterflood': ['floodwater', 'toadflower', 'waterflood'],\n 'waterhead': ['headwater', 'waterhead'],\n 'wateriness': ['earwitness', 'wateriness'],\n 'waterlog': ['galewort', 'waterlog'],\n 'watershed': ['drawsheet', 'watershed'],\n 'watery': ['tawery', 'watery'],\n 'wath': ['thaw', 'wath', 'what'],\n 'watt': ['twat', 'watt'],\n 'wauf': ['awfu', 'wauf'],\n 'wauner': ['unware', 'wauner'],\n 'waura': ['warua', 'waura'],\n 'waver': ['warve', 'waver'],\n 'waxer': ['rewax', 'waxer'],\n 'way': ['way', 'yaw'],\n 'wayback': ['backway', 'wayback'],\n 'waygang': ['gangway', 'waygang'],\n 'waygate': ['gateway', 'getaway', 'waygate'],\n 'wayman': ['manway', 'wayman'],\n 'ways': ['sway', 'ways', 'yaws'],\n 'wayside': ['sideway', 'wayside'],\n 'wea': ['awe', 'wae', 'wea'],\n 'weak': ['wake', 'weak', 'weka'],\n 'weakener': ['reweaken', 'weakener'],\n 'weakliness': ['weakliness', 'weaselskin'],\n 'weal': ['wale', 'weal'],\n 'weald': ['dwale', 'waled', 'weald'],\n 'weam': ['wame', 'weam'],\n 'wean': ['anew', 'wane', 'wean'],\n 'weanel': ['leewan', 'weanel'],\n 'wear': ['waer', 'ware', 'wear'],\n 'wearer': ['rewear', 'warree', 'wearer'],\n 'weasand': ['sandawe', 'weasand'],\n 'weaselskin': ['weakliness', 'weaselskin'],\n 'weather': ['weather', 'whereat', 'wreathe'],\n 'weathered': ['heartweed', 'weathered'],\n 'weaver': ['rewave', 'weaver'],\n 'webster': ['bestrew', 'webster'],\n 'wed': ['dew', 'wed'],\n 'wede': ['wede', 'weed'],\n 'wedge': ['gweed', 'wedge'],\n 'wedger': ['edgrew', 'wedger'],\n 'wedset': ['stewed', 'wedset'],\n 'wee': ['ewe', 'wee'],\n 'weed': ['wede', 'weed'],\n 'weedhook': ['hookweed', 'weedhook'],\n 'weedy': ['dewey', 'weedy'],\n 'ween': ['ween', 'wene'],\n 'weeps': ['sweep', 'weeps'],\n 'weet': ['twee', 'weet'],\n 'wega': ['waeg', 'wage', 'wega'],\n 'wegotism': ['twigsome', 'wegotism'],\n 'weigher': ['reweigh', 'weigher'],\n 'weir': ['weir', 'weri', 'wire'],\n 'weirangle': ['weirangle', 'wierangle'],\n 'weird': ['weird', 'wired', 'wride', 'wried'],\n 'weka': ['wake', 'weak', 'weka'],\n 'weld': ['lewd', 'weld'],\n 'weldable': ['ballweed', 'weldable'],\n 'welder': ['reweld', 'welder'],\n 'weldor': ['lowder', 'weldor', 'wordle'],\n 'welf': ['flew', 'welf'],\n 'welkin': ['welkin', 'winkel', 'winkle'],\n 'well': ['llew', 'well'],\n 'wellat': ['wallet', 'wellat'],\n 'wels': ['slew', 'wels'],\n 'welshry': ['shrewly', 'welshry'],\n 'welting': ['twingle', 'welting', 'winglet'],\n 'wem': ['mew', 'wem'],\n 'wen': ['new', 'wen'],\n 'wende': ['endew', 'wende'],\n 'wendi': ['dwine', 'edwin', 'wendi', 'widen', 'wined'],\n 'wene': ['ween', 'wene'],\n 'went': ['newt', 'went'],\n 'were': ['ewer', 'were'],\n 'weri': ['weir', 'weri', 'wire'],\n 'werther': ['werther', 'wherret'],\n 'wes': ['sew', 'wes'],\n 'weskit': ['weskit', 'wisket'],\n 'west': ['stew', 'west'],\n 'weste': ['sweet', 'weste'],\n 'westering': ['swingtree', 'westering'],\n 'westy': ['stewy', 'westy'],\n 'wet': ['tew', 'wet'],\n 'weta': ['tewa', 'twae', 'weta'],\n 'wetly': ['tewly', 'wetly'],\n 'wey': ['wey', 'wye', 'yew'],\n 'wha': ['haw', 'hwa', 'wah', 'wha'],\n 'whack': ['chawk', 'whack'],\n 'whale': ['whale', 'wheal'],\n 'wham': ['hawm', 'wham'],\n 'whame': ['whame', 'wheam'],\n 'whangee': ['wanghee', 'whangee'],\n 'whare': ['hawer', 'whare'],\n 'whart': ['thraw', 'warth', 'whart', 'wrath'],\n 'whase': ['hawse', 'shewa', 'whase'],\n 'what': ['thaw', 'wath', 'what'],\n 'whatreck': ['thwacker', 'whatreck'],\n 'whats': ['swath', 'whats'],\n 'wheal': ['whale', 'wheal'],\n 'wheam': ['whame', 'wheam'],\n 'wheat': ['awhet', 'wheat'],\n 'wheatear': ['aweather', 'wheatear'],\n 'wheedle': ['wheedle', 'wheeled'],\n 'wheel': ['hewel', 'wheel'],\n 'wheeled': ['wheedle', 'wheeled'],\n 'wheelroad': ['rowelhead', 'wheelroad'],\n 'wheer': ['hewer', 'wheer', 'where'],\n 'whein': ['whein', 'whine'],\n 'when': ['hewn', 'when'],\n 'whenas': ['washen', 'whenas'],\n 'whenso': ['whenso', 'whosen'],\n 'where': ['hewer', 'wheer', 'where'],\n 'whereat': ['weather', 'whereat', 'wreathe'],\n 'whereon': ['nowhere', 'whereon'],\n 'wherret': ['werther', 'wherret'],\n 'wherrit': ['wherrit', 'whirret', 'writher'],\n 'whet': ['hewt', 'thew', 'whet'],\n 'whichever': ['everwhich', 'whichever'],\n 'whicken': ['chewink', 'whicken'],\n 'whilter': ['whilter', 'whirtle'],\n 'whine': ['whein', 'whine'],\n 'whipper': ['prewhip', 'whipper'],\n 'whirler': ['rewhirl', 'whirler'],\n 'whirret': ['wherrit', 'whirret', 'writher'],\n 'whirtle': ['whilter', 'whirtle'],\n 'whisperer': ['rewhisper', 'whisperer'],\n 'whisson': ['snowish', 'whisson'],\n 'whist': ['swith', 'whist', 'whits', 'wisht'],\n 'whister': ['swither', 'whister', 'withers'],\n 'whit': ['whit', 'with'],\n 'white': ['white', 'withe'],\n 'whiten': ['whiten', 'withen'],\n 'whitener': ['rewhiten', 'whitener'],\n 'whitepot': ['whitepot', 'whitetop'],\n 'whites': ['swithe', 'whites'],\n 'whitetop': ['whitepot', 'whitetop'],\n 'whitewood': ['whitewood', 'withewood'],\n 'whitleather': ['therewithal', 'whitleather'],\n 'whitmanese': ['anthemwise', 'whitmanese'],\n 'whits': ['swith', 'whist', 'whits', 'wisht'],\n 'whity': ['whity', 'withy'],\n 'who': ['how', 'who'],\n 'whoever': ['everwho', 'however', 'whoever'],\n 'whole': ['howel', 'whole'],\n 'whomsoever': ['howsomever', 'whomsoever', 'whosomever'],\n 'whoreship': ['horsewhip', 'whoreship'],\n 'whort': ['throw', 'whort', 'worth', 'wroth'],\n 'whosen': ['whenso', 'whosen'],\n 'whosomever': ['howsomever', 'whomsoever', 'whosomever'],\n 'wicht': ['tchwi', 'wicht', 'witch'],\n 'widdle': ['widdle', 'wilded'],\n 'widely': ['dewily', 'widely', 'wieldy'],\n 'widen': ['dwine', 'edwin', 'wendi', 'widen', 'wined'],\n 'widener': ['rewiden', 'widener'],\n 'wideness': ['dewiness', 'wideness'],\n 'widgeon': ['gowdnie', 'widgeon'],\n 'wieldy': ['dewily', 'widely', 'wieldy'],\n 'wierangle': ['weirangle', 'wierangle'],\n 'wigan': ['awing', 'wigan'],\n 'wiggler': ['wiggler', 'wriggle'],\n 'wilded': ['widdle', 'wilded'],\n 'wildness': ['wildness', 'windless'],\n 'winchester': ['trenchwise', 'winchester'],\n 'windbreak': ['breakwind', 'windbreak'],\n 'winder': ['rewind', 'winder'],\n 'windgall': ['dingwall', 'windgall'],\n 'windles': ['swindle', 'windles'],\n 'windless': ['wildness', 'windless'],\n 'windstorm': ['stormwind', 'windstorm'],\n 'windup': ['upwind', 'windup'],\n 'wined': ['dwine', 'edwin', 'wendi', 'widen', 'wined'],\n 'winer': ['erwin', 'rewin', 'winer'],\n 'winglet': ['twingle', 'welting', 'winglet'],\n 'winkel': ['welkin', 'winkel', 'winkle'],\n 'winkle': ['welkin', 'winkel', 'winkle'],\n 'winklet': ['twinkle', 'winklet'],\n 'winnard': ['indrawn', 'winnard'],\n 'winnel': ['winnel', 'winnle'],\n 'winnle': ['winnel', 'winnle'],\n 'winsome': ['owenism', 'winsome'],\n 'wint': ['twin', 'wint'],\n 'winter': ['twiner', 'winter'],\n 'winterage': ['wagnerite', 'winterage'],\n 'wintered': ['interwed', 'wintered'],\n 'winterish': ['interwish', 'winterish'],\n 'winze': ['winze', 'wizen'],\n 'wips': ['wips', 'wisp'],\n 'wire': ['weir', 'weri', 'wire'],\n 'wired': ['weird', 'wired', 'wride', 'wried'],\n 'wirer': ['wirer', 'wrier'],\n 'wirra': ['warri', 'wirra'],\n 'wiselike': ['likewise', 'wiselike'],\n 'wiseman': ['manwise', 'wiseman'],\n 'wisen': ['sinew', 'swine', 'wisen'],\n 'wiser': ['swire', 'wiser'],\n 'wisewoman': ['wisewoman', 'womanwise'],\n 'wisher': ['rewish', 'wisher'],\n 'wishmay': ['wishmay', 'yahwism'],\n 'wishram': ['warmish', 'wishram'],\n 'wisht': ['swith', 'whist', 'whits', 'wisht'],\n 'wisket': ['weskit', 'wisket'],\n 'wisp': ['wips', 'wisp'],\n 'wispy': ['swipy', 'wispy'],\n 'wit': ['twi', 'wit'],\n 'witan': ['atwin', 'twain', 'witan'],\n 'witch': ['tchwi', 'wicht', 'witch'],\n 'witchetty': ['twitchety', 'witchetty'],\n 'with': ['whit', 'with'],\n 'withdrawer': ['rewithdraw', 'withdrawer'],\n 'withe': ['white', 'withe'],\n 'withen': ['whiten', 'withen'],\n 'wither': ['wither', 'writhe'],\n 'withered': ['redwithe', 'withered'],\n 'withering': ['withering', 'wrightine'],\n 'withers': ['swither', 'whister', 'withers'],\n 'withewood': ['whitewood', 'withewood'],\n 'within': ['inwith', 'within'],\n 'without': ['outwith', 'without'],\n 'withy': ['whity', 'withy'],\n 'wive': ['view', 'wive'],\n 'wiver': ['wiver', 'wrive'],\n 'wizen': ['winze', 'wizen'],\n 'wo': ['ow', 'wo'],\n 'woader': ['redowa', 'woader'],\n 'wob': ['bow', 'wob'],\n 'wod': ['dow', 'owd', 'wod'],\n 'woe': ['owe', 'woe'],\n 'woibe': ['bowie', 'woibe'],\n 'wold': ['dowl', 'wold'],\n 'wolf': ['flow', 'fowl', 'wolf'],\n 'wolfer': ['flower', 'fowler', 'reflow', 'wolfer'],\n 'wolter': ['rowlet', 'trowel', 'wolter'],\n 'wolve': ['vowel', 'wolve'],\n 'womanpost': ['postwoman', 'womanpost'],\n 'womanwise': ['wisewoman', 'womanwise'],\n 'won': ['now', 'own', 'won'],\n 'wonder': ['downer', 'wonder', 'worden'],\n 'wonderful': ['underflow', 'wonderful'],\n 'wone': ['enow', 'owen', 'wone'],\n 'wong': ['gown', 'wong'],\n 'wonga': ['gowan', 'wagon', 'wonga'],\n 'wonner': ['renown', 'wonner'],\n 'wont': ['nowt', 'town', 'wont'],\n 'wonted': ['towned', 'wonted'],\n 'woodbark': ['bookward', 'woodbark'],\n 'woodbind': ['bindwood', 'woodbind'],\n 'woodbush': ['bushwood', 'woodbush'],\n 'woodchat': ['chatwood', 'woodchat'],\n 'wooden': ['enwood', 'wooden'],\n 'woodfish': ['fishwood', 'woodfish'],\n 'woodhack': ['hackwood', 'woodhack'],\n 'woodhorse': ['horsewood', 'woodhorse'],\n 'woodness': ['sowdones', 'woodness'],\n 'woodpecker': ['peckerwood', 'woodpecker'],\n 'woodrock': ['corkwood', 'rockwood', 'woodrock'],\n 'woodsilver': ['silverwood', 'woodsilver'],\n 'woodstone': ['stonewood', 'woodstone'],\n 'woodworm': ['woodworm', 'wormwood'],\n 'wooled': ['dewool', 'elwood', 'wooled'],\n 'woons': ['swoon', 'woons'],\n 'woosh': ['howso', 'woosh'],\n 'wop': ['pow', 'wop'],\n 'worble': ['blower', 'bowler', 'reblow', 'worble'],\n 'word': ['drow', 'word'],\n 'wordage': ['dowager', 'wordage'],\n 'worden': ['downer', 'wonder', 'worden'],\n 'worder': ['reword', 'worder'],\n 'wordily': ['rowdily', 'wordily'],\n 'wordiness': ['rowdiness', 'wordiness'],\n 'wordle': ['lowder', 'weldor', 'wordle'],\n 'wordsman': ['sandworm', 'swordman', 'wordsman'],\n 'wordsmanship': ['swordmanship', 'wordsmanship'],\n 'wordy': ['dowry', 'rowdy', 'wordy'],\n 'wore': ['ower', 'wore'],\n 'workbasket': ['basketwork', 'workbasket'],\n 'workbench': ['benchwork', 'workbench'],\n 'workbook': ['bookwork', 'workbook'],\n 'workbox': ['boxwork', 'workbox'],\n 'workday': ['daywork', 'workday'],\n 'worker': ['rework', 'worker'],\n 'workhand': ['handwork', 'workhand'],\n 'workhouse': ['housework', 'workhouse'],\n 'working': ['kingrow', 'working'],\n 'workmaster': ['masterwork', 'workmaster'],\n 'workout': ['outwork', 'workout'],\n 'workpiece': ['piecework', 'workpiece'],\n 'workship': ['shipwork', 'workship'],\n 'workshop': ['shopwork', 'workshop'],\n 'worktime': ['timework', 'worktime'],\n 'wormed': ['deworm', 'wormed'],\n 'wormer': ['merrow', 'wormer'],\n 'wormroot': ['moorwort', 'rootworm', 'tomorrow', 'wormroot'],\n 'wormship': ['shipworm', 'wormship'],\n 'wormwood': ['woodworm', 'wormwood'],\n 'worse': ['owser', 'resow', 'serow', 'sower', 'swore', 'worse'],\n 'worset': ['restow', 'stower', 'towser', 'worset'],\n 'worst': ['strow', 'worst'],\n 'wort': ['trow', 'wort'],\n 'worth': ['throw', 'whort', 'worth', 'wroth'],\n 'worthful': ['worthful', 'wrothful'],\n 'worthily': ['worthily', 'wrothily'],\n 'worthiness': ['worthiness', 'wrothiness'],\n 'worthy': ['worthy', 'wrothy'],\n 'wot': ['tow', 'two', 'wot'],\n 'wots': ['sowt', 'stow', 'swot', 'wots'],\n 'wounder': ['rewound', 'unrowed', 'wounder'],\n 'woy': ['woy', 'yow'],\n 'wraf': ['warf', 'wraf'],\n 'wrainbolt': ['browntail', 'wrainbolt'],\n 'wraitly': ['wraitly', 'wrytail'],\n 'wran': ['warn', 'wran'],\n 'wrangle': ['wangler', 'wrangle'],\n 'wrap': ['warp', 'wrap'],\n 'wrapper': ['prewrap', 'wrapper'],\n 'wrastle': ['wastrel', 'wrastle'],\n 'wrath': ['thraw', 'warth', 'whart', 'wrath'],\n 'wreak': ['waker', 'wreak'],\n 'wreat': ['tawer', 'water', 'wreat'],\n 'wreath': ['rethaw', 'thawer', 'wreath'],\n 'wreathe': ['weather', 'whereat', 'wreathe'],\n 'wrest': ['strew', 'trews', 'wrest'],\n 'wrester': ['strewer', 'wrester'],\n 'wrestle': ['swelter', 'wrestle'],\n 'wride': ['weird', 'wired', 'wride', 'wried'],\n 'wried': ['weird', 'wired', 'wride', 'wried'],\n 'wrier': ['wirer', 'wrier'],\n 'wriggle': ['wiggler', 'wriggle'],\n 'wrightine': ['withering', 'wrightine'],\n 'wrinklet': ['twinkler', 'wrinklet'],\n 'write': ['twire', 'write'],\n 'writhe': ['wither', 'writhe'],\n 'writher': ['wherrit', 'whirret', 'writher'],\n 'written': ['twinter', 'written'],\n 'wrive': ['wiver', 'wrive'],\n 'wro': ['row', 'wro'],\n 'wroken': ['knower', 'reknow', 'wroken'],\n 'wrong': ['grown', 'wrong'],\n 'wrote': ['rowet', 'tower', 'wrote'],\n 'wroth': ['throw', 'whort', 'worth', 'wroth'],\n 'wrothful': ['worthful', 'wrothful'],\n 'wrothily': ['worthily', 'wrothily'],\n 'wrothiness': ['worthiness', 'wrothiness'],\n 'wrothy': ['worthy', 'wrothy'],\n 'wrytail': ['wraitly', 'wrytail'],\n 'wunna': ['unwan', 'wunna'],\n 'wyde': ['dewy', 'wyde'],\n 'wye': ['wey', 'wye', 'yew'],\n 'wype': ['pewy', 'wype'],\n 'wyson': ['snowy', 'wyson'],\n 'xanthein': ['xanthein', 'xanthine'],\n 'xanthine': ['xanthein', 'xanthine'],\n 'xanthopurpurin': ['purpuroxanthin', 'xanthopurpurin'],\n 'xema': ['amex', 'exam', 'xema'],\n 'xenia': ['axine', 'xenia'],\n 'xenial': ['alexin', 'xenial'],\n 'xenoparasite': ['exasperation', 'xenoparasite'],\n 'xeres': ['resex', 'xeres'],\n 'xerophytic': ['hypertoxic', 'xerophytic'],\n 'xerotic': ['excitor', 'xerotic'],\n 'xylic': ['cylix', 'xylic'],\n 'xylitone': ['xylitone', 'xylonite'],\n 'xylonite': ['xylitone', 'xylonite'],\n 'xylophone': ['oxyphenol', 'xylophone'],\n 'xylose': ['lyxose', 'xylose'],\n 'xyst': ['styx', 'xyst'],\n 'xyster': ['sextry', 'xyster'],\n 'xysti': ['sixty', 'xysti'],\n 'ya': ['ay', 'ya'],\n 'yaba': ['baya', 'yaba'],\n 'yabber': ['babery', 'yabber'],\n 'yacht': ['cathy', 'cyath', 'yacht'],\n 'yachtist': ['chastity', 'yachtist'],\n 'yad': ['ady', 'day', 'yad'],\n 'yaff': ['affy', 'yaff'],\n 'yagnob': ['boyang', 'yagnob'],\n 'yah': ['hay', 'yah'],\n 'yahwism': ['wishmay', 'yahwism'],\n 'yair': ['airy', 'yair'],\n 'yaird': ['dairy', 'diary', 'yaird'],\n 'yak': ['kay', 'yak'],\n 'yakan': ['kayan', 'yakan'],\n 'yakima': ['kamiya', 'yakima'],\n 'yakka': ['kayak', 'yakka'],\n 'yalb': ['ably', 'blay', 'yalb'],\n 'yali': ['ilya', 'yali'],\n 'yalla': ['allay', 'yalla'],\n 'yallaer': ['allayer', 'yallaer'],\n 'yam': ['amy', 'may', 'mya', 'yam'],\n 'yamel': ['mealy', 'yamel'],\n 'yamen': ['maney', 'yamen'],\n 'yamilke': ['maylike', 'yamilke'],\n 'yamph': ['phyma', 'yamph'],\n 'yan': ['any', 'nay', 'yan'],\n 'yana': ['anay', 'yana'],\n 'yander': ['denary', 'yander'],\n 'yap': ['pay', 'pya', 'yap'],\n 'yapness': ['synapse', 'yapness'],\n 'yapper': ['papery', 'prepay', 'yapper'],\n 'yapster': ['atrepsy', 'yapster'],\n 'yar': ['ary', 'ray', 'yar'],\n 'yarb': ['bray', 'yarb'],\n 'yard': ['adry', 'dray', 'yard'],\n 'yardage': ['drayage', 'yardage'],\n 'yarder': ['dreary', 'yarder'],\n 'yardman': ['drayman', 'yardman'],\n 'yare': ['aery', 'eyra', 'yare', 'year'],\n 'yark': ['kyar', 'yark'],\n 'yarl': ['aryl', 'lyra', 'ryal', 'yarl'],\n 'yarm': ['army', 'mary', 'myra', 'yarm'],\n 'yarn': ['nary', 'yarn'],\n 'yarr': ['arry', 'yarr'],\n 'yarrow': ['arrowy', 'yarrow'],\n 'yaruran': ['unarray', 'yaruran'],\n 'yas': ['say', 'yas'],\n 'yasht': ['hasty', 'yasht'],\n 'yat': ['tay', 'yat'],\n 'yate': ['yate', 'yeat', 'yeta'],\n 'yatter': ['attery', 'treaty', 'yatter'],\n 'yaw': ['way', 'yaw'],\n 'yawler': ['lawyer', 'yawler'],\n 'yawn': ['awny', 'wany', 'yawn'],\n 'yaws': ['sway', 'ways', 'yaws'],\n 'ye': ['ey', 'ye'],\n 'yea': ['aye', 'yea'],\n 'yeah': ['ahey', 'eyah', 'yeah'],\n 'year': ['aery', 'eyra', 'yare', 'year'],\n 'yeard': ['deary', 'deray', 'rayed', 'ready', 'yeard'],\n 'yearly': ['layery', 'yearly'],\n 'yearn': ['enray', 'yearn'],\n 'yearth': ['earthy', 'hearty', 'yearth'],\n 'yeast': ['teasy', 'yeast'],\n 'yeat': ['yate', 'yeat', 'yeta'],\n 'yeather': ['erythea', 'hetaery', 'yeather'],\n 'yed': ['dey', 'dye', 'yed'],\n 'yede': ['eyed', 'yede'],\n 'yee': ['eye', 'yee'],\n 'yeel': ['eely', 'yeel'],\n 'yees': ['yees', 'yese'],\n 'yegg': ['eggy', 'yegg'],\n 'yelk': ['kyle', 'yelk'],\n 'yelm': ['elmy', 'yelm'],\n 'yelmer': ['merely', 'yelmer'],\n 'yelper': ['peerly', 'yelper'],\n 'yemen': ['enemy', 'yemen'],\n 'yemeni': ['menyie', 'yemeni'],\n 'yen': ['eyn', 'nye', 'yen'],\n 'yender': ['redeny', 'yender'],\n 'yeo': ['yeo', 'yoe'],\n 'yeorling': ['legionry', 'yeorling'],\n 'yer': ['rye', 'yer'],\n 'yerb': ['brey', 'byre', 'yerb'],\n 'yerba': ['barye', 'beray', 'yerba'],\n 'yerd': ['dyer', 'yerd'],\n 'yere': ['eyer', 'eyre', 'yere'],\n 'yern': ['ryen', 'yern'],\n 'yes': ['sey', 'sye', 'yes'],\n 'yese': ['yees', 'yese'],\n 'yest': ['stey', 'yest'],\n 'yester': ['reesty', 'yester'],\n 'yestern': ['streyne', 'styrene', 'yestern'],\n 'yet': ['tye', 'yet'],\n 'yeta': ['yate', 'yeat', 'yeta'],\n 'yeth': ['they', 'yeth'],\n 'yether': ['theyre', 'yether'],\n 'yetlin': ['lenity', 'yetlin'],\n 'yew': ['wey', 'wye', 'yew'],\n 'yielden': ['needily', 'yielden'],\n 'yielder': ['reedily', 'reyield', 'yielder'],\n 'yildun': ['unidly', 'yildun'],\n 'yill': ['illy', 'lily', 'yill'],\n 'yirm': ['miry', 'rimy', 'yirm'],\n 'ym': ['my', 'ym'],\n 'yock': ['coky', 'yock'],\n 'yodel': ['doyle', 'yodel'],\n 'yoe': ['yeo', 'yoe'],\n 'yoghurt': ['troughy', 'yoghurt'],\n 'yogin': ['goyin', 'yogin'],\n 'yoi': ['iyo', 'yoi'],\n 'yoker': ['rokey', 'yoker'],\n 'yolk': ['kylo', 'yolk'],\n 'yom': ['moy', 'yom'],\n 'yomud': ['moudy', 'yomud'],\n 'yon': ['noy', 'yon'],\n 'yond': ['ondy', 'yond'],\n 'yonder': ['rodney', 'yonder'],\n 'yont': ['tony', 'yont'],\n 'yor': ['ory', 'roy', 'yor'],\n 'yore': ['oyer', 'roey', 'yore'],\n 'york': ['kory', 'roky', 'york'],\n 'yot': ['toy', 'yot'],\n 'yote': ['eyot', 'yote'],\n 'youngun': ['unyoung', 'youngun'],\n 'yours': ['soury', 'yours'],\n 'yoursel': ['elusory', 'yoursel'],\n 'yoven': ['envoy', 'nevoy', 'yoven'],\n 'yow': ['woy', 'yow'],\n 'yowl': ['lowy', 'owly', 'yowl'],\n 'yowler': ['lowery', 'owlery', 'rowley', 'yowler'],\n 'yowt': ['towy', 'yowt'],\n 'yox': ['oxy', 'yox'],\n 'yttrious': ['touristy', 'yttrious'],\n 'yuca': ['cuya', 'yuca'],\n 'yuckel': ['yuckel', 'yuckle'],\n 'yuckle': ['yuckel', 'yuckle'],\n 'yulan': ['unlay', 'yulan'],\n 'yurok': ['rouky', 'yurok'],\n 'zabian': ['banzai', 'zabian'],\n 'zabra': ['braza', 'zabra'],\n 'zacate': ['azteca', 'zacate'],\n 'zad': ['adz', 'zad'],\n 'zag': ['gaz', 'zag'],\n 'zain': ['nazi', 'zain'],\n 'zaman': ['namaz', 'zaman'],\n 'zamenis': ['sizeman', 'zamenis'],\n 'zaparoan': ['parazoan', 'zaparoan'],\n 'zaratite': ['tatarize', 'zaratite'],\n 'zati': ['itza', 'tiza', 'zati'],\n 'zeal': ['laze', 'zeal'],\n 'zealotism': ['solmizate', 'zealotism'],\n 'zebra': ['braze', 'zebra'],\n 'zein': ['inez', 'zein'],\n 'zelanian': ['annalize', 'zelanian'],\n 'zelatrice': ['cartelize', 'zelatrice'],\n 'zemmi': ['zemmi', 'zimme'],\n 'zendic': ['dezinc', 'zendic'],\n 'zenick': ['zenick', 'zincke'],\n 'zenu': ['unze', 'zenu'],\n 'zequin': ['quinze', 'zequin'],\n 'zerda': ['adzer', 'zerda'],\n 'zerma': ['mazer', 'zerma'],\n 'ziarat': ['atazir', 'ziarat'],\n 'zibet': ['bizet', 'zibet'],\n 'ziega': ['gaize', 'ziega'],\n 'zimme': ['zemmi', 'zimme'],\n 'zincite': ['citizen', 'zincite'],\n 'zincke': ['zenick', 'zincke'],\n 'zinco': ['zinco', 'zonic'],\n 'zion': ['nozi', 'zion'],\n 'zira': ['izar', 'zira'],\n 'zirconate': ['narcotize', 'zirconate'],\n 'zoa': ['azo', 'zoa'],\n 'zoanthidae': ['zoanthidae', 'zoanthidea'],\n 'zoanthidea': ['zoanthidae', 'zoanthidea'],\n 'zoarite': ['azorite', 'zoarite'],\n 'zobo': ['bozo', 'zobo'],\n 'zoeal': ['azole', 'zoeal'],\n 'zogan': ['gazon', 'zogan'],\n 'zolotink': ['zolotink', 'zolotnik'],\n 'zolotnik': ['zolotink', 'zolotnik'],\n 'zonaria': ['arizona', 'azorian', 'zonaria'],\n 'zoned': ['dozen', 'zoned'],\n 'zonic': ['zinco', 'zonic'],\n 'zonotrichia': ['chorization', 'rhizoctonia', 'zonotrichia'],\n 'zoonal': ['alonzo', 'zoonal'],\n 'zoonic': ['ozonic', 'zoonic'],\n 'zoonomic': ['monozoic', 'zoonomic'],\n 'zoopathy': ['phytozoa', 'zoopathy', 'zoophyta'],\n 'zoophilic': ['philozoic', 'zoophilic'],\n 'zoophilist': ['philozoist', 'zoophilist'],\n 'zoophyta': ['phytozoa', 'zoopathy', 'zoophyta'],\n 'zoospermatic': ['spermatozoic', 'zoospermatic'],\n 'zoosporic': ['sporozoic', 'zoosporic'],\n 'zootype': ['ozotype', 'zootype'],\n 'zyga': ['gazy', 'zyga'],\n 'zygal': ['glazy', 'zygal']}"
  },
  {
    "path": "strings/autocomplete_using_trie.py",
    "content": "from __future__ import annotations\n\nEND = \"#\"\n\n\nclass Trie:\n    def __init__(self) -> None:\n        self._trie: dict = {}\n\n    def insert_word(self, text: str) -> None:\n        trie = self._trie\n        for char in text:\n            if char not in trie:\n                trie[char] = {}\n            trie = trie[char]\n        trie[END] = True\n\n    def find_word(self, prefix: str) -> tuple | list:\n        trie = self._trie\n        for char in prefix:\n            if char in trie:\n                trie = trie[char]\n            else:\n                return []\n        return self._elements(trie)\n\n    def _elements(self, d: dict) -> tuple:\n        result = []\n        for c, v in d.items():\n            sub_result = [\" \"] if c == END else [(c + s) for s in self._elements(v)]\n            result.extend(sub_result)\n        return tuple(result)\n\n\ntrie = Trie()\nwords = (\"depart\", \"detergent\", \"daring\", \"dog\", \"deer\", \"deal\")\nfor word in words:\n    trie.insert_word(word)\n\n\ndef autocomplete_using_trie(string: str) -> tuple:\n    \"\"\"\n    >>> trie = Trie()\n    >>> for word in words:\n    ...     trie.insert_word(word)\n    ...\n    >>> matches = autocomplete_using_trie(\"de\")\n    >>> \"detergent \" in matches\n    True\n    >>> \"dog \" in matches\n    False\n    \"\"\"\n    suffixes = trie.find_word(string)\n    return tuple(string + word for word in suffixes)\n\n\ndef main() -> None:\n    print(autocomplete_using_trie(\"de\"))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    main()\n"
  },
  {
    "path": "strings/barcode_validator.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/Check_digit#Algorithms\n\"\"\"\n\n\ndef get_check_digit(barcode: int) -> int:\n    \"\"\"\n    Returns the last digit of barcode by excluding the last digit first\n    and then computing to reach the actual last digit from the remaining\n    12 digits.\n\n    >>> get_check_digit(8718452538119)\n    9\n    >>> get_check_digit(87184523)\n    5\n    >>> get_check_digit(87193425381086)\n    9\n    >>> [get_check_digit(x) for x in range(0, 100, 10)]\n    [0, 7, 4, 1, 8, 5, 2, 9, 6, 3]\n    \"\"\"\n    barcode //= 10  # exclude the last digit\n    checker = False\n    s = 0\n\n    # extract and check each digit\n    while barcode != 0:\n        mult = 1 if checker else 3\n        s += mult * (barcode % 10)\n        barcode //= 10\n        checker = not checker\n\n    return (10 - (s % 10)) % 10\n\n\ndef is_valid(barcode: int) -> bool:\n    \"\"\"\n    Checks for length of barcode and last-digit\n    Returns boolean value of validity of barcode\n\n    >>> is_valid(8718452538119)\n    True\n    >>> is_valid(87184525)\n    False\n    >>> is_valid(87193425381089)\n    False\n    >>> is_valid(0)\n    False\n    >>> is_valid(dwefgiweuf)\n    Traceback (most recent call last):\n        ...\n    NameError: name 'dwefgiweuf' is not defined\n    \"\"\"\n    return len(str(barcode)) == 13 and get_check_digit(barcode) == barcode % 10\n\n\ndef get_barcode(barcode: str) -> int:\n    \"\"\"\n    Returns the barcode as an integer\n\n    >>> get_barcode(\"8718452538119\")\n    8718452538119\n    >>> get_barcode(\"dwefgiweuf\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Barcode 'dwefgiweuf' has alphabetic characters.\n    \"\"\"\n    if str(barcode).isalpha():\n        msg = f\"Barcode '{barcode}' has alphabetic characters.\"\n        raise ValueError(msg)\n    elif int(barcode) < 0:\n        raise ValueError(\"The entered barcode has a negative value. Try again.\")\n    else:\n        return int(barcode)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    \"\"\"\n    Enter a barcode.\n\n    \"\"\"\n    barcode = get_barcode(input(\"Barcode: \").strip())\n\n    if is_valid(barcode):\n        print(f\"'{barcode}' is a valid barcode.\")\n    else:\n        print(f\"'{barcode}' is NOT a valid barcode.\")\n"
  },
  {
    "path": "strings/bitap_string_match.py",
    "content": "\"\"\"\nBitap exact string matching\nhttps://en.wikipedia.org/wiki/Bitap_algorithm\n\nSearches for a pattern inside text, and returns the index of the first occurrence\nof the pattern. Both text and pattern consist of lowercase alphabetical characters only.\n\nComplexity: O(m*n)\n    n = length of text\n    m = length of pattern\n\nPython doctests can be run using this command:\npython3 -m doctest -v bitap_string_match.py\n\"\"\"\n\n\ndef bitap_string_match(text: str, pattern: str) -> int:\n    \"\"\"\n    Retrieves the index of the first occurrence of pattern in text.\n\n    Args:\n        text: A string consisting only of lowercase alphabetical characters.\n        pattern: A string consisting only of lowercase alphabetical characters.\n\n    Returns:\n        int: The index where pattern first occurs. Return -1  if not found.\n\n    >>> bitap_string_match('abdabababc', 'ababc')\n    5\n    >>> bitap_string_match('aaaaaaaaaaaaaaaaaa', 'a')\n    0\n    >>> bitap_string_match('zxywsijdfosdfnso', 'zxywsijdfosdfnso')\n    0\n    >>> bitap_string_match('abdabababc', '')\n    0\n    >>> bitap_string_match('abdabababc', 'c')\n    9\n    >>> bitap_string_match('abdabababc', 'fofosdfo')\n    -1\n    >>> bitap_string_match('abdab', 'fofosdfo')\n    -1\n    \"\"\"\n    if not pattern:\n        return 0\n    m = len(pattern)\n    if m > len(text):\n        return -1\n\n    # Initial state of bit string 1110\n    state = ~1\n    # Bit = 0 if character appears at index, and 1 otherwise\n    pattern_mask: list[int] = [~0] * 27  # 1111\n\n    for i, char in enumerate(pattern):\n        # For the pattern mask for this character, set the bit to 0 for each i\n        # the character appears.\n        pattern_index: int = ord(char) - ord(\"a\")\n        pattern_mask[pattern_index] &= ~(1 << i)\n\n    for i, char in enumerate(text):\n        text_index = ord(char) - ord(\"a\")\n        # If this character does not appear in pattern, it's pattern mask is 1111.\n        # Performing a bitwise OR between state and 1111 will reset the state to 1111\n        # and start searching the start of pattern again.\n        state |= pattern_mask[text_index]\n        state <<= 1\n\n        # If the mth bit (counting right to left) of the state is 0, then we have\n        # found pattern in text\n        if (state & (1 << m)) == 0:\n            return i - m + 1\n\n    return -1\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "strings/boyer_moore_search.py",
    "content": "\"\"\"\nThe algorithm finds the pattern in given text using following rule.\n\nThe bad-character rule considers the mismatched character in Text.\nThe next occurrence of that character to the left in Pattern is found,\n\nIf the mismatched character occurs to the left in Pattern,\na shift is proposed that aligns text block and pattern.\n\nIf the mismatched character does not occur to the left in Pattern,\na shift is proposed that moves the entirety of Pattern past\nthe point of mismatch in the text.\n\nIf there is no mismatch then the pattern matches with text block.\n\nTime Complexity : O(n/m)\n    n=length of main string\n    m=length of pattern string\n\"\"\"\n\n\nclass BoyerMooreSearch:\n    \"\"\"\n    Example usage:\n\n        bms = BoyerMooreSearch(text=\"ABAABA\", pattern=\"AB\")\n        positions = bms.bad_character_heuristic()\n\n    where 'positions' contain the locations where the pattern was matched.\n    \"\"\"\n\n    def __init__(self, text: str, pattern: str):\n        self.text, self.pattern = text, pattern\n        self.textLen, self.patLen = len(text), len(pattern)\n\n    def match_in_pattern(self, char: str) -> int:\n        \"\"\"\n        Finds the index of char in pattern in reverse order.\n\n        Parameters :\n            char (chr): character to be searched\n\n        Returns :\n            i (int): index of char from last in pattern\n            -1 (int): if char is not found in pattern\n\n        >>> bms = BoyerMooreSearch(text=\"ABAABA\", pattern=\"AB\")\n        >>> bms.match_in_pattern(\"B\")\n        1\n        \"\"\"\n\n        for i in range(self.patLen - 1, -1, -1):\n            if char == self.pattern[i]:\n                return i\n        return -1\n\n    def mismatch_in_text(self, current_pos: int) -> int:\n        \"\"\"\n        Find the index of mis-matched character in text when compared with pattern\n        from last.\n\n        Parameters :\n            current_pos (int): current index position of text\n\n        Returns :\n            i (int): index of mismatched char from last in text\n            -1 (int): if there is no mismatch between pattern and text block\n\n        >>> bms = BoyerMooreSearch(text=\"ABAABA\", pattern=\"AB\")\n        >>> bms.mismatch_in_text(2)\n        3\n        \"\"\"\n\n        for i in range(self.patLen - 1, -1, -1):\n            if self.pattern[i] != self.text[current_pos + i]:\n                return current_pos + i\n        return -1\n\n    def bad_character_heuristic(self) -> list[int]:\n        \"\"\"\n        Finds the positions of the pattern location.\n\n        >>> bms = BoyerMooreSearch(text=\"ABAABA\", pattern=\"AB\")\n        >>> bms.bad_character_heuristic()\n        [0, 3]\n        \"\"\"\n\n        positions = []\n        for i in range(self.textLen - self.patLen + 1):\n            mismatch_index = self.mismatch_in_text(i)\n            if mismatch_index == -1:\n                positions.append(i)\n            else:\n                match_index = self.match_in_pattern(self.text[mismatch_index])\n                i = (\n                    mismatch_index - match_index\n                )  # shifting index lgtm [py/multiple-definition]\n        return positions\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "strings/camel_case_to_snake_case.py",
    "content": "def camel_to_snake_case(input_str: str) -> str:\r\n    \"\"\"\r\n    Transforms a camelCase (or PascalCase) string to snake_case\r\n\r\n    >>> camel_to_snake_case(\"someRandomString\")\r\n    'some_random_string'\r\n\r\n    >>> camel_to_snake_case(\"SomeRandomStr#ng\")\r\n    'some_random_str_ng'\r\n\r\n    >>> camel_to_snake_case(\"123someRandom123String123\")\r\n    '123_some_random_123_string_123'\r\n\r\n    >>> camel_to_snake_case(\"123SomeRandom123String123\")\r\n    '123_some_random_123_string_123'\r\n\r\n    >>> camel_to_snake_case(123)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Expected string as input, found <class 'int'>\r\n\r\n    \"\"\"\r\n\r\n    # check for invalid input type\r\n    if not isinstance(input_str, str):\r\n        msg = f\"Expected string as input, found {type(input_str)}\"\r\n        raise ValueError(msg)\r\n\r\n    snake_str = \"\"\r\n\r\n    for index, char in enumerate(input_str):\r\n        if char.isupper():\r\n            snake_str += \"_\" + char.lower()\r\n\r\n        # if char is lowercase but proceeded by a digit:\r\n        elif input_str[index - 1].isdigit() and char.islower():\r\n            snake_str += \"_\" + char\r\n\r\n        # if char is a digit proceeded by a letter:\r\n        elif input_str[index - 1].isalpha() and char.isnumeric():\r\n            snake_str += \"_\" + char.lower()\r\n\r\n        # if char is not alphanumeric:\r\n        elif not char.isalnum():\r\n            snake_str += \"_\"\r\n\r\n        else:\r\n            snake_str += char\r\n\r\n    # remove leading underscore\r\n    if snake_str[0] == \"_\":\r\n        snake_str = snake_str[1:]\r\n\r\n    return snake_str\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    from doctest import testmod\r\n\r\n    testmod()\r\n"
  },
  {
    "path": "strings/can_string_be_rearranged_as_palindrome.py",
    "content": "# Created by susmith98\n\nfrom collections import Counter\nfrom timeit import timeit\n\n# Problem Description:\n# Check if characters of the given string can be rearranged to form a palindrome.\n# Counter is faster for long strings and non-Counter is faster for short strings.\n\n\ndef can_string_be_rearranged_as_palindrome_counter(\n    input_str: str = \"\",\n) -> bool:\n    \"\"\"\n    A Palindrome is a String that reads the same forward as it does backwards.\n    Examples of Palindromes mom, dad, malayalam\n    >>> can_string_be_rearranged_as_palindrome_counter(\"Momo\")\n    True\n    >>> can_string_be_rearranged_as_palindrome_counter(\"Mother\")\n    False\n    >>> can_string_be_rearranged_as_palindrome_counter(\"Father\")\n    False\n    >>> can_string_be_rearranged_as_palindrome_counter(\"A man a plan a canal Panama\")\n    True\n    \"\"\"\n    return sum(c % 2 for c in Counter(input_str.replace(\" \", \"\").lower()).values()) < 2\n\n\ndef can_string_be_rearranged_as_palindrome(input_str: str = \"\") -> bool:\n    \"\"\"\n    A Palindrome is a String that reads the same forward as it does backwards.\n    Examples of Palindromes mom, dad, malayalam\n    >>> can_string_be_rearranged_as_palindrome(\"Momo\")\n    True\n    >>> can_string_be_rearranged_as_palindrome(\"Mother\")\n    False\n    >>> can_string_be_rearranged_as_palindrome(\"Father\")\n    False\n    >>> can_string_be_rearranged_as_palindrome_counter(\"A man a plan a canal Panama\")\n    True\n    \"\"\"\n    if len(input_str) == 0:\n        return True\n    lower_case_input_str = input_str.replace(\" \", \"\").lower()\n    # character_freq_dict: Stores the frequency of every character in the input string\n    character_freq_dict: dict[str, int] = {}\n\n    for character in lower_case_input_str:\n        character_freq_dict[character] = character_freq_dict.get(character, 0) + 1\n    \"\"\"\n    Above line of code is equivalent to:\n    1) Getting the frequency of current character till previous index\n    >>> character_freq =  character_freq_dict.get(character, 0)\n    2) Incrementing the frequency of current character by 1\n    >>> character_freq = character_freq + 1\n    3) Updating the frequency of current character\n    >>> character_freq_dict[character] = character_freq\n    \"\"\"\n    \"\"\"\n    OBSERVATIONS:\n    Even length palindrome\n    -> Every character appears even no.of times.\n    Odd length palindrome\n    -> Every character appears even no.of times except for one character.\n    LOGIC:\n    Step 1: We'll count number of characters that appear odd number of times i.e oddChar\n    Step 2:If we find more than 1 character that appears odd number of times,\n    It is not possible to rearrange as a palindrome\n    \"\"\"\n    odd_char = 0\n\n    for character_count in character_freq_dict.values():\n        if character_count % 2:\n            odd_char += 1\n    return not odd_char > 1\n\n\ndef benchmark(input_str: str = \"\") -> None:\n    \"\"\"\n    Benchmark code for comparing above 2 functions\n    \"\"\"\n    print(\"\\nFor string = \", input_str, \":\")\n    print(\n        \"> can_string_be_rearranged_as_palindrome_counter()\",\n        \"\\tans =\",\n        can_string_be_rearranged_as_palindrome_counter(input_str),\n        \"\\ttime =\",\n        timeit(\n            \"z.can_string_be_rearranged_as_palindrome_counter(z.check_str)\",\n            setup=\"import __main__ as z\",\n        ),\n        \"seconds\",\n    )\n    print(\n        \"> can_string_be_rearranged_as_palindrome()\",\n        \"\\tans =\",\n        can_string_be_rearranged_as_palindrome(input_str),\n        \"\\ttime =\",\n        timeit(\n            \"z.can_string_be_rearranged_as_palindrome(z.check_str)\",\n            setup=\"import __main__ as z\",\n        ),\n        \"seconds\",\n    )\n\n\nif __name__ == \"__main__\":\n    check_str = input(\n        \"Enter string to determine if it can be rearranged as a palindrome or not: \"\n    ).strip()\n    benchmark(check_str)\n    status = can_string_be_rearranged_as_palindrome_counter(check_str)\n    print(f\"{check_str} can {'' if status else 'not '}be rearranged as a palindrome\")\n"
  },
  {
    "path": "strings/capitalize.py",
    "content": "def capitalize(sentence: str) -> str:\n    \"\"\"\n    Capitalizes the first letter of a sentence or word.\n\n    >>> capitalize(\"hello world\")\n    'Hello world'\n    >>> capitalize(\"123 hello world\")\n    '123 hello world'\n    >>> capitalize(\" hello world\")\n    ' hello world'\n    >>> capitalize(\"a\")\n    'A'\n    >>> capitalize(\"\")\n    ''\n    \"\"\"\n    if not sentence:\n        return \"\"\n\n    # Capitalize the first character if it's a lowercase letter\n    # Concatenate the capitalized character with the rest of the string\n    return sentence[0].upper() + sentence[1:]\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "strings/check_anagrams.py",
    "content": "\"\"\"\r\nwiki: https://en.wikipedia.org/wiki/Anagram\r\n\"\"\"\r\n\r\nfrom collections import defaultdict\r\n\r\n\r\ndef check_anagrams(first_str: str, second_str: str) -> bool:\r\n    \"\"\"\r\n    Two strings are anagrams if they are made up of the same letters but are\r\n    arranged differently (ignoring the case).\r\n    >>> check_anagrams('Silent', 'Listen')\r\n    True\r\n    >>> check_anagrams('This is a string', 'Is this a string')\r\n    True\r\n    >>> check_anagrams('This is    a      string', 'Is     this a string')\r\n    True\r\n    >>> check_anagrams('There', 'Their')\r\n    False\r\n    \"\"\"\r\n    first_str = first_str.lower().strip()\r\n    second_str = second_str.lower().strip()\r\n\r\n    # Remove whitespace\r\n    first_str = first_str.replace(\" \", \"\")\r\n    second_str = second_str.replace(\" \", \"\")\r\n\r\n    # Strings of different lengths are not anagrams\r\n    if len(first_str) != len(second_str):\r\n        return False\r\n\r\n    # Default values for count should be 0\r\n    count: defaultdict[str, int] = defaultdict(int)\r\n\r\n    # For each character in input strings,\r\n    # increment count in the corresponding\r\n    for i in range(len(first_str)):\r\n        count[first_str[i]] += 1\r\n        count[second_str[i]] -= 1\r\n\r\n    return all(_count == 0 for _count in count.values())\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    from doctest import testmod\r\n\r\n    testmod()\r\n    input_a = input(\"Enter the first string \").strip()\r\n    input_b = input(\"Enter the second string \").strip()\r\n\r\n    status = check_anagrams(input_a, input_b)\r\n    print(f\"{input_a} and {input_b} are {'' if status else 'not '}anagrams.\")\r\n"
  },
  {
    "path": "strings/count_vowels.py",
    "content": "def count_vowels(s: str) -> int:\n    \"\"\"\n    Count the number of vowels in a given string.\n\n    :param s: Input string to count vowels in.\n    :return: Number of vowels in the input string.\n\n    Examples:\n    >>> count_vowels(\"hello world\")\n    3\n    >>> count_vowels(\"HELLO WORLD\")\n    3\n    >>> count_vowels(\"123 hello world\")\n    3\n    >>> count_vowels(\"\")\n    0\n    >>> count_vowels(\"a quick brown fox\")\n    5\n    >>> count_vowels(\"the quick BROWN fox\")\n    5\n    >>> count_vowels(\"PYTHON\")\n    1\n    \"\"\"\n    if not isinstance(s, str):\n        raise TypeError(\"Input must be a string\")\n\n    vowels = \"aeiouAEIOU\"\n    return sum(1 for char in s if char in vowels)\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "strings/credit_card_validator.py",
    "content": "\"\"\"\nFunctions for testing the validity of credit card numbers.\n\nhttps://en.wikipedia.org/wiki/Luhn_algorithm\n\"\"\"\n\n\ndef validate_initial_digits(credit_card_number: str) -> bool:\n    \"\"\"\n    Function to validate initial digits of a given credit card number.\n    >>> valid = \"4111111111111111 41111111111111 34 35 37 412345 523456 634567\"\n    >>> all(validate_initial_digits(cc) for cc in valid.split())\n    True\n    >>> invalid = \"14 25 76 32323 36111111111111\"\n    >>> all(validate_initial_digits(cc) is False for cc in invalid.split())\n    True\n    \"\"\"\n    return credit_card_number.startswith((\"34\", \"35\", \"37\", \"4\", \"5\", \"6\"))\n\n\ndef luhn_validation(credit_card_number: str) -> bool:\n    \"\"\"\n    Function to luhn algorithm validation for a given credit card number.\n    >>> luhn_validation('4111111111111111')\n    True\n    >>> luhn_validation('36111111111111')\n    True\n    >>> luhn_validation('41111111111111')\n    False\n    \"\"\"\n    cc_number = credit_card_number\n    total = 0\n    half_len = len(cc_number) - 2\n    for i in range(half_len, -1, -2):\n        #  double the value of every second digit\n        digit = int(cc_number[i])\n        digit *= 2\n        # If doubling of a number results in a two digit number\n        # i.e greater than 9(e.g., 6 x 2 = 12),\n        # then add the digits of the product (e.g., 12: 1 + 2 = 3, 15: 1 + 5 = 6),\n        # to get a single digit number.\n        if digit > 9:\n            digit %= 10\n            digit += 1\n        cc_number = cc_number[:i] + str(digit) + cc_number[i + 1 :]\n        total += digit\n\n    # Sum up the remaining digits\n    for i in range(len(cc_number) - 1, -1, -2):\n        total += int(cc_number[i])\n\n    return total % 10 == 0\n\n\ndef validate_credit_card_number(credit_card_number: str) -> bool:\n    \"\"\"\n    Function to validate the given credit card number.\n    >>> validate_credit_card_number('4111111111111111')\n    4111111111111111 is a valid credit card number.\n    True\n    >>> validate_credit_card_number('helloworld$')\n    helloworld$ is an invalid credit card number because it has nonnumerical characters.\n    False\n    >>> validate_credit_card_number('32323')\n    32323 is an invalid credit card number because of its length.\n    False\n    >>> validate_credit_card_number('32323323233232332323')\n    32323323233232332323 is an invalid credit card number because of its length.\n    False\n    >>> validate_credit_card_number('36111111111111')\n    36111111111111 is an invalid credit card number because of its first two digits.\n    False\n    >>> validate_credit_card_number('41111111111111')\n    41111111111111 is an invalid credit card number because it fails the Luhn check.\n    False\n    \"\"\"\n    error_message = f\"{credit_card_number} is an invalid credit card number because\"\n    if not credit_card_number.isdigit():\n        print(f\"{error_message} it has nonnumerical characters.\")\n        return False\n\n    if not 13 <= len(credit_card_number) <= 16:\n        print(f\"{error_message} of its length.\")\n        return False\n\n    if not validate_initial_digits(credit_card_number):\n        print(f\"{error_message} of its first two digits.\")\n        return False\n\n    if not luhn_validation(credit_card_number):\n        print(f\"{error_message} it fails the Luhn check.\")\n        return False\n\n    print(f\"{credit_card_number} is a valid credit card number.\")\n    return True\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    validate_credit_card_number(\"4111111111111111\")\n    validate_credit_card_number(\"32323\")\n"
  },
  {
    "path": "strings/damerau_levenshtein_distance.py",
    "content": "\"\"\"\nThis script is a implementation of the Damerau-Levenshtein distance algorithm.\n\nIt's an algorithm that measures the edit distance between two string sequences\n\nMore information about this algorithm can be found in this wikipedia article:\nhttps://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance\n\"\"\"\n\n\ndef damerau_levenshtein_distance(first_string: str, second_string: str) -> int:\n    \"\"\"\n    Implements the Damerau-Levenshtein distance algorithm that measures\n    the edit distance between two strings.\n\n    Parameters:\n        first_string: The first string to compare\n        second_string: The second string to compare\n\n    Returns:\n        distance: The edit distance between the first and second strings\n\n    >>> damerau_levenshtein_distance(\"cat\", \"cut\")\n    1\n    >>> damerau_levenshtein_distance(\"kitten\", \"sitting\")\n    3\n    >>> damerau_levenshtein_distance(\"hello\", \"world\")\n    4\n    >>> damerau_levenshtein_distance(\"book\", \"back\")\n    2\n    >>> damerau_levenshtein_distance(\"container\", \"containment\")\n    3\n    >>> damerau_levenshtein_distance(\"container\", \"containment\")\n    3\n    \"\"\"\n    # Create a dynamic programming matrix to store the distances\n    dp_matrix = [[0] * (len(second_string) + 1) for _ in range(len(first_string) + 1)]\n\n    # Initialize the matrix\n    for i in range(len(first_string) + 1):\n        dp_matrix[i][0] = i\n    for j in range(len(second_string) + 1):\n        dp_matrix[0][j] = j\n\n    # Fill the matrix\n    for i, first_char in enumerate(first_string, start=1):\n        for j, second_char in enumerate(second_string, start=1):\n            cost = int(first_char != second_char)\n\n            dp_matrix[i][j] = min(\n                dp_matrix[i - 1][j] + 1,  # Deletion\n                dp_matrix[i][j - 1] + 1,  # Insertion\n                dp_matrix[i - 1][j - 1] + cost,  # Substitution\n            )\n\n            if (\n                i > 1\n                and j > 1\n                and first_string[i - 1] == second_string[j - 2]\n                and first_string[i - 2] == second_string[j - 1]\n            ):\n                # Transposition\n                dp_matrix[i][j] = min(dp_matrix[i][j], dp_matrix[i - 2][j - 2] + cost)\n\n    return dp_matrix[-1][-1]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "strings/detecting_english_programmatically.py",
    "content": "import os\nfrom string import ascii_letters\n\nLETTERS_AND_SPACE = ascii_letters + \" \\t\\n\"\n\n\ndef load_dictionary() -> dict[str, None]:\n    path = os.path.split(os.path.realpath(__file__))\n    english_words: dict[str, None] = {}\n    with open(path[0] + \"/dictionary.txt\") as dictionary_file:\n        for word in dictionary_file.read().split(\"\\n\"):\n            english_words[word] = None\n    return english_words\n\n\nENGLISH_WORDS = load_dictionary()\n\n\ndef get_english_count(message: str) -> float:\n    message = message.upper()\n    message = remove_non_letters(message)\n    possible_words = message.split()\n    matches = len([word for word in possible_words if word in ENGLISH_WORDS])\n    return float(matches) / len(possible_words)\n\n\ndef remove_non_letters(message: str) -> str:\n    \"\"\"\n    >>> remove_non_letters(\"Hi! how are you?\")\n    'Hi how are you'\n    >>> remove_non_letters(\"P^y%t)h@o*n\")\n    'Python'\n    >>> remove_non_letters(\"1+1=2\")\n    ''\n    >>> remove_non_letters(\"www.google.com/\")\n    'wwwgooglecom'\n    >>> remove_non_letters(\"\")\n    ''\n    \"\"\"\n    return \"\".join(symbol for symbol in message if symbol in LETTERS_AND_SPACE)\n\n\ndef is_english(\n    message: str, word_percentage: int = 20, letter_percentage: int = 85\n) -> bool:\n    \"\"\"\n    >>> is_english('Hello World')\n    True\n    >>> is_english('llold HorWd')\n    False\n    \"\"\"\n    words_match = get_english_count(message) * 100 >= word_percentage\n    num_letters = len(remove_non_letters(message))\n    message_letters_percentage = (float(num_letters) / len(message)) * 100\n    letters_match = message_letters_percentage >= letter_percentage\n    return words_match and letters_match\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "strings/dictionary.txt",
    "content": "AARHUS\nAARON\nABABA\nABACK\nABAFT\nABANDON\nABANDONED\nABANDONING\nABANDONMENT\nABANDONS\nABASE\nABASED\nABASEMENT\nABASEMENTS\nABASES\nABASH\nABASHED\nABASHES\nABASHING\nABASING\nABATE\nABATED\nABATEMENT\nABATEMENTS\nABATER\nABATES\nABATING\nABBA\nABBE\nABBEY\nABBEYS\nABBOT\nABBOTS\nABBOTT\nABBREVIATE\nABBREVIATED\nABBREVIATES\nABBREVIATING\nABBREVIATION\nABBREVIATIONS\nABBY\nABDOMEN\nABDOMENS\nABDOMINAL\nABDUCT\nABDUCTED\nABDUCTION\nABDUCTIONS\nABDUCTOR\nABDUCTORS\nABDUCTS\nABE\nABED\nABEL\nABELIAN\nABELSON\nABERDEEN\nABERNATHY\nABERRANT\nABERRATION\nABERRATIONS\nABET\nABETS\nABETTED\nABETTER\nABETTING\nABEYANCE\nABHOR\nABHORRED\nABHORRENT\nABHORRER\nABHORRING\nABHORS\nABIDE\nABIDED\nABIDES\nABIDING\nABIDJAN\nABIGAIL\nABILENE\nABILITIES\nABILITY\nABJECT\nABJECTION\nABJECTIONS\nABJECTLY\nABJECTNESS\nABJURE\nABJURED\nABJURES\nABJURING\nABLATE\nABLATED\nABLATES\nABLATING\nABLATION\nABLATIVE\nABLAZE\nABLE\nABLER\nABLEST\nABLY\nABNER\nABNORMAL\nABNORMALITIES\nABNORMALITY\nABNORMALLY\nABO\nABOARD\nABODE\nABODES\nABOLISH\nABOLISHED\nABOLISHER\nABOLISHERS\nABOLISHES\nABOLISHING\nABOLISHMENT\nABOLISHMENTS\nABOLITION\nABOLITIONIST\nABOLITIONISTS\nABOMINABLE\nABOMINATE\nABORIGINAL\nABORIGINE\nABORIGINES\nABORT\nABORTED\nABORTING\nABORTION\nABORTIONS\nABORTIVE\nABORTIVELY\nABORTS\nABOS\nABOUND\nABOUNDED\nABOUNDING\nABOUNDS\nABOUT\nABOVE\nABOVEBOARD\nABOVEGROUND\nABOVEMENTIONED\nABRADE\nABRADED\nABRADES\nABRADING\nABRAHAM\nABRAM\nABRAMS\nABRAMSON\nABRASION\nABRASIONS\nABRASIVE\nABREACTION\nABREACTIONS\nABREAST\nABRIDGE\nABRIDGED\nABRIDGES\nABRIDGING\nABRIDGMENT\nABROAD\nABROGATE\nABROGATED\nABROGATES\nABROGATING\nABRUPT\nABRUPTLY\nABRUPTNESS\nABSCESS\nABSCESSED\nABSCESSES\nABSCISSA\nABSCISSAS\nABSCOND\nABSCONDED\nABSCONDING\nABSCONDS\nABSENCE\nABSENCES\nABSENT\nABSENTED\nABSENTEE\nABSENTEEISM\nABSENTEES\nABSENTIA\nABSENTING\nABSENTLY\nABSENTMINDED\nABSENTS\nABSINTHE\nABSOLUTE\nABSOLUTELY\nABSOLUTENESS\nABSOLUTES\nABSOLUTION\nABSOLVE\nABSOLVED\nABSOLVES\nABSOLVING\nABSORB\nABSORBED\nABSORBENCY\nABSORBENT\nABSORBER\nABSORBING\nABSORBS\nABSORPTION\nABSORPTIONS\nABSORPTIVE\nABSTAIN\nABSTAINED\nABSTAINER\nABSTAINING\nABSTAINS\nABSTENTION\nABSTENTIONS\nABSTINENCE\nABSTRACT\nABSTRACTED\nABSTRACTING\nABSTRACTION\nABSTRACTIONISM\nABSTRACTIONIST\nABSTRACTIONS\nABSTRACTLY\nABSTRACTNESS\nABSTRACTOR\nABSTRACTORS\nABSTRACTS\nABSTRUSE\nABSTRUSENESS\nABSURD\nABSURDITIES\nABSURDITY\nABSURDLY\nABU\nABUNDANCE\nABUNDANT\nABUNDANTLY\nABUSE\nABUSED\nABUSES\nABUSING\nABUSIVE\nABUT\nABUTMENT\nABUTS\nABUTTED\nABUTTER\nABUTTERS\nABUTTING\nABYSMAL\nABYSMALLY\nABYSS\nABYSSES\nABYSSINIA\nABYSSINIAN\nABYSSINIANS\nACACIA\nACADEMIA\nACADEMIC\nACADEMICALLY\nACADEMICS\nACADEMIES\nACADEMY\nACADIA\nACAPULCO\nACCEDE\nACCEDED\nACCEDES\nACCELERATE\nACCELERATED\nACCELERATES\nACCELERATING\nACCELERATION\nACCELERATIONS\nACCELERATOR\nACCELERATORS\nACCELEROMETER\nACCELEROMETERS\nACCENT\nACCENTED\nACCENTING\nACCENTS\nACCENTUAL\nACCENTUATE\nACCENTUATED\nACCENTUATES\nACCENTUATING\nACCENTUATION\nACCEPT\nACCEPTABILITY\nACCEPTABLE\nACCEPTABLY\nACCEPTANCE\nACCEPTANCES\nACCEPTED\nACCEPTER\nACCEPTERS\nACCEPTING\nACCEPTOR\nACCEPTORS\nACCEPTS\nACCESS\nACCESSED\nACCESSES\nACCESSIBILITY\nACCESSIBLE\nACCESSIBLY\nACCESSING\nACCESSION\nACCESSIONS\nACCESSORIES\nACCESSORS\nACCESSORY\nACCIDENT\nACCIDENTAL\nACCIDENTALLY\nACCIDENTLY\nACCIDENTS\nACCLAIM\nACCLAIMED\nACCLAIMING\nACCLAIMS\nACCLAMATION\nACCLIMATE\nACCLIMATED\nACCLIMATES\nACCLIMATING\nACCLIMATIZATION\nACCLIMATIZED\nACCOLADE\nACCOLADES\nACCOMMODATE\nACCOMMODATED\nACCOMMODATES\nACCOMMODATING\nACCOMMODATION\nACCOMMODATIONS\nACCOMPANIED\nACCOMPANIES\nACCOMPANIMENT\nACCOMPANIMENTS\nACCOMPANIST\nACCOMPANISTS\nACCOMPANY\nACCOMPANYING\nACCOMPLICE\nACCOMPLICES\nACCOMPLISH\nACCOMPLISHED\nACCOMPLISHER\nACCOMPLISHERS\nACCOMPLISHES\nACCOMPLISHING\nACCOMPLISHMENT\nACCOMPLISHMENTS\nACCORD\nACCORDANCE\nACCORDED\nACCORDER\nACCORDERS\nACCORDING\nACCORDINGLY\nACCORDION\nACCORDIONS\nACCORDS\nACCOST\nACCOSTED\nACCOSTING\nACCOSTS\nACCOUNT\nACCOUNTABILITY\nACCOUNTABLE\nACCOUNTABLY\nACCOUNTANCY\nACCOUNTANT\nACCOUNTANTS\nACCOUNTED\nACCOUNTING\nACCOUNTS\nACCRA\nACCREDIT\nACCREDITATION\nACCREDITATIONS\nACCREDITED\nACCRETION\nACCRETIONS\nACCRUE\nACCRUED\nACCRUES\nACCRUING\nACCULTURATE\nACCULTURATED\nACCULTURATES\nACCULTURATING\nACCULTURATION\nACCUMULATE\nACCUMULATED\nACCUMULATES\nACCUMULATING\nACCUMULATION\nACCUMULATIONS\nACCUMULATOR\nACCUMULATORS\nACCURACIES\nACCURACY\nACCURATE\nACCURATELY\nACCURATENESS\nACCURSED\nACCUSAL\nACCUSATION\nACCUSATIONS\nACCUSATIVE\nACCUSE\nACCUSED\nACCUSER\nACCUSES\nACCUSING\nACCUSINGLY\nACCUSTOM\nACCUSTOMED\nACCUSTOMING\nACCUSTOMS\nACE\nACES\nACETATE\nACETONE\nACETYLENE\nACHAEAN\nACHAEANS\nACHE\nACHED\nACHES\nACHIEVABLE\nACHIEVE\nACHIEVED\nACHIEVEMENT\nACHIEVEMENTS\nACHIEVER\nACHIEVERS\nACHIEVES\nACHIEVING\nACHILLES\nACHING\nACID\nACIDIC\nACIDITIES\nACIDITY\nACIDLY\nACIDS\nACIDULOUS\nACKERMAN\nACKLEY\nACKNOWLEDGE\nACKNOWLEDGEABLE\nACKNOWLEDGED\nACKNOWLEDGEMENT\nACKNOWLEDGEMENTS\nACKNOWLEDGER\nACKNOWLEDGERS\nACKNOWLEDGES\nACKNOWLEDGING\nACKNOWLEDGMENT\nACKNOWLEDGMENTS\nACME\nACNE\nACOLYTE\nACOLYTES\nACORN\nACORNS\nACOUSTIC\nACOUSTICAL\nACOUSTICALLY\nACOUSTICIAN\nACOUSTICS\nACQUAINT\nACQUAINTANCE\nACQUAINTANCES\nACQUAINTED\nACQUAINTING\nACQUAINTS\nACQUIESCE\nACQUIESCED\nACQUIESCENCE\nACQUIESCENT\nACQUIESCES\nACQUIESCING\nACQUIRABLE\nACQUIRE\nACQUIRED\nACQUIRES\nACQUIRING\nACQUISITION\nACQUISITIONS\nACQUISITIVE\nACQUISITIVENESS\nACQUIT\nACQUITS\nACQUITTAL\nACQUITTED\nACQUITTER\nACQUITTING\nACRE\nACREAGE\nACRES\nACRID\nACRIMONIOUS\nACRIMONY\nACROBAT\nACROBATIC\nACROBATICS\nACROBATS\nACRONYM\nACRONYMS\nACROPOLIS\nACROSS\nACRYLIC\nACT\nACTA\nACTAEON\nACTED\nACTING\nACTINIUM\nACTINOMETER\nACTINOMETERS\nACTION\nACTIONS\nACTIVATE\nACTIVATED\nACTIVATES\nACTIVATING\nACTIVATION\nACTIVATIONS\nACTIVATOR\nACTIVATORS\nACTIVE\nACTIVELY\nACTIVISM\nACTIVIST\nACTIVISTS\nACTIVITIES\nACTIVITY\nACTON\nACTOR\nACTORS\nACTRESS\nACTRESSES\nACTS\nACTUAL\nACTUALITIES\nACTUALITY\nACTUALIZATION\nACTUALLY\nACTUALS\nACTUARIAL\nACTUARIALLY\nACTUATE\nACTUATED\nACTUATES\nACTUATING\nACTUATOR\nACTUATORS\nACUITY\nACUMEN\nACUTE\nACUTELY\nACUTENESS\nACYCLIC\nACYCLICALLY\nADA\nADAGE\nADAGES\nADAGIO\nADAGIOS\nADAIR\nADAM\nADAMANT\nADAMANTLY\nADAMS\nADAMSON\nADAPT\nADAPTABILITY\nADAPTABLE\nADAPTATION\nADAPTATIONS\nADAPTED\nADAPTER\nADAPTERS\nADAPTING\nADAPTIVE\nADAPTIVELY\nADAPTOR\nADAPTORS\nADAPTS\nADD\nADDED\nADDEND\nADDENDA\nADDENDUM\nADDER\nADDERS\nADDICT\nADDICTED\nADDICTING\nADDICTION\nADDICTIONS\nADDICTS\nADDING\nADDIS\nADDISON\nADDITION\nADDITIONAL\nADDITIONALLY\nADDITIONS\nADDITIVE\nADDITIVES\nADDITIVITY\nADDRESS\nADDRESSABILITY\nADDRESSABLE\nADDRESSED\nADDRESSEE\nADDRESSEES\nADDRESSER\nADDRESSERS\nADDRESSES\nADDRESSING\nADDRESSOGRAPH\nADDS\nADDUCE\nADDUCED\nADDUCES\nADDUCIBLE\nADDUCING\nADDUCT\nADDUCTED\nADDUCTING\nADDUCTION\nADDUCTOR\nADDUCTS\nADELAIDE\nADELE\nADELIA\nADEN\nADEPT\nADEQUACIES\nADEQUACY\nADEQUATE\nADEQUATELY\nADHERE\nADHERED\nADHERENCE\nADHERENT\nADHERENTS\nADHERER\nADHERERS\nADHERES\nADHERING\nADHESION\nADHESIONS\nADHESIVE\nADHESIVES\nADIABATIC\nADIABATICALLY\nADIEU\nADIRONDACK\nADIRONDACKS\nADJACENCY\nADJACENT\nADJECTIVE\nADJECTIVES\nADJOIN\nADJOINED\nADJOINING\nADJOINS\nADJOURN\nADJOURNED\nADJOURNING\nADJOURNMENT\nADJOURNS\nADJUDGE\nADJUDGED\nADJUDGES\nADJUDGING\nADJUDICATE\nADJUDICATED\nADJUDICATES\nADJUDICATING\nADJUDICATION\nADJUDICATIONS\nADJUNCT\nADJUNCTS\nADJURE\nADJURED\nADJURES\nADJURING\nADJUST\nADJUSTABLE\nADJUSTABLY\nADJUSTED\nADJUSTER\nADJUSTERS\nADJUSTING\nADJUSTMENT\nADJUSTMENTS\nADJUSTOR\nADJUSTORS\nADJUSTS\nADJUTANT\nADJUTANTS\nADKINS\nADLER\nADLERIAN\nADMINISTER\nADMINISTERED\nADMINISTERING\nADMINISTERINGS\nADMINISTERS\nADMINISTRABLE\nADMINISTRATE\nADMINISTRATION\nADMINISTRATIONS\nADMINISTRATIVE\nADMINISTRATIVELY\nADMINISTRATOR\nADMINISTRATORS\nADMIRABLE\nADMIRABLY\nADMIRAL\nADMIRALS\nADMIRALTY\nADMIRATION\nADMIRATIONS\nADMIRE\nADMIRED\nADMIRER\nADMIRERS\nADMIRES\nADMIRING\nADMIRINGLY\nADMISSIBILITY\nADMISSIBLE\nADMISSION\nADMISSIONS\nADMIT\nADMITS\nADMITTANCE\nADMITTED\nADMITTEDLY\nADMITTER\nADMITTERS\nADMITTING\nADMIX\nADMIXED\nADMIXES\nADMIXTURE\nADMONISH\nADMONISHED\nADMONISHES\nADMONISHING\nADMONISHMENT\nADMONISHMENTS\nADMONITION\nADMONITIONS\nADO\nADOBE\nADOLESCENCE\nADOLESCENT\nADOLESCENTS\nADOLPH\nADOLPHUS\nADONIS\nADOPT\nADOPTED\nADOPTER\nADOPTERS\nADOPTING\nADOPTION\nADOPTIONS\nADOPTIVE\nADOPTS\nADORABLE\nADORATION\nADORE\nADORED\nADORES\nADORN\nADORNED\nADORNMENT\nADORNMENTS\nADORNS\nADRENAL\nADRENALINE\nADRIAN\nADRIATIC\nADRIENNE\nADRIFT\nADROIT\nADROITNESS\nADS\nADSORB\nADSORBED\nADSORBING\nADSORBS\nADSORPTION\nADULATE\nADULATING\nADULATION\nADULT\nADULTERATE\nADULTERATED\nADULTERATES\nADULTERATING\nADULTERER\nADULTERERS\nADULTEROUS\nADULTEROUSLY\nADULTERY\nADULTHOOD\nADULTS\nADUMBRATE\nADUMBRATED\nADUMBRATES\nADUMBRATING\nADUMBRATION\nADVANCE\nADVANCED\nADVANCEMENT\nADVANCEMENTS\nADVANCES\nADVANCING\nADVANTAGE\nADVANTAGED\nADVANTAGEOUS\nADVANTAGEOUSLY\nADVANTAGES\nADVENT\nADVENTIST\nADVENTISTS\nADVENTITIOUS\nADVENTURE\nADVENTURED\nADVENTURER\nADVENTURERS\nADVENTURES\nADVENTURING\nADVENTUROUS\nADVERB\nADVERBIAL\nADVERBS\nADVERSARIES\nADVERSARY\nADVERSE\nADVERSELY\nADVERSITIES\nADVERSITY\nADVERT\nADVERTISE\nADVERTISED\nADVERTISEMENT\nADVERTISEMENTS\nADVERTISER\nADVERTISERS\nADVERTISES\nADVERTISING\nADVICE\nADVISABILITY\nADVISABLE\nADVISABLY\nADVISE\nADVISED\nADVISEDLY\nADVISEE\nADVISEES\nADVISEMENT\nADVISEMENTS\nADVISER\nADVISERS\nADVISES\nADVISING\nADVISOR\nADVISORS\nADVISORY\nADVOCACY\nADVOCATE\nADVOCATED\nADVOCATES\nADVOCATING\nAEGEAN\nAEGIS\nAENEAS\nAENEID\nAEOLUS\nAERATE\nAERATED\nAERATES\nAERATING\nAERATION\nAERATOR\nAERATORS\nAERIAL\nAERIALS\nAEROACOUSTIC\nAEROBACTER\nAEROBIC\nAEROBICS\nAERODYNAMIC\nAERODYNAMICS\nAERONAUTIC\nAERONAUTICAL\nAERONAUTICS\nAEROSOL\nAEROSOLIZE\nAEROSOLS\nAEROSPACE\nAESCHYLUS\nAESOP\nAESTHETIC\nAESTHETICALLY\nAESTHETICS\nAFAR\nAFFABLE\nAFFAIR\nAFFAIRS\nAFFECT\nAFFECTATION\nAFFECTATIONS\nAFFECTED\nAFFECTING\nAFFECTINGLY\nAFFECTION\nAFFECTIONATE\nAFFECTIONATELY\nAFFECTIONS\nAFFECTIVE\nAFFECTS\nAFFERENT\nAFFIANCED\nAFFIDAVIT\nAFFIDAVITS\nAFFILIATE\nAFFILIATED\nAFFILIATES\nAFFILIATING\nAFFILIATION\nAFFILIATIONS\nAFFINITIES\nAFFINITY\nAFFIRM\nAFFIRMATION\nAFFIRMATIONS\nAFFIRMATIVE\nAFFIRMATIVELY\nAFFIRMED\nAFFIRMING\nAFFIRMS\nAFFIX\nAFFIXED\nAFFIXES\nAFFIXING\nAFFLICT\nAFFLICTED\nAFFLICTING\nAFFLICTION\nAFFLICTIONS\nAFFLICTIVE\nAFFLICTS\nAFFLUENCE\nAFFLUENT\nAFFORD\nAFFORDABLE\nAFFORDED\nAFFORDING\nAFFORDS\nAFFRICATE\nAFFRICATES\nAFFRIGHT\nAFFRONT\nAFFRONTED\nAFFRONTING\nAFFRONTS\nAFGHAN\nAFGHANISTAN\nAFGHANS\nAFICIONADO\nAFIELD\nAFIRE\nAFLAME\nAFLOAT\nAFOOT\nAFORE\nAFOREMENTIONED\nAFORESAID\nAFORETHOUGHT\nAFOUL\nAFRAID\nAFRESH\nAFRICA\nAFRICAN\nAFRICANIZATION\nAFRICANIZATIONS\nAFRICANIZE\nAFRICANIZED\nAFRICANIZES\nAFRICANIZING\nAFRICANS\nAFRIKAANS\nAFRIKANER\nAFRIKANERS\nAFT\nAFTER\nAFTEREFFECT\nAFTERGLOW\nAFTERIMAGE\nAFTERLIFE\nAFTERMATH\nAFTERMOST\nAFTERNOON\nAFTERNOONS\nAFTERSHOCK\nAFTERSHOCKS\nAFTERTHOUGHT\nAFTERTHOUGHTS\nAFTERWARD\nAFTERWARDS\nAGAIN\nAGAINST\nAGAMEMNON\nAGAPE\nAGAR\nAGATE\nAGATES\nAGATHA\nAGE\nAGED\nAGEE\nAGELESS\nAGENCIES\nAGENCY\nAGENDA\nAGENDAS\nAGENT\nAGENTS\nAGER\nAGERS\nAGES\nAGGIE\nAGGIES\nAGGLOMERATE\nAGGLOMERATED\nAGGLOMERATES\nAGGLOMERATION\nAGGLUTINATE\nAGGLUTINATED\nAGGLUTINATES\nAGGLUTINATING\nAGGLUTINATION\nAGGLUTININ\nAGGLUTININS\nAGGRANDIZE\nAGGRAVATE\nAGGRAVATED\nAGGRAVATES\nAGGRAVATION\nAGGREGATE\nAGGREGATED\nAGGREGATELY\nAGGREGATES\nAGGREGATING\nAGGREGATION\nAGGREGATIONS\nAGGRESSION\nAGGRESSIONS\nAGGRESSIVE\nAGGRESSIVELY\nAGGRESSIVENESS\nAGGRESSOR\nAGGRESSORS\nAGGRIEVE\nAGGRIEVED\nAGGRIEVES\nAGGRIEVING\nAGHAST\nAGILE\nAGILELY\nAGILITY\nAGING\nAGITATE\nAGITATED\nAGITATES\nAGITATING\nAGITATION\nAGITATIONS\nAGITATOR\nAGITATORS\nAGLEAM\nAGLOW\nAGNES\nAGNEW\nAGNOSTIC\nAGNOSTICS\nAGO\nAGOG\nAGONIES\nAGONIZE\nAGONIZED\nAGONIZES\nAGONIZING\nAGONIZINGLY\nAGONY\nAGRARIAN\nAGREE\nAGREEABLE\nAGREEABLY\nAGREED\nAGREEING\nAGREEMENT\nAGREEMENTS\nAGREER\nAGREERS\nAGREES\nAGRICOLA\nAGRICULTURAL\nAGRICULTURALLY\nAGRICULTURE\nAGUE\nAGWAY\nAHEAD\nAHMADABAD\nAHMEDABAD\nAID\nAIDA\nAIDE\nAIDED\nAIDES\nAIDING\nAIDS\nAIKEN\nAIL\nAILEEN\nAILERON\nAILERONS\nAILING\nAILMENT\nAILMENTS\nAIM\nAIMED\nAIMER\nAIMERS\nAIMING\nAIMLESS\nAIMLESSLY\nAIMS\nAINU\nAINUS\nAIR\nAIRBAG\nAIRBAGS\nAIRBORNE\nAIRBUS\nAIRCRAFT\nAIRDROP\nAIRDROPS\nAIRED\nAIREDALE\nAIRER\nAIRERS\nAIRES\nAIRFARE\nAIRFIELD\nAIRFIELDS\nAIRFLOW\nAIRFOIL\nAIRFOILS\nAIRFRAME\nAIRFRAMES\nAIRILY\nAIRING\nAIRINGS\nAIRLESS\nAIRLIFT\nAIRLIFTS\nAIRLINE\nAIRLINER\nAIRLINES\nAIRLOCK\nAIRLOCKS\nAIRMAIL\nAIRMAILS\nAIRMAN\nAIRMEN\nAIRPLANE\nAIRPLANES\nAIRPORT\nAIRPORTS\nAIRS\nAIRSHIP\nAIRSHIPS\nAIRSPACE\nAIRSPEED\nAIRSTRIP\nAIRSTRIPS\nAIRTIGHT\nAIRWAY\nAIRWAYS\nAIRY\nAISLE\nAITKEN\nAJAR\nAJAX\nAKERS\nAKIMBO\nAKIN\nAKRON\nALABAMA\nALABAMANS\nALABAMIAN\nALABASTER\nALACRITY\nALADDIN\nALAMEDA\nALAMO\nALAMOS\nALAN\nALAR\nALARM\nALARMED\nALARMING\nALARMINGLY\nALARMIST\nALARMS\nALAS\nALASKA\nALASKAN\nALASTAIR\nALBA\nALBACORE\nALBANIA\nALBANIAN\nALBANIANS\nALBANY\nALBATROSS\nALBEIT\nALBERICH\nALBERT\nALBERTA\nALBERTO\nALBRECHT\nALBRIGHT\nALBUM\nALBUMIN\nALBUMS\nALBUQUERQUE\nALCESTIS\nALCHEMY\nALCIBIADES\nALCMENA\nALCOA\nALCOHOL\nALCOHOLIC\nALCOHOLICS\nALCOHOLISM\nALCOHOLS\nALCOTT\nALCOVE\nALCOVES\nALDEBARAN\nALDEN\nALDER\nALDERMAN\nALDERMEN\nALDRICH\nALE\nALEC\nALECK\nALEE\nALERT\nALERTED\nALERTEDLY\nALERTER\nALERTERS\nALERTING\nALERTLY\nALERTNESS\nALERTS\nALEUT\nALEUTIAN\nALEX\nALEXANDER\nALEXANDRA\nALEXANDRE\nALEXANDRIA\nALEXANDRINE\nALEXEI\nALEXIS\nALFA\nALFALFA\nALFONSO\nALFRED\nALFREDO\nALFRESCO\nALGA\nALGAE\nALGAECIDE\nALGEBRA\nALGEBRAIC\nALGEBRAICALLY\nALGEBRAS\nALGENIB\nALGER\nALGERIA\nALGERIAN\nALGIERS\nALGINATE\nALGOL\nALGOL\nALGONQUIAN\nALGONQUIN\nALGORITHM\nALGORITHMIC\nALGORITHMICALLY\nALGORITHMS\nALHAMBRA\nALI\nALIAS\nALIASED\nALIASES\nALIASING\nALIBI\nALIBIS\nALICE\nALICIA\nALIEN\nALIENATE\nALIENATED\nALIENATES\nALIENATING\nALIENATION\nALIENS\nALIGHT\nALIGN\nALIGNED\nALIGNING\nALIGNMENT\nALIGNMENTS\nALIGNS\nALIKE\nALIMENT\nALIMENTS\nALIMONY\nALISON\nALISTAIR\nALIVE\nALKALI\nALKALINE\nALKALIS\nALKALOID\nALKALOIDS\nALKYL\nALL\nALLAH\nALLAN\nALLAY\nALLAYED\nALLAYING\nALLAYS\nALLEGATION\nALLEGATIONS\nALLEGE\nALLEGED\nALLEGEDLY\nALLEGES\nALLEGHENIES\nALLEGHENY\nALLEGIANCE\nALLEGIANCES\nALLEGING\nALLEGORIC\nALLEGORICAL\nALLEGORICALLY\nALLEGORIES\nALLEGORY\nALLEGRA\nALLEGRETTO\nALLEGRETTOS\nALLELE\nALLELES\nALLEMANDE\nALLEN\nALLENDALE\nALLENTOWN\nALLERGIC\nALLERGIES\nALLERGY\nALLEVIATE\nALLEVIATED\nALLEVIATES\nALLEVIATING\nALLEVIATION\nALLEY\nALLEYS\nALLEYWAY\nALLEYWAYS\nALLIANCE\nALLIANCES\nALLIED\nALLIES\nALLIGATOR\nALLIGATORS\nALLIS\nALLISON\nALLITERATION\nALLITERATIONS\nALLITERATIVE\nALLOCATABLE\nALLOCATE\nALLOCATED\nALLOCATES\nALLOCATING\nALLOCATION\nALLOCATIONS\nALLOCATOR\nALLOCATORS\nALLOPHONE\nALLOPHONES\nALLOPHONIC\nALLOT\nALLOTMENT\nALLOTMENTS\nALLOTS\nALLOTTED\nALLOTTER\nALLOTTING\nALLOW\nALLOWABLE\nALLOWABLY\nALLOWANCE\nALLOWANCES\nALLOWED\nALLOWING\nALLOWS\nALLOY\nALLOYS\nALLSTATE\nALLUDE\nALLUDED\nALLUDES\nALLUDING\nALLURE\nALLUREMENT\nALLURING\nALLUSION\nALLUSIONS\nALLUSIVE\nALLUSIVENESS\nALLY\nALLYING\nALLYN\nALMA\nALMADEN\nALMANAC\nALMANACS\nALMIGHTY\nALMOND\nALMONDS\nALMONER\nALMOST\nALMS\nALMSMAN\nALNICO\nALOE\nALOES\nALOFT\nALOHA\nALONE\nALONENESS\nALONG\nALONGSIDE\nALOOF\nALOOFNESS\nALOUD\nALPERT\nALPHA\nALPHABET\nALPHABETIC\nALPHABETICAL\nALPHABETICALLY\nALPHABETICS\nALPHABETIZE\nALPHABETIZED\nALPHABETIZES\nALPHABETIZING\nALPHABETS\nALPHANUMERIC\nALPHERATZ\nALPHONSE\nALPINE\nALPS\nALREADY\nALSATIAN\nALSATIANS\nALSO\nALSOP\nALTAIR\nALTAR\nALTARS\nALTER\nALTERABLE\nALTERATION\nALTERATIONS\nALTERCATION\nALTERCATIONS\nALTERED\nALTERER\nALTERERS\nALTERING\nALTERNATE\nALTERNATED\nALTERNATELY\nALTERNATES\nALTERNATING\nALTERNATION\nALTERNATIONS\nALTERNATIVE\nALTERNATIVELY\nALTERNATIVES\nALTERNATOR\nALTERNATORS\nALTERS\nALTHAEA\nALTHOUGH\nALTITUDE\nALTITUDES\nALTOGETHER\nALTON\nALTOS\nALTRUISM\nALTRUIST\nALTRUISTIC\nALTRUISTICALLY\nALUM\nALUMINUM\nALUMNA\nALUMNAE\nALUMNI\nALUMNUS\nALUNDUM\nALVA\nALVAREZ\nALVEOLAR\nALVEOLI\nALVEOLUS\nALVIN\nALWAYS\nALYSSA\nAMADEUS\nAMAIN\nAMALGAM\nAMALGAMATE\nAMALGAMATED\nAMALGAMATES\nAMALGAMATING\nAMALGAMATION\nAMALGAMS\nAMANDA\nAMANUENSIS\nAMARETTO\nAMARILLO\nAMASS\nAMASSED\nAMASSES\nAMASSING\nAMATEUR\nAMATEURISH\nAMATEURISHNESS\nAMATEURISM\nAMATEURS\nAMATORY\nAMAZE\nAMAZED\nAMAZEDLY\nAMAZEMENT\nAMAZER\nAMAZERS\nAMAZES\nAMAZING\nAMAZINGLY\nAMAZON\nAMAZONS\nAMBASSADOR\nAMBASSADORS\nAMBER\nAMBIANCE\nAMBIDEXTROUS\nAMBIDEXTROUSLY\nAMBIENT\nAMBIGUITIES\nAMBIGUITY\nAMBIGUOUS\nAMBIGUOUSLY\nAMBITION\nAMBITIONS\nAMBITIOUS\nAMBITIOUSLY\nAMBIVALENCE\nAMBIVALENT\nAMBIVALENTLY\nAMBLE\nAMBLED\nAMBLER\nAMBLES\nAMBLING\nAMBROSIAL\nAMBULANCE\nAMBULANCES\nAMBULATORY\nAMBUSCADE\nAMBUSH\nAMBUSHED\nAMBUSHES\nAMDAHL\nAMELIA\nAMELIORATE\nAMELIORATED\nAMELIORATING\nAMELIORATION\nAMEN\nAMENABLE\nAMEND\nAMENDED\nAMENDING\nAMENDMENT\nAMENDMENTS\nAMENDS\nAMENITIES\nAMENITY\nAMENORRHEA\nAMERADA\nAMERICA\nAMERICAN\nAMERICANA\nAMERICANISM\nAMERICANIZATION\nAMERICANIZATIONS\nAMERICANIZE\nAMERICANIZER\nAMERICANIZERS\nAMERICANIZES\nAMERICANS\nAMERICAS\nAMERICIUM\nAMES\nAMHARIC\nAMHERST\nAMIABLE\nAMICABLE\nAMICABLY\nAMID\nAMIDE\nAMIDST\nAMIGA\nAMIGO\nAMINO\nAMISS\nAMITY\nAMMAN\nAMMERMAN\nAMMO\nAMMONIA\nAMMONIAC\nAMMONIUM\nAMMUNITION\nAMNESTY\nAMOCO\nAMOEBA\nAMOEBAE\nAMOEBAS\nAMOK\nAMONG\nAMONGST\nAMONTILLADO\nAMORAL\nAMORALITY\nAMORIST\nAMOROUS\nAMORPHOUS\nAMORPHOUSLY\nAMORTIZE\nAMORTIZED\nAMORTIZES\nAMORTIZING\nAMOS\nAMOUNT\nAMOUNTED\nAMOUNTER\nAMOUNTERS\nAMOUNTING\nAMOUNTS\nAMOUR\nAMPERAGE\nAMPERE\nAMPERES\nAMPERSAND\nAMPERSANDS\nAMPEX\nAMPHETAMINE\nAMPHETAMINES\nAMPHIBIAN\nAMPHIBIANS\nAMPHIBIOUS\nAMPHIBIOUSLY\nAMPHIBOLOGY\nAMPHITHEATER\nAMPHITHEATERS\nAMPLE\nAMPLIFICATION\nAMPLIFIED\nAMPLIFIER\nAMPLIFIERS\nAMPLIFIES\nAMPLIFY\nAMPLIFYING\nAMPLITUDE\nAMPLITUDES\nAMPLY\nAMPOULE\nAMPOULES\nAMPUTATE\nAMPUTATED\nAMPUTATES\nAMPUTATING\nAMSTERDAM\nAMTRAK\nAMULET\nAMULETS\nAMUSE\nAMUSED\nAMUSEDLY\nAMUSEMENT\nAMUSEMENTS\nAMUSER\nAMUSERS\nAMUSES\nAMUSING\nAMUSINGLY\nAMY\nAMYL\nANABAPTIST\nANABAPTISTS\nANABEL\nANACHRONISM\nANACHRONISMS\nANACHRONISTICALLY\nANACONDA\nANACONDAS\nANACREON\nANAEROBIC\nANAGRAM\nANAGRAMS\nANAHEIM\nANAL\nANALECTS\nANALOG\nANALOGICAL\nANALOGIES\nANALOGOUS\nANALOGOUSLY\nANALOGUE\nANALOGUES\nANALOGY\nANALYSES\nANALYSIS\nANALYST\nANALYSTS\nANALYTIC\nANALYTICAL\nANALYTICALLY\nANALYTICITIES\nANALYTICITY\nANALYZABLE\nANALYZE\nANALYZED\nANALYZER\nANALYZERS\nANALYZES\nANALYZING\nANAPHORA\nANAPHORIC\nANAPHORICALLY\nANAPLASMOSIS\nANARCHIC\nANARCHICAL\nANARCHISM\nANARCHIST\nANARCHISTS\nANARCHY\nANASTASIA\nANASTOMOSES\nANASTOMOSIS\nANASTOMOTIC\nANATHEMA\nANATOLE\nANATOLIA\nANATOLIAN\nANATOMIC\nANATOMICAL\nANATOMICALLY\nANATOMY\nANCESTOR\nANCESTORS\nANCESTRAL\nANCESTRY\nANCHOR\nANCHORAGE\nANCHORAGES\nANCHORED\nANCHORING\nANCHORITE\nANCHORITISM\nANCHORS\nANCHOVIES\nANCHOVY\nANCIENT\nANCIENTLY\nANCIENTS\nANCILLARY\nAND\nANDALUSIA\nANDALUSIAN\nANDALUSIANS\nANDEAN\nANDERS\nANDERSEN\nANDERSON\nANDES\nANDING\nANDORRA\nANDOVER\nANDRE\nANDREA\nANDREI\nANDREW\nANDREWS\nANDROMACHE\nANDROMEDA\nANDY\nANECDOTAL\nANECDOTE\nANECDOTES\nANECHOIC\nANEMIA\nANEMIC\nANEMOMETER\nANEMOMETERS\nANEMOMETRY\nANEMONE\nANESTHESIA\nANESTHETIC\nANESTHETICALLY\nANESTHETICS\nANESTHETIZE\nANESTHETIZED\nANESTHETIZES\nANESTHETIZING\nANEW\nANGEL\nANGELA\nANGELENO\nANGELENOS\nANGELES\nANGELIC\nANGELICA\nANGELINA\nANGELINE\nANGELO\nANGELS\nANGER\nANGERED\nANGERING\nANGERS\nANGIE\nANGIOGRAPHY\nANGLE\nANGLED\nANGLER\nANGLERS\nANGLES\nANGLIA\nANGLICAN\nANGLICANISM\nANGLICANIZE\nANGLICANIZES\nANGLICANS\nANGLING\nANGLO\nANGLOPHILIA\nANGLOPHOBIA\nANGOLA\nANGORA\nANGRIER\nANGRIEST\nANGRILY\nANGRY\nANGST\nANGSTROM\nANGUISH\nANGUISHED\nANGULAR\nANGULARLY\nANGUS\nANHEUSER\nANHYDROUS\nANHYDROUSLY\nANILINE\nANIMAL\nANIMALS\nANIMATE\nANIMATED\nANIMATEDLY\nANIMATELY\nANIMATENESS\nANIMATES\nANIMATING\nANIMATION\nANIMATIONS\nANIMATOR\nANIMATORS\nANIMISM\nANIMIZED\nANIMOSITY\nANION\nANIONIC\nANIONS\nANISE\nANISEIKONIC\nANISOTROPIC\nANISOTROPY\nANITA\nANKARA\nANKLE\nANKLES\nANN\nANNA\nANNAL\nANNALIST\nANNALISTIC\nANNALS\nANNAPOLIS\nANNE\nANNETTE\nANNEX\nANNEXATION\nANNEXED\nANNEXES\nANNEXING\nANNIE\nANNIHILATE\nANNIHILATED\nANNIHILATES\nANNIHILATING\nANNIHILATION\nANNIVERSARIES\nANNIVERSARY\nANNOTATE\nANNOTATED\nANNOTATES\nANNOTATING\nANNOTATION\nANNOTATIONS\nANNOUNCE\nANNOUNCED\nANNOUNCEMENT\nANNOUNCEMENTS\nANNOUNCER\nANNOUNCERS\nANNOUNCES\nANNOUNCING\nANNOY\nANNOYANCE\nANNOYANCES\nANNOYED\nANNOYER\nANNOYERS\nANNOYING\nANNOYINGLY\nANNOYS\nANNUAL\nANNUALLY\nANNUALS\nANNUITY\nANNUL\nANNULAR\nANNULI\nANNULLED\nANNULLING\nANNULMENT\nANNULMENTS\nANNULS\nANNULUS\nANNUM\nANNUNCIATE\nANNUNCIATED\nANNUNCIATES\nANNUNCIATING\nANNUNCIATOR\nANNUNCIATORS\nANODE\nANODES\nANODIZE\nANODIZED\nANODIZES\nANOINT\nANOINTED\nANOINTING\nANOINTS\nANOMALIES\nANOMALOUS\nANOMALOUSLY\nANOMALY\nANOMIC\nANOMIE\nANON\nANONYMITY\nANONYMOUS\nANONYMOUSLY\nANOREXIA\nANOTHER\nANSELM\nANSELMO\nANSI\nANSWER\nANSWERABLE\nANSWERED\nANSWERER\nANSWERERS\nANSWERING\nANSWERS\nANT\nANTAEUS\nANTAGONISM\nANTAGONISMS\nANTAGONIST\nANTAGONISTIC\nANTAGONISTICALLY\nANTAGONISTS\nANTAGONIZE\nANTAGONIZED\nANTAGONIZES\nANTAGONIZING\nANTARCTIC\nANTARCTICA\nANTARES\nANTE\nANTEATER\nANTEATERS\nANTECEDENT\nANTECEDENTS\nANTEDATE\nANTELOPE\nANTELOPES\nANTENNA\nANTENNAE\nANTENNAS\nANTERIOR\nANTHEM\nANTHEMS\nANTHER\nANTHOLOGIES\nANTHOLOGY\nANTHONY\nANTHRACITE\nANTHROPOLOGICAL\nANTHROPOLOGICALLY\nANTHROPOLOGIST\nANTHROPOLOGISTS\nANTHROPOLOGY\nANTHROPOMORPHIC\nANTHROPOMORPHICALLY\nANTI\nANTIBACTERIAL\nANTIBIOTIC\nANTIBIOTICS\nANTIBODIES\nANTIBODY\nANTIC\nANTICIPATE\nANTICIPATED\nANTICIPATES\nANTICIPATING\nANTICIPATION\nANTICIPATIONS\nANTICIPATORY\nANTICOAGULATION\nANTICOMPETITIVE\nANTICS\nANTIDISESTABLISHMENTARIANISM\nANTIDOTE\nANTIDOTES\nANTIETAM\nANTIFORMANT\nANTIFUNDAMENTALIST\nANTIGEN\nANTIGENS\nANTIGONE\nANTIHISTORICAL\nANTILLES\nANTIMICROBIAL\nANTIMONY\nANTINOMIAN\nANTINOMY\nANTIOCH\nANTIPATHY\nANTIPHONAL\nANTIPODE\nANTIPODES\nANTIQUARIAN\nANTIQUARIANS\nANTIQUATE\nANTIQUATED\nANTIQUE\nANTIQUES\nANTIQUITIES\nANTIQUITY\nANTIREDEPOSITION\nANTIRESONANCE\nANTIRESONATOR\nANTISEMITIC\nANTISEMITISM\nANTISEPTIC\nANTISERA\nANTISERUM\nANTISLAVERY\nANTISOCIAL\nANTISUBMARINE\nANTISYMMETRIC\nANTISYMMETRY\nANTITHESIS\nANTITHETICAL\nANTITHYROID\nANTITOXIN\nANTITOXINS\nANTITRUST\nANTLER\nANTLERED\nANTOINE\nANTOINETTE\nANTON\nANTONIO\nANTONOVICS\nANTONY\nANTS\nANTWERP\nANUS\nANVIL\nANVILS\nANXIETIES\nANXIETY\nANXIOUS\nANXIOUSLY\nANY\nANYBODY\nANYHOW\nANYMORE\nANYONE\nANYPLACE\nANYTHING\nANYTIME\nANYWAY\nANYWHERE\nAORTA\nAPACE\nAPACHES\nAPALACHICOLA\nAPART\nAPARTMENT\nAPARTMENTS\nAPATHETIC\nAPATHY\nAPE\nAPED\nAPERIODIC\nAPERIODICITY\nAPERTURE\nAPES\nAPETALOUS\nAPEX\nAPHASIA\nAPHASIC\nAPHELION\nAPHID\nAPHIDS\nAPHONIC\nAPHORISM\nAPHORISMS\nAPHRODITE\nAPIARIES\nAPIARY\nAPICAL\nAPIECE\nAPING\nAPISH\nAPLENTY\nAPLOMB\nAPOCALYPSE\nAPOCALYPTIC\nAPOCRYPHA\nAPOCRYPHAL\nAPOGEE\nAPOGEES\nAPOLLINAIRE\nAPOLLO\nAPOLLONIAN\nAPOLOGETIC\nAPOLOGETICALLY\nAPOLOGIA\nAPOLOGIES\nAPOLOGIST\nAPOLOGISTS\nAPOLOGIZE\nAPOLOGIZED\nAPOLOGIZES\nAPOLOGIZING\nAPOLOGY\nAPOSTATE\nAPOSTLE\nAPOSTLES\nAPOSTOLIC\nAPOSTROPHE\nAPOSTROPHES\nAPOTHECARY\nAPOTHEGM\nAPOTHEOSES\nAPOTHEOSIS\nAPPALACHIA\nAPPALACHIAN\nAPPALACHIANS\nAPPALL\nAPPALLED\nAPPALLING\nAPPALLINGLY\nAPPALOOSAS\nAPPANAGE\nAPPARATUS\nAPPAREL\nAPPARELED\nAPPARENT\nAPPARENTLY\nAPPARITION\nAPPARITIONS\nAPPEAL\nAPPEALED\nAPPEALER\nAPPEALERS\nAPPEALING\nAPPEALINGLY\nAPPEALS\nAPPEAR\nAPPEARANCE\nAPPEARANCES\nAPPEARED\nAPPEARER\nAPPEARERS\nAPPEARING\nAPPEARS\nAPPEASE\nAPPEASED\nAPPEASEMENT\nAPPEASES\nAPPEASING\nAPPELLANT\nAPPELLANTS\nAPPELLATE\nAPPELLATION\nAPPEND\nAPPENDAGE\nAPPENDAGES\nAPPENDED\nAPPENDER\nAPPENDERS\nAPPENDICES\nAPPENDICITIS\nAPPENDING\nAPPENDIX\nAPPENDIXES\nAPPENDS\nAPPERTAIN\nAPPERTAINS\nAPPETITE\nAPPETITES\nAPPETIZER\nAPPETIZING\nAPPIA\nAPPIAN\nAPPLAUD\nAPPLAUDED\nAPPLAUDING\nAPPLAUDS\nAPPLAUSE\nAPPLE\nAPPLEBY\nAPPLEJACK\nAPPLES\nAPPLETON\nAPPLIANCE\nAPPLIANCES\nAPPLICABILITY\nAPPLICABLE\nAPPLICANT\nAPPLICANTS\nAPPLICATION\nAPPLICATIONS\nAPPLICATIVE\nAPPLICATIVELY\nAPPLICATOR\nAPPLICATORS\nAPPLIED\nAPPLIER\nAPPLIERS\nAPPLIES\nAPPLIQUE\nAPPLY\nAPPLYING\nAPPOINT\nAPPOINTED\nAPPOINTEE\nAPPOINTEES\nAPPOINTER\nAPPOINTERS\nAPPOINTING\nAPPOINTIVE\nAPPOINTMENT\nAPPOINTMENTS\nAPPOINTS\nAPPOMATTOX\nAPPORTION\nAPPORTIONED\nAPPORTIONING\nAPPORTIONMENT\nAPPORTIONMENTS\nAPPORTIONS\nAPPOSITE\nAPPRAISAL\nAPPRAISALS\nAPPRAISE\nAPPRAISED\nAPPRAISER\nAPPRAISERS\nAPPRAISES\nAPPRAISING\nAPPRAISINGLY\nAPPRECIABLE\nAPPRECIABLY\nAPPRECIATE\nAPPRECIATED\nAPPRECIATES\nAPPRECIATING\nAPPRECIATION\nAPPRECIATIONS\nAPPRECIATIVE\nAPPRECIATIVELY\nAPPREHEND\nAPPREHENDED\nAPPREHENSIBLE\nAPPREHENSION\nAPPREHENSIONS\nAPPREHENSIVE\nAPPREHENSIVELY\nAPPREHENSIVENESS\nAPPRENTICE\nAPPRENTICED\nAPPRENTICES\nAPPRENTICESHIP\nAPPRISE\nAPPRISED\nAPPRISES\nAPPRISING\nAPPROACH\nAPPROACHABILITY\nAPPROACHABLE\nAPPROACHED\nAPPROACHER\nAPPROACHERS\nAPPROACHES\nAPPROACHING\nAPPROBATE\nAPPROBATION\nAPPROPRIATE\nAPPROPRIATED\nAPPROPRIATELY\nAPPROPRIATENESS\nAPPROPRIATES\nAPPROPRIATING\nAPPROPRIATION\nAPPROPRIATIONS\nAPPROPRIATOR\nAPPROPRIATORS\nAPPROVAL\nAPPROVALS\nAPPROVE\nAPPROVED\nAPPROVER\nAPPROVERS\nAPPROVES\nAPPROVING\nAPPROVINGLY\nAPPROXIMATE\nAPPROXIMATED\nAPPROXIMATELY\nAPPROXIMATES\nAPPROXIMATING\nAPPROXIMATION\nAPPROXIMATIONS\nAPPURTENANCE\nAPPURTENANCES\nAPRICOT\nAPRICOTS\nAPRIL\nAPRILS\nAPRON\nAPRONS\nAPROPOS\nAPSE\nAPSIS\nAPT\nAPTITUDE\nAPTITUDES\nAPTLY\nAPTNESS\nAQUA\nAQUARIA\nAQUARIUM\nAQUARIUS\nAQUATIC\nAQUEDUCT\nAQUEDUCTS\nAQUEOUS\nAQUIFER\nAQUIFERS\nAQUILA\nAQUINAS\nARAB\nARABESQUE\nARABIA\nARABIAN\nARABIANIZE\nARABIANIZES\nARABIANS\nARABIC\nARABICIZE\nARABICIZES\nARABLE\nARABS\nARABY\nARACHNE\nARACHNID\nARACHNIDS\nARAMCO\nARAPAHO\nARBITER\nARBITERS\nARBITRARILY\nARBITRARINESS\nARBITRARY\nARBITRATE\nARBITRATED\nARBITRATES\nARBITRATING\nARBITRATION\nARBITRATOR\nARBITRATORS\nARBOR\nARBOREAL\nARBORS\nARC\nARCADE\nARCADED\nARCADES\nARCADIA\nARCADIAN\nARCANE\nARCED\nARCH\nARCHAIC\nARCHAICALLY\nARCHAICNESS\nARCHAISM\nARCHAIZE\nARCHANGEL\nARCHANGELS\nARCHBISHOP\nARCHDIOCESE\nARCHDIOCESES\nARCHED\nARCHENEMY\nARCHEOLOGICAL\nARCHEOLOGIST\nARCHEOLOGY\nARCHER\nARCHERS\nARCHERY\nARCHES\nARCHETYPE\nARCHFOOL\nARCHIBALD\nARCHIE\nARCHIMEDES\nARCHING\nARCHIPELAGO\nARCHIPELAGOES\nARCHITECT\nARCHITECTONIC\nARCHITECTS\nARCHITECTURAL\nARCHITECTURALLY\nARCHITECTURE\nARCHITECTURES\nARCHIVAL\nARCHIVE\nARCHIVED\nARCHIVER\nARCHIVERS\nARCHIVES\nARCHIVING\nARCHIVIST\nARCHLY\nARCING\nARCLIKE\nARCO\nARCS\nARCSINE\nARCTANGENT\nARCTIC\nARCTURUS\nARDEN\nARDENT\nARDENTLY\nARDOR\nARDUOUS\nARDUOUSLY\nARDUOUSNESS\nARE\nAREA\nAREAS\nARENA\nARENAS\nAREQUIPA\nARES\nARGENTINA\nARGENTINIAN\nARGIVE\nARGO\nARGON\nARGONAUT\nARGONAUTS\nARGONNE\nARGOS\nARGOT\nARGUABLE\nARGUABLY\nARGUE\nARGUED\nARGUER\nARGUERS\nARGUES\nARGUING\nARGUMENT\nARGUMENTATION\nARGUMENTATIVE\nARGUMENTS\nARGUS\nARIADNE\nARIANISM\nARIANIST\nARIANISTS\nARID\nARIDITY\nARIES\nARIGHT\nARISE\nARISEN\nARISER\nARISES\nARISING\nARISINGS\nARISTOCRACY\nARISTOCRAT\nARISTOCRATIC\nARISTOCRATICALLY\nARISTOCRATS\nARISTOTELIAN\nARISTOTLE\nARITHMETIC\nARITHMETICAL\nARITHMETICALLY\nARITHMETICS\nARITHMETIZE\nARITHMETIZED\nARITHMETIZES\nARIZONA\nARK\nARKANSAN\nARKANSAS\nARLEN\nARLENE\nARLINGTON\nARM\nARMADA\nARMADILLO\nARMADILLOS\nARMAGEDDON\nARMAGNAC\nARMAMENT\nARMAMENTS\nARMATA\nARMCHAIR\nARMCHAIRS\nARMCO\nARMED\nARMENIA\nARMENIAN\nARMER\nARMERS\nARMFUL\nARMHOLE\nARMIES\nARMING\nARMISTICE\nARMLOAD\nARMONK\nARMOR\nARMORED\nARMORER\nARMORY\nARMOUR\nARMPIT\nARMPITS\nARMS\nARMSTRONG\nARMY\nARNOLD\nAROMA\nAROMAS\nAROMATIC\nAROSE\nAROUND\nAROUSAL\nAROUSE\nAROUSED\nAROUSES\nAROUSING\nARPA\nARPANET\nARPANET\nARPEGGIO\nARPEGGIOS\nARRACK\nARRAGON\nARRAIGN\nARRAIGNED\nARRAIGNING\nARRAIGNMENT\nARRAIGNMENTS\nARRAIGNS\nARRANGE\nARRANGED\nARRANGEMENT\nARRANGEMENTS\nARRANGER\nARRANGERS\nARRANGES\nARRANGING\nARRANT\nARRAY\nARRAYED\nARRAYS\nARREARS\nARREST\nARRESTED\nARRESTER\nARRESTERS\nARRESTING\nARRESTINGLY\nARRESTOR\nARRESTORS\nARRESTS\nARRHENIUS\nARRIVAL\nARRIVALS\nARRIVE\nARRIVED\nARRIVES\nARRIVING\nARROGANCE\nARROGANT\nARROGANTLY\nARROGATE\nARROGATED\nARROGATES\nARROGATING\nARROGATION\nARROW\nARROWED\nARROWHEAD\nARROWHEADS\nARROWS\nARROYO\nARROYOS\nARSENAL\nARSENALS\nARSENIC\nARSINE\nARSON\nART\nARTEMIA\nARTEMIS\nARTERIAL\nARTERIES\nARTERIOLAR\nARTERIOLE\nARTERIOLES\nARTERIOSCLEROSIS\nARTERY\nARTFUL\nARTFULLY\nARTFULNESS\nARTHRITIS\nARTHROPOD\nARTHROPODS\nARTHUR\nARTICHOKE\nARTICHOKES\nARTICLE\nARTICLES\nARTICULATE\nARTICULATED\nARTICULATELY\nARTICULATENESS\nARTICULATES\nARTICULATING\nARTICULATION\nARTICULATIONS\nARTICULATOR\nARTICULATORS\nARTICULATORY\nARTIE\nARTIFACT\nARTIFACTS\nARTIFICE\nARTIFICER\nARTIFICES\nARTIFICIAL\nARTIFICIALITIES\nARTIFICIALITY\nARTIFICIALLY\nARTIFICIALNESS\nARTILLERIST\nARTILLERY\nARTISAN\nARTISANS\nARTIST\nARTISTIC\nARTISTICALLY\nARTISTRY\nARTISTS\nARTLESS\nARTS\nARTURO\nARTWORK\nARUBA\nARYAN\nARYANS\nASBESTOS\nASCEND\nASCENDANCY\nASCENDANT\nASCENDED\nASCENDENCY\nASCENDENT\nASCENDER\nASCENDERS\nASCENDING\nASCENDS\nASCENSION\nASCENSIONS\nASCENT\nASCERTAIN\nASCERTAINABLE\nASCERTAINED\nASCERTAINING\nASCERTAINS\nASCETIC\nASCETICISM\nASCETICS\nASCII\nASCOT\nASCRIBABLE\nASCRIBE\nASCRIBED\nASCRIBES\nASCRIBING\nASCRIPTION\nASEPTIC\nASH\nASHAMED\nASHAMEDLY\nASHEN\nASHER\nASHES\nASHEVILLE\nASHLAND\nASHLEY\nASHMAN\nASHMOLEAN\nASHORE\nASHTRAY\nASHTRAYS\nASIA\nASIAN\nASIANS\nASIATIC\nASIATICIZATION\nASIATICIZATIONS\nASIATICIZE\nASIATICIZES\nASIATICS\nASIDE\nASILOMAR\nASININE\nASK\nASKANCE\nASKED\nASKER\nASKERS\nASKEW\nASKING\nASKS\nASLEEP\nASOCIAL\nASP\nASPARAGUS\nASPECT\nASPECTS\nASPEN\nASPERSION\nASPERSIONS\nASPHALT\nASPHYXIA\nASPIC\nASPIRANT\nASPIRANTS\nASPIRATE\nASPIRATED\nASPIRATES\nASPIRATING\nASPIRATION\nASPIRATIONS\nASPIRATOR\nASPIRATORS\nASPIRE\nASPIRED\nASPIRES\nASPIRIN\nASPIRING\nASPIRINS\nASS\nASSAIL\nASSAILANT\nASSAILANTS\nASSAILED\nASSAILING\nASSAILS\nASSAM\nASSASSIN\nASSASSINATE\nASSASSINATED\nASSASSINATES\nASSASSINATING\nASSASSINATION\nASSASSINATIONS\nASSASSINS\nASSAULT\nASSAULTED\nASSAULTING\nASSAULTS\nASSAY\nASSAYED\nASSAYING\nASSEMBLAGE\nASSEMBLAGES\nASSEMBLE\nASSEMBLED\nASSEMBLER\nASSEMBLERS\nASSEMBLES\nASSEMBLIES\nASSEMBLING\nASSEMBLY\nASSENT\nASSENTED\nASSENTER\nASSENTING\nASSENTS\nASSERT\nASSERTED\nASSERTER\nASSERTERS\nASSERTING\nASSERTION\nASSERTIONS\nASSERTIVE\nASSERTIVELY\nASSERTIVENESS\nASSERTS\nASSES\nASSESS\nASSESSED\nASSESSES\nASSESSING\nASSESSMENT\nASSESSMENTS\nASSESSOR\nASSESSORS\nASSET\nASSETS\nASSIDUITY\nASSIDUOUS\nASSIDUOUSLY\nASSIGN\nASSIGNABLE\nASSIGNED\nASSIGNEE\nASSIGNEES\nASSIGNER\nASSIGNERS\nASSIGNING\nASSIGNMENT\nASSIGNMENTS\nASSIGNS\nASSIMILATE\nASSIMILATED\nASSIMILATES\nASSIMILATING\nASSIMILATION\nASSIMILATIONS\nASSIST\nASSISTANCE\nASSISTANCES\nASSISTANT\nASSISTANTS\nASSISTANTSHIP\nASSISTANTSHIPS\nASSISTED\nASSISTING\nASSISTS\nASSOCIATE\nASSOCIATED\nASSOCIATES\nASSOCIATING\nASSOCIATION\nASSOCIATIONAL\nASSOCIATIONS\nASSOCIATIVE\nASSOCIATIVELY\nASSOCIATIVITY\nASSOCIATOR\nASSOCIATORS\nASSONANCE\nASSONANT\nASSORT\nASSORTED\nASSORTMENT\nASSORTMENTS\nASSORTS\nASSUAGE\nASSUAGED\nASSUAGES\nASSUME\nASSUMED\nASSUMES\nASSUMING\nASSUMPTION\nASSUMPTIONS\nASSURANCE\nASSURANCES\nASSURE\nASSURED\nASSUREDLY\nASSURER\nASSURERS\nASSURES\nASSURING\nASSURINGLY\nASSYRIA\nASSYRIAN\nASSYRIANIZE\nASSYRIANIZES\nASSYRIOLOGY\nASTAIRE\nASTAIRES\nASTARTE\nASTATINE\nASTER\nASTERISK\nASTERISKS\nASTEROID\nASTEROIDAL\nASTEROIDS\nASTERS\nASTHMA\nASTON\nASTONISH\nASTONISHED\nASTONISHES\nASTONISHING\nASTONISHINGLY\nASTONISHMENT\nASTOR\nASTORIA\nASTOUND\nASTOUNDED\nASTOUNDING\nASTOUNDS\nASTRAL\nASTRAY\nASTRIDE\nASTRINGENCY\nASTRINGENT\nASTROLOGY\nASTRONAUT\nASTRONAUTICS\nASTRONAUTS\nASTRONOMER\nASTRONOMERS\nASTRONOMICAL\nASTRONOMICALLY\nASTRONOMY\nASTROPHYSICAL\nASTROPHYSICS\nASTUTE\nASTUTELY\nASTUTENESS\nASUNCION\nASUNDER\nASYLUM\nASYMMETRIC\nASYMMETRICALLY\nASYMMETRY\nASYMPTOMATICALLY\nASYMPTOTE\nASYMPTOTES\nASYMPTOTIC\nASYMPTOTICALLY\nASYNCHRONISM\nASYNCHRONOUS\nASYNCHRONOUSLY\nASYNCHRONY\nATALANTA\nATARI\nATAVISTIC\nATCHISON\nATE\nATEMPORAL\nATHABASCAN\nATHEISM\nATHEIST\nATHEISTIC\nATHEISTS\nATHENA\nATHENIAN\nATHENIANS\nATHENS\nATHEROSCLEROSIS\nATHLETE\nATHLETES\nATHLETIC\nATHLETICISM\nATHLETICS\nATKINS\nATKINSON\nATLANTA\nATLANTIC\nATLANTICA\nATLANTIS\nATLAS\nATMOSPHERE\nATMOSPHERES\nATMOSPHERIC\nATOLL\nATOLLS\nATOM\nATOMIC\nATOMICALLY\nATOMICS\nATOMIZATION\nATOMIZE\nATOMIZED\nATOMIZES\nATOMIZING\nATOMS\nATONAL\nATONALLY\nATONE\nATONED\nATONEMENT\nATONES\nATOP\nATREUS\nATROCIOUS\nATROCIOUSLY\nATROCITIES\nATROCITY\nATROPHIC\nATROPHIED\nATROPHIES\nATROPHY\nATROPHYING\nATROPOS\nATTACH\nATTACHE\nATTACHED\nATTACHER\nATTACHERS\nATTACHES\nATTACHING\nATTACHMENT\nATTACHMENTS\nATTACK\nATTACKABLE\nATTACKED\nATTACKER\nATTACKERS\nATTACKING\nATTACKS\nATTAIN\nATTAINABLE\nATTAINABLY\nATTAINED\nATTAINER\nATTAINERS\nATTAINING\nATTAINMENT\nATTAINMENTS\nATTAINS\nATTEMPT\nATTEMPTED\nATTEMPTER\nATTEMPTERS\nATTEMPTING\nATTEMPTS\nATTEND\nATTENDANCE\nATTENDANCES\nATTENDANT\nATTENDANTS\nATTENDED\nATTENDEE\nATTENDEES\nATTENDER\nATTENDERS\nATTENDING\nATTENDS\nATTENTION\nATTENTIONAL\nATTENTIONALITY\nATTENTIONS\nATTENTIVE\nATTENTIVELY\nATTENTIVENESS\nATTENUATE\nATTENUATED\nATTENUATES\nATTENUATING\nATTENUATION\nATTENUATOR\nATTENUATORS\nATTEST\nATTESTED\nATTESTING\nATTESTS\nATTIC\nATTICA\nATTICS\nATTIRE\nATTIRED\nATTIRES\nATTIRING\nATTITUDE\nATTITUDES\nATTITUDINAL\nATTLEE\nATTORNEY\nATTORNEYS\nATTRACT\nATTRACTED\nATTRACTING\nATTRACTION\nATTRACTIONS\nATTRACTIVE\nATTRACTIVELY\nATTRACTIVENESS\nATTRACTOR\nATTRACTORS\nATTRACTS\nATTRIBUTABLE\nATTRIBUTE\nATTRIBUTED\nATTRIBUTES\nATTRIBUTING\nATTRIBUTION\nATTRIBUTIONS\nATTRIBUTIVE\nATTRIBUTIVELY\nATTRITION\nATTUNE\nATTUNED\nATTUNES\nATTUNING\nATWATER\nATWOOD\nATYPICAL\nATYPICALLY\nAUBERGE\nAUBREY\nAUBURN\nAUCKLAND\nAUCTION\nAUCTIONEER\nAUCTIONEERS\nAUDACIOUS\nAUDACIOUSLY\nAUDACIOUSNESS\nAUDACITY\nAUDIBLE\nAUDIBLY\nAUDIENCE\nAUDIENCES\nAUDIO\nAUDIOGRAM\nAUDIOGRAMS\nAUDIOLOGICAL\nAUDIOLOGIST\nAUDIOLOGISTS\nAUDIOLOGY\nAUDIOMETER\nAUDIOMETERS\nAUDIOMETRIC\nAUDIOMETRY\nAUDIT\nAUDITED\nAUDITING\nAUDITION\nAUDITIONED\nAUDITIONING\nAUDITIONS\nAUDITOR\nAUDITORIUM\nAUDITORS\nAUDITORY\nAUDITS\nAUDREY\nAUDUBON\nAUERBACH\nAUGEAN\nAUGER\nAUGERS\nAUGHT\nAUGMENT\nAUGMENTATION\nAUGMENTED\nAUGMENTING\nAUGMENTS\nAUGUR\nAUGURS\nAUGUST\nAUGUSTA\nAUGUSTAN\nAUGUSTINE\nAUGUSTLY\nAUGUSTNESS\nAUGUSTUS\nAUNT\nAUNTS\nAURA\nAURAL\nAURALLY\nAURAS\nAURELIUS\nAUREOLE\nAUREOMYCIN\nAURIGA\nAURORA\nAUSCHWITZ\nAUSCULTATE\nAUSCULTATED\nAUSCULTATES\nAUSCULTATING\nAUSCULTATION\nAUSCULTATIONS\nAUSPICE\nAUSPICES\nAUSPICIOUS\nAUSPICIOUSLY\nAUSTERE\nAUSTERELY\nAUSTERITY\nAUSTIN\nAUSTRALIA\nAUSTRALIAN\nAUSTRALIANIZE\nAUSTRALIANIZES\nAUSTRALIS\nAUSTRIA\nAUSTRIAN\nAUSTRIANIZE\nAUSTRIANIZES\nAUTHENTIC\nAUTHENTICALLY\nAUTHENTICATE\nAUTHENTICATED\nAUTHENTICATES\nAUTHENTICATING\nAUTHENTICATION\nAUTHENTICATIONS\nAUTHENTICATOR\nAUTHENTICATORS\nAUTHENTICITY\nAUTHOR\nAUTHORED\nAUTHORING\nAUTHORITARIAN\nAUTHORITARIANISM\nAUTHORITATIVE\nAUTHORITATIVELY\nAUTHORITIES\nAUTHORITY\nAUTHORIZATION\nAUTHORIZATIONS\nAUTHORIZE\nAUTHORIZED\nAUTHORIZER\nAUTHORIZERS\nAUTHORIZES\nAUTHORIZING\nAUTHORS\nAUTHORSHIP\nAUTISM\nAUTISTIC\nAUTO\nAUTOBIOGRAPHIC\nAUTOBIOGRAPHICAL\nAUTOBIOGRAPHIES\nAUTOBIOGRAPHY\nAUTOCOLLIMATOR\nAUTOCORRELATE\nAUTOCORRELATION\nAUTOCRACIES\nAUTOCRACY\nAUTOCRAT\nAUTOCRATIC\nAUTOCRATICALLY\nAUTOCRATS\nAUTODECREMENT\nAUTODECREMENTED\nAUTODECREMENTS\nAUTODIALER\nAUTOFLUORESCENCE\nAUTOGRAPH\nAUTOGRAPHED\nAUTOGRAPHING\nAUTOGRAPHS\nAUTOINCREMENT\nAUTOINCREMENTED\nAUTOINCREMENTS\nAUTOINDEX\nAUTOINDEXING\nAUTOMATA\nAUTOMATE\nAUTOMATED\nAUTOMATES\nAUTOMATIC\nAUTOMATICALLY\nAUTOMATING\nAUTOMATION\nAUTOMATON\nAUTOMOBILE\nAUTOMOBILES\nAUTOMOTIVE\nAUTONAVIGATOR\nAUTONAVIGATORS\nAUTONOMIC\nAUTONOMOUS\nAUTONOMOUSLY\nAUTONOMY\nAUTOPILOT\nAUTOPILOTS\nAUTOPSIED\nAUTOPSIES\nAUTOPSY\nAUTOREGRESSIVE\nAUTOS\nAUTOSUGGESTIBILITY\nAUTOTRANSFORMER\nAUTUMN\nAUTUMNAL\nAUTUMNS\nAUXILIARIES\nAUXILIARY\nAVAIL\nAVAILABILITIES\nAVAILABILITY\nAVAILABLE\nAVAILABLY\nAVAILED\nAVAILER\nAVAILERS\nAVAILING\nAVAILS\nAVALANCHE\nAVALANCHED\nAVALANCHES\nAVALANCHING\nAVANT\nAVARICE\nAVARICIOUS\nAVARICIOUSLY\nAVENGE\nAVENGED\nAVENGER\nAVENGES\nAVENGING\nAVENTINE\nAVENTINO\nAVENUE\nAVENUES\nAVER\nAVERAGE\nAVERAGED\nAVERAGES\nAVERAGING\nAVERNUS\nAVERRED\nAVERRER\nAVERRING\nAVERS\nAVERSE\nAVERSION\nAVERSIONS\nAVERT\nAVERTED\nAVERTING\nAVERTS\nAVERY\nAVESTA\nAVIAN\nAVIARIES\nAVIARY\nAVIATION\nAVIATOR\nAVIATORS\nAVID\nAVIDITY\nAVIDLY\nAVIGNON\nAVIONIC\nAVIONICS\nAVIS\nAVIV\nAVOCADO\nAVOCADOS\nAVOCATION\nAVOCATIONS\nAVOGADRO\nAVOID\nAVOIDABLE\nAVOIDABLY\nAVOIDANCE\nAVOIDED\nAVOIDER\nAVOIDERS\nAVOIDING\nAVOIDS\nAVON\nAVOUCH\nAVOW\nAVOWAL\nAVOWED\nAVOWS\nAWAIT\nAWAITED\nAWAITING\nAWAITS\nAWAKE\nAWAKEN\nAWAKENED\nAWAKENING\nAWAKENS\nAWAKES\nAWAKING\nAWARD\nAWARDED\nAWARDER\nAWARDERS\nAWARDING\nAWARDS\nAWARE\nAWARENESS\nAWASH\nAWAY\nAWE\nAWED\nAWESOME\nAWFUL\nAWFULLY\nAWFULNESS\nAWHILE\nAWKWARD\nAWKWARDLY\nAWKWARDNESS\nAWL\nAWLS\nAWNING\nAWNINGS\nAWOKE\nAWRY\nAXED\nAXEL\nAXER\nAXERS\nAXES\nAXIAL\nAXIALLY\nAXING\nAXIOLOGICAL\nAXIOM\nAXIOMATIC\nAXIOMATICALLY\nAXIOMATIZATION\nAXIOMATIZATIONS\nAXIOMATIZE\nAXIOMATIZED\nAXIOMATIZES\nAXIOMATIZING\nAXIOMS\nAXIS\nAXLE\nAXLES\nAXOLOTL\nAXOLOTLS\nAXON\nAXONS\nAYE\nAYERS\nAYES\nAYLESBURY\nAZALEA\nAZALEAS\nAZERBAIJAN\nAZIMUTH\nAZIMUTHS\nAZORES\nAZTEC\nAZTECAN\nAZURE\nBABBAGE\nBABBLE\nBABBLED\nBABBLES\nBABBLING\nBABCOCK\nBABE\nBABEL\nBABELIZE\nBABELIZES\nBABES\nBABIED\nBABIES\nBABKA\nBABOON\nBABOONS\nBABUL\nBABY\nBABYHOOD\nBABYING\nBABYISH\nBABYLON\nBABYLONIAN\nBABYLONIANS\nBABYLONIZE\nBABYLONIZES\nBABYSIT\nBABYSITTING\nBACCALAUREATE\nBACCHUS\nBACH\nBACHELOR\nBACHELORS\nBACILLI\nBACILLUS\nBACK\nBACKACHE\nBACKACHES\nBACKARROW\nBACKBEND\nBACKBENDS\nBACKBOARD\nBACKBONE\nBACKBONES\nBACKDROP\nBACKDROPS\nBACKED\nBACKER\nBACKERS\nBACKFILL\nBACKFIRING\nBACKGROUND\nBACKGROUNDS\nBACKHAND\nBACKING\nBACKLASH\nBACKLOG\nBACKLOGGED\nBACKLOGS\nBACKORDER\nBACKPACK\nBACKPACKS\nBACKPLANE\nBACKPLANES\nBACKPLATE\nBACKS\nBACKSCATTER\nBACKSCATTERED\nBACKSCATTERING\nBACKSCATTERS\nBACKSIDE\nBACKSLASH\nBACKSLASHES\nBACKSPACE\nBACKSPACED\nBACKSPACES\nBACKSPACING\nBACKSTAGE\nBACKSTAIRS\nBACKSTITCH\nBACKSTITCHED\nBACKSTITCHES\nBACKSTITCHING\nBACKSTOP\nBACKTRACK\nBACKTRACKED\nBACKTRACKER\nBACKTRACKERS\nBACKTRACKING\nBACKTRACKS\nBACKUP\nBACKUPS\nBACKUS\nBACKWARD\nBACKWARDNESS\nBACKWARDS\nBACKWATER\nBACKWATERS\nBACKWOODS\nBACKYARD\nBACKYARDS\nBACON\nBACTERIA\nBACTERIAL\nBACTERIUM\nBAD\nBADE\nBADEN\nBADGE\nBADGER\nBADGERED\nBADGERING\nBADGERS\nBADGES\nBADLANDS\nBADLY\nBADMINTON\nBADNESS\nBAFFIN\nBAFFLE\nBAFFLED\nBAFFLER\nBAFFLERS\nBAFFLING\nBAG\nBAGATELLE\nBAGATELLES\nBAGEL\nBAGELS\nBAGGAGE\nBAGGED\nBAGGER\nBAGGERS\nBAGGING\nBAGGY\nBAGHDAD\nBAGLEY\nBAGPIPE\nBAGPIPES\nBAGRODIA\nBAGRODIAS\nBAGS\nBAH\nBAHAMA\nBAHAMAS\nBAHREIN\nBAIL\nBAILEY\nBAILEYS\nBAILIFF\nBAILIFFS\nBAILING\nBAIRD\nBAIRDI\nBAIRN\nBAIT\nBAITED\nBAITER\nBAITING\nBAITS\nBAJA\nBAKE\nBAKED\nBAKELITE\nBAKER\nBAKERIES\nBAKERS\nBAKERSFIELD\nBAKERY\nBAKES\nBAKHTIARI\nBAKING\nBAKLAVA\nBAKU\nBALALAIKA\nBALALAIKAS\nBALANCE\nBALANCED\nBALANCER\nBALANCERS\nBALANCES\nBALANCING\nBALBOA\nBALCONIES\nBALCONY\nBALD\nBALDING\nBALDLY\nBALDNESS\nBALDWIN\nBALE\nBALEFUL\nBALER\nBALES\nBALFOUR\nBALI\nBALINESE\nBALK\nBALKAN\nBALKANIZATION\nBALKANIZATIONS\nBALKANIZE\nBALKANIZED\nBALKANIZES\nBALKANIZING\nBALKANS\nBALKED\nBALKINESS\nBALKING\nBALKS\nBALKY\nBALL\nBALLAD\nBALLADS\nBALLARD\nBALLARDS\nBALLAST\nBALLASTS\nBALLED\nBALLER\nBALLERINA\nBALLERINAS\nBALLERS\nBALLET\nBALLETS\nBALLGOWN\nBALLING\nBALLISTIC\nBALLISTICS\nBALLOON\nBALLOONED\nBALLOONER\nBALLOONERS\nBALLOONING\nBALLOONS\nBALLOT\nBALLOTS\nBALLPARK\nBALLPARKS\nBALLPLAYER\nBALLPLAYERS\nBALLROOM\nBALLROOMS\nBALLS\nBALLYHOO\nBALM\nBALMS\nBALMY\nBALSA\nBALSAM\nBALTIC\nBALTIMORE\nBALTIMOREAN\nBALUSTRADE\nBALUSTRADES\nBALZAC\nBAMAKO\nBAMBERGER\nBAMBI\nBAMBOO\nBAN\nBANACH\nBANAL\nBANALLY\nBANANA\nBANANAS\nBANBURY\nBANCROFT\nBAND\nBANDAGE\nBANDAGED\nBANDAGES\nBANDAGING\nBANDED\nBANDIED\nBANDIES\nBANDING\nBANDIT\nBANDITS\nBANDPASS\nBANDS\nBANDSTAND\nBANDSTANDS\nBANDWAGON\nBANDWAGONS\nBANDWIDTH\nBANDWIDTHS\nBANDY\nBANDYING\nBANE\nBANEFUL\nBANG\nBANGED\nBANGING\nBANGLADESH\nBANGLE\nBANGLES\nBANGOR\nBANGS\nBANGUI\nBANISH\nBANISHED\nBANISHES\nBANISHING\nBANISHMENT\nBANISTER\nBANISTERS\nBANJO\nBANJOS\nBANK\nBANKED\nBANKER\nBANKERS\nBANKING\nBANKRUPT\nBANKRUPTCIES\nBANKRUPTCY\nBANKRUPTED\nBANKRUPTING\nBANKRUPTS\nBANKS\nBANNED\nBANNER\nBANNERS\nBANNING\nBANQUET\nBANQUETING\nBANQUETINGS\nBANQUETS\nBANS\nBANSHEE\nBANSHEES\nBANTAM\nBANTER\nBANTERED\nBANTERING\nBANTERS\nBANTU\nBANTUS\nBAPTISM\nBAPTISMAL\nBAPTISMS\nBAPTIST\nBAPTISTE\nBAPTISTERY\nBAPTISTRIES\nBAPTISTRY\nBAPTISTS\nBAPTIZE\nBAPTIZED\nBAPTIZES\nBAPTIZING\nBAR\nBARB\nBARBADOS\nBARBARA\nBARBARIAN\nBARBARIANS\nBARBARIC\nBARBARISM\nBARBARITIES\nBARBARITY\nBARBAROUS\nBARBAROUSLY\nBARBECUE\nBARBECUED\nBARBECUES\nBARBED\nBARBELL\nBARBELLS\nBARBER\nBARBITAL\nBARBITURATE\nBARBITURATES\nBARBOUR\nBARBS\nBARCELONA\nBARCLAY\nBARD\nBARDS\nBARE\nBARED\nBAREFACED\nBAREFOOT\nBAREFOOTED\nBARELY\nBARENESS\nBARER\nBARES\nBAREST\nBARFLIES\nBARFLY\nBARGAIN\nBARGAINED\nBARGAINING\nBARGAINS\nBARGE\nBARGES\nBARGING\nBARHOP\nBARING\nBARITONE\nBARITONES\nBARIUM\nBARK\nBARKED\nBARKER\nBARKERS\nBARKING\nBARKS\nBARLEY\nBARLOW\nBARN\nBARNABAS\nBARNARD\nBARNES\nBARNET\nBARNETT\nBARNEY\nBARNHARD\nBARNS\nBARNSTORM\nBARNSTORMED\nBARNSTORMING\nBARNSTORMS\nBARNUM\nBARNYARD\nBARNYARDS\nBAROMETER\nBAROMETERS\nBAROMETRIC\nBARON\nBARONESS\nBARONIAL\nBARONIES\nBARONS\nBARONY\nBAROQUE\nBAROQUENESS\nBARR\nBARRACK\nBARRACKS\nBARRAGE\nBARRAGES\nBARRED\nBARREL\nBARRELLED\nBARRELLING\nBARRELS\nBARREN\nBARRENNESS\nBARRETT\nBARRICADE\nBARRICADES\nBARRIER\nBARRIERS\nBARRING\nBARRINGER\nBARRINGTON\nBARRON\nBARROW\nBARRY\nBARRYMORE\nBARRYMORES\nBARS\nBARSTOW\nBART\nBARTENDER\nBARTENDERS\nBARTER\nBARTERED\nBARTERING\nBARTERS\nBARTH\nBARTHOLOMEW\nBARTLETT\nBARTOK\nBARTON\nBASAL\nBASALT\nBASCOM\nBASE\nBASEBALL\nBASEBALLS\nBASEBAND\nBASEBOARD\nBASEBOARDS\nBASED\nBASEL\nBASELESS\nBASELINE\nBASELINES\nBASELY\nBASEMAN\nBASEMENT\nBASEMENTS\nBASENESS\nBASER\nBASES\nBASH\nBASHED\nBASHES\nBASHFUL\nBASHFULNESS\nBASHING\nBASIC\nBASIC\nBASIC\nBASICALLY\nBASICS\nBASIE\nBASIL\nBASIN\nBASING\nBASINS\nBASIS\nBASK\nBASKED\nBASKET\nBASKETBALL\nBASKETBALLS\nBASKETS\nBASKING\nBASQUE\nBASS\nBASSES\nBASSET\nBASSETT\nBASSINET\nBASSINETS\nBASTARD\nBASTARDS\nBASTE\nBASTED\nBASTES\nBASTING\nBASTION\nBASTIONS\nBAT\nBATAVIA\nBATCH\nBATCHED\nBATCHELDER\nBATCHES\nBATEMAN\nBATES\nBATH\nBATHE\nBATHED\nBATHER\nBATHERS\nBATHES\nBATHING\nBATHOS\nBATHROBE\nBATHROBES\nBATHROOM\nBATHROOMS\nBATHS\nBATHTUB\nBATHTUBS\nBATHURST\nBATISTA\nBATON\nBATONS\nBATOR\nBATS\nBATTALION\nBATTALIONS\nBATTED\nBATTELLE\nBATTEN\nBATTENS\nBATTER\nBATTERED\nBATTERIES\nBATTERING\nBATTERS\nBATTERY\nBATTING\nBATTLE\nBATTLED\nBATTLEFIELD\nBATTLEFIELDS\nBATTLEFRONT\nBATTLEFRONTS\nBATTLEGROUND\nBATTLEGROUNDS\nBATTLEMENT\nBATTLEMENTS\nBATTLER\nBATTLERS\nBATTLES\nBATTLESHIP\nBATTLESHIPS\nBATTLING\nBAUBLE\nBAUBLES\nBAUD\nBAUDELAIRE\nBAUER\nBAUHAUS\nBAUSCH\nBAUXITE\nBAVARIA\nBAVARIAN\nBAWDY\nBAWL\nBAWLED\nBAWLING\nBAWLS\nBAXTER\nBAY\nBAYDA\nBAYED\nBAYES\nBAYESIAN\nBAYING\nBAYLOR\nBAYONET\nBAYONETS\nBAYONNE\nBAYOU\nBAYOUS\nBAYPORT\nBAYREUTH\nBAYS\nBAZAAR\nBAZAARS\nBEACH\nBEACHED\nBEACHES\nBEACHHEAD\nBEACHHEADS\nBEACHING\nBEACON\nBEACONS\nBEAD\nBEADED\nBEADING\nBEADLE\nBEADLES\nBEADS\nBEADY\nBEAGLE\nBEAGLES\nBEAK\nBEAKED\nBEAKER\nBEAKERS\nBEAKS\nBEAM\nBEAMED\nBEAMER\nBEAMERS\nBEAMING\nBEAMS\nBEAN\nBEANBAG\nBEANED\nBEANER\nBEANERS\nBEANING\nBEANS\nBEAR\nBEARABLE\nBEARABLY\nBEARD\nBEARDED\nBEARDLESS\nBEARDS\nBEARDSLEY\nBEARER\nBEARERS\nBEARING\nBEARINGS\nBEARISH\nBEARS\nBEAST\nBEASTLY\nBEASTS\nBEAT\nBEATABLE\nBEATABLY\nBEATEN\nBEATER\nBEATERS\nBEATIFIC\nBEATIFICATION\nBEATIFY\nBEATING\nBEATINGS\nBEATITUDE\nBEATITUDES\nBEATNIK\nBEATNIKS\nBEATRICE\nBEATS\nBEAU\nBEAUCHAMPS\nBEAUJOLAIS\nBEAUMONT\nBEAUREGARD\nBEAUS\nBEAUTEOUS\nBEAUTEOUSLY\nBEAUTIES\nBEAUTIFICATIONS\nBEAUTIFIED\nBEAUTIFIER\nBEAUTIFIERS\nBEAUTIFIES\nBEAUTIFUL\nBEAUTIFULLY\nBEAUTIFY\nBEAUTIFYING\nBEAUTY\nBEAVER\nBEAVERS\nBEAVERTON\nBECALM\nBECALMED\nBECALMING\nBECALMS\nBECAME\nBECAUSE\nBECHTEL\nBECK\nBECKER\nBECKMAN\nBECKON\nBECKONED\nBECKONING\nBECKONS\nBECKY\nBECOME\nBECOMES\nBECOMING\nBECOMINGLY\nBED\nBEDAZZLE\nBEDAZZLED\nBEDAZZLEMENT\nBEDAZZLES\nBEDAZZLING\nBEDBUG\nBEDBUGS\nBEDDED\nBEDDER\nBEDDERS\nBEDDING\nBEDEVIL\nBEDEVILED\nBEDEVILING\nBEDEVILS\nBEDFAST\nBEDFORD\nBEDLAM\nBEDPOST\nBEDPOSTS\nBEDRAGGLE\nBEDRAGGLED\nBEDRIDDEN\nBEDROCK\nBEDROOM\nBEDROOMS\nBEDS\nBEDSIDE\nBEDSPREAD\nBEDSPREADS\nBEDSPRING\nBEDSPRINGS\nBEDSTEAD\nBEDSTEADS\nBEDTIME\nBEE\nBEEBE\nBEECH\nBEECHAM\nBEECHEN\nBEECHER\nBEEF\nBEEFED\nBEEFER\nBEEFERS\nBEEFING\nBEEFS\nBEEFSTEAK\nBEEFY\nBEEHIVE\nBEEHIVES\nBEEN\nBEEP\nBEEPS\nBEER\nBEERS\nBEES\nBEET\nBEETHOVEN\nBEETLE\nBEETLED\nBEETLES\nBEETLING\nBEETS\nBEFALL\nBEFALLEN\nBEFALLING\nBEFALLS\nBEFELL\nBEFIT\nBEFITS\nBEFITTED\nBEFITTING\nBEFOG\nBEFOGGED\nBEFOGGING\nBEFORE\nBEFOREHAND\nBEFOUL\nBEFOULED\nBEFOULING\nBEFOULS\nBEFRIEND\nBEFRIENDED\nBEFRIENDING\nBEFRIENDS\nBEFUDDLE\nBEFUDDLED\nBEFUDDLES\nBEFUDDLING\nBEG\nBEGAN\nBEGET\nBEGETS\nBEGETTING\nBEGGAR\nBEGGARLY\nBEGGARS\nBEGGARY\nBEGGED\nBEGGING\nBEGIN\nBEGINNER\nBEGINNERS\nBEGINNING\nBEGINNINGS\nBEGINS\nBEGOT\nBEGOTTEN\nBEGRUDGE\nBEGRUDGED\nBEGRUDGES\nBEGRUDGING\nBEGRUDGINGLY\nBEGS\nBEGUILE\nBEGUILED\nBEGUILES\nBEGUILING\nBEGUN\nBEHALF\nBEHAVE\nBEHAVED\nBEHAVES\nBEHAVING\nBEHAVIOR\nBEHAVIORAL\nBEHAVIORALLY\nBEHAVIORISM\nBEHAVIORISTIC\nBEHAVIORS\nBEHEAD\nBEHEADING\nBEHELD\nBEHEMOTH\nBEHEMOTHS\nBEHEST\nBEHIND\nBEHOLD\nBEHOLDEN\nBEHOLDER\nBEHOLDERS\nBEHOLDING\nBEHOLDS\nBEHOOVE\nBEHOOVES\nBEIGE\nBEIJING\nBEING\nBEINGS\nBEIRUT\nBELA\nBELABOR\nBELABORED\nBELABORING\nBELABORS\nBELATED\nBELATEDLY\nBELAY\nBELAYED\nBELAYING\nBELAYS\nBELCH\nBELCHED\nBELCHES\nBELCHING\nBELFAST\nBELFRIES\nBELFRY\nBELGIAN\nBELGIANS\nBELGIUM\nBELGRADE\nBELIE\nBELIED\nBELIEF\nBELIEFS\nBELIES\nBELIEVABLE\nBELIEVABLY\nBELIEVE\nBELIEVED\nBELIEVER\nBELIEVERS\nBELIEVES\nBELIEVING\nBELITTLE\nBELITTLED\nBELITTLES\nBELITTLING\nBELIZE\nBELL\nBELLA\nBELLAMY\nBELLATRIX\nBELLBOY\nBELLBOYS\nBELLE\nBELLES\nBELLEVILLE\nBELLHOP\nBELLHOPS\nBELLICOSE\nBELLICOSITY\nBELLIES\nBELLIGERENCE\nBELLIGERENT\nBELLIGERENTLY\nBELLIGERENTS\nBELLINGHAM\nBELLINI\nBELLMAN\nBELLMEN\nBELLOVIN\nBELLOW\nBELLOWED\nBELLOWING\nBELLOWS\nBELLS\nBELLUM\nBELLWETHER\nBELLWETHERS\nBELLWOOD\nBELLY\nBELLYACHE\nBELLYFULL\nBELMONT\nBELOIT\nBELONG\nBELONGED\nBELONGING\nBELONGINGS\nBELONGS\nBELOVED\nBELOW\nBELSHAZZAR\nBELT\nBELTED\nBELTING\nBELTON\nBELTS\nBELTSVILLE\nBELUSHI\nBELY\nBELYING\nBEMOAN\nBEMOANED\nBEMOANING\nBEMOANS\nBEN\nBENARES\nBENCH\nBENCHED\nBENCHES\nBENCHMARK\nBENCHMARKING\nBENCHMARKS\nBEND\nBENDABLE\nBENDER\nBENDERS\nBENDING\nBENDIX\nBENDS\nBENEATH\nBENEDICT\nBENEDICTINE\nBENEDICTION\nBENEDICTIONS\nBENEDIKT\nBENEFACTOR\nBENEFACTORS\nBENEFICENCE\nBENEFICENCES\nBENEFICENT\nBENEFICIAL\nBENEFICIALLY\nBENEFICIARIES\nBENEFICIARY\nBENEFIT\nBENEFITED\nBENEFITING\nBENEFITS\nBENEFITTED\nBENEFITTING\nBENELUX\nBENEVOLENCE\nBENEVOLENT\nBENGAL\nBENGALI\nBENIGHTED\nBENIGN\nBENIGNLY\nBENJAMIN\nBENNETT\nBENNINGTON\nBENNY\nBENSON\nBENT\nBENTHAM\nBENTLEY\nBENTLEYS\nBENTON\nBENZ\nBENZEDRINE\nBENZENE\nBEOGRAD\nBEOWULF\nBEQUEATH\nBEQUEATHAL\nBEQUEATHED\nBEQUEATHING\nBEQUEATHS\nBEQUEST\nBEQUESTS\nBERATE\nBERATED\nBERATES\nBERATING\nBEREA\nBEREAVE\nBEREAVED\nBEREAVEMENT\nBEREAVEMENTS\nBEREAVES\nBEREAVING\nBEREFT\nBERENICES\nBERESFORD\nBERET\nBERETS\nBERGEN\nBERGLAND\nBERGLUND\nBERGMAN\nBERGSON\nBERGSTEN\nBERGSTROM\nBERIBBONED\nBERIBERI\nBERINGER\nBERKELEY\nBERKELIUM\nBERKOWITZ\nBERKSHIRE\nBERKSHIRES\nBERLIN\nBERLINER\nBERLINERS\nBERLINIZE\nBERLINIZES\nBERLIOZ\nBERLITZ\nBERMAN\nBERMUDA\nBERN\nBERNADINE\nBERNARD\nBERNARDINE\nBERNARDINO\nBERNARDO\nBERNE\nBERNET\nBERNHARD\nBERNICE\nBERNIE\nBERNIECE\nBERNINI\nBERNOULLI\nBERNSTEIN\nBERRA\nBERRIES\nBERRY\nBERSERK\nBERT\nBERTH\nBERTHA\nBERTHS\nBERTIE\nBERTRAM\nBERTRAND\nBERWICK\nBERYL\nBERYLLIUM\nBESEECH\nBESEECHES\nBESEECHING\nBESET\nBESETS\nBESETTING\nBESIDE\nBESIDES\nBESIEGE\nBESIEGED\nBESIEGER\nBESIEGERS\nBESIEGING\nBESMIRCH\nBESMIRCHED\nBESMIRCHES\nBESMIRCHING\nBESOTTED\nBESOTTER\nBESOTTING\nBESOUGHT\nBESPEAK\nBESPEAKS\nBESPECTACLED\nBESPOKE\nBESS\nBESSEL\nBESSEMER\nBESSEMERIZE\nBESSEMERIZES\nBESSIE\nBEST\nBESTED\nBESTIAL\nBESTING\nBESTIR\nBESTIRRING\nBESTOW\nBESTOWAL\nBESTOWED\nBESTS\nBESTSELLER\nBESTSELLERS\nBESTSELLING\nBET\nBETA\nBETATRON\nBETEL\nBETELGEUSE\nBETHESDA\nBETHLEHEM\nBETIDE\nBETRAY\nBETRAYAL\nBETRAYED\nBETRAYER\nBETRAYING\nBETRAYS\nBETROTH\nBETROTHAL\nBETROTHED\nBETS\nBETSEY\nBETSY\nBETTE\nBETTER\nBETTERED\nBETTERING\nBETTERMENT\nBETTERMENTS\nBETTERS\nBETTIES\nBETTING\nBETTY\nBETWEEN\nBETWIXT\nBEVEL\nBEVELED\nBEVELING\nBEVELS\nBEVERAGE\nBEVERAGES\nBEVERLY\nBEVY\nBEWAIL\nBEWAILED\nBEWAILING\nBEWAILS\nBEWARE\nBEWHISKERED\nBEWILDER\nBEWILDERED\nBEWILDERING\nBEWILDERINGLY\nBEWILDERMENT\nBEWILDERS\nBEWITCH\nBEWITCHED\nBEWITCHES\nBEWITCHING\nBEYOND\nBHUTAN\nBIALYSTOK\nBIANCO\nBIANNUAL\nBIAS\nBIASED\nBIASES\nBIASING\nBIB\nBIBBED\nBIBBING\nBIBLE\nBIBLES\nBIBLICAL\nBIBLICALLY\nBIBLIOGRAPHIC\nBIBLIOGRAPHICAL\nBIBLIOGRAPHIES\nBIBLIOGRAPHY\nBIBLIOPHILE\nBIBS\nBICAMERAL\nBICARBONATE\nBICENTENNIAL\nBICEP\nBICEPS\nBICKER\nBICKERED\nBICKERING\nBICKERS\nBICONCAVE\nBICONNECTED\nBICONVEX\nBICYCLE\nBICYCLED\nBICYCLER\nBICYCLERS\nBICYCLES\nBICYCLING\nBID\nBIDDABLE\nBIDDEN\nBIDDER\nBIDDERS\nBIDDIES\nBIDDING\nBIDDLE\nBIDDY\nBIDE\nBIDIRECTIONAL\nBIDS\nBIEN\nBIENNIAL\nBIENNIUM\nBIENVILLE\nBIER\nBIERCE\nBIFOCAL\nBIFOCALS\nBIFURCATE\nBIG\nBIGELOW\nBIGGER\nBIGGEST\nBIGGS\nBIGHT\nBIGHTS\nBIGNESS\nBIGOT\nBIGOTED\nBIGOTRY\nBIGOTS\nBIHARMONIC\nBIJECTION\nBIJECTIONS\nBIJECTIVE\nBIJECTIVELY\nBIKE\nBIKES\nBIKING\nBIKINI\nBIKINIS\nBILABIAL\nBILATERAL\nBILATERALLY\nBILBAO\nBILBO\nBILE\nBILGE\nBILGES\nBILINEAR\nBILINGUAL\nBILK\nBILKED\nBILKING\nBILKS\nBILL\nBILLBOARD\nBILLBOARDS\nBILLED\nBILLER\nBILLERS\nBILLET\nBILLETED\nBILLETING\nBILLETS\nBILLIARD\nBILLIARDS\nBILLIE\nBILLIKEN\nBILLIKENS\nBILLING\nBILLINGS\nBILLION\nBILLIONS\nBILLIONTH\nBILLOW\nBILLOWED\nBILLOWS\nBILLS\nBILTMORE\nBIMETALLIC\nBIMETALLISM\nBIMINI\nBIMODAL\nBIMOLECULAR\nBIMONTHLIES\nBIMONTHLY\nBIN\nBINARIES\nBINARY\nBINAURAL\nBIND\nBINDER\nBINDERS\nBINDING\nBINDINGS\nBINDS\nBING\nBINGE\nBINGES\nBINGHAM\nBINGHAMTON\nBINGO\nBINI\nBINOCULAR\nBINOCULARS\nBINOMIAL\nBINS\nBINUCLEAR\nBIOCHEMICAL\nBIOCHEMIST\nBIOCHEMISTRY\nBIOFEEDBACK\nBIOGRAPHER\nBIOGRAPHERS\nBIOGRAPHIC\nBIOGRAPHICAL\nBIOGRAPHICALLY\nBIOGRAPHIES\nBIOGRAPHY\nBIOLOGICAL\nBIOLOGICALLY\nBIOLOGIST\nBIOLOGISTS\nBIOLOGY\nBIOMEDICAL\nBIOMEDICINE\nBIOPHYSICAL\nBIOPHYSICIST\nBIOPHYSICS\nBIOPSIES\nBIOPSY\nBIOSCIENCE\nBIOSPHERE\nBIOSTATISTIC\nBIOSYNTHESIZE\nBIOTA\nBIOTIC\nBIPARTISAN\nBIPARTITE\nBIPED\nBIPEDS\nBIPLANE\nBIPLANES\nBIPOLAR\nBIRACIAL\nBIRCH\nBIRCHEN\nBIRCHES\nBIRD\nBIRDBATH\nBIRDBATHS\nBIRDIE\nBIRDIED\nBIRDIES\nBIRDLIKE\nBIRDS\nBIREFRINGENCE\nBIREFRINGENT\nBIRGIT\nBIRMINGHAM\nBIRMINGHAMIZE\nBIRMINGHAMIZES\nBIRTH\nBIRTHDAY\nBIRTHDAYS\nBIRTHED\nBIRTHPLACE\nBIRTHPLACES\nBIRTHRIGHT\nBIRTHRIGHTS\nBIRTHS\nBISCAYNE\nBISCUIT\nBISCUITS\nBISECT\nBISECTED\nBISECTING\nBISECTION\nBISECTIONS\nBISECTOR\nBISECTORS\nBISECTS\nBISHOP\nBISHOPS\nBISMARCK\nBISMARK\nBISMUTH\nBISON\nBISONS\nBISQUE\nBISQUES\nBISSAU\nBISTABLE\nBISTATE\nBIT\nBITCH\nBITCHES\nBITE\nBITER\nBITERS\nBITES\nBITING\nBITINGLY\nBITMAP\nBITNET\nBITS\nBITTEN\nBITTER\nBITTERER\nBITTEREST\nBITTERLY\nBITTERNESS\nBITTERNUT\nBITTERROOT\nBITTERS\nBITTERSWEET\nBITUMEN\nBITUMINOUS\nBITWISE\nBIVALVE\nBIVALVES\nBIVARIATE\nBIVOUAC\nBIVOUACS\nBIWEEKLY\nBIZARRE\nBIZET\nBLAB\nBLABBED\nBLABBERMOUTH\nBLABBERMOUTHS\nBLABBING\nBLABS\nBLACK\nBLACKBERRIES\nBLACKBERRY\nBLACKBIRD\nBLACKBIRDS\nBLACKBOARD\nBLACKBOARDS\nBLACKBURN\nBLACKED\nBLACKEN\nBLACKENED\nBLACKENING\nBLACKENS\nBLACKER\nBLACKEST\nBLACKFEET\nBLACKFOOT\nBLACKFOOTS\nBLACKING\nBLACKJACK\nBLACKJACKS\nBLACKLIST\nBLACKLISTED\nBLACKLISTING\nBLACKLISTS\nBLACKLY\nBLACKMAIL\nBLACKMAILED\nBLACKMAILER\nBLACKMAILERS\nBLACKMAILING\nBLACKMAILS\nBLACKMAN\nBLACKMER\nBLACKNESS\nBLACKOUT\nBLACKOUTS\nBLACKS\nBLACKSMITH\nBLACKSMITHS\nBLACKSTONE\nBLACKWELL\nBLACKWELLS\nBLADDER\nBLADDERS\nBLADE\nBLADES\nBLAINE\nBLAIR\nBLAKE\nBLAKEY\nBLAMABLE\nBLAME\nBLAMED\nBLAMELESS\nBLAMELESSNESS\nBLAMER\nBLAMERS\nBLAMES\nBLAMEWORTHY\nBLAMING\nBLANCH\nBLANCHARD\nBLANCHE\nBLANCHED\nBLANCHES\nBLANCHING\nBLAND\nBLANDLY\nBLANDNESS\nBLANK\nBLANKED\nBLANKER\nBLANKEST\nBLANKET\nBLANKETED\nBLANKETER\nBLANKETERS\nBLANKETING\nBLANKETS\nBLANKING\nBLANKLY\nBLANKNESS\nBLANKS\nBLANTON\nBLARE\nBLARED\nBLARES\nBLARING\nBLASE\nBLASPHEME\nBLASPHEMED\nBLASPHEMES\nBLASPHEMIES\nBLASPHEMING\nBLASPHEMOUS\nBLASPHEMOUSLY\nBLASPHEMOUSNESS\nBLASPHEMY\nBLAST\nBLASTED\nBLASTER\nBLASTERS\nBLASTING\nBLASTS\nBLATANT\nBLATANTLY\nBLATZ\nBLAZE\nBLAZED\nBLAZER\nBLAZERS\nBLAZES\nBLAZING\nBLEACH\nBLEACHED\nBLEACHER\nBLEACHERS\nBLEACHES\nBLEACHING\nBLEAK\nBLEAKER\nBLEAKLY\nBLEAKNESS\nBLEAR\nBLEARY\nBLEAT\nBLEATING\nBLEATS\nBLED\nBLEED\nBLEEDER\nBLEEDING\nBLEEDINGS\nBLEEDS\nBLEEKER\nBLEMISH\nBLEMISHES\nBLEND\nBLENDED\nBLENDER\nBLENDING\nBLENDS\nBLENHEIM\nBLESS\nBLESSED\nBLESSING\nBLESSINGS\nBLEW\nBLIGHT\nBLIGHTED\nBLIMP\nBLIMPS\nBLIND\nBLINDED\nBLINDER\nBLINDERS\nBLINDFOLD\nBLINDFOLDED\nBLINDFOLDING\nBLINDFOLDS\nBLINDING\nBLINDINGLY\nBLINDLY\nBLINDNESS\nBLINDS\nBLINK\nBLINKED\nBLINKER\nBLINKERS\nBLINKING\nBLINKS\nBLINN\nBLIP\nBLIPS\nBLISS\nBLISSFUL\nBLISSFULLY\nBLISTER\nBLISTERED\nBLISTERING\nBLISTERS\nBLITHE\nBLITHELY\nBLITZ\nBLITZES\nBLITZKRIEG\nBLIZZARD\nBLIZZARDS\nBLOAT\nBLOATED\nBLOATER\nBLOATING\nBLOATS\nBLOB\nBLOBS\nBLOC\nBLOCH\nBLOCK\nBLOCKADE\nBLOCKADED\nBLOCKADES\nBLOCKADING\nBLOCKAGE\nBLOCKAGES\nBLOCKED\nBLOCKER\nBLOCKERS\nBLOCKHOUSE\nBLOCKHOUSES\nBLOCKING\nBLOCKS\nBLOCS\nBLOKE\nBLOKES\nBLOMBERG\nBLOMQUIST\nBLOND\nBLONDE\nBLONDES\nBLONDS\nBLOOD\nBLOODBATH\nBLOODED\nBLOODHOUND\nBLOODHOUNDS\nBLOODIED\nBLOODIEST\nBLOODLESS\nBLOODS\nBLOODSHED\nBLOODSHOT\nBLOODSTAIN\nBLOODSTAINED\nBLOODSTAINS\nBLOODSTREAM\nBLOODY\nBLOOM\nBLOOMED\nBLOOMERS\nBLOOMFIELD\nBLOOMING\nBLOOMINGTON\nBLOOMS\nBLOOPER\nBLOSSOM\nBLOSSOMED\nBLOSSOMS\nBLOT\nBLOTS\nBLOTTED\nBLOTTING\nBLOUSE\nBLOUSES\nBLOW\nBLOWER\nBLOWERS\nBLOWFISH\nBLOWING\nBLOWN\nBLOWOUT\nBLOWS\nBLOWUP\nBLUBBER\nBLUDGEON\nBLUDGEONED\nBLUDGEONING\nBLUDGEONS\nBLUE\nBLUEBERRIES\nBLUEBERRY\nBLUEBIRD\nBLUEBIRDS\nBLUEBONNET\nBLUEBONNETS\nBLUEFISH\nBLUENESS\nBLUEPRINT\nBLUEPRINTS\nBLUER\nBLUES\nBLUEST\nBLUESTOCKING\nBLUFF\nBLUFFING\nBLUFFS\nBLUING\nBLUISH\nBLUM\nBLUMENTHAL\nBLUNDER\nBLUNDERBUSS\nBLUNDERED\nBLUNDERING\nBLUNDERINGS\nBLUNDERS\nBLUNT\nBLUNTED\nBLUNTER\nBLUNTEST\nBLUNTING\nBLUNTLY\nBLUNTNESS\nBLUNTS\nBLUR\nBLURB\nBLURRED\nBLURRING\nBLURRY\nBLURS\nBLURT\nBLURTED\nBLURTING\nBLURTS\nBLUSH\nBLUSHED\nBLUSHES\nBLUSHING\nBLUSTER\nBLUSTERED\nBLUSTERING\nBLUSTERS\nBLUSTERY\nBLYTHE\nBOA\nBOAR\nBOARD\nBOARDED\nBOARDER\nBOARDERS\nBOARDING\nBOARDINGHOUSE\nBOARDINGHOUSES\nBOARDS\nBOARSH\nBOAST\nBOASTED\nBOASTER\nBOASTERS\nBOASTFUL\nBOASTFULLY\nBOASTING\nBOASTINGS\nBOASTS\nBOAT\nBOATER\nBOATERS\nBOATHOUSE\nBOATHOUSES\nBOATING\nBOATLOAD\nBOATLOADS\nBOATMAN\nBOATMEN\nBOATS\nBOATSMAN\nBOATSMEN\nBOATSWAIN\nBOATSWAINS\nBOATYARD\nBOATYARDS\nBOB\nBOBBED\nBOBBIE\nBOBBIN\nBOBBING\nBOBBINS\nBOBBSEY\nBOBBY\nBOBOLINK\nBOBOLINKS\nBOBROW\nBOBS\nBOBWHITE\nBOBWHITES\nBOCA\nBODE\nBODENHEIM\nBODES\nBODICE\nBODIED\nBODIES\nBODILY\nBODLEIAN\nBODY\nBODYBUILDER\nBODYBUILDERS\nBODYBUILDING\nBODYGUARD\nBODYGUARDS\nBODYWEIGHT\nBOEING\nBOEOTIA\nBOEOTIAN\nBOER\nBOERS\nBOG\nBOGART\nBOGARTIAN\nBOGEYMEN\nBOGGED\nBOGGLE\nBOGGLED\nBOGGLES\nBOGGLING\nBOGOTA\nBOGS\nBOGUS\nBOHEME\nBOHEMIA\nBOHEMIAN\nBOHEMIANISM\nBOHR\nBOIL\nBOILED\nBOILER\nBOILERPLATE\nBOILERS\nBOILING\nBOILS\nBOIS\nBOISE\nBOISTEROUS\nBOISTEROUSLY\nBOLD\nBOLDER\nBOLDEST\nBOLDFACE\nBOLDLY\nBOLDNESS\nBOLIVIA\nBOLIVIAN\nBOLL\nBOLOGNA\nBOLSHEVIK\nBOLSHEVIKS\nBOLSHEVISM\nBOLSHEVIST\nBOLSHEVISTIC\nBOLSHOI\nBOLSTER\nBOLSTERED\nBOLSTERING\nBOLSTERS\nBOLT\nBOLTED\nBOLTING\nBOLTON\nBOLTS\nBOLTZMANN\nBOMB\nBOMBARD\nBOMBARDED\nBOMBARDING\nBOMBARDMENT\nBOMBARDS\nBOMBAST\nBOMBASTIC\nBOMBAY\nBOMBED\nBOMBER\nBOMBERS\nBOMBING\nBOMBINGS\nBOMBPROOF\nBOMBS\nBONANZA\nBONANZAS\nBONAPARTE\nBONAVENTURE\nBOND\nBONDAGE\nBONDED\nBONDER\nBONDERS\nBONDING\nBONDS\nBONDSMAN\nBONDSMEN\nBONE\nBONED\nBONER\nBONERS\nBONES\nBONFIRE\nBONFIRES\nBONG\nBONHAM\nBONIFACE\nBONING\nBONN\nBONNET\nBONNETED\nBONNETS\nBONNEVILLE\nBONNIE\nBONNY\nBONTEMPO\nBONUS\nBONUSES\nBONY\nBOO\nBOOB\nBOOBOO\nBOOBY\nBOOK\nBOOKCASE\nBOOKCASES\nBOOKED\nBOOKER\nBOOKERS\nBOOKIE\nBOOKIES\nBOOKING\nBOOKINGS\nBOOKISH\nBOOKKEEPER\nBOOKKEEPERS\nBOOKKEEPING\nBOOKLET\nBOOKLETS\nBOOKMARK\nBOOKS\nBOOKSELLER\nBOOKSELLERS\nBOOKSHELF\nBOOKSHELVES\nBOOKSTORE\nBOOKSTORES\nBOOKWORM\nBOOLEAN\nBOOLEANS\nBOOM\nBOOMED\nBOOMERANG\nBOOMERANGS\nBOOMING\nBOOMS\nBOON\nBOONE\nBOONTON\nBOOR\nBOORISH\nBOORS\nBOOS\nBOOST\nBOOSTED\nBOOSTER\nBOOSTING\nBOOSTS\nBOOT\nBOOTABLE\nBOOTED\nBOOTES\nBOOTH\nBOOTHS\nBOOTING\nBOOTLE\nBOOTLEG\nBOOTLEGGED\nBOOTLEGGER\nBOOTLEGGERS\nBOOTLEGGING\nBOOTLEGS\nBOOTS\nBOOTSTRAP\nBOOTSTRAPPED\nBOOTSTRAPPING\nBOOTSTRAPS\nBOOTY\nBOOZE\nBORATE\nBORATES\nBORAX\nBORDEAUX\nBORDELLO\nBORDELLOS\nBORDEN\nBORDER\nBORDERED\nBORDERING\nBORDERINGS\nBORDERLAND\nBORDERLANDS\nBORDERLINE\nBORDERS\nBORE\nBOREALIS\nBOREAS\nBORED\nBOREDOM\nBORER\nBORES\nBORG\nBORIC\nBORING\nBORIS\nBORN\nBORNE\nBORNEO\nBORON\nBOROUGH\nBOROUGHS\nBORROUGHS\nBORROW\nBORROWED\nBORROWER\nBORROWERS\nBORROWING\nBORROWS\nBOSCH\nBOSE\nBOSOM\nBOSOMS\nBOSPORUS\nBOSS\nBOSSED\nBOSSES\nBOSTITCH\nBOSTON\nBOSTONIAN\nBOSTONIANS\nBOSUN\nBOSWELL\nBOSWELLIZE\nBOSWELLIZES\nBOTANICAL\nBOTANIST\nBOTANISTS\nBOTANY\nBOTCH\nBOTCHED\nBOTCHER\nBOTCHERS\nBOTCHES\nBOTCHING\nBOTH\nBOTHER\nBOTHERED\nBOTHERING\nBOTHERS\nBOTHERSOME\nBOTSWANA\nBOTTLE\nBOTTLED\nBOTTLENECK\nBOTTLENECKS\nBOTTLER\nBOTTLERS\nBOTTLES\nBOTTLING\nBOTTOM\nBOTTOMED\nBOTTOMING\nBOTTOMLESS\nBOTTOMS\nBOTULINUS\nBOTULISM\nBOUCHER\nBOUFFANT\nBOUGH\nBOUGHS\nBOUGHT\nBOULDER\nBOULDERS\nBOULEVARD\nBOULEVARDS\nBOUNCE\nBOUNCED\nBOUNCER\nBOUNCES\nBOUNCING\nBOUNCY\nBOUND\nBOUNDARIES\nBOUNDARY\nBOUNDED\nBOUNDEN\nBOUNDING\nBOUNDLESS\nBOUNDLESSNESS\nBOUNDS\nBOUNTEOUS\nBOUNTEOUSLY\nBOUNTIES\nBOUNTIFUL\nBOUNTY\nBOUQUET\nBOUQUETS\nBOURBAKI\nBOURBON\nBOURGEOIS\nBOURGEOISIE\nBOURNE\nBOUSTROPHEDON\nBOUSTROPHEDONIC\nBOUT\nBOUTIQUE\nBOUTS\nBOUVIER\nBOVINE\nBOVINES\nBOW\nBOWDITCH\nBOWDLERIZE\nBOWDLERIZED\nBOWDLERIZES\nBOWDLERIZING\nBOWDOIN\nBOWED\nBOWEL\nBOWELS\nBOWEN\nBOWER\nBOWERS\nBOWES\nBOWING\nBOWL\nBOWLED\nBOWLER\nBOWLERS\nBOWLINE\nBOWLINES\nBOWLING\nBOWLS\nBOWMAN\nBOWS\nBOWSTRING\nBOWSTRINGS\nBOX\nBOXCAR\nBOXCARS\nBOXED\nBOXER\nBOXERS\nBOXES\nBOXFORD\nBOXING\nBOXTOP\nBOXTOPS\nBOXWOOD\nBOY\nBOYCE\nBOYCOTT\nBOYCOTTED\nBOYCOTTS\nBOYD\nBOYFRIEND\nBOYFRIENDS\nBOYHOOD\nBOYISH\nBOYISHNESS\nBOYLE\nBOYLSTON\nBOYS\nBRA\nBRACE\nBRACED\nBRACELET\nBRACELETS\nBRACES\nBRACING\nBRACKET\nBRACKETED\nBRACKETING\nBRACKETS\nBRACKISH\nBRADBURY\nBRADFORD\nBRADLEY\nBRADSHAW\nBRADY\nBRAE\nBRAES\nBRAG\nBRAGG\nBRAGGED\nBRAGGER\nBRAGGING\nBRAGS\nBRAHMAPUTRA\nBRAHMS\nBRAHMSIAN\nBRAID\nBRAIDED\nBRAIDING\nBRAIDS\nBRAILLE\nBRAIN\nBRAINARD\nBRAINARDS\nBRAINCHILD\nBRAINED\nBRAINING\nBRAINS\nBRAINSTEM\nBRAINSTEMS\nBRAINSTORM\nBRAINSTORMS\nBRAINWASH\nBRAINWASHED\nBRAINWASHES\nBRAINWASHING\nBRAINY\nBRAKE\nBRAKED\nBRAKEMAN\nBRAKES\nBRAKING\nBRAMBLE\nBRAMBLES\nBRAMBLY\nBRAN\nBRANCH\nBRANCHED\nBRANCHES\nBRANCHING\nBRANCHINGS\nBRANCHVILLE\nBRAND\nBRANDED\nBRANDEIS\nBRANDEL\nBRANDENBURG\nBRANDING\nBRANDISH\nBRANDISHES\nBRANDISHING\nBRANDON\nBRANDS\nBRANDT\nBRANDY\nBRANDYWINE\nBRANIFF\nBRANNON\nBRAS\nBRASH\nBRASHLY\nBRASHNESS\nBRASILIA\nBRASS\nBRASSES\nBRASSIERE\nBRASSTOWN\nBRASSY\nBRAT\nBRATS\nBRAUN\nBRAVADO\nBRAVE\nBRAVED\nBRAVELY\nBRAVENESS\nBRAVER\nBRAVERY\nBRAVES\nBRAVEST\nBRAVING\nBRAVO\nBRAVOS\nBRAWL\nBRAWLER\nBRAWLING\nBRAWN\nBRAY\nBRAYED\nBRAYER\nBRAYING\nBRAYS\nBRAZE\nBRAZED\nBRAZEN\nBRAZENLY\nBRAZENNESS\nBRAZES\nBRAZIER\nBRAZIERS\nBRAZIL\nBRAZILIAN\nBRAZING\nBRAZZAVILLE\nBREACH\nBREACHED\nBREACHER\nBREACHERS\nBREACHES\nBREACHING\nBREAD\nBREADBOARD\nBREADBOARDS\nBREADBOX\nBREADBOXES\nBREADED\nBREADING\nBREADS\nBREADTH\nBREADWINNER\nBREADWINNERS\nBREAK\nBREAKABLE\nBREAKABLES\nBREAKAGE\nBREAKAWAY\nBREAKDOWN\nBREAKDOWNS\nBREAKER\nBREAKERS\nBREAKFAST\nBREAKFASTED\nBREAKFASTER\nBREAKFASTERS\nBREAKFASTING\nBREAKFASTS\nBREAKING\nBREAKPOINT\nBREAKPOINTS\nBREAKS\nBREAKTHROUGH\nBREAKTHROUGHES\nBREAKTHROUGHS\nBREAKUP\nBREAKWATER\nBREAKWATERS\nBREAST\nBREASTED\nBREASTS\nBREASTWORK\nBREASTWORKS\nBREATH\nBREATHABLE\nBREATHE\nBREATHED\nBREATHER\nBREATHERS\nBREATHES\nBREATHING\nBREATHLESS\nBREATHLESSLY\nBREATHS\nBREATHTAKING\nBREATHTAKINGLY\nBREATHY\nBRED\nBREECH\nBREECHES\nBREED\nBREEDER\nBREEDING\nBREEDS\nBREEZE\nBREEZES\nBREEZILY\nBREEZY\nBREMEN\nBREMSSTRAHLUNG\nBRENDA\nBRENDAN\nBRENNAN\nBRENNER\nBRENT\nBRESENHAM\nBREST\nBRETHREN\nBRETON\nBRETONS\nBRETT\nBREVE\nBREVET\nBREVETED\nBREVETING\nBREVETS\nBREVITY\nBREW\nBREWED\nBREWER\nBREWERIES\nBREWERS\nBREWERY\nBREWING\nBREWS\nBREWSTER\nBRIAN\nBRIAR\nBRIARS\nBRIBE\nBRIBED\nBRIBER\nBRIBERS\nBRIBERY\nBRIBES\nBRIBING\nBRICE\nBRICK\nBRICKBAT\nBRICKED\nBRICKER\nBRICKLAYER\nBRICKLAYERS\nBRICKLAYING\nBRICKS\nBRIDAL\nBRIDE\nBRIDEGROOM\nBRIDES\nBRIDESMAID\nBRIDESMAIDS\nBRIDEWELL\nBRIDGE\nBRIDGEABLE\nBRIDGED\nBRIDGEHEAD\nBRIDGEHEADS\nBRIDGEPORT\nBRIDGES\nBRIDGET\nBRIDGETOWN\nBRIDGEWATER\nBRIDGEWORK\nBRIDGING\nBRIDLE\nBRIDLED\nBRIDLES\nBRIDLING\nBRIE\nBRIEF\nBRIEFCASE\nBRIEFCASES\nBRIEFED\nBRIEFER\nBRIEFEST\nBRIEFING\nBRIEFINGS\nBRIEFLY\nBRIEFNESS\nBRIEFS\nBRIEN\nBRIER\nBRIG\nBRIGADE\nBRIGADES\nBRIGADIER\nBRIGADIERS\nBRIGADOON\nBRIGANTINE\nBRIGGS\nBRIGHAM\nBRIGHT\nBRIGHTEN\nBRIGHTENED\nBRIGHTENER\nBRIGHTENERS\nBRIGHTENING\nBRIGHTENS\nBRIGHTER\nBRIGHTEST\nBRIGHTLY\nBRIGHTNESS\nBRIGHTON\nBRIGS\nBRILLIANCE\nBRILLIANCY\nBRILLIANT\nBRILLIANTLY\nBRILLOUIN\nBRIM\nBRIMFUL\nBRIMMED\nBRIMMING\nBRIMSTONE\nBRINDISI\nBRINDLE\nBRINDLED\nBRINE\nBRING\nBRINGER\nBRINGERS\nBRINGING\nBRINGS\nBRINK\nBRINKLEY\nBRINKMANSHIP\nBRINY\nBRISBANE\nBRISK\nBRISKER\nBRISKLY\nBRISKNESS\nBRISTLE\nBRISTLED\nBRISTLES\nBRISTLING\nBRISTOL\nBRITAIN\nBRITANNIC\nBRITANNICA\nBRITCHES\nBRITISH\nBRITISHER\nBRITISHLY\nBRITON\nBRITONS\nBRITTANY\nBRITTEN\nBRITTLE\nBRITTLENESS\nBROACH\nBROACHED\nBROACHES\nBROACHING\nBROAD\nBROADBAND\nBROADCAST\nBROADCASTED\nBROADCASTER\nBROADCASTERS\nBROADCASTING\nBROADCASTINGS\nBROADCASTS\nBROADEN\nBROADENED\nBROADENER\nBROADENERS\nBROADENING\nBROADENINGS\nBROADENS\nBROADER\nBROADEST\nBROADLY\nBROADNESS\nBROADSIDE\nBROADWAY\nBROCADE\nBROCADED\nBROCCOLI\nBROCHURE\nBROCHURES\nBROCK\nBROGLIE\nBROIL\nBROILED\nBROILER\nBROILERS\nBROILING\nBROILS\nBROKE\nBROKEN\nBROKENLY\nBROKENNESS\nBROKER\nBROKERAGE\nBROKERS\nBROMFIELD\nBROMIDE\nBROMIDES\nBROMINE\nBROMLEY\nBRONCHI\nBRONCHIAL\nBRONCHIOLE\nBRONCHIOLES\nBRONCHITIS\nBRONCHUS\nBRONTOSAURUS\nBRONX\nBRONZE\nBRONZED\nBRONZES\nBROOCH\nBROOCHES\nBROOD\nBROODER\nBROODING\nBROODS\nBROOK\nBROOKDALE\nBROOKE\nBROOKED\nBROOKFIELD\nBROOKHAVEN\nBROOKLINE\nBROOKLYN\nBROOKMONT\nBROOKS\nBROOM\nBROOMS\nBROOMSTICK\nBROOMSTICKS\nBROTH\nBROTHEL\nBROTHELS\nBROTHER\nBROTHERHOOD\nBROTHERLINESS\nBROTHERLY\nBROTHERS\nBROUGHT\nBROW\nBROWBEAT\nBROWBEATEN\nBROWBEATING\nBROWBEATS\nBROWN\nBROWNE\nBROWNED\nBROWNELL\nBROWNER\nBROWNEST\nBROWNIAN\nBROWNIE\nBROWNIES\nBROWNING\nBROWNISH\nBROWNNESS\nBROWNS\nBROWS\nBROWSE\nBROWSING\nBRUCE\nBRUCKNER\nBRUEGEL\nBRUISE\nBRUISED\nBRUISES\nBRUISING\nBRUMIDI\nBRUNCH\nBRUNCHES\nBRUNETTE\nBRUNHILDE\nBRUNO\nBRUNSWICK\nBRUNT\nBRUSH\nBRUSHED\nBRUSHES\nBRUSHFIRE\nBRUSHFIRES\nBRUSHING\nBRUSHLIKE\nBRUSHY\nBRUSQUE\nBRUSQUELY\nBRUSSELS\nBRUTAL\nBRUTALITIES\nBRUTALITY\nBRUTALIZE\nBRUTALIZED\nBRUTALIZES\nBRUTALIZING\nBRUTALLY\nBRUTE\nBRUTES\nBRUTISH\nBRUXELLES\nBRYAN\nBRYANT\nBRYCE\nBRYN\nBUBBLE\nBUBBLED\nBUBBLES\nBUBBLING\nBUBBLY\nBUCHANAN\nBUCHAREST\nBUCHENWALD\nBUCHWALD\nBUCK\nBUCKBOARD\nBUCKBOARDS\nBUCKED\nBUCKET\nBUCKETS\nBUCKING\nBUCKLE\nBUCKLED\nBUCKLER\nBUCKLES\nBUCKLEY\nBUCKLING\nBUCKNELL\nBUCKS\nBUCKSHOT\nBUCKSKIN\nBUCKSKINS\nBUCKWHEAT\nBUCKY\nBUCOLIC\nBUD\nBUDAPEST\nBUDD\nBUDDED\nBUDDHA\nBUDDHISM\nBUDDHIST\nBUDDHISTS\nBUDDIES\nBUDDING\nBUDDY\nBUDGE\nBUDGED\nBUDGES\nBUDGET\nBUDGETARY\nBUDGETED\nBUDGETER\nBUDGETERS\nBUDGETING\nBUDGETS\nBUDGING\nBUDS\nBUDWEISER\nBUDWEISERS\nBUEHRING\nBUENA\nBUENOS\nBUFF\nBUFFALO\nBUFFALOES\nBUFFER\nBUFFERED\nBUFFERING\nBUFFERS\nBUFFET\nBUFFETED\nBUFFETING\nBUFFETINGS\nBUFFETS\nBUFFOON\nBUFFOONS\nBUFFS\nBUG\nBUGABOO\nBUGATTI\nBUGEYED\nBUGGED\nBUGGER\nBUGGERS\nBUGGIES\nBUGGING\nBUGGY\nBUGLE\nBUGLED\nBUGLER\nBUGLES\nBUGLING\nBUGS\nBUICK\nBUILD\nBUILDER\nBUILDERS\nBUILDING\nBUILDINGS\nBUILDS\nBUILDUP\nBUILDUPS\nBUILT\nBUILTIN\nBUJUMBURA\nBULB\nBULBA\nBULBS\nBULGARIA\nBULGARIAN\nBULGE\nBULGED\nBULGING\nBULK\nBULKED\nBULKHEAD\nBULKHEADS\nBULKS\nBULKY\nBULL\nBULLDOG\nBULLDOGS\nBULLDOZE\nBULLDOZED\nBULLDOZER\nBULLDOZES\nBULLDOZING\nBULLED\nBULLET\nBULLETIN\nBULLETINS\nBULLETS\nBULLFROG\nBULLIED\nBULLIES\nBULLING\nBULLION\nBULLISH\nBULLOCK\nBULLS\nBULLSEYE\nBULLY\nBULLYING\nBULWARK\nBUM\nBUMBLE\nBUMBLEBEE\nBUMBLEBEES\nBUMBLED\nBUMBLER\nBUMBLERS\nBUMBLES\nBUMBLING\nBUMBRY\nBUMMED\nBUMMING\nBUMP\nBUMPED\nBUMPER\nBUMPERS\nBUMPING\nBUMPS\nBUMPTIOUS\nBUMPTIOUSLY\nBUMPTIOUSNESS\nBUMS\nBUN\nBUNCH\nBUNCHED\nBUNCHES\nBUNCHING\nBUNDESTAG\nBUNDLE\nBUNDLED\nBUNDLES\nBUNDLING\nBUNDOORA\nBUNDY\nBUNGALOW\nBUNGALOWS\nBUNGLE\nBUNGLED\nBUNGLER\nBUNGLERS\nBUNGLES\nBUNGLING\nBUNION\nBUNIONS\nBUNK\nBUNKER\nBUNKERED\nBUNKERS\nBUNKHOUSE\nBUNKHOUSES\nBUNKMATE\nBUNKMATES\nBUNKS\nBUNNIES\nBUNNY\nBUNS\nBUNSEN\nBUNT\nBUNTED\nBUNTER\nBUNTERS\nBUNTING\nBUNTS\nBUNYAN\nBUOY\nBUOYANCY\nBUOYANT\nBUOYED\nBUOYS\nBURBANK\nBURCH\nBURDEN\nBURDENED\nBURDENING\nBURDENS\nBURDENSOME\nBUREAU\nBUREAUCRACIES\nBUREAUCRACY\nBUREAUCRAT\nBUREAUCRATIC\nBUREAUCRATS\nBUREAUS\nBURGEON\nBURGEONED\nBURGEONING\nBURGESS\nBURGESSES\nBURGHER\nBURGHERS\nBURGLAR\nBURGLARIES\nBURGLARIZE\nBURGLARIZED\nBURGLARIZES\nBURGLARIZING\nBURGLARPROOF\nBURGLARPROOFED\nBURGLARPROOFING\nBURGLARPROOFS\nBURGLARS\nBURGLARY\nBURGUNDIAN\nBURGUNDIES\nBURGUNDY\nBURIAL\nBURIED\nBURIES\nBURKE\nBURKES\nBURL\nBURLESQUE\nBURLESQUES\nBURLINGAME\nBURLINGTON\nBURLY\nBURMA\nBURMESE\nBURN\nBURNE\nBURNED\nBURNER\nBURNERS\nBURNES\nBURNETT\nBURNHAM\nBURNING\nBURNINGLY\nBURNINGS\nBURNISH\nBURNISHED\nBURNISHES\nBURNISHING\nBURNS\nBURNSIDE\nBURNSIDES\nBURNT\nBURNTLY\nBURNTNESS\nBURP\nBURPED\nBURPING\nBURPS\nBURR\nBURROUGHS\nBURROW\nBURROWED\nBURROWER\nBURROWING\nBURROWS\nBURRS\nBURSA\nBURSITIS\nBURST\nBURSTINESS\nBURSTING\nBURSTS\nBURSTY\nBURT\nBURTON\nBURTT\nBURUNDI\nBURY\nBURYING\nBUS\nBUSBOY\nBUSBOYS\nBUSCH\nBUSED\nBUSES\nBUSH\nBUSHEL\nBUSHELS\nBUSHES\nBUSHING\nBUSHNELL\nBUSHWHACK\nBUSHWHACKED\nBUSHWHACKING\nBUSHWHACKS\nBUSHY\nBUSIED\nBUSIER\nBUSIEST\nBUSILY\nBUSINESS\nBUSINESSES\nBUSINESSLIKE\nBUSINESSMAN\nBUSINESSMEN\nBUSING\nBUSS\nBUSSED\nBUSSES\nBUSSING\nBUST\nBUSTARD\nBUSTARDS\nBUSTED\nBUSTER\nBUSTLE\nBUSTLING\nBUSTS\nBUSY\nBUT\nBUTANE\nBUTCHER\nBUTCHERED\nBUTCHERS\nBUTCHERY\nBUTLER\nBUTLERS\nBUTT\nBUTTE\nBUTTED\nBUTTER\nBUTTERBALL\nBUTTERCUP\nBUTTERED\nBUTTERER\nBUTTERERS\nBUTTERFAT\nBUTTERFIELD\nBUTTERFLIES\nBUTTERFLY\nBUTTERING\nBUTTERMILK\nBUTTERNUT\nBUTTERS\nBUTTERY\nBUTTES\nBUTTING\nBUTTOCK\nBUTTOCKS\nBUTTON\nBUTTONED\nBUTTONHOLE\nBUTTONHOLES\nBUTTONING\nBUTTONS\nBUTTRESS\nBUTTRESSED\nBUTTRESSES\nBUTTRESSING\nBUTTRICK\nBUTTS\nBUTYL\nBUTYRATE\nBUXOM\nBUXTEHUDE\nBUXTON\nBUY\nBUYER\nBUYERS\nBUYING\nBUYS\nBUZZ\nBUZZARD\nBUZZARDS\nBUZZED\nBUZZER\nBUZZES\nBUZZING\nBUZZWORD\nBUZZWORDS\nBUZZY\nBYE\nBYERS\nBYGONE\nBYLAW\nBYLAWS\nBYLINE\nBYLINES\nBYPASS\nBYPASSED\nBYPASSES\nBYPASSING\nBYPRODUCT\nBYPRODUCTS\nBYRD\nBYRNE\nBYRON\nBYRONIC\nBYRONISM\nBYRONIZE\nBYRONIZES\nBYSTANDER\nBYSTANDERS\nBYTE\nBYTES\nBYWAY\nBYWAYS\nBYWORD\nBYWORDS\nBYZANTINE\nBYZANTINIZE\nBYZANTINIZES\nBYZANTIUM\nCAB\nCABAL\nCABANA\nCABARET\nCABBAGE\nCABBAGES\nCABDRIVER\nCABIN\nCABINET\nCABINETS\nCABINS\nCABLE\nCABLED\nCABLES\nCABLING\nCABOOSE\nCABOT\nCABS\nCACHE\nCACHED\nCACHES\nCACHING\nCACKLE\nCACKLED\nCACKLER\nCACKLES\nCACKLING\nCACTI\nCACTUS\nCADAVER\nCADENCE\nCADENCED\nCADILLAC\nCADILLACS\nCADRES\nCADY\nCAESAR\nCAESARIAN\nCAESARIZE\nCAESARIZES\nCAFE\nCAFES\nCAFETERIA\nCAGE\nCAGED\nCAGER\nCAGERS\nCAGES\nCAGING\nCAHILL\nCAIMAN\nCAIN\nCAINE\nCAIRN\nCAIRO\nCAJOLE\nCAJOLED\nCAJOLES\nCAJOLING\nCAJUN\nCAJUNS\nCAKE\nCAKED\nCAKES\nCAKING\nCALAIS\nCALAMITIES\nCALAMITOUS\nCALAMITY\nCALCEOLARIA\nCALCIFY\nCALCIUM\nCALCOMP\nCALCOMP\nCALCOMP\nCALCULATE\nCALCULATED\nCALCULATES\nCALCULATING\nCALCULATION\nCALCULATIONS\nCALCULATIVE\nCALCULATOR\nCALCULATORS\nCALCULI\nCALCULUS\nCALCUTTA\nCALDER\nCALDERA\nCALDWELL\nCALEB\nCALENDAR\nCALENDARS\nCALF\nCALFSKIN\nCALGARY\nCALHOUN\nCALIBER\nCALIBERS\nCALIBRATE\nCALIBRATED\nCALIBRATES\nCALIBRATING\nCALIBRATION\nCALIBRATIONS\nCALICO\nCALIFORNIA\nCALIFORNIAN\nCALIFORNIANS\nCALIGULA\nCALIPH\nCALIPHS\nCALKINS\nCALL\nCALLABLE\nCALLAGHAN\nCALLAHAN\nCALLAN\nCALLED\nCALLER\nCALLERS\nCALLING\nCALLIOPE\nCALLISTO\nCALLOUS\nCALLOUSED\nCALLOUSLY\nCALLOUSNESS\nCALLS\nCALLUS\nCALM\nCALMED\nCALMER\nCALMEST\nCALMING\nCALMINGLY\nCALMLY\nCALMNESS\nCALMS\nCALORIC\nCALORIE\nCALORIES\nCALORIMETER\nCALORIMETRIC\nCALORIMETRY\nCALTECH\nCALUMNY\nCALVARY\nCALVE\nCALVERT\nCALVES\nCALVIN\nCALVINIST\nCALVINIZE\nCALVINIZES\nCALYPSO\nCAM\nCAMBODIA\nCAMBRIAN\nCAMBRIDGE\nCAMDEN\nCAME\nCAMEL\nCAMELOT\nCAMELS\nCAMEMBERT\nCAMERA\nCAMERAMAN\nCAMERAMEN\nCAMERAS\nCAMERON\nCAMEROON\nCAMEROUN\nCAMILLA\nCAMILLE\nCAMINO\nCAMOUFLAGE\nCAMOUFLAGED\nCAMOUFLAGES\nCAMOUFLAGING\nCAMP\nCAMPAIGN\nCAMPAIGNED\nCAMPAIGNER\nCAMPAIGNERS\nCAMPAIGNING\nCAMPAIGNS\nCAMPBELL\nCAMPBELLSPORT\nCAMPED\nCAMPER\nCAMPERS\nCAMPFIRE\nCAMPGROUND\nCAMPING\nCAMPS\nCAMPSITE\nCAMPUS\nCAMPUSES\nCAN\nCANAAN\nCANADA\nCANADIAN\nCANADIANIZATION\nCANADIANIZATIONS\nCANADIANIZE\nCANADIANIZES\nCANADIANS\nCANAL\nCANALS\nCANARIES\nCANARY\nCANAVERAL\nCANBERRA\nCANCEL\nCANCELED\nCANCELING\nCANCELLATION\nCANCELLATIONS\nCANCELS\nCANCER\nCANCEROUS\nCANCERS\nCANDACE\nCANDID\nCANDIDACY\nCANDIDATE\nCANDIDATES\nCANDIDE\nCANDIDLY\nCANDIDNESS\nCANDIED\nCANDIES\nCANDLE\nCANDLELIGHT\nCANDLER\nCANDLES\nCANDLESTICK\nCANDLESTICKS\nCANDLEWICK\nCANDOR\nCANDY\nCANE\nCANER\nCANFIELD\nCANINE\nCANIS\nCANISTER\nCANKER\nCANKERWORM\nCANNABIS\nCANNED\nCANNEL\nCANNER\nCANNERS\nCANNERY\nCANNIBAL\nCANNIBALIZE\nCANNIBALIZED\nCANNIBALIZES\nCANNIBALIZING\nCANNIBALS\nCANNING\nCANNISTER\nCANNISTERS\nCANNON\nCANNONBALL\nCANNONS\nCANNOT\nCANNY\nCANOE\nCANOES\nCANOGA\nCANON\nCANONIC\nCANONICAL\nCANONICALIZATION\nCANONICALIZE\nCANONICALIZED\nCANONICALIZES\nCANONICALIZING\nCANONICALLY\nCANONICALS\nCANONS\nCANOPUS\nCANOPY\nCANS\nCANT\nCANTABRIGIAN\nCANTALOUPE\nCANTANKEROUS\nCANTANKEROUSLY\nCANTEEN\nCANTERBURY\nCANTILEVER\nCANTO\nCANTON\nCANTONESE\nCANTONS\nCANTOR\nCANTORS\nCANUTE\nCANVAS\nCANVASES\nCANVASS\nCANVASSED\nCANVASSER\nCANVASSERS\nCANVASSES\nCANVASSING\nCANYON\nCANYONS\nCAP\nCAPABILITIES\nCAPABILITY\nCAPABLE\nCAPABLY\nCAPACIOUS\nCAPACIOUSLY\nCAPACIOUSNESS\nCAPACITANCE\nCAPACITANCES\nCAPACITIES\nCAPACITIVE\nCAPACITOR\nCAPACITORS\nCAPACITY\nCAPE\nCAPER\nCAPERS\nCAPES\nCAPET\nCAPETOWN\nCAPILLARY\nCAPISTRANO\nCAPITA\nCAPITAL\nCAPITALISM\nCAPITALIST\nCAPITALISTS\nCAPITALIZATION\nCAPITALIZATIONS\nCAPITALIZE\nCAPITALIZED\nCAPITALIZER\nCAPITALIZERS\nCAPITALIZES\nCAPITALIZING\nCAPITALLY\nCAPITALS\nCAPITAN\nCAPITOL\nCAPITOLINE\nCAPITOLS\nCAPPED\nCAPPING\nCAPPY\nCAPRICE\nCAPRICIOUS\nCAPRICIOUSLY\nCAPRICIOUSNESS\nCAPRICORN\nCAPS\nCAPSICUM\nCAPSTAN\nCAPSTONE\nCAPSULE\nCAPTAIN\nCAPTAINED\nCAPTAINING\nCAPTAINS\nCAPTION\nCAPTIONS\nCAPTIVATE\nCAPTIVATED\nCAPTIVATES\nCAPTIVATING\nCAPTIVATION\nCAPTIVE\nCAPTIVES\nCAPTIVITY\nCAPTOR\nCAPTORS\nCAPTURE\nCAPTURED\nCAPTURER\nCAPTURERS\nCAPTURES\nCAPTURING\nCAPUTO\nCAPYBARA\nCAR\nCARACAS\nCARAMEL\nCARAVAN\nCARAVANS\nCARAWAY\nCARBOHYDRATE\nCARBOLIC\nCARBOLOY\nCARBON\nCARBONATE\nCARBONATES\nCARBONATION\nCARBONDALE\nCARBONE\nCARBONES\nCARBONIC\nCARBONIZATION\nCARBONIZE\nCARBONIZED\nCARBONIZER\nCARBONIZERS\nCARBONIZES\nCARBONIZING\nCARBONS\nCARBORUNDUM\nCARBUNCLE\nCARCASS\nCARCASSES\nCARCINOGEN\nCARCINOGENIC\nCARCINOMA\nCARD\nCARDBOARD\nCARDER\nCARDIAC\nCARDIFF\nCARDINAL\nCARDINALITIES\nCARDINALITY\nCARDINALLY\nCARDINALS\nCARDIOD\nCARDIOLOGY\nCARDIOVASCULAR\nCARDS\nCARE\nCARED\nCAREEN\nCAREER\nCAREERS\nCAREFREE\nCAREFUL\nCAREFULLY\nCAREFULNESS\nCARELESS\nCARELESSLY\nCARELESSNESS\nCARES\nCARESS\nCARESSED\nCARESSER\nCARESSES\nCARESSING\nCARET\nCARETAKER\nCAREY\nCARGILL\nCARGO\nCARGOES\nCARIB\nCARIBBEAN\nCARIBOU\nCARICATURE\nCARING\nCARL\nCARLA\nCARLETON\nCARLETONIAN\nCARLIN\nCARLISLE\nCARLO\nCARLOAD\nCARLSBAD\nCARLSBADS\nCARLSON\nCARLTON\nCARLYLE\nCARMELA\nCARMEN\nCARMICHAEL\nCARNAGE\nCARNAL\nCARNATION\nCARNEGIE\nCARNIVAL\nCARNIVALS\nCARNIVOROUS\nCARNIVOROUSLY\nCAROL\nCAROLINA\nCAROLINAS\nCAROLINE\nCAROLINGIAN\nCAROLINIAN\nCAROLINIANS\nCAROLS\nCAROLYN\nCARP\nCARPATHIA\nCARPATHIANS\nCARPENTER\nCARPENTERS\nCARPENTRY\nCARPET\nCARPETED\nCARPETING\nCARPETS\nCARPORT\nCARR\nCARRARA\nCARRIAGE\nCARRIAGES\nCARRIE\nCARRIED\nCARRIER\nCARRIERS\nCARRIES\nCARRION\nCARROLL\nCARROT\nCARROTS\nCARRUTHERS\nCARRY\nCARRYING\nCARRYOVER\nCARRYOVERS\nCARS\nCARSON\nCART\nCARTED\nCARTEL\nCARTER\nCARTERS\nCARTESIAN\nCARTHAGE\nCARTHAGINIAN\nCARTILAGE\nCARTING\nCARTOGRAPHER\nCARTOGRAPHIC\nCARTOGRAPHY\nCARTON\nCARTONS\nCARTOON\nCARTOONS\nCARTRIDGE\nCARTRIDGES\nCARTS\nCARTWHEEL\nCARTY\nCARUSO\nCARVE\nCARVED\nCARVER\nCARVES\nCARVING\nCARVINGS\nCASANOVA\nCASCADABLE\nCASCADE\nCASCADED\nCASCADES\nCASCADING\nCASE\nCASED\nCASEMENT\nCASEMENTS\nCASES\nCASEWORK\nCASEY\nCASH\nCASHED\nCASHER\nCASHERS\nCASHES\nCASHEW\nCASHIER\nCASHIERS\nCASHING\nCASHMERE\nCASING\nCASINGS\nCASINO\nCASK\nCASKET\nCASKETS\nCASKS\nCASPIAN\nCASSANDRA\nCASSEROLE\nCASSEROLES\nCASSETTE\nCASSIOPEIA\nCASSITE\nCASSITES\nCASSIUS\nCASSOCK\nCAST\nCASTE\nCASTER\nCASTERS\nCASTES\nCASTIGATE\nCASTILLO\nCASTING\nCASTLE\nCASTLED\nCASTLES\nCASTOR\nCASTRO\nCASTROISM\nCASTS\nCASUAL\nCASUALLY\nCASUALNESS\nCASUALS\nCASUALTIES\nCASUALTY\nCAT\nCATACLYSMIC\nCATALAN\nCATALINA\nCATALOG\nCATALOGED\nCATALOGER\nCATALOGING\nCATALOGS\nCATALONIA\nCATALYST\nCATALYSTS\nCATALYTIC\nCATAPULT\nCATARACT\nCATASTROPHE\nCATASTROPHES\nCATASTROPHIC\nCATAWBA\nCATCH\nCATCHABLE\nCATCHER\nCATCHERS\nCATCHES\nCATCHING\nCATEGORICAL\nCATEGORICALLY\nCATEGORIES\nCATEGORIZATION\nCATEGORIZE\nCATEGORIZED\nCATEGORIZER\nCATEGORIZERS\nCATEGORIZES\nCATEGORIZING\nCATEGORY\nCATER\nCATERED\nCATERER\nCATERING\nCATERPILLAR\nCATERPILLARS\nCATERS\nCATHEDRAL\nCATHEDRALS\nCATHERINE\nCATHERWOOD\nCATHETER\nCATHETERS\nCATHODE\nCATHODES\nCATHOLIC\nCATHOLICISM\nCATHOLICISMS\nCATHOLICS\nCATHY\nCATLIKE\nCATNIP\nCATS\nCATSKILL\nCATSKILLS\nCATSUP\nCATTAIL\nCATTLE\nCATTLEMAN\nCATTLEMEN\nCAUCASIAN\nCAUCASIANS\nCAUCASUS\nCAUCHY\nCAUCUS\nCAUGHT\nCAULDRON\nCAULDRONS\nCAULIFLOWER\nCAULK\nCAUSAL\nCAUSALITY\nCAUSALLY\nCAUSATION\nCAUSATIONS\nCAUSE\nCAUSED\nCAUSER\nCAUSES\nCAUSEWAY\nCAUSEWAYS\nCAUSING\nCAUSTIC\nCAUSTICLY\nCAUSTICS\nCAUTION\nCAUTIONED\nCAUTIONER\nCAUTIONERS\nCAUTIONING\nCAUTIONINGS\nCAUTIONS\nCAUTIOUS\nCAUTIOUSLY\nCAUTIOUSNESS\nCAVALIER\nCAVALIERLY\nCAVALIERNESS\nCAVALRY\nCAVE\nCAVEAT\nCAVEATS\nCAVED\nCAVEMAN\nCAVEMEN\nCAVENDISH\nCAVERN\nCAVERNOUS\nCAVERNS\nCAVES\nCAVIAR\nCAVIL\nCAVINESS\nCAVING\nCAVITIES\nCAVITY\nCAW\nCAWING\nCAYLEY\nCAYUGA\nCEASE\nCEASED\nCEASELESS\nCEASELESSLY\nCEASELESSNESS\nCEASES\nCEASING\nCECIL\nCECILIA\nCECROPIA\nCEDAR\nCEDE\nCEDED\nCEDING\nCEDRIC\nCEILING\nCEILINGS\nCELANESE\nCELEBES\nCELEBRATE\nCELEBRATED\nCELEBRATES\nCELEBRATING\nCELEBRATION\nCELEBRATIONS\nCELEBRITIES\nCELEBRITY\nCELERITY\nCELERY\nCELESTE\nCELESTIAL\nCELESTIALLY\nCELIA\nCELL\nCELLAR\nCELLARS\nCELLED\nCELLIST\nCELLISTS\nCELLOPHANE\nCELLS\nCELLULAR\nCELLULOSE\nCELSIUS\nCELT\nCELTIC\nCELTICIZE\nCELTICIZES\nCEMENT\nCEMENTED\nCEMENTING\nCEMENTS\nCEMETERIES\nCEMETERY\nCENOZOIC\nCENSOR\nCENSORED\nCENSORING\nCENSORS\nCENSORSHIP\nCENSURE\nCENSURED\nCENSURER\nCENSURES\nCENSUS\nCENSUSES\nCENT\nCENTAUR\nCENTENARY\nCENTENNIAL\nCENTER\nCENTERED\nCENTERING\nCENTERPIECE\nCENTERPIECES\nCENTERS\nCENTIGRADE\nCENTIMETER\nCENTIMETERS\nCENTIPEDE\nCENTIPEDES\nCENTRAL\nCENTRALIA\nCENTRALISM\nCENTRALIST\nCENTRALIZATION\nCENTRALIZE\nCENTRALIZED\nCENTRALIZES\nCENTRALIZING\nCENTRALLY\nCENTREX\nCENTREX\nCENTRIFUGAL\nCENTRIFUGE\nCENTRIPETAL\nCENTRIST\nCENTROID\nCENTS\nCENTURIES\nCENTURY\nCEPHEUS\nCERAMIC\nCERBERUS\nCEREAL\nCEREALS\nCEREBELLUM\nCEREBRAL\nCEREMONIAL\nCEREMONIALLY\nCEREMONIALNESS\nCEREMONIES\nCEREMONY\nCERES\nCERN\nCERTAIN\nCERTAINLY\nCERTAINTIES\nCERTAINTY\nCERTIFIABLE\nCERTIFICATE\nCERTIFICATES\nCERTIFICATION\nCERTIFICATIONS\nCERTIFIED\nCERTIFIER\nCERTIFIERS\nCERTIFIES\nCERTIFY\nCERTIFYING\nCERVANTES\nCESARE\nCESSATION\nCESSATIONS\nCESSNA\nCETUS\nCEYLON\nCEZANNE\nCEZANNES\nCHABLIS\nCHABLISES\nCHAD\nCHADWICK\nCHAFE\nCHAFER\nCHAFF\nCHAFFER\nCHAFFEY\nCHAFFING\nCHAFING\nCHAGRIN\nCHAIN\nCHAINED\nCHAINING\nCHAINS\nCHAIR\nCHAIRED\nCHAIRING\nCHAIRLADY\nCHAIRMAN\nCHAIRMEN\nCHAIRPERSON\nCHAIRPERSONS\nCHAIRS\nCHAIRWOMAN\nCHAIRWOMEN\nCHALICE\nCHALICES\nCHALK\nCHALKED\nCHALKING\nCHALKS\nCHALLENGE\nCHALLENGED\nCHALLENGER\nCHALLENGERS\nCHALLENGES\nCHALLENGING\nCHALMERS\nCHAMBER\nCHAMBERED\nCHAMBERLAIN\nCHAMBERLAINS\nCHAMBERMAID\nCHAMBERS\nCHAMELEON\nCHAMPAGNE\nCHAMPAIGN\nCHAMPION\nCHAMPIONED\nCHAMPIONING\nCHAMPIONS\nCHAMPIONSHIP\nCHAMPIONSHIPS\nCHAMPLAIN\nCHANCE\nCHANCED\nCHANCELLOR\nCHANCELLORSVILLE\nCHANCERY\nCHANCES\nCHANCING\nCHANDELIER\nCHANDELIERS\nCHANDIGARH\nCHANG\nCHANGE\nCHANGEABILITY\nCHANGEABLE\nCHANGEABLY\nCHANGED\nCHANGEOVER\nCHANGER\nCHANGERS\nCHANGES\nCHANGING\nCHANNEL\nCHANNELED\nCHANNELING\nCHANNELLED\nCHANNELLER\nCHANNELLERS\nCHANNELLING\nCHANNELS\nCHANNING\nCHANT\nCHANTED\nCHANTER\nCHANTICLEER\nCHANTICLEERS\nCHANTILLY\nCHANTING\nCHANTS\nCHAO\nCHAOS\nCHAOTIC\nCHAP\nCHAPEL\nCHAPELS\nCHAPERON\nCHAPERONE\nCHAPERONED\nCHAPLAIN\nCHAPLAINS\nCHAPLIN\nCHAPMAN\nCHAPS\nCHAPTER\nCHAPTERS\nCHAR\nCHARACTER\nCHARACTERISTIC\nCHARACTERISTICALLY\nCHARACTERISTICS\nCHARACTERIZABLE\nCHARACTERIZATION\nCHARACTERIZATIONS\nCHARACTERIZE\nCHARACTERIZED\nCHARACTERIZER\nCHARACTERIZERS\nCHARACTERIZES\nCHARACTERIZING\nCHARACTERS\nCHARCOAL\nCHARCOALED\nCHARGE\nCHARGEABLE\nCHARGED\nCHARGER\nCHARGERS\nCHARGES\nCHARGING\nCHARIOT\nCHARIOTS\nCHARISMA\nCHARISMATIC\nCHARITABLE\nCHARITABLENESS\nCHARITIES\nCHARITY\nCHARLEMAGNE\nCHARLEMAGNES\nCHARLES\nCHARLESTON\nCHARLEY\nCHARLIE\nCHARLOTTE\nCHARLOTTESVILLE\nCHARM\nCHARMED\nCHARMER\nCHARMERS\nCHARMING\nCHARMINGLY\nCHARMS\nCHARON\nCHARS\nCHART\nCHARTA\nCHARTABLE\nCHARTED\nCHARTER\nCHARTERED\nCHARTERING\nCHARTERS\nCHARTING\nCHARTINGS\nCHARTRES\nCHARTREUSE\nCHARTS\nCHARYBDIS\nCHASE\nCHASED\nCHASER\nCHASERS\nCHASES\nCHASING\nCHASM\nCHASMS\nCHASSIS\nCHASTE\nCHASTELY\nCHASTENESS\nCHASTISE\nCHASTISED\nCHASTISER\nCHASTISERS\nCHASTISES\nCHASTISING\nCHASTITY\nCHAT\nCHATEAU\nCHATEAUS\nCHATHAM\nCHATTAHOOCHEE\nCHATTANOOGA\nCHATTEL\nCHATTER\nCHATTERED\nCHATTERER\nCHATTERING\nCHATTERS\nCHATTING\nCHATTY\nCHAUCER\nCHAUFFEUR\nCHAUFFEURED\nCHAUNCEY\nCHAUTAUQUA\nCHEAP\nCHEAPEN\nCHEAPENED\nCHEAPENING\nCHEAPENS\nCHEAPER\nCHEAPEST\nCHEAPLY\nCHEAPNESS\nCHEAT\nCHEATED\nCHEATER\nCHEATERS\nCHEATING\nCHEATS\nCHECK\nCHECKABLE\nCHECKBOOK\nCHECKBOOKS\nCHECKED\nCHECKER\nCHECKERBOARD\nCHECKERBOARDED\nCHECKERBOARDING\nCHECKERS\nCHECKING\nCHECKLIST\nCHECKOUT\nCHECKPOINT\nCHECKPOINTS\nCHECKS\nCHECKSUM\nCHECKSUMMED\nCHECKSUMMING\nCHECKSUMS\nCHECKUP\nCHEEK\nCHEEKBONE\nCHEEKS\nCHEEKY\nCHEER\nCHEERED\nCHEERER\nCHEERFUL\nCHEERFULLY\nCHEERFULNESS\nCHEERILY\nCHEERINESS\nCHEERING\nCHEERLEADER\nCHEERLESS\nCHEERLESSLY\nCHEERLESSNESS\nCHEERS\nCHEERY\nCHEESE\nCHEESECLOTH\nCHEESES\nCHEESY\nCHEETAH\nCHEF\nCHEFS\nCHEKHOV\nCHELSEA\nCHEMICAL\nCHEMICALLY\nCHEMICALS\nCHEMISE\nCHEMIST\nCHEMISTRIES\nCHEMISTRY\nCHEMISTS\nCHEN\nCHENEY\nCHENG\nCHERISH\nCHERISHED\nCHERISHES\nCHERISHING\nCHERITON\nCHEROKEE\nCHEROKEES\nCHERRIES\nCHERRY\nCHERUB\nCHERUBIM\nCHERUBS\nCHERYL\nCHESAPEAKE\nCHESHIRE\nCHESS\nCHEST\nCHESTER\nCHESTERFIELD\nCHESTERTON\nCHESTNUT\nCHESTNUTS\nCHESTS\nCHEVROLET\nCHEVY\nCHEW\nCHEWED\nCHEWER\nCHEWERS\nCHEWING\nCHEWS\nCHEYENNE\nCHEYENNES\nCHIANG\nCHIC\nCHICAGO\nCHICAGOAN\nCHICAGOANS\nCHICANA\nCHICANAS\nCHICANERY\nCHICANO\nCHICANOS\nCHICK\nCHICKADEE\nCHICKADEES\nCHICKASAWS\nCHICKEN\nCHICKENS\nCHICKS\nCHIDE\nCHIDED\nCHIDES\nCHIDING\nCHIEF\nCHIEFLY\nCHIEFS\nCHIEFTAIN\nCHIEFTAINS\nCHIFFON\nCHILD\nCHILDBIRTH\nCHILDHOOD\nCHILDISH\nCHILDISHLY\nCHILDISHNESS\nCHILDLIKE\nCHILDREN\nCHILE\nCHILEAN\nCHILES\nCHILI\nCHILL\nCHILLED\nCHILLER\nCHILLERS\nCHILLIER\nCHILLINESS\nCHILLING\nCHILLINGLY\nCHILLS\nCHILLY\nCHIME\nCHIMERA\nCHIMES\nCHIMNEY\nCHIMNEYS\nCHIMPANZEE\nCHIN\nCHINA\nCHINAMAN\nCHINAMEN\nCHINAS\nCHINATOWN\nCHINESE\nCHING\nCHINK\nCHINKED\nCHINKS\nCHINNED\nCHINNER\nCHINNERS\nCHINNING\nCHINOOK\nCHINS\nCHINTZ\nCHIP\nCHIPMUNK\nCHIPMUNKS\nCHIPPENDALE\nCHIPPEWA\nCHIPS\nCHIROPRACTOR\nCHIRP\nCHIRPED\nCHIRPING\nCHIRPS\nCHISEL\nCHISELED\nCHISELER\nCHISELS\nCHISHOLM\nCHIT\nCHIVALROUS\nCHIVALROUSLY\nCHIVALROUSNESS\nCHIVALRY\nCHLOE\nCHLORINE\nCHLOROFORM\nCHLOROPHYLL\nCHLOROPLAST\nCHLOROPLASTS\nCHOCK\nCHOCKS\nCHOCOLATE\nCHOCOLATES\nCHOCTAW\nCHOCTAWS\nCHOICE\nCHOICES\nCHOICEST\nCHOIR\nCHOIRS\nCHOKE\nCHOKED\nCHOKER\nCHOKERS\nCHOKES\nCHOKING\nCHOLERA\nCHOMSKY\nCHOOSE\nCHOOSER\nCHOOSERS\nCHOOSES\nCHOOSING\nCHOP\nCHOPIN\nCHOPPED\nCHOPPER\nCHOPPERS\nCHOPPING\nCHOPPY\nCHOPS\nCHORAL\nCHORD\nCHORDATE\nCHORDED\nCHORDING\nCHORDS\nCHORE\nCHOREOGRAPH\nCHOREOGRAPHY\nCHORES\nCHORING\nCHORTLE\nCHORUS\nCHORUSED\nCHORUSES\nCHOSE\nCHOSEN\nCHOU\nCHOWDER\nCHRIS\nCHRIST\nCHRISTEN\nCHRISTENDOM\nCHRISTENED\nCHRISTENING\nCHRISTENS\nCHRISTENSEN\nCHRISTENSON\nCHRISTIAN\nCHRISTIANA\nCHRISTIANITY\nCHRISTIANIZATION\nCHRISTIANIZATIONS\nCHRISTIANIZE\nCHRISTIANIZER\nCHRISTIANIZERS\nCHRISTIANIZES\nCHRISTIANIZING\nCHRISTIANS\nCHRISTIANSEN\nCHRISTIANSON\nCHRISTIE\nCHRISTINA\nCHRISTINE\nCHRISTLIKE\nCHRISTMAS\nCHRISTOFFEL\nCHRISTOPH\nCHRISTOPHER\nCHRISTY\nCHROMATOGRAM\nCHROMATOGRAPH\nCHROMATOGRAPHY\nCHROME\nCHROMIUM\nCHROMOSPHERE\nCHRONIC\nCHRONICLE\nCHRONICLED\nCHRONICLER\nCHRONICLERS\nCHRONICLES\nCHRONOGRAPH\nCHRONOGRAPHY\nCHRONOLOGICAL\nCHRONOLOGICALLY\nCHRONOLOGIES\nCHRONOLOGY\nCHRYSANTHEMUM\nCHRYSLER\nCHUBBIER\nCHUBBIEST\nCHUBBINESS\nCHUBBY\nCHUCK\nCHUCKLE\nCHUCKLED\nCHUCKLES\nCHUCKS\nCHUM\nCHUNGKING\nCHUNK\nCHUNKS\nCHUNKY\nCHURCH\nCHURCHES\nCHURCHGOER\nCHURCHGOING\nCHURCHILL\nCHURCHILLIAN\nCHURCHLY\nCHURCHMAN\nCHURCHMEN\nCHURCHWOMAN\nCHURCHWOMEN\nCHURCHYARD\nCHURCHYARDS\nCHURN\nCHURNED\nCHURNING\nCHURNS\nCHUTE\nCHUTES\nCHUTZPAH\nCICADA\nCICERO\nCICERONIAN\nCICERONIANIZE\nCICERONIANIZES\nCIDER\nCIGAR\nCIGARETTE\nCIGARETTES\nCIGARS\nCILIA\nCINCINNATI\nCINDER\nCINDERELLA\nCINDERS\nCINDY\nCINEMA\nCINEMATIC\nCINERAMA\nCINNAMON\nCIPHER\nCIPHERS\nCIPHERTEXT\nCIPHERTEXTS\nCIRCA\nCIRCE\nCIRCLE\nCIRCLED\nCIRCLES\nCIRCLET\nCIRCLING\nCIRCUIT\nCIRCUITOUS\nCIRCUITOUSLY\nCIRCUITRY\nCIRCUITS\nCIRCULANT\nCIRCULAR\nCIRCULARITY\nCIRCULARLY\nCIRCULATE\nCIRCULATED\nCIRCULATES\nCIRCULATING\nCIRCULATION\nCIRCUMCISE\nCIRCUMCISION\nCIRCUMFERENCE\nCIRCUMFLEX\nCIRCUMLOCUTION\nCIRCUMLOCUTIONS\nCIRCUMNAVIGATE\nCIRCUMNAVIGATED\nCIRCUMNAVIGATES\nCIRCUMPOLAR\nCIRCUMSCRIBE\nCIRCUMSCRIBED\nCIRCUMSCRIBING\nCIRCUMSCRIPTION\nCIRCUMSPECT\nCIRCUMSPECTION\nCIRCUMSPECTLY\nCIRCUMSTANCE\nCIRCUMSTANCED\nCIRCUMSTANCES\nCIRCUMSTANTIAL\nCIRCUMSTANTIALLY\nCIRCUMVENT\nCIRCUMVENTABLE\nCIRCUMVENTED\nCIRCUMVENTING\nCIRCUMVENTS\nCIRCUS\nCIRCUSES\nCISTERN\nCISTERNS\nCITADEL\nCITADELS\nCITATION\nCITATIONS\nCITE\nCITED\nCITES\nCITIES\nCITING\nCITIZEN\nCITIZENS\nCITIZENSHIP\nCITROEN\nCITRUS\nCITY\nCITYSCAPE\nCITYWIDE\nCIVET\nCIVIC\nCIVICS\nCIVIL\nCIVILIAN\nCIVILIANS\nCIVILITY\nCIVILIZATION\nCIVILIZATIONS\nCIVILIZE\nCIVILIZED\nCIVILIZES\nCIVILIZING\nCIVILLY\nCLAD\nCLADDING\nCLAIM\nCLAIMABLE\nCLAIMANT\nCLAIMANTS\nCLAIMED\nCLAIMING\nCLAIMS\nCLAIRE\nCLAIRVOYANT\nCLAIRVOYANTLY\nCLAM\nCLAMBER\nCLAMBERED\nCLAMBERING\nCLAMBERS\nCLAMOR\nCLAMORED\nCLAMORING\nCLAMOROUS\nCLAMORS\nCLAMP\nCLAMPED\nCLAMPING\nCLAMPS\nCLAMS\nCLAN\nCLANDESTINE\nCLANG\nCLANGED\nCLANGING\nCLANGS\nCLANK\nCLANNISH\nCLAP\nCLAPBOARD\nCLAPEYRON\nCLAPPING\nCLAPS\nCLARA\nCLARE\nCLAREMONT\nCLARENCE\nCLARENDON\nCLARIFICATION\nCLARIFICATIONS\nCLARIFIED\nCLARIFIES\nCLARIFY\nCLARIFYING\nCLARINET\nCLARITY\nCLARK\nCLARKE\nCLARRIDGE\nCLASH\nCLASHED\nCLASHES\nCLASHING\nCLASP\nCLASPED\nCLASPING\nCLASPS\nCLASS\nCLASSED\nCLASSES\nCLASSIC\nCLASSICAL\nCLASSICALLY\nCLASSICS\nCLASSIFIABLE\nCLASSIFICATION\nCLASSIFICATIONS\nCLASSIFIED\nCLASSIFIER\nCLASSIFIERS\nCLASSIFIES\nCLASSIFY\nCLASSIFYING\nCLASSMATE\nCLASSMATES\nCLASSROOM\nCLASSROOMS\nCLASSY\nCLATTER\nCLATTERED\nCLATTERING\nCLAUDE\nCLAUDIA\nCLAUDIO\nCLAUS\nCLAUSE\nCLAUSEN\nCLAUSES\nCLAUSIUS\nCLAUSTROPHOBIA\nCLAUSTROPHOBIC\nCLAW\nCLAWED\nCLAWING\nCLAWS\nCLAY\nCLAYS\nCLAYTON\nCLEAN\nCLEANED\nCLEANER\nCLEANERS\nCLEANEST\nCLEANING\nCLEANLINESS\nCLEANLY\nCLEANNESS\nCLEANS\nCLEANSE\nCLEANSED\nCLEANSER\nCLEANSERS\nCLEANSES\nCLEANSING\nCLEANUP\nCLEAR\nCLEARANCE\nCLEARANCES\nCLEARED\nCLEARER\nCLEAREST\nCLEARING\nCLEARINGS\nCLEARLY\nCLEARNESS\nCLEARS\nCLEARWATER\nCLEAVAGE\nCLEAVE\nCLEAVED\nCLEAVER\nCLEAVERS\nCLEAVES\nCLEAVING\nCLEFT\nCLEFTS\nCLEMENCY\nCLEMENS\nCLEMENT\nCLEMENTE\nCLEMSON\nCLENCH\nCLENCHED\nCLENCHES\nCLERGY\nCLERGYMAN\nCLERGYMEN\nCLERICAL\nCLERK\nCLERKED\nCLERKING\nCLERKS\nCLEVELAND\nCLEVER\nCLEVERER\nCLEVEREST\nCLEVERLY\nCLEVERNESS\nCLICHE\nCLICHES\nCLICK\nCLICKED\nCLICKING\nCLICKS\nCLIENT\nCLIENTELE\nCLIENTS\nCLIFF\nCLIFFORD\nCLIFFS\nCLIFTON\nCLIMATE\nCLIMATES\nCLIMATIC\nCLIMATICALLY\nCLIMATOLOGY\nCLIMAX\nCLIMAXED\nCLIMAXES\nCLIMB\nCLIMBED\nCLIMBER\nCLIMBERS\nCLIMBING\nCLIMBS\nCLIME\nCLIMES\nCLINCH\nCLINCHED\nCLINCHER\nCLINCHES\nCLING\nCLINGING\nCLINGS\nCLINIC\nCLINICAL\nCLINICALLY\nCLINICIAN\nCLINICS\nCLINK\nCLINKED\nCLINKER\nCLINT\nCLINTON\nCLIO\nCLIP\nCLIPBOARD\nCLIPPED\nCLIPPER\nCLIPPERS\nCLIPPING\nCLIPPINGS\nCLIPS\nCLIQUE\nCLIQUES\nCLITORIS\nCLIVE\nCLOAK\nCLOAKROOM\nCLOAKS\nCLOBBER\nCLOBBERED\nCLOBBERING\nCLOBBERS\nCLOCK\nCLOCKED\nCLOCKER\nCLOCKERS\nCLOCKING\nCLOCKINGS\nCLOCKS\nCLOCKWATCHER\nCLOCKWISE\nCLOCKWORK\nCLOD\nCLODS\nCLOG\nCLOGGED\nCLOGGING\nCLOGS\nCLOISTER\nCLOISTERS\nCLONE\nCLONED\nCLONES\nCLONING\nCLOSE\nCLOSED\nCLOSELY\nCLOSENESS\nCLOSENESSES\nCLOSER\nCLOSERS\nCLOSES\nCLOSEST\nCLOSET\nCLOSETED\nCLOSETS\nCLOSEUP\nCLOSING\nCLOSURE\nCLOSURES\nCLOT\nCLOTH\nCLOTHE\nCLOTHED\nCLOTHES\nCLOTHESHORSE\nCLOTHESLINE\nCLOTHING\nCLOTHO\nCLOTTING\nCLOTURE\nCLOUD\nCLOUDBURST\nCLOUDED\nCLOUDIER\nCLOUDIEST\nCLOUDINESS\nCLOUDING\nCLOUDLESS\nCLOUDS\nCLOUDY\nCLOUT\nCLOVE\nCLOVER\nCLOVES\nCLOWN\nCLOWNING\nCLOWNS\nCLUB\nCLUBBED\nCLUBBING\nCLUBHOUSE\nCLUBROOM\nCLUBS\nCLUCK\nCLUCKED\nCLUCKING\nCLUCKS\nCLUE\nCLUES\nCLUJ\nCLUMP\nCLUMPED\nCLUMPING\nCLUMPS\nCLUMSILY\nCLUMSINESS\nCLUMSY\nCLUNG\nCLUSTER\nCLUSTERED\nCLUSTERING\nCLUSTERINGS\nCLUSTERS\nCLUTCH\nCLUTCHED\nCLUTCHES\nCLUTCHING\nCLUTTER\nCLUTTERED\nCLUTTERING\nCLUTTERS\nCLYDE\nCLYTEMNESTRA\nCOACH\nCOACHED\nCOACHER\nCOACHES\nCOACHING\nCOACHMAN\nCOACHMEN\nCOAGULATE\nCOAL\nCOALESCE\nCOALESCED\nCOALESCES\nCOALESCING\nCOALITION\nCOALS\nCOARSE\nCOARSELY\nCOARSEN\nCOARSENED\nCOARSENESS\nCOARSER\nCOARSEST\nCOAST\nCOASTAL\nCOASTED\nCOASTER\nCOASTERS\nCOASTING\nCOASTLINE\nCOASTS\nCOAT\nCOATED\nCOATES\nCOATING\nCOATINGS\nCOATS\nCOATTAIL\nCOAUTHOR\nCOAX\nCOAXED\nCOAXER\nCOAXES\nCOAXIAL\nCOAXING\nCOBALT\nCOBB\nCOBBLE\nCOBBLER\nCOBBLERS\nCOBBLESTONE\nCOBOL\nCOBOL\nCOBRA\nCOBWEB\nCOBWEBS\nCOCA\nCOCAINE\nCOCHISE\nCOCHRAN\nCOCHRANE\nCOCK\nCOCKED\nCOCKING\nCOCKPIT\nCOCKROACH\nCOCKS\nCOCKTAIL\nCOCKTAILS\nCOCKY\nCOCO\nCOCOA\nCOCONUT\nCOCONUTS\nCOCOON\nCOCOONS\nCOD\nCODDINGTON\nCODDLE\nCODE\nCODED\nCODEINE\nCODER\nCODERS\nCODES\nCODEWORD\nCODEWORDS\nCODFISH\nCODICIL\nCODIFICATION\nCODIFICATIONS\nCODIFIED\nCODIFIER\nCODIFIERS\nCODIFIES\nCODIFY\nCODIFYING\nCODING\nCODINGS\nCODPIECE\nCODY\nCOED\nCOEDITOR\nCOEDUCATION\nCOEFFICIENT\nCOEFFICIENTS\nCOEQUAL\nCOERCE\nCOERCED\nCOERCES\nCOERCIBLE\nCOERCING\nCOERCION\nCOERCIVE\nCOEXIST\nCOEXISTED\nCOEXISTENCE\nCOEXISTING\nCOEXISTS\nCOFACTOR\nCOFFEE\nCOFFEECUP\nCOFFEEPOT\nCOFFEES\nCOFFER\nCOFFERS\nCOFFEY\nCOFFIN\nCOFFINS\nCOFFMAN\nCOG\nCOGENT\nCOGENTLY\nCOGITATE\nCOGITATED\nCOGITATES\nCOGITATING\nCOGITATION\nCOGNAC\nCOGNITION\nCOGNITIVE\nCOGNITIVELY\nCOGNIZANCE\nCOGNIZANT\nCOGS\nCOHABITATION\nCOHABITATIONS\nCOHEN\nCOHERE\nCOHERED\nCOHERENCE\nCOHERENT\nCOHERENTLY\nCOHERES\nCOHERING\nCOHESION\nCOHESIVE\nCOHESIVELY\nCOHESIVENESS\nCOHN\nCOHORT\nCOIL\nCOILED\nCOILING\nCOILS\nCOIN\nCOINAGE\nCOINCIDE\nCOINCIDED\nCOINCIDENCE\nCOINCIDENCES\nCOINCIDENT\nCOINCIDENTAL\nCOINCIDES\nCOINCIDING\nCOINED\nCOINER\nCOINING\nCOINS\nCOKE\nCOKES\nCOLANDER\nCOLBY\nCOLD\nCOLDER\nCOLDEST\nCOLDLY\nCOLDNESS\nCOLDS\nCOLE\nCOLEMAN\nCOLERIDGE\nCOLETTE\nCOLGATE\nCOLICKY\nCOLIFORM\nCOLISEUM\nCOLLABORATE\nCOLLABORATED\nCOLLABORATES\nCOLLABORATING\nCOLLABORATION\nCOLLABORATIONS\nCOLLABORATIVE\nCOLLABORATOR\nCOLLABORATORS\nCOLLAGEN\nCOLLAPSE\nCOLLAPSED\nCOLLAPSES\nCOLLAPSIBLE\nCOLLAPSING\nCOLLAR\nCOLLARBONE\nCOLLARED\nCOLLARING\nCOLLARS\nCOLLATE\nCOLLATERAL\nCOLLEAGUE\nCOLLEAGUES\nCOLLECT\nCOLLECTED\nCOLLECTIBLE\nCOLLECTING\nCOLLECTION\nCOLLECTIONS\nCOLLECTIVE\nCOLLECTIVELY\nCOLLECTIVES\nCOLLECTOR\nCOLLECTORS\nCOLLECTS\nCOLLEGE\nCOLLEGES\nCOLLEGIAN\nCOLLEGIATE\nCOLLIDE\nCOLLIDED\nCOLLIDES\nCOLLIDING\nCOLLIE\nCOLLIER\nCOLLIES\nCOLLINS\nCOLLISION\nCOLLISIONS\nCOLLOIDAL\nCOLLOQUIA\nCOLLOQUIAL\nCOLLOQUIUM\nCOLLOQUY\nCOLLUSION\nCOLOGNE\nCOLOMBIA\nCOLOMBIAN\nCOLOMBIANS\nCOLOMBO\nCOLON\nCOLONEL\nCOLONELS\nCOLONIAL\nCOLONIALLY\nCOLONIALS\nCOLONIES\nCOLONIST\nCOLONISTS\nCOLONIZATION\nCOLONIZE\nCOLONIZED\nCOLONIZER\nCOLONIZERS\nCOLONIZES\nCOLONIZING\nCOLONS\nCOLONY\nCOLOR\nCOLORADO\nCOLORED\nCOLORER\nCOLORERS\nCOLORFUL\nCOLORING\nCOLORINGS\nCOLORLESS\nCOLORS\nCOLOSSAL\nCOLOSSEUM\nCOLT\nCOLTS\nCOLUMBIA\nCOLUMBIAN\nCOLUMBUS\nCOLUMN\nCOLUMNIZE\nCOLUMNIZED\nCOLUMNIZES\nCOLUMNIZING\nCOLUMNS\nCOMANCHE\nCOMB\nCOMBAT\nCOMBATANT\nCOMBATANTS\nCOMBATED\nCOMBATING\nCOMBATIVE\nCOMBATS\nCOMBED\nCOMBER\nCOMBERS\nCOMBINATION\nCOMBINATIONAL\nCOMBINATIONS\nCOMBINATOR\nCOMBINATORIAL\nCOMBINATORIALLY\nCOMBINATORIC\nCOMBINATORICS\nCOMBINATORS\nCOMBINE\nCOMBINED\nCOMBINES\nCOMBING\nCOMBINGS\nCOMBINING\nCOMBS\nCOMBUSTIBLE\nCOMBUSTION\nCOMDEX\nCOME\nCOMEBACK\nCOMEDIAN\nCOMEDIANS\nCOMEDIC\nCOMEDIES\nCOMEDY\nCOMELINESS\nCOMELY\nCOMER\nCOMERS\nCOMES\nCOMESTIBLE\nCOMET\nCOMETARY\nCOMETS\nCOMFORT\nCOMFORTABILITIES\nCOMFORTABILITY\nCOMFORTABLE\nCOMFORTABLY\nCOMFORTED\nCOMFORTER\nCOMFORTERS\nCOMFORTING\nCOMFORTINGLY\nCOMFORTS\nCOMIC\nCOMICAL\nCOMICALLY\nCOMICS\nCOMINFORM\nCOMING\nCOMINGS\nCOMMA\nCOMMAND\nCOMMANDANT\nCOMMANDANTS\nCOMMANDED\nCOMMANDEER\nCOMMANDER\nCOMMANDERS\nCOMMANDING\nCOMMANDINGLY\nCOMMANDMENT\nCOMMANDMENTS\nCOMMANDO\nCOMMANDS\nCOMMAS\nCOMMEMORATE\nCOMMEMORATED\nCOMMEMORATES\nCOMMEMORATING\nCOMMEMORATION\nCOMMEMORATIVE\nCOMMENCE\nCOMMENCED\nCOMMENCEMENT\nCOMMENCEMENTS\nCOMMENCES\nCOMMENCING\nCOMMEND\nCOMMENDATION\nCOMMENDATIONS\nCOMMENDED\nCOMMENDING\nCOMMENDS\nCOMMENSURATE\nCOMMENT\nCOMMENTARIES\nCOMMENTARY\nCOMMENTATOR\nCOMMENTATORS\nCOMMENTED\nCOMMENTING\nCOMMENTS\nCOMMERCE\nCOMMERCIAL\nCOMMERCIALLY\nCOMMERCIALNESS\nCOMMERCIALS\nCOMMISSION\nCOMMISSIONED\nCOMMISSIONER\nCOMMISSIONERS\nCOMMISSIONING\nCOMMISSIONS\nCOMMIT\nCOMMITMENT\nCOMMITMENTS\nCOMMITS\nCOMMITTED\nCOMMITTEE\nCOMMITTEEMAN\nCOMMITTEEMEN\nCOMMITTEES\nCOMMITTEEWOMAN\nCOMMITTEEWOMEN\nCOMMITTING\nCOMMODITIES\nCOMMODITY\nCOMMODORE\nCOMMODORES\nCOMMON\nCOMMONALITIES\nCOMMONALITY\nCOMMONER\nCOMMONERS\nCOMMONEST\nCOMMONLY\nCOMMONNESS\nCOMMONPLACE\nCOMMONPLACES\nCOMMONS\nCOMMONWEALTH\nCOMMONWEALTHS\nCOMMOTION\nCOMMUNAL\nCOMMUNALLY\nCOMMUNE\nCOMMUNES\nCOMMUNICANT\nCOMMUNICANTS\nCOMMUNICATE\nCOMMUNICATED\nCOMMUNICATES\nCOMMUNICATING\nCOMMUNICATION\nCOMMUNICATIONS\nCOMMUNICATIVE\nCOMMUNICATOR\nCOMMUNICATORS\nCOMMUNION\nCOMMUNIST\nCOMMUNISTS\nCOMMUNITIES\nCOMMUNITY\nCOMMUTATIVE\nCOMMUTATIVITY\nCOMMUTE\nCOMMUTED\nCOMMUTER\nCOMMUTERS\nCOMMUTES\nCOMMUTING\nCOMPACT\nCOMPACTED\nCOMPACTER\nCOMPACTEST\nCOMPACTING\nCOMPACTION\nCOMPACTLY\nCOMPACTNESS\nCOMPACTOR\nCOMPACTORS\nCOMPACTS\nCOMPANIES\nCOMPANION\nCOMPANIONABLE\nCOMPANIONS\nCOMPANIONSHIP\nCOMPANY\nCOMPARABILITY\nCOMPARABLE\nCOMPARABLY\nCOMPARATIVE\nCOMPARATIVELY\nCOMPARATIVES\nCOMPARATOR\nCOMPARATORS\nCOMPARE\nCOMPARED\nCOMPARES\nCOMPARING\nCOMPARISON\nCOMPARISONS\nCOMPARTMENT\nCOMPARTMENTALIZE\nCOMPARTMENTALIZED\nCOMPARTMENTALIZES\nCOMPARTMENTALIZING\nCOMPARTMENTED\nCOMPARTMENTS\nCOMPASS\nCOMPASSION\nCOMPASSIONATE\nCOMPASSIONATELY\nCOMPATIBILITIES\nCOMPATIBILITY\nCOMPATIBLE\nCOMPATIBLES\nCOMPATIBLY\nCOMPEL\nCOMPELLED\nCOMPELLING\nCOMPELLINGLY\nCOMPELS\nCOMPENDIUM\nCOMPENSATE\nCOMPENSATED\nCOMPENSATES\nCOMPENSATING\nCOMPENSATION\nCOMPENSATIONS\nCOMPENSATORY\nCOMPETE\nCOMPETED\nCOMPETENCE\nCOMPETENCY\nCOMPETENT\nCOMPETENTLY\nCOMPETES\nCOMPETING\nCOMPETITION\nCOMPETITIONS\nCOMPETITIVE\nCOMPETITIVELY\nCOMPETITOR\nCOMPETITORS\nCOMPILATION\nCOMPILATIONS\nCOMPILE\nCOMPILED\nCOMPILER\nCOMPILERS\nCOMPILES\nCOMPILING\nCOMPLACENCY\nCOMPLAIN\nCOMPLAINED\nCOMPLAINER\nCOMPLAINERS\nCOMPLAINING\nCOMPLAINS\nCOMPLAINT\nCOMPLAINTS\nCOMPLEMENT\nCOMPLEMENTARY\nCOMPLEMENTED\nCOMPLEMENTER\nCOMPLEMENTERS\nCOMPLEMENTING\nCOMPLEMENTS\nCOMPLETE\nCOMPLETED\nCOMPLETELY\nCOMPLETENESS\nCOMPLETES\nCOMPLETING\nCOMPLETION\nCOMPLETIONS\nCOMPLEX\nCOMPLEXES\nCOMPLEXION\nCOMPLEXITIES\nCOMPLEXITY\nCOMPLEXLY\nCOMPLIANCE\nCOMPLIANT\nCOMPLICATE\nCOMPLICATED\nCOMPLICATES\nCOMPLICATING\nCOMPLICATION\nCOMPLICATIONS\nCOMPLICATOR\nCOMPLICATORS\nCOMPLICITY\nCOMPLIED\nCOMPLIMENT\nCOMPLIMENTARY\nCOMPLIMENTED\nCOMPLIMENTER\nCOMPLIMENTERS\nCOMPLIMENTING\nCOMPLIMENTS\nCOMPLY\nCOMPLYING\nCOMPONENT\nCOMPONENTRY\nCOMPONENTS\nCOMPONENTWISE\nCOMPOSE\nCOMPOSED\nCOMPOSEDLY\nCOMPOSER\nCOMPOSERS\nCOMPOSES\nCOMPOSING\nCOMPOSITE\nCOMPOSITES\nCOMPOSITION\nCOMPOSITIONAL\nCOMPOSITIONS\nCOMPOST\nCOMPOSURE\nCOMPOUND\nCOMPOUNDED\nCOMPOUNDING\nCOMPOUNDS\nCOMPREHEND\nCOMPREHENDED\nCOMPREHENDING\nCOMPREHENDS\nCOMPREHENSIBILITY\nCOMPREHENSIBLE\nCOMPREHENSION\nCOMPREHENSIVE\nCOMPREHENSIVELY\nCOMPRESS\nCOMPRESSED\nCOMPRESSES\nCOMPRESSIBLE\nCOMPRESSING\nCOMPRESSION\nCOMPRESSIVE\nCOMPRESSOR\nCOMPRISE\nCOMPRISED\nCOMPRISES\nCOMPRISING\nCOMPROMISE\nCOMPROMISED\nCOMPROMISER\nCOMPROMISERS\nCOMPROMISES\nCOMPROMISING\nCOMPROMISINGLY\nCOMPTON\nCOMPTROLLER\nCOMPTROLLERS\nCOMPULSION\nCOMPULSIONS\nCOMPULSIVE\nCOMPULSORY\nCOMPUNCTION\nCOMPUSERVE\nCOMPUTABILITY\nCOMPUTABLE\nCOMPUTATION\nCOMPUTATIONAL\nCOMPUTATIONALLY\nCOMPUTATIONS\nCOMPUTE\nCOMPUTED\nCOMPUTER\nCOMPUTERIZE\nCOMPUTERIZED\nCOMPUTERIZES\nCOMPUTERIZING\nCOMPUTERS\nCOMPUTES\nCOMPUTING\nCOMRADE\nCOMRADELY\nCOMRADES\nCOMRADESHIP\nCON\nCONAKRY\nCONANT\nCONCATENATE\nCONCATENATED\nCONCATENATES\nCONCATENATING\nCONCATENATION\nCONCATENATIONS\nCONCAVE\nCONCEAL\nCONCEALED\nCONCEALER\nCONCEALERS\nCONCEALING\nCONCEALMENT\nCONCEALS\nCONCEDE\nCONCEDED\nCONCEDES\nCONCEDING\nCONCEIT\nCONCEITED\nCONCEITS\nCONCEIVABLE\nCONCEIVABLY\nCONCEIVE\nCONCEIVED\nCONCEIVES\nCONCEIVING\nCONCENTRATE\nCONCENTRATED\nCONCENTRATES\nCONCENTRATING\nCONCENTRATION\nCONCENTRATIONS\nCONCENTRATOR\nCONCENTRATORS\nCONCENTRIC\nCONCEPT\nCONCEPTION\nCONCEPTIONS\nCONCEPTS\nCONCEPTUAL\nCONCEPTUALIZATION\nCONCEPTUALIZATIONS\nCONCEPTUALIZE\nCONCEPTUALIZED\nCONCEPTUALIZES\nCONCEPTUALIZING\nCONCEPTUALLY\nCONCERN\nCONCERNED\nCONCERNEDLY\nCONCERNING\nCONCERNS\nCONCERT\nCONCERTED\nCONCERTMASTER\nCONCERTO\nCONCERTS\nCONCESSION\nCONCESSIONS\nCONCILIATE\nCONCILIATORY\nCONCISE\nCONCISELY\nCONCISENESS\nCONCLAVE\nCONCLUDE\nCONCLUDED\nCONCLUDES\nCONCLUDING\nCONCLUSION\nCONCLUSIONS\nCONCLUSIVE\nCONCLUSIVELY\nCONCOCT\nCONCOMITANT\nCONCORD\nCONCORDANT\nCONCORDE\nCONCORDIA\nCONCOURSE\nCONCRETE\nCONCRETELY\nCONCRETENESS\nCONCRETES\nCONCRETION\nCONCUBINE\nCONCUR\nCONCURRED\nCONCURRENCE\nCONCURRENCIES\nCONCURRENCY\nCONCURRENT\nCONCURRENTLY\nCONCURRING\nCONCURS\nCONCUSSION\nCONDEMN\nCONDEMNATION\nCONDEMNATIONS\nCONDEMNED\nCONDEMNER\nCONDEMNERS\nCONDEMNING\nCONDEMNS\nCONDENSATION\nCONDENSE\nCONDENSED\nCONDENSER\nCONDENSES\nCONDENSING\nCONDESCEND\nCONDESCENDING\nCONDITION\nCONDITIONAL\nCONDITIONALLY\nCONDITIONALS\nCONDITIONED\nCONDITIONER\nCONDITIONERS\nCONDITIONING\nCONDITIONS\nCONDOM\nCONDONE\nCONDONED\nCONDONES\nCONDONING\nCONDUCE\nCONDUCIVE\nCONDUCIVENESS\nCONDUCT\nCONDUCTANCE\nCONDUCTED\nCONDUCTING\nCONDUCTION\nCONDUCTIVE\nCONDUCTIVITY\nCONDUCTOR\nCONDUCTORS\nCONDUCTS\nCONDUIT\nCONE\nCONES\nCONESTOGA\nCONFECTIONERY\nCONFEDERACY\nCONFEDERATE\nCONFEDERATES\nCONFEDERATION\nCONFEDERATIONS\nCONFER\nCONFEREE\nCONFERENCE\nCONFERENCES\nCONFERRED\nCONFERRER\nCONFERRERS\nCONFERRING\nCONFERS\nCONFESS\nCONFESSED\nCONFESSES\nCONFESSING\nCONFESSION\nCONFESSIONS\nCONFESSOR\nCONFESSORS\nCONFIDANT\nCONFIDANTS\nCONFIDE\nCONFIDED\nCONFIDENCE\nCONFIDENCES\nCONFIDENT\nCONFIDENTIAL\nCONFIDENTIALITY\nCONFIDENTIALLY\nCONFIDENTLY\nCONFIDES\nCONFIDING\nCONFIDINGLY\nCONFIGURABLE\nCONFIGURATION\nCONFIGURATIONS\nCONFIGURE\nCONFIGURED\nCONFIGURES\nCONFIGURING\nCONFINE\nCONFINED\nCONFINEMENT\nCONFINEMENTS\nCONFINER\nCONFINES\nCONFINING\nCONFIRM\nCONFIRMATION\nCONFIRMATIONS\nCONFIRMATORY\nCONFIRMED\nCONFIRMING\nCONFIRMS\nCONFISCATE\nCONFISCATED\nCONFISCATES\nCONFISCATING\nCONFISCATION\nCONFISCATIONS\nCONFLAGRATION\nCONFLICT\nCONFLICTED\nCONFLICTING\nCONFLICTS\nCONFLUENT\nCONFOCAL\nCONFORM\nCONFORMAL\nCONFORMANCE\nCONFORMED\nCONFORMING\nCONFORMITY\nCONFORMS\nCONFOUND\nCONFOUNDED\nCONFOUNDING\nCONFOUNDS\nCONFRONT\nCONFRONTATION\nCONFRONTATIONS\nCONFRONTED\nCONFRONTER\nCONFRONTERS\nCONFRONTING\nCONFRONTS\nCONFUCIAN\nCONFUCIANISM\nCONFUCIUS\nCONFUSE\nCONFUSED\nCONFUSER\nCONFUSERS\nCONFUSES\nCONFUSING\nCONFUSINGLY\nCONFUSION\nCONFUSIONS\nCONGENIAL\nCONGENIALLY\nCONGENITAL\nCONGEST\nCONGESTED\nCONGESTION\nCONGESTIVE\nCONGLOMERATE\nCONGO\nCONGOLESE\nCONGRATULATE\nCONGRATULATED\nCONGRATULATION\nCONGRATULATIONS\nCONGRATULATORY\nCONGREGATE\nCONGREGATED\nCONGREGATES\nCONGREGATING\nCONGREGATION\nCONGREGATIONS\nCONGRESS\nCONGRESSES\nCONGRESSIONAL\nCONGRESSIONALLY\nCONGRESSMAN\nCONGRESSMEN\nCONGRESSWOMAN\nCONGRESSWOMEN\nCONGRUENCE\nCONGRUENT\nCONIC\nCONIFER\nCONIFEROUS\nCONJECTURE\nCONJECTURED\nCONJECTURES\nCONJECTURING\nCONJOINED\nCONJUGAL\nCONJUGATE\nCONJUNCT\nCONJUNCTED\nCONJUNCTION\nCONJUNCTIONS\nCONJUNCTIVE\nCONJUNCTIVELY\nCONJUNCTS\nCONJUNCTURE\nCONJURE\nCONJURED\nCONJURER\nCONJURES\nCONJURING\nCONKLIN\nCONLEY\nCONNALLY\nCONNECT\nCONNECTED\nCONNECTEDNESS\nCONNECTICUT\nCONNECTING\nCONNECTION\nCONNECTIONLESS\nCONNECTIONS\nCONNECTIVE\nCONNECTIVES\nCONNECTIVITY\nCONNECTOR\nCONNECTORS\nCONNECTS\nCONNELLY\nCONNER\nCONNIE\nCONNIVANCE\nCONNIVE\nCONNOISSEUR\nCONNOISSEURS\nCONNORS\nCONNOTATION\nCONNOTATIVE\nCONNOTE\nCONNOTED\nCONNOTES\nCONNOTING\nCONNUBIAL\nCONQUER\nCONQUERABLE\nCONQUERED\nCONQUERER\nCONQUERERS\nCONQUERING\nCONQUEROR\nCONQUERORS\nCONQUERS\nCONQUEST\nCONQUESTS\nCONRAD\nCONRAIL\nCONSCIENCE\nCONSCIENCES\nCONSCIENTIOUS\nCONSCIENTIOUSLY\nCONSCIOUS\nCONSCIOUSLY\nCONSCIOUSNESS\nCONSCRIPT\nCONSCRIPTION\nCONSECRATE\nCONSECRATION\nCONSECUTIVE\nCONSECUTIVELY\nCONSENSUAL\nCONSENSUS\nCONSENT\nCONSENTED\nCONSENTER\nCONSENTERS\nCONSENTING\nCONSENTS\nCONSEQUENCE\nCONSEQUENCES\nCONSEQUENT\nCONSEQUENTIAL\nCONSEQUENTIALITIES\nCONSEQUENTIALITY\nCONSEQUENTLY\nCONSEQUENTS\nCONSERVATION\nCONSERVATIONIST\nCONSERVATIONISTS\nCONSERVATIONS\nCONSERVATISM\nCONSERVATIVE\nCONSERVATIVELY\nCONSERVATIVES\nCONSERVATOR\nCONSERVE\nCONSERVED\nCONSERVES\nCONSERVING\nCONSIDER\nCONSIDERABLE\nCONSIDERABLY\nCONSIDERATE\nCONSIDERATELY\nCONSIDERATION\nCONSIDERATIONS\nCONSIDERED\nCONSIDERING\nCONSIDERS\nCONSIGN\nCONSIGNED\nCONSIGNING\nCONSIGNS\nCONSIST\nCONSISTED\nCONSISTENCY\nCONSISTENT\nCONSISTENTLY\nCONSISTING\nCONSISTS\nCONSOLABLE\nCONSOLATION\nCONSOLATIONS\nCONSOLE\nCONSOLED\nCONSOLER\nCONSOLERS\nCONSOLES\nCONSOLIDATE\nCONSOLIDATED\nCONSOLIDATES\nCONSOLIDATING\nCONSOLIDATION\nCONSOLING\nCONSOLINGLY\nCONSONANT\nCONSONANTS\nCONSORT\nCONSORTED\nCONSORTING\nCONSORTIUM\nCONSORTS\nCONSPICUOUS\nCONSPICUOUSLY\nCONSPIRACIES\nCONSPIRACY\nCONSPIRATOR\nCONSPIRATORS\nCONSPIRE\nCONSPIRED\nCONSPIRES\nCONSPIRING\nCONSTABLE\nCONSTABLES\nCONSTANCE\nCONSTANCY\nCONSTANT\nCONSTANTINE\nCONSTANTINOPLE\nCONSTANTLY\nCONSTANTS\nCONSTELLATION\nCONSTELLATIONS\nCONSTERNATION\nCONSTITUENCIES\nCONSTITUENCY\nCONSTITUENT\nCONSTITUENTS\nCONSTITUTE\nCONSTITUTED\nCONSTITUTES\nCONSTITUTING\nCONSTITUTION\nCONSTITUTIONAL\nCONSTITUTIONALITY\nCONSTITUTIONALLY\nCONSTITUTIONS\nCONSTITUTIVE\nCONSTRAIN\nCONSTRAINED\nCONSTRAINING\nCONSTRAINS\nCONSTRAINT\nCONSTRAINTS\nCONSTRICT\nCONSTRUCT\nCONSTRUCTED\nCONSTRUCTIBILITY\nCONSTRUCTIBLE\nCONSTRUCTING\nCONSTRUCTION\nCONSTRUCTIONS\nCONSTRUCTIVE\nCONSTRUCTIVELY\nCONSTRUCTOR\nCONSTRUCTORS\nCONSTRUCTS\nCONSTRUE\nCONSTRUED\nCONSTRUING\nCONSUL\nCONSULAR\nCONSULATE\nCONSULATES\nCONSULS\nCONSULT\nCONSULTANT\nCONSULTANTS\nCONSULTATION\nCONSULTATIONS\nCONSULTATIVE\nCONSULTED\nCONSULTING\nCONSULTS\nCONSUMABLE\nCONSUME\nCONSUMED\nCONSUMER\nCONSUMERS\nCONSUMES\nCONSUMING\nCONSUMMATE\nCONSUMMATED\nCONSUMMATELY\nCONSUMMATION\nCONSUMPTION\nCONSUMPTIONS\nCONSUMPTIVE\nCONSUMPTIVELY\nCONTACT\nCONTACTED\nCONTACTING\nCONTACTS\nCONTAGION\nCONTAGIOUS\nCONTAGIOUSLY\nCONTAIN\nCONTAINABLE\nCONTAINED\nCONTAINER\nCONTAINERS\nCONTAINING\nCONTAINMENT\nCONTAINMENTS\nCONTAINS\nCONTAMINATE\nCONTAMINATED\nCONTAMINATES\nCONTAMINATING\nCONTAMINATION\nCONTEMPLATE\nCONTEMPLATED\nCONTEMPLATES\nCONTEMPLATING\nCONTEMPLATION\nCONTEMPLATIONS\nCONTEMPLATIVE\nCONTEMPORARIES\nCONTEMPORARINESS\nCONTEMPORARY\nCONTEMPT\nCONTEMPTIBLE\nCONTEMPTUOUS\nCONTEMPTUOUSLY\nCONTEND\nCONTENDED\nCONTENDER\nCONTENDERS\nCONTENDING\nCONTENDS\nCONTENT\nCONTENTED\nCONTENTING\nCONTENTION\nCONTENTIONS\nCONTENTLY\nCONTENTMENT\nCONTENTS\nCONTEST\nCONTESTABLE\nCONTESTANT\nCONTESTED\nCONTESTER\nCONTESTERS\nCONTESTING\nCONTESTS\nCONTEXT\nCONTEXTS\nCONTEXTUAL\nCONTEXTUALLY\nCONTIGUITY\nCONTIGUOUS\nCONTIGUOUSLY\nCONTINENT\nCONTINENTAL\nCONTINENTALLY\nCONTINENTS\nCONTINGENCIES\nCONTINGENCY\nCONTINGENT\nCONTINGENTS\nCONTINUAL\nCONTINUALLY\nCONTINUANCE\nCONTINUANCES\nCONTINUATION\nCONTINUATIONS\nCONTINUE\nCONTINUED\nCONTINUES\nCONTINUING\nCONTINUITIES\nCONTINUITY\nCONTINUOUS\nCONTINUOUSLY\nCONTINUUM\nCONTORTIONS\nCONTOUR\nCONTOURED\nCONTOURING\nCONTOURS\nCONTRABAND\nCONTRACEPTION\nCONTRACEPTIVE\nCONTRACT\nCONTRACTED\nCONTRACTING\nCONTRACTION\nCONTRACTIONS\nCONTRACTOR\nCONTRACTORS\nCONTRACTS\nCONTRACTUAL\nCONTRACTUALLY\nCONTRADICT\nCONTRADICTED\nCONTRADICTING\nCONTRADICTION\nCONTRADICTIONS\nCONTRADICTORY\nCONTRADICTS\nCONTRADISTINCTION\nCONTRADISTINCTIONS\nCONTRAPOSITIVE\nCONTRAPOSITIVES\nCONTRAPTION\nCONTRAPTIONS\nCONTRARINESS\nCONTRARY\nCONTRAST\nCONTRASTED\nCONTRASTER\nCONTRASTERS\nCONTRASTING\nCONTRASTINGLY\nCONTRASTS\nCONTRIBUTE\nCONTRIBUTED\nCONTRIBUTES\nCONTRIBUTING\nCONTRIBUTION\nCONTRIBUTIONS\nCONTRIBUTOR\nCONTRIBUTORILY\nCONTRIBUTORS\nCONTRIBUTORY\nCONTRITE\nCONTRITION\nCONTRIVANCE\nCONTRIVANCES\nCONTRIVE\nCONTRIVED\nCONTRIVER\nCONTRIVES\nCONTRIVING\nCONTROL\nCONTROLLABILITY\nCONTROLLABLE\nCONTROLLABLY\nCONTROLLED\nCONTROLLER\nCONTROLLERS\nCONTROLLING\nCONTROLS\nCONTROVERSIAL\nCONTROVERSIES\nCONTROVERSY\nCONTROVERTIBLE\nCONTUMACIOUS\nCONTUMACY\nCONUNDRUM\nCONUNDRUMS\nCONVAIR\nCONVALESCENT\nCONVECT\nCONVENE\nCONVENED\nCONVENES\nCONVENIENCE\nCONVENIENCES\nCONVENIENT\nCONVENIENTLY\nCONVENING\nCONVENT\nCONVENTION\nCONVENTIONAL\nCONVENTIONALLY\nCONVENTIONS\nCONVENTS\nCONVERGE\nCONVERGED\nCONVERGENCE\nCONVERGENT\nCONVERGES\nCONVERGING\nCONVERSANT\nCONVERSANTLY\nCONVERSATION\nCONVERSATIONAL\nCONVERSATIONALLY\nCONVERSATIONS\nCONVERSE\nCONVERSED\nCONVERSELY\nCONVERSES\nCONVERSING\nCONVERSION\nCONVERSIONS\nCONVERT\nCONVERTED\nCONVERTER\nCONVERTERS\nCONVERTIBILITY\nCONVERTIBLE\nCONVERTING\nCONVERTS\nCONVEX\nCONVEY\nCONVEYANCE\nCONVEYANCES\nCONVEYED\nCONVEYER\nCONVEYERS\nCONVEYING\nCONVEYOR\nCONVEYS\nCONVICT\nCONVICTED\nCONVICTING\nCONVICTION\nCONVICTIONS\nCONVICTS\nCONVINCE\nCONVINCED\nCONVINCER\nCONVINCERS\nCONVINCES\nCONVINCING\nCONVINCINGLY\nCONVIVIAL\nCONVOKE\nCONVOLUTED\nCONVOLUTION\nCONVOY\nCONVOYED\nCONVOYING\nCONVOYS\nCONVULSE\nCONVULSION\nCONVULSIONS\nCONWAY\nCOO\nCOOING\nCOOK\nCOOKBOOK\nCOOKE\nCOOKED\nCOOKERY\nCOOKIE\nCOOKIES\nCOOKING\nCOOKS\nCOOKY\nCOOL\nCOOLED\nCOOLER\nCOOLERS\nCOOLEST\nCOOLEY\nCOOLIDGE\nCOOLIE\nCOOLIES\nCOOLING\nCOOLLY\nCOOLNESS\nCOOLS\nCOON\nCOONS\nCOOP\nCOOPED\nCOOPER\nCOOPERATE\nCOOPERATED\nCOOPERATES\nCOOPERATING\nCOOPERATION\nCOOPERATIONS\nCOOPERATIVE\nCOOPERATIVELY\nCOOPERATIVES\nCOOPERATOR\nCOOPERATORS\nCOOPERS\nCOOPS\nCOORDINATE\nCOORDINATED\nCOORDINATES\nCOORDINATING\nCOORDINATION\nCOORDINATIONS\nCOORDINATOR\nCOORDINATORS\nCOORS\nCOP\nCOPE\nCOPED\nCOPELAND\nCOPENHAGEN\nCOPERNICAN\nCOPERNICUS\nCOPES\nCOPIED\nCOPIER\nCOPIERS\nCOPIES\nCOPING\nCOPINGS\nCOPIOUS\nCOPIOUSLY\nCOPIOUSNESS\nCOPLANAR\nCOPPER\nCOPPERFIELD\nCOPPERHEAD\nCOPPERS\nCOPRA\nCOPROCESSOR\nCOPS\nCOPSE\nCOPY\nCOPYING\nCOPYRIGHT\nCOPYRIGHTABLE\nCOPYRIGHTED\nCOPYRIGHTS\nCOPYWRITER\nCOQUETTE\nCORAL\nCORBETT\nCORCORAN\nCORD\nCORDED\nCORDER\nCORDIAL\nCORDIALITY\nCORDIALLY\nCORDS\nCORE\nCORED\nCORER\nCORERS\nCORES\nCOREY\nCORIANDER\nCORING\nCORINTH\nCORINTHIAN\nCORINTHIANIZE\nCORINTHIANIZES\nCORINTHIANS\nCORIOLANUS\nCORK\nCORKED\nCORKER\nCORKERS\nCORKING\nCORKS\nCORKSCREW\nCORMORANT\nCORN\nCORNEA\nCORNELIA\nCORNELIAN\nCORNELIUS\nCORNELL\nCORNER\nCORNERED\nCORNERS\nCORNERSTONE\nCORNERSTONES\nCORNET\nCORNFIELD\nCORNFIELDS\nCORNING\nCORNISH\nCORNMEAL\nCORNS\nCORNSTARCH\nCORNUCOPIA\nCORNWALL\nCORNWALLIS\nCORNY\nCOROLLARIES\nCOROLLARY\nCORONADO\nCORONARIES\nCORONARY\nCORONATION\nCORONER\nCORONET\nCORONETS\nCOROUTINE\nCOROUTINES\nCORPORAL\nCORPORALS\nCORPORATE\nCORPORATELY\nCORPORATION\nCORPORATIONS\nCORPS\nCORPSE\nCORPSES\nCORPULENT\nCORPUS\nCORPUSCULAR\nCORRAL\nCORRECT\nCORRECTABLE\nCORRECTED\nCORRECTING\nCORRECTION\nCORRECTIONS\nCORRECTIVE\nCORRECTIVELY\nCORRECTIVES\nCORRECTLY\nCORRECTNESS\nCORRECTOR\nCORRECTS\nCORRELATE\nCORRELATED\nCORRELATES\nCORRELATING\nCORRELATION\nCORRELATIONS\nCORRELATIVE\nCORRESPOND\nCORRESPONDED\nCORRESPONDENCE\nCORRESPONDENCES\nCORRESPONDENT\nCORRESPONDENTS\nCORRESPONDING\nCORRESPONDINGLY\nCORRESPONDS\nCORRIDOR\nCORRIDORS\nCORRIGENDA\nCORRIGENDUM\nCORRIGIBLE\nCORROBORATE\nCORROBORATED\nCORROBORATES\nCORROBORATING\nCORROBORATION\nCORROBORATIONS\nCORROBORATIVE\nCORRODE\nCORROSION\nCORROSIVE\nCORRUGATE\nCORRUPT\nCORRUPTED\nCORRUPTER\nCORRUPTIBLE\nCORRUPTING\nCORRUPTION\nCORRUPTIONS\nCORRUPTS\nCORSET\nCORSICA\nCORSICAN\nCORTEX\nCORTEZ\nCORTICAL\nCORTLAND\nCORVALLIS\nCORVUS\nCORYDORAS\nCOSGROVE\nCOSINE\nCOSINES\nCOSMETIC\nCOSMETICS\nCOSMIC\nCOSMOLOGY\nCOSMOPOLITAN\nCOSMOS\nCOSPONSOR\nCOSSACK\nCOST\nCOSTA\nCOSTED\nCOSTELLO\nCOSTING\nCOSTLY\nCOSTS\nCOSTUME\nCOSTUMED\nCOSTUMER\nCOSTUMES\nCOSTUMING\nCOSY\nCOT\nCOTANGENT\nCOTILLION\nCOTS\nCOTTAGE\nCOTTAGER\nCOTTAGES\nCOTTON\nCOTTONMOUTH\nCOTTONS\nCOTTONSEED\nCOTTONWOOD\nCOTTRELL\nCOTYLEDON\nCOTYLEDONS\nCOUCH\nCOUCHED\nCOUCHES\nCOUCHING\nCOUGAR\nCOUGH\nCOUGHED\nCOUGHING\nCOUGHS\nCOULD\nCOULOMB\nCOULTER\nCOUNCIL\nCOUNCILLOR\nCOUNCILLORS\nCOUNCILMAN\nCOUNCILMEN\nCOUNCILS\nCOUNCILWOMAN\nCOUNCILWOMEN\nCOUNSEL\nCOUNSELED\nCOUNSELING\nCOUNSELLED\nCOUNSELLING\nCOUNSELLOR\nCOUNSELLORS\nCOUNSELOR\nCOUNSELORS\nCOUNSELS\nCOUNT\nCOUNTABLE\nCOUNTABLY\nCOUNTED\nCOUNTENANCE\nCOUNTER\nCOUNTERACT\nCOUNTERACTED\nCOUNTERACTING\nCOUNTERACTIVE\nCOUNTERARGUMENT\nCOUNTERATTACK\nCOUNTERBALANCE\nCOUNTERCLOCKWISE\nCOUNTERED\nCOUNTEREXAMPLE\nCOUNTEREXAMPLES\nCOUNTERFEIT\nCOUNTERFEITED\nCOUNTERFEITER\nCOUNTERFEITING\nCOUNTERFLOW\nCOUNTERING\nCOUNTERINTUITIVE\nCOUNTERMAN\nCOUNTERMEASURE\nCOUNTERMEASURES\nCOUNTERMEN\nCOUNTERPART\nCOUNTERPARTS\nCOUNTERPOINT\nCOUNTERPOINTING\nCOUNTERPOISE\nCOUNTERPRODUCTIVE\nCOUNTERPROPOSAL\nCOUNTERREVOLUTION\nCOUNTERS\nCOUNTERSINK\nCOUNTERSUNK\nCOUNTESS\nCOUNTIES\nCOUNTING\nCOUNTLESS\nCOUNTRIES\nCOUNTRY\nCOUNTRYMAN\nCOUNTRYMEN\nCOUNTRYSIDE\nCOUNTRYWIDE\nCOUNTS\nCOUNTY\nCOUNTYWIDE\nCOUPLE\nCOUPLED\nCOUPLER\nCOUPLERS\nCOUPLES\nCOUPLING\nCOUPLINGS\nCOUPON\nCOUPONS\nCOURAGE\nCOURAGEOUS\nCOURAGEOUSLY\nCOURIER\nCOURIERS\nCOURSE\nCOURSED\nCOURSER\nCOURSES\nCOURSING\nCOURT\nCOURTED\nCOURTEOUS\nCOURTEOUSLY\nCOURTER\nCOURTERS\nCOURTESAN\nCOURTESIES\nCOURTESY\nCOURTHOUSE\nCOURTHOUSES\nCOURTIER\nCOURTIERS\nCOURTING\nCOURTLY\nCOURTNEY\nCOURTROOM\nCOURTROOMS\nCOURTS\nCOURTSHIP\nCOURTYARD\nCOURTYARDS\nCOUSIN\nCOUSINS\nCOVALENT\nCOVARIANT\nCOVE\nCOVENANT\nCOVENANTS\nCOVENT\nCOVENTRY\nCOVER\nCOVERABLE\nCOVERAGE\nCOVERED\nCOVERING\nCOVERINGS\nCOVERLET\nCOVERLETS\nCOVERS\nCOVERT\nCOVERTLY\nCOVES\nCOVET\nCOVETED\nCOVETING\nCOVETOUS\nCOVETOUSNESS\nCOVETS\nCOW\nCOWAN\nCOWARD\nCOWARDICE\nCOWARDLY\nCOWBOY\nCOWBOYS\nCOWED\nCOWER\nCOWERED\nCOWERER\nCOWERERS\nCOWERING\nCOWERINGLY\nCOWERS\nCOWHERD\nCOWHIDE\nCOWING\nCOWL\nCOWLICK\nCOWLING\nCOWLS\nCOWORKER\nCOWS\nCOWSLIP\nCOWSLIPS\nCOYOTE\nCOYOTES\nCOYPU\nCOZIER\nCOZINESS\nCOZY\nCRAB\nCRABAPPLE\nCRABS\nCRACK\nCRACKED\nCRACKER\nCRACKERS\nCRACKING\nCRACKLE\nCRACKLED\nCRACKLES\nCRACKLING\nCRACKPOT\nCRACKS\nCRADLE\nCRADLED\nCRADLES\nCRAFT\nCRAFTED\nCRAFTER\nCRAFTINESS\nCRAFTING\nCRAFTS\nCRAFTSMAN\nCRAFTSMEN\nCRAFTSPEOPLE\nCRAFTSPERSON\nCRAFTY\nCRAG\nCRAGGY\nCRAGS\nCRAIG\nCRAM\nCRAMER\nCRAMMING\nCRAMP\nCRAMPS\nCRAMS\nCRANBERRIES\nCRANBERRY\nCRANDALL\nCRANE\nCRANES\nCRANFORD\nCRANIA\nCRANIUM\nCRANK\nCRANKCASE\nCRANKED\nCRANKIER\nCRANKIEST\nCRANKILY\nCRANKING\nCRANKS\nCRANKSHAFT\nCRANKY\nCRANNY\nCRANSTON\nCRASH\nCRASHED\nCRASHER\nCRASHERS\nCRASHES\nCRASHING\nCRASS\nCRATE\nCRATER\nCRATERS\nCRATES\nCRAVAT\nCRAVATS\nCRAVE\nCRAVED\nCRAVEN\nCRAVES\nCRAVING\nCRAWFORD\nCRAWL\nCRAWLED\nCRAWLER\nCRAWLERS\nCRAWLING\nCRAWLS\nCRAY\nCRAYON\nCRAYS\nCRAZE\nCRAZED\nCRAZES\nCRAZIER\nCRAZIEST\nCRAZILY\nCRAZINESS\nCRAZING\nCRAZY\nCREAK\nCREAKED\nCREAKING\nCREAKS\nCREAKY\nCREAM\nCREAMED\nCREAMER\nCREAMERS\nCREAMERY\nCREAMING\nCREAMS\nCREAMY\nCREASE\nCREASED\nCREASES\nCREASING\nCREATE\nCREATED\nCREATES\nCREATING\nCREATION\nCREATIONS\nCREATIVE\nCREATIVELY\nCREATIVENESS\nCREATIVITY\nCREATOR\nCREATORS\nCREATURE\nCREATURES\nCREDENCE\nCREDENTIAL\nCREDIBILITY\nCREDIBLE\nCREDIBLY\nCREDIT\nCREDITABLE\nCREDITABLY\nCREDITED\nCREDITING\nCREDITOR\nCREDITORS\nCREDITS\nCREDULITY\nCREDULOUS\nCREDULOUSNESS\nCREE\nCREED\nCREEDS\nCREEK\nCREEKS\nCREEP\nCREEPER\nCREEPERS\nCREEPING\nCREEPS\nCREEPY\nCREIGHTON\nCREMATE\nCREMATED\nCREMATES\nCREMATING\nCREMATION\nCREMATIONS\nCREMATORY\nCREOLE\nCREON\nCREPE\nCREPT\nCRESCENT\nCRESCENTS\nCREST\nCRESTED\nCRESTFALLEN\nCRESTS\nCRESTVIEW\nCRETACEOUS\nCRETACEOUSLY\nCRETAN\nCRETE\nCRETIN\nCREVICE\nCREVICES\nCREW\nCREWCUT\nCREWED\nCREWING\nCREWS\nCRIB\nCRIBS\nCRICKET\nCRICKETS\nCRIED\nCRIER\nCRIERS\nCRIES\nCRIME\nCRIMEA\nCRIMEAN\nCRIMES\nCRIMINAL\nCRIMINALLY\nCRIMINALS\nCRIMINATE\nCRIMSON\nCRIMSONING\nCRINGE\nCRINGED\nCRINGES\nCRINGING\nCRIPPLE\nCRIPPLED\nCRIPPLES\nCRIPPLING\nCRISES\nCRISIS\nCRISP\nCRISPIN\nCRISPLY\nCRISPNESS\nCRISSCROSS\nCRITERIA\nCRITERION\nCRITIC\nCRITICAL\nCRITICALLY\nCRITICISM\nCRITICISMS\nCRITICIZE\nCRITICIZED\nCRITICIZES\nCRITICIZING\nCRITICS\nCRITIQUE\nCRITIQUES\nCRITIQUING\nCRITTER\nCROAK\nCROAKED\nCROAKING\nCROAKS\nCROATIA\nCROATIAN\nCROCHET\nCROCHETS\nCROCK\nCROCKERY\nCROCKETT\nCROCKS\nCROCODILE\nCROCUS\nCROFT\nCROIX\nCROMWELL\nCROMWELLIAN\nCROOK\nCROOKED\nCROOKS\nCROP\nCROPPED\nCROPPER\nCROPPERS\nCROPPING\nCROPS\nCROSBY\nCROSS\nCROSSABLE\nCROSSBAR\nCROSSBARS\nCROSSED\nCROSSER\nCROSSERS\nCROSSES\nCROSSING\nCROSSINGS\nCROSSLY\nCROSSOVER\nCROSSOVERS\nCROSSPOINT\nCROSSROAD\nCROSSTALK\nCROSSWALK\nCROSSWORD\nCROSSWORDS\nCROTCH\nCROTCHETY\nCROUCH\nCROUCHED\nCROUCHING\nCROW\nCROWD\nCROWDED\nCROWDER\nCROWDING\nCROWDS\nCROWED\nCROWING\nCROWLEY\nCROWN\nCROWNED\nCROWNING\nCROWNS\nCROWS\nCROYDON\nCRUCIAL\nCRUCIALLY\nCRUCIBLE\nCRUCIFIED\nCRUCIFIES\nCRUCIFIX\nCRUCIFIXION\nCRUCIFY\nCRUCIFYING\nCRUD\nCRUDDY\nCRUDE\nCRUDELY\nCRUDENESS\nCRUDER\nCRUDEST\nCRUEL\nCRUELER\nCRUELEST\nCRUELLY\nCRUELTY\nCRUICKSHANK\nCRUISE\nCRUISER\nCRUISERS\nCRUISES\nCRUISING\nCRUMB\nCRUMBLE\nCRUMBLED\nCRUMBLES\nCRUMBLING\nCRUMBLY\nCRUMBS\nCRUMMY\nCRUMPLE\nCRUMPLED\nCRUMPLES\nCRUMPLING\nCRUNCH\nCRUNCHED\nCRUNCHES\nCRUNCHIER\nCRUNCHIEST\nCRUNCHING\nCRUNCHY\nCRUSADE\nCRUSADER\nCRUSADERS\nCRUSADES\nCRUSADING\nCRUSH\nCRUSHABLE\nCRUSHED\nCRUSHER\nCRUSHERS\nCRUSHES\nCRUSHING\nCRUSHINGLY\nCRUSOE\nCRUST\nCRUSTACEAN\nCRUSTACEANS\nCRUSTS\nCRUTCH\nCRUTCHES\nCRUX\nCRUXES\nCRUZ\nCRY\nCRYING\nCRYOGENIC\nCRYPT\nCRYPTANALYSIS\nCRYPTANALYST\nCRYPTANALYTIC\nCRYPTIC\nCRYPTOGRAM\nCRYPTOGRAPHER\nCRYPTOGRAPHIC\nCRYPTOGRAPHICALLY\nCRYPTOGRAPHY\nCRYPTOLOGIST\nCRYPTOLOGY\nCRYSTAL\nCRYSTALLINE\nCRYSTALLIZE\nCRYSTALLIZED\nCRYSTALLIZES\nCRYSTALLIZING\nCRYSTALS\nCUB\nCUBA\nCUBAN\nCUBANIZE\nCUBANIZES\nCUBANS\nCUBBYHOLE\nCUBE\nCUBED\nCUBES\nCUBIC\nCUBS\nCUCKOO\nCUCKOOS\nCUCUMBER\nCUCUMBERS\nCUDDLE\nCUDDLED\nCUDDLY\nCUDGEL\nCUDGELS\nCUE\nCUED\nCUES\nCUFF\nCUFFLINK\nCUFFS\nCUISINE\nCULBERTSON\nCULINARY\nCULL\nCULLED\nCULLER\nCULLING\nCULLS\nCULMINATE\nCULMINATED\nCULMINATES\nCULMINATING\nCULMINATION\nCULPA\nCULPABLE\nCULPRIT\nCULPRITS\nCULT\nCULTIVABLE\nCULTIVATE\nCULTIVATED\nCULTIVATES\nCULTIVATING\nCULTIVATION\nCULTIVATIONS\nCULTIVATOR\nCULTIVATORS\nCULTS\nCULTURAL\nCULTURALLY\nCULTURE\nCULTURED\nCULTURES\nCULTURING\nCULVER\nCULVERS\nCUMBERLAND\nCUMBERSOME\nCUMMINGS\nCUMMINS\nCUMULATIVE\nCUMULATIVELY\nCUNARD\nCUNNILINGUS\nCUNNING\nCUNNINGHAM\nCUNNINGLY\nCUP\nCUPBOARD\nCUPBOARDS\nCUPERTINO\nCUPFUL\nCUPID\nCUPPED\nCUPPING\nCUPS\nCURABLE\nCURABLY\nCURB\nCURBING\nCURBS\nCURD\nCURDLE\nCURE\nCURED\nCURES\nCURFEW\nCURFEWS\nCURING\nCURIOSITIES\nCURIOSITY\nCURIOUS\nCURIOUSER\nCURIOUSEST\nCURIOUSLY\nCURL\nCURLED\nCURLER\nCURLERS\nCURLICUE\nCURLING\nCURLS\nCURLY\nCURRAN\nCURRANT\nCURRANTS\nCURRENCIES\nCURRENCY\nCURRENT\nCURRENTLY\nCURRENTNESS\nCURRENTS\nCURRICULAR\nCURRICULUM\nCURRICULUMS\nCURRIED\nCURRIES\nCURRY\nCURRYING\nCURS\nCURSE\nCURSED\nCURSES\nCURSING\nCURSIVE\nCURSOR\nCURSORILY\nCURSORS\nCURSORY\nCURT\nCURTAIL\nCURTAILED\nCURTAILS\nCURTAIN\nCURTAINED\nCURTAINS\nCURTATE\nCURTIS\nCURTLY\nCURTNESS\nCURTSIES\nCURTSY\nCURVACEOUS\nCURVATURE\nCURVE\nCURVED\nCURVES\nCURVILINEAR\nCURVING\nCUSHING\nCUSHION\nCUSHIONED\nCUSHIONING\nCUSHIONS\nCUSHMAN\nCUSP\nCUSPS\nCUSTARD\nCUSTER\nCUSTODIAL\nCUSTODIAN\nCUSTODIANS\nCUSTODY\nCUSTOM\nCUSTOMARILY\nCUSTOMARY\nCUSTOMER\nCUSTOMERS\nCUSTOMIZABLE\nCUSTOMIZATION\nCUSTOMIZATIONS\nCUSTOMIZE\nCUSTOMIZED\nCUSTOMIZER\nCUSTOMIZERS\nCUSTOMIZES\nCUSTOMIZING\nCUSTOMS\nCUT\nCUTANEOUS\nCUTBACK\nCUTE\nCUTEST\nCUTLASS\nCUTLET\nCUTOFF\nCUTOUT\nCUTOVER\nCUTS\nCUTTER\nCUTTERS\nCUTTHROAT\nCUTTING\nCUTTINGLY\nCUTTINGS\nCUTTLEFISH\nCUVIER\nCUZCO\nCYANAMID\nCYANIDE\nCYBERNETIC\nCYBERNETICS\nCYBERSPACE\nCYCLADES\nCYCLE\nCYCLED\nCYCLES\nCYCLIC\nCYCLICALLY\nCYCLING\nCYCLOID\nCYCLOIDAL\nCYCLOIDS\nCYCLONE\nCYCLONES\nCYCLOPS\nCYCLOTRON\nCYCLOTRONS\nCYGNUS\nCYLINDER\nCYLINDERS\nCYLINDRICAL\nCYMBAL\nCYMBALS\nCYNIC\nCYNICAL\nCYNICALLY\nCYNTHIA\nCYPRESS\nCYPRIAN\nCYPRIOT\nCYPRUS\nCYRIL\nCYRILLIC\nCYRUS\nCYST\nCYSTS\nCYTOLOGY\nCYTOPLASM\nCZAR\nCZECH\nCZECHIZATION\nCZECHIZATIONS\nCZECHOSLOVAKIA\nCZERNIAK\nDABBLE\nDABBLED\nDABBLER\nDABBLES\nDABBLING\nDACCA\nDACRON\nDACTYL\nDACTYLIC\nDAD\nDADA\nDADAISM\nDADAIST\nDADAISTIC\nDADDY\nDADE\nDADS\nDAEDALUS\nDAEMON\nDAEMONS\nDAFFODIL\nDAFFODILS\nDAGGER\nDAHL\nDAHLIA\nDAHOMEY\nDAILEY\nDAILIES\nDAILY\nDAIMLER\nDAINTILY\nDAINTINESS\nDAINTY\nDAIRY\nDAIRYLEA\nDAISIES\nDAISY\nDAKAR\nDAKOTA\nDALE\nDALES\nDALEY\nDALHOUSIE\nDALI\nDALLAS\nDALTON\nDALY\nDALZELL\nDAM\nDAMAGE\nDAMAGED\nDAMAGER\nDAMAGERS\nDAMAGES\nDAMAGING\nDAMASCUS\nDAMASK\nDAME\nDAMMING\nDAMN\nDAMNATION\nDAMNED\nDAMNING\nDAMNS\nDAMOCLES\nDAMON\nDAMP\nDAMPEN\nDAMPENS\nDAMPER\nDAMPING\nDAMPNESS\nDAMS\nDAMSEL\nDAMSELS\nDAN\nDANA\nDANBURY\nDANCE\nDANCED\nDANCER\nDANCERS\nDANCES\nDANCING\nDANDELION\nDANDELIONS\nDANDY\nDANE\nDANES\nDANGER\nDANGEROUS\nDANGEROUSLY\nDANGERS\nDANGLE\nDANGLED\nDANGLES\nDANGLING\nDANIEL\nDANIELS\nDANIELSON\nDANISH\nDANIZATION\nDANIZATIONS\nDANIZE\nDANIZES\nDANNY\nDANTE\nDANUBE\nDANUBIAN\nDANVILLE\nDANZIG\nDAPHNE\nDAR\nDARE\nDARED\nDARER\nDARERS\nDARES\nDARESAY\nDARING\nDARINGLY\nDARIUS\nDARK\nDARKEN\nDARKER\nDARKEST\nDARKLY\nDARKNESS\nDARKROOM\nDARLENE\nDARLING\nDARLINGS\nDARLINGTON\nDARN\nDARNED\nDARNER\nDARNING\nDARNS\nDARPA\nDARRELL\nDARROW\nDARRY\nDART\nDARTED\nDARTER\nDARTING\nDARTMOUTH\nDARTS\nDARWIN\nDARWINIAN\nDARWINISM\nDARWINISTIC\nDARWINIZE\nDARWINIZES\nDASH\nDASHBOARD\nDASHED\nDASHER\nDASHERS\nDASHES\nDASHING\nDASHINGLY\nDATA\nDATABASE\nDATABASES\nDATAGRAM\nDATAGRAMS\nDATAMATION\nDATAMEDIA\nDATE\nDATED\nDATELINE\nDATER\nDATES\nDATING\nDATIVE\nDATSUN\nDATUM\nDAUGHERTY\nDAUGHTER\nDAUGHTERLY\nDAUGHTERS\nDAUNT\nDAUNTED\nDAUNTLESS\nDAVE\nDAVID\nDAVIDSON\nDAVIE\nDAVIES\nDAVINICH\nDAVIS\nDAVISON\nDAVY\nDAWN\nDAWNED\nDAWNING\nDAWNS\nDAWSON\nDAY\nDAYBREAK\nDAYDREAM\nDAYDREAMING\nDAYDREAMS\nDAYLIGHT\nDAYLIGHTS\nDAYS\nDAYTIME\nDAYTON\nDAYTONA\nDAZE\nDAZED\nDAZZLE\nDAZZLED\nDAZZLER\nDAZZLES\nDAZZLING\nDAZZLINGLY\nDEACON\nDEACONS\nDEACTIVATE\nDEAD\nDEADEN\nDEADLINE\nDEADLINES\nDEADLOCK\nDEADLOCKED\nDEADLOCKING\nDEADLOCKS\nDEADLY\nDEADNESS\nDEADWOOD\nDEAF\nDEAFEN\nDEAFER\nDEAFEST\nDEAFNESS\nDEAL\nDEALER\nDEALERS\nDEALERSHIP\nDEALING\nDEALINGS\nDEALLOCATE\nDEALLOCATED\nDEALLOCATING\nDEALLOCATION\nDEALLOCATIONS\nDEALS\nDEALT\nDEAN\nDEANE\nDEANNA\nDEANS\nDEAR\nDEARBORN\nDEARER\nDEAREST\nDEARLY\nDEARNESS\nDEARTH\nDEARTHS\nDEATH\nDEATHBED\nDEATHLY\nDEATHS\nDEBACLE\nDEBAR\nDEBASE\nDEBATABLE\nDEBATE\nDEBATED\nDEBATER\nDEBATERS\nDEBATES\nDEBATING\nDEBAUCH\nDEBAUCHERY\nDEBBIE\nDEBBY\nDEBILITATE\nDEBILITATED\nDEBILITATES\nDEBILITATING\nDEBILITY\nDEBIT\nDEBITED\nDEBORAH\nDEBRA\nDEBRIEF\nDEBRIS\nDEBT\nDEBTOR\nDEBTS\nDEBUG\nDEBUGGED\nDEBUGGER\nDEBUGGERS\nDEBUGGING\nDEBUGS\nDEBUNK\nDEBUSSY\nDEBUTANTE\nDEC\nDECADE\nDECADENCE\nDECADENT\nDECADENTLY\nDECADES\nDECAL\nDECATHLON\nDECATUR\nDECAY\nDECAYED\nDECAYING\nDECAYS\nDECCA\nDECEASE\nDECEASED\nDECEASES\nDECEASING\nDECEDENT\nDECEIT\nDECEITFUL\nDECEITFULLY\nDECEITFULNESS\nDECEIVE\nDECEIVED\nDECEIVER\nDECEIVERS\nDECEIVES\nDECEIVING\nDECELERATE\nDECELERATED\nDECELERATES\nDECELERATING\nDECELERATION\nDECEMBER\nDECEMBERS\nDECENCIES\nDECENCY\nDECENNIAL\nDECENT\nDECENTLY\nDECENTRALIZATION\nDECENTRALIZED\nDECEPTION\nDECEPTIONS\nDECEPTIVE\nDECEPTIVELY\nDECERTIFY\nDECIBEL\nDECIDABILITY\nDECIDABLE\nDECIDE\nDECIDED\nDECIDEDLY\nDECIDES\nDECIDING\nDECIDUOUS\nDECIMAL\nDECIMALS\nDECIMATE\nDECIMATED\nDECIMATES\nDECIMATING\nDECIMATION\nDECIPHER\nDECIPHERED\nDECIPHERER\nDECIPHERING\nDECIPHERS\nDECISION\nDECISIONS\nDECISIVE\nDECISIVELY\nDECISIVENESS\nDECK\nDECKED\nDECKER\nDECKING\nDECKINGS\nDECKS\nDECLARATION\nDECLARATIONS\nDECLARATIVE\nDECLARATIVELY\nDECLARATIVES\nDECLARATOR\nDECLARATORY\nDECLARE\nDECLARED\nDECLARER\nDECLARERS\nDECLARES\nDECLARING\nDECLASSIFY\nDECLINATION\nDECLINATIONS\nDECLINE\nDECLINED\nDECLINER\nDECLINERS\nDECLINES\nDECLINING\nDECNET\nDECODE\nDECODED\nDECODER\nDECODERS\nDECODES\nDECODING\nDECODINGS\nDECOLLETAGE\nDECOLLIMATE\nDECOMPILE\nDECOMPOSABILITY\nDECOMPOSABLE\nDECOMPOSE\nDECOMPOSED\nDECOMPOSES\nDECOMPOSING\nDECOMPOSITION\nDECOMPOSITIONS\nDECOMPRESS\nDECOMPRESSION\nDECORATE\nDECORATED\nDECORATES\nDECORATING\nDECORATION\nDECORATIONS\nDECORATIVE\nDECORUM\nDECOUPLE\nDECOUPLED\nDECOUPLES\nDECOUPLING\nDECOY\nDECOYS\nDECREASE\nDECREASED\nDECREASES\nDECREASING\nDECREASINGLY\nDECREE\nDECREED\nDECREEING\nDECREES\nDECREMENT\nDECREMENTED\nDECREMENTING\nDECREMENTS\nDECRYPT\nDECRYPTED\nDECRYPTING\nDECRYPTION\nDECRYPTS\nDECSTATION\nDECSYSTEM\nDECTAPE\nDEDICATE\nDEDICATED\nDEDICATES\nDEDICATING\nDEDICATION\nDEDUCE\nDEDUCED\nDEDUCER\nDEDUCES\nDEDUCIBLE\nDEDUCING\nDEDUCT\nDEDUCTED\nDEDUCTIBLE\nDEDUCTING\nDEDUCTION\nDEDUCTIONS\nDEDUCTIVE\nDEE\nDEED\nDEEDED\nDEEDING\nDEEDS\nDEEM\nDEEMED\nDEEMING\nDEEMPHASIZE\nDEEMPHASIZED\nDEEMPHASIZES\nDEEMPHASIZING\nDEEMS\nDEEP\nDEEPEN\nDEEPENED\nDEEPENING\nDEEPENS\nDEEPER\nDEEPEST\nDEEPLY\nDEEPS\nDEER\nDEERE\nDEFACE\nDEFAULT\nDEFAULTED\nDEFAULTER\nDEFAULTING\nDEFAULTS\nDEFEAT\nDEFEATED\nDEFEATING\nDEFEATS\nDEFECATE\nDEFECT\nDEFECTED\nDEFECTING\nDEFECTION\nDEFECTIONS\nDEFECTIVE\nDEFECTS\nDEFEND\nDEFENDANT\nDEFENDANTS\nDEFENDED\nDEFENDER\nDEFENDERS\nDEFENDING\nDEFENDS\nDEFENESTRATE\nDEFENESTRATED\nDEFENESTRATES\nDEFENESTRATING\nDEFENESTRATION\nDEFENSE\nDEFENSELESS\nDEFENSES\nDEFENSIBLE\nDEFENSIVE\nDEFER\nDEFERENCE\nDEFERMENT\nDEFERMENTS\nDEFERRABLE\nDEFERRED\nDEFERRER\nDEFERRERS\nDEFERRING\nDEFERS\nDEFIANCE\nDEFIANT\nDEFIANTLY\nDEFICIENCIES\nDEFICIENCY\nDEFICIENT\nDEFICIT\nDEFICITS\nDEFIED\nDEFIES\nDEFILE\nDEFILING\nDEFINABLE\nDEFINE\nDEFINED\nDEFINER\nDEFINES\nDEFINING\nDEFINITE\nDEFINITELY\nDEFINITENESS\nDEFINITION\nDEFINITIONAL\nDEFINITIONS\nDEFINITIVE\nDEFLATE\nDEFLATER\nDEFLECT\nDEFOCUS\nDEFOE\nDEFOREST\nDEFORESTATION\nDEFORM\nDEFORMATION\nDEFORMATIONS\nDEFORMED\nDEFORMITIES\nDEFORMITY\nDEFRAUD\nDEFRAY\nDEFROST\nDEFTLY\nDEFUNCT\nDEFY\nDEFYING\nDEGENERACY\nDEGENERATE\nDEGENERATED\nDEGENERATES\nDEGENERATING\nDEGENERATION\nDEGENERATIVE\nDEGRADABLE\nDEGRADATION\nDEGRADATIONS\nDEGRADE\nDEGRADED\nDEGRADES\nDEGRADING\nDEGREE\nDEGREES\nDEHUMIDIFY\nDEHYDRATE\nDEIFY\nDEIGN\nDEIGNED\nDEIGNING\nDEIGNS\nDEIMOS\nDEIRDRE\nDEIRDRES\nDEITIES\nDEITY\nDEJECTED\nDEJECTEDLY\nDEKALB\nDEKASTERE\nDEL\nDELANEY\nDELANO\nDELAWARE\nDELAY\nDELAYED\nDELAYING\nDELAYS\nDELEGATE\nDELEGATED\nDELEGATES\nDELEGATING\nDELEGATION\nDELEGATIONS\nDELETE\nDELETED\nDELETER\nDELETERIOUS\nDELETES\nDELETING\nDELETION\nDELETIONS\nDELFT\nDELHI\nDELIA\nDELIBERATE\nDELIBERATED\nDELIBERATELY\nDELIBERATENESS\nDELIBERATES\nDELIBERATING\nDELIBERATION\nDELIBERATIONS\nDELIBERATIVE\nDELIBERATOR\nDELIBERATORS\nDELICACIES\nDELICACY\nDELICATE\nDELICATELY\nDELICATESSEN\nDELICIOUS\nDELICIOUSLY\nDELIGHT\nDELIGHTED\nDELIGHTEDLY\nDELIGHTFUL\nDELIGHTFULLY\nDELIGHTING\nDELIGHTS\nDELILAH\nDELIMIT\nDELIMITATION\nDELIMITED\nDELIMITER\nDELIMITERS\nDELIMITING\nDELIMITS\nDELINEAMENT\nDELINEATE\nDELINEATED\nDELINEATES\nDELINEATING\nDELINEATION\nDELINQUENCY\nDELINQUENT\nDELIRIOUS\nDELIRIOUSLY\nDELIRIUM\nDELIVER\nDELIVERABLE\nDELIVERABLES\nDELIVERANCE\nDELIVERED\nDELIVERER\nDELIVERERS\nDELIVERIES\nDELIVERING\nDELIVERS\nDELIVERY\nDELL\nDELLA\nDELLS\nDELLWOOD\nDELMARVA\nDELPHI\nDELPHIC\nDELPHICALLY\nDELPHINUS\nDELTA\nDELTAS\nDELUDE\nDELUDED\nDELUDES\nDELUDING\nDELUGE\nDELUGED\nDELUGES\nDELUSION\nDELUSIONS\nDELUXE\nDELVE\nDELVES\nDELVING\nDEMAGNIFY\nDEMAGOGUE\nDEMAND\nDEMANDED\nDEMANDER\nDEMANDING\nDEMANDINGLY\nDEMANDS\nDEMARCATE\nDEMEANOR\nDEMENTED\nDEMERIT\nDEMETER\nDEMIGOD\nDEMISE\nDEMO\nDEMOCRACIES\nDEMOCRACY\nDEMOCRAT\nDEMOCRATIC\nDEMOCRATICALLY\nDEMOCRATS\nDEMODULATE\nDEMODULATOR\nDEMOGRAPHIC\nDEMOLISH\nDEMOLISHED\nDEMOLISHES\nDEMOLITION\nDEMON\nDEMONIAC\nDEMONIC\nDEMONS\nDEMONSTRABLE\nDEMONSTRATE\nDEMONSTRATED\nDEMONSTRATES\nDEMONSTRATING\nDEMONSTRATION\nDEMONSTRATIONS\nDEMONSTRATIVE\nDEMONSTRATIVELY\nDEMONSTRATOR\nDEMONSTRATORS\nDEMORALIZE\nDEMORALIZED\nDEMORALIZES\nDEMORALIZING\nDEMORGAN\nDEMOTE\nDEMOUNTABLE\nDEMPSEY\nDEMULTIPLEX\nDEMULTIPLEXED\nDEMULTIPLEXER\nDEMULTIPLEXERS\nDEMULTIPLEXING\nDEMUR\nDEMYTHOLOGIZE\nDEN\nDENATURE\nDENEB\nDENEBOLA\nDENEEN\nDENIABLE\nDENIAL\nDENIALS\nDENIED\nDENIER\nDENIES\nDENIGRATE\nDENIGRATED\nDENIGRATES\nDENIGRATING\nDENIZEN\nDENMARK\nDENNIS\nDENNY\nDENOMINATE\nDENOMINATION\nDENOMINATIONS\nDENOMINATOR\nDENOMINATORS\nDENOTABLE\nDENOTATION\nDENOTATIONAL\nDENOTATIONALLY\nDENOTATIONS\nDENOTATIVE\nDENOTE\nDENOTED\nDENOTES\nDENOTING\nDENOUNCE\nDENOUNCED\nDENOUNCES\nDENOUNCING\nDENS\nDENSE\nDENSELY\nDENSENESS\nDENSER\nDENSEST\nDENSITIES\nDENSITY\nDENT\nDENTAL\nDENTALLY\nDENTED\nDENTING\nDENTIST\nDENTISTRY\nDENTISTS\nDENTON\nDENTS\nDENTURE\nDENUDE\nDENUMERABLE\nDENUNCIATE\nDENUNCIATION\nDENVER\nDENY\nDENYING\nDEODORANT\nDEOXYRIBONUCLEIC\nDEPART\nDEPARTED\nDEPARTING\nDEPARTMENT\nDEPARTMENTAL\nDEPARTMENTS\nDEPARTS\nDEPARTURE\nDEPARTURES\nDEPEND\nDEPENDABILITY\nDEPENDABLE\nDEPENDABLY\nDEPENDED\nDEPENDENCE\nDEPENDENCIES\nDEPENDENCY\nDEPENDENT\nDEPENDENTLY\nDEPENDENTS\nDEPENDING\nDEPENDS\nDEPICT\nDEPICTED\nDEPICTING\nDEPICTS\nDEPLETE\nDEPLETED\nDEPLETES\nDEPLETING\nDEPLETION\nDEPLETIONS\nDEPLORABLE\nDEPLORE\nDEPLORED\nDEPLORES\nDEPLORING\nDEPLOY\nDEPLOYED\nDEPLOYING\nDEPLOYMENT\nDEPLOYMENTS\nDEPLOYS\nDEPORT\nDEPORTATION\nDEPORTEE\nDEPORTMENT\nDEPOSE\nDEPOSED\nDEPOSES\nDEPOSIT\nDEPOSITARY\nDEPOSITED\nDEPOSITING\nDEPOSITION\nDEPOSITIONS\nDEPOSITOR\nDEPOSITORS\nDEPOSITORY\nDEPOSITS\nDEPOT\nDEPOTS\nDEPRAVE\nDEPRAVED\nDEPRAVITY\nDEPRECATE\nDEPRECIATE\nDEPRECIATED\nDEPRECIATES\nDEPRECIATION\nDEPRESS\nDEPRESSED\nDEPRESSES\nDEPRESSING\nDEPRESSION\nDEPRESSIONS\nDEPRIVATION\nDEPRIVATIONS\nDEPRIVE\nDEPRIVED\nDEPRIVES\nDEPRIVING\nDEPTH\nDEPTHS\nDEPUTIES\nDEPUTY\nDEQUEUE\nDEQUEUED\nDEQUEUES\nDEQUEUING\nDERAIL\nDERAILED\nDERAILING\nDERAILS\nDERBY\nDERBYSHIRE\nDEREFERENCE\nDEREGULATE\nDEREGULATED\nDEREK\nDERIDE\nDERISION\nDERIVABLE\nDERIVATION\nDERIVATIONS\nDERIVATIVE\nDERIVATIVES\nDERIVE\nDERIVED\nDERIVES\nDERIVING\nDEROGATORY\nDERRICK\nDERRIERE\nDERVISH\nDES\nDESCARTES\nDESCEND\nDESCENDANT\nDESCENDANTS\nDESCENDED\nDESCENDENT\nDESCENDER\nDESCENDERS\nDESCENDING\nDESCENDS\nDESCENT\nDESCENTS\nDESCRIBABLE\nDESCRIBE\nDESCRIBED\nDESCRIBER\nDESCRIBES\nDESCRIBING\nDESCRIPTION\nDESCRIPTIONS\nDESCRIPTIVE\nDESCRIPTIVELY\nDESCRIPTIVES\nDESCRIPTOR\nDESCRIPTORS\nDESCRY\nDESECRATE\nDESEGREGATE\nDESERT\nDESERTED\nDESERTER\nDESERTERS\nDESERTING\nDESERTION\nDESERTIONS\nDESERTS\nDESERVE\nDESERVED\nDESERVES\nDESERVING\nDESERVINGLY\nDESERVINGS\nDESIDERATA\nDESIDERATUM\nDESIGN\nDESIGNATE\nDESIGNATED\nDESIGNATES\nDESIGNATING\nDESIGNATION\nDESIGNATIONS\nDESIGNATOR\nDESIGNATORS\nDESIGNED\nDESIGNER\nDESIGNERS\nDESIGNING\nDESIGNS\nDESIRABILITY\nDESIRABLE\nDESIRABLY\nDESIRE\nDESIRED\nDESIRES\nDESIRING\nDESIROUS\nDESIST\nDESK\nDESKS\nDESKTOP\nDESMOND\nDESOLATE\nDESOLATELY\nDESOLATION\nDESOLATIONS\nDESPAIR\nDESPAIRED\nDESPAIRING\nDESPAIRINGLY\nDESPAIRS\nDESPATCH\nDESPATCHED\nDESPERADO\nDESPERATE\nDESPERATELY\nDESPERATION\nDESPICABLE\nDESPISE\nDESPISED\nDESPISES\nDESPISING\nDESPITE\nDESPOIL\nDESPONDENT\nDESPOT\nDESPOTIC\nDESPOTISM\nDESPOTS\nDESSERT\nDESSERTS\nDESSICATE\nDESTABILIZE\nDESTINATION\nDESTINATIONS\nDESTINE\nDESTINED\nDESTINIES\nDESTINY\nDESTITUTE\nDESTITUTION\nDESTROY\nDESTROYED\nDESTROYER\nDESTROYERS\nDESTROYING\nDESTROYS\nDESTRUCT\nDESTRUCTION\nDESTRUCTIONS\nDESTRUCTIVE\nDESTRUCTIVELY\nDESTRUCTIVENESS\nDESTRUCTOR\nDESTUFF\nDESTUFFING\nDESTUFFS\nDESUETUDE\nDESULTORY\nDESYNCHRONIZE\nDETACH\nDETACHED\nDETACHER\nDETACHES\nDETACHING\nDETACHMENT\nDETACHMENTS\nDETAIL\nDETAILED\nDETAILING\nDETAILS\nDETAIN\nDETAINED\nDETAINING\nDETAINS\nDETECT\nDETECTABLE\nDETECTABLY\nDETECTED\nDETECTING\nDETECTION\nDETECTIONS\nDETECTIVE\nDETECTIVES\nDETECTOR\nDETECTORS\nDETECTS\nDETENTE\nDETENTION\nDETER\nDETERGENT\nDETERIORATE\nDETERIORATED\nDETERIORATES\nDETERIORATING\nDETERIORATION\nDETERMINABLE\nDETERMINACY\nDETERMINANT\nDETERMINANTS\nDETERMINATE\nDETERMINATELY\nDETERMINATION\nDETERMINATIONS\nDETERMINATIVE\nDETERMINE\nDETERMINED\nDETERMINER\nDETERMINERS\nDETERMINES\nDETERMINING\nDETERMINISM\nDETERMINISTIC\nDETERMINISTICALLY\nDETERRED\nDETERRENT\nDETERRING\nDETEST\nDETESTABLE\nDETESTED\nDETOUR\nDETRACT\nDETRACTOR\nDETRACTORS\nDETRACTS\nDETRIMENT\nDETRIMENTAL\nDETROIT\nDEUCE\nDEUS\nDEUTERIUM\nDEUTSCH\nDEVASTATE\nDEVASTATED\nDEVASTATES\nDEVASTATING\nDEVASTATION\nDEVELOP\nDEVELOPED\nDEVELOPER\nDEVELOPERS\nDEVELOPING\nDEVELOPMENT\nDEVELOPMENTAL\nDEVELOPMENTS\nDEVELOPS\nDEVIANT\nDEVIANTS\nDEVIATE\nDEVIATED\nDEVIATES\nDEVIATING\nDEVIATION\nDEVIATIONS\nDEVICE\nDEVICES\nDEVIL\nDEVILISH\nDEVILISHLY\nDEVILS\nDEVIOUS\nDEVISE\nDEVISED\nDEVISES\nDEVISING\nDEVISINGS\nDEVOID\nDEVOLVE\nDEVON\nDEVONSHIRE\nDEVOTE\nDEVOTED\nDEVOTEDLY\nDEVOTEE\nDEVOTEES\nDEVOTES\nDEVOTING\nDEVOTION\nDEVOTIONS\nDEVOUR\nDEVOURED\nDEVOURER\nDEVOURS\nDEVOUT\nDEVOUTLY\nDEVOUTNESS\nDEW\nDEWDROP\nDEWDROPS\nDEWEY\nDEWITT\nDEWY\nDEXEDRINE\nDEXTERITY\nDHABI\nDIABETES\nDIABETIC\nDIABOLIC\nDIACHRONIC\nDIACRITICAL\nDIADEM\nDIAGNOSABLE\nDIAGNOSE\nDIAGNOSED\nDIAGNOSES\nDIAGNOSING\nDIAGNOSIS\nDIAGNOSTIC\nDIAGNOSTICIAN\nDIAGNOSTICS\nDIAGONAL\nDIAGONALLY\nDIAGONALS\nDIAGRAM\nDIAGRAMMABLE\nDIAGRAMMATIC\nDIAGRAMMATICALLY\nDIAGRAMMED\nDIAGRAMMER\nDIAGRAMMERS\nDIAGRAMMING\nDIAGRAMS\nDIAL\nDIALECT\nDIALECTIC\nDIALECTS\nDIALED\nDIALER\nDIALERS\nDIALING\nDIALOG\nDIALOGS\nDIALOGUE\nDIALOGUES\nDIALS\nDIALUP\nDIALYSIS\nDIAMAGNETIC\nDIAMETER\nDIAMETERS\nDIAMETRIC\nDIAMETRICALLY\nDIAMOND\nDIAMONDS\nDIANA\nDIANE\nDIANNE\nDIAPER\nDIAPERS\nDIAPHRAGM\nDIAPHRAGMS\nDIARIES\nDIARRHEA\nDIARY\nDIATRIBE\nDIATRIBES\nDIBBLE\nDICE\nDICHOTOMIZE\nDICHOTOMY\nDICKENS\nDICKERSON\nDICKINSON\nDICKSON\nDICKY\nDICTATE\nDICTATED\nDICTATES\nDICTATING\nDICTATION\nDICTATIONS\nDICTATOR\nDICTATORIAL\nDICTATORS\nDICTATORSHIP\nDICTION\nDICTIONARIES\nDICTIONARY\nDICTUM\nDICTUMS\nDID\nDIDACTIC\nDIDDLE\nDIDO\nDIE\nDIEBOLD\nDIED\nDIEGO\nDIEHARD\nDIELECTRIC\nDIELECTRICS\nDIEM\nDIES\nDIESEL\nDIET\nDIETARY\nDIETER\nDIETERS\nDIETETIC\nDIETICIAN\nDIETITIAN\nDIETITIANS\nDIETRICH\nDIETS\nDIETZ\nDIFFER\nDIFFERED\nDIFFERENCE\nDIFFERENCES\nDIFFERENT\nDIFFERENTIABLE\nDIFFERENTIAL\nDIFFERENTIALS\nDIFFERENTIATE\nDIFFERENTIATED\nDIFFERENTIATES\nDIFFERENTIATING\nDIFFERENTIATION\nDIFFERENTIATIONS\nDIFFERENTIATORS\nDIFFERENTLY\nDIFFERER\nDIFFERERS\nDIFFERING\nDIFFERS\nDIFFICULT\nDIFFICULTIES\nDIFFICULTLY\nDIFFICULTY\nDIFFRACT\nDIFFUSE\nDIFFUSED\nDIFFUSELY\nDIFFUSER\nDIFFUSERS\nDIFFUSES\nDIFFUSIBLE\nDIFFUSING\nDIFFUSION\nDIFFUSIONS\nDIFFUSIVE\nDIG\nDIGEST\nDIGESTED\nDIGESTIBLE\nDIGESTING\nDIGESTION\nDIGESTIVE\nDIGESTS\nDIGGER\nDIGGERS\nDIGGING\nDIGGINGS\nDIGIT\nDIGITAL\nDIGITALIS\nDIGITALLY\nDIGITIZATION\nDIGITIZE\nDIGITIZED\nDIGITIZES\nDIGITIZING\nDIGITS\nDIGNIFIED\nDIGNIFY\nDIGNITARY\nDIGNITIES\nDIGNITY\nDIGRAM\nDIGRESS\nDIGRESSED\nDIGRESSES\nDIGRESSING\nDIGRESSION\nDIGRESSIONS\nDIGRESSIVE\nDIGS\nDIHEDRAL\nDIJKSTRA\nDIJON\nDIKE\nDIKES\nDILAPIDATE\nDILATATION\nDILATE\nDILATED\nDILATES\nDILATING\nDILATION\nDILDO\nDILEMMA\nDILEMMAS\nDILIGENCE\nDILIGENT\nDILIGENTLY\nDILL\nDILLON\nDILOGARITHM\nDILUTE\nDILUTED\nDILUTES\nDILUTING\nDILUTION\nDIM\nDIMAGGIO\nDIME\nDIMENSION\nDIMENSIONAL\nDIMENSIONALITY\nDIMENSIONALLY\nDIMENSIONED\nDIMENSIONING\nDIMENSIONS\nDIMES\nDIMINISH\nDIMINISHED\nDIMINISHES\nDIMINISHING\nDIMINUTION\nDIMINUTIVE\nDIMLY\nDIMMED\nDIMMER\nDIMMERS\nDIMMEST\nDIMMING\nDIMNESS\nDIMPLE\nDIMS\nDIN\nDINAH\nDINE\nDINED\nDINER\nDINERS\nDINES\nDING\nDINGHY\nDINGINESS\nDINGO\nDINGY\nDINING\nDINNER\nDINNERS\nDINNERTIME\nDINNERWARE\nDINOSAUR\nDINT\nDIOCLETIAN\nDIODE\nDIODES\nDIOGENES\nDION\nDIONYSIAN\nDIONYSUS\nDIOPHANTINE\nDIOPTER\nDIORAMA\nDIOXIDE\nDIP\nDIPHTHERIA\nDIPHTHONG\nDIPLOMA\nDIPLOMACY\nDIPLOMAS\nDIPLOMAT\nDIPLOMATIC\nDIPLOMATS\nDIPOLE\nDIPPED\nDIPPER\nDIPPERS\nDIPPING\nDIPPINGS\nDIPS\nDIRAC\nDIRE\nDIRECT\nDIRECTED\nDIRECTING\nDIRECTION\nDIRECTIONAL\nDIRECTIONALITY\nDIRECTIONALLY\nDIRECTIONS\nDIRECTIVE\nDIRECTIVES\nDIRECTLY\nDIRECTNESS\nDIRECTOR\nDIRECTORATE\nDIRECTORIES\nDIRECTORS\nDIRECTORY\nDIRECTRICES\nDIRECTRIX\nDIRECTS\nDIRGE\nDIRGES\nDIRICHLET\nDIRT\nDIRTIER\nDIRTIEST\nDIRTILY\nDIRTINESS\nDIRTS\nDIRTY\nDIS\nDISABILITIES\nDISABILITY\nDISABLE\nDISABLED\nDISABLER\nDISABLERS\nDISABLES\nDISABLING\nDISADVANTAGE\nDISADVANTAGEOUS\nDISADVANTAGES\nDISAFFECTED\nDISAFFECTION\nDISAGREE\nDISAGREEABLE\nDISAGREED\nDISAGREEING\nDISAGREEMENT\nDISAGREEMENTS\nDISAGREES\nDISALLOW\nDISALLOWED\nDISALLOWING\nDISALLOWS\nDISAMBIGUATE\nDISAMBIGUATED\nDISAMBIGUATES\nDISAMBIGUATING\nDISAMBIGUATION\nDISAMBIGUATIONS\nDISAPPEAR\nDISAPPEARANCE\nDISAPPEARANCES\nDISAPPEARED\nDISAPPEARING\nDISAPPEARS\nDISAPPOINT\nDISAPPOINTED\nDISAPPOINTING\nDISAPPOINTMENT\nDISAPPOINTMENTS\nDISAPPROVAL\nDISAPPROVE\nDISAPPROVED\nDISAPPROVES\nDISARM\nDISARMAMENT\nDISARMED\nDISARMING\nDISARMS\nDISASSEMBLE\nDISASSEMBLED\nDISASSEMBLES\nDISASSEMBLING\nDISASSEMBLY\nDISASTER\nDISASTERS\nDISASTROUS\nDISASTROUSLY\nDISBAND\nDISBANDED\nDISBANDING\nDISBANDS\nDISBURSE\nDISBURSED\nDISBURSEMENT\nDISBURSEMENTS\nDISBURSES\nDISBURSING\nDISC\nDISCARD\nDISCARDED\nDISCARDING\nDISCARDS\nDISCERN\nDISCERNED\nDISCERNIBILITY\nDISCERNIBLE\nDISCERNIBLY\nDISCERNING\nDISCERNINGLY\nDISCERNMENT\nDISCERNS\nDISCHARGE\nDISCHARGED\nDISCHARGES\nDISCHARGING\nDISCIPLE\nDISCIPLES\nDISCIPLINARY\nDISCIPLINE\nDISCIPLINED\nDISCIPLINES\nDISCIPLINING\nDISCLAIM\nDISCLAIMED\nDISCLAIMER\nDISCLAIMS\nDISCLOSE\nDISCLOSED\nDISCLOSES\nDISCLOSING\nDISCLOSURE\nDISCLOSURES\nDISCOMFORT\nDISCONCERT\nDISCONCERTING\nDISCONCERTINGLY\nDISCONNECT\nDISCONNECTED\nDISCONNECTING\nDISCONNECTION\nDISCONNECTS\nDISCONTENT\nDISCONTENTED\nDISCONTINUANCE\nDISCONTINUE\nDISCONTINUED\nDISCONTINUES\nDISCONTINUITIES\nDISCONTINUITY\nDISCONTINUOUS\nDISCORD\nDISCORDANT\nDISCOUNT\nDISCOUNTED\nDISCOUNTING\nDISCOUNTS\nDISCOURAGE\nDISCOURAGED\nDISCOURAGEMENT\nDISCOURAGES\nDISCOURAGING\nDISCOURSE\nDISCOURSES\nDISCOVER\nDISCOVERED\nDISCOVERER\nDISCOVERERS\nDISCOVERIES\nDISCOVERING\nDISCOVERS\nDISCOVERY\nDISCREDIT\nDISCREDITED\nDISCREET\nDISCREETLY\nDISCREPANCIES\nDISCREPANCY\nDISCRETE\nDISCRETELY\nDISCRETENESS\nDISCRETION\nDISCRETIONARY\nDISCRIMINANT\nDISCRIMINATE\nDISCRIMINATED\nDISCRIMINATES\nDISCRIMINATING\nDISCRIMINATION\nDISCRIMINATORY\nDISCS\nDISCUSS\nDISCUSSANT\nDISCUSSED\nDISCUSSES\nDISCUSSING\nDISCUSSION\nDISCUSSIONS\nDISDAIN\nDISDAINING\nDISDAINS\nDISEASE\nDISEASED\nDISEASES\nDISEMBOWEL\nDISENGAGE\nDISENGAGED\nDISENGAGES\nDISENGAGING\nDISENTANGLE\nDISENTANGLING\nDISFIGURE\nDISFIGURED\nDISFIGURES\nDISFIGURING\nDISGORGE\nDISGRACE\nDISGRACED\nDISGRACEFUL\nDISGRACEFULLY\nDISGRACES\nDISGRUNTLE\nDISGRUNTLED\nDISGUISE\nDISGUISED\nDISGUISES\nDISGUST\nDISGUSTED\nDISGUSTEDLY\nDISGUSTFUL\nDISGUSTING\nDISGUSTINGLY\nDISGUSTS\nDISH\nDISHEARTEN\nDISHEARTENING\nDISHED\nDISHES\nDISHEVEL\nDISHING\nDISHONEST\nDISHONESTLY\nDISHONESTY\nDISHONOR\nDISHONORABLE\nDISHONORED\nDISHONORING\nDISHONORS\nDISHWASHER\nDISHWASHERS\nDISHWASHING\nDISHWATER\nDISILLUSION\nDISILLUSIONED\nDISILLUSIONING\nDISILLUSIONMENT\nDISILLUSIONMENTS\nDISINCLINED\nDISINGENUOUS\nDISINTERESTED\nDISINTERESTEDNESS\nDISJOINT\nDISJOINTED\nDISJOINTLY\nDISJOINTNESS\nDISJUNCT\nDISJUNCTION\nDISJUNCTIONS\nDISJUNCTIVE\nDISJUNCTIVELY\nDISJUNCTS\nDISK\nDISKETTE\nDISKETTES\nDISKS\nDISLIKE\nDISLIKED\nDISLIKES\nDISLIKING\nDISLOCATE\nDISLOCATED\nDISLOCATES\nDISLOCATING\nDISLOCATION\nDISLOCATIONS\nDISLODGE\nDISLODGED\nDISMAL\nDISMALLY\nDISMAY\nDISMAYED\nDISMAYING\nDISMEMBER\nDISMEMBERED\nDISMEMBERMENT\nDISMEMBERS\nDISMISS\nDISMISSAL\nDISMISSALS\nDISMISSED\nDISMISSER\nDISMISSERS\nDISMISSES\nDISMISSING\nDISMOUNT\nDISMOUNTED\nDISMOUNTING\nDISMOUNTS\nDISNEY\nDISNEYLAND\nDISOBEDIENCE\nDISOBEDIENT\nDISOBEY\nDISOBEYED\nDISOBEYING\nDISOBEYS\nDISORDER\nDISORDERED\nDISORDERLY\nDISORDERS\nDISORGANIZED\nDISOWN\nDISOWNED\nDISOWNING\nDISOWNS\nDISPARAGE\nDISPARATE\nDISPARITIES\nDISPARITY\nDISPASSIONATE\nDISPATCH\nDISPATCHED\nDISPATCHER\nDISPATCHERS\nDISPATCHES\nDISPATCHING\nDISPEL\nDISPELL\nDISPELLED\nDISPELLING\nDISPELS\nDISPENSARY\nDISPENSATION\nDISPENSE\nDISPENSED\nDISPENSER\nDISPENSERS\nDISPENSES\nDISPENSING\nDISPERSAL\nDISPERSE\nDISPERSED\nDISPERSES\nDISPERSING\nDISPERSION\nDISPERSIONS\nDISPLACE\nDISPLACED\nDISPLACEMENT\nDISPLACEMENTS\nDISPLACES\nDISPLACING\nDISPLAY\nDISPLAYABLE\nDISPLAYED\nDISPLAYER\nDISPLAYING\nDISPLAYS\nDISPLEASE\nDISPLEASED\nDISPLEASES\nDISPLEASING\nDISPLEASURE\nDISPOSABLE\nDISPOSAL\nDISPOSALS\nDISPOSE\nDISPOSED\nDISPOSER\nDISPOSES\nDISPOSING\nDISPOSITION\nDISPOSITIONS\nDISPOSSESSED\nDISPROPORTIONATE\nDISPROVE\nDISPROVED\nDISPROVES\nDISPROVING\nDISPUTE\nDISPUTED\nDISPUTER\nDISPUTERS\nDISPUTES\nDISPUTING\nDISQUALIFICATION\nDISQUALIFIED\nDISQUALIFIES\nDISQUALIFY\nDISQUALIFYING\nDISQUIET\nDISQUIETING\nDISRAELI\nDISREGARD\nDISREGARDED\nDISREGARDING\nDISREGARDS\nDISRESPECTFUL\nDISRUPT\nDISRUPTED\nDISRUPTING\nDISRUPTION\nDISRUPTIONS\nDISRUPTIVE\nDISRUPTS\nDISSATISFACTION\nDISSATISFACTIONS\nDISSATISFACTORY\nDISSATISFIED\nDISSECT\nDISSECTS\nDISSEMBLE\nDISSEMINATE\nDISSEMINATED\nDISSEMINATES\nDISSEMINATING\nDISSEMINATION\nDISSENSION\nDISSENSIONS\nDISSENT\nDISSENTED\nDISSENTER\nDISSENTERS\nDISSENTING\nDISSENTS\nDISSERTATION\nDISSERTATIONS\nDISSERVICE\nDISSIDENT\nDISSIDENTS\nDISSIMILAR\nDISSIMILARITIES\nDISSIMILARITY\nDISSIPATE\nDISSIPATED\nDISSIPATES\nDISSIPATING\nDISSIPATION\nDISSOCIATE\nDISSOCIATED\nDISSOCIATES\nDISSOCIATING\nDISSOCIATION\nDISSOLUTION\nDISSOLUTIONS\nDISSOLVE\nDISSOLVED\nDISSOLVES\nDISSOLVING\nDISSONANT\nDISSUADE\nDISTAFF\nDISTAL\nDISTALLY\nDISTANCE\nDISTANCES\nDISTANT\nDISTANTLY\nDISTASTE\nDISTASTEFUL\nDISTASTEFULLY\nDISTASTES\nDISTEMPER\nDISTEMPERED\nDISTEMPERS\nDISTILL\nDISTILLATION\nDISTILLED\nDISTILLER\nDISTILLERS\nDISTILLERY\nDISTILLING\nDISTILLS\nDISTINCT\nDISTINCTION\nDISTINCTIONS\nDISTINCTIVE\nDISTINCTIVELY\nDISTINCTIVENESS\nDISTINCTLY\nDISTINCTNESS\nDISTINGUISH\nDISTINGUISHABLE\nDISTINGUISHED\nDISTINGUISHES\nDISTINGUISHING\nDISTORT\nDISTORTED\nDISTORTING\nDISTORTION\nDISTORTIONS\nDISTORTS\nDISTRACT\nDISTRACTED\nDISTRACTING\nDISTRACTION\nDISTRACTIONS\nDISTRACTS\nDISTRAUGHT\nDISTRESS\nDISTRESSED\nDISTRESSES\nDISTRESSING\nDISTRIBUTE\nDISTRIBUTED\nDISTRIBUTES\nDISTRIBUTING\nDISTRIBUTION\nDISTRIBUTIONAL\nDISTRIBUTIONS\nDISTRIBUTIVE\nDISTRIBUTIVITY\nDISTRIBUTOR\nDISTRIBUTORS\nDISTRICT\nDISTRICTS\nDISTRUST\nDISTRUSTED\nDISTURB\nDISTURBANCE\nDISTURBANCES\nDISTURBED\nDISTURBER\nDISTURBING\nDISTURBINGLY\nDISTURBS\nDISUSE\nDITCH\nDITCHES\nDITHER\nDITTO\nDITTY\nDITZEL\nDIURNAL\nDIVAN\nDIVANS\nDIVE\nDIVED\nDIVER\nDIVERGE\nDIVERGED\nDIVERGENCE\nDIVERGENCES\nDIVERGENT\nDIVERGES\nDIVERGING\nDIVERS\nDIVERSE\nDIVERSELY\nDIVERSIFICATION\nDIVERSIFIED\nDIVERSIFIES\nDIVERSIFY\nDIVERSIFYING\nDIVERSION\nDIVERSIONARY\nDIVERSIONS\nDIVERSITIES\nDIVERSITY\nDIVERT\nDIVERTED\nDIVERTING\nDIVERTS\nDIVES\nDIVEST\nDIVESTED\nDIVESTING\nDIVESTITURE\nDIVESTS\nDIVIDE\nDIVIDED\nDIVIDEND\nDIVIDENDS\nDIVIDER\nDIVIDERS\nDIVIDES\nDIVIDING\nDIVINE\nDIVINELY\nDIVINER\nDIVING\nDIVINING\nDIVINITIES\nDIVINITY\nDIVISIBILITY\nDIVISIBLE\nDIVISION\nDIVISIONAL\nDIVISIONS\nDIVISIVE\nDIVISOR\nDIVISORS\nDIVORCE\nDIVORCED\nDIVORCEE\nDIVULGE\nDIVULGED\nDIVULGES\nDIVULGING\nDIXIE\nDIXIECRATS\nDIXIELAND\nDIXON\nDIZZINESS\nDIZZY\nDJAKARTA\nDMITRI\nDNIEPER\nDOBBIN\nDOBBS\nDOBERMAN\nDOC\nDOCILE\nDOCK\nDOCKED\nDOCKET\nDOCKS\nDOCKSIDE\nDOCKYARD\nDOCTOR\nDOCTORAL\nDOCTORATE\nDOCTORATES\nDOCTORED\nDOCTORS\nDOCTRINAIRE\nDOCTRINAL\nDOCTRINE\nDOCTRINES\nDOCUMENT\nDOCUMENTARIES\nDOCUMENTARY\nDOCUMENTATION\nDOCUMENTATIONS\nDOCUMENTED\nDOCUMENTER\nDOCUMENTERS\nDOCUMENTING\nDOCUMENTS\nDODD\nDODECAHEDRA\nDODECAHEDRAL\nDODECAHEDRON\nDODGE\nDODGED\nDODGER\nDODGERS\nDODGING\nDODINGTON\nDODSON\nDOE\nDOER\nDOERS\nDOES\nDOG\nDOGE\nDOGGED\nDOGGEDLY\nDOGGEDNESS\nDOGGING\nDOGHOUSE\nDOGMA\nDOGMAS\nDOGMATIC\nDOGMATISM\nDOGS\nDOGTOWN\nDOHERTY\nDOING\nDOINGS\nDOLAN\nDOLDRUM\nDOLE\nDOLED\nDOLEFUL\nDOLEFULLY\nDOLES\nDOLL\nDOLLAR\nDOLLARS\nDOLLIES\nDOLLS\nDOLLY\nDOLORES\nDOLPHIN\nDOLPHINS\nDOMAIN\nDOMAINS\nDOME\nDOMED\nDOMENICO\nDOMES\nDOMESDAY\nDOMESTIC\nDOMESTICALLY\nDOMESTICATE\nDOMESTICATED\nDOMESTICATES\nDOMESTICATING\nDOMESTICATION\nDOMICILE\nDOMINANCE\nDOMINANT\nDOMINANTLY\nDOMINATE\nDOMINATED\nDOMINATES\nDOMINATING\nDOMINATION\nDOMINEER\nDOMINEERING\nDOMINGO\nDOMINIC\nDOMINICAN\nDOMINICANS\nDOMINICK\nDOMINION\nDOMINIQUE\nDOMINO\nDON\nDONAHUE\nDONALD\nDONALDSON\nDONATE\nDONATED\nDONATES\nDONATING\nDONATION\nDONE\nDONECK\nDONKEY\nDONKEYS\nDONNA\nDONNELLY\nDONNER\nDONNYBROOK\nDONOR\nDONOVAN\nDONS\nDOODLE\nDOOLEY\nDOOLITTLE\nDOOM\nDOOMED\nDOOMING\nDOOMS\nDOOMSDAY\nDOOR\nDOORBELL\nDOORKEEPER\nDOORMAN\nDOORMEN\nDOORS\nDOORSTEP\nDOORSTEPS\nDOORWAY\nDOORWAYS\nDOPE\nDOPED\nDOPER\nDOPERS\nDOPES\nDOPING\nDOPPLER\nDORA\nDORADO\nDORCAS\nDORCHESTER\nDOREEN\nDORIA\nDORIC\nDORICIZE\nDORICIZES\nDORIS\nDORMANT\nDORMITORIES\nDORMITORY\nDOROTHEA\nDOROTHY\nDORSET\nDORTMUND\nDOSAGE\nDOSE\nDOSED\nDOSES\nDOSSIER\nDOSSIERS\nDOSTOEVSKY\nDOT\nDOTE\nDOTED\nDOTES\nDOTING\nDOTINGLY\nDOTS\nDOTTED\nDOTTING\nDOUBLE\nDOUBLED\nDOUBLEDAY\nDOUBLEHEADER\nDOUBLER\nDOUBLERS\nDOUBLES\nDOUBLET\nDOUBLETON\nDOUBLETS\nDOUBLING\nDOUBLOON\nDOUBLY\nDOUBT\nDOUBTABLE\nDOUBTED\nDOUBTER\nDOUBTERS\nDOUBTFUL\nDOUBTFULLY\nDOUBTING\nDOUBTLESS\nDOUBTLESSLY\nDOUBTS\nDOUG\nDOUGH\nDOUGHERTY\nDOUGHNUT\nDOUGHNUTS\nDOUGLAS\nDOUGLASS\nDOVE\nDOVER\nDOVES\nDOVETAIL\nDOW\nDOWAGER\nDOWEL\nDOWLING\nDOWN\nDOWNCAST\nDOWNED\nDOWNERS\nDOWNEY\nDOWNFALL\nDOWNFALLEN\nDOWNGRADE\nDOWNHILL\nDOWNING\nDOWNLINK\nDOWNLINKS\nDOWNLOAD\nDOWNLOADED\nDOWNLOADING\nDOWNLOADS\nDOWNPLAY\nDOWNPLAYED\nDOWNPLAYING\nDOWNPLAYS\nDOWNPOUR\nDOWNRIGHT\nDOWNS\nDOWNSIDE\nDOWNSTAIRS\nDOWNSTREAM\nDOWNTOWN\nDOWNTOWNS\nDOWNTRODDEN\nDOWNTURN\nDOWNWARD\nDOWNWARDS\nDOWNY\nDOWRY\nDOYLE\nDOZE\nDOZED\nDOZEN\nDOZENS\nDOZENTH\nDOZES\nDOZING\nDRAB\nDRACO\nDRACONIAN\nDRAFT\nDRAFTED\nDRAFTEE\nDRAFTER\nDRAFTERS\nDRAFTING\nDRAFTS\nDRAFTSMAN\nDRAFTSMEN\nDRAFTY\nDRAG\nDRAGGED\nDRAGGING\nDRAGNET\nDRAGON\nDRAGONFLY\nDRAGONHEAD\nDRAGONS\nDRAGOON\nDRAGOONED\nDRAGOONS\nDRAGS\nDRAIN\nDRAINAGE\nDRAINED\nDRAINER\nDRAINING\nDRAINS\nDRAKE\nDRAM\nDRAMA\nDRAMAMINE\nDRAMAS\nDRAMATIC\nDRAMATICALLY\nDRAMATICS\nDRAMATIST\nDRAMATISTS\nDRANK\nDRAPE\nDRAPED\nDRAPER\nDRAPERIES\nDRAPERS\nDRAPERY\nDRAPES\nDRASTIC\nDRASTICALLY\nDRAUGHT\nDRAUGHTS\nDRAVIDIAN\nDRAW\nDRAWBACK\nDRAWBACKS\nDRAWBRIDGE\nDRAWBRIDGES\nDRAWER\nDRAWERS\nDRAWING\nDRAWINGS\nDRAWL\nDRAWLED\nDRAWLING\nDRAWLS\nDRAWN\nDRAWNLY\nDRAWNNESS\nDRAWS\nDREAD\nDREADED\nDREADFUL\nDREADFULLY\nDREADING\nDREADNOUGHT\nDREADS\nDREAM\nDREAMBOAT\nDREAMED\nDREAMER\nDREAMERS\nDREAMILY\nDREAMING\nDREAMLIKE\nDREAMS\nDREAMT\nDREAMY\nDREARINESS\nDREARY\nDREDGE\nDREGS\nDRENCH\nDRENCHED\nDRENCHES\nDRENCHING\nDRESS\nDRESSED\nDRESSER\nDRESSERS\nDRESSES\nDRESSING\nDRESSINGS\nDRESSMAKER\nDRESSMAKERS\nDREW\nDREXEL\nDREYFUSS\nDRIED\nDRIER\nDRIERS\nDRIES\nDRIEST\nDRIFT\nDRIFTED\nDRIFTER\nDRIFTERS\nDRIFTING\nDRIFTS\nDRILL\nDRILLED\nDRILLER\nDRILLING\nDRILLS\nDRILY\nDRINK\nDRINKABLE\nDRINKER\nDRINKERS\nDRINKING\nDRINKS\nDRIP\nDRIPPING\nDRIPPY\nDRIPS\nDRISCOLL\nDRIVE\nDRIVEN\nDRIVER\nDRIVERS\nDRIVES\nDRIVEWAY\nDRIVEWAYS\nDRIVING\nDRIZZLE\nDRIZZLY\nDROLL\nDROMEDARY\nDRONE\nDRONES\nDROOL\nDROOP\nDROOPED\nDROOPING\nDROOPS\nDROOPY\nDROP\nDROPLET\nDROPOUT\nDROPPED\nDROPPER\nDROPPERS\nDROPPING\nDROPPINGS\nDROPS\nDROSOPHILA\nDROUGHT\nDROUGHTS\nDROVE\nDROVER\nDROVERS\nDROVES\nDROWN\nDROWNED\nDROWNING\nDROWNINGS\nDROWNS\nDROWSINESS\nDROWSY\nDRUBBING\nDRUDGE\nDRUDGERY\nDRUG\nDRUGGIST\nDRUGGISTS\nDRUGS\nDRUGSTORE\nDRUM\nDRUMHEAD\nDRUMMED\nDRUMMER\nDRUMMERS\nDRUMMING\nDRUMMOND\nDRUMS\nDRUNK\nDRUNKARD\nDRUNKARDS\nDRUNKEN\nDRUNKENNESS\nDRUNKER\nDRUNKLY\nDRUNKS\nDRURY\nDRY\nDRYDEN\nDRYING\nDRYLY\nDUAL\nDUALISM\nDUALITIES\nDUALITY\nDUANE\nDUB\nDUBBED\nDUBHE\nDUBIOUS\nDUBIOUSLY\nDUBIOUSNESS\nDUBLIN\nDUBS\nDUBUQUE\nDUCHESS\nDUCHESSES\nDUCHY\nDUCK\nDUCKED\nDUCKING\nDUCKLING\nDUCKS\nDUCT\nDUCTS\nDUD\nDUDLEY\nDUE\nDUEL\nDUELING\nDUELS\nDUES\nDUET\nDUFFY\nDUG\nDUGAN\nDUKE\nDUKES\nDULL\nDULLED\nDULLER\nDULLES\nDULLEST\nDULLING\nDULLNESS\nDULLS\nDULLY\nDULUTH\nDULY\nDUMB\nDUMBBELL\nDUMBBELLS\nDUMBER\nDUMBEST\nDUMBLY\nDUMBNESS\nDUMMIES\nDUMMY\nDUMP\nDUMPED\nDUMPER\nDUMPING\nDUMPS\nDUMPTY\nDUNBAR\nDUNCAN\nDUNCE\nDUNCES\nDUNDEE\nDUNE\nDUNEDIN\nDUNES\nDUNG\nDUNGEON\nDUNGEONS\nDUNHAM\nDUNK\nDUNKIRK\nDUNLAP\nDUNLOP\nDUNN\nDUNNE\nDUPE\nDUPLEX\nDUPLICABLE\nDUPLICATE\nDUPLICATED\nDUPLICATES\nDUPLICATING\nDUPLICATION\nDUPLICATIONS\nDUPLICATOR\nDUPLICATORS\nDUPLICITY\nDUPONT\nDUPONT\nDUPONTS\nDUPONTS\nDUQUESNE\nDURABILITIES\nDURABILITY\nDURABLE\nDURABLY\nDURANGO\nDURATION\nDURATIONS\nDURER\nDURERS\nDURESS\nDURHAM\nDURING\nDURKEE\nDURKIN\nDURRELL\nDURWARD\nDUSENBERG\nDUSENBURY\nDUSK\nDUSKINESS\nDUSKY\nDUSSELDORF\nDUST\nDUSTBIN\nDUSTED\nDUSTER\nDUSTERS\nDUSTIER\nDUSTIEST\nDUSTIN\nDUSTING\nDUSTS\nDUSTY\nDUTCH\nDUTCHESS\nDUTCHMAN\nDUTCHMEN\nDUTIES\nDUTIFUL\nDUTIFULLY\nDUTIFULNESS\nDUTTON\nDUTY\nDVORAK\nDWARF\nDWARFED\nDWARFS\nDWARVES\nDWELL\nDWELLED\nDWELLER\nDWELLERS\nDWELLING\nDWELLINGS\nDWELLS\nDWELT\nDWIGHT\nDWINDLE\nDWINDLED\nDWINDLING\nDWYER\nDYAD\nDYADIC\nDYE\nDYED\nDYEING\nDYER\nDYERS\nDYES\nDYING\nDYKE\nDYLAN\nDYNAMIC\nDYNAMICALLY\nDYNAMICS\nDYNAMISM\nDYNAMITE\nDYNAMITED\nDYNAMITES\nDYNAMITING\nDYNAMO\nDYNASTIC\nDYNASTIES\nDYNASTY\nDYNE\nDYSENTERY\nDYSPEPTIC\nDYSTROPHY\nEACH\nEAGAN\nEAGER\nEAGERLY\nEAGERNESS\nEAGLE\nEAGLES\nEAR\nEARDRUM\nEARED\nEARL\nEARLIER\nEARLIEST\nEARLINESS\nEARLS\nEARLY\nEARMARK\nEARMARKED\nEARMARKING\nEARMARKINGS\nEARMARKS\nEARN\nEARNED\nEARNER\nEARNERS\nEARNEST\nEARNESTLY\nEARNESTNESS\nEARNING\nEARNINGS\nEARNS\nEARP\nEARPHONE\nEARRING\nEARRINGS\nEARS\nEARSPLITTING\nEARTH\nEARTHEN\nEARTHENWARE\nEARTHLINESS\nEARTHLING\nEARTHLY\nEARTHMAN\nEARTHMEN\nEARTHMOVER\nEARTHQUAKE\nEARTHQUAKES\nEARTHS\nEARTHWORM\nEARTHWORMS\nEARTHY\nEASE\nEASED\nEASEL\nEASEMENT\nEASEMENTS\nEASES\nEASIER\nEASIEST\nEASILY\nEASINESS\nEASING\nEAST\nEASTBOUND\nEASTER\nEASTERN\nEASTERNER\nEASTERNERS\nEASTERNMOST\nEASTHAMPTON\nEASTLAND\nEASTMAN\nEASTWARD\nEASTWARDS\nEASTWICK\nEASTWOOD\nEASY\nEASYGOING\nEAT\nEATEN\nEATER\nEATERS\nEATING\nEATINGS\nEATON\nEATS\nEAVES\nEAVESDROP\nEAVESDROPPED\nEAVESDROPPER\nEAVESDROPPERS\nEAVESDROPPING\nEAVESDROPS\nEBB\nEBBING\nEBBS\nEBEN\nEBONY\nECCENTRIC\nECCENTRICITIES\nECCENTRICITY\nECCENTRICS\nECCLES\nECCLESIASTICAL\nECHELON\nECHO\nECHOED\nECHOES\nECHOING\nECLECTIC\nECLIPSE\nECLIPSED\nECLIPSES\nECLIPSING\nECLIPTIC\nECOLE\nECOLOGY\nECONOMETRIC\nECONOMETRICA\nECONOMIC\nECONOMICAL\nECONOMICALLY\nECONOMICS\nECONOMIES\nECONOMIST\nECONOMISTS\nECONOMIZE\nECONOMIZED\nECONOMIZER\nECONOMIZERS\nECONOMIZES\nECONOMIZING\nECONOMY\nECOSYSTEM\nECSTASY\nECSTATIC\nECUADOR\nECUADORIAN\nEDDIE\nEDDIES\nEDDY\nEDEN\nEDENIZATION\nEDENIZATIONS\nEDENIZE\nEDENIZES\nEDGAR\nEDGE\nEDGED\nEDGERTON\nEDGES\nEDGEWATER\nEDGEWOOD\nEDGING\nEDIBLE\nEDICT\nEDICTS\nEDIFICE\nEDIFICES\nEDINBURGH\nEDISON\nEDIT\nEDITED\nEDITH\nEDITING\nEDITION\nEDITIONS\nEDITOR\nEDITORIAL\nEDITORIALLY\nEDITORIALS\nEDITORS\nEDITS\nEDMONDS\nEDMONDSON\nEDMONTON\nEDMUND\nEDNA\nEDSGER\nEDUARD\nEDUARDO\nEDUCABLE\nEDUCATE\nEDUCATED\nEDUCATES\nEDUCATING\nEDUCATION\nEDUCATIONAL\nEDUCATIONALLY\nEDUCATIONS\nEDUCATOR\nEDUCATORS\nEDWARD\nEDWARDIAN\nEDWARDINE\nEDWARDS\nEDWIN\nEDWINA\nEEL\nEELGRASS\nEELS\nEERIE\nEERILY\nEFFECT\nEFFECTED\nEFFECTING\nEFFECTIVE\nEFFECTIVELY\nEFFECTIVENESS\nEFFECTOR\nEFFECTORS\nEFFECTS\nEFFECTUALLY\nEFFECTUATE\nEFFEMINATE\nEFFICACY\nEFFICIENCIES\nEFFICIENCY\nEFFICIENT\nEFFICIENTLY\nEFFIE\nEFFIGY\nEFFORT\nEFFORTLESS\nEFFORTLESSLY\nEFFORTLESSNESS\nEFFORTS\nEGALITARIAN\nEGAN\nEGG\nEGGED\nEGGHEAD\nEGGING\nEGGPLANT\nEGGS\nEGGSHELL\nEGO\nEGOCENTRIC\nEGOS\nEGOTISM\nEGOTIST\nEGYPT\nEGYPTIAN\nEGYPTIANIZATION\nEGYPTIANIZATIONS\nEGYPTIANIZE\nEGYPTIANIZES\nEGYPTIANS\nEGYPTIZE\nEGYPTIZES\nEGYPTOLOGY\nEHRLICH\nEICHMANN\nEIFFEL\nEIGENFUNCTION\nEIGENSTATE\nEIGENVALUE\nEIGENVALUES\nEIGENVECTOR\nEIGHT\nEIGHTEEN\nEIGHTEENS\nEIGHTEENTH\nEIGHTFOLD\nEIGHTH\nEIGHTHES\nEIGHTIES\nEIGHTIETH\nEIGHTS\nEIGHTY\nEILEEN\nEINSTEIN\nEINSTEINIAN\nEIRE\nEISENHOWER\nEISNER\nEITHER\nEJACULATE\nEJACULATED\nEJACULATES\nEJACULATING\nEJACULATION\nEJACULATIONS\nEJECT\nEJECTED\nEJECTING\nEJECTS\nEKBERG\nEKE\nEKED\nEKES\nEKSTROM\nEKTACHROME\nELABORATE\nELABORATED\nELABORATELY\nELABORATENESS\nELABORATES\nELABORATING\nELABORATION\nELABORATIONS\nELABORATORS\nELAINE\nELAPSE\nELAPSED\nELAPSES\nELAPSING\nELASTIC\nELASTICALLY\nELASTICITY\nELBA\nELBOW\nELBOWING\nELBOWS\nELDER\nELDERLY\nELDERS\nELDEST\nELDON\nELEANOR\nELEAZAR\nELECT\nELECTED\nELECTING\nELECTION\nELECTIONS\nELECTIVE\nELECTIVES\nELECTOR\nELECTORAL\nELECTORATE\nELECTORS\nELECTRA\nELECTRIC\nELECTRICAL\nELECTRICALLY\nELECTRICALNESS\nELECTRICIAN\nELECTRICITY\nELECTRIFICATION\nELECTRIFY\nELECTRIFYING\nELECTRO\nELECTROCARDIOGRAM\nELECTROCARDIOGRAPH\nELECTROCUTE\nELECTROCUTED\nELECTROCUTES\nELECTROCUTING\nELECTROCUTION\nELECTROCUTIONS\nELECTRODE\nELECTRODES\nELECTROENCEPHALOGRAM\nELECTROENCEPHALOGRAPH\nELECTROENCEPHALOGRAPHY\nELECTROLYSIS\nELECTROLYTE\nELECTROLYTES\nELECTROLYTIC\nELECTROMAGNETIC\nELECTROMECHANICAL\nELECTRON\nELECTRONIC\nELECTRONICALLY\nELECTRONICS\nELECTRONS\nELECTROPHORESIS\nELECTROPHORUS\nELECTS\nELEGANCE\nELEGANT\nELEGANTLY\nELEGY\nELEMENT\nELEMENTAL\nELEMENTALS\nELEMENTARY\nELEMENTS\nELENA\nELEPHANT\nELEPHANTS\nELEVATE\nELEVATED\nELEVATES\nELEVATION\nELEVATOR\nELEVATORS\nELEVEN\nELEVENS\nELEVENTH\nELF\nELGIN\nELI\nELICIT\nELICITED\nELICITING\nELICITS\nELIDE\nELIGIBILITY\nELIGIBLE\nELIJAH\nELIMINATE\nELIMINATED\nELIMINATES\nELIMINATING\nELIMINATION\nELIMINATIONS\nELIMINATOR\nELIMINATORS\nELINOR\nELIOT\nELISABETH\nELISHA\nELISION\nELITE\nELITIST\nELIZABETH\nELIZABETHAN\nELIZABETHANIZE\nELIZABETHANIZES\nELIZABETHANS\nELK\nELKHART\nELKS\nELLA\nELLEN\nELLIE\nELLIOT\nELLIOTT\nELLIPSE\nELLIPSES\nELLIPSIS\nELLIPSOID\nELLIPSOIDAL\nELLIPSOIDS\nELLIPTIC\nELLIPTICAL\nELLIPTICALLY\nELLIS\nELLISON\nELLSWORTH\nELLWOOD\nELM\nELMER\nELMHURST\nELMIRA\nELMS\nELMSFORD\nELOISE\nELOPE\nELOQUENCE\nELOQUENT\nELOQUENTLY\nELROY\nELSE\nELSEVIER\nELSEWHERE\nELSIE\nELSINORE\nELTON\nELUCIDATE\nELUCIDATED\nELUCIDATES\nELUCIDATING\nELUCIDATION\nELUDE\nELUDED\nELUDES\nELUDING\nELUSIVE\nELUSIVELY\nELUSIVENESS\nELVES\nELVIS\nELY\nELYSEE\nELYSEES\nELYSIUM\nEMACIATE\nEMACIATED\nEMACS\nEMANATE\nEMANATING\nEMANCIPATE\nEMANCIPATION\nEMANUEL\nEMASCULATE\nEMBALM\nEMBARGO\nEMBARGOES\nEMBARK\nEMBARKED\nEMBARKS\nEMBARRASS\nEMBARRASSED\nEMBARRASSES\nEMBARRASSING\nEMBARRASSMENT\nEMBASSIES\nEMBASSY\nEMBED\nEMBEDDED\nEMBEDDING\nEMBEDS\nEMBELLISH\nEMBELLISHED\nEMBELLISHES\nEMBELLISHING\nEMBELLISHMENT\nEMBELLISHMENTS\nEMBER\nEMBEZZLE\nEMBLEM\nEMBODIED\nEMBODIES\nEMBODIMENT\nEMBODIMENTS\nEMBODY\nEMBODYING\nEMBOLDEN\nEMBRACE\nEMBRACED\nEMBRACES\nEMBRACING\nEMBROIDER\nEMBROIDERED\nEMBROIDERIES\nEMBROIDERS\nEMBROIDERY\nEMBROIL\nEMBRYO\nEMBRYOLOGY\nEMBRYOS\nEMERALD\nEMERALDS\nEMERGE\nEMERGED\nEMERGENCE\nEMERGENCIES\nEMERGENCY\nEMERGENT\nEMERGES\nEMERGING\nEMERITUS\nEMERSON\nEMERY\nEMIGRANT\nEMIGRANTS\nEMIGRATE\nEMIGRATED\nEMIGRATES\nEMIGRATING\nEMIGRATION\nEMIL\nEMILE\nEMILIO\nEMILY\nEMINENCE\nEMINENT\nEMINENTLY\nEMISSARY\nEMISSION\nEMIT\nEMITS\nEMITTED\nEMITTER\nEMITTING\nEMMA\nEMMANUEL\nEMMETT\nEMORY\nEMOTION\nEMOTIONAL\nEMOTIONALLY\nEMOTIONS\nEMPATHY\nEMPEROR\nEMPERORS\nEMPHASES\nEMPHASIS\nEMPHASIZE\nEMPHASIZED\nEMPHASIZES\nEMPHASIZING\nEMPHATIC\nEMPHATICALLY\nEMPIRE\nEMPIRES\nEMPIRICAL\nEMPIRICALLY\nEMPIRICIST\nEMPIRICISTS\nEMPLOY\nEMPLOYABLE\nEMPLOYED\nEMPLOYEE\nEMPLOYEES\nEMPLOYER\nEMPLOYERS\nEMPLOYING\nEMPLOYMENT\nEMPLOYMENTS\nEMPLOYS\nEMPORIUM\nEMPOWER\nEMPOWERED\nEMPOWERING\nEMPOWERS\nEMPRESS\nEMPTIED\nEMPTIER\nEMPTIES\nEMPTIEST\nEMPTILY\nEMPTINESS\nEMPTY\nEMPTYING\nEMULATE\nEMULATED\nEMULATES\nEMULATING\nEMULATION\nEMULATIONS\nEMULATOR\nEMULATORS\nENABLE\nENABLED\nENABLER\nENABLERS\nENABLES\nENABLING\nENACT\nENACTED\nENACTING\nENACTMENT\nENACTS\nENAMEL\nENAMELED\nENAMELING\nENAMELS\nENCAMP\nENCAMPED\nENCAMPING\nENCAMPS\nENCAPSULATE\nENCAPSULATED\nENCAPSULATES\nENCAPSULATING\nENCAPSULATION\nENCASED\nENCHANT\nENCHANTED\nENCHANTER\nENCHANTING\nENCHANTMENT\nENCHANTRESS\nENCHANTS\nENCIPHER\nENCIPHERED\nENCIPHERING\nENCIPHERS\nENCIRCLE\nENCIRCLED\nENCIRCLES\nENCLOSE\nENCLOSED\nENCLOSES\nENCLOSING\nENCLOSURE\nENCLOSURES\nENCODE\nENCODED\nENCODER\nENCODERS\nENCODES\nENCODING\nENCODINGS\nENCOMPASS\nENCOMPASSED\nENCOMPASSES\nENCOMPASSING\nENCORE\nENCOUNTER\nENCOUNTERED\nENCOUNTERING\nENCOUNTERS\nENCOURAGE\nENCOURAGED\nENCOURAGEMENT\nENCOURAGEMENTS\nENCOURAGES\nENCOURAGING\nENCOURAGINGLY\nENCROACH\nENCRUST\nENCRYPT\nENCRYPTED\nENCRYPTING\nENCRYPTION\nENCRYPTIONS\nENCRYPTS\nENCUMBER\nENCUMBERED\nENCUMBERING\nENCUMBERS\nENCYCLOPEDIA\nENCYCLOPEDIAS\nENCYCLOPEDIC\nEND\nENDANGER\nENDANGERED\nENDANGERING\nENDANGERS\nENDEAR\nENDEARED\nENDEARING\nENDEARS\nENDEAVOR\nENDEAVORED\nENDEAVORING\nENDEAVORS\nENDED\nENDEMIC\nENDER\nENDERS\nENDGAME\nENDICOTT\nENDING\nENDINGS\nENDLESS\nENDLESSLY\nENDLESSNESS\nENDORSE\nENDORSED\nENDORSEMENT\nENDORSES\nENDORSING\nENDOW\nENDOWED\nENDOWING\nENDOWMENT\nENDOWMENTS\nENDOWS\nENDPOINT\nENDS\nENDURABLE\nENDURABLY\nENDURANCE\nENDURE\nENDURED\nENDURES\nENDURING\nENDURINGLY\nENEMA\nENEMAS\nENEMIES\nENEMY\nENERGETIC\nENERGIES\nENERGIZE\nENERGY\nENERVATE\nENFEEBLE\nENFIELD\nENFORCE\nENFORCEABLE\nENFORCED\nENFORCEMENT\nENFORCER\nENFORCERS\nENFORCES\nENFORCING\nENFRANCHISE\nENG\nENGAGE\nENGAGED\nENGAGEMENT\nENGAGEMENTS\nENGAGES\nENGAGING\nENGAGINGLY\nENGEL\nENGELS\nENGENDER\nENGENDERED\nENGENDERING\nENGENDERS\nENGINE\nENGINEER\nENGINEERED\nENGINEERING\nENGINEERS\nENGINES\nENGLAND\nENGLANDER\nENGLANDERS\nENGLE\nENGLEWOOD\nENGLISH\nENGLISHIZE\nENGLISHIZES\nENGLISHMAN\nENGLISHMEN\nENGRAVE\nENGRAVED\nENGRAVER\nENGRAVES\nENGRAVING\nENGRAVINGS\nENGROSS\nENGROSSED\nENGROSSING\nENGULF\nENHANCE\nENHANCED\nENHANCEMENT\nENHANCEMENTS\nENHANCES\nENHANCING\nENID\nENIGMA\nENIGMATIC\nENJOIN\nENJOINED\nENJOINING\nENJOINS\nENJOY\nENJOYABLE\nENJOYABLY\nENJOYED\nENJOYING\nENJOYMENT\nENJOYS\nENLARGE\nENLARGED\nENLARGEMENT\nENLARGEMENTS\nENLARGER\nENLARGERS\nENLARGES\nENLARGING\nENLIGHTEN\nENLIGHTENED\nENLIGHTENING\nENLIGHTENMENT\nENLIST\nENLISTED\nENLISTMENT\nENLISTS\nENLIVEN\nENLIVENED\nENLIVENING\nENLIVENS\nENMITIES\nENMITY\nENNOBLE\nENNOBLED\nENNOBLES\nENNOBLING\nENNUI\nENOCH\nENORMITIES\nENORMITY\nENORMOUS\nENORMOUSLY\nENOS\nENOUGH\nENQUEUE\nENQUEUED\nENQUEUES\nENQUIRE\nENQUIRED\nENQUIRER\nENQUIRES\nENQUIRY\nENRAGE\nENRAGED\nENRAGES\nENRAGING\nENRAPTURE\nENRICH\nENRICHED\nENRICHES\nENRICHING\nENRICO\nENROLL\nENROLLED\nENROLLING\nENROLLMENT\nENROLLMENTS\nENROLLS\nENSEMBLE\nENSEMBLES\nENSIGN\nENSIGNS\nENSLAVE\nENSLAVED\nENSLAVES\nENSLAVING\nENSNARE\nENSNARED\nENSNARES\nENSNARING\nENSOLITE\nENSUE\nENSUED\nENSUES\nENSUING\nENSURE\nENSURED\nENSURER\nENSURERS\nENSURES\nENSURING\nENTAIL\nENTAILED\nENTAILING\nENTAILS\nENTANGLE\nENTER\nENTERED\nENTERING\nENTERPRISE\nENTERPRISES\nENTERPRISING\nENTERS\nENTERTAIN\nENTERTAINED\nENTERTAINER\nENTERTAINERS\nENTERTAINING\nENTERTAININGLY\nENTERTAINMENT\nENTERTAINMENTS\nENTERTAINS\nENTHUSIASM\nENTHUSIASMS\nENTHUSIAST\nENTHUSIASTIC\nENTHUSIASTICALLY\nENTHUSIASTS\nENTICE\nENTICED\nENTICER\nENTICERS\nENTICES\nENTICING\nENTIRE\nENTIRELY\nENTIRETIES\nENTIRETY\nENTITIES\nENTITLE\nENTITLED\nENTITLES\nENTITLING\nENTITY\nENTOMB\nENTRANCE\nENTRANCED\nENTRANCES\nENTRAP\nENTREAT\nENTREATED\nENTREATY\nENTREE\nENTRENCH\nENTRENCHED\nENTRENCHES\nENTRENCHING\nENTREPRENEUR\nENTREPRENEURIAL\nENTREPRENEURS\nENTRIES\nENTROPY\nENTRUST\nENTRUSTED\nENTRUSTING\nENTRUSTS\nENTRY\nENUMERABLE\nENUMERATE\nENUMERATED\nENUMERATES\nENUMERATING\nENUMERATION\nENUMERATIVE\nENUMERATOR\nENUMERATORS\nENUNCIATION\nENVELOP\nENVELOPE\nENVELOPED\nENVELOPER\nENVELOPES\nENVELOPING\nENVELOPS\nENVIED\nENVIES\nENVIOUS\nENVIOUSLY\nENVIOUSNESS\nENVIRON\nENVIRONING\nENVIRONMENT\nENVIRONMENTAL\nENVIRONMENTS\nENVIRONS\nENVISAGE\nENVISAGED\nENVISAGES\nENVISION\nENVISIONED\nENVISIONING\nENVISIONS\nENVOY\nENVOYS\nENVY\nENZYME\nEOCENE\nEPAULET\nEPAULETS\nEPHEMERAL\nEPHESIAN\nEPHESIANS\nEPHESUS\nEPHRAIM\nEPIC\nEPICENTER\nEPICS\nEPICUREAN\nEPICURIZE\nEPICURIZES\nEPICURUS\nEPIDEMIC\nEPIDEMICS\nEPIDERMIS\nEPIGRAM\nEPILEPTIC\nEPILOGUE\nEPIPHANY\nEPISCOPAL\nEPISCOPALIAN\nEPISCOPALIANIZE\nEPISCOPALIANIZES\nEPISODE\nEPISODES\nEPISTEMOLOGICAL\nEPISTEMOLOGY\nEPISTLE\nEPISTLES\nEPITAPH\nEPITAPHS\nEPITAXIAL\nEPITAXIALLY\nEPITHET\nEPITHETS\nEPITOMIZE\nEPITOMIZED\nEPITOMIZES\nEPITOMIZING\nEPOCH\nEPOCHS\nEPSILON\nEPSOM\nEPSTEIN\nEQUAL\nEQUALED\nEQUALING\nEQUALITIES\nEQUALITY\nEQUALIZATION\nEQUALIZE\nEQUALIZED\nEQUALIZER\nEQUALIZERS\nEQUALIZES\nEQUALIZING\nEQUALLY\nEQUALS\nEQUATE\nEQUATED\nEQUATES\nEQUATING\nEQUATION\nEQUATIONS\nEQUATOR\nEQUATORIAL\nEQUATORS\nEQUESTRIAN\nEQUIDISTANT\nEQUILATERAL\nEQUILIBRATE\nEQUILIBRIA\nEQUILIBRIUM\nEQUILIBRIUMS\nEQUINOX\nEQUIP\nEQUIPMENT\nEQUIPOISE\nEQUIPPED\nEQUIPPING\nEQUIPS\nEQUITABLE\nEQUITABLY\nEQUITY\nEQUIVALENCE\nEQUIVALENCES\nEQUIVALENT\nEQUIVALENTLY\nEQUIVALENTS\nEQUIVOCAL\nEQUIVOCALLY\nERA\nERADICATE\nERADICATED\nERADICATES\nERADICATING\nERADICATION\nERAS\nERASABLE\nERASE\nERASED\nERASER\nERASERS\nERASES\nERASING\nERASMUS\nERASTUS\nERASURE\nERATO\nERATOSTHENES\nERE\nERECT\nERECTED\nERECTING\nERECTION\nERECTIONS\nERECTOR\nERECTORS\nERECTS\nERG\nERGO\nERGODIC\nERIC\nERICH\nERICKSON\nERICSSON\nERIE\nERIK\nERIKSON\nERIS\nERLANG\nERLENMEYER\nERLENMEYERS\nERMINE\nERMINES\nERNE\nERNEST\nERNESTINE\nERNIE\nERNST\nERODE\nEROS\nEROSION\nEROTIC\nEROTICA\nERR\nERRAND\nERRANT\nERRATA\nERRATIC\nERRATUM\nERRED\nERRING\nERRINGLY\nERROL\nERRONEOUS\nERRONEOUSLY\nERRONEOUSNESS\nERROR\nERRORS\nERRS\nERSATZ\nERSKINE\nERUDITE\nERUPT\nERUPTION\nERVIN\nERWIN\nESCALATE\nESCALATED\nESCALATES\nESCALATING\nESCALATION\nESCAPABLE\nESCAPADE\nESCAPADES\nESCAPE\nESCAPED\nESCAPEE\nESCAPEES\nESCAPES\nESCAPING\nESCHERICHIA\nESCHEW\nESCHEWED\nESCHEWING\nESCHEWS\nESCORT\nESCORTED\nESCORTING\nESCORTS\nESCROW\nESKIMO\nESKIMOIZED\nESKIMOIZEDS\nESKIMOS\nESMARK\nESOTERIC\nESPAGNOL\nESPECIAL\nESPECIALLY\nESPIONAGE\nESPOSITO\nESPOUSE\nESPOUSED\nESPOUSES\nESPOUSING\nESPRIT\nESPY\nESQUIRE\nESQUIRES\nESSAY\nESSAYED\nESSAYS\nESSEN\nESSENCE\nESSENCES\nESSENIZE\nESSENIZES\nESSENTIAL\nESSENTIALLY\nESSENTIALS\nESSEX\nESTABLISH\nESTABLISHED\nESTABLISHES\nESTABLISHING\nESTABLISHMENT\nESTABLISHMENTS\nESTATE\nESTATES\nESTEEM\nESTEEMED\nESTEEMING\nESTEEMS\nESTELLA\nESTES\nESTHER\nESTHETICS\nESTIMATE\nESTIMATED\nESTIMATES\nESTIMATING\nESTIMATION\nESTIMATIONS\nESTONIA\nESTONIAN\nETCH\nETCHING\nETERNAL\nETERNALLY\nETERNITIES\nETERNITY\nETHAN\nETHEL\nETHER\nETHEREAL\nETHEREALLY\nETHERNET\nETHERNETS\nETHERS\nETHIC\nETHICAL\nETHICALLY\nETHICS\nETHIOPIA\nETHIOPIANS\nETHNIC\nETIQUETTE\nETRURIA\nETRUSCAN\nETYMOLOGY\nEUCALYPTUS\nEUCHARIST\nEUCLID\nEUCLIDEAN\nEUGENE\nEUGENIA\nEULER\nEULERIAN\nEUMENIDES\nEUNICE\nEUNUCH\nEUNUCHS\nEUPHEMISM\nEUPHEMISMS\nEUPHORIA\nEUPHORIC\nEUPHRATES\nEURASIA\nEURASIAN\nEUREKA\nEURIPIDES\nEUROPA\nEUROPE\nEUROPEAN\nEUROPEANIZATION\nEUROPEANIZATIONS\nEUROPEANIZE\nEUROPEANIZED\nEUROPEANIZES\nEUROPEANS\nEURYDICE\nEUTERPE\nEUTHANASIA\nEVA\nEVACUATE\nEVACUATED\nEVACUATION\nEVADE\nEVADED\nEVADES\nEVADING\nEVALUATE\nEVALUATED\nEVALUATES\nEVALUATING\nEVALUATION\nEVALUATIONS\nEVALUATIVE\nEVALUATOR\nEVALUATORS\nEVANGELINE\nEVANS\nEVANSTON\nEVANSVILLE\nEVAPORATE\nEVAPORATED\nEVAPORATING\nEVAPORATION\nEVAPORATIVE\nEVASION\nEVASIVE\nEVE\nEVELYN\nEVEN\nEVENED\nEVENHANDED\nEVENHANDEDLY\nEVENHANDEDNESS\nEVENING\nEVENINGS\nEVENLY\nEVENNESS\nEVENS\nEVENSEN\nEVENT\nEVENTFUL\nEVENTFULLY\nEVENTS\nEVENTUAL\nEVENTUALITIES\nEVENTUALITY\nEVENTUALLY\nEVER\nEVEREADY\nEVEREST\nEVERETT\nEVERGLADE\nEVERGLADES\nEVERGREEN\nEVERHART\nEVERLASTING\nEVERLASTINGLY\nEVERMORE\nEVERY\nEVERYBODY\nEVERYDAY\nEVERYONE\nEVERYTHING\nEVERYWHERE\nEVICT\nEVICTED\nEVICTING\nEVICTION\nEVICTIONS\nEVICTS\nEVIDENCE\nEVIDENCED\nEVIDENCES\nEVIDENCING\nEVIDENT\nEVIDENTLY\nEVIL\nEVILLER\nEVILLY\nEVILS\nEVINCE\nEVINCED\nEVINCES\nEVOKE\nEVOKED\nEVOKES\nEVOKING\nEVOLUTE\nEVOLUTES\nEVOLUTION\nEVOLUTIONARY\nEVOLUTIONS\nEVOLVE\nEVOLVED\nEVOLVES\nEVOLVING\nEWE\nEWEN\nEWES\nEWING\nEXACERBATE\nEXACERBATED\nEXACERBATES\nEXACERBATING\nEXACERBATION\nEXACERBATIONS\nEXACT\nEXACTED\nEXACTING\nEXACTINGLY\nEXACTION\nEXACTIONS\nEXACTITUDE\nEXACTLY\nEXACTNESS\nEXACTS\nEXAGGERATE\nEXAGGERATED\nEXAGGERATES\nEXAGGERATING\nEXAGGERATION\nEXAGGERATIONS\nEXALT\nEXALTATION\nEXALTED\nEXALTING\nEXALTS\nEXAM\nEXAMINATION\nEXAMINATIONS\nEXAMINE\nEXAMINED\nEXAMINER\nEXAMINERS\nEXAMINES\nEXAMINING\nEXAMPLE\nEXAMPLES\nEXAMS\nEXASPERATE\nEXASPERATED\nEXASPERATES\nEXASPERATING\nEXASPERATION\nEXCAVATE\nEXCAVATED\nEXCAVATES\nEXCAVATING\nEXCAVATION\nEXCAVATIONS\nEXCEED\nEXCEEDED\nEXCEEDING\nEXCEEDINGLY\nEXCEEDS\nEXCEL\nEXCELLED\nEXCELLENCE\nEXCELLENCES\nEXCELLENCY\nEXCELLENT\nEXCELLENTLY\nEXCELLING\nEXCELS\nEXCEPT\nEXCEPTED\nEXCEPTING\nEXCEPTION\nEXCEPTIONABLE\nEXCEPTIONAL\nEXCEPTIONALLY\nEXCEPTIONS\nEXCEPTS\nEXCERPT\nEXCERPTED\nEXCERPTS\nEXCESS\nEXCESSES\nEXCESSIVE\nEXCESSIVELY\nEXCHANGE\nEXCHANGEABLE\nEXCHANGED\nEXCHANGES\nEXCHANGING\nEXCHEQUER\nEXCHEQUERS\nEXCISE\nEXCISED\nEXCISES\nEXCISING\nEXCISION\nEXCITABLE\nEXCITATION\nEXCITATIONS\nEXCITE\nEXCITED\nEXCITEDLY\nEXCITEMENT\nEXCITES\nEXCITING\nEXCITINGLY\nEXCITON\nEXCLAIM\nEXCLAIMED\nEXCLAIMER\nEXCLAIMERS\nEXCLAIMING\nEXCLAIMS\nEXCLAMATION\nEXCLAMATIONS\nEXCLAMATORY\nEXCLUDE\nEXCLUDED\nEXCLUDES\nEXCLUDING\nEXCLUSION\nEXCLUSIONARY\nEXCLUSIONS\nEXCLUSIVE\nEXCLUSIVELY\nEXCLUSIVENESS\nEXCLUSIVITY\nEXCOMMUNICATE\nEXCOMMUNICATED\nEXCOMMUNICATES\nEXCOMMUNICATING\nEXCOMMUNICATION\nEXCRETE\nEXCRETED\nEXCRETES\nEXCRETING\nEXCRETION\nEXCRETIONS\nEXCRETORY\nEXCRUCIATE\nEXCURSION\nEXCURSIONS\nEXCUSABLE\nEXCUSABLY\nEXCUSE\nEXCUSED\nEXCUSES\nEXCUSING\nEXEC\nEXECUTABLE\nEXECUTE\nEXECUTED\nEXECUTES\nEXECUTING\nEXECUTION\nEXECUTIONAL\nEXECUTIONER\nEXECUTIONS\nEXECUTIVE\nEXECUTIVES\nEXECUTOR\nEXECUTORS\nEXEMPLAR\nEXEMPLARY\nEXEMPLIFICATION\nEXEMPLIFIED\nEXEMPLIFIER\nEXEMPLIFIERS\nEXEMPLIFIES\nEXEMPLIFY\nEXEMPLIFYING\nEXEMPT\nEXEMPTED\nEXEMPTING\nEXEMPTION\nEXEMPTS\nEXERCISE\nEXERCISED\nEXERCISER\nEXERCISERS\nEXERCISES\nEXERCISING\nEXERT\nEXERTED\nEXERTING\nEXERTION\nEXERTIONS\nEXERTS\nEXETER\nEXHALE\nEXHALED\nEXHALES\nEXHALING\nEXHAUST\nEXHAUSTED\nEXHAUSTEDLY\nEXHAUSTING\nEXHAUSTION\nEXHAUSTIVE\nEXHAUSTIVELY\nEXHAUSTS\nEXHIBIT\nEXHIBITED\nEXHIBITING\nEXHIBITION\nEXHIBITIONS\nEXHIBITOR\nEXHIBITORS\nEXHIBITS\nEXHILARATE\nEXHORT\nEXHORTATION\nEXHORTATIONS\nEXHUME\nEXIGENCY\nEXILE\nEXILED\nEXILES\nEXILING\nEXIST\nEXISTED\nEXISTENCE\nEXISTENT\nEXISTENTIAL\nEXISTENTIALISM\nEXISTENTIALIST\nEXISTENTIALISTS\nEXISTENTIALLY\nEXISTING\nEXISTS\nEXIT\nEXITED\nEXITING\nEXITS\nEXODUS\nEXORBITANT\nEXORBITANTLY\nEXORCISM\nEXORCIST\nEXOSKELETON\nEXOTIC\nEXPAND\nEXPANDABLE\nEXPANDED\nEXPANDER\nEXPANDERS\nEXPANDING\nEXPANDS\nEXPANSE\nEXPANSES\nEXPANSIBLE\nEXPANSION\nEXPANSIONISM\nEXPANSIONS\nEXPANSIVE\nEXPECT\nEXPECTANCY\nEXPECTANT\nEXPECTANTLY\nEXPECTATION\nEXPECTATIONS\nEXPECTED\nEXPECTEDLY\nEXPECTING\nEXPECTINGLY\nEXPECTS\nEXPEDIENCY\nEXPEDIENT\nEXPEDIENTLY\nEXPEDITE\nEXPEDITED\nEXPEDITES\nEXPEDITING\nEXPEDITION\nEXPEDITIONS\nEXPEDITIOUS\nEXPEDITIOUSLY\nEXPEL\nEXPELLED\nEXPELLING\nEXPELS\nEXPEND\nEXPENDABLE\nEXPENDED\nEXPENDING\nEXPENDITURE\nEXPENDITURES\nEXPENDS\nEXPENSE\nEXPENSES\nEXPENSIVE\nEXPENSIVELY\nEXPERIENCE\nEXPERIENCED\nEXPERIENCES\nEXPERIENCING\nEXPERIMENT\nEXPERIMENTAL\nEXPERIMENTALLY\nEXPERIMENTATION\nEXPERIMENTATIONS\nEXPERIMENTED\nEXPERIMENTER\nEXPERIMENTERS\nEXPERIMENTING\nEXPERIMENTS\nEXPERT\nEXPERTISE\nEXPERTLY\nEXPERTNESS\nEXPERTS\nEXPIRATION\nEXPIRATIONS\nEXPIRE\nEXPIRED\nEXPIRES\nEXPIRING\nEXPLAIN\nEXPLAINABLE\nEXPLAINED\nEXPLAINER\nEXPLAINERS\nEXPLAINING\nEXPLAINS\nEXPLANATION\nEXPLANATIONS\nEXPLANATORY\nEXPLETIVE\nEXPLICIT\nEXPLICITLY\nEXPLICITNESS\nEXPLODE\nEXPLODED\nEXPLODES\nEXPLODING\nEXPLOIT\nEXPLOITABLE\nEXPLOITATION\nEXPLOITATIONS\nEXPLOITED\nEXPLOITER\nEXPLOITERS\nEXPLOITING\nEXPLOITS\nEXPLORATION\nEXPLORATIONS\nEXPLORATORY\nEXPLORE\nEXPLORED\nEXPLORER\nEXPLORERS\nEXPLORES\nEXPLORING\nEXPLOSION\nEXPLOSIONS\nEXPLOSIVE\nEXPLOSIVELY\nEXPLOSIVES\nEXPONENT\nEXPONENTIAL\nEXPONENTIALLY\nEXPONENTIALS\nEXPONENTIATE\nEXPONENTIATED\nEXPONENTIATES\nEXPONENTIATING\nEXPONENTIATION\nEXPONENTIATIONS\nEXPONENTS\nEXPORT\nEXPORTATION\nEXPORTED\nEXPORTER\nEXPORTERS\nEXPORTING\nEXPORTS\nEXPOSE\nEXPOSED\nEXPOSER\nEXPOSERS\nEXPOSES\nEXPOSING\nEXPOSITION\nEXPOSITIONS\nEXPOSITORY\nEXPOSURE\nEXPOSURES\nEXPOUND\nEXPOUNDED\nEXPOUNDER\nEXPOUNDING\nEXPOUNDS\nEXPRESS\nEXPRESSED\nEXPRESSES\nEXPRESSIBILITY\nEXPRESSIBLE\nEXPRESSIBLY\nEXPRESSING\nEXPRESSION\nEXPRESSIONS\nEXPRESSIVE\nEXPRESSIVELY\nEXPRESSIVENESS\nEXPRESSLY\nEXPULSION\nEXPUNGE\nEXPUNGED\nEXPUNGES\nEXPUNGING\nEXPURGATE\nEXQUISITE\nEXQUISITELY\nEXQUISITENESS\nEXTANT\nEXTEMPORANEOUS\nEXTEND\nEXTENDABLE\nEXTENDED\nEXTENDING\nEXTENDS\nEXTENSIBILITY\nEXTENSIBLE\nEXTENSION\nEXTENSIONS\nEXTENSIVE\nEXTENSIVELY\nEXTENT\nEXTENTS\nEXTENUATE\nEXTENUATED\nEXTENUATING\nEXTENUATION\nEXTERIOR\nEXTERIORS\nEXTERMINATE\nEXTERMINATED\nEXTERMINATES\nEXTERMINATING\nEXTERMINATION\nEXTERNAL\nEXTERNALLY\nEXTINCT\nEXTINCTION\nEXTINGUISH\nEXTINGUISHED\nEXTINGUISHER\nEXTINGUISHES\nEXTINGUISHING\nEXTIRPATE\nEXTOL\nEXTORT\nEXTORTED\nEXTORTION\nEXTRA\nEXTRACT\nEXTRACTED\nEXTRACTING\nEXTRACTION\nEXTRACTIONS\nEXTRACTOR\nEXTRACTORS\nEXTRACTS\nEXTRACURRICULAR\nEXTRAMARITAL\nEXTRANEOUS\nEXTRANEOUSLY\nEXTRANEOUSNESS\nEXTRAORDINARILY\nEXTRAORDINARINESS\nEXTRAORDINARY\nEXTRAPOLATE\nEXTRAPOLATED\nEXTRAPOLATES\nEXTRAPOLATING\nEXTRAPOLATION\nEXTRAPOLATIONS\nEXTRAS\nEXTRATERRESTRIAL\nEXTRAVAGANCE\nEXTRAVAGANT\nEXTRAVAGANTLY\nEXTRAVAGANZA\nEXTREMAL\nEXTREME\nEXTREMELY\nEXTREMES\nEXTREMIST\nEXTREMISTS\nEXTREMITIES\nEXTREMITY\nEXTRICATE\nEXTRINSIC\nEXTROVERT\nEXUBERANCE\nEXULT\nEXULTATION\nEXXON\nEYE\nEYEBALL\nEYEBROW\nEYEBROWS\nEYED\nEYEFUL\nEYEGLASS\nEYEGLASSES\nEYEING\nEYELASH\nEYELID\nEYELIDS\nEYEPIECE\nEYEPIECES\nEYER\nEYERS\nEYES\nEYESIGHT\nEYEWITNESS\nEYEWITNESSES\nEYING\nEZEKIEL\nEZRA\nFABER\nFABIAN\nFABLE\nFABLED\nFABLES\nFABRIC\nFABRICATE\nFABRICATED\nFABRICATES\nFABRICATING\nFABRICATION\nFABRICS\nFABULOUS\nFABULOUSLY\nFACADE\nFACADED\nFACADES\nFACE\nFACED\nFACES\nFACET\nFACETED\nFACETS\nFACIAL\nFACILE\nFACILELY\nFACILITATE\nFACILITATED\nFACILITATES\nFACILITATING\nFACILITIES\nFACILITY\nFACING\nFACINGS\nFACSIMILE\nFACSIMILES\nFACT\nFACTION\nFACTIONS\nFACTIOUS\nFACTO\nFACTOR\nFACTORED\nFACTORIAL\nFACTORIES\nFACTORING\nFACTORIZATION\nFACTORIZATIONS\nFACTORS\nFACTORY\nFACTS\nFACTUAL\nFACTUALLY\nFACULTIES\nFACULTY\nFADE\nFADED\nFADEOUT\nFADER\nFADERS\nFADES\nFADING\nFAFNIR\nFAG\nFAGIN\nFAGS\nFAHEY\nFAHRENHEIT\nFAHRENHEITS\nFAIL\nFAILED\nFAILING\nFAILINGS\nFAILS\nFAILSOFT\nFAILURE\nFAILURES\nFAIN\nFAINT\nFAINTED\nFAINTER\nFAINTEST\nFAINTING\nFAINTLY\nFAINTNESS\nFAINTS\nFAIR\nFAIRBANKS\nFAIRCHILD\nFAIRER\nFAIREST\nFAIRFAX\nFAIRFIELD\nFAIRIES\nFAIRING\nFAIRLY\nFAIRMONT\nFAIRNESS\nFAIRPORT\nFAIRS\nFAIRVIEW\nFAIRY\nFAIRYLAND\nFAITH\nFAITHFUL\nFAITHFULLY\nFAITHFULNESS\nFAITHLESS\nFAITHLESSLY\nFAITHLESSNESS\nFAITHS\nFAKE\nFAKED\nFAKER\nFAKES\nFAKING\nFALCON\nFALCONER\nFALCONS\nFALK\nFALKLAND\nFALKLANDS\nFALL\nFALLACIES\nFALLACIOUS\nFALLACY\nFALLEN\nFALLIBILITY\nFALLIBLE\nFALLING\nFALLOPIAN\nFALLOUT\nFALLOW\nFALLS\nFALMOUTH\nFALSE\nFALSEHOOD\nFALSEHOODS\nFALSELY\nFALSENESS\nFALSIFICATION\nFALSIFIED\nFALSIFIES\nFALSIFY\nFALSIFYING\nFALSITY\nFALSTAFF\nFALTER\nFALTERED\nFALTERS\nFAME\nFAMED\nFAMES\nFAMILIAL\nFAMILIAR\nFAMILIARITIES\nFAMILIARITY\nFAMILIARIZATION\nFAMILIARIZE\nFAMILIARIZED\nFAMILIARIZES\nFAMILIARIZING\nFAMILIARLY\nFAMILIARNESS\nFAMILIES\nFAMILISM\nFAMILY\nFAMINE\nFAMINES\nFAMISH\nFAMOUS\nFAMOUSLY\nFAN\nFANATIC\nFANATICISM\nFANATICS\nFANCIED\nFANCIER\nFANCIERS\nFANCIES\nFANCIEST\nFANCIFUL\nFANCIFULLY\nFANCILY\nFANCINESS\nFANCY\nFANCYING\nFANFARE\nFANFOLD\nFANG\nFANGLED\nFANGS\nFANNED\nFANNIES\nFANNING\nFANNY\nFANOUT\nFANS\nFANTASIES\nFANTASIZE\nFANTASTIC\nFANTASY\nFAQ\nFAR\nFARAD\nFARADAY\nFARAWAY\nFARBER\nFARCE\nFARCES\nFARE\nFARED\nFARES\nFAREWELL\nFAREWELLS\nFARFETCHED\nFARGO\nFARINA\nFARING\nFARKAS\nFARLEY\nFARM\nFARMED\nFARMER\nFARMERS\nFARMHOUSE\nFARMHOUSES\nFARMING\nFARMINGTON\nFARMLAND\nFARMS\nFARMYARD\nFARMYARDS\nFARNSWORTH\nFARRELL\nFARSIGHTED\nFARTHER\nFARTHEST\nFARTHING\nFASCICLE\nFASCINATE\nFASCINATED\nFASCINATES\nFASCINATING\nFASCINATION\nFASCISM\nFASCIST\nFASHION\nFASHIONABLE\nFASHIONABLY\nFASHIONED\nFASHIONING\nFASHIONS\nFAST\nFASTED\nFASTEN\nFASTENED\nFASTENER\nFASTENERS\nFASTENING\nFASTENINGS\nFASTENS\nFASTER\nFASTEST\nFASTIDIOUS\nFASTING\nFASTNESS\nFASTS\nFAT\nFATAL\nFATALITIES\nFATALITY\nFATALLY\nFATALS\nFATE\nFATED\nFATEFUL\nFATES\nFATHER\nFATHERED\nFATHERLAND\nFATHERLY\nFATHERS\nFATHOM\nFATHOMED\nFATHOMING\nFATHOMS\nFATIGUE\nFATIGUED\nFATIGUES\nFATIGUING\nFATIMA\nFATNESS\nFATS\nFATTEN\nFATTENED\nFATTENER\nFATTENERS\nFATTENING\nFATTENS\nFATTER\nFATTEST\nFATTY\nFAUCET\nFAULKNER\nFAULKNERIAN\nFAULT\nFAULTED\nFAULTING\nFAULTLESS\nFAULTLESSLY\nFAULTS\nFAULTY\nFAUN\nFAUNA\nFAUNTLEROY\nFAUST\nFAUSTIAN\nFAUSTUS\nFAVOR\nFAVORABLE\nFAVORABLY\nFAVORED\nFAVORER\nFAVORING\nFAVORITE\nFAVORITES\nFAVORITISM\nFAVORS\nFAWKES\nFAWN\nFAWNED\nFAWNING\nFAWNS\nFAYETTE\nFAYETTEVILLE\nFAZE\nFEAR\nFEARED\nFEARFUL\nFEARFULLY\nFEARING\nFEARLESS\nFEARLESSLY\nFEARLESSNESS\nFEARS\nFEARSOME\nFEASIBILITY\nFEASIBLE\nFEAST\nFEASTED\nFEASTING\nFEASTS\nFEAT\nFEATHER\nFEATHERBED\nFEATHERBEDDING\nFEATHERED\nFEATHERER\nFEATHERERS\nFEATHERING\nFEATHERMAN\nFEATHERS\nFEATHERWEIGHT\nFEATHERY\nFEATS\nFEATURE\nFEATURED\nFEATURES\nFEATURING\nFEBRUARIES\nFEBRUARY\nFECUND\nFED\nFEDDERS\nFEDERAL\nFEDERALIST\nFEDERALLY\nFEDERALS\nFEDERATION\nFEDORA\nFEE\nFEEBLE\nFEEBLENESS\nFEEBLER\nFEEBLEST\nFEEBLY\nFEED\nFEEDBACK\nFEEDER\nFEEDERS\nFEEDING\nFEEDINGS\nFEEDS\nFEEL\nFEELER\nFEELERS\nFEELING\nFEELINGLY\nFEELINGS\nFEELS\nFEENEY\nFEES\nFEET\nFEIGN\nFEIGNED\nFEIGNING\nFELDER\nFELDMAN\nFELICE\nFELICIA\nFELICITIES\nFELICITY\nFELINE\nFELIX\nFELL\nFELLATIO\nFELLED\nFELLING\nFELLINI\nFELLOW\nFELLOWS\nFELLOWSHIP\nFELLOWSHIPS\nFELON\nFELONIOUS\nFELONY\nFELT\nFELTS\nFEMALE\nFEMALES\nFEMININE\nFEMININITY\nFEMINISM\nFEMINIST\nFEMUR\nFEMURS\nFEN\nFENCE\nFENCED\nFENCER\nFENCERS\nFENCES\nFENCING\nFEND\nFENTON\nFENWICK\nFERBER\nFERDINAND\nFERDINANDO\nFERGUSON\nFERMAT\nFERMENT\nFERMENTATION\nFERMENTATIONS\nFERMENTED\nFERMENTING\nFERMENTS\nFERMI\nFERN\nFERNANDO\nFERNS\nFEROCIOUS\nFEROCIOUSLY\nFEROCIOUSNESS\nFEROCITY\nFERREIRA\nFERRER\nFERRET\nFERRIED\nFERRIES\nFERRITE\nFERRY\nFERTILE\nFERTILELY\nFERTILITY\nFERTILIZATION\nFERTILIZE\nFERTILIZED\nFERTILIZER\nFERTILIZERS\nFERTILIZES\nFERTILIZING\nFERVENT\nFERVENTLY\nFERVOR\nFERVORS\nFESS\nFESTIVAL\nFESTIVALS\nFESTIVE\nFESTIVELY\nFESTIVITIES\nFESTIVITY\nFETAL\nFETCH\nFETCHED\nFETCHES\nFETCHING\nFETCHINGLY\nFETID\nFETISH\nFETTER\nFETTERED\nFETTERS\nFETTLE\nFETUS\nFEUD\nFEUDAL\nFEUDALISM\nFEUDS\nFEVER\nFEVERED\nFEVERISH\nFEVERISHLY\nFEVERS\nFEW\nFEWER\nFEWEST\nFEWNESS\nFIANCE\nFIANCEE\nFIASCO\nFIAT\nFIB\nFIBBING\nFIBER\nFIBERGLAS\nFIBERS\nFIBONACCI\nFIBROSITIES\nFIBROSITY\nFIBROUS\nFIBROUSLY\nFICKLE\nFICKLENESS\nFICTION\nFICTIONAL\nFICTIONALLY\nFICTIONS\nFICTITIOUS\nFICTITIOUSLY\nFIDDLE\nFIDDLED\nFIDDLER\nFIDDLES\nFIDDLESTICK\nFIDDLESTICKS\nFIDDLING\nFIDEL\nFIDELITY\nFIDGET\nFIDUCIAL\nFIEF\nFIEFDOM\nFIELD\nFIELDED\nFIELDER\nFIELDERS\nFIELDING\nFIELDS\nFIELDWORK\nFIEND\nFIENDISH\nFIERCE\nFIERCELY\nFIERCENESS\nFIERCER\nFIERCEST\nFIERY\nFIFE\nFIFTEEN\nFIFTEENS\nFIFTEENTH\nFIFTH\nFIFTIES\nFIFTIETH\nFIFTY\nFIG\nFIGARO\nFIGHT\nFIGHTER\nFIGHTERS\nFIGHTING\nFIGHTS\nFIGS\nFIGURATIVE\nFIGURATIVELY\nFIGURE\nFIGURED\nFIGURES\nFIGURING\nFIGURINGS\nFIJI\nFIJIAN\nFIJIANS\nFILAMENT\nFILAMENTS\nFILE\nFILED\nFILENAME\nFILENAMES\nFILER\nFILES\nFILIAL\nFILIBUSTER\nFILING\nFILINGS\nFILIPINO\nFILIPINOS\nFILIPPO\nFILL\nFILLABLE\nFILLED\nFILLER\nFILLERS\nFILLING\nFILLINGS\nFILLMORE\nFILLS\nFILLY\nFILM\nFILMED\nFILMING\nFILMS\nFILTER\nFILTERED\nFILTERING\nFILTERS\nFILTH\nFILTHIER\nFILTHIEST\nFILTHINESS\nFILTHY\nFIN\nFINAL\nFINALITY\nFINALIZATION\nFINALIZE\nFINALIZED\nFINALIZES\nFINALIZING\nFINALLY\nFINALS\nFINANCE\nFINANCED\nFINANCES\nFINANCIAL\nFINANCIALLY\nFINANCIER\nFINANCIERS\nFINANCING\nFIND\nFINDER\nFINDERS\nFINDING\nFINDINGS\nFINDS\nFINE\nFINED\nFINELY\nFINENESS\nFINER\nFINES\nFINESSE\nFINESSED\nFINESSING\nFINEST\nFINGER\nFINGERED\nFINGERING\nFINGERINGS\nFINGERNAIL\nFINGERPRINT\nFINGERPRINTS\nFINGERS\nFINGERTIP\nFINICKY\nFINING\nFINISH\nFINISHED\nFINISHER\nFINISHERS\nFINISHES\nFINISHING\nFINITE\nFINITELY\nFINITENESS\nFINK\nFINLAND\nFINLEY\nFINN\nFINNEGAN\nFINNISH\nFINNS\nFINNY\nFINS\nFIORELLO\nFIORI\nFIR\nFIRE\nFIREARM\nFIREARMS\nFIREBOAT\nFIREBREAK\nFIREBUG\nFIRECRACKER\nFIRED\nFIREFLIES\nFIREFLY\nFIREHOUSE\nFIRELIGHT\nFIREMAN\nFIREMEN\nFIREPLACE\nFIREPLACES\nFIREPOWER\nFIREPROOF\nFIRER\nFIRERS\nFIRES\nFIRESIDE\nFIRESTONE\nFIREWALL\nFIREWOOD\nFIREWORKS\nFIRING\nFIRINGS\nFIRM\nFIRMAMENT\nFIRMED\nFIRMER\nFIRMEST\nFIRMING\nFIRMLY\nFIRMNESS\nFIRMS\nFIRMWARE\nFIRST\nFIRSTHAND\nFIRSTLY\nFIRSTS\nFISCAL\nFISCALLY\nFISCHBEIN\nFISCHER\nFISH\nFISHED\nFISHER\nFISHERMAN\nFISHERMEN\nFISHERS\nFISHERY\nFISHES\nFISHING\nFISHKILL\nFISHMONGER\nFISHPOND\nFISHY\nFISK\nFISKE\nFISSION\nFISSURE\nFISSURED\nFIST\nFISTED\nFISTICUFF\nFISTS\nFIT\nFITCH\nFITCHBURG\nFITFUL\nFITFULLY\nFITLY\nFITNESS\nFITS\nFITTED\nFITTER\nFITTERS\nFITTING\nFITTINGLY\nFITTINGS\nFITZGERALD\nFITZPATRICK\nFITZROY\nFIVE\nFIVEFOLD\nFIVES\nFIX\nFIXATE\nFIXATED\nFIXATES\nFIXATING\nFIXATION\nFIXATIONS\nFIXED\nFIXEDLY\nFIXEDNESS\nFIXER\nFIXERS\nFIXES\nFIXING\nFIXINGS\nFIXTURE\nFIXTURES\nFIZEAU\nFIZZLE\nFIZZLED\nFLABBERGAST\nFLABBERGASTED\nFLACK\nFLAG\nFLAGELLATE\nFLAGGED\nFLAGGING\nFLAGLER\nFLAGPOLE\nFLAGRANT\nFLAGRANTLY\nFLAGS\nFLAGSTAFF\nFLAIL\nFLAIR\nFLAK\nFLAKE\nFLAKED\nFLAKES\nFLAKING\nFLAKY\nFLAM\nFLAMBOYANT\nFLAME\nFLAMED\nFLAMER\nFLAMERS\nFLAMES\nFLAMING\nFLAMMABLE\nFLANAGAN\nFLANDERS\nFLANK\nFLANKED\nFLANKER\nFLANKING\nFLANKS\nFLANNEL\nFLANNELS\nFLAP\nFLAPS\nFLARE\nFLARED\nFLARES\nFLARING\nFLASH\nFLASHBACK\nFLASHED\nFLASHER\nFLASHERS\nFLASHES\nFLASHING\nFLASHLIGHT\nFLASHLIGHTS\nFLASHY\nFLASK\nFLAT\nFLATBED\nFLATLY\nFLATNESS\nFLATS\nFLATTEN\nFLATTENED\nFLATTENING\nFLATTER\nFLATTERED\nFLATTERER\nFLATTERING\nFLATTERY\nFLATTEST\nFLATULENT\nFLATUS\nFLATWORM\nFLAUNT\nFLAUNTED\nFLAUNTING\nFLAUNTS\nFLAVOR\nFLAVORED\nFLAVORING\nFLAVORINGS\nFLAVORS\nFLAW\nFLAWED\nFLAWLESS\nFLAWLESSLY\nFLAWS\nFLAX\nFLAXEN\nFLEA\nFLEAS\nFLED\nFLEDERMAUS\nFLEDGED\nFLEDGLING\nFLEDGLINGS\nFLEE\nFLEECE\nFLEECES\nFLEECY\nFLEEING\nFLEES\nFLEET\nFLEETEST\nFLEETING\nFLEETLY\nFLEETNESS\nFLEETS\nFLEISCHMAN\nFLEISHER\nFLEMING\nFLEMINGS\nFLEMISH\nFLEMISHED\nFLEMISHES\nFLEMISHING\nFLESH\nFLESHED\nFLESHES\nFLESHING\nFLESHLY\nFLESHY\nFLETCHER\nFLETCHERIZE\nFLETCHERIZES\nFLEW\nFLEX\nFLEXIBILITIES\nFLEXIBILITY\nFLEXIBLE\nFLEXIBLY\nFLICK\nFLICKED\nFLICKER\nFLICKERING\nFLICKING\nFLICKS\nFLIER\nFLIERS\nFLIES\nFLIGHT\nFLIGHTS\nFLIMSY\nFLINCH\nFLINCHED\nFLINCHES\nFLINCHING\nFLING\nFLINGS\nFLINT\nFLINTY\nFLIP\nFLIPFLOP\nFLIPPED\nFLIPS\nFLIRT\nFLIRTATION\nFLIRTATIOUS\nFLIRTED\nFLIRTING\nFLIRTS\nFLIT\nFLITTING\nFLO\nFLOAT\nFLOATED\nFLOATER\nFLOATING\nFLOATS\nFLOCK\nFLOCKED\nFLOCKING\nFLOCKS\nFLOG\nFLOGGING\nFLOOD\nFLOODED\nFLOODING\nFLOODLIGHT\nFLOODLIT\nFLOODS\nFLOOR\nFLOORED\nFLOORING\nFLOORINGS\nFLOORS\nFLOP\nFLOPPIES\nFLOPPILY\nFLOPPING\nFLOPPY\nFLOPS\nFLORA\nFLORAL\nFLORENCE\nFLORENTINE\nFLORID\nFLORIDA\nFLORIDIAN\nFLORIDIANS\nFLORIN\nFLORIST\nFLOSS\nFLOSSED\nFLOSSES\nFLOSSING\nFLOTATION\nFLOTILLA\nFLOUNDER\nFLOUNDERED\nFLOUNDERING\nFLOUNDERS\nFLOUR\nFLOURED\nFLOURISH\nFLOURISHED\nFLOURISHES\nFLOURISHING\nFLOW\nFLOWCHART\nFLOWCHARTING\nFLOWCHARTS\nFLOWED\nFLOWER\nFLOWERED\nFLOWERINESS\nFLOWERING\nFLOWERPOT\nFLOWERS\nFLOWERY\nFLOWING\nFLOWN\nFLOWS\nFLOYD\nFLU\nFLUCTUATE\nFLUCTUATES\nFLUCTUATING\nFLUCTUATION\nFLUCTUATIONS\nFLUE\nFLUENCY\nFLUENT\nFLUENTLY\nFLUFF\nFLUFFIER\nFLUFFIEST\nFLUFFY\nFLUID\nFLUIDITY\nFLUIDLY\nFLUIDS\nFLUKE\nFLUNG\nFLUNKED\nFLUORESCE\nFLUORESCENT\nFLURRIED\nFLURRY\nFLUSH\nFLUSHED\nFLUSHES\nFLUSHING\nFLUTE\nFLUTED\nFLUTING\nFLUTTER\nFLUTTERED\nFLUTTERING\nFLUTTERS\nFLUX\nFLY\nFLYABLE\nFLYER\nFLYERS\nFLYING\nFLYNN\nFOAL\nFOAM\nFOAMED\nFOAMING\nFOAMS\nFOAMY\nFOB\nFOBBING\nFOCAL\nFOCALLY\nFOCI\nFOCUS\nFOCUSED\nFOCUSES\nFOCUSING\nFOCUSSED\nFODDER\nFOE\nFOES\nFOG\nFOGARTY\nFOGGED\nFOGGIER\nFOGGIEST\nFOGGILY\nFOGGING\nFOGGY\nFOGS\nFOGY\nFOIBLE\nFOIL\nFOILED\nFOILING\nFOILS\nFOIST\nFOLD\nFOLDED\nFOLDER\nFOLDERS\nFOLDING\nFOLDOUT\nFOLDS\nFOLEY\nFOLIAGE\nFOLK\nFOLKLORE\nFOLKS\nFOLKSONG\nFOLKSY\nFOLLIES\nFOLLOW\nFOLLOWED\nFOLLOWER\nFOLLOWERS\nFOLLOWING\nFOLLOWINGS\nFOLLOWS\nFOLLY\nFOLSOM\nFOMALHAUT\nFOND\nFONDER\nFONDLE\nFONDLED\nFONDLES\nFONDLING\nFONDLY\nFONDNESS\nFONT\nFONTAINE\nFONTAINEBLEAU\nFONTANA\nFONTS\nFOOD\nFOODS\nFOODSTUFF\nFOODSTUFFS\nFOOL\nFOOLED\nFOOLHARDY\nFOOLING\nFOOLISH\nFOOLISHLY\nFOOLISHNESS\nFOOLPROOF\nFOOLS\nFOOT\nFOOTAGE\nFOOTBALL\nFOOTBALLS\nFOOTBRIDGE\nFOOTE\nFOOTED\nFOOTER\nFOOTERS\nFOOTFALL\nFOOTHILL\nFOOTHOLD\nFOOTING\nFOOTMAN\nFOOTNOTE\nFOOTNOTES\nFOOTPATH\nFOOTPRINT\nFOOTPRINTS\nFOOTSTEP\nFOOTSTEPS\nFOR\nFORAGE\nFORAGED\nFORAGES\nFORAGING\nFORAY\nFORAYS\nFORBADE\nFORBEAR\nFORBEARANCE\nFORBEARS\nFORBES\nFORBID\nFORBIDDEN\nFORBIDDING\nFORBIDS\nFORCE\nFORCED\nFORCEFUL\nFORCEFULLY\nFORCEFULNESS\nFORCER\nFORCES\nFORCIBLE\nFORCIBLY\nFORCING\nFORD\nFORDHAM\nFORDS\nFORE\nFOREARM\nFOREARMS\nFOREBODING\nFORECAST\nFORECASTED\nFORECASTER\nFORECASTERS\nFORECASTING\nFORECASTLE\nFORECASTS\nFOREFATHER\nFOREFATHERS\nFOREFINGER\nFOREFINGERS\nFOREGO\nFOREGOES\nFOREGOING\nFOREGONE\nFOREGROUND\nFOREHEAD\nFOREHEADS\nFOREIGN\nFOREIGNER\nFOREIGNERS\nFOREIGNS\nFOREMAN\nFOREMOST\nFORENOON\nFORENSIC\nFORERUNNERS\nFORESEE\nFORESEEABLE\nFORESEEN\nFORESEES\nFORESIGHT\nFORESIGHTED\nFOREST\nFORESTALL\nFORESTALLED\nFORESTALLING\nFORESTALLMENT\nFORESTALLS\nFORESTED\nFORESTER\nFORESTERS\nFORESTRY\nFORESTS\nFORETELL\nFORETELLING\nFORETELLS\nFORETOLD\nFOREVER\nFOREWARN\nFOREWARNED\nFOREWARNING\nFOREWARNINGS\nFOREWARNS\nFORFEIT\nFORFEITED\nFORFEITURE\nFORGAVE\nFORGE\nFORGED\nFORGER\nFORGERIES\nFORGERY\nFORGES\nFORGET\nFORGETFUL\nFORGETFULNESS\nFORGETS\nFORGETTABLE\nFORGETTABLY\nFORGETTING\nFORGING\nFORGIVABLE\nFORGIVABLY\nFORGIVE\nFORGIVEN\nFORGIVENESS\nFORGIVES\nFORGIVING\nFORGIVINGLY\nFORGOT\nFORGOTTEN\nFORK\nFORKED\nFORKING\nFORKLIFT\nFORKS\nFORLORN\nFORLORNLY\nFORM\nFORMAL\nFORMALISM\nFORMALISMS\nFORMALITIES\nFORMALITY\nFORMALIZATION\nFORMALIZATIONS\nFORMALIZE\nFORMALIZED\nFORMALIZES\nFORMALIZING\nFORMALLY\nFORMANT\nFORMANTS\nFORMAT\nFORMATION\nFORMATIONS\nFORMATIVE\nFORMATIVELY\nFORMATS\nFORMATTED\nFORMATTER\nFORMATTERS\nFORMATTING\nFORMED\nFORMER\nFORMERLY\nFORMICA\nFORMICAS\nFORMIDABLE\nFORMING\nFORMOSA\nFORMOSAN\nFORMS\nFORMULA\nFORMULAE\nFORMULAS\nFORMULATE\nFORMULATED\nFORMULATES\nFORMULATING\nFORMULATION\nFORMULATIONS\nFORMULATOR\nFORMULATORS\nFORNICATION\nFORREST\nFORSAKE\nFORSAKEN\nFORSAKES\nFORSAKING\nFORSYTHE\nFORT\nFORTE\nFORTESCUE\nFORTH\nFORTHCOMING\nFORTHRIGHT\nFORTHWITH\nFORTIER\nFORTIES\nFORTIETH\nFORTIFICATION\nFORTIFICATIONS\nFORTIFIED\nFORTIFIES\nFORTIFY\nFORTIFYING\nFORTIORI\nFORTITUDE\nFORTNIGHT\nFORTNIGHTLY\nFORTRAN\nFORTRAN\nFORTRESS\nFORTRESSES\nFORTS\nFORTUITOUS\nFORTUITOUSLY\nFORTUNATE\nFORTUNATELY\nFORTUNE\nFORTUNES\nFORTY\nFORUM\nFORUMS\nFORWARD\nFORWARDED\nFORWARDER\nFORWARDING\nFORWARDNESS\nFORWARDS\nFOSS\nFOSSIL\nFOSTER\nFOSTERED\nFOSTERING\nFOSTERS\nFOUGHT\nFOUL\nFOULED\nFOULEST\nFOULING\nFOULLY\nFOULMOUTH\nFOULNESS\nFOULS\nFOUND\nFOUNDATION\nFOUNDATIONS\nFOUNDED\nFOUNDER\nFOUNDERED\nFOUNDERS\nFOUNDING\nFOUNDLING\nFOUNDRIES\nFOUNDRY\nFOUNDS\nFOUNT\nFOUNTAIN\nFOUNTAINS\nFOUNTS\nFOUR\nFOURFOLD\nFOURIER\nFOURS\nFOURSCORE\nFOURSOME\nFOURSQUARE\nFOURTEEN\nFOURTEENS\nFOURTEENTH\nFOURTH\nFOWL\nFOWLER\nFOWLS\nFOX\nFOXES\nFOXHALL\nFRACTION\nFRACTIONAL\nFRACTIONALLY\nFRACTIONS\nFRACTURE\nFRACTURED\nFRACTURES\nFRACTURING\nFRAGILE\nFRAGMENT\nFRAGMENTARY\nFRAGMENTATION\nFRAGMENTED\nFRAGMENTING\nFRAGMENTS\nFRAGRANCE\nFRAGRANCES\nFRAGRANT\nFRAGRANTLY\nFRAIL\nFRAILEST\nFRAILTY\nFRAME\nFRAMED\nFRAMER\nFRAMES\nFRAMEWORK\nFRAMEWORKS\nFRAMING\nFRAN\nFRANC\nFRANCAISE\nFRANCE\nFRANCES\nFRANCESCA\nFRANCESCO\nFRANCHISE\nFRANCHISES\nFRANCIE\nFRANCINE\nFRANCIS\nFRANCISCAN\nFRANCISCANS\nFRANCISCO\nFRANCIZE\nFRANCIZES\nFRANCO\nFRANCOIS\nFRANCOISE\nFRANCS\nFRANK\nFRANKED\nFRANKEL\nFRANKER\nFRANKEST\nFRANKFORT\nFRANKFURT\nFRANKIE\nFRANKING\nFRANKLINIZATION\nFRANKLINIZATIONS\nFRANKLY\nFRANKNESS\nFRANKS\nFRANNY\nFRANTIC\nFRANTICALLY\nFRANZ\nFRASER\nFRATERNAL\nFRATERNALLY\nFRATERNITIES\nFRATERNITY\nFRAU\nFRAUD\nFRAUDS\nFRAUDULENT\nFRAUGHT\nFRAY\nFRAYED\nFRAYING\nFRAYNE\nFRAYS\nFRAZIER\nFRAZZLE\nFREAK\nFREAKISH\nFREAKS\nFRECKLE\nFRECKLED\nFRECKLES\nFRED\nFREDDIE\nFREDDY\nFREDERIC\nFREDERICK\nFREDERICKS\nFREDERICKSBURG\nFREDERICO\nFREDERICTON\nFREDHOLM\nFREDRICK\nFREDRICKSON\nFREE\nFREED\nFREEDMAN\nFREEDOM\nFREEDOMS\nFREEING\nFREEINGS\nFREELY\nFREEMAN\nFREEMASON\nFREEMASONRY\nFREEMASONS\nFREENESS\nFREEPORT\nFREER\nFREES\nFREEST\nFREESTYLE\nFREETOWN\nFREEWAY\nFREEWHEEL\nFREEZE\nFREEZER\nFREEZERS\nFREEZES\nFREEZING\nFREIDA\nFREIGHT\nFREIGHTED\nFREIGHTER\nFREIGHTERS\nFREIGHTING\nFREIGHTS\nFRENCH\nFRENCHIZE\nFRENCHIZES\nFRENCHMAN\nFRENCHMEN\nFRENETIC\nFRENZIED\nFRENZY\nFREON\nFREQUENCIES\nFREQUENCY\nFREQUENT\nFREQUENTED\nFREQUENTER\nFREQUENTERS\nFREQUENTING\nFREQUENTLY\nFREQUENTS\nFRESCO\nFRESCOES\nFRESH\nFRESHEN\nFRESHENED\nFRESHENER\nFRESHENERS\nFRESHENING\nFRESHENS\nFRESHER\nFRESHEST\nFRESHLY\nFRESHMAN\nFRESHMEN\nFRESHNESS\nFRESHWATER\nFRESNEL\nFRESNO\nFRET\nFRETFUL\nFRETFULLY\nFRETFULNESS\nFREUD\nFREUDIAN\nFREUDIANISM\nFREUDIANISMS\nFREUDIANS\nFREY\nFREYA\nFRIAR\nFRIARS\nFRICATIVE\nFRICATIVES\nFRICK\nFRICTION\nFRICTIONLESS\nFRICTIONS\nFRIDAY\nFRIDAYS\nFRIED\nFRIEDMAN\nFRIEDRICH\nFRIEND\nFRIENDLESS\nFRIENDLIER\nFRIENDLIEST\nFRIENDLINESS\nFRIENDLY\nFRIENDS\nFRIENDSHIP\nFRIENDSHIPS\nFRIES\nFRIESLAND\nFRIEZE\nFRIEZES\nFRIGATE\nFRIGATES\nFRIGGA\nFRIGHT\nFRIGHTEN\nFRIGHTENED\nFRIGHTENING\nFRIGHTENINGLY\nFRIGHTENS\nFRIGHTFUL\nFRIGHTFULLY\nFRIGHTFULNESS\nFRIGID\nFRIGIDAIRE\nFRILL\nFRILLS\nFRINGE\nFRINGED\nFRISBEE\nFRISIA\nFRISIAN\nFRISK\nFRISKED\nFRISKING\nFRISKS\nFRISKY\nFRITO\nFRITTER\nFRITZ\nFRIVOLITY\nFRIVOLOUS\nFRIVOLOUSLY\nFRO\nFROCK\nFROCKS\nFROG\nFROGS\nFROLIC\nFROLICS\nFROM\nFRONT\nFRONTAGE\nFRONTAL\nFRONTED\nFRONTIER\nFRONTIERS\nFRONTIERSMAN\nFRONTIERSMEN\nFRONTING\nFRONTS\nFROST\nFROSTBELT\nFROSTBITE\nFROSTBITTEN\nFROSTED\nFROSTING\nFROSTS\nFROSTY\nFROTH\nFROTHING\nFROTHY\nFROWN\nFROWNED\nFROWNING\nFROWNS\nFROZE\nFROZEN\nFROZENLY\nFRUEHAUF\nFRUGAL\nFRUGALLY\nFRUIT\nFRUITFUL\nFRUITFULLY\nFRUITFULNESS\nFRUITION\nFRUITLESS\nFRUITLESSLY\nFRUITS\nFRUSTRATE\nFRUSTRATED\nFRUSTRATES\nFRUSTRATING\nFRUSTRATION\nFRUSTRATIONS\nFRY\nFRYE\nFUCHS\nFUCHSIA\nFUDGE\nFUEL\nFUELED\nFUELING\nFUELS\nFUGITIVE\nFUGITIVES\nFUGUE\nFUJI\nFUJITSU\nFULBRIGHT\nFULBRIGHTS\nFULCRUM\nFULFILL\nFULFILLED\nFULFILLING\nFULFILLMENT\nFULFILLMENTS\nFULFILLS\nFULL\nFULLER\nFULLERTON\nFULLEST\nFULLNESS\nFULLY\nFULMINATE\nFULTON\nFUMBLE\nFUMBLED\nFUMBLING\nFUME\nFUMED\nFUMES\nFUMING\nFUN\nFUNCTION\nFUNCTIONAL\nFUNCTIONALITIES\nFUNCTIONALITY\nFUNCTIONALLY\nFUNCTIONALS\nFUNCTIONARY\nFUNCTIONED\nFUNCTIONING\nFUNCTIONS\nFUNCTOR\nFUNCTORS\nFUND\nFUNDAMENTAL\nFUNDAMENTALLY\nFUNDAMENTALS\nFUNDED\nFUNDER\nFUNDERS\nFUNDING\nFUNDS\nFUNERAL\nFUNERALS\nFUNEREAL\nFUNGAL\nFUNGI\nFUNGIBLE\nFUNGICIDE\nFUNGUS\nFUNK\nFUNNEL\nFUNNELED\nFUNNELING\nFUNNELS\nFUNNIER\nFUNNIEST\nFUNNILY\nFUNNINESS\nFUNNY\nFUR\nFURIES\nFURIOUS\nFURIOUSER\nFURIOUSLY\nFURLONG\nFURLOUGH\nFURMAN\nFURNACE\nFURNACES\nFURNISH\nFURNISHED\nFURNISHES\nFURNISHING\nFURNISHINGS\nFURNITURE\nFURRIER\nFURROW\nFURROWED\nFURROWS\nFURRY\nFURS\nFURTHER\nFURTHERED\nFURTHERING\nFURTHERMORE\nFURTHERMOST\nFURTHERS\nFURTHEST\nFURTIVE\nFURTIVELY\nFURTIVENESS\nFURY\nFUSE\nFUSED\nFUSES\nFUSING\nFUSION\nFUSS\nFUSSING\nFUSSY\nFUTILE\nFUTILITY\nFUTURE\nFUTURES\nFUTURISTIC\nFUZZ\nFUZZIER\nFUZZINESS\nFUZZY\nGAB\nGABARDINE\nGABBING\nGABERONES\nGABLE\nGABLED\nGABLER\nGABLES\nGABON\nGABORONE\nGABRIEL\nGABRIELLE\nGAD\nGADFLY\nGADGET\nGADGETRY\nGADGETS\nGAELIC\nGAELICIZATION\nGAELICIZATIONS\nGAELICIZE\nGAELICIZES\nGAG\nGAGGED\nGAGGING\nGAGING\nGAGS\nGAIETIES\nGAIETY\nGAIL\nGAILY\nGAIN\nGAINED\nGAINER\nGAINERS\nGAINES\nGAINESVILLE\nGAINFUL\nGAINING\nGAINS\nGAIT\nGAITED\nGAITER\nGAITERS\nGAITHERSBURG\nGALACTIC\nGALAHAD\nGALAPAGOS\nGALATEA\nGALATEAN\nGALATEANS\nGALATIA\nGALATIANS\nGALAXIES\nGALAXY\nGALBREATH\nGALE\nGALEN\nGALILEAN\nGALILEE\nGALILEO\nGALL\nGALLAGHER\nGALLANT\nGALLANTLY\nGALLANTRY\nGALLANTS\nGALLED\nGALLERIED\nGALLERIES\nGALLERY\nGALLEY\nGALLEYS\nGALLING\nGALLON\nGALLONS\nGALLOP\nGALLOPED\nGALLOPER\nGALLOPING\nGALLOPS\nGALLOWAY\nGALLOWS\nGALLS\nGALLSTONE\nGALLUP\nGALOIS\nGALT\nGALVESTON\nGALVIN\nGALWAY\nGAMBIA\nGAMBIT\nGAMBLE\nGAMBLED\nGAMBLER\nGAMBLERS\nGAMBLES\nGAMBLING\nGAMBOL\nGAME\nGAMED\nGAMELY\nGAMENESS\nGAMES\nGAMING\nGAMMA\nGANDER\nGANDHI\nGANDHIAN\nGANG\nGANGES\nGANGLAND\nGANGLING\nGANGPLANK\nGANGRENE\nGANGS\nGANGSTER\nGANGSTERS\nGANNETT\nGANTRY\nGANYMEDE\nGAP\nGAPE\nGAPED\nGAPES\nGAPING\nGAPS\nGARAGE\nGARAGED\nGARAGES\nGARB\nGARBAGE\nGARBAGES\nGARBED\nGARBLE\nGARBLED\nGARCIA\nGARDEN\nGARDENED\nGARDENER\nGARDENERS\nGARDENING\nGARDENS\nGARDNER\nGARFIELD\nGARFUNKEL\nGARGANTUAN\nGARGLE\nGARGLED\nGARGLES\nGARGLING\nGARIBALDI\nGARLAND\nGARLANDED\nGARLIC\nGARMENT\nGARMENTS\nGARNER\nGARNERED\nGARNETT\nGARNISH\nGARRETT\nGARRISON\nGARRISONED\nGARRISONIAN\nGARRY\nGARTER\nGARTERS\nGARTH\nGARVEY\nGARY\nGAS\nGASCONY\nGASEOUS\nGASEOUSLY\nGASES\nGASH\nGASHES\nGASKET\nGASLIGHT\nGASOLINE\nGASP\nGASPED\nGASPEE\nGASPING\nGASPS\nGASSED\nGASSER\nGASSET\nGASSING\nGASSINGS\nGASSY\nGASTON\nGASTRIC\nGASTROINTESTINAL\nGASTRONOME\nGASTRONOMY\nGATE\nGATED\nGATES\nGATEWAY\nGATEWAYS\nGATHER\nGATHERED\nGATHERER\nGATHERERS\nGATHERING\nGATHERINGS\nGATHERS\nGATING\nGATLINBURG\nGATOR\nGATSBY\nGAUCHE\nGAUDINESS\nGAUDY\nGAUGE\nGAUGED\nGAUGES\nGAUGUIN\nGAUL\nGAULLE\nGAULS\nGAUNT\nGAUNTLEY\nGAUNTNESS\nGAUSSIAN\nGAUTAMA\nGAUZE\nGAVE\nGAVEL\nGAVIN\nGAWK\nGAWKY\nGAY\nGAYER\nGAYEST\nGAYETY\nGAYLOR\nGAYLORD\nGAYLY\nGAYNESS\nGAYNOR\nGAZE\nGAZED\nGAZELLE\nGAZER\nGAZERS\nGAZES\nGAZETTE\nGAZING\nGEAR\nGEARED\nGEARING\nGEARS\nGEARY\nGECKO\nGEESE\nGEHRIG\nGEIGER\nGEIGY\nGEISHA\nGEL\nGELATIN\nGELATINE\nGELATINOUS\nGELD\nGELLED\nGELLING\nGELS\nGEM\nGEMINI\nGEMINID\nGEMMA\nGEMS\nGENDER\nGENDERS\nGENE\nGENEALOGY\nGENERAL\nGENERALIST\nGENERALISTS\nGENERALITIES\nGENERALITY\nGENERALIZATION\nGENERALIZATIONS\nGENERALIZE\nGENERALIZED\nGENERALIZER\nGENERALIZERS\nGENERALIZES\nGENERALIZING\nGENERALLY\nGENERALS\nGENERATE\nGENERATED\nGENERATES\nGENERATING\nGENERATION\nGENERATIONS\nGENERATIVE\nGENERATOR\nGENERATORS\nGENERIC\nGENERICALLY\nGENEROSITIES\nGENEROSITY\nGENEROUS\nGENEROUSLY\nGENEROUSNESS\nGENES\nGENESCO\nGENESIS\nGENETIC\nGENETICALLY\nGENEVA\nGENEVIEVE\nGENIAL\nGENIALLY\nGENIE\nGENIUS\nGENIUSES\nGENOA\nGENRE\nGENRES\nGENT\nGENTEEL\nGENTILE\nGENTLE\nGENTLEMAN\nGENTLEMANLY\nGENTLEMEN\nGENTLENESS\nGENTLER\nGENTLEST\nGENTLEWOMAN\nGENTLY\nGENTRY\nGENUINE\nGENUINELY\nGENUINENESS\nGENUS\nGEOCENTRIC\nGEODESIC\nGEODESY\nGEODETIC\nGEOFF\nGEOFFREY\nGEOGRAPHER\nGEOGRAPHIC\nGEOGRAPHICAL\nGEOGRAPHICALLY\nGEOGRAPHY\nGEOLOGICAL\nGEOLOGIST\nGEOLOGISTS\nGEOLOGY\nGEOMETRIC\nGEOMETRICAL\nGEOMETRICALLY\nGEOMETRICIAN\nGEOMETRIES\nGEOMETRY\nGEOPHYSICAL\nGEOPHYSICS\nGEORGE\nGEORGES\nGEORGETOWN\nGEORGIA\nGEORGIAN\nGEORGIANS\nGEOSYNCHRONOUS\nGERALD\nGERALDINE\nGERANIUM\nGERARD\nGERBER\nGERBIL\nGERHARD\nGERHARDT\nGERIATRIC\nGERM\nGERMAN\nGERMANE\nGERMANIA\nGERMANIC\nGERMANS\nGERMANTOWN\nGERMANY\nGERMICIDE\nGERMINAL\nGERMINATE\nGERMINATED\nGERMINATES\nGERMINATING\nGERMINATION\nGERMS\nGEROME\nGERRY\nGERSHWIN\nGERSHWINS\nGERTRUDE\nGERUND\nGESTAPO\nGESTURE\nGESTURED\nGESTURES\nGESTURING\nGET\nGETAWAY\nGETS\nGETTER\nGETTERS\nGETTING\nGETTY\nGETTYSBURG\nGEYSER\nGHANA\nGHANIAN\nGHASTLY\nGHENT\nGHETTO\nGHOST\nGHOSTED\nGHOSTLY\nGHOSTS\nGIACOMO\nGIANT\nGIANTS\nGIBBERISH\nGIBBONS\nGIBBS\nGIBBY\nGIBRALTAR\nGIBSON\nGIDDINESS\nGIDDINGS\nGIDDY\nGIDEON\nGIFFORD\nGIFT\nGIFTED\nGIFTS\nGIG\nGIGABIT\nGIGABITS\nGIGABYTE\nGIGABYTES\nGIGACYCLE\nGIGAHERTZ\nGIGANTIC\nGIGAVOLT\nGIGAWATT\nGIGGLE\nGIGGLED\nGIGGLES\nGIGGLING\nGIL\nGILBERTSON\nGILCHRIST\nGILD\nGILDED\nGILDING\nGILDS\nGILEAD\nGILES\nGILKSON\nGILL\nGILLESPIE\nGILLETTE\nGILLIGAN\nGILLS\nGILMORE\nGILT\nGIMBEL\nGIMMICK\nGIMMICKS\nGIN\nGINA\nGINGER\nGINGERBREAD\nGINGERLY\nGINGHAM\nGINGHAMS\nGINN\nGINO\nGINS\nGINSBERG\nGINSBURG\nGIOCONDA\nGIORGIO\nGIOVANNI\nGIPSIES\nGIPSY\nGIRAFFE\nGIRAFFES\nGIRD\nGIRDER\nGIRDERS\nGIRDLE\nGIRL\nGIRLFRIEND\nGIRLIE\nGIRLISH\nGIRLS\nGIRT\nGIRTH\nGIST\nGIULIANO\nGIUSEPPE\nGIVE\nGIVEAWAY\nGIVEN\nGIVER\nGIVERS\nGIVES\nGIVING\nGLACIAL\nGLACIER\nGLACIERS\nGLAD\nGLADDEN\nGLADDER\nGLADDEST\nGLADE\nGLADIATOR\nGLADLY\nGLADNESS\nGLADSTONE\nGLADYS\nGLAMOR\nGLAMOROUS\nGLAMOUR\nGLANCE\nGLANCED\nGLANCES\nGLANCING\nGLAND\nGLANDS\nGLANDULAR\nGLARE\nGLARED\nGLARES\nGLARING\nGLARINGLY\nGLASGOW\nGLASS\nGLASSED\nGLASSES\nGLASSY\nGLASWEGIAN\nGLAUCOMA\nGLAZE\nGLAZED\nGLAZER\nGLAZES\nGLAZING\nGLEAM\nGLEAMED\nGLEAMING\nGLEAMS\nGLEAN\nGLEANED\nGLEANER\nGLEANING\nGLEANINGS\nGLEANS\nGLEASON\nGLEE\nGLEEFUL\nGLEEFULLY\nGLEES\nGLEN\nGLENDA\nGLENDALE\nGLENN\nGLENS\nGLIDDEN\nGLIDE\nGLIDED\nGLIDER\nGLIDERS\nGLIDES\nGLIMMER\nGLIMMERED\nGLIMMERING\nGLIMMERS\nGLIMPSE\nGLIMPSED\nGLIMPSES\nGLINT\nGLINTED\nGLINTING\nGLINTS\nGLISTEN\nGLISTENED\nGLISTENING\nGLISTENS\nGLITCH\nGLITTER\nGLITTERED\nGLITTERING\nGLITTERS\nGLOAT\nGLOBAL\nGLOBALLY\nGLOBE\nGLOBES\nGLOBULAR\nGLOBULARITY\nGLOOM\nGLOOMILY\nGLOOMY\nGLORIA\nGLORIANA\nGLORIES\nGLORIFICATION\nGLORIFIED\nGLORIFIES\nGLORIFY\nGLORIOUS\nGLORIOUSLY\nGLORY\nGLORYING\nGLOSS\nGLOSSARIES\nGLOSSARY\nGLOSSED\nGLOSSES\nGLOSSING\nGLOSSY\nGLOTTAL\nGLOUCESTER\nGLOVE\nGLOVED\nGLOVER\nGLOVERS\nGLOVES\nGLOVING\nGLOW\nGLOWED\nGLOWER\nGLOWERS\nGLOWING\nGLOWINGLY\nGLOWS\nGLUE\nGLUED\nGLUES\nGLUING\nGLUT\nGLUTTON\nGLYNN\nGNASH\nGNAT\nGNATS\nGNAW\nGNAWED\nGNAWING\nGNAWS\nGNOME\nGNOMON\nGNU\nGOA\nGOAD\nGOADED\nGOAL\nGOALS\nGOAT\nGOATEE\nGOATEES\nGOATS\nGOBBLE\nGOBBLED\nGOBBLER\nGOBBLERS\nGOBBLES\nGOBI\nGOBLET\nGOBLETS\nGOBLIN\nGOBLINS\nGOD\nGODDARD\nGODDESS\nGODDESSES\nGODFATHER\nGODFREY\nGODHEAD\nGODLIKE\nGODLY\nGODMOTHER\nGODMOTHERS\nGODOT\nGODPARENT\nGODS\nGODSEND\nGODSON\nGODWIN\nGODZILLA\nGOES\nGOETHE\nGOFF\nGOGGLES\nGOGH\nGOING\nGOINGS\nGOLD\nGOLDA\nGOLDBERG\nGOLDEN\nGOLDENLY\nGOLDENNESS\nGOLDENROD\nGOLDFIELD\nGOLDFISH\nGOLDING\nGOLDMAN\nGOLDS\nGOLDSMITH\nGOLDSTEIN\nGOLDSTINE\nGOLDWATER\nGOLETA\nGOLF\nGOLFER\nGOLFERS\nGOLFING\nGOLIATH\nGOLLY\nGOMEZ\nGONDOLA\nGONE\nGONER\nGONG\nGONGS\nGONZALES\nGONZALEZ\nGOOD\nGOODBY\nGOODBYE\nGOODE\nGOODIES\nGOODLY\nGOODMAN\nGOODNESS\nGOODRICH\nGOODS\nGOODWILL\nGOODWIN\nGOODY\nGOODYEAR\nGOOF\nGOOFED\nGOOFS\nGOOFY\nGOOSE\nGOPHER\nGORDIAN\nGORDON\nGORE\nGOREN\nGORGE\nGORGEOUS\nGORGEOUSLY\nGORGES\nGORGING\nGORHAM\nGORILLA\nGORILLAS\nGORKY\nGORTON\nGORY\nGOSH\nGOSPEL\nGOSPELERS\nGOSPELS\nGOSSIP\nGOSSIPED\nGOSSIPING\nGOSSIPS\nGOT\nGOTHAM\nGOTHIC\nGOTHICALLY\nGOTHICISM\nGOTHICIZE\nGOTHICIZED\nGOTHICIZER\nGOTHICIZERS\nGOTHICIZES\nGOTHICIZING\nGOTO\nGOTOS\nGOTTEN\nGOTTFRIED\nGOUCHER\nGOUDA\nGOUGE\nGOUGED\nGOUGES\nGOUGING\nGOULD\nGOURD\nGOURMET\nGOUT\nGOVERN\nGOVERNANCE\nGOVERNED\nGOVERNESS\nGOVERNING\nGOVERNMENT\nGOVERNMENTAL\nGOVERNMENTALLY\nGOVERNMENTS\nGOVERNOR\nGOVERNORS\nGOVERNS\nGOWN\nGOWNED\nGOWNS\nGRAB\nGRABBED\nGRABBER\nGRABBERS\nGRABBING\nGRABBINGS\nGRABS\nGRACE\nGRACED\nGRACEFUL\nGRACEFULLY\nGRACEFULNESS\nGRACES\nGRACIE\nGRACING\nGRACIOUS\nGRACIOUSLY\nGRACIOUSNESS\nGRAD\nGRADATION\nGRADATIONS\nGRADE\nGRADED\nGRADER\nGRADERS\nGRADES\nGRADIENT\nGRADIENTS\nGRADING\nGRADINGS\nGRADUAL\nGRADUALLY\nGRADUATE\nGRADUATED\nGRADUATES\nGRADUATING\nGRADUATION\nGRADUATIONS\nGRADY\nGRAFF\nGRAFT\nGRAFTED\nGRAFTER\nGRAFTING\nGRAFTON\nGRAFTS\nGRAHAM\nGRAHAMS\nGRAIL\nGRAIN\nGRAINED\nGRAINING\nGRAINS\nGRAM\nGRAMMAR\nGRAMMARIAN\nGRAMMARS\nGRAMMATIC\nGRAMMATICAL\nGRAMMATICALLY\nGRAMS\nGRANARIES\nGRANARY\nGRAND\nGRANDCHILD\nGRANDCHILDREN\nGRANDDAUGHTER\nGRANDER\nGRANDEST\nGRANDEUR\nGRANDFATHER\nGRANDFATHERS\nGRANDIOSE\nGRANDLY\nGRANDMA\nGRANDMOTHER\nGRANDMOTHERS\nGRANDNEPHEW\nGRANDNESS\nGRANDNIECE\nGRANDPA\nGRANDPARENT\nGRANDS\nGRANDSON\nGRANDSONS\nGRANDSTAND\nGRANGE\nGRANITE\nGRANNY\nGRANOLA\nGRANT\nGRANTED\nGRANTEE\nGRANTER\nGRANTING\nGRANTOR\nGRANTS\nGRANULARITY\nGRANULATE\nGRANULATED\nGRANULATES\nGRANULATING\nGRANVILLE\nGRAPE\nGRAPEFRUIT\nGRAPES\nGRAPEVINE\nGRAPH\nGRAPHED\nGRAPHIC\nGRAPHICAL\nGRAPHICALLY\nGRAPHICS\nGRAPHING\nGRAPHITE\nGRAPHS\nGRAPPLE\nGRAPPLED\nGRAPPLING\nGRASP\nGRASPABLE\nGRASPED\nGRASPING\nGRASPINGLY\nGRASPS\nGRASS\nGRASSED\nGRASSERS\nGRASSES\nGRASSIER\nGRASSIEST\nGRASSLAND\nGRASSY\nGRATE\nGRATED\nGRATEFUL\nGRATEFULLY\nGRATEFULNESS\nGRATER\nGRATES\nGRATIFICATION\nGRATIFIED\nGRATIFY\nGRATIFYING\nGRATING\nGRATINGS\nGRATIS\nGRATITUDE\nGRATUITIES\nGRATUITOUS\nGRATUITOUSLY\nGRATUITOUSNESS\nGRATUITY\nGRAVE\nGRAVEL\nGRAVELLY\nGRAVELY\nGRAVEN\nGRAVENESS\nGRAVER\nGRAVES\nGRAVEST\nGRAVESTONE\nGRAVEYARD\nGRAVITATE\nGRAVITATION\nGRAVITATIONAL\nGRAVITY\nGRAVY\nGRAY\nGRAYED\nGRAYER\nGRAYEST\nGRAYING\nGRAYNESS\nGRAYSON\nGRAZE\nGRAZED\nGRAZER\nGRAZING\nGREASE\nGREASED\nGREASES\nGREASY\nGREAT\nGREATER\nGREATEST\nGREATLY\nGREATNESS\nGRECIAN\nGRECIANIZE\nGRECIANIZES\nGREECE\nGREED\nGREEDILY\nGREEDINESS\nGREEDY\nGREEK\nGREEKIZE\nGREEKIZES\nGREEKS\nGREEN\nGREENBELT\nGREENBERG\nGREENBLATT\nGREENBRIAR\nGREENE\nGREENER\nGREENERY\nGREENEST\nGREENFELD\nGREENFIELD\nGREENGROCER\nGREENHOUSE\nGREENHOUSES\nGREENING\nGREENISH\nGREENLAND\nGREENLY\nGREENNESS\nGREENS\nGREENSBORO\nGREENSVILLE\nGREENTREE\nGREENVILLE\nGREENWARE\nGREENWICH\nGREER\nGREET\nGREETED\nGREETER\nGREETING\nGREETINGS\nGREETS\nGREG\nGREGARIOUS\nGREGG\nGREGORIAN\nGREGORY\nGRENADE\nGRENADES\nGRENDEL\nGRENIER\nGRENOBLE\nGRENVILLE\nGRESHAM\nGRETA\nGRETCHEN\nGREW\nGREY\nGREYEST\nGREYHOUND\nGREYING\nGRID\nGRIDDLE\nGRIDIRON\nGRIDS\nGRIEF\nGRIEFS\nGRIEVANCE\nGRIEVANCES\nGRIEVE\nGRIEVED\nGRIEVER\nGRIEVERS\nGRIEVES\nGRIEVING\nGRIEVINGLY\nGRIEVOUS\nGRIEVOUSLY\nGRIFFITH\nGRILL\nGRILLED\nGRILLING\nGRILLS\nGRIM\nGRIMACE\nGRIMALDI\nGRIME\nGRIMED\nGRIMES\nGRIMLY\nGRIMM\nGRIMNESS\nGRIN\nGRIND\nGRINDER\nGRINDERS\nGRINDING\nGRINDINGS\nGRINDS\nGRINDSTONE\nGRINDSTONES\nGRINNING\nGRINS\nGRIP\nGRIPE\nGRIPED\nGRIPES\nGRIPING\nGRIPPED\nGRIPPING\nGRIPPINGLY\nGRIPS\nGRIS\nGRISLY\nGRIST\nGRISWOLD\nGRIT\nGRITS\nGRITTY\nGRIZZLY\nGROAN\nGROANED\nGROANER\nGROANERS\nGROANING\nGROANS\nGROCER\nGROCERIES\nGROCERS\nGROCERY\nGROGGY\nGROIN\nGROOM\nGROOMED\nGROOMING\nGROOMS\nGROOT\nGROOVE\nGROOVED\nGROOVES\nGROPE\nGROPED\nGROPES\nGROPING\nGROSS\nGROSSED\nGROSSER\nGROSSES\nGROSSEST\nGROSSET\nGROSSING\nGROSSLY\nGROSSMAN\nGROSSNESS\nGROSVENOR\nGROTESQUE\nGROTESQUELY\nGROTESQUES\nGROTON\nGROTTO\nGROTTOS\nGROUND\nGROUNDED\nGROUNDER\nGROUNDERS\nGROUNDING\nGROUNDS\nGROUNDWORK\nGROUP\nGROUPED\nGROUPING\nGROUPINGS\nGROUPS\nGROUSE\nGROVE\nGROVEL\nGROVELED\nGROVELING\nGROVELS\nGROVER\nGROVERS\nGROVES\nGROW\nGROWER\nGROWERS\nGROWING\nGROWL\nGROWLED\nGROWLING\nGROWLS\nGROWN\nGROWNUP\nGROWNUPS\nGROWS\nGROWTH\nGROWTHS\nGRUB\nGRUBBY\nGRUBS\nGRUDGE\nGRUDGES\nGRUDGINGLY\nGRUESOME\nGRUFF\nGRUFFLY\nGRUMBLE\nGRUMBLED\nGRUMBLES\nGRUMBLING\nGRUMMAN\nGRUNT\nGRUNTED\nGRUNTING\nGRUNTS\nGRUSKY\nGRUYERE\nGUADALUPE\nGUAM\nGUANO\nGUARANTEE\nGUARANTEED\nGUARANTEEING\nGUARANTEER\nGUARANTEERS\nGUARANTEES\nGUARANTY\nGUARD\nGUARDED\nGUARDEDLY\nGUARDHOUSE\nGUARDIA\nGUARDIAN\nGUARDIANS\nGUARDIANSHIP\nGUARDING\nGUARDS\nGUATEMALA\nGUATEMALAN\nGUBERNATORIAL\nGUELPH\nGUENTHER\nGUERRILLA\nGUERRILLAS\nGUESS\nGUESSED\nGUESSES\nGUESSING\nGUESSWORK\nGUEST\nGUESTS\nGUGGENHEIM\nGUHLEMAN\nGUIANA\nGUIDANCE\nGUIDE\nGUIDEBOOK\nGUIDEBOOKS\nGUIDED\nGUIDELINE\nGUIDELINES\nGUIDES\nGUIDING\nGUILD\nGUILDER\nGUILDERS\nGUILE\nGUILFORD\nGUILT\nGUILTIER\nGUILTIEST\nGUILTILY\nGUILTINESS\nGUILTLESS\nGUILTLESSLY\nGUILTY\nGUINEA\nGUINEVERE\nGUISE\nGUISES\nGUITAR\nGUITARS\nGUJARAT\nGUJARATI\nGULCH\nGULCHES\nGULF\nGULFS\nGULL\nGULLAH\nGULLED\nGULLIES\nGULLING\nGULLS\nGULLY\nGULP\nGULPED\nGULPS\nGUM\nGUMMING\nGUMPTION\nGUMS\nGUN\nGUNDERSON\nGUNFIRE\nGUNMAN\nGUNMEN\nGUNNAR\nGUNNED\nGUNNER\nGUNNERS\nGUNNERY\nGUNNING\nGUNNY\nGUNPLAY\nGUNPOWDER\nGUNS\nGUNSHOT\nGUNTHER\nGURGLE\nGURKHA\nGURU\nGUS\nGUSH\nGUSHED\nGUSHER\nGUSHES\nGUSHING\nGUST\nGUSTAFSON\nGUSTAV\nGUSTAVE\nGUSTAVUS\nGUSTO\nGUSTS\nGUSTY\nGUT\nGUTENBERG\nGUTHRIE\nGUTS\nGUTSY\nGUTTER\nGUTTERED\nGUTTERS\nGUTTING\nGUTTURAL\nGUY\nGUYANA\nGUYED\nGUYER\nGUYERS\nGUYING\nGUYS\nGWEN\nGWYN\nGYMNASIUM\nGYMNASIUMS\nGYMNAST\nGYMNASTIC\nGYMNASTICS\nGYMNASTS\nGYPSIES\nGYPSY\nGYRO\nGYROCOMPASS\nGYROSCOPE\nGYROSCOPES\nHAAG\nHAAS\nHABEAS\nHABERMAN\nHABIB\nHABIT\nHABITAT\nHABITATION\nHABITATIONS\nHABITATS\nHABITS\nHABITUAL\nHABITUALLY\nHABITUALNESS\nHACK\nHACKED\nHACKER\nHACKERS\nHACKETT\nHACKING\nHACKNEYED\nHACKS\nHACKSAW\nHAD\nHADAMARD\nHADDAD\nHADDOCK\nHADES\nHADLEY\nHADRIAN\nHAFIZ\nHAG\nHAGEN\nHAGER\nHAGGARD\nHAGGARDLY\nHAGGLE\nHAGSTROM\nHAGUE\nHAHN\nHAIFA\nHAIL\nHAILED\nHAILING\nHAILS\nHAILSTONE\nHAILSTORM\nHAINES\nHAIR\nHAIRCUT\nHAIRCUTS\nHAIRIER\nHAIRINESS\nHAIRLESS\nHAIRPIN\nHAIRS\nHAIRY\nHAITI\nHAITIAN\nHAL\nHALCYON\nHALE\nHALER\nHALEY\nHALF\nHALFHEARTED\nHALFWAY\nHALIFAX\nHALL\nHALLEY\nHALLINAN\nHALLMARK\nHALLMARKS\nHALLOW\nHALLOWED\nHALLOWEEN\nHALLS\nHALLUCINATE\nHALLWAY\nHALLWAYS\nHALOGEN\nHALPERN\nHALSEY\nHALSTEAD\nHALT\nHALTED\nHALTER\nHALTERS\nHALTING\nHALTINGLY\nHALTS\nHALVE\nHALVED\nHALVERS\nHALVERSON\nHALVES\nHALVING\nHAM\nHAMAL\nHAMBURG\nHAMBURGER\nHAMBURGERS\nHAMEY\nHAMILTON\nHAMILTONIAN\nHAMILTONIANS\nHAMLET\nHAMLETS\nHAMLIN\nHAMMER\nHAMMERED\nHAMMERING\nHAMMERS\nHAMMETT\nHAMMING\nHAMMOCK\nHAMMOCKS\nHAMMOND\nHAMPER\nHAMPERED\nHAMPERS\nHAMPSHIRE\nHAMPTON\nHAMS\nHAMSTER\nHAN\nHANCOCK\nHAND\nHANDBAG\nHANDBAGS\nHANDBOOK\nHANDBOOKS\nHANDCUFF\nHANDCUFFED\nHANDCUFFING\nHANDCUFFS\nHANDED\nHANDEL\nHANDFUL\nHANDFULS\nHANDGUN\nHANDICAP\nHANDICAPPED\nHANDICAPS\nHANDIER\nHANDIEST\nHANDILY\nHANDINESS\nHANDING\nHANDIWORK\nHANDKERCHIEF\nHANDKERCHIEFS\nHANDLE\nHANDLED\nHANDLER\nHANDLERS\nHANDLES\nHANDLING\nHANDMAID\nHANDOUT\nHANDS\nHANDSHAKE\nHANDSHAKES\nHANDSHAKING\nHANDSOME\nHANDSOMELY\nHANDSOMENESS\nHANDSOMER\nHANDSOMEST\nHANDWRITING\nHANDWRITTEN\nHANDY\nHANEY\nHANFORD\nHANG\nHANGAR\nHANGARS\nHANGED\nHANGER\nHANGERS\nHANGING\nHANGMAN\nHANGMEN\nHANGOUT\nHANGOVER\nHANGOVERS\nHANGS\nHANKEL\nHANLEY\nHANLON\nHANNA\nHANNAH\nHANNIBAL\nHANOI\nHANOVER\nHANOVERIAN\nHANOVERIANIZE\nHANOVERIANIZES\nHANOVERIZE\nHANOVERIZES\nHANS\nHANSEL\nHANSEN\nHANSON\nHANUKKAH\nHAP\nHAPGOOD\nHAPHAZARD\nHAPHAZARDLY\nHAPHAZARDNESS\nHAPLESS\nHAPLESSLY\nHAPLESSNESS\nHAPLY\nHAPPEN\nHAPPENED\nHAPPENING\nHAPPENINGS\nHAPPENS\nHAPPIER\nHAPPIEST\nHAPPILY\nHAPPINESS\nHAPPY\nHAPSBURG\nHARASS\nHARASSED\nHARASSES\nHARASSING\nHARASSMENT\nHARBIN\nHARBINGER\nHARBOR\nHARBORED\nHARBORING\nHARBORS\nHARCOURT\nHARD\nHARDBOILED\nHARDCOPY\nHARDEN\nHARDER\nHARDEST\nHARDHAT\nHARDIN\nHARDINESS\nHARDING\nHARDLY\nHARDNESS\nHARDSCRABBLE\nHARDSHIP\nHARDSHIPS\nHARDWARE\nHARDWIRED\nHARDWORKING\nHARDY\nHARE\nHARELIP\nHAREM\nHARES\nHARK\nHARKEN\nHARLAN\nHARLEM\nHARLEY\nHARLOT\nHARLOTS\nHARM\nHARMED\nHARMFUL\nHARMFULLY\nHARMFULNESS\nHARMING\nHARMLESS\nHARMLESSLY\nHARMLESSNESS\nHARMON\nHARMONIC\nHARMONICS\nHARMONIES\nHARMONIOUS\nHARMONIOUSLY\nHARMONIOUSNESS\nHARMONIST\nHARMONISTIC\nHARMONISTICALLY\nHARMONIZE\nHARMONY\nHARMS\nHARNESS\nHARNESSED\nHARNESSING\nHAROLD\nHARP\nHARPER\nHARPERS\nHARPING\nHARPY\nHARRIED\nHARRIER\nHARRIET\nHARRIMAN\nHARRINGTON\nHARRIS\nHARRISBURG\nHARRISON\nHARRISONBURG\nHARROW\nHARROWED\nHARROWING\nHARROWS\nHARRY\nHARSH\nHARSHER\nHARSHLY\nHARSHNESS\nHART\nHARTFORD\nHARTLEY\nHARTMAN\nHARVARD\nHARVARDIZE\nHARVARDIZES\nHARVEST\nHARVESTED\nHARVESTER\nHARVESTING\nHARVESTS\nHARVEY\nHARVEYIZE\nHARVEYIZES\nHARVEYS\nHAS\nHASH\nHASHED\nHASHER\nHASHES\nHASHING\nHASHISH\nHASKELL\nHASKINS\nHASSLE\nHASTE\nHASTEN\nHASTENED\nHASTENING\nHASTENS\nHASTILY\nHASTINESS\nHASTINGS\nHASTY\nHAT\nHATCH\nHATCHED\nHATCHET\nHATCHETS\nHATCHING\nHATCHURE\nHATE\nHATED\nHATEFUL\nHATEFULLY\nHATEFULNESS\nHATER\nHATES\nHATFIELD\nHATHAWAY\nHATING\nHATRED\nHATS\nHATTERAS\nHATTIE\nHATTIESBURG\nHATTIZE\nHATTIZES\nHAUGEN\nHAUGHTILY\nHAUGHTINESS\nHAUGHTY\nHAUL\nHAULED\nHAULER\nHAULING\nHAULS\nHAUNCH\nHAUNCHES\nHAUNT\nHAUNTED\nHAUNTER\nHAUNTING\nHAUNTS\nHAUSA\nHAUSDORFF\nHAUSER\nHAVANA\nHAVE\nHAVEN\nHAVENS\nHAVES\nHAVILLAND\nHAVING\nHAVOC\nHAWAII\nHAWAIIAN\nHAWK\nHAWKED\nHAWKER\nHAWKERS\nHAWKINS\nHAWKS\nHAWLEY\nHAWTHORNE\nHAY\nHAYDEN\nHAYDN\nHAYES\nHAYING\nHAYNES\nHAYS\nHAYSTACK\nHAYWARD\nHAYWOOD\nHAZARD\nHAZARDOUS\nHAZARDS\nHAZE\nHAZEL\nHAZES\nHAZINESS\nHAZY\nHEAD\nHEADACHE\nHEADACHES\nHEADED\nHEADER\nHEADERS\nHEADGEAR\nHEADING\nHEADINGS\nHEADLAND\nHEADLANDS\nHEADLIGHT\nHEADLINE\nHEADLINED\nHEADLINES\nHEADLINING\nHEADLONG\nHEADMASTER\nHEADPHONE\nHEADQUARTERS\nHEADROOM\nHEADS\nHEADSET\nHEADWAY\nHEAL\nHEALED\nHEALER\nHEALERS\nHEALEY\nHEALING\nHEALS\nHEALTH\nHEALTHFUL\nHEALTHFULLY\nHEALTHFULNESS\nHEALTHIER\nHEALTHIEST\nHEALTHILY\nHEALTHINESS\nHEALTHY\nHEALY\nHEAP\nHEAPED\nHEAPING\nHEAPS\nHEAR\nHEARD\nHEARER\nHEARERS\nHEARING\nHEARINGS\nHEARKEN\nHEARS\nHEARSAY\nHEARST\nHEART\nHEARTBEAT\nHEARTBREAK\nHEARTEN\nHEARTIEST\nHEARTILY\nHEARTINESS\nHEARTLESS\nHEARTS\nHEARTWOOD\nHEARTY\nHEAT\nHEATABLE\nHEATED\nHEATEDLY\nHEATER\nHEATERS\nHEATH\nHEATHEN\nHEATHER\nHEATHKIT\nHEATHMAN\nHEATING\nHEATS\nHEAVE\nHEAVED\nHEAVEN\nHEAVENLY\nHEAVENS\nHEAVER\nHEAVERS\nHEAVES\nHEAVIER\nHEAVIEST\nHEAVILY\nHEAVINESS\nHEAVING\nHEAVY\nHEAVYWEIGHT\nHEBE\nHEBRAIC\nHEBRAICIZE\nHEBRAICIZES\nHEBREW\nHEBREWS\nHEBRIDES\nHECATE\nHECK\nHECKLE\nHECKMAN\nHECTIC\nHECUBA\nHEDDA\nHEDGE\nHEDGED\nHEDGEHOG\nHEDGEHOGS\nHEDGES\nHEDONISM\nHEDONIST\nHEED\nHEEDED\nHEEDLESS\nHEEDLESSLY\nHEEDLESSNESS\nHEEDS\nHEEL\nHEELED\nHEELERS\nHEELING\nHEELS\nHEFTY\nHEGEL\nHEGELIAN\nHEGELIANIZE\nHEGELIANIZES\nHEGEMONY\nHEIDEGGER\nHEIDELBERG\nHEIFER\nHEIGHT\nHEIGHTEN\nHEIGHTENED\nHEIGHTENING\nHEIGHTENS\nHEIGHTS\nHEINE\nHEINLEIN\nHEINOUS\nHEINOUSLY\nHEINRICH\nHEINZ\nHEINZE\nHEIR\nHEIRESS\nHEIRESSES\nHEIRS\nHEISENBERG\nHEISER\nHELD\nHELEN\nHELENA\nHELENE\nHELGA\nHELICAL\nHELICOPTER\nHELIOCENTRIC\nHELIOPOLIS\nHELIUM\nHELIX\nHELL\nHELLENIC\nHELLENIZATION\nHELLENIZATIONS\nHELLENIZE\nHELLENIZED\nHELLENIZES\nHELLENIZING\nHELLESPONT\nHELLFIRE\nHELLISH\nHELLMAN\nHELLO\nHELLS\nHELM\nHELMET\nHELMETS\nHELMHOLTZ\nHELMSMAN\nHELMUT\nHELP\nHELPED\nHELPER\nHELPERS\nHELPFUL\nHELPFULLY\nHELPFULNESS\nHELPING\nHELPLESS\nHELPLESSLY\nHELPLESSNESS\nHELPMATE\nHELPS\nHELSINKI\nHELVETICA\nHEM\nHEMINGWAY\nHEMISPHERE\nHEMISPHERES\nHEMLOCK\nHEMLOCKS\nHEMOGLOBIN\nHEMORRHOID\nHEMOSTAT\nHEMOSTATS\nHEMP\nHEMPEN\nHEMPSTEAD\nHEMS\nHEN\nHENCE\nHENCEFORTH\nHENCHMAN\nHENCHMEN\nHENDERSON\nHENDRICK\nHENDRICKS\nHENDRICKSON\nHENDRIX\nHENLEY\nHENNESSEY\nHENNESSY\nHENNING\nHENPECK\nHENRI\nHENRIETTA\nHENS\nHEPATITIS\nHEPBURN\nHER\nHERA\nHERACLITUS\nHERALD\nHERALDED\nHERALDING\nHERALDS\nHERB\nHERBERT\nHERBIVORE\nHERBIVOROUS\nHERBS\nHERCULEAN\nHERCULES\nHERD\nHERDED\nHERDER\nHERDING\nHERDS\nHERE\nHEREABOUT\nHEREABOUTS\nHEREAFTER\nHEREBY\nHEREDITARY\nHEREDITY\nHEREFORD\nHEREIN\nHEREINAFTER\nHEREOF\nHERES\nHERESY\nHERETIC\nHERETICS\nHERETO\nHERETOFORE\nHEREUNDER\nHEREWITH\nHERITAGE\nHERITAGES\nHERKIMER\nHERMAN\nHERMANN\nHERMES\nHERMETIC\nHERMETICALLY\nHERMIT\nHERMITE\nHERMITIAN\nHERMITS\nHERMOSA\nHERNANDEZ\nHERO\nHERODOTUS\nHEROES\nHEROIC\nHEROICALLY\nHEROICS\nHEROIN\nHEROINE\nHEROINES\nHEROISM\nHERON\nHERONS\nHERPES\nHERR\nHERRING\nHERRINGS\nHERRINGTON\nHERS\nHERSCHEL\nHERSELF\nHERSEY\nHERSHEL\nHERSHEY\nHERTZ\nHERTZOG\nHESITANT\nHESITANTLY\nHESITATE\nHESITATED\nHESITATES\nHESITATING\nHESITATINGLY\nHESITATION\nHESITATIONS\nHESPERUS\nHESS\nHESSE\nHESSIAN\nHESSIANS\nHESTER\nHETEROGENEITY\nHETEROGENEOUS\nHETEROGENEOUSLY\nHETEROGENEOUSNESS\nHETEROGENOUS\nHETEROSEXUAL\nHETMAN\nHETTIE\nHETTY\nHEUBLEIN\nHEURISTIC\nHEURISTICALLY\nHEURISTICS\nHEUSEN\nHEUSER\nHEW\nHEWED\nHEWER\nHEWETT\nHEWITT\nHEWLETT\nHEWS\nHEX\nHEXADECIMAL\nHEXAGON\nHEXAGONAL\nHEXAGONALLY\nHEXAGONS\nHEY\nHEYWOOD\nHIATT\nHIAWATHA\nHIBBARD\nHIBERNATE\nHIBERNIA\nHICK\nHICKEY\nHICKEYS\nHICKMAN\nHICKOK\nHICKORY\nHICKS\nHID\nHIDDEN\nHIDE\nHIDEOUS\nHIDEOUSLY\nHIDEOUSNESS\nHIDEOUT\nHIDEOUTS\nHIDES\nHIDING\nHIERARCHAL\nHIERARCHIC\nHIERARCHICAL\nHIERARCHICALLY\nHIERARCHIES\nHIERARCHY\nHIERONYMUS\nHIGGINS\nHIGH\nHIGHER\nHIGHEST\nHIGHFIELD\nHIGHLAND\nHIGHLANDER\nHIGHLANDS\nHIGHLIGHT\nHIGHLIGHTED\nHIGHLIGHTING\nHIGHLIGHTS\nHIGHLY\nHIGHNESS\nHIGHNESSES\nHIGHWAY\nHIGHWAYMAN\nHIGHWAYMEN\nHIGHWAYS\nHIJACK\nHIJACKED\nHIKE\nHIKED\nHIKER\nHIKES\nHIKING\nHILARIOUS\nHILARIOUSLY\nHILARITY\nHILBERT\nHILDEBRAND\nHILL\nHILLARY\nHILLBILLY\nHILLCREST\nHILLEL\nHILLOCK\nHILLS\nHILLSBORO\nHILLSDALE\nHILLSIDE\nHILLSIDES\nHILLTOP\nHILLTOPS\nHILT\nHILTON\nHILTS\nHIM\nHIMALAYA\nHIMALAYAS\nHIMMLER\nHIMSELF\nHIND\nHINDER\nHINDERED\nHINDERING\nHINDERS\nHINDI\nHINDRANCE\nHINDRANCES\nHINDSIGHT\nHINDU\nHINDUISM\nHINDUS\nHINDUSTAN\nHINES\nHINGE\nHINGED\nHINGES\nHINKLE\nHINMAN\nHINSDALE\nHINT\nHINTED\nHINTING\nHINTS\nHIP\nHIPPO\nHIPPOCRATES\nHIPPOCRATIC\nHIPPOPOTAMUS\nHIPS\nHIRAM\nHIRE\nHIRED\nHIRER\nHIRERS\nHIRES\nHIREY\nHIRING\nHIRINGS\nHIROSHI\nHIROSHIMA\nHIRSCH\nHIS\nHISPANIC\nHISPANICIZE\nHISPANICIZES\nHISPANICS\nHISS\nHISSED\nHISSES\nHISSING\nHISTOGRAM\nHISTOGRAMS\nHISTORIAN\nHISTORIANS\nHISTORIC\nHISTORICAL\nHISTORICALLY\nHISTORIES\nHISTORY\nHIT\nHITACHI\nHITCH\nHITCHCOCK\nHITCHED\nHITCHHIKE\nHITCHHIKED\nHITCHHIKER\nHITCHHIKERS\nHITCHHIKES\nHITCHHIKING\nHITCHING\nHITHER\nHITHERTO\nHITLER\nHITLERIAN\nHITLERISM\nHITLERITE\nHITLERITES\nHITS\nHITTER\nHITTERS\nHITTING\nHIVE\nHOAGLAND\nHOAR\nHOARD\nHOARDER\nHOARDING\nHOARINESS\nHOARSE\nHOARSELY\nHOARSENESS\nHOARY\nHOBART\nHOBBES\nHOBBIES\nHOBBLE\nHOBBLED\nHOBBLES\nHOBBLING\nHOBBS\nHOBBY\nHOBBYHORSE\nHOBBYIST\nHOBBYISTS\nHOBDAY\nHOBOKEN\nHOCKEY\nHODGEPODGE\nHODGES\nHODGKIN\nHOE\nHOES\nHOFF\nHOFFMAN\nHOG\nHOGGING\nHOGS\nHOIST\nHOISTED\nHOISTING\nHOISTS\nHOKAN\nHOLBROOK\nHOLCOMB\nHOLD\nHOLDEN\nHOLDER\nHOLDERS\nHOLDING\nHOLDINGS\nHOLDS\nHOLE\nHOLED\nHOLES\nHOLIDAY\nHOLIDAYS\nHOLIES\nHOLINESS\nHOLISTIC\nHOLLAND\nHOLLANDAISE\nHOLLANDER\nHOLLERITH\nHOLLINGSWORTH\nHOLLISTER\nHOLLOW\nHOLLOWAY\nHOLLOWED\nHOLLOWING\nHOLLOWLY\nHOLLOWNESS\nHOLLOWS\nHOLLY\nHOLLYWOOD\nHOLLYWOODIZE\nHOLLYWOODIZES\nHOLM\nHOLMAN\nHOLMDEL\nHOLMES\nHOLOCAUST\nHOLOCENE\nHOLOGRAM\nHOLOGRAMS\nHOLST\nHOLSTEIN\nHOLY\nHOLYOKE\nHOLZMAN\nHOM\nHOMAGE\nHOME\nHOMED\nHOMELESS\nHOMELY\nHOMEMADE\nHOMEMAKER\nHOMEMAKERS\nHOMEOMORPHIC\nHOMEOMORPHISM\nHOMEOMORPHISMS\nHOMEOPATH\nHOMEOWNER\nHOMER\nHOMERIC\nHOMERS\nHOMES\nHOMESICK\nHOMESICKNESS\nHOMESPUN\nHOMESTEAD\nHOMESTEADER\nHOMESTEADERS\nHOMESTEADS\nHOMEWARD\nHOMEWARDS\nHOMEWORK\nHOMICIDAL\nHOMICIDE\nHOMING\nHOMO\nHOMOGENEITIES\nHOMOGENEITY\nHOMOGENEOUS\nHOMOGENEOUSLY\nHOMOGENEOUSNESS\nHOMOMORPHIC\nHOMOMORPHISM\nHOMOMORPHISMS\nHOMOSEXUAL\nHONDA\nHONDO\nHONDURAS\nHONE\nHONED\nHONER\nHONES\nHONEST\nHONESTLY\nHONESTY\nHONEY\nHONEYBEE\nHONEYCOMB\nHONEYCOMBED\nHONEYDEW\nHONEYMOON\nHONEYMOONED\nHONEYMOONER\nHONEYMOONERS\nHONEYMOONING\nHONEYMOONS\nHONEYSUCKLE\nHONEYWELL\nHONING\nHONOLULU\nHONOR\nHONORABLE\nHONORABLENESS\nHONORABLY\nHONORARIES\nHONORARIUM\nHONORARY\nHONORED\nHONORER\nHONORING\nHONORS\nHONSHU\nHOOD\nHOODED\nHOODLUM\nHOODS\nHOODWINK\nHOODWINKED\nHOODWINKING\nHOODWINKS\nHOOF\nHOOFS\nHOOK\nHOOKED\nHOOKER\nHOOKERS\nHOOKING\nHOOKS\nHOOKUP\nHOOKUPS\nHOOP\nHOOPER\nHOOPS\nHOOSIER\nHOOSIERIZE\nHOOSIERIZES\nHOOT\nHOOTED\nHOOTER\nHOOTING\nHOOTS\nHOOVER\nHOOVERIZE\nHOOVERIZES\nHOOVES\nHOP\nHOPE\nHOPED\nHOPEFUL\nHOPEFULLY\nHOPEFULNESS\nHOPEFULS\nHOPELESS\nHOPELESSLY\nHOPELESSNESS\nHOPES\nHOPI\nHOPING\nHOPKINS\nHOPKINSIAN\nHOPPER\nHOPPERS\nHOPPING\nHOPS\nHORACE\nHORATIO\nHORDE\nHORDES\nHORIZON\nHORIZONS\nHORIZONTAL\nHORIZONTALLY\nHORMONE\nHORMONES\nHORN\nHORNBLOWER\nHORNED\nHORNET\nHORNETS\nHORNS\nHORNY\nHOROWITZ\nHORRENDOUS\nHORRENDOUSLY\nHORRIBLE\nHORRIBLENESS\nHORRIBLY\nHORRID\nHORRIDLY\nHORRIFIED\nHORRIFIES\nHORRIFY\nHORRIFYING\nHORROR\nHORRORS\nHORSE\nHORSEBACK\nHORSEFLESH\nHORSEFLY\nHORSEMAN\nHORSEPLAY\nHORSEPOWER\nHORSES\nHORSESHOE\nHORSESHOER\nHORTICULTURE\nHORTON\nHORUS\nHOSE\nHOSES\nHOSPITABLE\nHOSPITABLY\nHOSPITAL\nHOSPITALITY\nHOSPITALIZE\nHOSPITALIZED\nHOSPITALIZES\nHOSPITALIZING\nHOSPITALS\nHOST\nHOSTAGE\nHOSTAGES\nHOSTED\nHOSTESS\nHOSTESSES\nHOSTILE\nHOSTILELY\nHOSTILITIES\nHOSTILITY\nHOSTING\nHOSTS\nHOT\nHOTEL\nHOTELS\nHOTLY\nHOTNESS\nHOTTENTOT\nHOTTER\nHOTTEST\nHOUDAILLE\nHOUDINI\nHOUGHTON\nHOUND\nHOUNDED\nHOUNDING\nHOUNDS\nHOUR\nHOURGLASS\nHOURLY\nHOURS\nHOUSE\nHOUSEBOAT\nHOUSEBROKEN\nHOUSED\nHOUSEFLIES\nHOUSEFLY\nHOUSEHOLD\nHOUSEHOLDER\nHOUSEHOLDERS\nHOUSEHOLDS\nHOUSEKEEPER\nHOUSEKEEPERS\nHOUSEKEEPING\nHOUSES\nHOUSETOP\nHOUSETOPS\nHOUSEWIFE\nHOUSEWIFELY\nHOUSEWIVES\nHOUSEWORK\nHOUSING\nHOUSTON\nHOVEL\nHOVELS\nHOVER\nHOVERED\nHOVERING\nHOVERS\nHOW\nHOWARD\nHOWE\nHOWELL\nHOWEVER\nHOWL\nHOWLED\nHOWLER\nHOWLING\nHOWLS\nHOYT\nHROTHGAR\nHUB\nHUBBARD\nHUBBELL\nHUBER\nHUBERT\nHUBRIS\nHUBS\nHUCK\nHUDDLE\nHUDDLED\nHUDDLING\nHUDSON\nHUE\nHUES\nHUEY\nHUFFMAN\nHUG\nHUGE\nHUGELY\nHUGENESS\nHUGGING\nHUGGINS\nHUGH\nHUGHES\nHUGO\nHUH\nHULL\nHULLS\nHUM\nHUMAN\nHUMANE\nHUMANELY\nHUMANENESS\nHUMANITARIAN\nHUMANITIES\nHUMANITY\nHUMANLY\nHUMANNESS\nHUMANS\nHUMBLE\nHUMBLED\nHUMBLENESS\nHUMBLER\nHUMBLEST\nHUMBLING\nHUMBLY\nHUMBOLDT\nHUMBUG\nHUME\nHUMERUS\nHUMID\nHUMIDIFICATION\nHUMIDIFIED\nHUMIDIFIER\nHUMIDIFIERS\nHUMIDIFIES\nHUMIDIFY\nHUMIDIFYING\nHUMIDITY\nHUMIDLY\nHUMILIATE\nHUMILIATED\nHUMILIATES\nHUMILIATING\nHUMILIATION\nHUMILIATIONS\nHUMILITY\nHUMMED\nHUMMEL\nHUMMING\nHUMMINGBIRD\nHUMOR\nHUMORED\nHUMORER\nHUMORERS\nHUMORING\nHUMOROUS\nHUMOROUSLY\nHUMOROUSNESS\nHUMORS\nHUMP\nHUMPBACK\nHUMPED\nHUMPHREY\nHUMPTY\nHUMS\nHUN\nHUNCH\nHUNCHED\nHUNCHES\nHUNDRED\nHUNDREDFOLD\nHUNDREDS\nHUNDREDTH\nHUNG\nHUNGARIAN\nHUNGARY\nHUNGER\nHUNGERED\nHUNGERING\nHUNGERS\nHUNGRIER\nHUNGRIEST\nHUNGRILY\nHUNGRY\nHUNK\nHUNKS\nHUNS\nHUNT\nHUNTED\nHUNTER\nHUNTERS\nHUNTING\nHUNTINGTON\nHUNTLEY\nHUNTS\nHUNTSMAN\nHUNTSVILLE\nHURD\nHURDLE\nHURL\nHURLED\nHURLER\nHURLERS\nHURLING\nHURON\nHURONS\nHURRAH\nHURRICANE\nHURRICANES\nHURRIED\nHURRIEDLY\nHURRIES\nHURRY\nHURRYING\nHURST\nHURT\nHURTING\nHURTLE\nHURTLING\nHURTS\nHURWITZ\nHUSBAND\nHUSBANDRY\nHUSBANDS\nHUSH\nHUSHED\nHUSHES\nHUSHING\nHUSK\nHUSKED\nHUSKER\nHUSKINESS\nHUSKING\nHUSKS\nHUSKY\nHUSTLE\nHUSTLED\nHUSTLER\nHUSTLES\nHUSTLING\nHUSTON\nHUT\nHUTCH\nHUTCHINS\nHUTCHINSON\nHUTCHISON\nHUTS\nHUXLEY\nHUXTABLE\nHYACINTH\nHYADES\nHYANNIS\nHYBRID\nHYDE\nHYDRA\nHYDRANT\nHYDRAULIC\nHYDRO\nHYDRODYNAMIC\nHYDRODYNAMICS\nHYDROGEN\nHYDROGENS\nHYENA\nHYGIENE\nHYMAN\nHYMEN\nHYMN\nHYMNS\nHYPER\nHYPERBOLA\nHYPERBOLIC\nHYPERTEXT\nHYPHEN\nHYPHENATE\nHYPHENS\nHYPNOSIS\nHYPNOTIC\nHYPOCRISIES\nHYPOCRISY\nHYPOCRITE\nHYPOCRITES\nHYPODERMIC\nHYPODERMICS\nHYPOTHESES\nHYPOTHESIS\nHYPOTHESIZE\nHYPOTHESIZED\nHYPOTHESIZER\nHYPOTHESIZES\nHYPOTHESIZING\nHYPOTHETICAL\nHYPOTHETICALLY\nHYSTERESIS\nHYSTERICAL\nHYSTERICALLY\nIAN\nIBERIA\nIBERIAN\nIBEX\nIBID\nIBIS\nIBN\nIBSEN\nICARUS\nICE\nICEBERG\nICEBERGS\nICEBOX\nICED\nICELAND\nICELANDIC\nICES\nICICLE\nICINESS\nICING\nICINGS\nICON\nICONOCLASM\nICONOCLAST\nICONS\nICOSAHEDRA\nICOSAHEDRAL\nICOSAHEDRON\nICY\nIDA\nIDAHO\nIDEA\nIDEAL\nIDEALISM\nIDEALISTIC\nIDEALIZATION\nIDEALIZATIONS\nIDEALIZE\nIDEALIZED\nIDEALIZES\nIDEALIZING\nIDEALLY\nIDEALS\nIDEAS\nIDEM\nIDEMPOTENCY\nIDEMPOTENT\nIDENTICAL\nIDENTICALLY\nIDENTIFIABLE\nIDENTIFIABLY\nIDENTIFICATION\nIDENTIFICATIONS\nIDENTIFIED\nIDENTIFIER\nIDENTIFIERS\nIDENTIFIES\nIDENTIFY\nIDENTIFYING\nIDENTITIES\nIDENTITY\nIDEOLOGICAL\nIDEOLOGICALLY\nIDEOLOGY\nIDIOCY\nIDIOM\nIDIOSYNCRASIES\nIDIOSYNCRASY\nIDIOSYNCRATIC\nIDIOT\nIDIOTIC\nIDIOTS\nIDLE\nIDLED\nIDLENESS\nIDLER\nIDLERS\nIDLES\nIDLEST\nIDLING\nIDLY\nIDOL\nIDOLATRY\nIDOLS\nIFNI\nIGLOO\nIGNITE\nIGNITION\nIGNOBLE\nIGNOMINIOUS\nIGNORAMUS\nIGNORANCE\nIGNORANT\nIGNORANTLY\nIGNORE\nIGNORED\nIGNORES\nIGNORING\nIGOR\nIKE\nILIAD\nILIADIZE\nILIADIZES\nILL\nILLEGAL\nILLEGALITIES\nILLEGALITY\nILLEGALLY\nILLEGITIMATE\nILLICIT\nILLICITLY\nILLINOIS\nILLITERACY\nILLITERATE\nILLNESS\nILLNESSES\nILLOGICAL\nILLOGICALLY\nILLS\nILLUMINATE\nILLUMINATED\nILLUMINATES\nILLUMINATING\nILLUMINATION\nILLUMINATIONS\nILLUSION\nILLUSIONS\nILLUSIVE\nILLUSIVELY\nILLUSORY\nILLUSTRATE\nILLUSTRATED\nILLUSTRATES\nILLUSTRATING\nILLUSTRATION\nILLUSTRATIONS\nILLUSTRATIVE\nILLUSTRATIVELY\nILLUSTRATOR\nILLUSTRATORS\nILLUSTRIOUS\nILLUSTRIOUSNESS\nILLY\nILONA\nILYUSHIN\nIMAGE\nIMAGEN\nIMAGERY\nIMAGES\nIMAGINABLE\nIMAGINABLY\nIMAGINARY\nIMAGINATION\nIMAGINATIONS\nIMAGINATIVE\nIMAGINATIVELY\nIMAGINE\nIMAGINED\nIMAGINES\nIMAGING\nIMAGINING\nIMAGININGS\nIMBALANCE\nIMBALANCES\nIMBECILE\nIMBIBE\nIMBRIUM\nIMITATE\nIMITATED\nIMITATES\nIMITATING\nIMITATION\nIMITATIONS\nIMITATIVE\nIMMACULATE\nIMMACULATELY\nIMMATERIAL\nIMMATERIALLY\nIMMATURE\nIMMATURITY\nIMMEDIACIES\nIMMEDIACY\nIMMEDIATE\nIMMEDIATELY\nIMMEMORIAL\nIMMENSE\nIMMENSELY\nIMMERSE\nIMMERSED\nIMMERSES\nIMMERSION\nIMMIGRANT\nIMMIGRANTS\nIMMIGRATE\nIMMIGRATED\nIMMIGRATES\nIMMIGRATING\nIMMIGRATION\nIMMINENT\nIMMINENTLY\nIMMODERATE\nIMMODEST\nIMMORAL\nIMMORTAL\nIMMORTALITY\nIMMORTALLY\nIMMOVABILITY\nIMMOVABLE\nIMMOVABLY\nIMMUNE\nIMMUNITIES\nIMMUNITY\nIMMUNIZATION\nIMMUTABLE\nIMP\nIMPACT\nIMPACTED\nIMPACTING\nIMPACTION\nIMPACTOR\nIMPACTORS\nIMPACTS\nIMPAIR\nIMPAIRED\nIMPAIRING\nIMPAIRS\nIMPALE\nIMPART\nIMPARTED\nIMPARTIAL\nIMPARTIALLY\nIMPARTS\nIMPASSE\nIMPASSIVE\nIMPATIENCE\nIMPATIENT\nIMPATIENTLY\nIMPEACH\nIMPEACHABLE\nIMPEACHED\nIMPEACHMENT\nIMPECCABLE\nIMPEDANCE\nIMPEDANCES\nIMPEDE\nIMPEDED\nIMPEDES\nIMPEDIMENT\nIMPEDIMENTS\nIMPEDING\nIMPEL\nIMPELLED\nIMPELLING\nIMPEND\nIMPENDING\nIMPENETRABILITY\nIMPENETRABLE\nIMPENETRABLY\nIMPERATIVE\nIMPERATIVELY\nIMPERATIVES\nIMPERCEIVABLE\nIMPERCEPTIBLE\nIMPERFECT\nIMPERFECTION\nIMPERFECTIONS\nIMPERFECTLY\nIMPERIAL\nIMPERIALISM\nIMPERIALIST\nIMPERIALISTS\nIMPERIL\nIMPERILED\nIMPERIOUS\nIMPERIOUSLY\nIMPERMANENCE\nIMPERMANENT\nIMPERMEABLE\nIMPERMISSIBLE\nIMPERSONAL\nIMPERSONALLY\nIMPERSONATE\nIMPERSONATED\nIMPERSONATES\nIMPERSONATING\nIMPERSONATION\nIMPERSONATIONS\nIMPERTINENT\nIMPERTINENTLY\nIMPERVIOUS\nIMPERVIOUSLY\nIMPETUOUS\nIMPETUOUSLY\nIMPETUS\nIMPINGE\nIMPINGED\nIMPINGES\nIMPINGING\nIMPIOUS\nIMPLACABLE\nIMPLANT\nIMPLANTED\nIMPLANTING\nIMPLANTS\nIMPLAUSIBLE\nIMPLEMENT\nIMPLEMENTABLE\nIMPLEMENTATION\nIMPLEMENTATIONS\nIMPLEMENTED\nIMPLEMENTER\nIMPLEMENTING\nIMPLEMENTOR\nIMPLEMENTORS\nIMPLEMENTS\nIMPLICANT\nIMPLICANTS\nIMPLICATE\nIMPLICATED\nIMPLICATES\nIMPLICATING\nIMPLICATION\nIMPLICATIONS\nIMPLICIT\nIMPLICITLY\nIMPLICITNESS\nIMPLIED\nIMPLIES\nIMPLORE\nIMPLORED\nIMPLORING\nIMPLY\nIMPLYING\nIMPOLITE\nIMPORT\nIMPORTANCE\nIMPORTANT\nIMPORTANTLY\nIMPORTATION\nIMPORTED\nIMPORTER\nIMPORTERS\nIMPORTING\nIMPORTS\nIMPOSE\nIMPOSED\nIMPOSES\nIMPOSING\nIMPOSITION\nIMPOSITIONS\nIMPOSSIBILITIES\nIMPOSSIBILITY\nIMPOSSIBLE\nIMPOSSIBLY\nIMPOSTOR\nIMPOSTORS\nIMPOTENCE\nIMPOTENCY\nIMPOTENT\nIMPOUND\nIMPOVERISH\nIMPOVERISHED\nIMPOVERISHMENT\nIMPRACTICABLE\nIMPRACTICAL\nIMPRACTICALITY\nIMPRACTICALLY\nIMPRECISE\nIMPRECISELY\nIMPRECISION\nIMPREGNABLE\nIMPREGNATE\nIMPRESS\nIMPRESSED\nIMPRESSER\nIMPRESSES\nIMPRESSIBLE\nIMPRESSING\nIMPRESSION\nIMPRESSIONABLE\nIMPRESSIONIST\nIMPRESSIONISTIC\nIMPRESSIONS\nIMPRESSIVE\nIMPRESSIVELY\nIMPRESSIVENESS\nIMPRESSMENT\nIMPRIMATUR\nIMPRINT\nIMPRINTED\nIMPRINTING\nIMPRINTS\nIMPRISON\nIMPRISONED\nIMPRISONING\nIMPRISONMENT\nIMPRISONMENTS\nIMPRISONS\nIMPROBABILITY\nIMPROBABLE\nIMPROMPTU\nIMPROPER\nIMPROPERLY\nIMPROPRIETY\nIMPROVE\nIMPROVED\nIMPROVEMENT\nIMPROVEMENTS\nIMPROVES\nIMPROVING\nIMPROVISATION\nIMPROVISATIONAL\nIMPROVISATIONS\nIMPROVISE\nIMPROVISED\nIMPROVISER\nIMPROVISERS\nIMPROVISES\nIMPROVISING\nIMPRUDENT\nIMPS\nIMPUDENT\nIMPUDENTLY\nIMPUGN\nIMPULSE\nIMPULSES\nIMPULSION\nIMPULSIVE\nIMPUNITY\nIMPURE\nIMPURITIES\nIMPURITY\nIMPUTE\nIMPUTED\nINABILITY\nINACCESSIBLE\nINACCURACIES\nINACCURACY\nINACCURATE\nINACTION\nINACTIVATE\nINACTIVE\nINACTIVITY\nINADEQUACIES\nINADEQUACY\nINADEQUATE\nINADEQUATELY\nINADEQUATENESS\nINADMISSIBILITY\nINADMISSIBLE\nINADVERTENT\nINADVERTENTLY\nINADVISABLE\nINALIENABLE\nINALTERABLE\nINANE\nINANIMATE\nINANIMATELY\nINANNA\nINAPPLICABLE\nINAPPROACHABLE\nINAPPROPRIATE\nINAPPROPRIATENESS\nINASMUCH\nINATTENTION\nINAUDIBLE\nINAUGURAL\nINAUGURATE\nINAUGURATED\nINAUGURATING\nINAUGURATION\nINAUSPICIOUS\nINBOARD\nINBOUND\nINBREED\nINCA\nINCALCULABLE\nINCANDESCENT\nINCANTATION\nINCAPABLE\nINCAPACITATE\nINCAPACITATING\nINCARCERATE\nINCARNATION\nINCARNATIONS\nINCAS\nINCENDIARIES\nINCENDIARY\nINCENSE\nINCENSED\nINCENSES\nINCENTIVE\nINCENTIVES\nINCEPTION\nINCESSANT\nINCESSANTLY\nINCEST\nINCESTUOUS\nINCH\nINCHED\nINCHES\nINCHING\nINCIDENCE\nINCIDENT\nINCIDENTAL\nINCIDENTALLY\nINCIDENTALS\nINCIDENTS\nINCINERATE\nINCIPIENT\nINCISIVE\nINCITE\nINCITED\nINCITEMENT\nINCITES\nINCITING\nINCLEMENT\nINCLINATION\nINCLINATIONS\nINCLINE\nINCLINED\nINCLINES\nINCLINING\nINCLOSE\nINCLOSED\nINCLOSES\nINCLOSING\nINCLUDE\nINCLUDED\nINCLUDES\nINCLUDING\nINCLUSION\nINCLUSIONS\nINCLUSIVE\nINCLUSIVELY\nINCLUSIVENESS\nINCOHERENCE\nINCOHERENT\nINCOHERENTLY\nINCOME\nINCOMES\nINCOMING\nINCOMMENSURABLE\nINCOMMENSURATE\nINCOMMUNICABLE\nINCOMPARABLE\nINCOMPARABLY\nINCOMPATIBILITIES\nINCOMPATIBILITY\nINCOMPATIBLE\nINCOMPATIBLY\nINCOMPETENCE\nINCOMPETENT\nINCOMPETENTS\nINCOMPLETE\nINCOMPLETELY\nINCOMPLETENESS\nINCOMPREHENSIBILITY\nINCOMPREHENSIBLE\nINCOMPREHENSIBLY\nINCOMPREHENSION\nINCOMPRESSIBLE\nINCOMPUTABLE\nINCONCEIVABLE\nINCONCLUSIVE\nINCONGRUITY\nINCONGRUOUS\nINCONSEQUENTIAL\nINCONSEQUENTIALLY\nINCONSIDERABLE\nINCONSIDERATE\nINCONSIDERATELY\nINCONSIDERATENESS\nINCONSISTENCIES\nINCONSISTENCY\nINCONSISTENT\nINCONSISTENTLY\nINCONSPICUOUS\nINCONTESTABLE\nINCONTROVERTIBLE\nINCONTROVERTIBLY\nINCONVENIENCE\nINCONVENIENCED\nINCONVENIENCES\nINCONVENIENCING\nINCONVENIENT\nINCONVENIENTLY\nINCONVERTIBLE\nINCORPORATE\nINCORPORATED\nINCORPORATES\nINCORPORATING\nINCORPORATION\nINCORRECT\nINCORRECTLY\nINCORRECTNESS\nINCORRIGIBLE\nINCREASE\nINCREASED\nINCREASES\nINCREASING\nINCREASINGLY\nINCREDIBLE\nINCREDIBLY\nINCREDULITY\nINCREDULOUS\nINCREDULOUSLY\nINCREMENT\nINCREMENTAL\nINCREMENTALLY\nINCREMENTED\nINCREMENTER\nINCREMENTING\nINCREMENTS\nINCRIMINATE\nINCUBATE\nINCUBATED\nINCUBATES\nINCUBATING\nINCUBATION\nINCUBATOR\nINCUBATORS\nINCULCATE\nINCUMBENT\nINCUR\nINCURABLE\nINCURRED\nINCURRING\nINCURS\nINCURSION\nINDEBTED\nINDEBTEDNESS\nINDECENT\nINDECIPHERABLE\nINDECISION\nINDECISIVE\nINDEED\nINDEFATIGABLE\nINDEFENSIBLE\nINDEFINITE\nINDEFINITELY\nINDEFINITENESS\nINDELIBLE\nINDEMNIFY\nINDEMNITY\nINDENT\nINDENTATION\nINDENTATIONS\nINDENTED\nINDENTING\nINDENTS\nINDENTURE\nINDEPENDENCE\nINDEPENDENT\nINDEPENDENTLY\nINDESCRIBABLE\nINDESTRUCTIBLE\nINDETERMINACIES\nINDETERMINACY\nINDETERMINATE\nINDETERMINATELY\nINDEX\nINDEXABLE\nINDEXED\nINDEXES\nINDEXING\nINDIA\nINDIAN\nINDIANA\nINDIANAPOLIS\nINDIANS\nINDICATE\nINDICATED\nINDICATES\nINDICATING\nINDICATION\nINDICATIONS\nINDICATIVE\nINDICATOR\nINDICATORS\nINDICES\nINDICT\nINDICTMENT\nINDICTMENTS\nINDIES\nINDIFFERENCE\nINDIFFERENT\nINDIFFERENTLY\nINDIGENOUS\nINDIGENOUSLY\nINDIGENOUSNESS\nINDIGESTIBLE\nINDIGESTION\nINDIGNANT\nINDIGNANTLY\nINDIGNATION\nINDIGNITIES\nINDIGNITY\nINDIGO\nINDIRA\nINDIRECT\nINDIRECTED\nINDIRECTING\nINDIRECTION\nINDIRECTIONS\nINDIRECTLY\nINDIRECTS\nINDISCREET\nINDISCRETION\nINDISCRIMINATE\nINDISCRIMINATELY\nINDISPENSABILITY\nINDISPENSABLE\nINDISPENSABLY\nINDISPUTABLE\nINDISTINCT\nINDISTINGUISHABLE\nINDIVIDUAL\nINDIVIDUALISM\nINDIVIDUALISTIC\nINDIVIDUALITY\nINDIVIDUALIZE\nINDIVIDUALIZED\nINDIVIDUALIZES\nINDIVIDUALIZING\nINDIVIDUALLY\nINDIVIDUALS\nINDIVISIBILITY\nINDIVISIBLE\nINDO\nINDOCHINA\nINDOCHINESE\nINDOCTRINATE\nINDOCTRINATED\nINDOCTRINATES\nINDOCTRINATING\nINDOCTRINATION\nINDOEUROPEAN\nINDOLENT\nINDOLENTLY\nINDOMITABLE\nINDONESIA\nINDONESIAN\nINDOOR\nINDOORS\nINDUBITABLE\nINDUCE\nINDUCED\nINDUCEMENT\nINDUCEMENTS\nINDUCER\nINDUCES\nINDUCING\nINDUCT\nINDUCTANCE\nINDUCTANCES\nINDUCTED\nINDUCTEE\nINDUCTING\nINDUCTION\nINDUCTIONS\nINDUCTIVE\nINDUCTIVELY\nINDUCTOR\nINDUCTORS\nINDUCTS\nINDULGE\nINDULGED\nINDULGENCE\nINDULGENCES\nINDULGENT\nINDULGING\nINDUS\nINDUSTRIAL\nINDUSTRIALISM\nINDUSTRIALIST\nINDUSTRIALISTS\nINDUSTRIALIZATION\nINDUSTRIALIZED\nINDUSTRIALLY\nINDUSTRIALS\nINDUSTRIES\nINDUSTRIOUS\nINDUSTRIOUSLY\nINDUSTRIOUSNESS\nINDUSTRY\nINDY\nINEFFECTIVE\nINEFFECTIVELY\nINEFFECTIVENESS\nINEFFECTUAL\nINEFFICIENCIES\nINEFFICIENCY\nINEFFICIENT\nINEFFICIENTLY\nINELEGANT\nINELIGIBLE\nINEPT\nINEQUALITIES\nINEQUALITY\nINEQUITABLE\nINEQUITY\nINERT\nINERTIA\nINERTIAL\nINERTLY\nINERTNESS\nINESCAPABLE\nINESCAPABLY\nINESSENTIAL\nINESTIMABLE\nINEVITABILITIES\nINEVITABILITY\nINEVITABLE\nINEVITABLY\nINEXACT\nINEXCUSABLE\nINEXCUSABLY\nINEXHAUSTIBLE\nINEXORABLE\nINEXORABLY\nINEXPENSIVE\nINEXPENSIVELY\nINEXPERIENCE\nINEXPERIENCED\nINEXPLICABLE\nINFALLIBILITY\nINFALLIBLE\nINFALLIBLY\nINFAMOUS\nINFAMOUSLY\nINFAMY\nINFANCY\nINFANT\nINFANTILE\nINFANTRY\nINFANTRYMAN\nINFANTRYMEN\nINFANTS\nINFARCT\nINFATUATE\nINFEASIBLE\nINFECT\nINFECTED\nINFECTING\nINFECTION\nINFECTIONS\nINFECTIOUS\nINFECTIOUSLY\nINFECTIVE\nINFECTS\nINFER\nINFERENCE\nINFERENCES\nINFERENTIAL\nINFERIOR\nINFERIORITY\nINFERIORS\nINFERNAL\nINFERNALLY\nINFERNO\nINFERNOS\nINFERRED\nINFERRING\nINFERS\nINFERTILE\nINFEST\nINFESTED\nINFESTING\nINFESTS\nINFIDEL\nINFIDELITY\nINFIDELS\nINFIGHTING\nINFILTRATE\nINFINITE\nINFINITELY\nINFINITENESS\nINFINITESIMAL\nINFINITIVE\nINFINITIVES\nINFINITUDE\nINFINITUM\nINFINITY\nINFIRM\nINFIRMARY\nINFIRMITY\nINFIX\nINFLAME\nINFLAMED\nINFLAMMABLE\nINFLAMMATION\nINFLAMMATORY\nINFLATABLE\nINFLATE\nINFLATED\nINFLATER\nINFLATES\nINFLATING\nINFLATION\nINFLATIONARY\nINFLEXIBILITY\nINFLEXIBLE\nINFLICT\nINFLICTED\nINFLICTING\nINFLICTS\nINFLOW\nINFLUENCE\nINFLUENCED\nINFLUENCES\nINFLUENCING\nINFLUENTIAL\nINFLUENTIALLY\nINFLUENZA\nINFORM\nINFORMAL\nINFORMALITY\nINFORMALLY\nINFORMANT\nINFORMANTS\nINFORMATICA\nINFORMATION\nINFORMATIONAL\nINFORMATIVE\nINFORMATIVELY\nINFORMED\nINFORMER\nINFORMERS\nINFORMING\nINFORMS\nINFRA\nINFRARED\nINFRASTRUCTURE\nINFREQUENT\nINFREQUENTLY\nINFRINGE\nINFRINGED\nINFRINGEMENT\nINFRINGEMENTS\nINFRINGES\nINFRINGING\nINFURIATE\nINFURIATED\nINFURIATES\nINFURIATING\nINFURIATION\nINFUSE\nINFUSED\nINFUSES\nINFUSING\nINFUSION\nINFUSIONS\nINGENIOUS\nINGENIOUSLY\nINGENIOUSNESS\nINGENUITY\nINGENUOUS\nINGERSOLL\nINGEST\nINGESTION\nINGLORIOUS\nINGOT\nINGRAM\nINGRATE\nINGRATIATE\nINGRATITUDE\nINGREDIENT\nINGREDIENTS\nINGROWN\nINHABIT\nINHABITABLE\nINHABITANCE\nINHABITANT\nINHABITANTS\nINHABITED\nINHABITING\nINHABITS\nINHALE\nINHALED\nINHALER\nINHALES\nINHALING\nINHERE\nINHERENT\nINHERENTLY\nINHERES\nINHERIT\nINHERITABLE\nINHERITANCE\nINHERITANCES\nINHERITED\nINHERITING\nINHERITOR\nINHERITORS\nINHERITRESS\nINHERITRESSES\nINHERITRICES\nINHERITRIX\nINHERITS\nINHIBIT\nINHIBITED\nINHIBITING\nINHIBITION\nINHIBITIONS\nINHIBITOR\nINHIBITORS\nINHIBITORY\nINHIBITS\nINHOMOGENEITIES\nINHOMOGENEITY\nINHOMOGENEOUS\nINHOSPITABLE\nINHUMAN\nINHUMANE\nINIMICAL\nINIMITABLE\nINIQUITIES\nINIQUITY\nINITIAL\nINITIALED\nINITIALING\nINITIALIZATION\nINITIALIZATIONS\nINITIALIZE\nINITIALIZED\nINITIALIZER\nINITIALIZERS\nINITIALIZES\nINITIALIZING\nINITIALLY\nINITIALS\nINITIATE\nINITIATED\nINITIATES\nINITIATING\nINITIATION\nINITIATIONS\nINITIATIVE\nINITIATIVES\nINITIATOR\nINITIATORS\nINJECT\nINJECTED\nINJECTING\nINJECTION\nINJECTIONS\nINJECTIVE\nINJECTS\nINJUDICIOUS\nINJUN\nINJUNCTION\nINJUNCTIONS\nINJUNS\nINJURE\nINJURED\nINJURES\nINJURIES\nINJURING\nINJURIOUS\nINJURY\nINJUSTICE\nINJUSTICES\nINK\nINKED\nINKER\nINKERS\nINKING\nINKINGS\nINKLING\nINKLINGS\nINKS\nINLAID\nINLAND\nINLAY\nINLET\nINLETS\nINLINE\nINMAN\nINMATE\nINMATES\nINN\nINNARDS\nINNATE\nINNATELY\nINNER\nINNERMOST\nINNING\nINNINGS\nINNOCENCE\nINNOCENT\nINNOCENTLY\nINNOCENTS\nINNOCUOUS\nINNOCUOUSLY\nINNOCUOUSNESS\nINNOVATE\nINNOVATION\nINNOVATIONS\nINNOVATIVE\nINNS\nINNUENDO\nINNUMERABILITY\nINNUMERABLE\nINNUMERABLY\nINOCULATE\nINOPERABLE\nINOPERATIVE\nINOPPORTUNE\nINORDINATE\nINORDINATELY\nINORGANIC\nINPUT\nINPUTS\nINQUEST\nINQUIRE\nINQUIRED\nINQUIRER\nINQUIRERS\nINQUIRES\nINQUIRIES\nINQUIRING\nINQUIRY\nINQUISITION\nINQUISITIONS\nINQUISITIVE\nINQUISITIVELY\nINQUISITIVENESS\nINROAD\nINROADS\nINSANE\nINSANELY\nINSANITY\nINSATIABLE\nINSCRIBE\nINSCRIBED\nINSCRIBES\nINSCRIBING\nINSCRIPTION\nINSCRIPTIONS\nINSCRUTABLE\nINSECT\nINSECTICIDE\nINSECTS\nINSECURE\nINSECURELY\nINSEMINATE\nINSENSIBLE\nINSENSITIVE\nINSENSITIVELY\nINSENSITIVITY\nINSEPARABLE\nINSERT\nINSERTED\nINSERTING\nINSERTION\nINSERTIONS\nINSERTS\nINSET\nINSIDE\nINSIDER\nINSIDERS\nINSIDES\nINSIDIOUS\nINSIDIOUSLY\nINSIDIOUSNESS\nINSIGHT\nINSIGHTFUL\nINSIGHTS\nINSIGNIA\nINSIGNIFICANCE\nINSIGNIFICANT\nINSINCERE\nINSINCERITY\nINSINUATE\nINSINUATED\nINSINUATES\nINSINUATING\nINSINUATION\nINSINUATIONS\nINSIPID\nINSIST\nINSISTED\nINSISTENCE\nINSISTENT\nINSISTENTLY\nINSISTING\nINSISTS\nINSOFAR\nINSOLENCE\nINSOLENT\nINSOLENTLY\nINSOLUBLE\nINSOLVABLE\nINSOLVENT\nINSOMNIA\nINSOMNIAC\nINSPECT\nINSPECTED\nINSPECTING\nINSPECTION\nINSPECTIONS\nINSPECTOR\nINSPECTORS\nINSPECTS\nINSPIRATION\nINSPIRATIONS\nINSPIRE\nINSPIRED\nINSPIRER\nINSPIRES\nINSPIRING\nINSTABILITIES\nINSTABILITY\nINSTALL\nINSTALLATION\nINSTALLATIONS\nINSTALLED\nINSTALLER\nINSTALLERS\nINSTALLING\nINSTALLMENT\nINSTALLMENTS\nINSTALLS\nINSTANCE\nINSTANCES\nINSTANT\nINSTANTANEOUS\nINSTANTANEOUSLY\nINSTANTER\nINSTANTIATE\nINSTANTIATED\nINSTANTIATES\nINSTANTIATING\nINSTANTIATION\nINSTANTIATIONS\nINSTANTLY\nINSTANTS\nINSTEAD\nINSTIGATE\nINSTIGATED\nINSTIGATES\nINSTIGATING\nINSTIGATOR\nINSTIGATORS\nINSTILL\nINSTINCT\nINSTINCTIVE\nINSTINCTIVELY\nINSTINCTS\nINSTINCTUAL\nINSTITUTE\nINSTITUTED\nINSTITUTER\nINSTITUTERS\nINSTITUTES\nINSTITUTING\nINSTITUTION\nINSTITUTIONAL\nINSTITUTIONALIZE\nINSTITUTIONALIZED\nINSTITUTIONALIZES\nINSTITUTIONALIZING\nINSTITUTIONALLY\nINSTITUTIONS\nINSTRUCT\nINSTRUCTED\nINSTRUCTING\nINSTRUCTION\nINSTRUCTIONAL\nINSTRUCTIONS\nINSTRUCTIVE\nINSTRUCTIVELY\nINSTRUCTOR\nINSTRUCTORS\nINSTRUCTS\nINSTRUMENT\nINSTRUMENTAL\nINSTRUMENTALIST\nINSTRUMENTALISTS\nINSTRUMENTALLY\nINSTRUMENTALS\nINSTRUMENTATION\nINSTRUMENTED\nINSTRUMENTING\nINSTRUMENTS\nINSUBORDINATE\nINSUFFERABLE\nINSUFFICIENT\nINSUFFICIENTLY\nINSULAR\nINSULATE\nINSULATED\nINSULATES\nINSULATING\nINSULATION\nINSULATOR\nINSULATORS\nINSULIN\nINSULT\nINSULTED\nINSULTING\nINSULTS\nINSUPERABLE\nINSUPPORTABLE\nINSURANCE\nINSURE\nINSURED\nINSURER\nINSURERS\nINSURES\nINSURGENT\nINSURGENTS\nINSURING\nINSURMOUNTABLE\nINSURRECTION\nINSURRECTIONS\nINTACT\nINTANGIBLE\nINTANGIBLES\nINTEGER\nINTEGERS\nINTEGRABLE\nINTEGRAL\nINTEGRALS\nINTEGRAND\nINTEGRATE\nINTEGRATED\nINTEGRATES\nINTEGRATING\nINTEGRATION\nINTEGRATIONS\nINTEGRATIVE\nINTEGRITY\nINTEL\nINTELLECT\nINTELLECTS\nINTELLECTUAL\nINTELLECTUALLY\nINTELLECTUALS\nINTELLIGENCE\nINTELLIGENT\nINTELLIGENTLY\nINTELLIGENTSIA\nINTELLIGIBILITY\nINTELLIGIBLE\nINTELLIGIBLY\nINTELSAT\nINTEMPERATE\nINTEND\nINTENDED\nINTENDING\nINTENDS\nINTENSE\nINTENSELY\nINTENSIFICATION\nINTENSIFIED\nINTENSIFIER\nINTENSIFIERS\nINTENSIFIES\nINTENSIFY\nINTENSIFYING\nINTENSITIES\nINTENSITY\nINTENSIVE\nINTENSIVELY\nINTENT\nINTENTION\nINTENTIONAL\nINTENTIONALLY\nINTENTIONED\nINTENTIONS\nINTENTLY\nINTENTNESS\nINTENTS\nINTER\nINTERACT\nINTERACTED\nINTERACTING\nINTERACTION\nINTERACTIONS\nINTERACTIVE\nINTERACTIVELY\nINTERACTIVITY\nINTERACTS\nINTERCEPT\nINTERCEPTED\nINTERCEPTING\nINTERCEPTION\nINTERCEPTOR\nINTERCEPTS\nINTERCHANGE\nINTERCHANGEABILITY\nINTERCHANGEABLE\nINTERCHANGEABLY\nINTERCHANGED\nINTERCHANGER\nINTERCHANGES\nINTERCHANGING\nINTERCHANGINGS\nINTERCHANNEL\nINTERCITY\nINTERCOM\nINTERCOMMUNICATE\nINTERCOMMUNICATED\nINTERCOMMUNICATES\nINTERCOMMUNICATING\nINTERCOMMUNICATION\nINTERCONNECT\nINTERCONNECTED\nINTERCONNECTING\nINTERCONNECTION\nINTERCONNECTIONS\nINTERCONNECTS\nINTERCONTINENTAL\nINTERCOURSE\nINTERDATA\nINTERDEPENDENCE\nINTERDEPENDENCIES\nINTERDEPENDENCY\nINTERDEPENDENT\nINTERDICT\nINTERDICTION\nINTERDISCIPLINARY\nINTEREST\nINTERESTED\nINTERESTING\nINTERESTINGLY\nINTERESTS\nINTERFACE\nINTERFACED\nINTERFACER\nINTERFACES\nINTERFACING\nINTERFERE\nINTERFERED\nINTERFERENCE\nINTERFERENCES\nINTERFERES\nINTERFERING\nINTERFERINGLY\nINTERFEROMETER\nINTERFEROMETRIC\nINTERFEROMETRY\nINTERFRAME\nINTERGROUP\nINTERIM\nINTERIOR\nINTERIORS\nINTERJECT\nINTERLACE\nINTERLACED\nINTERLACES\nINTERLACING\nINTERLEAVE\nINTERLEAVED\nINTERLEAVES\nINTERLEAVING\nINTERLINK\nINTERLINKED\nINTERLINKS\nINTERLISP\nINTERMEDIARY\nINTERMEDIATE\nINTERMEDIATES\nINTERMINABLE\nINTERMINGLE\nINTERMINGLED\nINTERMINGLES\nINTERMINGLING\nINTERMISSION\nINTERMITTENT\nINTERMITTENTLY\nINTERMIX\nINTERMIXED\nINTERMODULE\nINTERN\nINTERNAL\nINTERNALIZE\nINTERNALIZED\nINTERNALIZES\nINTERNALIZING\nINTERNALLY\nINTERNALS\nINTERNATIONAL\nINTERNATIONALITY\nINTERNATIONALLY\nINTERNED\nINTERNET\nINTERNET\nINTERNETWORK\nINTERNING\nINTERNS\nINTERNSHIP\nINTEROFFICE\nINTERPERSONAL\nINTERPLAY\nINTERPOL\nINTERPOLATE\nINTERPOLATED\nINTERPOLATES\nINTERPOLATING\nINTERPOLATION\nINTERPOLATIONS\nINTERPOSE\nINTERPOSED\nINTERPOSES\nINTERPOSING\nINTERPRET\nINTERPRETABLE\nINTERPRETATION\nINTERPRETATIONS\nINTERPRETED\nINTERPRETER\nINTERPRETERS\nINTERPRETING\nINTERPRETIVE\nINTERPRETIVELY\nINTERPRETS\nINTERPROCESS\nINTERRELATE\nINTERRELATED\nINTERRELATES\nINTERRELATING\nINTERRELATION\nINTERRELATIONS\nINTERRELATIONSHIP\nINTERRELATIONSHIPS\nINTERROGATE\nINTERROGATED\nINTERROGATES\nINTERROGATING\nINTERROGATION\nINTERROGATIONS\nINTERROGATIVE\nINTERRUPT\nINTERRUPTED\nINTERRUPTIBLE\nINTERRUPTING\nINTERRUPTION\nINTERRUPTIONS\nINTERRUPTIVE\nINTERRUPTS\nINTERSECT\nINTERSECTED\nINTERSECTING\nINTERSECTION\nINTERSECTIONS\nINTERSECTS\nINTERSPERSE\nINTERSPERSED\nINTERSPERSES\nINTERSPERSING\nINTERSPERSION\nINTERSTAGE\nINTERSTATE\nINTERTWINE\nINTERTWINED\nINTERTWINES\nINTERTWINING\nINTERVAL\nINTERVALS\nINTERVENE\nINTERVENED\nINTERVENES\nINTERVENING\nINTERVENTION\nINTERVENTIONS\nINTERVIEW\nINTERVIEWED\nINTERVIEWEE\nINTERVIEWER\nINTERVIEWERS\nINTERVIEWING\nINTERVIEWS\nINTERWOVEN\nINTESTATE\nINTESTINAL\nINTESTINE\nINTESTINES\nINTIMACY\nINTIMATE\nINTIMATED\nINTIMATELY\nINTIMATING\nINTIMATION\nINTIMATIONS\nINTIMIDATE\nINTIMIDATED\nINTIMIDATES\nINTIMIDATING\nINTIMIDATION\nINTO\nINTOLERABLE\nINTOLERABLY\nINTOLERANCE\nINTOLERANT\nINTONATION\nINTONATIONS\nINTONE\nINTOXICANT\nINTOXICATE\nINTOXICATED\nINTOXICATING\nINTOXICATION\nINTRACTABILITY\nINTRACTABLE\nINTRACTABLY\nINTRAGROUP\nINTRALINE\nINTRAMURAL\nINTRAMUSCULAR\nINTRANSIGENT\nINTRANSITIVE\nINTRANSITIVELY\nINTRAOFFICE\nINTRAPROCESS\nINTRASTATE\nINTRAVENOUS\nINTREPID\nINTRICACIES\nINTRICACY\nINTRICATE\nINTRICATELY\nINTRIGUE\nINTRIGUED\nINTRIGUES\nINTRIGUING\nINTRINSIC\nINTRINSICALLY\nINTRODUCE\nINTRODUCED\nINTRODUCES\nINTRODUCING\nINTRODUCTION\nINTRODUCTIONS\nINTRODUCTORY\nINTROSPECT\nINTROSPECTION\nINTROSPECTIONS\nINTROSPECTIVE\nINTROVERT\nINTROVERTED\nINTRUDE\nINTRUDED\nINTRUDER\nINTRUDERS\nINTRUDES\nINTRUDING\nINTRUSION\nINTRUSIONS\nINTRUST\nINTUBATE\nINTUBATED\nINTUBATES\nINTUBATION\nINTUITION\nINTUITIONIST\nINTUITIONS\nINTUITIVE\nINTUITIVELY\nINUNDATE\nINVADE\nINVADED\nINVADER\nINVADERS\nINVADES\nINVADING\nINVALID\nINVALIDATE\nINVALIDATED\nINVALIDATES\nINVALIDATING\nINVALIDATION\nINVALIDATIONS\nINVALIDITIES\nINVALIDITY\nINVALIDLY\nINVALIDS\nINVALUABLE\nINVARIABLE\nINVARIABLY\nINVARIANCE\nINVARIANT\nINVARIANTLY\nINVARIANTS\nINVASION\nINVASIONS\nINVECTIVE\nINVENT\nINVENTED\nINVENTING\nINVENTION\nINVENTIONS\nINVENTIVE\nINVENTIVELY\nINVENTIVENESS\nINVENTOR\nINVENTORIES\nINVENTORS\nINVENTORY\nINVENTS\nINVERNESS\nINVERSE\nINVERSELY\nINVERSES\nINVERSION\nINVERSIONS\nINVERT\nINVERTEBRATE\nINVERTEBRATES\nINVERTED\nINVERTER\nINVERTERS\nINVERTIBLE\nINVERTING\nINVERTS\nINVEST\nINVESTED\nINVESTIGATE\nINVESTIGATED\nINVESTIGATES\nINVESTIGATING\nINVESTIGATION\nINVESTIGATIONS\nINVESTIGATIVE\nINVESTIGATOR\nINVESTIGATORS\nINVESTIGATORY\nINVESTING\nINVESTMENT\nINVESTMENTS\nINVESTOR\nINVESTORS\nINVESTS\nINVETERATE\nINVIGORATE\nINVINCIBLE\nINVISIBILITY\nINVISIBLE\nINVISIBLY\nINVITATION\nINVITATIONS\nINVITE\nINVITED\nINVITES\nINVITING\nINVOCABLE\nINVOCATION\nINVOCATIONS\nINVOICE\nINVOICED\nINVOICES\nINVOICING\nINVOKE\nINVOKED\nINVOKER\nINVOKES\nINVOKING\nINVOLUNTARILY\nINVOLUNTARY\nINVOLVE\nINVOLVED\nINVOLVEMENT\nINVOLVEMENTS\nINVOLVES\nINVOLVING\nINWARD\nINWARDLY\nINWARDNESS\nINWARDS\nIODINE\nION\nIONIAN\nIONIANS\nIONICIZATION\nIONICIZATIONS\nIONICIZE\nIONICIZES\nIONOSPHERE\nIONOSPHERIC\nIONS\nIOTA\nIOWA\nIRA\nIRAN\nIRANIAN\nIRANIANS\nIRANIZE\nIRANIZES\nIRAQ\nIRAQI\nIRAQIS\nIRATE\nIRATELY\nIRATENESS\nIRE\nIRELAND\nIRENE\nIRES\nIRIS\nIRISH\nIRISHIZE\nIRISHIZES\nIRISHMAN\nIRISHMEN\nIRK\nIRKED\nIRKING\nIRKS\nIRKSOME\nIRMA\nIRON\nIRONED\nIRONIC\nIRONICAL\nIRONICALLY\nIRONIES\nIRONING\nIRONINGS\nIRONS\nIRONY\nIROQUOIS\nIRRADIATE\nIRRATIONAL\nIRRATIONALLY\nIRRATIONALS\nIRRAWADDY\nIRRECONCILABLE\nIRRECOVERABLE\nIRREDUCIBLE\nIRREDUCIBLY\nIRREFLEXIVE\nIRREFUTABLE\nIRREGULAR\nIRREGULARITIES\nIRREGULARITY\nIRREGULARLY\nIRREGULARS\nIRRELEVANCE\nIRRELEVANCES\nIRRELEVANT\nIRRELEVANTLY\nIRREPLACEABLE\nIRREPRESSIBLE\nIRREPRODUCIBILITY\nIRREPRODUCIBLE\nIRRESISTIBLE\nIRRESPECTIVE\nIRRESPECTIVELY\nIRRESPONSIBLE\nIRRESPONSIBLY\nIRRETRIEVABLY\nIRREVERENT\nIRREVERSIBILITY\nIRREVERSIBLE\nIRREVERSIBLY\nIRREVOCABLE\nIRREVOCABLY\nIRRIGATE\nIRRIGATED\nIRRIGATES\nIRRIGATING\nIRRIGATION\nIRRITABLE\nIRRITANT\nIRRITATE\nIRRITATED\nIRRITATES\nIRRITATING\nIRRITATION\nIRRITATIONS\nIRVIN\nIRVINE\nIRVING\nIRWIN\nISAAC\nISAACS\nISAACSON\nISABEL\nISABELLA\nISADORE\nISAIAH\nISFAHAN\nISING\nISIS\nISLAM\nISLAMABAD\nISLAMIC\nISLAMIZATION\nISLAMIZATIONS\nISLAMIZE\nISLAMIZES\nISLAND\nISLANDER\nISLANDERS\nISLANDIA\nISLANDS\nISLE\nISLES\nISLET\nISLETS\nISOLATE\nISOLATED\nISOLATES\nISOLATING\nISOLATION\nISOLATIONS\nISOLDE\nISOMETRIC\nISOMORPHIC\nISOMORPHICALLY\nISOMORPHISM\nISOMORPHISMS\nISOTOPE\nISOTOPES\nISRAEL\nISRAELI\nISRAELIS\nISRAELITE\nISRAELITES\nISRAELITIZE\nISRAELITIZES\nISSUANCE\nISSUE\nISSUED\nISSUER\nISSUERS\nISSUES\nISSUING\nISTANBUL\nISTHMUS\nISTVAN\nITALIAN\nITALIANIZATION\nITALIANIZATIONS\nITALIANIZE\nITALIANIZER\nITALIANIZERS\nITALIANIZES\nITALIANS\nITALIC\nITALICIZE\nITALICIZED\nITALICS\nITALY\nITCH\nITCHES\nITCHING\nITEL\nITEM\nITEMIZATION\nITEMIZATIONS\nITEMIZE\nITEMIZED\nITEMIZES\nITEMIZING\nITEMS\nITERATE\nITERATED\nITERATES\nITERATING\nITERATION\nITERATIONS\nITERATIVE\nITERATIVELY\nITERATOR\nITERATORS\nITHACA\nITHACAN\nITINERARIES\nITINERARY\nITO\nITS\nITSELF\nIVAN\nIVANHOE\nIVERSON\nIVIES\nIVORY\nIVY\nIZAAK\nIZVESTIA\nJAB\nJABBED\nJABBING\nJABLONSKY\nJABS\nJACK\nJACKASS\nJACKET\nJACKETED\nJACKETS\nJACKIE\nJACKING\nJACKKNIFE\nJACKMAN\nJACKPOT\nJACKSON\nJACKSONIAN\nJACKSONS\nJACKSONVILLE\nJACKY\nJACOB\nJACOBEAN\nJACOBI\nJACOBIAN\nJACOBINIZE\nJACOBITE\nJACOBS\nJACOBSEN\nJACOBSON\nJACOBUS\nJACOBY\nJACQUELINE\nJACQUES\nJADE\nJADED\nJAEGER\nJAGUAR\nJAIL\nJAILED\nJAILER\nJAILERS\nJAILING\nJAILS\nJAIME\nJAKARTA\nJAKE\nJAKES\nJAM\nJAMAICA\nJAMAICAN\nJAMES\nJAMESON\nJAMESTOWN\nJAMMED\nJAMMING\nJAMS\nJANE\nJANEIRO\nJANESVILLE\nJANET\nJANICE\nJANIS\nJANITOR\nJANITORS\nJANOS\nJANSEN\nJANSENIST\nJANUARIES\nJANUARY\nJANUS\nJAPAN\nJAPANESE\nJAPANIZATION\nJAPANIZATIONS\nJAPANIZE\nJAPANIZED\nJAPANIZES\nJAPANIZING\nJAR\nJARGON\nJARRED\nJARRING\nJARRINGLY\nJARS\nJARVIN\nJASON\nJASTROW\nJAUNDICE\nJAUNT\nJAUNTINESS\nJAUNTS\nJAUNTY\nJAVA\nJAVANESE\nJAVELIN\nJAVELINS\nJAW\nJAWBONE\nJAWS\nJAY\nJAYCEE\nJAYCEES\nJAZZ\nJAZZY\nJEALOUS\nJEALOUSIES\nJEALOUSLY\nJEALOUSY\nJEAN\nJEANNE\nJEANNIE\nJEANS\nJED\nJEEP\nJEEPS\nJEER\nJEERS\nJEFF\nJEFFERSON\nJEFFERSONIAN\nJEFFERSONIANS\nJEFFREY\nJEHOVAH\nJELLIES\nJELLO\nJELLY\nJELLYFISH\nJENKINS\nJENNIE\nJENNIFER\nJENNINGS\nJENNY\nJENSEN\nJEOPARDIZE\nJEOPARDIZED\nJEOPARDIZES\nJEOPARDIZING\nJEOPARDY\nJEREMIAH\nJEREMY\nJERES\nJERICHO\nJERK\nJERKED\nJERKINESS\nJERKING\nJERKINGS\nJERKS\nJERKY\nJEROBOAM\nJEROME\nJERRY\nJERSEY\nJERSEYS\nJERUSALEM\nJESSE\nJESSICA\nJESSIE\nJESSY\nJEST\nJESTED\nJESTER\nJESTING\nJESTS\nJESUIT\nJESUITISM\nJESUITIZE\nJESUITIZED\nJESUITIZES\nJESUITIZING\nJESUITS\nJESUS\nJET\nJETLINER\nJETS\nJETTED\nJETTING\nJEW\nJEWEL\nJEWELED\nJEWELER\nJEWELL\nJEWELLED\nJEWELRIES\nJEWELRY\nJEWELS\nJEWETT\nJEWISH\nJEWISHNESS\nJEWS\nJIFFY\nJIG\nJIGS\nJIGSAW\nJILL\nJIM\nJIMENEZ\nJIMMIE\nJINGLE\nJINGLED\nJINGLING\nJINNY\nJITTER\nJITTERBUG\nJITTERY\nJOAN\nJOANNA\nJOANNE\nJOAQUIN\nJOB\nJOBREL\nJOBS\nJOCKEY\nJOCKSTRAP\nJOCUND\nJODY\nJOE\nJOEL\nJOES\nJOG\nJOGGING\nJOGS\nJOHANN\nJOHANNA\nJOHANNES\nJOHANNESBURG\nJOHANSEN\nJOHANSON\nJOHN\nJOHNNIE\nJOHNNY\nJOHNS\nJOHNSEN\nJOHNSON\nJOHNSTON\nJOHNSTOWN\nJOIN\nJOINED\nJOINER\nJOINERS\nJOINING\nJOINS\nJOINT\nJOINTLY\nJOINTS\nJOKE\nJOKED\nJOKER\nJOKERS\nJOKES\nJOKING\nJOKINGLY\nJOLIET\nJOLLA\nJOLLY\nJOLT\nJOLTED\nJOLTING\nJOLTS\nJON\nJONAS\nJONATHAN\nJONATHANIZATION\nJONATHANIZATIONS\nJONES\nJONESES\nJONQUIL\nJOPLIN\nJORDAN\nJORDANIAN\nJORGE\nJORGENSEN\nJORGENSON\nJOSE\nJOSEF\nJOSEPH\nJOSEPHINE\nJOSEPHSON\nJOSEPHUS\nJOSHUA\nJOSIAH\nJOSTLE\nJOSTLED\nJOSTLES\nJOSTLING\nJOT\nJOTS\nJOTTED\nJOTTING\nJOULE\nJOURNAL\nJOURNALISM\nJOURNALIST\nJOURNALISTS\nJOURNALIZE\nJOURNALIZED\nJOURNALIZES\nJOURNALIZING\nJOURNALS\nJOURNEY\nJOURNEYED\nJOURNEYING\nJOURNEYINGS\nJOURNEYMAN\nJOURNEYMEN\nJOURNEYS\nJOUST\nJOUSTED\nJOUSTING\nJOUSTS\nJOVANOVICH\nJOVE\nJOVIAL\nJOVIAN\nJOY\nJOYCE\nJOYFUL\nJOYFULLY\nJOYOUS\nJOYOUSLY\nJOYOUSNESS\nJOYRIDE\nJOYS\nJOYSTICK\nJUAN\nJUANITA\nJUBAL\nJUBILEE\nJUDAICA\nJUDAISM\nJUDAS\nJUDD\nJUDDER\nJUDDERED\nJUDDERING\nJUDDERS\nJUDE\nJUDEA\nJUDGE\nJUDGED\nJUDGES\nJUDGING\nJUDGMENT\nJUDGMENTS\nJUDICIAL\nJUDICIARY\nJUDICIOUS\nJUDICIOUSLY\nJUDITH\nJUDO\nJUDSON\nJUDY\nJUG\nJUGGLE\nJUGGLER\nJUGGLERS\nJUGGLES\nJUGGLING\nJUGOSLAVIA\nJUGS\nJUICE\nJUICES\nJUICIEST\nJUICY\nJUKES\nJULES\nJULIA\nJULIAN\nJULIE\nJULIES\nJULIET\nJULIO\nJULIUS\nJULY\nJUMBLE\nJUMBLED\nJUMBLES\nJUMBO\nJUMP\nJUMPED\nJUMPER\nJUMPERS\nJUMPING\nJUMPS\nJUMPY\nJUNCTION\nJUNCTIONS\nJUNCTURE\nJUNCTURES\nJUNE\nJUNEAU\nJUNES\nJUNG\nJUNGIAN\nJUNGLE\nJUNGLES\nJUNIOR\nJUNIORS\nJUNIPER\nJUNK\nJUNKER\nJUNKERS\nJUNKS\nJUNKY\nJUNO\nJUNTA\nJUPITER\nJURA\nJURAS\nJURASSIC\nJURE\nJURIES\nJURISDICTION\nJURISDICTIONS\nJURISPRUDENCE\nJURIST\nJUROR\nJURORS\nJURY\nJUST\nJUSTICE\nJUSTICES\nJUSTIFIABLE\nJUSTIFIABLY\nJUSTIFICATION\nJUSTIFICATIONS\nJUSTIFIED\nJUSTIFIER\nJUSTIFIERS\nJUSTIFIES\nJUSTIFY\nJUSTIFYING\nJUSTINE\nJUSTINIAN\nJUSTLY\nJUSTNESS\nJUT\nJUTISH\nJUTLAND\nJUTTING\nJUVENILE\nJUVENILES\nJUXTAPOSE\nJUXTAPOSED\nJUXTAPOSES\nJUXTAPOSING\nKABUKI\nKABUL\nKADDISH\nKAFKA\nKAFKAESQUE\nKAHN\nKAJAR\nKALAMAZOO\nKALI\nKALMUK\nKAMCHATKA\nKAMIKAZE\nKAMIKAZES\nKAMPALA\nKAMPUCHEA\nKANARESE\nKANE\nKANGAROO\nKANJI\nKANKAKEE\nKANNADA\nKANSAS\nKANT\nKANTIAN\nKAPLAN\nKAPPA\nKARACHI\nKARAMAZOV\nKARATE\nKAREN\nKARL\nKAROL\nKARP\nKASHMIR\nKASKASKIA\nKATE\nKATHARINE\nKATHERINE\nKATHLEEN\nKATHY\nKATIE\nKATMANDU\nKATOWICE\nKATZ\nKAUFFMAN\nKAUFMAN\nKAY\nKEATON\nKEATS\nKEEGAN\nKEEL\nKEELED\nKEELING\nKEELS\nKEEN\nKEENAN\nKEENER\nKEENEST\nKEENLY\nKEENNESS\nKEEP\nKEEPER\nKEEPERS\nKEEPING\nKEEPS\nKEITH\nKELLER\nKELLEY\nKELLOGG\nKELLY\nKELSEY\nKELVIN\nKEMP\nKEN\nKENDALL\nKENILWORTH\nKENNAN\nKENNECOTT\nKENNEDY\nKENNEL\nKENNELS\nKENNETH\nKENNEY\nKENNING\nKENNY\nKENOSHA\nKENSINGTON\nKENT\nKENTON\nKENTUCKY\nKENYA\nKENYON\nKEPLER\nKEPT\nKERCHIEF\nKERCHIEFS\nKERMIT\nKERN\nKERNEL\nKERNELS\nKERNIGHAN\nKEROSENE\nKEROUAC\nKERR\nKESSLER\nKETCHUP\nKETTERING\nKETTLE\nKETTLES\nKEVIN\nKEWASKUM\nKEWAUNEE\nKEY\nKEYBOARD\nKEYBOARDS\nKEYED\nKEYES\nKEYHOLE\nKEYING\nKEYNES\nKEYNESIAN\nKEYNOTE\nKEYPAD\nKEYPADS\nKEYS\nKEYSTROKE\nKEYSTROKES\nKEYWORD\nKEYWORDS\nKHARTOUM\nKHMER\nKHRUSHCHEV\nKHRUSHCHEVS\nKICK\nKICKAPOO\nKICKED\nKICKER\nKICKERS\nKICKING\nKICKOFF\nKICKS\nKID\nKIDDE\nKIDDED\nKIDDIE\nKIDDING\nKIDNAP\nKIDNAPPER\nKIDNAPPERS\nKIDNAPPING\nKIDNAPPINGS\nKIDNAPS\nKIDNEY\nKIDNEYS\nKIDS\nKIEFFER\nKIEL\nKIEV\nKIEWIT\nKIGALI\nKIKUYU\nKILGORE\nKILIMANJARO\nKILL\nKILLEBREW\nKILLED\nKILLER\nKILLERS\nKILLING\nKILLINGLY\nKILLINGS\nKILLJOY\nKILLS\nKILOBIT\nKILOBITS\nKILOBLOCK\nKILOBYTE\nKILOBYTES\nKILOGRAM\nKILOGRAMS\nKILOHERTZ\nKILOHM\nKILOJOULE\nKILOMETER\nKILOMETERS\nKILOTON\nKILOVOLT\nKILOWATT\nKILOWORD\nKIM\nKIMBALL\nKIMBERLY\nKIMONO\nKIN\nKIND\nKINDER\nKINDERGARTEN\nKINDEST\nKINDHEARTED\nKINDLE\nKINDLED\nKINDLES\nKINDLING\nKINDLY\nKINDNESS\nKINDRED\nKINDS\nKINETIC\nKING\nKINGDOM\nKINGDOMS\nKINGLY\nKINGPIN\nKINGS\nKINGSBURY\nKINGSLEY\nKINGSTON\nKINGSTOWN\nKINGWOOD\nKINK\nKINKY\nKINNEY\nKINNICKINNIC\nKINSEY\nKINSHASHA\nKINSHIP\nKINSMAN\nKIOSK\nKIOWA\nKIPLING\nKIRBY\nKIRCHNER\nKIRCHOFF\nKIRK\nKIRKLAND\nKIRKPATRICK\nKIRKWOOD\nKIROV\nKISS\nKISSED\nKISSER\nKISSERS\nKISSES\nKISSING\nKIT\nKITAKYUSHU\nKITCHEN\nKITCHENETTE\nKITCHENS\nKITE\nKITED\nKITES\nKITING\nKITS\nKITTEN\nKITTENISH\nKITTENS\nKITTY\nKIWANIS\nKLAN\nKLAUS\nKLAXON\nKLEIN\nKLEINROCK\nKLINE\nKLUDGE\nKLUDGES\nKLUX\nKLYSTRON\nKNACK\nKNAPP\nKNAPSACK\nKNAPSACKS\nKNAUER\nKNAVE\nKNAVES\nKNEAD\nKNEADS\nKNEE\nKNEECAP\nKNEED\nKNEEING\nKNEEL\nKNEELED\nKNEELING\nKNEELS\nKNEES\nKNELL\nKNELLS\nKNELT\nKNEW\nKNICKERBOCKER\nKNICKERBOCKERS\nKNIFE\nKNIFED\nKNIFES\nKNIFING\nKNIGHT\nKNIGHTED\nKNIGHTHOOD\nKNIGHTING\nKNIGHTLY\nKNIGHTS\nKNIGHTSBRIDGE\nKNIT\nKNITS\nKNIVES\nKNOB\nKNOBELOCH\nKNOBS\nKNOCK\nKNOCKDOWN\nKNOCKED\nKNOCKER\nKNOCKERS\nKNOCKING\nKNOCKOUT\nKNOCKS\nKNOLL\nKNOLLS\nKNOSSOS\nKNOT\nKNOTS\nKNOTT\nKNOTTED\nKNOTTING\nKNOW\nKNOWABLE\nKNOWER\nKNOWHOW\nKNOWING\nKNOWINGLY\nKNOWLEDGE\nKNOWLEDGEABLE\nKNOWLES\nKNOWLTON\nKNOWN\nKNOWS\nKNOX\nKNOXVILLE\nKNUCKLE\nKNUCKLED\nKNUCKLES\nKNUDSEN\nKNUDSON\nKNUTH\nKNUTSEN\nKNUTSON\nKOALA\nKOBAYASHI\nKOCH\nKOCHAB\nKODACHROME\nKODAK\nKODIAK\nKOENIG\nKOENIGSBERG\nKOHLER\nKONG\nKONRAD\nKOPPERS\nKORAN\nKOREA\nKOREAN\nKOREANS\nKOSHER\nKOVACS\nKOWALEWSKI\nKOWALSKI\nKOWLOON\nKOWTOW\nKRAEMER\nKRAKATOA\nKRAKOW\nKRAMER\nKRAUSE\nKREBS\nKREMLIN\nKRESGE\nKRIEGER\nKRISHNA\nKRISTIN\nKRONECKER\nKRUEGER\nKRUGER\nKRUSE\nKUALA\nKUDO\nKUENNING\nKUHN\nKUMAR\nKURD\nKURDISH\nKURT\nKUWAIT\nKUWAITI\nKYOTO\nLAB\nLABAN\nLABEL\nLABELED\nLABELING\nLABELLED\nLABELLER\nLABELLERS\nLABELLING\nLABELS\nLABOR\nLABORATORIES\nLABORATORY\nLABORED\nLABORER\nLABORERS\nLABORING\nLABORINGS\nLABORIOUS\nLABORIOUSLY\nLABORS\nLABRADOR\nLABS\nLABYRINTH\nLABYRINTHS\nLAC\nLACE\nLACED\nLACERATE\nLACERATED\nLACERATES\nLACERATING\nLACERATION\nLACERATIONS\nLACERTA\nLACES\nLACEY\nLACHESIS\nLACING\nLACK\nLACKAWANNA\nLACKED\nLACKEY\nLACKING\nLACKS\nLACQUER\nLACQUERED\nLACQUERS\nLACROSSE\nLACY\nLAD\nLADDER\nLADEN\nLADIES\nLADING\nLADLE\nLADS\nLADY\nLADYLIKE\nLAFAYETTE\nLAG\nLAGER\nLAGERS\nLAGOON\nLAGOONS\nLAGOS\nLAGRANGE\nLAGRANGIAN\nLAGS\nLAGUERRE\nLAGUNA\nLAHORE\nLAID\nLAIDLAW\nLAIN\nLAIR\nLAIRS\nLAISSEZ\nLAKE\nLAKEHURST\nLAKES\nLAKEWOOD\nLAMAR\nLAMARCK\nLAMB\nLAMBDA\nLAMBDAS\nLAMBERT\nLAMBS\nLAME\nLAMED\nLAMELY\nLAMENESS\nLAMENT\nLAMENTABLE\nLAMENTATION\nLAMENTATIONS\nLAMENTED\nLAMENTING\nLAMENTS\nLAMES\nLAMINAR\nLAMING\nLAMP\nLAMPLIGHT\nLAMPOON\nLAMPORT\nLAMPREY\nLAMPS\nLANA\nLANCASHIRE\nLANCASTER\nLANCE\nLANCED\nLANCELOT\nLANCER\nLANCES\nLAND\nLANDED\nLANDER\nLANDERS\nLANDFILL\nLANDING\nLANDINGS\nLANDIS\nLANDLADIES\nLANDLADY\nLANDLORD\nLANDLORDS\nLANDMARK\nLANDMARKS\nLANDOWNER\nLANDOWNERS\nLANDS\nLANDSCAPE\nLANDSCAPED\nLANDSCAPES\nLANDSCAPING\nLANDSLIDE\nLANDWEHR\nLANE\nLANES\nLANG\nLANGE\nLANGELAND\nLANGFORD\nLANGLEY\nLANGMUIR\nLANGUAGE\nLANGUAGES\nLANGUID\nLANGUIDLY\nLANGUIDNESS\nLANGUISH\nLANGUISHED\nLANGUISHES\nLANGUISHING\nLANKA\nLANSING\nLANTERN\nLANTERNS\nLAO\nLAOCOON\nLAOS\nLAOTIAN\nLAOTIANS\nLAP\nLAPEL\nLAPELS\nLAPLACE\nLAPLACIAN\nLAPPING\nLAPS\nLAPSE\nLAPSED\nLAPSES\nLAPSING\nLARAMIE\nLARD\nLARDER\nLAREDO\nLARES\nLARGE\nLARGELY\nLARGENESS\nLARGER\nLARGEST\nLARK\nLARKIN\nLARKS\nLARRY\nLARS\nLARSEN\nLARSON\nLARVA\nLARVAE\nLARYNX\nLASCIVIOUS\nLASER\nLASERS\nLASH\nLASHED\nLASHES\nLASHING\nLASHINGS\nLASS\nLASSES\nLASSO\nLAST\nLASTED\nLASTING\nLASTLY\nLASTS\nLASZLO\nLATCH\nLATCHED\nLATCHES\nLATCHING\nLATE\nLATELY\nLATENCY\nLATENESS\nLATENT\nLATER\nLATERAL\nLATERALLY\nLATERAN\nLATEST\nLATEX\nLATHE\nLATHROP\nLATIN\nLATINATE\nLATINITY\nLATINIZATION\nLATINIZATIONS\nLATINIZE\nLATINIZED\nLATINIZER\nLATINIZERS\nLATINIZES\nLATINIZING\nLATITUDE\nLATITUDES\nLATRINE\nLATRINES\nLATROBE\nLATTER\nLATTERLY\nLATTICE\nLATTICES\nLATTIMER\nLATVIA\nLAUDABLE\nLAUDERDALE\nLAUE\nLAUGH\nLAUGHABLE\nLAUGHABLY\nLAUGHED\nLAUGHING\nLAUGHINGLY\nLAUGHINGSTOCK\nLAUGHLIN\nLAUGHS\nLAUGHTER\nLAUNCH\nLAUNCHED\nLAUNCHER\nLAUNCHES\nLAUNCHING\nLAUNCHINGS\nLAUNDER\nLAUNDERED\nLAUNDERER\nLAUNDERING\nLAUNDERINGS\nLAUNDERS\nLAUNDROMAT\nLAUNDROMATS\nLAUNDRY\nLAUREATE\nLAUREL\nLAURELS\nLAUREN\nLAURENCE\nLAURENT\nLAURENTIAN\nLAURIE\nLAUSANNE\nLAVA\nLAVATORIES\nLAVATORY\nLAVENDER\nLAVISH\nLAVISHED\nLAVISHING\nLAVISHLY\nLAVOISIER\nLAW\nLAWBREAKER\nLAWFORD\nLAWFUL\nLAWFULLY\nLAWGIVER\nLAWLESS\nLAWLESSNESS\nLAWN\nLAWNS\nLAWRENCE\nLAWRENCEVILLE\nLAWS\nLAWSON\nLAWSUIT\nLAWSUITS\nLAWYER\nLAWYERS\nLAX\nLAXATIVE\nLAY\nLAYER\nLAYERED\nLAYERING\nLAYERS\nLAYING\nLAYMAN\nLAYMEN\nLAYOFF\nLAYOFFS\nLAYOUT\nLAYOUTS\nLAYS\nLAYTON\nLAZARUS\nLAZED\nLAZIER\nLAZIEST\nLAZILY\nLAZINESS\nLAZING\nLAZY\nLAZYBONES\nLEAD\nLEADED\nLEADEN\nLEADER\nLEADERS\nLEADERSHIP\nLEADERSHIPS\nLEADING\nLEADINGS\nLEADS\nLEAF\nLEAFED\nLEAFIEST\nLEAFING\nLEAFLESS\nLEAFLET\nLEAFLETS\nLEAFY\nLEAGUE\nLEAGUED\nLEAGUER\nLEAGUERS\nLEAGUES\nLEAK\nLEAKAGE\nLEAKAGES\nLEAKED\nLEAKING\nLEAKS\nLEAKY\nLEAN\nLEANDER\nLEANED\nLEANER\nLEANEST\nLEANING\nLEANNESS\nLEANS\nLEAP\nLEAPED\nLEAPFROG\nLEAPING\nLEAPS\nLEAPT\nLEAR\nLEARN\nLEARNED\nLEARNER\nLEARNERS\nLEARNING\nLEARNS\nLEARY\nLEASE\nLEASED\nLEASES\nLEASH\nLEASHES\nLEASING\nLEAST\nLEATHER\nLEATHERED\nLEATHERN\nLEATHERNECK\nLEATHERS\nLEAVE\nLEAVED\nLEAVEN\nLEAVENED\nLEAVENING\nLEAVENWORTH\nLEAVES\nLEAVING\nLEAVINGS\nLEBANESE\nLEBANON\nLEBESGUE\nLECHERY\nLECTURE\nLECTURED\nLECTURER\nLECTURERS\nLECTURES\nLECTURING\nLED\nLEDGE\nLEDGER\nLEDGERS\nLEDGES\nLEE\nLEECH\nLEECHES\nLEEDS\nLEEK\nLEER\nLEERY\nLEES\nLEEUWENHOEK\nLEEWARD\nLEEWAY\nLEFT\nLEFTIST\nLEFTISTS\nLEFTMOST\nLEFTOVER\nLEFTOVERS\nLEFTWARD\nLEG\nLEGACIES\nLEGACY\nLEGAL\nLEGALITY\nLEGALIZATION\nLEGALIZE\nLEGALIZED\nLEGALIZES\nLEGALIZING\nLEGALLY\nLEGEND\nLEGENDARY\nLEGENDRE\nLEGENDS\nLEGER\nLEGERS\nLEGGED\nLEGGINGS\nLEGIBILITY\nLEGIBLE\nLEGIBLY\nLEGION\nLEGIONS\nLEGISLATE\nLEGISLATED\nLEGISLATES\nLEGISLATING\nLEGISLATION\nLEGISLATIVE\nLEGISLATOR\nLEGISLATORS\nLEGISLATURE\nLEGISLATURES\nLEGITIMACY\nLEGITIMATE\nLEGITIMATELY\nLEGS\nLEGUME\nLEHIGH\nLEHMAN\nLEIBNIZ\nLEIDEN\nLEIGH\nLEIGHTON\nLEILA\nLEIPZIG\nLEISURE\nLEISURELY\nLELAND\nLEMKE\nLEMMA\nLEMMAS\nLEMMING\nLEMMINGS\nLEMON\nLEMONADE\nLEMONS\nLEMUEL\nLEN\nLENA\nLEND\nLENDER\nLENDERS\nLENDING\nLENDS\nLENGTH\nLENGTHEN\nLENGTHENED\nLENGTHENING\nLENGTHENS\nLENGTHLY\nLENGTHS\nLENGTHWISE\nLENGTHY\nLENIENCY\nLENIENT\nLENIENTLY\nLENIN\nLENINGRAD\nLENINISM\nLENINIST\nLENNOX\nLENNY\nLENORE\nLENS\nLENSES\nLENT\nLENTEN\nLENTIL\nLENTILS\nLEO\nLEON\nLEONA\nLEONARD\nLEONARDO\nLEONE\nLEONID\nLEOPARD\nLEOPARDS\nLEOPOLD\nLEOPOLDVILLE\nLEPER\nLEPROSY\nLEROY\nLESBIAN\nLESBIANS\nLESLIE\nLESOTHO\nLESS\nLESSEN\nLESSENED\nLESSENING\nLESSENS\nLESSER\nLESSON\nLESSONS\nLESSOR\nLEST\nLESTER\nLET\nLETHAL\nLETHE\nLETITIA\nLETS\nLETTER\nLETTERED\nLETTERER\nLETTERHEAD\nLETTERING\nLETTERS\nLETTING\nLETTUCE\nLEUKEMIA\nLEV\nLEVEE\nLEVEES\nLEVEL\nLEVELED\nLEVELER\nLEVELING\nLEVELLED\nLEVELLER\nLEVELLEST\nLEVELLING\nLEVELLY\nLEVELNESS\nLEVELS\nLEVER\nLEVERAGE\nLEVERS\nLEVI\nLEVIABLE\nLEVIED\nLEVIES\nLEVIN\nLEVINE\nLEVIS\nLEVITICUS\nLEVITT\nLEVITY\nLEVY\nLEVYING\nLEW\nLEWD\nLEWDLY\nLEWDNESS\nLEWELLYN\nLEXICAL\nLEXICALLY\nLEXICOGRAPHIC\nLEXICOGRAPHICAL\nLEXICOGRAPHICALLY\nLEXICON\nLEXICONS\nLEXINGTON\nLEYDEN\nLIABILITIES\nLIABILITY\nLIABLE\nLIAISON\nLIAISONS\nLIAR\nLIARS\nLIBEL\nLIBELOUS\nLIBERACE\nLIBERAL\nLIBERALIZE\nLIBERALIZED\nLIBERALIZES\nLIBERALIZING\nLIBERALLY\nLIBERALS\nLIBERATE\nLIBERATED\nLIBERATES\nLIBERATING\nLIBERATION\nLIBERATOR\nLIBERATORS\nLIBERIA\nLIBERTARIAN\nLIBERTIES\nLIBERTY\nLIBIDO\nLIBRARIAN\nLIBRARIANS\nLIBRARIES\nLIBRARY\nLIBRETTO\nLIBREVILLE\nLIBYA\nLIBYAN\nLICE\nLICENSE\nLICENSED\nLICENSEE\nLICENSES\nLICENSING\nLICENSOR\nLICENTIOUS\nLICHEN\nLICHENS\nLICHTER\nLICK\nLICKED\nLICKING\nLICKS\nLICORICE\nLID\nLIDS\nLIE\nLIEBERMAN\nLIECHTENSTEIN\nLIED\nLIEGE\nLIEN\nLIENS\nLIES\nLIEU\nLIEUTENANT\nLIEUTENANTS\nLIFE\nLIFEBLOOD\nLIFEBOAT\nLIFEGUARD\nLIFELESS\nLIFELESSNESS\nLIFELIKE\nLIFELONG\nLIFER\nLIFESPAN\nLIFESTYLE\nLIFESTYLES\nLIFETIME\nLIFETIMES\nLIFT\nLIFTED\nLIFTER\nLIFTERS\nLIFTING\nLIFTS\nLIGAMENT\nLIGATURE\nLIGGET\nLIGGETT\nLIGHT\nLIGHTED\nLIGHTEN\nLIGHTENS\nLIGHTER\nLIGHTERS\nLIGHTEST\nLIGHTFACE\nLIGHTHEARTED\nLIGHTHOUSE\nLIGHTHOUSES\nLIGHTING\nLIGHTLY\nLIGHTNESS\nLIGHTNING\nLIGHTNINGS\nLIGHTS\nLIGHTWEIGHT\nLIKE\nLIKED\nLIKELIER\nLIKELIEST\nLIKELIHOOD\nLIKELIHOODS\nLIKELINESS\nLIKELY\nLIKEN\nLIKENED\nLIKENESS\nLIKENESSES\nLIKENING\nLIKENS\nLIKES\nLIKEWISE\nLIKING\nLILA\nLILAC\nLILACS\nLILIAN\nLILIES\nLILLIAN\nLILLIPUT\nLILLIPUTIAN\nLILLIPUTIANIZE\nLILLIPUTIANIZES\nLILLY\nLILY\nLIMA\nLIMAN\nLIMB\nLIMBER\nLIMBO\nLIMBS\nLIME\nLIMELIGHT\nLIMERICK\nLIMES\nLIMESTONE\nLIMIT\nLIMITABILITY\nLIMITABLY\nLIMITATION\nLIMITATIONS\nLIMITED\nLIMITER\nLIMITERS\nLIMITING\nLIMITLESS\nLIMITS\nLIMOUSINE\nLIMP\nLIMPED\nLIMPING\nLIMPLY\nLIMPNESS\nLIMPS\nLIN\nLINCOLN\nLIND\nLINDA\nLINDBERG\nLINDBERGH\nLINDEN\nLINDHOLM\nLINDQUIST\nLINDSAY\nLINDSEY\nLINDSTROM\nLINDY\nLINE\nLINEAR\nLINEARITIES\nLINEARITY\nLINEARIZABLE\nLINEARIZE\nLINEARIZED\nLINEARIZES\nLINEARIZING\nLINEARLY\nLINED\nLINEN\nLINENS\nLINER\nLINERS\nLINES\nLINEUP\nLINGER\nLINGERED\nLINGERIE\nLINGERING\nLINGERS\nLINGO\nLINGUA\nLINGUIST\nLINGUISTIC\nLINGUISTICALLY\nLINGUISTICS\nLINGUISTS\nLINING\nLININGS\nLINK\nLINKAGE\nLINKAGES\nLINKED\nLINKER\nLINKERS\nLINKING\nLINKS\nLINNAEUS\nLINOLEUM\nLINOTYPE\nLINSEED\nLINT\nLINTON\nLINUS\nLINUX\nLION\nLIONEL\nLIONESS\nLIONESSES\nLIONS\nLIP\nLIPPINCOTT\nLIPS\nLIPSCHITZ\nLIPSCOMB\nLIPSTICK\nLIPTON\nLIQUID\nLIQUIDATE\nLIQUIDATION\nLIQUIDATIONS\nLIQUIDITY\nLIQUIDS\nLIQUOR\nLIQUORS\nLISA\nLISBON\nLISE\nLISP\nLISPED\nLISPING\nLISPS\nLISS\nLISSAJOUS\nLIST\nLISTED\nLISTEN\nLISTENED\nLISTENER\nLISTENERS\nLISTENING\nLISTENS\nLISTER\nLISTERIZE\nLISTERIZES\nLISTERS\nLISTING\nLISTINGS\nLISTLESS\nLISTON\nLISTS\nLIT\nLITANY\nLITER\nLITERACY\nLITERAL\nLITERALLY\nLITERALNESS\nLITERALS\nLITERARY\nLITERATE\nLITERATURE\nLITERATURES\nLITERS\nLITHE\nLITHOGRAPH\nLITHOGRAPHY\nLITHUANIA\nLITHUANIAN\nLITIGANT\nLITIGATE\nLITIGATION\nLITIGIOUS\nLITMUS\nLITTER\nLITTERBUG\nLITTERED\nLITTERING\nLITTERS\nLITTLE\nLITTLENESS\nLITTLER\nLITTLEST\nLITTLETON\nLITTON\nLIVABLE\nLIVABLY\nLIVE\nLIVED\nLIVELIHOOD\nLIVELY\nLIVENESS\nLIVER\nLIVERIED\nLIVERMORE\nLIVERPOOL\nLIVERPUDLIAN\nLIVERS\nLIVERY\nLIVES\nLIVESTOCK\nLIVID\nLIVING\nLIVINGSTON\nLIZ\nLIZARD\nLIZARDS\nLIZZIE\nLIZZY\nLLOYD\nLOAD\nLOADED\nLOADER\nLOADERS\nLOADING\nLOADINGS\nLOADS\nLOAF\nLOAFED\nLOAFER\nLOAN\nLOANED\nLOANING\nLOANS\nLOATH\nLOATHE\nLOATHED\nLOATHING\nLOATHLY\nLOATHSOME\nLOAVES\nLOBBIED\nLOBBIES\nLOBBY\nLOBBYING\nLOBE\nLOBES\nLOBSTER\nLOBSTERS\nLOCAL\nLOCALITIES\nLOCALITY\nLOCALIZATION\nLOCALIZE\nLOCALIZED\nLOCALIZES\nLOCALIZING\nLOCALLY\nLOCALS\nLOCATE\nLOCATED\nLOCATES\nLOCATING\nLOCATION\nLOCATIONS\nLOCATIVE\nLOCATIVES\nLOCATOR\nLOCATORS\nLOCI\nLOCK\nLOCKE\nLOCKED\nLOCKER\nLOCKERS\nLOCKHART\nLOCKHEED\nLOCKIAN\nLOCKING\nLOCKINGS\nLOCKOUT\nLOCKOUTS\nLOCKS\nLOCKSMITH\nLOCKSTEP\nLOCKUP\nLOCKUPS\nLOCKWOOD\nLOCOMOTION\nLOCOMOTIVE\nLOCOMOTIVES\nLOCUS\nLOCUST\nLOCUSTS\nLODGE\nLODGED\nLODGER\nLODGES\nLODGING\nLODGINGS\nLODOWICK\nLOEB\nLOFT\nLOFTINESS\nLOFTS\nLOFTY\nLOGAN\nLOGARITHM\nLOGARITHMIC\nLOGARITHMICALLY\nLOGARITHMS\nLOGGED\nLOGGER\nLOGGERS\nLOGGING\nLOGIC\nLOGICAL\nLOGICALLY\nLOGICIAN\nLOGICIANS\nLOGICS\nLOGIN\nLOGINS\nLOGISTIC\nLOGISTICS\nLOGJAM\nLOGO\nLOGS\nLOIN\nLOINCLOTH\nLOINS\nLOIRE\nLOIS\nLOITER\nLOITERED\nLOITERER\nLOITERING\nLOITERS\nLOKI\nLOLA\nLOMB\nLOMBARD\nLOMBARDY\nLOME\nLONDON\nLONDONDERRY\nLONDONER\nLONDONIZATION\nLONDONIZATIONS\nLONDONIZE\nLONDONIZES\nLONE\nLONELIER\nLONELIEST\nLONELINESS\nLONELY\nLONER\nLONERS\nLONESOME\nLONG\nLONGED\nLONGER\nLONGEST\nLONGEVITY\nLONGFELLOW\nLONGHAND\nLONGING\nLONGINGS\nLONGITUDE\nLONGITUDES\nLONGS\nLONGSTANDING\nLONGSTREET\nLOOK\nLOOKAHEAD\nLOOKED\nLOOKER\nLOOKERS\nLOOKING\nLOOKOUT\nLOOKS\nLOOKUP\nLOOKUPS\nLOOM\nLOOMED\nLOOMING\nLOOMIS\nLOOMS\nLOON\nLOOP\nLOOPED\nLOOPHOLE\nLOOPHOLES\nLOOPING\nLOOPS\nLOOSE\nLOOSED\nLOOSELEAF\nLOOSELY\nLOOSEN\nLOOSENED\nLOOSENESS\nLOOSENING\nLOOSENS\nLOOSER\nLOOSES\nLOOSEST\nLOOSING\nLOOT\nLOOTED\nLOOTER\nLOOTING\nLOOTS\nLOPEZ\nLOPSIDED\nLORD\nLORDLY\nLORDS\nLORDSHIP\nLORE\nLORELEI\nLOREN\nLORENTZIAN\nLORENZ\nLORETTA\nLORINDA\nLORRAINE\nLORRY\nLOS\nLOSE\nLOSER\nLOSERS\nLOSES\nLOSING\nLOSS\nLOSSES\nLOSSIER\nLOSSIEST\nLOSSY\nLOST\nLOT\nLOTHARIO\nLOTION\nLOTS\nLOTTE\nLOTTERY\nLOTTIE\nLOTUS\nLOU\nLOUD\nLOUDER\nLOUDEST\nLOUDLY\nLOUDNESS\nLOUDSPEAKER\nLOUDSPEAKERS\nLOUIS\nLOUISA\nLOUISE\nLOUISIANA\nLOUISIANAN\nLOUISVILLE\nLOUNGE\nLOUNGED\nLOUNGES\nLOUNGING\nLOUNSBURY\nLOURDES\nLOUSE\nLOUSY\nLOUT\nLOUVRE\nLOVABLE\nLOVABLY\nLOVE\nLOVED\nLOVEJOY\nLOVELACE\nLOVELAND\nLOVELIER\nLOVELIES\nLOVELIEST\nLOVELINESS\nLOVELORN\nLOVELY\nLOVER\nLOVERS\nLOVES\nLOVING\nLOVINGLY\nLOW\nLOWE\nLOWELL\nLOWER\nLOWERED\nLOWERING\nLOWERS\nLOWEST\nLOWLAND\nLOWLANDS\nLOWLIEST\nLOWLY\nLOWNESS\nLOWRY\nLOWS\nLOY\nLOYAL\nLOYALLY\nLOYALTIES\nLOYALTY\nLOYOLA\nLUBBOCK\nLUBELL\nLUBRICANT\nLUBRICATE\nLUBRICATION\nLUCAS\nLUCERNE\nLUCIA\nLUCIAN\nLUCID\nLUCIEN\nLUCIFER\nLUCILLE\nLUCIUS\nLUCK\nLUCKED\nLUCKIER\nLUCKIEST\nLUCKILY\nLUCKLESS\nLUCKS\nLUCKY\nLUCRATIVE\nLUCRETIA\nLUCRETIUS\nLUCY\nLUDICROUS\nLUDICROUSLY\nLUDICROUSNESS\nLUDLOW\nLUDMILLA\nLUDWIG\nLUFTHANSA\nLUFTWAFFE\nLUGGAGE\nLUIS\nLUKE\nLUKEWARM\nLULL\nLULLABY\nLULLED\nLULLS\nLUMBER\nLUMBERED\nLUMBERING\nLUMINOUS\nLUMINOUSLY\nLUMMOX\nLUMP\nLUMPED\nLUMPING\nLUMPS\nLUMPUR\nLUMPY\nLUNAR\nLUNATIC\nLUNCH\nLUNCHED\nLUNCHEON\nLUNCHEONS\nLUNCHES\nLUNCHING\nLUND\nLUNDBERG\nLUNDQUIST\nLUNG\nLUNGED\nLUNGS\nLURA\nLURCH\nLURCHED\nLURCHES\nLURCHING\nLURE\nLURED\nLURES\nLURING\nLURK\nLURKED\nLURKING\nLURKS\nLUSAKA\nLUSCIOUS\nLUSCIOUSLY\nLUSCIOUSNESS\nLUSH\nLUST\nLUSTER\nLUSTFUL\nLUSTILY\nLUSTINESS\nLUSTROUS\nLUSTS\nLUSTY\nLUTE\nLUTES\nLUTHER\nLUTHERAN\nLUTHERANIZE\nLUTHERANIZER\nLUTHERANIZERS\nLUTHERANIZES\nLUTZ\nLUXEMBOURG\nLUXEMBURG\nLUXURIANT\nLUXURIANTLY\nLUXURIES\nLUXURIOUS\nLUXURIOUSLY\nLUXURY\nLUZON\nLYDIA\nLYING\nLYKES\nLYLE\nLYMAN\nLYMPH\nLYNCH\nLYNCHBURG\nLYNCHED\nLYNCHER\nLYNCHES\nLYNDON\nLYNN\nLYNX\nLYNXES\nLYON\nLYONS\nLYRA\nLYRE\nLYRIC\nLYRICS\nLYSENKO\nMABEL\nMAC\nMACADAMIA\nMACARTHUR\nMACARTHUR\nMACASSAR\nMACAULAY\nMACAULAYAN\nMACAULAYISM\nMACAULAYISMS\nMACBETH\nMACDONALD\nMACDONALD\nMACDOUGALL\nMACDOUGALL\nMACDRAW\nMACE\nMACED\nMACEDON\nMACEDONIA\nMACEDONIAN\nMACES\nMACGREGOR\nMACGREGOR\nMACH\nMACHIAVELLI\nMACHIAVELLIAN\nMACHINATION\nMACHINE\nMACHINED\nMACHINELIKE\nMACHINERY\nMACHINES\nMACHINING\nMACHO\nMACINTOSH\nMACINTOSH\nMACINTOSH\nMACKENZIE\nMACKENZIE\nMACKEREL\nMACKEY\nMACKINAC\nMACKINAW\nMACMAHON\nMACMILLAN\nMACMILLAN\nMACON\nMACPAINT\nMACRO\nMACROECONOMICS\nMACROMOLECULE\nMACROMOLECULES\nMACROPHAGE\nMACROS\nMACROSCOPIC\nMAD\nMADAGASCAR\nMADAM\nMADAME\nMADAMES\nMADDEN\nMADDENING\nMADDER\nMADDEST\nMADDOX\nMADE\nMADEIRA\nMADELEINE\nMADELINE\nMADHOUSE\nMADHYA\nMADISON\nMADLY\nMADMAN\nMADMEN\nMADNESS\nMADONNA\nMADONNAS\nMADRAS\nMADRID\nMADSEN\nMAE\nMAELSTROM\nMAESTRO\nMAFIA\nMAFIOSI\nMAGAZINE\nMAGAZINES\nMAGDALENE\nMAGELLAN\nMAGELLANIC\nMAGENTA\nMAGGIE\nMAGGOT\nMAGGOTS\nMAGIC\nMAGICAL\nMAGICALLY\nMAGICIAN\nMAGICIANS\nMAGILL\nMAGISTRATE\nMAGISTRATES\nMAGNA\nMAGNESIUM\nMAGNET\nMAGNETIC\nMAGNETICALLY\nMAGNETISM\nMAGNETISMS\nMAGNETIZABLE\nMAGNETIZED\nMAGNETO\nMAGNIFICATION\nMAGNIFICENCE\nMAGNIFICENT\nMAGNIFICENTLY\nMAGNIFIED\nMAGNIFIER\nMAGNIFIES\nMAGNIFY\nMAGNIFYING\nMAGNITUDE\nMAGNITUDES\nMAGNOLIA\nMAGNUM\nMAGNUSON\nMAGOG\nMAGPIE\nMAGRUDER\nMAGUIRE\nMAGUIRES\nMAHARASHTRA\nMAHAYANA\nMAHAYANIST\nMAHOGANY\nMAHONEY\nMAID\nMAIDEN\nMAIDENS\nMAIDS\nMAIER\nMAIL\nMAILABLE\nMAILBOX\nMAILBOXES\nMAILED\nMAILER\nMAILING\nMAILINGS\nMAILMAN\nMAILMEN\nMAILS\nMAIM\nMAIMED\nMAIMING\nMAIMS\nMAIN\nMAINE\nMAINFRAME\nMAINFRAMES\nMAINLAND\nMAINLINE\nMAINLY\nMAINS\nMAINSTAY\nMAINSTREAM\nMAINTAIN\nMAINTAINABILITY\nMAINTAINABLE\nMAINTAINED\nMAINTAINER\nMAINTAINERS\nMAINTAINING\nMAINTAINS\nMAINTENANCE\nMAINTENANCES\nMAIZE\nMAJESTIC\nMAJESTIES\nMAJESTY\nMAJOR\nMAJORCA\nMAJORED\nMAJORING\nMAJORITIES\nMAJORITY\nMAJORS\nMAKABLE\nMAKE\nMAKER\nMAKERS\nMAKES\nMAKESHIFT\nMAKEUP\nMAKEUPS\nMAKING\nMAKINGS\nMALABAR\nMALADIES\nMALADY\nMALAGASY\nMALAMUD\nMALARIA\nMALAWI\nMALAY\nMALAYIZE\nMALAYIZES\nMALAYSIA\nMALAYSIAN\nMALCOLM\nMALCONTENT\nMALDEN\nMALDIVE\nMALE\nMALEFACTOR\nMALEFACTORS\nMALENESS\nMALES\nMALEVOLENT\nMALFORMED\nMALFUNCTION\nMALFUNCTIONED\nMALFUNCTIONING\nMALFUNCTIONS\nMALI\nMALIBU\nMALICE\nMALICIOUS\nMALICIOUSLY\nMALICIOUSNESS\nMALIGN\nMALIGNANT\nMALIGNANTLY\nMALL\nMALLARD\nMALLET\nMALLETS\nMALLORY\nMALNUTRITION\nMALONE\nMALONEY\nMALPRACTICE\nMALRAUX\nMALT\nMALTA\nMALTED\nMALTESE\nMALTHUS\nMALTHUSIAN\nMALTON\nMALTS\nMAMA\nMAMMA\nMAMMAL\nMAMMALIAN\nMAMMALS\nMAMMAS\nMAMMOTH\nMAN\nMANAGE\nMANAGEABLE\nMANAGEABLENESS\nMANAGED\nMANAGEMENT\nMANAGEMENTS\nMANAGER\nMANAGERIAL\nMANAGERS\nMANAGES\nMANAGING\nMANAGUA\nMANAMA\nMANCHESTER\nMANCHURIA\nMANDARIN\nMANDATE\nMANDATED\nMANDATES\nMANDATING\nMANDATORY\nMANDELBROT\nMANDIBLE\nMANE\nMANES\nMANEUVER\nMANEUVERED\nMANEUVERING\nMANEUVERS\nMANFRED\nMANGER\nMANGERS\nMANGLE\nMANGLED\nMANGLER\nMANGLES\nMANGLING\nMANHATTAN\nMANHATTANIZE\nMANHATTANIZES\nMANHOLE\nMANHOOD\nMANIA\nMANIAC\nMANIACAL\nMANIACS\nMANIC\nMANICURE\nMANICURED\nMANICURES\nMANICURING\nMANIFEST\nMANIFESTATION\nMANIFESTATIONS\nMANIFESTED\nMANIFESTING\nMANIFESTLY\nMANIFESTS\nMANIFOLD\nMANIFOLDS\nMANILA\nMANIPULABILITY\nMANIPULABLE\nMANIPULATABLE\nMANIPULATE\nMANIPULATED\nMANIPULATES\nMANIPULATING\nMANIPULATION\nMANIPULATIONS\nMANIPULATIVE\nMANIPULATOR\nMANIPULATORS\nMANIPULATORY\nMANITOBA\nMANITOWOC\nMANKIND\nMANKOWSKI\nMANLEY\nMANLY\nMANN\nMANNED\nMANNER\nMANNERED\nMANNERLY\nMANNERS\nMANNING\nMANOMETER\nMANOMETERS\nMANOR\nMANORS\nMANPOWER\nMANS\nMANSFIELD\nMANSION\nMANSIONS\nMANSLAUGHTER\nMANTEL\nMANTELS\nMANTIS\nMANTISSA\nMANTISSAS\nMANTLE\nMANTLEPIECE\nMANTLES\nMANUAL\nMANUALLY\nMANUALS\nMANUEL\nMANUFACTURE\nMANUFACTURED\nMANUFACTURER\nMANUFACTURERS\nMANUFACTURES\nMANUFACTURING\nMANURE\nMANUSCRIPT\nMANUSCRIPTS\nMANVILLE\nMANY\nMAO\nMAORI\nMAP\nMAPLE\nMAPLECREST\nMAPLES\nMAPPABLE\nMAPPED\nMAPPING\nMAPPINGS\nMAPS\nMARATHON\nMARBLE\nMARBLES\nMARBLING\nMARC\nMARCEAU\nMARCEL\nMARCELLO\nMARCH\nMARCHED\nMARCHER\nMARCHES\nMARCHING\nMARCIA\nMARCO\nMARCOTTE\nMARCUS\nMARCY\nMARDI\nMARDIS\nMARE\nMARES\nMARGARET\nMARGARINE\nMARGERY\nMARGIN\nMARGINAL\nMARGINALLY\nMARGINS\nMARGO\nMARGUERITE\nMARIANNE\nMARIE\nMARIETTA\nMARIGOLD\nMARIJUANA\nMARILYN\nMARIN\nMARINA\nMARINADE\nMARINATE\nMARINE\nMARINER\nMARINES\nMARINO\nMARIO\nMARION\nMARIONETTE\nMARITAL\nMARITIME\nMARJORIE\nMARJORY\nMARK\nMARKABLE\nMARKED\nMARKEDLY\nMARKER\nMARKERS\nMARKET\nMARKETABILITY\nMARKETABLE\nMARKETED\nMARKETING\nMARKETINGS\nMARKETPLACE\nMARKETPLACES\nMARKETS\nMARKHAM\nMARKING\nMARKINGS\nMARKISM\nMARKOV\nMARKOVIAN\nMARKOVITZ\nMARKS\nMARLBORO\nMARLBOROUGH\nMARLENE\nMARLOWE\nMARMALADE\nMARMOT\nMAROON\nMARQUETTE\nMARQUIS\nMARRIAGE\nMARRIAGEABLE\nMARRIAGES\nMARRIED\nMARRIES\nMARRIOTT\nMARROW\nMARRY\nMARRYING\nMARS\nMARSEILLES\nMARSH\nMARSHA\nMARSHAL\nMARSHALED\nMARSHALING\nMARSHALL\nMARSHALLED\nMARSHALLING\nMARSHALS\nMARSHES\nMARSHMALLOW\nMART\nMARTEN\nMARTHA\nMARTIAL\nMARTIAN\nMARTIANS\nMARTINEZ\nMARTINGALE\nMARTINI\nMARTINIQUE\nMARTINSON\nMARTS\nMARTY\nMARTYR\nMARTYRDOM\nMARTYRS\nMARVEL\nMARVELED\nMARVELLED\nMARVELLING\nMARVELOUS\nMARVELOUSLY\nMARVELOUSNESS\nMARVELS\nMARVIN\nMARX\nMARXIAN\nMARXISM\nMARXISMS\nMARXIST\nMARY\nMARYLAND\nMARYLANDERS\nMASCARA\nMASCULINE\nMASCULINELY\nMASCULINITY\nMASERU\nMASH\nMASHED\nMASHES\nMASHING\nMASK\nMASKABLE\nMASKED\nMASKER\nMASKING\nMASKINGS\nMASKS\nMASOCHIST\nMASOCHISTS\nMASON\nMASONIC\nMASONITE\nMASONRY\nMASONS\nMASQUERADE\nMASQUERADER\nMASQUERADES\nMASQUERADING\nMASS\nMASSACHUSETTS\nMASSACRE\nMASSACRED\nMASSACRES\nMASSAGE\nMASSAGES\nMASSAGING\nMASSED\nMASSES\nMASSEY\nMASSING\nMASSIVE\nMAST\nMASTED\nMASTER\nMASTERED\nMASTERFUL\nMASTERFULLY\nMASTERING\nMASTERINGS\nMASTERLY\nMASTERMIND\nMASTERPIECE\nMASTERPIECES\nMASTERS\nMASTERY\nMASTODON\nMASTS\nMASTURBATE\nMASTURBATED\nMASTURBATES\nMASTURBATING\nMASTURBATION\nMAT\nMATCH\nMATCHABLE\nMATCHED\nMATCHER\nMATCHERS\nMATCHES\nMATCHING\nMATCHINGS\nMATCHLESS\nMATE\nMATED\nMATEO\nMATER\nMATERIAL\nMATERIALIST\nMATERIALIZE\nMATERIALIZED\nMATERIALIZES\nMATERIALIZING\nMATERIALLY\nMATERIALS\nMATERNAL\nMATERNALLY\nMATERNITY\nMATES\nMATH\nMATHEMATICA\nMATHEMATICAL\nMATHEMATICALLY\nMATHEMATICIAN\nMATHEMATICIANS\nMATHEMATICS\nMATHEMATIK\nMATHEWSON\nMATHIAS\nMATHIEU\nMATILDA\nMATING\nMATINGS\nMATISSE\nMATISSES\nMATRIARCH\nMATRIARCHAL\nMATRICES\nMATRICULATE\nMATRICULATION\nMATRIMONIAL\nMATRIMONY\nMATRIX\nMATROID\nMATRON\nMATRONLY\nMATS\nMATSON\nMATSUMOTO\nMATT\nMATTED\nMATTER\nMATTERED\nMATTERS\nMATTHEW\nMATTHEWS\nMATTIE\nMATTRESS\nMATTRESSES\nMATTSON\nMATURATION\nMATURE\nMATURED\nMATURELY\nMATURES\nMATURING\nMATURITIES\nMATURITY\nMAUDE\nMAUL\nMAUREEN\nMAURICE\nMAURICIO\nMAURINE\nMAURITANIA\nMAURITIUS\nMAUSOLEUM\nMAVERICK\nMAVIS\nMAWR\nMAX\nMAXIM\nMAXIMA\nMAXIMAL\nMAXIMALLY\nMAXIMILIAN\nMAXIMIZE\nMAXIMIZED\nMAXIMIZER\nMAXIMIZERS\nMAXIMIZES\nMAXIMIZING\nMAXIMS\nMAXIMUM\nMAXIMUMS\nMAXINE\nMAXTOR\nMAXWELL\nMAXWELLIAN\nMAY\nMAYA\nMAYANS\nMAYBE\nMAYER\nMAYFAIR\nMAYFLOWER\nMAYHAP\nMAYHEM\nMAYNARD\nMAYO\nMAYONNAISE\nMAYOR\nMAYORAL\nMAYORS\nMAZDA\nMAZE\nMAZES\nMBABANE\nMCADAM\nMCADAMS\nMCALLISTER\nMCBRIDE\nMCCABE\nMCCALL\nMCCALLUM\nMCCANN\nMCCARTHY\nMCCARTY\nMCCAULEY\nMCCLAIN\nMCCLELLAN\nMCCLURE\nMCCLUSKEY\nMCCONNEL\nMCCONNELL\nMCCORMICK\nMCCOY\nMCCRACKEN\nMCCULLOUGH\nMCDANIEL\nMCDERMOTT\nMCDONALD\nMCDONNELL\nMCDOUGALL\nMCDOWELL\nMCELHANEY\nMCELROY\nMCFADDEN\nMCFARLAND\nMCGEE\nMCGILL\nMCGINNIS\nMCGOVERN\nMCGOWAN\nMCGRATH\nMCGRAW\nMCGREGOR\nMCGUIRE\nMCHUGH\nMCINTOSH\nMCINTYRE\nMCKAY\nMCKEE\nMCKENNA\nMCKENZIE\nMCKEON\nMCKESSON\nMCKINLEY\nMCKINNEY\nMCKNIGHT\nMCLANAHAN\nMCLAUGHLIN\nMCLEAN\nMCLEOD\nMCMAHON\nMCMARTIN\nMCMILLAN\nMCMULLEN\nMCNALLY\nMCNAUGHTON\nMCNEIL\nMCNULTY\nMCPHERSON\nMEAD\nMEADOW\nMEADOWS\nMEAGER\nMEAGERLY\nMEAGERNESS\nMEAL\nMEALS\nMEALTIME\nMEALY\nMEAN\nMEANDER\nMEANDERED\nMEANDERING\nMEANDERS\nMEANER\nMEANEST\nMEANING\nMEANINGFUL\nMEANINGFULLY\nMEANINGFULNESS\nMEANINGLESS\nMEANINGLESSLY\nMEANINGLESSNESS\nMEANINGS\nMEANLY\nMEANNESS\nMEANS\nMEANT\nMEANTIME\nMEANWHILE\nMEASLE\nMEASLES\nMEASURABLE\nMEASURABLY\nMEASURE\nMEASURED\nMEASUREMENT\nMEASUREMENTS\nMEASURER\nMEASURES\nMEASURING\nMEAT\nMEATS\nMEATY\nMECCA\nMECHANIC\nMECHANICAL\nMECHANICALLY\nMECHANICS\nMECHANISM\nMECHANISMS\nMECHANIZATION\nMECHANIZATIONS\nMECHANIZE\nMECHANIZED\nMECHANIZES\nMECHANIZING\nMEDAL\nMEDALLION\nMEDALLIONS\nMEDALS\nMEDDLE\nMEDDLED\nMEDDLER\nMEDDLES\nMEDDLING\nMEDEA\nMEDFIELD\nMEDFORD\nMEDIA\nMEDIAN\nMEDIANS\nMEDIATE\nMEDIATED\nMEDIATES\nMEDIATING\nMEDIATION\nMEDIATIONS\nMEDIATOR\nMEDIC\nMEDICAID\nMEDICAL\nMEDICALLY\nMEDICARE\nMEDICI\nMEDICINAL\nMEDICINALLY\nMEDICINE\nMEDICINES\nMEDICIS\nMEDICS\nMEDIEVAL\nMEDIOCRE\nMEDIOCRITY\nMEDITATE\nMEDITATED\nMEDITATES\nMEDITATING\nMEDITATION\nMEDITATIONS\nMEDITATIVE\nMEDITERRANEAN\nMEDITERRANEANIZATION\nMEDITERRANEANIZATIONS\nMEDITERRANEANIZE\nMEDITERRANEANIZES\nMEDIUM\nMEDIUMS\nMEDLEY\nMEDUSA\nMEDUSAN\nMEEK\nMEEKER\nMEEKEST\nMEEKLY\nMEEKNESS\nMEET\nMEETING\nMEETINGHOUSE\nMEETINGS\nMEETS\nMEG\nMEGABAUD\nMEGABIT\nMEGABITS\nMEGABYTE\nMEGABYTES\nMEGAHERTZ\nMEGALOMANIA\nMEGATON\nMEGAVOLT\nMEGAWATT\nMEGAWORD\nMEGAWORDS\nMEGOHM\nMEIER\nMEIJI\nMEISTER\nMEISTERSINGER\nMEKONG\nMEL\nMELAMPUS\nMELANCHOLY\nMELANESIA\nMELANESIAN\nMELANIE\nMELBOURNE\nMELCHER\nMELINDA\nMELISANDE\nMELISSA\nMELLON\nMELLOW\nMELLOWED\nMELLOWING\nMELLOWNESS\nMELLOWS\nMELODIES\nMELODIOUS\nMELODIOUSLY\nMELODIOUSNESS\nMELODRAMA\nMELODRAMAS\nMELODRAMATIC\nMELODY\nMELON\nMELONS\nMELPOMENE\nMELT\nMELTED\nMELTING\nMELTINGLY\nMELTS\nMELVILLE\nMELVIN\nMEMBER\nMEMBERS\nMEMBERSHIP\nMEMBERSHIPS\nMEMBRANE\nMEMENTO\nMEMO\nMEMOIR\nMEMOIRS\nMEMORABILIA\nMEMORABLE\nMEMORABLENESS\nMEMORANDA\nMEMORANDUM\nMEMORIAL\nMEMORIALLY\nMEMORIALS\nMEMORIES\nMEMORIZATION\nMEMORIZE\nMEMORIZED\nMEMORIZER\nMEMORIZES\nMEMORIZING\nMEMORY\nMEMORYLESS\nMEMOS\nMEMPHIS\nMEN\nMENACE\nMENACED\nMENACING\nMENAGERIE\nMENARCHE\nMENCKEN\nMEND\nMENDACIOUS\nMENDACITY\nMENDED\nMENDEL\nMENDELIAN\nMENDELIZE\nMENDELIZES\nMENDELSSOHN\nMENDER\nMENDING\nMENDOZA\nMENDS\nMENELAUS\nMENIAL\nMENIALS\nMENLO\nMENNONITE\nMENNONITES\nMENOMINEE\nMENORCA\nMENS\nMENSCH\nMENSTRUATE\nMENSURABLE\nMENSURATION\nMENTAL\nMENTALITIES\nMENTALITY\nMENTALLY\nMENTION\nMENTIONABLE\nMENTIONED\nMENTIONER\nMENTIONERS\nMENTIONING\nMENTIONS\nMENTOR\nMENTORS\nMENU\nMENUS\nMENZIES\nMEPHISTOPHELES\nMERCANTILE\nMERCATOR\nMERCEDES\nMERCENARIES\nMERCENARINESS\nMERCENARY\nMERCHANDISE\nMERCHANDISER\nMERCHANDISING\nMERCHANT\nMERCHANTS\nMERCIFUL\nMERCIFULLY\nMERCILESS\nMERCILESSLY\nMERCK\nMERCURIAL\nMERCURY\nMERCY\nMERE\nMEREDITH\nMERELY\nMEREST\nMERGE\nMERGED\nMERGER\nMERGERS\nMERGES\nMERGING\nMERIDIAN\nMERINGUE\nMERIT\nMERITED\nMERITING\nMERITORIOUS\nMERITORIOUSLY\nMERITORIOUSNESS\nMERITS\nMERIWETHER\nMERLE\nMERMAID\nMERRIAM\nMERRICK\nMERRIEST\nMERRILL\nMERRILY\nMERRIMAC\nMERRIMACK\nMERRIMENT\nMERRITT\nMERRY\nMERRYMAKE\nMERVIN\nMESCALINE\nMESH\nMESON\nMESOPOTAMIA\nMESOZOIC\nMESQUITE\nMESS\nMESSAGE\nMESSAGES\nMESSED\nMESSENGER\nMESSENGERS\nMESSES\nMESSIAH\nMESSIAHS\nMESSIER\nMESSIEST\nMESSILY\nMESSINESS\nMESSING\nMESSY\nMET\nMETA\nMETABOLIC\nMETABOLISM\nMETACIRCULAR\nMETACIRCULARITY\nMETAL\nMETALANGUAGE\nMETALLIC\nMETALLIZATION\nMETALLIZATIONS\nMETALLURGY\nMETALS\nMETAMATHEMATICAL\nMETAMORPHOSIS\nMETAPHOR\nMETAPHORICAL\nMETAPHORICALLY\nMETAPHORS\nMETAPHYSICAL\nMETAPHYSICALLY\nMETAPHYSICS\nMETAVARIABLE\nMETCALF\nMETE\nMETED\nMETEOR\nMETEORIC\nMETEORITE\nMETEORITIC\nMETEOROLOGY\nMETEORS\nMETER\nMETERING\nMETERS\nMETES\nMETHANE\nMETHOD\nMETHODICAL\nMETHODICALLY\nMETHODICALNESS\nMETHODISM\nMETHODIST\nMETHODISTS\nMETHODOLOGICAL\nMETHODOLOGICALLY\nMETHODOLOGIES\nMETHODOLOGISTS\nMETHODOLOGY\nMETHODS\nMETHUEN\nMETHUSELAH\nMETHUSELAHS\nMETICULOUSLY\nMETING\nMETRECAL\nMETRIC\nMETRICAL\nMETRICS\nMETRO\nMETRONOME\nMETROPOLIS\nMETROPOLITAN\nMETS\nMETTLE\nMETTLESOME\nMETZLER\nMEW\nMEWED\nMEWS\nMEXICAN\nMEXICANIZE\nMEXICANIZES\nMEXICANS\nMEXICO\nMEYER\nMEYERS\nMIAMI\nMIASMA\nMICA\nMICE\nMICHAEL\nMICHAELS\nMICHEL\nMICHELANGELO\nMICHELE\nMICHELIN\nMICHELSON\nMICHIGAN\nMICK\nMICKEY\nMICKIE\nMICKY\nMICRO\nMICROARCHITECTS\nMICROARCHITECTURE\nMICROARCHITECTURES\nMICROBIAL\nMICROBICIDAL\nMICROBICIDE\nMICROCODE\nMICROCODED\nMICROCODES\nMICROCODING\nMICROCOMPUTER\nMICROCOMPUTERS\nMICROCOSM\nMICROCYCLE\nMICROCYCLES\nMICROECONOMICS\nMICROELECTRONICS\nMICROFILM\nMICROFILMS\nMICROFINANCE\nMICROGRAMMING\nMICROINSTRUCTION\nMICROINSTRUCTIONS\nMICROJUMP\nMICROJUMPS\nMICROLEVEL\nMICRON\nMICRONESIA\nMICRONESIAN\nMICROOPERATIONS\nMICROPHONE\nMICROPHONES\nMICROPHONING\nMICROPORT\nMICROPROCEDURE\nMICROPROCEDURES\nMICROPROCESSING\nMICROPROCESSOR\nMICROPROCESSORS\nMICROPROGRAM\nMICROPROGRAMMABLE\nMICROPROGRAMMED\nMICROPROGRAMMER\nMICROPROGRAMMING\nMICROPROGRAMS\nMICROS\nMICROSCOPE\nMICROSCOPES\nMICROSCOPIC\nMICROSCOPY\nMICROSECOND\nMICROSECONDS\nMICROSOFT\nMICROSTORE\nMICROSYSTEMS\nMICROVAX\nMICROVAXES\nMICROWAVE\nMICROWAVES\nMICROWORD\nMICROWORDS\nMID\nMIDAS\nMIDDAY\nMIDDLE\nMIDDLEBURY\nMIDDLEMAN\nMIDDLEMEN\nMIDDLES\nMIDDLESEX\nMIDDLETON\nMIDDLETOWN\nMIDDLING\nMIDGET\nMIDLANDIZE\nMIDLANDIZES\nMIDNIGHT\nMIDNIGHTS\nMIDPOINT\nMIDPOINTS\nMIDRANGE\nMIDSCALE\nMIDSECTION\nMIDSHIPMAN\nMIDSHIPMEN\nMIDST\nMIDSTREAM\nMIDSTS\nMIDSUMMER\nMIDWAY\nMIDWEEK\nMIDWEST\nMIDWESTERN\nMIDWESTERNER\nMIDWESTERNERS\nMIDWIFE\nMIDWINTER\nMIDWIVES\nMIEN\nMIGHT\nMIGHTIER\nMIGHTIEST\nMIGHTILY\nMIGHTINESS\nMIGHTY\nMIGRANT\nMIGRATE\nMIGRATED\nMIGRATES\nMIGRATING\nMIGRATION\nMIGRATIONS\nMIGRATORY\nMIGUEL\nMIKE\nMIKHAIL\nMIKOYAN\nMILAN\nMILD\nMILDER\nMILDEST\nMILDEW\nMILDLY\nMILDNESS\nMILDRED\nMILE\nMILEAGE\nMILES\nMILESTONE\nMILESTONES\nMILITANT\nMILITANTLY\nMILITARILY\nMILITARISM\nMILITARY\nMILITIA\nMILK\nMILKED\nMILKER\nMILKERS\nMILKINESS\nMILKING\nMILKMAID\nMILKMAIDS\nMILKS\nMILKY\nMILL\nMILLARD\nMILLED\nMILLENNIUM\nMILLER\nMILLET\nMILLIAMMETER\nMILLIAMPERE\nMILLIE\nMILLIJOULE\nMILLIKAN\nMILLIMETER\nMILLIMETERS\nMILLINERY\nMILLING\nMILLINGTON\nMILLION\nMILLIONAIRE\nMILLIONAIRES\nMILLIONS\nMILLIONTH\nMILLIPEDE\nMILLIPEDES\nMILLISECOND\nMILLISECONDS\nMILLIVOLT\nMILLIVOLTMETER\nMILLIWATT\nMILLS\nMILLSTONE\nMILLSTONES\nMILNE\nMILQUETOAST\nMILQUETOASTS\nMILTON\nMILTONIAN\nMILTONIC\nMILTONISM\nMILTONIST\nMILTONIZE\nMILTONIZED\nMILTONIZES\nMILTONIZING\nMILWAUKEE\nMIMEOGRAPH\nMIMI\nMIMIC\nMIMICKED\nMIMICKING\nMIMICS\nMINARET\nMINCE\nMINCED\nMINCEMEAT\nMINCES\nMINCING\nMIND\nMINDANAO\nMINDED\nMINDFUL\nMINDFULLY\nMINDFULNESS\nMINDING\nMINDLESS\nMINDLESSLY\nMINDS\nMINE\nMINED\nMINEFIELD\nMINER\nMINERAL\nMINERALS\nMINERS\nMINERVA\nMINES\nMINESWEEPER\nMINGLE\nMINGLED\nMINGLES\nMINGLING\nMINI\nMINIATURE\nMINIATURES\nMINIATURIZATION\nMINIATURIZE\nMINIATURIZED\nMINIATURIZES\nMINIATURIZING\nMINICOMPUTER\nMINICOMPUTERS\nMINIMA\nMINIMAL\nMINIMALLY\nMINIMAX\nMINIMIZATION\nMINIMIZATIONS\nMINIMIZE\nMINIMIZED\nMINIMIZER\nMINIMIZERS\nMINIMIZES\nMINIMIZING\nMINIMUM\nMINING\nMINION\nMINIS\nMINISTER\nMINISTERED\nMINISTERING\nMINISTERS\nMINISTRIES\nMINISTRY\nMINK\nMINKS\nMINNEAPOLIS\nMINNESOTA\nMINNIE\nMINNOW\nMINNOWS\nMINOAN\nMINOR\nMINORING\nMINORITIES\nMINORITY\nMINORS\nMINOS\nMINOTAUR\nMINSK\nMINSKY\nMINSTREL\nMINSTRELS\nMINT\nMINTED\nMINTER\nMINTING\nMINTS\nMINUEND\nMINUET\nMINUS\nMINUSCULE\nMINUTE\nMINUTELY\nMINUTEMAN\nMINUTEMEN\nMINUTENESS\nMINUTER\nMINUTES\nMIOCENE\nMIPS\nMIRA\nMIRACLE\nMIRACLES\nMIRACULOUS\nMIRACULOUSLY\nMIRAGE\nMIRANDA\nMIRE\nMIRED\nMIRES\nMIRFAK\nMIRIAM\nMIRROR\nMIRRORED\nMIRRORING\nMIRRORS\nMIRTH\nMISANTHROPE\nMISBEHAVING\nMISCALCULATION\nMISCALCULATIONS\nMISCARRIAGE\nMISCARRY\nMISCEGENATION\nMISCELLANEOUS\nMISCELLANEOUSLY\nMISCELLANEOUSNESS\nMISCHIEF\nMISCHIEVOUS\nMISCHIEVOUSLY\nMISCHIEVOUSNESS\nMISCONCEPTION\nMISCONCEPTIONS\nMISCONDUCT\nMISCONSTRUE\nMISCONSTRUED\nMISCONSTRUES\nMISDEMEANORS\nMISER\nMISERABLE\nMISERABLENESS\nMISERABLY\nMISERIES\nMISERLY\nMISERS\nMISERY\nMISFIT\nMISFITS\nMISFORTUNE\nMISFORTUNES\nMISGIVING\nMISGIVINGS\nMISGUIDED\nMISHAP\nMISHAPS\nMISINFORMED\nMISJUDGED\nMISJUDGMENT\nMISLEAD\nMISLEADING\nMISLEADS\nMISLED\nMISMANAGEMENT\nMISMATCH\nMISMATCHED\nMISMATCHES\nMISMATCHING\nMISNOMER\nMISPLACE\nMISPLACED\nMISPLACES\nMISPLACING\nMISPRONUNCIATION\nMISREPRESENTATION\nMISREPRESENTATIONS\nMISS\nMISSED\nMISSES\nMISSHAPEN\nMISSILE\nMISSILES\nMISSING\nMISSION\nMISSIONARIES\nMISSIONARY\nMISSIONER\nMISSIONS\nMISSISSIPPI\nMISSISSIPPIAN\nMISSISSIPPIANS\nMISSIVE\nMISSOULA\nMISSOURI\nMISSPELL\nMISSPELLED\nMISSPELLING\nMISSPELLINGS\nMISSPELLS\nMISSY\nMIST\nMISTAKABLE\nMISTAKE\nMISTAKEN\nMISTAKENLY\nMISTAKES\nMISTAKING\nMISTED\nMISTER\nMISTERS\nMISTINESS\nMISTING\nMISTLETOE\nMISTRESS\nMISTRUST\nMISTRUSTED\nMISTS\nMISTY\nMISTYPE\nMISTYPED\nMISTYPES\nMISTYPING\nMISUNDERSTAND\nMISUNDERSTANDER\nMISUNDERSTANDERS\nMISUNDERSTANDING\nMISUNDERSTANDINGS\nMISUNDERSTOOD\nMISUSE\nMISUSED\nMISUSES\nMISUSING\nMITCH\nMITCHELL\nMITER\nMITIGATE\nMITIGATED\nMITIGATES\nMITIGATING\nMITIGATION\nMITIGATIVE\nMITRE\nMITRES\nMITTEN\nMITTENS\nMIX\nMIXED\nMIXER\nMIXERS\nMIXES\nMIXING\nMIXTURE\nMIXTURES\nMIXUP\nMIZAR\nMNEMONIC\nMNEMONICALLY\nMNEMONICS\nMOAN\nMOANED\nMOANS\nMOAT\nMOATS\nMOB\nMOBIL\nMOBILE\nMOBILITY\nMOBS\nMOBSTER\nMOCCASIN\nMOCCASINS\nMOCK\nMOCKED\nMOCKER\nMOCKERY\nMOCKING\nMOCKINGBIRD\nMOCKS\nMOCKUP\nMODAL\nMODALITIES\nMODALITY\nMODALLY\nMODE\nMODEL\nMODELED\nMODELING\nMODELINGS\nMODELS\nMODEM\nMODEMS\nMODERATE\nMODERATED\nMODERATELY\nMODERATENESS\nMODERATES\nMODERATING\nMODERATION\nMODERN\nMODERNITY\nMODERNIZE\nMODERNIZED\nMODERNIZER\nMODERNIZING\nMODERNLY\nMODERNNESS\nMODERNS\nMODES\nMODEST\nMODESTLY\nMODESTO\nMODESTY\nMODICUM\nMODIFIABILITY\nMODIFIABLE\nMODIFICATION\nMODIFICATIONS\nMODIFIED\nMODIFIER\nMODIFIERS\nMODIFIES\nMODIFY\nMODIFYING\nMODULA\nMODULAR\nMODULARITY\nMODULARIZATION\nMODULARIZE\nMODULARIZED\nMODULARIZES\nMODULARIZING\nMODULARLY\nMODULATE\nMODULATED\nMODULATES\nMODULATING\nMODULATION\nMODULATIONS\nMODULATOR\nMODULATORS\nMODULE\nMODULES\nMODULI\nMODULO\nMODULUS\nMODUS\nMOE\nMOEN\nMOGADISCIO\nMOGADISHU\nMOGHUL\nMOHAMMED\nMOHAMMEDAN\nMOHAMMEDANISM\nMOHAMMEDANIZATION\nMOHAMMEDANIZATIONS\nMOHAMMEDANIZE\nMOHAMMEDANIZES\nMOHAWK\nMOHR\nMOINES\nMOISEYEV\nMOIST\nMOISTEN\nMOISTLY\nMOISTNESS\nMOISTURE\nMOLAR\nMOLASSES\nMOLD\nMOLDAVIA\nMOLDED\nMOLDER\nMOLDING\nMOLDS\nMOLE\nMOLECULAR\nMOLECULE\nMOLECULES\nMOLEHILL\nMOLES\nMOLEST\nMOLESTED\nMOLESTING\nMOLESTS\nMOLIERE\nMOLINE\nMOLL\nMOLLIE\nMOLLIFY\nMOLLUSK\nMOLLY\nMOLLYCODDLE\nMOLOCH\nMOLOCHIZE\nMOLOCHIZES\nMOLOTOV\nMOLTEN\nMOLUCCAS\nMOMENT\nMOMENTARILY\nMOMENTARINESS\nMOMENTARY\nMOMENTOUS\nMOMENTOUSLY\nMOMENTOUSNESS\nMOMENTS\nMOMENTUM\nMOMMY\nMONA\nMONACO\nMONADIC\nMONARCH\nMONARCHIES\nMONARCHS\nMONARCHY\nMONASH\nMONASTERIES\nMONASTERY\nMONASTIC\nMONDAY\nMONDAYS\nMONET\nMONETARISM\nMONETARY\nMONEY\nMONEYED\nMONEYS\nMONFORT\nMONGOLIA\nMONGOLIAN\nMONGOLIANISM\nMONGOOSE\nMONICA\nMONITOR\nMONITORED\nMONITORING\nMONITORS\nMONK\nMONKEY\nMONKEYED\nMONKEYING\nMONKEYS\nMONKISH\nMONKS\nMONMOUTH\nMONOALPHABETIC\nMONOCEROS\nMONOCHROMATIC\nMONOCHROME\nMONOCOTYLEDON\nMONOCULAR\nMONOGAMOUS\nMONOGAMY\nMONOGRAM\nMONOGRAMS\nMONOGRAPH\nMONOGRAPHES\nMONOGRAPHS\nMONOLITH\nMONOLITHIC\nMONOLOGUE\nMONONGAHELA\nMONOPOLIES\nMONOPOLIZE\nMONOPOLIZED\nMONOPOLIZING\nMONOPOLY\nMONOPROGRAMMED\nMONOPROGRAMMING\nMONOSTABLE\nMONOTHEISM\nMONOTONE\nMONOTONIC\nMONOTONICALLY\nMONOTONICITY\nMONOTONOUS\nMONOTONOUSLY\nMONOTONOUSNESS\nMONOTONY\nMONROE\nMONROVIA\nMONSANTO\nMONSOON\nMONSTER\nMONSTERS\nMONSTROSITY\nMONSTROUS\nMONSTROUSLY\nMONT\nMONTAGUE\nMONTAIGNE\nMONTANA\nMONTANAN\nMONTCLAIR\nMONTENEGRIN\nMONTENEGRO\nMONTEREY\nMONTEVERDI\nMONTEVIDEO\nMONTGOMERY\nMONTH\nMONTHLY\nMONTHS\nMONTICELLO\nMONTMARTRE\nMONTPELIER\nMONTRACHET\nMONTREAL\nMONTY\nMONUMENT\nMONUMENTAL\nMONUMENTALLY\nMONUMENTS\nMOO\nMOOD\nMOODINESS\nMOODS\nMOODY\nMOON\nMOONED\nMOONEY\nMOONING\nMOONLIGHT\nMOONLIGHTER\nMOONLIGHTING\nMOONLIKE\nMOONLIT\nMOONS\nMOONSHINE\nMOOR\nMOORE\nMOORED\nMOORING\nMOORINGS\nMOORISH\nMOORS\nMOOSE\nMOOT\nMOP\nMOPED\nMOPS\nMORAINE\nMORAL\nMORALE\nMORALITIES\nMORALITY\nMORALLY\nMORALS\nMORAN\nMORASS\nMORATORIUM\nMORAVIA\nMORAVIAN\nMORAVIANIZED\nMORAVIANIZEDS\nMORBID\nMORBIDLY\nMORBIDNESS\nMORE\nMOREHOUSE\nMORELAND\nMOREOVER\nMORES\nMORESBY\nMORGAN\nMORIARTY\nMORIBUND\nMORLEY\nMORMON\nMORN\nMORNING\nMORNINGS\nMOROCCAN\nMOROCCO\nMORON\nMOROSE\nMORPHINE\nMORPHISM\nMORPHISMS\nMORPHOLOGICAL\nMORPHOLOGY\nMORRILL\nMORRIS\nMORRISON\nMORRISSEY\nMORRISTOWN\nMORROW\nMORSE\nMORSEL\nMORSELS\nMORTAL\nMORTALITY\nMORTALLY\nMORTALS\nMORTAR\nMORTARED\nMORTARING\nMORTARS\nMORTEM\nMORTGAGE\nMORTGAGES\nMORTICIAN\nMORTIFICATION\nMORTIFIED\nMORTIFIES\nMORTIFY\nMORTIFYING\nMORTIMER\nMORTON\nMOSAIC\nMOSAICS\nMOSCONE\nMOSCOW\nMOSER\nMOSES\nMOSLEM\nMOSLEMIZE\nMOSLEMIZES\nMOSLEMS\nMOSQUE\nMOSQUITO\nMOSQUITOES\nMOSS\nMOSSBERG\nMOSSES\nMOSSY\nMOST\nMOSTLY\nMOTEL\nMOTELS\nMOTH\nMOTHBALL\nMOTHBALLS\nMOTHER\nMOTHERED\nMOTHERER\nMOTHERERS\nMOTHERHOOD\nMOTHERING\nMOTHERLAND\nMOTHERLY\nMOTHERS\nMOTIF\nMOTIFS\nMOTION\nMOTIONED\nMOTIONING\nMOTIONLESS\nMOTIONLESSLY\nMOTIONLESSNESS\nMOTIONS\nMOTIVATE\nMOTIVATED\nMOTIVATES\nMOTIVATING\nMOTIVATION\nMOTIVATIONS\nMOTIVE\nMOTIVES\nMOTLEY\nMOTOR\nMOTORCAR\nMOTORCARS\nMOTORCYCLE\nMOTORCYCLES\nMOTORING\nMOTORIST\nMOTORISTS\nMOTORIZE\nMOTORIZED\nMOTORIZES\nMOTORIZING\nMOTOROLA\nMOTORS\nMOTTO\nMOTTOES\nMOULD\nMOULDING\nMOULTON\nMOUND\nMOUNDED\nMOUNDS\nMOUNT\nMOUNTABLE\nMOUNTAIN\nMOUNTAINEER\nMOUNTAINEERING\nMOUNTAINEERS\nMOUNTAINOUS\nMOUNTAINOUSLY\nMOUNTAINS\nMOUNTED\nMOUNTER\nMOUNTING\nMOUNTINGS\nMOUNTS\nMOURN\nMOURNED\nMOURNER\nMOURNERS\nMOURNFUL\nMOURNFULLY\nMOURNFULNESS\nMOURNING\nMOURNS\nMOUSE\nMOUSER\nMOUSES\nMOUSETRAP\nMOUSY\nMOUTH\nMOUTHE\nMOUTHED\nMOUTHES\nMOUTHFUL\nMOUTHING\nMOUTHPIECE\nMOUTHS\nMOUTON\nMOVABLE\nMOVE\nMOVED\nMOVEMENT\nMOVEMENTS\nMOVER\nMOVERS\nMOVES\nMOVIE\nMOVIES\nMOVING\nMOVINGS\nMOW\nMOWED\nMOWER\nMOWS\nMOYER\nMOZART\nMUCH\nMUCK\nMUCKER\nMUCKING\nMUCUS\nMUD\nMUDD\nMUDDIED\nMUDDINESS\nMUDDLE\nMUDDLED\nMUDDLEHEAD\nMUDDLER\nMUDDLERS\nMUDDLES\nMUDDLING\nMUDDY\nMUELLER\nMUENSTER\nMUFF\nMUFFIN\nMUFFINS\nMUFFLE\nMUFFLED\nMUFFLER\nMUFFLES\nMUFFLING\nMUFFS\nMUG\nMUGGING\nMUGS\nMUHAMMAD\nMUIR\nMUKDEN\nMULATTO\nMULBERRIES\nMULBERRY\nMULE\nMULES\nMULL\nMULLAH\nMULLEN\nMULTI\nMULTIBIT\nMULTIBUS\nMULTIBYTE\nMULTICAST\nMULTICASTING\nMULTICASTS\nMULTICELLULAR\nMULTICOMPUTER\nMULTICS\nMULTICS\nMULTIDIMENSIONAL\nMULTILATERAL\nMULTILAYER\nMULTILAYERED\nMULTILEVEL\nMULTIMEDIA\nMULTINATIONAL\nMULTIPLE\nMULTIPLES\nMULTIPLEX\nMULTIPLEXED\nMULTIPLEXER\nMULTIPLEXERS\nMULTIPLEXES\nMULTIPLEXING\nMULTIPLEXOR\nMULTIPLEXORS\nMULTIPLICAND\nMULTIPLICANDS\nMULTIPLICATION\nMULTIPLICATIONS\nMULTIPLICATIVE\nMULTIPLICATIVES\nMULTIPLICITY\nMULTIPLIED\nMULTIPLIER\nMULTIPLIERS\nMULTIPLIES\nMULTIPLY\nMULTIPLYING\nMULTIPROCESS\nMULTIPROCESSING\nMULTIPROCESSOR\nMULTIPROCESSORS\nMULTIPROGRAM\nMULTIPROGRAMMED\nMULTIPROGRAMMING\nMULTISTAGE\nMULTITUDE\nMULTITUDES\nMULTIUSER\nMULTIVARIATE\nMULTIWORD\nMUMBLE\nMUMBLED\nMUMBLER\nMUMBLERS\nMUMBLES\nMUMBLING\nMUMBLINGS\nMUMFORD\nMUMMIES\nMUMMY\nMUNCH\nMUNCHED\nMUNCHING\nMUNCIE\nMUNDANE\nMUNDANELY\nMUNDT\nMUNG\nMUNICH\nMUNICIPAL\nMUNICIPALITIES\nMUNICIPALITY\nMUNICIPALLY\nMUNITION\nMUNITIONS\nMUNROE\nMUNSEY\nMUNSON\nMUONG\nMURAL\nMURDER\nMURDERED\nMURDERER\nMURDERERS\nMURDERING\nMURDEROUS\nMURDEROUSLY\nMURDERS\nMURIEL\nMURKY\nMURMUR\nMURMURED\nMURMURER\nMURMURING\nMURMURS\nMURPHY\nMURRAY\nMURROW\nMUSCAT\nMUSCLE\nMUSCLED\nMUSCLES\nMUSCLING\nMUSCOVITE\nMUSCOVY\nMUSCULAR\nMUSCULATURE\nMUSE\nMUSED\nMUSES\nMUSEUM\nMUSEUMS\nMUSH\nMUSHROOM\nMUSHROOMED\nMUSHROOMING\nMUSHROOMS\nMUSHY\nMUSIC\nMUSICAL\nMUSICALLY\nMUSICALS\nMUSICIAN\nMUSICIANLY\nMUSICIANS\nMUSICOLOGY\nMUSING\nMUSINGS\nMUSK\nMUSKEGON\nMUSKET\nMUSKETS\nMUSKOX\nMUSKOXEN\nMUSKRAT\nMUSKRATS\nMUSKS\nMUSLIM\nMUSLIMS\nMUSLIN\nMUSSEL\nMUSSELS\nMUSSOLINI\nMUSSOLINIS\nMUSSORGSKY\nMUST\nMUSTACHE\nMUSTACHED\nMUSTACHES\nMUSTARD\nMUSTER\nMUSTINESS\nMUSTS\nMUSTY\nMUTABILITY\nMUTABLE\nMUTABLENESS\nMUTANDIS\nMUTANT\nMUTATE\nMUTATED\nMUTATES\nMUTATING\nMUTATION\nMUTATIONS\nMUTATIS\nMUTATIVE\nMUTE\nMUTED\nMUTELY\nMUTENESS\nMUTILATE\nMUTILATED\nMUTILATES\nMUTILATING\nMUTILATION\nMUTINIES\nMUTINY\nMUTT\nMUTTER\nMUTTERED\nMUTTERER\nMUTTERERS\nMUTTERING\nMUTTERS\nMUTTON\nMUTUAL\nMUTUALLY\nMUZAK\nMUZO\nMUZZLE\nMUZZLES\nMYCENAE\nMYCENAEAN\nMYERS\nMYNHEER\nMYRA\nMYRIAD\nMYRON\nMYRTLE\nMYSELF\nMYSORE\nMYSTERIES\nMYSTERIOUS\nMYSTERIOUSLY\nMYSTERIOUSNESS\nMYSTERY\nMYSTIC\nMYSTICAL\nMYSTICS\nMYSTIFY\nMYTH\nMYTHICAL\nMYTHOLOGIES\nMYTHOLOGY\nNAB\nNABISCO\nNABLA\nNABLAS\nNADIA\nNADINE\nNADIR\nNAG\nNAGASAKI\nNAGGED\nNAGGING\nNAGOYA\nNAGS\nNAGY\nNAIL\nNAILED\nNAILING\nNAILS\nNAIR\nNAIROBI\nNAIVE\nNAIVELY\nNAIVENESS\nNAIVETE\nNAKAMURA\nNAKAYAMA\nNAKED\nNAKEDLY\nNAKEDNESS\nNAKOMA\nNAME\nNAMEABLE\nNAMED\nNAMELESS\nNAMELESSLY\nNAMELY\nNAMER\nNAMERS\nNAMES\nNAMESAKE\nNAMESAKES\nNAMING\nNAN\nNANCY\nNANETTE\nNANKING\nNANOINSTRUCTION\nNANOINSTRUCTIONS\nNANOOK\nNANOPROGRAM\nNANOPROGRAMMING\nNANOSECOND\nNANOSECONDS\nNANOSTORE\nNANOSTORES\nNANTUCKET\nNAOMI\nNAP\nNAPKIN\nNAPKINS\nNAPLES\nNAPOLEON\nNAPOLEONIC\nNAPOLEONIZE\nNAPOLEONIZES\nNAPS\nNARBONNE\nNARCISSUS\nNARCOTIC\nNARCOTICS\nNARRAGANSETT\nNARRATE\nNARRATION\nNARRATIVE\nNARRATIVES\nNARROW\nNARROWED\nNARROWER\nNARROWEST\nNARROWING\nNARROWLY\nNARROWNESS\nNARROWS\nNARY\nNASA\nNASAL\nNASALLY\nNASAS\nNASH\nNASHUA\nNASHVILLE\nNASSAU\nNASTIER\nNASTIEST\nNASTILY\nNASTINESS\nNASTY\nNAT\nNATAL\nNATALIE\nNATCHEZ\nNATE\nNATHAN\nNATHANIEL\nNATION\nNATIONAL\nNATIONALIST\nNATIONALISTS\nNATIONALITIES\nNATIONALITY\nNATIONALIZATION\nNATIONALIZE\nNATIONALIZED\nNATIONALIZES\nNATIONALIZING\nNATIONALLY\nNATIONALS\nNATIONHOOD\nNATIONS\nNATIONWIDE\nNATIVE\nNATIVELY\nNATIVES\nNATIVITY\nNATO\nNATOS\nNATURAL\nNATURALISM\nNATURALIST\nNATURALIZATION\nNATURALLY\nNATURALNESS\nNATURALS\nNATURE\nNATURED\nNATURES\nNAUGHT\nNAUGHTIER\nNAUGHTINESS\nNAUGHTY\nNAUR\nNAUSEA\nNAUSEATE\nNAUSEUM\nNAVAHO\nNAVAJO\nNAVAL\nNAVALLY\nNAVEL\nNAVIES\nNAVIGABLE\nNAVIGATE\nNAVIGATED\nNAVIGATES\nNAVIGATING\nNAVIGATION\nNAVIGATOR\nNAVIGATORS\nNAVONA\nNAVY\nNAY\nNAZARENE\nNAZARETH\nNAZI\nNAZIS\nNAZISM\nNDJAMENA\nNEAL\nNEANDERTHAL\nNEAPOLITAN\nNEAR\nNEARBY\nNEARED\nNEARER\nNEAREST\nNEARING\nNEARLY\nNEARNESS\nNEARS\nNEARSIGHTED\nNEAT\nNEATER\nNEATEST\nNEATLY\nNEATNESS\nNEBRASKA\nNEBRASKAN\nNEBUCHADNEZZAR\nNEBULA\nNEBULAR\nNEBULOUS\nNECESSARIES\nNECESSARILY\nNECESSARY\nNECESSITATE\nNECESSITATED\nNECESSITATES\nNECESSITATING\nNECESSITATION\nNECESSITIES\nNECESSITY\nNECK\nNECKING\nNECKLACE\nNECKLACES\nNECKLINE\nNECKS\nNECKTIE\nNECKTIES\nNECROSIS\nNECTAR\nNED\nNEED\nNEEDED\nNEEDFUL\nNEEDHAM\nNEEDING\nNEEDLE\nNEEDLED\nNEEDLER\nNEEDLERS\nNEEDLES\nNEEDLESS\nNEEDLESSLY\nNEEDLESSNESS\nNEEDLEWORK\nNEEDLING\nNEEDS\nNEEDY\nNEFF\nNEGATE\nNEGATED\nNEGATES\nNEGATING\nNEGATION\nNEGATIONS\nNEGATIVE\nNEGATIVELY\nNEGATIVES\nNEGATOR\nNEGATORS\nNEGLECT\nNEGLECTED\nNEGLECTING\nNEGLECTS\nNEGLIGEE\nNEGLIGENCE\nNEGLIGENT\nNEGLIGIBLE\nNEGOTIABLE\nNEGOTIATE\nNEGOTIATED\nNEGOTIATES\nNEGOTIATING\nNEGOTIATION\nNEGOTIATIONS\nNEGRO\nNEGROES\nNEGROID\nNEGROIZATION\nNEGROIZATIONS\nNEGROIZE\nNEGROIZES\nNEHRU\nNEIGH\nNEIGHBOR\nNEIGHBORHOOD\nNEIGHBORHOODS\nNEIGHBORING\nNEIGHBORLY\nNEIGHBORS\nNEIL\nNEITHER\nNELL\nNELLIE\nNELSEN\nNELSON\nNEMESIS\nNEOCLASSIC\nNEON\nNEONATAL\nNEOPHYTE\nNEOPHYTES\nNEPAL\nNEPALI\nNEPHEW\nNEPHEWS\nNEPTUNE\nNERO\nNERVE\nNERVES\nNERVOUS\nNERVOUSLY\nNERVOUSNESS\nNESS\nNEST\nNESTED\nNESTER\nNESTING\nNESTLE\nNESTLED\nNESTLES\nNESTLING\nNESTOR\nNESTS\nNET\nNETHER\nNETHERLANDS\nNETS\nNETTED\nNETTING\nNETTLE\nNETTLED\nNETWORK\nNETWORKED\nNETWORKING\nNETWORKS\nNEUMANN\nNEURAL\nNEURITIS\nNEUROLOGICAL\nNEUROLOGISTS\nNEURON\nNEURONS\nNEUROSES\nNEUROSIS\nNEUROTIC\nNEUTER\nNEUTRAL\nNEUTRALITIES\nNEUTRALITY\nNEUTRALIZE\nNEUTRALIZED\nNEUTRALIZING\nNEUTRALLY\nNEUTRINO\nNEUTRINOS\nNEUTRON\nNEVA\nNEVADA\nNEVER\nNEVERTHELESS\nNEVINS\nNEW\nNEWARK\nNEWBOLD\nNEWBORN\nNEWBURY\nNEWBURYPORT\nNEWCASTLE\nNEWCOMER\nNEWCOMERS\nNEWELL\nNEWER\nNEWEST\nNEWFOUNDLAND\nNEWLY\nNEWLYWED\nNEWMAN\nNEWMANIZE\nNEWMANIZES\nNEWNESS\nNEWPORT\nNEWS\nNEWSCAST\nNEWSGROUP\nNEWSLETTER\nNEWSLETTERS\nNEWSMAN\nNEWSMEN\nNEWSPAPER\nNEWSPAPERS\nNEWSSTAND\nNEWSWEEK\nNEWSWEEKLY\nNEWT\nNEWTON\nNEWTONIAN\nNEXT\nNGUYEN\nNIAGARA\nNIAMEY\nNIBBLE\nNIBBLED\nNIBBLER\nNIBBLERS\nNIBBLES\nNIBBLING\nNIBELUNG\nNICARAGUA\nNICCOLO\nNICE\nNICELY\nNICENESS\nNICER\nNICEST\nNICHE\nNICHOLAS\nNICHOLLS\nNICHOLS\nNICHOLSON\nNICK\nNICKED\nNICKEL\nNICKELS\nNICKER\nNICKING\nNICKLAUS\nNICKNAME\nNICKNAMED\nNICKNAMES\nNICKS\nNICODEMUS\nNICOSIA\nNICOTINE\nNIECE\nNIECES\nNIELSEN\nNIELSON\nNIETZSCHE\nNIFTY\nNIGER\nNIGERIA\nNIGERIAN\nNIGH\nNIGHT\nNIGHTCAP\nNIGHTCLUB\nNIGHTFALL\nNIGHTGOWN\nNIGHTINGALE\nNIGHTINGALES\nNIGHTLY\nNIGHTMARE\nNIGHTMARES\nNIGHTMARISH\nNIGHTS\nNIGHTTIME\nNIHILISM\nNIJINSKY\nNIKKO\nNIKOLAI\nNIL\nNILE\nNILSEN\nNILSSON\nNIMBLE\nNIMBLENESS\nNIMBLER\nNIMBLY\nNIMBUS\nNINA\nNINE\nNINEFOLD\nNINES\nNINETEEN\nNINETEENS\nNINETEENTH\nNINETIES\nNINETIETH\nNINETY\nNINEVEH\nNINTH\nNIOBE\nNIP\nNIPPLE\nNIPPON\nNIPPONIZE\nNIPPONIZES\nNIPS\nNITRIC\nNITROGEN\nNITROUS\nNITTY\nNIXON\nNOAH\nNOBEL\nNOBILITY\nNOBLE\nNOBLEMAN\nNOBLENESS\nNOBLER\nNOBLES\nNOBLEST\nNOBLY\nNOBODY\nNOCTURNAL\nNOCTURNALLY\nNOD\nNODAL\nNODDED\nNODDING\nNODE\nNODES\nNODS\nNODULAR\nNODULE\nNOEL\nNOETHERIAN\nNOISE\nNOISELESS\nNOISELESSLY\nNOISES\nNOISIER\nNOISILY\nNOISINESS\nNOISY\nNOLAN\nNOLL\nNOMENCLATURE\nNOMINAL\nNOMINALLY\nNOMINATE\nNOMINATED\nNOMINATING\nNOMINATION\nNOMINATIVE\nNOMINEE\nNON\nNONADAPTIVE\nNONBIODEGRADABLE\nNONBLOCKING\nNONCE\nNONCHALANT\nNONCOMMERCIAL\nNONCOMMUNICATION\nNONCONSECUTIVELY\nNONCONSERVATIVE\nNONCRITICAL\nNONCYCLIC\nNONDECREASING\nNONDESCRIPT\nNONDESCRIPTLY\nNONDESTRUCTIVELY\nNONDETERMINACY\nNONDETERMINATE\nNONDETERMINATELY\nNONDETERMINISM\nNONDETERMINISTIC\nNONDETERMINISTICALLY\nNONE\nNONEMPTY\nNONETHELESS\nNONEXISTENCE\nNONEXISTENT\nNONEXTENSIBLE\nNONFUNCTIONAL\nNONGOVERNMENTAL\nNONIDEMPOTENT\nNONINTERACTING\nNONINTERFERENCE\nNONINTERLEAVED\nNONINTRUSIVE\nNONINTUITIVE\nNONINVERTING\nNONLINEAR\nNONLINEARITIES\nNONLINEARITY\nNONLINEARLY\nNONLOCAL\nNONMASKABLE\nNONMATHEMATICAL\nNONMILITARY\nNONNEGATIVE\nNONNEGLIGIBLE\nNONNUMERICAL\nNONOGENARIAN\nNONORTHOGONAL\nNONORTHOGONALITY\nNONPERISHABLE\nNONPERSISTENT\nNONPORTABLE\nNONPROCEDURAL\nNONPROCEDURALLY\nNONPROFIT\nNONPROGRAMMABLE\nNONPROGRAMMER\nNONSEGMENTED\nNONSENSE\nNONSENSICAL\nNONSEQUENTIAL\nNONSPECIALIST\nNONSPECIALISTS\nNONSTANDARD\nNONSYNCHRONOUS\nNONTECHNICAL\nNONTERMINAL\nNONTERMINALS\nNONTERMINATING\nNONTERMINATION\nNONTHERMAL\nNONTRANSPARENT\nNONTRIVIAL\nNONUNIFORM\nNONUNIFORMITY\nNONZERO\nNOODLE\nNOOK\nNOOKS\nNOON\nNOONDAY\nNOONS\nNOONTIDE\nNOONTIME\nNOOSE\nNOR\nNORA\nNORDHOFF\nNORDIC\nNORDSTROM\nNOREEN\nNORFOLK\nNORM\nNORMA\nNORMAL\nNORMALCY\nNORMALITY\nNORMALIZATION\nNORMALIZE\nNORMALIZED\nNORMALIZES\nNORMALIZING\nNORMALLY\nNORMALS\nNORMAN\nNORMANDY\nNORMANIZATION\nNORMANIZATIONS\nNORMANIZE\nNORMANIZER\nNORMANIZERS\nNORMANIZES\nNORMATIVE\nNORMS\nNORRIS\nNORRISTOWN\nNORSE\nNORTH\nNORTHAMPTON\nNORTHBOUND\nNORTHEAST\nNORTHEASTER\nNORTHEASTERN\nNORTHERLY\nNORTHERN\nNORTHERNER\nNORTHERNERS\nNORTHERNLY\nNORTHFIELD\nNORTHROP\nNORTHRUP\nNORTHUMBERLAND\nNORTHWARD\nNORTHWARDS\nNORTHWEST\nNORTHWESTERN\nNORTON\nNORWALK\nNORWAY\nNORWEGIAN\nNORWICH\nNOSE\nNOSED\nNOSES\nNOSING\nNOSTALGIA\nNOSTALGIC\nNOSTRADAMUS\nNOSTRAND\nNOSTRIL\nNOSTRILS\nNOT\nNOTABLE\nNOTABLES\nNOTABLY\nNOTARIZE\nNOTARIZED\nNOTARIZES\nNOTARIZING\nNOTARY\nNOTATION\nNOTATIONAL\nNOTATIONS\nNOTCH\nNOTCHED\nNOTCHES\nNOTCHING\nNOTE\nNOTEBOOK\nNOTEBOOKS\nNOTED\nNOTES\nNOTEWORTHY\nNOTHING\nNOTHINGNESS\nNOTHINGS\nNOTICE\nNOTICEABLE\nNOTICEABLY\nNOTICED\nNOTICES\nNOTICING\nNOTIFICATION\nNOTIFICATIONS\nNOTIFIED\nNOTIFIER\nNOTIFIERS\nNOTIFIES\nNOTIFY\nNOTIFYING\nNOTING\nNOTION\nNOTIONS\nNOTORIETY\nNOTORIOUS\nNOTORIOUSLY\nNOTRE\nNOTTINGHAM\nNOTWITHSTANDING\nNOUAKCHOTT\nNOUN\nNOUNS\nNOURISH\nNOURISHED\nNOURISHES\nNOURISHING\nNOURISHMENT\nNOVAK\nNOVEL\nNOVELIST\nNOVELISTS\nNOVELS\nNOVELTIES\nNOVELTY\nNOVEMBER\nNOVEMBERS\nNOVICE\nNOVICES\nNOVOSIBIRSK\nNOW\nNOWADAYS\nNOWHERE\nNOXIOUS\nNOYES\nNOZZLE\nNUANCE\nNUANCES\nNUBIA\nNUBIAN\nNUBILE\nNUCLEAR\nNUCLEI\nNUCLEIC\nNUCLEOTIDE\nNUCLEOTIDES\nNUCLEUS\nNUCLIDE\nNUDE\nNUDGE\nNUDGED\nNUDITY\nNUGENT\nNUGGET\nNUISANCE\nNUISANCES\nNULL\nNULLARY\nNULLED\nNULLIFIED\nNULLIFIERS\nNULLIFIES\nNULLIFY\nNULLIFYING\nNULLS\nNUMB\nNUMBED\nNUMBER\nNUMBERED\nNUMBERER\nNUMBERING\nNUMBERLESS\nNUMBERS\nNUMBING\nNUMBLY\nNUMBNESS\nNUMBS\nNUMERABLE\nNUMERAL\nNUMERALS\nNUMERATOR\nNUMERATORS\nNUMERIC\nNUMERICAL\nNUMERICALLY\nNUMERICS\nNUMEROUS\nNUMISMATIC\nNUMISMATIST\nNUN\nNUNS\nNUPTIAL\nNURSE\nNURSED\nNURSERIES\nNURSERY\nNURSES\nNURSING\nNURTURE\nNURTURED\nNURTURES\nNURTURING\nNUT\nNUTATE\nNUTRIA\nNUTRIENT\nNUTRITION\nNUTRITIOUS\nNUTS\nNUTSHELL\nNUTSHELLS\nNUZZLE\nNYLON\nNYMPH\nNYMPHOMANIA\nNYMPHOMANIAC\nNYMPHS\nNYQUIST\nOAF\nOAK\nOAKEN\nOAKLAND\nOAKLEY\nOAKMONT\nOAKS\nOAR\nOARS\nOASES\nOASIS\nOAT\nOATEN\nOATH\nOATHS\nOATMEAL\nOATS\nOBEDIENCE\nOBEDIENCES\nOBEDIENT\nOBEDIENTLY\nOBELISK\nOBERLIN\nOBERON\nOBESE\nOBEY\nOBEYED\nOBEYING\nOBEYS\nOBFUSCATE\nOBFUSCATORY\nOBITUARY\nOBJECT\nOBJECTED\nOBJECTING\nOBJECTION\nOBJECTIONABLE\nOBJECTIONS\nOBJECTIVE\nOBJECTIVELY\nOBJECTIVES\nOBJECTOR\nOBJECTORS\nOBJECTS\nOBLIGATED\nOBLIGATION\nOBLIGATIONS\nOBLIGATORY\nOBLIGE\nOBLIGED\nOBLIGES\nOBLIGING\nOBLIGINGLY\nOBLIQUE\nOBLIQUELY\nOBLIQUENESS\nOBLITERATE\nOBLITERATED\nOBLITERATES\nOBLITERATING\nOBLITERATION\nOBLIVION\nOBLIVIOUS\nOBLIVIOUSLY\nOBLIVIOUSNESS\nOBLONG\nOBNOXIOUS\nOBOE\nOBSCENE\nOBSCURE\nOBSCURED\nOBSCURELY\nOBSCURER\nOBSCURES\nOBSCURING\nOBSCURITIES\nOBSCURITY\nOBSEQUIOUS\nOBSERVABLE\nOBSERVANCE\nOBSERVANCES\nOBSERVANT\nOBSERVATION\nOBSERVATIONS\nOBSERVATORY\nOBSERVE\nOBSERVED\nOBSERVER\nOBSERVERS\nOBSERVES\nOBSERVING\nOBSESSION\nOBSESSIONS\nOBSESSIVE\nOBSOLESCENCE\nOBSOLESCENT\nOBSOLETE\nOBSOLETED\nOBSOLETES\nOBSOLETING\nOBSTACLE\nOBSTACLES\nOBSTINACY\nOBSTINATE\nOBSTINATELY\nOBSTRUCT\nOBSTRUCTED\nOBSTRUCTING\nOBSTRUCTION\nOBSTRUCTIONS\nOBSTRUCTIVE\nOBTAIN\nOBTAINABLE\nOBTAINABLY\nOBTAINED\nOBTAINING\nOBTAINS\nOBVIATE\nOBVIATED\nOBVIATES\nOBVIATING\nOBVIATION\nOBVIATIONS\nOBVIOUS\nOBVIOUSLY\nOBVIOUSNESS\nOCCAM\nOCCASION\nOCCASIONAL\nOCCASIONALLY\nOCCASIONED\nOCCASIONING\nOCCASIONINGS\nOCCASIONS\nOCCIDENT\nOCCIDENTAL\nOCCIDENTALIZATION\nOCCIDENTALIZATIONS\nOCCIDENTALIZE\nOCCIDENTALIZED\nOCCIDENTALIZES\nOCCIDENTALIZING\nOCCIDENTALS\nOCCIPITAL\nOCCLUDE\nOCCLUDED\nOCCLUDES\nOCCLUSION\nOCCLUSIONS\nOCCULT\nOCCUPANCIES\nOCCUPANCY\nOCCUPANT\nOCCUPANTS\nOCCUPATION\nOCCUPATIONAL\nOCCUPATIONALLY\nOCCUPATIONS\nOCCUPIED\nOCCUPIER\nOCCUPIES\nOCCUPY\nOCCUPYING\nOCCUR\nOCCURRED\nOCCURRENCE\nOCCURRENCES\nOCCURRING\nOCCURS\nOCEAN\nOCEANIA\nOCEANIC\nOCEANOGRAPHY\nOCEANS\nOCONOMOWOC\nOCTAGON\nOCTAGONAL\nOCTAHEDRA\nOCTAHEDRAL\nOCTAHEDRON\nOCTAL\nOCTANE\nOCTAVE\nOCTAVES\nOCTAVIA\nOCTET\nOCTETS\nOCTOBER\nOCTOBERS\nOCTOGENARIAN\nOCTOPUS\nODD\nODDER\nODDEST\nODDITIES\nODDITY\nODDLY\nODDNESS\nODDS\nODE\nODERBERG\nODERBERGS\nODES\nODESSA\nODIN\nODIOUS\nODIOUSLY\nODIOUSNESS\nODIUM\nODOR\nODOROUS\nODOROUSLY\nODOROUSNESS\nODORS\nODYSSEUS\nODYSSEY\nOEDIPAL\nOEDIPALLY\nOEDIPUS\nOFF\nOFFENBACH\nOFFEND\nOFFENDED\nOFFENDER\nOFFENDERS\nOFFENDING\nOFFENDS\nOFFENSE\nOFFENSES\nOFFENSIVE\nOFFENSIVELY\nOFFENSIVENESS\nOFFER\nOFFERED\nOFFERER\nOFFERERS\nOFFERING\nOFFERINGS\nOFFERS\nOFFHAND\nOFFICE\nOFFICEMATE\nOFFICER\nOFFICERS\nOFFICES\nOFFICIAL\nOFFICIALDOM\nOFFICIALLY\nOFFICIALS\nOFFICIATE\nOFFICIO\nOFFICIOUS\nOFFICIOUSLY\nOFFICIOUSNESS\nOFFING\nOFFLOAD\nOFFS\nOFFSET\nOFFSETS\nOFFSETTING\nOFFSHORE\nOFFSPRING\nOFT\nOFTEN\nOFTENTIMES\nOGDEN\nOHIO\nOHM\nOHMMETER\nOIL\nOILCLOTH\nOILED\nOILER\nOILERS\nOILIER\nOILIEST\nOILING\nOILS\nOILY\nOINTMENT\nOJIBWA\nOKAMOTO\nOKAY\nOKINAWA\nOKLAHOMA\nOKLAHOMAN\nOLAF\nOLAV\nOLD\nOLDEN\nOLDENBURG\nOLDER\nOLDEST\nOLDNESS\nOLDSMOBILE\nOLDUVAI\nOLDY\nOLEANDER\nOLEG\nOLEOMARGARINE\nOLGA\nOLIGARCHY\nOLIGOCENE\nOLIN\nOLIVE\nOLIVER\nOLIVERS\nOLIVES\nOLIVETTI\nOLIVIA\nOLIVIER\nOLSEN\nOLSON\nOLYMPIA\nOLYMPIAN\nOLYMPIANIZE\nOLYMPIANIZES\nOLYMPIC\nOLYMPICS\nOLYMPUS\nOMAHA\nOMAN\nOMEGA\nOMELET\nOMEN\nOMENS\nOMICRON\nOMINOUS\nOMINOUSLY\nOMINOUSNESS\nOMISSION\nOMISSIONS\nOMIT\nOMITS\nOMITTED\nOMITTING\nOMNIBUS\nOMNIDIRECTIONAL\nOMNIPOTENT\nOMNIPRESENT\nOMNISCIENT\nOMNISCIENTLY\nOMNIVORE\nONANISM\nONCE\nONCOLOGY\nONE\nONEIDA\nONENESS\nONEROUS\nONES\nONESELF\nONETIME\nONGOING\nONION\nONIONS\nONLINE\nONLOOKER\nONLY\nONONDAGA\nONRUSH\nONSET\nONSETS\nONSLAUGHT\nONTARIO\nONTO\nONTOLOGY\nONUS\nONWARD\nONWARDS\nONYX\nOOZE\nOOZED\nOPACITY\nOPAL\nOPALS\nOPAQUE\nOPAQUELY\nOPAQUENESS\nOPCODE\nOPEC\nOPEL\nOPEN\nOPENED\nOPENER\nOPENERS\nOPENING\nOPENINGS\nOPENLY\nOPENNESS\nOPENS\nOPERA\nOPERABLE\nOPERAND\nOPERANDI\nOPERANDS\nOPERAS\nOPERATE\nOPERATED\nOPERATES\nOPERATING\nOPERATION\nOPERATIONAL\nOPERATIONALLY\nOPERATIONS\nOPERATIVE\nOPERATIVES\nOPERATOR\nOPERATORS\nOPERETTA\nOPHIUCHUS\nOPHIUCUS\nOPIATE\nOPINION\nOPINIONS\nOPIUM\nOPOSSUM\nOPPENHEIMER\nOPPONENT\nOPPONENTS\nOPPORTUNE\nOPPORTUNELY\nOPPORTUNISM\nOPPORTUNISTIC\nOPPORTUNITIES\nOPPORTUNITY\nOPPOSABLE\nOPPOSE\nOPPOSED\nOPPOSES\nOPPOSING\nOPPOSITE\nOPPOSITELY\nOPPOSITENESS\nOPPOSITES\nOPPOSITION\nOPPRESS\nOPPRESSED\nOPPRESSES\nOPPRESSING\nOPPRESSION\nOPPRESSIVE\nOPPRESSOR\nOPPRESSORS\nOPPROBRIUM\nOPT\nOPTED\nOPTHALMIC\nOPTIC\nOPTICAL\nOPTICALLY\nOPTICS\nOPTIMA\nOPTIMAL\nOPTIMALITY\nOPTIMALLY\nOPTIMISM\nOPTIMIST\nOPTIMISTIC\nOPTIMISTICALLY\nOPTIMIZATION\nOPTIMIZATIONS\nOPTIMIZE\nOPTIMIZED\nOPTIMIZER\nOPTIMIZERS\nOPTIMIZES\nOPTIMIZING\nOPTIMUM\nOPTING\nOPTION\nOPTIONAL\nOPTIONALLY\nOPTIONS\nOPTOACOUSTIC\nOPTOMETRIST\nOPTOMETRY\nOPTS\nOPULENCE\nOPULENT\nOPUS\nORACLE\nORACLES\nORAL\nORALLY\nORANGE\nORANGES\nORANGUTAN\nORATION\nORATIONS\nORATOR\nORATORIES\nORATORS\nORATORY\nORB\nORBIT\nORBITAL\nORBITALLY\nORBITED\nORBITER\nORBITERS\nORBITING\nORBITS\nORCHARD\nORCHARDS\nORCHESTRA\nORCHESTRAL\nORCHESTRAS\nORCHESTRATE\nORCHID\nORCHIDS\nORDAIN\nORDAINED\nORDAINING\nORDAINS\nORDEAL\nORDER\nORDERED\nORDERING\nORDERINGS\nORDERLIES\nORDERLY\nORDERS\nORDINAL\nORDINANCE\nORDINANCES\nORDINARILY\nORDINARINESS\nORDINARY\nORDINATE\nORDINATES\nORDINATION\nORE\nOREGANO\nOREGON\nOREGONIANS\nORES\nORESTEIA\nORESTES\nORGAN\nORGANIC\nORGANISM\nORGANISMS\nORGANIST\nORGANISTS\nORGANIZABLE\nORGANIZATION\nORGANIZATIONAL\nORGANIZATIONALLY\nORGANIZATIONS\nORGANIZE\nORGANIZED\nORGANIZER\nORGANIZERS\nORGANIZES\nORGANIZING\nORGANS\nORGASM\nORGIASTIC\nORGIES\nORGY\nORIENT\nORIENTAL\nORIENTALIZATION\nORIENTALIZATIONS\nORIENTALIZE\nORIENTALIZED\nORIENTALIZES\nORIENTALIZING\nORIENTALS\nORIENTATION\nORIENTATIONS\nORIENTED\nORIENTING\nORIENTS\nORIFICE\nORIFICES\nORIGIN\nORIGINAL\nORIGINALITY\nORIGINALLY\nORIGINALS\nORIGINATE\nORIGINATED\nORIGINATES\nORIGINATING\nORIGINATION\nORIGINATOR\nORIGINATORS\nORIGINS\nORIN\nORINOCO\nORIOLE\nORION\nORKNEY\nORLANDO\nORLEANS\nORLICK\nORLY\nORNAMENT\nORNAMENTAL\nORNAMENTALLY\nORNAMENTATION\nORNAMENTED\nORNAMENTING\nORNAMENTS\nORNATE\nORNERY\nORONO\nORPHAN\nORPHANAGE\nORPHANED\nORPHANS\nORPHEUS\nORPHIC\nORPHICALLY\nORR\nORTEGA\nORTHANT\nORTHODONTIST\nORTHODOX\nORTHODOXY\nORTHOGONAL\nORTHOGONALITY\nORTHOGONALLY\nORTHOPEDIC\nORVILLE\nORWELL\nORWELLIAN\nOSAKA\nOSBERT\nOSBORN\nOSBORNE\nOSCAR\nOSCILLATE\nOSCILLATED\nOSCILLATES\nOSCILLATING\nOSCILLATION\nOSCILLATIONS\nOSCILLATOR\nOSCILLATORS\nOSCILLATORY\nOSCILLOSCOPE\nOSCILLOSCOPES\nOSGOOD\nOSHKOSH\nOSIRIS\nOSLO\nOSMOSIS\nOSMOTIC\nOSSIFY\nOSTENSIBLE\nOSTENSIBLY\nOSTENTATIOUS\nOSTEOPATH\nOSTEOPATHIC\nOSTEOPATHY\nOSTEOPOROSIS\nOSTRACISM\nOSTRANDER\nOSTRICH\nOSTRICHES\nOSWALD\nOTHELLO\nOTHER\nOTHERS\nOTHERWISE\nOTHERWORLDLY\nOTIS\nOTT\nOTTAWA\nOTTER\nOTTERS\nOTTO\nOTTOMAN\nOTTOMANIZATION\nOTTOMANIZATIONS\nOTTOMANIZE\nOTTOMANIZES\nOUAGADOUGOU\nOUCH\nOUGHT\nOUNCE\nOUNCES\nOUR\nOURS\nOURSELF\nOURSELVES\nOUST\nOUT\nOUTBOUND\nOUTBREAK\nOUTBREAKS\nOUTBURST\nOUTBURSTS\nOUTCAST\nOUTCASTS\nOUTCOME\nOUTCOMES\nOUTCRIES\nOUTCRY\nOUTDATED\nOUTDO\nOUTDOOR\nOUTDOORS\nOUTER\nOUTERMOST\nOUTFIT\nOUTFITS\nOUTFITTED\nOUTGOING\nOUTGREW\nOUTGROW\nOUTGROWING\nOUTGROWN\nOUTGROWS\nOUTGROWTH\nOUTING\nOUTLANDISH\nOUTLAST\nOUTLASTS\nOUTLAW\nOUTLAWED\nOUTLAWING\nOUTLAWS\nOUTLAY\nOUTLAYS\nOUTLET\nOUTLETS\nOUTLINE\nOUTLINED\nOUTLINES\nOUTLINING\nOUTLIVE\nOUTLIVED\nOUTLIVES\nOUTLIVING\nOUTLOOK\nOUTLYING\nOUTNUMBERED\nOUTPERFORM\nOUTPERFORMED\nOUTPERFORMING\nOUTPERFORMS\nOUTPOST\nOUTPOSTS\nOUTPUT\nOUTPUTS\nOUTPUTTING\nOUTRAGE\nOUTRAGED\nOUTRAGEOUS\nOUTRAGEOUSLY\nOUTRAGES\nOUTRIGHT\nOUTRUN\nOUTRUNS\nOUTS\nOUTSET\nOUTSIDE\nOUTSIDER\nOUTSIDERS\nOUTSKIRTS\nOUTSTANDING\nOUTSTANDINGLY\nOUTSTRETCHED\nOUTSTRIP\nOUTSTRIPPED\nOUTSTRIPPING\nOUTSTRIPS\nOUTVOTE\nOUTVOTED\nOUTVOTES\nOUTVOTING\nOUTWARD\nOUTWARDLY\nOUTWEIGH\nOUTWEIGHED\nOUTWEIGHING\nOUTWEIGHS\nOUTWIT\nOUTWITS\nOUTWITTED\nOUTWITTING\nOVAL\nOVALS\nOVARIES\nOVARY\nOVEN\nOVENS\nOVER\nOVERALL\nOVERALLS\nOVERBOARD\nOVERCAME\nOVERCOAT\nOVERCOATS\nOVERCOME\nOVERCOMES\nOVERCOMING\nOVERCROWD\nOVERCROWDED\nOVERCROWDING\nOVERCROWDS\nOVERDONE\nOVERDOSE\nOVERDRAFT\nOVERDRAFTS\nOVERDUE\nOVEREMPHASIS\nOVEREMPHASIZED\nOVERESTIMATE\nOVERESTIMATED\nOVERESTIMATES\nOVERESTIMATING\nOVERESTIMATION\nOVERFLOW\nOVERFLOWED\nOVERFLOWING\nOVERFLOWS\nOVERGROWN\nOVERHANG\nOVERHANGING\nOVERHANGS\nOVERHAUL\nOVERHAULING\nOVERHEAD\nOVERHEADS\nOVERHEAR\nOVERHEARD\nOVERHEARING\nOVERHEARS\nOVERJOY\nOVERJOYED\nOVERKILL\nOVERLAND\nOVERLAP\nOVERLAPPED\nOVERLAPPING\nOVERLAPS\nOVERLAY\nOVERLAYING\nOVERLAYS\nOVERLOAD\nOVERLOADED\nOVERLOADING\nOVERLOADS\nOVERLOOK\nOVERLOOKED\nOVERLOOKING\nOVERLOOKS\nOVERLY\nOVERNIGHT\nOVERNIGHTER\nOVERNIGHTERS\nOVERPOWER\nOVERPOWERED\nOVERPOWERING\nOVERPOWERS\nOVERPRINT\nOVERPRINTED\nOVERPRINTING\nOVERPRINTS\nOVERPRODUCTION\nOVERRIDDEN\nOVERRIDE\nOVERRIDES\nOVERRIDING\nOVERRODE\nOVERRULE\nOVERRULED\nOVERRULES\nOVERRUN\nOVERRUNNING\nOVERRUNS\nOVERSEAS\nOVERSEE\nOVERSEEING\nOVERSEER\nOVERSEERS\nOVERSEES\nOVERSHADOW\nOVERSHADOWED\nOVERSHADOWING\nOVERSHADOWS\nOVERSHOOT\nOVERSHOT\nOVERSIGHT\nOVERSIGHTS\nOVERSIMPLIFIED\nOVERSIMPLIFIES\nOVERSIMPLIFY\nOVERSIMPLIFYING\nOVERSIZED\nOVERSTATE\nOVERSTATED\nOVERSTATEMENT\nOVERSTATEMENTS\nOVERSTATES\nOVERSTATING\nOVERSTOCKS\nOVERSUBSCRIBED\nOVERT\nOVERTAKE\nOVERTAKEN\nOVERTAKER\nOVERTAKERS\nOVERTAKES\nOVERTAKING\nOVERTHREW\nOVERTHROW\nOVERTHROWN\nOVERTIME\nOVERTLY\nOVERTONE\nOVERTONES\nOVERTOOK\nOVERTURE\nOVERTURES\nOVERTURN\nOVERTURNED\nOVERTURNING\nOVERTURNS\nOVERUSE\nOVERVIEW\nOVERVIEWS\nOVERWHELM\nOVERWHELMED\nOVERWHELMING\nOVERWHELMINGLY\nOVERWHELMS\nOVERWORK\nOVERWORKED\nOVERWORKING\nOVERWORKS\nOVERWRITE\nOVERWRITES\nOVERWRITING\nOVERWRITTEN\nOVERZEALOUS\nOVID\nOWE\nOWED\nOWEN\nOWENS\nOWES\nOWING\nOWL\nOWLS\nOWN\nOWNED\nOWNER\nOWNERS\nOWNERSHIP\nOWNERSHIPS\nOWNING\nOWNS\nOXEN\nOXFORD\nOXIDE\nOXIDES\nOXIDIZE\nOXIDIZED\nOXNARD\nOXONIAN\nOXYGEN\nOYSTER\nOYSTERS\nOZARK\nOZARKS\nOZONE\nOZZIE\nPABLO\nPABST\nPACE\nPACED\nPACEMAKER\nPACER\nPACERS\nPACES\nPACIFIC\nPACIFICATION\nPACIFIED\nPACIFIER\nPACIFIES\nPACIFISM\nPACIFIST\nPACIFY\nPACING\nPACK\nPACKAGE\nPACKAGED\nPACKAGER\nPACKAGERS\nPACKAGES\nPACKAGING\nPACKAGINGS\nPACKARD\nPACKARDS\nPACKED\nPACKER\nPACKERS\nPACKET\nPACKETS\nPACKING\nPACKS\nPACKWOOD\nPACT\nPACTS\nPAD\nPADDED\nPADDING\nPADDLE\nPADDOCK\nPADDY\nPADLOCK\nPADS\nPAGAN\nPAGANINI\nPAGANS\nPAGE\nPAGEANT\nPAGEANTRY\nPAGEANTS\nPAGED\nPAGER\nPAGERS\nPAGES\nPAGINATE\nPAGINATED\nPAGINATES\nPAGINATING\nPAGINATION\nPAGING\nPAGODA\nPAID\nPAIL\nPAILS\nPAIN\nPAINE\nPAINED\nPAINFUL\nPAINFULLY\nPAINLESS\nPAINS\nPAINSTAKING\nPAINSTAKINGLY\nPAINT\nPAINTED\nPAINTER\nPAINTERS\nPAINTING\nPAINTINGS\nPAINTS\nPAIR\nPAIRED\nPAIRING\nPAIRINGS\nPAIRS\nPAIRWISE\nPAJAMA\nPAJAMAS\nPAKISTAN\nPAKISTANI\nPAKISTANIS\nPAL\nPALACE\nPALACES\nPALATE\nPALATES\nPALATINE\nPALE\nPALED\nPALELY\nPALENESS\nPALEOLITHIC\nPALEOZOIC\nPALER\nPALERMO\nPALES\nPALEST\nPALESTINE\nPALESTINIAN\nPALFREY\nPALINDROME\nPALINDROMIC\nPALING\nPALL\nPALLADIAN\nPALLADIUM\nPALLIATE\nPALLIATIVE\nPALLID\nPALM\nPALMED\nPALMER\nPALMING\nPALMOLIVE\nPALMS\nPALMYRA\nPALO\nPALOMAR\nPALPABLE\nPALS\nPALSY\nPAM\nPAMELA\nPAMPER\nPAMPHLET\nPAMPHLETS\nPAN\nPANACEA\nPANACEAS\nPANAMA\nPANAMANIAN\nPANCAKE\nPANCAKES\nPANCHO\nPANDA\nPANDANUS\nPANDAS\nPANDEMIC\nPANDEMONIUM\nPANDER\nPANDORA\nPANE\nPANEL\nPANELED\nPANELING\nPANELIST\nPANELISTS\nPANELS\nPANES\nPANG\nPANGAEA\nPANGS\nPANIC\nPANICKED\nPANICKING\nPANICKY\nPANICS\nPANNED\nPANNING\nPANORAMA\nPANORAMIC\nPANS\nPANSIES\nPANSY\nPANT\nPANTED\nPANTHEISM\nPANTHEIST\nPANTHEON\nPANTHER\nPANTHERS\nPANTIES\nPANTING\nPANTOMIME\nPANTRIES\nPANTRY\nPANTS\nPANTY\nPANTYHOSE\nPAOLI\nPAPA\nPAPAL\nPAPER\nPAPERBACK\nPAPERBACKS\nPAPERED\nPAPERER\nPAPERERS\nPAPERING\nPAPERINGS\nPAPERS\nPAPERWEIGHT\nPAPERWORK\nPAPOOSE\nPAPPAS\nPAPUA\nPAPYRUS\nPAR\nPARABOLA\nPARABOLIC\nPARABOLOID\nPARABOLOIDAL\nPARACHUTE\nPARACHUTED\nPARACHUTES\nPARADE\nPARADED\nPARADES\nPARADIGM\nPARADIGMS\nPARADING\nPARADISE\nPARADOX\nPARADOXES\nPARADOXICAL\nPARADOXICALLY\nPARAFFIN\nPARAGON\nPARAGONS\nPARAGRAPH\nPARAGRAPHING\nPARAGRAPHS\nPARAGUAY\nPARAGUAYAN\nPARAGUAYANS\nPARAKEET\nPARALLAX\nPARALLEL\nPARALLELED\nPARALLELING\nPARALLELISM\nPARALLELIZE\nPARALLELIZED\nPARALLELIZES\nPARALLELIZING\nPARALLELOGRAM\nPARALLELOGRAMS\nPARALLELS\nPARALYSIS\nPARALYZE\nPARALYZED\nPARALYZES\nPARALYZING\nPARAMETER\nPARAMETERIZABLE\nPARAMETERIZATION\nPARAMETERIZATIONS\nPARAMETERIZE\nPARAMETERIZED\nPARAMETERIZES\nPARAMETERIZING\nPARAMETERLESS\nPARAMETERS\nPARAMETRIC\nPARAMETRIZED\nPARAMILITARY\nPARAMOUNT\nPARAMUS\nPARANOIA\nPARANOIAC\nPARANOID\nPARANORMAL\nPARAPET\nPARAPETS\nPARAPHERNALIA\nPARAPHRASE\nPARAPHRASED\nPARAPHRASES\nPARAPHRASING\nPARAPSYCHOLOGY\nPARASITE\nPARASITES\nPARASITIC\nPARASITICS\nPARASOL\nPARBOIL\nPARC\nPARCEL\nPARCELED\nPARCELING\nPARCELS\nPARCH\nPARCHED\nPARCHMENT\nPARDON\nPARDONABLE\nPARDONABLY\nPARDONED\nPARDONER\nPARDONERS\nPARDONING\nPARDONS\nPARE\nPAREGORIC\nPARENT\nPARENTAGE\nPARENTAL\nPARENTHESES\nPARENTHESIS\nPARENTHESIZED\nPARENTHESIZES\nPARENTHESIZING\nPARENTHETIC\nPARENTHETICAL\nPARENTHETICALLY\nPARENTHOOD\nPARENTS\nPARES\nPARETO\nPARIAH\nPARIMUTUEL\nPARING\nPARINGS\nPARIS\nPARISH\nPARISHES\nPARISHIONER\nPARISIAN\nPARISIANIZATION\nPARISIANIZATIONS\nPARISIANIZE\nPARISIANIZES\nPARITY\nPARK\nPARKE\nPARKED\nPARKER\nPARKERS\nPARKERSBURG\nPARKHOUSE\nPARKING\nPARKINSON\nPARKINSONIAN\nPARKLAND\nPARKLIKE\nPARKS\nPARKWAY\nPARLAY\nPARLEY\nPARLIAMENT\nPARLIAMENTARIAN\nPARLIAMENTARY\nPARLIAMENTS\nPARLOR\nPARLORS\nPARMESAN\nPAROCHIAL\nPARODY\nPAROLE\nPAROLED\nPAROLES\nPAROLING\nPARR\nPARRIED\nPARRISH\nPARROT\nPARROTING\nPARROTS\nPARRS\nPARRY\nPARS\nPARSE\nPARSED\nPARSER\nPARSERS\nPARSES\nPARSI\nPARSIFAL\nPARSIMONY\nPARSING\nPARSINGS\nPARSLEY\nPARSON\nPARSONS\nPART\nPARTAKE\nPARTAKER\nPARTAKES\nPARTAKING\nPARTED\nPARTER\nPARTERS\nPARTHENON\nPARTHIA\nPARTIAL\nPARTIALITY\nPARTIALLY\nPARTICIPANT\nPARTICIPANTS\nPARTICIPATE\nPARTICIPATED\nPARTICIPATES\nPARTICIPATING\nPARTICIPATION\nPARTICIPLE\nPARTICLE\nPARTICLES\nPARTICULAR\nPARTICULARLY\nPARTICULARS\nPARTICULATE\nPARTIES\nPARTING\nPARTINGS\nPARTISAN\nPARTISANS\nPARTITION\nPARTITIONED\nPARTITIONING\nPARTITIONS\nPARTLY\nPARTNER\nPARTNERED\nPARTNERS\nPARTNERSHIP\nPARTOOK\nPARTRIDGE\nPARTRIDGES\nPARTS\nPARTY\nPASADENA\nPASCAL\nPASCAL\nPASO\nPASS\nPASSAGE\nPASSAGES\nPASSAGEWAY\nPASSAIC\nPASSE\nPASSED\nPASSENGER\nPASSENGERS\nPASSER\nPASSERS\nPASSES\nPASSING\nPASSION\nPASSIONATE\nPASSIONATELY\nPASSIONS\nPASSIVATE\nPASSIVE\nPASSIVELY\nPASSIVENESS\nPASSIVITY\nPASSOVER\nPASSPORT\nPASSPORTS\nPASSWORD\nPASSWORDS\nPAST\nPASTE\nPASTED\nPASTEL\nPASTERNAK\nPASTES\nPASTEUR\nPASTIME\nPASTIMES\nPASTING\nPASTNESS\nPASTOR\nPASTORAL\nPASTORS\nPASTRY\nPASTS\nPASTURE\nPASTURES\nPAT\nPATAGONIA\nPATAGONIANS\nPATCH\nPATCHED\nPATCHES\nPATCHING\nPATCHWORK\nPATCHY\nPATE\nPATEN\nPATENT\nPATENTABLE\nPATENTED\nPATENTER\nPATENTERS\nPATENTING\nPATENTLY\nPATENTS\nPATERNAL\nPATERNALLY\nPATERNOSTER\nPATERSON\nPATH\nPATHETIC\nPATHNAME\nPATHNAMES\nPATHOGEN\nPATHOGENESIS\nPATHOLOGICAL\nPATHOLOGY\nPATHOS\nPATHS\nPATHWAY\nPATHWAYS\nPATIENCE\nPATIENT\nPATIENTLY\nPATIENTS\nPATINA\nPATIO\nPATRIARCH\nPATRIARCHAL\nPATRIARCHS\nPATRIARCHY\nPATRICE\nPATRICIA\nPATRICIAN\nPATRICIANS\nPATRICK\nPATRIMONIAL\nPATRIMONY\nPATRIOT\nPATRIOTIC\nPATRIOTISM\nPATRIOTS\nPATROL\nPATROLLED\nPATROLLING\nPATROLMAN\nPATROLMEN\nPATROLS\nPATRON\nPATRONAGE\nPATRONIZE\nPATRONIZED\nPATRONIZES\nPATRONIZING\nPATRONS\nPATS\nPATSIES\nPATSY\nPATTER\nPATTERED\nPATTERING\nPATTERINGS\nPATTERN\nPATTERNED\nPATTERNING\nPATTERNS\nPATTERS\nPATTERSON\nPATTI\nPATTIES\nPATTON\nPATTY\nPAUCITY\nPAUL\nPAULA\nPAULETTE\nPAULI\nPAULINE\nPAULING\nPAULINIZE\nPAULINIZES\nPAULO\nPAULSEN\nPAULSON\nPAULUS\nPAUNCH\nPAUNCHY\nPAUPER\nPAUSE\nPAUSED\nPAUSES\nPAUSING\nPAVE\nPAVED\nPAVEMENT\nPAVEMENTS\nPAVES\nPAVILION\nPAVILIONS\nPAVING\nPAVLOV\nPAVLOVIAN\nPAW\nPAWING\nPAWN\nPAWNS\nPAWNSHOP\nPAWS\nPAWTUCKET\nPAY\nPAYABLE\nPAYCHECK\nPAYCHECKS\nPAYED\nPAYER\nPAYERS\nPAYING\nPAYMENT\nPAYMENTS\nPAYNE\nPAYNES\nPAYNIZE\nPAYNIZES\nPAYOFF\nPAYOFFS\nPAYROLL\nPAYS\nPAYSON\nPAZ\nPEA\nPEABODY\nPEACE\nPEACEABLE\nPEACEFUL\nPEACEFULLY\nPEACEFULNESS\nPEACETIME\nPEACH\nPEACHES\nPEACHTREE\nPEACOCK\nPEACOCKS\nPEAK\nPEAKED\nPEAKS\nPEAL\nPEALE\nPEALED\nPEALING\nPEALS\nPEANUT\nPEANUTS\nPEAR\nPEARCE\nPEARL\nPEARLS\nPEARLY\nPEARS\nPEARSON\nPEAS\nPEASANT\nPEASANTRY\nPEASANTS\nPEASE\nPEAT\nPEBBLE\nPEBBLES\nPECCARY\nPECK\nPECKED\nPECKING\nPECKS\nPECOS\nPECTORAL\nPECULIAR\nPECULIARITIES\nPECULIARITY\nPECULIARLY\nPECUNIARY\nPEDAGOGIC\nPEDAGOGICAL\nPEDAGOGICALLY\nPEDAGOGY\nPEDAL\nPEDANT\nPEDANTIC\nPEDANTRY\nPEDDLE\nPEDDLER\nPEDDLERS\nPEDESTAL\nPEDESTRIAN\nPEDESTRIANS\nPEDIATRIC\nPEDIATRICIAN\nPEDIATRICS\nPEDIGREE\nPEDRO\nPEEK\nPEEKED\nPEEKING\nPEEKS\nPEEL\nPEELED\nPEELING\nPEELS\nPEEP\nPEEPED\nPEEPER\nPEEPHOLE\nPEEPING\nPEEPS\nPEER\nPEERED\nPEERING\nPEERLESS\nPEERS\nPEG\nPEGASUS\nPEGBOARD\nPEGGY\nPEGS\nPEIPING\nPEJORATIVE\nPEKING\nPELHAM\nPELICAN\nPELLAGRA\nPELOPONNESE\nPELT\nPELTING\nPELTS\nPELVIC\nPELVIS\nPEMBROKE\nPEN\nPENAL\nPENALIZE\nPENALIZED\nPENALIZES\nPENALIZING\nPENALTIES\nPENALTY\nPENANCE\nPENCE\nPENCHANT\nPENCIL\nPENCILED\nPENCILS\nPEND\nPENDANT\nPENDED\nPENDING\nPENDLETON\nPENDS\nPENDULUM\nPENDULUMS\nPENELOPE\nPENETRABLE\nPENETRATE\nPENETRATED\nPENETRATES\nPENETRATING\nPENETRATINGLY\nPENETRATION\nPENETRATIONS\nPENETRATIVE\nPENETRATOR\nPENETRATORS\nPENGUIN\nPENGUINS\nPENH\nPENICILLIN\nPENINSULA\nPENINSULAS\nPENIS\nPENISES\nPENITENT\nPENITENTIARY\nPENN\nPENNED\nPENNIES\nPENNILESS\nPENNING\nPENNSYLVANIA\nPENNY\nPENROSE\nPENS\nPENSACOLA\nPENSION\nPENSIONER\nPENSIONS\nPENSIVE\nPENT\nPENTAGON\nPENTAGONS\nPENTATEUCH\nPENTECOST\nPENTECOSTAL\nPENTHOUSE\nPENULTIMATE\nPENUMBRA\nPEONY\nPEOPLE\nPEOPLED\nPEOPLES\nPEORIA\nPEP\nPEPPER\nPEPPERED\nPEPPERING\nPEPPERMINT\nPEPPERONI\nPEPPERS\nPEPPERY\nPEPPY\nPEPSI\nPEPSICO\nPEPSICO\nPEPTIDE\nPER\nPERCEIVABLE\nPERCEIVABLY\nPERCEIVE\nPERCEIVED\nPERCEIVER\nPERCEIVERS\nPERCEIVES\nPERCEIVING\nPERCENT\nPERCENTAGE\nPERCENTAGES\nPERCENTILE\nPERCENTILES\nPERCENTS\nPERCEPTIBLE\nPERCEPTIBLY\nPERCEPTION\nPERCEPTIONS\nPERCEPTIVE\nPERCEPTIVELY\nPERCEPTUAL\nPERCEPTUALLY\nPERCH\nPERCHANCE\nPERCHED\nPERCHES\nPERCHING\nPERCIVAL\nPERCUSSION\nPERCUTANEOUS\nPERCY\nPEREMPTORY\nPERENNIAL\nPERENNIALLY\nPEREZ\nPERFECT\nPERFECTED\nPERFECTIBLE\nPERFECTING\nPERFECTION\nPERFECTIONIST\nPERFECTIONISTS\nPERFECTLY\nPERFECTNESS\nPERFECTS\nPERFORCE\nPERFORM\nPERFORMANCE\nPERFORMANCES\nPERFORMED\nPERFORMER\nPERFORMERS\nPERFORMING\nPERFORMS\nPERFUME\nPERFUMED\nPERFUMES\nPERFUMING\nPERFUNCTORY\nPERGAMON\nPERHAPS\nPERICLEAN\nPERICLES\nPERIHELION\nPERIL\nPERILLA\nPERILOUS\nPERILOUSLY\nPERILS\nPERIMETER\nPERIOD\nPERIODIC\nPERIODICAL\nPERIODICALLY\nPERIODICALS\nPERIODS\nPERIPHERAL\nPERIPHERALLY\nPERIPHERALS\nPERIPHERIES\nPERIPHERY\nPERISCOPE\nPERISH\nPERISHABLE\nPERISHABLES\nPERISHED\nPERISHER\nPERISHERS\nPERISHES\nPERISHING\nPERJURE\nPERJURY\nPERK\nPERKINS\nPERKY\nPERLE\nPERMANENCE\nPERMANENT\nPERMANENTLY\nPERMEABLE\nPERMEATE\nPERMEATED\nPERMEATES\nPERMEATING\nPERMEATION\nPERMIAN\nPERMISSIBILITY\nPERMISSIBLE\nPERMISSIBLY\nPERMISSION\nPERMISSIONS\nPERMISSIVE\nPERMISSIVELY\nPERMIT\nPERMITS\nPERMITTED\nPERMITTING\nPERMUTATION\nPERMUTATIONS\nPERMUTE\nPERMUTED\nPERMUTES\nPERMUTING\nPERNICIOUS\nPERNOD\nPEROXIDE\nPERPENDICULAR\nPERPENDICULARLY\nPERPENDICULARS\nPERPETRATE\nPERPETRATED\nPERPETRATES\nPERPETRATING\nPERPETRATION\nPERPETRATIONS\nPERPETRATOR\nPERPETRATORS\nPERPETUAL\nPERPETUALLY\nPERPETUATE\nPERPETUATED\nPERPETUATES\nPERPETUATING\nPERPETUATION\nPERPETUITY\nPERPLEX\nPERPLEXED\nPERPLEXING\nPERPLEXITY\nPERRY\nPERSECUTE\nPERSECUTED\nPERSECUTES\nPERSECUTING\nPERSECUTION\nPERSECUTOR\nPERSECUTORS\nPERSEID\nPERSEPHONE\nPERSEUS\nPERSEVERANCE\nPERSEVERE\nPERSEVERED\nPERSEVERES\nPERSEVERING\nPERSHING\nPERSIA\nPERSIAN\nPERSIANIZATION\nPERSIANIZATIONS\nPERSIANIZE\nPERSIANIZES\nPERSIANS\nPERSIST\nPERSISTED\nPERSISTENCE\nPERSISTENT\nPERSISTENTLY\nPERSISTING\nPERSISTS\nPERSON\nPERSONAGE\nPERSONAGES\nPERSONAL\nPERSONALITIES\nPERSONALITY\nPERSONALIZATION\nPERSONALIZE\nPERSONALIZED\nPERSONALIZES\nPERSONALIZING\nPERSONALLY\nPERSONIFICATION\nPERSONIFIED\nPERSONIFIES\nPERSONIFY\nPERSONIFYING\nPERSONNEL\nPERSONS\nPERSPECTIVE\nPERSPECTIVES\nPERSPICUOUS\nPERSPICUOUSLY\nPERSPIRATION\nPERSPIRE\nPERSUADABLE\nPERSUADE\nPERSUADED\nPERSUADER\nPERSUADERS\nPERSUADES\nPERSUADING\nPERSUASION\nPERSUASIONS\nPERSUASIVE\nPERSUASIVELY\nPERSUASIVENESS\nPERTAIN\nPERTAINED\nPERTAINING\nPERTAINS\nPERTH\nPERTINENT\nPERTURB\nPERTURBATION\nPERTURBATIONS\nPERTURBED\nPERU\nPERUSAL\nPERUSE\nPERUSED\nPERUSER\nPERUSERS\nPERUSES\nPERUSING\nPERUVIAN\nPERUVIANIZE\nPERUVIANIZES\nPERUVIANS\nPERVADE\nPERVADED\nPERVADES\nPERVADING\nPERVASIVE\nPERVASIVELY\nPERVERSION\nPERVERT\nPERVERTED\nPERVERTS\nPESSIMISM\nPESSIMIST\nPESSIMISTIC\nPEST\nPESTER\nPESTICIDE\nPESTILENCE\nPESTILENT\nPESTS\nPET\nPETAL\nPETALS\nPETE\nPETER\nPETERS\nPETERSBURG\nPETERSEN\nPETERSON\nPETITION\nPETITIONED\nPETITIONER\nPETITIONING\nPETITIONS\nPETKIEWICZ\nPETRI\nPETROLEUM\nPETS\nPETTED\nPETTER\nPETTERS\nPETTIBONE\nPETTICOAT\nPETTICOATS\nPETTINESS\nPETTING\nPETTY\nPETULANCE\nPETULANT\nPEUGEOT\nPEW\nPEWAUKEE\nPEWS\nPEWTER\nPFIZER\nPHAEDRA\nPHANTOM\nPHANTOMS\nPHARMACEUTIC\nPHARMACIST\nPHARMACOLOGY\nPHARMACOPOEIA\nPHARMACY\nPHASE\nPHASED\nPHASER\nPHASERS\nPHASES\nPHASING\nPHEASANT\nPHEASANTS\nPHELPS\nPHENOMENA\nPHENOMENAL\nPHENOMENALLY\nPHENOMENOLOGICAL\nPHENOMENOLOGICALLY\nPHENOMENOLOGIES\nPHENOMENOLOGY\nPHENOMENON\nPHI\nPHIGS\nPHIL\nPHILADELPHIA\nPHILANTHROPY\nPHILCO\nPHILHARMONIC\nPHILIP\nPHILIPPE\nPHILIPPIANS\nPHILIPPINE\nPHILIPPINES\nPHILISTINE\nPHILISTINES\nPHILISTINIZE\nPHILISTINIZES\nPHILLIES\nPHILLIP\nPHILLIPS\nPHILLY\nPHILOSOPHER\nPHILOSOPHERS\nPHILOSOPHIC\nPHILOSOPHICAL\nPHILOSOPHICALLY\nPHILOSOPHIES\nPHILOSOPHIZE\nPHILOSOPHIZED\nPHILOSOPHIZER\nPHILOSOPHIZERS\nPHILOSOPHIZES\nPHILOSOPHIZING\nPHILOSOPHY\nPHIPPS\nPHOBOS\nPHOENICIA\nPHOENIX\nPHONE\nPHONED\nPHONEME\nPHONEMES\nPHONEMIC\nPHONES\nPHONETIC\nPHONETICS\nPHONING\nPHONOGRAPH\nPHONOGRAPHS\nPHONY\nPHOSGENE\nPHOSPHATE\nPHOSPHATES\nPHOSPHOR\nPHOSPHORESCENT\nPHOSPHORIC\nPHOSPHORUS\nPHOTO\nPHOTOCOPIED\nPHOTOCOPIER\nPHOTOCOPIERS\nPHOTOCOPIES\nPHOTOCOPY\nPHOTOCOPYING\nPHOTODIODE\nPHOTODIODES\nPHOTOGENIC\nPHOTOGRAPH\nPHOTOGRAPHED\nPHOTOGRAPHER\nPHOTOGRAPHERS\nPHOTOGRAPHIC\nPHOTOGRAPHING\nPHOTOGRAPHS\nPHOTOGRAPHY\nPHOTON\nPHOTOS\nPHOTOSENSITIVE\nPHOTOTYPESETTER\nPHOTOTYPESETTERS\nPHRASE\nPHRASED\nPHRASEOLOGY\nPHRASES\nPHRASING\nPHRASINGS\nPHYLA\nPHYLLIS\nPHYLUM\nPHYSIC\nPHYSICAL\nPHYSICALLY\nPHYSICALNESS\nPHYSICALS\nPHYSICIAN\nPHYSICIANS\nPHYSICIST\nPHYSICISTS\nPHYSICS\nPHYSIOLOGICAL\nPHYSIOLOGICALLY\nPHYSIOLOGY\nPHYSIOTHERAPIST\nPHYSIOTHERAPY\nPHYSIQUE\nPHYTOPLANKTON\nPIANIST\nPIANO\nPIANOS\nPICA\nPICAS\nPICASSO\nPICAYUNE\nPICCADILLY\nPICCOLO\nPICK\nPICKAXE\nPICKED\nPICKER\nPICKERING\nPICKERS\nPICKET\nPICKETED\nPICKETER\nPICKETERS\nPICKETING\nPICKETS\nPICKETT\nPICKFORD\nPICKING\nPICKINGS\nPICKLE\nPICKLED\nPICKLES\nPICKLING\nPICKMAN\nPICKS\nPICKUP\nPICKUPS\nPICKY\nPICNIC\nPICNICKED\nPICNICKING\nPICNICS\nPICOFARAD\nPICOJOULE\nPICOSECOND\nPICT\nPICTORIAL\nPICTORIALLY\nPICTURE\nPICTURED\nPICTURES\nPICTURESQUE\nPICTURESQUENESS\nPICTURING\nPIDDLE\nPIDGIN\nPIE\nPIECE\nPIECED\nPIECEMEAL\nPIECES\nPIECEWISE\nPIECING\nPIEDFORT\nPIEDMONT\nPIER\nPIERCE\nPIERCED\nPIERCES\nPIERCING\nPIERRE\nPIERS\nPIERSON\nPIES\nPIETY\nPIEZOELECTRIC\nPIG\nPIGEON\nPIGEONHOLE\nPIGEONS\nPIGGISH\nPIGGY\nPIGGYBACK\nPIGGYBACKED\nPIGGYBACKING\nPIGGYBACKS\nPIGMENT\nPIGMENTATION\nPIGMENTED\nPIGMENTS\nPIGPEN\nPIGS\nPIGSKIN\nPIGTAIL\nPIKE\nPIKER\nPIKES\nPILATE\nPILE\nPILED\nPILERS\nPILES\nPILFER\nPILFERAGE\nPILGRIM\nPILGRIMAGE\nPILGRIMAGES\nPILGRIMS\nPILING\nPILINGS\nPILL\nPILLAGE\nPILLAGED\nPILLAR\nPILLARED\nPILLARS\nPILLORY\nPILLOW\nPILLOWS\nPILLS\nPILLSBURY\nPILOT\nPILOTING\nPILOTS\nPIMP\nPIMPLE\nPIN\nPINAFORE\nPINBALL\nPINCH\nPINCHED\nPINCHES\nPINCHING\nPINCUSHION\nPINE\nPINEAPPLE\nPINEAPPLES\nPINED\nPINEHURST\nPINES\nPING\nPINHEAD\nPINHOLE\nPINING\nPINION\nPINK\nPINKER\nPINKEST\nPINKIE\nPINKISH\nPINKLY\nPINKNESS\nPINKS\nPINNACLE\nPINNACLES\nPINNED\nPINNING\nPINNINGS\nPINOCHLE\nPINPOINT\nPINPOINTING\nPINPOINTS\nPINS\nPINSCHER\nPINSKY\nPINT\nPINTO\nPINTS\nPINWHEEL\nPION\nPIONEER\nPIONEERED\nPIONEERING\nPIONEERS\nPIOTR\nPIOUS\nPIOUSLY\nPIP\nPIPE\nPIPED\nPIPELINE\nPIPELINED\nPIPELINES\nPIPELINING\nPIPER\nPIPERS\nPIPES\nPIPESTONE\nPIPETTE\nPIPING\nPIQUE\nPIRACY\nPIRAEUS\nPIRATE\nPIRATES\nPISA\nPISCATAWAY\nPISCES\nPISS\nPISTACHIO\nPISTIL\nPISTILS\nPISTOL\nPISTOLS\nPISTON\nPISTONS\nPIT\nPITCH\nPITCHED\nPITCHER\nPITCHERS\nPITCHES\nPITCHFORK\nPITCHING\nPITEOUS\nPITEOUSLY\nPITFALL\nPITFALLS\nPITH\nPITHED\nPITHES\nPITHIER\nPITHIEST\nPITHINESS\nPITHING\nPITHY\nPITIABLE\nPITIED\nPITIER\nPITIERS\nPITIES\nPITIFUL\nPITIFULLY\nPITILESS\nPITILESSLY\nPITNEY\nPITS\nPITT\nPITTED\nPITTSBURGH\nPITTSBURGHERS\nPITTSFIELD\nPITTSTON\nPITUITARY\nPITY\nPITYING\nPITYINGLY\nPIUS\nPIVOT\nPIVOTAL\nPIVOTING\nPIVOTS\nPIXEL\nPIXELS\nPIZARRO\nPIZZA\nPLACARD\nPLACARDS\nPLACATE\nPLACE\nPLACEBO\nPLACED\nPLACEHOLDER\nPLACEMENT\nPLACEMENTS\nPLACENTA\nPLACENTAL\nPLACER\nPLACES\nPLACID\nPLACIDLY\nPLACING\nPLAGIARISM\nPLAGIARIST\nPLAGUE\nPLAGUED\nPLAGUES\nPLAGUING\nPLAID\nPLAIDS\nPLAIN\nPLAINER\nPLAINEST\nPLAINFIELD\nPLAINLY\nPLAINNESS\nPLAINS\nPLAINTEXT\nPLAINTEXTS\nPLAINTIFF\nPLAINTIFFS\nPLAINTIVE\nPLAINTIVELY\nPLAINTIVENESS\nPLAINVIEW\nPLAIT\nPLAITS\nPLAN\nPLANAR\nPLANARITY\nPLANCK\nPLANE\nPLANED\nPLANELOAD\nPLANER\nPLANERS\nPLANES\nPLANET\nPLANETARIA\nPLANETARIUM\nPLANETARY\nPLANETESIMAL\nPLANETOID\nPLANETS\nPLANING\nPLANK\nPLANKING\nPLANKS\nPLANKTON\nPLANNED\nPLANNER\nPLANNERS\nPLANNING\nPLANOCONCAVE\nPLANOCONVEX\nPLANS\nPLANT\nPLANTATION\nPLANTATIONS\nPLANTED\nPLANTER\nPLANTERS\nPLANTING\nPLANTINGS\nPLANTS\nPLAQUE\nPLASMA\nPLASTER\nPLASTERED\nPLASTERER\nPLASTERING\nPLASTERS\nPLASTIC\nPLASTICITY\nPLASTICS\nPLATE\nPLATEAU\nPLATEAUS\nPLATED\nPLATELET\nPLATELETS\nPLATEN\nPLATENS\nPLATES\nPLATFORM\nPLATFORMS\nPLATING\nPLATINUM\nPLATITUDE\nPLATO\nPLATONIC\nPLATONISM\nPLATONIST\nPLATOON\nPLATTE\nPLATTER\nPLATTERS\nPLATTEVILLE\nPLAUSIBILITY\nPLAUSIBLE\nPLAY\nPLAYABLE\nPLAYBACK\nPLAYBOY\nPLAYED\nPLAYER\nPLAYERS\nPLAYFUL\nPLAYFULLY\nPLAYFULNESS\nPLAYGROUND\nPLAYGROUNDS\nPLAYHOUSE\nPLAYING\nPLAYMATE\nPLAYMATES\nPLAYOFF\nPLAYROOM\nPLAYS\nPLAYTHING\nPLAYTHINGS\nPLAYTIME\nPLAYWRIGHT\nPLAYWRIGHTS\nPLAYWRITING\nPLAZA\nPLEA\nPLEAD\nPLEADED\nPLEADER\nPLEADING\nPLEADS\nPLEAS\nPLEASANT\nPLEASANTLY\nPLEASANTNESS\nPLEASE\nPLEASED\nPLEASES\nPLEASING\nPLEASINGLY\nPLEASURE\nPLEASURES\nPLEAT\nPLEBEIAN\nPLEBIAN\nPLEBISCITE\nPLEBISCITES\nPLEDGE\nPLEDGED\nPLEDGES\nPLEIADES\nPLEISTOCENE\nPLENARY\nPLENIPOTENTIARY\nPLENTEOUS\nPLENTIFUL\nPLENTIFULLY\nPLENTY\nPLETHORA\nPLEURISY\nPLEXIGLAS\nPLIABLE\nPLIANT\nPLIED\nPLIERS\nPLIES\nPLIGHT\nPLINY\nPLIOCENE\nPLOD\nPLODDING\nPLOT\nPLOTS\nPLOTTED\nPLOTTER\nPLOTTERS\nPLOTTING\nPLOW\nPLOWED\nPLOWER\nPLOWING\nPLOWMAN\nPLOWS\nPLOWSHARE\nPLOY\nPLOYS\nPLUCK\nPLUCKED\nPLUCKING\nPLUCKS\nPLUCKY\nPLUG\nPLUGGABLE\nPLUGGED\nPLUGGING\nPLUGS\nPLUM\nPLUMAGE\nPLUMB\nPLUMBED\nPLUMBING\nPLUMBS\nPLUME\nPLUMED\nPLUMES\nPLUMMET\nPLUMMETING\nPLUMP\nPLUMPED\nPLUMPNESS\nPLUMS\nPLUNDER\nPLUNDERED\nPLUNDERER\nPLUNDERERS\nPLUNDERING\nPLUNDERS\nPLUNGE\nPLUNGED\nPLUNGER\nPLUNGERS\nPLUNGES\nPLUNGING\nPLUNK\nPLURAL\nPLURALITY\nPLURALS\nPLUS\nPLUSES\nPLUSH\nPLUTARCH\nPLUTO\nPLUTONIUM\nPLY\nPLYMOUTH\nPLYWOOD\nPNEUMATIC\nPNEUMONIA\nPOACH\nPOACHER\nPOACHES\nPOCAHONTAS\nPOCKET\nPOCKETBOOK\nPOCKETBOOKS\nPOCKETED\nPOCKETFUL\nPOCKETING\nPOCKETS\nPOCONO\nPOCONOS\nPOD\nPODIA\nPODIUM\nPODS\nPODUNK\nPOE\nPOEM\nPOEMS\nPOET\nPOETIC\nPOETICAL\nPOETICALLY\nPOETICS\nPOETRIES\nPOETRY\nPOETS\nPOGO\nPOGROM\nPOIGNANCY\nPOIGNANT\nPOINCARE\nPOINDEXTER\nPOINT\nPOINTED\nPOINTEDLY\nPOINTER\nPOINTERS\nPOINTING\nPOINTLESS\nPOINTS\nPOINTY\nPOISE\nPOISED\nPOISES\nPOISON\nPOISONED\nPOISONER\nPOISONING\nPOISONOUS\nPOISONOUSNESS\nPOISONS\nPOISSON\nPOKE\nPOKED\nPOKER\nPOKERFACE\nPOKES\nPOKING\nPOLAND\nPOLAR\nPOLARIS\nPOLARITIES\nPOLARITY\nPOLAROID\nPOLE\nPOLECAT\nPOLED\nPOLEMIC\nPOLEMICS\nPOLES\nPOLICE\nPOLICED\nPOLICEMAN\nPOLICEMEN\nPOLICES\nPOLICIES\nPOLICING\nPOLICY\nPOLING\nPOLIO\nPOLISH\nPOLISHED\nPOLISHER\nPOLISHERS\nPOLISHES\nPOLISHING\nPOLITBURO\nPOLITE\nPOLITELY\nPOLITENESS\nPOLITER\nPOLITEST\nPOLITIC\nPOLITICAL\nPOLITICALLY\nPOLITICIAN\nPOLITICIANS\nPOLITICKING\nPOLITICS\nPOLK\nPOLKA\nPOLL\nPOLLARD\nPOLLED\nPOLLEN\nPOLLING\nPOLLOI\nPOLLS\nPOLLUTANT\nPOLLUTE\nPOLLUTED\nPOLLUTES\nPOLLUTING\nPOLLUTION\nPOLLUX\nPOLO\nPOLYALPHABETIC\nPOLYGON\nPOLYGONS\nPOLYHYMNIA\nPOLYMER\nPOLYMERS\nPOLYMORPHIC\nPOLYNESIA\nPOLYNESIAN\nPOLYNOMIAL\nPOLYNOMIALS\nPOLYPHEMUS\nPOLYTECHNIC\nPOLYTHEIST\nPOMERANIA\nPOMERANIAN\nPOMONA\nPOMP\nPOMPADOUR\nPOMPEII\nPOMPEY\nPOMPOSITY\nPOMPOUS\nPOMPOUSLY\nPOMPOUSNESS\nPONCE\nPONCHARTRAIN\nPONCHO\nPOND\nPONDER\nPONDERED\nPONDERING\nPONDEROUS\nPONDERS\nPONDS\nPONG\nPONIES\nPONTIAC\nPONTIFF\nPONTIFIC\nPONTIFICATE\nPONY\nPOOCH\nPOODLE\nPOOL\nPOOLE\nPOOLED\nPOOLING\nPOOLS\nPOOR\nPOORER\nPOOREST\nPOORLY\nPOORNESS\nPOP\nPOPCORN\nPOPE\nPOPEK\nPOPEKS\nPOPISH\nPOPLAR\nPOPLIN\nPOPPED\nPOPPIES\nPOPPING\nPOPPY\nPOPS\nPOPSICLE\nPOPSICLES\nPOPULACE\nPOPULAR\nPOPULARITY\nPOPULARIZATION\nPOPULARIZE\nPOPULARIZED\nPOPULARIZES\nPOPULARIZING\nPOPULARLY\nPOPULATE\nPOPULATED\nPOPULATES\nPOPULATING\nPOPULATION\nPOPULATIONS\nPOPULOUS\nPOPULOUSNESS\nPORCELAIN\nPORCH\nPORCHES\nPORCINE\nPORCUPINE\nPORCUPINES\nPORE\nPORED\nPORES\nPORING\nPORK\nPORKER\nPORNOGRAPHER\nPORNOGRAPHIC\nPORNOGRAPHY\nPOROUS\nPORPOISE\nPORRIDGE\nPORT\nPORTABILITY\nPORTABLE\nPORTAGE\nPORTAL\nPORTALS\nPORTE\nPORTED\nPORTEND\nPORTENDED\nPORTENDING\nPORTENDS\nPORTENT\nPORTENTOUS\nPORTER\nPORTERHOUSE\nPORTERS\nPORTFOLIO\nPORTFOLIOS\nPORTIA\nPORTICO\nPORTING\nPORTION\nPORTIONS\nPORTLAND\nPORTLY\nPORTMANTEAU\nPORTO\nPORTRAIT\nPORTRAITS\nPORTRAY\nPORTRAYAL\nPORTRAYED\nPORTRAYING\nPORTRAYS\nPORTS\nPORTSMOUTH\nPORTUGAL\nPORTUGUESE\nPOSE\nPOSED\nPOSEIDON\nPOSER\nPOSERS\nPOSES\nPOSH\nPOSING\nPOSIT\nPOSITED\nPOSITING\nPOSITION\nPOSITIONAL\nPOSITIONED\nPOSITIONING\nPOSITIONS\nPOSITIVE\nPOSITIVELY\nPOSITIVENESS\nPOSITIVES\nPOSITRON\nPOSITS\nPOSNER\nPOSSE\nPOSSESS\nPOSSESSED\nPOSSESSES\nPOSSESSING\nPOSSESSION\nPOSSESSIONAL\nPOSSESSIONS\nPOSSESSIVE\nPOSSESSIVELY\nPOSSESSIVENESS\nPOSSESSOR\nPOSSESSORS\nPOSSIBILITIES\nPOSSIBILITY\nPOSSIBLE\nPOSSIBLY\nPOSSUM\nPOSSUMS\nPOST\nPOSTAGE\nPOSTAL\nPOSTCARD\nPOSTCONDITION\nPOSTDOCTORAL\nPOSTED\nPOSTER\nPOSTERIOR\nPOSTERIORI\nPOSTERITY\nPOSTERS\nPOSTFIX\nPOSTGRADUATE\nPOSTING\nPOSTLUDE\nPOSTMAN\nPOSTMARK\nPOSTMASTER\nPOSTMASTERS\nPOSTMORTEM\nPOSTOPERATIVE\nPOSTORDER\nPOSTPONE\nPOSTPONED\nPOSTPONING\nPOSTPROCESS\nPOSTPROCESSOR\nPOSTS\nPOSTSCRIPT\nPOSTSCRIPTS\nPOSTULATE\nPOSTULATED\nPOSTULATES\nPOSTULATING\nPOSTULATION\nPOSTULATIONS\nPOSTURE\nPOSTURES\nPOT\nPOTABLE\nPOTASH\nPOTASSIUM\nPOTATO\nPOTATOES\nPOTBELLY\nPOTEMKIN\nPOTENT\nPOTENTATE\nPOTENTATES\nPOTENTIAL\nPOTENTIALITIES\nPOTENTIALITY\nPOTENTIALLY\nPOTENTIALS\nPOTENTIATING\nPOTENTIOMETER\nPOTENTIOMETERS\nPOTHOLE\nPOTION\nPOTLATCH\nPOTOMAC\nPOTPOURRI\nPOTS\nPOTSDAM\nPOTTAWATOMIE\nPOTTED\nPOTTER\nPOTTERS\nPOTTERY\nPOTTING\nPOTTS\nPOUCH\nPOUCHES\nPOUGHKEEPSIE\nPOULTICE\nPOULTRY\nPOUNCE\nPOUNCED\nPOUNCES\nPOUNCING\nPOUND\nPOUNDED\nPOUNDER\nPOUNDERS\nPOUNDING\nPOUNDS\nPOUR\nPOURED\nPOURER\nPOURERS\nPOURING\nPOURS\nPOUSSIN\nPOUSSINS\nPOUT\nPOUTED\nPOUTING\nPOUTS\nPOVERTY\nPOWDER\nPOWDERED\nPOWDERING\nPOWDERPUFF\nPOWDERS\nPOWDERY\nPOWELL\nPOWER\nPOWERED\nPOWERFUL\nPOWERFULLY\nPOWERFULNESS\nPOWERING\nPOWERLESS\nPOWERLESSLY\nPOWERLESSNESS\nPOWERS\nPOX\nPOYNTING\nPRACTICABLE\nPRACTICABLY\nPRACTICAL\nPRACTICALITY\nPRACTICALLY\nPRACTICE\nPRACTICED\nPRACTICES\nPRACTICING\nPRACTITIONER\nPRACTITIONERS\nPRADESH\nPRADO\nPRAGMATIC\nPRAGMATICALLY\nPRAGMATICS\nPRAGMATISM\nPRAGMATIST\nPRAGUE\nPRAIRIE\nPRAISE\nPRAISED\nPRAISER\nPRAISERS\nPRAISES\nPRAISEWORTHY\nPRAISING\nPRAISINGLY\nPRANCE\nPRANCED\nPRANCER\nPRANCING\nPRANK\nPRANKS\nPRATE\nPRATT\nPRATTVILLE\nPRAVDA\nPRAY\nPRAYED\nPRAYER\nPRAYERS\nPRAYING\nPREACH\nPREACHED\nPREACHER\nPREACHERS\nPREACHES\nPREACHING\nPREALLOCATE\nPREALLOCATED\nPREALLOCATING\nPREAMBLE\nPREAMBLES\nPREASSIGN\nPREASSIGNED\nPREASSIGNING\nPREASSIGNS\nPRECAMBRIAN\nPRECARIOUS\nPRECARIOUSLY\nPRECARIOUSNESS\nPRECAUTION\nPRECAUTIONS\nPRECEDE\nPRECEDED\nPRECEDENCE\nPRECEDENCES\nPRECEDENT\nPRECEDENTED\nPRECEDENTS\nPRECEDES\nPRECEDING\nPRECEPT\nPRECEPTS\nPRECESS\nPRECESSION\nPRECINCT\nPRECINCTS\nPRECIOUS\nPRECIOUSLY\nPRECIOUSNESS\nPRECIPICE\nPRECIPITABLE\nPRECIPITATE\nPRECIPITATED\nPRECIPITATELY\nPRECIPITATENESS\nPRECIPITATES\nPRECIPITATING\nPRECIPITATION\nPRECIPITOUS\nPRECIPITOUSLY\nPRECISE\nPRECISELY\nPRECISENESS\nPRECISION\nPRECISIONS\nPRECLUDE\nPRECLUDED\nPRECLUDES\nPRECLUDING\nPRECOCIOUS\nPRECOCIOUSLY\nPRECOCITY\nPRECOMPUTE\nPRECOMPUTED\nPRECOMPUTING\nPRECONCEIVE\nPRECONCEIVED\nPRECONCEPTION\nPRECONCEPTIONS\nPRECONDITION\nPRECONDITIONED\nPRECONDITIONS\nPRECURSOR\nPRECURSORS\nPREDATE\nPREDATED\nPREDATES\nPREDATING\nPREDATORY\nPREDECESSOR\nPREDECESSORS\nPREDEFINE\nPREDEFINED\nPREDEFINES\nPREDEFINING\nPREDEFINITION\nPREDEFINITIONS\nPREDETERMINATION\nPREDETERMINE\nPREDETERMINED\nPREDETERMINES\nPREDETERMINING\nPREDICAMENT\nPREDICATE\nPREDICATED\nPREDICATES\nPREDICATING\nPREDICATION\nPREDICATIONS\nPREDICT\nPREDICTABILITY\nPREDICTABLE\nPREDICTABLY\nPREDICTED\nPREDICTING\nPREDICTION\nPREDICTIONS\nPREDICTIVE\nPREDICTOR\nPREDICTS\nPREDILECTION\nPREDILECTIONS\nPREDISPOSITION\nPREDOMINANT\nPREDOMINANTLY\nPREDOMINATE\nPREDOMINATED\nPREDOMINATELY\nPREDOMINATES\nPREDOMINATING\nPREDOMINATION\nPREEMINENCE\nPREEMINENT\nPREEMPT\nPREEMPTED\nPREEMPTING\nPREEMPTION\nPREEMPTIVE\nPREEMPTOR\nPREEMPTS\nPREEN\nPREEXISTING\nPREFAB\nPREFABRICATE\nPREFACE\nPREFACED\nPREFACES\nPREFACING\nPREFER\nPREFERABLE\nPREFERABLY\nPREFERENCE\nPREFERENCES\nPREFERENTIAL\nPREFERENTIALLY\nPREFERRED\nPREFERRING\nPREFERS\nPREFIX\nPREFIXED\nPREFIXES\nPREFIXING\nPREGNANCY\nPREGNANT\nPREHISTORIC\nPREINITIALIZE\nPREINITIALIZED\nPREINITIALIZES\nPREINITIALIZING\nPREJUDGE\nPREJUDGED\nPREJUDICE\nPREJUDICED\nPREJUDICES\nPREJUDICIAL\nPRELATE\nPRELIMINARIES\nPRELIMINARY\nPRELUDE\nPRELUDES\nPREMATURE\nPREMATURELY\nPREMATURITY\nPREMEDITATED\nPREMEDITATION\nPREMIER\nPREMIERS\nPREMISE\nPREMISES\nPREMIUM\nPREMIUMS\nPREMONITION\nPRENATAL\nPRENTICE\nPRENTICED\nPRENTICING\nPREOCCUPATION\nPREOCCUPIED\nPREOCCUPIES\nPREOCCUPY\nPREP\nPREPARATION\nPREPARATIONS\nPREPARATIVE\nPREPARATIVES\nPREPARATORY\nPREPARE\nPREPARED\nPREPARES\nPREPARING\nPREPEND\nPREPENDED\nPREPENDING\nPREPOSITION\nPREPOSITIONAL\nPREPOSITIONS\nPREPOSTEROUS\nPREPOSTEROUSLY\nPREPROCESSED\nPREPROCESSING\nPREPROCESSOR\nPREPROCESSORS\nPREPRODUCTION\nPREPROGRAMMED\nPREREQUISITE\nPREREQUISITES\nPREROGATIVE\nPREROGATIVES\nPRESBYTERIAN\nPRESBYTERIANISM\nPRESBYTERIANIZE\nPRESBYTERIANIZES\nPRESCOTT\nPRESCRIBE\nPRESCRIBED\nPRESCRIBES\nPRESCRIPTION\nPRESCRIPTIONS\nPRESCRIPTIVE\nPRESELECT\nPRESELECTED\nPRESELECTING\nPRESELECTS\nPRESENCE\nPRESENCES\nPRESENT\nPRESENTATION\nPRESENTATIONS\nPRESENTED\nPRESENTER\nPRESENTING\nPRESENTLY\nPRESENTNESS\nPRESENTS\nPRESERVATION\nPRESERVATIONS\nPRESERVE\nPRESERVED\nPRESERVER\nPRESERVERS\nPRESERVES\nPRESERVING\nPRESET\nPRESIDE\nPRESIDED\nPRESIDENCY\nPRESIDENT\nPRESIDENTIAL\nPRESIDENTS\nPRESIDES\nPRESIDING\nPRESLEY\nPRESS\nPRESSED\nPRESSER\nPRESSES\nPRESSING\nPRESSINGS\nPRESSURE\nPRESSURED\nPRESSURES\nPRESSURING\nPRESSURIZE\nPRESSURIZED\nPRESTIDIGITATE\nPRESTIGE\nPRESTIGIOUS\nPRESTON\nPRESUMABLY\nPRESUME\nPRESUMED\nPRESUMES\nPRESUMING\nPRESUMPTION\nPRESUMPTIONS\nPRESUMPTIVE\nPRESUMPTUOUS\nPRESUMPTUOUSNESS\nPRESUPPOSE\nPRESUPPOSED\nPRESUPPOSES\nPRESUPPOSING\nPRESUPPOSITION\nPRETEND\nPRETENDED\nPRETENDER\nPRETENDERS\nPRETENDING\nPRETENDS\nPRETENSE\nPRETENSES\nPRETENSION\nPRETENSIONS\nPRETENTIOUS\nPRETENTIOUSLY\nPRETENTIOUSNESS\nPRETEXT\nPRETEXTS\nPRETORIA\nPRETORIAN\nPRETTIER\nPRETTIEST\nPRETTILY\nPRETTINESS\nPRETTY\nPREVAIL\nPREVAILED\nPREVAILING\nPREVAILINGLY\nPREVAILS\nPREVALENCE\nPREVALENT\nPREVALENTLY\nPREVENT\nPREVENTABLE\nPREVENTABLY\nPREVENTED\nPREVENTING\nPREVENTION\nPREVENTIVE\nPREVENTIVES\nPREVENTS\nPREVIEW\nPREVIEWED\nPREVIEWING\nPREVIEWS\nPREVIOUS\nPREVIOUSLY\nPREY\nPREYED\nPREYING\nPREYS\nPRIAM\nPRICE\nPRICED\nPRICELESS\nPRICER\nPRICERS\nPRICES\nPRICING\nPRICK\nPRICKED\nPRICKING\nPRICKLY\nPRICKS\nPRIDE\nPRIDED\nPRIDES\nPRIDING\nPRIEST\nPRIESTLEY\nPRIGGISH\nPRIM\nPRIMA\nPRIMACY\nPRIMAL\nPRIMARIES\nPRIMARILY\nPRIMARY\nPRIMATE\nPRIME\nPRIMED\nPRIMENESS\nPRIMER\nPRIMERS\nPRIMES\nPRIMEVAL\nPRIMING\nPRIMITIVE\nPRIMITIVELY\nPRIMITIVENESS\nPRIMITIVES\nPRIMROSE\nPRINCE\nPRINCELY\nPRINCES\nPRINCESS\nPRINCESSES\nPRINCETON\nPRINCIPAL\nPRINCIPALITIES\nPRINCIPALITY\nPRINCIPALLY\nPRINCIPALS\nPRINCIPIA\nPRINCIPLE\nPRINCIPLED\nPRINCIPLES\nPRINT\nPRINTABLE\nPRINTABLY\nPRINTED\nPRINTER\nPRINTERS\nPRINTING\nPRINTOUT\nPRINTS\nPRIOR\nPRIORI\nPRIORITIES\nPRIORITY\nPRIORY\nPRISCILLA\nPRISM\nPRISMS\nPRISON\nPRISONER\nPRISONERS\nPRISONS\nPRISTINE\nPRITCHARD\nPRIVACIES\nPRIVACY\nPRIVATE\nPRIVATELY\nPRIVATES\nPRIVATION\nPRIVATIONS\nPRIVIES\nPRIVILEGE\nPRIVILEGED\nPRIVILEGES\nPRIVY\nPRIZE\nPRIZED\nPRIZER\nPRIZERS\nPRIZES\nPRIZEWINNING\nPRIZING\nPRO\nPROBABILISTIC\nPROBABILISTICALLY\nPROBABILITIES\nPROBABILITY\nPROBABLE\nPROBABLY\nPROBATE\nPROBATED\nPROBATES\nPROBATING\nPROBATION\nPROBATIVE\nPROBE\nPROBED\nPROBES\nPROBING\nPROBINGS\nPROBITY\nPROBLEM\nPROBLEMATIC\nPROBLEMATICAL\nPROBLEMATICALLY\nPROBLEMS\nPROCAINE\nPROCEDURAL\nPROCEDURALLY\nPROCEDURE\nPROCEDURES\nPROCEED\nPROCEEDED\nPROCEEDING\nPROCEEDINGS\nPROCEEDS\nPROCESS\nPROCESSED\nPROCESSES\nPROCESSING\nPROCESSION\nPROCESSOR\nPROCESSORS\nPROCLAIM\nPROCLAIMED\nPROCLAIMER\nPROCLAIMERS\nPROCLAIMING\nPROCLAIMS\nPROCLAMATION\nPROCLAMATIONS\nPROCLIVITIES\nPROCLIVITY\nPROCOTOLS\nPROCRASTINATE\nPROCRASTINATED\nPROCRASTINATES\nPROCRASTINATING\nPROCRASTINATION\nPROCREATE\nPROCRUSTEAN\nPROCRUSTEANIZE\nPROCRUSTEANIZES\nPROCRUSTES\nPROCTER\nPROCURE\nPROCURED\nPROCUREMENT\nPROCUREMENTS\nPROCURER\nPROCURERS\nPROCURES\nPROCURING\nPROCYON\nPROD\nPRODIGAL\nPRODIGALLY\nPRODIGIOUS\nPRODIGY\nPRODUCE\nPRODUCED\nPRODUCER\nPRODUCERS\nPRODUCES\nPRODUCIBLE\nPRODUCING\nPRODUCT\nPRODUCTION\nPRODUCTIONS\nPRODUCTIVE\nPRODUCTIVELY\nPRODUCTIVITY\nPRODUCTS\nPROFANE\nPROFANELY\nPROFESS\nPROFESSED\nPROFESSES\nPROFESSING\nPROFESSION\nPROFESSIONAL\nPROFESSIONALISM\nPROFESSIONALLY\nPROFESSIONALS\nPROFESSIONS\nPROFESSOR\nPROFESSORIAL\nPROFESSORS\nPROFFER\nPROFFERED\nPROFFERS\nPROFICIENCY\nPROFICIENT\nPROFICIENTLY\nPROFILE\nPROFILED\nPROFILES\nPROFILING\nPROFIT\nPROFITABILITY\nPROFITABLE\nPROFITABLY\nPROFITED\nPROFITEER\nPROFITEERS\nPROFITING\nPROFITS\nPROFITTED\nPROFLIGATE\nPROFOUND\nPROFOUNDEST\nPROFOUNDLY\nPROFUNDITY\nPROFUSE\nPROFUSION\nPROGENITOR\nPROGENY\nPROGNOSIS\nPROGNOSTICATE\nPROGRAM\nPROGRAMMABILITY\nPROGRAMMABLE\nPROGRAMMED\nPROGRAMMER\nPROGRAMMERS\nPROGRAMMING\nPROGRAMS\nPROGRESS\nPROGRESSED\nPROGRESSES\nPROGRESSING\nPROGRESSION\nPROGRESSIONS\nPROGRESSIVE\nPROGRESSIVELY\nPROHIBIT\nPROHIBITED\nPROHIBITING\nPROHIBITION\nPROHIBITIONS\nPROHIBITIVE\nPROHIBITIVELY\nPROHIBITORY\nPROHIBITS\nPROJECT\nPROJECTED\nPROJECTILE\nPROJECTING\nPROJECTION\nPROJECTIONS\nPROJECTIVE\nPROJECTIVELY\nPROJECTOR\nPROJECTORS\nPROJECTS\nPROKOFIEFF\nPROKOFIEV\nPROLATE\nPROLEGOMENA\nPROLETARIAT\nPROLIFERATE\nPROLIFERATED\nPROLIFERATES\nPROLIFERATING\nPROLIFERATION\nPROLIFIC\nPROLIX\nPROLOG\nPROLOGUE\nPROLONG\nPROLONGATE\nPROLONGED\nPROLONGING\nPROLONGS\nPROMENADE\nPROMENADES\nPROMETHEAN\nPROMETHEUS\nPROMINENCE\nPROMINENT\nPROMINENTLY\nPROMISCUOUS\nPROMISE\nPROMISED\nPROMISES\nPROMISING\nPROMONTORY\nPROMOTE\nPROMOTED\nPROMOTER\nPROMOTERS\nPROMOTES\nPROMOTING\nPROMOTION\nPROMOTIONAL\nPROMOTIONS\nPROMPT\nPROMPTED\nPROMPTER\nPROMPTEST\nPROMPTING\nPROMPTINGS\nPROMPTLY\nPROMPTNESS\nPROMPTS\nPROMULGATE\nPROMULGATED\nPROMULGATES\nPROMULGATING\nPROMULGATION\nPRONE\nPRONENESS\nPRONG\nPRONGED\nPRONGS\nPRONOUN\nPRONOUNCE\nPRONOUNCEABLE\nPRONOUNCED\nPRONOUNCEMENT\nPRONOUNCEMENTS\nPRONOUNCES\nPRONOUNCING\nPRONOUNS\nPRONUNCIATION\nPRONUNCIATIONS\nPROOF\nPROOFREAD\nPROOFREADER\nPROOFS\nPROP\nPROPAGANDA\nPROPAGANDIST\nPROPAGATE\nPROPAGATED\nPROPAGATES\nPROPAGATING\nPROPAGATION\nPROPAGATIONS\nPROPANE\nPROPEL\nPROPELLANT\nPROPELLED\nPROPELLER\nPROPELLERS\nPROPELLING\nPROPELS\nPROPENSITY\nPROPER\nPROPERLY\nPROPERNESS\nPROPERTIED\nPROPERTIES\nPROPERTY\nPROPHECIES\nPROPHECY\nPROPHESIED\nPROPHESIER\nPROPHESIES\nPROPHESY\nPROPHET\nPROPHETIC\nPROPHETS\nPROPITIOUS\nPROPONENT\nPROPONENTS\nPROPORTION\nPROPORTIONAL\nPROPORTIONALLY\nPROPORTIONATELY\nPROPORTIONED\nPROPORTIONING\nPROPORTIONMENT\nPROPORTIONS\nPROPOS\nPROPOSAL\nPROPOSALS\nPROPOSE\nPROPOSED\nPROPOSER\nPROPOSES\nPROPOSING\nPROPOSITION\nPROPOSITIONAL\nPROPOSITIONALLY\nPROPOSITIONED\nPROPOSITIONING\nPROPOSITIONS\nPROPOUND\nPROPOUNDED\nPROPOUNDING\nPROPOUNDS\nPROPRIETARY\nPROPRIETOR\nPROPRIETORS\nPROPRIETY\nPROPS\nPROPULSION\nPROPULSIONS\nPRORATE\nPRORATED\nPRORATES\nPROS\nPROSCENIUM\nPROSCRIBE\nPROSCRIPTION\nPROSE\nPROSECUTE\nPROSECUTED\nPROSECUTES\nPROSECUTING\nPROSECUTION\nPROSECUTIONS\nPROSECUTOR\nPROSELYTIZE\nPROSELYTIZED\nPROSELYTIZES\nPROSELYTIZING\nPROSERPINE\nPROSODIC\nPROSODICS\nPROSPECT\nPROSPECTED\nPROSPECTING\nPROSPECTION\nPROSPECTIONS\nPROSPECTIVE\nPROSPECTIVELY\nPROSPECTIVES\nPROSPECTOR\nPROSPECTORS\nPROSPECTS\nPROSPECTUS\nPROSPER\nPROSPERED\nPROSPERING\nPROSPERITY\nPROSPEROUS\nPROSPERS\nPROSTATE\nPROSTHETIC\nPROSTITUTE\nPROSTITUTION\nPROSTRATE\nPROSTRATION\nPROTAGONIST\nPROTEAN\nPROTECT\nPROTECTED\nPROTECTING\nPROTECTION\nPROTECTIONS\nPROTECTIVE\nPROTECTIVELY\nPROTECTIVENESS\nPROTECTOR\nPROTECTORATE\nPROTECTORS\nPROTECTS\nPROTEGE\nPROTEGES\nPROTEIN\nPROTEINS\nPROTEST\nPROTESTANT\nPROTESTANTISM\nPROTESTANTIZE\nPROTESTANTIZES\nPROTESTATION\nPROTESTATIONS\nPROTESTED\nPROTESTING\nPROTESTINGLY\nPROTESTOR\nPROTESTS\nPROTISTA\nPROTOCOL\nPROTOCOLS\nPROTON\nPROTONS\nPROTOPHYTA\nPROTOPLASM\nPROTOTYPE\nPROTOTYPED\nPROTOTYPES\nPROTOTYPICAL\nPROTOTYPICALLY\nPROTOTYPING\nPROTOZOA\nPROTOZOAN\nPROTRACT\nPROTRUDE\nPROTRUDED\nPROTRUDES\nPROTRUDING\nPROTRUSION\nPROTRUSIONS\nPROTUBERANT\nPROUD\nPROUDER\nPROUDEST\nPROUDLY\nPROUST\nPROVABILITY\nPROVABLE\nPROVABLY\nPROVE\nPROVED\nPROVEN\nPROVENANCE\nPROVENCE\nPROVER\nPROVERB\nPROVERBIAL\nPROVERBS\nPROVERS\nPROVES\nPROVIDE\nPROVIDED\nPROVIDENCE\nPROVIDENT\nPROVIDER\nPROVIDERS\nPROVIDES\nPROVIDING\nPROVINCE\nPROVINCES\nPROVINCIAL\nPROVING\nPROVISION\nPROVISIONAL\nPROVISIONALLY\nPROVISIONED\nPROVISIONING\nPROVISIONS\nPROVISO\nPROVOCATION\nPROVOKE\nPROVOKED\nPROVOKES\nPROVOST\nPROW\nPROWESS\nPROWL\nPROWLED\nPROWLER\nPROWLERS\nPROWLING\nPROWS\nPROXIMAL\nPROXIMATE\nPROXIMITY\nPROXMIRE\nPROXY\nPRUDENCE\nPRUDENT\nPRUDENTIAL\nPRUDENTLY\nPRUNE\nPRUNED\nPRUNER\nPRUNERS\nPRUNES\nPRUNING\nPRURIENT\nPRUSSIA\nPRUSSIAN\nPRUSSIANIZATION\nPRUSSIANIZATIONS\nPRUSSIANIZE\nPRUSSIANIZER\nPRUSSIANIZERS\nPRUSSIANIZES\nPRY\nPRYING\nPSALM\nPSALMS\nPSEUDO\nPSEUDOFILES\nPSEUDOINSTRUCTION\nPSEUDOINSTRUCTIONS\nPSEUDONYM\nPSEUDOPARALLELISM\nPSILOCYBIN\nPSYCH\nPSYCHE\nPSYCHEDELIC\nPSYCHES\nPSYCHIATRIC\nPSYCHIATRIST\nPSYCHIATRISTS\nPSYCHIATRY\nPSYCHIC\nPSYCHO\nPSYCHOANALYSIS\nPSYCHOANALYST\nPSYCHOANALYTIC\nPSYCHOBIOLOGY\nPSYCHOLOGICAL\nPSYCHOLOGICALLY\nPSYCHOLOGIST\nPSYCHOLOGISTS\nPSYCHOLOGY\nPSYCHOPATH\nPSYCHOPATHIC\nPSYCHOPHYSIC\nPSYCHOSES\nPSYCHOSIS\nPSYCHOSOCIAL\nPSYCHOSOMATIC\nPSYCHOTHERAPEUTIC\nPSYCHOTHERAPIST\nPSYCHOTHERAPY\nPSYCHOTIC\nPTOLEMAIC\nPTOLEMAISTS\nPTOLEMY\nPUB\nPUBERTY\nPUBLIC\nPUBLICATION\nPUBLICATIONS\nPUBLICITY\nPUBLICIZE\nPUBLICIZED\nPUBLICIZES\nPUBLICIZING\nPUBLICLY\nPUBLISH\nPUBLISHED\nPUBLISHER\nPUBLISHERS\nPUBLISHES\nPUBLISHING\nPUBS\nPUCCINI\nPUCKER\nPUCKERED\nPUCKERING\nPUCKERS\nPUDDING\nPUDDINGS\nPUDDLE\nPUDDLES\nPUDDLING\nPUERTO\nPUFF\nPUFFED\nPUFFIN\nPUFFING\nPUFFS\nPUGH\nPUKE\nPULASKI\nPULITZER\nPULL\nPULLED\nPULLER\nPULLEY\nPULLEYS\nPULLING\nPULLINGS\nPULLMAN\nPULLMANIZE\nPULLMANIZES\nPULLMANS\nPULLOVER\nPULLS\nPULMONARY\nPULP\nPULPING\nPULPIT\nPULPITS\nPULSAR\nPULSATE\nPULSATION\nPULSATIONS\nPULSE\nPULSED\nPULSES\nPULSING\nPUMA\nPUMICE\nPUMMEL\nPUMP\nPUMPED\nPUMPING\nPUMPKIN\nPUMPKINS\nPUMPS\nPUN\nPUNCH\nPUNCHED\nPUNCHER\nPUNCHES\nPUNCHING\nPUNCTUAL\nPUNCTUALLY\nPUNCTUATION\nPUNCTURE\nPUNCTURED\nPUNCTURES\nPUNCTURING\nPUNDIT\nPUNGENT\nPUNIC\nPUNISH\nPUNISHABLE\nPUNISHED\nPUNISHES\nPUNISHING\nPUNISHMENT\nPUNISHMENTS\nPUNITIVE\nPUNJAB\nPUNJABI\nPUNS\nPUNT\nPUNTED\nPUNTING\nPUNTS\nPUNY\nPUP\nPUPA\nPUPIL\nPUPILS\nPUPPET\nPUPPETEER\nPUPPETS\nPUPPIES\nPUPPY\nPUPS\nPURCELL\nPURCHASE\nPURCHASED\nPURCHASER\nPURCHASERS\nPURCHASES\nPURCHASING\nPURDUE\nPURE\nPURELY\nPURER\nPUREST\nPURGATORY\nPURGE\nPURGED\nPURGES\nPURGING\nPURIFICATION\nPURIFICATIONS\nPURIFIED\nPURIFIER\nPURIFIERS\nPURIFIES\nPURIFY\nPURIFYING\nPURINA\nPURIST\nPURITAN\nPURITANIC\nPURITANIZE\nPURITANIZER\nPURITANIZERS\nPURITANIZES\nPURITY\nPURPLE\nPURPLER\nPURPLEST\nPURPORT\nPURPORTED\nPURPORTEDLY\nPURPORTER\nPURPORTERS\nPURPORTING\nPURPORTS\nPURPOSE\nPURPOSED\nPURPOSEFUL\nPURPOSEFULLY\nPURPOSELY\nPURPOSES\nPURPOSIVE\nPURR\nPURRED\nPURRING\nPURRS\nPURSE\nPURSED\nPURSER\nPURSES\nPURSUANT\nPURSUE\nPURSUED\nPURSUER\nPURSUERS\nPURSUES\nPURSUING\nPURSUIT\nPURSUITS\nPURVEYOR\nPURVIEW\nPUS\nPUSAN\nPUSEY\nPUSH\nPUSHBUTTON\nPUSHDOWN\nPUSHED\nPUSHER\nPUSHERS\nPUSHES\nPUSHING\nPUSS\nPUSSY\nPUSSYCAT\nPUT\nPUTNAM\nPUTS\nPUTT\nPUTTER\nPUTTERING\nPUTTERS\nPUTTING\nPUTTY\nPUZZLE\nPUZZLED\nPUZZLEMENT\nPUZZLER\nPUZZLERS\nPUZZLES\nPUZZLING\nPUZZLINGS\nPYGMALION\nPYGMIES\nPYGMY\nPYLE\nPYONGYANG\nPYOTR\nPYRAMID\nPYRAMIDS\nPYRE\nPYREX\nPYRRHIC\nPYTHAGORAS\nPYTHAGOREAN\nPYTHAGOREANIZE\nPYTHAGOREANIZES\nPYTHAGOREANS\nPYTHON\nQATAR\nQUA\nQUACK\nQUACKED\nQUACKERY\nQUACKS\nQUAD\nQUADRANGLE\nQUADRANGULAR\nQUADRANT\nQUADRANTS\nQUADRATIC\nQUADRATICAL\nQUADRATICALLY\nQUADRATICS\nQUADRATURE\nQUADRATURES\nQUADRENNIAL\nQUADRILATERAL\nQUADRILLION\nQUADRUPLE\nQUADRUPLED\nQUADRUPLES\nQUADRUPLING\nQUADRUPOLE\nQUAFF\nQUAGMIRE\nQUAGMIRES\nQUAHOG\nQUAIL\nQUAILS\nQUAINT\nQUAINTLY\nQUAINTNESS\nQUAKE\nQUAKED\nQUAKER\nQUAKERESS\nQUAKERIZATION\nQUAKERIZATIONS\nQUAKERIZE\nQUAKERIZES\nQUAKERS\nQUAKES\nQUAKING\nQUALIFICATION\nQUALIFICATIONS\nQUALIFIED\nQUALIFIER\nQUALIFIERS\nQUALIFIES\nQUALIFY\nQUALIFYING\nQUALITATIVE\nQUALITATIVELY\nQUALITIES\nQUALITY\nQUALM\nQUANDARIES\nQUANDARY\nQUANTA\nQUANTICO\nQUANTIFIABLE\nQUANTIFICATION\nQUANTIFICATIONS\nQUANTIFIED\nQUANTIFIER\nQUANTIFIERS\nQUANTIFIES\nQUANTIFY\nQUANTIFYING\nQUANTILE\nQUANTITATIVE\nQUANTITATIVELY\nQUANTITIES\nQUANTITY\nQUANTIZATION\nQUANTIZE\nQUANTIZED\nQUANTIZES\nQUANTIZING\nQUANTUM\nQUARANTINE\nQUARANTINES\nQUARANTINING\nQUARK\nQUARREL\nQUARRELED\nQUARRELING\nQUARRELS\nQUARRELSOME\nQUARRIES\nQUARRY\nQUART\nQUARTER\nQUARTERBACK\nQUARTERED\nQUARTERING\nQUARTERLY\nQUARTERMASTER\nQUARTERS\nQUARTET\nQUARTETS\nQUARTILE\nQUARTS\nQUARTZ\nQUARTZITE\nQUASAR\nQUASH\nQUASHED\nQUASHES\nQUASHING\nQUASI\nQUASIMODO\nQUATERNARY\nQUAVER\nQUAVERED\nQUAVERING\nQUAVERS\nQUAY\nQUEASY\nQUEBEC\nQUEEN\nQUEENLY\nQUEENS\nQUEENSLAND\nQUEER\nQUEERER\nQUEEREST\nQUEERLY\nQUEERNESS\nQUELL\nQUELLING\nQUENCH\nQUENCHED\nQUENCHES\nQUENCHING\nQUERIED\nQUERIES\nQUERY\nQUERYING\nQUEST\nQUESTED\nQUESTER\nQUESTERS\nQUESTING\nQUESTION\nQUESTIONABLE\nQUESTIONABLY\nQUESTIONED\nQUESTIONER\nQUESTIONERS\nQUESTIONING\nQUESTIONINGLY\nQUESTIONINGS\nQUESTIONNAIRE\nQUESTIONNAIRES\nQUESTIONS\nQUESTS\nQUEUE\nQUEUED\nQUEUEING\nQUEUER\nQUEUERS\nQUEUES\nQUEUING\nQUEZON\nQUIBBLE\nQUICHUA\nQUICK\nQUICKEN\nQUICKENED\nQUICKENING\nQUICKENS\nQUICKER\nQUICKEST\nQUICKIE\nQUICKLIME\nQUICKLY\nQUICKNESS\nQUICKSAND\nQUICKSILVER\nQUIESCENT\nQUIET\nQUIETED\nQUIETER\nQUIETEST\nQUIETING\nQUIETLY\nQUIETNESS\nQUIETS\nQUIETUDE\nQUILL\nQUILT\nQUILTED\nQUILTING\nQUILTS\nQUINCE\nQUININE\nQUINN\nQUINT\nQUINTET\nQUINTILLION\nQUIP\nQUIRINAL\nQUIRK\nQUIRKY\nQUIT\nQUITE\nQUITO\nQUITS\nQUITTER\nQUITTERS\nQUITTING\nQUIVER\nQUIVERED\nQUIVERING\nQUIVERS\nQUIXOTE\nQUIXOTIC\nQUIXOTISM\nQUIZ\nQUIZZED\nQUIZZES\nQUIZZICAL\nQUIZZING\nQUO\nQUONSET\nQUORUM\nQUOTA\nQUOTAS\nQUOTATION\nQUOTATIONS\nQUOTE\nQUOTED\nQUOTES\nQUOTH\nQUOTIENT\nQUOTIENTS\nQUOTING\nRABAT\nRABBI\nRABBIT\nRABBITS\nRABBLE\nRABID\nRABIES\nRABIN\nRACCOON\nRACCOONS\nRACE\nRACED\nRACER\nRACERS\nRACES\nRACETRACK\nRACHEL\nRACHMANINOFF\nRACIAL\nRACIALLY\nRACINE\nRACING\nRACK\nRACKED\nRACKET\nRACKETEER\nRACKETEERING\nRACKETEERS\nRACKETS\nRACKING\nRACKS\nRADAR\nRADARS\nRADCLIFFE\nRADIAL\nRADIALLY\nRADIAN\nRADIANCE\nRADIANT\nRADIANTLY\nRADIATE\nRADIATED\nRADIATES\nRADIATING\nRADIATION\nRADIATIONS\nRADIATOR\nRADIATORS\nRADICAL\nRADICALLY\nRADICALS\nRADICES\nRADII\nRADIO\nRADIOACTIVE\nRADIOASTRONOMY\nRADIOED\nRADIOGRAPHY\nRADIOING\nRADIOLOGY\nRADIOS\nRADISH\nRADISHES\nRADIUM\nRADIUS\nRADIX\nRADON\nRAE\nRAFAEL\nRAFFERTY\nRAFT\nRAFTER\nRAFTERS\nRAFTS\nRAG\nRAGE\nRAGED\nRAGES\nRAGGED\nRAGGEDLY\nRAGGEDNESS\nRAGING\nRAGS\nRAGUSAN\nRAGWEED\nRAID\nRAIDED\nRAIDER\nRAIDERS\nRAIDING\nRAIDS\nRAIL\nRAILED\nRAILER\nRAILERS\nRAILING\nRAILROAD\nRAILROADED\nRAILROADER\nRAILROADERS\nRAILROADING\nRAILROADS\nRAILS\nRAILWAY\nRAILWAYS\nRAIMENT\nRAIN\nRAINBOW\nRAINCOAT\nRAINCOATS\nRAINDROP\nRAINDROPS\nRAINED\nRAINFALL\nRAINIER\nRAINIEST\nRAINING\nRAINS\nRAINSTORM\nRAINY\nRAISE\nRAISED\nRAISER\nRAISERS\nRAISES\nRAISIN\nRAISING\nRAKE\nRAKED\nRAKES\nRAKING\nRALEIGH\nRALLIED\nRALLIES\nRALLY\nRALLYING\nRALPH\nRALSTON\nRAM\nRAMADA\nRAMAN\nRAMBLE\nRAMBLER\nRAMBLES\nRAMBLING\nRAMBLINGS\nRAMIFICATION\nRAMIFICATIONS\nRAMIREZ\nRAMO\nRAMONA\nRAMP\nRAMPAGE\nRAMPANT\nRAMPART\nRAMPS\nRAMROD\nRAMS\nRAMSEY\nRAN\nRANCH\nRANCHED\nRANCHER\nRANCHERS\nRANCHES\nRANCHING\nRANCID\nRAND\nRANDALL\nRANDOLPH\nRANDOM\nRANDOMIZATION\nRANDOMIZE\nRANDOMIZED\nRANDOMIZES\nRANDOMLY\nRANDOMNESS\nRANDY\nRANG\nRANGE\nRANGED\nRANGELAND\nRANGER\nRANGERS\nRANGES\nRANGING\nRANGOON\nRANGY\nRANIER\nRANK\nRANKED\nRANKER\nRANKERS\nRANKEST\nRANKIN\nRANKINE\nRANKING\nRANKINGS\nRANKLE\nRANKLY\nRANKNESS\nRANKS\nRANSACK\nRANSACKED\nRANSACKING\nRANSACKS\nRANSOM\nRANSOMER\nRANSOMING\nRANSOMS\nRANT\nRANTED\nRANTER\nRANTERS\nRANTING\nRANTS\nRAOUL\nRAP\nRAPACIOUS\nRAPE\nRAPED\nRAPER\nRAPES\nRAPHAEL\nRAPID\nRAPIDITY\nRAPIDLY\nRAPIDS\nRAPIER\nRAPING\nRAPPORT\nRAPPROCHEMENT\nRAPS\nRAPT\nRAPTLY\nRAPTURE\nRAPTURES\nRAPTUROUS\nRAPUNZEL\nRARE\nRARELY\nRARENESS\nRARER\nRAREST\nRARITAN\nRARITY\nRASCAL\nRASCALLY\nRASCALS\nRASH\nRASHER\nRASHLY\nRASHNESS\nRASMUSSEN\nRASP\nRASPBERRY\nRASPED\nRASPING\nRASPS\nRASTER\nRASTUS\nRAT\nRATE\nRATED\nRATER\nRATERS\nRATES\nRATFOR\nRATHER\nRATIFICATION\nRATIFIED\nRATIFIES\nRATIFY\nRATIFYING\nRATING\nRATINGS\nRATIO\nRATION\nRATIONAL\nRATIONALE\nRATIONALES\nRATIONALITIES\nRATIONALITY\nRATIONALIZATION\nRATIONALIZATIONS\nRATIONALIZE\nRATIONALIZED\nRATIONALIZES\nRATIONALIZING\nRATIONALLY\nRATIONALS\nRATIONING\nRATIONS\nRATIOS\nRATS\nRATTLE\nRATTLED\nRATTLER\nRATTLERS\nRATTLES\nRATTLESNAKE\nRATTLESNAKES\nRATTLING\nRAUCOUS\nRAUL\nRAVAGE\nRAVAGED\nRAVAGER\nRAVAGERS\nRAVAGES\nRAVAGING\nRAVE\nRAVED\nRAVEN\nRAVENING\nRAVENOUS\nRAVENOUSLY\nRAVENS\nRAVES\nRAVINE\nRAVINES\nRAVING\nRAVINGS\nRAW\nRAWER\nRAWEST\nRAWLINGS\nRAWLINS\nRAWLINSON\nRAWLY\nRAWNESS\nRAWSON\nRAY\nRAYBURN\nRAYLEIGH\nRAYMOND\nRAYMONDVILLE\nRAYS\nRAYTHEON\nRAZE\nRAZOR\nRAZORS\nREABBREVIATE\nREABBREVIATED\nREABBREVIATES\nREABBREVIATING\nREACH\nREACHABILITY\nREACHABLE\nREACHABLY\nREACHED\nREACHER\nREACHES\nREACHING\nREACQUIRED\nREACT\nREACTED\nREACTING\nREACTION\nREACTIONARIES\nREACTIONARY\nREACTIONS\nREACTIVATE\nREACTIVATED\nREACTIVATES\nREACTIVATING\nREACTIVATION\nREACTIVE\nREACTIVELY\nREACTIVITY\nREACTOR\nREACTORS\nREACTS\nREAD\nREADABILITY\nREADABLE\nREADER\nREADERS\nREADIED\nREADIER\nREADIES\nREADIEST\nREADILY\nREADINESS\nREADING\nREADINGS\nREADJUSTED\nREADOUT\nREADOUTS\nREADS\nREADY\nREADYING\nREAGAN\nREAL\nREALEST\nREALIGN\nREALIGNED\nREALIGNING\nREALIGNS\nREALISM\nREALIST\nREALISTIC\nREALISTICALLY\nREALISTS\nREALITIES\nREALITY\nREALIZABLE\nREALIZABLY\nREALIZATION\nREALIZATIONS\nREALIZE\nREALIZED\nREALIZES\nREALIZING\nREALLOCATE\nREALLY\nREALM\nREALMS\nREALNESS\nREALS\nREALTOR\nREAM\nREANALYZE\nREANALYZES\nREANALYZING\nREAP\nREAPED\nREAPER\nREAPING\nREAPPEAR\nREAPPEARED\nREAPPEARING\nREAPPEARS\nREAPPRAISAL\nREAPPRAISALS\nREAPS\nREAR\nREARED\nREARING\nREARRANGE\nREARRANGEABLE\nREARRANGED\nREARRANGEMENT\nREARRANGEMENTS\nREARRANGES\nREARRANGING\nREARREST\nREARRESTED\nREARS\nREASON\nREASONABLE\nREASONABLENESS\nREASONABLY\nREASONED\nREASONER\nREASONING\nREASONINGS\nREASONS\nREASSEMBLE\nREASSEMBLED\nREASSEMBLES\nREASSEMBLING\nREASSEMBLY\nREASSESSMENT\nREASSESSMENTS\nREASSIGN\nREASSIGNED\nREASSIGNING\nREASSIGNMENT\nREASSIGNMENTS\nREASSIGNS\nREASSURE\nREASSURED\nREASSURES\nREASSURING\nREAWAKEN\nREAWAKENED\nREAWAKENING\nREAWAKENS\nREBATE\nREBATES\nREBECCA\nREBEL\nREBELLED\nREBELLING\nREBELLION\nREBELLIONS\nREBELLIOUS\nREBELLIOUSLY\nREBELLIOUSNESS\nREBELS\nREBIND\nREBINDING\nREBINDS\nREBOOT\nREBOOTED\nREBOOTING\nREBOOTS\nREBOUND\nREBOUNDED\nREBOUNDING\nREBOUNDS\nREBROADCAST\nREBROADCASTING\nREBROADCASTS\nREBUFF\nREBUFFED\nREBUILD\nREBUILDING\nREBUILDS\nREBUILT\nREBUKE\nREBUKED\nREBUKES\nREBUKING\nREBUTTAL\nREBUTTED\nREBUTTING\nRECALCITRANT\nRECALCULATE\nRECALCULATED\nRECALCULATES\nRECALCULATING\nRECALCULATION\nRECALCULATIONS\nRECALIBRATE\nRECALIBRATED\nRECALIBRATES\nRECALIBRATING\nRECALL\nRECALLED\nRECALLING\nRECALLS\nRECANT\nRECAPITULATE\nRECAPITULATED\nRECAPITULATES\nRECAPITULATION\nRECAPTURE\nRECAPTURED\nRECAPTURES\nRECAPTURING\nRECAST\nRECASTING\nRECASTS\nRECEDE\nRECEDED\nRECEDES\nRECEDING\nRECEIPT\nRECEIPTS\nRECEIVABLE\nRECEIVE\nRECEIVED\nRECEIVER\nRECEIVERS\nRECEIVES\nRECEIVING\nRECENT\nRECENTLY\nRECENTNESS\nRECEPTACLE\nRECEPTACLES\nRECEPTION\nRECEPTIONIST\nRECEPTIONS\nRECEPTIVE\nRECEPTIVELY\nRECEPTIVENESS\nRECEPTIVITY\nRECEPTOR\nRECESS\nRECESSED\nRECESSES\nRECESSION\nRECESSIVE\nRECIFE\nRECIPE\nRECIPES\nRECIPIENT\nRECIPIENTS\nRECIPROCAL\nRECIPROCALLY\nRECIPROCATE\nRECIPROCATED\nRECIPROCATES\nRECIPROCATING\nRECIPROCATION\nRECIPROCITY\nRECIRCULATE\nRECIRCULATED\nRECIRCULATES\nRECIRCULATING\nRECITAL\nRECITALS\nRECITATION\nRECITATIONS\nRECITE\nRECITED\nRECITER\nRECITES\nRECITING\nRECKLESS\nRECKLESSLY\nRECKLESSNESS\nRECKON\nRECKONED\nRECKONER\nRECKONING\nRECKONINGS\nRECKONS\nRECLAIM\nRECLAIMABLE\nRECLAIMED\nRECLAIMER\nRECLAIMERS\nRECLAIMING\nRECLAIMS\nRECLAMATION\nRECLAMATIONS\nRECLASSIFICATION\nRECLASSIFIED\nRECLASSIFIES\nRECLASSIFY\nRECLASSIFYING\nRECLINE\nRECLINING\nRECODE\nRECODED\nRECODES\nRECODING\nRECOGNITION\nRECOGNITIONS\nRECOGNIZABILITY\nRECOGNIZABLE\nRECOGNIZABLY\nRECOGNIZE\nRECOGNIZED\nRECOGNIZER\nRECOGNIZERS\nRECOGNIZES\nRECOGNIZING\nRECOIL\nRECOILED\nRECOILING\nRECOILS\nRECOLLECT\nRECOLLECTED\nRECOLLECTING\nRECOLLECTION\nRECOLLECTIONS\nRECOMBINATION\nRECOMBINE\nRECOMBINED\nRECOMBINES\nRECOMBINING\nRECOMMEND\nRECOMMENDATION\nRECOMMENDATIONS\nRECOMMENDED\nRECOMMENDER\nRECOMMENDING\nRECOMMENDS\nRECOMPENSE\nRECOMPILE\nRECOMPILED\nRECOMPILES\nRECOMPILING\nRECOMPUTE\nRECOMPUTED\nRECOMPUTES\nRECOMPUTING\nRECONCILE\nRECONCILED\nRECONCILER\nRECONCILES\nRECONCILIATION\nRECONCILING\nRECONFIGURABLE\nRECONFIGURATION\nRECONFIGURATIONS\nRECONFIGURE\nRECONFIGURED\nRECONFIGURER\nRECONFIGURES\nRECONFIGURING\nRECONNECT\nRECONNECTED\nRECONNECTING\nRECONNECTION\nRECONNECTS\nRECONSIDER\nRECONSIDERATION\nRECONSIDERED\nRECONSIDERING\nRECONSIDERS\nRECONSTITUTED\nRECONSTRUCT\nRECONSTRUCTED\nRECONSTRUCTING\nRECONSTRUCTION\nRECONSTRUCTS\nRECONVERTED\nRECONVERTS\nRECORD\nRECORDED\nRECORDER\nRECORDERS\nRECORDING\nRECORDINGS\nRECORDS\nRECOUNT\nRECOUNTED\nRECOUNTING\nRECOUNTS\nRECOURSE\nRECOVER\nRECOVERABLE\nRECOVERED\nRECOVERIES\nRECOVERING\nRECOVERS\nRECOVERY\nRECREATE\nRECREATED\nRECREATES\nRECREATING\nRECREATION\nRECREATIONAL\nRECREATIONS\nRECREATIVE\nRECRUIT\nRECRUITED\nRECRUITER\nRECRUITING\nRECRUITS\nRECTA\nRECTANGLE\nRECTANGLES\nRECTANGULAR\nRECTIFY\nRECTOR\nRECTORS\nRECTUM\nRECTUMS\nRECUPERATE\nRECUR\nRECURRENCE\nRECURRENCES\nRECURRENT\nRECURRENTLY\nRECURRING\nRECURS\nRECURSE\nRECURSED\nRECURSES\nRECURSING\nRECURSION\nRECURSIONS\nRECURSIVE\nRECURSIVELY\nRECYCLABLE\nRECYCLE\nRECYCLED\nRECYCLES\nRECYCLING\nRED\nREDBREAST\nREDCOAT\nREDDEN\nREDDENED\nREDDER\nREDDEST\nREDDISH\nREDDISHNESS\nREDECLARE\nREDECLARED\nREDECLARES\nREDECLARING\nREDEEM\nREDEEMED\nREDEEMER\nREDEEMERS\nREDEEMING\nREDEEMS\nREDEFINE\nREDEFINED\nREDEFINES\nREDEFINING\nREDEFINITION\nREDEFINITIONS\nREDEMPTION\nREDESIGN\nREDESIGNED\nREDESIGNING\nREDESIGNS\nREDEVELOPMENT\nREDFORD\nREDHEAD\nREDHOOK\nREDIRECT\nREDIRECTED\nREDIRECTING\nREDIRECTION\nREDIRECTIONS\nREDISPLAY\nREDISPLAYED\nREDISPLAYING\nREDISPLAYS\nREDISTRIBUTE\nREDISTRIBUTED\nREDISTRIBUTES\nREDISTRIBUTING\nREDLY\nREDMOND\nREDNECK\nREDNESS\nREDO\nREDONE\nREDOUBLE\nREDOUBLED\nREDRAW\nREDRAWN\nREDRESS\nREDRESSED\nREDRESSES\nREDRESSING\nREDS\nREDSTONE\nREDUCE\nREDUCED\nREDUCER\nREDUCERS\nREDUCES\nREDUCIBILITY\nREDUCIBLE\nREDUCIBLY\nREDUCING\nREDUCTION\nREDUCTIONS\nREDUNDANCIES\nREDUNDANCY\nREDUNDANT\nREDUNDANTLY\nREDWOOD\nREED\nREEDS\nREEDUCATION\nREEDVILLE\nREEF\nREEFER\nREEFS\nREEL\nREELECT\nREELECTED\nREELECTING\nREELECTS\nREELED\nREELER\nREELING\nREELS\nREEMPHASIZE\nREEMPHASIZED\nREEMPHASIZES\nREEMPHASIZING\nREENABLED\nREENFORCEMENT\nREENTER\nREENTERED\nREENTERING\nREENTERS\nREENTRANT\nREESE\nREESTABLISH\nREESTABLISHED\nREESTABLISHES\nREESTABLISHING\nREEVALUATE\nREEVALUATED\nREEVALUATES\nREEVALUATING\nREEVALUATION\nREEVES\nREEXAMINE\nREEXAMINED\nREEXAMINES\nREEXAMINING\nREEXECUTED\nREFER\nREFEREE\nREFEREED\nREFEREEING\nREFEREES\nREFERENCE\nREFERENCED\nREFERENCER\nREFERENCES\nREFERENCING\nREFERENDA\nREFERENDUM\nREFERENDUMS\nREFERENT\nREFERENTIAL\nREFERENTIALITY\nREFERENTIALLY\nREFERENTS\nREFERRAL\nREFERRALS\nREFERRED\nREFERRING\nREFERS\nREFILL\nREFILLABLE\nREFILLED\nREFILLING\nREFILLS\nREFINE\nREFINED\nREFINEMENT\nREFINEMENTS\nREFINER\nREFINERY\nREFINES\nREFINING\nREFLECT\nREFLECTED\nREFLECTING\nREFLECTION\nREFLECTIONS\nREFLECTIVE\nREFLECTIVELY\nREFLECTIVITY\nREFLECTOR\nREFLECTORS\nREFLECTS\nREFLEX\nREFLEXES\nREFLEXIVE\nREFLEXIVELY\nREFLEXIVENESS\nREFLEXIVITY\nREFORESTATION\nREFORM\nREFORMABLE\nREFORMAT\nREFORMATION\nREFORMATORY\nREFORMATS\nREFORMATTED\nREFORMATTING\nREFORMED\nREFORMER\nREFORMERS\nREFORMING\nREFORMS\nREFORMULATE\nREFORMULATED\nREFORMULATES\nREFORMULATING\nREFORMULATION\nREFRACT\nREFRACTED\nREFRACTION\nREFRACTORY\nREFRAGMENT\nREFRAIN\nREFRAINED\nREFRAINING\nREFRAINS\nREFRESH\nREFRESHED\nREFRESHER\nREFRESHERS\nREFRESHES\nREFRESHING\nREFRESHINGLY\nREFRESHMENT\nREFRESHMENTS\nREFRIGERATE\nREFRIGERATOR\nREFRIGERATORS\nREFUEL\nREFUELED\nREFUELING\nREFUELS\nREFUGE\nREFUGEE\nREFUGEES\nREFUSAL\nREFUSE\nREFUSED\nREFUSES\nREFUSING\nREFUTABLE\nREFUTATION\nREFUTE\nREFUTED\nREFUTER\nREFUTES\nREFUTING\nREGAIN\nREGAINED\nREGAINING\nREGAINS\nREGAL\nREGALED\nREGALLY\nREGARD\nREGARDED\nREGARDING\nREGARDLESS\nREGARDS\nREGATTA\nREGENERATE\nREGENERATED\nREGENERATES\nREGENERATING\nREGENERATION\nREGENERATIVE\nREGENERATOR\nREGENERATORS\nREGENT\nREGENTS\nREGIME\nREGIMEN\nREGIMENT\nREGIMENTATION\nREGIMENTED\nREGIMENTS\nREGIMES\nREGINA\nREGINALD\nREGION\nREGIONAL\nREGIONALLY\nREGIONS\nREGIS\nREGISTER\nREGISTERED\nREGISTERING\nREGISTERS\nREGISTRAR\nREGISTRATION\nREGISTRATIONS\nREGISTRY\nREGRESS\nREGRESSED\nREGRESSES\nREGRESSING\nREGRESSION\nREGRESSIONS\nREGRESSIVE\nREGRET\nREGRETFUL\nREGRETFULLY\nREGRETS\nREGRETTABLE\nREGRETTABLY\nREGRETTED\nREGRETTING\nREGROUP\nREGROUPED\nREGROUPING\nREGULAR\nREGULARITIES\nREGULARITY\nREGULARLY\nREGULARS\nREGULATE\nREGULATED\nREGULATES\nREGULATING\nREGULATION\nREGULATIONS\nREGULATIVE\nREGULATOR\nREGULATORS\nREGULATORY\nREGULUS\nREHABILITATE\nREHEARSAL\nREHEARSALS\nREHEARSE\nREHEARSED\nREHEARSER\nREHEARSES\nREHEARSING\nREICH\nREICHENBERG\nREICHSTAG\nREID\nREIGN\nREIGNED\nREIGNING\nREIGNS\nREILLY\nREIMBURSABLE\nREIMBURSE\nREIMBURSED\nREIMBURSEMENT\nREIMBURSEMENTS\nREIN\nREINCARNATE\nREINCARNATED\nREINCARNATION\nREINDEER\nREINED\nREINFORCE\nREINFORCED\nREINFORCEMENT\nREINFORCEMENTS\nREINFORCER\nREINFORCES\nREINFORCING\nREINHARD\nREINHARDT\nREINHOLD\nREINITIALIZE\nREINITIALIZED\nREINITIALIZING\nREINS\nREINSERT\nREINSERTED\nREINSERTING\nREINSERTS\nREINSTATE\nREINSTATED\nREINSTATEMENT\nREINSTATES\nREINSTATING\nREINTERPRET\nREINTERPRETED\nREINTERPRETING\nREINTERPRETS\nREINTRODUCE\nREINTRODUCED\nREINTRODUCES\nREINTRODUCING\nREINVENT\nREINVENTED\nREINVENTING\nREINVENTS\nREITERATE\nREITERATED\nREITERATES\nREITERATING\nREITERATION\nREJECT\nREJECTED\nREJECTING\nREJECTION\nREJECTIONS\nREJECTOR\nREJECTORS\nREJECTS\nREJOICE\nREJOICED\nREJOICER\nREJOICES\nREJOICING\nREJOIN\nREJOINDER\nREJOINED\nREJOINING\nREJOINS\nRELABEL\nRELABELED\nRELABELING\nRELABELLED\nRELABELLING\nRELABELS\nRELAPSE\nRELATE\nRELATED\nRELATER\nRELATES\nRELATING\nRELATION\nRELATIONAL\nRELATIONALLY\nRELATIONS\nRELATIONSHIP\nRELATIONSHIPS\nRELATIVE\nRELATIVELY\nRELATIVENESS\nRELATIVES\nRELATIVISM\nRELATIVISTIC\nRELATIVISTICALLY\nRELATIVITY\nRELAX\nRELAXATION\nRELAXATIONS\nRELAXED\nRELAXER\nRELAXES\nRELAXING\nRELAY\nRELAYED\nRELAYING\nRELAYS\nRELEASE\nRELEASED\nRELEASES\nRELEASING\nRELEGATE\nRELEGATED\nRELEGATES\nRELEGATING\nRELENT\nRELENTED\nRELENTING\nRELENTLESS\nRELENTLESSLY\nRELENTLESSNESS\nRELENTS\nRELEVANCE\nRELEVANCES\nRELEVANT\nRELEVANTLY\nRELIABILITY\nRELIABLE\nRELIABLY\nRELIANCE\nRELIANT\nRELIC\nRELICS\nRELIED\nRELIEF\nRELIES\nRELIEVE\nRELIEVED\nRELIEVER\nRELIEVERS\nRELIEVES\nRELIEVING\nRELIGION\nRELIGIONS\nRELIGIOUS\nRELIGIOUSLY\nRELIGIOUSNESS\nRELINK\nRELINQUISH\nRELINQUISHED\nRELINQUISHES\nRELINQUISHING\nRELISH\nRELISHED\nRELISHES\nRELISHING\nRELIVE\nRELIVES\nRELIVING\nRELOAD\nRELOADED\nRELOADER\nRELOADING\nRELOADS\nRELOCATABLE\nRELOCATE\nRELOCATED\nRELOCATES\nRELOCATING\nRELOCATION\nRELOCATIONS\nRELUCTANCE\nRELUCTANT\nRELUCTANTLY\nRELY\nRELYING\nREMAIN\nREMAINDER\nREMAINDERS\nREMAINED\nREMAINING\nREMAINS\nREMARK\nREMARKABLE\nREMARKABLENESS\nREMARKABLY\nREMARKED\nREMARKING\nREMARKS\nREMBRANDT\nREMEDIAL\nREMEDIED\nREMEDIES\nREMEDY\nREMEDYING\nREMEMBER\nREMEMBERED\nREMEMBERING\nREMEMBERS\nREMEMBRANCE\nREMEMBRANCES\nREMIND\nREMINDED\nREMINDER\nREMINDERS\nREMINDING\nREMINDS\nREMINGTON\nREMINISCENCE\nREMINISCENCES\nREMINISCENT\nREMINISCENTLY\nREMISS\nREMISSION\nREMIT\nREMITTANCE\nREMNANT\nREMNANTS\nREMODEL\nREMODELED\nREMODELING\nREMODELS\nREMONSTRATE\nREMONSTRATED\nREMONSTRATES\nREMONSTRATING\nREMONSTRATION\nREMONSTRATIVE\nREMORSE\nREMORSEFUL\nREMOTE\nREMOTELY\nREMOTENESS\nREMOTEST\nREMOVABLE\nREMOVAL\nREMOVALS\nREMOVE\nREMOVED\nREMOVER\nREMOVES\nREMOVING\nREMUNERATE\nREMUNERATION\nREMUS\nREMY\nRENA\nRENAISSANCE\nRENAL\nRENAME\nRENAMED\nRENAMES\nRENAMING\nRENAULT\nRENAULTS\nREND\nRENDER\nRENDERED\nRENDERING\nRENDERINGS\nRENDERS\nRENDEZVOUS\nRENDING\nRENDITION\nRENDITIONS\nRENDS\nRENE\nRENEE\nRENEGADE\nRENEGOTIABLE\nRENEW\nRENEWABLE\nRENEWAL\nRENEWED\nRENEWER\nRENEWING\nRENEWS\nRENO\nRENOIR\nRENOUNCE\nRENOUNCES\nRENOUNCING\nRENOVATE\nRENOVATED\nRENOVATION\nRENOWN\nRENOWNED\nRENSSELAER\nRENT\nRENTAL\nRENTALS\nRENTED\nRENTING\nRENTS\nRENUMBER\nRENUMBERING\nRENUMBERS\nRENUNCIATE\nRENUNCIATION\nRENVILLE\nREOCCUR\nREOPEN\nREOPENED\nREOPENING\nREOPENS\nREORDER\nREORDERED\nREORDERING\nREORDERS\nREORGANIZATION\nREORGANIZATIONS\nREORGANIZE\nREORGANIZED\nREORGANIZES\nREORGANIZING\nREPACKAGE\nREPAID\nREPAIR\nREPAIRED\nREPAIRER\nREPAIRING\nREPAIRMAN\nREPAIRMEN\nREPAIRS\nREPARATION\nREPARATIONS\nREPARTEE\nREPARTITION\nREPAST\nREPASTS\nREPAY\nREPAYING\nREPAYS\nREPEAL\nREPEALED\nREPEALER\nREPEALING\nREPEALS\nREPEAT\nREPEATABLE\nREPEATED\nREPEATEDLY\nREPEATER\nREPEATERS\nREPEATING\nREPEATS\nREPEL\nREPELLED\nREPELLENT\nREPELS\nREPENT\nREPENTANCE\nREPENTED\nREPENTING\nREPENTS\nREPERCUSSION\nREPERCUSSIONS\nREPERTOIRE\nREPERTORY\nREPETITION\nREPETITIONS\nREPETITIOUS\nREPETITIVE\nREPETITIVELY\nREPETITIVENESS\nREPHRASE\nREPHRASED\nREPHRASES\nREPHRASING\nREPINE\nREPLACE\nREPLACEABLE\nREPLACED\nREPLACEMENT\nREPLACEMENTS\nREPLACER\nREPLACES\nREPLACING\nREPLAY\nREPLAYED\nREPLAYING\nREPLAYS\nREPLENISH\nREPLENISHED\nREPLENISHES\nREPLENISHING\nREPLETE\nREPLETENESS\nREPLETION\nREPLICA\nREPLICAS\nREPLICATE\nREPLICATED\nREPLICATES\nREPLICATING\nREPLICATION\nREPLICATIONS\nREPLIED\nREPLIES\nREPLY\nREPLYING\nREPORT\nREPORTED\nREPORTEDLY\nREPORTER\nREPORTERS\nREPORTING\nREPORTS\nREPOSE\nREPOSED\nREPOSES\nREPOSING\nREPOSITION\nREPOSITIONED\nREPOSITIONING\nREPOSITIONS\nREPOSITORIES\nREPOSITORY\nREPREHENSIBLE\nREPRESENT\nREPRESENTABLE\nREPRESENTABLY\nREPRESENTATION\nREPRESENTATIONAL\nREPRESENTATIONALLY\nREPRESENTATIONS\nREPRESENTATIVE\nREPRESENTATIVELY\nREPRESENTATIVENESS\nREPRESENTATIVES\nREPRESENTED\nREPRESENTING\nREPRESENTS\nREPRESS\nREPRESSED\nREPRESSES\nREPRESSING\nREPRESSION\nREPRESSIONS\nREPRESSIVE\nREPRIEVE\nREPRIEVED\nREPRIEVES\nREPRIEVING\nREPRIMAND\nREPRINT\nREPRINTED\nREPRINTING\nREPRINTS\nREPRISAL\nREPRISALS\nREPROACH\nREPROACHED\nREPROACHES\nREPROACHING\nREPROBATE\nREPRODUCE\nREPRODUCED\nREPRODUCER\nREPRODUCERS\nREPRODUCES\nREPRODUCIBILITIES\nREPRODUCIBILITY\nREPRODUCIBLE\nREPRODUCIBLY\nREPRODUCING\nREPRODUCTION\nREPRODUCTIONS\nREPROGRAM\nREPROGRAMMED\nREPROGRAMMING\nREPROGRAMS\nREPROOF\nREPROVE\nREPROVER\nREPTILE\nREPTILES\nREPTILIAN\nREPUBLIC\nREPUBLICAN\nREPUBLICANS\nREPUBLICS\nREPUDIATE\nREPUDIATED\nREPUDIATES\nREPUDIATING\nREPUDIATION\nREPUDIATIONS\nREPUGNANT\nREPULSE\nREPULSED\nREPULSES\nREPULSING\nREPULSION\nREPULSIONS\nREPULSIVE\nREPUTABLE\nREPUTABLY\nREPUTATION\nREPUTATIONS\nREPUTE\nREPUTED\nREPUTEDLY\nREPUTES\nREQUEST\nREQUESTED\nREQUESTER\nREQUESTERS\nREQUESTING\nREQUESTS\nREQUIRE\nREQUIRED\nREQUIREMENT\nREQUIREMENTS\nREQUIRES\nREQUIRING\nREQUISITE\nREQUISITES\nREQUISITION\nREQUISITIONED\nREQUISITIONING\nREQUISITIONS\nREREAD\nREREGISTER\nREROUTE\nREROUTED\nREROUTES\nREROUTING\nRERUN\nRERUNS\nRESCHEDULE\nRESCIND\nRESCUE\nRESCUED\nRESCUER\nRESCUERS\nRESCUES\nRESCUING\nRESEARCH\nRESEARCHED\nRESEARCHER\nRESEARCHERS\nRESEARCHES\nRESEARCHING\nRESELECT\nRESELECTED\nRESELECTING\nRESELECTS\nRESELL\nRESELLING\nRESEMBLANCE\nRESEMBLANCES\nRESEMBLE\nRESEMBLED\nRESEMBLES\nRESEMBLING\nRESENT\nRESENTED\nRESENTFUL\nRESENTFULLY\nRESENTING\nRESENTMENT\nRESENTS\nRESERPINE\nRESERVATION\nRESERVATIONS\nRESERVE\nRESERVED\nRESERVER\nRESERVES\nRESERVING\nRESERVOIR\nRESERVOIRS\nRESET\nRESETS\nRESETTING\nRESETTINGS\nRESIDE\nRESIDED\nRESIDENCE\nRESIDENCES\nRESIDENT\nRESIDENTIAL\nRESIDENTIALLY\nRESIDENTS\nRESIDES\nRESIDING\nRESIDUAL\nRESIDUE\nRESIDUES\nRESIGN\nRESIGNATION\nRESIGNATIONS\nRESIGNED\nRESIGNING\nRESIGNS\nRESILIENT\nRESIN\nRESINS\nRESIST\nRESISTABLE\nRESISTANCE\nRESISTANCES\nRESISTANT\nRESISTANTLY\nRESISTED\nRESISTIBLE\nRESISTING\nRESISTIVE\nRESISTIVITY\nRESISTOR\nRESISTORS\nRESISTS\nRESOLUTE\nRESOLUTELY\nRESOLUTENESS\nRESOLUTION\nRESOLUTIONS\nRESOLVABLE\nRESOLVE\nRESOLVED\nRESOLVER\nRESOLVERS\nRESOLVES\nRESOLVING\nRESONANCE\nRESONANCES\nRESONANT\nRESONATE\nRESORT\nRESORTED\nRESORTING\nRESORTS\nRESOUND\nRESOUNDING\nRESOUNDS\nRESOURCE\nRESOURCEFUL\nRESOURCEFULLY\nRESOURCEFULNESS\nRESOURCES\nRESPECT\nRESPECTABILITY\nRESPECTABLE\nRESPECTABLY\nRESPECTED\nRESPECTER\nRESPECTFUL\nRESPECTFULLY\nRESPECTFULNESS\nRESPECTING\nRESPECTIVE\nRESPECTIVELY\nRESPECTS\nRESPIRATION\nRESPIRATOR\nRESPIRATORY\nRESPITE\nRESPLENDENT\nRESPLENDENTLY\nRESPOND\nRESPONDED\nRESPONDENT\nRESPONDENTS\nRESPONDER\nRESPONDING\nRESPONDS\nRESPONSE\nRESPONSES\nRESPONSIBILITIES\nRESPONSIBILITY\nRESPONSIBLE\nRESPONSIBLENESS\nRESPONSIBLY\nRESPONSIVE\nRESPONSIVELY\nRESPONSIVENESS\nREST\nRESTART\nRESTARTED\nRESTARTING\nRESTARTS\nRESTATE\nRESTATED\nRESTATEMENT\nRESTATES\nRESTATING\nRESTAURANT\nRESTAURANTS\nRESTAURATEUR\nRESTED\nRESTFUL\nRESTFULLY\nRESTFULNESS\nRESTING\nRESTITUTION\nRESTIVE\nRESTLESS\nRESTLESSLY\nRESTLESSNESS\nRESTORATION\nRESTORATIONS\nRESTORE\nRESTORED\nRESTORER\nRESTORERS\nRESTORES\nRESTORING\nRESTRAIN\nRESTRAINED\nRESTRAINER\nRESTRAINERS\nRESTRAINING\nRESTRAINS\nRESTRAINT\nRESTRAINTS\nRESTRICT\nRESTRICTED\nRESTRICTING\nRESTRICTION\nRESTRICTIONS\nRESTRICTIVE\nRESTRICTIVELY\nRESTRICTS\nRESTROOM\nRESTRUCTURE\nRESTRUCTURED\nRESTRUCTURES\nRESTRUCTURING\nRESTS\nRESULT\nRESULTANT\nRESULTANTLY\nRESULTANTS\nRESULTED\nRESULTING\nRESULTS\nRESUMABLE\nRESUME\nRESUMED\nRESUMES\nRESUMING\nRESUMPTION\nRESUMPTIONS\nRESURGENT\nRESURRECT\nRESURRECTED\nRESURRECTING\nRESURRECTION\nRESURRECTIONS\nRESURRECTOR\nRESURRECTORS\nRESURRECTS\nRESUSCITATE\nRESYNCHRONIZATION\nRESYNCHRONIZE\nRESYNCHRONIZED\nRESYNCHRONIZING\nRETAIL\nRETAILER\nRETAILERS\nRETAILING\nRETAIN\nRETAINED\nRETAINER\nRETAINERS\nRETAINING\nRETAINMENT\nRETAINS\nRETALIATE\nRETALIATION\nRETALIATORY\nRETARD\nRETARDED\nRETARDER\nRETARDING\nRETCH\nRETENTION\nRETENTIONS\nRETENTIVE\nRETENTIVELY\nRETENTIVENESS\nRETICLE\nRETICLES\nRETICULAR\nRETICULATE\nRETICULATED\nRETICULATELY\nRETICULATES\nRETICULATING\nRETICULATION\nRETINA\nRETINAL\nRETINAS\nRETINUE\nRETIRE\nRETIRED\nRETIREE\nRETIREMENT\nRETIREMENTS\nRETIRES\nRETIRING\nRETORT\nRETORTED\nRETORTS\nRETRACE\nRETRACED\nRETRACES\nRETRACING\nRETRACT\nRETRACTED\nRETRACTING\nRETRACTION\nRETRACTIONS\nRETRACTS\nRETRAIN\nRETRAINED\nRETRAINING\nRETRAINS\nRETRANSLATE\nRETRANSLATED\nRETRANSMISSION\nRETRANSMISSIONS\nRETRANSMIT\nRETRANSMITS\nRETRANSMITTED\nRETRANSMITTING\nRETREAT\nRETREATED\nRETREATING\nRETREATS\nRETRIBUTION\nRETRIED\nRETRIER\nRETRIERS\nRETRIES\nRETRIEVABLE\nRETRIEVAL\nRETRIEVALS\nRETRIEVE\nRETRIEVED\nRETRIEVER\nRETRIEVERS\nRETRIEVES\nRETRIEVING\nRETROACTIVE\nRETROACTIVELY\nRETROFIT\nRETROFITTING\nRETROGRADE\nRETROSPECT\nRETROSPECTION\nRETROSPECTIVE\nRETRY\nRETRYING\nRETURN\nRETURNABLE\nRETURNED\nRETURNER\nRETURNING\nRETURNS\nRETYPE\nRETYPED\nRETYPES\nRETYPING\nREUB\nREUBEN\nREUNION\nREUNIONS\nREUNITE\nREUNITED\nREUNITING\nREUSABLE\nREUSE\nREUSED\nREUSES\nREUSING\nREUTERS\nREUTHER\nREVAMP\nREVAMPED\nREVAMPING\nREVAMPS\nREVEAL\nREVEALED\nREVEALING\nREVEALS\nREVEL\nREVELATION\nREVELATIONS\nREVELED\nREVELER\nREVELING\nREVELRY\nREVELS\nREVENGE\nREVENGER\nREVENUE\nREVENUERS\nREVENUES\nREVERBERATE\nREVERE\nREVERED\nREVERENCE\nREVEREND\nREVERENDS\nREVERENT\nREVERENTLY\nREVERES\nREVERIE\nREVERIFIED\nREVERIFIES\nREVERIFY\nREVERIFYING\nREVERING\nREVERSAL\nREVERSALS\nREVERSE\nREVERSED\nREVERSELY\nREVERSER\nREVERSES\nREVERSIBLE\nREVERSING\nREVERSION\nREVERT\nREVERTED\nREVERTING\nREVERTS\nREVIEW\nREVIEWED\nREVIEWER\nREVIEWERS\nREVIEWING\nREVIEWS\nREVILE\nREVILED\nREVILER\nREVILING\nREVISE\nREVISED\nREVISER\nREVISES\nREVISING\nREVISION\nREVISIONARY\nREVISIONS\nREVISIT\nREVISITED\nREVISITING\nREVISITS\nREVIVAL\nREVIVALS\nREVIVE\nREVIVED\nREVIVER\nREVIVES\nREVIVING\nREVOCABLE\nREVOCATION\nREVOKE\nREVOKED\nREVOKER\nREVOKES\nREVOKING\nREVOLT\nREVOLTED\nREVOLTER\nREVOLTING\nREVOLTINGLY\nREVOLTS\nREVOLUTION\nREVOLUTIONARIES\nREVOLUTIONARY\nREVOLUTIONIZE\nREVOLUTIONIZED\nREVOLUTIONIZER\nREVOLUTIONS\nREVOLVE\nREVOLVED\nREVOLVER\nREVOLVERS\nREVOLVES\nREVOLVING\nREVULSION\nREWARD\nREWARDED\nREWARDING\nREWARDINGLY\nREWARDS\nREWIND\nREWINDING\nREWINDS\nREWIRE\nREWORK\nREWORKED\nREWORKING\nREWORKS\nREWOUND\nREWRITE\nREWRITES\nREWRITING\nREWRITTEN\nREX\nREYKJAVIK\nREYNOLDS\nRHAPSODY\nRHEA\nRHEIMS\nRHEINHOLDT\nRHENISH\nRHESUS\nRHETORIC\nRHEUMATIC\nRHEUMATISM\nRHINE\nRHINESTONE\nRHINO\nRHINOCEROS\nRHO\nRHODA\nRHODE\nRHODES\nRHODESIA\nRHODODENDRON\nRHOMBIC\nRHOMBUS\nRHUBARB\nRHYME\nRHYMED\nRHYMES\nRHYMING\nRHYTHM\nRHYTHMIC\nRHYTHMICALLY\nRHYTHMS\nRIB\nRIBALD\nRIBBED\nRIBBING\nRIBBON\nRIBBONS\nRIBOFLAVIN\nRIBONUCLEIC\nRIBS\nRICA\nRICAN\nRICANISM\nRICANS\nRICE\nRICH\nRICHARD\nRICHARDS\nRICHARDSON\nRICHER\nRICHES\nRICHEST\nRICHEY\nRICHFIELD\nRICHLAND\nRICHLY\nRICHMOND\nRICHNESS\nRICHTER\nRICK\nRICKENBAUGH\nRICKETS\nRICKETTSIA\nRICKETY\nRICKSHAW\nRICKSHAWS\nRICO\nRICOCHET\nRID\nRIDDANCE\nRIDDEN\nRIDDING\nRIDDLE\nRIDDLED\nRIDDLES\nRIDDLING\nRIDE\nRIDER\nRIDERS\nRIDES\nRIDGE\nRIDGEFIELD\nRIDGEPOLE\nRIDGES\nRIDGWAY\nRIDICULE\nRIDICULED\nRIDICULES\nRIDICULING\nRIDICULOUS\nRIDICULOUSLY\nRIDICULOUSNESS\nRIDING\nRIDS\nRIEMANN\nRIEMANNIAN\nRIFLE\nRIFLED\nRIFLEMAN\nRIFLER\nRIFLES\nRIFLING\nRIFT\nRIG\nRIGA\nRIGEL\nRIGGING\nRIGGS\nRIGHT\nRIGHTED\nRIGHTEOUS\nRIGHTEOUSLY\nRIGHTEOUSNESS\nRIGHTER\nRIGHTFUL\nRIGHTFULLY\nRIGHTFULNESS\nRIGHTING\nRIGHTLY\nRIGHTMOST\nRIGHTNESS\nRIGHTS\nRIGHTWARD\nRIGID\nRIGIDITY\nRIGIDLY\nRIGOR\nRIGOROUS\nRIGOROUSLY\nRIGORS\nRIGS\nRILEY\nRILKE\nRILL\nRIM\nRIME\nRIMS\nRIND\nRINDS\nRINEHART\nRING\nRINGED\nRINGER\nRINGERS\nRINGING\nRINGINGLY\nRINGINGS\nRINGS\nRINGSIDE\nRINK\nRINSE\nRINSED\nRINSER\nRINSES\nRINSING\nRIO\nRIORDAN\nRIOT\nRIOTED\nRIOTER\nRIOTERS\nRIOTING\nRIOTOUS\nRIOTS\nRIP\nRIPE\nRIPELY\nRIPEN\nRIPENESS\nRIPLEY\nRIPOFF\nRIPPED\nRIPPING\nRIPPLE\nRIPPLED\nRIPPLES\nRIPPLING\nRIPS\nRISC\nRISE\nRISEN\nRISER\nRISERS\nRISES\nRISING\nRISINGS\nRISK\nRISKED\nRISKING\nRISKS\nRISKY\nRITCHIE\nRITE\nRITES\nRITTER\nRITUAL\nRITUALLY\nRITUALS\nRITZ\nRIVAL\nRIVALED\nRIVALLED\nRIVALLING\nRIVALRIES\nRIVALRY\nRIVALS\nRIVER\nRIVERBANK\nRIVERFRONT\nRIVERS\nRIVERSIDE\nRIVERVIEW\nRIVET\nRIVETER\nRIVETS\nRIVIERA\nRIVULET\nRIVULETS\nRIYADH\nROACH\nROAD\nROADBED\nROADBLOCK\nROADS\nROADSIDE\nROADSTER\nROADSTERS\nROADWAY\nROADWAYS\nROAM\nROAMED\nROAMING\nROAMS\nROAR\nROARED\nROARER\nROARING\nROARS\nROAST\nROASTED\nROASTER\nROASTING\nROASTS\nROB\nROBBED\nROBBER\nROBBERIES\nROBBERS\nROBBERY\nROBBIE\nROBBIN\nROBBING\nROBBINS\nROBE\nROBED\nROBERT\nROBERTA\nROBERTO\nROBERTS\nROBERTSON\nROBERTSONS\nROBES\nROBIN\nROBING\nROBINS\nROBINSON\nROBINSONVILLE\nROBOT\nROBOTIC\nROBOTICS\nROBOTS\nROBS\nROBUST\nROBUSTLY\nROBUSTNESS\nROCCO\nROCHESTER\nROCHFORD\nROCK\nROCKABYE\nROCKAWAY\nROCKAWAYS\nROCKED\nROCKEFELLER\nROCKER\nROCKERS\nROCKET\nROCKETED\nROCKETING\nROCKETS\nROCKFORD\nROCKIES\nROCKING\nROCKLAND\nROCKS\nROCKVILLE\nROCKWELL\nROCKY\nROD\nRODE\nRODENT\nRODENTS\nRODEO\nRODGERS\nRODNEY\nRODRIGUEZ\nRODS\nROE\nROENTGEN\nROGER\nROGERS\nROGUE\nROGUES\nROLAND\nROLE\nROLES\nROLL\nROLLBACK\nROLLED\nROLLER\nROLLERS\nROLLIE\nROLLING\nROLLINS\nROLLS\nROMAN\nROMANCE\nROMANCER\nROMANCERS\nROMANCES\nROMANCING\nROMANESQUE\nROMANIA\nROMANIZATIONS\nROMANIZER\nROMANIZERS\nROMANIZES\nROMANO\nROMANS\nROMANTIC\nROMANTICS\nROME\nROMELDALE\nROMEO\nROMP\nROMPED\nROMPER\nROMPING\nROMPS\nROMULUS\nRON\nRONALD\nRONNIE\nROOF\nROOFED\nROOFER\nROOFING\nROOFS\nROOFTOP\nROOK\nROOKIE\nROOM\nROOMED\nROOMER\nROOMERS\nROOMFUL\nROOMING\nROOMMATE\nROOMS\nROOMY\nROONEY\nROOSEVELT\nROOSEVELTIAN\nROOST\nROOSTER\nROOSTERS\nROOT\nROOTED\nROOTER\nROOTING\nROOTS\nROPE\nROPED\nROPER\nROPERS\nROPES\nROPING\nROQUEMORE\nRORSCHACH\nROSA\nROSABELLE\nROSALIE\nROSARY\nROSE\nROSEBUD\nROSEBUDS\nROSEBUSH\nROSELAND\nROSELLA\nROSEMARY\nROSEN\nROSENBERG\nROSENBLUM\nROSENTHAL\nROSENZWEIG\nROSES\nROSETTA\nROSETTE\nROSIE\nROSINESS\nROSS\nROSSI\nROSTER\nROSTRUM\nROSWELL\nROSY\nROT\nROTARIAN\nROTARIANS\nROTARY\nROTATE\nROTATED\nROTATES\nROTATING\nROTATION\nROTATIONAL\nROTATIONS\nROTATOR\nROTH\nROTHSCHILD\nROTOR\nROTS\nROTTEN\nROTTENNESS\nROTTERDAM\nROTTING\nROTUND\nROTUNDA\nROUGE\nROUGH\nROUGHED\nROUGHEN\nROUGHER\nROUGHEST\nROUGHLY\nROUGHNECK\nROUGHNESS\nROULETTE\nROUND\nROUNDABOUT\nROUNDED\nROUNDEDNESS\nROUNDER\nROUNDEST\nROUNDHEAD\nROUNDHOUSE\nROUNDING\nROUNDLY\nROUNDNESS\nROUNDOFF\nROUNDS\nROUNDTABLE\nROUNDUP\nROUNDWORM\nROURKE\nROUSE\nROUSED\nROUSES\nROUSING\nROUSSEAU\nROUSTABOUT\nROUT\nROUTE\nROUTED\nROUTER\nROUTERS\nROUTES\nROUTINE\nROUTINELY\nROUTINES\nROUTING\nROUTINGS\nROVE\nROVED\nROVER\nROVES\nROVING\nROW\nROWBOAT\nROWDY\nROWE\nROWED\nROWENA\nROWER\nROWING\nROWLAND\nROWLEY\nROWS\nROXBURY\nROXY\nROY\nROYAL\nROYALIST\nROYALISTS\nROYALLY\nROYALTIES\nROYALTY\nROYCE\nROZELLE\nRUANDA\nRUB\nRUBAIYAT\nRUBBED\nRUBBER\nRUBBERS\nRUBBERY\nRUBBING\nRUBBISH\nRUBBLE\nRUBDOWN\nRUBE\nRUBEN\nRUBENS\nRUBIES\nRUBIN\nRUBLE\nRUBLES\nRUBOUT\nRUBS\nRUBY\nRUDDER\nRUDDERS\nRUDDINESS\nRUDDY\nRUDE\nRUDELY\nRUDENESS\nRUDIMENT\nRUDIMENTARY\nRUDIMENTS\nRUDOLF\nRUDOLPH\nRUDY\nRUDYARD\nRUE\nRUEFULLY\nRUFFIAN\nRUFFIANLY\nRUFFIANS\nRUFFLE\nRUFFLED\nRUFFLES\nRUFUS\nRUG\nRUGGED\nRUGGEDLY\nRUGGEDNESS\nRUGS\nRUIN\nRUINATION\nRUINATIONS\nRUINED\nRUINING\nRUINOUS\nRUINOUSLY\nRUINS\nRULE\nRULED\nRULER\nRULERS\nRULES\nRULING\nRULINGS\nRUM\nRUMANIA\nRUMANIAN\nRUMANIANS\nRUMBLE\nRUMBLED\nRUMBLER\nRUMBLES\nRUMBLING\nRUMEN\nRUMFORD\nRUMMAGE\nRUMMEL\nRUMMY\nRUMOR\nRUMORED\nRUMORS\nRUMP\nRUMPLE\nRUMPLED\nRUMPLY\nRUMPUS\nRUN\nRUNAWAY\nRUNDOWN\nRUNG\nRUNGE\nRUNGS\nRUNNABLE\nRUNNER\nRUNNERS\nRUNNING\nRUNNYMEDE\nRUNOFF\nRUNS\nRUNT\nRUNTIME\nRUNYON\nRUPEE\nRUPPERT\nRUPTURE\nRUPTURED\nRUPTURES\nRUPTURING\nRURAL\nRURALLY\nRUSH\nRUSHED\nRUSHER\nRUSHES\nRUSHING\nRUSHMORE\nRUSS\nRUSSELL\nRUSSET\nRUSSIA\nRUSSIAN\nRUSSIANIZATIONS\nRUSSIANIZES\nRUSSIANS\nRUSSO\nRUST\nRUSTED\nRUSTIC\nRUSTICATE\nRUSTICATED\nRUSTICATES\nRUSTICATING\nRUSTICATION\nRUSTING\nRUSTLE\nRUSTLED\nRUSTLER\nRUSTLERS\nRUSTLING\nRUSTS\nRUSTY\nRUT\nRUTGERS\nRUTH\nRUTHERFORD\nRUTHLESS\nRUTHLESSLY\nRUTHLESSNESS\nRUTLAND\nRUTLEDGE\nRUTS\nRWANDA\nRYAN\nRYDBERG\nRYDER\nRYE\nSABBATH\nSABBATHIZE\nSABBATHIZES\nSABBATICAL\nSABER\nSABERS\nSABINA\nSABINE\nSABLE\nSABLES\nSABOTAGE\nSACHS\nSACK\nSACKER\nSACKING\nSACKS\nSACRAMENT\nSACRAMENTO\nSACRED\nSACREDLY\nSACREDNESS\nSACRIFICE\nSACRIFICED\nSACRIFICER\nSACRIFICERS\nSACRIFICES\nSACRIFICIAL\nSACRIFICIALLY\nSACRIFICING\nSACRILEGE\nSACRILEGIOUS\nSACROSANCT\nSAD\nSADDEN\nSADDENED\nSADDENS\nSADDER\nSADDEST\nSADDLE\nSADDLEBAG\nSADDLED\nSADDLES\nSADIE\nSADISM\nSADIST\nSADISTIC\nSADISTICALLY\nSADISTS\nSADLER\nSADLY\nSADNESS\nSAFARI\nSAFE\nSAFEGUARD\nSAFEGUARDED\nSAFEGUARDING\nSAFEGUARDS\nSAFEKEEPING\nSAFELY\nSAFENESS\nSAFER\nSAFES\nSAFEST\nSAFETIES\nSAFETY\nSAFFRON\nSAG\nSAGA\nSAGACIOUS\nSAGACITY\nSAGE\nSAGEBRUSH\nSAGELY\nSAGES\nSAGGING\nSAGINAW\nSAGITTAL\nSAGITTARIUS\nSAGS\nSAGUARO\nSAHARA\nSAID\nSAIGON\nSAIL\nSAILBOAT\nSAILED\nSAILFISH\nSAILING\nSAILOR\nSAILORLY\nSAILORS\nSAILS\nSAINT\nSAINTED\nSAINTHOOD\nSAINTLY\nSAINTS\nSAKE\nSAKES\nSAL\nSALAAM\nSALABLE\nSALAD\nSALADS\nSALAMANDER\nSALAMI\nSALARIED\nSALARIES\nSALARY\nSALE\nSALEM\nSALERNO\nSALES\nSALESGIRL\nSALESIAN\nSALESLADY\nSALESMAN\nSALESMEN\nSALESPERSON\nSALIENT\nSALINA\nSALINE\nSALISBURY\nSALISH\nSALIVA\nSALIVARY\nSALIVATE\nSALK\nSALLE\nSALLIES\nSALLOW\nSALLY\nSALLYING\nSALMON\nSALON\nSALONS\nSALOON\nSALOONS\nSALT\nSALTED\nSALTER\nSALTERS\nSALTIER\nSALTIEST\nSALTINESS\nSALTING\nSALTON\nSALTS\nSALTY\nSALUTARY\nSALUTATION\nSALUTATIONS\nSALUTE\nSALUTED\nSALUTES\nSALUTING\nSALVADOR\nSALVADORAN\nSALVAGE\nSALVAGED\nSALVAGER\nSALVAGES\nSALVAGING\nSALVATION\nSALVATORE\nSALVE\nSALVER\nSALVES\nSALZ\nSAM\nSAMARITAN\nSAME\nSAMENESS\nSAMMY\nSAMOA\nSAMOAN\nSAMPLE\nSAMPLED\nSAMPLER\nSAMPLERS\nSAMPLES\nSAMPLING\nSAMPLINGS\nSAMPSON\nSAMSON\nSAMUEL\nSAMUELS\nSAMUELSON\nSAN\nSANA\nSANATORIA\nSANATORIUM\nSANBORN\nSANCHEZ\nSANCHO\nSANCTIFICATION\nSANCTIFIED\nSANCTIFY\nSANCTIMONIOUS\nSANCTION\nSANCTIONED\nSANCTIONING\nSANCTIONS\nSANCTITY\nSANCTUARIES\nSANCTUARY\nSANCTUM\nSAND\nSANDAL\nSANDALS\nSANDBAG\nSANDBURG\nSANDED\nSANDER\nSANDERLING\nSANDERS\nSANDERSON\nSANDIA\nSANDING\nSANDMAN\nSANDPAPER\nSANDRA\nSANDS\nSANDSTONE\nSANDUSKY\nSANDWICH\nSANDWICHES\nSANDY\nSANE\nSANELY\nSANER\nSANEST\nSANFORD\nSANG\nSANGUINE\nSANHEDRIN\nSANITARIUM\nSANITARY\nSANITATION\nSANITY\nSANK\nSANSKRIT\nSANSKRITIC\nSANSKRITIZE\nSANTA\nSANTAYANA\nSANTIAGO\nSANTO\nSAO\nSAP\nSAPIENS\nSAPLING\nSAPLINGS\nSAPPHIRE\nSAPPHO\nSAPS\nSAPSUCKER\nSARA\nSARACEN\nSARACENS\nSARAH\nSARAN\nSARASOTA\nSARATOGA\nSARCASM\nSARCASMS\nSARCASTIC\nSARDINE\nSARDINIA\nSARDONIC\nSARGENT\nSARI\nSARTRE\nSASH\nSASKATCHEWAN\nSASKATOON\nSAT\nSATAN\nSATANIC\nSATANISM\nSATANIST\nSATCHEL\nSATCHELS\nSATE\nSATED\nSATELLITE\nSATELLITES\nSATES\nSATIN\nSATING\nSATIRE\nSATIRES\nSATIRIC\nSATISFACTION\nSATISFACTIONS\nSATISFACTORILY\nSATISFACTORY\nSATISFIABILITY\nSATISFIABLE\nSATISFIED\nSATISFIES\nSATISFY\nSATISFYING\nSATURATE\nSATURATED\nSATURATES\nSATURATING\nSATURATION\nSATURDAY\nSATURDAYS\nSATURN\nSATURNALIA\nSATURNISM\nSATYR\nSAUCE\nSAUCEPAN\nSAUCEPANS\nSAUCER\nSAUCERS\nSAUCES\nSAUCY\nSAUD\nSAUDI\nSAUKVILLE\nSAUL\nSAULT\nSAUNDERS\nSAUNTER\nSAUSAGE\nSAUSAGES\nSAVAGE\nSAVAGED\nSAVAGELY\nSAVAGENESS\nSAVAGER\nSAVAGERS\nSAVAGES\nSAVAGING\nSAVANNAH\nSAVE\nSAVED\nSAVER\nSAVERS\nSAVES\nSAVING\nSAVINGS\nSAVIOR\nSAVIORS\nSAVIOUR\nSAVONAROLA\nSAVOR\nSAVORED\nSAVORING\nSAVORS\nSAVORY\nSAVOY\nSAVOYARD\nSAVOYARDS\nSAW\nSAWDUST\nSAWED\nSAWFISH\nSAWING\nSAWMILL\nSAWMILLS\nSAWS\nSAWTOOTH\nSAX\nSAXON\nSAXONIZATION\nSAXONIZATIONS\nSAXONIZE\nSAXONIZES\nSAXONS\nSAXONY\nSAXOPHONE\nSAXTON\nSAY\nSAYER\nSAYERS\nSAYING\nSAYINGS\nSAYS\nSCAB\nSCABBARD\nSCABBARDS\nSCABROUS\nSCAFFOLD\nSCAFFOLDING\nSCAFFOLDINGS\nSCAFFOLDS\nSCALA\nSCALABLE\nSCALAR\nSCALARS\nSCALD\nSCALDED\nSCALDING\nSCALE\nSCALED\nSCALES\nSCALING\nSCALINGS\nSCALLOP\nSCALLOPED\nSCALLOPS\nSCALP\nSCALPS\nSCALY\nSCAMPER\nSCAMPERING\nSCAMPERS\nSCAN\nSCANDAL\nSCANDALOUS\nSCANDALS\nSCANDINAVIA\nSCANDINAVIAN\nSCANDINAVIANS\nSCANNED\nSCANNER\nSCANNERS\nSCANNING\nSCANS\nSCANT\nSCANTIER\nSCANTIEST\nSCANTILY\nSCANTINESS\nSCANTLY\nSCANTY\nSCAPEGOAT\nSCAR\nSCARBOROUGH\nSCARCE\nSCARCELY\nSCARCENESS\nSCARCER\nSCARCITY\nSCARE\nSCARECROW\nSCARED\nSCARES\nSCARF\nSCARING\nSCARLATTI\nSCARLET\nSCARS\nSCARSDALE\nSCARVES\nSCARY\nSCATTER\nSCATTERBRAIN\nSCATTERED\nSCATTERING\nSCATTERS\nSCENARIO\nSCENARIOS\nSCENE\nSCENERY\nSCENES\nSCENIC\nSCENT\nSCENTED\nSCENTS\nSCEPTER\nSCEPTERS\nSCHAEFER\nSCHAEFFER\nSCHAFER\nSCHAFFNER\nSCHANTZ\nSCHAPIRO\nSCHEDULABLE\nSCHEDULE\nSCHEDULED\nSCHEDULER\nSCHEDULERS\nSCHEDULES\nSCHEDULING\nSCHEHERAZADE\nSCHELLING\nSCHEMA\nSCHEMAS\nSCHEMATA\nSCHEMATIC\nSCHEMATICALLY\nSCHEMATICS\nSCHEME\nSCHEMED\nSCHEMER\nSCHEMERS\nSCHEMES\nSCHEMING\nSCHILLER\nSCHISM\nSCHIZOPHRENIA\nSCHLESINGER\nSCHLITZ\nSCHLOSS\nSCHMIDT\nSCHMITT\nSCHNABEL\nSCHNEIDER\nSCHOENBERG\nSCHOFIELD\nSCHOLAR\nSCHOLARLY\nSCHOLARS\nSCHOLARSHIP\nSCHOLARSHIPS\nSCHOLASTIC\nSCHOLASTICALLY\nSCHOLASTICS\nSCHOOL\nSCHOOLBOY\nSCHOOLBOYS\nSCHOOLED\nSCHOOLER\nSCHOOLERS\nSCHOOLHOUSE\nSCHOOLHOUSES\nSCHOOLING\nSCHOOLMASTER\nSCHOOLMASTERS\nSCHOOLROOM\nSCHOOLROOMS\nSCHOOLS\nSCHOONER\nSCHOPENHAUER\nSCHOTTKY\nSCHROEDER\nSCHROEDINGER\nSCHUBERT\nSCHULTZ\nSCHULZ\nSCHUMACHER\nSCHUMAN\nSCHUMANN\nSCHUSTER\nSCHUYLER\nSCHUYLKILL\nSCHWAB\nSCHWARTZ\nSCHWEITZER\nSCIENCE\nSCIENCES\nSCIENTIFIC\nSCIENTIFICALLY\nSCIENTIST\nSCIENTISTS\nSCISSOR\nSCISSORED\nSCISSORING\nSCISSORS\nSCLEROSIS\nSCLEROTIC\nSCOFF\nSCOFFED\nSCOFFER\nSCOFFING\nSCOFFS\nSCOLD\nSCOLDED\nSCOLDING\nSCOLDS\nSCOOP\nSCOOPED\nSCOOPING\nSCOOPS\nSCOOT\nSCOPE\nSCOPED\nSCOPES\nSCOPING\nSCORCH\nSCORCHED\nSCORCHER\nSCORCHES\nSCORCHING\nSCORE\nSCOREBOARD\nSCORECARD\nSCORED\nSCORER\nSCORERS\nSCORES\nSCORING\nSCORINGS\nSCORN\nSCORNED\nSCORNER\nSCORNFUL\nSCORNFULLY\nSCORNING\nSCORNS\nSCORPIO\nSCORPION\nSCORPIONS\nSCOT\nSCOTCH\nSCOTCHGARD\nSCOTCHMAN\nSCOTIA\nSCOTIAN\nSCOTLAND\nSCOTS\nSCOTSMAN\nSCOTSMEN\nSCOTT\nSCOTTISH\nSCOTTSDALE\nSCOTTY\nSCOUNDREL\nSCOUNDRELS\nSCOUR\nSCOURED\nSCOURGE\nSCOURING\nSCOURS\nSCOUT\nSCOUTED\nSCOUTING\nSCOUTS\nSCOW\nSCOWL\nSCOWLED\nSCOWLING\nSCOWLS\nSCRAM\nSCRAMBLE\nSCRAMBLED\nSCRAMBLER\nSCRAMBLES\nSCRAMBLING\nSCRANTON\nSCRAP\nSCRAPE\nSCRAPED\nSCRAPER\nSCRAPERS\nSCRAPES\nSCRAPING\nSCRAPINGS\nSCRAPPED\nSCRAPS\nSCRATCH\nSCRATCHED\nSCRATCHER\nSCRATCHERS\nSCRATCHES\nSCRATCHING\nSCRATCHY\nSCRAWL\nSCRAWLED\nSCRAWLING\nSCRAWLS\nSCRAWNY\nSCREAM\nSCREAMED\nSCREAMER\nSCREAMERS\nSCREAMING\nSCREAMS\nSCREECH\nSCREECHED\nSCREECHES\nSCREECHING\nSCREEN\nSCREENED\nSCREENING\nSCREENINGS\nSCREENPLAY\nSCREENS\nSCREW\nSCREWBALL\nSCREWDRIVER\nSCREWED\nSCREWING\nSCREWS\nSCRIBBLE\nSCRIBBLED\nSCRIBBLER\nSCRIBBLES\nSCRIBE\nSCRIBES\nSCRIBING\nSCRIBNERS\nSCRIMMAGE\nSCRIPPS\nSCRIPT\nSCRIPTS\nSCRIPTURE\nSCRIPTURES\nSCROLL\nSCROLLED\nSCROLLING\nSCROLLS\nSCROOGE\nSCROUNGE\nSCRUB\nSCRUMPTIOUS\nSCRUPLE\nSCRUPULOUS\nSCRUPULOUSLY\nSCRUTINIZE\nSCRUTINIZED\nSCRUTINIZING\nSCRUTINY\nSCUBA\nSCUD\nSCUFFLE\nSCUFFLED\nSCUFFLES\nSCUFFLING\nSCULPT\nSCULPTED\nSCULPTOR\nSCULPTORS\nSCULPTS\nSCULPTURE\nSCULPTURED\nSCULPTURES\nSCURRIED\nSCURRY\nSCURVY\nSCUTTLE\nSCUTTLED\nSCUTTLES\nSCUTTLING\nSCYLLA\nSCYTHE\nSCYTHES\nSCYTHIA\nSEA\nSEABOARD\nSEABORG\nSEABROOK\nSEACOAST\nSEACOASTS\nSEAFOOD\nSEAGATE\nSEAGRAM\nSEAGULL\nSEAHORSE\nSEAL\nSEALED\nSEALER\nSEALING\nSEALS\nSEALY\nSEAM\nSEAMAN\nSEAMED\nSEAMEN\nSEAMING\nSEAMS\nSEAMY\nSEAN\nSEAPORT\nSEAPORTS\nSEAQUARIUM\nSEAR\nSEARCH\nSEARCHED\nSEARCHER\nSEARCHERS\nSEARCHES\nSEARCHING\nSEARCHINGLY\nSEARCHINGS\nSEARCHLIGHT\nSEARED\nSEARING\nSEARINGLY\nSEARS\nSEAS\nSEASHORE\nSEASHORES\nSEASIDE\nSEASON\nSEASONABLE\nSEASONABLY\nSEASONAL\nSEASONALLY\nSEASONED\nSEASONER\nSEASONERS\nSEASONING\nSEASONINGS\nSEASONS\nSEAT\nSEATED\nSEATING\nSEATS\nSEATTLE\nSEAWARD\nSEAWEED\nSEBASTIAN\nSECANT\nSECEDE\nSECEDED\nSECEDES\nSECEDING\nSECESSION\nSECLUDE\nSECLUDED\nSECLUSION\nSECOND\nSECONDARIES\nSECONDARILY\nSECONDARY\nSECONDED\nSECONDER\nSECONDERS\nSECONDHAND\nSECONDING\nSECONDLY\nSECONDS\nSECRECY\nSECRET\nSECRETARIAL\nSECRETARIAT\nSECRETARIES\nSECRETARY\nSECRETE\nSECRETED\nSECRETES\nSECRETING\nSECRETION\nSECRETIONS\nSECRETIVE\nSECRETIVELY\nSECRETLY\nSECRETS\nSECT\nSECTARIAN\nSECTION\nSECTIONAL\nSECTIONED\nSECTIONING\nSECTIONS\nSECTOR\nSECTORS\nSECTS\nSECULAR\nSECURE\nSECURED\nSECURELY\nSECURES\nSECURING\nSECURINGS\nSECURITIES\nSECURITY\nSEDAN\nSEDATE\nSEDGE\nSEDGWICK\nSEDIMENT\nSEDIMENTARY\nSEDIMENTS\nSEDITION\nSEDITIOUS\nSEDUCE\nSEDUCED\nSEDUCER\nSEDUCERS\nSEDUCES\nSEDUCING\nSEDUCTION\nSEDUCTIVE\nSEE\nSEED\nSEEDED\nSEEDER\nSEEDERS\nSEEDING\nSEEDINGS\nSEEDLING\nSEEDLINGS\nSEEDS\nSEEDY\nSEEING\nSEEK\nSEEKER\nSEEKERS\nSEEKING\nSEEKS\nSEELEY\nSEEM\nSEEMED\nSEEMING\nSEEMINGLY\nSEEMLY\nSEEMS\nSEEN\nSEEP\nSEEPAGE\nSEEPED\nSEEPING\nSEEPS\nSEER\nSEERS\nSEERSUCKER\nSEES\nSEETHE\nSEETHED\nSEETHES\nSEETHING\nSEGMENT\nSEGMENTATION\nSEGMENTATIONS\nSEGMENTED\nSEGMENTING\nSEGMENTS\nSEGOVIA\nSEGREGATE\nSEGREGATED\nSEGREGATES\nSEGREGATING\nSEGREGATION\nSEGUNDO\nSEIDEL\nSEISMIC\nSEISMOGRAPH\nSEISMOLOGY\nSEIZE\nSEIZED\nSEIZES\nSEIZING\nSEIZURE\nSEIZURES\nSELDOM\nSELECT\nSELECTED\nSELECTING\nSELECTION\nSELECTIONS\nSELECTIVE\nSELECTIVELY\nSELECTIVITY\nSELECTMAN\nSELECTMEN\nSELECTOR\nSELECTORS\nSELECTRIC\nSELECTS\nSELENA\nSELENIUM\nSELF\nSELFISH\nSELFISHLY\nSELFISHNESS\nSELFRIDGE\nSELFSAME\nSELKIRK\nSELL\nSELLER\nSELLERS\nSELLING\nSELLOUT\nSELLS\nSELMA\nSELTZER\nSELVES\nSELWYN\nSEMANTIC\nSEMANTICAL\nSEMANTICALLY\nSEMANTICIST\nSEMANTICISTS\nSEMANTICS\nSEMAPHORE\nSEMAPHORES\nSEMBLANCE\nSEMESTER\nSEMESTERS\nSEMI\nSEMIAUTOMATED\nSEMICOLON\nSEMICOLONS\nSEMICONDUCTOR\nSEMICONDUCTORS\nSEMINAL\nSEMINAR\nSEMINARIAN\nSEMINARIES\nSEMINARS\nSEMINARY\nSEMINOLE\nSEMIPERMANENT\nSEMIPERMANENTLY\nSEMIRAMIS\nSEMITE\nSEMITIC\nSEMITICIZE\nSEMITICIZES\nSEMITIZATION\nSEMITIZATIONS\nSEMITIZE\nSEMITIZES\nSENATE\nSENATES\nSENATOR\nSENATORIAL\nSENATORS\nSEND\nSENDER\nSENDERS\nSENDING\nSENDS\nSENECA\nSENEGAL\nSENILE\nSENIOR\nSENIORITY\nSENIORS\nSENSATION\nSENSATIONAL\nSENSATIONALLY\nSENSATIONS\nSENSE\nSENSED\nSENSELESS\nSENSELESSLY\nSENSELESSNESS\nSENSES\nSENSIBILITIES\nSENSIBILITY\nSENSIBLE\nSENSIBLY\nSENSING\nSENSITIVE\nSENSITIVELY\nSENSITIVENESS\nSENSITIVES\nSENSITIVITIES\nSENSITIVITY\nSENSOR\nSENSORS\nSENSORY\nSENSUAL\nSENSUOUS\nSENT\nSENTENCE\nSENTENCED\nSENTENCES\nSENTENCING\nSENTENTIAL\nSENTIMENT\nSENTIMENTAL\nSENTIMENTALLY\nSENTIMENTS\nSENTINEL\nSENTINELS\nSENTRIES\nSENTRY\nSEOUL\nSEPARABLE\nSEPARATE\nSEPARATED\nSEPARATELY\nSEPARATENESS\nSEPARATES\nSEPARATING\nSEPARATION\nSEPARATIONS\nSEPARATOR\nSEPARATORS\nSEPIA\nSEPOY\nSEPT\nSEPTEMBER\nSEPTEMBERS\nSEPULCHER\nSEPULCHERS\nSEQUEL\nSEQUELS\nSEQUENCE\nSEQUENCED\nSEQUENCER\nSEQUENCERS\nSEQUENCES\nSEQUENCING\nSEQUENCINGS\nSEQUENTIAL\nSEQUENTIALITY\nSEQUENTIALIZE\nSEQUENTIALIZED\nSEQUENTIALIZES\nSEQUENTIALIZING\nSEQUENTIALLY\nSEQUESTER\nSEQUOIA\nSERAFIN\nSERBIA\nSERBIAN\nSERBIANS\nSERENDIPITOUS\nSERENDIPITY\nSERENE\nSERENELY\nSERENITY\nSERF\nSERFS\nSERGEANT\nSERGEANTS\nSERGEI\nSERIAL\nSERIALIZABILITY\nSERIALIZABLE\nSERIALIZATION\nSERIALIZATIONS\nSERIALIZE\nSERIALIZED\nSERIALIZES\nSERIALIZING\nSERIALLY\nSERIALS\nSERIES\nSERIF\nSERIOUS\nSERIOUSLY\nSERIOUSNESS\nSERMON\nSERMONS\nSERPENS\nSERPENT\nSERPENTINE\nSERPENTS\nSERRA\nSERUM\nSERUMS\nSERVANT\nSERVANTS\nSERVE\nSERVED\nSERVER\nSERVERS\nSERVES\nSERVICE\nSERVICEABILITY\nSERVICEABLE\nSERVICED\nSERVICEMAN\nSERVICEMEN\nSERVICES\nSERVICING\nSERVILE\nSERVING\nSERVINGS\nSERVITUDE\nSERVO\nSERVOMECHANISM\nSESAME\nSESSION\nSESSIONS\nSET\nSETBACK\nSETH\nSETS\nSETTABLE\nSETTER\nSETTERS\nSETTING\nSETTINGS\nSETTLE\nSETTLED\nSETTLEMENT\nSETTLEMENTS\nSETTLER\nSETTLERS\nSETTLES\nSETTLING\nSETUP\nSETUPS\nSEVEN\nSEVENFOLD\nSEVENS\nSEVENTEEN\nSEVENTEENS\nSEVENTEENTH\nSEVENTH\nSEVENTIES\nSEVENTIETH\nSEVENTY\nSEVER\nSEVERAL\nSEVERALFOLD\nSEVERALLY\nSEVERANCE\nSEVERE\nSEVERED\nSEVERELY\nSEVERER\nSEVEREST\nSEVERING\nSEVERITIES\nSEVERITY\nSEVERN\nSEVERS\nSEVILLE\nSEW\nSEWAGE\nSEWARD\nSEWED\nSEWER\nSEWERS\nSEWING\nSEWS\nSEX\nSEXED\nSEXES\nSEXIST\nSEXTANS\nSEXTET\nSEXTILLION\nSEXTON\nSEXTUPLE\nSEXTUPLET\nSEXUAL\nSEXUALITY\nSEXUALLY\nSEXY\nSEYCHELLES\nSEYMOUR\nSHABBY\nSHACK\nSHACKED\nSHACKLE\nSHACKLED\nSHACKLES\nSHACKLING\nSHACKS\nSHADE\nSHADED\nSHADES\nSHADIER\nSHADIEST\nSHADILY\nSHADINESS\nSHADING\nSHADINGS\nSHADOW\nSHADOWED\nSHADOWING\nSHADOWS\nSHADOWY\nSHADY\nSHAFER\nSHAFFER\nSHAFT\nSHAFTS\nSHAGGY\nSHAKABLE\nSHAKABLY\nSHAKE\nSHAKEDOWN\nSHAKEN\nSHAKER\nSHAKERS\nSHAKES\nSHAKESPEARE\nSHAKESPEAREAN\nSHAKESPEARIAN\nSHAKESPEARIZE\nSHAKESPEARIZES\nSHAKINESS\nSHAKING\nSHAKY\nSHALE\nSHALL\nSHALLOW\nSHALLOWER\nSHALLOWLY\nSHALLOWNESS\nSHAM\nSHAMBLES\nSHAME\nSHAMED\nSHAMEFUL\nSHAMEFULLY\nSHAMELESS\nSHAMELESSLY\nSHAMES\nSHAMING\nSHAMPOO\nSHAMROCK\nSHAMS\nSHANGHAI\nSHANGHAIED\nSHANGHAIING\nSHANGHAIINGS\nSHANGHAIS\nSHANNON\nSHANTIES\nSHANTUNG\nSHANTY\nSHAPE\nSHAPED\nSHAPELESS\nSHAPELESSLY\nSHAPELESSNESS\nSHAPELY\nSHAPER\nSHAPERS\nSHAPES\nSHAPING\nSHAPIRO\nSHARABLE\nSHARD\nSHARE\nSHAREABLE\nSHARECROPPER\nSHARECROPPERS\nSHARED\nSHAREHOLDER\nSHAREHOLDERS\nSHARER\nSHARERS\nSHARES\nSHARI\nSHARING\nSHARK\nSHARKS\nSHARON\nSHARP\nSHARPE\nSHARPEN\nSHARPENED\nSHARPENING\nSHARPENS\nSHARPER\nSHARPEST\nSHARPLY\nSHARPNESS\nSHARPSHOOT\nSHASTA\nSHATTER\nSHATTERED\nSHATTERING\nSHATTERPROOF\nSHATTERS\nSHATTUCK\nSHAVE\nSHAVED\nSHAVEN\nSHAVES\nSHAVING\nSHAVINGS\nSHAWANO\nSHAWL\nSHAWLS\nSHAWNEE\nSHE\nSHEA\nSHEAF\nSHEAR\nSHEARED\nSHEARER\nSHEARING\nSHEARS\nSHEATH\nSHEATHING\nSHEATHS\nSHEAVES\nSHEBOYGAN\nSHED\nSHEDDING\nSHEDIR\nSHEDS\nSHEEHAN\nSHEEN\nSHEEP\nSHEEPSKIN\nSHEER\nSHEERED\nSHEET\nSHEETED\nSHEETING\nSHEETS\nSHEFFIELD\nSHEIK\nSHEILA\nSHELBY\nSHELDON\nSHELF\nSHELL\nSHELLED\nSHELLER\nSHELLEY\nSHELLING\nSHELLS\nSHELTER\nSHELTERED\nSHELTERING\nSHELTERS\nSHELTON\nSHELVE\nSHELVED\nSHELVES\nSHELVING\nSHENANDOAH\nSHENANIGAN\nSHEPARD\nSHEPHERD\nSHEPHERDS\nSHEPPARD\nSHERATON\nSHERBET\nSHERIDAN\nSHERIFF\nSHERIFFS\nSHERLOCK\nSHERMAN\nSHERRILL\nSHERRY\nSHERWIN\nSHERWOOD\nSHIBBOLETH\nSHIED\nSHIELD\nSHIELDED\nSHIELDING\nSHIELDS\nSHIES\nSHIFT\nSHIFTED\nSHIFTER\nSHIFTERS\nSHIFTIER\nSHIFTIEST\nSHIFTILY\nSHIFTINESS\nSHIFTING\nSHIFTS\nSHIFTY\nSHIITE\nSHIITES\nSHILL\nSHILLING\nSHILLINGS\nSHILLONG\nSHILOH\nSHIMMER\nSHIMMERING\nSHIN\nSHINBONE\nSHINE\nSHINED\nSHINER\nSHINERS\nSHINES\nSHINGLE\nSHINGLES\nSHINING\nSHININGLY\nSHINTO\nSHINTOISM\nSHINTOIZE\nSHINTOIZES\nSHINY\nSHIP\nSHIPBOARD\nSHIPBUILDING\nSHIPLEY\nSHIPMATE\nSHIPMENT\nSHIPMENTS\nSHIPPED\nSHIPPER\nSHIPPERS\nSHIPPING\nSHIPS\nSHIPSHAPE\nSHIPWRECK\nSHIPWRECKED\nSHIPWRECKS\nSHIPYARD\nSHIRE\nSHIRK\nSHIRKER\nSHIRKING\nSHIRKS\nSHIRLEY\nSHIRT\nSHIRTING\nSHIRTS\nSHIT\nSHIVA\nSHIVER\nSHIVERED\nSHIVERER\nSHIVERING\nSHIVERS\nSHMUEL\nSHOAL\nSHOALS\nSHOCK\nSHOCKED\nSHOCKER\nSHOCKERS\nSHOCKING\nSHOCKINGLY\nSHOCKLEY\nSHOCKS\nSHOD\nSHODDY\nSHOE\nSHOED\nSHOEHORN\nSHOEING\nSHOELACE\nSHOEMAKER\nSHOES\nSHOESTRING\nSHOJI\nSHONE\nSHOOK\nSHOOT\nSHOOTER\nSHOOTERS\nSHOOTING\nSHOOTINGS\nSHOOTS\nSHOP\nSHOPKEEPER\nSHOPKEEPERS\nSHOPPED\nSHOPPER\nSHOPPERS\nSHOPPING\nSHOPS\nSHOPWORN\nSHORE\nSHORELINE\nSHORES\nSHOREWOOD\nSHORN\nSHORT\nSHORTAGE\nSHORTAGES\nSHORTCOMING\nSHORTCOMINGS\nSHORTCUT\nSHORTCUTS\nSHORTED\nSHORTEN\nSHORTENED\nSHORTENING\nSHORTENS\nSHORTER\nSHORTEST\nSHORTFALL\nSHORTHAND\nSHORTHANDED\nSHORTING\nSHORTISH\nSHORTLY\nSHORTNESS\nSHORTS\nSHORTSIGHTED\nSHORTSTOP\nSHOSHONE\nSHOT\nSHOTGUN\nSHOTGUNS\nSHOTS\nSHOULD\nSHOULDER\nSHOULDERED\nSHOULDERING\nSHOULDERS\nSHOUT\nSHOUTED\nSHOUTER\nSHOUTERS\nSHOUTING\nSHOUTS\nSHOVE\nSHOVED\nSHOVEL\nSHOVELED\nSHOVELS\nSHOVES\nSHOVING\nSHOW\nSHOWBOAT\nSHOWCASE\nSHOWDOWN\nSHOWED\nSHOWER\nSHOWERED\nSHOWERING\nSHOWERS\nSHOWING\nSHOWINGS\nSHOWN\nSHOWPIECE\nSHOWROOM\nSHOWS\nSHOWY\nSHRANK\nSHRAPNEL\nSHRED\nSHREDDER\nSHREDDING\nSHREDS\nSHREVEPORT\nSHREW\nSHREWD\nSHREWDEST\nSHREWDLY\nSHREWDNESS\nSHREWS\nSHRIEK\nSHRIEKED\nSHRIEKING\nSHRIEKS\nSHRILL\nSHRILLED\nSHRILLING\nSHRILLNESS\nSHRILLY\nSHRIMP\nSHRINE\nSHRINES\nSHRINK\nSHRINKABLE\nSHRINKAGE\nSHRINKING\nSHRINKS\nSHRIVEL\nSHRIVELED\nSHROUD\nSHROUDED\nSHRUB\nSHRUBBERY\nSHRUBS\nSHRUG\nSHRUGS\nSHRUNK\nSHRUNKEN\nSHU\nSHUDDER\nSHUDDERED\nSHUDDERING\nSHUDDERS\nSHUFFLE\nSHUFFLEBOARD\nSHUFFLED\nSHUFFLES\nSHUFFLING\nSHULMAN\nSHUN\nSHUNS\nSHUNT\nSHUT\nSHUTDOWN\nSHUTDOWNS\nSHUTOFF\nSHUTOUT\nSHUTS\nSHUTTER\nSHUTTERED\nSHUTTERS\nSHUTTING\nSHUTTLE\nSHUTTLECOCK\nSHUTTLED\nSHUTTLES\nSHUTTLING\nSHY\nSHYLOCK\nSHYLOCKIAN\nSHYLY\nSHYNESS\nSIAM\nSIAMESE\nSIAN\nSIBERIA\nSIBERIAN\nSIBLEY\nSIBLING\nSIBLINGS\nSICILIAN\nSICILIANA\nSICILIANS\nSICILY\nSICK\nSICKEN\nSICKER\nSICKEST\nSICKLE\nSICKLY\nSICKNESS\nSICKNESSES\nSICKROOM\nSIDE\nSIDEARM\nSIDEBAND\nSIDEBOARD\nSIDEBOARDS\nSIDEBURNS\nSIDECAR\nSIDED\nSIDELIGHT\nSIDELIGHTS\nSIDELINE\nSIDEREAL\nSIDES\nSIDESADDLE\nSIDESHOW\nSIDESTEP\nSIDETRACK\nSIDEWALK\nSIDEWALKS\nSIDEWAYS\nSIDEWISE\nSIDING\nSIDINGS\nSIDNEY\nSIEGE\nSIEGEL\nSIEGES\nSIEGFRIED\nSIEGLINDA\nSIEGMUND\nSIEMENS\nSIENA\nSIERRA\nSIEVE\nSIEVES\nSIFFORD\nSIFT\nSIFTED\nSIFTER\nSIFTING\nSIGGRAPH\nSIGH\nSIGHED\nSIGHING\nSIGHS\nSIGHT\nSIGHTED\nSIGHTING\nSIGHTINGS\nSIGHTLY\nSIGHTS\nSIGHTSEEING\nSIGMA\nSIGMUND\nSIGN\nSIGNAL\nSIGNALED\nSIGNALING\nSIGNALLED\nSIGNALLING\nSIGNALLY\nSIGNALS\nSIGNATURE\nSIGNATURES\nSIGNED\nSIGNER\nSIGNERS\nSIGNET\nSIGNIFICANCE\nSIGNIFICANT\nSIGNIFICANTLY\nSIGNIFICANTS\nSIGNIFICATION\nSIGNIFIED\nSIGNIFIES\nSIGNIFY\nSIGNIFYING\nSIGNING\nSIGNS\nSIKH\nSIKHES\nSIKHS\nSIKKIM\nSIKKIMESE\nSIKORSKY\nSILAS\nSILENCE\nSILENCED\nSILENCER\nSILENCERS\nSILENCES\nSILENCING\nSILENT\nSILENTLY\nSILHOUETTE\nSILHOUETTED\nSILHOUETTES\nSILICA\nSILICATE\nSILICON\nSILICONE\nSILK\nSILKEN\nSILKIER\nSILKIEST\nSILKILY\nSILKINE\nSILKS\nSILKY\nSILL\nSILLIEST\nSILLINESS\nSILLS\nSILLY\nSILO\nSILT\nSILTED\nSILTING\nSILTS\nSILVER\nSILVERED\nSILVERING\nSILVERMAN\nSILVERS\nSILVERSMITH\nSILVERSTEIN\nSILVERWARE\nSILVERY\nSIMILAR\nSIMILARITIES\nSIMILARITY\nSIMILARLY\nSIMILE\nSIMILITUDE\nSIMLA\nSIMMER\nSIMMERED\nSIMMERING\nSIMMERS\nSIMMONS\nSIMMONSVILLE\nSIMMS\nSIMON\nSIMONS\nSIMONSON\nSIMPLE\nSIMPLEMINDED\nSIMPLENESS\nSIMPLER\nSIMPLEST\nSIMPLETON\nSIMPLEX\nSIMPLICITIES\nSIMPLICITY\nSIMPLIFICATION\nSIMPLIFICATIONS\nSIMPLIFIED\nSIMPLIFIER\nSIMPLIFIERS\nSIMPLIFIES\nSIMPLIFY\nSIMPLIFYING\nSIMPLISTIC\nSIMPLY\nSIMPSON\nSIMS\nSIMULA\nSIMULA\nSIMULATE\nSIMULATED\nSIMULATES\nSIMULATING\nSIMULATION\nSIMULATIONS\nSIMULATOR\nSIMULATORS\nSIMULCAST\nSIMULTANEITY\nSIMULTANEOUS\nSIMULTANEOUSLY\nSINAI\nSINATRA\nSINBAD\nSINCE\nSINCERE\nSINCERELY\nSINCEREST\nSINCERITY\nSINCLAIR\nSINE\nSINES\nSINEW\nSINEWS\nSINEWY\nSINFUL\nSINFULLY\nSINFULNESS\nSING\nSINGABLE\nSINGAPORE\nSINGBORG\nSINGE\nSINGED\nSINGER\nSINGERS\nSINGING\nSINGINGLY\nSINGLE\nSINGLED\nSINGLEHANDED\nSINGLENESS\nSINGLES\nSINGLET\nSINGLETON\nSINGLETONS\nSINGLING\nSINGLY\nSINGS\nSINGSONG\nSINGULAR\nSINGULARITIES\nSINGULARITY\nSINGULARLY\nSINISTER\nSINK\nSINKED\nSINKER\nSINKERS\nSINKHOLE\nSINKING\nSINKS\nSINNED\nSINNER\nSINNERS\nSINNING\nSINS\nSINUOUS\nSINUS\nSINUSOID\nSINUSOIDAL\nSINUSOIDS\nSIOUX\nSIP\nSIPHON\nSIPHONING\nSIPPING\nSIPS\nSIR\nSIRE\nSIRED\nSIREN\nSIRENS\nSIRES\nSIRIUS\nSIRS\nSIRUP\nSISTER\nSISTERLY\nSISTERS\nSISTINE\nSISYPHEAN\nSISYPHUS\nSIT\nSITE\nSITED\nSITES\nSITING\nSITS\nSITTER\nSITTERS\nSITTING\nSITTINGS\nSITU\nSITUATE\nSITUATED\nSITUATES\nSITUATING\nSITUATION\nSITUATIONAL\nSITUATIONALLY\nSITUATIONS\nSIVA\nSIX\nSIXES\nSIXFOLD\nSIXGUN\nSIXPENCE\nSIXTEEN\nSIXTEENS\nSIXTEENTH\nSIXTH\nSIXTIES\nSIXTIETH\nSIXTY\nSIZABLE\nSIZE\nSIZED\nSIZES\nSIZING\nSIZINGS\nSIZZLE\nSKATE\nSKATED\nSKATER\nSKATERS\nSKATES\nSKATING\nSKELETAL\nSKELETON\nSKELETONS\nSKEPTIC\nSKEPTICAL\nSKEPTICALLY\nSKEPTICISM\nSKEPTICS\nSKETCH\nSKETCHBOOK\nSKETCHED\nSKETCHES\nSKETCHILY\nSKETCHING\nSKETCHPAD\nSKETCHY\nSKEW\nSKEWED\nSKEWER\nSKEWERS\nSKEWING\nSKEWS\nSKI\nSKID\nSKIDDING\nSKIED\nSKIES\nSKIFF\nSKIING\nSKILL\nSKILLED\nSKILLET\nSKILLFUL\nSKILLFULLY\nSKILLFULNESS\nSKILLS\nSKIM\nSKIMMED\nSKIMMING\nSKIMP\nSKIMPED\nSKIMPING\nSKIMPS\nSKIMPY\nSKIMS\nSKIN\nSKINDIVE\nSKINNED\nSKINNER\nSKINNERS\nSKINNING\nSKINNY\nSKINS\nSKIP\nSKIPPED\nSKIPPER\nSKIPPERS\nSKIPPING\nSKIPPY\nSKIPS\nSKIRMISH\nSKIRMISHED\nSKIRMISHER\nSKIRMISHERS\nSKIRMISHES\nSKIRMISHING\nSKIRT\nSKIRTED\nSKIRTING\nSKIRTS\nSKIS\nSKIT\nSKOPJE\nSKULK\nSKULKED\nSKULKER\nSKULKING\nSKULKS\nSKULL\nSKULLCAP\nSKULLDUGGERY\nSKULLS\nSKUNK\nSKUNKS\nSKY\nSKYE\nSKYHOOK\nSKYJACK\nSKYLARK\nSKYLARKING\nSKYLARKS\nSKYLIGHT\nSKYLIGHTS\nSKYLINE\nSKYROCKETS\nSKYSCRAPER\nSKYSCRAPERS\nSLAB\nSLACK\nSLACKEN\nSLACKER\nSLACKING\nSLACKLY\nSLACKNESS\nSLACKS\nSLAIN\nSLAM\nSLAMMED\nSLAMMING\nSLAMS\nSLANDER\nSLANDERER\nSLANDEROUS\nSLANDERS\nSLANG\nSLANT\nSLANTED\nSLANTING\nSLANTS\nSLAP\nSLAPPED\nSLAPPING\nSLAPS\nSLAPSTICK\nSLASH\nSLASHED\nSLASHES\nSLASHING\nSLAT\nSLATE\nSLATED\nSLATER\nSLATES\nSLATS\nSLAUGHTER\nSLAUGHTERED\nSLAUGHTERHOUSE\nSLAUGHTERING\nSLAUGHTERS\nSLAV\nSLAVE\nSLAVER\nSLAVERY\nSLAVES\nSLAVIC\nSLAVICIZE\nSLAVICIZES\nSLAVISH\nSLAVIZATION\nSLAVIZATIONS\nSLAVIZE\nSLAVIZES\nSLAVONIC\nSLAVONICIZE\nSLAVONICIZES\nSLAVS\nSLAY\nSLAYER\nSLAYERS\nSLAYING\nSLAYS\nSLED\nSLEDDING\nSLEDGE\nSLEDGEHAMMER\nSLEDGES\nSLEDS\nSLEEK\nSLEEP\nSLEEPER\nSLEEPERS\nSLEEPILY\nSLEEPINESS\nSLEEPING\nSLEEPLESS\nSLEEPLESSLY\nSLEEPLESSNESS\nSLEEPS\nSLEEPWALK\nSLEEPY\nSLEET\nSLEEVE\nSLEEVES\nSLEIGH\nSLEIGHS\nSLEIGHT\nSLENDER\nSLENDERER\nSLEPT\nSLESINGER\nSLEUTH\nSLEW\nSLEWING\nSLICE\nSLICED\nSLICER\nSLICERS\nSLICES\nSLICING\nSLICK\nSLICKER\nSLICKERS\nSLICKS\nSLID\nSLIDE\nSLIDER\nSLIDERS\nSLIDES\nSLIDING\nSLIGHT\nSLIGHTED\nSLIGHTER\nSLIGHTEST\nSLIGHTING\nSLIGHTLY\nSLIGHTNESS\nSLIGHTS\nSLIM\nSLIME\nSLIMED\nSLIMLY\nSLIMY\nSLING\nSLINGING\nSLINGS\nSLINGSHOT\nSLIP\nSLIPPAGE\nSLIPPED\nSLIPPER\nSLIPPERINESS\nSLIPPERS\nSLIPPERY\nSLIPPING\nSLIPS\nSLIT\nSLITHER\nSLITS\nSLIVER\nSLOAN\nSLOANE\nSLOB\nSLOCUM\nSLOGAN\nSLOGANS\nSLOOP\nSLOP\nSLOPE\nSLOPED\nSLOPER\nSLOPERS\nSLOPES\nSLOPING\nSLOPPED\nSLOPPINESS\nSLOPPING\nSLOPPY\nSLOPS\nSLOT\nSLOTH\nSLOTHFUL\nSLOTHS\nSLOTS\nSLOTTED\nSLOTTING\nSLOUCH\nSLOUCHED\nSLOUCHES\nSLOUCHING\nSLOVAKIA\nSLOVENIA\nSLOW\nSLOWDOWN\nSLOWED\nSLOWER\nSLOWEST\nSLOWING\nSLOWLY\nSLOWNESS\nSLOWS\nSLUDGE\nSLUG\nSLUGGISH\nSLUGGISHLY\nSLUGGISHNESS\nSLUGS\nSLUICE\nSLUM\nSLUMBER\nSLUMBERED\nSLUMMING\nSLUMP\nSLUMPED\nSLUMPS\nSLUMS\nSLUNG\nSLUR\nSLURP\nSLURRING\nSLURRY\nSLURS\nSLY\nSLYLY\nSMACK\nSMACKED\nSMACKING\nSMACKS\nSMALL\nSMALLER\nSMALLEST\nSMALLEY\nSMALLISH\nSMALLNESS\nSMALLPOX\nSMALLTIME\nSMALLWOOD\nSMART\nSMARTED\nSMARTER\nSMARTEST\nSMARTLY\nSMARTNESS\nSMASH\nSMASHED\nSMASHER\nSMASHERS\nSMASHES\nSMASHING\nSMASHINGLY\nSMATTERING\nSMEAR\nSMEARED\nSMEARING\nSMEARS\nSMELL\nSMELLED\nSMELLING\nSMELLS\nSMELLY\nSMELT\nSMELTER\nSMELTS\nSMILE\nSMILED\nSMILES\nSMILING\nSMILINGLY\nSMIRK\nSMITE\nSMITH\nSMITHEREENS\nSMITHFIELD\nSMITHS\nSMITHSON\nSMITHSONIAN\nSMITHTOWN\nSMITHY\nSMITTEN\nSMOCK\nSMOCKING\nSMOCKS\nSMOG\nSMOKABLE\nSMOKE\nSMOKED\nSMOKER\nSMOKERS\nSMOKES\nSMOKESCREEN\nSMOKESTACK\nSMOKIES\nSMOKING\nSMOKY\nSMOLDER\nSMOLDERED\nSMOLDERING\nSMOLDERS\nSMOOCH\nSMOOTH\nSMOOTHBORE\nSMOOTHED\nSMOOTHER\nSMOOTHES\nSMOOTHEST\nSMOOTHING\nSMOOTHLY\nSMOOTHNESS\nSMOTE\nSMOTHER\nSMOTHERED\nSMOTHERING\nSMOTHERS\nSMUCKER\nSMUDGE\nSMUG\nSMUGGLE\nSMUGGLED\nSMUGGLER\nSMUGGLERS\nSMUGGLES\nSMUGGLING\nSMUT\nSMUTTY\nSMYRNA\nSMYTHE\nSNACK\nSNAFU\nSNAG\nSNAIL\nSNAILS\nSNAKE\nSNAKED\nSNAKELIKE\nSNAKES\nSNAP\nSNAPDRAGON\nSNAPPED\nSNAPPER\nSNAPPERS\nSNAPPILY\nSNAPPING\nSNAPPY\nSNAPS\nSNAPSHOT\nSNAPSHOTS\nSNARE\nSNARED\nSNARES\nSNARING\nSNARK\nSNARL\nSNARLED\nSNARLING\nSNATCH\nSNATCHED\nSNATCHES\nSNATCHING\nSNAZZY\nSNEAD\nSNEAK\nSNEAKED\nSNEAKER\nSNEAKERS\nSNEAKIER\nSNEAKIEST\nSNEAKILY\nSNEAKINESS\nSNEAKING\nSNEAKS\nSNEAKY\nSNEED\nSNEER\nSNEERED\nSNEERING\nSNEERS\nSNEEZE\nSNEEZED\nSNEEZES\nSNEEZING\nSNIDER\nSNIFF\nSNIFFED\nSNIFFING\nSNIFFLE\nSNIFFS\nSNIFTER\nSNIGGER\nSNIP\nSNIPE\nSNIPPET\nSNIVEL\nSNOB\nSNOBBERY\nSNOBBISH\nSNODGRASS\nSNOOP\nSNOOPED\nSNOOPING\nSNOOPS\nSNOOPY\nSNORE\nSNORED\nSNORES\nSNORING\nSNORKEL\nSNORT\nSNORTED\nSNORTING\nSNORTS\nSNOTTY\nSNOUT\nSNOUTS\nSNOW\nSNOWBALL\nSNOWBELT\nSNOWED\nSNOWFALL\nSNOWFLAKE\nSNOWIER\nSNOWIEST\nSNOWILY\nSNOWING\nSNOWMAN\nSNOWMEN\nSNOWS\nSNOWSHOE\nSNOWSHOES\nSNOWSTORM\nSNOWY\nSNUB\nSNUFF\nSNUFFED\nSNUFFER\nSNUFFING\nSNUFFS\nSNUG\nSNUGGLE\nSNUGGLED\nSNUGGLES\nSNUGGLING\nSNUGLY\nSNUGNESS\nSNYDER\nSOAK\nSOAKED\nSOAKING\nSOAKS\nSOAP\nSOAPED\nSOAPING\nSOAPS\nSOAPY\nSOAR\nSOARED\nSOARING\nSOARS\nSOB\nSOBBING\nSOBER\nSOBERED\nSOBERING\nSOBERLY\nSOBERNESS\nSOBERS\nSOBRIETY\nSOBS\nSOCCER\nSOCIABILITY\nSOCIABLE\nSOCIABLY\nSOCIAL\nSOCIALISM\nSOCIALIST\nSOCIALISTS\nSOCIALIZE\nSOCIALIZED\nSOCIALIZES\nSOCIALIZING\nSOCIALLY\nSOCIETAL\nSOCIETIES\nSOCIETY\nSOCIOECONOMIC\nSOCIOLOGICAL\nSOCIOLOGICALLY\nSOCIOLOGIST\nSOCIOLOGISTS\nSOCIOLOGY\nSOCK\nSOCKED\nSOCKET\nSOCKETS\nSOCKING\nSOCKS\nSOCRATES\nSOCRATIC\nSOD\nSODA\nSODDY\nSODIUM\nSODOMY\nSODS\nSOFA\nSOFAS\nSOFIA\nSOFT\nSOFTBALL\nSOFTEN\nSOFTENED\nSOFTENING\nSOFTENS\nSOFTER\nSOFTEST\nSOFTLY\nSOFTNESS\nSOFTWARE\nSOFTWARES\nSOGGY\nSOIL\nSOILED\nSOILING\nSOILS\nSOIREE\nSOJOURN\nSOJOURNER\nSOJOURNERS\nSOL\nSOLACE\nSOLACED\nSOLAR\nSOLD\nSOLDER\nSOLDERED\nSOLDIER\nSOLDIERING\nSOLDIERLY\nSOLDIERS\nSOLE\nSOLELY\nSOLEMN\nSOLEMNITY\nSOLEMNLY\nSOLEMNNESS\nSOLENOID\nSOLES\nSOLICIT\nSOLICITATION\nSOLICITED\nSOLICITING\nSOLICITOR\nSOLICITOUS\nSOLICITS\nSOLICITUDE\nSOLID\nSOLIDARITY\nSOLIDIFICATION\nSOLIDIFIED\nSOLIDIFIES\nSOLIDIFY\nSOLIDIFYING\nSOLIDITY\nSOLIDLY\nSOLIDNESS\nSOLIDS\nSOLILOQUY\nSOLITAIRE\nSOLITARY\nSOLITUDE\nSOLITUDES\nSOLLY\nSOLO\nSOLOMON\nSOLON\nSOLOS\nSOLOVIEV\nSOLSTICE\nSOLUBILITY\nSOLUBLE\nSOLUTION\nSOLUTIONS\nSOLVABLE\nSOLVE\nSOLVED\nSOLVENT\nSOLVENTS\nSOLVER\nSOLVERS\nSOLVES\nSOLVING\nSOMALI\nSOMALIA\nSOMALIS\nSOMATIC\nSOMBER\nSOMBERLY\nSOME\nSOMEBODY\nSOMEDAY\nSOMEHOW\nSOMEONE\nSOMEPLACE\nSOMERS\nSOMERSAULT\nSOMERSET\nSOMERVILLE\nSOMETHING\nSOMETIME\nSOMETIMES\nSOMEWHAT\nSOMEWHERE\nSOMMELIER\nSOMMERFELD\nSOMNOLENT\nSON\nSONAR\nSONATA\nSONENBERG\nSONG\nSONGBOOK\nSONGS\nSONIC\nSONNET\nSONNETS\nSONNY\nSONOMA\nSONORA\nSONS\nSONY\nSOON\nSOONER\nSOONEST\nSOOT\nSOOTH\nSOOTHE\nSOOTHED\nSOOTHER\nSOOTHES\nSOOTHING\nSOOTHSAYER\nSOPHIA\nSOPHIAS\nSOPHIE\nSOPHISTICATED\nSOPHISTICATION\nSOPHISTRY\nSOPHOCLEAN\nSOPHOCLES\nSOPHOMORE\nSOPHOMORES\nSOPRANO\nSORCERER\nSORCERERS\nSORCERY\nSORDID\nSORDIDLY\nSORDIDNESS\nSORE\nSORELY\nSORENESS\nSORENSEN\nSORENSON\nSORER\nSORES\nSOREST\nSORGHUM\nSORORITY\nSORREL\nSORRENTINE\nSORRIER\nSORRIEST\nSORROW\nSORROWFUL\nSORROWFULLY\nSORROWS\nSORRY\nSORT\nSORTED\nSORTER\nSORTERS\nSORTIE\nSORTING\nSORTS\nSOUGHT\nSOUL\nSOULFUL\nSOULS\nSOUND\nSOUNDED\nSOUNDER\nSOUNDEST\nSOUNDING\nSOUNDINGS\nSOUNDLY\nSOUNDNESS\nSOUNDPROOF\nSOUNDS\nSOUP\nSOUPED\nSOUPS\nSOUR\nSOURCE\nSOURCES\nSOURDOUGH\nSOURED\nSOURER\nSOUREST\nSOURING\nSOURLY\nSOURNESS\nSOURS\nSOUSA\nSOUTH\nSOUTHAMPTON\nSOUTHBOUND\nSOUTHEAST\nSOUTHEASTERN\nSOUTHERN\nSOUTHERNER\nSOUTHERNERS\nSOUTHERNMOST\nSOUTHERNWOOD\nSOUTHEY\nSOUTHFIELD\nSOUTHLAND\nSOUTHPAW\nSOUTHWARD\nSOUTHWEST\nSOUTHWESTERN\nSOUVENIR\nSOVEREIGN\nSOVEREIGNS\nSOVEREIGNTY\nSOVIET\nSOVIETS\nSOW\nSOWN\nSOY\nSOYA\nSOYBEAN\nSPA\nSPACE\nSPACECRAFT\nSPACED\nSPACER\nSPACERS\nSPACES\nSPACESHIP\nSPACESHIPS\nSPACESUIT\nSPACEWAR\nSPACING\nSPACINGS\nSPACIOUS\nSPADED\nSPADES\nSPADING\nSPAFFORD\nSPAHN\nSPAIN\nSPALDING\nSPAN\nSPANDREL\nSPANIARD\nSPANIARDIZATION\nSPANIARDIZATIONS\nSPANIARDIZE\nSPANIARDIZES\nSPANIARDS\nSPANIEL\nSPANISH\nSPANISHIZE\nSPANISHIZES\nSPANK\nSPANKED\nSPANKING\nSPANKS\nSPANNED\nSPANNER\nSPANNERS\nSPANNING\nSPANS\nSPARC\nSPARCSTATION\nSPARE\nSPARED\nSPARELY\nSPARENESS\nSPARER\nSPARES\nSPAREST\nSPARING\nSPARINGLY\nSPARK\nSPARKED\nSPARKING\nSPARKLE\nSPARKLING\nSPARKMAN\nSPARKS\nSPARRING\nSPARROW\nSPARROWS\nSPARSE\nSPARSELY\nSPARSENESS\nSPARSER\nSPARSEST\nSPARTA\nSPARTAN\nSPARTANIZE\nSPARTANIZES\nSPASM\nSPASTIC\nSPAT\nSPATE\nSPATES\nSPATIAL\nSPATIALLY\nSPATTER\nSPATTERED\nSPATULA\nSPAULDING\nSPAWN\nSPAWNED\nSPAWNING\nSPAWNS\nSPAYED\nSPEAK\nSPEAKABLE\nSPEAKEASY\nSPEAKER\nSPEAKERPHONE\nSPEAKERPHONES\nSPEAKERS\nSPEAKING\nSPEAKS\nSPEAR\nSPEARED\nSPEARMINT\nSPEARS\nSPEC\nSPECIAL\nSPECIALIST\nSPECIALISTS\nSPECIALIZATION\nSPECIALIZATIONS\nSPECIALIZE\nSPECIALIZED\nSPECIALIZES\nSPECIALIZING\nSPECIALLY\nSPECIALS\nSPECIALTIES\nSPECIALTY\nSPECIE\nSPECIES\nSPECIFIABLE\nSPECIFIC\nSPECIFICALLY\nSPECIFICATION\nSPECIFICATIONS\nSPECIFICITY\nSPECIFICS\nSPECIFIED\nSPECIFIER\nSPECIFIERS\nSPECIFIES\nSPECIFY\nSPECIFYING\nSPECIMEN\nSPECIMENS\nSPECIOUS\nSPECK\nSPECKLE\nSPECKLED\nSPECKLES\nSPECKS\nSPECTACLE\nSPECTACLED\nSPECTACLES\nSPECTACULAR\nSPECTACULARLY\nSPECTATOR\nSPECTATORS\nSPECTER\nSPECTERS\nSPECTOR\nSPECTRA\nSPECTRAL\nSPECTROGRAM\nSPECTROGRAMS\nSPECTROGRAPH\nSPECTROGRAPHIC\nSPECTROGRAPHY\nSPECTROMETER\nSPECTROPHOTOMETER\nSPECTROPHOTOMETRY\nSPECTROSCOPE\nSPECTROSCOPIC\nSPECTROSCOPY\nSPECTRUM\nSPECULATE\nSPECULATED\nSPECULATES\nSPECULATING\nSPECULATION\nSPECULATIONS\nSPECULATIVE\nSPECULATOR\nSPECULATORS\nSPED\nSPEECH\nSPEECHES\nSPEECHLESS\nSPEECHLESSNESS\nSPEED\nSPEEDBOAT\nSPEEDED\nSPEEDER\nSPEEDERS\nSPEEDILY\nSPEEDING\nSPEEDOMETER\nSPEEDS\nSPEEDUP\nSPEEDUPS\nSPEEDY\nSPELL\nSPELLBOUND\nSPELLED\nSPELLER\nSPELLERS\nSPELLING\nSPELLINGS\nSPELLS\nSPENCER\nSPENCERIAN\nSPEND\nSPENDER\nSPENDERS\nSPENDING\nSPENDS\nSPENGLERIAN\nSPENT\nSPERM\nSPERRY\nSPHERE\nSPHERES\nSPHERICAL\nSPHERICALLY\nSPHEROID\nSPHEROIDAL\nSPHINX\nSPICA\nSPICE\nSPICED\nSPICES\nSPICINESS\nSPICY\nSPIDER\nSPIDERS\nSPIDERY\nSPIEGEL\nSPIES\nSPIGOT\nSPIKE\nSPIKED\nSPIKES\nSPILL\nSPILLED\nSPILLER\nSPILLING\nSPILLS\nSPILT\nSPIN\nSPINACH\nSPINAL\nSPINALLY\nSPINDLE\nSPINDLED\nSPINDLING\nSPINE\nSPINNAKER\nSPINNER\nSPINNERS\nSPINNING\nSPINOFF\nSPINS\nSPINSTER\nSPINY\nSPIRAL\nSPIRALED\nSPIRALING\nSPIRALLY\nSPIRE\nSPIRES\nSPIRIT\nSPIRITED\nSPIRITEDLY\nSPIRITING\nSPIRITS\nSPIRITUAL\nSPIRITUALLY\nSPIRITUALS\nSPIRO\nSPIT\nSPITE\nSPITED\nSPITEFUL\nSPITEFULLY\nSPITEFULNESS\nSPITES\nSPITFIRE\nSPITING\nSPITS\nSPITTING\nSPITTLE\nSPITZ\nSPLASH\nSPLASHED\nSPLASHES\nSPLASHING\nSPLASHY\nSPLEEN\nSPLENDID\nSPLENDIDLY\nSPLENDOR\nSPLENETIC\nSPLICE\nSPLICED\nSPLICER\nSPLICERS\nSPLICES\nSPLICING\nSPLICINGS\nSPLINE\nSPLINES\nSPLINT\nSPLINTER\nSPLINTERED\nSPLINTERS\nSPLINTERY\nSPLIT\nSPLITS\nSPLITTER\nSPLITTERS\nSPLITTING\nSPLURGE\nSPOIL\nSPOILAGE\nSPOILED\nSPOILER\nSPOILERS\nSPOILING\nSPOILS\nSPOKANE\nSPOKE\nSPOKED\nSPOKEN\nSPOKES\nSPOKESMAN\nSPOKESMEN\nSPONGE\nSPONGED\nSPONGER\nSPONGERS\nSPONGES\nSPONGING\nSPONGY\nSPONSOR\nSPONSORED\nSPONSORING\nSPONSORS\nSPONSORSHIP\nSPONTANEITY\nSPONTANEOUS\nSPONTANEOUSLY\nSPOOF\nSPOOK\nSPOOKY\nSPOOL\nSPOOLED\nSPOOLER\nSPOOLERS\nSPOOLING\nSPOOLS\nSPOON\nSPOONED\nSPOONFUL\nSPOONING\nSPOONS\nSPORADIC\nSPORE\nSPORES\nSPORT\nSPORTED\nSPORTING\nSPORTINGLY\nSPORTIVE\nSPORTS\nSPORTSMAN\nSPORTSMEN\nSPORTSWEAR\nSPORTSWRITER\nSPORTSWRITING\nSPORTY\nSPOSATO\nSPOT\nSPOTLESS\nSPOTLESSLY\nSPOTLIGHT\nSPOTS\nSPOTTED\nSPOTTER\nSPOTTERS\nSPOTTING\nSPOTTY\nSPOUSE\nSPOUSES\nSPOUT\nSPOUTED\nSPOUTING\nSPOUTS\nSPRAGUE\nSPRAIN\nSPRANG\nSPRAWL\nSPRAWLED\nSPRAWLING\nSPRAWLS\nSPRAY\nSPRAYED\nSPRAYER\nSPRAYING\nSPRAYS\nSPREAD\nSPREADER\nSPREADERS\nSPREADING\nSPREADINGS\nSPREADS\nSPREADSHEET\nSPREE\nSPREES\nSPRIG\nSPRIGHTLY\nSPRING\nSPRINGBOARD\nSPRINGER\nSPRINGERS\nSPRINGFIELD\nSPRINGIER\nSPRINGIEST\nSPRINGINESS\nSPRINGING\nSPRINGS\nSPRINGTIME\nSPRINGY\nSPRINKLE\nSPRINKLED\nSPRINKLER\nSPRINKLES\nSPRINKLING\nSPRINT\nSPRINTED\nSPRINTER\nSPRINTERS\nSPRINTING\nSPRINTS\nSPRITE\nSPROCKET\nSPROUL\nSPROUT\nSPROUTED\nSPROUTING\nSPRUCE\nSPRUCED\nSPRUNG\nSPUDS\nSPUN\nSPUNK\nSPUR\nSPURIOUS\nSPURN\nSPURNED\nSPURNING\nSPURNS\nSPURS\nSPURT\nSPURTED\nSPURTING\nSPURTS\nSPUTTER\nSPUTTERED\nSPY\nSPYGLASS\nSPYING\nSQUABBLE\nSQUABBLED\nSQUABBLES\nSQUABBLING\nSQUAD\nSQUADRON\nSQUADRONS\nSQUADS\nSQUALID\nSQUALL\nSQUALLS\nSQUANDER\nSQUARE\nSQUARED\nSQUARELY\nSQUARENESS\nSQUARER\nSQUARES\nSQUAREST\nSQUARESVILLE\nSQUARING\nSQUASH\nSQUASHED\nSQUASHING\nSQUAT\nSQUATS\nSQUATTING\nSQUAW\nSQUAWK\nSQUAWKED\nSQUAWKING\nSQUAWKS\nSQUEAK\nSQUEAKED\nSQUEAKING\nSQUEAKS\nSQUEAKY\nSQUEAL\nSQUEALED\nSQUEALING\nSQUEALS\nSQUEAMISH\nSQUEEZE\nSQUEEZED\nSQUEEZER\nSQUEEZES\nSQUEEZING\nSQUELCH\nSQUIBB\nSQUID\nSQUINT\nSQUINTED\nSQUINTING\nSQUIRE\nSQUIRES\nSQUIRM\nSQUIRMED\nSQUIRMS\nSQUIRMY\nSQUIRREL\nSQUIRRELED\nSQUIRRELING\nSQUIRRELS\nSQUIRT\nSQUISHY\nSRI\nSTAB\nSTABBED\nSTABBING\nSTABILE\nSTABILITIES\nSTABILITY\nSTABILIZE\nSTABILIZED\nSTABILIZER\nSTABILIZERS\nSTABILIZES\nSTABILIZING\nSTABLE\nSTABLED\nSTABLER\nSTABLES\nSTABLING\nSTABLY\nSTABS\nSTACK\nSTACKED\nSTACKING\nSTACKS\nSTACY\nSTADIA\nSTADIUM\nSTAFF\nSTAFFED\nSTAFFER\nSTAFFERS\nSTAFFING\nSTAFFORD\nSTAFFORDSHIRE\nSTAFFS\nSTAG\nSTAGE\nSTAGECOACH\nSTAGECOACHES\nSTAGED\nSTAGER\nSTAGERS\nSTAGES\nSTAGGER\nSTAGGERED\nSTAGGERING\nSTAGGERS\nSTAGING\nSTAGNANT\nSTAGNATE\nSTAGNATION\nSTAGS\nSTAHL\nSTAID\nSTAIN\nSTAINED\nSTAINING\nSTAINLESS\nSTAINS\nSTAIR\nSTAIRCASE\nSTAIRCASES\nSTAIRS\nSTAIRWAY\nSTAIRWAYS\nSTAIRWELL\nSTAKE\nSTAKED\nSTAKES\nSTALACTITE\nSTALE\nSTALEMATE\nSTALEY\nSTALIN\nSTALINIST\nSTALINS\nSTALK\nSTALKED\nSTALKING\nSTALL\nSTALLED\nSTALLING\nSTALLINGS\nSTALLION\nSTALLS\nSTALWART\nSTALWARTLY\nSTAMEN\nSTAMENS\nSTAMFORD\nSTAMINA\nSTAMMER\nSTAMMERED\nSTAMMERER\nSTAMMERING\nSTAMMERS\nSTAMP\nSTAMPED\nSTAMPEDE\nSTAMPEDED\nSTAMPEDES\nSTAMPEDING\nSTAMPER\nSTAMPERS\nSTAMPING\nSTAMPS\nSTAN\nSTANCH\nSTANCHEST\nSTANCHION\nSTAND\nSTANDARD\nSTANDARDIZATION\nSTANDARDIZE\nSTANDARDIZED\nSTANDARDIZES\nSTANDARDIZING\nSTANDARDLY\nSTANDARDS\nSTANDBY\nSTANDING\nSTANDINGS\nSTANDISH\nSTANDOFF\nSTANDPOINT\nSTANDPOINTS\nSTANDS\nSTANDSTILL\nSTANFORD\nSTANHOPE\nSTANLEY\nSTANS\nSTANTON\nSTANZA\nSTANZAS\nSTAPHYLOCOCCUS\nSTAPLE\nSTAPLER\nSTAPLES\nSTAPLETON\nSTAPLING\nSTAR\nSTARBOARD\nSTARCH\nSTARCHED\nSTARDOM\nSTARE\nSTARED\nSTARER\nSTARES\nSTARFISH\nSTARGATE\nSTARING\nSTARK\nSTARKEY\nSTARKLY\nSTARLET\nSTARLIGHT\nSTARLING\nSTARR\nSTARRED\nSTARRING\nSTARRY\nSTARS\nSTART\nSTARTED\nSTARTER\nSTARTERS\nSTARTING\nSTARTLE\nSTARTLED\nSTARTLES\nSTARTLING\nSTARTS\nSTARTUP\nSTARTUPS\nSTARVATION\nSTARVE\nSTARVED\nSTARVES\nSTARVING\nSTATE\nSTATED\nSTATELY\nSTATEMENT\nSTATEMENTS\nSTATEN\nSTATES\nSTATESMAN\nSTATESMANLIKE\nSTATESMEN\nSTATEWIDE\nSTATIC\nSTATICALLY\nSTATING\nSTATION\nSTATIONARY\nSTATIONED\nSTATIONER\nSTATIONERY\nSTATIONING\nSTATIONMASTER\nSTATIONS\nSTATISTIC\nSTATISTICAL\nSTATISTICALLY\nSTATISTICIAN\nSTATISTICIANS\nSTATISTICS\nSTATLER\nSTATUE\nSTATUES\nSTATUESQUE\nSTATUESQUELY\nSTATUESQUENESS\nSTATUETTE\nSTATURE\nSTATUS\nSTATUSES\nSTATUTE\nSTATUTES\nSTATUTORILY\nSTATUTORINESS\nSTATUTORY\nSTAUFFER\nSTAUNCH\nSTAUNCHEST\nSTAUNCHLY\nSTAUNTON\nSTAVE\nSTAVED\nSTAVES\nSTAY\nSTAYED\nSTAYING\nSTAYS\nSTEAD\nSTEADFAST\nSTEADFASTLY\nSTEADFASTNESS\nSTEADIED\nSTEADIER\nSTEADIES\nSTEADIEST\nSTEADILY\nSTEADINESS\nSTEADY\nSTEADYING\nSTEAK\nSTEAKS\nSTEAL\nSTEALER\nSTEALING\nSTEALS\nSTEALTH\nSTEALTHILY\nSTEALTHY\nSTEAM\nSTEAMBOAT\nSTEAMBOATS\nSTEAMED\nSTEAMER\nSTEAMERS\nSTEAMING\nSTEAMS\nSTEAMSHIP\nSTEAMSHIPS\nSTEAMY\nSTEARNS\nSTEED\nSTEEL\nSTEELE\nSTEELED\nSTEELERS\nSTEELING\nSTEELMAKER\nSTEELS\nSTEELY\nSTEEN\nSTEEP\nSTEEPED\nSTEEPER\nSTEEPEST\nSTEEPING\nSTEEPLE\nSTEEPLES\nSTEEPLY\nSTEEPNESS\nSTEEPS\nSTEER\nSTEERABLE\nSTEERED\nSTEERING\nSTEERS\nSTEFAN\nSTEGOSAURUS\nSTEINBECK\nSTEINBERG\nSTEINER\nSTELLA\nSTELLAR\nSTEM\nSTEMMED\nSTEMMING\nSTEMS\nSTENCH\nSTENCHES\nSTENCIL\nSTENCILS\nSTENDHAL\nSTENDLER\nSTENOGRAPHER\nSTENOGRAPHERS\nSTENOTYPE\nSTEP\nSTEPCHILD\nSTEPHAN\nSTEPHANIE\nSTEPHEN\nSTEPHENS\nSTEPHENSON\nSTEPMOTHER\nSTEPMOTHERS\nSTEPPED\nSTEPPER\nSTEPPING\nSTEPS\nSTEPSON\nSTEPWISE\nSTEREO\nSTEREOS\nSTEREOSCOPIC\nSTEREOTYPE\nSTEREOTYPED\nSTEREOTYPES\nSTEREOTYPICAL\nSTERILE\nSTERILIZATION\nSTERILIZATIONS\nSTERILIZE\nSTERILIZED\nSTERILIZER\nSTERILIZES\nSTERILIZING\nSTERLING\nSTERN\nSTERNBERG\nSTERNLY\nSTERNNESS\nSTERNO\nSTERNS\nSTETHOSCOPE\nSTETSON\nSTETSONS\nSTEUBEN\nSTEVE\nSTEVEDORE\nSTEVEN\nSTEVENS\nSTEVENSON\nSTEVIE\nSTEW\nSTEWARD\nSTEWARDESS\nSTEWARDS\nSTEWART\nSTEWED\nSTEWS\nSTICK\nSTICKER\nSTICKERS\nSTICKIER\nSTICKIEST\nSTICKILY\nSTICKINESS\nSTICKING\nSTICKLEBACK\nSTICKS\nSTICKY\nSTIFF\nSTIFFEN\nSTIFFENS\nSTIFFER\nSTIFFEST\nSTIFFLY\nSTIFFNESS\nSTIFFS\nSTIFLE\nSTIFLED\nSTIFLES\nSTIFLING\nSTIGMA\nSTIGMATA\nSTILE\nSTILES\nSTILETTO\nSTILL\nSTILLBIRTH\nSTILLBORN\nSTILLED\nSTILLER\nSTILLEST\nSTILLING\nSTILLNESS\nSTILLS\nSTILLWELL\nSTILT\nSTILTS\nSTIMSON\nSTIMULANT\nSTIMULANTS\nSTIMULATE\nSTIMULATED\nSTIMULATES\nSTIMULATING\nSTIMULATION\nSTIMULATIONS\nSTIMULATIVE\nSTIMULI\nSTIMULUS\nSTING\nSTINGING\nSTINGS\nSTINGY\nSTINK\nSTINKER\nSTINKERS\nSTINKING\nSTINKS\nSTINT\nSTIPEND\nSTIPENDS\nSTIPULATE\nSTIPULATED\nSTIPULATES\nSTIPULATING\nSTIPULATION\nSTIPULATIONS\nSTIR\nSTIRLING\nSTIRRED\nSTIRRER\nSTIRRERS\nSTIRRING\nSTIRRINGLY\nSTIRRINGS\nSTIRRUP\nSTIRS\nSTITCH\nSTITCHED\nSTITCHES\nSTITCHING\nSTOCHASTIC\nSTOCHASTICALLY\nSTOCK\nSTOCKADE\nSTOCKADES\nSTOCKBROKER\nSTOCKED\nSTOCKER\nSTOCKERS\nSTOCKHOLDER\nSTOCKHOLDERS\nSTOCKHOLM\nSTOCKING\nSTOCKINGS\nSTOCKPILE\nSTOCKROOM\nSTOCKS\nSTOCKTON\nSTOCKY\nSTODGY\nSTOICHIOMETRY\nSTOKE\nSTOKES\nSTOLE\nSTOLEN\nSTOLES\nSTOLID\nSTOMACH\nSTOMACHED\nSTOMACHER\nSTOMACHES\nSTOMACHING\nSTOMP\nSTONE\nSTONED\nSTONEHENGE\nSTONES\nSTONING\nSTONY\nSTOOD\nSTOOGE\nSTOOL\nSTOOP\nSTOOPED\nSTOOPING\nSTOOPS\nSTOP\nSTOPCOCK\nSTOPCOCKS\nSTOPGAP\nSTOPOVER\nSTOPPABLE\nSTOPPAGE\nSTOPPED\nSTOPPER\nSTOPPERS\nSTOPPING\nSTOPS\nSTOPWATCH\nSTORAGE\nSTORAGES\nSTORE\nSTORED\nSTOREHOUSE\nSTOREHOUSES\nSTOREKEEPER\nSTOREROOM\nSTORES\nSTOREY\nSTOREYED\nSTOREYS\nSTORIED\nSTORIES\nSTORING\nSTORK\nSTORKS\nSTORM\nSTORMED\nSTORMIER\nSTORMIEST\nSTORMINESS\nSTORMING\nSTORMS\nSTORMY\nSTORY\nSTORYBOARD\nSTORYTELLER\nSTOUFFER\nSTOUT\nSTOUTER\nSTOUTEST\nSTOUTLY\nSTOUTNESS\nSTOVE\nSTOVES\nSTOW\nSTOWE\nSTOWED\nSTRADDLE\nSTRAFE\nSTRAGGLE\nSTRAGGLED\nSTRAGGLER\nSTRAGGLERS\nSTRAGGLES\nSTRAGGLING\nSTRAIGHT\nSTRAIGHTAWAY\nSTRAIGHTEN\nSTRAIGHTENED\nSTRAIGHTENS\nSTRAIGHTER\nSTRAIGHTEST\nSTRAIGHTFORWARD\nSTRAIGHTFORWARDLY\nSTRAIGHTFORWARDNESS\nSTRAIGHTNESS\nSTRAIGHTWAY\nSTRAIN\nSTRAINED\nSTRAINER\nSTRAINERS\nSTRAINING\nSTRAINS\nSTRAIT\nSTRAITEN\nSTRAITS\nSTRAND\nSTRANDED\nSTRANDING\nSTRANDS\nSTRANGE\nSTRANGELY\nSTRANGENESS\nSTRANGER\nSTRANGERS\nSTRANGEST\nSTRANGLE\nSTRANGLED\nSTRANGLER\nSTRANGLERS\nSTRANGLES\nSTRANGLING\nSTRANGLINGS\nSTRANGULATION\nSTRANGULATIONS\nSTRAP\nSTRAPS\nSTRASBOURG\nSTRATAGEM\nSTRATAGEMS\nSTRATEGIC\nSTRATEGIES\nSTRATEGIST\nSTRATEGY\nSTRATFORD\nSTRATIFICATION\nSTRATIFICATIONS\nSTRATIFIED\nSTRATIFIES\nSTRATIFY\nSTRATOSPHERE\nSTRATOSPHERIC\nSTRATTON\nSTRATUM\nSTRAUSS\nSTRAVINSKY\nSTRAW\nSTRAWBERRIES\nSTRAWBERRY\nSTRAWS\nSTRAY\nSTRAYED\nSTRAYS\nSTREAK\nSTREAKED\nSTREAKS\nSTREAM\nSTREAMED\nSTREAMER\nSTREAMERS\nSTREAMING\nSTREAMLINE\nSTREAMLINED\nSTREAMLINER\nSTREAMLINES\nSTREAMLINING\nSTREAMS\nSTREET\nSTREETCAR\nSTREETCARS\nSTREETERS\nSTREETS\nSTRENGTH\nSTRENGTHEN\nSTRENGTHENED\nSTRENGTHENER\nSTRENGTHENING\nSTRENGTHENS\nSTRENGTHS\nSTRENUOUS\nSTRENUOUSLY\nSTREPTOCOCCUS\nSTRESS\nSTRESSED\nSTRESSES\nSTRESSFUL\nSTRESSING\nSTRETCH\nSTRETCHED\nSTRETCHER\nSTRETCHERS\nSTRETCHES\nSTRETCHING\nSTREW\nSTREWN\nSTREWS\nSTRICKEN\nSTRICKLAND\nSTRICT\nSTRICTER\nSTRICTEST\nSTRICTLY\nSTRICTNESS\nSTRICTURE\nSTRIDE\nSTRIDER\nSTRIDES\nSTRIDING\nSTRIFE\nSTRIKE\nSTRIKEBREAKER\nSTRIKER\nSTRIKERS\nSTRIKES\nSTRIKING\nSTRIKINGLY\nSTRINDBERG\nSTRING\nSTRINGED\nSTRINGENT\nSTRINGENTLY\nSTRINGER\nSTRINGERS\nSTRINGIER\nSTRINGIEST\nSTRINGINESS\nSTRINGING\nSTRINGS\nSTRINGY\nSTRIP\nSTRIPE\nSTRIPED\nSTRIPES\nSTRIPPED\nSTRIPPER\nSTRIPPERS\nSTRIPPING\nSTRIPS\nSTRIPTEASE\nSTRIVE\nSTRIVEN\nSTRIVES\nSTRIVING\nSTRIVINGS\nSTROBE\nSTROBED\nSTROBES\nSTROBOSCOPIC\nSTRODE\nSTROKE\nSTROKED\nSTROKER\nSTROKERS\nSTROKES\nSTROKING\nSTROLL\nSTROLLED\nSTROLLER\nSTROLLING\nSTROLLS\nSTROM\nSTROMBERG\nSTRONG\nSTRONGER\nSTRONGEST\nSTRONGHEART\nSTRONGHOLD\nSTRONGLY\nSTRONTIUM\nSTROVE\nSTRUCK\nSTRUCTURAL\nSTRUCTURALLY\nSTRUCTURE\nSTRUCTURED\nSTRUCTURER\nSTRUCTURES\nSTRUCTURING\nSTRUGGLE\nSTRUGGLED\nSTRUGGLES\nSTRUGGLING\nSTRUNG\nSTRUT\nSTRUTS\nSTRUTTING\nSTRYCHNINE\nSTU\nSTUART\nSTUB\nSTUBBLE\nSTUBBLEFIELD\nSTUBBLEFIELDS\nSTUBBORN\nSTUBBORNLY\nSTUBBORNNESS\nSTUBBY\nSTUBS\nSTUCCO\nSTUCK\nSTUD\nSTUDEBAKER\nSTUDENT\nSTUDENTS\nSTUDIED\nSTUDIES\nSTUDIO\nSTUDIOS\nSTUDIOUS\nSTUDIOUSLY\nSTUDS\nSTUDY\nSTUDYING\nSTUFF\nSTUFFED\nSTUFFIER\nSTUFFIEST\nSTUFFING\nSTUFFS\nSTUFFY\nSTUMBLE\nSTUMBLED\nSTUMBLES\nSTUMBLING\nSTUMP\nSTUMPED\nSTUMPING\nSTUMPS\nSTUN\nSTUNG\nSTUNNING\nSTUNNINGLY\nSTUNT\nSTUNTS\nSTUPEFY\nSTUPEFYING\nSTUPENDOUS\nSTUPENDOUSLY\nSTUPID\nSTUPIDEST\nSTUPIDITIES\nSTUPIDITY\nSTUPIDLY\nSTUPOR\nSTURBRIDGE\nSTURDINESS\nSTURDY\nSTURGEON\nSTURM\nSTUTTER\nSTUTTGART\nSTUYVESANT\nSTYGIAN\nSTYLE\nSTYLED\nSTYLER\nSTYLERS\nSTYLES\nSTYLI\nSTYLING\nSTYLISH\nSTYLISHLY\nSTYLISHNESS\nSTYLISTIC\nSTYLISTICALLY\nSTYLIZED\nSTYLUS\nSTYROFOAM\nSTYX\nSUAVE\nSUB\nSUBATOMIC\nSUBCHANNEL\nSUBCHANNELS\nSUBCLASS\nSUBCLASSES\nSUBCOMMITTEES\nSUBCOMPONENT\nSUBCOMPONENTS\nSUBCOMPUTATION\nSUBCOMPUTATIONS\nSUBCONSCIOUS\nSUBCONSCIOUSLY\nSUBCULTURE\nSUBCULTURES\nSUBCYCLE\nSUBCYCLES\nSUBDIRECTORIES\nSUBDIRECTORY\nSUBDIVIDE\nSUBDIVIDED\nSUBDIVIDES\nSUBDIVIDING\nSUBDIVISION\nSUBDIVISIONS\nSUBDOMAINS\nSUBDUE\nSUBDUED\nSUBDUES\nSUBDUING\nSUBEXPRESSION\nSUBEXPRESSIONS\nSUBFIELD\nSUBFIELDS\nSUBFILE\nSUBFILES\nSUBGOAL\nSUBGOALS\nSUBGRAPH\nSUBGRAPHS\nSUBGROUP\nSUBGROUPS\nSUBINTERVAL\nSUBINTERVALS\nSUBJECT\nSUBJECTED\nSUBJECTING\nSUBJECTION\nSUBJECTIVE\nSUBJECTIVELY\nSUBJECTIVITY\nSUBJECTS\nSUBLANGUAGE\nSUBLANGUAGES\nSUBLAYER\nSUBLAYERS\nSUBLIMATION\nSUBLIMATIONS\nSUBLIME\nSUBLIMED\nSUBLIST\nSUBLISTS\nSUBMARINE\nSUBMARINER\nSUBMARINERS\nSUBMARINES\nSUBMERGE\nSUBMERGED\nSUBMERGES\nSUBMERGING\nSUBMISSION\nSUBMISSIONS\nSUBMISSIVE\nSUBMIT\nSUBMITS\nSUBMITTAL\nSUBMITTED\nSUBMITTING\nSUBMODE\nSUBMODES\nSUBMODULE\nSUBMODULES\nSUBMULTIPLEXED\nSUBNET\nSUBNETS\nSUBNETWORK\nSUBNETWORKS\nSUBOPTIMAL\nSUBORDINATE\nSUBORDINATED\nSUBORDINATES\nSUBORDINATION\nSUBPARTS\nSUBPHASES\nSUBPOENA\nSUBPROBLEM\nSUBPROBLEMS\nSUBPROCESSES\nSUBPROGRAM\nSUBPROGRAMS\nSUBPROJECT\nSUBPROOF\nSUBPROOFS\nSUBRANGE\nSUBRANGES\nSUBROUTINE\nSUBROUTINES\nSUBS\nSUBSCHEMA\nSUBSCHEMAS\nSUBSCRIBE\nSUBSCRIBED\nSUBSCRIBER\nSUBSCRIBERS\nSUBSCRIBES\nSUBSCRIBING\nSUBSCRIPT\nSUBSCRIPTED\nSUBSCRIPTING\nSUBSCRIPTION\nSUBSCRIPTIONS\nSUBSCRIPTS\nSUBSECTION\nSUBSECTIONS\nSUBSEGMENT\nSUBSEGMENTS\nSUBSEQUENCE\nSUBSEQUENCES\nSUBSEQUENT\nSUBSEQUENTLY\nSUBSERVIENT\nSUBSET\nSUBSETS\nSUBSIDE\nSUBSIDED\nSUBSIDES\nSUBSIDIARIES\nSUBSIDIARY\nSUBSIDIES\nSUBSIDING\nSUBSIDIZE\nSUBSIDIZED\nSUBSIDIZES\nSUBSIDIZING\nSUBSIDY\nSUBSIST\nSUBSISTED\nSUBSISTENCE\nSUBSISTENT\nSUBSISTING\nSUBSISTS\nSUBSLOT\nSUBSLOTS\nSUBSPACE\nSUBSPACES\nSUBSTANCE\nSUBSTANCES\nSUBSTANTIAL\nSUBSTANTIALLY\nSUBSTANTIATE\nSUBSTANTIATED\nSUBSTANTIATES\nSUBSTANTIATING\nSUBSTANTIATION\nSUBSTANTIATIONS\nSUBSTANTIVE\nSUBSTANTIVELY\nSUBSTANTIVITY\nSUBSTATION\nSUBSTATIONS\nSUBSTITUTABILITY\nSUBSTITUTABLE\nSUBSTITUTE\nSUBSTITUTED\nSUBSTITUTES\nSUBSTITUTING\nSUBSTITUTION\nSUBSTITUTIONS\nSUBSTRATE\nSUBSTRATES\nSUBSTRING\nSUBSTRINGS\nSUBSTRUCTURE\nSUBSTRUCTURES\nSUBSUME\nSUBSUMED\nSUBSUMES\nSUBSUMING\nSUBSYSTEM\nSUBSYSTEMS\nSUBTASK\nSUBTASKS\nSUBTERFUGE\nSUBTERRANEAN\nSUBTITLE\nSUBTITLED\nSUBTITLES\nSUBTLE\nSUBTLENESS\nSUBTLER\nSUBTLEST\nSUBTLETIES\nSUBTLETY\nSUBTLY\nSUBTOTAL\nSUBTRACT\nSUBTRACTED\nSUBTRACTING\nSUBTRACTION\nSUBTRACTIONS\nSUBTRACTOR\nSUBTRACTORS\nSUBTRACTS\nSUBTRAHEND\nSUBTRAHENDS\nSUBTREE\nSUBTREES\nSUBUNIT\nSUBUNITS\nSUBURB\nSUBURBAN\nSUBURBIA\nSUBURBS\nSUBVERSION\nSUBVERSIVE\nSUBVERT\nSUBVERTED\nSUBVERTER\nSUBVERTING\nSUBVERTS\nSUBWAY\nSUBWAYS\nSUCCEED\nSUCCEEDED\nSUCCEEDING\nSUCCEEDS\nSUCCESS\nSUCCESSES\nSUCCESSFUL\nSUCCESSFULLY\nSUCCESSION\nSUCCESSIONS\nSUCCESSIVE\nSUCCESSIVELY\nSUCCESSOR\nSUCCESSORS\nSUCCINCT\nSUCCINCTLY\nSUCCINCTNESS\nSUCCOR\nSUCCUMB\nSUCCUMBED\nSUCCUMBING\nSUCCUMBS\nSUCH\nSUCK\nSUCKED\nSUCKER\nSUCKERS\nSUCKING\nSUCKLE\nSUCKLING\nSUCKS\nSUCTION\nSUDAN\nSUDANESE\nSUDANIC\nSUDDEN\nSUDDENLY\nSUDDENNESS\nSUDS\nSUDSING\nSUE\nSUED\nSUES\nSUEZ\nSUFFER\nSUFFERANCE\nSUFFERED\nSUFFERER\nSUFFERERS\nSUFFERING\nSUFFERINGS\nSUFFERS\nSUFFICE\nSUFFICED\nSUFFICES\nSUFFICIENCY\nSUFFICIENT\nSUFFICIENTLY\nSUFFICING\nSUFFIX\nSUFFIXED\nSUFFIXER\nSUFFIXES\nSUFFIXING\nSUFFOCATE\nSUFFOCATED\nSUFFOCATES\nSUFFOCATING\nSUFFOCATION\nSUFFOLK\nSUFFRAGE\nSUFFRAGETTE\nSUGAR\nSUGARED\nSUGARING\nSUGARINGS\nSUGARS\nSUGGEST\nSUGGESTED\nSUGGESTIBLE\nSUGGESTING\nSUGGESTION\nSUGGESTIONS\nSUGGESTIVE\nSUGGESTIVELY\nSUGGESTS\nSUICIDAL\nSUICIDALLY\nSUICIDE\nSUICIDES\nSUING\nSUIT\nSUITABILITY\nSUITABLE\nSUITABLENESS\nSUITABLY\nSUITCASE\nSUITCASES\nSUITE\nSUITED\nSUITERS\nSUITES\nSUITING\nSUITOR\nSUITORS\nSUITS\nSUKARNO\nSULFA\nSULFUR\nSULFURIC\nSULFUROUS\nSULK\nSULKED\nSULKINESS\nSULKING\nSULKS\nSULKY\nSULLEN\nSULLENLY\nSULLENNESS\nSULLIVAN\nSULPHATE\nSULPHUR\nSULPHURED\nSULPHURIC\nSULTAN\nSULTANS\nSULTRY\nSULZBERGER\nSUM\nSUMAC\nSUMATRA\nSUMERIA\nSUMERIAN\nSUMMAND\nSUMMANDS\nSUMMARIES\nSUMMARILY\nSUMMARIZATION\nSUMMARIZATIONS\nSUMMARIZE\nSUMMARIZED\nSUMMARIZES\nSUMMARIZING\nSUMMARY\nSUMMATION\nSUMMATIONS\nSUMMED\nSUMMER\nSUMMERDALE\nSUMMERS\nSUMMERTIME\nSUMMING\nSUMMIT\nSUMMITRY\nSUMMON\nSUMMONED\nSUMMONER\nSUMMONERS\nSUMMONING\nSUMMONS\nSUMMONSES\nSUMNER\nSUMPTUOUS\nSUMS\nSUMTER\nSUN\nSUNBEAM\nSUNBEAMS\nSUNBELT\nSUNBONNET\nSUNBURN\nSUNBURNT\nSUNDAY\nSUNDAYS\nSUNDER\nSUNDIAL\nSUNDOWN\nSUNDRIES\nSUNDRY\nSUNFLOWER\nSUNG\nSUNGLASS\nSUNGLASSES\nSUNK\nSUNKEN\nSUNLIGHT\nSUNLIT\nSUNNED\nSUNNING\nSUNNY\nSUNNYVALE\nSUNRISE\nSUNS\nSUNSET\nSUNSHINE\nSUNSPOT\nSUNTAN\nSUNTANNED\nSUNTANNING\nSUPER\nSUPERB\nSUPERBLOCK\nSUPERBLY\nSUPERCOMPUTER\nSUPERCOMPUTERS\nSUPEREGO\nSUPEREGOS\nSUPERFICIAL\nSUPERFICIALLY\nSUPERFLUITIES\nSUPERFLUITY\nSUPERFLUOUS\nSUPERFLUOUSLY\nSUPERGROUP\nSUPERGROUPS\nSUPERHUMAN\nSUPERHUMANLY\nSUPERIMPOSE\nSUPERIMPOSED\nSUPERIMPOSES\nSUPERIMPOSING\nSUPERINTEND\nSUPERINTENDENT\nSUPERINTENDENTS\nSUPERIOR\nSUPERIORITY\nSUPERIORS\nSUPERLATIVE\nSUPERLATIVELY\nSUPERLATIVES\nSUPERMARKET\nSUPERMARKETS\nSUPERMINI\nSUPERMINIS\nSUPERNATURAL\nSUPERPOSE\nSUPERPOSED\nSUPERPOSES\nSUPERPOSING\nSUPERPOSITION\nSUPERSCRIPT\nSUPERSCRIPTED\nSUPERSCRIPTING\nSUPERSCRIPTS\nSUPERSEDE\nSUPERSEDED\nSUPERSEDES\nSUPERSEDING\nSUPERSET\nSUPERSETS\nSUPERSTITION\nSUPERSTITIONS\nSUPERSTITIOUS\nSUPERUSER\nSUPERVISE\nSUPERVISED\nSUPERVISES\nSUPERVISING\nSUPERVISION\nSUPERVISOR\nSUPERVISORS\nSUPERVISORY\nSUPINE\nSUPPER\nSUPPERS\nSUPPLANT\nSUPPLANTED\nSUPPLANTING\nSUPPLANTS\nSUPPLE\nSUPPLEMENT\nSUPPLEMENTAL\nSUPPLEMENTARY\nSUPPLEMENTED\nSUPPLEMENTING\nSUPPLEMENTS\nSUPPLENESS\nSUPPLICATION\nSUPPLIED\nSUPPLIER\nSUPPLIERS\nSUPPLIES\nSUPPLY\nSUPPLYING\nSUPPORT\nSUPPORTABLE\nSUPPORTED\nSUPPORTER\nSUPPORTERS\nSUPPORTING\nSUPPORTINGLY\nSUPPORTIVE\nSUPPORTIVELY\nSUPPORTS\nSUPPOSE\nSUPPOSED\nSUPPOSEDLY\nSUPPOSES\nSUPPOSING\nSUPPOSITION\nSUPPOSITIONS\nSUPPRESS\nSUPPRESSED\nSUPPRESSES\nSUPPRESSING\nSUPPRESSION\nSUPPRESSOR\nSUPPRESSORS\nSUPRANATIONAL\nSUPREMACY\nSUPREME\nSUPREMELY\nSURCHARGE\nSURE\nSURELY\nSURENESS\nSURETIES\nSURETY\nSURF\nSURFACE\nSURFACED\nSURFACENESS\nSURFACES\nSURFACING\nSURGE\nSURGED\nSURGEON\nSURGEONS\nSURGERY\nSURGES\nSURGICAL\nSURGICALLY\nSURGING\nSURLINESS\nSURLY\nSURMISE\nSURMISED\nSURMISES\nSURMOUNT\nSURMOUNTED\nSURMOUNTING\nSURMOUNTS\nSURNAME\nSURNAMES\nSURPASS\nSURPASSED\nSURPASSES\nSURPASSING\nSURPLUS\nSURPLUSES\nSURPRISE\nSURPRISED\nSURPRISES\nSURPRISING\nSURPRISINGLY\nSURREAL\nSURRENDER\nSURRENDERED\nSURRENDERING\nSURRENDERS\nSURREPTITIOUS\nSURREY\nSURROGATE\nSURROGATES\nSURROUND\nSURROUNDED\nSURROUNDING\nSURROUNDINGS\nSURROUNDS\nSURTAX\nSURVEY\nSURVEYED\nSURVEYING\nSURVEYOR\nSURVEYORS\nSURVEYS\nSURVIVAL\nSURVIVALS\nSURVIVE\nSURVIVED\nSURVIVES\nSURVIVING\nSURVIVOR\nSURVIVORS\nSUS\nSUSAN\nSUSANNE\nSUSCEPTIBLE\nSUSIE\nSUSPECT\nSUSPECTED\nSUSPECTING\nSUSPECTS\nSUSPEND\nSUSPENDED\nSUSPENDER\nSUSPENDERS\nSUSPENDING\nSUSPENDS\nSUSPENSE\nSUSPENSES\nSUSPENSION\nSUSPENSIONS\nSUSPICION\nSUSPICIONS\nSUSPICIOUS\nSUSPICIOUSLY\nSUSQUEHANNA\nSUSSEX\nSUSTAIN\nSUSTAINED\nSUSTAINING\nSUSTAINS\nSUSTENANCE\nSUTHERLAND\nSUTTON\nSUTURE\nSUTURES\nSUWANEE\nSUZANNE\nSUZERAINTY\nSUZUKI\nSVELTE\nSVETLANA\nSWAB\nSWABBING\nSWAGGER\nSWAGGERED\nSWAGGERING\nSWAHILI\nSWAIN\nSWAINS\nSWALLOW\nSWALLOWED\nSWALLOWING\nSWALLOWS\nSWALLOWTAIL\nSWAM\nSWAMI\nSWAMP\nSWAMPED\nSWAMPING\nSWAMPS\nSWAMPY\nSWAN\nSWANK\nSWANKY\nSWANLIKE\nSWANS\nSWANSEA\nSWANSON\nSWAP\nSWAPPED\nSWAPPING\nSWAPS\nSWARM\nSWARMED\nSWARMING\nSWARMS\nSWARTHMORE\nSWARTHOUT\nSWARTHY\nSWARTZ\nSWASTIKA\nSWAT\nSWATTED\nSWAY\nSWAYED\nSWAYING\nSWAZILAND\nSWEAR\nSWEARER\nSWEARING\nSWEARS\nSWEAT\nSWEATED\nSWEATER\nSWEATERS\nSWEATING\nSWEATS\nSWEATSHIRT\nSWEATY\nSWEDE\nSWEDEN\nSWEDES\nSWEDISH\nSWEENEY\nSWEENEYS\nSWEEP\nSWEEPER\nSWEEPERS\nSWEEPING\nSWEEPINGS\nSWEEPS\nSWEEPSTAKES\nSWEET\nSWEETEN\nSWEETENED\nSWEETENER\nSWEETENERS\nSWEETENING\nSWEETENINGS\nSWEETENS\nSWEETER\nSWEETEST\nSWEETHEART\nSWEETHEARTS\nSWEETISH\nSWEETLY\nSWEETNESS\nSWEETS\nSWELL\nSWELLED\nSWELLING\nSWELLINGS\nSWELLS\nSWELTER\nSWENSON\nSWEPT\nSWERVE\nSWERVED\nSWERVES\nSWERVING\nSWIFT\nSWIFTER\nSWIFTEST\nSWIFTLY\nSWIFTNESS\nSWIM\nSWIMMER\nSWIMMERS\nSWIMMING\nSWIMMINGLY\nSWIMS\nSWIMSUIT\nSWINBURNE\nSWINDLE\nSWINE\nSWING\nSWINGER\nSWINGERS\nSWINGING\nSWINGS\nSWINK\nSWIPE\nSWIRL\nSWIRLED\nSWIRLING\nSWISH\nSWISHED\nSWISS\nSWITCH\nSWITCHBLADE\nSWITCHBOARD\nSWITCHBOARDS\nSWITCHED\nSWITCHER\nSWITCHERS\nSWITCHES\nSWITCHING\nSWITCHINGS\nSWITCHMAN\nSWITZER\nSWITZERLAND\nSWIVEL\nSWIZZLE\nSWOLLEN\nSWOON\nSWOOP\nSWOOPED\nSWOOPING\nSWOOPS\nSWORD\nSWORDFISH\nSWORDS\nSWORE\nSWORN\nSWUM\nSWUNG\nSYBIL\nSYCAMORE\nSYCOPHANT\nSYCOPHANTIC\nSYDNEY\nSYKES\nSYLLABLE\nSYLLABLES\nSYLLOGISM\nSYLLOGISMS\nSYLLOGISTIC\nSYLOW\nSYLVAN\nSYLVANIA\nSYLVESTER\nSYLVIA\nSYLVIE\nSYMBIOSIS\nSYMBIOTIC\nSYMBOL\nSYMBOLIC\nSYMBOLICALLY\nSYMBOLICS\nSYMBOLISM\nSYMBOLIZATION\nSYMBOLIZE\nSYMBOLIZED\nSYMBOLIZES\nSYMBOLIZING\nSYMBOLS\nSYMINGTON\nSYMMETRIC\nSYMMETRICAL\nSYMMETRICALLY\nSYMMETRIES\nSYMMETRY\nSYMPATHETIC\nSYMPATHIES\nSYMPATHIZE\nSYMPATHIZED\nSYMPATHIZER\nSYMPATHIZERS\nSYMPATHIZES\nSYMPATHIZING\nSYMPATHIZINGLY\nSYMPATHY\nSYMPHONIC\nSYMPHONIES\nSYMPHONY\nSYMPOSIA\nSYMPOSIUM\nSYMPOSIUMS\nSYMPTOM\nSYMPTOMATIC\nSYMPTOMS\nSYNAGOGUE\nSYNAPSE\nSYNAPSES\nSYNAPTIC\nSYNCHRONISM\nSYNCHRONIZATION\nSYNCHRONIZE\nSYNCHRONIZED\nSYNCHRONIZER\nSYNCHRONIZERS\nSYNCHRONIZES\nSYNCHRONIZING\nSYNCHRONOUS\nSYNCHRONOUSLY\nSYNCHRONY\nSYNCHROTRON\nSYNCOPATE\nSYNDICATE\nSYNDICATED\nSYNDICATES\nSYNDICATION\nSYNDROME\nSYNDROMES\nSYNERGISM\nSYNERGISTIC\nSYNERGY\nSYNGE\nSYNOD\nSYNONYM\nSYNONYMOUS\nSYNONYMOUSLY\nSYNONYMS\nSYNOPSES\nSYNOPSIS\nSYNTACTIC\nSYNTACTICAL\nSYNTACTICALLY\nSYNTAX\nSYNTAXES\nSYNTHESIS\nSYNTHESIZE\nSYNTHESIZED\nSYNTHESIZER\nSYNTHESIZERS\nSYNTHESIZES\nSYNTHESIZING\nSYNTHETIC\nSYNTHETICS\nSYRACUSE\nSYRIA\nSYRIAN\nSYRIANIZE\nSYRIANIZES\nSYRIANS\nSYRINGE\nSYRINGES\nSYRUP\nSYRUPY\nSYSTEM\nSYSTEMATIC\nSYSTEMATICALLY\nSYSTEMATIZE\nSYSTEMATIZED\nSYSTEMATIZES\nSYSTEMATIZING\nSYSTEMIC\nSYSTEMS\nSYSTEMWIDE\nSZILARD\nTAB\nTABERNACLE\nTABERNACLES\nTABLE\nTABLEAU\nTABLEAUS\nTABLECLOTH\nTABLECLOTHS\nTABLED\nTABLES\nTABLESPOON\nTABLESPOONFUL\nTABLESPOONFULS\nTABLESPOONS\nTABLET\nTABLETS\nTABLING\nTABOO\nTABOOS\nTABS\nTABULAR\nTABULATE\nTABULATED\nTABULATES\nTABULATING\nTABULATION\nTABULATIONS\nTABULATOR\nTABULATORS\nTACHOMETER\nTACHOMETERS\nTACIT\nTACITLY\nTACITUS\nTACK\nTACKED\nTACKING\nTACKLE\nTACKLES\nTACOMA\nTACT\nTACTIC\nTACTICS\nTACTILE\nTAFT\nTAG\nTAGGED\nTAGGING\nTAGS\nTAHITI\nTAHOE\nTAIL\nTAILED\nTAILING\nTAILOR\nTAILORED\nTAILORING\nTAILORS\nTAILS\nTAINT\nTAINTED\nTAIPEI\nTAIWAN\nTAIWANESE\nTAKE\nTAKEN\nTAKER\nTAKERS\nTAKES\nTAKING\nTAKINGS\nTALE\nTALENT\nTALENTED\nTALENTS\nTALES\nTALK\nTALKATIVE\nTALKATIVELY\nTALKATIVENESS\nTALKED\nTALKER\nTALKERS\nTALKIE\nTALKING\nTALKS\nTALL\nTALLADEGA\nTALLAHASSEE\nTALLAHATCHIE\nTALLAHOOSA\nTALLCHIEF\nTALLER\nTALLEST\nTALLEYRAND\nTALLNESS\nTALLOW\nTALLY\nTALMUD\nTALMUDISM\nTALMUDIZATION\nTALMUDIZATIONS\nTALMUDIZE\nTALMUDIZES\nTAME\nTAMED\nTAMELY\nTAMENESS\nTAMER\nTAMES\nTAMIL\nTAMING\nTAMMANY\nTAMMANYIZE\nTAMMANYIZES\nTAMPA\nTAMPER\nTAMPERED\nTAMPERING\nTAMPERS\nTAN\nTANAKA\nTANANARIVE\nTANDEM\nTANG\nTANGANYIKA\nTANGENT\nTANGENTIAL\nTANGENTS\nTANGIBLE\nTANGIBLY\nTANGLE\nTANGLED\nTANGY\nTANK\nTANKER\nTANKERS\nTANKS\nTANNENBAUM\nTANNER\nTANNERS\nTANTALIZING\nTANTALIZINGLY\nTANTALUS\nTANTAMOUNT\nTANTRUM\nTANTRUMS\nTANYA\nTANZANIA\nTAOISM\nTAOIST\nTAOS\nTAP\nTAPE\nTAPED\nTAPER\nTAPERED\nTAPERING\nTAPERS\nTAPES\nTAPESTRIES\nTAPESTRY\nTAPING\nTAPINGS\nTAPPED\nTAPPER\nTAPPERS\nTAPPING\nTAPROOT\nTAPROOTS\nTAPS\nTAR\nTARA\nTARBELL\nTARDINESS\nTARDY\nTARGET\nTARGETED\nTARGETING\nTARGETS\nTARIFF\nTARIFFS\nTARRY\nTARRYTOWN\nTART\nTARTARY\nTARTLY\nTARTNESS\nTARTUFFE\nTARZAN\nTASK\nTASKED\nTASKING\nTASKS\nTASMANIA\nTASS\nTASSEL\nTASSELS\nTASTE\nTASTED\nTASTEFUL\nTASTEFULLY\nTASTEFULNESS\nTASTELESS\nTASTELESSLY\nTASTER\nTASTERS\nTASTES\nTASTING\nTATE\nTATTER\nTATTERED\nTATTOO\nTATTOOED\nTATTOOS\nTAU\nTAUGHT\nTAUNT\nTAUNTED\nTAUNTER\nTAUNTING\nTAUNTS\nTAURUS\nTAUT\nTAUTLY\nTAUTNESS\nTAUTOLOGICAL\nTAUTOLOGICALLY\nTAUTOLOGIES\nTAUTOLOGY\nTAVERN\nTAVERNS\nTAWNEY\nTAWNY\nTAX\nTAXABLE\nTAXATION\nTAXED\nTAXES\nTAXI\nTAXICAB\nTAXICABS\nTAXIED\nTAXIING\nTAXING\nTAXIS\nTAXONOMIC\nTAXONOMICALLY\nTAXONOMY\nTAXPAYER\nTAXPAYERS\nTAYLOR\nTAYLORIZE\nTAYLORIZES\nTAYLORS\nTCHAIKOVSKY\nTEA\nTEACH\nTEACHABLE\nTEACHER\nTEACHERS\nTEACHES\nTEACHING\nTEACHINGS\nTEACUP\nTEAM\nTEAMED\nTEAMING\nTEAMS\nTEAR\nTEARED\nTEARFUL\nTEARFULLY\nTEARING\nTEARS\nTEAS\nTEASE\nTEASED\nTEASES\nTEASING\nTEASPOON\nTEASPOONFUL\nTEASPOONFULS\nTEASPOONS\nTECHNICAL\nTECHNICALITIES\nTECHNICALITY\nTECHNICALLY\nTECHNICIAN\nTECHNICIANS\nTECHNION\nTECHNIQUE\nTECHNIQUES\nTECHNOLOGICAL\nTECHNOLOGICALLY\nTECHNOLOGIES\nTECHNOLOGIST\nTECHNOLOGISTS\nTECHNOLOGY\nTED\nTEDDY\nTEDIOUS\nTEDIOUSLY\nTEDIOUSNESS\nTEDIUM\nTEEM\nTEEMED\nTEEMING\nTEEMS\nTEEN\nTEENAGE\nTEENAGED\nTEENAGER\nTEENAGERS\nTEENS\nTEETH\nTEETHE\nTEETHED\nTEETHES\nTEETHING\nTEFLON\nTEGUCIGALPA\nTEHERAN\nTEHRAN\nTEKTRONIX\nTELECOMMUNICATION\nTELECOMMUNICATIONS\nTELEDYNE\nTELEFUNKEN\nTELEGRAM\nTELEGRAMS\nTELEGRAPH\nTELEGRAPHED\nTELEGRAPHER\nTELEGRAPHERS\nTELEGRAPHIC\nTELEGRAPHING\nTELEGRAPHS\nTELEMANN\nTELEMETRY\nTELEOLOGICAL\nTELEOLOGICALLY\nTELEOLOGY\nTELEPATHY\nTELEPHONE\nTELEPHONED\nTELEPHONER\nTELEPHONERS\nTELEPHONES\nTELEPHONIC\nTELEPHONING\nTELEPHONY\nTELEPROCESSING\nTELESCOPE\nTELESCOPED\nTELESCOPES\nTELESCOPING\nTELETEX\nTELETEXT\nTELETYPE\nTELETYPES\nTELEVISE\nTELEVISED\nTELEVISES\nTELEVISING\nTELEVISION\nTELEVISIONS\nTELEVISOR\nTELEVISORS\nTELEX\nTELL\nTELLER\nTELLERS\nTELLING\nTELLS\nTELNET\nTELNET\nTEMPER\nTEMPERAMENT\nTEMPERAMENTAL\nTEMPERAMENTS\nTEMPERANCE\nTEMPERATE\nTEMPERATELY\nTEMPERATENESS\nTEMPERATURE\nTEMPERATURES\nTEMPERED\nTEMPERING\nTEMPERS\nTEMPEST\nTEMPESTUOUS\nTEMPESTUOUSLY\nTEMPLATE\nTEMPLATES\nTEMPLE\nTEMPLEMAN\nTEMPLES\nTEMPLETON\nTEMPORAL\nTEMPORALLY\nTEMPORARIES\nTEMPORARILY\nTEMPORARY\nTEMPT\nTEMPTATION\nTEMPTATIONS\nTEMPTED\nTEMPTER\nTEMPTERS\nTEMPTING\nTEMPTINGLY\nTEMPTS\nTEN\nTENACIOUS\nTENACIOUSLY\nTENANT\nTENANTS\nTEND\nTENDED\nTENDENCIES\nTENDENCY\nTENDER\nTENDERLY\nTENDERNESS\nTENDERS\nTENDING\nTENDS\nTENEMENT\nTENEMENTS\nTENEX\nTENEX\nTENFOLD\nTENNECO\nTENNESSEE\nTENNEY\nTENNIS\nTENNYSON\nTENOR\nTENORS\nTENS\nTENSE\nTENSED\nTENSELY\nTENSENESS\nTENSER\nTENSES\nTENSEST\nTENSING\nTENSION\nTENSIONS\nTENT\nTENTACLE\nTENTACLED\nTENTACLES\nTENTATIVE\nTENTATIVELY\nTENTED\nTENTH\nTENTING\nTENTS\nTENURE\nTERESA\nTERM\nTERMED\nTERMINAL\nTERMINALLY\nTERMINALS\nTERMINATE\nTERMINATED\nTERMINATES\nTERMINATING\nTERMINATION\nTERMINATIONS\nTERMINATOR\nTERMINATORS\nTERMING\nTERMINOLOGIES\nTERMINOLOGY\nTERMINUS\nTERMS\nTERMWISE\nTERNARY\nTERPSICHORE\nTERRA\nTERRACE\nTERRACED\nTERRACES\nTERRAIN\nTERRAINS\nTERRAN\nTERRE\nTERRESTRIAL\nTERRESTRIALS\nTERRIBLE\nTERRIBLY\nTERRIER\nTERRIERS\nTERRIFIC\nTERRIFIED\nTERRIFIES\nTERRIFY\nTERRIFYING\nTERRITORIAL\nTERRITORIES\nTERRITORY\nTERROR\nTERRORISM\nTERRORIST\nTERRORISTIC\nTERRORISTS\nTERRORIZE\nTERRORIZED\nTERRORIZES\nTERRORIZING\nTERRORS\nTERTIARY\nTESS\nTESSIE\nTEST\nTESTABILITY\nTESTABLE\nTESTAMENT\nTESTAMENTS\nTESTED\nTESTER\nTESTERS\nTESTICLE\nTESTICLES\nTESTIFIED\nTESTIFIER\nTESTIFIERS\nTESTIFIES\nTESTIFY\nTESTIFYING\nTESTIMONIES\nTESTIMONY\nTESTING\nTESTINGS\nTESTS\nTEUTONIC\nTEX\nTEX\nTEXACO\nTEXAN\nTEXANS\nTEXAS\nTEXASES\nTEXT\nTEXTBOOK\nTEXTBOOKS\nTEXTILE\nTEXTILES\nTEXTRON\nTEXTS\nTEXTUAL\nTEXTUALLY\nTEXTURE\nTEXTURED\nTEXTURES\nTHAI\nTHAILAND\nTHALIA\nTHAMES\nTHAN\nTHANK\nTHANKED\nTHANKFUL\nTHANKFULLY\nTHANKFULNESS\nTHANKING\nTHANKLESS\nTHANKLESSLY\nTHANKLESSNESS\nTHANKS\nTHANKSGIVING\nTHANKSGIVINGS\nTHAT\nTHATCH\nTHATCHES\nTHATS\nTHAW\nTHAWED\nTHAWING\nTHAWS\nTHAYER\nTHE\nTHEA\nTHEATER\nTHEATERS\nTHEATRICAL\nTHEATRICALLY\nTHEATRICALS\nTHEBES\nTHEFT\nTHEFTS\nTHEIR\nTHEIRS\nTHELMA\nTHEM\nTHEMATIC\nTHEME\nTHEMES\nTHEMSELVES\nTHEN\nTHENCE\nTHENCEFORTH\nTHEODORE\nTHEODOSIAN\nTHEODOSIUS\nTHEOLOGICAL\nTHEOLOGY\nTHEOREM\nTHEOREMS\nTHEORETIC\nTHEORETICAL\nTHEORETICALLY\nTHEORETICIANS\nTHEORIES\nTHEORIST\nTHEORISTS\nTHEORIZATION\nTHEORIZATIONS\nTHEORIZE\nTHEORIZED\nTHEORIZER\nTHEORIZERS\nTHEORIZES\nTHEORIZING\nTHEORY\nTHERAPEUTIC\nTHERAPIES\nTHERAPIST\nTHERAPISTS\nTHERAPY\nTHERE\nTHEREABOUTS\nTHEREAFTER\nTHEREBY\nTHEREFORE\nTHEREIN\nTHEREOF\nTHEREON\nTHERESA\nTHERETO\nTHEREUPON\nTHEREWITH\nTHERMAL\nTHERMODYNAMIC\nTHERMODYNAMICS\nTHERMOFAX\nTHERMOMETER\nTHERMOMETERS\nTHERMOSTAT\nTHERMOSTATS\nTHESE\nTHESES\nTHESEUS\nTHESIS\nTHESSALONIAN\nTHESSALY\nTHETIS\nTHEY\nTHICK\nTHICKEN\nTHICKENS\nTHICKER\nTHICKEST\nTHICKET\nTHICKETS\nTHICKLY\nTHICKNESS\nTHIEF\nTHIENSVILLE\nTHIEVE\nTHIEVES\nTHIEVING\nTHIGH\nTHIGHS\nTHIMBLE\nTHIMBLES\nTHIMBU\nTHIN\nTHING\nTHINGS\nTHINK\nTHINKABLE\nTHINKABLY\nTHINKER\nTHINKERS\nTHINKING\nTHINKS\nTHINLY\nTHINNER\nTHINNESS\nTHINNEST\nTHIRD\nTHIRDLY\nTHIRDS\nTHIRST\nTHIRSTED\nTHIRSTS\nTHIRSTY\nTHIRTEEN\nTHIRTEENS\nTHIRTEENTH\nTHIRTIES\nTHIRTIETH\nTHIRTY\nTHIS\nTHISTLE\nTHOMAS\nTHOMISTIC\nTHOMPSON\nTHOMSON\nTHONG\nTHOR\nTHOREAU\nTHORN\nTHORNBURG\nTHORNS\nTHORNTON\nTHORNY\nTHOROUGH\nTHOROUGHFARE\nTHOROUGHFARES\nTHOROUGHLY\nTHOROUGHNESS\nTHORPE\nTHORSTEIN\nTHOSE\nTHOUGH\nTHOUGHT\nTHOUGHTFUL\nTHOUGHTFULLY\nTHOUGHTFULNESS\nTHOUGHTLESS\nTHOUGHTLESSLY\nTHOUGHTLESSNESS\nTHOUGHTS\nTHOUSAND\nTHOUSANDS\nTHOUSANDTH\nTHRACE\nTHRACIAN\nTHRASH\nTHRASHED\nTHRASHER\nTHRASHES\nTHRASHING\nTHREAD\nTHREADED\nTHREADER\nTHREADERS\nTHREADING\nTHREADS\nTHREAT\nTHREATEN\nTHREATENED\nTHREATENING\nTHREATENS\nTHREATS\nTHREE\nTHREEFOLD\nTHREES\nTHREESCORE\nTHRESHOLD\nTHRESHOLDS\nTHREW\nTHRICE\nTHRIFT\nTHRIFTY\nTHRILL\nTHRILLED\nTHRILLER\nTHRILLERS\nTHRILLING\nTHRILLINGLY\nTHRILLS\nTHRIVE\nTHRIVED\nTHRIVES\nTHRIVING\nTHROAT\nTHROATED\nTHROATS\nTHROB\nTHROBBED\nTHROBBING\nTHROBS\nTHRONE\nTHRONEBERRY\nTHRONES\nTHRONG\nTHRONGS\nTHROTTLE\nTHROTTLED\nTHROTTLES\nTHROTTLING\nTHROUGH\nTHROUGHOUT\nTHROUGHPUT\nTHROW\nTHROWER\nTHROWING\nTHROWN\nTHROWS\nTHRUSH\nTHRUST\nTHRUSTER\nTHRUSTERS\nTHRUSTING\nTHRUSTS\nTHUBAN\nTHUD\nTHUDS\nTHUG\nTHUGS\nTHULE\nTHUMB\nTHUMBED\nTHUMBING\nTHUMBS\nTHUMP\nTHUMPED\nTHUMPING\nTHUNDER\nTHUNDERBOLT\nTHUNDERBOLTS\nTHUNDERED\nTHUNDERER\nTHUNDERERS\nTHUNDERING\nTHUNDERS\nTHUNDERSTORM\nTHUNDERSTORMS\nTHURBER\nTHURMAN\nTHURSDAY\nTHURSDAYS\nTHUS\nTHUSLY\nTHWART\nTHWARTED\nTHWARTING\nTHWARTS\nTHYSELF\nTIBER\nTIBET\nTIBETAN\nTIBURON\nTICK\nTICKED\nTICKER\nTICKERS\nTICKET\nTICKETS\nTICKING\nTICKLE\nTICKLED\nTICKLES\nTICKLING\nTICKLISH\nTICKS\nTICONDEROGA\nTIDAL\nTIDALLY\nTIDE\nTIDED\nTIDES\nTIDIED\nTIDINESS\nTIDING\nTIDINGS\nTIDY\nTIDYING\nTIE\nTIECK\nTIED\nTIENTSIN\nTIER\nTIERS\nTIES\nTIFFANY\nTIGER\nTIGERS\nTIGHT\nTIGHTEN\nTIGHTENED\nTIGHTENER\nTIGHTENERS\nTIGHTENING\nTIGHTENINGS\nTIGHTENS\nTIGHTER\nTIGHTEST\nTIGHTLY\nTIGHTNESS\nTIGRIS\nTIJUANA\nTILDE\nTILE\nTILED\nTILES\nTILING\nTILL\nTILLABLE\nTILLED\nTILLER\nTILLERS\nTILLICH\nTILLIE\nTILLING\nTILLS\nTILT\nTILTED\nTILTING\nTILTS\nTIM\nTIMBER\nTIMBERED\nTIMBERING\nTIMBERS\nTIME\nTIMED\nTIMELESS\nTIMELESSLY\nTIMELESSNESS\nTIMELY\nTIMEOUT\nTIMEOUTS\nTIMER\nTIMERS\nTIMES\nTIMESHARE\nTIMESHARES\nTIMESHARING\nTIMESTAMP\nTIMESTAMPS\nTIMETABLE\nTIMETABLES\nTIMEX\nTIMID\nTIMIDITY\nTIMIDLY\nTIMING\nTIMINGS\nTIMMY\nTIMON\nTIMONIZE\nTIMONIZES\nTIMS\nTIN\nTINA\nTINCTURE\nTINGE\nTINGED\nTINGLE\nTINGLED\nTINGLES\nTINGLING\nTINIER\nTINIEST\nTINILY\nTININESS\nTINKER\nTINKERED\nTINKERING\nTINKERS\nTINKLE\nTINKLED\nTINKLES\nTINKLING\nTINNIER\nTINNIEST\nTINNILY\nTINNINESS\nTINNY\nTINS\nTINSELTOWN\nTINT\nTINTED\nTINTING\nTINTS\nTINY\nTIOGA\nTIP\nTIPPECANOE\nTIPPED\nTIPPER\nTIPPERARY\nTIPPERS\nTIPPING\nTIPS\nTIPTOE\nTIRANA\nTIRE\nTIRED\nTIREDLY\nTIRELESS\nTIRELESSLY\nTIRELESSNESS\nTIRES\nTIRESOME\nTIRESOMELY\nTIRESOMENESS\nTIRING\nTISSUE\nTISSUES\nTIT\nTITAN\nTITHE\nTITHER\nTITHES\nTITHING\nTITLE\nTITLED\nTITLES\nTITO\nTITS\nTITTER\nTITTERS\nTITUS\nTOAD\nTOADS\nTOAST\nTOASTED\nTOASTER\nTOASTING\nTOASTS\nTOBACCO\nTOBAGO\nTOBY\nTODAY\nTODAYS\nTODD\nTOE\nTOES\nTOGETHER\nTOGETHERNESS\nTOGGLE\nTOGGLED\nTOGGLES\nTOGGLING\nTOGO\nTOIL\nTOILED\nTOILER\nTOILET\nTOILETS\nTOILING\nTOILS\nTOKEN\nTOKENS\nTOKYO\nTOLAND\nTOLD\nTOLEDO\nTOLERABILITY\nTOLERABLE\nTOLERABLY\nTOLERANCE\nTOLERANCES\nTOLERANT\nTOLERANTLY\nTOLERATE\nTOLERATED\nTOLERATES\nTOLERATING\nTOLERATION\nTOLL\nTOLLED\nTOLLEY\nTOLLS\nTOLSTOY\nTOM\nTOMAHAWK\nTOMAHAWKS\nTOMATO\nTOMATOES\nTOMB\nTOMBIGBEE\nTOMBS\nTOMLINSON\nTOMMIE\nTOMOGRAPHY\nTOMORROW\nTOMORROWS\nTOMPKINS\nTON\nTONE\nTONED\nTONER\nTONES\nTONGS\nTONGUE\nTONGUED\nTONGUES\nTONI\nTONIC\nTONICS\nTONIGHT\nTONING\nTONIO\nTONNAGE\nTONS\nTONSIL\nTOO\nTOOK\nTOOL\nTOOLED\nTOOLER\nTOOLERS\nTOOLING\nTOOLS\nTOOMEY\nTOOTH\nTOOTHBRUSH\nTOOTHBRUSHES\nTOOTHPASTE\nTOOTHPICK\nTOOTHPICKS\nTOP\nTOPEKA\nTOPER\nTOPIC\nTOPICAL\nTOPICALLY\nTOPICS\nTOPMOST\nTOPOGRAPHY\nTOPOLOGICAL\nTOPOLOGIES\nTOPOLOGY\nTOPPLE\nTOPPLED\nTOPPLES\nTOPPLING\nTOPS\nTOPSY\nTORAH\nTORCH\nTORCHES\nTORE\nTORIES\nTORMENT\nTORMENTED\nTORMENTER\nTORMENTERS\nTORMENTING\nTORN\nTORNADO\nTORNADOES\nTORONTO\nTORPEDO\nTORPEDOES\nTORQUE\nTORQUEMADA\nTORRANCE\nTORRENT\nTORRENTS\nTORRID\nTORTOISE\nTORTOISES\nTORTURE\nTORTURED\nTORTURER\nTORTURERS\nTORTURES\nTORTURING\nTORUS\nTORUSES\nTORY\nTORYIZE\nTORYIZES\nTOSCA\nTOSCANINI\nTOSHIBA\nTOSS\nTOSSED\nTOSSES\nTOSSING\nTOTAL\nTOTALED\nTOTALING\nTOTALITIES\nTOTALITY\nTOTALLED\nTOTALLER\nTOTALLERS\nTOTALLING\nTOTALLY\nTOTALS\nTOTO\nTOTTER\nTOTTERED\nTOTTERING\nTOTTERS\nTOUCH\nTOUCHABLE\nTOUCHED\nTOUCHES\nTOUCHIER\nTOUCHIEST\nTOUCHILY\nTOUCHINESS\nTOUCHING\nTOUCHINGLY\nTOUCHY\nTOUGH\nTOUGHEN\nTOUGHER\nTOUGHEST\nTOUGHLY\nTOUGHNESS\nTOULOUSE\nTOUR\nTOURED\nTOURING\nTOURIST\nTOURISTS\nTOURNAMENT\nTOURNAMENTS\nTOURS\nTOW\nTOWARD\nTOWARDS\nTOWED\nTOWEL\nTOWELING\nTOWELLED\nTOWELLING\nTOWELS\nTOWER\nTOWERED\nTOWERING\nTOWERS\nTOWN\nTOWNLEY\nTOWNS\nTOWNSEND\nTOWNSHIP\nTOWNSHIPS\nTOWSLEY\nTOY\nTOYED\nTOYING\nTOYNBEE\nTOYOTA\nTOYS\nTRACE\nTRACEABLE\nTRACED\nTRACER\nTRACERS\nTRACES\nTRACING\nTRACINGS\nTRACK\nTRACKED\nTRACKER\nTRACKERS\nTRACKING\nTRACKS\nTRACT\nTRACTABILITY\nTRACTABLE\nTRACTARIANS\nTRACTIVE\nTRACTOR\nTRACTORS\nTRACTS\nTRACY\nTRADE\nTRADED\nTRADEMARK\nTRADEMARKS\nTRADEOFF\nTRADEOFFS\nTRADER\nTRADERS\nTRADES\nTRADESMAN\nTRADING\nTRADITION\nTRADITIONAL\nTRADITIONALLY\nTRADITIONS\nTRAFFIC\nTRAFFICKED\nTRAFFICKER\nTRAFFICKERS\nTRAFFICKING\nTRAFFICS\nTRAGEDIES\nTRAGEDY\nTRAGIC\nTRAGICALLY\nTRAIL\nTRAILED\nTRAILER\nTRAILERS\nTRAILING\nTRAILINGS\nTRAILS\nTRAIN\nTRAINED\nTRAINEE\nTRAINEES\nTRAINER\nTRAINERS\nTRAINING\nTRAINS\nTRAIT\nTRAITOR\nTRAITORS\nTRAITS\nTRAJECTORIES\nTRAJECTORY\nTRAMP\nTRAMPED\nTRAMPING\nTRAMPLE\nTRAMPLED\nTRAMPLER\nTRAMPLES\nTRAMPLING\nTRAMPS\nTRANCE\nTRANCES\nTRANQUIL\nTRANQUILITY\nTRANQUILLY\nTRANSACT\nTRANSACTION\nTRANSACTIONS\nTRANSATLANTIC\nTRANSCEIVE\nTRANSCEIVER\nTRANSCEIVERS\nTRANSCEND\nTRANSCENDED\nTRANSCENDENT\nTRANSCENDING\nTRANSCENDS\nTRANSCONTINENTAL\nTRANSCRIBE\nTRANSCRIBED\nTRANSCRIBER\nTRANSCRIBERS\nTRANSCRIBES\nTRANSCRIBING\nTRANSCRIPT\nTRANSCRIPTION\nTRANSCRIPTIONS\nTRANSCRIPTS\nTRANSFER\nTRANSFERABILITY\nTRANSFERABLE\nTRANSFERAL\nTRANSFERALS\nTRANSFERENCE\nTRANSFERRED\nTRANSFERRER\nTRANSFERRERS\nTRANSFERRING\nTRANSFERS\nTRANSFINITE\nTRANSFORM\nTRANSFORMABLE\nTRANSFORMATION\nTRANSFORMATIONAL\nTRANSFORMATIONS\nTRANSFORMED\nTRANSFORMER\nTRANSFORMERS\nTRANSFORMING\nTRANSFORMS\nTRANSGRESS\nTRANSGRESSED\nTRANSGRESSION\nTRANSGRESSIONS\nTRANSIENCE\nTRANSIENCY\nTRANSIENT\nTRANSIENTLY\nTRANSIENTS\nTRANSISTOR\nTRANSISTORIZE\nTRANSISTORIZED\nTRANSISTORIZING\nTRANSISTORS\nTRANSIT\nTRANSITE\nTRANSITION\nTRANSITIONAL\nTRANSITIONED\nTRANSITIONS\nTRANSITIVE\nTRANSITIVELY\nTRANSITIVENESS\nTRANSITIVITY\nTRANSITORY\nTRANSLATABILITY\nTRANSLATABLE\nTRANSLATE\nTRANSLATED\nTRANSLATES\nTRANSLATING\nTRANSLATION\nTRANSLATIONAL\nTRANSLATIONS\nTRANSLATOR\nTRANSLATORS\nTRANSLUCENT\nTRANSMISSION\nTRANSMISSIONS\nTRANSMIT\nTRANSMITS\nTRANSMITTAL\nTRANSMITTED\nTRANSMITTER\nTRANSMITTERS\nTRANSMITTING\nTRANSMOGRIFICATION\nTRANSMOGRIFY\nTRANSPACIFIC\nTRANSPARENCIES\nTRANSPARENCY\nTRANSPARENT\nTRANSPARENTLY\nTRANSPIRE\nTRANSPIRED\nTRANSPIRES\nTRANSPIRING\nTRANSPLANT\nTRANSPLANTED\nTRANSPLANTING\nTRANSPLANTS\nTRANSPONDER\nTRANSPONDERS\nTRANSPORT\nTRANSPORTABILITY\nTRANSPORTATION\nTRANSPORTED\nTRANSPORTER\nTRANSPORTERS\nTRANSPORTING\nTRANSPORTS\nTRANSPOSE\nTRANSPOSED\nTRANSPOSES\nTRANSPOSING\nTRANSPOSITION\nTRANSPUTER\nTRANSVAAL\nTRANSYLVANIA\nTRAP\nTRAPEZOID\nTRAPEZOIDAL\nTRAPEZOIDS\nTRAPPED\nTRAPPER\nTRAPPERS\nTRAPPING\nTRAPPINGS\nTRAPS\nTRASH\nTRASTEVERE\nTRAUMA\nTRAUMATIC\nTRAVAIL\nTRAVEL\nTRAVELED\nTRAVELER\nTRAVELERS\nTRAVELING\nTRAVELINGS\nTRAVELS\nTRAVERSAL\nTRAVERSALS\nTRAVERSE\nTRAVERSED\nTRAVERSES\nTRAVERSING\nTRAVESTIES\nTRAVESTY\nTRAVIS\nTRAY\nTRAYS\nTREACHERIES\nTREACHEROUS\nTREACHEROUSLY\nTREACHERY\nTREAD\nTREADING\nTREADS\nTREADWELL\nTREASON\nTREASURE\nTREASURED\nTREASURER\nTREASURES\nTREASURIES\nTREASURING\nTREASURY\nTREAT\nTREATED\nTREATIES\nTREATING\nTREATISE\nTREATISES\nTREATMENT\nTREATMENTS\nTREATS\nTREATY\nTREBLE\nTREE\nTREES\nTREETOP\nTREETOPS\nTREK\nTREKS\nTREMBLE\nTREMBLED\nTREMBLES\nTREMBLING\nTREMENDOUS\nTREMENDOUSLY\nTREMOR\nTREMORS\nTRENCH\nTRENCHER\nTRENCHES\nTREND\nTRENDING\nTRENDS\nTRENTON\nTRESPASS\nTRESPASSED\nTRESPASSER\nTRESPASSERS\nTRESPASSES\nTRESS\nTRESSES\nTREVELYAN\nTRIAL\nTRIALS\nTRIANGLE\nTRIANGLES\nTRIANGULAR\nTRIANGULARLY\nTRIANGULUM\nTRIANON\nTRIASSIC\nTRIBAL\nTRIBE\nTRIBES\nTRIBUNAL\nTRIBUNALS\nTRIBUNE\nTRIBUNES\nTRIBUTARY\nTRIBUTE\nTRIBUTES\nTRICERATOPS\nTRICHINELLA\nTRICHOTOMY\nTRICK\nTRICKED\nTRICKIER\nTRICKIEST\nTRICKINESS\nTRICKING\nTRICKLE\nTRICKLED\nTRICKLES\nTRICKLING\nTRICKS\nTRICKY\nTRIED\nTRIER\nTRIERS\nTRIES\nTRIFLE\nTRIFLER\nTRIFLES\nTRIFLING\nTRIGGER\nTRIGGERED\nTRIGGERING\nTRIGGERS\nTRIGONOMETRIC\nTRIGONOMETRY\nTRIGRAM\nTRIGRAMS\nTRIHEDRAL\nTRILATERAL\nTRILL\nTRILLED\nTRILLION\nTRILLIONS\nTRILLIONTH\nTRIM\nTRIMBLE\nTRIMLY\nTRIMMED\nTRIMMER\nTRIMMEST\nTRIMMING\nTRIMMINGS\nTRIMNESS\nTRIMS\nTRINIDAD\nTRINKET\nTRINKETS\nTRIO\nTRIP\nTRIPLE\nTRIPLED\nTRIPLES\nTRIPLET\nTRIPLETS\nTRIPLETT\nTRIPLING\nTRIPOD\nTRIPS\nTRISTAN\nTRIUMPH\nTRIUMPHAL\nTRIUMPHANT\nTRIUMPHANTLY\nTRIUMPHED\nTRIUMPHING\nTRIUMPHS\nTRIVIA\nTRIVIAL\nTRIVIALITIES\nTRIVIALITY\nTRIVIALLY\nTROBRIAND\nTROD\nTROJAN\nTROLL\nTROLLEY\nTROLLEYS\nTROLLS\nTROOP\nTROOPER\nTROOPERS\nTROOPS\nTROPEZ\nTROPHIES\nTROPHY\nTROPIC\nTROPICAL\nTROPICS\nTROT\nTROTS\nTROTSKY\nTROUBLE\nTROUBLED\nTROUBLEMAKER\nTROUBLEMAKERS\nTROUBLES\nTROUBLESHOOT\nTROUBLESHOOTER\nTROUBLESHOOTERS\nTROUBLESHOOTING\nTROUBLESHOOTS\nTROUBLESOME\nTROUBLESOMELY\nTROUBLING\nTROUGH\nTROUSER\nTROUSERS\nTROUT\nTROUTMAN\nTROWEL\nTROWELS\nTROY\nTRUANT\nTRUANTS\nTRUCE\nTRUCK\nTRUCKED\nTRUCKEE\nTRUCKER\nTRUCKERS\nTRUCKING\nTRUCKS\nTRUDEAU\nTRUDGE\nTRUDGED\nTRUDY\nTRUE\nTRUED\nTRUER\nTRUES\nTRUEST\nTRUING\nTRUISM\nTRUISMS\nTRUJILLO\nTRUK\nTRULY\nTRUMAN\nTRUMBULL\nTRUMP\nTRUMPED\nTRUMPET\nTRUMPETER\nTRUMPS\nTRUNCATE\nTRUNCATED\nTRUNCATES\nTRUNCATING\nTRUNCATION\nTRUNCATIONS\nTRUNK\nTRUNKS\nTRUST\nTRUSTED\nTRUSTEE\nTRUSTEES\nTRUSTFUL\nTRUSTFULLY\nTRUSTFULNESS\nTRUSTING\nTRUSTINGLY\nTRUSTS\nTRUSTWORTHINESS\nTRUSTWORTHY\nTRUSTY\nTRUTH\nTRUTHFUL\nTRUTHFULLY\nTRUTHFULNESS\nTRUTHS\nTRY\nTRYING\nTSUNEMATSU\nTUB\nTUBE\nTUBER\nTUBERCULOSIS\nTUBERS\nTUBES\nTUBING\nTUBS\nTUCK\nTUCKED\nTUCKER\nTUCKING\nTUCKS\nTUCSON\nTUDOR\nTUESDAY\nTUESDAYS\nTUFT\nTUFTS\nTUG\nTUGS\nTUITION\nTULANE\nTULIP\nTULIPS\nTULSA\nTUMBLE\nTUMBLED\nTUMBLER\nTUMBLERS\nTUMBLES\nTUMBLING\nTUMOR\nTUMORS\nTUMULT\nTUMULTS\nTUMULTUOUS\nTUNABLE\nTUNE\nTUNED\nTUNER\nTUNERS\nTUNES\nTUNIC\nTUNICS\nTUNING\nTUNIS\nTUNISIA\nTUNISIAN\nTUNNEL\nTUNNELED\nTUNNELS\nTUPLE\nTUPLES\nTURBAN\nTURBANS\nTURBULENCE\nTURBULENT\nTURBULENTLY\nTURF\nTURGID\nTURGIDLY\nTURIN\nTURING\nTURKEY\nTURKEYS\nTURKISH\nTURKIZE\nTURKIZES\nTURMOIL\nTURMOILS\nTURN\nTURNABLE\nTURNAROUND\nTURNED\nTURNER\nTURNERS\nTURNING\nTURNINGS\nTURNIP\nTURNIPS\nTURNOVER\nTURNS\nTURPENTINE\nTURQUOISE\nTURRET\nTURRETS\nTURTLE\nTURTLENECK\nTURTLES\nTUSCALOOSA\nTUSCAN\nTUSCANIZE\nTUSCANIZES\nTUSCANY\nTUSCARORA\nTUSKEGEE\nTUTANKHAMEN\nTUTANKHAMON\nTUTANKHAMUN\nTUTENKHAMON\nTUTOR\nTUTORED\nTUTORIAL\nTUTORIALS\nTUTORING\nTUTORS\nTUTTLE\nTWAIN\nTWANG\nTWAS\nTWEED\nTWELFTH\nTWELVE\nTWELVES\nTWENTIES\nTWENTIETH\nTWENTY\nTWICE\nTWIG\nTWIGS\nTWILIGHT\nTWILIGHTS\nTWILL\nTWIN\nTWINE\nTWINED\nTWINER\nTWINKLE\nTWINKLED\nTWINKLER\nTWINKLES\nTWINKLING\nTWINS\nTWIRL\nTWIRLED\nTWIRLER\nTWIRLING\nTWIRLS\nTWIST\nTWISTED\nTWISTER\nTWISTERS\nTWISTING\nTWISTS\nTWITCH\nTWITCHED\nTWITCHING\nTWITTER\nTWITTERED\nTWITTERING\nTWO\nTWOFOLD\nTWOMBLY\nTWOS\nTYBURN\nTYING\nTYLER\nTYLERIZE\nTYLERIZES\nTYNDALL\nTYPE\nTYPED\nTYPEOUT\nTYPES\nTYPESETTER\nTYPEWRITER\nTYPEWRITERS\nTYPHOID\nTYPHON\nTYPICAL\nTYPICALLY\nTYPICALNESS\nTYPIFIED\nTYPIFIES\nTYPIFY\nTYPIFYING\nTYPING\nTYPIST\nTYPISTS\nTYPO\nTYPOGRAPHIC\nTYPOGRAPHICAL\nTYPOGRAPHICALLY\nTYPOGRAPHY\nTYRANNICAL\nTYRANNOSAURUS\nTYRANNY\nTYRANT\nTYRANTS\nTYSON\nTZELTAL\nUBIQUITOUS\nUBIQUITOUSLY\nUBIQUITY\nUDALL\nUGANDA\nUGH\nUGLIER\nUGLIEST\nUGLINESS\nUGLY\nUKRAINE\nUKRAINIAN\nUKRAINIANS\nULAN\nULCER\nULCERS\nULLMAN\nULSTER\nULTIMATE\nULTIMATELY\nULTRA\nULTRASONIC\nULTRIX\nULTRIX\nULYSSES\nUMBRAGE\nUMBRELLA\nUMBRELLAS\nUMPIRE\nUMPIRES\nUNABATED\nUNABBREVIATED\nUNABLE\nUNACCEPTABILITY\nUNACCEPTABLE\nUNACCEPTABLY\nUNACCOUNTABLE\nUNACCUSTOMED\nUNACHIEVABLE\nUNACKNOWLEDGED\nUNADULTERATED\nUNAESTHETICALLY\nUNAFFECTED\nUNAFFECTEDLY\nUNAFFECTEDNESS\nUNAIDED\nUNALIENABILITY\nUNALIENABLE\nUNALTERABLY\nUNALTERED\nUNAMBIGUOUS\nUNAMBIGUOUSLY\nUNAMBITIOUS\nUNANALYZABLE\nUNANIMITY\nUNANIMOUS\nUNANIMOUSLY\nUNANSWERABLE\nUNANSWERED\nUNANTICIPATED\nUNARMED\nUNARY\nUNASSAILABLE\nUNASSIGNED\nUNASSISTED\nUNATTAINABILITY\nUNATTAINABLE\nUNATTENDED\nUNATTRACTIVE\nUNATTRACTIVELY\nUNAUTHORIZED\nUNAVAILABILITY\nUNAVAILABLE\nUNAVOIDABLE\nUNAVOIDABLY\nUNAWARE\nUNAWARENESS\nUNAWARES\nUNBALANCED\nUNBEARABLE\nUNBECOMING\nUNBELIEVABLE\nUNBIASED\nUNBIND\nUNBLOCK\nUNBLOCKED\nUNBLOCKING\nUNBLOCKS\nUNBORN\nUNBOUND\nUNBOUNDED\nUNBREAKABLE\nUNBRIDLED\nUNBROKEN\nUNBUFFERED\nUNCANCELLED\nUNCANNY\nUNCAPITALIZED\nUNCAUGHT\nUNCERTAIN\nUNCERTAINLY\nUNCERTAINTIES\nUNCERTAINTY\nUNCHANGEABLE\nUNCHANGED\nUNCHANGING\nUNCLAIMED\nUNCLASSIFIED\nUNCLE\nUNCLEAN\nUNCLEANLY\nUNCLEANNESS\nUNCLEAR\nUNCLEARED\nUNCLES\nUNCLOSED\nUNCOMFORTABLE\nUNCOMFORTABLY\nUNCOMMITTED\nUNCOMMON\nUNCOMMONLY\nUNCOMPROMISING\nUNCOMPUTABLE\nUNCONCERNED\nUNCONCERNEDLY\nUNCONDITIONAL\nUNCONDITIONALLY\nUNCONNECTED\nUNCONSCIONABLE\nUNCONSCIOUS\nUNCONSCIOUSLY\nUNCONSCIOUSNESS\nUNCONSTITUTIONAL\nUNCONSTRAINED\nUNCONTROLLABILITY\nUNCONTROLLABLE\nUNCONTROLLABLY\nUNCONTROLLED\nUNCONVENTIONAL\nUNCONVENTIONALLY\nUNCONVINCED\nUNCONVINCING\nUNCOORDINATED\nUNCORRECTABLE\nUNCORRECTED\nUNCOUNTABLE\nUNCOUNTABLY\nUNCOUTH\nUNCOVER\nUNCOVERED\nUNCOVERING\nUNCOVERS\nUNDAMAGED\nUNDAUNTED\nUNDAUNTEDLY\nUNDECIDABLE\nUNDECIDED\nUNDECLARED\nUNDECOMPOSABLE\nUNDEFINABILITY\nUNDEFINED\nUNDELETED\nUNDENIABLE\nUNDENIABLY\nUNDER\nUNDERBRUSH\nUNDERDONE\nUNDERESTIMATE\nUNDERESTIMATED\nUNDERESTIMATES\nUNDERESTIMATING\nUNDERESTIMATION\nUNDERFLOW\nUNDERFLOWED\nUNDERFLOWING\nUNDERFLOWS\nUNDERFOOT\nUNDERGO\nUNDERGOES\nUNDERGOING\nUNDERGONE\nUNDERGRADUATE\nUNDERGRADUATES\nUNDERGROUND\nUNDERLIE\nUNDERLIES\nUNDERLINE\nUNDERLINED\nUNDERLINES\nUNDERLING\nUNDERLINGS\nUNDERLINING\nUNDERLININGS\nUNDERLOADED\nUNDERLYING\nUNDERMINE\nUNDERMINED\nUNDERMINES\nUNDERMINING\nUNDERNEATH\nUNDERPINNING\nUNDERPINNINGS\nUNDERPLAY\nUNDERPLAYED\nUNDERPLAYING\nUNDERPLAYS\nUNDERSCORE\nUNDERSCORED\nUNDERSCORES\nUNDERSTAND\nUNDERSTANDABILITY\nUNDERSTANDABLE\nUNDERSTANDABLY\nUNDERSTANDING\nUNDERSTANDINGLY\nUNDERSTANDINGS\nUNDERSTANDS\nUNDERSTATED\nUNDERSTOOD\nUNDERTAKE\nUNDERTAKEN\nUNDERTAKER\nUNDERTAKERS\nUNDERTAKES\nUNDERTAKING\nUNDERTAKINGS\nUNDERTOOK\nUNDERWATER\nUNDERWAY\nUNDERWEAR\nUNDERWENT\nUNDERWORLD\nUNDERWRITE\nUNDERWRITER\nUNDERWRITERS\nUNDERWRITES\nUNDERWRITING\nUNDESIRABILITY\nUNDESIRABLE\nUNDETECTABLE\nUNDETECTED\nUNDETERMINED\nUNDEVELOPED\nUNDID\nUNDIMINISHED\nUNDIRECTED\nUNDISCIPLINED\nUNDISCOVERED\nUNDISTURBED\nUNDIVIDED\nUNDO\nUNDOCUMENTED\nUNDOES\nUNDOING\nUNDOINGS\nUNDONE\nUNDOUBTEDLY\nUNDRESS\nUNDRESSED\nUNDRESSES\nUNDRESSING\nUNDUE\nUNDULY\nUNEASILY\nUNEASINESS\nUNEASY\nUNECONOMIC\nUNECONOMICAL\nUNEMBELLISHED\nUNEMPLOYED\nUNEMPLOYMENT\nUNENCRYPTED\nUNENDING\nUNENLIGHTENING\nUNEQUAL\nUNEQUALED\nUNEQUALLY\nUNEQUIVOCAL\nUNEQUIVOCALLY\nUNESCO\nUNESSENTIAL\nUNEVALUATED\nUNEVEN\nUNEVENLY\nUNEVENNESS\nUNEVENTFUL\nUNEXCUSED\nUNEXPANDED\nUNEXPECTED\nUNEXPECTEDLY\nUNEXPLAINED\nUNEXPLORED\nUNEXTENDED\nUNFAIR\nUNFAIRLY\nUNFAIRNESS\nUNFAITHFUL\nUNFAITHFULLY\nUNFAITHFULNESS\nUNFAMILIAR\nUNFAMILIARITY\nUNFAMILIARLY\nUNFAVORABLE\nUNFETTERED\nUNFINISHED\nUNFIT\nUNFITNESS\nUNFLAGGING\nUNFOLD\nUNFOLDED\nUNFOLDING\nUNFOLDS\nUNFORESEEN\nUNFORGEABLE\nUNFORGIVING\nUNFORMATTED\nUNFORTUNATE\nUNFORTUNATELY\nUNFORTUNATES\nUNFOUNDED\nUNFRIENDLINESS\nUNFRIENDLY\nUNFULFILLED\nUNGRAMMATICAL\nUNGRATEFUL\nUNGRATEFULLY\nUNGRATEFULNESS\nUNGROUNDED\nUNGUARDED\nUNGUIDED\nUNHAPPIER\nUNHAPPIEST\nUNHAPPILY\nUNHAPPINESS\nUNHAPPY\nUNHARMED\nUNHEALTHY\nUNHEARD\nUNHEEDED\nUNIBUS\nUNICORN\nUNICORNS\nUNICYCLE\nUNIDENTIFIED\nUNIDIRECTIONAL\nUNIDIRECTIONALITY\nUNIDIRECTIONALLY\nUNIFICATION\nUNIFICATIONS\nUNIFIED\nUNIFIER\nUNIFIERS\nUNIFIES\nUNIFORM\nUNIFORMED\nUNIFORMITY\nUNIFORMLY\nUNIFORMS\nUNIFY\nUNIFYING\nUNILLUMINATING\nUNIMAGINABLE\nUNIMPEDED\nUNIMPLEMENTED\nUNIMPORTANT\nUNINDENTED\nUNINITIALIZED\nUNINSULATED\nUNINTELLIGIBLE\nUNINTENDED\nUNINTENTIONAL\nUNINTENTIONALLY\nUNINTERESTING\nUNINTERESTINGLY\nUNINTERPRETED\nUNINTERRUPTED\nUNINTERRUPTEDLY\nUNION\nUNIONIZATION\nUNIONIZE\nUNIONIZED\nUNIONIZER\nUNIONIZERS\nUNIONIZES\nUNIONIZING\nUNIONS\nUNIPLUS\nUNIPROCESSOR\nUNIQUE\nUNIQUELY\nUNIQUENESS\nUNIROYAL\nUNISOFT\nUNISON\nUNIT\nUNITARIAN\nUNITARIANIZE\nUNITARIANIZES\nUNITARIANS\nUNITE\nUNITED\nUNITES\nUNITIES\nUNITING\nUNITS\nUNITY\nUNIVAC\nUNIVALVE\nUNIVALVES\nUNIVERSAL\nUNIVERSALITY\nUNIVERSALLY\nUNIVERSALS\nUNIVERSE\nUNIVERSES\nUNIVERSITIES\nUNIVERSITY\nUNIX\nUNIX\nUNJUST\nUNJUSTIFIABLE\nUNJUSTIFIED\nUNJUSTLY\nUNKIND\nUNKINDLY\nUNKINDNESS\nUNKNOWABLE\nUNKNOWING\nUNKNOWINGLY\nUNKNOWN\nUNKNOWNS\nUNLABELLED\nUNLAWFUL\nUNLAWFULLY\nUNLEASH\nUNLEASHED\nUNLEASHES\nUNLEASHING\nUNLESS\nUNLIKE\nUNLIKELY\nUNLIKENESS\nUNLIMITED\nUNLINK\nUNLINKED\nUNLINKING\nUNLINKS\nUNLOAD\nUNLOADED\nUNLOADING\nUNLOADS\nUNLOCK\nUNLOCKED\nUNLOCKING\nUNLOCKS\nUNLUCKY\nUNMANAGEABLE\nUNMANAGEABLY\nUNMANNED\nUNMARKED\nUNMARRIED\nUNMASK\nUNMASKED\nUNMATCHED\nUNMENTIONABLE\nUNMERCIFUL\nUNMERCIFULLY\nUNMISTAKABLE\nUNMISTAKABLY\nUNMODIFIED\nUNMOVED\nUNNAMED\nUNNATURAL\nUNNATURALLY\nUNNATURALNESS\nUNNECESSARILY\nUNNECESSARY\nUNNEEDED\nUNNERVE\nUNNERVED\nUNNERVES\nUNNERVING\nUNNOTICED\nUNOBSERVABLE\nUNOBSERVED\nUNOBTAINABLE\nUNOCCUPIED\nUNOFFICIAL\nUNOFFICIALLY\nUNOPENED\nUNORDERED\nUNPACK\nUNPACKED\nUNPACKING\nUNPACKS\nUNPAID\nUNPARALLELED\nUNPARSED\nUNPLANNED\nUNPLEASANT\nUNPLEASANTLY\nUNPLEASANTNESS\nUNPLUG\nUNPOPULAR\nUNPOPULARITY\nUNPRECEDENTED\nUNPREDICTABLE\nUNPREDICTABLY\nUNPRESCRIBED\nUNPRESERVED\nUNPRIMED\nUNPROFITABLE\nUNPROJECTED\nUNPROTECTED\nUNPROVABILITY\nUNPROVABLE\nUNPROVEN\nUNPUBLISHED\nUNQUALIFIED\nUNQUALIFIEDLY\nUNQUESTIONABLY\nUNQUESTIONED\nUNQUOTED\nUNRAVEL\nUNRAVELED\nUNRAVELING\nUNRAVELS\nUNREACHABLE\nUNREAL\nUNREALISTIC\nUNREALISTICALLY\nUNREASONABLE\nUNREASONABLENESS\nUNREASONABLY\nUNRECOGNIZABLE\nUNRECOGNIZED\nUNREGULATED\nUNRELATED\nUNRELIABILITY\nUNRELIABLE\nUNREPORTED\nUNREPRESENTABLE\nUNRESOLVED\nUNRESPONSIVE\nUNREST\nUNRESTRAINED\nUNRESTRICTED\nUNRESTRICTEDLY\nUNRESTRICTIVE\nUNROLL\nUNROLLED\nUNROLLING\nUNROLLS\nUNRULY\nUNSAFE\nUNSAFELY\nUNSANITARY\nUNSATISFACTORY\nUNSATISFIABILITY\nUNSATISFIABLE\nUNSATISFIED\nUNSATISFYING\nUNSCRUPULOUS\nUNSEEDED\nUNSEEN\nUNSELECTED\nUNSELFISH\nUNSELFISHLY\nUNSELFISHNESS\nUNSENT\nUNSETTLED\nUNSETTLING\nUNSHAKEN\nUNSHARED\nUNSIGNED\nUNSKILLED\nUNSLOTTED\nUNSOLVABLE\nUNSOLVED\nUNSOPHISTICATED\nUNSOUND\nUNSPEAKABLE\nUNSPECIFIED\nUNSTABLE\nUNSTEADINESS\nUNSTEADY\nUNSTRUCTURED\nUNSUCCESSFUL\nUNSUCCESSFULLY\nUNSUITABLE\nUNSUITED\nUNSUPPORTED\nUNSURE\nUNSURPRISING\nUNSURPRISINGLY\nUNSYNCHRONIZED\nUNTAGGED\nUNTAPPED\nUNTENABLE\nUNTERMINATED\nUNTESTED\nUNTHINKABLE\nUNTHINKING\nUNTIDINESS\nUNTIDY\nUNTIE\nUNTIED\nUNTIES\nUNTIL\nUNTIMELY\nUNTO\nUNTOLD\nUNTOUCHABLE\nUNTOUCHABLES\nUNTOUCHED\nUNTOWARD\nUNTRAINED\nUNTRANSLATED\nUNTREATED\nUNTRIED\nUNTRUE\nUNTRUTHFUL\nUNTRUTHFULNESS\nUNTYING\nUNUSABLE\nUNUSED\nUNUSUAL\nUNUSUALLY\nUNVARYING\nUNVEIL\nUNVEILED\nUNVEILING\nUNVEILS\nUNWANTED\nUNWELCOME\nUNWHOLESOME\nUNWIELDINESS\nUNWIELDY\nUNWILLING\nUNWILLINGLY\nUNWILLINGNESS\nUNWIND\nUNWINDER\nUNWINDERS\nUNWINDING\nUNWINDS\nUNWISE\nUNWISELY\nUNWISER\nUNWISEST\nUNWITTING\nUNWITTINGLY\nUNWORTHINESS\nUNWORTHY\nUNWOUND\nUNWRAP\nUNWRAPPED\nUNWRAPPING\nUNWRAPS\nUNWRITTEN\nUPBRAID\nUPCOMING\nUPDATE\nUPDATED\nUPDATER\nUPDATES\nUPDATING\nUPGRADE\nUPGRADED\nUPGRADES\nUPGRADING\nUPHELD\nUPHILL\nUPHOLD\nUPHOLDER\nUPHOLDERS\nUPHOLDING\nUPHOLDS\nUPHOLSTER\nUPHOLSTERED\nUPHOLSTERER\nUPHOLSTERING\nUPHOLSTERS\nUPKEEP\nUPLAND\nUPLANDS\nUPLIFT\nUPLINK\nUPLINKS\nUPLOAD\nUPON\nUPPER\nUPPERMOST\nUPRIGHT\nUPRIGHTLY\nUPRIGHTNESS\nUPRISING\nUPRISINGS\nUPROAR\nUPROOT\nUPROOTED\nUPROOTING\nUPROOTS\nUPSET\nUPSETS\nUPSHOT\nUPSHOTS\nUPSIDE\nUPSTAIRS\nUPSTREAM\nUPTON\nUPTURN\nUPTURNED\nUPTURNING\nUPTURNS\nUPWARD\nUPWARDS\nURANIA\nURANUS\nURBAN\nURBANA\nURCHIN\nURCHINS\nURDU\nURGE\nURGED\nURGENT\nURGENTLY\nURGES\nURGING\nURGINGS\nURI\nURINATE\nURINATED\nURINATES\nURINATING\nURINATION\nURINE\nURIS\nURN\nURNS\nURQUHART\nURSA\nURSULA\nURSULINE\nURUGUAY\nURUGUAYAN\nURUGUAYANS\nUSABILITY\nUSABLE\nUSABLY\nUSAGE\nUSAGES\nUSE\nUSED\nUSEFUL\nUSEFULLY\nUSEFULNESS\nUSELESS\nUSELESSLY\nUSELESSNESS\nUSENET\nUSENIX\nUSER\nUSERS\nUSES\nUSHER\nUSHERED\nUSHERING\nUSHERS\nUSING\nUSUAL\nUSUALLY\nUSURP\nUSURPED\nUSURPER\nUTAH\nUTENSIL\nUTENSILS\nUTICA\nUTILITIES\nUTILITY\nUTILIZATION\nUTILIZATIONS\nUTILIZE\nUTILIZED\nUTILIZES\nUTILIZING\nUTMOST\nUTOPIA\nUTOPIAN\nUTOPIANIZE\nUTOPIANIZES\nUTOPIANS\nUTRECHT\nUTTER\nUTTERANCE\nUTTERANCES\nUTTERED\nUTTERING\nUTTERLY\nUTTERMOST\nUTTERS\nUZI\nVACANCIES\nVACANCY\nVACANT\nVACANTLY\nVACATE\nVACATED\nVACATES\nVACATING\nVACATION\nVACATIONED\nVACATIONER\nVACATIONERS\nVACATIONING\nVACATIONS\nVACUO\nVACUOUS\nVACUOUSLY\nVACUUM\nVACUUMED\nVACUUMING\nVADUZ\nVAGABOND\nVAGABONDS\nVAGARIES\nVAGARY\nVAGINA\nVAGINAS\nVAGRANT\nVAGRANTLY\nVAGUE\nVAGUELY\nVAGUENESS\nVAGUER\nVAGUEST\nVAIL\nVAIN\nVAINLY\nVALE\nVALENCE\nVALENCES\nVALENTINE\nVALENTINES\nVALERIE\nVALERY\nVALES\nVALET\nVALETS\nVALHALLA\nVALIANT\nVALIANTLY\nVALID\nVALIDATE\nVALIDATED\nVALIDATES\nVALIDATING\nVALIDATION\nVALIDITY\nVALIDLY\nVALIDNESS\nVALKYRIE\nVALLETTA\nVALLEY\nVALLEYS\nVALOIS\nVALOR\nVALPARAISO\nVALUABLE\nVALUABLES\nVALUABLY\nVALUATION\nVALUATIONS\nVALUE\nVALUED\nVALUER\nVALUERS\nVALUES\nVALUING\nVALVE\nVALVES\nVAMPIRE\nVAN\nVANCE\nVANCEMENT\nVANCOUVER\nVANDALIZE\nVANDALIZED\nVANDALIZES\nVANDALIZING\nVANDENBERG\nVANDERBILT\nVANDERBURGH\nVANDERPOEL\nVANE\nVANES\nVANESSA\nVANGUARD\nVANILLA\nVANISH\nVANISHED\nVANISHER\nVANISHES\nVANISHING\nVANISHINGLY\nVANITIES\nVANITY\nVANQUISH\nVANQUISHED\nVANQUISHES\nVANQUISHING\nVANS\nVANTAGE\nVAPOR\nVAPORING\nVAPORS\nVARIABILITY\nVARIABLE\nVARIABLENESS\nVARIABLES\nVARIABLY\nVARIAN\nVARIANCE\nVARIANCES\nVARIANT\nVARIANTLY\nVARIANTS\nVARIATION\nVARIATIONS\nVARIED\nVARIES\nVARIETIES\nVARIETY\nVARIOUS\nVARIOUSLY\nVARITYPE\nVARITYPING\nVARNISH\nVARNISHES\nVARY\nVARYING\nVARYINGS\nVASE\nVASES\nVASQUEZ\nVASSAL\nVASSAR\nVAST\nVASTER\nVASTEST\nVASTLY\nVASTNESS\nVAT\nVATICAN\nVATICANIZATION\nVATICANIZATIONS\nVATICANIZE\nVATICANIZES\nVATS\nVAUDEVILLE\nVAUDOIS\nVAUGHAN\nVAUGHN\nVAULT\nVAULTED\nVAULTER\nVAULTING\nVAULTS\nVAUNT\nVAUNTED\nVAX\nVAXES\nVEAL\nVECTOR\nVECTORIZATION\nVECTORIZING\nVECTORS\nVEDA\nVEER\nVEERED\nVEERING\nVEERS\nVEGA\nVEGANISM\nVEGAS\nVEGETABLE\nVEGETABLES\nVEGETARIAN\nVEGETARIANS\nVEGETATE\nVEGETATED\nVEGETATES\nVEGETATING\nVEGETATION\nVEGETATIVE\nVEHEMENCE\nVEHEMENT\nVEHEMENTLY\nVEHICLE\nVEHICLES\nVEHICULAR\nVEIL\nVEILED\nVEILING\nVEILS\nVEIN\nVEINED\nVEINING\nVEINS\nVELA\nVELASQUEZ\nVELLA\nVELOCITIES\nVELOCITY\nVELVET\nVENDOR\nVENDORS\nVENERABLE\nVENERATION\nVENETIAN\nVENETO\nVENEZUELA\nVENEZUELAN\nVENGEANCE\nVENIAL\nVENICE\nVENISON\nVENN\nVENOM\nVENOMOUS\nVENOMOUSLY\nVENT\nVENTED\nVENTILATE\nVENTILATED\nVENTILATES\nVENTILATING\nVENTILATION\nVENTRICLE\nVENTRICLES\nVENTS\nVENTURA\nVENTURE\nVENTURED\nVENTURER\nVENTURERS\nVENTURES\nVENTURING\nVENTURINGS\nVENUS\nVENUSIAN\nVENUSIANS\nVERA\nVERACITY\nVERANDA\nVERANDAS\nVERB\nVERBAL\nVERBALIZE\nVERBALIZED\nVERBALIZES\nVERBALIZING\nVERBALLY\nVERBOSE\nVERBS\nVERDE\nVERDERER\nVERDI\nVERDICT\nVERDURE\nVERGE\nVERGER\nVERGES\nVERGIL\nVERIFIABILITY\nVERIFIABLE\nVERIFICATION\nVERIFICATIONS\nVERIFIED\nVERIFIER\nVERIFIERS\nVERIFIES\nVERIFY\nVERIFYING\nVERILY\nVERITABLE\nVERLAG\nVERMIN\nVERMONT\nVERN\nVERNA\nVERNACULAR\nVERNE\nVERNON\nVERONA\nVERONICA\nVERSA\nVERSAILLES\nVERSATEC\nVERSATILE\nVERSATILITY\nVERSE\nVERSED\nVERSES\nVERSING\nVERSION\nVERSIONS\nVERSUS\nVERTEBRATE\nVERTEBRATES\nVERTEX\nVERTICAL\nVERTICALLY\nVERTICALNESS\nVERTICES\nVERY\nVESSEL\nVESSELS\nVEST\nVESTED\nVESTIGE\nVESTIGES\nVESTIGIAL\nVESTS\nVESUVIUS\nVETERAN\nVETERANS\nVETERINARIAN\nVETERINARIANS\nVETERINARY\nVETO\nVETOED\nVETOER\nVETOES\nVEX\nVEXATION\nVEXED\nVEXES\nVEXING\nVIA\nVIABILITY\nVIABLE\nVIABLY\nVIAL\nVIALS\nVIBRATE\nVIBRATED\nVIBRATING\nVIBRATION\nVIBRATIONS\nVIBRATOR\nVIC\nVICE\nVICEROY\nVICES\nVICHY\nVICINITY\nVICIOUS\nVICIOUSLY\nVICIOUSNESS\nVICISSITUDE\nVICISSITUDES\nVICKERS\nVICKSBURG\nVICKY\nVICTIM\nVICTIMIZE\nVICTIMIZED\nVICTIMIZER\nVICTIMIZERS\nVICTIMIZES\nVICTIMIZING\nVICTIMS\nVICTOR\nVICTORIA\nVICTORIAN\nVICTORIANIZE\nVICTORIANIZES\nVICTORIANS\nVICTORIES\nVICTORIOUS\nVICTORIOUSLY\nVICTORS\nVICTORY\nVICTROLA\nVICTUAL\nVICTUALER\nVICTUALS\nVIDA\nVIDAL\nVIDEO\nVIDEOTAPE\nVIDEOTAPES\nVIDEOTEX\nVIE\nVIED\nVIENNA\nVIENNESE\nVIENTIANE\nVIER\nVIES\nVIET\nVIETNAM\nVIETNAMESE\nVIEW\nVIEWABLE\nVIEWED\nVIEWER\nVIEWERS\nVIEWING\nVIEWPOINT\nVIEWPOINTS\nVIEWS\nVIGILANCE\nVIGILANT\nVIGILANTE\nVIGILANTES\nVIGILANTLY\nVIGNETTE\nVIGNETTES\nVIGOR\nVIGOROUS\nVIGOROUSLY\nVIKING\nVIKINGS\nVIKRAM\nVILE\nVILELY\nVILENESS\nVILIFICATION\nVILIFICATIONS\nVILIFIED\nVILIFIES\nVILIFY\nVILIFYING\nVILLA\nVILLAGE\nVILLAGER\nVILLAGERS\nVILLAGES\nVILLAIN\nVILLAINOUS\nVILLAINOUSLY\nVILLAINOUSNESS\nVILLAINS\nVILLAINY\nVILLAS\nVINCE\nVINCENT\nVINCI\nVINDICATE\nVINDICATED\nVINDICATION\nVINDICTIVE\nVINDICTIVELY\nVINDICTIVENESS\nVINE\nVINEGAR\nVINES\nVINEYARD\nVINEYARDS\nVINSON\nVINTAGE\nVIOLATE\nVIOLATED\nVIOLATES\nVIOLATING\nVIOLATION\nVIOLATIONS\nVIOLATOR\nVIOLATORS\nVIOLENCE\nVIOLENT\nVIOLENTLY\nVIOLET\nVIOLETS\nVIOLIN\nVIOLINIST\nVIOLINISTS\nVIOLINS\nVIPER\nVIPERS\nVIRGIL\nVIRGIN\nVIRGINIA\nVIRGINIAN\nVIRGINIANS\nVIRGINITY\nVIRGINS\nVIRGO\nVIRTUAL\nVIRTUALLY\nVIRTUE\nVIRTUES\nVIRTUOSO\nVIRTUOSOS\nVIRTUOUS\nVIRTUOUSLY\nVIRULENT\nVIRUS\nVIRUSES\nVISA\nVISAGE\nVISAS\nVISCOUNT\nVISCOUNTS\nVISCOUS\nVISHNU\nVISIBILITY\nVISIBLE\nVISIBLY\nVISIGOTH\nVISIGOTHS\nVISION\nVISIONARY\nVISIONS\nVISIT\nVISITATION\nVISITATIONS\nVISITED\nVISITING\nVISITOR\nVISITORS\nVISITS\nVISOR\nVISORS\nVISTA\nVISTAS\nVISUAL\nVISUALIZE\nVISUALIZED\nVISUALIZER\nVISUALIZES\nVISUALIZING\nVISUALLY\nVITA\nVITAE\nVITAL\nVITALITY\nVITALLY\nVITALS\nVITO\nVITUS\nVIVALDI\nVIVIAN\nVIVID\nVIVIDLY\nVIVIDNESS\nVIZIER\nVLADIMIR\nVLADIVOSTOK\nVOCABULARIES\nVOCABULARY\nVOCAL\nVOCALLY\nVOCALS\nVOCATION\nVOCATIONAL\nVOCATIONALLY\nVOCATIONS\nVOGEL\nVOGUE\nVOICE\nVOICED\nVOICER\nVOICERS\nVOICES\nVOICING\nVOID\nVOIDED\nVOIDER\nVOIDING\nVOIDS\nVOLATILE\nVOLATILITIES\nVOLATILITY\nVOLCANIC\nVOLCANO\nVOLCANOS\nVOLITION\nVOLKSWAGEN\nVOLKSWAGENS\nVOLLEY\nVOLLEYBALL\nVOLLEYBALLS\nVOLSTEAD\nVOLT\nVOLTA\nVOLTAGE\nVOLTAGES\nVOLTAIRE\nVOLTERRA\nVOLTS\nVOLUME\nVOLUMES\nVOLUNTARILY\nVOLUNTARY\nVOLUNTEER\nVOLUNTEERED\nVOLUNTEERING\nVOLUNTEERS\nVOLVO\nVOMIT\nVOMITED\nVOMITING\nVOMITS\nVORTEX\nVOSS\nVOTE\nVOTED\nVOTER\nVOTERS\nVOTES\nVOTING\nVOTIVE\nVOUCH\nVOUCHER\nVOUCHERS\nVOUCHES\nVOUCHING\nVOUGHT\nVOW\nVOWED\nVOWEL\nVOWELS\nVOWER\nVOWING\nVOWS\nVOYAGE\nVOYAGED\nVOYAGER\nVOYAGERS\nVOYAGES\nVOYAGING\nVOYAGINGS\nVREELAND\nVULCAN\nVULCANISM\nVULGAR\nVULGARLY\nVULNERABILITIES\nVULNERABILITY\nVULNERABLE\nVULTURE\nVULTURES\nWAALS\nWABASH\nWACKE\nWACKY\nWACO\nWADE\nWADED\nWADER\nWADES\nWADING\nWADSWORTH\nWAFER\nWAFERS\nWAFFLE\nWAFFLES\nWAFT\nWAG\nWAGE\nWAGED\nWAGER\nWAGERS\nWAGES\nWAGING\nWAGNER\nWAGNERIAN\nWAGNERIZE\nWAGNERIZES\nWAGON\nWAGONER\nWAGONS\nWAGS\nWAHL\nWAIL\nWAILED\nWAILING\nWAILS\nWAINWRIGHT\nWAIST\nWAISTCOAT\nWAISTCOATS\nWAISTS\nWAIT\nWAITE\nWAITED\nWAITER\nWAITERS\nWAITING\nWAITRESS\nWAITRESSES\nWAITS\nWAIVE\nWAIVED\nWAIVER\nWAIVERABLE\nWAIVES\nWAIVING\nWAKE\nWAKED\nWAKEFIELD\nWAKEN\nWAKENED\nWAKENING\nWAKES\nWAKEUP\nWAKING\nWALBRIDGE\nWALCOTT\nWALDEN\nWALDENSIAN\nWALDO\nWALDORF\nWALDRON\nWALES\nWALFORD\nWALGREEN\nWALK\nWALKED\nWALKER\nWALKERS\nWALKING\nWALKS\nWALL\nWALLACE\nWALLED\nWALLENSTEIN\nWALLER\nWALLET\nWALLETS\nWALLING\nWALLIS\nWALLOW\nWALLOWED\nWALLOWING\nWALLOWS\nWALLS\nWALNUT\nWALNUTS\nWALPOLE\nWALRUS\nWALRUSES\nWALSH\nWALT\nWALTER\nWALTERS\nWALTHAM\nWALTON\nWALTZ\nWALTZED\nWALTZES\nWALTZING\nWALWORTH\nWAN\nWAND\nWANDER\nWANDERED\nWANDERER\nWANDERERS\nWANDERING\nWANDERINGS\nWANDERS\nWANE\nWANED\nWANES\nWANG\nWANING\nWANLY\nWANSEE\nWANSLEY\nWANT\nWANTED\nWANTING\nWANTON\nWANTONLY\nWANTONNESS\nWANTS\nWAPATO\nWAPPINGER\nWAR\nWARBLE\nWARBLED\nWARBLER\nWARBLES\nWARBLING\nWARBURTON\nWARD\nWARDEN\nWARDENS\nWARDER\nWARDROBE\nWARDROBES\nWARDS\nWARE\nWAREHOUSE\nWAREHOUSES\nWAREHOUSING\nWARES\nWARFARE\nWARFIELD\nWARILY\nWARINESS\nWARING\nWARLIKE\nWARM\nWARMED\nWARMER\nWARMERS\nWARMEST\nWARMING\nWARMLY\nWARMS\nWARMTH\nWARN\nWARNED\nWARNER\nWARNING\nWARNINGLY\nWARNINGS\nWARNOCK\nWARNS\nWARP\nWARPED\nWARPING\nWARPS\nWARRANT\nWARRANTED\nWARRANTIES\nWARRANTING\nWARRANTS\nWARRANTY\nWARRED\nWARRING\nWARRIOR\nWARRIORS\nWARS\nWARSAW\nWARSHIP\nWARSHIPS\nWART\nWARTIME\nWARTS\nWARWICK\nWARY\nWAS\nWASH\nWASHBURN\nWASHED\nWASHER\nWASHERS\nWASHES\nWASHING\nWASHINGS\nWASHINGTON\nWASHOE\nWASP\nWASPS\nWASSERMAN\nWASTE\nWASTED\nWASTEFUL\nWASTEFULLY\nWASTEFULNESS\nWASTES\nWASTING\nWATANABE\nWATCH\nWATCHED\nWATCHER\nWATCHERS\nWATCHES\nWATCHFUL\nWATCHFULLY\nWATCHFULNESS\nWATCHING\nWATCHINGS\nWATCHMAN\nWATCHWORD\nWATCHWORDS\nWATER\nWATERBURY\nWATERED\nWATERFALL\nWATERFALLS\nWATERGATE\nWATERHOUSE\nWATERING\nWATERINGS\nWATERLOO\nWATERMAN\nWATERPROOF\nWATERPROOFING\nWATERS\nWATERTOWN\nWATERWAY\nWATERWAYS\nWATERY\nWATKINS\nWATSON\nWATTENBERG\nWATTERSON\nWATTS\nWAUKESHA\nWAUNONA\nWAUPACA\nWAUPUN\nWAUSAU\nWAUWATOSA\nWAVE\nWAVED\nWAVEFORM\nWAVEFORMS\nWAVEFRONT\nWAVEFRONTS\nWAVEGUIDES\nWAVELAND\nWAVELENGTH\nWAVELENGTHS\nWAVER\nWAVERS\nWAVES\nWAVING\nWAX\nWAXED\nWAXEN\nWAXER\nWAXERS\nWAXES\nWAXING\nWAXY\nWAY\nWAYNE\nWAYNESBORO\nWAYS\nWAYSIDE\nWAYWARD\nWEAK\nWEAKEN\nWEAKENED\nWEAKENING\nWEAKENS\nWEAKER\nWEAKEST\nWEAKLY\nWEAKNESS\nWEAKNESSES\nWEALTH\nWEALTHIEST\nWEALTHS\nWEALTHY\nWEAN\nWEANED\nWEANING\nWEAPON\nWEAPONS\nWEAR\nWEARABLE\nWEARER\nWEARIED\nWEARIER\nWEARIEST\nWEARILY\nWEARINESS\nWEARING\nWEARISOME\nWEARISOMELY\nWEARS\nWEARY\nWEARYING\nWEASEL\nWEASELS\nWEATHER\nWEATHERCOCK\nWEATHERCOCKS\nWEATHERED\nWEATHERFORD\nWEATHERING\nWEATHERS\nWEAVE\nWEAVER\nWEAVES\nWEAVING\nWEB\nWEBB\nWEBBER\nWEBS\nWEBSTER\nWEBSTERVILLE\nWEDDED\nWEDDING\nWEDDINGS\nWEDGE\nWEDGED\nWEDGES\nWEDGING\nWEDLOCK\nWEDNESDAY\nWEDNESDAYS\nWEDS\nWEE\nWEED\nWEEDS\nWEEK\nWEEKEND\nWEEKENDS\nWEEKLY\nWEEKS\nWEEP\nWEEPER\nWEEPING\nWEEPS\nWEHR\nWEI\nWEIBULL\nWEIDER\nWEIDMAN\nWEIERSTRASS\nWEIGH\nWEIGHED\nWEIGHING\nWEIGHINGS\nWEIGHS\nWEIGHT\nWEIGHTED\nWEIGHTING\nWEIGHTS\nWEIGHTY\nWEINBERG\nWEINER\nWEINSTEIN\nWEIRD\nWEIRDLY\nWEISENHEIMER\nWEISS\nWEISSMAN\nWEISSMULLER\nWELCH\nWELCHER\nWELCHES\nWELCOME\nWELCOMED\nWELCOMES\nWELCOMING\nWELD\nWELDED\nWELDER\nWELDING\nWELDON\nWELDS\nWELDWOOD\nWELFARE\nWELL\nWELLED\nWELLER\nWELLES\nWELLESLEY\nWELLING\nWELLINGTON\nWELLMAN\nWELLS\nWELLSVILLE\nWELMERS\nWELSH\nWELTON\nWENCH\nWENCHES\nWENDELL\nWENDY\nWENT\nWENTWORTH\nWEPT\nWERE\nWERNER\nWERTHER\nWESLEY\nWESLEYAN\nWESSON\nWEST\nWESTBOUND\nWESTBROOK\nWESTCHESTER\nWESTERN\nWESTERNER\nWESTERNERS\nWESTFIELD\nWESTHAMPTON\nWESTINGHOUSE\nWESTMINSTER\nWESTMORE\nWESTON\nWESTPHALIA\nWESTPORT\nWESTWARD\nWESTWARDS\nWESTWOOD\nWET\nWETLY\nWETNESS\nWETS\nWETTED\nWETTER\nWETTEST\nWETTING\nWEYERHAUSER\nWHACK\nWHACKED\nWHACKING\nWHACKS\nWHALE\nWHALEN\nWHALER\nWHALES\nWHALING\nWHARF\nWHARTON\nWHARVES\nWHAT\nWHATEVER\nWHATLEY\nWHATSOEVER\nWHEAT\nWHEATEN\nWHEATLAND\nWHEATON\nWHEATSTONE\nWHEEL\nWHEELED\nWHEELER\nWHEELERS\nWHEELING\nWHEELINGS\nWHEELOCK\nWHEELS\nWHELAN\nWHELLER\nWHELP\nWHEN\nWHENCE\nWHENEVER\nWHERE\nWHEREABOUTS\nWHEREAS\nWHEREBY\nWHEREIN\nWHEREUPON\nWHEREVER\nWHETHER\nWHICH\nWHICHEVER\nWHILE\nWHIM\nWHIMPER\nWHIMPERED\nWHIMPERING\nWHIMPERS\nWHIMS\nWHIMSICAL\nWHIMSICALLY\nWHIMSIES\nWHIMSY\nWHINE\nWHINED\nWHINES\nWHINING\nWHIP\nWHIPPANY\nWHIPPED\nWHIPPER\nWHIPPERS\nWHIPPING\nWHIPPINGS\nWHIPPLE\nWHIPS\nWHIRL\nWHIRLED\nWHIRLING\nWHIRLPOOL\nWHIRLPOOLS\nWHIRLS\nWHIRLWIND\nWHIRR\nWHIRRING\nWHISK\nWHISKED\nWHISKER\nWHISKERS\nWHISKEY\nWHISKING\nWHISKS\nWHISPER\nWHISPERED\nWHISPERING\nWHISPERINGS\nWHISPERS\nWHISTLE\nWHISTLED\nWHISTLER\nWHISTLERS\nWHISTLES\nWHISTLING\nWHIT\nWHITAKER\nWHITCOMB\nWHITE\nWHITEHALL\nWHITEHORSE\nWHITELEAF\nWHITELEY\nWHITELY\nWHITEN\nWHITENED\nWHITENER\nWHITENERS\nWHITENESS\nWHITENING\nWHITENS\nWHITER\nWHITES\nWHITESPACE\nWHITEST\nWHITEWASH\nWHITEWASHED\nWHITEWATER\nWHITFIELD\nWHITING\nWHITLOCK\nWHITMAN\nWHITMANIZE\nWHITMANIZES\nWHITNEY\nWHITTAKER\nWHITTIER\nWHITTLE\nWHITTLED\nWHITTLES\nWHITTLING\nWHIZ\nWHIZZED\nWHIZZES\nWHIZZING\nWHO\nWHOEVER\nWHOLE\nWHOLEHEARTED\nWHOLEHEARTEDLY\nWHOLENESS\nWHOLES\nWHOLESALE\nWHOLESALER\nWHOLESALERS\nWHOLESOME\nWHOLESOMENESS\nWHOLLY\nWHOM\nWHOMEVER\nWHOOP\nWHOOPED\nWHOOPING\nWHOOPS\nWHORE\nWHORES\nWHORL\nWHORLS\nWHOSE\nWHY\nWICHITA\nWICK\nWICKED\nWICKEDLY\nWICKEDNESS\nWICKER\nWICKS\nWIDE\nWIDEBAND\nWIDELY\nWIDEN\nWIDENED\nWIDENER\nWIDENING\nWIDENS\nWIDER\nWIDESPREAD\nWIDEST\nWIDGET\nWIDOW\nWIDOWED\nWIDOWER\nWIDOWERS\nWIDOWS\nWIDTH\nWIDTHS\nWIELAND\nWIELD\nWIELDED\nWIELDER\nWIELDING\nWIELDS\nWIER\nWIFE\nWIFELY\nWIG\nWIGGINS\nWIGHTMAN\nWIGS\nWIGWAM\nWILBUR\nWILCOX\nWILD\nWILDCAT\nWILDCATS\nWILDER\nWILDERNESS\nWILDEST\nWILDLY\nWILDNESS\nWILE\nWILES\nWILEY\nWILFRED\nWILHELM\nWILHELMINA\nWILINESS\nWILKES\nWILKIE\nWILKINS\nWILKINSON\nWILL\nWILLA\nWILLAMETTE\nWILLARD\nWILLCOX\nWILLED\nWILLEM\nWILLFUL\nWILLFULLY\nWILLIAM\nWILLIAMS\nWILLIAMSBURG\nWILLIAMSON\nWILLIE\nWILLIED\nWILLIES\nWILLING\nWILLINGLY\nWILLINGNESS\nWILLIS\nWILLISSON\nWILLOUGHBY\nWILLOW\nWILLOWS\nWILLS\nWILLY\nWILMA\nWILMETTE\nWILMINGTON\nWILSHIRE\nWILSON\nWILSONIAN\nWILT\nWILTED\nWILTING\nWILTS\nWILTSHIRE\nWILY\nWIN\nWINCE\nWINCED\nWINCES\nWINCHELL\nWINCHESTER\nWINCING\nWIND\nWINDED\nWINDER\nWINDERS\nWINDING\nWINDMILL\nWINDMILLS\nWINDOW\nWINDOWS\nWINDS\nWINDSOR\nWINDY\nWINE\nWINED\nWINEHEAD\nWINER\nWINERS\nWINES\nWINFIELD\nWING\nWINGED\nWINGING\nWINGS\nWINIFRED\nWINING\nWINK\nWINKED\nWINKER\nWINKING\nWINKS\nWINNEBAGO\nWINNER\nWINNERS\nWINNETKA\nWINNIE\nWINNING\nWINNINGLY\nWINNINGS\nWINNIPEG\nWINNIPESAUKEE\nWINOGRAD\nWINOOSKI\nWINS\nWINSBOROUGH\nWINSETT\nWINSLOW\nWINSTON\nWINTER\nWINTERED\nWINTERING\nWINTERS\nWINTHROP\nWINTRY\nWIPE\nWIPED\nWIPER\nWIPERS\nWIPES\nWIPING\nWIRE\nWIRED\nWIRELESS\nWIRES\nWIRETAP\nWIRETAPPERS\nWIRETAPPING\nWIRETAPS\nWIRINESS\nWIRING\nWIRY\nWISCONSIN\nWISDOM\nWISDOMS\nWISE\nWISED\nWISELY\nWISENHEIMER\nWISER\nWISEST\nWISH\nWISHED\nWISHER\nWISHERS\nWISHES\nWISHFUL\nWISHING\nWISP\nWISPS\nWISTFUL\nWISTFULLY\nWISTFULNESS\nWIT\nWITCH\nWITCHCRAFT\nWITCHES\nWITCHING\nWITH\nWITHAL\nWITHDRAW\nWITHDRAWAL\nWITHDRAWALS\nWITHDRAWING\nWITHDRAWN\nWITHDRAWS\nWITHDREW\nWITHER\nWITHERS\nWITHERSPOON\nWITHHELD\nWITHHOLD\nWITHHOLDER\nWITHHOLDERS\nWITHHOLDING\nWITHHOLDINGS\nWITHHOLDS\nWITHIN\nWITHOUT\nWITHSTAND\nWITHSTANDING\nWITHSTANDS\nWITHSTOOD\nWITNESS\nWITNESSED\nWITNESSES\nWITNESSING\nWITS\nWITT\nWITTGENSTEIN\nWITTY\nWIVES\nWIZARD\nWIZARDS\nWOE\nWOEFUL\nWOEFULLY\nWOKE\nWOLCOTT\nWOLF\nWOLFE\nWOLFF\nWOLFGANG\nWOLVERTON\nWOLVES\nWOMAN\nWOMANHOOD\nWOMANLY\nWOMB\nWOMBS\nWOMEN\nWON\nWONDER\nWONDERED\nWONDERFUL\nWONDERFULLY\nWONDERFULNESS\nWONDERING\nWONDERINGLY\nWONDERMENT\nWONDERS\nWONDROUS\nWONDROUSLY\nWONG\nWONT\nWONTED\nWOO\nWOOD\nWOODARD\nWOODBERRY\nWOODBURY\nWOODCHUCK\nWOODCHUCKS\nWOODCOCK\nWOODCOCKS\nWOODED\nWOODEN\nWOODENLY\nWOODENNESS\nWOODLAND\nWOODLAWN\nWOODMAN\nWOODPECKER\nWOODPECKERS\nWOODROW\nWOODS\nWOODSTOCK\nWOODWARD\nWOODWARDS\nWOODWORK\nWOODWORKING\nWOODY\nWOOED\nWOOER\nWOOF\nWOOFED\nWOOFER\nWOOFERS\nWOOFING\nWOOFS\nWOOING\nWOOL\nWOOLEN\nWOOLLY\nWOOLS\nWOOLWORTH\nWOONSOCKET\nWOOS\nWOOSTER\nWORCESTER\nWORCESTERSHIRE\nWORD\nWORDED\nWORDILY\nWORDINESS\nWORDING\nWORDS\nWORDSWORTH\nWORDY\nWORE\nWORK\nWORKABLE\nWORKABLY\nWORKBENCH\nWORKBENCHES\nWORKBOOK\nWORKBOOKS\nWORKED\nWORKER\nWORKERS\nWORKHORSE\nWORKHORSES\nWORKING\nWORKINGMAN\nWORKINGS\nWORKLOAD\nWORKMAN\nWORKMANSHIP\nWORKMEN\nWORKS\nWORKSHOP\nWORKSHOPS\nWORKSPACE\nWORKSTATION\nWORKSTATIONS\nWORLD\nWORLDLINESS\nWORLDLY\nWORLDS\nWORLDWIDE\nWORM\nWORMED\nWORMING\nWORMS\nWORN\nWORRIED\nWORRIER\nWORRIERS\nWORRIES\nWORRISOME\nWORRY\nWORRYING\nWORRYINGLY\nWORSE\nWORSHIP\nWORSHIPED\nWORSHIPER\nWORSHIPFUL\nWORSHIPING\nWORSHIPS\nWORST\nWORSTED\nWORTH\nWORTHIEST\nWORTHINESS\nWORTHINGTON\nWORTHLESS\nWORTHLESSNESS\nWORTHS\nWORTHWHILE\nWORTHWHILENESS\nWORTHY\nWOTAN\nWOULD\nWOUND\nWOUNDED\nWOUNDING\nWOUNDS\nWOVE\nWOVEN\nWRANGLE\nWRANGLED\nWRANGLER\nWRAP\nWRAPAROUND\nWRAPPED\nWRAPPER\nWRAPPERS\nWRAPPING\nWRAPPINGS\nWRAPS\nWRATH\nWREAK\nWREAKS\nWREATH\nWREATHED\nWREATHES\nWRECK\nWRECKAGE\nWRECKED\nWRECKER\nWRECKERS\nWRECKING\nWRECKS\nWREN\nWRENCH\nWRENCHED\nWRENCHES\nWRENCHING\nWRENS\nWREST\nWRESTLE\nWRESTLER\nWRESTLES\nWRESTLING\nWRESTLINGS\nWRETCH\nWRETCHED\nWRETCHEDNESS\nWRETCHES\nWRIGGLE\nWRIGGLED\nWRIGGLER\nWRIGGLES\nWRIGGLING\nWRIGLEY\nWRING\nWRINGER\nWRINGS\nWRINKLE\nWRINKLED\nWRINKLES\nWRIST\nWRISTS\nWRISTWATCH\nWRISTWATCHES\nWRIT\nWRITABLE\nWRITE\nWRITER\nWRITERS\nWRITES\nWRITHE\nWRITHED\nWRITHES\nWRITHING\nWRITING\nWRITINGS\nWRITS\nWRITTEN\nWRONG\nWRONGED\nWRONGING\nWRONGLY\nWRONGS\nWRONSKIAN\nWROTE\nWROUGHT\nWRUNG\nWUHAN\nWYANDOTTE\nWYATT\nWYETH\nWYLIE\nWYMAN\nWYNER\nWYNN\nWYOMING\nXANTHUS\nXAVIER\nXEBEC\nXENAKIS\nXENIA\nXENIX\nXEROX\nXEROXED\nXEROXES\nXEROXING\nXERXES\nXHOSA\nYAGI\nYAKIMA\nYALE\nYALIES\nYALTA\nYAMAHA\nYANK\nYANKED\nYANKEE\nYANKEES\nYANKING\nYANKS\nYANKTON\nYAOUNDE\nYAQUI\nYARD\nYARDS\nYARDSTICK\nYARDSTICKS\nYARMOUTH\nYARN\nYARNS\nYATES\nYAUNDE\nYAWN\nYAWNER\nYAWNING\nYEA\nYEAGER\nYEAR\nYEARLY\nYEARN\nYEARNED\nYEARNING\nYEARNINGS\nYEARS\nYEAS\nYEAST\nYEASTS\nYEATS\nYELL\nYELLED\nYELLER\nYELLING\nYELLOW\nYELLOWED\nYELLOWER\nYELLOWEST\nYELLOWING\nYELLOWISH\nYELLOWKNIFE\nYELLOWNESS\nYELLOWS\nYELLOWSTONE\nYELP\nYELPED\nYELPING\nYELPS\nYEMEN\nYENTL\nYEOMAN\nYEOMEN\nYERKES\nYES\nYESTERDAY\nYESTERDAYS\nYET\nYIDDISH\nYIELD\nYIELDED\nYIELDING\nYIELDS\nYODER\nYOKE\nYOKES\nYOKNAPATAWPHA\nYOKOHAMA\nYOKUTS\nYON\nYONDER\nYONKERS\nYORICK\nYORK\nYORKER\nYORKERS\nYORKSHIRE\nYORKTOWN\nYOSEMITE\nYOST\nYOU\nYOUNG\nYOUNGER\nYOUNGEST\nYOUNGLY\nYOUNGSTER\nYOUNGSTERS\nYOUNGSTOWN\nYOUR\nYOURS\nYOURSELF\nYOURSELVES\nYOUTH\nYOUTHES\nYOUTHFUL\nYOUTHFULLY\nYOUTHFULNESS\nYPSILANTI\nYUBA\nYUCATAN\nYUGOSLAV\nYUGOSLAVIA\nYUGOSLAVIAN\nYUGOSLAVIANS\nYUH\nYUKI\nYUKON\nYURI\nYVES\nYVETTE\nZACHARY\nZAGREB\nZAIRE\nZAMBIA\nZAN\nZANZIBAR\nZEAL\nZEALAND\nZEALOUS\nZEALOUSLY\nZEALOUSNESS\nZEBRA\nZEBRAS\nZEFFIRELLI\nZEISS\nZELLERBACH\nZEN\nZENITH\nZENNIST\nZERO\nZEROED\nZEROES\nZEROING\nZEROS\nZEROTH\nZEST\nZEUS\nZIEGFELD\nZIEGFELDS\nZIEGLER\nZIGGY\nZIGZAG\nZILLIONS\nZIMMERMAN\nZINC\nZION\nZIONISM\nZIONIST\nZIONISTS\nZIONS\nZODIAC\nZOE\nZOMBA\nZONAL\nZONALLY\nZONE\nZONED\nZONES\nZONING\nZOO\nZOOLOGICAL\nZOOLOGICALLY\nZOOM\nZOOMS\nZOOS\nZORN\nZOROASTER\nZOROASTRIAN\nZULU\nZULUS\nZURICH\n"
  },
  {
    "path": "strings/dna.py",
    "content": "import re\n\n\ndef dna(dna: str) -> str:\n    \"\"\"\n    https://en.wikipedia.org/wiki/DNA\n    Returns the second side of a DNA strand\n\n    >>> dna(\"GCTA\")\n    'CGAT'\n    >>> dna(\"ATGC\")\n    'TACG'\n    >>> dna(\"CTGA\")\n    'GACT'\n    >>> dna(\"GFGG\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Invalid Strand\n    \"\"\"\n\n    if len(re.findall(\"[ATCG]\", dna)) != len(dna):\n        raise ValueError(\"Invalid Strand\")\n\n    return dna.translate(dna.maketrans(\"ATCG\", \"TAGC\"))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "strings/edit_distance.py",
    "content": "def edit_distance(source: str, target: str) -> int:\n    \"\"\"\n    Edit distance algorithm is a string metric, i.e., it is a way of quantifying how\n    dissimilar two strings are to one another. It is measured by counting the minimum\n    number of operations required to transform one string into another.\n\n    This implementation assumes that the cost of operations (insertion, deletion and\n    substitution) is always 1\n\n    Args:\n    source: the initial string with respect to which we are calculating the edit\n        distance for the target\n    target: the target string, formed after performing n operations on the source string\n\n    >>> edit_distance(\"GATTIC\", \"GALTIC\")\n    1\n    >>> edit_distance(\"NUM3\", \"HUM2\")\n    2\n    >>> edit_distance(\"cap\", \"CAP\")\n    3\n    >>> edit_distance(\"Cat\", \"\")\n    3\n    >>> edit_distance(\"cat\", \"cat\")\n    0\n    >>> edit_distance(\"\", \"123456789\")\n    9\n    >>> edit_distance(\"Be@uty\", \"Beautyyyy!\")\n    5\n    >>> edit_distance(\"lstring\", \"lsstring\")\n    1\n    \"\"\"\n    if len(source) == 0:\n        return len(target)\n    elif len(target) == 0:\n        return len(source)\n\n    delta = int(source[-1] != target[-1])  # Substitution\n    return min(\n        edit_distance(source[:-1], target[:-1]) + delta,\n        edit_distance(source, target[:-1]) + 1,\n        edit_distance(source[:-1], target) + 1,\n    )\n\n\nif __name__ == \"__main__\":\n    print(edit_distance(\"ATCGCTG\", \"TAGCTAA\"))  # Answer is 4\n"
  },
  {
    "path": "strings/frequency_finder.py",
    "content": "# Frequency Finder\n\nimport string\n\n# frequency taken from https://en.wikipedia.org/wiki/Letter_frequency\nenglish_letter_freq = {\n    \"E\": 12.70,\n    \"T\": 9.06,\n    \"A\": 8.17,\n    \"O\": 7.51,\n    \"I\": 6.97,\n    \"N\": 6.75,\n    \"S\": 6.33,\n    \"H\": 6.09,\n    \"R\": 5.99,\n    \"D\": 4.25,\n    \"L\": 4.03,\n    \"C\": 2.78,\n    \"U\": 2.76,\n    \"M\": 2.41,\n    \"W\": 2.36,\n    \"F\": 2.23,\n    \"G\": 2.02,\n    \"Y\": 1.97,\n    \"P\": 1.93,\n    \"B\": 1.29,\n    \"V\": 0.98,\n    \"K\": 0.77,\n    \"J\": 0.15,\n    \"X\": 0.15,\n    \"Q\": 0.10,\n    \"Z\": 0.07,\n}\nETAOIN = \"ETAOINSHRDLCUMWFGYPBVKJXQZ\"\nLETTERS = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n\n\ndef get_letter_count(message: str) -> dict[str, int]:\n    letter_count = dict.fromkeys(string.ascii_uppercase, 0)\n    for letter in message.upper():\n        if letter in LETTERS:\n            letter_count[letter] += 1\n\n    return letter_count\n\n\ndef get_item_at_index_zero(x: tuple) -> str:\n    return x[0]\n\n\ndef get_frequency_order(message: str) -> str:\n    \"\"\"\n    Get the frequency order of the letters in the given string\n    >>> get_frequency_order('Hello World')\n    'LOWDRHEZQXJKVBPYGFMUCSNIAT'\n    >>> get_frequency_order('Hello@')\n    'LHOEZQXJKVBPYGFWMUCDRSNIAT'\n    >>> get_frequency_order('h')\n    'HZQXJKVBPYGFWMUCLDRSNIOATE'\n    \"\"\"\n    letter_to_freq = get_letter_count(message)\n    freq_to_letter: dict[int, list[str]] = {\n        freq: [] for letter, freq in letter_to_freq.items()\n    }\n    for letter in LETTERS:\n        freq_to_letter[letter_to_freq[letter]].append(letter)\n\n    freq_to_letter_str: dict[int, str] = {}\n\n    for freq in freq_to_letter:  # noqa: PLC0206\n        freq_to_letter[freq].sort(key=ETAOIN.find, reverse=True)\n        freq_to_letter_str[freq] = \"\".join(freq_to_letter[freq])\n\n    freq_pairs = list(freq_to_letter_str.items())\n    freq_pairs.sort(key=get_item_at_index_zero, reverse=True)\n\n    freq_order: list[str] = [freq_pair[1] for freq_pair in freq_pairs]\n\n    return \"\".join(freq_order)\n\n\ndef english_freq_match_score(message: str) -> int:\n    \"\"\"\n    >>> english_freq_match_score('Hello World')\n    1\n    \"\"\"\n    freq_order = get_frequency_order(message)\n    match_score = 0\n    for common_letter in ETAOIN[:6]:\n        if common_letter in freq_order[:6]:\n            match_score += 1\n\n    for uncommon_letter in ETAOIN[-6:]:\n        if uncommon_letter in freq_order[-6:]:\n            match_score += 1\n\n    return match_score\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "strings/hamming_distance.py",
    "content": "def hamming_distance(string1: str, string2: str) -> int:\n    \"\"\"Calculate the Hamming distance between two equal length strings\n    In information theory, the Hamming distance between two strings of equal\n    length is the number of positions at which the corresponding symbols are\n    different. https://en.wikipedia.org/wiki/Hamming_distance\n\n    Args:\n        string1 (str): Sequence 1\n        string2 (str): Sequence 2\n\n    Returns:\n        int: Hamming distance\n\n    >>> hamming_distance(\"python\", \"python\")\n    0\n    >>> hamming_distance(\"karolin\", \"kathrin\")\n    3\n    >>> hamming_distance(\"00000\", \"11111\")\n    5\n    >>> hamming_distance(\"karolin\", \"kath\")\n    Traceback (most recent call last):\n      ...\n    ValueError: String lengths must match!\n    \"\"\"\n    if len(string1) != len(string2):\n        raise ValueError(\"String lengths must match!\")\n\n    count = 0\n\n    for char1, char2 in zip(string1, string2):\n        if char1 != char2:\n            count += 1\n\n    return count\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "strings/indian_phone_validator.py",
    "content": "import re\n\n\ndef indian_phone_validator(phone: str) -> bool:\n    \"\"\"\n    Determine whether the string is a valid phone number or not\n    :param phone:\n    :return: Boolean\n    >>> indian_phone_validator(\"+91123456789\")\n    False\n    >>> indian_phone_validator(\"+919876543210\")\n    True\n    >>> indian_phone_validator(\"01234567896\")\n    False\n    >>> indian_phone_validator(\"919876543218\")\n    True\n    >>> indian_phone_validator(\"+91-1234567899\")\n    False\n    >>> indian_phone_validator(\"+91-9876543218\")\n    True\n    \"\"\"\n    pat = re.compile(r\"^(\\+91[\\-\\s]?)?[0]?(91)?[789]\\d{9}$\")\n    if match := re.search(pat, phone):\n        return match.string == phone\n    return False\n\n\nif __name__ == \"__main__\":\n    print(indian_phone_validator(\"+918827897895\"))\n"
  },
  {
    "path": "strings/is_contains_unique_chars.py",
    "content": "def is_contains_unique_chars(input_str: str) -> bool:\n    \"\"\"\n    Check if all characters in the string is unique or not.\n    >>> is_contains_unique_chars(\"I_love.py\")\n    True\n    >>> is_contains_unique_chars(\"I don't love Python\")\n    False\n\n    Time complexity: O(n)\n    Space complexity: O(1) 19320 bytes as we are having 144697 characters in unicode\n    \"\"\"\n\n    # Each bit will represent each unicode character\n    # For example 65th bit representing 'A'\n    # https://stackoverflow.com/a/12811293\n    bitmap = 0\n    for ch in input_str:\n        ch_unicode = ord(ch)\n        ch_bit_index_on = pow(2, ch_unicode)\n\n        # If we already turned on bit for current character's unicode\n        if bitmap >> ch_unicode & 1 == 1:\n            return False\n        bitmap |= ch_bit_index_on\n    return True\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "strings/is_isogram.py",
    "content": "\"\"\"\nwiki: https://en.wikipedia.org/wiki/Heterogram_(literature)#Isograms\n\"\"\"\n\n\ndef is_isogram(string: str) -> bool:\n    \"\"\"\n    An isogram is a word in which no letter is repeated.\n    Examples of isograms are uncopyrightable and ambidextrously.\n    >>> is_isogram('Uncopyrightable')\n    True\n    >>> is_isogram('allowance')\n    False\n    >>> is_isogram('copy1')\n    Traceback (most recent call last):\n     ...\n    ValueError: String must only contain alphabetic characters.\n    \"\"\"\n    if not all(x.isalpha() for x in string):\n        raise ValueError(\"String must only contain alphabetic characters.\")\n\n    letters = sorted(string.lower())\n    return len(letters) == len(set(letters))\n\n\nif __name__ == \"__main__\":\n    input_str = input(\"Enter a string \").strip()\n\n    isogram = is_isogram(input_str)\n    print(f\"{input_str} is {'an' if isogram else 'not an'} isogram.\")\n"
  },
  {
    "path": "strings/is_pangram.py",
    "content": "\"\"\"\nwiki: https://en.wikipedia.org/wiki/Pangram\n\"\"\"\n\n\ndef is_pangram(\n    input_str: str = \"The quick brown fox jumps over the lazy dog\",\n) -> bool:\n    \"\"\"\n    A Pangram String contains all the alphabets at least once.\n    >>> is_pangram(\"The quick brown fox jumps over the lazy dog\")\n    True\n    >>> is_pangram(\"Waltz, bad nymph, for quick jigs vex.\")\n    True\n    >>> is_pangram(\"Jived fox nymph grabs quick waltz.\")\n    True\n    >>> is_pangram(\"My name is Unknown\")\n    False\n    >>> is_pangram(\"The quick brown fox jumps over the la_y dog\")\n    False\n    >>> is_pangram()\n    True\n    \"\"\"\n    # Declare frequency as a set to have unique occurrences of letters\n    frequency = set()\n\n    # Replace all the whitespace in our sentence\n    input_str = input_str.replace(\" \", \"\")\n    for alpha in input_str:\n        if \"a\" <= alpha.lower() <= \"z\":\n            frequency.add(alpha.lower())\n    return len(frequency) == 26\n\n\ndef is_pangram_faster(\n    input_str: str = \"The quick brown fox jumps over the lazy dog\",\n) -> bool:\n    \"\"\"\n    >>> is_pangram_faster(\"The quick brown fox jumps over the lazy dog\")\n    True\n    >>> is_pangram_faster(\"Waltz, bad nymph, for quick jigs vex.\")\n    True\n    >>> is_pangram_faster(\"Jived fox nymph grabs quick waltz.\")\n    True\n    >>> is_pangram_faster(\"The quick brown fox jumps over the la_y dog\")\n    False\n    >>> is_pangram_faster()\n    True\n    \"\"\"\n    flag = [False] * 26\n    for char in input_str:\n        if char.islower():\n            flag[ord(char) - 97] = True\n        elif char.isupper():\n            flag[ord(char) - 65] = True\n    return all(flag)\n\n\ndef is_pangram_fastest(\n    input_str: str = \"The quick brown fox jumps over the lazy dog\",\n) -> bool:\n    \"\"\"\n    >>> is_pangram_fastest(\"The quick brown fox jumps over the lazy dog\")\n    True\n    >>> is_pangram_fastest(\"Waltz, bad nymph, for quick jigs vex.\")\n    True\n    >>> is_pangram_fastest(\"Jived fox nymph grabs quick waltz.\")\n    True\n    >>> is_pangram_fastest(\"The quick brown fox jumps over the la_y dog\")\n    False\n    >>> is_pangram_fastest()\n    True\n    \"\"\"\n    return len({char for char in input_str.lower() if char.isalpha()}) == 26\n\n\ndef benchmark() -> None:\n    \"\"\"\n    Benchmark code comparing different version.\n    \"\"\"\n    from timeit import timeit\n\n    setup = \"from __main__ import is_pangram, is_pangram_faster, is_pangram_fastest\"\n    print(timeit(\"is_pangram()\", setup=setup))\n    print(timeit(\"is_pangram_faster()\", setup=setup))\n    print(timeit(\"is_pangram_fastest()\", setup=setup))\n    # 5.348480500048026, 2.6477354579837993, 1.8470395830227062\n    # 5.036091582966037, 2.644472333951853,  1.8869528750656173\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    benchmark()\n"
  },
  {
    "path": "strings/is_polish_national_id.py",
    "content": "def is_polish_national_id(input_str: str) -> bool:\r\n    \"\"\"\r\n    Verification of the correctness of the PESEL number.\r\n    www-gov-pl.translate.goog/web/gov/czym-jest-numer-pesel?_x_tr_sl=auto&_x_tr_tl=en\r\n\r\n    PESEL can start with 0, that's why we take str as input,\r\n    but convert it to int for some calculations.\r\n\r\n\r\n    >>> is_polish_national_id(123)\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Expected str as input, found <class 'int'>\r\n\r\n    >>> is_polish_national_id(\"abc\")\r\n    Traceback (most recent call last):\r\n        ...\r\n    ValueError: Expected number as input\r\n\r\n    >>> is_polish_national_id(\"02070803628\") # correct PESEL\r\n    True\r\n\r\n    >>> is_polish_national_id(\"02150803629\") # wrong month\r\n    False\r\n\r\n    >>> is_polish_national_id(\"02075503622\") # wrong day\r\n    False\r\n\r\n    >>> is_polish_national_id(\"-99012212349\") # wrong range\r\n    False\r\n\r\n    >>> is_polish_national_id(\"990122123499999\") # wrong range\r\n    False\r\n\r\n    >>> is_polish_national_id(\"02070803621\") # wrong checksum\r\n    False\r\n    \"\"\"\r\n\r\n    # check for invalid input type\r\n    if not isinstance(input_str, str):\r\n        msg = f\"Expected str as input, found {type(input_str)}\"\r\n        raise ValueError(msg)\r\n\r\n    # check if input can be converted to int\r\n    try:\r\n        input_int = int(input_str)\r\n    except ValueError:\r\n        msg = \"Expected number as input\"\r\n        raise ValueError(msg)\r\n\r\n    # check number range\r\n    if not 10100000 <= input_int <= 99923199999:\r\n        return False\r\n\r\n    # check month correctness\r\n    month = int(input_str[2:4])\r\n\r\n    if (\r\n        month not in range(1, 13)  # year 1900-1999\r\n        and month not in range(21, 33)  # 2000-2099\r\n        and month not in range(41, 53)  # 2100-2199\r\n        and month not in range(61, 73)  # 2200-2299\r\n        and month not in range(81, 93)  # 1800-1899\r\n    ):\r\n        return False\r\n\r\n    # check day correctness\r\n    day = int(input_str[4:6])\r\n\r\n    if day not in range(1, 32):\r\n        return False\r\n\r\n    # check the checksum\r\n    multipliers = [1, 3, 7, 9, 1, 3, 7, 9, 1, 3]\r\n    subtotal = 0\r\n\r\n    digits_to_check = str(input_str)[:-1]  # cut off the checksum\r\n\r\n    for index, digit in enumerate(digits_to_check):\r\n        # Multiply corresponding digits and multipliers.\r\n        # In case of a double-digit result, add only the last digit.\r\n        subtotal += (int(digit) * multipliers[index]) % 10\r\n\r\n    checksum = 10 - subtotal % 10\r\n\r\n    return checksum == input_int % 10\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    from doctest import testmod\r\n\r\n    testmod()\r\n"
  },
  {
    "path": "strings/is_spain_national_id.py",
    "content": "NUMBERS_PLUS_LETTER = \"Input must be a string of 8 numbers plus letter\"\nLOOKUP_LETTERS = \"TRWAGMYFPDXBNJZSQVHLCKE\"\n\n\ndef is_spain_national_id(spanish_id: str) -> bool:\n    \"\"\"\n    Spain National Id is a string composed by 8 numbers plus a letter\n    The letter in fact is not part of the ID, it acts as a validator,\n    checking you didn't do a mistake when entering it on a system or\n    are giving a fake one.\n\n    https://en.wikipedia.org/wiki/Documento_Nacional_de_Identidad_(Spain)#Number\n\n    >>> is_spain_national_id(\"12345678Z\")\n    True\n    >>> is_spain_national_id(\"12345678z\")  # It is case-insensitive\n    True\n    >>> is_spain_national_id(\"12345678x\")\n    False\n    >>> is_spain_national_id(\"12345678I\")\n    False\n    >>> is_spain_national_id(\"12345678-Z\")  # Some systems add a dash\n    True\n    >>> is_spain_national_id(\"12345678\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Input must be a string of 8 numbers plus letter\n    >>> is_spain_national_id(\"123456709\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Input must be a string of 8 numbers plus letter\n    >>> is_spain_national_id(\"1234567--Z\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Input must be a string of 8 numbers plus letter\n    >>> is_spain_national_id(\"1234Z\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Input must be a string of 8 numbers plus letter\n    >>> is_spain_national_id(\"1234ZzZZ\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Input must be a string of 8 numbers plus letter\n    >>> is_spain_national_id(12345678)\n    Traceback (most recent call last):\n        ...\n    TypeError: Expected string as input, found int\n    \"\"\"\n\n    if not isinstance(spanish_id, str):\n        msg = f\"Expected string as input, found {type(spanish_id).__name__}\"\n        raise TypeError(msg)\n\n    spanish_id_clean = spanish_id.replace(\"-\", \"\").upper()\n    if len(spanish_id_clean) != 9:\n        raise ValueError(NUMBERS_PLUS_LETTER)\n\n    try:\n        number = int(spanish_id_clean[0:8])\n        letter = spanish_id_clean[8]\n    except ValueError as ex:\n        raise ValueError(NUMBERS_PLUS_LETTER) from ex\n\n    if letter.isdigit():\n        raise ValueError(NUMBERS_PLUS_LETTER)\n\n    return letter == LOOKUP_LETTERS[number % 23]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "strings/is_srilankan_phone_number.py",
    "content": "import re\n\n\ndef is_sri_lankan_phone_number(phone: str) -> bool:\n    \"\"\"\n    Determine whether the string is a valid sri lankan mobile phone number or not\n    References: https://aye.sh/blog/sri-lankan-phone-number-regex\n\n    >>> is_sri_lankan_phone_number(\"+94773283048\")\n    True\n    >>> is_sri_lankan_phone_number(\"+9477-3283048\")\n    True\n    >>> is_sri_lankan_phone_number(\"0718382399\")\n    True\n    >>> is_sri_lankan_phone_number(\"0094702343221\")\n    True\n    >>> is_sri_lankan_phone_number(\"075 3201568\")\n    True\n    >>> is_sri_lankan_phone_number(\"07779209245\")\n    False\n    >>> is_sri_lankan_phone_number(\"0957651234\")\n    False\n    \"\"\"\n\n    pattern = re.compile(r\"^(?:0|94|\\+94|0{2}94)7(0|1|2|4|5|6|7|8)(-| |)\\d{7}$\")\n\n    return bool(re.search(pattern, phone))\n\n\nif __name__ == \"__main__\":\n    phone = \"0094702343221\"\n\n    print(is_sri_lankan_phone_number(phone))\n"
  },
  {
    "path": "strings/is_valid_email_address.py",
    "content": "\"\"\"\nImplements an is valid email address algorithm\n\n@ https://en.wikipedia.org/wiki/Email_address\n\"\"\"\n\nimport string\n\nemail_tests: tuple[tuple[str, bool], ...] = (\n    (\"simple@example.com\", True),\n    (\"very.common@example.com\", True),\n    (\"disposable.style.email.with+symbol@example.com\", True),\n    (\"other-email-with-hyphen@and.subdomains.example.com\", True),\n    (\"fully-qualified-domain@example.com\", True),\n    (\"user.name+tag+sorting@example.com\", True),\n    (\"x@example.com\", True),\n    (\"example-indeed@strange-example.com\", True),\n    (\"test/test@test.com\", True),\n    (\n        \"123456789012345678901234567890123456789012345678901234567890123@example.com\",\n        True,\n    ),\n    (\"admin@mailserver1\", True),\n    (\"example@s.example\", True),\n    (\"Abc.example.com\", False),\n    (\"A@b@c@example.com\", False),\n    (\"abc@example..com\", False),\n    (\"a(c)d,e:f;g<h>i[j\\\\k]l@example.com\", False),\n    (\n        \"12345678901234567890123456789012345678901234567890123456789012345@example.com\",\n        False,\n    ),\n    (\"i.like.underscores@but_its_not_allowed_in_this_part\", False),\n    (\"\", False),\n)\n\n# The maximum octets (one character as a standard unicode character is one byte)\n# that the local part and the domain part can have\nMAX_LOCAL_PART_OCTETS = 64\nMAX_DOMAIN_OCTETS = 255\n\n\ndef is_valid_email_address(email: str) -> bool:\n    \"\"\"\n    Returns True if the passed email address is valid.\n\n    The local part of the email precedes the singular @ symbol and\n    is associated with a display-name. For example, \"john.smith\"\n    The domain is stricter than the local part and follows the @ symbol.\n\n    Global email checks:\n     1. There can only be one @ symbol in the email address. Technically if the\n        @ symbol is quoted in the local-part, then it is valid, however this\n        implementation ignores \"\" for now.\n        (See https://en.wikipedia.org/wiki/Email_address#:~:text=If%20quoted,)\n     2. The local-part and the domain are limited to a certain number of octets. With\n        unicode storing a single character in one byte, each octet is equivalent to\n        a character. Hence, we can just check the length of the string.\n    Checks for the local-part:\n     3. The local-part may contain: upper and lowercase latin letters, digits 0 to 9,\n        and printable characters (!#$%&'*+-/=?^_`{|}~)\n     4. The local-part may also contain a \".\" in any place that is not the first or\n        last character, and may not have more than one \".\" consecutively.\n\n    Checks for the domain:\n     5. The domain may contain: upper and lowercase latin letters and digits 0 to 9\n     6. Hyphen \"-\", provided that it is not the first or last character\n     7. The domain may also contain a \".\" in any place that is not the first or\n        last character, and may not have more than one \".\" consecutively.\n\n    >>> for email, valid in email_tests:\n    ...     assert is_valid_email_address(email) == valid\n    \"\"\"\n\n    # (1.) Make sure that there is only one @ symbol in the email address\n    if email.count(\"@\") != 1:\n        return False\n\n    local_part, domain = email.split(\"@\")\n    # (2.) Check octet length of the local part and domain\n    if len(local_part) > MAX_LOCAL_PART_OCTETS or len(domain) > MAX_DOMAIN_OCTETS:\n        return False\n\n    # (3.) Validate the characters in the local-part\n    if any(\n        char not in string.ascii_letters + string.digits + \".(!#$%&'*+-/=?^_`{|}~)\"\n        for char in local_part\n    ):\n        return False\n\n    # (4.) Validate the placement of \".\" characters in the local-part\n    if local_part.startswith(\".\") or local_part.endswith(\".\") or \"..\" in local_part:\n        return False\n\n    # (5.) Validate the characters in the domain\n    if any(char not in string.ascii_letters + string.digits + \".-\" for char in domain):\n        return False\n\n    # (6.) Validate the placement of \"-\" characters\n    if domain.startswith(\"-\") or domain.endswith(\".\"):\n        return False\n\n    # (7.) Validate the placement of \".\" characters\n    return not (domain.startswith(\".\") or domain.endswith(\".\") or \"..\" in domain)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    for email, valid in email_tests:\n        is_valid = is_valid_email_address(email)\n        assert is_valid == valid, f\"{email} is {is_valid}\"\n        print(f\"Email address {email} is {'not ' if not is_valid else ''}valid\")\n"
  },
  {
    "path": "strings/jaro_winkler.py",
    "content": "\"\"\"https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance\"\"\"\n\n\ndef jaro_winkler(str1: str, str2: str) -> float:\n    \"\"\"\n    Jaro-Winkler distance is a string metric measuring an edit distance between two\n    sequences.\n    Output value is between 0.0 and 1.0.\n\n    >>> jaro_winkler(\"martha\", \"marhta\")\n    0.9611111111111111\n    >>> jaro_winkler(\"CRATE\", \"TRACE\")\n    0.7333333333333334\n    >>> jaro_winkler(\"test\", \"dbdbdbdb\")\n    0.0\n    >>> jaro_winkler(\"test\", \"test\")\n    1.0\n    >>> jaro_winkler(\"hello world\", \"HeLLo W0rlD\")\n    0.6363636363636364\n    >>> jaro_winkler(\"test\", \"\")\n    0.0\n    >>> jaro_winkler(\"hello\", \"world\")\n    0.4666666666666666\n    >>> jaro_winkler(\"hell**o\", \"*world\")\n    0.4365079365079365\n    \"\"\"\n\n    def get_matched_characters(_str1: str, _str2: str) -> str:\n        matched = []\n        limit = min(len(_str1), len(_str2)) // 2\n        for i, char in enumerate(_str1):\n            left = int(max(0, i - limit))\n            right = int(min(i + limit + 1, len(_str2)))\n            if char in _str2[left:right]:\n                matched.append(char)\n                _str2 = (\n                    f\"{_str2[0 : _str2.index(char)]} {_str2[_str2.index(char) + 1 :]}\"\n                )\n\n        return \"\".join(matched)\n\n    # matching characters\n    matching_1 = get_matched_characters(str1, str2)\n    matching_2 = get_matched_characters(str2, str1)\n    match_count = len(matching_1)\n\n    # transposition\n    transpositions = (\n        len([(c1, c2) for c1, c2 in zip(matching_1, matching_2) if c1 != c2]) // 2\n    )\n\n    if not match_count:\n        jaro = 0.0\n    else:\n        jaro = (\n            1\n            / 3\n            * (\n                match_count / len(str1)\n                + match_count / len(str2)\n                + (match_count - transpositions) / match_count\n            )\n        )\n\n    # common prefix up to 4 characters\n    prefix_len = 0\n    for c1, c2 in zip(str1[:4], str2[:4]):\n        if c1 == c2:\n            prefix_len += 1\n        else:\n            break\n\n    return jaro + 0.1 * prefix_len * (1 - jaro)\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    print(jaro_winkler(\"hello\", \"world\"))\n"
  },
  {
    "path": "strings/join.py",
    "content": "\"\"\"\nProgram to join a list of strings with a separator\n\"\"\"\n\n\ndef join(separator: str, separated: list[str]) -> str:\n    \"\"\"\n    Joins a list of strings using a separator\n    and returns the result.\n\n    :param separator: Separator to be used\n                for joining the strings.\n    :param separated: List of strings to be joined.\n\n    :return: Joined string with the specified separator.\n\n    Examples:\n\n    >>> join(\"\", [\"a\", \"b\", \"c\", \"d\"])\n    'abcd'\n    >>> join(\"#\", [\"a\", \"b\", \"c\", \"d\"])\n    'a#b#c#d'\n    >>> join(\"#\", \"a\")\n    'a'\n    >>> join(\" \", [\"You\", \"are\", \"amazing!\"])\n    'You are amazing!'\n    >>> join(\",\", [\"\", \"\", \"\"])\n    ',,'\n\n    This example should raise an\n    exception for non-string elements:\n    >>> join(\"#\", [\"a\", \"b\", \"c\", 1])\n    Traceback (most recent call last):\n        ...\n    Exception: join() accepts only strings\n\n    Additional test case with a different separator:\n    >>> join(\"-\", [\"apple\", \"banana\", \"cherry\"])\n    'apple-banana-cherry'\n    \"\"\"\n\n    # Check that all elements are strings\n    for word_or_phrase in separated:\n        # If the element is not a string, raise an exception\n        if not isinstance(word_or_phrase, str):\n            raise Exception(\"join() accepts only strings\")\n\n    joined: str = \"\"\n    \"\"\"\n    The last element of the list is not followed by the separator.\n    So, we need to iterate through the list and join each element\n    with the separator except the last element.\n    \"\"\"\n    last_index: int = len(separated) - 1\n    \"\"\"\n    Iterate through the list and join each element with the separator.\n    Except the last element, all other elements are followed by the separator.\n    \"\"\"\n    for word_or_phrase in separated[:last_index]:\n        # join the element with the separator.\n        joined += word_or_phrase + separator\n\n    # If the list is not empty, join the last element.\n    if separated != []:\n        joined += separated[last_index]\n\n    # Return the joined string.\n    return joined\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "strings/knuth_morris_pratt.py",
    "content": "from __future__ import annotations\n\n\ndef knuth_morris_pratt(text: str, pattern: str) -> int:\n    \"\"\"\n    The Knuth-Morris-Pratt Algorithm for finding a pattern within a piece of text\n    with complexity O(n + m)\n\n    1) Preprocess pattern to identify any suffixes that are identical to prefixes\n\n        This tells us where to continue from if we get a mismatch between a character\n        in our pattern and the text.\n\n    2) Step through the text one character at a time and compare it to a character in\n        the pattern updating our location within the pattern if necessary\n\n    >>> kmp = \"knuth_morris_pratt\"\n    >>> all(\n    ...    knuth_morris_pratt(kmp, s) == kmp.find(s)\n    ...    for s in (\"kn\", \"h_m\", \"rr\", \"tt\", \"not there\")\n    ... )\n    True\n    \"\"\"\n\n    # 1) Construct the failure array\n    failure = get_failure_array(pattern)\n\n    # 2) Step through text searching for pattern\n    i, j = 0, 0  # index into text, pattern\n    while i < len(text):\n        if pattern[j] == text[i]:\n            if j == (len(pattern) - 1):\n                return i - j\n            j += 1\n\n        # if this is a prefix in our pattern\n        # just go back far enough to continue\n        elif j > 0:\n            j = failure[j - 1]\n            continue\n        i += 1\n    return -1\n\n\ndef get_failure_array(pattern: str) -> list[int]:\n    \"\"\"\n    Calculates the new index we should go to if we fail a comparison\n    :param pattern:\n    :return:\n    \"\"\"\n    failure = [0]\n    i = 0\n    j = 1\n    while j < len(pattern):\n        if pattern[i] == pattern[j]:\n            i += 1\n        elif i > 0:\n            i = failure[i - 1]\n            continue\n        j += 1\n        failure.append(i)\n    return failure\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    # Test 1)\n    pattern = \"abc1abc12\"\n    text1 = \"alskfjaldsabc1abc1abc12k23adsfabcabc\"\n    text2 = \"alskfjaldsk23adsfabcabc\"\n    assert knuth_morris_pratt(text1, pattern)\n    assert knuth_morris_pratt(text2, pattern)\n\n    # Test 2)\n    pattern = \"ABABX\"\n    text = \"ABABZABABYABABX\"\n    assert knuth_morris_pratt(text, pattern)\n\n    # Test 3)\n    pattern = \"AAAB\"\n    text = \"ABAAAAAB\"\n    assert knuth_morris_pratt(text, pattern)\n\n    # Test 4)\n    pattern = \"abcdabcy\"\n    text = \"abcxabcdabxabcdabcdabcy\"\n    assert knuth_morris_pratt(text, pattern)\n\n    # Test 5) -> Doctests\n    kmp = \"knuth_morris_pratt\"\n    assert all(\n        knuth_morris_pratt(kmp, s) == kmp.find(s)\n        for s in (\"kn\", \"h_m\", \"rr\", \"tt\", \"not there\")\n    )\n\n    # Test 6)\n    pattern = \"aabaabaaa\"\n    assert get_failure_array(pattern) == [0, 1, 0, 1, 2, 3, 4, 5, 2]\n"
  },
  {
    "path": "strings/levenshtein_distance.py",
    "content": "from collections.abc import Callable\n\n\ndef levenshtein_distance(first_word: str, second_word: str) -> int:\n    \"\"\"\n    Implementation of the Levenshtein distance in Python.\n    :param first_word: the first word to measure the difference.\n    :param second_word: the second word to measure the difference.\n    :return: the levenshtein distance between the two words.\n    Examples:\n    >>> levenshtein_distance(\"planet\", \"planetary\")\n    3\n    >>> levenshtein_distance(\"\", \"test\")\n    4\n    >>> levenshtein_distance(\"book\", \"back\")\n    2\n    >>> levenshtein_distance(\"book\", \"book\")\n    0\n    >>> levenshtein_distance(\"test\", \"\")\n    4\n    >>> levenshtein_distance(\"\", \"\")\n    0\n    >>> levenshtein_distance(\"orchestration\", \"container\")\n    10\n    \"\"\"\n    # The longer word should come first\n    if len(first_word) < len(second_word):\n        return levenshtein_distance(second_word, first_word)\n\n    if len(second_word) == 0:\n        return len(first_word)\n\n    previous_row = list(range(len(second_word) + 1))\n\n    for i, c1 in enumerate(first_word):\n        current_row = [i + 1]\n\n        for j, c2 in enumerate(second_word):\n            # Calculate insertions, deletions, and substitutions\n            insertions = previous_row[j + 1] + 1\n            deletions = current_row[j] + 1\n            substitutions = previous_row[j] + (c1 != c2)\n\n            # Get the minimum to append to the current row\n            current_row.append(min(insertions, deletions, substitutions))\n\n        # Store the previous row\n        previous_row = current_row\n\n    # Returns the last element (distance)\n    return previous_row[-1]\n\n\ndef levenshtein_distance_optimized(first_word: str, second_word: str) -> int:\n    \"\"\"\n    Compute the Levenshtein distance between two words (strings).\n    The function is optimized for efficiency by modifying rows in place.\n    :param first_word: the first word to measure the difference.\n    :param second_word: the second word to measure the difference.\n    :return: the Levenshtein distance between the two words.\n    Examples:\n    >>> levenshtein_distance_optimized(\"planet\", \"planetary\")\n    3\n    >>> levenshtein_distance_optimized(\"\", \"test\")\n    4\n    >>> levenshtein_distance_optimized(\"book\", \"back\")\n    2\n    >>> levenshtein_distance_optimized(\"book\", \"book\")\n    0\n    >>> levenshtein_distance_optimized(\"test\", \"\")\n    4\n    >>> levenshtein_distance_optimized(\"\", \"\")\n    0\n    >>> levenshtein_distance_optimized(\"orchestration\", \"container\")\n    10\n    \"\"\"\n    if len(first_word) < len(second_word):\n        return levenshtein_distance_optimized(second_word, first_word)\n\n    if len(second_word) == 0:\n        return len(first_word)\n\n    previous_row = list(range(len(second_word) + 1))\n\n    for i, c1 in enumerate(first_word):\n        current_row = [i + 1] + [0] * len(second_word)\n\n        for j, c2 in enumerate(second_word):\n            insertions = previous_row[j + 1] + 1\n            deletions = current_row[j] + 1\n            substitutions = previous_row[j] + (c1 != c2)\n            current_row[j + 1] = min(insertions, deletions, substitutions)\n\n        previous_row = current_row\n\n    return previous_row[-1]\n\n\ndef benchmark_levenshtein_distance(func: Callable) -> None:\n    \"\"\"\n    Benchmark the Levenshtein distance function.\n    :param str: The name of the function being benchmarked.\n    :param func: The function to be benchmarked.\n    \"\"\"\n    from timeit import timeit\n\n    stmt = f\"{func.__name__}('sitting', 'kitten')\"\n    setup = f\"from __main__ import {func.__name__}\"\n    number = 25_000\n    result = timeit(stmt=stmt, setup=setup, number=number)\n    print(f\"{func.__name__:<30} finished {number:,} runs in {result:.5f} seconds\")\n\n\nif __name__ == \"__main__\":\n    # Get user input for words\n    first_word = input(\"Enter the first word for Levenshtein distance:\\n\").strip()\n    second_word = input(\"Enter the second word for Levenshtein distance:\\n\").strip()\n\n    # Calculate and print Levenshtein distances\n    print(f\"{levenshtein_distance(first_word, second_word) = }\")\n    print(f\"{levenshtein_distance_optimized(first_word, second_word) = }\")\n\n    # Benchmark the Levenshtein distance functions\n    benchmark_levenshtein_distance(levenshtein_distance)\n    benchmark_levenshtein_distance(levenshtein_distance_optimized)\n"
  },
  {
    "path": "strings/lower.py",
    "content": "def lower(word: str) -> str:\n    \"\"\"\n    Will convert the entire string to lowercase letters\n\n    >>> lower(\"wow\")\n    'wow'\n    >>> lower(\"HellZo\")\n    'hellzo'\n    >>> lower(\"WHAT\")\n    'what'\n    >>> lower(\"wh[]32\")\n    'wh[]32'\n    >>> lower(\"whAT\")\n    'what'\n    \"\"\"\n\n    # Converting to ASCII value, obtaining the integer representation\n    # and checking to see if the character is a capital letter.\n    # If it is a capital letter, it is shifted by 32, making it a lowercase letter.\n    return \"\".join(chr(ord(char) + 32) if \"A\" <= char <= \"Z\" else char for char in word)\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "strings/manacher.py",
    "content": "def palindromic_string(input_string: str) -> str:\r\n    \"\"\"\r\n    >>> palindromic_string('abbbaba')\r\n    'abbba'\r\n    >>> palindromic_string('ababa')\r\n    'ababa'\r\n\r\n    Manacher's algorithm which finds Longest palindromic Substring in linear time.\r\n\r\n    1. first this convert input_string(\"xyx\") into new_string(\"x|y|x\") where odd\r\n        positions are actual input characters.\r\n    2. for each character in new_string it find corresponding length and\r\n        store the length and left,right to store previously calculated info.\r\n        (please look the explanation for details)\r\n\r\n    3. return corresponding output_string by removing all \"|\"\r\n    \"\"\"\r\n    max_length = 0\r\n\r\n    # if input_string is \"aba\" than new_input_string become \"a|b|a\"\r\n    new_input_string = \"\"\r\n    output_string = \"\"\r\n\r\n    # append each character + \"|\" in new_string for range(0, length-1)\r\n    for i in input_string[: len(input_string) - 1]:\r\n        new_input_string += i + \"|\"\r\n    # append last character\r\n    new_input_string += input_string[-1]\r\n\r\n    # we will store the starting and ending of previous furthest ending palindromic\r\n    # substring\r\n    left, right = 0, 0\r\n\r\n    # length[i] shows the length of palindromic substring with center i\r\n    length = [1 for i in range(len(new_input_string))]\r\n\r\n    # for each character in new_string find corresponding palindromic string\r\n    start = 0\r\n    for j in range(len(new_input_string)):\r\n        k = 1 if j > right else min(length[left + right - j] // 2, right - j + 1)\r\n        while (\r\n            j - k >= 0\r\n            and j + k < len(new_input_string)\r\n            and new_input_string[k + j] == new_input_string[j - k]\r\n        ):\r\n            k += 1\r\n\r\n        length[j] = 2 * k - 1\r\n\r\n        # does this string is ending after the previously explored end (that is right) ?\r\n        # if yes the update the new right to the last index of this\r\n        if j + k - 1 > right:\r\n            left = j - k + 1\r\n            right = j + k - 1\r\n\r\n        # update max_length and start position\r\n        if max_length < length[j]:\r\n            max_length = length[j]\r\n            start = j\r\n\r\n    # create that string\r\n    s = new_input_string[start - max_length // 2 : start + max_length // 2 + 1]\r\n    for i in s:\r\n        if i != \"|\":\r\n            output_string += i\r\n\r\n    return output_string\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    import doctest\r\n\r\n    doctest.testmod()\r\n\r\n\"\"\"\r\n...a0...a1...a2.....a3......a4...a5...a6....\r\n\r\nconsider the string for which we are calculating the longest palindromic substring is\r\nshown above where ... are some characters in between and right now we are calculating\r\nthe length of palindromic substring with center at a5 with following conditions :\r\ni) we have stored the length of palindromic substring which has center at a3\r\n    (starts at left ends at right) and it is the furthest ending till now,\r\n    and it has ending after a6\r\nii) a2 and a4 are equally distant from a3 so char(a2) == char(a4)\r\niii) a0 and a6 are equally distant from a3 so char(a0) == char(a6)\r\niv) a1 is corresponding equal character of a5 in palindrome with center a3 (remember\r\n    that in below derivation of a4==a6)\r\n\r\nnow for a5 we will calculate the length of palindromic substring with center as a5 but\r\ncan we use previously calculated information in some way?\r\nYes, look the above string we know that a5 is inside the palindrome with center a3 and\r\npreviously we have calculated that\r\na0==a2 (palindrome of center a1)\r\na2==a4 (palindrome of center a3)\r\na0==a6 (palindrome of center a3)\r\nso a4==a6\r\n\r\nso we can say that palindrome at center a5 is at least as long as palindrome at center\r\na1 but this only holds if a0 and a6 are inside the limits of palindrome centered at a3\r\nso finally ..\r\n\r\nlen_of_palindrome__at(a5) = min(len_of_palindrome_at(a1), right-a5)\r\nwhere a3 lies from left to right and we have to keep updating that\r\n\r\nand if the a5 lies outside of left,right boundary we calculate length of palindrome with\r\nbruteforce and update left,right.\r\n\r\nit gives the linear time complexity just like z-function\r\n\"\"\"\r\n"
  },
  {
    "path": "strings/min_cost_string_conversion.py",
    "content": "\"\"\"\nAlgorithm for calculating the most cost-efficient sequence for converting one string\ninto another.\nThe only allowed operations are\n--- Cost to copy a character is copy_cost\n--- Cost to replace a character is replace_cost\n--- Cost to delete a character is delete_cost\n--- Cost to insert a character is insert_cost\n\"\"\"\n\n\ndef compute_transform_tables(\n    source_string: str,\n    destination_string: str,\n    copy_cost: int,\n    replace_cost: int,\n    delete_cost: int,\n    insert_cost: int,\n) -> tuple[list[list[int]], list[list[str]]]:\n    \"\"\"\n    Finds the most cost efficient sequence\n    for converting one string into another.\n\n    >>> costs, operations = compute_transform_tables(\"cat\", \"cut\", 1, 2, 3, 3)\n    >>> costs[0][:4]\n    [0, 3, 6, 9]\n    >>> costs[2][:4]\n    [6, 4, 3, 6]\n    >>> operations[0][:4]\n    ['0', 'Ic', 'Iu', 'It']\n    >>> operations[3][:4]\n    ['Dt', 'Dt', 'Rtu', 'Ct']\n\n    >>> compute_transform_tables(\"\", \"\", 1, 2, 3, 3)\n    ([[0]], [['0']])\n    \"\"\"\n    source_seq = list(source_string)\n    destination_seq = list(destination_string)\n    len_source_seq = len(source_seq)\n    len_destination_seq = len(destination_seq)\n    costs = [\n        [0 for _ in range(len_destination_seq + 1)] for _ in range(len_source_seq + 1)\n    ]\n    ops = [\n        [\"0\" for _ in range(len_destination_seq + 1)] for _ in range(len_source_seq + 1)\n    ]\n\n    for i in range(1, len_source_seq + 1):\n        costs[i][0] = i * delete_cost\n        ops[i][0] = f\"D{source_seq[i - 1]}\"\n\n    for i in range(1, len_destination_seq + 1):\n        costs[0][i] = i * insert_cost\n        ops[0][i] = f\"I{destination_seq[i - 1]}\"\n\n    for i in range(1, len_source_seq + 1):\n        for j in range(1, len_destination_seq + 1):\n            if source_seq[i - 1] == destination_seq[j - 1]:\n                costs[i][j] = costs[i - 1][j - 1] + copy_cost\n                ops[i][j] = f\"C{source_seq[i - 1]}\"\n            else:\n                costs[i][j] = costs[i - 1][j - 1] + replace_cost\n                ops[i][j] = f\"R{source_seq[i - 1]}\" + str(destination_seq[j - 1])\n\n            if costs[i - 1][j] + delete_cost < costs[i][j]:\n                costs[i][j] = costs[i - 1][j] + delete_cost\n                ops[i][j] = f\"D{source_seq[i - 1]}\"\n\n            if costs[i][j - 1] + insert_cost < costs[i][j]:\n                costs[i][j] = costs[i][j - 1] + insert_cost\n                ops[i][j] = f\"I{destination_seq[j - 1]}\"\n\n    return costs, ops\n\n\ndef assemble_transformation(ops: list[list[str]], i: int, j: int) -> list[str]:\n    \"\"\"\n    Assembles the transformations based on the ops table.\n\n    >>> ops = [['0', 'Ic', 'Iu', 'It'],\n    ...        ['Dc', 'Cc', 'Iu', 'It'],\n    ...        ['Da', 'Da', 'Rau', 'Rat'],\n    ...        ['Dt', 'Dt', 'Rtu', 'Ct']]\n    >>> x = len(ops) - 1\n    >>> y = len(ops[0]) - 1\n    >>> assemble_transformation(ops, x, y)\n    ['Cc', 'Rau', 'Ct']\n\n    >>> ops1 = [['0']]\n    >>> x1 = len(ops1) - 1\n    >>> y1 = len(ops1[0]) - 1\n    >>> assemble_transformation(ops1, x1, y1)\n    []\n\n    >>> ops2 = [['0', 'I1', 'I2', 'I3'],\n    ...         ['D1', 'C1', 'I2', 'I3'],\n    ...         ['D2', 'D2', 'R23', 'R23']]\n    >>> x2 = len(ops2) - 1\n    >>> y2 = len(ops2[0]) - 1\n    >>> assemble_transformation(ops2, x2, y2)\n    ['C1', 'I2', 'R23']\n    \"\"\"\n    if i == 0 and j == 0:\n        return []\n    elif ops[i][j][0] in {\"C\", \"R\"}:\n        seq = assemble_transformation(ops, i - 1, j - 1)\n        seq.append(ops[i][j])\n        return seq\n    elif ops[i][j][0] == \"D\":\n        seq = assemble_transformation(ops, i - 1, j)\n        seq.append(ops[i][j])\n        return seq\n    else:\n        seq = assemble_transformation(ops, i, j - 1)\n        seq.append(ops[i][j])\n        return seq\n\n\nif __name__ == \"__main__\":\n    _, operations = compute_transform_tables(\"Python\", \"Algorithms\", -1, 1, 2, 2)\n\n    m = len(operations)\n    n = len(operations[0])\n    sequence = assemble_transformation(operations, m - 1, n - 1)\n\n    string = list(\"Python\")\n    i = 0\n    cost = 0\n\n    with open(\"min_cost.txt\", \"w\") as file:\n        for op in sequence:\n            print(\"\".join(string))\n\n            if op[0] == \"C\":\n                file.write(\"%-16s\" % \"Copy %c\" % op[1])  # noqa: UP031\n                file.write(\"\\t\\t\\t\" + \"\".join(string))\n                file.write(\"\\r\\n\")\n\n                cost -= 1\n            elif op[0] == \"R\":\n                string[i] = op[2]\n\n                file.write(\"%-16s\" % (\"Replace %c\" % op[1] + \" with \" + str(op[2])))  # noqa: UP031\n                file.write(\"\\t\\t\" + \"\".join(string))\n                file.write(\"\\r\\n\")\n\n                cost += 1\n            elif op[0] == \"D\":\n                string.pop(i)\n\n                file.write(\"%-16s\" % \"Delete %c\" % op[1])  # noqa: UP031\n                file.write(\"\\t\\t\\t\" + \"\".join(string))\n                file.write(\"\\r\\n\")\n\n                cost += 2\n            else:\n                string.insert(i, op[1])\n\n                file.write(\"%-16s\" % \"Insert %c\" % op[1])  # noqa: UP031\n                file.write(\"\\t\\t\\t\" + \"\".join(string))\n                file.write(\"\\r\\n\")\n\n                cost += 2\n\n            i += 1\n\n        print(\"\".join(string))\n        print(\"Cost: \", cost)\n\n        file.write(\"\\r\\nMinimum cost: \" + str(cost))\n"
  },
  {
    "path": "strings/naive_string_search.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/String-searching_algorithm#Na%C3%AFve_string_search\nthis algorithm tries to find the pattern from every position of\nthe mainString if pattern is found from position i it add it to\nthe answer and does the same for position i+1\nComplexity : O(n*m)\n    n=length of main string\n    m=length of pattern string\n\"\"\"\n\n\ndef naive_pattern_search(s: str, pattern: str) -> list:\n    \"\"\"\n    >>> naive_pattern_search(\"ABAAABCDBBABCDDEBCABC\", \"ABC\")\n    [4, 10, 18]\n    >>> naive_pattern_search(\"ABC\", \"ABAAABCDBBABCDDEBCABC\")\n    []\n    >>> naive_pattern_search(\"\", \"ABC\")\n    []\n    >>> naive_pattern_search(\"TEST\", \"TEST\")\n    [0]\n    >>> naive_pattern_search(\"ABCDEGFTEST\", \"TEST\")\n    [7]\n    \"\"\"\n    pat_len = len(pattern)\n    position = []\n    for i in range(len(s) - pat_len + 1):\n        match_found = True\n        for j in range(pat_len):\n            if s[i + j] != pattern[j]:\n                match_found = False\n                break\n        if match_found:\n            position.append(i)\n    return position\n\n\nif __name__ == \"__main__\":\n    assert naive_pattern_search(\"ABCDEFG\", \"DE\") == [3]\n    print(naive_pattern_search(\"ABAAABCDBBABCDDEBCABC\", \"ABC\"))\n"
  },
  {
    "path": "strings/ngram.py",
    "content": "\"\"\"\nhttps://en.wikipedia.org/wiki/N-gram\n\"\"\"\n\n\ndef create_ngram(sentence: str, ngram_size: int) -> list[str]:\n    \"\"\"\n    Create ngrams from a sentence\n\n    >>> create_ngram(\"I am a sentence\", 2)\n    ['I ', ' a', 'am', 'm ', ' a', 'a ', ' s', 'se', 'en', 'nt', 'te', 'en', 'nc', 'ce']\n    >>> create_ngram(\"I am an NLPer\", 2)\n    ['I ', ' a', 'am', 'm ', ' a', 'an', 'n ', ' N', 'NL', 'LP', 'Pe', 'er']\n    >>> create_ngram(\"This is short\", 50)\n    []\n    \"\"\"\n    return [sentence[i : i + ngram_size] for i in range(len(sentence) - ngram_size + 1)]\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "strings/palindrome.py",
    "content": "# Algorithms to determine if a string is palindrome\n\nfrom timeit import timeit\n\ntest_data = {\n    \"MALAYALAM\": True,\n    \"String\": False,\n    \"rotor\": True,\n    \"level\": True,\n    \"A\": True,\n    \"BB\": True,\n    \"ABC\": False,\n    \"amanaplanacanalpanama\": True,  # \"a man a plan a canal panama\"\n    \"abcdba\": False,\n    \"AB\": False,\n}\n# Ensure our test data is valid\nassert all((key == key[::-1]) == value for key, value in test_data.items())\n\n\ndef is_palindrome(s: str) -> bool:\n    \"\"\"\n    Return True if s is a palindrome otherwise return False.\n\n    >>> all(is_palindrome(key) == value for key, value in test_data.items())\n    True\n    \"\"\"\n\n    start_i = 0\n    end_i = len(s) - 1\n    while start_i < end_i:\n        if s[start_i] == s[end_i]:\n            start_i += 1\n            end_i -= 1\n        else:\n            return False\n    return True\n\n\ndef is_palindrome_traversal(s: str) -> bool:\n    \"\"\"\n    Return True if s is a palindrome otherwise return False.\n\n    >>> all(is_palindrome_traversal(key) == value for key, value in test_data.items())\n    True\n    \"\"\"\n    end = len(s) // 2\n    n = len(s)\n\n    # We need to traverse till half of the length of string\n    # as we can get access of the i'th last element from\n    # i'th index.\n    # eg: [0,1,2,3,4,5] => 4th index can be accessed\n    # with the help of 1st index (i==n-i-1)\n    # where n is length of string\n    return all(s[i] == s[n - i - 1] for i in range(end))\n\n\ndef is_palindrome_recursive(s: str) -> bool:\n    \"\"\"\n    Return True if s is a palindrome otherwise return False.\n\n    >>> all(is_palindrome_recursive(key) == value for key, value in test_data.items())\n    True\n    \"\"\"\n    if len(s) <= 1:\n        return True\n    if s[0] == s[len(s) - 1]:\n        return is_palindrome_recursive(s[1:-1])\n    else:\n        return False\n\n\ndef is_palindrome_slice(s: str) -> bool:\n    \"\"\"\n    Return True if s is a palindrome otherwise return False.\n\n    >>> all(is_palindrome_slice(key) == value for key, value in test_data.items())\n    True\n    \"\"\"\n    return s == s[::-1]\n\n\ndef benchmark_function(name: str) -> None:\n    stmt = f\"all({name}(key) == value for key, value in test_data.items())\"\n    setup = f\"from __main__ import test_data, {name}\"\n    number = 500000\n    result = timeit(stmt=stmt, setup=setup, number=number)\n    print(f\"{name:<35} finished {number:,} runs in {result:.5f} seconds\")\n\n\nif __name__ == \"__main__\":\n    for key, value in test_data.items():\n        assert is_palindrome(key) == is_palindrome_recursive(key)\n        assert is_palindrome(key) == is_palindrome_slice(key)\n        print(f\"{key:21} {value}\")\n    print(\"a man a plan a canal panama\")\n\n    # finished 500,000 runs in 0.46793 seconds\n    benchmark_function(\"is_palindrome_slice\")\n    # finished 500,000 runs in 0.85234 seconds\n    benchmark_function(\"is_palindrome\")\n    # finished 500,000 runs in 1.32028 seconds\n    benchmark_function(\"is_palindrome_recursive\")\n    # finished 500,000 runs in 2.08679 seconds\n    benchmark_function(\"is_palindrome_traversal\")\n"
  },
  {
    "path": "strings/pig_latin.py",
    "content": "def pig_latin(word: str) -> str:\r\n    \"\"\"Compute the piglatin of a given string.\r\n\r\n    https://en.wikipedia.org/wiki/Pig_Latin\r\n\r\n    Usage examples:\r\n    >>> pig_latin(\"pig\")\r\n    'igpay'\r\n    >>> pig_latin(\"latin\")\r\n    'atinlay'\r\n    >>> pig_latin(\"banana\")\r\n    'ananabay'\r\n    >>> pig_latin(\"friends\")\r\n    'iendsfray'\r\n    >>> pig_latin(\"smile\")\r\n    'ilesmay'\r\n    >>> pig_latin(\"string\")\r\n    'ingstray'\r\n    >>> pig_latin(\"eat\")\r\n    'eatway'\r\n    >>> pig_latin(\"omelet\")\r\n    'omeletway'\r\n    >>> pig_latin(\"are\")\r\n    'areway'\r\n    >>> pig_latin(\" \")\r\n    ''\r\n    >>> pig_latin(None)\r\n    ''\r\n    \"\"\"\r\n    if not (word or \"\").strip():\r\n        return \"\"\r\n    word = word.lower()\r\n    if word[0] in \"aeiou\":\r\n        return f\"{word}way\"\r\n    for i, char in enumerate(word):  # noqa: B007\r\n        if char in \"aeiou\":\r\n            break\r\n    return f\"{word[i:]}{word[:i]}ay\"\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    print(f\"{pig_latin('friends') = }\")\r\n    word = input(\"Enter a word: \")\r\n    print(f\"{pig_latin(word) = }\")\r\n"
  },
  {
    "path": "strings/prefix_function.py",
    "content": "\"\"\"\nhttps://cp-algorithms.com/string/prefix-function.html\n\nPrefix function Knuth-Morris-Pratt algorithm\n\nDifferent algorithm than Knuth-Morris-Pratt pattern finding\n\nE.x. Finding longest prefix which is also suffix\n\nTime Complexity: O(n) - where n is the length of the string\n\"\"\"\n\n\ndef prefix_function(input_string: str) -> list:\n    \"\"\"\n    For the given string this function computes value for each index(i),\n    which represents the longest coincidence of prefix and suffix\n    for given substring (input_str[0...i])\n\n    For the value of the first element the algorithm always returns 0\n\n    >>> prefix_function(\"aabcdaabc\")\n    [0, 1, 0, 0, 0, 1, 2, 3, 4]\n    >>> prefix_function(\"asdasdad\")\n    [0, 0, 0, 1, 2, 3, 4, 0]\n    \"\"\"\n\n    # list for the result values\n    prefix_result = [0] * len(input_string)\n\n    for i in range(1, len(input_string)):\n        # use last results for better performance - dynamic programming\n        j = prefix_result[i - 1]\n        while j > 0 and input_string[i] != input_string[j]:\n            j = prefix_result[j - 1]\n\n        if input_string[i] == input_string[j]:\n            j += 1\n        prefix_result[i] = j\n\n    return prefix_result\n\n\ndef longest_prefix(input_str: str) -> int:\n    \"\"\"\n    Prefix-function use case\n    Finding longest prefix which is suffix as well\n\n    >>> longest_prefix(\"aabcdaabc\")\n    4\n    >>> longest_prefix(\"asdasdad\")\n    4\n    >>> longest_prefix(\"abcab\")\n    2\n    \"\"\"\n\n    # just returning maximum value of the array gives us answer\n    return max(prefix_function(input_str))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "strings/rabin_karp.py",
    "content": "# Numbers of alphabet which we call base\nalphabet_size = 256\n# Modulus to hash a string\nmodulus = 1000003\n\n\ndef rabin_karp(pattern: str, text: str) -> bool:\n    \"\"\"\n    The Rabin-Karp Algorithm for finding a pattern within a piece of text\n    with complexity O(nm), most efficient when it is used with multiple patterns\n    as it is able to check if any of a set of patterns match a section of text in o(1)\n    given the precomputed hashes.\n\n    This will be the simple version which only assumes one pattern is being searched\n    for but it's not hard to modify\n\n    1) Calculate pattern hash\n\n    2) Step through the text one character at a time passing a window with the same\n        length as the pattern\n        calculating the hash of the text within the window compare it with the hash\n        of the pattern. Only testing equality if the hashes match\n    \"\"\"\n    p_len = len(pattern)\n    t_len = len(text)\n    if p_len > t_len:\n        return False\n\n    p_hash = 0\n    text_hash = 0\n    modulus_power = 1\n\n    # Calculating the hash of pattern and substring of text\n    for i in range(p_len):\n        p_hash = (ord(pattern[i]) + p_hash * alphabet_size) % modulus\n        text_hash = (ord(text[i]) + text_hash * alphabet_size) % modulus\n        if i == p_len - 1:\n            continue\n        modulus_power = (modulus_power * alphabet_size) % modulus\n\n    for i in range(t_len - p_len + 1):\n        if text_hash == p_hash and text[i : i + p_len] == pattern:\n            return True\n        if i == t_len - p_len:\n            continue\n        # Calculate the https://en.wikipedia.org/wiki/Rolling_hash\n        text_hash = (\n            (text_hash - ord(text[i]) * modulus_power) * alphabet_size\n            + ord(text[i + p_len])\n        ) % modulus\n    return False\n\n\ndef test_rabin_karp() -> None:\n    \"\"\"\n    >>> test_rabin_karp()\n    Success.\n    \"\"\"\n    # Test 1)\n    pattern = \"abc1abc12\"\n    text1 = \"alskfjaldsabc1abc1abc12k23adsfabcabc\"\n    text2 = \"alskfjaldsk23adsfabcabc\"\n    assert rabin_karp(pattern, text1)\n    assert not rabin_karp(pattern, text2)\n\n    # Test 2)\n    pattern = \"ABABX\"\n    text = \"ABABZABABYABABX\"\n    assert rabin_karp(pattern, text)\n\n    # Test 3)\n    pattern = \"AAAB\"\n    text = \"ABAAAAAB\"\n    assert rabin_karp(pattern, text)\n\n    # Test 4)\n    pattern = \"abcdabcy\"\n    text = \"abcxabcdabxabcdabcdabcy\"\n    assert rabin_karp(pattern, text)\n\n    # Test 5)\n    pattern = \"Lü\"\n    text = \"Lüsai\"\n    assert rabin_karp(pattern, text)\n    pattern = \"Lue\"\n    assert not rabin_karp(pattern, text)\n    print(\"Success.\")\n\n\nif __name__ == \"__main__\":\n    test_rabin_karp()\n"
  },
  {
    "path": "strings/remove_duplicate.py",
    "content": "def remove_duplicates(sentence: str) -> str:\n    \"\"\"\n    Remove duplicates from sentence\n    >>> remove_duplicates(\"Python is great and Java is also great\")\n    'Java Python also and great is'\n    >>> remove_duplicates(\"Python   is      great and Java is also great\")\n    'Java Python also and great is'\n    \"\"\"\n    return \" \".join(sorted(set(sentence.split())))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "strings/reverse_letters.py",
    "content": "def reverse_letters(sentence: str, length: int = 0) -> str:\n    \"\"\"\n    Reverse all words that are longer than the given length of characters in a sentence.\n    If ``length`` is not specified, it defaults to 0.\n\n    >>> reverse_letters(\"Hey wollef sroirraw\", 3)\n    'Hey fellow warriors'\n    >>> reverse_letters(\"nohtyP is nohtyP\", 2)\n    'Python is Python'\n    >>> reverse_letters(\"1 12 123 1234 54321 654321\", 0)\n    '1 21 321 4321 12345 123456'\n    >>> reverse_letters(\"racecar\")\n    'racecar'\n    \"\"\"\n    return \" \".join(\n        word[::-1] if len(word) > length else word for word in sentence.split()\n    )\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    print(reverse_letters(\"Hey wollef sroirraw\"))\n"
  },
  {
    "path": "strings/reverse_words.py",
    "content": "def reverse_words(sentence: str) -> str:\n    \"\"\"Reverse the order of words in a given string.\n\n    Extra whitespace between words is ignored.\n\n    >>> reverse_words(\"I love Python\")\n    'Python love I'\n    >>> reverse_words(\"I     Love          Python\")\n    'Python Love I'\n    \"\"\"\n    return \" \".join(sentence.split()[::-1])\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "strings/snake_case_to_camel_pascal_case.py",
    "content": "def snake_to_camel_case(input_str: str, use_pascal: bool = False) -> str:\n    \"\"\"\n    Transforms a snake_case given string to camelCase (or PascalCase if indicated)\n    (defaults to not use Pascal)\n\n    >>> snake_to_camel_case(\"some_random_string\")\n    'someRandomString'\n\n    >>> snake_to_camel_case(\"some_random_string\", use_pascal=True)\n    'SomeRandomString'\n\n    >>> snake_to_camel_case(\"some_random_string_with_numbers_123\")\n    'someRandomStringWithNumbers123'\n\n    >>> snake_to_camel_case(\"some_random_string_with_numbers_123\", use_pascal=True)\n    'SomeRandomStringWithNumbers123'\n\n    >>> snake_to_camel_case(123)\n    Traceback (most recent call last):\n        ...\n    ValueError: Expected string as input, found <class 'int'>\n\n    >>> snake_to_camel_case(\"some_string\", use_pascal=\"True\")\n    Traceback (most recent call last):\n        ...\n    ValueError: Expected boolean as use_pascal parameter, found <class 'str'>\n    \"\"\"\n\n    if not isinstance(input_str, str):\n        msg = f\"Expected string as input, found {type(input_str)}\"\n        raise ValueError(msg)\n    if not isinstance(use_pascal, bool):\n        msg = f\"Expected boolean as use_pascal parameter, found {type(use_pascal)}\"\n        raise ValueError(msg)\n\n    words = input_str.split(\"_\")\n\n    start_index = 0 if use_pascal else 1\n\n    words_to_capitalize = words[start_index:]\n\n    capitalized_words = [word[0].upper() + word[1:] for word in words_to_capitalize]\n\n    initial_word = \"\" if use_pascal else words[0]\n\n    return \"\".join([initial_word, *capitalized_words])\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "strings/split.py",
    "content": "def split(string: str, separator: str = \" \") -> list:\n    \"\"\"\n    Will split the string up into all the values separated by the separator\n    (defaults to spaces)\n\n    >>> split(\"apple#banana#cherry#orange\",separator='#')\n    ['apple', 'banana', 'cherry', 'orange']\n\n    >>> split(\"Hello there\")\n    ['Hello', 'there']\n\n    >>> split(\"11/22/63\",separator = '/')\n    ['11', '22', '63']\n\n    >>> split(\"12:43:39\",separator = \":\")\n    ['12', '43', '39']\n\n    >>> split(\";abbb;;c;\", separator=';')\n    ['', 'abbb', '', 'c', '']\n    \"\"\"\n\n    split_words = []\n\n    last_index = 0\n    for index, char in enumerate(string):\n        if char == separator:\n            split_words.append(string[last_index:index])\n            last_index = index + 1\n        if index + 1 == len(string):\n            split_words.append(string[last_index : index + 1])\n    return split_words\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "strings/string_switch_case.py",
    "content": "import re\n\n\"\"\"\ngeneral info:\nhttps://en.wikipedia.org/wiki/Naming_convention_(programming)#Python_and_Ruby\n\npascal case [ an upper Camel Case ]: https://en.wikipedia.org/wiki/Camel_case\n\ncamel case: https://en.wikipedia.org/wiki/Camel_case\n\nkebab case [ can be found in general info ]:\nhttps://en.wikipedia.org/wiki/Naming_convention_(programming)#Python_and_Ruby\n\nsnake case: https://en.wikipedia.org/wiki/Snake_case\n\"\"\"\n\n\n# assistant functions\ndef split_input(str_: str) -> list:\n    \"\"\"\n    >>> split_input(\"one two 31235three4four\")\n    [['one', 'two', '31235three4four']]\n    \"\"\"\n    return [char.split() for char in re.split(r\"[^ a-z A-Z 0-9 \\s]\", str_)]\n\n\ndef to_simple_case(str_: str) -> str:\n    \"\"\"\n    >>> to_simple_case(\"one two 31235three4four\")\n    'OneTwo31235three4four'\n    >>> to_simple_case(\"This should be combined\")\n    'ThisShouldBeCombined'\n    >>> to_simple_case(\"The first letters are capitalized, then string is merged\")\n    'TheFirstLettersAreCapitalizedThenStringIsMerged'\n    >>> to_simple_case(\"special characters :, ', %, ^, $, are ignored\")\n    'SpecialCharactersAreIgnored'\n    \"\"\"\n    string_split = split_input(str_)\n    return \"\".join(\n        [\"\".join([char.capitalize() for char in sub_str]) for sub_str in string_split]\n    )\n\n\ndef to_complex_case(text: str, upper: bool, separator: str) -> str:\n    \"\"\"\n    Returns the string concatenated with the delimiter we provide.\n\n    Parameters:\n    @text: The string on which we want to perform operation\n    @upper: Boolean value to determine whether we want capitalized result or not\n    @separator: The delimiter with which we want to concatenate words\n\n    Examples:\n    >>> to_complex_case(\"one two 31235three4four\", True, \"_\")\n    'ONE_TWO_31235THREE4FOUR'\n    >>> to_complex_case(\"one two 31235three4four\", False, \"-\")\n    'one-two-31235three4four'\n    \"\"\"\n    try:\n        string_split = split_input(text)\n        if upper:\n            res_str = \"\".join(\n                [\n                    separator.join([char.upper() for char in sub_str])\n                    for sub_str in string_split\n                ]\n            )\n        else:\n            res_str = \"\".join(\n                [\n                    separator.join([char.lower() for char in sub_str])\n                    for sub_str in string_split\n                ]\n            )\n        return res_str\n    except IndexError:\n        return \"not valid string\"\n\n\n# main content\ndef to_pascal_case(text: str) -> str:\n    \"\"\"\n    >>> to_pascal_case(\"one two 31235three4four\")\n    'OneTwo31235three4four'\n    \"\"\"\n    return to_simple_case(text)\n\n\ndef to_camel_case(text: str) -> str:\n    \"\"\"\n    >>> to_camel_case(\"one two 31235three4four\")\n    'oneTwo31235three4four'\n    \"\"\"\n    try:\n        res_str = to_simple_case(text)\n        return res_str[0].lower() + res_str[1:]\n    except IndexError:\n        return \"not valid string\"\n\n\ndef to_snake_case(text: str, upper: bool) -> str:\n    \"\"\"\n    >>> to_snake_case(\"one two 31235three4four\", True)\n    'ONE_TWO_31235THREE4FOUR'\n    >>> to_snake_case(\"one two 31235three4four\", False)\n    'one_two_31235three4four'\n    \"\"\"\n    return to_complex_case(text, upper, \"_\")\n\n\ndef to_kebab_case(text: str, upper: bool) -> str:\n    \"\"\"\n    >>> to_kebab_case(\"one two 31235three4four\", True)\n    'ONE-TWO-31235THREE4FOUR'\n    >>> to_kebab_case(\"one two 31235three4four\", False)\n    'one-two-31235three4four'\n    \"\"\"\n    return to_complex_case(text, upper, \"-\")\n\n\nif __name__ == \"__main__\":\n    __import__(\"doctest\").testmod()\n"
  },
  {
    "path": "strings/strip.py",
    "content": "def strip(user_string: str, characters: str = \" \\t\\n\\r\") -> str:\n    \"\"\"\n    Remove leading and trailing characters (whitespace by default) from a string.\n\n    Args:\n        user_string (str): The input string to be stripped.\n        characters (str, optional): Optional characters to be removed\n                (default is whitespace).\n\n    Returns:\n        str: The stripped string.\n\n    Examples:\n        >>> strip(\"   hello   \")\n        'hello'\n        >>> strip(\"...world...\", \".\")\n        'world'\n        >>> strip(\"123hello123\", \"123\")\n        'hello'\n        >>> strip(\"\")\n        ''\n    \"\"\"\n\n    start = 0\n    end = len(user_string)\n\n    while start < end and user_string[start] in characters:\n        start += 1\n\n    while end > start and user_string[end - 1] in characters:\n        end -= 1\n\n    return user_string[start:end]\n"
  },
  {
    "path": "strings/text_justification.py",
    "content": "def text_justification(word: str, max_width: int) -> list:\n    \"\"\"\n    Will format the string such that each line has exactly\n    (max_width) characters and is fully (left and right) justified,\n    and return the list of justified text.\n\n    example 1:\n    string = \"This is an example of text justification.\"\n    max_width = 16\n\n    output = ['This    is    an',\n              'example  of text',\n              'justification.  ']\n\n    >>> text_justification(\"This is an example of text justification.\", 16)\n    ['This    is    an', 'example  of text', 'justification.  ']\n\n    example 2:\n    string = \"Two roads diverged in a yellow wood\"\n    max_width = 16\n    output = ['Two        roads',\n              'diverged   in  a',\n              'yellow wood     ']\n\n    >>> text_justification(\"Two roads diverged in a yellow wood\", 16)\n    ['Two        roads', 'diverged   in  a', 'yellow wood     ']\n\n    Time complexity: O(m*n)\n    Space complexity: O(m*n)\n    \"\"\"\n\n    # Converting string into list of strings split by a space\n    words = word.split()\n\n    def justify(line: list, width: int, max_width: int) -> str:\n        overall_spaces_count = max_width - width\n        words_count = len(line)\n        if len(line) == 1:\n            # if there is only word in line\n            # just insert overall_spaces_count for the remainder of line\n            return line[0] + \" \" * overall_spaces_count\n        else:\n            spaces_to_insert_between_words = words_count - 1\n            # num_spaces_between_words_list[i] : tells you to insert\n            # num_spaces_between_words_list[i] spaces\n            # after word on line[i]\n            num_spaces_between_words_list = spaces_to_insert_between_words * [\n                overall_spaces_count // spaces_to_insert_between_words\n            ]\n            spaces_count_in_locations = (\n                overall_spaces_count % spaces_to_insert_between_words\n            )\n            # distribute spaces via round robin to the left words\n            for i in range(spaces_count_in_locations):\n                num_spaces_between_words_list[i] += 1\n            aligned_words_list = []\n            for i in range(spaces_to_insert_between_words):\n                # add the word\n                aligned_words_list.append(line[i])\n                # add the spaces to insert\n                aligned_words_list.append(num_spaces_between_words_list[i] * \" \")\n            # just add the last word to the sentence\n            aligned_words_list.append(line[-1])\n            # join the aligned words list to form a justified line\n            return \"\".join(aligned_words_list)\n\n    answer = []\n    line: list[str] = []\n    width = 0\n    for inner_word in words:\n        if width + len(inner_word) + len(line) <= max_width:\n            # keep adding words until we can fill out max_width\n            # width = sum of length of all words (without overall_spaces_count)\n            # len(inner_word) = length of current inner_word\n            # len(line) = number of overall_spaces_count to insert between words\n            line.append(inner_word)\n            width += len(inner_word)\n        else:\n            # justify the line and add it to result\n            answer.append(justify(line, width, max_width))\n            # reset new line and new width\n            line, width = [inner_word], len(inner_word)\n    remaining_spaces = max_width - width - len(line)\n    answer.append(\" \".join(line) + (remaining_spaces + 1) * \" \")\n    return answer\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "strings/title.py",
    "content": "def to_title_case(word: str) -> str:\r\n    \"\"\"\r\n    Converts a string to capitalized case, preserving the input as is\r\n\r\n    >>> to_title_case(\"Aakash\")\r\n    'Aakash'\r\n\r\n    >>> to_title_case(\"aakash\")\r\n    'Aakash'\r\n\r\n    >>> to_title_case(\"AAKASH\")\r\n    'Aakash'\r\n\r\n    >>> to_title_case(\"aAkAsH\")\r\n    'Aakash'\r\n    \"\"\"\r\n\r\n    \"\"\"\r\n    Convert the first character to uppercase if it's lowercase\r\n    \"\"\"\r\n    if \"a\" <= word[0] <= \"z\":\r\n        word = chr(ord(word[0]) - 32) + word[1:]\r\n\r\n    \"\"\"\r\n    Convert the remaining characters to lowercase if they are uppercase\r\n    \"\"\"\r\n    for i in range(1, len(word)):\r\n        if \"A\" <= word[i] <= \"Z\":\r\n            word = word[:i] + chr(ord(word[i]) + 32) + word[i + 1 :]\r\n\r\n    return word\r\n\r\n\r\ndef sentence_to_title_case(input_str: str) -> str:\r\n    \"\"\"\r\n    Converts a string to title case, preserving the input as is\r\n\r\n    >>> sentence_to_title_case(\"Aakash Giri\")\r\n    'Aakash Giri'\r\n\r\n    >>> sentence_to_title_case(\"aakash giri\")\r\n    'Aakash Giri'\r\n\r\n    >>> sentence_to_title_case(\"AAKASH GIRI\")\r\n    'Aakash Giri'\r\n\r\n    >>> sentence_to_title_case(\"aAkAsH gIrI\")\r\n    'Aakash Giri'\r\n    \"\"\"\r\n\r\n    return \" \".join(to_title_case(word) for word in input_str.split())\r\n\r\n\r\nif __name__ == \"__main__\":\r\n    from doctest import testmod\r\n\r\n    testmod()\r\n"
  },
  {
    "path": "strings/top_k_frequent_words.py",
    "content": "\"\"\"\nFinds the top K most frequent words from the provided word list.\n\nThis implementation aims to show how to solve the problem using the Heap class\nalready present in this repository.\nComputing order statistics is, in fact, a typical usage of heaps.\n\nThis is mostly shown for educational purposes, since the problem can be solved\nin a few lines using collections.Counter from the Python standard library:\n\nfrom collections import Counter\ndef top_k_frequent_words(words, k_value):\n    return [x[0] for x in Counter(words).most_common(k_value)]\n\"\"\"\n\nfrom collections import Counter\nfrom functools import total_ordering\n\nfrom data_structures.heap.heap import Heap\n\n\n@total_ordering\nclass WordCount:\n    def __init__(self, word: str, count: int) -> None:\n        self.word = word\n        self.count = count\n\n    def __eq__(self, other: object) -> bool:\n        \"\"\"\n        >>> WordCount('a', 1).__eq__(WordCount('b', 1))\n        True\n        >>> WordCount('a', 1).__eq__(WordCount('a', 1))\n        True\n        >>> WordCount('a', 1).__eq__(WordCount('a', 2))\n        False\n        >>> WordCount('a', 1).__eq__(WordCount('b', 2))\n        False\n        >>> WordCount('a', 1).__eq__(1)\n        NotImplemented\n        \"\"\"\n        if not isinstance(other, WordCount):\n            return NotImplemented\n        return self.count == other.count\n\n    def __lt__(self, other: object) -> bool:\n        \"\"\"\n        >>> WordCount('a', 1).__lt__(WordCount('b', 1))\n        False\n        >>> WordCount('a', 1).__lt__(WordCount('a', 1))\n        False\n        >>> WordCount('a', 1).__lt__(WordCount('a', 2))\n        True\n        >>> WordCount('a', 1).__lt__(WordCount('b', 2))\n        True\n        >>> WordCount('a', 2).__lt__(WordCount('a', 1))\n        False\n        >>> WordCount('a', 2).__lt__(WordCount('b', 1))\n        False\n        >>> WordCount('a', 1).__lt__(1)\n        NotImplemented\n        \"\"\"\n        if not isinstance(other, WordCount):\n            return NotImplemented\n        return self.count < other.count\n\n\ndef top_k_frequent_words(words: list[str], k_value: int) -> list[str]:\n    \"\"\"\n    Returns the `k_value` most frequently occurring words,\n    in non-increasing order of occurrence.\n    In this context, a word is defined as an element in the provided list.\n\n    In case `k_value` is greater than the number of distinct words, a value of k equal\n    to the number of distinct words will be considered, instead.\n\n    >>> top_k_frequent_words(['a', 'b', 'c', 'a', 'c', 'c'], 3)\n    ['c', 'a', 'b']\n    >>> top_k_frequent_words(['a', 'b', 'c', 'a', 'c', 'c'], 2)\n    ['c', 'a']\n    >>> top_k_frequent_words(['a', 'b', 'c', 'a', 'c', 'c'], 1)\n    ['c']\n    >>> top_k_frequent_words(['a', 'b', 'c', 'a', 'c', 'c'], 0)\n    []\n    >>> top_k_frequent_words([], 1)\n    []\n    >>> top_k_frequent_words(['a', 'a'], 2)\n    ['a']\n    \"\"\"\n    heap: Heap[WordCount] = Heap()\n    count_by_word = Counter(words)\n    heap.build_max_heap(\n        [WordCount(word, count) for word, count in count_by_word.items()]\n    )\n    return [heap.extract_max().word for _ in range(min(k_value, len(count_by_word)))]\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "strings/upper.py",
    "content": "def upper(word: str) -> str:\n    \"\"\"\n    Convert an entire string to ASCII uppercase letters by looking for lowercase ASCII\n    letters and subtracting 32 from their integer representation to get the uppercase\n    letter.\n\n    >>> upper(\"wow\")\n    'WOW'\n    >>> upper(\"Hello\")\n    'HELLO'\n    >>> upper(\"WHAT\")\n    'WHAT'\n    >>> upper(\"wh[]32\")\n    'WH[]32'\n    \"\"\"\n    return \"\".join(chr(ord(char) - 32) if \"a\" <= char <= \"z\" else char for char in word)\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n"
  },
  {
    "path": "strings/wave_string.py",
    "content": "def wave(txt: str) -> list:\n    \"\"\"\n    Returns a so called 'wave' of a given string\n    >>> wave('cat')\n    ['Cat', 'cAt', 'caT']\n    >>> wave('one')\n    ['One', 'oNe', 'onE']\n    >>> wave('book')\n    ['Book', 'bOok', 'boOk', 'booK']\n    \"\"\"\n\n    return [\n        txt[:a] + txt[a].upper() + txt[a + 1 :]\n        for a in range(len(txt))\n        if txt[a].isalpha()\n    ]\n\n\nif __name__ == \"__main__\":\n    __import__(\"doctest\").testmod()\n"
  },
  {
    "path": "strings/wildcard_pattern_matching.py",
    "content": "\"\"\"\nImplementation of regular expression matching with support for '.' and '*'.\n'.' Matches any single character.\n'*' Matches zero or more of the preceding element.\nThe matching should cover the entire input string (not partial).\n\n\"\"\"\n\n\ndef match_pattern(input_string: str, pattern: str) -> bool:\n    \"\"\"\n    uses bottom-up dynamic programming solution for matching the input\n    string with a given pattern.\n\n    Runtime: O(len(input_string)*len(pattern))\n\n    Arguments\n    --------\n    input_string: str, any string which should be compared with the pattern\n    pattern: str, the string that represents a pattern and may contain\n    '.' for single character matches and '*' for zero or more of preceding character\n    matches\n\n    Note\n    ----\n    the pattern cannot start with a '*',\n    because there should be at least one character before *\n\n    Returns\n    -------\n    A Boolean denoting whether the given string follows the pattern\n\n    Examples\n    -------\n    >>> match_pattern(\"aab\", \"c*a*b\")\n    True\n    >>> match_pattern(\"dabc\", \"*abc\")\n    False\n    >>> match_pattern(\"aaa\", \"aa\")\n    False\n    >>> match_pattern(\"aaa\", \"a.a\")\n    True\n    >>> match_pattern(\"aaab\", \"aa*\")\n    False\n    >>> match_pattern(\"aaab\", \".*\")\n    True\n    >>> match_pattern(\"a\", \"bbbb\")\n    False\n    >>> match_pattern(\"\", \"bbbb\")\n    False\n    >>> match_pattern(\"a\", \"\")\n    False\n    >>> match_pattern(\"\", \"\")\n    True\n    \"\"\"\n\n    len_string = len(input_string) + 1\n    len_pattern = len(pattern) + 1\n\n    # dp is a 2d matrix where dp[i][j] denotes whether prefix string of\n    # length i of input_string matches with prefix string of length j of\n    # given pattern.\n    # \"dp\" stands for dynamic programming.\n    dp = [[0 for i in range(len_pattern)] for j in range(len_string)]\n\n    # since string of zero length match pattern of zero length\n    dp[0][0] = 1\n\n    # since pattern of zero length will never match with string of non-zero length\n    for i in range(1, len_string):\n        dp[i][0] = 0\n\n    # since string of zero length will match with pattern where there\n    # is at least one * alternatively\n    for j in range(1, len_pattern):\n        dp[0][j] = dp[0][j - 2] if pattern[j - 1] == \"*\" else 0\n\n    # now using bottom-up approach to find for all remaining lengths\n    for i in range(1, len_string):\n        for j in range(1, len_pattern):\n            if input_string[i - 1] == pattern[j - 1] or pattern[j - 1] == \".\":\n                dp[i][j] = dp[i - 1][j - 1]\n\n            elif pattern[j - 1] == \"*\":\n                if dp[i][j - 2] == 1:\n                    dp[i][j] = 1\n                elif pattern[j - 2] in (input_string[i - 1], \".\"):\n                    dp[i][j] = dp[i - 1][j]\n                else:\n                    dp[i][j] = 0\n            else:\n                dp[i][j] = 0\n\n    return bool(dp[-1][-1])\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    # inputing the strings\n    # input_string = input(\"input a string :\")\n    # pattern = input(\"input a pattern :\")\n\n    input_string = \"aab\"\n    pattern = \"c*a*b\"\n\n    # using function to check whether given string matches the given pattern\n    if match_pattern(input_string, pattern):\n        print(f\"{input_string} matches the given pattern {pattern}\")\n    else:\n        print(f\"{input_string} does not match with the given pattern {pattern}\")\n"
  },
  {
    "path": "strings/word_occurrence.py",
    "content": "# Created by sarathkaul on 17/11/19\n# Modified by Arkadip Bhattacharya(@darkmatter18) on 20/04/2020\nfrom collections import defaultdict\n\n\ndef word_occurrence(sentence: str) -> dict:\n    \"\"\"\n    >>> from collections import Counter\n    >>> SENTENCE = \"a b A b c b d b d e f e g e h e i e j e 0\"\n    >>> occurence_dict = word_occurrence(SENTENCE)\n    >>> all(occurence_dict[word] == count for word, count\n    ...     in Counter(SENTENCE.split()).items())\n    True\n    >>> dict(word_occurrence(\"Two  spaces\"))\n    {'Two': 1, 'spaces': 1}\n    \"\"\"\n    occurrence: defaultdict[str, int] = defaultdict(int)\n    # Creating a dictionary containing count of each word\n    for word in sentence.split():\n        occurrence[word] += 1\n    return occurrence\n\n\nif __name__ == \"__main__\":\n    for word, count in word_occurrence(\"INPUT STRING\").items():\n        print(f\"{word}: {count}\")\n"
  },
  {
    "path": "strings/word_patterns.py",
    "content": "def get_word_pattern(word: str) -> str:\n    \"\"\"\n    Returns numerical pattern of character appearances in given word\n    >>> get_word_pattern(\"\")\n    ''\n    >>> get_word_pattern(\" \")\n    '0'\n    >>> get_word_pattern(\"pattern\")\n    '0.1.2.2.3.4.5'\n    >>> get_word_pattern(\"word pattern\")\n    '0.1.2.3.4.5.6.7.7.8.2.9'\n    >>> get_word_pattern(\"get word pattern\")\n    '0.1.2.3.4.5.6.7.3.8.9.2.2.1.6.10'\n    >>> get_word_pattern()\n    Traceback (most recent call last):\n    ...\n    TypeError: get_word_pattern() missing 1 required positional argument: 'word'\n    >>> get_word_pattern(1)\n    Traceback (most recent call last):\n    ...\n    AttributeError: 'int' object has no attribute 'upper'\n    >>> get_word_pattern(1.1)\n    Traceback (most recent call last):\n    ...\n    AttributeError: 'float' object has no attribute 'upper'\n    >>> get_word_pattern([])\n    Traceback (most recent call last):\n    ...\n    AttributeError: 'list' object has no attribute 'upper'\n    \"\"\"\n    word = word.upper()\n    next_num = 0\n    letter_nums = {}\n    word_pattern = []\n\n    for letter in word:\n        if letter not in letter_nums:\n            letter_nums[letter] = str(next_num)\n            next_num += 1\n        word_pattern.append(letter_nums[letter])\n    return \".\".join(word_pattern)\n\n\nif __name__ == \"__main__\":\n    import pprint\n    import time\n\n    start_time = time.time()\n    with open(\"dictionary.txt\") as in_file:\n        word_list = in_file.read().splitlines()\n\n    all_patterns: dict = {}\n    for word in word_list:\n        pattern = get_word_pattern(word)\n        if pattern in all_patterns:\n            all_patterns[pattern].append(word)\n        else:\n            all_patterns[pattern] = [word]\n\n    with open(\"word_patterns.txt\", \"w\") as out_file:\n        out_file.write(pprint.pformat(all_patterns))\n\n    total_time = round(time.time() - start_time, 2)\n    print(f\"Done!  {len(all_patterns):,} word patterns found in {total_time} seconds.\")\n    # Done!  9,581 word patterns found in 0.58 seconds.\n"
  },
  {
    "path": "strings/words.txt",
    "content": "A\na\naa\naal\naalii\naam\nAani\naardvark\naardwolf\nAaron\nAaronic\nAaronical\nAaronite\nAaronitic\nAaru\nAb\naba\nAbabdeh\nAbabua\nabac\nabaca\nabacate\nabacay\nabacinate\nabacination\nabaciscus\nabacist\naback\nabactinal\nabactinally\nabaction\nabactor\nabaculus\nabacus\nAbadite\nabaff\nabaft\nabaisance\nabaiser\nabaissed\nabalienate\nabalienation\nabalone\nAbama\nabampere\nabandon\nabandonable\nabandoned\nabandonedly\nabandonee\nabandoner\nabandonment\nAbanic\nAbantes\nabaptiston\nAbarambo\nAbaris\nabarthrosis\nabarticular\nabarticulation\nabas\nabase\nabased\nabasedly\nabasedness\nabasement\nabaser\nAbasgi\nabash\nabashed\nabashedly\nabashedness\nabashless\nabashlessly\nabashment\nabasia\nabasic\nabask\nAbassin\nabastardize\nabatable\nabate\nabatement\nabater\nabatis\nabatised\nabaton\nabator\nabattoir\nAbatua\nabature\nabave\nabaxial\nabaxile\nabaze\nabb\nAbba\nabbacomes\nabbacy\nAbbadide\nabbas\nabbasi\nabbassi\nAbbasside\nabbatial\nabbatical\nabbess\nabbey\nabbeystede\nAbbie\nabbot\nabbotcy\nabbotnullius\nabbotship\nabbreviate\nabbreviately\nabbreviation\nabbreviator\nabbreviatory\nabbreviature\nAbby\nabcoulomb\nabdal\nabdat\nAbderian\nAbderite\nabdest\nabdicable\nabdicant\nabdicate\nabdication\nabdicative\nabdicator\nAbdiel\nabditive\nabditory\nabdomen\nabdominal\nAbdominales\nabdominalian\nabdominally\nabdominoanterior\nabdominocardiac\nabdominocentesis\nabdominocystic\nabdominogenital\nabdominohysterectomy\nabdominohysterotomy\nabdominoposterior\nabdominoscope\nabdominoscopy\nabdominothoracic\nabdominous\nabdominovaginal\nabdominovesical\nabduce\nabducens\nabducent\nabduct\nabduction\nabductor\nAbe\nabeam\nabear\nabearance\nabecedarian\nabecedarium\nabecedary\nabed\nabeigh\nAbel\nabele\nAbelia\nAbelian\nAbelicea\nAbelite\nabelite\nAbelmoschus\nabelmosk\nAbelonian\nabeltree\nAbencerrages\nabenteric\nabepithymia\nAberdeen\naberdevine\nAberdonian\nAberia\naberrance\naberrancy\naberrant\naberrate\naberration\naberrational\naberrator\naberrometer\naberroscope\naberuncator\nabet\nabetment\nabettal\nabettor\nabevacuation\nabey\nabeyance\nabeyancy\nabeyant\nabfarad\nabhenry\nabhiseka\nabhominable\nabhor\nabhorrence\nabhorrency\nabhorrent\nabhorrently\nabhorrer\nabhorrible\nabhorring\nAbhorson\nabidal\nabidance\nabide\nabider\nabidi\nabiding\nabidingly\nabidingness\nAbie\nAbies\nabietate\nabietene\nabietic\nabietin\nAbietineae\nabietineous\nabietinic\nAbiezer\nAbigail\nabigail\nabigailship\nabigeat\nabigeus\nabilao\nability\nabilla\nabilo\nabintestate\nabiogenesis\nabiogenesist\nabiogenetic\nabiogenetical\nabiogenetically\nabiogenist\nabiogenous\nabiogeny\nabiological\nabiologically\nabiology\nabiosis\nabiotic\nabiotrophic\nabiotrophy\nAbipon\nabir\nabirritant\nabirritate\nabirritation\nabirritative\nabiston\nAbitibi\nabiuret\nabject\nabjectedness\nabjection\nabjective\nabjectly\nabjectness\nabjoint\nabjudge\nabjudicate\nabjudication\nabjunction\nabjunctive\nabjuration\nabjuratory\nabjure\nabjurement\nabjurer\nabkar\nabkari\nAbkhas\nAbkhasian\nablach\nablactate\nablactation\nablare\nablastemic\nablastous\nablate\nablation\nablatitious\nablatival\nablative\nablator\nablaut\nablaze\nable\nableeze\nablegate\nableness\nablepharia\nablepharon\nablepharous\nAblepharus\nablepsia\nableptical\nableptically\nabler\nablest\nablewhackets\nablins\nabloom\nablow\nablude\nabluent\nablush\nablution\nablutionary\nabluvion\nably\nabmho\nAbnaki\nabnegate\nabnegation\nabnegative\nabnegator\nAbner\nabnerval\nabnet\nabneural\nabnormal\nabnormalism\nabnormalist\nabnormality\nabnormalize\nabnormally\nabnormalness\nabnormity\nabnormous\nabnumerable\nAbo\naboard\nAbobra\nabode\nabodement\nabody\nabohm\naboil\nabolish\nabolisher\nabolishment\nabolition\nabolitionary\nabolitionism\nabolitionist\nabolitionize\nabolla\naboma\nabomasum\nabomasus\nabominable\nabominableness\nabominably\nabominate\nabomination\nabominator\nabomine\nAbongo\naboon\naborad\naboral\naborally\nabord\naboriginal\naboriginality\naboriginally\naboriginary\naborigine\nabort\naborted\naborticide\nabortient\nabortifacient\nabortin\nabortion\nabortional\nabortionist\nabortive\nabortively\nabortiveness\nabortus\nabouchement\nabound\nabounder\nabounding\naboundingly\nabout\nabouts\nabove\naboveboard\nabovedeck\naboveground\naboveproof\nabovestairs\nabox\nabracadabra\nabrachia\nabradant\nabrade\nabrader\nAbraham\nAbrahamic\nAbrahamidae\nAbrahamite\nAbrahamitic\nabraid\nAbram\nAbramis\nabranchial\nabranchialism\nabranchian\nAbranchiata\nabranchiate\nabranchious\nabrasax\nabrase\nabrash\nabrasiometer\nabrasion\nabrasive\nabrastol\nabraum\nabraxas\nabreact\nabreaction\nabreast\nabrenounce\nabret\nabrico\nabridge\nabridgeable\nabridged\nabridgedly\nabridger\nabridgment\nabrim\nabrin\nabristle\nabroach\nabroad\nAbrocoma\nabrocome\nabrogable\nabrogate\nabrogation\nabrogative\nabrogator\nAbroma\nAbronia\nabrook\nabrotanum\nabrotine\nabrupt\nabruptedly\nabruption\nabruptly\nabruptness\nAbrus\nAbsalom\nabsampere\nAbsaroka\nabsarokite\nabscess\nabscessed\nabscession\nabscessroot\nabscind\nabscise\nabscision\nabsciss\nabscissa\nabscissae\nabscisse\nabscission\nabsconce\nabscond\nabsconded\nabscondedly\nabscondence\nabsconder\nabsconsa\nabscoulomb\nabsence\nabsent\nabsentation\nabsentee\nabsenteeism\nabsenteeship\nabsenter\nabsently\nabsentment\nabsentmindedly\nabsentness\nabsfarad\nabshenry\nAbsi\nabsinthe\nabsinthial\nabsinthian\nabsinthiate\nabsinthic\nabsinthin\nabsinthine\nabsinthism\nabsinthismic\nabsinthium\nabsinthol\nabsit\nabsmho\nabsohm\nabsolute\nabsolutely\nabsoluteness\nabsolution\nabsolutism\nabsolutist\nabsolutistic\nabsolutistically\nabsolutive\nabsolutization\nabsolutize\nabsolutory\nabsolvable\nabsolvatory\nabsolve\nabsolvent\nabsolver\nabsolvitor\nabsolvitory\nabsonant\nabsonous\nabsorb\nabsorbability\nabsorbable\nabsorbed\nabsorbedly\nabsorbedness\nabsorbefacient\nabsorbency\nabsorbent\nabsorber\nabsorbing\nabsorbingly\nabsorbition\nabsorpt\nabsorptance\nabsorptiometer\nabsorptiometric\nabsorption\nabsorptive\nabsorptively\nabsorptiveness\nabsorptivity\nabsquatulate\nabstain\nabstainer\nabstainment\nabstemious\nabstemiously\nabstemiousness\nabstention\nabstentionist\nabstentious\nabsterge\nabstergent\nabstersion\nabstersive\nabstersiveness\nabstinence\nabstinency\nabstinent\nabstinential\nabstinently\nabstract\nabstracted\nabstractedly\nabstractedness\nabstracter\nabstraction\nabstractional\nabstractionism\nabstractionist\nabstractitious\nabstractive\nabstractively\nabstractiveness\nabstractly\nabstractness\nabstractor\nabstrahent\nabstricted\nabstriction\nabstruse\nabstrusely\nabstruseness\nabstrusion\nabstrusity\nabsume\nabsumption\nabsurd\nabsurdity\nabsurdly\nabsurdness\nabsvolt\nAbsyrtus\nabterminal\nabthain\nabthainrie\nabthainry\nabthanage\nAbu\nabu\nabucco\nabulia\nabulic\nabulomania\nabuna\nabundance\nabundancy\nabundant\nAbundantia\nabundantly\nabura\naburabozu\naburban\naburst\naburton\nabusable\nabuse\nabusedly\nabusee\nabuseful\nabusefully\nabusefulness\nabuser\nabusion\nabusious\nabusive\nabusively\nabusiveness\nabut\nAbuta\nAbutilon\nabutment\nabuttal\nabutter\nabutting\nabuzz\nabvolt\nabwab\naby\nabysm\nabysmal\nabysmally\nabyss\nabyssal\nAbyssinian\nabyssobenthonic\nabyssolith\nabyssopelagic\nacacatechin\nacacatechol\nacacetin\nAcacia\nAcacian\nacaciin\nacacin\nacademe\nacademial\nacademian\nAcademic\nacademic\nacademical\nacademically\nacademicals\nacademician\nacademicism\nacademism\nacademist\nacademite\nacademization\nacademize\nAcademus\nacademy\nAcadia\nacadialite\nAcadian\nAcadie\nAcaena\nacajou\nacaleph\nAcalepha\nAcalephae\nacalephan\nacalephoid\nacalycal\nacalycine\nacalycinous\nacalyculate\nAcalypha\nAcalypterae\nAcalyptrata\nAcalyptratae\nacalyptrate\nAcamar\nacampsia\nacana\nacanaceous\nacanonical\nacanth\nacantha\nAcanthaceae\nacanthaceous\nacanthad\nAcantharia\nAcanthia\nacanthial\nacanthin\nacanthine\nacanthion\nacanthite\nacanthocarpous\nAcanthocephala\nacanthocephalan\nAcanthocephali\nacanthocephalous\nAcanthocereus\nacanthocladous\nAcanthodea\nacanthodean\nAcanthodei\nAcanthodes\nacanthodian\nAcanthodidae\nAcanthodii\nAcanthodini\nacanthoid\nAcantholimon\nacanthological\nacanthology\nacantholysis\nacanthoma\nAcanthomeridae\nacanthon\nAcanthopanax\nAcanthophis\nacanthophorous\nacanthopod\nacanthopodous\nacanthopomatous\nacanthopore\nacanthopteran\nAcanthopteri\nacanthopterous\nacanthopterygian\nAcanthopterygii\nacanthosis\nacanthous\nAcanthuridae\nAcanthurus\nacanthus\nacapnia\nacapnial\nacapsular\nacapu\nacapulco\nacara\nAcarapis\nacardia\nacardiac\nacari\nacarian\nacariasis\nacaricidal\nacaricide\nacarid\nAcarida\nAcaridea\nacaridean\nacaridomatium\nacariform\nAcarina\nacarine\nacarinosis\nacarocecidium\nacarodermatitis\nacaroid\nacarol\nacarologist\nacarology\nacarophilous\nacarophobia\nacarotoxic\nacarpelous\nacarpous\nAcarus\nAcastus\nacatalectic\nacatalepsia\nacatalepsy\nacataleptic\nacatallactic\nacatamathesia\nacataphasia\nacataposis\nacatastasia\nacatastatic\nacate\nacategorical\nacatery\nacatharsia\nacatharsy\nacatholic\nacaudal\nacaudate\nacaulescent\nacauline\nacaulose\nacaulous\nacca\naccede\naccedence\nacceder\naccelerable\naccelerando\naccelerant\naccelerate\naccelerated\nacceleratedly\nacceleration\naccelerative\naccelerator\nacceleratory\naccelerograph\naccelerometer\naccend\naccendibility\naccendible\naccension\naccensor\naccent\naccentless\naccentor\naccentuable\naccentual\naccentuality\naccentually\naccentuate\naccentuation\naccentuator\naccentus\naccept\nacceptability\nacceptable\nacceptableness\nacceptably\nacceptance\nacceptancy\nacceptant\nacceptation\naccepted\nacceptedly\naccepter\nacceptilate\nacceptilation\nacception\nacceptive\nacceptor\nacceptress\naccerse\naccersition\naccersitor\naccess\naccessarily\naccessariness\naccessary\naccessaryship\naccessibility\naccessible\naccessibly\naccession\naccessional\naccessioner\naccessive\naccessively\naccessless\naccessorial\naccessorily\naccessoriness\naccessorius\naccessory\naccidence\naccidency\naccident\naccidental\naccidentalism\naccidentalist\naccidentality\naccidentally\naccidentalness\naccidented\naccidential\naccidentiality\naccidently\naccidia\naccidie\naccinge\naccipient\nAccipiter\naccipitral\naccipitrary\nAccipitres\naccipitrine\naccismus\naccite\nacclaim\nacclaimable\nacclaimer\nacclamation\nacclamator\nacclamatory\nacclimatable\nacclimatation\nacclimate\nacclimatement\nacclimation\nacclimatizable\nacclimatization\nacclimatize\nacclimatizer\nacclimature\nacclinal\nacclinate\nacclivitous\nacclivity\nacclivous\naccloy\naccoast\naccoil\naccolade\naccoladed\naccolated\naccolent\naccolle\naccombination\naccommodable\naccommodableness\naccommodate\naccommodately\naccommodateness\naccommodating\naccommodatingly\naccommodation\naccommodational\naccommodative\naccommodativeness\naccommodator\naccompanier\naccompaniment\naccompanimental\naccompanist\naccompany\naccompanyist\naccompletive\naccomplice\naccompliceship\naccomplicity\naccomplish\naccomplishable\naccomplished\naccomplisher\naccomplishment\naccomplisht\naccompt\naccord\naccordable\naccordance\naccordancy\naccordant\naccordantly\naccorder\naccording\naccordingly\naccordion\naccordionist\naccorporate\naccorporation\naccost\naccostable\naccosted\naccouche\naccouchement\naccoucheur\naccoucheuse\naccount\naccountability\naccountable\naccountableness\naccountably\naccountancy\naccountant\naccountantship\naccounting\naccountment\naccouple\naccouplement\naccouter\naccouterment\naccoy\naccredit\naccreditate\naccreditation\naccredited\naccreditment\naccrementitial\naccrementition\naccresce\naccrescence\naccrescent\naccretal\naccrete\naccretion\naccretionary\naccretive\naccroach\naccroides\naccrual\naccrue\naccruement\naccruer\naccubation\naccubitum\naccubitus\naccultural\nacculturate\nacculturation\nacculturize\naccumbency\naccumbent\naccumber\naccumulable\naccumulate\naccumulation\naccumulativ\naccumulative\naccumulatively\naccumulativeness\naccumulator\naccuracy\naccurate\naccurately\naccurateness\naccurse\naccursed\naccursedly\naccursedness\naccusable\naccusably\naccusal\naccusant\naccusation\naccusatival\naccusative\naccusatively\naccusatorial\naccusatorially\naccusatory\naccusatrix\naccuse\naccused\naccuser\naccusingly\naccusive\naccustom\naccustomed\naccustomedly\naccustomedness\nace\naceacenaphthene\naceanthrene\naceanthrenequinone\nacecaffine\naceconitic\nacedia\nacediamine\nacediast\nacedy\nAceldama\nAcemetae\nAcemetic\nacenaphthene\nacenaphthenyl\nacenaphthylene\nacentric\nacentrous\naceologic\naceology\nacephal\nAcephala\nacephalan\nAcephali\nacephalia\nAcephalina\nacephaline\nacephalism\nacephalist\nAcephalite\nacephalocyst\nacephalous\nacephalus\nAcer\nAceraceae\naceraceous\nAcerae\nAcerata\nacerate\nAcerates\nacerathere\nAceratherium\naceratosis\nacerb\nAcerbas\nacerbate\nacerbic\nacerbity\nacerdol\nacerin\nacerose\nacerous\nacerra\nacertannin\nacervate\nacervately\nacervation\nacervative\nacervose\nacervuline\nacervulus\nacescence\nacescency\nacescent\naceship\nacesodyne\nAcestes\nacetabular\nAcetabularia\nacetabuliferous\nacetabuliform\nacetabulous\nacetabulum\nacetacetic\nacetal\nacetaldehydase\nacetaldehyde\nacetaldehydrase\nacetalization\nacetalize\nacetamide\nacetamidin\nacetamidine\nacetamido\nacetaminol\nacetanilid\nacetanilide\nacetanion\nacetaniside\nacetanisidide\nacetannin\nacetarious\nacetarsone\nacetate\nacetated\nacetation\nacetbromamide\nacetenyl\nacethydrazide\nacetic\nacetification\nacetifier\nacetify\nacetimeter\nacetimetry\nacetin\nacetize\nacetmethylanilide\nacetnaphthalide\nacetoacetanilide\nacetoacetate\nacetoacetic\nacetoamidophenol\nacetoarsenite\nAcetobacter\nacetobenzoic\nacetobromanilide\nacetochloral\nacetocinnamene\nacetoin\nacetol\nacetolysis\nacetolytic\nacetometer\nacetometrical\nacetometrically\nacetometry\nacetomorphine\nacetonaphthone\nacetonate\nacetonation\nacetone\nacetonemia\nacetonemic\nacetonic\nacetonitrile\nacetonization\nacetonize\nacetonuria\nacetonurometer\nacetonyl\nacetonylacetone\nacetonylidene\nacetophenetide\nacetophenin\nacetophenine\nacetophenone\nacetopiperone\nacetopyrin\nacetosalicylic\nacetose\nacetosity\nacetosoluble\nacetothienone\nacetotoluide\nacetotoluidine\nacetous\nacetoveratrone\nacetoxime\nacetoxyl\nacetoxyphthalide\nacetphenetid\nacetphenetidin\nacetract\nacettoluide\nacetum\naceturic\nacetyl\nacetylacetonates\nacetylacetone\nacetylamine\nacetylate\nacetylation\nacetylator\nacetylbenzene\nacetylbenzoate\nacetylbenzoic\nacetylbiuret\nacetylcarbazole\nacetylcellulose\nacetylcholine\nacetylcyanide\nacetylenation\nacetylene\nacetylenediurein\nacetylenic\nacetylenyl\nacetylfluoride\nacetylglycine\nacetylhydrazine\nacetylic\nacetylide\nacetyliodide\nacetylizable\nacetylization\nacetylize\nacetylizer\nacetylmethylcarbinol\nacetylperoxide\nacetylphenol\nacetylphenylhydrazine\nacetylrosaniline\nacetylsalicylate\nacetylsalol\nacetyltannin\nacetylthymol\nacetyltropeine\nacetylurea\nach\nAchaean\nAchaemenian\nAchaemenid\nAchaemenidae\nAchaemenidian\nAchaenodon\nAchaeta\nachaetous\nachage\nAchagua\nAchakzai\nachalasia\nAchamoth\nAchango\nachar\nAchariaceae\nAchariaceous\nachate\nAchates\nAchatina\nAchatinella\nAchatinidae\nache\nacheilia\nacheilous\nacheiria\nacheirous\nacheirus\nAchen\nachene\nachenial\nachenium\nachenocarp\nachenodium\nacher\nAchernar\nAcheronian\nAcherontic\nAcherontical\nachete\nAchetidae\nAcheulean\nacheweed\nachievable\nachieve\nachievement\nachiever\nachigan\nachilary\nachill\nAchillea\nAchillean\nAchilleid\nachilleine\nAchillize\nachillobursitis\nachillodynia\nachime\nAchimenes\nAchinese\naching\nachingly\nachira\nAchitophel\nachlamydate\nAchlamydeae\nachlamydeous\nachlorhydria\nachlorophyllous\nachloropsia\nAchmetha\nacholia\nacholic\nAcholoe\nacholous\nacholuria\nacholuric\nAchomawi\nachondrite\nachondritic\nachondroplasia\nachondroplastic\nachor\nachordal\nAchordata\nachordate\nAchorion\nAchras\nachree\nachroacyte\nAchroanthes\nachrodextrin\nachrodextrinase\nachroglobin\nachroiocythaemia\nachroiocythemia\nachroite\nachroma\nachromacyte\nachromasia\nachromat\nachromate\nAchromatiaceae\nachromatic\nachromatically\nachromaticity\nachromatin\nachromatinic\nachromatism\nAchromatium\nachromatizable\nachromatization\nachromatize\nachromatocyte\nachromatolysis\nachromatope\nachromatophile\nachromatopia\nachromatopsia\nachromatopsy\nachromatosis\nachromatous\nachromaturia\nachromia\nachromic\nAchromobacter\nAchromobacterieae\nachromoderma\nachromophilous\nachromotrichia\nachromous\nachronical\nachroodextrin\nachroodextrinase\nachroous\nachropsia\nachtehalber\nachtel\nachtelthaler\nAchuas\nachy\nachylia\nachylous\nachymia\nachymous\nAchyranthes\nAchyrodes\nacichloride\nacicula\nacicular\nacicularly\naciculate\naciculated\naciculum\nacid\nAcidanthera\nAcidaspis\nacidemia\nacider\nacidic\nacidiferous\nacidifiable\nacidifiant\nacidific\nacidification\nacidifier\nacidify\nacidimeter\nacidimetric\nacidimetrical\nacidimetrically\nacidimetry\nacidite\nacidity\nacidize\nacidly\nacidness\nacidoid\nacidology\nacidometer\nacidometry\nacidophile\nacidophilic\nacidophilous\nacidoproteolytic\nacidosis\nacidosteophyte\nacidotic\nacidproof\nacidulate\nacidulent\nacidulous\naciduric\nacidyl\nacier\nacierage\nAcieral\nacierate\nacieration\naciform\naciliate\naciliated\nAcilius\nacinaceous\nacinaces\nacinacifolious\nacinaciform\nacinar\nacinarious\nacinary\nAcineta\nAcinetae\nacinetan\nAcinetaria\nacinetarian\nacinetic\nacinetiform\nAcinetina\nacinetinan\nacinic\naciniform\nacinose\nacinotubular\nacinous\nacinus\nAcipenser\nAcipenseres\nacipenserid\nAcipenseridae\nacipenserine\nacipenseroid\nAcipenseroidei\nAcis\naciurgy\nacker\nackey\nackman\nacknow\nacknowledge\nacknowledgeable\nacknowledged\nacknowledgedly\nacknowledger\naclastic\nacle\nacleidian\nacleistous\nAclemon\naclidian\naclinal\naclinic\nacloud\naclys\nAcmaea\nAcmaeidae\nacmatic\nacme\nacmesthesia\nacmic\nAcmispon\nacmite\nacne\nacneform\nacneiform\nacnemia\nAcnida\nacnodal\nacnode\nAcocanthera\nacocantherin\nacock\nacockbill\nacocotl\nAcoela\nAcoelomata\nacoelomate\nacoelomatous\nAcoelomi\nacoelomous\nacoelous\nAcoemetae\nAcoemeti\nAcoemetic\nacoin\nacoine\nAcolapissa\nacold\nAcolhua\nAcolhuan\nacologic\nacology\nacolous\nacoluthic\nacolyte\nacolythate\nAcoma\nacoma\nacomia\nacomous\naconative\nacondylose\nacondylous\nacone\naconic\naconin\naconine\naconital\naconite\naconitia\naconitic\naconitin\naconitine\nAconitum\nAcontias\nacontium\nAcontius\naconuresis\nacopic\nacopon\nacopyrin\nacopyrine\nacor\nacorea\nacoria\nacorn\nacorned\nAcorus\nacosmic\nacosmism\nacosmist\nacosmistic\nacotyledon\nacotyledonous\nacouasm\nacouchi\nacouchy\nacoumeter\nacoumetry\nacouometer\nacouophonia\nacoupa\nacousmata\nacousmatic\nacoustic\nacoustical\nacoustically\nacoustician\nacousticolateral\nAcousticon\nacoustics\nacquaint\nacquaintance\nacquaintanceship\nacquaintancy\nacquaintant\nacquainted\nacquaintedness\nacquest\nacquiesce\nacquiescement\nacquiescence\nacquiescency\nacquiescent\nacquiescently\nacquiescer\nacquiescingly\nacquirability\nacquirable\nacquire\nacquired\nacquirement\nacquirenda\nacquirer\nacquisible\nacquisite\nacquisited\nacquisition\nacquisitive\nacquisitively\nacquisitiveness\nacquisitor\nacquisitum\nacquist\nacquit\nacquitment\nacquittal\nacquittance\nacquitter\nAcrab\nacracy\nacraein\nAcraeinae\nacraldehyde\nAcrania\nacranial\nacraniate\nacrasia\nAcrasiaceae\nAcrasiales\nAcrasida\nAcrasieae\nAcraspeda\nacraspedote\nacratia\nacraturesis\nacrawl\nacraze\nacre\nacreable\nacreage\nacreak\nacream\nacred\nAcredula\nacreman\nacrestaff\nacrid\nacridan\nacridian\nacridic\nAcrididae\nAcridiidae\nacridine\nacridinic\nacridinium\nacridity\nAcridium\nacridly\nacridness\nacridone\nacridonium\nacridophagus\nacridyl\nacriflavin\nacriflavine\nacrimonious\nacrimoniously\nacrimoniousness\nacrimony\nacrindoline\nacrinyl\nacrisia\nAcrisius\nAcrita\nacritan\nacrite\nacritical\nacritol\nAcroa\nacroaesthesia\nacroama\nacroamatic\nacroamatics\nacroanesthesia\nacroarthritis\nacroasphyxia\nacroataxia\nacroatic\nacrobacy\nacrobat\nAcrobates\nacrobatholithic\nacrobatic\nacrobatical\nacrobatically\nacrobatics\nacrobatism\nacroblast\nacrobryous\nacrobystitis\nAcrocarpi\nacrocarpous\nacrocephalia\nacrocephalic\nacrocephalous\nacrocephaly\nAcrocera\nAcroceratidae\nAcroceraunian\nAcroceridae\nAcrochordidae\nAcrochordinae\nacrochordon\nAcroclinium\nAcrocomia\nacroconidium\nacrocontracture\nacrocoracoid\nacrocyanosis\nacrocyst\nacrodactylum\nacrodermatitis\nacrodont\nacrodontism\nacrodrome\nacrodromous\nAcrodus\nacrodynia\nacroesthesia\nacrogamous\nacrogamy\nacrogen\nacrogenic\nacrogenous\nacrogenously\nacrography\nAcrogynae\nacrogynae\nacrogynous\nacrolein\nacrolith\nacrolithan\nacrolithic\nacrologic\nacrologically\nacrologism\nacrologue\nacrology\nacromania\nacromastitis\nacromegalia\nacromegalic\nacromegaly\nacromelalgia\nacrometer\nacromial\nacromicria\nacromioclavicular\nacromiocoracoid\nacromiodeltoid\nacromiohumeral\nacromiohyoid\nacromion\nacromioscapular\nacromiosternal\nacromiothoracic\nacromonogrammatic\nacromphalus\nAcromyodi\nacromyodian\nacromyodic\nacromyodous\nacromyotonia\nacromyotonus\nacron\nacronarcotic\nacroneurosis\nacronical\nacronically\nacronyc\nacronych\nAcronycta\nacronyctous\nacronym\nacronymic\nacronymize\nacronymous\nacronyx\nacrook\nacroparalysis\nacroparesthesia\nacropathology\nacropathy\nacropetal\nacropetally\nacrophobia\nacrophonetic\nacrophonic\nacrophony\nacropodium\nacropoleis\nacropolis\nacropolitan\nAcropora\nacrorhagus\nacrorrheuma\nacrosarc\nacrosarcum\nacroscleriasis\nacroscleroderma\nacroscopic\nacrose\nacrosome\nacrosphacelus\nacrospire\nacrospore\nacrosporous\nacross\nacrostic\nacrostical\nacrostically\nacrostichal\nAcrosticheae\nacrostichic\nacrostichoid\nAcrostichum\nacrosticism\nacrostolion\nacrostolium\nacrotarsial\nacrotarsium\nacroteleutic\nacroterial\nacroteric\nacroterium\nAcrothoracica\nacrotic\nacrotism\nacrotomous\nAcrotreta\nAcrotretidae\nacrotrophic\nacrotrophoneurosis\nAcrux\nAcrydium\nacryl\nacrylaldehyde\nacrylate\nacrylic\nacrylonitrile\nacrylyl\nact\nacta\nactability\nactable\nActaea\nActaeaceae\nActaeon\nActaeonidae\nActiad\nActian\nactification\nactifier\nactify\nactin\nactinal\nactinally\nactinautographic\nactinautography\nactine\nactinenchyma\nacting\nActinia\nactinian\nActiniaria\nactiniarian\nactinic\nactinically\nActinidia\nActinidiaceae\nactiniferous\nactiniform\nactinine\nactiniochrome\nactiniohematin\nActiniomorpha\nactinism\nActinistia\nactinium\nactinobacillosis\nActinobacillus\nactinoblast\nactinobranch\nactinobranchia\nactinocarp\nactinocarpic\nactinocarpous\nactinochemistry\nactinocrinid\nActinocrinidae\nactinocrinite\nActinocrinus\nactinocutitis\nactinodermatitis\nactinodielectric\nactinodrome\nactinodromous\nactinoelectric\nactinoelectrically\nactinoelectricity\nactinogonidiate\nactinogram\nactinograph\nactinography\nactinoid\nActinoida\nActinoidea\nactinolite\nactinolitic\nactinologous\nactinologue\nactinology\nactinomere\nactinomeric\nactinometer\nactinometric\nactinometrical\nactinometry\nactinomorphic\nactinomorphous\nactinomorphy\nActinomyces\nActinomycetaceae\nActinomycetales\nactinomycete\nactinomycetous\nactinomycin\nactinomycoma\nactinomycosis\nactinomycotic\nActinomyxidia\nActinomyxidiida\nactinon\nActinonema\nactinoneuritis\nactinophone\nactinophonic\nactinophore\nactinophorous\nactinophryan\nActinophrys\nActinopoda\nactinopraxis\nactinopteran\nActinopteri\nactinopterous\nactinopterygian\nActinopterygii\nactinopterygious\nactinoscopy\nactinosoma\nactinosome\nActinosphaerium\nactinost\nactinostereoscopy\nactinostomal\nactinostome\nactinotherapeutic\nactinotherapeutics\nactinotherapy\nactinotoxemia\nactinotrichium\nactinotrocha\nactinouranium\nActinozoa\nactinozoal\nactinozoan\nactinozoon\nactinula\naction\nactionable\nactionably\nactional\nactionary\nactioner\nactionize\nactionless\nActipylea\nActium\nactivable\nactivate\nactivation\nactivator\nactive\nactively\nactiveness\nactivin\nactivism\nactivist\nactivital\nactivity\nactivize\nactless\nactomyosin\nacton\nactor\nactorship\nactress\nActs\nactu\nactual\nactualism\nactualist\nactualistic\nactuality\nactualization\nactualize\nactually\nactualness\nactuarial\nactuarially\nactuarian\nactuary\nactuaryship\nactuation\nactuator\nacture\nacturience\nactutate\nacuaesthesia\nAcuan\nacuate\nacuation\nAcubens\nacuclosure\nacuductor\nacuesthesia\nacuity\naculea\nAculeata\naculeate\naculeated\naculeiform\naculeolate\naculeolus\naculeus\nacumen\nacuminate\nacumination\nacuminose\nacuminous\nacuminulate\nacupress\nacupressure\nacupunctuate\nacupunctuation\nacupuncturation\nacupuncturator\nacupuncture\nacurative\nacushla\nacutangular\nacutate\nacute\nacutely\nacutenaculum\nacuteness\nacutiator\nacutifoliate\nAcutilinguae\nacutilingual\nacutilobate\nacutiplantar\nacutish\nacutograve\nacutonodose\nacutorsion\nacyanoblepsia\nacyanopsia\nacyclic\nacyesis\nacyetic\nacyl\nacylamido\nacylamidobenzene\nacylamino\nacylate\nacylation\nacylogen\nacyloin\nacyloxy\nacyloxymethane\nacyrological\nacyrology\nacystia\nad\nAda\nadactyl\nadactylia\nadactylism\nadactylous\nAdad\nadad\nadage\nadagial\nadagietto\nadagio\nAdai\nAdaize\nAdam\nadamant\nadamantean\nadamantine\nadamantinoma\nadamantoblast\nadamantoblastoma\nadamantoid\nadamantoma\nadamas\nAdamastor\nadambulacral\nadamellite\nAdamhood\nAdamic\nAdamical\nAdamically\nadamine\nAdamite\nadamite\nAdamitic\nAdamitical\nAdamitism\nAdamsia\nadamsite\nadance\nadangle\nAdansonia\nAdapa\nadapid\nAdapis\nadapt\nadaptability\nadaptable\nadaptation\nadaptational\nadaptationally\nadaptative\nadaptedness\nadapter\nadaption\nadaptional\nadaptionism\nadaptitude\nadaptive\nadaptively\nadaptiveness\nadaptometer\nadaptor\nadaptorial\nAdar\nadarme\nadat\nadati\nadatom\nadaunt\nadaw\nadawe\nadawlut\nadawn\nadaxial\naday\nadays\nadazzle\nadcraft\nadd\nAdda\nadda\naddability\naddable\naddax\naddebted\nadded\naddedly\naddend\naddenda\naddendum\nadder\nadderbolt\nadderfish\nadderspit\nadderwort\naddibility\naddible\naddicent\naddict\naddicted\naddictedness\naddiction\nAddie\naddiment\nAddisonian\nAddisoniana\nadditament\nadditamentary\naddition\nadditional\nadditionally\nadditionary\nadditionist\naddititious\nadditive\nadditively\nadditivity\nadditory\naddle\naddlebrain\naddlebrained\naddlehead\naddleheaded\naddleheadedly\naddleheadedness\naddlement\naddleness\naddlepate\naddlepated\naddlepatedness\naddleplot\naddlings\naddlins\naddorsed\naddress\naddressee\naddresser\naddressful\nAddressograph\naddressor\naddrest\nAddu\nadduce\nadducent\nadducer\nadducible\nadduct\nadduction\nadductive\nadductor\nAddy\nAde\nade\nadead\nadeem\nadeep\nAdela\nAdelaide\nAdelarthra\nAdelarthrosomata\nadelarthrosomatous\nAdelbert\nAdelea\nAdeleidae\nAdelges\nAdelia\nAdelina\nAdeline\nadeling\nadelite\nAdeliza\nadelocerous\nAdelochorda\nadelocodonic\nadelomorphic\nadelomorphous\nadelopod\nAdelops\nAdelphi\nAdelphian\nadelphogamy\nAdelphoi\nadelpholite\nadelphophagy\nademonist\nadempted\nademption\nadenalgia\nadenalgy\nAdenanthera\nadenase\nadenasthenia\nadendric\nadendritic\nadenectomy\nadenectopia\nadenectopic\nadenemphractic\nadenemphraxis\nadenia\nadeniform\nadenine\nadenitis\nadenization\nadenoacanthoma\nadenoblast\nadenocancroid\nadenocarcinoma\nadenocarcinomatous\nadenocele\nadenocellulitis\nadenochondroma\nadenochondrosarcoma\nadenochrome\nadenocyst\nadenocystoma\nadenocystomatous\nadenodermia\nadenodiastasis\nadenodynia\nadenofibroma\nadenofibrosis\nadenogenesis\nadenogenous\nadenographer\nadenographic\nadenographical\nadenography\nadenohypersthenia\nadenoid\nadenoidal\nadenoidism\nadenoliomyofibroma\nadenolipoma\nadenolipomatosis\nadenologaditis\nadenological\nadenology\nadenolymphocele\nadenolymphoma\nadenoma\nadenomalacia\nadenomatome\nadenomatous\nadenomeningeal\nadenometritis\nadenomycosis\nadenomyofibroma\nadenomyoma\nadenomyxoma\nadenomyxosarcoma\nadenoncus\nadenoneural\nadenoneure\nadenopathy\nadenopharyngeal\nadenopharyngitis\nadenophlegmon\nAdenophora\nadenophore\nadenophorous\nadenophthalmia\nadenophyllous\nadenophyma\nadenopodous\nadenosarcoma\nadenosclerosis\nadenose\nadenosine\nadenosis\nadenostemonous\nAdenostoma\nadenotome\nadenotomic\nadenotomy\nadenotyphoid\nadenotyphus\nadenyl\nadenylic\nAdeodatus\nAdeona\nAdephaga\nadephagan\nadephagia\nadephagous\nadept\nadeptness\nadeptship\nadequacy\nadequate\nadequately\nadequateness\nadequation\nadequative\nadermia\nadermin\nAdessenarian\nadet\nadevism\nadfected\nadfix\nadfluxion\nadglutinate\nAdhafera\nadhaka\nadhamant\nAdhara\nadharma\nadhere\nadherence\nadherency\nadherent\nadherently\nadherer\nadherescence\nadherescent\nadhesion\nadhesional\nadhesive\nadhesively\nadhesivemeter\nadhesiveness\nadhibit\nadhibition\nadiabatic\nadiabatically\nadiabolist\nadiactinic\nadiadochokinesis\nadiagnostic\nadiantiform\nAdiantum\nadiaphon\nadiaphonon\nadiaphoral\nadiaphoresis\nadiaphoretic\nadiaphorism\nadiaphorist\nadiaphoristic\nadiaphorite\nadiaphoron\nadiaphorous\nadiate\nadiathermal\nadiathermancy\nadiathermanous\nadiathermic\nadiathetic\nadiation\nAdib\nAdicea\nadicity\nAdiel\nadieu\nadieux\nAdigei\nAdighe\nAdigranth\nadigranth\nAdin\nAdinida\nadinidan\nadinole\nadion\nadipate\nadipescent\nadipic\nadipinic\nadipocele\nadipocellulose\nadipocere\nadipoceriform\nadipocerous\nadipocyte\nadipofibroma\nadipogenic\nadipogenous\nadipoid\nadipolysis\nadipolytic\nadipoma\nadipomatous\nadipometer\nadipopexia\nadipopexis\nadipose\nadiposeness\nadiposis\nadiposity\nadiposogenital\nadiposuria\nadipous\nadipsia\nadipsic\nadipsous\nadipsy\nadipyl\nAdirondack\nadit\nadital\naditus\nadjacency\nadjacent\nadjacently\nadjag\nadject\nadjection\nadjectional\nadjectival\nadjectivally\nadjective\nadjectively\nadjectivism\nadjectivitis\nadjiger\nadjoin\nadjoined\nadjoinedly\nadjoining\nadjoint\nadjourn\nadjournal\nadjournment\nadjudge\nadjudgeable\nadjudger\nadjudgment\nadjudicate\nadjudication\nadjudicative\nadjudicator\nadjudicature\nadjunct\nadjunction\nadjunctive\nadjunctively\nadjunctly\nadjuration\nadjuratory\nadjure\nadjurer\nadjust\nadjustable\nadjustably\nadjustage\nadjustation\nadjuster\nadjustive\nadjustment\nadjutage\nadjutancy\nadjutant\nadjutantship\nadjutorious\nadjutory\nadjutrice\nadjuvant\nAdlai\nadlay\nadless\nadlet\nAdlumia\nadlumidine\nadlumine\nadman\nadmarginate\nadmaxillary\nadmeasure\nadmeasurement\nadmeasurer\nadmedial\nadmedian\nadmensuration\nadmi\nadminicle\nadminicula\nadminicular\nadminiculary\nadminiculate\nadminiculation\nadminiculum\nadminister\nadministerd\nadministerial\nadministrable\nadministrant\nadministrate\nadministration\nadministrational\nadministrative\nadministratively\nadministrator\nadministratorship\nadministratress\nadministratrices\nadministratrix\nadmirability\nadmirable\nadmirableness\nadmirably\nadmiral\nadmiralship\nadmiralty\nadmiration\nadmirative\nadmirator\nadmire\nadmired\nadmiredly\nadmirer\nadmiring\nadmiringly\nadmissibility\nadmissible\nadmissibleness\nadmissibly\nadmission\nadmissive\nadmissory\nadmit\nadmittable\nadmittance\nadmitted\nadmittedly\nadmittee\nadmitter\nadmittible\nadmix\nadmixtion\nadmixture\nadmonish\nadmonisher\nadmonishingly\nadmonishment\nadmonition\nadmonitioner\nadmonitionist\nadmonitive\nadmonitively\nadmonitor\nadmonitorial\nadmonitorily\nadmonitory\nadmonitrix\nadmortization\nadnascence\nadnascent\nadnate\nadnation\nadnephrine\nadnerval\nadneural\nadnex\nadnexal\nadnexed\nadnexitis\nadnexopexy\nadnominal\nadnominally\nadnomination\nadnoun\nado\nadobe\nadolesce\nadolescence\nadolescency\nadolescent\nadolescently\nAdolph\nAdolphus\nAdonai\nAdonean\nAdonia\nAdoniad\nAdonian\nAdonic\nadonidin\nadonin\nAdoniram\nAdonis\nadonite\nadonitol\nadonize\nadoperate\nadoperation\nadopt\nadoptability\nadoptable\nadoptant\nadoptative\nadopted\nadoptedly\nadoptee\nadopter\nadoptian\nadoptianism\nadoptianist\nadoption\nadoptional\nadoptionism\nadoptionist\nadoptious\nadoptive\nadoptively\nadorability\nadorable\nadorableness\nadorably\nadoral\nadorally\nadorant\nAdorantes\nadoration\nadoratory\nadore\nadorer\nAdoretus\nadoringly\nadorn\nadorner\nadorningly\nadornment\nadosculation\nadossed\nadoulie\nadown\nAdoxa\nAdoxaceae\nadoxaceous\nadoxography\nadoxy\nadoze\nadpao\nadpress\nadpromission\nadradial\nadradially\nadradius\nAdramelech\nAdrammelech\nadread\nadream\nadreamed\nadreamt\nadrectal\nadrenal\nadrenalectomize\nadrenalectomy\nAdrenalin\nadrenaline\nadrenalize\nadrenalone\nadrenergic\nadrenin\nadrenine\nadrenochrome\nadrenocortical\nadrenocorticotropic\nadrenolysis\nadrenolytic\nadrenotropic\nAdrian\nAdriana\nAdriatic\nAdrienne\nadrift\nadrip\nadroit\nadroitly\nadroitness\nadroop\nadrop\nadrostral\nadrowse\nadrue\nadry\nadsbud\nadscendent\nadscititious\nadscititiously\nadscript\nadscripted\nadscription\nadscriptitious\nadscriptitius\nadscriptive\nadsessor\nadsheart\nadsignification\nadsignify\nadsmith\nadsmithing\nadsorb\nadsorbable\nadsorbate\nadsorbent\nadsorption\nadsorptive\nadstipulate\nadstipulation\nadstipulator\nadterminal\nadtevac\nadular\nadularescence\nadularia\nadulate\nadulation\nadulator\nadulatory\nadulatress\nAdullam\nAdullamite\nadult\nadulter\nadulterant\nadulterate\nadulterately\nadulterateness\nadulteration\nadulterator\nadulterer\nadulteress\nadulterine\nadulterize\nadulterous\nadulterously\nadultery\nadulthood\nadulticidal\nadulticide\nadultness\nadultoid\nadumbral\nadumbrant\nadumbrate\nadumbration\nadumbrative\nadumbratively\nadunc\naduncate\naduncated\naduncity\naduncous\nadusk\nadust\nadustion\nadustiosis\nAdvaita\nadvance\nadvanceable\nadvanced\nadvancedness\nadvancement\nadvancer\nadvancing\nadvancingly\nadvancive\nadvantage\nadvantageous\nadvantageously\nadvantageousness\nadvection\nadvectitious\nadvective\nadvehent\nadvene\nadvenience\nadvenient\nAdvent\nadvential\nAdventism\nAdventist\nadventitia\nadventitious\nadventitiously\nadventitiousness\nadventive\nadventual\nadventure\nadventureful\nadventurement\nadventurer\nadventureship\nadventuresome\nadventuresomely\nadventuresomeness\nadventuress\nadventurish\nadventurous\nadventurously\nadventurousness\nadverb\nadverbial\nadverbiality\nadverbialize\nadverbially\nadverbiation\nadversant\nadversaria\nadversarious\nadversary\nadversative\nadversatively\nadverse\nadversely\nadverseness\nadversifoliate\nadversifolious\nadversity\nadvert\nadvertence\nadvertency\nadvertent\nadvertently\nadvertisable\nadvertise\nadvertisee\nadvertisement\nadvertiser\nadvertising\nadvice\nadviceful\nadvisability\nadvisable\nadvisableness\nadvisably\nadvisal\nadvisatory\nadvise\nadvised\nadvisedly\nadvisedness\nadvisee\nadvisement\nadviser\nadvisership\nadvisive\nadvisiveness\nadvisor\nadvisorily\nadvisory\nadvocacy\nadvocate\nadvocateship\nadvocatess\nadvocation\nadvocator\nadvocatory\nadvocatress\nadvocatrice\nadvocatrix\nadvolution\nadvowee\nadvowson\nady\nadynamia\nadynamic\nadynamy\nadyta\nadyton\nadytum\nadz\nadze\nadzer\nadzooks\nae\nAeacides\nAeacus\nAeaean\nAechmophorus\naecial\nAecidiaceae\naecidial\naecidioform\nAecidiomycetes\naecidiospore\naecidiostage\naecidium\naeciospore\naeciostage\naecioteliospore\naeciotelium\naecium\naedeagus\nAedes\naedicula\naedile\naedileship\naedilian\naedilic\naedilitian\naedility\naedoeagus\naefald\naefaldness\naefaldy\naefauld\naegagropila\naegagropile\naegagrus\nAegean\naegerian\naegeriid\nAegeriidae\nAegialitis\naegicrania\nAegina\nAeginetan\nAeginetic\nAegipan\naegirine\naegirinolite\naegirite\naegis\nAegisthus\nAegithalos\nAegithognathae\naegithognathism\naegithognathous\nAegle\nAegopodium\naegrotant\naegyptilla\naegyrite\naeluroid\nAeluroidea\naelurophobe\naelurophobia\naeluropodous\naenach\naenean\naeneolithic\naeneous\naenigmatite\naeolharmonica\nAeolia\nAeolian\nAeolic\nAeolicism\naeolid\nAeolidae\nAeolididae\naeolina\naeoline\naeolipile\nAeolis\nAeolism\nAeolist\naeolistic\naeolodicon\naeolodion\naeolomelodicon\naeolopantalon\naeolotropic\naeolotropism\naeolotropy\naeolsklavier\naeon\naeonial\naeonian\naeonist\nAepyceros\nAepyornis\nAepyornithidae\nAepyornithiformes\nAequi\nAequian\nAequiculi\nAequipalpia\naequoreal\naer\naerage\naerarian\naerarium\naerate\naeration\naerator\naerenchyma\naerenterectasia\naerial\naerialist\naeriality\naerially\naerialness\naeric\naerical\nAerides\naerie\naeried\naerifaction\naeriferous\naerification\naeriform\naerify\naero\nAerobacter\naerobate\naerobatic\naerobatics\naerobe\naerobian\naerobic\naerobically\naerobiologic\naerobiological\naerobiologically\naerobiologist\naerobiology\naerobion\naerobiont\naerobioscope\naerobiosis\naerobiotic\naerobiotically\naerobious\naerobium\naeroboat\nAerobranchia\naerobranchiate\naerobus\naerocamera\naerocartograph\nAerocharidae\naerocolpos\naerocraft\naerocurve\naerocyst\naerodermectasia\naerodone\naerodonetic\naerodonetics\naerodrome\naerodromics\naerodynamic\naerodynamical\naerodynamicist\naerodynamics\naerodyne\naeroembolism\naeroenterectasia\naerofoil\naerogel\naerogen\naerogenes\naerogenesis\naerogenic\naerogenically\naerogenous\naerogeologist\naerogeology\naerognosy\naerogram\naerograph\naerographer\naerographic\naerographical\naerographics\naerography\naerogun\naerohydrodynamic\naerohydropathy\naerohydroplane\naerohydrotherapy\naerohydrous\naeroides\naerolite\naerolith\naerolithology\naerolitic\naerolitics\naerologic\naerological\naerologist\naerology\naeromaechanic\naeromancer\naeromancy\naeromantic\naeromarine\naeromechanical\naeromechanics\naerometeorograph\naerometer\naerometric\naerometry\naeromotor\naeronat\naeronaut\naeronautic\naeronautical\naeronautically\naeronautics\naeronautism\naeronef\naeroneurosis\naeropathy\nAerope\naeroperitoneum\naeroperitonia\naerophagia\naerophagist\naerophagy\naerophane\naerophilatelic\naerophilatelist\naerophilately\naerophile\naerophilic\naerophilous\naerophobia\naerophobic\naerophone\naerophor\naerophore\naerophotography\naerophysical\naerophysics\naerophyte\naeroplane\naeroplaner\naeroplanist\naeropleustic\naeroporotomy\naeroscepsis\naeroscepsy\naeroscope\naeroscopic\naeroscopically\naeroscopy\naerose\naerosiderite\naerosiderolite\nAerosol\naerosol\naerosphere\naerosporin\naerostat\naerostatic\naerostatical\naerostatics\naerostation\naerosteam\naerotactic\naerotaxis\naerotechnical\naerotherapeutics\naerotherapy\naerotonometer\naerotonometric\naerotonometry\naerotropic\naerotropism\naeroyacht\naeruginous\naerugo\naery\naes\nAeschylean\nAeschynanthus\nAeschynomene\naeschynomenous\nAesculaceae\naesculaceous\nAesculapian\nAesculapius\nAesculus\nAesopian\nAesopic\naesthete\naesthetic\naesthetical\naesthetically\naesthetician\naestheticism\naestheticist\naestheticize\naesthetics\naesthiology\naesthophysiology\nAestii\naethalioid\naethalium\naetheogam\naetheogamic\naetheogamous\naethered\nAethionema\naethogen\naethrioscope\nAethusa\nAetian\naetiogenic\naetiotropic\naetiotropically\nAetobatidae\nAetobatus\nAetolian\nAetomorphae\naetosaur\naetosaurian\nAetosaurus\naevia\naface\nafaint\nAfar\nafar\nafara\nafear\nafeard\nafeared\nafebrile\nAfenil\nafernan\nafetal\naffa\naffability\naffable\naffableness\naffably\naffabrous\naffair\naffaite\naffect\naffectable\naffectate\naffectation\naffectationist\naffected\naffectedly\naffectedness\naffecter\naffectibility\naffectible\naffecting\naffectingly\naffection\naffectional\naffectionally\naffectionate\naffectionately\naffectionateness\naffectioned\naffectious\naffective\naffectively\naffectivity\naffeer\naffeerer\naffeerment\naffeir\naffenpinscher\naffenspalte\nafferent\naffettuoso\naffiance\naffiancer\naffiant\naffidation\naffidavit\naffidavy\naffiliable\naffiliate\naffiliation\naffinal\naffination\naffine\naffined\naffinely\naffinitative\naffinitatively\naffinite\naffinition\naffinitive\naffinity\naffirm\naffirmable\naffirmably\naffirmance\naffirmant\naffirmation\naffirmative\naffirmatively\naffirmatory\naffirmer\naffirmingly\naffix\naffixal\naffixation\naffixer\naffixion\naffixture\nafflation\nafflatus\nafflict\nafflicted\nafflictedness\nafflicter\nafflicting\nafflictingly\naffliction\nafflictionless\nafflictive\nafflictively\naffluence\naffluent\naffluently\naffluentness\nafflux\naffluxion\nafforce\nafforcement\nafford\naffordable\nafforest\nafforestable\nafforestation\nafforestment\nafformative\naffranchise\naffranchisement\naffray\naffrayer\naffreight\naffreighter\naffreightment\naffricate\naffricated\naffrication\naffricative\naffright\naffrighted\naffrightedly\naffrighter\naffrightful\naffrightfully\naffrightingly\naffrightment\naffront\naffronte\naffronted\naffrontedly\naffrontedness\naffronter\naffronting\naffrontingly\naffrontingness\naffrontive\naffrontiveness\naffrontment\naffuse\naffusion\naffy\nAfghan\nafghani\nafield\nAfifi\nafikomen\nafire\naflagellar\naflame\naflare\naflat\naflaunt\naflicker\naflight\nafloat\naflow\naflower\nafluking\naflush\naflutter\nafoam\nafoot\nafore\naforehand\naforenamed\naforesaid\naforethought\naforetime\naforetimes\nafortiori\nafoul\nafraid\nafraidness\nAframerican\nAfrasia\nAfrasian\nafreet\nafresh\nafret\nAfric\nAfrican\nAfricana\nAfricanism\nAfricanist\nAfricanization\nAfricanize\nAfricanoid\nAfricanthropus\nAfridi\nAfrikaans\nAfrikander\nAfrikanderdom\nAfrikanderism\nAfrikaner\nAfrogaea\nAfrogaean\nafront\nafrown\nAfshah\nAfshar\naft\naftaba\nafter\nafteract\nafterage\nafterattack\nafterband\nafterbeat\nafterbirth\nafterblow\nafterbody\nafterbrain\nafterbreach\nafterbreast\nafterburner\nafterburning\naftercare\naftercareer\naftercast\naftercataract\naftercause\nafterchance\nafterchrome\nafterchurch\nafterclap\nafterclause\naftercome\naftercomer\naftercoming\naftercooler\naftercost\naftercourse\naftercrop\naftercure\nafterdamp\nafterdate\nafterdays\nafterdeck\nafterdinner\nafterdrain\nafterdrops\naftereffect\nafterend\naftereye\nafterfall\nafterfame\nafterfeed\nafterfermentation\nafterform\nafterfriend\nafterfruits\nafterfuture\naftergame\naftergas\nafterglide\nafterglow\naftergo\naftergood\naftergrass\naftergrave\naftergrief\naftergrind\naftergrowth\nafterguard\nafterguns\nafterhand\nafterharm\nafterhatch\nafterhelp\nafterhend\nafterhold\nafterhope\nafterhours\nafterimage\nafterimpression\nafterings\nafterking\nafterknowledge\nafterlife\nafterlifetime\nafterlight\nafterloss\nafterlove\naftermark\naftermarriage\naftermass\naftermast\naftermath\naftermatter\naftermeal\naftermilk\naftermost\nafternight\nafternoon\nafternoons\nafternose\nafternote\nafteroar\nafterpain\nafterpart\nafterpast\nafterpeak\nafterpiece\nafterplanting\nafterplay\nafterpressure\nafterproof\nafterrake\nafterreckoning\nafterrider\nafterripening\nafterroll\nafterschool\naftersend\naftersensation\naftershaft\naftershafted\naftershine\naftership\naftershock\naftersong\naftersound\nafterspeech\nafterspring\nafterstain\nafterstate\nafterstorm\nafterstrain\nafterstretch\nafterstudy\nafterswarm\nafterswarming\nafterswell\naftertan\naftertask\naftertaste\nafterthinker\nafterthought\nafterthoughted\nafterthrift\naftertime\naftertimes\naftertouch\naftertreatment\naftertrial\nafterturn\naftervision\nafterwale\nafterwar\nafterward\nafterwards\nafterwash\nafterwhile\nafterwisdom\nafterwise\nafterwit\nafterwitted\nafterwork\nafterworking\nafterworld\nafterwrath\nafterwrist\naftmost\nAftonian\naftosa\naftward\naftwards\nafunction\nafunctional\nafwillite\nAfzelia\naga\nagabanee\nagacante\nagacella\nAgaces\nAgade\nAgag\nagain\nagainst\nagainstand\nagal\nagalactia\nagalactic\nagalactous\nagalawood\nagalaxia\nagalaxy\nAgalena\nAgalenidae\nAgalinis\nagalite\nagalloch\nagallochum\nagallop\nagalma\nagalmatolite\nagalwood\nAgama\nagama\nAgamae\nAgamemnon\nagamete\nagami\nagamian\nagamic\nagamically\nagamid\nAgamidae\nagamobium\nagamogenesis\nagamogenetic\nagamogenetically\nagamogony\nagamoid\nagamont\nagamospore\nagamous\nagamy\naganglionic\nAganice\nAganippe\nAgao\nAgaonidae\nAgapanthus\nagape\nAgapemone\nAgapemonian\nAgapemonist\nAgapemonite\nagapetae\nagapeti\nagapetid\nAgapetidae\nAgapornis\nagar\nagaric\nagaricaceae\nagaricaceous\nAgaricales\nagaricic\nagariciform\nagaricin\nagaricine\nagaricoid\nAgaricus\nAgaristidae\nagarita\nAgarum\nagarwal\nagasp\nAgastache\nAgastreae\nagastric\nagastroneuria\nagate\nagateware\nAgatha\nAgathaea\nAgathaumas\nagathin\nAgathis\nagathism\nagathist\nagathodaemon\nagathodaemonic\nagathokakological\nagathology\nAgathosma\nagatiferous\nagatiform\nagatine\nagatize\nagatoid\nagaty\nAgau\nAgave\nagavose\nAgawam\nAgaz\nagaze\nagazed\nAgdistis\nage\naged\nagedly\nagedness\nagee\nAgelacrinites\nAgelacrinitidae\nAgelaius\nAgelaus\nageless\nagelessness\nagelong\nagen\nAgena\nagency\nagenda\nagendum\nagenesia\nagenesic\nagenesis\nagennetic\nagent\nagentess\nagential\nagentival\nagentive\nagentry\nagentship\nageometrical\nager\nAgeratum\nageusia\nageusic\nageustia\nagger\naggerate\naggeration\naggerose\nAggie\nagglomerant\nagglomerate\nagglomerated\nagglomeratic\nagglomeration\nagglomerative\nagglomerator\nagglutinability\nagglutinable\nagglutinant\nagglutinate\nagglutination\nagglutinationist\nagglutinative\nagglutinator\nagglutinin\nagglutinize\nagglutinogen\nagglutinogenic\nagglutinoid\nagglutinoscope\nagglutogenic\naggradation\naggradational\naggrade\naggrandizable\naggrandize\naggrandizement\naggrandizer\naggrate\naggravate\naggravating\naggravatingly\naggravation\naggravative\naggravator\naggregable\naggregant\nAggregata\nAggregatae\naggregate\naggregately\naggregateness\naggregation\naggregative\naggregator\naggregatory\naggress\naggressin\naggression\naggressionist\naggressive\naggressively\naggressiveness\naggressor\naggrievance\naggrieve\naggrieved\naggrievedly\naggrievedness\naggrievement\naggroup\naggroupment\naggry\naggur\nagha\nAghan\naghanee\naghast\naghastness\nAghlabite\nAghorapanthi\nAghori\nAgialid\nAgib\nAgiel\nagilawood\nagile\nagilely\nagileness\nagility\nagillawood\naging\nagio\nagiotage\nagist\nagistator\nagistment\nagistor\nagitable\nagitant\nagitate\nagitatedly\nagitation\nagitational\nagitationist\nagitative\nagitator\nagitatorial\nagitatrix\nagitprop\nAgkistrodon\nagla\nAglaia\naglance\nAglaonema\nAglaos\naglaozonia\naglare\nAglaspis\nAglauros\nagleaf\nagleam\naglet\naglethead\nagley\naglimmer\naglint\nAglipayan\nAglipayano\naglitter\naglobulia\nAglossa\naglossal\naglossate\naglossia\naglow\naglucon\naglutition\naglycosuric\nAglypha\naglyphodont\nAglyphodonta\nAglyphodontia\naglyphous\nagmatine\nagmatology\nagminate\nagminated\nagnail\nagname\nagnamed\nagnate\nAgnatha\nagnathia\nagnathic\nAgnathostomata\nagnathostomatous\nagnathous\nagnatic\nagnatically\nagnation\nagnel\nAgnes\nagnification\nagnize\nAgnoetae\nAgnoete\nAgnoetism\nagnoiology\nAgnoite\nagnomen\nagnomical\nagnominal\nagnomination\nagnosia\nagnosis\nagnostic\nagnostically\nagnosticism\nAgnostus\nagnosy\nAgnotozoic\nagnus\nago\nagog\nagoge\nagogic\nagogics\nagoho\nagoing\nagomensin\nagomphiasis\nagomphious\nagomphosis\nagon\nagonal\nagone\nagoniada\nagoniadin\nagoniatite\nAgoniatites\nagonic\nagonied\nagonist\nAgonista\nagonistarch\nagonistic\nagonistically\nagonistics\nagonium\nagonize\nagonizedly\nagonizer\nagonizingly\nAgonostomus\nagonothete\nagonothetic\nagony\nagora\nagoranome\nagoraphobia\nagouara\nagouta\nagouti\nagpaite\nagpaitic\nAgra\nagraffee\nagrah\nagral\nagrammatical\nagrammatism\nAgrania\nagranulocyte\nagranulocytosis\nagranuloplastic\nAgrapha\nagraphia\nagraphic\nagrarian\nagrarianism\nagrarianize\nagrarianly\nAgrauleum\nagre\nagree\nagreeability\nagreeable\nagreeableness\nagreeably\nagreed\nagreeing\nagreeingly\nagreement\nagreer\nagregation\nagrege\nagrestal\nagrestial\nagrestian\nagrestic\nagria\nagricere\nagricole\nagricolist\nagricolite\nagricolous\nagricultor\nagricultural\nagriculturalist\nagriculturally\nagriculture\nagriculturer\nagriculturist\nAgrilus\nAgrimonia\nagrimony\nagrimotor\nagrin\nAgriochoeridae\nAgriochoerus\nagriological\nagriologist\nagriology\nAgrionia\nagrionid\nAgrionidae\nAgriotes\nAgriotypidae\nAgriotypus\nagrise\nagrito\nagroan\nagrobiologic\nagrobiological\nagrobiologically\nagrobiologist\nagrobiology\nagrogeological\nagrogeologically\nagrogeology\nagrologic\nagrological\nagrologically\nagrology\nagrom\nAgromyza\nagromyzid\nAgromyzidae\nagronome\nagronomial\nagronomic\nagronomical\nagronomics\nagronomist\nagronomy\nagroof\nagrope\nAgropyron\nAgrostemma\nagrosteral\nAgrostis\nagrostographer\nagrostographic\nagrostographical\nagrostography\nagrostologic\nagrostological\nagrostologist\nagrostology\nagrotechny\nAgrotis\naground\nagrufe\nagruif\nagrypnia\nagrypnotic\nagsam\nagua\naguacate\nAguacateca\naguavina\nAgudist\nague\naguelike\nagueproof\nagueweed\naguey\naguilarite\naguilawood\naguinaldo\naguirage\naguish\naguishly\naguishness\nagunah\nagush\nagust\nagy\nAgyieus\nagynarious\nagynary\nagynous\nagyrate\nagyria\nAh\nah\naha\nahaaina\nahankara\nAhantchuyuk\nahartalav\nahaunch\nahead\naheap\nahem\nAhepatokla\nAhet\nahey\nahimsa\nahind\nahint\nAhir\nahluwalia\nahmadi\nAhmadiya\nAhmed\nAhmet\nAhnfeltia\naho\nAhom\nahong\nahorse\nahorseback\nAhousaht\nahoy\nAhrendahronon\nAhriman\nAhrimanian\nahsan\nAht\nAhtena\nahu\nahuatle\nahuehuete\nahull\nahum\nahungered\nahungry\nahunt\nahura\nahush\nahwal\nahypnia\nai\nAias\nAiawong\naichmophobia\naid\naidable\naidance\naidant\naide\nAidenn\naider\nAides\naidful\naidless\naiel\naigialosaur\nAigialosauridae\nAigialosaurus\naiglet\naigremore\naigrette\naiguille\naiguillesque\naiguillette\naiguilletted\naikinite\nail\nailantery\nailanthic\nAilanthus\nailantine\nailanto\naile\nAileen\naileron\nailette\nAilie\nailing\naillt\nailment\nailsyte\nAiluridae\nailuro\nailuroid\nAiluroidea\nAiluropoda\nAiluropus\nAilurus\nailweed\naim\nAimak\naimara\nAimee\naimer\naimful\naimfully\naiming\naimless\naimlessly\naimlessness\nAimore\naimworthiness\nainaleh\nainhum\nainoi\nainsell\naint\nAinu\naion\naionial\nair\nAira\nairable\nairampo\nairan\nairbound\nairbrained\nairbrush\naircraft\naircraftman\naircraftsman\naircraftswoman\naircraftwoman\naircrew\naircrewman\nairdock\nairdrome\nairdrop\naire\nAiredale\nairedale\nairer\nairfield\nairfoil\nairframe\nairfreight\nairfreighter\nairgraphics\nairhead\nairiferous\nairified\nairily\nairiness\nairing\nairish\nairless\nairlift\nairlike\nairliner\nairmail\nairman\nairmanship\nairmark\nairmarker\nairmonger\nairohydrogen\nairometer\nairpark\nairphobia\nairplane\nairplanist\nairport\nairproof\nairscape\nairscrew\nairship\nairsick\nairsickness\nairstrip\nairt\nairtight\nairtightly\nairtightness\nairward\nairwards\nairway\nairwayman\nairwoman\nairworthiness\nairworthy\nairy\naischrolatreia\naiseweed\naisle\naisled\naisleless\naisling\nAissaoua\nAissor\naisteoir\nAistopoda\nAistopodes\nait\naitch\naitchbone\naitchless\naitchpiece\naitesis\naithochroi\naition\naitiotropic\nAitkenite\nAitutakian\naiwan\nAix\naizle\nAizoaceae\naizoaceous\nAizoon\nAjaja\najaja\najangle\najar\najari\nAjatasatru\najava\najhar\najivika\najog\najoint\najowan\nAjuga\najutment\nak\nAka\naka\nAkal\nakala\nAkali\nakalimba\nakamatsu\nAkamnik\nAkan\nAkanekunik\nAkania\nAkaniaceae\nakaroa\nakasa\nAkawai\nakazga\nakazgine\nakcheh\nake\nakeake\nakebi\nAkebia\nakee\nakeki\nakeley\nakenobeite\nakepiro\nakerite\nakey\nAkha\nAkhissar\nAkhlame\nAkhmimic\nakhoond\nakhrot\nakhyana\nakia\nAkim\nakimbo\nakin\nakindle\nakinesia\nakinesic\nakinesis\nakinete\nakinetic\nAkiskemikinik\nAkiyenik\nAkka\nAkkad\nAkkadian\nAkkadist\nakmudar\nakmuddar\naknee\nako\nakoasm\nakoasma\nakoluthia\nakonge\nAkontae\nAkoulalion\nakov\nakpek\nAkra\nakra\nAkrabattine\nakroasis\nakrochordite\nakroterion\nAktistetae\nAktistete\nAktivismus\nAktivist\naku\nakuammine\nakule\nakund\nAkwapim\nAl\nal\nala\nAlabama\nAlabaman\nAlabamian\nalabamide\nalabamine\nalabandite\nalabarch\nalabaster\nalabastos\nalabastrian\nalabastrine\nalabastrites\nalabastron\nalabastrum\nalacha\nalack\nalackaday\nalacreatine\nalacreatinine\nalacrify\nalacritous\nalacrity\nAlactaga\nalada\nAladdin\nAladdinize\nAladfar\nAladinist\nalaihi\nAlain\nalaite\nAlaki\nAlala\nalala\nalalite\nalalonga\nalalunga\nalalus\nAlamanni\nAlamannian\nAlamannic\nalameda\nalamo\nalamodality\nalamonti\nalamosite\nalamoth\nAlan\nalan\naland\nAlangiaceae\nalangin\nalangine\nAlangium\nalani\nalanine\nalannah\nAlans\nalantic\nalantin\nalantol\nalantolactone\nalantolic\nalanyl\nalar\nAlarbus\nalares\nAlaria\nAlaric\nalarm\nalarmable\nalarmed\nalarmedly\nalarming\nalarmingly\nalarmism\nalarmist\nAlarodian\nalarum\nalary\nalas\nAlascan\nAlaska\nalaskaite\nAlaskan\nalaskite\nAlastair\nAlaster\nalastrim\nalate\nalated\nalatern\nalaternus\nalation\nAlauda\nAlaudidae\nalaudine\nAlaunian\nAlawi\nAlb\nalb\nalba\nalbacore\nalbahaca\nAlbainn\nAlban\nalban\nAlbanenses\nAlbanensian\nAlbania\nAlbanian\nalbanite\nAlbany\nalbarco\nalbardine\nalbarello\nalbarium\nalbaspidin\nalbata\nAlbatros\nalbatross\nalbe\nalbedo\nalbedograph\nalbee\nalbeit\nAlberene\nAlbert\nAlberta\nalbertin\nAlbertina\nAlbertine\nAlbertinian\nAlbertist\nalbertite\nAlberto\nalbertustaler\nalbertype\nalbescence\nalbescent\nalbespine\nalbetad\nAlbi\nAlbian\nalbicans\nalbicant\nalbication\nalbiculi\nalbification\nalbificative\nalbiflorous\nalbify\nAlbigenses\nAlbigensian\nAlbigensianism\nAlbin\nalbinal\nalbiness\nalbinic\nalbinism\nalbinistic\nalbino\nalbinoism\nalbinotic\nalbinuria\nAlbion\nAlbireo\nalbite\nalbitic\nalbitite\nalbitization\nalbitophyre\nAlbizzia\nalbocarbon\nalbocinereous\nAlbococcus\nalbocracy\nAlboin\nalbolite\nalbolith\nalbopannin\nalbopruinose\nalboranite\nAlbrecht\nAlbright\nalbronze\nAlbruna\nAlbuca\nAlbuginaceae\nalbuginea\nalbugineous\nalbuginitis\nalbugo\nalbum\nalbumean\nalbumen\nalbumenization\nalbumenize\nalbumenizer\nalbumimeter\nalbumin\nalbuminate\nalbuminaturia\nalbuminiferous\nalbuminiform\nalbuminimeter\nalbuminimetry\nalbuminiparous\nalbuminization\nalbuminize\nalbuminocholia\nalbuminofibrin\nalbuminogenous\nalbuminoid\nalbuminoidal\nalbuminolysis\nalbuminometer\nalbuminometry\nalbuminone\nalbuminorrhea\nalbuminoscope\nalbuminose\nalbuminosis\nalbuminous\nalbuminousness\nalbuminuria\nalbuminuric\nalbumoid\nalbumoscope\nalbumose\nalbumosuria\nalburn\nalburnous\nalburnum\nalbus\nalbutannin\nAlbyn\nAlca\nAlcaaba\nAlcae\nAlcaic\nalcaide\nalcalde\nalcaldeship\nalcaldia\nAlcaligenes\nalcalizate\nAlcalzar\nalcamine\nalcanna\nAlcantara\nAlcantarines\nalcarraza\nalcatras\nalcazar\nAlcedines\nAlcedinidae\nAlcedininae\nAlcedo\nalcelaphine\nAlcelaphus\nAlces\nalchemic\nalchemical\nalchemically\nAlchemilla\nalchemist\nalchemistic\nalchemistical\nalchemistry\nalchemize\nalchemy\nalchera\nalcheringa\nalchimy\nalchitran\nalchochoden\nAlchornea\nalchymy\nAlcibiadean\nAlcicornium\nAlcidae\nalcidine\nalcine\nAlcippe\nalclad\nalco\nalcoate\nalcogel\nalcogene\nalcohate\nalcohol\nalcoholate\nalcoholature\nalcoholdom\nalcoholemia\nalcoholic\nalcoholically\nalcoholicity\nalcoholimeter\nalcoholism\nalcoholist\nalcoholizable\nalcoholization\nalcoholize\nalcoholmeter\nalcoholmetric\nalcoholomania\nalcoholometer\nalcoholometric\nalcoholometrical\nalcoholometry\nalcoholophilia\nalcoholuria\nalcoholysis\nalcoholytic\nAlcor\nAlcoran\nAlcoranic\nAlcoranist\nalcornoco\nalcornoque\nalcosol\nAlcotate\nalcove\nalcovinometer\nAlcuinian\nalcyon\nAlcyonacea\nalcyonacean\nAlcyonaria\nalcyonarian\nAlcyone\nAlcyones\nAlcyoniaceae\nalcyonic\nalcyoniform\nAlcyonium\nalcyonoid\naldamine\naldane\naldazin\naldazine\naldeament\nAldebaran\naldebaranium\naldehol\naldehydase\naldehyde\naldehydic\naldehydine\naldehydrol\nalder\nAlderamin\nalderman\naldermanate\naldermancy\naldermaness\naldermanic\naldermanical\naldermanity\naldermanlike\naldermanly\naldermanry\naldermanship\naldern\nAlderney\nalderwoman\nAldhafara\nAldhafera\naldim\naldime\naldimine\nAldine\naldine\naldoheptose\naldohexose\naldoketene\naldol\naldolization\naldolize\naldononose\naldopentose\naldose\naldoside\naldoxime\nAldrovanda\nAldus\nale\nAlea\naleak\naleatory\nalebench\naleberry\nAlebion\nalec\nalecithal\nalecize\nAleck\naleconner\nalecost\nAlectoria\nalectoria\nAlectorides\nalectoridine\nalectorioid\nAlectoris\nalectoromachy\nalectoromancy\nAlectoromorphae\nalectoromorphous\nAlectoropodes\nalectoropodous\nAlectrion\nAlectrionidae\nalectryomachy\nalectryomancy\nAlectryon\nalecup\nalee\nalef\nalefnull\naleft\nalefzero\nalegar\nalehoof\nalehouse\nAlejandro\nalem\nalemana\nAlemanni\nAlemannian\nAlemannic\nAlemannish\nalembic\nalembicate\nalembroth\nAlemite\nalemite\nalemmal\nalemonger\nalen\nAlencon\nAleochara\naleph\nalephs\nalephzero\nalepidote\nalepole\nalepot\nAleppine\nAleppo\nalerce\nalerse\nalert\nalertly\nalertness\nalesan\nalestake\naletap\naletaster\nAlethea\nalethiology\nalethopteis\nalethopteroid\nalethoscope\naletocyte\nAletris\nalette\naleukemic\nAleurites\naleuritic\nAleurobius\nAleurodes\nAleurodidae\naleuromancy\naleurometer\naleuronat\naleurone\naleuronic\naleuroscope\nAleut\nAleutian\nAleutic\naleutite\nalevin\nalewife\nAlex\nAlexander\nalexanders\nAlexandra\nAlexandreid\nAlexandrian\nAlexandrianism\nAlexandrina\nAlexandrine\nalexandrite\nAlexas\nAlexia\nalexia\nAlexian\nalexic\nalexin\nalexinic\nalexipharmacon\nalexipharmacum\nalexipharmic\nalexipharmical\nalexipyretic\nAlexis\nalexiteric\nalexiterical\nAlexius\naleyard\nAleyrodes\naleyrodid\nAleyrodidae\nAlf\nalf\nalfa\nalfaje\nalfalfa\nalfaqui\nalfaquin\nalfenide\nalfet\nalfilaria\nalfileria\nalfilerilla\nalfilerillo\nalfiona\nAlfirk\nalfonsin\nalfonso\nalforja\nAlfred\nAlfreda\nalfresco\nalfridaric\nalfridary\nAlfur\nAlfurese\nAlfuro\nalga\nalgae\nalgaecide\nalgaeological\nalgaeologist\nalgaeology\nalgaesthesia\nalgaesthesis\nalgal\nalgalia\nAlgaroth\nalgarroba\nalgarrobilla\nalgarrobin\nAlgarsife\nAlgarsyf\nalgate\nAlgebar\nalgebra\nalgebraic\nalgebraical\nalgebraically\nalgebraist\nalgebraization\nalgebraize\nAlgedi\nalgedo\nalgedonic\nalgedonics\nalgefacient\nAlgenib\nAlgerian\nAlgerine\nalgerine\nAlgernon\nalgesia\nalgesic\nalgesis\nalgesthesis\nalgetic\nAlgic\nalgic\nalgid\nalgidity\nalgidness\nAlgieba\nalgific\nalgin\nalginate\nalgine\nalginic\nalginuresis\nalgiomuscular\nalgist\nalgivorous\nalgocyan\nalgodoncillo\nalgodonite\nalgoesthesiometer\nalgogenic\nalgoid\nAlgol\nalgolagnia\nalgolagnic\nalgolagnist\nalgolagny\nalgological\nalgologist\nalgology\nAlgoman\nalgometer\nalgometric\nalgometrical\nalgometrically\nalgometry\nAlgomian\nAlgomic\nAlgonkian\nAlgonquian\nAlgonquin\nalgophilia\nalgophilist\nalgophobia\nalgor\nAlgorab\nAlgores\nalgorism\nalgorismic\nalgorist\nalgoristic\nalgorithm\nalgorithmic\nalgosis\nalgous\nalgovite\nalgraphic\nalgraphy\nalguazil\nalgum\nAlgy\nAlhagi\nAlhambra\nAlhambraic\nAlhambresque\nAlhena\nalhenna\nalias\nAlibamu\nalibangbang\nalibi\nalibility\nalible\nAlicant\nAlice\nalichel\nAlichino\nAlicia\nAlick\nalicoche\nalictisal\nalicyclic\nAlida\nalidade\nAlids\nalien\nalienability\nalienable\nalienage\nalienate\nalienation\nalienator\naliency\nalienee\naliener\nalienicola\nalienigenate\nalienism\nalienist\nalienize\nalienor\nalienship\naliethmoid\naliethmoidal\nalif\naliferous\naliform\naligerous\nalight\nalign\naligner\nalignment\naligreek\naliipoe\nalike\nalikeness\nalikewise\nAlikuluf\nAlikulufan\nalilonghi\nalima\naliment\nalimental\nalimentally\nalimentariness\nalimentary\nalimentation\nalimentative\nalimentatively\nalimentativeness\nalimenter\nalimentic\nalimentive\nalimentiveness\nalimentotherapy\nalimentum\nalimonied\nalimony\nalin\nalinasal\nAline\nalineation\nalintatao\naliofar\nAlioth\nalipata\naliped\naliphatic\nalipterion\naliptes\naliptic\naliquant\naliquot\naliseptal\nalish\nalisier\nAlisma\nAlismaceae\nalismaceous\nalismad\nalismal\nAlismales\nAlismataceae\nalismoid\naliso\nAlison\nalison\nalisonite\nalisp\nalisphenoid\nalisphenoidal\nalist\nAlister\nalit\nalite\nalitrunk\naliturgic\naliturgical\naliunde\nalive\naliveness\nalivincular\nAlix\naliyah\nalizarate\nalizari\nalizarin\naljoba\nalk\nalkahest\nalkahestic\nalkahestica\nalkahestical\nAlkaid\nalkalamide\nalkalemia\nalkalescence\nalkalescency\nalkalescent\nalkali\nalkalic\nalkaliferous\nalkalifiable\nalkalify\nalkaligen\nalkaligenous\nalkalimeter\nalkalimetric\nalkalimetrical\nalkalimetrically\nalkalimetry\nalkaline\nalkalinity\nalkalinization\nalkalinize\nalkalinuria\nalkalizable\nalkalizate\nalkalization\nalkalize\nalkalizer\nalkaloid\nalkaloidal\nalkalometry\nalkalosis\nalkalous\nAlkalurops\nalkamin\nalkamine\nalkane\nalkanet\nAlkanna\nalkannin\nAlkaphrah\nalkapton\nalkaptonuria\nalkaptonuric\nalkargen\nalkarsin\nalkekengi\nalkene\nalkenna\nalkenyl\nalkermes\nAlkes\nalkide\nalkine\nalkool\nAlkoran\nAlkoranic\nalkoxide\nalkoxy\nalkoxyl\nalky\nalkyd\nalkyl\nalkylamine\nalkylate\nalkylation\nalkylene\nalkylic\nalkylidene\nalkylize\nalkylogen\nalkyloxy\nalkyne\nall\nallabuta\nallactite\nallaeanthus\nallagite\nallagophyllous\nallagostemonous\nAllah\nallalinite\nAllamanda\nallamotti\nAllan\nallan\nallanite\nallanitic\nallantiasis\nallantochorion\nallantoic\nallantoid\nallantoidal\nAllantoidea\nallantoidean\nallantoidian\nallantoin\nallantoinase\nallantoinuria\nallantois\nallantoxaidin\nallanturic\nAllasch\nallassotonic\nallative\nallatrate\nallay\nallayer\nallayment\nallbone\nAlle\nallecret\nallectory\nallegate\nallegation\nallegator\nallege\nallegeable\nallegedly\nallegement\nalleger\nAlleghenian\nAllegheny\nallegiance\nallegiancy\nallegiant\nallegoric\nallegorical\nallegorically\nallegoricalness\nallegorism\nallegorist\nallegorister\nallegoristic\nallegorization\nallegorize\nallegorizer\nallegory\nallegretto\nallegro\nallele\nallelic\nallelism\nallelocatalytic\nallelomorph\nallelomorphic\nallelomorphism\nallelotropic\nallelotropism\nallelotropy\nalleluia\nalleluiatic\nallemand\nallemande\nallemontite\nAllen\nallenarly\nallene\nAllentiac\nAllentiacan\naller\nallergen\nallergenic\nallergia\nallergic\nallergin\nallergist\nallergy\nallerion\nallesthesia\nalleviate\nalleviatingly\nalleviation\nalleviative\nalleviator\nalleviatory\nalley\nalleyed\nalleyite\nalleyway\nallgood\nAllhallow\nAllhallowtide\nallheal\nalliable\nalliably\nAlliaceae\nalliaceous\nalliance\nalliancer\nAlliaria\nallicampane\nallice\nallicholly\nalliciency\nallicient\nAllie\nallied\nAllies\nallies\nalligate\nalligator\nalligatored\nallineate\nallineation\nAllionia\nAllioniaceae\nallision\nalliteral\nalliterate\nalliteration\nalliterational\nalliterationist\nalliterative\nalliteratively\nalliterativeness\nalliterator\nAllium\nallivalite\nallmouth\nallness\nAllobroges\nallocable\nallocaffeine\nallocatable\nallocate\nallocatee\nallocation\nallocator\nallochetia\nallochetite\nallochezia\nallochiral\nallochirally\nallochiria\nallochlorophyll\nallochroic\nallochroite\nallochromatic\nallochroous\nallochthonous\nallocinnamic\nalloclase\nalloclasite\nallocochick\nallocrotonic\nallocryptic\nallocute\nallocution\nallocutive\nallocyanine\nallodelphite\nallodesmism\nalloeosis\nalloeostropha\nalloeotic\nalloerotic\nalloerotism\nallogamous\nallogamy\nallogene\nallogeneity\nallogeneous\nallogenic\nallogenically\nallograph\nalloiogenesis\nalloisomer\nalloisomeric\nalloisomerism\nallokinesis\nallokinetic\nallokurtic\nallomerism\nallomerous\nallometric\nallometry\nallomorph\nallomorphic\nallomorphism\nallomorphite\nallomucic\nallonomous\nallonym\nallonymous\nallopalladium\nallopath\nallopathetic\nallopathetically\nallopathic\nallopathically\nallopathist\nallopathy\nallopatric\nallopatrically\nallopatry\nallopelagic\nallophanamide\nallophanates\nallophane\nallophanic\nallophone\nallophyle\nallophylian\nallophylic\nAllophylus\nallophytoid\nalloplasm\nalloplasmatic\nalloplasmic\nalloplast\nalloplastic\nalloplasty\nalloploidy\nallopolyploid\nallopsychic\nalloquial\nalloquialism\nalloquy\nallorhythmia\nallorrhyhmia\nallorrhythmic\nallosaur\nAllosaurus\nallose\nallosematic\nallosome\nallosyndesis\nallosyndetic\nallot\nallotee\nallotelluric\nallotheism\nAllotheria\nallothigene\nallothigenetic\nallothigenetically\nallothigenic\nallothigenous\nallothimorph\nallothimorphic\nallothogenic\nallothogenous\nallotment\nallotriodontia\nAllotriognathi\nallotriomorphic\nallotriophagia\nallotriophagy\nallotriuria\nallotrope\nallotrophic\nallotropic\nallotropical\nallotropically\nallotropicity\nallotropism\nallotropize\nallotropous\nallotropy\nallotrylic\nallottable\nallottee\nallotter\nallotype\nallotypical\nallover\nallow\nallowable\nallowableness\nallowably\nallowance\nallowedly\nallower\nalloxan\nalloxanate\nalloxanic\nalloxantin\nalloxuraemia\nalloxuremia\nalloxuric\nalloxyproteic\nalloy\nalloyage\nallozooid\nallseed\nallspice\nallthing\nallthorn\nalltud\nallude\nallure\nallurement\nallurer\nalluring\nalluringly\nalluringness\nallusion\nallusive\nallusively\nallusiveness\nalluvia\nalluvial\nalluviate\nalluviation\nalluvion\nalluvious\nalluvium\nallwhere\nallwhither\nallwork\nAllworthy\nAlly\nally\nallyl\nallylamine\nallylate\nallylation\nallylene\nallylic\nallylthiourea\nAlma\nalma\nAlmach\nalmaciga\nalmacigo\nalmadia\nalmadie\nalmagest\nalmagra\nAlmain\nAlman\nalmanac\nalmandine\nalmandite\nalme\nalmeidina\nalmemar\nAlmerian\nalmeriite\nAlmida\nalmightily\nalmightiness\nalmighty\nalmique\nAlmira\nalmirah\nalmochoden\nAlmohad\nAlmohade\nAlmohades\nalmoign\nAlmon\nalmon\nalmond\nalmondy\nalmoner\nalmonership\nalmonry\nAlmoravid\nAlmoravide\nAlmoravides\nalmost\nalmous\nalms\nalmsdeed\nalmsfolk\nalmsful\nalmsgiver\nalmsgiving\nalmshouse\nalmsman\nalmswoman\nalmucantar\nalmuce\nalmud\nalmude\nalmug\nAlmuredin\nalmuten\naln\nalnage\nalnager\nalnagership\nAlnaschar\nAlnascharism\nalnein\nalnico\nAlnilam\nalniresinol\nAlnitak\nAlnitham\nalniviridol\nalnoite\nalnuin\nAlnus\nalo\nAloadae\nAlocasia\nalochia\nalod\nalodial\nalodialism\nalodialist\nalodiality\nalodially\nalodian\nalodiary\nalodification\nalodium\nalody\naloe\naloed\naloelike\naloemodin\naloeroot\naloesol\naloeswood\naloetic\naloetical\naloewood\naloft\nalogia\nAlogian\nalogical\nalogically\nalogism\nalogy\naloid\naloin\nAlois\naloisiite\naloma\nalomancy\nalone\naloneness\nalong\nalongshore\nalongshoreman\nalongside\nalongst\nAlonso\nAlonsoa\nAlonzo\naloof\naloofly\naloofness\naloose\nalop\nalopecia\nAlopecias\nalopecist\nalopecoid\nAlopecurus\nalopeke\nAlopias\nAlopiidae\nAlosa\nalose\nAlouatta\nalouatte\naloud\nalow\nalowe\nAloxite\nAloysia\nAloysius\nalp\nalpaca\nalpasotes\nAlpax\nalpeen\nAlpen\nalpenglow\nalpenhorn\nalpenstock\nalpenstocker\nalpestral\nalpestrian\nalpestrine\nalpha\nalphabet\nalphabetarian\nalphabetic\nalphabetical\nalphabetically\nalphabetics\nalphabetiform\nalphabetism\nalphabetist\nalphabetization\nalphabetize\nalphabetizer\nAlphard\nalphatoluic\nAlphean\nAlphecca\nalphenic\nAlpheratz\nalphitomancy\nalphitomorphous\nalphol\nAlphonist\nAlphonse\nAlphonsine\nAlphonsism\nAlphonso\nalphorn\nalphos\nalphosis\nalphyl\nAlpian\nAlpid\nalpieu\nalpigene\nAlpine\nalpine\nalpinely\nalpinery\nalpinesque\nAlpinia\nAlpiniaceae\nAlpinism\nAlpinist\nalpist\nAlpujarra\nalqueire\nalquier\nalquifou\nalraun\nalreadiness\nalready\nalright\nalrighty\nalroot\nalruna\nAlsatia\nAlsatian\nalsbachite\nAlshain\nAlsinaceae\nalsinaceous\nAlsine\nalso\nalsoon\nAlsophila\nAlstonia\nalstonidine\nalstonine\nalstonite\nAlstroemeria\nalsweill\nalt\nAltaian\nAltaic\nAltaid\nAltair\naltaite\nAltamira\naltar\naltarage\naltared\naltarist\naltarlet\naltarpiece\naltarwise\naltazimuth\nalter\nalterability\nalterable\nalterableness\nalterably\nalterant\nalterate\nalteration\nalterative\naltercate\naltercation\naltercative\nalteregoism\nalteregoistic\nalterer\nalterity\naltern\nalternacy\nalternance\nalternant\nAlternanthera\nAlternaria\nalternariose\nalternate\nalternately\nalternateness\nalternating\nalternatingly\nalternation\nalternationist\nalternative\nalternatively\nalternativeness\nalternativity\nalternator\nalterne\nalternifoliate\nalternipetalous\nalternipinnate\nalternisepalous\nalternize\nalterocentric\nAlthaea\nalthaein\nAlthea\nalthea\nalthein\naltheine\nalthionic\naltho\nalthorn\nalthough\nAltica\nAlticamelus\naltigraph\naltilik\naltiloquence\naltiloquent\naltimeter\naltimetrical\naltimetrically\naltimetry\naltin\naltincar\nAltingiaceae\naltingiaceous\naltininck\naltiplano\naltiscope\naltisonant\naltisonous\naltissimo\naltitude\naltitudinal\naltitudinarian\nalto\naltogether\naltogetherness\naltometer\naltoun\naltrices\naltricial\naltropathy\naltrose\naltruism\naltruist\naltruistic\naltruistically\naltschin\naltun\nAluco\nAluconidae\nAluconinae\naludel\nAludra\nalula\nalular\nalulet\nAlulim\nalum\nalumbloom\nAlumel\nalumic\nalumiferous\nalumina\naluminaphone\naluminate\nalumine\naluminic\naluminide\naluminiferous\naluminiform\naluminish\naluminite\naluminium\naluminize\naluminoferric\naluminographic\naluminography\naluminose\naluminosilicate\naluminosis\naluminosity\naluminothermic\naluminothermics\naluminothermy\naluminotype\naluminous\naluminum\naluminyl\nalumish\nalumite\nalumium\nalumna\nalumnae\nalumnal\nalumni\nalumniate\nAlumnol\nalumnus\nalumohydrocalcite\nalumroot\nAlundum\naluniferous\nalunite\nalunogen\nalupag\nAlur\nalure\nalurgite\nalushtite\naluta\nalutaceous\nAlvah\nAlvan\nalvar\nalvearium\nalveary\nalveloz\nalveola\nalveolar\nalveolariform\nalveolary\nalveolate\nalveolated\nalveolation\nalveole\nalveolectomy\nalveoli\nalveoliform\nalveolite\nAlveolites\nalveolitis\nalveoloclasia\nalveolocondylean\nalveolodental\nalveololabial\nalveololingual\nalveolonasal\nalveolosubnasal\nalveolotomy\nalveolus\nalveus\nalviducous\nAlvin\nAlvina\nalvine\nAlvissmal\nalvite\nalvus\nalway\nalways\naly\nAlya\nalycompaine\nalymphia\nalymphopotent\nalypin\nalysson\nAlyssum\nalytarch\nAlytes\nam\nama\namaas\nAmabel\namability\namacratic\namacrinal\namacrine\namadavat\namadelphous\nAmadi\nAmadis\namadou\nAmaethon\nAmafingo\namaga\namah\nAmahuaca\namain\namaister\namakebe\nAmakosa\namala\namalaita\namalaka\nAmalfian\nAmalfitan\namalgam\namalgamable\namalgamate\namalgamation\namalgamationist\namalgamative\namalgamatize\namalgamator\namalgamist\namalgamization\namalgamize\nAmalings\nAmalrician\namaltas\namamau\nAmampondo\nAmanda\namandin\nAmandus\namang\namani\namania\nAmanist\nAmanita\namanitin\namanitine\nAmanitopsis\namanori\namanous\namantillo\namanuenses\namanuensis\namapa\nAmapondo\namar\nAmara\nAmarantaceae\namarantaceous\namaranth\nAmaranthaceae\namaranthaceous\namaranthine\namaranthoid\nAmaranthus\namarantite\nAmarantus\namarelle\namarevole\namargoso\namarillo\namarin\namarine\namaritude\namarity\namaroid\namaroidal\nAmarth\namarthritis\namaryllid\nAmaryllidaceae\namaryllidaceous\namaryllideous\nAmaryllis\namasesis\namass\namassable\namasser\namassment\nAmasta\namasthenic\namastia\namasty\nAmatembu\namaterialistic\namateur\namateurish\namateurishly\namateurishness\namateurism\namateurship\nAmati\namative\namatively\namativeness\namatol\namatorial\namatorially\namatorian\namatorious\namatory\namatrice\namatungula\namaurosis\namaurotic\namaze\namazed\namazedly\namazedness\namazeful\namazement\namazia\nAmazilia\namazing\namazingly\nAmazon\nAmazona\nAmazonian\nAmazonism\namazonite\nAmazulu\namba\nambage\nambagiosity\nambagious\nambagiously\nambagiousness\nambagitory\nambalam\namban\nambar\nambaree\nambarella\nambary\nambash\nambassade\nAmbassadeur\nambassador\nambassadorial\nambassadorially\nambassadorship\nambassadress\nambassage\nambassy\nambatch\nambatoarinite\nambay\nambeer\namber\namberfish\nambergris\namberiferous\namberite\namberoid\namberous\nambery\nambicolorate\nambicoloration\nambidexter\nambidexterity\nambidextral\nambidextrous\nambidextrously\nambidextrousness\nambience\nambiency\nambiens\nambient\nambier\nambigenous\nambiguity\nambiguous\nambiguously\nambiguousness\nambilateral\nambilateralaterally\nambilaterality\nambilevous\nambilian\nambilogy\nambiopia\nambiparous\nambisinister\nambisinistrous\nambisporangiate\nambisyllabic\nambit\nambital\nambitendency\nambition\nambitionist\nambitionless\nambitionlessly\nambitious\nambitiously\nambitiousness\nambitty\nambitus\nambivalence\nambivalency\nambivalent\nambivert\namble\nambler\nambling\namblingly\namblotic\namblyacousia\namblyaphia\nAmblycephalidae\nAmblycephalus\namblychromatic\nAmblydactyla\namblygeusia\namblygon\namblygonal\namblygonite\namblyocarpous\nAmblyomma\namblyope\namblyopia\namblyopic\nAmblyopsidae\nAmblyopsis\namblyoscope\namblypod\nAmblypoda\namblypodous\nAmblyrhynchus\namblystegite\nAmblystoma\nambo\namboceptoid\namboceptor\nAmbocoelia\nAmboina\nAmboinese\nambomalleal\nambon\nambonite\nAmbonnay\nambos\nambosexous\nambosexual\nambrain\nambrein\nambrette\nAmbrica\nambrite\nambroid\nambrology\nAmbrose\nambrose\nambrosia\nambrosiac\nAmbrosiaceae\nambrosiaceous\nambrosial\nambrosially\nAmbrosian\nambrosian\nambrosiate\nambrosin\nambrosine\nAmbrosio\nambrosterol\nambrotype\nambry\nambsace\nambulacral\nambulacriform\nambulacrum\nambulance\nambulancer\nambulant\nambulate\nambulatio\nambulation\nambulative\nambulator\nAmbulatoria\nambulatorial\nambulatorium\nambulatory\nambuling\nambulomancy\namburbial\nambury\nambuscade\nambuscader\nambush\nambusher\nambushment\nAmbystoma\nAmbystomidae\namchoor\name\namebiform\nAmedeo\nameed\nameen\nAmeiuridae\nAmeiurus\nAmeiva\nAmelanchier\namelcorn\nAmelia\namelia\namelification\nameliorable\nameliorableness\nameliorant\nameliorate\namelioration\nameliorativ\nameliorative\nameliorator\namellus\nameloblast\nameloblastic\namelu\namelus\nAmen\namen\namenability\namenable\namenableness\namenably\namend\namendable\namendableness\namendatory\namende\namender\namendment\namends\namene\namenia\nAmenism\nAmenite\namenity\namenorrhea\namenorrheal\namenorrheic\namenorrhoea\nament\namentaceous\namental\namentia\nAmentiferae\namentiferous\namentiform\namentulum\namentum\namerce\namerceable\namercement\namercer\namerciament\nAmerica\nAmerican\nAmericana\nAmericanese\nAmericanism\nAmericanist\nAmericanistic\nAmericanitis\nAmericanization\nAmericanize\nAmericanizer\nAmericanly\nAmericanoid\nAmericaward\nAmericawards\namericium\nAmericomania\nAmericophobe\nAmerimnon\nAmerind\nAmerindian\nAmerindic\namerism\nameristic\namesite\nAmetabola\nametabole\nametabolia\nametabolian\nametabolic\nametabolism\nametabolous\nametaboly\nametallous\namethodical\namethodically\namethyst\namethystine\nametoecious\nametria\nametrometer\nametrope\nametropia\nametropic\nametrous\nAmex\namgarn\namhar\namherstite\namhran\nAmi\nami\nAmia\namiability\namiable\namiableness\namiably\namianth\namianthiform\namianthine\nAmianthium\namianthoid\namianthoidal\namianthus\namic\namicability\namicable\namicableness\namicably\namical\namice\namiced\namicicide\namicrobic\namicron\namicronucleate\namid\namidase\namidate\namidation\namide\namidic\namidid\namidide\namidin\namidine\nAmidism\nAmidist\namido\namidoacetal\namidoacetic\namidoacetophenone\namidoaldehyde\namidoazo\namidoazobenzene\namidoazobenzol\namidocaffeine\namidocapric\namidofluorid\namidofluoride\namidogen\namidoguaiacol\namidohexose\namidoketone\namidol\namidomyelin\namidon\namidophenol\namidophosphoric\namidoplast\namidoplastid\namidopyrine\namidosuccinamic\namidosulphonal\namidothiazole\namidoxime\namidoxy\namidoxyl\namidrazone\namidship\namidships\namidst\namidstream\namidulin\nAmigo\nAmiidae\namil\nAmiles\nAmiloun\namimia\namimide\namin\naminate\namination\namine\namini\naminic\naminity\naminization\naminize\namino\naminoacetal\naminoacetanilide\naminoacetic\naminoacetone\naminoacetophenetidine\naminoacetophenone\naminoacidemia\naminoaciduria\naminoanthraquinone\naminoazobenzene\naminobarbituric\naminobenzaldehyde\naminobenzamide\naminobenzene\naminobenzoic\naminocaproic\naminodiphenyl\naminoethionic\naminoformic\naminogen\naminoglutaric\naminoguanidine\naminoid\naminoketone\naminolipin\naminolysis\naminolytic\naminomalonic\naminomyelin\naminophenol\naminoplast\naminoplastic\naminopropionic\naminopurine\naminopyrine\naminoquinoline\naminosis\naminosuccinamic\naminosulphonic\naminothiophen\naminovaleric\naminoxylol\nAminta\nAmintor\nAmioidei\nAmir\namir\nAmiranha\namiray\namirship\nAmish\nAmishgo\namiss\namissibility\namissible\namissness\nAmita\nAmitabha\namitosis\namitotic\namitotically\namity\namixia\nAmizilis\namla\namli\namlikar\namlong\nAmma\namma\namman\nAmmanite\nammelide\nammelin\nammeline\nammer\nammeter\nAmmi\nAmmiaceae\nammiaceous\nammine\namminochloride\namminolysis\namminolytic\nammiolite\nammo\nAmmobium\nammochaeta\nammochryse\nammocoete\nammocoetes\nammocoetid\nAmmocoetidae\nammocoetiform\nammocoetoid\nAmmodytes\nAmmodytidae\nammodytoid\nammonal\nammonate\nammonation\nAmmonea\nammonia\nammoniacal\nammoniacum\nammoniate\nammoniation\nammonic\nammonical\nammoniemia\nammonification\nammonifier\nammonify\nammoniojarosite\nammonion\nammonionitrate\nAmmonite\nammonite\nAmmonites\nAmmonitess\nammonitic\nammoniticone\nammonitiferous\nAmmonitish\nammonitoid\nAmmonitoidea\nammonium\nammoniuria\nammonization\nammono\nammonobasic\nammonocarbonic\nammonocarbonous\nammonoid\nAmmonoidea\nammonoidean\nammonolysis\nammonolytic\nammonolyze\nAmmophila\nammophilous\nammoresinol\nammotherapy\nammu\nammunition\namnemonic\namnesia\namnesic\namnestic\namnesty\namnia\namniac\namniatic\namnic\nAmnigenia\namnioallantoic\namniocentesis\namniochorial\namnioclepsis\namniomancy\namnion\nAmnionata\namnionate\namnionic\namniorrhea\nAmniota\namniote\namniotic\namniotitis\namniotome\namober\namobyr\namoeba\namoebae\nAmoebaea\namoebaean\namoebaeum\namoebalike\namoeban\namoebian\namoebiasis\namoebic\namoebicide\namoebid\nAmoebida\nAmoebidae\namoebiform\nAmoebobacter\nAmoebobacterieae\namoebocyte\nAmoebogeniae\namoeboid\namoeboidism\namoebous\namoebula\namok\namoke\namole\namolilla\namomal\nAmomales\nAmomis\namomum\namong\namongst\namontillado\namor\namorado\namoraic\namoraim\namoral\namoralism\namoralist\namorality\namoralize\nAmores\namoret\namoretto\nAmoreuxia\namorism\namorist\namoristic\nAmorite\nAmoritic\nAmoritish\namorosity\namoroso\namorous\namorously\namorousness\nAmorpha\namorphia\namorphic\namorphinism\namorphism\nAmorphophallus\namorphophyte\namorphotae\namorphous\namorphously\namorphousness\namorphus\namorphy\namort\namortisseur\namortizable\namortization\namortize\namortizement\nAmorua\nAmos\nAmoskeag\namotion\namotus\namount\namour\namourette\namovability\namovable\namove\nAmoy\nAmoyan\nAmoyese\nampalaya\nampalea\nampangabeite\nampasimenite\nAmpelidaceae\nampelidaceous\nAmpelidae\nampelideous\nAmpelis\nampelite\nampelitic\nampelographist\nampelography\nampelopsidin\nampelopsin\nAmpelopsis\nAmpelosicyos\nampelotherapy\namper\namperage\nampere\namperemeter\nAmperian\namperometer\nampersand\nampery\namphanthium\nampheclexis\nampherotokous\nampherotoky\namphetamine\namphiarthrodial\namphiarthrosis\namphiaster\namphibalus\nAmphibia\namphibial\namphibian\namphibichnite\namphibiety\namphibiological\namphibiology\namphibion\namphibiotic\nAmphibiotica\namphibious\namphibiously\namphibiousness\namphibium\namphiblastic\namphiblastula\namphiblestritis\nAmphibola\namphibole\namphibolia\namphibolic\namphiboliferous\namphiboline\namphibolite\namphibolitic\namphibological\namphibologically\namphibologism\namphibology\namphibolous\namphiboly\namphibrach\namphibrachic\namphibryous\nAmphicarpa\nAmphicarpaea\namphicarpic\namphicarpium\namphicarpogenous\namphicarpous\namphicentric\namphichroic\namphichrom\namphichromatic\namphichrome\namphicoelian\namphicoelous\nAmphicondyla\namphicondylous\namphicrania\namphicreatinine\namphicribral\namphictyon\namphictyonian\namphictyonic\namphictyony\nAmphicyon\nAmphicyonidae\namphicyrtic\namphicyrtous\namphicytula\namphid\namphide\namphidesmous\namphidetic\namphidiarthrosis\namphidiploid\namphidiploidy\namphidisc\nAmphidiscophora\namphidiscophoran\namphierotic\namphierotism\nAmphigaea\namphigam\nAmphigamae\namphigamous\namphigastrium\namphigastrula\namphigean\namphigen\namphigene\namphigenesis\namphigenetic\namphigenous\namphigenously\namphigonic\namphigonium\namphigonous\namphigony\namphigoric\namphigory\namphigouri\namphikaryon\namphilogism\namphilogy\namphimacer\namphimictic\namphimictical\namphimictically\namphimixis\namphimorula\nAmphinesian\nAmphineura\namphineurous\namphinucleus\nAmphion\nAmphionic\nAmphioxi\nAmphioxidae\nAmphioxides\nAmphioxididae\namphioxus\namphipeptone\namphiphloic\namphiplatyan\nAmphipleura\namphiploid\namphiploidy\namphipneust\nAmphipneusta\namphipneustic\nAmphipnous\namphipod\nAmphipoda\namphipodal\namphipodan\namphipodiform\namphipodous\namphiprostylar\namphiprostyle\namphiprotic\namphipyrenin\nAmphirhina\namphirhinal\namphirhine\namphisarca\namphisbaena\namphisbaenian\namphisbaenic\nAmphisbaenidae\namphisbaenoid\namphisbaenous\namphiscians\namphiscii\nAmphisile\nAmphisilidae\namphispermous\namphisporangiate\namphispore\nAmphistoma\namphistomatic\namphistome\namphistomoid\namphistomous\nAmphistomum\namphistylar\namphistylic\namphistyly\namphitene\namphitheater\namphitheatered\namphitheatral\namphitheatric\namphitheatrical\namphitheatrically\namphithecial\namphithecium\namphithect\namphithyron\namphitokal\namphitokous\namphitoky\namphitriaene\namphitrichous\nAmphitrite\namphitropal\namphitropous\nAmphitruo\nAmphitryon\nAmphiuma\nAmphiumidae\namphivasal\namphivorous\nAmphizoidae\namphodarch\namphodelite\namphodiplopia\namphogenous\nampholyte\namphopeptone\namphophil\namphophile\namphophilic\namphophilous\namphora\namphoral\namphore\namphorette\namphoric\namphoricity\namphoriloquy\namphorophony\namphorous\namphoteric\nAmphrysian\nample\namplectant\nampleness\namplexation\namplexicaudate\namplexicaul\namplexicauline\namplexifoliate\namplexus\nampliate\nampliation\nampliative\namplicative\namplidyne\namplification\namplificative\namplificator\namplificatory\namplifier\namplify\namplitude\namply\nampollosity\nampongue\nampoule\nampul\nampulla\nampullaceous\nampullar\nAmpullaria\nAmpullariidae\nampullary\nampullate\nampullated\nampulliform\nampullitis\nampullula\namputate\namputation\namputational\namputative\namputator\namputee\nampyx\namra\namreeta\namrita\nAmritsar\namsath\namsel\nAmsonia\nAmsterdamer\namt\namtman\nAmuchco\namuck\nAmueixa\namuguis\namula\namulet\namuletic\namulla\namunam\namurca\namurcosity\namurcous\nAmurru\namusable\namuse\namused\namusedly\namusee\namusement\namuser\namusette\nAmusgo\namusia\namusing\namusingly\namusingness\namusive\namusively\namusiveness\namutter\namuyon\namuyong\namuze\namvis\nAmy\namy\nAmyclaean\nAmyclas\namyelencephalia\namyelencephalic\namyelencephalous\namyelia\namyelic\namyelinic\namyelonic\namyelous\namygdal\namygdala\nAmygdalaceae\namygdalaceous\namygdalase\namygdalate\namygdalectomy\namygdalic\namygdaliferous\namygdaliform\namygdalin\namygdaline\namygdalinic\namygdalitis\namygdaloid\namygdaloidal\namygdalolith\namygdaloncus\namygdalopathy\namygdalothripsis\namygdalotome\namygdalotomy\nAmygdalus\namygdonitrile\namygdophenin\namygdule\namyl\namylaceous\namylamine\namylan\namylase\namylate\namylemia\namylene\namylenol\namylic\namylidene\namyliferous\namylin\namylo\namylocellulose\namyloclastic\namylocoagulase\namylodextrin\namylodyspepsia\namylogen\namylogenesis\namylogenic\namylohydrolysis\namylohydrolytic\namyloid\namyloidal\namyloidosis\namyloleucite\namylolysis\namylolytic\namylom\namylometer\namylon\namylopectin\namylophagia\namylophosphate\namylophosphoric\namyloplast\namyloplastic\namyloplastid\namylopsin\namylose\namylosis\namylosynthesis\namylum\namyluria\nAmynodon\namynodont\namyosthenia\namyosthenic\namyotaxia\namyotonia\namyotrophia\namyotrophic\namyotrophy\namyous\nAmyraldism\nAmyraldist\nAmyridaceae\namyrin\nAmyris\namyrol\namyroot\nAmytal\namyxorrhea\namyxorrhoea\nan\nAna\nana\nAnabaena\nAnabantidae\nAnabaptism\nAnabaptist\nAnabaptistic\nAnabaptistical\nAnabaptistically\nAnabaptistry\nanabaptize\nAnabas\nanabasine\nanabasis\nanabasse\nanabata\nanabathmos\nanabatic\nanaberoga\nanabibazon\nanabiosis\nanabiotic\nAnablepidae\nAnableps\nanabo\nanabohitsite\nanabolic\nanabolin\nanabolism\nanabolite\nanabolize\nanabong\nanabranch\nanabrosis\nanabrotic\nanacahuita\nanacahuite\nanacalypsis\nanacampsis\nanacamptic\nanacamptically\nanacamptics\nanacamptometer\nanacanth\nanacanthine\nAnacanthini\nanacanthous\nanacara\nanacard\nAnacardiaceae\nanacardiaceous\nanacardic\nAnacardium\nanacatadidymus\nanacatharsis\nanacathartic\nanacephalaeosis\nanacephalize\nAnaces\nAnacharis\nanachorism\nanachromasis\nanachronic\nanachronical\nanachronically\nanachronism\nanachronismatical\nanachronist\nanachronistic\nanachronistical\nanachronistically\nanachronize\nanachronous\nanachronously\nanachueta\nanacid\nanacidity\nanaclasis\nanaclastic\nanaclastics\nAnaclete\nanacleticum\nanaclinal\nanaclisis\nanaclitic\nanacoenosis\nanacoluthia\nanacoluthic\nanacoluthically\nanacoluthon\nanaconda\nAnacreon\nAnacreontic\nAnacreontically\nanacrisis\nAnacrogynae\nanacrogynae\nanacrogynous\nanacromyodian\nanacrotic\nanacrotism\nanacrusis\nanacrustic\nanacrustically\nanaculture\nanacusia\nanacusic\nanacusis\nAnacyclus\nanadem\nanadenia\nanadicrotic\nanadicrotism\nanadidymus\nanadiplosis\nanadipsia\nanadipsic\nanadrom\nanadromous\nAnadyomene\nanaematosis\nanaemia\nanaemic\nanaeretic\nanaerobation\nanaerobe\nanaerobia\nanaerobian\nanaerobic\nanaerobically\nanaerobies\nanaerobion\nanaerobiont\nanaerobiosis\nanaerobiotic\nanaerobiotically\nanaerobious\nanaerobism\nanaerobium\nanaerophyte\nanaeroplastic\nanaeroplasty\nanaesthesia\nanaesthesiant\nanaesthetically\nanaesthetizer\nanaetiological\nanagalactic\nAnagallis\nanagap\nanagenesis\nanagenetic\nanagep\nanagignoskomena\nanaglyph\nanaglyphic\nanaglyphical\nanaglyphics\nanaglyphoscope\nanaglyphy\nanaglyptic\nanaglyptical\nanaglyptics\nanaglyptograph\nanaglyptographic\nanaglyptography\nanaglypton\nanagnorisis\nanagnost\nanagoge\nanagogic\nanagogical\nanagogically\nanagogics\nanagogy\nanagram\nanagrammatic\nanagrammatical\nanagrammatically\nanagrammatism\nanagrammatist\nanagrammatize\nanagrams\nanagraph\nanagua\nanagyrin\nanagyrine\nAnagyris\nanahau\nAnahita\nAnaitis\nAnakes\nanakinesis\nanakinetic\nanakinetomer\nanakinetomeric\nanakoluthia\nanakrousis\nanaktoron\nanal\nanalabos\nanalav\nanalcime\nanalcimite\nanalcite\nanalcitite\nanalecta\nanalectic\nanalects\nanalemma\nanalemmatic\nanalepsis\nanalepsy\nanaleptic\nanaleptical\nanalgen\nanalgesia\nanalgesic\nAnalgesidae\nanalgesis\nanalgesist\nanalgetic\nanalgia\nanalgic\nanalgize\nanalkalinity\nanallagmatic\nanallantoic\nAnallantoidea\nanallantoidean\nanallergic\nanally\nanalogic\nanalogical\nanalogically\nanalogicalness\nanalogion\nanalogism\nanalogist\nanalogistic\nanalogize\nanalogon\nanalogous\nanalogously\nanalogousness\nanalogue\nanalogy\nanalphabet\nanalphabete\nanalphabetic\nanalphabetical\nanalphabetism\nanalysability\nanalysable\nanalysand\nanalysation\nanalyse\nanalyser\nanalyses\nanalysis\nanalyst\nanalytic\nanalytical\nanalytically\nanalytics\nanalyzability\nanalyzable\nanalyzation\nanalyze\nanalyzer\nAnam\nanam\nanama\nanamesite\nanametadromous\nAnamirta\nanamirtin\nAnamite\nanamite\nanammonid\nanammonide\nanamnesis\nanamnestic\nanamnestically\nAnamnia\nAnamniata\nAnamnionata\nanamnionic\nAnamniota\nanamniote\nanamniotic\nanamorphic\nanamorphism\nanamorphoscope\nanamorphose\nanamorphosis\nanamorphote\nanamorphous\nanan\nanana\nananaplas\nananaples\nananas\nananda\nanandrarious\nanandria\nanandrous\nananepionic\nanangioid\nanangular\nAnanias\nAnanism\nAnanite\nanankastic\nAnansi\nAnanta\nanantherate\nanantherous\nananthous\nananym\nanapaest\nanapaestic\nanapaestical\nanapaestically\nanapaganize\nanapaite\nanapanapa\nanapeiratic\nanaphalantiasis\nAnaphalis\nanaphase\nAnaphe\nanaphia\nanaphora\nanaphoral\nanaphoria\nanaphoric\nanaphorical\nanaphrodisia\nanaphrodisiac\nanaphroditic\nanaphroditous\nanaphylactic\nanaphylactin\nanaphylactogen\nanaphylactogenic\nanaphylactoid\nanaphylatoxin\nanaphylaxis\nanaphyte\nanaplasia\nanaplasis\nanaplasm\nAnaplasma\nanaplasmosis\nanaplastic\nanaplasty\nanaplerosis\nanaplerotic\nanapnea\nanapneic\nanapnoeic\nanapnograph\nanapnoic\nanapnometer\nanapodeictic\nanapophysial\nanapophysis\nanapsid\nAnapsida\nanapsidan\nAnapterygota\nanapterygote\nanapterygotism\nanapterygotous\nAnaptomorphidae\nAnaptomorphus\nanaptotic\nanaptychus\nanaptyctic\nanaptyctical\nanaptyxis\nanaqua\nanarcestean\nAnarcestes\nanarch\nanarchal\nanarchial\nanarchic\nanarchical\nanarchically\nanarchism\nanarchist\nanarchistic\nanarchize\nanarchoindividualist\nanarchosocialist\nanarchosyndicalism\nanarchosyndicalist\nanarchy\nanarcotin\nanareta\nanaretic\nanaretical\nanargyros\nanarthria\nanarthric\nanarthropod\nAnarthropoda\nanarthropodous\nanarthrosis\nanarthrous\nanarthrously\nanarthrousness\nanartismos\nanarya\nAnaryan\nAnas\nAnasa\nanasarca\nanasarcous\nAnasazi\nanaschistic\nanaseismic\nAnasitch\nanaspadias\nanaspalin\nAnaspida\nAnaspidacea\nAnaspides\nanastalsis\nanastaltic\nAnastasia\nAnastasian\nanastasimon\nanastasimos\nanastasis\nAnastasius\nanastate\nanastatic\nAnastatica\nAnastatus\nanastigmat\nanastigmatic\nanastomose\nanastomosis\nanastomotic\nAnastomus\nanastrophe\nAnastrophia\nAnat\nanatase\nanatexis\nanathema\nanathematic\nanathematical\nanathematically\nanathematism\nanathematization\nanathematize\nanathematizer\nanatheme\nanathemize\nAnatherum\nAnatidae\nanatifa\nAnatifae\nanatifer\nanatiferous\nAnatinacea\nAnatinae\nanatine\nanatocism\nAnatole\nAnatolian\nAnatolic\nAnatoly\nanatomic\nanatomical\nanatomically\nanatomicobiological\nanatomicochirurgical\nanatomicomedical\nanatomicopathologic\nanatomicopathological\nanatomicophysiologic\nanatomicophysiological\nanatomicosurgical\nanatomism\nanatomist\nanatomization\nanatomize\nanatomizer\nanatomopathologic\nanatomopathological\nanatomy\nanatopism\nanatox\nanatoxin\nanatreptic\nanatripsis\nanatripsology\nanatriptic\nanatron\nanatropal\nanatropia\nanatropous\nAnatum\nanaudia\nanaunter\nanaunters\nAnax\nAnaxagorean\nAnaxagorize\nanaxial\nAnaximandrian\nanaxon\nanaxone\nAnaxonia\nanay\nanazoturia\nanba\nanbury\nAncerata\nancestor\nancestorial\nancestorially\nancestral\nancestrally\nancestress\nancestrial\nancestrian\nancestry\nAncha\nAnchat\nAnchietea\nanchietin\nanchietine\nanchieutectic\nanchimonomineral\nAnchisaurus\nAnchises\nAnchistea\nAnchistopoda\nanchithere\nanchitherioid\nanchor\nanchorable\nanchorage\nanchorate\nanchored\nanchorer\nanchoress\nanchoret\nanchoretic\nanchoretical\nanchoretish\nanchoretism\nanchorhold\nanchorite\nanchoritess\nanchoritic\nanchoritical\nanchoritish\nanchoritism\nanchorless\nanchorlike\nanchorwise\nanchovy\nAnchtherium\nAnchusa\nanchusin\nanchusine\nanchylose\nanchylosis\nancience\nanciency\nancient\nancientism\nanciently\nancientness\nancientry\nancienty\nancile\nancilla\nancillary\nancipital\nancipitous\nAncistrocladaceae\nancistrocladaceous\nAncistrocladus\nancistroid\nancon\nAncona\nanconad\nanconagra\nanconal\nancone\nanconeal\nanconeous\nanconeus\nanconitis\nanconoid\nancony\nancora\nancoral\nAncyloceras\nAncylocladus\nAncylodactyla\nancylopod\nAncylopoda\nAncylostoma\nancylostome\nancylostomiasis\nAncylostomum\nAncylus\nAncyrean\nAncyrene\nand\nanda\nandabatarian\nAndalusian\nandalusite\nAndaman\nAndamanese\nandante\nandantino\nAndaqui\nAndaquian\nAndarko\nAndaste\nAnde\nAndean\nAnderson\nAndesic\nandesine\nandesinite\nandesite\nandesitic\nAndevo\nAndhra\nAndi\nAndian\nAndine\nAndira\nandirin\nandirine\nandiroba\nandiron\nAndoke\nandorite\nAndorobo\nAndorran\nandouillet\nandradite\nandranatomy\nandrarchy\nAndre\nAndrea\nAndreaea\nAndreaeaceae\nAndreaeales\nAndreas\nAndrena\nandrenid\nAndrenidae\nAndrew\nandrewsite\nAndria\nAndriana\nAndrias\nandric\nAndries\nandrocentric\nandrocephalous\nandrocephalum\nandroclinium\nAndroclus\nandroconium\nandrocracy\nandrocratic\nandrocyte\nandrodioecious\nandrodioecism\nandrodynamous\nandroecial\nandroecium\nandrogametangium\nandrogametophore\nandrogen\nandrogenesis\nandrogenetic\nandrogenic\nandrogenous\nandroginous\nandrogone\nandrogonia\nandrogonial\nandrogonidium\nandrogonium\nAndrographis\nandrographolide\nandrogynal\nandrogynary\nandrogyne\nandrogyneity\nandrogynia\nandrogynism\nandrogynous\nandrogynus\nandrogyny\nandroid\nandroidal\nandrokinin\nandrol\nandrolepsia\nandrolepsy\nAndromache\nandromania\nAndromaque\nAndromeda\nAndromede\nandromedotoxin\nandromonoecious\nandromonoecism\nandromorphous\nandron\nAndronicus\nandronitis\nandropetalar\nandropetalous\nandrophagous\nandrophobia\nandrophonomania\nandrophore\nandrophorous\nandrophorum\nandrophyll\nAndropogon\nAndrosace\nAndroscoggin\nandroseme\nandrosin\nandrosphinx\nandrosporangium\nandrospore\nandrosterone\nandrotauric\nandrotomy\nAndy\nanear\naneath\nanecdota\nanecdotage\nanecdotal\nanecdotalism\nanecdote\nanecdotic\nanecdotical\nanecdotically\nanecdotist\nanele\nanelectric\nanelectrode\nanelectrotonic\nanelectrotonus\nanelytrous\nanematosis\nAnemia\nanemia\nanemic\nanemobiagraph\nanemochord\nanemoclastic\nanemogram\nanemograph\nanemographic\nanemographically\nanemography\nanemological\nanemology\nanemometer\nanemometric\nanemometrical\nanemometrically\nanemometrograph\nanemometrographic\nanemometrographically\nanemometry\nanemonal\nanemone\nAnemonella\nanemonin\nanemonol\nanemony\nanemopathy\nanemophile\nanemophilous\nanemophily\nAnemopsis\nanemoscope\nanemosis\nanemotaxis\nanemotropic\nanemotropism\nanencephalia\nanencephalic\nanencephalotrophia\nanencephalous\nanencephalus\nanencephaly\nanend\nanenergia\nanenst\nanent\nanenterous\nanepia\nanepigraphic\nanepigraphous\nanepiploic\nanepithymia\nanerethisia\naneretic\nanergia\nanergic\nanergy\nanerly\naneroid\naneroidograph\nanerotic\nanerythroplasia\nanerythroplastic\nanes\nanesis\nanesthesia\nanesthesiant\nanesthesimeter\nanesthesiologist\nanesthesiology\nanesthesis\nanesthetic\nanesthetically\nanesthetist\nanesthetization\nanesthetize\nanesthetizer\nanesthyl\nanethole\nAnethum\nanetiological\naneuploid\naneuploidy\naneuria\naneuric\naneurilemmic\naneurin\naneurism\naneurismally\naneurysm\naneurysmal\naneurysmally\naneurysmatic\nanew\nAnezeh\nanfractuose\nanfractuosity\nanfractuous\nanfractuousness\nanfracture\nAngami\nAngara\nangaralite\nangaria\nangary\nAngdistis\nangekok\nangel\nAngela\nangelate\nangeldom\nAngeleno\nangelet\nangeleyes\nangelfish\nangelhood\nangelic\nAngelica\nangelica\nAngelical\nangelical\nangelically\nangelicalness\nAngelican\nangelicic\nangelicize\nangelico\nangelin\nAngelina\nangeline\nangelique\nangelize\nangellike\nAngelo\nangelocracy\nangelographer\nangelolater\nangelolatry\nangelologic\nangelological\nangelology\nangelomachy\nAngelonia\nangelophany\nangelot\nangelship\nAngelus\nanger\nangerly\nAngerona\nAngeronalia\nAngers\nAngetenar\nAngevin\nangeyok\nangiasthenia\nangico\nAngie\nangiectasis\nangiectopia\nangiemphraxis\nangiitis\nangild\nangili\nangina\nanginal\nanginiform\nanginoid\nanginose\nanginous\nangioasthenia\nangioataxia\nangioblast\nangioblastic\nangiocarditis\nangiocarp\nangiocarpian\nangiocarpic\nangiocarpous\nangiocavernous\nangiocholecystitis\nangiocholitis\nangiochondroma\nangioclast\nangiocyst\nangiodermatitis\nangiodiascopy\nangioelephantiasis\nangiofibroma\nangiogenesis\nangiogenic\nangiogeny\nangioglioma\nangiograph\nangiography\nangiohyalinosis\nangiohydrotomy\nangiohypertonia\nangiohypotonia\nangioid\nangiokeratoma\nangiokinesis\nangiokinetic\nangioleucitis\nangiolipoma\nangiolith\nangiology\nangiolymphitis\nangiolymphoma\nangioma\nangiomalacia\nangiomatosis\nangiomatous\nangiomegaly\nangiometer\nangiomyocardiac\nangiomyoma\nangiomyosarcoma\nangioneoplasm\nangioneurosis\nangioneurotic\nangionoma\nangionosis\nangioparalysis\nangioparalytic\nangioparesis\nangiopathy\nangiophorous\nangioplany\nangioplasty\nangioplerosis\nangiopoietic\nangiopressure\nangiorrhagia\nangiorrhaphy\nangiorrhea\nangiorrhexis\nangiosarcoma\nangiosclerosis\nangiosclerotic\nangioscope\nangiosis\nangiospasm\nangiospastic\nangiosperm\nAngiospermae\nangiospermal\nangiospermatous\nangiospermic\nangiospermous\nangiosporous\nangiostegnosis\nangiostenosis\nangiosteosis\nangiostomize\nangiostomy\nangiostrophy\nangiosymphysis\nangiotasis\nangiotelectasia\nangiothlipsis\nangiotome\nangiotomy\nangiotonic\nangiotonin\nangiotribe\nangiotripsy\nangiotrophic\nAngka\nanglaise\nangle\nangleberry\nangled\nanglehook\nanglepod\nangler\nAngles\nanglesite\nanglesmith\nangletouch\nangletwitch\nanglewing\nanglewise\nangleworm\nAnglian\nAnglic\nAnglican\nAnglicanism\nAnglicanize\nAnglicanly\nAnglicanum\nAnglicism\nAnglicist\nAnglicization\nanglicization\nAnglicize\nanglicize\nAnglification\nAnglify\nanglimaniac\nangling\nAnglish\nAnglist\nAnglistics\nAnglogaea\nAnglogaean\nangloid\nAngloman\nAnglomane\nAnglomania\nAnglomaniac\nAnglophile\nAnglophobe\nAnglophobia\nAnglophobiac\nAnglophobic\nAnglophobist\nango\nAngola\nangolar\nAngolese\nangor\nAngora\nangostura\nAngouleme\nAngoumian\nAngraecum\nangrily\nangriness\nangrite\nangry\nangst\nangster\nAngstrom\nangstrom\nanguid\nAnguidae\nanguiform\nAnguilla\nAnguillaria\nAnguillidae\nanguilliform\nanguilloid\nAnguillula\nAnguillulidae\nAnguimorpha\nanguine\nanguineal\nanguineous\nAnguinidae\nanguiped\nAnguis\nanguis\nanguish\nanguished\nanguishful\nanguishous\nanguishously\nangula\nangular\nangulare\nangularity\nangularization\nangularize\nangularly\nangularness\nangulate\nangulated\nangulately\nangulateness\nangulation\nangulatogibbous\nangulatosinuous\nanguliferous\nangulinerved\nAnguloa\nangulodentate\nangulometer\nangulosity\nangulosplenial\nangulous\nanguria\nAngus\nangusticlave\nangustifoliate\nangustifolious\nangustirostrate\nangustisellate\nangustiseptal\nangustiseptate\nangwantibo\nanhalamine\nanhaline\nanhalonine\nAnhalonium\nanhalouidine\nanhang\nAnhanga\nanharmonic\nanhedonia\nanhedral\nanhedron\nanhelation\nanhelous\nanhematosis\nanhemolytic\nanhidrosis\nanhidrotic\nanhima\nAnhimae\nAnhimidae\nanhinga\nanhistic\nanhistous\nanhungered\nanhungry\nanhydrate\nanhydration\nanhydremia\nanhydremic\nanhydric\nanhydride\nanhydridization\nanhydridize\nanhydrite\nanhydrization\nanhydrize\nanhydroglocose\nanhydromyelia\nanhydrous\nanhydroxime\nanhysteretic\nani\nAniba\nAnice\naniconic\naniconism\nanicular\nanicut\nanidian\nanidiomatic\nanidiomatical\nanidrosis\nAniellidae\naniente\nanigh\nanight\nanights\nanil\nanilao\nanilau\nanile\nanileness\nanilic\nanilid\nanilide\nanilidic\nanilidoxime\naniline\nanilinism\nanilinophile\nanilinophilous\nanility\nanilla\nanilopyrin\nanilopyrine\nanima\nanimability\nanimable\nanimableness\nanimadversion\nanimadversional\nanimadversive\nanimadversiveness\nanimadvert\nanimadverter\nanimal\nanimalcula\nanimalculae\nanimalcular\nanimalcule\nanimalculine\nanimalculism\nanimalculist\nanimalculous\nanimalculum\nanimalhood\nAnimalia\nanimalian\nanimalic\nanimalier\nanimalish\nanimalism\nanimalist\nanimalistic\nanimality\nAnimalivora\nanimalivore\nanimalivorous\nanimalization\nanimalize\nanimally\nanimastic\nanimastical\nanimate\nanimated\nanimatedly\nanimately\nanimateness\nanimater\nanimating\nanimatingly\nanimation\nanimatism\nanimatistic\nanimative\nanimatograph\nanimator\nanime\nanimi\nAnimikean\nanimikite\nanimism\nanimist\nanimistic\nanimize\nanimosity\nanimotheism\nanimous\nanimus\nanion\nanionic\naniridia\nanis\nanisal\nanisalcohol\nanisaldehyde\nanisaldoxime\nanisamide\nanisandrous\nanisanilide\nanisate\nanischuria\nanise\naniseed\naniseikonia\naniseikonic\naniselike\naniseroot\nanisette\nanisic\nanisidin\nanisidine\nanisil\nanisilic\nanisobranchiate\nanisocarpic\nanisocarpous\nanisocercal\nanisochromatic\nanisochromia\nanisocoria\nanisocotyledonous\nanisocotyly\nanisocratic\nanisocycle\nanisocytosis\nanisodactyl\nAnisodactyla\nAnisodactyli\nanisodactylic\nanisodactylous\nanisodont\nanisogamete\nanisogamous\nanisogamy\nanisogenous\nanisogeny\nanisognathism\nanisognathous\nanisogynous\nanisoin\nanisole\nanisoleucocytosis\nAnisomeles\nanisomelia\nanisomelus\nanisomeric\nanisomerous\nanisometric\nanisometrope\nanisometropia\nanisometropic\nanisomyarian\nAnisomyodi\nanisomyodian\nanisomyodous\nanisopetalous\nanisophyllous\nanisophylly\nanisopia\nanisopleural\nanisopleurous\nanisopod\nAnisopoda\nanisopodal\nanisopodous\nanisopogonous\nAnisoptera\nanisopterous\nanisosepalous\nanisospore\nanisostaminous\nanisostemonous\nanisosthenic\nanisostichous\nAnisostichus\nanisostomous\nanisotonic\nanisotropal\nanisotrope\nanisotropic\nanisotropical\nanisotropically\nanisotropism\nanisotropous\nanisotropy\nanisoyl\nanisum\nanisuria\nanisyl\nanisylidene\nAnita\nanither\nanitrogenous\nanjan\nAnjou\nankaramite\nankaratrite\nankee\nanker\nankerite\nankh\nankle\nanklebone\nanklejack\nanklet\nanklong\nAnkoli\nAnkou\nankus\nankusha\nankylenteron\nankyloblepharon\nankylocheilia\nankylodactylia\nankylodontia\nankyloglossia\nankylomele\nankylomerism\nankylophobia\nankylopodia\nankylopoietic\nankyloproctia\nankylorrhinia\nAnkylosaurus\nankylose\nankylosis\nankylostoma\nankylotia\nankylotic\nankylotome\nankylotomy\nankylurethria\nankyroid\nanlace\nanlaut\nAnn\nann\nAnna\nanna\nAnnabel\nannabergite\nannal\nannale\nannaline\nannalism\nannalist\nannalistic\nannalize\nannals\nAnnam\nAnnamese\nAnnamite\nAnnamitic\nAnnapurna\nAnnard\nannat\nannates\nannatto\nAnne\nanneal\nannealer\nannectent\nannection\nannelid\nAnnelida\nannelidan\nAnnelides\nannelidian\nannelidous\nannelism\nAnnellata\nanneloid\nannerodite\nAnneslia\nannet\nAnnette\nannex\nannexa\nannexable\nannexal\nannexation\nannexational\nannexationist\nannexer\nannexion\nannexionist\nannexitis\nannexive\nannexment\nannexure\nannidalin\nAnnie\nAnniellidae\nannihilability\nannihilable\nannihilate\nannihilation\nannihilationism\nannihilationist\nannihilative\nannihilator\nannihilatory\nAnnist\nannite\nanniversarily\nanniversariness\nanniversary\nanniverse\nannodated\nAnnona\nannona\nAnnonaceae\nannonaceous\nannotate\nannotater\nannotation\nannotative\nannotator\nannotatory\nannotine\nannotinous\nannounce\nannounceable\nannouncement\nannouncer\nannoy\nannoyance\nannoyancer\nannoyer\nannoyful\nannoying\nannoyingly\nannoyingness\nannoyment\nannual\nannualist\nannualize\nannually\nannuary\nannueler\nannuent\nannuitant\nannuity\nannul\nannular\nAnnularia\nannularity\nannularly\nannulary\nAnnulata\nannulate\nannulated\nannulation\nannulet\nannulettee\nannulism\nannullable\nannullate\nannullation\nannuller\nannulment\nannuloid\nAnnuloida\nAnnulosa\nannulosan\nannulose\nannulus\nannunciable\nannunciate\nannunciation\nannunciative\nannunciator\nannunciatory\nanoa\nAnobiidae\nanocarpous\nanociassociation\nanococcygeal\nanodal\nanode\nanodendron\nanodic\nanodically\nanodize\nAnodon\nAnodonta\nanodontia\nanodos\nanodyne\nanodynia\nanodynic\nanodynous\nanoegenetic\nanoesia\nanoesis\nanoestrous\nanoestrum\nanoestrus\nanoetic\nanogenic\nanogenital\nAnogra\nanoil\nanoine\nanoint\nanointer\nanointment\nanole\nanoli\nanolian\nAnolis\nAnolympiad\nanolyte\nAnomala\nanomaliflorous\nanomaliped\nanomalism\nanomalist\nanomalistic\nanomalistical\nanomalistically\nanomalocephalus\nanomaloflorous\nAnomalogonatae\nanomalogonatous\nAnomalon\nanomalonomy\nAnomalopteryx\nanomaloscope\nanomalotrophy\nanomalous\nanomalously\nanomalousness\nanomalure\nAnomaluridae\nAnomalurus\nanomaly\nAnomatheca\nAnomia\nAnomiacea\nAnomiidae\nanomite\nanomocarpous\nanomodont\nAnomodontia\nAnomoean\nAnomoeanism\nanomophyllous\nanomorhomboid\nanomorhomboidal\nanomphalous\nAnomura\nanomural\nanomuran\nanomurous\nanomy\nanon\nanonang\nanoncillo\nanonol\nanonychia\nanonym\nanonyma\nanonymity\nanonymous\nanonymously\nanonymousness\nanonymuncule\nanoopsia\nanoperineal\nanophele\nAnopheles\nAnophelinae\nanopheline\nanophoria\nanophthalmia\nanophthalmos\nAnophthalmus\nanophyte\nanopia\nanopisthographic\nAnopla\nAnoplanthus\nanoplocephalic\nanoplonemertean\nAnoplonemertini\nanoplothere\nAnoplotheriidae\nanoplotherioid\nAnoplotherium\nanoplotheroid\nAnoplura\nanopluriform\nanopsia\nanopubic\nanorak\nanorchia\nanorchism\nanorchous\nanorchus\nanorectal\nanorectic\nanorectous\nanorexia\nanorexy\nanorgana\nanorganic\nanorganism\nanorganology\nanormal\nanormality\nanorogenic\nanorth\nanorthic\nanorthite\nanorthitic\nanorthitite\nanorthoclase\nanorthographic\nanorthographical\nanorthographically\nanorthography\nanorthophyre\nanorthopia\nanorthoscope\nanorthose\nanorthosite\nanoscope\nanoscopy\nAnosia\nanosmatic\nanosmia\nanosmic\nanosphrasia\nanosphresia\nanospinal\nanostosis\nAnostraca\nanoterite\nanother\nanotherkins\nanotia\nanotropia\nanotta\nanotto\nanotus\nanounou\nAnous\nanovesical\nanoxemia\nanoxemic\nanoxia\nanoxic\nanoxidative\nanoxybiosis\nanoxybiotic\nanoxyscope\nansa\nansar\nansarian\nAnsarie\nansate\nansation\nAnseis\nAnsel\nAnselm\nAnselmian\nAnser\nanserated\nAnseres\nAnseriformes\nAnserinae\nanserine\nanserous\nanspessade\nansu\nansulate\nanswer\nanswerability\nanswerable\nanswerableness\nanswerably\nanswerer\nansweringly\nanswerless\nanswerlessly\nant\nAnta\nanta\nantacid\nantacrid\nantadiform\nAntaean\nAntaeus\nantagonism\nantagonist\nantagonistic\nantagonistical\nantagonistically\nantagonization\nantagonize\nantagonizer\nantagony\nAntaimerina\nAntaios\nAntaiva\nantal\nantalgesic\nantalgol\nantalkali\nantalkaline\nantambulacral\nantanacathartic\nantanaclasis\nAntanandro\nantanemic\nantapex\nantaphrodisiac\nantaphroditic\nantapocha\nantapodosis\nantapology\nantapoplectic\nAntar\nAntara\nantarchism\nantarchist\nantarchistic\nantarchistical\nantarchy\nAntarctalia\nAntarctalian\nantarctic\nAntarctica\nantarctica\nantarctical\nantarctically\nAntarctogaea\nAntarctogaean\nAntares\nantarthritic\nantasphyctic\nantasthenic\nantasthmatic\nantatrophic\nantdom\nante\nanteact\nanteal\nanteambulate\nanteambulation\nanteater\nantebaptismal\nantebath\nantebrachial\nantebrachium\nantebridal\nantecabinet\nantecaecal\nantecardium\nantecavern\nantecedaneous\nantecedaneously\nantecede\nantecedence\nantecedency\nantecedent\nantecedental\nantecedently\nantecessor\nantechamber\nantechapel\nAntechinomys\nantechoir\nantechurch\nanteclassical\nantecloset\nantecolic\nantecommunion\nanteconsonantal\nantecornu\nantecourt\nantecoxal\nantecubital\nantecurvature\nantedate\nantedawn\nantediluvial\nantediluvially\nantediluvian\nAntedon\nantedonin\nantedorsal\nantefebrile\nantefix\nantefixal\nanteflected\nanteflexed\nanteflexion\nantefurca\nantefurcal\nantefuture\nantegarden\nantegrade\nantehall\nantehistoric\nantehuman\nantehypophysis\nanteinitial\nantejentacular\nantejudiciary\nantejuramentum\nantelabium\nantelegal\nantelocation\nantelope\nantelopian\nantelucan\nantelude\nanteluminary\nantemarginal\nantemarital\nantemedial\nantemeridian\nantemetallic\nantemetic\nantemillennial\nantemingent\nantemortal\nantemundane\nantemural\nantenarial\nantenatal\nantenatalitial\nantenati\nantenave\nantenna\nantennae\nantennal\nAntennaria\nantennariid\nAntennariidae\nAntennarius\nantennary\nAntennata\nantennate\nantenniferous\nantenniform\nantennula\nantennular\nantennulary\nantennule\nantenodal\nantenoon\nAntenor\nantenumber\nanteoccupation\nanteocular\nanteopercle\nanteoperculum\nanteorbital\nantepagmenta\nantepagments\nantepalatal\nantepaschal\nantepast\nantepatriarchal\nantepectoral\nantepectus\nantependium\nantepenult\nantepenultima\nantepenultimate\nantephialtic\nantepileptic\nantepirrhema\nanteporch\nanteportico\nanteposition\nanteposthumous\nanteprandial\nantepredicament\nantepredicamental\nantepreterit\nantepretonic\nanteprohibition\nanteprostate\nanteprostatic\nantepyretic\nantequalm\nantereformation\nantereformational\nanteresurrection\nanterethic\nanterevolutional\nanterevolutionary\nanteriad\nanterior\nanteriority\nanteriorly\nanteriorness\nanteroclusion\nanterodorsal\nanteroexternal\nanterofixation\nanteroflexion\nanterofrontal\nanterograde\nanteroinferior\nanterointerior\nanterointernal\nanterolateral\nanterolaterally\nanteromedial\nanteromedian\nanteroom\nanteroparietal\nanteroposterior\nanteroposteriorly\nanteropygal\nanterospinal\nanterosuperior\nanteroventral\nanteroventrally\nantes\nantescript\nantesignanus\nantespring\nantestature\nantesternal\nantesternum\nantesunrise\nantesuperior\nantetemple\nantetype\nAnteva\nantevenient\nanteversion\nantevert\nantevocalic\nantewar\nanthecological\nanthecologist\nanthecology\nAntheia\nanthela\nanthelion\nanthelmintic\nanthem\nanthema\nanthemene\nanthemia\nAnthemideae\nanthemion\nAnthemis\nanthemwise\nanthemy\nanther\nAntheraea\nantheral\nAnthericum\nantherid\nantheridial\nantheridiophore\nantheridium\nantheriferous\nantheriform\nantherless\nantherogenous\nantheroid\nantherozoid\nantherozoidal\nantherozooid\nantherozooidal\nanthesis\nAnthesteria\nAnthesteriac\nanthesterin\nAnthesterion\nanthesterol\nantheximeter\nAnthicidae\nAnthidium\nanthill\nAnthinae\nanthine\nanthobiology\nanthocarp\nanthocarpous\nanthocephalous\nAnthoceros\nAnthocerotaceae\nAnthocerotales\nanthocerote\nanthochlor\nanthochlorine\nanthoclinium\nanthocyan\nanthocyanidin\nanthocyanin\nanthodium\nanthoecological\nanthoecologist\nanthoecology\nanthogenesis\nanthogenetic\nanthogenous\nanthography\nanthoid\nanthokyan\nantholite\nanthological\nanthologically\nanthologion\nanthologist\nanthologize\nanthology\nantholysis\nAntholyza\nanthomania\nanthomaniac\nAnthomedusae\nanthomedusan\nAnthomyia\nanthomyiid\nAnthomyiidae\nAnthonin\nAnthonomus\nAnthony\nanthood\nanthophagous\nAnthophila\nanthophile\nanthophilian\nanthophilous\nanthophobia\nAnthophora\nanthophore\nAnthophoridae\nanthophorous\nanthophyllite\nanthophyllitic\nAnthophyta\nanthophyte\nanthorine\nanthosiderite\nAnthospermum\nanthotaxis\nanthotaxy\nanthotropic\nanthotropism\nanthoxanthin\nAnthoxanthum\nAnthozoa\nanthozoan\nanthozoic\nanthozooid\nanthozoon\nanthracemia\nanthracene\nanthraceniferous\nanthrachrysone\nanthracia\nanthracic\nanthraciferous\nanthracin\nanthracite\nanthracitic\nanthracitiferous\nanthracitious\nanthracitism\nanthracitization\nanthracnose\nanthracnosis\nanthracocide\nanthracoid\nanthracolithic\nanthracomancy\nAnthracomarti\nanthracomartian\nAnthracomartus\nanthracometer\nanthracometric\nanthraconecrosis\nanthraconite\nAnthracosaurus\nanthracosis\nanthracothere\nAnthracotheriidae\nAnthracotherium\nanthracotic\nanthracyl\nanthradiol\nanthradiquinone\nanthraflavic\nanthragallol\nanthrahydroquinone\nanthramine\nanthranil\nanthranilate\nanthranilic\nanthranol\nanthranone\nanthranoyl\nanthranyl\nanthraphenone\nanthrapurpurin\nanthrapyridine\nanthraquinol\nanthraquinone\nanthraquinonyl\nanthrarufin\nanthratetrol\nanthrathiophene\nanthratriol\nanthrax\nanthraxolite\nanthraxylon\nAnthrenus\nanthribid\nAnthribidae\nAnthriscus\nanthrohopobiological\nanthroic\nanthrol\nanthrone\nanthropic\nanthropical\nAnthropidae\nanthropobiologist\nanthropobiology\nanthropocentric\nanthropocentrism\nanthropoclimatologist\nanthropoclimatology\nanthropocosmic\nanthropodeoxycholic\nAnthropodus\nanthropogenesis\nanthropogenetic\nanthropogenic\nanthropogenist\nanthropogenous\nanthropogeny\nanthropogeographer\nanthropogeographical\nanthropogeography\nanthropoglot\nanthropogony\nanthropography\nanthropoid\nanthropoidal\nAnthropoidea\nanthropoidean\nanthropolater\nanthropolatric\nanthropolatry\nanthropolite\nanthropolithic\nanthropolitic\nanthropological\nanthropologically\nanthropologist\nanthropology\nanthropomancy\nanthropomantic\nanthropomantist\nanthropometer\nanthropometric\nanthropometrical\nanthropometrically\nanthropometrist\nanthropometry\nanthropomorph\nAnthropomorpha\nanthropomorphic\nanthropomorphical\nanthropomorphically\nAnthropomorphidae\nanthropomorphism\nanthropomorphist\nanthropomorphite\nanthropomorphitic\nanthropomorphitical\nanthropomorphitism\nanthropomorphization\nanthropomorphize\nanthropomorphological\nanthropomorphologically\nanthropomorphology\nanthropomorphosis\nanthropomorphotheist\nanthropomorphous\nanthropomorphously\nanthroponomical\nanthroponomics\nanthroponomist\nanthroponomy\nanthropopathia\nanthropopathic\nanthropopathically\nanthropopathism\nanthropopathite\nanthropopathy\nanthropophagi\nanthropophagic\nanthropophagical\nanthropophaginian\nanthropophagism\nanthropophagist\nanthropophagistic\nanthropophagite\nanthropophagize\nanthropophagous\nanthropophagously\nanthropophagy\nanthropophilous\nanthropophobia\nanthropophuism\nanthropophuistic\nanthropophysiography\nanthropophysite\nAnthropopithecus\nanthropopsychic\nanthropopsychism\nAnthropos\nanthroposcopy\nanthroposociologist\nanthroposociology\nanthroposomatology\nanthroposophical\nanthroposophist\nanthroposophy\nanthropoteleoclogy\nanthropoteleological\nanthropotheism\nanthropotomical\nanthropotomist\nanthropotomy\nanthropotoxin\nAnthropozoic\nanthropurgic\nanthroropolith\nanthroxan\nanthroxanic\nanthryl\nanthrylene\nAnthurium\nAnthus\nAnthyllis\nanthypophora\nanthypophoretic\nAnti\nanti\nantiabolitionist\nantiabrasion\nantiabrin\nantiabsolutist\nantiacid\nantiadiaphorist\nantiaditis\nantiadministration\nantiae\nantiaesthetic\nantiager\nantiagglutinating\nantiagglutinin\nantiaggression\nantiaggressionist\nantiaggressive\nantiaircraft\nantialbumid\nantialbumin\nantialbumose\nantialcoholic\nantialcoholism\nantialcoholist\nantialdoxime\nantialexin\nantialien\nantiamboceptor\nantiamusement\nantiamylase\nantianaphylactogen\nantianaphylaxis\nantianarchic\nantianarchist\nantiangular\nantiannexation\nantiannexationist\nantianopheline\nantianthrax\nantianthropocentric\nantianthropomorphism\nantiantibody\nantiantidote\nantiantienzyme\nantiantitoxin\nantiaphrodisiac\nantiaphthic\nantiapoplectic\nantiapostle\nantiaquatic\nantiar\nAntiarcha\nAntiarchi\nantiarin\nAntiaris\nantiaristocrat\nantiarthritic\nantiascetic\nantiasthmatic\nantiastronomical\nantiatheism\nantiatheist\nantiatonement\nantiattrition\nantiautolysin\nantibacchic\nantibacchius\nantibacterial\nantibacteriolytic\nantiballooner\nantibalm\nantibank\nantibasilican\nantibenzaldoxime\nantiberiberin\nantibibliolatry\nantibigotry\nantibilious\nantibiont\nantibiosis\nantibiotic\nantibishop\nantiblastic\nantiblennorrhagic\nantiblock\nantiblue\nantibody\nantiboxing\nantibreakage\nantibridal\nantibromic\nantibubonic\nAntiburgher\nantic\nanticachectic\nantical\nanticalcimine\nanticalculous\nanticalligraphic\nanticancer\nanticapital\nanticapitalism\nanticapitalist\nanticardiac\nanticardium\nanticarious\nanticarnivorous\nanticaste\nanticatalase\nanticatalyst\nanticatalytic\nanticatalyzer\nanticatarrhal\nanticathexis\nanticathode\nanticaustic\nanticensorship\nanticentralization\nanticephalalgic\nanticeremonial\nanticeremonialism\nanticeremonialist\nanticheater\nantichlor\nantichlorine\nantichloristic\nantichlorotic\nanticholagogue\nanticholinergic\nantichoromanic\nantichorus\nantichresis\nantichretic\nantichrist\nantichristian\nantichristianity\nantichristianly\nantichrome\nantichronical\nantichronically\nantichthon\nantichurch\nantichurchian\nantichymosin\nanticipant\nanticipatable\nanticipate\nanticipation\nanticipative\nanticipatively\nanticipator\nanticipatorily\nanticipatory\nanticivic\nanticivism\nanticize\nanticker\nanticlactic\nanticlassical\nanticlassicist\nAnticlea\nanticlergy\nanticlerical\nanticlericalism\nanticlimactic\nanticlimax\nanticlinal\nanticline\nanticlinorium\nanticlockwise\nanticlogging\nanticly\nanticnemion\nanticness\nanticoagulant\nanticoagulating\nanticoagulative\nanticoagulin\nanticogitative\nanticolic\nanticombination\nanticomet\nanticomment\nanticommercial\nanticommunist\nanticomplement\nanticomplementary\nanticomplex\nanticonceptionist\nanticonductor\nanticonfederationist\nanticonformist\nanticonscience\nanticonscription\nanticonscriptive\nanticonstitutional\nanticonstitutionalist\nanticonstitutionally\nanticontagion\nanticontagionist\nanticontagious\nanticonventional\nanticonventionalism\nanticonvulsive\nanticor\nanticorn\nanticorrosion\nanticorrosive\nanticorset\nanticosine\nanticosmetic\nanticouncil\nanticourt\nanticourtier\nanticous\nanticovenanter\nanticovenanting\nanticreation\nanticreative\nanticreator\nanticreep\nanticreeper\nanticreeping\nanticrepuscular\nanticrepuscule\nanticrisis\nanticritic\nanticritique\nanticrochet\nanticrotalic\nanticryptic\nanticum\nanticyclic\nanticyclone\nanticyclonic\nanticyclonically\nanticynic\nanticytolysin\nanticytotoxin\nantidactyl\nantidancing\nantidecalogue\nantideflation\nantidemocrat\nantidemocratic\nantidemocratical\nantidemoniac\nantidetonant\nantidetonating\nantidiabetic\nantidiastase\nAntidicomarian\nAntidicomarianite\nantidictionary\nantidiffuser\nantidinic\nantidiphtheria\nantidiphtheric\nantidiphtherin\nantidiphtheritic\nantidisciplinarian\nantidivine\nantidivorce\nantidogmatic\nantidomestic\nantidominican\nAntidorcas\nantidoron\nantidotal\nantidotally\nantidotary\nantidote\nantidotical\nantidotically\nantidotism\nantidraft\nantidrag\nantidromal\nantidromic\nantidromically\nantidromous\nantidromy\nantidrug\nantiduke\nantidumping\nantidynamic\nantidynastic\nantidyscratic\nantidysenteric\nantidysuric\nantiecclesiastic\nantiecclesiastical\nantiedemic\nantieducation\nantieducational\nantiegotism\nantiejaculation\nantiemetic\nantiemperor\nantiempirical\nantiendotoxin\nantiendowment\nantienergistic\nantienthusiastic\nantienzyme\nantienzymic\nantiepicenter\nantiepileptic\nantiepiscopal\nantiepiscopist\nantiepithelial\nantierosion\nantierysipelas\nAntietam\nantiethnic\nantieugenic\nantievangelical\nantievolution\nantievolutionist\nantiexpansionist\nantiexporting\nantiextreme\nantieyestrain\nantiface\nantifaction\nantifame\nantifanatic\nantifat\nantifatigue\nantifebrile\nantifederal\nantifederalism\nantifederalist\nantifelon\nantifelony\nantifeminism\nantifeminist\nantiferment\nantifermentative\nantifertilizer\nantifeudal\nantifeudalism\nantifibrinolysin\nantifibrinolysis\nantifideism\nantifire\nantiflash\nantiflattering\nantiflatulent\nantiflux\nantifoam\nantifoaming\nantifogmatic\nantiforeign\nantiforeignism\nantiformin\nantifouler\nantifouling\nantifowl\nantifreeze\nantifreezing\nantifriction\nantifrictional\nantifrost\nantifundamentalist\nantifungin\nantigalactagogue\nantigalactic\nantigambling\nantiganting\nantigen\nantigenic\nantigenicity\nantighostism\nantigigmanic\nantiglare\nantiglyoxalase\nantigod\nAntigone\nantigonococcic\nAntigonon\nantigonorrheic\nAntigonus\nantigorite\nantigovernment\nantigraft\nantigrammatical\nantigraph\nantigravitate\nantigravitational\nantigropelos\nantigrowth\nAntiguan\nantiguggler\nantigyrous\nantihalation\nantiharmonist\nantihectic\nantihelix\nantihelminthic\nantihemagglutinin\nantihemisphere\nantihemoglobin\nantihemolysin\nantihemolytic\nantihemorrhagic\nantihemorrheidal\nantihero\nantiheroic\nantiheroism\nantiheterolysin\nantihidrotic\nantihierarchical\nantihierarchist\nantihistamine\nantihistaminic\nantiholiday\nantihormone\nantihuff\nantihum\nantihuman\nantihumbuggist\nantihunting\nantihydrophobic\nantihydropic\nantihydropin\nantihygienic\nantihylist\nantihypnotic\nantihypochondriac\nantihypophora\nantihysteric\nAntikamnia\nantikathode\nantikenotoxin\nantiketogen\nantiketogenesis\nantiketogenic\nantikinase\nantiking\nantiknock\nantilabor\nantilaborist\nantilacrosse\nantilacrosser\nantilactase\nantilapsarian\nantileague\nantilegalist\nantilegomena\nantilemic\nantilens\nantilepsis\nantileptic\nantilethargic\nantileveling\nAntilia\nantiliberal\nantilibration\nantilift\nantilipase\nantilipoid\nantiliquor\nantilithic\nantiliturgical\nantiliturgist\nAntillean\nantilobium\nAntilocapra\nAntilocapridae\nAntilochus\nantiloemic\nantilogarithm\nantilogic\nantilogical\nantilogism\nantilogous\nantilogy\nantiloimic\nAntilope\nAntilopinae\nantilottery\nantiluetin\nantilynching\nantilysin\nantilysis\nantilyssic\nantilytic\nantimacassar\nantimachine\nantimachinery\nantimagistratical\nantimalaria\nantimalarial\nantimallein\nantimaniac\nantimaniacal\nAntimarian\nantimark\nantimartyr\nantimask\nantimasker\nAntimason\nAntimasonic\nAntimasonry\nantimasque\nantimasquer\nantimasquerade\nantimaterialist\nantimaterialistic\nantimatrimonial\nantimatrimonialist\nantimedical\nantimedieval\nantimelancholic\nantimellin\nantimeningococcic\nantimension\nantimensium\nantimephitic\nantimere\nantimerger\nantimeric\nAntimerina\nantimerism\nantimeristem\nantimetabole\nantimetathesis\nantimetathetic\nantimeter\nantimethod\nantimetrical\nantimetropia\nantimetropic\nantimiasmatic\nantimicrobic\nantimilitarism\nantimilitarist\nantimilitary\nantiministerial\nantiministerialist\nantiminsion\nantimiscegenation\nantimission\nantimissionary\nantimissioner\nantimixing\nantimnemonic\nantimodel\nantimodern\nantimonarchial\nantimonarchic\nantimonarchical\nantimonarchically\nantimonarchicalness\nantimonarchist\nantimonate\nantimonial\nantimoniate\nantimoniated\nantimonic\nantimonid\nantimonide\nantimoniferous\nantimonious\nantimonite\nantimonium\nantimoniuret\nantimoniureted\nantimoniuretted\nantimonopolist\nantimonopoly\nantimonsoon\nantimony\nantimonyl\nantimoral\nantimoralism\nantimoralist\nantimosquito\nantimusical\nantimycotic\nantimythic\nantimythical\nantinarcotic\nantinarrative\nantinational\nantinationalist\nantinationalistic\nantinatural\nantinegro\nantinegroism\nantineologian\nantinephritic\nantinepotic\nantineuralgic\nantineuritic\nantineurotoxin\nantineutral\nantinial\nantinicotine\nantinion\nantinode\nantinoise\nantinome\nantinomian\nantinomianism\nantinomic\nantinomical\nantinomist\nantinomy\nantinormal\nantinosarian\nAntinous\nAntiochene\nAntiochian\nAntiochianism\nantiodont\nantiodontalgic\nAntiope\nantiopelmous\nantiophthalmic\nantiopium\nantiopiumist\nantiopiumite\nantioptimist\nantioptionist\nantiorgastic\nantiorthodox\nantioxidant\nantioxidase\nantioxidizer\nantioxidizing\nantioxygen\nantioxygenation\nantioxygenator\nantioxygenic\nantipacifist\nantipapacy\nantipapal\nantipapalist\nantipapism\nantipapist\nantipapistical\nantiparabema\nantiparagraphe\nantiparagraphic\nantiparallel\nantiparallelogram\nantiparalytic\nantiparalytical\nantiparasitic\nantiparastatitis\nantiparliament\nantiparliamental\nantiparliamentarist\nantiparliamentary\nantipart\nAntipasch\nAntipascha\nantipass\nantipastic\nAntipatharia\nantipatharian\nantipathetic\nantipathetical\nantipathetically\nantipatheticalness\nantipathic\nAntipathida\nantipathist\nantipathize\nantipathogen\nantipathy\nantipatriarch\nantipatriarchal\nantipatriot\nantipatriotic\nantipatriotism\nantipedal\nAntipedobaptism\nAntipedobaptist\nantipeduncular\nantipellagric\nantipepsin\nantipeptone\nantiperiodic\nantiperistalsis\nantiperistaltic\nantiperistasis\nantiperistatic\nantiperistatical\nantiperistatically\nantipersonnel\nantiperthite\nantipestilential\nantipetalous\nantipewism\nantiphagocytic\nantipharisaic\nantipharmic\nantiphase\nantiphilosophic\nantiphilosophical\nantiphlogistian\nantiphlogistic\nantiphon\nantiphonal\nantiphonally\nantiphonary\nantiphoner\nantiphonetic\nantiphonic\nantiphonical\nantiphonically\nantiphonon\nantiphony\nantiphrasis\nantiphrastic\nantiphrastical\nantiphrastically\nantiphthisic\nantiphthisical\nantiphylloxeric\nantiphysic\nantiphysical\nantiphysician\nantiplague\nantiplanet\nantiplastic\nantiplatelet\nantipleion\nantiplenist\nantiplethoric\nantipleuritic\nantiplurality\nantipneumococcic\nantipodagric\nantipodagron\nantipodal\nantipode\nantipodean\nantipodes\nantipodic\nantipodism\nantipodist\nantipoetic\nantipoints\nantipolar\nantipole\nantipolemist\nantipolitical\nantipollution\nantipolo\nantipolygamy\nantipolyneuritic\nantipool\nantipooling\nantipope\nantipopery\nantipopular\nantipopulationist\nantiportable\nantiposition\nantipoverty\nantipragmatic\nantipragmatist\nantiprecipitin\nantipredeterminant\nantiprelate\nantiprelatic\nantiprelatist\nantipreparedness\nantiprestidigitation\nantipriest\nantipriestcraft\nantiprime\nantiprimer\nantipriming\nantiprinciple\nantiprism\nantiproductionist\nantiprofiteering\nantiprohibition\nantiprohibitionist\nantiprojectivity\nantiprophet\nantiprostate\nantiprostatic\nantiprotease\nantiproteolysis\nantiprotozoal\nantiprudential\nantipruritic\nantipsalmist\nantipsoric\nantiptosis\nantipudic\nantipuritan\nantiputrefaction\nantiputrefactive\nantiputrescent\nantiputrid\nantipyic\nantipyonin\nantipyresis\nantipyretic\nAntipyrine\nantipyrotic\nantipyryl\nantiqua\nantiquarian\nantiquarianism\nantiquarianize\nantiquarianly\nantiquarism\nantiquartan\nantiquary\nantiquate\nantiquated\nantiquatedness\nantiquation\nantique\nantiquely\nantiqueness\nantiquer\nantiquing\nantiquist\nantiquitarian\nantiquity\nantirabic\nantirabies\nantiracemate\nantiracer\nantirachitic\nantirachitically\nantiracing\nantiradiating\nantiradiation\nantiradical\nantirailwayist\nantirational\nantirationalism\nantirationalist\nantirationalistic\nantirattler\nantireactive\nantirealism\nantirealistic\nantirebating\nantirecruiting\nantired\nantireducer\nantireform\nantireformer\nantireforming\nantireformist\nantireligion\nantireligious\nantiremonstrant\nantirennet\nantirennin\nantirent\nantirenter\nantirentism\nantirepublican\nantireservationist\nantirestoration\nantireticular\nantirevisionist\nantirevolutionary\nantirevolutionist\nantirheumatic\nantiricin\nantirickets\nantiritual\nantiritualistic\nantirobin\nantiromance\nantiromantic\nantiromanticism\nantiroyal\nantiroyalist\nAntirrhinum\nantirumor\nantirun\nantirust\nantisacerdotal\nantisacerdotalist\nantisaloon\nantisalooner\nantisavage\nantiscabious\nantiscale\nantischolastic\nantischool\nantiscians\nantiscientific\nantiscion\nantiscolic\nantiscorbutic\nantiscorbutical\nantiscrofulous\nantiseismic\nantiselene\nantisensitizer\nantisensuous\nantisensuousness\nantisepalous\nantisepsin\nantisepsis\nantiseptic\nantiseptical\nantiseptically\nantisepticism\nantisepticist\nantisepticize\nantiseption\nantiseptize\nantiserum\nantishipping\nAntisi\nantisialagogue\nantisialic\nantisiccative\nantisideric\nantisilverite\nantisimoniacal\nantisine\nantisiphon\nantisiphonal\nantiskeptical\nantiskid\nantiskidding\nantislavery\nantislaveryism\nantislickens\nantislip\nantismoking\nantisnapper\nantisocial\nantisocialist\nantisocialistic\nantisocialistically\nantisociality\nantisolar\nantisophist\nantisoporific\nantispace\nantispadix\nantispasis\nantispasmodic\nantispast\nantispastic\nantispectroscopic\nantispermotoxin\nantispiritual\nantispirochetic\nantisplasher\nantisplenetic\nantisplitting\nantispreader\nantispreading\nantisquama\nantisquatting\nantistadholder\nantistadholderian\nantistalling\nantistaphylococcic\nantistate\nantistatism\nantistatist\nantisteapsin\nantisterility\nantistes\nantistimulant\nantistock\nantistreptococcal\nantistreptococcic\nantistreptococcin\nantistreptococcus\nantistrike\nantistrophal\nantistrophe\nantistrophic\nantistrophically\nantistrophize\nantistrophon\nantistrumatic\nantistrumous\nantisubmarine\nantisubstance\nantisudoral\nantisudorific\nantisuffrage\nantisuffragist\nantisun\nantisupernaturalism\nantisupernaturalist\nantisurplician\nantisymmetrical\nantisyndicalism\nantisyndicalist\nantisynod\nantisyphilitic\nantitabetic\nantitabloid\nantitangent\nantitank\nantitarnish\nantitartaric\nantitax\nantiteetotalism\nantitegula\nantitemperance\nantitetanic\nantitetanolysin\nantithalian\nantitheft\nantitheism\nantitheist\nantitheistic\nantitheistical\nantitheistically\nantithenar\nantitheologian\nantitheological\nantithermic\nantithermin\nantitheses\nantithesis\nantithesism\nantithesize\nantithet\nantithetic\nantithetical\nantithetically\nantithetics\nantithrombic\nantithrombin\nantitintinnabularian\nantitobacco\nantitobacconal\nantitobacconist\nantitonic\nantitorpedo\nantitoxic\nantitoxin\nantitrade\nantitrades\nantitraditional\nantitragal\nantitragic\nantitragicus\nantitragus\nantitrismus\nantitrochanter\nantitropal\nantitrope\nantitropic\nantitropical\nantitropous\nantitropy\nantitrust\nantitrypsin\nantitryptic\nantituberculin\nantituberculosis\nantituberculotic\nantituberculous\nantiturnpikeism\nantitwilight\nantitypal\nantitype\nantityphoid\nantitypic\nantitypical\nantitypically\nantitypy\nantityrosinase\nantiunion\nantiunionist\nantiuratic\nantiurease\nantiusurious\nantiutilitarian\nantivaccination\nantivaccinationist\nantivaccinator\nantivaccinist\nantivariolous\nantivenefic\nantivenereal\nantivenin\nantivenom\nantivenomous\nantivermicular\nantivibrating\nantivibrator\nantivibratory\nantivice\nantiviral\nantivirus\nantivitalist\nantivitalistic\nantivitamin\nantivivisection\nantivivisectionist\nantivolition\nantiwar\nantiwarlike\nantiwaste\nantiwedge\nantiweed\nantiwit\nantixerophthalmic\nantizealot\nantizymic\nantizymotic\nantler\nantlered\nantlerite\nantlerless\nantlia\nantliate\nAntlid\nantling\nantluetic\nantodontalgic\nantoeci\nantoecian\nantoecians\nAntoinette\nAnton\nAntonella\nAntonia\nAntonina\nantoninianus\nAntonio\nantonomasia\nantonomastic\nantonomastical\nantonomastically\nantonomasy\nAntony\nantonym\nantonymous\nantonymy\nantorbital\nantproof\nantra\nantral\nantralgia\nantre\nantrectomy\nantrin\nantritis\nantrocele\nantronasal\nantrophore\nantrophose\nantrorse\nantrorsely\nantroscope\nantroscopy\nAntrostomus\nantrotome\nantrotomy\nantrotympanic\nantrotympanitis\nantrum\nantrustion\nantrustionship\nantship\nAntu\nantu\nAntum\nAntwerp\nantwise\nanubing\nAnubis\nanucleate\nanukabiet\nAnukit\nanuloma\nAnura\nanuran\nanuresis\nanuretic\nanuria\nanuric\nanurous\nanury\nanus\nanusim\nanusvara\nanutraminosa\nanvasser\nanvil\nanvilsmith\nanxietude\nanxiety\nanxious\nanxiously\nanxiousness\nany\nanybody\nAnychia\nanyhow\nanyone\nanyplace\nAnystidae\nanything\nanythingarian\nanythingarianism\nanyway\nanyways\nanywhen\nanywhere\nanywhereness\nanywheres\nanywhy\nanywise\nanywither\nAnzac\nAnzanian\nAo\naogiri\nAoife\naonach\nAonian\naorist\naoristic\naoristically\naorta\naortal\naortarctia\naortectasia\naortectasis\naortic\naorticorenal\naortism\naortitis\naortoclasia\naortoclasis\naortolith\naortomalacia\naortomalaxis\naortopathy\naortoptosia\naortoptosis\naortorrhaphy\naortosclerosis\naortostenosis\naortotomy\naosmic\nAotea\nAotearoa\nAotes\nAotus\naoudad\nAouellimiden\nAoul\napa\napabhramsa\napace\nApache\napache\nApachette\napachism\napachite\napadana\napagoge\napagogic\napagogical\napagogically\napaid\nApalachee\napalit\nApama\napandry\nApanteles\nApantesis\napanthropia\napanthropy\napar\nAparai\naparaphysate\naparejo\nApargia\naparithmesis\napart\napartheid\naparthrosis\napartment\napartmental\napartness\napasote\napastron\napatan\nApatela\napatetic\napathetic\napathetical\napathetically\napathic\napathism\napathist\napathistical\napathogenic\nApathus\napathy\napatite\nApatornis\nApatosaurus\nApaturia\nApayao\nape\napeak\napectomy\napedom\napehood\napeiron\napelet\napelike\napeling\napellous\nApemantus\nApennine\napenteric\napepsia\napepsinia\napepsy\napeptic\naper\naperch\naperea\naperient\naperiodic\naperiodically\naperiodicity\naperispermic\naperistalsis\naperitive\napert\napertly\napertness\napertometer\napertural\naperture\napertured\nAperu\napery\napesthesia\napesthetic\napesthetize\nApetalae\napetaloid\napetalose\napetalous\napetalousness\napetaly\napex\napexed\naphaeresis\naphaeretic\naphagia\naphakia\naphakial\naphakic\nAphanapteryx\nAphanes\naphanesite\nAphaniptera\naphanipterous\naphanite\naphanitic\naphanitism\nAphanomyces\naphanophyre\naphanozygous\nApharsathacites\naphasia\naphasiac\naphasic\nAphelandra\nAphelenchus\naphelian\nAphelinus\naphelion\napheliotropic\napheliotropically\napheliotropism\nAphelops\naphemia\naphemic\naphengescope\naphengoscope\naphenoscope\napheresis\napheretic\naphesis\napheta\naphetic\naphetically\naphetism\naphetize\naphicidal\naphicide\naphid\naphides\naphidian\naphidicide\naphidicolous\naphidid\nAphididae\nAphidiinae\naphidious\nAphidius\naphidivorous\naphidolysin\naphidophagous\naphidozer\naphilanthropy\nAphis\naphlaston\naphlebia\naphlogistic\naphnology\naphodal\naphodian\nAphodius\naphodus\naphonia\naphonic\naphonous\naphony\naphoria\naphorism\naphorismatic\naphorismer\naphorismic\naphorismical\naphorismos\naphorist\naphoristic\naphoristically\naphorize\naphorizer\nAphoruridae\naphotic\naphototactic\naphototaxis\naphototropic\naphototropism\nAphra\naphrasia\naphrite\naphrizite\naphrodisia\naphrodisiac\naphrodisiacal\naphrodisian\nAphrodision\nAphrodistic\nAphrodite\nAphroditeum\naphroditic\nAphroditidae\naphroditous\naphrolite\naphronia\naphrosiderite\naphtha\nAphthartodocetae\nAphthartodocetic\nAphthartodocetism\naphthic\naphthitalite\naphthoid\naphthong\naphthongal\naphthongia\naphthous\naphydrotropic\naphydrotropism\naphyllose\naphyllous\naphylly\naphyric\nApiaca\nApiaceae\napiaceous\nApiales\napian\napiarian\napiarist\napiary\napiator\napicad\napical\napically\napices\nApician\napicifixed\napicilar\napicillary\napicitis\napickaback\napicoectomy\napicolysis\napicula\napicular\napiculate\napiculated\napiculation\napicultural\napiculture\napiculturist\napiculus\nApidae\napiece\napieces\napigenin\napii\napiin\napikoros\napilary\nApina\nApinae\nApinage\napinch\naping\napinoid\napio\nApioceridae\napioid\napioidal\napiole\napiolin\napiologist\napiology\napionol\nApios\napiose\nApiosoma\napiphobia\nApis\napish\napishamore\napishly\napishness\napism\napitong\napitpat\nApium\napivorous\napjohnite\naplacental\nAplacentalia\nAplacentaria\nAplacophora\naplacophoran\naplacophorous\naplanat\naplanatic\naplanatically\naplanatism\nAplanobacter\naplanogamete\naplanospore\naplasia\naplastic\nAplectrum\naplenty\naplite\naplitic\naplobasalt\naplodiorite\nAplodontia\nAplodontiidae\naplomb\naplome\nAplopappus\naploperistomatous\naplostemonous\naplotaxene\naplotomy\nApluda\naplustre\nAplysia\napnea\napneal\napneic\napneumatic\napneumatosis\nApneumona\napneumonous\napneustic\napoaconitine\napoatropine\napobiotic\napoblast\napocaffeine\napocalypse\napocalypst\napocalypt\napocalyptic\napocalyptical\napocalyptically\napocalypticism\napocalyptism\napocalyptist\napocamphoric\napocarp\napocarpous\napocarpy\napocatastasis\napocatastatic\napocatharsis\napocenter\napocentric\napocentricity\napocha\napocholic\napochromat\napochromatic\napochromatism\napocinchonine\napocodeine\napocopate\napocopated\napocopation\napocope\napocopic\napocrenic\napocrisiary\nApocrita\napocrustic\napocryph\nApocrypha\napocryphal\napocryphalist\napocryphally\napocryphalness\napocryphate\napocryphon\nApocynaceae\napocynaceous\napocyneous\nApocynum\napod\nApoda\napodal\napodan\napodeipnon\napodeixis\napodema\napodemal\napodematal\napodeme\nApodes\nApodia\napodia\napodictic\napodictical\napodictically\napodictive\nApodidae\napodixis\napodosis\napodous\napodyterium\napoembryony\napofenchene\napogaeic\napogalacteum\napogamic\napogamically\napogamous\napogamously\napogamy\napogeal\napogean\napogee\napogeic\napogenous\napogeny\napogeotropic\napogeotropically\napogeotropism\nApogon\nApogonidae\napograph\napographal\napoharmine\napohyal\nApoidea\napoise\napojove\napokrea\napokreos\napolar\napolarity\napolaustic\napolegamic\nApolista\nApolistan\nApollinarian\nApollinarianism\nApolline\nApollo\nApollonia\nApollonian\nApollonic\napollonicon\nApollonistic\nApolloship\nApollyon\napologal\napologete\napologetic\napologetical\napologetically\napologetics\napologia\napologist\napologize\napologizer\napologue\napology\napolousis\nApolysin\napolysis\napolytikion\napomecometer\napomecometry\napometabolic\napometabolism\napometabolous\napometaboly\napomictic\napomictical\napomixis\napomorphia\napomorphine\naponeurology\naponeurorrhaphy\naponeurosis\naponeurositis\naponeurotic\naponeurotome\naponeurotomy\naponia\naponic\nAponogeton\nAponogetonaceae\naponogetonaceous\napoop\napopenptic\napopetalous\napophantic\napophasis\napophatic\nApophis\napophlegmatic\napophonia\napophony\napophorometer\napophthegm\napophthegmatist\napophyge\napophylactic\napophylaxis\napophyllite\napophyllous\napophysary\napophysate\napophyseal\napophysis\napophysitis\napoplasmodial\napoplastogamous\napoplectic\napoplectical\napoplectically\napoplectiform\napoplectoid\napoplex\napoplexy\napopyle\napoquinamine\napoquinine\naporetic\naporetical\naporhyolite\naporia\nAporobranchia\naporobranchian\nAporobranchiata\nAporocactus\nAporosa\naporose\naporphin\naporphine\nAporrhaidae\nAporrhais\naporrhaoid\naporrhegma\naport\naportoise\naposafranine\naposaturn\naposaturnium\naposematic\naposematically\naposepalous\naposia\naposiopesis\naposiopetic\napositia\napositic\naposoro\naposporogony\naposporous\napospory\napostasis\napostasy\napostate\napostatic\napostatical\napostatically\napostatism\napostatize\napostaxis\napostemate\napostematic\napostemation\napostematous\naposteme\naposteriori\naposthia\napostil\napostle\napostlehood\napostleship\napostolate\napostoless\napostoli\nApostolian\nApostolic\napostolic\napostolical\napostolically\napostolicalness\nApostolici\napostolicism\napostolicity\napostolize\nApostolos\napostrophal\napostrophation\napostrophe\napostrophic\napostrophied\napostrophize\napostrophus\nApotactic\nApotactici\napotelesm\napotelesmatic\napotelesmatical\napothecal\napothecary\napothecaryship\napothece\napothecial\napothecium\napothegm\napothegmatic\napothegmatical\napothegmatically\napothegmatist\napothegmatize\napothem\napotheose\napotheoses\napotheosis\napotheosize\napothesine\napothesis\napotome\napotracheal\napotropaic\napotropaion\napotropaism\napotropous\napoturmeric\napotype\napotypic\napout\napoxesis\nApoxyomenos\napozem\napozema\napozemical\napozymase\nAppalachia\nAppalachian\nappall\nappalling\nappallingly\nappallment\nappalment\nappanage\nappanagist\napparatus\napparel\napparelment\napparence\napparency\napparent\napparently\napparentness\napparition\napparitional\napparitor\nappassionata\nappassionato\nappay\nappeal\nappealability\nappealable\nappealer\nappealing\nappealingly\nappealingness\nappear\nappearance\nappearanced\nappearer\nappeasable\nappeasableness\nappeasably\nappease\nappeasement\nappeaser\nappeasing\nappeasingly\nappeasive\nappellability\nappellable\nappellancy\nappellant\nappellate\nappellation\nappellational\nappellative\nappellatived\nappellatively\nappellativeness\nappellatory\nappellee\nappellor\nappend\nappendage\nappendaged\nappendalgia\nappendance\nappendancy\nappendant\nappendectomy\nappendical\nappendicalgia\nappendice\nappendicectasis\nappendicectomy\nappendices\nappendicial\nappendicious\nappendicitis\nappendicle\nappendicocaecostomy\nappendicostomy\nappendicular\nAppendicularia\nappendicularian\nAppendiculariidae\nAppendiculata\nappendiculate\nappendiculated\nappenditious\nappendix\nappendorontgenography\nappendotome\nappentice\napperceive\napperception\napperceptionism\napperceptionist\napperceptionistic\napperceptive\napperceptively\nappercipient\nappersonation\nappertain\nappertainment\nappertinent\nappet\nappete\nappetence\nappetency\nappetent\nappetently\nappetibility\nappetible\nappetibleness\nappetite\nappetition\nappetitional\nappetitious\nappetitive\nappetize\nappetizement\nappetizer\nappetizingly\nappinite\nAppius\napplanate\napplanation\napplaud\napplaudable\napplaudably\napplauder\napplaudingly\napplause\napplausive\napplausively\napple\nappleberry\nappleblossom\napplecart\nappledrane\napplegrower\napplejack\napplejohn\napplemonger\napplenut\nappleringy\nappleroot\napplesauce\napplewife\napplewoman\nappliable\nappliableness\nappliably\nappliance\nappliant\napplicability\napplicable\napplicableness\napplicably\napplicancy\napplicant\napplicate\napplication\napplicative\napplicatively\napplicator\napplicatorily\napplicatory\napplied\nappliedly\napplier\napplique\napplosion\napplosive\napplot\napplotment\napply\napplyingly\napplyment\nappoggiatura\nappoint\nappointable\nappointe\nappointee\nappointer\nappointive\nappointment\nappointor\nAppomatox\nAppomattoc\napport\napportion\napportionable\napportioner\napportionment\napposability\napposable\nappose\napposer\napposiopestic\napposite\nappositely\nappositeness\napposition\nappositional\nappositionally\nappositive\nappositively\nappraisable\nappraisal\nappraise\nappraisement\nappraiser\nappraising\nappraisingly\nappraisive\nappreciable\nappreciably\nappreciant\nappreciate\nappreciatingly\nappreciation\nappreciational\nappreciativ\nappreciative\nappreciatively\nappreciativeness\nappreciator\nappreciatorily\nappreciatory\nappredicate\napprehend\napprehender\napprehendingly\napprehensibility\napprehensible\napprehensibly\napprehension\napprehensive\napprehensively\napprehensiveness\napprend\napprense\napprentice\napprenticehood\napprenticement\napprenticeship\nappressed\nappressor\nappressorial\nappressorium\nappreteur\napprise\napprize\napprizement\napprizer\napproach\napproachability\napproachabl\napproachable\napproachableness\napproacher\napproaching\napproachless\napproachment\napprobate\napprobation\napprobative\napprobativeness\napprobator\napprobatory\napproof\nappropinquate\nappropinquation\nappropinquity\nappropre\nappropriable\nappropriate\nappropriately\nappropriateness\nappropriation\nappropriative\nappropriativeness\nappropriator\napprovable\napprovableness\napproval\napprovance\napprove\napprovedly\napprovedness\napprovement\napprover\napprovingly\napproximal\napproximate\napproximately\napproximation\napproximative\napproximatively\napproximativeness\napproximator\nappulse\nappulsion\nappulsive\nappulsively\nappurtenance\nappurtenant\napractic\napraxia\napraxic\napricate\naprication\naprickle\napricot\nApril\nAprilesque\nApriline\nAprilis\napriori\napriorism\napriorist\naprioristic\napriority\nAprocta\naproctia\naproctous\napron\naproneer\napronful\napronless\napronlike\napropos\naprosexia\naprosopia\naprosopous\naproterodont\napse\napselaphesia\napselaphesis\napsidal\napsidally\napsides\napsidiole\napsis\napsychia\napsychical\napt\nAptal\nAptenodytes\nAptera\napteral\napteran\napterial\napterium\napteroid\napterous\nApteryges\napterygial\nApterygidae\nApterygiformes\nApterygogenea\nApterygota\napterygote\napterygotous\nApteryx\nAptian\nAptiana\naptitude\naptitudinal\naptitudinally\naptly\naptness\naptote\naptotic\naptyalia\naptyalism\naptychus\nApulian\napulmonic\napulse\napurpose\nApus\napyonin\napyrene\napyretic\napyrexia\napyrexial\napyrexy\napyrotype\napyrous\naqua\naquabelle\naquabib\naquacade\naquacultural\naquaculture\naquaemanale\naquafortist\naquage\naquagreen\naquamarine\naquameter\naquaplane\naquapuncture\naquarelle\naquarellist\naquaria\naquarial\nAquarian\naquarian\nAquarid\nAquarii\naquariist\naquarium\nAquarius\naquarter\naquascutum\naquatic\naquatical\naquatically\naquatile\naquatint\naquatinta\naquatinter\naquation\naquativeness\naquatone\naquavalent\naquavit\naqueduct\naqueoglacial\naqueoigneous\naqueomercurial\naqueous\naqueously\naqueousness\naquicolous\naquicultural\naquiculture\naquiculturist\naquifer\naquiferous\nAquifoliaceae\naquifoliaceous\naquiform\nAquila\nAquilaria\naquilawood\naquilege\nAquilegia\nAquilian\nAquilid\naquiline\naquilino\naquincubital\naquincubitalism\nAquinist\naquintocubital\naquintocubitalism\naquiparous\nAquitanian\naquiver\naquo\naquocapsulitis\naquocarbonic\naquocellolitis\naquopentamminecobaltic\naquose\naquosity\naquotization\naquotize\nar\nara\nArab\naraba\naraban\narabana\nArabella\narabesque\narabesquely\narabesquerie\nArabian\nArabianize\nArabic\nArabicism\nArabicize\nArabidopsis\narability\narabin\narabinic\narabinose\narabinosic\nArabis\nArabism\nArabist\narabit\narabitol\narabiyeh\nArabize\narable\nArabophil\nAraby\naraca\nAracana\naracanga\naracari\nAraceae\naraceous\narachic\narachidonic\narachin\nArachis\narachnactis\nArachne\narachnean\narachnid\nArachnida\narachnidan\narachnidial\narachnidism\narachnidium\narachnism\nArachnites\narachnitis\narachnoid\narachnoidal\nArachnoidea\narachnoidea\narachnoidean\narachnoiditis\narachnological\narachnologist\narachnology\nArachnomorphae\narachnophagous\narachnopia\narad\nAradidae\narado\naraeostyle\naraeosystyle\nAragallus\nAragonese\nAragonian\naragonite\naraguato\narain\nArains\nArakanese\narakawaite\narake\nArales\nAralia\nAraliaceae\naraliaceous\naraliad\nAraliaephyllum\naralie\nAraliophyllum\naralkyl\naralkylated\nAramaean\nAramaic\nAramaicize\nAramaism\naramayoite\nAramidae\naramina\nAraminta\nAramis\nAramitess\nAramu\nAramus\nAranea\nAraneae\naraneid\nAraneida\naraneidan\naraneiform\nAraneiformes\nAraneiformia\naranein\nAraneina\nAraneoidea\naraneologist\naraneology\naraneous\naranga\narango\nAranyaka\naranzada\narapahite\nArapaho\narapaima\naraphorostic\narapunga\nAraquaju\narar\nArara\narara\nararacanga\nararao\nararauna\narariba\nararoba\narati\naration\naratory\nAraua\nArauan\nAraucan\nAraucanian\nAraucano\nAraucaria\nAraucariaceae\naraucarian\nAraucarioxylon\nAraujia\nArauna\nArawa\nArawak\nArawakan\nArawakian\narba\nArbacia\narbacin\narbalest\narbalester\narbalestre\narbalestrier\narbalist\narbalister\narbalo\nArbela\narbiter\narbitrable\narbitrager\narbitragist\narbitral\narbitrament\narbitrarily\narbitrariness\narbitrary\narbitrate\narbitration\narbitrational\narbitrationist\narbitrative\narbitrator\narbitratorship\narbitratrix\narbitrement\narbitrer\narbitress\narboloco\narbor\narboraceous\narboral\narborary\narborator\narboreal\narboreally\narborean\narbored\narboreous\narborescence\narborescent\narborescently\narboresque\narboret\narboreta\narboretum\narborical\narboricole\narboricoline\narboricolous\narboricultural\narboriculture\narboriculturist\narboriform\narborist\narborization\narborize\narboroid\narborolatry\narborous\narborvitae\narborway\narbuscle\narbuscula\narbuscular\narbuscule\narbusterol\narbustum\narbutase\narbute\narbutean\narbutin\narbutinase\narbutus\narc\narca\nArcacea\narcade\nArcadia\nArcadian\narcadian\nArcadianism\nArcadianly\nArcadic\nArcady\narcana\narcanal\narcane\narcanite\narcanum\narcate\narcature\nArcella\nArceuthobium\narch\narchabomination\narchae\narchaecraniate\nArchaeoceti\nArchaeocyathidae\nArchaeocyathus\narchaeogeology\narchaeographic\narchaeographical\narchaeography\narchaeolatry\narchaeolith\narchaeolithic\narchaeologer\narchaeologian\narchaeologic\narchaeological\narchaeologically\narchaeologist\narchaeology\nArchaeopithecus\nArchaeopteris\nArchaeopterygiformes\nArchaeopteryx\nArchaeornis\nArchaeornithes\narchaeostoma\nArchaeostomata\narchaeostomatous\narchagitator\narchaic\narchaical\narchaically\narchaicism\narchaism\narchaist\narchaistic\narchaize\narchaizer\narchangel\narchangelic\nArchangelica\narchangelical\narchangelship\narchantagonist\narchantiquary\narchapostate\narchapostle\narcharchitect\narcharios\narchartist\narchband\narchbeacon\narchbeadle\narchbishop\narchbishopess\narchbishopric\narchbishopry\narchbotcher\narchboutefeu\narchbuffoon\narchbuilder\narchchampion\narchchaplain\narchcharlatan\narchcheater\narchchemic\narchchief\narchchronicler\narchcity\narchconfraternity\narchconsoler\narchconspirator\narchcorrupter\narchcorsair\narchcount\narchcozener\narchcriminal\narchcritic\narchcrown\narchcupbearer\narchdapifer\narchdapifership\narchdeacon\narchdeaconate\narchdeaconess\narchdeaconry\narchdeaconship\narchdean\narchdeanery\narchdeceiver\narchdefender\narchdemon\narchdepredator\narchdespot\narchdetective\narchdevil\narchdiocesan\narchdiocese\narchdiplomatist\narchdissembler\narchdisturber\narchdivine\narchdogmatist\narchdolt\narchdruid\narchducal\narchduchess\narchduchy\narchduke\narchdukedom\narche\narcheal\nArchean\narchearl\narchebiosis\narchecclesiastic\narchecentric\narched\narchegone\narchegonial\nArchegoniata\nArchegoniatae\narchegoniate\narchegoniophore\narchegonium\narchegony\nArchegosaurus\narcheion\nArchelaus\nArchelenis\narchelogy\nArchelon\narchemperor\nArchencephala\narchencephalic\narchenemy\narchengineer\narchenteric\narchenteron\narcheocyte\nArcheozoic\nArcher\narcher\narcheress\narcherfish\narchership\narchery\narches\narchespore\narchesporial\narchesporium\narchetypal\narchetypally\narchetype\narchetypic\narchetypical\narchetypically\narchetypist\narcheunuch\narcheus\narchexorcist\narchfelon\narchfiend\narchfire\narchflamen\narchflatterer\narchfoe\narchfool\narchform\narchfounder\narchfriend\narchgenethliac\narchgod\narchgomeral\narchgovernor\narchgunner\narchhead\narchheart\narchheresy\narchheretic\narchhost\narchhouse\narchhumbug\narchhypocrisy\narchhypocrite\nArchiannelida\narchiater\nArchibald\narchibenthal\narchibenthic\narchibenthos\narchiblast\narchiblastic\narchiblastoma\narchiblastula\nArchibuteo\narchicantor\narchicarp\narchicerebrum\nArchichlamydeae\narchichlamydeous\narchicleistogamous\narchicleistogamy\narchicoele\narchicontinent\narchicyte\narchicytula\nArchidamus\nArchidiaceae\narchidiaconal\narchidiaconate\narchididascalian\narchididascalos\nArchidiskodon\nArchidium\narchidome\nArchie\narchiepiscopacy\narchiepiscopal\narchiepiscopally\narchiepiscopate\narchiereus\narchigaster\narchigastrula\narchigenesis\narchigonic\narchigonocyte\narchigony\narchiheretical\narchikaryon\narchil\narchilithic\nArchilochian\narchilowe\narchimage\nArchimago\narchimagus\narchimandrite\nArchimedean\nArchimedes\narchimime\narchimorphic\narchimorula\narchimperial\narchimperialism\narchimperialist\narchimperialistic\narchimpressionist\nArchimycetes\narchineuron\narchinfamy\narchinformer\narching\narchipallial\narchipallium\narchipelagian\narchipelagic\narchipelago\narchipin\narchiplasm\narchiplasmic\nArchiplata\narchiprelatical\narchipresbyter\narchipterygial\narchipterygium\narchisperm\nArchispermae\narchisphere\narchispore\narchistome\narchisupreme\narchisymbolical\narchitect\narchitective\narchitectonic\nArchitectonica\narchitectonically\narchitectonics\narchitectress\narchitectural\narchitecturalist\narchitecturally\narchitecture\narchitecturesque\nArchiteuthis\narchitis\narchitraval\narchitrave\narchitraved\narchitypographer\narchival\narchive\narchivist\narchivolt\narchizoic\narchjockey\narchking\narchknave\narchleader\narchlecher\narchleveler\narchlexicographer\narchliar\narchlute\narchly\narchmachine\narchmagician\narchmagirist\narchmarshal\narchmediocrity\narchmessenger\narchmilitarist\narchmime\narchminister\narchmock\narchmocker\narchmockery\narchmonarch\narchmonarchist\narchmonarchy\narchmugwump\narchmurderer\narchmystagogue\narchness\narchocele\narchocystosyrinx\narchology\narchon\narchonship\narchont\narchontate\nArchontia\narchontic\narchoplasm\narchoplasmic\narchoptoma\narchoptosis\narchorrhagia\narchorrhea\narchostegnosis\narchostenosis\narchosyrinx\narchoverseer\narchpall\narchpapist\narchpastor\narchpatriarch\narchpatron\narchphilosopher\narchphylarch\narchpiece\narchpilferer\narchpillar\narchpirate\narchplagiarist\narchplagiary\narchplayer\narchplotter\narchplunderer\narchplutocrat\narchpoet\narchpolitician\narchpontiff\narchpractice\narchprelate\narchprelatic\narchprelatical\narchpresbyter\narchpresbyterate\narchpresbytery\narchpretender\narchpriest\narchpriesthood\narchpriestship\narchprimate\narchprince\narchprophet\narchprotopope\narchprototype\narchpublican\narchpuritan\narchradical\narchrascal\narchreactionary\narchrebel\narchregent\narchrepresentative\narchrobber\narchrogue\narchruler\narchsacrificator\narchsacrificer\narchsaint\narchsatrap\narchscoundrel\narchseducer\narchsee\narchsewer\narchshepherd\narchsin\narchsnob\narchspirit\narchspy\narchsteward\narchswindler\narchsynagogue\narchtempter\narchthief\narchtraitor\narchtreasurer\narchtreasurership\narchturncoat\narchtyrant\narchurger\narchvagabond\narchvampire\narchvestryman\narchvillain\narchvillainy\narchvisitor\narchwag\narchway\narchwench\narchwise\narchworker\narchworkmaster\nArchy\narchy\nArcidae\nArcifera\narciferous\narcifinious\narciform\narcing\nArcite\narcked\narcking\narcocentrous\narcocentrum\narcograph\nArcos\nArctalia\nArctalian\nArctamerican\narctation\nArctia\narctian\narctic\narctically\narctician\narcticize\narcticward\narcticwards\narctiid\nArctiidae\nArctisca\nArctium\nArctocephalus\nArctogaea\nArctogaeal\nArctogaean\narctoid\nArctoidea\narctoidean\nArctomys\nArctos\nArctosis\nArctostaphylos\nArcturia\nArcturus\narcual\narcuale\narcuate\narcuated\narcuately\narcuation\narcubalist\narcubalister\narcula\narculite\nardassine\nArdea\nArdeae\nardeb\nArdeidae\nArdelia\nardella\nardency\nardennite\nardent\nardently\nardentness\nArdhamagadhi\nArdhanari\nardish\nArdisia\nArdisiaceae\nardoise\nardor\nardri\nardu\narduinite\narduous\narduously\narduousness\nardurous\nare\narea\nareach\naread\nareal\nareality\nArean\narear\nareasoner\nareaway\nAreca\nArecaceae\narecaceous\narecaidin\narecaidine\narecain\narecaine\nArecales\narecolidin\narecolidine\narecolin\narecoline\nArecuna\nared\nareek\nareel\narefact\narefaction\naregenerative\naregeneratory\nareito\narena\narenaceous\narenae\nArenaria\narenariae\narenarious\narenation\narend\narendalite\nareng\nArenga\nArenicola\narenicole\narenicolite\narenicolous\nArenig\narenilitic\narenoid\narenose\narenosity\narent\nareocentric\nareographer\nareographic\nareographical\nareographically\nareography\nareola\nareolar\nareolate\nareolated\nareolation\nareole\nareolet\nareologic\nareological\nareologically\nareologist\nareology\nareometer\nareometric\nareometrical\nareometry\nAreopagist\nAreopagite\nAreopagitic\nAreopagitica\nAreopagus\nareotectonics\nareroscope\naretaics\narete\nArethusa\nArethuse\nAretinian\narfvedsonite\nargal\nargala\nargali\nargans\nArgante\nArgas\nargasid\nArgasidae\nArgean\nargeers\nargel\nArgemone\nargemony\nargenol\nargent\nargental\nargentamid\nargentamide\nargentamin\nargentamine\nargentate\nargentation\nargenteous\nargenter\nargenteum\nargentic\nargenticyanide\nargentide\nargentiferous\nArgentina\nArgentine\nargentine\nArgentinean\nArgentinian\nArgentinidae\nargentinitrate\nArgentinize\nArgentino\nargention\nargentite\nargentojarosite\nargentol\nargentometric\nargentometrically\nargentometry\nargenton\nargentoproteinum\nargentose\nargentous\nargentum\nArgestes\narghan\narghel\narghool\nArgid\nargil\nargillaceous\nargilliferous\nargillite\nargillitic\nargilloarenaceous\nargillocalcareous\nargillocalcite\nargilloferruginous\nargilloid\nargillomagnesian\nargillous\narginine\nargininephosphoric\nArgiope\nArgiopidae\nArgiopoidea\nArgive\nArgo\nargo\nArgoan\nargol\nargolet\nArgolian\nArgolic\nArgolid\nargon\nArgonaut\nArgonauta\nArgonautic\nArgonne\nargosy\nargot\nargotic\nArgovian\narguable\nargue\narguer\nargufier\nargufy\nArgulus\nargument\nargumental\nargumentation\nargumentatious\nargumentative\nargumentatively\nargumentativeness\nargumentator\nargumentatory\nArgus\nargusfish\nArgusianus\nArguslike\nargute\nargutely\narguteness\nArgyle\nArgyll\nArgynnis\nargyranthemous\nargyranthous\nArgyraspides\nargyria\nargyric\nargyrite\nargyrocephalous\nargyrodite\nArgyrol\nArgyroneta\nArgyropelecus\nargyrose\nargyrosis\nArgyrosomus\nargyrythrose\narhar\narhat\narhatship\nArhauaco\narhythmic\naria\nAriadne\nArian\nAriana\nArianism\nArianistic\nArianistical\nArianize\nArianizer\nArianrhod\naribine\nArician\naricine\narid\nArided\naridge\naridian\naridity\naridly\naridness\nariegite\nAriel\nariel\narienzo\nAries\narietation\nArietid\narietinous\narietta\naright\narightly\narigue\nAriidae\nArikara\naril\nariled\narillary\narillate\narillated\narilliform\narillode\narillodium\narilloid\narillus\nArimasp\nArimaspian\nArimathaean\nAriocarpus\nArioi\nArioian\nArion\nariose\narioso\nariot\naripple\nArisaema\narisard\narise\narisen\narist\narista\nAristarch\nAristarchian\naristarchy\naristate\nAristeas\nAristida\nAristides\nAristippus\naristocracy\naristocrat\naristocratic\naristocratical\naristocratically\naristocraticalness\naristocraticism\naristocraticness\naristocratism\naristodemocracy\naristodemocratical\naristogenesis\naristogenetic\naristogenic\naristogenics\nAristol\nAristolochia\nAristolochiaceae\naristolochiaceous\nAristolochiales\naristolochin\naristolochine\naristological\naristologist\naristology\naristomonarchy\nAristophanic\naristorepublicanism\nAristotelian\nAristotelianism\nAristotelic\nAristotelism\naristotype\naristulate\narite\narithmetic\narithmetical\narithmetically\narithmetician\narithmetization\narithmetize\narithmic\narithmocracy\narithmocratic\narithmogram\narithmograph\narithmography\narithmomania\narithmometer\nArius\nArivaipa\nArizona\nArizonan\nArizonian\narizonite\narjun\nark\nArkab\nArkansan\nArkansas\nArkansawyer\narkansite\nArkite\narkite\narkose\narkosic\narksutite\nArlene\nArleng\narles\nArline\narm\narmada\narmadilla\nArmadillididae\nArmadillidium\narmadillo\nArmado\nArmageddon\nArmageddonist\narmagnac\narmament\narmamentarium\narmamentary\narmangite\narmariolum\narmarium\nArmata\nArmatoles\nArmatoli\narmature\narmbone\narmchair\narmchaired\narmed\narmeniaceous\nArmenian\nArmenic\nArmenize\nArmenoid\narmer\nArmeria\nArmeriaceae\narmet\narmful\narmgaunt\narmhole\narmhoop\nArmida\narmied\narmiferous\narmiger\narmigeral\narmigerous\narmil\narmilla\nArmillaria\narmillary\narmillate\narmillated\narming\nArminian\nArminianism\nArminianize\nArminianizer\narmipotence\narmipotent\narmisonant\narmisonous\narmistice\narmless\narmlet\narmload\narmoire\narmonica\narmor\nArmoracia\narmored\narmorer\narmorial\nArmoric\nArmorican\nArmorician\narmoried\narmorist\narmorproof\narmorwise\narmory\nArmouchiquois\narmozeen\narmpiece\narmpit\narmplate\narmrack\narmrest\narms\narmscye\narmure\narmy\narn\narna\nArnaut\narnberry\nArne\nArneb\nArnebia\narnee\narni\narnica\nArnold\nArnoldist\nArnoseris\narnotta\narnotto\nArnusian\narnut\nAro\naroar\naroast\narock\naroeira\naroid\naroideous\nAroides\naroint\narolium\narolla\naroma\naromacity\naromadendrin\naromatic\naromatically\naromaticness\naromatite\naromatites\naromatization\naromatize\naromatizer\naromatophor\naromatophore\nAronia\naroon\nAroras\nArosaguntacook\narose\naround\narousal\narouse\narousement\narouser\narow\naroxyl\narpeggiando\narpeggiated\narpeggiation\narpeggio\narpeggioed\narpen\narpent\narquerite\narquifoux\narracach\narracacha\nArracacia\narrack\narrah\narraign\narraigner\narraignment\narrame\narrange\narrangeable\narrangement\narranger\narrant\narrantly\nArras\narras\narrased\narrasene\narrastra\narrastre\narratel\narrau\narray\narrayal\narrayer\narrayment\narrear\narrearage\narrect\narrector\narrendation\narrenotokous\narrenotoky\narrent\narrentable\narrentation\narreptitious\narrest\narrestable\narrestation\narrestee\narrester\narresting\narrestingly\narrestive\narrestment\narrestor\nArretine\narrhenal\nArrhenatherum\narrhenoid\narrhenotokous\narrhenotoky\narrhinia\narrhizal\narrhizous\narrhythmia\narrhythmic\narrhythmical\narrhythmically\narrhythmous\narrhythmy\narriage\narriba\narride\narridge\narrie\narriere\nArriet\narrimby\narris\narrish\narrisways\narriswise\narrival\narrive\narriver\narroba\narrogance\narrogancy\narrogant\narrogantly\narrogantness\narrogate\narrogatingly\narrogation\narrogative\narrogator\narrojadite\narrope\narrosive\narrow\narrowbush\narrowed\narrowhead\narrowheaded\narrowleaf\narrowless\narrowlet\narrowlike\narrowplate\narrowroot\narrowsmith\narrowstone\narrowweed\narrowwood\narrowworm\narrowy\narroyo\nArruague\nArry\nArryish\nArsacid\nArsacidan\narsanilic\narse\narsedine\narsenal\narsenate\narsenation\narseneted\narsenetted\narsenfast\narsenferratose\narsenhemol\narseniasis\narseniate\narsenic\narsenical\narsenicalism\narsenicate\narsenicism\narsenicize\narsenicophagy\narsenide\narseniferous\narsenillo\narseniopleite\narseniosiderite\narsenious\narsenism\narsenite\narsenium\narseniuret\narseniureted\narsenization\narseno\narsenobenzene\narsenobenzol\narsenobismite\narsenoferratin\narsenofuran\narsenohemol\narsenolite\narsenophagy\narsenophen\narsenophenol\narsenophenylglycin\narsenopyrite\narsenostyracol\narsenotherapy\narsenotungstates\narsenotungstic\narsenous\narsenoxide\narsenyl\narses\narsesmart\narsheen\narshin\narshine\narsine\narsinic\narsino\nArsinoitherium\narsis\narsle\narsmetrik\narsmetrike\narsnicker\narsoite\narson\narsonate\narsonation\narsonic\narsonist\narsonite\narsonium\narsono\narsonvalization\narsphenamine\narsyl\narsylene\nArt\nart\nartaba\nartabe\nartal\nArtamidae\nArtamus\nartar\nartarine\nartcraft\nartefact\nartel\nArtemas\nArtemia\nArtemis\nArtemisia\nartemisic\nartemisin\nArtemision\nArtemisium\narteriagra\narterial\narterialization\narterialize\narterially\narteriarctia\narteriasis\narteriectasia\narteriectasis\narteriectopia\narterin\narterioarctia\narteriocapillary\narteriococcygeal\narteriodialysis\narteriodiastasis\narteriofibrosis\narteriogenesis\narteriogram\narteriograph\narteriography\narteriole\narteriolith\narteriology\narteriolosclerosis\narteriomalacia\narteriometer\narteriomotor\narterionecrosis\narteriopalmus\narteriopathy\narteriophlebotomy\narterioplania\narterioplasty\narteriopressor\narteriorenal\narteriorrhagia\narteriorrhaphy\narteriorrhexis\narteriosclerosis\narteriosclerotic\narteriospasm\narteriostenosis\narteriostosis\narteriostrepsis\narteriosympathectomy\narteriotome\narteriotomy\narteriotrepsis\narterious\narteriovenous\narterioversion\narterioverter\narteritis\nartery\nArtesian\nartesian\nartful\nartfully\nartfulness\nArtgum\nartha\narthel\narthemis\narthragra\narthral\narthralgia\narthralgic\narthrectomy\narthredema\narthrempyesis\narthresthesia\narthritic\narthritical\narthriticine\narthritis\narthritism\narthrobacterium\narthrobranch\narthrobranchia\narthrocace\narthrocarcinoma\narthrocele\narthrochondritis\narthroclasia\narthrocleisis\narthroclisis\narthroderm\narthrodesis\narthrodia\narthrodial\narthrodic\nArthrodira\narthrodiran\narthrodire\narthrodirous\nArthrodonteae\narthrodynia\narthrodynic\narthroempyema\narthroempyesis\narthroendoscopy\nArthrogastra\narthrogastran\narthrogenous\narthrography\narthrogryposis\narthrolite\narthrolith\narthrolithiasis\narthrology\narthromeningitis\narthromere\narthromeric\narthrometer\narthrometry\narthroncus\narthroneuralgia\narthropathic\narthropathology\narthropathy\narthrophlogosis\narthrophyma\narthroplastic\narthroplasty\narthropleura\narthropleure\narthropod\nArthropoda\narthropodal\narthropodan\narthropodous\nArthropomata\narthropomatous\narthropterous\narthropyosis\narthrorheumatism\narthrorrhagia\narthrosclerosis\narthrosia\narthrosis\narthrospore\narthrosporic\narthrosporous\narthrosteitis\narthrosterigma\narthrostome\narthrostomy\nArthrostraca\narthrosynovitis\narthrosyrinx\narthrotome\narthrotomy\narthrotrauma\narthrotropic\narthrotyphoid\narthrous\narthroxerosis\nArthrozoa\narthrozoan\narthrozoic\nArthur\nArthurian\nArthuriana\nartiad\nartichoke\narticle\narticled\narticulability\narticulable\narticulacy\narticulant\narticular\narticulare\narticularly\narticulary\nArticulata\narticulate\narticulated\narticulately\narticulateness\narticulation\narticulationist\narticulative\narticulator\narticulatory\narticulite\narticulus\nArtie\nartifact\nartifactitious\nartifice\nartificer\nartificership\nartificial\nartificialism\nartificiality\nartificialize\nartificially\nartificialness\nartiller\nartillerist\nartillery\nartilleryman\nartilleryship\nartiness\nartinite\nArtinskian\nartiodactyl\nArtiodactyla\nartiodactylous\nartiphyllous\nartisan\nartisanship\nartist\nartistdom\nartiste\nartistic\nartistical\nartistically\nartistry\nartless\nartlessly\nartlessness\nartlet\nartlike\nArtocarpaceae\nartocarpad\nartocarpeous\nartocarpous\nArtocarpus\nartolater\nartophagous\nartophorion\nartotype\nartotypy\nArtotyrite\nartware\narty\naru\nAruac\narui\naruke\nArulo\nArum\narumin\nAruncus\narundiferous\narundinaceous\nArundinaria\narundineous\nArundo\nArunta\narupa\narusa\narusha\narustle\narval\narvel\nArverni\nArvicola\narvicole\nArvicolinae\narvicoline\narvicolous\narviculture\narx\nary\nArya\nAryan\nAryanism\nAryanization\nAryanize\naryballoid\naryballus\naryepiglottic\naryl\narylamine\narylamino\narylate\narytenoid\narytenoidal\narzan\nArzava\nArzawa\narzrunite\narzun\nAs\nas\nAsa\nasaddle\nasafetida\nAsahel\nasak\nasale\nasana\nAsaph\nasaphia\nAsaphic\nasaphid\nAsaphidae\nAsaphus\nasaprol\nasarabacca\nAsaraceae\nAsarh\nasarite\nasaron\nasarone\nasarotum\nAsarum\nasbest\nasbestic\nasbestiform\nasbestine\nasbestinize\nasbestoid\nasbestoidal\nasbestos\nasbestosis\nasbestous\nasbestus\nasbolin\nasbolite\nAscabart\nAscalabota\nascan\nAscanian\nAscanius\nascare\nascariasis\nascaricidal\nascaricide\nascarid\nAscaridae\nascarides\nAscaridia\nascaridiasis\nascaridole\nAscaris\nascaron\nAscella\nascellus\nascend\nascendable\nascendance\nascendancy\nascendant\nascendence\nascendency\nascendent\nascender\nascendible\nascending\nascendingly\nascension\nascensional\nascensionist\nAscensiontide\nascensive\nascent\nascertain\nascertainable\nascertainableness\nascertainably\nascertainer\nascertainment\nascescency\nascescent\nascetic\nascetical\nascetically\nasceticism\nAscetta\naschaffite\nascham\naschistic\nasci\nascian\nAscidia\nAscidiacea\nAscidiae\nascidian\nascidiate\nascidicolous\nascidiferous\nascidiform\nascidioid\nAscidioida\nAscidioidea\nAscidiozoa\nascidiozooid\nascidium\nasciferous\nascigerous\nascii\nascites\nascitic\nascitical\nascititious\nasclent\nAsclepiad\nasclepiad\nAsclepiadaceae\nasclepiadaceous\nAsclepiadae\nAsclepiadean\nasclepiadeous\nAsclepiadic\nAsclepian\nAsclepias\nasclepidin\nasclepidoid\nAsclepieion\nasclepin\nAsclepius\nascocarp\nascocarpous\nAscochyta\nascogenous\nascogone\nascogonial\nascogonidium\nascogonium\nascolichen\nAscolichenes\nascoma\nascomycetal\nascomycete\nAscomycetes\nascomycetous\nascon\nAscones\nascophore\nascophorous\nAscophyllum\nascorbic\nascospore\nascosporic\nascosporous\nAscot\nascot\nAscothoracica\nascribable\nascribe\nascript\nascription\nascriptitii\nascriptitious\nascriptitius\nascry\nascula\nAscupart\nascus\nascyphous\nAscyrum\nasdic\nase\nasearch\nasecretory\naseethe\naseismatic\naseismic\naseismicity\naseity\naselgeia\nasellate\nAselli\nAsellidae\nAselline\nAsellus\nasem\nasemasia\nasemia\nasepsis\naseptate\naseptic\naseptically\nasepticism\nasepticize\naseptify\naseptol\naseptolin\nasexual\nasexuality\nasexualization\nasexualize\nasexually\nasfetida\nash\nAsha\nashake\nashame\nashamed\nashamedly\nashamedness\nashamnu\nAshangos\nAshantee\nAshanti\nAsharasi\nashberry\nashcake\nashen\nAsher\nasherah\nAsherites\nashery\nashes\nashet\nashily\nashimmer\nashine\nashiness\nashipboard\nAshir\nashiver\nAshkenazic\nAshkenazim\nashkoko\nashlar\nashlared\nashlaring\nashless\nashling\nAshluslay\nashman\nAshmolean\nAshochimi\nashore\nashpan\nashpit\nashplant\nashraf\nashrafi\nashthroat\nAshur\nashur\nashweed\nashwort\nashy\nasialia\nAsian\nAsianic\nAsianism\nAsiarch\nAsiarchate\nAsiatic\nAsiatical\nAsiatically\nAsiatican\nAsiaticism\nAsiaticization\nAsiaticize\nAsiatize\naside\nasidehand\nasideness\nasiderite\nasideu\nasiento\nasilid\nAsilidae\nAsilus\nasimen\nAsimina\nasimmer\nasinego\nasinine\nasininely\nasininity\nasiphonate\nasiphonogama\nasitia\nask\naskable\naskance\naskant\naskar\naskari\nasker\naskew\naskingly\naskip\nasklent\nAsklepios\naskos\nAskr\naslant\naslantwise\naslaver\nasleep\naslop\naslope\naslumber\nasmack\nasmalte\nasmear\nasmile\nasmoke\nasmolder\nasniffle\nasnort\nasoak\nasocial\nasok\nasoka\nasomatophyte\nasomatous\nasonant\nasonia\nasop\nasor\nasouth\nasp\naspace\naspalathus\nAspalax\nasparagic\nasparagine\nasparaginic\nasparaginous\nasparagus\nasparagyl\nasparkle\naspartate\naspartic\naspartyl\nAspasia\nAspatia\naspect\naspectable\naspectant\naspection\naspectual\naspen\nasper\nasperate\nasperation\naspergation\nasperge\nasperger\nAsperges\naspergil\naspergill\nAspergillaceae\nAspergillales\naspergilliform\naspergillin\naspergillosis\naspergillum\naspergillus\nAsperifoliae\nasperifoliate\nasperifolious\nasperite\nasperity\naspermatic\naspermatism\naspermatous\naspermia\naspermic\naspermous\nasperous\nasperously\nasperse\naspersed\nasperser\naspersion\naspersive\naspersively\naspersor\naspersorium\naspersory\nAsperugo\nAsperula\nasperuloside\nasperulous\nasphalt\nasphaltene\nasphalter\nasphaltic\nasphaltite\nasphaltum\naspheterism\naspheterize\nasphodel\nAsphodelaceae\nAsphodeline\nAsphodelus\nasphyctic\nasphyctous\nasphyxia\nasphyxial\nasphyxiant\nasphyxiate\nasphyxiation\nasphyxiative\nasphyxiator\nasphyxied\nasphyxy\naspic\naspiculate\naspiculous\naspidate\naspidiaria\naspidinol\nAspidiotus\nAspidiske\nAspidistra\naspidium\nAspidobranchia\nAspidobranchiata\naspidobranchiate\nAspidocephali\nAspidochirota\nAspidoganoidei\naspidomancy\nAspidosperma\naspidospermine\naspirant\naspirata\naspirate\naspiration\naspirator\naspiratory\naspire\naspirer\naspirin\naspiring\naspiringly\naspiringness\naspish\nasplanchnic\nAsplenieae\nasplenioid\nAsplenium\nasporogenic\nasporogenous\nasporous\nasport\nasportation\nasporulate\naspout\nasprawl\naspread\nAspredinidae\nAspredo\naspring\nasprout\nasquare\nasquat\nasqueal\nasquint\nasquirm\nass\nassacu\nassagai\nassai\nassail\nassailable\nassailableness\nassailant\nassailer\nassailment\nAssam\nAssamese\nAssamites\nassapan\nassapanic\nassarion\nassart\nassary\nassassin\nassassinate\nassassination\nassassinative\nassassinator\nassassinatress\nassassinist\nassate\nassation\nassault\nassaultable\nassaulter\nassaut\nassay\nassayable\nassayer\nassaying\nassbaa\nasse\nassecuration\nassecurator\nassedation\nassegai\nasself\nassemblable\nassemblage\nassemble\nassembler\nassembly\nassemblyman\nassent\nassentaneous\nassentation\nassentatious\nassentator\nassentatorily\nassentatory\nassented\nassenter\nassentient\nassenting\nassentingly\nassentive\nassentiveness\nassentor\nassert\nassertable\nassertative\nasserter\nassertible\nassertion\nassertional\nassertive\nassertively\nassertiveness\nassertor\nassertorial\nassertorially\nassertoric\nassertorical\nassertorically\nassertorily\nassertory\nassertress\nassertrix\nassertum\nassess\nassessable\nassessably\nassessed\nassessee\nassession\nassessionary\nassessment\nassessor\nassessorial\nassessorship\nassessory\nasset\nassets\nassever\nasseverate\nasseveratingly\nasseveration\nasseverative\nasseveratively\nasseveratory\nasshead\nassi\nassibilate\nassibilation\nAssidean\nassident\nassidual\nassidually\nassiduity\nassiduous\nassiduously\nassiduousness\nassientist\nassiento\nassify\nassign\nassignability\nassignable\nassignably\nassignat\nassignation\nassigned\nassignee\nassigneeship\nassigner\nassignment\nassignor\nassilag\nassimilability\nassimilable\nassimilate\nassimilation\nassimilationist\nassimilative\nassimilativeness\nassimilator\nassimilatory\nAssiniboin\nassis\nAssisan\nassise\nassish\nassishly\nassishness\nassist\nassistance\nassistant\nassistanted\nassistantship\nassistency\nassister\nassistful\nassistive\nassistless\nassistor\nassize\nassizement\nassizer\nassizes\nasslike\nassman\nAssmannshauser\nassmanship\nassociability\nassociable\nassociableness\nassociate\nassociated\nassociatedness\nassociateship\nassociation\nassociational\nassociationalism\nassociationalist\nassociationism\nassociationist\nassociationistic\nassociative\nassociatively\nassociativeness\nassociator\nassociatory\nassoil\nassoilment\nassoilzie\nassonance\nassonanced\nassonant\nassonantal\nassonantic\nassonate\nAssonia\nassort\nassortative\nassorted\nassortedness\nassorter\nassortive\nassortment\nassuade\nassuage\nassuagement\nassuager\nassuasive\nassubjugate\nassuetude\nassumable\nassumably\nassume\nassumed\nassumedly\nassumer\nassuming\nassumingly\nassumingness\nassumpsit\nassumption\nAssumptionist\nassumptious\nassumptiousness\nassumptive\nassumptively\nassurable\nassurance\nassurant\nassure\nassured\nassuredly\nassuredness\nassurer\nassurge\nassurgency\nassurgent\nassuring\nassuringly\nassyntite\nAssyrian\nAssyrianize\nAssyriological\nAssyriologist\nAssyriologue\nAssyriology\nAssyroid\nassythment\nast\nasta\nAstacidae\nAstacus\nAstakiwi\nastalk\nastarboard\nastare\nastart\nAstarte\nAstartian\nAstartidae\nastasia\nastatic\nastatically\nastaticism\nastatine\nastatize\nastatizer\nastay\nasteam\nasteatosis\nasteep\nasteer\nasteism\nastelic\nastely\naster\nAsteraceae\nasteraceous\nAsterales\nAsterella\nastereognosis\nasteria\nasterial\nAsterias\nasteriated\nAsteriidae\nasterikos\nasterin\nAsterina\nAsterinidae\nasterioid\nAsterion\nasterion\nAsterionella\nasterisk\nasterism\nasterismal\nastern\nasternal\nAsternata\nasternia\nAsterochiton\nasteroid\nasteroidal\nAsteroidea\nasteroidean\nAsterolepidae\nAsterolepis\nAsterope\nasterophyllite\nAsterophyllites\nAsterospondyli\nasterospondylic\nasterospondylous\nAsteroxylaceae\nAsteroxylon\nAsterozoa\nasterwort\nasthenia\nasthenic\nasthenical\nasthenobiosis\nasthenobiotic\nasthenolith\nasthenology\nasthenopia\nasthenopic\nasthenosphere\nastheny\nasthma\nasthmatic\nasthmatical\nasthmatically\nasthmatoid\nasthmogenic\nasthore\nasthorin\nAstian\nastichous\nastigmatic\nastigmatical\nastigmatically\nastigmatism\nastigmatizer\nastigmatometer\nastigmatoscope\nastigmatoscopy\nastigmia\nastigmism\nastigmometer\nastigmometry\nAstilbe\nastilbe\nastint\nastipulate\nastir\nastite\nastomatal\nastomatous\nastomia\nastomous\nastonied\nastonish\nastonishedly\nastonisher\nastonishing\nastonishingly\nastonishingness\nastonishment\nastony\nastoop\nastor\nastound\nastoundable\nastounding\nastoundingly\nastoundment\nAstrachan\nastraddle\nAstraea\nAstraean\nastraean\nastraeid\nAstraeidae\nastraeiform\nastragal\nastragalar\nastragalectomy\nastragali\nastragalocalcaneal\nastragalocentral\nastragalomancy\nastragalonavicular\nastragaloscaphoid\nastragalotibial\nAstragalus\nastragalus\nastrain\nastrakanite\nastrakhan\nastral\nastrally\nastrand\nAstrantia\nastraphobia\nastrapophobia\nastray\nastream\nastrer\nastrict\nastriction\nastrictive\nastrictively\nastrictiveness\nAstrid\nastride\nastrier\nastriferous\nastrild\nastringe\nastringency\nastringent\nastringently\nastringer\nastroalchemist\nastroblast\nAstrocaryum\nastrochemist\nastrochemistry\nastrochronological\nastrocyte\nastrocytoma\nastrocytomata\nastrodiagnosis\nastrodome\nastrofel\nastrogeny\nastroglia\nastrognosy\nastrogonic\nastrogony\nastrograph\nastrographic\nastrography\nastroid\nastroite\nastrolabe\nastrolabical\nastrolater\nastrolatry\nastrolithology\nastrologaster\nastrologer\nastrologian\nastrologic\nastrological\nastrologically\nastrologistic\nastrologize\nastrologous\nastrology\nastromancer\nastromancy\nastromantic\nastrometeorological\nastrometeorologist\nastrometeorology\nastrometer\nastrometrical\nastrometry\nastronaut\nastronautics\nastronomer\nastronomic\nastronomical\nastronomically\nastronomics\nastronomize\nastronomy\nAstropecten\nAstropectinidae\nastrophil\nastrophobia\nastrophotographic\nastrophotography\nastrophotometer\nastrophotometrical\nastrophotometry\nastrophyllite\nastrophysical\nastrophysicist\nastrophysics\nAstrophyton\nastroscope\nAstroscopus\nastroscopy\nastrospectral\nastrospectroscopic\nastrosphere\nastrotheology\nastrut\nastucious\nastuciously\nastucity\nAstur\nAsturian\nastute\nastutely\nastuteness\nastylar\nAstylospongia\nAstylosternus\nasudden\nasunder\nAsuri\naswail\naswarm\nasway\nasweat\naswell\naswim\naswing\naswirl\naswoon\naswooned\nasyla\nasyllabia\nasyllabic\nasyllabical\nasylum\nasymbiotic\nasymbolia\nasymbolic\nasymbolical\nasymmetric\nasymmetrical\nasymmetrically\nAsymmetron\nasymmetry\nasymptomatic\nasymptote\nasymptotic\nasymptotical\nasymptotically\nasynapsis\nasynaptic\nasynartete\nasynartetic\nasynchronism\nasynchronous\nasyndesis\nasyndetic\nasyndetically\nasyndeton\nasynergia\nasynergy\nasyngamic\nasyngamy\nasyntactic\nasyntrophy\nasystole\nasystolic\nasystolism\nasyzygetic\nat\nAta\natabal\natabeg\natabek\nAtabrine\nAtacaman\nAtacamenan\nAtacamenian\nAtacameno\natacamite\natactic\natactiform\nAtaentsic\natafter\nAtaigal\nAtaiyal\nAtalan\nataman\natamasco\nAtamosco\natangle\natap\nataraxia\nataraxy\natatschite\nataunt\natavi\natavic\natavism\natavist\natavistic\natavistically\natavus\nataxaphasia\nataxia\nataxiagram\nataxiagraph\nataxiameter\nataxiaphasia\nataxic\nataxinomic\nataxite\nataxonomic\nataxophemia\nataxy\natazir\natbash\natchison\nate\nAteba\natebrin\natechnic\natechnical\natechny\nateeter\natef\natelectasis\natelectatic\nateleological\nAteles\natelestite\natelets\natelier\nateliosis\nAtellan\natelo\natelocardia\natelocephalous\nateloglossia\natelognathia\natelomitic\natelomyelia\natelopodia\nateloprosopia\natelorachidia\natelostomia\natemporal\nAten\nAtenism\nAtenist\nAterian\nates\nAtestine\nateuchi\nateuchus\nAtfalati\nAthabasca\nAthabascan\nathalamous\nathalline\nAthamantid\nathanasia\nAthanasian\nAthanasianism\nAthanasianist\nathanasy\nathanor\nAthapascan\nathar\nAtharvan\nAthecae\nAthecata\nathecate\natheism\natheist\natheistic\natheistical\natheistically\natheisticalness\natheize\natheizer\nathelia\natheling\nathematic\nAthena\nAthenaea\nathenaeum\nathenee\nAthenian\nAthenianly\nathenor\nAthens\natheological\natheologically\natheology\natheous\nAthericera\nathericeran\nathericerous\natherine\nAtherinidae\nAtheriogaea\nAtheriogaean\nAtheris\nathermancy\nathermanous\nathermic\nathermous\natheroma\natheromasia\natheromata\natheromatosis\natheromatous\natherosclerosis\nAtherosperma\nAtherurus\nathetesis\nathetize\nathetoid\nathetosic\nathetosis\nathing\nathirst\nathlete\nathletehood\nathletic\nathletical\nathletically\nathleticism\nathletics\nathletism\nathletocracy\nathlothete\nathlothetes\nathodyd\nathort\nathrepsia\nathreptic\nathrill\nathrive\nathrob\nathrocyte\nathrocytosis\nathrogenic\nathrong\nathrough\nathwart\nathwarthawse\nathwartship\nathwartships\nathwartwise\nathymia\nathymic\nathymy\nathyreosis\nathyria\nathyrid\nAthyridae\nAthyris\nAthyrium\nathyroid\nathyroidism\nathyrosis\nAti\nAtik\nAtikokania\natilt\natimon\natinga\natingle\natinkle\natip\natis\nAtka\nAtlanta\natlantad\natlantal\nAtlantean\natlantes\nAtlantic\natlantic\nAtlantica\nAtlantid\nAtlantides\natlantite\natlantoaxial\natlantodidymus\natlantomastoid\natlantoodontoid\nAtlantosaurus\nAtlas\natlas\nAtlaslike\natlatl\natle\natlee\natloaxoid\natloid\natloidean\natloidoaxoid\natma\natman\natmiatrics\natmiatry\natmid\natmidalbumin\natmidometer\natmidometry\natmo\natmocausis\natmocautery\natmoclastic\natmogenic\natmograph\natmologic\natmological\natmologist\natmology\natmolysis\natmolyzation\natmolyze\natmolyzer\natmometer\natmometric\natmometry\natmos\natmosphere\natmosphereful\natmosphereless\natmospheric\natmospherical\natmospherically\natmospherics\natmospherology\natmostea\natmosteal\natmosteon\nAtnah\natocha\natocia\natokal\natoke\natokous\natoll\natom\natomatic\natomechanics\natomerg\natomic\natomical\natomically\natomician\natomicism\natomicity\natomics\natomiferous\natomism\natomist\natomistic\natomistical\natomistically\natomistics\natomity\natomization\natomize\natomizer\natomology\natomy\natonable\natonal\natonalism\natonalistic\natonality\natonally\natone\natonement\natoneness\natoner\natonia\natonic\natonicity\natoningly\natony\natop\nAtophan\natophan\natopic\natopite\natopy\nAtorai\nAtossa\natour\natoxic\nAtoxyl\natoxyl\natrabilarian\natrabilarious\natrabiliar\natrabiliarious\natrabiliary\natrabilious\natrabiliousness\natracheate\nAtractaspis\nAtragene\natragene\natrail\natrament\natramental\natramentary\natramentous\natraumatic\nAtrebates\nAtremata\natrematous\natremble\natrepsy\natreptic\natresia\natresic\natresy\natretic\natria\natrial\natrichia\natrichosis\natrichous\natrickle\nAtridean\natrienses\natriensis\natriocoelomic\natrioporal\natriopore\natrioventricular\natrip\nAtriplex\natrium\natrocha\natrochal\natrochous\natrocious\natrociously\natrociousness\natrocity\natrolactic\nAtropa\natropaceous\natropal\natropamine\natrophia\natrophiated\natrophic\natrophied\natrophoderma\natrophy\natropia\natropic\nAtropidae\natropine\natropinism\natropinization\natropinize\natropism\natropous\natrorubent\natrosanguineous\natroscine\natrous\natry\nAtrypa\nAtta\natta\nAttacapan\nattacco\nattach\nattachable\nattachableness\nattache\nattached\nattachedly\nattacher\nattacheship\nattachment\nattack\nattackable\nattacker\nattacolite\nAttacus\nattacus\nattagen\nattaghan\nattain\nattainability\nattainable\nattainableness\nattainder\nattainer\nattainment\nattaint\nattaintment\nattainture\nAttalea\nattaleh\nAttalid\nattar\nattargul\nattask\nattemper\nattemperament\nattemperance\nattemperate\nattemperately\nattemperation\nattemperator\nattempt\nattemptability\nattemptable\nattempter\nattemptless\nattend\nattendance\nattendancy\nattendant\nattendantly\nattender\nattendingly\nattendment\nattendress\nattensity\nattent\nattention\nattentional\nattentive\nattentively\nattentiveness\nattently\nattenuable\nattenuant\nattenuate\nattenuation\nattenuative\nattenuator\natter\nattercop\nattercrop\natterminal\nattermine\natterminement\nattern\nattery\nattest\nattestable\nattestant\nattestation\nattestative\nattestator\nattester\nattestive\nAttic\nattic\nAttical\nAtticism\natticism\nAtticist\nAtticize\natticize\natticomastoid\nattid\nAttidae\nattinge\nattingence\nattingency\nattingent\nattire\nattired\nattirement\nattirer\nattitude\nattitudinal\nattitudinarian\nattitudinarianism\nattitudinize\nattitudinizer\nAttiwendaronk\nattorn\nattorney\nattorneydom\nattorneyism\nattorneyship\nattornment\nattract\nattractability\nattractable\nattractableness\nattractant\nattracter\nattractile\nattractingly\nattraction\nattractionally\nattractive\nattractively\nattractiveness\nattractivity\nattractor\nattrahent\nattrap\nattributable\nattributal\nattribute\nattributer\nattribution\nattributive\nattributively\nattributiveness\nattrist\nattrite\nattrited\nattriteness\nattrition\nattritive\nattritus\nattune\nattunely\nattunement\nAtuami\natule\natumble\natune\natwain\natweel\natween\natwin\natwirl\natwist\natwitch\natwitter\natwixt\natwo\natypic\natypical\natypically\natypy\nauantic\naube\naubepine\nAubrey\nAubrietia\naubrietia\naubrite\nauburn\naubusson\nAuca\nauca\nAucan\nAucaner\nAucanian\nAuchenia\nauchenia\nauchenium\nauchlet\nauction\nauctionary\nauctioneer\nauctorial\nAucuba\naucuba\naucupate\naudacious\naudaciously\naudaciousness\naudacity\nAudaean\nAudian\nAudibertia\naudibility\naudible\naudibleness\naudibly\naudience\naudiencier\naudient\naudile\naudio\naudiogenic\naudiogram\naudiologist\naudiology\naudiometer\naudiometric\naudiometry\nAudion\naudion\naudiophile\naudiphone\naudit\naudition\nauditive\nauditor\nauditoria\nauditorial\nauditorially\nauditorily\nauditorium\nauditorship\nauditory\nauditress\nauditual\naudivise\naudiviser\naudivision\nAudrey\nAudubonistic\nAueto\nauganite\nauge\nAugean\naugelite\naugen\naugend\nauger\naugerer\naugh\naught\naughtlins\naugite\naugitic\naugitite\naugitophyre\naugment\naugmentable\naugmentation\naugmentationer\naugmentative\naugmentatively\naugmented\naugmentedly\naugmenter\naugmentive\naugur\naugural\naugurate\naugurial\naugurous\naugurship\naugury\nAugust\naugust\nAugusta\naugustal\nAugustan\nAugusti\nAugustin\nAugustinian\nAugustinianism\nAugustinism\naugustly\naugustness\nAugustus\nauh\nauhuhu\nAuk\nauk\nauklet\naula\naulacocarpous\nAulacodus\nAulacomniaceae\nAulacomnium\naulae\naularian\nauld\nauldfarrantlike\nauletai\naulete\nauletes\nauletic\nauletrides\nauletris\naulic\naulicism\nauloi\naulophyte\naulos\nAulostoma\nAulostomatidae\nAulostomi\naulostomid\nAulostomidae\nAulostomus\naulu\naum\naumaga\naumail\naumbry\naumery\naumil\naumildar\naumous\naumrie\nauncel\naune\nAunjetitz\naunt\naunthood\nauntie\nauntish\nauntlike\nauntly\nauntsary\nauntship\naupaka\naura\naurae\naural\naurally\nauramine\nAurantiaceae\naurantiaceous\nAurantium\naurantium\naurar\naurate\naurated\naureate\naureately\naureateness\naureation\naureity\nAurelia\naurelia\naurelian\nAurelius\nAureocasidium\naureola\naureole\naureolin\naureoline\naureomycin\naureous\naureously\nauresca\naureus\nauribromide\nauric\naurichalcite\naurichalcum\naurichloride\naurichlorohydric\nauricle\nauricled\nauricomous\nAuricula\nauricula\nauriculae\nauricular\nauriculare\nauriculares\nAuricularia\nauricularia\nAuriculariaceae\nauriculariae\nAuriculariales\nauricularian\nauricularis\nauricularly\nauriculate\nauriculated\nauriculately\nAuriculidae\nauriculocranial\nauriculoparietal\nauriculotemporal\nauriculoventricular\nauriculovertical\nauricyanhydric\nauricyanic\nauricyanide\nauride\nauriferous\naurific\naurification\nauriform\naurify\nAuriga\naurigal\naurigation\naurigerous\nAurigid\nAurignacian\naurilave\naurin\naurinasal\nauriphone\nauriphrygia\nauriphrygiate\nauripuncture\naurir\nauriscalp\nauriscalpia\nauriscalpium\nauriscope\nauriscopy\naurist\naurite\naurivorous\nauroauric\naurobromide\naurochloride\naurochs\naurocyanide\naurodiamine\nauronal\naurophobia\naurophore\naurora\naurorae\nauroral\naurorally\naurore\naurorean\nAurorian\naurorium\naurotellurite\naurothiosulphate\naurothiosulphuric\naurous\naurrescu\naurulent\naurum\naurure\nauryl\nAus\nauscult\nauscultascope\nauscultate\nauscultation\nauscultative\nauscultator\nauscultatory\nAuscultoscope\nauscultoscope\nAushar\nauslaut\nauslaute\nAusones\nAusonian\nauspex\nauspicate\nauspice\nauspices\nauspicial\nauspicious\nauspiciously\nauspiciousness\nauspicy\nAussie\nAustafrican\naustenite\naustenitic\nAuster\naustere\nausterely\naustereness\nausterity\nAusterlitz\nAustin\nAustral\naustral\nAustralasian\naustralene\nAustralia\nAustralian\nAustralianism\nAustralianize\nAustralic\nAustralioid\naustralite\nAustraloid\nAustralopithecinae\naustralopithecine\nAustralopithecus\nAustralorp\nAustrasian\nAustrian\nAustrianize\nAustric\naustrium\nAustroasiatic\nAustrogaea\nAustrogaean\naustromancy\nAustronesian\nAustrophil\nAustrophile\nAustrophilism\nAustroriparian\nausu\nausubo\nautacoid\nautacoidal\nautallotriomorphic\nautantitypy\nautarch\nautarchic\nautarchical\nAutarchoglossa\nautarchy\nautarkic\nautarkical\nautarkist\nautarky\naute\nautechoscope\nautecious\nauteciously\nauteciousness\nautecism\nautecologic\nautecological\nautecologically\nautecologist\nautecology\nautecy\nautem\nauthentic\nauthentical\nauthentically\nauthenticalness\nauthenticate\nauthentication\nauthenticator\nauthenticity\nauthenticly\nauthenticness\nauthigene\nauthigenetic\nauthigenic\nauthigenous\nauthor\nauthorcraft\nauthoress\nauthorhood\nauthorial\nauthorially\nauthorish\nauthorism\nauthoritarian\nauthoritarianism\nauthoritative\nauthoritatively\nauthoritativeness\nauthority\nauthorizable\nauthorization\nauthorize\nauthorized\nauthorizer\nauthorless\nauthorling\nauthorly\nauthorship\nauthotype\nautism\nautist\nautistic\nauto\nautoabstract\nautoactivation\nautoactive\nautoaddress\nautoagglutinating\nautoagglutination\nautoagglutinin\nautoalarm\nautoalkylation\nautoallogamous\nautoallogamy\nautoanalysis\nautoanalytic\nautoantibody\nautoanticomplement\nautoantitoxin\nautoasphyxiation\nautoaspiration\nautoassimilation\nautobahn\nautobasidia\nAutobasidiomycetes\nautobasidiomycetous\nautobasidium\nAutobasisii\nautobiographal\nautobiographer\nautobiographic\nautobiographical\nautobiographically\nautobiographist\nautobiography\nautobiology\nautoblast\nautoboat\nautoboating\nautobolide\nautobus\nautocab\nautocade\nautocall\nautocamp\nautocamper\nautocamping\nautocar\nautocarist\nautocarpian\nautocarpic\nautocarpous\nautocatalepsy\nautocatalysis\nautocatalytic\nautocatalytically\nautocatalyze\nautocatheterism\nautocephalia\nautocephality\nautocephalous\nautocephaly\nautoceptive\nautochemical\nautocholecystectomy\nautochrome\nautochromy\nautochronograph\nautochthon\nautochthonal\nautochthonic\nautochthonism\nautochthonous\nautochthonously\nautochthonousness\nautochthony\nautocide\nautocinesis\nautoclasis\nautoclastic\nautoclave\nautocoenobium\nautocoherer\nautocoid\nautocollimation\nautocollimator\nautocolony\nautocombustible\nautocombustion\nautocomplexes\nautocondensation\nautoconduction\nautoconvection\nautoconverter\nautocopist\nautocoprophagous\nautocorrosion\nautocracy\nautocrat\nautocratic\nautocratical\nautocratically\nautocrator\nautocratoric\nautocratorical\nautocratrix\nautocratship\nautocremation\nautocriticism\nautocystoplasty\nautocytolysis\nautocytolytic\nautodecomposition\nautodepolymerization\nautodermic\nautodestruction\nautodetector\nautodiagnosis\nautodiagnostic\nautodiagrammatic\nautodidact\nautodidactic\nautodifferentiation\nautodiffusion\nautodigestion\nautodigestive\nautodrainage\nautodrome\nautodynamic\nautodyne\nautoecholalia\nautoecic\nautoecious\nautoeciously\nautoeciousness\nautoecism\nautoecous\nautoecy\nautoeducation\nautoeducative\nautoelectrolysis\nautoelectrolytic\nautoelectronic\nautoelevation\nautoepigraph\nautoepilation\nautoerotic\nautoerotically\nautoeroticism\nautoerotism\nautoexcitation\nautofecundation\nautofermentation\nautoformation\nautofrettage\nautogamic\nautogamous\nautogamy\nautogauge\nautogeneal\nautogenesis\nautogenetic\nautogenetically\nautogenic\nautogenous\nautogenously\nautogeny\nAutogiro\nautogiro\nautognosis\nautognostic\nautograft\nautografting\nautogram\nautograph\nautographal\nautographer\nautographic\nautographical\nautographically\nautographism\nautographist\nautographometer\nautography\nautogravure\nAutoharp\nautoharp\nautoheader\nautohemic\nautohemolysin\nautohemolysis\nautohemolytic\nautohemorrhage\nautohemotherapy\nautoheterodyne\nautoheterosis\nautohexaploid\nautohybridization\nautohypnosis\nautohypnotic\nautohypnotism\nautohypnotization\nautoicous\nautoignition\nautoimmunity\nautoimmunization\nautoinduction\nautoinductive\nautoinfection\nautoinfusion\nautoinhibited\nautoinoculable\nautoinoculation\nautointellectual\nautointoxicant\nautointoxication\nautoirrigation\nautoist\nautojigger\nautojuggernaut\nautokinesis\nautokinetic\nautokrator\nautolaryngoscope\nautolaryngoscopic\nautolaryngoscopy\nautolater\nautolatry\nautolavage\nautolesion\nautolimnetic\nautolith\nautoloading\nautological\nautologist\nautologous\nautology\nautoluminescence\nautoluminescent\nautolysate\nautolysin\nautolysis\nautolytic\nAutolytus\nautolyzate\nautolyze\nautoma\nautomacy\nautomanual\nautomat\nautomata\nautomatic\nautomatical\nautomatically\nautomaticity\nautomatin\nautomatism\nautomatist\nautomatization\nautomatize\nautomatograph\nautomaton\nautomatonlike\nautomatous\nautomechanical\nautomelon\nautometamorphosis\nautometric\nautometry\nautomobile\nautomobilism\nautomobilist\nautomobilistic\nautomobility\nautomolite\nautomonstration\nautomorph\nautomorphic\nautomorphically\nautomorphism\nautomotive\nautomotor\nautomower\nautomysophobia\nautonegation\nautonephrectomy\nautonephrotoxin\nautoneurotoxin\nautonitridation\nautonoetic\nautonomasy\nautonomic\nautonomical\nautonomically\nautonomist\nautonomize\nautonomous\nautonomously\nautonomy\nautonym\nautoparasitism\nautopathic\nautopathography\nautopathy\nautopelagic\nautopepsia\nautophagi\nautophagia\nautophagous\nautophagy\nautophobia\nautophoby\nautophon\nautophone\nautophonoscope\nautophonous\nautophony\nautophotoelectric\nautophotograph\nautophotometry\nautophthalmoscope\nautophyllogeny\nautophyte\nautophytic\nautophytically\nautophytograph\nautophytography\nautopilot\nautoplagiarism\nautoplasmotherapy\nautoplast\nautoplastic\nautoplasty\nautopneumatic\nautopoint\nautopoisonous\nautopolar\nautopolo\nautopoloist\nautopolyploid\nautopore\nautoportrait\nautoportraiture\nautopositive\nautopotent\nautoprogressive\nautoproteolysis\nautoprothesis\nautopsic\nautopsical\nautopsy\nautopsychic\nautopsychoanalysis\nautopsychology\nautopsychorhythmia\nautopsychosis\nautoptic\nautoptical\nautoptically\nautopticity\nautopyotherapy\nautoracemization\nautoradiograph\nautoradiographic\nautoradiography\nautoreduction\nautoregenerator\nautoregulation\nautoreinfusion\nautoretardation\nautorhythmic\nautorhythmus\nautoriser\nautorotation\nautorrhaphy\nAutosauri\nAutosauria\nautoschediasm\nautoschediastic\nautoschediastical\nautoschediastically\nautoschediaze\nautoscience\nautoscope\nautoscopic\nautoscopy\nautosender\nautosensitization\nautosensitized\nautosepticemia\nautoserotherapy\nautoserum\nautosexing\nautosight\nautosign\nautosite\nautositic\nautoskeleton\nautosled\nautoslip\nautosomal\nautosomatognosis\nautosomatognostic\nautosome\nautosoteric\nautosoterism\nautospore\nautosporic\nautospray\nautostability\nautostage\nautostandardization\nautostarter\nautostethoscope\nautostylic\nautostylism\nautostyly\nautosuggestibility\nautosuggestible\nautosuggestion\nautosuggestionist\nautosuggestive\nautosuppression\nautosymbiontic\nautosymbolic\nautosymbolical\nautosymbolically\nautosymnoia\nAutosyn\nautosyndesis\nautotelegraph\nautotelic\nautotetraploid\nautotetraploidy\nautothaumaturgist\nautotheater\nautotheism\nautotheist\nautotherapeutic\nautotherapy\nautothermy\nautotomic\nautotomize\nautotomous\nautotomy\nautotoxaemia\nautotoxic\nautotoxication\nautotoxicity\nautotoxicosis\nautotoxin\nautotoxis\nautotractor\nautotransformer\nautotransfusion\nautotransplant\nautotransplantation\nautotrepanation\nautotriploid\nautotriploidy\nautotroph\nautotrophic\nautotrophy\nautotropic\nautotropically\nautotropism\nautotruck\nautotuberculin\nautoturning\nautotype\nautotyphization\nautotypic\nautotypography\nautotypy\nautourine\nautovaccination\nautovaccine\nautovalet\nautovalve\nautovivisection\nautoxeny\nautoxidation\nautoxidator\nautoxidizability\nautoxidizable\nautoxidize\nautoxidizer\nautozooid\nautrefois\nautumn\nautumnal\nautumnally\nautumnian\nautumnity\nAutunian\nautunite\nauxamylase\nauxanogram\nauxanology\nauxanometer\nauxesis\nauxetic\nauxetical\nauxetically\nauxiliar\nauxiliarly\nauxiliary\nauxiliate\nauxiliation\nauxiliator\nauxiliatory\nauxilium\nauximone\nauxin\nauxinic\nauxinically\nauxoaction\nauxoamylase\nauxoblast\nauxobody\nauxocardia\nauxochrome\nauxochromic\nauxochromism\nauxochromous\nauxocyte\nauxoflore\nauxofluor\nauxograph\nauxographic\nauxohormone\nauxology\nauxometer\nauxospore\nauxosubstance\nauxotonic\nauxotox\nava\navadana\navadavat\navadhuta\navahi\navail\navailability\navailable\navailableness\navailably\navailingly\navailment\naval\navalanche\navalent\navalvular\nAvanguardisti\navania\navanious\nAvanti\navanturine\nAvar\nAvaradrano\navaremotemo\nAvarian\navarice\navaricious\navariciously\navariciousness\nAvarish\nAvars\navascular\navast\navaunt\nAve\nave\navellan\navellane\navellaneous\navellano\navelonge\naveloz\nAvena\navenaceous\navenage\navenalin\navener\navenge\navengeful\navengement\navenger\navengeress\navenging\navengingly\navenin\navenolith\navenous\navens\naventail\nAventine\naventurine\navenue\naver\navera\naverage\naveragely\naverager\naverah\naveril\naverin\naverment\nAvernal\nAvernus\naverrable\naverral\nAverrhoa\nAverroism\nAverroist\nAverroistic\naverruncate\naverruncation\naverruncator\naversant\naversation\naverse\naversely\naverseness\naversion\naversive\navert\navertable\naverted\navertedly\naverter\navertible\nAvertin\nAvery\nAves\nAvesta\nAvestan\navian\navianization\navianize\naviarist\naviary\naviate\naviatic\naviation\naviator\naviatorial\naviatoriality\naviatory\naviatress\naviatrices\naviatrix\nAvicennia\nAvicenniaceae\nAvicennism\navichi\navicide\navick\navicolous\nAvicula\navicular\nAvicularia\navicularia\navicularian\nAviculariidae\nAvicularimorphae\navicularium\nAviculidae\naviculture\naviculturist\navid\navidious\navidiously\navidity\navidly\navidous\navidya\navifauna\navifaunal\navigate\navigation\navigator\nAvignonese\navijja\nAvikom\navine\naviolite\navirulence\navirulent\nAvis\naviso\navital\navitaminosis\navitaminotic\navitic\navives\navizandum\navo\navocado\navocate\navocation\navocative\navocatory\navocet\navodire\navogadrite\navoid\navoidable\navoidably\navoidance\navoider\navoidless\navoidment\navoirdupois\navolate\navolation\navolitional\navondbloem\navouch\navouchable\navoucher\navouchment\navourneen\navow\navowable\navowableness\navowably\navowal\navowance\navowant\navowed\navowedly\navowedness\navower\navowry\navoyer\navoyership\nAvshar\navulse\navulsion\navuncular\navunculate\naw\nawa\nAwabakal\nawabi\nAwadhi\nawaft\nawag\nawait\nawaiter\nAwaitlala\nawakable\nawake\nawaken\nawakenable\nawakener\nawakening\nawakeningly\nawakenment\nawald\nawalim\nawalt\nAwan\nawane\nawanting\nawapuhi\naward\nawardable\nawarder\nawardment\naware\nawaredom\nawareness\nawaruite\nawash\nawaste\nawat\nawatch\nawater\nawave\naway\nawayness\nawber\nawd\nawe\nawearied\naweary\naweather\naweband\nawedness\nawee\naweek\naweel\naweigh\nAwellimiden\nawesome\nawesomely\nawesomeness\nawest\naweto\nawfu\nawful\nawfully\nawfulness\nawheel\nawheft\nawhet\nawhile\nawhir\nawhirl\nawide\nawiggle\nawikiwiki\nawin\nawing\nawink\nawiwi\nawkward\nawkwardish\nawkwardly\nawkwardness\nawl\nawless\nawlessness\nawlwort\nawmous\nawn\nawned\nawner\nawning\nawninged\nawnless\nawnlike\nawny\nawoke\nAwol\nawork\nawreck\nawrist\nawrong\nawry\nAwshar\nax\naxal\naxbreaker\naxe\naxed\nAxel\naxenic\naxes\naxfetch\naxhammer\naxhammered\naxhead\naxial\naxiality\naxially\naxiate\naxiation\nAxifera\naxiform\naxifugal\naxil\naxile\naxilemma\naxilemmata\naxilla\naxillae\naxillant\naxillar\naxillary\naxine\naxinite\naxinomancy\naxiolite\naxiolitic\naxiological\naxiologically\naxiologist\naxiology\naxiom\naxiomatic\naxiomatical\naxiomatically\naxiomatization\naxiomatize\naxion\naxiopisty\nAxis\naxis\naxised\naxisymmetric\naxisymmetrical\naxite\naxle\naxled\naxlesmith\naxletree\naxmaker\naxmaking\naxman\naxmanship\naxmaster\nAxminster\naxodendrite\naxofugal\naxogamy\naxoid\naxoidean\naxolemma\naxolotl\naxolysis\naxometer\naxometric\naxometry\naxon\naxonal\naxoneure\naxoneuron\nAxonia\nAxonolipa\naxonolipous\naxonometric\naxonometry\nAxonophora\naxonophorous\nAxonopus\naxonost\naxopetal\naxophyte\naxoplasm\naxopodia\naxopodium\naxospermous\naxostyle\naxseed\naxstone\naxtree\nAxumite\naxunge\naxweed\naxwise\naxwort\nAy\nay\nayacahuite\nayah\nAyahuca\nAydendron\naye\nayegreen\nayelp\nayenbite\nayin\nAylesbury\nayless\naylet\nayllu\nAymara\nAymaran\nAymoro\nayond\nayont\nayous\nAyrshire\nAythya\nayu\nAyubite\nAyyubid\nazadrachta\nazafrin\nAzalea\nazalea\nAzande\nazarole\nazedarach\nazelaic\nazelate\nAzelfafage\nazeotrope\nazeotropic\nazeotropism\nazeotropy\nAzerbaijanese\nAzerbaijani\nAzerbaijanian\nAzha\nazide\naziethane\nAzilian\nazilut\nAzimech\nazimene\nazimethylene\nazimide\nazimine\nazimino\naziminobenzene\nazimuth\nazimuthal\nazimuthally\nazine\naziola\nazlactone\nazo\nazobacter\nazobenzene\nazobenzil\nazobenzoic\nazobenzol\nazoblack\nazoch\nazocochineal\nazocoralline\nazocorinth\nazocyanide\nazocyclic\nazodicarboxylic\nazodiphenyl\nazodisulphonic\nazoeosin\nazoerythrin\nazofication\nazofier\nazoflavine\nazoformamide\nazoformic\nazofy\nazogallein\nazogreen\nazogrenadine\nazohumic\nazoic\nazoimide\nazoisobutyronitrile\nazole\nazolitmin\nAzolla\nazomethine\nazon\nazonal\nazonaphthalene\nazonic\nazonium\nazoospermia\nazoparaffin\nazophen\nazophenetole\nazophenine\nazophenol\nazophenyl\nazophenylene\nazophosphin\nazophosphore\nazoprotein\nAzorian\nazorite\nazorubine\nazosulphine\nazosulphonic\nazotate\nazote\nazoted\nazotemia\nazotenesis\nazotetrazole\nazoth\nazothionium\nazotic\nazotine\nazotite\nazotize\nAzotobacter\nAzotobacterieae\nazotoluene\nazotometer\nazotorrhoea\nazotous\nazoturia\nazovernine\nazox\nazoxazole\nazoxime\nazoxine\nazoxonium\nazoxy\nazoxyanisole\nazoxybenzene\nazoxybenzoic\nazoxynaphthalene\nazoxyphenetole\nazoxytoluidine\nAztec\nAzteca\nazteca\nAztecan\nazthionium\nazulene\nazulite\nazulmic\nazumbre\nazure\nazurean\nazured\nazureous\nazurine\nazurite\nazurmalachite\nazurous\nazury\nAzygobranchia\nAzygobranchiata\nazygobranchiate\nazygomatous\nazygos\nazygosperm\nazygospore\nazygous\nazyme\nazymite\nazymous\nB\nb\nba\nbaa\nbaahling\nBaal\nbaal\nBaalath\nBaalish\nBaalism\nBaalist\nBaalite\nBaalitical\nBaalize\nBaalshem\nbaar\nBab\nbaba\nbabacoote\nbabai\nbabasco\nbabassu\nbabaylan\nBabbie\nBabbitt\nbabbitt\nbabbitter\nBabbittess\nBabbittian\nBabbittism\nBabbittry\nbabblative\nbabble\nbabblement\nbabbler\nbabblesome\nbabbling\nbabblingly\nbabblish\nbabblishly\nbabbly\nbabby\nBabcock\nbabe\nbabehood\nBabel\nBabeldom\nbabelet\nBabelic\nbabelike\nBabelish\nBabelism\nBabelize\nbabery\nbabeship\nBabesia\nbabesiasis\nBabhan\nBabi\nBabiana\nbabiche\nbabied\nBabiism\nbabillard\nBabine\nbabingtonite\nbabirusa\nbabish\nbabished\nbabishly\nbabishness\nBabism\nBabist\nBabite\nbablah\nbabloh\nbaboen\nBabongo\nbaboo\nbaboodom\nbabooism\nbaboon\nbaboonery\nbaboonish\nbaboonroot\nbaboot\nbabouche\nBabouvism\nBabouvist\nbabroot\nBabs\nbabu\nBabua\nbabudom\nbabuina\nbabuism\nbabul\nBabuma\nBabungera\nbabushka\nbaby\nbabydom\nbabyfied\nbabyhood\nbabyhouse\nbabyish\nbabyishly\nbabyishness\nbabyism\nbabylike\nBabylon\nBabylonian\nBabylonic\nBabylonish\nBabylonism\nBabylonite\nBabylonize\nbabyolatry\nbabyship\nbac\nbacaba\nbacach\nbacalao\nbacao\nbacbakiri\nbacca\nbaccaceous\nbaccae\nbaccalaurean\nbaccalaureate\nbaccara\nbaccarat\nbaccate\nbaccated\nBacchae\nbacchanal\nBacchanalia\nbacchanalian\nbacchanalianism\nbacchanalianly\nbacchanalism\nbacchanalization\nbacchanalize\nbacchant\nbacchante\nbacchantes\nbacchantic\nbacchar\nbaccharis\nbaccharoid\nbaccheion\nbacchiac\nbacchian\nBacchic\nbacchic\nBacchical\nBacchides\nbacchii\nbacchius\nBacchus\nBacchuslike\nbacciferous\nbacciform\nbaccivorous\nbach\nBacharach\nbache\nbachel\nbachelor\nbachelordom\nbachelorhood\nbachelorism\nbachelorize\nbachelorlike\nbachelorly\nbachelorship\nbachelorwise\nbachelry\nBachichi\nBacillaceae\nbacillar\nBacillariaceae\nbacillariaceous\nBacillariales\nBacillarieae\nBacillariophyta\nbacillary\nbacillemia\nbacilli\nbacillian\nbacillicidal\nbacillicide\nbacillicidic\nbacilliculture\nbacilliform\nbacilligenic\nbacilliparous\nbacillite\nbacillogenic\nbacillogenous\nbacillophobia\nbacillosis\nbacilluria\nbacillus\nBacis\nbacitracin\nback\nbackache\nbackaching\nbackachy\nbackage\nbackband\nbackbearing\nbackbencher\nbackbite\nbackbiter\nbackbitingly\nbackblow\nbackboard\nbackbone\nbackboned\nbackboneless\nbackbonelessness\nbackbrand\nbackbreaker\nbackbreaking\nbackcap\nbackcast\nbackchain\nbackchat\nbackcourt\nbackcross\nbackdoor\nbackdown\nbackdrop\nbacked\nbacken\nbacker\nbacket\nbackfall\nbackfatter\nbackfield\nbackfill\nbackfiller\nbackfilling\nbackfire\nbackfiring\nbackflap\nbackflash\nbackflow\nbackfold\nbackframe\nbackfriend\nbackfurrow\nbackgame\nbackgammon\nbackground\nbackhand\nbackhanded\nbackhandedly\nbackhandedness\nbackhander\nbackhatch\nbackheel\nbackhooker\nbackhouse\nbackie\nbackiebird\nbacking\nbackjaw\nbackjoint\nbacklands\nbacklash\nbacklashing\nbackless\nbacklet\nbacklings\nbacklog\nbacklotter\nbackmost\nbackpedal\nbackpiece\nbackplate\nbackrope\nbackrun\nbacksaw\nbackscraper\nbackset\nbacksetting\nbacksettler\nbackshift\nbackside\nbacksight\nbackslap\nbackslapper\nbackslapping\nbackslide\nbackslider\nbackslidingness\nbackspace\nbackspacer\nbackspang\nbackspier\nbackspierer\nbackspin\nbackspread\nbackspringing\nbackstaff\nbackstage\nbackstamp\nbackstay\nbackster\nbackstick\nbackstitch\nbackstone\nbackstop\nbackstrap\nbackstretch\nbackstring\nbackstrip\nbackstroke\nbackstromite\nbackswept\nbackswing\nbacksword\nbackswording\nbackswordman\nbackswordsman\nbacktack\nbacktender\nbacktenter\nbacktrack\nbacktracker\nbacktrick\nbackup\nbackveld\nbackvelder\nbackwall\nbackward\nbackwardation\nbackwardly\nbackwardness\nbackwards\nbackwash\nbackwasher\nbackwashing\nbackwater\nbackwatered\nbackway\nbackwood\nbackwoods\nbackwoodsiness\nbackwoodsman\nbackwoodsy\nbackword\nbackworm\nbackwort\nbackyarder\nbaclin\nbacon\nbaconer\nBaconian\nBaconianism\nBaconic\nBaconism\nBaconist\nbaconize\nbaconweed\nbacony\nBacopa\nbacteremia\nbacteria\nBacteriaceae\nbacteriaceous\nbacterial\nbacterially\nbacterian\nbacteric\nbactericholia\nbactericidal\nbactericide\nbactericidin\nbacterid\nbacteriemia\nbacteriform\nbacterin\nbacterioagglutinin\nbacterioblast\nbacteriocyte\nbacteriodiagnosis\nbacteriofluorescin\nbacteriogenic\nbacteriogenous\nbacteriohemolysin\nbacterioid\nbacterioidal\nbacteriologic\nbacteriological\nbacteriologically\nbacteriologist\nbacteriology\nbacteriolysin\nbacteriolysis\nbacteriolytic\nbacteriolyze\nbacteriopathology\nbacteriophage\nbacteriophagia\nbacteriophagic\nbacteriophagous\nbacteriophagy\nbacteriophobia\nbacterioprecipitin\nbacterioprotein\nbacteriopsonic\nbacteriopsonin\nbacteriopurpurin\nbacterioscopic\nbacterioscopical\nbacterioscopically\nbacterioscopist\nbacterioscopy\nbacteriosis\nbacteriosolvent\nbacteriostasis\nbacteriostat\nbacteriostatic\nbacteriotherapeutic\nbacteriotherapy\nbacteriotoxic\nbacteriotoxin\nbacteriotropic\nbacteriotropin\nbacteriotrypsin\nbacterious\nbacteritic\nbacterium\nbacteriuria\nbacterization\nbacterize\nbacteroid\nbacteroidal\nBacteroideae\nBacteroides\nBactrian\nBactris\nBactrites\nbactriticone\nbactritoid\nbacula\nbacule\nbaculi\nbaculiferous\nbaculiform\nbaculine\nbaculite\nBaculites\nbaculitic\nbaculiticone\nbaculoid\nbaculum\nbaculus\nbacury\nbad\nBadaga\nbadan\nBadarian\nbadarrah\nBadawi\nbaddeleyite\nbadderlocks\nbaddish\nbaddishly\nbaddishness\nbaddock\nbade\nbadenite\nbadge\nbadgeless\nbadgeman\nbadger\nbadgerbrush\nbadgerer\nbadgeringly\nbadgerlike\nbadgerly\nbadgerweed\nbadiaga\nbadian\nbadigeon\nbadinage\nbadious\nbadland\nbadlands\nbadly\nbadminton\nbadness\nBadon\nBaduhenna\nbae\nBaedeker\nBaedekerian\nBaeria\nbaetuli\nbaetulus\nbaetyl\nbaetylic\nbaetylus\nbaetzner\nbafaro\nbaff\nbaffeta\nbaffle\nbafflement\nbaffler\nbaffling\nbafflingly\nbafflingness\nbaffy\nbaft\nbafta\nBafyot\nbag\nbaga\nBaganda\nbagani\nbagasse\nbagataway\nbagatelle\nbagatine\nbagattini\nbagattino\nBagaudae\nBagdad\nBagdi\nbagel\nbagful\nbaggage\nbaggageman\nbaggagemaster\nbaggager\nbaggala\nbagganet\nBaggara\nbagged\nbagger\nbaggie\nbaggily\nbagginess\nbagging\nbaggit\nbaggy\nBagheli\nbaghouse\nBaginda\nBagirmi\nbagleaves\nbaglike\nbagmaker\nbagmaking\nbagman\nbagnio\nbagnut\nbago\nBagobo\nbagonet\nbagpipe\nbagpiper\nbagpipes\nbagplant\nbagrationite\nbagre\nbagreef\nbagroom\nbaguette\nbagwig\nbagwigged\nbagworm\nbagwyn\nbah\nBahai\nBahaism\nBahaist\nBaham\nBahama\nBahamian\nbahan\nbahar\nBahaullah\nbahawder\nbahay\nbahera\nbahiaite\nBahima\nbahisti\nBahmani\nBahmanid\nbahnung\nbaho\nbahoe\nbahoo\nbaht\nBahuma\nbahur\nbahut\nBahutu\nbahuvrihi\nBaianism\nbaidarka\nBaidya\nBaiera\nbaiginet\nbaignet\nbaikalite\nbaikerinite\nbaikerite\nbaikie\nbail\nbailable\nbailage\nbailee\nbailer\nbailey\nbailie\nbailiery\nbailieship\nbailiff\nbailiffry\nbailiffship\nbailiwick\nbailliage\nbaillone\nBaillonella\nbailment\nbailor\nbailpiece\nbailsman\nbailwood\nbain\nbainie\nBaining\nbaioc\nbaiocchi\nbaiocco\nbairagi\nBairam\nbairn\nbairnie\nbairnish\nbairnishness\nbairnliness\nbairnly\nbairnteam\nbairntime\nbairnwort\nBais\nBaisakh\nbaister\nbait\nbaiter\nbaith\nbaittle\nbaitylos\nbaize\nbajada\nbajan\nBajardo\nbajarigar\nBajau\nBajocian\nbajra\nbajree\nbajri\nbajury\nbaka\nBakairi\nbakal\nBakalai\nBakalei\nBakatan\nbake\nbakeboard\nbaked\nbakehouse\nBakelite\nbakelite\nbakelize\nbaken\nbakeoven\nbakepan\nbaker\nbakerdom\nbakeress\nbakerite\nbakerless\nbakerly\nbakership\nbakery\nbakeshop\nbakestone\nBakhtiari\nbakie\nbaking\nbakingly\nbakli\nBakongo\nBakshaish\nbaksheesh\nbaktun\nBaku\nbaku\nBakuba\nbakula\nBakunda\nBakuninism\nBakuninist\nbakupari\nBakutu\nBakwiri\nBal\nbal\nBala\nBalaam\nBalaamite\nBalaamitical\nbalachong\nbalaclava\nbaladine\nBalaena\nBalaenicipites\nbalaenid\nBalaenidae\nbalaenoid\nBalaenoidea\nbalaenoidean\nBalaenoptera\nBalaenopteridae\nbalafo\nbalagan\nbalaghat\nbalai\nBalaic\nBalak\nBalaklava\nbalalaika\nBalan\nbalance\nbalanceable\nbalanced\nbalancedness\nbalancelle\nbalanceman\nbalancement\nbalancer\nbalancewise\nbalancing\nbalander\nbalandra\nbalandrana\nbalaneutics\nbalangay\nbalanic\nbalanid\nBalanidae\nbalaniferous\nbalanism\nbalanite\nBalanites\nbalanitis\nbalanoblennorrhea\nbalanocele\nBalanoglossida\nBalanoglossus\nbalanoid\nBalanophora\nBalanophoraceae\nbalanophoraceous\nbalanophore\nbalanophorin\nbalanoplasty\nbalanoposthitis\nbalanopreputial\nBalanops\nBalanopsidaceae\nBalanopsidales\nbalanorrhagia\nBalanta\nBalante\nbalantidial\nbalantidiasis\nbalantidic\nbalantidiosis\nBalantidium\nBalanus\nBalao\nbalao\nBalarama\nbalas\nbalata\nbalatong\nbalatron\nbalatronic\nbalausta\nbalaustine\nbalaustre\nBalawa\nBalawu\nbalboa\nbalbriggan\nbalbutiate\nbalbutient\nbalbuties\nbalconet\nbalconied\nbalcony\nbald\nbaldachin\nbaldachined\nbaldachini\nbaldachino\nbaldberry\nbaldcrown\nbalden\nbalder\nbalderdash\nbaldhead\nbaldicoot\nBaldie\nbaldish\nbaldling\nbaldly\nbaldmoney\nbaldness\nbaldpate\nbaldrib\nbaldric\nbaldricked\nbaldricwise\nbalductum\nBaldwin\nbaldy\nbale\nBalearian\nBalearic\nBalearica\nbaleen\nbalefire\nbaleful\nbalefully\nbalefulness\nbalei\nbaleise\nbaleless\nbaler\nbalete\nBali\nbali\nbalibago\nBalija\nBalilla\nbaline\nBalinese\nbalinger\nbalinghasay\nbalisaur\nbalistarius\nBalistes\nbalistid\nBalistidae\nbalistraria\nbalita\nbalk\nBalkan\nBalkanic\nBalkanization\nBalkanize\nBalkar\nbalker\nbalkingly\nBalkis\nbalky\nball\nballad\nballade\nballadeer\nballader\nballaderoyal\nballadic\nballadical\nballadier\nballadism\nballadist\nballadize\nballadlike\nballadling\nballadmonger\nballadmongering\nballadry\nballadwise\nballahoo\nballam\nballan\nballant\nballast\nballastage\nballaster\nballasting\nballata\nballate\nballatoon\nballdom\nballed\nballer\nballerina\nballet\nballetic\nballetomane\nBallhausplatz\nballi\nballist\nballista\nballistae\nballistic\nballistically\nballistician\nballistics\nBallistite\nballistocardiograph\nballium\nballmine\nballogan\nballonet\nballoon\nballoonation\nballooner\nballoonery\nballoonet\nballoonfish\nballoonflower\nballoonful\nballooning\nballoonish\nballoonist\nballoonlike\nballot\nBallota\nballotade\nballotage\nballoter\nballoting\nballotist\nballottement\nballow\nBallplatz\nballplayer\nballproof\nballroom\nballstock\nballup\nballweed\nbally\nballyhack\nballyhoo\nballyhooer\nballywack\nballywrack\nbalm\nbalmacaan\nBalmarcodes\nBalmawhapple\nbalmily\nbalminess\nbalmlike\nbalmony\nBalmoral\nbalmy\nbalneal\nbalneary\nbalneation\nbalneatory\nbalneographer\nbalneography\nbalneologic\nbalneological\nbalneologist\nbalneology\nbalneophysiology\nbalneotechnics\nbalneotherapeutics\nbalneotherapia\nbalneotherapy\nBalnibarbi\nBaloch\nBaloghia\nBalolo\nbalonea\nbaloney\nbaloo\nBalopticon\nBalor\nBaloskion\nBaloskionaceae\nbalow\nbalsa\nbalsam\nbalsamation\nBalsamea\nBalsameaceae\nbalsameaceous\nbalsamer\nbalsamic\nbalsamical\nbalsamically\nbalsamiferous\nbalsamina\nBalsaminaceae\nbalsaminaceous\nbalsamine\nbalsamitic\nbalsamiticness\nbalsamize\nbalsamo\nBalsamodendron\nBalsamorrhiza\nbalsamous\nbalsamroot\nbalsamum\nbalsamweed\nbalsamy\nBalt\nbaltei\nbalter\nbalteus\nBalthasar\nBalti\nBaltic\nBaltimore\nBaltimorean\nbaltimorite\nBaltis\nbalu\nBaluba\nBaluch\nBaluchi\nBaluchistan\nbaluchithere\nbaluchitheria\nBaluchitherium\nbaluchitherium\nBaluga\nBalunda\nbalushai\nbaluster\nbalustered\nbalustrade\nbalustraded\nbalustrading\nbalut\nbalwarra\nbalza\nBalzacian\nbalzarine\nbam\nBamalip\nBamangwato\nbamban\nBambara\nbambini\nbambino\nbambocciade\nbamboo\nbamboozle\nbamboozlement\nbamboozler\nBambos\nbamboula\nBambuba\nBambusa\nBambuseae\nBambute\nbamoth\nBan\nban\nBana\nbanaba\nbanago\nbanak\nbanakite\nbanal\nbanality\nbanally\nbanana\nBananaland\nBananalander\nBanande\nbananist\nbananivorous\nbanat\nBanate\nbanatite\nbanausic\nBanba\nBanbury\nbanc\nbanca\nbancal\nbanchi\nbanco\nbancus\nband\nBanda\nbanda\nbandage\nbandager\nbandagist\nbandaite\nbandaka\nbandala\nbandalore\nbandanna\nbandannaed\nbandar\nbandarlog\nbandbox\nbandboxical\nbandboxy\nbandcase\nbandcutter\nbande\nbandeau\nbanded\nbandelet\nbander\nBanderma\nbanderole\nbandersnatch\nbandfish\nbandhava\nbandhook\nBandhor\nbandhu\nbandi\nbandicoot\nbandicoy\nbandie\nbandikai\nbandiness\nbanding\nbandit\nbanditism\nbanditry\nbanditti\nbandle\nbandless\nbandlessly\nbandlessness\nbandlet\nbandman\nbandmaster\nbando\nbandog\nbandoleer\nbandoleered\nbandoline\nbandonion\nBandor\nbandore\nbandrol\nbandsman\nbandstand\nbandster\nbandstring\nBandusia\nBandusian\nbandwork\nbandy\nbandyball\nbandyman\nbane\nbaneberry\nbaneful\nbanefully\nbanefulness\nbanewort\nBanff\nbang\nbanga\nBangala\nbangalay\nbangalow\nBangash\nbangboard\nbange\nbanger\nbanghy\nBangia\nBangiaceae\nbangiaceous\nBangiales\nbanging\nbangkok\nbangle\nbangled\nbangling\nbangster\nbangtail\nBangwaketsi\nbani\nbanian\nbanig\nbanilad\nbanish\nbanisher\nbanishment\nbanister\nBaniva\nbaniwa\nbaniya\nbanjo\nbanjoist\nbanjore\nbanjorine\nbanjuke\nbank\nbankable\nBankalachi\nbankbook\nbanked\nbanker\nbankera\nbankerdom\nbankeress\nbanket\nbankfull\nbanking\nbankman\nbankrider\nbankrupt\nbankruptcy\nbankruptism\nbankruptlike\nbankruptly\nbankruptship\nbankrupture\nbankshall\nBanksia\nBanksian\nbankside\nbanksman\nbankweed\nbanky\nbanner\nbannered\nbannerer\nbanneret\nbannerfish\nbannerless\nbannerlike\nbannerman\nbannerol\nbannerwise\nbannet\nbanning\nbannister\nBannock\nbannock\nBannockburn\nbanns\nbannut\nbanovina\nbanquet\nbanqueteer\nbanqueteering\nbanqueter\nbanquette\nbansalague\nbanshee\nbanstickle\nbant\nBantam\nbantam\nbantamize\nbantamweight\nbantay\nbantayan\nbanteng\nbanter\nbanterer\nbanteringly\nbantery\nBantingism\nbantingize\nbantling\nBantoid\nBantu\nbanty\nbanuyo\nbanxring\nbanya\nBanyai\nbanyan\nBanyoro\nBanyuls\nbanzai\nbaobab\nbap\nBaphia\nBaphomet\nBaphometic\nBaptanodon\nBaptisia\nbaptisin\nbaptism\nbaptismal\nbaptismally\nBaptist\nbaptistery\nbaptistic\nbaptizable\nbaptize\nbaptizee\nbaptizement\nbaptizer\nBaptornis\nbar\nbara\nbarabara\nbarabora\nBarabra\nBaraca\nbarad\nbaragnosis\nbaragouin\nbaragouinish\nBaraithas\nbarajillo\nBaralipton\nBaramika\nbarandos\nbarangay\nbarasingha\nbarathea\nbarathra\nbarathrum\nbarauna\nbarb\nBarbacoa\nBarbacoan\nbarbacou\nBarbadian\nBarbados\nbarbal\nbarbaloin\nBarbara\nbarbaralalia\nBarbarea\nbarbaresque\nBarbarian\nbarbarian\nbarbarianism\nbarbarianize\nbarbaric\nbarbarical\nbarbarically\nbarbarious\nbarbariousness\nbarbarism\nbarbarity\nbarbarization\nbarbarize\nbarbarous\nbarbarously\nbarbarousness\nBarbary\nbarbary\nbarbas\nbarbasco\nbarbastel\nbarbate\nbarbated\nbarbatimao\nbarbe\nbarbecue\nbarbed\nbarbeiro\nbarbel\nbarbellate\nbarbellula\nbarbellulate\nbarber\nbarberess\nbarberfish\nbarberish\nbarberry\nbarbershop\nbarbet\nbarbette\nBarbeyaceae\nbarbican\nbarbicel\nbarbigerous\nbarbion\nbarbital\nbarbitalism\nbarbiton\nbarbitone\nbarbitos\nbarbiturate\nbarbituric\nbarbless\nbarblet\nbarbone\nbarbotine\nBarbra\nbarbudo\nBarbula\nbarbulate\nbarbule\nbarbulyie\nbarbwire\nBarcan\nbarcarole\nbarcella\nbarcelona\nBarcoo\nbard\nbardane\nbardash\nbardcraft\nbardel\nBardesanism\nBardesanist\nBardesanite\nbardess\nbardic\nbardie\nbardiglio\nbardily\nbardiness\nbarding\nbardish\nbardism\nbardlet\nbardlike\nbardling\nbardo\nBardolater\nBardolatry\nBardolph\nBardolphian\nbardship\nBardulph\nbardy\nBare\nbare\nbareback\nbarebacked\nbareboat\nbarebone\nbareboned\nbareca\nbarefaced\nbarefacedly\nbarefacedness\nbarefit\nbarefoot\nbarefooted\nbarehanded\nbarehead\nbareheaded\nbareheadedness\nbarelegged\nbarely\nbarenecked\nbareness\nbarer\nbaresark\nbaresma\nbaretta\nbarff\nbarfish\nbarfly\nbarful\nbargain\nbargainee\nbargainer\nbargainor\nbargainwise\nbargander\nbarge\nbargeboard\nbargee\nbargeer\nbargeese\nbargehouse\nbargelike\nbargeload\nbargeman\nbargemaster\nbarger\nbargh\nbargham\nbarghest\nbargoose\nBari\nbari\nbaria\nbaric\nbarid\nbarie\nbarile\nbarilla\nbaring\nbaris\nbarish\nbarit\nbarite\nbaritone\nbarium\nbark\nbarkbound\nbarkcutter\nbarkeeper\nbarken\nbarkentine\nbarker\nbarkery\nbarkevikite\nbarkevikitic\nbarkey\nbarkhan\nbarking\nbarkingly\nBarkinji\nbarkle\nbarkless\nbarklyite\nbarkometer\nbarkpeel\nbarkpeeler\nbarkpeeling\nbarksome\nbarky\nbarlafumble\nbarlafummil\nbarless\nbarley\nbarleybird\nbarleybreak\nbarleycorn\nbarleyhood\nbarleymow\nbarleysick\nbarling\nbarlock\nbarlow\nbarm\nbarmaid\nbarman\nbarmaster\nbarmbrack\nbarmcloth\nBarmecidal\nBarmecide\nbarmkin\nbarmote\nbarmskin\nbarmy\nbarmybrained\nbarn\nBarnabas\nBarnabite\nBarnaby\nbarnacle\nBarnard\nbarnard\nbarnbrack\nBarnburner\nBarney\nbarney\nbarnful\nbarnhardtite\nbarnman\nbarnstorm\nbarnstormer\nbarnstorming\nBarnumism\nBarnumize\nbarny\nbarnyard\nBaroco\nbarocyclonometer\nbarodynamic\nbarodynamics\nbarognosis\nbarogram\nbarograph\nbarographic\nbaroi\nbarolo\nbarology\nBarolong\nbarometer\nbarometric\nbarometrical\nbarometrically\nbarometrograph\nbarometrography\nbarometry\nbarometz\nbaromotor\nbaron\nbaronage\nbaroness\nbaronet\nbaronetage\nbaronetcy\nbaronethood\nbaronetical\nbaronetship\nbarong\nBaronga\nbaronial\nbaronize\nbaronry\nbaronship\nbarony\nBaroque\nbaroque\nbaroscope\nbaroscopic\nbaroscopical\nBarosma\nbarosmin\nbarotactic\nbarotaxis\nbarotaxy\nbarothermograph\nbarothermohygrograph\nbaroto\nBarotse\nbarouche\nbarouchet\nBarouni\nbaroxyton\nbarpost\nbarquantine\nbarra\nbarrabkie\nbarrable\nbarrabora\nbarracan\nbarrack\nbarracker\nbarraclade\nbarracoon\nbarracouta\nbarracuda\nbarrad\nbarragan\nbarrage\nbarragon\nbarramunda\nbarramundi\nbarranca\nbarrandite\nbarras\nbarrator\nbarratrous\nbarratrously\nbarratry\nbarred\nbarrel\nbarrelage\nbarreled\nbarreler\nbarrelet\nbarrelful\nbarrelhead\nbarrelmaker\nbarrelmaking\nbarrelwise\nbarren\nbarrenly\nbarrenness\nbarrenwort\nbarrer\nbarret\nBarrett\nbarrette\nbarretter\nbarricade\nbarricader\nbarricado\nbarrico\nbarrier\nbarriguda\nbarrigudo\nbarrikin\nbarriness\nbarring\nBarrington\nBarringtonia\nBarrio\nbarrio\nbarrister\nbarristerial\nbarristership\nbarristress\nbarroom\nbarrow\nbarrowful\nBarrowist\nbarrowman\nbarrulee\nbarrulet\nbarrulety\nbarruly\nBarry\nbarry\nBarsac\nbarse\nbarsom\nBart\nbartender\nbartending\nbarter\nbarterer\nbarth\nbarthite\nbartholinitis\nBartholomean\nBartholomew\nBartholomewtide\nBartholomite\nbartizan\nbartizaned\nBartlemy\nBartlett\nBarton\nbarton\nBartonella\nBartonia\nBartram\nBartramia\nBartramiaceae\nBartramian\nBartsia\nbaru\nBaruch\nBarundi\nbaruria\nbarvel\nbarwal\nbarway\nbarways\nbarwise\nbarwood\nbarycenter\nbarycentric\nbarye\nbaryecoia\nbaryglossia\nbarylalia\nbarylite\nbaryphonia\nbaryphonic\nbaryphony\nbarysilite\nbarysphere\nbaryta\nbarytes\nbarythymia\nbarytic\nbarytine\nbarytocalcite\nbarytocelestine\nbarytocelestite\nbaryton\nbarytone\nbarytophyllite\nbarytostrontianite\nbarytosulphate\nbas\nbasal\nbasale\nbasalia\nbasally\nbasalt\nbasaltes\nbasaltic\nbasaltiform\nbasaltine\nbasaltoid\nbasanite\nbasaree\nBascology\nbascule\nbase\nbaseball\nbaseballdom\nbaseballer\nbaseboard\nbaseborn\nbasebred\nbased\nbasehearted\nbaseheartedness\nbaselard\nbaseless\nbaselessly\nbaselessness\nbaselike\nbaseliner\nBasella\nBasellaceae\nbasellaceous\nbasely\nbaseman\nbasement\nbasementward\nbaseness\nbasenji\nbases\nbash\nbashaw\nbashawdom\nbashawism\nbashawship\nbashful\nbashfully\nbashfulness\nBashilange\nBashkir\nbashlyk\nBashmuric\nbasial\nbasialveolar\nbasiarachnitis\nbasiarachnoiditis\nbasiate\nbasiation\nBasibracteolate\nbasibranchial\nbasibranchiate\nbasibregmatic\nbasic\nbasically\nbasichromatic\nbasichromatin\nbasichromatinic\nbasichromiole\nbasicity\nbasicranial\nbasicytoparaplastin\nbasidia\nbasidial\nbasidigital\nbasidigitale\nbasidiogenetic\nbasidiolichen\nBasidiolichenes\nbasidiomycete\nBasidiomycetes\nbasidiomycetous\nbasidiophore\nbasidiospore\nbasidiosporous\nbasidium\nbasidorsal\nbasifacial\nbasification\nbasifier\nbasifixed\nbasifugal\nbasify\nbasigamous\nbasigamy\nbasigenic\nbasigenous\nbasiglandular\nbasigynium\nbasihyal\nbasihyoid\nBasil\nbasil\nbasilar\nBasilarchia\nbasilary\nbasilateral\nbasilemma\nbasileus\nBasilian\nbasilic\nBasilica\nbasilica\nBasilicae\nbasilical\nbasilican\nbasilicate\nbasilicon\nBasilics\nBasilidian\nBasilidianism\nbasilinna\nbasiliscan\nbasiliscine\nBasiliscus\nbasilisk\nbasilissa\nBasilosauridae\nBasilosaurus\nbasilweed\nbasilysis\nbasilyst\nbasimesostasis\nbasin\nbasinasal\nbasinasial\nbasined\nbasinerved\nbasinet\nbasinlike\nbasioccipital\nbasion\nbasiophitic\nbasiophthalmite\nbasiophthalmous\nbasiotribe\nbasiotripsy\nbasiparachromatin\nbasiparaplastin\nbasipetal\nbasiphobia\nbasipodite\nbasipoditic\nbasipterygial\nbasipterygium\nbasipterygoid\nbasiradial\nbasirhinal\nbasirostral\nbasis\nbasiscopic\nbasisphenoid\nbasisphenoidal\nbasitemporal\nbasiventral\nbasivertebral\nbask\nbasker\nBaskerville\nbasket\nbasketball\nbasketballer\nbasketful\nbasketing\nbasketmaker\nbasketmaking\nbasketry\nbasketware\nbasketwoman\nbasketwood\nbasketwork\nbasketworm\nBaskish\nBaskonize\nBasoche\nBasoga\nbasoid\nBasoko\nBasommatophora\nbasommatophorous\nbason\nBasongo\nbasophile\nbasophilia\nbasophilic\nbasophilous\nbasophobia\nbasos\nbasote\nBasque\nbasque\nbasqued\nbasquine\nbass\nBassa\nBassalia\nBassalian\nbassan\nbassanello\nbassanite\nbassara\nbassarid\nBassaris\nBassariscus\nbassarisk\nbasset\nbassetite\nbassetta\nBassia\nbassie\nbassine\nbassinet\nbassist\nbassness\nbasso\nbassoon\nbassoonist\nbassorin\nbassus\nbasswood\nBast\nbast\nbasta\nBastaard\nBastard\nbastard\nbastardism\nbastardization\nbastardize\nbastardliness\nbastardly\nbastardy\nbaste\nbasten\nbaster\nbastide\nbastille\nbastinade\nbastinado\nbasting\nbastion\nbastionary\nbastioned\nbastionet\nbastite\nbastnasite\nbasto\nbaston\nbasurale\nBasuto\nBat\nbat\nbataan\nbatad\nBatak\nbatakan\nbataleur\nBatan\nbatara\nbatata\nBatatas\nbatatilla\nBatavi\nBatavian\nbatch\nbatcher\nbate\nbatea\nbateau\nbateaux\nbated\nBatekes\nbatel\nbateman\nbatement\nbater\nBatetela\nbatfish\nbatfowl\nbatfowler\nbatfowling\nBath\nbath\nBathala\nbathe\nbatheable\nbather\nbathetic\nbathflower\nbathhouse\nbathic\nbathing\nbathless\nbathman\nbathmic\nbathmism\nbathmotropic\nbathmotropism\nbathochromatic\nbathochromatism\nbathochrome\nbathochromic\nbathochromy\nbathoflore\nbathofloric\nbatholite\nbatholith\nbatholithic\nbatholitic\nbathometer\nBathonian\nbathophobia\nbathorse\nbathos\nbathrobe\nbathroom\nbathroomed\nbathroot\nbathtub\nbathukolpian\nbathukolpic\nbathvillite\nbathwort\nbathyal\nbathyanesthesia\nbathybian\nbathybic\nbathybius\nbathycentesis\nbathychrome\nbathycolpian\nbathycolpic\nbathycurrent\nbathyesthesia\nbathygraphic\nbathyhyperesthesia\nbathyhypesthesia\nbathylimnetic\nbathylite\nbathylith\nbathylithic\nbathylitic\nbathymeter\nbathymetric\nbathymetrical\nbathymetrically\nbathymetry\nbathyorographical\nbathypelagic\nbathyplankton\nbathyseism\nbathysmal\nbathysophic\nbathysophical\nbathysphere\nbathythermograph\nBatidaceae\nbatidaceous\nbatik\nbatiker\nbatikulin\nbatikuling\nbating\nbatino\nBatis\nbatiste\nbatitinan\nbatlan\nbatlike\nbatling\nbatlon\nbatman\nBatocrinidae\nBatocrinus\nBatodendron\nbatoid\nBatoidei\nBatoka\nbaton\nBatonga\nbatonistic\nbatonne\nbatophobia\nBatrachia\nbatrachian\nbatrachiate\nBatrachidae\nBatrachium\nbatrachoid\nBatrachoididae\nbatrachophagous\nBatrachophidia\nbatrachophobia\nbatrachoplasty\nBatrachospermum\nbats\nbatsman\nbatsmanship\nbatster\nbatswing\nbatt\nBatta\nbatta\nbattailous\nBattak\nBattakhin\nbattalia\nbattalion\nbattarism\nbattarismus\nbattel\nbatteler\nbatten\nbattener\nbattening\nbatter\nbatterable\nbattercake\nbatterdock\nbattered\nbatterer\nbatterfang\nbatteried\nbatterman\nbattery\nbatteryman\nbattik\nbatting\nbattish\nbattle\nbattled\nbattledore\nbattlefield\nbattleful\nbattleground\nbattlement\nbattlemented\nbattleplane\nbattler\nbattleship\nbattlesome\nbattlestead\nbattlewagon\nbattleward\nbattlewise\nbattological\nbattologist\nbattologize\nbattology\nbattue\nbatty\nbatukite\nbatule\nBatussi\nBatwa\nbatwing\nbatyphone\nbatz\nbatzen\nbauble\nbaublery\nbaubling\nBaubo\nbauch\nbauchle\nbauckie\nbauckiebird\nbaud\nbaudekin\nbaudrons\nBauera\nBauhinia\nbaul\nbauleah\nBaume\nbaumhauerite\nbaun\nbauno\nBaure\nbauson\nbausond\nbauta\nbauxite\nbauxitite\nBavarian\nbavaroy\nbavary\nbavenite\nbaviaantje\nBavian\nbavian\nbaviere\nbavin\nBavius\nbavoso\nbaw\nbawarchi\nbawbee\nbawcock\nbawd\nbawdily\nbawdiness\nbawdry\nbawdship\nbawdyhouse\nbawl\nbawler\nbawley\nbawn\nBawra\nbawtie\nbaxter\nBaxterian\nBaxterianism\nbaxtone\nbay\nBaya\nbaya\nbayadere\nbayal\nbayamo\nBayard\nbayard\nbayardly\nbayberry\nbaybolt\nbaybush\nbaycuru\nbayed\nbayeta\nbaygall\nbayhead\nbayish\nbayldonite\nbaylet\nbaylike\nbayman\nbayness\nBayogoula\nbayok\nbayonet\nbayoneted\nbayoneteer\nbayou\nbaywood\nbazaar\nbaze\nBazigar\nbazoo\nbazooka\nbazzite\nbdellid\nBdellidae\nbdellium\nbdelloid\nBdelloida\nBdellostoma\nBdellostomatidae\nBdellostomidae\nbdellotomy\nBdelloura\nBdellouridae\nbe\nBea\nbeach\nbeachcomb\nbeachcomber\nbeachcombing\nbeached\nbeachhead\nbeachlamar\nbeachless\nbeachman\nbeachmaster\nbeachward\nbeachy\nbeacon\nbeaconage\nbeaconless\nbeaconwise\nbead\nbeaded\nbeader\nbeadflush\nbeadhouse\nbeadily\nbeadiness\nbeading\nbeadle\nbeadledom\nbeadlehood\nbeadleism\nbeadlery\nbeadleship\nbeadlet\nbeadlike\nbeadman\nbeadroll\nbeadrow\nbeadsman\nbeadswoman\nbeadwork\nbeady\nBeagle\nbeagle\nbeagling\nbeak\nbeaked\nbeaker\nbeakerful\nbeakerman\nbeakermen\nbeakful\nbeakhead\nbeakiron\nbeaklike\nbeaky\nbeal\nbeala\nbealing\nbeallach\nbealtared\nBealtine\nBealtuinn\nbeam\nbeamage\nbeambird\nbeamed\nbeamer\nbeamfilling\nbeamful\nbeamhouse\nbeamily\nbeaminess\nbeaming\nbeamingly\nbeamish\nbeamless\nbeamlet\nbeamlike\nbeamman\nbeamsman\nbeamster\nbeamwork\nbeamy\nbean\nbeanbag\nbeanbags\nbeancod\nbeanery\nbeanfeast\nbeanfeaster\nbeanfield\nbeanie\nbeano\nbeansetter\nbeanshooter\nbeanstalk\nbeant\nbeanweed\nbeany\nbeaproned\nbear\nbearable\nbearableness\nbearably\nbearance\nbearbaiter\nbearbaiting\nbearbane\nbearberry\nbearbind\nbearbine\nbearcoot\nbeard\nbearded\nbearder\nbeardie\nbearding\nbeardless\nbeardlessness\nbeardom\nbeardtongue\nbeardy\nbearer\nbearess\nbearfoot\nbearherd\nbearhide\nbearhound\nbearing\nbearish\nbearishly\nbearishness\nbearlet\nbearlike\nbearm\nbearship\nbearskin\nbeartongue\nbearward\nbearwood\nbearwort\nbeast\nbeastbane\nbeastdom\nbeasthood\nbeastie\nbeastily\nbeastish\nbeastishness\nbeastlike\nbeastlily\nbeastliness\nbeastling\nbeastlings\nbeastly\nbeastman\nbeastship\nbeat\nBeata\nbeata\nbeatable\nbeatae\nbeatee\nbeaten\nbeater\nbeaterman\nbeath\nbeatific\nbeatifical\nbeatifically\nbeatificate\nbeatification\nbeatify\nbeatinest\nbeating\nbeatitude\nBeatrice\nBeatrix\nbeatster\nbeatus\nbeau\nBeauclerc\nbeaufin\nBeaufort\nbeauish\nbeauism\nBeaujolais\nBeaumontia\nBeaune\nbeaupere\nbeauseant\nbeauship\nbeauteous\nbeauteously\nbeauteousness\nbeauti\nbeautician\nbeautied\nbeautification\nbeautifier\nbeautiful\nbeautifully\nbeautifulness\nbeautify\nbeautihood\nbeauty\nbeautydom\nbeautyship\nbeaux\nbeaver\nBeaverboard\nbeaverboard\nbeavered\nbeaverette\nbeaverish\nbeaverism\nbeaverite\nbeaverize\nBeaverkill\nbeaverkin\nbeaverlike\nbeaverpelt\nbeaverroot\nbeaverteen\nbeaverwood\nbeavery\nbeback\nbebait\nbeballed\nbebang\nbebannered\nbebar\nbebaron\nbebaste\nbebat\nbebathe\nbebatter\nbebay\nbebeast\nbebed\nbebeerine\nbebeeru\nbebelted\nbebilya\nbebite\nbebization\nbeblain\nbeblear\nbebled\nbebless\nbeblister\nbeblood\nbebloom\nbeblotch\nbeblubber\nbebog\nbebop\nbeboss\nbebotch\nbebothered\nbebouldered\nbebrave\nbebreech\nbebrine\nbebrother\nbebrush\nbebump\nbebusy\nbebuttoned\nbecall\nbecalm\nbecalmment\nbecap\nbecard\nbecarpet\nbecarve\nbecassocked\nbecater\nbecause\nbeccafico\nbecense\nbechained\nbechalk\nbechance\nbecharm\nbechase\nbechatter\nbechauffeur\nbecheck\nbecher\nbechern\nbechignoned\nbechirp\nBechtler\nBechuana\nbecircled\nbecivet\nBeck\nbeck\nbeckelite\nbecker\nbecket\nBeckie\nbeckiron\nbeckon\nbeckoner\nbeckoning\nbeckoningly\nBecky\nbeclad\nbeclamor\nbeclamour\nbeclang\nbeclart\nbeclasp\nbeclatter\nbeclaw\nbecloak\nbeclog\nbeclothe\nbecloud\nbeclout\nbeclown\nbecluster\nbecobweb\nbecoiffed\nbecollier\nbecolme\nbecolor\nbecombed\nbecome\nbecomes\nbecoming\nbecomingly\nbecomingness\nbecomma\nbecompass\nbecompliment\nbecoom\nbecoresh\nbecost\nbecousined\nbecovet\nbecoward\nbecquerelite\nbecram\nbecramp\nbecrampon\nbecrawl\nbecreep\nbecrime\nbecrimson\nbecrinolined\nbecripple\nbecroak\nbecross\nbecrowd\nbecrown\nbecrush\nbecrust\nbecry\nbecudgel\nbecuffed\nbecuiba\nbecumber\nbecuna\nbecurl\nbecurry\nbecurse\nbecurtained\nbecushioned\nbecut\nbed\nbedabble\nbedad\nbedaggered\nbedamn\nbedamp\nbedangled\nbedare\nbedark\nbedarken\nbedash\nbedaub\nbedawn\nbeday\nbedaze\nbedazement\nbedazzle\nbedazzlement\nbedazzling\nbedazzlingly\nbedboard\nbedbug\nbedcap\nbedcase\nbedchair\nbedchamber\nbedclothes\nbedcord\nbedcover\nbedded\nbedder\nbedding\nbedead\nbedeaf\nbedeafen\nbedebt\nbedeck\nbedecorate\nbedeguar\nbedel\nbeden\nbedene\nbedesman\nbedevil\nbedevilment\nbedew\nbedewer\nbedewoman\nbedfast\nbedfellow\nbedfellowship\nbedflower\nbedfoot\nBedford\nbedframe\nbedgery\nbedgoer\nbedgown\nbediademed\nbediamonded\nbediaper\nbedight\nbedikah\nbedim\nbedimple\nbedin\nbedip\nbedirt\nbedirter\nbedirty\nbedismal\nbedizen\nbedizenment\nbedkey\nbedlam\nbedlamer\nBedlamic\nbedlamism\nbedlamite\nbedlamitish\nbedlamize\nbedlar\nbedless\nbedlids\nbedmaker\nbedmaking\nbedman\nbedmate\nbedoctor\nbedog\nbedolt\nbedot\nbedote\nBedouin\nBedouinism\nbedouse\nbedown\nbedoyo\nbedpan\nbedplate\nbedpost\nbedquilt\nbedrabble\nbedraggle\nbedragglement\nbedrail\nbedral\nbedrape\nbedravel\nbedrench\nbedress\nbedribble\nbedrid\nbedridden\nbedriddenness\nbedrift\nbedright\nbedrip\nbedrivel\nbedrizzle\nbedrock\nbedroll\nbedroom\nbedrop\nbedrown\nbedrowse\nbedrug\nbedscrew\nbedsick\nbedside\nbedsite\nbedsock\nbedsore\nbedspread\nbedspring\nbedstaff\nbedstand\nbedstaves\nbedstead\nbedstock\nbedstraw\nbedstring\nbedtick\nbedticking\nbedtime\nbedub\nbeduchess\nbeduck\nbeduke\nbedull\nbedumb\nbedunce\nbedunch\nbedung\nbedur\nbedusk\nbedust\nbedwarf\nbedway\nbedways\nbedwell\nbedye\nBee\nbee\nbeearn\nbeebread\nbeech\nbeechdrops\nbeechen\nbeechnut\nbeechwood\nbeechwoods\nbeechy\nbeedged\nbeedom\nbeef\nbeefeater\nbeefer\nbeefhead\nbeefheaded\nbeefily\nbeefin\nbeefiness\nbeefish\nbeefishness\nbeefless\nbeeflower\nbeefsteak\nbeeftongue\nbeefwood\nbeefy\nbeegerite\nbeehead\nbeeheaded\nbeeherd\nbeehive\nbeehouse\nbeeish\nbeeishness\nbeek\nbeekeeper\nbeekeeping\nbeekite\nBeekmantown\nbeelbow\nbeelike\nbeeline\nbeelol\nBeelzebub\nBeelzebubian\nBeelzebul\nbeeman\nbeemaster\nbeen\nbeennut\nbeer\nbeerage\nbeerbachite\nbeerbibber\nbeerhouse\nbeerily\nbeeriness\nbeerish\nbeerishly\nbeermaker\nbeermaking\nbeermonger\nbeerocracy\nBeerothite\nbeerpull\nbeery\nbees\nbeest\nbeestings\nbeeswax\nbeeswing\nbeeswinged\nbeet\nbeeth\nBeethovenian\nBeethovenish\nBeethovian\nbeetle\nbeetled\nbeetlehead\nbeetleheaded\nbeetler\nbeetlestock\nbeetlestone\nbeetleweed\nbeetmister\nbeetrave\nbeetroot\nbeetrooty\nbeety\nbeeve\nbeevish\nbeeware\nbeeway\nbeeweed\nbeewise\nbeewort\nbefall\nbefame\nbefamilied\nbefamine\nbefan\nbefancy\nbefanned\nbefathered\nbefavor\nbefavour\nbefeather\nbeferned\nbefetished\nbefetter\nbefezzed\nbefiddle\nbefilch\nbefile\nbefilleted\nbefilmed\nbefilth\nbefinger\nbefire\nbefist\nbefit\nbefitting\nbefittingly\nbefittingness\nbeflag\nbeflannel\nbeflap\nbeflatter\nbeflea\nbefleck\nbeflounce\nbeflour\nbeflout\nbeflower\nbeflum\nbefluster\nbefoam\nbefog\nbefool\nbefoolment\nbefop\nbefore\nbeforehand\nbeforeness\nbeforested\nbeforetime\nbeforetimes\nbefortune\nbefoul\nbefouler\nbefoulment\nbefountained\nbefraught\nbefreckle\nbefreeze\nbefreight\nbefret\nbefriend\nbefriender\nbefriendment\nbefrill\nbefringe\nbefriz\nbefrocked\nbefrogged\nbefrounce\nbefrumple\nbefuddle\nbefuddlement\nbefuddler\nbefume\nbefurbelowed\nbefurred\nbeg\nbegabled\nbegad\nbegall\nbegani\nbegar\nbegari\nbegarlanded\nbegarnish\nbegartered\nbegash\nbegat\nbegaud\nbegaudy\nbegay\nbegaze\nbegeck\nbegem\nbeget\nbegettal\nbegetter\nbeggable\nbeggar\nbeggardom\nbeggarer\nbeggaress\nbeggarhood\nbeggarism\nbeggarlike\nbeggarliness\nbeggarly\nbeggarman\nbeggarweed\nbeggarwise\nbeggarwoman\nbeggary\nBeggiatoa\nBeggiatoaceae\nbeggiatoaceous\nbegging\nbeggingly\nbeggingwise\nBeghard\nbegift\nbegiggle\nbegild\nbegin\nbeginger\nbeginner\nbeginning\nbegird\nbegirdle\nbeglad\nbeglamour\nbeglare\nbeglerbeg\nbeglerbeglic\nbeglerbegluc\nbeglerbegship\nbeglerbey\nbeglic\nbeglide\nbeglitter\nbeglobed\nbegloom\nbegloze\nbegluc\nbeglue\nbegnaw\nbego\nbegob\nbegobs\nbegoggled\nbegohm\nbegone\nbegonia\nBegoniaceae\nbegoniaceous\nBegoniales\nbegorra\nbegorry\nbegotten\nbegottenness\nbegoud\nbegowk\nbegowned\nbegrace\nbegrain\nbegrave\nbegray\nbegrease\nbegreen\nbegrett\nbegrim\nbegrime\nbegrimer\nbegroan\nbegrown\nbegrudge\nbegrudgingly\nbegruntle\nbegrutch\nbegrutten\nbeguard\nbeguess\nbeguile\nbeguileful\nbeguilement\nbeguiler\nbeguiling\nbeguilingly\nBeguin\nBeguine\nbeguine\nbegulf\nbegum\nbegun\nbegunk\nbegut\nbehale\nbehalf\nbehallow\nbehammer\nbehap\nbehatted\nbehave\nbehavior\nbehavioral\nbehaviored\nbehaviorism\nbehaviorist\nbehavioristic\nbehavioristically\nbehead\nbeheadal\nbeheader\nbeheadlined\nbehear\nbehears\nbehearse\nbehedge\nbeheld\nbehelp\nbehemoth\nbehen\nbehenate\nbehenic\nbehest\nbehind\nbehinder\nbehindhand\nbehindsight\nbehint\nbehn\nbehold\nbeholdable\nbeholden\nbeholder\nbeholding\nbeholdingness\nbehoney\nbehoof\nbehooped\nbehoot\nbehoove\nbehooveful\nbehoovefully\nbehoovefulness\nbehooves\nbehooving\nbehoovingly\nbehorn\nbehorror\nbehowl\nbehung\nbehusband\nbehymn\nbehypocrite\nbeice\nBeid\nbeige\nbeing\nbeingless\nbeingness\nbeinked\nbeira\nbeisa\nBeja\nbejabers\nbejade\nbejan\nbejant\nbejaundice\nbejazz\nbejel\nbejewel\nbejezebel\nbejig\nbejuggle\nbejumble\nbekah\nbekerchief\nbekick\nbekilted\nbeking\nbekinkinite\nbekiss\nbekko\nbeknave\nbeknight\nbeknit\nbeknived\nbeknotted\nbeknottedly\nbeknottedness\nbeknow\nbeknown\nBel\nbel\nbela\nbelabor\nbelaced\nbeladle\nbelady\nbelage\nbelah\nBelait\nBelaites\nbelam\nBelamcanda\nbelanda\nbelar\nbelard\nbelash\nbelate\nbelated\nbelatedly\nbelatedness\nbelatticed\nbelaud\nbelauder\nbelavendered\nbelay\nbelayer\nbelch\nbelcher\nbeld\nbeldam\nbeldamship\nbelderroot\nbelduque\nbeleaf\nbeleaguer\nbeleaguerer\nbeleaguerment\nbeleap\nbeleave\nbelecture\nbeledgered\nbelee\nbelemnid\nbelemnite\nBelemnites\nbelemnitic\nBelemnitidae\nbelemnoid\nBelemnoidea\nbeletter\nbelfried\nbelfry\nbelga\nBelgae\nBelgian\nBelgic\nBelgophile\nBelgrade\nBelgravia\nBelgravian\nBelial\nBelialic\nBelialist\nbelibel\nbelick\nbelie\nbelief\nbeliefful\nbelieffulness\nbeliefless\nbelier\nbelievability\nbelievable\nbelievableness\nbelieve\nbeliever\nbelieving\nbelievingly\nbelight\nbeliked\nBelili\nbelimousined\nBelinda\nBelinuridae\nBelinurus\nbelion\nbeliquor\nBelis\nbelite\nbelitter\nbelittle\nbelittlement\nbelittler\nbelive\nbell\nBella\nBellabella\nBellacoola\nbelladonna\nbellarmine\nBellatrix\nbellbind\nbellbird\nbellbottle\nbellboy\nbelle\nbelled\nbelledom\nBelleek\nbellehood\nbelleric\nBellerophon\nBellerophontidae\nbelletrist\nbelletristic\nbellflower\nbellhanger\nbellhanging\nbellhop\nbellhouse\nbellicism\nbellicose\nbellicosely\nbellicoseness\nbellicosity\nbellied\nbelliferous\nbelligerence\nbelligerency\nbelligerent\nbelligerently\nbelling\nbellipotent\nBellis\nbellite\nbellmaker\nbellmaking\nbellman\nbellmanship\nbellmaster\nbellmouth\nbellmouthed\nBellona\nBellonian\nbellonion\nbellote\nBellovaci\nbellow\nbellower\nbellows\nbellowsful\nbellowslike\nbellowsmaker\nbellowsmaking\nbellowsman\nbellpull\nbelltail\nbelltopper\nbelltopperdom\nbellware\nbellwaver\nbellweed\nbellwether\nbellwind\nbellwine\nbellwood\nbellwort\nbelly\nbellyache\nbellyband\nbellyer\nbellyfish\nbellyflaught\nbellyful\nbellying\nbellyland\nbellylike\nbellyman\nbellypiece\nbellypinch\nbeloam\nbeloeilite\nbeloid\nbelomancy\nBelone\nbelonesite\nbelong\nbelonger\nbelonging\nbelonid\nBelonidae\nbelonite\nbelonoid\nbelonosphaerite\nbelord\nBelostoma\nBelostomatidae\nBelostomidae\nbelout\nbelove\nbeloved\nbelow\nbelowstairs\nbelozenged\nBelshazzar\nBelshazzaresque\nbelsire\nbelt\nBeltane\nbelted\nBeltene\nbelter\nBeltian\nbeltie\nbeltine\nbelting\nBeltir\nBeltis\nbeltmaker\nbeltmaking\nbeltman\nbelton\nbeltwise\nBeluchi\nBelucki\nbeluga\nbelugite\nbelute\nbelve\nbelvedere\nBelverdian\nbely\nbelying\nbelyingly\nbelzebuth\nbema\nbemad\nbemadam\nbemaddening\nbemail\nbemaim\nbemajesty\nbeman\nbemangle\nbemantle\nbemar\nbemartyr\nbemask\nbemaster\nbemat\nbemata\nbemaul\nbemazed\nBemba\nBembecidae\nBembex\nbemeal\nbemean\nbemedaled\nbemedalled\nbementite\nbemercy\nbemingle\nbeminstrel\nbemire\nbemirement\nbemirror\nbemirrorment\nbemist\nbemistress\nbemitered\nbemitred\nbemix\nbemoan\nbemoanable\nbemoaner\nbemoaning\nbemoaningly\nbemoat\nbemock\nbemoil\nbemoisten\nbemole\nbemolt\nbemonster\nbemoon\nbemotto\nbemoult\nbemouth\nbemuck\nbemud\nbemuddle\nbemuddlement\nbemuddy\nbemuffle\nbemurmur\nbemuse\nbemused\nbemusedly\nbemusement\nbemusk\nbemuslined\nbemuzzle\nBen\nben\nbena\nbenab\nBenacus\nbename\nbenami\nbenamidar\nbenasty\nbenben\nbench\nbenchboard\nbencher\nbenchership\nbenchfellow\nbenchful\nbenching\nbenchland\nbenchlet\nbenchman\nbenchwork\nbenchy\nbencite\nbend\nbenda\nbendability\nbendable\nbended\nbender\nbending\nbendingly\nbendlet\nbendsome\nbendwise\nbendy\nbene\nbeneaped\nbeneath\nbeneception\nbeneceptive\nbeneceptor\nbenedicite\nBenedict\nbenedict\nBenedicta\nBenedictine\nBenedictinism\nbenediction\nbenedictional\nbenedictionary\nbenedictive\nbenedictively\nbenedictory\nBenedictus\nbenedight\nbenefaction\nbenefactive\nbenefactor\nbenefactorship\nbenefactory\nbenefactress\nbenefic\nbenefice\nbeneficed\nbeneficeless\nbeneficence\nbeneficent\nbeneficential\nbeneficently\nbeneficial\nbeneficially\nbeneficialness\nbeneficiary\nbeneficiaryship\nbeneficiate\nbeneficiation\nbenefit\nbenefiter\nbeneighbored\nBenelux\nbenempt\nbenempted\nbeneplacito\nbenet\nBenetnasch\nbenettle\nBeneventan\nBeneventana\nbenevolence\nbenevolent\nbenevolently\nbenevolentness\nbenevolist\nbeng\nBengal\nBengalese\nBengali\nBengalic\nbengaline\nBengola\nBeni\nbeni\nbenight\nbenighted\nbenightedness\nbenighten\nbenighter\nbenightmare\nbenightment\nbenign\nbenignancy\nbenignant\nbenignantly\nbenignity\nbenignly\nBenin\nBenincasa\nbenison\nbenitoite\nbenj\nBenjamin\nbenjamin\nbenjaminite\nBenjamite\nBenjy\nbenjy\nBenkulen\nbenmost\nbenn\nbenne\nbennel\nBennet\nbennet\nBennettitaceae\nbennettitaceous\nBennettitales\nBennettites\nbennetweed\nBenny\nbenny\nbeno\nbenorth\nbenote\nbensel\nbensh\nbenshea\nbenshee\nbenshi\nBenson\nbent\nbentang\nbenthal\nBenthamic\nBenthamism\nBenthamite\nbenthic\nbenthon\nbenthonic\nbenthos\nBentincks\nbentiness\nbenting\nBenton\nbentonite\nbentstar\nbentwood\nbenty\nBenu\nbenumb\nbenumbed\nbenumbedness\nbenumbing\nbenumbingly\nbenumbment\nbenward\nbenweed\nbenzacridine\nbenzal\nbenzalacetone\nbenzalacetophenone\nbenzalaniline\nbenzalazine\nbenzalcohol\nbenzalcyanhydrin\nbenzaldehyde\nbenzaldiphenyl\nbenzaldoxime\nbenzalethylamine\nbenzalhydrazine\nbenzalphenylhydrazone\nbenzalphthalide\nbenzamide\nbenzamido\nbenzamine\nbenzaminic\nbenzamino\nbenzanalgen\nbenzanilide\nbenzanthrone\nbenzantialdoxime\nbenzazide\nbenzazimide\nbenzazine\nbenzazole\nbenzbitriazole\nbenzdiazine\nbenzdifuran\nbenzdioxazine\nbenzdioxdiazine\nbenzdioxtriazine\nBenzedrine\nbenzein\nbenzene\nbenzenediazonium\nbenzenoid\nbenzenyl\nbenzhydrol\nbenzhydroxamic\nbenzidine\nbenzidino\nbenzil\nbenzilic\nbenzimidazole\nbenziminazole\nbenzinduline\nbenzine\nbenzo\nbenzoate\nbenzoated\nbenzoazurine\nbenzobis\nbenzocaine\nbenzocoumaran\nbenzodiazine\nbenzodiazole\nbenzoflavine\nbenzofluorene\nbenzofulvene\nbenzofuran\nbenzofuroquinoxaline\nbenzofuryl\nbenzoglycolic\nbenzoglyoxaline\nbenzohydrol\nbenzoic\nbenzoid\nbenzoin\nbenzoinated\nbenzoiodohydrin\nbenzol\nbenzolate\nbenzole\nbenzolize\nbenzomorpholine\nbenzonaphthol\nbenzonitrile\nbenzonitrol\nbenzoperoxide\nbenzophenanthrazine\nbenzophenanthroline\nbenzophenazine\nbenzophenol\nbenzophenone\nbenzophenothiazine\nbenzophenoxazine\nbenzophloroglucinol\nbenzophosphinic\nbenzophthalazine\nbenzopinacone\nbenzopyran\nbenzopyranyl\nbenzopyrazolone\nbenzopyrylium\nbenzoquinoline\nbenzoquinone\nbenzoquinoxaline\nbenzosulphimide\nbenzotetrazine\nbenzotetrazole\nbenzothiazine\nbenzothiazole\nbenzothiazoline\nbenzothiodiazole\nbenzothiofuran\nbenzothiophene\nbenzothiopyran\nbenzotoluide\nbenzotriazine\nbenzotriazole\nbenzotrichloride\nbenzotrifuran\nbenzoxate\nbenzoxy\nbenzoxyacetic\nbenzoxycamphor\nbenzoxyphenanthrene\nbenzoyl\nbenzoylate\nbenzoylation\nbenzoylformic\nbenzoylglycine\nbenzpinacone\nbenzthiophen\nbenztrioxazine\nbenzyl\nbenzylamine\nbenzylic\nbenzylidene\nbenzylpenicillin\nbeode\nBeothuk\nBeothukan\nBeowulf\nbepaid\nBepaint\nbepale\nbepaper\nbeparch\nbeparody\nbeparse\nbepart\nbepaste\nbepastured\nbepat\nbepatched\nbepaw\nbepearl\nbepelt\nbepen\nbepepper\nbeperiwigged\nbepester\nbepewed\nbephilter\nbephrase\nbepicture\nbepiece\nbepierce\nbepile\nbepill\nbepillared\nbepimple\nbepinch\nbepistoled\nbepity\nbeplague\nbeplaided\nbeplaster\nbeplumed\nbepommel\nbepowder\nbepraise\nbepraisement\nbepraiser\nbeprank\nbepray\nbepreach\nbepress\nbepretty\nbepride\nbeprose\nbepuddle\nbepuff\nbepun\nbepurple\nbepuzzle\nbepuzzlement\nbequalm\nbequeath\nbequeathable\nbequeathal\nbequeather\nbequeathment\nbequest\nbequirtle\nbequote\nber\nberain\nberairou\nberakah\nberake\nberakoth\nberapt\nberascal\nberat\nberate\nberattle\nberaunite\nberay\nberbamine\nBerber\nBerberi\nBerberian\nberberid\nBerberidaceae\nberberidaceous\nberberine\nBerberis\nberberry\nBerchemia\nBerchta\nberdache\nbere\nBerean\nbereason\nbereave\nbereavement\nbereaven\nbereaver\nbereft\nberend\nBerengaria\nBerengarian\nBerengarianism\nberengelite\nBerenice\nBereshith\nberesite\nberet\nberewick\nberg\nbergalith\nBergama\nBergamask\nbergamiol\nBergamo\nBergamot\nbergamot\nbergander\nbergaptene\nberger\nberghaan\nberginization\nberginize\nberglet\nbergschrund\nBergsonian\nBergsonism\nbergut\nbergy\nbergylt\nberhyme\nBeri\nberibanded\nberibboned\nberiberi\nberiberic\nberide\nberigora\nberinged\nberingite\nberingleted\nberinse\nberith\nBerkeleian\nBerkeleianism\nBerkeleyism\nBerkeleyite\nberkelium\nberkovets\nberkowitz\nBerkshire\nberley\nberlin\nberline\nBerliner\nberlinite\nBerlinize\nberm\nBermuda\nBermudian\nbermudite\nBern\nBernard\nBernardina\nBernardine\nberne\nBernese\nBernice\nBernicia\nbernicle\nBernie\nBerninesque\nBernoullian\nberobed\nBeroe\nBeroida\nBeroidae\nberoll\nBerossos\nberouged\nberound\nberrendo\nberret\nberri\nberried\nberrier\nberrigan\nberrugate\nberry\nberrybush\nberryless\nberrylike\nberrypicker\nberrypicking\nberseem\nberserk\nberserker\nBersiamite\nBersil\nBert\nBertat\nBerteroa\nberth\nBertha\nberthage\nberthed\nberther\nberthierite\nberthing\nBerthold\nBertholletia\nBertie\nBertolonia\nBertram\nbertram\nBertrand\nbertrandite\nbertrum\nberuffed\nberuffled\nberust\nbervie\nberycid\nBerycidae\nberyciform\nberycine\nberycoid\nBerycoidea\nberycoidean\nBerycoidei\nBerycomorphi\nberyl\nberylate\nberyllia\nberylline\nberylliosis\nberyllium\nberylloid\nberyllonate\nberyllonite\nberyllosis\nBerytidae\nBeryx\nberzelianite\nberzeliite\nbes\nbesa\nbesagne\nbesaiel\nbesaint\nbesan\nbesanctify\nbesauce\nbescab\nbescarf\nbescatter\nbescent\nbescorch\nbescorn\nbescoundrel\nbescour\nbescourge\nbescramble\nbescrape\nbescratch\nbescrawl\nbescreen\nbescribble\nbescurf\nbescurvy\nbescutcheon\nbeseam\nbesee\nbeseech\nbeseecher\nbeseeching\nbeseechingly\nbeseechingness\nbeseechment\nbeseem\nbeseeming\nbeseemingly\nbeseemingness\nbeseemliness\nbeseemly\nbeseen\nbeset\nbesetment\nbesetter\nbesetting\nbeshackle\nbeshade\nbeshadow\nbeshag\nbeshake\nbeshame\nbeshawled\nbeshear\nbeshell\nbeshield\nbeshine\nbeshiver\nbeshlik\nbeshod\nbeshout\nbeshow\nbeshower\nbeshrew\nbeshriek\nbeshrivel\nbeshroud\nbesiclometer\nbeside\nbesides\nbesiege\nbesieged\nbesiegement\nbesieger\nbesieging\nbesiegingly\nbesigh\nbesilver\nbesin\nbesing\nbesiren\nbesit\nbeslab\nbeslap\nbeslash\nbeslave\nbeslaver\nbesleeve\nbeslime\nbeslimer\nbeslings\nbeslipper\nbeslobber\nbeslow\nbeslubber\nbeslur\nbeslushed\nbesmear\nbesmearer\nbesmell\nbesmile\nbesmirch\nbesmircher\nbesmirchment\nbesmoke\nbesmooth\nbesmother\nbesmouch\nbesmudge\nbesmut\nbesmutch\nbesnare\nbesneer\nbesnivel\nbesnow\nbesnuff\nbesodden\nbesogne\nbesognier\nbesoil\nbesom\nbesomer\nbesonnet\nbesoot\nbesoothe\nbesoothement\nbesot\nbesotment\nbesotted\nbesottedly\nbesottedness\nbesotting\nbesottingly\nbesought\nbesoul\nbesour\nbespangle\nbespate\nbespatter\nbespatterer\nbespatterment\nbespawl\nbespeak\nbespeakable\nbespeaker\nbespecked\nbespeckle\nbespecklement\nbespectacled\nbesped\nbespeech\nbespeed\nbespell\nbespelled\nbespend\nbespete\nbespew\nbespice\nbespill\nbespin\nbespirit\nbespit\nbesplash\nbesplatter\nbesplit\nbespoke\nbespoken\nbespot\nbespottedness\nbespouse\nbespout\nbespray\nbespread\nbesprent\nbesprinkle\nbesprinkler\nbespurred\nbesputter\nbespy\nbesqueeze\nbesquib\nbesra\nBess\nBessarabian\nBesselian\nBessemer\nbessemer\nBessemerize\nbessemerize\nBessera\nBessi\nBessie\nBessy\nbest\nbestab\nbestain\nbestamp\nbestar\nbestare\nbestarve\nbestatued\nbestay\nbestayed\nbestead\nbesteer\nbestench\nbester\nbestial\nbestialism\nbestialist\nbestiality\nbestialize\nbestially\nbestiarian\nbestiarianism\nbestiary\nbestick\nbestill\nbestink\nbestir\nbestness\nbestock\nbestore\nbestorm\nbestove\nbestow\nbestowable\nbestowage\nbestowal\nbestower\nbestowing\nbestowment\nbestraddle\nbestrapped\nbestraught\nbestraw\nbestreak\nbestream\nbestrew\nbestrewment\nbestride\nbestripe\nbestrode\nbestubbled\nbestuck\nbestud\nbesugar\nbesuit\nbesully\nbeswarm\nbesweatered\nbesweeten\nbeswelter\nbeswim\nbeswinge\nbeswitch\nbet\nBeta\nbeta\nbetacism\nbetacismus\nbetafite\nbetag\nbetail\nbetailor\nbetaine\nbetainogen\nbetalk\nbetallow\nbetangle\nbetanglement\nbetask\nbetassel\nbetatron\nbetattered\nbetaxed\nbetear\nbeteela\nbeteem\nbetel\nBetelgeuse\nBeth\nbeth\nbethabara\nbethankit\nbethel\nBethesda\nbethflower\nbethink\nBethlehem\nBethlehemite\nbethought\nbethrall\nbethreaten\nbethroot\nBethuel\nbethumb\nbethump\nbethunder\nbethwack\nBethylidae\nbetide\nbetimber\nbetimes\nbetinge\nbetipple\nbetire\nbetis\nbetitle\nbetocsin\nbetoil\nbetoken\nbetokener\nbetone\nbetongue\nBetonica\nbetony\nbetorcin\nbetorcinol\nbetoss\nbetowel\nbetowered\nBetoya\nBetoyan\nbetrace\nbetrail\nbetrample\nbetrap\nbetravel\nbetray\nbetrayal\nbetrayer\nbetrayment\nbetread\nbetrend\nbetrim\nbetrinket\nbetroth\nbetrothal\nbetrothed\nbetrothment\nbetrough\nbetrousered\nbetrumpet\nbetrunk\nBetsey\nBetsileos\nBetsimisaraka\nbetso\nBetsy\nBetta\nbetted\nbetter\nbetterer\nbettergates\nbettering\nbetterly\nbetterment\nbettermost\nbetterness\nbetters\nBettina\nBettine\nbetting\nbettong\nbettonga\nBettongia\nbettor\nBetty\nbetty\nbetuckered\nBetula\nBetulaceae\nbetulaceous\nbetulin\nbetulinamaric\nbetulinic\nbetulinol\nBetulites\nbeturbaned\nbetusked\nbetutor\nbetutored\nbetwattled\nbetween\nbetweenbrain\nbetweenity\nbetweenmaid\nbetweenness\nbetweenwhiles\nbetwine\nbetwit\nbetwixen\nbetwixt\nbeudantite\nBeulah\nbeuniformed\nbevatron\nbeveil\nbevel\nbeveled\nbeveler\nbevelled\nbevelment\nbevenom\nbever\nbeverage\nBeverly\nbeverse\nbevesseled\nbevesselled\nbeveto\nbevillain\nbevined\nbevoiled\nbevomit\nbevue\nbevy\nbewail\nbewailable\nbewailer\nbewailing\nbewailingly\nbewailment\nbewaitered\nbewall\nbeware\nbewash\nbewaste\nbewater\nbeweary\nbeweep\nbeweeper\nbewelcome\nbewelter\nbewept\nbewest\nbewet\nbewhig\nbewhiskered\nbewhisper\nbewhistle\nbewhite\nbewhiten\nbewidow\nbewig\nbewigged\nbewilder\nbewildered\nbewilderedly\nbewilderedness\nbewildering\nbewilderingly\nbewilderment\nbewimple\nbewinged\nbewinter\nbewired\nbewitch\nbewitchedness\nbewitcher\nbewitchery\nbewitchful\nbewitching\nbewitchingly\nbewitchingness\nbewitchment\nbewith\nbewizard\nbework\nbeworm\nbeworn\nbeworry\nbeworship\nbewrap\nbewrathed\nbewray\nbewrayer\nbewrayingly\nbewrayment\nbewreath\nbewreck\nbewrite\nbey\nbeydom\nbeylic\nbeylical\nbeyond\nbeyrichite\nbeyship\nBezaleel\nBezaleelian\nbezant\nbezantee\nbezanty\nbezel\nbezesteen\nbezetta\nbezique\nbezoar\nbezoardic\nbezonian\nBezpopovets\nbezzi\nbezzle\nbezzo\nbhabar\nBhadon\nBhaga\nbhagavat\nbhagavata\nbhaiachari\nbhaiyachara\nbhakta\nbhakti\nbhalu\nbhandar\nbhandari\nbhang\nbhangi\nBhar\nbhara\nbharal\nBharata\nbhat\nbhava\nBhavani\nbheesty\nbhikku\nbhikshu\nBhil\nBhili\nBhima\nBhojpuri\nbhoosa\nBhotia\nBhotiya\nBhowani\nbhoy\nBhumij\nbhungi\nbhungini\nbhut\nBhutanese\nBhutani\nbhutatathata\nBhutia\nbiabo\nbiacetyl\nbiacetylene\nbiacid\nbiacromial\nbiacuminate\nbiacuru\nbialate\nbiallyl\nbialveolar\nBianca\nBianchi\nbianchite\nbianco\nbiangular\nbiangulate\nbiangulated\nbiangulous\nbianisidine\nbiannual\nbiannually\nbiannulate\nbiarchy\nbiarcuate\nbiarcuated\nbiarticular\nbiarticulate\nbiarticulated\nbias\nbiasness\nbiasteric\nbiaswise\nbiatomic\nbiauricular\nbiauriculate\nbiaxal\nbiaxial\nbiaxiality\nbiaxially\nbiaxillary\nbib\nbibacious\nbibacity\nbibasic\nbibation\nbibb\nbibber\nbibble\nbibbler\nbibbons\nbibcock\nbibenzyl\nbibi\nBibio\nbibionid\nBibionidae\nbibiri\nbibitory\nBible\nbibless\nBiblic\nBiblical\nBiblicality\nBiblically\nBiblicism\nBiblicist\nBiblicistic\nBiblicolegal\nBiblicoliterary\nBiblicopsychological\nbiblioclasm\nbiblioclast\nbibliofilm\nbibliogenesis\nbibliognost\nbibliognostic\nbibliogony\nbibliograph\nbibliographer\nbibliographic\nbibliographical\nbibliographically\nbibliographize\nbibliography\nbiblioklept\nbibliokleptomania\nbibliokleptomaniac\nbibliolater\nbibliolatrous\nbibliolatry\nbibliological\nbibliologist\nbibliology\nbibliomancy\nbibliomane\nbibliomania\nbibliomaniac\nbibliomaniacal\nbibliomanian\nbibliomanianism\nbibliomanism\nbibliomanist\nbibliopegic\nbibliopegist\nbibliopegistic\nbibliopegy\nbibliophage\nbibliophagic\nbibliophagist\nbibliophagous\nbibliophile\nbibliophilic\nbibliophilism\nbibliophilist\nbibliophilistic\nbibliophily\nbibliophobia\nbibliopolar\nbibliopole\nbibliopolery\nbibliopolic\nbibliopolical\nbibliopolically\nbibliopolism\nbibliopolist\nbibliopolistic\nbibliopoly\nbibliosoph\nbibliotaph\nbibliotaphic\nbibliothec\nbibliotheca\nbibliothecal\nbibliothecarial\nbibliothecarian\nbibliothecary\nbibliotherapeutic\nbibliotherapist\nbibliotherapy\nbibliothetic\nbibliotic\nbibliotics\nbibliotist\nBiblism\nBiblist\nbiblus\nbiborate\nbibracteate\nbibracteolate\nbibulosity\nbibulous\nbibulously\nbibulousness\nBibulus\nbicalcarate\nbicameral\nbicameralism\nbicamerist\nbicapitate\nbicapsular\nbicarbonate\nbicarbureted\nbicarinate\nbicarpellary\nbicarpellate\nbicaudal\nbicaudate\nBice\nbice\nbicellular\nbicentenary\nbicentennial\nbicephalic\nbicephalous\nbiceps\nbicetyl\nbichir\nbichloride\nbichord\nbichromate\nbichromatic\nbichromatize\nbichrome\nbichromic\nbichy\nbiciliate\nbiciliated\nbicipital\nbicipitous\nbicircular\nbicirrose\nbick\nbicker\nbickerer\nbickern\nbiclavate\nbiclinium\nbicollateral\nbicollaterality\nbicolligate\nbicolor\nbicolored\nbicolorous\nbiconcave\nbiconcavity\nbicondylar\nbicone\nbiconic\nbiconical\nbiconically\nbiconjugate\nbiconsonantal\nbiconvex\nbicorn\nbicornate\nbicorne\nbicorned\nbicornous\nbicornuate\nbicornuous\nbicornute\nbicorporal\nbicorporate\nbicorporeal\nbicostate\nbicrenate\nbicrescentic\nbicrofarad\nbicron\nbicrural\nbicursal\nbicuspid\nbicuspidate\nbicyanide\nbicycle\nbicycler\nbicyclic\nbicyclism\nbicyclist\nbicyclo\nbicycloheptane\nbicylindrical\nbid\nbidactyl\nbidactyle\nbidactylous\nbidar\nbidarka\nbidcock\nbiddable\nbiddableness\nbiddably\nbiddance\nBiddelian\nbidder\nbidding\nBiddulphia\nBiddulphiaceae\nBiddy\nbiddy\nbide\nBidens\nbident\nbidental\nbidentate\nbidented\nbidential\nbidenticulate\nbider\nbidet\nbidigitate\nbidimensional\nbiding\nbidirectional\nbidiurnal\nBidpai\nbidri\nbiduous\nbieberite\nBiedermeier\nbield\nbieldy\nbielectrolysis\nbielenite\nBielid\nBielorouss\nbien\nbienly\nbienness\nbiennia\nbiennial\nbiennially\nbiennium\nbier\nbierbalk\nbiethnic\nbietle\nbifacial\nbifanged\nbifara\nbifarious\nbifariously\nbifer\nbiferous\nbiff\nbiffin\nbifid\nbifidate\nbifidated\nbifidity\nbifidly\nbifilar\nbifilarly\nbifistular\nbiflabellate\nbiflagellate\nbiflecnode\nbiflected\nbiflex\nbiflorate\nbiflorous\nbifluoride\nbifocal\nbifoil\nbifold\nbifolia\nbifoliate\nbifoliolate\nbifolium\nbiforked\nbiform\nbiformed\nbiformity\nbiforous\nbifront\nbifrontal\nbifronted\nbifurcal\nbifurcate\nbifurcated\nbifurcately\nbifurcation\nbig\nbiga\nbigamic\nbigamist\nbigamistic\nbigamize\nbigamous\nbigamously\nbigamy\nbigarade\nbigaroon\nbigarreau\nbigbloom\nbigemina\nbigeminal\nbigeminate\nbigeminated\nbigeminum\nbigener\nbigeneric\nbigential\nbigeye\nbigg\nbiggah\nbiggen\nbigger\nbiggest\nbiggin\nbiggish\nbiggonet\nbigha\nbighead\nbighearted\nbigheartedness\nbighorn\nbight\nbiglandular\nbiglenoid\nbiglot\nbigmouth\nbigmouthed\nbigness\nBignonia\nBignoniaceae\nbignoniaceous\nbignoniad\nbignou\nbigoniac\nbigonial\nbigot\nbigoted\nbigotedly\nbigotish\nbigotry\nbigotty\nbigroot\nbigthatch\nbiguanide\nbiguttate\nbiguttulate\nbigwig\nbigwigged\nbigwiggedness\nbigwiggery\nbigwiggism\nBihai\nBiham\nbihamate\nBihari\nbiharmonic\nbihourly\nbihydrazine\nbija\nbijasal\nbijou\nbijouterie\nbijoux\nbijugate\nbijugular\nbike\nbikh\nbikhaconitine\nbikini\nBikol\nBikram\nBikukulla\nBilaan\nbilabe\nbilabial\nbilabiate\nbilalo\nbilamellar\nbilamellate\nbilamellated\nbilaminar\nbilaminate\nbilaminated\nbilander\nbilateral\nbilateralism\nbilaterality\nbilaterally\nbilateralness\nBilati\nbilberry\nbilbie\nbilbo\nbilboquet\nbilby\nbilch\nbilcock\nbildar\nbilders\nbile\nbilestone\nbilge\nbilgy\nBilharzia\nbilharzial\nbilharziasis\nbilharzic\nbilharziosis\nbilianic\nbiliary\nbiliate\nbiliation\nbilic\nbilicyanin\nbilifaction\nbiliferous\nbilification\nbilifuscin\nbilify\nbilihumin\nbilimbi\nbilimbing\nbiliment\nBilin\nbilinear\nbilineate\nbilingual\nbilingualism\nbilingually\nbilinguar\nbilinguist\nbilinigrin\nbilinite\nbilio\nbilious\nbiliously\nbiliousness\nbiliprasin\nbilipurpurin\nbilipyrrhin\nbilirubin\nbilirubinemia\nbilirubinic\nbilirubinuria\nbiliteral\nbiliteralism\nbilith\nbilithon\nbiliverdic\nbiliverdin\nbilixanthin\nbilk\nbilker\nBill\nbill\nbilla\nbillable\nbillabong\nbillback\nbillbeetle\nBillbergia\nbillboard\nbillbroking\nbillbug\nbilled\nbiller\nbillet\nbilleter\nbillethead\nbilleting\nbilletwood\nbillety\nbillfish\nbillfold\nbillhead\nbillheading\nbillholder\nbillhook\nbillian\nbilliard\nbilliardist\nbilliardly\nbilliards\nBillie\nBilliken\nbillikin\nbilling\nbillingsgate\nbillion\nbillionaire\nbillionism\nbillionth\nbillitonite\nBilljim\nbillman\nbillon\nbillot\nbillow\nbillowiness\nbillowy\nbillposter\nbillposting\nbillsticker\nbillsticking\nBilly\nbilly\nbillyboy\nbillycan\nbillycock\nbillyer\nbillyhood\nbillywix\nbilo\nbilobated\nbilobe\nbilobed\nbilobiate\nbilobular\nbilocation\nbilocellate\nbilocular\nbiloculate\nBiloculina\nbiloculine\nbilophodont\nBiloxi\nbilsh\nBilskirnir\nbilsted\nbiltong\nbiltongue\nBim\nbimaculate\nbimaculated\nbimalar\nBimana\nbimanal\nbimane\nbimanous\nbimanual\nbimanually\nbimarginate\nbimarine\nbimastic\nbimastism\nbimastoid\nbimasty\nbimaxillary\nbimbil\nBimbisara\nbimeby\nbimensal\nbimester\nbimestrial\nbimetalic\nbimetallism\nbimetallist\nbimetallistic\nbimillenary\nbimillennium\nbimillionaire\nBimini\nBimmeler\nbimodal\nbimodality\nbimolecular\nbimonthly\nbimotored\nbimotors\nbimucronate\nbimuscular\nbin\nbinal\nbinaphthyl\nbinarium\nbinary\nbinate\nbinately\nbination\nbinational\nbinaural\nbinauricular\nbinbashi\nbind\nbinder\nbindery\nbindheimite\nbinding\nbindingly\nbindingness\nbindle\nbindlet\nbindoree\nbindweb\nbindweed\nbindwith\nbindwood\nbine\nbinervate\nbineweed\nbing\nbinge\nbingey\nbinghi\nbingle\nbingo\nbingy\nbinh\nBini\nbiniodide\nBinitarian\nBinitarianism\nbink\nbinman\nbinna\nbinnacle\nbinning\nbinnite\nbinnogue\nbino\nbinocle\nbinocular\nbinocularity\nbinocularly\nbinoculate\nbinodal\nbinode\nbinodose\nbinodous\nbinomenclature\nbinomial\nbinomialism\nbinomially\nbinominal\nbinominated\nbinominous\nbinormal\nbinotic\nbinotonous\nbinous\nbinoxalate\nbinoxide\nbint\nbintangor\nbinturong\nbinuclear\nbinucleate\nbinucleated\nbinucleolate\nbinukau\nBinzuru\nbiobibliographical\nbiobibliography\nbioblast\nbioblastic\nbiocatalyst\nbiocellate\nbiocentric\nbiochemic\nbiochemical\nbiochemically\nbiochemics\nbiochemist\nbiochemistry\nbiochemy\nbiochore\nbioclimatic\nbioclimatology\nbiocoenose\nbiocoenosis\nbiocoenotic\nbiocycle\nbiod\nbiodynamic\nbiodynamical\nbiodynamics\nbiodyne\nbioecologic\nbioecological\nbioecologically\nbioecologist\nbioecology\nbiogen\nbiogenase\nbiogenesis\nbiogenesist\nbiogenetic\nbiogenetical\nbiogenetically\nbiogenetics\nbiogenous\nbiogeny\nbiogeochemistry\nbiogeographic\nbiogeographical\nbiogeographically\nbiogeography\nbiognosis\nbiograph\nbiographee\nbiographer\nbiographic\nbiographical\nbiographically\nbiographist\nbiographize\nbiography\nbioherm\nbiokinetics\nbiolinguistics\nbiolith\nbiologese\nbiologic\nbiological\nbiologically\nbiologicohumanistic\nbiologism\nbiologist\nbiologize\nbiology\nbioluminescence\nbioluminescent\nbiolysis\nbiolytic\nbiomagnetic\nbiomagnetism\nbiomathematics\nbiome\nbiomechanical\nbiomechanics\nbiometeorology\nbiometer\nbiometric\nbiometrical\nbiometrically\nbiometrician\nbiometricist\nbiometrics\nbiometry\nbiomicroscopy\nbion\nbionergy\nbionomic\nbionomical\nbionomically\nbionomics\nbionomist\nbionomy\nbiophagism\nbiophagous\nbiophagy\nbiophilous\nbiophore\nbiophotophone\nbiophysical\nbiophysicochemical\nbiophysics\nbiophysiography\nbiophysiological\nbiophysiologist\nbiophysiology\nbiophyte\nbioplasm\nbioplasmic\nbioplast\nbioplastic\nbioprecipitation\nbiopsic\nbiopsy\nbiopsychic\nbiopsychical\nbiopsychological\nbiopsychologist\nbiopsychology\nbiopyribole\nbioral\nbiorbital\nbiordinal\nbioreaction\nbiorgan\nbios\nbioscope\nbioscopic\nbioscopy\nbiose\nbiosis\nbiosocial\nbiosociological\nbiosphere\nbiostatic\nbiostatical\nbiostatics\nbiostatistics\nbiosterin\nbiosterol\nbiostratigraphy\nbiosynthesis\nbiosynthetic\nbiosystematic\nbiosystematics\nbiosystematist\nbiosystematy\nBiota\nbiota\nbiotaxy\nbiotechnics\nbiotic\nbiotical\nbiotics\nbiotin\nbiotite\nbiotitic\nbiotome\nbiotomy\nbiotope\nbiotype\nbiotypic\nbiovular\nbiovulate\nbioxalate\nbioxide\nbipack\nbipaleolate\nBipaliidae\nBipalium\nbipalmate\nbiparasitic\nbiparental\nbiparietal\nbiparous\nbiparted\nbipartible\nbipartient\nbipartile\nbipartisan\nbipartisanship\nbipartite\nbipartitely\nbipartition\nbiparty\nbipaschal\nbipectinate\nbipectinated\nbiped\nbipedal\nbipedality\nbipedism\nbipeltate\nbipennate\nbipennated\nbipenniform\nbiperforate\nbipersonal\nbipetalous\nbiphase\nbiphasic\nbiphenol\nbiphenyl\nbiphenylene\nbipinnaria\nbipinnate\nbipinnated\nbipinnately\nbipinnatifid\nbipinnatiparted\nbipinnatipartite\nbipinnatisect\nbipinnatisected\nbiplanal\nbiplanar\nbiplane\nbiplicate\nbiplicity\nbiplosion\nbiplosive\nbipod\nbipolar\nbipolarity\nbipolarize\nBipont\nBipontine\nbiporose\nbiporous\nbiprism\nbiprong\nbipunctal\nbipunctate\nbipunctual\nbipupillate\nbipyramid\nbipyramidal\nbipyridine\nbipyridyl\nbiquadrantal\nbiquadrate\nbiquadratic\nbiquarterly\nbiquartz\nbiquintile\nbiracial\nbiracialism\nbiradial\nbiradiate\nbiradiated\nbiramous\nbirational\nbirch\nbirchbark\nbirchen\nbirching\nbirchman\nbirchwood\nbird\nbirdbander\nbirdbanding\nbirdbath\nbirdberry\nbirdcall\nbirdcatcher\nbirdcatching\nbirdclapper\nbirdcraft\nbirddom\nbirdeen\nbirder\nbirdglue\nbirdhood\nbirdhouse\nbirdie\nbirdikin\nbirding\nbirdland\nbirdless\nbirdlet\nbirdlike\nbirdlime\nbirdling\nbirdlore\nbirdman\nbirdmouthed\nbirdnest\nbirdnester\nbirdseed\nbirdstone\nbirdweed\nbirdwise\nbirdwoman\nbirdy\nbirectangular\nbirefracting\nbirefraction\nbirefractive\nbirefringence\nbirefringent\nbireme\nbiretta\nBirgus\nbiri\nbiriba\nbirimose\nbirk\nbirken\nBirkenhead\nBirkenia\nBirkeniidae\nbirkie\nbirkremite\nbirl\nbirle\nbirler\nbirlie\nbirlieman\nbirlinn\nbirma\nBirmingham\nBirminghamize\nbirn\nbirny\nBiron\nbirostrate\nbirostrated\nbirotation\nbirotatory\nbirr\nbirse\nbirsle\nbirsy\nbirth\nbirthbed\nbirthday\nbirthland\nbirthless\nbirthmark\nbirthmate\nbirthnight\nbirthplace\nbirthright\nbirthroot\nbirthstone\nbirthstool\nbirthwort\nbirthy\nbis\nbisabol\nbisaccate\nbisacromial\nbisalt\nBisaltae\nbisantler\nbisaxillary\nbisbeeite\nbiscacha\nBiscanism\nBiscayan\nBiscayanism\nbiscayen\nBiscayner\nbischofite\nbiscotin\nbiscuit\nbiscuiting\nbiscuitlike\nbiscuitmaker\nbiscuitmaking\nbiscuitroot\nbiscuitry\nbisdiapason\nbisdimethylamino\nbisect\nbisection\nbisectional\nbisectionally\nbisector\nbisectrices\nbisectrix\nbisegment\nbiseptate\nbiserial\nbiserially\nbiseriate\nbiseriately\nbiserrate\nbisetose\nbisetous\nbisexed\nbisext\nbisexual\nbisexualism\nbisexuality\nbisexually\nbisexuous\nbisglyoxaline\nBishareen\nBishari\nBisharin\nbishop\nbishopdom\nbishopess\nbishopful\nbishophood\nbishopless\nbishoplet\nbishoplike\nbishopling\nbishopric\nbishopship\nbishopweed\nbisiliac\nbisilicate\nbisiliquous\nbisimine\nbisinuate\nbisinuation\nbisischiadic\nbisischiatic\nBisley\nbislings\nbismar\nBismarck\nBismarckian\nBismarckianism\nbismarine\nbismerpund\nbismillah\nbismite\nBismosol\nbismuth\nbismuthal\nbismuthate\nbismuthic\nbismuthide\nbismuthiferous\nbismuthine\nbismuthinite\nbismuthite\nbismuthous\nbismuthyl\nbismutite\nbismutoplagionite\nbismutosmaltite\nbismutosphaerite\nbisnaga\nbison\nbisonant\nbisontine\nbisphenoid\nbispinose\nbispinous\nbispore\nbisporous\nbisque\nbisquette\nbissext\nbissextile\nbisson\nbistate\nbistephanic\nbister\nbistered\nbistetrazole\nbisti\nbistipular\nbistipulate\nbistipuled\nbistort\nBistorta\nbistournage\nbistoury\nbistratal\nbistratose\nbistriate\nbistriazole\nbistro\nbisubstituted\nbisubstitution\nbisulcate\nbisulfid\nbisulphate\nbisulphide\nbisulphite\nbisyllabic\nbisyllabism\nbisymmetric\nbisymmetrical\nbisymmetrically\nbisymmetry\nbit\nbitable\nbitangent\nbitangential\nbitanhol\nbitartrate\nbitbrace\nbitch\nbite\nbitemporal\nbitentaculate\nbiter\nbiternate\nbiternately\nbitesheep\nbitewing\nbitheism\nBithynian\nbiti\nbiting\nbitingly\nbitingness\nBitis\nbitless\nbito\nbitolyl\nbitonality\nbitreadle\nbitripartite\nbitripinnatifid\nbitriseptate\nbitrochanteric\nbitstock\nbitstone\nbitt\nbitted\nbitten\nbitter\nbitterbark\nbitterblain\nbitterbloom\nbitterbur\nbitterbush\nbitterful\nbitterhead\nbitterhearted\nbitterheartedness\nbittering\nbitterish\nbitterishness\nbitterless\nbitterling\nbitterly\nbittern\nbitterness\nbitternut\nbitterroot\nbitters\nbittersweet\nbitterweed\nbitterwood\nbitterworm\nbitterwort\nbitthead\nbittie\nBittium\nbittock\nbitty\nbitubercular\nbituberculate\nbituberculated\nBitulithic\nbitulithic\nbitume\nbitumed\nbitumen\nbituminate\nbituminiferous\nbituminization\nbituminize\nbituminoid\nbituminous\nbitwise\nbityite\nbitypic\nbiune\nbiunial\nbiunity\nbiunivocal\nbiurate\nbiurea\nbiuret\nbivalence\nbivalency\nbivalent\nbivalve\nbivalved\nBivalvia\nbivalvian\nbivalvous\nbivalvular\nbivariant\nbivariate\nbivascular\nbivaulted\nbivector\nbiventer\nbiventral\nbiverbal\nbivinyl\nbivious\nbivittate\nbivocal\nbivocalized\nbivoltine\nbivoluminous\nbivouac\nbiwa\nbiweekly\nbiwinter\nBixa\nBixaceae\nbixaceous\nbixbyite\nbixin\nbiyearly\nbiz\nbizardite\nbizarre\nbizarrely\nbizarreness\nBizen\nbizet\nbizonal\nbizone\nBizonia\nbizygomatic\nbizz\nBjorne\nblab\nblabber\nblabberer\nblachong\nblack\nblackacre\nblackamoor\nblackback\nblackball\nblackballer\nblackband\nBlackbeard\nblackbelly\nblackberry\nblackbine\nblackbird\nblackbirder\nblackbirding\nblackboard\nblackboy\nblackbreast\nblackbush\nblackbutt\nblackcap\nblackcoat\nblackcock\nblackdamp\nblacken\nblackener\nblackening\nblacker\nblacketeer\nblackey\nblackeyes\nblackface\nBlackfeet\nblackfellow\nblackfellows\nblackfin\nblackfire\nblackfish\nblackfisher\nblackfishing\nBlackfoot\nblackfoot\nBlackfriars\nblackguard\nblackguardism\nblackguardize\nblackguardly\nblackguardry\nBlackhander\nblackhead\nblackheads\nblackheart\nblackhearted\nblackheartedness\nblackie\nblacking\nblackish\nblackishly\nblackishness\nblackit\nblackjack\nblackland\nblackleg\nblackleggery\nblacklegism\nblacklegs\nblackly\nblackmail\nblackmailer\nblackneb\nblackneck\nblackness\nblacknob\nblackout\nblackpoll\nblackroot\nblackseed\nblackshirted\nblacksmith\nblacksmithing\nblackstick\nblackstrap\nblacktail\nblackthorn\nblacktongue\nblacktree\nblackwash\nblackwasher\nblackwater\nblackwood\nblackwork\nblackwort\nblacky\nblad\nbladder\nbladderet\nbladderless\nbladderlike\nbladdernose\nbladdernut\nbladderpod\nbladderseed\nbladderweed\nbladderwort\nbladdery\nblade\nbladebone\nbladed\nbladelet\nbladelike\nblader\nbladesmith\nbladewise\nblading\nbladish\nblady\nbladygrass\nblae\nblaeberry\nblaeness\nblaewort\nblaff\nblaffert\nblaflum\nblah\nblahlaut\nblain\nBlaine\nBlair\nblair\nblairmorite\nBlake\nblake\nblakeberyed\nblamable\nblamableness\nblamably\nblame\nblamed\nblameful\nblamefully\nblamefulness\nblameless\nblamelessly\nblamelessness\nblamer\nblameworthiness\nblameworthy\nblaming\nblamingly\nblan\nblanc\nblanca\nblancard\nBlanch\nblanch\nblancher\nblanching\nblanchingly\nblancmange\nblancmanger\nblanco\nbland\nblanda\nBlandfordia\nblandiloquence\nblandiloquious\nblandiloquous\nblandish\nblandisher\nblandishing\nblandishingly\nblandishment\nblandly\nblandness\nblank\nblankard\nblankbook\nblanked\nblankeel\nblanket\nblanketed\nblanketeer\nblanketflower\nblanketing\nblanketless\nblanketmaker\nblanketmaking\nblanketry\nblanketweed\nblankety\nblanking\nblankish\nBlankit\nblankite\nblankly\nblankness\nblanky\nblanque\nblanquillo\nblare\nBlarina\nblarney\nblarneyer\nblarnid\nblarny\nblart\nblas\nblase\nblash\nblashy\nBlasia\nblaspheme\nblasphemer\nblasphemous\nblasphemously\nblasphemousness\nblasphemy\nblast\nblasted\nblastema\nblastemal\nblastematic\nblastemic\nblaster\nblastful\nblasthole\nblastid\nblastie\nblasting\nblastment\nblastocarpous\nblastocheme\nblastochyle\nblastocoele\nblastocolla\nblastocyst\nblastocyte\nblastoderm\nblastodermatic\nblastodermic\nblastodisk\nblastogenesis\nblastogenetic\nblastogenic\nblastogeny\nblastogranitic\nblastoid\nBlastoidea\nblastoma\nblastomata\nblastomere\nblastomeric\nBlastomyces\nblastomycete\nBlastomycetes\nblastomycetic\nblastomycetous\nblastomycosis\nblastomycotic\nblastoneuropore\nBlastophaga\nblastophitic\nblastophoral\nblastophore\nblastophoric\nblastophthoria\nblastophthoric\nblastophyllum\nblastoporal\nblastopore\nblastoporic\nblastoporphyritic\nblastosphere\nblastospheric\nblastostylar\nblastostyle\nblastozooid\nblastplate\nblastula\nblastulae\nblastular\nblastulation\nblastule\nblasty\nblat\nblatancy\nblatant\nblatantly\nblate\nblately\nblateness\nblather\nblatherer\nblatherskite\nblathery\nblatjang\nBlatta\nblatta\nBlattariae\nblatter\nblatterer\nblatti\nblattid\nBlattidae\nblattiform\nBlattodea\nblattoid\nBlattoidea\nblaubok\nBlaugas\nblauwbok\nblaver\nblaw\nblawort\nblay\nBlayne\nblaze\nblazer\nblazing\nblazingly\nblazon\nblazoner\nblazoning\nblazonment\nblazonry\nblazy\nbleaberry\nbleach\nbleachability\nbleachable\nbleached\nbleacher\nbleacherite\nbleacherman\nbleachery\nbleachfield\nbleachground\nbleachhouse\nbleaching\nbleachman\nbleachworks\nbleachyard\nbleak\nbleakish\nbleakly\nbleakness\nbleaky\nblear\nbleared\nblearedness\nbleareye\nbleariness\nblearness\nbleary\nbleat\nbleater\nbleating\nbleatingly\nbleaty\nbleb\nblebby\nblechnoid\nBlechnum\nbleck\nblee\nbleed\nbleeder\nbleeding\nbleekbok\nbleery\nbleeze\nbleezy\nblellum\nblemish\nblemisher\nblemishment\nBlemmyes\nblench\nblencher\nblenching\nblenchingly\nblencorn\nblend\nblendcorn\nblende\nblended\nblender\nblending\nblendor\nblendure\nblendwater\nblennadenitis\nblennemesis\nblennenteria\nblennenteritis\nblenniid\nBlenniidae\nblenniiform\nBlenniiformes\nblennioid\nBlennioidea\nblennocele\nblennocystitis\nblennoemesis\nblennogenic\nblennogenous\nblennoid\nblennoma\nblennometritis\nblennophlogisma\nblennophlogosis\nblennophthalmia\nblennoptysis\nblennorrhagia\nblennorrhagic\nblennorrhea\nblennorrheal\nblennorrhinia\nblennosis\nblennostasis\nblennostatic\nblennothorax\nblennotorrhea\nblennuria\nblenny\nblennymenitis\nblent\nbleo\nblephara\nblepharadenitis\nblepharal\nblepharanthracosis\nblepharedema\nblepharelcosis\nblepharemphysema\nBlephariglottis\nblepharism\nblepharitic\nblepharitis\nblepharoadenitis\nblepharoadenoma\nblepharoatheroma\nblepharoblennorrhea\nblepharocarcinoma\nBlepharocera\nBlepharoceridae\nblepharochalasis\nblepharochromidrosis\nblepharoclonus\nblepharocoloboma\nblepharoconjunctivitis\nblepharodiastasis\nblepharodyschroia\nblepharohematidrosis\nblepharolithiasis\nblepharomelasma\nblepharoncosis\nblepharoncus\nblepharophimosis\nblepharophryplasty\nblepharophthalmia\nblepharophyma\nblepharoplast\nblepharoplastic\nblepharoplasty\nblepharoplegia\nblepharoptosis\nblepharopyorrhea\nblepharorrhaphy\nblepharospasm\nblepharospath\nblepharosphincterectomy\nblepharostat\nblepharostenosis\nblepharosymphysis\nblepharosyndesmitis\nblepharosynechia\nblepharotomy\nblepharydatis\nBlephillia\nblesbok\nblesbuck\nbless\nblessed\nblessedly\nblessedness\nblesser\nblessing\nblessingly\nblest\nblet\nbletheration\nBletia\nBletilla\nblewits\nblibe\nblick\nblickey\nBlighia\nblight\nblightbird\nblighted\nblighter\nblighting\nblightingly\nblighty\nblimbing\nblimp\nblimy\nblind\nblindage\nblindball\nblinded\nblindedly\nblinder\nblindeyes\nblindfast\nblindfish\nblindfold\nblindfolded\nblindfoldedness\nblindfolder\nblindfoldly\nblinding\nblindingly\nblindish\nblindless\nblindling\nblindly\nblindness\nblindstory\nblindweed\nblindworm\nblink\nblinkard\nblinked\nblinker\nblinkered\nblinking\nblinkingly\nblinks\nblinky\nblinter\nblintze\nblip\nbliss\nblissful\nblissfully\nblissfulness\nblissless\nblissom\nblister\nblistered\nblistering\nblisteringly\nblisterweed\nblisterwort\nblistery\nblite\nblithe\nblithebread\nblitheful\nblithefully\nblithehearted\nblithelike\nblithely\nblithemeat\nblithen\nblitheness\nblither\nblithering\nblithesome\nblithesomely\nblithesomeness\nblitter\nBlitum\nblitz\nblitzbuggy\nblitzkrieg\nblizz\nblizzard\nblizzardly\nblizzardous\nblizzardy\nblo\nbloat\nbloated\nbloatedness\nbloater\nbloating\nblob\nblobbed\nblobber\nblobby\nbloc\nblock\nblockade\nblockader\nblockage\nblockbuster\nblocked\nblocker\nblockhead\nblockheaded\nblockheadedly\nblockheadedness\nblockheadish\nblockheadishness\nblockheadism\nblockholer\nblockhouse\nblockiness\nblocking\nblockish\nblockishly\nblockishness\nblocklayer\nblocklike\nblockmaker\nblockmaking\nblockman\nblockpate\nblockship\nblocky\nblodite\nbloke\nblolly\nblomstrandine\nblonde\nblondeness\nblondine\nblood\nbloodalley\nbloodalp\nbloodbeat\nbloodberry\nbloodbird\nbloodcurdler\nbloodcurdling\nblooddrop\nblooddrops\nblooded\nbloodfin\nbloodflower\nbloodguilt\nbloodguiltiness\nbloodguiltless\nbloodguilty\nbloodhound\nbloodied\nbloodily\nbloodiness\nbloodleaf\nbloodless\nbloodlessly\nbloodlessness\nbloodletter\nbloodletting\nbloodline\nbloodmobile\nbloodmonger\nbloodnoun\nbloodripe\nbloodripeness\nbloodroot\nbloodshed\nbloodshedder\nbloodshedding\nbloodshot\nbloodshotten\nbloodspiller\nbloodspilling\nbloodstain\nbloodstained\nbloodstainedness\nbloodstanch\nbloodstock\nbloodstone\nbloodstroke\nbloodsuck\nbloodsucker\nbloodsucking\nbloodthirst\nbloodthirster\nbloodthirstily\nbloodthirstiness\nbloodthirsting\nbloodthirsty\nbloodweed\nbloodwite\nbloodwood\nbloodworm\nbloodwort\nbloodworthy\nbloody\nbloodybones\nblooey\nbloom\nbloomage\nbloomer\nBloomeria\nbloomerism\nbloomers\nbloomery\nbloomfell\nblooming\nbloomingly\nbloomingness\nbloomkin\nbloomless\nBloomsburian\nBloomsbury\nbloomy\nbloop\nblooper\nblooping\nblore\nblosmy\nblossom\nblossombill\nblossomed\nblossomhead\nblossomless\nblossomry\nblossomtime\nblossomy\nblot\nblotch\nblotched\nblotchy\nblotless\nblotter\nblottesque\nblottesquely\nblotting\nblottingly\nblotto\nblotty\nbloubiskop\nblouse\nbloused\nblousing\nblout\nblow\nblowback\nblowball\nblowcock\nblowdown\nblowen\nblower\nblowfish\nblowfly\nblowgun\nblowhard\nblowhole\nblowiness\nblowing\nblowings\nblowiron\nblowlamp\nblowline\nblown\nblowoff\nblowout\nblowpipe\nblowpoint\nblowproof\nblowspray\nblowth\nblowtorch\nblowtube\nblowup\nblowy\nblowze\nblowzed\nblowzing\nblowzy\nblub\nblubber\nblubberer\nblubbering\nblubberingly\nblubberman\nblubberous\nblubbery\nblucher\nbludgeon\nbludgeoned\nbludgeoneer\nbludgeoner\nblue\nblueback\nbluebead\nBluebeard\nbluebeard\nBluebeardism\nbluebell\nbluebelled\nblueberry\nbluebill\nbluebird\nblueblaw\nbluebonnet\nbluebook\nbluebottle\nbluebreast\nbluebuck\nbluebush\nbluebutton\nbluecap\nbluecoat\nbluecup\nbluefish\nbluegill\nbluegown\nbluegrass\nbluehearted\nbluehearts\nblueing\nbluejack\nbluejacket\nbluejoint\nblueleg\nbluelegs\nbluely\nblueness\nbluenose\nBluenoser\nblueprint\nblueprinter\nbluer\nblues\nbluesides\nbluestem\nbluestocking\nbluestockingish\nbluestockingism\nbluestone\nbluestoner\nbluet\nbluethroat\nbluetongue\nbluetop\nblueweed\nbluewing\nbluewood\nbluey\nbluff\nbluffable\nbluffer\nbluffly\nbluffness\nbluffy\nbluggy\nbluing\nbluish\nbluishness\nbluism\nBlumea\nblunder\nblunderbuss\nblunderer\nblunderful\nblunderhead\nblunderheaded\nblunderheadedness\nblundering\nblunderingly\nblundersome\nblunge\nblunger\nblunk\nblunker\nblunks\nblunnen\nblunt\nblunter\nblunthead\nblunthearted\nbluntie\nbluntish\nbluntly\nbluntness\nblup\nblur\nblurb\nblurbist\nblurred\nblurredness\nblurrer\nblurry\nblurt\nblush\nblusher\nblushful\nblushfully\nblushfulness\nblushiness\nblushing\nblushingly\nblushless\nblushwort\nblushy\nbluster\nblusteration\nblusterer\nblustering\nblusteringly\nblusterous\nblusterously\nblustery\nblype\nbo\nboa\nBoaedon\nboagane\nBoanbura\nBoanerges\nboanergism\nboar\nboarcite\nboard\nboardable\nboarder\nboarding\nboardinghouse\nboardlike\nboardly\nboardman\nboardwalk\nboardy\nboarfish\nboarhound\nboarish\nboarishly\nboarishness\nboarship\nboarskin\nboarspear\nboarstaff\nboarwood\nboast\nboaster\nboastful\nboastfully\nboastfulness\nboasting\nboastive\nboastless\nboat\nboatable\nboatage\nboatbill\nboatbuilder\nboatbuilding\nboater\nboatfalls\nboatful\nboathead\nboatheader\nboathouse\nboatie\nboating\nboatkeeper\nboatless\nboatlike\nboatlip\nboatload\nboatloader\nboatloading\nboatly\nboatman\nboatmanship\nboatmaster\nboatowner\nboatsetter\nboatshop\nboatside\nboatsman\nboatswain\nboattail\nboatward\nboatwise\nboatwoman\nboatwright\nBob\nbob\nboba\nbobac\nBobadil\nBobadilian\nBobadilish\nBobadilism\nbobbed\nbobber\nbobbery\nBobbie\nbobbin\nbobbiner\nbobbinet\nbobbing\nBobbinite\nbobbinwork\nbobbish\nbobbishly\nbobble\nBobby\nbobby\nbobcat\nbobcoat\nbobeche\nbobfly\nbobierrite\nbobization\nbobjerom\nbobo\nbobolink\nbobotie\nbobsled\nbobsleigh\nbobstay\nbobtail\nbobtailed\nbobwhite\nbobwood\nbocaccio\nbocal\nbocardo\nbocasine\nbocca\nboccale\nboccarella\nboccaro\nbocce\nBocconia\nboce\nbocedization\nBoche\nbocher\nBochism\nbock\nbockerel\nbockeret\nbocking\nbocoy\nbod\nbodach\nbodacious\nbodaciously\nbode\nbodeful\nbodega\nbodement\nboden\nbodenbenderite\nboder\nbodewash\nbodge\nbodger\nbodgery\nbodhi\nbodhisattva\nbodice\nbodiced\nbodicemaker\nbodicemaking\nbodied\nbodier\nbodieron\nbodikin\nbodiless\nbodilessness\nbodiliness\nbodily\nbodiment\nboding\nbodingly\nbodkin\nbodkinwise\nbodle\nBodleian\nBodo\nbodock\nBodoni\nbody\nbodybending\nbodybuilder\nbodyguard\nbodyhood\nbodyless\nbodymaker\nbodymaking\nbodyplate\nbodywise\nbodywood\nbodywork\nBoebera\nBoedromion\nBoehmenism\nBoehmenist\nBoehmenite\nBoehmeria\nboeotarch\nBoeotian\nBoeotic\nBoer\nBoerdom\nBoerhavia\nBoethian\nBoethusian\nbog\nboga\nbogan\nbogard\nbogart\nbogberry\nbogey\nbogeyman\nboggart\nboggin\nbogginess\nboggish\nboggle\nbogglebo\nboggler\nboggy\nboghole\nbogie\nbogieman\nbogier\nBogijiab\nbogland\nboglander\nbogle\nbogledom\nboglet\nbogman\nbogmire\nBogo\nbogo\nBogomil\nBogomile\nBogomilian\nbogong\nBogota\nbogsucker\nbogtrot\nbogtrotter\nbogtrotting\nbogue\nbogum\nbogus\nbogusness\nbogway\nbogwood\nbogwort\nbogy\nbogydom\nbogyism\nbogyland\nBohairic\nbohawn\nbohea\nBohemia\nBohemian\nBohemianism\nbohemium\nbohereen\nbohireen\nboho\nbohor\nbohunk\nboid\nBoidae\nBoii\nBoiko\nboil\nboilable\nboildown\nboiled\nboiler\nboilerful\nboilerhouse\nboilerless\nboilermaker\nboilermaking\nboilerman\nboilersmith\nboilerworks\nboilery\nboiling\nboilinglike\nboilingly\nboilover\nboily\nBois\nboist\nboisterous\nboisterously\nboisterousness\nbojite\nbojo\nbokadam\nbokard\nbokark\nboke\nBokhara\nBokharan\nbokom\nbola\nBolag\nbolar\nBolboxalis\nbold\nbolden\nBolderian\nboldhearted\nboldine\nboldly\nboldness\nboldo\nBoldu\nbole\nbolection\nbolectioned\nboled\nboleite\nBolelia\nbolelike\nbolero\nBoletaceae\nboletaceous\nbolete\nBoletus\nboleweed\nbolewort\nbolide\nbolimba\nbolis\nbolivar\nbolivarite\nbolivia\nBolivian\nboliviano\nbolk\nboll\nBollandist\nbollard\nbolled\nboller\nbolling\nbollock\nbollworm\nbolly\nBolo\nbolo\nBologna\nBolognan\nBolognese\nbolograph\nbolographic\nbolographically\nbolography\nBoloism\nboloman\nbolometer\nbolometric\nboloney\nboloroot\nBolshevik\nBolsheviki\nBolshevikian\nBolshevism\nBolshevist\nBolshevistic\nBolshevistically\nBolshevize\nBolshie\nbolson\nbolster\nbolsterer\nbolsterwork\nbolt\nboltage\nboltant\nboltcutter\nboltel\nbolter\nbolthead\nboltheader\nboltheading\nbolthole\nbolti\nbolting\nboltless\nboltlike\nboltmaker\nboltmaking\nBoltonia\nboltonite\nboltrope\nboltsmith\nboltstrake\nboltuprightness\nboltwork\nbolus\nBolyaian\nbom\nboma\nBomarea\nbomb\nbombable\nBombacaceae\nbombacaceous\nbombard\nbombarde\nbombardelle\nbombarder\nbombardier\nbombardment\nbombardon\nbombast\nbombaster\nbombastic\nbombastically\nbombastry\nBombax\nBombay\nbombazet\nbombazine\nbombed\nbomber\nbombiccite\nBombidae\nbombilate\nbombilation\nBombinae\nbombinate\nbombination\nbombo\nbombola\nbombonne\nbombous\nbombproof\nbombshell\nbombsight\nBombus\nbombycid\nBombycidae\nbombyciform\nBombycilla\nBombycillidae\nBombycina\nbombycine\nBombyliidae\nBombyx\nBon\nbon\nbonaci\nbonagh\nbonaght\nbonair\nbonairly\nbonairness\nbonally\nbonang\nbonanza\nBonapartean\nBonapartism\nBonapartist\nBonasa\nbonasus\nbonaventure\nBonaveria\nbonavist\nBonbo\nbonbon\nbonce\nbond\nbondage\nbondager\nbondar\nbonded\nBondelswarts\nbonder\nbonderman\nbondfolk\nbondholder\nbondholding\nbonding\nbondless\nbondman\nbondmanship\nbondsman\nbondstone\nbondswoman\nbonduc\nbondwoman\nbone\nboneache\nbonebinder\nboneblack\nbonebreaker\nboned\nbonedog\nbonefish\nboneflower\nbonehead\nboneheaded\nboneless\nbonelessly\nbonelessness\nbonelet\nbonelike\nBonellia\nboner\nboneset\nbonesetter\nbonesetting\nboneshaker\nboneshaw\nbonetail\nbonewood\nbonework\nbonewort\nBoney\nbonfire\nbong\nBongo\nbongo\nbonhomie\nBoni\nboniata\nBoniface\nbonification\nboniform\nbonify\nboniness\nboninite\nbonitarian\nbonitary\nbonito\nbonk\nbonnaz\nbonnet\nbonneted\nbonneter\nbonnethead\nbonnetless\nbonnetlike\nbonnetman\nbonnibel\nBonnie\nbonnily\nbonniness\nBonny\nbonny\nbonnyclabber\nbonnyish\nbonnyvis\nBononian\nbonsai\nbonspiel\nbontebok\nbontebuck\nbontequagga\nBontok\nbonus\nbonxie\nbony\nbonyfish\nbonze\nbonzer\nbonzery\nbonzian\nboo\nboob\nboobery\nboobily\nboobook\nbooby\nboobyalla\nboobyish\nboobyism\nbood\nboodie\nboodle\nboodledom\nboodleism\nboodleize\nboodler\nboody\nboof\nbooger\nboogiewoogie\nboohoo\nboojum\nbook\nbookable\nbookbinder\nbookbindery\nbookbinding\nbookboard\nbookcase\nbookcraft\nbookdealer\nbookdom\nbooked\nbooker\nbookery\nbookfold\nbookful\nbookholder\nbookhood\nbookie\nbookiness\nbooking\nbookish\nbookishly\nbookishness\nbookism\nbookkeeper\nbookkeeping\nbookland\nbookless\nbooklet\nbooklike\nbookling\nbooklore\nbooklover\nbookmaker\nbookmaking\nBookman\nbookman\nbookmark\nbookmarker\nbookmate\nbookmobile\nbookmonger\nbookplate\nbookpress\nbookrack\nbookrest\nbookroom\nbookseller\nbooksellerish\nbooksellerism\nbookselling\nbookshelf\nbookshop\nbookstack\nbookstall\nbookstand\nbookstore\nbookward\nbookwards\nbookways\nbookwise\nbookwork\nbookworm\nbookwright\nbooky\nbool\nBoolian\nbooly\nboolya\nboom\nboomable\nboomage\nboomah\nboomboat\nboomdas\nboomer\nboomerang\nbooming\nboomingly\nboomless\nboomlet\nboomorah\nboomslang\nboomslange\nboomster\nboomy\nboon\nboondock\nboondocks\nboondoggle\nboondoggler\nBoone\nboonfellow\nboongary\nboonk\nboonless\nBoophilus\nboopis\nboor\nboorish\nboorishly\nboorishness\nboort\nboose\nboost\nbooster\nboosterism\nboosy\nboot\nbootblack\nbootboy\nbooted\nbootee\nbooter\nbootery\nBootes\nbootful\nbooth\nboother\nBoothian\nboothite\nbootholder\nboothose\nBootid\nbootied\nbootikin\nbooting\nbootjack\nbootlace\nbootleg\nbootlegger\nbootlegging\nbootless\nbootlessly\nbootlessness\nbootlick\nbootlicker\nbootmaker\nbootmaking\nboots\nbootstrap\nbooty\nbootyless\nbooze\nboozed\nboozer\nboozily\nbooziness\nboozy\nbop\nbopeep\nboppist\nbopyrid\nBopyridae\nbopyridian\nBopyrus\nbor\nbora\nborable\nborachio\nboracic\nboraciferous\nboracous\nborage\nBoraginaceae\nboraginaceous\nBorago\nBorak\nborak\nboral\nBoran\nBorana\nBorani\nborasca\nborasque\nBorassus\nborate\nborax\nBorboridae\nBorborus\nborborygmic\nborborygmus\nbord\nbordage\nbordar\nbordarius\nBordeaux\nbordel\nbordello\nborder\nbordered\nborderer\nBorderies\nbordering\nborderism\nborderland\nborderlander\nborderless\nborderline\nbordermark\nBorderside\nbordroom\nbordure\nbordured\nbore\nboreable\nboread\nBoreades\nboreal\nborealis\nborean\nBoreas\nborecole\nboredom\nboree\nboreen\nboregat\nborehole\nBoreiad\nboreism\nborele\nborer\nboresome\nBoreus\nborg\nborgh\nborghalpenny\nBorghese\nborh\nboric\nborickite\nboride\nborine\nboring\nboringly\nboringness\nBorinqueno\nBoris\nborish\nborism\nbority\nborize\nborlase\nborn\nborne\nBornean\nBorneo\nborneol\nborning\nbornite\nbornitic\nbornyl\nBoro\nboro\nBorocaine\nborocalcite\nborocarbide\nborocitrate\nborofluohydric\nborofluoric\nborofluoride\nborofluorin\nboroglycerate\nboroglyceride\nboroglycerine\nborolanite\nboron\nboronatrocalcite\nBoronia\nboronic\nborophenol\nborophenylic\nBororo\nBororoan\nborosalicylate\nborosalicylic\nborosilicate\nborosilicic\nborotungstate\nborotungstic\nborough\nboroughlet\nboroughmaster\nboroughmonger\nboroughmongering\nboroughmongery\nboroughship\nborowolframic\nborracha\nborrel\nBorrelia\nBorrelomycetaceae\nBorreria\nBorrichia\nBorromean\nBorrovian\nborrow\nborrowable\nborrower\nborrowing\nborsch\nborscht\nborsholder\nborsht\nborstall\nbort\nbortsch\nborty\nbortz\nBoruca\nBorussian\nborwort\nboryl\nBorzicactus\nborzoi\nBos\nBosc\nboscage\nbosch\nboschbok\nBoschneger\nboschvark\nboschveld\nbose\nBoselaphus\nboser\nbosh\nBoshas\nbosher\nBosjesman\nbosjesman\nbosk\nbosker\nbosket\nboskiness\nbosky\nbosn\nBosniac\nBosniak\nBosnian\nBosnisch\nbosom\nbosomed\nbosomer\nbosomy\nBosporan\nBosporanic\nBosporian\nbosporus\nboss\nbossage\nbossdom\nbossed\nbosselated\nbosselation\nbosser\nbosset\nbossiness\nbossing\nbossism\nbosslet\nbossship\nbossy\nbostangi\nbostanji\nbosthoon\nBoston\nboston\nBostonese\nBostonian\nbostonite\nbostrychid\nBostrychidae\nbostrychoid\nbostrychoidal\nbostryx\nbosun\nBoswellia\nBoswellian\nBoswelliana\nBoswellism\nBoswellize\nbot\nbota\nbotanic\nbotanical\nbotanically\nbotanist\nbotanize\nbotanizer\nbotanomancy\nbotanophile\nbotanophilist\nbotany\nbotargo\nBotaurinae\nBotaurus\nbotch\nbotched\nbotchedly\nbotcher\nbotcherly\nbotchery\nbotchily\nbotchiness\nbotchka\nbotchy\nbote\nBotein\nbotella\nboterol\nbotfly\nboth\nbother\nbotheration\nbotherer\nbotherheaded\nbotherment\nbothersome\nbothlike\nBothnian\nBothnic\nbothrenchyma\nBothriocephalus\nBothriocidaris\nBothriolepis\nbothrium\nBothrodendron\nbothropic\nBothrops\nbothros\nbothsided\nbothsidedness\nbothway\nbothy\nBotocudo\nbotonee\nbotong\nBotrychium\nBotrydium\nBotryllidae\nBotryllus\nbotryogen\nbotryoid\nbotryoidal\nbotryoidally\nbotryolite\nBotryomyces\nbotryomycoma\nbotryomycosis\nbotryomycotic\nBotryopteriaceae\nbotryopterid\nBotryopteris\nbotryose\nbotryotherapy\nBotrytis\nbott\nbottekin\nBotticellian\nbottine\nbottle\nbottlebird\nbottled\nbottleflower\nbottleful\nbottlehead\nbottleholder\nbottlelike\nbottlemaker\nbottlemaking\nbottleman\nbottleneck\nbottlenest\nbottlenose\nbottler\nbottling\nbottom\nbottomchrome\nbottomed\nbottomer\nbottoming\nbottomless\nbottomlessly\nbottomlessness\nbottommost\nbottomry\nbottstick\nbotuliform\nbotulin\nbotulinum\nbotulism\nbotulismus\nbouchal\nbouchaleen\nboucharde\nbouche\nboucher\nboucherism\nboucherize\nbouchette\nboud\nboudoir\nbouffancy\nbouffant\nBougainvillaea\nBougainvillea\nBougainvillia\nBougainvilliidae\nbougar\nbouge\nbouget\nbough\nboughed\nboughless\nboughpot\nbought\nboughten\nboughy\nbougie\nbouillabaisse\nbouillon\nbouk\nboukit\nboulangerite\nBoulangism\nBoulangist\nboulder\nboulderhead\nbouldering\nbouldery\nboule\nboulevard\nboulevardize\nboultel\nboulter\nboulterer\nboun\nbounce\nbounceable\nbounceably\nbouncer\nbouncing\nbouncingly\nbound\nboundable\nboundary\nbounded\nboundedly\nboundedness\nbounden\nbounder\nbounding\nboundingly\nboundless\nboundlessly\nboundlessness\nboundly\nboundness\nbounteous\nbounteously\nbounteousness\nbountied\nbountiful\nbountifully\nbountifulness\nbountith\nbountree\nbounty\nbountyless\nbouquet\nbourasque\nBourbon\nbourbon\nBourbonesque\nBourbonian\nBourbonism\nBourbonist\nbourbonize\nbourd\nbourder\nbourdon\nbourette\nbourg\nbourgeois\nbourgeoise\nbourgeoisie\nbourgeoisitic\nBourignian\nBourignianism\nBourignianist\nBourignonism\nBourignonist\nbourn\nbournless\nbournonite\nbourock\nBourout\nbourse\nbourtree\nbouse\nbouser\nBoussingaultia\nboussingaultite\nboustrophedon\nboustrophedonic\nbousy\nbout\nboutade\nBouteloua\nbouto\nboutonniere\nboutylka\nBouvardia\nbouw\nbovarism\nbovarysm\nbovate\nbovenland\nbovicide\nboviculture\nbovid\nBovidae\nboviform\nbovine\nbovinely\nbovinity\nBovista\nbovoid\nbovovaccination\nbovovaccine\nbow\nbowable\nbowback\nbowbells\nbowbent\nbowboy\nBowdichia\nbowdlerism\nbowdlerization\nbowdlerize\nbowed\nbowedness\nbowel\nboweled\nbowelless\nbowellike\nbowels\nbowenite\nbower\nbowerbird\nbowerlet\nbowermaiden\nbowermay\nbowerwoman\nBowery\nbowery\nBoweryish\nbowet\nbowfin\nbowgrace\nbowhead\nbowie\nbowieful\nbowing\nbowingly\nbowk\nbowkail\nbowker\nbowknot\nbowl\nbowla\nbowleg\nbowlegged\nbowleggedness\nbowler\nbowless\nbowlful\nbowlike\nbowline\nbowling\nbowllike\nbowlmaker\nbowls\nbowly\nbowmaker\nbowmaking\nbowman\nbowpin\nbowralite\nbowshot\nbowsprit\nbowstave\nbowstring\nbowstringed\nbowwoman\nbowwood\nbowwort\nbowwow\nbowyer\nboxberry\nboxboard\nboxbush\nboxcar\nboxen\nBoxer\nboxer\nBoxerism\nboxfish\nboxful\nboxhaul\nboxhead\nboxing\nboxkeeper\nboxlike\nboxmaker\nboxmaking\nboxman\nboxthorn\nboxty\nboxwallah\nboxwood\nboxwork\nboxy\nboy\nboyang\nboyar\nboyard\nboyardism\nboyardom\nboyarism\nBoyce\nboycott\nboycottage\nboycotter\nboycottism\nBoyd\nboydom\nboyer\nboyhood\nboyish\nboyishly\nboyishness\nboyism\nboyla\nboylike\nboyology\nboysenberry\nboyship\nboza\nbozal\nbozo\nbozze\nbra\nbrab\nbrabagious\nbrabant\nBrabanter\nBrabantine\nbrabble\nbrabblement\nbrabbler\nbrabblingly\nBrabejum\nbraca\nbraccate\nbraccia\nbracciale\nbraccianite\nbraccio\nbrace\nbraced\nbracelet\nbraceleted\nbracer\nbracero\nbraces\nbrach\nBrachelytra\nbrachelytrous\nbracherer\nbrachering\nbrachet\nbrachial\nbrachialgia\nbrachialis\nBrachiata\nbrachiate\nbrachiation\nbrachiator\nbrachiferous\nbrachigerous\nBrachinus\nbrachiocephalic\nbrachiocrural\nbrachiocubital\nbrachiocyllosis\nbrachiofacial\nbrachiofaciolingual\nbrachioganoid\nBrachioganoidei\nbrachiolaria\nbrachiolarian\nbrachiopod\nBrachiopoda\nbrachiopode\nbrachiopodist\nbrachiopodous\nbrachioradial\nbrachioradialis\nbrachiorrhachidian\nbrachiorrheuma\nbrachiosaur\nBrachiosaurus\nbrachiostrophosis\nbrachiotomy\nbrachistocephali\nbrachistocephalic\nbrachistocephalous\nbrachistocephaly\nbrachistochrone\nbrachistochronic\nbrachistochronous\nbrachium\nbrachtmema\nbrachyaxis\nbrachycardia\nbrachycatalectic\nbrachycephal\nbrachycephalic\nbrachycephalism\nbrachycephalization\nbrachycephalize\nbrachycephalous\nbrachycephaly\nBrachycera\nbrachyceral\nbrachyceric\nbrachycerous\nbrachychronic\nbrachycnemic\nBrachycome\nbrachycranial\nbrachydactyl\nbrachydactylic\nbrachydactylism\nbrachydactylous\nbrachydactyly\nbrachydiagonal\nbrachydodrome\nbrachydodromous\nbrachydomal\nbrachydomatic\nbrachydome\nbrachydont\nbrachydontism\nbrachyfacial\nbrachyglossal\nbrachygnathia\nbrachygnathism\nbrachygnathous\nbrachygrapher\nbrachygraphic\nbrachygraphical\nbrachygraphy\nbrachyhieric\nbrachylogy\nbrachymetropia\nbrachymetropic\nBrachyoura\nbrachyphalangia\nBrachyphyllum\nbrachypinacoid\nbrachypinacoidal\nbrachypleural\nbrachypnea\nbrachypodine\nbrachypodous\nbrachyprism\nbrachyprosopic\nbrachypterous\nbrachypyramid\nbrachyrrhinia\nbrachysclereid\nbrachyskelic\nbrachysm\nbrachystaphylic\nBrachystegia\nbrachystochrone\nBrachystomata\nbrachystomatous\nbrachystomous\nbrachytic\nbrachytypous\nBrachyura\nbrachyural\nbrachyuran\nbrachyuranic\nbrachyure\nbrachyurous\nBrachyurus\nbracing\nbracingly\nbracingness\nbrack\nbrackebuschite\nbracken\nbrackened\nbracker\nbracket\nbracketing\nbracketwise\nbrackish\nbrackishness\nbrackmard\nbracky\nBracon\nbraconid\nBraconidae\nbract\nbractea\nbracteal\nbracteate\nbracted\nbracteiform\nbracteolate\nbracteole\nbracteose\nbractless\nbractlet\nBrad\nbrad\nbradawl\nBradbury\nBradburya\nbradenhead\nBradford\nBradley\nbradmaker\nBradshaw\nbradsot\nbradyacousia\nbradycardia\nbradycauma\nbradycinesia\nbradycrotic\nbradydactylia\nbradyesthesia\nbradyglossia\nbradykinesia\nbradykinetic\nbradylalia\nbradylexia\nbradylogia\nbradynosus\nbradypepsia\nbradypeptic\nbradyphagia\nbradyphasia\nbradyphemia\nbradyphrasia\nbradyphrenia\nbradypnea\nbradypnoea\nbradypod\nbradypode\nBradypodidae\nbradypodoid\nBradypus\nbradyseism\nbradyseismal\nbradyseismic\nbradyseismical\nbradyseismism\nbradyspermatism\nbradysphygmia\nbradystalsis\nbradyteleocinesia\nbradyteleokinesis\nbradytocia\nbradytrophic\nbradyuria\nbrae\nbraeface\nbraehead\nbraeman\nbraeside\nbrag\nbraggardism\nbraggart\nbraggartism\nbraggartly\nbraggartry\nbraggat\nbragger\nbraggery\nbragget\nbragging\nbraggingly\nbraggish\nbraggishly\nBragi\nbragite\nbragless\nbraguette\nBrahm\nBrahma\nbrahmachari\nBrahmahood\nBrahmaic\nBrahman\nBrahmana\nBrahmanaspati\nBrahmanda\nBrahmaness\nBrahmanhood\nBrahmani\nBrahmanic\nBrahmanical\nBrahmanism\nBrahmanist\nBrahmanistic\nBrahmanize\nBrahmany\nBrahmi\nBrahmic\nBrahmin\nBrahminic\nBrahminism\nBrahmoism\nBrahmsian\nBrahmsite\nBrahui\nbraid\nbraided\nbraider\nbraiding\nBraidism\nBraidist\nbrail\nBraille\nBraillist\nbrain\nbrainache\nbraincap\nbraincraft\nbrainer\nbrainfag\nbrainge\nbraininess\nbrainless\nbrainlessly\nbrainlessness\nbrainlike\nbrainpan\nbrains\nbrainsick\nbrainsickly\nbrainsickness\nbrainstone\nbrainward\nbrainwash\nbrainwasher\nbrainwashing\nbrainwater\nbrainwood\nbrainwork\nbrainworker\nbrainy\nbraird\nbraireau\nbrairo\nbraise\nbrake\nbrakeage\nbrakehand\nbrakehead\nbrakeless\nbrakeload\nbrakemaker\nbrakemaking\nbrakeman\nbraker\nbrakeroot\nbrakesman\nbrakie\nbraky\nBram\nBramantesque\nBramantip\nbramble\nbrambleberry\nbramblebush\nbrambled\nbrambling\nbrambly\nbrambrack\nBramia\nbran\nbrancard\nbranch\nbranchage\nbranched\nBranchellion\nbrancher\nbranchery\nbranchful\nbranchi\nbranchia\nbranchiae\nbranchial\nBranchiata\nbranchiate\nbranchicolous\nbranchiferous\nbranchiform\nbranchihyal\nbranchiness\nbranching\nBranchiobdella\nbranchiocardiac\nbranchiogenous\nbranchiomere\nbranchiomeric\nbranchiomerism\nbranchiopallial\nbranchiopod\nBranchiopoda\nbranchiopodan\nbranchiopodous\nBranchiopulmonata\nbranchiopulmonate\nbranchiosaur\nBranchiosauria\nbranchiosaurian\nBranchiosaurus\nbranchiostegal\nBranchiostegidae\nbranchiostegite\nbranchiostegous\nBranchiostoma\nbranchiostomid\nBranchiostomidae\nBranchipodidae\nBranchipus\nbranchireme\nBranchiura\nbranchiurous\nbranchless\nbranchlet\nbranchlike\nbranchling\nbranchman\nbranchstand\nbranchway\nbranchy\nbrand\nbranded\nBrandenburg\nBrandenburger\nbrander\nbrandering\nBrandi\nbrandied\nbrandify\nbrandise\nbrandish\nbrandisher\nbrandisite\nbrandless\nbrandling\nBrandon\nbrandreth\nBrandy\nbrandy\nbrandyball\nbrandyman\nbrandywine\nbrangle\nbrangled\nbranglement\nbrangler\nbrangling\nbranial\nbrank\nbrankie\nbrankursine\nbranle\nbranner\nbrannerite\nbranny\nbransle\nbransolder\nbrant\nBranta\nbrantail\nbrantness\nBrasenia\nbrash\nbrashiness\nbrashness\nbrashy\nbrasiletto\nbrasque\nbrass\nbrassage\nbrassard\nbrassart\nBrassavola\nbrassbound\nbrassbounder\nbrasse\nbrasser\nbrasset\nBrassia\nbrassic\nBrassica\nBrassicaceae\nbrassicaceous\nbrassidic\nbrassie\nbrassiere\nbrassily\nbrassiness\nbrassish\nbrasslike\nbrassware\nbrasswork\nbrassworker\nbrassworks\nbrassy\nbrassylic\nbrat\nbratling\nbratstvo\nbrattach\nbrattice\nbratticer\nbratticing\nbrattie\nbrattish\nbrattishing\nbrattle\nbrauna\nBrauneberger\nBrauneria\nbraunite\nBrauronia\nBrauronian\nBrava\nbravade\nbravado\nbravadoism\nbrave\nbravehearted\nbravely\nbraveness\nbraver\nbravery\nbraving\nbravish\nbravo\nbravoite\nbravura\nbravuraish\nbraw\nbrawl\nbrawler\nbrawling\nbrawlingly\nbrawlsome\nbrawly\nbrawlys\nbrawn\nbrawned\nbrawnedness\nbrawner\nbrawnily\nbrawniness\nbrawny\nbraws\nbraxy\nbray\nbrayer\nbrayera\nbrayerin\nbraystone\nbraza\nbraze\nbrazen\nbrazenface\nbrazenfaced\nbrazenfacedly\nbrazenly\nbrazenness\nbrazer\nbrazera\nbrazier\nbraziery\nbrazil\nbrazilein\nbrazilette\nBrazilian\nbrazilin\nbrazilite\nbrazilwood\nbreach\nbreacher\nbreachful\nbreachy\nbread\nbreadbasket\nbreadberry\nbreadboard\nbreadbox\nbreadearner\nbreadearning\nbreaden\nbreadfruit\nbreadless\nbreadlessness\nbreadmaker\nbreadmaking\nbreadman\nbreadnut\nbreadroot\nbreadseller\nbreadstuff\nbreadth\nbreadthen\nbreadthless\nbreadthriders\nbreadthways\nbreadthwise\nbreadwinner\nbreadwinning\nbreaghe\nbreak\nbreakable\nbreakableness\nbreakably\nbreakage\nbreakaway\nbreakax\nbreakback\nbreakbones\nbreakdown\nbreaker\nbreakerman\nbreakfast\nbreakfaster\nbreakfastless\nbreaking\nbreakless\nbreakneck\nbreakoff\nbreakout\nbreakover\nbreakshugh\nbreakstone\nbreakthrough\nbreakup\nbreakwater\nbreakwind\nbream\nbreards\nbreast\nbreastband\nbreastbeam\nbreastbone\nbreasted\nbreaster\nbreastfeeding\nbreastful\nbreastheight\nbreasthook\nbreastie\nbreasting\nbreastless\nbreastmark\nbreastpiece\nbreastpin\nbreastplate\nbreastplow\nbreastrail\nbreastrope\nbreastsummer\nbreastweed\nbreastwise\nbreastwood\nbreastwork\nbreath\nbreathable\nbreathableness\nbreathe\nbreathed\nbreather\nbreathful\nbreathiness\nbreathing\nbreathingly\nbreathless\nbreathlessly\nbreathlessness\nbreathseller\nbreathy\nbreba\nbreccia\nbreccial\nbrecciated\nbrecciation\nbrecham\nBrechites\nbreck\nbrecken\nbred\nbredbergite\nbrede\nbredi\nbree\nbreech\nbreechblock\nbreechcloth\nbreechclout\nbreeched\nbreeches\nbreechesflower\nbreechesless\nbreeching\nbreechless\nbreechloader\nbreed\nbreedable\nbreedbate\nbreeder\nbreediness\nbreeding\nbreedy\nbreek\nbreekless\nbreekums\nbreeze\nbreezeful\nbreezeless\nbreezelike\nbreezeway\nbreezily\nbreeziness\nbreezy\nbregma\nbregmata\nbregmate\nbregmatic\nbrehon\nbrehonship\nbrei\nbreislakite\nbreithauptite\nbrekkle\nbrelaw\nbreloque\nbreme\nbremely\nbremeness\nBremia\nbremsstrahlung\nBrenda\nBrendan\nBrender\nbrennage\nBrent\nbrent\nBrenthis\nbrephic\nBrescian\nBret\nbret\nbretelle\nbretesse\nbreth\nbrethren\nBreton\nBretonian\nBretschneideraceae\nBrett\nbrett\nbrettice\nBretwalda\nBretwaldadom\nBretwaldaship\nbreunnerite\nbreva\nbreve\nbrevet\nbrevetcy\nbreviary\nbreviate\nbreviature\nbrevicaudate\nbrevicipitid\nBrevicipitidae\nbreviconic\nbrevier\nbrevifoliate\nbreviger\nbrevilingual\nbreviloquence\nbreviloquent\nbreviped\nbrevipen\nbrevipennate\nbreviradiate\nbrevirostral\nbrevirostrate\nBrevirostrines\nbrevit\nbrevity\nbrew\nbrewage\nbrewer\nbrewership\nbrewery\nbrewhouse\nbrewing\nbrewis\nbrewmaster\nbrewst\nbrewster\nbrewsterite\nbrey\nBrian\nbriar\nbriarberry\nBriard\nBriarean\nBriareus\nbriarroot\nbribe\nbribee\nbribegiver\nbribegiving\nbribemonger\nbriber\nbribery\nbribetaker\nbribetaking\nbribeworthy\nBribri\nbrichen\nbrichette\nbrick\nbrickbat\nbrickcroft\nbrickel\nbricken\nbrickfield\nbrickfielder\nbrickhood\nbricking\nbrickish\nbrickkiln\nbricklayer\nbricklaying\nbrickle\nbrickleness\nbricklike\nbrickliner\nbricklining\nbrickly\nbrickmaker\nbrickmaking\nbrickmason\nbrickset\nbricksetter\nbricktimber\nbrickwise\nbrickwork\nbricky\nbrickyard\nbricole\nbridal\nbridale\nbridaler\nbridally\nBride\nbride\nbridebed\nbridebowl\nbridecake\nbridechamber\nbridecup\nbridegod\nbridegroom\nbridegroomship\nbridehead\nbridehood\nbrideknot\nbridelace\nbrideless\nbridelike\nbridely\nbridemaid\nbridemaiden\nbridemaidship\nbrideship\nbridesmaid\nbridesmaiding\nbridesman\nbridestake\nbridewain\nbrideweed\nbridewell\nbridewort\nbridge\nbridgeable\nbridgeboard\nbridgebote\nbridgebuilder\nbridgebuilding\nbridged\nbridgehead\nbridgekeeper\nbridgeless\nbridgelike\nbridgemaker\nbridgemaking\nbridgeman\nbridgemaster\nbridgepot\nBridger\nbridger\nBridget\nbridgetree\nbridgeward\nbridgewards\nbridgeway\nbridgework\nbridging\nbridle\nbridled\nbridleless\nbridleman\nbridler\nbridling\nbridoon\nbrief\nbriefing\nbriefless\nbrieflessly\nbrieflessness\nbriefly\nbriefness\nbriefs\nbrier\nbrierberry\nbriered\nbrierroot\nbrierwood\nbriery\nbrieve\nbrig\nbrigade\nbrigadier\nbrigadiership\nbrigalow\nbrigand\nbrigandage\nbrigander\nbrigandine\nbrigandish\nbrigandishly\nbrigandism\nBrigantes\nBrigantia\nbrigantine\nbrigatry\nbrigbote\nbrigetty\nBriggs\nBriggsian\nBrighella\nBrighid\nbright\nbrighten\nbrightener\nbrightening\nBrighteyes\nbrighteyes\nbrightish\nbrightly\nbrightness\nbrightsmith\nbrightsome\nbrightsomeness\nbrightwork\nBrigid\nBrigittine\nbrill\nbrilliance\nbrilliancy\nbrilliandeer\nbrilliant\nbrilliantine\nbrilliantly\nbrilliantness\nbrilliantwise\nbrilliolette\nbrillolette\nbrills\nbrim\nbrimborion\nbrimborium\nbrimful\nbrimfully\nbrimfulness\nbriming\nbrimless\nbrimmed\nbrimmer\nbrimming\nbrimmingly\nbrimstone\nbrimstonewort\nbrimstony\nbrin\nbrindlish\nbrine\nbrinehouse\nbrineless\nbrineman\nbriner\nbring\nbringal\nbringall\nbringer\nbrininess\nbrinish\nbrinishness\nbrinjal\nbrinjarry\nbrink\nbrinkless\nbriny\nbrioche\nbriolette\nbrique\nbriquette\nbrisk\nbrisken\nbrisket\nbriskish\nbriskly\nbriskness\nbrisling\nbrisque\nbriss\nBrissotin\nBrissotine\nbristle\nbristlebird\nbristlecone\nbristled\nbristleless\nbristlelike\nbristler\nbristletail\nbristlewort\nbristliness\nbristly\nBristol\nbrisure\nbrit\nBritain\nBritannia\nBritannian\nBritannic\nBritannically\nbritchka\nbrith\nbrither\nBriticism\nBritish\nBritisher\nBritishhood\nBritishism\nBritishly\nBritishness\nBriton\nBritoness\nbritska\nBrittany\nbritten\nbrittle\nbrittlebush\nbrittlely\nbrittleness\nbrittlestem\nbrittlewood\nbrittlewort\nbrittling\nBriza\nbrizz\nbroach\nbroacher\nbroad\nbroadacre\nbroadax\nbroadbill\nBroadbrim\nbroadbrim\nbroadcast\nbroadcaster\nbroadcloth\nbroaden\nbroadhead\nbroadhearted\nbroadhorn\nbroadish\nbroadleaf\nbroadloom\nbroadly\nbroadmouth\nbroadness\nbroadpiece\nbroadshare\nbroadsheet\nbroadside\nbroadspread\nbroadsword\nbroadtail\nbroadthroat\nBroadway\nbroadway\nBroadwayite\nbroadways\nbroadwife\nbroadwise\nbrob\nBrobdingnag\nBrobdingnagian\nbrocade\nbrocaded\nbrocard\nbrocardic\nbrocatel\nbrocatello\nbroccoli\nbroch\nbrochan\nbrochant\nbrochantite\nbroche\nbrochette\nbrochidodromous\nbrocho\nbrochure\nbrock\nbrockage\nbrocked\nbrocket\nbrockle\nbrod\nbrodder\nbrodeglass\nbrodequin\nbroderer\nBrodiaea\nBrodie\nbrog\nbrogan\nbrogger\nbroggerite\nbroggle\nbrogue\nbrogueful\nbrogueneer\nbroguer\nbroguery\nbroguish\nbroider\nbroiderer\nbroideress\nbroidery\nbroigne\nbroil\nbroiler\nbroiling\nbroilingly\nbrokage\nbroke\nbroken\nbrokenhearted\nbrokenheartedly\nbrokenheartedness\nbrokenly\nbrokenness\nbroker\nbrokerage\nbrokeress\nbrokership\nbroking\nbrolga\nbroll\nbrolly\nbroma\nbromacetanilide\nbromacetate\nbromacetic\nbromacetone\nbromal\nbromalbumin\nbromamide\nbromargyrite\nbromate\nbromaurate\nbromauric\nbrombenzamide\nbrombenzene\nbrombenzyl\nbromcamphor\nbromcresol\nbrome\nbromeigon\nBromeikon\nbromeikon\nBromelia\nBromeliaceae\nbromeliaceous\nbromeliad\nbromelin\nbromellite\nbromethyl\nbromethylene\nbromgelatin\nbromhidrosis\nbromhydrate\nbromhydric\nBromian\nbromic\nbromide\nbromidic\nbromidically\nbromidrosis\nbrominate\nbromination\nbromindigo\nbromine\nbrominism\nbrominize\nbromiodide\nBromios\nbromism\nbromite\nBromius\nbromization\nbromize\nbromizer\nbromlite\nbromoacetone\nbromoaurate\nbromoauric\nbromobenzene\nbromobenzyl\nbromocamphor\nbromochlorophenol\nbromocresol\nbromocyanidation\nbromocyanide\nbromocyanogen\nbromoethylene\nbromoform\nbromogelatin\nbromohydrate\nbromohydrin\nbromoil\nbromoiodide\nbromoiodism\nbromoiodized\nbromoketone\nbromol\nbromomania\nbromomenorrhea\nbromomethane\nbromometric\nbromometrical\nbromometrically\nbromometry\nbromonaphthalene\nbromophenol\nbromopicrin\nbromopnea\nbromoprotein\nbromothymol\nbromous\nbromphenol\nbrompicrin\nbromthymol\nbromuret\nBromus\nbromvogel\nbromyrite\nbronc\nbronchadenitis\nbronchi\nbronchia\nbronchial\nbronchially\nbronchiarctia\nbronchiectasis\nbronchiectatic\nbronchiloquy\nbronchiocele\nbronchiocrisis\nbronchiogenic\nbronchiolar\nbronchiole\nbronchioli\nbronchiolitis\nbronchiolus\nbronchiospasm\nbronchiostenosis\nbronchitic\nbronchitis\nbronchium\nbronchoadenitis\nbronchoalveolar\nbronchoaspergillosis\nbronchoblennorrhea\nbronchocavernous\nbronchocele\nbronchocephalitis\nbronchoconstriction\nbronchoconstrictor\nbronchodilatation\nbronchodilator\nbronchoegophony\nbronchoesophagoscopy\nbronchogenic\nbronchohemorrhagia\nbroncholemmitis\nbroncholith\nbroncholithiasis\nbronchomotor\nbronchomucormycosis\nbronchomycosis\nbronchopathy\nbronchophonic\nbronchophony\nbronchophthisis\nbronchoplasty\nbronchoplegia\nbronchopleurisy\nbronchopneumonia\nbronchopneumonic\nbronchopulmonary\nbronchorrhagia\nbronchorrhaphy\nbronchorrhea\nbronchoscope\nbronchoscopic\nbronchoscopist\nbronchoscopy\nbronchospasm\nbronchostenosis\nbronchostomy\nbronchotetany\nbronchotome\nbronchotomist\nbronchotomy\nbronchotracheal\nbronchotyphoid\nbronchotyphus\nbronchovesicular\nbronchus\nbronco\nbroncobuster\nbrongniardite\nbronk\nBronteana\nbronteon\nbrontephobia\nBrontesque\nbronteum\nbrontide\nbrontogram\nbrontograph\nbrontolite\nbrontology\nbrontometer\nbrontophobia\nBrontops\nBrontosaurus\nbrontoscopy\nBrontotherium\nBrontozoum\nBronx\nbronze\nbronzed\nbronzelike\nbronzen\nbronzer\nbronzesmith\nbronzewing\nbronzify\nbronzine\nbronzing\nbronzite\nbronzitite\nbronzy\nbroo\nbrooch\nbrood\nbrooder\nbroodiness\nbrooding\nbroodingly\nbroodless\nbroodlet\nbroodling\nbroody\nbrook\nbrookable\nBrooke\nbrooked\nbrookflower\nbrookie\nbrookite\nbrookless\nbrooklet\nbrooklike\nbrooklime\nBrooklynite\nbrookside\nbrookweed\nbrooky\nbrool\nbroom\nbroombush\nbroomcorn\nbroomer\nbroommaker\nbroommaking\nbroomrape\nbroomroot\nbroomshank\nbroomstaff\nbroomstick\nbroomstraw\nbroomtail\nbroomweed\nbroomwood\nbroomwort\nbroomy\nbroon\nbroose\nbroozled\nbrose\nBrosimum\nbrosot\nbrosy\nbrot\nbrotan\nbrotany\nbroth\nbrothel\nbrotheler\nbrothellike\nbrothelry\nbrother\nbrotherhood\nbrotherless\nbrotherlike\nbrotherliness\nbrotherly\nbrothership\nBrotherton\nbrotherwort\nbrothy\nbrotocrystal\nBrotula\nbrotulid\nBrotulidae\nbrotuliform\nbrough\nbrougham\nbrought\nBroussonetia\nbrow\nbrowache\nBrowallia\nbrowallia\nbrowband\nbrowbeat\nbrowbeater\nbrowbound\nbrowden\nbrowed\nbrowis\nbrowless\nbrowman\nbrown\nbrownback\nbrowner\nBrownian\nbrownie\nbrowniness\nbrowning\nBrowningesque\nbrownish\nBrownism\nBrownist\nBrownistic\nBrownistical\nbrownly\nbrownness\nbrownout\nbrownstone\nbrowntail\nbrowntop\nbrownweed\nbrownwort\nbrowny\nbrowpiece\nbrowpost\nbrowse\nbrowser\nbrowsick\nbrowsing\nbrowst\nbruang\nBruce\nBrucella\nbrucellosis\nBruchidae\nBruchus\nbrucia\nbrucina\nbrucine\nbrucite\nbruckle\nbruckled\nbruckleness\nBructeri\nbrugh\nbrugnatellite\nbruin\nbruise\nbruiser\nbruisewort\nbruising\nbruit\nbruiter\nbruke\nBrule\nbrulee\nbrulyie\nbrulyiement\nbrumal\nBrumalia\nbrumby\nbrume\nBrummagem\nbrummagem\nbrumous\nbrumstane\nbrumstone\nbrunch\nBrunella\nBrunellia\nBrunelliaceae\nbrunelliaceous\nbrunet\nbrunetness\nbrunette\nbrunetteness\nBrunfelsia\nbrunissure\nBrunistic\nbrunneous\nBrunnichia\nBruno\nBrunonia\nBrunoniaceae\nBrunonian\nBrunonism\nBrunswick\nbrunswick\nbrunt\nbruscus\nbrush\nbrushable\nbrushball\nbrushbird\nbrushbush\nbrushed\nbrusher\nbrushes\nbrushet\nbrushful\nbrushiness\nbrushing\nbrushite\nbrushland\nbrushless\nbrushlessness\nbrushlet\nbrushlike\nbrushmaker\nbrushmaking\nbrushman\nbrushoff\nbrushproof\nbrushwood\nbrushwork\nbrushy\nbrusque\nbrusquely\nbrusqueness\nBrussels\nbrustle\nbrut\nBruta\nbrutage\nbrutal\nbrutalism\nbrutalist\nbrutalitarian\nbrutality\nbrutalization\nbrutalize\nbrutally\nbrute\nbrutedom\nbrutelike\nbrutely\nbruteness\nbrutification\nbrutify\nbruting\nbrutish\nbrutishly\nbrutishness\nbrutism\nbrutter\nBrutus\nbruzz\nBryaceae\nbryaceous\nBryales\nBryan\nBryanism\nBryanite\nBryanthus\nBryce\nbryogenin\nbryological\nbryologist\nbryology\nBryonia\nbryonidin\nbryonin\nbryony\nBryophyllum\nBryophyta\nbryophyte\nbryophytic\nBryozoa\nbryozoan\nbryozoon\nbryozoum\nBrython\nBrythonic\nBryum\nBu\nbu\nbual\nbuaze\nbub\nbuba\nbubal\nbubaline\nBubalis\nbubalis\nBubastid\nBubastite\nbubble\nbubbleless\nbubblement\nbubbler\nbubbling\nbubblingly\nbubblish\nbubbly\nbubby\nbubbybush\nBube\nbubinga\nBubo\nbubo\nbuboed\nbubonalgia\nbubonic\nBubonidae\nbubonocele\nbubukle\nbucare\nbucca\nbuccal\nbuccally\nbuccan\nbuccaneer\nbuccaneerish\nbuccate\nBuccellarius\nbuccina\nbuccinal\nbuccinator\nbuccinatory\nBuccinidae\nbucciniform\nbuccinoid\nBuccinum\nBucco\nbuccobranchial\nbuccocervical\nbuccogingival\nbuccolabial\nbuccolingual\nbucconasal\nBucconidae\nBucconinae\nbuccopharyngeal\nbuccula\nBucculatrix\nbucentaur\nBucephala\nBucephalus\nBuceros\nBucerotes\nBucerotidae\nBucerotinae\nBuchanan\nBuchanite\nbuchite\nBuchloe\nBuchmanism\nBuchmanite\nBuchnera\nbuchnerite\nbuchonite\nbuchu\nbuck\nbuckaroo\nbuckberry\nbuckboard\nbuckbrush\nbuckbush\nbucked\nbuckeen\nbucker\nbucket\nbucketer\nbucketful\nbucketing\nbucketmaker\nbucketmaking\nbucketman\nbuckety\nbuckeye\nbuckhorn\nbuckhound\nbuckie\nbucking\nbuckish\nbuckishly\nbuckishness\nbuckjump\nbuckjumper\nbucklandite\nbuckle\nbuckled\nbuckleless\nbuckler\nBuckleya\nbuckling\nbucklum\nbucko\nbuckplate\nbuckpot\nbuckra\nbuckram\nbucksaw\nbuckshee\nbuckshot\nbuckskin\nbuckskinned\nbuckstall\nbuckstay\nbuckstone\nbucktail\nbuckthorn\nbucktooth\nbuckwagon\nbuckwash\nbuckwasher\nbuckwashing\nbuckwheat\nbuckwheater\nbuckwheatlike\nBucky\nbucky\nbucoliast\nbucolic\nbucolical\nbucolically\nbucolicism\nBucorvinae\nBucorvus\nbucrane\nbucranium\nBud\nbud\nbuda\nbuddage\nbudder\nBuddh\nBuddha\nBuddhahood\nBuddhaship\nbuddhi\nBuddhic\nBuddhism\nBuddhist\nBuddhistic\nBuddhistical\nBuddhology\nbudding\nbuddle\nBuddleia\nbuddleman\nbuddler\nbuddy\nbudge\nbudger\nbudgeree\nbudgereegah\nbudgerigar\nbudgerow\nbudget\nbudgetary\nbudgeteer\nbudgeter\nbudgetful\nBudh\nbudless\nbudlet\nbudlike\nbudmash\nBudorcas\nbudtime\nBudukha\nBuduma\nbudwood\nbudworm\nbudzat\nBuettneria\nBuettneriaceae\nbufagin\nbuff\nbuffable\nbuffalo\nbuffaloback\nbuffball\nbuffcoat\nbuffed\nbuffer\nbuffet\nbuffeter\nbuffing\nbuffle\nbufflehead\nbufflehorn\nbuffont\nbuffoon\nbuffoonery\nbuffoonesque\nbuffoonish\nbuffoonism\nbuffware\nbuffy\nbufidin\nbufo\nBufonidae\nbufonite\nbufotalin\nbug\nbugaboo\nbugan\nbugbane\nbugbear\nbugbeardom\nbugbearish\nbugbite\nbugdom\nbugfish\nbugger\nbuggery\nbugginess\nbuggy\nbuggyman\nbughead\nbughouse\nBugi\nBuginese\nBuginvillaea\nbugle\nbugled\nbugler\nbuglet\nbugleweed\nbuglewort\nbugloss\nbugologist\nbugology\nbugproof\nbugre\nbugseed\nbugweed\nbugwort\nbuhl\nbuhr\nbuhrstone\nbuild\nbuildable\nbuilder\nbuilding\nbuildingless\nbuildress\nbuildup\nbuilt\nbuirdly\nbuisson\nbuist\nBukat\nBukeyef\nbukh\nBukidnon\nbukshi\nbulak\nBulanda\nbulb\nbulbaceous\nbulbar\nbulbed\nbulbiferous\nbulbiform\nbulbil\nBulbilis\nbulbilla\nbulbless\nbulblet\nbulblike\nbulbocapnin\nbulbocapnine\nbulbocavernosus\nbulbocavernous\nBulbochaete\nBulbocodium\nbulbomedullary\nbulbomembranous\nbulbonuclear\nBulbophyllum\nbulborectal\nbulbose\nbulbospinal\nbulbotuber\nbulbous\nbulbul\nbulbule\nbulby\nbulchin\nBulgar\nBulgari\nBulgarian\nBulgaric\nBulgarophil\nbulge\nbulger\nbulginess\nbulgy\nbulimia\nbulimiac\nbulimic\nbulimiform\nbulimoid\nBulimulidae\nBulimus\nbulimy\nbulk\nbulked\nbulker\nbulkhead\nbulkheaded\nbulkily\nbulkiness\nbulkish\nbulky\nbull\nbulla\nbullace\nbullamacow\nbullan\nbullary\nbullate\nbullated\nbullation\nbullback\nbullbaiting\nbullbat\nbullbeggar\nbullberry\nbullbird\nbullboat\nbullcart\nbullcomber\nbulldog\nbulldogged\nbulldoggedness\nbulldoggy\nbulldogism\nbulldoze\nbulldozer\nbuller\nbullet\nbulleted\nbullethead\nbulletheaded\nbulletheadedness\nbulletin\nbulletless\nbulletlike\nbulletmaker\nbulletmaking\nbulletproof\nbulletwood\nbullety\nbullfeast\nbullfight\nbullfighter\nbullfighting\nbullfinch\nbullfist\nbullflower\nbullfoot\nbullfrog\nbullhead\nbullheaded\nbullheadedly\nbullheadedness\nbullhide\nbullhoof\nbullhorn\nBullidae\nbulliform\nbullimong\nbulling\nbullion\nbullionism\nbullionist\nbullionless\nbullish\nbullishly\nbullishness\nbullism\nbullit\nbullneck\nbullnose\nbullnut\nbullock\nbullocker\nBullockite\nbullockman\nbullocky\nBullom\nbullous\nbullpates\nbullpoll\nbullpout\nbullskin\nbullsticker\nbullsucker\nbullswool\nbulltoad\nbullule\nbullweed\nbullwhack\nbullwhacker\nbullwhip\nbullwort\nbully\nbullyable\nbullydom\nbullyhuff\nbullying\nbullyism\nbullyrag\nbullyragger\nbullyragging\nbullyrook\nbulrush\nbulrushlike\nbulrushy\nbulse\nbult\nbulter\nbultey\nbultong\nbultow\nbulwand\nbulwark\nbum\nbumbailiff\nbumbailiffship\nbumbarge\nbumbaste\nbumbaze\nbumbee\nbumbershoot\nbumble\nbumblebee\nbumbleberry\nBumbledom\nbumblefoot\nbumblekite\nbumblepuppy\nbumbler\nbumbo\nbumboat\nbumboatman\nbumboatwoman\nbumclock\nBumelia\nbumicky\nbummalo\nbummaree\nbummed\nbummer\nbummerish\nbummie\nbumming\nbummler\nbummock\nbump\nbumpee\nbumper\nbumperette\nbumpily\nbumpiness\nbumping\nbumpingly\nbumpkin\nbumpkinet\nbumpkinish\nbumpkinly\nbumpology\nbumptious\nbumptiously\nbumptiousness\nbumpy\nbumtrap\nbumwood\nbun\nBuna\nbuna\nbuncal\nbunce\nbunch\nbunchberry\nbuncher\nbunchflower\nbunchily\nbunchiness\nbunchy\nbuncombe\nbund\nBunda\nBundahish\nBundeli\nbunder\nBundestag\nbundle\nbundler\nbundlerooted\nbundlet\nbundobust\nbundook\nBundu\nbundweed\nbundy\nbunemost\nbung\nBunga\nbungaloid\nbungalow\nbungarum\nBungarus\nbungee\nbungerly\nbungey\nbungfu\nbungfull\nbunghole\nbungle\nbungler\nbunglesome\nbungling\nbunglingly\nbungmaker\nbungo\nbungwall\nbungy\nBuninahua\nbunion\nbunk\nbunker\nbunkerman\nbunkery\nbunkhouse\nbunkie\nbunkload\nbunko\nbunkum\nbunnell\nbunny\nbunnymouth\nbunodont\nBunodonta\nbunolophodont\nBunomastodontidae\nbunoselenodont\nbunsenite\nbunt\nbuntal\nbunted\nBunter\nbunter\nbunting\nbuntline\nbunton\nbunty\nbunya\nbunyah\nbunyip\nBunyoro\nbuoy\nbuoyage\nbuoyance\nbuoyancy\nbuoyant\nbuoyantly\nbuoyantness\nBuphaga\nbuphthalmia\nbuphthalmic\nBuphthalmum\nbupleurol\nBupleurum\nbuplever\nbuprestid\nBuprestidae\nbuprestidan\nBuprestis\nbur\nburan\nburao\nBurbank\nburbank\nburbankian\nBurbankism\nburbark\nBurberry\nburble\nburbler\nburbly\nburbot\nburbush\nburd\nburdalone\nburden\nburdener\nburdenless\nburdenous\nburdensome\nburdensomely\nburdensomeness\nburdie\nBurdigalian\nburdock\nburdon\nbure\nbureau\nbureaucracy\nbureaucrat\nbureaucratic\nbureaucratical\nbureaucratically\nbureaucratism\nbureaucratist\nbureaucratization\nbureaucratize\nbureaux\nburel\nburele\nburet\nburette\nburfish\nburg\nburgage\nburgality\nburgall\nburgee\nburgensic\nburgeon\nburgess\nburgessdom\nburggrave\nburgh\nburghal\nburghalpenny\nburghbote\nburghemot\nburgher\nburgherage\nburgherdom\nburgheress\nburgherhood\nburghermaster\nburghership\nburghmaster\nburghmoot\nburglar\nburglarious\nburglariously\nburglarize\nburglarproof\nburglary\nburgle\nburgomaster\nburgomastership\nburgonet\nburgoo\nburgoyne\nburgrave\nburgraviate\nburgul\nBurgundian\nBurgundy\nburgus\nburgware\nburhead\nBurhinidae\nBurhinus\nBuri\nburi\nburial\nburian\nBuriat\nburied\nburier\nburin\nburinist\nburion\nburiti\nburka\nburke\nburker\nburkundaz\nburl\nburlap\nburled\nburler\nburlesque\nburlesquely\nburlesquer\nburlet\nburletta\nBurley\nburlily\nburliness\nBurlington\nburly\nBurman\nBurmannia\nBurmanniaceae\nburmanniaceous\nBurmese\nburmite\nburn\nburnable\nburnbeat\nburned\nburner\nburnet\nburnetize\nburnfire\nburnie\nburniebee\nburning\nburningly\nburnish\nburnishable\nburnisher\nburnishing\nburnishment\nburnoose\nburnoosed\nburnous\nburnout\nburnover\nBurnsian\nburnside\nburnsides\nburnt\nburntweed\nburnut\nburnwood\nburny\nburo\nburp\nburr\nburrah\nburrawang\nburred\nburrel\nburrer\nburrgrailer\nburring\nburrish\nburrito\nburrknot\nburro\nburrobrush\nburrow\nburroweed\nburrower\nburrowstown\nburry\nbursa\nbursal\nbursar\nbursarial\nbursarship\nbursary\nbursate\nbursattee\nbursautee\nburse\nburseed\nBursera\nBurseraceae\nBurseraceous\nbursicle\nbursiculate\nbursiform\nbursitis\nburst\nburster\nburstwort\nburt\nburthenman\nburton\nburtonization\nburtonize\nburucha\nBurushaski\nBurut\nburweed\nbury\nburying\nbus\nBusaos\nbusby\nbuscarl\nbuscarle\nbush\nbushbeater\nbushbuck\nbushcraft\nbushed\nbushel\nbusheler\nbushelful\nbushelman\nbushelwoman\nbusher\nbushfighter\nbushfighting\nbushful\nbushhammer\nbushi\nbushily\nbushiness\nbushing\nbushland\nbushless\nbushlet\nbushlike\nbushmaker\nbushmaking\nBushman\nbushmanship\nbushmaster\nbushment\nBushongo\nbushranger\nbushranging\nbushrope\nbushveld\nbushwa\nbushwhack\nbushwhacker\nbushwhacking\nbushwife\nbushwoman\nbushwood\nbushy\nbusied\nbusily\nbusine\nbusiness\nbusinesslike\nbusinesslikeness\nbusinessman\nbusinesswoman\nbusk\nbusked\nbusker\nbusket\nbuskin\nbuskined\nbuskle\nbusky\nbusman\nbuss\nbusser\nbussock\nbussu\nbust\nbustard\nbusted\nbustee\nbuster\nbusthead\nbustic\nbusticate\nbustle\nbustled\nbustler\nbustling\nbustlingly\nbusy\nbusybodied\nbusybody\nbusybodyish\nbusybodyism\nbusybodyness\nBusycon\nbusyhead\nbusying\nbusyish\nbusyness\nbusywork\nbut\nbutadiene\nbutadiyne\nbutanal\nbutane\nbutanoic\nbutanol\nbutanolid\nbutanolide\nbutanone\nbutch\nbutcher\nbutcherbird\nbutcherdom\nbutcherer\nbutcheress\nbutchering\nbutcherless\nbutcherliness\nbutcherly\nbutcherous\nbutchery\nBute\nButea\nbutein\nbutene\nbutenyl\nButeo\nbuteonine\nbutic\nbutine\nButler\nbutler\nbutlerage\nbutlerdom\nbutleress\nbutlerism\nbutlerlike\nbutlership\nbutlery\nbutment\nButomaceae\nbutomaceous\nButomus\nbutoxy\nbutoxyl\nButsu\nbutt\nbutte\nbutter\nbutteraceous\nbutterback\nbutterball\nbutterbill\nbutterbird\nbutterbox\nbutterbump\nbutterbur\nbutterbush\nbuttercup\nbuttered\nbutterfat\nbutterfingered\nbutterfingers\nbutterfish\nbutterflower\nbutterfly\nbutterflylike\nbutterhead\nbutterine\nbutteriness\nbutteris\nbutterjags\nbutterless\nbutterlike\nbuttermaker\nbuttermaking\nbutterman\nbuttermilk\nbuttermonger\nbuttermouth\nbutternose\nbutternut\nbutterroot\nbutterscotch\nbutterweed\nbutterwife\nbutterwoman\nbutterworker\nbutterwort\nbutterwright\nbuttery\nbutteryfingered\nbuttgenbachite\nbutting\nbuttinsky\nbuttle\nbuttock\nbuttocked\nbuttocker\nbutton\nbuttonball\nbuttonbur\nbuttonbush\nbuttoned\nbuttoner\nbuttonhold\nbuttonholder\nbuttonhole\nbuttonholer\nbuttonhook\nbuttonless\nbuttonlike\nbuttonmold\nbuttons\nbuttonweed\nbuttonwood\nbuttony\nbuttress\nbuttressless\nbuttresslike\nbuttstock\nbuttwoman\nbuttwood\nbutty\nbuttyman\nbutyl\nbutylamine\nbutylation\nbutylene\nbutylic\nButyn\nbutyne\nbutyr\nbutyraceous\nbutyral\nbutyraldehyde\nbutyrate\nbutyric\nbutyrically\nbutyrin\nbutyrinase\nbutyrochloral\nbutyrolactone\nbutyrometer\nbutyrometric\nbutyrone\nbutyrous\nbutyrousness\nbutyryl\nBuxaceae\nbuxaceous\nBuxbaumia\nBuxbaumiaceae\nbuxerry\nbuxom\nbuxomly\nbuxomness\nBuxus\nbuy\nbuyable\nbuyer\nBuyides\nbuzane\nbuzylene\nbuzz\nbuzzard\nbuzzardlike\nbuzzardly\nbuzzer\nbuzzerphone\nbuzzgloak\nbuzzies\nbuzzing\nbuzzingly\nbuzzle\nbuzzwig\nbuzzy\nby\nByblidaceae\nByblis\nbycoket\nbye\nbyee\nbyegaein\nbyeman\nbyepath\nbyerite\nbyerlite\nbyestreet\nbyeworker\nbyeworkman\nbygane\nbyganging\nbygo\nbygoing\nbygone\nbyhand\nbylaw\nbylawman\nbyname\nbynedestin\nBynin\nbyon\nbyordinar\nbyordinary\nbyous\nbyously\nbypass\nbypasser\nbypast\nbypath\nbyplay\nbyre\nbyreman\nbyrewards\nbyrewoman\nbyrlaw\nbyrlawman\nbyrnie\nbyroad\nByron\nByronesque\nByronian\nByroniana\nByronic\nByronically\nByronics\nByronish\nByronism\nByronist\nByronite\nByronize\nbyrrus\nByrsonima\nbyrthynsak\nBysacki\nbysen\nbysmalith\nbyspell\nbyssaceous\nbyssal\nbyssiferous\nbyssin\nbyssine\nbyssinosis\nbyssogenous\nbyssoid\nbyssolite\nbyssus\nbystander\nbystreet\nbyth\nbytime\nbytownite\nbytownitite\nbywalk\nbywalker\nbyway\nbywoner\nbyword\nbywork\nByzantian\nByzantine\nByzantinesque\nByzantinism\nByzantinize\nC\nc\nca\ncaam\ncaama\ncaaming\ncaapeba\ncaatinga\ncab\ncaba\ncabaan\ncaback\ncabaho\ncabal\ncabala\ncabalassou\ncabaletta\ncabalic\ncabalism\ncabalist\ncabalistic\ncabalistical\ncabalistically\ncaballer\ncaballine\ncaban\ncabana\ncabaret\ncabas\ncabasset\ncabassou\ncabbage\ncabbagehead\ncabbagewood\ncabbagy\ncabber\ncabble\ncabbler\ncabby\ncabda\ncabdriver\ncabdriving\ncabellerote\ncaber\ncabernet\ncabestro\ncabezon\ncabilliau\ncabin\nCabinda\ncabinet\ncabinetmaker\ncabinetmaking\ncabinetry\ncabinetwork\ncabinetworker\ncabinetworking\ncabio\nCabirean\nCabiri\nCabiria\nCabirian\nCabiric\nCabiritic\ncable\ncabled\ncablegram\ncableless\ncablelike\ncableman\ncabler\ncablet\ncableway\ncabling\ncabman\ncabob\ncaboceer\ncabochon\ncabocle\nCabomba\nCabombaceae\ncaboodle\ncabook\ncaboose\ncaboshed\ncabot\ncabotage\ncabree\ncabrerite\ncabreuva\ncabrilla\ncabriole\ncabriolet\ncabrit\ncabstand\ncabureiba\ncabuya\nCaca\nCacajao\nCacalia\ncacam\nCacan\nCacana\ncacanthrax\ncacao\nCacara\nCacatua\nCacatuidae\nCacatuinae\nCaccabis\ncacesthesia\ncacesthesis\ncachalot\ncachaza\ncache\ncachectic\ncachemia\ncachemic\ncachet\ncachexia\ncachexic\ncachexy\ncachibou\ncachinnate\ncachinnation\ncachinnator\ncachinnatory\ncacholong\ncachou\ncachrys\ncachucha\ncachunde\nCacicus\ncacidrosis\ncaciocavallo\ncacique\ncaciqueship\ncaciquism\ncack\ncackerel\ncackle\ncackler\ncacocholia\ncacochroia\ncacochylia\ncacochymia\ncacochymic\ncacochymical\ncacochymy\ncacocnemia\ncacodaemoniac\ncacodaemonial\ncacodaemonic\ncacodemon\ncacodemonia\ncacodemoniac\ncacodemonial\ncacodemonic\ncacodemonize\ncacodemonomania\ncacodontia\ncacodorous\ncacodoxian\ncacodoxical\ncacodoxy\ncacodyl\ncacodylate\ncacodylic\ncacoeconomy\ncacoepist\ncacoepistic\ncacoepy\ncacoethes\ncacoethic\ncacogalactia\ncacogastric\ncacogenesis\ncacogenic\ncacogenics\ncacogeusia\ncacoglossia\ncacographer\ncacographic\ncacographical\ncacography\ncacology\ncacomagician\ncacomelia\ncacomistle\ncacomixl\ncacomixle\ncacomorphia\ncacomorphosis\ncaconychia\ncaconym\ncaconymic\ncacoon\ncacopathy\ncacopharyngia\ncacophonia\ncacophonic\ncacophonical\ncacophonically\ncacophonist\ncacophonize\ncacophonous\ncacophonously\ncacophony\ncacophthalmia\ncacoplasia\ncacoplastic\ncacoproctia\ncacorhythmic\ncacorrhachis\ncacorrhinia\ncacosmia\ncacospermia\ncacosplanchnia\ncacostomia\ncacothansia\ncacotheline\ncacothesis\ncacothymia\ncacotrichia\ncacotrophia\ncacotrophic\ncacotrophy\ncacotype\ncacoxene\ncacoxenite\ncacozeal\ncacozealous\ncacozyme\nCactaceae\ncactaceous\nCactales\ncacti\ncactiform\ncactoid\nCactus\ncacuminal\ncacuminate\ncacumination\ncacuminous\ncacur\ncad\ncadalene\ncadamba\ncadastral\ncadastration\ncadastre\ncadaver\ncadaveric\ncadaverine\ncadaverize\ncadaverous\ncadaverously\ncadaverousness\ncadbait\ncadbit\ncadbote\ncaddice\ncaddiced\nCaddie\ncaddie\ncaddis\ncaddised\ncaddish\ncaddishly\ncaddishness\ncaddle\nCaddo\nCaddoan\ncaddow\ncaddy\ncade\ncadelle\ncadence\ncadenced\ncadency\ncadent\ncadential\ncadenza\ncader\ncaderas\nCadet\ncadet\ncadetcy\ncadetship\ncadette\ncadew\ncadge\ncadger\ncadgily\ncadginess\ncadgy\ncadi\ncadilesker\ncadinene\ncadism\ncadiueio\ncadjan\ncadlock\nCadmean\ncadmia\ncadmic\ncadmide\ncadmiferous\ncadmium\ncadmiumize\nCadmopone\nCadmus\ncados\ncadrans\ncadre\ncadua\ncaduac\ncaduca\ncaducary\ncaducean\ncaduceus\ncaduciary\ncaducibranch\nCaducibranchiata\ncaducibranchiate\ncaducicorn\ncaducity\ncaducous\ncadus\nCadwal\nCadwallader\ncadweed\ncaeca\ncaecal\ncaecally\ncaecectomy\ncaeciform\nCaecilia\nCaeciliae\ncaecilian\nCaeciliidae\ncaecitis\ncaecocolic\ncaecostomy\ncaecotomy\ncaecum\nCaedmonian\nCaedmonic\nCaelian\ncaelometer\nCaelum\nCaelus\nCaenogaea\nCaenogaean\nCaenolestes\ncaenostylic\ncaenostyly\ncaeoma\ncaeremoniarius\nCaerphilly\nCaesalpinia\nCaesalpiniaceae\ncaesalpiniaceous\nCaesar\nCaesardom\nCaesarean\nCaesareanize\nCaesarian\nCaesarism\nCaesarist\nCaesarize\ncaesaropapacy\ncaesaropapism\ncaesaropopism\nCaesarotomy\nCaesarship\ncaesious\ncaesura\ncaesural\ncaesuric\ncafeneh\ncafenet\ncafeteria\ncaffa\ncaffeate\ncaffeic\ncaffeina\ncaffeine\ncaffeinic\ncaffeinism\ncaffeism\ncaffeol\ncaffeone\ncaffetannic\ncaffetannin\ncaffiso\ncaffle\ncaffoline\ncaffoy\ncafh\ncafiz\ncaftan\ncaftaned\ncag\nCagayan\ncage\ncaged\ncageful\ncageless\ncagelike\ncageling\ncageman\ncager\ncagester\ncagework\ncagey\ncaggy\ncagily\ncagit\ncagmag\nCagn\nCahenslyism\nCahill\ncahincic\nCahita\ncahiz\nCahnite\nCahokia\ncahoot\ncahot\ncahow\nCahuapana\nCahuilla\ncaickle\ncaid\ncailcedra\ncailleach\ncaimacam\ncaimakam\ncaiman\ncaimitillo\ncaimito\nCain\ncain\nCaingang\nCaingua\nCainian\nCainish\nCainism\nCainite\nCainitic\ncaique\ncaiquejee\nCairba\ncaird\nCairene\ncairn\ncairned\ncairngorm\ncairngorum\ncairny\nCairo\ncaisson\ncaissoned\nCaitanyas\nCaite\ncaitiff\nCajan\nCajanus\ncajeput\ncajole\ncajolement\ncajoler\ncajolery\ncajoling\ncajolingly\ncajuela\nCajun\ncajun\ncajuput\ncajuputene\ncajuputol\nCakavci\nCakchikel\ncake\ncakebox\ncakebread\ncakehouse\ncakemaker\ncakemaking\ncaker\ncakette\ncakewalk\ncakewalker\ncakey\nCakile\ncaky\ncal\ncalaba\nCalabar\nCalabari\ncalabash\ncalabaza\ncalabazilla\ncalaber\ncalaboose\ncalabrasella\nCalabrese\ncalabrese\nCalabrian\ncalade\nCaladium\ncalais\ncalalu\nCalamagrostis\ncalamanco\ncalamansi\nCalamariaceae\ncalamariaceous\nCalamariales\ncalamarian\ncalamarioid\ncalamaroid\ncalamary\ncalambac\ncalambour\ncalamiferous\ncalamiform\ncalaminary\ncalamine\ncalamint\nCalamintha\ncalamistral\ncalamistrum\ncalamite\ncalamitean\nCalamites\ncalamitoid\ncalamitous\ncalamitously\ncalamitousness\ncalamity\nCalamodendron\ncalamondin\nCalamopitys\nCalamospermae\nCalamostachys\ncalamus\ncalander\nCalandra\ncalandria\nCalandridae\nCalandrinae\nCalandrinia\ncalangay\ncalantas\nCalanthe\ncalapite\nCalappa\nCalappidae\nCalas\ncalascione\ncalash\nCalathea\ncalathian\ncalathidium\ncalathiform\ncalathiscus\ncalathus\nCalatrava\ncalaverite\ncalbroben\ncalcaneal\ncalcaneoastragalar\ncalcaneoastragaloid\ncalcaneocuboid\ncalcaneofibular\ncalcaneonavicular\ncalcaneoplantar\ncalcaneoscaphoid\ncalcaneotibial\ncalcaneum\ncalcaneus\ncalcar\ncalcarate\nCalcarea\ncalcareoargillaceous\ncalcareobituminous\ncalcareocorneous\ncalcareosiliceous\ncalcareosulphurous\ncalcareous\ncalcareously\ncalcareousness\ncalcariferous\ncalcariform\ncalcarine\ncalced\ncalceiform\ncalcemia\nCalceolaria\ncalceolate\nCalchaqui\nCalchaquian\ncalcic\ncalciclase\ncalcicole\ncalcicolous\ncalcicosis\ncalciferol\nCalciferous\ncalciferous\ncalcific\ncalcification\ncalcified\ncalciform\ncalcifugal\ncalcifuge\ncalcifugous\ncalcify\ncalcigenous\ncalcigerous\ncalcimeter\ncalcimine\ncalciminer\ncalcinable\ncalcination\ncalcinatory\ncalcine\ncalcined\ncalciner\ncalcinize\ncalciobiotite\ncalciocarnotite\ncalcioferrite\ncalcioscheelite\ncalciovolborthite\ncalcipexy\ncalciphile\ncalciphilia\ncalciphilous\ncalciphobe\ncalciphobous\ncalciphyre\ncalciprivic\ncalcisponge\nCalcispongiae\ncalcite\ncalcitestaceous\ncalcitic\ncalcitrant\ncalcitrate\ncalcitreation\ncalcium\ncalcivorous\ncalcographer\ncalcographic\ncalcography\ncalcrete\ncalculability\ncalculable\nCalculagraph\ncalculary\ncalculate\ncalculated\ncalculatedly\ncalculating\ncalculatingly\ncalculation\ncalculational\ncalculative\ncalculator\ncalculatory\ncalculi\ncalculiform\ncalculist\ncalculous\ncalculus\nCalcydon\ncalden\ncaldron\ncalean\nCaleb\nCaledonia\nCaledonian\ncaledonite\ncalefacient\ncalefaction\ncalefactive\ncalefactor\ncalefactory\ncalelectric\ncalelectrical\ncalelectricity\nCalemes\ncalendal\ncalendar\ncalendarer\ncalendarial\ncalendarian\ncalendaric\ncalender\ncalenderer\ncalendric\ncalendrical\ncalendry\ncalends\nCalendula\ncalendulin\ncalentural\ncalenture\ncalenturist\ncalepin\ncalescence\ncalescent\ncalf\ncalfbound\ncalfhood\ncalfish\ncalfkill\ncalfless\ncalflike\ncalfling\ncalfskin\nCaliban\nCalibanism\ncaliber\ncalibered\ncalibogus\ncalibrate\ncalibration\ncalibrator\ncalibre\nCaliburn\nCaliburno\ncalicate\ncalices\ncaliciform\ncalicle\ncalico\ncalicoback\ncalicoed\ncalicular\ncaliculate\nCalicut\ncalid\ncalidity\ncaliduct\nCalifornia\nCalifornian\ncalifornite\ncalifornium\ncaliga\ncaligated\ncaliginous\ncaliginously\ncaligo\nCalimeris\nCalinago\ncalinda\ncalinut\ncaliological\ncaliologist\ncaliology\ncalipash\ncalipee\ncaliper\ncaliperer\ncalipers\ncaliph\ncaliphal\ncaliphate\ncaliphship\nCalista\ncalistheneum\ncalisthenic\ncalisthenical\ncalisthenics\nCalite\ncaliver\ncalix\nCalixtin\nCalixtus\ncalk\ncalkage\ncalker\ncalkin\ncalking\ncall\nCalla\ncallable\ncallainite\ncallant\ncallboy\ncaller\ncallet\ncalli\nCallianassa\nCallianassidae\nCalliandra\nCallicarpa\nCallicebus\ncallid\ncallidity\ncallidness\ncalligraph\ncalligrapha\ncalligrapher\ncalligraphic\ncalligraphical\ncalligraphically\ncalligraphist\ncalligraphy\ncalling\nCallionymidae\nCallionymus\nCalliope\ncalliophone\nCalliopsis\ncalliper\ncalliperer\nCalliphora\ncalliphorid\nCalliphoridae\ncalliphorine\ncallipygian\ncallipygous\nCallirrhoe\nCallisaurus\ncallisection\ncallisteia\nCallistemon\nCallistephus\nCallithrix\ncallithump\ncallithumpian\nCallitrichaceae\ncallitrichaceous\nCallitriche\nCallitrichidae\nCallitris\ncallitype\ncallo\nCallorhynchidae\nCallorhynchus\ncallosal\ncallose\ncallosity\ncallosomarginal\ncallosum\ncallous\ncallously\ncallousness\nCallovian\ncallow\ncallower\ncallowman\ncallowness\nCalluna\ncallus\nCallynteria\ncalm\ncalmant\ncalmative\ncalmer\ncalmierer\ncalmingly\ncalmly\ncalmness\ncalmy\nCalocarpum\nCalochortaceae\nCalochortus\ncalodemon\ncalography\ncalomba\ncalomel\ncalomorphic\nCalonectria\nCalonyction\ncalool\nCalophyllum\nCalopogon\ncalor\ncalorescence\ncalorescent\ncaloric\ncaloricity\ncalorie\ncalorifacient\ncalorific\ncalorifical\ncalorifically\ncalorification\ncalorifics\ncalorifier\ncalorify\ncalorigenic\ncalorimeter\ncalorimetric\ncalorimetrical\ncalorimetrically\ncalorimetry\ncalorimotor\ncaloris\ncalorisator\ncalorist\nCalorite\ncalorize\ncalorizer\nCalosoma\nCalotermes\ncalotermitid\nCalotermitidae\nCalothrix\ncalotte\ncalotype\ncalotypic\ncalotypist\ncaloyer\ncalp\ncalpac\ncalpack\ncalpacked\ncalpulli\nCaltha\ncaltrap\ncaltrop\ncalumba\ncalumet\ncalumniate\ncalumniation\ncalumniative\ncalumniator\ncalumniatory\ncalumnious\ncalumniously\ncalumniousness\ncalumny\nCalusa\ncalutron\nCalvados\ncalvaria\ncalvarium\nCalvary\nCalvatia\ncalve\ncalved\ncalver\ncalves\nCalvin\nCalvinian\nCalvinism\nCalvinist\nCalvinistic\nCalvinistical\nCalvinistically\nCalvinize\ncalvish\ncalvities\ncalvity\ncalvous\ncalx\ncalycanth\nCalycanthaceae\ncalycanthaceous\ncalycanthemous\ncalycanthemy\ncalycanthine\nCalycanthus\ncalycate\nCalyceraceae\ncalyceraceous\ncalyces\ncalyciferous\ncalycifloral\ncalyciflorate\ncalyciflorous\ncalyciform\ncalycinal\ncalycine\ncalycle\ncalycled\nCalycocarpum\ncalycoid\ncalycoideous\nCalycophora\nCalycophorae\ncalycophoran\nCalycozoa\ncalycozoan\ncalycozoic\ncalycozoon\ncalycular\ncalyculate\ncalyculated\ncalycule\ncalyculus\nCalydon\nCalydonian\nCalymene\ncalymma\ncalyphyomy\ncalypsist\nCalypso\ncalypso\ncalypsonian\ncalypter\nCalypterae\nCalyptoblastea\ncalyptoblastic\nCalyptorhynchus\ncalyptra\nCalyptraea\nCalyptranthes\nCalyptrata\nCalyptratae\ncalyptrate\ncalyptriform\ncalyptrimorphous\ncalyptro\ncalyptrogen\nCalyptrogyne\nCalystegia\ncalyx\ncam\ncamaca\nCamacan\ncamagon\ncamail\ncamailed\nCamaldolensian\nCamaldolese\nCamaldolesian\nCamaldolite\nCamaldule\nCamaldulian\ncamalote\ncaman\ncamansi\ncamara\ncamaraderie\nCamarasaurus\ncamarilla\ncamass\nCamassia\ncamata\ncamatina\nCamaxtli\ncamb\nCamball\nCambalo\nCambarus\ncambaye\ncamber\nCambeva\ncambial\ncambiform\ncambiogenetic\ncambism\ncambist\ncambistry\ncambium\nCambodian\ncambogia\ncambrel\ncambresine\nCambrian\nCambric\ncambricleaf\ncambuca\nCambuscan\nCambyuskan\nCame\ncame\ncameist\ncamel\ncamelback\ncameleer\nCamelid\nCamelidae\nCamelina\ncameline\ncamelish\ncamelishness\ncamelkeeper\nCamellia\nCamelliaceae\ncamellike\ncamellin\nCamellus\ncamelman\ncameloid\nCameloidea\ncamelopard\nCamelopardalis\nCamelopardid\nCamelopardidae\nCamelopardus\ncamelry\nCamelus\nCamembert\nCamenae\nCamenes\ncameo\ncameograph\ncameography\ncamera\ncameral\ncameralism\ncameralist\ncameralistic\ncameralistics\ncameraman\nCamerata\ncamerate\ncamerated\ncameration\ncamerier\nCamerina\nCamerinidae\ncamerist\ncamerlingo\nCameronian\nCamestres\ncamilla\ncamillus\ncamion\ncamisado\nCamisard\ncamise\ncamisia\ncamisole\ncamlet\ncamleteen\nCammarum\ncammed\ncammock\ncammocky\ncamomile\ncamoodi\ncamoodie\nCamorra\nCamorrism\nCamorrist\nCamorrista\ncamouflage\ncamouflager\ncamp\nCampa\ncampagna\ncampagnol\ncampaign\ncampaigner\ncampana\ncampane\ncampanero\nCampanian\ncampaniform\ncampanile\ncampaniliform\ncampanilla\ncampanini\ncampanist\ncampanistic\ncampanologer\ncampanological\ncampanologically\ncampanologist\ncampanology\nCampanula\nCampanulaceae\ncampanulaceous\nCampanulales\ncampanular\nCampanularia\nCampanulariae\ncampanularian\nCampanularidae\nCampanulatae\ncampanulate\ncampanulated\ncampanulous\nCampaspe\nCampbellism\nCampbellite\ncampbellite\ncampcraft\nCampe\nCampephagidae\ncampephagine\nCampephilus\ncamper\ncampestral\ncampfight\ncampfire\ncampground\ncamphane\ncamphanic\ncamphanone\ncamphanyl\ncamphene\ncamphine\ncamphire\ncampho\ncamphocarboxylic\ncamphoid\ncamphol\ncampholic\ncampholide\ncampholytic\ncamphor\ncamphoraceous\ncamphorate\ncamphoric\ncamphorize\ncamphorone\ncamphoronic\ncamphoroyl\ncamphorphorone\ncamphorwood\ncamphory\ncamphoryl\ncamphylene\nCampignian\ncampimeter\ncampimetrical\ncampimetry\nCampine\ncampion\ncample\ncampmaster\ncampo\nCampodea\ncampodeid\nCampodeidae\ncampodeiform\ncampodeoid\ncampody\nCamponotus\ncampoo\ncamporee\ncampshed\ncampshedding\ncampsheeting\ncampshot\ncampstool\ncamptodrome\ncamptonite\nCamptosorus\ncampulitropal\ncampulitropous\ncampus\ncampward\ncampylite\ncampylodrome\ncampylometer\nCampyloneuron\ncampylospermous\ncampylotropal\ncampylotropous\ncamshach\ncamshachle\ncamshaft\ncamstane\ncamstone\ncamuning\ncamus\ncamused\ncamwood\ncan\nCana\nCanaan\nCanaanite\nCanaanitess\nCanaanitic\nCanaanitish\ncanaba\nCanacee\nCanada\ncanada\nCanadian\nCanadianism\nCanadianization\nCanadianize\ncanadine\ncanadite\ncanadol\ncanaigre\ncanaille\ncanajong\ncanal\ncanalage\ncanalboat\ncanalicular\ncanaliculate\ncanaliculated\ncanaliculation\ncanaliculi\ncanaliculization\ncanaliculus\ncanaliferous\ncanaliform\ncanalization\ncanalize\ncanaller\ncanalling\ncanalman\ncanalside\nCanamary\ncanamo\nCananaean\nCananga\nCanangium\ncanape\ncanapina\ncanard\nCanari\ncanari\nCanarian\ncanarin\nCanariote\nCanarium\nCanarsee\ncanary\ncanasta\ncanaster\ncanaut\nCanavali\nCanavalia\ncanavalin\nCanberra\ncancan\ncancel\ncancelable\ncancelation\ncanceleer\ncanceler\ncancellarian\ncancellate\ncancellated\ncancellation\ncancelli\ncancellous\ncancellus\ncancelment\ncancer\ncancerate\ncanceration\ncancerdrops\ncancered\ncancerigenic\ncancerism\ncancerophobe\ncancerophobia\ncancerous\ncancerously\ncancerousness\ncancerroot\ncancerweed\ncancerwort\ncanch\ncanchalagua\nCanchi\nCancri\nCancrid\ncancriform\ncancrinite\ncancrisocial\ncancrivorous\ncancrizans\ncancroid\ncancrophagous\ncancrum\ncand\nCandace\ncandareen\ncandela\ncandelabra\ncandelabrum\ncandelilla\ncandent\ncandescence\ncandescent\ncandescently\ncandid\ncandidacy\ncandidate\ncandidateship\ncandidature\ncandidly\ncandidness\ncandied\ncandier\ncandify\nCandiot\ncandiru\ncandle\ncandleball\ncandlebeam\ncandleberry\ncandlebomb\ncandlebox\ncandlefish\ncandleholder\ncandlelight\ncandlelighted\ncandlelighter\ncandlelighting\ncandlelit\ncandlemaker\ncandlemaking\nCandlemas\ncandlenut\ncandlepin\ncandler\ncandlerent\ncandleshine\ncandleshrift\ncandlestand\ncandlestick\ncandlesticked\ncandlestickward\ncandlewaster\ncandlewasting\ncandlewick\ncandlewood\ncandlewright\ncandock\nCandollea\nCandolleaceae\ncandolleaceous\ncandor\ncandroy\ncandy\ncandymaker\ncandymaking\ncandys\ncandystick\ncandytuft\ncandyweed\ncane\ncanebrake\ncanel\ncanelike\ncanella\nCanellaceae\ncanellaceous\nCanelo\ncanelo\ncaneology\ncanephor\ncanephore\ncanephoros\ncanephroi\ncaner\ncanescence\ncanescent\ncanette\ncanewise\ncanework\nCanfield\ncanfieldite\ncanful\ncangan\ncangia\ncangle\ncangler\ncangue\ncanhoop\nCanichana\nCanichanan\ncanicola\nCanicula\ncanicular\ncanicule\ncanid\nCanidae\nCanidia\ncanille\ncaninal\ncanine\ncaniniform\ncaninity\ncaninus\ncanioned\ncanions\nCanis\nCanisiana\ncanistel\ncanister\ncanities\ncanjac\ncank\ncanker\ncankerberry\ncankerbird\ncankereat\ncankered\ncankeredly\ncankeredness\ncankerflower\ncankerous\ncankerroot\ncankerweed\ncankerworm\ncankerwort\ncankery\ncanmaker\ncanmaking\ncanman\nCanna\ncanna\ncannabic\nCannabinaceae\ncannabinaceous\ncannabine\ncannabinol\nCannabis\ncannabism\nCannaceae\ncannaceous\ncannach\ncanned\ncannel\ncannelated\ncannelure\ncannelured\ncannequin\ncanner\ncannery\ncannet\ncannibal\ncannibalean\ncannibalic\ncannibalish\ncannibalism\ncannibalistic\ncannibalistically\ncannibality\ncannibalization\ncannibalize\ncannibally\ncannikin\ncannily\ncanniness\ncanning\ncannon\ncannonade\ncannoned\ncannoneer\ncannoneering\nCannonism\ncannonproof\ncannonry\ncannot\nCannstatt\ncannula\ncannular\ncannulate\ncannulated\ncanny\ncanoe\ncanoeing\nCanoeiro\ncanoeist\ncanoeload\ncanoeman\ncanoewood\ncanon\ncanoncito\ncanoness\ncanonic\ncanonical\ncanonically\ncanonicalness\ncanonicals\ncanonicate\ncanonicity\ncanonics\ncanonist\ncanonistic\ncanonistical\ncanonizant\ncanonization\ncanonize\ncanonizer\ncanonlike\ncanonry\ncanonship\ncanoodle\ncanoodler\nCanopic\ncanopic\nCanopus\ncanopy\ncanorous\ncanorously\ncanorousness\nCanossa\ncanroy\ncanroyer\ncanso\ncant\nCantab\ncantabank\ncantabile\nCantabri\nCantabrian\nCantabrigian\nCantabrize\ncantala\ncantalite\ncantaloupe\ncantankerous\ncantankerously\ncantankerousness\ncantar\ncantara\ncantaro\ncantata\nCantate\ncantation\ncantative\ncantatory\ncantboard\ncanted\ncanteen\ncantefable\ncanter\nCanterburian\nCanterburianism\nCanterbury\ncanterer\ncanthal\nCantharellus\nCantharidae\ncantharidal\ncantharidate\ncantharides\ncantharidian\ncantharidin\ncantharidism\ncantharidize\ncantharis\ncantharophilous\ncantharus\ncanthectomy\ncanthitis\ncantholysis\ncanthoplasty\ncanthorrhaphy\ncanthotomy\ncanthus\ncantic\ncanticle\ncantico\ncantilena\ncantilene\ncantilever\ncantilevered\ncantillate\ncantillation\ncantily\ncantina\ncantiness\ncanting\ncantingly\ncantingness\ncantion\ncantish\ncantle\ncantlet\ncanto\nCanton\ncanton\ncantonal\ncantonalism\ncantoned\ncantoner\nCantonese\ncantonment\ncantoon\ncantor\ncantoral\nCantorian\ncantoris\ncantorous\ncantorship\ncantred\ncantref\ncantrip\ncantus\ncantwise\ncanty\nCanuck\ncanun\ncanvas\ncanvasback\ncanvasman\ncanvass\ncanvassy\ncany\ncanyon\ncanzon\ncanzonet\ncaoba\nCaodaism\nCaodaist\ncaoutchouc\ncaoutchoucin\ncap\ncapability\ncapable\ncapableness\ncapably\ncapacious\ncapaciously\ncapaciousness\ncapacitance\ncapacitate\ncapacitation\ncapacitative\ncapacitativly\ncapacitive\ncapacitor\ncapacity\ncapanna\ncapanne\ncaparison\ncapax\ncapcase\nCape\ncape\ncaped\ncapel\ncapelet\ncapelin\ncapeline\nCapella\ncapellet\ncaper\ncaperbush\ncapercaillie\ncapercally\ncapercut\ncaperer\ncapering\ncaperingly\nCapernaism\nCapernaite\nCapernaitic\nCapernaitical\nCapernaitically\nCapernaitish\ncapernoited\ncapernoitie\ncapernoity\ncapersome\ncaperwort\ncapes\ncapeskin\nCapetian\nCapetonian\ncapeweed\ncapewise\ncapful\nCaph\ncaph\ncaphar\ncaphite\nCaphtor\nCaphtorim\ncapias\ncapicha\ncapillaceous\ncapillaire\ncapillament\ncapillarectasia\ncapillarily\ncapillarimeter\ncapillariness\ncapillariomotor\ncapillarity\ncapillary\ncapillation\ncapilliculture\ncapilliform\ncapillitial\ncapillitium\ncapillose\ncapistrate\ncapital\ncapitaldom\ncapitaled\ncapitalism\ncapitalist\ncapitalistic\ncapitalistically\ncapitalizable\ncapitalization\ncapitalize\ncapitally\ncapitalness\ncapitan\ncapitate\ncapitated\ncapitatim\ncapitation\ncapitative\ncapitatum\ncapitellar\ncapitellate\ncapitelliform\ncapitellum\nCapito\nCapitol\nCapitolian\nCapitoline\nCapitolium\nCapitonidae\nCapitoninae\ncapitoul\ncapitoulate\ncapitulant\ncapitular\ncapitularly\ncapitulary\ncapitulate\ncapitulation\ncapitulator\ncapitulatory\ncapituliform\ncapitulum\ncapivi\ncapkin\ncapless\ncaplin\ncapmaker\ncapmaking\ncapman\ncapmint\nCapnodium\nCapnoides\ncapnomancy\ncapocchia\ncapomo\ncapon\ncaponier\ncaponize\ncaponizer\ncaporal\ncapot\ncapote\ncappadine\nCappadocian\nCapparidaceae\ncapparidaceous\nCapparis\ncapped\ncappelenite\ncapper\ncappie\ncapping\ncapple\ncappy\nCapra\ncaprate\nCaprella\nCaprellidae\ncaprelline\ncapreol\ncapreolar\ncapreolary\ncapreolate\ncapreoline\nCapreolus\nCapri\ncapric\ncapriccetto\ncapricci\ncapriccio\ncaprice\ncapricious\ncapriciously\ncapriciousness\nCapricorn\nCapricornid\nCapricornus\ncaprid\ncaprificate\ncaprification\ncaprificator\ncaprifig\nCaprifoliaceae\ncaprifoliaceous\nCaprifolium\ncaprifolium\ncapriform\ncaprigenous\nCaprimulgi\nCaprimulgidae\nCaprimulgiformes\ncaprimulgine\nCaprimulgus\ncaprin\ncaprine\ncaprinic\nCapriola\ncapriole\nCapriote\ncapriped\ncapripede\ncaprizant\ncaproate\ncaproic\ncaproin\nCapromys\ncaprone\ncapronic\ncapronyl\ncaproyl\ncapryl\ncaprylate\ncaprylene\ncaprylic\ncaprylin\ncaprylone\ncaprylyl\ncapsa\ncapsaicin\nCapsella\ncapsheaf\ncapshore\nCapsian\ncapsicin\nCapsicum\ncapsicum\ncapsid\nCapsidae\ncapsizal\ncapsize\ncapstan\ncapstone\ncapsula\ncapsulae\ncapsular\ncapsulate\ncapsulated\ncapsulation\ncapsule\ncapsulectomy\ncapsuler\ncapsuliferous\ncapsuliform\ncapsuligerous\ncapsulitis\ncapsulociliary\ncapsulogenous\ncapsulolenticular\ncapsulopupillary\ncapsulorrhaphy\ncapsulotome\ncapsulotomy\ncapsumin\ncaptaculum\ncaptain\ncaptaincy\ncaptainess\ncaptainly\ncaptainry\ncaptainship\ncaptance\ncaptation\ncaption\ncaptious\ncaptiously\ncaptiousness\ncaptivate\ncaptivately\ncaptivating\ncaptivatingly\ncaptivation\ncaptivative\ncaptivator\ncaptivatrix\ncaptive\ncaptivity\ncaptor\ncaptress\ncapturable\ncapture\ncapturer\nCapuan\ncapuche\ncapuched\nCapuchin\ncapuchin\ncapucine\ncapulet\ncapulin\ncapybara\nCaquetio\ncar\nCara\ncarabao\ncarabeen\ncarabid\nCarabidae\ncarabidan\ncarabideous\ncarabidoid\ncarabin\ncarabineer\nCarabini\ncaraboid\nCarabus\ncarabus\ncaracal\ncaracara\ncaracol\ncaracole\ncaracoler\ncaracoli\ncaracolite\ncaracoller\ncaracore\ncaract\nCaractacus\ncaracter\nCaradoc\ncarafe\nCaragana\nCaraguata\ncaraguata\nCaraho\ncaraibe\nCaraipa\ncaraipi\nCaraja\nCarajas\ncarajura\ncaramba\ncarambola\ncarambole\ncaramel\ncaramelan\ncaramelen\ncaramelin\ncaramelization\ncaramelize\ncaramoussal\ncarancha\ncaranda\nCarandas\ncaranday\ncarane\nCaranga\ncarangid\nCarangidae\ncarangoid\nCarangus\ncaranna\nCaranx\nCarapa\ncarapace\ncarapaced\nCarapache\nCarapacho\ncarapacic\ncarapato\ncarapax\nCarapidae\ncarapine\ncarapo\nCarapus\nCarara\ncarat\ncaratch\ncaraunda\ncaravan\ncaravaneer\ncaravanist\ncaravanner\ncaravansary\ncaravanserai\ncaravanserial\ncaravel\ncaraway\nCarayan\ncarbacidometer\ncarbamate\ncarbamic\ncarbamide\ncarbamido\ncarbamine\ncarbamino\ncarbamyl\ncarbanil\ncarbanilic\ncarbanilide\ncarbarn\ncarbasus\ncarbazic\ncarbazide\ncarbazine\ncarbazole\ncarbazylic\ncarbeen\ncarbene\ncarberry\ncarbethoxy\ncarbethoxyl\ncarbide\ncarbimide\ncarbine\ncarbinol\ncarbinyl\ncarbo\ncarboazotine\ncarbocinchomeronic\ncarbodiimide\ncarbodynamite\ncarbogelatin\ncarbohemoglobin\ncarbohydrase\ncarbohydrate\ncarbohydraturia\ncarbohydrazide\ncarbohydride\ncarbohydrogen\ncarbolate\ncarbolated\ncarbolfuchsin\ncarbolic\ncarbolineate\nCarbolineum\ncarbolize\nCarboloy\ncarboluria\ncarbolxylol\ncarbomethene\ncarbomethoxy\ncarbomethoxyl\ncarbon\ncarbona\ncarbonaceous\ncarbonade\ncarbonado\nCarbonari\nCarbonarism\nCarbonarist\ncarbonatation\ncarbonate\ncarbonation\ncarbonatization\ncarbonator\ncarbonemia\ncarbonero\ncarbonic\ncarbonide\nCarboniferous\ncarboniferous\ncarbonification\ncarbonify\ncarbonigenous\ncarbonimeter\ncarbonimide\ncarbonite\ncarbonitride\ncarbonium\ncarbonizable\ncarbonization\ncarbonize\ncarbonizer\ncarbonless\nCarbonnieux\ncarbonometer\ncarbonometry\ncarbonous\ncarbonuria\ncarbonyl\ncarbonylene\ncarbonylic\ncarbophilous\ncarbora\nCarborundum\ncarborundum\ncarbosilicate\ncarbostyril\ncarboxide\ncarboxy\nCarboxydomonas\ncarboxyhemoglobin\ncarboxyl\ncarboxylase\ncarboxylate\ncarboxylation\ncarboxylic\ncarboy\ncarboyed\ncarbro\ncarbromal\ncarbuilder\ncarbuncle\ncarbuncled\ncarbuncular\ncarbungi\ncarburant\ncarburate\ncarburation\ncarburator\ncarbure\ncarburet\ncarburetant\ncarburetor\ncarburization\ncarburize\ncarburizer\ncarburometer\ncarbyl\ncarbylamine\ncarcajou\ncarcake\ncarcanet\ncarcaneted\ncarcass\nCarcavelhos\ncarceag\ncarcel\ncarceral\ncarcerate\ncarceration\nCarcharhinus\nCarcharias\ncarchariid\nCarchariidae\ncarcharioid\nCarcharodon\ncarcharodont\ncarcinemia\ncarcinogen\ncarcinogenesis\ncarcinogenic\ncarcinoid\ncarcinological\ncarcinologist\ncarcinology\ncarcinolysin\ncarcinolytic\ncarcinoma\ncarcinomata\ncarcinomatoid\ncarcinomatosis\ncarcinomatous\ncarcinomorphic\ncarcinophagous\ncarcinopolypus\ncarcinosarcoma\ncarcinosarcomata\nCarcinoscorpius\ncarcinosis\ncarcoon\ncard\ncardaissin\nCardamine\ncardamom\nCardanic\ncardboard\ncardcase\ncardecu\ncarded\ncardel\ncarder\ncardholder\ncardia\ncardiac\ncardiacal\nCardiacea\ncardiacean\ncardiagra\ncardiagram\ncardiagraph\ncardiagraphy\ncardial\ncardialgia\ncardialgy\ncardiameter\ncardiamorphia\ncardianesthesia\ncardianeuria\ncardiant\ncardiaplegia\ncardiarctia\ncardiasthenia\ncardiasthma\ncardiataxia\ncardiatomy\ncardiatrophia\ncardiauxe\nCardiazol\ncardicentesis\ncardiectasis\ncardiectomize\ncardiectomy\ncardielcosis\ncardiemphraxia\ncardiform\nCardigan\ncardigan\nCardiidae\ncardin\ncardinal\ncardinalate\ncardinalic\nCardinalis\ncardinalism\ncardinalist\ncardinalitial\ncardinalitian\ncardinally\ncardinalship\ncardines\ncarding\ncardioaccelerator\ncardioarterial\ncardioblast\ncardiocarpum\ncardiocele\ncardiocentesis\ncardiocirrhosis\ncardioclasia\ncardioclasis\ncardiodilator\ncardiodynamics\ncardiodynia\ncardiodysesthesia\ncardiodysneuria\ncardiogenesis\ncardiogenic\ncardiogram\ncardiograph\ncardiographic\ncardiography\ncardiohepatic\ncardioid\ncardiokinetic\ncardiolith\ncardiological\ncardiologist\ncardiology\ncardiolysis\ncardiomalacia\ncardiomegaly\ncardiomelanosis\ncardiometer\ncardiometric\ncardiometry\ncardiomotility\ncardiomyoliposis\ncardiomyomalacia\ncardioncus\ncardionecrosis\ncardionephric\ncardioneural\ncardioneurosis\ncardionosus\ncardioparplasis\ncardiopathic\ncardiopathy\ncardiopericarditis\ncardiophobe\ncardiophobia\ncardiophrenia\ncardioplasty\ncardioplegia\ncardiopneumatic\ncardiopneumograph\ncardioptosis\ncardiopulmonary\ncardiopuncture\ncardiopyloric\ncardiorenal\ncardiorespiratory\ncardiorrhaphy\ncardiorrheuma\ncardiorrhexis\ncardioschisis\ncardiosclerosis\ncardioscope\ncardiospasm\nCardiospermum\ncardiosphygmogram\ncardiosphygmograph\ncardiosymphysis\ncardiotherapy\ncardiotomy\ncardiotonic\ncardiotoxic\ncardiotrophia\ncardiotrophotherapy\ncardiovascular\ncardiovisceral\ncardipaludism\ncardipericarditis\ncardisophistical\ncarditic\ncarditis\nCardium\ncardlike\ncardmaker\ncardmaking\ncardo\ncardol\ncardon\ncardona\ncardoncillo\ncardooer\ncardoon\ncardophagus\ncardplayer\ncardroom\ncardsharp\ncardsharping\ncardstock\nCarduaceae\ncarduaceous\nCarduelis\nCarduus\ncare\ncarecloth\ncareen\ncareenage\ncareener\ncareer\ncareerer\ncareering\ncareeringly\ncareerist\ncarefree\ncareful\ncarefully\ncarefulness\ncareless\ncarelessly\ncarelessness\ncarene\ncarer\ncaress\ncaressant\ncaresser\ncaressing\ncaressingly\ncaressive\ncaressively\ncarest\ncaret\ncaretaker\ncaretaking\nCaretta\nCarettochelydidae\ncareworn\nCarex\ncarfare\ncarfax\ncarfuffle\ncarful\ncarga\ncargo\ncargoose\ncarhop\ncarhouse\ncariacine\nCariacus\ncariama\nCariamae\nCarian\nCarib\nCaribal\nCariban\nCaribbean\nCaribbee\nCaribi\nCaribisi\ncaribou\nCarica\nCaricaceae\ncaricaceous\ncaricatura\ncaricaturable\ncaricatural\ncaricature\ncaricaturist\ncaricetum\ncaricographer\ncaricography\ncaricologist\ncaricology\ncaricous\ncarid\nCarida\nCaridea\ncaridean\ncaridoid\nCaridomorpha\ncaries\nCarijona\ncarillon\ncarillonneur\ncarina\ncarinal\nCarinaria\nCarinatae\ncarinate\ncarinated\ncarination\nCariniana\ncariniform\nCarinthian\ncariole\ncarioling\ncariosity\ncarious\ncariousness\nCaripuna\nCariri\nCaririan\nCarisa\nCarissa\ncaritative\ncaritive\nCariyo\ncark\ncarking\ncarkingly\ncarkled\nCarl\ncarl\ncarless\ncarlet\ncarlie\ncarlin\nCarlina\ncarline\ncarling\ncarlings\ncarlish\ncarlishness\nCarlisle\nCarlism\nCarlist\nCarlo\ncarload\ncarloading\ncarloadings\nCarlos\ncarlot\nCarlovingian\ncarls\nCarludovica\nCarlylean\nCarlyleian\nCarlylese\nCarlylesque\nCarlylian\nCarlylism\ncarmagnole\ncarmalum\nCarman\ncarman\nCarmanians\nCarmel\nCarmela\ncarmele\nCarmelite\nCarmelitess\ncarmeloite\nCarmen\ncarminative\nCarmine\ncarmine\ncarminette\ncarminic\ncarminite\ncarminophilous\ncarmoisin\ncarmot\nCarnacian\ncarnage\ncarnaged\ncarnal\ncarnalism\ncarnalite\ncarnality\ncarnalize\ncarnallite\ncarnally\ncarnalness\ncarnaptious\nCarnaria\ncarnassial\ncarnate\ncarnation\ncarnationed\ncarnationist\ncarnauba\ncarnaubic\ncarnaubyl\nCarnegie\nCarnegiea\ncarnelian\ncarneol\ncarneole\ncarneous\ncarney\ncarnic\ncarniferous\ncarniferrin\ncarnifex\ncarnification\ncarnifices\ncarnificial\ncarniform\ncarnify\nCarniolan\ncarnival\ncarnivaler\ncarnivalesque\nCarnivora\ncarnivoracity\ncarnivoral\ncarnivore\ncarnivorism\ncarnivorous\ncarnivorously\ncarnivorousness\ncarnose\ncarnosine\ncarnosity\ncarnotite\ncarnous\nCaro\ncaroa\ncarob\ncaroba\ncaroche\nCaroid\nCarol\ncarol\nCarolan\nCarole\nCarolean\ncaroler\ncaroli\ncarolin\nCarolina\nCaroline\ncaroline\nCaroling\nCarolingian\nCarolinian\ncarolus\nCarolyn\ncarom\ncarombolette\ncarone\ncaronic\ncaroome\ncaroon\ncarotene\ncarotenoid\ncarotic\ncarotid\ncarotidal\ncarotidean\ncarotin\ncarotinemia\ncarotinoid\ncaroubier\ncarousal\ncarouse\ncarouser\ncarousing\ncarousingly\ncarp\ncarpaine\ncarpal\ncarpale\ncarpalia\nCarpathian\ncarpel\ncarpellary\ncarpellate\ncarpent\ncarpenter\nCarpenteria\ncarpentering\ncarpentership\ncarpentry\ncarper\ncarpet\ncarpetbag\ncarpetbagger\ncarpetbaggery\ncarpetbaggism\ncarpetbagism\ncarpetbeater\ncarpeting\ncarpetlayer\ncarpetless\ncarpetmaker\ncarpetmaking\ncarpetmonger\ncarpetweb\ncarpetweed\ncarpetwork\ncarpetwoven\nCarphiophiops\ncarpholite\nCarphophis\ncarphosiderite\ncarpid\ncarpidium\ncarpincho\ncarping\ncarpingly\ncarpintero\nCarpinus\nCarpiodes\ncarpitis\ncarpium\ncarpocace\nCarpocapsa\ncarpocarpal\ncarpocephala\ncarpocephalum\ncarpocerite\ncarpocervical\nCarpocratian\nCarpodacus\nCarpodetus\ncarpogam\ncarpogamy\ncarpogenic\ncarpogenous\ncarpogone\ncarpogonial\ncarpogonium\nCarpoidea\ncarpolite\ncarpolith\ncarpological\ncarpologically\ncarpologist\ncarpology\ncarpomania\ncarpometacarpal\ncarpometacarpus\ncarpopedal\nCarpophaga\ncarpophagous\ncarpophalangeal\ncarpophore\ncarpophyll\ncarpophyte\ncarpopodite\ncarpopoditic\ncarpoptosia\ncarpoptosis\ncarport\ncarpos\ncarposperm\ncarposporangia\ncarposporangial\ncarposporangium\ncarpospore\ncarposporic\ncarposporous\ncarpostome\ncarpus\ncarquaise\ncarr\ncarrack\ncarrageen\ncarrageenin\nCarrara\nCarraran\ncarrel\ncarriable\ncarriage\ncarriageable\ncarriageful\ncarriageless\ncarriagesmith\ncarriageway\nCarrick\ncarrick\nCarrie\ncarried\ncarrier\ncarrion\ncarritch\ncarritches\ncarriwitchet\nCarrizo\ncarrizo\ncarroch\ncarrollite\ncarronade\ncarrot\ncarrotage\ncarroter\ncarrotiness\ncarrottop\ncarrotweed\ncarrotwood\ncarroty\ncarrousel\ncarrow\nCarry\ncarry\ncarryall\ncarrying\ncarrytale\ncarse\ncarshop\ncarsick\ncarsmith\nCarsten\ncart\ncartable\ncartaceous\ncartage\ncartboot\ncartbote\ncarte\ncartel\ncartelism\ncartelist\ncartelization\ncartelize\nCarter\ncarter\nCartesian\nCartesianism\ncartful\nCarthaginian\ncarthame\ncarthamic\ncarthamin\nCarthamus\nCarthusian\nCartier\ncartilage\ncartilaginean\nCartilaginei\ncartilagineous\nCartilagines\ncartilaginification\ncartilaginoid\ncartilaginous\ncartisane\nCartist\ncartload\ncartmaker\ncartmaking\ncartman\ncartobibliography\ncartogram\ncartograph\ncartographer\ncartographic\ncartographical\ncartographically\ncartography\ncartomancy\ncarton\ncartonnage\ncartoon\ncartoonist\ncartouche\ncartridge\ncartsale\ncartulary\ncartway\ncartwright\ncartwrighting\ncarty\ncarua\ncarucage\ncarucal\ncarucate\ncarucated\nCarum\ncaruncle\ncaruncula\ncarunculae\ncaruncular\ncarunculate\ncarunculated\ncarunculous\ncarvacrol\ncarvacryl\ncarval\ncarve\ncarvel\ncarven\ncarvene\ncarver\ncarvership\ncarvestrene\ncarving\ncarvoepra\ncarvol\ncarvomenthene\ncarvone\ncarvyl\ncarwitchet\nCary\nCarya\ncaryatic\ncaryatid\ncaryatidal\ncaryatidean\ncaryatidic\ncaryl\nCaryocar\nCaryocaraceae\ncaryocaraceous\nCaryophyllaceae\ncaryophyllaceous\ncaryophyllene\ncaryophylleous\ncaryophyllin\ncaryophyllous\nCaryophyllus\ncaryopilite\ncaryopses\ncaryopsides\ncaryopsis\nCaryopteris\nCaryota\ncasaba\ncasabe\ncasal\ncasalty\nCasamarca\nCasanovanic\nCasasia\ncasate\ncasaun\ncasava\ncasave\ncasavi\ncasbah\ncascabel\ncascade\nCascadia\nCascadian\ncascadite\ncascado\ncascalho\ncascalote\ncascara\ncascarilla\ncascaron\ncasco\ncascol\nCase\ncase\nCasearia\ncasease\ncaseate\ncaseation\ncasebook\ncasebox\ncased\ncaseful\ncasefy\ncaseharden\ncaseic\ncasein\ncaseinate\ncaseinogen\ncasekeeper\nCasel\ncaseless\ncaselessly\ncasemaker\ncasemaking\ncasemate\ncasemated\ncasement\ncasemented\ncaseolysis\ncaseose\ncaseous\ncaser\ncasern\ncaseum\ncaseweed\ncasewood\ncasework\ncaseworker\ncaseworm\nCasey\ncash\ncasha\ncashable\ncashableness\ncashaw\ncashbook\ncashbox\ncashboy\ncashcuttee\ncashel\ncashew\ncashgirl\nCashibo\ncashier\ncashierer\ncashierment\ncashkeeper\ncashment\nCashmere\ncashmere\ncashmerette\nCashmirian\nCasimir\nCasimiroa\ncasing\ncasino\ncasiri\ncask\ncasket\ncasking\ncasklike\nCaslon\nCaspar\nCasparian\nCasper\nCaspian\ncasque\ncasqued\ncasquet\ncasquetel\ncasquette\ncass\ncassabanana\ncassabully\ncassady\nCassandra\ncassareep\ncassation\ncasse\nCassegrain\nCassegrainian\ncasselty\ncassena\ncasserole\nCassia\ncassia\nCassiaceae\nCassian\ncassican\nCassicus\nCassida\ncassideous\ncassidid\nCassididae\nCassidinae\ncassidony\nCassidulina\ncassiduloid\nCassiduloidea\nCassie\ncassie\nCassiepeia\ncassimere\ncassina\ncassine\nCassinese\ncassinette\nCassinian\ncassino\ncassinoid\ncassioberry\nCassiope\nCassiopeia\nCassiopeian\nCassiopeid\ncassiopeium\nCassis\ncassis\ncassiterite\nCassius\ncassock\ncassolette\ncasson\ncassonade\ncassoon\ncassowary\ncassumunar\nCassytha\nCassythaceae\ncast\ncastable\ncastagnole\nCastalia\nCastalian\nCastalides\nCastalio\nCastanea\ncastanean\ncastaneous\ncastanet\nCastanopsis\nCastanospermum\ncastaway\ncaste\ncasteless\ncastelet\ncastellan\ncastellano\ncastellanship\ncastellany\ncastellar\ncastellate\ncastellated\ncastellation\ncaster\ncasterless\ncasthouse\ncastice\ncastigable\ncastigate\ncastigation\ncastigative\ncastigator\ncastigatory\nCastilian\nCastilla\nCastilleja\nCastilloa\ncasting\ncastle\ncastled\ncastlelike\ncastlet\ncastlewards\ncastlewise\ncastling\ncastock\ncastoff\nCastor\ncastor\nCastores\ncastoreum\ncastorial\nCastoridae\ncastorin\ncastorite\ncastorized\nCastoroides\ncastory\ncastra\ncastral\ncastrametation\ncastrate\ncastrater\ncastration\ncastrator\ncastrensial\ncastrensian\ncastrum\ncastuli\ncasual\ncasualism\ncasualist\ncasuality\ncasually\ncasualness\ncasualty\nCasuariidae\nCasuariiformes\nCasuarina\nCasuarinaceae\ncasuarinaceous\nCasuarinales\nCasuarius\ncasuary\ncasuist\ncasuistess\ncasuistic\ncasuistical\ncasuistically\ncasuistry\ncasula\ncaswellite\nCasziel\nCat\ncat\ncatabaptist\ncatabases\ncatabasis\ncatabatic\ncatabibazon\ncatabiotic\ncatabolic\ncatabolically\ncatabolin\ncatabolism\ncatabolite\ncatabolize\ncatacaustic\ncatachreses\ncatachresis\ncatachrestic\ncatachrestical\ncatachrestically\ncatachthonian\ncataclasm\ncataclasmic\ncataclastic\ncataclinal\ncataclysm\ncataclysmal\ncataclysmatic\ncataclysmatist\ncataclysmic\ncataclysmically\ncataclysmist\ncatacomb\ncatacorolla\ncatacoustics\ncatacromyodian\ncatacrotic\ncatacrotism\ncatacumbal\ncatadicrotic\ncatadicrotism\ncatadioptric\ncatadioptrical\ncatadioptrics\ncatadromous\ncatafalco\ncatafalque\ncatagenesis\ncatagenetic\ncatagmatic\nCataian\ncatakinesis\ncatakinetic\ncatakinetomer\ncatakinomeric\nCatalan\nCatalanganes\nCatalanist\ncatalase\nCatalaunian\ncatalecta\ncatalectic\ncatalecticant\ncatalepsis\ncatalepsy\ncataleptic\ncataleptiform\ncataleptize\ncataleptoid\ncatalexis\ncatalina\ncatalineta\ncatalinite\ncatallactic\ncatallactically\ncatallactics\ncatallum\ncatalogia\ncatalogic\ncatalogical\ncatalogist\ncatalogistic\ncatalogue\ncataloguer\ncataloguish\ncataloguist\ncataloguize\nCatalonian\ncatalowne\nCatalpa\ncatalpa\ncatalufa\ncatalyses\ncatalysis\ncatalyst\ncatalyte\ncatalytic\ncatalytical\ncatalytically\ncatalyzator\ncatalyze\ncatalyzer\ncatamaran\nCatamarcan\nCatamarenan\ncatamenia\ncatamenial\ncatamite\ncatamited\ncatamiting\ncatamount\ncatamountain\ncatan\nCatananche\ncatapan\ncatapasm\ncatapetalous\ncataphasia\ncataphatic\ncataphora\ncataphoresis\ncataphoretic\ncataphoria\ncataphoric\ncataphract\nCataphracta\nCataphracti\ncataphrenia\ncataphrenic\nCataphrygian\ncataphrygianism\ncataphyll\ncataphylla\ncataphyllary\ncataphyllum\ncataphysical\ncataplasia\ncataplasis\ncataplasm\ncatapleiite\ncataplexy\ncatapult\ncatapultic\ncatapultier\ncataract\ncataractal\ncataracted\ncataractine\ncataractous\ncataractwise\ncataria\ncatarinite\ncatarrh\ncatarrhal\ncatarrhally\ncatarrhed\nCatarrhina\ncatarrhine\ncatarrhinian\ncatarrhous\ncatasarka\nCatasetum\ncatasta\ncatastaltic\ncatastasis\ncatastate\ncatastatic\ncatasterism\ncatastrophal\ncatastrophe\ncatastrophic\ncatastrophical\ncatastrophically\ncatastrophism\ncatastrophist\ncatathymic\ncatatonia\ncatatoniac\ncatatonic\ncatawampous\ncatawampously\ncatawamptious\ncatawamptiously\ncatawampus\nCatawba\ncatberry\ncatbird\ncatboat\ncatcall\ncatch\ncatchable\ncatchall\ncatchcry\ncatcher\ncatchfly\ncatchiness\ncatching\ncatchingly\ncatchingness\ncatchland\ncatchment\ncatchpenny\ncatchplate\ncatchpole\ncatchpolery\ncatchpoleship\ncatchpoll\ncatchpollery\ncatchup\ncatchwater\ncatchweed\ncatchweight\ncatchword\ncatchwork\ncatchy\ncatclaw\ncatdom\ncate\ncatechesis\ncatechetic\ncatechetical\ncatechetically\ncatechin\ncatechism\ncatechismal\ncatechist\ncatechistic\ncatechistical\ncatechistically\ncatechizable\ncatechization\ncatechize\ncatechizer\ncatechol\ncatechu\ncatechumen\ncatechumenal\ncatechumenate\ncatechumenical\ncatechumenically\ncatechumenism\ncatechumenship\ncatechutannic\ncategorem\ncategorematic\ncategorematical\ncategorematically\ncategorial\ncategoric\ncategorical\ncategorically\ncategoricalness\ncategorist\ncategorization\ncategorize\ncategory\ncatelectrotonic\ncatelectrotonus\ncatella\ncatena\ncatenae\ncatenarian\ncatenary\ncatenate\ncatenated\ncatenation\ncatenoid\ncatenulate\ncatepuce\ncater\ncateran\ncatercap\ncatercorner\ncaterer\ncaterership\ncateress\ncaterpillar\ncaterpillared\ncaterpillarlike\ncaterva\ncaterwaul\ncaterwauler\ncaterwauling\nCatesbaea\ncateye\ncatface\ncatfaced\ncatfacing\ncatfall\ncatfish\ncatfoot\ncatfooted\ncatgut\nCatha\nCathari\nCatharina\nCatharine\nCatharism\nCatharist\nCatharistic\ncatharization\ncatharize\ncatharpin\ncatharping\nCathars\ncatharsis\nCathartae\nCathartes\ncathartic\ncathartical\ncathartically\ncatharticalness\nCathartidae\nCathartides\nCathartolinum\nCathay\nCathayan\ncathead\ncathect\ncathectic\ncathection\ncathedra\ncathedral\ncathedraled\ncathedralesque\ncathedralic\ncathedrallike\ncathedralwise\ncathedratic\ncathedratica\ncathedratical\ncathedratically\ncathedraticum\ncathepsin\nCatherine\ncatheter\ncatheterism\ncatheterization\ncatheterize\ncatheti\ncathetometer\ncathetometric\ncathetus\ncathexion\ncathexis\ncathidine\ncathin\ncathine\ncathinine\ncathion\ncathisma\ncathodal\ncathode\ncathodic\ncathodical\ncathodically\ncathodofluorescence\ncathodograph\ncathodography\ncathodoluminescence\ncathograph\ncathography\ncathole\ncatholic\ncatholical\ncatholically\ncatholicalness\ncatholicate\ncatholicism\ncatholicist\ncatholicity\ncatholicize\ncatholicizer\ncatholicly\ncatholicness\ncatholicon\ncatholicos\ncatholicus\ncatholyte\ncathood\ncathop\nCathrin\ncathro\nCathryn\nCathy\nCatilinarian\ncation\ncationic\ncativo\ncatjang\ncatkin\ncatkinate\ncatlap\ncatlike\ncatlin\ncatling\ncatlinite\ncatmalison\ncatmint\ncatnip\ncatoblepas\nCatocala\ncatocalid\ncatocathartic\ncatoctin\nCatodon\ncatodont\ncatogene\ncatogenic\nCatoism\nCatonian\nCatonic\nCatonically\nCatonism\ncatoptric\ncatoptrical\ncatoptrically\ncatoptrics\ncatoptrite\ncatoptromancy\ncatoptromantic\nCatoquina\ncatostomid\nCatostomidae\ncatostomoid\nCatostomus\ncatpiece\ncatpipe\ncatproof\nCatskill\ncatskin\ncatstep\ncatstick\ncatstitch\ncatstitcher\ncatstone\ncatsup\ncattabu\ncattail\ncattalo\ncattery\nCatti\ncattily\ncattimandoo\ncattiness\ncatting\ncattish\ncattishly\ncattishness\ncattle\ncattlebush\ncattlegate\ncattleless\ncattleman\nCattleya\ncattleya\ncattleyak\nCatty\ncatty\ncattyman\nCatullian\ncatvine\ncatwalk\ncatwise\ncatwood\ncatwort\ncaubeen\ncauboge\nCaucasian\nCaucasic\nCaucasoid\ncauch\ncauchillo\ncaucho\ncaucus\ncauda\ncaudad\ncaudae\ncaudal\ncaudally\ncaudalward\nCaudata\ncaudata\ncaudate\ncaudated\ncaudation\ncaudatolenticular\ncaudatory\ncaudatum\ncaudex\ncaudices\ncaudicle\ncaudiform\ncaudillism\ncaudle\ncaudocephalad\ncaudodorsal\ncaudofemoral\ncaudolateral\ncaudotibial\ncaudotibialis\nCaughnawaga\ncaught\ncauk\ncaul\ncauld\ncauldrife\ncauldrifeness\nCaulerpa\nCaulerpaceae\ncaulerpaceous\ncaules\ncaulescent\ncaulicle\ncaulicole\ncaulicolous\ncaulicule\ncauliculus\ncauliferous\ncauliflorous\ncauliflory\ncauliflower\ncauliform\ncauligenous\ncaulinar\ncaulinary\ncauline\ncaulis\nCaulite\ncaulivorous\ncaulocarpic\ncaulocarpous\ncaulome\ncaulomer\ncaulomic\ncaulophylline\nCaulophyllum\nCaulopteris\ncaulopteris\ncaulosarc\ncaulotaxis\ncaulotaxy\ncaulote\ncaum\ncauma\ncaumatic\ncaunch\nCaunos\nCaunus\ncaup\ncaupo\ncaupones\nCauqui\ncaurale\nCaurus\ncausability\ncausable\ncausal\ncausalgia\ncausality\ncausally\ncausate\ncausation\ncausational\ncausationism\ncausationist\ncausative\ncausatively\ncausativeness\ncausativity\ncause\ncauseful\ncauseless\ncauselessly\ncauselessness\ncauser\ncauserie\ncauseway\ncausewayman\ncausey\ncausidical\ncausing\ncausingness\ncausse\ncausson\ncaustic\ncaustical\ncaustically\ncausticiser\ncausticism\ncausticity\ncausticization\ncausticize\ncausticizer\ncausticly\ncausticness\ncaustification\ncaustify\nCausus\ncautel\ncautelous\ncautelously\ncautelousness\ncauter\ncauterant\ncauterization\ncauterize\ncautery\ncaution\ncautionary\ncautioner\ncautionry\ncautious\ncautiously\ncautiousness\ncautivo\ncava\ncavae\ncaval\ncavalcade\ncavalero\ncavalier\ncavalierish\ncavalierishness\ncavalierism\ncavalierly\ncavalierness\ncavaliero\ncavaliership\ncavalla\ncavalry\ncavalryman\ncavascope\ncavate\ncavatina\ncave\ncaveat\ncaveator\ncavekeeper\ncavel\ncavelet\ncavelike\ncavendish\ncavern\ncavernal\ncaverned\ncavernicolous\ncavernitis\ncavernlike\ncavernoma\ncavernous\ncavernously\ncavernulous\ncavesson\ncavetto\nCavia\ncaviar\ncavicorn\nCavicornia\nCavidae\ncavie\ncavil\ncaviler\ncaviling\ncavilingly\ncavilingness\ncavillation\nCavina\ncaving\ncavings\ncavish\ncavitary\ncavitate\ncavitation\ncavitied\ncavity\ncaviya\ncavort\ncavus\ncavy\ncaw\ncawk\ncawky\ncawney\ncawquaw\ncaxiri\ncaxon\nCaxton\nCaxtonian\ncay\nCayapa\nCayapo\nCayenne\ncayenne\ncayenned\nCayleyan\ncayman\nCayubaba\nCayubaban\nCayuga\nCayugan\nCayuse\nCayuvava\ncaza\ncazimi\nCcoya\nce\nCeanothus\ncearin\ncease\nceaseless\nceaselessly\nceaselessness\nceasmic\nCebalrai\nCebatha\ncebell\ncebian\ncebid\nCebidae\ncebil\ncebine\nceboid\ncebollite\ncebur\nCebus\ncecidiologist\ncecidiology\ncecidium\ncecidogenous\ncecidologist\ncecidology\ncecidomyian\ncecidomyiid\nCecidomyiidae\ncecidomyiidous\nCecil\nCecile\nCecilia\ncecilite\ncecils\nCecily\ncecity\ncecograph\nCecomorphae\ncecomorphic\ncecostomy\nCecropia\nCecrops\ncecutiency\ncedar\ncedarbird\ncedared\ncedarn\ncedarware\ncedarwood\ncedary\ncede\ncedent\nceder\ncedilla\ncedrat\ncedrate\ncedre\nCedrela\ncedrene\nCedric\ncedrin\ncedrine\ncedriret\ncedrium\ncedrol\ncedron\nCedrus\ncedry\ncedula\ncee\nCeiba\nceibo\nceil\nceile\nceiler\nceilidh\nceiling\nceilinged\nceilingward\nceilingwards\nceilometer\nCeladon\nceladon\nceladonite\nCelaeno\ncelandine\nCelanese\nCelarent\nCelastraceae\ncelastraceous\nCelastrus\ncelation\ncelative\ncelature\nCelebesian\ncelebrant\ncelebrate\ncelebrated\ncelebratedness\ncelebrater\ncelebration\ncelebrative\ncelebrator\ncelebratory\ncelebrity\ncelemin\ncelemines\nceleomorph\nCeleomorphae\nceleomorphic\nceleriac\ncelerity\ncelery\ncelesta\nCeleste\nceleste\ncelestial\ncelestiality\ncelestialize\ncelestially\ncelestialness\ncelestina\nCelestine\ncelestine\nCelestinian\ncelestite\ncelestitude\nCelia\nceliac\nceliadelphus\nceliagra\ncelialgia\ncelibacy\ncelibatarian\ncelibate\ncelibatic\ncelibatist\ncelibatory\ncelidographer\ncelidography\nceliectasia\nceliectomy\nceliemia\nceliitis\nceliocele\nceliocentesis\nceliocolpotomy\nceliocyesis\nceliodynia\ncelioelytrotomy\ncelioenterotomy\nceliogastrotomy\nceliohysterotomy\nceliolymph\nceliomyalgia\nceliomyodynia\nceliomyomectomy\nceliomyomotomy\nceliomyositis\ncelioncus\ncelioparacentesis\nceliopyosis\nceliorrhaphy\nceliorrhea\nceliosalpingectomy\nceliosalpingotomy\ncelioschisis\ncelioscope\ncelioscopy\nceliotomy\ncelite\ncell\ncella\ncellae\ncellar\ncellarage\ncellarer\ncellaress\ncellaret\ncellaring\ncellarless\ncellarman\ncellarous\ncellarway\ncellarwoman\ncellated\ncelled\nCellepora\ncellepore\nCellfalcicula\ncelliferous\ncelliform\ncellifugal\ncellipetal\ncellist\nCellite\ncello\ncellobiose\ncelloid\ncelloidin\ncelloist\ncellophane\ncellose\nCellucotton\ncellular\ncellularity\ncellularly\ncellulase\ncellulate\ncellulated\ncellulation\ncellule\ncellulicidal\ncelluliferous\ncellulifugal\ncellulifugally\ncellulin\ncellulipetal\ncellulipetally\ncellulitis\ncellulocutaneous\ncellulofibrous\nCelluloid\ncelluloid\ncelluloided\nCellulomonadeae\nCellulomonas\ncellulose\ncellulosic\ncellulosity\ncellulotoxic\ncellulous\nCellvibrio\nCelosia\nCelotex\ncelotomy\nCelsia\ncelsian\nCelsius\nCelt\ncelt\nCeltdom\nCeltiberi\nCeltiberian\nCeltic\nCeltically\nCelticism\nCelticist\nCelticize\nCeltidaceae\nceltiform\nCeltillyrians\nCeltis\nCeltish\nCeltism\nCeltist\nceltium\nCeltization\nCeltologist\nCeltologue\nCeltomaniac\nCeltophil\nCeltophobe\nCeltophobia\nceltuce\ncembalist\ncembalo\ncement\ncemental\ncementation\ncementatory\ncementer\ncementification\ncementin\ncementite\ncementitious\ncementless\ncementmaker\ncementmaking\ncementoblast\ncementoma\ncementum\ncemeterial\ncemetery\ncenacle\ncenaculum\ncenanthous\ncenanthy\ncencerro\nCenchrus\ncendre\ncenobian\ncenobite\ncenobitic\ncenobitical\ncenobitically\ncenobitism\ncenobium\ncenoby\ncenogenesis\ncenogenetic\ncenogenetically\ncenogonous\nCenomanian\ncenosite\ncenosity\ncenospecies\ncenospecific\ncenospecifically\ncenotaph\ncenotaphic\ncenotaphy\nCenozoic\ncenozoology\ncense\ncenser\ncenserless\ncensive\ncensor\ncensorable\ncensorate\ncensorial\ncensorious\ncensoriously\ncensoriousness\ncensorship\ncensual\ncensurability\ncensurable\ncensurableness\ncensurably\ncensure\ncensureless\ncensurer\ncensureship\ncensus\ncent\ncentage\ncental\ncentare\ncentaur\ncentaurdom\nCentaurea\ncentauress\ncentauri\ncentaurial\ncentaurian\ncentauric\nCentaurid\nCentauridium\nCentaurium\ncentauromachia\ncentauromachy\nCentaurus\ncentaurus\ncentaury\ncentavo\ncentena\ncentenar\ncentenarian\ncentenarianism\ncentenary\ncentenier\ncentenionalis\ncentennial\ncentennially\ncenter\ncenterable\ncenterboard\ncentered\ncenterer\ncentering\ncenterless\ncentermost\ncenterpiece\ncentervelic\ncenterward\ncenterwise\ncentesimal\ncentesimally\ncentesimate\ncentesimation\ncentesimi\ncentesimo\ncentesis\nCentetes\ncentetid\nCentetidae\ncentgener\ncentiar\ncentiare\ncentibar\ncentifolious\ncentigrade\ncentigram\ncentile\ncentiliter\ncentillion\ncentillionth\nCentiloquy\ncentime\ncentimeter\ncentimo\ncentimolar\ncentinormal\ncentipedal\ncentipede\ncentiplume\ncentipoise\ncentistere\ncentistoke\ncentner\ncento\ncentonical\ncentonism\ncentrad\ncentral\ncentrale\nCentrales\ncentralism\ncentralist\ncentralistic\ncentrality\ncentralization\ncentralize\ncentralizer\ncentrally\ncentralness\ncentranth\nCentranthus\ncentrarchid\nCentrarchidae\ncentrarchoid\nCentraxonia\ncentraxonial\nCentrechinoida\ncentric\nCentricae\ncentrical\ncentricality\ncentrically\ncentricalness\ncentricipital\ncentriciput\ncentricity\ncentriffed\ncentrifugal\ncentrifugalization\ncentrifugalize\ncentrifugaller\ncentrifugally\ncentrifugate\ncentrifugation\ncentrifuge\ncentrifugence\ncentriole\ncentripetal\ncentripetalism\ncentripetally\ncentripetence\ncentripetency\ncentriscid\nCentriscidae\ncentrisciform\ncentriscoid\nCentriscus\ncentrist\ncentroacinar\ncentrobaric\ncentrobarical\ncentroclinal\ncentrode\ncentrodesmose\ncentrodesmus\ncentrodorsal\ncentrodorsally\ncentroid\ncentroidal\ncentrolecithal\nCentrolepidaceae\ncentrolepidaceous\ncentrolinead\ncentrolineal\ncentromere\ncentronucleus\ncentroplasm\nCentropomidae\nCentropomus\nCentrosema\ncentrosome\ncentrosomic\nCentrosoyus\nCentrospermae\ncentrosphere\ncentrosymmetric\ncentrosymmetry\nCentrotus\ncentrum\ncentry\ncentum\ncentumvir\ncentumviral\ncentumvirate\nCentunculus\ncentuple\ncentuplicate\ncentuplication\ncentuply\ncenturia\ncenturial\ncenturiate\ncenturiation\ncenturiator\ncenturied\ncenturion\ncentury\nceorl\nceorlish\ncep\ncepa\ncepaceous\ncepe\ncephaeline\nCephaelis\nCephalacanthidae\nCephalacanthus\ncephalad\ncephalagra\ncephalalgia\ncephalalgic\ncephalalgy\ncephalanthium\ncephalanthous\nCephalanthus\nCephalaspis\nCephalata\ncephalate\ncephaldemae\ncephalemia\ncephaletron\nCephaleuros\ncephalhematoma\ncephalhydrocele\ncephalic\ncephalin\nCephalina\ncephaline\ncephalism\ncephalitis\ncephalization\ncephaloauricular\nCephalobranchiata\ncephalobranchiate\ncephalocathartic\ncephalocaudal\ncephalocele\ncephalocentesis\ncephalocercal\nCephalocereus\ncephalochord\nCephalochorda\ncephalochordal\nCephalochordata\ncephalochordate\ncephaloclasia\ncephaloclast\ncephalocone\ncephaloconic\ncephalocyst\ncephalodiscid\nCephalodiscida\nCephalodiscus\ncephalodymia\ncephalodymus\ncephalodynia\ncephalofacial\ncephalogenesis\ncephalogram\ncephalograph\ncephalohumeral\ncephalohumeralis\ncephaloid\ncephalology\ncephalomancy\ncephalomant\ncephalomelus\ncephalomenia\ncephalomeningitis\ncephalomere\ncephalometer\ncephalometric\ncephalometry\ncephalomotor\ncephalomyitis\ncephalon\ncephalonasal\ncephalopagus\ncephalopathy\ncephalopharyngeal\ncephalophine\ncephalophorous\nCephalophus\ncephalophyma\ncephaloplegia\ncephaloplegic\ncephalopod\nCephalopoda\ncephalopodan\ncephalopodic\ncephalopodous\nCephalopterus\ncephalorachidian\ncephalorhachidian\ncephalosome\ncephalospinal\nCephalosporium\ncephalostyle\nCephalotaceae\ncephalotaceous\nCephalotaxus\ncephalotheca\ncephalothecal\ncephalothoracic\ncephalothoracopagus\ncephalothorax\ncephalotome\ncephalotomy\ncephalotractor\ncephalotribe\ncephalotripsy\ncephalotrocha\nCephalotus\ncephalous\nCephas\nCepheid\ncephid\nCephidae\nCephus\nCepolidae\nceps\nceptor\ncequi\nceraceous\ncerago\nceral\nceramal\ncerambycid\nCerambycidae\nCeramiaceae\nceramiaceous\nceramic\nceramicite\nceramics\nceramidium\nceramist\nCeramium\nceramographic\nceramography\ncerargyrite\nceras\ncerasein\ncerasin\ncerastes\nCerastium\nCerasus\ncerata\ncerate\nceratectomy\ncerated\nceratiasis\nceratiid\nCeratiidae\nceratioid\nceration\nceratite\nCeratites\nceratitic\nCeratitidae\nCeratitis\nceratitoid\nCeratitoidea\nCeratium\nCeratobatrachinae\nceratoblast\nceratobranchial\nceratocricoid\nCeratodidae\nCeratodontidae\nCeratodus\nceratofibrous\nceratoglossal\nceratoglossus\nceratohyal\nceratohyoid\nceratoid\nceratomandibular\nceratomania\nCeratonia\nCeratophrys\nCeratophyllaceae\nceratophyllaceous\nCeratophyllum\nCeratophyta\nceratophyte\nCeratops\nCeratopsia\nceratopsian\nceratopsid\nCeratopsidae\nCeratopteridaceae\nceratopteridaceous\nCeratopteris\nceratorhine\nCeratosa\nCeratosaurus\nCeratospongiae\nceratospongian\nCeratostomataceae\nCeratostomella\nceratotheca\nceratothecal\nCeratozamia\nceraunia\nceraunics\nceraunogram\nceraunograph\nceraunomancy\nceraunophone\nceraunoscope\nceraunoscopy\nCerberean\nCerberic\nCerberus\ncercal\ncercaria\ncercarial\ncercarian\ncercariform\ncercelee\ncerci\nCercidiphyllaceae\nCercis\nCercocebus\nCercolabes\nCercolabidae\ncercomonad\nCercomonadidae\nCercomonas\ncercopid\nCercopidae\ncercopithecid\nCercopithecidae\ncercopithecoid\nCercopithecus\ncercopod\nCercospora\nCercosporella\ncercus\nCerdonian\ncere\ncereal\ncerealian\ncerealin\ncerealism\ncerealist\ncerealose\ncerebella\ncerebellar\ncerebellifugal\ncerebellipetal\ncerebellocortex\ncerebellopontile\ncerebellopontine\ncerebellorubral\ncerebellospinal\ncerebellum\ncerebra\ncerebral\ncerebralgia\ncerebralism\ncerebralist\ncerebralization\ncerebralize\ncerebrally\ncerebrasthenia\ncerebrasthenic\ncerebrate\ncerebration\ncerebrational\nCerebratulus\ncerebric\ncerebricity\ncerebriform\ncerebriformly\ncerebrifugal\ncerebrin\ncerebripetal\ncerebritis\ncerebrize\ncerebrocardiac\ncerebrogalactose\ncerebroganglion\ncerebroganglionic\ncerebroid\ncerebrology\ncerebroma\ncerebromalacia\ncerebromedullary\ncerebromeningeal\ncerebromeningitis\ncerebrometer\ncerebron\ncerebronic\ncerebroparietal\ncerebropathy\ncerebropedal\ncerebrophysiology\ncerebropontile\ncerebropsychosis\ncerebrorachidian\ncerebrosclerosis\ncerebroscope\ncerebroscopy\ncerebrose\ncerebrosensorial\ncerebroside\ncerebrosis\ncerebrospinal\ncerebrospinant\ncerebrosuria\ncerebrotomy\ncerebrotonia\ncerebrotonic\ncerebrovisceral\ncerebrum\ncerecloth\ncered\ncereless\ncerement\nceremonial\nceremonialism\nceremonialist\nceremonialize\nceremonially\nceremonious\nceremoniously\nceremoniousness\nceremony\ncereous\ncerer\nceresin\nCereus\ncerevis\nceria\nCerialia\ncerianthid\nCerianthidae\ncerianthoid\nCerianthus\nceric\nceride\nceriferous\ncerigerous\ncerillo\nceriman\ncerin\ncerine\nCerinthe\nCerinthian\nCeriomyces\nCerion\nCerionidae\nceriops\nCeriornis\ncerise\ncerite\nCerithiidae\ncerithioid\nCerithium\ncerium\ncermet\ncern\ncerniture\ncernuous\ncero\ncerograph\ncerographic\ncerographist\ncerography\nceroline\ncerolite\nceroma\nceromancy\ncerophilous\nceroplast\nceroplastic\nceroplastics\nceroplasty\ncerotate\ncerote\ncerotene\ncerotic\ncerotin\ncerotype\ncerous\nceroxyle\nCeroxylon\ncerrero\ncerrial\ncerris\ncertain\ncertainly\ncertainty\nCerthia\nCerthiidae\ncertie\ncertifiable\ncertifiableness\ncertifiably\ncertificate\ncertification\ncertificative\ncertificator\ncertificatory\ncertified\ncertifier\ncertify\ncertiorari\ncertiorate\ncertioration\ncertis\ncertitude\ncertosina\ncertosino\ncerty\ncerule\ncerulean\ncerulein\nceruleite\nceruleolactite\nceruleous\ncerulescent\nceruleum\ncerulignol\ncerulignone\ncerumen\nceruminal\nceruminiferous\nceruminous\ncerumniparous\nceruse\ncerussite\nCervantist\ncervantite\ncervical\nCervicapra\ncervicaprine\ncervicectomy\ncervicicardiac\ncervicide\ncerviciplex\ncervicispinal\ncervicitis\ncervicoauricular\ncervicoaxillary\ncervicobasilar\ncervicobrachial\ncervicobregmatic\ncervicobuccal\ncervicodorsal\ncervicodynia\ncervicofacial\ncervicohumeral\ncervicolabial\ncervicolingual\ncervicolumbar\ncervicomuscular\ncerviconasal\ncervicorn\ncervicoscapular\ncervicothoracic\ncervicovaginal\ncervicovesical\ncervid\nCervidae\nCervinae\ncervine\ncervisia\ncervisial\ncervix\ncervoid\ncervuline\nCervulus\nCervus\nceryl\nCerynean\nCesare\ncesarevitch\ncesarolite\ncesious\ncesium\ncespititous\ncespitose\ncespitosely\ncespitulose\ncess\ncessantly\ncessation\ncessative\ncessavit\ncesser\ncession\ncessionaire\ncessionary\ncessor\ncesspipe\ncesspit\ncesspool\ncest\nCestida\nCestidae\nCestoda\nCestodaria\ncestode\ncestoid\nCestoidea\ncestoidean\nCestracion\ncestraciont\nCestraciontes\nCestraciontidae\nCestrian\nCestrum\ncestrum\ncestus\nCetacea\ncetacean\ncetaceous\ncetaceum\ncetane\nCete\ncetene\nceterach\nceti\ncetic\nceticide\nCetid\ncetin\nCetiosauria\ncetiosaurian\nCetiosaurus\ncetological\ncetologist\ncetology\nCetomorpha\ncetomorphic\nCetonia\ncetonian\nCetoniides\nCetoniinae\ncetorhinid\nCetorhinidae\ncetorhinoid\nCetorhinus\ncetotolite\nCetraria\ncetraric\ncetrarin\nCetus\ncetyl\ncetylene\ncetylic\ncevadilla\ncevadilline\ncevadine\nCevennian\nCevenol\nCevenole\ncevine\ncevitamic\nceylanite\nCeylon\nCeylonese\nceylonite\nceyssatite\nCeyx\nCezannesque\ncha\nchaa\nchab\nchabasie\nchabazite\nChablis\nchabot\nchabouk\nchabuk\nchabutra\nChac\nchacate\nchachalaca\nChachapuya\nchack\nChackchiuma\nchacker\nchackle\nchackler\nchacma\nChaco\nchacona\nchacte\nchad\nchadacryst\nChaenactis\nChaenolobus\nChaenomeles\nchaeta\nChaetangiaceae\nChaetangium\nChaetetes\nChaetetidae\nChaetifera\nchaetiferous\nChaetites\nChaetitidae\nChaetochloa\nChaetodon\nchaetodont\nchaetodontid\nChaetodontidae\nchaetognath\nChaetognatha\nchaetognathan\nchaetognathous\nChaetophora\nChaetophoraceae\nchaetophoraceous\nChaetophorales\nchaetophorous\nchaetopod\nChaetopoda\nchaetopodan\nchaetopodous\nchaetopterin\nChaetopterus\nchaetosema\nChaetosoma\nChaetosomatidae\nChaetosomidae\nchaetotactic\nchaetotaxy\nChaetura\nchafe\nchafer\nchafery\nchafewax\nchafeweed\nchaff\nchaffcutter\nchaffer\nchafferer\nchaffinch\nchaffiness\nchaffing\nchaffingly\nchaffless\nchafflike\nchaffman\nchaffseed\nchaffwax\nchaffweed\nchaffy\nchaft\nchafted\nChaga\nchagan\nChagga\nchagrin\nchaguar\nchagul\nchahar\nchai\nChailletiaceae\nchain\nchainage\nchained\nchainer\nchainette\nchainless\nchainlet\nchainmaker\nchainmaking\nchainman\nchainon\nchainsmith\nchainwale\nchainwork\nchair\nchairer\nchairless\nchairmaker\nchairmaking\nchairman\nchairmanship\nchairmender\nchairmending\nchairwarmer\nchairwoman\nchais\nchaise\nchaiseless\nChait\nchaitya\nchaja\nchaka\nchakar\nchakari\nChakavski\nchakazi\nchakdar\nchakobu\nchakra\nchakram\nchakravartin\nchaksi\nchal\nchalaco\nchalana\nchalastic\nChalastogastra\nchalaza\nchalazal\nchalaze\nchalazian\nchalaziferous\nchalazion\nchalazogam\nchalazogamic\nchalazogamy\nchalazoidite\nchalcanthite\nChalcedonian\nchalcedonic\nchalcedonous\nchalcedony\nchalcedonyx\nchalchuite\nchalcid\nChalcidian\nChalcidic\nchalcidicum\nchalcidid\nChalcididae\nchalcidiform\nchalcidoid\nChalcidoidea\nChalcioecus\nChalcis\nchalcites\nchalcocite\nchalcograph\nchalcographer\nchalcographic\nchalcographical\nchalcographist\nchalcography\nchalcolite\nchalcolithic\nchalcomancy\nchalcomenite\nchalcon\nchalcone\nchalcophanite\nchalcophyllite\nchalcopyrite\nchalcosiderite\nchalcosine\nchalcostibite\nchalcotrichite\nchalcotript\nchalcus\nChaldaei\nChaldaic\nChaldaical\nChaldaism\nChaldean\nChaldee\nchalder\nchaldron\nchalet\nchalice\nchaliced\nchalicosis\nchalicothere\nchalicotheriid\nChalicotheriidae\nchalicotherioid\nChalicotherium\nChalina\nChalinidae\nchalinine\nChalinitis\nchalk\nchalkcutter\nchalker\nchalkiness\nchalklike\nchalkography\nchalkosideric\nchalkstone\nchalkstony\nchalkworker\nchalky\nchallah\nchallenge\nchallengeable\nchallengee\nchallengeful\nchallenger\nchallengingly\nchallie\nchallis\nchallote\nchalmer\nchalon\nchalone\nChalons\nchalque\nchalta\nChalukya\nChalukyan\nchalumeau\nchalutz\nchalutzim\nChalybean\nchalybeate\nchalybeous\nChalybes\nchalybite\nCham\ncham\nChama\nChamacea\nChamacoco\nChamaebatia\nChamaecistus\nchamaecranial\nChamaecrista\nChamaecyparis\nChamaedaphne\nChamaeleo\nChamaeleon\nChamaeleontidae\nChamaelirium\nChamaenerion\nChamaepericlymenum\nchamaeprosopic\nChamaerops\nchamaerrhine\nChamaesaura\nChamaesiphon\nChamaesiphonaceae\nChamaesiphonaceous\nChamaesiphonales\nChamaesyce\nchamal\nChamar\nchamar\nchamber\nchamberdeacon\nchambered\nchamberer\nchambering\nchamberlain\nchamberlainry\nchamberlainship\nchamberlet\nchamberleted\nchamberletted\nchambermaid\nChambertin\nchamberwoman\nChambioa\nchambray\nchambrel\nchambul\nchamecephalic\nchamecephalous\nchamecephalus\nchamecephaly\nchameleon\nchameleonic\nchameleonize\nchameleonlike\nchamfer\nchamferer\nchamfron\nChamian\nChamicuro\nChamidae\nchamisal\nchamiso\nChamite\nchamite\nChamkanni\nchamma\nchamois\nChamoisette\nchamoisite\nchamoline\nChamomilla\nChamorro\nChamos\nchamp\nChampa\nchampac\nchampaca\nchampacol\nchampagne\nchampagneless\nchampagnize\nchampaign\nchampain\nchampaka\nchamper\nchampertor\nchampertous\nchamperty\nchampignon\nchampion\nchampioness\nchampionize\nchampionless\nchampionlike\nchampionship\nChamplain\nChamplainic\nchampleve\nchampy\nChanabal\nChanca\nchance\nchanceful\nchancefully\nchancefulness\nchancel\nchanceled\nchanceless\nchancellery\nchancellor\nchancellorate\nchancelloress\nchancellorism\nchancellorship\nchancer\nchancery\nchancewise\nchanche\nchanchito\nchanco\nchancre\nchancriform\nchancroid\nchancroidal\nchancrous\nchancy\nchandala\nchandam\nchandelier\nChandi\nchandi\nchandler\nchandleress\nchandlering\nchandlery\nchandoo\nchandu\nchandul\nChane\nchanfrin\nChang\nchang\nchanga\nchangar\nchange\nchangeability\nchangeable\nchangeableness\nchangeably\nchangedale\nchangedness\nchangeful\nchangefully\nchangefulness\nchangeless\nchangelessly\nchangelessness\nchangeling\nchangement\nchanger\nChangoan\nChangos\nChanguina\nChanguinan\nChanidae\nchank\nchankings\nchannel\nchannelbill\nchanneled\nchanneler\nchanneling\nchannelization\nchannelize\nchannelled\nchanneller\nchannelling\nchannelwards\nchanner\nchanson\nchansonnette\nchanst\nchant\nchantable\nchanter\nchanterelle\nchantership\nchantey\nchanteyman\nchanticleer\nchanting\nchantingly\nchantlate\nchantress\nchantry\nchao\nchaogenous\nchaology\nchaos\nchaotic\nchaotical\nchaotically\nchaoticness\nChaouia\nchap\nChapacura\nChapacuran\nchapah\nChapanec\nchaparral\nchaparro\nchapatty\nchapbook\nchape\nchapeau\nchapeaux\nchaped\nchapel\nchapeless\nchapelet\nchapelgoer\nchapelgoing\nchapellage\nchapellany\nchapelman\nchapelmaster\nchapelry\nchapelward\nchaperno\nchaperon\nchaperonage\nchaperone\nchaperonless\nchapfallen\nchapin\nchapiter\nchapitral\nchaplain\nchaplaincy\nchaplainry\nchaplainship\nchapless\nchaplet\nchapleted\nchapman\nchapmanship\nchapournet\nchapournetted\nchappaul\nchapped\nchapper\nchappie\nchappin\nchapping\nchappow\nchappy\nchaps\nchapt\nchaptalization\nchaptalize\nchapter\nchapteral\nchapterful\nchapwoman\nchar\nChara\ncharabanc\ncharabancer\ncharac\nCharaceae\ncharaceous\ncharacetum\ncharacin\ncharacine\ncharacinid\nCharacinidae\ncharacinoid\ncharacter\ncharacterful\ncharacterial\ncharacterical\ncharacterism\ncharacterist\ncharacteristic\ncharacteristical\ncharacteristically\ncharacteristicalness\ncharacteristicness\ncharacterizable\ncharacterization\ncharacterize\ncharacterizer\ncharacterless\ncharacterlessness\ncharacterological\ncharacterologist\ncharacterology\ncharactery\ncharade\nCharadrii\nCharadriidae\ncharadriiform\nCharadriiformes\ncharadrine\ncharadrioid\nCharadriomorphae\nCharadrius\nCharales\ncharas\ncharbon\nCharca\ncharcoal\ncharcoaly\ncharcutier\nchard\nchardock\nchare\ncharer\ncharet\ncharette\ncharge\nchargeability\nchargeable\nchargeableness\nchargeably\nchargee\nchargeless\nchargeling\nchargeman\ncharger\nchargeship\ncharging\nCharicleia\ncharier\ncharily\nchariness\nchariot\ncharioted\nchariotee\ncharioteer\ncharioteership\nchariotlike\nchariotman\nchariotry\nchariotway\ncharism\ncharisma\ncharismatic\nCharissa\ncharisticary\ncharitable\ncharitableness\ncharitably\nCharites\ncharity\ncharityless\ncharivari\nchark\ncharka\ncharkha\ncharkhana\ncharlady\ncharlatan\ncharlatanic\ncharlatanical\ncharlatanically\ncharlatanish\ncharlatanism\ncharlatanistic\ncharlatanry\ncharlatanship\nCharleen\nCharlene\nCharles\nCharleston\nCharley\nCharlie\ncharlock\nCharlotte\ncharm\ncharmedly\ncharmel\ncharmer\ncharmful\ncharmfully\ncharmfulness\ncharming\ncharmingly\ncharmingness\ncharmless\ncharmlessly\ncharmwise\ncharnel\ncharnockite\nCharon\nCharonian\nCharonic\nCharontas\nCharophyta\ncharpit\ncharpoy\ncharqued\ncharqui\ncharr\nCharruan\nCharruas\ncharry\ncharshaf\ncharsingha\nchart\nchartaceous\ncharter\ncharterable\ncharterage\nchartered\ncharterer\ncharterhouse\nCharterist\ncharterless\nchartermaster\ncharthouse\ncharting\nChartism\nChartist\nchartist\nchartless\nchartographist\nchartology\nchartometer\nchartophylax\nchartreuse\nChartreux\nchartroom\nchartula\nchartulary\ncharuk\ncharwoman\nchary\nCharybdian\nCharybdis\nchasable\nchase\nchaseable\nchaser\nChasidim\nchasing\nchasm\nchasma\nchasmal\nchasmed\nchasmic\nchasmogamic\nchasmogamous\nchasmogamy\nchasmophyte\nchasmy\nchasse\nChasselas\nchassepot\nchasseur\nchassignite\nchassis\nChastacosta\nchaste\nchastely\nchasten\nchastener\nchasteness\nchasteningly\nchastenment\nchasteweed\nchastisable\nchastise\nchastisement\nchastiser\nchastity\nchasuble\nchasubled\nchat\nchataka\nChateau\nchateau\nchateaux\nchatelain\nchatelaine\nchatelainry\nchatellany\nchathamite\nchati\nChatillon\nChatino\nChatot\nchatoyance\nchatoyancy\nchatoyant\nchatsome\nchatta\nchattable\nChattanooga\nChattanoogan\nchattation\nchattel\nchattelhood\nchattelism\nchattelization\nchattelize\nchattelship\nchatter\nchatteration\nchatterbag\nchatterbox\nchatterer\nchattering\nchatteringly\nchattermag\nchattermagging\nChattertonian\nchattery\nChatti\nchattily\nchattiness\nchatting\nchattingly\nchatty\nchatwood\nChaucerian\nChauceriana\nChaucerianism\nChaucerism\nChauchat\nchaudron\nchauffer\nchauffeur\nchauffeurship\nChaui\nchauk\nchaukidari\nChauliodes\nchaulmoogra\nchaulmoograte\nchaulmoogric\nChauna\nchaus\nchausseemeile\nChautauqua\nChautauquan\nchaute\nchauth\nchauvinism\nchauvinist\nchauvinistic\nchauvinistically\nChavante\nChavantean\nchavender\nchavibetol\nchavicin\nchavicine\nchavicol\nchavish\nchaw\nchawan\nchawbacon\nchawer\nChawia\nchawk\nchawl\nchawstick\nchay\nchaya\nchayaroot\nChayma\nChayota\nchayote\nchayroot\nchazan\nChazy\nche\ncheap\ncheapen\ncheapener\ncheapery\ncheaping\ncheapish\ncheaply\ncheapness\nCheapside\ncheat\ncheatable\ncheatableness\ncheatee\ncheater\ncheatery\ncheating\ncheatingly\ncheatrie\nChebacco\nchebec\nchebel\nchebog\nchebule\nchebulinic\nChechehet\nChechen\ncheck\ncheckable\ncheckage\ncheckbird\ncheckbite\ncheckbook\nchecked\nchecker\ncheckerbelly\ncheckerberry\ncheckerbloom\ncheckerboard\ncheckerbreast\ncheckered\ncheckerist\ncheckers\ncheckerwise\ncheckerwork\ncheckhook\ncheckless\ncheckman\ncheckmate\ncheckoff\ncheckrack\ncheckrein\ncheckroll\ncheckroom\ncheckrope\ncheckrow\ncheckrowed\ncheckrower\ncheckstone\ncheckstrap\ncheckstring\ncheckup\ncheckweigher\ncheckwork\nchecky\ncheddaring\ncheddite\ncheder\nchedlock\nchee\ncheecha\ncheechako\ncheek\ncheekbone\ncheeker\ncheekily\ncheekiness\ncheekish\ncheekless\ncheekpiece\ncheeky\ncheep\ncheeper\ncheepily\ncheepiness\ncheepy\ncheer\ncheered\ncheerer\ncheerful\ncheerfulize\ncheerfully\ncheerfulness\ncheerfulsome\ncheerily\ncheeriness\ncheering\ncheeringly\ncheerio\ncheerleader\ncheerless\ncheerlessly\ncheerlessness\ncheerly\ncheery\ncheese\ncheeseboard\ncheesebox\ncheeseburger\ncheesecake\ncheesecloth\ncheesecurd\ncheesecutter\ncheeseflower\ncheeselip\ncheesemonger\ncheesemongering\ncheesemongerly\ncheesemongery\ncheeseparer\ncheeseparing\ncheeser\ncheesery\ncheesewood\ncheesiness\ncheesy\ncheet\ncheetah\ncheeter\ncheetie\nchef\nChefrinia\nchegoe\nchegre\nChehalis\nCheilanthes\ncheilitis\nCheilodipteridae\nCheilodipterus\nCheilostomata\ncheilostomatous\ncheir\ncheiragra\nCheiranthus\nCheirogaleus\nCheiroglossa\ncheirognomy\ncheirography\ncheirolin\ncheirology\ncheiromancy\ncheiromegaly\ncheiropatagium\ncheiropodist\ncheiropody\ncheiropompholyx\nCheiroptera\ncheiropterygium\ncheirosophy\ncheirospasm\nCheirotherium\nCheka\nchekan\ncheke\ncheki\nChekist\nchekmak\nchela\nchelaship\nchelate\nchelation\nchelem\nchelerythrine\nchelicer\nchelicera\ncheliceral\nchelicerate\nchelicere\nchelide\nchelidon\nchelidonate\nchelidonian\nchelidonic\nchelidonine\nChelidonium\nChelidosaurus\nCheliferidea\ncheliferous\ncheliform\nchelingo\ncheliped\nChellean\nchello\nChelodina\nchelodine\nchelone\nChelonia\nchelonian\nchelonid\nChelonidae\ncheloniid\nCheloniidae\nchelonin\nchelophore\nchelp\nCheltenham\nChelura\nChelydidae\nChelydra\nChelydridae\nchelydroid\nchelys\nChemakuan\nchemasthenia\nchemawinite\nChemehuevi\nchemesthesis\nchemiatric\nchemiatrist\nchemiatry\nchemic\nchemical\nchemicalization\nchemicalize\nchemically\nchemicker\nchemicoastrological\nchemicobiologic\nchemicobiology\nchemicocautery\nchemicodynamic\nchemicoengineering\nchemicoluminescence\nchemicomechanical\nchemicomineralogical\nchemicopharmaceutical\nchemicophysical\nchemicophysics\nchemicophysiological\nchemicovital\nchemigraph\nchemigraphic\nchemigraphy\nchemiloon\nchemiluminescence\nchemiotactic\nchemiotaxic\nchemiotaxis\nchemiotropic\nchemiotropism\nchemiphotic\nchemis\nchemise\nchemisette\nchemism\nchemisorb\nchemisorption\nchemist\nchemistry\nchemitype\nchemitypy\nchemoceptor\nchemokinesis\nchemokinetic\nchemolysis\nchemolytic\nchemolyze\nchemoreception\nchemoreceptor\nchemoreflex\nchemoresistance\nchemoserotherapy\nchemosis\nchemosmosis\nchemosmotic\nchemosynthesis\nchemosynthetic\nchemotactic\nchemotactically\nchemotaxis\nchemotaxy\nchemotherapeutic\nchemotherapeutics\nchemotherapist\nchemotherapy\nchemotic\nchemotropic\nchemotropically\nchemotropism\nChemung\nchemurgic\nchemurgical\nchemurgy\nChen\nchena\nchende\nchenevixite\nCheney\ncheng\nchenica\nchenille\ncheniller\nchenopod\nChenopodiaceae\nchenopodiaceous\nChenopodiales\nChenopodium\ncheoplastic\nchepster\ncheque\nChequers\nChera\nchercock\ncherem\nCheremiss\nCheremissian\ncherimoya\ncherish\ncherishable\ncherisher\ncherishing\ncherishingly\ncherishment\nCherkess\nCherkesser\nChermes\nChermidae\nChermish\nChernomorish\nchernozem\nCherokee\ncheroot\ncherried\ncherry\ncherryblossom\ncherrylike\nchersonese\nChersydridae\nchert\ncherte\ncherty\ncherub\ncherubic\ncherubical\ncherubically\ncherubim\ncherubimic\ncherubimical\ncherubin\nCherusci\nChervante\nchervil\nchervonets\nChesapeake\nCheshire\ncheson\nchess\nchessboard\nchessdom\nchessel\nchesser\nchessist\nchessman\nchessmen\nchesstree\nchessylite\nchest\nChester\nchester\nchesterfield\nChesterfieldian\nchesterlite\nchestful\nchestily\nchestiness\nchestnut\nchestnutty\nchesty\nChet\ncheth\nchettik\nchetty\nchetverik\nchetvert\nchevage\ncheval\nchevalier\nchevaline\nchevance\ncheve\ncheven\nchevener\nchevesaile\nchevin\nCheviot\nchevisance\nchevise\nchevon\nchevrette\nchevron\nchevrone\nchevronel\nchevronelly\nchevronwise\nchevrony\nchevrotain\nchevy\nchew\nchewbark\nchewer\nchewink\nchewstick\nchewy\nCheyenne\ncheyney\nchhatri\nchi\nchia\nChiam\nChian\nChianti\nChiapanec\nChiapanecan\nchiaroscurist\nchiaroscuro\nchiasm\nchiasma\nchiasmal\nchiasmatype\nchiasmatypy\nchiasmic\nChiasmodon\nchiasmodontid\nChiasmodontidae\nchiasmus\nchiastic\nchiastolite\nchiastoneural\nchiastoneurous\nchiastoneury\nchiaus\nChibcha\nChibchan\nchibinite\nchibouk\nchibrit\nchic\nchicane\nchicaner\nchicanery\nchicaric\nchicayote\nChicha\nchichi\nchichicaste\nChichimec\nchichimecan\nchichipate\nchichipe\nchichituna\nchick\nchickabiddy\nchickadee\nChickahominy\nChickamauga\nchickaree\nChickasaw\nchickasaw\nchickell\nchicken\nchickenberry\nchickenbill\nchickenbreasted\nchickenhearted\nchickenheartedly\nchickenheartedness\nchickenhood\nchickenweed\nchickenwort\nchicker\nchickhood\nchickling\nchickstone\nchickweed\nchickwit\nchicky\nchicle\nchicness\nChico\nchico\nChicomecoatl\nchicory\nchicot\nchicote\nchicqued\nchicquer\nchicquest\nchicquing\nchid\nchidden\nchide\nchider\nchiding\nchidingly\nchidingness\nchidra\nchief\nchiefdom\nchiefery\nchiefess\nchiefest\nchiefish\nchiefless\nchiefling\nchiefly\nchiefship\nchieftain\nchieftaincy\nchieftainess\nchieftainry\nchieftainship\nchieftess\nchield\nChien\nchien\nchiffer\nchiffon\nchiffonade\nchiffonier\nchiffony\nchifforobe\nchigetai\nchiggak\nchigger\nchiggerweed\nchignon\nchignoned\nchigoe\nchih\nchihfu\nChihuahua\nchikara\nchil\nchilacavote\nchilalgia\nchilarium\nchilblain\nChilcat\nchild\nchildbearing\nchildbed\nchildbirth\nchildcrowing\nchilde\nchilded\nChildermas\nchildhood\nchilding\nchildish\nchildishly\nchildishness\nchildkind\nchildless\nchildlessness\nchildlike\nchildlikeness\nchildly\nchildness\nchildrenite\nchildridden\nchildship\nchildward\nchile\nChilean\nChileanization\nChileanize\nchilectropion\nchilenite\nchili\nchiliad\nchiliadal\nchiliadic\nchiliagon\nchiliahedron\nchiliarch\nchiliarchia\nchiliarchy\nchiliasm\nchiliast\nchiliastic\nchilicote\nchilicothe\nchilidium\nChilina\nChilinidae\nchiliomb\nChilion\nchilitis\nChilkat\nchill\nchilla\nchillagite\nchilled\nchiller\nchillily\nchilliness\nchilling\nchillingly\nchillish\nChilliwack\nchillness\nchillo\nchillroom\nchillsome\nchillum\nchillumchee\nchilly\nchilognath\nChilognatha\nchilognathan\nchilognathous\nchilogrammo\nchiloma\nChilomastix\nchiloncus\nchiloplasty\nchilopod\nChilopoda\nchilopodan\nchilopodous\nChilopsis\nChilostoma\nChilostomata\nchilostomatous\nchilostome\nchilotomy\nChiltern\nchilver\nchimaera\nchimaerid\nChimaeridae\nchimaeroid\nChimaeroidei\nChimakuan\nChimakum\nChimalakwe\nChimalapa\nChimane\nchimango\nChimaphila\nChimarikan\nChimariko\nchimble\nchime\nchimer\nchimera\nchimeric\nchimerical\nchimerically\nchimericalness\nchimesmaster\nchiminage\nChimmesyan\nchimney\nchimneyhead\nchimneyless\nchimneyman\nChimonanthus\nchimopeelagic\nchimpanzee\nChimu\nChin\nchin\nchina\nchinaberry\nchinalike\nChinaman\nchinamania\nchinamaniac\nchinampa\nchinanta\nChinantecan\nChinantecs\nchinaphthol\nchinar\nchinaroot\nChinatown\nchinaware\nchinawoman\nchinband\nchinch\nchincha\nChinchasuyu\nchinchayote\nchinche\nchincherinchee\nchinchilla\nchinching\nchincloth\nchincough\nchine\nchined\nChinee\nChinese\nChinesery\nching\nchingma\nChingpaw\nChinhwan\nchinik\nchinin\nChink\nchink\nchinkara\nchinker\nchinkerinchee\nchinking\nchinkle\nchinks\nchinky\nchinless\nchinnam\nchinned\nchinny\nchino\nchinoa\nchinol\nChinook\nChinookan\nchinotoxine\nchinotti\nchinpiece\nchinquapin\nchinse\nchint\nchintz\nchinwood\nChiococca\nchiococcine\nChiogenes\nchiolite\nchionablepsia\nChionanthus\nChionaspis\nChionididae\nChionis\nChionodoxa\nChiot\nchiotilla\nChip\nchip\nchipchap\nchipchop\nChipewyan\nchiplet\nchipling\nchipmunk\nchippable\nchippage\nchipped\nChippendale\nchipper\nchipping\nchippy\nchips\nchipwood\nChiquitan\nChiquito\nchiragra\nchiral\nchiralgia\nchirality\nchirapsia\nchirarthritis\nchirata\nChiriana\nChiricahua\nChiriguano\nchirimen\nChirino\nchirinola\nchiripa\nchirivita\nchirk\nchirm\nchiro\nchirocosmetics\nchirogale\nchirognomic\nchirognomically\nchirognomist\nchirognomy\nchirognostic\nchirograph\nchirographary\nchirographer\nchirographic\nchirographical\nchirography\nchirogymnast\nchirological\nchirologically\nchirologist\nchirology\nchiromance\nchiromancer\nchiromancist\nchiromancy\nchiromant\nchiromantic\nchiromantical\nChiromantis\nchiromegaly\nchirometer\nChiromyidae\nChiromys\nChiron\nchironomic\nchironomid\nChironomidae\nChironomus\nchironomy\nchironym\nchiropatagium\nchiroplasty\nchiropod\nchiropodial\nchiropodic\nchiropodical\nchiropodist\nchiropodistry\nchiropodous\nchiropody\nchiropompholyx\nchiropractic\nchiropractor\nchiropraxis\nchiropter\nChiroptera\nchiropteran\nchiropterite\nchiropterophilous\nchiropterous\nchiropterygian\nchiropterygious\nchiropterygium\nchirosophist\nchirospasm\nChirotes\nchirotherian\nChirotherium\nchirothesia\nchirotonsor\nchirotonsory\nchirotony\nchirotype\nchirp\nchirper\nchirpily\nchirpiness\nchirping\nchirpingly\nchirpling\nchirpy\nchirr\nchirrup\nchirruper\nchirrupy\nchirurgeon\nchirurgery\nChisedec\nchisel\nchiseled\nchiseler\nchisellike\nchiselly\nchiselmouth\nchit\nChita\nchitak\nchital\nchitchat\nchitchatty\nChitimacha\nChitimachan\nchitin\nchitinization\nchitinized\nchitinocalcareous\nchitinogenous\nchitinoid\nchitinous\nchiton\nchitosamine\nchitosan\nchitose\nchitra\nChitrali\nchittamwood\nchitter\nchitterling\nchitty\nchivalresque\nchivalric\nchivalrous\nchivalrously\nchivalrousness\nchivalry\nchive\nchivey\nchiviatite\nChiwere\nchkalik\nchladnite\nchlamyd\nchlamydate\nchlamydeous\nChlamydobacteriaceae\nchlamydobacteriaceous\nChlamydobacteriales\nChlamydomonadaceae\nChlamydomonadidae\nChlamydomonas\nChlamydosaurus\nChlamydoselachidae\nChlamydoselachus\nchlamydospore\nChlamydozoa\nchlamydozoan\nchlamyphore\nChlamyphorus\nchlamys\nChleuh\nchloanthite\nchloasma\nChloe\nchlor\nchloracetate\nchloragogen\nchloral\nchloralformamide\nchloralide\nchloralism\nchloralization\nchloralize\nchloralose\nchloralum\nchloramide\nchloramine\nchloramphenicol\nchloranemia\nchloranemic\nchloranhydride\nchloranil\nChloranthaceae\nchloranthaceous\nChloranthus\nchloranthy\nchlorapatite\nchlorastrolite\nchlorate\nchlorazide\nchlorcosane\nchlordan\nchlordane\nchlore\nChlorella\nChlorellaceae\nchlorellaceous\nchloremia\nchlorenchyma\nchlorhydrate\nchlorhydric\nchloric\nchloridate\nchloridation\nchloride\nChloridella\nChloridellidae\nchlorider\nchloridize\nchlorimeter\nchlorimetric\nchlorimetry\nchlorinate\nchlorination\nchlorinator\nchlorine\nchlorinize\nchlorinous\nchloriodide\nChlorion\nChlorioninae\nchlorite\nchloritic\nchloritization\nchloritize\nchloritoid\nchlorize\nchlormethane\nchlormethylic\nchloroacetate\nchloroacetic\nchloroacetone\nchloroacetophenone\nchloroamide\nchloroamine\nchloroanaemia\nchloroanemia\nchloroaurate\nchloroauric\nchloroaurite\nchlorobenzene\nchlorobromide\nchlorocalcite\nchlorocarbonate\nchlorochromates\nchlorochromic\nchlorochrous\nChlorococcaceae\nChlorococcales\nChlorococcum\nChlorococcus\nchlorocresol\nchlorocruorin\nchlorodize\nchloroform\nchloroformate\nchloroformic\nchloroformism\nchloroformist\nchloroformization\nchloroformize\nchlorogenic\nchlorogenine\nchlorohydrin\nchlorohydrocarbon\nchloroiodide\nchloroleucite\nchloroma\nchloromelanite\nchlorometer\nchloromethane\nchlorometric\nchlorometry\nChloromycetin\nchloronitrate\nchloropal\nchloropalladates\nchloropalladic\nchlorophane\nchlorophenol\nchlorophoenicite\nChlorophora\nChlorophyceae\nchlorophyceous\nchlorophyl\nchlorophyll\nchlorophyllaceous\nchlorophyllan\nchlorophyllase\nchlorophyllian\nchlorophyllide\nchlorophylliferous\nchlorophylligenous\nchlorophylligerous\nchlorophyllin\nchlorophyllite\nchlorophylloid\nchlorophyllose\nchlorophyllous\nchloropia\nchloropicrin\nchloroplast\nchloroplastic\nchloroplastid\nchloroplatinate\nchloroplatinic\nchloroplatinite\nchloroplatinous\nchloroprene\nchloropsia\nchloroquine\nchlorosilicate\nchlorosis\nchlorospinel\nchlorosulphonic\nchlorotic\nchlorous\nchlorozincate\nchlorsalol\nchloryl\nChnuphis\ncho\nchoachyte\nchoana\nchoanate\nChoanephora\nchoanocytal\nchoanocyte\nChoanoflagellata\nchoanoflagellate\nChoanoflagellida\nChoanoflagellidae\nchoanoid\nchoanophorous\nchoanosomal\nchoanosome\nchoate\nchoaty\nchob\nchoca\nchocard\nChocho\nchocho\nchock\nchockablock\nchocker\nchockler\nchockman\nChoco\nChocoan\nchocolate\nChoctaw\nchoel\nchoenix\nChoeropsis\nChoes\nchoffer\nchoga\nchogak\nchogset\nChoiak\nchoice\nchoiceful\nchoiceless\nchoicelessness\nchoicely\nchoiceness\nchoicy\nchoil\nchoiler\nchoir\nchoirboy\nchoirlike\nchoirman\nchoirmaster\nchoirwise\nChoisya\nchokage\nchoke\nchokeberry\nchokebore\nchokecherry\nchokedamp\nchoker\nchokered\nchokerman\nchokestrap\nchokeweed\nchokidar\nchoking\nchokingly\nchokra\nchoky\nChol\nchol\nChola\nchola\ncholagogic\ncholagogue\ncholalic\ncholane\ncholangioitis\ncholangitis\ncholanic\ncholanthrene\ncholate\nchold\ncholeate\ncholecyanine\ncholecyst\ncholecystalgia\ncholecystectasia\ncholecystectomy\ncholecystenterorrhaphy\ncholecystenterostomy\ncholecystgastrostomy\ncholecystic\ncholecystitis\ncholecystnephrostomy\ncholecystocolostomy\ncholecystocolotomy\ncholecystoduodenostomy\ncholecystogastrostomy\ncholecystogram\ncholecystography\ncholecystoileostomy\ncholecystojejunostomy\ncholecystokinin\ncholecystolithiasis\ncholecystolithotripsy\ncholecystonephrostomy\ncholecystopexy\ncholecystorrhaphy\ncholecystostomy\ncholecystotomy\ncholedoch\ncholedochal\ncholedochectomy\ncholedochitis\ncholedochoduodenostomy\ncholedochoenterostomy\ncholedocholithiasis\ncholedocholithotomy\ncholedocholithotripsy\ncholedochoplasty\ncholedochorrhaphy\ncholedochostomy\ncholedochotomy\ncholehematin\ncholeic\ncholeine\ncholeinic\ncholelith\ncholelithiasis\ncholelithic\ncholelithotomy\ncholelithotripsy\ncholelithotrity\ncholemia\ncholeokinase\ncholepoietic\ncholer\ncholera\ncholeraic\ncholeric\ncholericly\ncholericness\ncholeriform\ncholerigenous\ncholerine\ncholeroid\ncholeromania\ncholerophobia\ncholerrhagia\ncholestane\ncholestanol\ncholesteatoma\ncholesteatomatous\ncholestene\ncholesterate\ncholesteremia\ncholesteric\ncholesterin\ncholesterinemia\ncholesterinic\ncholesterinuria\ncholesterol\ncholesterolemia\ncholesteroluria\ncholesterosis\ncholesteryl\ncholetelin\ncholetherapy\ncholeuria\ncholi\ncholiamb\ncholiambic\ncholiambist\ncholic\ncholine\ncholinergic\ncholinesterase\ncholinic\ncholla\ncholler\nCholo\ncholochrome\ncholocyanine\nCholoepus\nchologenetic\ncholoidic\ncholoidinic\nchololith\nchololithic\nCholonan\nCholones\ncholophein\ncholorrhea\ncholoscopy\ncholterheaded\ncholum\ncholuria\nCholuteca\nchomp\nchondral\nchondralgia\nchondrarsenite\nchondre\nchondrectomy\nchondrenchyma\nchondric\nchondrification\nchondrify\nchondrigen\nchondrigenous\nChondrilla\nchondrin\nchondrinous\nchondriocont\nchondriome\nchondriomere\nchondriomite\nchondriosomal\nchondriosome\nchondriosphere\nchondrite\nchondritic\nchondritis\nchondroadenoma\nchondroalbuminoid\nchondroangioma\nchondroarthritis\nchondroblast\nchondroblastoma\nchondrocarcinoma\nchondrocele\nchondroclasis\nchondroclast\nchondrocoracoid\nchondrocostal\nchondrocranial\nchondrocranium\nchondrocyte\nchondrodite\nchondroditic\nchondrodynia\nchondrodystrophia\nchondrodystrophy\nchondroendothelioma\nchondroepiphysis\nchondrofetal\nchondrofibroma\nchondrofibromatous\nChondroganoidei\nchondrogen\nchondrogenesis\nchondrogenetic\nchondrogenous\nchondrogeny\nchondroglossal\nchondroglossus\nchondrography\nchondroid\nchondroitic\nchondroitin\nchondrolipoma\nchondrology\nchondroma\nchondromalacia\nchondromatous\nchondromucoid\nChondromyces\nchondromyoma\nchondromyxoma\nchondromyxosarcoma\nchondropharyngeal\nchondropharyngeus\nchondrophore\nchondrophyte\nchondroplast\nchondroplastic\nchondroplasty\nchondroprotein\nchondropterygian\nChondropterygii\nchondropterygious\nchondrosamine\nchondrosarcoma\nchondrosarcomatous\nchondroseptum\nchondrosin\nchondrosis\nchondroskeleton\nchondrostean\nChondrostei\nchondrosteoma\nchondrosteous\nchondrosternal\nchondrotome\nchondrotomy\nchondroxiphoid\nchondrule\nchondrus\nchonolith\nchonta\nChontal\nChontalan\nChontaquiro\nchontawood\nchoop\nchoosable\nchoosableness\nchoose\nchooser\nchoosing\nchoosingly\nchoosy\nchop\nchopa\nchopboat\nchopfallen\nchophouse\nchopin\nchopine\nchoplogic\nchopped\nchopper\nchoppered\nchopping\nchoppy\nchopstick\nChopunnish\nChora\nchoragic\nchoragion\nchoragium\nchoragus\nchoragy\nChorai\nchoral\nchoralcelo\nchoraleon\nchoralist\nchorally\nChorasmian\nchord\nchorda\nChordaceae\nchordacentrous\nchordacentrum\nchordaceous\nchordal\nchordally\nchordamesoderm\nChordata\nchordate\nchorded\nChordeiles\nchorditis\nchordoid\nchordomesoderm\nchordotomy\nchordotonal\nchore\nchorea\nchoreal\nchoreatic\nchoree\nchoregic\nchoregus\nchoregy\nchoreic\nchoreiform\nchoreograph\nchoreographer\nchoreographic\nchoreographical\nchoreography\nchoreoid\nchoreomania\nchorepiscopal\nchorepiscopus\nchoreus\nchoreutic\nchorial\nchoriamb\nchoriambic\nchoriambize\nchoriambus\nchoric\nchorine\nchorioadenoma\nchorioallantoic\nchorioallantoid\nchorioallantois\nchoriocapillaris\nchoriocapillary\nchoriocarcinoma\nchoriocele\nchorioepithelioma\nchorioid\nchorioidal\nchorioiditis\nchorioidocyclitis\nchorioidoiritis\nchorioidoretinitis\nchorioma\nchorion\nchorionepithelioma\nchorionic\nChorioptes\nchorioptic\nchorioretinal\nchorioretinitis\nChoripetalae\nchoripetalous\nchoriphyllous\nchorisepalous\nchorisis\nchorism\nchorist\nchoristate\nchorister\nchoristership\nchoristic\nchoristoblastoma\nchoristoma\nchoristry\nchorization\nchorizont\nchorizontal\nchorizontes\nchorizontic\nchorizontist\nchorogi\nchorograph\nchorographer\nchorographic\nchorographical\nchorographically\nchorography\nchoroid\nchoroidal\nchoroidea\nchoroiditis\nchoroidocyclitis\nchoroidoiritis\nchoroidoretinitis\nchorological\nchorologist\nchorology\nchoromania\nchoromanic\nchorometry\nchorook\nChorotega\nChoroti\nchort\nchorten\nChorti\nchortle\nchortler\nchortosterol\nchorus\nchoruser\nchoruslike\nChorwat\nchoryos\nchose\nchosen\nchott\nChou\nChouan\nChouanize\nchouette\nchough\nchouka\nchoultry\nchoup\nchouquette\nchous\nchouse\nchouser\nchousingha\nchow\nChowanoc\nchowchow\nchowder\nchowderhead\nchowderheaded\nchowk\nchowry\nchoya\nchoyroot\nChozar\nchrematheism\nchrematist\nchrematistic\nchrematistics\nchreotechnics\nchresmology\nchrestomathic\nchrestomathics\nchrestomathy\nchria\nchrimsel\nChris\nchrism\nchrisma\nchrismal\nchrismary\nchrismatine\nchrismation\nchrismatite\nchrismatize\nchrismatory\nchrismon\nchrisom\nchrisomloosing\nchrisroot\nChrissie\nChrist\nChristabel\nChristadelphian\nChristadelphianism\nchristcross\nChristdom\nChristed\nchristen\nChristendie\nChristendom\nchristened\nchristener\nchristening\nChristenmas\nChristhood\nChristiad\nChristian\nChristiana\nChristiania\nChristianiadeal\nChristianism\nchristianite\nChristianity\nChristianization\nChristianize\nChristianizer\nChristianlike\nChristianly\nChristianness\nChristianogentilism\nChristianography\nChristianomastix\nChristianopaganism\nChristicide\nChristie\nChristiform\nChristina\nChristine\nChristless\nChristlessness\nChristlike\nChristlikeness\nChristliness\nChristly\nChristmas\nChristmasberry\nChristmasing\nChristmastide\nChristmasy\nChristocentric\nChristofer\nChristogram\nChristolatry\nChristological\nChristologist\nChristology\nChristophany\nChristophe\nChristopher\nChristos\nchroatol\nChrobat\nchroma\nchromaffin\nchromaffinic\nchromammine\nchromaphil\nchromaphore\nchromascope\nchromate\nchromatic\nchromatical\nchromatically\nchromatician\nchromaticism\nchromaticity\nchromatics\nchromatid\nchromatin\nchromatinic\nChromatioideae\nchromatism\nchromatist\nChromatium\nchromatize\nchromatocyte\nchromatodysopia\nchromatogenous\nchromatogram\nchromatograph\nchromatographic\nchromatography\nchromatoid\nchromatology\nchromatolysis\nchromatolytic\nchromatometer\nchromatone\nchromatopathia\nchromatopathic\nchromatopathy\nchromatophil\nchromatophile\nchromatophilia\nchromatophilic\nchromatophilous\nchromatophobia\nchromatophore\nchromatophoric\nchromatophorous\nchromatoplasm\nchromatopsia\nchromatoptometer\nchromatoptometry\nchromatoscope\nchromatoscopy\nchromatosis\nchromatosphere\nchromatospheric\nchromatrope\nchromaturia\nchromatype\nchromazurine\nchromdiagnosis\nchrome\nchromene\nchromesthesia\nchromic\nchromicize\nchromid\nChromidae\nChromides\nchromidial\nChromididae\nchromidiogamy\nchromidiosome\nchromidium\nchromidrosis\nchromiferous\nchromiole\nchromism\nchromite\nchromitite\nchromium\nchromo\nChromobacterieae\nChromobacterium\nchromoblast\nchromocenter\nchromocentral\nchromochalcographic\nchromochalcography\nchromocollograph\nchromocollographic\nchromocollography\nchromocollotype\nchromocollotypy\nchromocratic\nchromocyte\nchromocytometer\nchromodermatosis\nchromodiascope\nchromogen\nchromogene\nchromogenesis\nchromogenetic\nchromogenic\nchromogenous\nchromogram\nchromograph\nchromoisomer\nchromoisomeric\nchromoisomerism\nchromoleucite\nchromolipoid\nchromolith\nchromolithic\nchromolithograph\nchromolithographer\nchromolithographic\nchromolithography\nchromolysis\nchromomere\nchromometer\nchromone\nchromonema\nchromoparous\nchromophage\nchromophane\nchromophile\nchromophilic\nchromophilous\nchromophobic\nchromophore\nchromophoric\nchromophorous\nchromophotograph\nchromophotographic\nchromophotography\nchromophotolithograph\nchromophyll\nchromoplasm\nchromoplasmic\nchromoplast\nchromoplastid\nchromoprotein\nchromopsia\nchromoptometer\nchromoptometrical\nchromosantonin\nchromoscope\nchromoscopic\nchromoscopy\nchromosomal\nchromosome\nchromosphere\nchromospheric\nchromotherapist\nchromotherapy\nchromotrope\nchromotropic\nchromotropism\nchromotropy\nchromotype\nchromotypic\nchromotypographic\nchromotypography\nchromotypy\nchromous\nchromoxylograph\nchromoxylography\nchromule\nchromy\nchromyl\nchronal\nchronanagram\nchronaxia\nchronaxie\nchronaxy\nchronic\nchronical\nchronically\nchronicity\nchronicle\nchronicler\nchronicon\nchronisotherm\nchronist\nchronobarometer\nchronocinematography\nchronocrator\nchronocyclegraph\nchronodeik\nchronogeneous\nchronogenesis\nchronogenetic\nchronogram\nchronogrammatic\nchronogrammatical\nchronogrammatically\nchronogrammatist\nchronogrammic\nchronograph\nchronographer\nchronographic\nchronographical\nchronographically\nchronography\nchronoisothermal\nchronologer\nchronologic\nchronological\nchronologically\nchronologist\nchronologize\nchronology\nchronomancy\nchronomantic\nchronometer\nchronometric\nchronometrical\nchronometrically\nchronometry\nchrononomy\nchronopher\nchronophotograph\nchronophotographic\nchronophotography\nChronos\nchronoscope\nchronoscopic\nchronoscopically\nchronoscopy\nchronosemic\nchronostichon\nchronothermal\nchronothermometer\nchronotropic\nchronotropism\nChroococcaceae\nchroococcaceous\nChroococcales\nchroococcoid\nChroococcus\nChrosperma\nchrotta\nchrysal\nchrysalid\nchrysalidal\nchrysalides\nchrysalidian\nchrysaline\nchrysalis\nchrysaloid\nchrysamine\nchrysammic\nchrysamminic\nChrysamphora\nchrysaniline\nchrysanisic\nchrysanthemin\nchrysanthemum\nchrysanthous\nChrysaor\nchrysarobin\nchrysatropic\nchrysazin\nchrysazol\nchryselectrum\nchryselephantine\nChrysemys\nchrysene\nchrysenic\nchrysid\nChrysidella\nchrysidid\nChrysididae\nchrysin\nChrysippus\nChrysis\nchrysoaristocracy\nChrysobalanaceae\nChrysobalanus\nchrysoberyl\nchrysobull\nchrysocarpous\nchrysochlore\nChrysochloridae\nChrysochloris\nchrysochlorous\nchrysochrous\nchrysocolla\nchrysocracy\nchrysoeriol\nchrysogen\nchrysograph\nchrysographer\nchrysography\nchrysohermidin\nchrysoidine\nchrysolite\nchrysolitic\nchrysology\nChrysolophus\nchrysomelid\nChrysomelidae\nchrysomonad\nChrysomonadales\nChrysomonadina\nchrysomonadine\nChrysomyia\nChrysopa\nchrysopal\nchrysopee\nchrysophan\nchrysophanic\nChrysophanus\nchrysophenine\nchrysophilist\nchrysophilite\nChrysophlyctis\nchrysophyll\nChrysophyllum\nchrysopid\nChrysopidae\nchrysopoeia\nchrysopoetic\nchrysopoetics\nchrysoprase\nChrysops\nChrysopsis\nchrysorin\nchrysosperm\nChrysosplenium\nChrysothamnus\nChrysothrix\nchrysotile\nChrysotis\nchrystocrene\nchthonian\nchthonic\nchthonophagia\nchthonophagy\nchub\nchubbed\nchubbedness\nchubbily\nchubbiness\nchubby\nChuchona\nChuck\nchuck\nchucker\nchuckhole\nchuckies\nchucking\nchuckingly\nchuckle\nchucklehead\nchuckleheaded\nchuckler\nchucklingly\nchuckrum\nchuckstone\nchuckwalla\nchucky\nChud\nchuddar\nChude\nChudic\nChueta\nchufa\nchuff\nchuffy\nchug\nchugger\nchuhra\nChuje\nchukar\nChukchi\nchukker\nchukor\nchulan\nchullpa\nchum\nChumashan\nChumawi\nchummage\nchummer\nchummery\nchummily\nchummy\nchump\nchumpaka\nchumpish\nchumpishness\nChumpivilca\nchumpy\nchumship\nChumulu\nChun\nchun\nchunari\nChuncho\nchunga\nchunk\nchunkhead\nchunkily\nchunkiness\nchunky\nchunner\nchunnia\nchunter\nchupak\nchupon\nchuprassie\nchuprassy\nchurch\nchurchanity\nchurchcraft\nchurchdom\nchurchful\nchurchgoer\nchurchgoing\nchurchgrith\nchurchianity\nchurchified\nchurchiness\nchurching\nchurchish\nchurchism\nchurchite\nchurchless\nchurchlet\nchurchlike\nchurchliness\nchurchly\nchurchman\nchurchmanly\nchurchmanship\nchurchmaster\nchurchscot\nchurchward\nchurchwarden\nchurchwardenism\nchurchwardenize\nchurchwardenship\nchurchwards\nchurchway\nchurchwise\nchurchwoman\nchurchy\nchurchyard\nchurel\nchuringa\nchurl\nchurled\nchurlhood\nchurlish\nchurlishly\nchurlishness\nchurly\nchurm\nchurn\nchurnability\nchurnful\nchurning\nchurnmilk\nchurnstaff\nChuroya\nChuroyan\nchurr\nChurrigueresque\nchurruck\nchurrus\nchurrworm\nchut\nchute\nchuter\nchutney\nChuvash\nChwana\nchyack\nchyak\nchylaceous\nchylangioma\nchylaqueous\nchyle\nchylemia\nchylidrosis\nchylifaction\nchylifactive\nchylifactory\nchyliferous\nchylific\nchylification\nchylificatory\nchyliform\nchylify\nchylocaulous\nchylocauly\nchylocele\nchylocyst\nchyloid\nchylomicron\nchylopericardium\nchylophyllous\nchylophylly\nchylopoiesis\nchylopoietic\nchylosis\nchylothorax\nchylous\nchyluria\nchymaqueous\nchymase\nchyme\nchymia\nchymic\nchymiferous\nchymification\nchymify\nchymosin\nchymosinogen\nchymotrypsin\nchymotrypsinogen\nchymous\nchypre\nchytra\nchytrid\nChytridiaceae\nchytridiaceous\nchytridial\nChytridiales\nchytridiose\nchytridiosis\nChytridium\nChytroi\ncibarial\ncibarian\ncibarious\ncibation\ncibol\nCibola\nCibolan\nCiboney\ncibophobia\nciborium\ncibory\nciboule\ncicad\ncicada\nCicadellidae\ncicadid\nCicadidae\ncicala\ncicatrice\ncicatrices\ncicatricial\ncicatricle\ncicatricose\ncicatricula\ncicatricule\ncicatrisive\ncicatrix\ncicatrizant\ncicatrizate\ncicatrization\ncicatrize\ncicatrizer\ncicatrose\nCicely\ncicely\ncicer\nciceronage\ncicerone\nciceroni\nCiceronian\nCiceronianism\nCiceronianize\nCiceronic\nCiceronically\nciceronism\nciceronize\ncichlid\nCichlidae\ncichloid\ncichoraceous\nCichoriaceae\ncichoriaceous\nCichorium\nCicindela\ncicindelid\ncicindelidae\ncicisbeism\nciclatoun\nCiconia\nCiconiae\nciconian\nciconiid\nCiconiidae\nciconiiform\nCiconiiformes\nciconine\nciconioid\nCicuta\ncicutoxin\nCid\ncidarid\nCidaridae\ncidaris\nCidaroida\ncider\nciderish\nciderist\nciderkin\ncig\ncigala\ncigar\ncigaresque\ncigarette\ncigarfish\ncigarillo\ncigarito\ncigarless\ncigua\nciguatera\ncilectomy\ncilia\nciliary\nCiliata\nciliate\nciliated\nciliately\nciliation\ncilice\nCilician\ncilicious\nCilicism\nciliella\nciliferous\nciliform\nciliiferous\nciliiform\nCilioflagellata\ncilioflagellate\nciliograde\nciliolate\nciliolum\nCiliophora\ncilioretinal\ncilioscleral\nciliospinal\nciliotomy\ncilium\ncillosis\ncimbia\nCimbri\nCimbrian\nCimbric\ncimelia\ncimex\ncimicid\nCimicidae\ncimicide\ncimiciform\nCimicifuga\ncimicifugin\ncimicoid\nciminite\ncimline\nCimmeria\nCimmerian\nCimmerianism\ncimolite\ncinch\ncincher\ncincholoipon\ncincholoiponic\ncinchomeronic\nCinchona\nCinchonaceae\ncinchonaceous\ncinchonamine\ncinchonate\ncinchonia\ncinchonic\ncinchonicine\ncinchonidia\ncinchonidine\ncinchonine\ncinchoninic\ncinchonism\ncinchonization\ncinchonize\ncinchonology\ncinchophen\ncinchotine\ncinchotoxine\ncincinnal\nCincinnati\nCincinnatia\nCincinnatian\ncincinnus\nCinclidae\nCinclidotus\ncinclis\nCinclus\ncinct\ncincture\ncinder\nCinderella\ncinderlike\ncinderman\ncinderous\ncindery\nCindie\nCindy\ncine\ncinecamera\ncinefilm\ncinel\ncinema\nCinemascope\ncinematic\ncinematical\ncinematically\ncinematize\ncinematograph\ncinematographer\ncinematographic\ncinematographical\ncinematographically\ncinematographist\ncinematography\ncinemelodrama\ncinemize\ncinemograph\ncinenchyma\ncinenchymatous\ncinene\ncinenegative\ncineole\ncineolic\ncinephone\ncinephotomicrography\ncineplastics\ncineplasty\ncineraceous\nCinerama\nCineraria\ncinerarium\ncinerary\ncineration\ncinerator\ncinerea\ncinereal\ncinereous\ncineritious\ncinevariety\ncingle\ncingular\ncingulate\ncingulated\ncingulum\ncinnabar\ncinnabaric\ncinnabarine\ncinnamal\ncinnamaldehyde\ncinnamate\ncinnamein\ncinnamene\ncinnamenyl\ncinnamic\nCinnamodendron\ncinnamol\ncinnamomic\nCinnamomum\ncinnamon\ncinnamoned\ncinnamonic\ncinnamonlike\ncinnamonroot\ncinnamonwood\ncinnamyl\ncinnamylidene\ncinnoline\ncinnyl\ncinquain\ncinque\ncinquecentism\ncinquecentist\ncinquecento\ncinquefoil\ncinquefoiled\ncinquepace\ncinter\nCinura\ncinuran\ncinurous\ncion\ncionectomy\ncionitis\ncionocranial\ncionocranian\ncionoptosis\ncionorrhaphia\ncionotome\ncionotomy\nCipango\ncipher\ncipherable\ncipherdom\ncipherer\ncipherhood\ncipo\ncipolin\ncippus\ncirca\nCircaea\nCircaeaceae\nCircaetus\nCircassian\nCircassic\nCirce\nCircean\nCircensian\ncircinal\ncircinate\ncircinately\ncircination\nCircinus\ncirciter\ncircle\ncircled\ncircler\ncirclet\ncirclewise\ncircling\ncircovarian\ncircuit\ncircuitable\ncircuital\ncircuiteer\ncircuiter\ncircuition\ncircuitman\ncircuitor\ncircuitous\ncircuitously\ncircuitousness\ncircuity\ncirculable\ncirculant\ncircular\ncircularism\ncircularity\ncircularization\ncircularize\ncircularizer\ncircularly\ncircularness\ncircularwise\ncirculate\ncirculation\ncirculative\ncirculator\ncirculatory\ncircumagitate\ncircumagitation\ncircumambages\ncircumambagious\ncircumambience\ncircumambiency\ncircumambient\ncircumambulate\ncircumambulation\ncircumambulator\ncircumambulatory\ncircumanal\ncircumantarctic\ncircumarctic\ncircumarticular\ncircumaviate\ncircumaviation\ncircumaviator\ncircumaxial\ncircumaxile\ncircumaxillary\ncircumbasal\ncircumbendibus\ncircumboreal\ncircumbuccal\ncircumbulbar\ncircumcallosal\nCircumcellion\ncircumcenter\ncircumcentral\ncircumcinct\ncircumcincture\ncircumcircle\ncircumcise\ncircumciser\ncircumcision\ncircumclude\ncircumclusion\ncircumcolumnar\ncircumcone\ncircumconic\ncircumcorneal\ncircumcrescence\ncircumcrescent\ncircumdenudation\ncircumdiction\ncircumduce\ncircumduct\ncircumduction\ncircumesophagal\ncircumesophageal\ncircumference\ncircumferential\ncircumferentially\ncircumferentor\ncircumflant\ncircumflect\ncircumflex\ncircumflexion\ncircumfluence\ncircumfluent\ncircumfluous\ncircumforaneous\ncircumfulgent\ncircumfuse\ncircumfusile\ncircumfusion\ncircumgenital\ncircumgyrate\ncircumgyration\ncircumgyratory\ncircumhorizontal\ncircumincession\ncircuminsession\ncircuminsular\ncircumintestinal\ncircumitineration\ncircumjacence\ncircumjacency\ncircumjacent\ncircumlental\ncircumlitio\ncircumlittoral\ncircumlocute\ncircumlocution\ncircumlocutional\ncircumlocutionary\ncircumlocutionist\ncircumlocutory\ncircummeridian\ncircummeridional\ncircummigration\ncircummundane\ncircummure\ncircumnatant\ncircumnavigable\ncircumnavigate\ncircumnavigation\ncircumnavigator\ncircumnavigatory\ncircumneutral\ncircumnuclear\ncircumnutate\ncircumnutation\ncircumnutatory\ncircumocular\ncircumoesophagal\ncircumoral\ncircumorbital\ncircumpacific\ncircumpallial\ncircumparallelogram\ncircumpentagon\ncircumplicate\ncircumplication\ncircumpolar\ncircumpolygon\ncircumpose\ncircumposition\ncircumradius\ncircumrenal\ncircumrotate\ncircumrotation\ncircumrotatory\ncircumsail\ncircumscissile\ncircumscribable\ncircumscribe\ncircumscribed\ncircumscriber\ncircumscript\ncircumscription\ncircumscriptive\ncircumscriptively\ncircumscriptly\ncircumsinous\ncircumspangle\ncircumspatial\ncircumspect\ncircumspection\ncircumspective\ncircumspectively\ncircumspectly\ncircumspectness\ncircumspheral\ncircumstance\ncircumstanced\ncircumstantiability\ncircumstantiable\ncircumstantial\ncircumstantiality\ncircumstantially\ncircumstantialness\ncircumstantiate\ncircumstantiation\ncircumtabular\ncircumterraneous\ncircumterrestrial\ncircumtonsillar\ncircumtropical\ncircumumbilical\ncircumundulate\ncircumundulation\ncircumvallate\ncircumvallation\ncircumvascular\ncircumvent\ncircumventer\ncircumvention\ncircumventive\ncircumventor\ncircumviate\ncircumvolant\ncircumvolute\ncircumvolution\ncircumvolutory\ncircumvolve\ncircumzenithal\ncircus\ncircusy\ncirque\ncirrate\ncirrated\nCirratulidae\nCirratulus\nCirrhopetalum\ncirrhosed\ncirrhosis\ncirrhotic\ncirrhous\ncirri\ncirribranch\ncirriferous\ncirriform\ncirrigerous\ncirrigrade\ncirriped\nCirripedia\ncirripedial\ncirrolite\ncirropodous\ncirrose\nCirrostomi\ncirrous\ncirrus\ncirsectomy\nCirsium\ncirsocele\ncirsoid\ncirsomphalos\ncirsophthalmia\ncirsotome\ncirsotomy\nciruela\ncirurgian\nCisalpine\ncisalpine\nCisalpinism\ncisandine\ncisatlantic\ncisco\ncise\ncisele\ncisgangetic\ncisjurane\ncisleithan\ncismarine\nCismontane\ncismontane\nCismontanism\ncisoceanic\ncispadane\ncisplatine\ncispontine\ncisrhenane\nCissampelos\ncissing\ncissoid\ncissoidal\nCissus\ncist\ncista\nCistaceae\ncistaceous\ncistae\ncisted\nCistercian\nCistercianism\ncistern\ncisterna\ncisternal\ncistic\ncistophoric\ncistophorus\nCistudo\nCistus\ncistvaen\ncit\ncitable\ncitadel\ncitation\ncitator\ncitatory\ncite\ncitee\nCitellus\nciter\ncitess\ncithara\nCitharexylum\ncitharist\ncitharista\ncitharoedi\ncitharoedic\ncitharoedus\ncither\ncitied\ncitification\ncitified\ncitify\nCitigradae\ncitigrade\ncitizen\ncitizendom\ncitizeness\ncitizenhood\ncitizenish\ncitizenism\ncitizenize\ncitizenly\ncitizenry\ncitizenship\ncitole\ncitraconate\ncitraconic\ncitral\ncitramide\ncitramontane\ncitrange\ncitrangeade\ncitrate\ncitrated\ncitrean\ncitrene\ncitreous\ncitric\ncitriculture\ncitriculturist\ncitril\ncitrin\ncitrination\ncitrine\ncitrinin\ncitrinous\ncitrometer\nCitromyces\ncitron\ncitronade\ncitronella\ncitronellal\ncitronelle\ncitronellic\ncitronellol\ncitronin\ncitronwood\nCitropsis\ncitropten\ncitrous\ncitrullin\nCitrullus\nCitrus\ncitrus\ncitrylidene\ncittern\ncitua\ncity\ncitycism\ncitydom\ncityfolk\ncityful\ncityish\ncityless\ncityness\ncityscape\ncityward\ncitywards\ncive\ncivet\ncivetlike\ncivetone\ncivic\ncivically\ncivicism\ncivics\ncivil\ncivilian\ncivility\ncivilizable\ncivilization\ncivilizational\ncivilizatory\ncivilize\ncivilized\ncivilizedness\ncivilizee\ncivilizer\ncivilly\ncivilness\ncivism\nCivitan\ncivvy\ncixiid\nCixiidae\nCixo\nclabber\nclabbery\nclachan\nclack\nClackama\nclackdish\nclacker\nclacket\nclackety\nclad\ncladanthous\ncladautoicous\ncladding\ncladine\ncladocarpous\nCladocera\ncladoceran\ncladocerous\ncladode\ncladodial\ncladodont\ncladodontid\nCladodontidae\nCladodus\ncladogenous\nCladonia\nCladoniaceae\ncladoniaceous\ncladonioid\nCladophora\nCladophoraceae\ncladophoraceous\nCladophorales\ncladophyll\ncladophyllum\ncladoptosis\ncladose\nCladoselache\nCladoselachea\ncladoselachian\nCladoselachidae\ncladosiphonic\nCladosporium\nCladothrix\nCladrastis\ncladus\nclag\nclaggum\nclaggy\nClaiborne\nClaibornian\nclaim\nclaimable\nclaimant\nclaimer\nclaimless\nclairaudience\nclairaudient\nclairaudiently\nclairce\nClaire\nclairecole\nclairecolle\nclairschach\nclairschacher\nclairsentience\nclairsentient\nclairvoyance\nclairvoyancy\nclairvoyant\nclairvoyantly\nclaith\nclaithes\nclaiver\nClallam\nclam\nclamant\nclamantly\nclamative\nClamatores\nclamatorial\nclamatory\nclamb\nclambake\nclamber\nclamberer\nclamcracker\nclame\nclamer\nclammed\nclammer\nclammily\nclamminess\nclamming\nclammish\nclammy\nclammyweed\nclamor\nclamorer\nclamorist\nclamorous\nclamorously\nclamorousness\nclamorsome\nclamp\nclamper\nclamshell\nclamworm\nclan\nclancular\nclancularly\nclandestine\nclandestinely\nclandestineness\nclandestinity\nclanfellow\nclang\nclangful\nclangingly\nclangor\nclangorous\nclangorously\nClangula\nclanjamfray\nclanjamfrey\nclanjamfrie\nclanjamphrey\nclank\nclankety\nclanking\nclankingly\nclankingness\nclankless\nclanless\nclanned\nclanning\nclannishly\nclannishness\nclansfolk\nclanship\nclansman\nclansmanship\nclanswoman\nClaosaurus\nclap\nclapboard\nclapbread\nclapmatch\nclapnet\nclapped\nclapper\nclapperclaw\nclapperclawer\nclapperdudgeon\nclappermaclaw\nclapping\nclapt\nclaptrap\nclapwort\nclaque\nclaquer\nClara\nclarabella\nclarain\nClare\nClarence\nClarenceux\nClarenceuxship\nClarencieux\nclarendon\nclaret\nClaretian\nClaribel\nclaribella\nClarice\nclarifiant\nclarification\nclarifier\nclarify\nclarigation\nclarin\nClarinda\nclarinet\nclarinetist\nclarinettist\nclarion\nclarionet\nClarissa\nClarisse\nClarist\nclarity\nClark\nclark\nclarkeite\nClarkia\nclaro\nClaromontane\nclarshech\nclart\nclarty\nclary\nclash\nclasher\nclashingly\nclashy\nclasmatocyte\nclasmatosis\nclasp\nclasper\nclasping\nclaspt\nclass\nclassable\nclassbook\nclassed\nclasser\nclasses\nclassfellow\nclassic\nclassical\nclassicalism\nclassicalist\nclassicality\nclassicalize\nclassically\nclassicalness\nclassicism\nclassicist\nclassicistic\nclassicize\nclassicolatry\nclassifiable\nclassific\nclassifically\nclassification\nclassificational\nclassificator\nclassificatory\nclassified\nclassifier\nclassis\nclassism\nclassman\nclassmanship\nclassmate\nclassroom\nclasswise\nclasswork\nclassy\nclastic\nclat\nclatch\nClathraceae\nclathraceous\nClathraria\nclathrarian\nclathrate\nClathrina\nClathrinidae\nclathroid\nclathrose\nclathrulate\nClathrus\nClatsop\nclatter\nclatterer\nclatteringly\nclattertrap\nclattery\nclatty\nClaude\nclaudent\nclaudetite\nClaudia\nClaudian\nclaudicant\nclaudicate\nclaudication\nClaudio\nClaudius\nclaught\nclausal\nclause\nClausilia\nClausiliidae\nclausthalite\nclaustra\nclaustral\nclaustration\nclaustrophobia\nclaustrum\nclausula\nclausular\nclausule\nclausure\nclaut\nclava\nclavacin\nclaval\nClavaria\nClavariaceae\nclavariaceous\nclavate\nclavated\nclavately\nclavation\nclave\nclavecin\nclavecinist\nclavel\nclavelization\nclavelize\nclavellate\nclavellated\nclaver\nclavial\nclaviature\nclavicembalo\nClaviceps\nclavichord\nclavichordist\nclavicithern\nclavicle\nclavicorn\nclavicornate\nClavicornes\nClavicornia\nclavicotomy\nclavicular\nclavicularium\nclaviculate\nclaviculus\nclavicylinder\nclavicymbal\nclavicytherium\nclavier\nclavierist\nclaviform\nclaviger\nclavigerous\nclaviharp\nclavilux\nclaviol\nclavipectoral\nclavis\nclavodeltoid\nclavodeltoideus\nclavola\nclavolae\nclavolet\nclavus\nclavy\nclaw\nclawed\nclawer\nclawk\nclawker\nclawless\nClay\nclay\nclaybank\nclaybrained\nclayen\nclayer\nclayey\nclayiness\nclayish\nclaylike\nclayman\nclaymore\nClayoquot\nclaypan\nClayton\nClaytonia\nclayware\nclayweed\ncleach\nclead\ncleaded\ncleading\ncleam\ncleamer\nclean\ncleanable\ncleaner\ncleanhanded\ncleanhandedness\ncleanhearted\ncleaning\ncleanish\ncleanlily\ncleanliness\ncleanly\ncleanness\ncleanout\ncleansable\ncleanse\ncleanser\ncleansing\ncleanskins\ncleanup\nclear\nclearable\nclearage\nclearance\nclearcole\nclearedness\nclearer\nclearheaded\nclearheadedly\nclearheadedness\nclearhearted\nclearing\nclearinghouse\nclearish\nclearly\nclearness\nclearskins\nclearstarch\nclearweed\nclearwing\ncleat\ncleavability\ncleavable\ncleavage\ncleave\ncleaveful\ncleavelandite\ncleaver\ncleavers\ncleaverwort\ncleaving\ncleavingly\ncleche\ncleck\ncled\ncledge\ncledgy\ncledonism\nclee\ncleek\ncleeked\ncleeky\nclef\ncleft\nclefted\ncleg\ncleidagra\ncleidarthritis\ncleidocostal\ncleidocranial\ncleidohyoid\ncleidomancy\ncleidomastoid\ncleidorrhexis\ncleidoscapular\ncleidosternal\ncleidotomy\ncleidotripsy\ncleistocarp\ncleistocarpous\ncleistogamic\ncleistogamically\ncleistogamous\ncleistogamously\ncleistogamy\ncleistogene\ncleistogenous\ncleistogeny\ncleistothecium\nCleistothecopsis\ncleithral\ncleithrum\nClem\nclem\nClematis\nclematite\nClemclemalats\nclemence\nclemency\nClement\nclement\nClementina\nClementine\nclemently\nclench\ncleoid\nCleome\nCleopatra\nclep\nClepsine\nclepsydra\ncleptobiosis\ncleptobiotic\nclerestoried\nclerestory\nclergy\nclergyable\nclergylike\nclergyman\nclergywoman\ncleric\nclerical\nclericalism\nclericalist\nclericality\nclericalize\nclerically\nclericate\nclericature\nclericism\nclericity\nclerid\nCleridae\nclerihew\nclerisy\nclerk\nclerkage\nclerkdom\nclerkery\nclerkess\nclerkhood\nclerking\nclerkish\nclerkless\nclerklike\nclerkliness\nclerkly\nclerkship\nClerodendron\ncleromancy\ncleronomy\ncleruch\ncleruchial\ncleruchic\ncleruchy\nClerus\ncletch\nClethra\nClethraceae\nclethraceous\ncleuch\ncleve\ncleveite\nclever\ncleverality\ncleverish\ncleverishly\ncleverly\ncleverness\nclevis\nclew\ncliack\nclianthus\ncliche\nclick\nclicker\nclicket\nclickless\nclicky\nClidastes\ncliency\nclient\nclientage\ncliental\ncliented\nclientelage\nclientele\nclientless\nclientry\nclientship\nCliff\ncliff\ncliffed\ncliffless\nclifflet\nclifflike\nClifford\ncliffside\ncliffsman\ncliffweed\ncliffy\nclift\nCliftonia\ncliftonite\nclifty\nclima\nClimaciaceae\nclimaciaceous\nClimacium\nclimacteric\nclimacterical\nclimacterically\nclimactic\nclimactical\nclimactically\nclimacus\nclimata\nclimatal\nclimate\nclimath\nclimatic\nclimatical\nclimatically\nClimatius\nclimatize\nclimatographical\nclimatography\nclimatologic\nclimatological\nclimatologically\nclimatologist\nclimatology\nclimatometer\nclimatotherapeutics\nclimatotherapy\nclimature\nclimax\nclimb\nclimbable\nclimber\nclimbing\nclime\nclimograph\nclinal\nclinamen\nclinamina\nclinandria\nclinandrium\nclinanthia\nclinanthium\nclinch\nclincher\nclinchingly\nclinchingness\ncline\ncling\nclinger\nclingfish\nclinging\nclingingly\nclingingness\nclingstone\nclingy\nclinia\nclinic\nclinical\nclinically\nclinician\nclinicist\nclinicopathological\nclinium\nclink\nclinker\nclinkerer\nclinkery\nclinking\nclinkstone\nclinkum\nclinoaxis\nclinocephalic\nclinocephalism\nclinocephalous\nclinocephalus\nclinocephaly\nclinochlore\nclinoclase\nclinoclasite\nclinodiagonal\nclinodomatic\nclinodome\nclinograph\nclinographic\nclinohedral\nclinohedrite\nclinohumite\nclinoid\nclinologic\nclinology\nclinometer\nclinometric\nclinometrical\nclinometry\nclinopinacoid\nclinopinacoidal\nClinopodium\nclinoprism\nclinopyramid\nclinopyroxene\nclinorhombic\nclinospore\nclinostat\nclinquant\nclint\nclinting\nClinton\nClintonia\nclintonite\nclinty\nClio\nCliona\nClione\nclip\nclipei\nclipeus\nclippable\nclipped\nclipper\nclipperman\nclipping\nclips\nclipse\nclipsheet\nclipsome\nclipt\nclique\ncliquedom\ncliqueless\ncliquish\ncliquishly\ncliquishness\ncliquism\ncliquy\ncliseometer\nclisere\nclishmaclaver\nClisiocampa\nClistogastra\nclit\nclitch\nclite\nclitella\nclitellar\nclitelliferous\nclitelline\nclitellum\nclitellus\nclites\nclithe\nclithral\nclithridiate\nclitia\nclition\nClitocybe\nClitoria\nclitoridauxe\nclitoridean\nclitoridectomy\nclitoriditis\nclitoridotomy\nclitoris\nclitorism\nclitoritis\nclitter\nclitterclatter\nclival\nclive\nclivers\nClivia\nclivis\nclivus\ncloaca\ncloacal\ncloacaline\ncloacean\ncloacinal\ncloacinean\ncloacitis\ncloak\ncloakage\ncloaked\ncloakedly\ncloaking\ncloakless\ncloaklet\ncloakmaker\ncloakmaking\ncloakroom\ncloakwise\ncloam\ncloamen\ncloamer\nclobber\nclobberer\nclochan\ncloche\nclocher\nclochette\nclock\nclockbird\nclockcase\nclocked\nclocker\nclockface\nclockhouse\nclockkeeper\nclockless\nclocklike\nclockmaker\nclockmaking\nclockmutch\nclockroom\nclocksmith\nclockwise\nclockwork\nclod\nclodbreaker\nclodder\ncloddily\ncloddiness\ncloddish\ncloddishly\ncloddishness\ncloddy\nclodhead\nclodhopper\nclodhopping\nclodlet\nclodpate\nclodpated\nclodpoll\ncloff\nclog\nclogdogdo\nclogger\ncloggily\nclogginess\ncloggy\ncloghad\ncloglike\nclogmaker\nclogmaking\nclogwood\nclogwyn\ncloiochoanitic\ncloisonless\ncloisonne\ncloister\ncloisteral\ncloistered\ncloisterer\ncloisterless\ncloisterlike\ncloisterliness\ncloisterly\ncloisterwise\ncloistral\ncloistress\ncloit\nclomb\nclomben\nclonal\nclone\nclonic\nclonicity\nclonicotonic\nclonism\nclonorchiasis\nClonorchis\nClonothrix\nclonus\ncloof\ncloop\ncloot\nclootie\nclop\ncloragen\nclorargyrite\ncloriodid\nclosable\nclose\nclosecross\nclosed\nclosefisted\nclosefistedly\nclosefistedness\nclosehanded\nclosehearted\nclosely\nclosemouth\nclosemouthed\nclosen\ncloseness\ncloser\nclosestool\ncloset\nclosewing\nclosh\nclosish\ncloster\nClosterium\nclostridial\nClostridium\nclosure\nclot\nclotbur\nclote\ncloth\nclothbound\nclothe\nclothes\nclothesbag\nclothesbasket\nclothesbrush\nclotheshorse\nclothesline\nclothesman\nclothesmonger\nclothespin\nclothespress\nclothesyard\nclothier\nclothify\nClothilda\nclothing\nclothmaker\nclothmaking\nClotho\nclothworker\nclothy\nclottage\nclottedness\nclotter\nclotty\ncloture\nclotweed\ncloud\ncloudage\ncloudberry\ncloudburst\ncloudcap\nclouded\ncloudful\ncloudily\ncloudiness\nclouding\ncloudland\ncloudless\ncloudlessly\ncloudlessness\ncloudlet\ncloudlike\ncloudling\ncloudology\ncloudscape\ncloudship\ncloudward\ncloudwards\ncloudy\nclough\nclour\nclout\nclouted\nclouter\nclouterly\nclouty\nclove\ncloven\nclovene\nclover\nclovered\ncloverlay\ncloverleaf\ncloveroot\ncloverroot\nclovery\nclow\nclown\nclownade\nclownage\nclownery\nclownheal\nclownish\nclownishly\nclownishness\nclownship\nclowring\ncloy\ncloyedness\ncloyer\ncloying\ncloyingly\ncloyingness\ncloyless\ncloysome\nclub\nclubbability\nclubbable\nclubbed\nclubber\nclubbily\nclubbing\nclubbish\nclubbism\nclubbist\nclubby\nclubdom\nclubfellow\nclubfisted\nclubfoot\nclubfooted\nclubhand\nclubhaul\nclubhouse\nclubionid\nClubionidae\nclubland\nclubman\nclubmate\nclubmobile\nclubmonger\nclubridden\nclubroom\nclubroot\nclubstart\nclubster\nclubweed\nclubwoman\nclubwood\ncluck\nclue\ncluff\nclump\nclumpish\nclumproot\nclumpy\nclumse\nclumsily\nclumsiness\nclumsy\nclunch\nclung\nCluniac\nCluniacensian\nClunisian\nClunist\nclunk\nclupanodonic\nClupea\nclupeid\nClupeidae\nclupeiform\nclupeine\nClupeodei\nclupeoid\ncluricaune\nClusia\nClusiaceae\nclusiaceous\ncluster\nclusterberry\nclustered\nclusterfist\nclustering\nclusteringly\nclustery\nclutch\nclutchman\ncluther\nclutter\nclutterer\nclutterment\ncluttery\ncly\nClyde\nClydesdale\nClydeside\nClydesider\nclyer\nclyfaker\nclyfaking\nClymenia\nclype\nclypeal\nClypeaster\nClypeastridea\nClypeastrina\nclypeastroid\nClypeastroida\nClypeastroidea\nclypeate\nclypeiform\nclypeolar\nclypeolate\nclypeole\nclypeus\nclysis\nclysma\nclysmian\nclysmic\nclyster\nclysterize\nClytemnestra\ncnemapophysis\ncnemial\ncnemidium\nCnemidophorus\ncnemis\nCneoraceae\ncneoraceous\nCneorum\ncnicin\nCnicus\ncnida\nCnidaria\ncnidarian\nCnidian\ncnidoblast\ncnidocell\ncnidocil\ncnidocyst\ncnidophore\ncnidophorous\ncnidopod\ncnidosac\nCnidoscolus\ncnidosis\ncoabode\ncoabound\ncoabsume\ncoacceptor\ncoacervate\ncoacervation\ncoach\ncoachability\ncoachable\ncoachbuilder\ncoachbuilding\ncoachee\ncoacher\ncoachfellow\ncoachful\ncoaching\ncoachlet\ncoachmaker\ncoachmaking\ncoachman\ncoachmanship\ncoachmaster\ncoachsmith\ncoachsmithing\ncoachway\ncoachwhip\ncoachwise\ncoachwoman\ncoachwork\ncoachwright\ncoachy\ncoact\ncoaction\ncoactive\ncoactively\ncoactivity\ncoactor\ncoadamite\ncoadapt\ncoadaptation\ncoadequate\ncoadjacence\ncoadjacency\ncoadjacent\ncoadjacently\ncoadjudicator\ncoadjust\ncoadjustment\ncoadjutant\ncoadjutator\ncoadjute\ncoadjutement\ncoadjutive\ncoadjutor\ncoadjutorship\ncoadjutress\ncoadjutrix\ncoadjuvancy\ncoadjuvant\ncoadjuvate\ncoadminister\ncoadministration\ncoadministrator\ncoadministratrix\ncoadmiration\ncoadmire\ncoadmit\ncoadnate\ncoadore\ncoadsorbent\ncoadunate\ncoadunation\ncoadunative\ncoadunatively\ncoadunite\ncoadventure\ncoadventurer\ncoadvice\ncoaffirmation\ncoafforest\ncoaged\ncoagency\ncoagent\ncoaggregate\ncoaggregated\ncoaggregation\ncoagitate\ncoagitator\ncoagment\ncoagonize\ncoagriculturist\ncoagula\ncoagulability\ncoagulable\ncoagulant\ncoagulase\ncoagulate\ncoagulation\ncoagulative\ncoagulator\ncoagulatory\ncoagulin\ncoagulometer\ncoagulose\ncoagulum\nCoahuiltecan\ncoaid\ncoaita\ncoak\ncoakum\ncoal\ncoalbag\ncoalbagger\ncoalbin\ncoalbox\ncoaldealer\ncoaler\ncoalesce\ncoalescence\ncoalescency\ncoalescent\ncoalfish\ncoalfitter\ncoalhole\ncoalification\ncoalify\nCoalite\ncoalition\ncoalitional\ncoalitioner\ncoalitionist\ncoalize\ncoalizer\ncoalless\ncoalmonger\ncoalmouse\ncoalpit\ncoalrake\ncoalsack\ncoalternate\ncoalternation\ncoalternative\ncoaltitude\ncoaly\ncoalyard\ncoambassador\ncoambulant\ncoamiable\ncoaming\nCoan\ncoanimate\ncoannex\ncoannihilate\ncoapostate\ncoapparition\ncoappear\ncoappearance\ncoapprehend\ncoapprentice\ncoappriser\ncoapprover\ncoapt\ncoaptate\ncoaptation\ncoaration\ncoarb\ncoarbiter\ncoarbitrator\ncoarctate\ncoarctation\ncoardent\ncoarrange\ncoarrangement\ncoarse\ncoarsely\ncoarsen\ncoarseness\ncoarsish\ncoascend\ncoassert\ncoasserter\ncoassession\ncoassessor\ncoassignee\ncoassist\ncoassistance\ncoassistant\ncoassume\ncoast\ncoastal\ncoastally\ncoaster\nCoastguard\ncoastguardman\ncoasting\ncoastland\ncoastman\ncoastside\ncoastwaiter\ncoastward\ncoastwards\ncoastways\ncoastwise\ncoat\ncoated\ncoatee\ncoater\ncoati\ncoatie\ncoatimondie\ncoatimundi\ncoating\ncoatless\ncoatroom\ncoattail\ncoattailed\ncoattend\ncoattest\ncoattestation\ncoattestator\ncoaudience\ncoauditor\ncoaugment\ncoauthor\ncoauthority\ncoauthorship\ncoawareness\ncoax\ncoaxal\ncoaxation\ncoaxer\ncoaxial\ncoaxially\ncoaxing\ncoaxingly\ncoaxy\ncob\ncobaea\ncobalt\ncobaltammine\ncobaltic\ncobalticyanic\ncobalticyanides\ncobaltiferous\ncobaltinitrite\ncobaltite\ncobaltocyanic\ncobaltocyanide\ncobaltous\ncobang\ncobbed\ncobber\ncobberer\ncobbing\ncobble\ncobbler\ncobblerfish\ncobblerism\ncobblerless\ncobblership\ncobblery\ncobblestone\ncobbling\ncobbly\ncobbra\ncobby\ncobcab\nCobdenism\nCobdenite\ncobego\ncobelief\ncobeliever\ncobelligerent\ncobenignity\ncoberger\ncobewail\ncobhead\ncobia\ncobiron\ncobishop\nCobitidae\nCobitis\ncoble\ncobleman\nCoblentzian\nCobleskill\ncobless\ncobloaf\ncobnut\ncobola\ncoboundless\ncobourg\ncobra\ncobreathe\ncobridgehead\ncobriform\ncobrother\ncobstone\ncoburg\ncoburgess\ncoburgher\ncoburghership\nCobus\ncobweb\ncobwebbery\ncobwebbing\ncobwebby\ncobwork\ncoca\ncocaceous\ncocaine\ncocainism\ncocainist\ncocainization\ncocainize\ncocainomania\ncocainomaniac\nCocama\nCocamama\ncocamine\nCocanucos\ncocarboxylase\ncocash\ncocashweed\ncocause\ncocautioner\nCoccaceae\ncoccagee\ncoccal\nCocceian\nCocceianism\ncoccerin\ncocci\ncoccid\nCoccidae\ncoccidia\ncoccidial\ncoccidian\nCoccidiidea\ncoccidioidal\nCoccidioides\nCoccidiomorpha\ncoccidiosis\ncoccidium\ncoccidology\ncocciferous\ncocciform\ncoccigenic\ncoccinella\ncoccinellid\nCoccinellidae\ncoccionella\ncocco\ncoccobacillus\ncoccochromatic\nCoccogonales\ncoccogone\nCoccogoneae\ncoccogonium\ncoccoid\ncoccolite\ncoccolith\ncoccolithophorid\nCoccolithophoridae\nCoccoloba\nCoccolobis\nCoccomyces\ncoccosphere\ncoccostean\ncoccosteid\nCoccosteidae\nCoccosteus\nCoccothraustes\ncoccothraustine\nCoccothrinax\ncoccous\ncoccule\ncocculiferous\nCocculus\ncocculus\ncoccus\ncoccydynia\ncoccygalgia\ncoccygeal\ncoccygean\ncoccygectomy\ncoccygerector\ncoccyges\ncoccygeus\ncoccygine\ncoccygodynia\ncoccygomorph\nCoccygomorphae\ncoccygomorphic\ncoccygotomy\ncoccyodynia\ncoccyx\nCoccyzus\ncocentric\ncochairman\ncochal\ncochief\nCochin\ncochineal\ncochlea\ncochlear\ncochleare\nCochlearia\ncochlearifoliate\ncochleariform\ncochleate\ncochleated\ncochleiform\ncochleitis\ncochleous\ncochlidiid\nCochlidiidae\ncochliodont\nCochliodontidae\nCochliodus\nCochlospermaceae\ncochlospermaceous\nCochlospermum\nCochranea\ncochurchwarden\ncocillana\ncocircular\ncocircularity\ncocitizen\ncocitizenship\ncock\ncockade\ncockaded\nCockaigne\ncockal\ncockalorum\ncockamaroo\ncockarouse\ncockateel\ncockatoo\ncockatrice\ncockawee\ncockbell\ncockbill\ncockbird\ncockboat\ncockbrain\ncockchafer\ncockcrow\ncockcrower\ncockcrowing\ncocked\nCocker\ncocker\ncockerel\ncockermeg\ncockernony\ncocket\ncockeye\ncockeyed\ncockfight\ncockfighting\ncockhead\ncockhorse\ncockieleekie\ncockily\ncockiness\ncocking\ncockish\ncockle\ncockleboat\ncocklebur\ncockled\ncockler\ncockleshell\ncocklet\ncocklewife\ncocklight\ncockling\ncockloft\ncockly\ncockmaster\ncockmatch\ncockmate\ncockneian\ncockneity\ncockney\ncockneybred\ncockneydom\ncockneyese\ncockneyess\ncockneyfication\ncockneyfy\ncockneyish\ncockneyishly\ncockneyism\ncockneyize\ncockneyland\ncockneyship\ncockpit\ncockroach\ncockscomb\ncockscombed\ncocksfoot\ncockshead\ncockshot\ncockshut\ncockshy\ncockshying\ncockspur\ncockstone\ncocksure\ncocksuredom\ncocksureism\ncocksurely\ncocksureness\ncocksurety\ncocktail\ncockthrowing\ncockup\ncockweed\ncocky\nCocle\ncoco\ncocoa\ncocoach\ncocobolo\nCoconino\ncoconnection\ncoconqueror\ncoconscious\ncoconsciously\ncoconsciousness\ncoconsecrator\ncoconspirator\ncoconstituent\ncocontractor\nCoconucan\nCoconuco\ncoconut\ncocoon\ncocoonery\ncocorico\ncocoroot\nCocos\ncocotte\ncocovenantor\ncocowood\ncocowort\ncocozelle\ncocreate\ncocreator\ncocreatorship\ncocreditor\ncocrucify\ncoctile\ncoction\ncoctoantigen\ncoctoprecipitin\ncocuisa\ncocullo\ncocurator\ncocurrent\ncocuswood\ncocuyo\nCocytean\nCocytus\ncod\ncoda\ncodamine\ncodbank\ncodder\ncodding\ncoddle\ncoddler\ncode\ncodebtor\ncodeclination\ncodecree\ncodefendant\ncodeine\ncodeless\ncodelight\ncodelinquency\ncodelinquent\ncodenization\ncodeposit\ncoder\ncoderive\ncodescendant\ncodespairer\ncodex\ncodfish\ncodfisher\ncodfishery\ncodger\ncodhead\ncodheaded\nCodiaceae\ncodiaceous\nCodiaeum\nCodiales\ncodical\ncodices\ncodicil\ncodicilic\ncodicillary\ncodictatorship\ncodification\ncodifier\ncodify\ncodilla\ncodille\ncodiniac\ncodirectional\ncodirector\ncodiscoverer\ncodisjunct\ncodist\nCodium\ncodivine\ncodling\ncodman\ncodo\ncodol\ncodomestication\ncodominant\ncodon\ncodpiece\ncodpitchings\nCodrus\ncodshead\ncodworm\ncoe\ncoecal\ncoecum\ncoed\ncoeditor\ncoeditorship\ncoeducate\ncoeducation\ncoeducational\ncoeducationalism\ncoeducationalize\ncoeducationally\ncoeffect\ncoefficacy\ncoefficient\ncoefficiently\ncoeffluent\ncoeffluential\ncoelacanth\ncoelacanthid\nCoelacanthidae\ncoelacanthine\nCoelacanthini\ncoelacanthoid\ncoelacanthous\ncoelanaglyphic\ncoelar\ncoelarium\nCoelastraceae\ncoelastraceous\nCoelastrum\nCoelata\ncoelder\ncoeldership\nCoelebogyne\ncoelect\ncoelection\ncoelector\ncoelectron\ncoelelminth\nCoelelminthes\ncoelelminthic\nCoelentera\nCoelenterata\ncoelenterate\ncoelenteric\ncoelenteron\ncoelestine\ncoelevate\ncoelho\ncoelia\ncoeliac\ncoelialgia\ncoelian\nCoelicolae\nCoelicolist\ncoeligenous\ncoelin\ncoeline\ncoeliomyalgia\ncoeliorrhea\ncoeliorrhoea\ncoelioscopy\ncoeliotomy\ncoeloblastic\ncoeloblastula\nCoelococcus\ncoelodont\ncoelogastrula\nCoeloglossum\nCoelogyne\ncoelom\ncoeloma\nCoelomata\ncoelomate\ncoelomatic\ncoelomatous\ncoelomesoblast\ncoelomic\nCoelomocoela\ncoelomopore\ncoelonavigation\ncoelongated\ncoeloplanula\ncoelosperm\ncoelospermous\ncoelostat\ncoelozoic\ncoemanate\ncoembedded\ncoembody\ncoembrace\ncoeminency\ncoemperor\ncoemploy\ncoemployee\ncoemployment\ncoempt\ncoemption\ncoemptional\ncoemptionator\ncoemptive\ncoemptor\ncoenact\ncoenactor\ncoenaculous\ncoenamor\ncoenamorment\ncoenamourment\ncoenanthium\ncoendear\nCoendidae\nCoendou\ncoendure\ncoenenchym\ncoenenchyma\ncoenenchymal\ncoenenchymatous\ncoenenchyme\ncoenesthesia\ncoenesthesis\ncoenflame\ncoengage\ncoengager\ncoenjoy\ncoenobe\ncoenobiar\ncoenobic\ncoenobioid\ncoenobium\ncoenoblast\ncoenoblastic\ncoenocentrum\ncoenocyte\ncoenocytic\ncoenodioecism\ncoenoecial\ncoenoecic\ncoenoecium\ncoenogamete\ncoenomonoecism\ncoenosarc\ncoenosarcal\ncoenosarcous\ncoenosite\ncoenospecies\ncoenospecific\ncoenospecifically\ncoenosteal\ncoenosteum\ncoenotrope\ncoenotype\ncoenotypic\ncoenthrone\ncoenurus\ncoenzyme\ncoequal\ncoequality\ncoequalize\ncoequally\ncoequalness\ncoequate\ncoequated\ncoequation\ncoerce\ncoercement\ncoercer\ncoercibility\ncoercible\ncoercibleness\ncoercibly\ncoercion\ncoercionary\ncoercionist\ncoercitive\ncoercive\ncoercively\ncoerciveness\ncoercivity\nCoerebidae\ncoeruleolactite\ncoessential\ncoessentiality\ncoessentially\ncoessentialness\ncoestablishment\ncoestate\ncoetaneity\ncoetaneous\ncoetaneously\ncoetaneousness\ncoeternal\ncoeternally\ncoeternity\ncoetus\ncoeval\ncoevality\ncoevally\ncoexchangeable\ncoexclusive\ncoexecutant\ncoexecutor\ncoexecutrix\ncoexert\ncoexertion\ncoexist\ncoexistence\ncoexistency\ncoexistent\ncoexpand\ncoexpanded\ncoexperiencer\ncoexpire\ncoexplosion\ncoextend\ncoextension\ncoextensive\ncoextensively\ncoextensiveness\ncoextent\ncofactor\nCofane\ncofaster\ncofather\ncofathership\ncofeature\ncofeoffee\ncoferment\ncofermentation\ncoff\nCoffea\ncoffee\ncoffeebush\ncoffeecake\ncoffeegrower\ncoffeegrowing\ncoffeehouse\ncoffeeleaf\ncoffeepot\ncoffeeroom\ncoffeetime\ncoffeeweed\ncoffeewood\ncoffer\ncofferdam\ncofferer\ncofferfish\ncoffering\ncofferlike\ncofferwork\ncoffin\ncoffinless\ncoffinmaker\ncoffinmaking\ncoffle\ncoffret\ncofighter\ncoforeknown\ncoformulator\ncofounder\ncofoundress\ncofreighter\ncoft\ncofunction\ncog\ncogence\ncogency\ncogener\ncogeneric\ncogent\ncogently\ncogged\ncogger\ncoggie\ncogging\ncoggle\ncoggledy\ncogglety\ncoggly\ncoghle\ncogitability\ncogitable\ncogitabund\ncogitabundity\ncogitabundly\ncogitabundous\ncogitant\ncogitantly\ncogitate\ncogitatingly\ncogitation\ncogitative\ncogitatively\ncogitativeness\ncogitativity\ncogitator\ncoglorify\ncoglorious\ncogman\ncognac\ncognate\ncognateness\ncognatic\ncognatical\ncognation\ncognisable\ncognisance\ncognition\ncognitional\ncognitive\ncognitively\ncognitum\ncognizability\ncognizable\ncognizableness\ncognizably\ncognizance\ncognizant\ncognize\ncognizee\ncognizer\ncognizor\ncognomen\ncognominal\ncognominate\ncognomination\ncognosce\ncognoscent\ncognoscibility\ncognoscible\ncognoscitive\ncognoscitively\ncogon\ncogonal\ncogovernment\ncogovernor\ncogracious\ncograil\ncogrediency\ncogredient\ncogroad\nCogswellia\ncoguarantor\ncoguardian\ncogue\ncogway\ncogwheel\ncogwood\ncohabit\ncohabitancy\ncohabitant\ncohabitation\ncoharmonious\ncoharmoniously\ncoharmonize\ncoheartedness\ncoheir\ncoheiress\ncoheirship\ncohelper\ncohelpership\nCohen\ncohenite\ncoherald\ncohere\ncoherence\ncoherency\ncoherent\ncoherently\ncoherer\ncoheretic\ncoheritage\ncoheritor\ncohesibility\ncohesible\ncohesion\ncohesive\ncohesively\ncohesiveness\ncohibit\ncohibition\ncohibitive\ncohibitor\ncoho\ncohoba\ncohobate\ncohobation\ncohobator\ncohol\ncohort\ncohortation\ncohortative\ncohosh\ncohune\ncohusband\ncoidentity\ncoif\ncoifed\ncoiffure\ncoign\ncoigue\ncoil\ncoiled\ncoiler\ncoiling\ncoilsmith\ncoimmense\ncoimplicant\ncoimplicate\ncoimplore\ncoin\ncoinable\ncoinage\ncoincide\ncoincidence\ncoincidency\ncoincident\ncoincidental\ncoincidentally\ncoincidently\ncoincider\ncoinclination\ncoincline\ncoinclude\ncoincorporate\ncoindicant\ncoindicate\ncoindication\ncoindwelling\ncoiner\ncoinfeftment\ncoinfer\ncoinfinite\ncoinfinity\ncoinhabit\ncoinhabitant\ncoinhabitor\ncoinhere\ncoinherence\ncoinherent\ncoinheritance\ncoinheritor\ncoining\ncoinitial\ncoinmaker\ncoinmaking\ncoinmate\ncoinspire\ncoinstantaneity\ncoinstantaneous\ncoinstantaneously\ncoinstantaneousness\ncoinsurance\ncoinsure\ncointense\ncointension\ncointensity\ncointer\ncointerest\ncointersecting\ncointise\nCointreau\ncoinventor\ncoinvolve\ncoiny\ncoir\ncoislander\ncoistrel\ncoistril\ncoital\ncoition\ncoiture\ncoitus\nCoix\ncojudge\ncojuror\ncojusticiar\ncoke\ncokelike\ncokeman\ncoker\ncokernut\ncokery\ncoking\ncoky\ncol\nCola\ncola\ncolaborer\nColada\ncolalgia\nColan\ncolander\ncolane\ncolarin\ncolate\ncolation\ncolatitude\ncolatorium\ncolature\ncolauxe\ncolback\ncolberter\ncolbertine\nColbertism\ncolcannon\nColchian\nColchicaceae\ncolchicine\nColchicum\nColchis\ncolchyte\nColcine\ncolcothar\ncold\ncolder\ncoldfinch\ncoldhearted\ncoldheartedly\ncoldheartedness\ncoldish\ncoldly\ncoldness\ncoldproof\ncoldslaw\nCole\ncole\ncoleader\ncolecannon\ncolectomy\nColeen\ncolegatee\ncolegislator\ncolemanite\ncolemouse\nColeochaetaceae\ncoleochaetaceous\nColeochaete\nColeophora\nColeophoridae\ncoleopter\nColeoptera\ncoleopteral\ncoleopteran\ncoleopterist\ncoleopteroid\ncoleopterological\ncoleopterology\ncoleopteron\ncoleopterous\ncoleoptile\ncoleoptilum\ncoleorhiza\nColeosporiaceae\nColeosporium\ncoleplant\ncoleseed\ncoleslaw\ncolessee\ncolessor\ncoletit\ncoleur\nColeus\ncolewort\ncoli\nColias\ncolibacillosis\ncolibacterin\ncolibri\ncolic\ncolical\ncolichemarde\ncolicky\ncolicolitis\ncolicroot\ncolicweed\ncolicwort\ncolicystitis\ncolicystopyelitis\ncoliform\nColiidae\nColiiformes\ncolilysin\nColima\ncolima\nColin\ncolin\ncolinear\ncolinephritis\ncoling\nColinus\ncoliplication\ncolipuncture\ncolipyelitis\ncolipyuria\ncolisepsis\nColiseum\ncoliseum\ncolitic\ncolitis\ncolitoxemia\ncoliuria\nColius\ncolk\ncoll\nColla\ncollaborate\ncollaboration\ncollaborationism\ncollaborationist\ncollaborative\ncollaboratively\ncollaborator\ncollage\ncollagen\ncollagenic\ncollagenous\ncollapse\ncollapsibility\ncollapsible\ncollar\ncollarband\ncollarbird\ncollarbone\ncollard\ncollare\ncollared\ncollaret\ncollarino\ncollarless\ncollarman\ncollatable\ncollate\ncollatee\ncollateral\ncollaterality\ncollaterally\ncollateralness\ncollation\ncollationer\ncollatitious\ncollative\ncollator\ncollatress\ncollaud\ncollaudation\ncolleague\ncolleagueship\ncollect\ncollectability\ncollectable\ncollectanea\ncollectarium\ncollected\ncollectedly\ncollectedness\ncollectibility\ncollectible\ncollection\ncollectional\ncollectioner\ncollective\ncollectively\ncollectiveness\ncollectivism\ncollectivist\ncollectivistic\ncollectivistically\ncollectivity\ncollectivization\ncollectivize\ncollector\ncollectorate\ncollectorship\ncollectress\ncolleen\ncollegatary\ncollege\ncolleger\ncollegial\ncollegialism\ncollegiality\ncollegian\ncollegianer\nCollegiant\ncollegiate\ncollegiately\ncollegiateness\ncollegiation\ncollegium\nCollembola\ncollembolan\ncollembole\ncollembolic\ncollembolous\ncollenchyma\ncollenchymatic\ncollenchymatous\ncollenchyme\ncollencytal\ncollencyte\nColleri\nColleries\nCollery\ncollery\ncollet\ncolleter\ncolleterial\ncolleterium\nColletes\nColletia\ncolletic\nColletidae\ncolletin\nColletotrichum\ncolletside\ncolley\ncollibert\ncolliculate\ncolliculus\ncollide\ncollidine\ncollie\ncollied\ncollier\ncolliery\ncollieshangie\ncolliform\ncolligate\ncolligation\ncolligative\ncolligible\ncollimate\ncollimation\ncollimator\nCollin\ncollin\ncollinal\ncolline\ncollinear\ncollinearity\ncollinearly\ncollineate\ncollineation\ncolling\ncollingly\ncollingual\nCollins\ncollins\nCollinsia\ncollinsite\nCollinsonia\ncolliquate\ncolliquation\ncolliquative\ncolliquativeness\ncollision\ncollisional\ncollisive\ncolloblast\ncollobrierite\ncollocal\nCollocalia\ncollocate\ncollocation\ncollocationable\ncollocative\ncollocatory\ncollochemistry\ncollochromate\ncollock\ncollocution\ncollocutor\ncollocutory\ncollodiochloride\ncollodion\ncollodionization\ncollodionize\ncollodiotype\ncollodium\ncollogue\ncolloid\ncolloidal\ncolloidality\ncolloidize\ncolloidochemical\nCollomia\ncollop\ncolloped\ncollophanite\ncollophore\ncolloque\ncolloquia\ncolloquial\ncolloquialism\ncolloquialist\ncolloquiality\ncolloquialize\ncolloquially\ncolloquialness\ncolloquist\ncolloquium\ncolloquize\ncolloquy\ncollothun\ncollotype\ncollotypic\ncollotypy\ncolloxylin\ncolluctation\ncollude\ncolluder\ncollum\ncollumelliaceous\ncollusion\ncollusive\ncollusively\ncollusiveness\ncollutorium\ncollutory\ncolluvial\ncolluvies\ncolly\ncollyba\nCollybia\nCollyridian\ncollyrite\ncollyrium\ncollywest\ncollyweston\ncollywobbles\ncolmar\ncolobin\ncolobium\ncoloboma\nColobus\nColocasia\ncolocentesis\nColocephali\ncolocephalous\ncoloclysis\ncolocola\ncolocolic\ncolocynth\ncolocynthin\ncolodyspepsia\ncoloenteritis\ncologarithm\nCologne\ncololite\nColombian\ncolombier\ncolombin\nColombina\ncolometric\ncolometrically\ncolometry\ncolon\ncolonalgia\ncolonate\ncolonel\ncolonelcy\ncolonelship\ncolongitude\ncolonial\ncolonialism\ncolonialist\ncolonialize\ncolonially\ncolonialness\ncolonic\ncolonist\ncolonitis\ncolonizability\ncolonizable\ncolonization\ncolonizationist\ncolonize\ncolonizer\ncolonnade\ncolonnaded\ncolonnette\ncolonopathy\ncolonopexy\ncolonoscope\ncolonoscopy\ncolony\ncolopexia\ncolopexotomy\ncolopexy\ncolophane\ncolophany\ncolophene\ncolophenic\ncolophon\ncolophonate\nColophonian\ncolophonic\ncolophonist\ncolophonite\ncolophonium\ncolophony\ncoloplication\ncoloproctitis\ncoloptosis\ncolopuncture\ncoloquintid\ncoloquintida\ncolor\ncolorability\ncolorable\ncolorableness\ncolorably\nColoradan\nColorado\ncolorado\ncoloradoite\ncolorant\ncolorate\ncoloration\ncolorational\ncolorationally\ncolorative\ncoloratura\ncolorature\ncolorcast\ncolorectitis\ncolorectostomy\ncolored\ncolorer\ncolorfast\ncolorful\ncolorfully\ncolorfulness\ncolorific\ncolorifics\ncolorimeter\ncolorimetric\ncolorimetrical\ncolorimetrically\ncolorimetrics\ncolorimetrist\ncolorimetry\ncolorin\ncoloring\ncolorist\ncoloristic\ncolorization\ncolorize\ncolorless\ncolorlessly\ncolorlessness\ncolormaker\ncolormaking\ncolorman\ncolorrhaphy\ncolors\ncolortype\nColorum\ncolory\ncoloss\ncolossal\ncolossality\ncolossally\ncolossean\nColosseum\ncolossi\nColossian\nColossochelys\ncolossus\nColossuswise\ncolostomy\ncolostral\ncolostration\ncolostric\ncolostrous\ncolostrum\ncolotomy\ncolotyphoid\ncolove\ncolp\ncolpenchyma\ncolpeo\ncolpeurynter\ncolpeurysis\ncolpindach\ncolpitis\ncolpocele\ncolpocystocele\ncolpohyperplasia\ncolpohysterotomy\ncolpoperineoplasty\ncolpoperineorrhaphy\ncolpoplastic\ncolpoplasty\ncolpoptosis\ncolporrhagia\ncolporrhaphy\ncolporrhea\ncolporrhexis\ncolport\ncolportage\ncolporter\ncolporteur\ncolposcope\ncolposcopy\ncolpotomy\ncolpus\nColt\ncolt\ncolter\ncolthood\ncoltish\ncoltishly\ncoltishness\ncoltpixie\ncoltpixy\ncoltsfoot\ncoltskin\nColuber\ncolubrid\nColubridae\ncolubriform\nColubriformes\nColubriformia\nColubrina\nColubrinae\ncolubrine\ncolubroid\ncolugo\nColumba\ncolumbaceous\nColumbae\nColumban\nColumbanian\ncolumbarium\ncolumbary\ncolumbate\ncolumbeion\nColumbella\nColumbia\ncolumbiad\nColumbian\ncolumbic\nColumbid\nColumbidae\ncolumbier\ncolumbiferous\nColumbiformes\ncolumbin\nColumbine\ncolumbine\ncolumbite\ncolumbium\ncolumbo\ncolumboid\ncolumbotantalate\ncolumbotitanate\ncolumella\ncolumellar\ncolumellate\nColumellia\nColumelliaceae\ncolumelliform\ncolumn\ncolumnal\ncolumnar\ncolumnarian\ncolumnarity\ncolumnated\ncolumned\ncolumner\ncolumniation\ncolumniferous\ncolumniform\ncolumning\ncolumnist\ncolumnization\ncolumnwise\ncolunar\ncolure\nColutea\nColville\ncoly\nColymbidae\ncolymbiform\ncolymbion\nColymbriformes\nColymbus\ncolyone\ncolyonic\ncolytic\ncolyum\ncolyumist\ncolza\ncoma\ncomacine\ncomagistracy\ncomagmatic\ncomaker\ncomal\ncomamie\nComan\nComanche\nComanchean\nComandra\ncomanic\ncomart\nComarum\ncomate\ncomatose\ncomatosely\ncomatoseness\ncomatosity\ncomatous\ncomatula\ncomatulid\ncomb\ncombaron\ncombat\ncombatable\ncombatant\ncombater\ncombative\ncombatively\ncombativeness\ncombativity\ncombed\ncomber\ncombfish\ncombflower\ncombinable\ncombinableness\ncombinant\ncombinantive\ncombinate\ncombination\ncombinational\ncombinative\ncombinator\ncombinatorial\ncombinatory\ncombine\ncombined\ncombinedly\ncombinedness\ncombinement\ncombiner\ncombing\ncombining\ncomble\ncombless\ncomblessness\ncombmaker\ncombmaking\ncomboloio\ncomboy\nCombretaceae\ncombretaceous\nCombretum\ncombure\ncomburendo\ncomburent\ncomburgess\ncomburimeter\ncomburimetry\ncomburivorous\ncombust\ncombustibility\ncombustible\ncombustibleness\ncombustibly\ncombustion\ncombustive\ncombustor\ncombwise\ncombwright\ncomby\ncome\ncomeback\nComecrudo\ncomedial\ncomedian\ncomediant\ncomedic\ncomedical\ncomedienne\ncomedietta\ncomedist\ncomedo\ncomedown\ncomedy\ncomelily\ncomeliness\ncomeling\ncomely\ncomendite\ncomenic\ncomephorous\ncomer\ncomes\ncomestible\ncomet\ncometarium\ncometary\ncomether\ncometic\ncometical\ncometlike\ncometographer\ncometographical\ncometography\ncometoid\ncometology\ncometwise\ncomeuppance\ncomfit\ncomfiture\ncomfort\ncomfortable\ncomfortableness\ncomfortably\ncomforter\ncomfortful\ncomforting\ncomfortingly\ncomfortless\ncomfortlessly\ncomfortlessness\ncomfortress\ncomfortroot\ncomfrey\ncomfy\nComiakin\ncomic\ncomical\ncomicality\ncomically\ncomicalness\ncomicocratic\ncomicocynical\ncomicodidactic\ncomicography\ncomicoprosaic\ncomicotragedy\ncomicotragic\ncomicotragical\ncomicry\nComid\ncomiferous\nCominform\ncoming\ncomingle\ncomino\nComintern\ncomism\ncomital\ncomitant\ncomitatensian\ncomitative\ncomitatus\ncomitia\ncomitial\nComitium\ncomitragedy\ncomity\ncomma\ncommand\ncommandable\ncommandant\ncommandedness\ncommandeer\ncommander\ncommandership\ncommandery\ncommanding\ncommandingly\ncommandingness\ncommandless\ncommandment\ncommando\ncommandoman\ncommandress\ncommassation\ncommassee\ncommatic\ncommation\ncommatism\ncommeasurable\ncommeasure\ncommeddle\nCommelina\nCommelinaceae\ncommelinaceous\ncommemorable\ncommemorate\ncommemoration\ncommemorational\ncommemorative\ncommemoratively\ncommemorativeness\ncommemorator\ncommemoratory\ncommemorize\ncommence\ncommenceable\ncommencement\ncommencer\ncommend\ncommendable\ncommendableness\ncommendably\ncommendador\ncommendam\ncommendatary\ncommendation\ncommendator\ncommendatory\ncommender\ncommendingly\ncommendment\ncommensal\ncommensalism\ncommensalist\ncommensalistic\ncommensality\ncommensally\ncommensurability\ncommensurable\ncommensurableness\ncommensurably\ncommensurate\ncommensurately\ncommensurateness\ncommensuration\ncomment\ncommentarial\ncommentarialism\ncommentary\ncommentate\ncommentation\ncommentator\ncommentatorial\ncommentatorially\ncommentatorship\ncommenter\ncommerce\ncommerceless\ncommercer\ncommerciable\ncommercial\ncommercialism\ncommercialist\ncommercialistic\ncommerciality\ncommercialization\ncommercialize\ncommercially\ncommercium\ncommerge\ncommie\ncomminate\ncommination\ncomminative\ncomminator\ncomminatory\ncommingle\ncomminglement\ncommingler\ncomminister\ncomminuate\ncomminute\ncomminution\ncomminutor\nCommiphora\ncommiserable\ncommiserate\ncommiseratingly\ncommiseration\ncommiserative\ncommiseratively\ncommiserator\ncommissar\ncommissarial\ncommissariat\ncommissary\ncommissaryship\ncommission\ncommissionaire\ncommissional\ncommissionate\ncommissioner\ncommissionership\ncommissionship\ncommissive\ncommissively\ncommissural\ncommissure\ncommissurotomy\ncommit\ncommitment\ncommittable\ncommittal\ncommittee\ncommitteeism\ncommitteeman\ncommitteeship\ncommitteewoman\ncommittent\ncommitter\ncommittible\ncommittor\ncommix\ncommixt\ncommixtion\ncommixture\ncommodatary\ncommodate\ncommodation\ncommodatum\ncommode\ncommodious\ncommodiously\ncommodiousness\ncommoditable\ncommodity\ncommodore\ncommon\ncommonable\ncommonage\ncommonality\ncommonalty\ncommoner\ncommonership\ncommoney\ncommonish\ncommonition\ncommonize\ncommonly\ncommonness\ncommonplace\ncommonplaceism\ncommonplacely\ncommonplaceness\ncommonplacer\ncommons\ncommonsensible\ncommonsensibly\ncommonsensical\ncommonsensically\ncommonty\ncommonweal\ncommonwealth\ncommonwealthism\ncommorancy\ncommorant\ncommorient\ncommorth\ncommot\ncommotion\ncommotional\ncommotive\ncommove\ncommuna\ncommunal\ncommunalism\ncommunalist\ncommunalistic\ncommunality\ncommunalization\ncommunalize\ncommunalizer\ncommunally\ncommunard\ncommune\ncommuner\ncommunicability\ncommunicable\ncommunicableness\ncommunicably\ncommunicant\ncommunicate\ncommunicatee\ncommunicating\ncommunication\ncommunicative\ncommunicatively\ncommunicativeness\ncommunicator\ncommunicatory\ncommunion\ncommunionist\ncommunique\ncommunism\ncommunist\ncommunistery\ncommunistic\ncommunistically\ncommunital\ncommunitarian\ncommunitary\ncommunitive\ncommunitorium\ncommunity\ncommunization\ncommunize\ncommutability\ncommutable\ncommutableness\ncommutant\ncommutate\ncommutation\ncommutative\ncommutatively\ncommutator\ncommute\ncommuter\ncommuting\ncommutual\ncommutuality\nComnenian\ncomoid\ncomolecule\ncomortgagee\ncomose\ncomourn\ncomourner\ncomournful\ncomous\nComox\ncompact\ncompacted\ncompactedly\ncompactedness\ncompacter\ncompactible\ncompaction\ncompactly\ncompactness\ncompactor\ncompacture\ncompages\ncompaginate\ncompagination\ncompanator\ncompanion\ncompanionability\ncompanionable\ncompanionableness\ncompanionably\ncompanionage\ncompanionate\ncompanionize\ncompanionless\ncompanionship\ncompanionway\ncompany\ncomparability\ncomparable\ncomparableness\ncomparably\ncomparascope\ncomparate\ncomparatival\ncomparative\ncomparatively\ncomparativeness\ncomparativist\ncomparator\ncompare\ncomparer\ncomparison\ncomparition\ncomparograph\ncompart\ncompartition\ncompartment\ncompartmental\ncompartmentalization\ncompartmentalize\ncompartmentally\ncompartmentize\ncompass\ncompassable\ncompasser\ncompasses\ncompassing\ncompassion\ncompassionable\ncompassionate\ncompassionately\ncompassionateness\ncompassionless\ncompassive\ncompassivity\ncompassless\ncompaternity\ncompatibility\ncompatible\ncompatibleness\ncompatibly\ncompatriot\ncompatriotic\ncompatriotism\ncompear\ncompearance\ncompearant\ncompeer\ncompel\ncompellable\ncompellably\ncompellation\ncompellative\ncompellent\ncompeller\ncompelling\ncompellingly\ncompend\ncompendency\ncompendent\ncompendia\ncompendiary\ncompendiate\ncompendious\ncompendiously\ncompendiousness\ncompendium\ncompenetrate\ncompenetration\ncompensable\ncompensate\ncompensating\ncompensatingly\ncompensation\ncompensational\ncompensative\ncompensativeness\ncompensator\ncompensatory\ncompense\ncompenser\ncompesce\ncompete\ncompetence\ncompetency\ncompetent\ncompetently\ncompetentness\ncompetition\ncompetitioner\ncompetitive\ncompetitively\ncompetitiveness\ncompetitor\ncompetitorship\ncompetitory\ncompetitress\ncompetitrix\ncompilation\ncompilator\ncompilatory\ncompile\ncompilement\ncompiler\ncompital\nCompitalia\ncompitum\ncomplacence\ncomplacency\ncomplacent\ncomplacential\ncomplacentially\ncomplacently\ncomplain\ncomplainable\ncomplainant\ncomplainer\ncomplainingly\ncomplainingness\ncomplaint\ncomplaintive\ncomplaintiveness\ncomplaisance\ncomplaisant\ncomplaisantly\ncomplaisantness\ncomplanar\ncomplanate\ncomplanation\ncomplect\ncomplected\ncomplement\ncomplemental\ncomplementally\ncomplementalness\ncomplementariness\ncomplementarism\ncomplementary\ncomplementation\ncomplementative\ncomplementer\ncomplementoid\ncomplete\ncompletedness\ncompletely\ncompletement\ncompleteness\ncompleter\ncompletion\ncompletive\ncompletively\ncompletory\ncomplex\ncomplexedness\ncomplexification\ncomplexify\ncomplexion\ncomplexionably\ncomplexional\ncomplexionally\ncomplexioned\ncomplexionist\ncomplexionless\ncomplexity\ncomplexively\ncomplexly\ncomplexness\ncomplexus\ncompliable\ncompliableness\ncompliably\ncompliance\ncompliancy\ncompliant\ncompliantly\ncomplicacy\ncomplicant\ncomplicate\ncomplicated\ncomplicatedly\ncomplicatedness\ncomplication\ncomplicative\ncomplice\ncomplicitous\ncomplicity\ncomplier\ncompliment\ncomplimentable\ncomplimental\ncomplimentally\ncomplimentalness\ncomplimentarily\ncomplimentariness\ncomplimentary\ncomplimentation\ncomplimentative\ncomplimenter\ncomplimentingly\ncomplin\ncomplot\ncomplotter\nComplutensian\ncompluvium\ncomply\ncompo\ncompoer\ncompole\ncompone\ncomponed\ncomponency\ncomponendo\ncomponent\ncomponental\ncomponented\ncompony\ncomport\ncomportment\ncompos\ncompose\ncomposed\ncomposedly\ncomposedness\ncomposer\ncomposita\nCompositae\ncomposite\ncompositely\ncompositeness\ncomposition\ncompositional\ncompositionally\ncompositive\ncompositively\ncompositor\ncompositorial\ncompositous\ncomposograph\ncompossibility\ncompossible\ncompost\ncomposture\ncomposure\ncompotation\ncompotationship\ncompotator\ncompotatory\ncompote\ncompotor\ncompound\ncompoundable\ncompoundedness\ncompounder\ncompounding\ncompoundness\ncomprachico\ncomprador\ncomprecation\ncompreg\ncompregnate\ncomprehend\ncomprehender\ncomprehendible\ncomprehendingly\ncomprehense\ncomprehensibility\ncomprehensible\ncomprehensibleness\ncomprehensibly\ncomprehension\ncomprehensive\ncomprehensively\ncomprehensiveness\ncomprehensor\ncompresbyter\ncompresbyterial\ncompresence\ncompresent\ncompress\ncompressed\ncompressedly\ncompressibility\ncompressible\ncompressibleness\ncompressingly\ncompression\ncompressional\ncompressive\ncompressively\ncompressometer\ncompressor\ncompressure\ncomprest\ncompriest\ncomprisable\ncomprisal\ncomprise\ncomprised\ncompromise\ncompromiser\ncompromising\ncompromisingly\ncompromissary\ncompromission\ncompromissorial\ncompromit\ncompromitment\ncomprovincial\nCompsilura\nCompsoa\nCompsognathus\nCompsothlypidae\ncompter\nComptometer\nComptonia\ncomptroller\ncomptrollership\ncompulsative\ncompulsatively\ncompulsatorily\ncompulsatory\ncompulsed\ncompulsion\ncompulsitor\ncompulsive\ncompulsively\ncompulsiveness\ncompulsorily\ncompulsoriness\ncompulsory\ncompunction\ncompunctionary\ncompunctionless\ncompunctious\ncompunctiously\ncompunctive\ncompurgation\ncompurgator\ncompurgatorial\ncompurgatory\ncompursion\ncomputability\ncomputable\ncomputably\ncomputation\ncomputational\ncomputative\ncomputativeness\ncompute\ncomputer\ncomputist\ncomputus\ncomrade\ncomradely\ncomradery\ncomradeship\nComsomol\ncomstockery\nComtian\nComtism\nComtist\ncomurmurer\nComus\ncon\nconacaste\nconacre\nconal\nconalbumin\nconamed\nConant\nconarial\nconarium\nconation\nconational\nconationalistic\nconative\nconatus\nconaxial\nconcamerate\nconcamerated\nconcameration\nconcanavalin\nconcaptive\nconcassation\nconcatenary\nconcatenate\nconcatenation\nconcatenator\nconcausal\nconcause\nconcavation\nconcave\nconcavely\nconcaveness\nconcaver\nconcavity\nconceal\nconcealable\nconcealed\nconcealedly\nconcealedness\nconcealer\nconcealment\nconcede\nconceded\nconcededly\nconceder\nconceit\nconceited\nconceitedly\nconceitedness\nconceitless\nconceity\nconceivability\nconceivable\nconceivableness\nconceivably\nconceive\nconceiver\nconcelebrate\nconcelebration\nconcent\nconcenter\nconcentive\nconcentralization\nconcentrate\nconcentrated\nconcentration\nconcentrative\nconcentrativeness\nconcentrator\nconcentric\nconcentrically\nconcentricity\nconcentual\nconcentus\nconcept\nconceptacle\nconceptacular\nconceptaculum\nconception\nconceptional\nconceptionist\nconceptism\nconceptive\nconceptiveness\nconceptual\nconceptualism\nconceptualist\nconceptualistic\nconceptuality\nconceptualization\nconceptualize\nconceptually\nconceptus\nconcern\nconcerned\nconcernedly\nconcernedness\nconcerning\nconcerningly\nconcerningness\nconcernment\nconcert\nconcerted\nconcertedly\nconcertgoer\nconcertina\nconcertinist\nconcertist\nconcertize\nconcertizer\nconcertmaster\nconcertmeister\nconcertment\nconcerto\nconcertstuck\nconcessible\nconcession\nconcessionaire\nconcessional\nconcessionary\nconcessioner\nconcessionist\nconcessive\nconcessively\nconcessiveness\nconcessor\nconcettism\nconcettist\nconch\nconcha\nconchal\nconchate\nconche\nconched\nconcher\nConchifera\nconchiferous\nconchiform\nconchinine\nconchiolin\nconchitic\nconchitis\nConchobor\nconchoid\nconchoidal\nconchoidally\nconchological\nconchologically\nconchologist\nconchologize\nconchology\nconchometer\nconchometry\nConchostraca\nconchotome\nConchubar\nConchucu\nconchuela\nconchy\nconchyliated\nconchyliferous\nconchylium\nconcierge\nconcile\nconciliable\nconciliabule\nconciliabulum\nconciliar\nconciliate\nconciliating\nconciliatingly\nconciliation\nconciliationist\nconciliative\nconciliator\nconciliatorily\nconciliatoriness\nconciliatory\nconcilium\nconcinnity\nconcinnous\nconcionator\nconcipiency\nconcipient\nconcise\nconcisely\nconciseness\nconcision\nconclamant\nconclamation\nconclave\nconclavist\nconcludable\nconclude\nconcluder\nconcluding\nconcludingly\nconclusion\nconclusional\nconclusionally\nconclusive\nconclusively\nconclusiveness\nconclusory\nconcoagulate\nconcoagulation\nconcoct\nconcocter\nconcoction\nconcoctive\nconcoctor\nconcolor\nconcolorous\nconcomitance\nconcomitancy\nconcomitant\nconcomitantly\nconconscious\nConcord\nconcord\nconcordal\nconcordance\nconcordancer\nconcordant\nconcordantial\nconcordantly\nconcordat\nconcordatory\nconcorder\nconcordial\nconcordist\nconcordity\nconcorporate\nConcorrezanes\nconcourse\nconcreate\nconcremation\nconcrement\nconcresce\nconcrescence\nconcrescible\nconcrescive\nconcrete\nconcretely\nconcreteness\nconcreter\nconcretion\nconcretional\nconcretionary\nconcretism\nconcretive\nconcretively\nconcretize\nconcretor\nconcubinage\nconcubinal\nconcubinarian\nconcubinary\nconcubinate\nconcubine\nconcubinehood\nconcubitancy\nconcubitant\nconcubitous\nconcubitus\nconcupiscence\nconcupiscent\nconcupiscible\nconcupiscibleness\nconcupy\nconcur\nconcurrence\nconcurrency\nconcurrent\nconcurrently\nconcurrentness\nconcurring\nconcurringly\nconcursion\nconcurso\nconcursus\nconcuss\nconcussant\nconcussion\nconcussional\nconcussive\nconcutient\nconcyclic\nconcyclically\ncond\nCondalia\ncondemn\ncondemnable\ncondemnably\ncondemnate\ncondemnation\ncondemnatory\ncondemned\ncondemner\ncondemning\ncondemningly\ncondensability\ncondensable\ncondensance\ncondensary\ncondensate\ncondensation\ncondensational\ncondensative\ncondensator\ncondense\ncondensed\ncondensedly\ncondensedness\ncondenser\ncondensery\ncondensity\ncondescend\ncondescendence\ncondescendent\ncondescender\ncondescending\ncondescendingly\ncondescendingness\ncondescension\ncondescensive\ncondescensively\ncondescensiveness\ncondiction\ncondictious\ncondiddle\ncondiddlement\ncondign\ncondigness\ncondignity\ncondignly\ncondiment\ncondimental\ncondimentary\ncondisciple\ncondistillation\ncondite\ncondition\nconditional\nconditionalism\nconditionalist\nconditionality\nconditionalize\nconditionally\nconditionate\nconditioned\nconditioner\ncondivision\ncondolatory\ncondole\ncondolement\ncondolence\ncondolent\ncondoler\ncondoling\ncondolingly\ncondominate\ncondominium\ncondonable\ncondonance\ncondonation\ncondonative\ncondone\ncondonement\ncondoner\ncondor\nconduce\nconducer\nconducing\nconducingly\nconducive\nconduciveness\nconduct\nconductance\nconductibility\nconductible\nconductility\nconductimeter\nconductio\nconduction\nconductional\nconductitious\nconductive\nconductively\nconductivity\nconductometer\nconductometric\nconductor\nconductorial\nconductorless\nconductorship\nconductory\nconductress\nconductus\nconduit\nconduplicate\nconduplicated\nconduplication\ncondurangin\ncondurango\ncondylar\ncondylarth\nCondylarthra\ncondylarthrosis\ncondylarthrous\ncondyle\ncondylectomy\ncondylion\ncondyloid\ncondyloma\ncondylomatous\ncondylome\ncondylopod\nCondylopoda\ncondylopodous\ncondylos\ncondylotomy\nCondylura\ncondylure\ncone\nconed\nconeen\nconeflower\nconehead\nconeighboring\nconeine\nconelet\nconemaker\nconemaking\nConemaugh\nconenose\nconepate\nconer\ncones\nconessine\nConestoga\nconfab\nconfabular\nconfabulate\nconfabulation\nconfabulator\nconfabulatory\nconfact\nconfarreate\nconfarreation\nconfated\nconfect\nconfection\nconfectionary\nconfectioner\nconfectionery\nConfed\nconfederacy\nconfederal\nconfederalist\nconfederate\nconfederater\nconfederatio\nconfederation\nconfederationist\nconfederatism\nconfederative\nconfederatize\nconfederator\nconfelicity\nconferee\nconference\nconferential\nconferment\nconferrable\nconferral\nconferrer\nconferruminate\nconferted\nConferva\nConfervaceae\nconfervaceous\nconferval\nConfervales\nconfervoid\nConfervoideae\nconfervous\nconfess\nconfessable\nconfessant\nconfessarius\nconfessary\nconfessedly\nconfesser\nconfessing\nconfessingly\nconfession\nconfessional\nconfessionalian\nconfessionalism\nconfessionalist\nconfessionary\nconfessionist\nconfessor\nconfessorship\nconfessory\nconfidant\nconfide\nconfidence\nconfidency\nconfident\nconfidential\nconfidentiality\nconfidentially\nconfidentialness\nconfidentiary\nconfidently\nconfidentness\nconfider\nconfiding\nconfidingly\nconfidingness\nconfigural\nconfigurate\nconfiguration\nconfigurational\nconfigurationally\nconfigurationism\nconfigurationist\nconfigurative\nconfigure\nconfinable\nconfine\nconfineable\nconfined\nconfinedly\nconfinedness\nconfineless\nconfinement\nconfiner\nconfining\nconfinity\nconfirm\nconfirmable\nconfirmand\nconfirmation\nconfirmative\nconfirmatively\nconfirmatorily\nconfirmatory\nconfirmed\nconfirmedly\nconfirmedness\nconfirmee\nconfirmer\nconfirming\nconfirmingly\nconfirmity\nconfirmment\nconfirmor\nconfiscable\nconfiscatable\nconfiscate\nconfiscation\nconfiscator\nconfiscatory\nconfitent\nconfiteor\nconfiture\nconfix\nconflagrant\nconflagrate\nconflagration\nconflagrative\nconflagrator\nconflagratory\nconflate\nconflated\nconflation\nconflict\nconflicting\nconflictingly\nconfliction\nconflictive\nconflictory\nconflow\nconfluence\nconfluent\nconfluently\nconflux\nconfluxibility\nconfluxible\nconfluxibleness\nconfocal\nconform\nconformability\nconformable\nconformableness\nconformably\nconformal\nconformance\nconformant\nconformate\nconformation\nconformator\nconformer\nconformist\nconformity\nconfound\nconfoundable\nconfounded\nconfoundedly\nconfoundedness\nconfounder\nconfounding\nconfoundingly\nconfrater\nconfraternal\nconfraternity\nconfraternization\nconfrere\nconfriar\nconfrication\nconfront\nconfrontal\nconfrontation\nconfronte\nconfronter\nconfrontment\nConfucian\nConfucianism\nConfucianist\nconfusability\nconfusable\nconfusably\nconfuse\nconfused\nconfusedly\nconfusedness\nconfusingly\nconfusion\nconfusional\nconfusticate\nconfustication\nconfutable\nconfutation\nconfutative\nconfutator\nconfute\nconfuter\nconga\ncongeable\ncongeal\ncongealability\ncongealable\ncongealableness\ncongealedness\ncongealer\ncongealment\ncongee\ncongelation\ncongelative\ncongelifraction\ncongeliturbate\ncongeliturbation\ncongener\ncongeneracy\ncongeneric\ncongenerical\ncongenerous\ncongenerousness\ncongenetic\ncongenial\ncongeniality\ncongenialize\ncongenially\ncongenialness\ncongenital\ncongenitally\ncongenitalness\nconger\ncongeree\ncongest\ncongested\ncongestible\ncongestion\ncongestive\ncongiary\ncongius\nconglobate\nconglobately\nconglobation\nconglobe\nconglobulate\nconglomerate\nconglomeratic\nconglomeration\nconglutin\nconglutinant\nconglutinate\nconglutination\nconglutinative\nCongo\nCongoese\nCongolese\nCongoleum\ncongou\ncongratulable\ncongratulant\ncongratulate\ncongratulation\ncongratulational\ncongratulator\ncongratulatory\ncongredient\ncongreet\ncongregable\ncongreganist\ncongregant\ncongregate\ncongregation\ncongregational\ncongregationalism\nCongregationalist\ncongregationalize\ncongregationally\nCongregationer\ncongregationist\ncongregative\ncongregativeness\ncongregator\nCongreso\ncongress\ncongresser\ncongressional\ncongressionalist\ncongressionally\ncongressionist\ncongressist\ncongressive\ncongressman\nCongresso\ncongresswoman\nCongreve\nCongridae\ncongroid\ncongruence\ncongruency\ncongruent\ncongruential\ncongruently\ncongruism\ncongruist\ncongruistic\ncongruity\ncongruous\ncongruously\ncongruousness\nconhydrine\nConiacian\nconic\nconical\nconicality\nconically\nconicalness\nconiceine\nconichalcite\nconicine\nconicity\nconicle\nconicoid\nconicopoly\nconics\nConidae\nconidia\nconidial\nconidian\nconidiiferous\nconidioid\nconidiophore\nconidiophorous\nconidiospore\nconidium\nconifer\nConiferae\nconiferin\nconiferophyte\nconiferous\nconification\nconiform\nConilurus\nconima\nconimene\nconin\nconine\nConiogramme\nConiophora\nConiopterygidae\nConioselinum\nconiosis\nConiothyrium\nconiroster\nconirostral\nConirostres\nConium\nconject\nconjective\nconjecturable\nconjecturably\nconjectural\nconjecturalist\nconjecturality\nconjecturally\nconjecture\nconjecturer\nconjobble\nconjoin\nconjoined\nconjoinedly\nconjoiner\nconjoint\nconjointly\nconjointment\nconjointness\nconjubilant\nconjugable\nconjugacy\nconjugal\nConjugales\nconjugality\nconjugally\nconjugant\nconjugata\nConjugatae\nconjugate\nconjugated\nconjugately\nconjugateness\nconjugation\nconjugational\nconjugationally\nconjugative\nconjugator\nconjugial\nconjugium\nconjunct\nconjunction\nconjunctional\nconjunctionally\nconjunctiva\nconjunctival\nconjunctive\nconjunctively\nconjunctiveness\nconjunctivitis\nconjunctly\nconjunctur\nconjunctural\nconjuncture\nconjuration\nconjurator\nconjure\nconjurement\nconjurer\nconjurership\nconjuror\nconjury\nconk\nconkanee\nconker\nconkers\nconky\nconn\nconnach\nConnaraceae\nconnaraceous\nconnarite\nConnarus\nconnascency\nconnascent\nconnatal\nconnate\nconnately\nconnateness\nconnation\nconnatural\nconnaturality\nconnaturalize\nconnaturally\nconnaturalness\nconnature\nconnaught\nconnect\nconnectable\nconnectant\nconnected\nconnectedly\nconnectedness\nconnectible\nconnection\nconnectional\nconnectival\nconnective\nconnectively\nconnectivity\nconnector\nconnellite\nconner\nconnex\nconnexion\nconnexionalism\nconnexity\nconnexive\nconnexivum\nconnexus\nConnie\nconning\nconniption\nconnivance\nconnivancy\nconnivant\nconnivantly\nconnive\nconnivent\nconniver\nConnochaetes\nconnoissance\nconnoisseur\nconnoisseurship\nconnotation\nconnotative\nconnotatively\nconnote\nconnotive\nconnotively\nconnubial\nconnubiality\nconnubially\nconnubiate\nconnubium\nconnumerate\nconnumeration\nConocarpus\nConocephalum\nConocephalus\nconoclinium\nconocuneus\nconodont\nconoid\nconoidal\nconoidally\nconoidic\nconoidical\nconoidically\nConolophus\nconominee\ncononintelligent\nConopholis\nconopid\nConopidae\nconoplain\nconopodium\nConopophaga\nConopophagidae\nConor\nConorhinus\nconormal\nconoscope\nconourish\nConoy\nconphaseolin\nconplane\nconquedle\nconquer\nconquerable\nconquerableness\nconqueress\nconquering\nconqueringly\nconquerment\nconqueror\nconquest\nconquian\nconquinamine\nconquinine\nconquistador\nConrad\nconrector\nconrectorship\nconred\nConringia\nconsanguine\nconsanguineal\nconsanguinean\nconsanguineous\nconsanguineously\nconsanguinity\nconscience\nconscienceless\nconsciencelessly\nconsciencelessness\nconsciencewise\nconscient\nconscientious\nconscientiously\nconscientiousness\nconscionable\nconscionableness\nconscionably\nconscious\nconsciously\nconsciousness\nconscribe\nconscript\nconscription\nconscriptional\nconscriptionist\nconscriptive\nconsecrate\nconsecrated\nconsecratedness\nconsecrater\nconsecration\nconsecrative\nconsecrator\nconsecratory\nconsectary\nconsecute\nconsecution\nconsecutive\nconsecutively\nconsecutiveness\nconsecutives\nconsenescence\nconsenescency\nconsension\nconsensual\nconsensually\nconsensus\nconsent\nconsentable\nconsentaneity\nconsentaneous\nconsentaneously\nconsentaneousness\nconsentant\nconsenter\nconsentful\nconsentfully\nconsentience\nconsentient\nconsentiently\nconsenting\nconsentingly\nconsentingness\nconsentive\nconsentively\nconsentment\nconsequence\nconsequency\nconsequent\nconsequential\nconsequentiality\nconsequentially\nconsequentialness\nconsequently\nconsertal\nconservable\nconservacy\nconservancy\nconservant\nconservate\nconservation\nconservational\nconservationist\nconservatism\nconservatist\nconservative\nconservatively\nconservativeness\nconservatize\nconservatoire\nconservator\nconservatorio\nconservatorium\nconservatorship\nconservatory\nconservatrix\nconserve\nconserver\nconsider\nconsiderability\nconsiderable\nconsiderableness\nconsiderably\nconsiderance\nconsiderate\nconsiderately\nconsiderateness\nconsideration\nconsiderative\nconsideratively\nconsiderativeness\nconsiderator\nconsidered\nconsiderer\nconsidering\nconsideringly\nconsign\nconsignable\nconsignatary\nconsignation\nconsignatory\nconsignee\nconsigneeship\nconsigner\nconsignificant\nconsignificate\nconsignification\nconsignificative\nconsignificator\nconsignify\nconsignment\nconsignor\nconsiliary\nconsilience\nconsilient\nconsimilar\nconsimilarity\nconsimilate\nconsist\nconsistence\nconsistency\nconsistent\nconsistently\nconsistorial\nconsistorian\nconsistory\nconsociate\nconsociation\nconsociational\nconsociationism\nconsociative\nconsocies\nconsol\nconsolable\nconsolableness\nconsolably\nConsolamentum\nconsolation\nConsolato\nconsolatorily\nconsolatoriness\nconsolatory\nconsolatrix\nconsole\nconsolement\nconsoler\nconsolidant\nconsolidate\nconsolidated\nconsolidation\nconsolidationist\nconsolidative\nconsolidator\nconsoling\nconsolingly\nconsolute\nconsomme\nconsonance\nconsonancy\nconsonant\nconsonantal\nconsonantic\nconsonantism\nconsonantize\nconsonantly\nconsonantness\nconsonate\nconsonous\nconsort\nconsortable\nconsorter\nconsortial\nconsortion\nconsortism\nconsortium\nconsortship\nconsound\nconspecies\nconspecific\nconspectus\nconsperse\nconspersion\nconspicuity\nconspicuous\nconspicuously\nconspicuousness\nconspiracy\nconspirant\nconspiration\nconspirative\nconspirator\nconspiratorial\nconspiratorially\nconspiratory\nconspiratress\nconspire\nconspirer\nconspiring\nconspiringly\nconspue\nconstable\nconstablery\nconstableship\nconstabless\nconstablewick\nconstabular\nconstabulary\nConstance\nconstancy\nconstant\nconstantan\nConstantine\nConstantinian\nConstantinopolitan\nconstantly\nconstantness\nconstat\nconstatation\nconstate\nconstatory\nconstellate\nconstellation\nconstellatory\nconsternate\nconsternation\nconstipate\nconstipation\nconstituency\nconstituent\nconstituently\nconstitute\nconstituter\nconstitution\nconstitutional\nconstitutionalism\nconstitutionalist\nconstitutionality\nconstitutionalization\nconstitutionalize\nconstitutionally\nconstitutionary\nconstitutioner\nconstitutionist\nconstitutive\nconstitutively\nconstitutiveness\nconstitutor\nconstrain\nconstrainable\nconstrained\nconstrainedly\nconstrainedness\nconstrainer\nconstraining\nconstrainingly\nconstrainment\nconstraint\nconstrict\nconstricted\nconstriction\nconstrictive\nconstrictor\nconstringe\nconstringency\nconstringent\nconstruability\nconstruable\nconstruct\nconstructer\nconstructible\nconstruction\nconstructional\nconstructionally\nconstructionism\nconstructionist\nconstructive\nconstructively\nconstructiveness\nconstructivism\nconstructivist\nconstructor\nconstructorship\nconstructure\nconstrue\nconstruer\nconstuprate\nconstupration\nconsubsist\nconsubsistency\nconsubstantial\nconsubstantialism\nconsubstantialist\nconsubstantiality\nconsubstantially\nconsubstantiate\nconsubstantiation\nconsubstantiationist\nconsubstantive\nconsuete\nconsuetitude\nconsuetude\nconsuetudinal\nconsuetudinary\nconsul\nconsulage\nconsular\nconsularity\nconsulary\nconsulate\nconsulship\nconsult\nconsultable\nconsultant\nconsultary\nconsultation\nconsultative\nconsultatory\nconsultee\nconsulter\nconsulting\nconsultive\nconsultively\nconsultor\nconsultory\nconsumable\nconsume\nconsumedly\nconsumeless\nconsumer\nconsuming\nconsumingly\nconsumingness\nconsummate\nconsummately\nconsummation\nconsummative\nconsummatively\nconsummativeness\nconsummator\nconsummatory\nconsumpt\nconsumpted\nconsumptible\nconsumption\nconsumptional\nconsumptive\nconsumptively\nconsumptiveness\nconsumptivity\nconsute\ncontabescence\ncontabescent\ncontact\ncontactor\ncontactual\ncontactually\ncontagion\ncontagioned\ncontagionist\ncontagiosity\ncontagious\ncontagiously\ncontagiousness\ncontagium\ncontain\ncontainable\ncontainer\ncontainment\ncontakion\ncontaminable\ncontaminant\ncontaminate\ncontamination\ncontaminative\ncontaminator\ncontaminous\ncontangential\ncontango\nconte\ncontect\ncontection\ncontemn\ncontemner\ncontemnible\ncontemnibly\ncontemning\ncontemningly\ncontemnor\ncontemper\ncontemperate\ncontemperature\ncontemplable\ncontemplamen\ncontemplant\ncontemplate\ncontemplatingly\ncontemplation\ncontemplatist\ncontemplative\ncontemplatively\ncontemplativeness\ncontemplator\ncontemplature\ncontemporanean\ncontemporaneity\ncontemporaneous\ncontemporaneously\ncontemporaneousness\ncontemporarily\ncontemporariness\ncontemporary\ncontemporize\ncontempt\ncontemptful\ncontemptibility\ncontemptible\ncontemptibleness\ncontemptibly\ncontemptuous\ncontemptuously\ncontemptuousness\ncontendent\ncontender\ncontending\ncontendingly\ncontendress\ncontent\ncontentable\ncontented\ncontentedly\ncontentedness\ncontentful\ncontention\ncontentional\ncontentious\ncontentiously\ncontentiousness\ncontentless\ncontently\ncontentment\ncontentness\ncontents\nconter\nconterminal\nconterminant\ncontermine\nconterminous\nconterminously\nconterminousness\ncontest\ncontestable\ncontestableness\ncontestably\ncontestant\ncontestation\ncontestee\ncontester\ncontestingly\ncontestless\ncontext\ncontextive\ncontextual\ncontextually\ncontextural\ncontexture\ncontextured\nconticent\ncontignation\ncontiguity\ncontiguous\ncontiguously\ncontiguousness\ncontinence\ncontinency\ncontinent\ncontinental\nContinentaler\ncontinentalism\ncontinentalist\ncontinentality\nContinentalize\ncontinentally\ncontinently\ncontingence\ncontingency\ncontingent\ncontingential\ncontingentialness\ncontingently\ncontingentness\ncontinuable\ncontinual\ncontinuality\ncontinually\ncontinualness\ncontinuance\ncontinuancy\ncontinuando\ncontinuant\ncontinuantly\ncontinuate\ncontinuately\ncontinuateness\ncontinuation\ncontinuative\ncontinuatively\ncontinuativeness\ncontinuator\ncontinue\ncontinued\ncontinuedly\ncontinuedness\ncontinuer\ncontinuingly\ncontinuist\ncontinuity\ncontinuous\ncontinuously\ncontinuousness\ncontinuum\ncontise\ncontline\nconto\ncontorniate\ncontorsive\ncontort\nContortae\ncontorted\ncontortedly\ncontortedness\ncontortion\ncontortional\ncontortionate\ncontortioned\ncontortionist\ncontortionistic\ncontortive\ncontour\ncontourne\ncontra\ncontraband\ncontrabandage\ncontrabandery\ncontrabandism\ncontrabandist\ncontrabandista\ncontrabass\ncontrabassist\ncontrabasso\ncontracapitalist\ncontraception\ncontraceptionist\ncontraceptive\ncontracivil\ncontraclockwise\ncontract\ncontractable\ncontractant\ncontractation\ncontracted\ncontractedly\ncontractedness\ncontractee\ncontracter\ncontractibility\ncontractible\ncontractibleness\ncontractibly\ncontractile\ncontractility\ncontraction\ncontractional\ncontractionist\ncontractive\ncontractively\ncontractiveness\ncontractor\ncontractual\ncontractually\ncontracture\ncontractured\ncontradebt\ncontradict\ncontradictable\ncontradictedness\ncontradicter\ncontradiction\ncontradictional\ncontradictious\ncontradictiously\ncontradictiousness\ncontradictive\ncontradictively\ncontradictiveness\ncontradictor\ncontradictorily\ncontradictoriness\ncontradictory\ncontradiscriminate\ncontradistinct\ncontradistinction\ncontradistinctive\ncontradistinctively\ncontradistinctly\ncontradistinguish\ncontradivide\ncontrafacture\ncontrafagotto\ncontrafissura\ncontraflexure\ncontraflow\ncontrafocal\ncontragredience\ncontragredient\ncontrahent\ncontrail\ncontraindicate\ncontraindication\ncontraindicative\ncontralateral\ncontralto\ncontramarque\ncontranatural\ncontrantiscion\ncontraoctave\ncontraparallelogram\ncontraplex\ncontrapolarization\ncontrapone\ncontraponend\nContraposaune\ncontrapose\ncontraposit\ncontraposita\ncontraposition\ncontrapositive\ncontraprogressist\ncontraprop\ncontraproposal\ncontraption\ncontraptious\ncontrapuntal\ncontrapuntalist\ncontrapuntally\ncontrapuntist\ncontrapunto\ncontrarational\ncontraregular\ncontraregularity\ncontraremonstrance\ncontraremonstrant\ncontrarevolutionary\ncontrariant\ncontrariantly\ncontrariety\ncontrarily\ncontrariness\ncontrarious\ncontrariously\ncontrariousness\ncontrariwise\ncontrarotation\ncontrary\ncontrascriptural\ncontrast\ncontrastable\ncontrastably\ncontrastedly\ncontrastimulant\ncontrastimulation\ncontrastimulus\ncontrastingly\ncontrastive\ncontrastively\ncontrastment\ncontrasty\ncontrasuggestible\ncontratabular\ncontrate\ncontratempo\ncontratenor\ncontravalence\ncontravallation\ncontravariant\ncontravene\ncontravener\ncontravention\ncontraversion\ncontravindicate\ncontravindication\ncontrawise\ncontrayerva\ncontrectation\ncontreface\ncontrefort\ncontretemps\ncontributable\ncontribute\ncontribution\ncontributional\ncontributive\ncontributively\ncontributiveness\ncontributor\ncontributorial\ncontributorship\ncontributory\ncontrite\ncontritely\ncontriteness\ncontrition\ncontriturate\ncontrivance\ncontrivancy\ncontrive\ncontrivement\ncontriver\ncontrol\ncontrollability\ncontrollable\ncontrollableness\ncontrollably\ncontroller\ncontrollership\ncontrolless\ncontrollingly\ncontrolment\ncontroversial\ncontroversialism\ncontroversialist\ncontroversialize\ncontroversially\ncontroversion\ncontroversional\ncontroversionalism\ncontroversionalist\ncontroversy\ncontrovert\ncontroverter\ncontrovertible\ncontrovertibly\ncontrovertist\ncontubernal\ncontubernial\ncontubernium\ncontumacious\ncontumaciously\ncontumaciousness\ncontumacity\ncontumacy\ncontumelious\ncontumeliously\ncontumeliousness\ncontumely\ncontund\nconturbation\ncontuse\ncontusion\ncontusioned\ncontusive\nconubium\nConularia\nconumerary\nconumerous\nconundrum\nconundrumize\nconurbation\nconure\nConuropsis\nConurus\nconus\nconusable\nconusance\nconusant\nconusee\nconusor\nconutrition\nconuzee\nconuzor\nconvalesce\nconvalescence\nconvalescency\nconvalescent\nconvalescently\nconvallamarin\nConvallaria\nConvallariaceae\nconvallariaceous\nconvallarin\nconvect\nconvection\nconvectional\nconvective\nconvectively\nconvector\nconvenable\nconvenably\nconvene\nconvenee\nconvener\nconvenership\nconvenience\nconveniency\nconvenient\nconveniently\nconvenientness\nconvent\nconventical\nconventically\nconventicle\nconventicler\nconventicular\nconvention\nconventional\nconventionalism\nconventionalist\nconventionality\nconventionalization\nconventionalize\nconventionally\nconventionary\nconventioner\nconventionism\nconventionist\nconventionize\nconventual\nconventually\nconverge\nconvergement\nconvergence\nconvergency\nconvergent\nconvergescence\nconverging\nconversable\nconversableness\nconversably\nconversance\nconversancy\nconversant\nconversantly\nconversation\nconversationable\nconversational\nconversationalist\nconversationally\nconversationism\nconversationist\nconversationize\nconversative\nconverse\nconversely\nconverser\nconversibility\nconversible\nconversion\nconversional\nconversionism\nconversionist\nconversive\nconvert\nconverted\nconvertend\nconverter\nconvertibility\nconvertible\nconvertibleness\nconvertibly\nconverting\nconvertingness\nconvertise\nconvertism\nconvertite\nconvertive\nconvertor\nconveth\nconvex\nconvexed\nconvexedly\nconvexedness\nconvexity\nconvexly\nconvexness\nconvey\nconveyable\nconveyal\nconveyance\nconveyancer\nconveyancing\nconveyer\nconvict\nconvictable\nconviction\nconvictional\nconvictism\nconvictive\nconvictively\nconvictiveness\nconvictment\nconvictor\nconvince\nconvinced\nconvincedly\nconvincedness\nconvincement\nconvincer\nconvincibility\nconvincible\nconvincing\nconvincingly\nconvincingness\nconvival\nconvive\nconvivial\nconvivialist\nconviviality\nconvivialize\nconvivially\nconvocant\nconvocate\nconvocation\nconvocational\nconvocationally\nconvocationist\nconvocative\nconvocator\nconvoke\nconvoker\nConvoluta\nconvolute\nconvoluted\nconvolutely\nconvolution\nconvolutional\nconvolutionary\nconvolutive\nconvolve\nconvolvement\nConvolvulaceae\nconvolvulaceous\nconvolvulad\nconvolvuli\nconvolvulic\nconvolvulin\nconvolvulinic\nconvolvulinolic\nConvolvulus\nconvoy\nconvulsant\nconvulse\nconvulsedly\nconvulsibility\nconvulsible\nconvulsion\nconvulsional\nconvulsionary\nconvulsionism\nconvulsionist\nconvulsive\nconvulsively\nconvulsiveness\ncony\nconycatcher\nconyrine\ncoo\ncooba\ncoodle\ncooee\ncooer\ncoof\nCoohee\ncooing\ncooingly\ncooja\ncook\ncookable\ncookbook\ncookdom\ncookee\ncookeite\ncooker\ncookery\ncookhouse\ncooking\ncookish\ncookishly\ncookless\ncookmaid\ncookout\ncookroom\ncookshack\ncookshop\ncookstove\ncooky\ncool\ncoolant\ncoolen\ncooler\ncoolerman\ncoolheaded\ncoolheadedly\ncoolheadedness\ncoolhouse\ncoolibah\ncoolie\ncooling\ncoolingly\ncoolingness\ncoolish\ncoolly\ncoolness\ncoolth\ncoolung\ncoolweed\ncoolwort\ncooly\ncoom\ncoomb\ncoomy\ncoon\ncooncan\ncoonily\ncooniness\ncoonroot\ncoonskin\ncoontail\ncoontie\ncoony\ncoop\ncooper\ncooperage\nCooperia\ncoopering\ncoopery\ncooree\nCoorg\ncoorie\ncooruptibly\nCoos\ncooser\ncoost\nCoosuc\ncoot\ncooter\ncootfoot\ncoothay\ncootie\ncop\ncopa\ncopable\ncopacetic\ncopaene\ncopaiba\ncopaibic\nCopaifera\nCopaiva\ncopaivic\ncopaiye\ncopal\ncopalche\ncopalcocote\ncopaliferous\ncopalite\ncopalm\ncoparallel\ncoparcenary\ncoparcener\ncoparceny\ncoparent\ncopart\ncopartaker\ncopartner\ncopartnership\ncopartnery\ncoparty\ncopassionate\ncopastor\ncopastorate\ncopatain\ncopatentee\ncopatriot\ncopatron\ncopatroness\ncope\nCopehan\ncopei\nCopelata\nCopelatae\ncopelate\ncopellidine\ncopeman\ncopemate\ncopen\ncopending\ncopenetrate\nCopeognatha\ncopepod\nCopepoda\ncopepodan\ncopepodous\ncoper\ncoperception\ncoperiodic\nCopernican\nCopernicanism\nCopernicia\ncoperta\ncopesman\ncopesmate\ncopestone\ncopetitioner\ncophasal\nCophetua\ncophosis\ncopiability\ncopiable\ncopiapite\ncopied\ncopier\ncopilot\ncoping\ncopiopia\ncopiopsia\ncopiosity\ncopious\ncopiously\ncopiousness\ncopis\ncopist\ncopita\ncoplaintiff\ncoplanar\ncoplanarity\ncopleased\ncoplotter\ncoploughing\ncoplowing\ncopolar\ncopolymer\ncopolymerization\ncopolymerize\ncoppaelite\ncopped\ncopper\ncopperas\ncopperbottom\ncopperer\ncopperhead\ncopperheadism\ncoppering\ncopperish\ncopperization\ncopperize\ncopperleaf\ncoppernose\ncoppernosed\ncopperplate\ncopperproof\ncoppersidesman\ncopperskin\ncoppersmith\ncoppersmithing\ncopperware\ncopperwing\ncopperworks\ncoppery\ncopperytailed\ncoppet\ncoppice\ncoppiced\ncoppicing\ncoppin\ncopping\ncopple\ncopplecrown\ncoppled\ncoppy\ncopr\ncopra\ncoprecipitate\ncoprecipitation\ncopremia\ncopremic\ncopresbyter\ncopresence\ncopresent\nCoprides\nCoprinae\ncoprincipal\ncoprincipate\nCoprinus\ncoprisoner\ncoprodaeum\ncoproduce\ncoproducer\ncoprojector\ncoprolagnia\ncoprolagnist\ncoprolalia\ncoprolaliac\ncoprolite\ncoprolith\ncoprolitic\ncoprology\ncopromisor\ncopromoter\ncoprophagan\ncoprophagia\ncoprophagist\ncoprophagous\ncoprophagy\ncoprophilia\ncoprophiliac\ncoprophilic\ncoprophilism\ncoprophilous\ncoprophyte\ncoproprietor\ncoproprietorship\ncoprose\nCoprosma\ncoprostasis\ncoprosterol\ncoprozoic\ncopse\ncopsewood\ncopsewooded\ncopsing\ncopsy\nCopt\ncopter\nCoptic\nCoptis\ncopula\ncopulable\ncopular\ncopularium\ncopulate\ncopulation\ncopulative\ncopulatively\ncopulatory\ncopunctal\ncopurchaser\ncopus\ncopy\ncopybook\ncopycat\ncopygraph\ncopygraphed\ncopyhold\ncopyholder\ncopyholding\ncopyism\ncopyist\ncopyman\ncopyreader\ncopyright\ncopyrightable\ncopyrighter\ncopywise\ncoque\ncoquecigrue\ncoquelicot\ncoqueluche\ncoquet\ncoquetoon\ncoquetry\ncoquette\ncoquettish\ncoquettishly\ncoquettishness\ncoquicken\ncoquilla\nCoquille\ncoquille\ncoquimbite\ncoquina\ncoquita\nCoquitlam\ncoquito\ncor\nCora\ncora\nCorabeca\nCorabecan\ncorach\nCoraciae\ncoracial\nCoracias\nCoracii\nCoraciidae\ncoraciiform\nCoraciiformes\ncoracine\ncoracle\ncoracler\ncoracoacromial\ncoracobrachial\ncoracobrachialis\ncoracoclavicular\ncoracocostal\ncoracohumeral\ncoracohyoid\ncoracoid\ncoracoidal\ncoracomandibular\ncoracomorph\nCoracomorphae\ncoracomorphic\ncoracopectoral\ncoracoprocoracoid\ncoracoradialis\ncoracoscapular\ncoracovertebral\ncoradical\ncoradicate\ncorah\ncoraise\ncoral\ncoralberry\ncoralbush\ncoraled\ncoralflower\ncoralist\ncorallet\nCorallian\ncorallic\nCorallidae\ncorallidomous\ncoralliferous\ncoralliform\nCoralligena\ncoralligenous\ncoralligerous\ncorallike\nCorallina\nCorallinaceae\ncorallinaceous\ncoralline\ncorallite\nCorallium\ncoralloid\ncoralloidal\nCorallorhiza\ncorallum\nCorallus\ncoralroot\ncoralwort\ncoram\nCorambis\ncoranto\ncorban\ncorbeau\ncorbeil\ncorbel\ncorbeling\ncorbicula\ncorbiculate\ncorbiculum\ncorbie\ncorbiestep\ncorbovinum\ncorbula\ncorcass\nCorchorus\ncorcir\ncorcopali\nCorcyraean\ncord\ncordage\nCordaitaceae\ncordaitaceous\ncordaitalean\nCordaitales\ncordaitean\nCordaites\ncordant\ncordate\ncordately\ncordax\nCordeau\ncorded\ncordel\nCordelia\nCordelier\ncordeliere\ncordelle\ncorder\nCordery\ncordewane\nCordia\ncordial\ncordiality\ncordialize\ncordially\ncordialness\ncordiceps\ncordicole\ncordierite\ncordies\ncordiform\ncordigeri\ncordillera\ncordilleran\ncordiner\ncording\ncordite\ncorditis\ncordleaf\ncordmaker\ncordoba\ncordon\ncordonnet\nCordovan\nCordula\ncorduroy\ncorduroyed\ncordwain\ncordwainer\ncordwainery\ncordwood\ncordy\nCordyceps\ncordyl\nCordylanthus\nCordyline\ncore\ncorebel\ncoreceiver\ncoreciprocal\ncorectome\ncorectomy\ncorector\ncored\ncoredeem\ncoredeemer\ncoredemptress\ncoreductase\nCoree\ncoreflexed\ncoregence\ncoregency\ncoregent\ncoregnancy\ncoregnant\ncoregonid\nCoregonidae\ncoregonine\ncoregonoid\nCoregonus\ncoreid\nCoreidae\ncoreign\ncoreigner\ncorejoice\ncoreless\ncoreligionist\ncorella\ncorelysis\nCorema\ncoremaker\ncoremaking\ncoremium\ncoremorphosis\ncorenounce\ncoreometer\nCoreopsis\ncoreplastic\ncoreplasty\ncorer\ncoresidence\ncoresidual\ncoresign\ncoresonant\ncoresort\ncorespect\ncorespondency\ncorespondent\ncoretomy\ncoreveler\ncoreveller\ncorevolve\nCorey\ncorf\nCorfiote\nCorflambo\ncorge\ncorgi\ncoriaceous\ncorial\ncoriamyrtin\ncoriander\ncoriandrol\nCoriandrum\nCoriaria\nCoriariaceae\ncoriariaceous\ncoriin\nCorimelaena\nCorimelaenidae\nCorin\ncorindon\nCorineus\ncoring\nCorinna\ncorinne\nCorinth\nCorinthian\nCorinthianesque\nCorinthianism\nCorinthianize\nCoriolanus\ncoriparian\ncorium\nCorixa\nCorixidae\ncork\ncorkage\ncorkboard\ncorke\ncorked\ncorker\ncorkiness\ncorking\ncorkish\ncorkite\ncorkmaker\ncorkmaking\ncorkscrew\ncorkscrewy\ncorkwing\ncorkwood\ncorky\ncorm\nCormac\ncormel\ncormidium\ncormoid\nCormophyta\ncormophyte\ncormophytic\ncormorant\ncormous\ncormus\ncorn\nCornaceae\ncornaceous\ncornage\ncornbell\ncornberry\ncornbin\ncornbinks\ncornbird\ncornbole\ncornbottle\ncornbrash\ncorncake\ncorncob\ncorncracker\ncorncrib\ncorncrusher\ncorndodger\ncornea\ncorneagen\ncorneal\ncornein\ncorneitis\ncornel\nCornelia\ncornelian\nCornelius\ncornemuse\ncorneocalcareous\ncorneosclerotic\ncorneosiliceous\ncorneous\ncorner\ncornerbind\ncornered\ncornerer\ncornerpiece\ncornerstone\ncornerways\ncornerwise\ncornet\ncornetcy\ncornettino\ncornettist\ncorneule\ncorneum\ncornfield\ncornfloor\ncornflower\ncorngrower\ncornhouse\ncornhusk\ncornhusker\ncornhusking\ncornic\ncornice\ncornicle\ncorniculate\ncorniculer\ncorniculum\nCorniferous\ncornific\ncornification\ncornified\ncorniform\ncornigerous\ncornin\ncorning\ncorniplume\nCornish\nCornishman\ncornland\ncornless\ncornloft\ncornmaster\ncornmonger\ncornopean\ncornpipe\ncornrick\ncornroot\ncornstalk\ncornstarch\ncornstook\ncornu\ncornual\ncornuate\ncornuated\ncornubianite\ncornucopia\nCornucopiae\ncornucopian\ncornucopiate\ncornule\ncornulite\nCornulites\ncornupete\nCornus\ncornute\ncornuted\ncornutine\ncornuto\ncornwallis\ncornwallite\ncorny\ncoroa\nCoroado\ncorocleisis\ncorodiary\ncorodiastasis\ncorodiastole\ncorody\ncorol\ncorolla\ncorollaceous\ncorollarial\ncorollarially\ncorollary\ncorollate\ncorollated\ncorolliferous\ncorolliform\ncorollike\ncorolline\ncorollitic\ncorometer\ncorona\ncoronach\ncoronad\ncoronadite\ncoronae\ncoronagraph\ncoronagraphic\ncoronal\ncoronale\ncoronaled\ncoronally\ncoronamen\ncoronary\ncoronate\ncoronated\ncoronation\ncoronatorial\ncoroner\ncoronership\ncoronet\ncoroneted\ncoronetted\ncoronetty\ncoroniform\nCoronilla\ncoronillin\ncoronion\ncoronitis\ncoronium\ncoronize\ncoronobasilar\ncoronofacial\ncoronofrontal\ncoronoid\nCoronopus\ncoronule\ncoroparelcysis\ncoroplast\ncoroplasta\ncoroplastic\nCoropo\ncoroscopy\ncorotomy\ncorozo\ncorp\ncorpora\ncorporal\ncorporalism\ncorporality\ncorporally\ncorporalship\ncorporas\ncorporate\ncorporately\ncorporateness\ncorporation\ncorporational\ncorporationer\ncorporationism\ncorporative\ncorporator\ncorporature\ncorporeal\ncorporealist\ncorporeality\ncorporealization\ncorporealize\ncorporeally\ncorporealness\ncorporeals\ncorporeity\ncorporeous\ncorporification\ncorporify\ncorporosity\ncorposant\ncorps\ncorpsbruder\ncorpse\ncorpsman\ncorpulence\ncorpulency\ncorpulent\ncorpulently\ncorpulentness\ncorpus\ncorpuscle\ncorpuscular\ncorpuscularian\ncorpuscularity\ncorpusculated\ncorpuscule\ncorpusculous\ncorpusculum\ncorrade\ncorradial\ncorradiate\ncorradiation\ncorral\ncorrasion\ncorrasive\nCorrea\ncorreal\ncorreality\ncorrect\ncorrectable\ncorrectant\ncorrected\ncorrectedness\ncorrectible\ncorrecting\ncorrectingly\ncorrection\ncorrectional\ncorrectionalist\ncorrectioner\ncorrectitude\ncorrective\ncorrectively\ncorrectiveness\ncorrectly\ncorrectness\ncorrector\ncorrectorship\ncorrectress\ncorrectrice\ncorregidor\ncorrelatable\ncorrelate\ncorrelated\ncorrelation\ncorrelational\ncorrelative\ncorrelatively\ncorrelativeness\ncorrelativism\ncorrelativity\ncorreligionist\ncorrente\ncorreption\ncorresol\ncorrespond\ncorrespondence\ncorrespondency\ncorrespondent\ncorrespondential\ncorrespondentially\ncorrespondently\ncorrespondentship\ncorresponder\ncorresponding\ncorrespondingly\ncorresponsion\ncorresponsive\ncorresponsively\ncorridor\ncorridored\ncorrie\nCorriedale\ncorrige\ncorrigenda\ncorrigendum\ncorrigent\ncorrigibility\ncorrigible\ncorrigibleness\ncorrigibly\nCorrigiola\nCorrigiolaceae\ncorrival\ncorrivality\ncorrivalry\ncorrivalship\ncorrivate\ncorrivation\ncorrobboree\ncorroborant\ncorroborate\ncorroboration\ncorroborative\ncorroboratively\ncorroborator\ncorroboratorily\ncorroboratory\ncorroboree\ncorrode\ncorrodent\nCorrodentia\ncorroder\ncorrodiary\ncorrodibility\ncorrodible\ncorrodier\ncorroding\ncorrosibility\ncorrosible\ncorrosibleness\ncorrosion\ncorrosional\ncorrosive\ncorrosively\ncorrosiveness\ncorrosivity\ncorrugate\ncorrugated\ncorrugation\ncorrugator\ncorrupt\ncorrupted\ncorruptedly\ncorruptedness\ncorrupter\ncorruptful\ncorruptibility\ncorruptible\ncorruptibleness\ncorrupting\ncorruptingly\ncorruption\ncorruptionist\ncorruptive\ncorruptively\ncorruptly\ncorruptness\ncorruptor\ncorruptress\ncorsac\ncorsage\ncorsaint\ncorsair\ncorse\ncorselet\ncorsepresent\ncorsesque\ncorset\ncorseting\ncorsetless\ncorsetry\nCorsican\ncorsie\ncorsite\ncorta\nCortaderia\ncortege\nCortes\ncortex\ncortez\ncortical\ncortically\ncorticate\ncorticated\ncorticating\ncortication\ncortices\ncorticiferous\ncorticiform\ncorticifugal\ncorticifugally\ncorticipetal\ncorticipetally\nCorticium\ncorticoafferent\ncorticoefferent\ncorticoline\ncorticopeduncular\ncorticose\ncorticospinal\ncorticosterone\ncorticostriate\ncorticous\ncortin\ncortina\ncortinarious\nCortinarius\ncortinate\ncortisone\ncortlandtite\nCorton\ncoruco\ncoruler\nCoruminacan\ncorundophilite\ncorundum\ncorupay\ncoruscant\ncoruscate\ncoruscation\ncorver\ncorvette\ncorvetto\nCorvidae\ncorviform\ncorvillosum\ncorvina\nCorvinae\ncorvine\ncorvoid\nCorvus\nCory\nCorybant\nCorybantian\ncorybantiasm\nCorybantic\ncorybantic\nCorybantine\ncorybantish\ncorybulbin\ncorybulbine\ncorycavamine\ncorycavidin\ncorycavidine\ncorycavine\nCorycia\nCorycian\ncorydalin\ncorydaline\nCorydalis\ncorydine\nCorydon\ncoryl\nCorylaceae\ncorylaceous\ncorylin\nCorylopsis\nCorylus\ncorymb\ncorymbed\ncorymbiate\ncorymbiated\ncorymbiferous\ncorymbiform\ncorymbose\ncorymbous\ncorynebacterial\nCorynebacterium\nCoryneum\ncorynine\nCorynocarpaceae\ncorynocarpaceous\nCorynocarpus\nCorypha\nCoryphaena\ncoryphaenid\nCoryphaenidae\ncoryphaenoid\nCoryphaenoididae\ncoryphaeus\ncoryphee\ncoryphene\nCoryphodon\ncoryphodont\ncoryphylly\ncorytuberine\ncoryza\ncos\ncosalite\ncosaque\ncosavior\ncoscet\nCoscinodiscaceae\nCoscinodiscus\ncoscinomancy\ncoscoroba\ncoseasonal\ncoseat\ncosec\ncosecant\ncosech\ncosectarian\ncosectional\ncosegment\ncoseism\ncoseismal\ncoseismic\ncosenator\ncosentiency\ncosentient\ncoservant\ncosession\ncoset\ncosettler\ncosh\ncosharer\ncosheath\ncosher\ncosherer\ncoshering\ncoshery\ncosignatory\ncosigner\ncosignitary\ncosily\ncosinage\ncosine\ncosiness\ncosingular\ncosinusoid\nCosmati\ncosmecology\ncosmesis\ncosmetic\ncosmetical\ncosmetically\ncosmetician\ncosmetiste\ncosmetological\ncosmetologist\ncosmetology\ncosmic\ncosmical\ncosmicality\ncosmically\ncosmism\ncosmist\ncosmocracy\ncosmocrat\ncosmocratic\ncosmogenesis\ncosmogenetic\ncosmogenic\ncosmogeny\ncosmogonal\ncosmogoner\ncosmogonic\ncosmogonical\ncosmogonist\ncosmogonize\ncosmogony\ncosmographer\ncosmographic\ncosmographical\ncosmographically\ncosmographist\ncosmography\ncosmolabe\ncosmolatry\ncosmologic\ncosmological\ncosmologically\ncosmologist\ncosmology\ncosmometry\ncosmopathic\ncosmoplastic\ncosmopoietic\ncosmopolicy\ncosmopolis\ncosmopolitan\ncosmopolitanism\ncosmopolitanization\ncosmopolitanize\ncosmopolitanly\ncosmopolite\ncosmopolitic\ncosmopolitical\ncosmopolitics\ncosmopolitism\ncosmorama\ncosmoramic\ncosmorganic\ncosmos\ncosmoscope\ncosmosophy\ncosmosphere\ncosmotellurian\ncosmotheism\ncosmotheist\ncosmotheistic\ncosmothetic\ncosmotron\ncosmozoan\ncosmozoic\ncosmozoism\ncosonant\ncosounding\ncosovereign\ncosovereignty\ncospecies\ncospecific\ncosphered\ncosplendor\ncosplendour\ncoss\nCossack\nCossaean\ncossas\ncosse\ncosset\ncossette\ncossid\nCossidae\ncossnent\ncossyrite\ncost\ncosta\nCostaea\ncostal\ncostalgia\ncostally\ncostander\nCostanoan\ncostar\ncostard\nCostata\ncostate\ncostated\ncostean\ncosteaning\ncostectomy\ncostellate\ncoster\ncosterdom\ncostermonger\ncosticartilage\ncosticartilaginous\ncosticervical\ncostiferous\ncostiform\ncosting\ncostipulator\ncostispinal\ncostive\ncostively\ncostiveness\ncostless\ncostlessness\ncostliness\ncostly\ncostmary\ncostoabdominal\ncostoapical\ncostocentral\ncostochondral\ncostoclavicular\ncostocolic\ncostocoracoid\ncostodiaphragmatic\ncostogenic\ncostoinferior\ncostophrenic\ncostopleural\ncostopneumopexy\ncostopulmonary\ncostoscapular\ncostosternal\ncostosuperior\ncostothoracic\ncostotome\ncostotomy\ncostotrachelian\ncostotransversal\ncostotransverse\ncostovertebral\ncostoxiphoid\ncostraight\ncostrel\ncostula\ncostulation\ncostume\ncostumer\ncostumery\ncostumic\ncostumier\ncostumiere\ncostuming\ncostumist\ncostusroot\ncosubject\ncosubordinate\ncosuffer\ncosufferer\ncosuggestion\ncosuitor\ncosurety\ncosustain\ncoswearer\ncosy\ncosymmedian\ncot\ncotangent\ncotangential\ncotarius\ncotarnine\ncotch\ncote\ncoteful\ncoteline\ncoteller\ncotemporane\ncotemporanean\ncotemporaneous\ncotemporaneously\ncotemporary\ncotenancy\ncotenant\ncotenure\ncoterell\ncoterie\ncoterminous\nCotesian\ncoth\ncothamore\ncothe\ncotheorist\ncothish\ncothon\ncothurn\ncothurnal\ncothurnate\ncothurned\ncothurnian\ncothurnus\ncothy\ncotidal\ncotillage\ncotillion\nCotinga\ncotingid\nCotingidae\ncotingoid\nCotinus\ncotise\ncotitular\ncotland\ncotman\ncoto\ncotoin\nCotonam\nCotoneaster\ncotonier\ncotorment\ncotoro\ncotorture\nCotoxo\ncotquean\ncotraitor\ncotransfuse\ncotranslator\ncotranspire\ncotransubstantiate\ncotrine\ncotripper\ncotrustee\ncotset\ncotsetla\ncotsetle\ncotta\ncottabus\ncottage\ncottaged\ncottager\ncottagers\ncottagey\ncotte\ncotted\ncotter\ncotterel\ncotterite\ncotterway\ncottid\nCottidae\ncottier\ncottierism\ncottiform\ncottoid\ncotton\ncottonade\ncottonbush\ncottonee\ncottoneer\ncottoner\nCottonian\ncottonization\ncottonize\ncottonless\ncottonmouth\ncottonocracy\nCottonopolis\ncottonseed\ncottontail\ncottontop\ncottonweed\ncottonwood\ncottony\nCottus\ncotty\ncotuit\ncotula\ncotunnite\nCoturnix\ncotutor\ncotwin\ncotwinned\ncotwist\ncotyla\ncotylar\ncotyledon\ncotyledonal\ncotyledonar\ncotyledonary\ncotyledonous\ncotyliform\ncotyligerous\ncotyliscus\ncotyloid\nCotylophora\ncotylophorous\ncotylopubic\ncotylosacral\ncotylosaur\nCotylosauria\ncotylosaurian\ncotype\nCotys\nCotyttia\ncouac\ncoucal\ncouch\ncouchancy\ncouchant\ncouched\ncouchee\ncoucher\ncouching\ncouchmaker\ncouchmaking\ncouchmate\ncouchy\ncoude\ncoudee\ncoue\nCoueism\ncougar\ncough\ncougher\ncoughroot\ncoughweed\ncoughwort\ncougnar\ncoul\ncould\ncouldron\ncoulee\ncoulisse\ncoulomb\ncoulometer\ncoulterneb\ncoulure\ncouma\ncoumalic\ncoumalin\ncoumara\ncoumaran\ncoumarate\ncoumaric\ncoumarilic\ncoumarin\ncoumarinic\ncoumarone\ncoumarou\nCoumarouna\ncouncil\ncouncilist\ncouncilman\ncouncilmanic\ncouncilor\ncouncilorship\ncouncilwoman\ncounderstand\ncounite\ncouniversal\ncounsel\ncounselable\ncounselee\ncounselful\ncounselor\ncounselorship\ncount\ncountable\ncountableness\ncountably\ncountdom\ncountenance\ncountenancer\ncounter\ncounterabut\ncounteraccusation\ncounteracquittance\ncounteract\ncounteractant\ncounteracter\ncounteracting\ncounteractingly\ncounteraction\ncounteractive\ncounteractively\ncounteractivity\ncounteractor\ncounteraddress\ncounteradvance\ncounteradvantage\ncounteradvice\ncounteradvise\ncounteraffirm\ncounteraffirmation\ncounteragency\ncounteragent\ncounteragitate\ncounteragitation\ncounteralliance\ncounterambush\ncounterannouncement\ncounteranswer\ncounterappeal\ncounterappellant\ncounterapproach\ncounterapse\ncounterarch\ncounterargue\ncounterargument\ncounterartillery\ncounterassertion\ncounterassociation\ncounterassurance\ncounterattack\ncounterattestation\ncounterattired\ncounterattraction\ncounterattractive\ncounterattractively\ncounteraverment\ncounteravouch\ncounteravouchment\ncounterbalance\ncounterbarrage\ncounterbase\ncounterbattery\ncounterbeating\ncounterbend\ncounterbewitch\ncounterbid\ncounterblast\ncounterblow\ncounterbond\ncounterborder\ncounterbore\ncounterboycott\ncounterbrace\ncounterbranch\ncounterbrand\ncounterbreastwork\ncounterbuff\ncounterbuilding\ncountercampaign\ncountercarte\ncountercause\ncounterchange\ncounterchanged\ncountercharge\ncountercharm\ncountercheck\ncountercheer\ncounterclaim\ncounterclaimant\ncounterclockwise\ncountercolored\ncountercommand\ncountercompetition\ncountercomplaint\ncountercompony\ncountercondemnation\ncounterconquest\ncounterconversion\ncountercouchant\ncountercoupe\ncountercourant\ncountercraft\ncountercriticism\ncountercross\ncountercry\ncountercurrent\ncountercurrently\ncountercurrentwise\ncounterdance\ncounterdash\ncounterdecision\ncounterdeclaration\ncounterdecree\ncounterdefender\ncounterdemand\ncounterdemonstration\ncounterdeputation\ncounterdesire\ncounterdevelopment\ncounterdifficulty\ncounterdigged\ncounterdike\ncounterdiscipline\ncounterdisengage\ncounterdisengagement\ncounterdistinction\ncounterdistinguish\ncounterdoctrine\ncounterdogmatism\ncounterdraft\ncounterdrain\ncounterdrive\ncounterearth\ncounterefficiency\ncountereffort\ncounterembattled\ncounterembowed\ncounterenamel\ncounterend\ncounterenergy\ncounterengagement\ncounterengine\ncounterenthusiasm\ncounterentry\ncounterequivalent\ncounterermine\ncounterespionage\ncounterestablishment\ncounterevidence\ncounterexaggeration\ncounterexcitement\ncounterexcommunication\ncounterexercise\ncounterexplanation\ncounterexposition\ncounterexpostulation\ncounterextend\ncounterextension\ncounterfact\ncounterfallacy\ncounterfaller\ncounterfeit\ncounterfeiter\ncounterfeitly\ncounterfeitment\ncounterfeitness\ncounterferment\ncounterfessed\ncounterfire\ncounterfix\ncounterflange\ncounterflashing\ncounterflight\ncounterflory\ncounterflow\ncounterflux\ncounterfoil\ncounterforce\ncounterformula\ncounterfort\ncounterfugue\ncountergabble\ncountergabion\ncountergambit\ncountergarrison\ncountergauge\ncountergauger\ncountergift\ncountergirded\ncounterglow\ncounterguard\ncounterhaft\ncounterhammering\ncounterhypothesis\ncounteridea\ncounterideal\ncounterimagination\ncounterimitate\ncounterimitation\ncounterimpulse\ncounterindentation\ncounterindented\ncounterindicate\ncounterindication\ncounterinfluence\ncounterinsult\ncounterintelligence\ncounterinterest\ncounterinterpretation\ncounterintrigue\ncounterinvective\ncounterirritant\ncounterirritate\ncounterirritation\ncounterjudging\ncounterjumper\ncounterlath\ncounterlathing\ncounterlatration\ncounterlaw\ncounterleague\ncounterlegislation\ncounterlife\ncounterlocking\ncounterlode\ncounterlove\ncounterly\ncountermachination\ncounterman\ncountermand\ncountermandable\ncountermaneuver\ncountermanifesto\ncountermarch\ncountermark\ncountermarriage\ncountermeasure\ncountermeet\ncountermessage\ncountermigration\ncountermine\ncountermission\ncountermotion\ncountermount\ncountermove\ncountermovement\ncountermure\ncountermutiny\ncounternaiant\ncounternarrative\ncounternatural\ncounternecromancy\ncounternoise\ncounternotice\ncounterobjection\ncounterobligation\ncounteroffensive\ncounteroffer\ncounteropening\ncounteropponent\ncounteropposite\ncounterorator\ncounterorder\ncounterorganization\ncounterpaled\ncounterpaly\ncounterpane\ncounterpaned\ncounterparadox\ncounterparallel\ncounterparole\ncounterparry\ncounterpart\ncounterpassant\ncounterpassion\ncounterpenalty\ncounterpendent\ncounterpetition\ncounterpicture\ncounterpillar\ncounterplan\ncounterplay\ncounterplayer\ncounterplea\ncounterplead\ncounterpleading\ncounterplease\ncounterplot\ncounterpoint\ncounterpointe\ncounterpointed\ncounterpoise\ncounterpoison\ncounterpole\ncounterponderate\ncounterpose\ncounterposition\ncounterposting\ncounterpotence\ncounterpotency\ncounterpotent\ncounterpractice\ncounterpray\ncounterpreach\ncounterpreparation\ncounterpressure\ncounterprick\ncounterprinciple\ncounterprocess\ncounterproject\ncounterpronunciamento\ncounterproof\ncounterpropaganda\ncounterpropagandize\ncounterprophet\ncounterproposal\ncounterproposition\ncounterprotection\ncounterprotest\ncounterprove\ncounterpull\ncounterpunch\ncounterpuncture\ncounterpush\ncounterquartered\ncounterquarterly\ncounterquery\ncounterquestion\ncounterquip\ncounterradiation\ncounterraid\ncounterraising\ncounterrampant\ncounterrate\ncounterreaction\ncounterreason\ncounterreckoning\ncounterrecoil\ncounterreconnaissance\ncounterrefer\ncounterreflected\ncounterreform\ncounterreformation\ncounterreligion\ncounterremonstrant\ncounterreply\ncounterreprisal\ncounterresolution\ncounterrestoration\ncounterretreat\ncounterrevolution\ncounterrevolutionary\ncounterrevolutionist\ncounterrevolutionize\ncounterriposte\ncounterroll\ncounterround\ncounterruin\ncountersale\ncountersalient\ncounterscale\ncounterscalloped\ncounterscarp\ncounterscoff\ncountersconce\ncounterscrutiny\ncountersea\ncounterseal\ncountersecure\ncountersecurity\ncounterselection\ncountersense\ncounterservice\ncountershade\ncountershaft\ncountershafting\ncountershear\ncountershine\ncountershout\ncounterside\ncountersiege\ncountersign\ncountersignal\ncountersignature\ncountersink\ncountersleight\ncounterslope\ncountersmile\ncountersnarl\ncounterspying\ncounterstain\ncounterstamp\ncounterstand\ncounterstatant\ncounterstatement\ncounterstatute\ncounterstep\ncounterstimulate\ncounterstimulation\ncounterstimulus\ncounterstock\ncounterstratagem\ncounterstream\ncounterstrike\ncounterstroke\ncounterstruggle\ncountersubject\ncountersuggestion\ncountersuit\ncountersun\ncountersunk\ncountersurprise\ncounterswing\ncountersworn\ncountersympathy\ncountersynod\ncountertack\ncountertail\ncountertally\ncountertaste\ncountertechnicality\ncountertendency\ncountertenor\ncounterterm\ncounterterror\ncountertheme\ncountertheory\ncounterthought\ncounterthreat\ncounterthrust\ncounterthwarting\ncountertierce\ncountertime\ncountertouch\ncountertraction\ncountertrades\ncountertransference\ncountertranslation\ncountertraverse\ncountertreason\ncountertree\ncountertrench\ncountertrespass\ncountertrippant\ncountertripping\ncountertruth\ncountertug\ncounterturn\ncounterturned\ncountertype\ncountervail\ncountervair\ncountervairy\ncountervallation\ncountervaunt\ncountervene\ncountervengeance\ncountervenom\ncountervibration\ncounterview\ncountervindication\ncountervolition\ncountervolley\ncountervote\ncounterwager\ncounterwall\ncounterwarmth\ncounterwave\ncounterweigh\ncounterweight\ncounterweighted\ncounterwheel\ncounterwill\ncounterwilling\ncounterwind\ncounterwitness\ncounterword\ncounterwork\ncounterworker\ncounterwrite\ncountess\ncountfish\ncounting\ncountinghouse\ncountless\ncountor\ncountrified\ncountrifiedness\ncountry\ncountryfolk\ncountryman\ncountrypeople\ncountryseat\ncountryside\ncountryward\ncountrywoman\ncountship\ncounty\ncoup\ncoupage\ncoupe\ncouped\ncoupee\ncoupelet\ncouper\ncouple\ncoupled\ncouplement\ncoupler\ncoupleress\ncouplet\ncoupleteer\ncoupling\ncoupon\ncouponed\ncouponless\ncoupstick\ncoupure\ncourage\ncourageous\ncourageously\ncourageousness\ncourager\ncourant\ncourante\ncourap\ncouratari\ncourb\ncourbache\ncourbaril\ncourbash\ncourge\ncourida\ncourier\ncouril\ncourlan\nCours\ncourse\ncoursed\ncourser\ncoursing\ncourt\ncourtbred\ncourtcraft\ncourteous\ncourteously\ncourteousness\ncourtepy\ncourter\ncourtesan\ncourtesanry\ncourtesanship\ncourtesy\ncourtezanry\ncourtezanship\ncourthouse\ncourtier\ncourtierism\ncourtierly\ncourtiership\ncourtin\ncourtless\ncourtlet\ncourtlike\ncourtliness\ncourtling\ncourtly\ncourtman\nCourtney\ncourtroom\ncourtship\ncourtyard\ncourtzilite\ncouscous\ncouscousou\ncouseranite\ncousin\ncousinage\ncousiness\ncousinhood\ncousinly\ncousinry\ncousinship\ncousiny\ncoussinet\ncoustumier\ncoutel\ncoutelle\ncouter\nCoutet\ncouth\ncouthie\ncouthily\ncouthiness\ncouthless\ncoutil\ncoutumier\ncouvade\ncouxia\ncovado\ncovalence\ncovalent\nCovarecan\nCovarecas\ncovariable\ncovariance\ncovariant\ncovariation\ncovassal\ncove\ncoved\ncovelline\ncovellite\ncovenant\ncovenantal\ncovenanted\ncovenantee\nCovenanter\ncovenanter\ncovenanting\ncovenantor\ncovent\ncoventrate\ncoventrize\nCoventry\ncover\ncoverage\ncoveralls\ncoverchief\ncovercle\ncovered\ncoverer\ncovering\ncoverless\ncoverlet\ncoverlid\ncoversed\ncoverside\ncoversine\ncoverslut\ncovert\ncovertical\ncovertly\ncovertness\ncoverture\ncovet\ncovetable\ncoveter\ncoveting\ncovetingly\ncovetiveness\ncovetous\ncovetously\ncovetousness\ncovey\ncovibrate\ncovibration\ncovid\nCoviello\ncovillager\nCovillea\ncovin\ncoving\ncovinous\ncovinously\ncovisit\ncovisitor\ncovite\ncovolume\ncovotary\ncow\ncowal\nCowan\ncoward\ncowardice\ncowardliness\ncowardly\ncowardness\ncowardy\ncowbane\ncowbell\ncowberry\ncowbind\ncowbird\ncowboy\ncowcatcher\ncowdie\ncoween\ncower\ncowfish\ncowgate\ncowgram\ncowhage\ncowheart\ncowhearted\ncowheel\ncowherb\ncowherd\ncowhide\ncowhiding\ncowhorn\nCowichan\ncowish\ncowitch\ncowkeeper\ncowl\ncowle\ncowled\ncowleech\ncowleeching\ncowlick\ncowlicks\ncowlike\ncowling\nCowlitz\ncowlstaff\ncowman\ncowpath\ncowpea\ncowpen\nCowperian\ncowperitis\ncowpock\ncowpox\ncowpuncher\ncowquake\ncowrie\ncowroid\ncowshed\ncowskin\ncowslip\ncowslipped\ncowsucker\ncowtail\ncowthwort\ncowtongue\ncowweed\ncowwheat\ncowy\ncowyard\ncox\ncoxa\ncoxal\ncoxalgia\ncoxalgic\ncoxankylometer\ncoxarthritis\ncoxarthrocace\ncoxarthropathy\ncoxbones\ncoxcomb\ncoxcombess\ncoxcombhood\ncoxcombic\ncoxcombical\ncoxcombicality\ncoxcombically\ncoxcombity\ncoxcombry\ncoxcomby\ncoxcomical\ncoxcomically\ncoxite\ncoxitis\ncoxocerite\ncoxoceritic\ncoxodynia\ncoxofemoral\ncoxopodite\ncoxswain\ncoxy\ncoy\ncoyan\ncoydog\ncoyish\ncoyishness\ncoyly\ncoyness\ncoynye\ncoyo\ncoyol\ncoyote\nCoyotero\ncoyotillo\ncoyoting\ncoypu\ncoyure\ncoz\ncoze\ncozen\ncozenage\ncozener\ncozening\ncozeningly\ncozier\ncozily\ncoziness\ncozy\ncrab\ncrabbed\ncrabbedly\ncrabbedness\ncrabber\ncrabbery\ncrabbing\ncrabby\ncrabcatcher\ncrabeater\ncraber\ncrabhole\ncrablet\ncrablike\ncrabman\ncrabmill\ncrabsidle\ncrabstick\ncrabweed\ncrabwise\ncrabwood\nCracca\nCracidae\nCracinae\ncrack\ncrackable\ncrackajack\ncrackbrain\ncrackbrained\ncrackbrainedness\ncrackdown\ncracked\ncrackedness\ncracker\ncrackerberry\ncrackerjack\ncrackers\ncrackhemp\ncrackiness\ncracking\ncrackjaw\ncrackle\ncrackled\ncrackless\ncrackleware\ncrackling\ncrackly\ncrackmans\ncracknel\ncrackpot\ncrackskull\ncracksman\ncracky\ncracovienne\ncraddy\ncradge\ncradle\ncradleboard\ncradlechild\ncradlefellow\ncradleland\ncradlelike\ncradlemaker\ncradlemaking\ncradleman\ncradlemate\ncradler\ncradleside\ncradlesong\ncradletime\ncradling\nCradock\ncraft\ncraftily\ncraftiness\ncraftless\ncraftsman\ncraftsmanship\ncraftsmaster\ncraftswoman\ncraftwork\ncraftworker\ncrafty\ncrag\ncraggan\ncragged\ncraggedness\ncraggily\ncragginess\ncraggy\ncraglike\ncragsman\ncragwork\ncraichy\nCraig\ncraigmontite\ncrain\ncraisey\ncraizey\ncrajuru\ncrake\ncrakefeet\ncrakow\ncram\ncramasie\ncrambambulee\ncrambambuli\nCrambe\ncrambe\ncramberry\ncrambid\nCrambidae\nCrambinae\ncramble\ncrambly\ncrambo\nCrambus\ncrammer\ncramp\ncramped\ncrampedness\ncramper\ncrampet\ncrampfish\ncramping\ncrampingly\ncrampon\ncramponnee\ncrampy\ncran\ncranage\ncranberry\ncrance\ncrandall\ncrandallite\ncrane\ncranelike\ncraneman\ncraner\ncranesman\ncraneway\ncraney\nCrania\ncrania\ncraniacromial\ncraniad\ncranial\ncranially\ncranian\nCraniata\ncraniate\ncranic\ncraniectomy\ncraniocele\ncraniocerebral\ncranioclasis\ncranioclasm\ncranioclast\ncranioclasty\ncraniodidymus\ncraniofacial\ncraniognomic\ncraniognomy\ncraniognosy\ncraniograph\ncraniographer\ncraniography\ncraniological\ncraniologically\ncraniologist\ncraniology\ncraniomalacia\ncraniomaxillary\ncraniometer\ncraniometric\ncraniometrical\ncraniometrically\ncraniometrist\ncraniometry\ncraniopagus\ncraniopathic\ncraniopathy\ncraniopharyngeal\ncraniophore\ncranioplasty\ncraniopuncture\ncraniorhachischisis\ncraniosacral\ncranioschisis\ncranioscopical\ncranioscopist\ncranioscopy\ncraniospinal\ncraniostenosis\ncraniostosis\nCraniota\ncraniotabes\ncraniotome\ncraniotomy\ncraniotopography\ncraniotympanic\ncraniovertebral\ncranium\ncrank\ncrankbird\ncrankcase\ncranked\ncranker\ncrankery\ncrankily\ncrankiness\ncrankle\ncrankless\ncrankly\ncrankman\ncrankous\ncrankpin\ncrankshaft\ncrankum\ncranky\ncrannage\ncrannied\ncrannock\ncrannog\ncrannoger\ncranny\ncranreuch\ncrantara\ncrants\ncrap\ncrapaud\ncrapaudine\ncrape\ncrapefish\ncrapehanger\ncrapelike\ncrappie\ncrappin\ncrapple\ncrappo\ncraps\ncrapshooter\ncrapulate\ncrapulence\ncrapulent\ncrapulous\ncrapulously\ncrapulousness\ncrapy\ncraquelure\ncrare\ncrash\ncrasher\ncrasis\ncraspedal\ncraspedodromous\ncraspedon\nCraspedota\ncraspedotal\ncraspedote\ncrass\ncrassamentum\ncrassier\ncrassilingual\nCrassina\ncrassitude\ncrassly\ncrassness\nCrassula\nCrassulaceae\ncrassulaceous\nCrataegus\nCrataeva\ncratch\ncratchens\ncratches\ncrate\ncrateful\ncratemaker\ncratemaking\ncrateman\ncrater\ncrateral\ncratered\nCraterellus\nCraterid\ncrateriform\ncrateris\ncraterkin\ncraterless\ncraterlet\ncraterlike\ncraterous\ncraticular\nCratinean\ncratometer\ncratometric\ncratometry\ncraunch\ncraunching\ncraunchingly\ncravat\ncrave\ncraven\nCravenette\ncravenette\ncravenhearted\ncravenly\ncravenness\ncraver\ncraving\ncravingly\ncravingness\ncravo\ncraw\ncrawberry\ncrawdad\ncrawfish\ncrawfoot\ncrawful\ncrawl\ncrawler\ncrawlerize\ncrawley\ncrawleyroot\ncrawling\ncrawlingly\ncrawlsome\ncrawly\ncrawm\ncrawtae\nCrawthumper\nCrax\ncrayer\ncrayfish\ncrayon\ncrayonist\ncrayonstone\ncraze\ncrazed\ncrazedly\ncrazedness\ncrazily\ncraziness\ncrazingmill\ncrazy\ncrazycat\ncrazyweed\ncrea\ncreagh\ncreaght\ncreak\ncreaker\ncreakily\ncreakiness\ncreakingly\ncreaky\ncream\ncreambush\ncreamcake\ncreamcup\ncreamer\ncreamery\ncreameryman\ncreamfruit\ncreamily\ncreaminess\ncreamless\ncreamlike\ncreammaker\ncreammaking\ncreamometer\ncreamsacs\ncreamware\ncreamy\ncreance\ncreancer\ncreant\ncrease\ncreaseless\ncreaser\ncreashaks\ncreasing\ncreasy\ncreat\ncreatable\ncreate\ncreatedness\ncreatic\ncreatine\ncreatinephosphoric\ncreatinine\ncreatininemia\ncreatinuria\ncreation\ncreational\ncreationary\ncreationism\ncreationist\ncreationistic\ncreative\ncreatively\ncreativeness\ncreativity\ncreatophagous\ncreator\ncreatorhood\ncreatorrhea\ncreatorship\ncreatotoxism\ncreatress\ncreatrix\ncreatural\ncreature\ncreaturehood\ncreatureless\ncreatureliness\ncreatureling\ncreaturely\ncreatureship\ncreaturize\ncrebricostate\ncrebrisulcate\ncrebrity\ncrebrous\ncreche\ncreddock\ncredence\ncredencive\ncredenciveness\ncredenda\ncredensive\ncredensiveness\ncredent\ncredential\ncredently\ncredenza\ncredibility\ncredible\ncredibleness\ncredibly\ncredit\ncreditability\ncreditable\ncreditableness\ncreditably\ncreditive\ncreditless\ncreditor\ncreditorship\ncreditress\ncreditrix\ncrednerite\nCredo\ncredulity\ncredulous\ncredulously\ncredulousness\nCree\ncree\ncreed\ncreedal\ncreedalism\ncreedalist\ncreeded\ncreedist\ncreedite\ncreedless\ncreedlessness\ncreedmore\ncreedsman\nCreek\ncreek\ncreeker\ncreekfish\ncreekside\ncreekstuff\ncreeky\ncreel\ncreeler\ncreem\ncreen\ncreep\ncreepage\ncreeper\ncreepered\ncreeperless\ncreephole\ncreepie\ncreepiness\ncreeping\ncreepingly\ncreepmouse\ncreepmousy\ncreepy\ncreese\ncreesh\ncreeshie\ncreeshy\ncreirgist\ncremaster\ncremasterial\ncremasteric\ncremate\ncremation\ncremationism\ncremationist\ncremator\ncrematorial\ncrematorium\ncrematory\ncrembalum\ncremnophobia\ncremocarp\ncremometer\ncremone\ncremor\ncremorne\ncremule\ncrena\ncrenate\ncrenated\ncrenately\ncrenation\ncrenature\ncrenel\ncrenelate\ncrenelated\ncrenelation\ncrenele\ncreneled\ncrenelet\ncrenellate\ncrenellation\ncrenic\ncrenitic\ncrenology\ncrenotherapy\nCrenothrix\ncrenula\ncrenulate\ncrenulated\ncrenulation\ncreodont\nCreodonta\ncreole\ncreoleize\ncreolian\nCreolin\ncreolism\ncreolization\ncreolize\ncreophagia\ncreophagism\ncreophagist\ncreophagous\ncreophagy\ncreosol\ncreosote\ncreosoter\ncreosotic\ncrepance\ncrepe\ncrepehanger\nCrepidula\ncrepine\ncrepiness\nCrepis\ncrepitaculum\ncrepitant\ncrepitate\ncrepitation\ncrepitous\ncrepitus\ncrepon\ncrept\ncrepuscle\ncrepuscular\ncrepuscule\ncrepusculine\ncrepusculum\ncrepy\ncresamine\ncrescendo\ncrescent\ncrescentade\ncrescentader\nCrescentia\ncrescentic\ncrescentiform\ncrescentlike\ncrescentoid\ncrescentwise\ncrescive\ncrescograph\ncrescographic\ncresegol\ncresol\ncresolin\ncresorcinol\ncresotate\ncresotic\ncresotinic\ncresoxide\ncresoxy\ncresphontes\ncress\ncressed\ncresselle\ncresset\nCressida\ncresson\ncressweed\ncresswort\ncressy\ncrest\ncrested\ncrestfallen\ncrestfallenly\ncrestfallenness\ncresting\ncrestless\ncrestline\ncrestmoreite\ncresyl\ncresylate\ncresylene\ncresylic\ncresylite\ncreta\nCretaceous\ncretaceous\ncretaceously\nCretacic\nCretan\nCrete\ncretefaction\nCretic\ncretic\ncretification\ncretify\ncretin\ncretinic\ncretinism\ncretinization\ncretinize\ncretinoid\ncretinous\ncretion\ncretionary\nCretism\ncretonne\ncrevalle\ncrevasse\ncrevice\ncreviced\ncrew\ncrewel\ncrewelist\ncrewellery\ncrewelwork\ncrewer\ncrewless\ncrewman\nCrex\ncrib\ncribbage\ncribber\ncribbing\ncribble\ncribellum\ncribo\ncribral\ncribrate\ncribrately\ncribration\ncribriform\ncribrose\ncribwork\ncric\nCricetidae\ncricetine\nCricetus\ncrick\ncricket\ncricketer\ncricketing\ncrickety\ncrickey\ncrickle\ncricoarytenoid\ncricoid\ncricopharyngeal\ncricothyreoid\ncricothyreotomy\ncricothyroid\ncricothyroidean\ncricotomy\ncricotracheotomy\nCricotus\ncried\ncrier\ncriey\ncrig\ncrile\ncrime\nCrimean\ncrimeful\ncrimeless\ncrimelessness\ncrimeproof\ncriminal\ncriminaldom\ncriminalese\ncriminalism\ncriminalist\ncriminalistic\ncriminalistician\ncriminalistics\ncriminality\ncriminally\ncriminalness\ncriminaloid\ncriminate\ncrimination\ncriminative\ncriminator\ncriminatory\ncrimine\ncriminogenesis\ncriminogenic\ncriminologic\ncriminological\ncriminologist\ncriminology\ncriminosis\ncriminous\ncriminously\ncriminousness\ncrimogenic\ncrimp\ncrimpage\ncrimper\ncrimping\ncrimple\ncrimpness\ncrimpy\ncrimson\ncrimsonly\ncrimsonness\ncrimsony\ncrin\ncrinal\ncrinanite\ncrinated\ncrinatory\ncrine\ncrined\ncrinet\ncringe\ncringeling\ncringer\ncringing\ncringingly\ncringingness\ncringle\ncrinicultural\ncriniculture\ncriniferous\nCriniger\ncrinigerous\ncriniparous\ncrinite\ncrinitory\ncrinivorous\ncrink\ncrinkle\ncrinkleroot\ncrinkly\ncrinoid\ncrinoidal\nCrinoidea\ncrinoidean\ncrinoline\ncrinose\ncrinosity\ncrinula\nCrinum\ncriobolium\ncriocephalus\nCrioceras\ncrioceratite\ncrioceratitic\nCrioceris\ncriophore\nCriophoros\ncriosphinx\ncripes\ncrippingly\ncripple\ncrippledom\ncrippleness\ncrippler\ncrippling\ncripply\nCris\ncrises\ncrisic\ncrisis\ncrisp\ncrispate\ncrispated\ncrispation\ncrispature\ncrisped\ncrisper\ncrispily\nCrispin\ncrispine\ncrispiness\ncrisping\ncrisply\ncrispness\ncrispy\ncriss\ncrissal\ncrisscross\ncrissum\ncrista\ncristate\nCristatella\nCristi\ncristiform\nCristina\nCristineaux\nCristino\nCristispira\nCristivomer\ncristobalite\nCristopher\ncritch\ncriteria\ncriteriology\ncriterion\ncriterional\ncriterium\ncrith\nCrithidia\ncrithmene\ncrithomancy\ncritic\ncritical\ncriticality\ncritically\ncriticalness\ncriticaster\ncriticasterism\ncriticastry\ncriticisable\ncriticism\ncriticist\ncriticizable\ncriticize\ncriticizer\ncriticizingly\ncritickin\ncriticship\ncriticule\ncritique\ncritling\ncrizzle\ncro\ncroak\nCroaker\ncroaker\ncroakily\ncroakiness\ncroaky\nCroat\nCroatan\nCroatian\ncroc\nCrocanthemum\ncrocard\ncroceic\ncrocein\ncroceine\ncroceous\ncrocetin\ncroche\ncrochet\ncrocheter\ncrocheting\ncroci\ncrocidolite\nCrocidura\ncrocin\ncrock\ncrocker\ncrockery\ncrockeryware\ncrocket\ncrocketed\ncrocky\ncrocodile\nCrocodilia\ncrocodilian\nCrocodilidae\ncrocodiline\ncrocodilite\ncrocodiloid\nCrocodilus\nCrocodylidae\nCrocodylus\ncrocoisite\ncrocoite\ncroconate\ncroconic\nCrocosmia\nCrocus\ncrocus\ncrocused\ncroft\ncrofter\ncrofterization\ncrofterize\ncrofting\ncroftland\ncroisette\ncroissante\nCrokinole\nCrom\ncromaltite\ncrome\nCromer\nCromerian\ncromfordite\ncromlech\ncromorna\ncromorne\nCromwell\nCromwellian\nCronartium\ncrone\ncroneberry\ncronet\nCronian\ncronish\ncronk\ncronkness\ncronstedtite\ncrony\ncrood\ncroodle\ncrook\ncrookback\ncrookbacked\ncrookbill\ncrookbilled\ncrooked\ncrookedly\ncrookedness\ncrooken\ncrookesite\ncrookfingered\ncrookheaded\ncrookkneed\ncrookle\ncrooklegged\ncrookneck\ncrooknecked\ncrooknosed\ncrookshouldered\ncrooksided\ncrooksterned\ncrooktoothed\ncrool\nCroomia\ncroon\ncrooner\ncrooning\ncrooningly\ncrop\ncrophead\ncropland\ncropman\ncroppa\ncropper\ncroppie\ncropplecrown\ncroppy\ncropshin\ncropsick\ncropsickness\ncropweed\ncroquet\ncroquette\ncrore\ncrosa\nCrosby\ncrosier\ncrosiered\ncrosnes\ncross\ncrossability\ncrossable\ncrossarm\ncrossband\ncrossbar\ncrossbeak\ncrossbeam\ncrossbelt\ncrossbill\ncrossbolt\ncrossbolted\ncrossbones\ncrossbow\ncrossbowman\ncrossbred\ncrossbreed\ncrosscurrent\ncrosscurrented\ncrosscut\ncrosscutter\ncrosscutting\ncrosse\ncrossed\ncrosser\ncrossette\ncrossfall\ncrossfish\ncrossflow\ncrossflower\ncrossfoot\ncrosshackle\ncrosshand\ncrosshatch\ncrosshaul\ncrosshauling\ncrosshead\ncrossing\ncrossite\ncrossjack\ncrosslegs\ncrosslet\ncrossleted\ncrosslight\ncrosslighted\ncrossline\ncrossly\ncrossness\ncrossopodia\ncrossopterygian\nCrossopterygii\nCrossosoma\nCrossosomataceae\ncrossosomataceous\ncrossover\ncrosspatch\ncrosspath\ncrosspiece\ncrosspoint\ncrossrail\ncrossroad\ncrossroads\ncrossrow\ncrossruff\ncrosstail\ncrosstie\ncrosstied\ncrosstoes\ncrosstrack\ncrosstree\ncrosswalk\ncrossway\ncrossways\ncrossweb\ncrossweed\ncrosswise\ncrossword\ncrosswort\ncrostarie\ncrotal\nCrotalaria\ncrotalic\nCrotalidae\ncrotaliform\nCrotalinae\ncrotaline\ncrotalism\ncrotalo\ncrotaloid\ncrotalum\nCrotalus\ncrotaphic\ncrotaphion\ncrotaphite\ncrotaphitic\nCrotaphytus\ncrotch\ncrotched\ncrotchet\ncrotcheteer\ncrotchetiness\ncrotchety\ncrotchy\ncrotin\nCroton\ncrotonaldehyde\ncrotonate\ncrotonic\ncrotonization\ncrotonyl\ncrotonylene\nCrotophaga\ncrottels\ncrottle\ncrotyl\ncrouch\ncrouchant\ncrouched\ncroucher\ncrouching\ncrouchingly\ncrounotherapy\ncroup\ncroupade\ncroupal\ncroupe\ncrouperbush\ncroupier\ncroupily\ncroupiness\ncroupous\ncroupy\ncrouse\ncrousely\ncrout\ncroute\ncrouton\ncrow\ncrowbait\ncrowbar\ncrowberry\ncrowbill\ncrowd\ncrowded\ncrowdedly\ncrowdedness\ncrowder\ncrowdweed\ncrowdy\ncrower\ncrowflower\ncrowfoot\ncrowfooted\ncrowhop\ncrowing\ncrowingly\ncrowkeeper\ncrowl\ncrown\ncrownbeard\ncrowned\ncrowner\ncrownless\ncrownlet\ncrownling\ncrownmaker\ncrownwork\ncrownwort\ncrowshay\ncrowstep\ncrowstepped\ncrowstick\ncrowstone\ncrowtoe\ncroy\ncroyden\ncroydon\ncroze\ncrozer\ncrozzle\ncrozzly\ncrubeen\ncruce\ncruces\ncrucethouse\ncruche\ncrucial\ncruciality\ncrucially\ncrucian\nCrucianella\ncruciate\ncruciately\ncruciation\ncrucible\nCrucibulum\ncrucifer\nCruciferae\ncruciferous\ncrucificial\ncrucified\ncrucifier\ncrucifix\ncrucifixion\ncruciform\ncruciformity\ncruciformly\ncrucify\ncrucigerous\ncrucilly\ncrucily\ncruck\ncrude\ncrudely\ncrudeness\ncrudity\ncrudwort\ncruel\ncruelhearted\ncruelize\ncruelly\ncruelness\ncruels\ncruelty\ncruent\ncruentation\ncruet\ncruety\ncruise\ncruiser\ncruisken\ncruive\ncruller\ncrum\ncrumb\ncrumbable\ncrumbcloth\ncrumber\ncrumble\ncrumblement\ncrumblet\ncrumbliness\ncrumblingness\ncrumblings\ncrumbly\ncrumby\ncrumen\ncrumenal\ncrumlet\ncrummie\ncrummier\ncrummiest\ncrummock\ncrummy\ncrump\ncrumper\ncrumpet\ncrumple\ncrumpled\ncrumpler\ncrumpling\ncrumply\ncrumpy\ncrunch\ncrunchable\ncrunchiness\ncrunching\ncrunchingly\ncrunchingness\ncrunchweed\ncrunchy\ncrunk\ncrunkle\ncrunodal\ncrunode\ncrunt\ncruor\ncrupper\ncrural\ncrureus\ncrurogenital\ncruroinguinal\ncrurotarsal\ncrus\ncrusade\ncrusader\ncrusado\nCrusca\ncruse\ncrush\ncrushability\ncrushable\ncrushed\ncrusher\ncrushing\ncrushingly\ncrusie\ncrusily\ncrust\ncrusta\nCrustacea\ncrustaceal\ncrustacean\ncrustaceological\ncrustaceologist\ncrustaceology\ncrustaceous\ncrustade\ncrustal\ncrustalogical\ncrustalogist\ncrustalogy\ncrustate\ncrustated\ncrustation\ncrusted\ncrustedly\ncruster\ncrustific\ncrustification\ncrustily\ncrustiness\ncrustless\ncrustose\ncrustosis\ncrusty\ncrutch\ncrutched\ncrutcher\ncrutching\ncrutchlike\ncruth\ncrutter\ncrux\ncruzeiro\ncry\ncryable\ncryaesthesia\ncryalgesia\ncryanesthesia\ncrybaby\ncryesthesia\ncrying\ncryingly\ncrymodynia\ncrymotherapy\ncryoconite\ncryogen\ncryogenic\ncryogenics\ncryogeny\ncryohydrate\ncryohydric\ncryolite\ncryometer\ncryophile\ncryophilic\ncryophoric\ncryophorus\ncryophyllite\ncryophyte\ncryoplankton\ncryoscope\ncryoscopic\ncryoscopy\ncryosel\ncryostase\ncryostat\ncrypt\ncrypta\ncryptal\ncryptamnesia\ncryptamnesic\ncryptanalysis\ncryptanalyst\ncryptarch\ncryptarchy\ncrypted\nCrypteronia\nCrypteroniaceae\ncryptesthesia\ncryptesthetic\ncryptic\ncryptical\ncryptically\ncryptoagnostic\ncryptobatholithic\ncryptobranch\nCryptobranchia\nCryptobranchiata\ncryptobranchiate\nCryptobranchidae\nCryptobranchus\ncryptocarp\ncryptocarpic\ncryptocarpous\nCryptocarya\nCryptocephala\ncryptocephalous\nCryptocerata\ncryptocerous\ncryptoclastic\nCryptocleidus\ncryptococci\ncryptococcic\nCryptococcus\ncryptococcus\ncryptocommercial\ncryptocrystalline\ncryptocrystallization\ncryptodeist\nCryptodira\ncryptodiran\ncryptodire\ncryptodirous\ncryptodouble\ncryptodynamic\ncryptogam\nCryptogamia\ncryptogamian\ncryptogamic\ncryptogamical\ncryptogamist\ncryptogamous\ncryptogamy\ncryptogenetic\ncryptogenic\ncryptogenous\nCryptoglaux\ncryptoglioma\ncryptogram\nCryptogramma\ncryptogrammatic\ncryptogrammatical\ncryptogrammatist\ncryptogrammic\ncryptograph\ncryptographal\ncryptographer\ncryptographic\ncryptographical\ncryptographically\ncryptographist\ncryptography\ncryptoheresy\ncryptoheretic\ncryptoinflationist\ncryptolite\ncryptologist\ncryptology\ncryptolunatic\ncryptomere\nCryptomeria\ncryptomerous\ncryptomnesia\ncryptomnesic\ncryptomonad\nCryptomonadales\nCryptomonadina\ncryptonema\nCryptonemiales\ncryptoneurous\ncryptonym\ncryptonymous\ncryptopapist\ncryptoperthite\nCryptophagidae\ncryptophthalmos\nCryptophyceae\ncryptophyte\ncryptopine\ncryptoporticus\nCryptoprocta\ncryptoproselyte\ncryptoproselytism\ncryptopyic\ncryptopyrrole\ncryptorchid\ncryptorchidism\ncryptorchis\nCryptorhynchus\ncryptorrhesis\ncryptorrhetic\ncryptoscope\ncryptoscopy\ncryptosplenetic\nCryptostegia\ncryptostoma\nCryptostomata\ncryptostomate\ncryptostome\nCryptotaenia\ncryptous\ncryptovalence\ncryptovalency\ncryptozonate\nCryptozonia\ncryptozygosity\ncryptozygous\nCrypturi\nCrypturidae\ncrystal\ncrystallic\ncrystalliferous\ncrystalliform\ncrystalligerous\ncrystallin\ncrystalline\ncrystallinity\ncrystallite\ncrystallitic\ncrystallitis\ncrystallizability\ncrystallizable\ncrystallization\ncrystallize\ncrystallized\ncrystallizer\ncrystalloblastic\ncrystallochemical\ncrystallochemistry\ncrystallogenesis\ncrystallogenetic\ncrystallogenic\ncrystallogenical\ncrystallogeny\ncrystallogram\ncrystallographer\ncrystallographic\ncrystallographical\ncrystallographically\ncrystallography\ncrystalloid\ncrystalloidal\ncrystallology\ncrystalloluminescence\ncrystallomagnetic\ncrystallomancy\ncrystallometric\ncrystallometry\ncrystallophyllian\ncrystallose\ncrystallurgy\ncrystalwort\ncrystic\ncrystograph\ncrystoleum\nCrystolon\ncrystosphene\ncsardas\nCtenacanthus\nctene\nctenidial\nctenidium\ncteniform\nCtenocephalus\nctenocyst\nctenodactyl\nCtenodipterini\nctenodont\nCtenodontidae\nCtenodus\nctenoid\nctenoidean\nCtenoidei\nctenoidian\nctenolium\nCtenophora\nctenophoral\nctenophoran\nctenophore\nctenophoric\nctenophorous\nCtenoplana\nCtenostomata\nctenostomatous\nctenostome\nctetology\ncuadra\nCuailnge\ncuapinole\ncuarenta\ncuarta\ncuarteron\ncuartilla\ncuartillo\ncub\nCuba\ncubage\nCuban\ncubangle\ncubanite\nCubanize\ncubatory\ncubature\ncubbing\ncubbish\ncubbishly\ncubbishness\ncubby\ncubbyhole\ncubbyhouse\ncubbyyew\ncubdom\ncube\ncubeb\ncubelet\nCubelium\ncuber\ncubhood\ncubi\ncubic\ncubica\ncubical\ncubically\ncubicalness\ncubicity\ncubicle\ncubicly\ncubicone\ncubicontravariant\ncubicovariant\ncubicular\ncubiculum\ncubiform\ncubism\ncubist\ncubit\ncubital\ncubitale\ncubited\ncubitiere\ncubito\ncubitocarpal\ncubitocutaneous\ncubitodigital\ncubitometacarpal\ncubitopalmar\ncubitoplantar\ncubitoradial\ncubitus\ncubmaster\ncubocalcaneal\ncuboctahedron\ncubocube\ncubocuneiform\ncubododecahedral\ncuboid\ncuboidal\ncuboides\ncubomancy\nCubomedusae\ncubomedusan\ncubometatarsal\ncubonavicular\nCuchan\nCuchulainn\ncuck\ncuckhold\ncuckold\ncuckoldom\ncuckoldry\ncuckoldy\ncuckoo\ncuckooflower\ncuckoomaid\ncuckoopint\ncuckoopintle\ncuckstool\ncucoline\nCucujid\nCucujidae\nCucujus\nCuculi\nCuculidae\ncuculiform\nCuculiformes\ncuculine\ncuculla\ncucullaris\ncucullate\ncucullately\ncuculliform\ncucullus\ncuculoid\nCuculus\nCucumaria\nCucumariidae\ncucumber\ncucumiform\nCucumis\ncucurbit\nCucurbita\nCucurbitaceae\ncucurbitaceous\ncucurbite\ncucurbitine\ncud\ncudava\ncudbear\ncudden\ncuddle\ncuddleable\ncuddlesome\ncuddly\nCuddy\ncuddy\ncuddyhole\ncudgel\ncudgeler\ncudgerie\ncudweed\ncue\ncueball\ncueca\ncueist\ncueman\ncuemanship\ncuerda\ncuesta\nCueva\ncuff\ncuffer\ncuffin\ncuffy\ncuffyism\ncuggermugger\ncuichunchulli\ncuinage\ncuir\ncuirass\ncuirassed\ncuirassier\ncuisinary\ncuisine\ncuissard\ncuissart\ncuisse\ncuissen\ncuisten\nCuitlateco\ncuittikin\nCujam\ncuke\nCulavamsa\nculbut\nCuldee\nculebra\nculet\nculeus\nCulex\nculgee\nculicid\nCulicidae\nculicidal\nculicide\nculiciform\nculicifugal\nculicifuge\nCulicinae\nculicine\nCulicoides\nculilawan\nculinarily\nculinary\ncull\nculla\ncullage\nCullen\nculler\ncullet\nculling\ncullion\ncullis\ncully\nculm\nculmen\nculmicolous\nculmiferous\nculmigenous\nculminal\nculminant\nculminate\nculmination\nculmy\nculotte\nculottes\nculottic\nculottism\nculpa\nculpability\nculpable\nculpableness\nculpably\nculpatory\nculpose\nculprit\ncult\ncultch\ncultellation\ncultellus\nculteranismo\ncultic\ncultigen\ncultirostral\nCultirostres\ncultish\ncultism\ncultismo\ncultist\ncultivability\ncultivable\ncultivably\ncultivar\ncultivatability\ncultivatable\ncultivate\ncultivated\ncultivation\ncultivator\ncultrate\ncultrated\ncultriform\ncultrirostral\nCultrirostres\ncultual\nculturable\ncultural\nculturally\nculture\ncultured\nculturine\nculturist\nculturization\nculturize\nculturological\nculturologically\nculturologist\nculturology\ncultus\nculver\nculverfoot\nculverhouse\nculverin\nculverineer\nculverkey\nculvert\nculvertage\nculverwort\ncum\nCumacea\ncumacean\ncumaceous\nCumaean\ncumal\ncumaldehyde\nCumanagoto\ncumaphyte\ncumaphytic\ncumaphytism\nCumar\ncumay\ncumbent\ncumber\ncumberer\ncumberlandite\ncumberless\ncumberment\ncumbersome\ncumbersomely\ncumbersomeness\ncumberworld\ncumbha\ncumbly\ncumbraite\ncumbrance\ncumbre\nCumbrian\ncumbrous\ncumbrously\ncumbrousness\ncumbu\ncumene\ncumengite\ncumenyl\ncumflutter\ncumhal\ncumic\ncumidin\ncumidine\ncumin\ncuminal\ncuminic\ncuminoin\ncuminol\ncuminole\ncuminseed\ncuminyl\ncummer\ncummerbund\ncummin\ncummingtonite\ncumol\ncump\ncumshaw\ncumulant\ncumular\ncumulate\ncumulately\ncumulation\ncumulatist\ncumulative\ncumulatively\ncumulativeness\ncumuli\ncumuliform\ncumulite\ncumulophyric\ncumulose\ncumulous\ncumulus\ncumyl\nCuna\ncunabular\nCunan\nCunarder\nCunas\ncunctation\ncunctatious\ncunctative\ncunctator\ncunctatorship\ncunctatury\ncunctipotent\ncundeamor\ncuneal\ncuneate\ncuneately\ncuneatic\ncuneator\ncuneiform\ncuneiformist\ncuneocuboid\ncuneonavicular\ncuneoscaphoid\ncunette\ncuneus\ncungeboi\ncunicular\ncuniculus\ncunila\ncunjah\ncunjer\ncunjevoi\ncunner\ncunnilinctus\ncunnilingus\ncunning\nCunninghamia\ncunningly\ncunningness\nCunonia\nCunoniaceae\ncunoniaceous\ncunye\nCunza\nCuon\ncuorin\ncup\nCupania\ncupay\ncupbearer\ncupboard\ncupcake\ncupel\ncupeler\ncupellation\ncupflower\ncupful\nCuphea\ncuphead\ncupholder\nCupid\ncupidinous\ncupidity\ncupidon\ncupidone\ncupless\ncupmaker\ncupmaking\ncupman\ncupmate\ncupola\ncupolaman\ncupolar\ncupolated\ncupped\ncupper\ncupping\ncuppy\ncuprammonia\ncuprammonium\ncupreine\ncuprene\ncupreous\nCupressaceae\ncupressineous\nCupressinoxylon\nCupressus\ncupric\ncupride\ncupriferous\ncuprite\ncuproammonium\ncuprobismutite\ncuprocyanide\ncuprodescloizite\ncuproid\ncuproiodargyrite\ncupromanganese\ncupronickel\ncuproplumbite\ncuproscheelite\ncuprose\ncuprosilicon\ncuprotungstite\ncuprous\ncuprum\ncupseed\ncupstone\ncupula\ncupulate\ncupule\nCupuliferae\ncupuliferous\ncupuliform\ncur\ncurability\ncurable\ncurableness\ncurably\ncuracao\ncuracy\ncurare\ncurarine\ncurarization\ncurarize\ncurassow\ncuratage\ncurate\ncuratel\ncurateship\ncuratess\ncuratial\ncuratic\ncuration\ncurative\ncuratively\ncurativeness\ncuratize\ncuratolatry\ncurator\ncuratorial\ncuratorium\ncuratorship\ncuratory\ncuratrix\nCuravecan\ncurb\ncurbable\ncurber\ncurbing\ncurbless\ncurblike\ncurbstone\ncurbstoner\ncurby\ncurcas\ncurch\ncurcuddoch\nCurculio\ncurculionid\nCurculionidae\ncurculionist\nCurcuma\ncurcumin\ncurd\ncurdiness\ncurdle\ncurdler\ncurdly\ncurdwort\ncurdy\ncure\ncureless\ncurelessly\ncuremaster\ncurer\ncurettage\ncurette\ncurettement\ncurfew\ncurial\ncurialism\ncurialist\ncurialistic\ncuriality\ncuriate\nCuriatii\ncuriboca\ncurie\ncuriescopy\ncurietherapy\ncurin\ncurine\ncuring\ncurio\ncuriologic\ncuriologically\ncuriologics\ncuriology\ncuriomaniac\ncuriosa\ncuriosity\ncurioso\ncurious\ncuriously\ncuriousness\ncurite\nCuritis\ncurium\ncurl\ncurled\ncurledly\ncurledness\ncurler\ncurlew\ncurlewberry\ncurlicue\ncurliewurly\ncurlike\ncurlily\ncurliness\ncurling\ncurlingly\ncurlpaper\ncurly\ncurlycue\ncurlyhead\ncurlylocks\ncurmudgeon\ncurmudgeonery\ncurmudgeonish\ncurmudgeonly\ncurmurring\ncurn\ncurney\ncurnock\ncurple\ncurr\ncurrach\ncurrack\ncurragh\ncurrant\ncurratow\ncurrawang\ncurrency\ncurrent\ncurrently\ncurrentness\ncurrentwise\ncurricle\ncurricula\ncurricular\ncurricularization\ncurricularize\ncurriculum\ncurried\ncurrier\ncurriery\ncurrish\ncurrishly\ncurrishness\ncurry\ncurrycomb\ncurryfavel\nCursa\ncursal\ncurse\ncursed\ncursedly\ncursedness\ncurser\ncurship\ncursitor\ncursive\ncursively\ncursiveness\ncursor\ncursorary\nCursores\nCursoria\ncursorial\nCursoriidae\ncursorily\ncursoriness\ncursorious\nCursorius\ncursory\ncurst\ncurstful\ncurstfully\ncurstly\ncurstness\ncursus\nCurt\ncurt\ncurtail\ncurtailed\ncurtailedly\ncurtailer\ncurtailment\ncurtain\ncurtaining\ncurtainless\ncurtainwise\ncurtal\nCurtana\ncurtate\ncurtation\ncurtesy\ncurtilage\nCurtis\nCurtise\ncurtly\ncurtness\ncurtsy\ncurua\ncuruba\nCurucaneca\nCurucanecan\ncurucucu\ncurule\nCuruminaca\nCuruminacan\nCurupira\ncururo\ncurvaceous\ncurvaceousness\ncurvacious\ncurvant\ncurvate\ncurvation\ncurvature\ncurve\ncurved\ncurvedly\ncurvedness\ncurver\ncurvesome\ncurvesomeness\ncurvet\ncurvicaudate\ncurvicostate\ncurvidentate\ncurvifoliate\ncurviform\ncurvilineal\ncurvilinear\ncurvilinearity\ncurvilinearly\ncurvimeter\ncurvinervate\ncurvinerved\ncurvirostral\nCurvirostres\ncurviserial\ncurvital\ncurvity\ncurvograph\ncurvometer\ncurvous\ncurvulate\ncurvy\ncurwhibble\ncurwillet\ncuscohygrine\ncusconine\nCuscus\ncuscus\nCuscuta\nCuscutaceae\ncuscutaceous\ncusec\ncuselite\ncush\ncushag\ncushat\ncushaw\ncushewbird\ncushion\ncushioned\ncushionflower\ncushionless\ncushionlike\ncushiony\nCushite\nCushitic\ncushlamochree\ncushy\ncusie\ncusinero\ncusk\ncusp\ncuspal\ncusparidine\ncusparine\ncuspate\ncusped\ncuspid\ncuspidal\ncuspidate\ncuspidation\ncuspidine\ncuspidor\ncuspule\ncuss\ncussed\ncussedly\ncussedness\ncusser\ncusso\ncustard\ncusterite\ncustodee\ncustodes\ncustodial\ncustodiam\ncustodian\ncustodianship\ncustodier\ncustody\ncustom\ncustomable\ncustomarily\ncustomariness\ncustomary\ncustomer\ncustomhouse\ncustoms\ncustumal\ncut\ncutaneal\ncutaneous\ncutaneously\ncutaway\ncutback\ncutch\ncutcher\ncutcherry\ncute\ncutely\ncuteness\nCuterebra\nCuthbert\ncutheal\ncuticle\ncuticolor\ncuticula\ncuticular\ncuticularization\ncuticularize\ncuticulate\ncutidure\ncutie\ncutification\ncutigeral\ncutin\ncutinization\ncutinize\ncutireaction\ncutis\ncutisector\nCutiterebra\ncutitis\ncutization\ncutlass\ncutler\ncutleress\nCutleria\nCutleriaceae\ncutleriaceous\nCutleriales\ncutlery\ncutlet\ncutling\ncutlips\ncutocellulose\ncutoff\ncutout\ncutover\ncutpurse\ncuttable\ncuttage\ncuttail\ncuttanee\ncutted\ncutter\ncutterhead\ncutterman\ncutthroat\ncutting\ncuttingly\ncuttingness\ncuttle\ncuttlebone\ncuttlefish\ncuttler\ncuttoo\ncutty\ncuttyhunk\ncutup\ncutwater\ncutweed\ncutwork\ncutworm\ncuvette\nCuvierian\ncuvy\ncuya\nCuzceno\ncwierc\ncwm\ncyamelide\nCyamus\ncyan\ncyanacetic\ncyanamide\ncyananthrol\nCyanastraceae\nCyanastrum\ncyanate\ncyanaurate\ncyanauric\ncyanbenzyl\ncyancarbonic\nCyanea\ncyanean\ncyanemia\ncyaneous\ncyanephidrosis\ncyanformate\ncyanformic\ncyanhidrosis\ncyanhydrate\ncyanhydric\ncyanhydrin\ncyanic\ncyanicide\ncyanidation\ncyanide\ncyanidin\ncyanidine\ncyanidrosis\ncyanimide\ncyanin\ncyanine\ncyanite\ncyanize\ncyanmethemoglobin\ncyanoacetate\ncyanoacetic\ncyanoaurate\ncyanoauric\ncyanobenzene\ncyanocarbonic\ncyanochlorous\ncyanochroia\ncyanochroic\nCyanocitta\ncyanocrystallin\ncyanoderma\ncyanogen\ncyanogenesis\ncyanogenetic\ncyanogenic\ncyanoguanidine\ncyanohermidin\ncyanohydrin\ncyanol\ncyanole\ncyanomaclurin\ncyanometer\ncyanomethaemoglobin\ncyanomethemoglobin\ncyanometric\ncyanometry\ncyanopathic\ncyanopathy\ncyanophile\ncyanophilous\ncyanophoric\ncyanophose\nCyanophyceae\ncyanophycean\ncyanophyceous\ncyanophycin\ncyanopia\ncyanoplastid\ncyanoplatinite\ncyanoplatinous\ncyanopsia\ncyanose\ncyanosed\ncyanosis\nCyanospiza\ncyanotic\ncyanotrichite\ncyanotype\ncyanuramide\ncyanurate\ncyanuret\ncyanuric\ncyanurine\ncyanus\ncyaphenine\ncyath\nCyathaspis\nCyathea\nCyatheaceae\ncyatheaceous\ncyathiform\ncyathium\ncyathoid\ncyatholith\nCyathophyllidae\ncyathophylline\ncyathophylloid\nCyathophyllum\ncyathos\ncyathozooid\ncyathus\ncybernetic\ncyberneticist\ncybernetics\nCybister\ncycad\nCycadaceae\ncycadaceous\nCycadales\ncycadean\ncycadeoid\nCycadeoidea\ncycadeous\ncycadiform\ncycadlike\ncycadofilicale\nCycadofilicales\nCycadofilices\ncycadofilicinean\nCycadophyta\nCycas\nCycladic\ncyclamen\ncyclamin\ncyclamine\ncyclammonium\ncyclane\nCyclanthaceae\ncyclanthaceous\nCyclanthales\nCyclanthus\ncyclar\ncyclarthrodial\ncyclarthrsis\ncyclas\ncycle\ncyclecar\ncycledom\ncyclene\ncycler\ncyclesmith\nCycliae\ncyclian\ncyclic\ncyclical\ncyclically\ncyclicism\ncyclide\ncycling\ncyclism\ncyclist\ncyclistic\ncyclitic\ncyclitis\ncyclization\ncyclize\ncycloalkane\nCyclobothra\ncyclobutane\ncyclocoelic\ncyclocoelous\nCycloconium\ncyclodiolefin\ncycloganoid\nCycloganoidei\ncyclogram\ncyclograph\ncyclographer\ncycloheptane\ncycloheptanone\ncyclohexane\ncyclohexanol\ncyclohexanone\ncyclohexene\ncyclohexyl\ncycloid\ncycloidal\ncycloidally\ncycloidean\nCycloidei\ncycloidian\ncycloidotrope\ncyclolith\nCycloloma\ncyclomania\ncyclometer\ncyclometric\ncyclometrical\ncyclometry\nCyclomyaria\ncyclomyarian\ncyclonal\ncyclone\ncyclonic\ncyclonical\ncyclonically\ncyclonist\ncyclonite\ncyclonologist\ncyclonology\ncyclonometer\ncyclonoscope\ncycloolefin\ncycloparaffin\ncyclope\nCyclopean\ncyclopean\ncyclopedia\ncyclopedic\ncyclopedical\ncyclopedically\ncyclopedist\ncyclopentadiene\ncyclopentane\ncyclopentanone\ncyclopentene\nCyclopes\ncyclopes\ncyclophoria\ncyclophoric\nCyclophorus\ncyclophrenia\ncyclopia\nCyclopic\ncyclopism\ncyclopite\ncycloplegia\ncycloplegic\ncyclopoid\ncyclopropane\nCyclops\nCyclopteridae\ncyclopteroid\ncyclopterous\ncyclopy\ncyclorama\ncycloramic\nCyclorrhapha\ncyclorrhaphous\ncycloscope\ncyclose\ncyclosis\ncyclospermous\nCyclospondyli\ncyclospondylic\ncyclospondylous\nCyclosporales\nCyclosporeae\nCyclosporinae\ncyclosporous\nCyclostoma\nCyclostomata\ncyclostomate\nCyclostomatidae\ncyclostomatous\ncyclostome\nCyclostomes\nCyclostomi\nCyclostomidae\ncyclostomous\ncyclostrophic\ncyclostyle\nCyclotella\ncyclothem\ncyclothure\ncyclothurine\nCyclothurus\ncyclothyme\ncyclothymia\ncyclothymiac\ncyclothymic\ncyclotome\ncyclotomic\ncyclotomy\nCyclotosaurus\ncyclotron\ncyclovertebral\ncyclus\nCydippe\ncydippian\ncydippid\nCydippida\nCydonia\nCydonian\ncydonium\ncyesiology\ncyesis\ncygneous\ncygnet\nCygnid\nCygninae\ncygnine\nCygnus\ncyke\ncylinder\ncylindered\ncylinderer\ncylinderlike\ncylindraceous\ncylindrarthrosis\nCylindrella\ncylindrelloid\ncylindrenchyma\ncylindric\ncylindrical\ncylindricality\ncylindrically\ncylindricalness\ncylindricity\ncylindricule\ncylindriform\ncylindrite\ncylindrocellular\ncylindrocephalic\ncylindroconical\ncylindroconoidal\ncylindrocylindric\ncylindrodendrite\ncylindrograph\ncylindroid\ncylindroidal\ncylindroma\ncylindromatous\ncylindrometric\ncylindroogival\nCylindrophis\nCylindrosporium\ncylindruria\ncylix\nCyllenian\nCyllenius\ncyllosis\ncyma\ncymagraph\ncymaphen\ncymaphyte\ncymaphytic\ncymaphytism\ncymar\ncymation\ncymatium\ncymba\ncymbaeform\ncymbal\nCymbalaria\ncymbaleer\ncymbaler\ncymbaline\ncymbalist\ncymballike\ncymbalo\ncymbalon\ncymbate\nCymbella\ncymbiform\nCymbium\ncymbling\ncymbocephalic\ncymbocephalous\ncymbocephaly\nCymbopogon\ncyme\ncymelet\ncymene\ncymiferous\ncymling\nCymodoceaceae\ncymogene\ncymograph\ncymographic\ncymoid\nCymoidium\ncymometer\ncymophane\ncymophanous\ncymophenol\ncymoscope\ncymose\ncymosely\ncymotrichous\ncymotrichy\ncymous\nCymraeg\nCymric\nCymry\ncymule\ncymulose\ncynanche\nCynanchum\ncynanthropy\nCynara\ncynaraceous\ncynarctomachy\ncynareous\ncynaroid\ncynebot\ncynegetic\ncynegetics\ncynegild\ncynhyena\nCynias\ncyniatria\ncyniatrics\ncynic\ncynical\ncynically\ncynicalness\ncynicism\ncynicist\ncynipid\nCynipidae\ncynipidous\ncynipoid\nCynipoidea\nCynips\ncynism\ncynocephalic\ncynocephalous\ncynocephalus\ncynoclept\nCynocrambaceae\ncynocrambaceous\nCynocrambe\nCynodon\ncynodont\nCynodontia\nCynogale\ncynogenealogist\ncynogenealogy\nCynoglossum\nCynognathus\ncynography\ncynoid\nCynoidea\ncynology\nCynomoriaceae\ncynomoriaceous\nCynomorium\nCynomorpha\ncynomorphic\ncynomorphous\nCynomys\ncynophile\ncynophilic\ncynophilist\ncynophobe\ncynophobia\nCynopithecidae\ncynopithecoid\ncynopodous\ncynorrhodon\nCynosarges\nCynoscion\nCynosura\ncynosural\ncynosure\nCynosurus\ncynotherapy\nCynoxylon\nCynthia\nCynthian\nCynthiidae\nCynthius\ncyp\nCyperaceae\ncyperaceous\nCyperus\ncyphella\ncyphellate\nCyphomandra\ncyphonautes\ncyphonism\nCypraea\ncypraeid\nCypraeidae\ncypraeiform\ncypraeoid\ncypre\ncypres\ncypress\ncypressed\ncypressroot\nCypria\nCyprian\nCyprididae\nCypridina\nCypridinidae\ncypridinoid\nCyprina\ncyprine\ncyprinid\nCyprinidae\ncypriniform\ncyprinine\ncyprinodont\nCyprinodontes\nCyprinodontidae\ncyprinodontoid\ncyprinoid\nCyprinoidea\ncyprinoidean\nCyprinus\nCypriote\nCypripedium\nCypris\ncypsela\nCypseli\nCypselid\nCypselidae\ncypseliform\nCypseliformes\ncypseline\ncypseloid\ncypselomorph\nCypselomorphae\ncypselomorphic\ncypselous\nCypselus\ncyptozoic\nCyrano\nCyrenaic\nCyrenaicism\nCyrenian\nCyril\nCyrilla\nCyrillaceae\ncyrillaceous\nCyrillian\nCyrillianism\nCyrillic\ncyriologic\ncyriological\nCyrtandraceae\nCyrtidae\ncyrtoceracone\nCyrtoceras\ncyrtoceratite\ncyrtoceratitic\ncyrtograph\ncyrtolite\ncyrtometer\nCyrtomium\ncyrtopia\ncyrtosis\nCyrus\ncyrus\ncyst\ncystadenoma\ncystadenosarcoma\ncystal\ncystalgia\ncystamine\ncystaster\ncystatrophia\ncystatrophy\ncystectasia\ncystectasy\ncystectomy\ncysted\ncysteine\ncysteinic\ncystelcosis\ncystenchyma\ncystenchymatous\ncystencyte\ncysterethism\ncystic\ncysticarpic\ncysticarpium\ncysticercoid\ncysticercoidal\ncysticercosis\ncysticercus\ncysticolous\ncystid\nCystidea\ncystidean\ncystidicolous\ncystidium\ncystiferous\ncystiform\ncystigerous\nCystignathidae\ncystignathine\ncystine\ncystinuria\ncystirrhea\ncystis\ncystitis\ncystitome\ncystoadenoma\ncystocarcinoma\ncystocarp\ncystocarpic\ncystocele\ncystocolostomy\ncystocyte\ncystodynia\ncystoelytroplasty\ncystoenterocele\ncystoepiplocele\ncystoepithelioma\ncystofibroma\nCystoflagellata\ncystoflagellate\ncystogenesis\ncystogenous\ncystogram\ncystoid\nCystoidea\ncystoidean\ncystolith\ncystolithectomy\ncystolithiasis\ncystolithic\ncystoma\ncystomatous\ncystomorphous\ncystomyoma\ncystomyxoma\nCystonectae\ncystonectous\ncystonephrosis\ncystoneuralgia\ncystoparalysis\nCystophora\ncystophore\ncystophotography\ncystophthisis\ncystoplasty\ncystoplegia\ncystoproctostomy\nCystopteris\ncystoptosis\nCystopus\ncystopyelitis\ncystopyelography\ncystopyelonephritis\ncystoradiography\ncystorrhagia\ncystorrhaphy\ncystorrhea\ncystosarcoma\ncystoschisis\ncystoscope\ncystoscopic\ncystoscopy\ncystose\ncystospasm\ncystospastic\ncystospore\ncystostomy\ncystosyrinx\ncystotome\ncystotomy\ncystotrachelotomy\ncystoureteritis\ncystourethritis\ncystous\ncytase\ncytasic\nCytherea\nCytherean\nCytherella\nCytherellidae\nCytinaceae\ncytinaceous\nCytinus\ncytioderm\ncytisine\nCytisus\ncytitis\ncytoblast\ncytoblastema\ncytoblastemal\ncytoblastematous\ncytoblastemic\ncytoblastemous\ncytochemistry\ncytochrome\ncytochylema\ncytocide\ncytoclasis\ncytoclastic\ncytococcus\ncytocyst\ncytode\ncytodendrite\ncytoderm\ncytodiagnosis\ncytodieresis\ncytodieretic\ncytogamy\ncytogene\ncytogenesis\ncytogenetic\ncytogenetical\ncytogenetically\ncytogeneticist\ncytogenetics\ncytogenic\ncytogenous\ncytogeny\ncytoglobin\ncytohyaloplasm\ncytoid\ncytokinesis\ncytolist\ncytologic\ncytological\ncytologically\ncytologist\ncytology\ncytolymph\ncytolysin\ncytolysis\ncytolytic\ncytoma\ncytomere\ncytometer\ncytomicrosome\ncytomitome\ncytomorphosis\ncyton\ncytoparaplastin\ncytopathologic\ncytopathological\ncytopathologically\ncytopathology\nCytophaga\ncytophagous\ncytophagy\ncytopharynx\ncytophil\ncytophysics\ncytophysiology\ncytoplasm\ncytoplasmic\ncytoplast\ncytoplastic\ncytoproct\ncytopyge\ncytoreticulum\ncytoryctes\ncytosine\ncytosome\nCytospora\nCytosporina\ncytost\ncytostomal\ncytostome\ncytostroma\ncytostromatic\ncytotactic\ncytotaxis\ncytotoxic\ncytotoxin\ncytotrophoblast\ncytotrophy\ncytotropic\ncytotropism\ncytozoic\ncytozoon\ncytozymase\ncytozyme\ncytula\nCyzicene\ncyzicene\nczar\nczardas\nczardom\nczarevitch\nczarevna\nczarian\nczaric\nczarina\nczarinian\nczarish\nczarism\nczarist\nczaristic\nczaritza\nczarowitch\nczarowitz\nczarship\nCzech\nCzechic\nCzechish\nCzechization\nCzechoslovak\nCzechoslovakian\nD\nd\nda\ndaalder\ndab\ndabb\ndabba\ndabber\ndabble\ndabbler\ndabbling\ndabblingly\ndabblingness\ndabby\ndabchick\nDabih\nDabitis\ndablet\ndaboia\ndaboya\ndabster\ndace\nDacelo\nDaceloninae\ndacelonine\ndachshound\ndachshund\nDacian\ndacite\ndacitic\ndacker\ndacoit\ndacoitage\ndacoity\ndacryadenalgia\ndacryadenitis\ndacryagogue\ndacrycystalgia\nDacrydium\ndacryelcosis\ndacryoadenalgia\ndacryoadenitis\ndacryoblenorrhea\ndacryocele\ndacryocyst\ndacryocystalgia\ndacryocystitis\ndacryocystoblennorrhea\ndacryocystocele\ndacryocystoptosis\ndacryocystorhinostomy\ndacryocystosyringotomy\ndacryocystotome\ndacryocystotomy\ndacryohelcosis\ndacryohemorrhea\ndacryolite\ndacryolith\ndacryolithiasis\ndacryoma\ndacryon\ndacryops\ndacryopyorrhea\ndacryopyosis\ndacryosolenitis\ndacryostenosis\ndacryosyrinx\ndacryuria\nDactyl\ndactyl\ndactylar\ndactylate\ndactylic\ndactylically\ndactylioglyph\ndactylioglyphic\ndactylioglyphist\ndactylioglyphtic\ndactylioglyphy\ndactyliographer\ndactyliographic\ndactyliography\ndactyliology\ndactyliomancy\ndactylion\ndactyliotheca\nDactylis\ndactylist\ndactylitic\ndactylitis\ndactylogram\ndactylograph\ndactylographic\ndactylography\ndactyloid\ndactylology\ndactylomegaly\ndactylonomy\ndactylopatagium\nDactylopius\ndactylopodite\ndactylopore\nDactylopteridae\nDactylopterus\ndactylorhiza\ndactyloscopic\ndactyloscopy\ndactylose\ndactylosternal\ndactylosymphysis\ndactylotheca\ndactylous\ndactylozooid\ndactylus\nDacus\ndacyorrhea\ndad\nDada\ndada\nDadaism\nDadaist\ndadap\nDadayag\ndadder\ndaddle\ndaddock\ndaddocky\ndaddy\ndaddynut\ndade\ndadenhudd\ndado\nDadoxylon\nDadu\ndaduchus\nDadupanthi\ndae\nDaedal\ndaedal\nDaedalea\nDaedalean\nDaedalian\nDaedalic\nDaedalidae\nDaedalist\ndaedaloid\nDaedalus\ndaemon\nDaemonelix\ndaemonic\ndaemonurgist\ndaemonurgy\ndaemony\ndaer\ndaff\ndaffery\ndaffing\ndaffish\ndaffle\ndaffodil\ndaffodilly\ndaffy\ndaffydowndilly\nDafla\ndaft\ndaftberry\ndaftlike\ndaftly\ndaftness\ndag\ndagaba\ndagame\ndagassa\nDagbamba\nDagbane\ndagesh\nDagestan\ndagga\ndagger\ndaggerbush\ndaggered\ndaggerlike\ndaggerproof\ndaggers\ndaggle\ndaggletail\ndaggletailed\ndaggly\ndaggy\ndaghesh\ndaglock\nDagmar\nDago\ndagoba\nDagomba\ndags\nDaguerrean\ndaguerreotype\ndaguerreotyper\ndaguerreotypic\ndaguerreotypist\ndaguerreotypy\ndah\ndahabeah\nDahlia\nDahoman\nDahomeyan\ndahoon\nDaibutsu\ndaidle\ndaidly\nDaijo\ndaiker\ndaikon\nDail\nDailamite\ndailiness\ndaily\ndaimen\ndaimiate\ndaimio\ndaimon\ndaimonic\ndaimonion\ndaimonistic\ndaimonology\ndain\ndaincha\ndainteth\ndaintify\ndaintihood\ndaintily\ndaintiness\ndaintith\ndainty\nDaira\ndaira\ndairi\ndairy\ndairying\ndairymaid\ndairyman\ndairywoman\ndais\ndaisied\ndaisy\ndaisybush\ndaitya\ndaiva\ndak\ndaker\nDakhini\ndakir\nDakota\ndaktylon\ndaktylos\ndal\ndalar\nDalarnian\nDalbergia\nDalcassian\nDale\ndale\nDalea\nDalecarlian\ndaleman\ndaler\ndalesfolk\ndalesman\ndalespeople\ndaleswoman\ndaleth\ndali\nDalibarda\ndalk\ndallack\ndalle\ndalles\ndalliance\ndallier\ndally\ndallying\ndallyingly\nDalmania\nDalmanites\nDalmatian\nDalmatic\ndalmatic\nDalradian\ndalt\ndalteen\nDalton\ndalton\nDaltonian\nDaltonic\nDaltonism\nDaltonist\ndam\ndama\ndamage\ndamageability\ndamageable\ndamageableness\ndamageably\ndamagement\ndamager\ndamages\ndamagingly\ndaman\nDamara\nDamascene\ndamascene\ndamascened\ndamascener\ndamascenine\nDamascus\ndamask\ndamaskeen\ndamasse\ndamassin\nDamayanti\ndambonitol\ndambose\ndambrod\ndame\ndamenization\ndamewort\nDamgalnunna\nDamia\ndamiana\nDamianist\ndamie\ndamier\ndamine\ndamkjernite\ndamlike\ndammar\nDammara\ndamme\ndammer\ndammish\ndamn\ndamnability\ndamnable\ndamnableness\ndamnably\ndamnation\ndamnatory\ndamned\ndamner\ndamnification\ndamnify\nDamnii\ndamning\ndamningly\ndamningness\ndamnonians\nDamnonii\ndamnous\ndamnously\nDamoclean\nDamocles\nDamoetas\ndamoiseau\nDamon\nDamone\ndamonico\ndamourite\ndamp\ndampang\ndamped\ndampen\ndampener\ndamper\ndamping\ndampish\ndampishly\ndampishness\ndamply\ndampness\ndampproof\ndampproofer\ndampproofing\ndampy\ndamsel\ndamselfish\ndamselhood\ndamson\nDan\ndan\nDana\nDanaan\nDanagla\nDanai\nDanaid\ndanaid\nDanaidae\ndanaide\nDanaidean\nDanainae\ndanaine\nDanais\ndanaite\nDanakil\ndanalite\ndanburite\ndancalite\ndance\ndancer\ndanceress\ndancery\ndancette\ndancing\ndancingly\ndand\ndanda\ndandelion\ndander\ndandiacal\ndandiacally\ndandically\ndandification\ndandify\ndandilly\ndandily\ndandiprat\ndandizette\ndandle\ndandler\ndandling\ndandlingly\ndandruff\ndandruffy\ndandy\ndandydom\ndandyish\ndandyism\ndandyize\ndandyling\nDane\nDaneball\nDaneflower\nDanegeld\nDanelaw\nDaneweed\nDanewort\ndang\ndanger\ndangerful\ndangerfully\ndangerless\ndangerous\ndangerously\ndangerousness\ndangersome\ndangle\ndangleberry\ndanglement\ndangler\ndanglin\ndangling\ndanglingly\nDani\nDanian\nDanic\ndanicism\nDaniel\nDaniele\nDanielic\nDanielle\nDaniglacial\ndanio\nDanish\nDanism\nDanite\nDanization\nDanize\ndank\nDankali\ndankish\ndankishness\ndankly\ndankness\ndanli\nDannebrog\ndannemorite\ndanner\nDannie\ndannock\nDanny\ndanoranja\ndansant\ndanseuse\ndanta\nDantean\nDantesque\nDanthonia\nDantist\nDantology\nDantomania\ndanton\nDantonesque\nDantonist\nDantophilist\nDantophily\nDanube\nDanubian\nDanuri\nDanzig\nDanziger\ndao\ndaoine\ndap\nDapedium\nDapedius\nDaphnaceae\nDaphne\nDaphnean\nDaphnephoria\ndaphnetin\nDaphnia\ndaphnin\ndaphnioid\nDaphnis\ndaphnoid\ndapicho\ndapico\ndapifer\ndapper\ndapperling\ndapperly\ndapperness\ndapple\ndappled\ndar\ndarabukka\ndarac\ndaraf\nDarapti\ndarat\ndarbha\ndarby\nDarbyism\nDarbyite\nDarci\nDard\nDardan\ndardanarius\nDardani\ndardanium\ndardaol\nDardic\nDardistan\ndare\ndareall\ndaredevil\ndaredevilism\ndaredevilry\ndaredeviltry\ndareful\nDaren\ndarer\nDares\ndaresay\ndarg\ndargah\ndarger\nDarghin\nDargo\ndargsman\ndargue\ndari\ndaribah\ndaric\nDarien\nDarii\nDarin\ndaring\ndaringly\ndaringness\ndariole\nDarius\nDarjeeling\ndark\ndarken\ndarkener\ndarkening\ndarkful\ndarkhearted\ndarkheartedness\ndarkish\ndarkishness\ndarkle\ndarkling\ndarklings\ndarkly\ndarkmans\ndarkness\ndarkroom\ndarkskin\ndarksome\ndarksomeness\ndarky\ndarling\ndarlingly\ndarlingness\nDarlingtonia\ndarn\ndarnation\ndarned\ndarnel\ndarner\ndarnex\ndarning\ndaroga\ndaroo\ndarr\ndarrein\nDarrell\nDarren\nDarryl\ndarshana\nDarsonval\nDarsonvalism\ndarst\ndart\nDartagnan\ndartars\ndartboard\ndarter\ndarting\ndartingly\ndartingness\ndartle\ndartlike\ndartman\nDartmoor\ndartoic\ndartoid\ndartos\ndartre\ndartrose\ndartrous\ndarts\ndartsman\nDarwinian\nDarwinical\nDarwinically\nDarwinism\nDarwinist\nDarwinistic\nDarwinite\nDarwinize\nDaryl\ndarzee\ndas\nDaschagga\ndash\ndashboard\ndashed\ndashedly\ndashee\ndasheen\ndasher\ndashing\ndashingly\ndashmaker\nDashnak\nDashnakist\nDashnaktzutiun\ndashplate\ndashpot\ndashwheel\ndashy\ndasi\nDasiphora\ndasnt\ndassie\ndassy\ndastard\ndastardize\ndastardliness\ndastardly\ndastur\ndasturi\nDasya\nDasyatidae\nDasyatis\nDasycladaceae\ndasycladaceous\nDasylirion\ndasymeter\ndasypaedal\ndasypaedes\ndasypaedic\nDasypeltis\ndasyphyllous\nDasypodidae\ndasypodoid\nDasyprocta\nDasyproctidae\ndasyproctine\nDasypus\nDasystephana\ndasyure\nDasyuridae\ndasyurine\ndasyuroid\nDasyurus\nDasyus\ndata\ndatable\ndatableness\ndatably\ndataria\ndatary\ndatch\ndatcha\ndate\ndateless\ndatemark\ndater\ndatil\ndating\ndation\nDatisca\nDatiscaceae\ndatiscaceous\ndatiscetin\ndatiscin\ndatiscoside\nDatisi\nDatism\ndatival\ndative\ndatively\ndativogerundial\ndatolite\ndatolitic\ndattock\ndatum\nDatura\ndaturic\ndaturism\ndaub\ndaube\nDaubentonia\nDaubentoniidae\ndauber\ndaubery\ndaubing\ndaubingly\ndaubreeite\ndaubreelite\ndaubster\ndauby\nDaucus\ndaud\ndaughter\ndaughterhood\ndaughterkin\ndaughterless\ndaughterlike\ndaughterliness\ndaughterling\ndaughterly\ndaughtership\nDaulias\ndaunch\ndauncy\nDaunii\ndaunt\ndaunter\ndaunting\ndauntingly\ndauntingness\ndauntless\ndauntlessly\ndauntlessness\ndaunton\ndauphin\ndauphine\ndauphiness\nDaur\nDauri\ndaut\ndautie\ndauw\ndavach\nDavallia\nDave\ndaven\ndavenport\ndaver\ndaverdy\nDavid\nDavidian\nDavidic\nDavidical\nDavidist\ndavidsonite\nDaviesia\ndaviesite\ndavit\ndavoch\nDavy\ndavy\ndavyne\ndaw\ndawdle\ndawdler\ndawdling\ndawdlingly\ndawdy\ndawish\ndawkin\nDawn\ndawn\ndawning\ndawnlight\ndawnlike\ndawnstreak\ndawnward\ndawny\nDawson\nDawsonia\nDawsoniaceae\ndawsoniaceous\ndawsonite\ndawtet\ndawtit\ndawut\nday\ndayabhaga\nDayakker\ndayal\ndaybeam\ndayberry\ndayblush\ndaybook\ndaybreak\ndaydawn\ndaydream\ndaydreamer\ndaydreamy\ndaydrudge\ndayflower\ndayfly\ndaygoing\ndayless\ndaylight\ndaylit\ndaylong\ndayman\ndaymare\ndaymark\ndayroom\ndays\ndayshine\ndaysman\ndayspring\ndaystar\ndaystreak\ndaytale\ndaytide\ndaytime\ndaytimes\ndayward\ndaywork\ndayworker\ndaywrit\nDaza\ndaze\ndazed\ndazedly\ndazedness\ndazement\ndazingly\ndazy\ndazzle\ndazzlement\ndazzler\ndazzlingly\nde\ndeacetylate\ndeacetylation\ndeacidification\ndeacidify\ndeacon\ndeaconal\ndeaconate\ndeaconess\ndeaconhood\ndeaconize\ndeaconry\ndeaconship\ndeactivate\ndeactivation\ndead\ndeadbeat\ndeadborn\ndeadcenter\ndeaden\ndeadener\ndeadening\ndeader\ndeadeye\ndeadfall\ndeadhead\ndeadheadism\ndeadhearted\ndeadheartedly\ndeadheartedness\ndeadhouse\ndeading\ndeadish\ndeadishly\ndeadishness\ndeadlatch\ndeadlight\ndeadlily\ndeadline\ndeadliness\ndeadlock\ndeadly\ndeadman\ndeadmelt\ndeadness\ndeadpan\ndeadpay\ndeadtongue\ndeadwood\ndeadwort\ndeaerate\ndeaeration\ndeaerator\ndeaf\ndeafen\ndeafening\ndeafeningly\ndeafforest\ndeafforestation\ndeafish\ndeafly\ndeafness\ndeair\ndeal\ndealable\ndealate\ndealated\ndealation\ndealbate\ndealbation\ndealbuminize\ndealcoholist\ndealcoholization\ndealcoholize\ndealer\ndealerdom\ndealership\ndealfish\ndealing\ndealkalize\ndealkylate\ndealkylation\ndealt\ndeambulation\ndeambulatory\ndeamidase\ndeamidate\ndeamidation\ndeamidization\ndeamidize\ndeaminase\ndeaminate\ndeamination\ndeaminization\ndeaminize\ndeammonation\nDean\ndean\ndeanathematize\ndeaner\ndeanery\ndeaness\ndeanimalize\ndeanship\ndeanthropomorphic\ndeanthropomorphism\ndeanthropomorphization\ndeanthropomorphize\ndeappetizing\ndeaquation\ndear\ndearborn\ndearie\ndearly\ndearness\ndearomatize\ndearsenicate\ndearsenicator\ndearsenicize\ndearth\ndearthfu\ndearticulation\ndearworth\ndearworthily\ndearworthiness\ndeary\ndeash\ndeasil\ndeaspirate\ndeaspiration\ndeassimilation\ndeath\ndeathbed\ndeathblow\ndeathday\ndeathful\ndeathfully\ndeathfulness\ndeathify\ndeathin\ndeathiness\ndeathless\ndeathlessly\ndeathlessness\ndeathlike\ndeathliness\ndeathling\ndeathly\ndeathroot\ndeathshot\ndeathsman\ndeathtrap\ndeathward\ndeathwards\ndeathwatch\ndeathweed\ndeathworm\ndeathy\ndeave\ndeavely\nDeb\ndeb\ndebacle\ndebadge\ndebamboozle\ndebar\ndebarbarization\ndebarbarize\ndebark\ndebarkation\ndebarkment\ndebarment\ndebarrance\ndebarrass\ndebarration\ndebase\ndebasedness\ndebasement\ndebaser\ndebasingly\ndebatable\ndebate\ndebateful\ndebatefully\ndebatement\ndebater\ndebating\ndebatingly\ndebauch\ndebauched\ndebauchedly\ndebauchedness\ndebauchee\ndebaucher\ndebauchery\ndebauchment\nDebbie\nDebby\ndebby\ndebeige\ndebellate\ndebellation\ndebellator\ndeben\ndebenture\ndebentured\ndebenzolize\nDebi\ndebile\ndebilissima\ndebilitant\ndebilitate\ndebilitated\ndebilitation\ndebilitative\ndebility\ndebind\ndebit\ndebiteuse\ndebituminization\ndebituminize\ndeblaterate\ndeblateration\ndeboistly\ndeboistness\ndebonair\ndebonaire\ndebonairity\ndebonairly\ndebonairness\ndebonnaire\nDeborah\ndebord\ndebordment\ndebosh\ndeboshed\ndebouch\ndebouchment\ndebride\ndebrief\ndebris\ndebrominate\ndebromination\ndebruise\ndebt\ndebtee\ndebtful\ndebtless\ndebtor\ndebtorship\ndebullition\ndebunk\ndebunker\ndebunkment\ndebus\nDebussyan\nDebussyanize\ndebut\ndebutant\ndebutante\ndecachord\ndecad\ndecadactylous\ndecadal\ndecadally\ndecadarch\ndecadarchy\ndecadary\ndecadation\ndecade\ndecadence\ndecadency\ndecadent\ndecadentism\ndecadently\ndecadescent\ndecadianome\ndecadic\ndecadist\ndecadrachm\ndecadrachma\ndecaesarize\ndecaffeinate\ndecaffeinize\ndecafid\ndecagon\ndecagonal\ndecagram\ndecagramme\ndecahedral\ndecahedron\ndecahydrate\ndecahydrated\ndecahydronaphthalene\nDecaisnea\ndecal\ndecalcification\ndecalcifier\ndecalcify\ndecalcomania\ndecalcomaniac\ndecalescence\ndecalescent\nDecalin\ndecaliter\ndecalitre\ndecalobate\nDecalogist\nDecalogue\ndecalvant\ndecalvation\ndecameral\nDecameron\nDecameronic\ndecamerous\ndecameter\ndecametre\ndecamp\ndecampment\ndecan\ndecanal\ndecanally\ndecanate\ndecane\ndecangular\ndecani\ndecanically\ndecannulation\ndecanonization\ndecanonize\ndecant\ndecantate\ndecantation\ndecanter\ndecantherous\ndecap\ndecapetalous\ndecaphyllous\ndecapitable\ndecapitalization\ndecapitalize\ndecapitate\ndecapitation\ndecapitator\ndecapod\nDecapoda\ndecapodal\ndecapodan\ndecapodiform\ndecapodous\ndecapper\ndecapsulate\ndecapsulation\ndecarbonate\ndecarbonator\ndecarbonization\ndecarbonize\ndecarbonized\ndecarbonizer\ndecarboxylate\ndecarboxylation\ndecarboxylization\ndecarboxylize\ndecarburation\ndecarburization\ndecarburize\ndecarch\ndecarchy\ndecardinalize\ndecare\ndecarhinus\ndecarnate\ndecarnated\ndecart\ndecasemic\ndecasepalous\ndecaspermal\ndecaspermous\ndecast\ndecastellate\ndecastere\ndecastich\ndecastyle\ndecasualization\ndecasualize\ndecasyllabic\ndecasyllable\ndecasyllabon\ndecate\ndecathlon\ndecatholicize\ndecatize\ndecatizer\ndecatoic\ndecator\ndecatyl\ndecaudate\ndecaudation\ndecay\ndecayable\ndecayed\ndecayedness\ndecayer\ndecayless\ndecease\ndeceased\ndecedent\ndeceit\ndeceitful\ndeceitfully\ndeceitfulness\ndeceivability\ndeceivable\ndeceivableness\ndeceivably\ndeceive\ndeceiver\ndeceiving\ndeceivingly\ndecelerate\ndeceleration\ndecelerator\ndecelerometer\nDecember\nDecemberish\nDecemberly\nDecembrist\ndecemcostate\ndecemdentate\ndecemfid\ndecemflorous\ndecemfoliate\ndecemfoliolate\ndecemjugate\ndecemlocular\ndecempartite\ndecempeda\ndecempedal\ndecempedate\ndecempennate\ndecemplex\ndecemplicate\ndecempunctate\ndecemstriate\ndecemuiri\ndecemvir\ndecemviral\ndecemvirate\ndecemvirship\ndecenary\ndecence\ndecency\ndecene\ndecennal\ndecennary\ndecennia\ndecenniad\ndecennial\ndecennially\ndecennium\ndecennoval\ndecent\ndecenter\ndecently\ndecentness\ndecentralism\ndecentralist\ndecentralization\ndecentralize\ndecentration\ndecentre\ndecenyl\ndecephalization\ndeceptibility\ndeceptible\ndeception\ndeceptious\ndeceptiously\ndeceptitious\ndeceptive\ndeceptively\ndeceptiveness\ndeceptivity\ndecerebrate\ndecerebration\ndecerebrize\ndecern\ndecerniture\ndecernment\ndecess\ndecession\ndechemicalization\ndechemicalize\ndechenite\nDechlog\ndechlore\ndechlorination\ndechoralize\ndechristianization\ndechristianize\nDecian\ndeciare\ndeciatine\ndecibel\ndeciceronize\ndecidable\ndecide\ndecided\ndecidedly\ndecidedness\ndecider\ndecidingly\ndecidua\ndecidual\ndeciduary\nDeciduata\ndeciduate\ndeciduitis\ndeciduoma\ndeciduous\ndeciduously\ndeciduousness\ndecigram\ndecigramme\ndecil\ndecile\ndeciliter\ndecillion\ndecillionth\ndecima\ndecimal\ndecimalism\ndecimalist\ndecimalization\ndecimalize\ndecimally\ndecimate\ndecimation\ndecimator\ndecimestrial\ndecimeter\ndecimolar\ndecimole\ndecimosexto\nDecimus\ndecinormal\ndecipher\ndecipherability\ndecipherable\ndecipherably\ndecipherer\ndecipherment\ndecipium\ndecipolar\ndecision\ndecisional\ndecisive\ndecisively\ndecisiveness\ndecistere\ndecitizenize\nDecius\ndecivilization\ndecivilize\ndeck\ndecke\ndecked\ndeckel\ndecker\ndeckhead\ndeckhouse\ndeckie\ndecking\ndeckle\ndeckload\ndeckswabber\ndeclaim\ndeclaimant\ndeclaimer\ndeclamation\ndeclamatoriness\ndeclamatory\ndeclarable\ndeclarant\ndeclaration\ndeclarative\ndeclaratively\ndeclarator\ndeclaratorily\ndeclaratory\ndeclare\ndeclared\ndeclaredly\ndeclaredness\ndeclarer\ndeclass\ndeclassicize\ndeclassify\ndeclension\ndeclensional\ndeclensionally\ndeclericalize\ndeclimatize\ndeclinable\ndeclinal\ndeclinate\ndeclination\ndeclinational\ndeclinatory\ndeclinature\ndecline\ndeclined\ndeclinedness\ndecliner\ndeclinograph\ndeclinometer\ndeclivate\ndeclive\ndeclivitous\ndeclivity\ndeclivous\ndeclutch\ndecoagulate\ndecoagulation\ndecoat\ndecocainize\ndecoct\ndecoctible\ndecoction\ndecoctive\ndecoctum\ndecode\nDecodon\ndecohere\ndecoherence\ndecoherer\ndecohesion\ndecoic\ndecoke\ndecollate\ndecollated\ndecollation\ndecollator\ndecolletage\ndecollete\ndecolor\ndecolorant\ndecolorate\ndecoloration\ndecolorimeter\ndecolorization\ndecolorize\ndecolorizer\ndecolour\ndecommission\ndecompensate\ndecompensation\ndecomplex\ndecomponible\ndecomposability\ndecomposable\ndecompose\ndecomposed\ndecomposer\ndecomposite\ndecomposition\ndecomposure\ndecompound\ndecompoundable\ndecompoundly\ndecompress\ndecompressing\ndecompression\ndecompressive\ndeconcatenate\ndeconcentrate\ndeconcentration\ndeconcentrator\ndecongestive\ndeconsecrate\ndeconsecration\ndeconsider\ndeconsideration\ndecontaminate\ndecontamination\ndecontrol\ndeconventionalize\ndecopperization\ndecopperize\ndecorability\ndecorable\ndecorably\ndecorament\ndecorate\ndecorated\ndecoration\ndecorationist\ndecorative\ndecoratively\ndecorativeness\ndecorator\ndecoratory\ndecorist\ndecorous\ndecorously\ndecorousness\ndecorrugative\ndecorticate\ndecortication\ndecorticator\ndecorticosis\ndecorum\ndecostate\ndecoy\ndecoyer\ndecoyman\ndecrassify\ndecream\ndecrease\ndecreaseless\ndecreasing\ndecreasingly\ndecreation\ndecreative\ndecree\ndecreeable\ndecreement\ndecreer\ndecreet\ndecrement\ndecrementless\ndecremeter\ndecrepit\ndecrepitate\ndecrepitation\ndecrepitly\ndecrepitness\ndecrepitude\ndecrescence\ndecrescendo\ndecrescent\ndecretal\ndecretalist\ndecrete\ndecretist\ndecretive\ndecretively\ndecretorial\ndecretorily\ndecretory\ndecretum\ndecrew\ndecrial\ndecried\ndecrier\ndecrown\ndecrudescence\ndecrustation\ndecry\ndecrystallization\ndecubital\ndecubitus\ndecultivate\ndeculturate\ndecuman\ndecumana\ndecumanus\nDecumaria\ndecumary\ndecumbence\ndecumbency\ndecumbent\ndecumbently\ndecumbiture\ndecuple\ndecuplet\ndecuria\ndecurion\ndecurionate\ndecurrence\ndecurrency\ndecurrent\ndecurrently\ndecurring\ndecursion\ndecursive\ndecursively\ndecurtate\ndecurvation\ndecurvature\ndecurve\ndecury\ndecus\ndecussate\ndecussated\ndecussately\ndecussation\ndecussis\ndecussorium\ndecyl\ndecylene\ndecylenic\ndecylic\ndecyne\nDedan\nDedanim\nDedanite\ndedecorate\ndedecoration\ndedecorous\ndedendum\ndedentition\ndedicant\ndedicate\ndedicatee\ndedication\ndedicational\ndedicative\ndedicator\ndedicatorial\ndedicatorily\ndedicatory\ndedicature\ndedifferentiate\ndedifferentiation\ndedimus\ndeditician\ndediticiancy\ndedition\ndedo\ndedoggerelize\ndedogmatize\ndedolation\ndeduce\ndeducement\ndeducibility\ndeducible\ndeducibleness\ndeducibly\ndeducive\ndeduct\ndeductible\ndeduction\ndeductive\ndeductively\ndeductory\ndeduplication\ndee\ndeed\ndeedbox\ndeedeed\ndeedful\ndeedfully\ndeedily\ndeediness\ndeedless\ndeedy\ndeem\ndeemer\ndeemie\ndeemster\ndeemstership\ndeep\ndeepen\ndeepener\ndeepening\ndeepeningly\nDeepfreeze\ndeeping\ndeepish\ndeeplier\ndeeply\ndeepmost\ndeepmouthed\ndeepness\ndeepsome\ndeepwater\ndeepwaterman\ndeer\ndeerberry\ndeerdog\ndeerdrive\ndeerfood\ndeerhair\ndeerherd\ndeerhorn\ndeerhound\ndeerlet\ndeermeat\ndeerskin\ndeerstalker\ndeerstalking\ndeerstand\ndeerstealer\ndeertongue\ndeerweed\ndeerwood\ndeeryard\ndeevey\ndeevilick\ndeface\ndefaceable\ndefacement\ndefacer\ndefacing\ndefacingly\ndefalcate\ndefalcation\ndefalcator\ndefalk\ndefamation\ndefamatory\ndefame\ndefamed\ndefamer\ndefamingly\ndefassa\ndefat\ndefault\ndefaultant\ndefaulter\ndefaultless\ndefaulture\ndefeasance\ndefeasanced\ndefease\ndefeasibility\ndefeasible\ndefeasibleness\ndefeat\ndefeater\ndefeatism\ndefeatist\ndefeatment\ndefeature\ndefecant\ndefecate\ndefecation\ndefecator\ndefect\ndefectibility\ndefectible\ndefection\ndefectionist\ndefectious\ndefective\ndefectively\ndefectiveness\ndefectless\ndefectology\ndefector\ndefectoscope\ndefedation\ndefeminize\ndefence\ndefend\ndefendable\ndefendant\ndefender\ndefendress\ndefenestration\ndefensative\ndefense\ndefenseless\ndefenselessly\ndefenselessness\ndefensibility\ndefensible\ndefensibleness\ndefensibly\ndefension\ndefensive\ndefensively\ndefensiveness\ndefensor\ndefensorship\ndefensory\ndefer\ndeferable\ndeference\ndeferent\ndeferentectomy\ndeferential\ndeferentiality\ndeferentially\ndeferentitis\ndeferment\ndeferrable\ndeferral\ndeferred\ndeferrer\ndeferrization\ndeferrize\ndefervesce\ndefervescence\ndefervescent\ndefeudalize\ndefiable\ndefial\ndefiance\ndefiant\ndefiantly\ndefiantness\ndefiber\ndefibrinate\ndefibrination\ndefibrinize\ndeficience\ndeficiency\ndeficient\ndeficiently\ndeficit\ndefier\ndefiguration\ndefilade\ndefile\ndefiled\ndefiledness\ndefilement\ndefiler\ndefiliation\ndefiling\ndefilingly\ndefinability\ndefinable\ndefinably\ndefine\ndefined\ndefinedly\ndefinement\ndefiner\ndefiniendum\ndefiniens\ndefinite\ndefinitely\ndefiniteness\ndefinition\ndefinitional\ndefinitiones\ndefinitive\ndefinitively\ndefinitiveness\ndefinitization\ndefinitize\ndefinitor\ndefinitude\ndeflagrability\ndeflagrable\ndeflagrate\ndeflagration\ndeflagrator\ndeflate\ndeflation\ndeflationary\ndeflationist\ndeflator\ndeflect\ndeflectable\ndeflected\ndeflection\ndeflectionization\ndeflectionize\ndeflective\ndeflectometer\ndeflector\ndeflesh\ndeflex\ndeflexibility\ndeflexible\ndeflexion\ndeflexure\ndeflocculant\ndeflocculate\ndeflocculation\ndeflocculator\ndeflorate\ndefloration\ndeflorescence\ndeflower\ndeflowerer\ndefluent\ndefluous\ndefluvium\ndefluxion\ndefoedation\ndefog\ndefoliage\ndefoliate\ndefoliated\ndefoliation\ndefoliator\ndeforce\ndeforcement\ndeforceor\ndeforcer\ndeforciant\ndeforest\ndeforestation\ndeforester\ndeform\ndeformability\ndeformable\ndeformalize\ndeformation\ndeformational\ndeformative\ndeformed\ndeformedly\ndeformedness\ndeformer\ndeformeter\ndeformism\ndeformity\ndefortify\ndefoul\ndefraud\ndefraudation\ndefrauder\ndefraudment\ndefray\ndefrayable\ndefrayal\ndefrayer\ndefrayment\ndefreeze\ndefrication\ndefrock\ndefrost\ndefroster\ndeft\ndefterdar\ndeftly\ndeftness\ndefunct\ndefunction\ndefunctionalization\ndefunctionalize\ndefunctness\ndefuse\ndefusion\ndefy\ndefyingly\ndeg\ndeganglionate\ndegarnish\ndegas\ndegasification\ndegasifier\ndegasify\ndegasser\ndegauss\ndegelatinize\ndegelation\ndegeneracy\ndegeneralize\ndegenerate\ndegenerately\ndegenerateness\ndegeneration\ndegenerationist\ndegenerative\ndegenerescence\ndegenerescent\ndegentilize\ndegerm\ndegerminate\ndegerminator\ndegged\ndegger\ndeglaciation\ndeglaze\ndeglutinate\ndeglutination\ndeglutition\ndeglutitious\ndeglutitive\ndeglutitory\ndeglycerin\ndeglycerine\ndegorge\ndegradable\ndegradand\ndegradation\ndegradational\ndegradative\ndegrade\ndegraded\ndegradedly\ndegradedness\ndegradement\ndegrader\ndegrading\ndegradingly\ndegradingness\ndegraduate\ndegraduation\ndegrain\ndegrease\ndegreaser\ndegree\ndegreeless\ndegreewise\ndegression\ndegressive\ndegressively\ndegu\nDeguelia\ndeguelin\ndegum\ndegummer\ndegust\ndegustation\ndehair\ndehairer\nDehaites\ndeheathenize\ndehematize\ndehepatize\nDehgan\ndehisce\ndehiscence\ndehiscent\ndehistoricize\nDehkan\ndehnstufe\ndehonestate\ndehonestation\ndehorn\ndehorner\ndehors\ndehort\ndehortation\ndehortative\ndehortatory\ndehorter\ndehull\ndehumanization\ndehumanize\ndehumidification\ndehumidifier\ndehumidify\ndehusk\nDehwar\ndehydrant\ndehydrase\ndehydrate\ndehydration\ndehydrator\ndehydroascorbic\ndehydrocorydaline\ndehydrofreezing\ndehydrogenase\ndehydrogenate\ndehydrogenation\ndehydrogenization\ndehydrogenize\ndehydromucic\ndehydrosparteine\ndehypnotize\ndeice\ndeicer\ndeicidal\ndeicide\ndeictic\ndeictical\ndeictically\ndeidealize\nDeidesheimer\ndeific\ndeifical\ndeification\ndeificatory\ndeifier\ndeiform\ndeiformity\ndeify\ndeign\nDeimos\ndeincrustant\ndeindividualization\ndeindividualize\ndeindividuate\ndeindustrialization\ndeindustrialize\ndeink\nDeino\nDeinocephalia\nDeinoceras\nDeinodon\nDeinodontidae\ndeinos\nDeinosauria\nDeinotherium\ndeinsularize\ndeintellectualization\ndeintellectualize\ndeionize\nDeipara\ndeiparous\nDeiphobus\ndeipnodiplomatic\ndeipnophobia\ndeipnosophism\ndeipnosophist\ndeipnosophistic\ndeipotent\nDeirdre\ndeiseal\ndeisidaimonia\ndeism\ndeist\ndeistic\ndeistical\ndeistically\ndeisticalness\ndeity\ndeityship\ndeject\ndejecta\ndejected\ndejectedly\ndejectedness\ndejectile\ndejection\ndejectly\ndejectory\ndejecture\ndejerate\ndejeration\ndejerator\ndejeune\ndejeuner\ndejunkerize\nDekabrist\ndekaparsec\ndekapode\ndekko\ndekle\ndeknight\nDel\ndelabialization\ndelabialize\ndelacrimation\ndelactation\ndelaine\ndelaminate\ndelamination\ndelapse\ndelapsion\ndelate\ndelater\ndelatinization\ndelatinize\ndelation\ndelator\ndelatorian\nDelaware\nDelawarean\ndelawn\ndelay\ndelayable\ndelayage\ndelayer\ndelayful\ndelaying\ndelayingly\nDelbert\ndele\ndelead\ndelectability\ndelectable\ndelectableness\ndelectably\ndelectate\ndelectation\ndelectus\ndelegable\ndelegacy\ndelegalize\ndelegant\ndelegate\ndelegatee\ndelegateship\ndelegation\ndelegative\ndelegator\ndelegatory\ndelenda\nDelesseria\nDelesseriaceae\ndelesseriaceous\ndelete\ndeleterious\ndeleteriously\ndeleteriousness\ndeletion\ndeletive\ndeletory\ndelf\ndelft\ndelftware\nDelhi\nDelia\nDelian\ndeliberalization\ndeliberalize\ndeliberant\ndeliberate\ndeliberately\ndeliberateness\ndeliberation\ndeliberative\ndeliberatively\ndeliberativeness\ndeliberator\ndelible\ndelicacy\ndelicate\ndelicately\ndelicateness\ndelicatesse\ndelicatessen\ndelicense\nDelichon\ndelicioso\nDelicious\ndelicious\ndeliciously\ndeliciousness\ndelict\ndelictum\ndeligated\ndeligation\ndelight\ndelightable\ndelighted\ndelightedly\ndelightedness\ndelighter\ndelightful\ndelightfully\ndelightfulness\ndelighting\ndelightingly\ndelightless\ndelightsome\ndelightsomely\ndelightsomeness\ndelignate\ndelignification\nDelilah\ndelime\ndelimit\ndelimitate\ndelimitation\ndelimitative\ndelimiter\ndelimitize\ndelineable\ndelineament\ndelineate\ndelineation\ndelineative\ndelineator\ndelineatory\ndelineature\ndelinquence\ndelinquency\ndelinquent\ndelinquently\ndelint\ndelinter\ndeliquesce\ndeliquescence\ndeliquescent\ndeliquium\ndeliracy\ndelirament\ndeliration\ndeliriant\ndelirifacient\ndelirious\ndeliriously\ndeliriousness\ndelirium\ndelitescence\ndelitescency\ndelitescent\ndeliver\ndeliverable\ndeliverance\ndeliverer\ndeliveress\ndeliveror\ndelivery\ndeliveryman\ndell\nDella\ndellenite\nDelobranchiata\ndelocalization\ndelocalize\ndelomorphic\ndelomorphous\ndeloul\ndelouse\ndelphacid\nDelphacidae\nDelphian\nDelphin\nDelphinapterus\ndelphine\ndelphinic\nDelphinid\nDelphinidae\ndelphinin\ndelphinine\ndelphinite\nDelphinium\nDelphinius\ndelphinoid\nDelphinoidea\ndelphinoidine\nDelphinus\ndelphocurarine\nDelsarte\nDelsartean\nDelsartian\nDelta\ndelta\ndeltafication\ndeltaic\ndeltal\ndeltarium\ndeltation\ndelthyrial\ndelthyrium\ndeltic\ndeltidial\ndeltidium\ndeltiology\ndeltohedron\ndeltoid\ndeltoidal\ndelubrum\ndeludable\ndelude\ndeluder\ndeludher\ndeluding\ndeludingly\ndeluge\ndeluminize\ndelundung\ndelusion\ndelusional\ndelusionist\ndelusive\ndelusively\ndelusiveness\ndelusory\ndeluster\ndeluxe\ndelve\ndelver\ndemagnetizable\ndemagnetization\ndemagnetize\ndemagnetizer\ndemagog\ndemagogic\ndemagogical\ndemagogically\ndemagogism\ndemagogue\ndemagoguery\ndemagogy\ndemal\ndemand\ndemandable\ndemandant\ndemander\ndemanding\ndemandingly\ndemanganization\ndemanganize\ndemantoid\ndemarcate\ndemarcation\ndemarcator\ndemarch\ndemarchy\ndemargarinate\ndemark\ndemarkation\ndemast\ndematerialization\ndematerialize\nDematiaceae\ndematiaceous\ndeme\ndemean\ndemeanor\ndemegoric\ndemency\ndement\ndementate\ndementation\ndemented\ndementedly\ndementedness\ndementholize\ndementia\ndemephitize\ndemerit\ndemeritorious\ndemeritoriously\nDemerol\ndemersal\ndemersed\ndemersion\ndemesman\ndemesmerize\ndemesne\ndemesnial\ndemetallize\ndemethylate\ndemethylation\nDemetrian\ndemetricize\ndemi\ndemiadult\ndemiangel\ndemiassignation\ndemiatheism\ndemiatheist\ndemibarrel\ndemibastion\ndemibastioned\ndemibath\ndemibeast\ndemibelt\ndemibob\ndemibombard\ndemibrassart\ndemibrigade\ndemibrute\ndemibuckram\ndemicadence\ndemicannon\ndemicanon\ndemicanton\ndemicaponier\ndemichamfron\ndemicircle\ndemicircular\ndemicivilized\ndemicolumn\ndemicoronal\ndemicritic\ndemicuirass\ndemiculverin\ndemicylinder\ndemicylindrical\ndemidandiprat\ndemideify\ndemideity\ndemidevil\ndemidigested\ndemidistance\ndemiditone\ndemidoctor\ndemidog\ndemidolmen\ndemidome\ndemieagle\ndemifarthing\ndemifigure\ndemiflouncing\ndemifusion\ndemigardebras\ndemigauntlet\ndemigentleman\ndemiglobe\ndemigod\ndemigoddess\ndemigoddessship\ndemigorge\ndemigriffin\ndemigroat\ndemihag\ndemihearse\ndemiheavenly\ndemihigh\ndemihogshead\ndemihorse\ndemihuman\ndemijambe\ndemijohn\ndemikindred\ndemiking\ndemilance\ndemilancer\ndemilawyer\ndemilegato\ndemilion\ndemilitarization\ndemilitarize\ndemiliterate\ndemilune\ndemiluster\ndemilustre\ndemiman\ndemimark\ndemimentoniere\ndemimetope\ndemimillionaire\ndemimondaine\ndemimonde\ndemimonk\ndeminatured\ndemineralization\ndemineralize\ndeminude\ndeminudity\ndemioctagonal\ndemioctangular\ndemiofficial\ndemiorbit\ndemiourgoi\ndemiowl\ndemiox\ndemipagan\ndemiparallel\ndemipauldron\ndemipectinate\ndemipesade\ndemipike\ndemipillar\ndemipique\ndemiplacate\ndemiplate\ndemipomada\ndemipremise\ndemipremiss\ndemipriest\ndemipronation\ndemipuppet\ndemiquaver\ndemiracle\ndemiram\ndemirelief\ndemirep\ndemirevetment\ndemirhumb\ndemirilievo\ndemirobe\ndemisability\ndemisable\ndemisacrilege\ndemisang\ndemisangue\ndemisavage\ndemise\ndemiseason\ndemisecond\ndemisemiquaver\ndemisemitone\ndemisheath\ndemishirt\ndemisovereign\ndemisphere\ndemiss\ndemission\ndemissionary\ndemissly\ndemissness\ndemissory\ndemisuit\ndemit\ndemitasse\ndemitint\ndemitoilet\ndemitone\ndemitrain\ndemitranslucence\ndemitube\ndemiturned\ndemiurge\ndemiurgeous\ndemiurgic\ndemiurgical\ndemiurgically\ndemiurgism\ndemivambrace\ndemivirgin\ndemivoice\ndemivol\ndemivolt\ndemivotary\ndemiwivern\ndemiwolf\ndemnition\ndemob\ndemobilization\ndemobilize\ndemocracy\ndemocrat\ndemocratian\ndemocratic\ndemocratical\ndemocratically\ndemocratifiable\ndemocratism\ndemocratist\ndemocratization\ndemocratize\ndemodectic\ndemoded\nDemodex\nDemodicidae\nDemodocus\ndemodulation\ndemodulator\ndemogenic\nDemogorgon\ndemographer\ndemographic\ndemographical\ndemographically\ndemographist\ndemography\ndemoid\ndemoiselle\ndemolish\ndemolisher\ndemolishment\ndemolition\ndemolitionary\ndemolitionist\ndemological\ndemology\nDemon\ndemon\ndemonastery\ndemoness\ndemonetization\ndemonetize\ndemoniac\ndemoniacal\ndemoniacally\ndemoniacism\ndemonial\ndemonian\ndemonianism\ndemoniast\ndemonic\ndemonical\ndemonifuge\ndemonish\ndemonism\ndemonist\ndemonize\ndemonkind\ndemonland\ndemonlike\ndemonocracy\ndemonograph\ndemonographer\ndemonography\ndemonolater\ndemonolatrous\ndemonolatrously\ndemonolatry\ndemonologer\ndemonologic\ndemonological\ndemonologically\ndemonologist\ndemonology\ndemonomancy\ndemonophobia\ndemonry\ndemonship\ndemonstrability\ndemonstrable\ndemonstrableness\ndemonstrably\ndemonstrant\ndemonstratable\ndemonstrate\ndemonstratedly\ndemonstrater\ndemonstration\ndemonstrational\ndemonstrationist\ndemonstrative\ndemonstratively\ndemonstrativeness\ndemonstrator\ndemonstratorship\ndemonstratory\ndemophil\ndemophilism\ndemophobe\nDemophon\nDemophoon\ndemoralization\ndemoralize\ndemoralizer\ndemorphinization\ndemorphism\ndemos\nDemospongiae\nDemosthenean\nDemosthenic\ndemote\ndemotic\ndemotics\ndemotion\ndemotist\ndemount\ndemountability\ndemountable\ndempster\ndemulce\ndemulcent\ndemulsibility\ndemulsify\ndemulsion\ndemure\ndemurely\ndemureness\ndemurity\ndemurrable\ndemurrage\ndemurral\ndemurrant\ndemurrer\ndemurring\ndemurringly\ndemutization\ndemy\ndemyship\nden\ndenarcotization\ndenarcotize\ndenarius\ndenaro\ndenary\ndenat\ndenationalization\ndenationalize\ndenaturalization\ndenaturalize\ndenaturant\ndenaturate\ndenaturation\ndenature\ndenaturization\ndenaturize\ndenaturizer\ndenazify\ndenda\ndendrachate\ndendral\nDendraspis\ndendraxon\ndendric\ndendriform\ndendrite\nDendrites\ndendritic\ndendritical\ndendritically\ndendritiform\nDendrium\nDendrobates\nDendrobatinae\ndendrobe\nDendrobium\nDendrocalamus\nDendroceratina\ndendroceratine\nDendrochirota\ndendrochronological\ndendrochronologist\ndendrochronology\ndendroclastic\nDendrocoela\ndendrocoelan\ndendrocoele\ndendrocoelous\nDendrocolaptidae\ndendrocolaptine\nDendroctonus\nDendrocygna\ndendrodont\nDendrodus\nDendroeca\nDendrogaea\nDendrogaean\ndendrograph\ndendrography\nDendrohyrax\nDendroica\ndendroid\ndendroidal\nDendroidea\nDendrolagus\ndendrolatry\nDendrolene\ndendrolite\ndendrologic\ndendrological\ndendrologist\ndendrologous\ndendrology\nDendromecon\ndendrometer\ndendron\ndendrophil\ndendrophile\ndendrophilous\nDendropogon\nDene\ndene\nDeneb\nDenebola\ndenegate\ndenegation\ndenehole\ndenervate\ndenervation\ndeneutralization\ndengue\ndeniable\ndenial\ndenicotinize\ndenier\ndenierage\ndenierer\ndenigrate\ndenigration\ndenigrator\ndenim\nDenis\ndenitrate\ndenitration\ndenitrator\ndenitrificant\ndenitrification\ndenitrificator\ndenitrifier\ndenitrify\ndenitrize\ndenization\ndenizen\ndenizenation\ndenizenize\ndenizenship\nDenmark\ndennet\nDennis\nDennstaedtia\ndenominable\ndenominate\ndenomination\ndenominational\ndenominationalism\ndenominationalist\ndenominationalize\ndenominationally\ndenominative\ndenominatively\ndenominator\ndenotable\ndenotation\ndenotative\ndenotatively\ndenotativeness\ndenotatum\ndenote\ndenotement\ndenotive\ndenouement\ndenounce\ndenouncement\ndenouncer\ndense\ndensely\ndensen\ndenseness\ndenshare\ndensher\ndenshire\ndensification\ndensifier\ndensify\ndensimeter\ndensimetric\ndensimetrically\ndensimetry\ndensitometer\ndensity\ndent\ndentagra\ndental\ndentale\ndentalgia\nDentaliidae\ndentalism\ndentality\nDentalium\ndentalization\ndentalize\ndentally\ndentaphone\nDentaria\ndentary\ndentata\ndentate\ndentated\ndentately\ndentation\ndentatoangulate\ndentatocillitate\ndentatocostate\ndentatocrenate\ndentatoserrate\ndentatosetaceous\ndentatosinuate\ndentel\ndentelated\ndentelle\ndentelure\ndenter\ndentex\ndentical\ndenticate\nDenticeti\ndenticle\ndenticular\ndenticulate\ndenticulately\ndenticulation\ndenticule\ndentiferous\ndentification\ndentiform\ndentifrice\ndentigerous\ndentil\ndentilabial\ndentilated\ndentilation\ndentile\ndentilingual\ndentiloquist\ndentiloquy\ndentimeter\ndentin\ndentinal\ndentinalgia\ndentinasal\ndentine\ndentinitis\ndentinoblast\ndentinocemental\ndentinoid\ndentinoma\ndentiparous\ndentiphone\ndentiroster\ndentirostral\ndentirostrate\nDentirostres\ndentiscalp\ndentist\ndentistic\ndentistical\ndentistry\ndentition\ndentoid\ndentolabial\ndentolingual\ndentonasal\ndentosurgical\ndentural\ndenture\ndenty\ndenucleate\ndenudant\ndenudate\ndenudation\ndenudative\ndenude\ndenuder\ndenumerable\ndenumerably\ndenumeral\ndenumerant\ndenumerantive\ndenumeration\ndenumerative\ndenunciable\ndenunciant\ndenunciate\ndenunciation\ndenunciative\ndenunciatively\ndenunciator\ndenunciatory\ndenutrition\ndeny\ndenyingly\ndeobstruct\ndeobstruent\ndeoccidentalize\ndeoculate\ndeodand\ndeodara\ndeodorant\ndeodorization\ndeodorize\ndeodorizer\ndeontological\ndeontologist\ndeontology\ndeoperculate\ndeoppilant\ndeoppilate\ndeoppilation\ndeoppilative\ndeordination\ndeorganization\ndeorganize\ndeorientalize\ndeorsumvergence\ndeorsumversion\ndeorusumduction\ndeossification\ndeossify\ndeota\ndeoxidant\ndeoxidate\ndeoxidation\ndeoxidative\ndeoxidator\ndeoxidization\ndeoxidize\ndeoxidizer\ndeoxygenate\ndeoxygenation\ndeoxygenization\ndeozonization\ndeozonize\ndeozonizer\ndepa\ndepaganize\ndepaint\ndepancreatization\ndepancreatize\ndepark\ndeparliament\ndepart\ndeparted\ndeparter\ndepartisanize\ndepartition\ndepartment\ndepartmental\ndepartmentalism\ndepartmentalization\ndepartmentalize\ndepartmentally\ndepartmentization\ndepartmentize\ndeparture\ndepas\ndepascent\ndepass\ndepasturable\ndepasturage\ndepasturation\ndepasture\ndepatriate\ndepauperate\ndepauperation\ndepauperization\ndepauperize\ndepencil\ndepend\ndependability\ndependable\ndependableness\ndependably\ndependence\ndependency\ndependent\ndependently\ndepender\ndepending\ndependingly\ndepeople\ndeperdite\ndeperditely\ndeperition\ndepersonalization\ndepersonalize\ndepersonize\ndepetalize\ndepeter\ndepetticoat\ndephase\ndephilosophize\ndephlegmate\ndephlegmation\ndephlegmatize\ndephlegmator\ndephlegmatory\ndephlegmedness\ndephlogisticate\ndephlogisticated\ndephlogistication\ndephosphorization\ndephosphorize\ndephysicalization\ndephysicalize\ndepickle\ndepict\ndepicter\ndepiction\ndepictive\ndepicture\ndepiedmontize\ndepigment\ndepigmentate\ndepigmentation\ndepigmentize\ndepilate\ndepilation\ndepilator\ndepilatory\ndepilitant\ndepilous\ndeplaceable\ndeplane\ndeplasmolysis\ndeplaster\ndeplenish\ndeplete\ndeplethoric\ndepletion\ndepletive\ndepletory\ndeploitation\ndeplorability\ndeplorable\ndeplorableness\ndeplorably\ndeploration\ndeplore\ndeplored\ndeploredly\ndeploredness\ndeplorer\ndeploringly\ndeploy\ndeployment\ndeplumate\ndeplumated\ndeplumation\ndeplume\ndeplump\ndepoetize\ndepoh\ndepolarization\ndepolarize\ndepolarizer\ndepolish\ndepolishing\ndepolymerization\ndepolymerize\ndepone\ndeponent\ndepopularize\ndepopulate\ndepopulation\ndepopulative\ndepopulator\ndeport\ndeportable\ndeportation\ndeportee\ndeporter\ndeportment\ndeposable\ndeposal\ndepose\ndeposer\ndeposit\ndepositary\ndepositation\ndepositee\ndeposition\ndepositional\ndepositive\ndepositor\ndepository\ndepositum\ndepositure\ndepot\ndepotentiate\ndepotentiation\ndepravation\ndeprave\ndepraved\ndepravedly\ndepravedness\ndepraver\ndepravingly\ndepravity\ndeprecable\ndeprecate\ndeprecatingly\ndeprecation\ndeprecative\ndeprecator\ndeprecatorily\ndeprecatoriness\ndeprecatory\ndepreciable\ndepreciant\ndepreciate\ndepreciatingly\ndepreciation\ndepreciative\ndepreciatively\ndepreciator\ndepreciatoriness\ndepreciatory\ndepredate\ndepredation\ndepredationist\ndepredator\ndepredatory\ndepress\ndepressant\ndepressed\ndepressibility\ndepressible\ndepressing\ndepressingly\ndepressingness\ndepression\ndepressive\ndepressively\ndepressiveness\ndepressomotor\ndepressor\ndepreter\ndeprint\ndepriorize\ndeprivable\ndeprival\ndeprivate\ndeprivation\ndeprivative\ndeprive\ndeprivement\ndepriver\ndeprovincialize\ndepside\ndepth\ndepthen\ndepthing\ndepthless\ndepthometer\ndepthwise\ndepullulation\ndepurant\ndepurate\ndepuration\ndepurative\ndepurator\ndepuratory\ndepursement\ndeputable\ndeputation\ndeputational\ndeputationist\ndeputationize\ndeputative\ndeputatively\ndeputator\ndepute\ndeputize\ndeputy\ndeputyship\ndequeen\nderabbinize\nderacialize\nderacinate\nderacination\nderadelphus\nderadenitis\nderadenoncus\nderah\nderaign\nderail\nderailer\nderailment\nderange\nderangeable\nderanged\nderangement\nderanger\nderat\nderate\nderater\nderationalization\nderationalize\nderatization\nderay\nDerbend\nDerby\nderby\nderbylite\ndere\nderegister\nderegulationize\ndereism\ndereistic\ndereistically\nDerek\nderelict\ndereliction\nderelictly\nderelictness\ndereligion\ndereligionize\nderencephalocele\nderencephalus\nderesinate\nderesinize\nderic\nderide\nderider\nderidingly\nDeringa\nDeripia\nderisible\nderision\nderisive\nderisively\nderisiveness\nderisory\nderivability\nderivable\nderivably\nderival\nderivant\nderivate\nderivately\nderivation\nderivational\nderivationally\nderivationist\nderivatist\nderivative\nderivatively\nderivativeness\nderive\nderived\nderivedly\nderivedness\nderiver\nderm\nderma\nDermacentor\ndermad\ndermahemia\ndermal\ndermalgia\ndermalith\ndermamyiasis\ndermanaplasty\ndermapostasis\nDermaptera\ndermapteran\ndermapterous\ndermaskeleton\ndermasurgery\ndermatagra\ndermatalgia\ndermataneuria\ndermatatrophia\ndermatauxe\ndermathemia\ndermatic\ndermatine\ndermatitis\nDermatobia\ndermatocele\ndermatocellulitis\ndermatoconiosis\nDermatocoptes\ndermatocoptic\ndermatocyst\ndermatodynia\ndermatogen\ndermatoglyphics\ndermatograph\ndermatographia\ndermatography\ndermatoheteroplasty\ndermatoid\ndermatological\ndermatologist\ndermatology\ndermatolysis\ndermatoma\ndermatome\ndermatomere\ndermatomic\ndermatomuscular\ndermatomyces\ndermatomycosis\ndermatomyoma\ndermatoneural\ndermatoneurology\ndermatoneurosis\ndermatonosus\ndermatopathia\ndermatopathic\ndermatopathology\ndermatopathophobia\nDermatophagus\ndermatophobia\ndermatophone\ndermatophony\ndermatophyte\ndermatophytic\ndermatophytosis\ndermatoplasm\ndermatoplast\ndermatoplastic\ndermatoplasty\ndermatopnagic\ndermatopsy\nDermatoptera\ndermatoptic\ndermatorrhagia\ndermatorrhea\ndermatorrhoea\ndermatosclerosis\ndermatoscopy\ndermatosis\ndermatoskeleton\ndermatotherapy\ndermatotome\ndermatotomy\ndermatotropic\ndermatoxerasia\ndermatozoon\ndermatozoonosis\ndermatrophia\ndermatrophy\ndermenchysis\nDermestes\ndermestid\nDermestidae\ndermestoid\ndermic\ndermis\ndermitis\ndermoblast\nDermobranchia\ndermobranchiata\ndermobranchiate\nDermochelys\ndermochrome\ndermococcus\ndermogastric\ndermographia\ndermographic\ndermographism\ndermography\ndermohemal\ndermohemia\ndermohumeral\ndermoid\ndermoidal\ndermoidectomy\ndermol\ndermolysis\ndermomuscular\ndermomycosis\ndermoneural\ndermoneurosis\ndermonosology\ndermoosseous\ndermoossification\ndermopathic\ndermopathy\ndermophlebitis\ndermophobe\ndermophyte\ndermophytic\ndermoplasty\nDermoptera\ndermopteran\ndermopterous\ndermoreaction\nDermorhynchi\ndermorhynchous\ndermosclerite\ndermoskeletal\ndermoskeleton\ndermostenosis\ndermostosis\ndermosynovitis\ndermotropic\ndermovaccine\ndermutation\ndern\ndernier\nderodidymus\nderogate\nderogately\nderogation\nderogative\nderogatively\nderogator\nderogatorily\nderogatoriness\nderogatory\nDerotrema\nDerotremata\nderotremate\nderotrematous\nderotreme\nderout\nDerrick\nderrick\nderricking\nderrickman\nderride\nderries\nderringer\nDerris\nderry\ndertrotheca\ndertrum\nderuinate\nderuralize\nderust\ndervish\ndervishhood\ndervishism\ndervishlike\ndesaccharification\ndesacralization\ndesacralize\ndesalt\ndesamidization\ndesand\ndesaturate\ndesaturation\ndesaurin\ndescale\ndescant\ndescanter\ndescantist\ndescend\ndescendable\ndescendance\ndescendant\ndescendence\ndescendent\ndescendental\ndescendentalism\ndescendentalist\ndescendentalistic\ndescender\ndescendibility\ndescendible\ndescending\ndescendingly\ndescension\ndescensional\ndescensionist\ndescensive\ndescent\nDeschampsia\ndescloizite\ndescort\ndescribability\ndescribable\ndescribably\ndescribe\ndescriber\ndescrier\ndescript\ndescription\ndescriptionist\ndescriptionless\ndescriptive\ndescriptively\ndescriptiveness\ndescriptory\ndescrive\ndescry\ndeseasonalize\ndesecrate\ndesecrater\ndesecration\ndesectionalize\ndeseed\ndesegmentation\ndesegmented\ndesensitization\ndesensitize\ndesensitizer\ndesentimentalize\ndeseret\ndesert\ndeserted\ndesertedly\ndesertedness\ndeserter\ndesertful\ndesertfully\ndesertic\ndeserticolous\ndesertion\ndesertism\ndesertless\ndesertlessly\ndesertlike\ndesertness\ndesertress\ndesertrice\ndesertward\ndeserve\ndeserved\ndeservedly\ndeservedness\ndeserveless\ndeserver\ndeserving\ndeservingly\ndeservingness\ndesex\ndesexualization\ndesexualize\ndeshabille\ndesi\ndesiccant\ndesiccate\ndesiccation\ndesiccative\ndesiccator\ndesiccatory\ndesiderant\ndesiderata\ndesiderate\ndesideration\ndesiderative\ndesideratum\ndesight\ndesightment\ndesign\ndesignable\ndesignate\ndesignation\ndesignative\ndesignator\ndesignatory\ndesignatum\ndesigned\ndesignedly\ndesignedness\ndesignee\ndesigner\ndesignful\ndesignfully\ndesignfulness\ndesigning\ndesigningly\ndesignless\ndesignlessly\ndesignlessness\ndesilicate\ndesilicification\ndesilicify\ndesiliconization\ndesiliconize\ndesilver\ndesilverization\ndesilverize\ndesilverizer\ndesinence\ndesinent\ndesiodothyroxine\ndesipience\ndesipiency\ndesipient\ndesirability\ndesirable\ndesirableness\ndesirably\ndesire\ndesired\ndesiredly\ndesiredness\ndesireful\ndesirefulness\ndesireless\ndesirer\ndesiringly\ndesirous\ndesirously\ndesirousness\ndesist\ndesistance\ndesistive\ndesition\ndesize\ndesk\ndesklike\ndeslime\ndesma\ndesmachymatous\ndesmachyme\ndesmacyte\ndesman\nDesmanthus\nDesmarestia\nDesmarestiaceae\ndesmarestiaceous\nDesmatippus\ndesmectasia\ndesmepithelium\ndesmic\ndesmid\nDesmidiaceae\ndesmidiaceous\nDesmidiales\ndesmidiologist\ndesmidiology\ndesmine\ndesmitis\ndesmocyte\ndesmocytoma\nDesmodactyli\nDesmodium\ndesmodont\nDesmodontidae\nDesmodus\ndesmodynia\ndesmogen\ndesmogenous\nDesmognathae\ndesmognathism\ndesmognathous\ndesmography\ndesmohemoblast\ndesmoid\ndesmology\ndesmoma\nDesmomyaria\ndesmon\nDesmoncus\ndesmoneoplasm\ndesmonosology\ndesmopathologist\ndesmopathology\ndesmopathy\ndesmopelmous\ndesmopexia\ndesmopyknosis\ndesmorrhexis\nDesmoscolecidae\nDesmoscolex\ndesmosis\ndesmosite\nDesmothoraca\ndesmotomy\ndesmotrope\ndesmotropic\ndesmotropism\ndesocialization\ndesocialize\ndesolate\ndesolately\ndesolateness\ndesolater\ndesolating\ndesolatingly\ndesolation\ndesolative\ndesonation\ndesophisticate\ndesophistication\ndesorption\ndesoxalate\ndesoxyanisoin\ndesoxybenzoin\ndesoxycinchonine\ndesoxycorticosterone\ndesoxymorphine\ndesoxyribonucleic\ndespair\ndespairer\ndespairful\ndespairfully\ndespairfulness\ndespairing\ndespairingly\ndespairingness\ndespecialization\ndespecialize\ndespecificate\ndespecification\ndespect\ndesperacy\ndesperado\ndesperadoism\ndesperate\ndesperately\ndesperateness\ndesperation\ndespicability\ndespicable\ndespicableness\ndespicably\ndespiritualization\ndespiritualize\ndespisable\ndespisableness\ndespisal\ndespise\ndespisedness\ndespisement\ndespiser\ndespisingly\ndespite\ndespiteful\ndespitefully\ndespitefulness\ndespiteous\ndespiteously\ndespoil\ndespoiler\ndespoilment\ndespoliation\ndespond\ndespondence\ndespondency\ndespondent\ndespondently\ndesponder\ndesponding\ndespondingly\ndespot\ndespotat\nDespotes\ndespotic\ndespotically\ndespoticalness\ndespoticly\ndespotism\ndespotist\ndespotize\ndespumate\ndespumation\ndesquamate\ndesquamation\ndesquamative\ndesquamatory\ndess\ndessa\ndessert\ndessertspoon\ndessertspoonful\ndessiatine\ndessil\ndestabilize\ndestain\ndestandardize\ndesterilization\ndesterilize\ndestinate\ndestination\ndestine\ndestinezite\ndestinism\ndestinist\ndestiny\ndestitute\ndestitutely\ndestituteness\ndestitution\ndestour\ndestress\ndestrier\ndestroy\ndestroyable\ndestroyer\ndestroyingly\ndestructibility\ndestructible\ndestructibleness\ndestruction\ndestructional\ndestructionism\ndestructionist\ndestructive\ndestructively\ndestructiveness\ndestructivism\ndestructivity\ndestructor\ndestructuralize\ndesubstantiate\ndesucration\ndesuete\ndesuetude\ndesugar\ndesugarize\nDesulfovibrio\ndesulphur\ndesulphurate\ndesulphuration\ndesulphurization\ndesulphurize\ndesulphurizer\ndesultor\ndesultorily\ndesultoriness\ndesultorious\ndesultory\ndesuperheater\ndesyatin\ndesyl\ndesynapsis\ndesynaptic\ndesynonymization\ndesynonymize\ndetach\ndetachability\ndetachable\ndetachableness\ndetachably\ndetached\ndetachedly\ndetachedness\ndetacher\ndetachment\ndetail\ndetailed\ndetailedly\ndetailedness\ndetailer\ndetailism\ndetailist\ndetain\ndetainable\ndetainal\ndetainer\ndetainingly\ndetainment\ndetar\ndetassel\ndetax\ndetect\ndetectability\ndetectable\ndetectably\ndetectaphone\ndetecter\ndetectible\ndetection\ndetective\ndetectivism\ndetector\ndetenant\ndetent\ndetention\ndetentive\ndeter\ndeterge\ndetergence\ndetergency\ndetergent\ndetergible\ndeteriorate\ndeterioration\ndeteriorationist\ndeteriorative\ndeteriorator\ndeteriorism\ndeteriority\ndeterment\ndeterminability\ndeterminable\ndeterminableness\ndeterminably\ndeterminacy\ndeterminant\ndeterminantal\ndeterminate\ndeterminately\ndeterminateness\ndetermination\ndeterminative\ndeterminatively\ndeterminativeness\ndeterminator\ndetermine\ndetermined\ndeterminedly\ndeterminedness\ndeterminer\ndeterminism\ndeterminist\ndeterministic\ndeterminoid\ndeterrence\ndeterrent\ndetersion\ndetersive\ndetersively\ndetersiveness\ndetest\ndetestability\ndetestable\ndetestableness\ndetestably\ndetestation\ndetester\ndethronable\ndethrone\ndethronement\ndethroner\ndethyroidism\ndetin\ndetinet\ndetinue\ndetonable\ndetonate\ndetonation\ndetonative\ndetonator\ndetorsion\ndetour\ndetoxicant\ndetoxicate\ndetoxication\ndetoxicator\ndetoxification\ndetoxify\ndetract\ndetracter\ndetractingly\ndetraction\ndetractive\ndetractively\ndetractiveness\ndetractor\ndetractory\ndetractress\ndetrain\ndetrainment\ndetribalization\ndetribalize\ndetriment\ndetrimental\ndetrimentality\ndetrimentally\ndetrimentalness\ndetrital\ndetrited\ndetrition\ndetritus\nDetroiter\ndetrude\ndetruncate\ndetruncation\ndetrusion\ndetrusive\ndetrusor\ndetubation\ndetumescence\ndetune\ndetur\ndeuce\ndeuced\ndeucedly\ndeul\ndeurbanize\ndeutencephalic\ndeutencephalon\ndeuteragonist\ndeuteranomal\ndeuteranomalous\ndeuteranope\ndeuteranopia\ndeuteranopic\ndeuteric\ndeuteride\ndeuterium\ndeuteroalbumose\ndeuterocanonical\ndeuterocasease\ndeuterocone\ndeuteroconid\ndeuterodome\ndeuteroelastose\ndeuterofibrinose\ndeuterogamist\ndeuterogamy\ndeuterogelatose\ndeuterogenic\ndeuteroglobulose\ndeuteromorphic\nDeuteromycetes\ndeuteromyosinose\ndeuteron\nDeuteronomic\nDeuteronomical\nDeuteronomist\nDeuteronomistic\nDeuteronomy\ndeuteropathic\ndeuteropathy\ndeuteroplasm\ndeuteroprism\ndeuteroproteose\ndeuteroscopic\ndeuteroscopy\ndeuterostoma\nDeuterostomata\ndeuterostomatous\ndeuterotokous\ndeuterotoky\ndeuterotype\ndeuterovitellose\ndeuterozooid\ndeutobromide\ndeutocarbonate\ndeutochloride\ndeutomala\ndeutomalal\ndeutomalar\ndeutomerite\ndeuton\ndeutonephron\ndeutonymph\ndeutonymphal\ndeutoplasm\ndeutoplasmic\ndeutoplastic\ndeutoscolex\ndeutoxide\nDeutzia\ndev\ndeva\ndevachan\ndevadasi\ndevall\ndevaloka\ndevalorize\ndevaluate\ndevaluation\ndevalue\ndevance\ndevaporate\ndevaporation\ndevast\ndevastate\ndevastating\ndevastatingly\ndevastation\ndevastative\ndevastator\ndevastavit\ndevaster\ndevata\ndevelin\ndevelop\ndevelopability\ndevelopable\ndevelopedness\ndeveloper\ndevelopist\ndevelopment\ndevelopmental\ndevelopmentalist\ndevelopmentally\ndevelopmentarian\ndevelopmentary\ndevelopmentist\ndevelopoid\ndevertebrated\ndevest\ndeviability\ndeviable\ndeviancy\ndeviant\ndeviate\ndeviation\ndeviationism\ndeviationist\ndeviative\ndeviator\ndeviatory\ndevice\ndeviceful\ndevicefully\ndevicefulness\ndevil\ndevilbird\ndevildom\ndeviled\ndeviler\ndeviless\ndevilet\ndevilfish\ndevilhood\ndeviling\ndevilish\ndevilishly\ndevilishness\ndevilism\ndevilize\ndevilkin\ndevillike\ndevilman\ndevilment\ndevilmonger\ndevilry\ndevilship\ndeviltry\ndevilward\ndevilwise\ndevilwood\ndevily\ndevious\ndeviously\ndeviousness\ndevirginate\ndevirgination\ndevirginator\ndevirilize\ndevisable\ndevisal\ndeviscerate\ndevisceration\ndevise\ndevisee\ndeviser\ndevisor\ndevitalization\ndevitalize\ndevitalized\ndevitaminize\ndevitrification\ndevitrify\ndevocalization\ndevocalize\ndevoice\ndevoid\ndevoir\ndevolatilize\ndevolute\ndevolution\ndevolutionary\ndevolutionist\ndevolve\ndevolvement\nDevon\nDevonian\nDevonic\ndevonite\ndevonport\ndevonshire\ndevorative\ndevote\ndevoted\ndevotedly\ndevotedness\ndevotee\ndevoteeism\ndevotement\ndevoter\ndevotion\ndevotional\ndevotionalism\ndevotionalist\ndevotionality\ndevotionally\ndevotionalness\ndevotionate\ndevotionist\ndevour\ndevourable\ndevourer\ndevouress\ndevouring\ndevouringly\ndevouringness\ndevourment\ndevout\ndevoutless\ndevoutlessly\ndevoutlessness\ndevoutly\ndevoutness\ndevow\ndevulcanization\ndevulcanize\ndevulgarize\ndevvel\ndew\ndewan\ndewanee\ndewanship\ndewater\ndewaterer\ndewax\ndewbeam\ndewberry\ndewclaw\ndewclawed\ndewcup\ndewdamp\ndewdrop\ndewdropper\ndewer\nDewey\ndeweylite\ndewfall\ndewflower\ndewily\ndewiness\ndewlap\ndewlapped\ndewless\ndewlight\ndewlike\ndewool\ndeworm\ndewret\ndewtry\ndewworm\ndewy\ndexiocardia\ndexiotrope\ndexiotropic\ndexiotropism\ndexiotropous\nDexter\ndexter\ndexterical\ndexterity\ndexterous\ndexterously\ndexterousness\ndextrad\ndextral\ndextrality\ndextrally\ndextran\ndextraural\ndextrin\ndextrinase\ndextrinate\ndextrinize\ndextrinous\ndextro\ndextroaural\ndextrocardia\ndextrocardial\ndextrocerebral\ndextrocular\ndextrocularity\ndextroduction\ndextroglucose\ndextrogyrate\ndextrogyration\ndextrogyratory\ndextrogyrous\ndextrolactic\ndextrolimonene\ndextropinene\ndextrorotary\ndextrorotatary\ndextrorotation\ndextrorsal\ndextrorse\ndextrorsely\ndextrosazone\ndextrose\ndextrosinistral\ndextrosinistrally\ndextrosuria\ndextrotartaric\ndextrotropic\ndextrotropous\ndextrous\ndextrously\ndextrousness\ndextroversion\ndey\ndeyhouse\ndeyship\ndeywoman\nDezaley\ndezinc\ndezincation\ndezincification\ndezincify\ndezymotize\ndha\ndhabb\ndhai\ndhak\ndhamnoo\ndhan\ndhangar\ndhanuk\ndhanush\nDhanvantari\ndharana\ndharani\ndharma\ndharmakaya\ndharmashastra\ndharmasmriti\ndharmasutra\ndharmsala\ndharna\ndhaura\ndhauri\ndhava\ndhaw\nDheneb\ndheri\ndhobi\ndhole\ndhoni\ndhoon\ndhoti\ndhoul\ndhow\nDhritarashtra\ndhu\ndhunchee\ndhunchi\nDhundia\ndhurra\ndhyal\ndhyana\ndi\ndiabase\ndiabasic\ndiabetes\ndiabetic\ndiabetogenic\ndiabetogenous\ndiabetometer\ndiablerie\ndiabolarch\ndiabolarchy\ndiabolatry\ndiabolepsy\ndiaboleptic\ndiabolic\ndiabolical\ndiabolically\ndiabolicalness\ndiabolification\ndiabolify\ndiabolism\ndiabolist\ndiabolization\ndiabolize\ndiabological\ndiabology\ndiabolology\ndiabrosis\ndiabrotic\nDiabrotica\ndiacanthous\ndiacaustic\ndiacetamide\ndiacetate\ndiacetic\ndiacetin\ndiacetine\ndiacetonuria\ndiaceturia\ndiacetyl\ndiacetylene\ndiachoretic\ndiachronic\ndiachylon\ndiachylum\ndiacid\ndiacipiperazine\ndiaclase\ndiaclasis\ndiaclastic\ndiacle\ndiaclinal\ndiacodion\ndiacoele\ndiacoelia\ndiaconal\ndiaconate\ndiaconia\ndiaconicon\ndiaconicum\ndiacope\ndiacranterian\ndiacranteric\ndiacrisis\ndiacritic\ndiacritical\ndiacritically\nDiacromyodi\ndiacromyodian\ndiact\ndiactin\ndiactinal\ndiactinic\ndiactinism\nDiadelphia\ndiadelphian\ndiadelphic\ndiadelphous\ndiadem\nDiadema\nDiadematoida\ndiaderm\ndiadermic\ndiadoche\nDiadochi\nDiadochian\ndiadochite\ndiadochokinesia\ndiadochokinetic\ndiadromous\ndiadumenus\ndiaene\ndiaereses\ndiaeresis\ndiaeretic\ndiaetetae\ndiagenesis\ndiagenetic\ndiageotropic\ndiageotropism\ndiaglyph\ndiaglyphic\ndiagnosable\ndiagnose\ndiagnoseable\ndiagnoses\ndiagnosis\ndiagnostic\ndiagnostically\ndiagnosticate\ndiagnostication\ndiagnostician\ndiagnostics\ndiagometer\ndiagonal\ndiagonality\ndiagonalize\ndiagonally\ndiagonalwise\ndiagonic\ndiagram\ndiagrammatic\ndiagrammatical\ndiagrammatician\ndiagrammatize\ndiagrammeter\ndiagrammitically\ndiagraph\ndiagraphic\ndiagraphical\ndiagraphics\ndiagredium\ndiagrydium\nDiaguitas\nDiaguite\ndiaheliotropic\ndiaheliotropically\ndiaheliotropism\ndiakinesis\ndial\ndialcohol\ndialdehyde\ndialect\ndialectal\ndialectalize\ndialectally\ndialectic\ndialectical\ndialectically\ndialectician\ndialecticism\ndialecticize\ndialectics\ndialectologer\ndialectological\ndialectologist\ndialectology\ndialector\ndialer\ndialin\ndialing\ndialist\nDialister\ndialkyl\ndialkylamine\ndiallage\ndiallagic\ndiallagite\ndiallagoid\ndiallel\ndiallelon\ndiallelus\ndiallyl\ndialogic\ndialogical\ndialogically\ndialogism\ndialogist\ndialogistic\ndialogistical\ndialogistically\ndialogite\ndialogize\ndialogue\ndialoguer\nDialonian\ndialuric\ndialycarpous\nDialypetalae\ndialypetalous\ndialyphyllous\ndialysepalous\ndialysis\ndialystaminous\ndialystelic\ndialystely\ndialytic\ndialytically\ndialyzability\ndialyzable\ndialyzate\ndialyzation\ndialyzator\ndialyze\ndialyzer\ndiamagnet\ndiamagnetic\ndiamagnetically\ndiamagnetism\ndiamantiferous\ndiamantine\ndiamantoid\ndiamb\ndiambic\ndiamesogamous\ndiameter\ndiametral\ndiametrally\ndiametric\ndiametrical\ndiametrically\ndiamicton\ndiamide\ndiamidogen\ndiamine\ndiaminogen\ndiaminogene\ndiammine\ndiamminobromide\ndiamminonitrate\ndiammonium\ndiamond\ndiamondback\ndiamonded\ndiamondiferous\ndiamondize\ndiamondlike\ndiamondwise\ndiamondwork\ndiamorphine\ndiamylose\nDian\ndian\nDiana\nDiancecht\ndiander\nDiandria\ndiandrian\ndiandrous\nDiane\ndianetics\nDianil\ndianilid\ndianilide\ndianisidin\ndianisidine\ndianite\ndianodal\ndianoetic\ndianoetical\ndianoetically\nDianthaceae\nDianthera\nDianthus\ndiapalma\ndiapase\ndiapasm\ndiapason\ndiapasonal\ndiapause\ndiapedesis\ndiapedetic\nDiapensia\nDiapensiaceae\ndiapensiaceous\ndiapente\ndiaper\ndiapering\ndiaphane\ndiaphaneity\ndiaphanie\ndiaphanometer\ndiaphanometric\ndiaphanometry\ndiaphanoscope\ndiaphanoscopy\ndiaphanotype\ndiaphanous\ndiaphanously\ndiaphanousness\ndiaphany\ndiaphone\ndiaphonia\ndiaphonic\ndiaphonical\ndiaphony\ndiaphoresis\ndiaphoretic\ndiaphoretical\ndiaphorite\ndiaphote\ndiaphototropic\ndiaphototropism\ndiaphragm\ndiaphragmal\ndiaphragmatic\ndiaphragmatically\ndiaphtherin\ndiaphysial\ndiaphysis\ndiaplasma\ndiaplex\ndiaplexal\ndiaplexus\ndiapnoic\ndiapnotic\ndiapophysial\ndiapophysis\nDiaporthe\ndiapositive\ndiapsid\nDiapsida\ndiapsidan\ndiapyesis\ndiapyetic\ndiarch\ndiarchial\ndiarchic\ndiarchy\ndiarhemia\ndiarial\ndiarian\ndiarist\ndiaristic\ndiarize\ndiarrhea\ndiarrheal\ndiarrheic\ndiarrhetic\ndiarsenide\ndiarthric\ndiarthrodial\ndiarthrosis\ndiarticular\ndiary\ndiaschisis\ndiaschisma\ndiaschistic\nDiascia\ndiascope\ndiascopy\ndiascord\ndiascordium\ndiaskeuasis\ndiaskeuast\nDiaspidinae\ndiaspidine\nDiaspinae\ndiaspine\ndiaspirin\nDiaspora\ndiaspore\ndiastaltic\ndiastase\ndiastasic\ndiastasimetry\ndiastasis\ndiastataxic\ndiastataxy\ndiastatic\ndiastatically\ndiastem\ndiastema\ndiastematic\ndiastematomyelia\ndiaster\ndiastole\ndiastolic\ndiastomatic\ndiastral\ndiastrophe\ndiastrophic\ndiastrophism\ndiastrophy\ndiasynthesis\ndiasyrm\ndiatessaron\ndiathermacy\ndiathermal\ndiathermancy\ndiathermaneity\ndiathermanous\ndiathermic\ndiathermize\ndiathermometer\ndiathermotherapy\ndiathermous\ndiathermy\ndiathesic\ndiathesis\ndiathetic\ndiatom\nDiatoma\nDiatomaceae\ndiatomacean\ndiatomaceoid\ndiatomaceous\nDiatomales\nDiatomeae\ndiatomean\ndiatomic\ndiatomicity\ndiatomiferous\ndiatomin\ndiatomist\ndiatomite\ndiatomous\ndiatonic\ndiatonical\ndiatonically\ndiatonous\ndiatoric\ndiatreme\ndiatribe\ndiatribist\ndiatropic\ndiatropism\nDiatryma\nDiatrymiformes\nDiau\ndiaulic\ndiaulos\ndiaxial\ndiaxon\ndiazenithal\ndiazeuctic\ndiazeuxis\ndiazide\ndiazine\ndiazoamine\ndiazoamino\ndiazoaminobenzene\ndiazoanhydride\ndiazoate\ndiazobenzene\ndiazohydroxide\ndiazoic\ndiazoimide\ndiazoimido\ndiazole\ndiazoma\ndiazomethane\ndiazonium\ndiazotate\ndiazotic\ndiazotizability\ndiazotizable\ndiazotization\ndiazotize\ndiazotype\ndib\ndibase\ndibasic\ndibasicity\ndibatag\nDibatis\ndibber\ndibble\ndibbler\ndibbuk\ndibenzophenazine\ndibenzopyrrole\ndibenzoyl\ndibenzyl\ndibhole\ndiblastula\ndiborate\nDibothriocephalus\ndibrach\ndibranch\nDibranchia\nDibranchiata\ndibranchiate\ndibranchious\ndibrom\ndibromid\ndibromide\ndibromoacetaldehyde\ndibromobenzene\ndibs\ndibstone\ndibutyrate\ndibutyrin\ndicacodyl\nDicaeidae\ndicaeology\ndicalcic\ndicalcium\ndicarbonate\ndicarbonic\ndicarboxylate\ndicarboxylic\ndicarpellary\ndicaryon\ndicaryophase\ndicaryophyte\ndicaryotic\ndicast\ndicastery\ndicastic\ndicatalectic\ndicatalexis\nDiccon\ndice\ndiceboard\ndicebox\ndicecup\ndicellate\ndiceman\nDicentra\ndicentrine\ndicephalism\ndicephalous\ndicephalus\ndiceplay\ndicer\nDiceras\nDiceratidae\ndicerion\ndicerous\ndicetyl\ndich\nDichapetalaceae\nDichapetalum\ndichas\ndichasial\ndichasium\ndichastic\nDichelyma\ndichlamydeous\ndichloramine\ndichlorhydrin\ndichloride\ndichloroacetic\ndichlorohydrin\ndichloromethane\ndichocarpism\ndichocarpous\ndichogamous\ndichogamy\nDichondra\nDichondraceae\ndichopodial\ndichoptic\ndichord\ndichoree\nDichorisandra\ndichotic\ndichotomal\ndichotomic\ndichotomically\ndichotomist\ndichotomistic\ndichotomization\ndichotomize\ndichotomous\ndichotomously\ndichotomy\ndichroic\ndichroiscope\ndichroism\ndichroite\ndichroitic\ndichromasy\ndichromat\ndichromate\ndichromatic\ndichromatism\ndichromic\ndichromism\ndichronous\ndichrooscope\ndichroous\ndichroscope\ndichroscopic\nDichter\ndicing\nDick\ndick\ndickcissel\ndickens\nDickensian\nDickensiana\ndicker\ndickey\ndickeybird\ndickinsonite\nDicksonia\ndicky\nDiclidantheraceae\ndiclinic\ndiclinism\ndiclinous\nDiclytra\ndicoccous\ndicodeine\ndicoelious\ndicolic\ndicolon\ndicondylian\ndicot\ndicotyl\ndicotyledon\ndicotyledonary\nDicotyledones\ndicotyledonous\nDicotyles\nDicotylidae\ndicotylous\ndicoumarin\nDicranaceae\ndicranaceous\ndicranoid\ndicranterian\nDicranum\nDicrostonyx\ndicrotal\ndicrotic\ndicrotism\ndicrotous\nDicruridae\ndicta\nDictaen\nDictamnus\nDictaphone\ndictate\ndictatingly\ndictation\ndictational\ndictative\ndictator\ndictatorial\ndictatorialism\ndictatorially\ndictatorialness\ndictatorship\ndictatory\ndictatress\ndictatrix\ndictature\ndictic\ndiction\ndictionary\nDictograph\ndictum\ndictynid\nDictynidae\nDictyoceratina\ndictyoceratine\ndictyodromous\ndictyogen\ndictyogenous\nDictyograptus\ndictyoid\nDictyonema\nDictyonina\ndictyonine\nDictyophora\ndictyopteran\nDictyopteris\nDictyosiphon\nDictyosiphonaceae\ndictyosiphonaceous\ndictyosome\ndictyostele\ndictyostelic\nDictyota\nDictyotaceae\ndictyotaceous\nDictyotales\ndictyotic\nDictyoxylon\ndicyanide\ndicyanine\ndicyanodiamide\ndicyanogen\ndicycle\ndicyclic\nDicyclica\ndicyclist\nDicyema\nDicyemata\ndicyemid\nDicyemida\nDicyemidae\nDicynodon\ndicynodont\nDicynodontia\nDicynodontidae\ndid\nDidache\nDidachist\ndidactic\ndidactical\ndidacticality\ndidactically\ndidactician\ndidacticism\ndidacticity\ndidactics\ndidactive\ndidactyl\ndidactylism\ndidactylous\ndidapper\ndidascalar\ndidascaliae\ndidascalic\ndidascalos\ndidascaly\ndidder\ndiddle\ndiddler\ndiddy\ndidelph\nDidelphia\ndidelphian\ndidelphic\ndidelphid\nDidelphidae\ndidelphine\nDidelphis\ndidelphoid\ndidelphous\nDidelphyidae\ndidepsid\ndidepside\nDididae\ndidie\ndidine\nDidinium\ndidle\ndidna\ndidnt\nDido\ndidodecahedral\ndidodecahedron\ndidrachma\ndidrachmal\ndidromy\ndidst\ndiductor\nDidunculidae\nDidunculinae\nDidunculus\nDidus\ndidym\ndidymate\ndidymia\ndidymitis\ndidymium\ndidymoid\ndidymolite\ndidymous\ndidymus\nDidynamia\ndidynamian\ndidynamic\ndidynamous\ndidynamy\ndie\ndieb\ndieback\ndiectasis\ndiedral\ndiedric\nDieffenbachia\nDiego\nDiegueno\ndiehard\ndielectric\ndielectrically\ndielike\nDielytra\ndiem\ndiemaker\ndiemaking\ndiencephalic\ndiencephalon\ndiene\ndier\nDieri\nDiervilla\ndiesel\ndieselization\ndieselize\ndiesinker\ndiesinking\ndiesis\ndiestock\ndiet\ndietal\ndietarian\ndietary\nDieter\ndieter\ndietetic\ndietetically\ndietetics\ndietetist\ndiethanolamine\ndiethyl\ndiethylamine\ndiethylenediamine\ndiethylstilbestrol\ndietic\ndietician\ndietics\ndietine\ndietist\ndietitian\ndietotherapeutics\ndietotherapy\ndietotoxic\ndietotoxicity\ndietrichite\ndietzeite\ndiewise\nDieyerie\ndiezeugmenon\nDifda\ndiferrion\ndiffame\ndiffarreation\ndiffer\ndifference\ndifferencingly\ndifferent\ndifferentia\ndifferentiable\ndifferential\ndifferentialize\ndifferentially\ndifferentiant\ndifferentiate\ndifferentiation\ndifferentiator\ndifferently\ndifferentness\ndifferingly\ndifficile\ndifficileness\ndifficult\ndifficultly\ndifficultness\ndifficulty\ndiffidation\ndiffide\ndiffidence\ndiffident\ndiffidently\ndiffidentness\ndiffinity\ndiffluence\ndiffluent\nDifflugia\ndifform\ndifformed\ndifformity\ndiffract\ndiffraction\ndiffractive\ndiffractively\ndiffractiveness\ndiffractometer\ndiffrangibility\ndiffrangible\ndiffugient\ndiffusate\ndiffuse\ndiffused\ndiffusedly\ndiffusely\ndiffuseness\ndiffuser\ndiffusibility\ndiffusible\ndiffusibleness\ndiffusibly\ndiffusimeter\ndiffusiometer\ndiffusion\ndiffusionism\ndiffusionist\ndiffusive\ndiffusively\ndiffusiveness\ndiffusivity\ndiffusor\ndiformin\ndig\ndigallate\ndigallic\ndigametic\ndigamist\ndigamma\ndigammated\ndigammic\ndigamous\ndigamy\ndigastric\nDigenea\ndigeneous\ndigenesis\ndigenetic\nDigenetica\ndigenic\ndigenous\ndigeny\ndigerent\ndigest\ndigestant\ndigested\ndigestedly\ndigestedness\ndigester\ndigestibility\ndigestible\ndigestibleness\ndigestibly\ndigestion\ndigestional\ndigestive\ndigestively\ndigestiveness\ndigestment\ndiggable\ndigger\ndigging\ndiggings\ndight\ndighter\ndigit\ndigital\ndigitalein\ndigitalin\ndigitalis\ndigitalism\ndigitalization\ndigitalize\ndigitally\nDigitaria\ndigitate\ndigitated\ndigitately\ndigitation\ndigitiform\nDigitigrada\ndigitigrade\ndigitigradism\ndigitinervate\ndigitinerved\ndigitipinnate\ndigitize\ndigitizer\ndigitogenin\ndigitonin\ndigitoplantar\ndigitorium\ndigitoxin\ndigitoxose\ndigitule\ndigitus\ndigladiate\ndigladiation\ndigladiator\ndiglossia\ndiglot\ndiglottic\ndiglottism\ndiglottist\ndiglucoside\ndiglyceride\ndiglyph\ndiglyphic\ndigmeat\ndignification\ndignified\ndignifiedly\ndignifiedness\ndignify\ndignitarial\ndignitarian\ndignitary\ndignity\ndigoneutic\ndigoneutism\ndigonoporous\ndigonous\nDigor\ndigram\ndigraph\ndigraphic\ndigredience\ndigrediency\ndigredient\ndigress\ndigressingly\ndigression\ndigressional\ndigressionary\ndigressive\ndigressively\ndigressiveness\ndigressory\ndigs\ndiguanide\nDigynia\ndigynian\ndigynous\ndihalide\ndihalo\ndihalogen\ndihedral\ndihedron\ndihexagonal\ndihexahedral\ndihexahedron\ndihybrid\ndihybridism\ndihydrate\ndihydrated\ndihydrazone\ndihydric\ndihydride\ndihydrite\ndihydrocupreine\ndihydrocuprin\ndihydrogen\ndihydrol\ndihydronaphthalene\ndihydronicotine\ndihydrotachysterol\ndihydroxy\ndihydroxysuccinic\ndihydroxytoluene\ndihysteria\ndiiamb\ndiiambus\ndiiodide\ndiiodo\ndiiodoform\ndiipenates\nDiipolia\ndiisatogen\ndijudicate\ndijudication\ndika\ndikage\ndikamali\ndikaryon\ndikaryophase\ndikaryophasic\ndikaryophyte\ndikaryophytic\ndikaryotic\nDike\ndike\ndikegrave\ndikelocephalid\nDikelocephalus\ndiker\ndikereeve\ndikeside\ndiketo\ndiketone\ndikkop\ndiktyonite\ndilacerate\ndilaceration\ndilambdodont\ndilamination\nDilantin\ndilapidate\ndilapidated\ndilapidation\ndilapidator\ndilatability\ndilatable\ndilatableness\ndilatably\ndilatancy\ndilatant\ndilatate\ndilatation\ndilatative\ndilatator\ndilatatory\ndilate\ndilated\ndilatedly\ndilatedness\ndilater\ndilatingly\ndilation\ndilative\ndilatometer\ndilatometric\ndilatometry\ndilator\ndilatorily\ndilatoriness\ndilatory\ndildo\ndilection\nDilemi\nDilemite\ndilemma\ndilemmatic\ndilemmatical\ndilemmatically\ndilettant\ndilettante\ndilettanteish\ndilettanteism\ndilettanteship\ndilettanti\ndilettantish\ndilettantism\ndilettantist\ndiligence\ndiligency\ndiligent\ndiligentia\ndiligently\ndiligentness\ndilker\ndill\nDillenia\nDilleniaceae\ndilleniaceous\ndilleniad\ndilli\ndillier\ndilligrout\ndilling\ndillseed\ndillue\ndilluer\ndillweed\ndilly\ndillydallier\ndillydally\ndillyman\ndilo\ndilogy\ndiluent\ndilute\ndiluted\ndilutedly\ndilutedness\ndilutee\ndilutely\ndiluteness\ndilutent\ndiluter\ndilution\ndilutive\ndilutor\ndiluvia\ndiluvial\ndiluvialist\ndiluvian\ndiluvianism\ndiluvion\ndiluvium\ndim\ndimagnesic\ndimanganion\ndimanganous\nDimaris\ndimastigate\nDimatis\ndimber\ndimberdamber\ndimble\ndime\ndimensible\ndimension\ndimensional\ndimensionality\ndimensionally\ndimensioned\ndimensionless\ndimensive\ndimer\nDimera\ndimeran\ndimercuric\ndimercurion\ndimercury\ndimeric\ndimeride\ndimerism\ndimerization\ndimerlie\ndimerous\ndimetallic\ndimeter\ndimethoxy\ndimethyl\ndimethylamine\ndimethylamino\ndimethylaniline\ndimethylbenzene\ndimetria\ndimetric\nDimetry\ndimication\ndimidiate\ndimidiation\ndiminish\ndiminishable\ndiminishableness\ndiminisher\ndiminishingly\ndiminishment\ndiminuendo\ndiminutal\ndiminute\ndiminution\ndiminutival\ndiminutive\ndiminutively\ndiminutiveness\ndiminutivize\ndimiss\ndimission\ndimissorial\ndimissory\ndimit\nDimitry\nDimittis\ndimity\ndimly\ndimmed\ndimmedness\ndimmer\ndimmest\ndimmet\ndimmish\nDimna\ndimness\ndimolecular\ndimoric\ndimorph\ndimorphic\ndimorphism\nDimorphotheca\ndimorphous\ndimple\ndimplement\ndimply\ndimps\ndimpsy\nDimyaria\ndimyarian\ndimyaric\ndin\nDinah\ndinamode\nDinantian\ndinaphthyl\ndinar\nDinaric\nDinarzade\ndinder\ndindle\nDindymene\nDindymus\ndine\ndiner\ndinergate\ndineric\ndinero\ndinette\ndineuric\nding\ndingar\ndingbat\ndingdong\ndinge\ndingee\ndinghee\ndinghy\ndingily\ndinginess\ndingle\ndingleberry\ndinglebird\ndingledangle\ndingly\ndingmaul\ndingo\ndingus\nDingwall\ndingy\ndinheiro\ndinic\ndinical\nDinichthys\ndining\ndinitrate\ndinitril\ndinitrile\ndinitro\ndinitrobenzene\ndinitrocellulose\ndinitrophenol\ndinitrotoluene\ndink\nDinka\ndinkey\ndinkum\ndinky\ndinmont\ndinner\ndinnerless\ndinnerly\ndinnertime\ndinnerware\ndinnery\nDinobryon\nDinoceras\nDinocerata\ndinoceratan\ndinoceratid\nDinoceratidae\nDinoflagellata\nDinoflagellatae\ndinoflagellate\nDinoflagellida\ndinomic\nDinomys\nDinophilea\nDinophilus\nDinophyceae\nDinornis\nDinornithes\ndinornithic\ndinornithid\nDinornithidae\nDinornithiformes\ndinornithine\ndinornithoid\ndinosaur\nDinosauria\ndinosaurian\ndinothere\nDinotheres\ndinotherian\nDinotheriidae\nDinotherium\ndinsome\ndint\ndintless\ndinus\ndiobely\ndiobol\ndiocesan\ndiocese\nDiocletian\ndioctahedral\nDioctophyme\ndiode\nDiodia\nDiodon\ndiodont\nDiodontidae\nDioecia\ndioecian\ndioeciodimorphous\ndioeciopolygamous\ndioecious\ndioeciously\ndioeciousness\ndioecism\ndioecy\ndioestrous\ndioestrum\ndioestrus\nDiogenean\nDiogenic\ndiogenite\ndioicous\ndiol\ndiolefin\ndiolefinic\nDiomedea\nDiomedeidae\nDion\nDionaea\nDionaeaceae\nDione\ndionise\ndionym\ndionymal\nDionysia\nDionysiac\nDionysiacal\nDionysiacally\nDioon\nDiophantine\nDiopsidae\ndiopside\nDiopsis\ndioptase\ndiopter\nDioptidae\ndioptograph\ndioptometer\ndioptometry\ndioptoscopy\ndioptra\ndioptral\ndioptrate\ndioptric\ndioptrical\ndioptrically\ndioptrics\ndioptrometer\ndioptrometry\ndioptroscopy\ndioptry\ndiorama\ndioramic\ndiordinal\ndiorite\ndioritic\ndiorthosis\ndiorthotic\nDioscorea\nDioscoreaceae\ndioscoreaceous\ndioscorein\ndioscorine\nDioscuri\nDioscurian\ndiose\nDiosma\ndiosmin\ndiosmose\ndiosmosis\ndiosmotic\ndiosphenol\nDiospyraceae\ndiospyraceous\nDiospyros\ndiota\ndiotic\nDiotocardia\ndiovular\ndioxane\ndioxide\ndioxime\ndioxindole\ndioxy\ndip\nDipala\ndiparentum\ndipartite\ndipartition\ndipaschal\ndipentene\ndipeptid\ndipeptide\ndipetalous\ndipetto\ndiphase\ndiphaser\ndiphasic\ndiphead\ndiphenol\ndiphenyl\ndiphenylamine\ndiphenylchloroarsine\ndiphenylene\ndiphenylenimide\ndiphenylguanidine\ndiphenylmethane\ndiphenylquinomethane\ndiphenylthiourea\ndiphosgene\ndiphosphate\ndiphosphide\ndiphosphoric\ndiphosphothiamine\ndiphrelatic\ndiphtheria\ndiphtherial\ndiphtherian\ndiphtheric\ndiphtheritic\ndiphtheritically\ndiphtheritis\ndiphtheroid\ndiphtheroidal\ndiphtherotoxin\ndiphthong\ndiphthongal\ndiphthongalize\ndiphthongally\ndiphthongation\ndiphthongic\ndiphthongization\ndiphthongize\ndiphycercal\ndiphycercy\nDiphyes\ndiphygenic\ndiphyletic\nDiphylla\nDiphylleia\nDiphyllobothrium\ndiphyllous\ndiphyodont\ndiphyozooid\nDiphysite\nDiphysitism\ndiphyzooid\ndipicrate\ndipicrylamin\ndipicrylamine\nDiplacanthidae\nDiplacanthus\ndiplacusis\nDipladenia\ndiplanar\ndiplanetic\ndiplanetism\ndiplantidian\ndiplarthrism\ndiplarthrous\ndiplasiasmus\ndiplasic\ndiplasion\ndiplegia\ndipleidoscope\ndipleura\ndipleural\ndipleurogenesis\ndipleurogenetic\ndiplex\ndiplobacillus\ndiplobacterium\ndiploblastic\ndiplocardia\ndiplocardiac\nDiplocarpon\ndiplocaulescent\ndiplocephalous\ndiplocephalus\ndiplocephaly\ndiplochlamydeous\ndiplococcal\ndiplococcemia\ndiplococcic\ndiplococcoid\ndiplococcus\ndiploconical\ndiplocoria\nDiplodia\nDiplodocus\nDiplodus\ndiploe\ndiploetic\ndiplogangliate\ndiplogenesis\ndiplogenetic\ndiplogenic\nDiploglossata\ndiploglossate\ndiplograph\ndiplographic\ndiplographical\ndiplography\ndiplohedral\ndiplohedron\ndiploic\ndiploid\ndiploidic\ndiploidion\ndiploidy\ndiplois\ndiplokaryon\ndiploma\ndiplomacy\ndiplomat\ndiplomate\ndiplomatic\ndiplomatical\ndiplomatically\ndiplomatics\ndiplomatism\ndiplomatist\ndiplomatize\ndiplomatology\ndiplomyelia\ndiplonema\ndiplonephridia\ndiploneural\ndiplont\ndiploperistomic\ndiplophase\ndiplophyte\ndiplopia\ndiplopic\ndiploplacula\ndiploplacular\ndiploplaculate\ndiplopod\nDiplopoda\ndiplopodic\nDiploptera\ndiplopterous\nDiplopteryga\ndiplopy\ndiplosis\ndiplosome\ndiplosphenal\ndiplosphene\nDiplospondyli\ndiplospondylic\ndiplospondylism\ndiplostemonous\ndiplostemony\ndiplostichous\nDiplotaxis\ndiplotegia\ndiplotene\nDiplozoon\ndiplumbic\nDipneumona\nDipneumones\ndipneumonous\ndipneustal\nDipneusti\ndipnoan\nDipnoi\ndipnoid\ndipnoous\ndipode\ndipodic\nDipodidae\nDipodomyinae\nDipodomys\ndipody\ndipolar\ndipolarization\ndipolarize\ndipole\ndiporpa\ndipotassic\ndipotassium\ndipped\ndipper\ndipperful\ndipping\ndiprimary\ndiprismatic\ndipropargyl\ndipropyl\nDiprotodon\ndiprotodont\nDiprotodontia\nDipsacaceae\ndipsacaceous\nDipsaceae\ndipsaceous\nDipsacus\nDipsadinae\ndipsas\ndipsetic\ndipsey\ndipsomania\ndipsomaniac\ndipsomaniacal\nDipsosaurus\ndipsosis\ndipter\nDiptera\nDipteraceae\ndipteraceous\ndipterad\ndipteral\ndipteran\ndipterist\ndipterocarp\nDipterocarpaceae\ndipterocarpaceous\ndipterocarpous\nDipterocarpus\ndipterocecidium\ndipterological\ndipterologist\ndipterology\ndipteron\ndipteros\ndipterous\nDipteryx\ndiptote\ndiptych\nDipus\ndipware\ndipygus\ndipylon\ndipyre\ndipyrenous\ndipyridyl\nDirca\nDircaean\ndird\ndirdum\ndire\ndirect\ndirectable\ndirected\ndirecter\ndirection\ndirectional\ndirectionally\ndirectionless\ndirectitude\ndirective\ndirectively\ndirectiveness\ndirectivity\ndirectly\ndirectness\nDirectoire\ndirector\ndirectoral\ndirectorate\ndirectorial\ndirectorially\ndirectorship\ndirectory\ndirectress\ndirectrices\ndirectrix\ndireful\ndirefully\ndirefulness\ndirely\ndirempt\ndiremption\ndireness\ndireption\ndirge\ndirgeful\ndirgelike\ndirgeman\ndirgler\ndirhem\nDirian\nDirichletian\ndirigent\ndirigibility\ndirigible\ndirigomotor\ndiriment\nDirk\ndirk\ndirl\ndirndl\ndirt\ndirtbird\ndirtboard\ndirten\ndirtily\ndirtiness\ndirtplate\ndirty\ndis\nDisa\ndisability\ndisable\ndisabled\ndisablement\ndisabusal\ndisabuse\ndisacceptance\ndisaccharide\ndisaccharose\ndisaccommodate\ndisaccommodation\ndisaccord\ndisaccordance\ndisaccordant\ndisaccustom\ndisaccustomed\ndisaccustomedness\ndisacidify\ndisacknowledge\ndisacknowledgement\ndisacquaint\ndisacquaintance\ndisadjust\ndisadorn\ndisadvance\ndisadvantage\ndisadvantageous\ndisadvantageously\ndisadvantageousness\ndisadventure\ndisadventurous\ndisadvise\ndisaffect\ndisaffectation\ndisaffected\ndisaffectedly\ndisaffectedness\ndisaffection\ndisaffectionate\ndisaffiliate\ndisaffiliation\ndisaffirm\ndisaffirmance\ndisaffirmation\ndisaffirmative\ndisafforest\ndisafforestation\ndisafforestment\ndisagglomeration\ndisaggregate\ndisaggregation\ndisaggregative\ndisagio\ndisagree\ndisagreeability\ndisagreeable\ndisagreeableness\ndisagreeably\ndisagreed\ndisagreement\ndisagreer\ndisalicylide\ndisalign\ndisalignment\ndisalike\ndisallow\ndisallowable\ndisallowableness\ndisallowance\ndisally\ndisamenity\nDisamis\ndisanagrammatize\ndisanalogous\ndisangularize\ndisanimal\ndisanimate\ndisanimation\ndisannex\ndisannexation\ndisannul\ndisannuller\ndisannulment\ndisanoint\ndisanswerable\ndisapostle\ndisapparel\ndisappear\ndisappearance\ndisappearer\ndisappearing\ndisappoint\ndisappointed\ndisappointedly\ndisappointer\ndisappointing\ndisappointingly\ndisappointingness\ndisappointment\ndisappreciate\ndisappreciation\ndisapprobation\ndisapprobative\ndisapprobatory\ndisappropriate\ndisappropriation\ndisapprovable\ndisapproval\ndisapprove\ndisapprover\ndisapprovingly\ndisaproned\ndisarchbishop\ndisarm\ndisarmament\ndisarmature\ndisarmed\ndisarmer\ndisarming\ndisarmingly\ndisarrange\ndisarrangement\ndisarray\ndisarticulate\ndisarticulation\ndisarticulator\ndisasinate\ndisasinize\ndisassemble\ndisassembly\ndisassimilate\ndisassimilation\ndisassimilative\ndisassociate\ndisassociation\ndisaster\ndisastimeter\ndisastrous\ndisastrously\ndisastrousness\ndisattaint\ndisattire\ndisattune\ndisauthenticate\ndisauthorize\ndisavow\ndisavowable\ndisavowal\ndisavowedly\ndisavower\ndisavowment\ndisawa\ndisazo\ndisbalance\ndisbalancement\ndisband\ndisbandment\ndisbar\ndisbark\ndisbarment\ndisbelief\ndisbelieve\ndisbeliever\ndisbelieving\ndisbelievingly\ndisbench\ndisbenchment\ndisbloom\ndisbody\ndisbosom\ndisbowel\ndisbrain\ndisbranch\ndisbud\ndisbudder\ndisburden\ndisburdenment\ndisbursable\ndisburse\ndisbursement\ndisburser\ndisburthen\ndisbury\ndisbutton\ndisc\ndiscage\ndiscal\ndiscalceate\ndiscalced\ndiscanonization\ndiscanonize\ndiscanter\ndiscantus\ndiscapacitate\ndiscard\ndiscardable\ndiscarder\ndiscardment\ndiscarnate\ndiscarnation\ndiscase\ndiscastle\ndiscept\ndisceptation\ndisceptator\ndiscern\ndiscerner\ndiscernible\ndiscernibleness\ndiscernibly\ndiscerning\ndiscerningly\ndiscernment\ndiscerp\ndiscerpibility\ndiscerpible\ndiscerpibleness\ndiscerptibility\ndiscerptible\ndiscerptibleness\ndiscerption\ndischaracter\ndischarge\ndischargeable\ndischargee\ndischarger\ndischarging\ndischarity\ndischarm\ndischase\nDisciflorae\ndiscifloral\ndisciform\ndiscigerous\nDiscina\ndiscinct\ndiscinoid\ndisciple\ndisciplelike\ndiscipleship\ndisciplinability\ndisciplinable\ndisciplinableness\ndisciplinal\ndisciplinant\ndisciplinarian\ndisciplinarianism\ndisciplinarily\ndisciplinary\ndisciplinative\ndisciplinatory\ndiscipline\ndiscipliner\ndiscipular\ndiscircumspection\ndiscission\ndiscitis\ndisclaim\ndisclaimant\ndisclaimer\ndisclamation\ndisclamatory\ndisclass\ndisclassify\ndisclike\ndisclimax\ndiscloister\ndisclose\ndisclosed\ndiscloser\ndisclosive\ndisclosure\ndiscloud\ndiscoach\ndiscoactine\ndiscoblastic\ndiscoblastula\ndiscobolus\ndiscocarp\ndiscocarpium\ndiscocarpous\ndiscocephalous\ndiscodactyl\ndiscodactylous\ndiscogastrula\ndiscoglossid\nDiscoglossidae\ndiscoglossoid\ndiscographical\ndiscography\ndiscohexaster\ndiscoid\ndiscoidal\nDiscoidea\nDiscoideae\ndiscolichen\ndiscolith\ndiscolor\ndiscolorate\ndiscoloration\ndiscolored\ndiscoloredness\ndiscolorization\ndiscolorment\ndiscolourization\nDiscomedusae\ndiscomedusan\ndiscomedusoid\ndiscomfit\ndiscomfiter\ndiscomfiture\ndiscomfort\ndiscomfortable\ndiscomfortableness\ndiscomforting\ndiscomfortingly\ndiscommend\ndiscommendable\ndiscommendableness\ndiscommendably\ndiscommendation\ndiscommender\ndiscommode\ndiscommodious\ndiscommodiously\ndiscommodiousness\ndiscommodity\ndiscommon\ndiscommons\ndiscommunity\ndiscomorula\ndiscompliance\ndiscompose\ndiscomposed\ndiscomposedly\ndiscomposedness\ndiscomposing\ndiscomposingly\ndiscomposure\ndiscomycete\nDiscomycetes\ndiscomycetous\nDisconanthae\ndisconanthous\ndisconcert\ndisconcerted\ndisconcertedly\ndisconcertedness\ndisconcerting\ndisconcertingly\ndisconcertingness\ndisconcertion\ndisconcertment\ndisconcord\ndisconduce\ndisconducive\nDisconectae\ndisconform\ndisconformable\ndisconformity\ndiscongruity\ndisconjure\ndisconnect\ndisconnected\ndisconnectedly\ndisconnectedness\ndisconnecter\ndisconnection\ndisconnective\ndisconnectiveness\ndisconnector\ndisconsider\ndisconsideration\ndisconsolate\ndisconsolately\ndisconsolateness\ndisconsolation\ndisconsonancy\ndisconsonant\ndiscontent\ndiscontented\ndiscontentedly\ndiscontentedness\ndiscontentful\ndiscontenting\ndiscontentive\ndiscontentment\ndiscontiguity\ndiscontiguous\ndiscontiguousness\ndiscontinuable\ndiscontinuance\ndiscontinuation\ndiscontinue\ndiscontinuee\ndiscontinuer\ndiscontinuity\ndiscontinuor\ndiscontinuous\ndiscontinuously\ndiscontinuousness\ndisconula\ndisconvenience\ndisconvenient\ndisconventicle\ndiscophile\nDiscophora\ndiscophoran\ndiscophore\ndiscophorous\ndiscoplacenta\ndiscoplacental\nDiscoplacentalia\ndiscoplacentalian\ndiscoplasm\ndiscopodous\ndiscord\ndiscordance\ndiscordancy\ndiscordant\ndiscordantly\ndiscordantness\ndiscordful\nDiscordia\ndiscording\ndiscorporate\ndiscorrespondency\ndiscorrespondent\ndiscount\ndiscountable\ndiscountenance\ndiscountenancer\ndiscounter\ndiscouple\ndiscourage\ndiscourageable\ndiscouragement\ndiscourager\ndiscouraging\ndiscouragingly\ndiscouragingness\ndiscourse\ndiscourseless\ndiscourser\ndiscoursive\ndiscoursively\ndiscoursiveness\ndiscourteous\ndiscourteously\ndiscourteousness\ndiscourtesy\ndiscous\ndiscovenant\ndiscover\ndiscoverability\ndiscoverable\ndiscoverably\ndiscovered\ndiscoverer\ndiscovert\ndiscoverture\ndiscovery\ndiscreate\ndiscreation\ndiscredence\ndiscredit\ndiscreditability\ndiscreditable\ndiscreet\ndiscreetly\ndiscreetness\ndiscrepance\ndiscrepancy\ndiscrepant\ndiscrepantly\ndiscrepate\ndiscrepation\ndiscrested\ndiscrete\ndiscretely\ndiscreteness\ndiscretion\ndiscretional\ndiscretionally\ndiscretionarily\ndiscretionary\ndiscretive\ndiscretively\ndiscretiveness\ndiscriminability\ndiscriminable\ndiscriminal\ndiscriminant\ndiscriminantal\ndiscriminate\ndiscriminately\ndiscriminateness\ndiscriminating\ndiscriminatingly\ndiscrimination\ndiscriminational\ndiscriminative\ndiscriminatively\ndiscriminator\ndiscriminatory\ndiscrown\ndisculpate\ndisculpation\ndisculpatory\ndiscumber\ndiscursative\ndiscursativeness\ndiscursify\ndiscursion\ndiscursive\ndiscursively\ndiscursiveness\ndiscursory\ndiscursus\ndiscurtain\ndiscus\ndiscuss\ndiscussable\ndiscussant\ndiscusser\ndiscussible\ndiscussion\ndiscussional\ndiscussionism\ndiscussionist\ndiscussive\ndiscussment\ndiscutable\ndiscutient\ndisdain\ndisdainable\ndisdainer\ndisdainful\ndisdainfully\ndisdainfulness\ndisdainly\ndisdeceive\ndisdenominationalize\ndisdiaclast\ndisdiaclastic\ndisdiapason\ndisdiazo\ndisdiplomatize\ndisdodecahedroid\ndisdub\ndisease\ndiseased\ndiseasedly\ndiseasedness\ndiseaseful\ndiseasefulness\ndisecondary\ndisedge\ndisedification\ndisedify\ndiseducate\ndiselder\ndiselectrification\ndiselectrify\ndiselenide\ndisematism\ndisembargo\ndisembark\ndisembarkation\ndisembarkment\ndisembarrass\ndisembarrassment\ndisembattle\ndisembed\ndisembellish\ndisembitter\ndisembocation\ndisembodiment\ndisembody\ndisembogue\ndisemboguement\ndisembosom\ndisembowel\ndisembowelment\ndisembower\ndisembroil\ndisemburden\ndiseme\ndisemic\ndisemplane\ndisemploy\ndisemployment\ndisempower\ndisenable\ndisenablement\ndisenact\ndisenactment\ndisenamor\ndisenamour\ndisenchain\ndisenchant\ndisenchanter\ndisenchantingly\ndisenchantment\ndisenchantress\ndisencharm\ndisenclose\ndisencumber\ndisencumberment\ndisencumbrance\ndisendow\ndisendower\ndisendowment\ndisenfranchise\ndisenfranchisement\ndisengage\ndisengaged\ndisengagedness\ndisengagement\ndisengirdle\ndisenjoy\ndisenjoyment\ndisenmesh\ndisennoble\ndisennui\ndisenshroud\ndisenslave\ndisensoul\ndisensure\ndisentail\ndisentailment\ndisentangle\ndisentanglement\ndisentangler\ndisenthral\ndisenthrall\ndisenthrallment\ndisenthralment\ndisenthrone\ndisenthronement\ndisentitle\ndisentomb\ndisentombment\ndisentrain\ndisentrainment\ndisentrammel\ndisentrance\ndisentrancement\ndisentwine\ndisenvelop\ndisepalous\ndisequalize\ndisequalizer\ndisequilibrate\ndisequilibration\ndisequilibrium\ndisestablish\ndisestablisher\ndisestablishment\ndisestablishmentarian\ndisesteem\ndisesteemer\ndisestimation\ndisexcommunicate\ndisfaith\ndisfame\ndisfashion\ndisfavor\ndisfavorer\ndisfeature\ndisfeaturement\ndisfellowship\ndisfen\ndisfiguration\ndisfigurative\ndisfigure\ndisfigurement\ndisfigurer\ndisfiguringly\ndisflesh\ndisfoliage\ndisforest\ndisforestation\ndisfranchise\ndisfranchisement\ndisfranchiser\ndisfrequent\ndisfriar\ndisfrock\ndisfurnish\ndisfurnishment\ndisgarland\ndisgarnish\ndisgarrison\ndisgavel\ndisgeneric\ndisgenius\ndisgig\ndisglorify\ndisglut\ndisgood\ndisgorge\ndisgorgement\ndisgorger\ndisgospel\ndisgown\ndisgrace\ndisgraceful\ndisgracefully\ndisgracefulness\ndisgracement\ndisgracer\ndisgracious\ndisgradation\ndisgrade\ndisgregate\ndisgregation\ndisgruntle\ndisgruntlement\ndisguisable\ndisguisal\ndisguise\ndisguised\ndisguisedly\ndisguisedness\ndisguiseless\ndisguisement\ndisguiser\ndisguising\ndisgulf\ndisgust\ndisgusted\ndisgustedly\ndisgustedness\ndisguster\ndisgustful\ndisgustfully\ndisgustfulness\ndisgusting\ndisgustingly\ndisgustingness\ndish\ndishabilitate\ndishabilitation\ndishabille\ndishabituate\ndishallow\ndishallucination\ndisharmonic\ndisharmonical\ndisharmonious\ndisharmonism\ndisharmonize\ndisharmony\ndishboard\ndishcloth\ndishclout\ndisheart\ndishearten\ndisheartener\ndisheartening\ndishearteningly\ndisheartenment\ndisheaven\ndished\ndishellenize\ndishelm\ndisher\ndisherent\ndisherison\ndisherit\ndisheritment\ndishevel\ndisheveled\ndishevelment\ndishexecontahedroid\ndishful\nDishley\ndishlike\ndishling\ndishmaker\ndishmaking\ndishmonger\ndishome\ndishonest\ndishonestly\ndishonor\ndishonorable\ndishonorableness\ndishonorably\ndishonorary\ndishonorer\ndishorn\ndishorner\ndishorse\ndishouse\ndishpan\ndishpanful\ndishrag\ndishumanize\ndishwasher\ndishwashing\ndishwashings\ndishwater\ndishwatery\ndishwiper\ndishwiping\ndisidentify\ndisilane\ndisilicane\ndisilicate\ndisilicic\ndisilicid\ndisilicide\ndisillude\ndisilluminate\ndisillusion\ndisillusionist\ndisillusionize\ndisillusionizer\ndisillusionment\ndisillusive\ndisimagine\ndisimbitter\ndisimitate\ndisimitation\ndisimmure\ndisimpark\ndisimpassioned\ndisimprison\ndisimprisonment\ndisimprove\ndisimprovement\ndisincarcerate\ndisincarceration\ndisincarnate\ndisincarnation\ndisinclination\ndisincline\ndisincorporate\ndisincorporation\ndisincrust\ndisincrustant\ndisincrustion\ndisindividualize\ndisinfect\ndisinfectant\ndisinfecter\ndisinfection\ndisinfective\ndisinfector\ndisinfest\ndisinfestation\ndisinfeudation\ndisinflame\ndisinflate\ndisinflation\ndisingenuity\ndisingenuous\ndisingenuously\ndisingenuousness\ndisinherison\ndisinherit\ndisinheritable\ndisinheritance\ndisinhume\ndisinsulation\ndisinsure\ndisintegrable\ndisintegrant\ndisintegrate\ndisintegration\ndisintegrationist\ndisintegrative\ndisintegrator\ndisintegratory\ndisintegrity\ndisintegrous\ndisintensify\ndisinter\ndisinterest\ndisinterested\ndisinterestedly\ndisinterestedness\ndisinteresting\ndisinterment\ndisintertwine\ndisintrench\ndisintricate\ndisinvagination\ndisinvest\ndisinvestiture\ndisinvigorate\ndisinvite\ndisinvolve\ndisjasked\ndisject\ndisjection\ndisjoin\ndisjoinable\ndisjoint\ndisjointed\ndisjointedly\ndisjointedness\ndisjointly\ndisjointure\ndisjunct\ndisjunction\ndisjunctive\ndisjunctively\ndisjunctor\ndisjuncture\ndisjune\ndisk\ndiskelion\ndiskless\ndisklike\ndislaurel\ndisleaf\ndislegitimate\ndislevelment\ndislicense\ndislikable\ndislike\ndislikelihood\ndisliker\ndisliking\ndislimn\ndislink\ndislip\ndisload\ndislocability\ndislocable\ndislocate\ndislocated\ndislocatedly\ndislocatedness\ndislocation\ndislocator\ndislocatory\ndislodge\ndislodgeable\ndislodgement\ndislove\ndisloyal\ndisloyalist\ndisloyally\ndisloyalty\ndisluster\ndismain\ndismal\ndismality\ndismalize\ndismally\ndismalness\ndisman\ndismantle\ndismantlement\ndismantler\ndismarble\ndismark\ndismarket\ndismask\ndismast\ndismastment\ndismay\ndismayable\ndismayed\ndismayedness\ndismayful\ndismayfully\ndismayingly\ndisme\ndismember\ndismembered\ndismemberer\ndismemberment\ndismembrate\ndismembrator\ndisminion\ndisminister\ndismiss\ndismissable\ndismissal\ndismissible\ndismissingly\ndismission\ndismissive\ndismissory\ndismoded\ndismount\ndismountable\ndismutation\ndisna\ndisnaturalization\ndisnaturalize\ndisnature\ndisnest\ndisnew\ndisniche\ndisnosed\ndisnumber\ndisobedience\ndisobedient\ndisobediently\ndisobey\ndisobeyal\ndisobeyer\ndisobligation\ndisoblige\ndisobliger\ndisobliging\ndisobligingly\ndisobligingness\ndisoccupation\ndisoccupy\ndisodic\ndisodium\ndisomatic\ndisomatous\ndisomic\ndisomus\ndisoperculate\ndisorb\ndisorchard\ndisordained\ndisorder\ndisordered\ndisorderedly\ndisorderedness\ndisorderer\ndisorderliness\ndisorderly\ndisordinated\ndisordination\ndisorganic\ndisorganization\ndisorganize\ndisorganizer\ndisorient\ndisorientate\ndisorientation\ndisown\ndisownable\ndisownment\ndisoxygenate\ndisoxygenation\ndisozonize\ndispapalize\ndisparage\ndisparageable\ndisparagement\ndisparager\ndisparaging\ndisparagingly\ndisparate\ndisparately\ndisparateness\ndisparation\ndisparity\ndispark\ndispart\ndispartment\ndispassionate\ndispassionately\ndispassionateness\ndispassioned\ndispatch\ndispatcher\ndispatchful\ndispatriated\ndispauper\ndispauperize\ndispeace\ndispeaceful\ndispel\ndispeller\ndispend\ndispender\ndispendious\ndispendiously\ndispenditure\ndispensability\ndispensable\ndispensableness\ndispensary\ndispensate\ndispensation\ndispensational\ndispensative\ndispensatively\ndispensator\ndispensatorily\ndispensatory\ndispensatress\ndispensatrix\ndispense\ndispenser\ndispensingly\ndispeople\ndispeoplement\ndispeopler\ndispergate\ndispergation\ndispergator\ndispericraniate\ndisperiwig\ndispermic\ndispermous\ndispermy\ndispersal\ndispersant\ndisperse\ndispersed\ndispersedly\ndispersedness\ndispersement\ndisperser\ndispersibility\ndispersible\ndispersion\ndispersity\ndispersive\ndispersively\ndispersiveness\ndispersoid\ndispersoidological\ndispersoidology\ndispersonalize\ndispersonate\ndispersonification\ndispersonify\ndispetal\ndisphenoid\ndispiece\ndispireme\ndispirit\ndispirited\ndispiritedly\ndispiritedness\ndispiritingly\ndispiritment\ndispiteous\ndispiteously\ndispiteousness\ndisplace\ndisplaceability\ndisplaceable\ndisplacement\ndisplacency\ndisplacer\ndisplant\ndisplay\ndisplayable\ndisplayed\ndisplayer\ndisplease\ndispleased\ndispleasedly\ndispleaser\ndispleasing\ndispleasingly\ndispleasingness\ndispleasurable\ndispleasurably\ndispleasure\ndispleasurement\ndisplenish\ndisplicency\ndisplume\ndispluviate\ndispondaic\ndispondee\ndispone\ndisponee\ndisponent\ndisponer\ndispope\ndispopularize\ndisporous\ndisport\ndisportive\ndisportment\nDisporum\ndisposability\ndisposable\ndisposableness\ndisposal\ndispose\ndisposed\ndisposedly\ndisposedness\ndisposer\ndisposingly\ndisposition\ndispositional\ndispositioned\ndispositive\ndispositively\ndispossess\ndispossession\ndispossessor\ndispossessory\ndispost\ndisposure\ndispowder\ndispractice\ndispraise\ndispraiser\ndispraisingly\ndispread\ndispreader\ndisprejudice\ndisprepare\ndisprince\ndisprison\ndisprivacied\ndisprivilege\ndisprize\ndisprobabilization\ndisprobabilize\ndisprobative\ndispromise\ndisproof\ndisproportion\ndisproportionable\ndisproportionableness\ndisproportionably\ndisproportional\ndisproportionality\ndisproportionally\ndisproportionalness\ndisproportionate\ndisproportionately\ndisproportionateness\ndisproportionation\ndisprovable\ndisproval\ndisprove\ndisprovement\ndisproven\ndisprover\ndispulp\ndispunct\ndispunishable\ndispunitive\ndisputability\ndisputable\ndisputableness\ndisputably\ndisputant\ndisputation\ndisputatious\ndisputatiously\ndisputatiousness\ndisputative\ndisputatively\ndisputativeness\ndisputator\ndispute\ndisputeless\ndisputer\ndisqualification\ndisqualify\ndisquantity\ndisquiet\ndisquieted\ndisquietedly\ndisquietedness\ndisquieten\ndisquieter\ndisquieting\ndisquietingly\ndisquietly\ndisquietness\ndisquietude\ndisquiparancy\ndisquiparant\ndisquiparation\ndisquisite\ndisquisition\ndisquisitional\ndisquisitionary\ndisquisitive\ndisquisitively\ndisquisitor\ndisquisitorial\ndisquisitory\ndisquixote\ndisrank\ndisrate\ndisrealize\ndisrecommendation\ndisregard\ndisregardable\ndisregardance\ndisregardant\ndisregarder\ndisregardful\ndisregardfully\ndisregardfulness\ndisrelated\ndisrelation\ndisrelish\ndisrelishable\ndisremember\ndisrepair\ndisreputability\ndisreputable\ndisreputableness\ndisreputably\ndisreputation\ndisrepute\ndisrespect\ndisrespecter\ndisrespectful\ndisrespectfully\ndisrespectfulness\ndisrestore\ndisring\ndisrobe\ndisrobement\ndisrober\ndisroof\ndisroost\ndisroot\ndisrudder\ndisrump\ndisrupt\ndisruptability\ndisruptable\ndisrupter\ndisruption\ndisruptionist\ndisruptive\ndisruptively\ndisruptiveness\ndisruptment\ndisruptor\ndisrupture\ndiss\ndissatisfaction\ndissatisfactoriness\ndissatisfactory\ndissatisfied\ndissatisfiedly\ndissatisfiedness\ndissatisfy\ndissaturate\ndisscepter\ndisseat\ndissect\ndissected\ndissectible\ndissecting\ndissection\ndissectional\ndissective\ndissector\ndisseize\ndisseizee\ndisseizin\ndisseizor\ndisseizoress\ndisselboom\ndissemblance\ndissemble\ndissembler\ndissemblingly\ndissembly\ndissemilative\ndisseminate\ndissemination\ndisseminative\ndisseminator\ndisseminule\ndissension\ndissensualize\ndissent\ndissentaneous\ndissentaneousness\ndissenter\ndissenterism\ndissentience\ndissentiency\ndissentient\ndissenting\ndissentingly\ndissentious\ndissentiously\ndissentism\ndissentment\ndissepiment\ndissepimental\ndissert\ndissertate\ndissertation\ndissertational\ndissertationist\ndissertative\ndissertator\ndisserve\ndisservice\ndisserviceable\ndisserviceableness\ndisserviceably\ndissettlement\ndissever\ndisseverance\ndisseverment\ndisshadow\ndissheathe\ndisshroud\ndissidence\ndissident\ndissidently\ndissight\ndissightly\ndissiliency\ndissilient\ndissimilar\ndissimilarity\ndissimilarly\ndissimilars\ndissimilate\ndissimilation\ndissimilatory\ndissimile\ndissimilitude\ndissimulate\ndissimulation\ndissimulative\ndissimulator\ndissimule\ndissimuler\ndissipable\ndissipate\ndissipated\ndissipatedly\ndissipatedness\ndissipater\ndissipation\ndissipative\ndissipativity\ndissipator\ndissociability\ndissociable\ndissociableness\ndissocial\ndissociality\ndissocialize\ndissociant\ndissociate\ndissociation\ndissociative\ndissoconch\ndissogeny\ndissogony\ndissolubility\ndissoluble\ndissolubleness\ndissolute\ndissolutely\ndissoluteness\ndissolution\ndissolutional\ndissolutionism\ndissolutionist\ndissolutive\ndissolvable\ndissolvableness\ndissolve\ndissolveability\ndissolvent\ndissolver\ndissolving\ndissolvingly\ndissonance\ndissonancy\ndissonant\ndissonantly\ndissonous\ndissoul\ndissuade\ndissuader\ndissuasion\ndissuasive\ndissuasively\ndissuasiveness\ndissuasory\ndissuit\ndissuitable\ndissuited\ndissyllabic\ndissyllabification\ndissyllabify\ndissyllabism\ndissyllabize\ndissyllable\ndissymmetric\ndissymmetrical\ndissymmetrically\ndissymmetry\ndissympathize\ndissympathy\ndistad\ndistaff\ndistain\ndistal\ndistale\ndistally\ndistalwards\ndistance\ndistanceless\ndistancy\ndistannic\ndistant\ndistantly\ndistantness\ndistaste\ndistasted\ndistasteful\ndistastefully\ndistastefulness\ndistater\ndistemonous\ndistemper\ndistemperature\ndistempered\ndistemperedly\ndistemperedness\ndistemperer\ndistenant\ndistend\ndistendedly\ndistender\ndistensibility\ndistensible\ndistensive\ndistent\ndistention\ndisthene\ndisthrall\ndisthrone\ndistich\nDistichlis\ndistichous\ndistichously\ndistill\ndistillable\ndistillage\ndistilland\ndistillate\ndistillation\ndistillatory\ndistilled\ndistiller\ndistillery\ndistilling\ndistillmint\ndistinct\ndistinctify\ndistinction\ndistinctional\ndistinctionless\ndistinctive\ndistinctively\ndistinctiveness\ndistinctly\ndistinctness\ndistingue\ndistinguish\ndistinguishability\ndistinguishable\ndistinguishableness\ndistinguishably\ndistinguished\ndistinguishedly\ndistinguisher\ndistinguishing\ndistinguishingly\ndistinguishment\ndistoclusion\nDistoma\nDistomatidae\ndistomatosis\ndistomatous\ndistome\ndistomian\ndistomiasis\nDistomidae\nDistomum\ndistort\ndistorted\ndistortedly\ndistortedness\ndistorter\ndistortion\ndistortional\ndistortionist\ndistortionless\ndistortive\ndistract\ndistracted\ndistractedly\ndistractedness\ndistracter\ndistractibility\ndistractible\ndistractingly\ndistraction\ndistractive\ndistractively\ndistrain\ndistrainable\ndistrainee\ndistrainer\ndistrainment\ndistrainor\ndistraint\ndistrait\ndistraite\ndistraught\ndistress\ndistressed\ndistressedly\ndistressedness\ndistressful\ndistressfully\ndistressfulness\ndistressing\ndistressingly\ndistributable\ndistributary\ndistribute\ndistributed\ndistributedly\ndistributee\ndistributer\ndistribution\ndistributional\ndistributionist\ndistributival\ndistributive\ndistributively\ndistributiveness\ndistributor\ndistributress\ndistrict\ndistrouser\ndistrust\ndistruster\ndistrustful\ndistrustfully\ndistrustfulness\ndistrustingly\ndistune\ndisturb\ndisturbance\ndisturbative\ndisturbed\ndisturbedly\ndisturber\ndisturbing\ndisturbingly\ndisturn\ndisturnpike\ndisubstituted\ndisubstitution\ndisulfonic\ndisulfuric\ndisulphate\ndisulphide\ndisulphonate\ndisulphone\ndisulphonic\ndisulphoxide\ndisulphuret\ndisulphuric\ndisuniform\ndisuniformity\ndisunify\ndisunion\ndisunionism\ndisunionist\ndisunite\ndisuniter\ndisunity\ndisusage\ndisusance\ndisuse\ndisutility\ndisutilize\ndisvaluation\ndisvalue\ndisvertebrate\ndisvisage\ndisvoice\ndisvulnerability\ndiswarren\ndiswench\ndiswood\ndisworth\ndisyllabic\ndisyllable\ndisyoke\ndit\ndita\ndital\nditch\nditchbank\nditchbur\nditchdigger\nditchdown\nditcher\nditchless\nditchside\nditchwater\ndite\nditer\nditerpene\nditertiary\nditetragonal\ndithalous\ndithecal\nditheism\nditheist\nditheistic\nditheistical\ndithematic\ndither\ndithery\ndithiobenzoic\ndithioglycol\ndithioic\ndithion\ndithionate\ndithionic\ndithionite\ndithionous\ndithymol\ndithyramb\ndithyrambic\ndithyrambically\nDithyrambos\nDithyrambus\nditokous\nditolyl\nditone\nditrematous\nditremid\nDitremidae\nditrichotomous\nditriglyph\nditriglyphic\nditrigonal\nditrigonally\nDitrocha\nditrochean\nditrochee\nditrochous\nditroite\ndittamy\ndittander\ndittany\ndittay\ndittied\nditto\ndittogram\ndittograph\ndittographic\ndittography\ndittology\nditty\ndiumvirate\ndiuranate\ndiureide\ndiuresis\ndiuretic\ndiuretically\ndiureticalness\nDiurna\ndiurnal\ndiurnally\ndiurnalness\ndiurnation\ndiurne\ndiurnule\ndiuturnal\ndiuturnity\ndiv\ndiva\ndivagate\ndivagation\ndivalence\ndivalent\ndivan\ndivariant\ndivaricate\ndivaricately\ndivaricating\ndivaricatingly\ndivarication\ndivaricator\ndivata\ndive\ndivekeeper\ndivel\ndivellent\ndivellicate\ndiver\ndiverge\ndivergement\ndivergence\ndivergency\ndivergent\ndivergently\ndiverging\ndivergingly\ndivers\ndiverse\ndiversely\ndiverseness\ndiversicolored\ndiversifiability\ndiversifiable\ndiversification\ndiversified\ndiversifier\ndiversiflorate\ndiversiflorous\ndiversifoliate\ndiversifolious\ndiversiform\ndiversify\ndiversion\ndiversional\ndiversionary\ndiversipedate\ndiversisporous\ndiversity\ndiversly\ndiversory\ndivert\ndivertedly\ndiverter\ndivertibility\ndivertible\ndiverticle\ndiverticular\ndiverticulate\ndiverticulitis\ndiverticulosis\ndiverticulum\ndiverting\ndivertingly\ndivertingness\ndivertisement\ndivertive\ndivertor\ndivest\ndivestible\ndivestitive\ndivestiture\ndivestment\ndivesture\ndividable\ndividableness\ndivide\ndivided\ndividedly\ndividedness\ndividend\ndivider\ndividing\ndividingly\ndividual\ndividualism\ndividually\ndividuity\ndividuous\ndivinable\ndivinail\ndivination\ndivinator\ndivinatory\ndivine\ndivinely\ndivineness\ndiviner\ndivineress\ndiving\ndivinify\ndivining\ndiviningly\ndivinity\ndivinityship\ndivinization\ndivinize\ndivinyl\ndivisibility\ndivisible\ndivisibleness\ndivisibly\ndivision\ndivisional\ndivisionally\ndivisionary\ndivisionism\ndivisionist\ndivisionistic\ndivisive\ndivisively\ndivisiveness\ndivisor\ndivisorial\ndivisory\ndivisural\ndivorce\ndivorceable\ndivorcee\ndivorcement\ndivorcer\ndivorcible\ndivorcive\ndivot\ndivoto\ndivulgate\ndivulgater\ndivulgation\ndivulgatory\ndivulge\ndivulgement\ndivulgence\ndivulger\ndivulse\ndivulsion\ndivulsive\ndivulsor\ndivus\nDivvers\ndivvy\ndiwata\ndixenite\nDixie\ndixie\nDixiecrat\ndixit\ndixy\ndizain\ndizen\ndizenment\ndizoic\ndizygotic\ndizzard\ndizzily\ndizziness\ndizzy\nDjagatay\ndjasakid\ndjave\ndjehad\ndjerib\ndjersa\nDjuka\ndo\ndoab\ndoable\ndoarium\ndoat\ndoated\ndoater\ndoating\ndoatish\nDob\ndob\ndobbed\ndobber\ndobbin\ndobbing\ndobby\ndobe\ndobla\ndoblon\ndobra\ndobrao\ndobson\ndoby\ndoc\ndocent\ndocentship\nDocetae\nDocetic\nDocetically\nDocetism\nDocetist\nDocetistic\nDocetize\ndochmiac\ndochmiacal\ndochmiasis\ndochmius\ndocibility\ndocible\ndocibleness\ndocile\ndocilely\ndocility\ndocimasia\ndocimastic\ndocimastical\ndocimasy\ndocimology\ndocity\ndock\ndockage\ndocken\ndocker\ndocket\ndockhead\ndockhouse\ndockization\ndockize\ndockland\ndockmackie\ndockman\ndockmaster\ndockside\ndockyard\ndockyardman\ndocmac\nDocoglossa\ndocoglossan\ndocoglossate\ndocosane\ndoctor\ndoctoral\ndoctorally\ndoctorate\ndoctorbird\ndoctordom\ndoctoress\ndoctorfish\ndoctorhood\ndoctorial\ndoctorially\ndoctorization\ndoctorize\ndoctorless\ndoctorlike\ndoctorly\ndoctorship\ndoctress\ndoctrinaire\ndoctrinairism\ndoctrinal\ndoctrinalism\ndoctrinalist\ndoctrinality\ndoctrinally\ndoctrinarian\ndoctrinarianism\ndoctrinarily\ndoctrinarity\ndoctrinary\ndoctrinate\ndoctrine\ndoctrinism\ndoctrinist\ndoctrinization\ndoctrinize\ndoctrix\ndocument\ndocumental\ndocumentalist\ndocumentarily\ndocumentary\ndocumentation\ndocumentize\ndod\ndodd\ndoddart\ndodded\ndodder\ndoddered\ndodderer\ndoddering\ndoddery\ndoddie\ndodding\ndoddle\ndoddy\ndoddypoll\nDode\ndodecade\ndodecadrachm\ndodecafid\ndodecagon\ndodecagonal\ndodecahedral\ndodecahedric\ndodecahedron\ndodecahydrate\ndodecahydrated\ndodecamerous\ndodecane\nDodecanesian\ndodecanoic\ndodecant\ndodecapartite\ndodecapetalous\ndodecarch\ndodecarchy\ndodecasemic\ndodecastyle\ndodecastylos\ndodecasyllabic\ndodecasyllable\ndodecatemory\nDodecatheon\ndodecatoic\ndodecatyl\ndodecatylic\ndodecuplet\ndodecyl\ndodecylene\ndodecylic\ndodge\ndodgeful\ndodger\ndodgery\ndodgily\ndodginess\ndodgy\ndodkin\ndodlet\ndodman\ndodo\ndodoism\nDodona\nDodonaea\nDodonaeaceae\nDodonaean\nDodonean\nDodonian\ndodrans\ndoe\ndoebird\nDoedicurus\nDoeg\ndoeglic\ndoegling\ndoer\ndoes\ndoeskin\ndoesnt\ndoest\ndoff\ndoffer\ndoftberry\ndog\ndogal\ndogate\ndogbane\nDogberry\ndogberry\nDogberrydom\nDogberryism\ndogbite\ndogblow\ndogboat\ndogbolt\ndogbush\ndogcart\ndogcatcher\ndogdom\ndoge\ndogedom\ndogeless\ndogeship\ndogface\ndogfall\ndogfight\ndogfish\ndogfoot\ndogged\ndoggedly\ndoggedness\ndogger\ndoggerel\ndoggereler\ndoggerelism\ndoggerelist\ndoggerelize\ndoggerelizer\ndoggery\ndoggess\ndoggish\ndoggishly\ndoggishness\ndoggo\ndoggone\ndoggoned\ndoggrel\ndoggrelize\ndoggy\ndoghead\ndoghearted\ndoghole\ndoghood\ndoghouse\ndogie\ndogless\ndoglike\ndogly\ndogma\ndogman\ndogmata\ndogmatic\ndogmatical\ndogmatically\ndogmaticalness\ndogmatician\ndogmatics\ndogmatism\ndogmatist\ndogmatization\ndogmatize\ndogmatizer\ndogmouth\ndogplate\ndogproof\nDogra\nDogrib\ndogs\ndogship\ndogshore\ndogskin\ndogsleep\ndogstone\ndogtail\ndogtie\ndogtooth\ndogtoothing\ndogtrick\ndogtrot\ndogvane\ndogwatch\ndogwood\ndogy\ndoigt\ndoiled\ndoily\ndoina\ndoing\ndoings\ndoit\ndoited\ndoitkin\ndoitrified\ndoke\nDoketic\nDoketism\ndokhma\ndokimastic\nDokmarok\nDoko\nDol\ndola\ndolabra\ndolabrate\ndolabriform\ndolcan\ndolcian\ndolciano\ndolcino\ndoldrum\ndoldrums\ndole\ndolefish\ndoleful\ndolefully\ndolefulness\ndolefuls\ndolent\ndolently\ndolerite\ndoleritic\ndolerophanite\ndolesman\ndolesome\ndolesomely\ndolesomeness\ndoless\ndoli\ndolia\ndolichoblond\ndolichocephal\ndolichocephali\ndolichocephalic\ndolichocephalism\ndolichocephalize\ndolichocephalous\ndolichocephaly\ndolichocercic\ndolichocnemic\ndolichocranial\ndolichofacial\nDolichoglossus\ndolichohieric\nDolicholus\ndolichopellic\ndolichopodous\ndolichoprosopic\nDolichopsyllidae\nDolichos\ndolichos\ndolichosaur\nDolichosauri\nDolichosauria\nDolichosaurus\nDolichosoma\ndolichostylous\ndolichotmema\ndolichuric\ndolichurus\nDoliidae\ndolina\ndoline\ndolioform\nDoliolidae\nDoliolum\ndolium\ndoll\ndollar\ndollarbird\ndollardee\ndollardom\ndollarfish\ndollarleaf\ndollbeer\ndolldom\ndollface\ndollfish\ndollhood\ndollhouse\ndollier\ndolliness\ndollish\ndollishly\ndollishness\ndollmaker\ndollmaking\ndollop\ndollship\ndolly\ndollyman\ndollyway\ndolman\ndolmen\ndolmenic\nDolomedes\ndolomite\ndolomitic\ndolomitization\ndolomitize\ndolomization\ndolomize\ndolor\nDolores\ndoloriferous\ndolorific\ndolorifuge\ndolorous\ndolorously\ndolorousness\ndolose\ndolous\nDolph\ndolphin\ndolphinlike\nDolphus\ndolt\ndolthead\ndoltish\ndoltishly\ndoltishness\ndom\ndomain\ndomainal\ndomal\ndomanial\ndomatium\ndomatophobia\ndomba\nDombeya\nDomdaniel\ndome\ndomelike\ndoment\ndomer\ndomesday\ndomestic\ndomesticable\ndomesticality\ndomestically\ndomesticate\ndomestication\ndomesticative\ndomesticator\ndomesticity\ndomesticize\ndomett\ndomeykite\ndomic\ndomical\ndomically\nDomicella\ndomicile\ndomicilement\ndomiciliar\ndomiciliary\ndomiciliate\ndomiciliation\ndominance\ndominancy\ndominant\ndominantly\ndominate\ndominated\ndominatingly\ndomination\ndominative\ndominator\ndomine\ndomineer\ndomineerer\ndomineering\ndomineeringly\ndomineeringness\ndominial\nDominic\ndominical\ndominicale\nDominican\nDominick\ndominie\ndominion\ndominionism\ndominionist\nDominique\ndominium\ndomino\ndominus\ndomitable\ndomite\nDomitian\ndomitic\ndomn\ndomnei\ndomoid\ndompt\ndomy\nDon\ndon\ndonable\nDonacidae\ndonaciform\nDonal\nDonald\nDonar\ndonary\ndonatary\ndonate\ndonated\ndonatee\nDonatiaceae\ndonation\nDonatism\nDonatist\nDonatistic\nDonatistical\ndonative\ndonatively\ndonator\ndonatory\ndonatress\ndonax\ndoncella\nDondia\ndone\ndonee\nDonet\ndoney\ndong\ndonga\nDongola\nDongolese\ndongon\nDonia\ndonjon\ndonkey\ndonkeyback\ndonkeyish\ndonkeyism\ndonkeyman\ndonkeywork\nDonmeh\nDonn\nDonna\ndonna\nDonne\ndonnered\ndonnert\nDonnie\ndonnish\ndonnishness\ndonnism\ndonnot\ndonor\ndonorship\ndonought\nDonovan\ndonship\ndonsie\ndont\ndonum\ndoob\ndoocot\ndoodab\ndoodad\nDoodia\ndoodle\ndoodlebug\ndoodler\ndoodlesack\ndoohickey\ndoohickus\ndoohinkey\ndoohinkus\ndooja\ndook\ndooket\ndookit\ndool\ndoolee\ndooley\ndooli\ndoolie\ndooly\ndoom\ndoomage\ndoombook\ndoomer\ndoomful\ndooms\ndoomsday\ndoomsman\ndoomstead\ndoon\ndoor\ndoorba\ndoorbell\ndoorboy\ndoorbrand\ndoorcase\ndoorcheek\ndoored\ndoorframe\ndoorhead\ndoorjamb\ndoorkeeper\ndoorknob\ndoorless\ndoorlike\ndoormaid\ndoormaker\ndoormaking\ndoorman\ndoornail\ndoorplate\ndoorpost\ndoorsill\ndoorstead\ndoorstep\ndoorstone\ndoorstop\ndoorward\ndoorway\ndoorweed\ndoorwise\ndooryard\ndop\ndopa\ndopamelanin\ndopaoxidase\ndopatta\ndope\ndopebook\ndoper\ndopester\ndopey\ndoppelkummel\nDopper\ndopper\ndoppia\nDoppler\ndopplerite\nDor\ndor\nDora\ndorab\ndorad\nDoradidae\ndorado\ndoraphobia\nDorask\nDoraskean\ndorbeetle\nDorcas\ndorcastry\nDorcatherium\nDorcopsis\ndoree\ndorestane\ndorhawk\nDori\ndoria\nDorian\nDoric\nDorical\nDoricism\nDoricize\nDorididae\nDorine\nDoris\nDorism\nDorize\ndorje\nDorking\ndorlach\ndorlot\ndorm\ndormancy\ndormant\ndormer\ndormered\ndormie\ndormient\ndormilona\ndormition\ndormitive\ndormitory\ndormouse\ndormy\ndorn\ndorneck\ndornic\ndornick\ndornock\nDorobo\nDoronicum\nDorosoma\nDorothea\nDorothy\ndorp\ndorsabdominal\ndorsabdominally\ndorsad\ndorsal\ndorsale\ndorsalgia\ndorsalis\ndorsally\ndorsalmost\ndorsalward\ndorsalwards\ndorsel\ndorser\ndorsibranch\nDorsibranchiata\ndorsibranchiate\ndorsicollar\ndorsicolumn\ndorsicommissure\ndorsicornu\ndorsiduct\ndorsiferous\ndorsifixed\ndorsiflex\ndorsiflexion\ndorsiflexor\ndorsigrade\ndorsilateral\ndorsilumbar\ndorsimedian\ndorsimesal\ndorsimeson\ndorsiparous\ndorsispinal\ndorsiventral\ndorsiventrality\ndorsiventrally\ndorsoabdominal\ndorsoanterior\ndorsoapical\nDorsobranchiata\ndorsocaudad\ndorsocaudal\ndorsocentral\ndorsocephalad\ndorsocephalic\ndorsocervical\ndorsocervically\ndorsodynia\ndorsoepitrochlear\ndorsointercostal\ndorsointestinal\ndorsolateral\ndorsolumbar\ndorsomedial\ndorsomedian\ndorsomesal\ndorsonasal\ndorsonuchal\ndorsopleural\ndorsoposteriad\ndorsoposterior\ndorsoradial\ndorsosacral\ndorsoscapular\ndorsosternal\ndorsothoracic\ndorsoventrad\ndorsoventral\ndorsoventrally\nDorstenia\ndorsulum\ndorsum\ndorsumbonal\ndorter\ndortiness\ndortiship\ndorts\ndorty\ndoruck\nDory\ndory\nDoryanthes\nDorylinae\ndoryphorus\ndos\ndosa\ndosadh\ndosage\ndose\ndoser\ndosimeter\ndosimetric\ndosimetrician\ndosimetrist\ndosimetry\nDosinia\ndosiology\ndosis\nDositheans\ndosology\ndoss\ndossal\ndossel\ndosser\ndosseret\ndossier\ndossil\ndossman\nDot\ndot\ndotage\ndotal\ndotard\ndotardism\ndotardly\ndotardy\ndotate\ndotation\ndotchin\ndote\ndoted\ndoter\nDothideacea\ndothideaceous\nDothideales\nDothidella\ndothienenteritis\nDothiorella\ndotiness\ndoting\ndotingly\ndotingness\ndotish\ndotishness\ndotkin\ndotless\ndotlike\nDoto\nDotonidae\ndotriacontane\ndotted\ndotter\ndotterel\ndottily\ndottiness\ndotting\ndottle\ndottler\nDottore\nDotty\ndotty\ndoty\ndouar\ndouble\ndoubled\ndoubledamn\ndoubleganger\ndoublegear\ndoublehanded\ndoublehandedly\ndoublehandedness\ndoublehatching\ndoublehearted\ndoubleheartedness\ndoublehorned\ndoubleleaf\ndoublelunged\ndoubleness\ndoubler\ndoublet\ndoubleted\ndoubleton\ndoubletone\ndoubletree\ndoublets\ndoubling\ndoubloon\ndoubly\ndoubt\ndoubtable\ndoubtably\ndoubtedly\ndoubter\ndoubtful\ndoubtfully\ndoubtfulness\ndoubting\ndoubtingly\ndoubtingness\ndoubtless\ndoubtlessly\ndoubtlessness\ndoubtmonger\ndoubtous\ndoubtsome\ndouc\ndouce\ndoucely\ndouceness\ndoucet\ndouche\ndoucin\ndoucine\ndoudle\nDoug\ndough\ndoughbird\ndoughboy\ndoughface\ndoughfaceism\ndoughfoot\ndoughhead\ndoughiness\ndoughlike\ndoughmaker\ndoughmaking\ndoughman\ndoughnut\ndought\ndoughtily\ndoughtiness\ndoughty\ndoughy\nDouglas\ndoulocracy\ndoum\ndoundake\ndoup\ndouping\ndour\ndourine\ndourly\ndourness\ndouse\ndouser\ndout\ndouter\ndoutous\ndouzepers\ndouzieme\ndove\ndovecot\ndoveflower\ndovefoot\ndovehouse\ndovekey\ndovekie\ndovelet\ndovelike\ndoveling\ndover\ndovetail\ndovetailed\ndovetailer\ndovetailwise\ndoveweed\ndovewood\ndovish\nDovyalis\ndow\ndowable\ndowager\ndowagerism\ndowcet\ndowd\ndowdily\ndowdiness\ndowdy\ndowdyish\ndowdyism\ndowed\ndowel\ndower\ndoweral\ndoweress\ndowerless\ndowery\ndowf\ndowie\nDowieism\nDowieite\ndowily\ndowiness\ndowitch\ndowitcher\ndowl\ndowlas\ndowless\ndown\ndownbear\ndownbeard\ndownbeat\ndownby\ndowncast\ndowncastly\ndowncastness\ndowncome\ndowncomer\ndowncoming\ndowncry\ndowncurved\ndowncut\ndowndale\ndowndraft\ndowner\ndownface\ndownfall\ndownfallen\ndownfalling\ndownfeed\ndownflow\ndownfold\ndownfolded\ndowngate\ndowngone\ndowngrade\ndowngrowth\ndownhanging\ndownhaul\ndownheaded\ndownhearted\ndownheartedly\ndownheartedness\ndownhill\ndownily\ndowniness\nDowning\nDowningia\ndownland\ndownless\ndownlie\ndownlier\ndownligging\ndownlike\ndownline\ndownlooked\ndownlooker\ndownlying\ndownmost\ndownness\ndownpour\ndownpouring\ndownright\ndownrightly\ndownrightness\ndownrush\ndownrushing\ndownset\ndownshare\ndownshore\ndownside\ndownsinking\ndownsitting\ndownsliding\ndownslip\ndownslope\ndownsman\ndownspout\ndownstage\ndownstairs\ndownstate\ndownstater\ndownstream\ndownstreet\ndownstroke\ndownswing\ndowntake\ndownthrow\ndownthrown\ndownthrust\nDownton\ndowntown\ndowntrampling\ndowntreading\ndowntrend\ndowntrodden\ndowntroddenness\ndownturn\ndownward\ndownwardly\ndownwardness\ndownway\ndownweed\ndownweigh\ndownweight\ndownweighted\ndownwind\ndownwith\ndowny\ndowp\ndowry\ndowsabel\ndowse\ndowser\ndowset\ndoxa\nDoxantha\ndoxastic\ndoxasticon\ndoxographer\ndoxographical\ndoxography\ndoxological\ndoxologically\ndoxologize\ndoxology\ndoxy\nDoyle\ndoze\ndozed\ndozen\ndozener\ndozenth\ndozer\ndozily\ndoziness\ndozy\ndozzled\ndrab\nDraba\ndrabbet\ndrabbish\ndrabble\ndrabbler\ndrabbletail\ndrabbletailed\ndrabby\ndrably\ndrabness\nDracaena\nDracaenaceae\ndrachm\ndrachma\ndrachmae\ndrachmai\ndrachmal\ndracma\nDraco\nDracocephalum\nDraconian\nDraconianism\nDraconic\ndraconic\nDraconically\nDraconid\nDraconis\nDraconism\ndraconites\ndraconitic\ndracontian\ndracontiasis\ndracontic\ndracontine\ndracontites\nDracontium\ndracunculus\ndraegerman\ndraff\ndraffman\ndraffy\ndraft\ndraftage\ndraftee\ndrafter\ndraftily\ndraftiness\ndrafting\ndraftman\ndraftmanship\ndraftproof\ndraftsman\ndraftsmanship\ndraftswoman\ndraftswomanship\ndraftwoman\ndrafty\ndrag\ndragade\ndragbar\ndragbolt\ndragged\ndragger\ndraggily\ndragginess\ndragging\ndraggingly\ndraggle\ndraggletail\ndraggletailed\ndraggletailedly\ndraggletailedness\ndraggly\ndraggy\ndraghound\ndragline\ndragman\ndragnet\ndrago\ndragoman\ndragomanate\ndragomanic\ndragomanish\ndragon\ndragonesque\ndragoness\ndragonet\ndragonfish\ndragonfly\ndragonhead\ndragonhood\ndragonish\ndragonism\ndragonize\ndragonkind\ndragonlike\ndragonnade\ndragonroot\ndragontail\ndragonwort\ndragoon\ndragoonable\ndragoonade\ndragoonage\ndragooner\ndragrope\ndragsaw\ndragsawing\ndragsman\ndragstaff\ndrail\ndrain\ndrainable\ndrainage\ndrainboard\ndraine\ndrained\ndrainer\ndrainerman\ndrainless\ndrainman\ndrainpipe\ndraintile\ndraisine\ndrake\ndrakestone\ndrakonite\ndram\ndrama\ndramalogue\nDramamine\ndramatic\ndramatical\ndramatically\ndramaticism\ndramatics\ndramaticule\ndramatism\ndramatist\ndramatizable\ndramatization\ndramatize\ndramatizer\ndramaturge\ndramaturgic\ndramaturgical\ndramaturgist\ndramaturgy\ndramm\ndrammage\ndramme\ndrammed\ndrammer\ndramming\ndrammock\ndramseller\ndramshop\ndrang\ndrank\ndrant\ndrapable\nDraparnaldia\ndrape\ndrapeable\ndraper\ndraperess\ndraperied\ndrapery\ndrapetomania\ndrapping\ndrassid\nDrassidae\ndrastic\ndrastically\ndrat\ndratchell\ndrate\ndratted\ndratting\ndraught\ndraughtboard\ndraughthouse\ndraughtman\ndraughtmanship\ndraughts\ndraughtsman\ndraughtsmanship\ndraughtswoman\ndraughtswomanship\nDravida\nDravidian\nDravidic\ndravya\ndraw\ndrawable\ndrawarm\ndrawback\ndrawbar\ndrawbeam\ndrawbench\ndrawboard\ndrawbolt\ndrawbore\ndrawboy\ndrawbridge\nDrawcansir\ndrawcut\ndrawdown\ndrawee\ndrawer\ndrawers\ndrawfile\ndrawfiling\ndrawgate\ndrawgear\ndrawglove\ndrawhead\ndrawhorse\ndrawing\ndrawk\ndrawknife\ndrawknot\ndrawl\ndrawlatch\ndrawler\ndrawling\ndrawlingly\ndrawlingness\ndrawlink\ndrawloom\ndrawly\ndrawn\ndrawnet\ndrawoff\ndrawout\ndrawplate\ndrawpoint\ndrawrod\ndrawshave\ndrawsheet\ndrawspan\ndrawspring\ndrawstop\ndrawstring\ndrawtongs\ndrawtube\ndray\ndrayage\ndrayman\ndrazel\ndread\ndreadable\ndreader\ndreadful\ndreadfully\ndreadfulness\ndreadingly\ndreadless\ndreadlessly\ndreadlessness\ndreadly\ndreadness\ndreadnought\ndream\ndreamage\ndreamer\ndreamery\ndreamful\ndreamfully\ndreamfulness\ndreamhole\ndreamily\ndreaminess\ndreamingly\ndreamish\ndreamland\ndreamless\ndreamlessly\ndreamlessness\ndreamlet\ndreamlike\ndreamlit\ndreamlore\ndreamsily\ndreamsiness\ndreamsy\ndreamt\ndreamtide\ndreamwhile\ndreamwise\ndreamworld\ndreamy\ndrear\ndrearfully\ndrearily\ndreariment\ndreariness\ndrearisome\ndrearly\ndrearness\ndreary\ndredge\ndredgeful\ndredger\ndredging\ndree\ndreep\ndreepiness\ndreepy\ndreg\ndreggily\ndregginess\ndreggish\ndreggy\ndregless\ndregs\ndreiling\nDreissensia\ndreissiger\ndrench\ndrencher\ndrenching\ndrenchingly\ndreng\ndrengage\nDrepanaspis\nDrepanidae\nDrepanididae\ndrepaniform\nDrepanis\ndrepanium\ndrepanoid\nDreparnaudia\ndress\ndressage\ndressed\ndresser\ndressership\ndressily\ndressiness\ndressing\ndressline\ndressmaker\ndressmakership\ndressmakery\ndressmaking\ndressy\ndrest\nDrew\ndrew\ndrewite\nDreyfusism\nDreyfusist\ndrias\ndrib\ndribble\ndribblement\ndribbler\ndriblet\ndriddle\ndried\ndrier\ndrierman\ndriest\ndrift\ndriftage\ndriftbolt\ndrifter\ndrifting\ndriftingly\ndriftland\ndriftless\ndriftlessness\ndriftlet\ndriftman\ndriftpiece\ndriftpin\ndriftway\ndriftweed\ndriftwind\ndriftwood\ndrifty\ndrightin\ndrill\ndriller\ndrillet\ndrilling\ndrillman\ndrillmaster\ndrillstock\nDrimys\ndringle\ndrink\ndrinkability\ndrinkable\ndrinkableness\ndrinkably\ndrinker\ndrinking\ndrinkless\ndrinkproof\ndrinn\ndrip\ndripper\ndripping\ndripple\ndripproof\ndrippy\ndripstick\ndripstone\ndrisheen\ndrisk\ndrivable\ndrivage\ndrive\ndriveaway\ndriveboat\ndrivebolt\ndrivehead\ndrivel\ndriveler\ndrivelingly\ndriven\ndrivepipe\ndriver\ndriverless\ndrivership\ndrivescrew\ndriveway\ndrivewell\ndriving\ndrivingly\ndrizzle\ndrizzly\ndrochuil\ndroddum\ndrofland\ndrogh\ndrogher\ndrogherman\ndrogue\ndroit\ndroitsman\ndroitural\ndroiturel\nDrokpa\ndroll\ndrollery\ndrollingly\ndrollish\ndrollishness\ndrollist\ndrollness\ndrolly\nDromaeognathae\ndromaeognathism\ndromaeognathous\nDromaeus\ndrome\ndromedarian\ndromedarist\ndromedary\ndrometer\nDromiacea\ndromic\nDromiceiidae\nDromiceius\nDromicia\ndromograph\ndromomania\ndromometer\ndromond\nDromornis\ndromos\ndromotropic\ndrona\ndronage\ndrone\ndronepipe\ndroner\ndrongo\ndroningly\ndronish\ndronishly\ndronishness\ndronkgrass\ndrony\ndrool\ndroop\ndrooper\ndrooping\ndroopingly\ndroopingness\ndroopt\ndroopy\ndrop\ndropberry\ndropcloth\ndropflower\ndrophead\ndroplet\ndroplight\ndroplike\ndropling\ndropman\ndropout\ndropper\ndropping\ndroppingly\ndroppy\ndropseed\ndropsical\ndropsically\ndropsicalness\ndropsied\ndropsy\ndropsywort\ndropt\ndropwise\ndropworm\ndropwort\nDroschken\nDrosera\nDroseraceae\ndroseraceous\ndroshky\ndrosky\ndrosograph\ndrosometer\nDrosophila\nDrosophilidae\nDrosophyllum\ndross\ndrossel\ndrosser\ndrossiness\ndrossless\ndrossy\ndrostdy\ndroud\ndrought\ndroughtiness\ndroughty\ndrouk\ndrove\ndrover\ndrovy\ndrow\ndrown\ndrowner\ndrowningly\ndrowse\ndrowsily\ndrowsiness\ndrowsy\ndrub\ndrubber\ndrubbing\ndrubbly\ndrucken\ndrudge\ndrudger\ndrudgery\ndrudgingly\ndrudgism\ndruery\ndrug\ndrugeteria\ndrugger\ndruggery\ndrugget\ndruggeting\ndruggist\ndruggister\ndruggy\ndrugless\ndrugman\ndrugshop\ndrugstore\ndruid\ndruidess\ndruidic\ndruidical\ndruidism\ndruidry\ndruith\nDrukpa\ndrum\ndrumbeat\ndrumble\ndrumbledore\ndrumbler\ndrumfire\ndrumfish\ndrumhead\ndrumheads\ndrumlike\ndrumlin\ndrumline\ndrumlinoid\ndrumloid\ndrumloidal\ndrumly\ndrummer\ndrumming\ndrummy\ndrumskin\ndrumstick\ndrumwood\ndrung\ndrungar\ndrunk\ndrunkard\ndrunken\ndrunkenly\ndrunkenness\ndrunkensome\ndrunkenwise\ndrunkery\nDrupa\nDrupaceae\ndrupaceous\ndrupal\ndrupe\ndrupel\ndrupelet\ndrupeole\ndrupetum\ndrupiferous\nDruse\ndruse\nDrusean\nDrusedom\ndrusy\ndruxiness\ndruxy\ndry\ndryad\ndryadetum\ndryadic\ndryas\ndryasdust\ndrybeard\ndrybrained\ndrycoal\nDrydenian\nDrydenism\ndryfoot\ndrygoodsman\ndryhouse\ndrying\ndryish\ndryly\nDrynaria\ndryness\nDryobalanops\nDryope\nDryopes\nDryophyllum\nDryopians\ndryopithecid\nDryopithecinae\ndryopithecine\nDryopithecus\nDryops\nDryopteris\ndryopteroid\ndrysalter\ndrysaltery\ndryster\ndryth\ndryworker\nDschubba\nduad\nduadic\ndual\nDuala\nduali\ndualin\ndualism\ndualist\ndualistic\ndualistically\nduality\ndualization\ndualize\ndually\nDualmutef\ndualogue\nDuane\nduarch\nduarchy\ndub\ndubash\ndubb\ndubba\ndubbah\ndubbeltje\ndubber\ndubbing\ndubby\nDubhe\nDubhgall\ndubiety\ndubiocrystalline\ndubiosity\ndubious\ndubiously\ndubiousness\ndubitable\ndubitably\ndubitancy\ndubitant\ndubitate\ndubitatingly\ndubitation\ndubitative\ndubitatively\nDuboisia\nduboisin\nduboisine\nDubonnet\ndubs\nducal\nducally\nducamara\nducape\nducat\nducato\nducatoon\nducdame\nduces\nDuchesnea\nDuchess\nduchess\nduchesse\nduchesslike\nduchy\nduck\nduckbill\nduckblind\nduckboard\nduckboat\nducker\nduckery\nduckfoot\nduckhearted\nduckhood\nduckhouse\nduckhunting\nduckie\nducking\nduckling\nducklingship\nduckmeat\nduckpin\nduckpond\nduckstone\nduckweed\nduckwife\nduckwing\nDuco\nduct\nducted\nductibility\nductible\nductile\nductilely\nductileness\nductilimeter\nductility\nductilize\nduction\nductless\nductor\nductule\nDucula\nDuculinae\ndud\ndudaim\ndudder\nduddery\nduddies\ndude\ndudeen\ndudgeon\ndudine\ndudish\ndudishness\ndudism\ndudler\ndudley\nDudleya\ndudleyite\ndudman\ndue\nduel\ndueler\ndueling\nduelist\nduelistic\nduello\ndueness\nduenna\nduennadom\nduennaship\nduer\nDuessa\nduet\nduettist\nduff\nduffadar\nduffel\nduffer\ndufferdom\nduffing\ndufoil\ndufrenite\ndufrenoysite\ndufter\ndufterdar\nduftery\ndug\ndugal\ndugdug\nduggler\ndugong\nDugongidae\ndugout\ndugway\nduhat\nDuhr\nduiker\nduikerbok\nduim\nDuit\nduit\ndujan\nDuke\nduke\ndukedom\ndukeling\ndukely\ndukery\ndukeship\ndukhn\ndukker\ndukkeripen\nDulanganes\nDulat\ndulbert\ndulcet\ndulcetly\ndulcetness\ndulcian\ndulciana\ndulcification\ndulcifluous\ndulcify\ndulcigenic\ndulcimer\nDulcin\nDulcinea\nDulcinist\ndulcitol\ndulcitude\ndulcose\nduledge\nduler\ndulia\ndull\ndullard\ndullardism\ndullardness\ndullbrained\nduller\ndullery\ndullhead\ndullhearted\ndullification\ndullify\ndullish\ndullity\ndullness\ndullpate\ndullsome\ndully\ndulosis\ndulotic\ndulse\ndulseman\ndult\ndultie\ndulwilly\nduly\ndum\nduma\ndumaist\ndumb\ndumba\ndumbbell\ndumbbeller\ndumbcow\ndumbfounder\ndumbfounderment\ndumbhead\ndumbledore\ndumbly\ndumbness\ndumdum\ndumetose\ndumfound\ndumfounder\ndumfounderment\ndummel\ndummered\ndumminess\ndummy\ndummyism\ndummyweed\nDumontia\nDumontiaceae\ndumontite\ndumortierite\ndumose\ndumosity\ndump\ndumpage\ndumpcart\ndumper\ndumpily\ndumpiness\ndumping\ndumpish\ndumpishly\ndumpishness\ndumple\ndumpling\ndumpoke\ndumpy\ndumsola\ndun\ndunair\ndunal\ndunbird\nDuncan\ndunce\nduncedom\nduncehood\nduncery\ndunch\nDunciad\nduncical\nduncify\nduncish\nduncishly\nduncishness\ndundasite\ndunder\ndunderhead\ndunderheaded\ndunderheadedness\ndunderpate\ndune\ndunelike\ndunfish\ndung\nDungan\ndungannonite\ndungaree\ndungbeck\ndungbird\ndungbred\ndungeon\ndungeoner\ndungeonlike\ndunger\ndunghill\ndunghilly\ndungol\ndungon\ndungy\ndungyard\ndunite\ndunk\ndunkadoo\nDunkard\nDunker\ndunker\nDunkirk\nDunkirker\nDunlap\ndunlin\nDunlop\ndunnage\ndunne\ndunner\ndunness\ndunnish\ndunnite\ndunnock\ndunny\ndunpickle\nDuns\ndunst\ndunstable\ndunt\nduntle\nduny\ndunziekte\nduo\nduocosane\nduodecahedral\nduodecahedron\nduodecane\nduodecennial\nduodecillion\nduodecimal\nduodecimality\nduodecimally\nduodecimfid\nduodecimo\nduodecimole\nduodecuple\nduodena\nduodenal\nduodenary\nduodenate\nduodenation\nduodene\nduodenectomy\nduodenitis\nduodenocholangitis\nduodenocholecystostomy\nduodenocholedochotomy\nduodenocystostomy\nduodenoenterostomy\nduodenogram\nduodenojejunal\nduodenojejunostomy\nduodenopancreatectomy\nduodenoscopy\nduodenostomy\nduodenotomy\nduodenum\nduodrama\nduograph\nduogravure\nduole\nduoliteral\nduologue\nduomachy\nduopod\nduopolistic\nduopoly\nduopsonistic\nduopsony\nduosecant\nduotone\nduotriacontane\nduotype\ndup\ndupability\ndupable\ndupe\ndupedom\nduper\ndupery\ndupion\ndupla\nduplation\nduple\nduplet\nduplex\nduplexity\nduplicability\nduplicable\nduplicand\nduplicate\nduplication\nduplicative\nduplicator\nduplicature\nduplicia\nduplicident\nDuplicidentata\nduplicidentate\nduplicipennate\nduplicitas\nduplicity\nduplification\nduplify\nduplone\ndupondius\nduppy\ndura\ndurability\ndurable\ndurableness\ndurably\ndurain\ndural\nDuralumin\nduramatral\nduramen\ndurance\nDurandarte\ndurangite\nDurango\nDurani\ndurant\nDuranta\nduraplasty\nduraquara\nduraspinalis\nduration\ndurational\ndurationless\ndurative\ndurax\ndurbachite\nDurban\ndurbar\ndurdenite\ndure\ndurene\ndurenol\nduress\nduressor\ndurgan\nDurham\ndurian\nduridine\nDurindana\nduring\nduringly\nDurio\ndurity\ndurmast\ndurn\nduro\nDuroc\ndurometer\nduroquinone\ndurra\ndurrie\ndurrin\ndurry\ndurst\ndurukuli\ndurwaun\nduryl\nDuryodhana\nDurzada\ndusack\nduscle\ndush\ndusio\ndusk\ndusken\nduskily\nduskiness\nduskingtide\nduskish\nduskishly\nduskishness\nduskly\nduskness\ndusky\ndust\ndustbin\ndustbox\ndustcloth\ndustee\nduster\ndusterman\ndustfall\ndustily\nDustin\ndustiness\ndusting\ndustless\ndustlessness\ndustman\ndustpan\ndustproof\ndustuck\ndustwoman\ndusty\ndustyfoot\nDusun\nDutch\ndutch\nDutcher\nDutchify\nDutchman\nDutchy\nduteous\nduteously\nduteousness\ndutiability\ndutiable\ndutied\ndutiful\ndutifully\ndutifulness\ndutra\nduty\ndutymonger\nduumvir\nduumviral\nduumvirate\nduvet\nduvetyn\ndux\nduyker\ndvaita\ndvandva\ndwale\ndwalm\nDwamish\ndwang\ndwarf\ndwarfish\ndwarfishly\ndwarfishness\ndwarfism\ndwarfling\ndwarfness\ndwarfy\ndwayberry\nDwayne\ndwell\ndwelled\ndweller\ndwelling\ndwelt\nDwight\ndwindle\ndwindlement\ndwine\nDwyka\ndyad\ndyadic\nDyak\ndyakisdodecahedron\nDyakish\ndyarchic\ndyarchical\ndyarchy\nDyas\nDyassic\ndyaster\nDyaus\ndyce\ndye\ndyeable\ndyehouse\ndyeing\ndyeleaves\ndyemaker\ndyemaking\ndyer\ndyester\ndyestuff\ndyeware\ndyeweed\ndyewood\ndygogram\ndying\ndyingly\ndyingness\ndyke\ndykehopper\ndyker\ndykereeve\nDylan\ndynagraph\ndynameter\ndynametric\ndynametrical\ndynamic\ndynamical\ndynamically\ndynamics\ndynamis\ndynamism\ndynamist\ndynamistic\ndynamitard\ndynamite\ndynamiter\ndynamitic\ndynamitical\ndynamitically\ndynamiting\ndynamitish\ndynamitism\ndynamitist\ndynamization\ndynamize\ndynamo\ndynamoelectric\ndynamoelectrical\ndynamogenesis\ndynamogenic\ndynamogenous\ndynamogenously\ndynamogeny\ndynamometamorphic\ndynamometamorphism\ndynamometamorphosed\ndynamometer\ndynamometric\ndynamometrical\ndynamometry\ndynamomorphic\ndynamoneure\ndynamophone\ndynamostatic\ndynamotor\ndynast\nDynastes\ndynastical\ndynastically\ndynasticism\ndynastid\ndynastidan\nDynastides\nDynastinae\ndynasty\ndynatron\ndyne\ndyophone\nDyophysite\nDyophysitic\nDyophysitical\nDyophysitism\ndyotheism\nDyothelete\nDyotheletian\nDyotheletic\nDyotheletical\nDyotheletism\nDyothelism\ndyphone\ndysacousia\ndysacousis\ndysanalyte\ndysaphia\ndysarthria\ndysarthric\ndysarthrosis\ndysbulia\ndysbulic\ndyschiria\ndyschroa\ndyschroia\ndyschromatopsia\ndyschromatoptic\ndyschronous\ndyscrasia\ndyscrasial\ndyscrasic\ndyscrasite\ndyscratic\ndyscrystalline\ndysenteric\ndysenterical\ndysentery\ndysepulotic\ndysepulotical\ndyserethisia\ndysergasia\ndysergia\ndysesthesia\ndysesthetic\ndysfunction\ndysgenesic\ndysgenesis\ndysgenetic\ndysgenic\ndysgenical\ndysgenics\ndysgeogenous\ndysgnosia\ndysgraphia\ndysidrosis\ndyskeratosis\ndyskinesia\ndyskinetic\ndyslalia\ndyslexia\ndyslogia\ndyslogistic\ndyslogistically\ndyslogy\ndysluite\ndyslysin\ndysmenorrhea\ndysmenorrheal\ndysmerism\ndysmeristic\ndysmerogenesis\ndysmerogenetic\ndysmeromorph\ndysmeromorphic\ndysmetria\ndysmnesia\ndysmorphism\ndysmorphophobia\ndysneuria\ndysnomy\ndysodile\ndysodontiasis\ndysorexia\ndysorexy\ndysoxidation\ndysoxidizable\ndysoxidize\ndyspathetic\ndyspathy\ndyspepsia\ndyspepsy\ndyspeptic\ndyspeptical\ndyspeptically\ndysphagia\ndysphagic\ndysphasia\ndysphasic\ndysphemia\ndysphonia\ndysphonic\ndysphoria\ndysphoric\ndysphotic\ndysphrasia\ndysphrenia\ndyspituitarism\ndysplasia\ndysplastic\ndyspnea\ndyspneal\ndyspneic\ndyspnoic\ndysprosia\ndysprosium\ndysraphia\ndyssnite\nDyssodia\ndysspermatism\ndyssynergia\ndyssystole\ndystaxia\ndystectic\ndysteleological\ndysteleologist\ndysteleology\ndysthyroidism\ndystocia\ndystocial\ndystome\ndystomic\ndystomous\ndystrophia\ndystrophic\ndystrophy\ndysuria\ndysuric\ndysyntribite\ndytiscid\nDytiscidae\nDytiscus\ndzeren\nDzungar\nE\ne\nea\neach\neachwhere\neager\neagerly\neagerness\neagle\neaglelike\neagless\neaglestone\neaglet\neaglewood\neagre\nean\near\nearache\nearbob\nearcap\nearcockle\neardrop\neardropper\neardrum\neared\nearflower\nearful\nearhole\nearing\nearjewel\nEarl\nearl\nearlap\nearldom\nEarle\nearless\nearlet\nearlike\nearliness\nearlish\nearlock\nearlship\nearly\nearmark\nearn\nearner\nearnest\nearnestly\nearnestness\nearnful\nEarnie\nearning\nearnings\nearphone\nearpick\nearpiece\nearplug\nearreach\nearring\nearringed\nearscrew\nearshot\nearsore\nearsplitting\neartab\nearth\nearthboard\nearthborn\nearthbred\nearthdrake\nearthed\nearthen\nearthenhearted\nearthenware\nearthfall\nearthfast\nearthgall\nearthgrubber\nearthian\nearthiness\nearthkin\nearthless\nearthlight\nearthlike\nearthliness\nearthling\nearthly\nearthmaker\nearthmaking\nearthnut\nearthpea\nearthquake\nearthquaked\nearthquaken\nearthquaking\nEarthshaker\nearthshine\nearthshock\nearthslide\nearthsmoke\nearthstar\nearthtongue\nearthwall\nearthward\nearthwards\nearthwork\nearthworm\nearthy\nearwax\nearwig\nearwigginess\nearwiggy\nearwitness\nearworm\nearwort\nease\neaseful\neasefully\neasefulness\neasel\neaseless\neasement\neaser\neasier\neasiest\neasily\neasiness\neasing\neast\neastabout\neastbound\nEaster\neaster\neasterling\neasterly\nEastern\neastern\neasterner\nEasternism\nEasternly\neasternmost\nEastertide\neasting\nEastlake\neastland\neastmost\nEastre\neastward\neastwardly\neasy\neasygoing\neasygoingness\neat\neatability\neatable\neatableness\neatage\nEatanswill\neatberry\neaten\neater\neatery\neating\neats\neave\neaved\neavedrop\neaver\neaves\neavesdrop\neavesdropper\neavesdropping\nebb\nebbman\nEben\nEbenaceae\nebenaceous\nEbenales\nebeneous\nEbenezer\nEberthella\nEbionism\nEbionite\nEbionitic\nEbionitism\nEbionize\nEboe\neboe\nebon\nebonist\nebonite\nebonize\nebony\nebracteate\nebracteolate\nebriate\nebriety\nebriosity\nebrious\nebriously\nebullate\nebullience\nebulliency\nebullient\nebulliently\nebulliometer\nebullioscope\nebullioscopic\nebullioscopy\nebullition\nebullitive\nebulus\neburated\neburine\nEburna\neburnated\neburnation\neburnean\neburneoid\neburneous\neburnian\neburnification\necad\necalcarate\necanda\necardinal\nEcardines\necarinate\necarte\nEcaudata\necaudate\nEcballium\necbatic\necblastesis\necbole\necbolic\nEcca\neccaleobion\neccentrate\neccentric\neccentrical\neccentrically\neccentricity\neccentring\neccentrometer\necchondroma\necchondrosis\necchondrotome\necchymoma\necchymose\necchymosis\necclesia\necclesial\necclesiarch\necclesiarchy\necclesiast\nEcclesiastes\necclesiastic\necclesiastical\necclesiastically\necclesiasticism\necclesiasticize\necclesiastics\nEcclesiasticus\necclesiastry\necclesioclastic\necclesiography\necclesiolater\necclesiolatry\necclesiologic\necclesiological\necclesiologically\necclesiologist\necclesiology\necclesiophobia\neccoprotic\neccoproticophoric\neccrinology\neccrisis\neccritic\neccyclema\neccyesis\necdemic\necdemite\necderon\necderonic\necdysiast\necdysis\necesic\necesis\necgonine\neche\nechea\nechelette\nechelon\nechelonment\nEcheloot\nEcheneidae\necheneidid\nEcheneididae\necheneidoid\nEcheneis\nEcheveria\nechidna\nEchidnidae\nEchimys\nEchinacea\nechinal\nechinate\nechinid\nEchinidea\nechinital\nechinite\nEchinocactus\nEchinocaris\nEchinocereus\nEchinochloa\nechinochrome\nechinococcus\nEchinoderes\nEchinoderidae\nechinoderm\nEchinoderma\nechinodermal\nEchinodermata\nechinodermatous\nechinodermic\nEchinodorus\nechinoid\nEchinoidea\nechinologist\nechinology\nEchinomys\nEchinopanax\nEchinops\nechinopsine\nEchinorhinidae\nEchinorhinus\nEchinorhynchus\nEchinospermum\nEchinosphaerites\nEchinosphaeritidae\nEchinostoma\nEchinostomatidae\nechinostome\nechinostomiasis\nEchinozoa\nechinulate\nechinulated\nechinulation\nechinuliform\nechinus\nEchis\nechitamine\nEchites\nEchium\nechiurid\nEchiurida\nechiuroid\nEchiuroidea\nEchiurus\necho\nechoer\nechoic\nechoingly\nechoism\nechoist\nechoize\necholalia\necholalic\necholess\nechometer\nechopractic\nechopraxia\nechowise\nEchuca\neciliate\nEciton\necize\nEckehart\necklein\neclair\neclampsia\neclamptic\neclat\neclectic\neclectical\neclectically\neclecticism\neclecticize\nEclectics\neclectism\neclectist\neclegm\neclegma\neclipsable\neclipsareon\neclipsation\neclipse\neclipser\neclipsis\necliptic\necliptical\necliptically\neclogite\neclogue\neclosion\necmnesia\necoid\necole\necologic\necological\necologically\necologist\necology\neconometer\neconometric\neconometrician\neconometrics\neconomic\neconomical\neconomically\neconomics\neconomism\neconomist\nEconomite\neconomization\neconomize\neconomizer\neconomy\necophene\necophobia\necorticate\necospecies\necospecific\necospecifically\necostate\necosystem\necotonal\necotone\necotype\necotypic\necotypically\necphonesis\necphorable\necphore\necphoria\necphorization\necphorize\necphrasis\necrasite\necru\necrustaceous\necstasis\necstasize\necstasy\necstatic\necstatica\necstatical\necstatically\necstaticize\necstrophy\nectad\nectadenia\nectal\nectally\nectasia\nectasis\nectatic\nectene\nectental\nectepicondylar\nectethmoid\nectethmoidal\nEcthesis\necthetically\necthlipsis\necthyma\nectiris\nectobatic\nectoblast\nectoblastic\nectobronchium\nectocardia\nEctocarpaceae\nectocarpaceous\nEctocarpales\nectocarpic\nectocarpous\nEctocarpus\nectocinerea\nectocinereal\nectocoelic\nectocondylar\nectocondyle\nectocondyloid\nectocornea\nectocranial\nectocuneiform\nectocuniform\nectocyst\nectodactylism\nectoderm\nectodermal\nectodermic\nectodermoidal\nectodermosis\nectodynamomorphic\nectoentad\nectoenzyme\nectoethmoid\nectogenesis\nectogenic\nectogenous\nectoglia\nEctognatha\nectolecithal\nectoloph\nectomere\nectomeric\nectomesoblast\nectomorph\nectomorphic\nectomorphy\nectonephridium\nectoparasite\nectoparasitic\nEctoparasitica\nectopatagium\nectophloic\nectophyte\nectophytic\nectopia\nectopic\nEctopistes\nectoplacenta\nectoplasm\nectoplasmatic\nectoplasmic\nectoplastic\nectoplasy\nEctoprocta\nectoproctan\nectoproctous\nectopterygoid\nectopy\nectoretina\nectorganism\nectorhinal\nectosarc\nectosarcous\nectoskeleton\nectosomal\nectosome\nectosphenoid\nectosphenotic\nectosphere\nectosteal\nectosteally\nectostosis\nectotheca\nectotoxin\nEctotrophi\nectotrophic\nectozoa\nectozoan\nectozoic\nectozoon\nectrodactylia\nectrodactylism\nectrodactyly\nectrogenic\nectrogeny\nectromelia\nectromelian\nectromelic\nectromelus\nectropion\nectropium\nectropometer\nectrosyndactyly\nectypal\nectype\nectypography\nEcuadoran\nEcuadorian\necuelling\necumenic\necumenical\necumenicalism\necumenicality\necumenically\necumenicity\necyphellate\neczema\neczematization\neczematoid\neczematosis\neczematous\nEd\nedacious\nedaciously\nedaciousness\nedacity\nEdana\nedaphic\nedaphology\nedaphon\nEdaphosauria\nEdaphosaurus\nEdda\nEddaic\nedder\nEddic\nEddie\neddish\neddo\nEddy\neddy\neddyroot\nedea\nedeagra\nedeitis\nedelweiss\nedema\nedematous\nedemic\nEden\nEdenic\nedenite\nEdenization\nEdenize\nedental\nedentalous\nEdentata\nedentate\nedentulate\nedentulous\nedeodynia\nedeology\nedeomania\nedeoscopy\nedeotomy\nEdessan\nedestan\nedestin\nEdestosaurus\nEdgar\nedge\nedgebone\nedged\nedgeless\nedgemaker\nedgemaking\nedgeman\nedger\nedgerman\nedgeshot\nedgestone\nedgeways\nedgeweed\nedgewise\nedginess\nedging\nedgingly\nedgrew\nedgy\nedh\nedibility\nedible\nedibleness\nedict\nedictal\nedictally\nedicule\nedificable\nedification\nedificator\nedificatory\nedifice\nedificial\nedifier\nedify\nedifying\nedifyingly\nedifyingness\nedingtonite\nedit\nedital\nEdith\nedition\neditor\neditorial\neditorialize\neditorially\neditorship\neditress\nEdiya\nEdmond\nEdmund\nEdna\nEdo\nEdomite\nEdomitish\nEdoni\nEdriasteroidea\nEdrioasteroid\nEdrioasteroidea\nEdriophthalma\nedriophthalmatous\nedriophthalmian\nedriophthalmic\nedriophthalmous\nEduardo\nEducabilia\neducabilian\neducability\neducable\neducand\neducatable\neducate\neducated\neducatee\neducation\neducationable\neducational\neducationalism\neducationalist\neducationally\neducationary\neducationist\neducative\neducator\neducatory\neducatress\neduce\neducement\neducible\neducive\neduct\neduction\neductive\neductor\nedulcorate\nedulcoration\nedulcorative\nedulcorator\nEduskunta\nEdward\nEdwardean\nEdwardeanism\nEdwardian\nEdwardine\nEdwardsia\nEdwardsiidae\nEdwin\nEdwina\neegrass\neel\neelboat\neelbob\neelbobber\neelcake\neelcatcher\neeler\neelery\neelfare\neelfish\neelgrass\neellike\neelpot\neelpout\neelshop\neelskin\neelspear\neelware\neelworm\neely\neer\neerie\neerily\neeriness\neerisome\neffable\nefface\neffaceable\neffacement\neffacer\neffect\neffecter\neffectful\neffectible\neffective\neffectively\neffectiveness\neffectivity\neffectless\neffector\neffects\neffectual\neffectuality\neffectualize\neffectually\neffectualness\neffectuate\neffectuation\neffeminacy\neffeminate\neffeminately\neffeminateness\neffemination\neffeminatize\neffeminization\neffeminize\neffendi\nefferent\neffervesce\neffervescence\neffervescency\neffervescent\neffervescible\neffervescingly\neffervescive\neffete\neffeteness\neffetman\nefficacious\nefficaciously\nefficaciousness\nefficacity\nefficacy\nefficience\nefficiency\nefficient\nefficiently\nEffie\neffigial\neffigiate\neffigiation\neffigurate\neffiguration\neffigy\nefflate\nefflation\neffloresce\nefflorescence\nefflorescency\nefflorescent\nefflower\neffluence\neffluency\neffluent\neffluvia\neffluvial\neffluviate\neffluviography\neffluvious\neffluvium\nefflux\neffluxion\neffodient\nEffodientia\nefform\nefformation\nefformative\neffort\neffortful\neffortless\neffortlessly\neffossion\neffraction\neffranchise\neffranchisement\neffrontery\neffulge\neffulgence\neffulgent\neffulgently\neffund\neffuse\neffusiometer\neffusion\neffusive\neffusively\neffusiveness\nEfik\neflagelliferous\nefoliolate\nefoliose\nefoveolate\neft\neftest\neftsoons\negad\negalitarian\negalitarianism\negality\nEgba\nEgbert\nEgbo\negence\negeran\nEgeria\negest\negesta\negestion\negestive\negg\neggberry\neggcup\neggcupful\neggeater\negger\neggfish\neggfruit\negghead\negghot\negging\neggler\neggless\negglike\neggnog\neggplant\neggshell\neggy\negilops\negipto\nEglamore\neglandular\neglandulose\neglantine\neglatere\neglestonite\negma\nego\negocentric\negocentricity\negocentrism\nEgocerus\negohood\negoism\negoist\negoistic\negoistical\negoistically\negoity\negoize\negoizer\negol\negolatrous\negomania\negomaniac\negomaniacal\negomism\negophonic\negophony\negosyntonic\negotheism\negotism\negotist\negotistic\negotistical\negotistically\negotize\negregious\negregiously\negregiousness\negress\negression\negressive\negressor\negret\nEgretta\negrimony\negueiite\negurgitate\neguttulate\nEgypt\nEgyptian\nEgyptianism\nEgyptianization\nEgyptianize\nEgyptize\nEgyptologer\nEgyptologic\nEgyptological\nEgyptologist\nEgyptology\neh\nEhatisaht\neheu\nehlite\nEhretia\nEhretiaceae\nehrwaldite\nehuawa\neichbergite\nEichhornia\neichwaldite\neicosane\neident\neidently\neider\neidetic\neidograph\neidolic\neidolism\neidology\neidolology\neidolon\neidoptometry\neidouranion\neigenfunction\neigenvalue\neight\neighteen\neighteenfold\neighteenmo\neighteenth\neighteenthly\neightfoil\neightfold\neighth\neighthly\neightieth\neightling\neightpenny\neightscore\neightsman\neightsome\neighty\neightyfold\neigne\nEikonogen\neikonology\nEileen\nEimak\neimer\nEimeria\neinkorn\nEinsteinian\nEireannach\nEirene\neiresione\neisegesis\neisegetical\neisodic\neisteddfod\neisteddfodic\neisteddfodism\neither\nejaculate\nejaculation\nejaculative\nejaculator\nejaculatory\nEjam\neject\nejecta\nejectable\nejection\nejective\nejectively\nejectivity\nejectment\nejector\nejicient\nejoo\nekaboron\nekacaesium\nekaha\nekamanganese\nekasilicon\nekatantalum\neke\nekebergite\neker\nekerite\neking\nekka\nEkoi\nekphore\nEkron\nEkronite\nektene\nektenes\nektodynamorphic\nel\nelaborate\nelaborately\nelaborateness\nelaboration\nelaborative\nelaborator\nelaboratory\nelabrate\nElachista\nElachistaceae\nelachistaceous\nElaeagnaceae\nelaeagnaceous\nElaeagnus\nElaeis\nelaeoblast\nelaeoblastic\nElaeocarpaceae\nelaeocarpaceous\nElaeocarpus\nElaeococca\nElaeodendron\nelaeodochon\nelaeomargaric\nelaeometer\nelaeoptene\nelaeosaccharum\nelaeothesium\nelaidate\nelaidic\nelaidin\nelaidinic\nelain\nElaine\nelaine\nelaioleucite\nelaioplast\nelaiosome\nElamite\nElamitic\nElamitish\nelance\neland\nelanet\nElanus\nElaphe\nElaphebolion\nelaphine\nElaphodus\nElaphoglossum\nElaphomyces\nElaphomycetaceae\nElaphrium\nelaphure\nelaphurine\nElaphurus\nelapid\nElapidae\nElapinae\nelapine\nelapoid\nElaps\nelapse\nElapsoidea\nelasmobranch\nelasmobranchian\nelasmobranchiate\nElasmobranchii\nelasmosaur\nElasmosaurus\nelasmothere\nElasmotherium\nelastance\nelastic\nelastica\nelastically\nelastician\nelasticin\nelasticity\nelasticize\nelasticizer\nelasticness\nelastin\nelastivity\nelastomer\nelastomeric\nelastometer\nelastometry\nelastose\nelatcha\nelate\nelated\nelatedly\nelatedness\nelater\nelaterid\nElateridae\nelaterin\nelaterite\nelaterium\nelateroid\nElatha\nElatinaceae\nelatinaceous\nElatine\nelation\nelative\nelator\nelatrometer\nelb\nElbert\nElberta\nelbow\nelbowboard\nelbowbush\nelbowchair\nelbowed\nelbower\nelbowpiece\nelbowroom\nelbowy\nelcaja\nelchee\neld\nelder\nelderberry\nelderbrotherhood\nelderbrotherish\nelderbrotherly\nelderbush\nelderhood\nelderliness\nelderly\nelderman\neldership\neldersisterly\nelderwoman\nelderwood\nelderwort\neldest\neldin\nelding\nEldred\neldress\neldritch\nElean\nEleanor\nEleatic\nEleaticism\nEleazar\nelecampane\nelect\nelectable\nelectee\nelecticism\nelection\nelectionary\nelectioneer\nelectioneerer\nelective\nelectively\nelectiveness\nelectivism\nelectivity\nelectly\nelector\nelectoral\nelectorally\nelectorate\nelectorial\nelectorship\nElectra\nelectragist\nelectragy\nelectralize\nelectrepeter\nelectress\nelectret\nelectric\nelectrical\nelectricalize\nelectrically\nelectricalness\nelectrician\nelectricity\nelectricize\nelectrics\nelectriferous\nelectrifiable\nelectrification\nelectrifier\nelectrify\nelectrion\nelectrionic\nelectrizable\nelectrization\nelectrize\nelectrizer\nelectro\nelectroacoustic\nelectroaffinity\nelectroamalgamation\nelectroanalysis\nelectroanalytic\nelectroanalytical\nelectroanesthesia\nelectroballistic\nelectroballistics\nelectrobath\nelectrobiological\nelectrobiologist\nelectrobiology\nelectrobioscopy\nelectroblasting\nelectrobrasser\nelectrobus\nelectrocapillarity\nelectrocapillary\nelectrocardiogram\nelectrocardiograph\nelectrocardiographic\nelectrocardiography\nelectrocatalysis\nelectrocatalytic\nelectrocataphoresis\nelectrocataphoretic\nelectrocauterization\nelectrocautery\nelectroceramic\nelectrochemical\nelectrochemically\nelectrochemist\nelectrochemistry\nelectrochronograph\nelectrochronographic\nelectrochronometer\nelectrochronometric\nelectrocoagulation\nelectrocoating\nelectrocolloidal\nelectrocontractility\nelectrocorticogram\nelectroculture\nelectrocute\nelectrocution\nelectrocutional\nelectrocutioner\nelectrocystoscope\nelectrode\nelectrodeless\nelectrodentistry\nelectrodeposit\nelectrodepositable\nelectrodeposition\nelectrodepositor\nelectrodesiccate\nelectrodesiccation\nelectrodiagnosis\nelectrodialysis\nelectrodialyze\nelectrodialyzer\nelectrodiplomatic\nelectrodispersive\nelectrodissolution\nelectrodynamic\nelectrodynamical\nelectrodynamics\nelectrodynamism\nelectrodynamometer\nelectroencephalogram\nelectroencephalograph\nelectroencephalography\nelectroendosmose\nelectroendosmosis\nelectroendosmotic\nelectroengrave\nelectroengraving\nelectroergometer\nelectroetching\nelectroethereal\nelectroextraction\nelectroform\nelectroforming\nelectrofuse\nelectrofused\nelectrofusion\nelectrogalvanic\nelectrogalvanize\nelectrogenesis\nelectrogenetic\nelectrogild\nelectrogilding\nelectrogilt\nelectrograph\nelectrographic\nelectrographite\nelectrography\nelectroharmonic\nelectrohemostasis\nelectrohomeopathy\nelectrohorticulture\nelectrohydraulic\nelectroimpulse\nelectroindustrial\nelectroionic\nelectroirrigation\nelectrokinematics\nelectrokinetic\nelectrokinetics\nelectrolier\nelectrolithotrity\nelectrologic\nelectrological\nelectrologist\nelectrology\nelectroluminescence\nelectroluminescent\nelectrolysis\nelectrolyte\nelectrolytic\nelectrolytical\nelectrolytically\nelectrolyzability\nelectrolyzable\nelectrolyzation\nelectrolyze\nelectrolyzer\nelectromagnet\nelectromagnetic\nelectromagnetical\nelectromagnetically\nelectromagnetics\nelectromagnetism\nelectromagnetist\nelectromassage\nelectromechanical\nelectromechanics\nelectromedical\nelectromer\nelectromeric\nelectromerism\nelectrometallurgical\nelectrometallurgist\nelectrometallurgy\nelectrometer\nelectrometric\nelectrometrical\nelectrometrically\nelectrometry\nelectromobile\nelectromobilism\nelectromotion\nelectromotive\nelectromotivity\nelectromotograph\nelectromotor\nelectromuscular\nelectromyographic\nelectron\nelectronarcosis\nelectronegative\nelectronervous\nelectronic\nelectronics\nelectronographic\nelectrooptic\nelectrooptical\nelectrooptically\nelectrooptics\nelectroosmosis\nelectroosmotic\nelectroosmotically\nelectrootiatrics\nelectropathic\nelectropathology\nelectropathy\nelectropercussive\nelectrophobia\nelectrophone\nelectrophore\nelectrophoresis\nelectrophoretic\nelectrophoric\nElectrophoridae\nelectrophorus\nelectrophotometer\nelectrophotometry\nelectrophototherapy\nelectrophrenic\nelectrophysics\nelectrophysiological\nelectrophysiologist\nelectrophysiology\nelectropism\nelectroplate\nelectroplater\nelectroplating\nelectroplax\nelectropneumatic\nelectropneumatically\nelectropoion\nelectropolar\nelectropositive\nelectropotential\nelectropower\nelectropsychrometer\nelectropult\nelectropuncturation\nelectropuncture\nelectropuncturing\nelectropyrometer\nelectroreceptive\nelectroreduction\nelectrorefine\nelectroscission\nelectroscope\nelectroscopic\nelectrosherardizing\nelectroshock\nelectrosmosis\nelectrostatic\nelectrostatical\nelectrostatically\nelectrostatics\nelectrosteel\nelectrostenolysis\nelectrostenolytic\nelectrostereotype\nelectrostriction\nelectrosurgery\nelectrosurgical\nelectrosynthesis\nelectrosynthetic\nelectrosynthetically\nelectrotactic\nelectrotautomerism\nelectrotaxis\nelectrotechnic\nelectrotechnical\nelectrotechnician\nelectrotechnics\nelectrotechnology\nelectrotelegraphic\nelectrotelegraphy\nelectrotelethermometer\nelectrotellurograph\nelectrotest\nelectrothanasia\nelectrothanatosis\nelectrotherapeutic\nelectrotherapeutical\nelectrotherapeutics\nelectrotherapeutist\nelectrotherapist\nelectrotherapy\nelectrothermal\nelectrothermancy\nelectrothermic\nelectrothermics\nelectrothermometer\nelectrothermostat\nelectrothermostatic\nelectrothermotic\nelectrotitration\nelectrotonic\nelectrotonicity\nelectrotonize\nelectrotonus\nelectrotrephine\nelectrotropic\nelectrotropism\nelectrotype\nelectrotyper\nelectrotypic\nelectrotyping\nelectrotypist\nelectrotypy\nelectrovalence\nelectrovalency\nelectrovection\nelectroviscous\nelectrovital\nelectrowin\nelectrum\nelectuary\neleemosynarily\neleemosynariness\neleemosynary\nelegance\nelegancy\nelegant\nelegantly\nelegiac\nelegiacal\nelegiambic\nelegiambus\nelegiast\nelegist\nelegit\nelegize\nelegy\neleidin\nelement\nelemental\nelementalism\nelementalist\nelementalistic\nelementalistically\nelementality\nelementalize\nelementally\nelementarily\nelementariness\nelementary\nelementoid\nelemi\nelemicin\nelemin\nelench\nelenchi\nelenchic\nelenchical\nelenchically\nelenchize\nelenchtic\nelenchtical\nelenctic\nelenge\neleoblast\nEleocharis\neleolite\neleomargaric\neleometer\neleonorite\neleoptene\neleostearate\neleostearic\nelephant\nelephanta\nelephantiac\nelephantiasic\nelephantiasis\nelephantic\nelephanticide\nElephantidae\nelephantine\nelephantlike\nelephantoid\nelephantoidal\nElephantopus\nelephantous\nelephantry\nElephas\nElettaria\nEleusine\nEleusinia\nEleusinian\nEleusinion\nEleut\neleutherarch\nEleutheri\nEleutheria\nEleutherian\nEleutherios\neleutherism\neleutherodactyl\nEleutherodactyli\nEleutherodactylus\neleutheromania\neleutheromaniac\neleutheromorph\neleutheropetalous\neleutherophyllous\neleutherosepalous\nEleutherozoa\neleutherozoan\nelevate\nelevated\nelevatedly\nelevatedness\nelevating\nelevatingly\nelevation\nelevational\nelevator\nelevatory\neleven\nelevener\nelevenfold\neleventh\neleventhly\nelevon\nelf\nelfenfolk\nelfhood\nelfic\nelfin\nelfinwood\nelfish\nelfishly\nelfishness\nelfkin\nelfland\nelflike\nelflock\nelfship\nelfwife\nelfwort\nEli\nElia\nElian\nElianic\nElias\neliasite\nelicit\nelicitable\nelicitate\nelicitation\nelicitor\nelicitory\nelide\nelidible\neligibility\neligible\neligibleness\neligibly\nElihu\nElijah\neliminable\neliminand\neliminant\neliminate\nelimination\neliminative\neliminator\neliminatory\nElinor\nElinvar\nEliot\nEliphalet\neliquate\neliquation\nElisabeth\nElisha\nElishah\nelision\nelisor\nElissa\nelite\nelixir\nEliza\nElizabeth\nElizabethan\nElizabethanism\nElizabethanize\nelk\nElkanah\nElkdom\nElkesaite\nelkhorn\nelkhound\nElkoshite\nelkslip\nElkuma\nelkwood\nell\nElla\nellachick\nellagate\nellagic\nellagitannin\nEllasar\nelle\nelleck\nEllen\nellenyard\nEllerian\nellfish\nEllice\nEllick\nElliot\nElliott\nellipse\nellipses\nellipsis\nellipsograph\nellipsoid\nellipsoidal\nellipsone\nellipsonic\nelliptic\nelliptical\nelliptically\nellipticalness\nellipticity\nelliptograph\nelliptoid\nellops\nellwand\nelm\nElmer\nelmy\nEloah\nelocular\nelocute\nelocution\nelocutionary\nelocutioner\nelocutionist\nelocutionize\nelod\nElodea\nElodeaceae\nElodes\neloge\nelogium\nElohim\nElohimic\nElohism\nElohist\nElohistic\neloign\neloigner\neloignment\nEloise\nElon\nelongate\nelongated\nelongation\nelongative\nElonite\nelope\nelopement\neloper\nElopidae\nelops\neloquence\neloquent\neloquential\neloquently\neloquentness\nElotherium\nelotillo\nelpasolite\nelpidite\nElric\nels\nElsa\nelse\nelsehow\nelsewards\nelseways\nelsewhen\nelsewhere\nelsewheres\nelsewhither\nelsewise\nElsholtzia\nelsin\nelt\neluate\nelucidate\nelucidation\nelucidative\nelucidator\nelucidatory\nelucubrate\nelucubration\nelude\neluder\nelusion\nelusive\nelusively\nelusiveness\nelusoriness\nelusory\nelute\nelution\nelutor\nelutriate\nelutriation\nelutriator\neluvial\neluviate\neluviation\neluvium\nelvan\nelvanite\nelvanitic\nelver\nelves\nelvet\nElvira\nElvis\nelvish\nelvishly\nElwood\nelydoric\nElymi\nElymus\nElysee\nElysia\nelysia\nElysian\nElysiidae\nElysium\nelytral\nelytriferous\nelytriform\nelytrigerous\nelytrin\nelytrocele\nelytroclasia\nelytroid\nelytron\nelytroplastic\nelytropolypus\nelytroposis\nelytrorhagia\nelytrorrhagia\nelytrorrhaphy\nelytrostenosis\nelytrotomy\nelytrous\nelytrum\nElzevir\nElzevirian\nEm\nem\nemaciate\nemaciation\nemajagua\nemanant\nemanate\nemanation\nemanational\nemanationism\nemanationist\nemanatism\nemanatist\nemanatistic\nemanativ\nemanative\nemanatively\nemanator\nemanatory\nemancipate\nemancipation\nemancipationist\nemancipatist\nemancipative\nemancipator\nemancipatory\nemancipatress\nemancipist\nemandibulate\nemanium\nemarcid\nemarginate\nemarginately\nemargination\nEmarginula\nemasculate\nemasculation\nemasculative\nemasculator\nemasculatory\nEmbadomonas\nemball\nemballonurid\nEmballonuridae\nemballonurine\nembalm\nembalmer\nembalmment\nembank\nembankment\nembannered\nembar\nembargo\nembargoist\nembark\nembarkation\nembarkment\nembarras\nembarrass\nembarrassed\nembarrassedly\nembarrassing\nembarrassingly\nembarrassment\nembarrel\nembassage\nembassy\nembastioned\nembathe\nembatholithic\nembattle\nembattled\nembattlement\nembay\nembayment\nEmbden\nembed\nembedment\nembeggar\nEmbelia\nembelic\nembellish\nembellisher\nembellishment\nember\nembergoose\nEmberiza\nemberizidae\nEmberizinae\nemberizine\nembezzle\nembezzlement\nembezzler\nEmbiidae\nEmbiidina\nembind\nEmbiodea\nEmbioptera\nembiotocid\nEmbiotocidae\nembiotocoid\nembira\nembitter\nembitterer\nembitterment\nemblaze\nemblazer\nemblazon\nemblazoner\nemblazonment\nemblazonry\nemblem\nemblema\nemblematic\nemblematical\nemblematically\nemblematicalness\nemblematicize\nemblematist\nemblematize\nemblematology\nemblement\nemblemist\nemblemize\nemblemology\nemblic\nemblossom\nembodier\nembodiment\nembody\nembog\nemboitement\nembolden\nemboldener\nembole\nembolectomy\nembolemia\nembolic\nemboliform\nembolism\nembolismic\nembolismus\nembolite\nembolium\nembolize\nembolo\nembololalia\nEmbolomeri\nembolomerism\nembolomerous\nembolomycotic\nembolum\nembolus\nemboly\nemborder\nemboscata\nembosom\nemboss\nembossage\nembosser\nembossing\nembossman\nembossment\nembosture\nembottle\nembouchure\nembound\nembow\nembowed\nembowel\nemboweler\nembowelment\nembower\nembowerment\nembowment\nembox\nembrace\nembraceable\nembraceably\nembracement\nembraceor\nembracer\nembracery\nembracing\nembracingly\nembracingness\nembracive\nembrail\nembranchment\nembrangle\nembranglement\nembrasure\nembreathe\nembreathement\nEmbrica\nembright\nembrittle\nembrittlement\nembroaden\nembrocate\nembrocation\nembroider\nembroiderer\nembroideress\nembroidery\nembroil\nembroiler\nembroilment\nembronze\nembrown\nembryectomy\nembryo\nembryocardia\nembryoctonic\nembryoctony\nembryoferous\nembryogenesis\nembryogenetic\nembryogenic\nembryogeny\nembryogony\nembryographer\nembryographic\nembryography\nembryoid\nembryoism\nembryologic\nembryological\nembryologically\nembryologist\nembryology\nembryoma\nembryon\nembryonal\nembryonary\nembryonate\nembryonated\nembryonic\nembryonically\nembryoniferous\nembryoniform\nembryony\nembryopathology\nembryophagous\nembryophore\nEmbryophyta\nembryophyte\nembryoplastic\nembryoscope\nembryoscopic\nembryotega\nembryotic\nembryotome\nembryotomy\nembryotrophic\nembryotrophy\nembryous\nembryulcia\nembryulcus\nembubble\nembuia\nembus\nembusk\nembuskin\nemcee\neme\nemeer\nemeership\nEmeline\nemend\nemendable\nemendandum\nemendate\nemendation\nemendator\nemendatory\nemender\nemerald\nemeraldine\nemeraude\nemerge\nemergence\nemergency\nemergent\nemergently\nemergentness\nEmerita\nemerited\nemeritus\nemerize\nemerse\nemersed\nemersion\nEmersonian\nEmersonianism\nEmery\nemery\nEmesa\nEmesidae\nemesis\nemetatrophia\nemetic\nemetically\nemetine\nemetocathartic\nemetology\nemetomorphine\nemgalla\nemication\nemiction\nemictory\nemigrant\nemigrate\nemigration\nemigrational\nemigrationist\nemigrative\nemigrator\nemigratory\nemigree\nEmil\nEmilia\nEmily\nEmim\neminence\neminency\neminent\neminently\nemir\nemirate\nemirship\nemissarium\nemissary\nemissaryship\nemissile\nemission\nemissive\nemissivity\nemit\nemittent\nemitter\nEmm\nEmma\nemma\nEmmanuel\nemmarble\nemmarvel\nemmenagogic\nemmenagogue\nemmenic\nemmeniopathy\nemmenology\nemmensite\nEmmental\nemmer\nemmergoose\nemmet\nemmetrope\nemmetropia\nemmetropic\nemmetropism\nemmetropy\nEmmett\nemodin\nemollescence\nemolliate\nemollient\nemoloa\nemolument\nemolumental\nemolumentary\nemote\nemotion\nemotionable\nemotional\nemotionalism\nemotionalist\nemotionality\nemotionalization\nemotionalize\nemotionally\nemotioned\nemotionist\nemotionize\nemotionless\nemotionlessness\nemotive\nemotively\nemotiveness\nemotivity\nempacket\nempaistic\nempall\nempanel\nempanelment\nempanoply\nempaper\nemparadise\nemparchment\nempark\nempasm\nempathic\nempathically\nempathize\nempathy\nEmpedoclean\nempeirema\nEmpeo\nemperor\nemperorship\nempery\nEmpetraceae\nempetraceous\nEmpetrum\nemphases\nemphasis\nemphasize\nemphatic\nemphatical\nemphatically\nemphaticalness\nemphlysis\nemphractic\nemphraxis\nemphysema\nemphysematous\nemphyteusis\nemphyteuta\nemphyteutic\nempicture\nEmpididae\nEmpidonax\nempiecement\nEmpire\nempire\nempirema\nempiric\nempirical\nempiricalness\nempiricism\nempiricist\nempirics\nempiriocritcism\nempiriocritical\nempiriological\nempirism\nempiristic\nemplace\nemplacement\nemplane\nemplastic\nemplastration\nemplastrum\nemplectite\nempleomania\nemploy\nemployability\nemployable\nemployed\nemployee\nemployer\nemployless\nemployment\nemplume\nempocket\nempodium\nempoison\nempoisonment\nemporetic\nemporeutic\nemporia\nemporial\nemporium\nempower\nempowerment\nempress\nemprise\nemprosthotonic\nemprosthotonos\nemprosthotonus\nempt\nemptier\nemptily\nemptiness\nemptings\nemptins\nemption\nemptional\nemptor\nempty\nemptyhearted\nemptysis\nempurple\nEmpusa\nempyema\nempyemic\nempyesis\nempyocele\nempyreal\nempyrean\nempyreuma\nempyreumatic\nempyreumatical\nempyreumatize\nempyromancy\nemu\nemulable\nemulant\nemulate\nemulation\nemulative\nemulatively\nemulator\nemulatory\nemulatress\nemulgence\nemulgent\nemulous\nemulously\nemulousness\nemulsibility\nemulsible\nemulsifiability\nemulsifiable\nemulsification\nemulsifier\nemulsify\nemulsin\nemulsion\nemulsionize\nemulsive\nemulsoid\nemulsor\nemunctory\nemundation\nemyd\nEmydea\nemydian\nEmydidae\nEmydinae\nEmydosauria\nemydosaurian\nEmys\nen\nenable\nenablement\nenabler\nenact\nenactable\nenaction\nenactive\nenactment\nenactor\nenactory\nenaena\nenage\nEnajim\nenalid\nEnaliornis\nenaliosaur\nEnaliosauria\nenaliosaurian\nenallachrome\nenallage\nenaluron\nenam\nenamber\nenambush\nenamdar\nenamel\nenameler\nenameling\nenamelist\nenamelless\nenamellist\nenameloma\nenamelware\nenamor\nenamorato\nenamored\nenamoredness\nenamorment\nenamourment\nenanguish\nenanthem\nenanthema\nenanthematous\nenanthesis\nenantiobiosis\nenantioblastic\nenantioblastous\nenantiomer\nenantiomeride\nenantiomorph\nenantiomorphic\nenantiomorphism\nenantiomorphous\nenantiomorphously\nenantiomorphy\nenantiopathia\nenantiopathic\nenantiopathy\nenantiosis\nenantiotropic\nenantiotropy\nenantobiosis\nenapt\nenarbor\nenarbour\nenarch\nenarched\nenargite\nenarm\nenarme\nenarthrodia\nenarthrodial\nenarthrosis\nenate\nenatic\nenation\nenbrave\nencaenia\nencage\nencake\nencalendar\nencallow\nencamp\nencampment\nencanker\nencanthis\nencapsulate\nencapsulation\nencapsule\nencarditis\nencarnadine\nencarnalize\nencarpium\nencarpus\nencase\nencasement\nencash\nencashable\nencashment\nencasserole\nencastage\nencatarrhaphy\nencauma\nencaustes\nencaustic\nencaustically\nencave\nencefalon\nEncelia\nencell\nencenter\nencephala\nencephalalgia\nEncephalartos\nencephalasthenia\nencephalic\nencephalin\nencephalitic\nencephalitis\nencephalocele\nencephalocoele\nencephalodialysis\nencephalogram\nencephalograph\nencephalography\nencephaloid\nencephalolith\nencephalology\nencephaloma\nencephalomalacia\nencephalomalacosis\nencephalomalaxis\nencephalomeningitis\nencephalomeningocele\nencephalomere\nencephalomeric\nencephalometer\nencephalometric\nencephalomyelitis\nencephalomyelopathy\nencephalon\nencephalonarcosis\nencephalopathia\nencephalopathic\nencephalopathy\nencephalophyma\nencephalopsychesis\nencephalopyosis\nencephalorrhagia\nencephalosclerosis\nencephaloscope\nencephaloscopy\nencephalosepsis\nencephalospinal\nencephalothlipsis\nencephalotome\nencephalotomy\nencephalous\nenchain\nenchainment\nenchair\nenchalice\nenchannel\nenchant\nenchanter\nenchanting\nenchantingly\nenchantingness\nenchantment\nenchantress\nencharge\nencharnel\nenchase\nenchaser\nenchasten\nEnchelycephali\nenchequer\nenchest\nenchilada\nenchiridion\nEnchodontid\nEnchodontidae\nEnchodontoid\nEnchodus\nenchondroma\nenchondromatous\nenchondrosis\nenchorial\nenchurch\nenchylema\nenchylematous\nenchymatous\nenchytrae\nenchytraeid\nEnchytraeidae\nEnchytraeus\nencina\nencinal\nencincture\nencinder\nencinillo\nencipher\nencircle\nencirclement\nencircler\nencist\nencitadel\nenclaret\nenclasp\nenclave\nenclavement\nenclisis\nenclitic\nenclitical\nenclitically\nencloak\nencloister\nenclose\nencloser\nenclosure\nenclothe\nencloud\nencoach\nencode\nencoffin\nencoignure\nencoil\nencolden\nencollar\nencolor\nencolpion\nencolumn\nencomendero\nencomia\nencomiast\nencomiastic\nencomiastical\nencomiastically\nencomic\nencomienda\nencomiologic\nencomium\nencommon\nencompass\nencompasser\nencompassment\nencoop\nencorbelment\nencore\nencoronal\nencoronate\nencoronet\nencounter\nencounterable\nencounterer\nencourage\nencouragement\nencourager\nencouraging\nencouragingly\nencowl\nencraal\nencradle\nencranial\nencratic\nEncratism\nEncratite\nencraty\nencreel\nencrimson\nencrinal\nencrinic\nEncrinidae\nencrinidae\nencrinital\nencrinite\nencrinitic\nencrinitical\nencrinoid\nEncrinoidea\nEncrinus\nencrisp\nencroach\nencroacher\nencroachingly\nencroachment\nencrotchet\nencrown\nencrownment\nencrust\nencrustment\nencrypt\nencryption\nencuirassed\nencumber\nencumberer\nencumberingly\nencumberment\nencumbrance\nencumbrancer\nencup\nencurl\nencurtain\nencushion\nencyclic\nencyclical\nencyclopedia\nencyclopediac\nencyclopediacal\nencyclopedial\nencyclopedian\nencyclopediast\nencyclopedic\nencyclopedically\nencyclopedism\nencyclopedist\nencyclopedize\nencyrtid\nEncyrtidae\nencyst\nencystation\nencystment\nend\nendable\nendamage\nendamageable\nendamagement\nendamask\nendameba\nendamebic\nEndamoeba\nendamoebiasis\nendamoebic\nEndamoebidae\nendanger\nendangerer\nendangerment\nendangium\nendaortic\nendaortitis\nendarch\nendarchy\nendarterial\nendarteritis\nendarterium\nendaspidean\nendaze\nendboard\nendbrain\nendear\nendearance\nendeared\nendearedly\nendearedness\nendearing\nendearingly\nendearingness\nendearment\nendeavor\nendeavorer\nended\nendeictic\nendellionite\nendemial\nendemic\nendemically\nendemicity\nendemiological\nendemiology\nendemism\nendenizen\nender\nendere\nendermatic\nendermic\nendermically\nenderon\nenderonic\nendevil\nendew\nendgate\nendiadem\nendiaper\nending\nendite\nendive\nendless\nendlessly\nendlessness\nendlichite\nendlong\nendmatcher\nendmost\nendoabdominal\nendoangiitis\nendoaortitis\nendoappendicitis\nendoarteritis\nendoauscultation\nendobatholithic\nendobiotic\nendoblast\nendoblastic\nendobronchial\nendobronchially\nendobronchitis\nendocannibalism\nendocardiac\nendocardial\nendocarditic\nendocarditis\nendocardium\nendocarp\nendocarpal\nendocarpic\nendocarpoid\nendocellular\nendocentric\nEndoceras\nEndoceratidae\nendoceratite\nendoceratitic\nendocervical\nendocervicitis\nendochondral\nendochorion\nendochorionic\nendochrome\nendochylous\nendoclinal\nendocline\nendocoelar\nendocoele\nendocoeliac\nendocolitis\nendocolpitis\nendocondensation\nendocone\nendoconidium\nendocorpuscular\nendocortex\nendocranial\nendocranium\nendocrinal\nendocrine\nendocrinic\nendocrinism\nendocrinological\nendocrinologist\nendocrinology\nendocrinopathic\nendocrinopathy\nendocrinotherapy\nendocrinous\nendocritic\nendocycle\nendocyclic\nendocyemate\nendocyst\nendocystitis\nendoderm\nendodermal\nendodermic\nendodermis\nendodontia\nendodontic\nendodontist\nendodynamomorphic\nendoenteritis\nendoenzyme\nendoesophagitis\nendofaradism\nendogalvanism\nendogamic\nendogamous\nendogamy\nendogastric\nendogastrically\nendogastritis\nendogen\nEndogenae\nendogenesis\nendogenetic\nendogenic\nendogenous\nendogenously\nendogeny\nendoglobular\nendognath\nendognathal\nendognathion\nendogonidium\nendointoxication\nendokaryogamy\nendolabyrinthitis\nendolaryngeal\nendolemma\nendolumbar\nendolymph\nendolymphangial\nendolymphatic\nendolymphic\nendolysin\nendomastoiditis\nendome\nendomesoderm\nendometrial\nendometritis\nendometrium\nendometry\nendomitosis\nendomitotic\nendomixis\nendomorph\nendomorphic\nendomorphism\nendomorphy\nEndomyces\nEndomycetaceae\nendomysial\nendomysium\nendoneurial\nendoneurium\nendonuclear\nendonucleolus\nendoparasite\nendoparasitic\nEndoparasitica\nendopathic\nendopelvic\nendopericarditis\nendoperidial\nendoperidium\nendoperitonitis\nendophagous\nendophagy\nendophasia\nendophasic\nendophlebitis\nendophragm\nendophragmal\nEndophyllaceae\nendophyllous\nEndophyllum\nendophytal\nendophyte\nendophytic\nendophytically\nendophytous\nendoplasm\nendoplasma\nendoplasmic\nendoplast\nendoplastron\nendoplastular\nendoplastule\nendopleura\nendopleural\nendopleurite\nendopleuritic\nendopod\nendopodite\nendopoditic\nendoproct\nEndoprocta\nendoproctous\nendopsychic\nEndopterygota\nendopterygote\nendopterygotic\nendopterygotism\nendopterygotous\nendorachis\nendoral\nendore\nendorhinitis\nendorsable\nendorsation\nendorse\nendorsed\nendorsee\nendorsement\nendorser\nendorsingly\nendosalpingitis\nendosarc\nendosarcode\nendosarcous\nendosclerite\nendoscope\nendoscopic\nendoscopy\nendosecretory\nendosepsis\nendosiphon\nendosiphonal\nendosiphonate\nendosiphuncle\nendoskeletal\nendoskeleton\nendosmometer\nendosmometric\nendosmosic\nendosmosis\nendosmotic\nendosmotically\nendosome\nendosperm\nendospermic\nendospore\nendosporium\nendosporous\nendoss\nendosteal\nendosteally\nendosteitis\nendosteoma\nendosternite\nendosternum\nendosteum\nendostitis\nendostoma\nendostome\nendostosis\nendostracal\nendostracum\nendostylar\nendostyle\nendostylic\nendotheca\nendothecal\nendothecate\nendothecial\nendothecium\nendothelia\nendothelial\nendothelioblastoma\nendotheliocyte\nendothelioid\nendotheliolysin\nendotheliolytic\nendothelioma\nendotheliomyoma\nendotheliomyxoma\nendotheliotoxin\nendothelium\nendothermal\nendothermic\nendothermous\nendothermy\nEndothia\nendothoracic\nendothorax\nEndothrix\nendothys\nendotoxic\nendotoxin\nendotoxoid\nendotracheitis\nendotrachelitis\nEndotrophi\nendotrophic\nendotys\nendovaccination\nendovasculitis\nendovenous\nendow\nendower\nendowment\nendozoa\nendpiece\nEndromididae\nEndromis\nendue\nenduement\nendungeon\nendura\nendurability\nendurable\nendurableness\nendurably\nendurance\nendurant\nendure\nendurer\nenduring\nenduringly\nenduringness\nendways\nendwise\nendyma\nendymal\nEndymion\nendysis\nEneas\neneclann\nenema\nenemy\nenemylike\nenemyship\nenepidermic\nenergeia\nenergesis\nenergetic\nenergetical\nenergetically\nenergeticalness\nenergeticist\nenergetics\nenergetistic\nenergic\nenergical\nenergid\nenergism\nenergist\nenergize\nenergizer\nenergumen\nenergumenon\nenergy\nenervate\nenervation\nenervative\nenervator\neneuch\neneugh\nenface\nenfacement\nenfamous\nenfasten\nenfatico\nenfeature\nenfeeble\nenfeeblement\nenfeebler\nenfelon\nenfeoff\nenfeoffment\nenfester\nenfetter\nenfever\nenfigure\nenfilade\nenfilading\nenfile\nenfiled\nenflagellate\nenflagellation\nenflesh\nenfleurage\nenflower\nenfoil\nenfold\nenfolden\nenfolder\nenfoldment\nenfonced\nenforce\nenforceability\nenforceable\nenforced\nenforcedly\nenforcement\nenforcer\nenforcibility\nenforcible\nenforcingly\nenfork\nenfoul\nenframe\nenframement\nenfranchisable\nenfranchise\nenfranchisement\nenfranchiser\nenfree\nenfrenzy\nenfuddle\nenfurrow\nengage\nengaged\nengagedly\nengagedness\nengagement\nengager\nengaging\nengagingly\nengagingness\nengaol\nengarb\nengarble\nengarland\nengarment\nengarrison\nengastrimyth\nengastrimythic\nengaud\nengaze\nEngelmannia\nengem\nengender\nengenderer\nengenderment\nengerminate\nenghosted\nengild\nengine\nengineer\nengineering\nengineership\nenginehouse\nengineless\nenginelike\nengineman\nenginery\nenginous\nengird\nengirdle\nengirt\nengjateigur\nenglacial\nenglacially\nenglad\nengladden\nEnglander\nEngler\nEnglerophoenix\nEnglifier\nEnglify\nEnglish\nEnglishable\nEnglisher\nEnglishhood\nEnglishism\nEnglishize\nEnglishly\nEnglishman\nEnglishness\nEnglishry\nEnglishwoman\nenglobe\nenglobement\nengloom\nenglory\nenglut\nenglyn\nengnessang\nengobe\nengold\nengolden\nengore\nengorge\nengorgement\nengouled\nengrace\nengraff\nengraft\nengraftation\nengrafter\nengraftment\nengrail\nengrailed\nengrailment\nengrain\nengrained\nengrainedly\nengrainer\nengram\nengramma\nengrammatic\nengrammic\nengrandize\nengrandizement\nengraphia\nengraphic\nengraphically\nengraphy\nengrapple\nengrasp\nEngraulidae\nEngraulis\nengrave\nengraved\nengravement\nengraver\nengraving\nengreen\nengrieve\nengroove\nengross\nengrossed\nengrossedly\nengrosser\nengrossing\nengrossingly\nengrossingness\nengrossment\nenguard\nengulf\nengulfment\nengyscope\nengysseismology\nEngystomatidae\nenhallow\nenhalo\nenhamper\nenhance\nenhanced\nenhancement\nenhancer\nenhancive\nenharmonic\nenharmonical\nenharmonically\nenhat\nenhaunt\nenhearse\nenheart\nenhearten\nenhedge\nenhelm\nenhemospore\nenherit\nenheritage\nenheritance\nenhorror\nenhunger\nenhusk\nEnhydra\nEnhydrinae\nEnhydris\nenhydrite\nenhydritic\nenhydros\nenhydrous\nenhypostasia\nenhypostasis\nenhypostatic\nenhypostatize\neniac\nEnicuridae\nEnid\nEnif\nenigma\nenigmatic\nenigmatical\nenigmatically\nenigmaticalness\nenigmatist\nenigmatization\nenigmatize\nenigmatographer\nenigmatography\nenigmatology\nenisle\nenjail\nenjamb\nenjambed\nenjambment\nenjelly\nenjeopard\nenjeopardy\nenjewel\nenjoin\nenjoinder\nenjoiner\nenjoinment\nenjoy\nenjoyable\nenjoyableness\nenjoyably\nenjoyer\nenjoying\nenjoyingly\nenjoyment\nenkerchief\nenkernel\nEnki\nEnkidu\nenkindle\nenkindler\nenkraal\nenlace\nenlacement\nenlard\nenlarge\nenlargeable\nenlargeableness\nenlarged\nenlargedly\nenlargedness\nenlargement\nenlarger\nenlarging\nenlargingly\nenlaurel\nenleaf\nenleague\nenlevement\nenlief\nenlife\nenlight\nenlighten\nenlightened\nenlightenedly\nenlightenedness\nenlightener\nenlightening\nenlighteningly\nenlightenment\nenlink\nenlinkment\nenlist\nenlisted\nenlister\nenlistment\nenliven\nenlivener\nenlivening\nenliveningly\nenlivenment\nenlock\nenlodge\nenlodgement\nenmarble\nenmask\nenmass\nenmesh\nenmeshment\nenmist\nenmity\nenmoss\nenmuffle\nenneacontahedral\nenneacontahedron\nennead\nenneadianome\nenneadic\nenneagon\nenneagynous\nenneahedral\nenneahedria\nenneahedron\nenneapetalous\nenneaphyllous\nenneasemic\nenneasepalous\nenneaspermous\nenneastyle\nenneastylos\nenneasyllabic\nenneateric\nenneatic\nenneatical\nennerve\nenniche\nennoble\nennoblement\nennobler\nennobling\nennoblingly\nennoic\nennomic\nennui\nEnoch\nEnochic\nenocyte\nenodal\nenodally\nenoil\nenol\nenolate\nenolic\nenolizable\nenolization\nenolize\nenomania\nenomaniac\nenomotarch\nenomoty\nenophthalmos\nenophthalmus\nEnopla\nenoplan\nenoptromancy\nenorganic\nenorm\nenormity\nenormous\nenormously\nenormousness\nEnos\nenostosis\nenough\nenounce\nenouncement\nenow\nenphytotic\nenplane\nenquicken\nenquire\nenquirer\nenquiry\nenrace\nenrage\nenraged\nenragedly\nenragement\nenrange\nenrank\nenrapt\nenrapture\nenrapturer\nenravish\nenravishingly\nenravishment\nenray\nenregiment\nenregister\nenregistration\nenregistry\nenrib\nenrich\nenricher\nenriching\nenrichingly\nenrichment\nenring\nenrive\nenrobe\nenrobement\nenrober\nenrockment\nenrol\nenroll\nenrolled\nenrollee\nenroller\nenrollment\nenrolment\nenroot\nenrough\nenruin\nenrut\nens\nensaffron\nensaint\nensample\nensand\nensandal\nensanguine\nensate\nenscene\nensconce\nenscroll\nensculpture\nense\nenseam\nenseat\nenseem\nensellure\nensemble\nensepulcher\nensepulchre\nenseraph\nenserf\nensete\nenshade\nenshadow\nenshawl\nensheathe\nenshell\nenshelter\nenshield\nenshrine\nenshrinement\nenshroud\nEnsiferi\nensiform\nensign\nensigncy\nensignhood\nensignment\nensignry\nensignship\nensilage\nensilate\nensilation\nensile\nensilist\nensilver\nensisternum\nensky\nenslave\nenslavedness\nenslavement\nenslaver\nensmall\nensnare\nensnarement\nensnarer\nensnaring\nensnaringly\nensnarl\nensnow\nensorcelize\nensorcell\nensoul\nenspell\nensphere\nenspirit\nenstamp\nenstar\nenstate\nenstatite\nenstatitic\nenstatolite\nensteel\nenstool\nenstore\nenstrengthen\nensuable\nensuance\nensuant\nensue\nensuer\nensuingly\nensulphur\nensure\nensurer\nenswathe\nenswathement\nensweep\nentablature\nentablatured\nentablement\nentach\nentad\nEntada\nentail\nentailable\nentailer\nentailment\nental\nentame\nEntamoeba\nentamoebiasis\nentamoebic\nentangle\nentangled\nentangledly\nentangledness\nentanglement\nentangler\nentangling\nentanglingly\nentapophysial\nentapophysis\nentarthrotic\nentasia\nentasis\nentelam\nentelechy\nentellus\nEntelodon\nentelodont\nentempest\nentemple\nentente\nEntentophil\nentepicondylar\nenter\nenterable\nenteraden\nenteradenographic\nenteradenography\nenteradenological\nenteradenology\nenteral\nenteralgia\nenterate\nenterauxe\nenterclose\nenterectomy\nenterer\nentergogenic\nenteria\nenteric\nentericoid\nentering\nenteritidis\nenteritis\nentermete\nenteroanastomosis\nenterobiliary\nenterocele\nenterocentesis\nenterochirurgia\nenterochlorophyll\nenterocholecystostomy\nenterocinesia\nenterocinetic\nenterocleisis\nenteroclisis\nenteroclysis\nEnterocoela\nenterocoele\nenterocoelic\nenterocoelous\nenterocolitis\nenterocolostomy\nenterocrinin\nenterocyst\nenterocystoma\nenterodynia\nenteroepiplocele\nenterogastritis\nenterogastrone\nenterogenous\nenterogram\nenterograph\nenterography\nenterohelcosis\nenterohemorrhage\nenterohepatitis\nenterohydrocele\nenteroid\nenterointestinal\nenteroischiocele\nenterokinase\nenterokinesia\nenterokinetic\nenterolith\nenterolithiasis\nEnterolobium\nenterology\nenteromegalia\nenteromegaly\nenteromere\nenteromesenteric\nEnteromorpha\nenteromycosis\nenteromyiasis\nenteron\nenteroneuritis\nenteroparalysis\nenteroparesis\nenteropathy\nenteropexia\nenteropexy\nenterophthisis\nenteroplasty\nenteroplegia\nenteropneust\nEnteropneusta\nenteropneustan\nenteroptosis\nenteroptotic\nenterorrhagia\nenterorrhaphy\nenterorrhea\nenteroscope\nenterosepsis\nenterospasm\nenterostasis\nenterostenosis\nenterostomy\nenterosyphilis\nenterotome\nenterotomy\nenterotoxemia\nenterotoxication\nenterozoa\nenterozoan\nenterozoic\nenterprise\nenterpriseless\nenterpriser\nenterprising\nenterprisingly\nenterritoriality\nentertain\nentertainable\nentertainer\nentertaining\nentertainingly\nentertainingness\nentertainment\nenthalpy\nentheal\nenthelmintha\nenthelminthes\nenthelminthic\nenthetic\nenthral\nenthraldom\nenthrall\nenthralldom\nenthraller\nenthralling\nenthrallingly\nenthrallment\nenthralment\nenthrone\nenthronement\nenthronization\nenthronize\nenthuse\nenthusiasm\nenthusiast\nenthusiastic\nenthusiastical\nenthusiastically\nenthusiastly\nenthymematic\nenthymematical\nenthymeme\nentia\nentice\nenticeable\nenticeful\nenticement\nenticer\nenticing\nenticingly\nenticingness\nentifical\nentification\nentify\nentincture\nentire\nentirely\nentireness\nentirety\nentiris\nentitative\nentitatively\nentitle\nentitlement\nentity\nentoblast\nentoblastic\nentobranchiate\nentobronchium\nentocalcaneal\nentocarotid\nentocele\nentocnemial\nentocoele\nentocoelic\nentocondylar\nentocondyle\nentocondyloid\nentocone\nentoconid\nentocornea\nentocranial\nentocuneiform\nentocuniform\nentocyemate\nentocyst\nentoderm\nentodermal\nentodermic\nentogastric\nentogenous\nentoglossal\nentohyal\nentoil\nentoilment\nEntoloma\nentomb\nentombment\nentomere\nentomeric\nentomic\nentomical\nentomion\nentomogenous\nentomoid\nentomologic\nentomological\nentomologically\nentomologist\nentomologize\nentomology\nEntomophaga\nentomophagan\nentomophagous\nEntomophila\nentomophilous\nentomophily\nEntomophthora\nEntomophthoraceae\nentomophthoraceous\nEntomophthorales\nentomophthorous\nentomophytous\nEntomosporium\nEntomostraca\nentomostracan\nentomostracous\nentomotaxy\nentomotomist\nentomotomy\nentone\nentonement\nentoolitic\nentoparasite\nentoparasitic\nentoperipheral\nentophytal\nentophyte\nentophytic\nentophytically\nentophytous\nentopic\nentopical\nentoplasm\nentoplastic\nentoplastral\nentoplastron\nentopopliteal\nEntoprocta\nentoproctous\nentopterygoid\nentoptic\nentoptical\nentoptically\nentoptics\nentoptoscope\nentoptoscopic\nentoptoscopy\nentoretina\nentorganism\nentosarc\nentosclerite\nentosphenal\nentosphenoid\nentosphere\nentosternal\nentosternite\nentosternum\nentothorax\nentotic\nEntotrophi\nentotympanic\nentourage\nentozoa\nentozoal\nentozoan\nentozoarian\nentozoic\nentozoological\nentozoologically\nentozoologist\nentozoology\nentozoon\nentracte\nentrail\nentrails\nentrain\nentrainer\nentrainment\nentrammel\nentrance\nentrancedly\nentrancement\nentranceway\nentrancing\nentrancingly\nentrant\nentrap\nentrapment\nentrapper\nentrappingly\nentreasure\nentreat\nentreating\nentreatingly\nentreatment\nentreaty\nentree\nentremets\nentrench\nentrenchment\nentrepas\nentrepot\nentrepreneur\nentrepreneurial\nentrepreneurship\nentresol\nentrochite\nentrochus\nentropion\nentropionize\nentropium\nentropy\nentrough\nentrust\nentrustment\nentry\nentryman\nentryway\nenturret\nentwine\nentwinement\nentwist\nEntyloma\nenucleate\nenucleation\nenucleator\nEnukki\nenumerable\nenumerate\nenumeration\nenumerative\nenumerator\nenunciability\nenunciable\nenunciate\nenunciation\nenunciative\nenunciatively\nenunciator\nenunciatory\nenure\nenuresis\nenuretic\nenurny\nenvapor\nenvapour\nenvassal\nenvassalage\nenvault\nenveil\nenvelop\nenvelope\nenveloper\nenvelopment\nenvenom\nenvenomation\nenverdure\nenvermeil\nenviable\nenviableness\nenviably\nenvied\nenvier\nenvineyard\nenvious\nenviously\nenviousness\nenviron\nenvironage\nenvironal\nenvironic\nenvironment\nenvironmental\nenvironmentalism\nenvironmentalist\nenvironmentally\nenvirons\nenvisage\nenvisagement\nenvision\nenvolume\nenvoy\nenvoyship\nenvy\nenvying\nenvyingly\nenwallow\nenwiden\nenwind\nenwisen\nenwoman\nenwomb\nenwood\nenworthed\nenwound\nenwrap\nenwrapment\nenwreathe\nenwrite\nenwrought\nenzone\nenzootic\nenzooty\nenzym\nenzymatic\nenzyme\nenzymic\nenzymically\nenzymologist\nenzymology\nenzymolysis\nenzymolytic\nenzymosis\nenzymotic\neoan\nEoanthropus\nEocarboniferous\nEocene\nEodevonian\nEogaea\nEogaean\nEoghanacht\nEohippus\neolation\neolith\neolithic\nEomecon\neon\neonism\nEopalaeozoic\nEopaleozoic\neophyte\neophytic\neophyton\neorhyolite\neosate\nEosaurus\neoside\neosin\neosinate\neosinic\neosinoblast\neosinophile\neosinophilia\neosinophilic\neosinophilous\neosphorite\nEozoic\neozoon\neozoonal\nepacmaic\nepacme\nepacrid\nEpacridaceae\nepacridaceous\nEpacris\nepact\nepactal\nepagoge\nepagogic\nepagomenae\nepagomenal\nepagomenic\nepagomenous\nepaleaceous\nepalpate\nepanadiplosis\nEpanagoge\nepanalepsis\nepanaleptic\nepanaphora\nepanaphoral\nepanastrophe\nepanisognathism\nepanisognathous\nepanodos\nepanody\nEpanorthidae\nepanorthosis\nepanorthotic\nepanthous\nepapillate\nepappose\neparch\neparchate\nEparchean\neparchial\neparchy\neparcuale\neparterial\nepaule\nepaulement\nepaulet\nepauleted\nepauletted\nepauliere\nepaxial\nepaxially\nepedaphic\nepee\nepeeist\nEpeira\nepeiric\nepeirid\nEpeiridae\nepeirogenesis\nepeirogenetic\nepeirogenic\nepeirogeny\nepeisodion\nepembryonic\nepencephal\nepencephalic\nepencephalon\nependyma\nependymal\nependyme\nependymitis\nependymoma\nependytes\nepenthesis\nepenthesize\nepenthetic\nepephragmal\nepepophysial\nepepophysis\nepergne\neperotesis\nEperua\nepexegesis\nepexegetic\nepexegetical\nepexegetically\nepha\nephah\nepharmonic\nepharmony\nephebe\nephebeion\nephebeum\nephebic\nephebos\nephebus\nephectic\nEphedra\nEphedraceae\nephedrine\nephelcystic\nephelis\nEphemera\nephemera\nephemerae\nephemeral\nephemerality\nephemerally\nephemeralness\nephemeran\nephemerid\nEphemerida\nEphemeridae\nephemerides\nephemeris\nephemerist\nephemeromorph\nephemeromorphic\nephemeron\nEphemeroptera\nephemerous\nEphesian\nEphesine\nephetae\nephete\nephetic\nephialtes\nephidrosis\nephippial\nephippium\nephod\nephor\nephoral\nephoralty\nephorate\nephoric\nephorship\nephorus\nephphatha\nEphraim\nEphraimite\nEphraimitic\nEphraimitish\nEphraitic\nEphrathite\nEphthalite\nEphthianura\nephthianure\nEphydra\nephydriad\nephydrid\nEphydridae\nephymnium\nephyra\nephyrula\nepibasal\nEpibaterium\nepibatholithic\nepibenthic\nepibenthos\nepiblast\nepiblastema\nepiblastic\nepiblema\nepibole\nepibolic\nepibolism\nepiboly\nepiboulangerite\nepibranchial\nepic\nepical\nepically\nepicalyx\nepicanthic\nepicanthus\nepicardia\nepicardiac\nepicardial\nepicardium\nepicarid\nepicaridan\nEpicaridea\nEpicarides\nepicarp\nEpicauta\nepicede\nepicedial\nepicedian\nepicedium\nepicele\nepicene\nepicenism\nepicenity\nepicenter\nepicentral\nepicentrum\nEpiceratodus\nepicerebral\nepicheirema\nepichil\nepichile\nepichilium\nepichindrotic\nepichirema\nepichondrosis\nepichordal\nepichorial\nepichoric\nepichorion\nepichoristic\nEpichristian\nepicism\nepicist\nepiclastic\nepicleidian\nepicleidium\nepiclesis\nepiclidal\nepiclinal\nepicly\nepicnemial\nEpicoela\nepicoelar\nepicoele\nepicoelia\nepicoeliac\nepicoelian\nepicoeloma\nepicoelous\nepicolic\nepicondylar\nepicondyle\nepicondylian\nepicondylic\nepicontinental\nepicoracohumeral\nepicoracoid\nepicoracoidal\nepicormic\nepicorolline\nepicortical\nepicostal\nepicotyl\nepicotyleal\nepicotyledonary\nepicranial\nepicranium\nepicranius\nEpicrates\nepicrisis\nepicritic\nepicrystalline\nEpictetian\nepicure\nEpicurean\nEpicureanism\nepicurish\nepicurishly\nEpicurism\nEpicurize\nepicycle\nepicyclic\nepicyclical\nepicycloid\nepicycloidal\nepicyemate\nepicyesis\nepicystotomy\nepicyte\nepideictic\nepideictical\nepideistic\nepidemic\nepidemical\nepidemically\nepidemicalness\nepidemicity\nepidemiographist\nepidemiography\nepidemiological\nepidemiologist\nepidemiology\nepidemy\nepidendral\nepidendric\nEpidendron\nEpidendrum\nepiderm\nepiderma\nepidermal\nepidermatic\nepidermatoid\nepidermatous\nepidermic\nepidermical\nepidermically\nepidermidalization\nepidermis\nepidermization\nepidermoid\nepidermoidal\nepidermolysis\nepidermomycosis\nEpidermophyton\nepidermophytosis\nepidermose\nepidermous\nepidesmine\nepidialogue\nepidiascope\nepidiascopic\nepidictic\nepidictical\nepididymal\nepididymectomy\nepididymis\nepididymite\nepididymitis\nepididymodeferentectomy\nepididymodeferential\nepididymovasostomy\nepidiorite\nepidiorthosis\nepidosite\nepidote\nepidotic\nepidotiferous\nepidotization\nepidural\nepidymides\nepifascial\nepifocal\nepifolliculitis\nEpigaea\nepigamic\nepigaster\nepigastraeum\nepigastral\nepigastrial\nepigastric\nepigastrical\nepigastriocele\nepigastrium\nepigastrocele\nepigeal\nepigean\nepigeic\nepigene\nepigenesis\nepigenesist\nepigenetic\nepigenetically\nepigenic\nepigenist\nepigenous\nepigeous\nepiglottal\nepiglottic\nepiglottidean\nepiglottiditis\nepiglottis\nepiglottitis\nepignathous\nepigonal\nepigonation\nepigone\nEpigoni\nepigonic\nEpigonichthyidae\nEpigonichthys\nepigonium\nepigonos\nepigonous\nEpigonus\nepigram\nepigrammatic\nepigrammatical\nepigrammatically\nepigrammatism\nepigrammatist\nepigrammatize\nepigrammatizer\nepigraph\nepigrapher\nepigraphic\nepigraphical\nepigraphically\nepigraphist\nepigraphy\nepiguanine\nepigyne\nepigynous\nepigynum\nepigyny\nEpihippus\nepihyal\nepihydric\nepihydrinic\nepikeia\nepiklesis\nEpikouros\nepilabrum\nEpilachna\nEpilachnides\nepilamellar\nepilaryngeal\nepilate\nepilation\nepilatory\nepilegomenon\nepilemma\nepilemmal\nepilepsy\nepileptic\nepileptically\nepileptiform\nepileptogenic\nepileptogenous\nepileptoid\nepileptologist\nepileptology\nepilimnion\nepilobe\nEpilobiaceae\nEpilobium\nepilogation\nepilogic\nepilogical\nepilogist\nepilogistic\nepilogize\nepilogue\nEpimachinae\nepimacus\nepimandibular\nepimanikia\nEpimedium\nEpimenidean\nepimer\nepimeral\nepimere\nepimeric\nepimeride\nepimerite\nepimeritic\nepimeron\nepimerum\nepimorphic\nepimorphosis\nepimysium\nepimyth\nepinaos\nepinastic\nepinastically\nepinasty\nepineolithic\nEpinephelidae\nEpinephelus\nepinephrine\nepinette\nepineural\nepineurial\nepineurium\nepinglette\nepinicial\nepinician\nepinicion\nepinine\nepiopticon\nepiotic\nEpipactis\nepipaleolithic\nepiparasite\nepiparodos\nepipastic\nepiperipheral\nepipetalous\nepiphanous\nEpiphany\nepipharyngeal\nepipharynx\nEpiphegus\nepiphenomenal\nepiphenomenalism\nepiphenomenalist\nepiphenomenon\nepiphloedal\nepiphloedic\nepiphloeum\nepiphonema\nepiphora\nepiphragm\nepiphylline\nepiphyllous\nEpiphyllum\nepiphysary\nepiphyseal\nepiphyseolysis\nepiphysial\nepiphysis\nepiphysitis\nepiphytal\nepiphyte\nepiphytic\nepiphytical\nepiphytically\nepiphytism\nepiphytology\nepiphytotic\nepiphytous\nepipial\nepiplankton\nepiplanktonic\nepiplasm\nepiplasmic\nepiplastral\nepiplastron\nepiplectic\nepipleura\nepipleural\nepiplexis\nepiploce\nepiplocele\nepiploic\nepiploitis\nepiploon\nepiplopexy\nepipodial\nepipodiale\nepipodite\nepipoditic\nepipodium\nepipolic\nepipolism\nepipolize\nepiprecoracoid\nEpipsychidion\nepipteric\nepipterous\nepipterygoid\nepipubic\nepipubis\nepirhizous\nepirogenic\nepirogeny\nEpirote\nEpirotic\nepirotulian\nepirrhema\nepirrhematic\nepirrheme\nepisarcine\nepiscenium\nepisclera\nepiscleral\nepiscleritis\nepiscopable\nepiscopacy\nEpiscopal\nepiscopal\nepiscopalian\nEpiscopalianism\nEpiscopalianize\nepiscopalism\nepiscopality\nEpiscopally\nepiscopally\nepiscopate\nepiscopature\nepiscope\nepiscopicide\nepiscopization\nepiscopize\nepiscopolatry\nepiscotister\nepisematic\nepisepalous\nepisiocele\nepisiohematoma\nepisioplasty\nepisiorrhagia\nepisiorrhaphy\nepisiostenosis\nepisiotomy\nepiskeletal\nepiskotister\nepisodal\nepisode\nepisodial\nepisodic\nepisodical\nepisodically\nepispadiac\nepispadias\nepispastic\nepisperm\nepispermic\nepispinal\nepisplenitis\nepisporangium\nepispore\nepisporium\nepistapedial\nepistasis\nepistatic\nepistaxis\nepistemic\nepistemolog\nepistemological\nepistemologically\nepistemologist\nepistemology\nepistemonic\nepistemonical\nepistemophilia\nepistemophiliac\nepistemophilic\nepisternal\nepisternalia\nepisternite\nepisternum\nepistilbite\nepistlar\nepistle\nepistler\nepistolarian\nepistolarily\nepistolary\nepistolatory\nepistoler\nepistolet\nepistolic\nepistolical\nepistolist\nepistolizable\nepistolization\nepistolize\nepistolizer\nepistolographer\nepistolographic\nepistolographist\nepistolography\nepistoma\nepistomal\nepistome\nepistomian\nepistroma\nepistrophe\nepistropheal\nepistropheus\nepistrophic\nepistrophy\nepistylar\nepistyle\nEpistylis\nepisyllogism\nepisynaloephe\nepisynthetic\nepisyntheton\nepitactic\nepitaph\nepitapher\nepitaphial\nepitaphian\nepitaphic\nepitaphical\nepitaphist\nepitaphize\nepitaphless\nepitasis\nepitela\nepitendineum\nepitenon\nepithalamia\nepithalamial\nepithalamiast\nepithalamic\nepithalamion\nepithalamium\nepithalamize\nepithalamus\nepithalamy\nepithalline\nepitheca\nepithecal\nepithecate\nepithecium\nepithelia\nepithelial\nepithelioblastoma\nepithelioceptor\nepitheliogenetic\nepithelioglandular\nepithelioid\nepitheliolysin\nepitheliolysis\nepitheliolytic\nepithelioma\nepitheliomatous\nepitheliomuscular\nepitheliosis\nepitheliotoxin\nepithelium\nepithelization\nepithelize\nepitheloid\nepithem\nepithesis\nepithet\nepithetic\nepithetical\nepithetically\nepithetician\nepithetize\nepitheton\nepithumetic\nepithyme\nepithymetic\nepithymetical\nepitimesis\nepitoke\nepitomator\nepitomatory\nepitome\nepitomic\nepitomical\nepitomically\nepitomist\nepitomization\nepitomize\nepitomizer\nepitonic\nEpitoniidae\nepitonion\nEpitonium\nepitoxoid\nepitrachelion\nepitrichial\nepitrichium\nepitrite\nepitritic\nepitrochlea\nepitrochlear\nepitrochoid\nepitrochoidal\nepitrope\nepitrophic\nepitrophy\nepituberculosis\nepituberculous\nepitympanic\nepitympanum\nepityphlitis\nepityphlon\nepiural\nepivalve\nepixylous\nepizeuxis\nEpizoa\nepizoa\nepizoal\nepizoan\nepizoarian\nepizoic\nepizoicide\nepizoon\nepizootic\nepizootiology\nepoch\nepocha\nepochal\nepochally\nepochism\nepochist\nepode\nepodic\nepollicate\nEpomophorus\neponychium\neponym\neponymic\neponymism\neponymist\neponymize\neponymous\neponymus\neponymy\nepoophoron\nepopee\nepopoean\nepopoeia\nepopoeist\nepopt\nepoptes\nepoptic\nepoptist\nepornitic\nepornitically\nepos\nEppie\nEppy\nEproboscidea\nepruinose\nepsilon\nEpsom\nepsomite\nEptatretidae\nEptatretus\nepulary\nepulation\nepulis\nepulo\nepuloid\nepulosis\nepulotic\nepupillate\nepural\nepurate\nepuration\nepyllion\nequability\nequable\nequableness\nequably\nequaeval\nequal\nequalable\nequaling\nequalist\nequalitarian\nequalitarianism\nequality\nequalization\nequalize\nequalizer\nequalizing\nequalling\nequally\nequalness\nequangular\nequanimity\nequanimous\nequanimously\nequanimousness\nequant\nequatable\nequate\nequation\nequational\nequationally\nequationism\nequationist\nequator\nequatorial\nequatorially\nequatorward\nequatorwards\nequerry\nequerryship\nequestrial\nequestrian\nequestrianism\nequestrianize\nequestrianship\nequestrienne\nequianchorate\nequiangle\nequiangular\nequiangularity\nequianharmonic\nequiarticulate\nequiatomic\nequiaxed\nequiaxial\nequibalance\nequibiradiate\nequicellular\nequichangeable\nequicohesive\nequiconvex\nequicostate\nequicrural\nequicurve\nequid\nequidense\nequidensity\nequidiagonal\nequidifferent\nequidimensional\nequidistance\nequidistant\nequidistantial\nequidistantly\nequidistribution\nequidiurnal\nequidivision\nequidominant\nequidurable\nequielliptical\nequiexcellency\nequiform\nequiformal\nequiformity\nequiglacial\nequigranular\nequijacent\nequilateral\nequilaterally\nequilibrant\nequilibrate\nequilibration\nequilibrative\nequilibrator\nequilibratory\nequilibria\nequilibrial\nequilibriate\nequilibrio\nequilibrious\nequilibrist\nequilibristat\nequilibristic\nequilibrity\nequilibrium\nequilibrize\nequilobate\nequilobed\nequilocation\nequilucent\nequimodal\nequimolar\nequimolecular\nequimomental\nequimultiple\nequinate\nequine\nequinecessary\nequinely\nequinia\nequinity\nequinoctial\nequinoctially\nequinovarus\nequinox\nequinumerally\nequinus\nequiomnipotent\nequip\nequipaga\nequipage\nequiparant\nequiparate\nequiparation\nequipartile\nequipartisan\nequipartition\nequiped\nequipedal\nequiperiodic\nequipluve\nequipment\nequipoise\nequipollence\nequipollency\nequipollent\nequipollently\nequipollentness\nequiponderance\nequiponderancy\nequiponderant\nequiponderate\nequiponderation\nequipostile\nequipotent\nequipotential\nequipotentiality\nequipper\nequiprobabilism\nequiprobabilist\nequiprobability\nequiproducing\nequiproportional\nequiproportionality\nequiradial\nequiradiate\nequiradical\nequirotal\nequisegmented\nEquisetaceae\nequisetaceous\nEquisetales\nequisetic\nEquisetum\nequisided\nequisignal\nequisized\nequison\nequisonance\nequisonant\nequispaced\nequispatial\nequisufficiency\nequisurface\nequitable\nequitableness\nequitably\nequitangential\nequitant\nequitation\nequitative\nequitemporal\nequitemporaneous\nequites\nequitist\nequitriangular\nequity\nequivalence\nequivalenced\nequivalency\nequivalent\nequivalently\nequivaliant\nequivalue\nequivaluer\nequivalve\nequivalved\nequivalvular\nequivelocity\nequivocacy\nequivocal\nequivocality\nequivocally\nequivocalness\nequivocate\nequivocatingly\nequivocation\nequivocator\nequivocatory\nequivoluminal\nequivoque\nequivorous\nequivote\nequoid\nequoidean\nequuleus\nEquus\ner\nera\nerade\neradiate\neradiation\neradicable\neradicant\neradicate\neradication\neradicative\neradicator\neradicatory\neradiculose\nEragrostis\neral\neranist\nEranthemum\nEranthis\nerasable\nerase\nerased\nerasement\neraser\nerasion\nErasmian\nErasmus\nErastian\nErastianism\nErastianize\nErastus\nerasure\nErava\nerbia\nerbium\nerd\nerdvark\nere\nErechtheum\nErechtheus\nErechtites\nerect\nerectable\nerecter\nerectile\nerectility\nerecting\nerection\nerective\nerectly\nerectness\nerectopatent\nerector\nerelong\neremacausis\nEremian\neremic\neremital\neremite\neremiteship\neremitic\neremitical\neremitish\neremitism\nEremochaeta\neremochaetous\neremology\neremophyte\nEremopteris\nEremurus\nerenach\nerenow\nerepsin\nerept\nereptase\nereptic\nereption\nerethic\nerethisia\nerethism\nerethismic\nerethistic\nerethitic\nErethizon\nErethizontidae\nEretrian\nerewhile\nerewhiles\nerg\nergal\nergamine\nErgane\nergasia\nergasterion\nergastic\nergastoplasm\nergastoplasmic\nergastulum\nergatandromorph\nergatandromorphic\nergatandrous\nergatandry\nergates\nergatocracy\nergatocrat\nergatogyne\nergatogynous\nergatogyny\nergatoid\nergatomorph\nergatomorphic\nergatomorphism\nergmeter\nergodic\nergogram\nergograph\nergographic\nergoism\nergology\nergomaniac\nergometer\nergometric\nergometrine\nergon\nergonovine\nergophile\nergophobia\nergophobiac\nergoplasm\nergostat\nergosterin\nergosterol\nergot\nergotamine\nergotaminine\nergoted\nergothioneine\nergotic\nergotin\nergotinine\nergotism\nergotist\nergotization\nergotize\nergotoxin\nergotoxine\nergusia\neria\nErian\nErianthus\nEric\neric\nErica\nEricaceae\nericaceous\nericad\nerical\nEricales\nericetal\nericeticolous\nericetum\nerichthus\nerichtoid\nericineous\nericius\nErick\nericoid\nericolin\nericophyte\nEridanid\nErie\nErigenia\nErigeron\nerigible\nEriglossa\neriglossate\nErik\nerika\nerikite\nErinaceidae\nerinaceous\nErinaceus\nerineum\nerinite\nErinize\nerinose\nEriobotrya\nEriocaulaceae\neriocaulaceous\nEriocaulon\nEriocomi\nEriodendron\nEriodictyon\nerioglaucine\nEriogonum\neriometer\nerionite\nEriophorum\nEriophyes\nEriophyidae\neriophyllous\nEriosoma\nEriphyle\nEristalis\neristic\neristical\neristically\nErithacus\nEritrean\nerizo\nerlking\nErma\nErmanaric\nErmani\nErmanrich\nermelin\nermine\nermined\nerminee\nermines\nerminites\nerminois\nerne\nErnest\nErnestine\nErnie\nErnst\nerode\neroded\nerodent\nerodible\nErodium\nerogeneity\nerogenesis\nerogenetic\nerogenic\nerogenous\nerogeny\nEros\neros\nerose\nerosely\nerosible\nerosion\nerosional\nerosionist\nerosive\nerostrate\neroteme\nerotesis\nerotetic\nerotic\nerotica\nerotical\nerotically\neroticism\neroticize\neroticomania\nerotism\nerotogenesis\nerotogenetic\nerotogenic\nerotogenicity\nerotomania\nerotomaniac\nerotopath\nerotopathic\nerotopathy\nErotylidae\nErpetoichthys\nerpetologist\nerr\nerrability\nerrable\nerrableness\nerrabund\nerrancy\nerrand\nerrant\nErrantia\nerrantly\nerrantness\nerrantry\nerrata\nerratic\nerratical\nerratically\nerraticalness\nerraticism\nerraticness\nerratum\nerrhine\nerring\nerringly\nerrite\nerroneous\nerroneously\nerroneousness\nerror\nerrorful\nerrorist\nerrorless\ners\nErsar\nersatz\nErse\nErtebolle\nerth\nerthen\nerthling\nerthly\nerubescence\nerubescent\nerubescite\neruc\nEruca\neruca\nerucic\neruciform\nerucin\nerucivorous\neruct\neructance\neructation\neructative\neruction\nerudit\nerudite\neruditely\neruditeness\neruditical\nerudition\neruditional\neruditionist\nerugate\nerugation\nerugatory\nerumpent\nerupt\neruption\neruptional\neruptive\neruptively\neruptiveness\neruptivity\nervenholder\nErvipiame\nErvum\nErwin\nErwinia\neryhtrism\nErymanthian\nEryngium\neryngo\nEryon\nEryops\nErysibe\nErysimum\nerysipelas\nerysipelatoid\nerysipelatous\nerysipeloid\nErysipelothrix\nerysipelous\nErysiphaceae\nErysiphe\nErythea\nerythema\nerythematic\nerythematous\nerythemic\nErythraea\nErythraean\nErythraeidae\nerythrasma\nerythrean\nerythremia\nerythremomelalgia\nerythrene\nerythrin\nErythrina\nerythrine\nErythrinidae\nErythrinus\nerythrismal\nerythristic\nerythrite\nerythritic\nerythritol\nerythroblast\nerythroblastic\nerythroblastosis\nerythrocarpous\nerythrocatalysis\nErythrochaete\nerythrochroic\nerythrochroism\nerythroclasis\nerythroclastic\nerythrocyte\nerythrocytic\nerythrocytoblast\nerythrocytolysin\nerythrocytolysis\nerythrocytolytic\nerythrocytometer\nerythrocytorrhexis\nerythrocytoschisis\nerythrocytosis\nerythrodegenerative\nerythrodermia\nerythrodextrin\nerythrogenesis\nerythrogenic\nerythroglucin\nerythrogonium\nerythroid\nerythrol\nerythrolein\nerythrolitmin\nerythrolysin\nerythrolysis\nerythrolytic\nerythromelalgia\nerythron\nerythroneocytosis\nErythronium\nerythronium\nerythropenia\nerythrophage\nerythrophagous\nerythrophilous\nerythrophleine\nerythrophobia\nerythrophore\nerythrophyll\nerythrophyllin\nerythropia\nerythroplastid\nerythropoiesis\nerythropoietic\nerythropsia\nerythropsin\nerythrorrhexis\nerythroscope\nerythrose\nerythrosiderite\nerythrosin\nerythrosinophile\nerythrosis\nErythroxylaceae\nerythroxylaceous\nerythroxyline\nErythroxylon\nErythroxylum\nerythrozincite\nerythrozyme\nerythrulose\nEryx\nes\nesca\nescadrille\nescalade\nescalader\nescalado\nescalan\nescalate\nEscalator\nescalator\nescalin\nEscallonia\nEscalloniaceae\nescalloniaceous\nescalop\nescaloped\nescambio\nescambron\nescapable\nescapade\nescapage\nescape\nescapee\nescapeful\nescapeless\nescapement\nescaper\nescapingly\nescapism\nescapist\nescarbuncle\nescargatoire\nescarole\nescarp\nescarpment\neschalot\neschar\neschara\nescharine\nescharoid\nescharotic\neschatocol\neschatological\neschatologist\neschatology\nescheat\nescheatable\nescheatage\nescheatment\nescheator\nescheatorship\nEscherichia\neschew\neschewal\neschewance\neschewer\nEschscholtzia\neschynite\nesclavage\nescoba\nescobadura\nescobilla\nescobita\nescolar\nesconson\nescopette\nEscorial\nescort\nescortage\nescortee\nescortment\nescribe\nescritoire\nescritorial\nescrol\nescropulo\nescrow\nescruage\nescudo\nEsculapian\nesculent\nesculetin\nesculin\nescutcheon\nescutcheoned\nescutellate\nesdragol\nEsdras\nEsebrias\nesemplastic\nesemplasy\neseptate\nesere\neserine\nesexual\neshin\nesiphonal\nesker\nEskimauan\nEskimo\nEskimoic\nEskimoid\nEskimoized\nEskualdun\nEskuara\nEsmeralda\nEsmeraldan\nesmeraldite\nesne\nesoanhydride\nesocataphoria\nEsocidae\nesociform\nesocyclic\nesodic\nesoenteritis\nesoethmoiditis\nesogastritis\nesonarthex\nesoneural\nesophagal\nesophagalgia\nesophageal\nesophagean\nesophagectasia\nesophagectomy\nesophagi\nesophagism\nesophagismus\nesophagitis\nesophago\nesophagocele\nesophagodynia\nesophagogastroscopy\nesophagogastrostomy\nesophagomalacia\nesophagometer\nesophagomycosis\nesophagopathy\nesophagoplasty\nesophagoplegia\nesophagoplication\nesophagoptosis\nesophagorrhagia\nesophagoscope\nesophagoscopy\nesophagospasm\nesophagostenosis\nesophagostomy\nesophagotome\nesophagotomy\nesophagus\nesophoria\nesophoric\nEsopus\nesoteric\nesoterica\nesoterical\nesoterically\nesotericism\nesotericist\nesoterics\nesoterism\nesoterist\nesoterize\nesotery\nesothyropexy\nesotrope\nesotropia\nesotropic\nEsox\nespacement\nespadon\nespalier\nespantoon\nesparcet\nesparsette\nesparto\nespathate\nespave\nespecial\nespecially\nespecialness\nesperance\nEsperantic\nEsperantidist\nEsperantido\nEsperantism\nEsperantist\nEsperanto\nespial\nespichellite\nespier\nespinal\nespingole\nespinillo\nespino\nespionage\nesplanade\nesplees\nesponton\nespousal\nespouse\nespousement\nespouser\nEspriella\nespringal\nespundia\nespy\nesquamate\nesquamulose\nEsquiline\nesquire\nesquirearchy\nesquiredom\nesquireship\ness\nessang\nessay\nessayer\nessayette\nessayical\nessayish\nessayism\nessayist\nessayistic\nessayistical\nessaylet\nessed\nEssedones\nEsselen\nEsselenian\nessence\nessency\nEssene\nEssenian\nEssenianism\nEssenic\nEssenical\nEssenis\nEssenism\nEssenize\nessentia\nessential\nessentialism\nessentialist\nessentiality\nessentialize\nessentially\nessentialness\nessenwood\nEssex\nessexite\nEssie\nessling\nessoin\nessoinee\nessoiner\nessoinment\nessonite\nessorant\nestablish\nestablishable\nestablished\nestablisher\nestablishment\nestablishmentarian\nestablishmentarianism\nestablishmentism\nestacade\nestadal\nestadio\nestado\nestafette\nestafetted\nestamene\nestamp\nestampage\nestampede\nestampedero\nestate\nestatesman\nesteem\nesteemable\nesteemer\nEstella\nester\nesterase\nesterellite\nesteriferous\nesterification\nesterify\nesterization\nesterize\nesterlin\nesterling\nestevin\nEsth\nEsthacyte\nesthematology\nEsther\nEstheria\nestherian\nEstheriidae\nesthesia\nesthesio\nesthesioblast\nesthesiogen\nesthesiogenic\nesthesiogeny\nesthesiography\nesthesiology\nesthesiometer\nesthesiometric\nesthesiometry\nesthesioneurosis\nesthesiophysiology\nesthesis\nesthetology\nesthetophore\nesthiomene\nestimable\nestimableness\nestimably\nestimate\nestimatingly\nestimation\nestimative\nestimator\nestipulate\nestivage\nestival\nestivate\nestivation\nestivator\nestmark\nestoc\nestoile\nEstonian\nestop\nestoppage\nestoppel\nEstotiland\nestovers\nestrade\nestradiol\nestradiot\nestragole\nestrange\nestrangedness\nestrangement\nestranger\nestrapade\nestray\nestre\nestreat\nestrepe\nestrepement\nestriate\nestriche\nestrin\nestriol\nestrogen\nestrogenic\nestrone\nestrous\nestrual\nestruate\nestruation\nestuarial\nestuarine\nestuary\nestufa\nestuous\nestus\nesugarization\nesurience\nesurient\nesuriently\neta\netaballi\netacism\netacist\netalon\nEtamin\netamine\netch\nEtchareottine\netcher\nEtchimin\netching\nEteoclus\nEteocretes\nEteocreton\neternal\neternalism\neternalist\neternalization\neternalize\neternally\neternalness\neternity\neternization\neternize\netesian\nethal\nethaldehyde\nEthan\nethanal\nethanamide\nethane\nethanedial\nethanediol\nethanedithiol\nethanethial\nethanethiol\nEthanim\nethanol\nethanolamine\nethanolysis\nethanoyl\nEthel\nethel\nethene\nEtheneldeli\nethenic\nethenoid\nethenoidal\nethenol\nethenyl\nEtheostoma\nEtheostomidae\nEtheostominae\netheostomoid\nether\netherate\nethereal\netherealism\nethereality\netherealization\netherealize\nethereally\netherealness\netherean\nethered\nethereous\nEtheria\netheric\netherification\netheriform\netherify\nEtheriidae\netherin\netherion\netherism\netherization\netherize\netherizer\netherolate\netherous\nethic\nethical\nethicalism\nethicality\nethically\nethicalness\nethician\nethicism\nethicist\nethicize\nethicoaesthetic\nethicophysical\nethicopolitical\nethicoreligious\nethicosocial\nethics\nethid\nethide\nethidene\nethine\nethiodide\nethionic\nEthiop\nEthiopia\nEthiopian\nEthiopic\nethiops\nethmofrontal\nethmoid\nethmoidal\nethmoiditis\nethmolachrymal\nethmolith\nethmomaxillary\nethmonasal\nethmopalatal\nethmopalatine\nethmophysal\nethmopresphenoidal\nethmosphenoid\nethmosphenoidal\nethmoturbinal\nethmoturbinate\nethmovomer\nethmovomerine\nethmyphitis\nethnal\nethnarch\nethnarchy\nethnic\nethnical\nethnically\nethnicism\nethnicist\nethnicize\nethnicon\nethnize\nethnobiological\nethnobiology\nethnobotanic\nethnobotanical\nethnobotanist\nethnobotany\nethnocentric\nethnocentrism\nethnocracy\nethnodicy\nethnoflora\nethnogenic\nethnogeny\nethnogeographer\nethnogeographic\nethnogeographical\nethnogeographically\nethnogeography\nethnographer\nethnographic\nethnographical\nethnographically\nethnographist\nethnography\nethnologer\nethnologic\nethnological\nethnologically\nethnologist\nethnology\nethnomaniac\nethnopsychic\nethnopsychological\nethnopsychology\nethnos\nethnotechnics\nethnotechnography\nethnozoological\nethnozoology\nethography\netholide\nethologic\nethological\nethology\nethonomic\nethonomics\nethopoeia\nethos\nethoxide\nethoxycaffeine\nethoxyl\nethrog\nethyl\nethylamide\nethylamine\nethylate\nethylation\nethylene\nethylenediamine\nethylenic\nethylenimine\nethylenoid\nethylhydrocupreine\nethylic\nethylidene\nethylidyne\nethylin\nethylmorphine\nethylsulphuric\nethyne\nethynyl\netiogenic\netiolate\netiolation\netiolin\netiolize\netiological\netiologically\netiologist\netiologue\netiology\netiophyllin\netioporphyrin\netiotropic\netiotropically\netiquette\netiquettical\netna\nEtnean\nEtonian\nEtrurian\nEtruscan\nEtruscologist\nEtruscology\nEtta\nEttarre\nettle\netua\netude\netui\netym\netymic\netymography\netymologer\netymologic\netymological\netymologically\netymologicon\netymologist\netymologization\netymologize\netymology\netymon\netymonic\netypic\netypical\netypically\neu\nEuahlayi\neuangiotic\nEuascomycetes\neuaster\nEubacteriales\neubacterium\nEubasidii\nEuboean\nEuboic\nEubranchipus\neucaine\neucairite\neucalypt\neucalypteol\neucalyptian\neucalyptic\neucalyptography\neucalyptol\neucalyptole\nEucalyptus\neucalyptus\nEucarida\neucatropine\neucephalous\nEucharis\nEucharist\neucharistial\neucharistic\neucharistical\nEucharistically\neucharistically\neucharistize\nEucharitidae\nEuchite\nEuchlaena\neuchlorhydria\neuchloric\neuchlorine\nEuchlorophyceae\neuchological\neuchologion\neuchology\nEuchorda\neuchre\neuchred\neuchroic\neuchroite\neuchromatic\neuchromatin\neuchrome\neuchromosome\neuchrone\nEucirripedia\neuclase\nEuclea\nEucleidae\nEuclid\nEuclidean\nEuclideanism\nEucnemidae\neucolite\nEucommia\nEucommiaceae\neucone\neuconic\nEuconjugatae\nEucopepoda\nEucosia\neucosmid\nEucosmidae\neucrasia\neucrasite\neucrasy\neucrite\nEucryphia\nEucryphiaceae\neucryphiaceous\neucryptite\neucrystalline\neuctical\neucyclic\neudaemon\neudaemonia\neudaemonic\neudaemonical\neudaemonics\neudaemonism\neudaemonist\neudaemonistic\neudaemonistical\neudaemonistically\neudaemonize\neudaemony\neudaimonia\neudaimonism\neudaimonist\nEudemian\nEudendrium\nEudeve\neudiagnostic\neudialyte\neudiaphoresis\neudidymite\neudiometer\neudiometric\neudiometrical\neudiometrically\neudiometry\neudipleural\nEudist\nEudora\nEudorina\nEudoxian\nEudromias\nEudyptes\nEuergetes\neuge\nEugene\neugenesic\neugenesis\neugenetic\nEugenia\neugenic\neugenical\neugenically\neugenicist\neugenics\nEugenie\neugenism\neugenist\neugenol\neugenolate\neugeny\nEuglandina\nEuglena\nEuglenaceae\nEuglenales\nEuglenida\nEuglenidae\nEuglenineae\neuglenoid\nEuglenoidina\neuglobulin\neugranitic\nEugregarinida\nEugubine\nEugubium\neuharmonic\neuhedral\neuhemerism\neuhemerist\neuhemeristic\neuhemeristically\neuhemerize\neuhyostylic\neuhyostyly\neuktolite\neulachon\nEulalia\neulalia\neulamellibranch\nEulamellibranchia\nEulamellibranchiata\nEulima\nEulimidae\neulogia\neulogic\neulogical\neulogically\neulogious\neulogism\neulogist\neulogistic\neulogistical\neulogistically\neulogium\neulogization\neulogize\neulogizer\neulogy\neulysite\neulytine\neulytite\nEumenes\neumenid\nEumenidae\nEumenidean\nEumenides\neumenorrhea\neumerism\neumeristic\neumerogenesis\neumerogenetic\neumeromorph\neumeromorphic\neumitosis\neumitotic\neumoiriety\neumoirous\nEumolpides\nEumolpus\neumorphous\neumycete\nEumycetes\neumycetic\nEunectes\nEunice\neunicid\nEunicidae\nEunomia\nEunomian\nEunomianism\neunomy\neunuch\neunuchal\neunuchism\neunuchize\neunuchoid\neunuchoidism\neunuchry\neuomphalid\nEuomphalus\neuonym\neuonymin\neuonymous\nEuonymus\neuonymy\nEuornithes\neuornithic\nEuorthoptera\neuosmite\neuouae\neupad\nEupanorthidae\nEupanorthus\neupathy\neupatoriaceous\neupatorin\nEupatorium\neupatory\neupatrid\neupatridae\neupepsia\neupepsy\neupeptic\neupepticism\neupepticity\nEuphausia\nEuphausiacea\neuphausiid\nEuphausiidae\nEuphemia\neuphemian\neuphemious\neuphemiously\neuphemism\neuphemist\neuphemistic\neuphemistical\neuphemistically\neuphemize\neuphemizer\neuphemous\neuphemy\neuphon\neuphone\neuphonetic\neuphonetics\neuphonia\neuphonic\neuphonical\neuphonically\neuphonicalness\neuphonious\neuphoniously\neuphoniousness\neuphonism\neuphonium\neuphonize\neuphonon\neuphonous\neuphony\neuphonym\nEuphorbia\nEuphorbiaceae\neuphorbiaceous\neuphorbium\neuphoria\neuphoric\neuphory\nEuphrasia\neuphrasy\nEuphratean\neuphroe\nEuphrosyne\nEuphues\neuphuism\neuphuist\neuphuistic\neuphuistical\neuphuistically\neuphuize\nEuphyllopoda\neupione\neupittonic\neuplastic\nEuplectella\nEuplexoptera\nEuplocomi\nEuploeinae\neuploid\neuploidy\neupnea\nEupolidean\nEupolyzoa\neupolyzoan\nEupomatia\nEupomatiaceae\neupractic\neupraxia\nEuprepia\nEuproctis\neupsychics\nEuptelea\nEupterotidae\neupyrchroite\neupyrene\neupyrion\nEurafric\nEurafrican\nEuraquilo\nEurasian\nEurasianism\nEurasiatic\neureka\neurhodine\neurhodol\nEurindic\nEuripidean\neuripus\neurite\nEuroaquilo\neurobin\nEuroclydon\nEuropa\nEuropasian\nEuropean\nEuropeanism\nEuropeanization\nEuropeanize\nEuropeanly\nEuropeward\neuropium\nEuropocentric\nEurus\nEuryalae\nEuryale\nEuryaleae\neuryalean\nEuryalida\neuryalidan\nEuryalus\neurybathic\neurybenthic\neurycephalic\neurycephalous\nEurycerotidae\nEuryclea\nEurydice\nEurygaea\nEurygaean\neurygnathic\neurygnathism\neurygnathous\neuryhaline\nEurylaimi\nEurylaimidae\neurylaimoid\nEurylaimus\nEurymus\neuryon\nEurypelma\nEurypharyngidae\nEurypharynx\neuryprognathous\neuryprosopic\neurypterid\nEurypterida\neurypteroid\nEurypteroidea\nEurypterus\nEurypyga\nEurypygae\nEurypygidae\neurypylous\neuryscope\nEurystheus\neurystomatous\neurythermal\neurythermic\neurythmic\neurythmical\neurythmics\neurythmy\neurytomid\nEurytomidae\nEurytus\neuryzygous\nEuscaro\nEusebian\nEuselachii\nEuskaldun\nEuskara\nEuskarian\nEuskaric\nEuskera\neusol\nEuspongia\neusporangiate\nEustace\nEustachian\neustachium\nEustathian\neustatic\nEusthenopteron\neustomatous\neustyle\nEusuchia\neusuchian\neusynchite\nEutaenia\neutannin\neutaxic\neutaxite\neutaxitic\neutaxy\neutechnic\neutechnics\neutectic\neutectoid\nEuterpe\nEuterpean\neutexia\nEuthamia\neuthanasia\neuthanasy\neuthenics\neuthenist\nEutheria\neutherian\neuthermic\nEuthycomi\neuthycomic\nEuthyneura\neuthyneural\neuthyneurous\neuthytatic\neuthytropic\neutomous\neutony\nEutopia\nEutopian\neutrophic\neutrophy\neutropic\neutropous\nEutychian\nEutychianism\neuxanthate\neuxanthic\neuxanthone\neuxenite\nEuxine\nEva\nevacuant\nevacuate\nevacuation\nevacuative\nevacuator\nevacue\nevacuee\nevadable\nevade\nevader\nevadingly\nEvadne\nevagation\nevaginable\nevaginate\nevagination\nevaluable\nevaluate\nevaluation\nevaluative\nevalue\nEvan\nevanesce\nevanescence\nevanescency\nevanescent\nevanescently\nevanescible\nevangel\nevangelary\nevangelian\nevangeliarium\nevangeliary\nevangelical\nevangelicalism\nevangelicality\nevangelically\nevangelicalness\nevangelican\nevangelicism\nevangelicity\nEvangeline\nevangelion\nevangelism\nevangelist\nevangelistarion\nevangelistarium\nevangelistary\nevangelistic\nevangelistically\nevangelistics\nevangelistship\nevangelium\nevangelization\nevangelize\nevangelizer\nEvaniidae\nevanish\nevanishment\nevanition\nevansite\nevaporability\nevaporable\nevaporate\nevaporation\nevaporative\nevaporativity\nevaporator\nevaporimeter\nevaporize\nevaporometer\nevase\nevasible\nevasion\nevasional\nevasive\nevasively\nevasiveness\nEve\neve\nEvea\nevechurr\nevection\nevectional\nEvehood\nevejar\nEveless\nevelight\nEvelina\nEveline\nevelong\nEvelyn\neven\nevenblush\nevendown\nevener\nevenfall\nevenforth\nevenglow\nevenhanded\nevenhandedly\nevenhandedness\nevening\nevenlight\nevenlong\nevenly\nevenmete\nevenminded\nevenmindedness\nevenness\nevens\nevensong\nevent\neventful\neventfully\neventfulness\neventide\neventime\neventless\neventlessly\neventlessness\neventognath\nEventognathi\neventognathous\neventration\neventual\neventuality\neventualize\neventually\neventuate\neventuation\nevenwise\nevenworthy\neveque\never\nEverard\neverbearer\neverbearing\neverbloomer\neverblooming\neverduring\nEverett\neverglade\nevergreen\nevergreenery\nevergreenite\neverlasting\neverlastingly\neverlastingness\neverliving\nevermore\nEvernia\nevernioid\neversible\neversion\neversive\neversporting\nevert\nevertebral\nEvertebrata\nevertebrate\nevertile\nevertor\neverwhich\neverwho\nevery\neverybody\neveryday\neverydayness\neveryhow\neverylike\nEveryman\neveryman\neveryness\neveryone\neverything\neverywhen\neverywhence\neverywhere\neverywhereness\neverywheres\neverywhither\nevestar\nevetide\neveweed\nevict\neviction\nevictor\nevidence\nevidencive\nevident\nevidential\nevidentially\nevidentiary\nevidently\nevidentness\nevil\nevildoer\nevilhearted\nevilly\nevilmouthed\nevilness\nevilproof\nevilsayer\nevilspeaker\nevilspeaking\nevilwishing\nevince\nevincement\nevincible\nevincibly\nevincingly\nevincive\nevirate\neviration\neviscerate\nevisceration\nevisite\nevitable\nevitate\nevitation\nevittate\nevocable\nevocate\nevocation\nevocative\nevocatively\nevocator\nevocatory\nevocatrix\nEvodia\nevoe\nevoke\nevoker\nevolute\nevolution\nevolutional\nevolutionally\nevolutionary\nevolutionism\nevolutionist\nevolutionize\nevolutive\nevolutoid\nevolvable\nevolve\nevolvement\nevolvent\nevolver\nEvonymus\nevovae\nevulgate\nevulgation\nevulse\nevulsion\nevzone\newder\nEwe\newe\newelease\newer\newerer\newery\newry\nex\nexacerbate\nexacerbation\nexacerbescence\nexacerbescent\nexact\nexactable\nexacter\nexacting\nexactingly\nexactingness\nexaction\nexactitude\nexactive\nexactiveness\nexactly\nexactment\nexactness\nexactor\nexactress\nexadversum\nexaggerate\nexaggerated\nexaggeratedly\nexaggerating\nexaggeratingly\nexaggeration\nexaggerative\nexaggeratively\nexaggerativeness\nexaggerator\nexaggeratory\nexagitate\nexagitation\nexairesis\nexalate\nexalbuminose\nexalbuminous\nexallotriote\nexalt\nexaltation\nexaltative\nexalted\nexaltedly\nexaltedness\nexalter\nexam\nexamen\nexaminability\nexaminable\nexaminant\nexaminate\nexamination\nexaminational\nexaminationism\nexaminationist\nexaminative\nexaminator\nexaminatorial\nexaminatory\nexamine\nexaminee\nexaminer\nexaminership\nexamining\nexaminingly\nexample\nexampleless\nexampleship\nexanimate\nexanimation\nexanthem\nexanthema\nexanthematic\nexanthematous\nexappendiculate\nexarate\nexaration\nexarch\nexarchal\nexarchate\nexarchateship\nExarchic\nExarchist\nexarchist\nexarchy\nexareolate\nexarillate\nexaristate\nexarteritis\nexarticulate\nexarticulation\nexasperate\nexasperated\nexasperatedly\nexasperater\nexasperating\nexasperatingly\nexasperation\nexasperative\nexaspidean\nExaudi\nexaugurate\nexauguration\nexcalate\nexcalation\nexcalcarate\nexcalceate\nexcalceation\nExcalibur\nexcamb\nexcamber\nexcambion\nexcandescence\nexcandescency\nexcandescent\nexcantation\nexcarnate\nexcarnation\nexcathedral\nexcaudate\nexcavate\nexcavation\nexcavationist\nexcavator\nexcavatorial\nexcavatory\nexcave\nexcecate\nexcecation\nexcedent\nexceed\nexceeder\nexceeding\nexceedingly\nexceedingness\nexcel\nexcelente\nexcellence\nexcellency\nexcellent\nexcellently\nexcelsin\nExcelsior\nexcelsior\nexcelsitude\nexcentral\nexcentric\nexcentrical\nexcentricity\nexcept\nexceptant\nexcepting\nexception\nexceptionable\nexceptionableness\nexceptionably\nexceptional\nexceptionality\nexceptionally\nexceptionalness\nexceptionary\nexceptionless\nexceptious\nexceptiousness\nexceptive\nexceptively\nexceptiveness\nexceptor\nexcerebration\nexcerpt\nexcerptible\nexcerption\nexcerptive\nexcerptor\nexcess\nexcessive\nexcessively\nexcessiveness\nexcessman\nexchange\nexchangeability\nexchangeable\nexchangeably\nexchanger\nExchangite\nExchequer\nexchequer\nexcide\nexcipient\nexciple\nExcipulaceae\nexcipular\nexcipule\nexcipuliform\nexcipulum\nexcircle\nexcisable\nexcise\nexciseman\nexcisemanship\nexcision\nexcisor\nexcitability\nexcitable\nexcitableness\nexcitancy\nexcitant\nexcitation\nexcitative\nexcitator\nexcitatory\nexcite\nexcited\nexcitedly\nexcitedness\nexcitement\nexciter\nexciting\nexcitingly\nexcitive\nexcitoglandular\nexcitometabolic\nexcitomotion\nexcitomotor\nexcitomotory\nexcitomuscular\nexcitonutrient\nexcitor\nexcitory\nexcitosecretory\nexcitovascular\nexclaim\nexclaimer\nexclaiming\nexclaimingly\nexclamation\nexclamational\nexclamative\nexclamatively\nexclamatorily\nexclamatory\nexclave\nexclosure\nexcludable\nexclude\nexcluder\nexcluding\nexcludingly\nexclusion\nexclusionary\nexclusioner\nexclusionism\nexclusionist\nexclusive\nexclusively\nexclusiveness\nexclusivism\nexclusivist\nexclusivity\nexclusory\nExcoecaria\nexcogitable\nexcogitate\nexcogitation\nexcogitative\nexcogitator\nexcommunicable\nexcommunicant\nexcommunicate\nexcommunication\nexcommunicative\nexcommunicator\nexcommunicatory\nexconjugant\nexcoriable\nexcoriate\nexcoriation\nexcoriator\nexcorticate\nexcortication\nexcrement\nexcremental\nexcrementary\nexcrementitial\nexcrementitious\nexcrementitiously\nexcrementitiousness\nexcrementive\nexcresce\nexcrescence\nexcrescency\nexcrescent\nexcrescential\nexcreta\nexcretal\nexcrete\nexcreter\nexcretes\nexcretion\nexcretionary\nexcretitious\nexcretive\nexcretory\nexcriminate\nexcruciable\nexcruciate\nexcruciating\nexcruciatingly\nexcruciation\nexcruciator\nexcubant\nexcudate\nexculpable\nexculpate\nexculpation\nexculpative\nexculpatorily\nexculpatory\nexcurrent\nexcurse\nexcursion\nexcursional\nexcursionary\nexcursioner\nexcursionism\nexcursionist\nexcursionize\nexcursive\nexcursively\nexcursiveness\nexcursory\nexcursus\nexcurvate\nexcurvated\nexcurvation\nexcurvature\nexcurved\nexcusability\nexcusable\nexcusableness\nexcusably\nexcusal\nexcusative\nexcusator\nexcusatory\nexcuse\nexcuseful\nexcusefully\nexcuseless\nexcuser\nexcusing\nexcusingly\nexcusive\nexcuss\nexcyst\nexcystation\nexcysted\nexcystment\nexdelicto\nexdie\nexeat\nexecrable\nexecrableness\nexecrably\nexecrate\nexecration\nexecrative\nexecratively\nexecrator\nexecratory\nexecutable\nexecutancy\nexecutant\nexecute\nexecuted\nexecuter\nexecution\nexecutional\nexecutioneering\nexecutioner\nexecutioneress\nexecutionist\nexecutive\nexecutively\nexecutiveness\nexecutiveship\nexecutor\nexecutorial\nexecutorship\nexecutory\nexecutress\nexecutrices\nexecutrix\nexecutrixship\nexecutry\nexedent\nexedra\nexegeses\nexegesis\nexegesist\nexegete\nexegetic\nexegetical\nexegetically\nexegetics\nexegetist\nexemplar\nexemplaric\nexemplarily\nexemplariness\nexemplarism\nexemplarity\nexemplary\nexemplifiable\nexemplification\nexemplificational\nexemplificative\nexemplificator\nexemplifier\nexemplify\nexempt\nexemptible\nexemptile\nexemption\nexemptionist\nexemptive\nexencephalia\nexencephalic\nexencephalous\nexencephalus\nexendospermic\nexendospermous\nexenterate\nexenteration\nexequatur\nexequial\nexequy\nexercisable\nexercise\nexerciser\nexercitant\nexercitation\nexercitor\nexercitorial\nexercitorian\nexeresis\nexergual\nexergue\nexert\nexertion\nexertionless\nexertive\nexes\nexeunt\nexfiguration\nexfigure\nexfiltration\nexflagellate\nexflagellation\nexflect\nexfodiate\nexfodiation\nexfoliate\nexfoliation\nexfoliative\nexfoliatory\nexgorgitation\nexhalable\nexhalant\nexhalation\nexhalatory\nexhale\nexhaust\nexhausted\nexhaustedly\nexhaustedness\nexhauster\nexhaustibility\nexhaustible\nexhausting\nexhaustingly\nexhaustion\nexhaustive\nexhaustively\nexhaustiveness\nexhaustless\nexhaustlessly\nexhaustlessness\nexheredate\nexheredation\nexhibit\nexhibitable\nexhibitant\nexhibiter\nexhibition\nexhibitional\nexhibitioner\nexhibitionism\nexhibitionist\nexhibitionistic\nexhibitionize\nexhibitive\nexhibitively\nexhibitor\nexhibitorial\nexhibitorship\nexhibitory\nexhilarant\nexhilarate\nexhilarating\nexhilaratingly\nexhilaration\nexhilarative\nexhilarator\nexhilaratory\nexhort\nexhortation\nexhortative\nexhortatively\nexhortator\nexhortatory\nexhorter\nexhortingly\nexhumate\nexhumation\nexhumator\nexhumatory\nexhume\nexhumer\nexigence\nexigency\nexigent\nexigenter\nexigently\nexigible\nexiguity\nexiguous\nexiguously\nexiguousness\nexilarch\nexilarchate\nexile\nexiledom\nexilement\nexiler\nexilian\nexilic\nexility\neximious\neximiously\neximiousness\nexinanite\nexinanition\nexindusiate\nexinguinal\nexist\nexistability\nexistence\nexistent\nexistential\nexistentialism\nexistentialist\nexistentialistic\nexistentialize\nexistentially\nexistently\nexister\nexistibility\nexistible\nexistlessness\nexit\nexite\nexition\nexitus\nexlex\nexmeridian\nExmoor\nexoarteritis\nExoascaceae\nexoascaceous\nExoascales\nExoascus\nExobasidiaceae\nExobasidiales\nExobasidium\nexocannibalism\nexocardia\nexocardiac\nexocardial\nexocarp\nexocataphoria\nexoccipital\nexocentric\nExochorda\nexochorion\nexoclinal\nexocline\nexocoelar\nexocoele\nexocoelic\nexocoelom\nExocoetidae\nExocoetus\nexocolitis\nexocone\nexocrine\nexoculate\nexoculation\nexocyclic\nExocyclica\nExocycloida\nexode\nexoderm\nexodermis\nexodic\nexodist\nexodontia\nexodontist\nexodos\nexodromic\nexodromy\nexodus\nexody\nexoenzyme\nexoenzymic\nexoerythrocytic\nexogamic\nexogamous\nexogamy\nexogastric\nexogastrically\nexogastritis\nexogen\nExogenae\nexogenetic\nexogenic\nexogenous\nexogenously\nexogeny\nexognathion\nexognathite\nExogonium\nExogyra\nexolemma\nexometritis\nexomion\nexomis\nexomologesis\nexomorphic\nexomorphism\nexomphalos\nexomphalous\nexomphalus\nExon\nexon\nexonarthex\nexoner\nexonerate\nexoneration\nexonerative\nexonerator\nexoneural\nExonian\nexonship\nexopathic\nexoperidium\nexophagous\nexophagy\nexophasia\nexophasic\nexophoria\nexophoric\nexophthalmic\nexophthalmos\nexoplasm\nexopod\nexopodite\nexopoditic\nExopterygota\nexopterygotic\nexopterygotism\nexopterygotous\nexorability\nexorable\nexorableness\nexorbital\nexorbitance\nexorbitancy\nexorbitant\nexorbitantly\nexorbitate\nexorbitation\nexorcisation\nexorcise\nexorcisement\nexorciser\nexorcism\nexorcismal\nexorcisory\nexorcist\nexorcistic\nexorcistical\nexordia\nexordial\nexordium\nexordize\nexorganic\nexorhason\nexormia\nexornation\nexosepsis\nexoskeletal\nexoskeleton\nexosmic\nexosmose\nexosmosis\nexosmotic\nexosperm\nexosporal\nexospore\nexosporium\nexosporous\nExostema\nexostome\nexostosed\nexostosis\nexostotic\nexostra\nexostracism\nexostracize\nexoteric\nexoterical\nexoterically\nexotericism\nexoterics\nexotheca\nexothecal\nexothecate\nexothecium\nexothermal\nexothermic\nexothermous\nexotic\nexotically\nexoticalness\nexoticism\nexoticist\nexoticity\nexoticness\nexotism\nexotospore\nexotoxic\nexotoxin\nexotropia\nexotropic\nexotropism\nexpalpate\nexpand\nexpanded\nexpandedly\nexpandedness\nexpander\nexpanding\nexpandingly\nexpanse\nexpansibility\nexpansible\nexpansibleness\nexpansibly\nexpansile\nexpansion\nexpansional\nexpansionary\nexpansionism\nexpansionist\nexpansive\nexpansively\nexpansiveness\nexpansivity\nexpansometer\nexpansure\nexpatiate\nexpatiater\nexpatiatingly\nexpatiation\nexpatiative\nexpatiator\nexpatiatory\nexpatriate\nexpatriation\nexpect\nexpectable\nexpectance\nexpectancy\nexpectant\nexpectantly\nexpectation\nexpectative\nexpectedly\nexpecter\nexpectingly\nexpective\nexpectorant\nexpectorate\nexpectoration\nexpectorative\nexpectorator\nexpede\nexpediate\nexpedience\nexpediency\nexpedient\nexpediential\nexpedientially\nexpedientist\nexpediently\nexpeditate\nexpeditation\nexpedite\nexpedited\nexpeditely\nexpediteness\nexpediter\nexpedition\nexpeditionary\nexpeditionist\nexpeditious\nexpeditiously\nexpeditiousness\nexpel\nexpellable\nexpellant\nexpellee\nexpeller\nexpend\nexpendability\nexpendable\nexpender\nexpendible\nexpenditor\nexpenditrix\nexpenditure\nexpense\nexpenseful\nexpensefully\nexpensefulness\nexpenseless\nexpensilation\nexpensive\nexpensively\nexpensiveness\nexpenthesis\nexpergefacient\nexpergefaction\nexperience\nexperienceable\nexperienced\nexperienceless\nexperiencer\nexperiencible\nexperient\nexperiential\nexperientialism\nexperientialist\nexperientially\nexperiment\nexperimental\nexperimentalism\nexperimentalist\nexperimentalize\nexperimentally\nexperimentarian\nexperimentation\nexperimentative\nexperimentator\nexperimented\nexperimentee\nexperimenter\nexperimentist\nexperimentize\nexperimently\nexpert\nexpertism\nexpertize\nexpertly\nexpertness\nexpertship\nexpiable\nexpiate\nexpiation\nexpiational\nexpiatist\nexpiative\nexpiator\nexpiatoriness\nexpiatory\nexpilate\nexpilation\nexpilator\nexpirable\nexpirant\nexpirate\nexpiration\nexpirator\nexpiratory\nexpire\nexpiree\nexpirer\nexpiring\nexpiringly\nexpiry\nexpiscate\nexpiscation\nexpiscator\nexpiscatory\nexplain\nexplainable\nexplainer\nexplaining\nexplainingly\nexplanate\nexplanation\nexplanative\nexplanatively\nexplanator\nexplanatorily\nexplanatoriness\nexplanatory\nexplant\nexplantation\nexplement\nexplemental\nexpletive\nexpletively\nexpletiveness\nexpletory\nexplicable\nexplicableness\nexplicate\nexplication\nexplicative\nexplicatively\nexplicator\nexplicatory\nexplicit\nexplicitly\nexplicitness\nexplodable\nexplode\nexploded\nexplodent\nexploder\nexploit\nexploitable\nexploitage\nexploitation\nexploitationist\nexploitative\nexploiter\nexploitive\nexploiture\nexplorable\nexploration\nexplorational\nexplorative\nexploratively\nexplorativeness\nexplorator\nexploratory\nexplore\nexplorement\nexplorer\nexploring\nexploringly\nexplosibility\nexplosible\nexplosion\nexplosionist\nexplosive\nexplosively\nexplosiveness\nexpone\nexponence\nexponency\nexponent\nexponential\nexponentially\nexponentiation\nexponible\nexport\nexportability\nexportable\nexportation\nexporter\nexposal\nexpose\nexposed\nexposedness\nexposer\nexposit\nexposition\nexpositional\nexpositionary\nexpositive\nexpositively\nexpositor\nexpositorial\nexpositorially\nexpositorily\nexpositoriness\nexpository\nexpositress\nexpostulate\nexpostulating\nexpostulatingly\nexpostulation\nexpostulative\nexpostulatively\nexpostulator\nexpostulatory\nexposure\nexpound\nexpoundable\nexpounder\nexpress\nexpressable\nexpressage\nexpressed\nexpresser\nexpressibility\nexpressible\nexpressibly\nexpression\nexpressionable\nexpressional\nexpressionful\nexpressionism\nexpressionist\nexpressionistic\nexpressionless\nexpressionlessly\nexpressionlessness\nexpressive\nexpressively\nexpressiveness\nexpressivism\nexpressivity\nexpressless\nexpressly\nexpressman\nexpressness\nexpressway\nexprimable\nexprobrate\nexprobration\nexprobratory\nexpromission\nexpromissor\nexpropriable\nexpropriate\nexpropriation\nexpropriator\nexpugn\nexpugnable\nexpuition\nexpulsatory\nexpulse\nexpulser\nexpulsion\nexpulsionist\nexpulsive\nexpulsory\nexpunction\nexpunge\nexpungeable\nexpungement\nexpunger\nexpurgate\nexpurgation\nexpurgative\nexpurgator\nexpurgatorial\nexpurgatory\nexpurge\nexquisite\nexquisitely\nexquisiteness\nexquisitism\nexquisitively\nexradio\nexradius\nexrupeal\nexsanguinate\nexsanguination\nexsanguine\nexsanguineous\nexsanguinity\nexsanguinous\nexsanguious\nexscind\nexscissor\nexscriptural\nexsculptate\nexscutellate\nexsect\nexsectile\nexsection\nexsector\nexsequatur\nexsert\nexserted\nexsertile\nexsertion\nexship\nexsibilate\nexsibilation\nexsiccant\nexsiccatae\nexsiccate\nexsiccation\nexsiccative\nexsiccator\nexsiliency\nexsomatic\nexspuition\nexsputory\nexstipulate\nexstrophy\nexsuccous\nexsuction\nexsufflate\nexsufflation\nexsufflicate\nexsurge\nexsurgent\nextant\nextemporal\nextemporally\nextemporalness\nextemporaneity\nextemporaneous\nextemporaneously\nextemporaneousness\nextemporarily\nextemporariness\nextemporary\nextempore\nextemporization\nextemporize\nextemporizer\nextend\nextended\nextendedly\nextendedness\nextender\nextendibility\nextendible\nextending\nextense\nextensibility\nextensible\nextensibleness\nextensile\nextensimeter\nextension\nextensional\nextensionist\nextensity\nextensive\nextensively\nextensiveness\nextensometer\nextensor\nextensory\nextensum\nextent\nextenuate\nextenuating\nextenuatingly\nextenuation\nextenuative\nextenuator\nextenuatory\nexter\nexterior\nexteriorate\nexterioration\nexteriority\nexteriorization\nexteriorize\nexteriorly\nexteriorness\nexterminable\nexterminate\nextermination\nexterminative\nexterminator\nexterminatory\nexterminatress\nexterminatrix\nexterminist\nextern\nexternal\nexternalism\nexternalist\nexternalistic\nexternality\nexternalization\nexternalize\nexternally\nexternals\nexternate\nexternation\nexterne\nexternity\nexternization\nexternize\nexternomedian\nexternum\nexteroceptist\nexteroceptive\nexteroceptor\nexterraneous\nexterrestrial\nexterritorial\nexterritoriality\nexterritorialize\nexterritorially\nextima\nextinct\nextinction\nextinctionist\nextinctive\nextinctor\nextine\nextinguish\nextinguishable\nextinguishant\nextinguished\nextinguisher\nextinguishment\nextipulate\nextirpate\nextirpation\nextirpationist\nextirpative\nextirpator\nextirpatory\nextispex\nextispicious\nextispicy\nextogenous\nextol\nextoll\nextollation\nextoller\nextollingly\nextollment\nextolment\nextoolitic\nextorsive\nextorsively\nextort\nextorter\nextortion\nextortionary\nextortionate\nextortionately\nextortioner\nextortionist\nextortive\nextra\nextrabold\nextrabranchial\nextrabronchial\nextrabuccal\nextrabulbar\nextrabureau\nextraburghal\nextracalendar\nextracalicular\nextracanonical\nextracapsular\nextracardial\nextracarpal\nextracathedral\nextracellular\nextracellularly\nextracerebral\nextracivic\nextracivically\nextraclassroom\nextraclaustral\nextracloacal\nextracollegiate\nextracolumella\nextraconscious\nextraconstellated\nextraconstitutional\nextracorporeal\nextracorpuscular\nextracosmic\nextracosmical\nextracostal\nextracranial\nextract\nextractable\nextractant\nextracted\nextractible\nextractiform\nextraction\nextractive\nextractor\nextractorship\nextracultural\nextracurial\nextracurricular\nextracurriculum\nextracutaneous\nextracystic\nextradecretal\nextradialectal\nextraditable\nextradite\nextradition\nextradomestic\nextrados\nextradosed\nextradotal\nextraduction\nextradural\nextraembryonic\nextraenteric\nextraepiphyseal\nextraequilibrium\nextraessential\nextraessentially\nextrafascicular\nextrafloral\nextrafocal\nextrafoliaceous\nextraforaneous\nextraformal\nextragalactic\nextragastric\nextrait\nextrajudicial\nextrajudicially\nextralateral\nextralite\nextrality\nextramarginal\nextramatrical\nextramedullary\nextramental\nextrameridian\nextrameridional\nextrametaphysical\nextrametrical\nextrametropolitan\nextramodal\nextramolecular\nextramorainal\nextramorainic\nextramoral\nextramoralist\nextramundane\nextramural\nextramurally\nextramusical\nextranational\nextranatural\nextranean\nextraneity\nextraneous\nextraneously\nextraneousness\nextranidal\nextranormal\nextranuclear\nextraocular\nextraofficial\nextraoral\nextraorbital\nextraorbitally\nextraordinarily\nextraordinariness\nextraordinary\nextraorganismal\nextraovate\nextraovular\nextraparenchymal\nextraparental\nextraparietal\nextraparliamentary\nextraparochial\nextraparochially\nextrapatriarchal\nextrapelvic\nextraperineal\nextraperiodic\nextraperiosteal\nextraperitoneal\nextraphenomenal\nextraphysical\nextraphysiological\nextrapituitary\nextraplacental\nextraplanetary\nextrapleural\nextrapoetical\nextrapolar\nextrapolate\nextrapolation\nextrapolative\nextrapolator\nextrapopular\nextraprofessional\nextraprostatic\nextraprovincial\nextrapulmonary\nextrapyramidal\nextraquiz\nextrared\nextraregarding\nextraregular\nextraregularly\nextrarenal\nextraretinal\nextrarhythmical\nextrasacerdotal\nextrascholastic\nextraschool\nextrascientific\nextrascriptural\nextrascripturality\nextrasensible\nextrasensory\nextrasensuous\nextraserous\nextrasocial\nextrasolar\nextrasomatic\nextraspectral\nextraspherical\nextraspinal\nextrastapedial\nextrastate\nextrasterile\nextrastomachal\nextrasyllabic\nextrasyllogistic\nextrasyphilitic\nextrasystole\nextrasystolic\nextratabular\nextratarsal\nextratellurian\nextratelluric\nextratemporal\nextratension\nextratensive\nextraterrene\nextraterrestrial\nextraterritorial\nextraterritoriality\nextraterritorially\nextrathecal\nextratheistic\nextrathermodynamic\nextrathoracic\nextratorrid\nextratracheal\nextratribal\nextratropical\nextratubal\nextratympanic\nextrauterine\nextravagance\nextravagancy\nextravagant\nExtravagantes\nextravagantly\nextravagantness\nextravaganza\nextravagate\nextravaginal\nextravasate\nextravasation\nextravascular\nextraventricular\nextraversion\nextravert\nextravillar\nextraviolet\nextravisceral\nextrazodiacal\nextreme\nextremeless\nextremely\nextremeness\nextremism\nextremist\nextremistic\nextremital\nextremity\nextricable\nextricably\nextricate\nextricated\nextrication\nextrinsic\nextrinsical\nextrinsicality\nextrinsically\nextrinsicalness\nextrinsicate\nextrinsication\nextroitive\nextropical\nextrorsal\nextrorse\nextrorsely\nextrospect\nextrospection\nextrospective\nextroversion\nextroversive\nextrovert\nextrovertish\nextrude\nextruder\nextruding\nextrusile\nextrusion\nextrusive\nextrusory\nextubate\nextubation\nextumescence\nextund\nextusion\nexuberance\nexuberancy\nexuberant\nexuberantly\nexuberantness\nexuberate\nexuberation\nexudate\nexudation\nexudative\nexude\nexudence\nexulcerate\nexulceration\nexulcerative\nexulceratory\nexult\nexultance\nexultancy\nexultant\nexultantly\nexultation\nexultet\nexultingly\nexululate\nexumbral\nexumbrella\nexumbrellar\nexundance\nexundancy\nexundate\nexundation\nexuviability\nexuviable\nexuviae\nexuvial\nexuviate\nexuviation\nexzodiacal\ney\neyah\neyalet\neyas\neye\neyeball\neyebalm\neyebar\neyebeam\neyeberry\neyeblink\neyebolt\neyebree\neyebridled\neyebright\neyebrow\neyecup\neyed\neyedness\neyedot\neyedrop\neyeflap\neyeful\neyeglance\neyeglass\neyehole\nEyeish\neyelash\neyeless\neyelessness\neyelet\neyeleteer\neyeletter\neyelid\neyelight\neyelike\neyeline\neyemark\neyen\neyepiece\neyepit\neyepoint\neyer\neyereach\neyeroot\neyesalve\neyeseed\neyeservant\neyeserver\neyeservice\neyeshade\neyeshield\neyeshot\neyesight\neyesome\neyesore\neyespot\neyestalk\neyestone\neyestrain\neyestring\neyetooth\neyewaiter\neyewash\neyewater\neyewear\neyewink\neyewinker\neyewitness\neyewort\neyey\neying\neyn\neyne\neyot\neyoty\neyra\neyre\neyrie\neyrir\nezba\nEzekiel\nEzra\nF\nf\nfa\nFaba\nFabaceae\nfabaceous\nfabella\nfabes\nFabian\nFabianism\nFabianist\nfabiform\nfable\nfabled\nfabledom\nfableist\nfableland\nfablemaker\nfablemonger\nfablemongering\nfabler\nfabliau\nfabling\nFabraea\nfabric\nfabricant\nfabricate\nfabrication\nfabricative\nfabricator\nfabricatress\nFabrikoid\nfabrikoid\nFabronia\nFabroniaceae\nfabular\nfabulist\nfabulosity\nfabulous\nfabulously\nfabulousness\nfaburden\nfacadal\nfacade\nface\nfaceable\nfacebread\nfacecloth\nfaced\nfaceless\nfacellite\nfacemaker\nfacemaking\nfaceman\nfacemark\nfacepiece\nfaceplate\nfacer\nfacet\nfacete\nfaceted\nfacetely\nfaceteness\nfacetiae\nfacetiation\nfacetious\nfacetiously\nfacetiousness\nfacewise\nfacework\nfacia\nfacial\nfacially\nfaciation\nfaciend\nfacient\nfacies\nfacile\nfacilely\nfacileness\nfacilitate\nfacilitation\nfacilitative\nfacilitator\nfacility\nfacing\nfacingly\nfacinorous\nfacinorousness\nfaciobrachial\nfaciocervical\nfaciolingual\nfacioplegia\nfacioscapulohumeral\nfack\nfackeltanz\nfackings\nfackins\nfacks\nfacsimile\nfacsimilist\nfacsimilize\nfact\nfactable\nfactabling\nfactful\nFactice\nfacticide\nfaction\nfactional\nfactionalism\nfactionary\nfactioneer\nfactionist\nfactionistism\nfactious\nfactiously\nfactiousness\nfactish\nfactitial\nfactitious\nfactitiously\nfactitive\nfactitively\nfactitude\nfactive\nfactor\nfactorability\nfactorable\nfactorage\nfactordom\nfactoress\nfactorial\nfactorially\nfactorist\nfactorization\nfactorize\nfactorship\nfactory\nfactoryship\nfactotum\nfactrix\nfactual\nfactuality\nfactually\nfactualness\nfactum\nfacture\nfacty\nfacula\nfacular\nfaculous\nfacultate\nfacultative\nfacultatively\nfacultied\nfacultize\nfaculty\nfacund\nfacy\nfad\nfadable\nfaddiness\nfaddish\nfaddishness\nfaddism\nfaddist\nfaddle\nfaddy\nfade\nfadeaway\nfaded\nfadedly\nfadedness\nfadeless\nfaden\nfader\nfadge\nfading\nfadingly\nfadingness\nfadmonger\nfadmongering\nfadmongery\nfadridden\nfady\nfae\nfaerie\nFaeroe\nfaery\nfaeryland\nfaff\nfaffle\nfaffy\nfag\nFagaceae\nfagaceous\nfagald\nFagales\nFagara\nfage\nFagelia\nfager\nfagger\nfaggery\nfagging\nfaggingly\nfagine\nfagopyrism\nfagopyrismus\nFagopyrum\nfagot\nfagoter\nfagoting\nfagottino\nfagottist\nfagoty\nFagus\nfaham\nfahlerz\nfahlore\nfahlunite\nFahrenheit\nfaience\nfail\nfailing\nfailingly\nfailingness\nfaille\nfailure\nfain\nfainaigue\nfainaiguer\nfaineance\nfaineancy\nfaineant\nfaineantism\nfainly\nfainness\nfains\nfaint\nfainter\nfaintful\nfaintheart\nfainthearted\nfaintheartedly\nfaintheartedness\nfainting\nfaintingly\nfaintish\nfaintishness\nfaintly\nfaintness\nfaints\nfainty\nfaipule\nfair\nfairer\nfairfieldite\nfairgoer\nfairgoing\nfairgrass\nfairground\nfairily\nfairing\nfairish\nfairishly\nfairkeeper\nfairlike\nfairling\nfairly\nfairm\nfairness\nfairstead\nfairtime\nfairwater\nfairway\nfairy\nfairydom\nfairyfolk\nfairyhood\nfairyish\nfairyism\nfairyland\nfairylike\nfairyologist\nfairyology\nfairyship\nfaith\nfaithbreach\nfaithbreaker\nfaithful\nfaithfully\nfaithfulness\nfaithless\nfaithlessly\nfaithlessness\nfaithwise\nfaithworthiness\nfaithworthy\nfaitour\nfake\nfakement\nfaker\nfakery\nfakiness\nfakir\nfakirism\nFakofo\nfaky\nfalanaka\nFalange\nFalangism\nFalangist\nFalasha\nfalbala\nfalcade\nFalcata\nfalcate\nfalcated\nfalcation\nfalcer\nfalces\nfalchion\nfalcial\nFalcidian\nfalciform\nFalcinellus\nfalciparum\nFalco\nfalcon\nfalconbill\nfalconelle\nfalconer\nFalcones\nfalconet\nFalconidae\nFalconiformes\nFalconinae\nfalconine\nfalconlike\nfalconoid\nfalconry\nfalcopern\nfalcula\nfalcular\nfalculate\nFalcunculus\nfaldage\nfalderal\nfaldfee\nfaldstool\nFalerian\nFalernian\nFalerno\nFaliscan\nFalisci\nFalkland\nfall\nfallace\nfallacious\nfallaciously\nfallaciousness\nfallacy\nfallage\nfallation\nfallaway\nfallback\nfallectomy\nfallen\nfallenness\nfaller\nfallfish\nfallibility\nfallible\nfallibleness\nfallibly\nfalling\nFallopian\nfallostomy\nfallotomy\nfallow\nfallowist\nfallowness\nfalltime\nfallway\nfally\nfalsary\nfalse\nfalsehearted\nfalseheartedly\nfalseheartedness\nfalsehood\nfalsely\nfalsen\nfalseness\nfalser\nfalsettist\nfalsetto\nfalsework\nfalsidical\nfalsie\nfalsifiable\nfalsificate\nfalsification\nfalsificator\nfalsifier\nfalsify\nfalsism\nFalstaffian\nfaltboat\nfaltche\nfalter\nfalterer\nfaltering\nfalteringly\nFalunian\nFaluns\nfalutin\nfalx\nfam\nFama\nfamatinite\nfamble\nfame\nfameflower\nfameful\nfameless\nfamelessly\nfamelessness\nFameuse\nfameworthy\nfamilia\nfamilial\nfamiliar\nfamiliarism\nfamiliarity\nfamiliarization\nfamiliarize\nfamiliarizer\nfamiliarizingly\nfamiliarly\nfamiliarness\nfamilism\nfamilist\nfamilistery\nfamilistic\nfamilistical\nfamily\nfamilyish\nfamine\nfamish\nfamishment\nfamous\nfamously\nfamousness\nfamulary\nfamulus\nFan\nfan\nfana\nfanal\nfanam\nfanatic\nfanatical\nfanatically\nfanaticalness\nfanaticism\nfanaticize\nfanback\nfanbearer\nfanciable\nfancical\nfancied\nfancier\nfanciful\nfancifully\nfancifulness\nfancify\nfanciless\nfancy\nfancymonger\nfancysick\nfancywork\nfand\nfandangle\nfandango\nfandom\nfanega\nfanegada\nfanfarade\nFanfare\nfanfare\nfanfaron\nfanfaronade\nfanfaronading\nfanflower\nfanfoot\nfang\nfanged\nfangle\nfangled\nfanglement\nfangless\nfanglet\nfanglomerate\nfangot\nfangy\nfanhouse\nfaniente\nfanion\nfanioned\nfanlight\nfanlike\nfanmaker\nfanmaking\nfanman\nfannel\nfanner\nFannia\nfannier\nfanning\nFanny\nfanon\nfant\nfantail\nfantasia\nfantasie\nfantasied\nfantasist\nfantasque\nfantassin\nfantast\nfantastic\nfantastical\nfantasticality\nfantastically\nfantasticalness\nfantasticate\nfantastication\nfantasticism\nfantasticly\nfantasticness\nfantastico\nfantastry\nfantasy\nFanti\nfantigue\nfantoccini\nfantocine\nfantod\nfantoddish\nFanwe\nfanweed\nfanwise\nfanwork\nfanwort\nfanwright\nFany\nfaon\nFapesmo\nfar\nfarad\nfaradaic\nfaraday\nfaradic\nfaradism\nfaradization\nfaradize\nfaradizer\nfaradmeter\nfaradocontractility\nfaradomuscular\nfaradonervous\nfaradopalpation\nfarandole\nfarasula\nfaraway\nfarawayness\nfarce\nfarcelike\nfarcer\nfarcetta\nfarcial\nfarcialize\nfarcical\nfarcicality\nfarcically\nfarcicalness\nfarcied\nfarcify\nfarcing\nfarcinoma\nfarcist\nfarctate\nfarcy\nfarde\nfardel\nfardelet\nfardh\nfardo\nfare\nfarer\nfarewell\nfarfara\nfarfel\nfarfetched\nfarfetchedness\nFarfugium\nfargoing\nfargood\nfarina\nfarinaceous\nfarinaceously\nfaring\nfarinometer\nfarinose\nfarinosely\nfarinulent\nFarish\nfarish\nfarkleberry\nfarl\nfarleu\nfarm\nfarmable\nfarmage\nfarmer\nfarmeress\nfarmerette\nfarmerlike\nfarmership\nfarmery\nfarmhold\nfarmhouse\nfarmhousey\nfarming\nfarmost\nfarmplace\nfarmstead\nfarmsteading\nfarmtown\nfarmy\nfarmyard\nfarmyardy\nfarnesol\nfarness\nFarnovian\nfaro\nFaroeish\nFaroese\nfarolito\nFarouk\nfarraginous\nfarrago\nfarrand\nfarrandly\nfarrantly\nfarreate\nfarreation\nfarrier\nfarrierlike\nfarriery\nfarrisite\nfarrow\nfarruca\nfarsalah\nfarse\nfarseeing\nfarseeingness\nfarseer\nfarset\nFarsi\nfarsighted\nfarsightedly\nfarsightedness\nfarther\nfarthermost\nfarthest\nfarthing\nfarthingale\nfarthingless\nfarweltered\nfasces\nfascet\nfascia\nfascial\nfasciate\nfasciated\nfasciately\nfasciation\nfascicle\nfascicled\nfascicular\nfascicularly\nfasciculate\nfasciculated\nfasciculately\nfasciculation\nfascicule\nfasciculus\nfascinate\nfascinated\nfascinatedly\nfascinating\nfascinatingly\nfascination\nfascinative\nfascinator\nfascinatress\nfascine\nfascinery\nFascio\nfasciodesis\nfasciola\nfasciolar\nFasciolaria\nFasciolariidae\nfasciole\nfasciolet\nfascioliasis\nFasciolidae\nfascioloid\nfascioplasty\nfasciotomy\nfascis\nfascism\nfascist\nFascista\nFascisti\nfascisticization\nfascisticize\nfascistization\nfascistize\nfash\nfasher\nfashery\nfashion\nfashionability\nfashionable\nfashionableness\nfashionably\nfashioned\nfashioner\nfashionist\nfashionize\nfashionless\nfashionmonger\nfashionmonging\nfashious\nfashiousness\nfasibitikite\nfasinite\nfass\nfassalite\nfast\nfasten\nfastener\nfastening\nfaster\nfastgoing\nfasthold\nfastidiosity\nfastidious\nfastidiously\nfastidiousness\nfastidium\nfastigate\nfastigated\nfastigiate\nfastigium\nfasting\nfastingly\nfastish\nfastland\nfastness\nfastuous\nfastuously\nfastuousness\nfastus\nfat\nFatagaga\nfatal\nfatalism\nfatalist\nfatalistic\nfatalistically\nfatality\nfatalize\nfatally\nfatalness\nfatbird\nfatbrained\nfate\nfated\nfateful\nfatefully\nfatefulness\nfatelike\nfathead\nfatheaded\nfatheadedness\nfathearted\nfather\nfathercraft\nfathered\nfatherhood\nfatherland\nfatherlandish\nfatherless\nfatherlessness\nfatherlike\nfatherliness\nfatherling\nfatherly\nfathership\nfathmur\nfathom\nfathomable\nfathomage\nfathomer\nFathometer\nfathomless\nfathomlessly\nfathomlessness\nfatidic\nfatidical\nfatidically\nfatiferous\nfatigability\nfatigable\nfatigableness\nfatigue\nfatigueless\nfatiguesome\nfatiguing\nfatiguingly\nfatiha\nfatil\nfatiloquent\nFatima\nFatimid\nfatiscence\nfatiscent\nfatless\nfatling\nfatly\nfatness\nfatsia\nfattable\nfatten\nfattenable\nfattener\nfatter\nfattily\nfattiness\nfattish\nfattishness\nfattrels\nfatty\nfatuism\nfatuitous\nfatuitousness\nfatuity\nfatuoid\nfatuous\nfatuously\nfatuousness\nfatwood\nfaucal\nfaucalize\nfauces\nfaucet\nfauchard\nfaucial\nfaucitis\nfaucre\nfaugh\nfaujasite\nfauld\nFaulkland\nfault\nfaultage\nfaulter\nfaultfind\nfaultfinder\nfaultfinding\nfaultful\nfaultfully\nfaultily\nfaultiness\nfaulting\nfaultless\nfaultlessly\nfaultlessness\nfaultsman\nfaulty\nfaun\nFauna\nfaunal\nfaunally\nfaunated\nfaunish\nfaunist\nfaunistic\nfaunistical\nfaunistically\nfaunlike\nfaunological\nfaunology\nfaunule\nfause\nfaussebraie\nfaussebrayed\nfaust\nFaustian\nfauterer\nfautor\nfautorship\nfauve\nFauvism\nFauvist\nfavaginous\nfavella\nfavellidium\nfavelloid\nFaventine\nfaveolate\nfaveolus\nfaviform\nfavilla\nfavillous\nfavism\nfavissa\nfavn\nfavonian\nFavonius\nfavor\nfavorable\nfavorableness\nfavorably\nfavored\nfavoredly\nfavoredness\nfavorer\nfavoress\nfavoring\nfavoringly\nfavorite\nfavoritism\nfavorless\nfavose\nfavosely\nfavosite\nFavosites\nFavositidae\nfavositoid\nfavous\nfavus\nfawn\nfawner\nfawnery\nfawning\nfawningly\nfawningness\nfawnlike\nfawnskin\nfawny\nFay\nfay\nFayal\nfayalite\nFayettism\nfayles\nFayumic\nfaze\nfazenda\nfe\nfeaberry\nfeague\nfeak\nfeal\nfealty\nfear\nfearable\nfeared\nfearedly\nfearedness\nfearer\nfearful\nfearfully\nfearfulness\nfearingly\nfearless\nfearlessly\nfearlessness\nfearnought\nfearsome\nfearsomely\nfearsomeness\nfeasance\nfeasibility\nfeasible\nfeasibleness\nfeasibly\nfeasor\nfeast\nfeasten\nfeaster\nfeastful\nfeastfully\nfeastless\nfeat\nfeather\nfeatherback\nfeatherbed\nfeatherbedding\nfeatherbird\nfeatherbone\nfeatherbrain\nfeatherbrained\nfeatherdom\nfeathered\nfeatheredge\nfeatheredged\nfeatherer\nfeatherfew\nfeatherfoil\nfeatherhead\nfeatherheaded\nfeatheriness\nfeathering\nfeatherleaf\nfeatherless\nfeatherlessness\nfeatherlet\nfeatherlike\nfeatherman\nfeathermonger\nfeatherpate\nfeatherpated\nfeatherstitch\nfeatherstitching\nfeathertop\nfeatherway\nfeatherweed\nfeatherweight\nfeatherwing\nfeatherwise\nfeatherwood\nfeatherwork\nfeatherworker\nfeathery\nfeatliness\nfeatly\nfeatness\nfeatous\nfeatural\nfeaturally\nfeature\nfeatured\nfeatureful\nfeatureless\nfeatureliness\nfeaturely\nfeaty\nfeaze\nfeazings\nfebricant\nfebricide\nfebricity\nfebricula\nfebrifacient\nfebriferous\nfebrific\nfebrifugal\nfebrifuge\nfebrile\nfebrility\nFebronian\nFebronianism\nFebruarius\nFebruary\nfebruation\nfecal\nfecalith\nfecaloid\nfeces\nFechnerian\nfeck\nfeckful\nfeckfully\nfeckless\nfecklessly\nfecklessness\nfeckly\nfecula\nfeculence\nfeculency\nfeculent\nfecund\nfecundate\nfecundation\nfecundative\nfecundator\nfecundatory\nfecundify\nfecundity\nfecundize\nfed\nfeddan\nfederacy\nFederal\nfederal\nfederalism\nfederalist\nfederalization\nfederalize\nfederally\nfederalness\nfederate\nfederation\nfederationist\nfederatist\nfederative\nfederatively\nfederator\nFedia\nFedora\nfee\nfeeable\nfeeble\nfeeblebrained\nfeeblehearted\nfeebleheartedly\nfeebleheartedness\nfeebleness\nfeebling\nfeeblish\nfeebly\nfeed\nfeedable\nfeedback\nfeedbin\nfeedboard\nfeedbox\nfeeder\nfeedhead\nfeeding\nfeedman\nfeedsman\nfeedstuff\nfeedway\nfeedy\nfeel\nfeelable\nfeeler\nfeeless\nfeeling\nfeelingful\nfeelingless\nfeelinglessly\nfeelingly\nfeelingness\nfeer\nfeere\nfeering\nfeetage\nfeetless\nfeeze\nfefnicute\nfegary\nFegatella\nFehmic\nfei\nfeif\nfeigher\nfeign\nfeigned\nfeignedly\nfeignedness\nfeigner\nfeigning\nfeigningly\nFeijoa\nfeil\nfeint\nfeis\nfeist\nfeisty\nFelapton\nfeldsher\nfeldspar\nfeldsparphyre\nfeldspathic\nfeldspathization\nfeldspathoid\nFelichthys\nfelicide\nfelicific\nfelicitate\nfelicitation\nfelicitator\nfelicitous\nfelicitously\nfelicitousness\nfelicity\nfelid\nFelidae\nfeliform\nFelinae\nfeline\nfelinely\nfelineness\nfelinity\nfelinophile\nfelinophobe\nFelis\nFelix\nfell\nfellable\nfellage\nfellah\nfellaheen\nfellahin\nFellani\nFellata\nFellatah\nfellatio\nfellation\nfellen\nfeller\nfellic\nfelliducous\nfellifluous\nfelling\nfellingbird\nfellinic\nfellmonger\nfellmongering\nfellmongery\nfellness\nfelloe\nfellow\nfellowcraft\nfellowess\nfellowheirship\nfellowless\nfellowlike\nfellowship\nfellside\nfellsman\nfelly\nfeloid\nfelon\nfeloness\nfelonious\nfeloniously\nfeloniousness\nfelonry\nfelonsetter\nfelonsetting\nfelonweed\nfelonwood\nfelonwort\nfelony\nfels\nfelsite\nfelsitic\nfelsobanyite\nfelsophyre\nfelsophyric\nfelsosphaerite\nfelstone\nfelt\nfelted\nfelter\nfelting\nfeltlike\nfeltmaker\nfeltmaking\nfeltmonger\nfeltness\nfeltwork\nfeltwort\nfelty\nfeltyfare\nfelucca\nFelup\nfelwort\nfemale\nfemalely\nfemaleness\nfemality\nfemalize\nFeme\nfeme\nfemerell\nfemic\nfemicide\nfeminacy\nfeminal\nfeminality\nfeminate\nfemineity\nfeminie\nfeminility\nfeminin\nfeminine\nfemininely\nfeminineness\nfemininism\nfemininity\nfeminism\nfeminist\nfeministic\nfeministics\nfeminity\nfeminization\nfeminize\nfeminologist\nfeminology\nfeminophobe\nfemora\nfemoral\nfemorocaudal\nfemorocele\nfemorococcygeal\nfemorofibular\nfemoropopliteal\nfemororotulian\nfemorotibial\nfemur\nfen\nfenbank\nfenberry\nfence\nfenceful\nfenceless\nfencelessness\nfencelet\nfenceplay\nfencer\nfenceress\nfenchene\nfenchone\nfenchyl\nfencible\nfencing\nfend\nfendable\nfender\nfendering\nfenderless\nfendillate\nfendillation\nfendy\nfeneration\nfenestella\nFenestellidae\nfenestra\nfenestral\nfenestrate\nfenestrated\nfenestration\nfenestrato\nfenestrule\nFenian\nFenianism\nfenite\nfenks\nfenland\nfenlander\nfenman\nfennec\nfennel\nfennelflower\nfennig\nfennish\nFennoman\nfenny\nfenouillet\nFenrir\nfensive\nfent\nfenter\nfenugreek\nFenzelia\nfeod\nfeodal\nfeodality\nfeodary\nfeodatory\nfeoff\nfeoffee\nfeoffeeship\nfeoffment\nfeoffor\nfeower\nferacious\nferacity\nFerae\nFerahan\nferal\nferalin\nFeramorz\nferash\nferberite\nFerdiad\nferdwit\nferetory\nferetrum\nferfathmur\nferfet\nferganite\nFergus\nfergusite\nFerguson\nfergusonite\nferia\nferial\nferidgi\nferie\nferine\nferinely\nferineness\nFeringi\nFerio\nFerison\nferity\nferk\nferling\nferly\nfermail\nFermatian\nferme\nferment\nfermentability\nfermentable\nfermentarian\nfermentation\nfermentative\nfermentatively\nfermentativeness\nfermentatory\nfermenter\nfermentescible\nfermentitious\nfermentive\nfermentology\nfermentor\nfermentum\nfermerer\nfermery\nfermila\nfermorite\nfern\nfernandinite\nFernando\nfernbird\nfernbrake\nferned\nfernery\nferngale\nferngrower\nfernland\nfernleaf\nfernless\nfernlike\nfernshaw\nfernsick\nferntickle\nferntickled\nfernwort\nferny\nFerocactus\nferocious\nferociously\nferociousness\nferocity\nferoher\nFeronia\nferrado\nferrament\nFerrara\nFerrarese\nferrate\nferrated\nferrateen\nferratin\nferrean\nferreous\nferret\nferreter\nferreting\nferretto\nferrety\nferri\nferriage\nferric\nferrichloride\nferricyanate\nferricyanhydric\nferricyanic\nferricyanide\nferricyanogen\nferrier\nferriferous\nferrihydrocyanic\nferriprussiate\nferriprussic\nferrite\nferritization\nferritungstite\nferrivorous\nferroalloy\nferroaluminum\nferroboron\nferrocalcite\nferrocerium\nferrochrome\nferrochromium\nferroconcrete\nferroconcretor\nferrocyanate\nferrocyanhydric\nferrocyanic\nferrocyanide\nferrocyanogen\nferroglass\nferrogoslarite\nferrohydrocyanic\nferroinclave\nferromagnesian\nferromagnetic\nferromagnetism\nferromanganese\nferromolybdenum\nferronatrite\nferronickel\nferrophosphorus\nferroprint\nferroprussiate\nferroprussic\nferrosilicon\nferrotitanium\nferrotungsten\nferrotype\nferrotyper\nferrous\nferrovanadium\nferrozirconium\nferruginate\nferrugination\nferruginean\nferruginous\nferrule\nferruler\nferrum\nferruminate\nferrumination\nferry\nferryboat\nferryhouse\nferryman\nferryway\nferthumlungur\nFertil\nfertile\nfertilely\nfertileness\nfertility\nfertilizable\nfertilization\nfertilizational\nfertilize\nfertilizer\nferu\nferula\nferulaceous\nferule\nferulic\nfervanite\nfervency\nfervent\nfervently\nferventness\nfervescence\nfervescent\nfervid\nfervidity\nfervidly\nfervidness\nFervidor\nfervor\nfervorless\nFesapo\nFescennine\nfescenninity\nfescue\nfess\nfessely\nfesswise\nfest\nfestal\nfestally\nFeste\nfester\nfesterment\nfestilogy\nfestinance\nfestinate\nfestinately\nfestination\nfestine\nFestino\nfestival\nfestivally\nfestive\nfestively\nfestiveness\nfestivity\nfestivous\nfestology\nfestoon\nfestoonery\nfestoony\nfestuca\nfestucine\nfet\nfetal\nfetalism\nfetalization\nfetation\nfetch\nfetched\nfetcher\nfetching\nfetchingly\nfeteless\nfeterita\nfetial\nfetiales\nfetichmonger\nfeticidal\nfeticide\nfetid\nfetidity\nfetidly\nfetidness\nfetiferous\nfetiparous\nfetish\nfetisheer\nfetishic\nfetishism\nfetishist\nfetishistic\nfetishization\nfetishize\nfetishmonger\nfetishry\nfetlock\nfetlocked\nfetlow\nfetography\nfetometry\nfetoplacental\nfetor\nfetter\nfetterbush\nfetterer\nfetterless\nfetterlock\nfetticus\nfettle\nfettler\nfettling\nfetus\nfeu\nfeuage\nfeuar\nfeucht\nfeud\nfeudal\nfeudalism\nfeudalist\nfeudalistic\nfeudality\nfeudalizable\nfeudalization\nfeudalize\nfeudally\nfeudatorial\nfeudatory\nfeudee\nfeudist\nfeudovassalism\nfeued\nFeuillants\nfeuille\nfeuilletonism\nfeuilletonist\nfeuilletonistic\nfeulamort\nfever\nfeverberry\nfeverbush\nfevercup\nfeveret\nfeverfew\nfevergum\nfeverish\nfeverishly\nfeverishness\nfeverless\nfeverlike\nfeverous\nfeverously\nfeverroot\nfevertrap\nfevertwig\nfevertwitch\nfeverweed\nfeverwort\nfew\nfewness\nfewsome\nfewter\nfewterer\nfewtrils\nfey\nfeyness\nfez\nFezzan\nfezzed\nFezziwig\nfezzy\nfi\nfiacre\nfiance\nfiancee\nfianchetto\nFianna\nfiar\nfiard\nfiasco\nfiat\nfiatconfirmatio\nfib\nfibber\nfibbery\nfibdom\nFiber\nfiber\nfiberboard\nfibered\nFiberglas\nfiberize\nfiberizer\nfiberless\nfiberware\nfibration\nfibreless\nfibreware\nfibriform\nfibril\nfibrilla\nfibrillar\nfibrillary\nfibrillate\nfibrillated\nfibrillation\nfibrilled\nfibrilliferous\nfibrilliform\nfibrillose\nfibrillous\nfibrin\nfibrinate\nfibrination\nfibrine\nfibrinemia\nfibrinoalbuminous\nfibrinocellular\nfibrinogen\nfibrinogenetic\nfibrinogenic\nfibrinogenous\nfibrinolysin\nfibrinolysis\nfibrinolytic\nfibrinoplastic\nfibrinoplastin\nfibrinopurulent\nfibrinose\nfibrinosis\nfibrinous\nfibrinuria\nfibroadenia\nfibroadenoma\nfibroadipose\nfibroangioma\nfibroareolar\nfibroblast\nfibroblastic\nfibrobronchitis\nfibrocalcareous\nfibrocarcinoma\nfibrocartilage\nfibrocartilaginous\nfibrocaseose\nfibrocaseous\nfibrocellular\nfibrochondritis\nfibrochondroma\nfibrochondrosteal\nfibrocrystalline\nfibrocyst\nfibrocystic\nfibrocystoma\nfibrocyte\nfibroelastic\nfibroenchondroma\nfibrofatty\nfibroferrite\nfibroglia\nfibroglioma\nfibrohemorrhagic\nfibroid\nfibroin\nfibrointestinal\nfibroligamentous\nfibrolipoma\nfibrolipomatous\nfibrolite\nfibrolitic\nfibroma\nfibromata\nfibromatoid\nfibromatosis\nfibromatous\nfibromembrane\nfibromembranous\nfibromucous\nfibromuscular\nfibromyectomy\nfibromyitis\nfibromyoma\nfibromyomatous\nfibromyomectomy\nfibromyositis\nfibromyotomy\nfibromyxoma\nfibromyxosarcoma\nfibroneuroma\nfibronuclear\nfibronucleated\nfibropapilloma\nfibropericarditis\nfibroplastic\nfibropolypus\nfibropsammoma\nfibropurulent\nfibroreticulate\nfibrosarcoma\nfibrose\nfibroserous\nfibrosis\nfibrositis\nFibrospongiae\nfibrotic\nfibrotuberculosis\nfibrous\nfibrously\nfibrousness\nfibrovasal\nfibrovascular\nfibry\nfibster\nfibula\nfibulae\nfibular\nfibulare\nfibulocalcaneal\nFicaria\nficary\nfice\nficelle\nfiche\nFichtean\nFichteanism\nfichtelite\nfichu\nficiform\nfickle\nficklehearted\nfickleness\nficklety\nficklewise\nfickly\nfico\nficoid\nFicoidaceae\nFicoideae\nficoides\nfictation\nfictile\nfictileness\nfictility\nfiction\nfictional\nfictionalize\nfictionally\nfictionary\nfictioneer\nfictioner\nfictionist\nfictionistic\nfictionization\nfictionize\nfictionmonger\nfictious\nfictitious\nfictitiously\nfictitiousness\nfictive\nfictively\nFicula\nFicus\nfid\nFidac\nfidalgo\nfidate\nfidation\nfiddle\nfiddleback\nfiddlebrained\nfiddlecome\nfiddledeedee\nfiddlefaced\nfiddlehead\nfiddleheaded\nfiddler\nfiddlerfish\nfiddlery\nfiddlestick\nfiddlestring\nfiddlewood\nfiddley\nfiddling\nfide\nfideicommiss\nfideicommissary\nfideicommission\nfideicommissioner\nfideicommissor\nfideicommissum\nfideism\nfideist\nfidejussion\nfidejussionary\nfidejussor\nfidejussory\nFidele\nFidelia\nFidelio\nfidelity\nfidepromission\nfidepromissor\nFides\nFidessa\nfidfad\nfidge\nfidget\nfidgeter\nfidgetily\nfidgetiness\nfidgeting\nfidgetingly\nfidgety\nFidia\nfidicinal\nfidicinales\nfidicula\nFido\nfiducia\nfiducial\nfiducially\nfiduciarily\nfiduciary\nfiducinales\nfie\nfiedlerite\nfiefdom\nfield\nfieldball\nfieldbird\nfielded\nfielder\nfieldfare\nfieldish\nfieldman\nfieldpiece\nfieldsman\nfieldward\nfieldwards\nfieldwork\nfieldworker\nfieldwort\nfieldy\nfiend\nfiendful\nfiendfully\nfiendhead\nfiendish\nfiendishly\nfiendishness\nfiendism\nfiendlike\nfiendliness\nfiendly\nfiendship\nfient\nFierabras\nFierasfer\nfierasferid\nFierasferidae\nfierasferoid\nfierce\nfiercehearted\nfiercely\nfiercen\nfierceness\nfierding\nfierily\nfieriness\nfiery\nfiesta\nfieulamort\nFife\nfife\nfifer\nfifie\nfifish\nfifo\nfifteen\nfifteener\nfifteenfold\nfifteenth\nfifteenthly\nfifth\nfifthly\nfiftieth\nfifty\nfiftyfold\nfig\nfigaro\nfigbird\nfigeater\nfigent\nfigged\nfiggery\nfigging\nfiggle\nfiggy\nfight\nfightable\nfighter\nfighteress\nfighting\nfightingly\nfightwite\nFigitidae\nfigless\nfiglike\nfigment\nfigmental\nfigpecker\nfigshell\nfigulate\nfigulated\nfiguline\nfigurability\nfigurable\nfigural\nfigurant\nfigurante\nfigurate\nfigurately\nfiguration\nfigurative\nfiguratively\nfigurativeness\nfigure\nfigured\nfiguredly\nfigurehead\nfigureheadless\nfigureheadship\nfigureless\nfigurer\nfiguresome\nfigurette\nfigurial\nfigurine\nfigurism\nfigurist\nfigurize\nfigury\nfigworm\nfigwort\nFiji\nFijian\nfike\nfikie\nfilace\nfilaceous\nfilacer\nFilago\nfilament\nfilamentar\nfilamentary\nfilamented\nfilamentiferous\nfilamentoid\nfilamentose\nfilamentous\nfilamentule\nfilander\nfilanders\nfilao\nfilar\nFilaria\nfilaria\nfilarial\nfilarian\nfilariasis\nfilaricidal\nfilariform\nfilariid\nFilariidae\nfilarious\nfilasse\nfilate\nfilator\nfilature\nfilbert\nfilch\nfilcher\nfilchery\nfilching\nfilchingly\nfile\nfilefish\nfilelike\nfilemaker\nfilemaking\nfilemot\nfiler\nfilesmith\nfilet\nfilial\nfiliality\nfilially\nfilialness\nfiliate\nfiliation\nfilibeg\nfilibranch\nFilibranchia\nfilibranchiate\nfilibuster\nfilibusterer\nfilibusterism\nfilibusterous\nfilical\nFilicales\nfilicauline\nFilices\nfilicic\nfilicidal\nfilicide\nfiliciform\nfilicin\nFilicineae\nfilicinean\nfilicite\nFilicites\nfilicologist\nfilicology\nFilicornia\nfiliety\nfiliferous\nfiliform\nfiliformed\nFiligera\nfiligerous\nfiligree\nfiling\nfilings\nfilionymic\nfiliopietistic\nfilioque\nFilipendula\nfilipendulous\nFilipina\nFilipiniana\nFilipinization\nFilipinize\nFilipino\nfilippo\nfilipuncture\nfilite\nFilix\nfill\nfillable\nfilled\nfillemot\nfiller\nfillercap\nfillet\nfilleter\nfilleting\nfilletlike\nfilletster\nfilleul\nfilling\nfillingly\nfillingness\nfillip\nfillipeen\nfillister\nfillmass\nfillock\nfillowite\nfilly\nfilm\nfilmable\nfilmdom\nfilmet\nfilmgoer\nfilmgoing\nfilmic\nfilmiform\nfilmily\nfilminess\nfilmish\nfilmist\nfilmize\nfilmland\nfilmlike\nfilmogen\nfilmslide\nfilmstrip\nfilmy\nfilo\nfiloplumaceous\nfiloplume\nfilopodium\nFilosa\nfilose\nfiloselle\nfils\nfilter\nfilterability\nfilterable\nfilterableness\nfilterer\nfiltering\nfilterman\nfilth\nfilthify\nfilthily\nfilthiness\nfilthless\nfilthy\nfiltrability\nfiltrable\nfiltratable\nfiltrate\nfiltration\nfimble\nfimbria\nfimbrial\nfimbriate\nfimbriated\nfimbriation\nfimbriatum\nfimbricate\nfimbricated\nfimbrilla\nfimbrillate\nfimbrilliferous\nfimbrillose\nfimbriodentate\nFimbristylis\nfimetarious\nfimicolous\nFin\nfin\nfinable\nfinableness\nfinagle\nfinagler\nfinal\nfinale\nfinalism\nfinalist\nfinality\nfinalize\nfinally\nfinance\nfinancial\nfinancialist\nfinancially\nfinancier\nfinanciery\nfinancist\nfinback\nfinch\nfinchbacked\nfinched\nfinchery\nfind\nfindability\nfindable\nfindal\nfinder\nfindfault\nfinding\nfindjan\nfine\nfineable\nfinebent\nfineish\nfineleaf\nfineless\nfinely\nfinement\nfineness\nfiner\nfinery\nfinespun\nfinesse\nfinesser\nfinestill\nfinestiller\nfinetop\nfinfish\nfinfoot\nFingal\nFingall\nFingallian\nfingent\nfinger\nfingerable\nfingerberry\nfingerbreadth\nfingered\nfingerer\nfingerfish\nfingerflower\nfingerhold\nfingerhook\nfingering\nfingerleaf\nfingerless\nfingerlet\nfingerlike\nfingerling\nfingernail\nfingerparted\nfingerprint\nfingerprinting\nfingerroot\nfingersmith\nfingerspin\nfingerstall\nfingerstone\nfingertip\nfingerwise\nfingerwork\nfingery\nfingrigo\nFingu\nfinial\nfinialed\nfinical\nfinicality\nfinically\nfinicalness\nfinicism\nfinick\nfinickily\nfinickiness\nfinicking\nfinickingly\nfinickingness\nfinific\nfinify\nFiniglacial\nfinikin\nfiniking\nfining\nfinis\nfinish\nfinishable\nfinished\nfinisher\nfinishing\nfinite\nfinitely\nfiniteness\nfinitesimal\nfinitive\nfinitude\nfinity\nfinjan\nfink\nfinkel\nfinland\nFinlander\nfinless\nfinlet\nfinlike\nFinmark\nFinn\nfinnac\nfinned\nfinner\nfinnesko\nFinnic\nFinnicize\nfinnip\nFinnish\nfinny\nfinochio\nFionnuala\nfiord\nfiorded\nFioretti\nfiorin\nfiorite\nFiot\nfip\nfipenny\nfipple\nfique\nfir\nFirbolg\nfirca\nfire\nfireable\nfirearm\nfirearmed\nfireback\nfireball\nfirebird\nfireblende\nfireboard\nfireboat\nfirebolt\nfirebolted\nfirebote\nfirebox\nfireboy\nfirebrand\nfirebrat\nfirebreak\nfirebrick\nfirebug\nfireburn\nfirecoat\nfirecracker\nfirecrest\nfired\nfiredamp\nfiredog\nfiredrake\nfirefall\nfirefang\nfirefanged\nfireflaught\nfireflirt\nfireflower\nfirefly\nfireguard\nfirehouse\nfireless\nfirelight\nfirelike\nfireling\nfirelit\nfirelock\nfireman\nfiremanship\nfiremaster\nfireplace\nfireplug\nfirepower\nfireproof\nfireproofing\nfireproofness\nfirer\nfireroom\nfiresafe\nfiresafeness\nfiresafety\nfireshaft\nfireshine\nfireside\nfiresider\nfiresideship\nfirespout\nfirestone\nfirestopping\nfiretail\nfiretop\nfiretrap\nfirewarden\nfirewater\nfireweed\nfirewood\nfirework\nfireworkless\nfireworky\nfireworm\nfiring\nfirk\nfirker\nfirkin\nfirlot\nfirm\nfirmament\nfirmamental\nfirman\nfirmance\nfirmer\nfirmhearted\nfirmisternal\nFirmisternia\nfirmisternial\nfirmisternous\nfirmly\nfirmness\nfirn\nFirnismalerei\nFiroloida\nfirring\nfirry\nfirst\nfirstcomer\nfirsthand\nfirstling\nfirstly\nfirstness\nfirstship\nfirth\nfisc\nfiscal\nfiscalify\nfiscalism\nfiscalization\nfiscalize\nfiscally\nfischerite\nfise\nfisetin\nfish\nfishable\nfishback\nfishbed\nfishberry\nfishbolt\nfishbone\nfisheater\nfished\nfisher\nfisherboat\nfisherboy\nfisheress\nfisherfolk\nfishergirl\nfisherman\nfisherpeople\nfisherwoman\nfishery\nfishet\nfisheye\nfishfall\nfishful\nfishgarth\nfishgig\nfishhood\nfishhook\nfishhooks\nfishhouse\nfishify\nfishily\nfishiness\nfishing\nfishingly\nfishless\nfishlet\nfishlike\nfishline\nfishling\nfishman\nfishmonger\nfishmouth\nfishplate\nfishpond\nfishpool\nfishpot\nfishpotter\nfishpound\nfishskin\nfishtail\nfishway\nfishweed\nfishweir\nfishwife\nfishwoman\nfishwood\nfishworker\nfishworks\nfishworm\nfishy\nfishyard\nfisnoga\nfissate\nfissicostate\nfissidactyl\nFissidens\nFissidentaceae\nfissidentaceous\nfissile\nfissileness\nfissilingual\nFissilinguia\nfissility\nfission\nfissionable\nfissipalmate\nfissipalmation\nfissiparation\nfissiparism\nfissiparity\nfissiparous\nfissiparously\nfissiparousness\nfissiped\nFissipeda\nfissipedal\nfissipedate\nFissipedia\nfissipedial\nFissipes\nfissirostral\nfissirostrate\nFissirostres\nfissive\nfissural\nfissuration\nfissure\nfissureless\nFissurella\nFissurellidae\nfissuriform\nfissury\nfist\nfisted\nfister\nfistful\nfistiana\nfistic\nfistical\nfisticuff\nfisticuffer\nfisticuffery\nfistify\nfistiness\nfisting\nfistlike\nfistmele\nfistnote\nfistuca\nfistula\nFistulana\nfistular\nFistularia\nFistulariidae\nfistularioid\nfistulate\nfistulated\nfistulatome\nfistulatous\nfistule\nfistuliform\nFistulina\nfistulize\nfistulose\nfistulous\nfistwise\nfisty\nfit\nfitch\nfitched\nfitchee\nfitcher\nfitchery\nfitchet\nfitchew\nfitful\nfitfully\nfitfulness\nfitly\nfitment\nfitness\nfitout\nfitroot\nfittable\nfittage\nfitted\nfittedness\nfitten\nfitter\nfitters\nfittily\nfittiness\nfitting\nfittingly\nfittingness\nFittonia\nfitty\nfittyfied\nfittyways\nfittywise\nfitweed\nFitzclarence\nFitzroy\nFitzroya\nFiuman\nfive\nfivebar\nfivefold\nfivefoldness\nfiveling\nfivepence\nfivepenny\nfivepins\nfiver\nfives\nfivescore\nfivesome\nfivestones\nfix\nfixable\nfixage\nfixate\nfixatif\nfixation\nfixative\nfixator\nfixature\nfixed\nfixedly\nfixedness\nfixer\nfixidity\nfixing\nfixity\nfixture\nfixtureless\nfixure\nfizelyite\nfizgig\nfizz\nfizzer\nfizzle\nfizzy\nfjarding\nfjeld\nfjerding\nFjorgyn\nflabbergast\nflabbergastation\nflabbily\nflabbiness\nflabby\nflabellarium\nflabellate\nflabellation\nflabellifoliate\nflabelliform\nflabellinerved\nflabellum\nflabrum\nflaccid\nflaccidity\nflaccidly\nflaccidness\nflacherie\nFlacian\nFlacianism\nFlacianist\nflack\nflacked\nflacker\nflacket\nFlacourtia\nFlacourtiaceae\nflacourtiaceous\nflaff\nflaffer\nflag\nflagboat\nflagellant\nflagellantism\nflagellar\nFlagellaria\nFlagellariaceae\nflagellariaceous\nFlagellata\nFlagellatae\nflagellate\nflagellated\nflagellation\nflagellative\nflagellator\nflagellatory\nflagelliferous\nflagelliform\nflagellist\nflagellosis\nflagellula\nflagellum\nflageolet\nflagfall\nflagger\nflaggery\nflaggily\nflagginess\nflagging\nflaggingly\nflaggish\nflaggy\nflagitate\nflagitation\nflagitious\nflagitiously\nflagitiousness\nflagleaf\nflagless\nflaglet\nflaglike\nflagmaker\nflagmaking\nflagman\nflagon\nflagonet\nflagonless\nflagpole\nflagrance\nflagrancy\nflagrant\nflagrantly\nflagrantness\nflagroot\nflagship\nflagstaff\nflagstick\nflagstone\nflagworm\nflail\nflaillike\nflair\nflaith\nflaithship\nflajolotite\nflak\nflakage\nflake\nflakeless\nflakelet\nflaker\nflakily\nflakiness\nflaky\nflam\nFlamandization\nFlamandize\nflamant\nflamb\nflambeau\nflambeaux\nflamberg\nflamboyance\nflamboyancy\nflamboyant\nflamboyantism\nflamboyantize\nflamboyantly\nflamboyer\nflame\nflamed\nflameflower\nflameless\nflamelet\nflamelike\nflamen\nflamenco\nflamenship\nflameproof\nflamer\nflamfew\nflamineous\nflaming\nFlamingant\nflamingly\nflamingo\nFlaminian\nflaminica\nflaminical\nflammability\nflammable\nflammeous\nflammiferous\nflammulated\nflammulation\nflammule\nflamy\nflan\nflancard\nflanch\nflanched\nflanconade\nflandan\nflandowser\nflane\nflange\nflangeless\nflanger\nflangeway\nflank\nflankard\nflanked\nflanker\nflanking\nflankwise\nflanky\nflannel\nflannelbush\nflanneled\nflannelette\nflannelflower\nflannelleaf\nflannelly\nflannelmouth\nflannelmouthed\nflannels\nflanque\nflap\nflapcake\nflapdock\nflapdoodle\nflapdragon\nflapjack\nflapmouthed\nflapper\nflapperdom\nflapperhood\nflapperish\nflapperism\nflare\nflareback\nflareboard\nflareless\nflaring\nflaringly\nflary\nflaser\nflash\nflashboard\nflasher\nflashet\nflashily\nflashiness\nflashing\nflashingly\nflashlight\nflashlike\nflashly\nflashness\nflashover\nflashpan\nflashproof\nflashtester\nflashy\nflask\nflasker\nflasket\nflasklet\nflasque\nflat\nflatboat\nflatbottom\nflatcap\nflatcar\nflatdom\nflated\nflatfish\nflatfoot\nflathat\nflathead\nflatiron\nflatland\nflatlet\nflatling\nflatly\nflatman\nflatness\nflatnose\nflatten\nflattener\nflattening\nflatter\nflatterable\nflattercap\nflatterdock\nflatterer\nflattering\nflatteringly\nflatteringness\nflattery\nflattie\nflatting\nflattish\nflattop\nflatulence\nflatulency\nflatulent\nflatulently\nflatulentness\nflatus\nflatware\nflatway\nflatways\nflatweed\nflatwise\nflatwoods\nflatwork\nflatworm\nFlaubertian\nflaught\nflaughter\nflaunt\nflaunter\nflauntily\nflauntiness\nflaunting\nflauntingly\nflaunty\nflautino\nflautist\nflavanilin\nflavaniline\nflavanthrene\nflavanthrone\nflavedo\nFlaveria\nflavescence\nflavescent\nFlavia\nFlavian\nflavic\nflavicant\nflavid\nflavin\nflavine\nFlavius\nflavo\nFlavobacterium\nflavone\nflavoprotein\nflavopurpurin\nflavor\nflavored\nflavorer\nflavorful\nflavoring\nflavorless\nflavorous\nflavorsome\nflavory\nflavour\nflaw\nflawed\nflawflower\nflawful\nflawless\nflawlessly\nflawlessness\nflawn\nflawy\nflax\nflaxboard\nflaxbush\nflaxdrop\nflaxen\nflaxlike\nflaxman\nflaxseed\nflaxtail\nflaxweed\nflaxwench\nflaxwife\nflaxwoman\nflaxwort\nflaxy\nflay\nflayer\nflayflint\nflea\nfleabane\nfleabite\nfleadock\nfleam\nfleaseed\nfleaweed\nfleawood\nfleawort\nfleay\nflebile\nfleche\nflechette\nfleck\nflecken\nflecker\nfleckiness\nfleckled\nfleckless\nflecklessly\nflecky\nflecnodal\nflecnode\nflection\nflectional\nflectionless\nflector\nfled\nfledge\nfledgeless\nfledgling\nfledgy\nflee\nfleece\nfleeceable\nfleeced\nfleeceflower\nfleeceless\nfleecelike\nfleecer\nfleech\nfleechment\nfleecily\nfleeciness\nfleecy\nfleer\nfleerer\nfleering\nfleeringly\nfleet\nfleeter\nfleetful\nfleeting\nfleetingly\nfleetingness\nfleetings\nfleetly\nfleetness\nfleetwing\nFlem\nFleming\nFlemish\nflemish\nflench\nflense\nflenser\nflerry\nflesh\nfleshbrush\nfleshed\nfleshen\nflesher\nfleshful\nfleshhood\nfleshhook\nfleshiness\nfleshing\nfleshings\nfleshless\nfleshlike\nfleshlily\nfleshliness\nfleshly\nfleshment\nfleshmonger\nfleshpot\nfleshy\nflet\nFleta\nfletch\nFletcher\nfletcher\nFletcherism\nFletcherite\nFletcherize\nflether\nfleuret\nfleurettee\nfleuronnee\nfleury\nflew\nflewed\nflewit\nflews\nflex\nflexanimous\nflexed\nflexibility\nflexible\nflexibleness\nflexibly\nflexile\nflexility\nflexion\nflexionless\nflexor\nflexuose\nflexuosity\nflexuous\nflexuously\nflexuousness\nflexural\nflexure\nflexured\nfley\nfleyedly\nfleyedness\nfleyland\nfleysome\nflibbertigibbet\nflicflac\nflick\nflicker\nflickering\nflickeringly\nflickerproof\nflickertail\nflickery\nflicky\nflidder\nflier\nfligger\nflight\nflighted\nflighter\nflightful\nflightily\nflightiness\nflighting\nflightless\nflightshot\nflighty\nflimflam\nflimflammer\nflimflammery\nflimmer\nflimp\nflimsily\nflimsiness\nflimsy\nflinch\nflincher\nflinching\nflinchingly\nflinder\nFlindersia\nflindosa\nflindosy\nfling\nflinger\nflingy\nflinkite\nflint\nflinter\nflinthearted\nflintify\nflintily\nflintiness\nflintless\nflintlike\nflintlock\nflintwood\nflintwork\nflintworker\nflinty\nflioma\nflip\nflipe\nflipjack\nflippancy\nflippant\nflippantly\nflippantness\nflipper\nflipperling\nflippery\nflirt\nflirtable\nflirtation\nflirtational\nflirtationless\nflirtatious\nflirtatiously\nflirtatiousness\nflirter\nflirtigig\nflirting\nflirtingly\nflirtish\nflirtishness\nflirtling\nflirty\nflisk\nflisky\nflit\nflitch\nflitchen\nflite\nflitfold\nfliting\nflitter\nflitterbat\nflittermouse\nflittern\nflitting\nflittingly\nflitwite\nflivver\nflix\nflixweed\nFlo\nfloat\nfloatability\nfloatable\nfloatage\nfloatation\nfloatative\nfloatboard\nfloater\nfloatiness\nfloating\nfloatingly\nfloative\nfloatless\nfloatmaker\nfloatman\nfloatplane\nfloatsman\nfloatstone\nfloaty\nflob\nflobby\nfloc\nfloccillation\nfloccipend\nfloccose\nfloccosely\nflocculable\nflocculant\nfloccular\nflocculate\nflocculation\nflocculator\nfloccule\nflocculence\nflocculency\nflocculent\nflocculently\nflocculose\nflocculus\nfloccus\nflock\nflocker\nflocking\nflockless\nflocklike\nflockman\nflockmaster\nflockowner\nflockwise\nflocky\nflocoon\nflodge\nfloe\nfloeberg\nFloerkea\nfloey\nflog\nfloggable\nflogger\nflogging\nfloggingly\nflogmaster\nflogster\nflokite\nflong\nflood\nfloodable\nfloodage\nfloodboard\nfloodcock\nflooded\nflooder\nfloodgate\nflooding\nfloodless\nfloodlet\nfloodlight\nfloodlighting\nfloodlike\nfloodmark\nfloodometer\nfloodproof\nfloodtime\nfloodwater\nfloodway\nfloodwood\nfloody\nfloor\nfloorage\nfloorcloth\nfloorer\nfloorhead\nflooring\nfloorless\nfloorman\nfloorwalker\nfloorward\nfloorway\nfloorwise\nfloozy\nflop\nflophouse\nflopover\nflopper\nfloppers\nfloppily\nfloppiness\nfloppy\nflopwing\nFlora\nflora\nfloral\nFloralia\nfloralize\nflorally\nfloramor\nfloran\nflorate\nfloreal\nfloreate\nFlorence\nflorence\nflorent\nFlorentine\nFlorentinism\nflorentium\nflores\nflorescence\nflorescent\nfloressence\nfloret\nfloreted\nfloretum\nFloria\nFlorian\nfloriate\nfloriated\nfloriation\nflorican\nfloricin\nfloricultural\nfloriculturally\nfloriculture\nfloriculturist\nflorid\nFlorida\nFloridan\nFlorideae\nfloridean\nflorideous\nFloridian\nfloridity\nfloridly\nfloridness\nfloriferous\nfloriferously\nfloriferousness\nflorification\nfloriform\nflorigen\nflorigenic\nflorigraphy\nflorikan\nfloriken\nflorilegium\nflorimania\nflorimanist\nflorin\nFlorinda\nfloriparous\nfloripondio\nfloriscope\nFlorissant\nflorist\nfloristic\nfloristically\nfloristics\nfloristry\nflorisugent\nflorivorous\nfloroon\nfloroscope\nflorula\nflorulent\nflory\nfloscular\nFloscularia\nfloscularian\nFlosculariidae\nfloscule\nflosculose\nflosculous\nflosh\nfloss\nflosser\nflossflower\nFlossie\nflossification\nflossing\nflossy\nflot\nflota\nflotage\nflotant\nflotation\nflotative\nflotilla\nflotorial\nflotsam\nflounce\nflouncey\nflouncing\nflounder\nfloundering\nflounderingly\nflour\nflourish\nflourishable\nflourisher\nflourishing\nflourishingly\nflourishment\nflourishy\nflourlike\nfloury\nflouse\nflout\nflouter\nflouting\nfloutingly\nflow\nflowable\nflowage\nflower\nflowerage\nflowered\nflowerer\nfloweret\nflowerful\nflowerily\nfloweriness\nflowering\nflowerist\nflowerless\nflowerlessness\nflowerlet\nflowerlike\nflowerpecker\nflowerpot\nflowerwork\nflowery\nflowing\nflowingly\nflowingness\nflowmanostat\nflowmeter\nflown\nflowoff\nFloyd\nflu\nfluate\nfluavil\nflub\nflubdub\nflubdubbery\nflucan\nfluctiferous\nfluctigerous\nfluctisonant\nfluctisonous\nfluctuability\nfluctuable\nfluctuant\nfluctuate\nfluctuation\nfluctuosity\nfluctuous\nflue\nflued\nflueless\nfluellen\nfluellite\nflueman\nfluency\nfluent\nfluently\nfluentness\nfluer\nfluework\nfluey\nfluff\nfluffer\nfluffily\nfluffiness\nfluffy\nFlugelhorn\nflugelman\nfluible\nfluid\nfluidacetextract\nfluidal\nfluidally\nfluidextract\nfluidglycerate\nfluidible\nfluidic\nfluidification\nfluidifier\nfluidify\nfluidimeter\nfluidism\nfluidist\nfluidity\nfluidization\nfluidize\nfluidly\nfluidness\nfluidram\nfluigram\nfluitant\nfluke\nfluked\nflukeless\nflukeworm\nflukewort\nflukily\nflukiness\nfluking\nfluky\nflumdiddle\nflume\nflumerin\nfluminose\nflummadiddle\nflummer\nflummery\nflummox\nflummydiddle\nflump\nflung\nflunk\nflunker\nflunkeydom\nflunkeyhood\nflunkeyish\nflunkeyize\nflunky\nflunkydom\nflunkyhood\nflunkyish\nflunkyism\nflunkyistic\nflunkyite\nflunkyize\nfluoaluminate\nfluoaluminic\nfluoarsenate\nfluoborate\nfluoboric\nfluoborid\nfluoboride\nfluoborite\nfluobromide\nfluocarbonate\nfluocerine\nfluocerite\nfluochloride\nfluohydric\nfluophosphate\nfluor\nfluoran\nfluoranthene\nfluorapatite\nfluorate\nfluorbenzene\nfluorene\nfluorenyl\nfluoresage\nfluoresce\nfluorescein\nfluorescence\nfluorescent\nfluorescigenic\nfluorescigenous\nfluorescin\nfluorhydric\nfluoric\nfluoridate\nfluoridation\nfluoride\nfluoridization\nfluoridize\nfluorimeter\nfluorinate\nfluorination\nfluorindine\nfluorine\nfluorite\nfluormeter\nfluorobenzene\nfluoroborate\nfluoroform\nfluoroformol\nfluorogen\nfluorogenic\nfluorography\nfluoroid\nfluorometer\nfluoroscope\nfluoroscopic\nfluoroscopy\nfluorosis\nfluorotype\nfluorspar\nfluoryl\nfluosilicate\nfluosilicic\nfluotantalate\nfluotantalic\nfluotitanate\nfluotitanic\nfluozirconic\nflurn\nflurr\nflurried\nflurriedly\nflurriment\nflurry\nflush\nflushboard\nflusher\nflusherman\nflushgate\nflushing\nflushingly\nflushness\nflushy\nflusk\nflusker\nfluster\nflusterate\nflusteration\nflusterer\nflusterment\nflustery\nFlustra\nflustrine\nflustroid\nflustrum\nflute\nflutebird\nfluted\nflutelike\nflutemouth\nfluter\nflutework\nFlutidae\nflutina\nfluting\nflutist\nflutter\nflutterable\nflutteration\nflutterer\nfluttering\nflutteringly\nflutterless\nflutterment\nfluttersome\nfluttery\nfluty\nfluvial\nfluvialist\nfluviatic\nfluviatile\nfluvicoline\nfluvioglacial\nfluviograph\nfluviolacustrine\nfluviology\nfluviomarine\nfluviometer\nfluviose\nfluvioterrestrial\nfluviovolcanic\nflux\nfluxation\nfluxer\nfluxibility\nfluxible\nfluxibleness\nfluxibly\nfluxile\nfluxility\nfluxion\nfluxional\nfluxionally\nfluxionary\nfluxionist\nfluxmeter\nfluxroot\nfluxweed\nfly\nflyable\nflyaway\nflyback\nflyball\nflybane\nflybelt\nflyblow\nflyblown\nflyboat\nflyboy\nflycatcher\nflyeater\nflyer\nflyflap\nflyflapper\nflyflower\nflying\nflyingly\nflyleaf\nflyless\nflyman\nflyness\nflypaper\nflype\nflyproof\nFlysch\nflyspeck\nflytail\nflytier\nflytrap\nflyway\nflyweight\nflywheel\nflywinch\nflywort\nFo\nfoal\nfoalfoot\nfoalhood\nfoaly\nfoam\nfoambow\nfoamer\nfoamflower\nfoamily\nfoaminess\nfoaming\nfoamingly\nfoamless\nfoamlike\nfoamy\nfob\nfocal\nfocalization\nfocalize\nfocally\nfocaloid\nfoci\nfocimeter\nfocimetry\nfocoids\nfocometer\nfocometry\nfocsle\nfocus\nfocusable\nfocuser\nfocusless\nfod\nfodda\nfodder\nfodderer\nfoddering\nfodderless\nfoder\nfodge\nfodgel\nfodient\nFodientia\nfoe\nfoehn\nfoehnlike\nfoeish\nfoeless\nfoelike\nfoeman\nfoemanship\nFoeniculum\nfoenngreek\nfoeship\nfoetalization\nfog\nfogbound\nfogbow\nfogdog\nfogdom\nfogeater\nfogey\nfogfruit\nfoggage\nfogged\nfogger\nfoggily\nfogginess\nfoggish\nfoggy\nfoghorn\nfogle\nfogless\nfogman\nfogo\nfogon\nfogou\nfogproof\nfogram\nfogramite\nfogramity\nfogscoffer\nfogus\nfogy\nfogydom\nfogyish\nfogyism\nfohat\nfoible\nfoil\nfoilable\nfoiler\nfoiling\nfoilsman\nfoining\nfoiningly\nFoism\nfoison\nfoisonless\nFoist\nfoist\nfoister\nfoistiness\nfoisty\nfoiter\nFokker\nfold\nfoldable\nfoldage\nfoldboat\nfoldcourse\nfolded\nfoldedly\nfolden\nfolder\nfolding\nfoldless\nfoldskirt\nfoldure\nfoldwards\nfoldy\nfole\nfolgerite\nfolia\nfoliaceous\nfoliaceousness\nfoliage\nfoliaged\nfoliageous\nfolial\nfoliar\nfoliary\nfoliate\nfoliated\nfoliation\nfoliature\nfolie\nfoliicolous\nfoliiferous\nfoliiform\nfolio\nfoliobranch\nfoliobranchiate\nfoliocellosis\nfoliolate\nfoliole\nfolioliferous\nfoliolose\nfoliose\nfoliosity\nfoliot\nfolious\nfoliously\nfolium\nfolk\nfolkcraft\nfolkfree\nfolkland\nfolklore\nfolkloric\nfolklorish\nfolklorism\nfolklorist\nfolkloristic\nfolkmoot\nfolkmooter\nfolkmot\nfolkmote\nfolkmoter\nfolkright\nfolksiness\nfolksy\nFolkvang\nFolkvangr\nfolkway\nfolky\nfolles\nfolletage\nfollicle\nfollicular\nfolliculate\nfolliculated\nfollicule\nfolliculin\nFolliculina\nfolliculitis\nfolliculose\nfolliculosis\nfolliculous\nfolliful\nfollis\nfollow\nfollowable\nfollower\nfollowership\nfollowing\nfollowingly\nfolly\nfollyproof\nFomalhaut\nfoment\nfomentation\nfomenter\nfomes\nfomites\nFon\nfondak\nfondant\nfondish\nfondle\nfondler\nfondlesome\nfondlike\nfondling\nfondlingly\nfondly\nfondness\nfondu\nfondue\nfonduk\nfonly\nfonnish\nfono\nfons\nfont\nFontainea\nfontal\nfontally\nfontanel\nfontange\nfonted\nfontful\nfonticulus\nfontinal\nFontinalaceae\nfontinalaceous\nFontinalis\nfontlet\nfoo\nFoochow\nFoochowese\nfood\nfooder\nfoodful\nfoodless\nfoodlessness\nfoodstuff\nfoody\nfoofaraw\nfool\nfooldom\nfoolery\nfooless\nfoolfish\nfoolhardihood\nfoolhardily\nfoolhardiness\nfoolhardiship\nfoolhardy\nfooling\nfoolish\nfoolishly\nfoolishness\nfoollike\nfoolocracy\nfoolproof\nfoolproofness\nfoolscap\nfoolship\nfooner\nfooster\nfoosterer\nfoot\nfootage\nfootback\nfootball\nfootballer\nfootballist\nfootband\nfootblower\nfootboard\nfootboy\nfootbreadth\nfootbridge\nfootcloth\nfooted\nfooteite\nfooter\nfootfall\nfootfarer\nfootfault\nfootfolk\nfootful\nfootganger\nfootgear\nfootgeld\nfoothalt\nfoothill\nfoothold\nfoothook\nfoothot\nfooting\nfootingly\nfootings\nfootle\nfootler\nfootless\nfootlicker\nfootlight\nfootlights\nfootling\nfootlining\nfootlock\nfootmaker\nfootman\nfootmanhood\nfootmanry\nfootmanship\nfootmark\nfootnote\nfootnoted\nfootpace\nfootpad\nfootpaddery\nfootpath\nfootpick\nfootplate\nfootprint\nfootrail\nfootrest\nfootrill\nfootroom\nfootrope\nfoots\nfootscald\nfootslog\nfootslogger\nfootsore\nfootsoreness\nfootstalk\nfootstall\nfootstep\nfootstick\nfootstock\nfootstone\nfootstool\nfootwalk\nfootwall\nfootway\nfootwear\nfootwork\nfootworn\nfooty\nfooyoung\nfoozle\nfoozler\nfop\nfopling\nfoppery\nfoppish\nfoppishly\nfoppishness\nfoppy\nfopship\nFor\nfor\nfora\nforage\nforagement\nforager\nforalite\nforamen\nforaminated\nforamination\nforaminifer\nForaminifera\nforaminiferal\nforaminiferan\nforaminiferous\nforaminose\nforaminous\nforaminulate\nforaminule\nforaminulose\nforaminulous\nforane\nforaneen\nforaneous\nforasmuch\nforay\nforayer\nforb\nforbade\nforbar\nforbathe\nforbear\nforbearable\nforbearance\nforbearant\nforbearantly\nforbearer\nforbearing\nforbearingly\nforbearingness\nforbesite\nforbid\nforbiddable\nforbiddal\nforbiddance\nforbidden\nforbiddenly\nforbiddenness\nforbidder\nforbidding\nforbiddingly\nforbiddingness\nforbit\nforbled\nforblow\nforbore\nforborne\nforbow\nforby\nforce\nforceable\nforced\nforcedly\nforcedness\nforceful\nforcefully\nforcefulness\nforceless\nforcemeat\nforcement\nforceps\nforcepslike\nforcer\nforchase\nforche\nforcibility\nforcible\nforcibleness\nforcibly\nforcing\nforcingly\nforcipate\nforcipated\nforcipes\nforcipiform\nforcipressure\nForcipulata\nforcipulate\nforcleave\nforconceit\nford\nfordable\nfordableness\nfordays\nFordicidia\nfording\nfordless\nfordo\nfordone\nfordwine\nfordy\nfore\nforeaccounting\nforeaccustom\nforeacquaint\nforeact\nforeadapt\nforeadmonish\nforeadvertise\nforeadvice\nforeadvise\nforeallege\nforeallot\nforeannounce\nforeannouncement\nforeanswer\nforeappoint\nforeappointment\nforearm\nforeassign\nforeassurance\nforebackwardly\nforebay\nforebear\nforebemoan\nforebemoaned\nforebespeak\nforebitt\nforebitten\nforebitter\nforebless\nforeboard\nforebode\nforebodement\nforeboder\nforeboding\nforebodingly\nforebodingness\nforebody\nforeboot\nforebowels\nforebowline\nforebrace\nforebrain\nforebreast\nforebridge\nforeburton\nforebush\nforecar\nforecarriage\nforecast\nforecaster\nforecasting\nforecastingly\nforecastle\nforecastlehead\nforecastleman\nforecatching\nforecatharping\nforechamber\nforechase\nforechoice\nforechoose\nforechurch\nforecited\nforeclaw\nforeclosable\nforeclose\nforeclosure\nforecome\nforecomingness\nforecommend\nforeconceive\nforeconclude\nforecondemn\nforeconscious\nforeconsent\nforeconsider\nforecontrive\nforecool\nforecooler\nforecounsel\nforecount\nforecourse\nforecourt\nforecover\nforecovert\nforedate\nforedawn\nforeday\nforedeck\nforedeclare\nforedecree\nforedeep\nforedefeated\nforedefine\nforedenounce\nforedescribe\nforedeserved\nforedesign\nforedesignment\nforedesk\nforedestine\nforedestiny\nforedetermination\nforedetermine\nforedevised\nforedevote\nforediscern\nforedispose\nforedivine\nforedone\nforedoom\nforedoomer\nforedoor\nforeface\nforefather\nforefatherly\nforefault\nforefeel\nforefeeling\nforefeelingly\nforefelt\nforefield\nforefigure\nforefin\nforefinger\nforefit\nforeflank\nforeflap\nforeflipper\nforefoot\nforefront\nforegallery\nforegame\nforeganger\nforegate\nforegift\nforegirth\nforeglance\nforegleam\nforeglimpse\nforeglow\nforego\nforegoer\nforegoing\nforegone\nforegoneness\nforeground\nforeguess\nforeguidance\nforehalf\nforehall\nforehammer\nforehand\nforehanded\nforehandedness\nforehandsel\nforehard\nforehatch\nforehatchway\nforehead\nforeheaded\nforehear\nforehearth\nforeheater\nforehill\nforehinting\nforehold\nforehood\nforehoof\nforehook\nforeign\nforeigneering\nforeigner\nforeignership\nforeignism\nforeignization\nforeignize\nforeignly\nforeignness\nforeimagination\nforeimagine\nforeimpressed\nforeimpression\nforeinclined\nforeinstruct\nforeintend\nforeiron\nforejudge\nforejudgment\nforekeel\nforeking\nforeknee\nforeknow\nforeknowable\nforeknower\nforeknowing\nforeknowingly\nforeknowledge\nforel\nforelady\nforeland\nforelay\nforeleech\nforeleg\nforelimb\nforelive\nforellenstein\nforelock\nforelook\nforeloop\nforelooper\nforeloper\nforemade\nforeman\nforemanship\nforemarch\nforemark\nforemartyr\nforemast\nforemasthand\nforemastman\nforemean\nforemeant\nforemelt\nforemention\nforementioned\nforemessenger\nforemilk\nforemisgiving\nforemistress\nforemost\nforemostly\nforemother\nforename\nforenamed\nforenews\nforenight\nforenoon\nforenote\nforenoted\nforenotice\nforenotion\nforensal\nforensic\nforensical\nforensicality\nforensically\nforeordain\nforeordainment\nforeorder\nforeordinate\nforeordination\nforeorlop\nforepad\nforepale\nforeparents\nforepart\nforepassed\nforepast\nforepaw\nforepayment\nforepeak\nforeperiod\nforepiece\nforeplace\nforeplan\nforeplanting\nforepole\nforeporch\nforepossessed\nforepost\nforepredicament\nforepreparation\nforeprepare\nforepretended\nforeproduct\nforeproffer\nforepromise\nforepromised\nforeprovided\nforeprovision\nforepurpose\nforequarter\nforequoted\nforeran\nforerank\nforereach\nforereaching\nforeread\nforereading\nforerecited\nforereckon\nforerehearsed\nforeremembered\nforereport\nforerequest\nforerevelation\nforerib\nforerigging\nforeright\nforeroom\nforeroyal\nforerun\nforerunner\nforerunnership\nforerunnings\nforesaddle\nforesaid\nforesail\nforesay\nforescene\nforescent\nforeschool\nforeschooling\nforescript\nforeseason\nforeseat\nforesee\nforeseeability\nforeseeable\nforeseeingly\nforeseer\nforeseize\nforesend\nforesense\nforesentence\nforeset\nforesettle\nforesettled\nforeshadow\nforeshadower\nforeshaft\nforeshank\nforeshape\nforesheet\nforeshift\nforeship\nforeshock\nforeshoe\nforeshop\nforeshore\nforeshorten\nforeshortening\nforeshot\nforeshoulder\nforeshow\nforeshower\nforeshroud\nforeside\nforesight\nforesighted\nforesightedness\nforesightful\nforesightless\nforesign\nforesignify\nforesin\nforesing\nforesinger\nforeskin\nforeskirt\nforesleeve\nforesound\nforespeak\nforespecified\nforespeed\nforespencer\nforest\nforestaff\nforestage\nforestair\nforestal\nforestall\nforestaller\nforestallment\nforestarling\nforestate\nforestation\nforestay\nforestaysail\nforestcraft\nforested\nforesteep\nforestem\nforestep\nforester\nforestership\nforestful\nforestial\nForestian\nforestick\nForestiera\nforestine\nforestish\nforestless\nforestlike\nforestology\nforestral\nforestress\nforestry\nforestside\nforestudy\nforestwards\nforesty\nforesummer\nforesummon\nforesweat\nforetack\nforetackle\nforetalk\nforetalking\nforetaste\nforetaster\nforetell\nforetellable\nforeteller\nforethink\nforethinker\nforethought\nforethoughted\nforethoughtful\nforethoughtfully\nforethoughtfulness\nforethoughtless\nforethrift\nforetime\nforetimed\nforetoken\nforetold\nforetop\nforetopman\nforetrace\nforetrysail\nforeturn\nforetype\nforetypified\nforeuse\nforeutter\nforevalue\nforever\nforevermore\nforeview\nforevision\nforevouch\nforevouched\nforevow\nforewarm\nforewarmer\nforewarn\nforewarner\nforewarning\nforewarningly\nforewaters\nforeween\nforeweep\nforeweigh\nforewing\nforewinning\nforewisdom\nforewish\nforewoman\nforewonted\nforeword\nforeworld\nforeworn\nforewritten\nforewrought\nforeyard\nforeyear\nforfairn\nforfar\nforfare\nforfars\nforfault\nforfaulture\nforfeit\nforfeiter\nforfeits\nforfeiture\nforfend\nforficate\nforficated\nforfication\nforficiform\nForficula\nforficulate\nForficulidae\nforfouchten\nforfoughen\nforfoughten\nforgainst\nforgather\nforge\nforgeability\nforgeable\nforged\nforgedly\nforgeful\nforgeman\nforger\nforgery\nforget\nforgetful\nforgetfully\nforgetfulness\nforgetive\nforgetness\nforgettable\nforgetter\nforgetting\nforgettingly\nforgie\nforging\nforgivable\nforgivableness\nforgivably\nforgive\nforgiveless\nforgiveness\nforgiver\nforgiving\nforgivingly\nforgivingness\nforgo\nforgoer\nforgot\nforgotten\nforgottenness\nforgrow\nforgrown\nforhoo\nforhooy\nforhow\nforinsec\nforint\nforisfamiliate\nforisfamiliation\nforjesket\nforjudge\nforjudger\nfork\nforkable\nforkbeard\nforked\nforkedly\nforkedness\nforker\nforkful\nforkhead\nforkiness\nforkless\nforklike\nforkman\nforksmith\nforktail\nforkwise\nforky\nforleft\nforlet\nforlorn\nforlornity\nforlornly\nforlornness\nform\nformability\nformable\nformably\nformagen\nformagenic\nformal\nformalazine\nformaldehyde\nformaldehydesulphoxylate\nformaldehydesulphoxylic\nformaldoxime\nformalesque\nFormalin\nformalism\nformalist\nformalistic\nformalith\nformality\nformalization\nformalize\nformalizer\nformally\nformalness\nformamide\nformamidine\nformamido\nformamidoxime\nformanilide\nformant\nformat\nformate\nformation\nformational\nformative\nformatively\nformativeness\nformature\nformazyl\nforme\nformed\nformedon\nformee\nformel\nformene\nformenic\nformer\nformeret\nformerly\nformerness\nformful\nformiate\nformic\nFormica\nformican\nFormicariae\nformicarian\nFormicariidae\nformicarioid\nformicarium\nformicaroid\nformicary\nformicate\nformication\nformicative\nformicicide\nformicid\nFormicidae\nformicide\nFormicina\nFormicinae\nformicine\nFormicivora\nformicivorous\nFormicoidea\nformidability\nformidable\nformidableness\nformidably\nformin\nforminate\nforming\nformless\nformlessly\nformlessness\nFormol\nformolite\nformonitrile\nFormosan\nformose\nformoxime\nformula\nformulable\nformulae\nformulaic\nformular\nformularism\nformularist\nformularistic\nformularization\nformularize\nformulary\nformulate\nformulation\nformulator\nformulatory\nformule\nformulism\nformulist\nformulistic\nformulization\nformulize\nformulizer\nformwork\nformy\nformyl\nformylal\nformylate\nformylation\nfornacic\nFornax\nfornaxid\nfornenst\nfornent\nfornical\nfornicate\nfornicated\nfornication\nfornicator\nfornicatress\nfornicatrix\nforniciform\nforninst\nfornix\nforpet\nforpine\nforpit\nforprise\nforrad\nforrard\nforride\nforrit\nforritsome\nforrue\nforsake\nforsaken\nforsakenly\nforsakenness\nforsaker\nforset\nforslow\nforsooth\nforspeak\nforspend\nforspread\nForst\nforsterite\nforswear\nforswearer\nforsworn\nforswornness\nForsythia\nfort\nfortalice\nforte\nfortescue\nfortescure\nforth\nforthbring\nforthbringer\nforthcome\nforthcomer\nforthcoming\nforthcomingness\nforthcut\nforthfare\nforthfigured\nforthgaze\nforthgo\nforthgoing\nforthink\nforthputting\nforthright\nforthrightly\nforthrightness\nforthrights\nforthtell\nforthteller\nforthwith\nforthy\nforties\nfortieth\nfortifiable\nfortification\nfortifier\nfortify\nfortifying\nfortifyingly\nfortin\nfortis\nfortissimo\nfortitude\nfortitudinous\nfortlet\nfortnight\nfortnightly\nfortravail\nfortread\nfortress\nfortuitism\nfortuitist\nfortuitous\nfortuitously\nfortuitousness\nfortuity\nfortunate\nfortunately\nfortunateness\nfortune\nfortuned\nfortuneless\nFortunella\nfortunetell\nfortuneteller\nfortunetelling\nfortunite\nforty\nfortyfold\nforum\nforumize\nforwander\nforward\nforwardal\nforwardation\nforwarder\nforwarding\nforwardly\nforwardness\nforwards\nforwean\nforweend\nforwent\nforwoden\nforworden\nfosh\nfosie\nFosite\nfossa\nfossage\nfossane\nfossarian\nfosse\nfossed\nfossette\nfossick\nfossicker\nfossiform\nfossil\nfossilage\nfossilated\nfossilation\nfossildom\nfossiled\nfossiliferous\nfossilification\nfossilify\nfossilism\nfossilist\nfossilizable\nfossilization\nfossilize\nfossillike\nfossilogist\nfossilogy\nfossilological\nfossilologist\nfossilology\nfossor\nFossores\nFossoria\nfossorial\nfossorious\nfossula\nfossulate\nfossule\nfossulet\nfostell\nFoster\nfoster\nfosterable\nfosterage\nfosterer\nfosterhood\nfostering\nfosteringly\nfosterite\nfosterland\nfosterling\nfostership\nfostress\nfot\nfotch\nfother\nFothergilla\nfotmal\nfotui\nfou\nfoud\nfoudroyant\nfouette\nfougade\nfougasse\nfought\nfoughten\nfoughty\nfoujdar\nfoujdary\nfoul\nfoulage\nfoulard\nfouler\nfouling\nfoulish\nfoully\nfoulmouthed\nfoulmouthedly\nfoulmouthedness\nfoulness\nfoulsome\nfoumart\nfoun\nfound\nfoundation\nfoundational\nfoundationally\nfoundationary\nfoundationed\nfoundationer\nfoundationless\nfoundationlessness\nfounder\nfounderous\nfoundership\nfoundery\nfounding\nfoundling\nfoundress\nfoundry\nfoundryman\nfount\nfountain\nfountained\nfountaineer\nfountainhead\nfountainless\nfountainlet\nfountainous\nfountainously\nfountainwise\nfountful\nFouquieria\nFouquieriaceae\nfouquieriaceous\nfour\nfourble\nfourche\nfourchee\nfourcher\nfourchette\nfourchite\nfourer\nfourflusher\nfourfold\nFourierian\nFourierism\nFourierist\nFourieristic\nFourierite\nfourling\nfourpence\nfourpenny\nfourpounder\nfourre\nfourrier\nfourscore\nfoursome\nfoursquare\nfoursquarely\nfoursquareness\nfourstrand\nfourteen\nfourteener\nfourteenfold\nfourteenth\nfourteenthly\nfourth\nfourther\nfourthly\nfoussa\nfoute\nfouter\nfouth\nfovea\nfoveal\nfoveate\nfoveated\nfoveation\nfoveiform\nfoveola\nfoveolarious\nfoveolate\nfoveolated\nfoveole\nfoveolet\nfow\nfowk\nfowl\nfowler\nfowlerite\nfowlery\nfowlfoot\nfowling\nfox\nfoxbane\nfoxberry\nfoxchop\nfoxer\nfoxery\nfoxfeet\nfoxfinger\nfoxfish\nfoxglove\nfoxhole\nfoxhound\nfoxily\nfoxiness\nfoxing\nfoxish\nfoxlike\nfoxproof\nfoxship\nfoxskin\nfoxtail\nfoxtailed\nfoxtongue\nfoxwood\nfoxy\nfoy\nfoyaite\nfoyaitic\nfoyboat\nfoyer\nfoziness\nfozy\nfra\nfrab\nfrabbit\nfrabjous\nfrabjously\nfrabous\nfracas\nfracedinous\nfrache\nfrack\nfractable\nfractabling\nfracted\nFracticipita\nfractile\nfraction\nfractional\nfractionalism\nfractionalize\nfractionally\nfractionary\nfractionate\nfractionating\nfractionation\nfractionator\nfractionization\nfractionize\nfractionlet\nfractious\nfractiously\nfractiousness\nfractocumulus\nfractonimbus\nfractostratus\nfractuosity\nfracturable\nfractural\nfracture\nfractureproof\nfrae\nFragaria\nfraghan\nFragilaria\nFragilariaceae\nfragile\nfragilely\nfragileness\nfragility\nfragment\nfragmental\nfragmentally\nfragmentarily\nfragmentariness\nfragmentary\nfragmentation\nfragmented\nfragmentist\nfragmentitious\nfragmentize\nfragrance\nfragrancy\nfragrant\nfragrantly\nfragrantness\nfraid\nfraik\nfrail\nfrailejon\nfrailish\nfrailly\nfrailness\nfrailty\nfraise\nfraiser\nFram\nframable\nframableness\nframbesia\nframe\nframea\nframeable\nframeableness\nframed\nframeless\nframer\nframesmith\nframework\nframing\nframmit\nframpler\nframpold\nfranc\nFrances\nfranchisal\nfranchise\nfranchisement\nfranchiser\nFrancic\nFrancis\nfrancisc\nfrancisca\nFranciscan\nFranciscanism\nFrancisco\nfrancium\nFrancize\nfranco\nFrancois\nfrancolin\nfrancolite\nFrancomania\nFranconian\nFrancophile\nFrancophilism\nFrancophobe\nFrancophobia\nfrangent\nFrangi\nfrangibility\nfrangible\nfrangibleness\nfrangipane\nfrangipani\nfrangula\nFrangulaceae\nfrangulic\nfrangulin\nfrangulinic\nFrank\nfrank\nfrankability\nfrankable\nfrankalmoign\nFrankenia\nFrankeniaceae\nfrankeniaceous\nFrankenstein\nfranker\nfrankfurter\nfrankhearted\nfrankheartedly\nfrankheartedness\nFrankify\nfrankincense\nfrankincensed\nfranking\nFrankish\nFrankist\nfranklandite\nFranklin\nfranklin\nFranklinia\nFranklinian\nFrankliniana\nFranklinic\nFranklinism\nFranklinist\nfranklinite\nFranklinization\nfrankly\nfrankmarriage\nfrankness\nfrankpledge\nfrantic\nfrantically\nfranticly\nfranticness\nfranzy\nfrap\nfrappe\nfrapping\nfrasco\nfrase\nFrasera\nfrasier\nfrass\nfrat\nfratch\nfratched\nfratcheous\nfratcher\nfratchety\nfratchy\nfrater\nFratercula\nfraternal\nfraternalism\nfraternalist\nfraternality\nfraternally\nfraternate\nfraternation\nfraternism\nfraternity\nfraternization\nfraternize\nfraternizer\nfratery\nFraticelli\nFraticellian\nfratority\nFratricelli\nfratricidal\nfratricide\nfratry\nfraud\nfraudful\nfraudfully\nfraudless\nfraudlessly\nfraudlessness\nfraudproof\nfraudulence\nfraudulency\nfraudulent\nfraudulently\nfraudulentness\nfraughan\nfraught\nfrawn\nfraxetin\nfraxin\nfraxinella\nFraxinus\nfray\nfrayed\nfrayedly\nfrayedness\nfraying\nfrayn\nfrayproof\nfraze\nfrazer\nfrazil\nfrazzle\nfrazzling\nfreak\nfreakdom\nfreakery\nfreakful\nfreakily\nfreakiness\nfreakish\nfreakishly\nfreakishness\nfreaky\nfream\nfreath\nfreck\nfrecken\nfreckened\nfrecket\nfreckle\nfreckled\nfreckledness\nfreckleproof\nfreckling\nfrecklish\nfreckly\nFred\nFreddie\nFreddy\nFrederic\nFrederica\nFrederick\nfrederik\nfredricite\nfree\nfreeboard\nfreeboot\nfreebooter\nfreebootery\nfreebooting\nfreeborn\nFreechurchism\nfreed\nfreedman\nfreedom\nfreedwoman\nfreehand\nfreehanded\nfreehandedly\nfreehandedness\nfreehearted\nfreeheartedly\nfreeheartedness\nfreehold\nfreeholder\nfreeholdership\nfreeholding\nfreeing\nfreeish\nFreekirker\nfreelage\nfreeloving\nfreelovism\nfreely\nfreeman\nfreemanship\nfreemartin\nfreemason\nfreemasonic\nfreemasonical\nfreemasonism\nfreemasonry\nfreeness\nfreer\nFreesia\nfreesilverism\nfreesilverite\nfreestanding\nfreestone\nfreet\nfreethinker\nfreethinking\nfreetrader\nfreety\nfreeward\nfreeway\nfreewheel\nfreewheeler\nfreewheeling\nfreewill\nfreewoman\nfreezable\nfreeze\nfreezer\nfreezing\nfreezingly\nFregata\nFregatae\nFregatidae\nfreibergite\nfreieslebenite\nfreight\nfreightage\nfreighter\nfreightless\nfreightment\nfreir\nfreit\nfreity\nfremd\nfremdly\nfremdness\nfremescence\nfremescent\nfremitus\nFremontia\nFremontodendron\nfrenal\nFrenatae\nfrenate\nFrench\nfrenched\nFrenchification\nfrenchification\nFrenchify\nfrenchify\nFrenchily\nFrenchiness\nfrenching\nFrenchism\nFrenchize\nFrenchless\nFrenchly\nFrenchman\nFrenchness\nFrenchwise\nFrenchwoman\nFrenchy\nfrenetic\nfrenetical\nfrenetically\nFrenghi\nfrenular\nfrenulum\nfrenum\nfrenzelite\nfrenzied\nfrenziedly\nfrenzy\nFreon\nfrequence\nfrequency\nfrequent\nfrequentable\nfrequentage\nfrequentation\nfrequentative\nfrequenter\nfrequently\nfrequentness\nfrescade\nfresco\nfrescoer\nfrescoist\nfresh\nfreshen\nfreshener\nfreshet\nfreshhearted\nfreshish\nfreshly\nfreshman\nfreshmanhood\nfreshmanic\nfreshmanship\nfreshness\nfreshwoman\nFresison\nfresnel\nfresno\nfret\nfretful\nfretfully\nfretfulness\nfretless\nfretsome\nfrett\nfrettage\nfrettation\nfrette\nfretted\nfretter\nfretting\nfrettingly\nfretty\nfretum\nfretways\nfretwise\nfretwork\nfretworked\nFreudian\nFreudianism\nFreudism\nFreudist\nFreya\nfreyalite\nFreycinetia\nFreyja\nFreyr\nfriability\nfriable\nfriableness\nfriand\nfriandise\nfriar\nfriarbird\nfriarhood\nfriarling\nfriarly\nfriary\nfrib\nfribble\nfribbleism\nfribbler\nfribblery\nfribbling\nfribblish\nfribby\nfricandeau\nfricandel\nfricassee\nfrication\nfricative\nfricatrice\nfriction\nfrictionable\nfrictional\nfrictionally\nfrictionize\nfrictionless\nfrictionlessly\nfrictionproof\nFriday\nFridila\nfridstool\nfried\nFrieda\nfriedcake\nfriedelite\nfriedrichsdor\nfriend\nfriended\nfriendless\nfriendlessness\nfriendlike\nfriendlily\nfriendliness\nfriendliwise\nfriendly\nfriendship\nfrier\nfrieseite\nFriesian\nFriesic\nFriesish\nfrieze\nfriezer\nfriezy\nfrig\nfrigate\nfrigatoon\nfriggle\nfright\nfrightable\nfrighten\nfrightenable\nfrightened\nfrightenedly\nfrightenedness\nfrightener\nfrightening\nfrighteningly\nfrighter\nfrightful\nfrightfully\nfrightfulness\nfrightless\nfrightment\nfrighty\nfrigid\nFrigidaire\nfrigidarium\nfrigidity\nfrigidly\nfrigidness\nfrigiferous\nfrigolabile\nfrigoric\nfrigorific\nfrigorifical\nfrigorify\nfrigorimeter\nfrigostable\nfrigotherapy\nFrija\nfrijol\nfrijolillo\nfrijolito\nfrike\nfrill\nfrillback\nfrilled\nfriller\nfrillery\nfrillily\nfrilliness\nfrilling\nfrilly\nfrim\nFrimaire\nfringe\nfringed\nfringeflower\nfringeless\nfringelet\nfringent\nfringepod\nFringetail\nFringilla\nfringillaceous\nFringillidae\nfringilliform\nFringilliformes\nfringilline\nfringilloid\nfringing\nfringy\nfripperer\nfrippery\nfrisca\nFrisesomorum\nfrisette\nFrisian\nFrisii\nfrisk\nfrisker\nfrisket\nfriskful\nfriskily\nfriskiness\nfrisking\nfriskingly\nfrisky\nfrisolee\nfrison\nfrist\nfrisure\nfrit\nfrith\nfrithborh\nfrithbot\nfrithles\nfrithsoken\nfrithstool\nfrithwork\nFritillaria\nfritillary\nfritt\nfritter\nfritterer\nFritz\nFriulian\nfrivol\nfrivoler\nfrivolism\nfrivolist\nfrivolity\nfrivolize\nfrivolous\nfrivolously\nfrivolousness\nfrixion\nfriz\nfrize\nfrizer\nfrizz\nfrizzer\nfrizzily\nfrizziness\nfrizzing\nfrizzle\nfrizzler\nfrizzly\nfrizzy\nfro\nfrock\nfrocking\nfrockless\nfrocklike\nfrockmaker\nfroe\nFroebelian\nFroebelism\nFroebelist\nfrog\nfrogbit\nfrogeater\nfrogeye\nfrogface\nfrogfish\nfrogflower\nfrogfoot\nfrogged\nfroggery\nfrogginess\nfrogging\nfroggish\nfroggy\nfroghood\nfroghopper\nfrogland\nfrogleaf\nfrogleg\nfroglet\nfroglike\nfrogling\nfrogman\nfrogmouth\nfrognose\nfrogskin\nfrogstool\nfrogtongue\nfrogwort\nfroise\nfrolic\nfrolicful\nfrolicker\nfrolicky\nfrolicly\nfrolicness\nfrolicsome\nfrolicsomely\nfrolicsomeness\nfrom\nfromward\nfromwards\nfrond\nfrondage\nfronded\nfrondent\nfrondesce\nfrondescence\nfrondescent\nfrondiferous\nfrondiform\nfrondigerous\nfrondivorous\nfrondlet\nfrondose\nfrondosely\nfrondous\nfront\nfrontad\nfrontage\nfrontager\nfrontal\nfrontalis\nfrontality\nfrontally\nfrontbencher\nfronted\nfronter\nfrontier\nfrontierlike\nfrontierman\nfrontiersman\nFrontignan\nfronting\nfrontingly\nFrontirostria\nfrontispiece\nfrontless\nfrontlessly\nfrontlessness\nfrontlet\nfrontoauricular\nfrontoethmoid\nfrontogenesis\nfrontolysis\nfrontomallar\nfrontomaxillary\nfrontomental\nfrontonasal\nfrontooccipital\nfrontoorbital\nfrontoparietal\nfrontopontine\nfrontosphenoidal\nfrontosquamosal\nfrontotemporal\nfrontozygomatic\nfrontpiece\nfrontsman\nfrontstall\nfrontward\nfrontways\nfrontwise\nfroom\nfrore\nfrory\nfrosh\nfrost\nfrostation\nfrostbird\nfrostbite\nfrostbow\nfrosted\nfroster\nfrostfish\nfrostflower\nfrostily\nfrostiness\nfrosting\nfrostless\nfrostlike\nfrostproof\nfrostproofing\nfrostroot\nfrostweed\nfrostwork\nfrostwort\nfrosty\nfrot\nfroth\nfrother\nFrothi\nfrothily\nfrothiness\nfrothing\nfrothless\nfrothsome\nfrothy\nfrotton\nfroufrou\nfrough\nfroughy\nfrounce\nfrounceless\nfrow\nfroward\nfrowardly\nfrowardness\nfrower\nfrowl\nfrown\nfrowner\nfrownful\nfrowning\nfrowningly\nfrownless\nfrowny\nfrowst\nfrowstily\nfrowstiness\nfrowsty\nfrowy\nfrowze\nfrowzily\nfrowziness\nfrowzled\nfrowzly\nfrowzy\nfroze\nfrozen\nfrozenhearted\nfrozenly\nfrozenness\nfruchtschiefer\nfructed\nfructescence\nfructescent\nfructicultural\nfructiculture\nFructidor\nfructiferous\nfructiferously\nfructification\nfructificative\nfructifier\nfructiform\nfructify\nfructiparous\nfructivorous\nfructose\nfructoside\nfructuary\nfructuosity\nfructuous\nfructuously\nfructuousness\nfrugal\nfrugalism\nfrugalist\nfrugality\nfrugally\nfrugalness\nfruggan\nFrugivora\nfrugivorous\nfruit\nfruitade\nfruitage\nfruitarian\nfruitarianism\nfruitcake\nfruited\nfruiter\nfruiterer\nfruiteress\nfruitery\nfruitful\nfruitfullness\nfruitfully\nfruitgrower\nfruitgrowing\nfruitiness\nfruiting\nfruition\nfruitist\nfruitive\nfruitless\nfruitlessly\nfruitlessness\nfruitlet\nfruitling\nfruitstalk\nfruittime\nfruitwise\nfruitwoman\nfruitwood\nfruitworm\nfruity\nfrumentaceous\nfrumentarious\nfrumentation\nfrumenty\nfrump\nfrumpery\nfrumpily\nfrumpiness\nfrumpish\nfrumpishly\nfrumpishness\nfrumple\nfrumpy\nfrush\nfrustrate\nfrustrately\nfrustrater\nfrustration\nfrustrative\nfrustratory\nfrustule\nfrustulent\nfrustulose\nfrustum\nfrutescence\nfrutescent\nfruticetum\nfruticose\nfruticous\nfruticulose\nfrutify\nfry\nfryer\nfu\nfub\nfubby\nfubsy\nFucaceae\nfucaceous\nFucales\nfucate\nfucation\nfucatious\nFuchsia\nFuchsian\nfuchsin\nfuchsine\nfuchsinophil\nfuchsinophilous\nfuchsite\nfuchsone\nfuci\nfucinita\nfuciphagous\nfucoid\nfucoidal\nFucoideae\nfucosan\nfucose\nfucous\nfucoxanthin\nfucus\nfud\nfuddle\nfuddler\nfuder\nfudge\nfudger\nfudgy\nFuegian\nfuel\nfueler\nfuelizer\nfuerte\nfuff\nfuffy\nfugacious\nfugaciously\nfugaciousness\nfugacity\nfugal\nfugally\nfuggy\nfugient\nfugitate\nfugitation\nfugitive\nfugitively\nfugitiveness\nfugitivism\nfugitivity\nfugle\nfugleman\nfuglemanship\nfugler\nfugu\nfugue\nfuguist\nfuidhir\nfuirdays\nFuirena\nfuji\nFulah\nfulciform\nfulcral\nfulcrate\nfulcrum\nfulcrumage\nfulfill\nfulfiller\nfulfillment\nFulfulde\nfulgent\nfulgently\nfulgentness\nfulgid\nfulgide\nfulgidity\nfulgor\nFulgora\nfulgorid\nFulgoridae\nFulgoroidea\nfulgorous\nFulgur\nfulgural\nfulgurant\nfulgurantly\nfulgurata\nfulgurate\nfulgurating\nfulguration\nfulgurator\nfulgurite\nfulgurous\nfulham\nFulica\nFulicinae\nfulicine\nfuliginosity\nfuliginous\nfuliginously\nfuliginousness\nFuligula\nFuligulinae\nfuliguline\nfulk\nfull\nfullam\nfullback\nfuller\nfullering\nfullery\nfullface\nfullhearted\nfulling\nfullish\nfullmouth\nfullmouthed\nfullmouthedly\nfullness\nfullom\nFullonian\nfully\nfulmar\nFulmarus\nfulmicotton\nfulminancy\nfulminant\nfulminate\nfulminating\nfulmination\nfulminator\nfulminatory\nfulmine\nfulmineous\nfulminic\nfulminous\nfulminurate\nfulminuric\nfulsome\nfulsomely\nfulsomeness\nfulth\nFultz\nFulup\nfulvene\nfulvescent\nfulvid\nfulvidness\nfulvous\nfulwa\nfulyie\nfulzie\nfum\nfumacious\nfumado\nfumage\nfumagine\nFumago\nfumarate\nFumaria\nFumariaceae\nfumariaceous\nfumaric\nfumarine\nfumarium\nfumaroid\nfumaroidal\nfumarole\nfumarolic\nfumaryl\nfumatorium\nfumatory\nfumble\nfumbler\nfumbling\nfume\nfumeless\nfumer\nfumeroot\nfumet\nfumette\nfumewort\nfumiduct\nfumiferous\nfumigant\nfumigate\nfumigation\nfumigator\nfumigatorium\nfumigatory\nfumily\nfuminess\nfuming\nfumingly\nfumistery\nfumitory\nfumose\nfumosity\nfumous\nfumously\nfumy\nfun\nfunambulate\nfunambulation\nfunambulator\nfunambulatory\nfunambulic\nfunambulism\nfunambulist\nfunambulo\nFunaria\nFunariaceae\nfunariaceous\nfunction\nfunctional\nfunctionalism\nfunctionalist\nfunctionality\nfunctionalize\nfunctionally\nfunctionarism\nfunctionary\nfunctionate\nfunctionation\nfunctionize\nfunctionless\nfund\nfundable\nfundal\nfundament\nfundamental\nfundamentalism\nfundamentalist\nfundamentality\nfundamentally\nfundamentalness\nfundatorial\nfundatrix\nfunded\nfunder\nfundholder\nfundi\nfundic\nfundiform\nfunditor\nfundless\nfundmonger\nfundmongering\nfunds\nFundulinae\nfunduline\nFundulus\nfundungi\nfundus\nfunebrial\nfuneral\nfuneralize\nfunerary\nfunereal\nfunereally\nfunest\nfungaceous\nfungal\nFungales\nfungate\nfungation\nfungi\nFungia\nfungian\nfungibility\nfungible\nfungic\nfungicidal\nfungicide\nfungicolous\nfungiferous\nfungiform\nfungilliform\nfungin\nfungistatic\nfungivorous\nfungo\nfungoid\nfungoidal\nfungological\nfungologist\nfungology\nfungose\nfungosity\nfungous\nfungus\nfungused\nfunguslike\nfungusy\nfunicle\nfunicular\nfuniculate\nfunicule\nfuniculitis\nfuniculus\nfuniform\nfunipendulous\nfunis\nFunje\nfunk\nfunker\nFunkia\nfunkiness\nfunky\nfunmaker\nfunmaking\nfunnel\nfunneled\nfunnelform\nfunnellike\nfunnelwise\nfunnily\nfunniment\nfunniness\nfunny\nfunnyman\nfunori\nfunt\nFuntumia\nFur\nfur\nfuracious\nfuraciousness\nfuracity\nfural\nfuraldehyde\nfuran\nfuranoid\nfurazan\nfurazane\nfurbelow\nfurbish\nfurbishable\nfurbisher\nfurbishment\nfurca\nfurcal\nfurcate\nfurcately\nfurcation\nFurcellaria\nfurcellate\nfurciferine\nfurciferous\nfurciform\nFurcraea\nfurcula\nfurcular\nfurculum\nfurdel\nFurfooz\nfurfur\nfurfuraceous\nfurfuraceously\nfurfural\nfurfuralcohol\nfurfuraldehyde\nfurfuramide\nfurfuran\nfurfuration\nfurfurine\nfurfuroid\nfurfurole\nfurfurous\nfurfuryl\nfurfurylidene\nfuriant\nfuribund\nfuried\nFuries\nfurify\nfuril\nfurilic\nfuriosa\nfuriosity\nfurioso\nfurious\nfuriously\nfuriousness\nfurison\nfurl\nfurlable\nFurlan\nfurler\nfurless\nfurlong\nfurlough\nfurnace\nfurnacelike\nfurnaceman\nfurnacer\nfurnacite\nfurnage\nFurnariidae\nFurnariides\nFurnarius\nfurner\nfurnish\nfurnishable\nfurnished\nfurnisher\nfurnishing\nfurnishment\nfurniture\nfurnitureless\nfurodiazole\nfuroic\nfuroid\nfuroin\nfurole\nfuromethyl\nfuromonazole\nfuror\nfurore\nfurphy\nfurred\nfurrier\nfurriered\nfurriery\nfurrily\nfurriness\nfurring\nfurrow\nfurrower\nfurrowless\nfurrowlike\nfurrowy\nfurry\nfurstone\nfurther\nfurtherance\nfurtherer\nfurtherest\nfurtherly\nfurthermore\nfurthermost\nfurthersome\nfurthest\nfurtive\nfurtively\nfurtiveness\nFurud\nfuruncle\nfuruncular\nfurunculoid\nfurunculosis\nfurunculous\nfury\nfuryl\nfurze\nfurzechat\nfurzed\nfurzeling\nfurzery\nfurzetop\nfurzy\nfusain\nfusarial\nfusariose\nfusariosis\nFusarium\nfusarole\nfusate\nfusc\nfuscescent\nfuscin\nfuscohyaline\nfuscous\nfuse\nfuseboard\nfused\nfusee\nfuselage\nfuseplug\nfusht\nfusibility\nfusible\nfusibleness\nfusibly\nFusicladium\nFusicoccum\nfusiform\nFusiformis\nfusil\nfusilier\nfusillade\nfusilly\nfusinist\nfusion\nfusional\nfusionism\nfusionist\nfusionless\nfusoid\nfuss\nfusser\nfussification\nfussify\nfussily\nfussiness\nfussock\nfussy\nfust\nfustanella\nfustee\nfusteric\nfustet\nfustian\nfustianish\nfustianist\nfustianize\nfustic\nfustigate\nfustigation\nfustigator\nfustigatory\nfustilugs\nfustily\nfustin\nfustiness\nfustle\nfusty\nFusulina\nfusuma\nfusure\nFusus\nfut\nfutchel\nfute\nfuthorc\nfutile\nfutilely\nfutileness\nfutilitarian\nfutilitarianism\nfutility\nfutilize\nfuttermassel\nfuttock\nfutural\nfuture\nfutureless\nfutureness\nfuturic\nfuturism\nfuturist\nfuturistic\nfuturition\nfuturity\nfuturize\nfutwa\nfuye\nfuze\nfuzz\nfuzzball\nfuzzily\nfuzziness\nfuzzy\nfyke\nfylfot\nfyrd\nG\ng\nGa\nga\ngab\ngabardine\ngabbard\ngabber\ngabble\ngabblement\ngabbler\ngabbro\ngabbroic\ngabbroid\ngabbroitic\ngabby\nGabe\ngabelle\ngabelled\ngabelleman\ngabeller\ngaberdine\ngaberlunzie\ngabgab\ngabi\ngabion\ngabionade\ngabionage\ngabioned\ngablatores\ngable\ngableboard\ngablelike\ngablet\ngablewise\ngablock\nGaboon\nGabriel\nGabriella\nGabrielrache\nGabunese\ngaby\nGad\ngad\nGadaba\ngadabout\nGadarene\nGadaria\ngadbee\ngadbush\nGaddang\ngadded\ngadder\nGaddi\ngaddi\ngadding\ngaddingly\ngaddish\ngaddishness\ngade\ngadfly\ngadge\ngadger\ngadget\ngadid\nGadidae\ngadinine\nGaditan\ngadling\ngadman\ngadoid\nGadoidea\ngadolinia\ngadolinic\ngadolinite\ngadolinium\ngadroon\ngadroonage\nGadsbodikins\nGadsbud\nGadslid\ngadsman\nGadswoons\ngaduin\nGadus\ngadwall\nGadzooks\nGael\nGaeldom\nGaelic\nGaelicism\nGaelicist\nGaelicization\nGaelicize\nGaeltacht\ngaen\nGaertnerian\ngaet\nGaetulan\nGaetuli\nGaetulian\ngaff\ngaffe\ngaffer\nGaffkya\ngaffle\ngaffsman\ngag\ngagate\ngage\ngageable\ngagee\ngageite\ngagelike\ngager\ngagership\ngagger\ngaggery\ngaggle\ngaggler\ngagman\ngagor\ngagroot\ngagtooth\ngahnite\nGahrwali\nGaia\ngaiassa\nGaidropsaridae\ngaiety\nGail\nGaillardia\ngaily\ngain\ngainable\ngainage\ngainbirth\ngaincall\ngaincome\ngaine\ngainer\ngainful\ngainfully\ngainfulness\ngaining\ngainless\ngainlessness\ngainliness\ngainly\ngains\ngainsay\ngainsayer\ngainset\ngainsome\ngainspeaker\ngainspeaking\ngainst\ngainstrive\ngainturn\ngaintwist\ngainyield\ngair\ngairfish\ngaisling\ngait\ngaited\ngaiter\ngaiterless\ngaiting\ngaize\ngaj\ngal\ngala\nGalacaceae\ngalactagogue\ngalactagoguic\ngalactan\ngalactase\ngalactemia\ngalacthidrosis\nGalactia\ngalactic\ngalactidrosis\ngalactite\ngalactocele\ngalactodendron\ngalactodensimeter\ngalactogenetic\ngalactohemia\ngalactoid\ngalactolipide\ngalactolipin\ngalactolysis\ngalactolytic\ngalactoma\ngalactometer\ngalactometry\ngalactonic\ngalactopathy\ngalactophagist\ngalactophagous\ngalactophlebitis\ngalactophlysis\ngalactophore\ngalactophoritis\ngalactophorous\ngalactophthysis\ngalactophygous\ngalactopoiesis\ngalactopoietic\ngalactopyra\ngalactorrhea\ngalactorrhoea\ngalactoscope\ngalactose\ngalactoside\ngalactosis\ngalactostasis\ngalactosuria\ngalactotherapy\ngalactotrophy\ngalacturia\ngalagala\nGalaginae\nGalago\ngalah\ngalanas\ngalanga\ngalangin\ngalant\nGalanthus\ngalantine\ngalany\ngalapago\nGalatae\ngalatea\nGalatian\nGalatic\ngalatotrophic\nGalax\ngalaxian\nGalaxias\nGalaxiidae\ngalaxy\ngalban\ngalbanum\nGalbula\nGalbulae\nGalbulidae\nGalbulinae\ngalbulus\nGalcha\nGalchic\nGale\ngale\ngalea\ngaleage\ngaleate\ngaleated\ngalee\ngaleeny\nGalega\ngalegine\nGalei\ngaleid\nGaleidae\ngaleiform\ngalempung\nGalen\ngalena\nGalenian\nGalenic\ngalenic\nGalenical\ngalenical\nGalenism\nGalenist\ngalenite\ngalenobismutite\ngalenoid\nGaleodes\nGaleodidae\ngaleoid\nGaleopithecus\nGaleopsis\nGaleorchis\nGaleorhinidae\nGaleorhinus\ngaleproof\ngalera\ngalericulate\ngalerum\ngalerus\nGalesaurus\ngalet\nGaleus\ngalewort\ngaley\nGalga\ngalgal\nGalgulidae\ngali\nGalibi\nGalician\nGalictis\nGalidia\nGalidictis\nGalik\nGalilean\ngalilee\ngalimatias\ngalingale\nGalinsoga\ngaliongee\ngaliot\ngalipidine\ngalipine\ngalipoidin\ngalipoidine\ngalipoipin\ngalipot\nGalium\ngall\nGalla\ngalla\ngallacetophenone\ngallah\ngallanilide\ngallant\ngallantize\ngallantly\ngallantness\ngallantry\ngallate\ngallature\ngallberry\ngallbush\ngalleass\ngalled\nGallegan\ngallein\ngalleon\ngaller\nGalleria\ngallerian\ngalleried\nGalleriidae\ngallery\ngallerylike\ngallet\ngalley\ngalleylike\ngalleyman\ngalleyworm\ngallflower\ngallfly\nGalli\ngalliambic\ngalliambus\nGallian\ngalliard\ngalliardise\ngalliardly\ngalliardness\nGallic\ngallic\nGallican\nGallicanism\nGallicism\nGallicization\nGallicize\nGallicizer\ngallicola\nGallicolae\ngallicole\ngallicolous\ngalliferous\nGallification\ngallification\ngalliform\nGalliformes\nGallify\ngalligaskin\ngallimaufry\nGallinaceae\ngallinacean\nGallinacei\ngallinaceous\nGallinae\nGallinago\ngallinazo\ngalline\ngalling\ngallingly\ngallingness\ngallinipper\nGallinula\ngallinule\nGallinulinae\ngallinuline\ngallipot\nGallirallus\ngallisin\ngallium\ngallivant\ngallivanter\ngallivat\ngallivorous\ngalliwasp\ngallnut\ngallocyanin\ngallocyanine\ngalloflavine\ngalloglass\nGalloman\nGallomania\nGallomaniac\ngallon\ngallonage\ngalloner\ngalloon\ngallooned\ngallop\ngallopade\ngalloper\nGalloperdix\nGallophile\nGallophilism\nGallophobe\nGallophobia\ngalloping\ngalloptious\ngallotannate\ngallotannic\ngallotannin\ngallous\nGallovidian\nGalloway\ngalloway\ngallowglass\ngallows\ngallowsmaker\ngallowsness\ngallowsward\ngallstone\nGallus\ngalluses\ngallweed\ngallwort\ngally\ngallybagger\ngallybeggar\ngallycrow\nGaloisian\ngaloot\ngalop\ngalore\ngalosh\ngalp\ngalravage\ngalravitch\ngalt\nGaltonia\nGaltonian\ngaluchat\ngalumph\ngalumptious\nGalusha\ngaluth\ngalvanic\ngalvanical\ngalvanically\ngalvanism\ngalvanist\ngalvanization\ngalvanize\ngalvanized\ngalvanizer\ngalvanocauterization\ngalvanocautery\ngalvanocontractility\ngalvanofaradization\ngalvanoglyph\ngalvanoglyphy\ngalvanograph\ngalvanographic\ngalvanography\ngalvanologist\ngalvanology\ngalvanolysis\ngalvanomagnet\ngalvanomagnetic\ngalvanomagnetism\ngalvanometer\ngalvanometric\ngalvanometrical\ngalvanometrically\ngalvanometry\ngalvanoplastic\ngalvanoplastical\ngalvanoplastically\ngalvanoplastics\ngalvanoplasty\ngalvanopsychic\ngalvanopuncture\ngalvanoscope\ngalvanoscopic\ngalvanoscopy\ngalvanosurgery\ngalvanotactic\ngalvanotaxis\ngalvanotherapy\ngalvanothermometer\ngalvanothermy\ngalvanotonic\ngalvanotropic\ngalvanotropism\ngalvayne\ngalvayning\nGalways\nGalwegian\ngalyac\ngalyak\ngalziekte\ngam\ngamahe\nGamaliel\ngamashes\ngamasid\nGamasidae\nGamasoidea\ngamb\ngamba\ngambade\ngambado\ngambang\ngambeer\ngambeson\ngambet\ngambette\ngambia\ngambier\ngambist\ngambit\ngamble\ngambler\ngamblesome\ngamblesomeness\ngambling\ngambodic\ngamboge\ngambogian\ngambogic\ngamboised\ngambol\ngambrel\ngambreled\ngambroon\nGambusia\ngamdeboo\ngame\ngamebag\ngameball\ngamecock\ngamecraft\ngameful\ngamekeeper\ngamekeeping\ngamelang\ngameless\ngamelike\nGamelion\ngamelotte\ngamely\ngamene\ngameness\ngamesome\ngamesomely\ngamesomeness\ngamester\ngamestress\ngametal\ngametange\ngametangium\ngamete\ngametic\ngametically\ngametocyst\ngametocyte\ngametogenesis\ngametogenic\ngametogenous\ngametogeny\ngametogonium\ngametogony\ngametoid\ngametophagia\ngametophore\ngametophyll\ngametophyte\ngametophytic\ngamic\ngamily\ngamin\ngaminesque\ngaminess\ngaming\ngaminish\ngamma\ngammacism\ngammacismus\ngammadion\ngammarid\nGammaridae\ngammarine\ngammaroid\nGammarus\ngammation\ngammelost\ngammer\ngammerel\ngammerstang\nGammexane\ngammick\ngammock\ngammon\ngammoner\ngammoning\ngammy\ngamobium\ngamodesmic\ngamodesmy\ngamogenesis\ngamogenetic\ngamogenetical\ngamogenetically\ngamogony\nGamolepis\ngamomania\ngamont\nGamopetalae\ngamopetalous\ngamophagia\ngamophagy\ngamophyllous\ngamori\ngamosepalous\ngamostele\ngamostelic\ngamostely\ngamotropic\ngamotropism\ngamp\ngamphrel\ngamut\ngamy\ngan\nganam\nganancial\nGanapati\nganch\nGanda\ngander\nganderess\ngandergoose\ngandermooner\nganderteeth\nGandhara\nGandharva\nGandhiism\nGandhism\nGandhist\ngandul\ngandum\ngandurah\ngane\nganef\ngang\nGanga\nganga\nGangamopteris\ngangan\ngangava\ngangboard\ngangdom\ngange\nganger\nGangetic\nganggang\nganging\ngangism\ngangland\nganglander\nganglia\ngangliac\nganglial\ngangliar\ngangliasthenia\ngangliate\ngangliated\ngangliectomy\ngangliform\ngangliitis\ngangling\nganglioblast\ngangliocyte\nganglioform\nganglioid\nganglioma\nganglion\nganglionary\nganglionate\nganglionectomy\nganglioneural\nganglioneure\nganglioneuroma\nganglioneuron\nganglionic\nganglionitis\nganglionless\nganglioplexus\ngangly\ngangman\ngangmaster\ngangplank\ngangrel\ngangrene\ngangrenescent\ngangrenous\ngangsman\ngangster\ngangsterism\ngangtide\ngangue\nGanguela\ngangway\ngangwayman\nganister\nganja\nganner\ngannet\nGanocephala\nganocephalan\nganocephalous\nganodont\nGanodonta\nGanodus\nganoid\nganoidal\nganoidean\nGanoidei\nganoidian\nganoin\nganomalite\nganophyllite\nganosis\nGanowanian\ngansel\ngansey\ngansy\ngant\nganta\ngantang\ngantlet\ngantline\nganton\ngantries\ngantry\ngantryman\ngantsl\nGanymede\nGanymedes\nganza\nganzie\ngaol\ngaolbird\ngaoler\nGaon\nGaonate\nGaonic\ngap\nGapa\ngapa\ngape\ngaper\ngapes\ngapeseed\ngapeworm\ngaping\ngapingly\ngapingstock\ngapo\ngappy\ngapy\ngar\ngara\ngarabato\ngarad\ngarage\ngarageman\nGaramond\ngarance\ngarancine\ngarapata\ngarava\ngaravance\ngarawi\ngarb\ngarbage\ngarbardine\ngarbel\ngarbell\ngarbill\ngarble\ngarbleable\ngarbler\ngarbless\ngarbling\ngarboard\ngarboil\ngarbure\ngarce\nGarcinia\ngardant\ngardeen\ngarden\ngardenable\ngardencraft\ngardened\ngardener\ngardenership\ngardenesque\ngardenful\ngardenhood\nGardenia\ngardenin\ngardening\ngardenize\ngardenless\ngardenlike\ngardenly\ngardenmaker\ngardenmaking\ngardenwards\ngardenwise\ngardeny\ngarderobe\ngardevin\ngardy\ngardyloo\ngare\ngarefowl\ngareh\ngaretta\ngarewaite\ngarfish\ngarganey\nGargantua\nGargantuan\ngarget\ngargety\ngargle\ngargol\ngargoyle\ngargoyled\ngargoyley\ngargoylish\ngargoylishly\ngargoylism\nGarhwali\ngarial\ngariba\ngaribaldi\nGaribaldian\ngarish\ngarishly\ngarishness\ngarland\ngarlandage\ngarlandless\ngarlandlike\ngarlandry\ngarlandwise\ngarle\ngarlic\ngarlicky\ngarliclike\ngarlicmonger\ngarlicwort\ngarment\ngarmentless\ngarmentmaker\ngarmenture\ngarmentworker\ngarn\ngarnel\ngarner\ngarnerage\ngarnet\ngarnetberry\ngarneter\ngarnetiferous\ngarnets\ngarnett\ngarnetter\ngarnetwork\ngarnetz\ngarnice\ngarniec\ngarnierite\ngarnish\ngarnishable\ngarnished\ngarnishee\ngarnisheement\ngarnisher\ngarnishment\ngarnishry\ngarniture\nGaro\ngaroo\ngarookuh\ngarrafa\ngarran\nGarret\ngarret\ngarreted\ngarreteer\ngarretmaster\ngarrison\nGarrisonian\nGarrisonism\ngarrot\ngarrote\ngarroter\nGarrulinae\ngarruline\ngarrulity\ngarrulous\ngarrulously\ngarrulousness\nGarrulus\ngarrupa\nGarrya\nGarryaceae\ngarse\nGarshuni\ngarsil\ngarston\ngarten\ngarter\ngartered\ngartering\ngarterless\ngarth\ngarthman\nGaruda\ngarum\ngarvanzo\ngarvey\ngarvock\nGary\ngas\nGasan\ngasbag\ngascoigny\nGascon\ngasconade\ngasconader\nGasconism\ngascromh\ngaseity\ngaselier\ngaseosity\ngaseous\ngaseousness\ngasfiring\ngash\ngashes\ngashful\ngashliness\ngashly\ngasholder\ngashouse\ngashy\ngasifiable\ngasification\ngasifier\ngasiform\ngasify\ngasket\ngaskin\ngasking\ngaskins\ngasless\ngaslight\ngaslighted\ngaslighting\ngaslit\ngaslock\ngasmaker\ngasman\ngasogenic\ngasoliery\ngasoline\ngasolineless\ngasoliner\ngasometer\ngasometric\ngasometrical\ngasometry\ngasp\nGaspar\ngasparillo\ngasper\ngaspereau\ngaspergou\ngaspiness\ngasping\ngaspingly\ngasproof\ngaspy\ngasser\nGasserian\ngassiness\ngassing\ngassy\ngast\ngastaldite\ngastaldo\ngaster\ngasteralgia\nGasterolichenes\ngasteromycete\nGasteromycetes\ngasteromycetous\nGasterophilus\ngasteropod\nGasteropoda\ngasterosteid\nGasterosteidae\ngasterosteiform\ngasterosteoid\nGasterosteus\ngasterotheca\ngasterothecal\nGasterotricha\ngasterotrichan\ngasterozooid\ngastight\ngastightness\nGastornis\nGastornithidae\ngastradenitis\ngastraea\ngastraead\nGastraeadae\ngastraeal\ngastraeum\ngastral\ngastralgia\ngastralgic\ngastralgy\ngastraneuria\ngastrasthenia\ngastratrophia\ngastrectasia\ngastrectasis\ngastrectomy\ngastrelcosis\ngastric\ngastricism\ngastrilegous\ngastriloquial\ngastriloquism\ngastriloquist\ngastriloquous\ngastriloquy\ngastrin\ngastritic\ngastritis\ngastroadenitis\ngastroadynamic\ngastroalbuminorrhea\ngastroanastomosis\ngastroarthritis\ngastroatonia\ngastroatrophia\ngastroblennorrhea\ngastrocatarrhal\ngastrocele\ngastrocentrous\nGastrochaena\nGastrochaenidae\ngastrocnemial\ngastrocnemian\ngastrocnemius\ngastrocoel\ngastrocolic\ngastrocoloptosis\ngastrocolostomy\ngastrocolotomy\ngastrocolpotomy\ngastrocystic\ngastrocystis\ngastrodialysis\ngastrodiaphanoscopy\ngastrodidymus\ngastrodisk\ngastroduodenal\ngastroduodenitis\ngastroduodenoscopy\ngastroduodenotomy\ngastrodynia\ngastroelytrotomy\ngastroenteralgia\ngastroenteric\ngastroenteritic\ngastroenteritis\ngastroenteroanastomosis\ngastroenterocolitis\ngastroenterocolostomy\ngastroenterological\ngastroenterologist\ngastroenterology\ngastroenteroptosis\ngastroenterostomy\ngastroenterotomy\ngastroepiploic\ngastroesophageal\ngastroesophagostomy\ngastrogastrotomy\ngastrogenital\ngastrograph\ngastrohelcosis\ngastrohepatic\ngastrohepatitis\ngastrohydrorrhea\ngastrohyperneuria\ngastrohypertonic\ngastrohysterectomy\ngastrohysteropexy\ngastrohysterorrhaphy\ngastrohysterotomy\ngastroid\ngastrointestinal\ngastrojejunal\ngastrojejunostomy\ngastrolater\ngastrolatrous\ngastrolienal\ngastrolith\nGastrolobium\ngastrologer\ngastrological\ngastrologist\ngastrology\ngastrolysis\ngastrolytic\ngastromalacia\ngastromancy\ngastromelus\ngastromenia\ngastromyces\ngastromycosis\ngastromyxorrhea\ngastronephritis\ngastronome\ngastronomer\ngastronomic\ngastronomical\ngastronomically\ngastronomist\ngastronomy\ngastronosus\ngastropancreatic\ngastropancreatitis\ngastroparalysis\ngastroparesis\ngastroparietal\ngastropathic\ngastropathy\ngastroperiodynia\ngastropexy\ngastrophile\ngastrophilism\ngastrophilist\ngastrophilite\nGastrophilus\ngastrophrenic\ngastrophthisis\ngastroplasty\ngastroplenic\ngastropleuritis\ngastroplication\ngastropneumatic\ngastropneumonic\ngastropod\nGastropoda\ngastropodan\ngastropodous\ngastropore\ngastroptosia\ngastroptosis\ngastropulmonary\ngastropulmonic\ngastropyloric\ngastrorrhagia\ngastrorrhaphy\ngastrorrhea\ngastroschisis\ngastroscope\ngastroscopic\ngastroscopy\ngastrosoph\ngastrosopher\ngastrosophy\ngastrospasm\ngastrosplenic\ngastrostaxis\ngastrostegal\ngastrostege\ngastrostenosis\ngastrostomize\nGastrostomus\ngastrostomy\ngastrosuccorrhea\ngastrotheca\ngastrothecal\ngastrotome\ngastrotomic\ngastrotomy\nGastrotricha\ngastrotrichan\ngastrotubotomy\ngastrotympanites\ngastrovascular\ngastroxynsis\ngastrozooid\ngastrula\ngastrular\ngastrulate\ngastrulation\ngasworker\ngasworks\ngat\ngata\ngatch\ngatchwork\ngate\ngateado\ngateage\ngated\ngatehouse\ngatekeeper\ngateless\ngatelike\ngatemaker\ngateman\ngatepost\ngater\ngatetender\ngateward\ngatewards\ngateway\ngatewayman\ngatewise\ngatewoman\ngateworks\ngatewright\nGatha\ngather\ngatherable\ngatherer\ngathering\nGathic\ngating\ngator\ngatter\ngatteridge\ngau\ngaub\ngauby\ngauche\ngauchely\ngaucheness\ngaucherie\nGaucho\ngaud\ngaudery\nGaudete\ngaudful\ngaudily\ngaudiness\ngaudless\ngaudsman\ngaudy\ngaufer\ngauffer\ngauffered\ngauffre\ngaufre\ngaufrette\ngauge\ngaugeable\ngauger\ngaugership\ngauging\nGaul\ngaulding\ngauleiter\nGaulic\ngaulin\nGaulish\nGaullism\nGaullist\nGault\ngault\ngaulter\ngaultherase\nGaultheria\ngaultherin\ngaum\ngaumish\ngaumless\ngaumlike\ngaumy\ngaun\ngaunt\ngaunted\ngauntlet\ngauntleted\ngauntly\ngauntness\ngauntry\ngaunty\ngaup\ngaupus\ngaur\nGaura\nGaurian\ngaus\ngauss\ngaussage\ngaussbergite\nGaussian\ngauster\ngausterer\ngaut\ngauteite\ngauze\ngauzelike\ngauzewing\ngauzily\ngauziness\ngauzy\ngavall\ngave\ngavel\ngaveler\ngavelkind\ngavelkinder\ngavelman\ngavelock\nGavia\nGaviae\ngavial\nGavialis\ngavialoid\nGaviiformes\ngavotte\ngavyuti\ngaw\ngawby\ngawcie\ngawk\ngawkhammer\ngawkihood\ngawkily\ngawkiness\ngawkish\ngawkishly\ngawkishness\ngawky\ngawm\ngawn\ngawney\ngawsie\ngay\ngayal\ngayatri\ngaybine\ngaycat\ngaydiang\ngayish\nGaylussacia\ngaylussite\ngayment\ngayness\nGaypoo\ngaysome\ngaywings\ngayyou\ngaz\ngazabo\ngazangabin\nGazania\ngaze\ngazebo\ngazee\ngazehound\ngazel\ngazeless\nGazella\ngazelle\ngazelline\ngazement\ngazer\ngazettal\ngazette\ngazetteer\ngazetteerage\ngazetteerish\ngazetteership\ngazi\ngazing\ngazingly\ngazingstock\ngazogene\ngazon\ngazophylacium\ngazy\ngazzetta\nGe\nge\nGeadephaga\ngeadephagous\ngeal\ngean\ngeanticlinal\ngeanticline\ngear\ngearbox\ngeared\ngearing\ngearksutite\ngearless\ngearman\ngearset\ngearshift\ngearwheel\ngease\ngeason\nGeaster\nGeat\ngeat\nGeatas\ngebang\ngebanga\ngebbie\ngebur\nGecarcinidae\nGecarcinus\ngeck\ngecko\ngeckoid\ngeckotian\ngeckotid\nGeckotidae\ngeckotoid\nGed\nged\ngedackt\ngedanite\ngedder\ngedeckt\ngedecktwork\nGederathite\nGederite\ngedrite\nGee\ngee\ngeebong\ngeebung\nGeechee\ngeejee\ngeek\ngeelbec\ngeeldikkop\ngeelhout\ngeepound\ngeerah\ngeest\ngeet\nGeez\ngeezer\nGegenschein\ngegg\ngeggee\ngegger\ngeggery\nGeheimrat\nGehenna\ngehlenite\nGeikia\ngeikielite\ngein\ngeira\nGeisenheimer\ngeisha\ngeison\ngeisotherm\ngeisothermal\nGeissoloma\nGeissolomataceae\nGeissolomataceous\nGeissorhiza\ngeissospermin\ngeissospermine\ngeitjie\ngeitonogamous\ngeitonogamy\nGekko\nGekkones\ngekkonid\nGekkonidae\ngekkonoid\nGekkota\ngel\ngelable\ngelada\ngelandejump\ngelandelaufer\ngelandesprung\nGelasian\nGelasimus\ngelastic\nGelastocoridae\ngelatification\ngelatigenous\ngelatin\ngelatinate\ngelatination\ngelatined\ngelatiniferous\ngelatiniform\ngelatinify\ngelatinigerous\ngelatinity\ngelatinizability\ngelatinizable\ngelatinization\ngelatinize\ngelatinizer\ngelatinobromide\ngelatinochloride\ngelatinoid\ngelatinotype\ngelatinous\ngelatinously\ngelatinousness\ngelation\ngelatose\ngeld\ngeldability\ngeldable\ngeldant\ngelder\ngelding\nGelechia\ngelechiid\nGelechiidae\nGelfomino\ngelid\nGelidiaceae\ngelidity\nGelidium\ngelidly\ngelidness\ngelignite\ngelilah\ngelinotte\ngell\nGellert\ngelly\ngelogenic\ngelong\ngeloscopy\ngelose\ngelosin\ngelotherapy\ngelotometer\ngelotoscopy\ngelototherapy\ngelsemic\ngelsemine\ngelseminic\ngelseminine\nGelsemium\ngelt\ngem\nGemara\nGemaric\nGemarist\ngematria\ngematrical\ngemauve\ngemel\ngemeled\ngemellione\ngemellus\ngeminate\ngeminated\ngeminately\ngemination\ngeminative\nGemini\nGeminid\ngeminiflorous\ngeminiform\ngeminous\nGemitores\ngemitorial\ngemless\ngemlike\nGemma\ngemma\ngemmaceous\ngemmae\ngemmate\ngemmation\ngemmative\ngemmeous\ngemmer\ngemmiferous\ngemmiferousness\ngemmification\ngemmiform\ngemmily\ngemminess\nGemmingia\ngemmipara\ngemmipares\ngemmiparity\ngemmiparous\ngemmiparously\ngemmoid\ngemmology\ngemmula\ngemmulation\ngemmule\ngemmuliferous\ngemmy\ngemot\ngemsbok\ngemsbuck\ngemshorn\ngemul\ngemuti\ngemwork\ngen\ngena\ngenal\ngenapp\ngenapper\ngenarch\ngenarcha\ngenarchaship\ngenarchship\ngendarme\ngendarmery\ngender\ngenderer\ngenderless\nGene\ngene\ngenealogic\ngenealogical\ngenealogically\ngenealogist\ngenealogize\ngenealogizer\ngenealogy\ngenear\ngeneat\ngenecologic\ngenecological\ngenecologically\ngenecologist\ngenecology\ngeneki\ngenep\ngenera\ngenerability\ngenerable\ngenerableness\ngeneral\ngeneralate\ngeneralcy\ngenerale\ngeneralia\nGeneralidad\ngeneralific\ngeneralism\ngeneralissima\ngeneralissimo\ngeneralist\ngeneralistic\ngenerality\ngeneralizable\ngeneralization\ngeneralize\ngeneralized\ngeneralizer\ngenerall\ngenerally\ngeneralness\ngeneralship\ngeneralty\ngenerant\ngenerate\ngenerating\ngeneration\ngenerational\ngenerationism\ngenerative\ngeneratively\ngenerativeness\ngenerator\ngeneratrix\ngeneric\ngenerical\ngenerically\ngenericalness\ngenerification\ngenerosity\ngenerous\ngenerously\ngenerousness\nGenesee\ngeneserine\nGenesiac\nGenesiacal\ngenesial\ngenesic\ngenesiology\ngenesis\nGenesitic\ngenesiurgic\ngenet\ngenethliac\ngenethliacal\ngenethliacally\ngenethliacon\ngenethliacs\ngenethlialogic\ngenethlialogical\ngenethlialogy\ngenethlic\ngenetic\ngenetical\ngenetically\ngeneticism\ngeneticist\ngenetics\ngenetmoil\ngenetous\nGenetrix\ngenetrix\nGenetta\nGeneura\nGeneva\ngeneva\nGenevan\nGenevese\nGenevieve\nGenevois\ngenevoise\ngenial\ngeniality\ngenialize\ngenially\ngenialness\ngenian\ngenic\ngenicular\ngeniculate\ngeniculated\ngeniculately\ngeniculation\ngeniculum\ngenie\ngenii\ngenin\ngenioglossal\ngenioglossi\ngenioglossus\ngeniohyoglossal\ngeniohyoglossus\ngeniohyoid\ngeniolatry\ngenion\ngenioplasty\ngenip\nGenipa\ngenipa\ngenipap\ngenipapada\ngenisaro\nGenista\ngenista\ngenistein\ngenital\ngenitalia\ngenitals\ngenitival\ngenitivally\ngenitive\ngenitocrural\ngenitofemoral\ngenitor\ngenitorial\ngenitory\ngenitourinary\ngeniture\ngenius\ngenizah\ngenizero\nGenny\nGenoa\ngenoblast\ngenoblastic\ngenocidal\ngenocide\nGenoese\ngenoese\ngenom\ngenome\ngenomic\ngenonema\ngenos\ngenotype\ngenotypic\ngenotypical\ngenotypically\nGenoveva\ngenovino\ngenre\ngenro\ngens\ngenson\ngent\ngenteel\ngenteelish\ngenteelism\ngenteelize\ngenteelly\ngenteelness\ngentes\ngenthite\ngentian\nGentiana\nGentianaceae\ngentianaceous\nGentianales\ngentianella\ngentianic\ngentianin\ngentianose\ngentianwort\ngentile\ngentiledom\ngentilesse\ngentilic\ngentilism\ngentilitial\ngentilitian\ngentilitious\ngentility\ngentilization\ngentilize\ngentiobiose\ngentiopicrin\ngentisein\ngentisic\ngentisin\ngentle\ngentlefolk\ngentlehearted\ngentleheartedly\ngentleheartedness\ngentlehood\ngentleman\ngentlemanhood\ngentlemanism\ngentlemanize\ngentlemanlike\ngentlemanlikeness\ngentlemanliness\ngentlemanly\ngentlemanship\ngentlemens\ngentlemouthed\ngentleness\ngentlepeople\ngentleship\ngentlewoman\ngentlewomanhood\ngentlewomanish\ngentlewomanlike\ngentlewomanliness\ngentlewomanly\ngently\ngentman\nGentoo\ngentrice\ngentry\ngenty\ngenu\ngenua\ngenual\ngenuclast\ngenuflect\ngenuflection\ngenuflector\ngenuflectory\ngenuflex\ngenuflexuous\ngenuine\ngenuinely\ngenuineness\ngenus\ngenyantrum\nGenyophrynidae\ngenyoplasty\ngenys\ngeo\ngeoaesthesia\ngeoagronomic\ngeobiologic\ngeobiology\ngeobiont\ngeobios\ngeoblast\ngeobotanic\ngeobotanical\ngeobotanist\ngeobotany\ngeocarpic\ngeocentric\ngeocentrical\ngeocentrically\ngeocentricism\ngeocerite\ngeochemical\ngeochemist\ngeochemistry\ngeochronic\ngeochronology\ngeochrony\nGeococcyx\ngeocoronium\ngeocratic\ngeocronite\ngeocyclic\ngeodaesia\ngeodal\ngeode\ngeodesic\ngeodesical\ngeodesist\ngeodesy\ngeodete\ngeodetic\ngeodetical\ngeodetically\ngeodetician\ngeodetics\ngeodiatropism\ngeodic\ngeodiferous\ngeodist\ngeoduck\ngeodynamic\ngeodynamical\ngeodynamics\ngeoethnic\nGeoff\nGeoffrey\ngeoffroyin\ngeoffroyine\ngeoform\ngeogenesis\ngeogenetic\ngeogenic\ngeogenous\ngeogeny\nGeoglossaceae\nGeoglossum\ngeoglyphic\ngeognosis\ngeognosist\ngeognost\ngeognostic\ngeognostical\ngeognostically\ngeognosy\ngeogonic\ngeogonical\ngeogony\ngeographer\ngeographic\ngeographical\ngeographically\ngeographics\ngeographism\ngeographize\ngeography\ngeohydrologist\ngeohydrology\ngeoid\ngeoidal\ngeoisotherm\ngeolatry\ngeologer\ngeologian\ngeologic\ngeological\ngeologically\ngeologician\ngeologist\ngeologize\ngeology\ngeomagnetic\ngeomagnetician\ngeomagnetics\ngeomagnetist\ngeomalic\ngeomalism\ngeomaly\ngeomance\ngeomancer\ngeomancy\ngeomant\ngeomantic\ngeomantical\ngeomantically\ngeometer\ngeometric\ngeometrical\ngeometrically\ngeometrician\ngeometricize\ngeometrid\nGeometridae\ngeometriform\nGeometrina\ngeometrine\ngeometrize\ngeometroid\nGeometroidea\ngeometry\ngeomoroi\ngeomorphic\ngeomorphist\ngeomorphogenic\ngeomorphogenist\ngeomorphogeny\ngeomorphological\ngeomorphology\ngeomorphy\ngeomyid\nGeomyidae\nGeomys\nGeon\ngeonavigation\ngeonegative\nGeonic\nGeonim\nGeonoma\ngeonoma\ngeonyctinastic\ngeonyctitropic\ngeoparallelotropic\ngeophagia\ngeophagism\ngeophagist\ngeophagous\ngeophagy\nGeophila\ngeophilid\nGeophilidae\ngeophilous\nGeophilus\nGeophone\ngeophone\ngeophysical\ngeophysicist\ngeophysics\ngeophyte\ngeophytic\ngeoplagiotropism\nGeoplana\nGeoplanidae\ngeopolar\ngeopolitic\ngeopolitical\ngeopolitically\ngeopolitician\ngeopolitics\nGeopolitik\ngeoponic\ngeoponical\ngeoponics\ngeopony\ngeopositive\nGeoprumnon\ngeorama\nGeordie\nGeorge\nGeorgemas\nGeorgette\nGeorgia\ngeorgiadesite\nGeorgian\nGeorgiana\ngeorgic\nGeorgie\ngeoscopic\ngeoscopy\ngeoselenic\ngeosid\ngeoside\ngeosphere\nGeospiza\ngeostatic\ngeostatics\ngeostrategic\ngeostrategist\ngeostrategy\ngeostrophic\ngeosynclinal\ngeosyncline\ngeotactic\ngeotactically\ngeotaxis\ngeotaxy\ngeotechnic\ngeotechnics\ngeotectology\ngeotectonic\ngeotectonics\nGeoteuthis\ngeotherm\ngeothermal\ngeothermic\ngeothermometer\nGeothlypis\ngeotic\ngeotical\ngeotilla\ngeotonic\ngeotonus\ngeotropic\ngeotropically\ngeotropism\ngeotropy\ngeoty\nGepeoo\nGephyrea\ngephyrean\ngephyrocercal\ngephyrocercy\nGepidae\nger\ngerah\nGerald\nGeraldine\nGeraniaceae\ngeraniaceous\ngeranial\nGeraniales\ngeranic\ngeraniol\nGeranium\ngeranium\ngeranomorph\nGeranomorphae\ngeranomorphic\ngeranyl\nGerard\ngerardia\nGerasene\ngerastian\ngerate\ngerated\ngeratic\ngeratologic\ngeratologous\ngeratology\ngeraty\ngerb\ngerbe\nGerbera\nGerberia\ngerbil\nGerbillinae\nGerbillus\ngercrow\ngereagle\ngerefa\ngerenda\ngerendum\ngerent\ngerenuk\ngerfalcon\ngerhardtite\ngeriatric\ngeriatrician\ngeriatrics\ngerim\ngerip\ngerm\ngermal\nGerman\ngerman\ngermander\ngermane\ngermanely\ngermaneness\nGermanesque\nGermanhood\nGermania\nGermanic\ngermanic\nGermanical\nGermanically\nGermanics\nGermanification\nGermanify\ngermanious\nGermanish\nGermanism\nGermanist\nGermanistic\ngermanite\nGermanity\ngermanity\ngermanium\nGermanization\ngermanization\nGermanize\ngermanize\nGermanizer\nGermanly\nGermanness\nGermanocentric\nGermanomania\nGermanomaniac\nGermanophile\nGermanophilist\nGermanophobe\nGermanophobia\nGermanophobic\nGermanophobist\ngermanous\nGermantown\ngermanyl\ngermarium\ngermen\ngermfree\ngermicidal\ngermicide\ngermifuge\ngermigenous\ngermin\ngermina\ngerminability\ngerminable\nGerminal\ngerminal\ngerminally\ngerminance\ngerminancy\ngerminant\ngerminate\ngermination\ngerminative\ngerminatively\ngerminator\ngerming\ngerminogony\ngermiparity\ngermless\ngermlike\ngermling\ngermon\ngermproof\ngermule\ngermy\ngernitz\ngerocomia\ngerocomical\ngerocomy\ngeromorphism\nGeronomite\ngeront\ngerontal\ngerontes\ngerontic\ngerontine\ngerontism\ngeronto\ngerontocracy\ngerontocrat\ngerontocratic\ngerontogeous\ngerontology\ngerontophilia\ngerontoxon\nGerres\ngerrhosaurid\nGerrhosauridae\nGerridae\ngerrymander\ngerrymanderer\ngers\ngersdorffite\nGershom\nGershon\nGershonite\ngersum\nGertie\nGertrude\ngerund\ngerundial\ngerundially\ngerundival\ngerundive\ngerundively\ngerusia\nGervais\ngervao\nGervas\nGervase\nGerygone\ngerygone\nGeryonia\ngeryonid\nGeryonidae\nGeryoniidae\nGes\nGesan\nGeshurites\ngesith\ngesithcund\ngesithcundman\nGesnera\nGesneraceae\ngesneraceous\nGesneria\ngesneria\nGesneriaceae\ngesneriaceous\nGesnerian\ngesning\ngessamine\ngesso\ngest\nGestalt\ngestalter\ngestaltist\ngestant\nGestapo\ngestate\ngestation\ngestational\ngestative\ngestatorial\ngestatorium\ngestatory\ngeste\ngested\ngesten\ngestening\ngestic\ngestical\ngesticulacious\ngesticulant\ngesticular\ngesticularious\ngesticulate\ngesticulation\ngesticulative\ngesticulatively\ngesticulator\ngesticulatory\ngestion\ngestning\ngestural\ngesture\ngestureless\ngesturer\nget\ngeta\nGetae\ngetah\ngetaway\ngether\nGethsemane\ngethsemane\nGethsemanic\ngethsemanic\nGetic\ngetling\ngetpenny\nGetsul\ngettable\ngetter\ngetting\ngetup\nGeullah\nGeum\ngeum\ngewgaw\ngewgawed\ngewgawish\ngewgawry\ngewgawy\ngey\ngeyan\ngeyerite\ngeyser\ngeyseral\ngeyseric\ngeyserine\ngeyserish\ngeyserite\ngez\nghafir\nghaist\nghalva\nGhan\ngharial\ngharnao\ngharry\nGhassanid\nghastily\nghastlily\nghastliness\nghastly\nghat\nghatti\nghatwal\nghatwazi\nghazi\nghazism\nGhaznevid\nGheber\nghebeta\nGhedda\nghee\nGheg\nGhegish\ngheleem\nGhent\ngherkin\nghetchoo\nghetti\nghetto\nghettoization\nghettoize\nGhibelline\nGhibellinism\nGhilzai\nGhiordes\nghizite\nghoom\nghost\nghostcraft\nghostdom\nghoster\nghostess\nghostfish\nghostflower\nghosthood\nghostified\nghostily\nghostish\nghostism\nghostland\nghostless\nghostlet\nghostlify\nghostlike\nghostlily\nghostliness\nghostly\nghostmonger\nghostology\nghostship\nghostweed\nghostwrite\nghosty\nghoul\nghoulery\nghoulish\nghoulishly\nghoulishness\nghrush\nghurry\nGhuz\nGi\nGiansar\ngiant\ngiantesque\ngiantess\ngianthood\ngiantish\ngiantism\ngiantize\ngiantkind\ngiantlike\ngiantly\ngiantry\ngiantship\nGiardia\ngiardia\ngiardiasis\ngiarra\ngiarre\nGib\ngib\ngibaro\ngibbals\ngibbed\ngibber\nGibberella\ngibbergunyah\ngibberish\ngibberose\ngibberosity\ngibbet\ngibbetwise\nGibbi\ngibblegabble\ngibblegabbler\ngibbles\ngibbon\ngibbose\ngibbosity\ngibbous\ngibbously\ngibbousness\ngibbsite\ngibbus\ngibby\ngibe\ngibel\ngibelite\nGibeonite\ngiber\ngibing\ngibingly\ngibleh\ngiblet\ngiblets\nGibraltar\nGibson\ngibstaff\ngibus\ngid\ngiddap\ngiddea\ngiddify\ngiddily\ngiddiness\ngiddy\ngiddyberry\ngiddybrain\ngiddyhead\ngiddyish\nGideon\nGideonite\ngidgee\ngie\ngied\ngien\nGienah\ngieseckite\ngif\ngiffgaff\nGifola\ngift\ngifted\ngiftedly\ngiftedness\ngiftie\ngiftless\ngiftling\ngiftware\ngig\ngigantean\ngigantesque\ngigantic\ngigantical\ngigantically\ngiganticidal\ngiganticide\ngiganticness\ngigantism\ngigantize\ngigantoblast\ngigantocyte\ngigantolite\ngigantological\ngigantology\ngigantomachy\nGigantopithecus\nGigantosaurus\nGigantostraca\ngigantostracan\ngigantostracous\nGigartina\nGigartinaceae\ngigartinaceous\nGigartinales\ngigback\ngigelira\ngigeria\ngigerium\ngigful\ngigger\ngiggish\ngiggit\ngiggle\ngiggledom\ngigglement\ngiggler\ngigglesome\ngiggling\ngigglingly\ngigglish\ngiggly\nGigi\ngiglet\ngigliato\ngiglot\ngigman\ngigmaness\ngigmanhood\ngigmania\ngigmanic\ngigmanically\ngigmanism\ngigmanity\ngignate\ngignitive\ngigolo\ngigot\ngigsman\ngigster\ngigtree\ngigunu\nGil\nGila\nGilaki\nGilbert\ngilbert\ngilbertage\nGilbertese\nGilbertian\nGilbertianism\ngilbertite\ngild\ngildable\ngilded\ngilden\ngilder\ngilding\nGileadite\nGileno\nGiles\ngilguy\nGilia\ngilia\nGiliak\ngilim\nGill\ngill\ngillaroo\ngillbird\ngilled\nGillenia\ngiller\nGilles\ngillflirt\ngillhooter\nGillian\ngillie\ngilliflirt\ngilling\ngilliver\ngillotage\ngillotype\ngillstoup\ngilly\ngillyflower\ngillygaupus\ngilo\ngilpy\ngilravage\ngilravager\ngilse\ngilsonite\ngilt\ngiltcup\ngilthead\ngilttail\ngim\ngimbal\ngimbaled\ngimbaljawed\ngimberjawed\ngimble\ngimcrack\ngimcrackery\ngimcrackiness\ngimcracky\ngimel\nGimirrai\ngimlet\ngimleteyed\ngimlety\ngimmal\ngimmer\ngimmerpet\ngimmick\ngimp\ngimped\ngimper\ngimping\ngin\nging\nginger\ngingerade\ngingerberry\ngingerbread\ngingerbready\ngingerin\ngingerleaf\ngingerline\ngingerliness\ngingerly\ngingerness\ngingernut\ngingerol\ngingerous\ngingerroot\ngingersnap\ngingerspice\ngingerwork\ngingerwort\ngingery\ngingham\nginghamed\ngingili\ngingiva\ngingivae\ngingival\ngingivalgia\ngingivectomy\ngingivitis\ngingivoglossitis\ngingivolabial\nginglyform\nginglymoarthrodia\nginglymoarthrodial\nGinglymodi\nginglymodian\nginglymoid\nginglymoidal\nGinglymostoma\nginglymostomoid\nginglymus\nginglyni\nginhouse\ngink\nGinkgo\nginkgo\nGinkgoaceae\nginkgoaceous\nGinkgoales\nginned\nginner\nginners\nginnery\nginney\nginning\nginnle\nGinny\nginny\nginseng\nginward\ngio\ngiobertite\ngiornata\ngiornatate\nGiottesque\nGiovanni\ngip\ngipon\ngipper\nGippy\ngipser\ngipsire\ngipsyweed\nGiraffa\ngiraffe\ngiraffesque\nGiraffidae\ngiraffine\ngiraffoid\ngirandola\ngirandole\ngirasol\ngirasole\ngirba\ngird\ngirder\ngirderage\ngirderless\ngirding\ngirdingly\ngirdle\ngirdlecake\ngirdlelike\ngirdler\ngirdlestead\ngirdling\ngirdlingly\nGirella\nGirellidae\nGirgashite\nGirgasite\ngirl\ngirleen\ngirlery\ngirlfully\ngirlhood\ngirlie\ngirliness\ngirling\ngirlish\ngirlishly\ngirlishness\ngirlism\ngirllike\ngirly\ngirn\ngirny\ngiro\ngiroflore\nGirondin\nGirondism\nGirondist\ngirouette\ngirouettism\ngirr\ngirse\ngirsh\ngirsle\ngirt\ngirth\ngirtline\ngisarme\ngish\ngisla\ngisler\ngismondine\ngismondite\ngist\ngit\ngitaligenin\ngitalin\nGitanemuck\ngith\nGitksan\ngitonin\ngitoxigenin\ngitoxin\ngittern\nGittite\ngittith\nGiuseppe\ngiustina\ngive\ngiveable\ngiveaway\ngiven\ngivenness\ngiver\ngivey\ngiving\ngizz\ngizzard\ngizzen\ngizzern\nglabella\nglabellae\nglabellar\nglabellous\nglabellum\nglabrate\nglabrescent\nglabrous\nglace\nglaceed\nglaceing\nglaciable\nglacial\nglacialism\nglacialist\nglacialize\nglacially\nglaciaria\nglaciarium\nglaciate\nglaciation\nglacier\nglaciered\nglacieret\nglacierist\nglacification\nglacioaqueous\nglaciolacustrine\nglaciological\nglaciologist\nglaciology\nglaciomarine\nglaciometer\nglacionatant\nglacis\nglack\nglad\ngladden\ngladdener\ngladdon\ngladdy\nglade\ngladelike\ngladeye\ngladful\ngladfully\ngladfulness\ngladhearted\ngladiate\ngladiator\ngladiatorial\ngladiatorism\ngladiatorship\ngladiatrix\ngladify\ngladii\ngladiola\ngladiolar\ngladiole\ngladioli\ngladiolus\ngladius\ngladkaite\ngladless\ngladly\ngladness\ngladsome\ngladsomely\ngladsomeness\nGladstone\nGladstonian\nGladstonianism\nglady\nGladys\nglaga\nGlagol\nGlagolic\nGlagolitic\nGlagolitsa\nglaieul\nglaik\nglaiket\nglaiketness\nglair\nglaireous\nglairiness\nglairy\nglaister\nglaive\nglaived\nglaked\nglaky\nglam\nglamberry\nglamorize\nglamorous\nglamorously\nglamour\nglamoury\nglance\nglancer\nglancing\nglancingly\ngland\nglandaceous\nglandarious\nglandered\nglanderous\nglanders\nglandes\nglandiferous\nglandiform\nglandless\nglandlike\nglandular\nglandularly\nglandule\nglanduliferous\nglanduliform\nglanduligerous\nglandulose\nglandulosity\nglandulous\nglandulousness\nGlaniostomi\nglans\nglar\nglare\nglareless\nGlareola\nglareole\nGlareolidae\nglareous\nglareproof\nglareworm\nglarily\nglariness\nglaring\nglaringly\nglaringness\nglarry\nglary\nGlaserian\nglaserite\nglashan\nglass\nglassen\nglasser\nglasses\nglassfish\nglassful\nglasshouse\nglassie\nglassily\nglassine\nglassiness\nGlassite\nglassless\nglasslike\nglassmaker\nglassmaking\nglassman\nglassophone\nglassrope\nglassteel\nglassware\nglassweed\nglasswork\nglassworker\nglassworking\nglassworks\nglasswort\nglassy\nGlaswegian\nGlathsheim\nGlathsheimr\nglauberite\nglaucescence\nglaucescent\nGlaucidium\nglaucin\nglaucine\nGlaucionetta\nGlaucium\nglaucochroite\nglaucodot\nglaucolite\nglaucoma\nglaucomatous\nGlaucomys\nGlauconia\nglauconiferous\nGlauconiidae\nglauconite\nglauconitic\nglauconitization\nglaucophane\nglaucophanite\nglaucophanization\nglaucophanize\nglaucophyllous\nGlaucopis\nglaucosuria\nglaucous\nglaucously\nGlauke\nglaum\nglaumrie\nglaur\nglaury\nGlaux\nglaver\nglaze\nglazed\nglazen\nglazer\nglazework\nglazier\nglaziery\nglazily\nglaziness\nglazing\nglazy\ngleam\ngleamily\ngleaminess\ngleaming\ngleamingly\ngleamless\ngleamy\nglean\ngleanable\ngleaner\ngleaning\ngleary\ngleba\nglebal\nglebe\nglebeless\nglebous\nGlecoma\nglede\nGleditsia\ngledy\nglee\ngleed\ngleeful\ngleefully\ngleefulness\ngleeishly\ngleek\ngleemaiden\ngleeman\ngleesome\ngleesomely\ngleesomeness\ngleet\ngleety\ngleewoman\ngleg\nglegly\nglegness\nGlen\nglen\nGlengarry\nGlenn\nglenohumeral\nglenoid\nglenoidal\nglent\nglessite\ngleyde\nglia\ngliadin\nglial\nglib\nglibbery\nglibly\nglibness\nglidder\ngliddery\nglide\nglideless\nglideness\nglider\ngliderport\nglidewort\ngliding\nglidingly\ngliff\ngliffing\nglime\nglimmer\nglimmering\nglimmeringly\nglimmerite\nglimmerous\nglimmery\nglimpse\nglimpser\nglink\nglint\nglioma\ngliomatous\ngliosa\ngliosis\nGlires\nGliridae\ngliriform\nGliriformia\nglirine\nGlis\nglisk\nglisky\nglissade\nglissader\nglissando\nglissette\nglisten\nglistening\nglisteningly\nglister\nglisteringly\nGlitnir\nglitter\nglitterance\nglittering\nglitteringly\nglittersome\nglittery\ngloam\ngloaming\ngloat\ngloater\ngloating\ngloatingly\nglobal\nglobally\nglobate\nglobated\nglobe\nglobed\nglobefish\nglobeflower\nglobeholder\nglobelet\nGlobicephala\nglobiferous\nGlobigerina\nglobigerine\nGlobigerinidae\nglobin\nGlobiocephalus\ngloboid\nglobose\nglobosely\ngloboseness\nglobosite\nglobosity\nglobosphaerite\nglobous\nglobously\nglobousness\nglobular\nGlobularia\nGlobulariaceae\nglobulariaceous\nglobularity\nglobularly\nglobularness\nglobule\nglobulet\nglobulicidal\nglobulicide\nglobuliferous\nglobuliform\nglobulimeter\nglobulin\nglobulinuria\nglobulite\nglobulitic\nglobuloid\nglobulolysis\nglobulose\nglobulous\nglobulousness\nglobulysis\ngloby\nglochid\nglochideous\nglochidia\nglochidial\nglochidian\nglochidiate\nglochidium\nglochis\nglockenspiel\ngloea\ngloeal\nGloeocapsa\ngloeocapsoid\ngloeosporiose\nGloeosporium\nGloiopeltis\nGloiosiphonia\nGloiosiphoniaceae\nglom\nglome\nglomerate\nglomeration\nGlomerella\nglomeroporphyritic\nglomerular\nglomerulate\nglomerule\nglomerulitis\nglomerulonephritis\nglomerulose\nglomerulus\nglommox\nglomus\nglonoin\nglonoine\ngloom\ngloomful\ngloomfully\ngloomily\ngloominess\nglooming\ngloomingly\ngloomless\ngloomth\ngloomy\nglop\ngloppen\nglor\nglore\nGloria\nGloriana\ngloriation\ngloriette\nglorifiable\nglorification\nglorifier\nglorify\ngloriole\nGloriosa\ngloriosity\nglorious\ngloriously\ngloriousness\nglory\ngloryful\nglorying\ngloryingly\ngloryless\ngloss\nglossa\nglossagra\nglossal\nglossalgia\nglossalgy\nglossanthrax\nglossarial\nglossarially\nglossarian\nglossarist\nglossarize\nglossary\nGlossata\nglossate\nglossator\nglossatorial\nglossectomy\nglossed\nglosser\nglossic\nglossily\nGlossina\nglossiness\nglossing\nglossingly\nGlossiphonia\nGlossiphonidae\nglossist\nglossitic\nglossitis\nglossless\nglossmeter\nglossocarcinoma\nglossocele\nglossocoma\nglossocomon\nglossodynamometer\nglossodynia\nglossoepiglottic\nglossoepiglottidean\nglossograph\nglossographer\nglossographical\nglossography\nglossohyal\nglossoid\nglossokinesthetic\nglossolabial\nglossolabiolaryngeal\nglossolabiopharyngeal\nglossolalia\nglossolalist\nglossolaly\nglossolaryngeal\nglossological\nglossologist\nglossology\nglossolysis\nglossoncus\nglossopalatine\nglossopalatinus\nglossopathy\nglossopetra\nGlossophaga\nglossophagine\nglossopharyngeal\nglossopharyngeus\nGlossophora\nglossophorous\nglossophytia\nglossoplasty\nglossoplegia\nglossopode\nglossopodium\nGlossopteris\nglossoptosis\nglossopyrosis\nglossorrhaphy\nglossoscopia\nglossoscopy\nglossospasm\nglossosteresis\nGlossotherium\nglossotomy\nglossotype\nglossy\nglost\nglottal\nglottalite\nglottalize\nglottic\nglottid\nglottidean\nglottis\nglottiscope\nglottogonic\nglottogonist\nglottogony\nglottologic\nglottological\nglottologist\nglottology\nGloucester\nglout\nglove\ngloveless\nglovelike\nglovemaker\nglovemaking\nglover\ngloveress\nglovey\ngloving\nglow\nglower\nglowerer\nglowering\ngloweringly\nglowfly\nglowing\nglowingly\nglowworm\nGloxinia\ngloy\ngloze\nglozing\nglozingly\nglub\nglucase\nglucemia\nglucid\nglucide\nglucidic\nglucina\nglucine\nglucinic\nglucinium\nglucinum\ngluck\nglucofrangulin\nglucokinin\nglucolipid\nglucolipide\nglucolipin\nglucolipine\nglucolysis\nglucosaemia\nglucosamine\nglucosan\nglucosane\nglucosazone\nglucose\nglucosemia\nglucosic\nglucosid\nglucosidal\nglucosidase\nglucoside\nglucosidic\nglucosidically\nglucosin\nglucosine\nglucosone\nglucosuria\nglucuronic\nglue\nglued\ngluemaker\ngluemaking\ngluepot\ngluer\ngluey\nglueyness\nglug\ngluish\ngluishness\nglum\ngluma\nGlumaceae\nglumaceous\nglumal\nGlumales\nglume\nglumiferous\nGlumiflorae\nglumly\nglummy\nglumness\nglumose\nglumosity\nglump\nglumpily\nglumpiness\nglumpish\nglumpy\nglunch\nGluneamie\nglusid\ngluside\nglut\nglutamic\nglutamine\nglutaminic\nglutaric\nglutathione\nglutch\ngluteal\nglutelin\ngluten\nglutenin\nglutenous\ngluteofemoral\ngluteoinguinal\ngluteoperineal\ngluteus\nglutin\nglutinate\nglutination\nglutinative\nglutinize\nglutinose\nglutinosity\nglutinous\nglutinously\nglutinousness\nglutition\nglutoid\nglutose\nglutter\ngluttery\nglutting\ngluttingly\nglutton\ngluttoness\ngluttonish\ngluttonism\ngluttonize\ngluttonous\ngluttonously\ngluttonousness\ngluttony\nglyceraldehyde\nglycerate\nGlyceria\nglyceric\nglyceride\nglycerin\nglycerinate\nglycerination\nglycerine\nglycerinize\nglycerite\nglycerize\nglycerizin\nglycerizine\nglycerogel\nglycerogelatin\nglycerol\nglycerolate\nglycerole\nglycerolize\nglycerophosphate\nglycerophosphoric\nglycerose\nglyceroxide\nglyceryl\nglycid\nglycide\nglycidic\nglycidol\nGlycine\nglycine\nglycinin\nglycocholate\nglycocholic\nglycocin\nglycocoll\nglycogelatin\nglycogen\nglycogenesis\nglycogenetic\nglycogenic\nglycogenize\nglycogenolysis\nglycogenous\nglycogeny\nglycohaemia\nglycohemia\nglycol\nglycolaldehyde\nglycolate\nglycolic\nglycolide\nglycolipid\nglycolipide\nglycolipin\nglycolipine\nglycoluric\nglycoluril\nglycolyl\nglycolylurea\nglycolysis\nglycolytic\nglycolytically\nGlyconian\nGlyconic\nglyconic\nglyconin\nglycoproteid\nglycoprotein\nglycosaemia\nglycose\nglycosemia\nglycosin\nglycosine\nglycosuria\nglycosuric\nglycuresis\nglycuronic\nglycyl\nglycyphyllin\nGlycyrrhiza\nglycyrrhizin\nGlynn\nglyoxal\nglyoxalase\nglyoxalic\nglyoxalin\nglyoxaline\nglyoxim\nglyoxime\nglyoxyl\nglyoxylic\nglyph\nglyphic\nglyphograph\nglyphographer\nglyphographic\nglyphography\nglyptic\nglyptical\nglyptician\nGlyptodon\nglyptodont\nGlyptodontidae\nglyptodontoid\nglyptograph\nglyptographer\nglyptographic\nglyptography\nglyptolith\nglyptological\nglyptologist\nglyptology\nglyptotheca\nGlyptotherium\nglyster\nGmelina\ngmelinite\ngnabble\nGnaeus\ngnaphalioid\nGnaphalium\ngnar\ngnarl\ngnarled\ngnarliness\ngnarly\ngnash\ngnashingly\ngnat\ngnatcatcher\ngnatflower\ngnathal\ngnathalgia\ngnathic\ngnathidium\ngnathion\ngnathism\ngnathite\ngnathitis\nGnatho\ngnathobase\ngnathobasic\nGnathobdellae\nGnathobdellida\ngnathometer\ngnathonic\ngnathonical\ngnathonically\ngnathonism\ngnathonize\ngnathophorous\ngnathoplasty\ngnathopod\nGnathopoda\ngnathopodite\ngnathopodous\ngnathostegite\nGnathostoma\nGnathostomata\ngnathostomatous\ngnathostome\nGnathostomi\ngnathostomous\ngnathotheca\ngnatling\ngnatproof\ngnatsnap\ngnatsnapper\ngnatter\ngnatty\ngnatworm\ngnaw\ngnawable\ngnawer\ngnawing\ngnawingly\ngnawn\ngneiss\ngneissic\ngneissitic\ngneissoid\ngneissose\ngneissy\nGnetaceae\ngnetaceous\nGnetales\nGnetum\ngnocchetti\ngnome\ngnomed\ngnomesque\ngnomic\ngnomical\ngnomically\ngnomide\ngnomish\ngnomist\ngnomologic\ngnomological\ngnomologist\ngnomology\ngnomon\nGnomonia\nGnomoniaceae\ngnomonic\ngnomonical\ngnomonics\ngnomonological\ngnomonologically\ngnomonology\ngnosiological\ngnosiology\ngnosis\nGnostic\ngnostic\ngnostical\ngnostically\nGnosticism\ngnosticity\ngnosticize\ngnosticizer\ngnostology\ngnu\ngo\ngoa\ngoad\ngoadsman\ngoadster\ngoaf\nGoajiro\ngoal\nGoala\ngoalage\ngoalee\ngoalie\ngoalkeeper\ngoalkeeping\ngoalless\ngoalmouth\nGoan\nGoanese\ngoanna\nGoasila\ngoat\ngoatbeard\ngoatbrush\ngoatbush\ngoatee\ngoateed\ngoatfish\ngoatherd\ngoatherdess\ngoatish\ngoatishly\ngoatishness\ngoatland\ngoatlike\ngoatling\ngoatly\ngoatroot\ngoatsbane\ngoatsbeard\ngoatsfoot\ngoatskin\ngoatstone\ngoatsucker\ngoatweed\ngoaty\ngoave\ngob\ngoback\ngoban\ngobang\ngobbe\ngobber\ngobbet\ngobbin\ngobbing\ngobble\ngobbledygook\ngobbler\ngobby\nGobelin\ngobelin\ngobernadora\ngobi\nGobia\nGobian\ngobiesocid\nGobiesocidae\ngobiesociform\nGobiesox\ngobiid\nGobiidae\ngobiiform\nGobiiformes\nGobinism\nGobinist\nGobio\ngobioid\nGobioidea\nGobioidei\ngoblet\ngobleted\ngobletful\ngoblin\ngobline\ngoblinesque\ngoblinish\ngoblinism\ngoblinize\ngoblinry\ngobmouthed\ngobo\ngobonated\ngobony\ngobstick\ngoburra\ngoby\ngobylike\ngocart\nGoclenian\nGod\ngod\ngodchild\nGoddam\nGoddard\ngoddard\ngoddaughter\ngodded\ngoddess\ngoddesshood\ngoddessship\ngoddikin\ngoddize\ngode\ngodet\nGodetia\ngodfather\ngodfatherhood\ngodfathership\nGodforsaken\nGodfrey\nGodful\ngodhead\ngodhood\nGodiva\ngodkin\ngodless\ngodlessly\ngodlessness\ngodlet\ngodlike\ngodlikeness\ngodlily\ngodliness\ngodling\ngodly\ngodmaker\ngodmaking\ngodmamma\ngodmother\ngodmotherhood\ngodmothership\ngodown\ngodpapa\ngodparent\nGodsake\ngodsend\ngodship\ngodson\ngodsonship\nGodspeed\nGodward\nGodwin\nGodwinian\ngodwit\ngoeduck\ngoel\ngoelism\nGoemagot\nGoemot\ngoer\ngoes\nGoetae\nGoethian\ngoetia\ngoetic\ngoetical\ngoety\ngoff\ngoffer\ngoffered\ngofferer\ngoffering\ngoffle\ngog\ngogga\ngoggan\ngoggle\ngoggled\ngoggler\ngogglers\ngoggly\ngoglet\nGogo\ngogo\nGohila\ngoi\ngoiabada\nGoidel\nGoidelic\ngoing\ngoitcho\ngoiter\ngoitered\ngoitral\ngoitrogen\ngoitrogenic\ngoitrous\nGokuraku\ngol\ngola\ngolach\ngoladar\ngolandaas\ngolandause\nGolaseccan\nGolconda\nGold\ngold\ngoldbeater\ngoldbeating\nGoldbird\ngoldbrick\ngoldbricker\ngoldbug\ngoldcrest\ngoldcup\ngolden\ngoldenback\ngoldeneye\ngoldenfleece\ngoldenhair\ngoldenknop\ngoldenlocks\ngoldenly\nGoldenmouth\ngoldenmouthed\ngoldenness\ngoldenpert\ngoldenrod\ngoldenseal\ngoldentop\ngoldenwing\ngolder\ngoldfielder\ngoldfinch\ngoldfinny\ngoldfish\ngoldflower\ngoldhammer\ngoldhead\nGoldi\nGoldic\ngoldie\ngoldilocks\ngoldin\ngoldish\ngoldless\ngoldlike\nGoldonian\ngoldseed\ngoldsinny\ngoldsmith\ngoldsmithery\ngoldsmithing\ngoldspink\ngoldstone\ngoldtail\ngoldtit\ngoldwater\ngoldweed\ngoldwork\ngoldworker\nGoldy\ngoldy\ngolee\ngolem\ngolf\ngolfdom\ngolfer\nGolgi\nGolgotha\ngoli\ngoliard\ngoliardery\ngoliardic\nGoliath\ngoliath\ngoliathize\ngolkakra\nGoll\ngolland\ngollar\ngolliwogg\ngolly\nGolo\ngoloe\ngolpe\nGoma\ngomari\nGomarian\nGomarist\nGomarite\ngomart\ngomashta\ngomavel\ngombay\ngombeen\ngombeenism\ngombroon\nGomeisa\ngomer\ngomeral\ngomlah\ngommelin\nGomontia\nGomorrhean\nGomphocarpus\ngomphodont\nGompholobium\ngomphosis\nGomphrena\ngomuti\ngon\nGona\ngonad\ngonadal\ngonadial\ngonadic\ngonadotropic\ngonadotropin\ngonaduct\ngonagra\ngonakie\ngonal\ngonalgia\ngonangial\ngonangium\ngonapod\ngonapophysal\ngonapophysial\ngonapophysis\ngonarthritis\nGond\ngondang\nGondi\ngondite\ngondola\ngondolet\ngondolier\ngone\ngoneness\ngoneoclinic\ngonepoiesis\ngonepoietic\ngoner\nGoneril\ngonesome\ngonfalcon\ngonfalonier\ngonfalonierate\ngonfaloniership\ngonfanon\ngong\ngongman\nGongoresque\nGongorism\nGongorist\ngongoristic\ngonia\ngoniac\ngonial\ngoniale\nGoniaster\ngoniatite\nGoniatites\ngoniatitic\ngoniatitid\nGoniatitidae\ngoniatitoid\ngonid\ngonidangium\ngonidia\ngonidial\ngonidic\ngonidiferous\ngonidiogenous\ngonidioid\ngonidiophore\ngonidiose\ngonidiospore\ngonidium\ngonimic\ngonimium\ngonimolobe\ngonimous\ngoniocraniometry\nGoniodoridae\nGoniodorididae\nGoniodoris\ngoniometer\ngoniometric\ngoniometrical\ngoniometrically\ngoniometry\ngonion\nGoniopholidae\nGoniopholis\ngoniostat\ngoniotropous\ngonitis\nGonium\ngonium\ngonnardite\ngonne\ngonoblast\ngonoblastic\ngonoblastidial\ngonoblastidium\ngonocalycine\ngonocalyx\ngonocheme\ngonochorism\ngonochorismal\ngonochorismus\ngonochoristic\ngonococcal\ngonococcic\ngonococcoid\ngonococcus\ngonocoel\ngonocyte\ngonoecium\nGonolobus\ngonomere\ngonomery\ngonophore\ngonophoric\ngonophorous\ngonoplasm\ngonopoietic\ngonorrhea\ngonorrheal\ngonorrheic\ngonosomal\ngonosome\ngonosphere\ngonostyle\ngonotheca\ngonothecal\ngonotokont\ngonotome\ngonotype\ngonozooid\ngony\ngonyalgia\ngonydeal\ngonydial\ngonyocele\ngonyoncus\ngonys\nGonystylaceae\ngonystylaceous\nGonystylus\ngonytheca\nGonzalo\ngoo\ngoober\ngood\nGoodenia\nGoodeniaceae\ngoodeniaceous\nGoodenoviaceae\ngoodhearted\ngoodheartedly\ngoodheartedness\ngooding\ngoodish\ngoodishness\ngoodlihead\ngoodlike\ngoodliness\ngoodly\ngoodman\ngoodmanship\ngoodness\ngoods\ngoodsome\ngoodwife\ngoodwill\ngoodwillit\ngoodwilly\ngoody\ngoodyear\nGoodyera\ngoodyish\ngoodyism\ngoodyness\ngoodyship\ngoof\ngoofer\ngoofily\ngoofiness\ngoofy\ngoogly\ngoogol\ngoogolplex\ngoogul\ngook\ngool\ngoolah\ngools\ngooma\ngoon\ngoondie\ngoonie\nGoop\ngoosander\ngoose\ngoosebeak\ngooseberry\ngoosebill\ngoosebird\ngoosebone\ngooseboy\ngoosecap\ngoosefish\ngooseflower\ngoosefoot\ngoosegirl\ngoosegog\ngooseherd\ngoosehouse\ngooselike\ngoosemouth\ngooseneck\ngoosenecked\ngooserumped\ngoosery\ngoosetongue\ngooseweed\ngoosewing\ngoosewinged\ngoosish\ngoosishly\ngoosishness\ngoosy\ngopher\ngopherberry\ngopherroot\ngopherwood\ngopura\nGor\ngor\ngora\ngoracco\ngoral\ngoran\ngorb\ngorbal\ngorbellied\ngorbelly\ngorbet\ngorble\ngorblimy\ngorce\ngorcock\ngorcrow\nGordiacea\ngordiacean\ngordiaceous\nGordian\nGordiidae\nGordioidea\nGordius\ngordolobo\nGordon\nGordonia\ngordunite\nGordyaean\ngore\ngorer\ngorevan\ngorfly\ngorge\ngorgeable\ngorged\ngorgedly\ngorgelet\ngorgeous\ngorgeously\ngorgeousness\ngorger\ngorgerin\ngorget\ngorgeted\ngorglin\nGorgon\nGorgonacea\ngorgonacean\ngorgonaceous\ngorgonesque\ngorgoneum\nGorgonia\nGorgoniacea\ngorgoniacean\ngorgoniaceous\nGorgonian\ngorgonian\ngorgonin\ngorgonize\ngorgonlike\nGorgonzola\nGorgosaurus\ngorhen\ngoric\ngorilla\ngorillaship\ngorillian\ngorilline\ngorilloid\ngorily\ngoriness\ngoring\nGorkhali\nGorkiesque\ngorlin\ngorlois\ngormandize\ngormandizer\ngormaw\ngormed\ngorra\ngorraf\ngorry\ngorse\ngorsebird\ngorsechat\ngorsedd\ngorsehatch\ngorsy\nGortonian\nGortonite\ngory\ngos\ngosain\ngoschen\ngosh\ngoshawk\nGoshen\ngoshenite\ngoslarite\ngoslet\ngosling\ngosmore\ngospel\ngospeler\ngospelist\ngospelize\ngospellike\ngospelly\ngospelmonger\ngospelwards\nGosplan\ngospodar\ngosport\ngossamer\ngossamered\ngossamery\ngossampine\ngossan\ngossaniferous\ngossard\ngossip\ngossipdom\ngossipee\ngossiper\ngossiphood\ngossipiness\ngossiping\ngossipingly\ngossipmonger\ngossipred\ngossipry\ngossipy\ngossoon\ngossy\ngossypine\nGossypium\ngossypol\ngossypose\ngot\ngotch\ngote\nGoth\nGotha\nGotham\nGothamite\nGothic\nGothically\nGothicism\nGothicist\nGothicity\nGothicize\nGothicizer\nGothicness\nGothish\nGothism\ngothite\nGothlander\nGothonic\nGotiglacial\ngotra\ngotraja\ngotten\nGottfried\nGottlieb\ngouaree\nGouda\nGoudy\ngouge\ngouger\ngoujon\ngoulash\ngoumi\ngoup\nGoura\ngourami\ngourd\ngourde\ngourdful\ngourdhead\ngourdiness\ngourdlike\ngourdworm\ngourdy\nGourinae\ngourmand\ngourmander\ngourmanderie\ngourmandism\ngourmet\ngourmetism\ngourounut\ngoustrous\ngousty\ngout\ngoutify\ngoutily\ngoutiness\ngoutish\ngoutte\ngoutweed\ngoutwort\ngouty\ngove\ngovern\ngovernability\ngovernable\ngovernableness\ngovernably\ngovernail\ngovernance\ngoverness\ngovernessdom\ngovernesshood\ngovernessy\ngoverning\ngoverningly\ngovernment\ngovernmental\ngovernmentalism\ngovernmentalist\ngovernmentalize\ngovernmentally\ngovernmentish\ngovernor\ngovernorate\ngovernorship\ngowan\ngowdnie\ngowf\ngowfer\ngowiddie\ngowk\ngowked\ngowkedly\ngowkedness\ngowkit\ngowl\ngown\ngownlet\ngownsman\ngowpen\ngoy\nGoyana\ngoyazite\nGoyetian\ngoyim\ngoyin\ngoyle\ngozell\ngozzard\ngra\nGraafian\ngrab\ngrabbable\ngrabber\ngrabble\ngrabbler\ngrabbling\ngrabbots\ngraben\ngrabhook\ngrabouche\nGrace\ngrace\ngraceful\ngracefully\ngracefulness\ngraceless\ngracelessly\ngracelessness\ngracelike\ngracer\nGracilaria\ngracilariid\nGracilariidae\ngracile\ngracileness\ngracilescent\ngracilis\ngracility\ngraciosity\ngracioso\ngracious\ngraciously\ngraciousness\ngrackle\nGraculus\ngrad\ngradable\ngradal\ngradate\ngradation\ngradational\ngradationally\ngradationately\ngradative\ngradatively\ngradatory\ngraddan\ngrade\ngraded\ngradefinder\ngradely\ngrader\nGradgrind\ngradgrind\nGradgrindian\nGradgrindish\nGradgrindism\ngradient\ngradienter\nGradientia\ngradin\ngradine\ngrading\ngradiometer\ngradiometric\ngradometer\ngradual\ngradualism\ngradualist\ngradualistic\ngraduality\ngradually\ngradualness\ngraduand\ngraduate\ngraduated\ngraduateship\ngraduatical\ngraduating\ngraduation\ngraduator\ngradus\nGraeae\nGraeculus\nGraeme\ngraff\ngraffage\ngraffer\nGraffias\ngraffito\ngrafship\ngraft\ngraftage\ngraftdom\ngrafted\ngrafter\ngrafting\ngraftonite\ngraftproof\nGraham\ngraham\ngrahamite\nGraian\ngrail\ngrailer\ngrailing\ngrain\ngrainage\ngrained\ngrainedness\ngrainer\ngrainering\ngrainery\ngrainfield\ngraininess\ngraining\ngrainland\ngrainless\ngrainman\ngrainsick\ngrainsickness\ngrainsman\ngrainways\ngrainy\ngraip\ngraisse\ngraith\nGrallae\nGrallatores\ngrallatorial\ngrallatory\ngrallic\nGrallina\ngralline\ngralloch\ngram\ngrama\ngramarye\ngramashes\ngrame\ngramenite\ngramicidin\nGraminaceae\ngraminaceous\nGramineae\ngramineal\ngramineous\ngramineousness\ngraminicolous\ngraminiferous\ngraminifolious\ngraminiform\ngraminin\ngraminivore\ngraminivorous\ngraminological\ngraminology\ngraminous\ngrammalogue\ngrammar\ngrammarian\ngrammarianism\ngrammarless\ngrammatic\ngrammatical\ngrammatically\ngrammaticalness\ngrammaticaster\ngrammaticism\ngrammaticize\ngrammatics\ngrammatist\ngrammatistical\ngrammatite\ngrammatolator\ngrammatolatry\nGrammatophyllum\ngramme\nGrammontine\ngramoches\nGramophone\ngramophone\ngramophonic\ngramophonical\ngramophonically\ngramophonist\ngramp\ngrampa\ngrampus\ngranada\ngranadilla\ngranadillo\nGranadine\ngranage\ngranary\ngranate\ngranatum\ngranch\ngrand\ngrandam\ngrandame\ngrandaunt\ngrandchild\ngranddad\ngranddaddy\ngranddaughter\ngranddaughterly\ngrandee\ngrandeeism\ngrandeeship\ngrandesque\ngrandeur\ngrandeval\ngrandfather\ngrandfatherhood\ngrandfatherish\ngrandfatherless\ngrandfatherly\ngrandfathership\ngrandfer\ngrandfilial\ngrandiloquence\ngrandiloquent\ngrandiloquently\ngrandiloquous\ngrandiose\ngrandiosely\ngrandiosity\ngrandisonant\nGrandisonian\nGrandisonianism\ngrandisonous\ngrandly\ngrandma\ngrandmaternal\nGrandmontine\ngrandmother\ngrandmotherhood\ngrandmotherism\ngrandmotherliness\ngrandmotherly\ngrandnephew\ngrandness\ngrandniece\ngrandpa\ngrandparent\ngrandparentage\ngrandparental\ngrandpaternal\ngrandsire\ngrandson\ngrandsonship\ngrandstand\ngrandstander\ngranduncle\ngrane\ngrange\ngranger\ngrangerism\ngrangerite\ngrangerization\ngrangerize\ngrangerizer\nGrangousier\ngraniform\ngranilla\ngranite\ngranitelike\ngraniteware\ngranitic\ngranitical\ngraniticoline\ngranitiferous\ngranitification\ngranitiform\ngranitite\ngranitization\ngranitize\ngranitoid\ngranivore\ngranivorous\ngranjeno\ngrank\ngrannom\ngranny\ngrannybush\ngrano\ngranoblastic\ngranodiorite\ngranogabbro\ngranolite\ngranolith\ngranolithic\ngranomerite\ngranophyre\ngranophyric\ngranose\ngranospherite\nGrant\ngrant\ngrantable\ngrantedly\ngrantee\ngranter\nGranth\nGrantha\nGrantia\nGrantiidae\ngrantor\ngranula\ngranular\ngranularity\ngranularly\ngranulary\ngranulate\ngranulated\ngranulater\ngranulation\ngranulative\ngranulator\ngranule\ngranulet\ngranuliferous\ngranuliform\ngranulite\ngranulitic\ngranulitis\ngranulitization\ngranulitize\ngranulize\ngranuloadipose\ngranulocyte\ngranuloma\ngranulomatous\ngranulometric\ngranulosa\ngranulose\ngranulous\nGranville\ngranza\ngranzita\ngrape\ngraped\ngrapeflower\ngrapefruit\ngrapeful\ngrapeless\ngrapelet\ngrapelike\ngrapenuts\ngraperoot\ngrapery\ngrapeshot\ngrapeskin\ngrapestalk\ngrapestone\ngrapevine\ngrapewise\ngrapewort\ngraph\ngraphalloy\ngraphic\ngraphical\ngraphically\ngraphicalness\ngraphicly\ngraphicness\ngraphics\nGraphidiaceae\nGraphiola\ngraphiological\ngraphiologist\ngraphiology\nGraphis\ngraphite\ngraphiter\ngraphitic\ngraphitization\ngraphitize\ngraphitoid\ngraphitoidal\nGraphium\ngraphologic\ngraphological\ngraphologist\ngraphology\ngraphomania\ngraphomaniac\ngraphometer\ngraphometric\ngraphometrical\ngraphometry\ngraphomotor\nGraphophone\ngraphophone\ngraphophonic\ngraphorrhea\ngraphoscope\ngraphospasm\ngraphostatic\ngraphostatical\ngraphostatics\ngraphotype\ngraphotypic\ngraphy\ngraping\ngrapnel\ngrappa\ngrapple\ngrappler\ngrappling\nGrapsidae\ngrapsoid\nGrapsus\nGrapta\ngraptolite\nGraptolitha\nGraptolithida\nGraptolithina\ngraptolitic\nGraptolitoidea\nGraptoloidea\ngraptomancy\ngrapy\ngrasp\ngraspable\ngrasper\ngrasping\ngraspingly\ngraspingness\ngraspless\ngrass\ngrassant\ngrassation\ngrassbird\ngrasschat\ngrasscut\ngrasscutter\ngrassed\ngrasser\ngrasset\ngrassflat\ngrassflower\ngrasshop\ngrasshopper\ngrasshopperdom\ngrasshopperish\ngrasshouse\ngrassiness\ngrassing\ngrassland\ngrassless\ngrasslike\ngrassman\ngrassnut\ngrassplot\ngrassquit\ngrasswards\ngrassweed\ngrasswidowhood\ngrasswork\ngrassworm\ngrassy\ngrat\ngrate\ngrateful\ngratefully\ngratefulness\ngrateless\ngrateman\ngrater\ngratewise\ngrather\nGratia\nGratiano\ngraticulate\ngraticulation\ngraticule\ngratification\ngratified\ngratifiedly\ngratifier\ngratify\ngratifying\ngratifyingly\ngratility\ngratillity\ngratinate\ngrating\nGratiola\ngratiolin\ngratiosolin\ngratis\ngratitude\ngratten\ngrattoir\ngratuitant\ngratuitous\ngratuitously\ngratuitousness\ngratuity\ngratulant\ngratulate\ngratulation\ngratulatorily\ngratulatory\ngraupel\ngravamen\ngravamina\ngrave\ngraveclod\ngravecloth\ngraveclothes\ngraved\ngravedigger\ngravegarth\ngravel\ngraveless\ngravelike\ngraveling\ngravelish\ngravelliness\ngravelly\ngravelroot\ngravelstone\ngravelweed\ngravely\ngravemaker\ngravemaking\ngraveman\ngravemaster\ngraven\ngraveness\nGravenstein\ngraveolence\ngraveolency\ngraveolent\ngraver\nGraves\ngraveship\ngraveside\ngravestead\ngravestone\ngraveward\ngravewards\ngraveyard\ngravic\ngravicembalo\ngravid\ngravidity\ngravidly\ngravidness\nGravigrada\ngravigrade\ngravimeter\ngravimetric\ngravimetrical\ngravimetrically\ngravimetry\ngraving\ngravitate\ngravitater\ngravitation\ngravitational\ngravitationally\ngravitative\ngravitometer\ngravity\ngravure\ngravy\ngrawls\ngray\ngrayback\ngraybeard\ngraycoat\ngrayfish\ngrayfly\ngrayhead\ngrayish\ngraylag\ngrayling\ngrayly\ngraymalkin\ngraymill\ngrayness\ngraypate\ngraywacke\ngrayware\ngraywether\ngrazable\ngraze\ngrazeable\ngrazer\ngrazier\ngrazierdom\ngraziery\ngrazing\ngrazingly\ngrease\ngreasebush\ngreasehorn\ngreaseless\ngreaselessness\ngreaseproof\ngreaseproofness\ngreaser\ngreasewood\ngreasily\ngreasiness\ngreasy\ngreat\ngreatcoat\ngreatcoated\ngreaten\ngreater\ngreathead\ngreatheart\ngreathearted\ngreatheartedness\ngreatish\ngreatly\ngreatmouthed\ngreatness\ngreave\ngreaved\ngreaves\ngrebe\nGrebo\ngrece\nGrecian\nGrecianize\nGrecism\nGrecize\nGrecomania\nGrecomaniac\nGrecophil\ngree\ngreed\ngreedily\ngreediness\ngreedless\ngreedsome\ngreedy\ngreedygut\ngreedyguts\nGreek\nGreekdom\nGreekery\nGreekess\nGreekish\nGreekism\nGreekist\nGreekize\nGreekless\nGreekling\ngreen\ngreenable\ngreenage\ngreenalite\ngreenback\nGreenbacker\nGreenbackism\ngreenbark\ngreenbone\ngreenbrier\nGreencloth\ngreencoat\ngreener\ngreenery\ngreeney\ngreenfinch\ngreenfish\ngreengage\ngreengill\ngreengrocer\ngreengrocery\ngreenhead\ngreenheaded\ngreenheart\ngreenhearted\ngreenhew\ngreenhide\ngreenhood\ngreenhorn\ngreenhornism\ngreenhouse\ngreening\ngreenish\ngreenishness\ngreenkeeper\ngreenkeeping\nGreenland\nGreenlander\nGreenlandic\nGreenlandish\ngreenlandite\nGreenlandman\ngreenleek\ngreenless\ngreenlet\ngreenling\ngreenly\ngreenness\ngreenockite\ngreenovite\ngreenroom\ngreensand\ngreensauce\ngreenshank\ngreensick\ngreensickness\ngreenside\ngreenstone\ngreenstuff\ngreensward\ngreenswarded\ngreentail\ngreenth\ngreenuk\ngreenweed\nGreenwich\ngreenwing\ngreenwithe\ngreenwood\ngreenwort\ngreeny\ngreenyard\ngreet\ngreeter\ngreeting\ngreetingless\ngreetingly\ngreffier\ngreffotome\nGreg\ngregal\ngregale\ngregaloid\ngregarian\ngregarianism\nGregarina\nGregarinae\nGregarinaria\ngregarine\nGregarinida\ngregarinidal\ngregariniform\nGregarinina\nGregarinoidea\ngregarinosis\ngregarinous\ngregarious\ngregariously\ngregariousness\ngregaritic\ngrege\nGregg\nGregge\ngreggle\ngrego\nGregor\nGregorian\nGregorianist\nGregorianize\nGregorianizer\nGregory\ngreige\ngrein\ngreisen\ngremial\ngremlin\ngrenade\nGrenadian\ngrenadier\ngrenadierial\ngrenadierly\ngrenadiership\ngrenadin\ngrenadine\nGrendel\nGrenelle\nGressoria\ngressorial\ngressorious\nGreta\nGretchen\nGretel\ngreund\nGrevillea\ngrew\ngrewhound\nGrewia\ngrey\ngreyhound\nGreyiaceae\ngreyly\ngreyness\ngribble\ngrice\ngrid\ngriddle\ngriddlecake\ngriddler\ngride\ngridelin\ngridiron\ngriece\ngrieced\ngrief\ngriefful\ngrieffully\ngriefless\ngrieflessness\ngrieshoch\ngrievance\ngrieve\ngrieved\ngrievedly\ngriever\ngrieveship\ngrieving\ngrievingly\ngrievous\ngrievously\ngrievousness\nGriff\ngriff\ngriffade\ngriffado\ngriffaun\ngriffe\ngriffin\ngriffinage\ngriffinesque\ngriffinhood\ngriffinish\ngriffinism\nGriffith\ngriffithite\nGriffon\ngriffon\ngriffonage\ngriffonne\ngrift\ngrifter\ngrig\ngriggles\ngrignet\ngrigri\ngrihastha\ngrihyasutra\ngrike\ngrill\ngrillade\ngrillage\ngrille\ngrilled\ngriller\ngrillroom\ngrillwork\ngrilse\ngrim\ngrimace\ngrimacer\ngrimacier\ngrimacing\ngrimacingly\ngrimalkin\ngrime\ngrimful\ngrimgribber\ngrimily\ngriminess\ngrimliness\ngrimly\ngrimme\nGrimmia\nGrimmiaceae\ngrimmiaceous\ngrimmish\ngrimness\ngrimp\ngrimy\ngrin\ngrinagog\ngrinch\ngrind\ngrindable\nGrindelia\ngrinder\ngrinderman\ngrindery\ngrinding\ngrindingly\ngrindle\ngrindstone\ngringo\ngringolee\ngringophobia\nGrinnellia\ngrinner\ngrinning\ngrinningly\ngrinny\ngrintern\ngrip\ngripe\ngripeful\ngriper\ngripgrass\ngriphite\nGriphosaurus\ngriping\ngripingly\ngripless\ngripman\ngripment\ngrippal\ngrippe\ngripper\ngrippiness\ngripping\ngrippingly\ngrippingness\ngripple\ngrippleness\ngrippotoxin\ngrippy\ngripsack\ngripy\nGriqua\ngriquaite\nGriqualander\ngris\ngrisaille\ngrisard\nGriselda\ngriseous\ngrisette\ngrisettish\ngrisgris\ngriskin\ngrisliness\ngrisly\nGrison\ngrison\ngrisounite\ngrisoutine\nGrissel\ngrissens\ngrissons\ngrist\ngristbite\ngrister\nGristhorbia\ngristle\ngristliness\ngristly\ngristmill\ngristmiller\ngristmilling\ngristy\ngrit\ngrith\ngrithbreach\ngrithman\ngritless\ngritrock\ngrits\ngritstone\ngritten\ngritter\ngrittily\ngrittiness\ngrittle\ngritty\ngrivet\ngrivna\nGrizel\nGrizzel\ngrizzle\ngrizzled\ngrizzler\ngrizzly\ngrizzlyman\ngroan\ngroaner\ngroanful\ngroaning\ngroaningly\ngroat\ngroats\ngroatsworth\ngrobian\ngrobianism\ngrocer\ngrocerdom\ngroceress\ngrocerly\ngrocerwise\ngrocery\ngroceryman\nGroenendael\ngroff\ngrog\ngroggery\ngroggily\ngrogginess\ngroggy\ngrogram\ngrogshop\ngroin\ngroined\ngroinery\ngroining\nGrolier\nGrolieresque\ngromatic\ngromatics\nGromia\ngrommet\ngromwell\ngroom\ngroomer\ngroomish\ngroomishly\ngroomlet\ngroomling\ngroomsman\ngroomy\ngroop\ngroose\ngroot\ngrooty\ngroove\ngrooveless\ngroovelike\ngroover\ngrooverhead\ngrooviness\ngrooving\ngroovy\ngrope\ngroper\ngroping\ngropingly\ngropple\ngrorudite\ngros\ngrosbeak\ngroschen\ngroser\ngroset\ngrosgrain\ngrosgrained\ngross\ngrossart\ngrossen\ngrosser\ngrossification\ngrossify\ngrossly\ngrossness\ngrosso\ngrossulaceous\ngrossular\nGrossularia\ngrossularia\nGrossulariaceae\ngrossulariaceous\ngrossularious\ngrossularite\ngrosz\ngroszy\ngrot\ngrotesque\ngrotesquely\ngrotesqueness\ngrotesquerie\ngrothine\ngrothite\nGrotian\nGrotianism\ngrottesco\ngrotto\ngrottoed\ngrottolike\ngrottowork\ngrouch\ngrouchily\ngrouchiness\ngrouchingly\ngrouchy\ngrouf\ngrough\nground\ngroundable\ngroundably\ngroundage\ngroundberry\ngroundbird\ngrounded\ngroundedly\ngroundedness\ngroundenell\ngrounder\ngroundflower\ngrounding\ngroundless\ngroundlessly\ngroundlessness\ngroundliness\ngroundling\ngroundly\ngroundman\ngroundmass\ngroundneedle\ngroundnut\ngroundplot\ngrounds\ngroundsel\ngroundsill\ngroundsman\ngroundward\ngroundwood\ngroundwork\ngroundy\ngroup\ngroupage\ngroupageness\ngrouped\ngrouper\ngrouping\ngroupist\ngrouplet\ngroupment\ngroupwise\ngrouse\ngrouseberry\ngrouseless\ngrouser\ngrouseward\ngrousewards\ngrousy\ngrout\ngrouter\ngrouthead\ngrouts\ngrouty\ngrouze\ngrove\ngroved\ngrovel\ngroveler\ngroveless\ngroveling\ngrovelingly\ngrovelings\ngrovy\ngrow\ngrowable\ngrowan\ngrowed\ngrower\ngrowing\ngrowingly\ngrowingupness\ngrowl\ngrowler\ngrowlery\ngrowling\ngrowlingly\ngrowly\ngrown\ngrownup\ngrowse\ngrowsome\ngrowth\ngrowthful\ngrowthiness\ngrowthless\ngrowthy\ngrozart\ngrozet\ngrr\ngrub\ngrubbed\ngrubber\ngrubbery\ngrubbily\ngrubbiness\ngrubby\ngrubhood\ngrubless\ngrubroot\ngrubs\ngrubstake\ngrubstaker\nGrubstreet\ngrubstreet\ngrubworm\ngrudge\ngrudgeful\ngrudgefully\ngrudgekin\ngrudgeless\ngrudger\ngrudgery\ngrudging\ngrudgingly\ngrudgingness\ngrudgment\ngrue\ngruel\ngrueler\ngrueling\ngruelly\nGrues\ngruesome\ngruesomely\ngruesomeness\ngruff\ngruffily\ngruffiness\ngruffish\ngruffly\ngruffness\ngruffs\ngruffy\ngrufted\ngrugru\nGruidae\ngruiform\nGruiformes\ngruine\nGruis\ngrum\ngrumble\ngrumbler\ngrumblesome\nGrumbletonian\ngrumbling\ngrumblingly\ngrumbly\ngrume\nGrumium\ngrumly\ngrummel\ngrummels\ngrummet\ngrummeter\ngrumness\ngrumose\ngrumous\ngrumousness\ngrump\ngrumph\ngrumphie\ngrumphy\ngrumpily\ngrumpiness\ngrumpish\ngrumpy\ngrun\nGrundified\nGrundlov\ngrundy\nGrundyism\nGrundyist\nGrundyite\ngrunerite\ngruneritization\ngrunion\ngrunt\ngrunter\nGrunth\ngrunting\ngruntingly\ngruntle\ngruntled\ngruntling\nGrus\ngrush\ngrushie\nGrusian\nGrusinian\ngruss\ngrutch\ngrutten\ngryde\ngrylli\ngryllid\nGryllidae\ngryllos\nGryllotalpa\nGryllus\ngryllus\ngrypanian\nGryphaea\nGryphosaurus\ngryposis\nGrypotherium\ngrysbok\nguaba\nguacacoa\nguachamaca\nguacharo\nguachipilin\nGuacho\nGuacico\nguacimo\nguacin\nguaco\nguaconize\nGuadagnini\nguadalcazarite\nGuaharibo\nGuahiban\nGuahibo\nGuahivo\nguaiac\nguaiacol\nguaiacolize\nguaiaconic\nguaiacum\nguaiaretic\nguaiasanol\nguaiol\nguaka\nGualaca\nguama\nguan\nGuana\nguana\nguanabana\nguanabano\nguanaco\nguanajuatite\nguanamine\nguanase\nguanay\nGuanche\nguaneide\nguango\nguanidine\nguanidopropionic\nguaniferous\nguanine\nguanize\nguano\nguanophore\nguanosine\nguanyl\nguanylic\nguao\nguapena\nguapilla\nguapinol\nGuaque\nguar\nguara\nguarabu\nguaracha\nguaraguao\nguarana\nGuarani\nguarani\nGuaranian\nguaranine\nguarantee\nguaranteeship\nguarantor\nguarantorship\nguaranty\nguarapucu\nGuaraunan\nGuarauno\nguard\nguardable\nguardant\nguarded\nguardedly\nguardedness\nguardeen\nguarder\nguardfish\nguardful\nguardfully\nguardhouse\nguardian\nguardiancy\nguardianess\nguardianless\nguardianly\nguardianship\nguarding\nguardingly\nguardless\nguardlike\nguardo\nguardrail\nguardroom\nguardship\nguardsman\nguardstone\nGuarea\nguariba\nguarinite\nguarneri\nGuarnerius\nGuarnieri\nGuarrau\nguarri\nGuaruan\nguasa\nGuastalline\nguatambu\nGuatemalan\nGuatemaltecan\nguativere\nGuato\nGuatoan\nGuatusan\nGuatuso\nGuauaenok\nguava\nguavaberry\nguavina\nguayaba\nguayabi\nguayabo\nguayacan\nGuayaqui\nGuaycuru\nGuaycuruan\nGuaymie\nguayroto\nguayule\nguaza\nGuazuma\ngubbertush\nGubbin\ngubbo\ngubernacula\ngubernacular\ngubernaculum\ngubernative\ngubernator\ngubernatorial\ngubernatrix\nguberniya\ngucki\ngud\ngudame\nguddle\ngude\ngudebrother\ngudefather\ngudemother\ngudesake\ngudesakes\ngudesire\ngudewife\ngudge\ngudgeon\ngudget\ngudok\ngue\nguebucu\nguejarite\nGuelph\nGuelphic\nGuelphish\nGuelphism\nguemal\nguenepe\nguenon\nguepard\nguerdon\nguerdonable\nguerdoner\nguerdonless\nguereza\nGuerickian\nGuerinet\nGuernsey\nguernsey\nguernseyed\nguerrilla\nguerrillaism\nguerrillaship\nGuesdism\nGuesdist\nguess\nguessable\nguesser\nguessing\nguessingly\nguesswork\nguessworker\nguest\nguestchamber\nguesten\nguester\nguesthouse\nguesting\nguestive\nguestless\nGuestling\nguestling\nguestmaster\nguestship\nguestwise\nGuetar\nGuetare\ngufa\nguff\nguffaw\nguffer\nguffin\nguffy\ngugal\nguggle\ngugglet\nguglet\nguglia\nguglio\ngugu\nGuha\nGuhayna\nguhr\nGuiana\nGuianan\nGuianese\nguib\nguiba\nguidable\nguidage\nguidance\nguide\nguideboard\nguidebook\nguidebookish\nguidecraft\nguideless\nguideline\nguidepost\nguider\nguideress\nguidership\nguideship\nguideway\nguidman\nGuido\nguidon\nGuidonian\nguidwilly\nguige\nGuignardia\nguignol\nguijo\nGuilandina\nguild\nguilder\nguildhall\nguildic\nguildry\nguildship\nguildsman\nguile\nguileful\nguilefully\nguilefulness\nguileless\nguilelessly\nguilelessness\nguilery\nguillemet\nguillemot\nGuillermo\nguillevat\nguilloche\nguillochee\nguillotinade\nguillotine\nguillotinement\nguillotiner\nguillotinism\nguillotinist\nguilt\nguiltily\nguiltiness\nguiltless\nguiltlessly\nguiltlessness\nguiltsick\nguilty\nguily\nguimbard\nguimpe\nGuinea\nguinea\nGuineaman\nGuinean\nGuinevere\nguipure\nGuisard\nguisard\nguise\nguiser\nGuisian\nguising\nguitar\nguitarfish\nguitarist\nguitermanite\nguitguit\nGuittonian\nGujar\nGujarati\nGujrati\ngul\ngula\ngulae\ngulaman\ngulancha\nGulanganes\ngular\ngularis\ngulch\ngulden\nguldengroschen\ngule\ngules\nGulf\ngulf\ngulflike\ngulfside\ngulfwards\ngulfweed\ngulfy\ngulgul\ngulinula\ngulinulae\ngulinular\ngulix\ngull\nGullah\ngullery\ngullet\ngulleting\ngullibility\ngullible\ngullibly\ngullion\ngullish\ngullishly\ngullishness\ngully\ngullyhole\nGulo\ngulonic\ngulose\ngulosity\ngulp\ngulper\ngulpin\ngulping\ngulpingly\ngulpy\ngulravage\ngulsach\nGum\ngum\ngumbo\ngumboil\ngumbotil\ngumby\ngumchewer\ngumdigger\ngumdigging\ngumdrop\ngumfield\ngumflower\ngumihan\ngumless\ngumlike\ngumly\ngumma\ngummage\ngummaker\ngummaking\ngummata\ngummatous\ngummed\ngummer\ngummiferous\ngumminess\ngumming\ngummite\ngummose\ngummosis\ngummosity\ngummous\ngummy\ngump\ngumphion\ngumption\ngumptionless\ngumptious\ngumpus\ngumshoe\ngumweed\ngumwood\ngun\nguna\ngunate\ngunation\ngunbearer\ngunboat\ngunbright\ngunbuilder\nguncotton\ngundi\ngundy\ngunebo\ngunfire\ngunflint\ngunge\ngunhouse\nGunite\ngunite\ngunj\ngunk\ngunl\ngunless\ngunlock\ngunmaker\ngunmaking\ngunman\ngunmanship\ngunnage\nGunnar\ngunne\ngunnel\ngunner\nGunnera\nGunneraceae\ngunneress\ngunnership\ngunnery\ngunnies\ngunning\ngunnung\ngunny\ngunocracy\ngunong\ngunpaper\ngunplay\ngunpowder\ngunpowderous\ngunpowdery\ngunpower\ngunrack\ngunreach\ngunrunner\ngunrunning\ngunsel\ngunshop\ngunshot\ngunsman\ngunsmith\ngunsmithery\ngunsmithing\ngunster\ngunstick\ngunstock\ngunstocker\ngunstocking\ngunstone\nGunter\ngunter\nGunther\ngunwale\ngunyah\ngunyang\ngunyeh\nGunz\nGunzian\ngup\nguppy\nguptavidya\ngur\nGuran\ngurdfish\ngurdle\ngurdwara\ngurge\ngurgeon\ngurgeons\ngurges\ngurgitation\ngurgle\ngurglet\ngurgling\ngurglingly\ngurgly\ngurgoyle\ngurgulation\nGurian\nGuric\nGurish\nGurjara\ngurjun\ngurk\nGurkha\ngurl\ngurly\nGurmukhi\ngurnard\ngurnet\ngurnetty\nGurneyite\ngurniad\ngurr\ngurrah\ngurry\ngurt\nguru\nguruship\nGus\ngush\ngusher\ngushet\ngushily\ngushiness\ngushing\ngushingly\ngushingness\ngushy\ngusla\ngusle\nguss\ngusset\nGussie\ngussie\ngust\ngustable\ngustation\ngustative\ngustativeness\ngustatory\nGustavus\ngustful\ngustfully\ngustfulness\ngustily\ngustiness\ngustless\ngusto\ngustoish\nGustus\ngusty\ngut\nGuti\nGutium\ngutless\ngutlike\ngutling\nGutnic\nGutnish\ngutt\ngutta\nguttable\nguttate\nguttated\nguttatim\nguttation\ngutte\ngutter\nGuttera\ngutterblood\nguttering\ngutterlike\ngutterling\ngutterman\nguttersnipe\nguttersnipish\ngutterspout\ngutterwise\nguttery\ngutti\nguttide\nguttie\nGuttiferae\nguttiferal\nGuttiferales\nguttiferous\nguttiform\nguttiness\nguttle\nguttler\nguttula\nguttulae\nguttular\nguttulate\nguttule\nguttural\ngutturalism\ngutturality\ngutturalization\ngutturalize\ngutturally\ngutturalness\ngutturize\ngutturonasal\ngutturopalatal\ngutturopalatine\ngutturotetany\nguttus\ngutty\ngutweed\ngutwise\ngutwort\nguvacine\nguvacoline\nGuy\nguy\nGuyandot\nguydom\nguyer\nguytrash\nguz\nguze\nGuzmania\nguzmania\nGuzul\nguzzle\nguzzledom\nguzzler\ngwag\ngweduc\ngweed\ngweeon\ngwely\nGwen\nGwendolen\ngwine\ngwyniad\nGyarung\ngyascutus\nGyges\nGygis\ngyle\ngym\ngymel\ngymkhana\nGymnadenia\nGymnadeniopsis\nGymnanthes\ngymnanthous\nGymnarchidae\nGymnarchus\ngymnasia\ngymnasial\ngymnasiarch\ngymnasiarchy\ngymnasiast\ngymnasic\ngymnasium\ngymnast\ngymnastic\ngymnastically\ngymnastics\ngymnemic\ngymnetrous\ngymnic\ngymnical\ngymnics\ngymnite\nGymnoblastea\ngymnoblastic\nGymnocalycium\ngymnocarpic\ngymnocarpous\nGymnocerata\ngymnoceratous\ngymnocidium\nGymnocladus\nGymnoconia\nGymnoderinae\nGymnodiniaceae\ngymnodiniaceous\nGymnodiniidae\nGymnodinium\ngymnodont\nGymnodontes\ngymnogen\ngymnogenous\nGymnoglossa\ngymnoglossate\ngymnogynous\nGymnogyps\nGymnolaema\nGymnolaemata\ngymnolaematous\nGymnonoti\nGymnopaedes\ngymnopaedic\ngymnophiona\ngymnoplast\nGymnorhina\ngymnorhinal\nGymnorhininae\ngymnosoph\ngymnosophist\ngymnosophy\ngymnosperm\nGymnospermae\ngymnospermal\ngymnospermic\ngymnospermism\nGymnospermous\ngymnospermy\nGymnosporangium\ngymnospore\ngymnosporous\nGymnostomata\nGymnostomina\ngymnostomous\nGymnothorax\ngymnotid\nGymnotidae\nGymnotoka\ngymnotokous\nGymnotus\nGymnura\ngymnure\nGymnurinae\ngymnurine\ngympie\ngyn\ngynaecea\ngynaeceum\ngynaecocoenic\ngynander\ngynandrarchic\ngynandrarchy\nGynandria\ngynandria\ngynandrian\ngynandrism\ngynandroid\ngynandromorph\ngynandromorphic\ngynandromorphism\ngynandromorphous\ngynandromorphy\ngynandrophore\ngynandrosporous\ngynandrous\ngynandry\ngynantherous\ngynarchic\ngynarchy\ngyne\ngynecic\ngynecidal\ngynecide\ngynecocentric\ngynecocracy\ngynecocrat\ngynecocratic\ngynecocratical\ngynecoid\ngynecolatry\ngynecologic\ngynecological\ngynecologist\ngynecology\ngynecomania\ngynecomastia\ngynecomastism\ngynecomasty\ngynecomazia\ngynecomorphous\ngyneconitis\ngynecopathic\ngynecopathy\ngynecophore\ngynecophoric\ngynecophorous\ngynecotelic\ngynecratic\ngyneocracy\ngyneolater\ngyneolatry\ngynephobia\nGynerium\ngynethusia\ngyniatrics\ngyniatry\ngynic\ngynics\ngynobase\ngynobaseous\ngynobasic\ngynocardia\ngynocardic\ngynocracy\ngynocratic\ngynodioecious\ngynodioeciously\ngynodioecism\ngynoecia\ngynoecium\ngynogenesis\ngynomonecious\ngynomonoeciously\ngynomonoecism\ngynophagite\ngynophore\ngynophoric\ngynosporangium\ngynospore\ngynostegia\ngynostegium\ngynostemium\nGynura\ngyp\nGypaetus\ngype\ngypper\nGyppo\nGyps\ngyps\ngypseian\ngypseous\ngypsiferous\ngypsine\ngypsiologist\ngypsite\ngypsography\ngypsologist\ngypsology\nGypsophila\ngypsophila\ngypsophilous\ngypsophily\ngypsoplast\ngypsous\ngypster\ngypsum\nGypsy\ngypsy\ngypsydom\ngypsyesque\ngypsyfy\ngypsyhead\ngypsyhood\ngypsyish\ngypsyism\ngypsylike\ngypsyry\ngypsyweed\ngypsywise\ngypsywort\nGyracanthus\ngyral\ngyrally\ngyrant\ngyrate\ngyration\ngyrational\ngyrator\ngyratory\ngyre\nGyrencephala\ngyrencephalate\ngyrencephalic\ngyrencephalous\ngyrene\ngyrfalcon\ngyri\ngyric\ngyrinid\nGyrinidae\nGyrinus\ngyro\ngyrocar\ngyroceracone\ngyroceran\nGyroceras\ngyrochrome\ngyrocompass\nGyrodactylidae\nGyrodactylus\ngyrogonite\ngyrograph\ngyroidal\ngyroidally\ngyrolite\ngyrolith\ngyroma\ngyromagnetic\ngyromancy\ngyromele\ngyrometer\nGyromitra\ngyron\ngyronny\nGyrophora\nGyrophoraceae\nGyrophoraceous\ngyrophoric\ngyropigeon\ngyroplane\ngyroscope\ngyroscopic\ngyroscopically\ngyroscopics\ngyrose\ngyrostabilizer\nGyrostachys\ngyrostat\ngyrostatic\ngyrostatically\ngyrostatics\nGyrotheca\ngyrous\ngyrovagi\ngyrovagues\ngyrowheel\ngyrus\ngyte\ngytling\ngyve\nH\nh\nha\nhaab\nhaaf\nHabab\nhabanera\nHabbe\nhabble\nhabdalah\nHabe\nhabeas\nhabena\nhabenal\nhabenar\nHabenaria\nhabendum\nhabenula\nhabenular\nhaberdash\nhaberdasher\nhaberdasheress\nhaberdashery\nhaberdine\nhabergeon\nhabilable\nhabilatory\nhabile\nhabiliment\nhabilimentation\nhabilimented\nhabilitate\nhabilitation\nhabilitator\nhability\nhabille\nHabiri\nHabiru\nhabit\nhabitability\nhabitable\nhabitableness\nhabitably\nhabitacle\nhabitacule\nhabitally\nhabitan\nhabitance\nhabitancy\nhabitant\nhabitat\nhabitate\nhabitation\nhabitational\nhabitative\nhabited\nhabitual\nhabituality\nhabitualize\nhabitually\nhabitualness\nhabituate\nhabituation\nhabitude\nhabitudinal\nhabitue\nhabitus\nhabnab\nhaboob\nHabronema\nhabronemiasis\nhabronemic\nhabu\nhabutai\nhabutaye\nhache\nHachiman\nhachure\nhacienda\nhack\nhackamatak\nhackamore\nhackbarrow\nhackberry\nhackbolt\nhackbush\nhackbut\nhackbuteer\nhacked\nhackee\nhacker\nhackery\nhackin\nhacking\nhackingly\nhackle\nhackleback\nhackler\nhacklog\nhackly\nhackmack\nhackman\nhackmatack\nhackney\nhackneyed\nhackneyer\nhackneyism\nhackneyman\nhacksaw\nhacksilber\nhackster\nhackthorn\nhacktree\nhackwood\nhacky\nhad\nHadassah\nhadbot\nhadden\nhaddie\nhaddo\nhaddock\nhaddocker\nhade\nHadean\nHadendoa\nHadendowa\nhadentomoid\nHadentomoidea\nHades\nHadhramautian\nhading\nHadith\nhadj\nHadjemi\nhadji\nhadland\nHadramautian\nhadrome\nHadromerina\nhadromycosis\nhadrosaur\nHadrosaurus\nhaec\nhaecceity\nHaeckelian\nHaeckelism\nhaem\nHaemamoeba\nHaemanthus\nHaemaphysalis\nhaemaspectroscope\nhaematherm\nhaemathermal\nhaemathermous\nhaematinon\nhaematinum\nhaematite\nHaematobranchia\nhaematobranchiate\nHaematocrya\nhaematocryal\nHaematophilina\nhaematophiline\nHaematopus\nhaematorrhachis\nhaematosepsis\nHaematotherma\nhaematothermal\nhaematoxylic\nhaematoxylin\nHaematoxylon\nhaemoconcentration\nhaemodilution\nHaemodoraceae\nhaemodoraceous\nhaemoglobin\nhaemogram\nHaemogregarina\nHaemogregarinidae\nhaemonchiasis\nhaemonchosis\nHaemonchus\nhaemony\nhaemophile\nHaemoproteus\nhaemorrhage\nhaemorrhagia\nhaemorrhagic\nhaemorrhoid\nhaemorrhoidal\nhaemosporid\nHaemosporidia\nhaemosporidian\nHaemosporidium\nHaemulidae\nhaemuloid\nhaeremai\nhaet\nhaff\nhaffet\nhaffkinize\nhaffle\nHafgan\nhafiz\nhafnium\nhafnyl\nhaft\nhafter\nhag\nHaganah\nHagarite\nhagberry\nhagboat\nhagborn\nhagbush\nhagdon\nhageen\nHagenia\nhagfish\nhaggada\nhaggaday\nhaggadic\nhaggadical\nhaggadist\nhaggadistic\nhaggard\nhaggardly\nhaggardness\nhagged\nhagger\nhaggis\nhaggish\nhaggishly\nhaggishness\nhaggister\nhaggle\nhaggler\nhaggly\nhaggy\nhagi\nhagia\nhagiarchy\nhagiocracy\nHagiographa\nhagiographal\nhagiographer\nhagiographic\nhagiographical\nhagiographist\nhagiography\nhagiolater\nhagiolatrous\nhagiolatry\nhagiologic\nhagiological\nhagiologist\nhagiology\nhagiophobia\nhagioscope\nhagioscopic\nhaglet\nhaglike\nhaglin\nhagride\nhagrope\nhagseed\nhagship\nhagstone\nhagtaper\nhagweed\nhagworm\nhah\nHahnemannian\nHahnemannism\nHaiathalah\nHaida\nHaidan\nHaidee\nhaidingerite\nHaiduk\nhaik\nhaikai\nhaikal\nHaikh\nhaikwan\nhail\nhailer\nhailproof\nhailse\nhailshot\nhailstone\nhailstorm\nhailweed\nhaily\nHaimavati\nhain\nHainai\nHainan\nHainanese\nhainberry\nhaine\nhair\nhairband\nhairbeard\nhairbird\nhairbrain\nhairbreadth\nhairbrush\nhaircloth\nhaircut\nhaircutter\nhaircutting\nhairdo\nhairdress\nhairdresser\nhairdressing\nhaire\nhaired\nhairen\nhairhoof\nhairhound\nhairif\nhairiness\nhairlace\nhairless\nhairlessness\nhairlet\nhairline\nhairlock\nhairmeal\nhairmonger\nhairpin\nhairsplitter\nhairsplitting\nhairspring\nhairstone\nhairstreak\nhairtail\nhairup\nhairweed\nhairwood\nhairwork\nhairworm\nhairy\nHaisla\nHaithal\nHaitian\nhaje\nhajib\nhajilij\nhak\nhakam\nhakdar\nhake\nHakea\nhakeem\nhakenkreuz\nHakenkreuzler\nhakim\nHakka\nhako\nhaku\nHal\nhala\nhalakah\nhalakic\nhalakist\nhalakistic\nhalal\nhalalcor\nhalation\nHalawi\nhalazone\nhalberd\nhalberdier\nhalberdman\nhalberdsman\nhalbert\nhalch\nhalcyon\nhalcyonian\nhalcyonic\nHalcyonidae\nHalcyoninae\nhalcyonine\nHaldanite\nhale\nhalebi\nHalecomorphi\nhaleness\nHalenia\nhaler\nhalerz\nHalesia\nhalesome\nhalf\nhalfback\nhalfbeak\nhalfer\nhalfheaded\nhalfhearted\nhalfheartedly\nhalfheartedness\nhalfling\nhalfman\nhalfness\nhalfpace\nhalfpaced\nhalfpenny\nhalfpennyworth\nhalfway\nhalfwise\nHaliaeetus\nhalibios\nhalibiotic\nhalibiu\nhalibut\nhalibuter\nHalicarnassean\nHalicarnassian\nHalichondriae\nhalichondrine\nhalichondroid\nHalicore\nHalicoridae\nhalide\nhalidom\nhalieutic\nhalieutically\nhalieutics\nHaligonian\nHalimeda\nhalimous\nhalinous\nhaliographer\nhaliography\nHaliotidae\nHaliotis\nhaliotoid\nhaliplankton\nhaliplid\nHaliplidae\nHaliserites\nhalisteresis\nhalisteretic\nhalite\nHalitheriidae\nHalitherium\nhalitosis\nhalituosity\nhalituous\nhalitus\nhall\nhallabaloo\nhallage\nhallah\nhallan\nhallanshaker\nhallebardier\nhallecret\nhalleflinta\nhalleflintoid\nhallel\nhallelujah\nhallelujatic\nhallex\nHalleyan\nhalliblash\nhalling\nhallman\nhallmark\nhallmarked\nhallmarker\nhallmoot\nhalloo\nHallopididae\nhallopodous\nHallopus\nhallow\nHallowday\nhallowed\nhallowedly\nhallowedness\nHalloween\nhallower\nHallowmas\nHallowtide\nhalloysite\nHallstatt\nHallstattian\nhallucal\nhallucinate\nhallucination\nhallucinational\nhallucinative\nhallucinator\nhallucinatory\nhallucined\nhallucinosis\nhallux\nhallway\nhalma\nhalmalille\nhalmawise\nhalo\nHaloa\nHalobates\nhalobios\nhalobiotic\nhalochromism\nhalochromy\nHalocynthiidae\nhaloesque\nhalogen\nhalogenate\nhalogenation\nhalogenoid\nhalogenous\nHalogeton\nhalohydrin\nhaloid\nhalolike\nhalolimnic\nhalomancy\nhalometer\nhalomorphic\nhalophile\nhalophilism\nhalophilous\nhalophyte\nhalophytic\nhalophytism\nHalopsyche\nHalopsychidae\nHaloragidaceae\nhaloragidaceous\nHalosauridae\nHalosaurus\nhaloscope\nHalosphaera\nhalotrichite\nhaloxene\nhals\nhalse\nhalsen\nhalsfang\nhalt\nhalter\nhalterbreak\nhalteres\nHalteridium\nhalterproof\nHaltica\nhalting\nhaltingly\nhaltingness\nhaltless\nhalucket\nhalukkah\nhalurgist\nhalurgy\nhalutz\nhalvaner\nhalvans\nhalve\nhalved\nhalvelings\nhalver\nhalves\nhalyard\nHalysites\nham\nhamacratic\nHamadan\nhamadryad\nHamal\nhamal\nhamald\nHamamelidaceae\nhamamelidaceous\nHamamelidanthemum\nhamamelidin\nHamamelidoxylon\nhamamelin\nHamamelis\nHamamelites\nhamartiologist\nhamartiology\nhamartite\nhamate\nhamated\nHamathite\nhamatum\nhambergite\nhamble\nhambroline\nhamburger\nhame\nhameil\nhamel\nHamelia\nhamesucken\nhamewith\nhamfat\nhamfatter\nhami\nHamidian\nHamidieh\nhamiform\nHamilton\nHamiltonian\nHamiltonianism\nHamiltonism\nhamingja\nhamirostrate\nHamital\nHamite\nHamites\nHamitic\nHamiticized\nHamitism\nHamitoid\nhamlah\nhamlet\nhamleted\nhamleteer\nhamletization\nhamletize\nhamlinite\nhammada\nhammam\nhammer\nhammerable\nhammerbird\nhammercloth\nhammerdress\nhammerer\nhammerfish\nhammerhead\nhammerheaded\nhammering\nhammeringly\nhammerkop\nhammerless\nhammerlike\nhammerman\nhammersmith\nhammerstone\nhammertoe\nhammerwise\nhammerwork\nhammerwort\nhammochrysos\nhammock\nhammy\nhamose\nhamous\nhamper\nhamperedly\nhamperedness\nhamperer\nhamperman\nHampshire\nhamrongite\nhamsa\nhamshackle\nhamster\nhamstring\nhamular\nhamulate\nhamule\nHamulites\nhamulose\nhamulus\nhamus\nhamza\nhan\nHanafi\nHanafite\nhanaper\nhanaster\nHanbalite\nhanbury\nhance\nhanced\nhanch\nhancockite\nhand\nhandbag\nhandball\nhandballer\nhandbank\nhandbanker\nhandbarrow\nhandbill\nhandblow\nhandbolt\nhandbook\nhandbow\nhandbreadth\nhandcar\nhandcart\nhandclap\nhandclasp\nhandcloth\nhandcraft\nhandcraftman\nhandcraftsman\nhandcuff\nhanded\nhandedness\nHandelian\nhander\nhandersome\nhandfast\nhandfasting\nhandfastly\nhandfastness\nhandflower\nhandful\nhandgrasp\nhandgravure\nhandgrip\nhandgriping\nhandgun\nhandhaving\nhandhold\nhandhole\nhandicap\nhandicapped\nhandicapper\nhandicraft\nhandicraftship\nhandicraftsman\nhandicraftsmanship\nhandicraftswoman\nhandicuff\nhandily\nhandiness\nhandistroke\nhandiwork\nhandkercher\nhandkerchief\nhandkerchiefful\nhandlaid\nhandle\nhandleable\nhandled\nhandleless\nhandler\nhandless\nhandlike\nhandling\nhandmade\nhandmaid\nhandmaiden\nhandmaidenly\nhandout\nhandpost\nhandprint\nhandrail\nhandrailing\nhandreader\nhandreading\nhandsale\nhandsaw\nhandsbreadth\nhandscrape\nhandsel\nhandseller\nhandset\nhandshake\nhandshaker\nhandshaking\nhandsmooth\nhandsome\nhandsomeish\nhandsomely\nhandsomeness\nhandspade\nhandspike\nhandspoke\nhandspring\nhandstaff\nhandstand\nhandstone\nhandstroke\nhandwear\nhandwheel\nhandwhile\nhandwork\nhandworkman\nhandwrist\nhandwrite\nhandwriting\nhandy\nhandyblow\nhandybook\nhandygrip\nhangability\nhangable\nhangalai\nhangar\nhangbird\nhangby\nhangdog\nhange\nhangee\nhanger\nhangfire\nhangie\nhanging\nhangingly\nhangkang\nhangle\nhangman\nhangmanship\nhangment\nhangnail\nhangnest\nhangout\nhangul\nhangwoman\nhangworm\nhangworthy\nhanif\nhanifism\nhanifite\nhanifiya\nHank\nhank\nhanker\nhankerer\nhankering\nhankeringly\nhankie\nhankle\nhanksite\nhanky\nhanna\nhannayite\nHannibal\nHannibalian\nHannibalic\nHano\nHanoverian\nHanoverianize\nHanoverize\nHans\nhansa\nHansard\nHansardization\nHansardize\nHanse\nhanse\nHanseatic\nhansel\nhansgrave\nhansom\nhant\nhantle\nHanukkah\nHanuman\nhao\nhaole\nhaoma\nhaori\nhap\nHapale\nHapalidae\nhapalote\nHapalotis\nhapaxanthous\nhaphazard\nhaphazardly\nhaphazardness\nhaphtarah\nHapi\nhapless\nhaplessly\nhaplessness\nhaplite\nhaplocaulescent\nhaplochlamydeous\nHaplodoci\nHaplodon\nhaplodont\nhaplodonty\nhaplography\nhaploid\nhaploidic\nhaploidy\nhaplolaly\nhaplologic\nhaplology\nhaploma\nHaplomi\nhaplomid\nhaplomous\nhaplont\nhaploperistomic\nhaploperistomous\nhaplopetalous\nhaplophase\nhaplophyte\nhaploscope\nhaploscopic\nhaplosis\nhaplostemonous\nhaplotype\nhaply\nhappen\nhappening\nhappenstance\nhappier\nhappiest\nhappify\nhappiless\nhappily\nhappiness\nhapping\nhappy\nhapten\nhaptene\nhaptenic\nhaptere\nhapteron\nhaptic\nhaptics\nhaptometer\nhaptophor\nhaptophoric\nhaptophorous\nhaptotropic\nhaptotropically\nhaptotropism\nhapu\nhapuku\nhaqueton\nharakeke\nharangue\nharangueful\nharanguer\nHararese\nHarari\nharass\nharassable\nharassedly\nharasser\nharassingly\nharassment\nharatch\nHaratin\nHaraya\nHarb\nharbergage\nharbi\nharbinge\nharbinger\nharbingership\nharbingery\nharbor\nharborage\nharborer\nharborless\nharborous\nharborside\nharborward\nhard\nhardanger\nhardback\nhardbake\nhardbeam\nhardberry\nharden\nhardenable\nHardenbergia\nhardener\nhardening\nhardenite\nharder\nHarderian\nhardfern\nhardfist\nhardfisted\nhardfistedness\nhardhack\nhardhanded\nhardhandedness\nhardhead\nhardheaded\nhardheadedly\nhardheadedness\nhardhearted\nhardheartedly\nhardheartedness\nhardihood\nhardily\nhardim\nhardiment\nhardiness\nhardish\nhardishrew\nhardly\nhardmouth\nhardmouthed\nhardness\nhardock\nhardpan\nhardship\nhardstand\nhardstanding\nhardtack\nhardtail\nhardware\nhardwareman\nHardwickia\nhardwood\nhardy\nhardystonite\nhare\nharebell\nharebottle\nharebrain\nharebrained\nharebrainedly\nharebrainedness\nharebur\nharefoot\nharefooted\nharehearted\nharehound\nHarelda\nharelike\nharelip\nharelipped\nharem\nharemism\nharemlik\nharengiform\nharfang\nharicot\nharigalds\nhariolate\nhariolation\nhariolize\nharish\nhark\nharka\nharl\nHarleian\nHarlemese\nHarlemite\nharlequin\nharlequina\nharlequinade\nharlequinery\nharlequinesque\nharlequinic\nharlequinism\nharlequinize\nharling\nharlock\nharlot\nharlotry\nharm\nHarmachis\nharmal\nharmala\nharmaline\nharman\nharmattan\nharmel\nharmer\nharmful\nharmfully\nharmfulness\nharmine\nharminic\nharmless\nharmlessly\nharmlessness\nHarmon\nharmonia\nharmoniacal\nharmonial\nharmonic\nharmonica\nharmonical\nharmonically\nharmonicalness\nharmonichord\nharmonici\nharmonicism\nharmonicon\nharmonics\nharmonious\nharmoniously\nharmoniousness\nharmoniphon\nharmoniphone\nharmonist\nharmonistic\nharmonistically\nHarmonite\nharmonium\nharmonizable\nharmonization\nharmonize\nharmonizer\nharmonogram\nharmonograph\nharmonometer\nharmony\nharmost\nharmotome\nharmotomic\nharmproof\nharn\nharness\nharnesser\nharnessry\nharnpan\nHarold\nharp\nHarpa\nharpago\nharpagon\nHarpagornis\nHarpalides\nHarpalinae\nHarpalus\nharper\nharperess\nHarpidae\nharpier\nharpings\nharpist\nharpless\nharplike\nHarpocrates\nharpoon\nharpooner\nHarporhynchus\nharpress\nharpsichord\nharpsichordist\nharpula\nHarpullia\nharpwaytuning\nharpwise\nHarpy\nHarpyia\nharpylike\nharquebus\nharquebusade\nharquebusier\nharr\nharrateen\nharridan\nharrier\nHarris\nHarrisia\nharrisite\nHarrovian\nharrow\nharrower\nharrowing\nharrowingly\nharrowingness\nharrowment\nHarry\nharry\nharsh\nharshen\nharshish\nharshly\nharshness\nharshweed\nharstigite\nhart\nhartal\nhartberry\nhartebeest\nhartin\nhartite\nHartleian\nHartleyan\nHartmann\nHartmannia\nHartogia\nhartshorn\nhartstongue\nharttite\nHartungen\nharuspex\nharuspical\nharuspicate\nharuspication\nharuspice\nharuspices\nharuspicy\nHarv\nHarvard\nHarvardian\nHarvardize\nHarveian\nharvest\nharvestbug\nharvester\nharvestless\nharvestman\nharvestry\nharvesttime\nHarvey\nHarveyize\nharzburgite\nhasan\nhasenpfeffer\nhash\nhashab\nhasher\nHashimite\nhashish\nHashiya\nhashy\nHasidean\nHasidic\nHasidim\nHasidism\nHasinai\nhask\nHaskalah\nhaskness\nhasky\nhaslet\nhaslock\nHasmonaean\nhasp\nhassar\nhassel\nhassle\nhassock\nhassocky\nhasta\nhastate\nhastately\nhastati\nhastatolanceolate\nhastatosagittate\nhaste\nhasteful\nhastefully\nhasteless\nhastelessness\nhasten\nhastener\nhasteproof\nhaster\nhastilude\nhastily\nhastiness\nhastings\nhastingsite\nhastish\nhastler\nhasty\nhat\nhatable\nhatband\nhatbox\nhatbrim\nhatbrush\nhatch\nhatchability\nhatchable\nhatchel\nhatcheler\nhatcher\nhatchery\nhatcheryman\nhatchet\nhatchetback\nhatchetfish\nhatchetlike\nhatchetman\nhatchettine\nhatchettolite\nhatchety\nhatchgate\nhatching\nhatchling\nhatchman\nhatchment\nhatchminder\nhatchway\nhatchwayman\nhate\nhateable\nhateful\nhatefully\nhatefulness\nhateless\nhatelessness\nhater\nhatful\nhath\nhatherlite\nhathi\nHathor\nHathoric\nHati\nHatikvah\nhatless\nhatlessness\nhatlike\nhatmaker\nhatmaking\nhatpin\nhatrack\nhatrail\nhatred\nhatress\nhatstand\nhatt\nhatted\nHattemist\nhatter\nHatteria\nhattery\nHatti\nHattic\nHattie\nhatting\nHattism\nHattize\nhattock\nHatty\nhatty\nhau\nhauberget\nhauberk\nhauchecornite\nhauerite\nhaugh\nhaughland\nhaught\nhaughtily\nhaughtiness\nhaughtly\nhaughtness\nhaughtonite\nhaughty\nhaul\nhaulabout\nhaulage\nhaulageway\nhaulback\nhauld\nhauler\nhaulier\nhaulm\nhaulmy\nhaulster\nhaunch\nhaunched\nhauncher\nhaunching\nhaunchless\nhaunchy\nhaunt\nhaunter\nhauntingly\nhaunty\nHauranitic\nhauriant\nhaurient\nHausa\nhause\nhausen\nhausmannite\nhausse\nHaussmannization\nHaussmannize\nhaustellate\nhaustellated\nhaustellous\nhaustellum\nhaustement\nhaustorial\nhaustorium\nhaustral\nhaustrum\nhautboy\nhautboyist\nhauteur\nhauynite\nhauynophyre\nhavage\nHavaiki\nHavaikian\nHavana\nHavanese\nhave\nhaveable\nhaveage\nhavel\nhaveless\nhavelock\nhaven\nhavenage\nhavener\nhavenership\nhavenet\nhavenful\nhavenless\nhavent\nhavenward\nhaver\nhavercake\nhaverel\nhaverer\nhavergrass\nhavermeal\nhavers\nhaversack\nHaversian\nhaversine\nhavier\nhavildar\nhavingness\nhavoc\nhavocker\nhaw\nHawaiian\nhawaiite\nhawbuck\nhawcubite\nhawer\nhawfinch\nHawiya\nhawk\nhawkbill\nhawkbit\nhawked\nhawker\nhawkery\nHawkeye\nhawkie\nhawking\nhawkish\nhawklike\nhawknut\nhawkweed\nhawkwise\nhawky\nhawm\nhawok\nHaworthia\nhawse\nhawsehole\nhawseman\nhawsepiece\nhawsepipe\nhawser\nhawserwise\nhawthorn\nhawthorned\nhawthorny\nhay\nhaya\nhayband\nhaybird\nhaybote\nhaycap\nhaycart\nhaycock\nhaydenite\nhayey\nhayfield\nhayfork\nhaygrower\nhaylift\nhayloft\nhaymaker\nhaymaking\nhaymarket\nhaymow\nhayrack\nhayrake\nhayraker\nhayrick\nhayseed\nhaysel\nhaystack\nhaysuck\nhaytime\nhayward\nhayweed\nhaywire\nhayz\nHazara\nhazard\nhazardable\nhazarder\nhazardful\nhazardize\nhazardless\nhazardous\nhazardously\nhazardousness\nhazardry\nhaze\nHazel\nhazel\nhazeled\nhazeless\nhazelly\nhazelnut\nhazelwood\nhazelwort\nhazen\nhazer\nhazily\nhaziness\nhazing\nhazle\nhaznadar\nhazy\nhazzan\nhe\nhead\nheadache\nheadachy\nheadband\nheadbander\nheadboard\nheadborough\nheadcap\nheadchair\nheadcheese\nheadchute\nheadcloth\nheaddress\nheaded\nheadender\nheader\nheadfirst\nheadforemost\nheadframe\nheadful\nheadgear\nheadily\nheadiness\nheading\nheadkerchief\nheadland\nheadledge\nheadless\nheadlessness\nheadlight\nheadlighting\nheadlike\nheadline\nheadliner\nheadlock\nheadlong\nheadlongly\nheadlongs\nheadlongwise\nheadman\nheadmark\nheadmaster\nheadmasterly\nheadmastership\nheadmistress\nheadmistressship\nheadmold\nheadmost\nheadnote\nheadpenny\nheadphone\nheadpiece\nheadplate\nheadpost\nheadquarter\nheadquarters\nheadrace\nheadrail\nheadreach\nheadrent\nheadrest\nheadright\nheadring\nheadroom\nheadrope\nheadsail\nheadset\nheadshake\nheadship\nheadsill\nheadskin\nheadsman\nheadspring\nheadstall\nheadstand\nheadstick\nheadstock\nheadstone\nheadstream\nheadstrong\nheadstrongly\nheadstrongness\nheadwaiter\nheadwall\nheadward\nheadwark\nheadwater\nheadway\nheadwear\nheadwork\nheadworker\nheadworking\nheady\nheaf\nheal\nhealable\nheald\nhealder\nhealer\nhealful\nhealing\nhealingly\nhealless\nhealsome\nhealsomeness\nhealth\nhealthcraft\nhealthful\nhealthfully\nhealthfulness\nhealthguard\nhealthily\nhealthiness\nhealthless\nhealthlessness\nhealthsome\nhealthsomely\nhealthsomeness\nhealthward\nhealthy\nheap\nheaper\nheaps\nheapstead\nheapy\nhear\nhearable\nhearer\nhearing\nhearingless\nhearken\nhearkener\nhearsay\nhearse\nhearsecloth\nhearselike\nhearst\nheart\nheartache\nheartaching\nheartbeat\nheartbird\nheartblood\nheartbreak\nheartbreaker\nheartbreaking\nheartbreakingly\nheartbroken\nheartbrokenly\nheartbrokenness\nheartburn\nheartburning\nheartdeep\nheartease\nhearted\nheartedly\nheartedness\nhearten\nheartener\nheartening\nhearteningly\nheartfelt\nheartful\nheartfully\nheartfulness\nheartgrief\nhearth\nhearthless\nhearthman\nhearthpenny\nhearthrug\nhearthstead\nhearthstone\nhearthward\nhearthwarming\nheartikin\nheartily\nheartiness\nhearting\nheartland\nheartleaf\nheartless\nheartlessly\nheartlessness\nheartlet\nheartling\nheartly\nheartnut\nheartpea\nheartquake\nheartroot\nhearts\nheartscald\nheartsease\nheartseed\nheartsette\nheartsick\nheartsickening\nheartsickness\nheartsome\nheartsomely\nheartsomeness\nheartsore\nheartstring\nheartthrob\nheartward\nheartwater\nheartweed\nheartwise\nheartwood\nheartwort\nhearty\nheat\nheatable\nheatdrop\nheatedly\nheater\nheaterman\nheatful\nheath\nheathberry\nheathbird\nheathen\nheathendom\nheatheness\nheathenesse\nheathenhood\nheathenish\nheathenishly\nheathenishness\nheathenism\nheathenize\nheathenness\nheathenry\nheathenship\nHeather\nheather\nheathered\nheatheriness\nheathery\nheathless\nheathlike\nheathwort\nheathy\nheating\nheatingly\nheatless\nheatlike\nheatmaker\nheatmaking\nheatproof\nheatronic\nheatsman\nheatstroke\nheaume\nheaumer\nheautarit\nheautomorphism\nHeautontimorumenos\nheautophany\nheave\nheaveless\nheaven\nHeavenese\nheavenful\nheavenhood\nheavenish\nheavenishly\nheavenize\nheavenless\nheavenlike\nheavenliness\nheavenly\nheavens\nheavenward\nheavenwardly\nheavenwardness\nheavenwards\nheaver\nheavies\nheavily\nheaviness\nheaving\nheavisome\nheavity\nheavy\nheavyback\nheavyhanded\nheavyhandedness\nheavyheaded\nheavyhearted\nheavyheartedness\nheavyweight\nhebamic\nhebdomad\nhebdomadal\nhebdomadally\nhebdomadary\nhebdomader\nhebdomarian\nhebdomary\nhebeanthous\nhebecarpous\nhebecladous\nhebegynous\nhebenon\nhebeosteotomy\nhebepetalous\nhebephrenia\nhebephrenic\nhebetate\nhebetation\nhebetative\nhebete\nhebetic\nhebetomy\nhebetude\nhebetudinous\nHebraean\nHebraic\nHebraica\nHebraical\nHebraically\nHebraicize\nHebraism\nHebraist\nHebraistic\nHebraistical\nHebraistically\nHebraization\nHebraize\nHebraizer\nHebrew\nHebrewdom\nHebrewess\nHebrewism\nHebrician\nHebridean\nHebronite\nhebronite\nhecastotheism\nHecate\nHecatean\nHecatic\nHecatine\nhecatomb\nHecatombaeon\nhecatomped\nhecatompedon\nhecatonstylon\nhecatontarchy\nhecatontome\nhecatophyllous\nhech\nHechtia\nheck\nheckelphone\nHeckerism\nheckimal\nheckle\nheckler\nhectare\nhecte\nhectic\nhectical\nhectically\nhecticly\nhecticness\nhectocotyl\nhectocotyle\nhectocotyliferous\nhectocotylization\nhectocotylize\nhectocotylus\nhectogram\nhectograph\nhectographic\nhectography\nhectoliter\nhectometer\nHector\nhector\nHectorean\nHectorian\nhectoringly\nhectorism\nhectorly\nhectorship\nhectostere\nhectowatt\nheddle\nheddlemaker\nheddler\nhedebo\nhedenbergite\nHedeoma\nheder\nHedera\nhederaceous\nhederaceously\nhederated\nhederic\nhederiferous\nhederiform\nhederigerent\nhederin\nhederose\nhedge\nhedgeberry\nhedgeborn\nhedgebote\nhedgebreaker\nhedgehog\nhedgehoggy\nhedgehop\nhedgehopper\nhedgeless\nhedgemaker\nhedgemaking\nhedger\nhedgerow\nhedgesmith\nhedgeweed\nhedgewise\nhedgewood\nhedging\nhedgingly\nhedgy\nhedonic\nhedonical\nhedonically\nhedonics\nhedonism\nhedonist\nhedonistic\nhedonistically\nhedonology\nhedriophthalmous\nhedrocele\nhedrumite\nHedychium\nhedyphane\nHedysarum\nheed\nheeder\nheedful\nheedfully\nheedfulness\nheedily\nheediness\nheedless\nheedlessly\nheedlessness\nheedy\nheehaw\nheel\nheelball\nheelband\nheelcap\nheeled\nheeler\nheelgrip\nheelless\nheelmaker\nheelmaking\nheelpath\nheelpiece\nheelplate\nheelpost\nheelprint\nheelstrap\nheeltap\nheeltree\nheemraad\nheer\nheeze\nheezie\nheezy\nheft\nhefter\nheftily\nheftiness\nhefty\nhegari\nHegelian\nHegelianism\nHegelianize\nHegelizer\nhegemon\nhegemonic\nhegemonical\nhegemonist\nhegemonizer\nhegemony\nhegira\nhegumen\nhegumene\nHehe\nhei\nheiau\nHeidi\nheifer\nheiferhood\nheigh\nheighday\nheight\nheighten\nheightener\nheii\nHeikum\nHeiltsuk\nheimin\nHein\nHeinesque\nHeinie\nheinous\nheinously\nheinousness\nHeinrich\nheintzite\nHeinz\nheir\nheirdom\nheiress\nheiressdom\nheiresshood\nheirless\nheirloom\nheirship\nheirskip\nheitiki\nHejazi\nHejazian\nhekteus\nhelbeh\nhelcoid\nhelcology\nhelcoplasty\nhelcosis\nhelcotic\nheldentenor\nhelder\nHelderbergian\nhele\nHelen\nHelena\nhelenin\nhelenioid\nHelenium\nHelenus\nhelepole\nHelge\nheliacal\nheliacally\nHeliaea\nheliaean\nHeliamphora\nHeliand\nhelianthaceous\nHelianthemum\nhelianthic\nhelianthin\nHelianthium\nHelianthoidea\nHelianthoidean\nHelianthus\nheliast\nheliastic\nheliazophyte\nhelical\nhelically\nheliced\nhelices\nhelichryse\nhelichrysum\nHelicidae\nheliciform\nhelicin\nHelicina\nhelicine\nHelicinidae\nhelicitic\nhelicline\nhelicograph\nhelicogyrate\nhelicogyre\nhelicoid\nhelicoidal\nhelicoidally\nhelicometry\nhelicon\nHeliconia\nHeliconian\nHeliconiidae\nHeliconiinae\nheliconist\nHeliconius\nhelicoprotein\nhelicopter\nhelicorubin\nhelicotrema\nHelicteres\nhelictite\nhelide\nHeligmus\nheling\nhelio\nheliocentric\nheliocentrical\nheliocentrically\nheliocentricism\nheliocentricity\nheliochrome\nheliochromic\nheliochromoscope\nheliochromotype\nheliochromy\nhelioculture\nheliodon\nheliodor\nhelioelectric\nhelioengraving\nheliofugal\nHeliogabalize\nHeliogabalus\nheliogram\nheliograph\nheliographer\nheliographic\nheliographical\nheliographically\nheliography\nheliogravure\nhelioid\nheliolater\nheliolatrous\nheliolatry\nheliolite\nHeliolites\nheliolithic\nHeliolitidae\nheliologist\nheliology\nheliometer\nheliometric\nheliometrical\nheliometrically\nheliometry\nheliomicrometer\nHelion\nheliophilia\nheliophiliac\nheliophilous\nheliophobe\nheliophobia\nheliophobic\nheliophobous\nheliophotography\nheliophyllite\nheliophyte\nHeliopora\nHelioporidae\nHeliopsis\nheliopticon\nHeliornis\nHeliornithes\nHeliornithidae\nHelios\nhelioscope\nhelioscopic\nhelioscopy\nheliosis\nheliostat\nheliostatic\nheliotactic\nheliotaxis\nheliotherapy\nheliothermometer\nHeliothis\nheliotrope\nheliotroper\nHeliotropiaceae\nheliotropian\nheliotropic\nheliotropical\nheliotropically\nheliotropine\nheliotropism\nHeliotropium\nheliotropy\nheliotype\nheliotypic\nheliotypically\nheliotypography\nheliotypy\nHeliozoa\nheliozoan\nheliozoic\nheliport\nHelipterum\nhelispheric\nhelispherical\nhelium\nhelix\nhelizitic\nhell\nHelladian\nHelladic\nHelladotherium\nhellandite\nhellanodic\nhellbender\nhellborn\nhellbox\nhellbred\nhellbroth\nhellcat\nhelldog\nhelleboraceous\nhelleboraster\nhellebore\nhelleborein\nhelleboric\nhelleborin\nHelleborine\nhelleborism\nHelleborus\nHellelt\nHellen\nHellene\nHellenian\nHellenic\nHellenically\nHellenicism\nHellenism\nHellenist\nHellenistic\nHellenistical\nHellenistically\nHellenisticism\nHellenization\nHellenize\nHellenizer\nHellenocentric\nHellenophile\nheller\nhelleri\nHellespont\nHellespontine\nhellgrammite\nhellhag\nhellhole\nhellhound\nhellicat\nhellier\nhellion\nhellish\nhellishly\nhellishness\nhellkite\nhellness\nhello\nhellroot\nhellship\nhelluo\nhellward\nhellweed\nhelly\nhelm\nhelmage\nhelmed\nhelmet\nhelmeted\nhelmetlike\nhelmetmaker\nhelmetmaking\nHelmholtzian\nhelminth\nhelminthagogic\nhelminthagogue\nHelminthes\nhelminthiasis\nhelminthic\nhelminthism\nhelminthite\nHelminthocladiaceae\nhelminthoid\nhelminthologic\nhelminthological\nhelminthologist\nhelminthology\nhelminthosporiose\nHelminthosporium\nhelminthosporoid\nhelminthous\nhelmless\nhelmsman\nhelmsmanship\nhelobious\nheloderm\nHeloderma\nHelodermatidae\nhelodermatoid\nhelodermatous\nhelodes\nheloe\nheloma\nHelonias\nhelonin\nhelosis\nHelot\nhelotage\nhelotism\nhelotize\nhelotomy\nhelotry\nhelp\nhelpable\nhelper\nhelpful\nhelpfully\nhelpfulness\nhelping\nhelpingly\nhelpless\nhelplessly\nhelplessness\nhelply\nhelpmate\nhelpmeet\nhelpsome\nhelpworthy\nhelsingkite\nhelve\nhelvell\nHelvella\nHelvellaceae\nhelvellaceous\nHelvellales\nhelvellic\nhelver\nHelvetia\nHelvetian\nHelvetic\nHelvetii\nHelvidian\nhelvite\nhem\nhemabarometer\nhemachate\nhemachrome\nhemachrosis\nhemacite\nhemad\nhemadrometer\nhemadrometry\nhemadromograph\nhemadromometer\nhemadynameter\nhemadynamic\nhemadynamics\nhemadynamometer\nhemafibrite\nhemagglutinate\nhemagglutination\nhemagglutinative\nhemagglutinin\nhemagogic\nhemagogue\nhemal\nhemalbumen\nhemamoeba\nhemangioma\nhemangiomatosis\nhemangiosarcoma\nhemaphein\nhemapod\nhemapodous\nhemapoiesis\nhemapoietic\nhemapophyseal\nhemapophysial\nhemapophysis\nhemarthrosis\nhemase\nhemaspectroscope\nhemastatics\nhematachometer\nhematachometry\nhematal\nhematein\nhematemesis\nhematemetic\nhematencephalon\nhematherapy\nhematherm\nhemathermal\nhemathermous\nhemathidrosis\nhematic\nhematid\nhematidrosis\nhematimeter\nhematin\nhematinic\nhematinometer\nhematinometric\nhematinuria\nhematite\nhematitic\nhematobic\nhematobious\nhematobium\nhematoblast\nhematobranchiate\nhematocatharsis\nhematocathartic\nhematocele\nhematochezia\nhematochrome\nhematochyluria\nhematoclasia\nhematoclasis\nhematocolpus\nhematocrit\nhematocryal\nhematocrystallin\nhematocyanin\nhematocyst\nhematocystis\nhematocyte\nhematocytoblast\nhematocytogenesis\nhematocytometer\nhematocytotripsis\nhematocytozoon\nhematocyturia\nhematodynamics\nhematodynamometer\nhematodystrophy\nhematogen\nhematogenesis\nhematogenetic\nhematogenic\nhematogenous\nhematoglobulin\nhematography\nhematohidrosis\nhematoid\nhematoidin\nhematolin\nhematolite\nhematological\nhematologist\nhematology\nhematolymphangioma\nhematolysis\nhematolytic\nhematoma\nhematomancy\nhematometer\nhematometra\nhematometry\nhematomphalocele\nhematomyelia\nhematomyelitis\nhematonephrosis\nhematonic\nhematopathology\nhematopericardium\nhematopexis\nhematophobia\nhematophyte\nhematoplast\nhematoplastic\nhematopoiesis\nhematopoietic\nhematoporphyrin\nhematoporphyrinuria\nhematorrhachis\nhematorrhea\nhematosalpinx\nhematoscope\nhematoscopy\nhematose\nhematosepsis\nhematosin\nhematosis\nhematospectrophotometer\nhematospectroscope\nhematospermatocele\nhematospermia\nhematostibiite\nhematotherapy\nhematothermal\nhematothorax\nhematoxic\nhematozoal\nhematozoan\nhematozoic\nhematozoon\nhematozymosis\nhematozymotic\nhematuresis\nhematuria\nhematuric\nhemautogram\nhemautograph\nhemautographic\nhemautography\nheme\nhemellitene\nhemellitic\nhemelytral\nhemelytron\nhemen\nhemera\nhemeralope\nhemeralopia\nhemeralopic\nHemerobaptism\nHemerobaptist\nHemerobian\nHemerobiid\nHemerobiidae\nHemerobius\nHemerocallis\nhemerologium\nhemerology\nhemerythrin\nhemiablepsia\nhemiacetal\nhemiachromatopsia\nhemiageusia\nhemiageustia\nhemialbumin\nhemialbumose\nhemialbumosuria\nhemialgia\nhemiamaurosis\nhemiamb\nhemiamblyopia\nhemiamyosthenia\nhemianacusia\nhemianalgesia\nhemianatropous\nhemianesthesia\nhemianopia\nhemianopic\nhemianopsia\nhemianoptic\nhemianosmia\nhemiapraxia\nHemiascales\nHemiasci\nHemiascomycetes\nhemiasynergia\nhemiataxia\nhemiataxy\nhemiathetosis\nhemiatrophy\nhemiazygous\nHemibasidiales\nHemibasidii\nHemibasidiomycetes\nhemibasidium\nhemibathybian\nhemibenthic\nhemibenthonic\nhemibranch\nhemibranchiate\nHemibranchii\nhemic\nhemicanities\nhemicardia\nhemicardiac\nhemicarp\nhemicatalepsy\nhemicataleptic\nhemicellulose\nhemicentrum\nhemicephalous\nhemicerebrum\nHemichorda\nhemichordate\nhemichorea\nhemichromatopsia\nhemicircle\nhemicircular\nhemiclastic\nhemicollin\nhemicrane\nhemicrania\nhemicranic\nhemicrany\nhemicrystalline\nhemicycle\nhemicyclic\nhemicyclium\nhemicylindrical\nhemidactylous\nHemidactylus\nhemidemisemiquaver\nhemidiapente\nhemidiaphoresis\nhemiditone\nhemidomatic\nhemidome\nhemidrachm\nhemidysergia\nhemidysesthesia\nhemidystrophy\nhemiekton\nhemielliptic\nhemiepilepsy\nhemifacial\nhemiform\nHemigale\nHemigalus\nHemiganus\nhemigastrectomy\nhemigeusia\nhemiglossal\nhemiglossitis\nhemiglyph\nhemignathous\nhemihdry\nhemihedral\nhemihedrally\nhemihedric\nhemihedrism\nhemihedron\nhemiholohedral\nhemihydrate\nhemihydrated\nhemihydrosis\nhemihypalgesia\nhemihyperesthesia\nhemihyperidrosis\nhemihypertonia\nhemihypertrophy\nhemihypesthesia\nhemihypoesthesia\nhemihypotonia\nhemikaryon\nhemikaryotic\nhemilaminectomy\nhemilaryngectomy\nHemileia\nhemilethargy\nhemiligulate\nhemilingual\nhemimellitene\nhemimellitic\nhemimelus\nHemimeridae\nHemimerus\nHemimetabola\nhemimetabole\nhemimetabolic\nhemimetabolism\nhemimetabolous\nhemimetaboly\nhemimetamorphic\nhemimetamorphosis\nhemimetamorphous\nhemimorph\nhemimorphic\nhemimorphism\nhemimorphite\nhemimorphy\nHemimyaria\nhemin\nhemina\nhemine\nheminee\nhemineurasthenia\nhemiobol\nhemiolia\nhemiolic\nhemionus\nhemiope\nhemiopia\nhemiopic\nhemiorthotype\nhemiparalysis\nhemiparanesthesia\nhemiparaplegia\nhemiparasite\nhemiparasitic\nhemiparasitism\nhemiparesis\nhemiparesthesia\nhemiparetic\nhemipenis\nhemipeptone\nhemiphrase\nhemipic\nhemipinnate\nhemiplane\nhemiplankton\nhemiplegia\nhemiplegic\nhemiplegy\nhemipodan\nhemipode\nHemipodii\nHemipodius\nhemiprism\nhemiprismatic\nhemiprotein\nhemipter\nHemiptera\nhemipteral\nhemipteran\nhemipteroid\nhemipterological\nhemipterology\nhemipteron\nhemipterous\nhemipyramid\nhemiquinonoid\nhemiramph\nHemiramphidae\nHemiramphinae\nhemiramphine\nHemiramphus\nhemisaprophyte\nhemisaprophytic\nhemiscotosis\nhemisect\nhemisection\nhemispasm\nhemispheral\nhemisphere\nhemisphered\nhemispherical\nhemispherically\nhemispheroid\nhemispheroidal\nhemispherule\nhemistater\nhemistich\nhemistichal\nhemistrumectomy\nhemisymmetrical\nhemisymmetry\nhemisystole\nhemiterata\nhemiteratic\nhemiteratics\nhemiteria\nhemiterpene\nhemitery\nhemithyroidectomy\nhemitone\nhemitremor\nhemitrichous\nhemitriglyph\nhemitropal\nhemitrope\nhemitropic\nhemitropism\nhemitropous\nhemitropy\nhemitype\nhemitypic\nhemivagotony\nheml\nhemlock\nhemmel\nhemmer\nhemoalkalimeter\nhemoblast\nhemochromatosis\nhemochrome\nhemochromogen\nhemochromometer\nhemochromometry\nhemoclasia\nhemoclasis\nhemoclastic\nhemocoel\nhemocoele\nhemocoelic\nhemocoelom\nhemoconcentration\nhemoconia\nhemoconiosis\nhemocry\nhemocrystallin\nhemoculture\nhemocyanin\nhemocyte\nhemocytoblast\nhemocytogenesis\nhemocytolysis\nhemocytometer\nhemocytotripsis\nhemocytozoon\nhemocyturia\nhemodiagnosis\nhemodilution\nhemodrometer\nhemodrometry\nhemodromograph\nhemodromometer\nhemodynameter\nhemodynamic\nhemodynamics\nhemodystrophy\nhemoerythrin\nhemoflagellate\nhemofuscin\nhemogastric\nhemogenesis\nhemogenetic\nhemogenic\nhemogenous\nhemoglobic\nhemoglobin\nhemoglobinemia\nhemoglobiniferous\nhemoglobinocholia\nhemoglobinometer\nhemoglobinophilic\nhemoglobinous\nhemoglobinuria\nhemoglobinuric\nhemoglobulin\nhemogram\nhemogregarine\nhemoid\nhemokonia\nhemokoniosis\nhemol\nhemoleucocyte\nhemoleucocytic\nhemologist\nhemology\nhemolymph\nhemolymphatic\nhemolysin\nhemolysis\nhemolytic\nhemolyze\nhemomanometer\nhemometer\nhemometry\nhemonephrosis\nhemopathology\nhemopathy\nhemopericardium\nhemoperitoneum\nhemopexis\nhemophage\nhemophagia\nhemophagocyte\nhemophagocytosis\nhemophagous\nhemophagy\nhemophile\nHemophileae\nhemophilia\nhemophiliac\nhemophilic\nHemophilus\nhemophobia\nhemophthalmia\nhemophthisis\nhemopiezometer\nhemoplasmodium\nhemoplastic\nhemopneumothorax\nhemopod\nhemopoiesis\nhemopoietic\nhemoproctia\nhemoptoe\nhemoptysis\nhemopyrrole\nhemorrhage\nhemorrhagic\nhemorrhagin\nhemorrhea\nhemorrhodin\nhemorrhoid\nhemorrhoidal\nhemorrhoidectomy\nhemosalpinx\nhemoscope\nhemoscopy\nhemosiderin\nhemosiderosis\nhemospasia\nhemospastic\nhemospermia\nhemosporid\nhemosporidian\nhemostasia\nhemostasis\nhemostat\nhemostatic\nhemotachometer\nhemotherapeutics\nhemotherapy\nhemothorax\nhemotoxic\nhemotoxin\nhemotrophe\nhemotropic\nhemozoon\nhemp\nhempbush\nhempen\nhemplike\nhempseed\nhempstring\nhempweed\nhempwort\nhempy\nhemstitch\nhemstitcher\nhen\nhenad\nhenbane\nhenbill\nhenbit\nhence\nhenceforth\nhenceforward\nhenceforwards\nhenchboy\nhenchman\nhenchmanship\nhencoop\nhencote\nhend\nhendecacolic\nhendecagon\nhendecagonal\nhendecahedron\nhendecane\nhendecasemic\nhendecasyllabic\nhendecasyllable\nhendecatoic\nhendecoic\nhendecyl\nhendiadys\nhendly\nhendness\nheneicosane\nhenequen\nhenfish\nhenhearted\nhenhouse\nhenhussy\nhenism\nhenlike\nhenmoldy\nhenna\nHennebique\nhennery\nhennin\nhennish\nhenny\nhenogeny\nhenotheism\nhenotheist\nhenotheistic\nhenotic\nhenpeck\nhenpen\nHenrician\nHenrietta\nhenroost\nHenry\nhenry\nhent\nHentenian\nhenter\nhentriacontane\nhenware\nhenwife\nhenwise\nhenwoodite\nhenyard\nheortological\nheortologion\nheortology\nhep\nhepar\nheparin\nheparinize\nhepatalgia\nhepatatrophia\nhepatatrophy\nhepatauxe\nhepatectomy\nhepatic\nHepatica\nhepatica\nHepaticae\nhepatical\nhepaticoduodenostomy\nhepaticoenterostomy\nhepaticogastrostomy\nhepaticologist\nhepaticology\nhepaticopulmonary\nhepaticostomy\nhepaticotomy\nhepatite\nhepatitis\nhepatization\nhepatize\nhepatocele\nhepatocirrhosis\nhepatocolic\nhepatocystic\nhepatoduodenal\nhepatoduodenostomy\nhepatodynia\nhepatodysentery\nhepatoenteric\nhepatoflavin\nhepatogastric\nhepatogenic\nhepatogenous\nhepatography\nhepatoid\nhepatolenticular\nhepatolith\nhepatolithiasis\nhepatolithic\nhepatological\nhepatologist\nhepatology\nhepatolysis\nhepatolytic\nhepatoma\nhepatomalacia\nhepatomegalia\nhepatomegaly\nhepatomelanosis\nhepatonephric\nhepatopathy\nhepatoperitonitis\nhepatopexia\nhepatopexy\nhepatophlebitis\nhepatophlebotomy\nhepatophyma\nhepatopneumonic\nhepatoportal\nhepatoptosia\nhepatoptosis\nhepatopulmonary\nhepatorenal\nhepatorrhagia\nhepatorrhaphy\nhepatorrhea\nhepatorrhexis\nhepatorrhoea\nhepatoscopy\nhepatostomy\nhepatotherapy\nhepatotomy\nhepatotoxemia\nhepatoumbilical\nhepcat\nHephaesteum\nHephaestian\nHephaestic\nHephaestus\nhephthemimer\nhephthemimeral\nhepialid\nHepialidae\nHepialus\nheppen\nhepper\nheptacapsular\nheptace\nheptachord\nheptachronous\nheptacolic\nheptacosane\nheptad\nheptadecane\nheptadecyl\nheptaglot\nheptagon\nheptagonal\nheptagynous\nheptahedral\nheptahedrical\nheptahedron\nheptahexahedral\nheptahydrate\nheptahydrated\nheptahydric\nheptahydroxy\nheptal\nheptameride\nHeptameron\nheptamerous\nheptameter\nheptamethylene\nheptametrical\nheptanaphthene\nHeptanchus\nheptandrous\nheptane\nHeptanesian\nheptangular\nheptanoic\nheptanone\nheptapetalous\nheptaphyllous\nheptaploid\nheptaploidy\nheptapodic\nheptapody\nheptarch\nheptarchal\nheptarchic\nheptarchical\nheptarchist\nheptarchy\nheptasemic\nheptasepalous\nheptaspermous\nheptastich\nheptastrophic\nheptastylar\nheptastyle\nheptasulphide\nheptasyllabic\nHeptateuch\nheptatomic\nheptatonic\nHeptatrema\nheptavalent\nheptene\nhepteris\nheptine\nheptite\nheptitol\nheptoic\nheptorite\nheptose\nheptoxide\nHeptranchias\nheptyl\nheptylene\nheptylic\nheptyne\nher\nHeraclean\nHeracleidan\nHeracleonite\nHeracleopolitan\nHeracleopolite\nHeracleum\nHeraclid\nHeraclidae\nHeraclidan\nHeraclitean\nHeracliteanism\nHeraclitic\nHeraclitical\nHeraclitism\nHerakles\nherald\nheraldess\nheraldic\nheraldical\nheraldically\nheraldist\nheraldize\nheraldress\nheraldry\nheraldship\nherapathite\nHerat\nHerb\nherb\nherbaceous\nherbaceously\nherbage\nherbaged\nherbager\nherbagious\nherbal\nherbalism\nherbalist\nherbalize\nherbane\nherbaria\nherbarial\nherbarian\nherbarism\nherbarist\nherbarium\nherbarize\nHerbartian\nHerbartianism\nherbary\nHerbert\nherbescent\nherbicidal\nherbicide\nherbicolous\nherbiferous\nherbish\nherbist\nHerbivora\nherbivore\nherbivority\nherbivorous\nherbless\nherblet\nherblike\nherbman\nherborist\nherborization\nherborize\nherborizer\nherbose\nherbosity\nherbous\nherbwife\nherbwoman\nherby\nhercogamous\nhercogamy\nHerculanean\nHerculanensian\nHerculanian\nHerculean\nHercules\nHerculid\nHercynian\nhercynite\nherd\nherdbook\nherdboy\nherder\nherderite\nherdic\nherding\nherdship\nherdsman\nherdswoman\nherdwick\nhere\nhereabout\nhereadays\nhereafter\nhereafterward\nhereamong\nhereat\nhereaway\nhereaways\nherebefore\nhereby\nheredipetous\nheredipety\nhereditability\nhereditable\nhereditably\nhereditament\nhereditarian\nhereditarianism\nhereditarily\nhereditariness\nhereditarist\nhereditary\nhereditation\nhereditative\nhereditism\nhereditist\nhereditivity\nheredity\nheredium\nheredofamilial\nheredolues\nheredoluetic\nheredosyphilis\nheredosyphilitic\nheredosyphilogy\nheredotuberculosis\nHereford\nherefrom\nheregeld\nherein\nhereinabove\nhereinafter\nhereinbefore\nhereinto\nherem\nhereness\nhereniging\nhereof\nhereon\nhereright\nHerero\nheresiarch\nheresimach\nheresiographer\nheresiography\nheresiologer\nheresiologist\nheresiology\nheresy\nheresyphobia\nheresyproof\nheretic\nheretical\nheretically\nhereticalness\nhereticate\nheretication\nhereticator\nhereticide\nhereticize\nhereto\nheretoch\nheretofore\nheretoforetime\nheretoga\nheretrix\nhereunder\nhereunto\nhereupon\nhereward\nherewith\nherewithal\nherile\nheriot\nheriotable\nherisson\nheritability\nheritable\nheritably\nheritage\nheritance\nHeritiera\nheritor\nheritress\nheritrix\nherl\nherling\nherma\nhermaean\nhermaic\nHerman\nhermaphrodite\nhermaphroditic\nhermaphroditical\nhermaphroditically\nhermaphroditish\nhermaphroditism\nhermaphroditize\nHermaphroditus\nhermeneut\nhermeneutic\nhermeneutical\nhermeneutically\nhermeneutics\nhermeneutist\nHermes\nHermesian\nHermesianism\nHermetic\nhermetic\nhermetical\nhermetically\nhermeticism\nHermetics\nHermetism\nHermetist\nhermidin\nHerminone\nHermione\nHermit\nhermit\nhermitage\nhermitary\nhermitess\nhermitic\nhermitical\nhermitically\nhermitish\nhermitism\nhermitize\nhermitry\nhermitship\nHermo\nhermodact\nhermodactyl\nHermogenian\nhermoglyphic\nhermoglyphist\nhermokopid\nhern\nHernandia\nHernandiaceae\nhernandiaceous\nhernanesell\nhernani\nhernant\nherne\nhernia\nhernial\nHerniaria\nherniarin\nherniary\nherniate\nherniated\nherniation\nhernioenterotomy\nhernioid\nherniology\nherniopuncture\nherniorrhaphy\nherniotome\nherniotomist\nherniotomy\nhero\nheroarchy\nHerodian\nherodian\nHerodianic\nHerodii\nHerodiones\nherodionine\nheroess\nherohead\nherohood\nheroic\nheroical\nheroically\nheroicalness\nheroicity\nheroicly\nheroicness\nheroicomic\nheroicomical\nheroid\nHeroides\nheroify\nHeroin\nheroin\nheroine\nheroineship\nheroinism\nheroinize\nheroism\nheroistic\nheroization\nheroize\nherolike\nheromonger\nheron\nheroner\nheronite\nheronry\nheroogony\nheroologist\nheroology\nHerophile\nHerophilist\nheroship\nherotheism\nherpes\nHerpestes\nHerpestinae\nherpestine\nherpetic\nherpetiform\nherpetism\nherpetography\nherpetoid\nherpetologic\nherpetological\nherpetologically\nherpetologist\nherpetology\nherpetomonad\nHerpetomonas\nherpetophobia\nherpetotomist\nherpetotomy\nherpolhode\nHerpotrichia\nherrengrundite\nHerrenvolk\nherring\nherringbone\nherringer\nHerrnhuter\nhers\nHerschelian\nherschelite\nherse\nhersed\nherself\nhership\nhersir\nhertz\nhertzian\nHeruli\nHerulian\nHervati\nHerve\nHerzegovinian\nHesiodic\nHesione\nHesionidae\nhesitance\nhesitancy\nhesitant\nhesitantly\nhesitate\nhesitater\nhesitating\nhesitatingly\nhesitatingness\nhesitation\nhesitative\nhesitatively\nhesitatory\nHesper\nHespera\nHesperia\nHesperian\nHesperic\nHesperid\nhesperid\nhesperidate\nhesperidene\nhesperideous\nHesperides\nHesperidian\nhesperidin\nhesperidium\nhesperiid\nHesperiidae\nhesperinon\nHesperis\nhesperitin\nHesperornis\nHesperornithes\nhesperornithid\nHesperornithiformes\nhesperornithoid\nHesperus\nHessian\nhessite\nhessonite\nhest\nHester\nhestern\nhesternal\nHesther\nhesthogenous\nHesychasm\nHesychast\nhesychastic\nhet\nhetaera\nhetaeria\nhetaeric\nhetaerism\nHetaerist\nhetaerist\nhetaeristic\nhetaerocracy\nhetaerolite\nhetaery\nheteradenia\nheteradenic\nheterakid\nHeterakis\nHeteralocha\nheterandrous\nheterandry\nheteratomic\nheterauxesis\nheteraxial\nheteric\nheterically\nhetericism\nhetericist\nheterism\nheterization\nheterize\nhetero\nheteroagglutinin\nheteroalbumose\nheteroauxin\nheteroblastic\nheteroblastically\nheteroblasty\nheterocarpism\nheterocarpous\nHeterocarpus\nheterocaseose\nheterocellular\nheterocentric\nheterocephalous\nHeterocera\nheterocerc\nheterocercal\nheterocercality\nheterocercy\nheterocerous\nheterochiral\nheterochlamydeous\nHeterochloridales\nheterochromatic\nheterochromatin\nheterochromatism\nheterochromatization\nheterochromatized\nheterochrome\nheterochromia\nheterochromic\nheterochromosome\nheterochromous\nheterochromy\nheterochronic\nheterochronism\nheterochronistic\nheterochronous\nheterochrony\nheterochrosis\nheterochthon\nheterochthonous\nheterocline\nheteroclinous\nheteroclital\nheteroclite\nheteroclitica\nheteroclitous\nHeterocoela\nheterocoelous\nHeterocotylea\nheterocycle\nheterocyclic\nheterocyst\nheterocystous\nheterodactyl\nHeterodactylae\nheterodactylous\nHeterodera\nHeterodon\nheterodont\nHeterodonta\nHeterodontidae\nheterodontism\nheterodontoid\nHeterodontus\nheterodox\nheterodoxal\nheterodoxical\nheterodoxly\nheterodoxness\nheterodoxy\nheterodromous\nheterodromy\nheterodyne\nheteroecious\nheteroeciously\nheteroeciousness\nheteroecism\nheteroecismal\nheteroecy\nheteroepic\nheteroepy\nheteroerotic\nheteroerotism\nheterofermentative\nheterofertilization\nheterogalactic\nheterogamete\nheterogametic\nheterogametism\nheterogamety\nheterogamic\nheterogamous\nheterogamy\nheterogangliate\nheterogen\nheterogene\nheterogeneal\nheterogenean\nheterogeneity\nheterogeneous\nheterogeneously\nheterogeneousness\nheterogenesis\nheterogenetic\nheterogenic\nheterogenicity\nheterogenist\nheterogenous\nheterogeny\nheteroglobulose\nheterognath\nHeterognathi\nheterogone\nheterogonism\nheterogonous\nheterogonously\nheterogony\nheterograft\nheterographic\nheterographical\nheterography\nHeterogyna\nheterogynal\nheterogynous\nheteroicous\nheteroimmune\nheteroinfection\nheteroinoculable\nheteroinoculation\nheterointoxication\nheterokaryon\nheterokaryosis\nheterokaryotic\nheterokinesis\nheterokinetic\nHeterokontae\nheterokontan\nheterolalia\nheterolateral\nheterolecithal\nheterolith\nheterolobous\nheterologic\nheterological\nheterologically\nheterologous\nheterology\nheterolysin\nheterolysis\nheterolytic\nheteromallous\nheteromastigate\nheteromastigote\nHeteromeles\nHeteromera\nheteromeral\nHeteromeran\nHeteromeri\nheteromeric\nheteromerous\nHeterometabola\nheterometabole\nheterometabolic\nheterometabolism\nheterometabolous\nheterometaboly\nheterometric\nHeteromi\nHeteromita\nHeteromorpha\nHeteromorphae\nheteromorphic\nheteromorphism\nheteromorphite\nheteromorphosis\nheteromorphous\nheteromorphy\nHeteromya\nHeteromyaria\nheteromyarian\nHeteromyidae\nHeteromys\nheteronereid\nheteronereis\nHeteroneura\nheteronomous\nheteronomously\nheteronomy\nheteronuclear\nheteronym\nheteronymic\nheteronymous\nheteronymously\nheteronymy\nheteroousia\nHeteroousian\nheteroousian\nHeteroousiast\nheteroousious\nheteropathic\nheteropathy\nheteropelmous\nheteropetalous\nHeterophaga\nHeterophagi\nheterophagous\nheterophasia\nheterophemism\nheterophemist\nheterophemistic\nheterophemize\nheterophemy\nheterophile\nheterophoria\nheterophoric\nheterophylesis\nheterophyletic\nheterophyllous\nheterophylly\nheterophyly\nheterophyte\nheterophytic\nHeteropia\nHeteropidae\nheteroplasia\nheteroplasm\nheteroplastic\nheteroplasty\nheteroploid\nheteroploidy\nheteropod\nHeteropoda\nheteropodal\nheteropodous\nheteropolar\nheteropolarity\nheteropoly\nheteroproteide\nheteroproteose\nheteropter\nHeteroptera\nheteropterous\nheteroptics\nheteropycnosis\nHeterorhachis\nheteroscope\nheteroscopy\nheterosexual\nheterosexuality\nheteroside\nHeterosiphonales\nheterosis\nHeterosomata\nHeterosomati\nheterosomatous\nheterosome\nHeterosomi\nheterosomous\nHeterosporeae\nheterosporic\nHeterosporium\nheterosporous\nheterospory\nheterostatic\nheterostemonous\nHeterostraca\nheterostracan\nHeterostraci\nheterostrophic\nheterostrophous\nheterostrophy\nheterostyled\nheterostylism\nheterostylous\nheterostyly\nheterosuggestion\nheterosyllabic\nheterotactic\nheterotactous\nheterotaxia\nheterotaxic\nheterotaxis\nheterotaxy\nheterotelic\nheterothallic\nheterothallism\nheterothermal\nheterothermic\nheterotic\nheterotopia\nheterotopic\nheterotopism\nheterotopous\nheterotopy\nheterotransplant\nheterotransplantation\nheterotrich\nHeterotricha\nHeterotrichales\nHeterotrichida\nheterotrichosis\nheterotrichous\nheterotropal\nheterotroph\nheterotrophic\nheterotrophy\nheterotropia\nheterotropic\nheterotropous\nheterotype\nheterotypic\nheterotypical\nheteroxanthine\nheteroxenous\nheterozetesis\nheterozygosis\nheterozygosity\nheterozygote\nheterozygotic\nheterozygous\nheterozygousness\nhething\nhetman\nhetmanate\nhetmanship\nhetter\nhetterly\nHettie\nHetty\nheuau\nHeuchera\nheugh\nheulandite\nheumite\nheuretic\nheuristic\nheuristically\nHevea\nhevi\nhew\nhewable\nhewel\nhewer\nhewettite\nhewhall\nhewn\nhewt\nhex\nhexa\nhexabasic\nHexabiblos\nhexabiose\nhexabromide\nhexacanth\nhexacanthous\nhexacapsular\nhexacarbon\nhexace\nhexachloride\nhexachlorocyclohexane\nhexachloroethane\nhexachord\nhexachronous\nhexacid\nhexacolic\nHexacoralla\nhexacorallan\nHexacorallia\nhexacosane\nhexacosihedroid\nhexact\nhexactinal\nhexactine\nhexactinellid\nHexactinellida\nhexactinellidan\nhexactinelline\nhexactinian\nhexacyclic\nhexad\nhexadactyle\nhexadactylic\nhexadactylism\nhexadactylous\nhexadactyly\nhexadecahedroid\nhexadecane\nhexadecanoic\nhexadecene\nhexadecyl\nhexadic\nhexadiene\nhexadiyne\nhexafoil\nhexaglot\nhexagon\nhexagonal\nhexagonally\nhexagonial\nhexagonical\nhexagonous\nhexagram\nHexagrammidae\nhexagrammoid\nHexagrammos\nhexagyn\nHexagynia\nhexagynian\nhexagynous\nhexahedral\nhexahedron\nhexahydrate\nhexahydrated\nhexahydric\nhexahydride\nhexahydrite\nhexahydrobenzene\nhexahydroxy\nhexakisoctahedron\nhexakistetrahedron\nhexameral\nhexameric\nhexamerism\nhexameron\nhexamerous\nhexameter\nhexamethylenamine\nhexamethylene\nhexamethylenetetramine\nhexametral\nhexametric\nhexametrical\nhexametrist\nhexametrize\nhexametrographer\nHexamita\nhexamitiasis\nhexammine\nhexammino\nhexanaphthene\nHexanchidae\nHexanchus\nHexandria\nhexandric\nhexandrous\nhexandry\nhexane\nhexanedione\nhexangular\nhexangularly\nhexanitrate\nhexanitrodiphenylamine\nhexapartite\nhexaped\nhexapetaloid\nhexapetaloideous\nhexapetalous\nhexaphyllous\nhexapla\nhexaplar\nhexaplarian\nhexaplaric\nhexaploid\nhexaploidy\nhexapod\nHexapoda\nhexapodal\nhexapodan\nhexapodous\nhexapody\nhexapterous\nhexaradial\nhexarch\nhexarchy\nhexaseme\nhexasemic\nhexasepalous\nhexaspermous\nhexastemonous\nhexaster\nhexastich\nhexastichic\nhexastichon\nhexastichous\nhexastichy\nhexastigm\nhexastylar\nhexastyle\nhexastylos\nhexasulphide\nhexasyllabic\nhexatetrahedron\nHexateuch\nHexateuchal\nhexathlon\nhexatomic\nhexatriacontane\nhexatriose\nhexavalent\nhexecontane\nhexenbesen\nhexene\nhexer\nhexerei\nhexeris\nhexestrol\nhexicological\nhexicology\nhexine\nhexiological\nhexiology\nhexis\nhexitol\nhexoctahedral\nhexoctahedron\nhexode\nhexoestrol\nhexogen\nhexoic\nhexokinase\nhexone\nhexonic\nhexosamine\nhexosaminic\nhexosan\nhexose\nhexosediphosphoric\nhexosemonophosphoric\nhexosephosphatase\nhexosephosphoric\nhexoylene\nhexpartite\nhexyl\nhexylene\nhexylic\nhexylresorcinol\nhexyne\nhey\nheyday\nHezron\nHezronites\nhi\nhia\nHianakoto\nhiant\nhiatal\nhiate\nhiation\nhiatus\nHibbertia\nhibbin\nhibernacle\nhibernacular\nhibernaculum\nhibernal\nhibernate\nhibernation\nhibernator\nHibernia\nHibernian\nHibernianism\nHibernic\nHibernical\nHibernically\nHibernicism\nHibernicize\nHibernization\nHibernize\nHibernologist\nHibernology\nHibiscus\nHibito\nHibitos\nHibunci\nhic\nhicatee\nhiccup\nhick\nhickey\nhickory\nHicksite\nhickwall\nHicoria\nhidable\nhidage\nhidalgism\nhidalgo\nhidalgoism\nhidated\nhidation\nHidatsa\nhidden\nhiddenite\nhiddenly\nhiddenmost\nhiddenness\nhide\nhideaway\nhidebind\nhidebound\nhideboundness\nhided\nhideland\nhideless\nhideling\nhideosity\nhideous\nhideously\nhideousness\nhider\nhidling\nhidlings\nhidradenitis\nhidrocystoma\nhidromancy\nhidropoiesis\nhidrosis\nhidrotic\nhie\nhieder\nhielaman\nhield\nhielmite\nhiemal\nhiemation\nHienz\nHieracian\nHieracium\nhieracosphinx\nhierapicra\nhierarch\nhierarchal\nhierarchic\nhierarchical\nhierarchically\nhierarchism\nhierarchist\nhierarchize\nhierarchy\nhieratic\nhieratical\nhieratically\nhieraticism\nhieratite\nHierochloe\nhierocracy\nhierocratic\nhierocratical\nhierodule\nhierodulic\nHierofalco\nhierogamy\nhieroglyph\nhieroglypher\nhieroglyphic\nhieroglyphical\nhieroglyphically\nhieroglyphist\nhieroglyphize\nhieroglyphology\nhieroglyphy\nhierogram\nhierogrammat\nhierogrammate\nhierogrammateus\nhierogrammatic\nhierogrammatical\nhierogrammatist\nhierograph\nhierographer\nhierographic\nhierographical\nhierography\nhierolatry\nhierologic\nhierological\nhierologist\nhierology\nhieromachy\nhieromancy\nhieromnemon\nhieromonach\nhieron\nHieronymic\nHieronymite\nhieropathic\nhierophancy\nhierophant\nhierophantes\nhierophantic\nhierophantically\nhierophanticly\nhieros\nhieroscopy\nHierosolymitan\nHierosolymite\nhierurgical\nhierurgy\nhifalutin\nhigdon\nhiggaion\nhigginsite\nhiggle\nhigglehaggle\nhiggler\nhigglery\nhigh\nhighball\nhighbelia\nhighbinder\nhighborn\nhighboy\nhighbred\nhigher\nhighermost\nhighest\nhighfalutin\nhighfaluting\nhighfalutinism\nhighflying\nhighhanded\nhighhandedly\nhighhandedness\nhighhearted\nhighheartedly\nhighheartedness\nhighish\nhighjack\nhighjacker\nhighland\nhighlander\nhighlandish\nHighlandman\nHighlandry\nhighlight\nhighliving\nhighly\nhighman\nhighmoor\nhighmost\nhighness\nhighroad\nhight\nhightoby\nhightop\nhighway\nhighwayman\nhiguero\nhijack\nhike\nhiker\nHilaria\nhilarious\nhilariously\nhilariousness\nhilarity\nHilary\nHilarymas\nHilarytide\nhilasmic\nhilch\nHilda\nHildebrand\nHildebrandian\nHildebrandic\nHildebrandine\nHildebrandism\nHildebrandist\nHildebrandslied\nHildegarde\nhilding\nhiliferous\nhill\nHillary\nhillberry\nhillbilly\nhillculture\nhillebrandite\nHillel\nhiller\nhillet\nHillhousia\nhilliness\nhillman\nhillock\nhillocked\nhillocky\nhillsale\nhillsalesman\nhillside\nhillsman\nhilltop\nhilltrot\nhillward\nhillwoman\nhilly\nhilsa\nhilt\nhiltless\nhilum\nhilus\nhim\nHima\nHimalaya\nHimalayan\nHimantopus\nhimation\nHimawan\nhimp\nhimself\nhimward\nhimwards\nHimyaric\nHimyarite\nHimyaritic\nhin\nhinau\nHinayana\nhinch\nhind\nhindberry\nhindbrain\nhindcast\nhinddeck\nhinder\nhinderance\nhinderer\nhinderest\nhinderful\nhinderfully\nhinderingly\nhinderlands\nhinderlings\nhinderlins\nhinderly\nhinderment\nhindermost\nhindersome\nhindhand\nhindhead\nHindi\nhindmost\nhindquarter\nhindrance\nhindsaddle\nhindsight\nHindu\nHinduism\nHinduize\nHindustani\nhindward\nhing\nhinge\nhingecorner\nhingeflower\nhingeless\nhingelike\nhinger\nhingeways\nhingle\nhinney\nhinnible\nHinnites\nhinny\nhinoid\nhinoideous\nhinoki\nhinsdalite\nhint\nhintedly\nhinter\nhinterland\nhintingly\nhintproof\nhintzeite\nHiodon\nhiodont\nHiodontidae\nhiortdahlite\nhip\nhipbone\nhipe\nhiper\nhiphalt\nhipless\nhipmold\nHippa\nhippalectryon\nhipparch\nHipparion\nHippeastrum\nhipped\nHippelates\nhippen\nHippia\nhippian\nhippiater\nhippiatric\nhippiatrical\nhippiatrics\nhippiatrist\nhippiatry\nhippic\nHippidae\nHippidion\nHippidium\nhipping\nhippish\nhipple\nhippo\nHippobosca\nhippoboscid\nHippoboscidae\nhippocamp\nhippocampal\nhippocampi\nhippocampine\nhippocampus\nHippocastanaceae\nhippocastanaceous\nhippocaust\nhippocentaur\nhippocentauric\nhippocerf\nhippocoprosterol\nhippocras\nHippocratea\nHippocrateaceae\nhippocrateaceous\nHippocratian\nHippocratic\nHippocratical\nHippocratism\nHippocrene\nHippocrenian\nhippocrepian\nhippocrepiform\nHippodamia\nhippodamous\nhippodrome\nhippodromic\nhippodromist\nhippogastronomy\nHippoglosinae\nHippoglossidae\nHippoglossus\nhippogriff\nhippogriffin\nhippoid\nhippolite\nhippolith\nhippological\nhippologist\nhippology\nHippolytan\nHippolyte\nHippolytidae\nHippolytus\nhippomachy\nhippomancy\nhippomanes\nHippomedon\nhippomelanin\nHippomenes\nhippometer\nhippometric\nhippometry\nHipponactean\nhipponosological\nhipponosology\nhippopathological\nhippopathology\nhippophagi\nhippophagism\nhippophagist\nhippophagistical\nhippophagous\nhippophagy\nhippophile\nhippophobia\nhippopod\nhippopotami\nhippopotamian\nhippopotamic\nHippopotamidae\nhippopotamine\nhippopotamoid\nhippopotamus\nHipposelinum\nhippotigrine\nHippotigris\nhippotomical\nhippotomist\nhippotomy\nhippotragine\nHippotragus\nhippurate\nhippuric\nhippurid\nHippuridaceae\nHippuris\nhippurite\nHippurites\nhippuritic\nHippuritidae\nhippuritoid\nhippus\nhippy\nhipshot\nhipwort\nhirable\nhiragana\nHiram\nHiramite\nhircarra\nhircine\nhircinous\nhircocerf\nhircocervus\nhircosity\nhire\nhired\nhireless\nhireling\nhireman\nHiren\nhirer\nhirmologion\nhirmos\nHirneola\nhiro\nHirofumi\nhirondelle\nHirotoshi\nHiroyuki\nhirple\nhirrient\nhirse\nhirsel\nhirsle\nhirsute\nhirsuteness\nhirsuties\nhirsutism\nhirsutulous\nHirtella\nhirtellous\nHirudin\nhirudine\nHirudinea\nhirudinean\nhirudiniculture\nHirudinidae\nhirudinize\nhirudinoid\nHirudo\nhirundine\nHirundinidae\nhirundinous\nHirundo\nhis\nhish\nhisingerite\nhisn\nHispa\nHispania\nHispanic\nHispanicism\nHispanicize\nhispanidad\nHispaniolate\nHispaniolize\nHispanist\nHispanize\nHispanophile\nHispanophobe\nhispid\nhispidity\nhispidulate\nhispidulous\nHispinae\nhiss\nhisser\nhissing\nhissingly\nhissproof\nhist\nhistaminase\nhistamine\nhistaminic\nhistidine\nhistie\nhistiocyte\nhistiocytic\nhistioid\nhistiology\nHistiophoridae\nHistiophorus\nhistoblast\nhistochemic\nhistochemical\nhistochemistry\nhistoclastic\nhistocyte\nhistodiagnosis\nhistodialysis\nhistodialytic\nhistogen\nhistogenesis\nhistogenetic\nhistogenetically\nhistogenic\nhistogenous\nhistogeny\nhistogram\nhistographer\nhistographic\nhistographical\nhistography\nhistoid\nhistologic\nhistological\nhistologically\nhistologist\nhistology\nhistolysis\nhistolytic\nhistometabasis\nhistomorphological\nhistomorphologically\nhistomorphology\nhiston\nhistonal\nhistone\nhistonomy\nhistopathologic\nhistopathological\nhistopathologist\nhistopathology\nhistophyly\nhistophysiological\nhistophysiology\nHistoplasma\nhistoplasmin\nhistoplasmosis\nhistorial\nhistorian\nhistoriated\nhistoric\nhistorical\nhistorically\nhistoricalness\nhistorician\nhistoricism\nhistoricity\nhistoricize\nhistoricocabbalistical\nhistoricocritical\nhistoricocultural\nhistoricodogmatic\nhistoricogeographical\nhistoricophilosophica\nhistoricophysical\nhistoricopolitical\nhistoricoprophetic\nhistoricoreligious\nhistorics\nhistoricus\nhistoried\nhistorier\nhistoriette\nhistorify\nhistoriograph\nhistoriographer\nhistoriographership\nhistoriographic\nhistoriographical\nhistoriographically\nhistoriography\nhistoriological\nhistoriology\nhistoriometric\nhistoriometry\nhistorionomer\nhistorious\nhistorism\nhistorize\nhistory\nhistotherapist\nhistotherapy\nhistotome\nhistotomy\nhistotrophic\nhistotrophy\nhistotropic\nhistozoic\nhistozyme\nhistrio\nHistriobdella\nHistriomastix\nhistrion\nhistrionic\nhistrionical\nhistrionically\nhistrionicism\nhistrionism\nhit\nhitch\nhitcher\nhitchhike\nhitchhiker\nhitchily\nhitchiness\nHitchiti\nhitchproof\nhitchy\nhithe\nhither\nhithermost\nhitherto\nhitherward\nHitlerism\nHitlerite\nhitless\nHitoshi\nhittable\nhitter\nHittite\nHittitics\nHittitology\nHittology\nhive\nhiveless\nhiver\nhives\nhiveward\nHivite\nhizz\nHler\nHlidhskjalf\nHlithskjalf\nHlorrithi\nHo\nho\nhoar\nhoard\nhoarder\nhoarding\nhoardward\nhoarfrost\nhoarhead\nhoarheaded\nhoarhound\nhoarily\nhoariness\nhoarish\nhoarness\nhoarse\nhoarsely\nhoarsen\nhoarseness\nhoarstone\nhoarwort\nhoary\nhoaryheaded\nhoast\nhoastman\nhoatzin\nhoax\nhoaxee\nhoaxer\nhoaxproof\nhob\nhobber\nHobbesian\nhobbet\nHobbian\nhobbil\nHobbism\nHobbist\nHobbistical\nhobble\nhobblebush\nhobbledehoy\nhobbledehoydom\nhobbledehoyhood\nhobbledehoyish\nhobbledehoyishness\nhobbledehoyism\nhobbledygee\nhobbler\nhobbling\nhobblingly\nhobbly\nhobby\nhobbyhorse\nhobbyhorsical\nhobbyhorsically\nhobbyism\nhobbyist\nhobbyless\nhobgoblin\nhoblike\nhobnail\nhobnailed\nhobnailer\nhobnob\nhobo\nhoboism\nHobomoco\nhobthrush\nhocco\nHochelaga\nHochheimer\nhock\nHockday\nhockelty\nhocker\nhocket\nhockey\nhockshin\nHocktide\nhocky\nhocus\nhod\nhodden\nhodder\nhoddle\nhoddy\nhodening\nhodful\nhodgepodge\nHodgkin\nhodgkinsonite\nhodiernal\nhodman\nhodmandod\nhodograph\nhodometer\nhodometrical\nhoe\nhoecake\nhoedown\nhoeful\nhoer\nhoernesite\nHoffmannist\nHoffmannite\nhog\nhoga\nhogan\nHogarthian\nhogback\nhogbush\nhogfish\nhogframe\nhogged\nhogger\nhoggerel\nhoggery\nhogget\nhoggie\nhoggin\nhoggish\nhoggishly\nhoggishness\nhoggism\nhoggy\nhogherd\nhoghide\nhoghood\nhoglike\nhogling\nhogmace\nhogmanay\nHogni\nhognose\nhognut\nhogpen\nhogreeve\nhogrophyte\nhogshead\nhogship\nhogshouther\nhogskin\nhogsty\nhogward\nhogwash\nhogweed\nhogwort\nhogyard\nHohe\nHohenzollern\nHohenzollernism\nHohn\nHohokam\nhoi\nhoick\nhoin\nhoise\nhoist\nhoistaway\nhoister\nhoisting\nhoistman\nhoistway\nhoit\nhoju\nHokan\nhokey\nhokeypokey\nhokum\nholagogue\nholarctic\nholard\nholarthritic\nholarthritis\nholaspidean\nholcad\nholcodont\nHolconoti\nHolcus\nhold\nholdable\nholdall\nholdback\nholden\nholdenite\nholder\nholdership\nholdfast\nholdfastness\nholding\nholdingly\nholdout\nholdover\nholdsman\nholdup\nhole\nholeable\nHolectypina\nholectypoid\nholeless\nholeman\nholeproof\nholer\nholethnic\nholethnos\nholewort\nholey\nholia\nholiday\nholidayer\nholidayism\nholidaymaker\nholidaymaking\nholily\nholiness\nholing\nholinight\nholism\nholistic\nholistically\nholl\nholla\nhollaite\nHolland\nhollandaise\nHollander\nHollandish\nhollandite\nHollands\nHollantide\nholler\nhollin\nholliper\nhollo\nhollock\nhollong\nhollow\nhollower\nhollowfaced\nhollowfoot\nhollowhearted\nhollowheartedness\nhollowly\nhollowness\nholluschick\nHolly\nholly\nhollyhock\nHollywood\nHollywooder\nHollywoodize\nholm\nholmberry\nholmgang\nholmia\nholmic\nholmium\nholmos\nholobaptist\nholobenthic\nholoblastic\nholoblastically\nholobranch\nholocaine\nholocarpic\nholocarpous\nholocaust\nholocaustal\nholocaustic\nHolocene\nholocentrid\nHolocentridae\nholocentroid\nHolocentrus\nHolocephala\nholocephalan\nHolocephali\nholocephalian\nholocephalous\nHolochoanites\nholochoanitic\nholochoanoid\nHolochoanoida\nholochoanoidal\nholochordate\nholochroal\nholoclastic\nholocrine\nholocryptic\nholocrystalline\nholodactylic\nholodedron\nHolodiscus\nhologamous\nhologamy\nhologastrula\nhologastrular\nHolognatha\nholognathous\nhologonidium\nholograph\nholographic\nholographical\nholohedral\nholohedric\nholohedrism\nholohemihedral\nholohyaline\nholomastigote\nHolometabola\nholometabole\nholometabolian\nholometabolic\nholometabolism\nholometabolous\nholometaboly\nholometer\nholomorph\nholomorphic\nholomorphism\nholomorphosis\nholomorphy\nHolomyaria\nholomyarian\nHolomyarii\nholoparasite\nholoparasitic\nHolophane\nholophane\nholophotal\nholophote\nholophotometer\nholophrase\nholophrasis\nholophrasm\nholophrastic\nholophyte\nholophytic\nholoplankton\nholoplanktonic\nholoplexia\nholopneustic\nholoproteide\nholoptic\nholoptychian\nholoptychiid\nHoloptychiidae\nHoloptychius\nholoquinoid\nholoquinoidal\nholoquinonic\nholoquinonoid\nholorhinal\nholosaprophyte\nholosaprophytic\nholosericeous\nholoside\nholosiderite\nHolosiphona\nholosiphonate\nHolosomata\nholosomatous\nholospondaic\nholostean\nHolostei\nholosteous\nholosteric\nHolosteum\nHolostomata\nholostomate\nholostomatous\nholostome\nholostomous\nholostylic\nholosymmetric\nholosymmetrical\nholosymmetry\nholosystematic\nholosystolic\nholothecal\nholothoracic\nHolothuria\nholothurian\nHolothuridea\nholothurioid\nHolothurioidea\nholotonia\nholotonic\nholotony\nholotrich\nHolotricha\nholotrichal\nHolotrichida\nholotrichous\nholotype\nholour\nholozoic\nHolstein\nholster\nholstered\nholt\nholy\nholyday\nholyokeite\nholystone\nholytide\nhomage\nhomageable\nhomager\nHomalocenchrus\nhomalogonatous\nhomalographic\nhomaloid\nhomaloidal\nHomalonotus\nHomalopsinae\nHomaloptera\nHomalopterous\nhomalosternal\nHomalosternii\nHomam\nHomaridae\nhomarine\nhomaroid\nHomarus\nhomatomic\nhomaxial\nhomaxonial\nhomaxonic\nHomburg\nhome\nhomebody\nhomeborn\nhomebound\nhomebred\nhomecomer\nhomecraft\nhomecroft\nhomecrofter\nhomecrofting\nhomefarer\nhomefelt\nhomegoer\nhomekeeper\nhomekeeping\nhomeland\nhomelander\nhomeless\nhomelessly\nhomelessness\nhomelet\nhomelike\nhomelikeness\nhomelily\nhomeliness\nhomeling\nhomely\nhomelyn\nhomemade\nhomemaker\nhomemaking\nhomeoblastic\nhomeochromatic\nhomeochromatism\nhomeochronous\nhomeocrystalline\nhomeogenic\nhomeogenous\nhomeoid\nhomeoidal\nhomeoidality\nhomeokinesis\nhomeokinetic\nhomeomerous\nhomeomorph\nhomeomorphic\nhomeomorphism\nhomeomorphous\nhomeomorphy\nhomeopath\nhomeopathic\nhomeopathically\nhomeopathician\nhomeopathicity\nhomeopathist\nhomeopathy\nhomeophony\nhomeoplasia\nhomeoplastic\nhomeoplasy\nhomeopolar\nhomeosis\nhomeostasis\nhomeostatic\nhomeotic\nhomeotransplant\nhomeotransplantation\nhomeotype\nhomeotypic\nhomeotypical\nhomeowner\nhomeozoic\nHomer\nhomer\nHomerian\nHomeric\nHomerical\nHomerically\nHomerid\nHomeridae\nHomeridian\nHomerist\nHomerologist\nHomerology\nHomeromastix\nhomeseeker\nhomesick\nhomesickly\nhomesickness\nhomesite\nhomesome\nhomespun\nhomestall\nhomestead\nhomesteader\nhomester\nhomestretch\nhomeward\nhomewardly\nhomework\nhomeworker\nhomewort\nhomey\nhomeyness\nhomicidal\nhomicidally\nhomicide\nhomicidious\nhomiculture\nhomilete\nhomiletic\nhomiletical\nhomiletically\nhomiletics\nhomiliarium\nhomiliary\nhomilist\nhomilite\nhomilize\nhomily\nhominal\nhominess\nHominian\nhominid\nHominidae\nhominiform\nhominify\nhominine\nhominisection\nhominivorous\nhominoid\nhominy\nhomish\nhomishness\nhomo\nhomoanisaldehyde\nhomoanisic\nhomoarecoline\nhomobaric\nhomoblastic\nhomoblasty\nhomocarpous\nhomocategoric\nhomocentric\nhomocentrical\nhomocentrically\nhomocerc\nhomocercal\nhomocercality\nhomocercy\nhomocerebrin\nhomochiral\nhomochlamydeous\nhomochromatic\nhomochromatism\nhomochrome\nhomochromic\nhomochromosome\nhomochromous\nhomochromy\nhomochronous\nhomoclinal\nhomocline\nHomocoela\nhomocoelous\nhomocreosol\nhomocyclic\nhomodermic\nhomodermy\nhomodont\nhomodontism\nhomodox\nhomodoxian\nhomodromal\nhomodrome\nhomodromous\nhomodromy\nhomodynamic\nhomodynamous\nhomodynamy\nhomodyne\nHomoean\nHomoeanism\nhomoecious\nhomoeoarchy\nhomoeoblastic\nhomoeochromatic\nhomoeochronous\nhomoeocrystalline\nhomoeogenic\nhomoeogenous\nhomoeography\nhomoeokinesis\nhomoeomerae\nHomoeomeri\nhomoeomeria\nhomoeomerian\nhomoeomerianism\nhomoeomeric\nhomoeomerical\nhomoeomerous\nhomoeomery\nhomoeomorph\nhomoeomorphic\nhomoeomorphism\nhomoeomorphous\nhomoeomorphy\nhomoeopath\nhomoeopathic\nhomoeopathically\nhomoeopathician\nhomoeopathicity\nhomoeopathist\nhomoeopathy\nhomoeophony\nhomoeophyllous\nhomoeoplasia\nhomoeoplastic\nhomoeoplasy\nhomoeopolar\nhomoeosis\nhomoeotel\nhomoeoteleutic\nhomoeoteleuton\nhomoeotic\nhomoeotopy\nhomoeotype\nhomoeotypic\nhomoeotypical\nhomoeozoic\nhomoerotic\nhomoerotism\nhomofermentative\nhomogametic\nhomogamic\nhomogamous\nhomogamy\nhomogangliate\nhomogen\nhomogenate\nhomogene\nhomogeneal\nhomogenealness\nhomogeneate\nhomogeneity\nhomogeneization\nhomogeneize\nhomogeneous\nhomogeneously\nhomogeneousness\nhomogenesis\nhomogenetic\nhomogenetical\nhomogenic\nhomogenization\nhomogenize\nhomogenizer\nhomogenous\nhomogentisic\nhomogeny\nhomoglot\nhomogone\nhomogonous\nhomogonously\nhomogony\nhomograft\nhomograph\nhomographic\nhomography\nhomohedral\nhomoiotherm\nhomoiothermal\nhomoiothermic\nhomoiothermism\nhomoiothermous\nhomoiousia\nHomoiousian\nhomoiousian\nHomoiousianism\nhomoiousious\nhomolateral\nhomolecithal\nhomolegalis\nhomologate\nhomologation\nhomologic\nhomological\nhomologically\nhomologist\nhomologize\nhomologizer\nhomologon\nhomologoumena\nhomologous\nhomolographic\nhomolography\nhomologue\nhomology\nhomolosine\nhomolysin\nhomolysis\nhomomallous\nhomomeral\nhomomerous\nhomometrical\nhomometrically\nhomomorph\nHomomorpha\nhomomorphic\nhomomorphism\nhomomorphosis\nhomomorphous\nhomomorphy\nHomoneura\nhomonomous\nhomonomy\nhomonuclear\nhomonym\nhomonymic\nhomonymous\nhomonymously\nhomonymy\nhomoousia\nHomoousian\nHomoousianism\nHomoousianist\nHomoousiast\nHomoousion\nhomoousious\nhomopathy\nhomoperiodic\nhomopetalous\nhomophene\nhomophenous\nhomophone\nhomophonic\nhomophonous\nhomophony\nhomophthalic\nhomophylic\nhomophyllous\nhomophyly\nhomopiperonyl\nhomoplasis\nhomoplasmic\nhomoplasmy\nhomoplast\nhomoplastic\nhomoplasy\nhomopolar\nhomopolarity\nhomopolic\nhomopter\nHomoptera\nhomopteran\nhomopteron\nhomopterous\nHomorelaps\nhomorganic\nhomoseismal\nhomosexual\nhomosexualism\nhomosexualist\nhomosexuality\nhomosporous\nhomospory\nHomosteus\nhomostyled\nhomostylic\nhomostylism\nhomostylous\nhomostyly\nhomosystemic\nhomotactic\nhomotatic\nhomotaxeous\nhomotaxia\nhomotaxial\nhomotaxially\nhomotaxic\nhomotaxis\nhomotaxy\nhomothallic\nhomothallism\nhomothetic\nhomothety\nhomotonic\nhomotonous\nhomotonously\nhomotony\nhomotopic\nhomotransplant\nhomotransplantation\nhomotropal\nhomotropous\nhomotypal\nhomotype\nhomotypic\nhomotypical\nhomotypy\nhomovanillic\nhomovanillin\nhomoveratric\nhomoveratrole\nhomozygosis\nhomozygosity\nhomozygote\nhomozygous\nhomozygousness\nhomrai\nhomuncle\nhomuncular\nhomunculus\nhomy\nHon\nhonda\nhondo\nHonduran\nHonduranean\nHonduranian\nHondurean\nHondurian\nhone\nhonest\nhonestly\nhonestness\nhonestone\nhonesty\nhonewort\nhoney\nhoneybee\nhoneyberry\nhoneybind\nhoneyblob\nhoneybloom\nhoneycomb\nhoneycombed\nhoneydew\nhoneydewed\nhoneydrop\nhoneyed\nhoneyedly\nhoneyedness\nhoneyfall\nhoneyflower\nhoneyfogle\nhoneyful\nhoneyhearted\nhoneyless\nhoneylike\nhoneylipped\nhoneymoon\nhoneymooner\nhoneymoonlight\nhoneymoonshine\nhoneymoonstruck\nhoneymoony\nhoneymouthed\nhoneypod\nhoneypot\nhoneystone\nhoneysuck\nhoneysucker\nhoneysuckle\nhoneysuckled\nhoneysweet\nhoneyware\nHoneywood\nhoneywood\nhoneywort\nhong\nhonied\nhonily\nhonk\nhonker\nhonor\nHonora\nhonorability\nhonorable\nhonorableness\nhonorableship\nhonorably\nhonorance\nhonoraria\nhonorarily\nhonorarium\nhonorary\nhonoree\nhonorer\nhonoress\nhonorific\nhonorifically\nhonorless\nhonorous\nhonorsman\nhonorworthy\nhontish\nhontous\nHonzo\nhooch\nhoochinoo\nhood\nhoodcap\nhooded\nhoodedness\nhoodful\nhoodie\nhoodless\nhoodlike\nhoodlum\nhoodlumish\nhoodlumism\nhoodlumize\nhoodman\nhoodmold\nhoodoo\nhoodsheaf\nhoodshy\nhoodshyness\nhoodwink\nhoodwinkable\nhoodwinker\nhoodwise\nhoodwort\nhooey\nhoof\nhoofbeat\nhoofbound\nhoofed\nhoofer\nhoofiness\nhoofish\nhoofless\nhooflet\nhooflike\nhoofmark\nhoofprint\nhoofrot\nhoofs\nhoofworm\nhoofy\nhook\nhookah\nhookaroon\nhooked\nhookedness\nhookedwise\nhooker\nHookera\nhookerman\nhookers\nhookheal\nhookish\nhookless\nhooklet\nhooklike\nhookmaker\nhookmaking\nhookman\nhooknose\nhooksmith\nhooktip\nhookum\nhookup\nhookweed\nhookwise\nhookworm\nhookwormer\nhookwormy\nhooky\nhooligan\nhooliganism\nhooliganize\nhoolock\nhooly\nhoon\nhoonoomaun\nhoop\nhooped\nhooper\nhooping\nhoopla\nhoople\nhoopless\nhooplike\nhoopmaker\nhoopman\nhoopoe\nhoopstick\nhoopwood\nhoose\nhoosegow\nhoosh\nHoosier\nHoosierdom\nHoosierese\nHoosierize\nhoot\nhootay\nhooter\nhootingly\nhoove\nhooven\nHooverism\nHooverize\nhoovey\nhop\nhopbine\nhopbush\nHopcalite\nhopcrease\nhope\nhoped\nhopeful\nhopefully\nhopefulness\nhopeite\nhopeless\nhopelessly\nhopelessness\nhoper\nHopi\nhopi\nhopingly\nHopkinsian\nHopkinsianism\nHopkinsonian\nhoplite\nhoplitic\nhoplitodromos\nHoplocephalus\nhoplology\nhoplomachic\nhoplomachist\nhoplomachos\nhoplomachy\nHoplonemertea\nhoplonemertean\nhoplonemertine\nHoplonemertini\nhopoff\nhopped\nhopper\nhopperburn\nhopperdozer\nhopperette\nhoppergrass\nhopperings\nhopperman\nhoppers\nhoppestere\nhoppet\nhoppingly\nhoppity\nhopple\nhoppy\nhopscotch\nhopscotcher\nhoptoad\nhopvine\nhopyard\nhora\nhoral\nhorary\nHoratian\nHoratio\nHoratius\nhorbachite\nhordarian\nhordary\nhorde\nhordeaceous\nhordeiform\nhordein\nhordenine\nHordeum\nhorehound\nHorim\nhorismology\nhorizometer\nhorizon\nhorizonless\nhorizontal\nhorizontalism\nhorizontality\nhorizontalization\nhorizontalize\nhorizontally\nhorizontalness\nhorizontic\nhorizontical\nhorizontically\nhorizonward\nhorme\nhormic\nhormigo\nhormion\nhormist\nhormogon\nHormogonales\nHormogoneae\nHormogoneales\nhormogonium\nhormogonous\nhormonal\nhormone\nhormonic\nhormonize\nhormonogenesis\nhormonogenic\nhormonology\nhormonopoiesis\nhormonopoietic\nhormos\nhorn\nhornbeam\nhornbill\nhornblende\nhornblendic\nhornblendite\nhornblendophyre\nhornblower\nhornbook\nhorned\nhornedness\nhorner\nhornerah\nhornet\nhornety\nhornfair\nhornfels\nhornfish\nhornful\nhorngeld\nHornie\nhornify\nhornily\nhorniness\nhorning\nhornish\nhornist\nhornito\nhornless\nhornlessness\nhornlet\nhornlike\nhornotine\nhornpipe\nhornplant\nhornsman\nhornstay\nhornstone\nhornswoggle\nhorntail\nhornthumb\nhorntip\nhornwood\nhornwork\nhornworm\nhornwort\nhorny\nhornyhanded\nhornyhead\nhorograph\nhorographer\nhorography\nhorokaka\nhorologe\nhorologer\nhorologic\nhorological\nhorologically\nhorologiography\nhorologist\nhorologium\nhorologue\nhorology\nhorometrical\nhorometry\nHoronite\nhoropito\nhoropter\nhoropteric\nhoroptery\nhoroscopal\nhoroscope\nhoroscoper\nhoroscopic\nhoroscopical\nhoroscopist\nhoroscopy\nHorouta\nhorrendous\nhorrendously\nhorrent\nhorrescent\nhorreum\nhorribility\nhorrible\nhorribleness\nhorribly\nhorrid\nhorridity\nhorridly\nhorridness\nhorrific\nhorrifically\nhorrification\nhorrify\nhorripilant\nhorripilate\nhorripilation\nhorrisonant\nhorror\nhorrorful\nhorrorish\nhorrorist\nhorrorize\nhorrormonger\nhorrormongering\nhorrorous\nhorrorsome\nhorse\nhorseback\nhorsebacker\nhorseboy\nhorsebreaker\nhorsecar\nhorsecloth\nhorsecraft\nhorsedom\nhorsefair\nhorsefettler\nhorsefight\nhorsefish\nhorseflesh\nhorsefly\nhorsefoot\nhorsegate\nhorsehair\nhorsehaired\nhorsehead\nhorseherd\nhorsehide\nhorsehood\nhorsehoof\nhorsejockey\nhorsekeeper\nhorselaugh\nhorselaugher\nhorselaughter\nhorseleech\nhorseless\nhorselike\nhorseload\nhorseman\nhorsemanship\nhorsemastership\nhorsemint\nhorsemonger\nhorseplay\nhorseplayful\nhorsepond\nhorsepower\nhorsepox\nhorser\nhorseshoe\nhorseshoer\nhorsetail\nhorsetongue\nHorsetown\nhorsetree\nhorseway\nhorseweed\nhorsewhip\nhorsewhipper\nhorsewoman\nhorsewomanship\nhorsewood\nhorsfordite\nhorsify\nhorsily\nhorsiness\nhorsing\nHorst\nhorst\nhorsy\nhorsyism\nhortation\nhortative\nhortatively\nhortator\nhortatorily\nhortatory\nHortense\nHortensia\nhortensial\nHortensian\nhortensian\nhorticultural\nhorticulturally\nhorticulture\nhorticulturist\nhortite\nhortonolite\nhortulan\nHorvatian\nhory\nHosackia\nhosanna\nhose\nhosed\nhosel\nhoseless\nhoselike\nhoseman\nhosier\nhosiery\nhosiomartyr\nhospice\nhospitable\nhospitableness\nhospitably\nhospitage\nhospital\nhospitalary\nhospitaler\nhospitalism\nhospitality\nhospitalization\nhospitalize\nhospitant\nhospitate\nhospitation\nhospitator\nhospitious\nhospitium\nhospitize\nhospodar\nhospodariat\nhospodariate\nhost\nHosta\nhostage\nhostager\nhostageship\nhostel\nhosteler\nhostelry\nhoster\nhostess\nhostie\nhostile\nhostilely\nhostileness\nhostility\nhostilize\nhosting\nhostler\nhostlership\nhostlerwife\nhostless\nhostly\nhostry\nhostship\nhot\nhotbed\nhotblood\nhotbox\nhotbrained\nhotch\nhotchpot\nhotchpotch\nhotchpotchly\nhotel\nhoteldom\nhotelhood\nhotelier\nhotelization\nhotelize\nhotelkeeper\nhotelless\nhotelward\nhotfoot\nhothead\nhotheaded\nhotheadedly\nhotheadedness\nhothearted\nhotheartedly\nhotheartedness\nhothouse\nhoti\nhotly\nhotmouthed\nhotness\nhotspur\nhotspurred\nHotta\nHottentot\nHottentotese\nHottentotic\nHottentotish\nHottentotism\nhotter\nhottery\nhottish\nHottonia\nhoubara\nHoudan\nhough\nhoughband\nhougher\nhoughite\nhoughmagandy\nHoughton\nhounce\nhound\nhounder\nhoundfish\nhounding\nhoundish\nhoundlike\nhoundman\nhoundsbane\nhoundsberry\nhoundshark\nhoundy\nhouppelande\nhour\nhourful\nhourglass\nhouri\nhourless\nhourly\nhousage\nhousal\nHousatonic\nhouse\nhouseball\nhouseboat\nhouseboating\nhousebote\nhousebound\nhouseboy\nhousebreak\nhousebreaker\nhousebreaking\nhousebroke\nhousebroken\nhousebug\nhousebuilder\nhousebuilding\nhousecarl\nhousecoat\nhousecraft\nhousefast\nhousefather\nhousefly\nhouseful\nhousefurnishings\nhousehold\nhouseholder\nhouseholdership\nhouseholding\nhouseholdry\nhousekeep\nhousekeeper\nhousekeeperlike\nhousekeeperly\nhousekeeping\nhousel\nhouseleek\nhouseless\nhouselessness\nhouselet\nhouseline\nhouseling\nhousemaid\nhousemaidenly\nhousemaiding\nhousemaidy\nhouseman\nhousemaster\nhousemastership\nhousemate\nhousemating\nhouseminder\nhousemistress\nhousemother\nhousemotherly\nhouseowner\nhouser\nhouseridden\nhouseroom\nhousesmith\nhousetop\nhouseward\nhousewares\nhousewarm\nhousewarmer\nhousewarming\nhousewear\nhousewife\nhousewifeliness\nhousewifely\nhousewifery\nhousewifeship\nhousewifish\nhousewive\nhousework\nhousewright\nhousing\nHoustonia\nhousty\nhousy\nhoutou\nhouvari\nHova\nhove\nhovedance\nhovel\nhoveler\nhoven\nHovenia\nhover\nhoverer\nhovering\nhoveringly\nhoverly\nhow\nhowadji\nHoward\nhowardite\nhowbeit\nhowdah\nhowder\nhowdie\nhowdy\nhowe\nHowea\nhowel\nhowever\nhowff\nhowish\nhowitzer\nhowk\nhowkit\nhowl\nhowler\nhowlet\nhowling\nhowlingly\nhowlite\nhowso\nhowsoever\nhowsomever\nhox\nhoy\nHoya\nhoyden\nhoydenhood\nhoydenish\nhoydenism\nhoyle\nhoyman\nHrimfaxi\nHrothgar\nHsi\nHsuan\nHu\nhuaca\nhuaco\nhuajillo\nhuamuchil\nhuantajayite\nhuaracho\nHuari\nhuarizo\nHuashi\nHuastec\nHuastecan\nHuave\nHuavean\nhub\nhubb\nhubba\nhubber\nHubbite\nhubble\nhubbly\nhubbub\nhubbuboo\nhubby\nHubert\nhubmaker\nhubmaking\nhubnerite\nhubristic\nhubshi\nhuccatoon\nhuchen\nHuchnom\nhucho\nhuck\nhuckaback\nhuckle\nhuckleback\nhucklebacked\nhuckleberry\nhucklebone\nhuckmuck\nhuckster\nhucksterage\nhucksterer\nhucksteress\nhucksterize\nhuckstery\nhud\nhuddle\nhuddledom\nhuddlement\nhuddler\nhuddling\nhuddlingly\nhuddock\nhuddroun\nhuddup\nHudibras\nHudibrastic\nHudibrastically\nHudsonia\nHudsonian\nhudsonite\nhue\nhued\nhueful\nhueless\nhuelessness\nhuer\nHuey\nhuff\nhuffier\nhuffily\nhuffiness\nhuffingly\nhuffish\nhuffishly\nhuffishness\nhuffle\nhuffler\nhuffy\nhug\nhuge\nHugelia\nhugelite\nhugely\nhugeness\nhugeous\nhugeously\nhugeousness\nhuggable\nhugger\nhuggermugger\nhuggermuggery\nHuggin\nhugging\nhuggingly\nhuggle\nHugh\nHughes\nHughoc\nHugo\nHugoesque\nhugsome\nHuguenot\nHuguenotic\nHuguenotism\nhuh\nHui\nhuia\nhuipil\nhuisache\nhuiscoyol\nhuitain\nHuk\nHukbalahap\nhuke\nhula\nHuldah\nhuldee\nhulk\nhulkage\nhulking\nhulky\nhull\nhullabaloo\nhuller\nhullock\nhulloo\nhulotheism\nHulsean\nhulsite\nhulster\nhulu\nhulver\nhulverhead\nhulverheaded\nhum\nHuma\nhuman\nhumane\nhumanely\nhumaneness\nhumanhood\nhumanics\nhumanification\nhumaniform\nhumaniformian\nhumanify\nhumanish\nhumanism\nhumanist\nhumanistic\nhumanistical\nhumanistically\nhumanitarian\nhumanitarianism\nhumanitarianist\nhumanitarianize\nhumanitary\nhumanitian\nhumanity\nhumanitymonger\nhumanization\nhumanize\nhumanizer\nhumankind\nhumanlike\nhumanly\nhumanness\nhumanoid\nhumate\nhumble\nhumblebee\nhumblehearted\nhumblemouthed\nhumbleness\nhumbler\nhumblie\nhumblingly\nhumbly\nhumbo\nhumboldtilite\nhumboldtine\nhumboldtite\nhumbug\nhumbugability\nhumbugable\nhumbugger\nhumbuggery\nhumbuggism\nhumbuzz\nhumdinger\nhumdrum\nhumdrumminess\nhumdrummish\nhumdrummishness\nhumdudgeon\nHume\nHumean\nhumect\nhumectant\nhumectate\nhumectation\nhumective\nhumeral\nhumeri\nhumeroabdominal\nhumerocubital\nhumerodigital\nhumerodorsal\nhumerometacarpal\nhumeroradial\nhumeroscapular\nhumeroulnar\nhumerus\nhumet\nhumetty\nhumhum\nhumic\nhumicubation\nhumid\nhumidate\nhumidification\nhumidifier\nhumidify\nhumidistat\nhumidity\nhumidityproof\nhumidly\nhumidness\nhumidor\nhumific\nhumification\nhumifuse\nhumify\nhumiliant\nhumiliate\nhumiliating\nhumiliatingly\nhumiliation\nhumiliative\nhumiliator\nhumiliatory\nhumilific\nhumilitude\nhumility\nhumin\nHumiria\nHumiriaceae\nHumiriaceous\nHumism\nHumist\nhumistratous\nhumite\nhumlie\nhummel\nhummeler\nhummer\nhummie\nhumming\nhummingbird\nhummock\nhummocky\nhumor\nhumoral\nhumoralism\nhumoralist\nhumoralistic\nhumoresque\nhumoresquely\nhumorful\nhumorific\nhumorism\nhumorist\nhumoristic\nhumoristical\nhumorize\nhumorless\nhumorlessness\nhumorology\nhumorous\nhumorously\nhumorousness\nhumorproof\nhumorsome\nhumorsomely\nhumorsomeness\nhumourful\nhumous\nhump\nhumpback\nhumpbacked\nhumped\nhumph\nHumphrey\nhumpiness\nhumpless\nhumpty\nhumpy\nhumstrum\nhumulene\nhumulone\nHumulus\nhumus\nhumuslike\nHun\nHunanese\nhunch\nHunchakist\nhunchback\nhunchbacked\nhunchet\nhunchy\nhundi\nhundred\nhundredal\nhundredary\nhundreder\nhundredfold\nhundredman\nhundredpenny\nhundredth\nhundredweight\nhundredwork\nhung\nHungaria\nHungarian\nhungarite\nhunger\nhungerer\nhungeringly\nhungerless\nhungerly\nhungerproof\nhungerweed\nhungrify\nhungrily\nhungriness\nhungry\nhunh\nhunk\nHunker\nhunker\nHunkerism\nhunkerous\nhunkerousness\nhunkers\nhunkies\nHunkpapa\nhunks\nhunky\nHunlike\nHunnian\nHunnic\nHunnican\nHunnish\nHunnishness\nhunt\nhuntable\nhuntedly\nHunter\nHunterian\nhunterlike\nhuntilite\nhunting\nhuntress\nhuntsman\nhuntsmanship\nhuntswoman\nHunyak\nhup\nHupa\nhupaithric\nHura\nhura\nhurcheon\nhurdies\nhurdis\nhurdle\nhurdleman\nhurdler\nhurdlewise\nhurds\nhure\nhureaulite\nhureek\nHurf\nhurgila\nhurkle\nhurl\nhurlbarrow\nhurled\nhurler\nhurley\nhurleyhouse\nhurling\nhurlock\nhurly\nHuron\nhuron\nHuronian\nhurr\nhurrah\nHurri\nHurrian\nhurricane\nhurricanize\nhurricano\nhurried\nhurriedly\nhurriedness\nhurrier\nhurrisome\nhurrock\nhurroo\nhurroosh\nhurry\nhurryingly\nhurryproof\nhursinghar\nhurst\nhurt\nhurtable\nhurted\nhurter\nhurtful\nhurtfully\nhurtfulness\nhurting\nhurtingest\nhurtle\nhurtleberry\nhurtless\nhurtlessly\nhurtlessness\nhurtlingly\nhurtsome\nhurty\nhusband\nhusbandable\nhusbandage\nhusbander\nhusbandfield\nhusbandhood\nhusbandland\nhusbandless\nhusbandlike\nhusbandliness\nhusbandly\nhusbandman\nhusbandress\nhusbandry\nhusbandship\nhuse\nhush\nhushable\nhushaby\nhushcloth\nhushedly\nhusheen\nhushel\nhusher\nhushful\nhushfully\nhushing\nhushingly\nhushion\nhusho\nhusk\nhuskanaw\nhusked\nhuskened\nhusker\nhuskershredder\nhuskily\nhuskiness\nhusking\nhuskroot\nhuskwort\nHusky\nhusky\nhuso\nhuspil\nhuss\nhussar\nHussite\nHussitism\nhussy\nhussydom\nhussyness\nhusting\nhustle\nhustlecap\nhustlement\nhustler\nhut\nhutch\nhutcher\nhutchet\nHutchinsonian\nHutchinsonianism\nhutchinsonite\nHuterian\nhuthold\nhutholder\nhutia\nhutkeeper\nhutlet\nhutment\nHutsulian\nHutterites\nHuttonian\nHuttonianism\nhuttoning\nhuttonweed\nhutukhtu\nhuvelyk\nHuxleian\nHuygenian\nhuzoor\nHuzvaresh\nhuzz\nhuzza\nhuzzard\nHwa\nHy\nhyacinth\nHyacinthia\nhyacinthian\nhyacinthine\nHyacinthus\nHyades\nhyaena\nHyaenanche\nHyaenarctos\nHyaenidae\nHyaenodon\nhyaenodont\nhyaenodontoid\nHyakume\nhyalescence\nhyalescent\nhyaline\nhyalinization\nhyalinize\nhyalinocrystalline\nhyalinosis\nhyalite\nhyalitis\nhyaloandesite\nhyalobasalt\nhyalocrystalline\nhyalodacite\nhyalogen\nhyalograph\nhyalographer\nhyalography\nhyaloid\nhyaloiditis\nhyaloliparite\nhyalolith\nhyalomelan\nhyalomucoid\nHyalonema\nhyalophagia\nhyalophane\nhyalophyre\nhyalopilitic\nhyaloplasm\nhyaloplasma\nhyaloplasmic\nhyalopsite\nhyalopterous\nhyalosiderite\nHyalospongia\nhyalotekite\nhyalotype\nhyaluronic\nhyaluronidase\nHybanthus\nHybla\nHyblaea\nHyblaean\nHyblan\nhybodont\nHybodus\nhybosis\nhybrid\nhybridal\nhybridation\nhybridism\nhybridist\nhybridity\nhybridizable\nhybridization\nhybridize\nhybridizer\nhybridous\nhydantoate\nhydantoic\nhydantoin\nhydathode\nhydatid\nhydatidiform\nhydatidinous\nhydatidocele\nhydatiform\nhydatigenous\nHydatina\nhydatogenesis\nhydatogenic\nhydatogenous\nhydatoid\nhydatomorphic\nhydatomorphism\nhydatopneumatic\nhydatopneumatolytic\nhydatopyrogenic\nhydatoscopy\nHydnaceae\nhydnaceous\nhydnocarpate\nhydnocarpic\nHydnocarpus\nhydnoid\nHydnora\nHydnoraceae\nhydnoraceous\nHydnum\nHydra\nhydracetin\nHydrachna\nhydrachnid\nHydrachnidae\nhydracid\nhydracoral\nhydracrylate\nhydracrylic\nHydractinia\nhydractinian\nHydradephaga\nhydradephagan\nhydradephagous\nhydragogue\nhydragogy\nhydramine\nhydramnion\nhydramnios\nHydrangea\nHydrangeaceae\nhydrangeaceous\nhydrant\nhydranth\nhydrarch\nhydrargillite\nhydrargyrate\nhydrargyria\nhydrargyriasis\nhydrargyric\nhydrargyrism\nhydrargyrosis\nhydrargyrum\nhydrarthrosis\nhydrarthrus\nhydrastine\nHydrastis\nhydrate\nhydrated\nhydration\nhydrator\nhydratropic\nhydraucone\nhydraulic\nhydraulically\nhydraulician\nhydraulicity\nhydraulicked\nhydraulicon\nhydraulics\nhydraulist\nhydraulus\nhydrazide\nhydrazidine\nhydrazimethylene\nhydrazine\nhydrazino\nhydrazo\nhydrazoate\nhydrazobenzene\nhydrazoic\nhydrazone\nhydrazyl\nhydremia\nhydremic\nhydrencephalocele\nhydrencephaloid\nhydrencephalus\nhydria\nhydriatric\nhydriatrist\nhydriatry\nhydric\nhydrically\nHydrid\nhydride\nhydriform\nhydrindene\nhydriodate\nhydriodic\nhydriodide\nhydriotaphia\nHydriote\nhydro\nhydroa\nhydroadipsia\nhydroaeric\nhydroalcoholic\nhydroaromatic\nhydroatmospheric\nhydroaviation\nhydrobarometer\nHydrobates\nHydrobatidae\nhydrobenzoin\nhydrobilirubin\nhydrobiological\nhydrobiologist\nhydrobiology\nhydrobiosis\nhydrobiplane\nhydrobomb\nhydroboracite\nhydroborofluoric\nhydrobranchiate\nhydrobromate\nhydrobromic\nhydrobromide\nhydrocarbide\nhydrocarbon\nhydrocarbonaceous\nhydrocarbonate\nhydrocarbonic\nhydrocarbonous\nhydrocarbostyril\nhydrocardia\nHydrocaryaceae\nhydrocaryaceous\nhydrocatalysis\nhydrocauline\nhydrocaulus\nhydrocele\nhydrocellulose\nhydrocephalic\nhydrocephalocele\nhydrocephaloid\nhydrocephalous\nhydrocephalus\nhydrocephaly\nhydroceramic\nhydrocerussite\nHydrocharidaceae\nhydrocharidaceous\nHydrocharis\nHydrocharitaceae\nhydrocharitaceous\nHydrochelidon\nhydrochemical\nhydrochemistry\nhydrochlorate\nhydrochlorauric\nhydrochloric\nhydrochloride\nhydrochlorplatinic\nhydrochlorplatinous\nHydrochoerus\nhydrocholecystis\nhydrocinchonine\nhydrocinnamic\nhydrocirsocele\nhydrocladium\nhydroclastic\nHydrocleis\nhydroclimate\nhydrocobalticyanic\nhydrocoele\nhydrocollidine\nhydroconion\nHydrocorallia\nHydrocorallinae\nhydrocoralline\nHydrocores\nHydrocorisae\nhydrocorisan\nhydrocotarnine\nHydrocotyle\nhydrocoumaric\nhydrocupreine\nhydrocyanate\nhydrocyanic\nhydrocyanide\nhydrocycle\nhydrocyclic\nhydrocyclist\nHydrocyon\nhydrocyst\nhydrocystic\nHydrodamalidae\nHydrodamalis\nHydrodictyaceae\nHydrodictyon\nhydrodrome\nHydrodromica\nhydrodromican\nhydrodynamic\nhydrodynamical\nhydrodynamics\nhydrodynamometer\nhydroeconomics\nhydroelectric\nhydroelectricity\nhydroelectrization\nhydroergotinine\nhydroextract\nhydroextractor\nhydroferricyanic\nhydroferrocyanate\nhydroferrocyanic\nhydrofluate\nhydrofluoboric\nhydrofluoric\nhydrofluorid\nhydrofluoride\nhydrofluosilicate\nhydrofluosilicic\nhydrofluozirconic\nhydrofoil\nhydroforming\nhydrofranklinite\nhydrofuge\nhydrogalvanic\nhydrogel\nhydrogen\nhydrogenase\nhydrogenate\nhydrogenation\nhydrogenator\nhydrogenic\nhydrogenide\nhydrogenium\nhydrogenization\nhydrogenize\nhydrogenolysis\nHydrogenomonas\nhydrogenous\nhydrogeological\nhydrogeology\nhydroglider\nhydrognosy\nhydrogode\nhydrograph\nhydrographer\nhydrographic\nhydrographical\nhydrographically\nhydrography\nhydrogymnastics\nhydrohalide\nhydrohematite\nhydrohemothorax\nhydroid\nHydroida\nHydroidea\nhydroidean\nhydroiodic\nhydrokinetic\nhydrokinetical\nhydrokinetics\nhydrol\nhydrolase\nhydrolatry\nHydrolea\nHydroleaceae\nhydrolize\nhydrologic\nhydrological\nhydrologically\nhydrologist\nhydrology\nhydrolysis\nhydrolyst\nhydrolyte\nhydrolytic\nhydrolyzable\nhydrolyzate\nhydrolyzation\nhydrolyze\nhydromagnesite\nhydromancer\nhydromancy\nhydromania\nhydromaniac\nhydromantic\nhydromantical\nhydromantically\nhydrome\nhydromechanical\nhydromechanics\nhydromedusa\nHydromedusae\nhydromedusan\nhydromedusoid\nhydromel\nhydromeningitis\nhydromeningocele\nhydrometallurgical\nhydrometallurgically\nhydrometallurgy\nhydrometamorphism\nhydrometeor\nhydrometeorological\nhydrometeorology\nhydrometer\nhydrometra\nhydrometric\nhydrometrical\nhydrometrid\nHydrometridae\nhydrometry\nhydromica\nhydromicaceous\nhydromonoplane\nhydromorph\nhydromorphic\nhydromorphous\nhydromorphy\nhydromotor\nhydromyelia\nhydromyelocele\nhydromyoma\nHydromys\nhydrone\nhydronegative\nhydronephelite\nhydronephrosis\nhydronephrotic\nhydronitric\nhydronitroprussic\nhydronitrous\nhydronium\nhydroparacoumaric\nHydroparastatae\nhydropath\nhydropathic\nhydropathical\nhydropathist\nhydropathy\nhydropericarditis\nhydropericardium\nhydroperiod\nhydroperitoneum\nhydroperitonitis\nhydroperoxide\nhydrophane\nhydrophanous\nhydrophid\nHydrophidae\nhydrophil\nhydrophile\nhydrophilic\nhydrophilid\nHydrophilidae\nhydrophilism\nhydrophilite\nhydrophiloid\nhydrophilous\nhydrophily\nHydrophinae\nHydrophis\nhydrophobe\nhydrophobia\nhydrophobic\nhydrophobical\nhydrophobist\nhydrophobophobia\nhydrophobous\nhydrophoby\nhydrophoid\nhydrophone\nHydrophora\nhydrophoran\nhydrophore\nhydrophoria\nhydrophorous\nhydrophthalmia\nhydrophthalmos\nhydrophthalmus\nhydrophylacium\nhydrophyll\nHydrophyllaceae\nhydrophyllaceous\nhydrophylliaceous\nhydrophyllium\nHydrophyllum\nhydrophysometra\nhydrophyte\nhydrophytic\nhydrophytism\nhydrophyton\nhydrophytous\nhydropic\nhydropical\nhydropically\nhydropigenous\nhydroplane\nhydroplanula\nhydroplatinocyanic\nhydroplutonic\nhydropneumatic\nhydropneumatosis\nhydropneumopericardium\nhydropneumothorax\nhydropolyp\nhydroponic\nhydroponicist\nhydroponics\nhydroponist\nhydropositive\nhydropot\nHydropotes\nhydropropulsion\nhydrops\nhydropsy\nHydropterideae\nhydroptic\nhydropult\nhydropultic\nhydroquinine\nhydroquinol\nhydroquinoline\nhydroquinone\nhydrorachis\nhydrorhiza\nhydrorhizal\nhydrorrhachis\nhydrorrhachitis\nhydrorrhea\nhydrorrhoea\nhydrorubber\nhydrosalpinx\nhydrosalt\nhydrosarcocele\nhydroscope\nhydroscopic\nhydroscopical\nhydroscopicity\nhydroscopist\nhydroselenic\nhydroselenide\nhydroselenuret\nhydroseparation\nhydrosilicate\nhydrosilicon\nhydrosol\nhydrosomal\nhydrosomatous\nhydrosome\nhydrosorbic\nhydrosphere\nhydrospire\nhydrospiric\nhydrostat\nhydrostatic\nhydrostatical\nhydrostatically\nhydrostatician\nhydrostatics\nhydrostome\nhydrosulphate\nhydrosulphide\nhydrosulphite\nhydrosulphocyanic\nhydrosulphurated\nhydrosulphuret\nhydrosulphureted\nhydrosulphuric\nhydrosulphurous\nhydrosulphuryl\nhydrotachymeter\nhydrotactic\nhydrotalcite\nhydrotasimeter\nhydrotaxis\nhydrotechnic\nhydrotechnical\nhydrotechnologist\nhydrotechny\nhydroterpene\nhydrotheca\nhydrothecal\nhydrotherapeutic\nhydrotherapeutics\nhydrotherapy\nhydrothermal\nhydrothoracic\nhydrothorax\nhydrotic\nhydrotical\nhydrotimeter\nhydrotimetric\nhydrotimetry\nhydrotomy\nhydrotropic\nhydrotropism\nhydroturbine\nhydrotype\nhydrous\nhydrovane\nhydroxamic\nhydroxamino\nhydroxide\nhydroximic\nhydroxy\nhydroxyacetic\nhydroxyanthraquinone\nhydroxybutyricacid\nhydroxyketone\nhydroxyl\nhydroxylactone\nhydroxylamine\nhydroxylate\nhydroxylation\nhydroxylic\nhydroxylization\nhydroxylize\nhydrozincite\nHydrozoa\nhydrozoal\nhydrozoan\nhydrozoic\nhydrozoon\nhydrula\nHydruntine\nHydrurus\nHydrus\nhydurilate\nhydurilic\nhyena\nhyenadog\nhyenanchin\nhyenic\nhyeniform\nhyenine\nhyenoid\nhyetal\nhyetograph\nhyetographic\nhyetographical\nhyetographically\nhyetography\nhyetological\nhyetology\nhyetometer\nhyetometrograph\nHygeia\nHygeian\nhygeiolatry\nhygeist\nhygeistic\nhygeology\nhygiantic\nhygiantics\nhygiastic\nhygiastics\nhygieist\nhygienal\nhygiene\nhygienic\nhygienical\nhygienically\nhygienics\nhygienist\nhygienization\nhygienize\nhygiologist\nhygiology\nhygric\nhygrine\nhygroblepharic\nhygrodeik\nhygroexpansivity\nhygrograph\nhygrology\nhygroma\nhygromatous\nhygrometer\nhygrometric\nhygrometrical\nhygrometrically\nhygrometry\nhygrophaneity\nhygrophanous\nhygrophilous\nhygrophobia\nhygrophthalmic\nhygrophyte\nhygrophytic\nhygroplasm\nhygroplasma\nhygroscope\nhygroscopic\nhygroscopical\nhygroscopically\nhygroscopicity\nhygroscopy\nhygrostat\nhygrostatics\nhygrostomia\nhygrothermal\nhygrothermograph\nhying\nhyke\nHyla\nhylactic\nhylactism\nhylarchic\nhylarchical\nhyle\nhyleg\nhylegiacal\nhylic\nhylicism\nhylicist\nHylidae\nhylism\nhylist\nHyllus\nHylobates\nhylobatian\nhylobatic\nhylobatine\nHylocereus\nHylocichla\nHylocomium\nHylodes\nhylogenesis\nhylogeny\nhyloid\nhylology\nhylomorphic\nhylomorphical\nhylomorphism\nhylomorphist\nhylomorphous\nHylomys\nhylopathism\nhylopathist\nhylopathy\nhylophagous\nhylotheism\nhylotheist\nhylotheistic\nhylotheistical\nhylotomous\nhylozoic\nhylozoism\nhylozoist\nhylozoistic\nhylozoistically\nhymen\nHymenaea\nHymenaeus\nHymenaic\nhymenal\nhymeneal\nhymeneally\nhymeneals\nhymenean\nhymenial\nhymenic\nhymenicolar\nhymeniferous\nhymeniophore\nhymenium\nHymenocallis\nHymenochaete\nHymenogaster\nHymenogastraceae\nhymenogeny\nhymenoid\nHymenolepis\nhymenomycetal\nhymenomycete\nHymenomycetes\nhymenomycetoid\nhymenomycetous\nhymenophore\nhymenophorum\nHymenophyllaceae\nhymenophyllaceous\nHymenophyllites\nHymenophyllum\nhymenopter\nHymenoptera\nhymenopteran\nhymenopterist\nhymenopterological\nhymenopterologist\nhymenopterology\nhymenopteron\nhymenopterous\nhymenotomy\nHymettian\nHymettic\nhymn\nhymnal\nhymnarium\nhymnary\nhymnbook\nhymner\nhymnic\nhymnist\nhymnless\nhymnlike\nhymnode\nhymnodical\nhymnodist\nhymnody\nhymnographer\nhymnography\nhymnologic\nhymnological\nhymnologically\nhymnologist\nhymnology\nhymnwise\nhynde\nhyne\nhyobranchial\nhyocholalic\nhyocholic\nhyoepiglottic\nhyoepiglottidean\nhyoglossal\nhyoglossus\nhyoglycocholic\nhyoid\nhyoidal\nhyoidan\nhyoideal\nhyoidean\nhyoides\nHyolithes\nhyolithid\nHyolithidae\nhyolithoid\nhyomandibula\nhyomandibular\nhyomental\nhyoplastral\nhyoplastron\nhyoscapular\nhyoscine\nhyoscyamine\nHyoscyamus\nhyosternal\nhyosternum\nhyostylic\nhyostyly\nhyothere\nHyotherium\nhyothyreoid\nhyothyroid\nhyp\nhypabyssal\nhypaethral\nhypaethron\nhypaethros\nhypaethrum\nhypalgesia\nhypalgia\nhypalgic\nhypallactic\nhypallage\nhypanthial\nhypanthium\nhypantrum\nHypapante\nhypapophysial\nhypapophysis\nhyparterial\nhypaspist\nhypate\nhypaton\nhypautomorphic\nhypaxial\nHypenantron\nhyper\nhyperabelian\nhyperabsorption\nhyperaccurate\nhyperacid\nhyperacidaminuria\nhyperacidity\nhyperacoustics\nhyperaction\nhyperactive\nhyperactivity\nhyperacuity\nhyperacusia\nhyperacusis\nhyperacute\nhyperacuteness\nhyperadenosis\nhyperadiposis\nhyperadiposity\nhyperadrenalemia\nhyperaeolism\nhyperalbuminosis\nhyperalgebra\nhyperalgesia\nhyperalgesic\nhyperalgesis\nhyperalgetic\nhyperalimentation\nhyperalkalinity\nhyperaltruism\nhyperaminoacidemia\nhyperanabolic\nhyperanarchy\nhyperangelical\nhyperaphia\nhyperaphic\nhyperapophyseal\nhyperapophysial\nhyperapophysis\nhyperarchaeological\nhyperarchepiscopal\nhyperazotemia\nhyperbarbarous\nhyperbatic\nhyperbatically\nhyperbaton\nhyperbola\nhyperbolaeon\nhyperbole\nhyperbolic\nhyperbolically\nhyperbolicly\nhyperbolism\nhyperbolize\nhyperboloid\nhyperboloidal\nhyperboreal\nHyperborean\nhyperborean\nhyperbrachycephal\nhyperbrachycephalic\nhyperbrachycephaly\nhyperbrachycranial\nhyperbrachyskelic\nhyperbranchia\nhyperbrutal\nhyperbulia\nhypercalcemia\nhypercarbamidemia\nhypercarbureted\nhypercarburetted\nhypercarnal\nhypercatalectic\nhypercatalexis\nhypercatharsis\nhypercathartic\nhypercathexis\nhypercenosis\nhyperchamaerrhine\nhyperchlorhydria\nhyperchloric\nhypercholesterinemia\nhypercholesterolemia\nhypercholia\nhypercivilization\nhypercivilized\nhyperclassical\nhyperclimax\nhypercoagulability\nhypercoagulable\nhypercomplex\nhypercomposite\nhyperconcentration\nhypercone\nhyperconfident\nhyperconformist\nhyperconscientious\nhyperconscientiousness\nhyperconscious\nhyperconsciousness\nhyperconservatism\nhyperconstitutional\nhypercoracoid\nhypercorrect\nhypercorrection\nhypercorrectness\nhypercosmic\nhypercreaturely\nhypercritic\nhypercritical\nhypercritically\nhypercriticism\nhypercriticize\nhypercryalgesia\nhypercube\nhypercyanotic\nhypercycle\nhypercylinder\nhyperdactyl\nhyperdactylia\nhyperdactyly\nhyperdeify\nhyperdelicacy\nhyperdelicate\nhyperdemocracy\nhyperdemocratic\nhyperdeterminant\nhyperdiabolical\nhyperdialectism\nhyperdiapason\nhyperdiapente\nhyperdiastole\nhyperdiatessaron\nhyperdiazeuxis\nhyperdicrotic\nhyperdicrotism\nhyperdicrotous\nhyperdimensional\nhyperdimensionality\nhyperdissyllable\nhyperdistention\nhyperditone\nhyperdivision\nhyperdolichocephal\nhyperdolichocephalic\nhyperdolichocephaly\nhyperdolichocranial\nhyperdoricism\nhyperdulia\nhyperdulic\nhyperdulical\nhyperelegant\nhyperelliptic\nhyperemesis\nhyperemetic\nhyperemia\nhyperemic\nhyperemotivity\nhyperemphasize\nhyperenthusiasm\nhypereosinophilia\nhyperephidrosis\nhyperequatorial\nhypererethism\nhyperessence\nhyperesthesia\nhyperesthetic\nhyperethical\nhypereuryprosopic\nhypereutectic\nhypereutectoid\nhyperexaltation\nhyperexcitability\nhyperexcitable\nhyperexcitement\nhyperexcursive\nhyperexophoria\nhyperextend\nhyperextension\nhyperfastidious\nhyperfederalist\nhyperfine\nhyperflexion\nhyperfocal\nhyperfunction\nhyperfunctional\nhyperfunctioning\nhypergalactia\nhypergamous\nhypergamy\nhypergenesis\nhypergenetic\nhypergeometric\nhypergeometrical\nhypergeometry\nhypergeusia\nhypergeustia\nhyperglycemia\nhyperglycemic\nhyperglycorrhachia\nhyperglycosuria\nhypergoddess\nhypergol\nhypergolic\nHypergon\nhypergrammatical\nhyperhedonia\nhyperhemoglobinemia\nhyperhilarious\nhyperhypocrisy\nHypericaceae\nhypericaceous\nHypericales\nhypericin\nhypericism\nHypericum\nhypericum\nhyperidealistic\nhyperideation\nhyperimmune\nhyperimmunity\nhyperimmunization\nhyperimmunize\nhyperingenuity\nhyperinosis\nhyperinotic\nhyperinsulinization\nhyperinsulinize\nhyperintellectual\nhyperintelligence\nhyperinvolution\nhyperirritability\nhyperirritable\nhyperisotonic\nhyperite\nhyperkeratosis\nhyperkinesia\nhyperkinesis\nhyperkinetic\nhyperlactation\nhyperleptoprosopic\nhyperleucocytosis\nhyperlipemia\nhyperlipoidemia\nhyperlithuria\nhyperlogical\nhyperlustrous\nhypermagical\nhypermakroskelic\nhypermedication\nhypermenorrhea\nhypermetabolism\nhypermetamorphic\nhypermetamorphism\nhypermetamorphosis\nhypermetamorphotic\nhypermetaphorical\nhypermetaphysical\nhypermetaplasia\nhypermeter\nhypermetric\nhypermetrical\nhypermetron\nhypermetrope\nhypermetropia\nhypermetropic\nhypermetropical\nhypermetropy\nhypermiraculous\nhypermixolydian\nhypermnesia\nhypermnesic\nhypermnesis\nhypermnestic\nhypermodest\nhypermonosyllable\nhypermoral\nhypermorph\nhypermorphism\nhypermorphosis\nhypermotile\nhypermotility\nhypermyotonia\nhypermyotrophy\nhypermyriorama\nhypermystical\nhypernatural\nhypernephroma\nhyperneuria\nhyperneurotic\nhypernic\nhypernitrogenous\nhypernomian\nhypernomic\nhypernormal\nhypernote\nhypernutrition\nHyperoartia\nhyperoartian\nhyperobtrusive\nhyperodontogeny\nHyperoodon\nhyperoon\nhyperope\nhyperopia\nhyperopic\nhyperorganic\nhyperorthognathic\nhyperorthognathous\nhyperorthognathy\nhyperosmia\nhyperosmic\nhyperostosis\nhyperostotic\nhyperothodox\nhyperothodoxy\nHyperotreta\nhyperotretan\nHyperotreti\nhyperotretous\nhyperoxidation\nhyperoxide\nhyperoxygenate\nhyperoxygenation\nhyperoxygenize\nhyperpanegyric\nhyperparasite\nhyperparasitic\nhyperparasitism\nhyperparasitize\nhyperparoxysm\nhyperpathetic\nhyperpatriotic\nhyperpencil\nhyperpepsinia\nhyperper\nhyperperistalsis\nhyperperistaltic\nhyperpersonal\nhyperphalangeal\nhyperphalangism\nhyperpharyngeal\nhyperphenomena\nhyperphoria\nhyperphoric\nhyperphosphorescence\nhyperphysical\nhyperphysically\nhyperphysics\nhyperpiesia\nhyperpiesis\nhyperpietic\nhyperpietist\nhyperpigmentation\nhyperpigmented\nhyperpinealism\nhyperpituitarism\nhyperplagiarism\nhyperplane\nhyperplasia\nhyperplasic\nhyperplastic\nhyperplatyrrhine\nhyperploid\nhyperploidy\nhyperpnea\nhyperpnoea\nhyperpolysyllabic\nhyperpredator\nhyperprism\nhyperproduction\nhyperprognathous\nhyperprophetical\nhyperprosexia\nhyperpulmonary\nhyperpure\nhyperpurist\nhyperpyramid\nhyperpyretic\nhyperpyrexia\nhyperpyrexial\nhyperquadric\nhyperrational\nhyperreactive\nhyperrealize\nhyperresonance\nhyperresonant\nhyperreverential\nhyperrhythmical\nhyperridiculous\nhyperritualism\nhypersacerdotal\nhypersaintly\nhypersalivation\nhypersceptical\nhyperscholastic\nhyperscrupulosity\nhypersecretion\nhypersensibility\nhypersensitive\nhypersensitiveness\nhypersensitivity\nhypersensitization\nhypersensitize\nhypersensual\nhypersensualism\nhypersensuous\nhypersentimental\nhypersolid\nhypersomnia\nhypersonic\nhypersophisticated\nhyperspace\nhyperspatial\nhyperspeculative\nhypersphere\nhyperspherical\nhyperspiritualizing\nhypersplenia\nhypersplenism\nhypersthene\nhypersthenia\nhypersthenic\nhypersthenite\nhyperstoic\nhyperstrophic\nhypersubtlety\nhypersuggestibility\nhypersuperlative\nhypersurface\nhypersusceptibility\nhypersusceptible\nhypersystole\nhypersystolic\nhypertechnical\nhypertelic\nhypertely\nhypertense\nhypertensin\nhypertension\nhypertensive\nhyperterrestrial\nhypertetrahedron\nhyperthermal\nhyperthermalgesia\nhyperthermesthesia\nhyperthermia\nhyperthermic\nhyperthermy\nhyperthesis\nhyperthetic\nhyperthetical\nhyperthyreosis\nhyperthyroid\nhyperthyroidism\nhyperthyroidization\nhyperthyroidize\nhypertonia\nhypertonic\nhypertonicity\nhypertonus\nhypertorrid\nhypertoxic\nhypertoxicity\nhypertragical\nhypertragically\nhypertranscendent\nhypertrichosis\nhypertridimensional\nhypertrophic\nhypertrophied\nhypertrophous\nhypertrophy\nhypertropia\nhypertropical\nhypertype\nhypertypic\nhypertypical\nhyperurbanism\nhyperuresis\nhypervascular\nhypervascularity\nhypervenosity\nhyperventilate\nhyperventilation\nhypervigilant\nhyperviscosity\nhypervitalization\nhypervitalize\nhypervitaminosis\nhypervolume\nhyperwrought\nhypesthesia\nhypesthesic\nhypethral\nhypha\nHyphaene\nhyphaeresis\nhyphal\nhyphedonia\nhyphema\nhyphen\nhyphenate\nhyphenated\nhyphenation\nhyphenic\nhyphenism\nhyphenization\nhyphenize\nhypho\nhyphodrome\nHyphomycetales\nhyphomycete\nHyphomycetes\nhyphomycetic\nhyphomycetous\nhyphomycosis\nhypidiomorphic\nhypidiomorphically\nhypinosis\nhypinotic\nHypnaceae\nhypnaceous\nhypnagogic\nhypnesthesis\nhypnesthetic\nhypnoanalysis\nhypnobate\nhypnocyst\nhypnody\nhypnoetic\nhypnogenesis\nhypnogenetic\nhypnoid\nhypnoidal\nhypnoidization\nhypnoidize\nhypnologic\nhypnological\nhypnologist\nhypnology\nhypnone\nhypnophobia\nhypnophobic\nhypnophoby\nhypnopompic\nHypnos\nhypnoses\nhypnosis\nhypnosperm\nhypnosporangium\nhypnospore\nhypnosporic\nhypnotherapy\nhypnotic\nhypnotically\nhypnotism\nhypnotist\nhypnotistic\nhypnotizability\nhypnotizable\nhypnotization\nhypnotize\nhypnotizer\nhypnotoid\nhypnotoxin\nHypnum\nhypo\nhypoacid\nhypoacidity\nhypoactive\nhypoactivity\nhypoadenia\nhypoadrenia\nhypoaeolian\nhypoalimentation\nhypoalkaline\nhypoalkalinity\nhypoaminoacidemia\nhypoantimonate\nhypoazoturia\nhypobasal\nhypobatholithic\nhypobenthonic\nhypobenthos\nhypoblast\nhypoblastic\nhypobole\nhypobranchial\nhypobranchiate\nhypobromite\nhypobromous\nhypobulia\nhypobulic\nhypocalcemia\nhypocarp\nhypocarpium\nhypocarpogean\nhypocatharsis\nhypocathartic\nhypocathexis\nhypocaust\nhypocentrum\nhypocephalus\nHypochaeris\nhypochil\nhypochilium\nhypochlorhydria\nhypochlorhydric\nhypochloric\nhypochlorite\nhypochlorous\nhypochloruria\nHypochnaceae\nhypochnose\nHypochnus\nhypochondria\nhypochondriac\nhypochondriacal\nhypochondriacally\nhypochondriacism\nhypochondrial\nhypochondriasis\nhypochondriast\nhypochondrium\nhypochondry\nhypochordal\nhypochromia\nhypochrosis\nhypochylia\nhypocist\nhypocleidian\nhypocleidium\nhypocoelom\nhypocondylar\nhypocone\nhypoconid\nhypoconule\nhypoconulid\nhypocoracoid\nhypocorism\nhypocoristic\nhypocoristical\nhypocoristically\nhypocotyl\nhypocotyleal\nhypocotyledonary\nhypocotyledonous\nhypocotylous\nhypocrater\nhypocrateriform\nhypocraterimorphous\nHypocreaceae\nhypocreaceous\nHypocreales\nhypocrisis\nhypocrisy\nhypocrital\nhypocrite\nhypocritic\nhypocritical\nhypocritically\nhypocrize\nhypocrystalline\nhypocycloid\nhypocycloidal\nhypocystotomy\nhypocytosis\nhypodactylum\nhypoderm\nhypoderma\nhypodermal\nhypodermatic\nhypodermatically\nhypodermatoclysis\nhypodermatomy\nHypodermella\nhypodermic\nhypodermically\nhypodermis\nhypodermoclysis\nhypodermosis\nhypodermous\nhypodiapason\nhypodiapente\nhypodiastole\nhypodiatessaron\nhypodiazeuxis\nhypodicrotic\nhypodicrotous\nhypoditone\nhypodorian\nhypodynamia\nhypodynamic\nhypoeliminator\nhypoendocrinism\nhypoeosinophilia\nhypoeutectic\nhypoeutectoid\nhypofunction\nhypogastric\nhypogastrium\nhypogastrocele\nhypogeal\nhypogean\nhypogee\nhypogeic\nhypogeiody\nhypogene\nhypogenesis\nhypogenetic\nhypogenic\nhypogenous\nhypogeocarpous\nhypogeous\nhypogeum\nhypogeusia\nhypoglobulia\nhypoglossal\nhypoglossitis\nhypoglossus\nhypoglottis\nhypoglycemia\nhypoglycemic\nhypognathism\nhypognathous\nhypogonation\nhypogynic\nhypogynium\nhypogynous\nhypogyny\nhypohalous\nhypohemia\nhypohidrosis\nHypohippus\nhypohyal\nhypohyaline\nhypoid\nhypoiodite\nhypoiodous\nhypoionian\nhypoischium\nhypoisotonic\nhypokeimenometry\nhypokinesia\nhypokinesis\nhypokinetic\nhypokoristikon\nhypolemniscus\nhypoleptically\nhypoleucocytosis\nhypolimnion\nhypolocrian\nhypolydian\nhypomania\nhypomanic\nhypomelancholia\nhypomeral\nhypomere\nhypomeron\nhypometropia\nhypomixolydian\nhypomnematic\nhypomnesis\nhypomochlion\nhypomorph\nhypomotility\nhypomyotonia\nhyponastic\nhyponastically\nhyponasty\nhyponeuria\nhyponitric\nhyponitrite\nhyponitrous\nhyponoetic\nhyponoia\nhyponome\nhyponomic\nhyponychial\nhyponychium\nhyponym\nhyponymic\nhyponymous\nHypoparia\nhypopepsia\nhypopepsinia\nhypopepsy\nhypopetalous\nhypopetaly\nhypophalangism\nhypophamin\nhypophamine\nhypophare\nhypopharyngeal\nhypopharynx\nhypophloeodal\nhypophloeodic\nhypophloeous\nhypophonic\nhypophonous\nhypophora\nhypophoria\nhypophosphate\nhypophosphite\nhypophosphoric\nhypophosphorous\nhypophrenia\nhypophrenic\nhypophrenosis\nhypophrygian\nhypophyge\nhypophyll\nhypophyllium\nhypophyllous\nhypophyllum\nhypophyse\nhypophyseal\nhypophysectomize\nhypophysectomy\nhypophyseoprivic\nhypophyseoprivous\nhypophysial\nhypophysical\nhypophysics\nhypophysis\nhypopial\nhypopinealism\nhypopituitarism\nHypopitys\nhypoplankton\nhypoplanktonic\nhypoplasia\nhypoplastic\nhypoplastral\nhypoplastron\nhypoplasty\nhypoplasy\nhypoploid\nhypoploidy\nhypopodium\nhypopraxia\nhypoprosexia\nhypopselaphesia\nhypopteral\nhypopteron\nhypoptilar\nhypoptilum\nhypoptosis\nhypoptyalism\nhypopus\nhypopygial\nhypopygidium\nhypopygium\nhypopyon\nhyporadial\nhyporadiolus\nhyporadius\nhyporchema\nhyporchematic\nhyporcheme\nhyporchesis\nhyporhachidian\nhyporhachis\nhyporhined\nhyporit\nhyporrhythmic\nhyposcenium\nhyposcleral\nhyposcope\nhyposecretion\nhyposensitization\nhyposensitize\nhyposkeletal\nhyposmia\nhypospadiac\nhypospadias\nhyposphene\nhypospray\nhypostase\nhypostasis\nhypostasization\nhypostasize\nhypostasy\nhypostatic\nhypostatical\nhypostatically\nhypostatization\nhypostatize\nhyposternal\nhyposternum\nhyposthenia\nhyposthenic\nhyposthenuria\nhypostigma\nhypostilbite\nhypostoma\nHypostomata\nhypostomatic\nhypostomatous\nhypostome\nhypostomial\nHypostomides\nhypostomous\nhypostrophe\nhypostyle\nhypostypsis\nhypostyptic\nhyposulphite\nhyposulphurous\nhyposuprarenalism\nhyposyllogistic\nhyposynaphe\nhyposynergia\nhyposystole\nhypotactic\nhypotarsal\nhypotarsus\nhypotaxia\nhypotaxic\nhypotaxis\nhypotension\nhypotensive\nhypotensor\nhypotenusal\nhypotenuse\nhypothalamic\nhypothalamus\nhypothalline\nhypothallus\nhypothec\nhypotheca\nhypothecal\nhypothecary\nhypothecate\nhypothecation\nhypothecative\nhypothecator\nhypothecatory\nhypothecial\nhypothecium\nhypothenal\nhypothenar\nHypotheria\nhypothermal\nhypothermia\nhypothermic\nhypothermy\nhypotheses\nhypothesis\nhypothesist\nhypothesize\nhypothesizer\nhypothetic\nhypothetical\nhypothetically\nhypothetics\nhypothetist\nhypothetize\nhypothetizer\nhypothyreosis\nhypothyroid\nhypothyroidism\nhypotonia\nhypotonic\nhypotonicity\nhypotonus\nhypotony\nhypotoxic\nhypotoxicity\nhypotrachelium\nHypotremata\nhypotrich\nHypotricha\nHypotrichida\nhypotrichosis\nhypotrichous\nhypotrochanteric\nhypotrochoid\nhypotrochoidal\nhypotrophic\nhypotrophy\nhypotympanic\nhypotypic\nhypotypical\nhypotyposis\nhypovalve\nhypovanadate\nhypovanadic\nhypovanadious\nhypovanadous\nhypovitaminosis\nhypoxanthic\nhypoxanthine\nHypoxis\nHypoxylon\nhypozeugma\nhypozeuxis\nHypozoa\nhypozoan\nhypozoic\nhyppish\nhypsibrachycephalic\nhypsibrachycephalism\nhypsibrachycephaly\nhypsicephalic\nhypsicephaly\nhypsidolichocephalic\nhypsidolichocephalism\nhypsidolichocephaly\nhypsiliform\nhypsiloid\nHypsilophodon\nhypsilophodont\nhypsilophodontid\nHypsilophodontidae\nhypsilophodontoid\nHypsiprymninae\nHypsiprymnodontinae\nHypsiprymnus\nHypsistarian\nhypsistenocephalic\nhypsistenocephalism\nhypsistenocephaly\nhypsobathymetric\nhypsocephalous\nhypsochrome\nhypsochromic\nhypsochromy\nhypsodont\nhypsodontism\nhypsodonty\nhypsographic\nhypsographical\nhypsography\nhypsoisotherm\nhypsometer\nhypsometric\nhypsometrical\nhypsometrically\nhypsometrist\nhypsometry\nhypsophobia\nhypsophonous\nhypsophyll\nhypsophyllar\nhypsophyllary\nhypsophyllous\nhypsophyllum\nhypsothermometer\nhypural\nhyraces\nhyraceum\nHyrachyus\nhyracid\nHyracidae\nhyraciform\nHyracina\nHyracodon\nhyracodont\nhyracodontid\nHyracodontidae\nhyracodontoid\nhyracoid\nHyracoidea\nhyracoidean\nhyracothere\nhyracotherian\nHyracotheriinae\nHyracotherium\nhyrax\nHyrcan\nHyrcanian\nhyson\nhyssop\nHyssopus\nhystazarin\nhysteralgia\nhysteralgic\nhysteranthous\nhysterectomy\nhysterelcosis\nhysteresial\nhysteresis\nhysteretic\nhysteretically\nhysteria\nhysteriac\nHysteriales\nhysteric\nhysterical\nhysterically\nhystericky\nhysterics\nhysteriform\nhysterioid\nHysterocarpus\nhysterocatalepsy\nhysterocele\nhysterocleisis\nhysterocrystalline\nhysterocystic\nhysterodynia\nhysterogen\nhysterogenetic\nhysterogenic\nhysterogenous\nhysterogeny\nhysteroid\nhysterolaparotomy\nhysterolith\nhysterolithiasis\nhysterology\nhysterolysis\nhysteromania\nhysterometer\nhysterometry\nhysteromorphous\nhysteromyoma\nhysteromyomectomy\nhysteron\nhysteroneurasthenia\nhysteropathy\nhysteropexia\nhysteropexy\nhysterophore\nHysterophyta\nhysterophytal\nhysterophyte\nhysteroproterize\nhysteroptosia\nhysteroptosis\nhysterorrhaphy\nhysterorrhexis\nhysteroscope\nhysterosis\nhysterotome\nhysterotomy\nhysterotraumatism\nhystriciasis\nhystricid\nHystricidae\nHystricinae\nhystricine\nhystricism\nhystricismus\nhystricoid\nhystricomorph\nHystricomorpha\nhystricomorphic\nhystricomorphous\nHystrix\nI\ni\nIacchic\nIacchos\nIacchus\nIachimo\niamatology\niamb\nIambe\niambelegus\niambi\niambic\niambically\niambist\niambize\niambographer\niambus\nIan\nIanthina\nianthine\nianthinite\nIanus\niao\nIapetus\nIapyges\nIapygian\nIapygii\niatraliptic\niatraliptics\niatric\niatrical\niatrochemic\niatrochemical\niatrochemist\niatrochemistry\niatrological\niatrology\niatromathematical\niatromathematician\niatromathematics\niatromechanical\niatromechanist\niatrophysical\niatrophysicist\niatrophysics\niatrotechnics\niba\nIbad\nIbadite\nIban\nIbanag\nIberes\nIberi\nIberia\nIberian\nIberic\nIberis\nIberism\niberite\nibex\nibices\nibid\nIbididae\nIbidinae\nibidine\nIbidium\nIbilao\nibis\nibisbill\nIbo\nibolium\nibota\nIbsenian\nIbsenic\nIbsenish\nIbsenism\nIbsenite\nIbycter\nIbycus\nIcacinaceae\nicacinaceous\nicaco\nIcacorea\nIcaria\nIcarian\nIcarianism\nIcarus\nice\niceberg\niceblink\niceboat\nicebone\nicebound\nicebox\nicebreaker\nicecap\nicecraft\niced\nicefall\nicefish\nicehouse\nIceland\niceland\nIcelander\nIcelandian\nIcelandic\niceleaf\niceless\nIcelidae\nicelike\niceman\nIceni\nicequake\niceroot\nIcerya\nicework\nich\nIchneumia\nichneumon\nichneumoned\nIchneumones\nichneumonid\nIchneumonidae\nichneumonidan\nIchneumonides\nichneumoniform\nichneumonized\nichneumonoid\nIchneumonoidea\nichneumonology\nichneumous\nichneutic\nichnite\nichnographic\nichnographical\nichnographically\nichnography\nichnolite\nichnolithology\nichnolitic\nichnological\nichnology\nichnomancy\nicho\nichoglan\nichor\nichorous\nichorrhea\nichorrhemia\nichthulin\nichthulinic\nichthus\nichthyal\nichthyic\nichthyism\nichthyismus\nichthyization\nichthyized\nichthyobatrachian\nIchthyocephali\nichthyocephalous\nichthyocol\nichthyocolla\nichthyocoprolite\nIchthyodea\nIchthyodectidae\nichthyodian\nichthyodont\nichthyodorulite\nichthyofauna\nichthyoform\nichthyographer\nichthyographia\nichthyographic\nichthyography\nichthyoid\nichthyoidal\nIchthyoidea\nIchthyol\nichthyolatrous\nichthyolatry\nichthyolite\nichthyolitic\nichthyologic\nichthyological\nichthyologically\nichthyologist\nichthyology\nichthyomancy\nichthyomantic\nIchthyomorpha\nichthyomorphic\nichthyomorphous\nichthyonomy\nichthyopaleontology\nichthyophagan\nichthyophagi\nichthyophagian\nichthyophagist\nichthyophagize\nichthyophagous\nichthyophagy\nichthyophile\nichthyophobia\nichthyophthalmite\nichthyophthiriasis\nichthyopolism\nichthyopolist\nichthyopsid\nIchthyopsida\nichthyopsidan\nIchthyopterygia\nichthyopterygian\nichthyopterygium\nIchthyornis\nIchthyornithes\nichthyornithic\nIchthyornithidae\nIchthyornithiformes\nichthyornithoid\nichthyosaur\nIchthyosauria\nichthyosaurian\nichthyosaurid\nIchthyosauridae\nichthyosauroid\nIchthyosaurus\nichthyosis\nichthyosism\nichthyotic\nIchthyotomi\nichthyotomist\nichthyotomous\nichthyotomy\nichthyotoxin\nichthyotoxism\nichthytaxidermy\nichu\nicica\nicicle\nicicled\nicily\niciness\nicing\nicon\nIconian\niconic\niconical\niconism\niconoclasm\niconoclast\niconoclastic\niconoclastically\niconoclasticism\niconodule\niconodulic\niconodulist\niconoduly\niconograph\niconographer\niconographic\niconographical\niconographist\niconography\niconolater\niconolatrous\niconolatry\niconological\niconologist\niconology\niconomachal\niconomachist\niconomachy\niconomania\niconomatic\niconomatically\niconomaticism\niconomatography\niconometer\niconometric\niconometrical\niconometrically\niconometry\niconophile\niconophilism\niconophilist\niconophily\niconoplast\niconoscope\niconostas\niconostasion\niconostasis\niconotype\nicosahedral\nIcosandria\nicosasemic\nicosian\nicositetrahedron\nicosteid\nIcosteidae\nicosteine\nIcosteus\nicotype\nicteric\nicterical\nIcteridae\nicterine\nicteritious\nicterode\nicterogenetic\nicterogenic\nicterogenous\nicterohematuria\nicteroid\nicterus\nictic\nIctonyx\nictuate\nictus\nicy\nid\nIda\nIdaean\nIdaho\nIdahoan\nIdaic\nidalia\nIdalian\nidant\niddat\nIddio\nide\nidea\nideaed\nideaful\nideagenous\nideal\nidealess\nidealism\nidealist\nidealistic\nidealistical\nidealistically\nideality\nidealization\nidealize\nidealizer\nidealless\nideally\nidealness\nideamonger\nIdean\nideate\nideation\nideational\nideationally\nideative\nideist\nidempotent\nidentic\nidentical\nidenticalism\nidentically\nidenticalness\nidentifiable\nidentifiableness\nidentification\nidentifier\nidentify\nidentism\nidentity\nideogenetic\nideogenical\nideogenous\nideogeny\nideoglyph\nideogram\nideogrammic\nideograph\nideographic\nideographical\nideographically\nideography\nideolatry\nideologic\nideological\nideologically\nideologist\nideologize\nideologue\nideology\nideomotion\nideomotor\nideophone\nideophonetics\nideophonous\nideoplastia\nideoplastic\nideoplastics\nideoplasty\nideopraxist\nides\nidgah\nidiasm\nidic\nidiobiology\nidioblast\nidioblastic\nidiochromatic\nidiochromatin\nidiochromosome\nidiocrasis\nidiocrasy\nidiocratic\nidiocratical\nidiocy\nidiocyclophanous\nidioelectric\nidioelectrical\nIdiogastra\nidiogenesis\nidiogenetic\nidiogenous\nidioglossia\nidioglottic\nidiograph\nidiographic\nidiographical\nidiohypnotism\nidiolalia\nidiolatry\nidiologism\nidiolysin\nidiom\nidiomatic\nidiomatical\nidiomatically\nidiomaticalness\nidiomelon\nidiometer\nidiomography\nidiomology\nidiomorphic\nidiomorphically\nidiomorphism\nidiomorphous\nidiomuscular\nidiopathetic\nidiopathic\nidiopathical\nidiopathically\nidiopathy\nidiophanism\nidiophanous\nidiophonic\nidioplasm\nidioplasmatic\nidioplasmic\nidiopsychological\nidiopsychology\nidioreflex\nidiorepulsive\nidioretinal\nidiorrhythmic\nIdiosepiidae\nIdiosepion\nidiosome\nidiospasm\nidiospastic\nidiostatic\nidiosyncrasy\nidiosyncratic\nidiosyncratical\nidiosyncratically\nidiot\nidiotcy\nidiothalamous\nidiothermous\nidiothermy\nidiotic\nidiotical\nidiotically\nidioticalness\nidioticon\nidiotish\nidiotism\nidiotize\nidiotropian\nidiotry\nidiotype\nidiotypic\nIdism\nIdist\nIdistic\nidite\niditol\nidle\nidleful\nidleheaded\nidlehood\nidleman\nidlement\nidleness\nidler\nidleset\nidleship\nidlety\nidlish\nidly\nIdo\nidocrase\nIdoism\nIdoist\nIdoistic\nidol\nidola\nidolaster\nidolater\nidolatress\nidolatric\nidolatrize\nidolatrizer\nidolatrous\nidolatrously\nidolatrousness\nidolatry\nidolify\nidolism\nidolist\nidolistic\nidolization\nidolize\nidolizer\nidoloclast\nidoloclastic\nidolodulia\nidolographical\nidololatrical\nidololatry\nidolomancy\nidolomania\nidolothyte\nidolothytic\nidolous\nidolum\nIdomeneus\nidoneal\nidoneity\nidoneous\nidoneousness\nidorgan\nidosaccharic\nidose\nIdotea\nIdoteidae\nIdothea\nIdotheidae\nidrialin\nidrialine\nidrialite\nIdrisid\nIdrisite\nidryl\nIdumaean\nidyl\nidyler\nidylism\nidylist\nidylize\nidyllian\nidyllic\nidyllical\nidyllically\nidyllicism\nie\nIerne\nif\nife\niffy\nIfugao\nIgara\nIgbira\nIgdyr\nigelstromite\nigloo\nIglulirmiut\nignatia\nIgnatian\nIgnatianist\nIgnatius\nignavia\nigneoaqueous\nigneous\nignescent\nignicolist\nigniferous\nigniferousness\nigniform\nignifuge\nignify\nignigenous\nignipotent\nignipuncture\nignitability\nignite\nigniter\nignitibility\nignitible\nignition\nignitive\nignitor\nignitron\nignivomous\nignivomousness\nignobility\nignoble\nignobleness\nignoblesse\nignobly\nignominious\nignominiously\nignominiousness\nignominy\nignorable\nignoramus\nignorance\nignorant\nIgnorantine\nignorantism\nignorantist\nignorantly\nignorantness\nignoration\nignore\nignorement\nignorer\nignote\nIgorot\niguana\nIguania\niguanian\niguanid\nIguanidae\niguaniform\nIguanodon\niguanodont\nIguanodontia\nIguanodontidae\niguanodontoid\nIguanodontoidea\niguanoid\nIguvine\nihi\nIhlat\nihleite\nihram\niiwi\nijma\nIjo\nijolite\nIjore\nijussite\nikat\nIke\nikey\nikeyness\nIkhwan\nikona\nikra\nIla\nileac\nileectomy\nileitis\nileocaecal\nileocaecum\nileocolic\nileocolitis\nileocolostomy\nileocolotomy\nileon\nileosigmoidostomy\nileostomy\nileotomy\nilesite\nileum\nileus\nilex\nilia\nIliac\niliac\niliacus\nIliad\nIliadic\nIliadist\nIliadize\niliahi\nilial\nIlian\niliau\nIlicaceae\nilicaceous\nilicic\nilicin\nilima\niliocaudal\niliocaudalis\niliococcygeal\niliococcygeus\niliococcygian\niliocostal\niliocostalis\niliodorsal\niliofemoral\niliohypogastric\nilioinguinal\nilioischiac\nilioischiatic\niliolumbar\niliopectineal\niliopelvic\nilioperoneal\niliopsoas\niliopsoatic\niliopubic\niliosacral\niliosciatic\nilioscrotal\niliospinal\niliotibial\niliotrochanteric\nIlissus\nilium\nilk\nilka\nilkane\nill\nillaborate\nillachrymable\nillachrymableness\nIllaenus\nIllano\nIllanun\nillapsable\nillapse\nillapsive\nillaqueate\nillaqueation\nillation\nillative\nillatively\nillaudable\nillaudably\nillaudation\nillaudatory\nIllecebraceae\nillecebrous\nilleck\nillegal\nillegality\nillegalize\nillegally\nillegalness\nillegibility\nillegible\nillegibleness\nillegibly\nillegitimacy\nillegitimate\nillegitimately\nillegitimateness\nillegitimation\nillegitimatize\nilleism\nilleist\nilless\nillfare\nillguide\nilliberal\nilliberalism\nilliberality\nilliberalize\nilliberally\nilliberalness\nillicit\nillicitly\nillicitness\nIllicium\nillimitability\nillimitable\nillimitableness\nillimitably\nillimitate\nillimitation\nillimited\nillimitedly\nillimitedness\nillinition\nillinium\nIllinoian\nIllinois\nIllinoisan\nIllinoisian\nIllipe\nillipene\nilliquation\nilliquid\nilliquidity\nilliquidly\nillish\nillision\nilliteracy\nilliteral\nilliterate\nilliterately\nilliterateness\nilliterature\nillium\nillness\nillocal\nillocality\nillocally\nillogic\nillogical\nillogicality\nillogically\nillogicalness\nillogician\nillogicity\nIlloricata\nilloricate\nilloricated\nilloyal\nilloyalty\nillth\nillucidate\nillucidation\nillucidative\nillude\nilludedly\nilluder\nillume\nillumer\nilluminability\nilluminable\nilluminance\nilluminant\nilluminate\nilluminated\nilluminati\nilluminating\nilluminatingly\nillumination\nilluminational\nilluminatism\nilluminatist\nilluminative\nilluminato\nilluminator\nilluminatory\nilluminatus\nillumine\nilluminee\nilluminer\nIlluminism\nilluminist\nIlluministic\nIlluminize\nilluminometer\nilluminous\nillupi\nillure\nillurement\nillusible\nillusion\nillusionable\nillusional\nillusionary\nillusioned\nillusionism\nillusionist\nillusionistic\nillusive\nillusively\nillusiveness\nillusor\nillusorily\nillusoriness\nillusory\nillustrable\nillustratable\nillustrate\nillustration\nillustrational\nillustrative\nillustratively\nillustrator\nillustratory\nillustratress\nillustre\nillustricity\nillustrious\nillustriously\nillustriousness\nillutate\nillutation\nilluvial\nilluviate\nilluviation\nilly\nIllyrian\nIllyric\nilmenite\nilmenitite\nilmenorutile\nIlocano\nIlokano\nIloko\nIlongot\nilot\nIlpirra\nilvaite\nIlya\nIlysanthes\nIlysia\nIlysiidae\nilysioid\nIma\nimage\nimageable\nimageless\nimager\nimagerial\nimagerially\nimagery\nimaginability\nimaginable\nimaginableness\nimaginably\nimaginal\nimaginant\nimaginarily\nimaginariness\nimaginary\nimaginate\nimagination\nimaginational\nimaginationalism\nimaginative\nimaginatively\nimaginativeness\nimaginator\nimagine\nimaginer\nimagines\nimaginist\nimaginous\nimagism\nimagist\nimagistic\nimago\nimam\nimamah\nimamate\nimambarah\nimamic\nimamship\nImantophyllum\nimaret\nimbalance\nimban\nimband\nimbannered\nimbarge\nimbark\nimbarn\nimbased\nimbastardize\nimbat\nimbauba\nimbe\nimbecile\nimbecilely\nimbecilic\nimbecilitate\nimbecility\nimbed\nimbellious\nimber\nimbibe\nimbiber\nimbibition\nimbibitional\nimbibitory\nimbirussu\nimbitter\nimbitterment\nimbolish\nimbondo\nimbonity\nimbordure\nimborsation\nimbosom\nimbower\nimbreathe\nimbreviate\nimbrex\nimbricate\nimbricated\nimbricately\nimbrication\nimbricative\nimbroglio\nimbrue\nimbruement\nimbrute\nimbrutement\nimbue\nimbuement\nimburse\nimbursement\nImer\nImerina\nImeritian\nimi\nimidazole\nimidazolyl\nimide\nimidic\nimidogen\niminazole\nimine\nimino\niminohydrin\nimitability\nimitable\nimitableness\nimitancy\nimitant\nimitate\nimitatee\nimitation\nimitational\nimitationist\nimitative\nimitatively\nimitativeness\nimitator\nimitatorship\nimitatress\nimitatrix\nimmaculacy\nimmaculance\nimmaculate\nimmaculately\nimmaculateness\nimmalleable\nimmanacle\nimmanation\nimmane\nimmanely\nimmanence\nimmanency\nimmaneness\nimmanent\nimmanental\nimmanentism\nimmanentist\nimmanently\nImmanes\nimmanifest\nimmanifestness\nimmanity\nimmantle\nImmanuel\nimmarble\nimmarcescible\nimmarcescibly\nimmarcibleness\nimmarginate\nimmask\nimmatchable\nimmaterial\nimmaterialism\nimmaterialist\nimmateriality\nimmaterialize\nimmaterially\nimmaterialness\nimmaterials\nimmateriate\nimmatriculate\nimmatriculation\nimmature\nimmatured\nimmaturely\nimmatureness\nimmaturity\nimmeability\nimmeasurability\nimmeasurable\nimmeasurableness\nimmeasurably\nimmeasured\nimmechanical\nimmechanically\nimmediacy\nimmedial\nimmediate\nimmediately\nimmediateness\nimmediatism\nimmediatist\nimmedicable\nimmedicableness\nimmedicably\nimmelodious\nimmember\nimmemorable\nimmemorial\nimmemorially\nimmense\nimmensely\nimmenseness\nimmensity\nimmensive\nimmensurability\nimmensurable\nimmensurableness\nimmensurate\nimmerd\nimmerge\nimmergence\nimmergent\nimmerit\nimmerited\nimmeritorious\nimmeritoriously\nimmeritous\nimmerse\nimmersement\nimmersible\nimmersion\nimmersionism\nimmersionist\nimmersive\nimmethodic\nimmethodical\nimmethodically\nimmethodicalness\nimmethodize\nimmetrical\nimmetrically\nimmetricalness\nimmew\nimmi\nimmigrant\nimmigrate\nimmigration\nimmigrator\nimmigratory\nimminence\nimminency\nimminent\nimminently\nimminentness\nimmingle\nimminution\nimmiscibility\nimmiscible\nimmiscibly\nimmission\nimmit\nimmitigability\nimmitigable\nimmitigably\nimmix\nimmixable\nimmixture\nimmobile\nimmobility\nimmobilization\nimmobilize\nimmoderacy\nimmoderate\nimmoderately\nimmoderateness\nimmoderation\nimmodest\nimmodestly\nimmodesty\nimmodulated\nimmolate\nimmolation\nimmolator\nimmoment\nimmomentous\nimmonastered\nimmoral\nimmoralism\nimmoralist\nimmorality\nimmoralize\nimmorally\nimmorigerous\nimmorigerousness\nimmortability\nimmortable\nimmortal\nimmortalism\nimmortalist\nimmortality\nimmortalizable\nimmortalization\nimmortalize\nimmortalizer\nimmortally\nimmortalness\nimmortalship\nimmortelle\nimmortification\nimmortified\nimmotile\nimmotioned\nimmotive\nimmound\nimmovability\nimmovable\nimmovableness\nimmovably\nimmund\nimmundity\nimmune\nimmunist\nimmunity\nimmunization\nimmunize\nimmunochemistry\nimmunogen\nimmunogenetic\nimmunogenetics\nimmunogenic\nimmunogenically\nimmunogenicity\nimmunologic\nimmunological\nimmunologically\nimmunologist\nimmunology\nimmunoreaction\nimmunotoxin\nimmuration\nimmure\nimmurement\nimmusical\nimmusically\nimmutability\nimmutable\nimmutableness\nimmutably\nimmutation\nimmute\nimmutilate\nimmutual\nImogen\nImolinda\nimonium\nimp\nimpacability\nimpacable\nimpack\nimpackment\nimpact\nimpacted\nimpaction\nimpactionize\nimpactment\nimpactual\nimpages\nimpaint\nimpair\nimpairable\nimpairer\nimpairment\nimpala\nimpalace\nimpalatable\nimpale\nimpalement\nimpaler\nimpall\nimpalm\nimpalpability\nimpalpable\nimpalpably\nimpalsy\nimpaludism\nimpanate\nimpanation\nimpanator\nimpane\nimpanel\nimpanelment\nimpapase\nimpapyrate\nimpar\nimparadise\nimparalleled\nimparasitic\nimpardonable\nimpardonably\nimparidigitate\nimparipinnate\nimparisyllabic\nimparity\nimpark\nimparkation\nimparl\nimparlance\nimparsonee\nimpart\nimpartable\nimpartance\nimpartation\nimparter\nimpartial\nimpartialism\nimpartialist\nimpartiality\nimpartially\nimpartialness\nimpartibilibly\nimpartibility\nimpartible\nimpartibly\nimparticipable\nimpartite\nimpartive\nimpartivity\nimpartment\nimpassability\nimpassable\nimpassableness\nimpassably\nimpasse\nimpassibilibly\nimpassibility\nimpassible\nimpassibleness\nimpassion\nimpassionable\nimpassionate\nimpassionately\nimpassioned\nimpassionedly\nimpassionedness\nimpassionment\nimpassive\nimpassively\nimpassiveness\nimpassivity\nimpastation\nimpaste\nimpasto\nimpasture\nimpaternate\nimpatible\nimpatience\nimpatiency\nImpatiens\nimpatient\nImpatientaceae\nimpatientaceous\nimpatiently\nimpatientness\nimpatronize\nimpave\nimpavid\nimpavidity\nimpavidly\nimpawn\nimpayable\nimpeach\nimpeachability\nimpeachable\nimpeacher\nimpeachment\nimpearl\nimpeccability\nimpeccable\nimpeccably\nimpeccance\nimpeccancy\nimpeccant\nimpectinate\nimpecuniary\nimpecuniosity\nimpecunious\nimpecuniously\nimpecuniousness\nimpedance\nimpede\nimpeder\nimpedibility\nimpedible\nimpedient\nimpediment\nimpedimenta\nimpedimental\nimpedimentary\nimpeding\nimpedingly\nimpedite\nimpedition\nimpeditive\nimpedometer\nimpeevish\nimpel\nimpellent\nimpeller\nimpen\nimpend\nimpendence\nimpendency\nimpendent\nimpending\nimpenetrability\nimpenetrable\nimpenetrableness\nimpenetrably\nimpenetrate\nimpenetration\nimpenetrative\nimpenitence\nimpenitent\nimpenitently\nimpenitentness\nimpenitible\nimpenitibleness\nimpennate\nImpennes\nimpent\nimperance\nimperant\nImperata\nimperate\nimperation\nimperatival\nimperative\nimperatively\nimperativeness\nimperator\nimperatorial\nimperatorially\nimperatorian\nimperatorious\nimperatorship\nimperatory\nimperatrix\nimperceivable\nimperceivableness\nimperceivably\nimperceived\nimperceiverant\nimperceptibility\nimperceptible\nimperceptibleness\nimperceptibly\nimperception\nimperceptive\nimperceptiveness\nimperceptivity\nimpercipience\nimpercipient\nimperence\nimperent\nimperfect\nimperfected\nimperfectibility\nimperfectible\nimperfection\nimperfectious\nimperfective\nimperfectly\nimperfectness\nimperforable\nImperforata\nimperforate\nimperforated\nimperforation\nimperformable\nimperia\nimperial\nimperialin\nimperialine\nimperialism\nimperialist\nimperialistic\nimperialistically\nimperiality\nimperialization\nimperialize\nimperially\nimperialness\nimperialty\nimperil\nimperilment\nimperious\nimperiously\nimperiousness\nimperish\nimperishability\nimperishable\nimperishableness\nimperishably\nimperite\nimperium\nimpermanence\nimpermanency\nimpermanent\nimpermanently\nimpermeability\nimpermeabilization\nimpermeabilize\nimpermeable\nimpermeableness\nimpermeably\nimpermeated\nimpermeator\nimpermissible\nimpermutable\nimperscriptible\nimperscrutable\nimpersonable\nimpersonal\nimpersonality\nimpersonalization\nimpersonalize\nimpersonally\nimpersonate\nimpersonation\nimpersonative\nimpersonator\nimpersonatress\nimpersonatrix\nimpersonification\nimpersonify\nimpersonization\nimpersonize\nimperspicuity\nimperspicuous\nimperspirability\nimperspirable\nimpersuadable\nimpersuadableness\nimpersuasibility\nimpersuasible\nimpersuasibleness\nimpersuasibly\nimpertinacy\nimpertinence\nimpertinency\nimpertinent\nimpertinently\nimpertinentness\nimpertransible\nimperturbability\nimperturbable\nimperturbableness\nimperturbably\nimperturbation\nimperturbed\nimperverse\nimpervertible\nimpervestigable\nimperviability\nimperviable\nimperviableness\nimpervial\nimpervious\nimperviously\nimperviousness\nimpest\nimpestation\nimpester\nimpeticos\nimpetiginous\nimpetigo\nimpetition\nimpetrate\nimpetration\nimpetrative\nimpetrator\nimpetratory\nimpetre\nimpetulant\nimpetulantly\nimpetuosity\nimpetuous\nimpetuously\nimpetuousness\nimpetus\nImpeyan\nimphee\nimpi\nimpicture\nimpierceable\nimpiety\nimpignorate\nimpignoration\nimpinge\nimpingement\nimpingence\nimpingent\nimpinger\nimpinguate\nimpious\nimpiously\nimpiousness\nimpish\nimpishly\nimpishness\nimpiteous\nimpitiably\nimplacability\nimplacable\nimplacableness\nimplacably\nimplacement\nimplacental\nImplacentalia\nimplacentate\nimplant\nimplantation\nimplanter\nimplastic\nimplasticity\nimplate\nimplausibility\nimplausible\nimplausibleness\nimplausibly\nimpleach\nimplead\nimpleadable\nimpleader\nimpledge\nimplement\nimplemental\nimplementation\nimplementiferous\nimplete\nimpletion\nimpletive\nimplex\nimpliable\nimplial\nimplicant\nimplicate\nimplicately\nimplicateness\nimplication\nimplicational\nimplicative\nimplicatively\nimplicatory\nimplicit\nimplicitly\nimplicitness\nimpliedly\nimpliedness\nimpling\nimplode\nimplodent\nimplorable\nimploration\nimplorator\nimploratory\nimplore\nimplorer\nimploring\nimploringly\nimploringness\nimplosion\nimplosive\nimplosively\nimplume\nimplumed\nimplunge\nimpluvium\nimply\nimpocket\nimpofo\nimpoison\nimpoisoner\nimpolarizable\nimpolicy\nimpolished\nimpolite\nimpolitely\nimpoliteness\nimpolitic\nimpolitical\nimpolitically\nimpoliticalness\nimpoliticly\nimpoliticness\nimpollute\nimponderabilia\nimponderability\nimponderable\nimponderableness\nimponderably\nimponderous\nimpone\nimponent\nimpoor\nimpopular\nimpopularly\nimporosity\nimporous\nimport\nimportability\nimportable\nimportableness\nimportably\nimportance\nimportancy\nimportant\nimportantly\nimportation\nimporter\nimportless\nimportment\nimportraiture\nimportray\nimportunacy\nimportunance\nimportunate\nimportunately\nimportunateness\nimportunator\nimportune\nimportunely\nimportunement\nimportuner\nimportunity\nimposable\nimposableness\nimposal\nimpose\nimposement\nimposer\nimposing\nimposingly\nimposingness\nimposition\nimpositional\nimpositive\nimpossibilification\nimpossibilism\nimpossibilist\nimpossibilitate\nimpossibility\nimpossible\nimpossibleness\nimpossibly\nimpost\nimposter\nimposterous\nimpostor\nimpostorism\nimpostorship\nimpostress\nimpostrix\nimpostrous\nimpostumate\nimpostumation\nimpostume\nimposture\nimposturism\nimposturous\nimposure\nimpot\nimpotable\nimpotence\nimpotency\nimpotent\nimpotently\nimpotentness\nimpound\nimpoundable\nimpoundage\nimpounder\nimpoundment\nimpoverish\nimpoverisher\nimpoverishment\nimpracticability\nimpracticable\nimpracticableness\nimpracticably\nimpractical\nimpracticality\nimpracticalness\nimprecant\nimprecate\nimprecation\nimprecator\nimprecatorily\nimprecatory\nimprecise\nimprecisely\nimprecision\nimpredicability\nimpredicable\nimpreg\nimpregn\nimpregnability\nimpregnable\nimpregnableness\nimpregnably\nimpregnant\nimpregnate\nimpregnation\nimpregnative\nimpregnator\nimpregnatory\nimprejudice\nimpremeditate\nimpreparation\nimpresa\nimpresario\nimprescience\nimprescribable\nimprescriptibility\nimprescriptible\nimprescriptibly\nimprese\nimpress\nimpressable\nimpressedly\nimpresser\nimpressibility\nimpressible\nimpressibleness\nimpressibly\nimpression\nimpressionability\nimpressionable\nimpressionableness\nimpressionably\nimpressional\nimpressionalist\nimpressionality\nimpressionally\nimpressionary\nimpressionism\nimpressionist\nimpressionistic\nimpressionistically\nimpressionless\nimpressive\nimpressively\nimpressiveness\nimpressment\nimpressor\nimpressure\nimprest\nimprestable\nimpreventability\nimpreventable\nimprevisibility\nimprevisible\nimprevision\nimprimatur\nimprime\nimprimitive\nimprimitivity\nimprint\nimprinter\nimprison\nimprisonable\nimprisoner\nimprisonment\nimprobability\nimprobabilize\nimprobable\nimprobableness\nimprobably\nimprobation\nimprobative\nimprobatory\nimprobity\nimprocreant\nimprocurability\nimprocurable\nimproducible\nimproficience\nimproficiency\nimprogressive\nimprogressively\nimprogressiveness\nimprolificical\nimpromptitude\nimpromptu\nimpromptuary\nimpromptuist\nimproof\nimproper\nimproperation\nimproperly\nimproperness\nimpropriate\nimpropriation\nimpropriator\nimpropriatrix\nimpropriety\nimprovability\nimprovable\nimprovableness\nimprovably\nimprove\nimprovement\nimprover\nimprovership\nimprovidence\nimprovident\nimprovidentially\nimprovidently\nimproving\nimprovingly\nimprovisate\nimprovisation\nimprovisational\nimprovisator\nimprovisatorial\nimprovisatorially\nimprovisatorize\nimprovisatory\nimprovise\nimprovisedly\nimproviser\nimprovision\nimproviso\nimprovisor\nimprudence\nimprudency\nimprudent\nimprudential\nimprudently\nimprudentness\nimpship\nimpuberal\nimpuberate\nimpuberty\nimpubic\nimpudence\nimpudency\nimpudent\nimpudently\nimpudentness\nimpudicity\nimpugn\nimpugnability\nimpugnable\nimpugnation\nimpugner\nimpugnment\nimpuissance\nimpuissant\nimpulse\nimpulsion\nimpulsive\nimpulsively\nimpulsiveness\nimpulsivity\nimpulsory\nimpunctate\nimpunctual\nimpunctuality\nimpunely\nimpunible\nimpunibly\nimpunity\nimpure\nimpurely\nimpureness\nimpuritan\nimpuritanism\nimpurity\nimputability\nimputable\nimputableness\nimputably\nimputation\nimputative\nimputatively\nimputativeness\nimpute\nimputedly\nimputer\nimputrescence\nimputrescibility\nimputrescible\nimputrid\nimpy\nimshi\nimsonic\nimu\nin\ninability\ninabordable\ninabstinence\ninaccentuated\ninaccentuation\ninacceptable\ninaccessibility\ninaccessible\ninaccessibleness\ninaccessibly\ninaccordance\ninaccordancy\ninaccordant\ninaccordantly\ninaccuracy\ninaccurate\ninaccurately\ninaccurateness\ninachid\nInachidae\ninachoid\nInachus\ninacquaintance\ninacquiescent\ninactinic\ninaction\ninactionist\ninactivate\ninactivation\ninactive\ninactively\ninactiveness\ninactivity\ninactuate\ninactuation\ninadaptability\ninadaptable\ninadaptation\ninadaptive\ninadept\ninadequacy\ninadequate\ninadequately\ninadequateness\ninadequation\ninadequative\ninadequatively\ninadherent\ninadhesion\ninadhesive\ninadjustability\ninadjustable\ninadmissibility\ninadmissible\ninadmissibly\ninadventurous\ninadvertence\ninadvertency\ninadvertent\ninadvertently\ninadvisability\ninadvisable\ninadvisableness\ninadvisedly\ninaesthetic\ninaffability\ninaffable\ninaffectation\ninagglutinability\ninagglutinable\ninaggressive\ninagile\ninaidable\ninaja\ninalacrity\ninalienability\ninalienable\ninalienableness\ninalienably\ninalimental\ninalterability\ninalterable\ninalterableness\ninalterably\ninamissibility\ninamissible\ninamissibleness\ninamorata\ninamorate\ninamoration\ninamorato\ninamovability\ninamovable\ninane\ninanely\ninanga\ninangulate\ninanimadvertence\ninanimate\ninanimated\ninanimately\ninanimateness\ninanimation\ninanition\ninanity\ninantherate\ninapathy\ninapostate\ninapparent\ninappealable\ninappeasable\ninappellability\ninappellable\ninappendiculate\ninapperceptible\ninappertinent\ninappetence\ninappetency\ninappetent\ninappetible\ninapplicability\ninapplicable\ninapplicableness\ninapplicably\ninapplication\ninapposite\ninappositely\ninappositeness\ninappreciable\ninappreciably\ninappreciation\ninappreciative\ninappreciatively\ninappreciativeness\ninapprehensible\ninapprehension\ninapprehensive\ninapprehensiveness\ninapproachability\ninapproachable\ninapproachably\ninappropriable\ninappropriableness\ninappropriate\ninappropriately\ninappropriateness\ninapt\ninaptitude\ninaptly\ninaptness\ninaqueous\ninarable\ninarch\ninarculum\ninarguable\ninarguably\ninarm\ninarticulacy\nInarticulata\ninarticulate\ninarticulated\ninarticulately\ninarticulateness\ninarticulation\ninartificial\ninartificiality\ninartificially\ninartificialness\ninartistic\ninartistical\ninartisticality\ninartistically\ninasmuch\ninassimilable\ninassimilation\ninassuageable\ninattackable\ninattention\ninattentive\ninattentively\ninattentiveness\ninaudibility\ninaudible\ninaudibleness\ninaudibly\ninaugur\ninaugural\ninaugurate\ninauguration\ninaugurative\ninaugurator\ninauguratory\ninaugurer\ninaurate\ninauration\ninauspicious\ninauspiciously\ninauspiciousness\ninauthentic\ninauthenticity\ninauthoritative\ninauthoritativeness\ninaxon\ninbe\ninbeaming\ninbearing\ninbeing\ninbending\ninbent\ninbirth\ninblow\ninblowing\ninblown\ninboard\ninbond\ninborn\ninbound\ninbread\ninbreak\ninbreaking\ninbreathe\ninbreather\ninbred\ninbreed\ninbring\ninbringer\ninbuilt\ninburning\ninburnt\ninburst\ninby\nInca\nIncaic\nincalculability\nincalculable\nincalculableness\nincalculably\nincalescence\nincalescency\nincalescent\nincaliculate\nincalver\nincalving\nincameration\nIncan\nincandent\nincandesce\nincandescence\nincandescency\nincandescent\nincandescently\nincanous\nincantation\nincantational\nincantator\nincantatory\nincanton\nincapability\nincapable\nincapableness\nincapably\nincapacious\nincapaciousness\nincapacitate\nincapacitation\nincapacity\nincapsulate\nincapsulation\nincaptivate\nincarcerate\nincarceration\nincarcerator\nincardinate\nincardination\nIncarial\nincarmined\nincarn\nincarnadine\nincarnant\nincarnate\nincarnation\nincarnational\nincarnationist\nincarnative\nIncarvillea\nincase\nincasement\nincast\nincatenate\nincatenation\nincaution\nincautious\nincautiously\nincautiousness\nincavate\nincavated\nincavation\nincavern\nincedingly\nincelebrity\nincendiarism\nincendiary\nincendivity\nincensation\nincense\nincenseless\nincensement\nincensory\nincensurable\nincensurably\nincenter\nincentive\nincentively\nincentor\nincept\ninception\ninceptive\ninceptively\ninceptor\ninceration\nincertitude\nincessable\nincessably\nincessancy\nincessant\nincessantly\nincessantness\nincest\nincestuous\nincestuously\nincestuousness\ninch\ninched\ninchmeal\ninchoacy\ninchoant\ninchoate\ninchoately\ninchoateness\ninchoation\ninchoative\ninchpin\ninchworm\nincide\nincidence\nincident\nincidental\nincidentalist\nincidentally\nincidentalness\nincidentless\nincidently\nincinerable\nincinerate\nincineration\nincinerator\nincipience\nincipient\nincipiently\nincircumscription\nincircumspect\nincircumspection\nincircumspectly\nincircumspectness\nincisal\nincise\nincisely\nincisiform\nincision\nincisive\nincisively\nincisiveness\nincisor\nincisorial\nincisory\nincisure\nincitability\nincitable\nincitant\nincitation\nincite\nincitement\ninciter\nincitingly\nincitive\nincitress\nincivic\nincivility\nincivilization\nincivism\ninclemency\ninclement\ninclemently\ninclementness\ninclinable\ninclinableness\ninclination\ninclinational\ninclinator\ninclinatorily\ninclinatorium\ninclinatory\nincline\nincliner\ninclinograph\ninclinometer\ninclip\ninclose\ninclosure\nincludable\ninclude\nincluded\nincludedness\nincluder\ninclusa\nincluse\ninclusion\ninclusionist\ninclusive\ninclusively\ninclusiveness\ninclusory\nincoagulable\nincoalescence\nincoercible\nincog\nincogent\nincogitability\nincogitable\nincogitancy\nincogitant\nincogitantly\nincogitative\nincognita\nincognitive\nincognito\nincognizability\nincognizable\nincognizance\nincognizant\nincognoscent\nincognoscibility\nincognoscible\nincoherence\nincoherency\nincoherent\nincoherentific\nincoherently\nincoherentness\nincohering\nincohesion\nincohesive\nincoincidence\nincoincident\nincombustibility\nincombustible\nincombustibleness\nincombustibly\nincombustion\nincome\nincomeless\nincomer\nincoming\nincommensurability\nincommensurable\nincommensurableness\nincommensurably\nincommensurate\nincommensurately\nincommensurateness\nincommiscibility\nincommiscible\nincommodate\nincommodation\nincommode\nincommodement\nincommodious\nincommodiously\nincommodiousness\nincommodity\nincommunicability\nincommunicable\nincommunicableness\nincommunicably\nincommunicado\nincommunicative\nincommunicatively\nincommunicativeness\nincommutability\nincommutable\nincommutableness\nincommutably\nincompact\nincompactly\nincompactness\nincomparability\nincomparable\nincomparableness\nincomparably\nincompassionate\nincompassionately\nincompassionateness\nincompatibility\nincompatible\nincompatibleness\nincompatibly\nincompendious\nincompensated\nincompensation\nincompetence\nincompetency\nincompetent\nincompetently\nincompetentness\nincompletability\nincompletable\nincompletableness\nincomplete\nincompleted\nincompletely\nincompleteness\nincompletion\nincomplex\nincompliance\nincompliancy\nincompliant\nincompliantly\nincomplicate\nincomplying\nincomposed\nincomposedly\nincomposedness\nincomposite\nincompossibility\nincompossible\nincomprehended\nincomprehending\nincomprehendingly\nincomprehensibility\nincomprehensible\nincomprehensibleness\nincomprehensibly\nincomprehension\nincomprehensive\nincomprehensively\nincomprehensiveness\nincompressibility\nincompressible\nincompressibleness\nincompressibly\nincomputable\ninconcealable\ninconceivability\ninconceivable\ninconceivableness\ninconceivably\ninconcinnate\ninconcinnately\ninconcinnity\ninconcinnous\ninconcludent\ninconcluding\ninconclusion\ninconclusive\ninconclusively\ninconclusiveness\ninconcrete\ninconcurrent\ninconcurring\nincondensability\nincondensable\nincondensibility\nincondensible\nincondite\ninconditionate\ninconditioned\ninconducive\ninconfirm\ninconformable\ninconformably\ninconformity\ninconfused\ninconfusedly\ninconfusion\ninconfutable\ninconfutably\nincongealable\nincongealableness\nincongenerous\nincongenial\nincongeniality\ninconglomerate\nincongruence\nincongruent\nincongruently\nincongruity\nincongruous\nincongruously\nincongruousness\ninconjoinable\ninconnected\ninconnectedness\ninconnu\ninconscience\ninconscient\ninconsciently\ninconscious\ninconsciously\ninconsecutive\ninconsecutively\ninconsecutiveness\ninconsequence\ninconsequent\ninconsequential\ninconsequentiality\ninconsequentially\ninconsequently\ninconsequentness\ninconsiderable\ninconsiderableness\ninconsiderably\ninconsiderate\ninconsiderately\ninconsiderateness\ninconsideration\ninconsidered\ninconsistence\ninconsistency\ninconsistent\ninconsistently\ninconsistentness\ninconsolability\ninconsolable\ninconsolableness\ninconsolably\ninconsolate\ninconsolately\ninconsonance\ninconsonant\ninconsonantly\ninconspicuous\ninconspicuously\ninconspicuousness\ninconstancy\ninconstant\ninconstantly\ninconstantness\ninconstruable\ninconsultable\ninconsumable\ninconsumably\ninconsumed\nincontaminable\nincontaminate\nincontaminateness\nincontemptible\nincontestability\nincontestable\nincontestableness\nincontestably\nincontinence\nincontinency\nincontinent\nincontinently\nincontinuity\nincontinuous\nincontracted\nincontractile\nincontraction\nincontrollable\nincontrollably\nincontrolled\nincontrovertibility\nincontrovertible\nincontrovertibleness\nincontrovertibly\ninconvenience\ninconveniency\ninconvenient\ninconveniently\ninconvenientness\ninconversable\ninconversant\ninconversibility\ninconvertibility\ninconvertible\ninconvertibleness\ninconvertibly\ninconvinced\ninconvincedly\ninconvincibility\ninconvincible\ninconvincibly\nincopresentability\nincopresentable\nincoronate\nincoronated\nincoronation\nincorporable\nincorporate\nincorporated\nincorporatedness\nincorporation\nincorporative\nincorporator\nincorporeal\nincorporealism\nincorporealist\nincorporeality\nincorporealize\nincorporeally\nincorporeity\nincorporeous\nincorpse\nincorrect\nincorrection\nincorrectly\nincorrectness\nincorrespondence\nincorrespondency\nincorrespondent\nincorresponding\nincorrigibility\nincorrigible\nincorrigibleness\nincorrigibly\nincorrodable\nincorrodible\nincorrosive\nincorrupt\nincorrupted\nincorruptibility\nIncorruptible\nincorruptible\nincorruptibleness\nincorruptibly\nincorruption\nincorruptly\nincorruptness\nincourteous\nincourteously\nincrash\nincrassate\nincrassated\nincrassation\nincrassative\nincreasable\nincreasableness\nincrease\nincreasedly\nincreaseful\nincreasement\nincreaser\nincreasing\nincreasingly\nincreate\nincreately\nincreative\nincredibility\nincredible\nincredibleness\nincredibly\nincreditable\nincredited\nincredulity\nincredulous\nincredulously\nincredulousness\nincreep\nincremate\nincremation\nincrement\nincremental\nincrementation\nincrepate\nincrepation\nincrescence\nincrescent\nincrest\nincretion\nincretionary\nincretory\nincriminate\nincrimination\nincriminator\nincriminatory\nincross\nincrossbred\nincrossing\nincrotchet\nincruent\nincruental\nincruentous\nincrust\nincrustant\nIncrustata\nincrustate\nincrustation\nincrustator\nincrustive\nincrustment\nincrystal\nincrystallizable\nincubate\nincubation\nincubational\nincubative\nincubator\nincubatorium\nincubatory\nincubi\nincubous\nincubus\nincudal\nincudate\nincudectomy\nincudes\nincudomalleal\nincudostapedial\ninculcate\ninculcation\ninculcative\ninculcator\ninculcatory\ninculpability\ninculpable\ninculpableness\ninculpably\ninculpate\ninculpation\ninculpative\ninculpatory\nincult\nincultivation\ninculture\nincumbence\nincumbency\nincumbent\nincumbentess\nincumbently\nincumber\nincumberment\nincumbrance\nincumbrancer\nincunable\nincunabula\nincunabular\nincunabulist\nincunabulum\nincuneation\nincur\nincurability\nincurable\nincurableness\nincurably\nincuriosity\nincurious\nincuriously\nincuriousness\nincurrable\nincurrence\nincurrent\nincurse\nincursion\nincursionist\nincursive\nincurvate\nincurvation\nincurvature\nincurve\nincus\nincuse\nincut\nincutting\nInd\nindaba\nindaconitine\nindagate\nindagation\nindagative\nindagator\nindagatory\nindamine\nindan\nindane\nIndanthrene\nindanthrene\nindart\nindazin\nindazine\nindazol\nindazole\ninde\nindebt\nindebted\nindebtedness\nindebtment\nindecence\nindecency\nindecent\nindecently\nindecentness\nIndecidua\nindeciduate\nindeciduous\nindecipherability\nindecipherable\nindecipherableness\nindecipherably\nindecision\nindecisive\nindecisively\nindecisiveness\nindeclinable\nindeclinableness\nindeclinably\nindecomponible\nindecomposable\nindecomposableness\nindecorous\nindecorously\nindecorousness\nindecorum\nindeed\nindeedy\nindefaceable\nindefatigability\nindefatigable\nindefatigableness\nindefatigably\nindefeasibility\nindefeasible\nindefeasibleness\nindefeasibly\nindefeatable\nindefectibility\nindefectible\nindefectibly\nindefective\nindefensibility\nindefensible\nindefensibleness\nindefensibly\nindefensive\nindeficiency\nindeficient\nindeficiently\nindefinable\nindefinableness\nindefinably\nindefinite\nindefinitely\nindefiniteness\nindefinitive\nindefinitively\nindefinitiveness\nindefinitude\nindefinity\nindeflectible\nindefluent\nindeformable\nindehiscence\nindehiscent\nindelectable\nindelegability\nindelegable\nindeliberate\nindeliberately\nindeliberateness\nindeliberation\nindelibility\nindelible\nindelibleness\nindelibly\nindelicacy\nindelicate\nindelicately\nindelicateness\nindemnification\nindemnificator\nindemnificatory\nindemnifier\nindemnify\nindemnitee\nindemnitor\nindemnity\nindemnization\nindemoniate\nindemonstrability\nindemonstrable\nindemonstrableness\nindemonstrably\nindene\nindent\nindentation\nindented\nindentedly\nindentee\nindenter\nindention\nindentment\nindentor\nindenture\nindentured\nindentureship\nindentwise\nindependable\nindependence\nindependency\nindependent\nindependentism\nindependently\nIndependista\nindeposable\nindeprehensible\nindeprivability\nindeprivable\ninderivative\nindescribability\nindescribable\nindescribableness\nindescribably\nindescript\nindescriptive\nindesert\nindesignate\nindesirable\nindestructibility\nindestructible\nindestructibleness\nindestructibly\nindetectable\nindeterminable\nindeterminableness\nindeterminably\nindeterminacy\nindeterminate\nindeterminately\nindeterminateness\nindetermination\nindeterminative\nindetermined\nindeterminism\nindeterminist\nindeterministic\nindevirginate\nindevoted\nindevotion\nindevotional\nindevout\nindevoutly\nindevoutness\nindex\nindexed\nindexer\nindexical\nindexically\nindexing\nindexless\nindexlessness\nindexterity\nIndia\nindiadem\nIndiaman\nIndian\nIndiana\nindianaite\nIndianan\nIndianeer\nIndianesque\nIndianhood\nIndianian\nIndianism\nIndianist\nindianite\nindianization\nindianize\nIndic\nindic\nindicable\nindican\nindicant\nindicanuria\nindicate\nindication\nindicative\nindicatively\nindicator\nIndicatoridae\nIndicatorinae\nindicatory\nindicatrix\nindices\nindicia\nindicial\nindicible\nindicium\nindicolite\nindict\nindictable\nindictably\nindictee\nindicter\nindiction\nindictional\nindictive\nindictment\nindictor\nIndies\nindiferous\nindifference\nindifferency\nindifferent\nindifferential\nindifferentism\nindifferentist\nindifferentistic\nindifferently\nindigena\nindigenal\nindigenate\nindigence\nindigency\nindigene\nindigeneity\nIndigenismo\nindigenist\nindigenity\nindigenous\nindigenously\nindigenousness\nindigent\nindigently\nindigested\nindigestedness\nindigestibility\nindigestible\nindigestibleness\nindigestibly\nindigestion\nindigestive\nindigitamenta\nindigitate\nindigitation\nindign\nindignance\nindignancy\nindignant\nindignantly\nindignation\nindignatory\nindignify\nindignity\nindignly\nindigo\nindigoberry\nIndigofera\nindigoferous\nindigoid\nindigotic\nindigotin\nindigotindisulphonic\nindiguria\nindimensible\nindimensional\nindiminishable\nindimple\nindirect\nindirected\nindirection\nindirectly\nindirectness\nindirubin\nindiscernibility\nindiscernible\nindiscernibleness\nindiscernibly\nindiscerptibility\nindiscerptible\nindiscerptibleness\nindiscerptibly\nindisciplinable\nindiscipline\nindisciplined\nindiscoverable\nindiscoverably\nindiscovered\nindiscreet\nindiscreetly\nindiscreetness\nindiscrete\nindiscretely\nindiscretion\nindiscretionary\nindiscriminate\nindiscriminated\nindiscriminately\nindiscriminateness\nindiscriminating\nindiscriminatingly\nindiscrimination\nindiscriminative\nindiscriminatively\nindiscriminatory\nindiscussable\nindiscussible\nindispellable\nindispensability\nindispensable\nindispensableness\nindispensably\nindispose\nindisposed\nindisposedness\nindisposition\nindisputability\nindisputable\nindisputableness\nindisputably\nindissipable\nindissociable\nindissolubility\nindissoluble\nindissolubleness\nindissolubly\nindissolute\nindissolvability\nindissolvable\nindissolvableness\nindissolvably\nindissuadable\nindissuadably\nindistinct\nindistinction\nindistinctive\nindistinctively\nindistinctiveness\nindistinctly\nindistinctness\nindistinguishability\nindistinguishable\nindistinguishableness\nindistinguishably\nindistinguished\nindistortable\nindistributable\nindisturbable\nindisturbance\nindisturbed\nindite\ninditement\ninditer\nindium\nindivertible\nindivertibly\nindividable\nindividua\nindividual\nindividualism\nindividualist\nindividualistic\nindividualistically\nindividuality\nindividualization\nindividualize\nindividualizer\nindividualizingly\nindividually\nindividuate\nindividuation\nindividuative\nindividuator\nindividuity\nindividuum\nindivinable\nindivisibility\nindivisible\nindivisibleness\nindivisibly\nindivision\nindocibility\nindocible\nindocibleness\nindocile\nindocility\nindoctrinate\nindoctrination\nindoctrinator\nindoctrine\nindoctrinization\nindoctrinize\nIndogaea\nIndogaean\nindogen\nindogenide\nindole\nindolence\nindolent\nindolently\nindoles\nindoline\nIndologian\nIndologist\nIndologue\nIndology\nindoloid\nindolyl\nindomitability\nindomitable\nindomitableness\nindomitably\nIndone\nIndonesian\nindoor\nindoors\nindophenin\nindophenol\nIndophile\nIndophilism\nIndophilist\nindorsation\nindorse\nindoxyl\nindoxylic\nindoxylsulphuric\nIndra\nindraft\nindraught\nindrawal\nindrawing\nindrawn\nindri\nIndris\nindubious\nindubiously\nindubitable\nindubitableness\nindubitably\nindubitatively\ninduce\ninduced\ninducedly\ninducement\ninducer\ninduciae\ninducible\ninducive\ninduct\ninductance\ninductee\ninducteous\ninductile\ninductility\ninduction\ninductional\ninductionally\ninductionless\ninductive\ninductively\ninductiveness\ninductivity\ninductometer\ninductophone\ninductor\ninductorium\ninductory\ninductoscope\nindue\ninduement\nindulge\nindulgeable\nindulgement\nindulgence\nindulgenced\nindulgency\nindulgent\nindulgential\nindulgentially\nindulgently\nindulgentness\nindulger\nindulging\nindulgingly\ninduline\nindult\nindulto\nindument\nindumentum\ninduna\ninduplicate\ninduplication\ninduplicative\nindurable\nindurate\ninduration\nindurative\nindurite\nIndus\nindusial\nindusiate\nindusiated\nindusiform\nindusioid\nindusium\nindustrial\nindustrialism\nindustrialist\nindustrialization\nindustrialize\nindustrially\nindustrialness\nindustrious\nindustriously\nindustriousness\nindustrochemical\nindustry\ninduviae\ninduvial\ninduviate\nindwell\nindweller\nindy\nindyl\nindylic\ninearth\ninebriacy\ninebriant\ninebriate\ninebriation\ninebriative\ninebriety\ninebrious\nineconomic\nineconomy\ninedibility\ninedible\ninedited\nIneducabilia\nineducabilian\nineducability\nineducable\nineducation\nineffability\nineffable\nineffableness\nineffably\nineffaceability\nineffaceable\nineffaceably\nineffectible\nineffectibly\nineffective\nineffectively\nineffectiveness\nineffectual\nineffectuality\nineffectually\nineffectualness\nineffervescence\nineffervescent\nineffervescibility\nineffervescible\ninefficacious\ninefficaciously\ninefficaciousness\ninefficacity\ninefficacy\ninefficience\ninefficiency\ninefficient\ninefficiently\nineffulgent\ninelaborate\ninelaborated\ninelaborately\ninelastic\ninelasticate\ninelasticity\ninelegance\ninelegancy\ninelegant\ninelegantly\nineligibility\nineligible\nineligibleness\nineligibly\nineliminable\nineloquence\nineloquent\nineloquently\nineluctability\nineluctable\nineluctably\nineludible\nineludibly\ninembryonate\ninemendable\ninemotivity\ninemulous\ninenarrable\ninenergetic\ninenubilable\ninenucleable\ninept\nineptitude\nineptly\nineptness\ninequable\ninequal\ninequalitarian\ninequality\ninequally\ninequalness\ninequation\ninequiaxial\ninequicostate\ninequidistant\ninequigranular\ninequilateral\ninequilibrium\ninequilobate\ninequilobed\ninequipotential\ninequipotentiality\ninequitable\ninequitableness\ninequitably\ninequity\ninequivalent\ninequivalve\ninequivalvular\nineradicable\nineradicableness\nineradicably\ninerasable\ninerasableness\ninerasably\ninerasible\nIneri\ninerm\nInermes\nInermi\nInermia\ninermous\ninerrability\ninerrable\ninerrableness\ninerrably\ninerrancy\ninerrant\ninerrantly\ninerratic\ninerring\ninerringly\ninerroneous\ninert\ninertance\ninertia\ninertial\ninertion\ninertly\ninertness\ninerubescent\ninerudite\nineruditely\ninerudition\ninescapable\ninescapableness\ninescapably\ninesculent\ninescutcheon\ninesite\ninessential\ninessentiality\ninestimability\ninestimable\ninestimableness\ninestimably\ninestivation\ninethical\nineunt\nineuphonious\ninevadible\ninevadibly\ninevaporable\ninevasible\ninevidence\ninevident\ninevitability\ninevitable\ninevitableness\ninevitably\ninexact\ninexacting\ninexactitude\ninexactly\ninexactness\ninexcellence\ninexcitability\ninexcitable\ninexclusive\ninexclusively\ninexcommunicable\ninexcusability\ninexcusable\ninexcusableness\ninexcusably\ninexecutable\ninexecution\ninexertion\ninexhausted\ninexhaustedly\ninexhaustibility\ninexhaustible\ninexhaustibleness\ninexhaustibly\ninexhaustive\ninexhaustively\ninexigible\ninexist\ninexistence\ninexistency\ninexistent\ninexorability\ninexorable\ninexorableness\ninexorably\ninexpansible\ninexpansive\ninexpectancy\ninexpectant\ninexpectation\ninexpected\ninexpectedly\ninexpectedness\ninexpedience\ninexpediency\ninexpedient\ninexpediently\ninexpensive\ninexpensively\ninexpensiveness\ninexperience\ninexperienced\ninexpert\ninexpertly\ninexpertness\ninexpiable\ninexpiableness\ninexpiably\ninexpiate\ninexplainable\ninexplicability\ninexplicable\ninexplicableness\ninexplicables\ninexplicably\ninexplicit\ninexplicitly\ninexplicitness\ninexplorable\ninexplosive\ninexportable\ninexposable\ninexposure\ninexpress\ninexpressibility\ninexpressible\ninexpressibleness\ninexpressibles\ninexpressibly\ninexpressive\ninexpressively\ninexpressiveness\ninexpugnability\ninexpugnable\ninexpugnableness\ninexpugnably\ninexpungeable\ninexpungible\ninextant\ninextended\ninextensibility\ninextensible\ninextensile\ninextension\ninextensional\ninextensive\ninexterminable\ninextinct\ninextinguishable\ninextinguishably\ninextirpable\ninextirpableness\ninextricability\ninextricable\ninextricableness\ninextricably\nInez\ninface\ninfall\ninfallibilism\ninfallibilist\ninfallibility\ninfallible\ninfallibleness\ninfallibly\ninfalling\ninfalsificable\ninfame\ninfamiliar\ninfamiliarity\ninfamize\ninfamonize\ninfamous\ninfamously\ninfamousness\ninfamy\ninfancy\ninfand\ninfandous\ninfang\ninfanglement\ninfangthief\ninfant\ninfanta\ninfantado\ninfante\ninfanthood\ninfanticidal\ninfanticide\ninfantile\ninfantilism\ninfantility\ninfantine\ninfantlike\ninfantry\ninfantryman\ninfarct\ninfarctate\ninfarcted\ninfarction\ninfare\ninfatuate\ninfatuatedly\ninfatuation\ninfatuator\ninfaust\ninfeasibility\ninfeasible\ninfeasibleness\ninfect\ninfectant\ninfected\ninfectedness\ninfecter\ninfectible\ninfection\ninfectionist\ninfectious\ninfectiously\ninfectiousness\ninfective\ninfectiveness\ninfectivity\ninfector\ninfectress\ninfectuous\ninfecund\ninfecundity\ninfeed\ninfeft\ninfeftment\ninfelicific\ninfelicitous\ninfelicitously\ninfelicitousness\ninfelicity\ninfelonious\ninfelt\ninfeminine\ninfer\ninferable\ninference\ninferent\ninferential\ninferentialism\ninferentialist\ninferentially\ninferior\ninferiorism\ninferiority\ninferiorize\ninferiorly\ninfern\ninfernal\ninfernalism\ninfernality\ninfernalize\ninfernally\ninfernalry\ninfernalship\ninferno\ninferoanterior\ninferobranchiate\ninferofrontal\ninferolateral\ninferomedian\ninferoposterior\ninferrer\ninferribility\ninferrible\ninferringly\ninfertile\ninfertilely\ninfertileness\ninfertility\ninfest\ninfestant\ninfestation\ninfester\ninfestive\ninfestivity\ninfestment\ninfeudation\ninfibulate\ninfibulation\ninficete\ninfidel\ninfidelic\ninfidelical\ninfidelism\ninfidelistic\ninfidelity\ninfidelize\ninfidelly\ninfield\ninfielder\ninfieldsman\ninfighter\ninfighting\ninfill\ninfilling\ninfilm\ninfilter\ninfiltrate\ninfiltration\ninfiltrative\ninfinitant\ninfinitarily\ninfinitary\ninfinitate\ninfinitation\ninfinite\ninfinitely\ninfiniteness\ninfinitesimal\ninfinitesimalism\ninfinitesimality\ninfinitesimally\ninfinitesimalness\ninfiniteth\ninfinitieth\ninfinitival\ninfinitivally\ninfinitive\ninfinitively\ninfinitize\ninfinitude\ninfinituple\ninfinity\ninfirm\ninfirmarer\ninfirmaress\ninfirmarian\ninfirmary\ninfirmate\ninfirmation\ninfirmative\ninfirmity\ninfirmly\ninfirmness\ninfissile\ninfit\ninfitter\ninfix\ninfixion\ninflame\ninflamed\ninflamedly\ninflamedness\ninflamer\ninflaming\ninflamingly\ninflammability\ninflammable\ninflammableness\ninflammably\ninflammation\ninflammative\ninflammatorily\ninflammatory\ninflatable\ninflate\ninflated\ninflatedly\ninflatedness\ninflater\ninflatile\ninflatingly\ninflation\ninflationary\ninflationism\ninflationist\ninflative\ninflatus\ninflect\ninflected\ninflectedness\ninflection\ninflectional\ninflectionally\ninflectionless\ninflective\ninflector\ninflex\ninflexed\ninflexibility\ninflexible\ninflexibleness\ninflexibly\ninflexive\ninflict\ninflictable\ninflicter\ninfliction\ninflictive\ninflood\ninflorescence\ninflorescent\ninflow\ninflowering\ninfluence\ninfluenceable\ninfluencer\ninfluencive\ninfluent\ninfluential\ninfluentiality\ninfluentially\ninfluenza\ninfluenzal\ninfluenzic\ninflux\ninfluxable\ninfluxible\ninfluxibly\ninfluxion\ninfluxionism\ninfold\ninfolder\ninfolding\ninfoldment\ninfoliate\ninform\ninformable\ninformal\ninformality\ninformalize\ninformally\ninformant\ninformation\ninformational\ninformative\ninformatively\ninformatory\ninformed\ninformedly\ninformer\ninformidable\ninformingly\ninformity\ninfortiate\ninfortitude\ninfortunate\ninfortunately\ninfortunateness\ninfortune\ninfra\ninfrabasal\ninfrabestial\ninfrabranchial\ninfrabuccal\ninfracanthal\ninfracaudal\ninfracelestial\ninfracentral\ninfracephalic\ninfraclavicle\ninfraclavicular\ninfraclusion\ninfraconscious\ninfracortical\ninfracostal\ninfracostalis\ninfracotyloid\ninfract\ninfractible\ninfraction\ninfractor\ninfradentary\ninfradiaphragmatic\ninfragenual\ninfraglacial\ninfraglenoid\ninfraglottic\ninfragrant\ninfragular\ninfrahuman\ninfrahyoid\ninfralabial\ninfralapsarian\ninfralapsarianism\ninfralinear\ninfralittoral\ninframammary\ninframammillary\ninframandibular\ninframarginal\ninframaxillary\ninframedian\ninframercurial\ninframercurian\ninframolecular\ninframontane\ninframundane\ninfranatural\ninfranaturalism\ninfrangibility\ninfrangible\ninfrangibleness\ninfrangibly\ninfranodal\ninfranuclear\ninfraoccipital\ninfraocclusion\ninfraocular\ninfraoral\ninfraorbital\ninfraordinary\ninfrapapillary\ninfrapatellar\ninfraperipherial\ninfrapose\ninfraposition\ninfraprotein\ninfrapubian\ninfraradular\ninfrared\ninfrarenal\ninfrarenally\ninfrarimal\ninfrascapular\ninfrascapularis\ninfrascientific\ninfraspinal\ninfraspinate\ninfraspinatus\ninfraspinous\ninfrastapedial\ninfrasternal\ninfrastigmatal\ninfrastipular\ninfrastructure\ninfrasutral\ninfratemporal\ninfraterrene\ninfraterritorial\ninfrathoracic\ninfratonsillar\ninfratracheal\ninfratrochanteric\ninfratrochlear\ninfratubal\ninfraturbinal\ninfravaginal\ninfraventral\ninfrequency\ninfrequent\ninfrequently\ninfrigidate\ninfrigidation\ninfrigidative\ninfringe\ninfringement\ninfringer\ninfringible\ninfructiferous\ninfructuose\ninfructuosity\ninfructuous\ninfructuously\ninfrugal\ninfrustrable\ninfrustrably\ninfula\ninfumate\ninfumated\ninfumation\ninfundibular\nInfundibulata\ninfundibulate\ninfundibuliform\ninfundibulum\ninfuriate\ninfuriately\ninfuriatingly\ninfuriation\ninfuscate\ninfuscation\ninfuse\ninfusedly\ninfuser\ninfusibility\ninfusible\ninfusibleness\ninfusile\ninfusion\ninfusionism\ninfusionist\ninfusive\nInfusoria\ninfusorial\ninfusorian\ninfusoriform\ninfusorioid\ninfusorium\ninfusory\nIng\ning\nInga\nIngaevones\nIngaevonic\ningallantry\ningate\ningather\ningatherer\ningathering\ningeldable\ningeminate\ningemination\ningenerability\ningenerable\ningenerably\ningenerate\ningenerately\ningeneration\ningenerative\ningeniosity\ningenious\ningeniously\ningeniousness\ningenit\ningenue\ningenuity\ningenuous\ningenuously\ningenuousness\nInger\ningerminate\ningest\ningesta\ningestible\ningestion\ningestive\nInghamite\nInghilois\ningiver\ningiving\ningle\ninglenook\ningleside\ninglobate\ninglobe\ninglorious\ningloriously\ningloriousness\ninglutition\ningluvial\ningluvies\ningluviitis\ningoing\nIngomar\ningot\ningotman\ningraft\ningrain\ningrained\ningrainedly\ningrainedness\nIngram\ningrammaticism\ningrandize\ningrate\ningrateful\ningratefully\ningratefulness\ningrately\ningratiate\ningratiating\ningratiatingly\ningratiation\ningratiatory\ningratitude\ningravescent\ningravidate\ningravidation\ningredient\ningress\ningression\ningressive\ningressiveness\ningross\ningrow\ningrown\ningrownness\ningrowth\ninguen\ninguinal\ninguinoabdominal\ninguinocrural\ninguinocutaneous\ninguinodynia\ninguinolabial\ninguinoscrotal\nInguklimiut\ningulf\ningulfment\ningurgitate\ningurgitation\nIngush\ninhabit\ninhabitability\ninhabitable\ninhabitancy\ninhabitant\ninhabitation\ninhabitative\ninhabitativeness\ninhabited\ninhabitedness\ninhabiter\ninhabitiveness\ninhabitress\ninhalant\ninhalation\ninhalator\ninhale\ninhalement\ninhalent\ninhaler\ninharmonic\ninharmonical\ninharmonious\ninharmoniously\ninharmoniousness\ninharmony\ninhaul\ninhauler\ninhaust\ninhaustion\ninhearse\ninheaven\ninhere\ninherence\ninherency\ninherent\ninherently\ninherit\ninheritability\ninheritable\ninheritableness\ninheritably\ninheritage\ninheritance\ninheritor\ninheritress\ninheritrice\ninheritrix\ninhesion\ninhiate\ninhibit\ninhibitable\ninhibiter\ninhibition\ninhibitionist\ninhibitive\ninhibitor\ninhibitory\ninhomogeneity\ninhomogeneous\ninhomogeneously\ninhospitable\ninhospitableness\ninhospitably\ninhospitality\ninhuman\ninhumane\ninhumanely\ninhumanism\ninhumanity\ninhumanize\ninhumanly\ninhumanness\ninhumate\ninhumation\ninhumationist\ninhume\ninhumer\ninhumorous\ninhumorously\nInia\ninial\ninidoneity\ninidoneous\nInigo\ninimicable\ninimical\ninimicality\ninimically\ninimicalness\ninimitability\ninimitable\ninimitableness\ninimitably\niniome\nIniomi\niniomous\ninion\niniquitable\niniquitably\niniquitous\niniquitously\niniquitousness\niniquity\ninirritability\ninirritable\ninirritant\ninirritative\ninissuable\ninitial\ninitialer\ninitialist\ninitialize\ninitially\ninitiant\ninitiary\ninitiate\ninitiation\ninitiative\ninitiatively\ninitiator\ninitiatorily\ninitiatory\ninitiatress\ninitiatrix\ninitis\ninitive\ninject\ninjectable\ninjection\ninjector\ninjelly\ninjudicial\ninjudicially\ninjudicious\ninjudiciously\ninjudiciousness\nInjun\ninjunct\ninjunction\ninjunctive\ninjunctively\ninjurable\ninjure\ninjured\ninjuredly\ninjuredness\ninjurer\ninjurious\ninjuriously\ninjuriousness\ninjury\ninjustice\nink\ninkberry\ninkbush\ninken\ninker\nInkerman\ninket\ninkfish\ninkholder\ninkhorn\ninkhornism\ninkhornist\ninkhornize\ninkhornizer\ninkindle\ninkiness\ninkish\ninkle\ninkless\ninklike\ninkling\ninkmaker\ninkmaking\ninknot\ninkosi\ninkpot\nInkra\ninkroot\ninks\ninkshed\ninkslinger\ninkslinging\ninkstain\ninkstand\ninkstandish\ninkstone\ninkweed\ninkwell\ninkwood\ninkwriter\ninky\ninlagation\ninlaid\ninlaik\ninlake\ninland\ninlander\ninlandish\ninlaut\ninlaw\ninlawry\ninlay\ninlayer\ninlaying\ninleague\ninleak\ninleakage\ninlet\ninlier\ninlook\ninlooker\ninly\ninlying\ninmate\ninmeats\ninmixture\ninmost\ninn\ninnascibility\ninnascible\ninnate\ninnately\ninnateness\ninnatism\ninnative\ninnatural\ninnaturality\ninnaturally\ninneity\ninner\ninnerly\ninnermore\ninnermost\ninnermostly\ninnerness\ninnervate\ninnervation\ninnervational\ninnerve\ninness\ninnest\ninnet\ninnholder\ninning\ninninmorite\nInnisfail\ninnkeeper\ninnless\ninnocence\ninnocency\ninnocent\ninnocently\ninnocentness\ninnocuity\ninnocuous\ninnocuously\ninnocuousness\ninnominable\ninnominables\ninnominata\ninnominate\ninnominatum\ninnovant\ninnovate\ninnovation\ninnovational\ninnovationist\ninnovative\ninnovator\ninnovatory\ninnoxious\ninnoxiously\ninnoxiousness\ninnuendo\nInnuit\ninnumerability\ninnumerable\ninnumerableness\ninnumerably\ninnumerous\ninnutrient\ninnutrition\ninnutritious\ninnutritive\ninnyard\nIno\ninobedience\ninobedient\ninobediently\ninoblast\ninobnoxious\ninobscurable\ninobservable\ninobservance\ninobservancy\ninobservant\ninobservantly\ninobservantness\ninobservation\ninobtainable\ninobtrusive\ninobtrusively\ninobtrusiveness\ninobvious\nInocarpus\ninoccupation\nInoceramus\ninochondritis\ninochondroma\ninoculability\ninoculable\ninoculant\ninocular\ninoculate\ninoculation\ninoculative\ninoculator\ninoculum\ninocystoma\ninocyte\nInodes\ninodorous\ninodorously\ninodorousness\ninoepithelioma\ninoffending\ninoffensive\ninoffensively\ninoffensiveness\ninofficial\ninofficially\ninofficiosity\ninofficious\ninofficiously\ninofficiousness\ninogen\ninogenesis\ninogenic\ninogenous\ninoglia\ninohymenitic\ninolith\ninoma\ninominous\ninomyoma\ninomyositis\ninomyxoma\ninone\ninoneuroma\ninoperable\ninoperative\ninoperativeness\ninopercular\nInoperculata\ninoperculate\ninopinable\ninopinate\ninopinately\ninopine\ninopportune\ninopportunely\ninopportuneness\ninopportunism\ninopportunist\ninopportunity\ninoppressive\ninoppugnable\ninopulent\ninorb\ninorderly\ninordinacy\ninordinary\ninordinate\ninordinately\ninordinateness\ninorganic\ninorganical\ninorganically\ninorganizable\ninorganization\ninorganized\ninoriginate\ninornate\ninosclerosis\ninoscopy\ninosculate\ninosculation\ninosic\ninosin\ninosinic\ninosite\ninositol\ninostensible\ninostensibly\ninotropic\ninower\ninoxidability\ninoxidable\ninoxidizable\ninoxidize\ninparabola\ninpardonable\ninpatient\ninpayment\ninpensioner\ninphase\ninpolygon\ninpolyhedron\ninport\ninpour\ninpush\ninput\ninquaintance\ninquartation\ninquest\ninquestual\ninquiet\ninquietation\ninquietly\ninquietness\ninquietude\nInquilinae\ninquiline\ninquilinism\ninquilinity\ninquilinous\ninquinate\ninquination\ninquirable\ninquirant\ninquiration\ninquire\ninquirendo\ninquirent\ninquirer\ninquiring\ninquiringly\ninquiry\ninquisite\ninquisition\ninquisitional\ninquisitionist\ninquisitive\ninquisitively\ninquisitiveness\ninquisitor\ninquisitorial\ninquisitorially\ninquisitorialness\ninquisitorious\ninquisitorship\ninquisitory\ninquisitress\ninquisitrix\ninquisiturient\ninradius\ninreality\ninrigged\ninrigger\ninrighted\ninring\ninro\ninroad\ninroader\ninroll\ninrooted\ninrub\ninrun\ninrunning\ninruption\ninrush\ninsack\ninsagacity\ninsalivate\ninsalivation\ninsalubrious\ninsalubrity\ninsalutary\ninsalvability\ninsalvable\ninsane\ninsanely\ninsaneness\ninsanify\ninsanitariness\ninsanitary\ninsanitation\ninsanity\ninsapiency\ninsapient\ninsatiability\ninsatiable\ninsatiableness\ninsatiably\ninsatiate\ninsatiated\ninsatiately\ninsatiateness\ninsatiety\ninsatisfaction\ninsatisfactorily\ninsaturable\ninscenation\ninscibile\ninscience\ninscient\ninscribable\ninscribableness\ninscribe\ninscriber\ninscript\ninscriptible\ninscription\ninscriptional\ninscriptioned\ninscriptionist\ninscriptionless\ninscriptive\ninscriptively\ninscriptured\ninscroll\ninscrutability\ninscrutable\ninscrutableness\ninscrutables\ninscrutably\ninsculp\ninsculpture\ninsea\ninseam\ninsect\nInsecta\ninsectan\ninsectarium\ninsectary\ninsectean\ninsected\ninsecticidal\ninsecticide\ninsectiferous\ninsectiform\ninsectifuge\ninsectile\ninsectine\ninsection\ninsectival\nInsectivora\ninsectivore\ninsectivorous\ninsectlike\ninsectmonger\ninsectologer\ninsectologist\ninsectology\ninsectproof\ninsecure\ninsecurely\ninsecureness\ninsecurity\ninsee\ninseer\ninselberg\ninseminate\ninsemination\ninsenescible\ninsensate\ninsensately\ninsensateness\ninsense\ninsensibility\ninsensibilization\ninsensibilize\ninsensibilizer\ninsensible\ninsensibleness\ninsensibly\ninsensitive\ninsensitiveness\ninsensitivity\ninsensuous\ninsentience\ninsentiency\ninsentient\ninseparability\ninseparable\ninseparableness\ninseparably\ninseparate\ninseparately\ninsequent\ninsert\ninsertable\ninserted\ninserter\ninsertion\ninsertional\ninsertive\ninserviceable\ninsessor\nInsessores\ninsessorial\ninset\ninsetter\ninseverable\ninseverably\ninshave\ninsheathe\ninshell\ninshining\ninship\ninshoe\ninshoot\ninshore\ninside\ninsider\ninsidiosity\ninsidious\ninsidiously\ninsidiousness\ninsight\ninsightful\ninsigne\ninsignia\ninsignificance\ninsignificancy\ninsignificant\ninsignificantly\ninsimplicity\ninsincere\ninsincerely\ninsincerity\ninsinking\ninsinuant\ninsinuate\ninsinuating\ninsinuatingly\ninsinuation\ninsinuative\ninsinuatively\ninsinuativeness\ninsinuator\ninsinuatory\ninsinuendo\ninsipid\ninsipidity\ninsipidly\ninsipidness\ninsipience\ninsipient\ninsipiently\ninsist\ninsistence\ninsistency\ninsistent\ninsistently\ninsister\ninsistingly\ninsistive\ninsititious\ninsnare\ninsnarement\ninsnarer\ninsobriety\ninsociability\ninsociable\ninsociableness\ninsociably\ninsocial\ninsocially\ninsofar\ninsolate\ninsolation\ninsole\ninsolence\ninsolency\ninsolent\ninsolently\ninsolentness\ninsolid\ninsolidity\ninsolubility\ninsoluble\ninsolubleness\ninsolubly\ninsolvability\ninsolvable\ninsolvably\ninsolvence\ninsolvency\ninsolvent\ninsomnia\ninsomniac\ninsomnious\ninsomnolence\ninsomnolency\ninsomnolent\ninsomuch\ninsonorous\ninsooth\ninsorb\ninsorbent\ninsouciance\ninsouciant\ninsouciantly\ninsoul\ninspan\ninspeak\ninspect\ninspectability\ninspectable\ninspectingly\ninspection\ninspectional\ninspectioneer\ninspective\ninspector\ninspectoral\ninspectorate\ninspectorial\ninspectorship\ninspectress\ninspectrix\ninspheration\ninsphere\ninspirability\ninspirable\ninspirant\ninspiration\ninspirational\ninspirationalism\ninspirationally\ninspirationist\ninspirative\ninspirator\ninspiratory\ninspiratrix\ninspire\ninspired\ninspiredly\ninspirer\ninspiring\ninspiringly\ninspirit\ninspiriter\ninspiriting\ninspiritingly\ninspiritment\ninspirometer\ninspissant\ninspissate\ninspissation\ninspissator\ninspissosis\ninspoke\ninspoken\ninspreith\ninstability\ninstable\ninstall\ninstallant\ninstallation\ninstaller\ninstallment\ninstance\ninstancy\ninstanding\ninstant\ninstantaneity\ninstantaneous\ninstantaneously\ninstantaneousness\ninstanter\ninstantial\ninstantly\ninstantness\ninstar\ninstate\ninstatement\ninstaurate\ninstauration\ninstaurator\ninstead\ninstealing\ninsteam\ninsteep\ninstellation\ninstep\ninstigant\ninstigate\ninstigatingly\ninstigation\ninstigative\ninstigator\ninstigatrix\ninstill\ninstillation\ninstillator\ninstillatory\ninstiller\ninstillment\ninstinct\ninstinctive\ninstinctively\ninstinctivist\ninstinctivity\ninstinctual\ninstipulate\ninstitor\ninstitorial\ninstitorian\ninstitory\ninstitute\ninstituter\ninstitution\ninstitutional\ninstitutionalism\ninstitutionalist\ninstitutionality\ninstitutionalization\ninstitutionalize\ninstitutionally\ninstitutionary\ninstitutionize\ninstitutive\ninstitutively\ninstitutor\ninstitutress\ninstitutrix\ninstonement\ninstratified\ninstreaming\ninstrengthen\ninstressed\ninstroke\ninstruct\ninstructed\ninstructedly\ninstructedness\ninstructer\ninstructible\ninstruction\ninstructional\ninstructionary\ninstructive\ninstructively\ninstructiveness\ninstructor\ninstructorship\ninstructress\ninstrument\ninstrumental\ninstrumentalism\ninstrumentalist\ninstrumentality\ninstrumentalize\ninstrumentally\ninstrumentary\ninstrumentate\ninstrumentation\ninstrumentative\ninstrumentist\ninstrumentman\ninsuavity\ninsubduable\ninsubjection\ninsubmergible\ninsubmersible\ninsubmission\ninsubmissive\ninsubordinate\ninsubordinately\ninsubordinateness\ninsubordination\ninsubstantial\ninsubstantiality\ninsubstantiate\ninsubstantiation\ninsubvertible\ninsuccess\ninsuccessful\ninsucken\ninsuetude\ninsufferable\ninsufferableness\ninsufferably\ninsufficience\ninsufficiency\ninsufficient\ninsufficiently\ninsufflate\ninsufflation\ninsufflator\ninsula\ninsulance\ninsulant\ninsular\ninsularism\ninsularity\ninsularize\ninsularly\ninsulary\ninsulate\ninsulated\ninsulating\ninsulation\ninsulator\ninsulin\ninsulize\ninsulse\ninsulsity\ninsult\ninsultable\ninsultant\ninsultation\ninsulter\ninsulting\ninsultingly\ninsultproof\ninsunk\ninsuperability\ninsuperable\ninsuperableness\ninsuperably\ninsupportable\ninsupportableness\ninsupportably\ninsupposable\ninsuppressible\ninsuppressibly\ninsuppressive\ninsurability\ninsurable\ninsurance\ninsurant\ninsure\ninsured\ninsurer\ninsurge\ninsurgence\ninsurgency\ninsurgent\ninsurgentism\ninsurgescence\ninsurmountability\ninsurmountable\ninsurmountableness\ninsurmountably\ninsurpassable\ninsurrect\ninsurrection\ninsurrectional\ninsurrectionally\ninsurrectionary\ninsurrectionism\ninsurrectionist\ninsurrectionize\ninsurrectory\ninsusceptibility\ninsusceptible\ninsusceptibly\ninsusceptive\ninswamp\ninswarming\ninsweeping\ninswell\ninswept\ninswing\ninswinger\nintabulate\nintact\nintactile\nintactly\nintactness\nintagliated\nintagliation\nintaglio\nintagliotype\nintake\nintaker\nintangibility\nintangible\nintangibleness\nintangibly\nintarissable\nintarsia\nintarsiate\nintarsist\nintastable\nintaxable\nintechnicality\ninteger\nintegrability\nintegrable\nintegral\nintegrality\nintegralization\nintegralize\nintegrally\nintegrand\nintegrant\nintegraph\nintegrate\nintegration\nintegrative\nintegrator\nintegrifolious\nintegrious\nintegriously\nintegripalliate\nintegrity\nintegrodifferential\nintegropallial\nIntegropallialia\nIntegropalliata\nintegropalliate\nintegument\nintegumental\nintegumentary\nintegumentation\ninteind\nintellect\nintellectation\nintellected\nintellectible\nintellection\nintellective\nintellectively\nintellectual\nintellectualism\nintellectualist\nintellectualistic\nintellectualistically\nintellectuality\nintellectualization\nintellectualize\nintellectualizer\nintellectually\nintellectualness\nintelligence\nintelligenced\nintelligencer\nintelligency\nintelligent\nintelligential\nintelligently\nintelligentsia\nintelligibility\nintelligible\nintelligibleness\nintelligibly\nintelligize\nintemerate\nintemerately\nintemerateness\nintemeration\nintemperable\nintemperably\nintemperament\nintemperance\nintemperate\nintemperately\nintemperateness\nintemperature\nintempestive\nintempestively\nintempestivity\nintemporal\nintemporally\nintenability\nintenable\nintenancy\nintend\nintendance\nintendancy\nintendant\nintendantism\nintendantship\nintended\nintendedly\nintendedness\nintendence\nintender\nintendible\nintending\nintendingly\nintendit\nintendment\nintenerate\ninteneration\nintenible\nintensate\nintensation\nintensative\nintense\nintensely\nintenseness\nintensification\nintensifier\nintensify\nintension\nintensional\nintensionally\nintensitive\nintensity\nintensive\nintensively\nintensiveness\nintent\nintention\nintentional\nintentionalism\nintentionality\nintentionally\nintentioned\nintentionless\nintentive\nintentively\nintentiveness\nintently\nintentness\ninter\ninterabsorption\ninteracademic\ninteraccessory\ninteraccuse\ninteracinar\ninteracinous\ninteract\ninteraction\ninteractional\ninteractionism\ninteractionist\ninteractive\ninteractivity\ninteradaptation\ninteradditive\ninteradventual\ninteraffiliation\ninteragency\ninteragent\ninteragglutinate\ninteragglutination\ninteragree\ninteragreement\ninteralar\ninterallied\ninterally\ninteralveolar\ninterambulacral\ninterambulacrum\ninteramnian\ninterangular\ninteranimate\ninterannular\ninterantagonism\ninterantennal\ninterantennary\ninterapophyseal\ninterapplication\ninterarboration\ninterarch\ninterarcualis\ninterarmy\ninterarticular\ninterartistic\ninterarytenoid\ninterassociation\ninterassure\ninterasteroidal\ninterastral\ninteratomic\ninteratrial\ninterattrition\ninteraulic\ninteraural\ninterauricular\ninteravailability\ninteravailable\ninteraxal\ninteraxial\ninteraxillary\ninteraxis\ninterbalance\ninterbanded\ninterbank\ninterbedded\ninterbelligerent\ninterblend\ninterbody\ninterbonding\ninterborough\ninterbourse\ninterbrachial\ninterbrain\ninterbranch\ninterbranchial\ninterbreath\ninterbreed\ninterbrigade\ninterbring\ninterbronchial\nintercadence\nintercadent\nintercalare\nintercalarily\nintercalarium\nintercalary\nintercalate\nintercalation\nintercalative\nintercalatory\nintercale\nintercalm\nintercanal\nintercanalicular\nintercapillary\nintercardinal\nintercarotid\nintercarpal\nintercarpellary\nintercarrier\nintercartilaginous\nintercaste\nintercatenated\nintercausative\nintercavernous\nintercede\ninterceder\nintercellular\nintercensal\nintercentral\nintercentrum\nintercept\nintercepter\nintercepting\ninterception\ninterceptive\ninterceptor\ninterceptress\nintercerebral\nintercession\nintercessional\nintercessionary\nintercessionment\nintercessive\nintercessor\nintercessorial\nintercessory\ninterchaff\ninterchange\ninterchangeability\ninterchangeable\ninterchangeableness\ninterchangeably\ninterchanger\ninterchapter\nintercharge\ninterchase\nintercheck\ninterchoke\ninterchondral\ninterchurch\nIntercidona\ninterciliary\nintercilium\nintercircle\nintercirculate\nintercirculation\nintercision\nintercitizenship\nintercity\nintercivic\nintercivilization\ninterclash\ninterclasp\ninterclass\ninterclavicle\ninterclavicular\ninterclerical\nintercloud\ninterclub\nintercoastal\nintercoccygeal\nintercoccygean\nintercohesion\nintercollege\nintercollegian\nintercollegiate\nintercolline\nintercolonial\nintercolonially\nintercolonization\nintercolumn\nintercolumnal\nintercolumnar\nintercolumniation\nintercom\nintercombat\nintercombination\nintercombine\nintercome\nintercommission\nintercommon\nintercommonable\nintercommonage\nintercommoner\nintercommunal\nintercommune\nintercommuner\nintercommunicability\nintercommunicable\nintercommunicate\nintercommunication\nintercommunicative\nintercommunicator\nintercommunion\nintercommunity\nintercompany\nintercomparable\nintercompare\nintercomparison\nintercomplexity\nintercomplimentary\ninterconal\ninterconciliary\nintercondenser\nintercondylar\nintercondylic\nintercondyloid\ninterconfessional\ninterconfound\ninterconnect\ninterconnection\nintercontinental\nintercontorted\nintercontradiction\nintercontradictory\ninterconversion\ninterconvertibility\ninterconvertible\ninterconvertibly\nintercooler\nintercooling\nintercoracoid\nintercorporate\nintercorpuscular\nintercorrelate\nintercorrelation\nintercortical\nintercosmic\nintercosmically\nintercostal\nintercostally\nintercostobrachial\nintercostohumeral\nintercotylar\nintercounty\nintercourse\nintercoxal\nintercranial\nintercreate\nintercrescence\nintercrinal\nintercrop\nintercross\nintercrural\nintercrust\nintercrystalline\nintercrystallization\nintercrystallize\nintercultural\ninterculture\nintercurl\nintercurrence\nintercurrent\nintercurrently\nintercursation\nintercuspidal\nintercutaneous\nintercystic\ninterdash\ninterdebate\ninterdenominational\ninterdental\ninterdentally\ninterdentil\ninterdepartmental\ninterdepartmentally\ninterdepend\ninterdependable\ninterdependence\ninterdependency\ninterdependent\ninterdependently\ninterderivative\ninterdespise\ninterdestructive\ninterdestructiveness\ninterdetermination\ninterdetermine\ninterdevour\ninterdict\ninterdiction\ninterdictive\ninterdictor\ninterdictory\ninterdictum\ninterdifferentiation\ninterdiffuse\ninterdiffusion\ninterdiffusive\ninterdiffusiveness\ninterdigital\ninterdigitate\ninterdigitation\ninterdine\ninterdiscal\ninterdispensation\ninterdistinguish\ninterdistrict\ninterdivision\ninterdome\ninterdorsal\ninterdrink\nintereat\ninterelectrode\ninterelectrodic\ninterempire\ninterenjoy\ninterentangle\ninterentanglement\ninterepidemic\ninterepimeral\ninterepithelial\ninterequinoctial\ninteressee\ninterest\ninterested\ninterestedly\ninterestedness\ninterester\ninteresting\ninterestingly\ninterestingness\ninterestless\ninterestuarine\ninterface\ninterfacial\ninterfactional\ninterfamily\ninterfascicular\ninterfault\ninterfector\ninterfederation\ninterfemoral\ninterfenestral\ninterfenestration\ninterferant\ninterfere\ninterference\ninterferent\ninterferential\ninterferer\ninterfering\ninterferingly\ninterferingness\ninterferometer\ninterferometry\ninterferric\ninterfertile\ninterfertility\ninterfibrillar\ninterfibrillary\ninterfibrous\ninterfilamentar\ninterfilamentary\ninterfilamentous\ninterfilar\ninterfiltrate\ninterfinger\ninterflange\ninterflashing\ninterflow\ninterfluence\ninterfluent\ninterfluminal\ninterfluous\ninterfluve\ninterfluvial\ninterflux\ninterfold\ninterfoliaceous\ninterfoliar\ninterfoliate\ninterfollicular\ninterforce\ninterfraternal\ninterfraternity\ninterfret\ninterfretted\ninterfriction\ninterfrontal\ninterfruitful\ninterfulgent\ninterfuse\ninterfusion\ninterganglionic\nintergenerant\nintergenerating\nintergeneration\nintergential\nintergesture\nintergilt\ninterglacial\ninterglandular\ninterglobular\ninterglyph\nintergossip\nintergovernmental\nintergradation\nintergrade\nintergradient\nintergraft\nintergranular\nintergrapple\nintergrave\nintergroupal\nintergrow\nintergrown\nintergrowth\nintergular\nintergyral\ninterhabitation\ninterhemal\ninterhemispheric\ninterhostile\ninterhuman\ninterhyal\ninterhybridize\ninterim\ninterimist\ninterimistic\ninterimistical\ninterimistically\ninterimperial\ninterincorporation\ninterindependence\ninterindicate\ninterindividual\ninterinfluence\ninterinhibition\ninterinhibitive\ninterinsert\ninterinsular\ninterinsurance\ninterinsurer\ninterinvolve\ninterionic\ninterior\ninteriority\ninteriorize\ninteriorly\ninteriorness\ninterirrigation\ninterisland\ninterjacence\ninterjacency\ninterjacent\ninterjaculate\ninterjaculatory\ninterjangle\ninterjealousy\ninterject\ninterjection\ninterjectional\ninterjectionalize\ninterjectionally\ninterjectionary\ninterjectionize\ninterjectiveness\ninterjector\ninterjectorily\ninterjectory\ninterjectural\ninterjoin\ninterjoist\ninterjudgment\ninterjunction\ninterkinesis\ninterkinetic\ninterknit\ninterknot\ninterknow\ninterknowledge\ninterlaboratory\ninterlace\ninterlaced\ninterlacedly\ninterlacement\ninterlacery\ninterlacustrine\ninterlaid\ninterlake\ninterlamellar\ninterlamellation\ninterlaminar\ninterlaminate\ninterlamination\ninterlanguage\ninterlap\ninterlapse\ninterlard\ninterlardation\ninterlardment\ninterlatitudinal\ninterlaudation\ninterlay\ninterleaf\ninterleague\ninterleave\ninterleaver\ninterlibel\ninterlibrary\ninterlie\ninterligamentary\ninterligamentous\ninterlight\ninterlimitation\ninterline\ninterlineal\ninterlineally\ninterlinear\ninterlinearily\ninterlinearly\ninterlineary\ninterlineate\ninterlineation\ninterlinement\ninterliner\nInterlingua\ninterlingual\ninterlinguist\ninterlinguistic\ninterlining\ninterlink\ninterloan\ninterlobar\ninterlobate\ninterlobular\ninterlocal\ninterlocally\ninterlocate\ninterlocation\ninterlock\ninterlocker\ninterlocular\ninterloculus\ninterlocution\ninterlocutive\ninterlocutor\ninterlocutorily\ninterlocutory\ninterlocutress\ninterlocutrice\ninterlocutrix\ninterloop\ninterlope\ninterloper\ninterlot\ninterlucation\ninterlucent\ninterlude\ninterluder\ninterludial\ninterlunar\ninterlunation\ninterlying\nintermalleolar\nintermammary\nintermammillary\nintermandibular\nintermanorial\nintermarginal\nintermarine\nintermarriage\nintermarriageable\nintermarry\nintermason\nintermastoid\nintermat\nintermatch\nintermaxilla\nintermaxillar\nintermaxillary\nintermaze\nintermeasurable\nintermeasure\nintermeddle\nintermeddlement\nintermeddler\nintermeddlesome\nintermeddlesomeness\nintermeddling\nintermeddlingly\nintermediacy\nintermediae\nintermedial\nintermediary\nintermediate\nintermediately\nintermediateness\nintermediation\nintermediator\nintermediatory\nintermedium\nintermedius\nintermeet\nintermelt\nintermembral\nintermembranous\nintermeningeal\nintermenstrual\nintermenstruum\ninterment\nintermental\nintermention\nintermercurial\nintermesenterial\nintermesenteric\nintermesh\nintermessage\nintermessenger\nintermetacarpal\nintermetallic\nintermetameric\nintermetatarsal\nintermew\nintermewed\nintermewer\nintermezzo\nintermigration\ninterminability\ninterminable\ninterminableness\ninterminably\ninterminant\ninterminate\nintermine\nintermingle\nintermingledom\ninterminglement\ninterminister\ninterministerial\ninterministerium\nintermission\nintermissive\nintermit\nintermitted\nintermittedly\nintermittence\nintermittency\nintermittent\nintermittently\nintermitter\nintermitting\nintermittingly\nintermix\nintermixedly\nintermixtly\nintermixture\nintermobility\nintermodification\nintermodillion\nintermodulation\nintermolar\nintermolecular\nintermomentary\nintermontane\nintermorainic\nintermotion\nintermountain\nintermundane\nintermundial\nintermundian\nintermundium\nintermunicipal\nintermunicipality\nintermural\nintermuscular\nintermutation\nintermutual\nintermutually\nintermutule\nintern\ninternal\ninternality\ninternalization\ninternalize\ninternally\ninternalness\ninternals\ninternarial\ninternasal\ninternation\ninternational\ninternationalism\ninternationalist\ninternationality\ninternationalization\ninternationalize\ninternationally\ninterneciary\ninternecinal\ninternecine\ninternecion\ninternecive\ninternee\ninternetted\ninterneural\ninterneuronic\ninternidal\ninternist\ninternment\ninternobasal\ninternodal\ninternode\ninternodial\ninternodian\ninternodium\ninternodular\ninternship\ninternuclear\ninternuncial\ninternunciary\ninternunciatory\ninternuncio\ninternuncioship\ninternuncius\ninternuptial\ninterobjective\ninteroceanic\ninteroceptive\ninteroceptor\ninterocular\ninteroffice\ninterolivary\ninteropercle\ninteropercular\ninteroperculum\ninteroptic\ninterorbital\ninterorbitally\ninteroscillate\ninterosculant\ninterosculate\ninterosculation\ninterosseal\ninterosseous\ninterownership\ninterpage\ninterpalatine\ninterpalpebral\ninterpapillary\ninterparenchymal\ninterparental\ninterparenthetical\ninterparenthetically\ninterparietal\ninterparietale\ninterparliament\ninterparliamentary\ninterparoxysmal\ninterparty\ninterpause\ninterpave\ninterpeal\ninterpectoral\ninterpeduncular\ninterpel\ninterpellant\ninterpellate\ninterpellation\ninterpellator\ninterpenetrable\ninterpenetrant\ninterpenetrate\ninterpenetration\ninterpenetrative\ninterpenetratively\ninterpermeate\ninterpersonal\ninterpervade\ninterpetaloid\ninterpetiolar\ninterpetiolary\ninterphalangeal\ninterphase\ninterphone\ninterpiece\ninterpilaster\ninterpilastering\ninterplacental\ninterplait\ninterplanetary\ninterplant\ninterplanting\ninterplay\ninterplea\ninterplead\ninterpleader\ninterpledge\ninterpleural\ninterplical\ninterplicate\ninterplication\ninterplight\ninterpoint\ninterpolable\ninterpolar\ninterpolary\ninterpolate\ninterpolater\ninterpolation\ninterpolative\ninterpolatively\ninterpolator\ninterpole\ninterpolitical\ninterpolity\ninterpollinate\ninterpolymer\ninterpone\ninterportal\ninterposable\ninterposal\ninterpose\ninterposer\ninterposing\ninterposingly\ninterposition\ninterposure\ninterpour\ninterprater\ninterpressure\ninterpret\ninterpretability\ninterpretable\ninterpretableness\ninterpretably\ninterpretament\ninterpretation\ninterpretational\ninterpretative\ninterpretatively\ninterpreter\ninterpretership\ninterpretive\ninterpretively\ninterpretorial\ninterpretress\ninterprismatic\ninterproduce\ninterprofessional\ninterproglottidal\ninterproportional\ninterprotoplasmic\ninterprovincial\ninterproximal\ninterproximate\ninterpterygoid\ninterpubic\ninterpulmonary\ninterpunct\ninterpunction\ninterpunctuate\ninterpunctuation\ninterpupillary\ninterquarrel\ninterquarter\ninterrace\ninterracial\ninterracialism\ninterradial\ninterradially\ninterradiate\ninterradiation\ninterradium\ninterradius\ninterrailway\ninterramal\ninterramicorn\ninterramification\ninterreceive\ninterreflection\ninterregal\ninterregimental\ninterregional\ninterregna\ninterregnal\ninterregnum\ninterreign\ninterrelate\ninterrelated\ninterrelatedly\ninterrelatedness\ninterrelation\ninterrelationship\ninterreligious\ninterrenal\ninterrenalism\ninterrepellent\ninterrepulsion\ninterrer\ninterresponsibility\ninterresponsible\ninterreticular\ninterreticulation\ninterrex\ninterrhyme\ninterright\ninterriven\ninterroad\ninterrogability\ninterrogable\ninterrogant\ninterrogate\ninterrogatedness\ninterrogatee\ninterrogatingly\ninterrogation\ninterrogational\ninterrogative\ninterrogatively\ninterrogator\ninterrogatorily\ninterrogatory\ninterrogatrix\ninterrogee\ninterroom\ninterrule\ninterrun\ninterrupt\ninterrupted\ninterruptedly\ninterruptedness\ninterrupter\ninterruptible\ninterrupting\ninterruptingly\ninterruption\ninterruptive\ninterruptively\ninterruptor\ninterruptory\nintersale\nintersalute\ninterscapilium\ninterscapular\ninterscapulum\ninterscene\ninterscholastic\ninterschool\ninterscience\ninterscribe\ninterscription\ninterseaboard\ninterseamed\nintersect\nintersectant\nintersection\nintersectional\nintersegmental\ninterseminal\nintersentimental\ninterseptal\nintersertal\nintersesamoid\nintersession\nintersessional\ninterset\nintersex\nintersexual\nintersexualism\nintersexuality\nintershade\nintershifting\nintershock\nintershoot\nintershop\nintersidereal\nintersituate\nintersocial\nintersocietal\nintersociety\nintersole\nintersolubility\nintersoluble\nintersomnial\nintersomnious\nintersonant\nintersow\ninterspace\ninterspatial\ninterspatially\ninterspeaker\ninterspecial\ninterspecific\ninterspersal\nintersperse\ninterspersedly\ninterspersion\ninterspheral\nintersphere\ninterspicular\ninterspinal\ninterspinalis\ninterspinous\ninterspiral\ninterspiration\nintersporal\nintersprinkle\nintersqueeze\ninterstadial\ninterstage\ninterstaminal\ninterstapedial\ninterstate\ninterstation\ninterstellar\ninterstellary\nintersterile\nintersterility\nintersternal\ninterstice\nintersticed\ninterstimulate\ninterstimulation\ninterstitial\ninterstitially\ninterstitious\ninterstratification\ninterstratify\ninterstreak\ninterstream\ninterstreet\ninterstrial\ninterstriation\ninterstrive\nintersubjective\nintersubsistence\nintersubstitution\nintersuperciliary\nintersusceptation\nintersystem\nintersystematical\nintertalk\nintertangle\nintertanglement\nintertarsal\ninterteam\nintertentacular\nintertergal\ninterterminal\ninterterritorial\nintertessellation\nintertexture\ninterthing\ninterthreaded\ninterthronging\nintertidal\nintertie\nintertill\nintertillage\nintertinge\nintertissued\nintertone\nintertongue\nintertonic\nintertouch\nintertown\nintertrabecular\nintertrace\nintertrade\nintertrading\nintertraffic\nintertragian\nintertransformability\nintertransformable\nintertransmissible\nintertransmission\nintertranspicuous\nintertransversal\nintertransversalis\nintertransversary\nintertransverse\nintertrappean\nintertribal\nintertriginous\nintertriglyph\nintertrigo\nintertrinitarian\nintertrochanteric\nintertropic\nintertropical\nintertropics\nintertrude\nintertuberal\nintertubercular\nintertubular\nintertwin\nintertwine\nintertwinement\nintertwining\nintertwiningly\nintertwist\nintertwistingly\nIntertype\ninterungular\ninterungulate\ninterunion\ninteruniversity\ninterurban\ninterureteric\nintervaginal\ninterval\nintervale\nintervalley\nintervallic\nintervallum\nintervalvular\nintervarietal\nintervary\nintervascular\nintervein\ninterveinal\nintervenant\nintervene\nintervener\nintervenience\ninterveniency\nintervenient\nintervenium\nintervention\ninterventional\ninterventionism\ninterventionist\ninterventive\ninterventor\ninterventral\ninterventralia\ninterventricular\nintervenular\ninterverbal\ninterversion\nintervert\nintervertebra\nintervertebral\nintervertebrally\nintervesicular\ninterview\ninterviewable\ninterviewee\ninterviewer\nintervillous\nintervisibility\nintervisible\nintervisit\nintervisitation\nintervital\nintervocal\nintervocalic\nintervolute\nintervolution\nintervolve\ninterwar\ninterweave\ninterweavement\ninterweaver\ninterweaving\ninterweavingly\ninterwed\ninterweld\ninterwhiff\ninterwhile\ninterwhistle\ninterwind\ninterwish\ninterword\ninterwork\ninterworks\ninterworld\ninterworry\ninterwound\ninterwove\ninterwoven\ninterwovenly\ninterwrap\ninterwreathe\ninterwrought\ninterxylary\ninterzonal\ninterzone\ninterzooecial\ninterzygapophysial\nintestable\nintestacy\nintestate\nintestation\nintestinal\nintestinally\nintestine\nintestineness\nintestiniform\nintestinovesical\nintext\nintextine\nintexture\ninthrall\ninthrallment\ninthrong\ninthronistic\ninthronization\ninthronize\ninthrow\ninthrust\nintil\nintima\nintimacy\nintimal\nintimate\nintimately\nintimateness\nintimater\nintimation\nintimidate\nintimidation\nintimidator\nintimidatory\nintimidity\nintimity\nintinction\nintine\nintitule\ninto\nintoed\nintolerability\nintolerable\nintolerableness\nintolerably\nintolerance\nintolerancy\nintolerant\nintolerantly\nintolerantness\nintolerated\nintolerating\nintoleration\nintonable\nintonate\nintonation\nintonator\nintone\nintonement\nintoner\nintoothed\nintorsion\nintort\nintortillage\nintown\nintoxation\nintoxicable\nintoxicant\nintoxicate\nintoxicated\nintoxicatedly\nintoxicatedness\nintoxicating\nintoxicatingly\nintoxication\nintoxicative\nintoxicator\nintrabiontic\nintrabranchial\nintrabred\nintrabronchial\nintrabuccal\nintracalicular\nintracanalicular\nintracanonical\nintracapsular\nintracardiac\nintracardial\nintracarpal\nintracarpellary\nintracartilaginous\nintracellular\nintracellularly\nintracephalic\nintracerebellar\nintracerebral\nintracerebrally\nintracervical\nintrachordal\nintracistern\nintracity\nintraclitelline\nintracloacal\nintracoastal\nintracoelomic\nintracolic\nintracollegiate\nintracommunication\nintracompany\nintracontinental\nintracorporeal\nintracorpuscular\nintracortical\nintracosmic\nintracosmical\nintracosmically\nintracostal\nintracranial\nintracranially\nintractability\nintractable\nintractableness\nintractably\nintractile\nintracutaneous\nintracystic\nintrada\nintradepartmental\nintradermal\nintradermally\nintradermic\nintradermically\nintradermo\nintradistrict\nintradivisional\nintrados\nintraduodenal\nintradural\nintraecclesiastical\nintraepiphyseal\nintraepithelial\nintrafactory\nintrafascicular\nintrafissural\nintrafistular\nintrafoliaceous\nintraformational\nintrafusal\nintragastric\nintragemmal\nintraglacial\nintraglandular\nintraglobular\nintragroup\nintragroupal\nintragyral\nintrahepatic\nintrahyoid\nintraimperial\nintrait\nintrajugular\nintralamellar\nintralaryngeal\nintralaryngeally\nintraleukocytic\nintraligamentary\nintraligamentous\nintralingual\nintralobar\nintralobular\nintralocular\nintralogical\nintralumbar\nintramammary\nintramarginal\nintramastoid\nintramatrical\nintramatrically\nintramedullary\nintramembranous\nintrameningeal\nintramental\nintrametropolitan\nintramolecular\nintramontane\nintramorainic\nintramundane\nintramural\nintramuralism\nintramuscular\nintramuscularly\nintramyocardial\nintranarial\nintranasal\nintranatal\nintranational\nintraneous\nintraneural\nintranidal\nintranquil\nintranquillity\nintranscalency\nintranscalent\nintransferable\nintransformable\nintransfusible\nintransgressible\nintransient\nintransigency\nintransigent\nintransigentism\nintransigentist\nintransigently\nintransitable\nintransitive\nintransitively\nintransitiveness\nintransitivity\nintranslatable\nintransmissible\nintransmutability\nintransmutable\nintransparency\nintransparent\nintrant\nintranuclear\nintraoctave\nintraocular\nintraoral\nintraorbital\nintraorganization\nintraossal\nintraosseous\nintraosteal\nintraovarian\nintrapair\nintraparenchymatous\nintraparietal\nintraparochial\nintraparty\nintrapelvic\nintrapericardiac\nintrapericardial\nintraperineal\nintraperiosteal\nintraperitoneal\nintraperitoneally\nintrapetiolar\nintraphilosophic\nintrapial\nintraplacental\nintraplant\nintrapleural\nintrapolar\nintrapontine\nintraprostatic\nintraprotoplasmic\nintrapsychic\nintrapsychical\nintrapsychically\nintrapulmonary\nintrapyretic\nintrarachidian\nintrarectal\nintrarelation\nintrarenal\nintraretinal\nintrarhachidian\nintraschool\nintrascrotal\nintrasegmental\nintraselection\nintrasellar\nintraseminal\nintraseptal\nintraserous\nintrashop\nintraspecific\nintraspinal\nintrastate\nintrastromal\nintrasusception\nintrasynovial\nintratarsal\nintratelluric\nintraterritorial\nintratesticular\nintrathecal\nintrathoracic\nintrathyroid\nintratomic\nintratonsillar\nintratrabecular\nintratracheal\nintratracheally\nintratropical\nintratubal\nintratubular\nintratympanic\nintravaginal\nintravalvular\nintravasation\nintravascular\nintravenous\nintravenously\nintraventricular\nintraverbal\nintraversable\nintravertebral\nintravertebrally\nintravesical\nintravital\nintravitelline\nintravitreous\nintraxylary\nintreat\nintrench\nintrenchant\nintrencher\nintrenchment\nintrepid\nintrepidity\nintrepidly\nintrepidness\nintricacy\nintricate\nintricately\nintricateness\nintrication\nintrigant\nintrigue\nintrigueproof\nintriguer\nintriguery\nintriguess\nintriguing\nintriguingly\nintrine\nintrinse\nintrinsic\nintrinsical\nintrinsicality\nintrinsically\nintrinsicalness\nintroactive\nintroceptive\nintroconversion\nintroconvertibility\nintroconvertible\nintrodden\nintroduce\nintroducee\nintroducement\nintroducer\nintroducible\nintroduction\nintroductive\nintroductively\nintroductor\nintroductorily\nintroductoriness\nintroductory\nintroductress\nintroflex\nintroflexion\nintrogression\nintrogressive\nintroinflection\nintroit\nintroitus\nintroject\nintrojection\nintrojective\nintromissibility\nintromissible\nintromission\nintromissive\nintromit\nintromittence\nintromittent\nintromitter\nintropression\nintropulsive\nintroreception\nintrorsal\nintrorse\nintrorsely\nintrosensible\nintrosentient\nintrospect\nintrospectable\nintrospection\nintrospectional\nintrospectionism\nintrospectionist\nintrospective\nintrospectively\nintrospectiveness\nintrospectivism\nintrospectivist\nintrospector\nintrosuction\nintrosuscept\nintrosusception\nintrothoracic\nintrotraction\nintrovenient\nintroverse\nintroversibility\nintroversible\nintroversion\nintroversive\nintroversively\nintrovert\nintroverted\nintrovertive\nintrovision\nintrovolution\nintrudance\nintrude\nintruder\nintruding\nintrudingly\nintrudress\nintruse\nintrusion\nintrusional\nintrusionism\nintrusionist\nintrusive\nintrusively\nintrusiveness\nintrust\nintubate\nintubation\nintubationist\nintubator\nintube\nintue\nintuent\nintuicity\nintuit\nintuitable\nintuition\nintuitional\nintuitionalism\nintuitionalist\nintuitionally\nintuitionism\nintuitionist\nintuitionistic\nintuitionless\nintuitive\nintuitively\nintuitiveness\nintuitivism\nintuitivist\nintumesce\nintumescence\nintumescent\ninturbidate\ninturn\ninturned\ninturning\nintussuscept\nintussusception\nintussusceptive\nintwist\ninula\ninulaceous\ninulase\ninulin\ninuloid\ninumbrate\ninumbration\ninunct\ninunction\ninunctum\ninunctuosity\ninunctuous\ninundable\ninundant\ninundate\ninundation\ninundator\ninundatory\ninunderstandable\ninurbane\ninurbanely\ninurbaneness\ninurbanity\ninure\ninured\ninuredness\ninurement\ninurn\ninusitate\ninusitateness\ninusitation\ninustion\ninutile\ninutilely\ninutility\ninutilized\ninutterable\ninvaccinate\ninvaccination\ninvadable\ninvade\ninvader\ninvaginable\ninvaginate\ninvagination\ninvalescence\ninvalid\ninvalidate\ninvalidation\ninvalidator\ninvalidcy\ninvalidhood\ninvalidish\ninvalidism\ninvalidity\ninvalidly\ninvalidness\ninvalidship\ninvalorous\ninvaluable\ninvaluableness\ninvaluably\ninvalued\nInvar\ninvariability\ninvariable\ninvariableness\ninvariably\ninvariance\ninvariancy\ninvariant\ninvariantive\ninvariantively\ninvariantly\ninvaried\ninvasion\ninvasionist\ninvasive\ninvecked\ninvected\ninvection\ninvective\ninvectively\ninvectiveness\ninvectivist\ninvector\ninveigh\ninveigher\ninveigle\ninveiglement\ninveigler\ninveil\ninvein\ninvendibility\ninvendible\ninvendibleness\ninvenient\ninvent\ninventable\ninventary\ninventer\ninventful\ninventibility\ninventible\ninventibleness\ninvention\ninventional\ninventionless\ninventive\ninventively\ninventiveness\ninventor\ninventoriable\ninventorial\ninventorially\ninventory\ninventress\ninventurous\ninveracious\ninveracity\ninverisimilitude\ninverity\ninverminate\ninvermination\ninvernacular\nInverness\ninversable\ninversatile\ninverse\ninversed\ninversedly\ninversely\ninversion\ninversionist\ninversive\ninvert\ninvertase\ninvertebracy\ninvertebral\nInvertebrata\ninvertebrate\ninvertebrated\ninverted\ninvertedly\ninvertend\ninverter\ninvertibility\ninvertible\ninvertile\ninvertin\ninvertive\ninvertor\ninvest\ninvestable\ninvestible\ninvestigable\ninvestigatable\ninvestigate\ninvestigating\ninvestigatingly\ninvestigation\ninvestigational\ninvestigative\ninvestigator\ninvestigatorial\ninvestigatory\ninvestitive\ninvestitor\ninvestiture\ninvestment\ninvestor\ninveteracy\ninveterate\ninveterately\ninveterateness\ninviability\ninvictive\ninvidious\ninvidiously\ninvidiousness\ninvigilance\ninvigilancy\ninvigilation\ninvigilator\ninvigor\ninvigorant\ninvigorate\ninvigorating\ninvigoratingly\ninvigoratingness\ninvigoration\ninvigorative\ninvigoratively\ninvigorator\ninvinate\ninvination\ninvincibility\ninvincible\ninvincibleness\ninvincibly\ninviolability\ninviolable\ninviolableness\ninviolably\ninviolacy\ninviolate\ninviolated\ninviolately\ninviolateness\ninvirile\ninvirility\ninvirtuate\ninviscate\ninviscation\ninviscid\ninviscidity\ninvised\ninvisibility\ninvisible\ninvisibleness\ninvisibly\ninvitable\ninvital\ninvitant\ninvitation\ninvitational\ninvitatory\ninvite\ninvitee\ninvitement\ninviter\ninvitiate\ninviting\ninvitingly\ninvitingness\ninvitress\ninvitrifiable\ninvivid\ninvocable\ninvocant\ninvocate\ninvocation\ninvocative\ninvocator\ninvocatory\ninvoice\ninvoke\ninvoker\ninvolatile\ninvolatility\ninvolucel\ninvolucellate\ninvolucellated\ninvolucral\ninvolucrate\ninvolucre\ninvolucred\ninvolucriform\ninvolucrum\ninvoluntarily\ninvoluntariness\ninvoluntary\ninvolute\ninvoluted\ninvolutedly\ninvolutely\ninvolution\ninvolutional\ninvolutionary\ninvolutorial\ninvolutory\ninvolve\ninvolved\ninvolvedly\ninvolvedness\ninvolvement\ninvolvent\ninvolver\ninvulnerability\ninvulnerable\ninvulnerableness\ninvulnerably\ninvultuation\ninwale\ninwall\ninwandering\ninward\ninwardly\ninwardness\ninwards\ninweave\ninwedged\ninweed\ninweight\ninwick\ninwind\ninwit\ninwith\ninwood\ninwork\ninworn\ninwound\ninwoven\ninwrap\ninwrapment\ninwreathe\ninwrit\ninwrought\ninyoite\ninyoke\nIo\nio\nIodamoeba\niodate\niodation\niodhydrate\niodhydric\niodhydrin\niodic\niodide\niodiferous\niodinate\niodination\niodine\niodinium\niodinophil\niodinophilic\niodinophilous\niodism\niodite\niodization\niodize\niodizer\niodo\niodobehenate\niodobenzene\niodobromite\niodocasein\niodochloride\niodochromate\niodocresol\niododerma\niodoethane\niodoform\niodogallicin\niodohydrate\niodohydric\niodohydrin\niodol\niodomercurate\niodomercuriate\niodomethane\niodometric\niodometrical\niodometry\niodonium\niodopsin\niodoso\niodosobenzene\niodospongin\niodotannic\niodotherapy\niodothyrin\niodous\niodoxy\niodoxybenzene\niodyrite\niolite\nion\nIone\nIoni\nIonian\nIonic\nionic\nIonicism\nIonicization\nIonicize\nIonidium\nIonism\nIonist\nionium\nionizable\nIonization\nionization\nIonize\nionize\nionizer\nionogen\nionogenic\nionone\nIonornis\nionosphere\nionospheric\nIonoxalis\niontophoresis\nIoskeha\niota\niotacism\niotacismus\niotacist\niotization\niotize\nIowa\nIowan\nIpalnemohuani\nipecac\nipecacuanha\nipecacuanhic\nIphimedia\nIphis\nipid\nIpidae\nipil\nipomea\nIpomoea\nipomoein\nipseand\nipsedixitish\nipsedixitism\nipsedixitist\nipseity\nipsilateral\nIra\niracund\niracundity\niracundulous\nirade\nIran\nIrani\nIranian\nIranic\nIranism\nIranist\nIranize\nIraq\nIraqi\nIraqian\nirascent\nirascibility\nirascible\nirascibleness\nirascibly\nirate\nirately\nire\nireful\nirefully\nirefulness\nIrelander\nireless\nIrena\nirenarch\nIrene\nirene\nirenic\nirenical\nirenically\nirenicism\nirenicist\nirenicon\nirenics\nirenicum\nIresine\nIrfan\nIrgun\nIrgunist\nirian\nIriartea\nIriarteaceae\nIricism\nIricize\nirid\nIridaceae\niridaceous\niridadenosis\niridal\niridalgia\niridate\niridauxesis\niridectome\niridectomize\niridectomy\niridectropium\niridemia\niridencleisis\niridentropium\nirideous\nirideremia\nirides\niridesce\niridescence\niridescency\niridescent\niridescently\niridial\niridian\niridiate\niridic\niridical\niridin\niridine\niridiocyte\niridiophore\niridioplatinum\niridious\niridite\niridium\niridization\niridize\niridoavulsion\niridocapsulitis\niridocele\niridoceratitic\niridochoroiditis\niridocoloboma\niridoconstrictor\niridocyclitis\niridocyte\niridodesis\niridodiagnosis\niridodialysis\niridodonesis\niridokinesia\niridomalacia\niridomotor\nIridomyrmex\niridoncus\niridoparalysis\niridophore\niridoplegia\niridoptosis\niridopupillary\niridorhexis\niridosclerotomy\niridosmine\niridosmium\niridotasis\niridotome\niridotomy\niris\nirisated\nirisation\niriscope\nirised\nIrish\nIrisher\nIrishian\nIrishism\nIrishize\nIrishly\nIrishman\nIrishness\nIrishry\nIrishwoman\nIrishy\nirisin\nirislike\nirisroot\niritic\niritis\nirk\nirksome\nirksomely\nirksomeness\nIrma\nIroha\nirok\niroko\niron\nironback\nironbark\nironbound\nironbush\nironclad\nirone\nironer\nironfisted\nironflower\nironhanded\nironhandedly\nironhandedness\nironhard\nironhead\nironheaded\nironhearted\nironheartedly\nironheartedness\nironical\nironically\nironicalness\nironice\nironish\nironism\nironist\nironize\nironless\nironlike\nironly\nironmaker\nironmaking\nironman\nironmaster\nironmonger\nironmongering\nironmongery\nironness\nironshod\nironshot\nironside\nironsided\nironsides\nironsmith\nironstone\nironware\nironweed\nironwood\nironwork\nironworked\nironworker\nironworking\nironworks\nironwort\nirony\nIroquoian\nIroquois\nIrpex\nirradiance\nirradiancy\nirradiant\nirradiate\nirradiated\nirradiatingly\nirradiation\nirradiative\nirradiator\nirradicable\nirradicate\nirrarefiable\nirrationability\nirrationable\nirrationably\nirrational\nirrationalism\nirrationalist\nirrationalistic\nirrationality\nirrationalize\nirrationally\nirrationalness\nirreality\nirrealizable\nirrebuttable\nirreceptive\nirreceptivity\nirreciprocal\nirreciprocity\nirreclaimability\nirreclaimable\nirreclaimableness\nirreclaimably\nirreclaimed\nirrecognition\nirrecognizability\nirrecognizable\nirrecognizably\nirrecognizant\nirrecollection\nirreconcilability\nirreconcilable\nirreconcilableness\nirreconcilably\nirreconcile\nirreconcilement\nirreconciliability\nirreconciliable\nirreconciliableness\nirreconciliably\nirreconciliation\nirrecordable\nirrecoverable\nirrecoverableness\nirrecoverably\nirrecusable\nirrecusably\nirredeemability\nirredeemable\nirredeemableness\nirredeemably\nirredeemed\nirredenta\nirredential\nIrredentism\nIrredentist\nirredressibility\nirredressible\nirredressibly\nirreducibility\nirreducible\nirreducibleness\nirreducibly\nirreductibility\nirreductible\nirreduction\nirreferable\nirreflection\nirreflective\nirreflectively\nirreflectiveness\nirreflexive\nirreformability\nirreformable\nirrefragability\nirrefragable\nirrefragableness\nirrefragably\nirrefrangibility\nirrefrangible\nirrefrangibleness\nirrefrangibly\nirrefusable\nirrefutability\nirrefutable\nirrefutableness\nirrefutably\nirregardless\nirregeneracy\nirregenerate\nirregeneration\nirregular\nirregularism\nirregularist\nirregularity\nirregularize\nirregularly\nirregularness\nirregulate\nirregulated\nirregulation\nirrelate\nirrelated\nirrelation\nirrelative\nirrelatively\nirrelativeness\nirrelevance\nirrelevancy\nirrelevant\nirrelevantly\nirreliability\nirrelievable\nirreligion\nirreligionism\nirreligionist\nirreligionize\nirreligiosity\nirreligious\nirreligiously\nirreligiousness\nirreluctant\nirremeable\nirremeably\nirremediable\nirremediableness\nirremediably\nirrememberable\nirremissibility\nirremissible\nirremissibleness\nirremissibly\nirremission\nirremissive\nirremovability\nirremovable\nirremovableness\nirremovably\nirremunerable\nirrenderable\nirrenewable\nirrenunciable\nirrepair\nirrepairable\nirreparability\nirreparable\nirreparableness\nirreparably\nirrepassable\nirrepealability\nirrepealable\nirrepealableness\nirrepealably\nirrepentance\nirrepentant\nirrepentantly\nirreplaceable\nirreplaceably\nirrepleviable\nirreplevisable\nirreportable\nirreprehensible\nirreprehensibleness\nirreprehensibly\nirrepresentable\nirrepresentableness\nirrepressibility\nirrepressible\nirrepressibleness\nirrepressibly\nirrepressive\nirreproachability\nirreproachable\nirreproachableness\nirreproachably\nirreproducible\nirreproductive\nirreprovable\nirreprovableness\nirreprovably\nirreptitious\nirrepublican\nirresilient\nirresistance\nirresistibility\nirresistible\nirresistibleness\nirresistibly\nirresoluble\nirresolubleness\nirresolute\nirresolutely\nirresoluteness\nirresolution\nirresolvability\nirresolvable\nirresolvableness\nirresolved\nirresolvedly\nirresonance\nirresonant\nirrespectability\nirrespectable\nirrespectful\nirrespective\nirrespectively\nirrespirable\nirrespondence\nirresponsibility\nirresponsible\nirresponsibleness\nirresponsibly\nirresponsive\nirresponsiveness\nirrestrainable\nirrestrainably\nirrestrictive\nirresultive\nirresuscitable\nirresuscitably\nirretention\nirretentive\nirretentiveness\nirreticence\nirreticent\nirretraceable\nirretraceably\nirretractable\nirretractile\nirretrievability\nirretrievable\nirretrievableness\nirretrievably\nirrevealable\nirrevealably\nirreverence\nirreverend\nirreverendly\nirreverent\nirreverential\nirreverentialism\nirreverentially\nirreverently\nirreversibility\nirreversible\nirreversibleness\nirreversibly\nirrevertible\nirreviewable\nirrevisable\nirrevocability\nirrevocable\nirrevocableness\nirrevocably\nirrevoluble\nirrigable\nirrigably\nirrigant\nirrigate\nirrigation\nirrigational\nirrigationist\nirrigative\nirrigator\nirrigatorial\nirrigatory\nirriguous\nirriguousness\nirrision\nirrisor\nIrrisoridae\nirrisory\nirritability\nirritable\nirritableness\nirritably\nirritament\nirritancy\nirritant\nirritate\nirritatedly\nirritating\nirritatingly\nirritation\nirritative\nirritativeness\nirritator\nirritatory\nIrritila\nirritomotile\nirritomotility\nirrorate\nirrotational\nirrotationally\nirrubrical\nirrupt\nirruptible\nirruption\nirruptive\nirruptively\nIrvin\nIrving\nIrvingesque\nIrvingiana\nIrvingism\nIrvingite\nIrwin\nis\nIsaac\nIsabel\nisabelina\nisabelita\nIsabella\nIsabelle\nIsabelline\nisabnormal\nisaconitine\nisacoustic\nisadelphous\nIsadora\nisagoge\nisagogic\nisagogical\nisagogically\nisagogics\nisagon\nIsaiah\nIsaian\nisallobar\nisallotherm\nisamine\nIsander\nisandrous\nisanemone\nisanomal\nisanomalous\nisanthous\nisapostolic\nIsaria\nisarioid\nisatate\nisatic\nisatide\nisatin\nisatinic\nIsatis\nisatogen\nisatogenic\nIsaurian\nIsawa\nisazoxy\nisba\nIscariot\nIscariotic\nIscariotical\nIscariotism\nischemia\nischemic\nischiac\nischiadic\nischiadicus\nischial\nischialgia\nischialgic\nischiatic\nischidrosis\nischioanal\nischiobulbar\nischiocapsular\nischiocaudal\nischiocavernosus\nischiocavernous\nischiocele\nischiocerite\nischiococcygeal\nischiofemoral\nischiofibular\nischioiliac\nischioneuralgia\nischioperineal\nischiopodite\nischiopubic\nischiopubis\nischiorectal\nischiorrhogic\nischiosacral\nischiotibial\nischiovaginal\nischiovertebral\nischium\nischocholia\nischuretic\nischuria\nischury\nIschyodus\nIsegrim\nisenergic\nisentropic\nisepiptesial\nisepiptesis\niserine\niserite\nisethionate\nisethionic\nIseum\nIsfahan\nIshmael\nIshmaelite\nIshmaelitic\nIshmaelitish\nIshmaelitism\nishpingo\nishshakku\nIsiac\nIsiacal\nIsidae\nisidiiferous\nisidioid\nisidiophorous\nisidiose\nisidium\nisidoid\nIsidore\nIsidorian\nIsidoric\nIsinai\nisindazole\nisinglass\nIsis\nIslam\nIslamic\nIslamism\nIslamist\nIslamistic\nIslamite\nIslamitic\nIslamitish\nIslamization\nIslamize\nisland\nislander\nislandhood\nislandic\nislandish\nislandless\nislandlike\nislandman\nislandress\nislandry\nislandy\nislay\nisle\nisleless\nislesman\nislet\nIsleta\nisleted\nisleward\nislot\nism\nIsmaelism\nIsmaelite\nIsmaelitic\nIsmaelitical\nIsmaelitish\nIsmaili\nIsmailian\nIsmailite\nismal\nismatic\nismatical\nismaticalness\nismdom\nismy\nIsnardia\niso\nisoabnormal\nisoagglutination\nisoagglutinative\nisoagglutinin\nisoagglutinogen\nisoalantolactone\nisoallyl\nisoamarine\nisoamide\nisoamyl\nisoamylamine\nisoamylene\nisoamylethyl\nisoamylidene\nisoantibody\nisoantigen\nisoapiole\nisoasparagine\nisoaurore\nisobar\nisobarbaloin\nisobarbituric\nisobare\nisobaric\nisobarism\nisobarometric\nisobase\nisobath\nisobathic\nisobathytherm\nisobathythermal\nisobathythermic\nisobenzofuran\nisobilateral\nisobilianic\nisobiogenetic\nisoborneol\nisobornyl\nisobront\nisobronton\nisobutane\nisobutyl\nisobutylene\nisobutyraldehyde\nisobutyrate\nisobutyric\nisobutyryl\nisocamphor\nisocamphoric\nisocaproic\nisocarbostyril\nIsocardia\nIsocardiidae\nisocarpic\nisocarpous\nisocellular\nisocephalic\nisocephalism\nisocephalous\nisocephaly\nisocercal\nisocercy\nisochasm\nisochasmic\nisocheim\nisocheimal\nisocheimenal\nisocheimic\nisocheimonal\nisochlor\nisochlorophyll\nisochlorophyllin\nisocholanic\nisocholesterin\nisocholesterol\nisochor\nisochoric\nisochromatic\nisochronal\nisochronally\nisochrone\nisochronic\nisochronical\nisochronism\nisochronize\nisochronon\nisochronous\nisochronously\nisochroous\nisocinchomeronic\nisocinchonine\nisocitric\nisoclasite\nisoclimatic\nisoclinal\nisocline\nisoclinic\nisocodeine\nisocola\nisocolic\nisocolon\nisocoria\nisocorybulbin\nisocorybulbine\nisocorydine\nisocoumarin\nisocracy\nisocrat\nisocratic\nisocreosol\nisocrotonic\nisocrymal\nisocryme\nisocrymic\nisocyanate\nisocyanic\nisocyanide\nisocyanine\nisocyano\nisocyanogen\nisocyanurate\nisocyanuric\nisocyclic\nisocymene\nisocytic\nisodactylism\nisodactylous\nisodiabatic\nisodialuric\nisodiametric\nisodiametrical\nisodiazo\nisodiazotate\nisodimorphic\nisodimorphism\nisodimorphous\nisodomic\nisodomous\nisodomum\nisodont\nisodontous\nisodrome\nisodulcite\nisodurene\nisodynamia\nisodynamic\nisodynamical\nisoelectric\nisoelectrically\nisoelectronic\nisoelemicin\nisoemodin\nisoenergetic\nisoerucic\nIsoetaceae\nIsoetales\nIsoetes\nisoeugenol\nisoflavone\nisoflor\nisogamete\nisogametic\nisogametism\nisogamic\nisogamous\nisogamy\nisogen\nisogenesis\nisogenetic\nisogenic\nisogenotype\nisogenotypic\nisogenous\nisogeny\nisogeotherm\nisogeothermal\nisogeothermic\nisogloss\nisoglossal\nisognathism\nisognathous\nisogon\nisogonal\nisogonality\nisogonally\nisogonic\nisogoniostat\nisogonism\nisograft\nisogram\nisograph\nisographic\nisographical\nisographically\nisography\nisogynous\nisohaline\nisohalsine\nisohel\nisohemopyrrole\nisoheptane\nisohesperidin\nisohexyl\nisohydric\nisohydrocyanic\nisohydrosorbic\nisohyet\nisohyetal\nisoimmune\nisoimmunity\nisoimmunization\nisoimmunize\nisoindazole\nisoindigotin\nisoindole\nisoionone\nisokeraunic\nisokeraunographic\nisokeraunophonic\nIsokontae\nisokontan\nisokurtic\nisolability\nisolable\nisolapachol\nisolate\nisolated\nisolatedly\nisolating\nisolation\nisolationism\nisolationist\nisolative\nIsolde\nisolecithal\nisoleucine\nisolichenin\nisolinolenic\nisologous\nisologue\nisology\nIsoloma\nisolysin\nisolysis\nisomagnetic\nisomaltose\nisomastigate\nisomelamine\nisomenthone\nisomer\nIsomera\nisomere\nisomeric\nisomerical\nisomerically\nisomeride\nisomerism\nisomerization\nisomerize\nisomeromorphism\nisomerous\nisomery\nisometric\nisometrical\nisometrically\nisometrograph\nisometropia\nisometry\nisomorph\nisomorphic\nisomorphism\nisomorphous\nIsomyaria\nisomyarian\nisoneph\nisonephelic\nisonergic\nisonicotinic\nisonitramine\nisonitrile\nisonitroso\nisonomic\nisonomous\nisonomy\nisonuclear\nisonym\nisonymic\nisonymy\nisooleic\nisoosmosis\nisopachous\nisopag\nisoparaffin\nisopectic\nisopelletierin\nisopelletierine\nisopentane\nisoperimeter\nisoperimetric\nisoperimetrical\nisoperimetry\nisopetalous\nisophanal\nisophane\nisophasal\nisophene\nisophenomenal\nisophoria\nisophorone\nisophthalic\nisophthalyl\nisophyllous\nisophylly\nisopicramic\nisopiestic\nisopiestically\nisopilocarpine\nisoplere\nisopleth\nIsopleura\nisopleural\nisopleuran\nisopleurous\nisopod\nIsopoda\nisopodan\nisopodiform\nisopodimorphous\nisopodous\nisopogonous\nisopolite\nisopolitical\nisopolity\nisopoly\nisoprene\nisopropenyl\nisopropyl\nisopropylacetic\nisopropylamine\nisopsephic\nisopsephism\nIsoptera\nisopterous\nisoptic\nisopulegone\nisopurpurin\nisopycnic\nisopyre\nisopyromucic\nisopyrrole\nisoquercitrin\nisoquinine\nisoquinoline\nisorcinol\nisorhamnose\nisorhodeose\nisorithm\nisorosindone\nisorrhythmic\nisorropic\nisosaccharic\nisosaccharin\nisoscele\nisosceles\nisoscope\nisoseismal\nisoseismic\nisoseismical\nisoseist\nisoserine\nisosmotic\nIsospondyli\nisospondylous\nisospore\nisosporic\nisosporous\nisospory\nisostasist\nisostasy\nisostatic\nisostatical\nisostatically\nisostemonous\nisostemony\nisostere\nisosteric\nisosterism\nisostrychnine\nisosuccinic\nisosulphide\nisosulphocyanate\nisosulphocyanic\nisosultam\nisotac\nisoteles\nisotely\nisotheral\nisothere\nisotherm\nisothermal\nisothermally\nisothermic\nisothermical\nisothermobath\nisothermobathic\nisothermous\nisotherombrose\nisothiocyanates\nisothiocyanic\nisothiocyano\nisothujone\nisotimal\nisotome\nisotomous\nisotonia\nisotonic\nisotonicity\nisotony\nisotope\nisotopic\nisotopism\nisotopy\nisotrehalose\nIsotria\nisotrimorphic\nisotrimorphism\nisotrimorphous\nisotron\nisotrope\nisotropic\nisotropism\nisotropous\nisotropy\nisotype\nisotypic\nisotypical\nisovalerate\nisovalerianate\nisovalerianic\nisovaleric\nisovalerone\nisovaline\nisovanillic\nisovoluminal\nisoxanthine\nisoxazine\nisoxazole\nisoxime\nisoxylene\nisoyohimbine\nisozooid\nispaghul\nispravnik\nIsrael\nIsraeli\nIsraelite\nIsraeliteship\nIsraelitic\nIsraelitish\nIsraelitism\nIsraelitize\nissanguila\nIssedoi\nIssedones\nissei\nissite\nissuable\nissuably\nissuance\nissuant\nissue\nissueless\nissuer\nissuing\nist\nisthmi\nIsthmia\nisthmial\nisthmian\nisthmiate\nisthmic\nisthmoid\nisthmus\nistiophorid\nIstiophoridae\nIstiophorus\nistle\nistoke\nIstrian\nIstvaeones\nisuret\nisuretine\nIsuridae\nisuroid\nIsurus\nIswara\nit\nIta\nitabirite\nitacism\nitacist\nitacistic\nitacolumite\nitaconate\nitaconic\nItala\nItali\nItalian\nItalianate\nItalianately\nItalianation\nItalianesque\nItalianish\nItalianism\nItalianist\nItalianity\nItalianization\nItalianize\nItalianizer\nItalianly\nItalic\nItalical\nItalically\nItalican\nItalicanist\nItalici\nItalicism\nitalicization\nitalicize\nitalics\nItaliote\nitalite\nItalomania\nItalon\nItalophile\nitamalate\nitamalic\nitatartaric\nitatartrate\nItaves\nitch\nitchiness\nitching\nitchingly\nitchless\nitchproof\nitchreed\nitchweed\nitchy\nitcze\nItea\nIteaceae\nItelmes\nitem\niteming\nitemization\nitemize\nitemizer\nitemy\nIten\nItenean\niter\niterable\niterance\niterancy\niterant\niterate\niteration\niterative\niteratively\niterativeness\nIthaca\nIthacan\nIthacensian\nithagine\nIthaginis\nither\nIthiel\nithomiid\nIthomiidae\nIthomiinae\nithyphallic\nIthyphallus\nithyphyllous\nitineracy\nitinerancy\nitinerant\nitinerantly\nitinerarian\nItinerarium\nitinerary\nitinerate\nitineration\nitmo\nIto\nItoism\nItoist\nItoland\nItonama\nItonaman\nItonia\nitonidid\nItonididae\nitoubou\nits\nitself\nIturaean\niturite\nItylus\nItys\nItza\nitzebu\niva\nIvan\nivied\nivin\nivoried\nivorine\nivoriness\nivorist\nivory\nivorylike\nivorytype\nivorywood\nivy\nivybells\nivyberry\nivyflower\nivylike\nivyweed\nivywood\nivywort\niwa\niwaiwa\niwis\nIxia\nIxiaceae\nIxiama\nIxil\nIxion\nIxionian\nIxodes\nixodian\nixodic\nixodid\nIxodidae\nIxora\niyo\nIzar\nizar\nizard\nIzcateco\nIzchak\nIzdubar\nizle\nizote\niztle\nIzumi\nizzard\nIzzy\nJ\nj\nJaalin\njab\nJabarite\njabbed\njabber\njabberer\njabbering\njabberingly\njabberment\nJabberwock\njabberwockian\nJabberwocky\njabbing\njabbingly\njabble\njabers\njabia\njabiru\njaborandi\njaborine\njabot\njaboticaba\njabul\njacal\nJacaltec\nJacalteca\njacamar\nJacamaralcyon\njacameropine\nJacamerops\njacami\njacamin\nJacana\njacana\nJacanidae\nJacaranda\njacare\njacate\njacchus\njacent\njacinth\njacinthe\nJack\njack\njackal\njackanapes\njackanapish\njackaroo\njackass\njackassery\njackassification\njackassism\njackassness\njackbird\njackbox\njackboy\njackdaw\njackeen\njacker\njacket\njacketed\njacketing\njacketless\njacketwise\njackety\njackfish\njackhammer\njackknife\njackleg\njackman\njacko\njackpudding\njackpuddinghood\njackrod\njacksaw\njackscrew\njackshaft\njackshay\njacksnipe\nJackson\nJacksonia\nJacksonian\nJacksonite\njackstay\njackstone\njackstraw\njacktan\njackweed\njackwood\nJacky\nJackye\nJacob\njacobaea\njacobaean\nJacobean\nJacobian\nJacobic\nJacobin\nJacobinia\nJacobinic\nJacobinical\nJacobinically\nJacobinism\nJacobinization\nJacobinize\nJacobite\nJacobitely\nJacobitiana\nJacobitic\nJacobitical\nJacobitically\nJacobitish\nJacobitishly\nJacobitism\njacobsite\nJacobson\njacobus\njacoby\njaconet\nJacqueminot\nJacques\njactance\njactancy\njactant\njactation\njactitate\njactitation\njacu\njacuaru\njaculate\njaculation\njaculative\njaculator\njaculatorial\njaculatory\njaculiferous\nJacunda\njacutinga\njadder\njade\njaded\njadedly\njadedness\njadeite\njadery\njadesheen\njadeship\njadestone\njadish\njadishly\njadishness\njady\njaeger\njag\nJaga\nJagannath\nJagannatha\njagat\nJagatai\nJagataic\nJagath\njager\njagged\njaggedly\njaggedness\njagger\njaggery\njaggy\njagir\njagirdar\njagla\njagless\njagong\njagrata\njagua\njaguar\njaguarete\nJahve\nJahvist\nJahvistic\njail\njailage\njailbird\njaildom\njailer\njaileress\njailering\njailership\njailhouse\njailish\njailkeeper\njaillike\njailmate\njailward\njailyard\nJaime\nJain\nJaina\nJainism\nJainist\nJaipuri\njajman\nJake\njake\njakes\njako\nJakob\nJakun\nJalalaean\njalap\njalapa\njalapin\njalkar\njalloped\njalopy\njalouse\njalousie\njalousied\njalpaite\nJam\njam\njama\nJamaica\nJamaican\njaman\njamb\njambalaya\njambeau\njambo\njambolan\njambone\njambool\njamboree\nJambos\njambosa\njambstone\njamdani\nJames\nJamesian\nJamesina\njamesonite\njami\nJamie\njamlike\njammedness\njammer\njammy\nJamnia\njampan\njampani\njamrosade\njamwood\nJan\njanapa\njanapan\nJane\njane\nJanet\njangada\nJanghey\njangkar\njangle\njangler\njangly\nJanice\njaniceps\nJaniculan\nJaniculum\nJaniform\njanissary\njanitor\njanitorial\njanitorship\njanitress\njanitrix\nJanizarian\nJanizary\njank\njanker\njann\njannock\nJanos\nJansenism\nJansenist\nJansenistic\nJansenistical\nJansenize\nJanthina\nJanthinidae\njantu\njanua\nJanuarius\nJanuary\nJanus\nJanuslike\njaob\nJap\njap\njapaconine\njapaconitine\nJapan\njapan\nJapanee\nJapanese\nJapanesque\nJapanesquely\nJapanesquery\nJapanesy\nJapanicize\nJapanism\nJapanization\nJapanize\njapanned\nJapanner\njapanner\njapannery\nJapannish\nJapanolatry\nJapanologist\nJapanology\nJapanophile\nJapanophobe\nJapanophobia\njape\njaper\njapery\nJapetus\nJapheth\nJaphetic\nJaphetide\nJaphetite\njaping\njapingly\njapish\njapishly\njapishness\nJaponic\njaponica\nJaponically\nJaponicize\nJaponism\nJaponize\nJaponizer\nJapygidae\njapygoid\nJapyx\nJaqueline\nJaquesian\njaquima\njar\njara\njaragua\njararaca\njararacussu\njarbird\njarble\njarbot\njardiniere\nJared\njarfly\njarful\njarg\njargon\njargonal\njargoneer\njargonelle\njargoner\njargonesque\njargonic\njargonish\njargonist\njargonistic\njargonium\njargonization\njargonize\njarkman\nJarl\njarl\njarldom\njarless\njarlship\nJarmo\njarnut\njarool\njarosite\njarra\njarrah\njarring\njarringly\njarringness\njarry\njarvey\nJarvis\njasey\njaseyed\nJasione\nJasminaceae\njasmine\njasmined\njasminewood\nJasminum\njasmone\nJason\njaspachate\njaspagate\nJasper\njasper\njasperated\njaspered\njasperize\njasperoid\njaspery\njaspidean\njaspideous\njaspilite\njaspis\njaspoid\njasponyx\njaspopal\njass\njassid\nJassidae\njassoid\nJat\njatamansi\nJateorhiza\njateorhizine\njatha\njati\nJatki\nJatni\njato\nJatropha\njatrophic\njatrorrhizine\nJatulian\njaudie\njauk\njaun\njaunce\njaunder\njaundice\njaundiceroot\njaunt\njauntie\njauntily\njauntiness\njauntingly\njaunty\njaup\nJava\nJavahai\njavali\nJavan\nJavanee\nJavanese\njavelin\njavelina\njaveline\njavelineer\njaver\nJavitero\njaw\njawab\njawbation\njawbone\njawbreaker\njawbreaking\njawbreakingly\njawed\njawfall\njawfallen\njawfish\njawfoot\njawfooted\njawless\njawsmith\njawy\nJay\njay\nJayant\nJayesh\njayhawk\njayhawker\njaypie\njaywalk\njaywalker\njazerant\nJazyges\njazz\njazzer\njazzily\njazziness\njazzy\njealous\njealously\njealousness\njealousy\nJeames\nJean\njean\nJean-Christophe\nJean-Pierre\nJeanette\nJeanie\nJeanne\nJeannette\nJeannie\nJeanpaulia\njeans\nJeany\nJebus\nJebusi\nJebusite\nJebusitic\nJebusitical\nJebusitish\njecoral\njecorin\njecorize\njed\njedcock\njedding\njeddock\njeel\njeep\njeer\njeerer\njeering\njeeringly\njeerproof\njeery\njeewhillijers\njeewhillikens\nJef\nJeff\njeff\njefferisite\nJeffersonia\nJeffersonian\nJeffersonianism\njeffersonite\nJeffery\nJeffie\nJeffrey\nJehovah\nJehovic\nJehovism\nJehovist\nJehovistic\njehu\njehup\njejunal\njejunator\njejune\njejunely\njejuneness\njejunitis\njejunity\njejunoduodenal\njejunoileitis\njejunostomy\njejunotomy\njejunum\njelab\njelerang\njelick\njell\njellica\njellico\njellied\njelliedness\njellification\njellify\njellily\njelloid\njelly\njellydom\njellyfish\njellyleaf\njellylike\nJelske\njelutong\nJem\njemadar\nJemez\nJemima\njemmily\njemminess\nJemmy\njemmy\nJenine\njenkin\njenna\njennerization\njennerize\njennet\njenneting\nJennie\njennier\nJennifer\nJenny\njenny\nJenson\njentacular\njeofail\njeopard\njeoparder\njeopardize\njeopardous\njeopardously\njeopardousness\njeopardy\njequirity\nJerahmeel\nJerahmeelites\nJerald\njerboa\njereed\njeremejevite\njeremiad\nJeremiah\nJeremian\nJeremianic\nJeremias\nJeremy\njerez\njerib\njerk\njerker\njerkily\njerkin\njerkined\njerkiness\njerkingly\njerkish\njerksome\njerkwater\njerky\njerl\njerm\njermonal\nJeroboam\nJerome\nJeromian\nJeronymite\njerque\njerquer\nJerrie\nJerry\njerry\njerryism\nJersey\njersey\nJerseyan\njerseyed\nJerseyite\nJerseyman\njert\nJerusalem\njervia\njervina\njervine\nJesper\nJess\njess\njessakeed\njessamine\njessamy\njessant\nJesse\nJessean\njessed\nJessica\nJessie\njessur\njest\njestbook\njestee\njester\njestful\njesting\njestingly\njestingstock\njestmonger\njestproof\njestwise\njestword\nJesu\nJesuate\nJesuit\nJesuited\nJesuitess\nJesuitic\nJesuitical\nJesuitically\nJesuitish\nJesuitism\nJesuitist\nJesuitize\nJesuitocracy\nJesuitry\nJesus\njet\njetbead\njete\nJethro\nJethronian\njetsam\njettage\njetted\njetter\njettied\njettiness\njettingly\njettison\njetton\njetty\njettyhead\njettywise\njetware\nJew\njewbird\njewbush\nJewdom\njewel\njeweler\njewelhouse\njeweling\njewelless\njewellike\njewelry\njewelsmith\njewelweed\njewely\nJewess\njewfish\nJewhood\nJewish\nJewishly\nJewishness\nJewism\nJewless\nJewlike\nJewling\nJewry\nJewship\nJewstone\nJewy\njezail\nJezebel\nJezebelian\nJezebelish\njezekite\njeziah\nJezreelite\njharal\njheel\njhool\njhow\nJhuria\nJi\nJianyun\njib\njibbah\njibber\njibbings\njibby\njibe\njibhead\njibi\njibman\njiboa\njibstay\njicama\nJicaque\nJicaquean\njicara\nJicarilla\njiff\njiffle\njiffy\njig\njigamaree\njigger\njiggerer\njiggerman\njiggers\njigget\njiggety\njigginess\njiggish\njiggle\njiggly\njiggumbob\njiggy\njiglike\njigman\njihad\njikungu\nJill\njillet\njillflirt\njilt\njiltee\njilter\njiltish\nJim\njimbang\njimberjaw\njimberjawed\njimjam\nJimmy\njimmy\njimp\njimply\njimpness\njimpricute\njimsedge\nJin\njina\njincamas\nJincan\nJinchao\njing\njingal\nJingbai\njingbang\njingle\njingled\njinglejangle\njingler\njinglet\njingling\njinglingly\njingly\njingo\njingodom\njingoish\njingoism\njingoist\njingoistic\njinja\njinjili\njink\njinker\njinket\njinkle\njinks\njinn\njinnestan\njinni\njinniwink\njinniyeh\nJinny\njinny\njinriki\njinrikiman\njinrikisha\njinshang\njinx\njipijapa\njipper\njiqui\njirble\njirga\nJiri\njirkinet\nJisheng\nJitendra\njiti\njitneur\njitneuse\njitney\njitneyman\njitro\njitter\njitterbug\njitters\njittery\njiva\nJivaran\nJivaro\nJivaroan\njive\njixie\nJo\njo\nJoachim\nJoachimite\nJoan\nJoanna\nJoanne\nJoannite\njoaquinite\nJob\njob\njobade\njobarbe\njobation\njobber\njobbernowl\njobbernowlism\njobbery\njobbet\njobbing\njobbish\njobble\njobholder\njobless\njoblessness\njobman\njobmaster\njobmistress\njobmonger\njobo\njobsmith\nJocasta\nJocelin\nJoceline\nJocelyn\njoch\nJochen\nJock\njock\njocker\njockey\njockeydom\njockeyish\njockeyism\njockeylike\njockeyship\njocko\njockteleg\njocoque\njocose\njocosely\njocoseness\njocoseriosity\njocoserious\njocosity\njocote\njocu\njocular\njocularity\njocularly\njocularness\njoculator\njocum\njocuma\njocund\njocundity\njocundly\njocundness\njodel\njodelr\njodhpurs\nJodo\nJoe\njoe\njoebush\nJoel\njoewood\nJoey\njoey\njog\njogger\njoggle\njoggler\njogglety\njogglework\njoggly\njogtrottism\nJohan\nJohann\nJohanna\nJohannean\nJohannes\njohannes\nJohannine\nJohannisberger\nJohannist\nJohannite\njohannite\nJohn\nJohnadreams\nJohnathan\nJohnian\njohnin\nJohnnie\nJohnny\njohnnycake\njohnnydom\nJohnsmas\nJohnsonese\nJohnsonian\nJohnsoniana\nJohnsonianism\nJohnsonianly\nJohnsonism\njohnstrupite\njoin\njoinable\njoinant\njoinder\njoiner\njoinery\njoining\njoiningly\njoint\njointage\njointed\njointedly\njointedness\njointer\njointing\njointist\njointless\njointly\njointress\njointure\njointureless\njointuress\njointweed\njointworm\njointy\njoist\njoisting\njoistless\njojoba\njoke\njokeless\njokelet\njokeproof\njoker\njokesmith\njokesome\njokesomeness\njokester\njokingly\njokish\njokist\njokul\njoky\njoll\njolleyman\njollier\njollification\njollify\njollily\njolliness\njollity\njollop\njolloped\njolly\njollytail\nJoloano\njolt\njolter\njolterhead\njolterheaded\njolterheadedness\njolthead\njoltiness\njolting\njoltingly\njoltless\njoltproof\njolty\nJon\nJonah\nJonahesque\nJonahism\nJonas\nJonathan\nJonathanization\nJones\nJonesian\nJong\njonglery\njongleur\nJoni\njonque\njonquil\njonquille\nJonsonian\nJonval\njonvalization\njonvalize\njookerie\njoola\njoom\nJoon\nJophiel\nJordan\njordan\nJordanian\njordanite\njoree\nJorge\nJorist\njorum\nJos\nJose\njosefite\njoseite\nJoseph\nJosepha\nJosephine\nJosephinism\njosephinite\nJosephism\nJosephite\nJosh\njosh\njosher\njoshi\nJoshua\nJosiah\njosie\nJosip\njoskin\njoss\njossakeed\njosser\njostle\njostlement\njostler\njot\njota\njotation\njotisi\nJotnian\njotter\njotting\njotty\njoubarb\nJoubert\njoug\njough\njouk\njoukerypawkery\njoule\njoulean\njoulemeter\njounce\njournal\njournalese\njournalish\njournalism\njournalist\njournalistic\njournalistically\njournalization\njournalize\njournalizer\njourney\njourneycake\njourneyer\njourneying\njourneyman\njourneywoman\njourneywork\njourneyworker\njours\njoust\njouster\nJova\nJove\nJovial\njovial\njovialist\njovialistic\njoviality\njovialize\njovially\njovialness\njovialty\nJovian\nJovianly\nJovicentric\nJovicentrical\nJovicentrically\njovilabe\nJoviniamish\nJovinian\nJovinianist\nJovite\njow\njowar\njowari\njowel\njower\njowery\njowl\njowler\njowlish\njowlop\njowly\njowpy\njowser\njowter\njoy\njoyance\njoyancy\njoyant\nJoyce\njoyful\njoyfully\njoyfulness\njoyhop\njoyleaf\njoyless\njoylessly\njoylessness\njoylet\njoyous\njoyously\njoyousness\njoyproof\njoysome\njoyweed\nJozy\nJu\nJuan\nJuang\njuba\njubate\njubbah\njubbe\njube\njuberous\njubilance\njubilancy\njubilant\njubilantly\njubilarian\njubilate\njubilatio\njubilation\njubilatory\njubilean\njubilee\njubilist\njubilization\njubilize\njubilus\njuck\njuckies\nJucuna\njucundity\njud\nJudaeomancy\nJudaeophile\nJudaeophilism\nJudaeophobe\nJudaeophobia\nJudah\nJudahite\nJudaic\nJudaica\nJudaical\nJudaically\nJudaism\nJudaist\nJudaistic\nJudaistically\nJudaization\nJudaize\nJudaizer\nJudas\nJudaslike\njudcock\nJude\nJudean\njudex\nJudge\njudge\njudgeable\njudgelike\njudger\njudgeship\njudgingly\njudgmatic\njudgmatical\njudgmatically\njudgment\nJudica\njudicable\njudicate\njudication\njudicative\njudicator\njudicatorial\njudicatory\njudicature\njudices\njudiciable\njudicial\njudiciality\njudicialize\njudicially\njudicialness\njudiciarily\njudiciary\njudicious\njudiciously\njudiciousness\nJudith\njudo\nJudophobism\nJudy\nJuergen\njufti\njug\nJuga\njugal\njugale\nJugatae\njugate\njugated\njugation\njuger\njugerum\njugful\njugger\nJuggernaut\njuggernaut\nJuggernautish\njuggins\njuggle\njugglement\njuggler\njugglery\njuggling\njugglingly\nJuglandaceae\njuglandaceous\nJuglandales\njuglandin\nJuglans\njuglone\njugular\nJugulares\njugulary\njugulate\njugulum\njugum\nJugurthine\nJuha\njuice\njuiceful\njuiceless\njuicily\njuiciness\njuicy\njujitsu\njuju\njujube\njujuism\njujuist\njuke\njukebox\nJule\njulep\nJules\nJuletta\nJulia\nJulian\nJuliana\nJuliane\nJulianist\nJulianto\njulid\nJulidae\njulidan\nJulie\nJulien\njulienite\njulienne\nJuliet\nJulietta\njulio\nJulius\njuloid\nJuloidea\njuloidian\njulole\njulolidin\njulolidine\njulolin\njuloline\nJulus\nJuly\nJulyflower\nJumada\nJumana\njumart\njumba\njumble\njumblement\njumbler\njumblingly\njumbly\njumbo\njumboesque\njumboism\njumbuck\njumby\njumelle\njument\njumentous\njumfru\njumillite\njumma\njump\njumpable\njumper\njumperism\njumpiness\njumpingly\njumpness\njumprock\njumpseed\njumpsome\njumpy\nJun\nJuncaceae\njuncaceous\nJuncaginaceae\njuncaginaceous\njuncagineous\njunciform\njuncite\nJunco\nJuncoides\njuncous\njunction\njunctional\njunctive\njuncture\nJuncus\nJune\njune\nJuneberry\nJunebud\njunectomy\nJuneflower\nJungermannia\nJungermanniaceae\njungermanniaceous\nJungermanniales\njungle\njungled\njungleside\njunglewards\njunglewood\njungli\njungly\njuniata\njunior\njuniorate\njuniority\njuniorship\njuniper\nJuniperaceae\nJuniperus\nJunius\njunk\njunkboard\nJunker\njunker\nJunkerdom\njunkerdom\njunkerish\nJunkerism\njunkerism\njunket\njunketer\njunketing\njunking\njunkman\nJuno\nJunoesque\nJunonia\nJunonian\njunt\njunta\njunto\njupati\njupe\nJupiter\njupon\nJur\nJura\njural\njurally\njurament\njuramentado\njuramental\njuramentally\njuramentum\nJurane\njurant\njurara\nJurassic\njurat\njuration\njurative\njurator\njuratorial\njuratory\njure\njurel\nJurevis\nJuri\njuridic\njuridical\njuridically\njuring\njurisconsult\njurisdiction\njurisdictional\njurisdictionalism\njurisdictionally\njurisdictive\njurisprudence\njurisprudent\njurisprudential\njurisprudentialist\njurisprudentially\njurist\njuristic\njuristical\njuristically\njuror\njurupaite\njury\njuryless\njuryman\njurywoman\njusquaboutisme\njusquaboutist\njussel\nJussi\nJussiaea\nJussiaean\nJussieuan\njussion\njussive\njussory\njust\njusten\njustice\njusticehood\njusticeless\njusticelike\njusticer\njusticeship\njusticeweed\nJusticia\njusticiability\njusticiable\njusticial\njusticiar\njusticiarship\njusticiary\njusticiaryship\njusticies\njustifiability\njustifiable\njustifiableness\njustifiably\njustification\njustificative\njustificator\njustificatory\njustifier\njustify\njustifying\njustifyingly\nJustin\nJustina\nJustine\nJustinian\nJustinianian\nJustinianist\njustly\njustment\njustness\njusto\nJustus\njut\nJute\njute\nJutic\nJutish\njutka\nJutlander\nJutlandish\njutting\njuttingly\njutty\nJuturna\nJuvavian\njuvenal\nJuvenalian\njuvenate\njuvenescence\njuvenescent\njuvenile\njuvenilely\njuvenileness\njuvenilify\njuvenilism\njuvenility\njuvenilize\nJuventas\njuventude\nJuverna\njuvia\njuvite\njuxtalittoral\njuxtamarine\njuxtapose\njuxtaposit\njuxtaposition\njuxtapositional\njuxtapositive\njuxtapyloric\njuxtaspinal\njuxtaterrestrial\njuxtatropical\nJuyas\nJuza\nJwahar\nJynginae\njyngine\nJynx\njynx\nK\nk\nka\nKababish\nKabaka\nkabaragoya\nKabard\nKabardian\nkabaya\nKabbeljaws\nkabel\nkaberu\nkabiet\nKabirpanthi\nKabistan\nKabonga\nkabuki\nKabuli\nKabyle\nKachari\nKachin\nkachin\nKadaga\nKadarite\nkadaya\nKadayan\nKaddish\nkadein\nkadikane\nkadischi\nKadmi\nkados\nKadu\nkaempferol\nKaf\nKafa\nkaferita\nKaffir\nkaffir\nkaffiyeh\nKaffraria\nKaffrarian\nKafir\nkafir\nKafiri\nkafirin\nkafiz\nKafka\nKafkaesque\nkafta\nkago\nkagu\nkaha\nkahar\nkahau\nkahikatea\nkahili\nkahu\nkahuna\nkai\nKaibab\nKaibartha\nkaid\nkaik\nkaikara\nkaikawaka\nkail\nkailyard\nkailyarder\nkailyardism\nKaimo\nKainah\nkainga\nkainite\nkainsi\nkainyn\nkairine\nkairoline\nkaiser\nkaiserdom\nkaiserism\nkaisership\nkaitaka\nKaithi\nkaiwhiria\nkaiwi\nKaj\nKajar\nkajawah\nkajugaru\nkaka\nKakan\nkakapo\nkakar\nkakarali\nkakariki\nKakatoe\nKakatoidae\nkakawahie\nkaki\nkakidrosis\nkakistocracy\nkakkak\nkakke\nkakortokite\nkala\nkaladana\nkalamalo\nkalamansanai\nKalamian\nKalanchoe\nKalandariyah\nKalang\nKalapooian\nkalashnikov\nkalasie\nKaldani\nkale\nkaleidophon\nkaleidophone\nkaleidoscope\nkaleidoscopic\nkaleidoscopical\nkaleidoscopically\nKalekah\nkalema\nKalendae\nkalends\nkalewife\nkaleyard\nkali\nkalian\nKaliana\nkaliborite\nkalidium\nkaliform\nkaligenous\nKalinga\nkalinite\nkaliophilite\nkalipaya\nKalispel\nkalium\nkallah\nkallege\nkallilite\nKallima\nkallitype\nKalmarian\nKalmia\nKalmuck\nkalo\nkalogeros\nkalokagathia\nkalon\nkalong\nkalpis\nkalsomine\nkalsominer\nkalumpang\nkalumpit\nKalwar\nkalymmaukion\nkalymmocyte\nkamachile\nkamacite\nkamahi\nkamala\nkamaloka\nkamansi\nkamao\nKamares\nkamarezite\nkamarupa\nkamarupic\nkamas\nKamasin\nKamass\nkamassi\nKamba\nkambal\nkamboh\nKamchadal\nKamchatkan\nkame\nkameeldoorn\nkameelthorn\nKamel\nkamelaukion\nkamerad\nkamias\nkamichi\nkamik\nkamikaze\nKamiya\nkammalan\nkammererite\nkamperite\nkampong\nkamptomorph\nkan\nkana\nkanae\nkanagi\nKanaka\nkanap\nkanara\nKanarese\nkanari\nkanat\nKanauji\nKanawari\nKanawha\nkanchil\nkande\nKandelia\nkandol\nkaneh\nkanephore\nkanephoros\nKaneshite\nKanesian\nkang\nkanga\nkangani\nkangaroo\nkangarooer\nKangli\nKanji\nKankanai\nkankie\nkannume\nkanoon\nKanred\nkans\nKansa\nKansan\nkantele\nkanteletar\nkanten\nKanthan\nKantian\nKantianism\nKantism\nKantist\nKanuri\nKanwar\nkaoliang\nkaolin\nkaolinate\nkaolinic\nkaolinite\nkaolinization\nkaolinize\nkapa\nkapai\nkapeika\nkapok\nkapp\nkappa\nkappe\nkappland\nkapur\nkaput\nKarabagh\nkaragan\nKaraism\nKaraite\nKaraitism\nkaraka\nKarakatchan\nKarakul\nkarakul\nKaramojo\nkaramu\nkaraoke\nKaratas\nkarate\nKaraya\nkaraya\nkarbi\nkarch\nkareao\nkareeta\nKarel\nkarela\nKarelian\nKaren\nKarharbari\nKari\nkarite\nKarl\nKarling\nKarluk\nkarma\nKarmathian\nkarmic\nkarmouth\nkaro\nkaross\nkarou\nkarree\nkarri\nKarroo\nkarroo\nkarrusel\nkarsha\nKarshuni\nKarst\nkarst\nkarstenite\nkarstic\nkartel\nKarthli\nkartometer\nkartos\nKartvel\nKartvelian\nkarwar\nKarwinskia\nkaryaster\nkaryenchyma\nkaryochrome\nkaryochylema\nkaryogamic\nkaryogamy\nkaryokinesis\nkaryokinetic\nkaryologic\nkaryological\nkaryologically\nkaryology\nkaryolymph\nKaryolysidae\nkaryolysis\nKaryolysus\nkaryolytic\nkaryomere\nkaryomerite\nkaryomicrosome\nkaryomitoic\nkaryomitome\nkaryomiton\nkaryomitosis\nkaryomitotic\nkaryon\nkaryoplasm\nkaryoplasma\nkaryoplasmatic\nkaryoplasmic\nkaryopyknosis\nkaryorrhexis\nkaryoschisis\nkaryosome\nkaryotin\nkaryotype\nkasa\nkasbah\nkasbeke\nkascamiol\nKasha\nKashan\nkasher\nkashga\nkashi\nkashima\nKashmiri\nKashmirian\nKashoubish\nkashruth\nKashube\nKashubian\nKashyapa\nkasida\nKasikumuk\nKaska\nKaskaskia\nkasm\nkasolite\nkassabah\nKassak\nKassite\nkassu\nkastura\nKasubian\nkat\nKatabanian\nkatabasis\nkatabatic\nkatabella\nkatabolic\nkatabolically\nkatabolism\nkatabolite\nkatabolize\nkatabothron\nkatachromasis\nkatacrotic\nkatacrotism\nkatagenesis\nkatagenetic\nkatakana\nkatakinesis\nkatakinetic\nkatakinetomer\nkatakinetomeric\nkatakiribori\nkatalase\nkatalysis\nkatalyst\nkatalytic\nkatalyze\nkatamorphism\nkataphoresis\nkataphoretic\nkataphoric\nkataphrenia\nkataplasia\nkataplectic\nkataplexy\nkatar\nkatastate\nkatastatic\nkatathermometer\nkatatonia\nkatatonic\nkatatype\nkatchung\nkatcina\nKate\nkath\nKatha\nkatha\nkathal\nKatharina\nKatharine\nkatharometer\nkatharsis\nkathartic\nkathemoglobin\nkathenotheism\nKathleen\nkathodic\nKathopanishad\nKathryn\nKathy\nKatie\nKatik\nKatinka\nkatipo\nKatipunan\nKatipuneros\nkatmon\nkatogle\nKatrine\nKatrinka\nkatsup\nKatsuwonidae\nkatuka\nKatukina\nkatun\nkaturai\nKaty\nkatydid\nKauravas\nkauri\nkava\nkavaic\nkavass\nKavi\nKaw\nkawaka\nKawchodinne\nkawika\nKay\nkay\nkayak\nkayaker\nKayan\nKayasth\nKayastha\nkayles\nkayo\nKayvan\nKazak\nkazi\nkazoo\nKazuhiro\nkea\nkeach\nkeacorn\nKeatsian\nkeawe\nkeb\nkebab\nkebbie\nkebbuck\nkechel\nkeck\nkeckle\nkeckling\nkecksy\nkecky\nked\nKedar\nKedarite\nkeddah\nkedge\nkedger\nkedgeree\nkedlock\nKedushshah\nKee\nkeech\nkeek\nkeeker\nkeel\nkeelage\nkeelbill\nkeelblock\nkeelboat\nkeelboatman\nkeeled\nkeeler\nkeelfat\nkeelhale\nkeelhaul\nkeelie\nkeeling\nkeelivine\nkeelless\nkeelman\nkeelrake\nkeelson\nkeen\nkeena\nkeened\nkeener\nkeenly\nkeenness\nkeep\nkeepable\nkeeper\nkeeperess\nkeepering\nkeeperless\nkeepership\nkeeping\nkeepsake\nkeepsaky\nkeepworthy\nkeerogue\nKees\nkeeshond\nkeest\nkeet\nkeeve\nKeewatin\nkef\nkeffel\nkefir\nkefiric\nKefti\nKeftian\nKeftiu\nkeg\nkegler\nkehaya\nkehillah\nkehoeite\nKeid\nkeilhauite\nkeita\nKeith\nkeitloa\nKekchi\nkekotene\nkekuna\nkelchin\nkeld\nKele\nkele\nkelebe\nkelectome\nkeleh\nkelek\nkelep\nKelima\nkelk\nkell\nkella\nkellion\nkellupweed\nKelly\nkelly\nkeloid\nkeloidal\nkelp\nkelper\nkelpfish\nkelpie\nkelpware\nkelpwort\nkelpy\nkelt\nkelter\nKeltoi\nkelty\nKelvin\nkelvin\nkelyphite\nKemal\nKemalism\nKemalist\nkemb\nkemp\nkemperyman\nkempite\nkemple\nkempster\nkempt\nkempy\nKen\nken\nkenaf\nKenai\nkenareh\nkench\nkend\nkendir\nkendyr\nKenelm\nKenipsim\nkenlore\nkenmark\nKenn\nKennebec\nkennebecker\nkennebunker\nKennedya\nkennel\nkennelly\nkennelman\nkenner\nKenneth\nkenning\nkenningwort\nkenno\nkeno\nkenogenesis\nkenogenetic\nkenogenetically\nkenogeny\nkenosis\nkenotic\nkenoticism\nkenoticist\nkenotism\nkenotist\nkenotoxin\nkenotron\nKenseikai\nkensington\nKensitite\nkenspac\nkenspeck\nkenspeckle\nKent\nkent\nkentallenite\nKentia\nKenticism\nKentish\nKentishman\nkentledge\nKenton\nkentrogon\nkentrolite\nKentuckian\nKentucky\nkenyte\nkep\nkepi\nKeplerian\nkept\nKer\nkeracele\nkeralite\nkerana\nkeraphyllocele\nkeraphyllous\nkerasin\nkerasine\nkerat\nkeratalgia\nkeratectasia\nkeratectomy\nKeraterpeton\nkeratin\nkeratinization\nkeratinize\nkeratinoid\nkeratinose\nkeratinous\nkeratitis\nkeratoangioma\nkeratocele\nkeratocentesis\nkeratoconjunctivitis\nkeratoconus\nkeratocricoid\nkeratode\nkeratodermia\nkeratogenic\nkeratogenous\nkeratoglobus\nkeratoglossus\nkeratohelcosis\nkeratohyal\nkeratoid\nKeratoidea\nkeratoiritis\nKeratol\nkeratoleukoma\nkeratolysis\nkeratolytic\nkeratoma\nkeratomalacia\nkeratome\nkeratometer\nkeratometry\nkeratomycosis\nkeratoncus\nkeratonosus\nkeratonyxis\nkeratophyre\nkeratoplastic\nkeratoplasty\nkeratorrhexis\nkeratoscope\nkeratoscopy\nkeratose\nkeratosis\nkeratotome\nkeratotomy\nkeratto\nkeraulophon\nkeraulophone\nKeraunia\nkeraunion\nkeraunograph\nkeraunographic\nkeraunography\nkeraunophone\nkeraunophonic\nkeraunoscopia\nkeraunoscopy\nkerbstone\nkerchief\nkerchiefed\nkerchoo\nkerchug\nkerchunk\nkerectomy\nkerel\nKeres\nKeresan\nKerewa\nkerf\nkerflap\nkerflop\nkerflummox\nKerite\nKermanji\nKermanshah\nkermes\nkermesic\nkermesite\nkermis\nkern\nkernel\nkerneled\nkernelless\nkernelly\nkerner\nkernetty\nkernish\nkernite\nkernos\nkerogen\nkerosene\nkerplunk\nKerri\nKerria\nkerrie\nkerrikerri\nkerril\nkerrite\nKerry\nkerry\nkersantite\nkersey\nkerseymere\nkerslam\nkerslosh\nkersmash\nkerugma\nkerwham\nkerygma\nkerygmatic\nkerykeion\nkerystic\nkerystics\nKeryx\nkesslerman\nkestrel\nket\nketa\nketal\nketapang\nketazine\nketch\nketchcraft\nketchup\nketembilla\nketen\nketene\nketimide\nketimine\nketipate\nketipic\nketo\nketogen\nketogenesis\nketogenic\nketoheptose\nketohexose\nketoketene\nketol\nketole\nketolysis\nketolytic\nketone\nketonemia\nketonic\nketonimid\nketonimide\nketonimin\nketonimine\nketonization\nketonize\nketonuria\nketose\nketoside\nketosis\nketosuccinic\nketoxime\nkette\nketting\nkettle\nkettlecase\nkettledrum\nkettledrummer\nkettleful\nkettlemaker\nkettlemaking\nkettler\nketty\nKetu\nketuba\nketupa\nketyl\nkeup\nKeuper\nkeurboom\nkevalin\nKevan\nkevel\nkevelhead\nKevin\nkevutzah\nKevyn\nKeweenawan\nkeweenawite\nkewpie\nkex\nkexy\nkey\nkeyage\nkeyboard\nkeyed\nkeyhole\nkeyless\nkeylet\nkeylock\nKeynesian\nKeynesianism\nkeynote\nkeynoter\nkeyseater\nkeyserlick\nkeysmith\nkeystone\nkeystoned\nKeystoner\nkeyway\nKha\nkhaddar\nkhadi\nkhagiarite\nkhahoon\nkhaiki\nkhair\nkhaja\nkhajur\nkhakanship\nkhaki\nkhakied\nKhaldian\nkhalifa\nKhalifat\nKhalkha\nkhalsa\nKhami\nkhamsin\nKhamti\nkhan\nkhanate\nkhanda\nkhandait\nkhanjar\nkhanjee\nkhankah\nkhansamah\nkhanum\nkhar\nkharaj\nKharia\nKharijite\nKharoshthi\nkharouba\nkharroubah\nKhartoumer\nkharua\nKharwar\nKhasa\nKhasi\nkhass\nkhat\nkhatib\nkhatri\nKhatti\nKhattish\nKhaya\nKhazar\nKhazarian\nkhediva\nkhedival\nkhedivate\nkhedive\nkhediviah\nkhedivial\nkhediviate\nkhepesh\nKherwari\nKherwarian\nkhet\nKhevzur\nkhidmatgar\nKhila\nkhilat\nkhir\nkhirka\nKhitan\nKhivan\nKhlysti\nKhmer\nKhoja\nkhoja\nkhoka\nKhokani\nKhond\nKhorassan\nkhot\nKhotan\nKhotana\nKhowar\nkhu\nKhuai\nkhubber\nkhula\nkhuskhus\nKhussak\nkhutbah\nkhutuktu\nKhuzi\nkhvat\nKhwarazmian\nkiack\nkiaki\nkialee\nkiang\nKiangan\nkiaugh\nkibber\nkibble\nkibbler\nkibblerman\nkibe\nkibei\nkibitka\nkibitz\nkibitzer\nkiblah\nkibosh\nkiby\nkick\nkickable\nKickapoo\nkickback\nkickee\nkicker\nkicking\nkickish\nkickless\nkickoff\nkickout\nkickseys\nkickshaw\nkickup\nKidder\nkidder\nKidderminster\nkiddier\nkiddish\nkiddush\nkiddushin\nkiddy\nkidhood\nkidlet\nkidling\nkidnap\nkidnapee\nkidnaper\nkidney\nkidneyroot\nkidneywort\nKids\nkidskin\nkidsman\nkiefekil\nKieffer\nkiekie\nkiel\nkier\nKieran\nkieselguhr\nkieserite\nkiestless\nkieye\nKiho\nkikar\nKikatsik\nkikawaeo\nkike\nKiki\nkiki\nKikki\nKikongo\nkiku\nkikuel\nkikumon\nKikuyu\nkil\nkiladja\nkilah\nkilampere\nkilan\nkilbrickenite\nkildee\nkilderkin\nkileh\nkilerg\nkiley\nKilhamite\nkilhig\nkiliare\nkilim\nkill\nkillable\nkilladar\nKillarney\nkillas\nkillcalf\nkillcrop\nkillcu\nkilldeer\nkilleekillee\nkilleen\nkiller\nkillick\nkillifish\nkilling\nkillingly\nkillingness\nkillinite\nkillogie\nkillweed\nkillwort\nkilly\nKilmarnock\nkiln\nkilneye\nkilnhole\nkilnman\nkilnrib\nkilo\nkiloampere\nkilobar\nkilocalorie\nkilocycle\nkilodyne\nkilogauss\nkilogram\nkilojoule\nkiloliter\nkilolumen\nkilometer\nkilometrage\nkilometric\nkilometrical\nkiloparsec\nkilostere\nkiloton\nkilovar\nkilovolt\nkilowatt\nkilp\nkilt\nkilter\nkiltie\nkilting\nKiluba\nKim\nkim\nkimbang\nkimberlin\nkimberlite\nKimberly\nKimbundu\nKimeridgian\nkimigayo\nKimmo\nkimnel\nkimono\nkimonoed\nkin\nkina\nkinaesthesia\nkinaesthesis\nkinah\nkinase\nkinbote\nKinch\nkinch\nkinchin\nkinchinmort\nkincob\nkind\nkindergarten\nkindergartener\nkindergartening\nkindergartner\nKinderhook\nkindheart\nkindhearted\nkindheartedly\nkindheartedness\nkindle\nkindler\nkindlesome\nkindlily\nkindliness\nkindling\nkindly\nkindness\nkindred\nkindredless\nkindredly\nkindredness\nkindredship\nkinematic\nkinematical\nkinematically\nkinematics\nkinematograph\nkinemometer\nkineplasty\nkinepox\nkinesalgia\nkinescope\nkinesiatric\nkinesiatrics\nkinesic\nkinesics\nkinesimeter\nkinesiologic\nkinesiological\nkinesiology\nkinesiometer\nkinesis\nkinesitherapy\nkinesodic\nkinesthesia\nkinesthesis\nkinesthetic\nkinetic\nkinetical\nkinetically\nkinetics\nkinetochore\nkinetogenesis\nkinetogenetic\nkinetogenetically\nkinetogenic\nkinetogram\nkinetograph\nkinetographer\nkinetographic\nkinetography\nkinetomer\nkinetomeric\nkinetonema\nkinetonucleus\nkinetophone\nkinetophonograph\nkinetoplast\nkinetoscope\nkinetoscopic\nKing\nking\nkingbird\nkingbolt\nkingcob\nkingcraft\nkingcup\nkingdom\nkingdomed\nkingdomful\nkingdomless\nkingdomship\nkingfish\nkingfisher\nkinghead\nkinghood\nkinghunter\nkingless\nkinglessness\nkinglet\nkinglihood\nkinglike\nkinglily\nkingliness\nkingling\nkingly\nkingmaker\nkingmaking\nkingpiece\nkingpin\nkingrow\nkingship\nkingsman\nKingu\nkingweed\nkingwood\nKinipetu\nkink\nkinkable\nkinkaider\nkinkajou\nkinkcough\nkinkhab\nkinkhost\nkinkily\nkinkiness\nkinkle\nkinkled\nkinkly\nkinksbush\nkinky\nkinless\nkinnikinnick\nkino\nkinofluous\nkinology\nkinoplasm\nkinoplasmic\nKinorhyncha\nkinospore\nKinosternidae\nKinosternon\nkinotannic\nkinsfolk\nkinship\nkinsman\nkinsmanly\nkinsmanship\nkinspeople\nkinswoman\nkintar\nKintyre\nkioea\nKioko\nkiosk\nkiotome\nKiowa\nKiowan\nKioway\nkip\nkipage\nKipchak\nkipe\nKiplingese\nKiplingism\nkippeen\nkipper\nkipperer\nkippy\nkipsey\nkipskin\nKiranti\nKirghiz\nKirghizean\nkiri\nKirillitsa\nkirimon\nKirk\nkirk\nkirker\nkirkify\nkirking\nkirkinhead\nkirklike\nkirkman\nkirktown\nkirkward\nkirkyard\nKirman\nkirmew\nkirn\nkirombo\nkirsch\nKirsten\nKirsty\nkirtle\nkirtled\nKirundi\nkirve\nkirver\nkischen\nkish\nKishambala\nkishen\nkishon\nkishy\nkiskatom\nKislev\nkismet\nkismetic\nkisra\nkiss\nkissability\nkissable\nkissableness\nkissage\nkissar\nkisser\nkissing\nkissingly\nkissproof\nkisswise\nkissy\nkist\nkistful\nkiswa\nKiswahili\nKit\nkit\nkitab\nkitabis\nKitalpha\nKitamat\nKitan\nkitar\nkitcat\nkitchen\nkitchendom\nkitchener\nkitchenette\nkitchenful\nkitchenless\nkitchenmaid\nkitchenman\nkitchenry\nkitchenward\nkitchenwards\nkitchenware\nkitchenwife\nkitcheny\nkite\nkiteflier\nkiteflying\nkith\nkithe\nkithless\nkitish\nKitkahaxki\nKitkehahki\nkitling\nKitlope\nKittatinny\nkittel\nkitten\nkittendom\nkittenhearted\nkittenhood\nkittenish\nkittenishly\nkittenishness\nkittenless\nkittenship\nkitter\nkittereen\nkitthoge\nkittiwake\nkittle\nkittlepins\nkittles\nkittlish\nkittly\nkittock\nkittul\nKitty\nkitty\nkittysol\nKitunahan\nkiva\nkiver\nkivikivi\nkivu\nKiwai\nKiwanian\nKiwanis\nkiwi\nkiwikiwi\nkiyas\nkiyi\nKizil\nKizilbash\nKjeldahl\nkjeldahlization\nkjeldahlize\nklafter\nklaftern\nklam\nKlamath\nKlan\nKlanism\nKlansman\nKlanswoman\nklaprotholite\nKlaskino\nKlaudia\nKlaus\nklavern\nKlaxon\nklaxon\nKlebsiella\nkleeneboc\nKleinian\nKleistian\nklendusic\nklendusity\nklendusive\nklepht\nklephtic\nklephtism\nkleptic\nkleptistic\nkleptomania\nkleptomaniac\nkleptomanist\nkleptophobia\nklicket\nKlikitat\nKling\nKlingsor\nklip\nklipbok\nklipdachs\nklipdas\nklipfish\nklippe\nklippen\nklipspringer\nklister\nklockmannite\nklom\nKlondike\nKlondiker\nklootchman\nklop\nklops\nklosh\nKluxer\nklystron\nkmet\nknab\nknabble\nknack\nknackebrod\nknacker\nknackery\nknacky\nknag\nknagged\nknaggy\nknap\nknapbottle\nknape\nknappan\nKnapper\nknapper\nknappish\nknappishly\nknapsack\nknapsacked\nknapsacking\nknapweed\nknar\nknark\nknarred\nknarry\nKnautia\nknave\nknavery\nknaveship\nknavess\nknavish\nknavishly\nknavishness\nknawel\nknead\nkneadability\nkneadable\nkneader\nkneading\nkneadingly\nknebelite\nknee\nkneebrush\nkneecap\nkneed\nkneehole\nkneel\nkneeler\nkneelet\nkneeling\nkneelingly\nkneepad\nkneepan\nkneepiece\nkneestone\nKneiffia\nKneippism\nknell\nknelt\nKnesset\nknet\nknew\nknez\nknezi\nkniaz\nkniazi\nknick\nknicker\nKnickerbocker\nknickerbockered\nknickerbockers\nknickered\nknickers\nknickknack\nknickknackatory\nknickknacked\nknickknackery\nknickknacket\nknickknackish\nknickknacky\nknickpoint\nknife\nknifeboard\nknifeful\nknifeless\nknifelike\nknifeman\nknifeproof\nknifer\nknifesmith\nknifeway\nknight\nknightage\nknightess\nknighthead\nknighthood\nKnightia\nknightless\nknightlihood\nknightlike\nknightliness\nknightling\nknightly\nknightship\nknightswort\nKniphofia\nKnisteneaux\nknit\nknitback\nknitch\nknitted\nknitter\nknitting\nknittle\nknitwear\nknitweed\nknitwork\nknived\nknivey\nknob\nknobbed\nknobber\nknobbiness\nknobble\nknobbler\nknobbly\nknobby\nknobkerrie\nknoblike\nknobstick\nknobstone\nknobular\nknobweed\nknobwood\nknock\nknockabout\nknockdown\nknockemdown\nknocker\nknocking\nknockless\nknockoff\nknockout\nknockstone\nknockup\nknoll\nknoller\nknolly\nknop\nknopite\nknopped\nknopper\nknoppy\nknopweed\nknorhaan\nKnorria\nknosp\nknosped\nKnossian\nknot\nknotberry\nknotgrass\nknothole\nknothorn\nknotless\nknotlike\nknotroot\nknotted\nknotter\nknottily\nknottiness\nknotting\nknotty\nknotweed\nknotwork\nknotwort\nknout\nknow\nknowability\nknowable\nknowableness\nknowe\nknower\nknowing\nknowingly\nknowingness\nknowledge\nknowledgeable\nknowledgeableness\nknowledgeably\nknowledged\nknowledgeless\nknowledgement\nknowledging\nknown\nknowperts\nKnoxian\nKnoxville\nknoxvillite\nknub\nknubbly\nknubby\nknublet\nknuckle\nknucklebone\nknuckled\nknuckler\nknuckling\nknuckly\nknuclesome\nKnudsen\nknur\nknurl\nknurled\nknurling\nknurly\nKnut\nknut\nKnute\nknutty\nknyaz\nknyazi\nKo\nko\nkoa\nkoae\nkoala\nkoali\nKoasati\nkob\nkoban\nkobellite\nkobi\nkobird\nkobold\nkobong\nkobu\nKobus\nKoch\nKochab\nKochia\nkochliarion\nkoda\nKodagu\nKodak\nkodak\nkodaker\nkodakist\nkodakry\nKodashim\nkodro\nkodurite\nKoeberlinia\nKoeberliniaceae\nkoeberliniaceous\nkoechlinite\nKoeksotenok\nkoel\nKoellia\nKoelreuteria\nkoenenite\nKoeri\nkoff\nkoft\nkoftgar\nkoftgari\nkoggelmannetje\nKogia\nKohathite\nKoheleth\nkohemp\nKohen\nKohistani\nKohl\nkohl\nKohlan\nkohlrabi\nkohua\nkoi\nKoiari\nKoibal\nkoil\nkoila\nkoilanaglyphic\nkoilon\nkoimesis\nKoine\nkoine\nkoinon\nkoinonia\nKoipato\nKoitapu\nkojang\nKojiki\nkokako\nkokam\nkokan\nkokerboom\nkokil\nkokio\nkoklas\nkoklass\nKoko\nkoko\nkokoon\nKokoona\nkokoromiko\nkokowai\nkokra\nkoksaghyz\nkoku\nkokum\nkokumin\nkokumingun\nKol\nkola\nkolach\nKolarian\nKoldaji\nkolea\nkoleroga\nkolhoz\nKoli\nkolinski\nkolinsky\nKolis\nkolkhos\nkolkhoz\nKolkka\nkollast\nkollaster\nkoller\nkollergang\nkolo\nkolobion\nkolobus\nkolokolo\nkolsun\nkoltunna\nkoltunnor\nKoluschan\nKolush\nKomati\nkomatik\nkombu\nKome\nKomi\nkominuter\nkommetje\nkommos\nkomondor\nkompeni\nKomsomol\nkon\nkona\nkonak\nKonariot\nKonde\nKongo\nKongoese\nKongolese\nkongoni\nkongsbergite\nkongu\nKonia\nKoniaga\nKoniga\nkonimeter\nkoninckite\nkonini\nkoniology\nkoniscope\nkonjak\nKonkani\nKonomihu\nKonrad\nkonstantin\nKonstantinos\nkontakion\nKonyak\nkooka\nkookaburra\nkookeree\nkookery\nkookri\nkoolah\nkooletah\nkooliman\nkoolokamba\nKoolooly\nkoombar\nkoomkie\nKoorg\nkootcha\nKootenay\nkop\nKopagmiut\nkopeck\nkoph\nkopi\nkoppa\nkoppen\nkoppite\nKoprino\nkor\nKora\nkora\nkoradji\nKorah\nKorahite\nKorahitic\nkorait\nkorakan\nKoran\nKorana\nKoranic\nKoranist\nkorari\nKore\nkore\nKorean\nkorec\nkoreci\nKoreish\nKoreishite\nkorero\nKoreshan\nKoreshanity\nkori\nkorimako\nkorin\nKornephorus\nkornerupine\nkornskeppa\nkornskeppur\nkorntonde\nkorntonder\nkorntunna\nkorntunnur\nKoroa\nkoromika\nkoromiko\nkorona\nkorova\nkorrel\nkorrigum\nkorumburra\nkoruna\nKorwa\nKory\nKoryak\nkorymboi\nkorymbos\nkorzec\nkos\nKosalan\nKoschei\nkosher\nKosimo\nkosin\nkosmokrator\nKoso\nkosong\nkosotoxin\nKossaean\nKossean\nKosteletzkya\nkoswite\nKota\nkotal\nKotar\nkoto\nKotoko\nkotschubeite\nkottigite\nkotuku\nkotukutuku\nkotwal\nkotwalee\nkotyle\nkotylos\nkou\nkoulan\nKoungmiut\nkouza\nkovil\nKowagmiut\nkowhai\nkowtow\nkoyan\nkozo\nKpuesi\nKra\nkra\nkraal\nkraft\nKrag\nkragerite\nkrageroite\nkrait\nkraken\nkrakowiak\nkral\nKrama\nkrama\nKrameria\nKrameriaceae\nkrameriaceous\nkran\nkrantzite\nKrapina\nkras\nkrasis\nkratogen\nkratogenic\nKraunhia\nkraurite\nkraurosis\nkraurotic\nkrausen\nkrausite\nkraut\nkreis\nKreistag\nkreistle\nkreittonite\nkrelos\nkremersite\nkremlin\nkrems\nkreng\nkrennerite\nKrepi\nkreplech\nkreutzer\nkriegspiel\nkrieker\nKrigia\nkrimmer\nkrina\nKriophoros\nKris\nKrishna\nKrishnaism\nKrishnaist\nKrishnaite\nKrishnaitic\nKristen\nKristi\nKristian\nKristin\nKristinaux\nkrisuvigite\nkritarchy\nKrithia\nKriton\nkritrima\nkrobyloi\nkrobylos\nkrocket\nkrohnkite\nkrome\nkromeski\nkromogram\nkromskop\nkrona\nkrone\nkronen\nkroner\nKronion\nkronor\nkronur\nKroo\nkroon\nkrosa\nkrouchka\nkroushka\nKru\nKrugerism\nKrugerite\nKruman\nkrummhorn\nkryokonite\nkrypsis\nkryptic\nkrypticism\nkryptocyanine\nkryptol\nkryptomere\nkrypton\nKrzysztof\nKshatriya\nKshatriyahood\nKua\nKuan\nkuan\nKuar\nKuba\nkuba\nKubachi\nKubanka\nkubba\nKubera\nkubuklion\nKuchean\nkuchen\nkudize\nkudos\nKudrun\nkudu\nkudzu\nKuehneola\nkuei\nKufic\nkuge\nkugel\nKuhnia\nKui\nkuichua\nKuki\nkukoline\nkukri\nkuku\nkukui\nKukulcan\nkukupa\nKukuruku\nkula\nkulack\nKulah\nkulah\nkulaite\nkulak\nkulakism\nKulanapan\nkulang\nKuldip\nKuli\nkulimit\nkulkarni\nkullaite\nKullani\nkulm\nkulmet\nKulturkampf\nKulturkreis\nKuman\nkumbi\nkumhar\nkumiss\nkummel\nKumni\nkumquat\nkumrah\nKumyk\nkunai\nKunbi\nKundry\nKuneste\nkung\nkunk\nkunkur\nKunmiut\nkunzite\nKuomintang\nkupfernickel\nkupfferite\nkuphar\nkupper\nKuranko\nkurbash\nkurchicine\nkurchine\nKurd\nKurdish\nKurdistan\nkurgan\nKuri\nKurilian\nKurku\nkurmburra\nKurmi\nKuroshio\nkurrajong\nKurt\nkurtosis\nKuruba\nKurukh\nkuruma\nkurumaya\nKurumba\nkurung\nkurus\nkurvey\nkurveyor\nkusa\nkusam\nKusan\nkusha\nKushshu\nkusimansel\nkuskite\nkuskos\nkuskus\nKuskwogmiut\nKustenau\nkusti\nKusum\nkusum\nkutcha\nKutchin\nKutenai\nkuttab\nkuttar\nkuttaur\nkuvasz\nKuvera\nkvass\nkvint\nkvinter\nKwakiutl\nkwamme\nkwan\nKwannon\nKwapa\nkwarta\nkwarterka\nkwazoku\nkyack\nkyah\nkyar\nkyat\nkyaung\nKybele\nKyklopes\nKyklops\nkyl\nKyle\nkyle\nkylite\nkylix\nKylo\nkymation\nkymatology\nkymbalon\nkymogram\nkymograph\nkymographic\nkynurenic\nkynurine\nkyphoscoliosis\nkyphoscoliotic\nKyphosidae\nkyphosis\nkyphotic\nKyrie\nkyrine\nkyschtymite\nkyte\nKyu\nKyung\nKyurin\nKyurinish\nL\nl\nla\nlaager\nlaang\nlab\nLaban\nlabara\nlabarum\nlabba\nlabber\nlabdacism\nlabdacismus\nlabdanum\nlabefact\nlabefactation\nlabefaction\nlabefy\nlabel\nlabeler\nlabella\nlabellate\nlabeller\nlabelloid\nlabellum\nlabia\nlabial\nlabialism\nlabialismus\nlabiality\nlabialization\nlabialize\nlabially\nLabiatae\nlabiate\nlabiated\nlabidophorous\nLabidura\nLabiduridae\nlabiella\nlabile\nlability\nlabilization\nlabilize\nlabioalveolar\nlabiocervical\nlabiodental\nlabioglossal\nlabioglossolaryngeal\nlabioglossopharyngeal\nlabiograph\nlabioguttural\nlabiolingual\nlabiomancy\nlabiomental\nlabionasal\nlabiopalatal\nlabiopalatalize\nlabiopalatine\nlabiopharyngeal\nlabioplasty\nlabiose\nlabiotenaculum\nlabiovelar\nlabioversion\nlabis\nlabium\nlablab\nlabor\nlaborability\nlaborable\nlaborage\nlaborant\nlaboratorial\nlaboratorian\nlaboratory\nlabordom\nlabored\nlaboredly\nlaboredness\nlaborer\nlaboress\nlaborhood\nlaboring\nlaboringly\nlaborious\nlaboriously\nlaboriousness\nlaborism\nlaborist\nlaborite\nlaborless\nlaborous\nlaborously\nlaborousness\nlaborsaving\nlaborsome\nlaborsomely\nlaborsomeness\nLaboulbenia\nLaboulbeniaceae\nlaboulbeniaceous\nLaboulbeniales\nlabour\nlabra\nLabrador\nLabradorean\nlabradorite\nlabradoritic\nlabral\nlabret\nlabretifery\nLabridae\nlabroid\nLabroidea\nlabrosaurid\nlabrosauroid\nLabrosaurus\nlabrose\nlabrum\nLabrus\nlabrusca\nlabrys\nLaburnum\nlabyrinth\nlabyrinthal\nlabyrinthally\nlabyrinthian\nlabyrinthibranch\nlabyrinthibranchiate\nLabyrinthibranchii\nlabyrinthic\nlabyrinthical\nlabyrinthically\nLabyrinthici\nlabyrinthiform\nlabyrinthine\nlabyrinthitis\nLabyrinthodon\nlabyrinthodont\nLabyrinthodonta\nlabyrinthodontian\nlabyrinthodontid\nlabyrinthodontoid\nLabyrinthula\nLabyrinthulidae\nlac\nlacca\nlaccaic\nlaccainic\nlaccase\nlaccol\nlaccolith\nlaccolithic\nlaccolitic\nlace\nlacebark\nlaced\nLacedaemonian\nlaceflower\nlaceleaf\nlaceless\nlacelike\nlacemaker\nlacemaking\nlaceman\nlacepiece\nlacepod\nlacer\nlacerability\nlacerable\nlacerant\nlacerate\nlacerated\nlacerately\nlaceration\nlacerative\nLacerta\nLacertae\nlacertian\nLacertid\nLacertidae\nlacertiform\nLacertilia\nlacertilian\nlacertiloid\nlacertine\nlacertoid\nlacertose\nlacery\nlacet\nlacewing\nlacewoman\nlacewood\nlacework\nlaceworker\nlaceybark\nlache\nLachenalia\nlaches\nLachesis\nLachnanthes\nLachnosterna\nlachryma\nlachrymae\nlachrymaeform\nlachrymal\nlachrymally\nlachrymalness\nlachrymary\nlachrymation\nlachrymator\nlachrymatory\nlachrymiform\nlachrymist\nlachrymogenic\nlachrymonasal\nlachrymosal\nlachrymose\nlachrymosely\nlachrymosity\nlachrymous\nlachsa\nlacily\nLacinaria\nlaciness\nlacing\nlacinia\nlaciniate\nlaciniated\nlaciniation\nlaciniform\nlaciniola\nlaciniolate\nlaciniose\nlacinula\nlacinulate\nlacinulose\nlacis\nlack\nlackadaisical\nlackadaisicality\nlackadaisically\nlackadaisicalness\nlackadaisy\nlackaday\nlacker\nlackey\nlackeydom\nlackeyed\nlackeyism\nlackeyship\nlackland\nlackluster\nlacklusterness\nlacklustrous\nlacksense\nlackwit\nlackwittedly\nlackwittedness\nlacmoid\nlacmus\nLaconian\nLaconic\nlaconic\nlaconica\nlaconically\nlaconicalness\nlaconicism\nlaconicum\nlaconism\nlaconize\nlaconizer\nLacosomatidae\nlacquer\nlacquerer\nlacquering\nlacquerist\nlacroixite\nlacrosse\nlacrosser\nlacrym\nlactagogue\nlactalbumin\nlactam\nlactamide\nlactant\nlactarene\nlactarious\nlactarium\nLactarius\nlactary\nlactase\nlactate\nlactation\nlactational\nlacteal\nlactean\nlactenin\nlacteous\nlactesce\nlactescence\nlactescency\nlactescent\nlactic\nlacticinia\nlactid\nlactide\nlactiferous\nlactiferousness\nlactific\nlactifical\nlactification\nlactiflorous\nlactifluous\nlactiform\nlactifuge\nlactify\nlactigenic\nlactigenous\nlactigerous\nlactim\nlactimide\nlactinate\nlactivorous\nlacto\nlactobacilli\nLactobacillus\nlactobacillus\nlactobutyrometer\nlactocele\nlactochrome\nlactocitrate\nlactodensimeter\nlactoflavin\nlactoglobulin\nlactoid\nlactol\nlactometer\nlactone\nlactonic\nlactonization\nlactonize\nlactophosphate\nlactoproteid\nlactoprotein\nlactoscope\nlactose\nlactoside\nlactosuria\nlactothermometer\nlactotoxin\nlactovegetarian\nLactuca\nlactucarium\nlactucerin\nlactucin\nlactucol\nlactucon\nlactyl\nlacuna\nlacunae\nlacunal\nlacunar\nlacunaria\nlacunary\nlacune\nlacunose\nlacunosity\nlacunule\nlacunulose\nlacuscular\nlacustral\nlacustrian\nlacustrine\nlacwork\nlacy\nlad\nLadakhi\nladakin\nladanigerous\nladanum\nladder\nladdered\nladdering\nladderlike\nladderway\nladderwise\nladdery\nladdess\nladdie\nladdikie\nladdish\nladdock\nlade\nlademan\nladen\nlader\nladhood\nladies\nladify\nLadik\nLadin\nlading\nLadino\nladkin\nladle\nladleful\nladler\nladlewood\nladrone\nladronism\nladronize\nlady\nladybird\nladybug\nladyclock\nladydom\nladyfinger\nladyfish\nladyfly\nladyfy\nladyhood\nladyish\nladyism\nladykin\nladykind\nladyless\nladylike\nladylikely\nladylikeness\nladyling\nladylintywhite\nladylove\nladyly\nladyship\nLadytide\nLaelia\nlaemodipod\nLaemodipoda\nlaemodipodan\nlaemodipodiform\nlaemodipodous\nlaemoparalysis\nlaemostenosis\nlaeotropic\nlaeotropism\nLaestrygones\nlaet\nlaeti\nlaetic\nLaevigrada\nlaevoduction\nlaevogyrate\nlaevogyre\nlaevogyrous\nlaevolactic\nlaevorotation\nlaevorotatory\nlaevotartaric\nlaevoversion\nlafayette\nLafite\nlag\nlagan\nlagarto\nlagen\nlagena\nLagenaria\nlagend\nlageniform\nlager\nLagerstroemia\nLagetta\nlagetto\nlaggar\nlaggard\nlaggardism\nlaggardly\nlaggardness\nlagged\nlaggen\nlagger\nlaggin\nlagging\nlaglast\nlagna\nlagniappe\nlagomorph\nLagomorpha\nlagomorphic\nlagomorphous\nLagomyidae\nlagonite\nlagoon\nlagoonal\nlagoonside\nlagophthalmos\nlagopode\nlagopodous\nlagopous\nLagopus\nLagorchestes\nlagostoma\nLagostomus\nLagothrix\nLagrangian\nLagthing\nLagting\nLaguncularia\nLagunero\nLagurus\nlagwort\nLahnda\nLahontan\nLahuli\nLai\nlai\nLaibach\nlaic\nlaical\nlaicality\nlaically\nlaich\nlaicism\nlaicity\nlaicization\nlaicize\nlaicizer\nlaid\nlaigh\nlain\nlaine\nlaiose\nlair\nlairage\nlaird\nlairdess\nlairdie\nlairdly\nlairdocracy\nlairdship\nlairless\nlairman\nlairstone\nlairy\nlaitance\nlaity\nLak\nlak\nlakarpite\nlakatoi\nlake\nlakeland\nlakelander\nlakeless\nlakelet\nlakelike\nlakemanship\nlaker\nlakeside\nlakeward\nlakeweed\nlakie\nlaking\nlakish\nlakishness\nlakism\nlakist\nLakota\nLakshmi\nlaky\nlalang\nlall\nLallan\nLalland\nlallation\nlalling\nlalo\nlaloneurosis\nlalopathy\nlalophobia\nlaloplegia\nlam\nlama\nlamaic\nLamaism\nLamaist\nLamaistic\nLamaite\nLamanism\nLamanite\nLamano\nlamantin\nlamany\nLamarckia\nLamarckian\nLamarckianism\nLamarckism\nlamasary\nlamasery\nlamastery\nlamb\nLamba\nlamba\nLambadi\nlambale\nlambaste\nlambda\nlambdacism\nlambdoid\nlambdoidal\nlambeau\nlambency\nlambent\nlambently\nlamber\nLambert\nlambert\nlambhood\nlambie\nlambiness\nlambish\nlambkill\nlambkin\nLamblia\nlambliasis\nlamblike\nlambling\nlambly\nlamboys\nlambrequin\nlambsdown\nlambskin\nlambsuccory\nlamby\nlame\nlamedh\nlameduck\nlamel\nlamella\nlamellar\nLamellaria\nLamellariidae\nlamellarly\nlamellary\nlamellate\nlamellated\nlamellately\nlamellation\nlamellibranch\nLamellibranchia\nLamellibranchiata\nlamellibranchiate\nlamellicorn\nlamellicornate\nLamellicornes\nLamellicornia\nlamellicornous\nlamelliferous\nlamelliform\nlamellirostral\nlamellirostrate\nLamellirostres\nlamelloid\nlamellose\nlamellosity\nlamellule\nlamely\nlameness\nlament\nlamentable\nlamentableness\nlamentably\nlamentation\nlamentational\nlamentatory\nlamented\nlamentedly\nlamenter\nlamentful\nlamenting\nlamentingly\nlamentive\nlamentory\nlamester\nlamestery\nlameter\nlametta\nlamia\nLamiaceae\nlamiaceous\nlamiger\nlamiid\nLamiidae\nLamiides\nLamiinae\nlamin\nlamina\nlaminability\nlaminable\nlaminae\nlaminar\nLaminaria\nLaminariaceae\nlaminariaceous\nLaminariales\nlaminarian\nlaminarin\nlaminarioid\nlaminarite\nlaminary\nlaminate\nlaminated\nlamination\nlaminboard\nlaminectomy\nlaminiferous\nlaminiform\nlaminiplantar\nlaminiplantation\nlaminitis\nlaminose\nlaminous\nlamish\nLamista\nlamiter\nLamium\nLammas\nlammas\nLammastide\nlammer\nlammergeier\nlammock\nlammy\nLamna\nlamnectomy\nlamnid\nLamnidae\nlamnoid\nlamp\nlampad\nlampadary\nlampadedromy\nlampadephore\nlampadephoria\nlampadite\nlampas\nlampatia\nlampblack\nlamper\nlampern\nlampers\nlampflower\nlampfly\nlampful\nlamphole\nlamping\nlampion\nlampist\nlampistry\nlampless\nlamplet\nlamplight\nlamplighted\nlamplighter\nlamplit\nlampmaker\nlampmaking\nlampman\nLampong\nlampoon\nlampooner\nlampoonery\nlampoonist\nlamppost\nlamprey\nLampridae\nlamprophony\nlamprophyre\nlamprophyric\nlamprotype\nLampsilis\nLampsilus\nlampstand\nlampwick\nlampyrid\nLampyridae\nlampyrine\nLampyris\nLamus\nLamut\nlamziekte\nlan\nLana\nlanameter\nLanao\nLanarkia\nlanarkite\nlanas\nlanate\nlanated\nlanaz\nLancaster\nLancasterian\nLancastrian\nLance\nlance\nlanced\nlancegay\nlancelet\nlancelike\nlancely\nlanceman\nlanceolar\nlanceolate\nlanceolated\nlanceolately\nlanceolation\nlancepesade\nlancepod\nlanceproof\nlancer\nlances\nlancet\nlanceted\nlanceteer\nlancewood\nlancha\nlanciers\nlanciferous\nlanciform\nlancinate\nlancination\nland\nlandamman\nlandau\nlandaulet\nlandaulette\nlandblink\nlandbook\nlanddrost\nlanded\nlander\nlandesite\nlandfall\nlandfast\nlandflood\nlandgafol\nlandgravate\nlandgrave\nlandgraveship\nlandgravess\nlandgraviate\nlandgravine\nlandholder\nlandholdership\nlandholding\nlandimere\nlanding\nlandlady\nlandladydom\nlandladyhood\nlandladyish\nlandladyship\nlandless\nlandlessness\nlandlike\nlandline\nlandlock\nlandlocked\nlandlook\nlandlooker\nlandloper\nlandlord\nlandlordism\nlandlordly\nlandlordry\nlandlordship\nlandlouper\nlandlouping\nlandlubber\nlandlubberish\nlandlubberly\nlandlubbing\nlandman\nlandmark\nLandmarker\nlandmil\nlandmonger\nlandocracy\nlandocrat\nLandolphia\nlandolphia\nlandowner\nlandownership\nlandowning\nlandplane\nlandraker\nlandreeve\nlandright\nlandsale\nlandscape\nlandscapist\nlandshard\nlandship\nlandsick\nlandside\nlandskip\nlandslide\nlandslip\nLandsmaal\nlandsman\nlandspout\nlandspringy\nLandsting\nlandstorm\nLandsturm\nLanduman\nlandwaiter\nlandward\nlandwash\nlandways\nLandwehr\nlandwhin\nlandwire\nlandwrack\nlane\nlanete\nlaneway\nlaney\nlangaha\nlangarai\nlangbanite\nlangbeinite\nlangca\nLanghian\nlangi\nlangite\nlanglauf\nlanglaufer\nlangle\nLango\nLangobard\nLangobardic\nlangoon\nlangooty\nlangrage\nlangsat\nLangsdorffia\nlangsettle\nLangshan\nlangspiel\nlangsyne\nlanguage\nlanguaged\nlanguageless\nlangued\nLanguedocian\nlanguescent\nlanguet\nlanguid\nlanguidly\nlanguidness\nlanguish\nlanguisher\nlanguishing\nlanguishingly\nlanguishment\nlanguor\nlanguorous\nlanguorously\nlangur\nlaniariform\nlaniary\nlaniate\nlaniferous\nlanific\nlaniflorous\nlaniform\nlanigerous\nLaniidae\nlaniiform\nLaniinae\nlanioid\nlanista\nLanital\nLanius\nlank\nlanket\nlankily\nlankiness\nlankish\nlankly\nlankness\nlanky\nlanner\nlanneret\nLanny\nlanolin\nlanose\nlanosity\nlansat\nlansdowne\nlanseh\nlansfordite\nlansknecht\nlanson\nlansquenet\nlant\nlantaca\nLantana\nlanterloo\nlantern\nlanternflower\nlanternist\nlanternleaf\nlanternman\nlanthana\nlanthanide\nlanthanite\nLanthanotidae\nLanthanotus\nlanthanum\nlanthopine\nlantum\nlanuginose\nlanuginous\nlanuginousness\nlanugo\nlanum\nLanuvian\nlanx\nlanyard\nLao\nLaodicean\nLaodiceanism\nLaotian\nlap\nlapacho\nlapachol\nlapactic\nLapageria\nlaparectomy\nlaparocele\nlaparocholecystotomy\nlaparocolectomy\nlaparocolostomy\nlaparocolotomy\nlaparocolpohysterotomy\nlaparocolpotomy\nlaparocystectomy\nlaparocystotomy\nlaparoelytrotomy\nlaparoenterostomy\nlaparoenterotomy\nlaparogastroscopy\nlaparogastrotomy\nlaparohepatotomy\nlaparohysterectomy\nlaparohysteropexy\nlaparohysterotomy\nlaparoileotomy\nlaparomyitis\nlaparomyomectomy\nlaparomyomotomy\nlaparonephrectomy\nlaparonephrotomy\nlaparorrhaphy\nlaparosalpingectomy\nlaparosalpingotomy\nlaparoscopy\nlaparosplenectomy\nlaparosplenotomy\nlaparostict\nLaparosticti\nlaparothoracoscopy\nlaparotome\nlaparotomist\nlaparotomize\nlaparotomy\nlaparotrachelotomy\nlapboard\nlapcock\nLapeirousia\nlapel\nlapeler\nlapelled\nlapful\nlapicide\nlapidarian\nlapidarist\nlapidary\nlapidate\nlapidation\nlapidator\nlapideon\nlapideous\nlapidescent\nlapidicolous\nlapidific\nlapidification\nlapidify\nlapidist\nlapidity\nlapidose\nlapilliform\nlapillo\nlapillus\nLapith\nLapithae\nLapithaean\nLaplacian\nLapland\nLaplander\nLaplandian\nLaplandic\nLaplandish\nlapon\nLaportea\nLapp\nLappa\nlappaceous\nlappage\nlapped\nlapper\nlappet\nlappeted\nLappic\nlapping\nLappish\nLapponese\nLapponian\nLappula\nlapsability\nlapsable\nLapsana\nlapsation\nlapse\nlapsed\nlapser\nlapsi\nlapsing\nlapsingly\nlapstone\nlapstreak\nlapstreaked\nlapstreaker\nLaputa\nLaputan\nlaputically\nlapwing\nlapwork\nlaquear\nlaquearian\nlaqueus\nLar\nlar\nLaralia\nLaramide\nLaramie\nlarboard\nlarbolins\nlarbowlines\nlarcener\nlarcenic\nlarcenish\nlarcenist\nlarcenous\nlarcenously\nlarceny\nlarch\nlarchen\nlard\nlardacein\nlardaceous\nlarder\nlarderellite\nlarderer\nlarderful\nlarderlike\nlardiform\nlardite\nLardizabalaceae\nlardizabalaceous\nlardon\nlardworm\nlardy\nlareabell\nLarentiidae\nlarge\nlargebrained\nlargehanded\nlargehearted\nlargeheartedness\nlargely\nlargemouth\nlargemouthed\nlargen\nlargeness\nlargess\nlarghetto\nlargifical\nlargish\nlargition\nlargitional\nlargo\nLari\nlari\nLaria\nlariat\nlarick\nlarid\nLaridae\nlaridine\nlarigo\nlarigot\nlariid\nLariidae\nlarin\nLarinae\nlarine\nlarithmics\nLarix\nlarixin\nlark\nlarker\nlarkiness\nlarking\nlarkingly\nlarkish\nlarkishness\nlarklike\nlarkling\nlarksome\nlarkspur\nlarky\nlarmier\nlarmoyant\nLarnaudian\nlarnax\nlaroid\nlarrigan\nlarrikin\nlarrikinalian\nlarrikiness\nlarrikinism\nlarriman\nlarrup\nLarry\nlarry\nLars\nlarsenite\nLarunda\nLarus\nlarva\nLarvacea\nlarvae\nlarval\nLarvalia\nlarvarium\nlarvate\nlarve\nlarvicidal\nlarvicide\nlarvicolous\nlarviform\nlarvigerous\nlarvikite\nlarviparous\nlarviposit\nlarviposition\nlarvivorous\nlarvule\nlaryngal\nlaryngalgia\nlaryngeal\nlaryngeally\nlaryngean\nlaryngeating\nlaryngectomy\nlaryngemphraxis\nlaryngendoscope\nlarynges\nlaryngic\nlaryngismal\nlaryngismus\nlaryngitic\nlaryngitis\nlaryngocele\nlaryngocentesis\nlaryngofission\nlaryngofissure\nlaryngograph\nlaryngography\nlaryngological\nlaryngologist\nlaryngology\nlaryngometry\nlaryngoparalysis\nlaryngopathy\nlaryngopharyngeal\nlaryngopharyngitis\nlaryngophony\nlaryngophthisis\nlaryngoplasty\nlaryngoplegia\nlaryngorrhagia\nlaryngorrhea\nlaryngoscleroma\nlaryngoscope\nlaryngoscopic\nlaryngoscopical\nlaryngoscopist\nlaryngoscopy\nlaryngospasm\nlaryngostasis\nlaryngostenosis\nlaryngostomy\nlaryngostroboscope\nlaryngotome\nlaryngotomy\nlaryngotracheal\nlaryngotracheitis\nlaryngotracheoscopy\nlaryngotracheotomy\nlaryngotyphoid\nlaryngovestibulitis\nlarynx\nlas\nlasa\nlasarwort\nlascar\nlascivious\nlasciviously\nlasciviousness\nlaser\nLaserpitium\nlaserwort\nlash\nlasher\nlashingly\nlashless\nlashlite\nLasi\nlasianthous\nLasiocampa\nlasiocampid\nLasiocampidae\nLasiocampoidea\nlasiocarpous\nLasius\nlask\nlasket\nLaspeyresia\nlaspring\nlasque\nlass\nlasset\nlassie\nlassiehood\nlassieish\nlassitude\nlasslorn\nlasso\nlassock\nlassoer\nlast\nlastage\nlaster\nlasting\nlastingly\nlastingness\nlastly\nlastness\nlastre\nlastspring\nlasty\nlat\nlata\nlatah\nLatakia\nLatania\nLatax\nlatch\nlatcher\nlatchet\nlatching\nlatchkey\nlatchless\nlatchman\nlatchstring\nlate\nlatebra\nlatebricole\nlatecomer\nlatecoming\nlated\nlateen\nlateener\nlately\nlaten\nlatence\nlatency\nlateness\nlatensification\nlatent\nlatentize\nlatently\nlatentness\nlater\nlatera\nlaterad\nlateral\nlateralis\nlaterality\nlateralization\nlateralize\nlaterally\nLateran\nlatericumbent\nlateriflexion\nlaterifloral\nlateriflorous\nlaterifolious\nLaterigradae\nlaterigrade\nlaterinerved\nlaterite\nlateritic\nlateritious\nlateriversion\nlaterization\nlateroabdominal\nlateroanterior\nlaterocaudal\nlaterocervical\nlaterodeviation\nlaterodorsal\nlateroduction\nlateroflexion\nlateromarginal\nlateronuchal\nlateroposition\nlateroposterior\nlateropulsion\nlaterostigmatal\nlaterostigmatic\nlaterotemporal\nlaterotorsion\nlateroventral\nlateroversion\nlatescence\nlatescent\nlatesome\nlatest\nlatewhile\nlatex\nlatexosis\nlath\nlathe\nlathee\nlatheman\nlathen\nlather\nlatherability\nlatherable\nlathereeve\nlatherer\nlatherin\nlatheron\nlatherwort\nlathery\nlathesman\nlathhouse\nlathing\nLathraea\nlathwork\nlathy\nlathyric\nlathyrism\nLathyrus\nLatian\nlatibulize\nlatices\nlaticiferous\nlaticlave\nlaticostate\nlatidentate\nlatifundian\nlatifundium\nlatigo\nLatimeria\nLatin\nLatinate\nLatiner\nLatinesque\nLatinian\nLatinic\nLatiniform\nLatinism\nlatinism\nLatinist\nLatinistic\nLatinistical\nLatinitaster\nLatinity\nLatinization\nLatinize\nLatinizer\nLatinless\nLatinus\nlation\nlatipennate\nlatiplantar\nlatirostral\nLatirostres\nlatirostrous\nLatirus\nlatisept\nlatiseptal\nlatiseptate\nlatish\nlatisternal\nlatitancy\nlatitant\nlatitat\nlatite\nlatitude\nlatitudinal\nlatitudinally\nlatitudinarian\nlatitudinarianisn\nlatitudinary\nlatitudinous\nlatomy\nLatona\nLatonian\nLatooka\nlatrant\nlatration\nlatreutic\nlatria\nLatrididae\nlatrine\nLatris\nlatro\nlatrobe\nlatrobite\nlatrocinium\nLatrodectus\nlatron\nlatten\nlattener\nlatter\nlatterkin\nlatterly\nlattermath\nlattermost\nlatterness\nlattice\nlatticed\nlatticewise\nlatticework\nlatticing\nlatticinio\nLatuka\nlatus\nLatvian\nlauan\nlaubanite\nlaud\nlaudability\nlaudable\nlaudableness\nlaudably\nlaudanidine\nlaudanin\nlaudanine\nlaudanosine\nlaudanum\nlaudation\nlaudative\nlaudator\nlaudatorily\nlaudatory\nlauder\nLaudian\nLaudianism\nlaudification\nLaudism\nLaudist\nlaudist\nlaugh\nlaughable\nlaughableness\nlaughably\nlaughee\nlaugher\nlaughful\nlaughing\nlaughingly\nlaughingstock\nlaughsome\nlaughter\nlaughterful\nlaughterless\nlaughworthy\nlaughy\nlauia\nlaumonite\nlaumontite\nlaun\nlaunce\nlaunch\nlauncher\nlaunchful\nlaunchways\nlaund\nlaunder\nlaunderability\nlaunderable\nlaunderer\nlaundry\nlaundrymaid\nlaundryman\nlaundryowner\nlaundrywoman\nlaur\nLaura\nlaura\nLauraceae\nlauraceous\nlauraldehyde\nlaurate\nlaurdalite\nlaureate\nlaureated\nlaureateship\nlaureation\nLaurel\nlaurel\nlaureled\nlaurellike\nlaurelship\nlaurelwood\nLaurence\nLaurencia\nLaurent\nLaurentian\nLaurentide\nlaureole\nLaurianne\nlauric\nLaurie\nlaurin\nlaurinoxylon\nlaurionite\nlaurite\nLaurocerasus\nlaurone\nlaurotetanine\nLaurus\nlaurustine\nlaurustinus\nlaurvikite\nlauryl\nlautarite\nlautitious\nlava\nlavable\nlavabo\nlavacre\nlavage\nlavaliere\nlavalike\nLavandula\nlavanga\nlavant\nlavaret\nLavatera\nlavatic\nlavation\nlavational\nlavatorial\nlavatory\nlave\nlaveer\nLavehr\nlavement\nlavender\nlavenite\nlaver\nLaverania\nlaverock\nlaverwort\nlavialite\nlavic\nLavinia\nlavish\nlavisher\nlavishing\nlavishingly\nlavishly\nlavishment\nlavishness\nlavolta\nlavrovite\nlaw\nlawbook\nlawbreaker\nlawbreaking\nlawcraft\nlawful\nlawfully\nlawfulness\nlawgiver\nlawgiving\nlawing\nlawish\nlawk\nlawlants\nlawless\nlawlessly\nlawlessness\nlawlike\nlawmaker\nlawmaking\nlawman\nlawmonger\nlawn\nlawned\nlawner\nlawnlet\nlawnlike\nlawny\nlawproof\nLawrence\nlawrencite\nLawrie\nlawrightman\nLawson\nLawsoneve\nLawsonia\nlawsonite\nlawsuit\nlawsuiting\nlawter\nLawton\nlawyer\nlawyeress\nlawyerism\nlawyerlike\nlawyerling\nlawyerly\nlawyership\nlawyery\nlawzy\nlax\nlaxate\nlaxation\nlaxative\nlaxatively\nlaxativeness\nlaxiflorous\nlaxifoliate\nlaxifolious\nlaxism\nlaxist\nlaxity\nlaxly\nlaxness\nlay\nlayaway\nlayback\nlayboy\nlayer\nlayerage\nlayered\nlayery\nlayette\nLayia\nlaying\nlayland\nlayman\nlaymanship\nlayne\nlayoff\nlayout\nlayover\nlayship\nlaystall\nlaystow\nlaywoman\nLaz\nlazar\nlazaret\nlazaretto\nLazarist\nlazarlike\nlazarly\nlazarole\nLazarus\nlaze\nlazily\nlaziness\nlazule\nlazuli\nlazuline\nlazulite\nlazulitic\nlazurite\nlazy\nlazybird\nlazybones\nlazyboots\nlazyhood\nlazyish\nlazylegs\nlazyship\nlazzarone\nlazzaroni\nLea\nlea\nleach\nleacher\nleachman\nleachy\nLead\nlead\nleadable\nleadableness\nleadage\nleadback\nleaded\nleaden\nleadenhearted\nleadenheartedness\nleadenly\nleadenness\nleadenpated\nleader\nleaderess\nleaderette\nleaderless\nleadership\nleadhillite\nleadin\nleadiness\nleading\nleadingly\nleadless\nleadman\nleadoff\nleadout\nleadproof\nLeads\nleadsman\nleadstone\nleadway\nleadwood\nleadwork\nleadwort\nleady\nleaf\nleafage\nleafboy\nleafcup\nleafdom\nleafed\nleafen\nleafer\nleafery\nleafgirl\nleafit\nleafless\nleaflessness\nleaflet\nleafleteer\nleaflike\nleafstalk\nleafwork\nleafy\nleague\nleaguelong\nleaguer\nLeah\nleak\nleakage\nleakance\nleaker\nleakiness\nleakless\nleakproof\nleaky\nleal\nlealand\nleally\nlealness\nlealty\nleam\nleamer\nlean\nLeander\nleaner\nleaning\nleanish\nleanly\nleanness\nleant\nleap\nleapable\nleaper\nleapfrog\nleapfrogger\nleapfrogging\nleaping\nleapingly\nleapt\nLear\nlear\nLearchus\nlearn\nlearnable\nlearned\nlearnedly\nlearnedness\nlearner\nlearnership\nlearning\nlearnt\nLearoyd\nleasable\nlease\nleasehold\nleaseholder\nleaseholding\nleaseless\nleasemonger\nleaser\nleash\nleashless\nleasing\nleasow\nleast\nleastways\nleastwise\nleat\nleath\nleather\nleatherback\nleatherbark\nleatherboard\nleatherbush\nleathercoat\nleathercraft\nleatherer\nLeatherette\nleatherfish\nleatherflower\nleatherhead\nleatherine\nleatheriness\nleathering\nleatherize\nleatherjacket\nleatherleaf\nleatherlike\nleathermaker\nleathermaking\nleathern\nleatherneck\nLeatheroid\nleatherroot\nleatherside\nLeatherstocking\nleatherware\nleatherwing\nleatherwood\nleatherwork\nleatherworker\nleatherworking\nleathery\nleathwake\nleatman\nleave\nleaved\nleaveless\nleavelooker\nleaven\nleavening\nleavenish\nleavenless\nleavenous\nleaver\nleaverwood\nleaves\nleaving\nleavy\nleawill\nleban\nLebanese\nlebbek\nlebensraum\nLebistes\nlebrancho\nlecama\nlecaniid\nLecaniinae\nlecanine\nLecanium\nlecanomancer\nlecanomancy\nlecanomantic\nLecanora\nLecanoraceae\nlecanoraceous\nlecanorine\nlecanoroid\nlecanoscopic\nlecanoscopy\nlech\nLechea\nlecher\nlecherous\nlecherously\nlecherousness\nlechery\nlechriodont\nLechriodonta\nlechuguilla\nlechwe\nLecidea\nLecideaceae\nlecideaceous\nlecideiform\nlecideine\nlecidioid\nlecithal\nlecithalbumin\nlecithality\nlecithin\nlecithinase\nlecithoblast\nlecithoprotein\nleck\nlecker\nlecontite\nlecotropal\nlectern\nlection\nlectionary\nlectisternium\nlector\nlectorate\nlectorial\nlectorship\nlectotype\nlectress\nlectrice\nlectual\nlecture\nlecturee\nlectureproof\nlecturer\nlectureship\nlecturess\nlecturette\nlecyth\nlecythid\nLecythidaceae\nlecythidaceous\nLecythis\nlecythoid\nlecythus\nled\nLeda\nlede\nleden\nlederite\nledge\nledged\nledgeless\nledger\nledgerdom\nledging\nledgment\nledgy\nLedidae\nledol\nLedum\nLee\nlee\nleeangle\nleeboard\nleech\nleecheater\nleecher\nleechery\nleeches\nleechkin\nleechlike\nleechwort\nleed\nleefang\nleeftail\nleek\nleekish\nleeky\nleep\nleepit\nleer\nleerily\nleeringly\nleerish\nleerness\nleeroway\nLeersia\nleery\nlees\nleet\nleetman\nleewan\nleeward\nleewardly\nleewardmost\nleewardness\nleeway\nleewill\nleft\nleftish\nleftism\nleftist\nleftments\nleftmost\nleftness\nleftover\nleftward\nleftwardly\nleftwards\nleg\nlegacy\nlegal\nlegalese\nlegalism\nlegalist\nlegalistic\nlegalistically\nlegality\nlegalization\nlegalize\nlegally\nlegalness\nlegantine\nlegatary\nlegate\nlegatee\nlegateship\nlegatine\nlegation\nlegationary\nlegative\nlegato\nlegator\nlegatorial\nlegend\nlegenda\nlegendarian\nlegendary\nlegendic\nlegendist\nlegendless\nLegendrian\nlegendry\nleger\nlegerdemain\nlegerdemainist\nlegerity\nleges\nlegged\nlegger\nlegginess\nlegging\nlegginged\nleggy\nleghorn\nlegibility\nlegible\nlegibleness\nlegibly\nlegific\nlegion\nlegionary\nlegioned\nlegioner\nlegionnaire\nlegionry\nlegislate\nlegislation\nlegislational\nlegislativ\nlegislative\nlegislatively\nlegislator\nlegislatorial\nlegislatorially\nlegislatorship\nlegislatress\nlegislature\nlegist\nlegit\nlegitim\nlegitimacy\nlegitimate\nlegitimately\nlegitimateness\nlegitimation\nlegitimatist\nlegitimatize\nlegitimism\nlegitimist\nlegitimistic\nlegitimity\nlegitimization\nlegitimize\nleglen\nlegless\nleglessness\nleglet\nleglike\nlegman\nlegoa\nlegpiece\nlegpull\nlegpuller\nlegpulling\nlegrope\nlegua\nleguan\nLeguatia\nleguleian\nleguleious\nlegume\nlegumelin\nlegumen\nlegumin\nleguminiform\nLeguminosae\nleguminose\nleguminous\nLehi\nlehr\nlehrbachite\nlehrman\nlehua\nlei\nLeibnitzian\nLeibnitzianism\nLeicester\nLeif\nLeigh\nleighton\nLeila\nleimtype\nleiocephalous\nleiocome\nleiodermatous\nleiodermia\nleiomyofibroma\nleiomyoma\nleiomyomatous\nleiomyosarcoma\nleiophyllous\nLeiophyllum\nLeiothrix\nLeiotrichan\nLeiotriches\nLeiotrichi\nLeiotrichidae\nLeiotrichinae\nleiotrichine\nleiotrichous\nleiotrichy\nleiotropic\nLeipoa\nLeishmania\nleishmaniasis\nLeisten\nleister\nleisterer\nleisurable\nleisurably\nleisure\nleisured\nleisureful\nleisureless\nleisureliness\nleisurely\nleisureness\nLeith\nleitmotiv\nLeitneria\nLeitneriaceae\nleitneriaceous\nLeitneriales\nlek\nlekach\nlekane\nlekha\nLelia\nLemaireocereus\nleman\nLemanea\nLemaneaceae\nlemel\nlemma\nlemmata\nlemming\nlemmitis\nlemmoblastic\nlemmocyte\nLemmus\nLemna\nLemnaceae\nlemnaceous\nlemnad\nLemnian\nlemniscate\nlemniscatic\nlemniscus\nlemography\nlemology\nlemon\nlemonade\nLemonias\nLemoniidae\nLemoniinae\nlemonish\nlemonlike\nlemonweed\nlemonwood\nlemony\nLemosi\nLemovices\nlempira\nLemuel\nlemur\nlemures\nLemuria\nLemurian\nlemurian\nlemurid\nLemuridae\nlemuriform\nLemurinae\nlemurine\nlemuroid\nLemuroidea\nLen\nLena\nlenad\nLenaea\nLenaean\nLenaeum\nLenaeus\nLenape\nlenard\nLenca\nLencan\nlench\nlend\nlendable\nlendee\nlender\nLendu\nlene\nlength\nlengthen\nlengthener\nlengther\nlengthful\nlengthily\nlengthiness\nlengthsman\nlengthsome\nlengthsomeness\nlengthways\nlengthwise\nlengthy\nlenience\nleniency\nlenient\nleniently\nlenify\nLeninism\nLeninist\nLeninite\nlenis\nlenitic\nlenitive\nlenitively\nlenitiveness\nlenitude\nlenity\nlennilite\nLennoaceae\nlennoaceous\nlennow\nLenny\nleno\nLenora\nlens\nlensed\nlensless\nlenslike\nLent\nlent\nLenten\nLententide\nlenth\nlenthways\nLentibulariaceae\nlentibulariaceous\nlenticel\nlenticellate\nlenticle\nlenticonus\nlenticula\nlenticular\nlenticulare\nlenticularis\nlenticularly\nlenticulate\nlenticulated\nlenticule\nlenticulostriate\nlenticulothalamic\nlentiform\nlentigerous\nlentiginous\nlentigo\nlentil\nLentilla\nlentisc\nlentiscine\nlentisco\nlentiscus\nlentisk\nlentitude\nlentitudinous\nlento\nlentoid\nlentor\nlentous\nlenvoi\nlenvoy\nLenzites\nLeo\nLeon\nLeonard\nLeonardesque\nLeonato\nleoncito\nLeonese\nleonhardite\nLeonid\nLeonine\nleonine\nleoninely\nleonines\nLeonis\nLeonist\nleonite\nLeonnoys\nLeonora\nLeonotis\nleontiasis\nLeontocebus\nleontocephalous\nLeontodon\nLeontopodium\nLeonurus\nleopard\nleoparde\nleopardess\nleopardine\nleopardite\nleopardwood\nLeopold\nLeopoldinia\nleopoldite\nLeora\nleotard\nlepa\nLepadidae\nlepadoid\nLepanto\nlepargylic\nLepargyraea\nLepas\nLepcha\nleper\nleperdom\nlepered\nlepidene\nlepidine\nLepidium\nlepidoblastic\nLepidodendraceae\nlepidodendraceous\nlepidodendrid\nlepidodendroid\nLepidodendron\nlepidoid\nLepidoidei\nlepidolite\nlepidomelane\nLepidophloios\nlepidophyllous\nLepidophyllum\nlepidophyte\nlepidophytic\nlepidoporphyrin\nlepidopter\nLepidoptera\nlepidopteral\nlepidopteran\nlepidopterid\nlepidopterist\nlepidopterological\nlepidopterologist\nlepidopterology\nlepidopteron\nlepidopterous\nLepidosauria\nlepidosaurian\nLepidosiren\nLepidosirenidae\nlepidosirenoid\nlepidosis\nLepidosperma\nLepidospermae\nLepidosphes\nLepidostei\nlepidosteoid\nLepidosteus\nLepidostrobus\nlepidote\nLepidotes\nlepidotic\nLepidotus\nLepidurus\nLepilemur\nLepiota\nLepisma\nLepismatidae\nLepismidae\nlepismoid\nLepisosteidae\nLepisosteus\nlepocyte\nLepomis\nleporid\nLeporidae\nleporide\nleporiform\nleporine\nLeporis\nLepospondyli\nlepospondylous\nLeposternidae\nLeposternon\nlepothrix\nlepra\nLepralia\nlepralian\nleprechaun\nlepric\nleproid\nleprologic\nleprologist\nleprology\nleproma\nlepromatous\nleprosarium\nleprose\nleprosery\nleprosied\nleprosis\nleprosity\nleprosy\nleprous\nleprously\nleprousness\nLeptamnium\nLeptandra\nleptandrin\nleptid\nLeptidae\nleptiform\nLeptilon\nleptinolite\nLeptinotarsa\nleptite\nLeptocardia\nleptocardian\nLeptocardii\nleptocentric\nleptocephalan\nleptocephali\nleptocephalia\nleptocephalic\nleptocephalid\nLeptocephalidae\nleptocephaloid\nleptocephalous\nLeptocephalus\nleptocephalus\nleptocephaly\nleptocercal\nleptochlorite\nleptochroa\nleptochrous\nleptoclase\nleptodactyl\nLeptodactylidae\nleptodactylous\nLeptodactylus\nleptodermatous\nleptodermous\nLeptodora\nLeptodoridae\nLeptogenesis\nleptokurtic\nLeptolepidae\nLeptolepis\nLeptolinae\nleptomatic\nleptome\nLeptomedusae\nleptomedusan\nleptomeningeal\nleptomeninges\nleptomeningitis\nleptomeninx\nleptometer\nleptomonad\nLeptomonas\nLepton\nlepton\nleptonecrosis\nleptonema\nleptopellic\nLeptophis\nleptophyllous\nleptoprosope\nleptoprosopic\nleptoprosopous\nleptoprosopy\nLeptoptilus\nLeptorchis\nleptorrhin\nleptorrhine\nleptorrhinian\nleptorrhinism\nleptosome\nleptosperm\nLeptospermum\nLeptosphaeria\nLeptospira\nleptospirosis\nleptosporangiate\nLeptostraca\nleptostracan\nleptostracous\nLeptostromataceae\nLeptosyne\nleptotene\nLeptothrix\nLeptotrichia\nLeptotyphlopidae\nLeptotyphlops\nleptus\nleptynite\nLepus\nLer\nLernaea\nLernaeacea\nLernaean\nLernaeidae\nlernaeiform\nlernaeoid\nLernaeoides\nlerot\nlerp\nlerret\nLerwa\nLes\nLesath\nLesbia\nLesbian\nLesbianism\nlesche\nLesgh\nlesion\nlesional\nlesiy\nLeskea\nLeskeaceae\nleskeaceous\nLesleya\nLeslie\nLespedeza\nLesquerella\nless\nlessee\nlesseeship\nlessen\nlessener\nlesser\nlessive\nlessn\nlessness\nlesson\nlessor\nlest\nLester\nlestiwarite\nlestobiosis\nlestobiotic\nLestodon\nLestosaurus\nlestrad\nLestrigon\nLestrigonian\nlet\nletch\nletchy\nletdown\nlete\nlethal\nlethality\nlethalize\nlethally\nlethargic\nlethargical\nlethargically\nlethargicalness\nlethargize\nlethargus\nlethargy\nLethe\nLethean\nlethiferous\nLethocerus\nlethologica\nLetitia\nLeto\nletoff\nLett\nlettable\nletten\nletter\nlettered\nletterer\nletteret\nlettergram\nletterhead\nletterin\nlettering\nletterleaf\nletterless\nletterpress\nletterspace\nletterweight\nletterwood\nLettic\nLettice\nLettish\nlettrin\nlettsomite\nlettuce\nLetty\nletup\nleu\nLeucadendron\nLeucadian\nleucaemia\nleucaemic\nLeucaena\nleucaethiop\nleucaethiopic\nleucaniline\nleucanthous\nleucaugite\nleucaurin\nleucemia\nleucemic\nLeucetta\nleuch\nleuchaemia\nleuchemia\nleuchtenbergite\nLeucichthys\nLeucifer\nLeuciferidae\nleucine\nLeucippus\nleucism\nleucite\nleucitic\nleucitis\nleucitite\nleucitohedron\nleucitoid\nLeuckartia\nLeuckartiidae\nleuco\nleucobasalt\nleucoblast\nleucoblastic\nLeucobryaceae\nLeucobryum\nleucocarpous\nleucochalcite\nleucocholic\nleucocholy\nleucochroic\nleucocidic\nleucocidin\nleucocism\nleucocrate\nleucocratic\nLeucocrinum\nleucocyan\nleucocytal\nleucocyte\nleucocythemia\nleucocythemic\nleucocytic\nleucocytoblast\nleucocytogenesis\nleucocytoid\nleucocytology\nleucocytolysin\nleucocytolysis\nleucocytolytic\nleucocytometer\nleucocytopenia\nleucocytopenic\nleucocytoplania\nleucocytopoiesis\nleucocytosis\nleucocytotherapy\nleucocytotic\nLeucocytozoon\nleucoderma\nleucodermatous\nleucodermic\nleucoencephalitis\nleucogenic\nleucoid\nleucoindigo\nleucoindigotin\nLeucojaceae\nLeucojum\nleucolytic\nleucoma\nleucomaine\nleucomatous\nleucomelanic\nleucomelanous\nleucon\nLeuconostoc\nleucopenia\nleucopenic\nleucophane\nleucophanite\nleucophoenicite\nleucophore\nleucophyllous\nleucophyre\nleucoplakia\nleucoplakial\nleucoplast\nleucoplastid\nleucopoiesis\nleucopoietic\nleucopyrite\nleucoquinizarin\nleucorrhea\nleucorrheal\nleucoryx\nleucosis\nLeucosolenia\nLeucosoleniidae\nleucospermous\nleucosphenite\nleucosphere\nleucospheric\nleucostasis\nLeucosticte\nleucosyenite\nleucotactic\nLeucothea\nLeucothoe\nleucotic\nleucotome\nleucotomy\nleucotoxic\nleucous\nleucoxene\nleucyl\nleud\nleuk\nleukemia\nleukemic\nleukocidic\nleukocidin\nleukosis\nleukotic\nleuma\nLeung\nlev\nLevana\nlevance\nLevant\nlevant\nLevanter\nlevanter\nLevantine\nlevator\nlevee\nlevel\nleveler\nlevelheaded\nlevelheadedly\nlevelheadedness\nleveling\nlevelish\nlevelism\nlevelly\nlevelman\nlevelness\nlever\nleverage\nleverer\nleveret\nleverman\nlevers\nleverwood\nLevi\nleviable\nleviathan\nlevier\nlevigable\nlevigate\nlevigation\nlevigator\nlevin\nlevining\nlevir\nlevirate\nleviratical\nleviration\nLevis\nLevisticum\nlevitant\nlevitate\nlevitation\nlevitational\nlevitative\nlevitator\nLevite\nLevitical\nLeviticalism\nLeviticality\nLevitically\nLeviticalness\nLeviticism\nLeviticus\nLevitism\nlevity\nlevo\nlevoduction\nlevogyrate\nlevogyre\nlevogyrous\nlevolactic\nlevolimonene\nlevorotation\nlevorotatory\nlevotartaric\nlevoversion\nlevulic\nlevulin\nlevulinic\nlevulose\nlevulosuria\nlevy\nlevyist\nlevynite\nLew\nlew\nLewanna\nlewd\nlewdly\nlewdness\nLewie\nLewis\nlewis\nLewisia\nLewisian\nlewisite\nlewisson\nlewth\nLex\nlexia\nlexical\nlexicalic\nlexicality\nlexicographer\nlexicographian\nlexicographic\nlexicographical\nlexicographically\nlexicographist\nlexicography\nlexicologic\nlexicological\nlexicologist\nlexicology\nlexicon\nlexiconist\nlexiconize\nlexigraphic\nlexigraphical\nlexigraphically\nlexigraphy\nlexiphanic\nlexiphanicism\nley\nleyland\nleysing\nLezghian\nlherzite\nlherzolite\nLhota\nli\nliability\nliable\nliableness\nliaison\nliana\nliang\nliar\nliard\nLias\nLiassic\nLiatris\nlibament\nlibaniferous\nlibanophorous\nlibanotophorous\nlibant\nlibate\nlibation\nlibationary\nlibationer\nlibatory\nlibber\nlibbet\nlibbra\nLibby\nlibel\nlibelant\nlibelee\nlibeler\nlibelist\nlibellary\nlibellate\nLibellula\nlibellulid\nLibellulidae\nlibelluloid\nlibelous\nlibelously\nLiber\nliber\nliberal\nLiberalia\nliberalism\nliberalist\nliberalistic\nliberality\nliberalization\nliberalize\nliberalizer\nliberally\nliberalness\nliberate\nliberation\nliberationism\nliberationist\nliberative\nliberator\nliberatory\nliberatress\nLiberia\nLiberian\nliberomotor\nlibertarian\nlibertarianism\nLibertas\nliberticidal\nliberticide\nlibertinage\nlibertine\nlibertinism\nliberty\nlibertyless\nlibethenite\nlibidibi\nlibidinal\nlibidinally\nlibidinosity\nlibidinous\nlibidinously\nlibidinousness\nlibido\nLibitina\nlibken\nLibocedrus\nLibra\nlibra\nlibral\nlibrarian\nlibrarianess\nlibrarianship\nlibrarious\nlibrarius\nlibrary\nlibraryless\nlibrate\nlibration\nlibratory\nlibretti\nlibrettist\nlibretto\nLibrid\nlibriform\nlibroplast\nLibyan\nLibytheidae\nLibytheinae\nLicania\nlicareol\nlicca\nlicensable\nlicense\nlicensed\nlicensee\nlicenseless\nlicenser\nlicensor\nlicensure\nlicentiate\nlicentiateship\nlicentiation\nlicentious\nlicentiously\nlicentiousness\nlich\nlicham\nlichanos\nlichen\nlichenaceous\nlichened\nLichenes\nlicheniasis\nlichenic\nlichenicolous\nlicheniform\nlichenin\nlichenism\nlichenist\nlichenivorous\nlichenization\nlichenize\nlichenlike\nlichenographer\nlichenographic\nlichenographical\nlichenographist\nlichenography\nlichenoid\nlichenologic\nlichenological\nlichenologist\nlichenology\nLichenopora\nLichenoporidae\nlichenose\nlicheny\nlichi\nLichnophora\nLichnophoridae\nLicinian\nlicit\nlicitation\nlicitly\nlicitness\nlick\nlicker\nlickerish\nlickerishly\nlickerishness\nlicking\nlickpenny\nlickspit\nlickspittle\nlickspittling\nlicorice\nlicorn\nlicorne\nlictor\nlictorian\nLicuala\nlid\nLida\nlidded\nlidder\nLide\nlidflower\nlidgate\nlidless\nlie\nliebenerite\nLiebfraumilch\nliebigite\nlied\nlief\nliege\nliegedom\nliegeful\nliegefully\nliegeless\nliegely\nliegeman\nlieger\nlien\nlienal\nlienculus\nlienee\nlienic\nlienitis\nlienocele\nlienogastric\nlienointestinal\nlienomalacia\nlienomedullary\nlienomyelogenous\nlienopancreatic\nlienor\nlienorenal\nlienotoxin\nlienteria\nlienteric\nlientery\nlieproof\nlieprooflier\nlieproofliest\nlier\nlierne\nlierre\nliesh\nliespfund\nlieu\nlieue\nlieutenancy\nlieutenant\nlieutenantry\nlieutenantship\nLievaart\nlieve\nlievrite\nLif\nlife\nlifeblood\nlifeboat\nlifeboatman\nlifeday\nlifedrop\nlifeful\nlifefully\nlifefulness\nlifeguard\nlifehold\nlifeholder\nlifeless\nlifelessly\nlifelessness\nlifelet\nlifelike\nlifelikeness\nlifeline\nlifelong\nlifer\nliferent\nliferenter\nliferentrix\nliferoot\nlifesaver\nlifesaving\nlifesome\nlifesomely\nlifesomeness\nlifespring\nlifetime\nlifeward\nlifework\nlifey\nlifo\nlift\nliftable\nlifter\nlifting\nliftless\nliftman\nligable\nligament\nligamental\nligamentary\nligamentous\nligamentously\nligamentum\nligas\nligate\nligation\nligator\nligature\nligeance\nligger\nlight\nlightable\nlightboat\nlightbrained\nlighten\nlightener\nlightening\nlighter\nlighterage\nlighterful\nlighterman\nlightface\nlightful\nlightfulness\nlighthead\nlightheaded\nlightheadedly\nlightheadedness\nlighthearted\nlightheartedly\nlightheartedness\nlighthouse\nlighthouseman\nlighting\nlightish\nlightkeeper\nlightless\nlightlessness\nlightly\nlightman\nlightmanship\nlightmouthed\nlightness\nlightning\nlightninglike\nlightningproof\nlightproof\nlightroom\nlightscot\nlightship\nlightsman\nlightsome\nlightsomely\nlightsomeness\nlighttight\nlightwards\nlightweight\nlightwood\nlightwort\nlignaloes\nlignatile\nligne\nligneous\nlignescent\nlignicole\nlignicoline\nlignicolous\nligniferous\nlignification\nligniform\nlignify\nlignin\nligninsulphonate\nligniperdous\nlignite\nlignitic\nlignitiferous\nlignitize\nlignivorous\nlignocellulose\nlignoceric\nlignography\nlignone\nlignose\nlignosity\nlignosulphite\nlignosulphonate\nlignum\nligroine\nligula\nligular\nLigularia\nligulate\nligulated\nligule\nLiguliflorae\nliguliflorous\nliguliform\nligulin\nliguloid\nLiguorian\nligure\nLigurian\nligurite\nligurition\nLigusticum\nligustrin\nLigustrum\nLigyda\nLigydidae\nLihyanite\nliin\nlija\nlikability\nlikable\nlikableness\nlike\nlikelihead\nlikelihood\nlikeliness\nlikely\nliken\nlikeness\nliker\nlikesome\nlikeways\nlikewise\nlikin\nliking\nliknon\nLila\nlilac\nlilaceous\nlilacin\nlilacky\nlilacthroat\nlilactide\nLilaeopsis\nlile\nLiliaceae\nliliaceous\nLiliales\nLilian\nlilied\nliliform\nLiliiflorae\nLilith\nLilium\nlill\nlillianite\nlillibullero\nLilliput\nLilliputian\nLilliputianize\nlilt\nliltingly\nliltingness\nlily\nlilyfy\nlilyhanded\nlilylike\nlilywood\nlilywort\nlim\nLima\nLimacea\nlimacel\nlimaceous\nLimacidae\nlimaciform\nLimacina\nlimacine\nlimacinid\nLimacinidae\nlimacoid\nlimacon\nlimaille\nliman\nlimation\nLimawood\nLimax\nlimb\nlimbal\nlimbat\nlimbate\nlimbation\nlimbeck\nlimbed\nlimber\nlimberham\nlimberly\nlimberness\nlimbers\nlimbic\nlimbie\nlimbiferous\nlimbless\nlimbmeal\nlimbo\nlimboinfantum\nlimbous\nLimbu\nLimburger\nlimburgite\nlimbus\nlimby\nlime\nlimeade\nLimean\nlimeberry\nlimebush\nlimehouse\nlimekiln\nlimeless\nlimelight\nlimelighter\nlimelike\nlimeman\nlimen\nlimequat\nlimer\nLimerick\nlimes\nlimestone\nlimetta\nlimettin\nlimewash\nlimewater\nlimewort\nlimey\nLimicolae\nlimicoline\nlimicolous\nLimidae\nliminal\nliminary\nliminess\nliming\nlimit\nlimitable\nlimitableness\nlimital\nlimitarian\nlimitary\nlimitate\nlimitation\nlimitative\nlimitatively\nlimited\nlimitedly\nlimitedness\nlimiter\nlimiting\nlimitive\nlimitless\nlimitlessly\nlimitlessness\nlimitrophe\nlimivorous\nlimma\nlimmer\nlimmock\nlimmu\nlimn\nlimnanth\nLimnanthaceae\nlimnanthaceous\nLimnanthemum\nLimnanthes\nlimner\nlimnery\nlimnetic\nLimnetis\nlimniad\nlimnimeter\nlimnimetric\nlimnite\nlimnobiologic\nlimnobiological\nlimnobiologically\nlimnobiology\nlimnobios\nLimnobium\nLimnocnida\nlimnograph\nlimnologic\nlimnological\nlimnologically\nlimnologist\nlimnology\nlimnometer\nlimnophile\nlimnophilid\nLimnophilidae\nlimnophilous\nlimnoplankton\nLimnorchis\nLimnoria\nLimnoriidae\nlimnorioid\nLimodorum\nlimoid\nlimonene\nlimoniad\nlimonin\nlimonite\nlimonitic\nlimonitization\nlimonium\nLimosa\nlimose\nLimosella\nLimosi\nlimous\nlimousine\nlimp\nlimper\nlimpet\nlimphault\nlimpid\nlimpidity\nlimpidly\nlimpidness\nlimpily\nlimpin\nlimpiness\nlimping\nlimpingly\nlimpingness\nlimpish\nlimpkin\nlimply\nlimpness\nlimpsy\nlimpwort\nlimpy\nlimsy\nlimu\nlimulid\nLimulidae\nlimuloid\nLimuloidea\nLimulus\nlimurite\nlimy\nLin\nlin\nLina\nlina\nlinable\nLinaceae\nlinaceous\nlinaga\nlinage\nlinaloa\nlinalol\nlinalool\nlinamarin\nLinanthus\nLinaria\nlinarite\nlinch\nlinchbolt\nlinchet\nlinchpin\nlinchpinned\nlincloth\nLincoln\nLincolnian\nLincolniana\nLincolnlike\nlinctus\nLinda\nlindackerite\nlindane\nlinden\nLinder\nlinder\nLindera\nLindleyan\nlindo\nlindoite\nLindsay\nLindsey\nline\nlinea\nlineage\nlineaged\nlineal\nlineality\nlineally\nlineament\nlineamental\nlineamentation\nlineameter\nlinear\nlinearifolius\nlinearity\nlinearization\nlinearize\nlinearly\nlineate\nlineated\nlineation\nlineature\nlinecut\nlined\nlineiform\nlineless\nlinelet\nlineman\nlinen\nLinene\nlinenette\nlinenize\nlinenizer\nlinenman\nlineocircular\nlineograph\nlineolate\nlineolated\nliner\nlinesman\nLinet\nlinewalker\nlinework\nling\nlinga\nLingayat\nlingberry\nlingbird\nlinge\nlingel\nlingenberry\nlinger\nlingerer\nlingerie\nlingo\nlingonberry\nLingoum\nlingtow\nlingtowman\nlingua\nlinguacious\nlinguaciousness\nlinguadental\nlinguaeform\nlingual\nlinguale\nlinguality\nlingualize\nlingually\nlinguanasal\nLinguata\nLinguatula\nLinguatulida\nLinguatulina\nlinguatuline\nlinguatuloid\nlinguet\nlinguidental\nlinguiform\nlinguipotence\nlinguist\nlinguister\nlinguistic\nlinguistical\nlinguistically\nlinguistician\nlinguistics\nlinguistry\nlingula\nlingulate\nlingulated\nLingulella\nlingulid\nLingulidae\nlinguliferous\nlinguliform\nlinguloid\nlinguodental\nlinguodistal\nlinguogingival\nlinguopalatal\nlinguopapillitis\nlinguoversion\nlingwort\nlingy\nlinha\nlinhay\nlinie\nliniment\nlinin\nlininess\nlining\nlinitis\nliniya\nlinja\nlinje\nlink\nlinkable\nlinkage\nlinkboy\nlinked\nlinkedness\nlinker\nlinking\nlinkman\nlinks\nlinksmith\nlinkwork\nlinky\nLinley\nlinn\nLinnaea\nLinnaean\nLinnaeanism\nlinnaeite\nLinne\nlinnet\nlino\nlinolate\nlinoleic\nlinolein\nlinolenate\nlinolenic\nlinolenin\nlinoleum\nlinolic\nlinolin\nlinometer\nlinon\nLinopteris\nLinos\nLinotype\nlinotype\nlinotyper\nlinotypist\nlinous\nlinoxin\nlinoxyn\nlinpin\nLinsang\nlinseed\nlinsey\nlinstock\nlint\nlintel\nlinteled\nlinteling\nlinten\nlinter\nlintern\nlintie\nlintless\nlintonite\nlintseed\nlintwhite\nlinty\nLinum\nLinus\nlinwood\nliny\nLinyphia\nLinyphiidae\nliodermia\nliomyofibroma\nliomyoma\nlion\nlioncel\nLionel\nlionel\nlionesque\nlioness\nlionet\nlionheart\nlionhearted\nlionheartedness\nlionhood\nlionism\nlionizable\nlionization\nlionize\nlionizer\nlionlike\nlionly\nlionproof\nlionship\nLiothrix\nLiotrichi\nLiotrichidae\nliotrichine\nlip\nlipa\nlipacidemia\nlipaciduria\nLipan\nLiparian\nliparian\nliparid\nLiparidae\nLiparididae\nLiparis\nliparite\nliparocele\nliparoid\nliparomphalus\nliparous\nlipase\nlipectomy\nlipemia\nLipeurus\nlipide\nlipin\nlipless\nliplet\nliplike\nlipoblast\nlipoblastoma\nLipobranchia\nlipocaic\nlipocardiac\nlipocele\nlipoceratous\nlipocere\nlipochondroma\nlipochrome\nlipochromogen\nlipoclasis\nlipoclastic\nlipocyte\nlipodystrophia\nlipodystrophy\nlipoferous\nlipofibroma\nlipogenesis\nlipogenetic\nlipogenic\nlipogenous\nlipogram\nlipogrammatic\nlipogrammatism\nlipogrammatist\nlipography\nlipohemia\nlipoid\nlipoidal\nlipoidemia\nlipoidic\nlipolysis\nlipolytic\nlipoma\nlipomata\nlipomatosis\nlipomatous\nlipometabolic\nlipometabolism\nlipomorph\nlipomyoma\nlipomyxoma\nlipopexia\nlipophagic\nlipophore\nlipopod\nLipopoda\nlipoprotein\nliposarcoma\nliposis\nliposome\nlipostomy\nlipothymial\nlipothymic\nlipothymy\nlipotrophic\nlipotrophy\nlipotropic\nlipotropy\nlipotype\nLipotyphla\nlipovaccine\nlipoxenous\nlipoxeny\nlipped\nlippen\nlipper\nlipperings\nLippia\nlippiness\nlipping\nlippitude\nlippitudo\nlippy\nlipsanographer\nlipsanotheca\nlipstick\nlipuria\nlipwork\nliquable\nliquamen\nliquate\nliquation\nliquefacient\nliquefaction\nliquefactive\nliquefiable\nliquefier\nliquefy\nliquesce\nliquescence\nliquescency\nliquescent\nliqueur\nliquid\nliquidable\nLiquidambar\nliquidamber\nliquidate\nliquidation\nliquidator\nliquidatorship\nliquidity\nliquidize\nliquidizer\nliquidless\nliquidly\nliquidness\nliquidogenic\nliquidogenous\nliquidy\nliquiform\nliquor\nliquorer\nliquorish\nliquorishly\nliquorishness\nliquorist\nliquorless\nlira\nlirate\nliration\nlire\nlirella\nlirellate\nlirelliform\nlirelline\nlirellous\nLiriodendron\nliripipe\nliroconite\nlis\nLisa\nLisbon\nLise\nlisere\nLisette\nlish\nlisk\nLisle\nlisle\nlisp\nlisper\nlispingly\nlispund\nliss\nLissamphibia\nlissamphibian\nLissencephala\nlissencephalic\nlissencephalous\nLissoflagellata\nlissoflagellate\nlissom\nlissome\nlissomely\nlissomeness\nlissotrichan\nLissotriches\nlissotrichous\nlissotrichy\nList\nlist\nlistable\nlisted\nlistedness\nlistel\nlisten\nlistener\nlistening\nlister\nListera\nlisterellosis\nListeria\nListerian\nListerine\nListerism\nListerize\nlisting\nlistless\nlistlessly\nlistlessness\nlistred\nlistwork\nLisuarte\nlit\nlitaneutical\nlitany\nlitanywise\nlitas\nlitation\nlitch\nlitchi\nlite\nliter\nliteracy\nliteraily\nliteral\nliteralism\nliteralist\nliteralistic\nliterality\nliteralization\nliteralize\nliteralizer\nliterally\nliteralminded\nliteralmindedness\nliteralness\nliterarian\nliterariness\nliterary\nliteraryism\nliterate\nliterati\nliteration\nliteratist\nliterato\nliterator\nliterature\nliteratus\nliterose\nliterosity\nlith\nlithagogue\nlithangiuria\nlithanthrax\nlitharge\nlithe\nlithectasy\nlithectomy\nlithely\nlithemia\nlithemic\nlitheness\nlithesome\nlithesomeness\nlithi\nlithia\nlithiasis\nlithiastic\nlithiate\nlithic\nlithifaction\nlithification\nlithify\nlithite\nlithium\nlitho\nlithobiid\nLithobiidae\nlithobioid\nLithobius\nLithocarpus\nlithocenosis\nlithochemistry\nlithochromatic\nlithochromatics\nlithochromatographic\nlithochromatography\nlithochromography\nlithochromy\nlithoclase\nlithoclast\nlithoclastic\nlithoclasty\nlithoculture\nlithocyst\nlithocystotomy\nLithodes\nlithodesma\nlithodialysis\nlithodid\nLithodidae\nlithodomous\nLithodomus\nlithofracteur\nlithofractor\nlithogenesis\nlithogenetic\nlithogenous\nlithogeny\nlithoglyph\nlithoglypher\nlithoglyphic\nlithoglyptic\nlithoglyptics\nlithograph\nlithographer\nlithographic\nlithographical\nlithographically\nlithographize\nlithography\nlithogravure\nlithoid\nlithoidite\nlitholabe\nlitholapaxy\nlitholatrous\nlitholatry\nlithologic\nlithological\nlithologically\nlithologist\nlithology\nlitholysis\nlitholyte\nlitholytic\nlithomancy\nlithomarge\nlithometer\nlithonephria\nlithonephritis\nlithonephrotomy\nlithontriptic\nlithontriptist\nlithontriptor\nlithopedion\nlithopedium\nlithophagous\nlithophane\nlithophanic\nlithophany\nlithophilous\nlithophone\nlithophotography\nlithophotogravure\nlithophthisis\nlithophyl\nlithophyllous\nlithophysa\nlithophysal\nlithophyte\nlithophytic\nlithophytous\nlithopone\nlithoprint\nlithoscope\nlithosian\nlithosiid\nLithosiidae\nLithosiinae\nlithosis\nlithosol\nlithosperm\nlithospermon\nlithospermous\nLithospermum\nlithosphere\nlithotint\nlithotome\nlithotomic\nlithotomical\nlithotomist\nlithotomize\nlithotomous\nlithotomy\nlithotony\nlithotresis\nlithotripsy\nlithotriptor\nlithotrite\nlithotritic\nlithotritist\nlithotrity\nlithotype\nlithotypic\nlithotypy\nlithous\nlithoxyl\nlithsman\nLithuanian\nLithuanic\nlithuresis\nlithuria\nlithy\nliticontestation\nlitigable\nlitigant\nlitigate\nlitigation\nlitigationist\nlitigator\nlitigatory\nlitigiosity\nlitigious\nlitigiously\nlitigiousness\nLitiopa\nlitiscontest\nlitiscontestation\nlitiscontestational\nlitmus\nLitopterna\nLitorina\nLitorinidae\nlitorinoid\nlitotes\nlitra\nLitsea\nlitster\nlitten\nlitter\nlitterateur\nlitterer\nlittermate\nlittery\nlittle\nlittleleaf\nlittleneck\nlittleness\nlittlewale\nlittling\nlittlish\nlittoral\nLittorella\nlittress\nlituiform\nlituite\nLituites\nLituitidae\nLituola\nlituoline\nlituoloid\nliturate\nliturgical\nliturgically\nliturgician\nliturgics\nliturgiological\nliturgiologist\nliturgiology\nliturgism\nliturgist\nliturgistic\nliturgistical\nliturgize\nliturgy\nlitus\nlituus\nLitvak\nLityerses\nlitz\nLiukiu\nLiv\nlivability\nlivable\nlivableness\nlive\nliveborn\nlived\nlivedo\nlivelihood\nlivelily\nliveliness\nlivelong\nlively\nliven\nliveness\nliver\nliverance\nliverberry\nlivered\nliverhearted\nliverheartedness\nliveried\nliverish\nliverishness\nliverleaf\nliverless\nLiverpudlian\nliverwort\nliverwurst\nlivery\nliverydom\nliveryless\nliveryman\nlivestock\nLivian\nlivid\nlividity\nlividly\nlividness\nlivier\nliving\nlivingless\nlivingly\nlivingness\nlivingstoneite\nLivish\nLivistona\nLivonian\nlivor\nlivre\nliwan\nlixive\nlixivial\nlixiviate\nlixiviation\nlixiviator\nlixivious\nlixivium\nLiyuan\nLiz\nLiza\nlizard\nlizardtail\nLizzie\nllama\nLlanberisslate\nLlandeilo\nLlandovery\nllano\nllautu\nLleu\nLlew\nLloyd\nLludd\nllyn\nLo\nlo\nLoa\nloa\nloach\nload\nloadage\nloaded\nloaden\nloader\nloading\nloadless\nloadpenny\nloadsome\nloadstone\nloaf\nloafer\nloaferdom\nloaferish\nloafing\nloafingly\nloaflet\nloaghtan\nloam\nloamily\nloaminess\nloaming\nloamless\nLoammi\nloamy\nloan\nloanable\nloaner\nloanin\nloanmonger\nloanword\nLoasa\nLoasaceae\nloasaceous\nloath\nloathe\nloather\nloathful\nloathfully\nloathfulness\nloathing\nloathingly\nloathliness\nloathly\nloathness\nloathsome\nloathsomely\nloathsomeness\nLoatuko\nloave\nlob\nLobachevskian\nlobal\nLobale\nlobar\nLobaria\nLobata\nLobatae\nlobate\nlobated\nlobately\nlobation\nlobber\nlobbish\nlobby\nlobbyer\nlobbyism\nlobbyist\nlobbyman\nlobcock\nlobe\nlobectomy\nlobed\nlobefoot\nlobefooted\nlobeless\nlobelet\nLobelia\nLobeliaceae\nlobeliaceous\nlobelin\nlobeline\nlobellated\nlobfig\nlobiform\nlobigerous\nlobing\nlobiped\nloblolly\nlobo\nlobola\nlobopodium\nLobosa\nlobose\nlobotomy\nlobscourse\nlobscouse\nlobscouser\nlobster\nlobstering\nlobsterish\nlobsterlike\nlobsterproof\nlobtail\nlobular\nLobularia\nlobularly\nlobulate\nlobulated\nlobulation\nlobule\nlobulette\nlobulose\nlobulous\nlobworm\nloca\nlocable\nlocal\nlocale\nlocalism\nlocalist\nlocalistic\nlocality\nlocalizable\nlocalization\nlocalize\nlocalizer\nlocally\nlocalness\nlocanda\nLocarnist\nLocarnite\nLocarnize\nLocarno\nlocate\nlocation\nlocational\nlocative\nlocator\nlocellate\nlocellus\nloch\nlochage\nlochan\nlochetic\nlochia\nlochial\nlochiocolpos\nlochiocyte\nlochiometra\nlochiometritis\nlochiopyra\nlochiorrhagia\nlochiorrhea\nlochioschesis\nLochlin\nlochometritis\nlochoperitonitis\nlochopyra\nlochus\nlochy\nloci\nlociation\nlock\nlockable\nlockage\nLockatong\nlockbox\nlocked\nlocker\nlockerman\nlocket\nlockful\nlockhole\nLockian\nLockianism\nlocking\nlockjaw\nlockless\nlocklet\nlockmaker\nlockmaking\nlockman\nlockout\nlockpin\nLockport\nlockram\nlocksman\nlocksmith\nlocksmithery\nlocksmithing\nlockspit\nlockup\nlockwork\nlocky\nloco\nlocodescriptive\nlocofoco\nLocofocoism\nlocoism\nlocomobile\nlocomobility\nlocomote\nlocomotility\nlocomotion\nlocomotive\nlocomotively\nlocomotiveman\nlocomotiveness\nlocomotivity\nlocomotor\nlocomotory\nlocomutation\nlocoweed\nLocrian\nLocrine\nloculament\nloculamentose\nloculamentous\nlocular\nloculate\nloculated\nloculation\nlocule\nloculicidal\nloculicidally\nloculose\nloculus\nlocum\nlocus\nlocust\nlocusta\nlocustal\nlocustberry\nlocustelle\nlocustid\nLocustidae\nlocusting\nlocustlike\nlocution\nlocutor\nlocutorship\nlocutory\nlod\nLoddigesia\nlode\nlodemanage\nlodesman\nlodestar\nlodestone\nlodestuff\nlodge\nlodgeable\nlodged\nlodgeful\nlodgeman\nlodgepole\nlodger\nlodgerdom\nlodging\nlodginghouse\nlodgings\nlodgment\nLodha\nlodicule\nLodoicea\nLodowic\nLodowick\nLodur\nLoegria\nloess\nloessal\nloessial\nloessic\nloessland\nloessoid\nlof\nlofstelle\nloft\nlofter\nloftily\nloftiness\nlofting\nloftless\nloftman\nloftsman\nlofty\nlog\nloganberry\nLogania\nLoganiaceae\nloganiaceous\nloganin\nlogaoedic\nlogarithm\nlogarithmal\nlogarithmetic\nlogarithmetical\nlogarithmetically\nlogarithmic\nlogarithmical\nlogarithmically\nlogarithmomancy\nlogbook\nlogcock\nloge\nlogeion\nlogeum\nloggat\nlogged\nlogger\nloggerhead\nloggerheaded\nloggia\nloggin\nlogging\nloggish\nloghead\nlogheaded\nlogia\nlogic\nlogical\nlogicalist\nlogicality\nlogicalization\nlogicalize\nlogically\nlogicalness\nlogicaster\nlogician\nlogicism\nlogicist\nlogicity\nlogicize\nlogicless\nlogie\nlogin\nlogion\nlogistic\nlogistical\nlogistician\nlogistics\nlogium\nloglet\nloglike\nlogman\nlogocracy\nlogodaedaly\nlogogogue\nlogogram\nlogogrammatic\nlogograph\nlogographer\nlogographic\nlogographical\nlogographically\nlogography\nlogogriph\nlogogriphic\nlogoi\nlogolatry\nlogology\nlogomach\nlogomacher\nlogomachic\nlogomachical\nlogomachist\nlogomachize\nlogomachy\nlogomancy\nlogomania\nlogomaniac\nlogometer\nlogometric\nlogometrical\nlogometrically\nlogopedia\nlogopedics\nlogorrhea\nlogos\nlogothete\nlogotype\nlogotypy\nLogres\nLogria\nLogris\nlogroll\nlogroller\nlogrolling\nlogway\nlogwise\nlogwood\nlogwork\nlogy\nlohan\nLohana\nLohar\nlohoch\nloimic\nloimography\nloimology\nloin\nloincloth\nloined\nloir\nLois\nLoiseleuria\nloiter\nloiterer\nloiteringly\nloiteringness\nloka\nlokao\nlokaose\nlokapala\nloke\nloket\nlokiec\nLokindra\nLokman\nLola\nLoliginidae\nLoligo\nLolium\nloll\nLollard\nLollardian\nLollardism\nLollardist\nLollardize\nLollardlike\nLollardry\nLollardy\nloller\nlollingite\nlollingly\nlollipop\nlollop\nlollopy\nlolly\nLolo\nloma\nlomastome\nlomatine\nlomatinous\nLomatium\nLombard\nlombard\nLombardeer\nLombardesque\nLombardian\nLombardic\nlomboy\nLombrosian\nloment\nlomentaceous\nLomentaria\nlomentariaceous\nlomentum\nlomita\nlommock\nLonchocarpus\nLonchopteridae\nLondinensian\nLondoner\nLondonese\nLondonesque\nLondonian\nLondonish\nLondonism\nLondonization\nLondonize\nLondony\nLondres\nlone\nlonelihood\nlonelily\nloneliness\nlonely\nloneness\nlonesome\nlonesomely\nlonesomeness\nlong\nlonga\nlongan\nlonganimity\nlonganimous\nLongaville\nlongbeak\nlongbeard\nlongboat\nlongbow\nlongcloth\nlonge\nlongear\nlonger\nlongeval\nlongevity\nlongevous\nlongfelt\nlongfin\nlongful\nlonghair\nlonghand\nlonghead\nlongheaded\nlongheadedly\nlongheadedness\nlonghorn\nlongicaudal\nlongicaudate\nlongicone\nlongicorn\nLongicornia\nlongilateral\nlongilingual\nlongiloquence\nlongimanous\nlongimetric\nlongimetry\nlonging\nlongingly\nlongingness\nLonginian\nlonginquity\nlongipennate\nlongipennine\nlongirostral\nlongirostrate\nlongirostrine\nLongirostrines\nlongisection\nlongish\nlongitude\nlongitudinal\nlongitudinally\nlongjaw\nlongleaf\nlonglegs\nlongly\nlongmouthed\nlongness\nLongobard\nLongobardi\nLongobardian\nLongobardic\nlongs\nlongshanks\nlongshore\nlongshoreman\nlongsome\nlongsomely\nlongsomeness\nlongspun\nlongspur\nlongtail\nlongue\nlongulite\nlongway\nlongways\nlongwise\nlongwool\nlongwork\nlongwort\nLonhyn\nLonicera\nLonk\nlonquhard\nlontar\nloo\nlooby\nlood\nloof\nloofah\nloofie\nloofness\nlook\nlooker\nlooking\nlookout\nlookum\nloom\nloomer\nloomery\nlooming\nloon\nloonery\nlooney\nloony\nloop\nlooper\nloopful\nloophole\nlooping\nloopist\nlooplet\nlooplike\nloopy\nloose\nloosely\nloosemouthed\nloosen\nloosener\nlooseness\nlooser\nloosestrife\nloosing\nloosish\nloot\nlootable\nlooten\nlooter\nlootie\nlootiewallah\nlootsman\nlop\nlope\nloper\nLopezia\nlophiid\nLophiidae\nlophine\nLophiodon\nlophiodont\nLophiodontidae\nlophiodontoid\nLophiola\nLophiomyidae\nLophiomyinae\nLophiomys\nlophiostomate\nlophiostomous\nlophobranch\nlophobranchiate\nLophobranchii\nlophocalthrops\nlophocercal\nLophocome\nLophocomi\nLophodermium\nlophodont\nLophophora\nlophophoral\nlophophore\nLophophorinae\nlophophorine\nLophophorus\nlophophytosis\nLophopoda\nLophornis\nLophortyx\nlophosteon\nlophotriaene\nlophotrichic\nlophotrichous\nLophura\nlopolith\nloppard\nlopper\nloppet\nlopping\nloppy\nlopseed\nlopsided\nlopsidedly\nlopsidedness\nlopstick\nloquacious\nloquaciously\nloquaciousness\nloquacity\nloquat\nloquence\nloquent\nloquently\nLora\nlora\nloral\nloran\nlorandite\nloranskite\nLoranthaceae\nloranthaceous\nLoranthus\nlorarius\nlorate\nlorcha\nLord\nlord\nlording\nlordkin\nlordless\nlordlet\nlordlike\nlordlily\nlordliness\nlordling\nlordly\nlordolatry\nlordosis\nlordotic\nlordship\nlordwood\nlordy\nlore\nloreal\nlored\nloreless\nLoren\nLorenzan\nlorenzenite\nLorenzo\nLorettine\nlorettoite\nlorgnette\nLori\nlori\nloric\nlorica\nloricarian\nLoricariidae\nloricarioid\nLoricata\nloricate\nLoricati\nlorication\nloricoid\nLorien\nlorikeet\nlorilet\nlorimer\nloriot\nloris\nLorius\nlormery\nlorn\nlornness\nloro\nLorraine\nLorrainer\nLorrainese\nlorriker\nlorry\nlors\nlorum\nlory\nlosable\nlosableness\nlose\nlosel\nloselism\nlosenger\nloser\nlosh\nlosing\nloss\nlossenite\nlossless\nlossproof\nlost\nlostling\nlostness\nLot\nlot\nLota\nlota\nlotase\nlote\nlotebush\nLotharingian\nlotic\nlotiform\nlotion\nlotment\nLotophagi\nlotophagous\nlotophagously\nlotrite\nlots\nLotta\nLotte\nlotter\nlottery\nLottie\nlotto\nLotuko\nlotus\nlotusin\nlotuslike\nLou\nlouch\nlouchettes\nloud\nlouden\nloudering\nloudish\nloudly\nloudmouthed\nloudness\nlouey\nlough\nlougheen\nLouie\nLouiqa\nLouis\nLouisa\nLouise\nLouisiana\nLouisianian\nlouisine\nlouk\nLoukas\nloukoum\nloulu\nlounder\nlounderer\nlounge\nlounger\nlounging\nloungingly\nloungy\nLoup\nloup\nloupe\nlour\nlourdy\nlouse\nlouseberry\nlousewort\nlousily\nlousiness\nlouster\nlousy\nlout\nlouter\nlouther\nloutish\nloutishly\nloutishness\nloutrophoros\nlouty\nlouvar\nlouver\nlouvered\nlouvering\nlouverwork\nLouvre\nlovability\nlovable\nlovableness\nlovably\nlovage\nlove\nlovebird\nloveflower\nloveful\nlovelass\nloveless\nlovelessly\nlovelessness\nlovelihead\nlovelily\nloveliness\nloveling\nlovelock\nlovelorn\nlovelornness\nlovely\nloveman\nlovemate\nlovemonger\nloveproof\nlover\nloverdom\nlovered\nloverhood\nlovering\nloverless\nloverliness\nloverly\nlovership\nloverwise\nlovesick\nlovesickness\nlovesome\nlovesomely\nlovesomeness\nloveworth\nloveworthy\nloving\nlovingly\nlovingness\nlow\nlowa\nlowan\nlowbell\nlowborn\nlowboy\nlowbred\nlowdah\nlowder\nloweite\nLowell\nlower\nlowerable\nlowerclassman\nlowerer\nlowering\nloweringly\nloweringness\nlowermost\nlowery\nlowigite\nlowish\nlowishly\nlowishness\nlowland\nlowlander\nlowlily\nlowliness\nlowly\nlowmen\nlowmost\nlown\nlowness\nlownly\nlowth\nLowville\nlowwood\nlowy\nlox\nloxia\nloxic\nLoxiinae\nloxoclase\nloxocosm\nloxodograph\nLoxodon\nloxodont\nLoxodonta\nloxodontous\nloxodrome\nloxodromic\nloxodromical\nloxodromically\nloxodromics\nloxodromism\nLoxolophodon\nloxolophodont\nLoxomma\nloxophthalmus\nLoxosoma\nLoxosomidae\nloxotic\nloxotomy\nloy\nloyal\nloyalism\nloyalist\nloyalize\nloyally\nloyalness\nloyalty\nLoyd\nLoyolism\nLoyolite\nlozenge\nlozenged\nlozenger\nlozengeways\nlozengewise\nlozengy\nLu\nLuba\nlubber\nlubbercock\nLubberland\nlubberlike\nlubberliness\nlubberly\nlube\nlubra\nlubric\nlubricant\nlubricate\nlubrication\nlubricational\nlubricative\nlubricator\nlubricatory\nlubricious\nlubricity\nlubricous\nlubrifaction\nlubrification\nlubrify\nlubritorian\nlubritorium\nLuc\nLucan\nLucania\nlucanid\nLucanidae\nLucanus\nlucarne\nLucayan\nlucban\nLucchese\nluce\nlucence\nlucency\nlucent\nLucentio\nlucently\nLuceres\nlucern\nlucernal\nLucernaria\nlucernarian\nLucernariidae\nlucerne\nlucet\nLuchuan\nLucia\nLucian\nLuciana\nlucible\nlucid\nlucida\nlucidity\nlucidly\nlucidness\nlucifee\nLucifer\nluciferase\nLuciferian\nLuciferidae\nluciferin\nluciferoid\nluciferous\nluciferously\nluciferousness\nlucific\nluciform\nlucifugal\nlucifugous\nlucigen\nLucile\nLucilia\nlucimeter\nLucina\nLucinacea\nLucinda\nLucinidae\nlucinoid\nLucite\nLucius\nlucivee\nluck\nlucken\nluckful\nluckie\nluckily\nluckiness\nluckless\nlucklessly\nlucklessness\nLucknow\nlucky\nlucration\nlucrative\nlucratively\nlucrativeness\nlucre\nLucrece\nLucretia\nLucretian\nLucretius\nlucriferous\nlucriferousness\nlucrific\nlucrify\nLucrine\nluctation\nluctiferous\nluctiferousness\nlucubrate\nlucubration\nlucubrator\nlucubratory\nlucule\nluculent\nluculently\nLucullan\nlucullite\nLucuma\nlucumia\nLucumo\nlucumony\nLucy\nlucy\nludden\nLuddism\nLuddite\nLudditism\nludefisk\nLudgate\nLudgathian\nLudgatian\nLudian\nludibrious\nludibry\nludicropathetic\nludicroserious\nludicrosity\nludicrosplenetic\nludicrous\nludicrously\nludicrousness\nludification\nludlamite\nLudlovian\nLudlow\nludo\nLudolphian\nLudwig\nludwigite\nlue\nLuella\nlues\nluetic\nluetically\nlufberry\nlufbery\nluff\nLuffa\nLug\nlug\nLuganda\nluge\nluger\nluggage\nluggageless\nluggar\nlugged\nlugger\nluggie\nLuggnagg\nlugmark\nLugnas\nlugsail\nlugsome\nlugubriosity\nlugubrious\nlugubriously\nlugubriousness\nlugworm\nluhinga\nLui\nLuian\nLuigi\nluigino\nLuis\nLuiseno\nLuite\nlujaurite\nLukas\nLuke\nluke\nlukely\nlukeness\nlukewarm\nlukewarmish\nlukewarmly\nlukewarmness\nlukewarmth\nLula\nlulab\nlull\nlullaby\nluller\nLullian\nlulliloo\nlullingly\nLulu\nlulu\nLum\nlum\nlumachel\nlumbaginous\nlumbago\nlumbang\nlumbar\nlumbarization\nlumbayao\nlumber\nlumberdar\nlumberdom\nlumberer\nlumbering\nlumberingly\nlumberingness\nlumberjack\nlumberless\nlumberly\nlumberman\nlumbersome\nlumberyard\nlumbocolostomy\nlumbocolotomy\nlumbocostal\nlumbodorsal\nlumbodynia\nlumbosacral\nlumbovertebral\nlumbrical\nlumbricalis\nLumbricidae\nlumbriciform\nlumbricine\nlumbricoid\nlumbricosis\nLumbricus\nlumbrous\nlumen\nluminaire\nLuminal\nluminal\nluminance\nluminant\nluminarious\nluminarism\nluminarist\nluminary\nluminate\nlumination\nluminative\nluminator\nlumine\nluminesce\nluminescence\nluminescent\nluminiferous\nluminificent\nluminism\nluminist\nluminologist\nluminometer\nluminosity\nluminous\nluminously\nluminousness\nlummox\nlummy\nlump\nlumper\nlumpet\nlumpfish\nlumpily\nlumpiness\nlumping\nlumpingly\nlumpish\nlumpishly\nlumpishness\nlumpkin\nlumpman\nlumpsucker\nlumpy\nluna\nlunacy\nlunambulism\nlunar\nlunare\nLunaria\nlunarian\nlunarist\nlunarium\nlunary\nlunate\nlunatellus\nlunately\nlunatic\nlunatically\nlunation\nlunatize\nlunatum\nlunch\nluncheon\nluncheoner\nluncheonette\nluncheonless\nluncher\nlunchroom\nLunda\nLundinarium\nlundress\nlundyfoot\nlune\nLunel\nlunes\nlunette\nlung\nlunge\nlunged\nlungeous\nlunger\nlungfish\nlungflower\nlungful\nlungi\nlungie\nlungis\nlungless\nlungmotor\nlungsick\nlungworm\nlungwort\nlungy\nlunicurrent\nluniform\nlunisolar\nlunistice\nlunistitial\nlunitidal\nLunka\nlunkhead\nlunn\nlunoid\nlunt\nlunula\nlunular\nLunularia\nlunulate\nlunulated\nlunule\nlunulet\nlunulite\nLunulites\nLuo\nlupanarian\nlupanine\nlupe\nlupeol\nlupeose\nLupercal\nLupercalia\nLupercalian\nLuperci\nlupetidine\nlupicide\nLupid\nlupiform\nlupinaster\nlupine\nlupinin\nlupinine\nlupinosis\nlupinous\nLupinus\nlupis\nlupoid\nlupous\nlupulic\nlupulin\nlupuline\nlupulinic\nlupulinous\nlupulinum\nlupulus\nlupus\nlupuserythematosus\nLur\nlura\nlural\nlurch\nlurcher\nlurchingfully\nlurchingly\nlurchline\nlurdan\nlurdanism\nlure\nlureful\nlurement\nlurer\nluresome\nlurg\nlurgworm\nLuri\nlurid\nluridity\nluridly\nluridness\nluringly\nlurk\nlurker\nlurkingly\nlurkingness\nlurky\nlurrier\nlurry\nLusatian\nLuscinia\nluscious\nlusciously\nlusciousness\nlush\nLushai\nlushburg\nLushei\nlusher\nlushly\nlushness\nlushy\nLusiad\nLusian\nLusitania\nLusitanian\nlusk\nlusky\nlusory\nlust\nluster\nlusterer\nlusterless\nlusterware\nlustful\nlustfully\nlustfulness\nlustihead\nlustily\nlustiness\nlustless\nlustra\nlustral\nlustrant\nlustrate\nlustration\nlustrative\nlustratory\nlustreless\nlustrical\nlustrification\nlustrify\nlustrine\nlustring\nlustrous\nlustrously\nlustrousness\nlustrum\nlusty\nlut\nlutaceous\nlutanist\nlutany\nLutao\nlutation\nLutayo\nlute\nluteal\nlutecia\nlutecium\nlutein\nluteinization\nluteinize\nlutelet\nlutemaker\nlutemaking\nluteo\nluteocobaltic\nluteofulvous\nluteofuscescent\nluteofuscous\nluteolin\nluteolous\nluteoma\nluteorufescent\nluteous\nluteovirescent\nluter\nlutescent\nlutestring\nLutetia\nLutetian\nlutetium\nluteway\nlutfisk\nLuther\nLutheran\nLutheranic\nLutheranism\nLutheranize\nLutheranizer\nLutherism\nLutherist\nluthern\nluthier\nlutianid\nLutianidae\nlutianoid\nLutianus\nlutidine\nlutidinic\nluting\nlutist\nLutjanidae\nLutjanus\nlutose\nLutra\nLutraria\nLutreola\nlutrin\nLutrinae\nlutrine\nlutulence\nlutulent\nLuvaridae\nLuvian\nLuvish\nLuwian\nlux\nluxate\nluxation\nluxe\nLuxemburger\nLuxemburgian\nluxulianite\nluxuriance\nluxuriancy\nluxuriant\nluxuriantly\nluxuriantness\nluxuriate\nluxuriation\nluxurious\nluxuriously\nluxuriousness\nluxurist\nluxury\nluxus\nLuzula\nLwo\nly\nlyam\nlyard\nLyas\nLycaena\nlycaenid\nLycaenidae\nlycanthrope\nlycanthropia\nlycanthropic\nlycanthropist\nlycanthropize\nlycanthropous\nlycanthropy\nlyceal\nlyceum\nLychnic\nLychnis\nlychnomancy\nlychnoscope\nlychnoscopic\nLycian\nlycid\nLycidae\nLycium\nLycodes\nLycodidae\nlycodoid\nlycopene\nLycoperdaceae\nlycoperdaceous\nLycoperdales\nlycoperdoid\nLycoperdon\nlycoperdon\nLycopersicon\nlycopin\nlycopod\nlycopode\nLycopodiaceae\nlycopodiaceous\nLycopodiales\nLycopodium\nLycopsida\nLycopsis\nLycopus\nlycorine\nLycosa\nlycosid\nLycosidae\nlyctid\nLyctidae\nLyctus\nLycus\nlyddite\nLydia\nLydian\nlydite\nlye\nLyencephala\nlyencephalous\nlyery\nlygaeid\nLygaeidae\nLygeum\nLygodium\nLygosoma\nlying\nlyingly\nLymantria\nlymantriid\nLymantriidae\nlymhpangiophlebitis\nLymnaea\nlymnaean\nlymnaeid\nLymnaeidae\nlymph\nlymphad\nlymphadenectasia\nlymphadenectasis\nlymphadenia\nlymphadenitis\nlymphadenoid\nlymphadenoma\nlymphadenopathy\nlymphadenosis\nlymphaemia\nlymphagogue\nlymphangeitis\nlymphangial\nlymphangiectasis\nlymphangiectatic\nlymphangiectodes\nlymphangiitis\nlymphangioendothelioma\nlymphangiofibroma\nlymphangiology\nlymphangioma\nlymphangiomatous\nlymphangioplasty\nlymphangiosarcoma\nlymphangiotomy\nlymphangitic\nlymphangitis\nlymphatic\nlymphatical\nlymphation\nlymphatism\nlymphatitis\nlymphatolysin\nlymphatolysis\nlymphatolytic\nlymphectasia\nlymphedema\nlymphemia\nlymphenteritis\nlymphoblast\nlymphoblastic\nlymphoblastoma\nlymphoblastosis\nlymphocele\nlymphocyst\nlymphocystosis\nlymphocyte\nlymphocythemia\nlymphocytic\nlymphocytoma\nlymphocytomatosis\nlymphocytosis\nlymphocytotic\nlymphocytotoxin\nlymphodermia\nlymphoduct\nlymphogenic\nlymphogenous\nlymphoglandula\nlymphogranuloma\nlymphoid\nlymphoidectomy\nlymphology\nlymphoma\nlymphomatosis\nlymphomatous\nlymphomonocyte\nlymphomyxoma\nlymphopathy\nlymphopenia\nlymphopenial\nlymphopoiesis\nlymphopoietic\nlymphoprotease\nlymphorrhage\nlymphorrhagia\nlymphorrhagic\nlymphorrhea\nlymphosarcoma\nlymphosarcomatosis\nlymphosarcomatous\nlymphosporidiosis\nlymphostasis\nlymphotaxis\nlymphotome\nlymphotomy\nlymphotoxemia\nlymphotoxin\nlymphotrophic\nlymphotrophy\nlymphous\nlymphuria\nlymphy\nlyncean\nLynceus\nlynch\nlynchable\nlyncher\nLyncid\nlyncine\nLyndon\nLynette\nLyngbyaceae\nLyngbyeae\nLynn\nLynne\nLynnette\nlynnhaven\nlynx\nLyomeri\nlyomerous\nLyon\nLyonese\nLyonetia\nlyonetiid\nLyonetiidae\nLyonnais\nlyonnaise\nLyonnesse\nlyophile\nlyophilization\nlyophilize\nlyophobe\nLyopoma\nLyopomata\nlyopomatous\nlyotrope\nlypemania\nLyperosia\nlypothymia\nlyra\nLyraid\nlyrate\nlyrated\nlyrately\nlyraway\nlyre\nlyrebird\nlyreflower\nlyreman\nlyretail\nlyric\nlyrical\nlyrically\nlyricalness\nlyrichord\nlyricism\nlyricist\nlyricize\nLyrid\nlyriform\nlyrism\nlyrist\nLyrurus\nlys\nLysander\nlysate\nlyse\nLysenkoism\nlysidine\nlysigenic\nlysigenous\nlysigenously\nLysiloma\nLysimachia\nLysimachus\nlysimeter\nlysin\nlysine\nlysis\nLysistrata\nlysogen\nlysogenesis\nlysogenetic\nlysogenic\nlysozyme\nlyssa\nlyssic\nlyssophobia\nlyterian\nLythraceae\nlythraceous\nLythrum\nlytic\nlytta\nlyxose\nM\nm\nMa\nma\nmaam\nmaamselle\nMaarten\nMab\nMaba\nMabel\nMabellona\nmabi\nMabinogion\nmabolo\nMac\nmac\nmacaasim\nmacabre\nmacabresque\nMacaca\nmacaco\nMacacus\nmacadam\nMacadamia\nmacadamite\nmacadamization\nmacadamize\nmacadamizer\nMacaglia\nmacan\nmacana\nMacanese\nmacao\nmacaque\nMacaranga\nMacarani\nMacareus\nmacarism\nmacarize\nmacaroni\nmacaronic\nmacaronical\nmacaronically\nmacaronicism\nmacaronism\nmacaroon\nMacartney\nMacassar\nMacassarese\nmacaw\nMacbeth\nMaccabaeus\nMaccabean\nMaccabees\nmaccaboy\nmacco\nmaccoboy\nMacduff\nmace\nmacedoine\nMacedon\nMacedonian\nMacedonic\nmacehead\nmaceman\nmacer\nmacerate\nmacerater\nmaceration\nMacflecknoe\nmachairodont\nMachairodontidae\nMachairodontinae\nMachairodus\nmachan\nmachar\nmachete\nMachetes\nmachi\nMachiavel\nMachiavellian\nMachiavellianism\nMachiavellianly\nMachiavellic\nMachiavellism\nmachiavellist\nMachiavellistic\nmachicolate\nmachicolation\nmachicoulis\nMachicui\nmachila\nMachilidae\nMachilis\nmachin\nmachinability\nmachinable\nmachinal\nmachinate\nmachination\nmachinator\nmachine\nmachineful\nmachineless\nmachinelike\nmachinely\nmachineman\nmachinemonger\nmachiner\nmachinery\nmachinification\nmachinify\nmachinism\nmachinist\nmachinization\nmachinize\nmachinoclast\nmachinofacture\nmachinotechnique\nmachinule\nMachogo\nmachopolyp\nmachree\nmacies\nMacigno\nmacilence\nmacilency\nmacilent\nmack\nmackenboy\nmackerel\nmackereler\nmackereling\nMackinaw\nmackins\nmackintosh\nmackintoshite\nmackle\nmacklike\nmacle\nMacleaya\nmacled\nMaclura\nMaclurea\nmaclurin\nMacmillanite\nmaco\nMacon\nmaconite\nMacracanthorhynchus\nmacracanthrorhynchiasis\nmacradenous\nmacrame\nmacrander\nmacrandrous\nmacrauchene\nMacrauchenia\nmacraucheniid\nMacraucheniidae\nmacraucheniiform\nmacrauchenioid\nmacrencephalic\nmacrencephalous\nmacro\nmacroanalysis\nmacroanalyst\nmacroanalytical\nmacrobacterium\nmacrobian\nmacrobiosis\nmacrobiote\nmacrobiotic\nmacrobiotics\nMacrobiotus\nmacroblast\nmacrobrachia\nmacrocarpous\nMacrocentrinae\nMacrocentrus\nmacrocephalia\nmacrocephalic\nmacrocephalism\nmacrocephalous\nmacrocephalus\nmacrocephaly\nmacrochaeta\nmacrocheilia\nMacrochelys\nmacrochemical\nmacrochemically\nmacrochemistry\nMacrochira\nmacrochiran\nMacrochires\nmacrochiria\nMacrochiroptera\nmacrochiropteran\nmacrocladous\nmacroclimate\nmacroclimatic\nmacrococcus\nmacrocoly\nmacroconidial\nmacroconidium\nmacroconjugant\nmacrocornea\nmacrocosm\nmacrocosmic\nmacrocosmical\nmacrocosmology\nmacrocosmos\nmacrocrystalline\nmacrocyst\nMacrocystis\nmacrocyte\nmacrocythemia\nmacrocytic\nmacrocytosis\nmacrodactyl\nmacrodactylia\nmacrodactylic\nmacrodactylism\nmacrodactylous\nmacrodactyly\nmacrodiagonal\nmacrodomatic\nmacrodome\nmacrodont\nmacrodontia\nmacrodontism\nmacroelement\nmacroergate\nmacroevolution\nmacrofarad\nmacrogamete\nmacrogametocyte\nmacrogamy\nmacrogastria\nmacroglossate\nmacroglossia\nmacrognathic\nmacrognathism\nmacrognathous\nmacrogonidium\nmacrograph\nmacrographic\nmacrography\nmacrolepidoptera\nmacrolepidopterous\nmacrology\nmacromandibular\nmacromania\nmacromastia\nmacromazia\nmacromelia\nmacromeral\nmacromere\nmacromeric\nmacromerite\nmacromeritic\nmacromesentery\nmacrometer\nmacromethod\nmacromolecule\nmacromyelon\nmacromyelonal\nmacron\nmacronuclear\nmacronucleus\nmacronutrient\nmacropetalous\nmacrophage\nmacrophagocyte\nmacrophagus\nMacrophoma\nmacrophotograph\nmacrophotography\nmacrophyllous\nmacrophysics\nmacropia\nmacropinacoid\nmacropinacoidal\nmacroplankton\nmacroplasia\nmacroplastia\nmacropleural\nmacropodia\nMacropodidae\nMacropodinae\nmacropodine\nmacropodous\nmacroprism\nmacroprosopia\nmacropsia\nmacropteran\nmacropterous\nMacropus\nMacropygia\nmacropyramid\nmacroreaction\nMacrorhamphosidae\nMacrorhamphosus\nmacrorhinia\nMacrorhinus\nmacroscelia\nMacroscelides\nmacroscian\nmacroscopic\nmacroscopical\nmacroscopically\nmacroseism\nmacroseismic\nmacroseismograph\nmacrosepalous\nmacroseptum\nmacrosmatic\nmacrosomatia\nmacrosomatous\nmacrosomia\nmacrosplanchnic\nmacrosporange\nmacrosporangium\nmacrospore\nmacrosporic\nMacrosporium\nmacrosporophore\nmacrosporophyl\nmacrosporophyll\nMacrostachya\nmacrostomatous\nmacrostomia\nmacrostructural\nmacrostructure\nmacrostylospore\nmacrostylous\nmacrosymbiont\nmacrothere\nMacrotheriidae\nmacrotherioid\nMacrotherium\nmacrotherm\nmacrotia\nmacrotin\nMacrotolagus\nmacrotome\nmacrotone\nmacrotous\nmacrourid\nMacrouridae\nMacrourus\nMacrozamia\nmacrozoogonidium\nmacrozoospore\nMacrura\nmacrural\nmacruran\nmacruroid\nmacrurous\nmactation\nMactra\nMactridae\nmactroid\nmacuca\nmacula\nmacular\nmaculate\nmaculated\nmaculation\nmacule\nmaculicole\nmaculicolous\nmaculiferous\nmaculocerebral\nmaculopapular\nmaculose\nMacusi\nmacuta\nmad\nMadagascan\nMadagascar\nMadagascarian\nMadagass\nmadam\nmadame\nmadapollam\nmadarosis\nmadarotic\nmadbrain\nmadbrained\nmadcap\nmadden\nmaddening\nmaddeningly\nmaddeningness\nmadder\nmadderish\nmadderwort\nmadding\nmaddingly\nmaddish\nmaddle\nmade\nMadecase\nmadefaction\nmadefy\nMadegassy\nMadeira\nMadeiran\nMadeline\nmadeline\nMadelon\nmadescent\nMadge\nmadhouse\nmadhuca\nMadhva\nMadi\nMadia\nmadid\nmadidans\nMadiga\nmadisterium\nmadling\nmadly\nmadman\nmadnep\nmadness\nmado\nMadoc\nMadonna\nMadonnahood\nMadonnaish\nMadonnalike\nmadoqua\nMadotheca\nmadrague\nMadras\nmadrasah\nMadrasi\nmadreperl\nMadrepora\nMadreporacea\nmadreporacean\nMadreporaria\nmadreporarian\nmadrepore\nmadreporian\nmadreporic\nmadreporiform\nmadreporite\nmadreporitic\nMadrid\nmadrier\nmadrigal\nmadrigaler\nmadrigaletto\nmadrigalian\nmadrigalist\nMadrilene\nMadrilenian\nmadrona\nmadship\nmadstone\nMadurese\nmaduro\nmadweed\nmadwoman\nmadwort\nmae\nMaeandra\nMaeandrina\nmaeandrine\nmaeandriniform\nmaeandrinoid\nmaeandroid\nMaecenas\nMaecenasship\nmaegbote\nMaelstrom\nMaemacterion\nmaenad\nmaenadic\nmaenadism\nmaenaite\nMaenalus\nMaenidae\nMaeonian\nMaeonides\nmaestri\nmaestro\nmaffia\nmaffick\nmafficker\nmaffle\nmafflin\nmafic\nmafoo\nmafura\nmag\nMaga\nMagadhi\nmagadis\nmagadize\nMagahi\nMagalensia\nmagani\nmagas\nmagazinable\nmagazinage\nmagazine\nmagazinelet\nmagaziner\nmagazinette\nmagazinish\nmagazinism\nmagazinist\nmagaziny\nMagdalen\nMagdalene\nMagdalenian\nmage\nMagellan\nMagellanian\nMagellanic\nmagenta\nmagged\nMaggie\nmaggle\nmaggot\nmaggotiness\nmaggotpie\nmaggoty\nMaggy\nMagh\nMaghi\nMaghrib\nMaghribi\nMagi\nmagi\nMagian\nMagianism\nmagic\nmagical\nmagicalize\nmagically\nmagicdom\nmagician\nmagicianship\nmagicked\nmagicking\nMagindanao\nmagiric\nmagirics\nmagirist\nmagiristic\nmagirological\nmagirologist\nmagirology\nMagism\nmagister\nmagisterial\nmagisteriality\nmagisterially\nmagisterialness\nmagistery\nmagistracy\nmagistral\nmagistrality\nmagistrally\nmagistrand\nmagistrant\nmagistrate\nmagistrateship\nmagistratic\nmagistratical\nmagistratically\nmagistrative\nmagistrature\nMaglemose\nMaglemosean\nMaglemosian\nmagma\nmagmatic\nmagnanimity\nmagnanimous\nmagnanimously\nmagnanimousness\nmagnascope\nmagnascopic\nmagnate\nmagnecrystallic\nmagnelectric\nmagneoptic\nmagnes\nmagnesia\nmagnesial\nmagnesian\nmagnesic\nmagnesioferrite\nmagnesite\nmagnesium\nmagnet\nmagneta\nmagnetic\nmagnetical\nmagnetically\nmagneticalness\nmagnetician\nmagnetics\nmagnetiferous\nmagnetification\nmagnetify\nmagnetimeter\nmagnetism\nmagnetist\nmagnetite\nmagnetitic\nmagnetizability\nmagnetizable\nmagnetization\nmagnetize\nmagnetizer\nmagneto\nmagnetobell\nmagnetochemical\nmagnetochemistry\nmagnetod\nmagnetodynamo\nmagnetoelectric\nmagnetoelectrical\nmagnetoelectricity\nmagnetogenerator\nmagnetogram\nmagnetograph\nmagnetographic\nmagnetoid\nmagnetomachine\nmagnetometer\nmagnetometric\nmagnetometrical\nmagnetometrically\nmagnetometry\nmagnetomotive\nmagnetomotor\nmagneton\nmagnetooptic\nmagnetooptical\nmagnetooptics\nmagnetophone\nmagnetophonograph\nmagnetoplumbite\nmagnetoprinter\nmagnetoscope\nmagnetostriction\nmagnetotelegraph\nmagnetotelephone\nmagnetotherapy\nmagnetotransmitter\nmagnetron\nmagnicaudate\nmagnicaudatous\nmagnifiable\nmagnific\nmagnifical\nmagnifically\nMagnificat\nmagnification\nmagnificative\nmagnifice\nmagnificence\nmagnificent\nmagnificently\nmagnificentness\nmagnifico\nmagnifier\nmagnify\nmagniloquence\nmagniloquent\nmagniloquently\nmagniloquy\nmagnipotence\nmagnipotent\nmagnirostrate\nmagnisonant\nmagnitude\nmagnitudinous\nmagnochromite\nmagnoferrite\nMagnolia\nmagnolia\nMagnoliaceae\nmagnoliaceous\nmagnum\nMagnus\nMagog\nmagot\nmagpie\nmagpied\nmagpieish\nmagsman\nmaguari\nmaguey\nMagyar\nMagyaran\nMagyarism\nMagyarization\nMagyarize\nMah\nmaha\nmahaleb\nmahalla\nmahant\nmahar\nmaharaja\nmaharajrana\nmaharana\nmaharanee\nmaharani\nmaharao\nMaharashtri\nmaharawal\nmaharawat\nmahatma\nmahatmaism\nMahayana\nMahayanism\nMahayanist\nMahayanistic\nMahdi\nMahdian\nMahdiship\nMahdism\nMahdist\nMahesh\nMahi\nMahican\nmahmal\nMahmoud\nmahmudi\nmahoe\nmahoganize\nmahogany\nmahoitre\nmaholi\nmaholtine\nMahomet\nMahometry\nmahone\nMahonia\nMahori\nMahound\nmahout\nMahra\nMahran\nMahri\nmahseer\nmahua\nmahuang\nMaia\nMaiacca\nMaianthemum\nmaid\nMaida\nmaidan\nmaiden\nmaidenhair\nmaidenhead\nmaidenhood\nmaidenish\nmaidenism\nmaidenlike\nmaidenliness\nmaidenly\nmaidenship\nmaidenweed\nmaidhood\nMaidie\nmaidish\nmaidism\nmaidkin\nmaidlike\nmaidling\nmaidservant\nMaidu\nmaidy\nmaiefic\nmaieutic\nmaieutical\nmaieutics\nmaigre\nmaiid\nMaiidae\nmail\nmailable\nmailbag\nmailbox\nmailclad\nmailed\nmailer\nmailguard\nmailie\nmaillechort\nmailless\nmailman\nmailplane\nmaim\nmaimed\nmaimedly\nmaimedness\nmaimer\nmaimon\nMaimonidean\nMaimonist\nmain\nMainan\nMaine\nmainferre\nmainlander\nmainly\nmainmast\nmainmortable\nmainour\nmainpast\nmainpernable\nmainpernor\nmainpin\nmainport\nmainpost\nmainprise\nmains\nmainsail\nmainsheet\nmainspring\nmainstay\nMainstreeter\nMainstreetism\nmaint\nmaintain\nmaintainable\nmaintainableness\nmaintainer\nmaintainment\nmaintainor\nmaintenance\nMaintenon\nmaintop\nmaintopman\nmaioid\nMaioidea\nmaioidean\nMaioli\nMaiongkong\nMaipure\nmairatour\nmaire\nmaisonette\nMaithili\nmaitlandite\nMaitreya\nMaius\nmaize\nmaizebird\nmaizenic\nmaizer\nMaja\nMajagga\nmajagua\nMajesta\nmajestic\nmajestical\nmajestically\nmajesticalness\nmajesticness\nmajestious\nmajesty\nmajestyship\nMajlis\nmajo\nmajolica\nmajolist\nmajoon\nMajor\nmajor\nmajorate\nmajoration\nMajorcan\nmajorette\nMajorism\nMajorist\nMajoristic\nmajority\nmajorize\nmajorship\nmajuscular\nmajuscule\nmakable\nMakah\nMakaraka\nMakari\nMakassar\nmake\nmakebate\nmakedom\nmakefast\nmaker\nmakeress\nmakership\nmakeshift\nmakeshiftiness\nmakeshiftness\nmakeshifty\nmakeweight\nmakhzan\nmaki\nmakimono\nmaking\nmakluk\nmako\nMakonde\nmakroskelic\nMaku\nMakua\nmakuk\nmal\nmala\nmalaanonang\nMalabar\nMalabarese\nmalabathrum\nmalacanthid\nMalacanthidae\nmalacanthine\nMalacanthus\nMalacca\nMalaccan\nmalaccident\nMalaceae\nmalaceous\nmalachite\nmalacia\nMalaclemys\nMalaclypse\nMalacobdella\nMalacocotylea\nmalacoderm\nMalacodermatidae\nmalacodermatous\nMalacodermidae\nmalacodermous\nmalacoid\nmalacolite\nmalacological\nmalacologist\nmalacology\nmalacon\nmalacophilous\nmalacophonous\nmalacophyllous\nmalacopod\nMalacopoda\nmalacopodous\nmalacopterygian\nMalacopterygii\nmalacopterygious\nMalacoscolices\nMalacoscolicine\nMalacosoma\nMalacostraca\nmalacostracan\nmalacostracology\nmalacostracous\nmalactic\nmaladaptation\nmaladdress\nmaladive\nmaladjust\nmaladjusted\nmaladjustive\nmaladjustment\nmaladminister\nmaladministration\nmaladministrator\nmaladroit\nmaladroitly\nmaladroitness\nmaladventure\nmalady\nMalaga\nMalagasy\nMalagigi\nmalagma\nmalaguena\nmalahack\nmalaise\nmalakin\nmalalignment\nmalambo\nmalandered\nmalanders\nmalandrous\nmalanga\nmalapaho\nmalapert\nmalapertly\nmalapertness\nmalapi\nmalapplication\nmalappointment\nmalappropriate\nmalappropriation\nmalaprop\nmalapropian\nmalapropish\nmalapropism\nmalapropoism\nmalapropos\nMalapterurus\nmalar\nmalaria\nmalarial\nmalariaproof\nmalarin\nmalarioid\nmalariologist\nmalariology\nmalarious\nmalarkey\nmalaroma\nmalarrangement\nmalasapsap\nmalassimilation\nmalassociation\nmalate\nmalati\nmalattress\nmalax\nmalaxable\nmalaxage\nmalaxate\nmalaxation\nmalaxator\nmalaxerman\nMalaxis\nMalay\nMalayalam\nMalayalim\nMalayan\nMalayic\nMalayize\nMalayoid\nMalaysian\nmalbehavior\nmalbrouck\nmalchite\nMalchus\nMalcolm\nmalconceived\nmalconduct\nmalconformation\nmalconstruction\nmalcontent\nmalcontented\nmalcontentedly\nmalcontentedness\nmalcontentism\nmalcontently\nmalcontentment\nmalconvenance\nmalcreated\nmalcultivation\nmaldeveloped\nmaldevelopment\nmaldigestion\nmaldirection\nmaldistribution\nMaldivian\nmaldonite\nmalduck\nMale\nmale\nmalease\nmaleate\nMalebolge\nMalebolgian\nMalebolgic\nMalebranchism\nMalecite\nmaledicent\nmaledict\nmalediction\nmaledictive\nmaledictory\nmaleducation\nmalefaction\nmalefactor\nmalefactory\nmalefactress\nmalefical\nmalefically\nmaleficence\nmaleficent\nmaleficial\nmaleficiate\nmaleficiation\nmaleic\nmaleinoid\nmalella\nMalemute\nmaleness\nmalengine\nmaleo\nmaleruption\nMalesherbia\nMalesherbiaceae\nmalesherbiaceous\nmalevolence\nmalevolency\nmalevolent\nmalevolently\nmalexecution\nmalfeasance\nmalfeasant\nmalfed\nmalformation\nmalformed\nmalfortune\nmalfunction\nmalgovernment\nmalgrace\nmalguzar\nmalguzari\nmalhonest\nmalhygiene\nmali\nmalic\nmalice\nmaliceful\nmaliceproof\nmalicho\nmalicious\nmaliciously\nmaliciousness\nmalicorium\nmalidentification\nmaliferous\nmaliform\nmalign\nmalignance\nmalignancy\nmalignant\nmalignantly\nmalignation\nmaligner\nmalignify\nmalignity\nmalignly\nmalignment\nmalik\nmalikadna\nmalikala\nmalikana\nMaliki\nMalikite\nmaline\nmalines\nmalinfluence\nmalinger\nmalingerer\nmalingery\nMalinois\nmalinowskite\nmalinstitution\nmalinstruction\nmalintent\nmalism\nmalison\nmalist\nmalistic\nmalkin\nMalkite\nmall\nmalladrite\nmallangong\nmallard\nmallardite\nmalleability\nmalleabilization\nmalleable\nmalleableize\nmalleableized\nmalleableness\nmalleablize\nmalleal\nmallear\nmalleate\nmalleation\nmallee\nMalleifera\nmalleiferous\nmalleiform\nmallein\nmalleinization\nmalleinize\nmallemaroking\nmallemuck\nmalleoincudal\nmalleolable\nmalleolar\nmalleolus\nmallet\nmalleus\nMalling\nMallophaga\nmallophagan\nmallophagous\nmalloseismic\nMallotus\nmallow\nmallowwort\nMalloy\nmallum\nmallus\nmalm\nMalmaison\nmalmignatte\nmalmsey\nmalmstone\nmalmy\nmalnourished\nmalnourishment\nmalnutrite\nmalnutrition\nmalo\nmalobservance\nmalobservation\nmaloccluded\nmalocclusion\nmalodor\nmalodorant\nmalodorous\nmalodorously\nmalodorousness\nmalojilla\nmalonate\nmalonic\nmalonyl\nmalonylurea\nMalope\nmaloperation\nmalorganization\nmalorganized\nmalouah\nmalpais\nMalpighia\nMalpighiaceae\nmalpighiaceous\nMalpighian\nmalplaced\nmalpoise\nmalposed\nmalposition\nmalpractice\nmalpractioner\nmalpraxis\nmalpresentation\nmalproportion\nmalproportioned\nmalpropriety\nmalpublication\nmalreasoning\nmalrotation\nmalshapen\nmalt\nmaltable\nmaltase\nmalter\nMaltese\nmaltha\nMalthe\nmalthouse\nMalthusian\nMalthusianism\nMalthusiast\nmaltiness\nmalting\nmaltman\nMalto\nmaltobiose\nmaltodextrin\nmaltodextrine\nmaltolte\nmaltose\nmaltreat\nmaltreatment\nmaltreator\nmaltster\nmalturned\nmaltworm\nmalty\nmalunion\nMalurinae\nmalurine\nMalurus\nMalus\nMalva\nMalvaceae\nmalvaceous\nMalvales\nmalvasia\nmalvasian\nMalvastrum\nmalversation\nmalverse\nmalvoisie\nmalvolition\nMam\nmamba\nmambo\nmameliere\nmamelonation\nmameluco\nMameluke\nMamercus\nMamers\nMamertine\nMamie\nMamilius\nmamlatdar\nmamma\nmammal\nmammalgia\nMammalia\nmammalian\nmammaliferous\nmammality\nmammalogical\nmammalogist\nmammalogy\nmammary\nmammate\nMammea\nmammectomy\nmammee\nmammer\nMammifera\nmammiferous\nmammiform\nmammilla\nmammillaplasty\nmammillar\nMammillaria\nmammillary\nmammillate\nmammillated\nmammillation\nmammilliform\nmammilloid\nmammitis\nmammock\nmammogen\nmammogenic\nmammogenically\nmammon\nmammondom\nmammoniacal\nmammonish\nmammonism\nmammonist\nmammonistic\nmammonite\nmammonitish\nmammonization\nmammonize\nmammonolatry\nMammonteus\nmammoth\nmammothrept\nmammula\nmammular\nMammut\nMammutidae\nmammy\nmamo\nman\nmana\nManabozho\nmanacle\nManacus\nmanage\nmanageability\nmanageable\nmanageableness\nmanageably\nmanagee\nmanageless\nmanagement\nmanagemental\nmanager\nmanagerdom\nmanageress\nmanagerial\nmanagerially\nmanagership\nmanagery\nmanaism\nmanakin\nmanal\nmanas\nManasquan\nmanatee\nManatidae\nmanatine\nmanatoid\nManatus\nmanavel\nmanavelins\nManavendra\nmanbird\nmanbot\nmanche\nManchester\nManchesterdom\nManchesterism\nManchesterist\nManchestrian\nmanchet\nmanchineel\nManchu\nManchurian\nmancinism\nmancipable\nmancipant\nmancipate\nmancipation\nmancipative\nmancipatory\nmancipee\nmancipium\nmanciple\nmancipleship\nmancipular\nmancono\nMancunian\nmancus\nmand\nMandaean\nMandaeism\nMandaic\nMandaite\nmandala\nMandalay\nmandament\nmandamus\nMandan\nmandant\nmandarah\nmandarin\nmandarinate\nmandarindom\nmandariness\nmandarinic\nmandarinism\nmandarinize\nmandarinship\nmandatary\nmandate\nmandatee\nmandation\nmandative\nmandator\nmandatorily\nmandatory\nmandatum\nMande\nmandelate\nmandelic\nmandible\nmandibula\nmandibular\nmandibulary\nMandibulata\nmandibulate\nmandibulated\nmandibuliform\nmandibulohyoid\nmandibulomaxillary\nmandibulopharyngeal\nmandibulosuspensorial\nmandil\nmandilion\nMandingan\nMandingo\nmandola\nmandolin\nmandolinist\nmandolute\nmandom\nmandora\nmandore\nmandra\nmandragora\nmandrake\nmandrel\nmandriarch\nmandrill\nmandrin\nmandruka\nmandua\nmanducable\nmanducate\nmanducation\nmanducatory\nmandyas\nmane\nmaned\nmanege\nmanei\nmaneless\nmanent\nmanerial\nmanes\nmanesheet\nmaness\nManetti\nManettia\nmaneuver\nmaneuverability\nmaneuverable\nmaneuverer\nmaneuvrability\nmaneuvrable\nmaney\nManfred\nManfreda\nmanful\nmanfully\nmanfulness\nmang\nmanga\nmangabeira\nmangabey\nmangal\nmanganapatite\nmanganate\nmanganblende\nmanganbrucite\nmanganeisen\nmanganese\nmanganesian\nmanganetic\nmanganhedenbergite\nmanganic\nmanganiferous\nmanganite\nmanganium\nmanganize\nManganja\nmanganocalcite\nmanganocolumbite\nmanganophyllite\nmanganosiderite\nmanganosite\nmanganostibiite\nmanganotantalite\nmanganous\nmanganpectolite\nMangar\nMangbattu\nmange\nmangeao\nmangel\nmangelin\nmanger\nmangerite\nmangi\nMangifera\nmangily\nmanginess\nmangle\nmangleman\nmangler\nmangling\nmanglingly\nmango\nmangona\nmangonel\nmangonism\nmangonization\nmangonize\nmangosteen\nmangrass\nmangrate\nmangrove\nMangue\nmangue\nmangy\nMangyan\nmanhandle\nManhattan\nManhattanite\nManhattanize\nmanhead\nmanhole\nmanhood\nmani\nmania\nmaniable\nmaniac\nmaniacal\nmaniacally\nmanic\nManicaria\nmanicate\nManichaean\nManichaeanism\nManichaeanize\nManichaeism\nManichaeist\nManichee\nmanichord\nmanicole\nmanicure\nmanicurist\nmanid\nManidae\nmanienie\nmanifest\nmanifestable\nmanifestant\nmanifestation\nmanifestational\nmanifestationist\nmanifestative\nmanifestatively\nmanifested\nmanifestedness\nmanifester\nmanifestive\nmanifestly\nmanifestness\nmanifesto\nmanifold\nmanifolder\nmanifoldly\nmanifoldness\nmanifoldwise\nmaniform\nmanify\nManihot\nmanikin\nmanikinism\nManila\nmanila\nmanilla\nmanille\nmanioc\nmaniple\nmanipulable\nmanipular\nmanipulatable\nmanipulate\nmanipulation\nmanipulative\nmanipulatively\nmanipulator\nmanipulatory\nManipuri\nManis\nmanism\nmanist\nmanistic\nmanito\nManitoban\nmanitrunk\nmaniu\nManius\nManiva\nmanjak\nManjeri\nmank\nmankeeper\nmankin\nmankind\nmanless\nmanlessly\nmanlessness\nmanlet\nmanlihood\nmanlike\nmanlikely\nmanlikeness\nmanlily\nmanliness\nmanling\nmanly\nMann\nmanna\nmannan\nmannequin\nmanner\nmannerable\nmannered\nmannerhood\nmannering\nmannerism\nmannerist\nmanneristic\nmanneristical\nmanneristically\nmannerize\nmannerless\nmannerlessness\nmannerliness\nmannerly\nmanners\nmannersome\nmanness\nMannheimar\nmannide\nmannie\nmanniferous\nmannify\nmannikinism\nmanning\nmannish\nmannishly\nmannishness\nmannite\nmannitic\nmannitol\nmannitose\nmannoheptite\nmannoheptitol\nmannoheptose\nmannoketoheptose\nmannonic\nmannosan\nmannose\nManny\nmanny\nmano\nManobo\nmanoc\nmanograph\nManolis\nmanometer\nmanometric\nmanometrical\nmanometry\nmanomin\nmanor\nmanorial\nmanorialism\nmanorialize\nmanorship\nmanoscope\nmanostat\nmanostatic\nmanque\nmanred\nmanrent\nmanroot\nmanrope\nMans\nmansard\nmansarded\nmanscape\nmanse\nmanservant\nmanship\nmansion\nmansional\nmansionary\nmansioned\nmansioneer\nmansionry\nmanslaughter\nmanslaughterer\nmanslaughtering\nmanslaughterous\nmanslayer\nmanslaying\nmanso\nmansonry\nmanstealer\nmanstealing\nmanstopper\nmanstopping\nmansuete\nmansuetely\nmansuetude\nmant\nmanta\nmantal\nmanteau\nmantel\nmantelet\nmanteline\nmantelletta\nmantellone\nmantelpiece\nmantelshelf\nmanteltree\nmanter\nmantes\nmantevil\nmantic\nmanticism\nmanticore\nmantid\nMantidae\nmantilla\nMantinean\nmantis\nMantisia\nMantispa\nmantispid\nMantispidae\nmantissa\nmantistic\nmantle\nmantled\nmantlet\nmantling\nManto\nmanto\nMantodea\nmantoid\nMantoidea\nmantologist\nmantology\nmantra\nmantrap\nmantua\nmantuamaker\nmantuamaking\nMantuan\nMantzu\nmanual\nmanualii\nmanualism\nmanualist\nmanualiter\nmanually\nmanuao\nmanubrial\nmanubriated\nmanubrium\nmanucaption\nmanucaptor\nmanucapture\nmanucode\nManucodia\nmanucodiata\nmanuduce\nmanuduction\nmanuductor\nmanuductory\nManuel\nmanufactory\nmanufacturable\nmanufactural\nmanufacture\nmanufacturer\nmanufacturess\nmanuka\nmanul\nmanuma\nmanumea\nmanumisable\nmanumission\nmanumissive\nmanumit\nmanumitter\nmanumotive\nmanurable\nmanurage\nmanurance\nmanure\nmanureless\nmanurer\nmanurial\nmanurially\nmanus\nmanuscript\nmanuscriptal\nmanuscription\nmanuscriptural\nmanusina\nmanustupration\nmanutagi\nManvantara\nmanward\nmanwards\nmanway\nmanweed\nmanwise\nManx\nManxman\nManxwoman\nmany\nmanyberry\nManyema\nmanyfold\nmanyness\nmanyplies\nmanyroot\nmanyways\nmanywhere\nmanywise\nmanzana\nmanzanilla\nmanzanillo\nmanzanita\nManzas\nmanzil\nmao\nmaomao\nMaori\nMaoridom\nMaoriland\nMaorilander\nmap\nmapach\nmapau\nmaphrian\nmapland\nmaple\nmaplebush\nmapo\nmappable\nmapper\nMappila\nmappist\nmappy\nMapuche\nmapwise\nmaquahuitl\nmaquette\nmaqui\nMaquiritare\nmaquis\nMar\nmar\nMara\nmarabotin\nmarabou\nMarabout\nmarabuto\nmaraca\nMaracaibo\nmaracan\nmaracock\nmarae\nMaragato\nmarajuana\nmarakapas\nmaral\nmaranatha\nmarang\nMaranha\nMaranham\nMaranhao\nMaranta\nMarantaceae\nmarantaceous\nmarantic\nmarara\nmararie\nmarasca\nmaraschino\nmarasmic\nMarasmius\nmarasmoid\nmarasmous\nmarasmus\nMaratha\nMarathi\nmarathon\nmarathoner\nMarathonian\nMaratism\nMaratist\nMarattia\nMarattiaceae\nmarattiaceous\nMarattiales\nmaraud\nmarauder\nmaravedi\nMaravi\nmarbelize\nmarble\nmarbled\nmarblehead\nmarbleheader\nmarblehearted\nmarbleization\nmarbleize\nmarbleizer\nmarblelike\nmarbleness\nmarbler\nmarbles\nmarblewood\nmarbling\nmarblish\nmarbly\nmarbrinus\nMarc\nmarc\nMarcan\nmarcantant\nmarcasite\nmarcasitic\nmarcasitical\nMarcel\nmarcel\nmarceline\nMarcella\nmarcella\nmarceller\nMarcellian\nMarcellianism\nmarcello\nmarcescence\nmarcescent\nMarcgravia\nMarcgraviaceae\nmarcgraviaceous\nMarch\nmarch\nMarchantia\nMarchantiaceae\nmarchantiaceous\nMarchantiales\nmarcher\nmarchetto\nmarchioness\nmarchite\nmarchland\nmarchman\nMarchmont\nmarchpane\nMarci\nMarcia\nmarcid\nMarcionism\nMarcionist\nMarcionite\nMarcionitic\nMarcionitish\nMarcionitism\nMarcite\nMarco\nmarco\nMarcobrunner\nMarcomanni\nMarconi\nmarconi\nmarconigram\nmarconigraph\nmarconigraphy\nmarcor\nMarcos\nMarcosian\nmarcottage\nmardy\nmare\nmareblob\nMareca\nmarechal\nMarehan\nMarek\nmarekanite\nmaremma\nmaremmatic\nmaremmese\nmarengo\nmarennin\nMareotic\nMareotid\nMarfik\nmarfire\nmargarate\nMargarelon\nMargaret\nmargaric\nmargarin\nmargarine\nmargarita\nmargaritaceous\nmargarite\nmargaritiferous\nmargaritomancy\nMargarodes\nmargarodid\nMargarodinae\nmargarodite\nMargaropus\nmargarosanite\nmargay\nmarge\nmargeline\nmargent\nMargery\nMargie\nmargin\nmarginal\nmarginalia\nmarginality\nmarginalize\nmarginally\nmarginate\nmarginated\nmargination\nmargined\nMarginella\nMarginellidae\nmarginelliform\nmarginiform\nmargining\nmarginirostral\nmarginoplasty\nmargosa\nMargot\nmargravate\nmargrave\nmargravely\nmargravial\nmargraviate\nmargravine\nMarguerite\nmarguerite\nmarhala\nMarheshvan\nMari\nMaria\nmaria\nmarialite\nMariamman\nMarian\nMariana\nMarianic\nMarianne\nMarianolatrist\nMarianolatry\nmaricolous\nmarid\nMarie\nmariengroschen\nmarigenous\nmarigold\nmarigram\nmarigraph\nmarigraphic\nmarijuana\nmarikina\nMarilla\nMarilyn\nmarimba\nmarimonda\nmarina\nmarinade\nmarinate\nmarinated\nmarine\nmariner\nmarinheiro\nmarinist\nmarinorama\nMario\nmariola\nMariolater\nMariolatrous\nMariolatry\nMariology\nMarion\nmarionette\nMariou\nMariposan\nmariposite\nmaris\nmarish\nmarishness\nMarist\nmaritage\nmarital\nmaritality\nmaritally\nmariticidal\nmariticide\nMaritime\nmaritime\nmaritorious\nmariupolite\nmarjoram\nMarjorie\nMark\nmark\nmarka\nMarkab\nmarkdown\nMarkeb\nmarked\nmarkedly\nmarkedness\nmarker\nmarket\nmarketability\nmarketable\nmarketableness\nmarketably\nmarketeer\nmarketer\nmarketing\nmarketman\nmarketstead\nmarketwise\nmarkfieldite\nMarkgenossenschaft\nmarkhor\nmarking\nmarkka\nmarkless\nmarkman\nmarkmoot\nMarko\nmarkshot\nmarksman\nmarksmanly\nmarksmanship\nmarkswoman\nmarkup\nMarkus\nmarkweed\nmarkworthy\nmarl\nMarla\nmarlaceous\nmarlberry\nmarled\nMarlena\nmarler\nmarli\nmarlin\nmarline\nmarlinespike\nmarlite\nmarlitic\nmarllike\nmarlock\nMarlovian\nMarlowesque\nMarlowish\nMarlowism\nmarlpit\nmarly\nmarm\nmarmalade\nmarmalady\nMarmar\nmarmarization\nmarmarize\nmarmarosis\nmarmatite\nmarmelos\nmarmennill\nmarmit\nmarmite\nmarmolite\nmarmoraceous\nmarmorate\nmarmorated\nmarmoration\nmarmoreal\nmarmoreally\nmarmorean\nmarmoric\nMarmosa\nmarmose\nmarmoset\nmarmot\nMarmota\nMarnix\nmaro\nmarocain\nmarok\nMaronian\nMaronist\nMaronite\nmaroon\nmarooner\nmaroquin\nMarpessa\nmarplot\nmarplotry\nmarque\nmarquee\nMarquesan\nmarquess\nmarquetry\nmarquis\nmarquisal\nmarquisate\nmarquisdom\nmarquise\nmarquisette\nmarquisina\nmarquisotte\nmarquisship\nmarquito\nmarranism\nmarranize\nmarrano\nmarree\nMarrella\nmarrer\nmarriable\nmarriage\nmarriageability\nmarriageable\nmarriageableness\nmarriageproof\nmarried\nmarrier\nmarron\nmarrot\nmarrow\nmarrowbone\nmarrowed\nmarrowfat\nmarrowish\nmarrowless\nmarrowlike\nmarrowsky\nmarrowskyer\nmarrowy\nMarrubium\nMarrucinian\nmarry\nmarryer\nmarrying\nmarrymuffe\nMars\nMarsala\nMarsdenia\nmarseilles\nMarsh\nmarsh\nMarsha\nmarshal\nmarshalate\nmarshalcy\nmarshaler\nmarshaless\nMarshall\nmarshalman\nmarshalment\nMarshalsea\nmarshalship\nmarshberry\nmarshbuck\nmarshfire\nmarshflower\nmarshiness\nmarshite\nmarshland\nmarshlander\nmarshlike\nmarshlocks\nmarshman\nmarshwort\nmarshy\nMarsi\nMarsian\nMarsilea\nMarsileaceae\nmarsileaceous\nMarsilia\nMarsiliaceae\nmarsipobranch\nMarsipobranchia\nMarsipobranchiata\nmarsipobranchiate\nMarsipobranchii\nmarsoon\nMarspiter\nMarssonia\nMarssonina\nmarsupial\nMarsupialia\nmarsupialian\nmarsupialization\nmarsupialize\nmarsupian\nMarsupiata\nmarsupiate\nmarsupium\nMart\nmart\nmartagon\nmartel\nmarteline\nmartellate\nmartellato\nmarten\nmartensite\nmartensitic\nMartes\nmartext\nMartha\nmartial\nmartialism\nMartialist\nmartiality\nmartialization\nmartialize\nmartially\nmartialness\nMartian\nMartin\nmartin\nmartinet\nmartineta\nmartinetish\nmartinetishness\nmartinetism\nmartinetship\nMartinez\nmartingale\nmartinico\nMartinism\nMartinist\nMartinmas\nmartinoe\nmartite\nMartius\nmartlet\nMartu\nMarty\nMartyn\nMartynia\nMartyniaceae\nmartyniaceous\nmartyr\nmartyrdom\nmartyress\nmartyrium\nmartyrization\nmartyrize\nmartyrizer\nmartyrlike\nmartyrly\nmartyrolatry\nmartyrologic\nmartyrological\nmartyrologist\nmartyrologistic\nmartyrologium\nmartyrology\nmartyrship\nmartyry\nmaru\nmarvel\nmarvelment\nmarvelous\nmarvelously\nmarvelousness\nmarvelry\nmarver\nMarvin\nMarwari\nMarxian\nMarxianism\nMarxism\nMarxist\nMary\nmary\nmarybud\nMaryland\nMarylander\nMarylandian\nMarymass\nmarysole\nmarzipan\nmas\nmasa\nMasai\nMasanao\nMasanobu\nmasaridid\nMasarididae\nMasaridinae\nMasaris\nmascagnine\nmascagnite\nmascally\nmascara\nmascaron\nmascled\nmascleless\nmascot\nmascotism\nmascotry\nMascouten\nmascularity\nmasculate\nmasculation\nmasculine\nmasculinely\nmasculineness\nmasculinism\nmasculinist\nmasculinity\nmasculinization\nmasculinize\nmasculist\nmasculofeminine\nmasculonucleus\nmasculy\nmasdeu\nMasdevallia\nmash\nmasha\nmashal\nmashallah\nmashelton\nmasher\nmashie\nmashing\nmashman\nMashona\nMashpee\nmashru\nmashy\nmasjid\nmask\nmasked\nMaskegon\nmaskelynite\nmasker\nmaskette\nmaskflower\nMaskins\nmasklike\nMaskoi\nmaskoid\nmaslin\nmasochism\nmasochist\nmasochistic\nMason\nmason\nmasoned\nmasoner\nmasonic\nMasonite\nmasonite\nmasonry\nmasonwork\nmasooka\nmasoola\nMasora\nMasorete\nMasoreth\nMasoretic\nMaspiter\nmasque\nmasquer\nmasquerade\nmasquerader\nMass\nmass\nmassa\nmassacre\nmassacrer\nmassage\nmassager\nmassageuse\nmassagist\nMassalia\nMassalian\nmassaranduba\nmassasauga\nmasse\nmassebah\nmassecuite\nmassedly\nmassedness\nMassekhoth\nmassel\nmasser\nmasseter\nmasseteric\nmasseur\nmasseuse\nmassicot\nmassier\nmassiest\nmassif\nMassilia\nMassilian\nmassily\nmassiness\nmassive\nmassively\nmassiveness\nmassivity\nmasskanne\nmassless\nmasslike\nMassmonger\nmassotherapy\nmassoy\nmassula\nmassy\nmast\nmastaba\nmastadenitis\nmastadenoma\nmastage\nmastalgia\nmastatrophia\nmastatrophy\nmastauxe\nmastax\nmastectomy\nmasted\nmaster\nmasterable\nmasterate\nmasterdom\nmasterer\nmasterful\nmasterfully\nmasterfulness\nmasterhood\nmasterless\nmasterlessness\nmasterlike\nmasterlily\nmasterliness\nmasterling\nmasterly\nmasterman\nmastermind\nmasterous\nmasterpiece\nmasterproof\nmastership\nmasterwork\nmasterwort\nmastery\nmastful\nmasthead\nmasthelcosis\nmastic\nmasticability\nmasticable\nmasticate\nmastication\nmasticator\nmasticatory\nmastiche\nmasticic\nMasticura\nmasticurous\nmastiff\nMastigamoeba\nmastigate\nmastigium\nmastigobranchia\nmastigobranchial\nMastigophora\nmastigophoran\nmastigophoric\nmastigophorous\nmastigopod\nMastigopoda\nmastigopodous\nmastigote\nmastigure\nmasting\nmastitis\nmastless\nmastlike\nmastman\nmastocarcinoma\nmastoccipital\nmastochondroma\nmastochondrosis\nmastodon\nmastodonsaurian\nMastodonsaurus\nmastodont\nmastodontic\nMastodontidae\nmastodontine\nmastodontoid\nmastodynia\nmastoid\nmastoidal\nmastoidale\nmastoideal\nmastoidean\nmastoidectomy\nmastoideocentesis\nmastoideosquamous\nmastoiditis\nmastoidohumeral\nmastoidohumeralis\nmastoidotomy\nmastological\nmastologist\nmastology\nmastomenia\nmastoncus\nmastooccipital\nmastoparietal\nmastopathy\nmastopexy\nmastoplastia\nmastorrhagia\nmastoscirrhus\nmastosquamose\nmastotomy\nmastotympanic\nmasturbate\nmasturbation\nmasturbational\nmasturbator\nmasturbatory\nmastwood\nmasty\nmasu\nMasulipatam\nmasurium\nMat\nmat\nMatabele\nMatacan\nmatachin\nmatachina\nmataco\nmatadero\nmatador\nmataeological\nmataeologue\nmataeology\nMatagalpa\nMatagalpan\nmatagory\nmatagouri\nmatai\nmatajuelo\nmatalan\nmatamata\nmatamoro\nmatanza\nmatapan\nmatapi\nMatar\nmatara\nMatatua\nMatawan\nmatax\nmatboard\nmatch\nmatchable\nmatchableness\nmatchably\nmatchboard\nmatchboarding\nmatchbook\nmatchbox\nmatchcloth\nmatchcoat\nmatcher\nmatching\nmatchless\nmatchlessly\nmatchlessness\nmatchlock\nmatchmaker\nmatchmaking\nmatchmark\nMatchotic\nmatchsafe\nmatchstick\nmatchwood\nmatchy\nmate\nmategriffon\nmatehood\nmateless\nmatelessness\nmatelote\nmately\nmater\nmaterfamilias\nmaterial\nmaterialism\nmaterialist\nmaterialistic\nmaterialistical\nmaterialistically\nmateriality\nmaterialization\nmaterialize\nmaterializee\nmaterializer\nmaterially\nmaterialman\nmaterialness\nmateriate\nmateriation\nmateriel\nmaternal\nmaternality\nmaternalize\nmaternally\nmaternalness\nmaternity\nmaternology\nmateship\nmatey\nmatezite\nmatfelon\nmatgrass\nmath\nmathematic\nmathematical\nmathematically\nmathematicals\nmathematician\nmathematicize\nmathematics\nmathematize\nmathemeg\nmathes\nmathesis\nmathetic\nMathurin\nmatico\nmatildite\nmatin\nmatinal\nmatinee\nmating\nmatins\nmatipo\nmatka\nmatless\nmatlockite\nmatlow\nmatmaker\nmatmaking\nmatra\nmatral\nMatralia\nmatranee\nmatrass\nmatreed\nmatriarch\nmatriarchal\nmatriarchalism\nmatriarchate\nmatriarchic\nmatriarchist\nmatriarchy\nmatric\nmatrical\nMatricaria\nmatrices\nmatricidal\nmatricide\nmatricula\nmatriculable\nmatriculant\nmatricular\nmatriculate\nmatriculation\nmatriculator\nmatriculatory\nMatrigan\nmatriheritage\nmatriherital\nmatrilineal\nmatrilineally\nmatrilinear\nmatrilinearism\nmatriliny\nmatrilocal\nmatrimonial\nmatrimonially\nmatrimonious\nmatrimoniously\nmatrimony\nmatriotism\nmatripotestal\nmatris\nmatrix\nmatroclinic\nmatroclinous\nmatrocliny\nmatron\nmatronage\nmatronal\nMatronalia\nmatronhood\nmatronism\nmatronize\nmatronlike\nmatronliness\nmatronly\nmatronship\nmatronymic\nmatross\nMats\nmatsu\nmatsuri\nMatt\nmatta\nmattamore\nMattapony\nmattaro\nmattboard\nmatte\nmatted\nmattedly\nmattedness\nmatter\nmatterate\nmatterative\nmatterful\nmatterfulness\nmatterless\nmattery\nMatteuccia\nMatthaean\nMatthew\nMatthias\nMatthieu\nMatthiola\nMatti\nmatti\nmatting\nmattock\nmattoid\nmattoir\nmattress\nmattulla\nMatty\nmaturable\nmaturate\nmaturation\nmaturative\nmature\nmaturely\nmaturement\nmatureness\nmaturer\nmaturescence\nmaturescent\nmaturing\nmaturish\nmaturity\nmatutinal\nmatutinally\nmatutinary\nmatutine\nmatutinely\nmatweed\nmaty\nmatzo\nmatzoon\nmatzos\nmatzoth\nmau\nmaucherite\nMaud\nmaud\nmaudle\nmaudlin\nmaudlinism\nmaudlinize\nmaudlinly\nmaudlinwort\nmauger\nmaugh\nMaugis\nmaul\nMaulawiyah\nmauler\nmauley\nmauling\nmaulstick\nMaumee\nmaumet\nmaumetry\nMaun\nmaun\nmaund\nmaunder\nmaunderer\nmaundful\nmaundy\nmaunge\nMaurandia\nMaureen\nMauretanian\nMauri\nMaurice\nMaurist\nMauritia\nMauritian\nMauser\nmausolea\nmausoleal\nmausolean\nmausoleum\nmauther\nmauve\nmauveine\nmauvette\nmauvine\nmaux\nmaverick\nmavis\nMavortian\nmavournin\nmavrodaphne\nmaw\nmawbound\nmawk\nmawkish\nmawkishly\nmawkishness\nmawky\nmawp\nMax\nmaxilla\nmaxillar\nmaxillary\nmaxilliferous\nmaxilliform\nmaxilliped\nmaxillipedary\nmaxillodental\nmaxillofacial\nmaxillojugal\nmaxillolabial\nmaxillomandibular\nmaxillopalatal\nmaxillopalatine\nmaxillopharyngeal\nmaxillopremaxillary\nmaxilloturbinal\nmaxillozygomatic\nmaxim\nmaxima\nmaximal\nMaximalism\nMaximalist\nmaximally\nmaximate\nmaximation\nmaximed\nmaximist\nmaximistic\nmaximite\nmaximization\nmaximize\nmaximizer\nMaximon\nmaximum\nmaximus\nmaxixe\nmaxwell\nMay\nmay\nMaya\nmaya\nMayaca\nMayacaceae\nmayacaceous\nMayan\nMayance\nMayathan\nmaybe\nMaybird\nMaybloom\nmaybush\nMaycock\nmaycock\nMayda\nmayday\nMayer\nMayey\nMayeye\nMayfair\nmayfish\nMayflower\nMayfowl\nmayhap\nmayhappen\nmayhem\nMaying\nMaylike\nmaynt\nMayo\nMayologist\nmayonnaise\nmayor\nmayoral\nmayoralty\nmayoress\nmayorship\nMayoruna\nMaypole\nMaypoling\nmaypop\nmaysin\nmayten\nMaytenus\nMaythorn\nMaytide\nMaytime\nmayweed\nMaywings\nMaywort\nmaza\nmazalgia\nMazama\nmazame\nMazanderani\nmazapilite\nmazard\nmazarine\nMazatec\nMazateco\nMazda\nMazdaism\nMazdaist\nMazdakean\nMazdakite\nMazdean\nmaze\nmazed\nmazedly\nmazedness\nmazeful\nmazement\nmazer\nMazhabi\nmazic\nmazily\nmaziness\nmazocacothesis\nmazodynia\nmazolysis\nmazolytic\nmazopathia\nmazopathic\nmazopexy\nMazovian\nmazuca\nmazuma\nMazur\nMazurian\nmazurka\nmazut\nmazy\nmazzard\nMazzinian\nMazzinianism\nMazzinist\nmbalolo\nMbaya\nmbori\nMbuba\nMbunda\nMcintosh\nMckay\nMdewakanton\nme\nmeable\nmeaching\nmead\nmeader\nmeadow\nmeadowbur\nmeadowed\nmeadower\nmeadowing\nmeadowink\nmeadowland\nmeadowless\nmeadowsweet\nmeadowwort\nmeadowy\nmeadsman\nmeager\nmeagerly\nmeagerness\nmeagre\nmeak\nmeal\nmealable\nmealberry\nmealer\nmealies\nmealily\nmealiness\nmealless\nmealman\nmealmonger\nmealmouth\nmealmouthed\nmealproof\nmealtime\nmealy\nmealymouth\nmealymouthed\nmealymouthedly\nmealymouthedness\nmealywing\nmean\nmeander\nmeanderingly\nmeandrine\nmeandriniform\nmeandrite\nmeandrous\nmeaned\nmeaner\nmeaning\nmeaningful\nmeaningfully\nmeaningless\nmeaninglessly\nmeaninglessness\nmeaningly\nmeaningness\nmeanish\nmeanly\nmeanness\nmeant\nMeantes\nmeantone\nmeanwhile\nmease\nmeasle\nmeasled\nmeasledness\nmeasles\nmeaslesproof\nmeasly\nmeasondue\nmeasurability\nmeasurable\nmeasurableness\nmeasurably\nmeasuration\nmeasure\nmeasured\nmeasuredly\nmeasuredness\nmeasureless\nmeasurelessly\nmeasurelessness\nmeasurely\nmeasurement\nmeasurer\nmeasuring\nmeat\nmeatal\nmeatbird\nmeatcutter\nmeated\nmeathook\nmeatily\nmeatiness\nmeatless\nmeatman\nmeatometer\nmeatorrhaphy\nmeatoscope\nmeatoscopy\nmeatotome\nmeatotomy\nmeatus\nmeatworks\nmeaty\nMebsuta\nMecaptera\nmecate\nMecca\nMeccan\nMeccano\nMeccawee\nMechael\nmechanal\nmechanality\nmechanalize\nmechanic\nmechanical\nmechanicalism\nmechanicalist\nmechanicality\nmechanicalization\nmechanicalize\nmechanically\nmechanicalness\nmechanician\nmechanicochemical\nmechanicocorpuscular\nmechanicointellectual\nmechanicotherapy\nmechanics\nmechanism\nmechanist\nmechanistic\nmechanistically\nmechanization\nmechanize\nmechanizer\nmechanolater\nmechanology\nmechanomorphic\nmechanomorphism\nmechanotherapeutic\nmechanotherapeutics\nmechanotherapist\nmechanotherapy\nMechir\nMechitaristican\nMechlin\nmechoacan\nmeckelectomy\nMeckelian\nMecklenburgian\nmecodont\nMecodonta\nmecometer\nmecometry\nmecon\nmeconic\nmeconidium\nmeconin\nmeconioid\nmeconium\nmeconology\nmeconophagism\nmeconophagist\nMecoptera\nmecopteran\nmecopteron\nmecopterous\nmedal\nmedaled\nmedalet\nmedalist\nmedalize\nmedallary\nmedallic\nmedallically\nmedallion\nmedallionist\nmeddle\nmeddlecome\nmeddlement\nmeddler\nmeddlesome\nmeddlesomely\nmeddlesomeness\nmeddling\nmeddlingly\nMede\nMedellin\nMedeola\nMedia\nmedia\nmediacid\nmediacy\nmediad\nmediaevalize\nmediaevally\nmedial\nmedialization\nmedialize\nmedialkaline\nmedially\nMedian\nmedian\nmedianic\nmedianimic\nmedianimity\nmedianism\nmedianity\nmedianly\nmediant\nmediastinal\nmediastine\nmediastinitis\nmediastinotomy\nmediastinum\nmediate\nmediately\nmediateness\nmediating\nmediatingly\nmediation\nmediative\nmediatization\nmediatize\nmediator\nmediatorial\nmediatorialism\nmediatorially\nmediatorship\nmediatory\nmediatress\nmediatrice\nmediatrix\nMedic\nmedic\nmedicable\nMedicago\nmedical\nmedically\nmedicament\nmedicamental\nmedicamentally\nmedicamentary\nmedicamentation\nmedicamentous\nmedicaster\nmedicate\nmedication\nmedicative\nmedicator\nmedicatory\nMedicean\nMedici\nmedicinable\nmedicinableness\nmedicinal\nmedicinally\nmedicinalness\nmedicine\nmedicinelike\nmedicinemonger\nmediciner\nmedico\nmedicobotanical\nmedicochirurgic\nmedicochirurgical\nmedicodental\nmedicolegal\nmedicolegally\nmedicomania\nmedicomechanic\nmedicomechanical\nmedicomoral\nmedicophysical\nmedicopsychological\nmedicopsychology\nmedicostatistic\nmedicosurgical\nmedicotopographic\nmedicozoologic\nmediety\nMedieval\nmedieval\nmedievalism\nmedievalist\nmedievalistic\nmedievalize\nmedievally\nmedifixed\nmediglacial\nmedimn\nmedimno\nmedimnos\nmedimnus\nMedina\nMedinilla\nmedino\nmedio\nmedioanterior\nmediocarpal\nmedioccipital\nmediocre\nmediocrist\nmediocrity\nmediocubital\nmediodepressed\nmediodigital\nmediodorsal\nmediodorsally\nmediofrontal\nmediolateral\nmediopalatal\nmediopalatine\nmediopassive\nmediopectoral\nmedioperforate\nmediopontine\nmedioposterior\nmediosilicic\nmediostapedial\nmediotarsal\nmedioventral\nmedisance\nmedisect\nmedisection\nMedish\nMedism\nmeditant\nmeditate\nmeditating\nmeditatingly\nmeditation\nmeditationist\nmeditatist\nmeditative\nmeditatively\nmeditativeness\nmeditator\nmediterranean\nMediterraneanism\nMediterraneanization\nMediterraneanize\nmediterraneous\nmedithorax\nMeditrinalia\nmeditullium\nmedium\nmediumism\nmediumistic\nmediumization\nmediumize\nmediumship\nmedius\nMedize\nMedizer\nmedjidie\nmedlar\nmedley\nMedoc\nmedregal\nmedrick\nmedrinaque\nmedulla\nmedullar\nmedullary\nmedullate\nmedullated\nmedullation\nmedullispinal\nmedullitis\nmedullization\nmedullose\nMedusa\nMedusaean\nmedusal\nmedusalike\nmedusan\nmedusiferous\nmedusiform\nmedusoid\nmeebos\nmeece\nmeed\nmeedless\nMeehan\nmeek\nmeeken\nmeekhearted\nmeekheartedness\nmeekling\nmeekly\nmeekness\nMeekoceras\nMeeks\nmeered\nmeerkat\nmeerschaum\nmeese\nmeet\nmeetable\nmeeten\nmeeter\nmeeterly\nmeethelp\nmeethelper\nmeeting\nmeetinger\nmeetinghouse\nmeetly\nmeetness\nMeg\nmegabar\nmegacephalia\nmegacephalic\nmegacephaly\nmegacerine\nMegaceros\nmegacerotine\nMegachile\nmegachilid\nMegachilidae\nMegachiroptera\nmegachiropteran\nmegachiropterous\nmegacolon\nmegacosm\nmegacoulomb\nmegacycle\nmegadont\nMegadrili\nmegadynamics\nmegadyne\nMegaera\nmegaerg\nmegafarad\nmegafog\nmegagamete\nmegagametophyte\nmegajoule\nmegakaryocyte\nMegalactractus\nMegaladapis\nMegalaema\nMegalaemidae\nMegalania\nmegaleme\nMegalensian\nmegalerg\nMegalesia\nMegalesian\nmegalesthete\nmegalethoscope\nMegalichthyidae\nMegalichthys\nmegalith\nmegalithic\nMegalobatrachus\nmegaloblast\nmegaloblastic\nmegalocardia\nmegalocarpous\nmegalocephalia\nmegalocephalic\nmegalocephalous\nmegalocephaly\nMegaloceros\nmegalochirous\nmegalocornea\nmegalocyte\nmegalocytosis\nmegalodactylia\nmegalodactylism\nmegalodactylous\nMegalodon\nmegalodont\nmegalodontia\nMegalodontidae\nmegaloenteron\nmegalogastria\nmegaloglossia\nmegalograph\nmegalography\nmegalohepatia\nmegalokaryocyte\nmegalomania\nmegalomaniac\nmegalomaniacal\nmegalomelia\nMegalonychidae\nMegalonyx\nmegalopa\nmegalopenis\nmegalophonic\nmegalophonous\nmegalophthalmus\nmegalopia\nmegalopic\nMegalopidae\nMegalopinae\nmegalopine\nmegaloplastocyte\nmegalopolis\nmegalopolitan\nmegalopolitanism\nmegalopore\nmegalops\nmegalopsia\nMegaloptera\nMegalopyge\nMegalopygidae\nMegalornis\nMegalornithidae\nmegalosaur\nmegalosaurian\nMegalosauridae\nmegalosauroid\nMegalosaurus\nmegaloscope\nmegaloscopy\nmegalosphere\nmegalospheric\nmegalosplenia\nmegalosyndactyly\nmegaloureter\nMegaluridae\nMegamastictora\nmegamastictoral\nmegamere\nmegameter\nmegampere\nMeganeura\nMeganthropus\nmeganucleus\nmegaparsec\nmegaphone\nmegaphonic\nmegaphotographic\nmegaphotography\nmegaphyllous\nMegaphyton\nmegapod\nmegapode\nMegapodidae\nMegapodiidae\nMegapodius\nmegaprosopous\nMegaptera\nMegapterinae\nmegapterine\nMegarensian\nMegarhinus\nMegarhyssa\nMegarian\nMegarianism\nMegaric\nmegaron\nmegasclere\nmegascleric\nmegasclerous\nmegasclerum\nmegascope\nmegascopic\nmegascopical\nmegascopically\nmegaseism\nmegaseismic\nmegaseme\nMegasoma\nmegasporange\nmegasporangium\nmegaspore\nmegasporic\nmegasporophyll\nmegasynthetic\nmegathere\nmegatherian\nMegatheriidae\nmegatherine\nmegatherioid\nMegatherium\nmegatherm\nmegathermic\nmegatheroid\nmegaton\nmegatype\nmegatypy\nmegavolt\nmegawatt\nmegaweber\nmegazooid\nmegazoospore\nmegerg\nMeggy\nmegilp\nmegmho\nmegohm\nmegohmit\nmegohmmeter\nmegophthalmus\nmegotalc\nMegrel\nMegrez\nmegrim\nmegrimish\nmehalla\nmehari\nmeharist\nMehelya\nmehmandar\nMehrdad\nmehtar\nmehtarship\nMeibomia\nMeibomian\nmeile\nmein\nmeinie\nmeio\nmeiobar\nmeionite\nmeiophylly\nmeiosis\nmeiotaxy\nmeiotic\nMeissa\nMeistersinger\nmeith\nMeithei\nmeizoseismal\nmeizoseismic\nmejorana\nMekbuda\nMekhitarist\nmekometer\nmel\nmela\nmelaconite\nmelada\nmeladiorite\nmelagabbro\nmelagra\nmelagranite\nMelaleuca\nmelalgia\nmelam\nmelamed\nmelamine\nmelampodium\nMelampsora\nMelampsoraceae\nMelampus\nmelampyritol\nMelampyrum\nmelanagogal\nmelanagogue\nmelancholia\nmelancholiac\nmelancholic\nmelancholically\nmelancholily\nmelancholiness\nmelancholious\nmelancholiously\nmelancholiousness\nmelancholish\nmelancholist\nmelancholize\nmelancholomaniac\nmelancholy\nmelancholyish\nMelanchthonian\nMelanconiaceae\nmelanconiaceous\nMelanconiales\nMelanconium\nmelanemia\nmelanemic\nMelanesian\nmelange\nmelanger\nmelangeur\nMelania\nmelanian\nmelanic\nmelaniferous\nMelaniidae\nmelanilin\nmelaniline\nmelanin\nMelanippe\nMelanippus\nmelanism\nmelanistic\nmelanite\nmelanitic\nmelanize\nmelano\nmelanoblast\nmelanocarcinoma\nmelanocerite\nMelanochroi\nMelanochroid\nmelanochroite\nmelanochroous\nmelanocomous\nmelanocrate\nmelanocratic\nmelanocyte\nMelanodendron\nmelanoderma\nmelanodermia\nmelanodermic\nMelanogaster\nmelanogen\nMelanoi\nmelanoid\nmelanoidin\nmelanoma\nmelanopathia\nmelanopathy\nmelanophore\nmelanoplakia\nMelanoplus\nmelanorrhagia\nmelanorrhea\nMelanorrhoea\nmelanosarcoma\nmelanosarcomatosis\nmelanoscope\nmelanose\nmelanosed\nmelanosis\nmelanosity\nmelanospermous\nmelanotekite\nmelanotic\nmelanotrichous\nmelanous\nmelanterite\nMelanthaceae\nmelanthaceous\nMelanthium\nmelanure\nmelanuresis\nmelanuria\nmelanuric\nmelaphyre\nMelas\nmelasma\nmelasmic\nmelassigenic\nMelastoma\nMelastomaceae\nmelastomaceous\nmelastomad\nmelatope\nmelaxuma\nMelburnian\nMelcarth\nmelch\nMelchite\nMelchora\nmeld\nmelder\nmeldometer\nmeldrop\nmele\nMeleager\nMeleagridae\nMeleagrina\nMeleagrinae\nmeleagrine\nMeleagris\nmelebiose\nmelee\nmelena\nmelene\nmelenic\nMeles\nMeletian\nMeletski\nmelezitase\nmelezitose\nMelia\nMeliaceae\nmeliaceous\nMeliadus\nMelian\nMelianthaceae\nmelianthaceous\nMelianthus\nmeliatin\nmelibiose\nmelic\nMelica\nMelicent\nmelicera\nmeliceric\nmeliceris\nmelicerous\nMelicerta\nMelicertidae\nmelichrous\nmelicitose\nMelicocca\nmelicraton\nmelilite\nmelilitite\nmelilot\nMelilotus\nMelinae\nMelinda\nmeline\nMelinis\nmelinite\nMeliola\nmeliorability\nmeliorable\nmeliorant\nmeliorate\nmeliorater\nmelioration\nmeliorative\nmeliorator\nmeliorism\nmeliorist\nmelioristic\nmeliority\nmeliphagan\nMeliphagidae\nmeliphagidan\nmeliphagous\nmeliphanite\nMelipona\nMeliponinae\nmeliponine\nmelisma\nmelismatic\nmelismatics\nMelissa\nmelissyl\nmelissylic\nMelitaea\nmelitemia\nmelithemia\nmelitis\nmelitose\nmelitriose\nmelittologist\nmelittology\nmelituria\nmelituric\nmell\nmellaginous\nmellate\nmellay\nmelleous\nmeller\nMellifera\nmelliferous\nmellificate\nmellification\nmellifluence\nmellifluent\nmellifluently\nmellifluous\nmellifluously\nmellifluousness\nmellimide\nmellisonant\nmellisugent\nmellit\nmellitate\nmellite\nmellitic\nMellivora\nMellivorinae\nmellivorous\nmellon\nmellonides\nmellophone\nmellow\nmellowly\nmellowness\nmellowy\nmellsman\nMelocactus\nmelocoton\nmelodeon\nmelodia\nmelodial\nmelodially\nmelodic\nmelodica\nmelodically\nmelodicon\nmelodics\nmelodiograph\nmelodion\nmelodious\nmelodiously\nmelodiousness\nmelodism\nmelodist\nmelodize\nmelodizer\nmelodram\nmelodrama\nmelodramatic\nmelodramatical\nmelodramatically\nmelodramaticism\nmelodramatics\nmelodramatist\nmelodramatize\nmelodrame\nmelody\nmelodyless\nmeloe\nmelogram\nMelogrammataceae\nmelograph\nmelographic\nmeloid\nMeloidae\nmelologue\nMelolontha\nMelolonthidae\nmelolonthidan\nMelolonthides\nMelolonthinae\nmelolonthine\nmelomane\nmelomania\nmelomaniac\nmelomanic\nmelon\nmeloncus\nMelonechinus\nmelongena\nmelongrower\nmelonist\nmelonite\nMelonites\nmelonlike\nmelonmonger\nmelonry\nmelophone\nmelophonic\nmelophonist\nmelopiano\nmeloplast\nmeloplastic\nmeloplasty\nmelopoeia\nmelopoeic\nmelos\nmelosa\nMelospiza\nMelothria\nmelotragedy\nmelotragic\nmelotrope\nmelt\nmeltability\nmeltable\nmeltage\nmelted\nmeltedness\nmelteigite\nmelter\nmelters\nmelting\nmeltingly\nmeltingness\nmelton\nMeltonian\nMelungeon\nMelursus\nmem\nmember\nmembered\nmemberless\nmembership\nmembracid\nMembracidae\nmembracine\nmembral\nmembrally\nmembrana\nmembranaceous\nmembranaceously\nmembranate\nmembrane\nmembraned\nmembraneless\nmembranelike\nmembranelle\nmembraneous\nmembraniferous\nmembraniform\nmembranin\nMembranipora\nMembraniporidae\nmembranocalcareous\nmembranocartilaginous\nmembranocoriaceous\nmembranocorneous\nmembranogenic\nmembranoid\nmembranology\nmembranonervous\nmembranosis\nmembranous\nmembranously\nmembranula\nmembranule\nmembretto\nmemento\nmeminna\nMemnon\nMemnonian\nMemnonium\nmemo\nmemoir\nmemoirism\nmemoirist\nmemorabilia\nmemorability\nmemorable\nmemorableness\nmemorably\nmemoranda\nmemorandist\nmemorandize\nmemorandum\nmemorative\nmemoria\nmemorial\nmemorialist\nmemorialization\nmemorialize\nmemorializer\nmemorially\nmemoried\nmemorious\nmemorist\nmemorizable\nmemorization\nmemorize\nmemorizer\nmemory\nmemoryless\nMemphian\nMemphite\nmen\nmenaccanite\nmenaccanitic\nmenace\nmenaceable\nmenaceful\nmenacement\nmenacer\nmenacing\nmenacingly\nmenacme\nmenadione\nmenage\nmenagerie\nmenagerist\nmenald\nMenangkabau\nmenarche\nMenaspis\nmend\nmendable\nmendacious\nmendaciously\nmendaciousness\nmendacity\nMendaite\nMende\nmendee\nMendelian\nMendelianism\nMendelianist\nMendelism\nMendelist\nMendelize\nMendelssohnian\nMendelssohnic\nmendelyeevite\nmender\nMendi\nmendicancy\nmendicant\nmendicate\nmendication\nmendicity\nmending\nmendipite\nmendole\nmendozite\nmends\nmeneghinite\nmenfolk\nMenfra\nmeng\nMengwe\nmenhaden\nmenhir\nmenial\nmenialism\nmeniality\nmenially\nMenic\nmenilite\nmeningeal\nmeninges\nmeningic\nmeningina\nmeningism\nmeningitic\nmeningitis\nmeningocele\nmeningocephalitis\nmeningocerebritis\nmeningococcal\nmeningococcemia\nmeningococcic\nmeningococcus\nmeningocortical\nmeningoencephalitis\nmeningoencephalocele\nmeningomalacia\nmeningomyclitic\nmeningomyelitis\nmeningomyelocele\nmeningomyelorrhaphy\nmeningorachidian\nmeningoradicular\nmeningorhachidian\nmeningorrhagia\nmeningorrhea\nmeningorrhoea\nmeningosis\nmeningospinal\nmeningotyphoid\nmeninting\nmeninx\nmeniscal\nmeniscate\nmenisciform\nmeniscitis\nmeniscoid\nmeniscoidal\nMeniscotheriidae\nMeniscotherium\nmeniscus\nmenisperm\nMenispermaceae\nmenispermaceous\nmenispermine\nMenispermum\nMenkalinan\nMenkar\nMenkib\nmenkind\nmennom\nMennonist\nMennonite\nMenobranchidae\nMenobranchus\nmenognath\nmenognathous\nmenologium\nmenology\nmenometastasis\nMenominee\nmenopausal\nmenopause\nmenopausic\nmenophania\nmenoplania\nMenopoma\nMenorah\nMenorhyncha\nmenorhynchous\nmenorrhagia\nmenorrhagic\nmenorrhagy\nmenorrhea\nmenorrheic\nmenorrhoea\nmenorrhoeic\nmenoschesis\nmenoschetic\nmenosepsis\nmenostasia\nmenostasis\nmenostatic\nmenostaxis\nMenotyphla\nmenotyphlic\nmenoxenia\nmensa\nmensal\nmensalize\nmense\nmenseful\nmenseless\nmenses\nMenshevik\nMenshevism\nMenshevist\nmensk\nmenstrual\nmenstruant\nmenstruate\nmenstruation\nmenstruous\nmenstruousness\nmenstruum\nmensual\nmensurability\nmensurable\nmensurableness\nmensurably\nmensural\nmensuralist\nmensurate\nmensuration\nmensurational\nmensurative\nMent\nmentagra\nmental\nmentalis\nmentalism\nmentalist\nmentalistic\nmentality\nmentalization\nmentalize\nmentally\nmentary\nmentation\nMentha\nMenthaceae\nmenthaceous\nmenthadiene\nmenthane\nmenthene\nmenthenol\nmenthenone\nmenthol\nmentholated\nmenthone\nmenthyl\nmenticide\nmenticultural\nmenticulture\nmentiferous\nmentiform\nmentigerous\nmentimeter\nmentimutation\nmention\nmentionability\nmentionable\nmentionless\nmentoanterior\nmentobregmatic\nmentocondylial\nmentohyoid\nmentolabial\nmentomeckelian\nmentonniere\nmentoposterior\nmentor\nmentorial\nmentorism\nmentorship\nmentum\nMentzelia\nmenu\nMenura\nMenurae\nMenuridae\nmeny\nMenyanthaceae\nMenyanthaceous\nMenyanthes\nmenyie\nmenzie\nMenziesia\nMeo\nMephisto\nMephistophelean\nMephistopheleanly\nMephistopheles\nMephistophelic\nMephistophelistic\nmephitic\nmephitical\nMephitinae\nmephitine\nmephitis\nmephitism\nMer\nMerak\nmeralgia\nmeraline\nMerat\nMeratia\nmerbaby\nmercal\nmercantile\nmercantilely\nmercantilism\nmercantilist\nmercantilistic\nmercantility\nmercaptal\nmercaptan\nmercaptides\nmercaptids\nmercapto\nmercaptol\nmercaptole\nMercator\nMercatorial\nmercatorial\nMercedarian\nMercedes\nMercedinus\nMercedonius\nmercenarily\nmercenariness\nmercenary\nmercer\nmerceress\nmercerization\nmercerize\nmercerizer\nmercership\nmercery\nmerch\nmerchandisable\nmerchandise\nmerchandiser\nmerchant\nmerchantable\nmerchantableness\nmerchanter\nmerchanthood\nmerchantish\nmerchantlike\nmerchantly\nmerchantman\nmerchantry\nmerchantship\nmerchet\nMercian\nmerciful\nmercifully\nmercifulness\nmerciless\nmercilessly\nmercilessness\nmerciment\nmercurate\nmercuration\nMercurean\nmercurial\nMercurialis\nmercurialism\nmercuriality\nmercurialization\nmercurialize\nmercurially\nmercurialness\nmercuriamines\nmercuriammonium\nMercurian\nmercuriate\nmercuric\nmercuride\nmercurification\nmercurify\nMercurius\nmercurization\nmercurize\nMercurochrome\nmercurophen\nmercurous\nMercury\nmercy\nmercyproof\nmerdivorous\nmere\nMeredithian\nmerel\nmerely\nmerenchyma\nmerenchymatous\nmeresman\nmerestone\nmeretricious\nmeretriciously\nmeretriciousness\nmeretrix\nmerfold\nmerfolk\nmerganser\nmerge\nmergence\nmerger\nmergh\nMerginae\nMergulus\nMergus\nmeriah\nmericarp\nmerice\nMerida\nmeridian\nMeridion\nMeridionaceae\nMeridional\nmeridional\nmeridionality\nmeridionally\nmeril\nmeringue\nmeringued\nMerino\nMeriones\nmeriquinoid\nmeriquinoidal\nmeriquinone\nmeriquinonic\nmeriquinonoid\nmerism\nmerismatic\nmerismoid\nmerist\nmeristele\nmeristelic\nmeristem\nmeristematic\nmeristematically\nmeristic\nmeristically\nmeristogenous\nmerit\nmeritable\nmerited\nmeritedly\nmeriter\nmeritful\nmeritless\nmeritmonger\nmeritmongering\nmeritmongery\nmeritorious\nmeritoriously\nmeritoriousness\nmerk\nmerkhet\nmerkin\nmerl\nmerle\nmerlette\nmerlin\nmerlon\nMerlucciidae\nMerluccius\nmermaid\nmermaiden\nmerman\nMermis\nmermithaner\nmermithergate\nMermithidae\nmermithization\nmermithized\nmermithogyne\nMermnad\nMermnadae\nmermother\nmero\nmeroblastic\nmeroblastically\nmerocele\nmerocelic\nmerocerite\nmeroceritic\nmerocrystalline\nmerocyte\nMerodach\nmerogamy\nmerogastrula\nmerogenesis\nmerogenetic\nmerogenic\nmerognathite\nmerogonic\nmerogony\nmerohedral\nmerohedric\nmerohedrism\nmeroistic\nMeroitic\nmeromorphic\nMeromyaria\nmeromyarian\nmerop\nMerope\nMeropes\nmeropia\nMeropidae\nmeropidan\nmeroplankton\nmeroplanktonic\nmeropodite\nmeropoditic\nMerops\nmerorganization\nmerorganize\nmeros\nmerosomal\nMerosomata\nmerosomatous\nmerosome\nmerosthenic\nMerostomata\nmerostomatous\nmerostome\nmerostomous\nmerosymmetrical\nmerosymmetry\nmerosystematic\nmerotomize\nmerotomy\nmerotropism\nmerotropy\nMerovingian\nmeroxene\nMerozoa\nmerozoite\nmerpeople\nmerribauks\nmerribush\nMerril\nmerriless\nmerrily\nmerriment\nmerriness\nmerrow\nmerry\nmerrymake\nmerrymaker\nmerrymaking\nmerryman\nmerrymeeting\nmerrythought\nmerrytrotter\nmerrywing\nmerse\nMertensia\nMerton\nMerula\nmeruline\nmerulioid\nMerulius\nmerveileux\nmerwinite\nmerwoman\nMerychippus\nmerycism\nmerycismus\nMerycoidodon\nMerycoidodontidae\nMerycopotamidae\nMerycopotamus\nMes\nmesa\nmesabite\nmesaconate\nmesaconic\nmesad\nMesadenia\nmesadenia\nmesail\nmesal\nmesalike\nmesally\nmesameboid\nmesange\nmesaortitis\nmesaraic\nmesaraical\nmesarch\nmesarteritic\nmesarteritis\nMesartim\nmesaticephal\nmesaticephali\nmesaticephalic\nmesaticephalism\nmesaticephalous\nmesaticephaly\nmesatipellic\nmesatipelvic\nmesatiskelic\nmesaxonic\nmescal\nMescalero\nmescaline\nmescalism\nmesdames\nmese\nmesectoderm\nmesem\nMesembryanthemaceae\nMesembryanthemum\nmesembryo\nmesembryonic\nmesencephalic\nmesencephalon\nmesenchyma\nmesenchymal\nmesenchymatal\nmesenchymatic\nmesenchymatous\nmesenchyme\nmesendoderm\nmesenna\nmesenterial\nmesenteric\nmesenterical\nmesenterically\nmesenteriform\nmesenteriolum\nmesenteritic\nmesenteritis\nmesenteron\nmesenteronic\nmesentery\nmesentoderm\nmesepimeral\nmesepimeron\nmesepisternal\nmesepisternum\nmesepithelial\nmesepithelium\nmesethmoid\nmesethmoidal\nmesh\nMeshech\nmeshed\nmeshrabiyeh\nmeshwork\nmeshy\nmesiad\nmesial\nmesially\nmesian\nmesic\nmesically\nmesilla\nmesiobuccal\nmesiocervical\nmesioclusion\nmesiodistal\nmesiodistally\nmesiogingival\nmesioincisal\nmesiolabial\nmesiolingual\nmesion\nmesioocclusal\nmesiopulpal\nmesioversion\nMesitae\nMesites\nMesitidae\nmesitite\nmesityl\nmesitylene\nmesitylenic\nmesmerian\nmesmeric\nmesmerical\nmesmerically\nmesmerism\nmesmerist\nmesmerite\nmesmerizability\nmesmerizable\nmesmerization\nmesmerize\nmesmerizee\nmesmerizer\nmesmeromania\nmesmeromaniac\nmesnality\nmesnalty\nmesne\nmeso\nmesoappendicitis\nmesoappendix\nmesoarial\nmesoarium\nmesobar\nmesobenthos\nmesoblast\nmesoblastema\nmesoblastemic\nmesoblastic\nmesobranchial\nmesobregmate\nmesocaecal\nmesocaecum\nmesocardia\nmesocardium\nmesocarp\nmesocentrous\nmesocephal\nmesocephalic\nmesocephalism\nmesocephalon\nmesocephalous\nmesocephaly\nmesochilium\nmesochondrium\nmesochroic\nmesocoele\nmesocoelian\nmesocoelic\nmesocolic\nmesocolon\nmesocoracoid\nmesocranial\nmesocratic\nmesocuneiform\nmesode\nmesoderm\nmesodermal\nmesodermic\nMesodesma\nMesodesmatidae\nMesodesmidae\nMesodevonian\nMesodevonic\nmesodic\nmesodisilicic\nmesodont\nMesoenatides\nmesofurca\nmesofurcal\nmesogaster\nmesogastral\nmesogastric\nmesogastrium\nmesogloea\nmesogloeal\nmesognathic\nmesognathion\nmesognathism\nmesognathous\nmesognathy\nmesogyrate\nmesohepar\nMesohippus\nmesokurtic\nmesolabe\nmesole\nmesolecithal\nmesolimnion\nmesolite\nmesolithic\nmesologic\nmesological\nmesology\nmesomere\nmesomeric\nmesomerism\nmesometral\nmesometric\nmesometrium\nmesomorph\nmesomorphic\nmesomorphous\nmesomorphy\nMesomyodi\nmesomyodian\nmesomyodous\nmeson\nmesonasal\nMesonemertini\nmesonephric\nmesonephridium\nmesonephritic\nmesonephros\nmesonic\nmesonotal\nmesonotum\nMesonychidae\nMesonyx\nmesoparapteral\nmesoparapteron\nmesopectus\nmesoperiodic\nmesopetalum\nmesophile\nmesophilic\nmesophilous\nmesophragm\nmesophragma\nmesophragmal\nmesophryon\nmesophyll\nmesophyllous\nmesophyllum\nmesophyte\nmesophytic\nmesophytism\nmesopic\nmesoplankton\nmesoplanktonic\nmesoplast\nmesoplastic\nmesoplastral\nmesoplastron\nmesopleural\nmesopleuron\nMesoplodon\nmesoplodont\nmesopodial\nmesopodiale\nmesopodium\nmesopotamia\nMesopotamian\nmesopotamic\nmesoprescutal\nmesoprescutum\nmesoprosopic\nmesopterygial\nmesopterygium\nmesopterygoid\nmesorchial\nmesorchium\nMesore\nmesorectal\nmesorectum\nMesoreodon\nmesorrhin\nmesorrhinal\nmesorrhinian\nmesorrhinism\nmesorrhinium\nmesorrhiny\nmesosalpinx\nmesosaur\nMesosauria\nMesosaurus\nmesoscapula\nmesoscapular\nmesoscutal\nmesoscutellar\nmesoscutellum\nmesoscutum\nmesoseismal\nmesoseme\nmesosiderite\nmesosigmoid\nmesoskelic\nmesosoma\nmesosomatic\nmesosome\nmesosperm\nmesospore\nmesosporic\nmesosporium\nmesostasis\nmesosternal\nmesosternebra\nmesosternebral\nmesosternum\nmesostethium\nMesostoma\nMesostomatidae\nmesostomid\nmesostyle\nmesostylous\nMesosuchia\nmesosuchian\nMesotaeniaceae\nMesotaeniales\nmesotarsal\nmesotartaric\nMesothelae\nmesothelial\nmesothelium\nmesotherm\nmesothermal\nmesothesis\nmesothet\nmesothetic\nmesothetical\nmesothoracic\nmesothoracotheca\nmesothorax\nmesothorium\nmesotonic\nmesotroch\nmesotrocha\nmesotrochal\nmesotrochous\nmesotron\nmesotropic\nmesotympanic\nmesotype\nmesovarian\nmesovarium\nmesoventral\nmesoventrally\nmesoxalate\nmesoxalic\nmesoxalyl\nMesozoa\nmesozoan\nMesozoic\nmespil\nMespilus\nMespot\nmesquite\nMesropian\nmess\nmessage\nmessagery\nMessalian\nmessaline\nmessan\nMessapian\nmesse\nmesselite\nmessenger\nmessengership\nmesser\nmesset\nMessiah\nMessiahship\nMessianic\nMessianically\nmessianically\nMessianism\nMessianist\nMessianize\nMessias\nmessieurs\nmessily\nmessin\nMessines\nMessinese\nmessiness\nmessing\nmessman\nmessmate\nmessor\nmessroom\nmessrs\nmesstin\nmessuage\nmessy\nmestee\nmester\nmestiza\nmestizo\nmestome\nMesua\nMesvinian\nmesymnion\nmet\nmeta\nmetabasis\nmetabasite\nmetabatic\nmetabiological\nmetabiology\nmetabiosis\nmetabiotic\nmetabiotically\nmetabismuthic\nmetabisulphite\nmetabletic\nMetabola\nmetabola\nmetabole\nMetabolia\nmetabolian\nmetabolic\nmetabolism\nmetabolite\nmetabolizable\nmetabolize\nmetabolon\nmetabolous\nmetaboly\nmetaborate\nmetaboric\nmetabranchial\nmetabrushite\nmetabular\nmetacarpal\nmetacarpale\nmetacarpophalangeal\nmetacarpus\nmetacenter\nmetacentral\nmetacentric\nmetacentricity\nmetachemic\nmetachemistry\nMetachlamydeae\nmetachlamydeous\nmetachromasis\nmetachromatic\nmetachromatin\nmetachromatinic\nmetachromatism\nmetachrome\nmetachronism\nmetachrosis\nmetacinnabarite\nmetacism\nmetacismus\nmetaclase\nmetacneme\nmetacoele\nmetacoelia\nmetaconal\nmetacone\nmetaconid\nmetaconule\nmetacoracoid\nmetacrasis\nmetacresol\nmetacromial\nmetacromion\nmetacryst\nmetacyclic\nmetacymene\nmetad\nmetadiabase\nmetadiazine\nmetadiorite\nmetadiscoidal\nmetadromous\nmetafluidal\nmetaformaldehyde\nmetafulminuric\nmetagalactic\nmetagalaxy\nmetagaster\nmetagastric\nmetagastrula\nmetage\nMetageitnion\nmetagelatin\nmetagenesis\nmetagenetic\nmetagenetically\nmetagenic\nmetageometer\nmetageometrical\nmetageometry\nmetagnath\nmetagnathism\nmetagnathous\nmetagnomy\nmetagnostic\nmetagnosticism\nmetagram\nmetagrammatism\nmetagrammatize\nmetagraphic\nmetagraphy\nmetahewettite\nmetahydroxide\nmetaigneous\nmetainfective\nmetakinesis\nmetakinetic\nmetal\nmetalammonium\nmetalanguage\nmetalbumin\nmetalcraft\nmetaldehyde\nmetalepsis\nmetaleptic\nmetaleptical\nmetaleptically\nmetaler\nmetaline\nmetalined\nmetaling\nmetalinguistic\nmetalinguistics\nmetalism\nmetalist\nmetalization\nmetalize\nmetallary\nmetalleity\nmetallic\nmetallical\nmetallically\nmetallicity\nmetallicize\nmetallicly\nmetallics\nmetallide\nmetallifacture\nmetalliferous\nmetallification\nmetalliform\nmetallify\nmetallik\nmetalline\nmetallism\nmetallization\nmetallize\nmetallochrome\nmetallochromy\nmetallogenetic\nmetallogenic\nmetallogeny\nmetallograph\nmetallographer\nmetallographic\nmetallographical\nmetallographist\nmetallography\nmetalloid\nmetalloidal\nmetallometer\nmetallophone\nmetalloplastic\nmetallorganic\nmetallotherapeutic\nmetallotherapy\nmetallurgic\nmetallurgical\nmetallurgically\nmetallurgist\nmetallurgy\nmetalmonger\nmetalogic\nmetalogical\nmetaloph\nmetalorganic\nmetaloscope\nmetaloscopy\nmetaluminate\nmetaluminic\nmetalware\nmetalwork\nmetalworker\nmetalworking\nmetalworks\nmetamathematical\nmetamathematics\nmetamer\nmetameral\nmetamere\nmetameric\nmetamerically\nmetameride\nmetamerism\nmetamerization\nmetamerized\nmetamerous\nmetamery\nmetamorphic\nmetamorphism\nmetamorphize\nmetamorphopsia\nmetamorphopsy\nmetamorphosable\nmetamorphose\nmetamorphoser\nmetamorphoses\nmetamorphosian\nmetamorphosic\nmetamorphosical\nmetamorphosis\nmetamorphostical\nmetamorphotic\nmetamorphous\nmetamorphy\nMetamynodon\nmetanalysis\nmetanauplius\nMetanemertini\nmetanephric\nmetanephritic\nmetanephron\nmetanephros\nmetanepionic\nmetanilic\nmetanitroaniline\nmetanomen\nmetanotal\nmetanotum\nmetantimonate\nmetantimonic\nmetantimonious\nmetantimonite\nmetantimonous\nmetanym\nmetaorganism\nmetaparapteral\nmetaparapteron\nmetapectic\nmetapectus\nmetapepsis\nmetapeptone\nmetaperiodic\nmetaphase\nmetaphenomenal\nmetaphenomenon\nmetaphenylene\nmetaphenylenediamin\nmetaphenylenediamine\nmetaphloem\nmetaphonical\nmetaphonize\nmetaphony\nmetaphor\nmetaphoric\nmetaphorical\nmetaphorically\nmetaphoricalness\nmetaphorist\nmetaphorize\nmetaphosphate\nmetaphosphoric\nmetaphosphorous\nmetaphragm\nmetaphragmal\nmetaphrase\nmetaphrasis\nmetaphrast\nmetaphrastic\nmetaphrastical\nmetaphrastically\nmetaphyseal\nmetaphysic\nmetaphysical\nmetaphysically\nmetaphysician\nmetaphysicianism\nmetaphysicist\nmetaphysicize\nmetaphysicous\nmetaphysics\nmetaphysis\nmetaphyte\nmetaphytic\nmetaphyton\nmetaplasia\nmetaplasis\nmetaplasm\nmetaplasmic\nmetaplast\nmetaplastic\nmetapleural\nmetapleure\nmetapleuron\nmetaplumbate\nmetaplumbic\nmetapneumonic\nmetapneustic\nmetapodial\nmetapodiale\nmetapodium\nmetapolitic\nmetapolitical\nmetapolitician\nmetapolitics\nmetapophyseal\nmetapophysial\nmetapophysis\nmetapore\nmetapostscutellar\nmetapostscutellum\nmetaprescutal\nmetaprescutum\nmetaprotein\nmetapsychic\nmetapsychical\nmetapsychics\nmetapsychism\nmetapsychist\nmetapsychological\nmetapsychology\nmetapsychosis\nmetapterygial\nmetapterygium\nmetapterygoid\nmetarabic\nmetarhyolite\nmetarossite\nmetarsenic\nmetarsenious\nmetarsenite\nmetasaccharinic\nmetascutal\nmetascutellar\nmetascutellum\nmetascutum\nmetasedimentary\nmetasilicate\nmetasilicic\nmetasoma\nmetasomal\nmetasomasis\nmetasomatic\nmetasomatism\nmetasomatosis\nmetasome\nmetasperm\nMetaspermae\nmetaspermic\nmetaspermous\nmetastability\nmetastable\nmetastannate\nmetastannic\nmetastasis\nmetastasize\nmetastatic\nmetastatical\nmetastatically\nmetasternal\nmetasternum\nmetasthenic\nmetastibnite\nmetastigmate\nmetastoma\nmetastome\nmetastrophe\nmetastrophic\nmetastyle\nmetatantalic\nmetatarsal\nmetatarsale\nmetatarse\nmetatarsophalangeal\nmetatarsus\nmetatatic\nmetatatically\nmetataxic\nmetate\nmetathalamus\nmetatheology\nMetatheria\nmetatherian\nmetatheses\nmetathesis\nmetathetic\nmetathetical\nmetathetically\nmetathoracic\nmetathorax\nmetatitanate\nmetatitanic\nmetatoluic\nmetatoluidine\nmetatracheal\nmetatrophic\nmetatungstic\nmetatype\nmetatypic\nMetaurus\nmetavanadate\nmetavanadic\nmetavauxite\nmetavoltine\nmetaxenia\nmetaxite\nmetaxylem\nmetaxylene\nmetayer\nMetazoa\nmetazoal\nmetazoan\nmetazoea\nmetazoic\nmetazoon\nmete\nmetel\nmetempiric\nmetempirical\nmetempirically\nmetempiricism\nmetempiricist\nmetempirics\nmetempsychic\nmetempsychosal\nmetempsychose\nmetempsychoses\nmetempsychosical\nmetempsychosis\nmetempsychosize\nmetemptosis\nmetencephalic\nmetencephalon\nmetensarcosis\nmetensomatosis\nmetenteron\nmetenteronic\nmeteogram\nmeteograph\nmeteor\nmeteorgraph\nmeteoric\nmeteorical\nmeteorically\nmeteorism\nmeteorist\nmeteoristic\nmeteorital\nmeteorite\nmeteoritic\nmeteoritics\nmeteorization\nmeteorize\nmeteorlike\nmeteorogram\nmeteorograph\nmeteorographic\nmeteorography\nmeteoroid\nmeteoroidal\nmeteorolite\nmeteorolitic\nmeteorologic\nmeteorological\nmeteorologically\nmeteorologist\nmeteorology\nmeteorometer\nmeteoroscope\nmeteoroscopy\nmeteorous\nmetepencephalic\nmetepencephalon\nmetepimeral\nmetepimeron\nmetepisternal\nmetepisternum\nmeter\nmeterage\nmetergram\nmeterless\nmeterman\nmetership\nmetestick\nmetewand\nmeteyard\nmethacrylate\nmethacrylic\nmethadone\nmethanal\nmethanate\nmethane\nmethanoic\nmethanolysis\nmethanometer\nmetheglin\nmethemoglobin\nmethemoglobinemia\nmethemoglobinuria\nmethenamine\nmethene\nmethenyl\nmether\nmethid\nmethide\nmethine\nmethinks\nmethiodide\nmethionic\nmethionine\nmethobromide\nmethod\nmethodaster\nmethodeutic\nmethodic\nmethodical\nmethodically\nmethodicalness\nmethodics\nmethodism\nMethodist\nmethodist\nMethodistic\nMethodistically\nMethodisty\nmethodization\nMethodize\nmethodize\nmethodizer\nmethodless\nmethodological\nmethodologically\nmethodologist\nmethodology\nMethody\nmethought\nmethoxide\nmethoxychlor\nmethoxyl\nmethronic\nMethuselah\nmethyl\nmethylacetanilide\nmethylal\nmethylamine\nmethylaniline\nmethylanthracene\nmethylate\nmethylation\nmethylator\nmethylcholanthrene\nmethylene\nmethylenimine\nmethylenitan\nmethylethylacetic\nmethylglycine\nmethylglycocoll\nmethylglyoxal\nmethylic\nmethylmalonic\nmethylnaphthalene\nmethylol\nmethylolurea\nmethylosis\nmethylotic\nmethylpentose\nmethylpentoses\nmethylpropane\nmethylsulfanol\nmetic\nmeticulosity\nmeticulous\nmeticulously\nmeticulousness\nmetier\nMetin\nmetis\nMetoac\nmetochous\nmetochy\nmetoestrous\nmetoestrum\nMetol\nmetonym\nmetonymic\nmetonymical\nmetonymically\nmetonymous\nmetonymously\nmetonymy\nmetope\nMetopias\nmetopic\nmetopion\nmetopism\nMetopoceros\nmetopomancy\nmetopon\nmetoposcopic\nmetoposcopical\nmetoposcopist\nmetoposcopy\nmetosteal\nmetosteon\nmetoxazine\nmetoxenous\nmetoxeny\nmetra\nmetralgia\nmetranate\nmetranemia\nmetratonia\nMetrazol\nmetrectasia\nmetrectatic\nmetrectomy\nmetrectopia\nmetrectopic\nmetrectopy\nmetreless\nmetreship\nmetreta\nmetrete\nmetretes\nmetria\nmetric\nmetrical\nmetrically\nmetrician\nmetricism\nmetricist\nmetricize\nmetrics\nMetridium\nmetrification\nmetrifier\nmetrify\nmetriocephalic\nmetrist\nmetritis\nmetrocampsis\nmetrocarat\nmetrocarcinoma\nmetrocele\nmetroclyst\nmetrocolpocele\nmetrocracy\nmetrocratic\nmetrocystosis\nmetrodynia\nmetrofibroma\nmetrological\nmetrologist\nmetrologue\nmetrology\nmetrolymphangitis\nmetromalacia\nmetromalacoma\nmetromalacosis\nmetromania\nmetromaniac\nmetromaniacal\nmetrometer\nmetroneuria\nmetronome\nmetronomic\nmetronomical\nmetronomically\nmetronymic\nmetronymy\nmetroparalysis\nmetropathia\nmetropathic\nmetropathy\nmetroperitonitis\nmetrophlebitis\nmetrophotography\nmetropole\nmetropolis\nmetropolitan\nmetropolitanate\nmetropolitancy\nmetropolitanism\nmetropolitanize\nmetropolitanship\nmetropolite\nmetropolitic\nmetropolitical\nmetropolitically\nmetroptosia\nmetroptosis\nmetroradioscope\nmetrorrhagia\nmetrorrhagic\nmetrorrhea\nmetrorrhexis\nmetrorthosis\nmetrosalpingitis\nmetrosalpinx\nmetroscirrhus\nmetroscope\nmetroscopy\nMetrosideros\nmetrostaxis\nmetrostenosis\nmetrosteresis\nmetrostyle\nmetrosynizesis\nmetrotherapist\nmetrotherapy\nmetrotome\nmetrotomy\nMetroxylon\nmettar\nmettle\nmettled\nmettlesome\nmettlesomely\nmettlesomeness\nmetusia\nmetze\nMeum\nmeuse\nmeute\nMev\nmew\nmeward\nmewer\nmewl\nmewler\nMexica\nMexican\nMexicanize\nMexitl\nMexitli\nmeyerhofferite\nmezcal\nMezentian\nMezentism\nMezentius\nmezereon\nmezereum\nmezuzah\nmezzanine\nmezzo\nmezzograph\nmezzotint\nmezzotinter\nmezzotinto\nmho\nmhometer\nmi\nMiami\nmiamia\nmian\nMiao\nMiaotse\nMiaotze\nmiaow\nmiaower\nMiaplacidus\nmiargyrite\nmiarolitic\nmias\nmiaskite\nmiasm\nmiasma\nmiasmal\nmiasmata\nmiasmatic\nmiasmatical\nmiasmatically\nmiasmatize\nmiasmatology\nmiasmatous\nmiasmic\nmiasmology\nmiasmous\nMiastor\nmiaul\nmiauler\nmib\nmica\nmicaceous\nmicacious\nmicacite\nMicah\nmicasization\nmicasize\nmicate\nmication\nMicawberish\nMicawberism\nmice\nmicellar\nmicelle\nMichabo\nMichabou\nMichael\nMichaelites\nMichaelmas\nMichaelmastide\nmiche\nMicheal\nMichel\nMichelangelesque\nMichelangelism\nMichelia\nMichelle\nmicher\nMichiel\nMichigamea\nMichigan\nmichigan\nMichigander\nMichiganite\nmiching\nMichoacan\nMichoacano\nmicht\nMick\nmick\nMickey\nmickle\nMicky\nMicmac\nmico\nmiconcave\nMiconia\nmicramock\nMicrampelis\nmicranatomy\nmicrander\nmicrandrous\nmicraner\nmicranthropos\nMicraster\nmicrencephalia\nmicrencephalic\nmicrencephalous\nmicrencephalus\nmicrencephaly\nmicrergate\nmicresthete\nmicrify\nmicro\nmicroammeter\nmicroampere\nmicroanalysis\nmicroanalyst\nmicroanalytical\nmicroangstrom\nmicroapparatus\nmicrobal\nmicrobalance\nmicrobar\nmicrobarograph\nmicrobattery\nmicrobe\nmicrobeless\nmicrobeproof\nmicrobial\nmicrobian\nmicrobic\nmicrobicidal\nmicrobicide\nmicrobiologic\nmicrobiological\nmicrobiologically\nmicrobiologist\nmicrobiology\nmicrobion\nmicrobiosis\nmicrobiota\nmicrobiotic\nmicrobious\nmicrobism\nmicrobium\nmicroblast\nmicroblepharia\nmicroblepharism\nmicroblephary\nmicrobrachia\nmicrobrachius\nmicroburet\nmicroburette\nmicroburner\nmicrocaltrop\nmicrocardia\nmicrocardius\nmicrocarpous\nMicrocebus\nmicrocellular\nmicrocentrosome\nmicrocentrum\nmicrocephal\nmicrocephalia\nmicrocephalic\nmicrocephalism\nmicrocephalous\nmicrocephalus\nmicrocephaly\nmicroceratous\nmicrochaeta\nmicrocharacter\nmicrocheilia\nmicrocheiria\nmicrochemic\nmicrochemical\nmicrochemically\nmicrochemistry\nmicrochiria\nMicrochiroptera\nmicrochiropteran\nmicrochiropterous\nmicrochromosome\nmicrochronometer\nmicrocinema\nmicrocinematograph\nmicrocinematographic\nmicrocinematography\nMicrocitrus\nmicroclastic\nmicroclimate\nmicroclimatic\nmicroclimatologic\nmicroclimatological\nmicroclimatology\nmicrocline\nmicrocnemia\nmicrocoat\nmicrococcal\nMicrococceae\nMicrococcus\nmicrocoleoptera\nmicrocolon\nmicrocolorimeter\nmicrocolorimetric\nmicrocolorimetrically\nmicrocolorimetry\nmicrocolumnar\nmicrocombustion\nmicroconidial\nmicroconidium\nmicroconjugant\nMicroconodon\nmicroconstituent\nmicrocopy\nmicrocoria\nmicrocosm\nmicrocosmal\nmicrocosmian\nmicrocosmic\nmicrocosmical\nmicrocosmography\nmicrocosmology\nmicrocosmos\nmicrocosmus\nmicrocoulomb\nmicrocranous\nmicrocrith\nmicrocryptocrystalline\nmicrocrystal\nmicrocrystalline\nmicrocrystallogeny\nmicrocrystallography\nmicrocrystalloscopy\nmicrocurie\nMicrocyprini\nmicrocyst\nmicrocyte\nmicrocythemia\nmicrocytosis\nmicrodactylia\nmicrodactylism\nmicrodactylous\nmicrodentism\nmicrodentous\nmicrodetection\nmicrodetector\nmicrodetermination\nmicrodiactine\nmicrodissection\nmicrodistillation\nmicrodont\nmicrodontism\nmicrodontous\nmicrodose\nmicrodrawing\nMicrodrili\nmicrodrive\nmicroelectrode\nmicroelectrolysis\nmicroelectroscope\nmicroelement\nmicroerg\nmicroestimation\nmicroeutaxitic\nmicroevolution\nmicroexamination\nmicrofarad\nmicrofauna\nmicrofelsite\nmicrofelsitic\nmicrofilaria\nmicrofilm\nmicroflora\nmicrofluidal\nmicrofoliation\nmicrofossil\nmicrofungus\nmicrofurnace\nMicrogadus\nmicrogalvanometer\nmicrogamete\nmicrogametocyte\nmicrogametophyte\nmicrogamy\nMicrogaster\nmicrogastria\nMicrogastrinae\nmicrogastrine\nmicrogeological\nmicrogeologist\nmicrogeology\nmicrogilbert\nmicroglia\nmicroglossia\nmicrognathia\nmicrognathic\nmicrognathous\nmicrogonidial\nmicrogonidium\nmicrogram\nmicrogramme\nmicrogranite\nmicrogranitic\nmicrogranitoid\nmicrogranular\nmicrogranulitic\nmicrograph\nmicrographer\nmicrographic\nmicrographical\nmicrographically\nmicrographist\nmicrography\nmicrograver\nmicrogravimetric\nmicrogroove\nmicrogyne\nmicrogyria\nmicrohenry\nmicrohepatia\nmicrohistochemical\nmicrohistology\nmicrohm\nmicrohmmeter\nMicrohymenoptera\nmicrohymenopteron\nmicroinjection\nmicrojoule\nmicrolepidopter\nmicrolepidoptera\nmicrolepidopteran\nmicrolepidopterist\nmicrolepidopteron\nmicrolepidopterous\nmicroleukoblast\nmicrolevel\nmicrolite\nmicroliter\nmicrolith\nmicrolithic\nmicrolitic\nmicrologic\nmicrological\nmicrologically\nmicrologist\nmicrologue\nmicrology\nmicrolux\nmicromania\nmicromaniac\nmicromanipulation\nmicromanipulator\nmicromanometer\nMicromastictora\nmicromazia\nmicromeasurement\nmicromechanics\nmicromelia\nmicromelic\nmicromelus\nmicromembrane\nmicromeral\nmicromere\nMicromeria\nmicromeric\nmicromerism\nmicromeritic\nmicromeritics\nmicromesentery\nmicrometallographer\nmicrometallography\nmicrometallurgy\nmicrometer\nmicromethod\nmicrometrical\nmicrometrically\nmicrometry\nmicromicrofarad\nmicromicron\nmicromil\nmicromillimeter\nmicromineralogical\nmicromineralogy\nmicromorph\nmicromotion\nmicromotoscope\nmicromyelia\nmicromyeloblast\nmicron\nMicronesian\nmicronization\nmicronize\nmicronometer\nmicronuclear\nmicronucleus\nmicronutrient\nmicroorganic\nmicroorganism\nmicroorganismal\nmicropaleontology\nmicropantograph\nmicroparasite\nmicroparasitic\nmicropathological\nmicropathologist\nmicropathology\nmicropegmatite\nmicropegmatitic\nmicropenis\nmicroperthite\nmicroperthitic\nmicropetalous\nmicropetrography\nmicropetrologist\nmicropetrology\nmicrophage\nmicrophagocyte\nmicrophagous\nmicrophagy\nmicrophakia\nmicrophallus\nmicrophone\nmicrophonic\nmicrophonics\nmicrophonograph\nmicrophot\nmicrophotograph\nmicrophotographic\nmicrophotography\nmicrophotometer\nmicrophotoscope\nmicrophthalmia\nmicrophthalmic\nmicrophthalmos\nmicrophthalmus\nmicrophyllous\nmicrophysical\nmicrophysics\nmicrophysiography\nmicrophytal\nmicrophyte\nmicrophytic\nmicrophytology\nmicropia\nmicropin\nmicropipette\nmicroplakite\nmicroplankton\nmicroplastocyte\nmicroplastometer\nmicropodal\nMicropodi\nmicropodia\nMicropodidae\nMicropodiformes\nmicropoecilitic\nmicropoicilitic\nmicropoikilitic\nmicropolariscope\nmicropolarization\nmicropore\nmicroporosity\nmicroporous\nmicroporphyritic\nmicroprint\nmicroprojector\nmicropsia\nmicropsy\nmicropterism\nmicropterous\nMicropterus\nmicropterygid\nMicropterygidae\nmicropterygious\nMicropterygoidea\nMicropteryx\nMicropus\nmicropylar\nmicropyle\nmicropyrometer\nmicroradiometer\nmicroreaction\nmicrorefractometer\nmicrorhabdus\nmicrorheometer\nmicrorheometric\nmicrorheometrical\nMicrorhopias\nMicrosauria\nmicrosaurian\nmicrosclere\nmicrosclerous\nmicrosclerum\nmicroscopal\nmicroscope\nmicroscopial\nmicroscopic\nmicroscopical\nmicroscopically\nmicroscopics\nMicroscopid\nmicroscopist\nMicroscopium\nmicroscopize\nmicroscopy\nmicrosecond\nmicrosection\nmicroseism\nmicroseismic\nmicroseismical\nmicroseismograph\nmicroseismology\nmicroseismometer\nmicroseismometrograph\nmicroseismometry\nmicroseme\nmicroseptum\nmicrosmatic\nmicrosmatism\nmicrosoma\nmicrosomatous\nmicrosome\nmicrosomia\nmicrosommite\nMicrosorex\nmicrospecies\nmicrospectroscope\nmicrospectroscopic\nmicrospectroscopy\nMicrospermae\nmicrospermous\nMicrosphaera\nmicrosphaeric\nmicrosphere\nmicrospheric\nmicrospherulitic\nmicrosplanchnic\nmicrosplenia\nmicrosplenic\nmicrosporange\nmicrosporangium\nmicrospore\nmicrosporiasis\nmicrosporic\nMicrosporidia\nmicrosporidian\nMicrosporon\nmicrosporophore\nmicrosporophyll\nmicrosporosis\nmicrosporous\nMicrosporum\nmicrostat\nmicrosthene\nMicrosthenes\nmicrosthenic\nmicrostomatous\nmicrostome\nmicrostomia\nmicrostomous\nmicrostructural\nmicrostructure\nMicrostylis\nmicrostylospore\nmicrostylous\nmicrosublimation\nmicrotasimeter\nmicrotechnic\nmicrotechnique\nmicrotelephone\nmicrotelephonic\nMicrothelyphonida\nmicrotheos\nmicrotherm\nmicrothermic\nmicrothorax\nMicrothyriaceae\nmicrotia\nMicrotinae\nmicrotine\nmicrotitration\nmicrotome\nmicrotomic\nmicrotomical\nmicrotomist\nmicrotomy\nmicrotone\nMicrotus\nmicrotypal\nmicrotype\nmicrotypical\nmicrovolt\nmicrovolume\nmicrovolumetric\nmicrowatt\nmicrowave\nmicroweber\nmicrozoa\nmicrozoal\nmicrozoan\nmicrozoaria\nmicrozoarian\nmicrozoary\nmicrozoic\nmicrozone\nmicrozooid\nmicrozoology\nmicrozoon\nmicrozoospore\nmicrozyma\nmicrozyme\nmicrozymian\nmicrurgic\nmicrurgical\nmicrurgist\nmicrurgy\nMicrurus\nmiction\nmicturate\nmicturition\nmid\nmidafternoon\nmidautumn\nmidaxillary\nmidbrain\nmidday\nmidden\nmiddenstead\nmiddle\nmiddlebreaker\nmiddlebuster\nmiddleman\nmiddlemanism\nmiddlemanship\nmiddlemost\nmiddler\nmiddlesplitter\nmiddlewards\nmiddleway\nmiddleweight\nmiddlewoman\nmiddling\nmiddlingish\nmiddlingly\nmiddlingness\nmiddlings\nmiddorsal\nmiddy\nmide\nMider\nmidevening\nmidewiwin\nmidfacial\nmidforenoon\nmidfrontal\nmidge\nmidget\nmidgety\nmidgy\nmidheaven\nMidianite\nMidianitish\nMididae\nmidiron\nmidland\nMidlander\nMidlandize\nmidlandward\nmidlatitude\nmidleg\nmidlenting\nmidmain\nmidmandibular\nmidmonth\nmidmonthly\nmidmorn\nmidmorning\nmidmost\nmidnight\nmidnightly\nmidnoon\nmidparent\nmidparentage\nmidparental\nmidpit\nmidrange\nmidrash\nmidrashic\nmidrib\nmidribbed\nmidriff\nmids\nmidseason\nmidsentence\nmidship\nmidshipman\nmidshipmanship\nmidshipmite\nmidships\nmidspace\nmidst\nmidstory\nmidstout\nmidstream\nmidstreet\nmidstroke\nmidstyled\nmidsummer\nmidsummerish\nmidsummery\nmidtap\nmidvein\nmidverse\nmidward\nmidwatch\nmidway\nmidweek\nmidweekly\nMidwest\nMidwestern\nMidwesterner\nmidwestward\nmidwife\nmidwifery\nmidwinter\nmidwinterly\nmidwintry\nmidwise\nmidyear\nMiek\nmien\nmiersite\nMiescherian\nmiff\nmiffiness\nmiffy\nmig\nmight\nmightily\nmightiness\nmightless\nmightnt\nmighty\nmightyhearted\nmightyship\nmiglio\nmigmatite\nmigniardise\nmignon\nmignonette\nmignonne\nmignonness\nMigonitis\nmigraine\nmigrainoid\nmigrainous\nmigrant\nmigrate\nmigration\nmigrational\nmigrationist\nmigrative\nmigrator\nmigratorial\nmigratory\nMiguel\nmiharaite\nmihrab\nmijakite\nmijl\nmikado\nmikadoate\nmikadoism\nMikael\nMikania\nMikasuki\nMike\nmike\nMikey\nMiki\nmikie\nMikir\nMil\nmil\nmila\nmilady\nmilammeter\nMilan\nMilanese\nMilanion\nmilarite\nmilch\nmilcher\nmilchy\nmild\nmilden\nmilder\nmildew\nmildewer\nmildewy\nmildhearted\nmildheartedness\nmildish\nmildly\nmildness\nMildred\nmile\nmileage\nMiledh\nmilepost\nmiler\nMiles\nMilesian\nmilesima\nMilesius\nmilestone\nmileway\nmilfoil\nmilha\nmiliaceous\nmiliarensis\nmiliaria\nmiliarium\nmiliary\nMilicent\nmilieu\nMiliola\nmilioliform\nmilioline\nmiliolite\nmiliolitic\nmilitancy\nmilitant\nmilitantly\nmilitantness\nmilitarily\nmilitariness\nmilitarism\nmilitarist\nmilitaristic\nmilitaristically\nmilitarization\nmilitarize\nmilitary\nmilitaryism\nmilitaryment\nmilitaster\nmilitate\nmilitation\nmilitia\nmilitiaman\nmilitiate\nmilium\nmilk\nmilkbush\nmilken\nmilker\nmilkeress\nmilkfish\nmilkgrass\nmilkhouse\nmilkily\nmilkiness\nmilking\nmilkless\nmilklike\nmilkmaid\nmilkman\nmilkness\nmilkshed\nmilkshop\nmilksick\nmilksop\nmilksopism\nmilksoppery\nmilksopping\nmilksoppish\nmilksoppy\nmilkstone\nmilkweed\nmilkwood\nmilkwort\nmilky\nmill\nMilla\nmilla\nmillable\nmillage\nmillboard\nmillclapper\nmillcourse\nmilldam\nmille\nmilled\nmillefiori\nmilleflorous\nmillefoliate\nmillenarian\nmillenarianism\nmillenarist\nmillenary\nmillennia\nmillennial\nmillennialism\nmillennialist\nmillennially\nmillennian\nmillenniarism\nmillenniary\nmillennium\nmillepede\nMillepora\nmillepore\nmilleporiform\nmilleporine\nmilleporite\nmilleporous\nmillepunctate\nmiller\nmilleress\nmillering\nMillerism\nMillerite\nmillerite\nmillerole\nmillesimal\nmillesimally\nmillet\nMillettia\nmillfeed\nmillful\nmillhouse\nmilliad\nmilliammeter\nmilliamp\nmilliampere\nmilliamperemeter\nmilliangstrom\nmilliard\nmilliardaire\nmilliare\nmilliarium\nmilliary\nmillibar\nmillicron\nmillicurie\nMillie\nmillieme\nmilliequivalent\nmillifarad\nmillifold\nmilliform\nmilligal\nmilligrade\nmilligram\nmilligramage\nmillihenry\nmillilambert\nmillile\nmilliliter\nmillilux\nmillimeter\nmillimicron\nmillimolar\nmillimole\nmillincost\nmilline\nmilliner\nmillinerial\nmillinering\nmillinery\nmilling\nMillingtonia\nmillinormal\nmillinormality\nmillioctave\nmillioersted\nmillion\nmillionaire\nmillionairedom\nmillionairess\nmillionairish\nmillionairism\nmillionary\nmillioned\nmillioner\nmillionfold\nmillionism\nmillionist\nmillionize\nmillionocracy\nmillions\nmillionth\nmilliphot\nmillipoise\nmillisecond\nmillistere\nMillite\nmillithrum\nmillivolt\nmillivoltmeter\nmillman\nmillocracy\nmillocrat\nmillocratism\nmillosevichite\nmillowner\nmillpond\nmillpool\nmillpost\nmillrace\nmillrynd\nmillsite\nmillstock\nmillstone\nmillstream\nmilltail\nmillward\nmillwork\nmillworker\nmillwright\nmillwrighting\nMilly\nMilner\nmilner\nMilo\nmilo\nmilord\nmilpa\nmilreis\nmilsey\nmilsie\nmilt\nmilter\nmiltlike\nMiltonia\nMiltonian\nMiltonic\nMiltonically\nMiltonism\nMiltonist\nMiltonize\nMiltos\nmiltsick\nmiltwaste\nmilty\nMilvago\nMilvinae\nmilvine\nmilvinous\nMilvus\nmilzbrand\nmim\nmima\nmimbar\nmimble\nMimbreno\nMime\nmime\nmimeo\nmimeograph\nmimeographic\nmimeographically\nmimeographist\nmimer\nmimesis\nmimester\nmimetene\nmimetesite\nmimetic\nmimetical\nmimetically\nmimetism\nmimetite\nMimi\nmimiambi\nmimiambic\nmimiambics\nmimic\nmimical\nmimically\nmimicism\nmimicker\nmimicry\nMimidae\nMiminae\nmimine\nmiminypiminy\nmimly\nmimmation\nmimmest\nmimmock\nmimmocking\nmimmocky\nmimmood\nmimmoud\nmimmouthed\nmimmouthedness\nmimodrama\nmimographer\nmimography\nmimologist\nMimosa\nMimosaceae\nmimosaceous\nmimosis\nmimosite\nmimotype\nmimotypic\nmimp\nMimpei\nmimsey\nMimulus\nMimus\nMimusops\nmin\nMina\nmina\nminable\nminacious\nminaciously\nminaciousness\nminacity\nMinaean\nMinahassa\nMinahassan\nMinahassian\nminar\nminaret\nminareted\nminargent\nminasragrite\nminatorial\nminatorially\nminatorily\nminatory\nminaway\nmince\nmincemeat\nmincer\nminchery\nminchiate\nmincing\nmincingly\nmincingness\nMincopi\nMincopie\nmind\nminded\nMindel\nMindelian\nminder\nMindererus\nmindful\nmindfully\nmindfulness\nminding\nmindless\nmindlessly\nmindlessness\nmindsight\nmine\nmineowner\nminer\nmineragraphic\nmineragraphy\nmineraiogic\nmineral\nmineralizable\nmineralization\nmineralize\nmineralizer\nmineralogical\nmineralogically\nmineralogist\nmineralogize\nmineralogy\nMinerva\nminerval\nMinervan\nMinervic\nminery\nmines\nminette\nmineworker\nMing\nming\nminge\nmingelen\nmingle\nmingleable\nmingledly\nminglement\nmingler\nminglingly\nMingo\nMingrelian\nminguetite\nmingwort\nmingy\nminhag\nminhah\nminiaceous\nminiate\nminiator\nminiature\nminiaturist\nminibus\nminicam\nminicamera\nMiniconjou\nminienize\nminification\nminify\nminikin\nminikinly\nminim\nminima\nminimacid\nminimal\nminimalism\nMinimalist\nminimalkaline\nminimally\nminimetric\nminimifidian\nminimifidianism\nminimism\nminimistic\nMinimite\nminimitude\nminimization\nminimize\nminimizer\nminimum\nminimus\nminimuscular\nmining\nminion\nminionette\nminionism\nminionly\nminionship\nminish\nminisher\nminishment\nminister\nministeriable\nministerial\nministerialism\nministerialist\nministeriality\nministerially\nministerialness\nministerium\nministership\nministrable\nministrant\nministration\nministrative\nministrator\nministrer\nministress\nministry\nministryship\nminitant\nMinitari\nminium\nminiver\nminivet\nmink\nminkery\nminkish\nMinkopi\nMinnehaha\nminnesinger\nminnesong\nMinnesotan\nMinnetaree\nMinnie\nminnie\nminniebush\nminning\nminnow\nminny\nmino\nMinoan\nminoize\nminometer\nminor\nminorage\nminorate\nminoration\nMinorca\nMinorcan\nMinoress\nminoress\nMinorist\nMinorite\nminority\nminorship\nMinos\nminot\nMinotaur\nMinseito\nminsitive\nminster\nminsteryard\nminstrel\nminstreless\nminstrelship\nminstrelsy\nmint\nmintage\nMintaka\nmintbush\nminter\nmintmaker\nmintmaking\nmintman\nmintmaster\nminty\nminuend\nminuet\nminuetic\nminuetish\nminus\nminuscular\nminuscule\nminutary\nminutation\nminute\nminutely\nminuteman\nminuteness\nminuter\nminuthesis\nminutia\nminutiae\nminutial\nminutiose\nminutiously\nminutissimic\nminverite\nminx\nminxish\nminxishly\nminxishness\nminxship\nminy\nMinyadidae\nMinyae\nMinyan\nminyan\nMinyas\nmiocardia\nMiocene\nMiocenic\nMiohippus\nmiolithic\nmioplasmia\nmiothermic\nmiqra\nmiquelet\nmir\nMira\nMirabel\nMirabell\nmirabiliary\nMirabilis\nmirabilite\nMirac\nMirach\nmirach\nmiracidial\nmiracidium\nmiracle\nmiraclemonger\nmiraclemongering\nmiraclist\nmiraculist\nmiraculize\nmiraculosity\nmiraculous\nmiraculously\nmiraculousness\nmirador\nmirage\nmiragy\nMirak\nMiramolin\nMirana\nMiranda\nmirandous\nMiranha\nMiranhan\nmirate\nmirbane\nmird\nmirdaha\nmire\nmirepoix\nMirfak\nMiriam\nMiriamne\nmirid\nMiridae\nmirific\nmiriness\nmirish\nmirk\nmirkiness\nmirksome\nmirliton\nMiro\nmiro\nMirounga\nmirror\nmirrored\nmirrorize\nmirrorlike\nmirrorscope\nmirrory\nmirth\nmirthful\nmirthfully\nmirthfulness\nmirthless\nmirthlessly\nmirthlessness\nmirthsome\nmirthsomeness\nmiry\nmiryachit\nmirza\nmisaccent\nmisaccentuation\nmisachievement\nmisacknowledge\nmisact\nmisadapt\nmisadaptation\nmisadd\nmisaddress\nmisadjust\nmisadmeasurement\nmisadministration\nmisadvantage\nmisadventure\nmisadventurer\nmisadventurous\nmisadventurously\nmisadvertence\nmisadvice\nmisadvise\nmisadvised\nmisadvisedly\nmisadvisedness\nmisaffected\nmisaffection\nmisaffirm\nmisagent\nmisaim\nmisalienate\nmisalignment\nmisallegation\nmisallege\nmisalliance\nmisallotment\nmisallowance\nmisally\nmisalphabetize\nmisalter\nmisanalyze\nmisandry\nmisanswer\nmisanthrope\nmisanthropia\nmisanthropic\nmisanthropical\nmisanthropically\nmisanthropism\nmisanthropist\nmisanthropize\nmisanthropy\nmisapparel\nmisappear\nmisappearance\nmisappellation\nmisapplication\nmisapplier\nmisapply\nmisappoint\nmisappointment\nmisappraise\nmisappraisement\nmisappreciate\nmisappreciation\nmisappreciative\nmisapprehend\nmisapprehendingly\nmisapprehensible\nmisapprehension\nmisapprehensive\nmisapprehensively\nmisapprehensiveness\nmisappropriate\nmisappropriately\nmisappropriation\nmisarchism\nmisarchist\nmisarrange\nmisarrangement\nmisarray\nmisascribe\nmisascription\nmisasperse\nmisassay\nmisassent\nmisassert\nmisassign\nmisassociate\nmisassociation\nmisatone\nmisattend\nmisattribute\nmisattribution\nmisaunter\nmisauthorization\nmisauthorize\nmisaward\nmisbandage\nmisbaptize\nmisbecome\nmisbecoming\nmisbecomingly\nmisbecomingness\nmisbefitting\nmisbeget\nmisbegin\nmisbegotten\nmisbehave\nmisbehavior\nmisbeholden\nmisbelief\nmisbelieve\nmisbeliever\nmisbelievingly\nmisbelove\nmisbeseem\nmisbestow\nmisbestowal\nmisbetide\nmisbias\nmisbill\nmisbind\nmisbirth\nmisbode\nmisborn\nmisbrand\nmisbuild\nmisbusy\nmiscalculate\nmiscalculation\nmiscalculator\nmiscall\nmiscaller\nmiscanonize\nmiscarriage\nmiscarriageable\nmiscarry\nmiscast\nmiscasualty\nmisceability\nmiscegenate\nmiscegenation\nmiscegenationist\nmiscegenator\nmiscegenetic\nmiscegine\nmiscellanarian\nmiscellanea\nmiscellaneity\nmiscellaneous\nmiscellaneously\nmiscellaneousness\nmiscellanist\nmiscellany\nmischallenge\nmischance\nmischanceful\nmischancy\nmischaracterization\nmischaracterize\nmischarge\nmischief\nmischiefful\nmischieve\nmischievous\nmischievously\nmischievousness\nmischio\nmischoice\nmischoose\nmischristen\nmiscibility\nmiscible\nmiscipher\nmisclaim\nmisclaiming\nmisclass\nmisclassification\nmisclassify\nmiscognizant\nmiscoin\nmiscoinage\nmiscollocation\nmiscolor\nmiscoloration\nmiscommand\nmiscommit\nmiscommunicate\nmiscompare\nmiscomplacence\nmiscomplain\nmiscomplaint\nmiscompose\nmiscomprehend\nmiscomprehension\nmiscomputation\nmiscompute\nmisconceive\nmisconceiver\nmisconception\nmisconclusion\nmiscondition\nmisconduct\nmisconfer\nmisconfidence\nmisconfident\nmisconfiguration\nmisconjecture\nmisconjugate\nmisconjugation\nmisconjunction\nmisconsecrate\nmisconsequence\nmisconstitutional\nmisconstruable\nmisconstruct\nmisconstruction\nmisconstructive\nmisconstrue\nmisconstruer\nmiscontinuance\nmisconvenient\nmisconvey\nmiscook\nmiscookery\nmiscorrect\nmiscorrection\nmiscounsel\nmiscount\nmiscovet\nmiscreancy\nmiscreant\nmiscreate\nmiscreation\nmiscreative\nmiscreator\nmiscredited\nmiscredulity\nmiscreed\nmiscript\nmiscrop\nmiscue\nmiscultivated\nmisculture\nmiscurvature\nmiscut\nmisdate\nmisdateful\nmisdaub\nmisdeal\nmisdealer\nmisdecide\nmisdecision\nmisdeclaration\nmisdeclare\nmisdeed\nmisdeem\nmisdeemful\nmisdefine\nmisdeformed\nmisdeliver\nmisdelivery\nmisdemean\nmisdemeanant\nmisdemeanist\nmisdemeanor\nmisdentition\nmisderivation\nmisderive\nmisdescribe\nmisdescriber\nmisdescription\nmisdescriptive\nmisdesire\nmisdetermine\nmisdevise\nmisdevoted\nmisdevotion\nmisdiet\nmisdirect\nmisdirection\nmisdispose\nmisdisposition\nmisdistinguish\nmisdistribute\nmisdistribution\nmisdivide\nmisdivision\nmisdo\nmisdoer\nmisdoing\nmisdoubt\nmisdower\nmisdraw\nmisdread\nmisdrive\nmise\nmisease\nmisecclesiastic\nmisedit\nmiseducate\nmiseducation\nmiseducative\nmiseffect\nmisemphasis\nmisemphasize\nmisemploy\nmisemployment\nmisencourage\nmisendeavor\nmisenforce\nmisengrave\nmisenite\nmisenjoy\nmisenroll\nmisentitle\nmisenunciation\nMisenus\nmiser\nmiserabilism\nmiserabilist\nmiserabilistic\nmiserability\nmiserable\nmiserableness\nmiserably\nmiserdom\nmiserected\nMiserere\nmiserhood\nmisericord\nMisericordia\nmiserism\nmiserliness\nmiserly\nmisery\nmisesteem\nmisestimate\nmisestimation\nmisexample\nmisexecute\nmisexecution\nmisexpectation\nmisexpend\nmisexpenditure\nmisexplain\nmisexplanation\nmisexplication\nmisexposition\nmisexpound\nmisexpress\nmisexpression\nmisexpressive\nmisfaith\nmisfare\nmisfashion\nmisfather\nmisfault\nmisfeasance\nmisfeasor\nmisfeature\nmisfield\nmisfigure\nmisfile\nmisfire\nmisfit\nmisfond\nmisform\nmisformation\nmisfortunate\nmisfortunately\nmisfortune\nmisfortuned\nmisfortuner\nmisframe\nmisgauge\nmisgesture\nmisgive\nmisgiving\nmisgivingly\nmisgo\nmisgotten\nmisgovern\nmisgovernance\nmisgovernment\nmisgovernor\nmisgracious\nmisgraft\nmisgrave\nmisground\nmisgrow\nmisgrown\nmisgrowth\nmisguess\nmisguggle\nmisguidance\nmisguide\nmisguided\nmisguidedly\nmisguidedness\nmisguider\nmisguiding\nmisguidingly\nmishandle\nmishap\nmishappen\nMishikhwutmetunne\nmishmash\nmishmee\nMishmi\nMishnah\nMishnaic\nMishnic\nMishnical\nMishongnovi\nmisidentification\nmisidentify\nMisima\nmisimagination\nmisimagine\nmisimpression\nmisimprove\nmisimprovement\nmisimputation\nmisimpute\nmisincensed\nmisincite\nmisinclination\nmisincline\nmisinfer\nmisinference\nmisinflame\nmisinform\nmisinformant\nmisinformation\nmisinformer\nmisingenuity\nmisinspired\nmisinstruct\nmisinstruction\nmisinstructive\nmisintelligence\nmisintelligible\nmisintend\nmisintention\nmisinter\nmisinterment\nmisinterpret\nmisinterpretable\nmisinterpretation\nmisinterpreter\nmisintimation\nmisjoin\nmisjoinder\nmisjudge\nmisjudgement\nmisjudger\nmisjudgingly\nmisjudgment\nmiskeep\nmisken\nmiskenning\nmiskill\nmiskindle\nmisknow\nmisknowledge\nmisky\nmislabel\nmislabor\nmislanguage\nmislay\nmislayer\nmislead\nmisleadable\nmisleader\nmisleading\nmisleadingly\nmisleadingness\nmislear\nmisleared\nmislearn\nmisled\nmislest\nmislight\nmislike\nmisliken\nmislikeness\nmisliker\nmislikingly\nmislippen\nmislive\nmislocate\nmislocation\nmislodge\nmismade\nmismake\nmismanage\nmismanageable\nmismanagement\nmismanager\nmismarriage\nmismarry\nmismatch\nmismatchment\nmismate\nmismeasure\nmismeasurement\nmismenstruation\nmisminded\nmismingle\nmismotion\nmismove\nmisname\nmisnarrate\nmisnatured\nmisnavigation\nMisniac\nmisnomed\nmisnomer\nmisnumber\nmisnurture\nmisnutrition\nmisobedience\nmisobey\nmisobservance\nmisobserve\nmisocapnic\nmisocapnist\nmisocatholic\nmisoccupy\nmisogallic\nmisogamic\nmisogamist\nmisogamy\nmisogyne\nmisogynic\nmisogynical\nmisogynism\nmisogynist\nmisogynistic\nmisogynistical\nmisogynous\nmisogyny\nmisohellene\nmisologist\nmisology\nmisomath\nmisoneism\nmisoneist\nmisoneistic\nmisopaterist\nmisopedia\nmisopedism\nmisopedist\nmisopinion\nmisopolemical\nmisorder\nmisordination\nmisorganization\nmisorganize\nmisoscopist\nmisosophist\nmisosophy\nmisotheism\nmisotheist\nmisotheistic\nmisotramontanism\nmisotyranny\nmisoxene\nmisoxeny\nmispage\nmispagination\nmispaint\nmisparse\nmispart\nmispassion\nmispatch\nmispay\nmisperceive\nmisperception\nmisperform\nmisperformance\nmispersuade\nmisperuse\nmisphrase\nmispick\nmispickel\nmisplace\nmisplacement\nmisplant\nmisplay\nmisplead\nmispleading\nmisplease\nmispoint\nmispoise\nmispolicy\nmisposition\nmispossessed\nmispractice\nmispraise\nmisprejudiced\nmisprincipled\nmisprint\nmisprisal\nmisprision\nmisprize\nmisprizer\nmisproceeding\nmisproduce\nmisprofess\nmisprofessor\nmispronounce\nmispronouncement\nmispronunciation\nmisproportion\nmisproposal\nmispropose\nmisproud\nmisprovide\nmisprovidence\nmisprovoke\nmispunctuate\nmispunctuation\nmispurchase\nmispursuit\nmisput\nmisqualify\nmisquality\nmisquotation\nmisquote\nmisquoter\nmisraise\nmisrate\nmisread\nmisreader\nmisrealize\nmisreason\nmisreceive\nmisrecital\nmisrecite\nmisreckon\nmisrecognition\nmisrecognize\nmisrecollect\nmisrefer\nmisreference\nmisreflect\nmisreform\nmisregulate\nmisrehearsal\nmisrehearse\nmisrelate\nmisrelation\nmisreliance\nmisremember\nmisremembrance\nmisrender\nmisrepeat\nmisreport\nmisreporter\nmisreposed\nmisrepresent\nmisrepresentation\nmisrepresentative\nmisrepresenter\nmisreprint\nmisrepute\nmisresemblance\nmisresolved\nmisresult\nmisreward\nmisrhyme\nmisrhymer\nmisrule\nmiss\nmissable\nmissal\nmissay\nmissayer\nmisseem\nmissel\nmissemblance\nmissentence\nmisserve\nmisservice\nmisset\nmisshape\nmisshapen\nmisshapenly\nmisshapenness\nmisshood\nmissible\nmissile\nmissileproof\nmissiness\nmissing\nmissingly\nmission\nmissional\nmissionarize\nmissionary\nmissionaryship\nmissioner\nmissionize\nmissionizer\nmissis\nMissisauga\nmissish\nmissishness\nMississippi\nMississippian\nmissive\nmissmark\nmissment\nMissouri\nMissourian\nMissourianism\nmissourite\nmisspeak\nmisspeech\nmisspell\nmisspelling\nmisspend\nmisspender\nmisstate\nmisstatement\nmisstater\nmisstay\nmisstep\nmissuade\nmissuggestion\nmissummation\nmissuppose\nmissy\nmissyish\nmissyllabication\nmissyllabify\nmist\nmistakable\nmistakableness\nmistakably\nmistake\nmistakeful\nmistaken\nmistakenly\nmistakenness\nmistakeproof\nmistaker\nmistaking\nmistakingly\nmistassini\nmistaught\nmistbow\nmisteach\nmisteacher\nmisted\nmistell\nmistempered\nmistend\nmistendency\nMister\nmister\nmisterm\nmistetch\nmistfall\nmistflower\nmistful\nmisthink\nmisthought\nmisthread\nmisthrift\nmisthrive\nmisthrow\nmistic\nmistide\nmistify\nmistigris\nmistily\nmistime\nmistiness\nmistitle\nmistle\nmistless\nmistletoe\nmistone\nmistonusk\nmistook\nmistouch\nmistradition\nmistrain\nmistral\nmistranscribe\nmistranscript\nmistranscription\nmistranslate\nmistranslation\nmistreat\nmistreatment\nmistress\nmistressdom\nmistresshood\nmistressless\nmistressly\nmistrial\nmistrist\nmistrust\nmistruster\nmistrustful\nmistrustfully\nmistrustfulness\nmistrusting\nmistrustingly\nmistrustless\nmistry\nmistryst\nmisturn\nmistutor\nmisty\nmistyish\nmisunderstand\nmisunderstandable\nmisunderstander\nmisunderstanding\nmisunderstandingly\nmisunderstood\nmisunderstoodness\nmisura\nmisusage\nmisuse\nmisuseful\nmisusement\nmisuser\nmisusurped\nmisvaluation\nmisvalue\nmisventure\nmisventurous\nmisvouch\nmiswed\nmiswisdom\nmiswish\nmisword\nmisworship\nmisworshiper\nmisworshipper\nmiswrite\nmisyoke\nmiszealous\nMitakshara\nMitanni\nMitannian\nMitannish\nmitapsis\nMitch\nmitchboard\nMitchell\nMitchella\nmite\nMitella\nmiteproof\nmiter\nmitered\nmiterer\nmiterflower\nmiterwort\nMithra\nMithraea\nMithraeum\nMithraic\nMithraicism\nMithraicist\nMithraicize\nMithraism\nMithraist\nMithraistic\nMithraitic\nMithraize\nMithras\nMithratic\nMithriac\nmithridate\nMithridatic\nmithridatic\nmithridatism\nmithridatize\nmiticidal\nmiticide\nmitigable\nmitigant\nmitigate\nmitigatedly\nmitigation\nmitigative\nmitigator\nmitigatory\nmitis\nmitochondria\nmitochondrial\nmitogenetic\nmitome\nmitosis\nmitosome\nmitotic\nmitotically\nMitra\nmitra\nmitrailleuse\nmitral\nmitrate\nmitre\nmitrer\nMitridae\nmitriform\nMitsukurina\nMitsukurinidae\nmitsumata\nmitt\nmittelhand\nMittelmeer\nmitten\nmittened\nmittimus\nmitty\nMitu\nMitua\nmity\nmiurus\nmix\nmixable\nmixableness\nmixblood\nMixe\nmixed\nmixedly\nmixedness\nmixen\nmixer\nmixeress\nmixhill\nmixible\nmixite\nmixobarbaric\nmixochromosome\nMixodectes\nMixodectidae\nmixolydian\nmixoploid\nmixoploidy\nMixosaurus\nmixotrophic\nMixtec\nMixtecan\nmixtiform\nmixtilineal\nmixtilion\nmixtion\nmixture\nmixy\nMizar\nmizmaze\nMizpah\nMizraim\nmizzen\nmizzenmast\nmizzenmastman\nmizzentopman\nmizzle\nmizzler\nmizzly\nmizzonite\nmizzy\nmlechchha\nmneme\nmnemic\nMnemiopsis\nmnemonic\nmnemonical\nmnemonicalist\nmnemonically\nmnemonicon\nmnemonics\nmnemonism\nmnemonist\nmnemonization\nmnemonize\nMnemosyne\nmnemotechnic\nmnemotechnical\nmnemotechnics\nmnemotechnist\nmnemotechny\nmnesic\nmnestic\nMnevis\nMniaceae\nmniaceous\nmnioid\nMniotiltidae\nMnium\nMo\nmo\nMoabite\nMoabitess\nMoabitic\nMoabitish\nmoan\nmoanful\nmoanfully\nmoanification\nmoaning\nmoaningly\nmoanless\nMoaria\nMoarian\nmoat\nMoattalite\nmob\nmobable\nmobbable\nmobber\nmobbish\nmobbishly\nmobbishness\nmobbism\nmobbist\nmobby\nmobcap\nmobed\nmobile\nMobilian\nmobilianer\nmobiliary\nmobility\nmobilizable\nmobilization\nmobilize\nmobilometer\nmoble\nmoblike\nmobocracy\nmobocrat\nmobocratic\nmobocratical\nmobolatry\nmobproof\nmobship\nmobsman\nmobster\nMobula\nMobulidae\nmoccasin\nMocha\nmocha\nMochica\nmochras\nmock\nmockable\nmockado\nmockbird\nmocker\nmockernut\nmockery\nmockful\nmockfully\nmockground\nmockingbird\nmockingstock\nmocmain\nMocoa\nMocoan\nmocomoco\nmocuck\nMod\nmodal\nmodalism\nmodalist\nmodalistic\nmodality\nmodalize\nmodally\nmode\nmodel\nmodeler\nmodeless\nmodelessness\nmodeling\nmodelist\nmodeller\nmodelmaker\nmodelmaking\nmodena\nModenese\nmoderant\nmoderantism\nmoderantist\nmoderate\nmoderately\nmoderateness\nmoderation\nmoderationist\nmoderatism\nmoderatist\nmoderato\nmoderator\nmoderatorship\nmoderatrix\nModern\nmodern\nmoderner\nmodernicide\nmodernish\nmodernism\nmodernist\nmodernistic\nmodernity\nmodernizable\nmodernization\nmodernize\nmodernizer\nmodernly\nmodernness\nmodest\nmodestly\nmodestness\nmodesty\nmodiation\nmodicity\nmodicum\nmodifiability\nmodifiable\nmodifiableness\nmodifiably\nmodificability\nmodificable\nmodification\nmodificationist\nmodificative\nmodificator\nmodificatory\nmodifier\nmodify\nmodillion\nmodiolar\nModiolus\nmodiolus\nmodish\nmodishly\nmodishness\nmodist\nmodiste\nmodistry\nmodius\nModoc\nModred\nmodulability\nmodulant\nmodular\nmodulate\nmodulation\nmodulative\nmodulator\nmodulatory\nmodule\nModulidae\nmodulo\nmodulus\nmodumite\nMoe\nMoed\nMoehringia\nmoellon\nmoerithere\nmoeritherian\nMoeritheriidae\nMoeritherium\nmofette\nmoff\nmofussil\nmofussilite\nmog\nmogador\nmogadore\nmogdad\nmoggan\nmoggy\nMoghan\nmogigraphia\nmogigraphic\nmogigraphy\nmogilalia\nmogilalism\nmogiphonia\nmogitocia\nmogo\nmogographia\nMogollon\nMograbi\nMogrebbin\nmoguey\nMogul\nmogulship\nMoguntine\nmoha\nmohabat\nmohair\nMohammad\nMohammedan\nMohammedanism\nMohammedanization\nMohammedanize\nMohammedism\nMohammedist\nMohammedization\nMohammedize\nmohar\nMohave\nMohawk\nMohawkian\nmohawkite\nMohegan\nmohel\nMohican\nMohineyam\nmohnseed\nmoho\nMohock\nMohockism\nmohr\nMohrodendron\nmohur\nMoi\nmoider\nmoidore\nmoieter\nmoiety\nmoil\nmoiler\nmoiles\nmoiley\nmoiling\nmoilingly\nmoilsome\nmoineau\nMoingwena\nmoio\nMoira\nmoire\nmoirette\nmoise\nMoism\nmoissanite\nmoist\nmoisten\nmoistener\nmoistful\nmoistify\nmoistish\nmoistishness\nmoistless\nmoistly\nmoistness\nmoisture\nmoistureless\nmoistureproof\nmoisty\nmoit\nmoity\nmojarra\nMojo\nmojo\nmokaddam\nmoke\nmoki\nmokihana\nmoko\nmoksha\nmokum\nmoky\nMola\nmola\nmolal\nMolala\nmolality\nmolar\nmolariform\nmolarimeter\nmolarity\nmolary\nMolasse\nmolasses\nmolassied\nmolassy\nmolave\nmold\nmoldability\nmoldable\nmoldableness\nMoldavian\nmoldavite\nmoldboard\nmolder\nmoldery\nmoldiness\nmolding\nmoldmade\nmoldproof\nmoldwarp\nmoldy\nMole\nmole\nmolecast\nmolecula\nmolecular\nmolecularist\nmolecularity\nmolecularly\nmolecule\nmolehead\nmoleheap\nmolehill\nmolehillish\nmolehilly\nmoleism\nmolelike\nmolendinar\nmolendinary\nmolengraaffite\nmoleproof\nmoler\nmoleskin\nmolest\nmolestation\nmolester\nmolestful\nmolestfully\nMolge\nMolgula\nMolidae\nmolimen\nmoliminous\nmolinary\nmoline\nMolinia\nMolinism\nMolinist\nMolinistic\nmolka\nMoll\nmolland\nMollberg\nmolle\nmollescence\nmollescent\nmolleton\nmollichop\nmollicrush\nmollie\nmollienisia\nmollient\nmolliently\nmollifiable\nmollification\nmollifiedly\nmollifier\nmollify\nmollifying\nmollifyingly\nmollifyingness\nmolligrant\nmolligrubs\nmollipilose\nMollisiaceae\nmollisiose\nmollities\nmollitious\nmollitude\nMolluginaceae\nMollugo\nMollusca\nmolluscan\nmolluscivorous\nmolluscoid\nMolluscoida\nmolluscoidal\nmolluscoidan\nMolluscoidea\nmolluscoidean\nmolluscous\nmolluscousness\nmolluscum\nmollusk\nMolly\nmolly\nmollycoddle\nmollycoddler\nmollycoddling\nmollycosset\nmollycot\nmollyhawk\nmolman\nMoloch\nMolochize\nMolochship\nmoloid\nmoloker\nmolompi\nmolosse\nMolossian\nmolossic\nMolossidae\nmolossine\nmolossoid\nmolossus\nMolothrus\nmolpe\nmolrooken\nmolt\nmolten\nmoltenly\nmolter\nMolucca\nMoluccan\nMoluccella\nMoluche\nmoly\nmolybdate\nmolybdena\nmolybdenic\nmolybdeniferous\nmolybdenite\nmolybdenous\nmolybdenum\nmolybdic\nmolybdite\nmolybdocardialgia\nmolybdocolic\nmolybdodyspepsia\nmolybdomancy\nmolybdomenite\nmolybdonosus\nmolybdoparesis\nmolybdophyllite\nmolybdosis\nmolybdous\nmolysite\nmombin\nmomble\nMombottu\nmome\nmoment\nmomenta\nmomental\nmomentally\nmomentaneall\nmomentaneity\nmomentaneous\nmomentaneously\nmomentaneousness\nmomentarily\nmomentariness\nmomentary\nmomently\nmomentous\nmomentously\nmomentousness\nmomentum\nmomiology\nmomism\nmomme\nmommet\nmommy\nmomo\nMomordica\nMomotidae\nMomotinae\nMomotus\nMomus\nMon\nmon\nmona\nMonacan\nmonacanthid\nMonacanthidae\nmonacanthine\nmonacanthous\nMonacha\nmonachal\nmonachate\nMonachi\nmonachism\nmonachist\nmonachization\nmonachize\nmonactin\nmonactine\nmonactinellid\nmonactinellidan\nmonad\nmonadelph\nMonadelphia\nmonadelphian\nmonadelphous\nmonadic\nmonadical\nmonadically\nmonadiform\nmonadigerous\nMonadina\nmonadism\nmonadistic\nmonadnock\nmonadology\nmonaene\nmonal\nmonamniotic\nMonanday\nmonander\nMonandria\nmonandrian\nmonandric\nmonandrous\nmonandry\nmonanthous\nmonapsal\nmonarch\nmonarchal\nmonarchally\nmonarchess\nmonarchial\nmonarchian\nmonarchianism\nmonarchianist\nmonarchianistic\nmonarchic\nmonarchical\nmonarchically\nmonarchism\nmonarchist\nmonarchistic\nmonarchize\nmonarchizer\nmonarchlike\nmonarchomachic\nmonarchomachist\nmonarchy\nMonarda\nMonardella\nmonarthritis\nmonarticular\nmonas\nMonasa\nMonascidiae\nmonascidian\nmonase\nmonaster\nmonasterial\nmonasterially\nmonastery\nmonastic\nmonastical\nmonastically\nmonasticism\nmonasticize\nmonatomic\nmonatomicity\nmonatomism\nmonaulos\nmonaural\nmonaxial\nmonaxile\nmonaxon\nmonaxonial\nmonaxonic\nMonaxonida\nmonazine\nmonazite\nMonbuttu\nmonchiquite\nMonday\nMondayish\nMondayishness\nMondayland\nmone\nMonegasque\nMonel\nmonel\nmonembryary\nmonembryonic\nmonembryony\nmonepic\nmonepiscopacy\nmonepiscopal\nmoner\nMonera\nmoneral\nmoneran\nmonergic\nmonergism\nmonergist\nmonergistic\nmoneric\nmoneron\nMonerozoa\nmonerozoan\nmonerozoic\nmonerula\nMoneses\nmonesia\nmonetarily\nmonetary\nmonetite\nmonetization\nmonetize\nmoney\nmoneyage\nmoneybag\nmoneybags\nmoneyed\nmoneyer\nmoneyflower\nmoneygrub\nmoneygrubber\nmoneygrubbing\nmoneylender\nmoneylending\nmoneyless\nmoneymonger\nmoneymongering\nmoneysaving\nmoneywise\nmoneywort\nmong\nmongcorn\nmonger\nmongering\nmongery\nMonghol\nMongholian\nMongibel\nmongler\nMongo\nMongol\nMongolian\nMongolianism\nMongolic\nMongolioid\nMongolish\nMongolism\nMongolization\nMongolize\nMongoloid\nmongoose\nMongoyo\nmongrel\nmongreldom\nmongrelish\nmongrelism\nmongrelity\nmongrelization\nmongrelize\nmongrelly\nmongrelness\nmongst\nmonheimite\nmonial\nMonias\nMonica\nmoniker\nmonilated\nmonilethrix\nMonilia\nMoniliaceae\nmoniliaceous\nMoniliales\nmonilicorn\nmoniliform\nmoniliformly\nmonilioid\nmoniment\nMonimia\nMonimiaceae\nmonimiaceous\nmonimolite\nmonimostylic\nmonism\nmonist\nmonistic\nmonistical\nmonistically\nmonition\nmonitive\nmonitor\nmonitorial\nmonitorially\nmonitorish\nmonitorship\nmonitory\nmonitress\nmonitrix\nmonk\nmonkbird\nmonkcraft\nmonkdom\nmonkery\nmonkess\nmonkey\nmonkeyboard\nmonkeyface\nmonkeyfy\nmonkeyhood\nmonkeyish\nmonkeyishly\nmonkeyishness\nmonkeylike\nmonkeynut\nmonkeypod\nmonkeypot\nmonkeyry\nmonkeyshine\nmonkeytail\nmonkfish\nmonkflower\nmonkhood\nmonkish\nmonkishly\nmonkishness\nmonkism\nmonklike\nmonkliness\nmonkly\nmonkmonger\nmonkship\nmonkshood\nMonmouth\nmonmouthite\nmonny\nMono\nmono\nmonoacetate\nmonoacetin\nmonoacid\nmonoacidic\nmonoamide\nmonoamine\nmonoamino\nmonoammonium\nmonoazo\nmonobacillary\nmonobase\nmonobasic\nmonobasicity\nmonoblastic\nmonoblepsia\nmonoblepsis\nmonobloc\nmonobranchiate\nmonobromacetone\nmonobromated\nmonobromide\nmonobrominated\nmonobromination\nmonobromized\nmonobromoacetanilide\nmonobromoacetone\nmonobutyrin\nmonocalcium\nmonocarbide\nmonocarbonate\nmonocarbonic\nmonocarboxylic\nmonocardian\nmonocarp\nmonocarpal\nmonocarpellary\nmonocarpian\nmonocarpic\nmonocarpous\nmonocellular\nmonocentric\nmonocentrid\nMonocentridae\nMonocentris\nmonocentroid\nmonocephalous\nmonocercous\nmonoceros\nmonocerous\nmonochasial\nmonochasium\nMonochlamydeae\nmonochlamydeous\nmonochlor\nmonochloracetic\nmonochloranthracene\nmonochlorbenzene\nmonochloride\nmonochlorinated\nmonochlorination\nmonochloro\nmonochloroacetic\nmonochlorobenzene\nmonochloromethane\nmonochoanitic\nmonochord\nmonochordist\nmonochordize\nmonochroic\nmonochromasy\nmonochromat\nmonochromate\nmonochromatic\nmonochromatically\nmonochromatism\nmonochromator\nmonochrome\nmonochromic\nmonochromical\nmonochromically\nmonochromist\nmonochromous\nmonochromy\nmonochronic\nmonochronous\nmonociliated\nmonocle\nmonocled\nmonocleid\nmonoclinal\nmonoclinally\nmonocline\nmonoclinian\nmonoclinic\nmonoclinism\nmonoclinometric\nmonoclinous\nMonoclonius\nMonocoelia\nmonocoelian\nmonocoelic\nMonocondyla\nmonocondylar\nmonocondylian\nmonocondylic\nmonocondylous\nmonocormic\nmonocot\nmonocotyledon\nMonocotyledones\nmonocotyledonous\nmonocracy\nmonocrat\nmonocratic\nmonocrotic\nmonocrotism\nmonocular\nmonocularity\nmonocularly\nmonoculate\nmonocule\nmonoculist\nmonoculous\nmonocultural\nmonoculture\nmonoculus\nmonocyanogen\nmonocycle\nmonocyclic\nMonocyclica\nmonocystic\nMonocystidae\nMonocystidea\nMonocystis\nmonocyte\nmonocytic\nmonocytopoiesis\nmonodactyl\nmonodactylate\nmonodactyle\nmonodactylism\nmonodactylous\nmonodactyly\nmonodelph\nMonodelphia\nmonodelphian\nmonodelphic\nmonodelphous\nmonodermic\nmonodic\nmonodically\nmonodimetric\nmonodist\nmonodize\nmonodomous\nMonodon\nmonodont\nMonodonta\nmonodontal\nmonodram\nmonodrama\nmonodramatic\nmonodramatist\nmonodromic\nmonodromy\nmonody\nmonodynamic\nmonodynamism\nMonoecia\nmonoecian\nmonoecious\nmonoeciously\nmonoeciousness\nmonoecism\nmonoeidic\nmonoestrous\nmonoethanolamine\nmonoethylamine\nmonofilament\nmonofilm\nmonoflagellate\nmonoformin\nmonogamian\nmonogamic\nmonogamist\nmonogamistic\nmonogamous\nmonogamously\nmonogamousness\nmonogamy\nmonoganglionic\nmonogastric\nmonogene\nMonogenea\nmonogeneity\nmonogeneous\nmonogenesis\nmonogenesist\nmonogenesy\nmonogenetic\nMonogenetica\nmonogenic\nmonogenism\nmonogenist\nmonogenistic\nmonogenous\nmonogeny\nmonoglot\nmonoglycerid\nmonoglyceride\nmonogoneutic\nmonogonoporic\nmonogonoporous\nmonogony\nmonogram\nmonogrammatic\nmonogrammatical\nmonogrammed\nmonogrammic\nmonograph\nmonographer\nmonographic\nmonographical\nmonographically\nmonographist\nmonography\nmonograptid\nMonograptidae\nMonograptus\nmonogynic\nmonogynious\nmonogynist\nmonogynoecial\nmonogynous\nmonogyny\nmonohybrid\nmonohydrate\nmonohydrated\nmonohydric\nmonohydrogen\nmonohydroxy\nmonoicous\nmonoid\nmonoketone\nmonolater\nmonolatrist\nmonolatrous\nmonolatry\nmonolayer\nmonoline\nmonolingual\nmonolinguist\nmonoliteral\nmonolith\nmonolithal\nmonolithic\nmonolobular\nmonolocular\nmonologian\nmonologic\nmonological\nmonologist\nmonologize\nmonologue\nmonologuist\nmonology\nmonomachist\nmonomachy\nmonomania\nmonomaniac\nmonomaniacal\nmonomastigate\nmonomeniscous\nmonomer\nmonomeric\nmonomerous\nmonometallic\nmonometallism\nmonometallist\nmonometer\nmonomethyl\nmonomethylated\nmonomethylic\nmonometric\nmonometrical\nmonomial\nmonomict\nmonomineral\nmonomineralic\nmonomolecular\nmonomolybdate\nMonomorium\nmonomorphic\nmonomorphism\nmonomorphous\nMonomya\nMonomyaria\nmonomyarian\nmononaphthalene\nmononch\nMononchus\nmononeural\nMonongahela\nmononitrate\nmononitrated\nmononitration\nmononitride\nmononitrobenzene\nmononomial\nmononomian\nmonont\nmononuclear\nmononucleated\nmononucleosis\nmononychous\nmononym\nmononymic\nmononymization\nmononymize\nmononymy\nmonoousian\nmonoousious\nmonoparental\nmonoparesis\nmonoparesthesia\nmonopathic\nmonopathy\nmonopectinate\nmonopersonal\nmonopersulfuric\nmonopersulphuric\nMonopetalae\nmonopetalous\nmonophagism\nmonophagous\nmonophagy\nmonophase\nmonophasia\nmonophasic\nmonophobia\nmonophone\nmonophonic\nmonophonous\nmonophony\nmonophotal\nmonophote\nmonophthalmic\nmonophthalmus\nmonophthong\nmonophthongal\nmonophthongization\nmonophthongize\nmonophyletic\nmonophyleticism\nmonophylite\nmonophyllous\nmonophyodont\nmonophyodontism\nMonophysite\nMonophysitic\nMonophysitical\nMonophysitism\nmonopitch\nmonoplacula\nmonoplacular\nmonoplaculate\nmonoplane\nmonoplanist\nmonoplasmatic\nmonoplast\nmonoplastic\nmonoplegia\nmonoplegic\nMonopneumoa\nmonopneumonian\nmonopneumonous\nmonopode\nmonopodial\nmonopodially\nmonopodic\nmonopodium\nmonopodous\nmonopody\nmonopolar\nmonopolaric\nmonopolarity\nmonopole\nmonopolism\nmonopolist\nmonopolistic\nmonopolistically\nmonopolitical\nmonopolizable\nmonopolization\nmonopolize\nmonopolizer\nmonopolous\nmonopoly\nmonopolylogist\nmonopolylogue\nmonopotassium\nmonoprionid\nmonoprionidian\nmonopsonistic\nmonopsony\nmonopsychism\nmonopteral\nMonopteridae\nmonopteroid\nmonopteron\nmonopteros\nmonopterous\nmonoptic\nmonoptical\nmonoptote\nmonoptotic\nMonopylaea\nMonopylaria\nmonopylean\nmonopyrenous\nmonorail\nmonorailroad\nmonorailway\nmonorchid\nmonorchidism\nmonorchis\nmonorchism\nmonorganic\nMonorhina\nmonorhinal\nmonorhine\nmonorhyme\nmonorhymed\nmonorhythmic\nmonosaccharide\nmonosaccharose\nmonoschemic\nmonoscope\nmonose\nmonosemic\nmonosepalous\nmonoservice\nmonosilane\nmonosilicate\nmonosilicic\nmonosiphonic\nmonosiphonous\nmonosodium\nmonosomatic\nmonosomatous\nmonosome\nmonosomic\nmonosperm\nmonospermal\nmonospermic\nmonospermous\nmonospermy\nmonospherical\nmonospondylic\nmonosporangium\nmonospore\nmonospored\nmonosporiferous\nmonosporous\nmonostele\nmonostelic\nmonostelous\nmonostely\nmonostich\nmonostichous\nMonostomata\nMonostomatidae\nmonostomatous\nmonostome\nMonostomidae\nmonostomous\nMonostomum\nmonostromatic\nmonostrophe\nmonostrophic\nmonostrophics\nmonostylous\nmonosubstituted\nmonosubstitution\nmonosulfone\nmonosulfonic\nmonosulphide\nmonosulphone\nmonosulphonic\nmonosyllabic\nmonosyllabical\nmonosyllabically\nmonosyllabism\nmonosyllabize\nmonosyllable\nmonosymmetric\nmonosymmetrical\nmonosymmetrically\nmonosymmetry\nmonosynthetic\nmonotelephone\nmonotelephonic\nmonotellurite\nMonothalama\nmonothalamian\nmonothalamous\nmonothecal\nmonotheism\nmonotheist\nmonotheistic\nmonotheistical\nmonotheistically\nMonothelete\nMonotheletian\nMonotheletic\nMonotheletism\nmonothelious\nMonothelism\nMonothelitic\nMonothelitism\nmonothetic\nmonotic\nmonotint\nMonotocardia\nmonotocardiac\nmonotocardian\nmonotocous\nmonotomous\nmonotone\nmonotonic\nmonotonical\nmonotonically\nmonotonist\nmonotonize\nmonotonous\nmonotonously\nmonotonousness\nmonotony\nmonotremal\nMonotremata\nmonotremate\nmonotrematous\nmonotreme\nmonotremous\nmonotrichous\nmonotriglyph\nmonotriglyphic\nMonotrocha\nmonotrochal\nmonotrochian\nmonotrochous\nMonotropa\nMonotropaceae\nmonotropaceous\nmonotrophic\nmonotropic\nMonotropsis\nmonotropy\nmonotypal\nmonotype\nmonotypic\nmonotypical\nmonotypous\nmonoureide\nmonovalence\nmonovalency\nmonovalent\nmonovariant\nmonoverticillate\nmonovoltine\nmonovular\nmonoxenous\nmonoxide\nmonoxime\nmonoxyle\nmonoxylic\nmonoxylon\nmonoxylous\nMonozoa\nmonozoan\nmonozoic\nmonozygotic\nMonroeism\nMonroeist\nmonrolite\nmonseigneur\nmonsieur\nmonsieurship\nmonsignor\nmonsignorial\nMonsoni\nmonsoon\nmonsoonal\nmonsoonish\nmonsoonishly\nmonster\nMonstera\nmonsterhood\nmonsterlike\nmonstership\nmonstrance\nmonstrate\nmonstration\nmonstrator\nmonstricide\nmonstriferous\nmonstrification\nmonstrify\nmonstrosity\nmonstrous\nmonstrously\nmonstrousness\nMont\nmontage\nMontagnac\nMontagnais\nMontana\nmontana\nMontanan\nmontane\nmontanic\nmontanin\nMontanism\nMontanist\nMontanistic\nMontanistical\nmontanite\nMontanize\nmontant\nMontargis\nMontauk\nmontbretia\nmonte\nmontebrasite\nmonteith\nmontem\nMontenegrin\nMontepulciano\nMonterey\nMontes\nMontesco\nMontesinos\nMontessorian\nMontessorianism\nMontezuma\nmontgolfier\nmonth\nmonthly\nmonthon\nMontia\nmonticellite\nmonticle\nmonticoline\nmonticulate\nmonticule\nMonticulipora\nMonticuliporidae\nmonticuliporidean\nmonticuliporoid\nmonticulose\nmonticulous\nmonticulus\nmontiform\nmontigeneous\nmontilla\nmontjoy\nmontmartrite\nMontmorency\nmontmorilonite\nmonton\nMontrachet\nmontroydite\nMontu\nmonture\nMonty\nMonumbo\nmonument\nmonumental\nmonumentalism\nmonumentality\nmonumentalization\nmonumentalize\nmonumentally\nmonumentary\nmonumentless\nmonumentlike\nmonzodiorite\nmonzogabbro\nmonzonite\nmonzonitic\nmoo\nMooachaht\nmooch\nmoocha\nmoocher\nmoochulka\nmood\nmooder\nmoodily\nmoodiness\nmoodish\nmoodishly\nmoodishness\nmoodle\nmoody\nmooing\nmool\nmoolet\nmoolings\nmools\nmoolum\nmoon\nmoonack\nmoonbeam\nmoonbill\nmoonblink\nmooncalf\nmooncreeper\nmoondown\nmoondrop\nmooned\nmooner\nmoonery\nmooneye\nmoonface\nmoonfaced\nmoonfall\nmoonfish\nmoonflower\nmoonglade\nmoonglow\nmoonhead\nmoonily\nmooniness\nmooning\nmoonish\nmoonite\nmoonja\nmoonjah\nmoonless\nmoonlet\nmoonlight\nmoonlighted\nmoonlighter\nmoonlighting\nmoonlighty\nmoonlike\nmoonlikeness\nmoonlit\nmoonlitten\nmoonman\nmoonpath\nmoonpenny\nmoonproof\nmoonraker\nmoonraking\nmoonrise\nmoonsail\nmoonscape\nmoonseed\nmoonset\nmoonshade\nmoonshine\nmoonshiner\nmoonshining\nmoonshiny\nmoonsick\nmoonsickness\nmoonstone\nmoontide\nmoonwalker\nmoonwalking\nmoonward\nmoonwards\nmoonway\nmoonwort\nmoony\nmoop\nMoor\nmoor\nmoorage\nmoorball\nmoorband\nmoorberry\nmoorbird\nmoorburn\nmoorburner\nmoorburning\nMoore\nmoorflower\nmoorfowl\nmooring\nMoorish\nmoorish\nmoorishly\nmoorishness\nmoorland\nmoorlander\nMoorman\nmoorman\nmoorn\nmoorpan\nmoors\nMoorship\nmoorsman\nmoorstone\nmoortetter\nmoorup\nmoorwort\nmoory\nmoosa\nmoose\nmooseberry\nmoosebird\nmoosebush\nmoosecall\nmooseflower\nmoosehood\nmoosemise\nmoosetongue\nmoosewob\nmoosewood\nmoosey\nmoost\nmoot\nmootable\nmooter\nmooth\nmooting\nmootman\nmootstead\nmootworthy\nmop\nMopan\nmopane\nmopboard\nmope\nmoper\nmoph\nmophead\nmopheaded\nmoping\nmopingly\nmopish\nmopishly\nmopishness\nmopla\nmopper\nmoppet\nmoppy\nmopstick\nmopsy\nmopus\nMoquelumnan\nmoquette\nMoqui\nmor\nmora\nMoraceae\nmoraceous\nMoraea\nmorainal\nmoraine\nmorainic\nmoral\nmorale\nmoralism\nmoralist\nmoralistic\nmoralistically\nmorality\nmoralization\nmoralize\nmoralizer\nmoralizingly\nmoralless\nmorally\nmoralness\nmorals\nMoran\nmorass\nmorassic\nmorassweed\nmorassy\nmorat\nmorate\nmoration\nmoratoria\nmoratorium\nmoratory\nMoravian\nMoravianism\nMoravianized\nMoravid\nmoravite\nmoray\nmorbid\nmorbidity\nmorbidize\nmorbidly\nmorbidness\nmorbiferal\nmorbiferous\nmorbific\nmorbifical\nmorbifically\nmorbify\nmorbility\nmorbillary\nmorbilli\nmorbilliform\nmorbillous\nmorcellate\nmorcellated\nmorcellation\nMorchella\nMorcote\nmordacious\nmordaciously\nmordacity\nmordancy\nmordant\nmordantly\nMordella\nmordellid\nMordellidae\nmordelloid\nmordenite\nmordent\nmordicate\nmordication\nmordicative\nmordore\nMordv\nMordva\nMordvin\nMordvinian\nmore\nmoreen\nmorefold\nmoreish\nmorel\nmorella\nmorello\nmorencite\nmoreness\nmorenita\nmorenosite\nMoreote\nmoreover\nmorepork\nmores\nMoresque\nmorfrey\nmorg\nmorga\nMorgan\nmorgan\nMorgana\nmorganatic\nmorganatical\nmorganatically\nmorganic\nmorganite\nmorganize\nmorgay\nmorgen\nmorgengift\nmorgenstern\nmorglay\nmorgue\nmoribund\nmoribundity\nmoribundly\nmoric\nmoriche\nmoriform\nmorigerate\nmorigeration\nmorigerous\nmorigerously\nmorigerousness\nmorillon\nmorin\nMorinaceae\nMorinda\nmorindin\nmorindone\nmorinel\nMoringa\nMoringaceae\nmoringaceous\nmoringad\nMoringua\nmoringuid\nMoringuidae\nmoringuoid\nmorion\nMoriori\nMoriscan\nMorisco\nMorisonian\nMorisonianism\nmorkin\nmorlop\nmormaor\nmormaordom\nmormaorship\nmormo\nMormon\nmormon\nMormondom\nMormoness\nMormonism\nMormonist\nMormonite\nMormonweed\nMormoops\nmormyr\nmormyre\nmormyrian\nmormyrid\nMormyridae\nmormyroid\nMormyrus\nmorn\nmorne\nmorned\nmorning\nmorningless\nmorningly\nmornings\nmorningtide\nmorningward\nmornless\nmornlike\nmorntime\nmornward\nMoro\nmoro\nmoroc\nMoroccan\nMorocco\nmorocco\nmorocota\nmorological\nmorologically\nmorologist\nmorology\nmoromancy\nmoron\nmoroncy\nmorong\nmoronic\nMoronidae\nmoronism\nmoronity\nmoronry\nMoropus\nmorosaurian\nmorosauroid\nMorosaurus\nmorose\nmorosely\nmoroseness\nmorosis\nmorosity\nmoroxite\nmorph\nmorphallaxis\nmorphea\nMorphean\nmorpheme\nmorphemic\nmorphemics\nmorphetic\nMorpheus\nmorphew\nmorphia\nmorphiate\nmorphic\nmorphically\nmorphinate\nmorphine\nmorphinic\nmorphinism\nmorphinist\nmorphinization\nmorphinize\nmorphinomania\nmorphinomaniac\nmorphiomania\nmorphiomaniac\nMorpho\nmorphogenesis\nmorphogenetic\nmorphogenic\nmorphogeny\nmorphographer\nmorphographic\nmorphographical\nmorphographist\nmorphography\nmorpholine\nmorphologic\nmorphological\nmorphologically\nmorphologist\nmorphology\nmorphometrical\nmorphometry\nmorphon\nmorphonomic\nmorphonomy\nmorphophonemic\nmorphophonemically\nmorphophonemics\nmorphophyly\nmorphoplasm\nmorphoplasmic\nmorphosis\nmorphotic\nmorphotropic\nmorphotropism\nmorphotropy\nmorphous\nMorrenian\nMorrhua\nmorrhuate\nmorrhuine\nmorricer\nMorris\nmorris\nMorrisean\nmorrow\nmorrowing\nmorrowless\nmorrowmass\nmorrowspeech\nmorrowtide\nmorsal\nMorse\nmorse\nmorsel\nmorselization\nmorselize\nmorsing\nmorsure\nmort\nmortacious\nmortal\nmortalism\nmortalist\nmortality\nmortalize\nmortally\nmortalness\nmortalwise\nmortar\nmortarboard\nmortarize\nmortarless\nmortarlike\nmortarware\nmortary\nmortbell\nmortcloth\nmortersheen\nmortgage\nmortgageable\nmortgagee\nmortgagor\nmorth\nmorthwyrtha\nmortician\nmortier\nmortiferous\nmortiferously\nmortiferousness\nmortific\nmortification\nmortified\nmortifiedly\nmortifiedness\nmortifier\nmortify\nmortifying\nmortifyingly\nMortimer\nmortise\nmortiser\nmortling\nmortmain\nmortmainer\nMorton\nmortuarian\nmortuary\nmortuous\nmorula\nmorular\nmorulation\nmorule\nmoruloid\nMorus\nmorvin\nmorwong\nMosaic\nmosaic\nMosaical\nmosaical\nmosaically\nmosaicism\nmosaicist\nMosaicity\nMosaism\nMosaist\nmosaist\nmosandrite\nmosasaur\nMosasauri\nMosasauria\nmosasaurian\nmosasaurid\nMosasauridae\nmosasauroid\nMosasaurus\nMosatenan\nmoschate\nmoschatel\nmoschatelline\nMoschi\nMoschidae\nmoschiferous\nMoschinae\nmoschine\nMoschus\nMoscow\nMose\nMoselle\nMoses\nmosesite\nMosetena\nmosette\nmosey\nMosgu\nmoskeneer\nmosker\nMoslem\nMoslemah\nMoslemic\nMoslemin\nMoslemism\nMoslemite\nMoslemize\nmoslings\nmosque\nmosquelet\nmosquish\nmosquital\nMosquito\nmosquito\nmosquitobill\nmosquitocidal\nmosquitocide\nmosquitoey\nmosquitoish\nmosquitoproof\nmoss\nmossback\nmossberry\nmossbunker\nmossed\nmosser\nmossery\nmossful\nmosshead\nMossi\nmossiness\nmossless\nmosslike\nmosstrooper\nmosstroopery\nmosstrooping\nmosswort\nmossy\nmossyback\nmost\nmoste\nMosting\nmostlike\nmostlings\nmostly\nmostness\nMosul\nMosur\nmot\nMotacilla\nmotacillid\nMotacillidae\nMotacillinae\nmotacilline\nmotatorious\nmotatory\nMotazilite\nmote\nmoted\nmotel\nmoteless\nmoter\nmotet\nmotettist\nmotey\nmoth\nmothed\nmother\nmotherdom\nmothered\nmotherer\nmothergate\nmotherhood\nmotheriness\nmothering\nmotherkin\nmotherland\nmotherless\nmotherlessness\nmotherlike\nmotherliness\nmotherling\nmotherly\nmothership\nmothersome\nmotherward\nmotherwise\nmotherwort\nmothery\nmothless\nmothlike\nmothproof\nmothworm\nmothy\nmotif\nmotific\nmotile\nmotility\nmotion\nmotionable\nmotional\nmotionless\nmotionlessly\nmotionlessness\nmotitation\nmotivate\nmotivation\nmotivational\nmotive\nmotiveless\nmotivelessly\nmotivelessness\nmotiveness\nmotivity\nmotley\nmotleyness\nmotmot\nmotofacient\nmotograph\nmotographic\nmotomagnetic\nmotoneuron\nmotophone\nmotor\nmotorable\nmotorboat\nmotorboatman\nmotorbus\nmotorcab\nmotorcade\nmotorcar\nmotorcycle\nmotorcyclist\nmotordom\nmotordrome\nmotored\nmotorial\nmotoric\nmotoring\nmotorism\nmotorist\nmotorium\nmotorization\nmotorize\nmotorless\nmotorman\nmotorneer\nmotorphobe\nmotorphobia\nmotorphobiac\nmotorway\nmotory\nMotozintlec\nMotozintleca\nmotricity\nMott\nmott\nmotte\nmottle\nmottled\nmottledness\nmottlement\nmottler\nmottling\nmotto\nmottoed\nmottoless\nmottolike\nmottramite\nmotyka\nmou\nmoucharaby\nmouchardism\nmouche\nmouchrabieh\nmoud\nmoudie\nmoudieman\nmoudy\nmouflon\nMougeotia\nMougeotiaceae\nmouillation\nmouille\nmouillure\nmoujik\nmoul\nmould\nmoulded\nmoule\nmoulin\nmoulinage\nmoulinet\nmoulleen\nmoulrush\nmouls\nmoulter\nmouly\nmound\nmoundiness\nmoundlet\nmoundwork\nmoundy\nmount\nmountable\nmountably\nmountain\nmountained\nmountaineer\nmountainet\nmountainette\nmountainless\nmountainlike\nmountainous\nmountainously\nmountainousness\nmountainside\nmountaintop\nmountainward\nmountainwards\nmountainy\nmountant\nmountebank\nmountebankery\nmountebankish\nmountebankism\nmountebankly\nmounted\nmounter\nMountie\nmounting\nmountingly\nmountlet\nmounture\nmoup\nmourn\nmourner\nmourneress\nmournful\nmournfully\nmournfulness\nmourning\nmourningly\nmournival\nmournsome\nmouse\nmousebane\nmousebird\nmousefish\nmousehawk\nmousehole\nmousehound\nMouseion\nmousekin\nmouselet\nmouselike\nmouseproof\nmouser\nmousery\nmouseship\nmousetail\nmousetrap\nmouseweb\nmousey\nmousily\nmousiness\nmousing\nmousingly\nmousle\nmousmee\nMousoni\nmousquetaire\nmousse\nMousterian\nmoustoc\nmousy\nmout\nmoutan\nmouth\nmouthable\nmouthbreeder\nmouthed\nmouther\nmouthful\nmouthily\nmouthiness\nmouthing\nmouthingly\nmouthishly\nmouthless\nmouthlike\nmouthpiece\nmouthroot\nmouthwash\nmouthwise\nmouthy\nmouton\nmoutonnee\nmouzah\nmouzouna\nmovability\nmovable\nmovableness\nmovably\nmovant\nmove\nmoveability\nmoveableness\nmoveably\nmoveless\nmovelessly\nmovelessness\nmovement\nmover\nmovie\nmoviedom\nmovieize\nmovieland\nmoving\nmovingly\nmovingness\nmow\nmowable\nmowana\nmowburn\nmowburnt\nmowch\nmowcht\nmower\nmowha\nmowie\nmowing\nmowland\nmown\nmowra\nmowrah\nmowse\nmowstead\nmowt\nmowth\nmoxa\nmoxieberry\nMoxo\nmoy\nmoyen\nmoyenless\nmoyenne\nmoyite\nmoyle\nmoyo\nMozambican\nmozambique\nMozarab\nMozarabian\nMozarabic\nMozartean\nmozemize\nmozing\nmozzetta\nMpangwe\nMpondo\nmpret\nMr\nMrs\nMru\nmu\nmuang\nmubarat\nmucago\nmucaro\nmucedin\nmucedinaceous\nmucedine\nmucedinous\nmuch\nmuchfold\nmuchly\nmuchness\nmucic\nmucid\nmucidness\nmuciferous\nmucific\nmuciform\nmucigen\nmucigenous\nmucilage\nmucilaginous\nmucilaginously\nmucilaginousness\nmucin\nmucinogen\nmucinoid\nmucinous\nmuciparous\nmucivore\nmucivorous\nmuck\nmuckender\nMucker\nmucker\nmuckerish\nmuckerism\nmucket\nmuckiness\nmuckite\nmuckle\nmuckluck\nmuckman\nmuckment\nmuckmidden\nmuckna\nmuckrake\nmuckraker\nmucksweat\nmucksy\nmuckthrift\nmuckweed\nmuckworm\nmucky\nmucluc\nmucocele\nmucocellulose\nmucocellulosic\nmucocutaneous\nmucodermal\nmucofibrous\nmucoflocculent\nmucoid\nmucomembranous\nmuconic\nmucoprotein\nmucopurulent\nmucopus\nmucor\nMucoraceae\nmucoraceous\nMucorales\nmucorine\nmucorioid\nmucormycosis\nmucorrhea\nmucosa\nmucosal\nmucosanguineous\nmucose\nmucoserous\nmucosity\nmucosocalcareous\nmucosogranular\nmucosopurulent\nmucososaccharine\nmucous\nmucousness\nmucro\nmucronate\nmucronately\nmucronation\nmucrones\nmucroniferous\nmucroniform\nmucronulate\nmucronulatous\nmuculent\nMucuna\nmucus\nmucusin\nmud\nmudar\nmudbank\nmudcap\nmudd\nmudde\nmudden\nmuddify\nmuddily\nmuddiness\nmudding\nmuddish\nmuddle\nmuddlebrained\nmuddledom\nmuddlehead\nmuddleheaded\nmuddleheadedness\nmuddlement\nmuddleproof\nmuddler\nmuddlesome\nmuddlingly\nmuddy\nmuddybrained\nmuddybreast\nmuddyheaded\nmudee\nMudejar\nmudfish\nmudflow\nmudguard\nmudhead\nmudhole\nmudhopper\nmudir\nmudiria\nmudland\nmudlark\nmudlarker\nmudless\nmudproof\nmudra\nmudsill\nmudskipper\nmudslinger\nmudslinging\nmudspate\nmudstain\nmudstone\nmudsucker\nmudtrack\nmudweed\nmudwort\nMuehlenbeckia\nmuermo\nmuezzin\nmuff\nmuffed\nmuffet\nmuffetee\nmuffin\nmuffineer\nmuffish\nmuffishness\nmuffle\nmuffled\nmuffleman\nmuffler\nmufflin\nmuffy\nmufti\nmufty\nmug\nmuga\nmugearite\nmugful\nmugg\nmugger\nmugget\nmuggily\nmugginess\nmuggins\nmuggish\nmuggles\nMuggletonian\nMuggletonianism\nmuggy\nmughouse\nmugience\nmugiency\nmugient\nMugil\nMugilidae\nmugiliform\nmugiloid\nmugweed\nmugwort\nmugwump\nmugwumpery\nmugwumpian\nmugwumpism\nmuhammadi\nMuharram\nMuhlenbergia\nmuid\nMuilla\nmuir\nmuirburn\nmuircock\nmuirfowl\nmuishond\nmuist\nmujtahid\nMukden\nmukluk\nMukri\nmuktar\nmuktatma\nmukti\nmulaprakriti\nmulatta\nmulatto\nmulattoism\nmulattress\nmulberry\nmulch\nmulcher\nMulciber\nMulcibirian\nmulct\nmulctable\nmulctary\nmulctation\nmulctative\nmulctatory\nmulctuary\nmulder\nmule\nmuleback\nmulefoot\nmulefooted\nmuleman\nmuleta\nmuleteer\nmuletress\nmuletta\nmulewort\nmuley\nmulga\nmuliebral\nmuliebria\nmuliebrile\nmuliebrity\nmuliebrous\nmulier\nmulierine\nmulierose\nmulierosity\nmulish\nmulishly\nmulishness\nmulism\nmulita\nmulk\nmull\nmulla\nmullah\nmullar\nmullein\nmullenize\nmuller\nMullerian\nmullet\nmulletry\nmullets\nmulley\nmullid\nMullidae\nmulligan\nmulligatawny\nmulligrubs\nmullion\nmullite\nmullock\nmullocker\nmullocky\nmulloid\nmulloway\nmulmul\nmulse\nmulsify\nmult\nmultangular\nmultangularly\nmultangularness\nmultangulous\nmultangulum\nMultani\nmultanimous\nmultarticulate\nmulteity\nmultiangular\nmultiareolate\nmultiarticular\nmultiarticulate\nmultiarticulated\nmultiaxial\nmultiblade\nmultibladed\nmultibranched\nmultibranchiate\nmultibreak\nmulticamerate\nmulticapitate\nmulticapsular\nmulticarinate\nmulticarinated\nmulticellular\nmulticentral\nmulticentric\nmulticharge\nmultichord\nmultichrome\nmulticiliate\nmulticiliated\nmulticipital\nmulticircuit\nmulticoccous\nmulticoil\nmulticolor\nmulticolored\nmulticolorous\nmulticomponent\nmulticonductor\nmulticonstant\nmulticore\nmulticorneal\nmulticostate\nmulticourse\nmulticrystalline\nmulticuspid\nmulticuspidate\nmulticycle\nmulticylinder\nmulticylindered\nmultidentate\nmultidenticulate\nmultidenticulated\nmultidigitate\nmultidimensional\nmultidirectional\nmultidisperse\nmultiengine\nmultiengined\nmultiexhaust\nmultifaced\nmultifaceted\nmultifactorial\nmultifamilial\nmultifarious\nmultifariously\nmultifariousness\nmultiferous\nmultifetation\nmultifibered\nmultifid\nmultifidly\nmultifidous\nmultifidus\nmultifilament\nmultifistular\nmultiflagellate\nmultiflagellated\nmultiflash\nmultiflorous\nmultiflow\nmultiflue\nmultifocal\nmultifoil\nmultifoiled\nmultifold\nmultifoliate\nmultifoliolate\nmultiform\nmultiformed\nmultiformity\nmultifurcate\nmultiganglionic\nmultigap\nmultigranulate\nmultigranulated\nMultigraph\nmultigraph\nmultigrapher\nmultiguttulate\nmultigyrate\nmultihead\nmultihearth\nmultihued\nmultijet\nmultijugate\nmultijugous\nmultilaciniate\nmultilamellar\nmultilamellate\nmultilamellous\nmultilaminar\nmultilaminate\nmultilaminated\nmultilateral\nmultilaterally\nmultilighted\nmultilineal\nmultilinear\nmultilingual\nmultilinguist\nmultilirate\nmultiliteral\nmultilobar\nmultilobate\nmultilobe\nmultilobed\nmultilobular\nmultilobulate\nmultilobulated\nmultilocation\nmultilocular\nmultiloculate\nmultiloculated\nmultiloquence\nmultiloquent\nmultiloquious\nmultiloquous\nmultiloquy\nmultimacular\nmultimammate\nmultimarble\nmultimascular\nmultimedial\nmultimetalic\nmultimetallism\nmultimetallist\nmultimillion\nmultimillionaire\nmultimodal\nmultimodality\nmultimolecular\nmultimotor\nmultimotored\nmultinational\nmultinervate\nmultinervose\nmultinodal\nmultinodate\nmultinodous\nmultinodular\nmultinomial\nmultinominal\nmultinominous\nmultinuclear\nmultinucleate\nmultinucleated\nmultinucleolar\nmultinucleolate\nmultinucleolated\nmultiovular\nmultiovulate\nmultipara\nmultiparient\nmultiparity\nmultiparous\nmultipartisan\nmultipartite\nmultiped\nmultiperforate\nmultiperforated\nmultipersonal\nmultiphase\nmultiphaser\nmultiphotography\nmultipinnate\nmultiplane\nmultiple\nmultiplepoinding\nmultiplet\nmultiplex\nmultipliable\nmultipliableness\nmultiplicability\nmultiplicable\nmultiplicand\nmultiplicate\nmultiplication\nmultiplicational\nmultiplicative\nmultiplicatively\nmultiplicator\nmultiplicity\nmultiplier\nmultiply\nmultiplying\nmultipointed\nmultipolar\nmultipole\nmultiported\nmultipotent\nmultipresence\nmultipresent\nmultiradial\nmultiradiate\nmultiradiated\nmultiradicate\nmultiradicular\nmultiramified\nmultiramose\nmultiramous\nmultirate\nmultireflex\nmultirooted\nmultirotation\nmultirotatory\nmultisaccate\nmultisacculate\nmultisacculated\nmultiscience\nmultiseated\nmultisect\nmultisector\nmultisegmental\nmultisegmentate\nmultisegmented\nmultisensual\nmultiseptate\nmultiserial\nmultiserially\nmultiseriate\nmultishot\nmultisiliquous\nmultisonous\nmultispeed\nmultispermous\nmultispicular\nmultispiculate\nmultispindle\nmultispinous\nmultispiral\nmultispired\nmultistage\nmultistaminate\nmultistoried\nmultistory\nmultistratified\nmultistratous\nmultistriate\nmultisulcate\nmultisulcated\nmultisyllabic\nmultisyllability\nmultisyllable\nmultitarian\nmultitentaculate\nmultitheism\nmultithreaded\nmultititular\nmultitoed\nmultitoned\nmultitube\nMultituberculata\nmultituberculate\nmultituberculated\nmultituberculism\nmultituberculy\nmultitubular\nmultitude\nmultitudinal\nmultitudinary\nmultitudinism\nmultitudinist\nmultitudinistic\nmultitudinosity\nmultitudinous\nmultitudinously\nmultitudinousness\nmultiturn\nmultivagant\nmultivalence\nmultivalency\nmultivalent\nmultivalve\nmultivalved\nmultivalvular\nmultivane\nmultivariant\nmultivarious\nmultiversant\nmultiverse\nmultivibrator\nmultivincular\nmultivious\nmultivocal\nmultivocalness\nmultivoiced\nmultivolent\nmultivoltine\nmultivolumed\nmultivorous\nmultocular\nmultum\nmultungulate\nmulture\nmulturer\nmum\nmumble\nmumblebee\nmumblement\nmumbler\nmumbling\nmumblingly\nmummer\nmummery\nmummichog\nmummick\nmummied\nmummification\nmummiform\nmummify\nmumming\nmummy\nmummydom\nmummyhood\nmummylike\nmumness\nmump\nmumper\nmumphead\nmumpish\nmumpishly\nmumpishness\nmumps\nmumpsimus\nmumruffin\nmun\nMunandi\nMuncerian\nmunch\nMunchausenism\nMunchausenize\nmuncheel\nmuncher\nmunchet\nmund\nMunda\nmundane\nmundanely\nmundaneness\nmundanism\nmundanity\nMundari\nmundatory\nmundic\nmundificant\nmundification\nmundifier\nmundify\nmundil\nmundivagant\nmundle\nmung\nmunga\nmunge\nmungey\nmungo\nmungofa\nmunguba\nmungy\nMunia\nMunich\nMunichism\nmunicipal\nmunicipalism\nmunicipalist\nmunicipality\nmunicipalization\nmunicipalize\nmunicipalizer\nmunicipally\nmunicipium\nmunific\nmunificence\nmunificency\nmunificent\nmunificently\nmunificentness\nmuniment\nmunition\nmunitionary\nmunitioneer\nmunitioner\nmunitions\nmunity\nmunj\nmunjeet\nmunjistin\nmunnion\nMunnopsidae\nMunnopsis\nMunsee\nmunshi\nmunt\nMuntiacus\nmuntin\nMuntingia\nmuntjac\nMunychia\nMunychian\nMunychion\nMuong\nMuphrid\nMura\nmura\nMuradiyah\nMuraena\nMuraenidae\nmuraenoid\nmurage\nmural\nmuraled\nmuralist\nmurally\nMuran\nMuranese\nmurasakite\nMurat\nMuratorian\nmurchy\nmurder\nmurderer\nmurderess\nmurdering\nmurderingly\nmurderish\nmurderment\nmurderous\nmurderously\nmurderousness\nmurdrum\nmure\nmurenger\nmurex\nmurexan\nmurexide\nmurga\nmurgavi\nmurgeon\nmuriate\nmuriated\nmuriatic\nmuricate\nmuricid\nMuricidae\nmuriciform\nmuricine\nmuricoid\nmuriculate\nmurid\nMuridae\nmuridism\nMuriel\nmuriform\nmuriformly\nMurillo\nMurinae\nmurine\nmurinus\nmuriti\nmurium\nmurk\nmurkily\nmurkiness\nmurkish\nmurkly\nmurkness\nmurksome\nmurky\nmurlin\nmurly\nMurmi\nmurmur\nmurmuration\nmurmurator\nmurmurer\nmurmuring\nmurmuringly\nmurmurish\nmurmurless\nmurmurlessly\nmurmurous\nmurmurously\nmuromontite\nMurph\nmurphy\nmurra\nmurrain\nMurray\nMurraya\nmurre\nmurrelet\nmurrey\nmurrhine\nmurrina\nmurrnong\nmurshid\nMurthy\nmurumuru\nMurut\nmuruxi\nmurva\nmurza\nMurzim\nMus\nMusa\nMusaceae\nmusaceous\nMusaeus\nmusal\nMusales\nMusalmani\nmusang\nmusar\nMusca\nmuscade\nmuscadel\nmuscadine\nMuscadinia\nmuscardine\nMuscardinidae\nMuscardinus\nMuscari\nmuscariform\nmuscarine\nmuscat\nmuscatel\nmuscatorium\nMusci\nMuscicapa\nMuscicapidae\nmuscicapine\nmuscicide\nmuscicole\nmuscicoline\nmuscicolous\nmuscid\nMuscidae\nmusciform\nMuscinae\nmuscle\nmuscled\nmuscleless\nmusclelike\nmuscling\nmuscly\nMuscogee\nmuscoid\nMuscoidea\nmuscologic\nmuscological\nmuscologist\nmuscology\nmuscone\nmuscose\nmuscoseness\nmuscosity\nmuscot\nmuscovadite\nmuscovado\nMuscovi\nMuscovite\nmuscovite\nMuscovitic\nmuscovitization\nmuscovitize\nmuscovy\nmuscular\nmuscularity\nmuscularize\nmuscularly\nmusculation\nmusculature\nmuscule\nmusculin\nmusculoarterial\nmusculocellular\nmusculocutaneous\nmusculodermic\nmusculoelastic\nmusculofibrous\nmusculointestinal\nmusculoligamentous\nmusculomembranous\nmusculopallial\nmusculophrenic\nmusculospinal\nmusculospiral\nmusculotegumentary\nmusculotendinous\nMuse\nmuse\nmused\nmuseful\nmusefully\nmuseist\nmuseless\nmuselike\nmuseographist\nmuseography\nmuseologist\nmuseology\nmuser\nmusery\nmusette\nmuseum\nmuseumize\nMusgu\nmush\nmusha\nmushaa\nMushabbihite\nmushed\nmusher\nmushhead\nmushheaded\nmushheadedness\nmushily\nmushiness\nmushla\nmushmelon\nmushrebiyeh\nmushroom\nmushroomer\nmushroomic\nmushroomlike\nmushroomy\nmushru\nmushy\nmusic\nmusical\nmusicale\nmusicality\nmusicalization\nmusicalize\nmusically\nmusicalness\nmusicate\nmusician\nmusiciana\nmusicianer\nmusicianly\nmusicianship\nmusicker\nmusicless\nmusiclike\nmusicmonger\nmusico\nmusicoartistic\nmusicodramatic\nmusicofanatic\nmusicographer\nmusicography\nmusicological\nmusicologist\nmusicologue\nmusicology\nmusicomania\nmusicomechanical\nmusicophilosophical\nmusicophobia\nmusicophysical\nmusicopoetic\nmusicotherapy\nmusicproof\nmusie\nmusily\nmusimon\nmusing\nmusingly\nmusk\nmuskat\nmuskeg\nmuskeggy\nmuskellunge\nmusket\nmusketade\nmusketeer\nmusketlike\nmusketoon\nmusketproof\nmusketry\nmuskflower\nMuskhogean\nmuskie\nmuskiness\nmuskish\nmusklike\nmuskmelon\nMuskogee\nmuskrat\nmuskroot\nMuskwaki\nmuskwood\nmusky\nmuslin\nmuslined\nmuslinet\nmusnud\nMusophaga\nMusophagi\nMusophagidae\nmusophagine\nmusquash\nmusquashroot\nmusquashweed\nmusquaspen\nmusquaw\nmusrol\nmuss\nmussable\nmussably\nMussaenda\nmussal\nmussalchee\nmussel\nmusseled\nmusseler\nmussily\nmussiness\nmussitate\nmussitation\nmussuk\nMussulman\nMussulmanic\nMussulmanish\nMussulmanism\nMussulwoman\nmussurana\nmussy\nmust\nmustache\nmustached\nmustachial\nmustachio\nmustachioed\nmustafina\nMustahfiz\nmustang\nmustanger\nmustard\nmustarder\nmustee\nMustela\nmustelid\nMustelidae\nmusteline\nmustelinous\nmusteloid\nMustelus\nmuster\nmusterable\nmusterdevillers\nmusterer\nmustermaster\nmustify\nmustily\nmustiness\nmustnt\nmusty\nmuta\nMutabilia\nmutability\nmutable\nmutableness\nmutably\nmutafacient\nmutage\nmutagenic\nmutant\nmutarotate\nmutarotation\nmutase\nmutate\nmutation\nmutational\nmutationally\nmutationism\nmutationist\nmutative\nmutatory\nmutawalli\nMutazala\nmutch\nmute\nmutedly\nmutely\nmuteness\nMuter\nmutesarif\nmutescence\nmutessarifat\nmuth\nmuthmannite\nmuthmassel\nmutic\nmuticous\nmutilate\nmutilation\nmutilative\nmutilator\nmutilatory\nMutilla\nmutillid\nMutillidae\nmutilous\nmutineer\nmutinous\nmutinously\nmutinousness\nmutiny\nMutisia\nMutisiaceae\nmutism\nmutist\nmutistic\nmutive\nmutivity\nmutoscope\nmutoscopic\nmutsje\nmutsuddy\nmutt\nmutter\nmutterer\nmuttering\nmutteringly\nmutton\nmuttonbird\nmuttonchop\nmuttonfish\nmuttonhead\nmuttonheaded\nmuttonhood\nmuttonmonger\nmuttonwood\nmuttony\nmutual\nmutualism\nmutualist\nmutualistic\nmutuality\nmutualization\nmutualize\nmutually\nmutualness\nmutuary\nmutuatitious\nmutulary\nmutule\nmutuum\nmux\nMuysca\nmuyusa\nmuzhik\nMuzo\nmuzz\nmuzzily\nmuzziness\nmuzzle\nmuzzler\nmuzzlewood\nmuzzy\nMwa\nmy\nMya\nMyacea\nmyal\nmyalgia\nmyalgic\nmyalism\nmyall\nMyaria\nmyarian\nmyasthenia\nmyasthenic\nmyatonia\nmyatonic\nmyatony\nmyatrophy\nmycele\nmycelia\nmycelial\nmycelian\nmycelioid\nmycelium\nmyceloid\nMycenaean\nMycetes\nmycetism\nmycetocyte\nmycetogenesis\nmycetogenetic\nmycetogenic\nmycetogenous\nmycetoid\nmycetological\nmycetology\nmycetoma\nmycetomatous\nMycetophagidae\nmycetophagous\nmycetophilid\nMycetophilidae\nmycetous\nMycetozoa\nmycetozoan\nmycetozoon\nMycobacteria\nMycobacteriaceae\nMycobacterium\nmycocecidium\nmycocyte\nmycoderm\nmycoderma\nmycodermatoid\nmycodermatous\nmycodermic\nmycodermitis\nmycodesmoid\nmycodomatium\nmycogastritis\nMycogone\nmycohaemia\nmycohemia\nmycoid\nmycologic\nmycological\nmycologically\nmycologist\nmycologize\nmycology\nmycomycete\nMycomycetes\nmycomycetous\nmycomyringitis\nmycophagist\nmycophagous\nmycophagy\nmycophyte\nMycoplana\nmycoplasm\nmycoplasmic\nmycoprotein\nmycorhiza\nmycorhizal\nmycorrhizal\nmycose\nmycosin\nmycosis\nmycosozin\nMycosphaerella\nMycosphaerellaceae\nmycosterol\nmycosymbiosis\nmycotic\nmycotrophic\nMycteria\nmycteric\nmycterism\nMyctodera\nmyctophid\nMyctophidae\nMyctophum\nMydaidae\nmydaleine\nmydatoxine\nMydaus\nmydine\nmydriasine\nmydriasis\nmydriatic\nmydriatine\nmyectomize\nmyectomy\nmyectopia\nmyectopy\nmyelalgia\nmyelapoplexy\nmyelasthenia\nmyelatrophy\nmyelauxe\nmyelemia\nmyelencephalic\nmyelencephalon\nmyelencephalous\nmyelic\nmyelin\nmyelinate\nmyelinated\nmyelination\nmyelinic\nmyelinization\nmyelinogenesis\nmyelinogenetic\nmyelinogeny\nmyelitic\nmyelitis\nmyeloblast\nmyeloblastic\nmyelobrachium\nmyelocele\nmyelocerebellar\nmyelocoele\nmyelocyst\nmyelocystic\nmyelocystocele\nmyelocyte\nmyelocythaemia\nmyelocythemia\nmyelocytic\nmyelocytosis\nmyelodiastasis\nmyeloencephalitis\nmyeloganglitis\nmyelogenesis\nmyelogenetic\nmyelogenous\nmyelogonium\nmyeloic\nmyeloid\nmyelolymphangioma\nmyelolymphocyte\nmyeloma\nmyelomalacia\nmyelomatoid\nmyelomatosis\nmyelomenia\nmyelomeningitis\nmyelomeningocele\nmyelomere\nmyelon\nmyelonal\nmyeloneuritis\nmyelonic\nmyeloparalysis\nmyelopathic\nmyelopathy\nmyelopetal\nmyelophthisis\nmyeloplast\nmyeloplastic\nmyeloplax\nmyeloplegia\nmyelopoiesis\nmyelopoietic\nmyelorrhagia\nmyelorrhaphy\nmyelosarcoma\nmyelosclerosis\nmyelospasm\nmyelospongium\nmyelosyphilis\nmyelosyphilosis\nmyelosyringosis\nmyelotherapy\nMyelozoa\nmyelozoan\nmyentasis\nmyenteric\nmyenteron\nmyesthesia\nmygale\nmygalid\nmygaloid\nMyiarchus\nmyiasis\nmyiferous\nmyiodesopsia\nmyiosis\nmyitis\nmykiss\nmyliobatid\nMyliobatidae\nmyliobatine\nmyliobatoid\nMylodon\nmylodont\nMylodontidae\nmylohyoid\nmylohyoidean\nmylonite\nmylonitic\nMymar\nmymarid\nMymaridae\nmyna\nMynheer\nmynpacht\nmynpachtbrief\nmyoalbumin\nmyoalbumose\nmyoatrophy\nmyoblast\nmyoblastic\nmyocardiac\nmyocardial\nmyocardiogram\nmyocardiograph\nmyocarditic\nmyocarditis\nmyocardium\nmyocele\nmyocellulitis\nmyoclonic\nmyoclonus\nmyocoele\nmyocoelom\nmyocolpitis\nmyocomma\nmyocyte\nmyodegeneration\nMyodes\nmyodiastasis\nmyodynamia\nmyodynamic\nmyodynamics\nmyodynamiometer\nmyodynamometer\nmyoedema\nmyoelectric\nmyoendocarditis\nmyoepicardial\nmyoepithelial\nmyofibril\nmyofibroma\nmyogen\nmyogenesis\nmyogenetic\nmyogenic\nmyogenous\nmyoglobin\nmyoglobulin\nmyogram\nmyograph\nmyographer\nmyographic\nmyographical\nmyographist\nmyography\nmyohematin\nmyoid\nmyoidema\nmyokinesis\nmyolemma\nmyolipoma\nmyoliposis\nmyologic\nmyological\nmyologist\nmyology\nmyolysis\nmyoma\nmyomalacia\nmyomancy\nmyomantic\nmyomatous\nmyomectomy\nmyomelanosis\nmyomere\nmyometritis\nmyometrium\nmyomohysterectomy\nmyomorph\nMyomorpha\nmyomorphic\nmyomotomy\nmyoneme\nmyoneural\nmyoneuralgia\nmyoneurasthenia\nmyoneure\nmyoneuroma\nmyoneurosis\nmyonosus\nmyopachynsis\nmyoparalysis\nmyoparesis\nmyopathia\nmyopathic\nmyopathy\nmyope\nmyoperitonitis\nmyophan\nmyophore\nmyophorous\nmyophysical\nmyophysics\nmyopia\nmyopic\nmyopical\nmyopically\nmyoplasm\nmyoplastic\nmyoplasty\nmyopolar\nMyoporaceae\nmyoporaceous\nmyoporad\nMyoporum\nmyoproteid\nmyoprotein\nmyoproteose\nmyops\nmyopy\nmyorrhaphy\nmyorrhexis\nmyosalpingitis\nmyosarcoma\nmyosarcomatous\nmyosclerosis\nmyoscope\nmyoseptum\nmyosin\nmyosinogen\nmyosinose\nmyosis\nmyositic\nmyositis\nmyosote\nMyosotis\nmyospasm\nmyospasmia\nMyosurus\nmyosuture\nmyosynizesis\nmyotacismus\nMyotalpa\nMyotalpinae\nmyotasis\nmyotenotomy\nmyothermic\nmyotic\nmyotome\nmyotomic\nmyotomy\nmyotonia\nmyotonic\nmyotonus\nmyotony\nmyotrophy\nmyowun\nMyoxidae\nmyoxine\nMyoxus\nMyra\nmyrabalanus\nmyrabolam\nmyrcene\nMyrcia\nmyrcia\nmyriacanthous\nmyriacoulomb\nmyriad\nmyriaded\nmyriadfold\nmyriadly\nmyriadth\nmyriagram\nmyriagramme\nmyrialiter\nmyrialitre\nmyriameter\nmyriametre\nMyrianida\nmyriapod\nMyriapoda\nmyriapodan\nmyriapodous\nmyriarch\nmyriarchy\nmyriare\nMyrica\nmyrica\nMyricaceae\nmyricaceous\nMyricales\nmyricetin\nmyricin\nMyrick\nmyricyl\nmyricylic\nMyrientomata\nmyringa\nmyringectomy\nmyringitis\nmyringodectomy\nmyringodermatitis\nmyringomycosis\nmyringoplasty\nmyringotome\nmyringotomy\nmyriological\nmyriologist\nmyriologue\nmyriophyllite\nmyriophyllous\nMyriophyllum\nMyriopoda\nmyriopodous\nmyriorama\nmyrioscope\nmyriosporous\nmyriotheism\nMyriotrichia\nMyriotrichiaceae\nmyriotrichiaceous\nmyristate\nmyristic\nMyristica\nmyristica\nMyristicaceae\nmyristicaceous\nMyristicivora\nmyristicivorous\nmyristin\nmyristone\nMyrmecia\nMyrmecobiinae\nmyrmecobine\nMyrmecobius\nmyrmecochorous\nmyrmecochory\nmyrmecoid\nmyrmecoidy\nmyrmecological\nmyrmecologist\nmyrmecology\nMyrmecophaga\nMyrmecophagidae\nmyrmecophagine\nmyrmecophagoid\nmyrmecophagous\nmyrmecophile\nmyrmecophilism\nmyrmecophilous\nmyrmecophily\nmyrmecophobic\nmyrmecophyte\nmyrmecophytic\nmyrmekite\nMyrmeleon\nMyrmeleonidae\nMyrmeleontidae\nMyrmica\nmyrmicid\nMyrmicidae\nmyrmicine\nmyrmicoid\nMyrmidon\nMyrmidonian\nmyrmotherine\nmyrobalan\nMyron\nmyron\nmyronate\nmyronic\nmyrosin\nmyrosinase\nMyrothamnaceae\nmyrothamnaceous\nMyrothamnus\nMyroxylon\nmyrrh\nmyrrhed\nmyrrhic\nmyrrhine\nMyrrhis\nmyrrhol\nmyrrhophore\nmyrrhy\nMyrsinaceae\nmyrsinaceous\nmyrsinad\nMyrsiphyllum\nMyrtaceae\nmyrtaceous\nmyrtal\nMyrtales\nmyrtiform\nMyrtilus\nmyrtle\nmyrtleberry\nmyrtlelike\nmyrtol\nMyrtus\nmysel\nmyself\nmysell\nMysian\nmysid\nMysidacea\nMysidae\nmysidean\nMysis\nmysogynism\nmysoid\nmysophobia\nMysore\nmysosophist\nmysost\nmyst\nmystacial\nMystacocete\nMystacoceti\nmystagogic\nmystagogical\nmystagogically\nmystagogue\nmystagogy\nmystax\nmysterial\nmysteriarch\nmysteriosophic\nmysteriosophy\nmysterious\nmysteriously\nmysteriousness\nmysterize\nmystery\nmystes\nmystic\nmystical\nmysticality\nmystically\nmysticalness\nMysticete\nmysticete\nMysticeti\nmysticetous\nmysticism\nmysticity\nmysticize\nmysticly\nmystific\nmystifically\nmystification\nmystificator\nmystificatory\nmystifiedly\nmystifier\nmystify\nmystifyingly\nmytacism\nmyth\nmythical\nmythicalism\nmythicality\nmythically\nmythicalness\nmythicism\nmythicist\nmythicize\nmythicizer\nmythification\nmythify\nmythism\nmythist\nmythize\nmythland\nmythmaker\nmythmaking\nmythoclast\nmythoclastic\nmythogenesis\nmythogonic\nmythogony\nmythographer\nmythographist\nmythography\nmythogreen\nmythoheroic\nmythohistoric\nmythologema\nmythologer\nmythological\nmythologically\nmythologist\nmythologize\nmythologizer\nmythologue\nmythology\nmythomania\nmythomaniac\nmythometer\nmythonomy\nmythopastoral\nmythopoeic\nmythopoeism\nmythopoeist\nmythopoem\nmythopoesis\nmythopoesy\nmythopoet\nmythopoetic\nmythopoetize\nmythopoetry\nmythos\nmythus\nMytilacea\nmytilacean\nmytilaceous\nMytiliaspis\nmytilid\nMytilidae\nmytiliform\nmytiloid\nmytilotoxine\nMytilus\nmyxa\nmyxadenitis\nmyxadenoma\nmyxaemia\nmyxamoeba\nmyxangitis\nmyxasthenia\nmyxedema\nmyxedematoid\nmyxedematous\nmyxedemic\nmyxemia\nMyxine\nMyxinidae\nmyxinoid\nMyxinoidei\nmyxo\nMyxobacteria\nMyxobacteriaceae\nmyxobacteriaceous\nMyxobacteriales\nmyxoblastoma\nmyxochondroma\nmyxochondrosarcoma\nMyxococcus\nmyxocystoma\nmyxocyte\nmyxoenchondroma\nmyxofibroma\nmyxofibrosarcoma\nmyxoflagellate\nmyxogaster\nMyxogasteres\nMyxogastrales\nMyxogastres\nmyxogastric\nmyxogastrous\nmyxoglioma\nmyxoid\nmyxoinoma\nmyxolipoma\nmyxoma\nmyxomatosis\nmyxomatous\nMyxomycetales\nmyxomycete\nMyxomycetes\nmyxomycetous\nmyxomyoma\nmyxoneuroma\nmyxopapilloma\nMyxophyceae\nmyxophycean\nMyxophyta\nmyxopod\nMyxopoda\nmyxopodan\nmyxopodium\nmyxopodous\nmyxopoiesis\nmyxorrhea\nmyxosarcoma\nMyxospongiae\nmyxospongian\nMyxospongida\nmyxospore\nMyxosporidia\nmyxosporidian\nMyxosporidiida\nMyxosporium\nmyxosporous\nMyxothallophyta\nmyxotheca\nMyzodendraceae\nmyzodendraceous\nMyzodendron\nMyzomyia\nmyzont\nMyzontes\nMyzostoma\nMyzostomata\nmyzostomatous\nmyzostome\nmyzostomid\nMyzostomida\nMyzostomidae\nmyzostomidan\nmyzostomous\nN\nn\nna\nnaa\nnaam\nNaaman\nNaassenes\nnab\nnabak\nNabal\nNabalism\nNabalite\nNabalitic\nNabaloi\nNabalus\nNabataean\nNabatean\nNabathaean\nNabathean\nNabathite\nnabber\nNabby\nnabk\nnabla\nnable\nnabob\nnabobery\nnabobess\nnabobical\nnabobish\nnabobishly\nnabobism\nnabobry\nnabobship\nNabothian\nnabs\nNabu\nnacarat\nnacarine\nnace\nnacelle\nnach\nnachani\nNachitoch\nNachitoches\nNachschlag\nNacionalista\nnacket\nnacre\nnacred\nnacreous\nnacrine\nnacrite\nnacrous\nnacry\nnadder\nNadeem\nnadir\nnadiral\nnadorite\nnae\nnaebody\nnaegate\nnaegates\nnael\nNaemorhedinae\nnaemorhedine\nNaemorhedus\nnaether\nnaething\nnag\nNaga\nnaga\nnagaika\nnagana\nnagara\nNagari\nnagatelite\nnagger\nnaggin\nnagging\nnaggingly\nnaggingness\nnaggish\nnaggle\nnaggly\nnaggy\nnaght\nnagkassar\nnagmaal\nnagman\nnagnag\nnagnail\nnagor\nnagsman\nnagster\nnagual\nnagualism\nnagualist\nnagyagite\nNahanarvali\nNahane\nNahani\nNaharvali\nNahor\nNahua\nNahuan\nNahuatl\nNahuatlac\nNahuatlan\nNahuatleca\nNahuatlecan\nNahum\nnaiad\nNaiadaceae\nnaiadaceous\nNaiadales\nNaiades\nnaiant\nNaias\nnaid\nnaif\nnaifly\nnaig\nnaigie\nnaik\nnail\nnailbin\nnailbrush\nnailer\nnaileress\nnailery\nnailhead\nnailing\nnailless\nnaillike\nnailprint\nnailproof\nnailrod\nnailshop\nnailsick\nnailsmith\nnailwort\nnaily\nNaim\nnain\nnainsel\nnainsook\nnaio\nnaipkin\nNair\nnairy\nnais\nnaish\nnaissance\nnaissant\nnaither\nnaive\nnaively\nnaiveness\nnaivete\nnaivety\nNaja\nnak\nnake\nnaked\nnakedish\nnakedize\nnakedly\nnakedness\nnakedweed\nnakedwood\nnaker\nnakhlite\nnakhod\nnakhoda\nNakir\nnako\nNakomgilisala\nnakong\nnakoo\nNakula\nNalita\nnallah\nnam\nNama\nnamability\nnamable\nNamaqua\nnamaqua\nNamaquan\nnamaycush\nnamaz\nnamazlik\nNambe\nnamda\nname\nnameability\nnameable\nnameboard\nnameless\nnamelessly\nnamelessness\nnameling\nnamely\nnamer\nnamesake\nnaming\nnammad\nNan\nnan\nNana\nnana\nNanaimo\nnanawood\nNance\nNancy\nnancy\nNanda\nNandi\nnandi\nNandina\nnandine\nnandow\nnandu\nnane\nnanes\nnanga\nnanism\nnanization\nnankeen\nNankin\nnankin\nNanking\nNankingese\nnannander\nnannandrium\nnannandrous\nNannette\nnannoplankton\nNanny\nnanny\nnannyberry\nnannybush\nnanocephalia\nnanocephalic\nnanocephalism\nnanocephalous\nnanocephalus\nnanocephaly\nnanoid\nnanomelia\nnanomelous\nnanomelus\nnanosoma\nnanosomia\nnanosomus\nnanpie\nnant\nNanticoke\nnantle\nnantokite\nNantz\nnaological\nnaology\nnaometry\nNaomi\nNaos\nnaos\nNaosaurus\nNaoto\nnap\nnapa\nNapaea\nNapaean\nnapal\nnapalm\nnape\nnapead\nnapecrest\nnapellus\nnaperer\nnapery\nnaphtha\nnaphthacene\nnaphthalate\nnaphthalene\nnaphthaleneacetic\nnaphthalenesulphonic\nnaphthalenic\nnaphthalenoid\nnaphthalic\nnaphthalidine\nnaphthalin\nnaphthaline\nnaphthalization\nnaphthalize\nnaphthalol\nnaphthamine\nnaphthanthracene\nnaphthene\nnaphthenic\nnaphthinduline\nnaphthionate\nnaphtho\nnaphthoic\nnaphthol\nnaphtholate\nnaphtholize\nnaphtholsulphonate\nnaphtholsulphonic\nnaphthoquinone\nnaphthoresorcinol\nnaphthosalol\nnaphthous\nnaphthoxide\nnaphthyl\nnaphthylamine\nnaphthylaminesulphonic\nnaphthylene\nnaphthylic\nnaphtol\nNapierian\nnapiform\nnapkin\nnapkining\nnapless\nnaplessness\nNapoleon\nnapoleon\nNapoleonana\nNapoleonic\nNapoleonically\nNapoleonism\nNapoleonist\nNapoleonistic\nnapoleonite\nNapoleonize\nnapoo\nnappe\nnapped\nnapper\nnappiness\nnapping\nnappishness\nnappy\nnaprapath\nnaprapathy\nnapron\nnapthionic\nnapu\nnar\nNarcaciontes\nNarcaciontidae\nnarceine\nnarcism\nNarciss\nNarcissan\nnarcissi\nNarcissine\nnarcissism\nnarcissist\nnarcissistic\nNarcissus\nnarcist\nnarcistic\nnarcoanalysis\nnarcoanesthesia\nNarcobatidae\nNarcobatoidea\nNarcobatus\nnarcohypnia\nnarcohypnosis\nnarcolepsy\nnarcoleptic\nnarcoma\nnarcomania\nnarcomaniac\nnarcomaniacal\nnarcomatous\nNarcomedusae\nnarcomedusan\nnarcose\nnarcosis\nnarcostimulant\nnarcosynthesis\nnarcotherapy\nnarcotia\nnarcotic\nnarcotical\nnarcotically\nnarcoticalness\nnarcoticism\nnarcoticness\nnarcotina\nnarcotine\nnarcotinic\nnarcotism\nnarcotist\nnarcotization\nnarcotize\nnarcous\nnard\nnardine\nnardoo\nNardus\nNaren\nNarendra\nnares\nNaresh\nnarghile\nnargil\nnarial\nnaric\nnarica\nnaricorn\nnariform\nnarine\nnaringenin\nnaringin\nnark\nnarky\nnarr\nnarra\nNarraganset\nnarras\nnarratable\nnarrate\nnarrater\nnarration\nnarrational\nnarrative\nnarratively\nnarrator\nnarratory\nnarratress\nnarratrix\nnarrawood\nnarrow\nnarrower\nnarrowhearted\nnarrowheartedness\nnarrowingness\nnarrowish\nnarrowly\nnarrowness\nnarrowy\nnarsarsukite\nnarsinga\nnarthecal\nNarthecium\nnarthex\nnarwhal\nnarwhalian\nnary\nnasab\nnasal\nNasalis\nnasalis\nnasalism\nnasality\nnasalization\nnasalize\nnasally\nnasalward\nnasalwards\nnasard\nNascan\nNascapi\nnascence\nnascency\nnascent\nnasch\nnaseberry\nnasethmoid\nnash\nnashgab\nnashgob\nNashim\nNashira\nNashua\nnasi\nnasial\nnasicorn\nNasicornia\nnasicornous\nNasiei\nnasiform\nnasilabial\nnasillate\nnasillation\nnasioalveolar\nnasiobregmatic\nnasioinial\nnasiomental\nnasion\nnasitis\nNaskhi\nnasoalveola\nnasoantral\nnasobasilar\nnasobronchial\nnasobuccal\nnasoccipital\nnasociliary\nnasoethmoidal\nnasofrontal\nnasolabial\nnasolachrymal\nnasological\nnasologist\nnasology\nnasomalar\nnasomaxillary\nnasonite\nnasoorbital\nnasopalatal\nnasopalatine\nnasopharyngeal\nnasopharyngitis\nnasopharynx\nnasoprognathic\nnasoprognathism\nnasorostral\nnasoscope\nnasoseptal\nnasosinuitis\nnasosinusitis\nnasosubnasal\nnasoturbinal\nnasrol\nNassa\nNassau\nNassellaria\nnassellarian\nNassidae\nnassology\nnast\nnastaliq\nnastic\nnastika\nnastily\nnastiness\nnasturtion\nnasturtium\nnasty\nNasua\nnasus\nnasute\nnasuteness\nnasutiform\nnasutus\nnat\nnatability\nnataka\nNatal\nnatal\nNatalia\nNatalian\nNatalie\nnatality\nnataloin\nnatals\nnatant\nnatantly\nNataraja\nnatation\nnatational\nnatator\nnatatorial\nnatatorious\nnatatorium\nnatatory\nnatch\nnatchbone\nNatchez\nNatchezan\nNatchitoches\nnatchnee\nNate\nnates\nNathan\nNathanael\nNathaniel\nnathe\nnather\nnathless\nNatica\nNaticidae\nnaticiform\nnaticine\nNatick\nnaticoid\nnatiform\nnatimortality\nnation\nnational\nnationalism\nnationalist\nnationalistic\nnationalistically\nnationality\nnationalization\nnationalize\nnationalizer\nnationally\nnationalness\nnationalty\nnationhood\nnationless\nnationwide\nnative\nnatively\nnativeness\nnativism\nnativist\nnativistic\nnativity\nnatr\nNatraj\nNatricinae\nnatricine\nnatrium\nNatrix\nnatrochalcite\nnatrojarosite\nnatrolite\nnatron\nNatt\nnatter\nnattered\nnatteredness\nnatterjack\nnattily\nnattiness\nnattle\nnatty\nnatuary\nnatural\nnaturalesque\nnaturalism\nnaturalist\nnaturalistic\nnaturalistically\nnaturality\nnaturalization\nnaturalize\nnaturalizer\nnaturally\nnaturalness\nnature\nnaturecraft\nnaturelike\nnaturing\nnaturism\nnaturist\nnaturistic\nnaturistically\nnaturize\nnaturopath\nnaturopathic\nnaturopathist\nnaturopathy\nnaucrar\nnaucrary\nnaufragous\nnauger\nnaught\nnaughtily\nnaughtiness\nnaughty\nnaujaite\nnaumachia\nnaumachy\nnaumannite\nNaumburgia\nnaumk\nnaumkeag\nnaumkeager\nnaunt\nnauntle\nnaupathia\nnauplial\nnaupliiform\nnauplioid\nnauplius\nnauropometer\nnauscopy\nnausea\nnauseant\nnauseaproof\nnauseate\nnauseatingly\nnauseation\nnauseous\nnauseously\nnauseousness\nNauset\nnaut\nnautch\nnauther\nnautic\nnautical\nnauticality\nnautically\nnautics\nnautiform\nNautilacea\nnautilacean\nnautilicone\nnautiliform\nnautilite\nnautiloid\nNautiloidea\nnautiloidean\nnautilus\nNavaho\nNavajo\nnaval\nnavalese\nnavalism\nnavalist\nnavalistic\nnavalistically\nnavally\nnavar\nnavarch\nnavarchy\nNavarrese\nNavarrian\nnave\nnavel\nnaveled\nnavellike\nnavelwort\nnavet\nnavette\nnavew\nnavicella\nnavicert\nnavicula\nNaviculaceae\nnaviculaeform\nnavicular\nnaviculare\nnaviculoid\nnaviform\nnavigability\nnavigable\nnavigableness\nnavigably\nnavigant\nnavigate\nnavigation\nnavigational\nnavigator\nnavigerous\nnavipendular\nnavipendulum\nnavite\nnavvy\nnavy\nnaw\nnawab\nnawabship\nnawt\nnay\nNayar\nNayarit\nNayarita\nnayaur\nnaysay\nnaysayer\nnayward\nnayword\nNazarate\nNazarean\nNazarene\nNazarenism\nNazarite\nNazariteship\nNazaritic\nNazaritish\nNazaritism\nnaze\nNazerini\nNazi\nNazify\nNaziism\nnazim\nnazir\nNazirate\nNazirite\nNaziritic\nNazism\nne\nnea\nNeal\nneal\nneallotype\nNeanderthal\nNeanderthaler\nNeanderthaloid\nneanic\nneanthropic\nneap\nneaped\nNeapolitan\nnearable\nnearabout\nnearabouts\nnearaivays\nnearaway\nnearby\nNearctic\nNearctica\nnearest\nnearish\nnearly\nnearmost\nnearness\nnearsighted\nnearsightedly\nnearsightedness\nnearthrosis\nneat\nneaten\nneath\nneatherd\nneatherdess\nneathmost\nneatify\nneatly\nneatness\nneb\nneback\nNebaioth\nNebalia\nNebaliacea\nnebalian\nNebaliidae\nnebalioid\nnebbed\nnebbuck\nnebbuk\nnebby\nnebel\nnebelist\nnebenkern\nNebiim\nNebraskan\nnebris\nnebula\nnebulae\nnebular\nnebularization\nnebularize\nnebulated\nnebulation\nnebule\nnebulescent\nnebuliferous\nnebulite\nnebulium\nnebulization\nnebulize\nnebulizer\nnebulose\nnebulosity\nnebulous\nnebulously\nnebulousness\nNecator\nnecessar\nnecessarian\nnecessarianism\nnecessarily\nnecessariness\nnecessary\nnecessism\nnecessist\nnecessitarian\nnecessitarianism\nnecessitate\nnecessitatedly\nnecessitatingly\nnecessitation\nnecessitative\nnecessitous\nnecessitously\nnecessitousness\nnecessitude\nnecessity\nneck\nneckar\nneckatee\nneckband\nneckcloth\nnecked\nnecker\nneckercher\nneckerchief\nneckful\nneckguard\nnecking\nneckinger\nnecklace\nnecklaced\nnecklaceweed\nneckless\nnecklet\nnecklike\nneckline\nneckmold\nneckpiece\nneckstock\nnecktie\nnecktieless\nneckward\nneckwear\nneckweed\nneckyoke\nnecrectomy\nnecremia\nnecrobacillary\nnecrobacillosis\nnecrobiosis\nnecrobiotic\nnecrogenic\nnecrogenous\nnecrographer\nnecrolatry\nnecrologic\nnecrological\nnecrologically\nnecrologist\nnecrologue\nnecrology\nnecromancer\nnecromancing\nnecromancy\nnecromantic\nnecromantically\nnecromorphous\nnecronite\nnecropathy\nNecrophaga\nnecrophagan\nnecrophagous\nnecrophile\nnecrophilia\nnecrophilic\nnecrophilism\nnecrophilistic\nnecrophilous\nnecrophily\nnecrophobia\nnecrophobic\nNecrophorus\nnecropoleis\nnecropoles\nnecropolis\nnecropolitan\nnecropsy\nnecroscopic\nnecroscopical\nnecroscopy\nnecrose\nnecrosis\nnecrotic\nnecrotization\nnecrotize\nnecrotomic\nnecrotomist\nnecrotomy\nnecrotype\nnecrotypic\nNectandra\nnectar\nnectareal\nnectarean\nnectared\nnectareous\nnectareously\nnectareousness\nnectarial\nnectarian\nnectaried\nnectariferous\nnectarine\nNectarinia\nNectariniidae\nnectarious\nnectarium\nnectarivorous\nnectarize\nnectarlike\nnectarous\nnectary\nnectiferous\nnectocalycine\nnectocalyx\nNectonema\nnectophore\nnectopod\nNectria\nnectriaceous\nNectrioidaceae\nNecturidae\nNecturus\nNed\nnedder\nneddy\nNederlands\nnee\nneebor\nneebour\nneed\nneeder\nneedfire\nneedful\nneedfully\nneedfulness\nneedgates\nneedham\nneedily\nneediness\nneeding\nneedle\nneedlebill\nneedlebook\nneedlebush\nneedlecase\nneedled\nneedlefish\nneedleful\nneedlelike\nneedlemaker\nneedlemaking\nneedleman\nneedlemonger\nneedleproof\nneedler\nneedles\nneedless\nneedlessly\nneedlessness\nneedlestone\nneedlewoman\nneedlewood\nneedlework\nneedleworked\nneedleworker\nneedling\nneedly\nneedments\nneeds\nneedsome\nneedy\nneeger\nneeld\nneele\nneelghan\nneem\nneencephalic\nneencephalon\nNeengatu\nneep\nneepour\nneer\nneese\nneet\nneetup\nneeze\nnef\nnefandous\nnefandousness\nnefarious\nnefariously\nnefariousness\nnefast\nneffy\nneftgil\nnegate\nnegatedness\nnegation\nnegationalist\nnegationist\nnegative\nnegatively\nnegativeness\nnegativer\nnegativism\nnegativist\nnegativistic\nnegativity\nnegator\nnegatory\nnegatron\nneger\nneginoth\nneglect\nneglectable\nneglectedly\nneglectedness\nneglecter\nneglectful\nneglectfully\nneglectfulness\nneglectingly\nneglection\nneglective\nneglectively\nneglector\nneglectproof\nnegligee\nnegligence\nnegligency\nnegligent\nnegligently\nnegligibility\nnegligible\nnegligibleness\nnegligibly\nnegotiability\nnegotiable\nnegotiant\nnegotiate\nnegotiation\nnegotiator\nnegotiatory\nnegotiatress\nnegotiatrix\nNegress\nnegrillo\nnegrine\nNegritian\nNegritic\nNegritize\nNegrito\nNegritoid\nNegro\nnegro\nnegrodom\nNegrofy\nnegrohead\nnegrohood\nNegroid\nNegroidal\nnegroish\nNegroism\nNegroization\nNegroize\nnegrolike\nNegroloid\nNegrophil\nNegrophile\nNegrophilism\nNegrophilist\nNegrophobe\nNegrophobia\nNegrophobiac\nNegrophobist\nNegrotic\nNegundo\nNegus\nnegus\nNehantic\nNehemiah\nnehiloth\nnei\nneif\nneigh\nneighbor\nneighbored\nneighborer\nneighboress\nneighborhood\nneighboring\nneighborless\nneighborlike\nneighborliness\nneighborly\nneighborship\nneighborstained\nneighbourless\nneighbourlike\nneighbourship\nneigher\nNeil\nNeillia\nneiper\nNeisseria\nNeisserieae\nneist\nneither\nNejd\nNejdi\nNekkar\nnekton\nnektonic\nNelken\nNell\nNellie\nNelly\nnelson\nnelsonite\nnelumbian\nNelumbium\nNelumbo\nNelumbonaceae\nnema\nnemaline\nNemalion\nNemalionaceae\nNemalionales\nnemalite\nNemastomaceae\nNematelmia\nnematelminth\nNematelminthes\nnemathece\nnemathecial\nnemathecium\nNemathelmia\nnemathelminth\nNemathelminthes\nnematic\nnematoblast\nnematoblastic\nNematocera\nnematoceran\nnematocerous\nnematocide\nnematocyst\nnematocystic\nNematoda\nnematode\nnematodiasis\nnematogene\nnematogenic\nnematogenous\nnematognath\nNematognathi\nnematognathous\nnematogone\nnematogonous\nnematoid\nNematoidea\nnematoidean\nnematologist\nnematology\nNematomorpha\nnematophyton\nNematospora\nnematozooid\nNembutal\nNemean\nNemertea\nnemertean\nNemertina\nnemertine\nNemertinea\nnemertinean\nNemertini\nnemertoid\nnemeses\nNemesia\nnemesic\nNemesis\nNemichthyidae\nNemichthys\nNemocera\nnemoceran\nnemocerous\nNemopanthus\nNemophila\nnemophilist\nnemophilous\nnemophily\nnemoral\nNemorensian\nnemoricole\nNengahiba\nnenta\nnenuphar\nneo\nneoacademic\nneoanthropic\nNeoarctic\nneoarsphenamine\nNeobalaena\nNeobeckia\nneoblastic\nneobotanist\nneobotany\nNeocene\nNeoceratodus\nneocerotic\nneoclassic\nneoclassicism\nneoclassicist\nNeocomian\nneocosmic\nneocracy\nneocriticism\nneocyanine\nneocyte\nneocytosis\nneodamode\nneodidymium\nneodymium\nNeofabraea\nneofetal\nneofetus\nNeofiber\nneoformation\nneoformative\nNeogaea\nNeogaean\nneogamous\nneogamy\nNeogene\nneogenesis\nneogenetic\nNeognathae\nneognathic\nneognathous\nneogrammarian\nneogrammatical\nneographic\nneohexane\nNeohipparion\nneoholmia\nneoholmium\nneoimpressionism\nneoimpressionist\nneolalia\nneolater\nneolatry\nneolith\nneolithic\nneologian\nneologianism\nneologic\nneological\nneologically\nneologism\nneologist\nneologistic\nneologistical\nneologization\nneologize\nneology\nneomedievalism\nneomenia\nneomenian\nNeomeniidae\nneomiracle\nneomodal\nneomorph\nNeomorpha\nneomorphic\nneomorphism\nNeomylodon\nneon\nneonatal\nneonate\nneonatus\nneonomian\nneonomianism\nneontology\nneonychium\nneopagan\nneopaganism\nneopaganize\nNeopaleozoic\nneopallial\nneopallium\nneoparaffin\nneophilism\nneophilological\nneophilologist\nneophobia\nneophobic\nneophrastic\nNeophron\nneophyte\nneophytic\nneophytish\nneophytism\nNeopieris\nneoplasia\nneoplasm\nneoplasma\nneoplasmata\nneoplastic\nneoplasticism\nneoplasty\nNeoplatonic\nNeoplatonician\nNeoplatonism\nNeoplatonist\nneoprene\nneorama\nneorealism\nNeornithes\nneornithic\nNeosalvarsan\nNeosorex\nNeosporidia\nneossin\nneossology\nneossoptile\nneostriatum\nneostyle\nneoteinia\nneoteinic\nneotenia\nneotenic\nneoteny\nneoteric\nneoterically\nneoterism\nneoterist\nneoteristic\nneoterize\nneothalamus\nNeotoma\nNeotragus\nNeotremata\nNeotropic\nNeotropical\nneotype\nneovitalism\nneovolcanic\nNeowashingtonia\nneoytterbium\nneoza\nNeozoic\nNep\nnep\nNepa\nNepal\nNepalese\nNepali\nNepenthaceae\nnepenthaceous\nnepenthe\nnepenthean\nNepenthes\nnepenthes\nneper\nNeperian\nNepeta\nnephalism\nnephalist\nNephele\nnephele\nnepheligenous\nnepheline\nnephelinic\nnephelinite\nnephelinitic\nnephelinitoid\nnephelite\nNephelium\nnephelognosy\nnepheloid\nnephelometer\nnephelometric\nnephelometrical\nnephelometrically\nnephelometry\nnephelorometer\nnepheloscope\nnephesh\nnephew\nnephewship\nNephila\nNephilinae\nNephite\nnephogram\nnephograph\nnephological\nnephologist\nnephology\nnephoscope\nnephradenoma\nnephralgia\nnephralgic\nnephrapostasis\nnephratonia\nnephrauxe\nnephrectasia\nnephrectasis\nnephrectomize\nnephrectomy\nnephrelcosis\nnephremia\nnephremphraxis\nnephria\nnephric\nnephridia\nnephridial\nnephridiopore\nnephridium\nnephrism\nnephrite\nnephritic\nnephritical\nnephritis\nnephroabdominal\nnephrocardiac\nnephrocele\nnephrocoele\nnephrocolic\nnephrocolopexy\nnephrocoloptosis\nnephrocystitis\nnephrocystosis\nnephrocyte\nnephrodinic\nNephrodium\nnephroerysipelas\nnephrogastric\nnephrogenetic\nnephrogenic\nnephrogenous\nnephrogonaduct\nnephrohydrosis\nnephrohypertrophy\nnephroid\nNephrolepis\nnephrolith\nnephrolithic\nnephrolithotomy\nnephrologist\nnephrology\nnephrolysin\nnephrolysis\nnephrolytic\nnephromalacia\nnephromegaly\nnephromere\nnephron\nnephroncus\nnephroparalysis\nnephropathic\nnephropathy\nnephropexy\nnephrophthisis\nnephropore\nNephrops\nNephropsidae\nnephroptosia\nnephroptosis\nnephropyelitis\nnephropyeloplasty\nnephropyosis\nnephrorrhagia\nnephrorrhaphy\nnephros\nnephrosclerosis\nnephrosis\nnephrostoma\nnephrostome\nnephrostomial\nnephrostomous\nnephrostomy\nnephrotome\nnephrotomize\nnephrotomy\nnephrotoxic\nnephrotoxicity\nnephrotoxin\nnephrotuberculosis\nnephrotyphoid\nnephrotyphus\nnephrozymosis\nNepidae\nnepionic\nnepman\nnepotal\nnepote\nnepotic\nnepotious\nnepotism\nnepotist\nnepotistical\nnepouite\nNeptune\nNeptunean\nNeptunian\nneptunism\nneptunist\nneptunium\nNereid\nNereidae\nnereidiform\nNereidiformia\nNereis\nnereite\nNereocystis\nNeri\nNerine\nnerine\nNerita\nneritic\nNeritidae\nNeritina\nneritoid\nNerium\nNeroic\nNeronian\nNeronic\nNeronize\nnerterology\nNerthridae\nNerthrus\nnerval\nnervate\nnervation\nnervature\nnerve\nnerveless\nnervelessly\nnervelessness\nnervelet\nnerveproof\nnerver\nnerveroot\nnervid\nnerviduct\nNervii\nnervily\nnervimotion\nnervimotor\nnervimuscular\nnervine\nnerviness\nnerving\nnervish\nnervism\nnervomuscular\nnervosanguineous\nnervose\nnervosism\nnervosity\nnervous\nnervously\nnervousness\nnervular\nnervule\nnervulet\nnervulose\nnervuration\nnervure\nnervy\nnescience\nnescient\nnese\nnesh\nneshly\nneshness\nNesiot\nnesiote\nNeskhi\nNeslia\nNesogaea\nNesogaean\nNesokia\nNesonetta\nNesotragus\nNespelim\nnesquehonite\nness\nnesslerization\nNesslerize\nnesslerize\nnest\nnestable\nnestage\nnester\nnestful\nnestiatria\nnestitherapy\nnestle\nnestler\nnestlike\nnestling\nNestor\nNestorian\nNestorianism\nNestorianize\nNestorianizer\nnestorine\nnesty\nNet\nnet\nnetball\nnetbraider\nnetbush\nnetcha\nNetchilik\nnete\nneter\nnetful\nneth\nnetheist\nnether\nNetherlander\nNetherlandian\nNetherlandic\nNetherlandish\nnethermore\nnethermost\nnetherstock\nnetherstone\nnetherward\nnetherwards\nNethinim\nneti\nnetleaf\nnetlike\nnetmaker\nnetmaking\nnetman\nnetmonger\nnetop\nnetsman\nnetsuke\nnettable\nNettapus\nnetted\nnetter\nNettie\nnetting\nNettion\nnettle\nnettlebed\nnettlebird\nnettlefire\nnettlefish\nnettlefoot\nnettlelike\nnettlemonger\nnettler\nnettlesome\nnettlewort\nnettling\nnettly\nNetty\nnetty\nnetwise\nnetwork\nNeudeckian\nneugroschen\nneuma\nneumatic\nneumatize\nneume\nneumic\nneurad\nneuradynamia\nneural\nneurale\nneuralgia\nneuralgiac\nneuralgic\nneuralgiform\nneuralgy\nneuralist\nneurapophyseal\nneurapophysial\nneurapophysis\nneurarthropathy\nneurasthenia\nneurasthenic\nneurasthenical\nneurasthenically\nneurataxia\nneurataxy\nneuration\nneuratrophia\nneuratrophic\nneuratrophy\nneuraxial\nneuraxis\nneuraxon\nneuraxone\nneurectasia\nneurectasis\nneurectasy\nneurectome\nneurectomic\nneurectomy\nneurectopia\nneurectopy\nneurenteric\nneurepithelium\nneurergic\nneurexairesis\nneurhypnology\nneurhypnotist\nneuriatry\nneuric\nneurilema\nneurilematic\nneurilemma\nneurilemmal\nneurilemmatic\nneurilemmatous\nneurilemmitis\nneurility\nneurin\nneurine\nneurinoma\nneurism\nneurite\nneuritic\nneuritis\nneuroanatomical\nneuroanatomy\nneurobiotactic\nneurobiotaxis\nneuroblast\nneuroblastic\nneuroblastoma\nneurocanal\nneurocardiac\nneurocele\nneurocentral\nneurocentrum\nneurochemistry\nneurochitin\nneurochondrite\nneurochord\nneurochorioretinitis\nneurocirculatory\nneurocity\nneuroclonic\nneurocoele\nneurocoelian\nneurocyte\nneurocytoma\nneurodegenerative\nneurodendrite\nneurodendron\nneurodermatitis\nneurodermatosis\nneurodermitis\nneurodiagnosis\nneurodynamic\nneurodynia\nneuroepidermal\nneuroepithelial\nneuroepithelium\nneurofibril\nneurofibrilla\nneurofibrillae\nneurofibrillar\nneurofibroma\nneurofibromatosis\nneurofil\nneuroganglion\nneurogastralgia\nneurogastric\nneurogenesis\nneurogenetic\nneurogenic\nneurogenous\nneuroglandular\nneuroglia\nneurogliac\nneuroglial\nneurogliar\nneuroglic\nneuroglioma\nneurogliosis\nneurogram\nneurogrammic\nneurographic\nneurography\nneurohistology\nneurohumor\nneurohumoral\nneurohypnology\nneurohypnotic\nneurohypnotism\nneurohypophysis\nneuroid\nneurokeratin\nneurokyme\nneurological\nneurologist\nneurologize\nneurology\nneurolymph\nneurolysis\nneurolytic\nneuroma\nneuromalacia\nneuromalakia\nneuromast\nneuromastic\nneuromatosis\nneuromatous\nneuromere\nneuromerism\nneuromerous\nneuromimesis\nneuromimetic\nneuromotor\nneuromuscular\nneuromusculature\nneuromyelitis\nneuromyic\nneuron\nneuronal\nneurone\nneuronic\nneuronism\nneuronist\nneuronophagia\nneuronophagy\nneuronym\nneuronymy\nneuroparalysis\nneuroparalytic\nneuropath\nneuropathic\nneuropathical\nneuropathically\nneuropathist\nneuropathological\nneuropathologist\nneuropathology\nneuropathy\nNeurope\nneurophagy\nneurophil\nneurophile\nneurophilic\nneurophysiological\nneurophysiology\nneuropile\nneuroplasm\nneuroplasmic\nneuroplasty\nneuroplexus\nneuropodial\nneuropodium\nneuropodous\nneuropore\nneuropsychiatric\nneuropsychiatrist\nneuropsychiatry\nneuropsychic\nneuropsychological\nneuropsychologist\nneuropsychology\nneuropsychopathic\nneuropsychopathy\nneuropsychosis\nneuropter\nNeuroptera\nneuropteran\nNeuropteris\nneuropterist\nneuropteroid\nNeuropteroidea\nneuropterological\nneuropterology\nneuropteron\nneuropterous\nneuroretinitis\nneurorrhaphy\nNeurorthoptera\nneurorthopteran\nneurorthopterous\nneurosal\nneurosarcoma\nneurosclerosis\nneuroses\nneurosis\nneuroskeletal\nneuroskeleton\nneurosome\nneurospasm\nneurospongium\nneurosthenia\nneurosurgeon\nneurosurgery\nneurosurgical\nneurosuture\nneurosynapse\nneurosyphilis\nneurotendinous\nneurotension\nneurotherapeutics\nneurotherapist\nneurotherapy\nneurothlipsis\nneurotic\nneurotically\nneuroticism\nneuroticize\nneurotization\nneurotome\nneurotomical\nneurotomist\nneurotomize\nneurotomy\nneurotonic\nneurotoxia\nneurotoxic\nneurotoxin\nneurotripsy\nneurotrophic\nneurotrophy\nneurotropic\nneurotropism\nneurovaccination\nneurovaccine\nneurovascular\nneurovisceral\nneurula\nneurypnological\nneurypnologist\nneurypnology\nNeustrian\nneuter\nneuterdom\nneuterlike\nneuterly\nneuterness\nneutral\nneutralism\nneutralist\nneutrality\nneutralization\nneutralize\nneutralizer\nneutrally\nneutralness\nneutrino\nneutroceptive\nneutroceptor\nneutroclusion\nNeutrodyne\nneutrologistic\nneutron\nneutropassive\nneutrophile\nneutrophilia\nneutrophilic\nneutrophilous\nNevada\nNevadan\nnevadite\nneve\nnevel\nnever\nneverland\nnevermore\nnevertheless\nNeville\nnevo\nnevoid\nNevome\nnevoy\nnevus\nnevyanskite\nnew\nNewar\nNewari\nnewberyite\nnewcal\nNewcastle\nnewcome\nnewcomer\nnewel\nnewelty\nnewfangle\nnewfangled\nnewfangledism\nnewfangledly\nnewfangledness\nnewfanglement\nNewfoundland\nNewfoundlander\nNewichawanoc\nnewing\nnewings\nnewish\nnewlandite\nnewly\nnewlywed\nNewmanism\nNewmanite\nNewmanize\nnewmarket\nnewness\nNewport\nnews\nnewsbill\nnewsboard\nnewsboat\nnewsboy\nnewscast\nnewscaster\nnewscasting\nnewsful\nnewsiness\nnewsless\nnewslessness\nnewsletter\nnewsman\nnewsmonger\nnewsmongering\nnewsmongery\nnewspaper\nnewspaperdom\nnewspaperese\nnewspaperish\nnewspaperized\nnewspaperman\nnewspaperwoman\nnewspapery\nnewsprint\nnewsreader\nnewsreel\nnewsroom\nnewssheet\nnewsstand\nnewsteller\nnewsworthiness\nnewsworthy\nnewsy\nnewt\nnewtake\nnewton\nNewtonian\nNewtonianism\nNewtonic\nNewtonist\nnewtonite\nnexal\nnext\nnextly\nnextness\nnexum\nnexus\nneyanda\nngai\nngaio\nngapi\nNgoko\nNguyen\nNhan\nNheengatu\nni\nniacin\nNiagara\nNiagaran\nNiall\nNiantic\nNias\nNiasese\nniata\nnib\nnibbana\nnibbed\nnibber\nnibble\nnibbler\nnibblingly\nnibby\nniblick\nniblike\nnibong\nnibs\nnibsome\nNicaean\nNicaragua\nNicaraguan\nNicarao\nniccolic\nniccoliferous\nniccolite\nniccolous\nNice\nnice\nniceish\nniceling\nnicely\nNicene\nniceness\nNicenian\nNicenist\nnicesome\nnicetish\nnicety\nNichael\nniche\nnichelino\nnicher\nNicholas\nNici\nNick\nnick\nnickel\nnickelage\nnickelic\nnickeliferous\nnickeline\nnickeling\nnickelization\nnickelize\nnickellike\nnickelodeon\nnickelous\nnickeltype\nnicker\nnickerpecker\nnickey\nNickie\nNickieben\nnicking\nnickle\nnickname\nnicknameable\nnicknamee\nnicknameless\nnicknamer\nNickneven\nnickstick\nnicky\nNicobar\nNicobarese\nNicodemite\nNicodemus\nNicol\nNicolaitan\nNicolaitanism\nNicolas\nnicolayite\nNicolette\nNicolo\nnicolo\nNicomachean\nnicotia\nnicotian\nNicotiana\nnicotianin\nnicotic\nnicotinamide\nnicotine\nnicotinean\nnicotined\nnicotineless\nnicotinian\nnicotinic\nnicotinism\nnicotinize\nnicotism\nnicotize\nnictate\nnictation\nnictitant\nnictitate\nnictitation\nnid\nnidal\nnidamental\nnidana\nnidation\nnidatory\nniddering\nniddick\nniddle\nnide\nnidge\nnidget\nnidgety\nnidi\nnidicolous\nnidificant\nnidificate\nnidification\nnidificational\nnidifugous\nnidify\nniding\nnidologist\nnidology\nnidor\nnidorosity\nnidorous\nnidorulent\nnidulant\nNidularia\nNidulariaceae\nnidulariaceous\nNidulariales\nnidulate\nnidulation\nnidulus\nnidus\nniece\nnieceless\nnieceship\nniellated\nnielled\nniellist\nniello\nNiels\nniepa\nNierembergia\nNiersteiner\nNietzschean\nNietzscheanism\nNietzscheism\nnieve\nnieveta\nnievling\nnife\nnifesima\nniffer\nnific\nnifle\nnifling\nnifty\nnig\nNigel\nNigella\nNigerian\nniggard\nniggardize\nniggardliness\nniggardling\nniggardly\nniggardness\nnigger\nniggerdom\nniggerfish\nniggergoose\nniggerhead\nniggerish\nniggerism\nniggerling\nniggertoe\nniggerweed\nniggery\nniggle\nniggler\nniggling\nnigglingly\nniggly\nnigh\nnighly\nnighness\nnight\nnightcap\nnightcapped\nnightcaps\nnightchurr\nnightdress\nnighted\nnightfall\nnightfish\nnightflit\nnightfowl\nnightgown\nnighthawk\nnightie\nnightingale\nnightingalize\nnightjar\nnightless\nnightlessness\nnightlike\nnightlong\nnightly\nnightman\nnightmare\nnightmarish\nnightmarishly\nnightmary\nnights\nnightshade\nnightshine\nnightshirt\nnightstock\nnightstool\nnighttide\nnighttime\nnightwalker\nnightwalking\nnightward\nnightwards\nnightwear\nnightwork\nnightworker\nnignay\nnignye\nnigori\nnigranilin\nnigraniline\nnigre\nnigrescence\nnigrescent\nnigresceous\nnigrescite\nnigrification\nnigrified\nnigrify\nnigrine\nNigritian\nnigrities\nnigritude\nnigritudinous\nnigrosine\nnigrous\nnigua\nNihal\nnihilianism\nnihilianistic\nnihilification\nnihilify\nnihilism\nnihilist\nnihilistic\nnihilitic\nnihility\nnikau\nNikeno\nnikethamide\nNikko\nniklesite\nNikolai\nnil\nNile\nnilgai\nNilometer\nNilometric\nNiloscope\nNilot\nNilotic\nNilous\nnilpotent\nNils\nnim\nnimb\nnimbated\nnimbed\nnimbi\nnimbiferous\nnimbification\nnimble\nnimblebrained\nnimbleness\nnimbly\nnimbose\nnimbosity\nnimbus\nnimbused\nnimiety\nniminy\nnimious\nNimkish\nnimmer\nNimrod\nNimrodian\nNimrodic\nNimrodical\nNimrodize\nnimshi\nNina\nnincom\nnincompoop\nnincompoopery\nnincompoophood\nnincompoopish\nnine\nninebark\nninefold\nnineholes\nninepegs\nninepence\nninepenny\nninepin\nninepins\nninescore\nnineted\nnineteen\nnineteenfold\nnineteenth\nnineteenthly\nninetieth\nninety\nninetyfold\nninetyish\nninetyknot\nNinevite\nNinevitical\nNinevitish\nNing\nNingpo\nNinja\nninny\nninnyhammer\nninnyish\nninnyism\nninnyship\nninnywatch\nNinon\nninon\nNinox\nninth\nninthly\nnintu\nninut\nniobate\nNiobe\nNiobean\nniobic\nNiobid\nNiobite\nniobite\nniobium\nniobous\nniog\nniota\nNip\nnip\nnipa\nnipcheese\nniphablepsia\nniphotyphlosis\nNipissing\nNipmuc\nnipper\nnipperkin\nnippers\nnippily\nnippiness\nnipping\nnippingly\nnippitate\nnipple\nnippleless\nnipplewort\nNipponese\nNipponism\nnipponium\nNipponize\nnippy\nnipter\nNiquiran\nnirles\nnirmanakaya\nnirvana\nnirvanic\nNisaean\nNisan\nnisei\nNishada\nnishiki\nnisnas\nnispero\nNisqualli\nnisse\nnisus\nnit\nnitch\nnitchevo\nNitella\nnitency\nnitently\nniter\nniterbush\nnitered\nnither\nnithing\nnitid\nnitidous\nnitidulid\nNitidulidae\nnito\nniton\nnitramine\nnitramino\nnitranilic\nnitraniline\nnitrate\nnitratine\nnitration\nnitrator\nNitrian\nnitriary\nnitric\nnitridation\nnitride\nnitriding\nnitridization\nnitridize\nnitrifaction\nnitriferous\nnitrifiable\nnitrification\nnitrifier\nnitrify\nnitrile\nNitriot\nnitrite\nnitro\nnitroalizarin\nnitroamine\nnitroaniline\nNitrobacter\nnitrobacteria\nNitrobacteriaceae\nNitrobacterieae\nnitrobarite\nnitrobenzene\nnitrobenzol\nnitrobenzole\nnitrocalcite\nnitrocellulose\nnitrocellulosic\nnitrochloroform\nnitrocotton\nnitroform\nnitrogelatin\nnitrogen\nnitrogenate\nnitrogenation\nnitrogenic\nnitrogenization\nnitrogenize\nnitrogenous\nnitroglycerin\nnitrohydrochloric\nnitrolamine\nnitrolic\nnitrolime\nnitromagnesite\nnitrometer\nnitrometric\nnitromuriate\nnitromuriatic\nnitronaphthalene\nnitroparaffin\nnitrophenol\nnitrophilous\nnitrophyte\nnitrophytic\nnitroprussiate\nnitroprussic\nnitroprusside\nnitrosamine\nnitrosate\nnitrosification\nnitrosify\nnitrosite\nnitrosobacteria\nnitrosochloride\nNitrosococcus\nNitrosomonas\nnitrososulphuric\nnitrostarch\nnitrosulphate\nnitrosulphonic\nnitrosulphuric\nnitrosyl\nnitrosylsulphuric\nnitrotoluene\nnitrous\nnitroxyl\nnitryl\nnitter\nnitty\nnitwit\nNitzschia\nNitzschiaceae\nNiuan\nNiue\nnival\nnivation\nnivellate\nnivellation\nnivellator\nnivellization\nnivenite\nniveous\nnivicolous\nnivosity\nnix\nnixie\nniyoga\nNizam\nnizam\nnizamate\nnizamut\nnizy\nnjave\nNo\nno\nnoa\nNoachian\nNoachic\nNoachical\nNoachite\nNoah\nNoahic\nNoam\nnob\nnobber\nnobbily\nnobble\nnobbler\nnobbut\nnobby\nnobiliary\nnobilify\nnobilitate\nnobilitation\nnobility\nnoble\nnoblehearted\nnobleheartedly\nnobleheartedness\nnobleman\nnoblemanly\nnobleness\nnoblesse\nnoblewoman\nnobley\nnobly\nnobody\nnobodyness\nnobs\nnocake\nNocardia\nnocardiosis\nnocent\nnocerite\nnociassociation\nnociceptive\nnociceptor\nnociperception\nnociperceptive\nnock\nnocket\nnocktat\nnoctambulant\nnoctambulation\nnoctambule\nnoctambulism\nnoctambulist\nnoctambulistic\nnoctambulous\nNocten\nnoctidial\nnoctidiurnal\nnoctiferous\nnoctiflorous\nNoctilio\nNoctilionidae\nNoctiluca\nnoctiluca\nnoctilucal\nnoctilucan\nnoctilucence\nnoctilucent\nNoctilucidae\nnoctilucin\nnoctilucine\nnoctilucous\nnoctiluminous\nnoctipotent\nnoctivagant\nnoctivagation\nnoctivagous\nnoctograph\nnoctovision\nNoctuae\nnoctuid\nNoctuidae\nnoctuiform\nnoctule\nnocturia\nnocturn\nnocturnal\nnocturnally\nnocturne\nnocuity\nnocuous\nnocuously\nnocuousness\nnod\nnodal\nnodality\nnodated\nnodder\nnodding\nnoddingly\nnoddle\nnoddy\nnode\nnoded\nnodi\nnodiak\nnodical\nnodicorn\nnodiferous\nnodiflorous\nnodiform\nNodosaria\nnodosarian\nnodosariform\nnodosarine\nnodose\nnodosity\nnodous\nnodular\nnodulate\nnodulated\nnodulation\nnodule\nnoduled\nnodulize\nnodulose\nnodulous\nnodulus\nnodus\nnoegenesis\nnoegenetic\nNoel\nnoel\nnoematachograph\nnoematachometer\nnoematachometic\nNoemi\nNoetic\nnoetic\nnoetics\nnog\nnogada\nNogai\nnogal\nnoggen\nnoggin\nnogging\nnoghead\nnogheaded\nnohow\nNohuntsik\nnoibwood\nnoil\nnoilage\nnoiler\nnoily\nnoint\nnointment\nnoir\nnoise\nnoiseful\nnoisefully\nnoiseless\nnoiselessly\nnoiselessness\nnoisemaker\nnoisemaking\nnoiseproof\nnoisette\nnoisily\nnoisiness\nnoisome\nnoisomely\nnoisomeness\nnoisy\nnokta\nNolascan\nnolition\nNoll\nnoll\nnolle\nnolleity\nnollepros\nnolo\nnoma\nnomad\nnomadian\nnomadic\nnomadical\nnomadically\nNomadidae\nnomadism\nnomadization\nnomadize\nnomancy\nnomarch\nnomarchy\nNomarthra\nnomarthral\nnombril\nnome\nNomeidae\nnomenclate\nnomenclative\nnomenclator\nnomenclatorial\nnomenclatorship\nnomenclatory\nnomenclatural\nnomenclature\nnomenclaturist\nNomeus\nnomial\nnomic\nnomina\nnominable\nnominal\nnominalism\nnominalist\nnominalistic\nnominality\nnominally\nnominate\nnominated\nnominately\nnomination\nnominatival\nnominative\nnominatively\nnominator\nnominatrix\nnominature\nnominee\nnomineeism\nnominy\nnomism\nnomisma\nnomismata\nnomistic\nnomocanon\nnomocracy\nnomogenist\nnomogenous\nnomogeny\nnomogram\nnomograph\nnomographer\nnomographic\nnomographical\nnomographically\nnomography\nnomological\nnomologist\nnomology\nnomopelmous\nnomophylax\nnomophyllous\nnomos\nnomotheism\nnomothete\nnomothetes\nnomothetic\nnomothetical\nnon\nNona\nnonabandonment\nnonabdication\nnonabiding\nnonability\nnonabjuration\nnonabjurer\nnonabolition\nnonabridgment\nnonabsentation\nnonabsolute\nnonabsolution\nnonabsorbable\nnonabsorbent\nnonabsorptive\nnonabstainer\nnonabstaining\nnonabstemious\nnonabstention\nnonabstract\nnonacademic\nnonacceding\nnonacceleration\nnonaccent\nnonacceptance\nnonacceptant\nnonacceptation\nnonaccess\nnonaccession\nnonaccessory\nnonaccidental\nnonaccompaniment\nnonaccompanying\nnonaccomplishment\nnonaccredited\nnonaccretion\nnonachievement\nnonacid\nnonacknowledgment\nnonacosane\nnonacoustic\nnonacquaintance\nnonacquiescence\nnonacquiescent\nnonacquisitive\nnonacquittal\nnonact\nnonactinic\nnonaction\nnonactionable\nnonactive\nnonactuality\nnonaculeate\nnonacute\nnonadditive\nnonadecane\nnonadherence\nnonadherent\nnonadhesion\nnonadhesive\nnonadjacent\nnonadjectival\nnonadjournment\nnonadjustable\nnonadjustive\nnonadjustment\nnonadministrative\nnonadmiring\nnonadmission\nnonadmitted\nnonadoption\nNonadorantes\nnonadornment\nnonadult\nnonadvancement\nnonadvantageous\nnonadventitious\nnonadventurous\nnonadverbial\nnonadvertence\nnonadvertency\nnonadvocate\nnonaerating\nnonaerobiotic\nnonaesthetic\nnonaffection\nnonaffiliated\nnonaffirmation\nnonage\nnonagenarian\nnonagency\nnonagent\nnonagesimal\nnonagglutinative\nnonagglutinator\nnonaggression\nnonaggressive\nnonagon\nnonagrarian\nnonagreement\nnonagricultural\nnonahydrate\nnonaid\nnonair\nnonalarmist\nnonalcohol\nnonalcoholic\nnonalgebraic\nnonalienating\nnonalienation\nnonalignment\nnonalkaloidal\nnonallegation\nnonallegorical\nnonalliterated\nnonalliterative\nnonallotment\nnonalluvial\nnonalphabetic\nnonaltruistic\nnonaluminous\nnonamalgamable\nnonamendable\nnonamino\nnonamotion\nnonamphibious\nnonamputation\nnonanalogy\nnonanalytical\nnonanalyzable\nnonanalyzed\nnonanaphoric\nnonanaphthene\nnonanatomical\nnonancestral\nnonane\nnonanesthetized\nnonangelic\nnonangling\nnonanimal\nnonannexation\nnonannouncement\nnonannuitant\nnonannulment\nnonanoic\nnonanonymity\nnonanswer\nnonantagonistic\nnonanticipative\nnonantigenic\nnonapologetic\nnonapostatizing\nnonapostolic\nnonapparent\nnonappealable\nnonappearance\nnonappearer\nnonappearing\nnonappellate\nnonappendicular\nnonapplication\nnonapply\nnonappointment\nnonapportionable\nnonapposable\nnonappraisal\nnonappreciation\nnonapprehension\nnonappropriation\nnonapproval\nnonaqueous\nnonarbitrable\nnonarcing\nnonargentiferous\nnonaristocratic\nnonarithmetical\nnonarmament\nnonarmigerous\nnonaromatic\nnonarraignment\nnonarrival\nnonarsenical\nnonarterial\nnonartesian\nnonarticulated\nnonarticulation\nnonartistic\nnonary\nnonascendancy\nnonascertainable\nnonascertaining\nnonascetic\nnonascription\nnonaseptic\nnonaspersion\nnonasphalt\nnonaspirate\nnonaspiring\nnonassault\nnonassent\nnonassentation\nnonassented\nnonassenting\nnonassertion\nnonassertive\nnonassessable\nnonassessment\nnonassignable\nnonassignment\nnonassimilable\nnonassimilating\nnonassimilation\nnonassistance\nnonassistive\nnonassociable\nnonassortment\nnonassurance\nnonasthmatic\nnonastronomical\nnonathletic\nnonatmospheric\nnonatonement\nnonattached\nnonattachment\nnonattainment\nnonattendance\nnonattendant\nnonattention\nnonattestation\nnonattribution\nnonattributive\nnonaugmentative\nnonauricular\nnonauriferous\nnonauthentication\nnonauthoritative\nnonautomatic\nnonautomotive\nnonavoidance\nnonaxiomatic\nnonazotized\nnonbachelor\nnonbacterial\nnonbailable\nnonballoting\nnonbanishment\nnonbankable\nnonbarbarous\nnonbaronial\nnonbase\nnonbasement\nnonbasic\nnonbasing\nnonbathing\nnonbearded\nnonbearing\nnonbeing\nnonbeliever\nnonbelieving\nnonbelligerent\nnonbending\nnonbenevolent\nnonbetrayal\nnonbeverage\nnonbilabiate\nnonbilious\nnonbinomial\nnonbiological\nnonbitter\nnonbituminous\nnonblack\nnonblameless\nnonbleeding\nnonblended\nnonblockaded\nnonblocking\nnonblooded\nnonblooming\nnonbodily\nnonbookish\nnonborrower\nnonbotanical\nnonbourgeois\nnonbranded\nnonbreakable\nnonbreeder\nnonbreeding\nnonbroodiness\nnonbroody\nnonbrowsing\nnonbudding\nnonbulbous\nnonbulkhead\nnonbureaucratic\nnonburgage\nnonburgess\nnonburnable\nnonburning\nnonbursting\nnonbusiness\nnonbuying\nnoncabinet\nnoncaffeine\nnoncaking\nNoncalcarea\nnoncalcareous\nnoncalcified\nnoncallability\nnoncallable\nnoncancellable\nnoncannibalistic\nnoncanonical\nnoncanonization\nnoncanvassing\nnoncapillarity\nnoncapillary\nnoncapital\nnoncapitalist\nnoncapitalistic\nnoncapitulation\nnoncapsizable\nnoncapture\nnoncarbonate\nnoncareer\nnoncarnivorous\nnoncarrier\nnoncartelized\nnoncaste\nnoncastigation\nnoncataloguer\nnoncatarrhal\nnoncatechizable\nnoncategorical\nnoncathedral\nnoncatholicity\nnoncausality\nnoncausation\nnonce\nnoncelebration\nnoncelestial\nnoncellular\nnoncellulosic\nnoncensored\nnoncensorious\nnoncensus\nnoncentral\nnoncereal\nnoncerebral\nnonceremonial\nnoncertain\nnoncertainty\nnoncertified\nnonchafing\nnonchalance\nnonchalant\nnonchalantly\nnonchalantness\nnonchalky\nnonchallenger\nnonchampion\nnonchangeable\nnonchanging\nnoncharacteristic\nnonchargeable\nnonchastisement\nnonchastity\nnonchemical\nnonchemist\nnonchivalrous\nnonchokable\nnonchokebore\nnonchronological\nnonchurch\nnonchurched\nnonchurchgoer\nnonciliate\nnoncircuit\nnoncircuital\nnoncircular\nnoncirculation\nnoncitation\nnoncitizen\nnoncivilized\nnonclaim\nnonclaimable\nnonclassable\nnonclassical\nnonclassifiable\nnonclassification\nnonclastic\nnonclearance\nnoncleistogamic\nnonclergyable\nnonclerical\nnonclimbable\nnonclinical\nnonclose\nnonclosure\nnonclotting\nnoncoagulability\nnoncoagulable\nnoncoagulation\nnoncoalescing\nnoncock\nnoncoercion\nnoncoercive\nnoncognate\nnoncognition\nnoncognitive\nnoncognizable\nnoncognizance\nnoncoherent\nnoncohesion\nnoncohesive\nnoncoinage\nnoncoincidence\nnoncoincident\nnoncoincidental\nnoncoking\nnoncollaboration\nnoncollaborative\nnoncollapsible\nnoncollectable\nnoncollection\nnoncollegiate\nnoncollinear\nnoncolloid\nnoncollusion\nnoncollusive\nnoncolonial\nnoncoloring\nnoncom\nnoncombat\nnoncombatant\nnoncombination\nnoncombining\nnoncombustible\nnoncombustion\nnoncome\nnoncoming\nnoncommemoration\nnoncommencement\nnoncommendable\nnoncommensurable\nnoncommercial\nnoncommissioned\nnoncommittal\nnoncommittalism\nnoncommittally\nnoncommittalness\nnoncommonable\nnoncommorancy\nnoncommunal\nnoncommunicable\nnoncommunicant\nnoncommunicating\nnoncommunication\nnoncommunion\nnoncommunist\nnoncommunistic\nnoncommutative\nnoncompearance\nnoncompensating\nnoncompensation\nnoncompetency\nnoncompetent\nnoncompeting\nnoncompetitive\nnoncompetitively\nnoncomplaisance\nnoncompletion\nnoncompliance\nnoncomplicity\nnoncomplying\nnoncomposite\nnoncompoundable\nnoncompounder\nnoncomprehension\nnoncompressible\nnoncompression\nnoncompulsion\nnoncomputation\nnoncon\nnonconcealment\nnonconceiving\nnonconcentration\nnonconception\nnonconcern\nnonconcession\nnonconciliating\nnonconcludency\nnonconcludent\nnonconcluding\nnonconclusion\nnonconcordant\nnonconcur\nnonconcurrence\nnonconcurrency\nnonconcurrent\nnoncondensable\nnoncondensation\nnoncondensible\nnoncondensing\nnoncondimental\nnonconditioned\nnoncondonation\nnonconducive\nnonconductibility\nnonconductible\nnonconducting\nnonconduction\nnonconductive\nnonconductor\nnonconfederate\nnonconferrable\nnonconfession\nnonconficient\nnonconfident\nnonconfidential\nnonconfinement\nnonconfirmation\nnonconfirmative\nnonconfiscable\nnonconfiscation\nnonconfitent\nnonconflicting\nnonconform\nnonconformable\nnonconformably\nnonconformance\nnonconformer\nnonconforming\nnonconformism\nnonconformist\nnonconformistical\nnonconformistically\nnonconformitant\nnonconformity\nnonconfutation\nnoncongealing\nnoncongenital\nnoncongestion\nnoncongratulatory\nnoncongruent\nnonconjectural\nnonconjugal\nnonconjugate\nnonconjunction\nnonconnection\nnonconnective\nnonconnivance\nnonconnotative\nnonconnubial\nnonconscientious\nnonconscious\nnonconscription\nnonconsecration\nnonconsecutive\nnonconsent\nnonconsenting\nnonconsequence\nnonconsequent\nnonconservation\nnonconservative\nnonconserving\nnonconsideration\nnonconsignment\nnonconsistorial\nnonconsoling\nnonconsonant\nnonconsorting\nnonconspirator\nnonconspiring\nnonconstituent\nnonconstitutional\nnonconstraint\nnonconstruable\nnonconstruction\nnonconstructive\nnonconsular\nnonconsultative\nnonconsumable\nnonconsumption\nnoncontact\nnoncontagion\nnoncontagionist\nnoncontagious\nnoncontagiousness\nnoncontamination\nnoncontemplative\nnoncontending\nnoncontent\nnoncontention\nnoncontentious\nnoncontentiously\nnonconterminous\nnoncontiguity\nnoncontiguous\nnoncontinental\nnoncontingent\nnoncontinuance\nnoncontinuation\nnoncontinuous\nnoncontraband\nnoncontraction\nnoncontradiction\nnoncontradictory\nnoncontributing\nnoncontribution\nnoncontributor\nnoncontributory\nnoncontrivance\nnoncontrolled\nnoncontrolling\nnoncontroversial\nnonconvective\nnonconvenable\nnonconventional\nnonconvergent\nnonconversable\nnonconversant\nnonconversational\nnonconversion\nnonconvertible\nnonconveyance\nnonconviction\nnonconvivial\nnoncoplanar\nnoncopying\nnoncoring\nnoncorporate\nnoncorporeality\nnoncorpuscular\nnoncorrection\nnoncorrective\nnoncorrelation\nnoncorrespondence\nnoncorrespondent\nnoncorresponding\nnoncorroboration\nnoncorroborative\nnoncorrodible\nnoncorroding\nnoncorrosive\nnoncorruption\nnoncortical\nnoncosmic\nnoncosmopolitism\nnoncostraight\nnoncottager\nnoncotyledonous\nnoncounty\nnoncranking\nnoncreation\nnoncreative\nnoncredence\nnoncredent\nnoncredibility\nnoncredible\nnoncreditor\nnoncreeping\nnoncrenate\nnoncretaceous\nnoncriminal\nnoncriminality\nnoncrinoid\nnoncritical\nnoncrucial\nnoncruciform\nnoncrusading\nnoncrushability\nnoncrushable\nnoncrustaceous\nnoncrystalline\nnoncrystallizable\nnoncrystallized\nnoncrystallizing\nnonculmination\nnonculpable\nnoncultivated\nnoncultivation\nnonculture\nnoncumulative\nnoncurantist\nnoncurling\nnoncurrency\nnoncurrent\nnoncursive\nnoncurtailment\nnoncuspidate\nnoncustomary\nnoncutting\nnoncyclic\nnoncyclical\nnonda\nnondamageable\nnondamnation\nnondancer\nnondangerous\nnondatival\nnondealer\nnondebtor\nnondecadence\nnondecadent\nnondecalcified\nnondecane\nnondecasyllabic\nnondecatoic\nnondecaying\nnondeceivable\nnondeception\nnondeceptive\nNondeciduata\nnondeciduate\nnondeciduous\nnondecision\nnondeclarant\nnondeclaration\nnondeclarer\nnondecomposition\nnondecoration\nnondedication\nnondeduction\nnondefalcation\nnondefamatory\nnondefaulting\nnondefection\nnondefendant\nnondefense\nnondefensive\nnondeference\nnondeferential\nnondefiance\nnondefilement\nnondefining\nnondefinition\nnondefinitive\nnondeforestation\nnondegenerate\nnondegeneration\nnondegerming\nnondegradation\nnondegreased\nnondehiscent\nnondeist\nnondelegable\nnondelegate\nnondelegation\nnondeleterious\nnondeliberate\nnondeliberation\nnondelineation\nnondeliquescent\nnondelirious\nnondeliverance\nnondelivery\nnondemand\nnondemise\nnondemobilization\nnondemocratic\nnondemonstration\nnondendroid\nnondenial\nnondenominational\nnondenominationalism\nnondense\nnondenumerable\nnondenunciation\nnondepartmental\nnondeparture\nnondependence\nnondependent\nnondepletion\nnondeportation\nnondeported\nnondeposition\nnondepositor\nnondepravity\nnondepreciating\nnondepressed\nnondepression\nnondeprivable\nnonderivable\nnonderivative\nnonderogatory\nnondescript\nnondesecration\nnondesignate\nnondesigned\nnondesire\nnondesirous\nnondesisting\nnondespotic\nnondesquamative\nnondestructive\nnondesulphurized\nnondetachable\nnondetailed\nnondetention\nnondetermination\nnondeterminist\nnondeterrent\nnondetest\nnondetonating\nnondetrimental\nnondevelopable\nnondevelopment\nnondeviation\nnondevotional\nnondexterous\nnondiabetic\nnondiabolic\nnondiagnosis\nnondiagonal\nnondiagrammatic\nnondialectal\nnondialectical\nnondialyzing\nnondiametral\nnondiastatic\nnondiathermanous\nnondiazotizable\nnondichogamous\nnondichogamy\nnondichotomous\nnondictation\nnondictatorial\nnondictionary\nnondidactic\nnondieting\nnondifferentation\nnondifferentiable\nnondiffractive\nnondiffusing\nnondigestion\nnondilatable\nnondilution\nnondiocesan\nnondiphtheritic\nnondiphthongal\nnondiplomatic\nnondipterous\nnondirection\nnondirectional\nnondisagreement\nnondisappearing\nnondisarmament\nnondisbursed\nnondiscernment\nnondischarging\nnondisciplinary\nnondisclaim\nnondisclosure\nnondiscontinuance\nnondiscordant\nnondiscountable\nnondiscovery\nnondiscretionary\nnondiscrimination\nnondiscriminatory\nnondiscussion\nnondisestablishment\nnondisfigurement\nnondisfranchised\nnondisingenuous\nnondisintegration\nnondisinterested\nnondisjunct\nnondisjunction\nnondisjunctional\nnondisjunctive\nnondismemberment\nnondismissal\nnondisparaging\nnondisparate\nnondispensation\nnondispersal\nnondispersion\nnondisposal\nnondisqualifying\nnondissenting\nnondissolution\nnondistant\nnondistinctive\nnondistortion\nnondistribution\nnondistributive\nnondisturbance\nnondivergence\nnondivergent\nnondiversification\nnondivinity\nnondivisible\nnondivisiblity\nnondivision\nnondivisional\nnondivorce\nnondo\nnondoctrinal\nnondocumentary\nnondogmatic\nnondoing\nnondomestic\nnondomesticated\nnondominant\nnondonation\nnondramatic\nnondrinking\nnondropsical\nnondrying\nnonduality\nnondumping\nnonduplication\nnondutiable\nnondynastic\nnondyspeptic\nnone\nnonearning\nnoneastern\nnoneatable\nnonecclesiastical\nnonechoic\nnoneclectic\nnoneclipsing\nnonecompense\nnoneconomic\nnonedible\nnoneditor\nnoneditorial\nnoneducable\nnoneducation\nnoneducational\nnoneffective\nnoneffervescent\nnoneffete\nnonefficacious\nnonefficacy\nnonefficiency\nnonefficient\nnoneffusion\nnonego\nnonegoistical\nnonejection\nnonelastic\nnonelasticity\nnonelect\nnonelection\nnonelective\nnonelector\nnonelectric\nnonelectrical\nnonelectrification\nnonelectrified\nnonelectrized\nnonelectrocution\nnonelectrolyte\nnoneleemosynary\nnonelemental\nnonelementary\nnonelimination\nnonelopement\nnonemanating\nnonemancipation\nnonembarkation\nnonembellishment\nnonembezzlement\nnonembryonic\nnonemendation\nnonemergent\nnonemigration\nnonemission\nnonemotional\nnonemphatic\nnonemphatical\nnonempirical\nnonemploying\nnonemployment\nnonemulative\nnonenactment\nnonenclosure\nnonencroachment\nnonencyclopedic\nnonendemic\nnonendorsement\nnonenduring\nnonene\nnonenemy\nnonenergic\nnonenforceability\nnonenforceable\nnonenforcement\nnonengagement\nnonengineering\nnonenrolled\nnonent\nnonentailed\nnonenteric\nnonentertainment\nnonentitative\nnonentitive\nnonentitize\nnonentity\nnonentityism\nnonentomological\nnonentrant\nnonentres\nnonentry\nnonenumerated\nnonenunciation\nnonenvious\nnonenzymic\nnonephemeral\nnonepic\nnonepicurean\nnonepileptic\nnonepiscopal\nnonepiscopalian\nnonepithelial\nnonepochal\nnonequal\nnonequation\nnonequatorial\nnonequestrian\nnonequilateral\nnonequilibrium\nnonequivalent\nnonequivocating\nnonerasure\nnonerecting\nnonerection\nnonerotic\nnonerroneous\nnonerudite\nnoneruption\nnones\nnonescape\nnonespionage\nnonespousal\nnonessential\nnonesthetic\nnonesuch\nnonet\nnoneternal\nnoneternity\nnonetheless\nnonethereal\nnonethical\nnonethnological\nnonethyl\nnoneugenic\nnoneuphonious\nnonevacuation\nnonevanescent\nnonevangelical\nnonevaporation\nnonevasion\nnonevasive\nnoneviction\nnonevident\nnonevidential\nnonevil\nnonevolutionary\nnonevolutionist\nnonevolving\nnonexaction\nnonexaggeration\nnonexamination\nnonexcavation\nnonexcepted\nnonexcerptible\nnonexcessive\nnonexchangeability\nnonexchangeable\nnonexciting\nnonexclamatory\nnonexclusion\nnonexclusive\nnonexcommunicable\nnonexculpation\nnonexcusable\nnonexecution\nnonexecutive\nnonexemplary\nnonexemplificatior\nnonexempt\nnonexercise\nnonexertion\nnonexhibition\nnonexistence\nnonexistent\nnonexistential\nnonexisting\nnonexoneration\nnonexotic\nnonexpansion\nnonexpansive\nnonexpansively\nnonexpectation\nnonexpendable\nnonexperience\nnonexperienced\nnonexperimental\nnonexpert\nnonexpiation\nnonexpiry\nnonexploitation\nnonexplosive\nnonexportable\nnonexportation\nnonexposure\nnonexpulsion\nnonextant\nnonextempore\nnonextended\nnonextensile\nnonextension\nnonextensional\nnonextensive\nnonextenuatory\nnonexteriority\nnonextermination\nnonexternal\nnonexternality\nnonextinction\nnonextortion\nnonextracted\nnonextraction\nnonextraditable\nnonextradition\nnonextraneous\nnonextreme\nnonextrication\nnonextrinsic\nnonexuding\nnonexultation\nnonfabulous\nnonfacetious\nnonfacial\nnonfacility\nnonfacing\nnonfact\nnonfactious\nnonfactory\nnonfactual\nnonfacultative\nnonfaculty\nnonfaddist\nnonfading\nnonfailure\nnonfalse\nnonfamily\nnonfamous\nnonfanatical\nnonfanciful\nnonfarm\nnonfastidious\nnonfat\nnonfatal\nnonfatalistic\nnonfatty\nnonfavorite\nnonfeasance\nnonfeasor\nnonfeatured\nnonfebrile\nnonfederal\nnonfederated\nnonfeldspathic\nnonfelonious\nnonfelony\nnonfenestrated\nnonfermentability\nnonfermentable\nnonfermentation\nnonfermentative\nnonferrous\nnonfertile\nnonfertility\nnonfestive\nnonfeudal\nnonfibrous\nnonfiction\nnonfictional\nnonfiduciary\nnonfighter\nnonfigurative\nnonfilamentous\nnonfimbriate\nnonfinancial\nnonfinding\nnonfinishing\nnonfinite\nnonfireproof\nnonfiscal\nnonfisherman\nnonfissile\nnonfixation\nnonflaky\nnonflammable\nnonfloatation\nnonfloating\nnonfloriferous\nnonflowering\nnonflowing\nnonfluctuating\nnonfluid\nnonfluorescent\nnonflying\nnonfocal\nnonfood\nnonforeclosure\nnonforeign\nnonforeknowledge\nnonforest\nnonforested\nnonforfeitable\nnonforfeiting\nnonforfeiture\nnonform\nnonformal\nnonformation\nnonformulation\nnonfortification\nnonfortuitous\nnonfossiliferous\nnonfouling\nnonfrat\nnonfraternity\nnonfrauder\nnonfraudulent\nnonfreedom\nnonfreeman\nnonfreezable\nnonfreeze\nnonfreezing\nnonfricative\nnonfriction\nnonfrosted\nnonfruition\nnonfrustration\nnonfulfillment\nnonfunctional\nnonfundable\nnonfundamental\nnonfungible\nnonfuroid\nnonfusion\nnonfuturition\nnonfuturity\nnongalactic\nnongalvanized\nnonganglionic\nnongas\nnongaseous\nnongassy\nnongelatinizing\nnongelatinous\nnongenealogical\nnongenerative\nnongenetic\nnongentile\nnongeographical\nnongeological\nnongeometrical\nnongermination\nnongerundial\nnongildsman\nnongipsy\nnonglacial\nnonglandered\nnonglandular\nnonglare\nnonglucose\nnonglucosidal\nnonglucosidic\nnongod\nnongold\nnongolfer\nnongospel\nnongovernmental\nnongraduate\nnongraduated\nnongraduation\nnongrain\nnongranular\nnongraphitic\nnongrass\nnongratuitous\nnongravitation\nnongravity\nnongray\nnongreasy\nnongreen\nnongregarious\nnongremial\nnongrey\nnongrooming\nnonguarantee\nnonguard\nnonguttural\nnongymnast\nnongypsy\nnonhabitable\nnonhabitual\nnonhalation\nnonhallucination\nnonhandicap\nnonhardenable\nnonharmonic\nnonharmonious\nnonhazardous\nnonheading\nnonhearer\nnonheathen\nnonhedonistic\nnonhepatic\nnonhereditarily\nnonhereditary\nnonheritable\nnonheritor\nnonhero\nnonhieratic\nnonhistoric\nnonhistorical\nnonhomaloidal\nnonhomogeneity\nnonhomogeneous\nnonhomogenous\nnonhostile\nnonhouseholder\nnonhousekeeping\nnonhuman\nnonhumanist\nnonhumorous\nnonhumus\nnonhunting\nnonhydrogenous\nnonhydrolyzable\nnonhygrometric\nnonhygroscopic\nnonhypostatic\nnonic\nnoniconoclastic\nnonideal\nnonidealist\nnonidentical\nnonidentity\nnonidiomatic\nnonidolatrous\nnonidyllic\nnonignitible\nnonignominious\nnonignorant\nnonillion\nnonillionth\nnonillumination\nnonillustration\nnonimaginary\nnonimbricating\nnonimitative\nnonimmateriality\nnonimmersion\nnonimmigrant\nnonimmigration\nnonimmune\nnonimmunity\nnonimmunized\nnonimpact\nnonimpairment\nnonimpartment\nnonimpatience\nnonimpeachment\nnonimperative\nnonimperial\nnonimplement\nnonimportation\nnonimporting\nnonimposition\nnonimpregnated\nnonimpressionist\nnonimprovement\nnonimputation\nnonincandescent\nnonincarnated\nnonincitement\nnoninclination\nnoninclusion\nnoninclusive\nnonincrease\nnonincreasing\nnonincrusting\nnonindependent\nnonindictable\nnonindictment\nnonindividual\nnonindividualistic\nnoninductive\nnoninductively\nnoninductivity\nnonindurated\nnonindustrial\nnoninfallibilist\nnoninfallible\nnoninfantry\nnoninfected\nnoninfection\nnoninfectious\nnoninfinite\nnoninfinitely\nnoninflammability\nnoninflammable\nnoninflammatory\nnoninflectional\nnoninfluence\nnoninformative\nnoninfraction\nnoninhabitant\nnoninheritable\nnoninherited\nnoninitial\nnoninjurious\nnoninjury\nnoninoculation\nnoninquiring\nnoninsect\nnoninsertion\nnoninstitution\nnoninstruction\nnoninstructional\nnoninstructress\nnoninstrumental\nnoninsurance\nnonintegrable\nnonintegrity\nnonintellectual\nnonintelligence\nnonintelligent\nnonintent\nnonintention\nnoninterchangeability\nnoninterchangeable\nnonintercourse\nnoninterference\nnoninterferer\nnoninterfering\nnonintermittent\nnoninternational\nnoninterpolation\nnoninterposition\nnoninterrupted\nnonintersecting\nnonintersector\nnonintervention\nnoninterventionalist\nnoninterventionist\nnonintoxicant\nnonintoxicating\nnonintrospective\nnonintrospectively\nnonintrusion\nnonintrusionism\nnonintrusionist\nnonintuitive\nnoninverted\nnoninvidious\nnoninvincibility\nnoniodized\nnonion\nnonionized\nnonionizing\nnonirate\nnonirradiated\nnonirrational\nnonirreparable\nnonirrevocable\nnonirrigable\nnonirrigated\nnonirrigating\nnonirrigation\nnonirritable\nnonirritant\nnonirritating\nnonisobaric\nnonisotropic\nnonissuable\nnonius\nnonjoinder\nnonjudicial\nnonjurable\nnonjurant\nnonjuress\nnonjuring\nnonjurist\nnonjuristic\nnonjuror\nnonjurorism\nnonjury\nnonjurying\nnonknowledge\nnonkosher\nnonlabeling\nnonlactescent\nnonlaminated\nnonlanguage\nnonlaying\nnonleaded\nnonleaking\nnonlegal\nnonlegato\nnonlegume\nnonlepidopterous\nnonleprous\nnonlevel\nnonlevulose\nnonliability\nnonliable\nnonliberation\nnonlicensed\nnonlicentiate\nnonlicet\nnonlicking\nnonlife\nnonlimitation\nnonlimiting\nnonlinear\nnonlipoidal\nnonliquefying\nnonliquid\nnonliquidating\nnonliquidation\nnonlister\nnonlisting\nnonliterary\nnonlitigious\nnonliturgical\nnonliving\nnonlixiviated\nnonlocal\nnonlocalized\nnonlogical\nnonlosable\nnonloser\nnonlover\nnonloving\nnonloxodromic\nnonluminescent\nnonluminosity\nnonluminous\nnonluster\nnonlustrous\nnonly\nnonmagnetic\nnonmagnetizable\nnonmaintenance\nnonmajority\nnonmalarious\nnonmalicious\nnonmalignant\nnonmalleable\nnonmammalian\nnonmandatory\nnonmanifest\nnonmanifestation\nnonmanila\nnonmannite\nnonmanual\nnonmanufacture\nnonmanufactured\nnonmanufacturing\nnonmarine\nnonmarital\nnonmaritime\nnonmarket\nnonmarriage\nnonmarriageable\nnonmarrying\nnonmartial\nnonmastery\nnonmaterial\nnonmaterialistic\nnonmateriality\nnonmaternal\nnonmathematical\nnonmathematician\nnonmatrimonial\nnonmatter\nnonmechanical\nnonmechanistic\nnonmedical\nnonmedicinal\nnonmedullated\nnonmelodious\nnonmember\nnonmembership\nnonmenial\nnonmental\nnonmercantile\nnonmetal\nnonmetallic\nnonmetalliferous\nnonmetallurgical\nnonmetamorphic\nnonmetaphysical\nnonmeteoric\nnonmeteorological\nnonmetric\nnonmetrical\nnonmetropolitan\nnonmicrobic\nnonmicroscopical\nnonmigratory\nnonmilitant\nnonmilitary\nnonmillionaire\nnonmimetic\nnonmineral\nnonmineralogical\nnonminimal\nnonministerial\nnonministration\nnonmiraculous\nnonmischievous\nnonmiscible\nnonmissionary\nnonmobile\nnonmodal\nnonmodern\nnonmolar\nnonmolecular\nnonmomentary\nnonmonarchical\nnonmonarchist\nnonmonastic\nnonmonist\nnonmonogamous\nnonmonotheistic\nnonmorainic\nnonmoral\nnonmorality\nnonmortal\nnonmotile\nnonmotoring\nnonmotorist\nnonmountainous\nnonmucilaginous\nnonmucous\nnonmulched\nnonmultiple\nnonmunicipal\nnonmuscular\nnonmusical\nnonmussable\nnonmutationally\nnonmutative\nnonmutual\nnonmystical\nnonmythical\nnonmythological\nnonnant\nnonnarcotic\nnonnasal\nnonnat\nnonnational\nnonnative\nnonnatural\nnonnaturalism\nnonnaturalistic\nnonnaturality\nnonnaturalness\nnonnautical\nnonnaval\nnonnavigable\nnonnavigation\nnonnebular\nnonnecessary\nnonnecessity\nnonnegligible\nnonnegotiable\nnonnegotiation\nnonnephritic\nnonnervous\nnonnescience\nnonnescient\nnonneutral\nnonneutrality\nnonnitrogenized\nnonnitrogenous\nnonnoble\nnonnomination\nnonnotification\nnonnotional\nnonnucleated\nnonnumeral\nnonnutrient\nnonnutritious\nnonnutritive\nnonobedience\nnonobedient\nnonobjection\nnonobjective\nnonobligatory\nnonobservable\nnonobservance\nnonobservant\nnonobservation\nnonobstetrical\nnonobstructive\nnonobvious\nnonoccidental\nnonocculting\nnonoccupant\nnonoccupation\nnonoccupational\nnonoccurrence\nnonodorous\nnonoecumenic\nnonoffender\nnonoffensive\nnonofficeholding\nnonofficial\nnonofficially\nnonofficinal\nnonoic\nnonoily\nnonolfactory\nnonomad\nnononerous\nnonopacity\nnonopening\nnonoperating\nnonoperative\nnonopposition\nnonoppressive\nnonoptical\nnonoptimistic\nnonoptional\nnonorchestral\nnonordination\nnonorganic\nnonorganization\nnonoriental\nnonoriginal\nnonornamental\nnonorthodox\nnonorthographical\nnonoscine\nnonostentation\nnonoutlawry\nnonoutrage\nnonoverhead\nnonoverlapping\nnonowner\nnonoxidating\nnonoxidizable\nnonoxidizing\nnonoxygenated\nnonoxygenous\nnonpacific\nnonpacification\nnonpacifist\nnonpagan\nnonpaid\nnonpainter\nnonpalatal\nnonpapal\nnonpapist\nnonpar\nnonparallel\nnonparalytic\nnonparasitic\nnonparasitism\nnonpareil\nnonparent\nnonparental\nnonpariello\nnonparishioner\nnonparliamentary\nnonparlor\nnonparochial\nnonparous\nnonpartial\nnonpartiality\nnonparticipant\nnonparticipating\nnonparticipation\nnonpartisan\nnonpartisanship\nnonpartner\nnonparty\nnonpassenger\nnonpasserine\nnonpastoral\nnonpatentable\nnonpatented\nnonpaternal\nnonpathogenic\nnonpause\nnonpaying\nnonpayment\nnonpeak\nnonpeaked\nnonpearlitic\nnonpecuniary\nnonpedestrian\nnonpedigree\nnonpelagic\nnonpeltast\nnonpenal\nnonpenalized\nnonpending\nnonpensionable\nnonpensioner\nnonperception\nnonperceptual\nnonperfection\nnonperforated\nnonperforating\nnonperformance\nnonperformer\nnonperforming\nnonperiodic\nnonperiodical\nnonperishable\nnonperishing\nnonperjury\nnonpermanent\nnonpermeability\nnonpermeable\nnonpermissible\nnonpermission\nnonperpendicular\nnonperpetual\nnonperpetuity\nnonpersecution\nnonperseverance\nnonpersistence\nnonpersistent\nnonperson\nnonpersonal\nnonpersonification\nnonpertinent\nnonperversive\nnonphagocytic\nnonpharmaceutical\nnonphenolic\nnonphenomenal\nnonphilanthropic\nnonphilological\nnonphilosophical\nnonphilosophy\nnonphonetic\nnonphosphatic\nnonphosphorized\nnonphotobiotic\nnonphysical\nnonphysiological\nnonpickable\nnonpigmented\nnonplacental\nnonplacet\nnonplanar\nnonplane\nnonplanetary\nnonplantowning\nnonplastic\nnonplate\nnonplausible\nnonpleading\nnonplus\nnonplusation\nnonplushed\nnonplutocratic\nnonpoet\nnonpoetic\nnonpoisonous\nnonpolar\nnonpolarizable\nnonpolarizing\nnonpolitical\nnonponderosity\nnonponderous\nnonpopery\nnonpopular\nnonpopularity\nnonporous\nnonporphyritic\nnonport\nnonportability\nnonportable\nnonportrayal\nnonpositive\nnonpossession\nnonposthumous\nnonpostponement\nnonpotential\nnonpower\nnonpractical\nnonpractice\nnonpraedial\nnonpreaching\nnonprecious\nnonprecipitation\nnonpredatory\nnonpredestination\nnonpredicative\nnonpredictable\nnonpreference\nnonpreferential\nnonpreformed\nnonpregnant\nnonprehensile\nnonprejudicial\nnonprelatical\nnonpremium\nnonpreparation\nnonprepayment\nnonprepositional\nnonpresbyter\nnonprescribed\nnonprescriptive\nnonpresence\nnonpresentation\nnonpreservation\nnonpresidential\nnonpress\nnonpressure\nnonprevalence\nnonprevalent\nnonpriestly\nnonprimitive\nnonprincipiate\nnonprincipled\nnonprobable\nnonprocreation\nnonprocurement\nnonproducer\nnonproducing\nnonproduction\nnonproductive\nnonproductively\nnonproductiveness\nnonprofane\nnonprofessed\nnonprofession\nnonprofessional\nnonprofessionalism\nnonprofessorial\nnonproficience\nnonproficiency\nnonproficient\nnonprofit\nnonprofiteering\nnonprognostication\nnonprogressive\nnonprohibitable\nnonprohibition\nnonprohibitive\nnonprojection\nnonprojective\nnonprojectively\nnonproletarian\nnonproliferous\nnonprolific\nnonprolongation\nnonpromiscuous\nnonpromissory\nnonpromotion\nnonpromulgation\nnonpronunciation\nnonpropagandistic\nnonpropagation\nnonprophetic\nnonpropitiation\nnonproportional\nnonproprietary\nnonproprietor\nnonprorogation\nnonproscriptive\nnonprosecution\nnonprospect\nnonprotection\nnonprotective\nnonproteid\nnonprotein\nnonprotestation\nnonprotractile\nnonprotractility\nnonproven\nnonprovided\nnonprovidential\nnonprovocation\nnonpsychic\nnonpsychological\nnonpublic\nnonpublication\nnonpublicity\nnonpueblo\nnonpulmonary\nnonpulsating\nnonpumpable\nnonpunctual\nnonpunctuation\nnonpuncturable\nnonpunishable\nnonpunishing\nnonpunishment\nnonpurchase\nnonpurchaser\nnonpurgative\nnonpurification\nnonpurposive\nnonpursuit\nnonpurulent\nnonpurveyance\nnonputrescent\nnonputrescible\nnonputting\nnonpyogenic\nnonpyritiferous\nnonqualification\nnonquality\nnonquota\nnonracial\nnonradiable\nnonradiating\nnonradical\nnonrailroader\nnonranging\nnonratability\nnonratable\nnonrated\nnonratifying\nnonrational\nnonrationalist\nnonrationalized\nnonrayed\nnonreaction\nnonreactive\nnonreactor\nnonreader\nnonreading\nnonrealistic\nnonreality\nnonrealization\nnonreasonable\nnonreasoner\nnonrebel\nnonrebellious\nnonreceipt\nnonreceiving\nnonrecent\nnonreception\nnonrecess\nnonrecipient\nnonreciprocal\nnonreciprocating\nnonreciprocity\nnonrecital\nnonreclamation\nnonrecluse\nnonrecognition\nnonrecognized\nnonrecoil\nnonrecollection\nnonrecommendation\nnonreconciliation\nnonrecourse\nnonrecoverable\nnonrecovery\nnonrectangular\nnonrectified\nnonrecuperation\nnonrecurrent\nnonrecurring\nnonredemption\nnonredressing\nnonreducing\nnonreference\nnonrefillable\nnonreflector\nnonreformation\nnonrefraction\nnonrefrigerant\nnonrefueling\nnonrefutation\nnonregardance\nnonregarding\nnonregenerating\nnonregenerative\nnonregent\nnonregimented\nnonregistered\nnonregistrability\nnonregistrable\nnonregistration\nnonregression\nnonregulation\nnonrehabilitation\nnonreigning\nnonreimbursement\nnonreinforcement\nnonreinstatement\nnonrejection\nnonrejoinder\nnonrelapsed\nnonrelation\nnonrelative\nnonrelaxation\nnonrelease\nnonreliance\nnonreligion\nnonreligious\nnonreligiousness\nnonrelinquishment\nnonremanie\nnonremedy\nnonremembrance\nnonremission\nnonremonstrance\nnonremuneration\nnonremunerative\nnonrendition\nnonrenewable\nnonrenewal\nnonrenouncing\nnonrenunciation\nnonrepair\nnonreparation\nnonrepayable\nnonrepealing\nnonrepeat\nnonrepeater\nnonrepentance\nnonrepetition\nnonreplacement\nnonreplicate\nnonreportable\nnonreprehensible\nnonrepresentation\nnonrepresentational\nnonrepresentationalism\nnonrepresentative\nnonrepression\nnonreprisal\nnonreproduction\nnonreproductive\nnonrepublican\nnonrepudiation\nnonrequirement\nnonrequisition\nnonrequital\nnonrescue\nnonresemblance\nnonreservation\nnonreserve\nnonresidence\nnonresidency\nnonresident\nnonresidental\nnonresidenter\nnonresidential\nnonresidentiary\nnonresidentor\nnonresidual\nnonresignation\nnonresinifiable\nnonresistance\nnonresistant\nnonresisting\nnonresistive\nnonresolvability\nnonresolvable\nnonresonant\nnonrespectable\nnonrespirable\nnonresponsibility\nnonrestitution\nnonrestraint\nnonrestricted\nnonrestriction\nnonrestrictive\nnonresumption\nnonresurrection\nnonresuscitation\nnonretaliation\nnonretention\nnonretentive\nnonreticence\nnonretinal\nnonretirement\nnonretiring\nnonretraceable\nnonretractation\nnonretractile\nnonretraction\nnonretrenchment\nnonretroactive\nnonreturn\nnonreturnable\nnonrevaluation\nnonrevealing\nnonrevelation\nnonrevenge\nnonrevenue\nnonreverse\nnonreversed\nnonreversible\nnonreversing\nnonreversion\nnonrevertible\nnonreviewable\nnonrevision\nnonrevival\nnonrevocation\nnonrevolting\nnonrevolutionary\nnonrevolving\nnonrhetorical\nnonrhymed\nnonrhyming\nnonrhythmic\nnonriding\nnonrigid\nnonrioter\nnonriparian\nnonritualistic\nnonrival\nnonromantic\nnonrotatable\nnonrotating\nnonrotative\nnonround\nnonroutine\nnonroyal\nnonroyalist\nnonrubber\nnonruminant\nNonruminantia\nnonrun\nnonrupture\nnonrural\nnonrustable\nnonsabbatic\nnonsaccharine\nnonsacerdotal\nnonsacramental\nnonsacred\nnonsacrifice\nnonsacrificial\nnonsailor\nnonsalable\nnonsalaried\nnonsale\nnonsaline\nnonsalutary\nnonsalutation\nnonsalvation\nnonsanctification\nnonsanction\nnonsanctity\nnonsane\nnonsanguine\nnonsanity\nnonsaponifiable\nnonsatisfaction\nnonsaturated\nnonsaturation\nnonsaving\nnonsawing\nnonscalding\nnonscaling\nnonscandalous\nnonschematized\nnonschismatic\nnonscholastic\nnonscience\nnonscientific\nnonscientist\nnonscoring\nnonscraping\nnonscriptural\nnonscripturalist\nnonscrutiny\nnonseasonal\nnonsecession\nnonseclusion\nnonsecrecy\nnonsecret\nnonsecretarial\nnonsecretion\nnonsecretive\nnonsecretory\nnonsectarian\nnonsectional\nnonsectorial\nnonsecular\nnonsecurity\nnonsedentary\nnonseditious\nnonsegmented\nnonsegregation\nnonseizure\nnonselected\nnonselection\nnonselective\nnonself\nnonselfregarding\nnonselling\nnonsenatorial\nnonsense\nnonsensible\nnonsensical\nnonsensicality\nnonsensically\nnonsensicalness\nnonsensification\nnonsensify\nnonsensitive\nnonsensitiveness\nnonsensitized\nnonsensorial\nnonsensuous\nnonsentence\nnonsentient\nnonseparation\nnonseptate\nnonseptic\nnonsequacious\nnonsequaciousness\nnonsequestration\nnonserial\nnonserif\nnonserious\nnonserous\nnonserviential\nnonservile\nnonsetter\nnonsetting\nnonsettlement\nnonsexual\nnonsexually\nnonshaft\nnonsharing\nnonshatter\nnonshedder\nnonshipper\nnonshipping\nnonshredding\nnonshrinkable\nnonshrinking\nnonsiccative\nnonsidereal\nnonsignatory\nnonsignature\nnonsignificance\nnonsignificant\nnonsignification\nnonsignificative\nnonsilicated\nnonsiliceous\nnonsilver\nnonsimplification\nnonsine\nnonsinging\nnonsingular\nnonsinkable\nnonsinusoidal\nnonsiphonage\nnonsister\nnonsitter\nnonsitting\nnonskeptical\nnonskid\nnonskidding\nnonskipping\nnonslaveholding\nnonslip\nnonslippery\nnonslipping\nnonsludging\nnonsmoker\nnonsmoking\nnonsmutting\nnonsocial\nnonsocialist\nnonsocialistic\nnonsociety\nnonsociological\nnonsolar\nnonsoldier\nnonsolicitation\nnonsolid\nnonsolidified\nnonsolution\nnonsolvency\nnonsolvent\nnonsonant\nnonsovereign\nnonspalling\nnonsparing\nnonsparking\nnonspeaker\nnonspeaking\nnonspecial\nnonspecialist\nnonspecialized\nnonspecie\nnonspecific\nnonspecification\nnonspecificity\nnonspecified\nnonspectacular\nnonspectral\nnonspeculation\nnonspeculative\nnonspherical\nnonspill\nnonspillable\nnonspinning\nnonspinose\nnonspiny\nnonspiral\nnonspirit\nnonspiritual\nnonspirituous\nnonspontaneous\nnonspored\nnonsporeformer\nnonsporeforming\nnonsporting\nnonspottable\nnonsprouting\nnonstainable\nnonstaining\nnonstampable\nnonstandard\nnonstandardized\nnonstanzaic\nnonstaple\nnonstarch\nnonstarter\nnonstarting\nnonstatement\nnonstatic\nnonstationary\nnonstatistical\nnonstatutory\nnonstellar\nnonsticky\nnonstimulant\nnonstipulation\nnonstock\nnonstooping\nnonstop\nnonstrategic\nnonstress\nnonstretchable\nnonstretchy\nnonstriated\nnonstriker\nnonstriking\nnonstriped\nnonstructural\nnonstudent\nnonstudious\nnonstylized\nnonsubject\nnonsubjective\nnonsubmission\nnonsubmissive\nnonsubordination\nnonsubscriber\nnonsubscribing\nnonsubscription\nnonsubsiding\nnonsubsidy\nnonsubsistence\nnonsubstantial\nnonsubstantialism\nnonsubstantialist\nnonsubstantiality\nnonsubstantiation\nnonsubstantive\nnonsubstitution\nnonsubtraction\nnonsuccess\nnonsuccessful\nnonsuccession\nnonsuccessive\nnonsuccour\nnonsuction\nnonsuctorial\nnonsufferance\nnonsuffrage\nnonsugar\nnonsuggestion\nnonsuit\nnonsulphurous\nnonsummons\nnonsupplication\nnonsupport\nnonsupporter\nnonsupporting\nnonsuppositional\nnonsuppressed\nnonsuppression\nnonsuppurative\nnonsurface\nnonsurgical\nnonsurrender\nnonsurvival\nnonsurvivor\nnonsuspect\nnonsustaining\nnonsustenance\nnonswearer\nnonswearing\nnonsweating\nnonswimmer\nnonswimming\nnonsyllabic\nnonsyllabicness\nnonsyllogistic\nnonsyllogizing\nnonsymbiotic\nnonsymbiotically\nnonsymbolic\nnonsymmetrical\nnonsympathetic\nnonsympathizer\nnonsympathy\nnonsymphonic\nnonsymptomatic\nnonsynchronous\nnonsyndicate\nnonsynodic\nnonsynonymous\nnonsyntactic\nnonsyntactical\nnonsynthesized\nnonsyntonic\nnonsystematic\nnontabular\nnontactical\nnontan\nnontangential\nnontannic\nnontannin\nnontariff\nnontarnishable\nnontarnishing\nnontautomeric\nnontautomerizable\nnontax\nnontaxability\nnontaxable\nnontaxonomic\nnonteachable\nnonteacher\nnonteaching\nnontechnical\nnontechnological\nnonteetotaler\nnontelegraphic\nnonteleological\nnontelephonic\nnontemporal\nnontemporizing\nnontenant\nnontenure\nnontenurial\nnonterm\nnonterminating\nnonterrestrial\nnonterritorial\nnonterritoriality\nnontestamentary\nnontextual\nnontheatrical\nnontheistic\nnonthematic\nnontheological\nnontheosophical\nnontherapeutic\nnonthinker\nnonthinking\nnonthoracic\nnonthoroughfare\nnonthreaded\nnontidal\nnontillable\nnontimbered\nnontitaniferous\nnontitular\nnontolerated\nnontopographical\nnontourist\nnontoxic\nnontraction\nnontrade\nnontrader\nnontrading\nnontraditional\nnontragic\nnontrailing\nnontransferability\nnontransferable\nnontransgression\nnontransient\nnontransitional\nnontranslocation\nnontransmission\nnontransparency\nnontransparent\nnontransportation\nnontransposing\nnontransposition\nnontraveler\nnontraveling\nnontreasonable\nnontreated\nnontreatment\nnontreaty\nnontrespass\nnontrial\nnontribal\nnontribesman\nnontributary\nnontrier\nnontrigonometrical\nnontronite\nnontropical\nnontrunked\nnontruth\nnontuberculous\nnontuned\nnonturbinated\nnontutorial\nnontyphoidal\nnontypical\nnontypicalness\nnontypographical\nnontyrannical\nnonubiquitous\nnonulcerous\nnonultrafilterable\nnonumbilical\nnonumbilicate\nnonumbrellaed\nnonunanimous\nnonuncial\nnonundergraduate\nnonunderstandable\nnonunderstanding\nnonunderstandingly\nnonunderstood\nnonundulatory\nnonuniform\nnonuniformist\nnonuniformitarian\nnonuniformity\nnonuniformly\nnonunion\nnonunionism\nnonunionist\nnonunique\nnonunison\nnonunited\nnonuniversal\nnonuniversity\nnonupholstered\nnonuple\nnonuplet\nnonupright\nnonurban\nnonurgent\nnonusage\nnonuse\nnonuser\nnonusing\nnonusurping\nnonuterine\nnonutile\nnonutilitarian\nnonutility\nnonutilized\nnonutterance\nnonvacant\nnonvaccination\nnonvacuous\nnonvaginal\nnonvalent\nnonvalidity\nnonvaluation\nnonvalve\nnonvanishing\nnonvariable\nnonvariant\nnonvariation\nnonvascular\nnonvassal\nnonvegetative\nnonvenereal\nnonvenomous\nnonvenous\nnonventilation\nnonverbal\nnonverdict\nnonverminous\nnonvernacular\nnonvertebral\nnonvertical\nnonvertically\nnonvesicular\nnonvesting\nnonvesture\nnonveteran\nnonveterinary\nnonviable\nnonvibratile\nnonvibration\nnonvibrator\nnonvibratory\nnonvicarious\nnonvictory\nnonvillager\nnonvillainous\nnonvindication\nnonvinous\nnonvintage\nnonviolation\nnonviolence\nnonvirginal\nnonvirile\nnonvirtue\nnonvirtuous\nnonvirulent\nnonviruliferous\nnonvisaed\nnonvisceral\nnonviscid\nnonviscous\nnonvisional\nnonvisitation\nnonvisiting\nnonvisual\nnonvisualized\nnonvital\nnonvitreous\nnonvitrified\nnonviviparous\nnonvocal\nnonvocalic\nnonvocational\nnonvolant\nnonvolatile\nnonvolatilized\nnonvolcanic\nnonvolition\nnonvoluntary\nnonvortical\nnonvortically\nnonvoter\nnonvoting\nnonvulcanizable\nnonvulvar\nnonwalking\nnonwar\nnonwasting\nnonwatertight\nnonweakness\nnonwestern\nnonwetted\nnonwhite\nnonwinged\nnonwoody\nnonworker\nnonworking\nnonworship\nnonwrinkleable\nnonya\nnonyielding\nnonyl\nnonylene\nnonylenic\nnonylic\nnonzealous\nnonzero\nnonzodiacal\nnonzonal\nnonzonate\nnonzoological\nnoodle\nnoodledom\nnoodleism\nnook\nnooked\nnookery\nnooking\nnooklet\nnooklike\nnooky\nnoological\nnoologist\nnoology\nnoometry\nnoon\nnoonday\nnoonflower\nnooning\nnoonlight\nnoonlit\nnoonstead\nnoontide\nnoontime\nnoonwards\nnoop\nnooscopic\nnoose\nnooser\nNootka\nnopal\nNopalea\nnopalry\nnope\nnopinene\nnor\nNora\nNorah\nnorard\nnorate\nnoration\nnorbergite\nNorbert\nNorbertine\nnorcamphane\nnordcaper\nnordenskioldine\nNordic\nNordicism\nNordicist\nNordicity\nNordicization\nNordicize\nnordmarkite\nnoreast\nnoreaster\nnorelin\nNorfolk\nNorfolkian\nnorgine\nnori\nnoria\nNoric\nnorie\nnorimon\nnorite\nnorland\nnorlander\nnorlandism\nnorleucine\nNorm\nnorm\nNorma\nnorma\nnormal\nnormalcy\nnormalism\nnormalist\nnormality\nnormalization\nnormalize\nnormalizer\nnormally\nnormalness\nNorman\nNormanesque\nNormanish\nNormanism\nNormanist\nNormanization\nNormanize\nNormanizer\nNormanly\nNormannic\nnormated\nnormative\nnormatively\nnormativeness\nnormless\nnormoblast\nnormoblastic\nnormocyte\nnormocytic\nnormotensive\nNorn\nNorna\nnornicotine\nnornorwest\nnoropianic\nnorpinic\nNorridgewock\nNorroway\nNorroy\nNorse\nnorsel\nNorseland\nnorseler\nNorseman\nNorsk\nnorth\nnorthbound\nnortheast\nnortheaster\nnortheasterly\nnortheastern\nnortheasternmost\nnortheastward\nnortheastwardly\nnortheastwards\nnorther\nnortherliness\nnortherly\nnorthern\nnortherner\nnorthernize\nnorthernly\nnorthernmost\nnorthernness\nnorthest\nnorthfieldite\nnorthing\nnorthland\nnorthlander\nnorthlight\nNorthman\nnorthmost\nnorthness\nNorthumber\nNorthumbrian\nnorthupite\nnorthward\nnorthwardly\nnorthwards\nnorthwest\nnorthwester\nnorthwesterly\nnorthwestern\nnorthwestward\nnorthwestwardly\nnorthwestwards\nNorumbega\nnorward\nnorwards\nNorway\nNorwegian\nnorwest\nnorwester\nnorwestward\nNosairi\nNosairian\nnosarian\nnose\nnosean\nnoseanite\nnoseband\nnosebanded\nnosebleed\nnosebone\nnoseburn\nnosed\nnosegay\nnosegaylike\nnoseherb\nnosehole\nnoseless\nnoselessly\nnoselessness\nnoselike\nnoselite\nNosema\nNosematidae\nnosepiece\nnosepinch\nnoser\nnosesmart\nnosethirl\nnosetiology\nnosewards\nnosewheel\nnosewise\nnosey\nnosine\nnosing\nnosism\nnosocomial\nnosocomium\nnosogenesis\nnosogenetic\nnosogenic\nnosogeny\nnosogeography\nnosographer\nnosographic\nnosographical\nnosographically\nnosography\nnosohaemia\nnosohemia\nnosological\nnosologically\nnosologist\nnosology\nnosomania\nnosomycosis\nnosonomy\nnosophobia\nnosophyte\nnosopoetic\nnosopoietic\nnosotaxy\nnosotrophy\nnostalgia\nnostalgic\nnostalgically\nnostalgy\nnostic\nNostoc\nNostocaceae\nnostocaceous\nnostochine\nnostologic\nnostology\nnostomania\nNostradamus\nnostrificate\nnostrification\nnostril\nnostriled\nnostrility\nnostrilsome\nnostrum\nnostrummonger\nnostrummongership\nnostrummongery\nNosu\nnosy\nnot\nnotabilia\nnotability\nnotable\nnotableness\nnotably\nnotacanthid\nNotacanthidae\nnotacanthoid\nnotacanthous\nNotacanthus\nnotaeal\nnotaeum\nnotal\nnotalgia\nnotalgic\nNotalia\nnotan\nnotandum\nnotanencephalia\nnotarial\nnotarially\nnotariate\nnotarikon\nnotarize\nnotary\nnotaryship\nnotate\nnotation\nnotational\nnotative\nnotator\nnotch\nnotchboard\nnotched\nnotchel\nnotcher\nnotchful\nnotching\nnotchweed\nnotchwing\nnotchy\nnote\nnotebook\nnotecase\nnoted\nnotedly\nnotedness\nnotehead\nnoteholder\nnotekin\nNotelaea\nnoteless\nnotelessly\nnotelessness\nnotelet\nnotencephalocele\nnotencephalus\nnoter\nnotewise\nnoteworthily\nnoteworthiness\nnoteworthy\nnotharctid\nNotharctidae\nNotharctus\nnother\nnothing\nnothingarian\nnothingarianism\nnothingism\nnothingist\nnothingize\nnothingless\nnothingly\nnothingness\nnothingology\nNothofagus\nNotholaena\nnothosaur\nNothosauri\nnothosaurian\nNothosauridae\nNothosaurus\nnothous\nnotice\nnoticeability\nnoticeable\nnoticeably\nnoticer\nNotidani\nnotidanian\nnotidanid\nNotidanidae\nnotidanidan\nnotidanoid\nNotidanus\nnotifiable\nnotification\nnotified\nnotifier\nnotify\nnotifyee\nnotion\nnotionable\nnotional\nnotionalist\nnotionality\nnotionally\nnotionalness\nnotionary\nnotionate\nnotioned\nnotionist\nnotionless\nNotiosorex\nnotitia\nNotkerian\nnotocentrous\nnotocentrum\nnotochord\nnotochordal\nnotodontian\nnotodontid\nNotodontidae\nnotodontoid\nNotogaea\nNotogaeal\nNotogaean\nNotogaeic\nnotommatid\nNotommatidae\nNotonecta\nnotonectal\nnotonectid\nNotonectidae\nnotopodial\nnotopodium\nnotopterid\nNotopteridae\nnotopteroid\nNotopterus\nnotorhizal\nNotorhynchus\nnotoriety\nnotorious\nnotoriously\nnotoriousness\nNotornis\nNotoryctes\nNotostraca\nNototherium\nNototrema\nnototribe\nnotour\nnotourly\nNotropis\nnotself\nNottoway\nnotum\nNotungulata\nnotungulate\nNotus\nnotwithstanding\nNou\nnougat\nnougatine\nnought\nnoumeaite\nnoumeite\nnoumenal\nnoumenalism\nnoumenalist\nnoumenality\nnoumenalize\nnoumenally\nnoumenism\nnoumenon\nnoun\nnounal\nnounally\nnounize\nnounless\nnoup\nnourice\nnourish\nnourishable\nnourisher\nnourishing\nnourishingly\nnourishment\nnouriture\nnous\nnouther\nnova\nnovaculite\nnovalia\nNovanglian\nNovanglican\nnovantique\nnovarsenobenzene\nnovate\nNovatian\nNovatianism\nNovatianist\nnovation\nnovative\nnovator\nnovatory\nnovatrix\nnovcic\nnovel\nnovelcraft\nnoveldom\nnovelese\nnovelesque\nnovelet\nnovelette\nnoveletter\nnovelettish\nnovelettist\nnoveletty\nnovelish\nnovelism\nnovelist\nnovelistic\nnovelistically\nnovelization\nnovelize\nnovella\nnovelless\nnovellike\nnovelly\nnovelmongering\nnovelness\nnovelry\nnovelty\nnovelwright\nnovem\nnovemarticulate\nNovember\nNovemberish\nnovemcostate\nnovemdigitate\nnovemfid\nnovemlobate\nnovemnervate\nnovemperfoliate\nnovena\nnovenary\nnovendial\nnovene\nnovennial\nnovercal\nNovial\nnovice\nnovicehood\nnovicelike\nnoviceship\nnoviciate\nnovilunar\nnovitial\nnovitiate\nnovitiateship\nnovitiation\nnovity\nNovo\nNovocain\nnovodamus\nNovorolsky\nnow\nnowaday\nnowadays\nnowanights\nnoway\nnoways\nnowed\nnowel\nnowhat\nnowhen\nnowhence\nnowhere\nnowhereness\nnowheres\nnowhit\nnowhither\nnowise\nnowness\nNowroze\nnowt\nnowy\nnoxa\nnoxal\nnoxally\nnoxious\nnoxiously\nnoxiousness\nnoy\nnoyade\nnoyau\nNozi\nnozzle\nnozzler\nnth\nnu\nnuance\nnub\nNuba\nnubbin\nnubble\nnubbling\nnubbly\nnubby\nnubecula\nnubia\nNubian\nnubiferous\nnubiform\nnubigenous\nnubilate\nnubilation\nnubile\nnubility\nnubilous\nNubilum\nnucal\nnucament\nnucamentaceous\nnucellar\nnucellus\nnucha\nnuchal\nnuchalgia\nnuciculture\nnuciferous\nnuciform\nnucin\nnucivorous\nnucleal\nnuclear\nnucleary\nnuclease\nnucleate\nnucleation\nnucleator\nnuclei\nnucleiferous\nnucleiform\nnuclein\nnucleinase\nnucleoalbumin\nnucleoalbuminuria\nnucleofugal\nnucleohistone\nnucleohyaloplasm\nnucleohyaloplasma\nnucleoid\nnucleoidioplasma\nnucleolar\nnucleolated\nnucleole\nnucleoli\nnucleolinus\nnucleolocentrosome\nnucleoloid\nnucleolus\nnucleolysis\nnucleomicrosome\nnucleon\nnucleone\nnucleonics\nnucleopetal\nnucleoplasm\nnucleoplasmatic\nnucleoplasmic\nnucleoprotein\nnucleoside\nnucleotide\nnucleus\nnuclide\nnuclidic\nNucula\nNuculacea\nnuculanium\nnucule\nnuculid\nNuculidae\nnuculiform\nnuculoid\nNuda\nnudate\nnudation\nNudd\nnuddle\nnude\nnudely\nnudeness\nNudens\nnudge\nnudger\nnudibranch\nNudibranchia\nnudibranchian\nnudibranchiate\nnudicaudate\nnudicaul\nnudifier\nnudiflorous\nnudiped\nnudish\nnudism\nnudist\nnuditarian\nnudity\nnugacious\nnugaciousness\nnugacity\nnugator\nnugatoriness\nnugatory\nnuggar\nnugget\nnuggety\nnugify\nnugilogue\nNugumiut\nnuisance\nnuisancer\nnuke\nNukuhivan\nnul\nnull\nnullable\nnullah\nnullibicity\nnullibility\nnullibiquitous\nnullibist\nnullification\nnullificationist\nnullificator\nnullifidian\nnullifier\nnullify\nnullipara\nnulliparity\nnulliparous\nnullipennate\nNullipennes\nnulliplex\nnullipore\nnulliporous\nnullism\nnullisome\nnullisomic\nnullity\nnulliverse\nnullo\nNuma\nNumantine\nnumb\nnumber\nnumberable\nnumberer\nnumberful\nnumberless\nnumberous\nnumbersome\nnumbfish\nnumbing\nnumbingly\nnumble\nnumbles\nnumbly\nnumbness\nnumda\nnumdah\nnumen\nNumenius\nnumerable\nnumerableness\nnumerably\nnumeral\nnumerant\nnumerary\nnumerate\nnumeration\nnumerative\nnumerator\nnumerical\nnumerically\nnumericalness\nnumerist\nnumero\nnumerology\nnumerose\nnumerosity\nnumerous\nnumerously\nnumerousness\nNumida\nNumidae\nNumidian\nNumididae\nNumidinae\nnuminism\nnuminous\nnuminously\nnumismatic\nnumismatical\nnumismatically\nnumismatician\nnumismatics\nnumismatist\nnumismatography\nnumismatologist\nnumismatology\nnummary\nnummi\nnummiform\nnummular\nNummularia\nnummulary\nnummulated\nnummulation\nnummuline\nNummulinidae\nnummulite\nNummulites\nnummulitic\nNummulitidae\nnummulitoid\nnummuloidal\nnummus\nnumskull\nnumskulled\nnumskulledness\nnumskullery\nnumskullism\nnumud\nnun\nnunatak\nnunbird\nnunch\nnuncheon\nnunciate\nnunciative\nnunciatory\nnunciature\nnuncio\nnuncioship\nnuncle\nnuncupate\nnuncupation\nnuncupative\nnuncupatively\nnundinal\nnundination\nnundine\nnunhood\nNunki\nnunky\nnunlet\nnunlike\nnunnari\nnunnated\nnunnation\nnunnery\nnunni\nnunnify\nnunnish\nnunnishness\nnunship\nNupe\nNuphar\nnuptial\nnuptiality\nnuptialize\nnuptially\nnuptials\nnuque\nnuraghe\nnurhag\nnurly\nnursable\nnurse\nnursedom\nnursegirl\nnursehound\nnursekeeper\nnursekin\nnurselet\nnurselike\nnursemaid\nnurser\nnursery\nnurserydom\nnurseryful\nnurserymaid\nnurseryman\nnursetender\nnursing\nnursingly\nnursle\nnursling\nnursy\nnurturable\nnurtural\nnurture\nnurtureless\nnurturer\nnurtureship\nNusairis\nNusakan\nnusfiah\nnut\nnutant\nnutarian\nnutate\nnutation\nnutational\nnutbreaker\nnutcake\nnutcrack\nnutcracker\nnutcrackers\nnutcrackery\nnutgall\nnuthatch\nnuthook\nnutjobber\nnutlet\nnutlike\nnutmeg\nnutmegged\nnutmeggy\nnutpecker\nnutpick\nnutramin\nnutria\nnutrice\nnutricial\nnutricism\nnutrient\nnutrify\nnutriment\nnutrimental\nnutritial\nnutrition\nnutritional\nnutritionally\nnutritionist\nnutritious\nnutritiously\nnutritiousness\nnutritive\nnutritively\nnutritiveness\nnutritory\nnutseed\nnutshell\nNuttallia\nnuttalliasis\nnuttalliosis\nnutted\nnutter\nnuttery\nnuttily\nnuttiness\nnutting\nnuttish\nnuttishness\nnutty\nnuzzer\nnuzzerana\nnuzzle\nNyamwezi\nNyanja\nnyanza\nNyaya\nnychthemer\nnychthemeral\nnychthemeron\nNyctaginaceae\nnyctaginaceous\nNyctaginia\nnyctalope\nnyctalopia\nnyctalopic\nnyctalopy\nNyctanthes\nNyctea\nNyctereutes\nnycteribiid\nNycteribiidae\nNycteridae\nnycterine\nNycteris\nNycticorax\nNyctimene\nnyctinastic\nnyctinasty\nnyctipelagic\nNyctipithecinae\nnyctipithecine\nNyctipithecus\nnyctitropic\nnyctitropism\nnyctophobia\nnycturia\nNydia\nnye\nnylast\nnylon\nnymil\nnymph\nnympha\nnymphae\nNymphaea\nNymphaeaceae\nnymphaeaceous\nnymphaeum\nnymphal\nnymphalid\nNymphalidae\nNymphalinae\nnymphaline\nnympheal\nnymphean\nnymphet\nnymphic\nnymphical\nnymphid\nnymphine\nNymphipara\nnymphiparous\nnymphish\nnymphitis\nnymphlike\nnymphlin\nnymphly\nNymphoides\nnympholepsia\nnympholepsy\nnympholept\nnympholeptic\nnymphomania\nnymphomaniac\nnymphomaniacal\nNymphonacea\nnymphosis\nnymphotomy\nnymphwise\nNyoro\nNyroca\nNyssa\nNyssaceae\nnystagmic\nnystagmus\nnyxis\nO\no\noadal\noaf\noafdom\noafish\noafishly\noafishness\noak\noakberry\nOakboy\noaken\noakenshaw\nOakesia\noaklet\noaklike\noakling\noaktongue\noakum\noakweb\noakwood\noaky\noam\nOannes\noar\noarage\noarcock\noared\noarfish\noarhole\noarial\noarialgia\noaric\noariocele\noariopathic\noariopathy\noariotomy\noaritic\noaritis\noarium\noarless\noarlike\noarlock\noarlop\noarman\noarsman\noarsmanship\noarswoman\noarweed\noary\noasal\noasean\noases\noasis\noasitic\noast\noasthouse\noat\noatbin\noatcake\noatear\noaten\noatenmeal\noatfowl\noath\noathay\noathed\noathful\noathlet\noathworthy\noatland\noatlike\noatmeal\noatseed\noaty\nObadiah\nobambulate\nobambulation\nobambulatory\noban\nObbenite\nobbligato\nobclavate\nobclude\nobcompressed\nobconical\nobcordate\nobcordiform\nobcuneate\nobdeltoid\nobdiplostemonous\nobdiplostemony\nobdormition\nobduction\nobduracy\nobdurate\nobdurately\nobdurateness\nobduration\nobe\nobeah\nobeahism\nobeche\nobedience\nobediency\nobedient\nobediential\nobedientially\nobedientialness\nobedientiar\nobedientiary\nobediently\nobeisance\nobeisant\nobeisantly\nobeism\nobelia\nobeliac\nobelial\nobelion\nobeliscal\nobeliscar\nobelisk\nobeliskoid\nobelism\nobelize\nobelus\nOberon\nobese\nobesely\nobeseness\nobesity\nobex\nobey\nobeyable\nobeyer\nobeyingly\nobfuscable\nobfuscate\nobfuscation\nobfuscator\nobfuscity\nobfuscous\nobi\nObidicut\nobispo\nobit\nobitual\nobituarian\nobituarily\nobituarist\nobituarize\nobituary\nobject\nobjectable\nobjectation\nobjectative\nobjectee\nobjecthood\nobjectification\nobjectify\nobjection\nobjectionability\nobjectionable\nobjectionableness\nobjectionably\nobjectional\nobjectioner\nobjectionist\nobjectival\nobjectivate\nobjectivation\nobjective\nobjectively\nobjectiveness\nobjectivism\nobjectivist\nobjectivistic\nobjectivity\nobjectivize\nobjectization\nobjectize\nobjectless\nobjectlessly\nobjectlessness\nobjector\nobjicient\nobjuration\nobjure\nobjurgate\nobjurgation\nobjurgative\nobjurgatively\nobjurgator\nobjurgatorily\nobjurgatory\nobjurgatrix\noblanceolate\noblate\noblately\noblateness\noblation\noblational\noblationary\noblatory\noblectate\noblectation\nobley\nobligable\nobligancy\nobligant\nobligate\nobligation\nobligational\nobligative\nobligativeness\nobligator\nobligatorily\nobligatoriness\nobligatory\nobligatum\noblige\nobliged\nobligedly\nobligedness\nobligee\nobligement\nobliger\nobliging\nobligingly\nobligingness\nobligistic\nobligor\nobliquangular\nobliquate\nobliquation\noblique\nobliquely\nobliqueness\nobliquitous\nobliquity\nobliquus\nobliterable\nobliterate\nobliteration\nobliterative\nobliterator\noblivescence\noblivial\nobliviality\noblivion\noblivionate\noblivionist\noblivionize\noblivious\nobliviously\nobliviousness\nobliviscence\nobliviscible\noblocutor\noblong\noblongatal\noblongated\noblongish\noblongitude\noblongitudinal\noblongly\noblongness\nobloquial\nobloquious\nobloquy\nobmutescence\nobmutescent\nobnebulate\nobnounce\nobnoxiety\nobnoxious\nobnoxiously\nobnoxiousness\nobnubilate\nobnubilation\nobnunciation\noboe\noboist\nobol\nObolaria\nobolary\nobole\nobolet\nobolus\nobomegoid\nObongo\noboval\nobovate\nobovoid\nobpyramidal\nobpyriform\nObrazil\nobreption\nobreptitious\nobreptitiously\nobrogate\nobrogation\nobrotund\nobscene\nobscenely\nobsceneness\nobscenity\nobscurancy\nobscurant\nobscurantic\nobscurantism\nobscurantist\nobscuration\nobscurative\nobscure\nobscuredly\nobscurely\nobscurement\nobscureness\nobscurer\nobscurism\nobscurist\nobscurity\nobsecrate\nobsecration\nobsecrationary\nobsecratory\nobsede\nobsequence\nobsequent\nobsequial\nobsequience\nobsequiosity\nobsequious\nobsequiously\nobsequiousness\nobsequity\nobsequium\nobsequy\nobservability\nobservable\nobservableness\nobservably\nobservance\nobservancy\nobservandum\nobservant\nObservantine\nObservantist\nobservantly\nobservantness\nobservation\nobservational\nobservationalism\nobservationally\nobservative\nobservatorial\nobservatory\nobserve\nobservedly\nobserver\nobservership\nobserving\nobservingly\nobsess\nobsessingly\nobsession\nobsessional\nobsessionist\nobsessive\nobsessor\nobsidian\nobsidianite\nobsidional\nobsidionary\nobsidious\nobsignate\nobsignation\nobsignatory\nobsolesce\nobsolescence\nobsolescent\nobsolescently\nobsolete\nobsoletely\nobsoleteness\nobsoletion\nobsoletism\nobstacle\nobstetric\nobstetrical\nobstetrically\nobstetricate\nobstetrication\nobstetrician\nobstetrics\nobstetricy\nobstetrist\nobstetrix\nobstinacious\nobstinacy\nobstinance\nobstinate\nobstinately\nobstinateness\nobstination\nobstinative\nobstipation\nobstreperate\nobstreperosity\nobstreperous\nobstreperously\nobstreperousness\nobstriction\nobstringe\nobstruct\nobstructant\nobstructedly\nobstructer\nobstructingly\nobstruction\nobstructionism\nobstructionist\nobstructive\nobstructively\nobstructiveness\nobstructivism\nobstructivity\nobstructor\nobstruent\nobstupefy\nobtain\nobtainable\nobtainal\nobtainance\nobtainer\nobtainment\nobtect\nobtected\nobtemper\nobtemperate\nobtenebrate\nobtenebration\nobtention\nobtest\nobtestation\nobtriangular\nobtrude\nobtruder\nobtruncate\nobtruncation\nobtruncator\nobtrusion\nobtrusionist\nobtrusive\nobtrusively\nobtrusiveness\nobtund\nobtundent\nobtunder\nobtundity\nobturate\nobturation\nobturator\nobturatory\nobturbinate\nobtusangular\nobtuse\nobtusely\nobtuseness\nobtusifid\nobtusifolious\nobtusilingual\nobtusilobous\nobtusion\nobtusipennate\nobtusirostrate\nobtusish\nobtusity\nobumbrant\nobumbrate\nobumbration\nobvallate\nobvelation\nobvention\nobverse\nobversely\nobversion\nobvert\nobvertend\nobviable\nobviate\nobviation\nobviative\nobviator\nobvious\nobviously\nobviousness\nobvolute\nobvoluted\nobvolution\nobvolutive\nobvolve\nobvolvent\nocarina\nOccamism\nOccamist\nOccamistic\nOccamite\noccamy\noccasion\noccasionable\noccasional\noccasionalism\noccasionalist\noccasionalistic\noccasionality\noccasionally\noccasionalness\noccasionary\noccasioner\noccasionless\noccasive\noccident\noccidental\nOccidentalism\nOccidentalist\noccidentality\nOccidentalization\nOccidentalize\noccidentally\nocciduous\noccipital\noccipitalis\noccipitally\noccipitoanterior\noccipitoatlantal\noccipitoatloid\noccipitoaxial\noccipitoaxoid\noccipitobasilar\noccipitobregmatic\noccipitocalcarine\noccipitocervical\noccipitofacial\noccipitofrontal\noccipitofrontalis\noccipitohyoid\noccipitoiliac\noccipitomastoid\noccipitomental\noccipitonasal\noccipitonuchal\noccipitootic\noccipitoparietal\noccipitoposterior\noccipitoscapular\noccipitosphenoid\noccipitosphenoidal\noccipitotemporal\noccipitothalamic\nocciput\noccitone\nocclude\noccludent\nocclusal\noccluse\nocclusion\nocclusive\nocclusiveness\nocclusocervical\nocclusocervically\nocclusogingival\nocclusometer\nocclusor\noccult\noccultate\noccultation\nocculter\nocculting\noccultism\noccultist\noccultly\noccultness\noccupable\noccupance\noccupancy\noccupant\noccupation\noccupational\noccupationalist\noccupationally\noccupationless\noccupative\noccupiable\noccupier\noccupy\noccur\noccurrence\noccurrent\noccursive\nocean\noceaned\noceanet\noceanful\nOceanian\noceanic\nOceanican\noceanity\noceanographer\noceanographic\noceanographical\noceanographically\noceanographist\noceanography\noceanology\noceanophyte\noceanside\noceanward\noceanwards\noceanways\noceanwise\nocellar\nocellary\nocellate\nocellated\nocellation\nocelli\nocellicyst\nocellicystic\nocelliferous\nocelliform\nocelligerous\nocellus\noceloid\nocelot\noch\nochava\nochavo\nocher\nocherish\nocherous\nochery\nochidore\nochlesis\nochlesitic\nochletic\nochlocracy\nochlocrat\nochlocratic\nochlocratical\nochlocratically\nochlophobia\nochlophobist\nOchna\nOchnaceae\nochnaceous\nochone\nOchotona\nOchotonidae\nOchozoma\nochraceous\nOchrana\nochrea\nochreate\nochreous\nochro\nochrocarpous\nochroid\nochroleucous\nochrolite\nOchroma\nochronosis\nochronosus\nochronotic\nochrous\nocht\nOcimum\nock\noclock\nOcneria\nocote\nOcotea\nocotillo\nocque\nocracy\nocrea\nocreaceous\nOcreatae\nocreate\nocreated\noctachloride\noctachord\noctachordal\noctachronous\nOctacnemus\noctacolic\noctactinal\noctactine\nOctactiniae\noctactinian\noctad\noctadecahydrate\noctadecane\noctadecanoic\noctadecyl\noctadic\noctadrachm\noctaemeron\noctaeteric\noctaeterid\noctagon\noctagonal\noctagonally\noctahedral\noctahedric\noctahedrical\noctahedrite\noctahedroid\noctahedron\noctahedrous\noctahydrate\noctahydrated\noctakishexahedron\noctamerism\noctamerous\noctameter\noctan\noctanaphthene\nOctandria\noctandrian\noctandrious\noctane\noctangle\noctangular\noctangularness\nOctans\noctant\noctantal\noctapla\noctaploid\noctaploidic\noctaploidy\noctapodic\noctapody\noctarch\noctarchy\noctarius\noctarticulate\noctary\noctasemic\noctastich\noctastichon\noctastrophic\noctastyle\noctastylos\noctateuch\noctaval\noctavalent\noctavarium\noctave\nOctavia\nOctavian\noctavic\noctavina\nOctavius\noctavo\noctenary\noctene\noctennial\noctennially\noctet\noctic\noctillion\noctillionth\noctine\noctingentenary\noctoad\noctoalloy\noctoate\noctobass\nOctober\noctobrachiate\nOctobrist\noctocentenary\noctocentennial\noctochord\nOctocoralla\noctocorallan\nOctocorallia\noctocoralline\noctocotyloid\noctodactyl\noctodactyle\noctodactylous\noctodecimal\noctodecimo\noctodentate\noctodianome\nOctodon\noctodont\nOctodontidae\nOctodontinae\noctoechos\noctofid\noctofoil\noctofoiled\noctogamy\noctogenarian\noctogenarianism\noctogenary\noctogild\noctoglot\nOctogynia\noctogynian\noctogynious\noctogynous\noctoic\noctoid\noctolateral\noctolocular\noctomeral\noctomerous\noctometer\noctonal\noctonare\noctonarian\noctonarius\noctonary\noctonematous\noctonion\noctonocular\noctoon\noctopartite\noctopean\noctoped\noctopede\noctopetalous\noctophthalmous\noctophyllous\noctopi\noctopine\noctoploid\noctoploidic\noctoploidy\noctopod\nOctopoda\noctopodan\noctopodes\noctopodous\noctopolar\noctopus\noctoradial\noctoradiate\noctoradiated\noctoreme\noctoroon\noctose\noctosepalous\noctospermous\noctospore\noctosporous\noctostichous\noctosyllabic\noctosyllable\noctovalent\noctoyl\noctroi\noctroy\noctuor\noctuple\noctuplet\noctuplex\noctuplicate\noctuplication\noctuply\noctyl\noctylene\noctyne\nocuby\nocular\nocularist\nocularly\noculary\noculate\noculated\noculauditory\noculiferous\noculiform\noculigerous\nOculina\noculinid\nOculinidae\noculinoid\noculist\noculistic\noculocephalic\noculofacial\noculofrontal\noculomotor\noculomotory\noculonasal\noculopalpebral\noculopupillary\noculospinal\noculozygomatic\noculus\nocydrome\nocydromine\nOcydromus\nOcypete\nOcypoda\nocypodan\nOcypode\nocypodian\nOcypodidae\nocypodoid\nOcyroe\nOcyroidae\nOd\nod\noda\nOdacidae\nodacoid\nodal\nodalborn\nodalisk\nodalisque\nodaller\nodalman\nodalwoman\nOdax\nodd\noddish\noddity\noddlegs\noddly\noddman\noddment\noddments\noddness\nOdds\nodds\nOddsbud\noddsman\node\nodel\nodelet\nOdelsthing\nOdelsting\nodeon\nodeum\nodic\nodically\nOdin\nOdinian\nOdinic\nOdinism\nOdinist\nodinite\nOdinitic\nodiometer\nodious\nodiously\nodiousness\nodist\nodium\nodiumproof\nOdobenidae\nOdobenus\nOdocoileus\nodograph\nodology\nodometer\nodometrical\nodometry\nOdonata\nodontagra\nodontalgia\nodontalgic\nOdontaspidae\nOdontaspididae\nOdontaspis\nodontatrophia\nodontatrophy\nodontexesis\nodontiasis\nodontic\nodontist\nodontitis\nodontoblast\nodontoblastic\nodontocele\nOdontocete\nodontocete\nOdontoceti\nodontocetous\nodontochirurgic\nodontoclasis\nodontoclast\nodontodynia\nodontogen\nodontogenesis\nodontogenic\nodontogeny\nOdontoglossae\nodontoglossal\nodontoglossate\nOdontoglossum\nOdontognathae\nodontognathic\nodontognathous\nodontograph\nodontographic\nodontography\nodontohyperesthesia\nodontoid\nOdontolcae\nodontolcate\nodontolcous\nodontolite\nodontolith\nodontological\nodontologist\nodontology\nodontoloxia\nodontoma\nodontomous\nodontonecrosis\nodontoneuralgia\nodontonosology\nodontopathy\nodontophoral\nodontophore\nOdontophoridae\nOdontophorinae\nodontophorine\nodontophorous\nOdontophorus\nodontoplast\nodontoplerosis\nOdontopteris\nOdontopteryx\nodontorhynchous\nOdontormae\nOdontornithes\nodontornithic\nodontorrhagia\nodontorthosis\nodontoschism\nodontoscope\nodontosis\nodontostomatous\nodontostomous\nOdontosyllis\nodontotechny\nodontotherapia\nodontotherapy\nodontotomy\nOdontotormae\nodontotripsis\nodontotrypy\nodoom\nodophone\nodor\nodorant\nodorate\nodorator\nodored\nodorful\nodoriferant\nodoriferosity\nodoriferous\nodoriferously\nodoriferousness\nodorific\nodorimeter\nodorimetry\nodoriphore\nodorivector\nodorize\nodorless\nodorometer\nodorosity\nodorous\nodorously\nodorousness\nodorproof\nOdostemon\nOds\nodso\nodum\nodyl\nodylic\nodylism\nodylist\nodylization\nodylize\nOdynerus\nOdyssean\nOdyssey\nOdz\nOdzookers\nOdzooks\noe\nOecanthus\noecist\noecodomic\noecodomical\noecoparasite\noecoparasitism\noecophobia\noecumenian\noecumenic\noecumenical\noecumenicalism\noecumenicity\noecus\noedemerid\nOedemeridae\noedicnemine\nOedicnemus\nOedipal\nOedipean\nOedipus\nOedogoniaceae\noedogoniaceous\nOedogoniales\nOedogonium\noenanthaldehyde\noenanthate\nOenanthe\noenanthic\noenanthol\noenanthole\noenanthyl\noenanthylate\noenanthylic\noenin\nOenocarpus\noenochoe\noenocyte\noenocytic\noenolin\noenological\noenologist\noenology\noenomancy\nOenomaus\noenomel\noenometer\noenophilist\noenophobist\noenopoetic\nOenothera\nOenotheraceae\noenotheraceous\nOenotrian\noer\noersted\noes\noesophageal\noesophagi\noesophagismus\noesophagostomiasis\nOesophagostomum\noesophagus\noestradiol\nOestrelata\noestrian\noestriasis\noestrid\nOestridae\noestrin\noestriol\noestroid\noestrous\noestrual\noestruate\noestruation\noestrum\noestrus\nof\nOfer\noff\noffal\noffaling\noffbeat\noffcast\noffcome\noffcut\noffend\noffendable\noffendant\noffended\noffendedly\noffendedness\noffender\noffendible\noffendress\noffense\noffenseful\noffenseless\noffenselessly\noffenseproof\noffensible\noffensive\noffensively\noffensiveness\noffer\nofferable\nofferee\nofferer\noffering\nofferor\noffertorial\noffertory\noffgoing\noffgrade\noffhand\noffhanded\noffhandedly\noffhandedness\noffice\nofficeholder\nofficeless\nofficer\nofficerage\nofficeress\nofficerhood\nofficerial\nofficerism\nofficerless\nofficership\nofficial\nofficialdom\nofficialese\nofficialism\nofficiality\nofficialization\nofficialize\nofficially\nofficialty\nofficiant\nofficiary\nofficiate\nofficiation\nofficiator\nofficinal\nofficinally\nofficious\nofficiously\nofficiousness\noffing\noffish\noffishly\noffishness\nofflet\nofflook\noffprint\noffsaddle\noffscape\noffscour\noffscourer\noffscouring\noffscum\noffset\noffshoot\noffshore\noffsider\noffspring\nofftake\nofftype\noffuscate\noffuscation\noffward\noffwards\noflete\nOfo\noft\noften\noftenness\noftens\noftentime\noftentimes\nofter\noftest\noftly\noftness\nofttime\nofttimes\noftwhiles\nOg\nogaire\nOgallala\nogam\nogamic\nOgboni\nOgcocephalidae\nOgcocephalus\nogdoad\nogdoas\nogee\nogeed\nogganition\nogham\noghamic\nOghuz\nogival\nogive\nogived\nOglala\nogle\nogler\nogmic\nOgor\nOgpu\nogre\nogreish\nogreishly\nogreism\nogress\nogrish\nogrism\nogtiern\nogum\nOgygia\nOgygian\noh\nohelo\nohia\nOhio\nOhioan\nohm\nohmage\nohmic\nohmmeter\noho\nohoy\noidioid\noidiomycosis\noidiomycotic\nOidium\noii\noikology\noikoplast\noil\noilberry\noilbird\noilcan\noilcloth\noilcoat\noilcup\noildom\noiled\noiler\noilery\noilfish\noilhole\noilily\noiliness\noilless\noillessness\noillet\noillike\noilman\noilmonger\noilmongery\noilometer\noilpaper\noilproof\noilproofing\noilseed\noilskin\noilskinned\noilstock\noilstone\noilstove\noiltight\noiltightness\noilway\noily\noilyish\noime\noinochoe\noinology\noinomancy\noinomania\noinomel\noint\nointment\nOireachtas\noisin\noisivity\noitava\noiticica\nOjibwa\nOjibway\nOk\noka\nokapi\nOkapia\nokee\nokenite\noket\noki\nokia\nOkie\nOkinagan\nOklafalaya\nOklahannali\nOklahoma\nOklahoman\nokoniosis\nokonite\nokra\nokrug\nokshoofd\nokthabah\nOkuari\nokupukupu\nOlacaceae\nolacaceous\nOlaf\nolam\nolamic\nOlax\nOlcha\nOlchi\nOld\nold\nolden\nOldenburg\nolder\noldermost\noldfangled\noldfangledness\nOldfieldia\nOldhamia\noldhamite\noldhearted\noldish\noldland\noldness\noldster\noldwife\nOle\nOlea\nOleaceae\noleaceous\nOleacina\nOleacinidae\noleaginous\noleaginousness\noleana\noleander\noleandrin\nOlearia\nolease\noleaster\noleate\nolecranal\nolecranarthritis\nolecranial\nolecranian\nolecranoid\nolecranon\nolefiant\nolefin\nolefine\nolefinic\nOleg\noleic\noleiferous\nolein\nolena\nolenellidian\nOlenellus\nolenid\nOlenidae\nolenidian\nolent\nOlenus\noleo\noleocalcareous\noleocellosis\noleocyst\noleoduct\noleograph\noleographer\noleographic\noleography\noleomargaric\noleomargarine\noleometer\noleoptene\noleorefractometer\noleoresin\noleoresinous\noleosaccharum\noleose\noleosity\noleostearate\noleostearin\noleothorax\noleous\nOleraceae\noleraceous\nolericultural\nolericulturally\nolericulture\nOleron\nOlethreutes\nolethreutid\nOlethreutidae\nolfact\nolfactible\nolfaction\nolfactive\nolfactology\nolfactometer\nolfactometric\nolfactometry\nolfactor\nolfactorily\nolfactory\nolfacty\nOlga\noliban\nolibanum\nolid\noligacanthous\noligaemia\noligandrous\noliganthous\noligarch\noligarchal\noligarchic\noligarchical\noligarchically\noligarchism\noligarchist\noligarchize\noligarchy\noligemia\noligidria\noligist\noligistic\noligistical\noligocarpous\nOligocene\nOligochaeta\noligochaete\noligochaetous\noligochete\noligocholia\noligochrome\noligochromemia\noligochronometer\noligochylia\noligoclase\noligoclasite\noligocystic\noligocythemia\noligocythemic\noligodactylia\noligodendroglia\noligodendroglioma\noligodipsia\noligodontous\noligodynamic\noligogalactia\noligohemia\noligohydramnios\noligolactia\noligomenorrhea\noligomerous\noligomery\noligometochia\noligometochic\nOligomyodae\noligomyodian\noligomyoid\nOligonephria\noligonephric\noligonephrous\noligonite\noligopepsia\noligopetalous\noligophagous\noligophosphaturia\noligophrenia\noligophrenic\noligophyllous\noligoplasmia\noligopnea\noligopolistic\noligopoly\noligoprothesy\noligoprothetic\noligopsonistic\noligopsony\noligopsychia\noligopyrene\noligorhizous\noligosepalous\noligosialia\noligosideric\noligosiderite\noligosite\noligospermia\noligospermous\noligostemonous\noligosyllabic\noligosyllable\noligosynthetic\noligotokous\noligotrichia\noligotrophic\noligotrophy\noligotropic\noliguresis\noliguretic\noliguria\nOlinia\nOliniaceae\noliniaceous\nolio\noliphant\noliprance\nolitory\nOliva\noliva\nolivaceous\nolivary\nOlive\nolive\nOlivean\nolived\nOlivella\noliveness\nolivenite\nOliver\nOliverian\noliverman\noliversmith\nolivescent\nolivet\nOlivetan\nOlivette\nolivewood\nOlivia\nOlividae\nOlivier\noliviferous\noliviform\nolivil\nolivile\nolivilin\nolivine\nolivinefels\nolivinic\nolivinite\nolivinitic\nolla\nollamh\nollapod\nollenite\nOllie\nollock\nolm\nOlneya\nOlof\nological\nologist\nologistic\nology\nolomao\nolona\nOlonets\nOlonetsian\nOlonetsish\nOlor\noloroso\nolpe\nOlpidiaster\nOlpidium\nOlson\noltonde\noltunna\nolycook\nolykoek\nOlympia\nOlympiad\nOlympiadic\nOlympian\nOlympianism\nOlympianize\nOlympianly\nOlympianwise\nOlympic\nOlympicly\nOlympicness\nOlympieion\nOlympionic\nOlympus\nOlynthiac\nOlynthian\nOlynthus\nom\nomadhaun\nomagra\nOmagua\nOmaha\nomalgia\nOman\nOmani\nomao\nOmar\nomarthritis\nomasitis\nomasum\nomber\nombrette\nombrifuge\nombrograph\nombrological\nombrology\nombrometer\nombrophile\nombrophilic\nombrophilous\nombrophily\nombrophobe\nombrophobous\nombrophoby\nombrophyte\nombudsman\nombudsmanship\nomega\nomegoid\nomelet\nomelette\nomen\nomened\nomenology\nomental\nomentectomy\nomentitis\nomentocele\nomentofixation\nomentopexy\nomentoplasty\nomentorrhaphy\nomentosplenopexy\nomentotomy\nomentulum\nomentum\nomer\nomicron\nomina\nominous\nominously\nominousness\nomissible\nomission\nomissive\nomissively\nomit\nomitis\nomittable\nomitter\nomlah\nOmmastrephes\nOmmastrephidae\nommateal\nommateum\nommatidial\nommatidium\nommatophore\nommatophorous\nOmmiad\nOmmiades\nomneity\nomniactive\nomniactuality\nomniana\nomniarch\nomnibenevolence\nomnibenevolent\nomnibus\nomnibusman\nomnicausality\nomnicompetence\nomnicompetent\nomnicorporeal\nomnicredulity\nomnicredulous\nomnidenominational\nomnierudite\nomniessence\nomnifacial\nomnifarious\nomnifariously\nomnifariousness\nomniferous\nomnific\nomnificent\nomnifidel\nomniform\nomniformal\nomniformity\nomnify\nomnigenous\nomnigerent\nomnigraph\nomnihuman\nomnihumanity\nomnilegent\nomnilingual\nomniloquent\nomnilucent\nomnimental\nomnimeter\nomnimode\nomnimodous\nomninescience\nomninescient\nomniparent\nomniparient\nomniparity\nomniparous\nomnipatient\nomnipercipience\nomnipercipiency\nomnipercipient\nomniperfect\nomnipotence\nomnipotency\nomnipotent\nomnipotentiality\nomnipotently\nomnipregnant\nomnipresence\nomnipresent\nomnipresently\nomniprevalence\nomniprevalent\nomniproduction\nomniprudent\nomnirange\nomniregency\nomnirepresentative\nomnirepresentativeness\nomnirevealing\nomniscience\nomnisciency\nomniscient\nomnisciently\nomniscope\nomniscribent\nomniscriptive\nomnisentience\nomnisentient\nomnisignificance\nomnisignificant\nomnispective\nomnist\nomnisufficiency\nomnisufficient\nomnitemporal\nomnitenent\nomnitolerant\nomnitonal\nomnitonality\nomnitonic\nomnitude\nomnium\nomnivagant\nomnivalence\nomnivalent\nomnivalous\nomnivarious\nomnividence\nomnivident\nomnivision\nomnivolent\nOmnivora\nomnivoracious\nomnivoracity\nomnivorant\nomnivore\nomnivorous\nomnivorously\nomnivorousness\nomodynia\nomohyoid\nomoideum\nomophagia\nomophagist\nomophagous\nomophagy\nomophorion\nomoplate\nomoplatoscopy\nomostegite\nomosternal\nomosternum\nomphacine\nomphacite\nomphalectomy\nomphalic\nomphalism\nomphalitis\nomphalocele\nomphalode\nomphalodium\nomphalogenous\nomphaloid\nomphaloma\nomphalomesaraic\nomphalomesenteric\nomphaloncus\nomphalopagus\nomphalophlebitis\nomphalopsychic\nomphalopsychite\nomphalorrhagia\nomphalorrhea\nomphalorrhexis\nomphalos\nomphalosite\nomphaloskepsis\nomphalospinous\nomphalotomy\nomphalotripsy\nomphalus\non\nOna\nona\nonager\nOnagra\nonagra\nOnagraceae\nonagraceous\nOnan\nonanism\nonanist\nonanistic\nonca\nonce\noncetta\nOnchidiidae\nOnchidium\nOnchocerca\nonchocerciasis\nonchocercosis\noncia\nOncidium\noncin\noncograph\noncography\noncologic\noncological\noncology\noncome\noncometer\noncometric\noncometry\noncoming\nOncorhynchus\noncosimeter\noncosis\noncosphere\noncost\noncostman\noncotomy\nondagram\nondagraph\nondameter\nondascope\nondatra\nondine\nondogram\nondograph\nondometer\nondoscope\nondy\none\noneanother\noneberry\nonefold\nonefoldness\nonegite\nonehearted\nonehow\nOneida\noneiric\noneirocrit\noneirocritic\noneirocritical\noneirocritically\noneirocriticism\noneirocritics\noneirodynia\noneirologist\noneirology\noneiromancer\noneiromancy\noneiroscopic\noneiroscopist\noneiroscopy\noneirotic\noneism\nonement\noneness\noner\nonerary\nonerative\nonerosity\nonerous\nonerously\nonerousness\nonery\noneself\nonesigned\nonetime\nonewhere\noneyer\nonfall\nonflemed\nonflow\nonflowing\nongaro\nongoing\nonhanger\nonicolo\noniomania\noniomaniac\nonion\nonionet\nonionized\nonionlike\nonionpeel\nonionskin\noniony\nonirotic\nOniscidae\nonisciform\noniscoid\nOniscoidea\noniscoidean\nOniscus\nonium\nonkilonite\nonkos\nonlay\nonlepy\nonliest\nonliness\nonlook\nonlooker\nonlooking\nonly\nonmarch\nOnmun\nOnobrychis\nonocentaur\nOnoclea\nonofrite\nOnohippidium\nonolatry\nonomancy\nonomantia\nonomastic\nonomasticon\nonomatologist\nonomatology\nonomatomania\nonomatope\nonomatoplasm\nonomatopoeia\nonomatopoeial\nonomatopoeian\nonomatopoeic\nonomatopoeical\nonomatopoeically\nonomatopoesis\nonomatopoesy\nonomatopoetic\nonomatopoetically\nonomatopy\nonomatous\nonomomancy\nOnondaga\nOnondagan\nOnonis\nOnopordon\nOnosmodium\nonrush\nonrushing\nons\nonset\nonsetter\nonshore\nonside\nonsight\nonslaught\nonstand\nonstanding\nonstead\nonsweep\nonsweeping\nontal\nOntarian\nOntaric\nonto\nontocycle\nontocyclic\nontogenal\nontogenesis\nontogenetic\nontogenetical\nontogenetically\nontogenic\nontogenically\nontogenist\nontogeny\nontography\nontologic\nontological\nontologically\nontologism\nontologist\nontologistic\nontologize\nontology\nontosophy\nonus\nonwaiting\nonward\nonwardly\nonwardness\nonwards\nonycha\nonychatrophia\nonychauxis\nonychia\nonychin\nonychitis\nonychium\nonychogryposis\nonychoid\nonycholysis\nonychomalacia\nonychomancy\nonychomycosis\nonychonosus\nonychopathic\nonychopathology\nonychopathy\nonychophagist\nonychophagy\nOnychophora\nonychophoran\nonychophorous\nonychophyma\nonychoptosis\nonychorrhexis\nonychoschizia\nonychosis\nonychotrophy\nonym\nonymal\nonymancy\nonymatic\nonymity\nonymize\nonymous\nonymy\nonyx\nonyxis\nonyxitis\nonza\nooangium\nooblast\nooblastic\noocyesis\noocyst\nOocystaceae\noocystaceous\noocystic\nOocystis\noocyte\noodles\nooecial\nooecium\noofbird\nooftish\noofy\noogamete\noogamous\noogamy\noogenesis\noogenetic\noogeny\nooglea\noogone\noogonial\noogoniophore\noogonium\noograph\nooid\nooidal\nookinesis\nookinete\nookinetic\noolak\noolemma\noolite\noolitic\noolly\noologic\noological\noologically\noologist\noologize\noology\noolong\noomancy\noomantia\noometer\noometric\noometry\noomycete\nOomycetes\noomycetous\noons\noont\noopak\noophoralgia\noophorauxe\noophore\noophorectomy\noophoreocele\noophorhysterectomy\noophoric\noophoridium\noophoritis\noophoroepilepsy\noophoroma\noophoromalacia\noophoromania\noophoron\noophoropexy\noophororrhaphy\noophorosalpingectomy\noophorostomy\noophorotomy\noophyte\noophytic\nooplasm\nooplasmic\nooplast\noopod\noopodal\nooporphyrin\noorali\noord\nooscope\nooscopy\noosperm\noosphere\noosporange\noosporangium\noospore\nOosporeae\noosporic\noosporiferous\noosporous\noostegite\noostegitic\nootheca\noothecal\nootid\nootocoid\nOotocoidea\nootocoidean\nootocous\nootype\nooze\noozily\nooziness\noozooid\noozy\nopacate\nopacification\nopacifier\nopacify\nopacite\nopacity\nopacous\nopacousness\nopah\nopal\nopaled\nopalesce\nopalescence\nopalescent\nopalesque\nOpalina\nopaline\nopalinid\nOpalinidae\nopalinine\nopalish\nopalize\nopaloid\nopaque\nopaquely\nopaqueness\nOpata\nopdalite\nope\nOpegrapha\nopeidoscope\nopelet\nopen\nopenable\nopenband\nopenbeak\nopenbill\nopencast\nopener\nopenhanded\nopenhandedly\nopenhandedness\nopenhead\nopenhearted\nopenheartedly\nopenheartedness\nopening\nopenly\nopenmouthed\nopenmouthedly\nopenmouthedness\nopenness\nopenside\nopenwork\nopera\noperability\noperabily\noperable\noperae\noperagoer\noperalogue\noperameter\noperance\noperancy\noperand\noperant\noperatable\noperate\noperatee\noperatic\noperatical\noperatically\noperating\noperation\noperational\noperationalism\noperationalist\noperationism\noperationist\noperative\noperatively\noperativeness\noperativity\noperatize\noperator\noperatory\noperatrix\nopercle\nopercled\nopercula\nopercular\nOperculata\noperculate\noperculated\noperculiferous\noperculiform\noperculigenous\noperculigerous\noperculum\noperetta\noperette\noperettist\noperose\noperosely\noperoseness\noperosity\nOphelia\nophelimity\nOphian\nophiasis\nophic\nophicalcite\nOphicephalidae\nophicephaloid\nOphicephalus\nOphichthyidae\nophichthyoid\nophicleide\nophicleidean\nophicleidist\nOphidia\nophidian\nOphidiidae\nOphidiobatrachia\nophidioid\nOphidion\nophidiophobia\nophidious\nophidologist\nophidology\nOphiobatrachia\nOphiobolus\nOphioglossaceae\nophioglossaceous\nOphioglossales\nOphioglossum\nophiography\nophioid\nophiolater\nophiolatrous\nophiolatry\nophiolite\nophiolitic\nophiologic\nophiological\nophiologist\nophiology\nophiomancy\nophiomorph\nOphiomorpha\nophiomorphic\nophiomorphous\nOphion\nophionid\nOphioninae\nophionine\nophiophagous\nophiophilism\nophiophilist\nophiophobe\nophiophobia\nophiophoby\nophiopluteus\nOphiosaurus\nophiostaphyle\nophiouride\nOphis\nOphisaurus\nOphism\nOphite\nophite\nOphitic\nophitic\nOphitism\nOphiuchid\nOphiuchus\nophiuran\nophiurid\nOphiurida\nophiuroid\nOphiuroidea\nophiuroidean\nophryon\nOphrys\nophthalaiater\nophthalmagra\nophthalmalgia\nophthalmalgic\nophthalmatrophia\nophthalmectomy\nophthalmencephalon\nophthalmetrical\nophthalmia\nophthalmiac\nophthalmiatrics\nophthalmic\nophthalmious\nophthalmist\nophthalmite\nophthalmitic\nophthalmitis\nophthalmoblennorrhea\nophthalmocarcinoma\nophthalmocele\nophthalmocopia\nophthalmodiagnosis\nophthalmodiastimeter\nophthalmodynamometer\nophthalmodynia\nophthalmography\nophthalmoleucoscope\nophthalmolith\nophthalmologic\nophthalmological\nophthalmologist\nophthalmology\nophthalmomalacia\nophthalmometer\nophthalmometric\nophthalmometry\nophthalmomycosis\nophthalmomyositis\nophthalmomyotomy\nophthalmoneuritis\nophthalmopathy\nophthalmophlebotomy\nophthalmophore\nophthalmophorous\nophthalmophthisis\nophthalmoplasty\nophthalmoplegia\nophthalmoplegic\nophthalmopod\nophthalmoptosis\nophthalmorrhagia\nophthalmorrhea\nophthalmorrhexis\nOphthalmosaurus\nophthalmoscope\nophthalmoscopic\nophthalmoscopical\nophthalmoscopist\nophthalmoscopy\nophthalmostasis\nophthalmostat\nophthalmostatometer\nophthalmothermometer\nophthalmotomy\nophthalmotonometer\nophthalmotonometry\nophthalmotrope\nophthalmotropometer\nophthalmy\nopianic\nopianyl\nopiate\nopiateproof\nopiatic\nOpiconsivia\nopificer\nopiism\nOpilia\nOpiliaceae\nopiliaceous\nOpiliones\nOpilionina\nopilionine\nOpilonea\nOpimian\nopinability\nopinable\nopinably\nopinant\nopination\nopinative\nopinatively\nopinator\nopine\nopiner\nopiniaster\nopiniastre\nopiniastrety\nopiniastrous\nopiniater\nopiniative\nopiniatively\nopiniativeness\nopiniatreness\nopiniatrety\nopinion\nopinionable\nopinionaire\nopinional\nopinionate\nopinionated\nopinionatedly\nopinionatedness\nopinionately\nopinionative\nopinionatively\nopinionativeness\nopinioned\nopinionedness\nopinionist\nopiomania\nopiomaniac\nopiophagism\nopiophagy\nopiparous\nopisometer\nopisthenar\nopisthion\nopisthobranch\nOpisthobranchia\nopisthobranchiate\nOpisthocoelia\nopisthocoelian\nopisthocoelous\nopisthocome\nOpisthocomi\nOpisthocomidae\nopisthocomine\nopisthocomous\nopisthodetic\nopisthodome\nopisthodomos\nopisthodomus\nopisthodont\nopisthogastric\nOpisthoglossa\nopisthoglossal\nopisthoglossate\nopisthoglyph\nOpisthoglypha\nopisthoglyphic\nopisthoglyphous\nOpisthognathidae\nopisthognathism\nopisthognathous\nopisthograph\nopisthographal\nopisthographic\nopisthographical\nopisthography\nopisthogyrate\nopisthogyrous\nOpisthoparia\nopisthoparian\nopisthophagic\nopisthoporeia\nopisthorchiasis\nOpisthorchis\nopisthosomal\nOpisthothelae\nopisthotic\nopisthotonic\nopisthotonoid\nopisthotonos\nopisthotonus\nopium\nopiumism\nopobalsam\nopodeldoc\nopodidymus\nopodymus\nopopanax\nOporto\nopossum\nopotherapy\nOppian\noppidan\noppilate\noppilation\noppilative\nopponency\nopponent\nopportune\nopportuneless\nopportunely\nopportuneness\nopportunism\nopportunist\nopportunistic\nopportunistically\nopportunity\nopposability\nopposable\noppose\nopposed\nopposeless\nopposer\nopposing\nopposingly\nopposit\nopposite\noppositely\noppositeness\noppositiflorous\noppositifolious\nopposition\noppositional\noppositionary\noppositionism\noppositionist\noppositionless\noppositious\noppositipetalous\noppositipinnate\noppositipolar\noppositisepalous\noppositive\noppositively\noppositiveness\nopposure\noppress\noppressed\noppressible\noppression\noppressionist\noppressive\noppressively\noppressiveness\noppressor\nopprobriate\nopprobrious\nopprobriously\nopprobriousness\nopprobrium\nopprobry\noppugn\noppugnacy\noppugnance\noppugnancy\noppugnant\noppugnate\noppugnation\noppugner\nopsigamy\nopsimath\nopsimathy\nopsiometer\nopsisform\nopsistype\nopsonic\nopsoniferous\nopsonification\nopsonify\nopsonin\nopsonist\nopsonium\nopsonization\nopsonize\nopsonogen\nopsonoid\nopsonology\nopsonometry\nopsonophilia\nopsonophilic\nopsonophoric\nopsonotherapy\nopsy\nopt\noptable\noptableness\noptably\noptant\noptate\noptation\noptative\noptatively\nopthalmophorium\nopthalmoplegy\nopthalmothermometer\noptic\noptical\noptically\noptician\nopticist\nopticity\nopticochemical\nopticociliary\nopticon\nopticopapillary\nopticopupillary\noptics\noptigraph\noptimacy\noptimal\noptimate\noptimates\noptime\noptimism\noptimist\noptimistic\noptimistical\noptimistically\noptimity\noptimization\noptimize\noptimum\noption\noptional\noptionality\noptionalize\noptionally\noptionary\noptionee\noptionor\noptive\noptoblast\noptogram\noptography\noptological\noptologist\noptology\noptomeninx\noptometer\noptometrical\noptometrist\noptometry\noptophone\noptotechnics\noptotype\nOpulaster\nopulence\nopulency\nopulent\nopulently\nopulus\nOpuntia\nOpuntiaceae\nOpuntiales\nopuntioid\nopus\nopuscular\nopuscule\nopusculum\noquassa\nor\nora\norabassu\norach\noracle\noracular\noracularity\noracularly\noracularness\noraculate\noraculous\noraculously\noraculousness\noraculum\norad\norage\noragious\nOrakzai\noral\noraler\noralism\noralist\norality\noralization\noralize\norally\noralogist\noralogy\nOrang\norang\norange\norangeade\norangebird\nOrangeism\nOrangeist\norangeleaf\nOrangeman\norangeman\noranger\norangeroot\norangery\norangewoman\norangewood\norangey\norangism\norangist\norangite\norangize\norangutan\norant\nOraon\norarian\norarion\norarium\norary\norate\noration\norational\norationer\norator\noratorial\noratorially\nOratorian\noratorian\nOratorianism\nOratorianize\noratoric\noratorical\noratorically\noratorio\noratorize\noratorlike\noratorship\noratory\noratress\noratrix\norb\norbed\norbic\norbical\nOrbicella\norbicle\norbicular\norbicularis\norbicularity\norbicularly\norbicularness\norbiculate\norbiculated\norbiculately\norbiculation\norbiculatocordate\norbiculatoelliptical\nOrbiculoidea\norbific\nOrbilian\nOrbilius\norbit\norbital\norbitale\norbitar\norbitary\norbite\norbitelar\nOrbitelariae\norbitelarian\norbitele\norbitelous\norbitofrontal\nOrbitoides\nOrbitolina\norbitolite\nOrbitolites\norbitomalar\norbitomaxillary\norbitonasal\norbitopalpebral\norbitosphenoid\norbitosphenoidal\norbitostat\norbitotomy\norbitozygomatic\norbless\norblet\nOrbulina\norby\norc\nOrca\nOrcadian\norcanet\norcein\norchamus\norchard\norcharding\norchardist\norchardman\norchat\norchel\norchella\norchesis\norchesography\norchester\nOrchestia\norchestian\norchestic\norchestiid\nOrchestiidae\norchestra\norchestral\norchestraless\norchestrally\norchestrate\norchestrater\norchestration\norchestrator\norchestre\norchestric\norchestrina\norchestrion\norchialgia\norchic\norchichorea\norchid\nOrchidaceae\norchidacean\norchidaceous\nOrchidales\norchidalgia\norchidectomy\norchideous\norchideously\norchidist\norchiditis\norchidocele\norchidocelioplasty\norchidologist\norchidology\norchidomania\norchidopexy\norchidoplasty\norchidoptosis\norchidorrhaphy\norchidotherapy\norchidotomy\norchiectomy\norchiencephaloma\norchiepididymitis\norchil\norchilla\norchilytic\norchiocatabasis\norchiocele\norchiodynia\norchiomyeloma\norchioncus\norchioneuralgia\norchiopexy\norchioplasty\norchiorrhaphy\norchioscheocele\norchioscirrhus\norchiotomy\nOrchis\norchitic\norchitis\norchotomy\norcin\norcinol\nOrcinus\nordain\nordainable\nordainer\nordainment\nordanchite\nordeal\norder\norderable\nordered\norderedness\norderer\norderless\norderliness\norderly\nordinable\nordinal\nordinally\nordinance\nordinand\nordinant\nordinar\nordinarily\nordinariness\nordinarius\nordinary\nordinaryship\nordinate\nordinately\nordination\nordinative\nordinatomaculate\nordinator\nordinee\nordines\nordnance\nordonnance\nordonnant\nordosite\nOrdovian\nOrdovices\nOrdovician\nordu\nordure\nordurous\nore\noread\nOreamnos\nOreas\norecchion\norectic\norective\noreillet\norellin\noreman\norenda\norendite\nOreocarya\nOreodon\noreodont\nOreodontidae\noreodontine\noreodontoid\nOreodoxa\nOreophasinae\noreophasine\nOreophasis\nOreortyx\noreotragine\nOreotragus\nOreotrochilus\nOrestean\nOresteia\noreweed\norewood\norexis\norf\norfgild\norgan\norganal\norganbird\norgandy\norganella\norganelle\norganer\norganette\norganic\norganical\norganically\norganicalness\norganicism\norganicismal\norganicist\norganicistic\norganicity\norganific\norganing\norganism\norganismal\norganismic\norganist\norganistic\norganistrum\norganistship\norganity\norganizability\norganizable\norganization\norganizational\norganizationally\norganizationist\norganizatory\norganize\norganized\norganizer\norganless\norganoantimony\norganoarsenic\norganobismuth\norganoboron\norganochordium\norganogel\norganogen\norganogenesis\norganogenetic\norganogenic\norganogenist\norganogeny\norganogold\norganographic\norganographical\norganographist\norganography\norganoid\norganoiron\norganolead\norganoleptic\norganolithium\norganologic\norganological\norganologist\norganology\norganomagnesium\norganomercury\norganometallic\norganon\norganonomic\norganonomy\norganonym\norganonymal\norganonymic\norganonymy\norganopathy\norganophil\norganophile\norganophilic\norganophone\norganophonic\norganophyly\norganoplastic\norganoscopy\norganosilicon\norganosilver\norganosodium\norganosol\norganotherapy\norganotin\norganotrophic\norganotropic\norganotropically\norganotropism\norganotropy\norganozinc\norganry\norganule\norganum\norganzine\norgasm\norgasmic\norgastic\norgeat\norgia\norgiac\norgiacs\norgiasm\norgiast\norgiastic\norgiastical\norgic\norgue\norguinette\norgulous\norgulously\norgy\norgyia\nOrias\nOribatidae\noribi\norichalceous\norichalch\norichalcum\noriconic\noricycle\noriel\noriency\norient\nOriental\noriental\nOrientalia\norientalism\norientalist\norientality\norientalization\norientalize\norientally\nOrientalogy\norientate\norientation\norientative\norientator\norientite\norientization\norientize\noriently\norientness\norifacial\norifice\norificial\noriflamb\noriflamme\noriform\norigan\noriganized\nOriganum\nOrigenian\nOrigenic\nOrigenical\nOrigenism\nOrigenist\nOrigenistic\nOrigenize\norigin\noriginable\noriginal\noriginalist\noriginality\noriginally\noriginalness\noriginant\noriginarily\noriginary\noriginate\norigination\noriginative\noriginatively\noriginator\noriginatress\noriginist\norignal\norihon\norihyperbola\norillion\norillon\norinasal\norinasality\noriole\nOriolidae\nOriolus\nOrion\nOriskanian\norismologic\norismological\norismology\norison\norisphere\noristic\nOriya\nOrkhon\nOrkneyan\nOrlando\norle\norlean\nOrleanism\nOrleanist\nOrleanistic\nOrleans\norlet\norleways\norlewise\norlo\norlop\nOrmazd\normer\normolu\nOrmond\norna\nornament\nornamental\nornamentalism\nornamentalist\nornamentality\nornamentalize\nornamentally\nornamentary\nornamentation\nornamenter\nornamentist\nornate\nornately\nornateness\nornation\nornature\norneriness\nornery\nornis\norniscopic\norniscopist\norniscopy\nornithic\nornithichnite\nornithine\nOrnithischia\nornithischian\nornithivorous\nornithobiographical\nornithobiography\nornithocephalic\nOrnithocephalidae\nornithocephalous\nOrnithocephalus\nornithocoprolite\nornithocopros\nornithodelph\nOrnithodelphia\nornithodelphian\nornithodelphic\nornithodelphous\nOrnithodoros\nOrnithogaea\nOrnithogaean\nOrnithogalum\nornithogeographic\nornithogeographical\nornithography\nornithoid\nOrnitholestes\nornitholite\nornitholitic\nornithologic\nornithological\nornithologically\nornithologist\nornithology\nornithomancy\nornithomantia\nornithomantic\nornithomantist\nOrnithomimidae\nOrnithomimus\nornithomorph\nornithomorphic\nornithomyzous\nornithon\nOrnithopappi\nornithophile\nornithophilist\nornithophilite\nornithophilous\nornithophily\nornithopod\nOrnithopoda\nornithopter\nOrnithoptera\nOrnithopteris\nOrnithorhynchidae\nornithorhynchous\nOrnithorhynchus\nornithosaur\nOrnithosauria\nornithosaurian\nOrnithoscelida\nornithoscelidan\nornithoscopic\nornithoscopist\nornithoscopy\nornithosis\nornithotomical\nornithotomist\nornithotomy\nornithotrophy\nOrnithurae\nornithuric\nornithurous\nornoite\noroanal\nOrobanchaceae\norobanchaceous\nOrobanche\norobancheous\norobathymetric\nOrobatoidea\nOrochon\norocratic\norodiagnosis\norogen\norogenesis\norogenesy\norogenetic\norogenic\norogeny\norograph\norographic\norographical\norographically\norography\noroheliograph\nOrohippus\norohydrographic\norohydrographical\norohydrography\noroide\norolingual\norological\norologist\norology\norometer\norometric\norometry\nOromo\noronasal\noronoco\nOrontium\noropharyngeal\noropharynx\norotherapy\nOrotinan\norotund\norotundity\norphan\norphancy\norphandom\norphange\norphanhood\norphanism\norphanize\norphanry\norphanship\norpharion\nOrphean\nOrpheist\norpheon\norpheonist\norpheum\nOrpheus\nOrphic\nOrphical\nOrphically\nOrphicism\nOrphism\nOrphize\norphrey\norphreyed\norpiment\norpine\nOrpington\norrery\norrhoid\norrhology\norrhotherapy\norris\norrisroot\norseille\norseilline\norsel\norselle\norseller\norsellic\norsellinate\norsellinic\nOrson\nort\nortalid\nOrtalidae\nortalidian\nOrtalis\nortet\nOrthagoriscus\northal\northantimonic\nOrtheris\northian\northic\northicon\northid\nOrthidae\nOrthis\northite\northitic\northo\northoarsenite\northoaxis\northobenzoquinone\northobiosis\northoborate\northobrachycephalic\northocarbonic\northocarpous\nOrthocarpus\northocenter\northocentric\northocephalic\northocephalous\northocephaly\northoceracone\nOrthoceran\nOrthoceras\nOrthoceratidae\northoceratite\northoceratitic\northoceratoid\northochlorite\northochromatic\northochromatize\northoclase\northoclasite\northoclastic\northocoumaric\northocresol\northocymene\northodiaene\northodiagonal\northodiagram\northodiagraph\northodiagraphic\northodiagraphy\northodiazin\northodiazine\northodolichocephalic\northodomatic\northodome\northodontia\northodontic\northodontics\northodontist\northodox\northodoxal\northodoxality\northodoxally\northodoxian\northodoxical\northodoxically\northodoxism\northodoxist\northodoxly\northodoxness\northodoxy\northodromic\northodromics\northodromy\northoepic\northoepical\northoepically\northoepist\northoepistic\northoepy\northoformic\northogamous\northogamy\northogenesis\northogenetic\northogenic\northognathic\northognathism\northognathous\northognathus\northognathy\northogneiss\northogonal\northogonality\northogonally\northogonial\northograde\northogranite\northograph\northographer\northographic\northographical\northographically\northographist\northographize\northography\northohydrogen\northologer\northologian\northological\northology\northometopic\northometric\northometry\nOrthonectida\northonitroaniline\northopath\northopathic\northopathically\northopathy\northopedia\northopedic\northopedical\northopedically\northopedics\northopedist\northopedy\northophenylene\northophonic\northophony\northophoria\northophoric\northophosphate\northophosphoric\northophyre\northophyric\northopinacoid\northopinacoidal\northoplastic\northoplasy\northoplumbate\northopnea\northopneic\northopod\nOrthopoda\northopraxis\northopraxy\northoprism\northopsychiatric\northopsychiatrical\northopsychiatrist\northopsychiatry\northopter\nOrthoptera\northopteral\northopteran\northopterist\northopteroid\nOrthopteroidea\northopterological\northopterologist\northopterology\northopteron\northopterous\northoptic\northopyramid\northopyroxene\northoquinone\northorhombic\nOrthorrhapha\northorrhaphous\northorrhaphy\northoscope\northoscopic\northose\northosemidin\northosemidine\northosilicate\northosilicic\northosis\northosite\northosomatic\northospermous\northostatic\northostichous\northostichy\northostyle\northosubstituted\northosymmetric\northosymmetrical\northosymmetrically\northosymmetry\northotactic\northotectic\northotic\northotolidin\northotolidine\northotoluic\northotoluidin\northotoluidine\northotomic\northotomous\northotone\northotonesis\northotonic\northotonus\northotropal\northotropic\northotropism\northotropous\northotropy\northotype\northotypous\northovanadate\northovanadic\northoveratraldehyde\northoveratric\northoxazin\northoxazine\northoxylene\northron\nortiga\nortive\nOrtol\nortolan\nOrtrud\nortstein\nortygan\nOrtygian\nOrtyginae\nortygine\nOrtyx\nOrunchun\norvietan\norvietite\nOrvieto\nOrville\nory\nOrycteropodidae\nOrycteropus\noryctics\noryctognostic\noryctognostical\noryctognostically\noryctognosy\nOryctolagus\noryssid\nOryssidae\nOryssus\nOryx\nOryza\noryzenin\noryzivorous\nOryzomys\nOryzopsis\nOryzorictes\nOryzorictinae\nOs\nos\nOsage\nosamin\nosamine\nosazone\nOsc\nOscan\nOscar\nOscarella\nOscarellidae\noscella\noscheal\noscheitis\noscheocarcinoma\noscheocele\noscheolith\noscheoma\noscheoncus\noscheoplasty\nOschophoria\noscillance\noscillancy\noscillant\nOscillaria\nOscillariaceae\noscillariaceous\noscillate\noscillating\noscillation\noscillative\noscillatively\noscillator\nOscillatoria\nOscillatoriaceae\noscillatoriaceous\noscillatorian\noscillatory\noscillogram\noscillograph\noscillographic\noscillography\noscillometer\noscillometric\noscillometry\noscilloscope\noscin\noscine\nOscines\noscinian\nOscinidae\noscinine\nOscinis\noscitance\noscitancy\noscitant\noscitantly\noscitate\noscitation\noscnode\nosculable\nosculant\noscular\noscularity\nosculate\nosculation\nosculatory\nosculatrix\noscule\nosculiferous\nosculum\noscurrantist\nose\nosela\noshac\nOsiandrian\noside\nosier\nosiered\nosierlike\nosiery\nOsirian\nOsiride\nOsiridean\nOsirification\nOsirify\nOsiris\nOsirism\nOskar\nOsmanie\nOsmanli\nOsmanthus\nosmate\nosmatic\nosmatism\nosmazomatic\nosmazomatous\nosmazome\nOsmeridae\nOsmerus\nosmesis\nosmeterium\nosmetic\nosmic\nosmidrosis\nosmin\nosmina\nosmious\nosmiridium\nosmium\nosmodysphoria\nosmogene\nosmograph\nosmolagnia\nosmology\nosmometer\nosmometric\nosmometry\nOsmond\nosmondite\nosmophore\nosmoregulation\nOsmorhiza\nosmoscope\nosmose\nosmosis\nosmotactic\nosmotaxis\nosmotherapy\nosmotic\nosmotically\nosmous\nosmund\nOsmunda\nOsmundaceae\nosmundaceous\nosmundine\nOsnaburg\nOsnappar\nosoberry\nosone\nosophy\nosotriazine\nosotriazole\nosphradial\nosphradium\nosphresiolagnia\nosphresiologic\nosphresiologist\nosphresiology\nosphresiometer\nosphresiometry\nosphresiophilia\nosphresis\nosphretic\nOsphromenidae\nosphyalgia\nosphyalgic\nosphyarthritis\nosphyitis\nosphyocele\nosphyomelitis\nosprey\nossal\nossarium\nossature\nosse\nossein\nosselet\nossements\nosseoalbuminoid\nosseoaponeurotic\nosseocartilaginous\nosseofibrous\nosseomucoid\nosseous\nosseously\nOsset\nOssetian\nOssetic\nOssetine\nOssetish\nOssian\nOssianesque\nOssianic\nOssianism\nOssianize\nossicle\nossicular\nossiculate\nossicule\nossiculectomy\nossiculotomy\nossiculum\nossiferous\nossific\nossification\nossified\nossifier\nossifluence\nossifluent\nossiform\nossifrage\nossifrangent\nossify\nossivorous\nossuarium\nossuary\nossypite\nostalgia\nOstara\nostariophysan\nOstariophyseae\nOstariophysi\nostariophysial\nostariophysous\nostarthritis\nosteal\nostealgia\nosteanabrosis\nosteanagenesis\nostearthritis\nostearthrotomy\nostectomy\nosteectomy\nosteectopia\nosteectopy\nOsteichthyes\nostein\nosteitic\nosteitis\nostemia\nostempyesis\nostensibility\nostensible\nostensibly\nostension\nostensive\nostensively\nostensorium\nostensory\nostent\nostentate\nostentation\nostentatious\nostentatiously\nostentatiousness\nostentive\nostentous\nosteoaneurysm\nosteoarthritis\nosteoarthropathy\nosteoarthrotomy\nosteoblast\nosteoblastic\nosteoblastoma\nosteocachetic\nosteocarcinoma\nosteocartilaginous\nosteocele\nosteocephaloma\nosteochondritis\nosteochondrofibroma\nosteochondroma\nosteochondromatous\nosteochondropathy\nosteochondrophyte\nosteochondrosarcoma\nosteochondrous\nosteoclasia\nosteoclasis\nosteoclast\nosteoclastic\nosteoclasty\nosteocolla\nosteocomma\nosteocranium\nosteocystoma\nosteodentin\nosteodentinal\nosteodentine\nosteoderm\nosteodermal\nosteodermatous\nosteodermia\nosteodermis\nosteodiastasis\nosteodynia\nosteodystrophy\nosteoencephaloma\nosteoenchondroma\nosteoepiphysis\nosteofibroma\nosteofibrous\nosteogangrene\nosteogen\nosteogenesis\nosteogenetic\nosteogenic\nosteogenist\nosteogenous\nosteogeny\nosteoglossid\nOsteoglossidae\nosteoglossoid\nOsteoglossum\nosteographer\nosteography\nosteohalisteresis\nosteoid\nOsteolepidae\nOsteolepis\nosteolite\nosteologer\nosteologic\nosteological\nosteologically\nosteologist\nosteology\nosteolysis\nosteolytic\nosteoma\nosteomalacia\nosteomalacial\nosteomalacic\nosteomancy\nosteomanty\nosteomatoid\nosteomere\nosteometric\nosteometrical\nosteometry\nosteomyelitis\nosteoncus\nosteonecrosis\nosteoneuralgia\nosteopaedion\nosteopath\nosteopathic\nosteopathically\nosteopathist\nosteopathy\nosteopedion\nosteoperiosteal\nosteoperiostitis\nosteopetrosis\nosteophage\nosteophagia\nosteophlebitis\nosteophone\nosteophony\nosteophore\nosteophyma\nosteophyte\nosteophytic\nosteoplaque\nosteoplast\nosteoplastic\nosteoplasty\nosteoporosis\nosteoporotic\nosteorrhaphy\nosteosarcoma\nosteosarcomatous\nosteosclerosis\nosteoscope\nosteosis\nosteosteatoma\nosteostixis\nosteostomatous\nosteostomous\nosteostracan\nOsteostraci\nosteosuture\nosteosynovitis\nosteosynthesis\nosteothrombosis\nosteotome\nosteotomist\nosteotomy\nosteotribe\nosteotrite\nosteotrophic\nosteotrophy\nOstertagia\nostial\nostiary\nostiate\nOstic\nostiolar\nostiolate\nostiole\nostitis\nostium\nostleress\nOstmannic\nostmark\nOstmen\nostosis\nOstracea\nostracean\nostraceous\nOstraciidae\nostracine\nostracioid\nOstracion\nostracism\nostracizable\nostracization\nostracize\nostracizer\nostracod\nOstracoda\nostracode\nostracoderm\nOstracodermi\nostracodous\nostracoid\nOstracoidea\nostracon\nostracophore\nOstracophori\nostracophorous\nostracum\nOstraeacea\nostraite\nOstrea\nostreaceous\nostreger\nostreicultural\nostreiculture\nostreiculturist\nOstreidae\nostreiform\nostreodynamometer\nostreoid\nostreophage\nostreophagist\nostreophagous\nostrich\nostrichlike\nOstrogoth\nOstrogothian\nOstrogothic\nOstrya\nOstyak\nOswald\nOswegan\notacoustic\notacousticon\nOtaheitan\notalgia\notalgic\notalgy\nOtaria\notarian\nOtariidae\nOtariinae\notariine\notarine\notarioid\notary\notate\notectomy\notelcosis\nOtello\nOthake\nothelcosis\nOthello\nothematoma\nothemorrhea\notheoscope\nother\notherdom\notherest\nothergates\notherguess\notherhow\notherism\notherist\notherness\nothersome\nothertime\notherwards\notherwhence\notherwhere\notherwhereness\notherwheres\notherwhile\notherwhiles\notherwhither\notherwise\notherwiseness\notherworld\notherworldliness\notherworldly\notherworldness\nOthin\nOthinism\nothmany\nOthonna\nothygroma\notiant\notiatric\notiatrics\notiatry\notic\noticodinia\nOtidae\nOtides\nOtididae\notidiform\notidine\nOtidiphaps\notidium\notiorhynchid\nOtiorhynchidae\nOtiorhynchinae\notiose\notiosely\notioseness\notiosity\nOtis\notitic\notitis\notkon\nOto\notoantritis\notoblennorrhea\notocariasis\notocephalic\notocephaly\notocerebritis\notocleisis\notoconial\notoconite\notoconium\notocrane\notocranial\notocranic\notocranium\nOtocyon\notocyst\notocystic\notodynia\notodynic\notoencephalitis\notogenic\notogenous\notographical\notography\nOtogyps\notohemineurasthenia\notolaryngologic\notolaryngologist\notolaryngology\notolite\notolith\nOtolithidae\nOtolithus\notolitic\notological\notologist\notology\nOtomaco\notomassage\nOtomi\nOtomian\nOtomitlan\notomucormycosis\notomyces\notomycosis\notonecrectomy\notoneuralgia\notoneurasthenia\notopathic\notopathy\notopharyngeal\notophone\notopiesis\notoplastic\notoplasty\notopolypus\notopyorrhea\notopyosis\notorhinolaryngologic\notorhinolaryngologist\notorhinolaryngology\notorrhagia\notorrhea\notorrhoea\notosalpinx\notosclerosis\notoscope\notoscopic\notoscopy\notosis\notosphenal\notosteal\notosteon\nototomy\nOtozoum\nottajanite\nottar\nottavarima\nOttawa\notter\notterer\notterhound\nottinger\nottingkar\nOtto\notto\nOttoman\nOttomanean\nOttomanic\nOttomanism\nOttomanization\nOttomanize\nOttomanlike\nOttomite\nottrelife\nOttweilian\nOtuquian\noturia\nOtus\nOtyak\nouabain\nouabaio\nouabe\nouachitite\nouakari\nouananiche\noubliette\nouch\nOudemian\noudenarde\nOudenodon\noudenodont\nouenite\nouf\nough\nought\noughtness\noughtnt\nOuija\nouistiti\noukia\noulap\nounce\nounds\nouphe\nouphish\nour\nOuranos\nourie\nouroub\nOurouparia\nours\nourself\nourselves\noust\nouster\nout\noutact\noutadmiral\nOutagami\noutage\noutambush\noutarde\noutargue\noutask\noutawe\noutbabble\noutback\noutbacker\noutbake\noutbalance\noutban\noutbanter\noutbar\noutbargain\noutbark\noutbawl\noutbeam\noutbear\noutbearing\noutbeg\noutbeggar\noutbelch\noutbellow\noutbent\noutbetter\noutbid\noutbidder\noutbirth\noutblacken\noutblaze\noutbleat\noutbleed\noutbless\noutbloom\noutblossom\noutblot\noutblow\noutblowing\noutblown\noutbluff\noutblunder\noutblush\noutbluster\noutboard\noutboast\noutbolting\noutbond\noutbook\noutborn\noutborough\noutbound\noutboundaries\noutbounds\noutbow\noutbowed\noutbowl\noutbox\noutbrag\noutbranch\noutbranching\noutbrave\noutbray\noutbrazen\noutbreak\noutbreaker\noutbreaking\noutbreath\noutbreathe\noutbreather\noutbred\noutbreed\noutbreeding\noutbribe\noutbridge\noutbring\noutbrother\noutbud\noutbuild\noutbuilding\noutbulge\noutbulk\noutbully\noutburn\noutburst\noutbustle\noutbuy\noutbuzz\noutby\noutcant\noutcaper\noutcarol\noutcarry\noutcase\noutcast\noutcaste\noutcasting\noutcastness\noutcavil\noutchamber\noutcharm\noutchase\noutchatter\noutcheat\noutchide\noutcity\noutclamor\noutclass\noutclerk\noutclimb\noutcome\noutcomer\noutcoming\noutcompass\noutcomplete\noutcompliment\noutcorner\noutcountry\noutcourt\noutcrawl\noutcricket\noutcrier\noutcrop\noutcropper\noutcross\noutcrossing\noutcrow\noutcrowd\noutcry\noutcull\noutcure\noutcurse\noutcurve\noutcut\noutdaciousness\noutdance\noutdare\noutdate\noutdated\noutdazzle\noutdevil\noutdispatch\noutdistance\noutdistrict\noutdo\noutdodge\noutdoer\noutdoor\noutdoorness\noutdoors\noutdoorsman\noutdraft\noutdragon\noutdraw\noutdream\noutdress\noutdrink\noutdrive\noutdure\noutdwell\noutdweller\noutdwelling\nouteat\noutecho\nouted\noutedge\nouten\nouter\nouterly\noutermost\nouterness\nouterwear\nouteye\nouteyed\noutfable\noutface\noutfall\noutfame\noutfangthief\noutfast\noutfawn\noutfeast\noutfeat\noutfeeding\noutfence\noutferret\noutfiction\noutfield\noutfielder\noutfieldsman\noutfight\noutfighter\noutfighting\noutfigure\noutfish\noutfit\noutfitter\noutflame\noutflank\noutflanker\noutflanking\noutflare\noutflash\noutflatter\noutfling\noutfloat\noutflourish\noutflow\noutflue\noutflung\noutflunky\noutflush\noutflux\noutfly\noutfold\noutfool\noutfoot\noutform\noutfort\noutfreeman\noutfront\noutfroth\noutfrown\noutgabble\noutgain\noutgallop\noutgamble\noutgame\noutgang\noutgarment\noutgarth\noutgas\noutgate\noutgauge\noutgaze\noutgeneral\noutgive\noutgiving\noutglad\noutglare\noutgleam\noutglitter\noutgloom\noutglow\noutgnaw\noutgo\noutgoer\noutgoing\noutgoingness\noutgone\noutgreen\noutgrin\noutground\noutgrow\noutgrowing\noutgrowth\noutguard\noutguess\noutgun\noutgush\nouthammer\nouthasten\nouthaul\nouthauler\nouthear\noutheart\nouthector\noutheel\nouther\nouthire\nouthiss\nouthit\nouthold\nouthorror\nouthouse\nouthousing\nouthowl\nouthue\nouthumor\nouthunt\nouthurl\nouthut\nouthymn\nouthyperbolize\noutimage\nouting\noutinvent\noutish\noutissue\noutjazz\noutjest\noutjet\noutjetting\noutjinx\noutjockey\noutjourney\noutjuggle\noutjump\noutjut\noutkeeper\noutkick\noutkill\noutking\noutkiss\noutkitchen\noutknave\noutknee\noutlabor\noutlaid\noutlance\noutland\noutlander\noutlandish\noutlandishlike\noutlandishly\noutlandishness\noutlash\noutlast\noutlaugh\noutlaunch\noutlaw\noutlawry\noutlay\noutlean\noutleap\noutlearn\noutlegend\noutlength\noutlengthen\noutler\noutlet\noutlie\noutlier\noutlighten\noutlimb\noutlimn\noutline\noutlinear\noutlined\noutlineless\noutliner\noutlinger\noutlip\noutlipped\noutlive\noutliver\noutlodging\noutlook\noutlooker\noutlord\noutlove\noutlung\noutluster\noutly\noutlying\noutmagic\noutmalaprop\noutman\noutmaneuver\noutmantle\noutmarch\noutmarriage\noutmarry\noutmaster\noutmatch\noutmate\noutmeasure\noutmerchant\noutmiracle\noutmode\noutmoded\noutmost\noutmount\noutmouth\noutmove\noutname\noutness\noutnight\noutnoise\noutnook\noutnumber\noutoffice\noutoven\noutpace\noutpage\noutpaint\noutparagon\noutparamour\noutparish\noutpart\noutpass\noutpassion\noutpath\noutpatient\noutpay\noutpayment\noutpeal\noutpeep\noutpeer\noutpension\noutpensioner\noutpeople\noutperform\noutpick\noutpicket\noutpipe\noutpitch\noutpity\noutplace\noutplan\noutplay\noutplayed\noutplease\noutplod\noutplot\noutpocketing\noutpoint\noutpoise\noutpoison\noutpoll\noutpomp\noutpop\noutpopulate\noutporch\noutport\noutporter\noutportion\noutpost\noutpouching\noutpour\noutpourer\noutpouring\noutpractice\noutpraise\noutpray\noutpreach\noutpreen\noutprice\noutprodigy\noutproduce\noutpromise\noutpry\noutpull\noutpupil\noutpurl\noutpurse\noutpush\noutput\noutputter\noutquaff\noutquarters\noutqueen\noutquestion\noutquibble\noutquote\noutrace\noutrage\noutrageous\noutrageously\noutrageousness\noutrageproof\noutrager\noutraging\noutrail\noutrance\noutrange\noutrank\noutrant\noutrap\noutrate\noutraught\noutrave\noutray\noutre\noutreach\noutread\noutreason\noutreckon\noutredden\noutrede\noutreign\noutrelief\noutremer\noutreness\noutrhyme\noutrick\noutride\noutrider\noutriding\noutrig\noutrigger\noutriggered\noutriggerless\noutrigging\noutright\noutrightly\noutrightness\noutring\noutrival\noutroar\noutrogue\noutroll\noutromance\noutrooper\noutroot\noutrove\noutrow\noutroyal\noutrun\noutrunner\noutrush\noutsail\noutsaint\noutsally\noutsatisfy\noutsavor\noutsay\noutscent\noutscold\noutscore\noutscorn\noutscour\noutscouring\noutscream\noutsea\noutseam\noutsearch\noutsee\noutseek\noutsell\noutsentry\noutsert\noutservant\noutset\noutsetting\noutsettlement\noutsettler\noutshadow\noutshake\noutshame\noutshape\noutsharp\noutsharpen\noutsheathe\noutshift\noutshine\noutshiner\noutshoot\noutshot\noutshoulder\noutshout\noutshove\noutshow\noutshower\noutshriek\noutshrill\noutshut\noutside\noutsided\noutsidedness\noutsideness\noutsider\noutsift\noutsigh\noutsight\noutsin\noutsing\noutsit\noutsize\noutsized\noutskill\noutskip\noutskirmish\noutskirmisher\noutskirt\noutskirter\noutslander\noutslang\noutsleep\noutslide\noutslink\noutsmart\noutsmell\noutsmile\noutsnatch\noutsnore\noutsoar\noutsole\noutsoler\noutsonnet\noutsophisticate\noutsound\noutspan\noutsparkle\noutspeak\noutspeaker\noutspeech\noutspeed\noutspell\noutspend\noutspent\noutspill\noutspin\noutspirit\noutspit\noutsplendor\noutspoken\noutspokenly\noutspokenness\noutsport\noutspout\noutspread\noutspring\noutsprint\noutspue\noutspurn\noutspurt\noutstagger\noutstair\noutstand\noutstander\noutstanding\noutstandingly\noutstandingness\noutstare\noutstart\noutstarter\noutstartle\noutstate\noutstation\noutstatistic\noutstature\noutstay\noutsteal\noutsteam\noutstep\noutsting\noutstink\noutstood\noutstorm\noutstrain\noutstream\noutstreet\noutstretch\noutstretcher\noutstride\noutstrike\noutstrip\noutstrive\noutstroke\noutstrut\noutstudent\noutstudy\noutstunt\noutsubtle\noutsuck\noutsucken\noutsuffer\noutsuitor\noutsulk\noutsum\noutsuperstition\noutswagger\noutswarm\noutswear\noutsweep\noutsweeping\noutsweeten\noutswell\noutswift\noutswim\noutswindle\noutswing\noutswirl\nouttaken\nouttalent\nouttalk\nouttask\nouttaste\nouttear\nouttease\nouttell\noutthieve\noutthink\noutthreaten\noutthrob\noutthrough\noutthrow\noutthrust\noutthruster\noutthunder\noutthwack\nouttinkle\nouttire\nouttoil\nouttongue\nouttop\nouttower\nouttrade\nouttrail\nouttravel\nouttrick\nouttrot\nouttrump\noutturn\noutturned\nouttyrannize\noutusure\noutvalue\noutvanish\noutvaunt\noutvelvet\noutvenom\noutvictor\noutvie\noutvier\noutvigil\noutvillage\noutvillain\noutvociferate\noutvoice\noutvote\noutvoter\noutvoyage\noutwait\noutwake\noutwale\noutwalk\noutwall\noutwallop\noutwander\noutwar\noutwarble\noutward\noutwardly\noutwardmost\noutwardness\noutwards\noutwash\noutwaste\noutwatch\noutwater\noutwave\noutwealth\noutweapon\noutwear\noutweary\noutweave\noutweed\noutweep\noutweigh\noutweight\noutwell\noutwent\noutwhirl\noutwick\noutwile\noutwill\noutwind\noutwindow\noutwing\noutwish\noutwit\noutwith\noutwittal\noutwitter\noutwoe\noutwoman\noutwood\noutword\noutwore\noutwork\noutworker\noutworld\noutworn\noutworth\noutwrangle\noutwrench\noutwrest\noutwrestle\noutwriggle\noutwring\noutwrite\noutwrought\noutyard\noutyell\noutyelp\noutyield\noutzany\nouzel\nOva\nova\nOvaherero\noval\novalbumin\novalescent\novaliform\novalish\novalization\novalize\novally\novalness\novaloid\novalwise\nOvambo\nOvampo\nOvangangela\novant\novarial\novarian\novarin\novarioabdominal\novariocele\novariocentesis\novariocyesis\novariodysneuria\novariohysterectomy\novariole\novariolumbar\novariorrhexis\novariosalpingectomy\novariosteresis\novariostomy\novariotomist\novariotomize\novariotomy\novariotubal\novarious\novaritis\novarium\novary\novate\novateconical\novated\novately\novation\novational\novationary\novatoacuminate\novatoconical\novatocordate\novatocylindraceous\novatodeltoid\novatoellipsoidal\novatoglobose\novatolanceolate\novatooblong\novatoorbicular\novatopyriform\novatoquadrangular\novatorotundate\novatoserrate\novatotriangular\noven\novenbird\novenful\novenlike\novenly\novenman\novenpeel\novenstone\novenware\novenwise\nover\noverability\noverable\noverabound\noverabsorb\noverabstain\noverabstemious\noverabstemiousness\noverabundance\noverabundant\noverabundantly\noverabuse\noveraccentuate\noveraccumulate\noveraccumulation\noveraccuracy\noveraccurate\noveraccurately\noveract\noveraction\noveractive\noveractiveness\noveractivity\noveracute\noveraddiction\noveradvance\noveradvice\noveraffect\noveraffirmation\noverafflict\noveraffliction\noverage\noverageness\noveraggravate\noveraggravation\noveragitate\noveragonize\noverall\noveralled\noveralls\noverambitioned\noverambitious\noverambling\noveranalyze\noverangelic\noverannotate\noveranswer\noveranxiety\noveranxious\noveranxiously\noverappareled\noverappraisal\noverappraise\noverapprehended\noverapprehension\noverapprehensive\noverapt\noverarch\noverargue\noverarm\noverartificial\noverartificiality\noverassail\noverassert\noverassertion\noverassertive\noverassertively\noverassertiveness\noverassess\noverassessment\noverassumption\noverattached\noverattachment\noverattention\noverattentive\noverattentively\noverawe\noverawful\noverawn\noverawning\noverbake\noverbalance\noverballast\noverbalm\noverbanded\noverbandy\noverbank\noverbanked\noverbark\noverbarren\noverbarrenness\noverbase\noverbaseness\noverbashful\noverbashfully\noverbashfulness\noverbattle\noverbear\noverbearance\noverbearer\noverbearing\noverbearingly\noverbearingness\noverbeat\noverbeating\noverbeetling\noverbelief\noverbend\noverbepatched\noverberg\noverbet\noverbias\noverbid\noverbig\noverbigness\noverbillow\noverbit\noverbite\noverbitten\noverbitter\noverbitterly\noverbitterness\noverblack\noverblame\noverblaze\noverbleach\noverblessed\noverblessedness\noverblind\noverblindly\noverblithe\noverbloom\noverblouse\noverblow\noverblowing\noverblown\noverboard\noverboast\noverboastful\noverbodice\noverboding\noverbody\noverboil\noverbold\noverboldly\noverboldness\noverbook\noverbookish\noverbooming\noverborne\noverborrow\noverbought\noverbound\noverbounteous\noverbounteously\noverbounteousness\noverbow\noverbowed\noverbowl\noverbrace\noverbragging\noverbrained\noverbranch\noverbrave\noverbravely\noverbravery\noverbray\noverbreak\noverbreathe\noverbred\noverbreed\noverbribe\noverbridge\noverbright\noverbrightly\noverbrightness\noverbrilliancy\noverbrilliant\noverbrilliantly\noverbrim\noverbrimmingly\noverbroaden\noverbroil\noverbrood\noverbrow\noverbrown\noverbrowse\noverbrush\noverbrutal\noverbrutality\noverbrutalize\noverbrutally\noverbubbling\noverbuild\noverbuilt\noverbulk\noverbulky\noverbumptious\noverburden\noverburdeningly\noverburdensome\noverburn\noverburned\noverburningly\noverburnt\noverburst\noverburthen\noverbusily\noverbusiness\noverbusy\noverbuy\noverby\novercall\novercanny\novercanopy\novercap\novercapable\novercapably\novercapacity\novercape\novercapitalization\novercapitalize\novercaptious\novercaptiously\novercaptiousness\novercard\novercare\novercareful\novercarefully\novercareless\novercarelessly\novercarelessness\novercaring\novercarking\novercarry\novercast\novercasting\novercasual\novercasually\novercatch\novercaution\novercautious\novercautiously\novercautiousness\novercentralization\novercentralize\novercertification\novercertify\noverchafe\noverchannel\noverchant\novercharge\noverchargement\novercharger\novercharitable\novercharitably\novercharity\noverchase\novercheap\novercheaply\novercheapness\novercheck\novercherish\noverchidden\noverchief\noverchildish\noverchildishness\noverchill\noverchlorinate\noverchoke\noverchrome\noverchurch\novercirculate\novercircumspect\novercircumspection\novercivil\novercivility\novercivilization\novercivilize\noverclaim\noverclamor\noverclasp\noverclean\novercleanly\novercleanness\novercleave\noverclever\novercleverness\noverclimb\novercloak\noverclog\noverclose\noverclosely\novercloseness\noverclothe\noverclothes\novercloud\novercloy\novercluster\novercoached\novercoat\novercoated\novercoating\novercoil\novercold\novercoldly\novercollar\novercolor\novercomable\novercome\novercomer\novercomingly\novercommand\novercommend\novercommon\novercommonly\novercommonness\novercompensate\novercompensation\novercompensatory\novercompetition\novercompetitive\novercomplacency\novercomplacent\novercomplacently\novercomplete\novercomplex\novercomplexity\novercompliant\novercompound\noverconcentrate\noverconcentration\noverconcern\noverconcerned\novercondensation\novercondense\noverconfidence\noverconfident\noverconfidently\noverconfute\noverconquer\noverconscientious\noverconscious\noverconsciously\noverconsciousness\noverconservatism\noverconservative\noverconservatively\noverconsiderate\noverconsiderately\noverconsideration\noverconsume\noverconsumption\novercontented\novercontentedly\novercontentment\novercontract\novercontraction\novercontribute\novercontribution\novercook\novercool\novercoolly\novercopious\novercopiously\novercopiousness\novercorned\novercorrect\novercorrection\novercorrupt\novercorruption\novercorruptly\novercostly\novercount\novercourteous\novercourtesy\novercover\novercovetous\novercovetousness\novercow\novercoy\novercoyness\novercram\novercredit\novercredulity\novercredulous\novercredulously\novercreed\novercreep\novercritical\novercritically\novercriticalness\novercriticism\novercriticize\novercrop\novercross\novercrow\novercrowd\novercrowded\novercrowdedly\novercrowdedness\novercrown\novercrust\novercry\novercull\novercultivate\novercultivation\noverculture\novercultured\novercumber\novercunning\novercunningly\novercunningness\novercup\novercured\novercurious\novercuriously\novercuriousness\novercurl\novercurrency\novercurrent\novercurtain\novercustom\novercut\novercutter\novercutting\noverdaintily\noverdaintiness\noverdainty\noverdamn\noverdance\noverdangle\noverdare\noverdaringly\noverdarken\noverdash\noverdazed\noverdazzle\noverdeal\noverdear\noverdearly\noverdearness\noverdeck\noverdecorate\noverdecoration\noverdecorative\noverdeeming\noverdeep\noverdeepen\noverdeeply\noverdeliberate\noverdeliberation\noverdelicacy\noverdelicate\noverdelicately\noverdelicious\noverdeliciously\noverdelighted\noverdelightedly\noverdemand\noverdemocracy\noverdepress\noverdepressive\noverdescant\noverdesire\noverdesirous\noverdesirousness\noverdestructive\noverdestructively\noverdestructiveness\noverdetermination\noverdetermined\noverdevelop\noverdevelopment\noverdevoted\noverdevotedly\noverdevotion\noverdiffuse\noverdiffusely\noverdiffuseness\noverdigest\noverdignified\noverdignifiedly\noverdignifiedness\noverdignify\noverdignity\noverdiligence\noverdiligent\noverdiligently\noverdilute\noverdilution\noverdischarge\noverdiscipline\noverdiscount\noverdiscourage\noverdiscouragement\noverdistance\noverdistant\noverdistantly\noverdistantness\noverdistempered\noverdistention\noverdiverse\noverdiversely\noverdiversification\noverdiversify\noverdiversity\noverdo\noverdoctrinize\noverdoer\noverdogmatic\noverdogmatically\noverdogmatism\noverdome\noverdominate\noverdone\noverdoor\noverdosage\noverdose\noverdoubt\noverdoze\noverdraft\noverdrain\noverdrainage\noverdramatic\noverdramatically\noverdrape\noverdrapery\noverdraw\noverdrawer\noverdream\noverdrench\noverdress\noverdrifted\noverdrink\noverdrip\noverdrive\noverdriven\noverdroop\noverdrowsed\noverdry\noverdubbed\noverdue\noverdunged\noverdure\noverdust\noverdye\novereager\novereagerly\novereagerness\noverearnest\noverearnestly\noverearnestness\novereasily\novereasiness\novereasy\novereat\novereaten\noveredge\noveredit\novereducate\novereducated\novereducation\novereducative\novereffort\noveregg\noverelaborate\noverelaborately\noverelaboration\noverelate\noverelegance\noverelegancy\noverelegant\noverelegantly\noverelliptical\noverembellish\noverembellishment\noverembroider\noveremotional\noveremotionality\noveremotionalize\noveremphasis\noveremphasize\noveremphatic\noveremphatically\noveremphaticness\noverempired\noveremptiness\noverempty\noverenter\noverenthusiasm\noverenthusiastic\noverentreat\noverentry\noverequal\noverestimate\noverestimation\noverexcelling\noverexcitability\noverexcitable\noverexcitably\noverexcite\noverexcitement\noverexercise\noverexert\noverexerted\noverexertedly\noverexertedness\noverexertion\noverexpand\noverexpansion\noverexpansive\noverexpect\noverexpectant\noverexpectantly\noverexpenditure\noverexpert\noverexplain\noverexplanation\noverexpose\noverexposure\noverexpress\noverexquisite\noverexquisitely\noverextend\noverextension\noverextensive\noverextreme\noverexuberant\novereye\novereyebrowed\noverface\noverfacile\noverfacilely\noverfacility\noverfactious\noverfactiousness\noverfag\noverfagged\noverfaint\noverfaith\noverfaithful\noverfaithfully\noverfall\noverfamed\noverfamiliar\noverfamiliarity\noverfamiliarly\noverfamous\noverfanciful\noverfancy\noverfar\noverfast\noverfastidious\noverfastidiously\noverfastidiousness\noverfasting\noverfat\noverfatigue\noverfatten\noverfavor\noverfavorable\noverfavorably\noverfear\noverfearful\noverfearfully\noverfearfulness\noverfeast\noverfeatured\noverfed\noverfee\noverfeed\noverfeel\noverfellowlike\noverfellowly\noverfelon\noverfeminine\noverfeminize\noverfertile\noverfertility\noverfestoon\noverfew\noverfierce\noverfierceness\noverfile\noverfill\noverfilm\noverfine\noverfinished\noverfish\noverfit\noverfix\noverflatten\noverfleece\noverfleshed\noverflexion\noverfling\noverfloat\noverflog\noverflood\noverflorid\noverfloridness\noverflourish\noverflow\noverflowable\noverflower\noverflowing\noverflowingly\noverflowingness\noverflown\noverfluency\noverfluent\noverfluently\noverflush\noverflutter\noverfly\noverfold\noverfond\noverfondle\noverfondly\noverfondness\noverfoolish\noverfoolishly\noverfoolishness\noverfoot\noverforce\noverforged\noverformed\noverforward\noverforwardly\noverforwardness\noverfought\noverfoul\noverfoully\noverfrail\noverfrailty\noverfranchised\noverfrank\noverfrankly\noverfrankness\noverfraught\noverfree\noverfreedom\noverfreely\noverfreight\noverfrequency\noverfrequent\noverfrequently\noverfret\noverfrieze\noverfrighted\noverfrighten\noverfroth\noverfrown\noverfrozen\noverfruited\noverfruitful\noverfull\noverfullness\noverfunctioning\noverfurnish\novergaiter\novergalled\novergamble\novergang\novergarment\novergarrison\novergaze\novergeneral\novergeneralize\novergenerally\novergenerosity\novergenerous\novergenerously\novergenial\novergeniality\novergentle\novergently\noverget\novergifted\novergild\novergilted\novergird\novergirded\novergirdle\noverglad\novergladly\noverglance\noverglass\noverglaze\noverglide\noverglint\novergloom\novergloominess\novergloomy\noverglorious\novergloss\noverglut\novergo\novergoad\novergod\novergodliness\novergodly\novergood\novergorge\novergovern\novergovernment\novergown\novergrace\novergracious\novergrade\novergrain\novergrainer\novergrasping\novergrateful\novergratefully\novergratification\novergratify\novergratitude\novergraze\novergreasiness\novergreasy\novergreat\novergreatly\novergreatness\novergreed\novergreedily\novergreediness\novergreedy\novergrieve\novergrievous\novergrind\novergross\novergrossly\novergrossness\noverground\novergrow\novergrown\novergrowth\noverguilty\novergun\noverhair\noverhalf\noverhand\noverhanded\noverhandicap\noverhandle\noverhang\noverhappy\noverharass\noverhard\noverharden\noverhardness\noverhardy\noverharsh\noverharshly\noverharshness\noverhaste\noverhasten\noverhastily\noverhastiness\noverhasty\noverhate\noverhatted\noverhaughty\noverhaul\noverhauler\noverhead\noverheadiness\noverheadman\noverheady\noverheap\noverhear\noverhearer\noverheartily\noverhearty\noverheat\noverheatedly\noverheave\noverheaviness\noverheavy\noverheight\noverheighten\noverheinous\noverheld\noverhelp\noverhelpful\noverhigh\noverhighly\noverhill\noverhit\noverholiness\noverhollow\noverholy\noverhomeliness\noverhomely\noverhonest\noverhonestly\noverhonesty\noverhonor\noverhorse\noverhot\noverhotly\noverhour\noverhouse\noverhover\noverhuge\noverhuman\noverhumanity\noverhumanize\noverhung\noverhunt\noverhurl\noverhurriedly\noverhurry\noverhusk\noverhysterical\noveridealism\noveridealistic\noveridle\noveridly\noverillustrate\noverillustration\noverimaginative\noverimaginativeness\noverimitate\noverimitation\noverimitative\noverimitatively\noverimport\noverimportation\noverimpress\noverimpressible\noverinclinable\noverinclination\noverinclined\noverincrust\noverincurious\noverindividualism\noverindividualistic\noverindulge\noverindulgence\noverindulgent\noverindulgently\noverindustrialization\noverindustrialize\noverinflate\noverinflation\noverinflative\noverinfluence\noverinfluential\noverinform\noverink\noverinsist\noverinsistence\noverinsistent\noverinsistently\noverinsolence\noverinsolent\noverinsolently\noverinstruct\noverinstruction\noverinsurance\noverinsure\noverintellectual\noverintellectuality\noverintense\noverintensely\noverintensification\noverintensity\noverinterest\noverinterested\noverinterestedness\noverinventoried\noverinvest\noverinvestment\noveriodize\noverirrigate\noverirrigation\noverissue\noveritching\noverjacket\noverjade\noverjaded\noverjawed\noverjealous\noverjealously\noverjealousness\noverjob\noverjocular\noverjoy\noverjoyful\noverjoyfully\noverjoyous\noverjudge\noverjudging\noverjudgment\noverjudicious\noverjump\noverjust\noverjutting\noverkeen\noverkeenness\noverkeep\noverkick\noverkind\noverkindly\noverkindness\noverking\noverknavery\noverknee\noverknow\noverknowing\noverlabor\noverlace\noverlactation\noverlade\noverlaid\noverlain\noverland\nOverlander\noverlander\noverlanguaged\noverlap\noverlard\noverlarge\noverlargely\noverlargeness\noverlascivious\noverlast\noverlate\noverlaudation\noverlaudatory\noverlaugh\noverlaunch\noverlave\noverlavish\noverlavishly\noverlax\noverlaxative\noverlaxly\noverlaxness\noverlay\noverlayer\noverlead\noverleaf\noverlean\noverleap\noverlearn\noverlearned\noverlearnedly\noverlearnedness\noverleather\noverleave\noverleaven\noverleer\noverleg\noverlegislation\noverleisured\noverlength\noverlettered\noverlewd\noverlewdly\noverlewdness\noverliberal\noverliberality\noverliberally\noverlicentious\noverlick\noverlie\noverlier\noverlift\noverlight\noverlighted\noverlightheaded\noverlightly\noverlightsome\noverliking\noverline\noverling\noverlinger\noverlinked\noverlip\noverlipping\noverlisted\noverlisten\noverliterary\noverlittle\noverlive\noverliveliness\noverlively\noverliver\noverload\noverloath\noverlock\noverlocker\noverlofty\noverlogical\noverlogically\noverlong\noverlook\noverlooker\noverloose\noverlord\noverlordship\noverloud\noverloup\noverlove\noverlover\noverlow\noverlowness\noverloyal\noverloyally\noverloyalty\noverlubricatio\noverluscious\noverlush\noverlustiness\noverlusty\noverluxuriance\noverluxuriant\noverluxurious\noverly\noverlying\novermagnify\novermagnitude\novermajority\novermalapert\noverman\novermantel\novermantle\novermany\novermarch\novermark\novermarking\novermarl\novermask\novermast\novermaster\novermasterful\novermasterfully\novermasterfulness\novermastering\novermasteringly\novermatch\novermatter\novermature\novermaturity\novermean\novermeanly\novermeanness\novermeasure\novermeddle\novermeek\novermeekly\novermeekness\novermellow\novermellowness\novermelodied\novermelt\novermerciful\novermercifulness\novermerit\novermerrily\novermerry\novermettled\novermickle\novermighty\novermild\novermill\noverminute\noverminutely\noverminuteness\novermix\novermoccasin\novermodest\novermodestly\novermodesty\novermodulation\novermoist\novermoisten\novermoisture\novermortgage\novermoss\novermost\novermotor\novermount\novermounts\novermourn\novermournful\novermournfully\novermuch\novermuchness\novermultiplication\novermultiply\novermultitude\novername\novernarrow\novernarrowly\novernationalization\novernear\noverneat\noverneatness\noverneglect\novernegligence\novernegligent\novernervous\novernervously\novernervousness\novernet\novernew\novernice\novernicely\noverniceness\novernicety\novernigh\novernight\novernimble\novernipping\novernoise\novernotable\novernourish\novernoveled\novernumber\novernumerous\novernumerousness\novernurse\noverobedience\noverobedient\noverobediently\noverobese\noverobjectify\noveroblige\noverobsequious\noverobsequiously\noverobsequiousness\noveroffend\noveroffensive\noverofficered\noverofficious\noverorder\noverornamented\noverpained\noverpainful\noverpainfully\noverpainfulness\noverpaint\noverpamper\noverpart\noverparted\noverpartial\noverpartiality\noverpartially\noverparticular\noverparticularly\noverpass\noverpassionate\noverpassionately\noverpassionateness\noverpast\noverpatient\noverpatriotic\noverpay\noverpayment\noverpeer\noverpending\noverpensive\noverpensiveness\noverpeople\noverpepper\noverperemptory\noverpersuade\noverpersuasion\noverpert\noverpessimism\noverpessimistic\noverpet\noverphysic\noverpick\noverpicture\noverpinching\noverpitch\noverpitched\noverpiteous\noverplace\noverplaced\noverplacement\noverplain\noverplant\noverplausible\noverplay\noverplease\noverplenitude\noverplenteous\noverplenteously\noverplentiful\noverplenty\noverplot\noverplow\noverplumb\noverplume\noverplump\noverplumpness\noverplus\noverply\noverpointed\noverpoise\noverpole\noverpolemical\noverpolish\noverpolitic\noverponderous\noverpopular\noverpopularity\noverpopularly\noverpopulate\noverpopulation\noverpopulous\noverpopulousness\noverpositive\noverpossess\noverpot\noverpotent\noverpotential\noverpour\noverpower\noverpowerful\noverpowering\noverpoweringly\noverpoweringness\noverpraise\noverpray\noverpreach\noverprecise\noverpreciseness\noverpreface\noverpregnant\noverpreoccupation\noverpreoccupy\noverpress\noverpressure\noverpresumption\noverpresumptuous\noverprice\noverprick\noverprint\noverprize\noverprizer\noverprocrastination\noverproduce\noverproduction\noverproductive\noverproficient\noverprolific\noverprolix\noverprominence\noverprominent\noverprominently\noverpromise\noverprompt\noverpromptly\noverpromptness\noverprone\noverproneness\noverpronounced\noverproof\noverproportion\noverproportionate\noverproportionated\noverproportionately\noverproportioned\noverprosperity\noverprosperous\noverprotect\noverprotract\noverprotraction\noverproud\noverproudly\noverprove\noverprovender\noverprovide\noverprovident\noverprovidently\noverprovision\noverprovocation\noverprovoke\noverprune\noverpublic\noverpublicity\noverpuff\noverpuissant\noverpunish\noverpunishment\noverpurchase\noverquantity\noverquarter\noverquell\noverquick\noverquickly\noverquiet\noverquietly\noverquietness\noverrace\noverrack\noverrake\noverrange\noverrank\noverrankness\noverrapture\noverrapturize\noverrash\noverrashly\noverrashness\noverrate\noverrational\noverrationalize\noverravish\noverreach\noverreacher\noverreaching\noverreachingly\noverreachingness\noverread\noverreader\noverreadily\noverreadiness\noverready\noverrealism\noverrealistic\noverreckon\noverrecord\noverrefine\noverrefined\noverrefinement\noverreflection\noverreflective\noverregister\noverregistration\noverregular\noverregularity\noverregularly\noverregulate\noverregulation\noverrelax\noverreliance\noverreliant\noverreligion\noverreligious\noverremiss\noverremissly\noverremissness\noverrennet\noverrent\noverreplete\noverrepletion\noverrepresent\noverrepresentation\noverrepresentative\noverreserved\noverresolute\noverresolutely\noverrestore\noverrestrain\noverretention\noverreward\noverrich\noverriches\noverrichness\noverride\noverrife\noverrigged\noverright\noverrighteous\noverrighteously\noverrighteousness\noverrigid\noverrigidity\noverrigidly\noverrigorous\noverrigorously\noverrim\noverriot\noverripe\noverripely\noverripen\noverripeness\noverrise\noverroast\noverroll\noverroof\noverrooted\noverrough\noverroughly\noverroughness\noverroyal\noverrude\noverrudely\noverrudeness\noverruff\noverrule\noverruler\noverruling\noverrulingly\noverrun\noverrunner\noverrunning\noverrunningly\noverrush\noverrusset\noverrust\noversad\noversadly\noversadness\noversaid\noversail\noversale\noversaliva\noversalt\noversalty\noversand\noversanded\noversanguine\noversanguinely\noversapless\noversated\noversatisfy\noversaturate\noversaturation\noversauce\noversauciness\noversaucy\noversave\noverscare\noverscatter\noverscented\noversceptical\noverscepticism\noverscore\noverscour\noverscratch\noverscrawl\noverscream\noverscribble\noverscrub\noverscruple\noverscrupulosity\noverscrupulous\noverscrupulously\noverscrupulousness\noverscurf\noverscutched\noversea\noverseal\noverseam\noverseamer\noversearch\noverseas\noverseason\noverseasoned\noverseated\noversecure\noversecurely\noversecurity\noversee\noverseed\noverseen\noverseer\noverseerism\noverseership\noverseethe\noversell\noversend\noversensible\noversensibly\noversensitive\noversensitively\noversensitiveness\noversententious\noversentimental\noversentimentalism\noversentimentalize\noversentimentally\noverserious\noverseriously\noverseriousness\noverservice\noverservile\noverservility\noverset\noversetter\noversettle\noversettled\noversevere\noverseverely\noverseverity\noversew\novershade\novershadow\novershadower\novershadowing\novershadowingly\novershadowment\novershake\noversharp\noversharpness\novershave\noversheet\novershelving\novershepherd\novershine\novershirt\novershoe\novershoot\novershort\novershorten\novershortly\novershot\novershoulder\novershowered\novershrink\novershroud\noversick\noverside\noversight\noversilence\noversilent\noversilver\noversimple\noversimplicity\noversimplification\noversimplify\noversimply\noversize\noversized\noverskim\noverskip\noverskipper\noverskirt\noverslack\noverslander\noverslaugh\noverslavish\noverslavishly\noversleep\noversleeve\noverslide\noverslight\noverslip\noverslope\noverslow\noverslowly\noverslowness\noverslur\noversmall\noversman\noversmite\noversmitten\noversmoke\noversmooth\noversmoothly\noversmoothness\noversnow\noversoak\noversoar\noversock\noversoft\noversoftly\noversoftness\noversold\noversolemn\noversolemnity\noversolemnly\noversolicitous\noversolicitously\noversolicitousness\noversoon\noversoothing\noversophisticated\noversophistication\noversorrow\noversorrowed\noversot\noversoul\noversound\noversour\noversourly\noversourness\noversow\noverspacious\noverspaciousness\noverspan\noverspangled\noversparing\noversparingly\noversparingness\noversparred\noverspatter\noverspeak\noverspecialization\noverspecialize\noverspeculate\noverspeculation\noverspeculative\noverspeech\noverspeed\noverspeedily\noverspeedy\noverspend\noverspill\noverspin\noversplash\noverspread\noverspring\noversprinkle\noversprung\noverspun\noversqueak\noversqueamish\noversqueamishness\noverstaff\noverstaid\noverstain\noverstale\noverstalled\noverstand\noverstaring\noverstate\noverstately\noverstatement\noverstay\noverstayal\noversteadfast\noversteadfastness\noversteady\noverstep\noverstiff\noverstiffness\noverstifle\noverstimulate\noverstimulation\noverstimulative\noverstir\noverstitch\noverstock\noverstoop\noverstoping\noverstore\noverstory\noverstout\noverstoutly\noverstowage\noverstowed\noverstrain\noverstrait\noverstraiten\noverstraitly\noverstraitness\noverstream\noverstrength\noverstress\noverstretch\noverstrew\noverstrict\noverstrictly\noverstrictness\noverstride\noverstrident\noverstridently\noverstrike\noverstring\noverstriving\noverstrong\noverstrongly\noverstrung\noverstud\noverstudied\noverstudious\noverstudiously\noverstudiousness\noverstudy\noverstuff\noversublime\noversubscribe\noversubscriber\noversubscription\noversubtile\noversubtle\noversubtlety\noversubtly\noversufficiency\noversufficient\noversufficiently\noversuperstitious\noversupply\noversure\noversurety\noversurge\noversurviving\noversusceptibility\noversusceptible\noversuspicious\noversuspiciously\noverswarm\noverswarth\noversway\noversweated\noversweep\noversweet\noversweeten\noversweetly\noversweetness\noverswell\noverswift\noverswim\noverswimmer\noverswing\noverswinging\noverswirling\noversystematic\noversystematically\noversystematize\novert\novertakable\novertake\novertaker\novertalk\novertalkative\novertalkativeness\novertalker\novertame\novertamely\novertameness\novertapped\novertare\novertariff\novertarry\novertart\novertask\novertax\novertaxation\noverteach\novertechnical\novertechnicality\novertedious\novertediously\noverteem\novertell\novertempt\novertenacious\novertender\novertenderly\novertenderness\novertense\novertensely\novertenseness\novertension\noverterrible\novertest\noverthick\noverthin\noverthink\noverthought\noverthoughtful\noverthriftily\noverthriftiness\noverthrifty\noverthrong\noverthrow\noverthrowable\noverthrowal\noverthrower\noverthrust\noverthwart\noverthwartly\noverthwartness\noverthwartways\noverthwartwise\novertide\novertight\novertightly\novertill\novertimbered\novertime\novertimer\novertimorous\novertimorously\novertimorousness\novertinseled\novertint\novertip\novertipple\novertire\novertiredness\novertitle\novertly\novertness\novertoe\novertoil\novertoise\novertone\novertongued\novertop\novertopple\novertorture\novertower\novertrace\novertrack\novertrade\novertrader\novertrailed\novertrain\novertrample\novertravel\novertread\novertreatment\novertrick\novertrim\novertrouble\novertrue\novertrump\novertrust\novertrustful\novertruthful\novertruthfully\novertumble\noverture\noverturn\noverturnable\noverturner\novertutor\novertwine\novertwist\novertype\noveruberous\noverunionized\noverunsuitable\noverurbanization\noverurge\noveruse\noverusual\noverusually\novervaliant\novervaluable\novervaluation\novervalue\novervariety\novervault\novervehemence\novervehement\noverveil\noverventilate\noverventilation\noverventuresome\noverventurous\noverview\novervoltage\novervote\noverwade\noverwages\noverwake\noverwalk\noverwander\noverward\noverwash\noverwasted\noverwatch\noverwatcher\noverwater\noverwave\noverway\noverwealth\noverwealthy\noverweaponed\noverwear\noverweary\noverweather\noverweave\noverweb\noverween\noverweener\noverweening\noverweeningly\noverweeningness\noverweep\noverweigh\noverweight\noverweightage\noverwell\noverwelt\noverwet\noverwetness\noverwheel\noverwhelm\noverwhelmer\noverwhelming\noverwhelmingly\noverwhelmingness\noverwhipped\noverwhirl\noverwhisper\noverwide\noverwild\noverwilily\noverwilling\noverwillingly\noverwily\noverwin\noverwind\noverwing\noverwinter\noverwiped\noverwisdom\noverwise\noverwisely\noverwithered\noverwoman\noverwomanize\noverwomanly\noverwood\noverwooded\noverwoody\noverword\noverwork\noverworld\noverworn\noverworry\noverworship\noverwound\noverwove\noverwoven\noverwrap\noverwrest\noverwrested\noverwrestle\noverwrite\noverwroth\noverwrought\noveryear\noveryoung\noveryouthful\noverzeal\noverzealous\noverzealously\noverzealousness\novest\novey\nOvibos\nOvibovinae\novibovine\novicapsular\novicapsule\novicell\novicellular\novicidal\novicide\novicular\noviculated\noviculum\novicyst\novicystic\nOvidae\nOvidian\noviducal\noviduct\noviductal\noviferous\novification\noviform\novigenesis\novigenetic\novigenic\novigenous\novigerm\novigerous\novile\nOvillus\nOvinae\novine\novinia\novipara\noviparal\noviparity\noviparous\noviparously\noviparousness\noviposit\noviposition\novipositor\nOvis\novisac\noviscapt\novism\novispermary\novispermiduct\novist\novistic\novivorous\novocyte\novoelliptic\novoflavin\novogenesis\novogenetic\novogenous\novogonium\novoid\novoidal\novolemma\novolo\novological\novologist\novology\novolytic\novomucoid\novoplasm\novoplasmic\novopyriform\novorhomboid\novorhomboidal\novotesticular\novotestis\novovitellin\nOvovivipara\novoviviparism\novoviviparity\novoviviparous\novoviviparously\novoviviparousness\nOvula\novular\novularian\novulary\novulate\novulation\novule\novuliferous\novuligerous\novulist\novum\now\nowd\nowe\nowelty\nOwen\nOwenia\nOwenian\nOwenism\nOwenist\nOwenite\nOwenize\nower\nowerance\nowerby\nowercome\nowergang\nowerloup\nowertaen\nowerword\nowght\nowing\nowk\nowl\nowldom\nowler\nowlery\nowlet\nOwlglass\nowlhead\nowling\nowlish\nowlishly\nowlishness\nowlism\nowllight\nowllike\nOwlspiegle\nowly\nown\nowner\nownerless\nownership\nownhood\nownness\nownself\nownwayish\nowregane\nowrehip\nowrelay\nowse\nowsen\nowser\nowtchah\nowyheeite\nox\noxacid\noxadiazole\noxalacetic\noxalaldehyde\noxalamid\noxalamide\noxalan\noxalate\noxaldehyde\noxalemia\noxalic\nOxalidaceae\noxalidaceous\nOxalis\noxalite\noxalodiacetic\noxalonitril\noxalonitrile\noxaluramid\noxaluramide\noxalurate\noxaluria\noxaluric\noxalyl\noxalylurea\noxamate\noxamethane\noxamic\noxamid\noxamide\noxamidine\noxammite\noxan\noxanate\noxane\noxanic\noxanilate\noxanilic\noxanilide\noxazine\noxazole\noxbane\noxberry\noxbird\noxbiter\noxblood\noxbow\noxboy\noxbrake\noxcart\noxcheek\noxdiacetic\noxdiazole\noxea\noxeate\noxen\noxeote\noxer\noxetone\noxeye\noxfly\nOxford\nOxfordian\nOxfordism\nOxfordist\noxgang\noxgoad\noxharrow\noxhead\noxheal\noxheart\noxhide\noxhoft\noxhorn\noxhouse\noxhuvud\noxidability\noxidable\noxidant\noxidase\noxidate\noxidation\noxidational\noxidative\noxidator\noxide\noxidic\noxidimetric\noxidimetry\noxidizability\noxidizable\noxidization\noxidize\noxidizement\noxidizer\noxidizing\noxidoreductase\noxidoreduction\noxidulated\noximate\noximation\noxime\noxland\noxlike\noxlip\noxman\noxmanship\noxoindoline\nOxonian\noxonic\noxonium\nOxonolatry\noxozone\noxozonide\noxpecker\noxphony\noxreim\noxshoe\noxskin\noxtail\noxter\noxtongue\noxwort\noxy\noxyacanthine\noxyacanthous\noxyacetylene\noxyacid\nOxyaena\nOxyaenidae\noxyaldehyde\noxyamine\noxyanthracene\noxyanthraquinone\noxyaphia\noxyaster\noxybaphon\nOxybaphus\noxybenzaldehyde\noxybenzene\noxybenzoic\noxybenzyl\noxyberberine\noxyblepsia\noxybromide\noxybutyria\noxybutyric\noxycalcium\noxycalorimeter\noxycamphor\noxycaproic\noxycarbonate\noxycellulose\noxycephalic\noxycephalism\noxycephalous\noxycephaly\noxychlorate\noxychloric\noxychloride\noxycholesterol\noxychromatic\noxychromatin\noxychromatinic\noxycinnamic\noxycobaltammine\nOxycoccus\noxycopaivic\noxycoumarin\noxycrate\noxycyanide\noxydactyl\nOxydendrum\noxydiact\noxyesthesia\noxyether\noxyethyl\noxyfatty\noxyfluoride\noxygas\noxygen\noxygenant\noxygenate\noxygenation\noxygenator\noxygenerator\noxygenic\noxygenicity\noxygenium\noxygenizable\noxygenize\noxygenizement\noxygenizer\noxygenous\noxygeusia\noxygnathous\noxyhalide\noxyhaloid\noxyhematin\noxyhemocyanin\noxyhemoglobin\noxyhexactine\noxyhexaster\noxyhydrate\noxyhydric\noxyhydrogen\noxyiodide\noxyketone\noxyl\nOxylabracidae\nOxylabrax\noxyluciferin\noxyluminescence\noxyluminescent\noxymandelic\noxymel\noxymethylene\noxymoron\noxymuriate\noxymuriatic\noxynaphthoic\noxynaphtoquinone\noxynarcotine\noxyneurin\noxyneurine\noxynitrate\noxyntic\noxyophitic\noxyopia\nOxyopidae\noxyosphresia\noxypetalous\noxyphenol\noxyphenyl\noxyphile\noxyphilic\noxyphilous\noxyphonia\noxyphosphate\noxyphthalic\noxyphyllous\noxyphyte\noxypicric\nOxypolis\noxyproline\noxypropionic\noxypurine\noxypycnos\noxyquinaseptol\noxyquinoline\noxyquinone\noxyrhine\noxyrhinous\noxyrhynch\noxyrhynchous\noxyrhynchus\nOxyrrhyncha\noxyrrhynchid\noxysalicylic\noxysalt\noxystearic\nOxystomata\noxystomatous\noxystome\noxysulphate\noxysulphide\noxyterpene\noxytocia\noxytocic\noxytocin\noxytocous\noxytoluene\noxytoluic\noxytone\noxytonesis\noxytonical\noxytonize\nOxytricha\nOxytropis\noxytylotate\noxytylote\noxyuriasis\noxyuricide\nOxyuridae\noxyurous\noxywelding\nOyana\noyapock\noyer\noyster\noysterage\noysterbird\noystered\noysterer\noysterfish\noystergreen\noysterhood\noysterhouse\noystering\noysterish\noysterishness\noysterlike\noysterling\noysterman\noysterous\noysterroot\noysterseed\noystershell\noysterwife\noysterwoman\nOzan\nOzark\nozarkite\nozena\nOzias\nozobrome\nozocerite\nozokerit\nozokerite\nozonate\nozonation\nozonator\nozone\nozoned\nozonic\nozonide\nozoniferous\nozonification\nozonify\nOzonium\nozonization\nozonize\nozonizer\nozonometer\nozonometry\nozonoscope\nozonoscopic\nozonous\nozophen\nozophene\nozostomia\nozotype\nP\np\npa\npaal\npaar\npaauw\nPaba\npabble\nPablo\npablo\npabouch\npabular\npabulary\npabulation\npabulatory\npabulous\npabulum\npac\npaca\npacable\nPacaguara\npacate\npacation\npacative\npacay\npacaya\nPaccanarist\nPacchionian\nPace\npace\npaceboard\npaced\npacemaker\npacemaking\npacer\npachak\npachisi\npachnolite\npachometer\nPachomian\nPachons\nPacht\npachyacria\npachyaemia\npachyblepharon\npachycarpous\npachycephal\npachycephalia\npachycephalic\npachycephalous\npachycephaly\npachychilia\npachycholia\npachychymia\npachycladous\npachydactyl\npachydactylous\npachydactyly\npachyderm\npachyderma\npachydermal\nPachydermata\npachydermatocele\npachydermatoid\npachydermatosis\npachydermatous\npachydermatously\npachydermia\npachydermial\npachydermic\npachydermoid\npachydermous\npachyemia\npachyglossal\npachyglossate\npachyglossia\npachyglossous\npachyhaemia\npachyhaemic\npachyhaemous\npachyhematous\npachyhemia\npachyhymenia\npachyhymenic\nPachylophus\npachylosis\nPachyma\npachymenia\npachymenic\npachymeningitic\npachymeningitis\npachymeninx\npachymeter\npachynathous\npachynema\npachynsis\npachyntic\npachyodont\npachyotia\npachyotous\npachyperitonitis\npachyphyllous\npachypleuritic\npachypod\npachypodous\npachypterous\nPachyrhizus\npachyrhynchous\npachysalpingitis\nPachysandra\npachysaurian\npachysomia\npachysomous\npachystichous\nPachystima\npachytene\npachytrichous\nPachytylus\npachyvaginitis\npacifiable\npacific\npacifical\npacifically\npacificate\npacification\npacificator\npacificatory\npacificism\npacificist\npacificity\npacifier\npacifism\npacifist\npacifistic\npacifistically\npacify\npacifyingly\nPacinian\npack\npackable\npackage\npackbuilder\npackcloth\npacker\npackery\npacket\npackhouse\npackless\npackly\npackmaker\npackmaking\npackman\npackmanship\npackness\npacksack\npacksaddle\npackstaff\npackthread\npackwall\npackwaller\npackware\npackway\npaco\nPacolet\npacouryuva\npact\npaction\npactional\npactionally\nPactolian\nPactolus\npad\npadcloth\nPadda\npadder\npadding\npaddle\npaddlecock\npaddled\npaddlefish\npaddlelike\npaddler\npaddlewood\npaddling\npaddock\npaddockride\npaddockstone\npaddockstool\nPaddy\npaddy\npaddybird\nPaddyism\npaddymelon\nPaddywack\npaddywatch\nPaddywhack\npaddywhack\npadella\npadfoot\npadge\nPadina\npadishah\npadle\npadlike\npadlock\npadmasana\npadmelon\npadnag\npadpiece\nPadraic\nPadraig\npadre\npadroadist\npadroado\npadronism\npadstone\npadtree\nPaduan\nPaduanism\npaduasoy\nPadus\npaean\npaeanism\npaeanize\npaedarchy\npaedatrophia\npaedatrophy\npaediatry\npaedogenesis\npaedogenetic\npaedometer\npaedometrical\npaedomorphic\npaedomorphism\npaedonymic\npaedonymy\npaedopsychologist\npaedotribe\npaedotrophic\npaedotrophist\npaedotrophy\npaegel\npaegle\nPaelignian\npaenula\npaeon\nPaeonia\nPaeoniaceae\nPaeonian\npaeonic\npaetrick\npaga\npagan\nPaganalia\nPaganalian\npagandom\npaganic\npaganical\npaganically\npaganish\npaganishly\npaganism\npaganist\npaganistic\npaganity\npaganization\npaganize\npaganizer\npaganly\npaganry\npagatpat\nPage\npage\npageant\npageanted\npageanteer\npageantic\npageantry\npagedom\npageful\npagehood\npageless\npagelike\npager\npageship\npagina\npaginal\npaginary\npaginate\npagination\npagiopod\nPagiopoda\npagoda\npagodalike\npagodite\npagoscope\npagrus\nPaguma\npagurian\npagurid\nPaguridae\nPaguridea\npagurine\nPagurinea\npaguroid\nPaguroidea\nPagurus\npagus\npah\npaha\nPahareen\nPahari\nPaharia\npahi\nPahlavi\npahlavi\npahmi\npaho\npahoehoe\nPahouin\npahutan\nPaiconeca\npaideutic\npaideutics\npaidological\npaidologist\npaidology\npaidonosology\npaigle\npaik\npail\npailful\npaillasse\npaillette\npailletted\npailou\npaimaneh\npain\npained\npainful\npainfully\npainfulness\npaining\npainingly\npainkiller\npainless\npainlessly\npainlessness\npainproof\npainstaker\npainstaking\npainstakingly\npainstakingness\npainsworthy\npaint\npaintability\npaintable\npaintableness\npaintably\npaintbox\npaintbrush\npainted\npaintedness\npainter\npainterish\npainterlike\npainterly\npaintership\npaintiness\npainting\npaintingness\npaintless\npaintpot\npaintproof\npaintress\npaintrix\npaintroot\npainty\npaip\npair\npaired\npairedness\npairer\npairment\npairwise\npais\npaisa\npaisanite\nPaisley\nPaiute\npaiwari\npajahuello\npajama\npajamaed\npajock\nPajonism\nPakawa\nPakawan\npakchoi\npakeha\nPakhpuluk\nPakhtun\nPakistani\npaktong\npal\nPala\npalace\npalaced\npalacelike\npalaceous\npalaceward\npalacewards\npaladin\npalaeanthropic\nPalaearctic\nPalaeechini\npalaeechinoid\nPalaeechinoidea\npalaeechinoidean\npalaeentomology\npalaeethnologic\npalaeethnological\npalaeethnologist\npalaeethnology\nPalaeeudyptes\nPalaeic\npalaeichthyan\nPalaeichthyes\npalaeichthyic\nPalaemon\npalaemonid\nPalaemonidae\npalaemonoid\npalaeoalchemical\npalaeoanthropic\npalaeoanthropography\npalaeoanthropology\nPalaeoanthropus\npalaeoatavism\npalaeoatavistic\npalaeobiogeography\npalaeobiologist\npalaeobiology\npalaeobotanic\npalaeobotanical\npalaeobotanically\npalaeobotanist\npalaeobotany\nPalaeocarida\npalaeoceanography\nPalaeocene\npalaeochorology\npalaeoclimatic\npalaeoclimatology\nPalaeoconcha\npalaeocosmic\npalaeocosmology\nPalaeocrinoidea\npalaeocrystal\npalaeocrystallic\npalaeocrystalline\npalaeocrystic\npalaeocyclic\npalaeodendrologic\npalaeodendrological\npalaeodendrologically\npalaeodendrologist\npalaeodendrology\nPalaeodictyoptera\npalaeodictyopteran\npalaeodictyopteron\npalaeodictyopterous\npalaeoencephalon\npalaeoeremology\npalaeoethnic\npalaeoethnologic\npalaeoethnological\npalaeoethnologist\npalaeoethnology\npalaeofauna\nPalaeogaea\nPalaeogaean\npalaeogene\npalaeogenesis\npalaeogenetic\npalaeogeographic\npalaeogeography\npalaeoglaciology\npalaeoglyph\nPalaeognathae\npalaeognathic\npalaeognathous\npalaeograph\npalaeographer\npalaeographic\npalaeographical\npalaeographically\npalaeographist\npalaeography\npalaeoherpetologist\npalaeoherpetology\npalaeohistology\npalaeohydrography\npalaeolatry\npalaeolimnology\npalaeolith\npalaeolithic\npalaeolithical\npalaeolithist\npalaeolithoid\npalaeolithy\npalaeological\npalaeologist\npalaeology\nPalaeomastodon\npalaeometallic\npalaeometeorological\npalaeometeorology\nPalaeonemertea\npalaeonemertean\npalaeonemertine\nPalaeonemertinea\nPalaeonemertini\npalaeoniscid\nPalaeoniscidae\npalaeoniscoid\nPalaeoniscum\nPalaeoniscus\npalaeontographic\npalaeontographical\npalaeontography\npalaeopathology\npalaeopedology\npalaeophile\npalaeophilist\nPalaeophis\npalaeophysiography\npalaeophysiology\npalaeophytic\npalaeophytological\npalaeophytologist\npalaeophytology\npalaeoplain\npalaeopotamology\npalaeopsychic\npalaeopsychological\npalaeopsychology\npalaeoptychology\nPalaeornis\nPalaeornithinae\npalaeornithine\npalaeornithological\npalaeornithology\npalaeosaur\nPalaeosaurus\npalaeosophy\nPalaeospondylus\nPalaeostraca\npalaeostracan\npalaeostriatal\npalaeostriatum\npalaeostylic\npalaeostyly\npalaeotechnic\npalaeothalamus\nPalaeothentes\nPalaeothentidae\npalaeothere\npalaeotherian\nPalaeotheriidae\npalaeotheriodont\npalaeotherioid\nPalaeotherium\npalaeotheroid\nPalaeotropical\npalaeotype\npalaeotypic\npalaeotypical\npalaeotypically\npalaeotypographical\npalaeotypographist\npalaeotypography\npalaeovolcanic\nPalaeozoic\npalaeozoological\npalaeozoologist\npalaeozoology\npalaestra\npalaestral\npalaestrian\npalaestric\npalaestrics\npalaetiological\npalaetiologist\npalaetiology\npalafitte\npalagonite\npalagonitic\nPalaic\nPalaihnihan\npalaiotype\npalaite\npalama\npalamate\npalame\nPalamedea\npalamedean\nPalamedeidae\nPalamite\nPalamitism\npalampore\npalander\npalanka\npalankeen\npalanquin\npalapalai\nPalapteryx\nPalaquium\npalar\npalas\npalatability\npalatable\npalatableness\npalatably\npalatal\npalatalism\npalatality\npalatalization\npalatalize\npalate\npalated\npalateful\npalatefulness\npalateless\npalatelike\npalatial\npalatially\npalatialness\npalatian\npalatic\npalatinal\npalatinate\npalatine\npalatineship\nPalatinian\npalatinite\npalation\npalatist\npalatitis\npalative\npalatization\npalatize\npalatoalveolar\npalatodental\npalatoglossal\npalatoglossus\npalatognathous\npalatogram\npalatograph\npalatography\npalatomaxillary\npalatometer\npalatonasal\npalatopharyngeal\npalatopharyngeus\npalatoplasty\npalatoplegia\npalatopterygoid\npalatoquadrate\npalatorrhaphy\npalatoschisis\nPalatua\nPalau\nPalaung\npalaver\npalaverer\npalaverist\npalaverment\npalaverous\npalay\npalazzi\npalberry\npalch\npale\npalea\npaleaceous\npaleanthropic\nPalearctic\npaleate\npalebelly\npalebuck\npalechinoid\npaled\npaledness\npaleencephalon\npaleentomology\npaleethnographer\npaleethnologic\npaleethnological\npaleethnologist\npaleethnology\npaleface\npalehearted\npaleichthyologic\npaleichthyologist\npaleichthyology\npaleiform\npalely\nPaleman\npaleness\nPalenque\npaleoalchemical\npaleoandesite\npaleoanthropic\npaleoanthropography\npaleoanthropological\npaleoanthropologist\npaleoanthropology\nPaleoanthropus\npaleoatavism\npaleoatavistic\npaleobiogeography\npaleobiologist\npaleobiology\npaleobotanic\npaleobotanical\npaleobotanically\npaleobotanist\npaleobotany\npaleoceanography\nPaleocene\npaleochorology\npaleoclimatic\npaleoclimatologist\npaleoclimatology\nPaleoconcha\npaleocosmic\npaleocosmology\npaleocrystal\npaleocrystallic\npaleocrystalline\npaleocrystic\npaleocyclic\npaleodendrologic\npaleodendrological\npaleodendrologically\npaleodendrologist\npaleodendrology\npaleoecologist\npaleoecology\npaleoencephalon\npaleoeremology\npaleoethnic\npaleoethnography\npaleoethnologic\npaleoethnological\npaleoethnologist\npaleoethnology\npaleofauna\nPaleogene\npaleogenesis\npaleogenetic\npaleogeographic\npaleogeography\npaleoglaciology\npaleoglyph\npaleograph\npaleographer\npaleographic\npaleographical\npaleographically\npaleographist\npaleography\npaleoherpetologist\npaleoherpetology\npaleohistology\npaleohydrography\npaleoichthyology\npaleokinetic\npaleola\npaleolate\npaleolatry\npaleolimnology\npaleolith\npaleolithic\npaleolithical\npaleolithist\npaleolithoid\npaleolithy\npaleological\npaleologist\npaleology\npaleomammalogy\npaleometallic\npaleometeorological\npaleometeorology\npaleontographic\npaleontographical\npaleontography\npaleontologic\npaleontological\npaleontologically\npaleontologist\npaleontology\npaleopathology\npaleopedology\npaleophysiography\npaleophysiology\npaleophytic\npaleophytological\npaleophytologist\npaleophytology\npaleopicrite\npaleoplain\npaleopotamoloy\npaleopsychic\npaleopsychological\npaleopsychology\npaleornithological\npaleornithology\npaleostriatal\npaleostriatum\npaleostylic\npaleostyly\npaleotechnic\npaleothalamus\npaleothermal\npaleothermic\nPaleotropical\npaleovolcanic\npaleoytterbium\nPaleozoic\npaleozoological\npaleozoologist\npaleozoology\npaler\nPalermitan\nPalermo\nPales\nPalesman\nPalestinian\npalestra\npalestral\npalestrian\npalestric\npalet\npaletiology\npaletot\npalette\npaletz\npalewise\npalfrey\npalfreyed\npalgat\nPali\npali\nPalicourea\npalification\npaliform\npaligorskite\npalikar\npalikarism\npalikinesia\npalila\npalilalia\nPalilia\nPalilicium\npalillogia\npalilogetic\npalilogy\npalimbacchic\npalimbacchius\npalimpsest\npalimpsestic\npalinal\npalindrome\npalindromic\npalindromical\npalindromically\npalindromist\npaling\npalingenesia\npalingenesian\npalingenesis\npalingenesist\npalingenesy\npalingenetic\npalingenetically\npalingenic\npalingenist\npalingeny\npalinode\npalinodial\npalinodic\npalinodist\npalinody\npalinurid\nPalinuridae\npalinuroid\nPalinurus\npaliphrasia\npalirrhea\npalisade\npalisading\npalisado\npalisander\npalisfy\npalish\npalistrophia\nPaliurus\npalkee\npall\npalla\npalladammine\nPalladia\npalladia\nPalladian\nPalladianism\npalladic\npalladiferous\npalladinize\npalladion\npalladious\nPalladium\npalladium\npalladiumize\npalladize\npalladodiammine\npalladosammine\npalladous\npallae\npallah\npallall\npallanesthesia\nPallas\npallasite\npallbearer\npalled\npallescence\npallescent\npallesthesia\npallet\npalleting\npalletize\npallette\npallholder\npalli\npallial\npalliard\npalliasse\nPalliata\npalliata\npalliate\npalliation\npalliative\npalliatively\npalliator\npalliatory\npallid\npallidiflorous\npallidipalpate\npalliditarsate\npallidity\npallidiventrate\npallidly\npallidness\npalliness\nPalliobranchiata\npalliobranchiate\npalliocardiac\npallioessexite\npallion\npalliopedal\npalliostratus\npallium\nPalliyan\npallograph\npallographic\npallometric\npallone\npallor\nPallu\nPalluites\npallwise\npally\npalm\npalma\nPalmaceae\npalmaceous\npalmad\nPalmae\npalmanesthesia\npalmar\npalmarian\npalmary\npalmate\npalmated\npalmately\npalmatifid\npalmatiform\npalmatilobate\npalmatilobed\npalmation\npalmatiparted\npalmatipartite\npalmatisect\npalmatisected\npalmature\npalmcrist\npalmed\nPalmella\nPalmellaceae\npalmellaceous\npalmelloid\npalmer\npalmerite\npalmery\npalmesthesia\npalmette\npalmetto\npalmetum\npalmful\npalmicolous\npalmiferous\npalmification\npalmiform\npalmigrade\npalmilobate\npalmilobated\npalmilobed\npalminervate\npalminerved\npalmiped\nPalmipedes\npalmipes\npalmist\npalmister\npalmistry\npalmitate\npalmite\npalmitic\npalmitin\npalmitinic\npalmito\npalmitoleic\npalmitone\npalmiveined\npalmivorous\npalmlike\npalmo\npalmodic\npalmoscopy\npalmospasmus\npalmula\npalmus\npalmwise\npalmwood\npalmy\npalmyra\nPalmyrene\nPalmyrenian\npalolo\npalombino\npalometa\npalomino\npalosapis\npalouser\npaloverde\npalp\npalpability\npalpable\npalpableness\npalpably\npalpacle\npalpal\npalpate\npalpation\npalpatory\npalpebra\npalpebral\npalpebrate\npalpebration\npalpebritis\npalped\npalpi\npalpicorn\nPalpicornia\npalpifer\npalpiferous\npalpiform\npalpiger\npalpigerous\npalpitant\npalpitate\npalpitatingly\npalpitation\npalpless\npalpocil\npalpon\npalpulus\npalpus\npalsgrave\npalsgravine\npalsied\npalsification\npalstave\npalster\npalsy\npalsylike\npalsywort\npalt\nPalta\npalter\npalterer\npalterly\npaltrily\npaltriness\npaltry\npaludal\npaludament\npaludamentum\npaludial\npaludian\npaludic\nPaludicella\nPaludicolae\npaludicole\npaludicoline\npaludicolous\npaludiferous\nPaludina\npaludinal\npaludine\npaludinous\npaludism\npaludose\npaludous\npaludrin\npaludrine\npalule\npalulus\nPalus\npalus\npalustral\npalustrian\npalustrine\npaly\npalynology\nPam\npam\npambanmanche\nPamela\npament\npameroon\nPamir\nPamiri\nPamirian\nPamlico\npamment\nPampanga\nPampangan\nPampango\npampas\npampean\npamper\npampered\npamperedly\npamperedness\npamperer\npamperize\npampero\npamphagous\npampharmacon\nPamphiliidae\nPamphilius\npamphlet\npamphletage\npamphletary\npamphleteer\npamphleter\npamphletful\npamphletic\npamphletical\npamphletize\npamphletwise\npamphysical\npamphysicism\npampilion\npampiniform\npampinocele\npamplegia\npampootee\npampootie\npampre\npamprodactyl\npamprodactylism\npamprodactylous\npampsychism\npampsychist\nPamunkey\nPan\npan\npanace\nPanacea\npanacea\npanacean\npanaceist\npanache\npanached\npanachure\npanada\npanade\nPanagia\npanagiarion\nPanak\nPanaka\npanama\nPanamaian\nPanaman\nPanamanian\nPanamano\nPanamic\nPanamint\nPanamist\npanapospory\npanarchic\npanarchy\npanaris\npanaritium\npanarteritis\npanarthritis\npanary\npanatela\nPanathenaea\nPanathenaean\nPanathenaic\npanatrophy\npanautomorphic\npanax\nPanayan\nPanayano\npanbabylonian\npanbabylonism\nPanboeotian\npancake\npancarditis\npanchama\npanchayat\npancheon\npanchion\npanchromatic\npanchromatism\npanchromatization\npanchromatize\npanchway\npanclastic\npanconciliatory\npancosmic\npancosmism\npancosmist\npancratian\npancratiast\npancratiastic\npancratic\npancratical\npancratically\npancration\npancratism\npancratist\npancratium\npancreas\npancreatalgia\npancreatectomize\npancreatectomy\npancreatemphraxis\npancreathelcosis\npancreatic\npancreaticoduodenal\npancreaticoduodenostomy\npancreaticogastrostomy\npancreaticosplenic\npancreatin\npancreatism\npancreatitic\npancreatitis\npancreatization\npancreatize\npancreatoduodenectomy\npancreatoenterostomy\npancreatogenic\npancreatogenous\npancreatoid\npancreatolipase\npancreatolith\npancreatomy\npancreatoncus\npancreatopathy\npancreatorrhagia\npancreatotomy\npancreectomy\npancreozymin\npancyclopedic\npand\npanda\npandal\npandan\nPandanaceae\npandanaceous\nPandanales\nPandanus\npandaram\nPandarctos\npandaric\nPandarus\npandation\nPandean\npandect\nPandectist\npandemia\npandemian\npandemic\npandemicity\npandemoniac\nPandemoniacal\nPandemonian\npandemonic\npandemonism\nPandemonium\npandemonium\nPandemos\npandemy\npandenominational\npander\npanderage\npanderer\npanderess\npanderism\npanderize\npanderly\nPanderma\npandermite\npanderous\npandership\npandestruction\npandiabolism\npandiculation\nPandion\nPandionidae\npandita\npandle\npandlewhew\nPandora\npandora\nPandorea\nPandoridae\nPandorina\nPandosto\npandour\npandowdy\npandrop\npandura\npandurate\npandurated\npanduriform\npandy\npane\npanecclesiastical\npaned\npanegoism\npanegoist\npanegyric\npanegyrical\npanegyrically\npanegyricize\npanegyricon\npanegyricum\npanegyris\npanegyrist\npanegyrize\npanegyrizer\npanegyry\npaneity\npanel\npanela\npanelation\npaneler\npaneless\npaneling\npanelist\npanellation\npanelling\npanelwise\npanelwork\npanentheism\npanesthesia\npanesthetic\npaneulogism\npanfil\npanfish\npanful\npang\nPangaea\npangamic\npangamous\npangamously\npangamy\npangane\nPangasinan\npangen\npangene\npangenesis\npangenetic\npangenetically\npangenic\npangful\npangi\nPangium\npangless\npanglessly\npanglima\nPangloss\nPanglossian\nPanglossic\npangolin\npangrammatist\nPangwe\npanhandle\npanhandler\npanharmonic\npanharmonicon\npanhead\npanheaded\nPanhellenic\nPanhellenios\nPanhellenism\nPanhellenist\nPanhellenium\npanhidrosis\npanhuman\npanhygrous\npanhyperemia\npanhysterectomy\nPani\npanic\npanical\npanically\npanicful\npanichthyophagous\npanicked\npanicky\npanicle\npanicled\npaniclike\npanicmonger\npanicmongering\npaniconograph\npaniconographic\npaniconography\nPanicularia\npaniculate\npaniculated\npaniculately\npaniculitis\nPanicum\npanidiomorphic\npanidrosis\npanification\npanimmunity\nPaninean\nPanionia\nPanionian\nPanionic\nPaniquita\nPaniquitan\npanisc\npanisca\npaniscus\npanisic\npanivorous\nPanjabi\npanjandrum\npank\npankin\npankration\npanleucopenia\npanlogical\npanlogism\npanlogistical\npanman\npanmelodicon\npanmelodion\npanmerism\npanmeristic\npanmixia\npanmixy\npanmnesia\npanmug\npanmyelophthisis\nPanna\npannade\npannage\npannam\npannationalism\npanne\npannel\npanner\npannery\npanneuritic\npanneuritis\npannicle\npannicular\npannier\npanniered\npannierman\npannikin\npanning\nPannonian\nPannonic\npannose\npannosely\npannum\npannus\npannuscorium\nPanoan\npanocha\npanoche\npanococo\npanoistic\npanomphaic\npanomphean\npanomphic\npanophobia\npanophthalmia\npanophthalmitis\npanoplied\npanoplist\npanoply\npanoptic\npanoptical\npanopticon\npanoram\npanorama\npanoramic\npanoramical\npanoramically\npanoramist\npanornithic\nPanorpa\nPanorpatae\npanorpian\npanorpid\nPanorpidae\nPanos\npanosteitis\npanostitis\npanotitis\npanotype\npanouchi\npanpathy\npanpharmacon\npanphenomenalism\npanphobia\nPanpipe\npanplegia\npanpneumatism\npanpolism\npanpsychic\npanpsychism\npanpsychist\npanpsychistic\npanscientist\npansciolism\npansciolist\npansclerosis\npansclerotic\npanse\npansexism\npansexual\npansexualism\npansexualist\npansexuality\npansexualize\npanshard\npanside\npansideman\npansied\npansinuitis\npansinusitis\npansmith\npansophic\npansophical\npansophically\npansophism\npansophist\npansophy\npanspermatism\npanspermatist\npanspermia\npanspermic\npanspermism\npanspermist\npanspermy\npansphygmograph\npanstereorama\npansy\npansylike\npant\npantachromatic\npantacosm\npantagamy\npantagogue\npantagraph\npantagraphic\npantagraphical\nPantagruel\nPantagruelian\nPantagruelic\nPantagruelically\nPantagrueline\npantagruelion\nPantagruelism\nPantagruelist\nPantagruelistic\nPantagruelistical\nPantagruelize\npantaleon\npantaletless\npantalets\npantaletted\npantalgia\npantalon\nPantalone\npantaloon\npantalooned\npantaloonery\npantaloons\npantameter\npantamorph\npantamorphia\npantamorphic\npantanemone\npantanencephalia\npantanencephalic\npantaphobia\npantarbe\npantarchy\npantas\npantascope\npantascopic\nPantastomatida\nPantastomina\npantatrophia\npantatrophy\npantatype\npantechnic\npantechnicon\npantelegraph\npantelegraphy\npanteleologism\npantelephone\npantelephonic\nPantelis\npantellerite\npanter\npanterer\nPantheian\npantheic\npantheism\npantheist\npantheistic\npantheistical\npantheistically\npanthelematism\npanthelism\npantheologist\npantheology\npantheon\npantheonic\npantheonization\npantheonize\npanther\npantheress\npantherine\npantherish\npantherlike\npantherwood\npantheum\npantie\npanties\npantile\npantiled\npantiling\npanting\npantingly\npantisocracy\npantisocrat\npantisocratic\npantisocratical\npantisocratist\npantle\npantler\npanto\npantochrome\npantochromic\npantochromism\npantochronometer\nPantocrator\npantod\nPantodon\nPantodontidae\npantoffle\npantofle\npantoganglitis\npantogelastic\npantoglossical\npantoglot\npantoglottism\npantograph\npantographer\npantographic\npantographical\npantographically\npantography\npantoiatrical\npantologic\npantological\npantologist\npantology\npantomancer\npantometer\npantometric\npantometrical\npantometry\npantomime\npantomimic\npantomimical\npantomimically\npantomimicry\npantomimish\npantomimist\npantomimus\npantomnesia\npantomnesic\npantomorph\npantomorphia\npantomorphic\npanton\npantoon\npantopelagian\npantophagic\npantophagist\npantophagous\npantophagy\npantophile\npantophobia\npantophobic\npantophobous\npantoplethora\npantopod\nPantopoda\npantopragmatic\npantopterous\npantoscope\npantoscopic\npantosophy\nPantostomata\npantostomate\npantostomatous\npantostome\npantotactic\npantothenate\npantothenic\nPantotheria\npantotherian\npantotype\npantoum\npantropic\npantropical\npantry\npantryman\npantrywoman\npants\npantun\npanty\npantywaist\npanung\npanurgic\npanurgy\npanyar\nPanzer\npanzoism\npanzootia\npanzootic\npanzooty\nPaola\npaolo\npaon\npap\npapa\npapability\npapable\npapabot\npapacy\npapagallo\nPapago\npapain\npapal\npapalism\npapalist\npapalistic\npapalization\npapalize\npapalizer\npapally\npapalty\npapane\npapaphobia\npapaphobist\npapaprelatical\npapaprelatist\npaparchical\npaparchy\npapaship\nPapaver\nPapaveraceae\npapaveraceous\nPapaverales\npapaverine\npapaverous\npapaw\npapaya\nPapayaceae\npapayaceous\npapayotin\npapboat\npape\npapelonne\npaper\npaperback\npaperbark\npaperboard\npapered\npaperer\npaperful\npaperiness\npapering\npaperlike\npapermaker\npapermaking\npapermouth\npapern\npapershell\npaperweight\npapery\npapess\npapeterie\npapey\nPaphian\nPaphiopedilum\nPapiamento\npapicolar\npapicolist\nPapilio\nPapilionaceae\npapilionaceous\nPapiliones\npapilionid\nPapilionidae\nPapilionides\nPapilioninae\npapilionine\npapilionoid\nPapilionoidea\npapilla\npapillae\npapillar\npapillary\npapillate\npapillated\npapillectomy\npapilledema\npapilliferous\npapilliform\npapillitis\npapilloadenocystoma\npapillocarcinoma\npapilloedema\npapilloma\npapillomatosis\npapillomatous\npapillon\npapilloretinitis\npapillosarcoma\npapillose\npapillosity\npapillote\npapillous\npapillulate\npapillule\nPapinachois\nPapio\npapion\npapish\npapisher\npapism\nPapist\npapist\npapistic\npapistical\npapistically\npapistlike\npapistly\npapistry\npapize\npapless\npapmeat\npapolater\npapolatrous\npapolatry\npapoose\npapooseroot\nPappea\npappescent\npappi\npappiferous\npappiform\npappose\npappox\npappus\npappy\npapreg\npaprica\npaprika\nPapuan\npapula\npapular\npapulate\npapulated\npapulation\npapule\npapuliferous\npapuloerythematous\npapulopustular\npapulopustule\npapulose\npapulosquamous\npapulous\npapulovesicular\npapyr\npapyraceous\npapyral\npapyrean\npapyri\npapyrian\npapyrin\npapyrine\npapyritious\npapyrocracy\npapyrograph\npapyrographer\npapyrographic\npapyrography\npapyrological\npapyrologist\npapyrology\npapyrophobia\npapyroplastics\npapyrotamia\npapyrotint\npapyrotype\npapyrus\nPaque\npaquet\npar\npara\nparaaminobenzoic\nparabanate\nparabanic\nparabaptism\nparabaptization\nparabasal\nparabasic\nparabasis\nparabema\nparabematic\nparabenzoquinone\nparabiosis\nparabiotic\nparablast\nparablastic\nparable\nparablepsia\nparablepsis\nparablepsy\nparableptic\nparabola\nparabolanus\nparabolic\nparabolical\nparabolicalism\nparabolically\nparabolicness\nparaboliform\nparabolist\nparabolization\nparabolize\nparabolizer\nparaboloid\nparaboloidal\nparabomb\nparabotulism\nparabranchia\nparabranchial\nparabranchiate\nparabulia\nparabulic\nparacanthosis\nparacarmine\nparacasein\nparacaseinate\nParacelsian\nParacelsianism\nParacelsic\nParacelsist\nParacelsistic\nParacelsus\nparacentesis\nparacentral\nparacentric\nparacentrical\nparacephalus\nparacerebellar\nparacetaldehyde\nparachaplain\nparacholia\nparachor\nparachordal\nparachrea\nparachroia\nparachroma\nparachromatism\nparachromatophorous\nparachromatopsia\nparachromatosis\nparachrome\nparachromoparous\nparachromophoric\nparachromophorous\nparachronism\nparachronistic\nparachrose\nparachute\nparachutic\nparachutism\nparachutist\nparaclete\nparacmasis\nparacme\nparacoele\nparacoelian\nparacolitis\nparacolon\nparacolpitis\nparacolpium\nparacondyloid\nparacone\nparaconic\nparaconid\nparaconscious\nparacorolla\nparacotoin\nparacoumaric\nparacresol\nParacress\nparacusia\nparacusic\nparacyanogen\nparacyesis\nparacymene\nparacystic\nparacystitis\nparacystium\nparade\nparadeful\nparadeless\nparadelike\nparadenitis\nparadental\nparadentitis\nparadentium\nparader\nparaderm\nparadiastole\nparadiazine\nparadichlorbenzene\nparadichlorbenzol\nparadichlorobenzene\nparadichlorobenzol\nparadidymal\nparadidymis\nparadigm\nparadigmatic\nparadigmatical\nparadigmatically\nparadigmatize\nparading\nparadingly\nparadiplomatic\nparadisaic\nparadisaically\nparadisal\nparadise\nParadisea\nparadisean\nParadiseidae\nParadiseinae\nParadisia\nparadisiac\nparadisiacal\nparadisiacally\nparadisial\nparadisian\nparadisic\nparadisical\nparado\nparadoctor\nparados\nparadoses\nparadox\nparadoxal\nparadoxer\nparadoxial\nparadoxic\nparadoxical\nparadoxicalism\nparadoxicality\nparadoxically\nparadoxicalness\nparadoxician\nParadoxides\nparadoxidian\nparadoxism\nparadoxist\nparadoxographer\nparadoxographical\nparadoxology\nparadoxure\nParadoxurinae\nparadoxurine\nParadoxurus\nparadoxy\nparadromic\nparaenesis\nparaenesize\nparaenetic\nparaenetical\nparaengineer\nparaffin\nparaffine\nparaffiner\nparaffinic\nparaffinize\nparaffinoid\nparaffiny\nparaffle\nparafle\nparafloccular\nparaflocculus\nparaform\nparaformaldehyde\nparafunction\nparagammacism\nparaganglion\nparagaster\nparagastral\nparagastric\nparagastrula\nparagastrular\nparage\nparagenesia\nparagenesis\nparagenetic\nparagenic\nparagerontic\nparageusia\nparageusic\nparageusis\nparagglutination\nparaglenal\nparaglobin\nparaglobulin\nparaglossa\nparaglossal\nparaglossate\nparaglossia\nparaglycogen\nparagnath\nparagnathism\nparagnathous\nparagnathus\nparagneiss\nparagnosia\nparagoge\nparagogic\nparagogical\nparagogically\nparagogize\nparagon\nparagonimiasis\nParagonimus\nparagonite\nparagonitic\nparagonless\nparagram\nparagrammatist\nparagraph\nparagrapher\nparagraphia\nparagraphic\nparagraphical\nparagraphically\nparagraphism\nparagraphist\nparagraphistical\nparagraphize\nParaguay\nParaguayan\nparah\nparaheliotropic\nparaheliotropism\nparahematin\nparahemoglobin\nparahepatic\nParahippus\nparahopeite\nparahormone\nparahydrogen\nparaiba\nParaiyan\nparakeet\nparakeratosis\nparakilya\nparakinesia\nparakinetic\nparalactate\nparalalia\nparalambdacism\nparalambdacismus\nparalaurionite\nparaldehyde\nparale\nparalectotype\nparaleipsis\nparalepsis\nparalexia\nparalexic\nparalgesia\nparalgesic\nparalinin\nparalipomena\nParalipomenon\nparalipsis\nparalitical\nparallactic\nparallactical\nparallactically\nparallax\nparallel\nparallelable\nparallelepiped\nparallelepipedal\nparallelepipedic\nparallelepipedon\nparallelepipedonal\nparalleler\nparallelinervate\nparallelinerved\nparallelinervous\nparallelism\nparallelist\nparallelistic\nparallelith\nparallelization\nparallelize\nparallelizer\nparallelless\nparallelly\nparallelodrome\nparallelodromous\nparallelogram\nparallelogrammatic\nparallelogrammatical\nparallelogrammic\nparallelogrammical\nparallelograph\nparallelometer\nparallelopiped\nparallelopipedon\nparallelotropic\nparallelotropism\nparallelwise\nparallepipedous\nparalogia\nparalogical\nparalogician\nparalogism\nparalogist\nparalogistic\nparalogize\nparalogy\nparaluminite\nparalyses\nparalysis\nparalytic\nparalytical\nparalytically\nparalyzant\nparalyzation\nparalyze\nparalyzedly\nparalyzer\nparalyzingly\nparam\nparamagnet\nparamagnetic\nparamagnetism\nparamandelic\nparamarine\nparamastigate\nparamastitis\nparamastoid\nparamatta\nParamecidae\nParamecium\nparamedian\nparamelaconite\nparamenia\nparament\nparamere\nparameric\nparameron\nparamese\nparamesial\nparameter\nparametric\nparametrical\nparametritic\nparametritis\nparametrium\nparamide\nparamilitary\nparamimia\nparamine\nparamiographer\nparamitome\nparamnesia\nparamo\nParamoecium\nparamorph\nparamorphia\nparamorphic\nparamorphine\nparamorphism\nparamorphosis\nparamorphous\nparamount\nparamountcy\nparamountly\nparamountness\nparamountship\nparamour\nparamuthetic\nparamyelin\nparamylum\nparamyoclonus\nparamyosinogen\nparamyotone\nparamyotonia\nparanasal\nparanatellon\nparandrus\nparanema\nparanematic\nparanephric\nparanephritic\nparanephritis\nparanephros\nparanepionic\nparanete\nparang\nparanitraniline\nparanitrosophenol\nparanoia\nparanoiac\nparanoid\nparanoidal\nparanoidism\nparanomia\nparanormal\nparanosic\nparanthelion\nparanthracene\nParanthropus\nparanuclear\nparanucleate\nparanucleic\nparanuclein\nparanucleinic\nparanucleus\nparanymph\nparanymphal\nparao\nparaoperation\nParapaguridae\nparaparesis\nparaparetic\nparapathia\nparapathy\nparapegm\nparapegma\nparaperiodic\nparapet\nparapetalous\nparapeted\nparapetless\nparaph\nparaphasia\nparaphasic\nparaphemia\nparaphenetidine\nparaphenylene\nparaphenylenediamine\nparapherna\nparaphernal\nparaphernalia\nparaphernalian\nparaphia\nparaphilia\nparaphimosis\nparaphonia\nparaphonic\nparaphototropism\nparaphrasable\nparaphrase\nparaphraser\nparaphrasia\nparaphrasian\nparaphrasis\nparaphrasist\nparaphrast\nparaphraster\nparaphrastic\nparaphrastical\nparaphrastically\nparaphrenia\nparaphrenic\nparaphrenitis\nparaphyllium\nparaphysate\nparaphysical\nparaphysiferous\nparaphysis\nparaplasis\nparaplasm\nparaplasmic\nparaplastic\nparaplastin\nparaplectic\nparaplegia\nparaplegic\nparaplegy\nparapleuritis\nparapleurum\nparapod\nparapodial\nparapodium\nparapophysial\nparapophysis\nparapraxia\nparapraxis\nparaproctitis\nparaproctium\nparaprostatitis\nParapsida\nparapsidal\nparapsidan\nparapsis\nparapsychical\nparapsychism\nparapsychological\nparapsychology\nparapsychosis\nparapteral\nparapteron\nparapterum\nparaquadrate\nparaquinone\nPararctalia\nPararctalian\npararectal\npararek\nparareka\npararhotacism\npararosaniline\npararosolic\npararthria\nparasaboteur\nparasalpingitis\nparasang\nparascene\nparascenium\nparasceve\nparaschematic\nparasecretion\nparaselene\nparaselenic\nparasemidin\nparasemidine\nparasexuality\nparashah\nparasigmatism\nparasigmatismus\nParasita\nparasital\nparasitary\nparasite\nparasitelike\nparasitemia\nparasitic\nParasitica\nparasitical\nparasitically\nparasiticalness\nparasiticidal\nparasiticide\nParasitidae\nparasitism\nparasitize\nparasitogenic\nparasitoid\nparasitoidism\nparasitological\nparasitologist\nparasitology\nparasitophobia\nparasitosis\nparasitotrope\nparasitotropic\nparasitotropism\nparasitotropy\nparaskenion\nparasol\nparasoled\nparasolette\nparaspecific\nparasphenoid\nparasphenoidal\nparaspotter\nparaspy\nparastas\nparastatic\nparastemon\nparastemonal\nparasternal\nparasternum\nparastichy\nparastyle\nparasubphonate\nparasubstituted\nParasuchia\nparasuchian\nparasympathetic\nparasympathomimetic\nparasynapsis\nparasynaptic\nparasynaptist\nparasyndesis\nparasynesis\nparasynetic\nparasynovitis\nparasynthesis\nparasynthetic\nparasyntheton\nparasyphilis\nparasyphilitic\nparasyphilosis\nparasystole\nparatactic\nparatactical\nparatactically\nparatartaric\nparataxis\nparate\nparaterminal\nParatheria\nparatherian\nparathesis\nparathetic\nparathion\nparathormone\nparathymic\nparathyroid\nparathyroidal\nparathyroidectomize\nparathyroidectomy\nparathyroprival\nparathyroprivia\nparathyroprivic\nparatitla\nparatitles\nparatoloid\nparatoluic\nparatoluidine\nparatomial\nparatomium\nparatonic\nparatonically\nparatorium\nparatory\nparatracheal\nparatragedia\nparatragoedia\nparatransversan\nparatrichosis\nparatrimma\nparatriptic\nparatroop\nparatrooper\nparatrophic\nparatrophy\nparatuberculin\nparatuberculosis\nparatuberculous\nparatungstate\nparatungstic\nparatype\nparatyphlitis\nparatyphoid\nparatypic\nparatypical\nparatypically\nparavaginitis\nparavail\nparavane\nparavauxite\nparavent\nparavertebral\nparavesical\nparaxial\nparaxially\nparaxon\nparaxonic\nparaxylene\nParazoa\nparazoan\nparazonium\nparbake\nParbate\nparboil\nparbuckle\nparcel\nparceling\nparcellary\nparcellate\nparcellation\nparcelling\nparcellization\nparcellize\nparcelment\nparcelwise\nparcenary\nparcener\nparcenership\nparch\nparchable\nparchedly\nparchedness\nparcheesi\nparchemin\nparcher\nparchesi\nparching\nparchingly\nparchisi\nparchment\nparchmenter\nparchmentize\nparchmentlike\nparchmenty\nparchy\nparcidentate\nparciloquy\nparclose\nparcook\npard\npardalote\nPardanthus\npardao\nparded\npardesi\npardine\npardner\npardnomastic\npardo\npardon\npardonable\npardonableness\npardonably\npardonee\npardoner\npardoning\npardonless\npardonmonger\npare\nparegoric\nPareiasauri\nPareiasauria\npareiasaurian\nPareiasaurus\nPareioplitae\nparel\nparelectronomic\nparelectronomy\nparella\nparen\nparencephalic\nparencephalon\nparenchym\nparenchyma\nparenchymal\nparenchymatic\nparenchymatitis\nparenchymatous\nparenchymatously\nparenchyme\nparenchymous\nparent\nparentage\nparental\nParentalia\nparentalism\nparentality\nparentally\nparentdom\nparentela\nparentelic\nparenteral\nparenterally\nparentheses\nparenthesis\nparenthesize\nparenthetic\nparenthetical\nparentheticality\nparenthetically\nparentheticalness\nparenthood\nparenticide\nparentless\nparentlike\nparentship\nPareoean\nparepididymal\nparepididymis\nparepigastric\nparer\nparerethesis\nparergal\nparergic\nparergon\nparesis\nparesthesia\nparesthesis\nparesthetic\nparethmoid\nparetic\nparetically\npareunia\nparfait\nparfilage\nparfleche\nparfocal\npargana\npargasite\nparge\npargeboard\nparget\npargeter\npargeting\npargo\nparhelia\nparheliacal\nparhelic\nparhelion\nparhomologous\nparhomology\nparhypate\npari\npariah\npariahdom\npariahism\npariahship\nparial\nParian\nparian\nPariasauria\nPariasaurus\nParidae\nparidigitate\nparidrosis\nparies\nparietal\nParietales\nParietaria\nparietary\nparietes\nparietofrontal\nparietojugal\nparietomastoid\nparietoquadrate\nparietosphenoid\nparietosphenoidal\nparietosplanchnic\nparietosquamosal\nparietotemporal\nparietovaginal\nparietovisceral\nparify\nparigenin\npariglin\nParilia\nParilicium\nparilla\nparillin\nparimutuel\nParinarium\nparine\nparing\nparipinnate\nParis\nparish\nparished\nparishen\nparishional\nparishionally\nparishionate\nparishioner\nparishionership\nParisian\nParisianism\nParisianization\nParisianize\nParisianly\nParisii\nparisis\nparisology\nparison\nparisonic\nparisthmic\nparisthmion\nparisyllabic\nparisyllabical\nPariti\nParitium\nparity\nparivincular\npark\nparka\nparkee\nparker\nparkin\nparking\nParkinsonia\nParkinsonism\nparkish\nparklike\nparkward\nparkway\nparky\nparlamento\nparlance\nparlando\nParlatoria\nparlatory\nparlay\nparle\nparley\nparleyer\nparliament\nparliamental\nparliamentarian\nparliamentarianism\nparliamentarily\nparliamentariness\nparliamentarism\nparliamentarization\nparliamentarize\nparliamentary\nparliamenteer\nparliamenteering\nparliamenter\nparling\nparlish\nparlor\nparlorish\nparlormaid\nparlous\nparlously\nparlousness\nparly\nParma\nparma\nparmacety\nparmak\nParmelia\nParmeliaceae\nparmeliaceous\nparmelioid\nParmentiera\nParmesan\nParmese\nparnas\nParnassia\nParnassiaceae\nparnassiaceous\nParnassian\nParnassianism\nParnassiinae\nParnassism\nParnassus\nparnel\nParnellism\nParnellite\nparnorpine\nparoarion\nparoarium\nparoccipital\nparoch\nparochial\nparochialic\nparochialism\nparochialist\nparochiality\nparochialization\nparochialize\nparochially\nparochialness\nparochin\nparochine\nparochiner\nparode\nparodiable\nparodial\nparodic\nparodical\nparodinia\nparodist\nparodistic\nparodistically\nparodize\nparodontitis\nparodos\nparody\nparodyproof\nparoecious\nparoeciously\nparoeciousness\nparoecism\nparoecy\nparoemia\nparoemiac\nparoemiographer\nparoemiography\nparoemiologist\nparoemiology\nparoicous\nparol\nparolable\nparole\nparolee\nparolfactory\nparoli\nparolist\nparomoeon\nparomologetic\nparomologia\nparomology\nparomphalocele\nparomphalocelic\nparonomasia\nparonomasial\nparonomasian\nparonomasiastic\nparonomastical\nparonomastically\nparonychia\nparonychial\nparonychium\nparonym\nparonymic\nparonymization\nparonymize\nparonymous\nparonymy\nparoophoric\nparoophoritis\nparoophoron\nparopsis\nparoptesis\nparoptic\nparorchid\nparorchis\nparorexia\nParosela\nparosmia\nparosmic\nparosteal\nparosteitis\nparosteosis\nparostosis\nparostotic\nParotia\nparotic\nparotid\nparotidean\nparotidectomy\nparotiditis\nparotis\nparotitic\nparotitis\nparotoid\nparous\nparousia\nparousiamania\nparovarian\nparovariotomy\nparovarium\nparoxazine\nparoxysm\nparoxysmal\nparoxysmalist\nparoxysmally\nparoxysmic\nparoxysmist\nparoxytone\nparoxytonic\nparoxytonize\nparpal\nparquet\nparquetage\nparquetry\nparr\nParra\nparrel\nparrhesia\nparrhesiastic\nparriable\nparricidal\nparricidally\nparricide\nparricided\nparricidial\nparricidism\nParridae\nparrier\nparrock\nparrot\nparroter\nparrothood\nparrotism\nparrotize\nparrotlet\nparrotlike\nparrotry\nparrotwise\nparroty\nparry\nparsable\nparse\nparsec\nParsee\nParseeism\nparser\nparsettensite\nParsi\nParsic\nParsiism\nparsimonious\nparsimoniously\nparsimoniousness\nparsimony\nParsism\nparsley\nparsleylike\nparsleywort\nparsnip\nparson\nparsonage\nparsonarchy\nparsondom\nparsoned\nparsonese\nparsoness\nparsonet\nparsonhood\nparsonic\nparsonical\nparsonically\nparsoning\nparsonish\nparsonity\nparsonize\nparsonlike\nparsonly\nparsonolatry\nparsonology\nparsonry\nparsonship\nParsonsia\nparsonsite\nparsony\nPart\npart\npartakable\npartake\npartaker\npartan\npartanfull\npartanhanded\nparted\npartedness\nparter\nparterre\nparterred\npartheniad\nPartheniae\nparthenian\nparthenic\nParthenium\nparthenocarpelly\nparthenocarpic\nparthenocarpical\nparthenocarpically\nparthenocarpous\nparthenocarpy\nParthenocissus\nparthenogenesis\nparthenogenetic\nparthenogenetically\nparthenogenic\nparthenogenitive\nparthenogenous\nparthenogeny\nparthenogonidium\nParthenolatry\nparthenology\nParthenon\nParthenopaeus\nparthenoparous\nParthenope\nParthenopean\nParthenos\nparthenosperm\nparthenospore\nParthian\npartial\npartialism\npartialist\npartialistic\npartiality\npartialize\npartially\npartialness\npartiary\npartible\nparticate\nparticipability\nparticipable\nparticipance\nparticipancy\nparticipant\nparticipantly\nparticipate\nparticipatingly\nparticipation\nparticipative\nparticipatively\nparticipator\nparticipatory\nparticipatress\nparticipial\nparticipiality\nparticipialize\nparticipially\nparticiple\nparticle\nparticled\nparticular\nparticularism\nparticularist\nparticularistic\nparticularistically\nparticularity\nparticularization\nparticularize\nparticularly\nparticularness\nparticulate\npartigen\npartile\npartimembered\npartimen\npartinium\npartisan\npartisanism\npartisanize\npartisanship\npartite\npartition\npartitional\npartitionary\npartitioned\npartitioner\npartitioning\npartitionist\npartitionment\npartitive\npartitively\npartitura\npartiversal\npartivity\npartless\npartlet\npartly\npartner\npartnerless\npartnership\nparto\npartook\npartridge\npartridgeberry\npartridgelike\npartridgewood\npartridging\npartschinite\nparture\nparturiate\nparturience\nparturiency\nparturient\nparturifacient\nparturition\nparturitive\nparty\npartyism\npartyist\npartykin\npartyless\npartymonger\npartyship\nParukutu\nparulis\nparumbilical\nparure\nparuria\nParus\nparvanimity\nparvenu\nparvenudom\nparvenuism\nparvicellular\nparviflorous\nparvifoliate\nparvifolious\nparvipotent\nparvirostrate\nparvis\nparviscient\nparvitude\nparvolin\nparvoline\nparvule\nparyphodrome\npasan\npasang\nPascal\nPasch\nPascha\npaschal\npaschalist\nPaschaltide\npaschite\npascoite\npascuage\npascual\npascuous\npasgarde\npash\npasha\npashadom\npashalik\npashaship\npashm\npashmina\nPashto\npasi\npasigraphic\npasigraphical\npasigraphy\npasilaly\nPasitelean\npasmo\nPaspalum\npasqueflower\npasquil\npasquilant\npasquiler\npasquilic\nPasquin\npasquin\npasquinade\npasquinader\nPasquinian\nPasquino\npass\npassable\npassableness\npassably\npassade\npassado\npassage\npassageable\npassageway\nPassagian\npassalid\nPassalidae\nPassalus\nPassamaquoddy\npassant\npassback\npassbook\nPasse\npasse\npassee\npassegarde\npassement\npassementerie\npassen\npassenger\nPasser\npasser\nPasseres\npasseriform\nPasseriformes\nPasserina\npasserine\npassewa\npassibility\npassible\npassibleness\nPassiflora\nPassifloraceae\npassifloraceous\nPassiflorales\npassimeter\npassing\npassingly\npassingness\npassion\npassional\npassionary\npassionate\npassionately\npassionateness\npassionative\npassioned\npassionflower\npassionful\npassionfully\npassionfulness\nPassionist\npassionist\npassionless\npassionlessly\npassionlessness\npassionlike\npassionometer\npassionproof\nPassiontide\npassionwise\npassionwort\npassir\npassival\npassivate\npassivation\npassive\npassively\npassiveness\npassivism\npassivist\npassivity\npasskey\npassless\npassman\npasso\npassometer\npassout\npassover\npassoverish\npasspenny\npassport\npassportless\npassulate\npassulation\npassus\npassway\npasswoman\npassword\npassworts\npassymeasure\npast\npaste\npasteboard\npasteboardy\npasted\npastedness\npastedown\npastel\npastelist\npaster\npasterer\npastern\npasterned\npasteur\nPasteurella\nPasteurelleae\npasteurellosis\nPasteurian\npasteurism\npasteurization\npasteurize\npasteurizer\npastiche\npasticheur\npastil\npastile\npastille\npastime\npastimer\nPastinaca\npastiness\npasting\npastness\npastophor\npastophorion\npastophorium\npastophorus\npastor\npastorage\npastoral\npastorale\npastoralism\npastoralist\npastorality\npastoralize\npastorally\npastoralness\npastorate\npastoress\npastorhood\npastorium\npastorize\npastorless\npastorlike\npastorling\npastorly\npastorship\npastose\npastosity\npastrami\npastry\npastryman\npasturability\npasturable\npasturage\npastural\npasture\npastureless\npasturer\npasturewise\npasty\npasul\nPat\npat\npata\npataca\npatacao\npataco\npatagial\npatagiate\npatagium\nPatagon\npatagon\nPatagones\nPatagonian\npataka\npatamar\npatao\npatapat\npataque\nPataria\nPatarin\nPatarine\nPatarinism\npatas\npatashte\nPatavian\npatavinity\npatball\npatballer\npatch\npatchable\npatcher\npatchery\npatchily\npatchiness\npatchleaf\npatchless\npatchouli\npatchwise\npatchword\npatchwork\npatchworky\npatchy\npate\npatefaction\npatefy\npatel\npatella\npatellar\npatellaroid\npatellate\nPatellidae\npatellidan\npatelliform\npatelline\npatellofemoral\npatelloid\npatellula\npatellulate\npaten\npatency\npatener\npatent\npatentability\npatentable\npatentably\npatentee\npatently\npatentor\npater\npatera\npatercove\npaterfamiliar\npaterfamiliarly\npaterfamilias\npateriform\npaterissa\npaternal\npaternalism\npaternalist\npaternalistic\npaternalistically\npaternality\npaternalize\npaternally\npaternity\npaternoster\npaternosterer\npatesi\npatesiate\npath\nPathan\npathbreaker\npathed\npathema\npathematic\npathematically\npathematology\npathetic\npathetical\npathetically\npatheticalness\npatheticate\npatheticly\npatheticness\npathetism\npathetist\npathetize\npathfarer\npathfinder\npathfinding\npathic\npathicism\npathless\npathlessness\npathlet\npathoanatomical\npathoanatomy\npathobiological\npathobiologist\npathobiology\npathochemistry\npathodontia\npathogen\npathogene\npathogenesis\npathogenesy\npathogenetic\npathogenic\npathogenicity\npathogenous\npathogeny\npathogerm\npathogermic\npathognomic\npathognomical\npathognomonic\npathognomonical\npathognomy\npathognostic\npathographical\npathography\npathologic\npathological\npathologically\npathologicoanatomic\npathologicoanatomical\npathologicoclinical\npathologicohistological\npathologicopsychological\npathologist\npathology\npatholysis\npatholytic\npathomania\npathometabolism\npathomimesis\npathomimicry\npathoneurosis\npathonomia\npathonomy\npathophobia\npathophoresis\npathophoric\npathophorous\npathoplastic\npathoplastically\npathopoeia\npathopoiesis\npathopoietic\npathopsychology\npathopsychosis\npathoradiography\npathos\npathosocial\nPathrusim\npathway\npathwayed\npathy\npatible\npatibulary\npatibulate\npatience\npatiency\npatient\npatientless\npatiently\npatientness\npatina\npatinate\npatination\npatine\npatined\npatinize\npatinous\npatio\npatisserie\npatly\nPatmian\nPatmos\npatness\npatnidar\npato\npatois\npatola\npatonce\npatria\npatrial\npatriarch\npatriarchal\npatriarchalism\npatriarchally\npatriarchate\npatriarchdom\npatriarched\npatriarchess\npatriarchic\npatriarchical\npatriarchically\npatriarchism\npatriarchist\npatriarchship\npatriarchy\nPatrice\npatrice\nPatricia\nPatrician\npatrician\npatricianhood\npatricianism\npatricianly\npatricianship\npatriciate\npatricidal\npatricide\nPatricio\nPatrick\npatrico\npatrilineal\npatrilineally\npatrilinear\npatriliny\npatrilocal\npatrimonial\npatrimonially\npatrimony\npatrin\nPatriofelis\npatriolatry\npatriot\npatrioteer\npatriotess\npatriotic\npatriotical\npatriotically\npatriotics\npatriotism\npatriotly\npatriotship\nPatripassian\nPatripassianism\nPatripassianist\nPatripassianly\npatrist\npatristic\npatristical\npatristically\npatristicalness\npatristicism\npatristics\npatrix\npatrizate\npatrization\npatrocinium\npatroclinic\npatroclinous\npatrocliny\npatrogenesis\npatrol\npatroller\npatrollotism\npatrolman\npatrologic\npatrological\npatrologist\npatrology\npatron\npatronage\npatronal\npatronate\npatrondom\npatroness\npatronessship\npatronite\npatronizable\npatronization\npatronize\npatronizer\npatronizing\npatronizingly\npatronless\npatronly\npatronomatology\npatronship\npatronym\npatronymic\npatronymically\npatronymy\npatroon\npatroonry\npatroonship\npatruity\nPatsy\npatta\npattable\npatte\npattee\npatten\npattened\npattener\npatter\npatterer\npatterist\npattern\npatternable\npatterned\npatterner\npatterning\npatternize\npatternless\npatternlike\npatternmaker\npatternmaking\npatternwise\npatterny\npattu\nPatty\npatty\npattypan\npatu\npatulent\npatulous\npatulously\npatulousness\nPatuxent\npatwari\nPatwin\npaty\npau\npauciarticulate\npauciarticulated\npaucidentate\npauciflorous\npaucifoliate\npaucifolious\npaucify\npaucijugate\npaucilocular\npauciloquent\npauciloquently\npauciloquy\npaucinervate\npaucipinnate\npauciplicate\npauciradiate\npauciradiated\npaucispiral\npaucispirated\npaucity\npaughty\npaukpan\nPaul\nPaula\npaular\npauldron\nPauliad\nPaulian\nPaulianist\nPauliccian\nPaulicianism\npaulie\npaulin\nPaulina\nPauline\nPaulinia\nPaulinian\nPaulinism\nPaulinist\nPaulinistic\nPaulinistically\nPaulinity\nPaulinize\nPaulinus\nPaulism\nPaulist\nPaulista\nPaulite\npaulopast\npaulopost\npaulospore\nPaulownia\nPaulus\nPaumari\npaunch\npaunched\npaunchful\npaunchily\npaunchiness\npaunchy\npaup\npauper\npauperage\npauperate\npauperdom\npauperess\npauperism\npauperitic\npauperization\npauperize\npauperizer\nPaurometabola\npaurometabolic\npaurometabolism\npaurometabolous\npaurometaboly\npauropod\nPauropoda\npauropodous\npausably\npausal\npausation\npause\npauseful\npausefully\npauseless\npauselessly\npausement\npauser\npausingly\npaussid\nPaussidae\npaut\npauxi\npavage\npavan\npavane\npave\npavement\npavemental\npaver\npavestone\nPavetta\nPavia\npavid\npavidity\npavier\npavilion\npaving\npavior\nPaviotso\npaviour\npavis\npavisade\npavisado\npaviser\npavisor\nPavo\npavonated\npavonazzetto\npavonazzo\nPavoncella\nPavonia\npavonian\npavonine\npavonize\npavy\npaw\npawdite\npawer\npawing\npawk\npawkery\npawkily\npawkiness\npawkrie\npawky\npawl\npawn\npawnable\npawnage\npawnbroker\npawnbrokerage\npawnbrokeress\npawnbrokering\npawnbrokery\npawnbroking\nPawnee\npawnee\npawner\npawnie\npawnor\npawnshop\npawpaw\nPawtucket\npax\npaxilla\npaxillar\npaxillary\npaxillate\npaxilliferous\npaxilliform\nPaxillosa\npaxillose\npaxillus\npaxiuba\npaxwax\npay\npayability\npayable\npayableness\npayably\nPayagua\nPayaguan\npayday\npayed\npayee\npayeny\npayer\npaying\npaymaster\npaymastership\npayment\npaymistress\nPayni\npaynim\npaynimhood\npaynimry\nPaynize\npayoff\npayong\npayor\npayroll\npaysagist\nPazend\npea\npeaberry\npeace\npeaceable\npeaceableness\npeaceably\npeacebreaker\npeacebreaking\npeaceful\npeacefully\npeacefulness\npeaceless\npeacelessness\npeacelike\npeacemaker\npeacemaking\npeaceman\npeacemonger\npeacemongering\npeacetime\npeach\npeachberry\npeachblossom\npeachblow\npeachen\npeacher\npeachery\npeachick\npeachify\npeachiness\npeachlet\npeachlike\npeachwood\npeachwort\npeachy\npeacoat\npeacock\npeacockery\npeacockish\npeacockishly\npeacockishness\npeacockism\npeacocklike\npeacockly\npeacockwise\npeacocky\npeacod\npeafowl\npeag\npeage\npeahen\npeai\npeaiism\npeak\npeaked\npeakedly\npeakedness\npeaker\npeakily\npeakiness\npeaking\npeakish\npeakishly\npeakishness\npeakless\npeaklike\npeakward\npeaky\npeakyish\npeal\npealike\npean\npeanut\npear\npearceite\npearl\npearlberry\npearled\npearler\npearlet\npearlfish\npearlfruit\npearlike\npearlin\npearliness\npearling\npearlish\npearlite\npearlitic\npearlsides\npearlstone\npearlweed\npearlwort\npearly\npearmain\npearmonger\npeart\npearten\npeartly\npeartness\npearwood\npeasant\npeasantess\npeasanthood\npeasantism\npeasantize\npeasantlike\npeasantly\npeasantry\npeasantship\npeasecod\npeaselike\npeasen\npeashooter\npeason\npeastake\npeastaking\npeastick\npeasticking\npeastone\npeasy\npeat\npeatery\npeathouse\npeatman\npeatship\npeatstack\npeatwood\npeaty\npeavey\npeavy\nPeba\npeba\nPeban\npebble\npebbled\npebblehearted\npebblestone\npebbleware\npebbly\npebrine\npebrinous\npecan\npeccability\npeccable\npeccadillo\npeccancy\npeccant\npeccantly\npeccantness\npeccary\npeccation\npeccavi\npech\npecht\npecite\npeck\npecked\npecker\npeckerwood\npecket\npeckful\npeckhamite\npeckiness\npeckish\npeckishly\npeckishness\npeckle\npeckled\npeckly\nPecksniffian\nPecksniffianism\nPecksniffism\npecky\nPecopteris\npecopteroid\nPecora\nPecos\npectase\npectate\npecten\npectic\npectin\nPectinacea\npectinacean\npectinaceous\npectinal\npectinase\npectinate\npectinated\npectinately\npectination\npectinatodenticulate\npectinatofimbricate\npectinatopinnate\npectineal\npectineus\npectinibranch\nPectinibranchia\npectinibranchian\nPectinibranchiata\npectinibranchiate\npectinic\npectinid\nPectinidae\npectiniferous\npectiniform\npectinirostrate\npectinite\npectinogen\npectinoid\npectinose\npectinous\npectizable\npectization\npectize\npectocellulose\npectolite\npectora\npectoral\npectoralgia\npectoralis\npectoralist\npectorally\npectoriloquial\npectoriloquism\npectoriloquous\npectoriloquy\npectosase\npectose\npectosic\npectosinase\npectous\npectunculate\nPectunculus\npectus\npeculate\npeculation\npeculator\npeculiar\npeculiarism\npeculiarity\npeculiarize\npeculiarly\npeculiarness\npeculiarsome\npeculium\npecuniarily\npecuniary\npecuniosity\npecunious\nped\npeda\npedage\npedagog\npedagogal\npedagogic\npedagogical\npedagogically\npedagogics\npedagogism\npedagogist\npedagogue\npedagoguery\npedagoguish\npedagoguism\npedagogy\npedal\npedaler\npedalfer\npedalferic\nPedaliaceae\npedaliaceous\npedalian\npedalier\nPedalion\npedalism\npedalist\npedaliter\npedality\nPedalium\npedanalysis\npedant\npedantesque\npedantess\npedanthood\npedantic\npedantical\npedantically\npedanticalness\npedanticism\npedanticly\npedanticness\npedantism\npedantize\npedantocracy\npedantocrat\npedantocratic\npedantry\npedary\nPedata\npedate\npedated\npedately\npedatifid\npedatiform\npedatilobate\npedatilobed\npedatinerved\npedatipartite\npedatisect\npedatisected\npedatrophia\npedder\npeddle\npeddler\npeddleress\npeddlerism\npeddlery\npeddling\npeddlingly\npedee\npedelion\npederast\npederastic\npederastically\npederasty\npedes\npedesis\npedestal\npedestrial\npedestrially\npedestrian\npedestrianate\npedestrianism\npedestrianize\npedetentous\nPedetes\nPedetidae\nPedetinae\npediadontia\npediadontic\npediadontist\npedialgia\nPediastrum\npediatric\npediatrician\npediatrics\npediatrist\npediatry\npedicab\npedicel\npediceled\npedicellar\npedicellaria\npedicellate\npedicellated\npedicellation\npedicelled\npedicelliform\nPedicellina\npedicellus\npedicle\npedicular\nPedicularia\nPedicularis\npediculate\npediculated\nPediculati\npedicule\nPediculi\npediculicidal\npediculicide\npediculid\nPediculidae\nPediculina\npediculine\npediculofrontal\npediculoid\npediculoparietal\npediculophobia\npediculosis\npediculous\nPediculus\npedicure\npedicurism\npedicurist\npediferous\npediform\npedigerous\npedigraic\npedigree\npedigreeless\npediluvium\nPedimana\npedimanous\npediment\npedimental\npedimented\npedimentum\nPedioecetes\npedion\npedionomite\nPedionomus\npedipalp\npedipalpal\npedipalpate\nPedipalpi\nPedipalpida\npedipalpous\npedipalpus\npedipulate\npedipulation\npedipulator\npedlar\npedlary\npedobaptism\npedobaptist\npedocal\npedocalcic\npedodontia\npedodontic\npedodontist\npedodontology\npedograph\npedological\npedologist\npedologistical\npedologistically\npedology\npedometer\npedometric\npedometrical\npedometrically\npedometrician\npedometrist\npedomorphic\npedomorphism\npedomotive\npedomotor\npedophilia\npedophilic\npedotribe\npedotrophic\npedotrophist\npedotrophy\npedrail\npedregal\npedrero\nPedro\npedro\npedule\npedum\npeduncle\npeduncled\npeduncular\nPedunculata\npedunculate\npedunculated\npedunculation\npedunculus\npee\npeed\npeek\npeekaboo\npeel\npeelable\npeele\npeeled\npeeledness\npeeler\npeelhouse\npeeling\nPeelism\nPeelite\npeelman\npeen\npeenge\npeeoy\npeep\npeeper\npeepeye\npeephole\npeepy\npeer\npeerage\npeerdom\npeeress\npeerhood\npeerie\npeeringly\npeerless\npeerlessly\npeerlessness\npeerling\npeerly\npeership\npeery\npeesash\npeesoreh\npeesweep\npeetweet\npeeve\npeeved\npeevedly\npeevedness\npeever\npeevish\npeevishly\npeevishness\npeewee\nPeg\npeg\npega\npegall\npeganite\nPeganum\nPegasean\nPegasian\nPegasid\npegasid\nPegasidae\npegasoid\nPegasus\npegboard\npegbox\npegged\npegger\npegging\npeggle\nPeggy\npeggy\npegless\npeglet\npeglike\npegman\npegmatite\npegmatitic\npegmatization\npegmatize\npegmatoid\npegmatophyre\npegology\npegomancy\nPeguan\npegwood\nPehlevi\npeho\nPehuenche\npeignoir\npeine\npeirameter\npeirastic\npeirastically\npeisage\npeise\npeiser\nPeitho\npeixere\npejorate\npejoration\npejorationist\npejorative\npejoratively\npejorism\npejorist\npejority\npekan\nPekin\npekin\nPeking\nPekingese\npekoe\npeladic\npelage\npelagial\nPelagian\npelagian\nPelagianism\nPelagianize\nPelagianizer\npelagic\nPelagothuria\npelamyd\npelanos\nPelargi\npelargic\nPelargikon\npelargomorph\nPelargomorphae\npelargomorphic\npelargonate\npelargonic\npelargonidin\npelargonin\npelargonium\nPelasgi\nPelasgian\nPelasgic\nPelasgikon\nPelasgoi\nPele\npelean\npelecan\nPelecani\nPelecanidae\nPelecaniformes\nPelecanoides\nPelecanoidinae\nPelecanus\npelecypod\nPelecypoda\npelecypodous\npelelith\npelerine\nPeleus\nPelew\npelf\nPelias\npelican\npelicanry\npelick\npelicometer\nPelides\nPelidnota\npelike\npeliom\npelioma\npeliosis\npelisse\npelite\npelitic\npell\nPellaea\npellage\npellagra\npellagragenic\npellagrin\npellagrose\npellagrous\npellar\npellard\npellas\npellate\npellation\npeller\npellet\npelleted\npelletierine\npelletlike\npellety\nPellian\npellicle\npellicula\npellicular\npellicularia\npelliculate\npellicule\npellile\npellitory\npellmell\npellock\npellotine\npellucent\npellucid\npellucidity\npellucidly\npellucidness\nPelmanism\nPelmanist\nPelmanize\npelmatic\npelmatogram\nPelmatozoa\npelmatozoan\npelmatozoic\npelmet\nPelobates\npelobatid\nPelobatidae\npelobatoid\nPelodytes\npelodytid\nPelodytidae\npelodytoid\nPelomedusa\npelomedusid\nPelomedusidae\npelomedusoid\nPelomyxa\npelon\nPelopaeus\nPelopid\nPelopidae\nPeloponnesian\nPelops\npeloria\npelorian\npeloriate\npeloric\npelorism\npelorization\npelorize\npelorus\npelota\npelotherapy\npeloton\npelt\npelta\nPeltandra\npeltast\npeltate\npeltated\npeltately\npeltatifid\npeltation\npeltatodigitate\npelter\npelterer\npeltiferous\npeltifolious\npeltiform\nPeltigera\nPeltigeraceae\npeltigerine\npeltigerous\npeltinerved\npelting\npeltingly\npeltless\npeltmonger\nPeltogaster\npeltry\npelu\npeludo\nPelusios\npelveoperitonitis\npelves\nPelvetia\npelvic\npelviform\npelvigraph\npelvigraphy\npelvimeter\npelvimetry\npelviolithotomy\npelvioperitonitis\npelvioplasty\npelvioradiography\npelvioscopy\npelviotomy\npelviperitonitis\npelvirectal\npelvis\npelvisacral\npelvisternal\npelvisternum\npelycogram\npelycography\npelycology\npelycometer\npelycometry\npelycosaur\nPelycosauria\npelycosaurian\npembina\nPembroke\npemican\npemmican\npemmicanization\npemmicanize\npemphigoid\npemphigous\npemphigus\npen\npenacute\nPenaea\nPenaeaceae\npenaeaceous\npenal\npenalist\npenality\npenalizable\npenalization\npenalize\npenally\npenalty\npenance\npenanceless\npenang\npenannular\npenates\npenbard\npencatite\npence\npencel\npenceless\npenchant\npenchute\npencil\npenciled\npenciler\npenciliform\npenciling\npencilled\npenciller\npencillike\npencilling\npencilry\npencilwood\npencraft\npend\npenda\npendant\npendanted\npendanting\npendantlike\npendecagon\npendeloque\npendency\npendent\npendentive\npendently\npendicle\npendicler\npending\npendle\npendom\npendragon\npendragonish\npendragonship\npendulant\npendular\npendulate\npendulation\npendule\npenduline\npendulosity\npendulous\npendulously\npendulousness\npendulum\npendulumlike\nPenelope\nPenelopean\nPenelophon\nPenelopinae\npenelopine\npeneplain\npeneplanation\npeneplane\npeneseismic\npenetrability\npenetrable\npenetrableness\npenetrably\npenetral\npenetralia\npenetralian\npenetrance\npenetrancy\npenetrant\npenetrate\npenetrating\npenetratingly\npenetratingness\npenetration\npenetrative\npenetratively\npenetrativeness\npenetrativity\npenetrator\npenetrology\npenetrometer\npenfieldite\npenfold\npenful\npenghulu\npengo\npenguin\npenguinery\npenhead\npenholder\npenial\npenicillate\npenicillated\npenicillately\npenicillation\npenicilliform\npenicillin\nPenicillium\npenide\npenile\npeninsula\npeninsular\npeninsularism\npeninsularity\npeninsulate\npenintime\npeninvariant\npenis\npenistone\npenitence\npenitencer\npenitent\nPenitentes\npenitential\npenitentially\npenitentiary\npenitentiaryship\npenitently\npenk\npenkeeper\npenknife\npenlike\npenmaker\npenmaking\npenman\npenmanship\npenmaster\npenna\npennaceous\nPennacook\npennae\npennage\nPennales\npennant\nPennaria\nPennariidae\nPennatae\npennate\npennated\npennatifid\npennatilobate\npennatipartite\npennatisect\npennatisected\nPennatula\nPennatulacea\npennatulacean\npennatulaceous\npennatularian\npennatulid\nPennatulidae\npennatuloid\npenneech\npenneeck\npenner\npennet\npenni\npennia\npennied\npenniferous\npenniform\npennigerous\npenniless\npennilessly\npennilessness\npennill\npenninervate\npenninerved\npenning\npenninite\npennipotent\nPennisetum\npenniveined\npennon\npennoned\npennopluma\npennoplume\npennorth\nPennsylvania\nPennsylvanian\nPenny\npenny\npennybird\npennycress\npennyearth\npennyflower\npennyhole\npennyleaf\npennyrot\npennyroyal\npennysiller\npennystone\npennyweight\npennywinkle\npennywort\npennyworth\nPenobscot\npenologic\npenological\npenologist\npenology\npenorcon\npenrack\npenroseite\nPensacola\npenscript\npenseful\npensefulness\npenship\npensile\npensileness\npensility\npension\npensionable\npensionably\npensionary\npensioner\npensionership\npensionless\npensive\npensived\npensively\npensiveness\npenster\npenstick\npenstock\npensum\npensy\npent\npenta\npentabasic\npentabromide\npentacapsular\npentacarbon\npentacarbonyl\npentacarpellary\npentace\npentacetate\npentachenium\npentachloride\npentachord\npentachromic\npentacid\npentacle\npentacoccous\npentacontane\npentacosane\nPentacrinidae\npentacrinite\npentacrinoid\nPentacrinus\npentacron\npentacrostic\npentactinal\npentactine\npentacular\npentacyanic\npentacyclic\npentad\npentadactyl\nPentadactyla\npentadactylate\npentadactyle\npentadactylism\npentadactyloid\npentadecagon\npentadecahydrate\npentadecahydrated\npentadecane\npentadecatoic\npentadecoic\npentadecyl\npentadecylic\npentadelphous\npentadicity\npentadiene\npentadodecahedron\npentadrachm\npentadrachma\npentaerythrite\npentaerythritol\npentafid\npentafluoride\npentagamist\npentaglossal\npentaglot\npentaglottical\npentagon\npentagonal\npentagonally\npentagonohedron\npentagonoid\npentagram\npentagrammatic\npentagyn\nPentagynia\npentagynian\npentagynous\npentahalide\npentahedral\npentahedrical\npentahedroid\npentahedron\npentahedrous\npentahexahedral\npentahexahedron\npentahydrate\npentahydrated\npentahydric\npentahydroxy\npentail\npentaiodide\npentalobate\npentalogue\npentalogy\npentalpha\nPentamera\npentameral\npentameran\npentamerid\nPentameridae\npentamerism\npentameroid\npentamerous\nPentamerus\npentameter\npentamethylene\npentamethylenediamine\npentametrist\npentametrize\npentander\nPentandria\npentandrian\npentandrous\npentane\npentanedione\npentangle\npentangular\npentanitrate\npentanoic\npentanolide\npentanone\npentapetalous\nPentaphylacaceae\npentaphylacaceous\nPentaphylax\npentaphyllous\npentaploid\npentaploidic\npentaploidy\npentapody\npentapolis\npentapolitan\npentapterous\npentaptote\npentaptych\npentaquine\npentarch\npentarchical\npentarchy\npentasepalous\npentasilicate\npentaspermous\npentaspheric\npentaspherical\npentastich\npentastichous\npentastichy\npentastome\nPentastomida\npentastomoid\npentastomous\nPentastomum\npentastyle\npentastylos\npentasulphide\npentasyllabic\npentasyllabism\npentasyllable\nPentateuch\nPentateuchal\npentateuchal\npentathionate\npentathionic\npentathlete\npentathlon\npentathlos\npentatomic\npentatomid\nPentatomidae\nPentatomoidea\npentatone\npentatonic\npentatriacontane\npentavalence\npentavalency\npentavalent\npenteconter\npentecontoglossal\nPentecost\nPentecostal\npentecostal\npentecostalism\npentecostalist\npentecostarion\npentecoster\npentecostys\nPentelic\nPentelican\npentene\npenteteric\npenthemimer\npenthemimeral\npenthemimeris\nPenthestes\npenthiophen\npenthiophene\nPenthoraceae\nPenthorum\npenthouse\npenthouselike\npenthrit\npenthrite\npentimento\npentine\npentiodide\npentit\npentite\npentitol\npentlandite\npentobarbital\npentode\npentoic\npentol\npentosan\npentosane\npentose\npentoside\npentosuria\npentoxide\npentremital\npentremite\nPentremites\nPentremitidae\npentrit\npentrite\npentrough\nPentstemon\npentstock\npenttail\npentyl\npentylene\npentylic\npentylidene\npentyne\nPentzia\npenuchi\npenult\npenultima\npenultimate\npenultimatum\npenumbra\npenumbrae\npenumbral\npenumbrous\npenurious\npenuriously\npenuriousness\npenury\nPenutian\npenwiper\npenwoman\npenwomanship\npenworker\npenwright\npeon\npeonage\npeonism\npeony\npeople\npeopledom\npeoplehood\npeopleize\npeopleless\npeopler\npeoplet\npeoplish\nPeoria\nPeorian\npeotomy\npep\npeperine\npeperino\nPeperomia\npepful\nPephredo\npepinella\npepino\npeplos\npeplosed\npeplum\npeplus\npepo\npeponida\npeponium\npepper\npepperbox\npeppercorn\npeppercornish\npeppercorny\npepperer\npeppergrass\npepperidge\npepperily\npepperiness\npepperish\npepperishly\npeppermint\npepperoni\npepperproof\npepperroot\npepperweed\npepperwood\npepperwort\npeppery\npeppily\npeppin\npeppiness\npeppy\npepsin\npepsinate\npepsinhydrochloric\npepsiniferous\npepsinogen\npepsinogenic\npepsinogenous\npepsis\npeptic\npeptical\npepticity\npeptidase\npeptide\npeptizable\npeptization\npeptize\npeptizer\npeptogaster\npeptogenic\npeptogenous\npeptogeny\npeptohydrochloric\npeptolysis\npeptolytic\npeptonaemia\npeptonate\npeptone\npeptonemia\npeptonic\npeptonization\npeptonize\npeptonizer\npeptonoid\npeptonuria\npeptotoxine\nPepysian\nPequot\nPer\nper\nPeracarida\nperacephalus\nperacetate\nperacetic\nperacid\nperacidite\nperact\nperacute\nperadventure\nperagrate\nperagration\nPerakim\nperamble\nperambulant\nperambulate\nperambulation\nperambulator\nperambulatory\nPerameles\nPeramelidae\nperameline\nperameloid\nPeramium\nPeratae\nPerates\nperbend\nperborate\nperborax\nperbromide\nPerca\npercale\npercaline\npercarbide\npercarbonate\npercarbonic\nperceivability\nperceivable\nperceivableness\nperceivably\nperceivance\nperceivancy\nperceive\nperceivedly\nperceivedness\nperceiver\nperceiving\nperceivingness\npercent\npercentable\npercentably\npercentage\npercentaged\npercental\npercentile\npercentual\npercept\nperceptibility\nperceptible\nperceptibleness\nperceptibly\nperception\nperceptional\nperceptionalism\nperceptionism\nperceptive\nperceptively\nperceptiveness\nperceptivity\nperceptual\nperceptually\nPercesoces\npercesocine\nPerceval\nperch\npercha\nperchable\nperchance\npercher\nPercheron\nperchlorate\nperchlorethane\nperchlorethylene\nperchloric\nperchloride\nperchlorinate\nperchlorination\nperchloroethane\nperchloroethylene\nperchromate\nperchromic\npercid\nPercidae\nperciform\nPerciformes\npercipience\npercipiency\npercipient\nPercival\nperclose\npercnosome\npercoct\npercoid\nPercoidea\npercoidean\npercolable\npercolate\npercolation\npercolative\npercolator\npercomorph\nPercomorphi\npercomorphous\npercompound\npercontation\npercontatorial\npercribrate\npercribration\npercrystallization\nperculsion\nperculsive\npercur\npercurration\npercurrent\npercursory\npercuss\npercussion\npercussional\npercussioner\npercussionist\npercussionize\npercussive\npercussively\npercussiveness\npercussor\npercutaneous\npercutaneously\npercutient\nPercy\npercylite\nPerdicinae\nperdicine\nperdition\nperditionable\nPerdix\nperdricide\nperdu\nperduellion\nperdurability\nperdurable\nperdurableness\nperdurably\nperdurance\nperdurant\nperdure\nperduring\nperduringly\nPerean\nperegrin\nperegrina\nperegrinate\nperegrination\nperegrinator\nperegrinatory\nperegrine\nperegrinity\nperegrinoid\npereion\npereiopod\npereira\npereirine\nperemptorily\nperemptoriness\nperemptory\nperendinant\nperendinate\nperendination\nperendure\nperennate\nperennation\nperennial\nperenniality\nperennialize\nperennially\nperennibranch\nPerennibranchiata\nperennibranchiate\nperequitate\nperes\nPereskia\nperezone\nperfect\nperfectation\nperfected\nperfectedly\nperfecter\nperfecti\nperfectibilian\nperfectibilism\nperfectibilist\nperfectibilitarian\nperfectibility\nperfectible\nperfecting\nperfection\nperfectionate\nperfectionation\nperfectionator\nperfectioner\nperfectionism\nperfectionist\nperfectionistic\nperfectionize\nperfectionizement\nperfectionizer\nperfectionment\nperfectism\nperfectist\nperfective\nperfectively\nperfectiveness\nperfectivity\nperfectivize\nperfectly\nperfectness\nperfecto\nperfector\nperfectuation\nperfervent\nperfervid\nperfervidity\nperfervidly\nperfervidness\nperfervor\nperfervour\nperfidious\nperfidiously\nperfidiousness\nperfidy\nperfilograph\nperflate\nperflation\nperfluent\nperfoliate\nperfoliation\nperforable\nperforant\nPerforata\nperforate\nperforated\nperforation\nperforationproof\nperforative\nperforator\nperforatorium\nperforatory\nperforce\nperforcedly\nperform\nperformable\nperformance\nperformant\nperformative\nperformer\nperfrication\nperfumatory\nperfume\nperfumed\nperfumeless\nperfumer\nperfumeress\nperfumery\nperfumy\nperfunctionary\nperfunctorily\nperfunctoriness\nperfunctorious\nperfunctoriously\nperfunctorize\nperfunctory\nperfuncturate\nperfusate\nperfuse\nperfusion\nperfusive\nPergamene\npergameneous\nPergamenian\npergamentaceous\nPergamic\npergamyn\npergola\nperhalide\nperhalogen\nperhaps\nperhazard\nperhorresce\nperhydroanthracene\nperhydrogenate\nperhydrogenation\nperhydrogenize\nperi\nperiacinal\nperiacinous\nperiactus\nperiadenitis\nperiamygdalitis\nperianal\nperiangiocholitis\nperiangioma\nperiangitis\nperianth\nperianthial\nperianthium\nperiaortic\nperiaortitis\nperiapical\nperiappendicitis\nperiappendicular\nperiapt\nPeriarctic\nperiareum\nperiarterial\nperiarteritis\nperiarthric\nperiarthritis\nperiarticular\nperiaster\nperiastral\nperiastron\nperiastrum\nperiatrial\nperiauricular\nperiaxial\nperiaxillary\nperiaxonal\nperiblast\nperiblastic\nperiblastula\nperiblem\nperibolos\nperibolus\nperibranchial\nperibronchial\nperibronchiolar\nperibronchiolitis\nperibronchitis\nperibulbar\nperibursal\npericaecal\npericaecitis\npericanalicular\npericapsular\npericardia\npericardiac\npericardiacophrenic\npericardial\npericardicentesis\npericardiectomy\npericardiocentesis\npericardiolysis\npericardiomediastinitis\npericardiophrenic\npericardiopleural\npericardiorrhaphy\npericardiosymphysis\npericardiotomy\npericarditic\npericarditis\npericardium\npericardotomy\npericarp\npericarpial\npericarpic\npericarpium\npericarpoidal\npericecal\npericecitis\npericellular\npericemental\npericementitis\npericementoclasia\npericementum\npericenter\npericentral\npericentric\npericephalic\npericerebral\nperichaete\nperichaetial\nperichaetium\nperichete\npericholangitis\npericholecystitis\nperichondral\nperichondrial\nperichondritis\nperichondrium\nperichord\nperichordal\nperichoresis\nperichorioidal\nperichoroidal\nperichylous\npericladium\npericlase\npericlasia\npericlasite\npericlaustral\nPericlean\nPericles\npericlinal\npericlinally\npericline\npericlinium\npericlitate\npericlitation\npericolitis\npericolpitis\npericonchal\npericonchitis\npericopal\npericope\npericopic\npericorneal\npericowperitis\npericoxitis\npericranial\npericranitis\npericranium\npericristate\nPericu\npericulant\npericycle\npericycloid\npericyclone\npericyclonic\npericystic\npericystitis\npericystium\npericytial\nperidendritic\nperidental\nperidentium\nperidentoclasia\nperiderm\nperidermal\nperidermic\nPeridermium\nperidesm\nperidesmic\nperidesmitis\nperidesmium\nperidial\nperidiastole\nperidiastolic\nperididymis\nperididymitis\nperidiiform\nPeridineae\nPeridiniaceae\nperidiniaceous\nperidinial\nPeridiniales\nperidinian\nperidinid\nPeridinidae\nPeridinieae\nPeridiniidae\nPeridinium\nperidiole\nperidiolum\nperidium\nperidot\nperidotic\nperidotite\nperidotitic\nperiductal\nperiegesis\nperiegetic\nperielesis\nperiencephalitis\nperienteric\nperienteritis\nperienteron\nperiependymal\nperiesophageal\nperiesophagitis\nperifistular\nperifoliary\nperifollicular\nperifolliculitis\nperigangliitis\nperiganglionic\nperigastric\nperigastritis\nperigastrula\nperigastrular\nperigastrulation\nperigeal\nperigee\nperigemmal\nperigenesis\nperigenital\nperigeum\nperiglandular\nperigloea\nperiglottic\nperiglottis\nperignathic\nperigon\nperigonadial\nperigonal\nperigone\nperigonial\nperigonium\nperigraph\nperigraphic\nperigynial\nperigynium\nperigynous\nperigyny\nperihelial\nperihelian\nperihelion\nperihelium\nperihepatic\nperihepatitis\nperihermenial\nperihernial\nperihysteric\nperijejunitis\nperijove\nperikaryon\nperikronion\nperil\nperilabyrinth\nperilabyrinthitis\nperilaryngeal\nperilaryngitis\nperilenticular\nperiligamentous\nPerilla\nperilless\nperilobar\nperilous\nperilously\nperilousness\nperilsome\nperilymph\nperilymphangial\nperilymphangitis\nperilymphatic\nperimartium\nperimastitis\nperimedullary\nperimeningitis\nperimeter\nperimeterless\nperimetral\nperimetric\nperimetrical\nperimetrically\nperimetritic\nperimetritis\nperimetrium\nperimetry\nperimorph\nperimorphic\nperimorphism\nperimorphous\nperimyelitis\nperimysial\nperimysium\nperine\nperineal\nperineocele\nperineoplastic\nperineoplasty\nperineorrhaphy\nperineoscrotal\nperineostomy\nperineosynthesis\nperineotomy\nperineovaginal\nperineovulvar\nperinephral\nperinephrial\nperinephric\nperinephritic\nperinephritis\nperinephrium\nperineptunium\nperineum\nperineural\nperineurial\nperineuritis\nperineurium\nperinium\nperinuclear\nperiocular\nperiod\nperiodate\nperiodic\nperiodical\nperiodicalism\nperiodicalist\nperiodicalize\nperiodically\nperiodicalness\nperiodicity\nperiodide\nperiodize\nperiodogram\nperiodograph\nperiodology\nperiodontal\nperiodontia\nperiodontic\nperiodontist\nperiodontitis\nperiodontium\nperiodontoclasia\nperiodontologist\nperiodontology\nperiodontum\nperiodoscope\nperioeci\nperioecians\nperioecic\nperioecid\nperioecus\nperioesophageal\nperioikoi\nperiomphalic\nperionychia\nperionychium\nperionyx\nperionyxis\nperioophoritis\nperiophthalmic\nperiophthalmitis\nperiople\nperioplic\nperioptic\nperioptometry\nperioral\nperiorbit\nperiorbita\nperiorbital\nperiorchitis\nperiost\nperiostea\nperiosteal\nperiosteitis\nperiosteoalveolar\nperiosteoma\nperiosteomedullitis\nperiosteomyelitis\nperiosteophyte\nperiosteorrhaphy\nperiosteotome\nperiosteotomy\nperiosteous\nperiosteum\nperiostitic\nperiostitis\nperiostoma\nperiostosis\nperiostotomy\nperiostracal\nperiostracum\nperiotic\nperiovular\nperipachymeningitis\nperipancreatic\nperipancreatitis\nperipapillary\nPeripatetic\nperipatetic\nperipatetical\nperipatetically\nperipateticate\nPeripateticism\nPeripatidae\nPeripatidea\nperipatize\nperipatoid\nPeripatopsidae\nPeripatopsis\nPeripatus\nperipenial\nperipericarditis\nperipetalous\nperipetasma\nperipeteia\nperipetia\nperipety\nperiphacitis\nperipharyngeal\nperipherad\nperipheral\nperipherally\nperipherial\nperipheric\nperipherical\nperipherically\nperipherocentral\nperipheroceptor\nperipheromittor\nperipheroneural\nperipherophose\nperiphery\nperiphlebitic\nperiphlebitis\nperiphractic\nperiphrase\nperiphrases\nperiphrasis\nperiphrastic\nperiphrastical\nperiphrastically\nperiphraxy\nperiphyllum\nperiphyse\nperiphysis\nPeriplaneta\nperiplasm\nperiplast\nperiplastic\nperiplegmatic\nperipleural\nperipleuritis\nPeriploca\nperiplus\nperipneumonia\nperipneumonic\nperipneumony\nperipneustic\nperipolar\nperipolygonal\nperiportal\nperiproct\nperiproctal\nperiproctitis\nperiproctous\nperiprostatic\nperiprostatitis\nperipteral\nperipterous\nperiptery\nperipylephlebitis\nperipyloric\nperique\nperirectal\nperirectitis\nperirenal\nperisalpingitis\nperisarc\nperisarcal\nperisarcous\nperisaturnium\nperiscian\nperiscians\nperiscii\nperisclerotic\nperiscopal\nperiscope\nperiscopic\nperiscopical\nperiscopism\nperish\nperishability\nperishable\nperishableness\nperishably\nperished\nperishing\nperishingly\nperishless\nperishment\nperisigmoiditis\nperisinuitis\nperisinuous\nperisinusitis\nperisoma\nperisomal\nperisomatic\nperisome\nperisomial\nperisperm\nperispermal\nperispermatitis\nperispermic\nperisphere\nperispheric\nperispherical\nperisphinctean\nPerisphinctes\nPerisphinctidae\nperisphinctoid\nperisplanchnic\nperisplanchnitis\nperisplenetic\nperisplenic\nperisplenitis\nperispome\nperispomenon\nperispondylic\nperispondylitis\nperispore\nPerisporiaceae\nperisporiaceous\nPerisporiales\nperissad\nperissodactyl\nPerissodactyla\nperissodactylate\nperissodactyle\nperissodactylic\nperissodactylism\nperissodactylous\nperissologic\nperissological\nperissology\nperissosyllabic\nperistalith\nperistalsis\nperistaltic\nperistaltically\nperistaphyline\nperistaphylitis\nperistele\nperisterite\nperisteromorph\nPeristeromorphae\nperisteromorphic\nperisteromorphous\nperisteronic\nperisterophily\nperisteropod\nperisteropodan\nperisteropode\nPeristeropodes\nperisteropodous\nperistethium\nperistole\nperistoma\nperistomal\nperistomatic\nperistome\nperistomial\nperistomium\nperistrephic\nperistrephical\nperistrumitis\nperistrumous\nperistylar\nperistyle\nperistylium\nperistylos\nperistylum\nperisynovial\nperisystole\nperisystolic\nperit\nperite\nperitectic\nperitendineum\nperitenon\nperithece\nperithecial\nperithecium\nperithelial\nperithelioma\nperithelium\nperithoracic\nperithyreoiditis\nperithyroiditis\nperitomize\nperitomous\nperitomy\nperitoneal\nperitonealgia\nperitoneally\nperitoneocentesis\nperitoneoclysis\nperitoneomuscular\nperitoneopathy\nperitoneopericardial\nperitoneopexy\nperitoneoplasty\nperitoneoscope\nperitoneoscopy\nperitoneotomy\nperitoneum\nperitonism\nperitonital\nperitonitic\nperitonitis\nperitonsillar\nperitonsillitis\nperitracheal\nperitrema\nperitrematous\nperitreme\nperitrich\nPeritricha\nperitrichan\nperitrichic\nperitrichous\nperitrichously\nperitroch\nperitrochal\nperitrochanteric\nperitrochium\nperitrochoid\nperitropal\nperitrophic\nperitropous\nperityphlic\nperityphlitic\nperityphlitis\nperiumbilical\nperiungual\nperiuranium\nperiureteric\nperiureteritis\nperiurethral\nperiurethritis\nperiuterine\nperiuvular\nperivaginal\nperivaginitis\nperivascular\nperivasculitis\nperivenous\nperivertebral\nperivesical\nperivisceral\nperivisceritis\nperivitellin\nperivitelline\nperiwig\nperiwigpated\nperiwinkle\nperiwinkled\nperiwinkler\nperizonium\nperjink\nperjinkety\nperjinkities\nperjinkly\nperjure\nperjured\nperjuredly\nperjuredness\nperjurer\nperjuress\nperjurious\nperjuriously\nperjuriousness\nperjurous\nperjury\nperjurymonger\nperjurymongering\nperk\nperkily\nPerkin\nperkin\nperkiness\nperking\nperkingly\nperkish\nperknite\nperky\nPerla\nperlaceous\nPerlaria\nperle\nperlection\nperlid\nPerlidae\nperligenous\nperlingual\nperlingually\nperlite\nperlitic\nperloir\nperlustrate\nperlustration\nperlustrator\nperm\npermafrost\nPermalloy\npermalloy\npermanence\npermanency\npermanent\npermanently\npermanentness\npermanganate\npermanganic\npermansive\npermeability\npermeable\npermeableness\npermeably\npermeameter\npermeance\npermeant\npermeate\npermeation\npermeative\npermeator\nPermiak\nPermian\npermillage\npermirific\npermissibility\npermissible\npermissibleness\npermissibly\npermission\npermissioned\npermissive\npermissively\npermissiveness\npermissory\npermit\npermittable\npermitted\npermittedly\npermittee\npermitter\npermittivity\npermixture\nPermocarboniferous\npermonosulphuric\npermoralize\npermutability\npermutable\npermutableness\npermutably\npermutate\npermutation\npermutational\npermutationist\npermutator\npermutatorial\npermutatory\npermute\npermuter\npern\npernancy\npernasal\npernavigate\nPernettia\npernicious\nperniciously\nperniciousness\npernicketiness\npernickety\npernine\nPernis\npernitrate\npernitric\npernoctation\npernor\npernyi\nperoba\nperobrachius\nperocephalus\nperochirus\nperodactylus\nPerodipus\nPerognathinae\nPerognathus\nPeromedusae\nPeromela\nperomelous\nperomelus\nPeromyscus\nperonate\nperoneal\nperoneocalcaneal\nperoneotarsal\nperoneotibial\nperonial\nperonium\nPeronospora\nPeronosporaceae\nperonosporaceous\nPeronosporales\nperopod\nPeropoda\nperopodous\nperopus\nperoral\nperorally\nperorate\nperoration\nperorational\nperorative\nperorator\nperoratorical\nperoratorically\nperoratory\nperosis\nperosmate\nperosmic\nperosomus\nperotic\nperovskite\nperoxidase\nperoxidate\nperoxidation\nperoxide\nperoxidic\nperoxidize\nperoxidizement\nperoxy\nperoxyl\nperozonid\nperozonide\nperpend\nperpendicular\nperpendicularity\nperpendicularly\nperpera\nperperfect\nperpetrable\nperpetrate\nperpetration\nperpetrator\nperpetratress\nperpetratrix\nperpetuable\nperpetual\nperpetualism\nperpetualist\nperpetuality\nperpetually\nperpetualness\nperpetuana\nperpetuance\nperpetuant\nperpetuate\nperpetuation\nperpetuator\nperpetuity\nperplantar\nperplex\nperplexable\nperplexed\nperplexedly\nperplexedness\nperplexer\nperplexing\nperplexingly\nperplexity\nperplexment\nperplication\nperquadrat\nperquest\nperquisite\nperquisition\nperquisitor\nperradial\nperradially\nperradiate\nperradius\nperridiculous\nperrier\nPerrinist\nperron\nperruche\nperrukery\nperruthenate\nperruthenic\nPerry\nperry\nperryman\nPersae\npersalt\nperscent\nperscribe\nperscrutate\nperscrutation\nperscrutator\nperse\nPersea\npersecute\npersecutee\npersecuting\npersecutingly\npersecution\npersecutional\npersecutive\npersecutiveness\npersecutor\npersecutory\npersecutress\npersecutrix\nPerseid\nperseite\nperseitol\nperseity\npersentiscency\nPersephassa\nPersephone\nPersepolitan\nperseverance\nperseverant\nperseverate\nperseveration\npersevere\npersevering\nperseveringly\nPersian\nPersianist\nPersianization\nPersianize\nPersic\nPersicaria\npersicary\nPersicize\npersico\npersicot\npersienne\npersiennes\npersiflage\npersiflate\npersilicic\npersimmon\nPersis\npersis\nPersism\npersist\npersistence\npersistency\npersistent\npersistently\npersister\npersisting\npersistingly\npersistive\npersistively\npersistiveness\npersnickety\nperson\npersona\npersonable\npersonableness\npersonably\npersonage\npersonal\npersonalia\npersonalism\npersonalist\npersonalistic\npersonality\npersonalization\npersonalize\npersonally\npersonalness\npersonalty\npersonate\npersonately\npersonating\npersonation\npersonative\npersonator\npersoned\npersoneity\npersonifiable\npersonifiant\npersonification\npersonificative\npersonificator\npersonifier\npersonify\npersonization\npersonize\npersonnel\npersonship\nperspection\nperspective\nperspectived\nperspectiveless\nperspectively\nperspectivity\nperspectograph\nperspectometer\nperspicacious\nperspicaciously\nperspicaciousness\nperspicacity\nperspicuity\nperspicuous\nperspicuously\nperspicuousness\nperspirability\nperspirable\nperspirant\nperspirate\nperspiration\nperspirative\nperspiratory\nperspire\nperspiringly\nperspiry\nperstringe\nperstringement\npersuadability\npersuadable\npersuadableness\npersuadably\npersuade\npersuaded\npersuadedly\npersuadedness\npersuader\npersuadingly\npersuasibility\npersuasible\npersuasibleness\npersuasibly\npersuasion\npersuasive\npersuasively\npersuasiveness\npersuasory\npersulphate\npersulphide\npersulphocyanate\npersulphocyanic\npersulphuric\npersymmetric\npersymmetrical\npert\npertain\npertaining\npertainment\nperten\nperthiocyanate\nperthiocyanic\nperthiotophyre\nperthite\nperthitic\nperthitically\nperthosite\npertinacious\npertinaciously\npertinaciousness\npertinacity\npertinence\npertinency\npertinent\npertinently\npertinentness\npertish\npertly\npertness\nperturb\nperturbability\nperturbable\nperturbance\nperturbancy\nperturbant\nperturbate\nperturbation\nperturbational\nperturbatious\nperturbative\nperturbator\nperturbatory\nperturbatress\nperturbatrix\nperturbed\nperturbedly\nperturbedness\nperturber\nperturbing\nperturbingly\nperturbment\nPertusaria\nPertusariaceae\npertuse\npertused\npertusion\npertussal\npertussis\nperty\nPeru\nPerugian\nPeruginesque\nperuke\nperukeless\nperukier\nperukiership\nperula\nPerularia\nperulate\nperule\nPerun\nperusable\nperusal\nperuse\nperuser\nPeruvian\nPeruvianize\npervade\npervadence\npervader\npervading\npervadingly\npervadingness\npervagate\npervagation\npervalvar\npervasion\npervasive\npervasively\npervasiveness\nperverse\nperversely\nperverseness\nperversion\nperversity\nperversive\npervert\nperverted\npervertedly\npervertedness\nperverter\npervertibility\npervertible\npervertibly\npervertive\nperviability\nperviable\npervicacious\npervicaciously\npervicaciousness\npervicacity\npervigilium\npervious\nperviously\nperviousness\npervulgate\npervulgation\nperwitsky\npes\npesa\nPesach\npesade\npesage\nPesah\npeseta\npeshkar\npeshkash\npeshwa\npeshwaship\npeskily\npeskiness\npesky\npeso\npess\npessary\npessimal\npessimism\npessimist\npessimistic\npessimistically\npessimize\npessimum\npessomancy\npessoner\npessular\npessulus\npest\nPestalozzian\nPestalozzianism\npeste\npester\npesterer\npesteringly\npesterment\npesterous\npestersome\npestful\npesthole\npesthouse\npesticidal\npesticide\npestiduct\npestiferous\npestiferously\npestiferousness\npestifugous\npestify\npestilence\npestilenceweed\npestilencewort\npestilent\npestilential\npestilentially\npestilentialness\npestilently\npestle\npestological\npestologist\npestology\npestproof\npet\npetal\npetalage\npetaled\nPetalia\npetaliferous\npetaliform\nPetaliidae\npetaline\npetalism\npetalite\npetalled\npetalless\npetallike\npetalocerous\npetalodic\npetalodont\npetalodontid\nPetalodontidae\npetalodontoid\nPetalodus\npetalody\npetaloid\npetaloidal\npetaloideous\npetalomania\npetalon\nPetalostemon\npetalous\npetalwise\npetaly\npetard\npetardeer\npetardier\npetary\nPetasites\npetasos\npetasus\npetaurine\npetaurist\nPetaurista\nPetauristidae\nPetauroides\nPetaurus\npetchary\npetcock\nPete\npete\npeteca\npetechiae\npetechial\npetechiate\npeteman\nPeter\npeter\nPeterkin\nPeterloo\npeterman\npeternet\npetersham\npeterwort\npetful\npetiolar\npetiolary\nPetiolata\npetiolate\npetiolated\npetiole\npetioled\nPetioliventres\npetiolular\npetiolulate\npetiolule\npetiolus\npetit\npetite\npetiteness\npetitgrain\npetition\npetitionable\npetitional\npetitionarily\npetitionary\npetitionee\npetitioner\npetitionist\npetitionproof\npetitor\npetitory\nPetiveria\nPetiveriaceae\npetkin\npetling\npeto\nPetr\nPetrarchal\nPetrarchan\nPetrarchesque\nPetrarchian\nPetrarchianism\nPetrarchism\nPetrarchist\nPetrarchistic\nPetrarchistical\nPetrarchize\npetrary\npetre\nPetrea\npetrean\npetreity\npetrel\npetrescence\npetrescent\nPetricola\nPetricolidae\npetricolous\npetrie\npetrifaction\npetrifactive\npetrifiable\npetrific\npetrificant\npetrificate\npetrification\npetrified\npetrifier\npetrify\nPetrine\nPetrinism\nPetrinist\nPetrinize\npetrissage\nPetrobium\nPetrobrusian\npetrochemical\npetrochemistry\nPetrogale\npetrogenesis\npetrogenic\npetrogeny\npetroglyph\npetroglyphic\npetroglyphy\npetrograph\npetrographer\npetrographic\npetrographical\npetrographically\npetrography\npetrohyoid\npetrol\npetrolage\npetrolatum\npetrolean\npetrolene\npetroleous\npetroleum\npetrolic\npetroliferous\npetrolific\npetrolist\npetrolithic\npetrolization\npetrolize\npetrologic\npetrological\npetrologically\npetromastoid\nPetromyzon\nPetromyzonidae\npetromyzont\nPetromyzontes\nPetromyzontidae\npetromyzontoid\npetronel\npetronella\npetropharyngeal\npetrophilous\npetrosa\npetrosal\nPetroselinum\npetrosilex\npetrosiliceous\npetrosilicious\npetrosphenoid\npetrosphenoidal\npetrosphere\npetrosquamosal\npetrosquamous\npetrostearin\npetrostearine\npetrosum\npetrotympanic\npetrous\npetroxolin\npettable\npetted\npettedly\npettedness\npetter\npettichaps\npetticoat\npetticoated\npetticoaterie\npetticoatery\npetticoatism\npetticoatless\npetticoaty\npettifog\npettifogger\npettifoggery\npettifogging\npettifogulize\npettifogulizer\npettily\npettiness\npettingly\npettish\npettitoes\npettle\npetty\npettyfog\npetulance\npetulancy\npetulant\npetulantly\npetune\nPetunia\npetuntse\npetwood\npetzite\nPeucedanum\nPeucetii\npeucites\npeuhl\nPeul\nPeumus\nPeutingerian\npew\npewage\npewdom\npewee\npewfellow\npewful\npewholder\npewing\npewit\npewless\npewmate\npewter\npewterer\npewterwort\npewtery\npewy\nPeyerian\npeyote\npeyotl\npeyton\npeytrel\npezantic\nPeziza\nPezizaceae\npezizaceous\npezizaeform\nPezizales\npeziziform\npezizoid\npezograph\nPezophaps\nPfaffian\npfeffernuss\nPfeifferella\npfennig\npfui\npfund\nPhaca\nPhacelia\nphacelite\nphacella\nPhacidiaceae\nPhacidiales\nphacitis\nphacoanaphylaxis\nphacocele\nphacochere\nphacocherine\nphacochoere\nphacochoerid\nphacochoerine\nphacochoeroid\nPhacochoerus\nphacocyst\nphacocystectomy\nphacocystitis\nphacoglaucoma\nphacoid\nphacoidal\nphacoidoscope\nphacolite\nphacolith\nphacolysis\nphacomalacia\nphacometer\nphacopid\nPhacopidae\nPhacops\nphacosclerosis\nphacoscope\nphacotherapy\nPhaeacian\nPhaedo\nphaeism\nphaenantherous\nphaenanthery\nphaenogam\nPhaenogamia\nphaenogamian\nphaenogamic\nphaenogamous\nphaenogenesis\nphaenogenetic\nphaenological\nphaenology\nphaenomenal\nphaenomenism\nphaenomenon\nphaenozygous\nphaeochrous\nPhaeodaria\nphaeodarian\nphaeophore\nPhaeophyceae\nphaeophycean\nphaeophyceous\nphaeophyll\nPhaeophyta\nphaeophytin\nphaeoplast\nPhaeosporales\nphaeospore\nPhaeosporeae\nphaeosporous\nPhaet\nPhaethon\nPhaethonic\nPhaethontes\nPhaethontic\nPhaethontidae\nPhaethusa\nphaeton\nphage\nphagedena\nphagedenic\nphagedenical\nphagedenous\nPhagineae\nphagocytable\nphagocytal\nphagocyte\nphagocyter\nphagocytic\nphagocytism\nphagocytize\nphagocytoblast\nphagocytolysis\nphagocytolytic\nphagocytose\nphagocytosis\nphagodynamometer\nphagolysis\nphagolytic\nphagomania\nphainolion\nPhainopepla\nPhajus\nPhalacrocoracidae\nphalacrocoracine\nPhalacrocorax\nphalacrosis\nPhalaecean\nPhalaecian\nPhalaenae\nPhalaenidae\nphalaenopsid\nPhalaenopsis\nphalangal\nphalange\nphalangeal\nphalangean\nphalanger\nPhalangeridae\nPhalangerinae\nphalangerine\nphalanges\nphalangette\nphalangian\nphalangic\nphalangid\nPhalangida\nphalangidan\nPhalangidea\nphalangidean\nPhalangides\nphalangiform\nPhalangigrada\nphalangigrade\nphalangigrady\nphalangiid\nPhalangiidae\nphalangist\nPhalangista\nPhalangistidae\nphalangistine\nphalangite\nphalangitic\nphalangitis\nPhalangium\nphalangologist\nphalangology\nphalansterial\nphalansterian\nphalansterianism\nphalansteric\nphalansterism\nphalansterist\nphalanstery\nphalanx\nphalanxed\nphalarica\nPhalaris\nPhalarism\nphalarope\nPhalaropodidae\nphalera\nphalerate\nphalerated\nPhaleucian\nPhallaceae\nphallaceous\nPhallales\nphallalgia\nphallaneurysm\nphallephoric\nphallic\nphallical\nphallicism\nphallicist\nphallin\nphallism\nphallist\nphallitis\nphallocrypsis\nphallodynia\nphalloid\nphalloncus\nphalloplasty\nphallorrhagia\nphallus\nPhanar\nPhanariot\nPhanariote\nphanatron\nphaneric\nphanerite\nPhanerocarpae\nPhanerocarpous\nPhanerocephala\nphanerocephalous\nphanerocodonic\nphanerocryst\nphanerocrystalline\nphanerogam\nPhanerogamia\nphanerogamian\nphanerogamic\nphanerogamous\nphanerogamy\nphanerogenetic\nphanerogenic\nPhaneroglossa\nphaneroglossal\nphaneroglossate\nphaneromania\nphaneromere\nphaneromerous\nphaneroscope\nphanerosis\nphanerozoic\nphanerozonate\nPhanerozonia\nphanic\nphano\nphansigar\nphantascope\nphantasia\nPhantasiast\nPhantasiastic\nphantasist\nphantasize\nphantasm\nphantasma\nphantasmagoria\nphantasmagorial\nphantasmagorially\nphantasmagorian\nphantasmagoric\nphantasmagorical\nphantasmagorist\nphantasmagory\nphantasmal\nphantasmalian\nphantasmality\nphantasmally\nphantasmascope\nphantasmata\nPhantasmatic\nphantasmatic\nphantasmatical\nphantasmatically\nphantasmatography\nphantasmic\nphantasmical\nphantasmically\nPhantasmist\nphantasmogenesis\nphantasmogenetic\nphantasmograph\nphantasmological\nphantasmology\nphantast\nphantasy\nphantom\nphantomatic\nphantomic\nphantomical\nphantomically\nPhantomist\nphantomize\nphantomizer\nphantomland\nphantomlike\nphantomnation\nphantomry\nphantomship\nphantomy\nphantoplex\nphantoscope\nPharaoh\nPharaonic\nPharaonical\nPharbitis\nphare\nPhareodus\nPharian\nPharisaean\nPharisaic\npharisaical\npharisaically\npharisaicalness\nPharisaism\nPharisaist\nPharisean\nPharisee\npharisee\nPhariseeism\npharmacal\npharmaceutic\npharmaceutical\npharmaceutically\npharmaceutics\npharmaceutist\npharmacic\npharmacist\npharmacite\npharmacodiagnosis\npharmacodynamic\npharmacodynamical\npharmacodynamics\npharmacoendocrinology\npharmacognosia\npharmacognosis\npharmacognosist\npharmacognostical\npharmacognostically\npharmacognostics\npharmacognosy\npharmacography\npharmacolite\npharmacologia\npharmacologic\npharmacological\npharmacologically\npharmacologist\npharmacology\npharmacomania\npharmacomaniac\npharmacomaniacal\npharmacometer\npharmacopedia\npharmacopedic\npharmacopedics\npharmacopeia\npharmacopeial\npharmacopeian\npharmacophobia\npharmacopoeia\npharmacopoeial\npharmacopoeian\npharmacopoeist\npharmacopolist\npharmacoposia\npharmacopsychology\npharmacosiderite\npharmacotherapy\npharmacy\npharmakos\npharmic\npharmuthi\npharology\nPharomacrus\npharos\nPharsalian\npharyngal\npharyngalgia\npharyngalgic\npharyngeal\npharyngectomy\npharyngemphraxis\npharynges\npharyngic\npharyngismus\npharyngitic\npharyngitis\npharyngoamygdalitis\npharyngobranch\npharyngobranchial\npharyngobranchiate\nPharyngobranchii\npharyngocele\npharyngoceratosis\npharyngodynia\npharyngoepiglottic\npharyngoepiglottidean\npharyngoesophageal\npharyngoglossal\npharyngoglossus\npharyngognath\nPharyngognathi\npharyngognathous\npharyngographic\npharyngography\npharyngokeratosis\npharyngolaryngeal\npharyngolaryngitis\npharyngolith\npharyngological\npharyngology\npharyngomaxillary\npharyngomycosis\npharyngonasal\npharyngopalatine\npharyngopalatinus\npharyngoparalysis\npharyngopathy\npharyngoplasty\npharyngoplegia\npharyngoplegic\npharyngoplegy\npharyngopleural\nPharyngopneusta\npharyngopneustal\npharyngorhinitis\npharyngorhinoscopy\npharyngoscleroma\npharyngoscope\npharyngoscopy\npharyngospasm\npharyngotherapy\npharyngotomy\npharyngotonsillitis\npharyngotyphoid\npharyngoxerosis\npharynogotome\npharynx\nPhascaceae\nphascaceous\nPhascogale\nPhascolarctinae\nPhascolarctos\nphascolome\nPhascolomyidae\nPhascolomys\nPhascolonus\nPhascum\nphase\nphaseal\nphaseless\nphaselin\nphasemeter\nphasemy\nPhaseolaceae\nphaseolin\nphaseolous\nphaseolunatin\nPhaseolus\nphaseometer\nphases\nPhasianella\nPhasianellidae\nphasianic\nphasianid\nPhasianidae\nPhasianinae\nphasianine\nphasianoid\nPhasianus\nphasic\nPhasiron\nphasis\nphasm\nphasma\nphasmatid\nPhasmatida\nPhasmatidae\nPhasmatodea\nphasmatoid\nPhasmatoidea\nphasmatrope\nphasmid\nPhasmida\nPhasmidae\nphasmoid\nphasogeneous\nphasotropy\npheal\npheasant\npheasantry\npheasantwood\nPhebe\nPhecda\nPhegopteris\nPheidole\nphellandrene\nphellem\nPhellodendron\nphelloderm\nphellodermal\nphellogen\nphellogenetic\nphellogenic\nphellonic\nphelloplastic\nphelloplastics\nphelonion\nphemic\nPhemie\nphenacaine\nphenacetin\nphenaceturic\nphenacite\nPhenacodontidae\nPhenacodus\nphenacyl\nphenakism\nphenakistoscope\nPhenalgin\nphenanthrene\nphenanthridine\nphenanthridone\nphenanthrol\nphenanthroline\nphenarsine\nphenate\nphenazine\nphenazone\nphene\nphenegol\nphenene\nphenethyl\nphenetidine\nphenetole\nphengite\nphengitical\nphenic\nphenicate\nphenicious\nphenicopter\nphenin\nphenmiazine\nphenobarbital\nphenocoll\nphenocopy\nphenocryst\nphenocrystalline\nphenogenesis\nphenogenetic\nphenol\nphenolate\nphenolic\nphenolization\nphenolize\nphenological\nphenologically\nphenologist\nphenology\nphenoloid\nphenolphthalein\nphenolsulphonate\nphenolsulphonephthalein\nphenolsulphonic\nphenomena\nphenomenal\nphenomenalism\nphenomenalist\nphenomenalistic\nphenomenalistically\nphenomenality\nphenomenalization\nphenomenalize\nphenomenally\nphenomenic\nphenomenical\nphenomenism\nphenomenist\nphenomenistic\nphenomenize\nphenomenological\nphenomenologically\nphenomenology\nphenomenon\nphenoplast\nphenoplastic\nphenoquinone\nphenosafranine\nphenosal\nphenospermic\nphenospermy\nphenothiazine\nphenotype\nphenotypic\nphenotypical\nphenotypically\nphenoxazine\nphenoxid\nphenoxide\nphenozygous\nPheny\nphenyl\nphenylacetaldehyde\nphenylacetamide\nphenylacetic\nphenylalanine\nphenylamide\nphenylamine\nphenylate\nphenylation\nphenylboric\nphenylcarbamic\nphenylcarbimide\nphenylene\nphenylenediamine\nphenylethylene\nphenylglycine\nphenylglycolic\nphenylglyoxylic\nphenylhydrazine\nphenylhydrazone\nphenylic\nphenylmethane\npheon\npheophyl\npheophyll\npheophytin\nPherecratean\nPherecratian\nPherecratic\nPherephatta\npheretrer\nPherkad\nPherophatta\nPhersephatta\nPhersephoneia\nphew\nphi\nphial\nphiale\nphialful\nphialide\nphialine\nphiallike\nphialophore\nphialospore\nPhidiac\nPhidian\nPhigalian\nPhil\nPhiladelphian\nPhiladelphianism\nphiladelphite\nPhiladelphus\nphiladelphy\nphilalethist\nphilamot\nPhilander\nphilander\nphilanderer\nphilanthid\nPhilanthidae\nphilanthrope\nphilanthropian\nphilanthropic\nphilanthropical\nphilanthropically\nphilanthropinism\nphilanthropinist\nPhilanthropinum\nphilanthropism\nphilanthropist\nphilanthropistic\nphilanthropize\nphilanthropy\nPhilanthus\nphilantomba\nphilarchaist\nphilaristocracy\nphilatelic\nphilatelical\nphilatelically\nphilatelism\nphilatelist\nphilatelistic\nphilately\nPhilathea\nphilathletic\nphilematology\nPhilepitta\nPhilepittidae\nPhilesia\nPhiletaerus\nphilharmonic\nphilhellene\nphilhellenic\nphilhellenism\nphilhellenist\nphilhippic\nphilhymnic\nphiliater\nPhilip\nPhilippa\nPhilippan\nPhilippe\nPhilippian\nPhilippic\nphilippicize\nPhilippine\nPhilippines\nPhilippism\nPhilippist\nPhilippistic\nPhilippizate\nphilippize\nphilippizer\nphilippus\nPhilistia\nPhilistian\nPhilistine\nPhilistinely\nPhilistinian\nPhilistinic\nPhilistinish\nPhilistinism\nPhilistinize\nPhill\nphilliloo\nPhillip\nphillipsine\nphillipsite\nPhillis\nPhillyrea\nphillyrin\nphilobiblian\nphilobiblic\nphilobiblical\nphilobiblist\nphilobotanic\nphilobotanist\nphilobrutish\nphilocalic\nphilocalist\nphilocaly\nphilocathartic\nphilocatholic\nphilocomal\nPhiloctetes\nphilocubist\nphilocynic\nphilocynical\nphilocynicism\nphilocyny\nphilodemic\nPhilodendron\nphilodespot\nphilodestructiveness\nPhilodina\nPhilodinidae\nphilodox\nphilodoxer\nphilodoxical\nphilodramatic\nphilodramatist\nphilofelist\nphilofelon\nphilogarlic\nphilogastric\nphilogeant\nphilogenitive\nphilogenitiveness\nphilograph\nphilographic\nphilogynaecic\nphilogynist\nphilogynous\nphilogyny\nPhilohela\nphilohellenian\nphilokleptic\nphiloleucosis\nphilologaster\nphilologastry\nphilologer\nphilologian\nphilologic\nphilological\nphilologically\nphilologist\nphilologistic\nphilologize\nphilologue\nphilology\nPhilomachus\nphilomath\nphilomathematic\nphilomathematical\nphilomathic\nphilomathical\nphilomathy\nphilomel\nPhilomela\nphilomelanist\nphilomuse\nphilomusical\nphilomystic\nphilonatural\nphiloneism\nPhilonian\nPhilonic\nPhilonism\nPhilonist\nphilonium\nphilonoist\nphilopagan\nphilopater\nphilopatrian\nphilopena\nphilophilosophos\nphilopig\nphiloplutonic\nphilopoet\nphilopogon\nphilopolemic\nphilopolemical\nphilopornist\nphiloprogeneity\nphiloprogenitive\nphiloprogenitiveness\nphilopterid\nPhilopteridae\nphilopublican\nphiloradical\nphilorchidaceous\nphilornithic\nphilorthodox\nphilosoph\nphilosophaster\nphilosophastering\nphilosophastry\nphilosophedom\nphilosopheme\nphilosopher\nphilosopheress\nphilosophership\nphilosophic\nphilosophical\nphilosophically\nphilosophicalness\nphilosophicide\nphilosophicohistorical\nphilosophicojuristic\nphilosophicolegal\nphilosophicoreligious\nphilosophicotheological\nphilosophism\nphilosophist\nphilosophister\nphilosophistic\nphilosophistical\nphilosophization\nphilosophize\nphilosophizer\nphilosophling\nphilosophobia\nphilosophocracy\nphilosophuncule\nphilosophunculist\nphilosophy\nphilotadpole\nphilotechnic\nphilotechnical\nphilotechnist\nphilothaumaturgic\nphilotheism\nphilotheist\nphilotheistic\nphilotheosophical\nphilotherian\nphilotherianism\nPhilotria\nPhiloxenian\nphiloxygenous\nphilozoic\nphilozoist\nphilozoonist\nphilter\nphilterer\nphilterproof\nphiltra\nphiltrum\nPhilydraceae\nphilydraceous\nPhilyra\nphimosed\nphimosis\nphimotic\nPhineas\nPhiomia\nPhiroze\nphit\nphiz\nphizes\nphizog\nphlebalgia\nphlebangioma\nphlebarteriectasia\nphlebarteriodialysis\nphlebectasia\nphlebectasis\nphlebectasy\nphlebectomy\nphlebectopia\nphlebectopy\nphlebemphraxis\nphlebenteric\nphlebenterism\nphlebitic\nphlebitis\nPhlebodium\nphlebogram\nphlebograph\nphlebographical\nphlebography\nphleboid\nphleboidal\nphlebolite\nphlebolith\nphlebolithiasis\nphlebolithic\nphlebolitic\nphlebological\nphlebology\nphlebometritis\nphlebopexy\nphleboplasty\nphleborrhage\nphleborrhagia\nphleborrhaphy\nphleborrhexis\nphlebosclerosis\nphlebosclerotic\nphlebostasia\nphlebostasis\nphlebostenosis\nphlebostrepsis\nphlebothrombosis\nphlebotome\nphlebotomic\nphlebotomical\nphlebotomically\nphlebotomist\nphlebotomization\nphlebotomize\nPhlebotomus\nphlebotomus\nphlebotomy\nPhlegethon\nPhlegethontal\nPhlegethontic\nphlegm\nphlegma\nphlegmagogue\nphlegmasia\nphlegmatic\nphlegmatical\nphlegmatically\nphlegmaticalness\nphlegmaticly\nphlegmaticness\nphlegmatism\nphlegmatist\nphlegmatous\nphlegmless\nphlegmon\nphlegmonic\nphlegmonoid\nphlegmonous\nphlegmy\nPhleum\nphlobaphene\nphlobatannin\nphloem\nphloeophagous\nphloeoterma\nphlogisma\nphlogistian\nphlogistic\nphlogistical\nphlogisticate\nphlogistication\nphlogiston\nphlogistonism\nphlogistonist\nphlogogenetic\nphlogogenic\nphlogogenous\nphlogopite\nphlogosed\nPhlomis\nphloretic\nphloroglucic\nphloroglucin\nphlorone\nphloxin\npho\nphobiac\nphobic\nphobism\nphobist\nphobophobia\nPhobos\nphoby\nphoca\nphocacean\nphocaceous\nPhocaean\nPhocaena\nPhocaenina\nphocaenine\nphocal\nPhocean\nphocenate\nphocenic\nphocenin\nPhocian\nphocid\nPhocidae\nphociform\nPhocinae\nphocine\nphocodont\nPhocodontia\nphocodontic\nPhocoena\nphocoid\nphocomelia\nphocomelous\nphocomelus\nPhoebe\nphoebe\nPhoebean\nPhoenicaceae\nphoenicaceous\nPhoenicales\nphoenicean\nPhoenician\nPhoenicianism\nPhoenicid\nphoenicite\nPhoenicize\nphoenicochroite\nPhoenicopteridae\nPhoenicopteriformes\nphoenicopteroid\nPhoenicopteroideae\nphoenicopterous\nPhoenicopterus\nPhoeniculidae\nPhoeniculus\nphoenicurous\nphoenigm\nPhoenix\nphoenix\nphoenixity\nphoenixlike\nphoh\npholad\nPholadacea\npholadian\npholadid\nPholadidae\nPholadinea\npholadoid\nPholas\npholcid\nPholcidae\npholcoid\nPholcus\npholido\npholidolite\npholidosis\nPholidota\npholidote\nPholiota\nPhoma\nPhomopsis\nphon\nphonal\nphonasthenia\nphonate\nphonation\nphonatory\nphonautogram\nphonautograph\nphonautographic\nphonautographically\nphone\nphoneidoscope\nphoneidoscopic\nPhonelescope\nphoneme\nphonemic\nphonemics\nphonendoscope\nphonesis\nphonestheme\nphonetic\nphonetical\nphonetically\nphonetician\nphoneticism\nphoneticist\nphoneticization\nphoneticize\nphoneticogrammatical\nphoneticohieroglyphic\nphonetics\nphonetism\nphonetist\nphonetization\nphonetize\nphoniatrics\nphoniatry\nphonic\nphonics\nphonikon\nphonism\nphono\nphonocamptic\nphonocinematograph\nphonodeik\nphonodynamograph\nphonoglyph\nphonogram\nphonogramic\nphonogramically\nphonogrammatic\nphonogrammatical\nphonogrammic\nphonogrammically\nphonograph\nphonographer\nphonographic\nphonographical\nphonographically\nphonographist\nphonography\nphonolite\nphonolitic\nphonologer\nphonologic\nphonological\nphonologically\nphonologist\nphonology\nphonometer\nphonometric\nphonometry\nphonomimic\nphonomotor\nphonopathy\nphonophile\nphonophobia\nphonophone\nphonophore\nphonophoric\nphonophorous\nphonophote\nphonophotography\nphonophotoscope\nphonophotoscopic\nphonoplex\nphonoscope\nphonotelemeter\nphonotype\nphonotyper\nphonotypic\nphonotypical\nphonotypically\nphonotypist\nphonotypy\nphony\nphoo\nPhora\nPhoradendron\nphoranthium\nphoresis\nphoresy\nphoria\nphorid\nPhoridae\nphorminx\nPhormium\nphorology\nphorometer\nphorometric\nphorometry\nphorone\nphoronic\nphoronid\nPhoronida\nPhoronidea\nPhoronis\nphoronomia\nphoronomic\nphoronomically\nphoronomics\nphoronomy\nPhororhacidae\nPhororhacos\nphoroscope\nphorozooid\nphos\nphose\nphosgene\nphosgenic\nphosgenite\nphosis\nphosphagen\nphospham\nphosphamic\nphosphamide\nphosphamidic\nphosphammonium\nphosphatase\nphosphate\nphosphated\nphosphatemia\nphosphatese\nphosphatic\nphosphatide\nphosphation\nphosphatization\nphosphatize\nphosphaturia\nphosphaturic\nphosphene\nphosphenyl\nphosphide\nphosphinate\nphosphine\nphosphinic\nphosphite\nphospho\nphosphoaminolipide\nphosphocarnic\nphosphocreatine\nphosphoferrite\nphosphoglycerate\nphosphoglyceric\nphosphoglycoprotein\nphospholipide\nphospholipin\nphosphomolybdate\nphosphomolybdic\nphosphonate\nphosphonic\nphosphonium\nphosphophyllite\nphosphoprotein\nphosphor\nphosphorate\nphosphore\nphosphoreal\nphosphorent\nphosphoreous\nphosphoresce\nphosphorescence\nphosphorescent\nphosphorescently\nphosphoreted\nphosphorhidrosis\nphosphori\nphosphoric\nphosphorical\nphosphoriferous\nphosphorism\nphosphorite\nphosphoritic\nphosphorize\nphosphorogen\nphosphorogenic\nphosphorograph\nphosphorographic\nphosphorography\nphosphoroscope\nphosphorous\nphosphoruria\nphosphorus\nphosphoryl\nphosphorylase\nphosphorylation\nphosphosilicate\nphosphotartaric\nphosphotungstate\nphosphotungstic\nphosphowolframic\nphosphuranylite\nphosphuret\nphosphuria\nphosphyl\nphossy\nphot\nphotaesthesia\nphotaesthesis\nphotaesthetic\nphotal\nphotalgia\nphotechy\nphotelectrograph\nphoteolic\nphoterythrous\nphotesthesis\nphotic\nphotics\nPhotinia\nPhotinian\nPhotinianism\nphotism\nphotistic\nphoto\nphotoactinic\nphotoactivate\nphotoactivation\nphotoactive\nphotoactivity\nphotoaesthetic\nphotoalbum\nphotoalgraphy\nphotoanamorphosis\nphotoaquatint\nPhotobacterium\nphotobathic\nphotobiotic\nphotobromide\nphotocampsis\nphotocatalysis\nphotocatalyst\nphotocatalytic\nphotocatalyzer\nphotocell\nphotocellulose\nphotoceptor\nphotoceramic\nphotoceramics\nphotoceramist\nphotochemic\nphotochemical\nphotochemically\nphotochemigraphy\nphotochemist\nphotochemistry\nphotochloride\nphotochlorination\nphotochromascope\nphotochromatic\nphotochrome\nphotochromic\nphotochromography\nphotochromolithograph\nphotochromoscope\nphotochromotype\nphotochromotypy\nphotochromy\nphotochronograph\nphotochronographic\nphotochronographical\nphotochronographically\nphotochronography\nphotocollograph\nphotocollographic\nphotocollography\nphotocollotype\nphotocombustion\nphotocompose\nphotocomposition\nphotoconductivity\nphotocopier\nphotocopy\nphotocrayon\nphotocurrent\nphotodecomposition\nphotodensitometer\nphotodermatic\nphotodermatism\nphotodisintegration\nphotodissociation\nphotodrama\nphotodramatic\nphotodramatics\nphotodramatist\nphotodramaturgic\nphotodramaturgy\nphotodrome\nphotodromy\nphotodynamic\nphotodynamical\nphotodynamically\nphotodynamics\nphotodysphoria\nphotoelastic\nphotoelasticity\nphotoelectric\nphotoelectrical\nphotoelectrically\nphotoelectricity\nphotoelectron\nphotoelectrotype\nphotoemission\nphotoemissive\nphotoengrave\nphotoengraver\nphotoengraving\nphotoepinastic\nphotoepinastically\nphotoepinasty\nphotoesthesis\nphotoesthetic\nphotoetch\nphotoetcher\nphotoetching\nphotofilm\nphotofinish\nphotofinisher\nphotofinishing\nphotofloodlamp\nphotogalvanograph\nphotogalvanographic\nphotogalvanography\nphotogastroscope\nphotogelatin\nphotogen\nphotogene\nphotogenetic\nphotogenic\nphotogenically\nphotogenous\nphotoglyph\nphotoglyphic\nphotoglyphography\nphotoglyphy\nphotoglyptic\nphotoglyptography\nphotogram\nphotogrammeter\nphotogrammetric\nphotogrammetrical\nphotogrammetry\nphotograph\nphotographable\nphotographee\nphotographer\nphotographeress\nphotographess\nphotographic\nphotographical\nphotographically\nphotographist\nphotographize\nphotographometer\nphotography\nphotogravure\nphotogravurist\nphotogyric\nphotohalide\nphotoheliograph\nphotoheliographic\nphotoheliography\nphotoheliometer\nphotohyponastic\nphotohyponastically\nphotohyponasty\nphotoimpression\nphotoinactivation\nphotoinduction\nphotoinhibition\nphotointaglio\nphotoionization\nphotoisomeric\nphotoisomerization\nphotokinesis\nphotokinetic\nphotolith\nphotolitho\nphotolithograph\nphotolithographer\nphotolithographic\nphotolithography\nphotologic\nphotological\nphotologist\nphotology\nphotoluminescence\nphotoluminescent\nphotolysis\nphotolyte\nphotolytic\nphotoma\nphotomacrograph\nphotomagnetic\nphotomagnetism\nphotomap\nphotomapper\nphotomechanical\nphotomechanically\nphotometeor\nphotometer\nphotometric\nphotometrical\nphotometrically\nphotometrician\nphotometrist\nphotometrograph\nphotometry\nphotomezzotype\nphotomicrogram\nphotomicrograph\nphotomicrographer\nphotomicrographic\nphotomicrography\nphotomicroscope\nphotomicroscopic\nphotomicroscopy\nphotomontage\nphotomorphosis\nphotomural\nphoton\nphotonastic\nphotonasty\nphotonegative\nphotonephograph\nphotonephoscope\nphotoneutron\nphotonosus\nphotooxidation\nphotooxidative\nphotopathic\nphotopathy\nphotoperceptive\nphotoperimeter\nphotoperiod\nphotoperiodic\nphotoperiodism\nphotophane\nphotophile\nphotophilic\nphotophilous\nphotophily\nphotophobe\nphotophobia\nphotophobic\nphotophobous\nphotophone\nphotophonic\nphotophony\nphotophore\nphotophoresis\nphotophosphorescent\nphotophygous\nphotophysical\nphotophysicist\nphotopia\nphotopic\nphotopile\nphotopitometer\nphotoplay\nphotoplayer\nphotoplaywright\nphotopography\nphotopolarigraph\nphotopolymerization\nphotopositive\nphotoprint\nphotoprinter\nphotoprinting\nphotoprocess\nphotoptometer\nphotoradio\nphotoradiogram\nphotoreception\nphotoreceptive\nphotoreceptor\nphotoregression\nphotorelief\nphotoresistance\nphotosalt\nphotosantonic\nphotoscope\nphotoscopic\nphotoscopy\nphotosculptural\nphotosculpture\nphotosensitive\nphotosensitiveness\nphotosensitivity\nphotosensitization\nphotosensitize\nphotosensitizer\nphotosensory\nphotospectroheliograph\nphotospectroscope\nphotospectroscopic\nphotospectroscopical\nphotospectroscopy\nphotosphere\nphotospheric\nphotostability\nphotostable\nPhotostat\nphotostat\nphotostationary\nphotostereograph\nphotosurveying\nphotosyntax\nphotosynthate\nphotosynthesis\nphotosynthesize\nphotosynthetic\nphotosynthetically\nphotosynthometer\nphototachometer\nphototachometric\nphototachometrical\nphototachometry\nphototactic\nphototactically\nphototactism\nphototaxis\nphototaxy\nphototechnic\nphototelegraph\nphototelegraphic\nphototelegraphically\nphototelegraphy\nphototelephone\nphototelephony\nphototelescope\nphototelescopic\nphototheodolite\nphototherapeutic\nphototherapeutics\nphototherapic\nphototherapist\nphototherapy\nphotothermic\nphototonic\nphototonus\nphototopographic\nphototopographical\nphototopography\nphototrichromatic\nphototrope\nphototrophic\nphototrophy\nphototropic\nphototropically\nphototropism\nphototropy\nphototube\nphototype\nphototypic\nphototypically\nphototypist\nphototypographic\nphototypography\nphototypy\nphotovisual\nphotovitrotype\nphotovoltaic\nphotoxylography\nphotozinco\nphotozincograph\nphotozincographic\nphotozincography\nphotozincotype\nphotozincotypy\nphoturia\nPhractamphibia\nphragma\nPhragmidium\nPhragmites\nphragmocone\nphragmoconic\nPhragmocyttares\nphragmocyttarous\nphragmoid\nphragmosis\nphrasable\nphrasal\nphrasally\nphrase\nphraseable\nphraseless\nphrasemaker\nphrasemaking\nphraseman\nphrasemonger\nphrasemongering\nphrasemongery\nphraseogram\nphraseograph\nphraseographic\nphraseography\nphraseological\nphraseologically\nphraseologist\nphraseology\nphraser\nphrasify\nphrasiness\nphrasing\nphrasy\nphrator\nphratral\nphratria\nphratriac\nphratrial\nphratry\nphreatic\nphreatophyte\nphrenesia\nphrenesiac\nphrenesis\nphrenetic\nphrenetically\nphreneticness\nphrenic\nphrenicectomy\nphrenicocolic\nphrenicocostal\nphrenicogastric\nphrenicoglottic\nphrenicohepatic\nphrenicolienal\nphrenicopericardiac\nphrenicosplenic\nphrenicotomy\nphrenics\nphrenitic\nphrenitis\nphrenocardia\nphrenocardiac\nphrenocolic\nphrenocostal\nphrenodynia\nphrenogastric\nphrenoglottic\nphrenogram\nphrenograph\nphrenography\nphrenohepatic\nphrenologer\nphrenologic\nphrenological\nphrenologically\nphrenologist\nphrenologize\nphrenology\nphrenomagnetism\nphrenomesmerism\nphrenopathia\nphrenopathic\nphrenopathy\nphrenopericardiac\nphrenoplegia\nphrenoplegy\nphrenosin\nphrenosinic\nphrenospasm\nphrenosplenic\nphronesis\nPhronima\nPhronimidae\nphrontisterion\nphrontisterium\nphrontistery\nPhryganea\nphryganeid\nPhryganeidae\nphryganeoid\nPhrygian\nPhrygianize\nphrygium\nPhryma\nPhrymaceae\nphrymaceous\nphrynid\nPhrynidae\nphrynin\nphrynoid\nPhrynosoma\nphthalacene\nphthalan\nphthalanilic\nphthalate\nphthalazin\nphthalazine\nphthalein\nphthaleinometer\nphthalic\nphthalid\nphthalide\nphthalimide\nphthalin\nphthalocyanine\nphthalyl\nphthanite\nPhthartolatrae\nphthinoid\nphthiocol\nphthiriasis\nPhthirius\nphthirophagous\nphthisic\nphthisical\nphthisicky\nphthisiogenesis\nphthisiogenetic\nphthisiogenic\nphthisiologist\nphthisiology\nphthisiophobia\nphthisiotherapeutic\nphthisiotherapy\nphthisipneumonia\nphthisipneumony\nphthisis\nphthongal\nphthongometer\nphthor\nphthoric\nphu\nphugoid\nphulkari\nphulwa\nphulwara\nphut\nPhyciodes\nphycite\nPhycitidae\nphycitol\nphycochromaceae\nphycochromaceous\nphycochrome\nPhycochromophyceae\nphycochromophyceous\nphycocyanin\nphycocyanogen\nPhycodromidae\nphycoerythrin\nphycography\nphycological\nphycologist\nphycology\nPhycomyces\nphycomycete\nPhycomycetes\nphycomycetous\nphycophaein\nphycoxanthin\nphycoxanthine\nphygogalactic\nphyla\nphylacobiosis\nphylacobiotic\nphylacteric\nphylacterical\nphylacteried\nphylacterize\nphylactery\nphylactic\nphylactocarp\nphylactocarpal\nPhylactolaema\nPhylactolaemata\nphylactolaematous\nPhylactolema\nPhylactolemata\nphylarch\nphylarchic\nphylarchical\nphylarchy\nphyle\nphylephebic\nphylesis\nphyletic\nphyletically\nphyletism\nphylic\nPhyllachora\nPhyllactinia\nphyllade\nPhyllanthus\nphyllary\nPhyllaurea\nphylliform\nphyllin\nphylline\nPhyllis\nphyllite\nphyllitic\nPhyllitis\nPhyllium\nphyllobranchia\nphyllobranchial\nphyllobranchiate\nPhyllocactus\nphyllocarid\nPhyllocarida\nphyllocaridan\nPhylloceras\nphyllocerate\nPhylloceratidae\nphylloclad\nphylloclade\nphyllocladioid\nphyllocladium\nphyllocladous\nphyllocyanic\nphyllocyanin\nphyllocyst\nphyllocystic\nphyllode\nphyllodial\nphyllodination\nphyllodineous\nphyllodiniation\nphyllodinous\nphyllodium\nPhyllodoce\nphyllody\nphylloerythrin\nphyllogenetic\nphyllogenous\nphylloid\nphylloidal\nphylloideous\nphyllomancy\nphyllomania\nphyllome\nphyllomic\nphyllomorph\nphyllomorphic\nphyllomorphosis\nphyllomorphy\nPhyllophaga\nphyllophagous\nphyllophore\nphyllophorous\nphyllophyllin\nphyllophyte\nphyllopod\nPhyllopoda\nphyllopodan\nphyllopode\nphyllopodiform\nphyllopodium\nphyllopodous\nphylloporphyrin\nPhyllopteryx\nphylloptosis\nphyllopyrrole\nphyllorhine\nphyllorhinine\nphylloscopine\nPhylloscopus\nphyllosiphonic\nphyllosoma\nPhyllosomata\nphyllosome\nPhyllospondyli\nphyllospondylous\nPhyllostachys\nPhyllosticta\nPhyllostoma\nPhyllostomatidae\nPhyllostomatinae\nphyllostomatoid\nphyllostomatous\nphyllostome\nPhyllostomidae\nPhyllostominae\nphyllostomine\nphyllostomous\nPhyllostomus\nphyllotactic\nphyllotactical\nphyllotaxis\nphyllotaxy\nphyllous\nphylloxanthin\nPhylloxera\nphylloxeran\nphylloxeric\nPhylloxeridae\nphyllozooid\nphylogenetic\nphylogenetical\nphylogenetically\nphylogenic\nphylogenist\nphylogeny\nphylogerontic\nphylogerontism\nphylography\nphylology\nphylon\nphyloneanic\nphylonepionic\nphylum\nphyma\nphymata\nphymatic\nphymatid\nPhymatidae\nPhymatodes\nphymatoid\nphymatorhysin\nphymatosis\nPhymosia\nPhysa\nphysagogue\nPhysalia\nphysalian\nPhysaliidae\nPhysalis\nphysalite\nPhysalospora\nPhysapoda\nPhysaria\nPhyscia\nPhysciaceae\nphyscioid\nPhyscomitrium\nPhyseter\nPhyseteridae\nPhyseterinae\nphyseterine\nphyseteroid\nPhyseteroidea\nphysharmonica\nphysianthropy\nphysiatric\nphysiatrical\nphysiatrics\nphysic\nphysical\nphysicalism\nphysicalist\nphysicalistic\nphysicalistically\nphysicality\nphysically\nphysicalness\nphysician\nphysicianary\nphysiciancy\nphysicianed\nphysicianer\nphysicianess\nphysicianless\nphysicianly\nphysicianship\nphysicism\nphysicist\nphysicked\nphysicker\nphysicking\nphysicky\nphysicoastronomical\nphysicobiological\nphysicochemic\nphysicochemical\nphysicochemically\nphysicochemist\nphysicochemistry\nphysicogeographical\nphysicologic\nphysicological\nphysicomathematical\nphysicomathematics\nphysicomechanical\nphysicomedical\nphysicomental\nphysicomorph\nphysicomorphic\nphysicomorphism\nphysicooptics\nphysicophilosophical\nphysicophilosophy\nphysicophysiological\nphysicopsychical\nphysicosocial\nphysicotheological\nphysicotheologist\nphysicotheology\nphysicotherapeutic\nphysicotherapeutics\nphysicotherapy\nphysics\nPhysidae\nphysiform\nphysiochemical\nphysiochemically\nphysiocracy\nphysiocrat\nphysiocratic\nphysiocratism\nphysiocratist\nphysiogenesis\nphysiogenetic\nphysiogenic\nphysiogeny\nphysiognomic\nphysiognomical\nphysiognomically\nphysiognomics\nphysiognomist\nphysiognomize\nphysiognomonic\nphysiognomonical\nphysiognomy\nphysiogony\nphysiographer\nphysiographic\nphysiographical\nphysiographically\nphysiography\nphysiolater\nphysiolatrous\nphysiolatry\nphysiologer\nphysiologian\nphysiological\nphysiologically\nphysiologicoanatomic\nphysiologist\nphysiologize\nphysiologue\nphysiologus\nphysiology\nphysiopathological\nphysiophilist\nphysiophilosopher\nphysiophilosophical\nphysiophilosophy\nphysiopsychic\nphysiopsychical\nphysiopsychological\nphysiopsychology\nphysiosociological\nphysiosophic\nphysiosophy\nphysiotherapeutic\nphysiotherapeutical\nphysiotherapeutics\nphysiotherapist\nphysiotherapy\nphysiotype\nphysiotypy\nphysique\nphysiqued\nphysitheism\nphysitheistic\nphysitism\nphysiurgic\nphysiurgy\nphysocarpous\nPhysocarpus\nphysocele\nphysoclist\nPhysoclisti\nphysoclistic\nphysoclistous\nPhysoderma\nphysogastric\nphysogastrism\nphysogastry\nphysometra\nPhysonectae\nphysonectous\nPhysophorae\nphysophoran\nphysophore\nphysophorous\nphysopod\nPhysopoda\nphysopodan\nPhysostegia\nPhysostigma\nphysostigmine\nphysostomatous\nphysostome\nPhysostomi\nphysostomous\nphytalbumose\nphytase\nPhytelephas\nPhyteus\nphytic\nphytiferous\nphytiform\nphytin\nphytivorous\nphytobacteriology\nphytobezoar\nphytobiological\nphytobiology\nphytochemical\nphytochemistry\nphytochlorin\nphytocidal\nphytodynamics\nphytoecological\nphytoecologist\nphytoecology\nPhytoflagellata\nphytogamy\nphytogenesis\nphytogenetic\nphytogenetical\nphytogenetically\nphytogenic\nphytogenous\nphytogeny\nphytogeographer\nphytogeographic\nphytogeographical\nphytogeographically\nphytogeography\nphytoglobulin\nphytograph\nphytographer\nphytographic\nphytographical\nphytographist\nphytography\nphytohormone\nphytoid\nphytol\nPhytolacca\nPhytolaccaceae\nphytolaccaceous\nphytolatrous\nphytolatry\nphytolithological\nphytolithologist\nphytolithology\nphytologic\nphytological\nphytologically\nphytologist\nphytology\nphytoma\nPhytomastigina\nPhytomastigoda\nphytome\nphytomer\nphytometer\nphytometric\nphytometry\nphytomonad\nPhytomonadida\nPhytomonadina\nPhytomonas\nphytomorphic\nphytomorphology\nphytomorphosis\nphyton\nphytonic\nphytonomy\nphytooecology\nphytopaleontologic\nphytopaleontological\nphytopaleontologist\nphytopaleontology\nphytoparasite\nphytopathogen\nphytopathogenic\nphytopathologic\nphytopathological\nphytopathologist\nphytopathology\nPhytophaga\nphytophagan\nphytophagic\nPhytophagineae\nphytophagous\nphytophagy\nphytopharmacologic\nphytopharmacology\nphytophenological\nphytophenology\nphytophil\nphytophilous\nPhytophthora\nphytophylogenetic\nphytophylogenic\nphytophylogeny\nphytophysiological\nphytophysiology\nphytoplankton\nphytopsyche\nphytoptid\nPhytoptidae\nphytoptose\nphytoptosis\nPhytoptus\nphytorhodin\nphytosaur\nPhytosauria\nphytosaurian\nphytoserologic\nphytoserological\nphytoserologically\nphytoserology\nphytosis\nphytosociologic\nphytosociological\nphytosociologically\nphytosociologist\nphytosociology\nphytosterin\nphytosterol\nphytostrote\nphytosynthesis\nphytotaxonomy\nphytotechny\nphytoteratologic\nphytoteratological\nphytoteratologist\nphytoteratology\nPhytotoma\nPhytotomidae\nphytotomist\nphytotomy\nphytotopographical\nphytotopography\nphytotoxic\nphytotoxin\nphytovitellin\nPhytozoa\nphytozoan\nPhytozoaria\nphytozoon\nphytyl\npi\nPia\npia\npiaba\npiacaba\npiacle\npiacular\npiacularity\npiacularly\npiacularness\npiaculum\npiaffe\npiaffer\npial\npialyn\npian\npianette\npianic\npianino\npianism\npianissimo\npianist\npianiste\npianistic\npianistically\nPiankashaw\npiannet\npiano\npianoforte\npianofortist\npianograph\nPianokoto\nPianola\npianola\npianolist\npianologue\npiarhemia\npiarhemic\nPiarist\nPiaroa\nPiaroan\nPiaropus\nPiarroan\npiassava\nPiast\npiaster\npiastre\npiation\npiazine\npiazza\npiazzaed\npiazzaless\npiazzalike\npiazzian\npibcorn\npiblokto\npibroch\npic\nPica\npica\npicador\npicadura\nPicae\npical\npicamar\npicara\nPicard\npicarel\npicaresque\nPicariae\npicarian\nPicarii\npicaro\npicaroon\npicary\npicayune\npicayunish\npicayunishly\npicayunishness\npiccadill\npiccadilly\npiccalilli\npiccolo\npiccoloist\npice\nPicea\nPicene\npicene\nPicenian\npiceoferruginous\npiceotestaceous\npiceous\npiceworth\npichi\npichiciago\npichuric\npichurim\nPici\nPicidae\npiciform\nPiciformes\nPicinae\npicine\npick\npickaback\npickable\npickableness\npickage\npickaninny\npickaroon\npickaway\npickax\npicked\npickedly\npickedness\npickee\npickeer\npicker\npickerel\npickerelweed\npickering\npickeringite\npickery\npicket\npicketboat\npicketeer\npicketer\npickfork\npickietar\npickings\npickle\npicklelike\npickleman\npickler\npickleweed\npickleworm\npicklock\npickman\npickmaw\npicknick\npicknicker\npickover\npickpocket\npickpocketism\npickpocketry\npickpole\npickpurse\npickshaft\npicksman\npicksmith\npicksome\npicksomeness\npickthank\npickthankly\npickthankness\npickthatch\npicktooth\npickup\npickwick\nPickwickian\nPickwickianism\nPickwickianly\npickwork\npicky\npicnic\npicnicker\npicnickery\nPicnickian\npicnickish\npicnicky\npico\npicofarad\npicoid\npicoline\npicolinic\npicot\npicotah\npicotee\npicotite\npicqueter\npicra\npicramic\nPicramnia\npicrasmin\npicrate\npicrated\npicric\nPicris\npicrite\npicrocarmine\nPicrodendraceae\nPicrodendron\npicroerythrin\npicrol\npicrolite\npicromerite\npicropodophyllin\npicrorhiza\npicrorhizin\npicrotin\npicrotoxic\npicrotoxin\npicrotoxinin\npicryl\nPict\npict\npictarnie\nPictavi\nPictish\nPictland\npictogram\npictograph\npictographic\npictographically\npictography\nPictones\npictoradiogram\npictorial\npictorialism\npictorialist\npictorialization\npictorialize\npictorially\npictorialness\npictoric\npictorical\npictorically\npicturability\npicturable\npicturableness\npicturably\npictural\npicture\npicturecraft\npictured\npicturedom\npicturedrome\npictureful\npictureless\npicturelike\npicturely\npicturemaker\npicturemaking\npicturer\npicturesque\npicturesquely\npicturesqueness\npicturesquish\npicturization\npicturize\npictury\npicucule\npicuda\npicudilla\npicudo\npicul\npiculet\npiculule\nPicumninae\nPicumnus\nPicunche\nPicuris\nPicus\npidan\npiddle\npiddler\npiddling\npiddock\npidgin\npidjajap\npie\npiebald\npiebaldism\npiebaldly\npiebaldness\npiece\npieceable\npieceless\npiecemaker\npiecemeal\npiecemealwise\npiecen\npiecener\npiecer\npiecette\npiecewise\npiecework\npieceworker\npiecing\npiecrust\npied\npiedfort\npiedly\npiedmont\npiedmontal\nPiedmontese\npiedmontite\npiedness\nPiegan\npiehouse\npieless\npielet\npielum\npiemag\npieman\npiemarker\npien\npienanny\npiend\npiepan\npieplant\npiepoudre\npiepowder\npieprint\npier\npierage\nPiercarlo\nPierce\npierce\npierceable\npierced\npiercel\npierceless\npiercent\npiercer\npiercing\npiercingly\npiercingness\npierdrop\nPierette\npierhead\nPierian\npierid\nPieridae\nPierides\nPieridinae\npieridine\nPierinae\npierine\nPieris\npierless\npierlike\nPierre\nPierrot\npierrot\npierrotic\npieshop\nPiet\npiet\npietas\nPiete\nPieter\npietic\npietism\nPietist\npietist\npietistic\npietistical\npietistically\npietose\npiety\npiewife\npiewipe\npiewoman\npiezo\npiezochemical\npiezochemistry\npiezocrystallization\npiezoelectric\npiezoelectrically\npiezoelectricity\npiezometer\npiezometric\npiezometrical\npiezometry\npiff\npiffle\npiffler\npifine\npig\npigbelly\npigdan\npigdom\npigeon\npigeonable\npigeonberry\npigeoneer\npigeoner\npigeonfoot\npigeongram\npigeonhearted\npigeonhole\npigeonholer\npigeonman\npigeonry\npigeontail\npigeonweed\npigeonwing\npigeonwood\npigface\npigfish\npigflower\npigfoot\npigful\npiggery\npiggin\npigging\npiggish\npiggishly\npiggishness\npiggle\npiggy\npighead\npigheaded\npigheadedly\npigheadedness\npigherd\npightle\npigless\npiglet\npigling\npiglinghood\npigly\npigmaker\npigmaking\npigman\npigment\npigmental\npigmentally\npigmentary\npigmentation\npigmentize\npigmentolysis\npigmentophage\npigmentose\nPigmy\npignolia\npignon\npignorate\npignoration\npignoratitious\npignorative\npignus\npignut\npigpen\npigritude\npigroot\npigsconce\npigskin\npigsney\npigstick\npigsticker\npigsty\npigtail\npigwash\npigweed\npigwidgeon\npigyard\npiitis\npik\npika\npike\npiked\npikel\npikelet\npikeman\npikemonger\npiker\npikestaff\npiketail\npikey\npiki\npiking\npikle\npiky\npilage\npilandite\npilapil\nPilar\npilar\npilary\npilaster\npilastered\npilastering\npilastrade\npilastraded\npilastric\nPilate\nPilatian\npilau\npilaued\npilch\npilchard\npilcher\npilcorn\npilcrow\npile\nPilea\npileata\npileate\npileated\npiled\npileiform\npileolated\npileolus\npileorhiza\npileorhize\npileous\npiler\npiles\npileus\npileweed\npilework\npileworm\npilewort\npilfer\npilferage\npilferer\npilfering\npilferingly\npilferment\npilgarlic\npilgarlicky\npilger\npilgrim\npilgrimage\npilgrimager\npilgrimatic\npilgrimatical\npilgrimdom\npilgrimer\npilgrimess\npilgrimism\npilgrimize\npilgrimlike\npilgrimwise\npili\npilidium\npilifer\npiliferous\npiliform\npiligan\npiliganine\npiligerous\npilikai\npililloo\npilimiction\npilin\npiline\npiling\npilipilula\npilkins\npill\npillage\npillageable\npillagee\npillager\npillar\npillared\npillaret\npillaring\npillarist\npillarize\npillarlet\npillarlike\npillarwise\npillary\npillas\npillbox\npilled\npilledness\npillet\npilleus\npillion\npilliver\npilliwinks\npillmaker\npillmaking\npillmonger\npillorization\npillorize\npillory\npillow\npillowcase\npillowing\npillowless\npillowmade\npillowwork\npillowy\npillworm\npillwort\npilm\npilmy\nPilobolus\npilocarpidine\npilocarpine\nPilocarpus\nPilocereus\npilocystic\npiloerection\npilomotor\npilon\npilonidal\npilori\npilose\npilosebaceous\npilosine\npilosis\npilosism\npilosity\nPilot\npilot\npilotage\npilotaxitic\npilotee\npilothouse\npiloting\npilotism\npilotless\npilotman\npilotry\npilotship\npilotweed\npilous\nPilpai\nPilpay\npilpul\npilpulist\npilpulistic\npiltock\npilula\npilular\nPilularia\npilule\npilulist\npilulous\npilum\nPilumnus\npilus\npilwillet\npily\nPim\nPima\nPiman\npimaric\npimelate\nPimelea\npimelic\npimelite\npimelitis\nPimenta\npimento\npimenton\npimgenet\npimienta\npimiento\npimlico\npimola\npimp\npimperlimpimp\npimpernel\npimpery\nPimpinella\npimping\npimpish\nPimpla\npimple\npimpleback\npimpled\npimpleproof\nPimplinae\npimpliness\npimplo\npimploe\npimplous\npimply\npimpship\npin\npina\nPinaceae\npinaceous\npinaces\npinachrome\npinacle\nPinacoceras\nPinacoceratidae\npinacocytal\npinacocyte\npinacoid\npinacoidal\npinacol\npinacolate\npinacolic\npinacolin\npinacone\npinacoteca\npinaculum\nPinacyanol\npinafore\npinakiolite\npinakoidal\npinakotheke\nPinal\nPinaleno\nPinales\npinang\npinaster\npinatype\npinaverdol\npinax\npinball\npinbefore\npinbone\npinbush\npincase\npincement\npincer\npincerlike\npincers\npincerweed\npinch\npinchable\npinchback\npinchbeck\npinchbelly\npinchcock\npinchcommons\npinchcrust\npinche\npinched\npinchedly\npinchedness\npinchem\npincher\npinchfist\npinchfisted\npinchgut\npinching\npinchingly\npinchpenny\nPincian\nPinckneya\npincoffin\npincpinc\nPinctada\npincushion\npincushiony\npind\npinda\nPindari\nPindaric\npindarical\npindarically\nPindarism\nPindarist\nPindarize\nPindarus\npinder\npindling\npindy\npine\npineal\npinealism\npinealoma\npineapple\npined\npinedrops\npineland\npinene\npiner\npinery\npinesap\npinetum\npineweed\npinewoods\npiney\npinfall\npinfeather\npinfeathered\npinfeatherer\npinfeathery\npinfish\npinfold\nPing\nping\npingle\npingler\npingue\npinguecula\npinguedinous\npinguefaction\npinguefy\npinguescence\npinguescent\nPinguicula\npinguicula\nPinguiculaceae\npinguiculaceous\npinguid\npinguidity\npinguiferous\npinguin\npinguinitescent\npinguite\npinguitude\npinguitudinous\npinhead\npinheaded\npinheadedness\npinhold\npinhole\npinhook\npinic\npinicoline\npinicolous\npiniferous\npiniform\npining\npiningly\npinion\npinioned\npinionless\npinionlike\npinipicrin\npinitannic\npinite\npinitol\npinivorous\npinjane\npinjra\npink\npinkberry\npinked\npinkeen\npinken\npinker\nPinkerton\nPinkertonism\npinkeye\npinkfish\npinkie\npinkify\npinkily\npinkiness\npinking\npinkish\npinkishness\npinkly\npinkness\npinkroot\npinksome\nPinkster\npinkweed\npinkwood\npinkwort\npinky\npinless\npinlock\npinmaker\nPinna\npinna\npinnace\npinnacle\npinnaclet\npinnae\npinnaglobin\npinnal\npinnate\npinnated\npinnatedly\npinnately\npinnatifid\npinnatifidly\npinnatilobate\npinnatilobed\npinnation\npinnatipartite\npinnatiped\npinnatisect\npinnatisected\npinnatodentate\npinnatopectinate\npinnatulate\npinned\npinnel\npinner\npinnet\nPinnidae\npinniferous\npinniform\npinnigerous\nPinnigrada\npinnigrade\npinninervate\npinninerved\npinning\npinningly\npinniped\nPinnipedia\npinnipedian\npinnisect\npinnisected\npinnitarsal\npinnitentaculate\npinniwinkis\npinnock\npinnoite\npinnotere\npinnothere\nPinnotheres\npinnotherian\nPinnotheridae\npinnula\npinnular\npinnulate\npinnulated\npinnule\npinnulet\npinny\npino\npinochle\npinocytosis\npinole\npinoleum\npinolia\npinolin\npinon\npinonic\npinpillow\npinpoint\npinprick\npinproof\npinrail\npinrowed\npinscher\npinsons\npint\npinta\npintadera\npintado\npintadoite\npintail\npintano\npinte\npintle\npinto\npintura\npinulus\nPinus\npinweed\npinwing\npinwork\npinworm\npiny\npinyl\npinyon\npioneer\npioneerdom\npioneership\npionnotes\npioscope\npioted\npiotine\nPiotr\npiotty\npioury\npious\npiously\npiousness\nPioxe\npip\npipa\npipage\npipal\npipe\npipeage\npipecoline\npipecolinic\npiped\npipefish\npipeful\npipelayer\npipeless\npipelike\npipeline\npipeman\npipemouth\nPiper\npiper\nPiperaceae\npiperaceous\nPiperales\npiperate\npiperazin\npiperazine\npiperic\npiperide\npiperideine\npiperidge\npiperidide\npiperidine\npiperine\npiperitious\npiperitone\npiperly\npiperno\npiperoid\npiperonal\npiperonyl\npipery\npiperylene\npipestapple\npipestem\npipestone\npipet\npipette\npipewalker\npipewood\npipework\npipewort\npipi\nPipidae\nPipil\nPipile\nPipilo\npiping\npipingly\npipingness\npipiri\npipistrel\npipistrelle\nPipistrellus\npipit\npipkin\npipkinet\npipless\npipped\npipper\npippin\npippiner\npippinface\npippy\nPipra\nPipridae\nPiprinae\npiprine\npiproid\npipsissewa\nPiptadenia\nPiptomeris\npipunculid\nPipunculidae\npipy\npiquable\npiquance\npiquancy\npiquant\npiquantly\npiquantness\npique\npiquet\npiquia\npiqure\npir\npiracy\npiragua\nPiranga\npiranha\npirate\npiratelike\npiratery\npiratess\npiratical\npiratically\npiratism\npiratize\npiraty\nPirene\nPiricularia\npirijiri\npiripiri\npiririgua\npirl\npirn\npirner\npirnie\npirny\nPiro\npirogue\npirol\npiroplasm\nPiroplasma\npiroplasmosis\npirouette\npirouetter\npirouettist\npirr\npirraura\npirrmaw\npirssonite\nPisaca\npisaca\npisachee\nPisan\npisang\npisanite\nPisauridae\npisay\npiscary\nPiscataqua\nPiscataway\npiscation\npiscatology\npiscator\npiscatorial\npiscatorialist\npiscatorially\npiscatorian\npiscatorious\npiscatory\nPisces\npiscian\npiscicapture\npiscicapturist\npiscicolous\npiscicultural\npisciculturally\npisciculture\npisciculturist\nPiscid\nPiscidia\npiscifauna\npisciferous\npisciform\npiscina\npiscinal\npiscine\npiscinity\nPiscis\npiscivorous\npisco\npise\npish\npishaug\npishogue\nPishquow\npishu\nPisidium\npisiform\nPisistratean\nPisistratidae\npisk\npisky\npismire\npismirism\npiso\npisolite\npisolitic\nPisonia\npiss\npissabed\npissant\npist\npistache\npistachio\nPistacia\npistacite\npistareen\nPistia\npistic\npistil\npistillaceous\npistillar\npistillary\npistillate\npistillid\npistilliferous\npistilliform\npistilligerous\npistilline\npistillode\npistillody\npistilloid\npistilogy\npistle\nPistoiese\npistol\npistole\npistoleer\npistolet\npistolgram\npistolgraph\npistollike\npistolography\npistology\npistolproof\npistolwise\npiston\npistonhead\npistonlike\npistrix\nPisum\npit\npita\nPitahauerat\nPitahauirata\npitahaya\npitanga\npitangua\npitapat\npitapatation\npitarah\npitau\nPitawas\npitaya\npitayita\nPitcairnia\npitch\npitchable\npitchblende\npitcher\npitchered\npitcherful\npitcherlike\npitcherman\npitchfork\npitchhole\npitchi\npitchiness\npitching\npitchlike\npitchman\npitchometer\npitchout\npitchpike\npitchpole\npitchpoll\npitchstone\npitchwork\npitchy\npiteous\npiteously\npiteousness\npitfall\npith\npithecan\npithecanthrope\npithecanthropic\npithecanthropid\nPithecanthropidae\npithecanthropoid\nPithecanthropus\nPithecia\npithecian\nPitheciinae\npitheciine\npithecism\npithecoid\nPithecolobium\npithecological\npithecometric\npithecomorphic\npithecomorphism\npithful\npithily\npithiness\npithless\npithlessly\nPithoegia\nPithoigia\npithole\npithos\npithsome\npithwork\npithy\npitiability\npitiable\npitiableness\npitiably\npitiedly\npitiedness\npitier\npitiful\npitifully\npitifulness\npitikins\npitiless\npitilessly\npitilessness\npitless\npitlike\npitmaker\npitmaking\npitman\npitmark\npitmirk\npitometer\npitpan\npitpit\npitside\nPitta\npittacal\npittance\npittancer\npitted\npitter\npitticite\nPittidae\npittine\npitting\nPittism\nPittite\npittite\npittoid\nPittosporaceae\npittosporaceous\npittospore\nPittosporum\nPittsburgher\npituital\npituitary\npituite\npituitous\npituitousness\nPituitrin\npituri\npitwood\npitwork\npitwright\npity\npitying\npityingly\nPitylus\npityocampa\npityproof\npityriasic\npityriasis\nPityrogramma\npityroid\npiuri\npiuricapsular\npivalic\npivot\npivotal\npivotally\npivoter\npix\npixie\npixilated\npixilation\npixy\npize\npizza\npizzeria\npizzicato\npizzle\nplacability\nplacable\nplacableness\nplacably\nPlacaean\nplacard\nplacardeer\nplacarder\nplacate\nplacater\nplacation\nplacative\nplacatively\nplacatory\nplaccate\nplace\nplaceable\nPlacean\nplacebo\nplaceful\nplaceless\nplacelessly\nplacemaker\nplacemaking\nplaceman\nplacemanship\nplacement\nplacemonger\nplacemongering\nplacenta\nplacental\nPlacentalia\nplacentalian\nplacentary\nplacentate\nplacentation\nplacentiferous\nplacentiform\nplacentigerous\nplacentitis\nplacentoid\nplacentoma\nplacer\nplacet\nplacewoman\nplacid\nplacidity\nplacidly\nplacidness\nplacitum\nplack\nplacket\nplackless\nplacochromatic\nplacode\nplacoderm\nplacodermal\nplacodermatous\nPlacodermi\nplacodermoid\nplacodont\nPlacodontia\nPlacodus\nplacoganoid\nplacoganoidean\nPlacoganoidei\nplacoid\nplacoidal\nplacoidean\nPlacoidei\nPlacoides\nPlacophora\nplacophoran\nplacoplast\nplacula\nplacuntitis\nplacuntoma\nPlacus\npladaroma\npladarosis\nplaga\nplagal\nplagate\nplage\nPlagianthus\nplagiaplite\nplagiarical\nplagiarism\nplagiarist\nplagiaristic\nplagiaristically\nplagiarization\nplagiarize\nplagiarizer\nplagiary\nplagihedral\nplagiocephalic\nplagiocephalism\nplagiocephaly\nPlagiochila\nplagioclase\nplagioclasite\nplagioclastic\nplagioclinal\nplagiodont\nplagiograph\nplagioliparite\nplagionite\nplagiopatagium\nplagiophyre\nPlagiostomata\nplagiostomatous\nplagiostome\nPlagiostomi\nplagiostomous\nplagiotropic\nplagiotropically\nplagiotropism\nplagiotropous\nplagium\nplagose\nplagosity\nplague\nplagued\nplagueful\nplagueless\nplagueproof\nplaguer\nplaguesome\nplaguesomeness\nplaguily\nplaguy\nplaice\nplaid\nplaided\nplaidie\nplaiding\nplaidman\nplaidy\nplain\nplainback\nplainbacks\nplainer\nplainful\nplainhearted\nplainish\nplainly\nplainness\nplainscraft\nplainsfolk\nplainsman\nplainsoled\nplainstones\nplainswoman\nplaint\nplaintail\nplaintiff\nplaintiffship\nplaintile\nplaintive\nplaintively\nplaintiveness\nplaintless\nplainward\nplaister\nplait\nplaited\nplaiter\nplaiting\nplaitless\nplaitwork\nplak\nplakat\nplan\nplanable\nplanaea\nplanar\nPlanaria\nplanarian\nPlanarida\nplanaridan\nplanariform\nplanarioid\nplanarity\nplanate\nplanation\nplanch\nplancheite\nplancher\nplanchet\nplanchette\nplanching\nplanchment\nplancier\nPlanckian\nplandok\nplane\nplaneness\nplaner\nPlanera\nplanet\nplaneta\nplanetable\nplanetabler\nplanetal\nplanetaria\nplanetarian\nplanetarily\nplanetarium\nplanetary\nplaneted\nplanetesimal\nplaneticose\nplaneting\nplanetist\nplanetkin\nplanetless\nplanetlike\nplanetogeny\nplanetography\nplanetoid\nplanetoidal\nplanetologic\nplanetologist\nplanetology\nplanetule\nplanform\nplanful\nplanfully\nplanfulness\nplang\nplangency\nplangent\nplangently\nplangor\nplangorous\nplanicaudate\nplanicipital\nplanidorsate\nplanifolious\nplaniform\nplanigraph\nplanilla\nplanimetric\nplanimetrical\nplanimetry\nplanineter\nplanipennate\nPlanipennia\nplanipennine\nplanipetalous\nplaniphyllous\nplanirostral\nplanirostrate\nplaniscope\nplaniscopic\nplanish\nplanisher\nplanispheral\nplanisphere\nplanispheric\nplanispherical\nplanispiral\nplanity\nplank\nplankage\nplankbuilt\nplanker\nplanking\nplankless\nplanklike\nplanksheer\nplankter\nplanktologist\nplanktology\nplankton\nplanktonic\nplanktont\nplankways\nplankwise\nplanky\nplanless\nplanlessly\nplanlessness\nplanner\nplanoblast\nplanoblastic\nPlanococcus\nplanoconical\nplanocylindric\nplanoferrite\nplanogamete\nplanograph\nplanographic\nplanographist\nplanography\nplanohorizontal\nplanolindrical\nplanometer\nplanometry\nplanomiller\nplanoorbicular\nPlanorbidae\nplanorbiform\nplanorbine\nPlanorbis\nplanorboid\nplanorotund\nPlanosarcina\nplanosol\nplanosome\nplanospiral\nplanospore\nplanosubulate\nplant\nplanta\nplantable\nplantad\nPlantae\nplantage\nPlantaginaceae\nplantaginaceous\nPlantaginales\nplantagineous\nPlantago\nplantain\nplantal\nplantar\nplantaris\nplantarium\nplantation\nplantationlike\nplantdom\nplanter\nplanterdom\nplanterly\nplantership\nPlantigrada\nplantigrade\nplantigrady\nplanting\nplantivorous\nplantless\nplantlet\nplantlike\nplantling\nplantocracy\nplantsman\nplantula\nplantular\nplantule\nplanula\nplanulan\nplanular\nplanulate\nplanuliform\nplanuloid\nPlanuloidea\nplanuria\nplanury\nplanxty\nplap\nplappert\nplaque\nplaquette\nplash\nplasher\nplashet\nplashingly\nplashment\nplashy\nplasm\nplasma\nplasmagene\nplasmapheresis\nplasmase\nplasmatic\nplasmatical\nplasmation\nplasmatoparous\nplasmatorrhexis\nplasmic\nplasmocyte\nplasmocytoma\nplasmode\nplasmodesm\nplasmodesma\nplasmodesmal\nplasmodesmic\nplasmodesmus\nplasmodia\nplasmodial\nplasmodiate\nplasmodic\nplasmodiocarp\nplasmodiocarpous\nPlasmodiophora\nPlasmodiophoraceae\nPlasmodiophorales\nplasmodium\nplasmogen\nplasmolysis\nplasmolytic\nplasmolytically\nplasmolyzability\nplasmolyzable\nplasmolyze\nplasmoma\nPlasmon\nPlasmopara\nplasmophagous\nplasmophagy\nplasmoptysis\nplasmosoma\nplasmosome\nplasmotomy\nplasome\nplass\nplasson\nplastein\nplaster\nplasterbill\nplasterboard\nplasterer\nplasteriness\nplastering\nplasterlike\nplasterwise\nplasterwork\nplastery\nPlastic\nplastic\nplastically\nplasticimeter\nPlasticine\nplasticine\nplasticism\nplasticity\nplasticization\nplasticize\nplasticizer\nplasticly\nplastics\nplastid\nplastidium\nplastidome\nPlastidozoa\nplastidular\nplastidule\nplastify\nplastin\nplastinoid\nplastisol\nplastochondria\nplastochron\nplastochrone\nplastodynamia\nplastodynamic\nplastogamic\nplastogamy\nplastogene\nplastomere\nplastometer\nplastosome\nplastotype\nplastral\nplastron\nplastrum\nplat\nPlataean\nPlatalea\nPlataleidae\nplataleiform\nPlataleinae\nplataleine\nplatan\nPlatanaceae\nplatanaceous\nplatane\nplatanist\nPlatanista\nPlatanistidae\nplatano\nPlatanus\nplatband\nplatch\nplate\nplatea\nplateasm\nplateau\nplateaux\nplated\nplateful\nplateholder\nplateiasmus\nplatelayer\nplateless\nplatelet\nplatelike\nplatemaker\nplatemaking\nplateman\nplaten\nplater\nplaterer\nplateresque\nplatery\nplateway\nplatework\nplateworker\nplatform\nplatformally\nplatformed\nplatformer\nplatformish\nplatformism\nplatformist\nplatformistic\nplatformless\nplatformy\nplatic\nplaticly\nplatilla\nplatina\nplatinamine\nplatinammine\nplatinate\nPlatine\nplating\nplatinic\nplatinichloric\nplatinichloride\nplatiniferous\nplatiniridium\nplatinite\nplatinization\nplatinize\nplatinochloric\nplatinochloride\nplatinocyanic\nplatinocyanide\nplatinoid\nplatinotype\nplatinous\nplatinum\nplatinumsmith\nplatitude\nplatitudinal\nplatitudinarian\nplatitudinarianism\nplatitudinism\nplatitudinist\nplatitudinization\nplatitudinize\nplatitudinizer\nplatitudinous\nplatitudinously\nplatitudinousness\nPlatoda\nplatode\nPlatodes\nplatoid\nPlatonesque\nplatonesque\nPlatonian\nPlatonic\nPlatonical\nPlatonically\nPlatonicalness\nPlatonician\nPlatonicism\nPlatonism\nPlatonist\nPlatonistic\nPlatonization\nPlatonize\nPlatonizer\nplatoon\nplatopic\nplatosamine\nplatosammine\nPlatt\nPlattdeutsch\nplatted\nplatten\nplatter\nplatterface\nplatterful\nplatting\nplattnerite\nplatty\nplaturous\nplaty\nplatybasic\nplatybrachycephalic\nplatybrachycephalous\nplatybregmatic\nplatycarpous\nPlatycarpus\nPlatycarya\nplatycelian\nplatycelous\nplatycephalic\nPlatycephalidae\nplatycephalism\nplatycephaloid\nplatycephalous\nPlatycephalus\nplatycephaly\nPlatycercinae\nplatycercine\nPlatycercus\nPlatycerium\nplatycheiria\nplatycnemia\nplatycnemic\nPlatycodon\nplatycoria\nplatycrania\nplatycranial\nPlatyctenea\nplatycyrtean\nplatydactyl\nplatydactyle\nplatydactylous\nplatydolichocephalic\nplatydolichocephalous\nplatyfish\nplatyglossal\nplatyglossate\nplatyglossia\nPlatyhelmia\nplatyhelminth\nPlatyhelminthes\nplatyhelminthic\nplatyhieric\nplatykurtic\nplatylobate\nplatymeria\nplatymeric\nplatymery\nplatymesaticephalic\nplatymesocephalic\nplatymeter\nplatymyoid\nplatynite\nplatynotal\nplatyodont\nplatyope\nplatyopia\nplatyopic\nplatypellic\nplatypetalous\nplatyphyllous\nplatypod\nPlatypoda\nplatypodia\nplatypodous\nPlatyptera\nplatypus\nplatypygous\nPlatyrhina\nPlatyrhini\nplatyrhynchous\nplatyrrhin\nPlatyrrhina\nplatyrrhine\nPlatyrrhini\nplatyrrhinian\nplatyrrhinic\nplatyrrhinism\nplatyrrhiny\nplatysma\nplatysmamyoides\nplatysomid\nPlatysomidae\nPlatysomus\nplatystaphyline\nPlatystemon\nplatystencephalia\nplatystencephalic\nplatystencephalism\nplatystencephaly\nplatysternal\nPlatysternidae\nPlatystomidae\nplatystomous\nplatytrope\nplatytropy\nplaud\nplaudation\nplaudit\nplaudite\nplauditor\nplauditory\nplauenite\nplausibility\nplausible\nplausibleness\nplausibly\nplausive\nplaustral\nPlautine\nPlautus\nplay\nplaya\nplayability\nplayable\nplayback\nplaybill\nplaybook\nplaybox\nplayboy\nplayboyism\nplaybroker\nplaycraft\nplaycraftsman\nplayday\nplaydown\nplayer\nplayerdom\nplayeress\nplayfellow\nplayfellowship\nplayfield\nplayfolk\nplayful\nplayfully\nplayfulness\nplaygoer\nplaygoing\nplayground\nplayhouse\nplayingly\nplayless\nplaylet\nplaylike\nplaymaker\nplaymaking\nplayman\nplaymare\nplaymate\nplaymonger\nplaymongering\nplayock\nplaypen\nplayreader\nplayroom\nplayscript\nplaysome\nplaysomely\nplaysomeness\nplaystead\nplaything\nplaytime\nplayward\nplaywoman\nplaywork\nplaywright\nplaywrightess\nplaywrighting\nplaywrightry\nplaywriter\nplaywriting\nplaza\nplazolite\nplea\npleach\npleached\npleacher\nplead\npleadable\npleadableness\npleader\npleading\npleadingly\npleadingness\npleaproof\npleasable\npleasableness\npleasance\npleasant\npleasantable\npleasantish\npleasantly\npleasantness\npleasantry\npleasantsome\nplease\npleasedly\npleasedness\npleaseman\npleaser\npleaship\npleasing\npleasingly\npleasingness\npleasurability\npleasurable\npleasurableness\npleasurably\npleasure\npleasureful\npleasurehood\npleasureless\npleasurelessly\npleasureman\npleasurement\npleasuremonger\npleasureproof\npleasurer\npleasuring\npleasurist\npleasurous\npleat\npleater\npleatless\npleb\nplebe\nplebeian\nplebeiance\nplebeianize\nplebeianly\nplebeianness\nplebeity\nplebianism\nplebicolar\nplebicolist\nplebificate\nplebification\nplebify\nplebiscitarian\nplebiscitarism\nplebiscitary\nplebiscite\nplebiscitic\nplebiscitum\nplebs\npleck\nPlecoptera\nplecopteran\nplecopterid\nplecopterous\nPlecotinae\nplecotine\nPlecotus\nplectognath\nPlectognathi\nplectognathic\nplectognathous\nplectopter\nplectopteran\nplectopterous\nplectospondyl\nPlectospondyli\nplectospondylous\nplectre\nplectridial\nplectridium\nplectron\nplectrum\npled\npledge\npledgeable\npledgee\npledgeless\npledgeor\npledger\npledgeshop\npledget\npledgor\nPlegadis\nplegaphonia\nplegometer\nPleiades\npleiobar\npleiochromia\npleiochromic\npleiomastia\npleiomazia\npleiomerous\npleiomery\npleion\nPleione\npleionian\npleiophyllous\npleiophylly\npleiotaxis\npleiotropic\npleiotropically\npleiotropism\nPleistocene\nPleistocenic\npleistoseist\nplemochoe\nplemyrameter\nplenarily\nplenariness\nplenarium\nplenarty\nplenary\nplenicorn\npleniloquence\nplenilunal\nplenilunar\nplenilunary\nplenilune\nplenipo\nplenipotence\nplenipotent\nplenipotential\nplenipotentiality\nplenipotentiarily\nplenipotentiarize\nPlenipotentiary\nplenipotentiary\nplenipotentiaryship\nplenish\nplenishing\nplenishment\nplenism\nplenist\nplenitide\nplenitude\nplenitudinous\nplenshing\nplenteous\nplenteously\nplenteousness\nplentiful\nplentifully\nplentifulness\nplentify\nplenty\nplenum\npleny\npleochroic\npleochroism\npleochroitic\npleochromatic\npleochromatism\npleochroous\npleocrystalline\npleodont\npleomastia\npleomastic\npleomazia\npleometrosis\npleometrotic\npleomorph\npleomorphic\npleomorphism\npleomorphist\npleomorphous\npleomorphy\npleon\npleonal\npleonasm\npleonast\npleonaste\npleonastic\npleonastical\npleonastically\npleonectic\npleonexia\npleonic\npleophyletic\npleopod\npleopodite\nPleospora\nPleosporaceae\nplerergate\nplerocercoid\npleroma\npleromatic\nplerome\npleromorph\nplerophoric\nplerophory\nplerosis\nplerotic\nPlesianthropus\nplesiobiosis\nplesiobiotic\nplesiomorphic\nplesiomorphism\nplesiomorphous\nplesiosaur\nPlesiosauri\nPlesiosauria\nplesiosaurian\nplesiosauroid\nPlesiosaurus\nplesiotype\nplessigraph\nplessimeter\nplessimetric\nplessimetry\nplessor\nPlethodon\nplethodontid\nPlethodontidae\nplethora\nplethoretic\nplethoretical\nplethoric\nplethorical\nplethorically\nplethorous\nplethory\nplethysmograph\nplethysmographic\nplethysmographically\nplethysmography\npleura\nPleuracanthea\nPleuracanthidae\nPleuracanthini\npleuracanthoid\nPleuracanthus\npleural\npleuralgia\npleuralgic\npleurapophysial\npleurapophysis\npleurectomy\npleurenchyma\npleurenchymatous\npleuric\npleuriseptate\npleurisy\npleurite\npleuritic\npleuritical\npleuritically\npleuritis\nPleurobrachia\nPleurobrachiidae\npleurobranch\npleurobranchia\npleurobranchial\npleurobranchiate\npleurobronchitis\nPleurocapsa\nPleurocapsaceae\npleurocapsaceous\npleurocarp\nPleurocarpi\npleurocarpous\npleurocele\npleurocentesis\npleurocentral\npleurocentrum\nPleurocera\npleurocerebral\nPleuroceridae\npleuroceroid\nPleurococcaceae\npleurococcaceous\nPleurococcus\nPleurodelidae\nPleurodira\npleurodiran\npleurodire\npleurodirous\npleurodiscous\npleurodont\npleurodynia\npleurodynic\npleurogenic\npleurogenous\npleurohepatitis\npleuroid\npleurolith\npleurolysis\npleuron\nPleuronectes\npleuronectid\nPleuronectidae\npleuronectoid\nPleuronema\npleuropedal\npleuropericardial\npleuropericarditis\npleuroperitonaeal\npleuroperitoneal\npleuroperitoneum\npleuropneumonia\npleuropneumonic\npleuropodium\npleuropterygian\nPleuropterygii\npleuropulmonary\npleurorrhea\nPleurosaurus\nPleurosigma\npleurospasm\npleurosteal\nPleurosteon\npleurostict\nPleurosticti\nPleurostigma\npleurothotonic\npleurothotonus\nPleurotoma\nPleurotomaria\nPleurotomariidae\npleurotomarioid\nPleurotomidae\npleurotomine\npleurotomoid\npleurotomy\npleurotonic\npleurotonus\nPleurotremata\npleurotribal\npleurotribe\npleurotropous\nPleurotus\npleurotyphoid\npleurovisceral\npleurum\npleuston\npleustonic\nplew\nplex\nplexal\nplexicose\nplexiform\npleximeter\npleximetric\npleximetry\nplexodont\nplexometer\nplexor\nplexure\nplexus\npliability\npliable\npliableness\npliably\npliancy\npliant\npliantly\npliantness\nplica\nplicable\nplical\nplicate\nplicated\nplicately\nplicateness\nplicater\nplicatile\nplication\nplicative\nplicatocontorted\nplicatocristate\nplicatolacunose\nplicatolobate\nplicatopapillose\nplicator\nplicatoundulate\nplicatulate\nplicature\npliciferous\npliciform\nplied\nplier\nplies\npliers\nplight\nplighted\nplighter\nplim\nplimsoll\nPlinian\nplinth\nplinther\nplinthiform\nplinthless\nplinthlike\nPliny\nPlinyism\nPliocene\nPliohippus\nPliopithecus\npliosaur\npliosaurian\nPliosauridae\nPliosaurus\npliothermic\nPliotron\npliskie\nplisky\nploat\nploce\nPloceidae\nploceiform\nPloceinae\nPloceus\nplock\nplod\nplodder\nplodderly\nplodding\nploddingly\nploddingness\nplodge\nPloima\nploimate\nplomb\nplook\nplop\nploration\nploratory\nplosion\nplosive\nplot\nplote\nplotful\nPlotinian\nPlotinic\nPlotinical\nPlotinism\nPlotinist\nPlotinize\nplotless\nplotlessness\nplotproof\nplottage\nplotted\nplotter\nplottery\nplotting\nplottingly\nplotty\nplough\nploughmanship\nploughtail\nplouk\nplouked\nplouky\nplounce\nplousiocracy\nplout\nPlouteneion\nplouter\nplover\nploverlike\nplovery\nplow\nplowable\nplowbote\nplowboy\nplower\nplowfish\nplowfoot\nplowgang\nplowgate\nplowgraith\nplowhead\nplowing\nplowjogger\nplowland\nplowlight\nplowline\nplowmaker\nplowman\nplowmanship\nplowmell\nplowpoint\nPlowrightia\nplowshare\nplowshoe\nplowstaff\nplowstilt\nplowtail\nplowwise\nplowwoman\nplowwright\nploy\nployment\nPluchea\npluck\npluckage\nplucked\npluckedness\nplucker\nPluckerian\npluckily\npluckiness\npluckless\nplucklessness\nplucky\nplud\npluff\npluffer\npluffy\nplug\nplugboard\nplugdrawer\npluggable\nplugged\nplugger\nplugging\npluggingly\npluggy\nplughole\nplugless\npluglike\nplugman\nplugtray\nplugtree\nplum\npluma\nplumaceous\nplumach\nplumade\nplumage\nplumaged\nplumagery\nplumasite\nplumate\nPlumatella\nplumatellid\nPlumatellidae\nplumatelloid\nplumb\nplumbable\nplumbage\nPlumbaginaceae\nplumbaginaceous\nplumbagine\nplumbaginous\nplumbago\nplumbate\nplumbean\nplumbeous\nplumber\nplumbership\nplumbery\nplumbet\nplumbic\nplumbiferous\nplumbing\nplumbism\nplumbisolvent\nplumbite\nplumbless\nplumbness\nplumbog\nplumbojarosite\nplumboniobate\nplumbosolvency\nplumbosolvent\nplumbous\nplumbum\nplumcot\nplumdamas\nplumdamis\nplume\nplumed\nplumeless\nplumelet\nplumelike\nplumemaker\nplumemaking\nplumeopicean\nplumeous\nplumer\nplumery\nplumet\nplumette\nplumicorn\nplumier\nPlumiera\nplumieride\nplumification\nplumiform\nplumiformly\nplumify\nplumigerous\npluminess\nplumiped\nplumipede\nplumist\nplumless\nplumlet\nplumlike\nplummer\nplummet\nplummeted\nplummetless\nplummy\nplumose\nplumosely\nplumoseness\nplumosity\nplumous\nplump\nplumpen\nplumper\nplumping\nplumpish\nplumply\nplumpness\nplumps\nplumpy\nplumula\nplumulaceous\nplumular\nPlumularia\nplumularian\nPlumulariidae\nplumulate\nplumule\nplumuliform\nplumulose\nplumy\nplunder\nplunderable\nplunderage\nplunderbund\nplunderer\nplunderess\nplundering\nplunderingly\nplunderless\nplunderous\nplunderproof\nplunge\nplunger\nplunging\nplungingly\nplunk\nplunther\nplup\nplupatriotic\npluperfect\npluperfectly\npluperfectness\nplural\npluralism\npluralist\npluralistic\npluralistically\nplurality\npluralization\npluralize\npluralizer\nplurally\nplurative\nplurennial\npluriaxial\npluricarinate\npluricarpellary\npluricellular\npluricentral\npluricipital\npluricuspid\npluricuspidate\npluridentate\npluries\nplurifacial\nplurifetation\nplurification\npluriflagellate\npluriflorous\nplurifoliate\nplurifoliolate\nplurify\npluriglandular\npluriguttulate\nplurilateral\nplurilingual\nplurilingualism\nplurilingualist\nplurilocular\nplurimammate\nplurinominal\nplurinucleate\npluripara\npluriparity\npluriparous\npluripartite\npluripetalous\npluripotence\npluripotent\npluripresence\npluriseptate\npluriserial\npluriseriate\npluriseriated\nplurisetose\nplurispiral\nplurisporous\nplurisyllabic\nplurisyllable\nplurivalent\nplurivalve\nplurivorous\nplurivory\nplus\nplush\nplushed\nplushette\nplushily\nplushiness\nplushlike\nplushy\nPlusia\nPlusiinae\nplusquamperfect\nplussage\nPlutarchian\nPlutarchic\nPlutarchical\nPlutarchically\nplutarchy\npluteal\nplutean\npluteiform\nPlutella\npluteus\nPluto\nplutocracy\nplutocrat\nplutocratic\nplutocratical\nplutocratically\nplutolatry\nplutological\nplutologist\nplutology\nplutomania\nPlutonian\nplutonian\nplutonic\nPlutonion\nplutonism\nplutonist\nplutonite\nPlutonium\nplutonium\nplutonometamorphism\nplutonomic\nplutonomist\nplutonomy\npluvial\npluvialiform\npluvialine\nPluvialis\npluvian\npluvine\npluviograph\npluviographic\npluviographical\npluviography\npluviometer\npluviometric\npluviometrical\npluviometrically\npluviometry\npluvioscope\npluviose\npluviosity\npluvious\nply\nplyer\nplying\nplyingly\nPlymouth\nPlymouthism\nPlymouthist\nPlymouthite\nPlynlymmon\nplywood\npneodynamics\npneograph\npneomanometer\npneometer\npneometry\npneophore\npneoscope\npneuma\npneumarthrosis\npneumathaemia\npneumatic\npneumatical\npneumatically\npneumaticity\npneumatics\npneumatism\npneumatist\npneumatize\npneumatized\npneumatocardia\npneumatocele\npneumatochemical\npneumatochemistry\npneumatocyst\npneumatocystic\npneumatode\npneumatogenic\npneumatogenous\npneumatogram\npneumatograph\npneumatographer\npneumatographic\npneumatography\npneumatolitic\npneumatologic\npneumatological\npneumatologist\npneumatology\npneumatolysis\npneumatolytic\nPneumatomachian\nPneumatomachist\nPneumatomachy\npneumatometer\npneumatometry\npneumatomorphic\npneumatonomy\npneumatophany\npneumatophilosophy\npneumatophobia\npneumatophonic\npneumatophony\npneumatophore\npneumatophorous\npneumatorrhachis\npneumatoscope\npneumatosic\npneumatosis\npneumatotactic\npneumatotherapeutics\npneumatotherapy\nPneumatria\npneumaturia\npneumectomy\npneumobacillus\nPneumobranchia\nPneumobranchiata\npneumocele\npneumocentesis\npneumochirurgia\npneumococcal\npneumococcemia\npneumococcic\npneumococcous\npneumococcus\npneumoconiosis\npneumoderma\npneumodynamic\npneumodynamics\npneumoencephalitis\npneumoenteritis\npneumogastric\npneumogram\npneumograph\npneumographic\npneumography\npneumohemothorax\npneumohydropericardium\npneumohydrothorax\npneumolith\npneumolithiasis\npneumological\npneumology\npneumolysis\npneumomalacia\npneumomassage\nPneumometer\npneumomycosis\npneumonalgia\npneumonectasia\npneumonectomy\npneumonedema\npneumonia\npneumonic\npneumonitic\npneumonitis\npneumonocace\npneumonocarcinoma\npneumonocele\npneumonocentesis\npneumonocirrhosis\npneumonoconiosis\npneumonodynia\npneumonoenteritis\npneumonoerysipelas\npneumonographic\npneumonography\npneumonokoniosis\npneumonolith\npneumonolithiasis\npneumonolysis\npneumonomelanosis\npneumonometer\npneumonomycosis\npneumonoparesis\npneumonopathy\npneumonopexy\npneumonophorous\npneumonophthisis\npneumonopleuritis\npneumonorrhagia\npneumonorrhaphy\npneumonosis\npneumonotherapy\npneumonotomy\npneumony\npneumopericardium\npneumoperitoneum\npneumoperitonitis\npneumopexy\npneumopleuritis\npneumopyothorax\npneumorrachis\npneumorrhachis\npneumorrhagia\npneumotactic\npneumotherapeutics\npneumotherapy\npneumothorax\npneumotomy\npneumotoxin\npneumotropic\npneumotropism\npneumotyphoid\npneumotyphus\npneumoventriculography\nPo\npo\nPoa\nPoaceae\npoaceous\npoach\npoachable\npoacher\npoachiness\npoachy\nPoales\npoalike\npob\npobby\nPoblacht\npoblacion\npobs\npochade\npochard\npochay\npoche\npochette\npocilliform\npock\npocket\npocketable\npocketableness\npocketbook\npocketed\npocketer\npocketful\npocketing\npocketknife\npocketless\npocketlike\npockety\npockhouse\npockily\npockiness\npockmanteau\npockmantie\npockmark\npockweed\npockwood\npocky\npoco\npococurante\npococuranteism\npococurantic\npococurantish\npococurantism\npococurantist\npocosin\npoculary\npoculation\npoculent\npoculiform\npod\npodagra\npodagral\npodagric\npodagrical\npodagrous\npodal\npodalgia\npodalic\nPodaliriidae\nPodalirius\nPodarge\nPodargidae\nPodarginae\npodargine\npodargue\nPodargus\npodarthral\npodarthritis\npodarthrum\npodatus\nPodaxonia\npodaxonial\npodded\npodder\npoddidge\npoddish\npoddle\npoddy\npodelcoma\npodeon\npodesta\npodesterate\npodetiiform\npodetium\npodex\npodge\npodger\npodgily\npodginess\npodgy\npodial\npodiatrist\npodiatry\npodical\nPodiceps\npodices\nPodicipedidae\npodilegous\npodite\npoditic\npoditti\npodium\npodler\npodley\npodlike\npodobranch\npodobranchia\npodobranchial\npodobranchiate\npodocarp\nPodocarpaceae\nPodocarpineae\npodocarpous\nPodocarpus\npodocephalous\npododerm\npododynia\npodogyn\npodogyne\npodogynium\nPodolian\npodolite\npodology\npodomancy\npodomere\npodometer\npodometry\nPodophrya\nPodophryidae\nPodophthalma\nPodophthalmata\npodophthalmate\npodophthalmatous\nPodophthalmia\npodophthalmian\npodophthalmic\npodophthalmite\npodophthalmitic\npodophthalmous\nPodophyllaceae\npodophyllic\npodophyllin\npodophyllotoxin\npodophyllous\nPodophyllum\npodophyllum\npodoscaph\npodoscapher\npodoscopy\nPodosomata\npodosomatous\npodosperm\nPodosphaera\nPodostemaceae\npodostemaceous\npodostemad\nPodostemon\nPodostemonaceae\npodostemonaceous\nPodostomata\npodostomatous\npodotheca\npodothecal\nPodozamites\nPodsnap\nPodsnappery\npodsol\npodsolic\npodsolization\npodsolize\nPodunk\nPodura\npoduran\npodurid\nPoduridae\npodware\npodzol\npodzolic\npodzolization\npodzolize\npoe\nPoecile\nPoeciliidae\npoecilitic\nPoecilocyttares\npoecilocyttarous\npoecilogonous\npoecilogony\npoecilomere\npoecilonym\npoecilonymic\npoecilonymy\npoecilopod\nPoecilopoda\npoecilopodous\npoem\npoematic\npoemet\npoemlet\nPoephaga\npoephagous\nPoephagus\npoesie\npoesiless\npoesis\npoesy\npoet\npoetaster\npoetastering\npoetasterism\npoetastery\npoetastress\npoetastric\npoetastrical\npoetastry\npoetcraft\npoetdom\npoetesque\npoetess\npoethood\npoetic\npoetical\npoeticality\npoetically\npoeticalness\npoeticism\npoeticize\npoeticness\npoetics\npoeticule\npoetito\npoetization\npoetize\npoetizer\npoetless\npoetlike\npoetling\npoetly\npoetomachia\npoetress\npoetry\npoetryless\npoetship\npoetwise\npogamoggan\npogge\npoggy\nPogo\nPogonatum\nPogonia\npogoniasis\npogoniate\npogonion\npogonip\npogoniris\npogonite\npogonological\npogonologist\npogonology\npogonotomy\npogonotrophy\npogrom\npogromist\npogromize\npogy\npoh\npoha\npohickory\npohna\npohutukawa\npoi\nPoiana\nPoictesme\npoietic\npoignance\npoignancy\npoignant\npoignantly\npoignet\npoikilitic\npoikiloblast\npoikiloblastic\npoikilocyte\npoikilocythemia\npoikilocytosis\npoikilotherm\npoikilothermic\npoikilothermism\npoil\npoilu\npoimenic\npoimenics\nPoinciana\npoind\npoindable\npoinder\npoinding\nPoinsettia\npoint\npointable\npointage\npointed\npointedly\npointedness\npointel\npointer\npointful\npointfully\npointfulness\npointillism\npointillist\npointing\npointingly\npointless\npointlessly\npointlessness\npointlet\npointleted\npointmaker\npointman\npointment\npointrel\npointsman\npointswoman\npointways\npointwise\npointy\npoisable\npoise\npoised\npoiser\npoison\npoisonable\npoisonful\npoisonfully\npoisoning\npoisonless\npoisonlessness\npoisonmaker\npoisonous\npoisonously\npoisonousness\npoisonproof\npoisonweed\npoisonwood\npoitrail\npoitrel\npoivrade\npokable\nPokan\nPokanoket\npoke\npokeberry\npoked\npokeful\npokeloken\npokeout\npoker\npokerish\npokerishly\npokerishness\npokeroot\npokeweed\npokey\npokily\npokiness\npoking\nPokom\nPokomam\nPokomo\npokomoo\nPokonchi\npokunt\npoky\npol\nPolab\nPolabian\nPolabish\npolacca\nPolack\npolack\npolacre\nPolander\nPolanisia\npolar\npolaric\nPolarid\npolarigraphic\npolarimeter\npolarimetric\npolarimetry\nPolaris\npolariscope\npolariscopic\npolariscopically\npolariscopist\npolariscopy\npolaristic\npolaristrobometer\npolarity\npolarizability\npolarizable\npolarization\npolarize\npolarizer\npolarly\npolarogram\npolarograph\npolarographic\npolarographically\npolarography\nPolaroid\npolarward\npolaxis\npoldavis\npoldavy\npolder\npolderboy\npolderman\nPole\npole\npolearm\npoleax\npoleaxe\npoleaxer\npoleburn\npolecat\npolehead\npoleless\npoleman\npolemarch\npolemic\npolemical\npolemically\npolemician\npolemicist\npolemics\npolemist\npolemize\nPolemoniaceae\npolemoniaceous\nPolemoniales\nPolemonium\npolemoscope\npolenta\npoler\npolesetter\nPolesian\npolesman\npolestar\npoleward\npolewards\npoley\npoliad\npoliadic\nPolian\npolianite\nPolianthes\npolice\npoliced\npolicedom\npoliceless\npoliceman\npolicemanish\npolicemanism\npolicemanlike\npolicemanship\npolicewoman\nPolichinelle\npolicial\npolicize\npolicizer\npoliclinic\npolicy\npolicyholder\npoliencephalitis\npoliencephalomyelitis\npoligar\npoligarship\npoligraphical\nPolinices\npolio\npolioencephalitis\npolioencephalomyelitis\npoliomyelitis\npoliomyelopathy\npolioneuromere\npoliorcetic\npoliorcetics\npoliosis\npolis\nPolish\npolish\npolishable\npolished\npolishedly\npolishedness\npolisher\npolishment\npolisman\npolissoir\nPolistes\npolitarch\npolitarchic\nPolitbureau\nPolitburo\npolite\npoliteful\npolitely\npoliteness\npolitesse\npolitic\npolitical\npoliticalism\npoliticalize\npolitically\npoliticaster\npolitician\npoliticious\npoliticist\npoliticize\npoliticizer\npoliticly\npolitico\npoliticomania\npoliticophobia\npolitics\npolitied\nPolitique\npolitist\npolitize\npolity\npolitzerization\npolitzerize\npolk\npolka\nPoll\npoll\npollable\npollack\npolladz\npollage\npollakiuria\npollam\npollan\npollarchy\npollard\npollbook\npolled\npollen\npollened\npolleniferous\npollenigerous\npollenite\npollenivorous\npollenless\npollenlike\npollenproof\npollent\npoller\npolleten\npollex\npollical\npollicar\npollicate\npollicitation\npollinar\npollinarium\npollinate\npollination\npollinator\npollinctor\npollincture\npolling\npollinia\npollinic\npollinical\npolliniferous\npollinigerous\npollinium\npollinivorous\npollinization\npollinize\npollinizer\npollinodial\npollinodium\npollinoid\npollinose\npollinosis\npolliwig\npolliwog\npollock\npolloi\npollster\npollucite\npollutant\npollute\npolluted\npollutedly\npollutedness\npolluter\npolluting\npollutingly\npollution\nPollux\npollux\nPolly\nPollyanna\nPollyannish\npollywog\npolo\npoloconic\npolocyte\npoloist\npolonaise\nPolonese\nPolonia\nPolonial\nPolonian\nPolonism\npolonium\nPolonius\nPolonization\nPolonize\npolony\npolos\npolska\npolt\npoltergeist\npoltfoot\npoltfooted\npoltina\npoltinnik\npoltophagic\npoltophagist\npoltophagy\npoltroon\npoltroonery\npoltroonish\npoltroonishly\npoltroonism\npoluphloisboic\npoluphloisboiotatotic\npoluphloisboiotic\npolverine\npoly\npolyacanthus\npolyacid\npolyacoustic\npolyacoustics\npolyact\npolyactinal\npolyactine\nPolyactinia\npolyad\npolyadelph\nPolyadelphia\npolyadelphian\npolyadelphous\npolyadenia\npolyadenitis\npolyadenoma\npolyadenous\npolyadic\npolyaffectioned\npolyalcohol\npolyamide\npolyamylose\nPolyandria\npolyandria\npolyandrian\npolyandrianism\npolyandric\npolyandrious\npolyandrism\npolyandrist\npolyandrium\npolyandrous\npolyandry\nPolyangium\npolyangular\npolyantha\npolyanthous\npolyanthus\npolyanthy\npolyarch\npolyarchal\npolyarchical\npolyarchist\npolyarchy\npolyarteritis\npolyarthric\npolyarthritic\npolyarthritis\npolyarthrous\npolyarticular\npolyatomic\npolyatomicity\npolyautographic\npolyautography\npolyaxial\npolyaxon\npolyaxone\npolyaxonic\npolybasic\npolybasicity\npolybasite\npolyblast\nPolyborinae\npolyborine\nPolyborus\npolybranch\nPolybranchia\npolybranchian\nPolybranchiata\npolybranchiate\npolybromid\npolybromide\npolybunous\npolybuny\npolybuttoned\npolycarboxylic\nPolycarp\npolycarpellary\npolycarpic\nPolycarpon\npolycarpous\npolycarpy\npolycellular\npolycentral\npolycentric\npolycephalic\npolycephalous\npolycephaly\nPolychaeta\npolychaete\npolychaetous\npolychasial\npolychasium\npolychloride\npolychoerany\npolychord\npolychotomous\npolychotomy\npolychrest\npolychrestic\npolychrestical\npolychresty\npolychroic\npolychroism\npolychromasia\npolychromate\npolychromatic\npolychromatism\npolychromatist\npolychromatize\npolychromatophil\npolychromatophile\npolychromatophilia\npolychromatophilic\npolychrome\npolychromia\npolychromic\npolychromism\npolychromize\npolychromous\npolychromy\npolychronious\npolyciliate\npolycitral\npolyclad\nPolycladida\npolycladine\npolycladose\npolycladous\npolyclady\nPolycletan\npolyclinic\npolyclona\npolycoccous\nPolycodium\npolyconic\npolycormic\npolycotyl\npolycotyledon\npolycotyledonary\npolycotyledonous\npolycotyledony\npolycotylous\npolycotyly\npolycracy\npolycrase\npolycratic\npolycrotic\npolycrotism\npolycrystalline\npolyctenid\nPolyctenidae\npolycttarian\npolycyanide\npolycyclic\npolycycly\npolycyesis\npolycystic\npolycythemia\npolycythemic\nPolycyttaria\npolydactyl\npolydactyle\npolydactylism\npolydactylous\nPolydactylus\npolydactyly\npolydaemoniac\npolydaemonism\npolydaemonist\npolydaemonistic\npolydemic\npolydenominational\npolydental\npolydermous\npolydermy\npolydigital\npolydimensional\npolydipsia\npolydisperse\npolydomous\npolydymite\npolydynamic\npolyeidic\npolyeidism\npolyembryonate\npolyembryonic\npolyembryony\npolyemia\npolyemic\npolyenzymatic\npolyergic\nPolyergus\npolyester\npolyesthesia\npolyesthetic\npolyethnic\npolyethylene\npolyfenestral\npolyflorous\npolyfoil\npolyfold\nPolygala\nPolygalaceae\npolygalaceous\npolygalic\npolygam\nPolygamia\npolygamian\npolygamic\npolygamical\npolygamically\npolygamist\npolygamistic\npolygamize\npolygamodioecious\npolygamous\npolygamously\npolygamy\npolyganglionic\npolygastric\npolygene\npolygenesic\npolygenesis\npolygenesist\npolygenetic\npolygenetically\npolygenic\npolygenism\npolygenist\npolygenistic\npolygenous\npolygeny\npolyglandular\npolyglobulia\npolyglobulism\npolyglossary\npolyglot\npolyglotry\npolyglottal\npolyglottally\npolyglotted\npolyglotter\npolyglottery\npolyglottic\npolyglottically\npolyglottism\npolyglottist\npolyglottonic\npolyglottous\npolyglotwise\npolyglycerol\npolygon\nPolygonaceae\npolygonaceous\npolygonal\nPolygonales\npolygonally\nPolygonatum\nPolygonella\npolygoneutic\npolygoneutism\nPolygonia\npolygonic\npolygonically\npolygonoid\npolygonous\nPolygonum\npolygony\nPolygordius\npolygram\npolygrammatic\npolygraph\npolygrapher\npolygraphic\npolygraphy\npolygroove\npolygrooved\npolygyn\npolygynaiky\nPolygynia\npolygynian\npolygynic\npolygynious\npolygynist\npolygynoecial\npolygynous\npolygyny\npolygyral\npolygyria\npolyhaemia\npolyhaemic\npolyhalide\npolyhalite\npolyhalogen\npolyharmonic\npolyharmony\npolyhedral\npolyhedric\npolyhedrical\npolyhedroid\npolyhedron\npolyhedrosis\npolyhedrous\npolyhemia\npolyhidrosis\npolyhistor\npolyhistorian\npolyhistoric\npolyhistory\npolyhybrid\npolyhydric\npolyhydroxy\npolyideic\npolyideism\npolyidrosis\npolyiodide\npolykaryocyte\npolylaminated\npolylemma\npolylepidous\npolylinguist\npolylith\npolylithic\npolylobular\npolylogy\npolyloquent\npolymagnet\npolymastia\npolymastic\nPolymastiga\npolymastigate\nPolymastigida\nPolymastigina\npolymastigous\npolymastism\nPolymastodon\npolymastodont\npolymasty\npolymath\npolymathic\npolymathist\npolymathy\npolymazia\npolymelia\npolymelian\npolymely\npolymer\npolymere\npolymeria\npolymeric\npolymeride\npolymerism\npolymerization\npolymerize\npolymerous\npolymetallism\npolymetameric\npolymeter\npolymethylene\npolymetochia\npolymetochic\npolymicrian\npolymicrobial\npolymicrobic\npolymicroscope\npolymignite\nPolymixia\npolymixiid\nPolymixiidae\nPolymnestor\nPolymnia\npolymnite\npolymolecular\npolymolybdate\npolymorph\nPolymorpha\npolymorphean\npolymorphic\npolymorphism\npolymorphistic\npolymorphonuclear\npolymorphonucleate\npolymorphosis\npolymorphous\npolymorphy\nPolymyaria\npolymyarian\nPolymyarii\nPolymyodi\npolymyodian\npolymyodous\npolymyoid\npolymyositis\npolymythic\npolymythy\npolynaphthene\npolynemid\nPolynemidae\npolynemoid\nPolynemus\nPolynesian\npolynesic\npolyneural\npolyneuric\npolyneuritic\npolyneuritis\npolyneuropathy\npolynodal\nPolynoe\npolynoid\nPolynoidae\npolynome\npolynomial\npolynomialism\npolynomialist\npolynomic\npolynucleal\npolynuclear\npolynucleate\npolynucleated\npolynucleolar\npolynucleosis\nPolyodon\npolyodont\npolyodontal\npolyodontia\nPolyodontidae\npolyodontoid\npolyoecious\npolyoeciously\npolyoeciousness\npolyoecism\npolyoecy\npolyoicous\npolyommatous\npolyonomous\npolyonomy\npolyonychia\npolyonym\npolyonymal\npolyonymic\npolyonymist\npolyonymous\npolyonymy\npolyophthalmic\npolyopia\npolyopic\npolyopsia\npolyopsy\npolyorama\npolyorchidism\npolyorchism\npolyorganic\npolyose\npolyoxide\npolyoxymethylene\npolyp\npolypage\npolypaged\npolypapilloma\npolyparasitic\npolyparasitism\npolyparesis\npolyparia\npolyparian\npolyparium\npolyparous\npolypary\npolypean\npolyped\nPolypedates\npolypeptide\npolypetal\nPolypetalae\npolypetalous\nPolyphaga\npolyphage\npolyphagia\npolyphagian\npolyphagic\npolyphagist\npolyphagous\npolyphagy\npolyphalangism\npolypharmacal\npolypharmacist\npolypharmacon\npolypharmacy\npolypharmic\npolyphasal\npolyphase\npolyphaser\nPolypheme\npolyphemian\npolyphemic\npolyphemous\npolyphenol\npolyphloesboean\npolyphloisboioism\npolyphloisboism\npolyphobia\npolyphobic\npolyphone\npolyphoned\npolyphonia\npolyphonic\npolyphonical\npolyphonism\npolyphonist\npolyphonium\npolyphonous\npolyphony\npolyphore\npolyphosphoric\npolyphotal\npolyphote\npolyphylesis\npolyphyletic\npolyphyletically\npolyphylety\npolyphylline\npolyphyllous\npolyphylly\npolyphylogeny\npolyphyly\npolyphyodont\nPolypi\npolypi\npolypian\npolypide\npolypidom\nPolypifera\npolypiferous\npolypigerous\npolypinnate\npolypite\nPolyplacophora\npolyplacophoran\npolyplacophore\npolyplacophorous\npolyplastic\nPolyplectron\npolyplegia\npolyplegic\npolyploid\npolyploidic\npolyploidy\npolypnoea\npolypnoeic\npolypod\nPolypoda\npolypodia\nPolypodiaceae\npolypodiaceous\nPolypodium\npolypodous\npolypody\npolypoid\npolypoidal\nPolypomorpha\npolypomorphic\nPolyporaceae\npolyporaceous\npolypore\npolyporite\npolyporoid\npolyporous\nPolyporus\npolypose\npolyposis\npolypotome\npolypous\npolypragmacy\npolypragmatic\npolypragmatical\npolypragmatically\npolypragmatism\npolypragmatist\npolypragmaty\npolypragmist\npolypragmon\npolypragmonic\npolypragmonist\npolyprene\npolyprism\npolyprismatic\npolyprothetic\npolyprotodont\nPolyprotodontia\npolypseudonymous\npolypsychic\npolypsychical\npolypsychism\npolypterid\nPolypteridae\npolypteroid\nPolypterus\npolyptote\npolyptoton\npolyptych\npolypus\npolyrhizal\npolyrhizous\npolyrhythmic\npolyrhythmical\npolysaccharide\npolysaccharose\nPolysaccum\npolysalicylide\npolysarcia\npolysarcous\npolyschematic\npolyschematist\npolyscope\npolyscopic\npolysemant\npolysemantic\npolysemeia\npolysemia\npolysemous\npolysemy\npolysensuous\npolysensuousness\npolysepalous\npolyseptate\npolyserositis\npolysided\npolysidedness\npolysilicate\npolysilicic\nPolysiphonia\npolysiphonic\npolysiphonous\npolysomatic\npolysomatous\npolysomaty\npolysomia\npolysomic\npolysomitic\npolysomous\npolysomy\npolyspast\npolyspaston\npolyspermal\npolyspermatous\npolyspermia\npolyspermic\npolyspermous\npolyspermy\npolyspondylic\npolyspondylous\npolyspondyly\nPolyspora\npolysporangium\npolyspore\npolyspored\npolysporic\npolysporous\npolystachyous\npolystaurion\npolystele\npolystelic\npolystemonous\npolystichoid\npolystichous\nPolystichum\nPolystictus\nPolystomata\nPolystomatidae\npolystomatous\npolystome\nPolystomea\nPolystomella\nPolystomidae\npolystomium\npolystylar\npolystyle\npolystylous\npolystyrene\npolysulphide\npolysulphuration\npolysulphurization\npolysyllabic\npolysyllabical\npolysyllabically\npolysyllabicism\npolysyllabicity\npolysyllabism\npolysyllable\npolysyllogism\npolysyllogistic\npolysymmetrical\npolysymmetrically\npolysymmetry\npolysyndetic\npolysyndetically\npolysyndeton\npolysynthesis\npolysynthesism\npolysynthetic\npolysynthetical\npolysynthetically\npolysyntheticism\npolysynthetism\npolysynthetize\npolytechnic\npolytechnical\npolytechnics\npolytechnist\npolyterpene\nPolythalamia\npolythalamian\npolythalamic\npolythalamous\npolythecial\npolytheism\npolytheist\npolytheistic\npolytheistical\npolytheistically\npolytheize\npolythelia\npolythelism\npolythely\npolythene\npolythionic\npolytitanic\npolytocous\npolytokous\npolytoky\npolytomous\npolytomy\npolytonal\npolytonalism\npolytonality\npolytone\npolytonic\npolytony\npolytope\npolytopic\npolytopical\nPolytrichaceae\npolytrichaceous\npolytrichia\npolytrichous\nPolytrichum\npolytrochal\npolytrochous\npolytrope\npolytrophic\npolytropic\npolytungstate\npolytungstic\npolytype\npolytypic\npolytypical\npolytypy\npolyuresis\npolyuria\npolyuric\npolyvalence\npolyvalent\npolyvinyl\npolyvinylidene\npolyvirulent\npolyvoltine\nPolyzoa\npolyzoal\npolyzoan\npolyzoarial\npolyzoarium\npolyzoary\npolyzoic\npolyzoism\npolyzonal\npolyzooid\npolyzoon\npolzenite\npom\npomace\nPomaceae\npomacentrid\nPomacentridae\npomacentroid\nPomacentrus\npomaceous\npomade\nPomaderris\nPomak\npomander\npomane\npomarine\npomarium\npomate\npomato\npomatomid\nPomatomidae\nPomatomus\npomatorhine\npomatum\npombe\npombo\npome\npomegranate\npomelo\nPomeranian\npomeridian\npomerium\npomewater\npomey\npomfret\npomiculture\npomiculturist\npomiferous\npomiform\npomivorous\nPommard\npomme\npommee\npommel\npommeled\npommeler\npommet\npommey\npommy\nPomo\npomological\npomologically\npomologist\npomology\nPomona\npomonal\npomonic\npomp\npompa\nPompadour\npompadour\npompal\npompano\nPompeian\nPompeii\npompelmous\nPompey\npompey\npompholix\npompholygous\npompholyx\npomphus\npompier\npompilid\nPompilidae\npompiloid\nPompilus\npompion\npompist\npompless\npompoleon\npompon\npomposity\npompous\npompously\npompousness\npompster\nPomptine\npomster\npon\nPonca\nponce\nponceau\nponcelet\nponcho\nponchoed\nPoncirus\npond\npondage\npondbush\nponder\nponderability\nponderable\nponderableness\nponderal\nponderance\nponderancy\nponderant\nponderary\nponderate\nponderation\nponderative\nponderer\npondering\nponderingly\nponderling\nponderment\nponderomotive\nponderosapine\nponderosity\nponderous\nponderously\nponderousness\npondfish\npondful\npondgrass\npondlet\npondman\nPondo\npondok\npondokkie\nPondomisi\npondside\npondus\npondweed\npondwort\npondy\npone\nponent\nPonera\nPoneramoeba\nponerid\nPoneridae\nPonerinae\nponerine\nponeroid\nponerology\nponey\npong\nponga\npongee\nPongidae\nPongo\nponiard\nponica\nponier\nponja\npont\nPontac\nPontacq\npontage\npontal\nPontederia\nPontederiaceae\npontederiaceous\npontee\npontes\npontianak\nPontic\npontic\nponticello\nponticular\nponticulus\npontifex\npontiff\npontific\npontifical\npontificalia\npontificalibus\npontificality\npontifically\npontificate\npontification\npontifices\npontificial\npontificially\npontificious\npontify\npontil\npontile\npontin\nPontine\npontine\npontist\npontlevis\nponto\nPontocaspian\npontocerebellar\nponton\npontonier\npontoon\npontooneer\npontooner\npontooning\nPontus\npontvolant\npony\nponzite\npooa\npooch\npooder\npoodle\npoodledom\npoodleish\npoodleship\npoof\npoogye\npooh\npoohpoohist\npook\npooka\npookaun\npookoo\npool\npooler\npooli\npoolroom\npoolroot\npoolside\npoolwort\npooly\npoon\npoonac\npoonga\npoonghie\npoop\npooped\npoophyte\npoophytic\npoor\npoorhouse\npoorish\npoorliness\npoorling\npoorly\npoorlyish\npoormaster\npoorness\npoorweed\npoorwill\npoot\nPop\npop\npopadam\npopal\npopcorn\npopdock\npope\nPopean\npopedom\npopeholy\npopehood\npopeism\npopeler\npopeless\npopelike\npopeline\npopely\npopery\npopeship\npopess\npopeye\npopeyed\npopglove\npopgun\npopgunner\npopgunnery\nPopian\npopify\npopinac\npopinjay\nPopish\npopish\npopishly\npopishness\npopjoy\npoplar\npoplared\nPoplilia\npoplin\npoplinette\npopliteal\npopliteus\npoplolly\nPopocracy\nPopocrat\nPopolari\nPopoloco\npopomastic\npopover\nPopovets\npoppa\npoppability\npoppable\npoppean\npoppel\npopper\npoppet\npoppethead\npoppied\npoppin\npopple\npopply\npoppy\npoppycock\npoppycockish\npoppyfish\npoppyhead\npoppylike\npoppywort\npopshop\npopulace\npopular\npopularism\nPopularist\npopularity\npopularization\npopularize\npopularizer\npopularly\npopularness\npopulate\npopulation\npopulational\npopulationist\npopulationistic\npopulationless\npopulator\npopulicide\npopulin\nPopulism\nPopulist\nPopulistic\npopulous\npopulously\npopulousness\nPopulus\npopweed\nporal\nporbeagle\nporcate\nporcated\nporcelain\nporcelainization\nporcelainize\nporcelainlike\nporcelainous\nporcelaneous\nporcelanic\nporcelanite\nporcelanous\nPorcellana\nporcellanian\nporcellanid\nPorcellanidae\nporcellanize\nporch\nporched\nporching\nporchless\nporchlike\nporcine\nPorcula\nporcupine\nporcupinish\npore\npored\nporelike\nPorella\nporencephalia\nporencephalic\nporencephalitis\nporencephalon\nporencephalous\nporencephalus\nporencephaly\nporer\nporge\nporger\nporgy\nPoria\nporicidal\nPorifera\nporiferal\nporiferan\nporiferous\nporiform\nporimania\nporiness\nporing\nporingly\nporiomanic\nporism\nporismatic\nporismatical\nporismatically\nporistic\nporistical\nporite\nPorites\nPoritidae\nporitoid\npork\nporkburger\nporker\nporkery\nporket\nporkfish\nporkish\nporkless\nporkling\nporkman\nPorkopolis\nporkpie\nporkwood\nporky\npornerastic\npornocracy\npornocrat\npornograph\npornographer\npornographic\npornographically\npornographist\npornography\npornological\nPorocephalus\nporodine\nporodite\nporogam\nporogamic\nporogamous\nporogamy\nporokaiwhiria\nporokeratosis\nPorokoto\nporoma\nporometer\nporophyllous\nporoplastic\nporoporo\npororoca\nporos\nporoscope\nporoscopic\nporoscopy\nporose\nporoseness\nporosimeter\nporosis\nporosity\nporotic\nporotype\nporous\nporously\nporousness\nporpentine\nporphine\nPorphyra\nPorphyraceae\nporphyraceous\nporphyratin\nPorphyrean\nporphyria\nPorphyrian\nporphyrian\nPorphyrianist\nporphyrin\nporphyrine\nporphyrinuria\nPorphyrio\nporphyrion\nporphyrite\nporphyritic\nporphyroblast\nporphyroblastic\nporphyrogene\nporphyrogenite\nporphyrogenitic\nporphyrogenitism\nporphyrogeniture\nporphyrogenitus\nporphyroid\nporphyrophore\nporphyrous\nporphyry\nPorpita\nporpitoid\nporpoise\nporpoiselike\nporporate\nporr\nporraceous\nporrect\nporrection\nporrectus\nporret\nporridge\nporridgelike\nporridgy\nporriginous\nporrigo\nPorrima\nporringer\nporriwiggle\nporry\nport\nporta\nportability\nportable\nportableness\nportably\nportage\nportague\nportahepatis\nportail\nportal\nportaled\nportalled\nportalless\nportamento\nportance\nportass\nportatile\nportative\nportcrayon\nportcullis\nporteacid\nported\nporteligature\nportend\nportendance\nportendment\nPorteno\nportension\nportent\nportention\nportentosity\nportentous\nportentously\nportentousness\nporteous\nporter\nporterage\nPorteranthus\nporteress\nporterhouse\nporterlike\nporterly\nportership\nportfire\nportfolio\nportglaive\nportglave\nportgrave\nPorthetria\nPortheus\nporthole\nporthook\nporthors\nporthouse\nPortia\nportia\nportico\nporticoed\nportiere\nportiered\nportifory\nportify\nportio\nportiomollis\nportion\nportionable\nportional\nportionally\nportioner\nportionist\nportionize\nportionless\nportitor\nPortlandian\nportlast\nportless\nportlet\nportligature\nportlily\nportliness\nportly\nportman\nportmanmote\nportmanteau\nportmanteaux\nportmantle\nportmantologism\nportment\nportmoot\nporto\nportoise\nportolan\nportolano\nPortor\nportrait\nportraitist\nportraitlike\nportraiture\nportray\nportrayable\nportrayal\nportrayer\nportrayist\nportrayment\nportreeve\nportreeveship\nportress\nportside\nportsider\nportsman\nportuary\nportugais\nPortugal\nPortugalism\nPortugee\nPortuguese\nPortulaca\nPortulacaceae\nportulacaceous\nPortulacaria\nportulan\nPortunalia\nportunian\nPortunidae\nPortunus\nportway\nporty\nporule\nporulose\nporulous\nporus\nporwigle\npory\nPorzana\nposadaship\nposca\npose\nPoseidon\nPoseidonian\nposement\nposer\nposeur\nposey\nposh\nposing\nposingly\nposit\nposition\npositional\npositioned\npositioner\npositionless\npositival\npositive\npositively\npositiveness\npositivism\npositivist\npositivistic\npositivistically\npositivity\npositivize\npositor\npositron\npositum\npositure\nPosnanian\nposnet\nposole\nposologic\nposological\nposologist\nposology\npospolite\nposs\nposse\nposseman\npossess\npossessable\npossessed\npossessedly\npossessedness\npossessing\npossessingly\npossessingness\npossession\npossessional\npossessionalism\npossessionalist\npossessionary\npossessionate\npossessioned\npossessioner\npossessionist\npossessionless\npossessionlessness\npossessival\npossessive\npossessively\npossessiveness\npossessor\npossessoress\npossessorial\npossessoriness\npossessorship\npossessory\nposset\npossibilism\npossibilist\npossibilitate\npossibility\npossible\npossibleness\npossibly\npossum\npossumwood\npost\npostabdomen\npostabdominal\npostable\npostabortal\npostacetabular\npostadjunct\npostage\npostal\npostallantoic\npostally\npostalveolar\npostament\npostamniotic\npostanal\npostanesthetic\npostantennal\npostaortic\npostapoplectic\npostappendicular\npostarterial\npostarthritic\npostarticular\npostarytenoid\npostaspirate\npostaspirated\npostasthmatic\npostatrial\npostauditory\npostauricular\npostaxiad\npostaxial\npostaxially\npostaxillary\npostbag\npostbaptismal\npostbox\npostboy\npostbrachial\npostbrachium\npostbranchial\npostbreakfast\npostbronchial\npostbuccal\npostbulbar\npostbursal\npostcaecal\npostcalcaneal\npostcalcarine\npostcanonical\npostcardiac\npostcardinal\npostcarnate\npostcarotid\npostcart\npostcartilaginous\npostcatarrhal\npostcava\npostcaval\npostcecal\npostcenal\npostcentral\npostcentrum\npostcephalic\npostcerebellar\npostcerebral\npostcesarean\npostcibal\npostclassic\npostclassical\npostclassicism\npostclavicle\npostclavicula\npostclavicular\npostclimax\npostclitellian\npostclival\npostcolon\npostcolonial\npostcolumellar\npostcomitial\npostcommissural\npostcommissure\npostcommunicant\nPostcommunion\npostconceptive\npostcondylar\npostconfinement\npostconnubial\npostconsonantal\npostcontact\npostcontract\npostconvalescent\npostconvulsive\npostcordial\npostcornu\npostcosmic\npostcostal\npostcoxal\npostcritical\npostcrural\npostcubital\npostdate\npostdental\npostdepressive\npostdetermined\npostdevelopmental\npostdiagnostic\npostdiaphragmatic\npostdiastolic\npostdicrotic\npostdigestive\npostdigital\npostdiluvial\npostdiluvian\npostdiphtheric\npostdiphtheritic\npostdisapproved\npostdisseizin\npostdisseizor\npostdoctoral\npostdoctorate\npostdural\npostdysenteric\nposted\nposteen\npostelection\npostelementary\npostembryonal\npostembryonic\npostemporal\npostencephalitic\npostencephalon\npostenteral\npostentry\npostepileptic\nposter\nposterette\nposteriad\nposterial\nposterior\nposterioric\nposteriorically\nposterioristic\nposterioristically\nposteriority\nposteriorly\nposteriormost\nposteriors\nposteriorums\nposterish\nposterishness\nposterist\nposterity\nposterize\npostern\nposteroclusion\nposterodorsad\nposterodorsal\nposterodorsally\nposteroexternal\nposteroinferior\nposterointernal\nposterolateral\nposteromedial\nposteromedian\nposteromesial\nposteroparietal\nposterosuperior\nposterotemporal\nposteroterminal\nposteroventral\nposteruptive\npostesophageal\nposteternity\npostethmoid\npostexilian\npostexilic\npostexist\npostexistence\npostexistency\npostexistent\npostface\npostfact\npostfebrile\npostfemoral\npostfetal\npostfix\npostfixal\npostfixation\npostfixed\npostfixial\npostflection\npostflexion\npostform\npostfoveal\npostfrontal\npostfurca\npostfurcal\npostganglionic\npostgangrenal\npostgastric\npostgeminum\npostgenial\npostgeniture\npostglacial\npostglenoid\npostglenoidal\npostgonorrheic\npostgracile\npostgraduate\npostgrippal\nposthabit\nposthaste\nposthemiplegic\nposthemorrhagic\nposthepatic\nposthetomist\nposthetomy\nposthexaplaric\nposthippocampal\nposthitis\npostholder\nposthole\nposthouse\nposthumeral\nposthumous\nposthumously\nposthumousness\nposthumus\nposthyoid\nposthypnotic\nposthypnotically\nposthypophyseal\nposthypophysis\nposthysterical\npostic\npostical\npostically\nposticous\nposticteric\nposticum\npostil\npostilion\npostilioned\npostillate\npostillation\npostillator\npostimpressionism\npostimpressionist\npostimpressionistic\npostinfective\npostinfluenzal\nposting\npostingly\npostintestinal\npostique\npostischial\npostjacent\npostjugular\npostlabial\npostlachrymal\npostlaryngeal\npostlegitimation\npostlenticular\npostless\npostlike\npostliminary\npostliminiary\npostliminious\npostliminium\npostliminous\npostliminy\npostloitic\npostloral\npostlude\npostludium\npostluetic\npostmalarial\npostmamillary\npostmammary\npostman\npostmandibular\npostmaniacal\npostmarital\npostmark\npostmarriage\npostmaster\npostmasterlike\npostmastership\npostmastoid\npostmaturity\npostmaxillary\npostmaximal\npostmeatal\npostmedia\npostmedial\npostmedian\npostmediastinal\npostmediastinum\npostmedullary\npostmeiotic\npostmeningeal\npostmenstrual\npostmental\npostmeridian\npostmeridional\npostmesenteric\npostmillenarian\npostmillenarianism\npostmillennial\npostmillennialism\npostmillennialist\npostmillennian\npostmineral\npostmistress\npostmortal\npostmortuary\npostmundane\npostmuscular\npostmutative\npostmycotic\npostmyxedematous\npostnarial\npostnaris\npostnasal\npostnatal\npostnate\npostnati\npostnecrotic\npostnephritic\npostneural\npostneuralgic\npostneuritic\npostneurotic\npostnodular\npostnominal\npostnotum\npostnuptial\npostnuptially\npostobituary\npostocular\npostolivary\npostomental\npostoperative\npostoptic\npostoral\npostorbital\npostordination\npostorgastic\npostosseous\npostotic\npostpagan\npostpaid\npostpalatal\npostpalatine\npostpalpebral\npostpaludal\npostparalytic\npostparietal\npostparotid\npostparotitic\npostparoxysmal\npostparturient\npostpatellar\npostpathological\npostpericardial\npostpharyngeal\npostphlogistic\npostphragma\npostphrenic\npostphthisic\npostpituitary\npostplace\npostplegic\npostpneumonic\npostponable\npostpone\npostponement\npostponence\npostponer\npostpontile\npostpose\npostposited\npostposition\npostpositional\npostpositive\npostpositively\npostprandial\npostprandially\npostpredicament\npostprophesy\npostprostate\npostpubertal\npostpubescent\npostpubic\npostpubis\npostpuerperal\npostpulmonary\npostpupillary\npostpycnotic\npostpyloric\npostpyramidal\npostpyretic\npostrachitic\npostramus\npostrectal\npostreduction\npostremogeniture\npostremote\npostrenal\npostresurrection\npostresurrectional\npostretinal\npostrheumatic\npostrhinal\npostrider\npostrorse\npostrostral\npostrubeolar\npostsaccular\npostsacral\npostscalenus\npostscapula\npostscapular\npostscapularis\npostscarlatinal\npostscenium\npostscorbutic\npostscribe\npostscript\npostscriptum\npostscutellar\npostscutellum\npostseason\npostsigmoid\npostsign\npostspasmodic\npostsphenoid\npostsphenoidal\npostsphygmic\npostspinous\npostsplenial\npostsplenic\npoststernal\npoststertorous\npostsuppurative\npostsurgical\npostsynaptic\npostsynsacral\npostsyphilitic\npostsystolic\nposttabetic\nposttarsal\nposttetanic\npostthalamic\npostthoracic\npostthyroidal\nposttibial\nposttonic\nposttoxic\nposttracheal\nposttrapezoid\nposttraumatic\nposttreaty\nposttubercular\nposttussive\nposttympanic\nposttyphoid\npostulancy\npostulant\npostulantship\npostulata\npostulate\npostulation\npostulational\npostulator\npostulatory\npostulatum\npostulnar\npostumbilical\npostumbonal\npostural\nposture\nposturer\npostureteric\nposturist\nposturize\npostuterine\npostvaccinal\npostvaricellar\npostvarioloid\npostvelar\npostvenereal\npostvenous\npostverbal\nPostverta\npostvertebral\npostvesical\npostvide\npostvocalic\npostwar\npostward\npostwise\npostwoman\npostxyphoid\npostyard\npostzygapophysial\npostzygapophysis\nposy\npot\npotability\npotable\npotableness\npotagerie\npotagery\npotamic\nPotamobiidae\nPotamochoerus\nPotamogale\nPotamogalidae\nPotamogeton\nPotamogetonaceae\npotamogetonaceous\npotamological\npotamologist\npotamology\npotamometer\nPotamonidae\npotamophilous\npotamoplankton\npotash\npotashery\npotass\npotassa\npotassamide\npotassic\npotassiferous\npotassium\npotate\npotation\npotative\npotato\npotatoes\npotator\npotatory\nPotawatami\nPotawatomi\npotbank\npotbellied\npotbelly\npotboil\npotboiler\npotboy\npotboydom\npotch\npotcher\npotcherman\npotcrook\npotdar\npote\npotecary\npoteen\npotence\npotency\npotent\npotentacy\npotentate\npotential\npotentiality\npotentialization\npotentialize\npotentially\npotentialness\npotentiate\npotentiation\nPotentilla\npotentiometer\npotentiometric\npotentize\npotently\npotentness\npoter\nPoterium\npotestal\npotestas\npotestate\npotestative\npoteye\npotful\npotgirl\npotgun\npothanger\npothead\npothecary\npotheen\npother\npotherb\npotherment\npothery\npothole\npothook\npothookery\nPothos\npothouse\npothousey\npothunt\npothunter\npothunting\npoticary\npotichomania\npotichomanist\npotifer\nPotiguara\npotion\npotlatch\npotleg\npotlicker\npotlid\npotlike\npotluck\npotmaker\npotmaking\npotman\npotomania\npotomato\npotometer\npotong\npotoo\nPotoroinae\npotoroo\nPotorous\npotpie\npotpourri\npotrack\npotsherd\npotshoot\npotshooter\npotstick\npotstone\npott\npottage\npottagy\npottah\npotted\npotter\npotterer\npotteress\npotteringly\npottery\nPottiaceae\npotting\npottinger\npottle\npottled\npotto\npotty\npotwaller\npotwalling\npotware\npotwhisky\npotwork\npotwort\npouce\npoucer\npoucey\npouch\npouched\npouchful\npouchless\npouchlike\npouchy\npoudrette\npouf\npoulaine\npoulard\npoulardize\npoulp\npoulpe\npoult\npoulter\npoulterer\npoulteress\npoultice\npoulticewise\npoultry\npoultrydom\npoultryist\npoultryless\npoultrylike\npoultryman\npoultryproof\npounamu\npounce\npounced\npouncer\npouncet\npouncing\npouncingly\npound\npoundage\npoundal\npoundcake\npounder\npounding\npoundkeeper\npoundless\npoundlike\npoundman\npoundmaster\npoundmeal\npoundstone\npoundworth\npour\npourer\npourie\npouring\npouringly\npourparler\npourparley\npourpiece\npourpoint\npourpointer\npouser\npoussette\npout\npouter\npoutful\npouting\npoutingly\npouty\npoverish\npoverishment\npoverty\npovertyweed\nPovindah\npow\npowder\npowderable\npowdered\npowderer\npowderiness\npowdering\npowderization\npowderize\npowderizer\npowderlike\npowderman\npowdery\npowdike\npowdry\npowellite\npower\npowerboat\npowered\npowerful\npowerfully\npowerfulness\npowerhouse\npowerless\npowerlessly\npowerlessness\npowermonger\nPowhatan\npowitch\npowldoody\npownie\npowsoddy\npowsowdy\npowwow\npowwower\npowwowism\npox\npoxy\npoy\npoyou\npozzolanic\npozzuolana\npozzuolanic\npraam\nprabble\nprabhu\npractic\npracticability\npracticable\npracticableness\npracticably\npractical\npracticalism\npracticalist\npracticality\npracticalization\npracticalize\npracticalizer\npractically\npracticalness\npracticant\npractice\npracticed\npracticedness\npracticer\npractician\npracticianism\npracticum\npractitional\npractitioner\npractitionery\nprad\nPradeep\npradhana\npraeabdomen\npraeacetabular\npraeanal\npraecava\npraecipe\npraecipuum\npraecoces\npraecocial\npraecognitum\npraecoracoid\npraecordia\npraecordial\npraecordium\npraecornu\npraecox\npraecuneus\npraedial\npraedialist\npraediality\npraeesophageal\npraefect\npraefectorial\npraefectus\npraefervid\npraefloration\npraefoliation\npraehallux\npraelabrum\npraelection\npraelector\npraelectorship\npraelectress\npraeludium\npraemaxilla\npraemolar\npraemunire\npraenarial\nPraenestine\nPraenestinian\npraeneural\npraenomen\npraenomina\npraenominal\npraeoperculum\npraepositor\npraepostor\npraepostorial\npraepubis\npraepuce\npraescutum\nPraesepe\npraesertim\nPraesian\npraesidium\npraesphenoid\npraesternal\npraesternum\npraestomium\npraesystolic\npraetaxation\npraetexta\npraetor\npraetorial\nPraetorian\npraetorian\npraetorianism\npraetorium\npraetorship\npraezygapophysis\npragmatic\npragmatica\npragmatical\npragmaticality\npragmatically\npragmaticalness\npragmaticism\npragmatics\npragmatism\npragmatist\npragmatistic\npragmatize\npragmatizer\nprairie\nprairiecraft\nprairied\nprairiedom\nprairielike\nprairieweed\nprairillon\npraisable\npraisableness\npraisably\npraise\npraiseful\npraisefully\npraisefulness\npraiseless\npraiseproof\npraiser\npraiseworthy\npraising\npraisingly\npraisworthily\npraisworthiness\nPrajapati\nprajna\nPrakash\nPrakrit\nprakriti\nPrakritic\nPrakritize\npraline\npralltriller\npram\nPramnian\nprana\nprance\npranceful\nprancer\nprancing\nprancingly\nprancy\nprandial\nprandially\nprank\npranked\npranker\nprankful\nprankfulness\npranking\nprankingly\nprankish\nprankishly\nprankishness\nprankle\npranksome\npranksomeness\nprankster\npranky\nprase\npraseocobaltic\npraseodidymium\npraseodymia\npraseodymium\npraseolite\nprasine\nprasinous\nprasoid\nprasophagous\nprasophagy\nprastha\nprat\npratal\nPratap\nPratapwant\nprate\nprateful\npratement\npratensian\nPrater\nprater\npratey\npratfall\npratiloma\nPratincola\npratincole\npratincoline\npratincolous\nprating\npratingly\npratique\npratiyasamutpada\nPratt\nprattfall\nprattle\nprattlement\nprattler\nprattling\nprattlingly\nprattly\nprau\nPravin\npravity\nprawn\nprawner\nprawny\nPraxean\nPraxeanist\npraxinoscope\npraxiology\npraxis\nPraxitelean\npray\npraya\nprayer\nprayerful\nprayerfully\nprayerfulness\nprayerless\nprayerlessly\nprayerlessness\nprayermaker\nprayermaking\nprayerwise\nprayful\npraying\nprayingly\nprayingwise\npreabdomen\npreabsorb\npreabsorbent\npreabstract\npreabundance\npreabundant\npreabundantly\npreaccept\npreacceptance\npreaccess\npreaccessible\npreaccidental\npreaccidentally\npreaccommodate\npreaccommodating\npreaccommodatingly\npreaccommodation\npreaccomplish\npreaccomplishment\npreaccord\npreaccordance\npreaccount\npreaccounting\npreaccredit\npreaccumulate\npreaccumulation\npreaccusation\npreaccuse\npreaccustom\npreaccustomed\npreacetabular\npreach\npreachable\npreacher\npreacherdom\npreacheress\npreacherize\npreacherless\npreacherling\npreachership\npreachieved\npreachification\npreachify\npreachily\npreachiness\npreaching\npreachingly\npreachman\npreachment\npreachy\npreacid\npreacidity\npreacidly\npreacidness\npreacknowledge\npreacknowledgment\npreacquaint\npreacquaintance\npreacquire\npreacquired\npreacquit\npreacquittal\npreact\npreaction\npreactive\npreactively\npreactivity\npreacute\npreacutely\npreacuteness\npreadamic\npreadamite\npreadamitic\npreadamitical\npreadamitism\npreadapt\npreadaptable\npreadaptation\npreaddition\npreadditional\npreaddress\npreadequacy\npreadequate\npreadequately\npreadhere\npreadherence\npreadherent\npreadjectival\npreadjective\npreadjourn\npreadjournment\npreadjunct\npreadjust\npreadjustable\npreadjustment\npreadministration\npreadministrative\npreadministrator\npreadmire\npreadmirer\npreadmission\npreadmit\npreadmonish\npreadmonition\npreadolescent\npreadopt\npreadoption\npreadoration\npreadore\npreadorn\npreadornment\npreadult\npreadulthood\npreadvance\npreadvancement\npreadventure\npreadvertency\npreadvertent\npreadvertise\npreadvertisement\npreadvice\npreadvisable\npreadvise\npreadviser\npreadvisory\npreadvocacy\npreadvocate\npreaestival\npreaffect\npreaffection\npreaffidavit\npreaffiliate\npreaffiliation\npreaffirm\npreaffirmation\npreaffirmative\npreafflict\npreaffliction\npreafternoon\npreaged\npreaggravate\npreaggravation\npreaggression\npreaggressive\npreagitate\npreagitation\npreagonal\npreagony\npreagree\npreagreement\npreagricultural\npreagriculture\nprealarm\nprealcohol\nprealcoholic\nprealgebra\nprealgebraic\nprealkalic\npreallable\npreallably\npreallegation\npreallege\nprealliance\npreallied\npreallot\npreallotment\npreallow\npreallowable\npreallowably\npreallowance\npreallude\npreallusion\npreally\nprealphabet\nprealphabetical\nprealtar\nprealteration\nprealveolar\npreamalgamation\npreambassadorial\npreambition\npreambitious\npreamble\npreambled\npreambling\npreambular\npreambulary\npreambulate\npreambulation\npreambulatory\npreanal\npreanaphoral\npreanesthetic\npreanimism\npreannex\npreannounce\npreannouncement\npreannouncer\npreantepenult\npreantepenultimate\npreanterior\npreanticipate\npreantiquity\npreantiseptic\npreaortic\npreappearance\npreapperception\npreapplication\npreappoint\npreappointment\npreapprehension\npreapprise\npreapprobation\npreapproval\npreapprove\npreaptitude\nprearm\nprearrange\nprearrangement\nprearrest\nprearrestment\nprearticulate\npreartistic\npreascertain\npreascertainment\npreascitic\npreaseptic\npreassigned\npreassume\npreassurance\npreassure\npreataxic\npreattachment\npreattune\npreaudience\npreauditory\npreaver\npreavowal\npreaxiad\npreaxial\npreaxially\nprebachelor\nprebacillary\nprebake\nprebalance\npreballot\npreballoting\nprebankruptcy\nprebaptismal\nprebaptize\nprebarbaric\nprebarbarous\nprebargain\nprebasal\nprebasilar\nprebeleve\nprebelief\nprebeliever\nprebelieving\nprebellum\nprebeloved\nprebend\nprebendal\nprebendary\nprebendaryship\nprebendate\nprebenediction\nprebeneficiary\nprebenefit\nprebeset\nprebestow\nprebestowal\nprebetray\nprebetrayal\nprebetrothal\nprebid\nprebidding\nprebill\nprebless\npreblessing\npreblockade\npreblooming\npreboast\npreboding\npreboil\npreborn\npreborrowing\npreboyhood\nprebrachial\nprebrachium\nprebreathe\nprebridal\nprebroadcasting\nprebromidic\nprebronchial\nprebronze\nprebrute\nprebuccal\nprebudget\nprebudgetary\nprebullying\npreburlesque\npreburn\nprecalculable\nprecalculate\nprecalculation\nprecampaign\nprecancel\nprecancellation\nprecancerous\nprecandidacy\nprecandidature\nprecanning\nprecanonical\nprecant\nprecantation\nprecanvass\nprecapillary\nprecapitalist\nprecapitalistic\nprecaptivity\nprecapture\nprecarcinomatous\nprecardiac\nprecaria\nprecarious\nprecariously\nprecariousness\nprecarium\nprecarnival\nprecartilage\nprecartilaginous\nprecary\nprecast\nprecation\nprecative\nprecatively\nprecatory\nprecaudal\nprecausation\nprecaution\nprecautional\nprecautionary\nprecautious\nprecautiously\nprecautiousness\nprecava\nprecaval\nprecedable\nprecede\nprecedence\nprecedency\nprecedent\nprecedentable\nprecedentary\nprecedented\nprecedential\nprecedentless\nprecedently\npreceder\npreceding\nprecelebrant\nprecelebrate\nprecelebration\nprecensure\nprecensus\nprecent\nprecentor\nprecentorial\nprecentorship\nprecentory\nprecentral\nprecentress\nprecentrix\nprecentrum\nprecept\npreception\npreceptist\npreceptive\npreceptively\npreceptor\npreceptoral\npreceptorate\npreceptorial\npreceptorially\npreceptorship\npreceptory\npreceptress\npreceptual\npreceptually\npreceramic\nprecerebellar\nprecerebral\nprecerebroid\npreceremonial\npreceremony\nprecertification\nprecertify\npreces\nprecess\nprecession\nprecessional\nprechallenge\nprechampioned\nprechampionship\nprecharge\nprechart\nprecheck\nprechemical\nprecherish\nprechildhood\nprechill\nprechloric\nprechloroform\nprechoice\nprechoose\nprechordal\nprechoroid\npreciation\nprecinct\nprecinction\nprecinctive\npreciosity\nprecious\npreciously\npreciousness\nprecipe\nprecipice\nprecipiced\nprecipitability\nprecipitable\nprecipitance\nprecipitancy\nprecipitant\nprecipitantly\nprecipitantness\nprecipitate\nprecipitated\nprecipitatedly\nprecipitately\nprecipitation\nprecipitative\nprecipitator\nprecipitin\nprecipitinogen\nprecipitinogenic\nprecipitous\nprecipitously\nprecipitousness\nprecirculate\nprecirculation\nprecis\nprecise\nprecisely\npreciseness\nprecisian\nprecisianism\nprecisianist\nprecision\nprecisional\nprecisioner\nprecisionism\nprecisionist\nprecisionize\nprecisive\nprecitation\nprecite\nprecited\nprecivilization\npreclaim\npreclaimant\npreclaimer\npreclassic\npreclassical\npreclassification\npreclassified\npreclassify\npreclean\nprecleaner\nprecleaning\npreclerical\npreclimax\npreclinical\npreclival\nprecloacal\npreclose\npreclosure\npreclothe\nprecludable\npreclude\npreclusion\npreclusive\npreclusively\nprecoagulation\nprecoccygeal\nprecocial\nprecocious\nprecociously\nprecociousness\nprecocity\nprecogitate\nprecogitation\nprecognition\nprecognitive\nprecognizable\nprecognizant\nprecognize\nprecognosce\nprecoil\nprecoiler\nprecoincidence\nprecoincident\nprecoincidently\nprecollapsable\nprecollapse\nprecollect\nprecollectable\nprecollection\nprecollector\nprecollege\nprecollegiate\nprecollude\nprecollusion\nprecollusive\nprecolor\nprecolorable\nprecoloration\nprecoloring\nprecombat\nprecombatant\nprecombination\nprecombine\nprecombustion\nprecommand\nprecommend\nprecomment\nprecommercial\nprecommissural\nprecommissure\nprecommit\nprecommune\nprecommunicate\nprecommunication\nprecommunion\nprecompare\nprecomparison\nprecompass\nprecompel\nprecompensate\nprecompensation\nprecompilation\nprecompile\nprecompiler\nprecompleteness\nprecompletion\nprecompliance\nprecompliant\nprecomplicate\nprecomplication\nprecompose\nprecomposition\nprecompound\nprecompounding\nprecompoundly\nprecomprehend\nprecomprehension\nprecomprehensive\nprecompress\nprecompulsion\nprecomradeship\npreconceal\npreconcealment\npreconcede\npreconceivable\npreconceive\npreconceived\npreconcentrate\npreconcentrated\npreconcentratedly\npreconcentration\npreconcept\npreconception\npreconceptional\npreconceptual\npreconcern\npreconcernment\npreconcert\npreconcerted\npreconcertedly\npreconcertedness\npreconcertion\npreconcertive\npreconcession\npreconcessive\npreconclude\npreconclusion\npreconcur\npreconcurrence\npreconcurrent\npreconcurrently\nprecondemn\nprecondemnation\nprecondensation\nprecondense\nprecondition\npreconditioned\npreconduct\npreconduction\npreconductor\nprecondylar\nprecondyloid\npreconfer\npreconference\npreconfess\npreconfession\npreconfide\npreconfiguration\npreconfigure\npreconfine\npreconfinedly\npreconfinemnt\npreconfirm\npreconfirmation\npreconflict\npreconform\npreconformity\npreconfound\npreconfuse\npreconfusedly\npreconfusion\nprecongenial\nprecongested\nprecongestion\nprecongestive\nprecongratulate\nprecongratulation\nprecongressional\npreconizance\npreconization\npreconize\npreconizer\npreconjecture\npreconnection\npreconnective\npreconnubial\npreconquer\npreconquest\npreconquestal\npreconquestual\npreconscious\npreconsciously\npreconsciousness\npreconsecrate\npreconsecration\npreconsent\npreconsider\npreconsideration\npreconsign\npreconsolation\npreconsole\npreconsolidate\npreconsolidated\npreconsolidation\npreconsonantal\npreconspiracy\npreconspirator\npreconspire\npreconstituent\npreconstitute\npreconstruct\npreconstruction\npreconsult\npreconsultation\npreconsultor\npreconsume\npreconsumer\npreconsumption\nprecontact\nprecontain\nprecontained\nprecontemn\nprecontemplate\nprecontemplation\nprecontemporaneous\nprecontemporary\nprecontend\nprecontent\nprecontention\nprecontently\nprecontentment\nprecontest\nprecontinental\nprecontract\nprecontractive\nprecontractual\nprecontribute\nprecontribution\nprecontributive\nprecontrivance\nprecontrive\nprecontrol\nprecontrolled\nprecontroversial\nprecontroversy\npreconvention\npreconversation\npreconversational\npreconversion\npreconvert\npreconvey\npreconveyal\npreconveyance\npreconvict\npreconviction\npreconvince\nprecook\nprecooker\nprecool\nprecooler\nprecooling\nprecopy\nprecoracoid\nprecordia\nprecordial\nprecordiality\nprecordially\nprecordium\nprecorneal\nprecornu\nprecoronation\nprecorrect\nprecorrection\nprecorrectly\nprecorrectness\nprecorrespond\nprecorrespondence\nprecorrespondent\nprecorridor\nprecorrupt\nprecorruption\nprecorruptive\nprecorruptly\nprecoruptness\nprecosmic\nprecosmical\nprecostal\nprecounsel\nprecounsellor\nprecourse\nprecover\nprecovering\nprecox\nprecreate\nprecreation\nprecreative\nprecredit\nprecreditor\nprecreed\nprecritical\nprecriticism\nprecriticize\nprecrucial\nprecrural\nprecrystalline\nprecultivate\nprecultivation\nprecultural\npreculturally\npreculture\nprecuneal\nprecuneate\nprecuneus\nprecure\nprecurrent\nprecurricular\nprecurriculum\nprecursal\nprecurse\nprecursive\nprecursor\nprecursory\nprecurtain\nprecut\nprecyclone\nprecyclonic\nprecynical\nprecyst\nprecystic\npredable\npredacean\npredaceous\npredaceousness\npredacity\npredamage\npredamn\npredamnation\npredark\npredarkness\npredata\npredate\npredation\npredatism\npredative\npredator\npredatorily\npredatoriness\npredatory\npredawn\npreday\npredaylight\npredaytime\npredazzite\npredealer\npredealing\npredeath\npredeathly\npredebate\npredebater\npredebit\npredebtor\npredecay\npredecease\npredeceaser\npredeceive\npredeceiver\npredeception\npredecession\npredecessor\npredecessorship\npredecide\npredecision\npredecisive\npredeclaration\npredeclare\npredeclination\npredecline\npredecree\nprededicate\nprededuct\nprededuction\npredefault\npredefeat\npredefect\npredefective\npredefence\npredefend\npredefense\npredefiance\npredeficiency\npredeficient\npredefine\npredefinite\npredefinition\npredefray\npredefrayal\npredefy\npredegeneracy\npredegenerate\npredegree\npredeication\npredelay\npredelegate\npredelegation\npredeliberate\npredeliberately\npredeliberation\npredelineate\npredelineation\npredelinquency\npredelinquent\npredelinquently\npredeliver\npredelivery\npredella\npredelude\npredelusion\npredemand\npredemocracy\npredemocratic\npredemonstrate\npredemonstration\npredemonstrative\npredenial\npredental\npredentary\nPredentata\npredentate\npredeny\npredepart\npredepartmental\npredeparture\npredependable\npredependence\npredependent\npredeplete\npredepletion\npredeposit\npredepository\npredepreciate\npredepreciation\npredepression\npredeprivation\npredeprive\nprederivation\nprederive\npredescend\npredescent\npredescribe\npredescription\npredesert\npredeserter\npredesertion\npredeserve\npredeserving\npredesign\npredesignate\npredesignation\npredesignatory\npredesirous\npredesolate\npredesolation\npredespair\npredesperate\npredespicable\npredespise\npredespond\npredespondency\npredespondent\npredestinable\npredestinarian\npredestinarianism\npredestinate\npredestinately\npredestination\npredestinational\npredestinationism\npredestinationist\npredestinative\npredestinator\npredestine\npredestiny\npredestitute\npredestitution\npredestroy\npredestruction\npredetach\npredetachment\npredetail\npredetain\npredetainer\npredetect\npredetention\npredeterminability\npredeterminable\npredeterminant\npredeterminate\npredeterminately\npredetermination\npredeterminative\npredetermine\npredeterminer\npredeterminism\npredeterministic\npredetest\npredetestation\npredetrimental\npredevelop\npredevelopment\npredevise\npredevote\npredevotion\npredevour\nprediagnosis\nprediagnostic\npredial\nprediastolic\nprediatory\npredicability\npredicable\npredicableness\npredicably\npredicament\npredicamental\npredicamentally\npredicant\npredicate\npredication\npredicational\npredicative\npredicatively\npredicator\npredicatory\npredicrotic\npredict\npredictability\npredictable\npredictably\npredictate\npredictation\nprediction\npredictional\npredictive\npredictively\npredictiveness\npredictor\npredictory\nprediet\npredietary\npredifferent\npredifficulty\npredigest\npredigestion\npredikant\npredilect\npredilected\npredilection\nprediligent\nprediligently\nprediluvial\nprediluvian\nprediminish\nprediminishment\nprediminution\npredine\npredinner\nprediphtheritic\nprediploma\nprediplomacy\nprediplomatic\npredirect\npredirection\npredirector\npredisability\npredisable\npredisadvantage\npredisadvantageous\npredisadvantageously\npredisagree\npredisagreeable\npredisagreement\npredisappointment\npredisaster\npredisastrous\nprediscern\nprediscernment\npredischarge\nprediscipline\npredisclose\npredisclosure\nprediscontent\nprediscontented\nprediscontentment\nprediscontinuance\nprediscontinuation\nprediscontinue\nprediscount\nprediscountable\nprediscourage\nprediscouragement\nprediscourse\nprediscover\nprediscoverer\nprediscovery\nprediscreet\nprediscretion\nprediscretionary\nprediscriminate\nprediscrimination\nprediscriminator\nprediscuss\nprediscussion\npredisgrace\npredisguise\npredisgust\npredislike\npredismiss\npredismissal\npredismissory\npredisorder\npredisordered\npredisorderly\npredispatch\npredispatcher\npredisperse\npredispersion\npredisplace\npredisplacement\npredisplay\npredisponency\npredisponent\npredisposable\npredisposal\npredispose\npredisposed\npredisposedly\npredisposedness\npredisposition\npredispositional\npredisputant\npredisputation\npredispute\npredisregard\npredisrupt\npredisruption\npredissatisfaction\npredissolution\npredissolve\npredissuade\npredistinct\npredistinction\npredistinguish\npredistress\npredistribute\npredistribution\npredistributor\npredistrict\npredistrust\npredistrustful\npredisturb\npredisturbance\nprediversion\npredivert\npredivide\npredividend\npredivider\npredivinable\npredivinity\npredivision\npredivorce\npredivorcement\npredoctorate\npredocumentary\npredomestic\npredominance\npredominancy\npredominant\npredominantly\npredominate\npredominately\npredominatingly\npredomination\npredominator\npredonate\npredonation\npredonor\npredoom\npredorsal\npredoubt\npredoubter\npredoubtful\npredraft\npredrainage\npredramatic\npredraw\npredrawer\npredread\npredreadnought\npredrill\npredriller\npredrive\npredriver\npredry\npreduplicate\npreduplication\npredusk\npredwell\npredynamite\npredynastic\npreen\npreener\npreeze\nprefab\nprefabricate\nprefabrication\nprefabricator\npreface\nprefaceable\nprefacer\nprefacial\nprefacist\nprefactor\nprefactory\nprefamiliar\nprefamiliarity\nprefamiliarly\nprefamous\nprefashion\nprefatial\nprefator\nprefatorial\nprefatorially\nprefatorily\nprefatory\nprefavor\nprefavorable\nprefavorably\nprefavorite\nprefearful\nprefearfully\nprefeast\nprefect\nprefectly\nprefectoral\nprefectorial\nprefectorially\nprefectorian\nprefectship\nprefectual\nprefectural\nprefecture\nprefecundation\nprefecundatory\nprefederal\nprefelic\nprefer\npreferability\npreferable\npreferableness\npreferably\npreferee\npreference\npreferent\npreferential\npreferentialism\npreferentialist\npreferentially\npreferment\nprefermentation\npreferred\npreferredly\npreferredness\npreferrer\npreferrous\nprefertile\nprefertility\nprefertilization\nprefertilize\nprefervid\nprefestival\nprefeudal\nprefeudalic\nprefeudalism\nprefiction\nprefictional\nprefigurate\nprefiguration\nprefigurative\nprefiguratively\nprefigurativeness\nprefigure\nprefigurement\nprefiller\nprefilter\nprefinal\nprefinance\nprefinancial\nprefine\nprefinish\nprefix\nprefixable\nprefixal\nprefixally\nprefixation\nprefixed\nprefixedly\nprefixion\nprefixture\npreflagellate\npreflatter\npreflattery\npreflavor\npreflavoring\npreflection\npreflexion\npreflight\npreflood\nprefloration\npreflowering\nprefoliation\nprefool\npreforbidden\npreforceps\npreforgive\npreforgiveness\npreforgotten\npreform\npreformant\npreformation\npreformationary\npreformationism\npreformationist\npreformative\npreformed\npreformism\npreformist\npreformistic\npreformulate\npreformulation\nprefortunate\nprefortunately\nprefortune\nprefoundation\nprefounder\nprefragrance\nprefragrant\nprefrankness\nprefraternal\nprefraternally\nprefraud\nprefreeze\nprefreshman\nprefriendly\nprefriendship\nprefright\nprefrighten\nprefrontal\nprefulfill\nprefulfillment\nprefulgence\nprefulgency\nprefulgent\nprefunction\nprefunctional\nprefuneral\nprefungoidal\nprefurlough\nprefurnish\npregain\npregainer\npregalvanize\npreganglionic\npregather\npregathering\npregeminum\npregenerate\npregeneration\npregenerosity\npregenerous\npregenerously\npregenial\npregeniculatum\npregeniculum\npregenital\npregeological\npregirlhood\npreglacial\npregladden\npregladness\npreglenoid\npreglenoidal\npreglobulin\npregnability\npregnable\npregnance\npregnancy\npregnant\npregnantly\npregnantness\npregolden\npregolfing\npregracile\npregracious\npregrade\npregraduation\npregranite\npregranitic\npregratification\npregratify\npregreet\npregreeting\npregrievance\npregrowth\npreguarantee\npreguarantor\npreguard\npreguess\npreguidance\npreguide\npreguilt\npreguiltiness\npreguilty\npregust\npregustant\npregustation\npregustator\npregustic\nprehallux\nprehalter\nprehandicap\nprehandle\nprehaps\npreharden\npreharmonious\npreharmoniousness\npreharmony\npreharsh\npreharshness\npreharvest\nprehatred\nprehaunt\nprehaunted\nprehaustorium\nprehazard\nprehazardous\npreheal\nprehearing\npreheat\npreheated\npreheater\nprehemiplegic\nprehend\nprehensible\nprehensile\nprehensility\nprehension\nprehensive\nprehensiveness\nprehensor\nprehensorial\nprehensory\nprehepatic\nprehepaticus\npreheroic\nprehesitancy\nprehesitate\nprehesitation\nprehexameral\nprehistorian\nprehistoric\nprehistorical\nprehistorically\nprehistorics\nprehistory\nprehnite\nprehnitic\npreholder\npreholding\npreholiday\nprehorizon\nprehorror\nprehostile\nprehostility\nprehuman\nprehumiliate\nprehumiliation\nprehumor\nprehunger\nprehydration\nprehypophysis\npreidea\npreidentification\npreidentify\npreignition\npreilluminate\npreillumination\npreillustrate\npreillustration\npreimage\npreimaginary\npreimagination\npreimagine\npreimbibe\npreimbue\npreimitate\npreimitation\npreimitative\npreimmigration\npreimpair\npreimpairment\npreimpart\npreimperial\npreimport\npreimportance\npreimportant\npreimportantly\npreimportation\npreimposal\npreimpose\npreimposition\npreimpress\npreimpression\npreimpressive\npreimprove\npreimprovement\npreinaugural\npreinaugurate\npreincarnate\npreincentive\npreinclination\npreincline\npreinclude\npreinclusion\npreincorporate\npreincorporation\npreincrease\npreindebted\npreindebtedness\npreindemnification\npreindemnify\npreindemnity\npreindependence\npreindependent\npreindependently\npreindesignate\npreindicant\npreindicate\npreindication\npreindispose\npreindisposition\npreinduce\npreinducement\npreinduction\npreinductive\npreindulge\npreindulgence\npreindulgent\npreindustrial\npreindustry\npreinfect\npreinfection\npreinfer\npreinference\npreinflection\npreinflectional\npreinflict\npreinfluence\npreinform\npreinformation\npreinhabit\npreinhabitant\npreinhabitation\npreinhere\npreinherit\npreinheritance\npreinitial\npreinitiate\npreinitiation\npreinjure\npreinjurious\npreinjury\npreinquisition\npreinscribe\npreinscription\npreinsert\npreinsertion\npreinsinuate\npreinsinuating\npreinsinuatingly\npreinsinuation\npreinsinuative\npreinspect\npreinspection\npreinspector\npreinspire\npreinstall\npreinstallation\npreinstill\npreinstillation\npreinstruct\npreinstruction\npreinstructional\npreinstructive\npreinsula\npreinsular\npreinsulate\npreinsulation\npreinsult\npreinsurance\npreinsure\npreintellectual\npreintelligence\npreintelligent\npreintelligently\npreintend\npreintention\npreintercede\npreintercession\npreinterchange\npreintercourse\npreinterest\npreinterfere\npreinterference\npreinterpret\npreinterpretation\npreinterpretative\npreinterview\npreintone\npreinvent\npreinvention\npreinventive\npreinventory\npreinvest\npreinvestigate\npreinvestigation\npreinvestigator\npreinvestment\npreinvitation\npreinvite\npreinvocation\npreinvolve\npreinvolvement\npreiotization\npreiotize\npreirrigation\npreirrigational\npreissuance\npreissue\nprejacent\nprejournalistic\nprejudge\nprejudgement\nprejudger\nprejudgment\nprejudication\nprejudicative\nprejudicator\nprejudice\nprejudiced\nprejudicedly\nprejudiceless\nprejudiciable\nprejudicial\nprejudicially\nprejudicialness\nprejudicious\nprejudiciously\nprejunior\nprejurisdiction\nprejustification\nprejustify\nprejuvenile\nPrekantian\nprekindergarten\nprekindle\npreknit\npreknow\npreknowledge\nprelabel\nprelabial\nprelabor\nprelabrum\nprelachrymal\nprelacrimal\nprelacteal\nprelacy\nprelanguage\nprelapsarian\nprelate\nprelatehood\nprelateship\nprelatess\nprelatial\nprelatic\nprelatical\nprelatically\nprelaticalness\nprelation\nprelatish\nprelatism\nprelatist\nprelatize\nprelatry\nprelature\nprelaunch\nprelaunching\nprelawful\nprelawfully\nprelawfulness\nprelease\nprelect\nprelection\nprelector\nprelectorship\nprelectress\nprelecture\nprelegacy\nprelegal\nprelegate\nprelegatee\nprelegend\nprelegendary\nprelegislative\npreliability\npreliable\nprelibation\npreliberal\npreliberality\npreliberally\npreliberate\npreliberation\nprelicense\nprelim\npreliminarily\npreliminary\nprelimit\nprelimitate\nprelimitation\nprelingual\nprelinguistic\nprelinpinpin\npreliquidate\npreliquidation\npreliteral\npreliterally\npreliteralness\npreliterary\npreliterate\npreliterature\nprelithic\nprelitigation\npreloan\nprelocalization\nprelocate\nprelogic\nprelogical\npreloral\npreloreal\npreloss\nprelude\npreluder\npreludial\npreludious\npreludiously\npreludium\npreludize\nprelumbar\nprelusion\nprelusive\nprelusively\nprelusorily\nprelusory\npreluxurious\npremachine\npremadness\npremaintain\npremaintenance\npremake\npremaker\npremaking\npremandibular\npremanhood\npremaniacal\npremanifest\npremanifestation\npremankind\npremanufacture\npremanufacturer\npremanufacturing\npremarital\npremarriage\npremarry\npremastery\nprematch\npremate\nprematerial\nprematernity\nprematrimonial\nprematuration\npremature\nprematurely\nprematureness\nprematurity\npremaxilla\npremaxillary\npremeasure\npremeasurement\npremechanical\npremedia\npremedial\npremedian\npremedic\npremedical\npremedicate\npremedication\npremedieval\npremedievalism\npremeditate\npremeditatedly\npremeditatedness\npremeditatingly\npremeditation\npremeditative\npremeditator\npremegalithic\nprememorandum\npremenace\npremenstrual\npremention\npremeridian\npremerit\npremetallic\npremethodical\npremial\npremiant\npremiate\npremidnight\npremidsummer\npremier\npremieral\npremiere\npremieress\npremierjus\npremiership\npremilitary\npremillenarian\npremillenarianism\npremillennial\npremillennialism\npremillennialist\npremillennialize\npremillennially\npremillennian\npreminister\npreministry\npremious\npremisal\npremise\npremisory\npremisrepresent\npremisrepresentation\npremiss\npremium\npremix\npremixer\npremixture\npremodel\npremodern\npremodification\npremodify\npremolar\npremold\npremolder\npremolding\npremonarchial\npremonetary\nPremongolian\npremonish\npremonishment\npremonition\npremonitive\npremonitor\npremonitorily\npremonitory\npremonopolize\npremonopoly\nPremonstrant\nPremonstratensian\npremonumental\npremoral\npremorality\npremorally\npremorbid\npremorbidly\npremorbidness\npremorning\npremorse\npremortal\npremortification\npremortify\npremortuary\npremosaic\npremotion\npremourn\npremove\npremovement\npremover\npremuddle\npremultiplication\npremultiplier\npremultiply\npremundane\npremunicipal\npremunition\npremunitory\npremusical\npremuster\npremutative\npremutiny\npremycotic\npremyelocyte\npremythical\nprename\nPrenanthes\nprenares\nprenarial\nprenaris\nprenasal\nprenatal\nprenatalist\nprenatally\nprenational\nprenative\nprenatural\nprenaval\nprender\nprendre\nprenebular\nprenecessitate\npreneglect\npreneglectful\nprenegligence\nprenegligent\nprenegotiate\nprenegotiation\npreneolithic\nprenephritic\npreneural\npreneuralgic\nprenight\nprenoble\nprenodal\nprenominal\nprenominate\nprenomination\nprenominical\nprenotation\nprenotice\nprenotification\nprenotify\nprenotion\nprentice\nprenticeship\nprenumber\nprenumbering\nprenuncial\nprenuptial\nprenursery\npreobedience\npreobedient\npreobject\npreobjection\npreobjective\npreobligate\npreobligation\npreoblige\npreobservance\npreobservation\npreobservational\npreobserve\npreobstruct\npreobstruction\npreobtain\npreobtainable\npreobtrude\npreobtrusion\npreobtrusive\npreobviate\npreobvious\npreobviously\npreobviousness\npreoccasioned\npreoccipital\npreocclusion\npreoccultation\npreoccupancy\npreoccupant\npreoccupate\npreoccupation\npreoccupative\npreoccupied\npreoccupiedly\npreoccupiedness\npreoccupier\npreoccupy\npreoccur\npreoccurrence\npreoceanic\npreocular\npreodorous\npreoffend\npreoffense\npreoffensive\npreoffensively\npreoffensiveness\npreoffer\npreoffering\npreofficial\npreofficially\npreominate\npreomission\npreomit\npreopen\npreopening\npreoperate\npreoperation\npreoperative\npreoperatively\npreoperator\npreopercle\npreopercular\npreoperculum\npreopinion\npreopinionated\npreoppose\npreopposition\npreoppress\npreoppression\npreoppressor\npreoptic\npreoptimistic\npreoption\npreoral\npreorally\npreorbital\npreordain\npreorder\npreordination\npreorganic\npreorganization\npreorganize\npreoriginal\npreoriginally\npreornamental\npreoutfit\npreoutline\npreoverthrow\nprep\nprepainful\nprepalatal\nprepalatine\nprepaleolithic\nprepanic\npreparable\npreparation\npreparationist\npreparative\npreparatively\npreparator\npreparatorily\npreparatory\nprepardon\nprepare\nprepared\npreparedly\npreparedness\npreparement\npreparental\npreparer\npreparietal\npreparingly\npreparliamentary\npreparoccipital\npreparoxysmal\nprepartake\npreparticipation\nprepartisan\nprepartition\nprepartnership\nprepatellar\nprepatent\nprepatriotic\nprepave\nprepavement\nprepay\nprepayable\nprepayment\nprepeduncle\nprepenetrate\nprepenetration\nprepenial\nprepense\nprepensely\nprepeople\npreperceive\npreperception\npreperceptive\npreperitoneal\nprepersuade\nprepersuasion\nprepersuasive\npreperusal\npreperuse\nprepetition\nprephragma\nprephthisical\nprepigmental\nprepink\nprepious\nprepituitary\npreplace\npreplacement\npreplacental\npreplan\npreplant\nprepledge\npreplot\nprepoetic\nprepoetical\nprepoison\nprepolice\nprepolish\nprepolitic\nprepolitical\nprepolitically\nprepollence\nprepollency\nprepollent\nprepollex\npreponder\npreponderance\npreponderancy\npreponderant\npreponderantly\npreponderate\npreponderately\npreponderating\npreponderatingly\npreponderation\npreponderous\npreponderously\nprepontile\nprepontine\npreportray\npreportrayal\nprepose\npreposition\nprepositional\nprepositionally\nprepositive\nprepositively\nprepositor\nprepositorial\nprepositure\nprepossess\nprepossessed\nprepossessing\nprepossessingly\nprepossessingness\nprepossession\nprepossessionary\nprepossessor\npreposterous\npreposterously\npreposterousness\nprepostorship\nprepotence\nprepotency\nprepotent\nprepotential\nprepotently\nprepractical\nprepractice\npreprandial\nprepreference\nprepreparation\npreprice\npreprimary\npreprimer\npreprimitive\npreprint\npreprofess\npreprofessional\npreprohibition\nprepromise\nprepromote\nprepromotion\nprepronounce\nprepronouncement\npreprophetic\npreprostatic\npreprove\npreprovide\npreprovision\npreprovocation\npreprovoke\npreprudent\npreprudently\nprepsychological\nprepsychology\nprepuberal\nprepubertal\nprepuberty\nprepubescent\nprepubic\nprepubis\nprepublication\nprepublish\nprepuce\nprepunctual\nprepunish\nprepunishment\nprepupa\nprepupal\nprepurchase\nprepurchaser\nprepurpose\npreputial\npreputium\nprepyloric\nprepyramidal\nprequalification\nprequalify\nprequarantine\nprequestion\nprequotation\nprequote\npreracing\npreradio\nprerailroad\nprerailroadite\nprerailway\npreramus\nprerational\nprereadiness\npreready\nprerealization\nprerealize\nprerebellion\nprereceipt\nprereceive\nprereceiver\nprerecital\nprerecite\nprereckon\nprereckoning\nprerecognition\nprerecognize\nprerecommend\nprerecommendation\nprereconcile\nprereconcilement\nprereconciliation\nprerectal\npreredeem\npreredemption\nprereduction\nprerefer\nprereference\nprerefine\nprerefinement\nprereform\nprereformation\nprereformatory\nprerefusal\nprerefuse\npreregal\npreregister\npreregistration\npreregulate\npreregulation\nprereject\nprerejection\nprerejoice\nprerelate\nprerelation\nprerelationship\nprerelease\nprereligious\nprereluctation\npreremit\npreremittance\npreremorse\npreremote\npreremoval\npreremove\npreremunerate\npreremuneration\nprerenal\nprerent\nprerental\nprereport\nprerepresent\nprerepresentation\nprereption\nprerepublican\nprerequest\nprerequire\nprerequirement\nprerequisite\nprerequisition\npreresemblance\npreresemble\npreresolve\npreresort\nprerespectability\nprerespectable\nprerespiration\nprerespire\npreresponsibility\npreresponsible\nprerestoration\nprerestrain\nprerestraint\nprerestrict\nprerestriction\nprereturn\nprereveal\nprerevelation\nprerevenge\nprereversal\nprereverse\nprereview\nprerevise\nprerevision\nprerevival\nprerevolutionary\nprerheumatic\nprerich\nprerighteous\nprerighteously\nprerighteousness\nprerogatival\nprerogative\nprerogatived\nprerogatively\nprerogativity\nprerolandic\npreromantic\npreromanticism\npreroute\npreroutine\npreroyal\npreroyally\npreroyalty\nprerupt\npreruption\npresacral\npresacrifice\npresacrificial\npresage\npresageful\npresagefully\npresager\npresagient\npresaging\npresagingly\npresalvation\npresanctification\npresanctified\npresanctify\npresanguine\npresanitary\npresartorial\npresatisfaction\npresatisfactory\npresatisfy\npresavage\npresavagery\npresay\npresbyacousia\npresbyacusia\npresbycousis\npresbycusis\npresbyope\npresbyophrenia\npresbyophrenic\npresbyopia\npresbyopic\npresbyopy\npresbyte\npresbyter\npresbyteral\npresbyterate\npresbyterated\npresbyteress\npresbyteria\npresbyterial\npresbyterially\nPresbyterian\nPresbyterianism\nPresbyterianize\nPresbyterianly\npresbyterium\npresbytership\npresbytery\npresbytia\npresbytic\nPresbytinae\nPresbytis\npresbytism\nprescapula\nprescapular\nprescapularis\nprescholastic\npreschool\nprescience\nprescient\nprescientific\npresciently\nprescind\nprescindent\nprescission\nprescored\nprescout\nprescribable\nprescribe\nprescriber\nprescript\nprescriptibility\nprescriptible\nprescription\nprescriptionist\nprescriptive\nprescriptively\nprescriptiveness\nprescriptorial\nprescrive\nprescutal\nprescutum\npreseal\npresearch\npreseason\npreseasonal\npresecular\npresecure\npresee\npreselect\npresell\npreseminal\npreseminary\npresence\npresenced\npresenceless\npresenile\npresenility\npresensation\npresension\npresent\npresentability\npresentable\npresentableness\npresentably\npresental\npresentation\npresentational\npresentationism\npresentationist\npresentative\npresentatively\npresentee\npresentence\npresenter\npresential\npresentiality\npresentially\npresentialness\npresentient\npresentiment\npresentimental\npresentist\npresentive\npresentively\npresentiveness\npresently\npresentment\npresentness\npresentor\npreseparate\npreseparation\npreseparator\npreservability\npreservable\npreserval\npreservation\npreservationist\npreservative\npreservatize\npreservatory\npreserve\npreserver\npreserveress\npreses\npresession\npreset\npresettle\npresettlement\npresexual\npreshadow\npreshape\npreshare\npresharpen\npreshelter\npreship\npreshipment\npreshortage\npreshorten\npreshow\npreside\npresidence\npresidencia\npresidency\npresident\npresidente\npresidentess\npresidential\npresidentially\npresidentiary\npresidentship\npresider\npresidial\npresidially\npresidiary\npresidio\npresidium\npresift\npresign\npresignal\npresignificance\npresignificancy\npresignificant\npresignification\npresignificative\npresignificator\npresignify\npresimian\npreslavery\nPresley\npresmooth\npresocial\npresocialism\npresocialist\npresolar\npresolicit\npresolicitation\npresolution\npresolve\npresophomore\npresound\nprespecialist\nprespecialize\nprespecific\nprespecifically\nprespecification\nprespecify\nprespeculate\nprespeculation\npresphenoid\npresphenoidal\npresphygmic\nprespinal\nprespinous\nprespiracular\npresplendor\npresplenomegalic\nprespoil\nprespontaneity\nprespontaneous\nprespontaneously\nprespread\npresprinkle\nprespur\npress\npressable\npressboard\npressdom\npressel\npresser\npressfat\npressful\npressgang\npressible\npressing\npressingly\npressingness\npression\npressive\npressman\npressmanship\npressmark\npressor\npresspack\npressroom\npressurage\npressural\npressure\npressureless\npressureproof\npressurize\npressurizer\npresswoman\npresswork\npressworker\nprest\nprestabilism\nprestability\nprestable\nprestamp\nprestandard\nprestandardization\nprestandardize\nprestant\nprestate\nprestation\nprestatistical\npresteam\npresteel\nprester\npresternal\npresternum\nprestidigital\nprestidigitate\nprestidigitation\nprestidigitator\nprestidigitatorial\nprestige\nprestigiate\nprestigiation\nprestigiator\nprestigious\nprestigiously\nprestigiousness\nprestimulate\nprestimulation\nprestimulus\nprestissimo\npresto\nprestock\nprestomial\nprestomium\nprestorage\nprestore\nprestraighten\nprestrain\nprestrengthen\nprestress\nprestretch\nprestricken\nprestruggle\nprestubborn\nprestudious\nprestudiously\nprestudiousness\nprestudy\npresubdue\npresubiculum\npresubject\npresubjection\npresubmission\npresubmit\npresubordinate\npresubordination\npresubscribe\npresubscriber\npresubscription\npresubsist\npresubsistence\npresubsistent\npresubstantial\npresubstitute\npresubstitution\npresuccess\npresuccessful\npresuccessfully\npresuffer\npresuffering\npresufficiency\npresufficient\npresufficiently\npresuffrage\npresuggest\npresuggestion\npresuggestive\npresuitability\npresuitable\npresuitably\npresumable\npresumably\npresume\npresumedly\npresumer\npresuming\npresumption\npresumptious\npresumptiously\npresumptive\npresumptively\npresumptuous\npresumptuously\npresumptuousness\npresuperficial\npresuperficiality\npresuperficially\npresuperfluity\npresuperfluous\npresuperfluously\npresuperintendence\npresuperintendency\npresupervise\npresupervision\npresupervisor\npresupplemental\npresupplementary\npresupplicate\npresupplication\npresupply\npresupport\npresupposal\npresuppose\npresupposition\npresuppositionless\npresuppress\npresuppression\npresuppurative\npresupremacy\npresupreme\npresurgery\npresurgical\npresurmise\npresurprisal\npresurprise\npresurrender\npresurround\npresurvey\npresusceptibility\npresusceptible\npresuspect\npresuspend\npresuspension\npresuspicion\npresuspicious\npresuspiciously\npresuspiciousness\npresustain\npresutural\npreswallow\npresylvian\npresympathize\npresympathy\npresymphonic\npresymphony\npresymphysial\npresymptom\npresymptomatic\npresynapsis\npresynaptic\npresystematic\npresystematically\npresystole\npresystolic\npretabulate\npretabulation\npretan\npretangible\npretangibly\npretannage\npretardily\npretardiness\npretardy\npretariff\npretaste\npreteach\npretechnical\npretechnically\npretelegraph\npretelegraphic\npretelephone\npretelephonic\npretell\npretemperate\npretemperately\npretemporal\npretend\npretendant\npretended\npretendedly\npretender\nPretenderism\npretendership\npretendingly\npretendingness\npretense\npretenseful\npretenseless\npretension\npretensional\npretensionless\npretensive\npretensively\npretensiveness\npretentative\npretentious\npretentiously\npretentiousness\npretercanine\npreterchristian\npreterconventional\npreterdetermined\npreterdeterminedly\npreterdiplomatic\npreterdiplomatically\npreterequine\npreteressential\npretergress\npretergression\npreterhuman\npreterience\npreterient\npreterintentional\npreterist\npreterit\npreteriteness\npreterition\npreteritive\npreteritness\npreterlabent\npreterlegal\npreterlethal\npreterminal\npretermission\npretermit\npretermitter\npreternative\npreternatural\npreternaturalism\npreternaturalist\npreternaturality\npreternaturally\npreternaturalness\npreternormal\npreternotorious\npreternuptial\npreterpluperfect\npreterpolitical\npreterrational\npreterregular\npreterrestrial\npreterritorial\npreterroyal\npreterscriptural\npreterseasonable\npretersensual\npretervection\npretest\npretestify\npretestimony\npretext\npretexted\npretextuous\npretheological\nprethoracic\nprethoughtful\nprethoughtfully\nprethoughtfulness\nprethreaten\nprethrill\nprethrust\npretibial\npretimeliness\npretimely\npretincture\npretire\npretoken\npretone\npretonic\npretorial\npretorship\npretorsional\npretorture\npretournament\npretrace\npretracheal\npretraditional\npretrain\npretraining\npretransact\npretransaction\npretranscribe\npretranscription\npretranslate\npretranslation\npretransmission\npretransmit\npretransport\npretransportation\npretravel\npretreat\npretreatment\npretreaty\npretrematic\npretribal\npretry\nprettification\nprettifier\nprettify\nprettikin\nprettily\nprettiness\npretty\nprettyface\nprettyish\nprettyism\npretubercular\npretuberculous\npretympanic\npretyphoid\npretypify\npretypographical\npretyrannical\npretyranny\npretzel\npreultimate\npreultimately\npreumbonal\npreunderstand\npreundertake\npreunion\npreunite\npreutilizable\npreutilization\npreutilize\nprevacate\nprevacation\nprevaccinate\nprevaccination\nprevail\nprevailance\nprevailer\nprevailingly\nprevailingness\nprevailment\nprevalence\nprevalency\nprevalent\nprevalently\nprevalentness\nprevalescence\nprevalescent\nprevalid\nprevalidity\nprevalidly\nprevaluation\nprevalue\nprevariation\nprevaricate\nprevarication\nprevaricator\nprevaricatory\nprevascular\nprevegetation\nprevelar\nprevenance\nprevenancy\nprevene\nprevenience\nprevenient\npreveniently\nprevent\npreventability\npreventable\npreventative\npreventer\npreventible\npreventingly\nprevention\npreventionism\npreventionist\npreventive\npreventively\npreventiveness\npreventorium\npreventure\npreverb\npreverbal\npreverification\npreverify\nprevernal\npreversion\nprevertebral\nprevesical\npreveto\nprevictorious\nprevide\nprevidence\npreview\nprevigilance\nprevigilant\nprevigilantly\npreviolate\npreviolation\nprevious\npreviously\npreviousness\nprevise\nprevisibility\nprevisible\nprevisibly\nprevision\nprevisional\nprevisit\nprevisitor\nprevisive\nprevisor\nprevocal\nprevocalic\nprevocally\nprevocational\nprevogue\nprevoid\nprevoidance\nprevolitional\nprevolunteer\nprevomer\nprevotal\nprevote\nprevoyance\nprevoyant\nprevue\nprewar\nprewarn\nprewarrant\nprewash\npreweigh\nprewelcome\nprewhip\nprewilling\nprewillingly\nprewillingness\nprewire\nprewireless\nprewitness\nprewonder\nprewonderment\npreworldliness\npreworldly\npreworship\npreworthily\npreworthiness\npreworthy\nprewound\nprewrap\nprexy\nprey\npreyer\npreyful\npreyingly\npreyouthful\nprezonal\nprezone\nprezygapophysial\nprezygapophysis\nprezygomatic\nPria\npriacanthid\nPriacanthidae\npriacanthine\nPriacanthus\nPriapean\nPriapic\npriapism\nPriapulacea\npriapulid\nPriapulida\nPriapulidae\npriapuloid\nPriapuloidea\nPriapulus\nPriapus\nPriapusian\nPrice\nprice\npriceable\npriceably\npriced\npriceite\npriceless\npricelessness\npricer\nprich\nprick\nprickant\npricked\npricker\npricket\nprickfoot\npricking\nprickingly\nprickish\nprickle\nprickleback\nprickled\npricklefish\nprickless\nprickliness\nprickling\npricklingly\npricklouse\nprickly\npricklyback\nprickmadam\nprickmedainty\nprickproof\npricks\nprickseam\nprickshot\nprickspur\npricktimber\nprickwood\npricky\npride\nprideful\npridefully\npridefulness\nprideless\npridelessly\nprideling\nprideweed\npridian\npriding\npridingly\npridy\npried\nprier\npriest\npriestal\npriestcap\npriestcraft\npriestdom\npriesteen\npriestery\npriestess\npriestfish\npriesthood\npriestianity\npriestish\npriestism\npriestless\npriestlet\npriestlike\npriestliness\npriestling\npriestly\npriestship\npriestshire\nprig\nprigdom\nprigger\npriggery\npriggess\npriggish\npriggishly\npriggishness\npriggism\nprighood\nprigman\nprill\nprillion\nprim\nprima\nprimacy\nprimage\nprimal\nprimality\nprimar\nprimarian\nprimaried\nprimarily\nprimariness\nprimary\nprimatal\nprimate\nPrimates\nprimateship\nprimatial\nprimatic\nprimatical\nprimavera\nprimaveral\nprime\nprimegilt\nprimely\nprimeness\nprimer\nprimero\nprimerole\nprimeval\nprimevalism\nprimevally\nprimeverose\nprimevity\nprimevous\nprimevrin\nPrimianist\nprimigene\nprimigenial\nprimigenian\nprimigenious\nprimigenous\nprimigravida\nprimine\npriming\nprimipara\nprimiparity\nprimiparous\nprimipilar\nprimitiae\nprimitial\nprimitias\nprimitive\nprimitively\nprimitivism\nprimitivist\nprimitivistic\nprimitivity\nprimly\nprimness\nprimogenetrix\nprimogenial\nprimogenital\nprimogenitary\nprimogenitive\nprimogenitor\nprimogeniture\nprimogenitureship\nprimogenous\nprimoprime\nprimoprimitive\nprimordality\nprimordia\nprimordial\nprimordialism\nprimordially\nprimordiate\nprimordium\nprimosity\nprimost\nprimp\nprimrose\nprimrosed\nprimrosetide\nprimrosetime\nprimrosy\nprimsie\nPrimula\nprimula\nPrimulaceae\nprimulaceous\nPrimulales\nprimulaverin\nprimulaveroside\nprimulic\nprimuline\nPrimulinus\nPrimus\nprimus\nprimwort\nprimy\nprince\nprinceage\nprincecraft\nprincedom\nprincehood\nPrinceite\nprincekin\nprinceless\nprincelet\nprincelike\nprinceliness\nprinceling\nprincely\nprinceps\nprinceship\nprincess\nprincessdom\nprincesse\nprincesslike\nprincessly\nprincewood\nprincified\nprincify\nprincipal\nprincipality\nprincipally\nprincipalness\nprincipalship\nprincipate\nPrincipes\nprincipes\nprincipia\nprincipiant\nprincipiate\nprincipiation\nprincipium\nprinciple\nprincipulus\nprincock\nprincox\nprine\npringle\nprink\nprinker\nprinkle\nprinky\nprint\nprintability\nprintable\nprintableness\nprinted\nprinter\nprinterdom\nprinterlike\nprintery\nprinting\nprintless\nprintline\nprintscript\nprintworks\nPriodon\npriodont\nPriodontes\nprion\nprionid\nPrionidae\nPrioninae\nprionine\nPrionodesmacea\nprionodesmacean\nprionodesmaceous\nprionodesmatic\nPrionodon\nprionodont\nPrionopinae\nprionopine\nPrionops\nPrionus\nprior\nprioracy\nprioral\npriorate\nprioress\nprioristic\nprioristically\npriorite\npriority\npriorly\npriorship\npriory\nprisable\nprisage\nprisal\npriscan\nPriscian\nPriscianist\nPriscilla\nPriscillian\nPriscillianism\nPriscillianist\nprism\nprismal\nprismatic\nprismatical\nprismatically\nprismatization\nprismatize\nprismatoid\nprismatoidal\nprismed\nprismoid\nprismoidal\nprismy\nprisometer\nprison\nprisonable\nprisondom\nprisoner\nprisonful\nprisonlike\nprisonment\nprisonous\npriss\nprissily\nprissiness\nprissy\npristane\npristine\nPristipomatidae\nPristipomidae\nPristis\nPristodus\npritch\nPritchardia\npritchel\nprithee\nprius\nprivacity\nprivacy\nprivant\nprivate\nprivateer\nprivateersman\nprivately\nprivateness\nprivation\nprivative\nprivatively\nprivativeness\nprivet\nprivilege\nprivileged\nprivileger\nprivily\npriviness\nprivity\nprivy\nprizable\nprize\nprizeable\nprizeholder\nprizeman\nprizer\nprizery\nprizetaker\nprizeworthy\npro\nproa\nproabolitionist\nproabsolutism\nproabsolutist\nproabstinence\nproacademic\nproacceptance\nproacquisition\nproacquittal\nproaction\nproactor\nproaddition\nproadjournment\nproadministration\nproadmission\nproadoption\nproadvertising\nproaesthetic\nproaggressionist\nproagitation\nproagrarian\nproagreement\nproagricultural\nproagule\nproairesis\nproairplane\nproal\nproalcoholism\nproalien\nproalliance\nproallotment\nproalteration\nproamateur\nproambient\nproamendment\nproamnion\nproamniotic\nproamusement\nproanaphora\nproanaphoral\nproanarchic\nproangiosperm\nproangiospermic\nproangiospermous\nproanimistic\nproannexation\nproannexationist\nproantarctic\nproanthropos\nproapostolic\nproappointment\nproapportionment\nproappreciation\nproappropriation\nproapproval\nproaquatic\nproarbitration\nproarbitrationist\nproarchery\nproarctic\nproaristocratic\nproarmy\nProarthri\nproassessment\nproassociation\nproatheist\nproatheistic\nproathletic\nproatlas\nproattack\nproattendance\nproauction\nproaudience\nproaulion\nproauthor\nproauthority\nproautomobile\nproavian\nproaviation\nProavis\nproaward\nprob\nprobabiliorism\nprobabiliorist\nprobabilism\nprobabilist\nprobabilistic\nprobability\nprobabilize\nprobabl\nprobable\nprobableness\nprobably\nprobachelor\nprobal\nproballoon\nprobang\nprobanishment\nprobankruptcy\nprobant\nprobargaining\nprobaseball\nprobasketball\nprobate\nprobathing\nprobatical\nprobation\nprobational\nprobationary\nprobationer\nprobationerhood\nprobationership\nprobationism\nprobationist\nprobationship\nprobative\nprobatively\nprobator\nprobatory\nprobattle\nprobattleship\nprobe\nprobeable\nprobeer\nprober\nprobetting\nprobiology\nprobituminous\nprobity\nproblem\nproblematic\nproblematical\nproblematically\nproblematist\nproblematize\nproblemdom\nproblemist\nproblemistic\nproblemize\nproblemwise\nproblockade\nprobonding\nprobonus\nproborrowing\nproboscidal\nproboscidate\nProboscidea\nproboscidean\nproboscideous\nproboscides\nproboscidial\nproboscidian\nproboscidiferous\nproboscidiform\nprobosciform\nprobosciformed\nProbosciger\nproboscis\nproboscislike\nprobouleutic\nproboulevard\nprobowling\nproboxing\nproboycott\nprobrick\nprobridge\nprobroadcasting\nprobudget\nprobudgeting\nprobuilding\nprobusiness\nprobuying\nprocacious\nprocaciously\nprocacity\nprocaine\nprocambial\nprocambium\nprocanal\nprocancellation\nprocapital\nprocapitalism\nprocapitalist\nprocarnival\nprocarp\nprocarpium\nprocarrier\nprocatalectic\nprocatalepsis\nprocatarctic\nprocatarxis\nprocathedral\nProcavia\nProcaviidae\nprocedendo\nprocedural\nprocedure\nproceed\nproceeder\nproceeding\nproceeds\nproceleusmatic\nProcellaria\nprocellarian\nprocellarid\nProcellariidae\nProcellariiformes\nprocellariine\nprocellas\nprocello\nprocellose\nprocellous\nprocensorship\nprocensure\nprocentralization\nprocephalic\nprocercoid\nprocereal\nprocerebral\nprocerebrum\nproceremonial\nproceremonialism\nproceremonialist\nproceres\nprocerite\nproceritic\nprocerity\nprocerus\nprocess\nprocessal\nprocession\nprocessional\nprocessionalist\nprocessionally\nprocessionary\nprocessioner\nprocessionist\nprocessionize\nprocessionwise\nprocessive\nprocessor\nprocessual\nprocharity\nprochein\nprochemical\nprochlorite\nprochondral\nprochoos\nprochordal\nprochorion\nprochorionic\nprochromosome\nprochronic\nprochronism\nprochronize\nprochurch\nprochurchian\nprocidence\nprocident\nprocidentia\nprocivic\nprocivilian\nprocivism\nproclaim\nproclaimable\nproclaimant\nproclaimer\nproclaiming\nproclaimingly\nproclamation\nproclamator\nproclamatory\nproclassic\nproclassical\nproclergy\nproclerical\nproclericalism\nprocline\nproclisis\nproclitic\nproclive\nproclivitous\nproclivity\nproclivous\nproclivousness\nProcne\nprocnemial\nProcoelia\nprocoelia\nprocoelian\nprocoelous\nprocoercive\nprocollectivistic\nprocollegiate\nprocombat\nprocombination\nprocomedy\nprocommemoration\nprocomment\nprocommercial\nprocommission\nprocommittee\nprocommunal\nprocommunism\nprocommunist\nprocommutation\nprocompensation\nprocompetition\nprocompromise\nprocompulsion\nproconcentration\nproconcession\nproconciliation\nprocondemnation\nproconfederationist\nproconference\nproconfession\nproconfessionist\nproconfiscation\nproconformity\nProconnesian\nproconquest\nproconscription\nproconscriptive\nproconservation\nproconservationist\nproconsolidation\nproconstitutional\nproconstitutionalism\nproconsul\nproconsular\nproconsulary\nproconsulate\nproconsulship\nproconsultation\nprocontinuation\nproconvention\nproconventional\nproconviction\nprocoracoid\nprocoracoidal\nprocorporation\nprocosmetic\nprocosmopolitan\nprocotton\nprocourt\nprocrastinate\nprocrastinating\nprocrastinatingly\nprocrastination\nprocrastinative\nprocrastinatively\nprocrastinator\nprocrastinatory\nprocreant\nprocreate\nprocreation\nprocreative\nprocreativeness\nprocreator\nprocreatory\nprocreatress\nprocreatrix\nprocremation\nProcris\nprocritic\nprocritique\nProcrustean\nProcrusteanism\nProcrusteanize\nProcrustes\nprocrypsis\nprocryptic\nprocryptically\nproctal\nproctalgia\nproctalgy\nproctatresia\nproctatresy\nproctectasia\nproctectomy\nprocteurynter\nproctitis\nproctocele\nproctoclysis\nproctocolitis\nproctocolonoscopy\nproctocystoplasty\nproctocystotomy\nproctodaeal\nproctodaeum\nproctodynia\nproctoelytroplastic\nproctologic\nproctological\nproctologist\nproctology\nproctoparalysis\nproctoplastic\nproctoplasty\nproctoplegia\nproctopolypus\nproctoptoma\nproctoptosis\nproctor\nproctorage\nproctoral\nproctorial\nproctorially\nproctorical\nproctorization\nproctorize\nproctorling\nproctorrhagia\nproctorrhaphy\nproctorrhea\nproctorship\nproctoscope\nproctoscopic\nproctoscopy\nproctosigmoidectomy\nproctosigmoiditis\nproctospasm\nproctostenosis\nproctostomy\nproctotome\nproctotomy\nproctotresia\nproctotrypid\nProctotrypidae\nproctotrypoid\nProctotrypoidea\nproctovalvotomy\nProculian\nprocumbent\nprocurable\nprocuracy\nprocural\nprocurance\nprocurate\nprocuration\nprocurative\nprocurator\nprocuratorate\nprocuratorial\nprocuratorship\nprocuratory\nprocuratrix\nprocure\nprocurement\nprocurer\nprocuress\nprocurrent\nprocursive\nprocurvation\nprocurved\nProcyon\nProcyonidae\nprocyoniform\nProcyoniformia\nProcyoninae\nprocyonine\nproczarist\nprod\nprodatary\nprodder\nproddle\nprodecoration\nprodefault\nprodefiance\nprodelay\nprodelision\nprodemocratic\nProdenia\nprodenominational\nprodentine\nprodeportation\nprodespotic\nprodespotism\nprodialogue\nprodigal\nprodigalish\nprodigalism\nprodigality\nprodigalize\nprodigally\nprodigiosity\nprodigious\nprodigiously\nprodigiousness\nprodigus\nprodigy\nprodisarmament\nprodisplay\nprodissoconch\nprodissolution\nprodistribution\nprodition\nproditorious\nproditoriously\nprodivision\nprodivorce\nprodproof\nprodramatic\nprodroma\nprodromal\nprodromatic\nprodromatically\nprodrome\nprodromic\nprodromous\nprodromus\nproducal\nproduce\nproduceable\nproduceableness\nproduced\nproducent\nproducer\nproducership\nproducibility\nproducible\nproducibleness\nproduct\nproducted\nproductibility\nproductible\nproductid\nProductidae\nproductile\nproduction\nproductional\nproductionist\nproductive\nproductively\nproductiveness\nproductivity\nproductoid\nproductor\nproductory\nproductress\nProductus\nproecclesiastical\nproeconomy\nproeducation\nproeducational\nproegumenal\nproelectric\nproelectrical\nproelectrification\nproelectrocution\nproelimination\nproem\nproembryo\nproembryonic\nproemial\nproemium\nproemployee\nproemptosis\nproenforcement\nproenlargement\nproenzym\nproenzyme\nproepimeron\nproepiscopist\nproepisternum\nproequality\nproethical\nproethnic\nproethnically\nproetid\nProetidae\nProetus\nproevolution\nproevolutionist\nproexamination\nproexecutive\nproexemption\nproexercise\nproexperiment\nproexpert\nproexporting\nproexposure\nproextension\nproextravagance\nprof\nprofaculty\nprofanable\nprofanableness\nprofanably\nprofanation\nprofanatory\nprofanchise\nprofane\nprofanely\nprofanement\nprofaneness\nprofaner\nprofanism\nprofanity\nprofanize\nprofarmer\nprofection\nprofectional\nprofectitious\nprofederation\nprofeminism\nprofeminist\nproferment\nprofert\nprofess\nprofessable\nprofessed\nprofessedly\nprofession\nprofessional\nprofessionalism\nprofessionalist\nprofessionality\nprofessionalization\nprofessionalize\nprofessionally\nprofessionist\nprofessionize\nprofessionless\nprofessive\nprofessively\nprofessor\nprofessorate\nprofessordom\nprofessoress\nprofessorial\nprofessorialism\nprofessorially\nprofessoriate\nprofessorlike\nprofessorling\nprofessorship\nprofessory\nproffer\nprofferer\nproficience\nproficiency\nproficient\nproficiently\nproficientness\nprofiction\nproficuous\nproficuously\nprofile\nprofiler\nprofilist\nprofilograph\nprofit\nprofitability\nprofitable\nprofitableness\nprofitably\nprofiteer\nprofiteering\nprofiter\nprofiting\nprofitless\nprofitlessly\nprofitlessness\nprofitmonger\nprofitmongering\nprofitproof\nproflated\nproflavine\nprofligacy\nprofligate\nprofligately\nprofligateness\nprofligation\nproflogger\nprofluence\nprofluent\nprofluvious\nprofluvium\nproforeign\nprofound\nprofoundly\nprofoundness\nprofraternity\nprofugate\nprofulgent\nprofunda\nprofundity\nprofuse\nprofusely\nprofuseness\nprofusion\nprofusive\nprofusively\nprofusiveness\nprog\nprogambling\nprogamete\nprogamic\nproganosaur\nProganosauria\nprogenerate\nprogeneration\nprogenerative\nprogenital\nprogenitive\nprogenitiveness\nprogenitor\nprogenitorial\nprogenitorship\nprogenitress\nprogenitrix\nprogeniture\nprogenity\nprogeny\nprogeotropic\nprogeotropism\nprogeria\nprogermination\nprogestational\nprogesterone\nprogestin\nprogger\nproglottic\nproglottid\nproglottidean\nproglottis\nprognathi\nprognathic\nprognathism\nprognathous\nprognathy\nprogne\nprognose\nprognosis\nprognostic\nprognosticable\nprognostically\nprognosticate\nprognostication\nprognosticative\nprognosticator\nprognosticatory\nprogoneate\nprogospel\nprogovernment\nprogram\nprogramist\nprogramistic\nprogramma\nprogrammar\nprogrammatic\nprogrammatically\nprogrammatist\nprogrammer\nprogrede\nprogrediency\nprogredient\nprogress\nprogresser\nprogression\nprogressional\nprogressionally\nprogressionary\nprogressionism\nprogressionist\nprogressism\nprogressist\nprogressive\nprogressively\nprogressiveness\nprogressivism\nprogressivist\nprogressivity\nprogressor\nproguardian\nProgymnasium\nprogymnosperm\nprogymnospermic\nprogymnospermous\nprogypsy\nprohaste\nprohibit\nprohibiter\nprohibition\nprohibitionary\nprohibitionism\nprohibitionist\nprohibitive\nprohibitively\nprohibitiveness\nprohibitor\nprohibitorily\nprohibitory\nproholiday\nprohostility\nprohuman\nprohumanistic\nprohydrotropic\nprohydrotropism\nproidealistic\nproimmunity\nproinclusion\nproincrease\nproindemnity\nproindustrial\nproinjunction\nproinnovationist\nproinquiry\nproinsurance\nprointervention\nproinvestment\nproirrigation\nprojacient\nproject\nprojectable\nprojectedly\nprojectile\nprojecting\nprojectingly\nprojection\nprojectional\nprojectionist\nprojective\nprojectively\nprojectivity\nprojector\nprojectress\nprojectrix\nprojecture\nprojicience\nprojicient\nprojiciently\nprojournalistic\nprojudicial\nproke\nprokeimenon\nproker\nprokindergarten\nproklausis\nprolabium\nprolabor\nprolacrosse\nprolactin\nprolamin\nprolan\nprolapse\nprolapsus\nprolarva\nprolarval\nprolate\nprolately\nprolateness\nprolation\nprolative\nprolatively\nproleague\nproleaguer\nprolectite\nproleg\nprolegate\nprolegislative\nprolegomena\nprolegomenal\nprolegomenary\nprolegomenist\nprolegomenon\nprolegomenous\nproleniency\nprolepsis\nproleptic\nproleptical\nproleptically\nproleptics\nproletairism\nproletarian\nproletarianism\nproletarianization\nproletarianize\nproletarianly\nproletarianness\nproletariat\nproletariatism\nproletarization\nproletarize\nproletary\nproletcult\nproleucocyte\nproleukocyte\nprolicense\nprolicidal\nprolicide\nproliferant\nproliferate\nproliferation\nproliferative\nproliferous\nproliferously\nprolific\nprolificacy\nprolifical\nprolifically\nprolificalness\nprolificate\nprolification\nprolificity\nprolificly\nprolificness\nprolificy\nprolify\nproligerous\nproline\nproliquor\nproliterary\nproliturgical\nproliturgist\nprolix\nprolixity\nprolixly\nprolixness\nprolocution\nprolocutor\nprolocutorship\nprolocutress\nprolocutrix\nprologist\nprologize\nprologizer\nprologos\nprologue\nprologuelike\nprologuer\nprologuist\nprologuize\nprologuizer\nprologus\nprolong\nprolongable\nprolongableness\nprolongably\nprolongate\nprolongation\nprolonge\nprolonger\nprolongment\nprolusion\nprolusionize\nprolusory\nprolyl\npromachinery\npromachos\npromagisterial\npromagistracy\npromagistrate\npromajority\npromammal\nPromammalia\npromammalian\npromarriage\npromatrimonial\npromatrimonialist\npromaximum\npromemorial\npromenade\npromenader\npromenaderess\npromercantile\npromercy\npromerger\npromeristem\npromerit\npromeritor\nPromethea\nPromethean\nPrometheus\npromethium\npromic\npromilitarism\npromilitarist\npromilitary\nprominence\nprominency\nprominent\nprominently\nprominimum\nproministry\nprominority\npromisable\npromiscuity\npromiscuous\npromiscuously\npromiscuousness\npromise\npromisee\npromiseful\npromiseless\npromisemonger\npromiseproof\npromiser\npromising\npromisingly\npromisingness\npromisor\npromissionary\npromissive\npromissor\npromissorily\npromissory\npromitosis\npromittor\npromnesia\npromoderation\npromoderationist\npromodernist\npromodernistic\npromonarchic\npromonarchical\npromonarchicalness\npromonarchist\npromonopolist\npromonopoly\npromontoried\npromontory\npromoral\npromorph\npromorphological\npromorphologically\npromorphologist\npromorphology\npromotable\npromote\npromotement\npromoter\npromotion\npromotional\npromotive\npromotiveness\npromotor\npromotorial\npromotress\npromotrix\npromovable\npromovent\nprompt\npromptbook\nprompter\npromptitude\npromptive\npromptly\npromptness\npromptress\npromptuary\nprompture\npromulgate\npromulgation\npromulgator\npromulge\npromulger\npromuscidate\npromuscis\npromycelial\npromycelium\npromythic\npronaos\npronate\npronation\npronational\npronationalism\npronationalist\npronationalistic\npronative\npronatoflexor\npronator\npronaval\npronavy\nprone\npronegotiation\npronegro\npronegroism\npronely\nproneness\npronephric\npronephridiostome\npronephron\npronephros\nproneur\nprong\nprongbuck\npronged\npronger\npronghorn\npronglike\npronic\npronograde\npronominal\npronominalize\npronominally\npronomination\npronotal\npronotum\npronoun\npronounal\npronounce\npronounceable\npronounced\npronouncedly\npronouncement\npronounceness\npronouncer\npronpl\npronto\nPronuba\npronuba\npronubial\npronuclear\npronucleus\npronumber\npronunciability\npronunciable\npronuncial\npronunciamento\npronunciation\npronunciative\npronunciator\npronunciatory\npronymph\npronymphal\nproo\nprooemiac\nprooemion\nprooemium\nproof\nproofer\nproofful\nproofing\nproofless\nprooflessly\nproofness\nproofread\nproofreader\nproofreading\nproofroom\nproofy\nprop\npropadiene\npropaedeutic\npropaedeutical\npropaedeutics\npropagability\npropagable\npropagableness\npropagand\npropaganda\npropagandic\npropagandism\npropagandist\npropagandistic\npropagandistically\npropagandize\npropagate\npropagation\npropagational\npropagative\npropagator\npropagatory\npropagatress\npropago\npropagulum\npropale\npropalinal\npropane\npropanedicarboxylic\npropanol\npropanone\npropapist\nproparasceve\npropargyl\npropargylic\nProparia\nproparian\nproparliamental\nproparoxytone\nproparoxytonic\nproparticipation\npropatagial\npropatagian\npropatagium\npropatriotic\npropatriotism\npropatronage\npropayment\npropellable\npropellant\npropellent\npropeller\npropelment\npropend\npropendent\npropene\npropenoic\npropense\npropensely\npropenseness\npropension\npropensitude\npropensity\npropenyl\npropenylic\nproper\nproperispome\nproperispomenon\nproperitoneal\nproperly\nproperness\npropertied\nproperty\npropertyless\npropertyship\npropessimism\npropessimist\nprophase\nprophasis\nprophecy\nprophecymonger\nprophesiable\nprophesier\nprophesy\nprophet\nprophetess\nprophethood\nprophetic\nprophetical\npropheticality\nprophetically\npropheticalness\npropheticism\npropheticly\nprophetism\nprophetize\nprophetless\nprophetlike\nprophetry\nprophetship\nprophilosophical\nprophloem\nprophoric\nprophototropic\nprophototropism\nprophylactic\nprophylactical\nprophylactically\nprophylaxis\nprophylaxy\nprophyll\nprophyllum\npropination\npropine\npropinoic\npropinquant\npropinque\npropinquity\npropinquous\npropiolaldehyde\npropiolate\npropiolic\npropionate\npropione\nPropionibacterieae\nPropionibacterium\npropionic\npropionitril\npropionitrile\npropionyl\nPropithecus\npropitiable\npropitial\npropitiate\npropitiatingly\npropitiation\npropitiative\npropitiator\npropitiatorily\npropitiatory\npropitious\npropitiously\npropitiousness\nproplasm\nproplasma\nproplastic\npropless\npropleural\npropleuron\nproplex\nproplexus\nPropliopithecus\npropodeal\npropodeon\npropodeum\npropodial\npropodiale\npropodite\npropoditic\npropodium\npropolis\npropolitical\npropolization\npropolize\npropone\nproponement\nproponent\nproponer\npropons\nPropontic\npropooling\npropopery\nproportion\nproportionability\nproportionable\nproportionableness\nproportionably\nproportional\nproportionalism\nproportionality\nproportionally\nproportionate\nproportionately\nproportionateness\nproportioned\nproportioner\nproportionless\nproportionment\nproposable\nproposal\nproposant\npropose\nproposer\nproposition\npropositional\npropositionally\npropositionize\npropositus\npropound\npropounder\npropoundment\npropoxy\nproppage\npropper\npropraetor\npropraetorial\npropraetorian\nproprecedent\npropriation\nproprietage\nproprietarian\nproprietariat\nproprietarily\nproprietary\nproprietor\nproprietorial\nproprietorially\nproprietorship\nproprietory\nproprietous\nproprietress\nproprietrix\npropriety\nproprioception\nproprioceptive\nproprioceptor\npropriospinal\nproprium\nproprivilege\nproproctor\nproprofit\nproprovincial\nproprovost\nprops\npropterygial\npropterygium\nproptosed\nproptosis\npropublication\npropublicity\npropugnacled\npropugnaculum\npropugnation\npropugnator\npropugner\npropulsation\npropulsatory\npropulsion\npropulsity\npropulsive\npropulsor\npropulsory\npropunishment\npropupa\npropupal\npropurchase\nPropus\npropwood\npropygidium\npropyl\npropylacetic\npropylaeum\npropylamine\npropylation\npropylene\npropylic\npropylidene\npropylite\npropylitic\npropylitization\npropylon\npropyne\npropynoic\nproquaestor\nproracing\nprorailroad\nprorata\nproratable\nprorate\nproration\nprore\nproreader\nprorealism\nprorealist\nprorealistic\nproreality\nprorean\nprorebate\nprorebel\nprorecall\nproreciprocation\nprorecognition\nproreconciliation\nprorector\nprorectorate\nproredemption\nproreduction\nproreferendum\nproreform\nproreformist\nproregent\nprorelease\nProreptilia\nproreptilian\nproreption\nprorepublican\nproresearch\nproreservationist\nproresignation\nprorestoration\nprorestriction\nprorevision\nprorevisionist\nprorevolution\nprorevolutionary\nprorevolutionist\nprorhinal\nProrhipidoglossomorpha\nproritual\nproritualistic\nprorogate\nprorogation\nprorogator\nprorogue\nproroguer\nproromance\nproromantic\nproromanticism\nproroyal\nproroyalty\nprorrhesis\nprorsad\nprorsal\nproruption\nprosabbath\nprosabbatical\nprosacral\nprosaic\nprosaical\nprosaically\nprosaicalness\nprosaicism\nprosaicness\nprosaism\nprosaist\nprosar\nProsarthri\nprosateur\nproscapula\nproscapular\nproscenium\nproscholastic\nproschool\nproscientific\nproscolecine\nproscolex\nproscribable\nproscribe\nproscriber\nproscript\nproscription\nproscriptional\nproscriptionist\nproscriptive\nproscriptively\nproscriptiveness\nproscutellar\nproscutellum\nproscynemata\nprose\nprosecrecy\nprosecretin\nprosect\nprosection\nprosector\nprosectorial\nprosectorium\nprosectorship\nprosecutable\nprosecute\nprosecution\nprosecutor\nprosecutrix\nproselenic\nproselike\nproselyte\nproselyter\nproselytical\nproselytingly\nproselytism\nproselytist\nproselytistic\nproselytization\nproselytize\nproselytizer\nproseman\nproseminar\nproseminary\nproseminate\nprosemination\nprosencephalic\nprosencephalon\nprosenchyma\nprosenchymatous\nproseneschal\nproser\nProserpinaca\nprosethmoid\nproseucha\nproseuche\nprosification\nprosifier\nprosify\nprosiliency\nprosilient\nprosiliently\nprosilverite\nprosily\nProsimiae\nprosimian\nprosiness\nprosing\nprosingly\nprosiphon\nprosiphonal\nprosiphonate\nprosish\nprosist\nproslambanomenos\nproslave\nproslaver\nproslavery\nproslaveryism\nprosneusis\nproso\nprosobranch\nProsobranchia\nProsobranchiata\nprosobranchiate\nprosocele\nprosodal\nprosode\nprosodemic\nprosodetic\nprosodiac\nprosodiacal\nprosodiacally\nprosodial\nprosodially\nprosodian\nprosodic\nprosodical\nprosodically\nprosodion\nprosodist\nprosodus\nprosody\nprosogaster\nprosogyrate\nprosogyrous\nprosoma\nprosomal\nprosomatic\nprosonomasia\nprosopalgia\nprosopalgic\nprosopantritis\nprosopectasia\nprosophist\nprosopic\nprosopically\nProsopis\nprosopite\nProsopium\nprosoplasia\nprosopography\nprosopon\nprosoponeuralgia\nprosopoplegia\nprosopoplegic\nprosopopoeia\nprosopopoeial\nprosoposchisis\nprosopospasm\nprosopotocia\nprosopyl\nprosopyle\nprosorus\nprospect\nprospection\nprospective\nprospectively\nprospectiveness\nprospectless\nprospector\nprospectus\nprospectusless\nprospeculation\nprosper\nprosperation\nprosperity\nprosperous\nprosperously\nprosperousness\nprospicience\nprosporangium\nprosport\npross\nprossy\nprostatauxe\nprostate\nprostatectomy\nprostatelcosis\nprostatic\nprostaticovesical\nprostatism\nprostatitic\nprostatitis\nprostatocystitis\nprostatocystotomy\nprostatodynia\nprostatolith\nprostatomegaly\nprostatometer\nprostatomyomectomy\nprostatorrhea\nprostatorrhoea\nprostatotomy\nprostatovesical\nprostatovesiculectomy\nprostatovesiculitis\nprostemmate\nprostemmatic\nprosternal\nprosternate\nprosternum\nprostheca\nprosthenic\nprosthesis\nprosthetic\nprosthetically\nprosthetics\nprosthetist\nprosthion\nprosthionic\nprosthodontia\nprosthodontist\nProstigmin\nprostitute\nprostitutely\nprostitution\nprostitutor\nprostomial\nprostomiate\nprostomium\nprostrate\nprostration\nprostrative\nprostrator\nprostrike\nprostyle\nprostylos\nprosubmission\nprosubscription\nprosubstantive\nprosubstitution\nprosuffrage\nprosupervision\nprosupport\nprosurgical\nprosurrender\nprosy\nprosyllogism\nprosyndicalism\nprosyndicalist\nprotactic\nprotactinium\nprotagon\nprotagonism\nprotagonist\nProtagorean\nProtagoreanism\nprotalbumose\nprotamine\nprotandric\nprotandrism\nprotandrous\nprotandrously\nprotandry\nprotanomal\nprotanomalous\nprotanope\nprotanopia\nprotanopic\nprotargentum\nprotargin\nProtargol\nprotariff\nprotarsal\nprotarsus\nprotasis\nprotaspis\nprotatic\nprotatically\nprotax\nprotaxation\nprotaxial\nprotaxis\nprote\nProtea\nprotea\nProteaceae\nproteaceous\nprotead\nprotean\nproteanly\nproteanwise\nprotease\nprotechnical\nprotect\nprotectant\nprotectible\nprotecting\nprotectingly\nprotectingness\nprotection\nprotectional\nprotectionate\nprotectionism\nprotectionist\nprotectionize\nprotectionship\nprotective\nprotectively\nprotectiveness\nProtectograph\nprotector\nprotectoral\nprotectorate\nprotectorial\nprotectorian\nprotectorless\nprotectorship\nprotectory\nprotectress\nprotectrix\nprotege\nprotegee\nprotegulum\nproteic\nProteida\nProteidae\nproteide\nproteidean\nproteidogenous\nproteiform\nprotein\nproteinaceous\nproteinase\nproteinic\nproteinochromogen\nproteinous\nproteinuria\nProteles\nProtelidae\nProtelytroptera\nprotelytropteran\nprotelytropteron\nprotelytropterous\nprotemperance\nprotempirical\nprotemporaneous\nprotend\nprotension\nprotensity\nprotensive\nprotensively\nproteoclastic\nproteogenous\nproteolysis\nproteolytic\nproteopectic\nproteopexic\nproteopexis\nproteopexy\nproteosaurid\nProteosauridae\nProteosaurus\nproteose\nProteosoma\nproteosomal\nproteosome\nproteosuria\nprotephemeroid\nProtephemeroidea\nproterandrous\nproterandrousness\nproterandry\nproteranthous\nproterobase\nproteroglyph\nProteroglypha\nproteroglyphic\nproteroglyphous\nproterogynous\nproterogyny\nproterothesis\nproterotype\nProterozoic\nprotervity\nprotest\nprotestable\nprotestancy\nprotestant\nProtestantish\nProtestantishly\nprotestantism\nProtestantize\nProtestantlike\nProtestantly\nprotestation\nprotestator\nprotestatory\nprotester\nprotestingly\nprotestive\nprotestor\nprotetrarch\nProteus\nprotevangel\nprotevangelion\nprotevangelium\nprotext\nprothalamia\nprothalamion\nprothalamium\nprothallia\nprothallial\nprothallic\nprothalline\nprothallium\nprothalloid\nprothallus\nprotheatrical\nprotheca\nprothesis\nprothetic\nprothetical\nprothetically\nprothonotarial\nprothonotariat\nprothonotary\nprothonotaryship\nprothoracic\nprothorax\nprothrift\nprothrombin\nprothrombogen\nprothyl\nprothysteron\nprotide\nprotiodide\nprotist\nProtista\nprotistan\nprotistic\nprotistological\nprotistologist\nprotistology\nprotiston\nProtium\nprotium\nproto\nprotoactinium\nprotoalbumose\nprotoamphibian\nprotoanthropic\nprotoapostate\nprotoarchitect\nProtoascales\nProtoascomycetes\nprotobacco\nProtobasidii\nProtobasidiomycetes\nprotobasidiomycetous\nprotobasidium\nprotobishop\nprotoblast\nprotoblastic\nprotoblattoid\nProtoblattoidea\nProtobranchia\nProtobranchiata\nprotobranchiate\nprotocalcium\nprotocanonical\nProtocaris\nprotocaseose\nprotocatechualdehyde\nprotocatechuic\nProtoceras\nProtoceratidae\nProtoceratops\nprotocercal\nprotocerebral\nprotocerebrum\nprotochemist\nprotochemistry\nprotochloride\nprotochlorophyll\nProtochorda\nProtochordata\nprotochordate\nprotochromium\nprotochronicler\nprotocitizen\nprotoclastic\nprotocneme\nProtococcaceae\nprotococcaceous\nprotococcal\nProtococcales\nprotococcoid\nProtococcus\nprotocol\nprotocolar\nprotocolary\nProtocoleoptera\nprotocoleopteran\nprotocoleopteron\nprotocoleopterous\nprotocolist\nprotocolization\nprotocolize\nprotoconch\nprotoconchal\nprotocone\nprotoconid\nprotoconule\nprotoconulid\nprotocopper\nprotocorm\nprotodeacon\nprotoderm\nprotodevil\nProtodonata\nprotodonatan\nprotodonate\nprotodont\nProtodonta\nprotodramatic\nprotodynastic\nprotoelastose\nprotoepiphyte\nprotoforaminifer\nprotoforester\nprotogaster\nprotogelatose\nprotogenal\nprotogenes\nprotogenesis\nprotogenetic\nprotogenic\nprotogenist\nProtogeometric\nprotogine\nprotoglobulose\nprotogod\nprotogonous\nprotogospel\nprotograph\nprotogynous\nprotogyny\nprotohematoblast\nProtohemiptera\nprotohemipteran\nprotohemipteron\nprotohemipterous\nprotoheresiarch\nProtohippus\nprotohistorian\nprotohistoric\nprotohistory\nprotohomo\nprotohuman\nProtohydra\nprotohydrogen\nProtohymenoptera\nprotohymenopteran\nprotohymenopteron\nprotohymenopterous\nprotoiron\nprotoleration\nprotoleucocyte\nprotoleukocyte\nprotolithic\nprotoliturgic\nprotolog\nprotologist\nprotoloph\nprotoma\nprotomagister\nprotomagnate\nprotomagnesium\nprotomala\nprotomalal\nprotomalar\nprotomammal\nprotomammalian\nprotomanganese\nprotomartyr\nProtomastigida\nprotome\nprotomeristem\nprotomerite\nprotomeritic\nprotometal\nprotometallic\nprotometaphrast\nProtominobacter\nProtomonadina\nprotomonostelic\nprotomorph\nprotomorphic\nProtomycetales\nprotomyosinose\nproton\nprotone\nprotonegroid\nprotonema\nprotonemal\nprotonematal\nprotonematoid\nprotoneme\nProtonemertini\nprotonephridial\nprotonephridium\nprotonephros\nprotoneuron\nprotoneurone\nprotonic\nprotonickel\nprotonitrate\nprotonotater\nprotonym\nprotonymph\nprotonymphal\nprotopapas\nprotopappas\nprotoparent\nprotopathia\nprotopathic\nprotopathy\nprotopatriarchal\nprotopatrician\nprotopattern\nprotopectin\nprotopectinase\nprotopepsia\nProtoperlaria\nprotoperlarian\nprotophilosophic\nprotophloem\nprotophyll\nProtophyta\nprotophyte\nprotophytic\nprotopin\nprotopine\nprotoplasm\nprotoplasma\nprotoplasmal\nprotoplasmatic\nprotoplasmic\nprotoplast\nprotoplastic\nprotopod\nprotopodial\nprotopodite\nprotopoditic\nprotopoetic\nprotopope\nprotoporphyrin\nprotopragmatic\nprotopresbyter\nprotopresbytery\nprotoprism\nprotoproteose\nprotoprotestant\nprotopteran\nProtopteridae\nprotopteridophyte\nprotopterous\nProtopterus\nprotopyramid\nprotore\nprotorebel\nprotoreligious\nprotoreptilian\nProtorohippus\nprotorosaur\nProtorosauria\nprotorosaurian\nProtorosauridae\nprotorosauroid\nProtorosaurus\nProtorthoptera\nprotorthopteran\nprotorthopteron\nprotorthopterous\nprotosalt\nprotosaurian\nprotoscientific\nProtoselachii\nprotosilicate\nprotosilicon\nprotosinner\nProtosiphon\nProtosiphonaceae\nprotosiphonaceous\nprotosocial\nprotosolution\nprotospasm\nProtosphargis\nProtospondyli\nprotospore\nProtostega\nProtostegidae\nprotostele\nprotostelic\nprotostome\nprotostrontium\nprotosulphate\nprotosulphide\nprotosyntonose\nprototaxites\nprototheca\nprotothecal\nprototheme\nprotothere\nPrototheria\nprototherian\nprototitanium\nPrototracheata\nprototraitor\nprototroch\nprototrochal\nprototrophic\nprototypal\nprototype\nprototypic\nprototypical\nprototypically\nprototypographer\nprototyrant\nprotovanadium\nprotoveratrine\nprotovertebra\nprotovertebral\nprotovestiary\nprotovillain\nprotovum\nprotoxide\nprotoxylem\nProtozoa\nprotozoacidal\nprotozoacide\nprotozoal\nprotozoan\nprotozoea\nprotozoean\nprotozoiasis\nprotozoic\nprotozoological\nprotozoologist\nprotozoology\nprotozoon\nprotozoonal\nProtracheata\nprotracheate\nprotract\nprotracted\nprotractedly\nprotractedness\nprotracter\nprotractible\nprotractile\nprotractility\nprotraction\nprotractive\nprotractor\nprotrade\nprotradition\nprotraditional\nprotragedy\nprotragical\nprotragie\nprotransfer\nprotranslation\nprotransubstantiation\nprotravel\nprotreasurer\nprotreaty\nProtremata\nprotreptic\nprotreptical\nprotriaene\nprotropical\nprotrudable\nprotrude\nprotrudent\nprotrusible\nprotrusile\nprotrusion\nprotrusive\nprotrusively\nprotrusiveness\nprotuberance\nprotuberancy\nprotuberant\nprotuberantial\nprotuberantly\nprotuberantness\nprotuberate\nprotuberosity\nprotuberous\nProtura\nproturan\nprotutor\nprotutory\nprotyl\nprotyle\nProtylopus\nprotype\nproudful\nproudhearted\nproudish\nproudishly\nproudling\nproudly\nproudness\nprouniformity\nprounion\nprounionist\nprouniversity\nproustite\nprovability\nprovable\nprovableness\nprovably\nprovaccinist\nprovand\nprovant\nprovascular\nprove\nprovect\nprovection\nproved\nproveditor\nprovedly\nprovedor\nprovedore\nproven\nprovenance\nProvencal\nProvencalize\nProvence\nProvencial\nprovender\nprovenience\nprovenient\nprovenly\nproventricular\nproventricule\nproventriculus\nprover\nproverb\nproverbial\nproverbialism\nproverbialist\nproverbialize\nproverbially\nproverbic\nproverbiologist\nproverbiology\nproverbize\nproverblike\nprovicar\nprovicariate\nprovidable\nprovidance\nprovide\nprovided\nprovidence\nprovident\nprovidential\nprovidentialism\nprovidentially\nprovidently\nprovidentness\nprovider\nproviding\nprovidore\nprovidoring\nprovince\nprovincial\nprovincialate\nprovincialism\nprovincialist\nprovinciality\nprovincialization\nprovincialize\nprovincially\nprovincialship\nprovinciate\nprovinculum\nprovine\nproving\nprovingly\nprovision\nprovisional\nprovisionality\nprovisionally\nprovisionalness\nprovisionary\nprovisioner\nprovisioneress\nprovisionless\nprovisionment\nprovisive\nproviso\nprovisor\nprovisorily\nprovisorship\nprovisory\nprovitamin\nprovivisection\nprovivisectionist\nprovocant\nprovocation\nprovocational\nprovocative\nprovocatively\nprovocativeness\nprovocator\nprovocatory\nprovokable\nprovoke\nprovokee\nprovoker\nprovoking\nprovokingly\nprovokingness\nprovolunteering\nprovost\nprovostal\nprovostess\nprovostorial\nprovostry\nprovostship\nprow\nprowar\nprowarden\nprowaterpower\nprowed\nprowersite\nprowess\nprowessed\nprowessful\nprowl\nprowler\nprowling\nprowlingly\nproxenet\nproxenete\nproxenetism\nproxenos\nproxenus\nproxeny\nproxically\nproximad\nproximal\nproximally\nproximate\nproximately\nproximateness\nproximation\nproximity\nproximo\nproximobuccal\nproximolabial\nproximolingual\nproxy\nproxyship\nproxysm\nprozone\nprozoning\nprozygapophysis\nprozymite\nprude\nprudelike\nprudely\nPrudence\nprudence\nprudent\nprudential\nprudentialism\nprudentialist\nprudentiality\nprudentially\nprudentialness\nprudently\nprudery\nprudish\nprudishly\nprudishness\nprudist\nprudity\nPrudy\nPrue\npruh\npruinate\npruinescence\npruinose\npruinous\nprulaurasin\nprunable\nprunableness\nprunably\nPrunaceae\nprunase\nprunasin\nprune\nprunell\nPrunella\nprunella\nprunelle\nPrunellidae\nprunello\npruner\nprunetin\nprunetol\npruniferous\npruniform\npruning\nprunitrin\nprunt\nprunted\nPrunus\nprurience\npruriency\nprurient\npruriently\npruriginous\nprurigo\npruriousness\npruritic\npruritus\nprusiano\nPrussian\nPrussianism\nPrussianization\nPrussianize\nPrussianizer\nprussiate\nprussic\nPrussification\nPrussify\nprut\nprutah\npry\npryer\nprying\npryingly\npryingness\npryler\npryproof\npryse\nprytaneum\nprytanis\nprytanize\nprytany\npsalis\npsalm\npsalmic\npsalmist\npsalmister\npsalmistry\npsalmless\npsalmodial\npsalmodic\npsalmodical\npsalmodist\npsalmodize\npsalmody\npsalmograph\npsalmographer\npsalmography\npsalmy\npsaloid\npsalter\npsalterial\npsalterian\npsalterion\npsalterist\npsalterium\npsaltery\npsaltes\npsaltress\npsammite\npsammitic\npsammocarcinoma\npsammocharid\nPsammocharidae\npsammogenous\npsammolithic\npsammologist\npsammology\npsammoma\npsammophile\npsammophilous\nPsammophis\npsammophyte\npsammophytic\npsammosarcoma\npsammotherapy\npsammous\nPsaronius\npschent\nPsedera\nPselaphidae\nPselaphus\npsellism\npsellismus\npsephism\npsephisma\npsephite\npsephitic\npsephomancy\nPsephurus\nPsetta\npseudaconine\npseudaconitine\npseudacusis\npseudalveolar\npseudambulacral\npseudambulacrum\npseudamoeboid\npseudamphora\npseudandry\npseudangina\npseudankylosis\npseudaphia\npseudaposematic\npseudaposporous\npseudapospory\npseudapostle\npseudarachnidan\npseudarthrosis\npseudataxic\npseudatoll\npseudaxine\npseudaxis\nPseudechis\npseudelephant\npseudelminth\npseudelytron\npseudembryo\npseudembryonic\npseudencephalic\npseudencephalus\npseudepigraph\npseudepigrapha\npseudepigraphal\npseudepigraphic\npseudepigraphical\npseudepigraphous\npseudepigraphy\npseudepiploic\npseudepiploon\npseudepiscopacy\npseudepiscopy\npseudepisematic\npseudesthesia\npseudhalteres\npseudhemal\npseudimaginal\npseudimago\npseudisodomum\npseudo\npseudoacaccia\npseudoacademic\npseudoacademical\npseudoaccidental\npseudoacid\npseudoaconitine\npseudoacromegaly\npseudoadiabatic\npseudoaesthetic\npseudoaffectionate\npseudoalkaloid\npseudoalum\npseudoalveolar\npseudoamateurish\npseudoamatory\npseudoanaphylactic\npseudoanaphylaxis\npseudoanatomic\npseudoanatomical\npseudoancestral\npseudoanemia\npseudoanemic\npseudoangelic\npseudoangina\npseudoankylosis\npseudoanthorine\npseudoanthropoid\npseudoanthropological\npseudoanthropology\npseudoantique\npseudoapologetic\npseudoapoplectic\npseudoapoplexy\npseudoappendicitis\npseudoaquatic\npseudoarchaic\npseudoarchaism\npseudoarchaist\npseudoaristocratic\npseudoarthrosis\npseudoarticulation\npseudoartistic\npseudoascetic\npseudoastringent\npseudoasymmetrical\npseudoasymmetry\npseudoataxia\npseudobacterium\npseudobasidium\npseudobenevolent\npseudobenthonic\npseudobenthos\npseudobinary\npseudobiological\npseudoblepsia\npseudoblepsis\npseudobrachial\npseudobrachium\npseudobranch\npseudobranchia\npseudobranchial\npseudobranchiate\nPseudobranchus\npseudobrookite\npseudobrotherly\npseudobulb\npseudobulbar\npseudobulbil\npseudobulbous\npseudobutylene\npseudocandid\npseudocapitulum\npseudocarbamide\npseudocarcinoid\npseudocarp\npseudocarpous\npseudocartilaginous\npseudocele\npseudocelian\npseudocelic\npseudocellus\npseudocentric\npseudocentrous\npseudocentrum\nPseudoceratites\npseudoceratitic\npseudocercaria\npseudoceryl\npseudocharitable\npseudochemical\npseudochina\npseudochromesthesia\npseudochromia\npseudochromosome\npseudochronism\npseudochronologist\npseudochrysalis\npseudochrysolite\npseudochylous\npseudocirrhosis\npseudoclassic\npseudoclassical\npseudoclassicism\npseudoclerical\nPseudococcinae\nPseudococcus\npseudococtate\npseudocollegiate\npseudocolumella\npseudocolumellar\npseudocommissure\npseudocommisural\npseudocompetitive\npseudoconcha\npseudoconclude\npseudocone\npseudoconglomerate\npseudoconglomeration\npseudoconhydrine\npseudoconjugation\npseudoconservative\npseudocorneous\npseudocortex\npseudocosta\npseudocotyledon\npseudocotyledonal\npseudocritical\npseudocroup\npseudocrystalline\npseudocubic\npseudocultivated\npseudocultural\npseudocumene\npseudocumenyl\npseudocumidine\npseudocumyl\npseudocyclosis\npseudocyesis\npseudocyst\npseudodeltidium\npseudodementia\npseudodemocratic\npseudoderm\npseudodermic\npseudodiagnosis\npseudodiastolic\npseudodiphtheria\npseudodiphtheritic\npseudodipteral\npseudodipterally\npseudodipteros\npseudodont\npseudodox\npseudodoxal\npseudodoxy\npseudodramatic\npseudodysentery\npseudoedema\npseudoelectoral\npseudoembryo\npseudoembryonic\npseudoemotional\npseudoencephalitic\npseudoenthusiastic\npseudoephedrine\npseudoepiscopal\npseudoequalitarian\npseudoerotic\npseudoeroticism\npseudoerysipelas\npseudoerysipelatous\npseudoerythrin\npseudoethical\npseudoetymological\npseudoeugenics\npseudoevangelical\npseudofamous\npseudofarcy\npseudofeminine\npseudofever\npseudofeverish\npseudofilaria\npseudofilarian\npseudofinal\npseudofluctuation\npseudofluorescence\npseudofoliaceous\npseudoform\npseudofossil\npseudogalena\npseudoganglion\npseudogaseous\npseudogaster\npseudogastrula\npseudogeneral\npseudogeneric\npseudogenerous\npseudogenteel\npseudogenus\npseudogeometry\npseudogermanic\npseudogeusia\npseudogeustia\npseudoglanders\npseudoglioma\npseudoglobulin\npseudoglottis\npseudograph\npseudographeme\npseudographer\npseudographia\npseudographize\npseudography\npseudograsserie\nPseudogryphus\npseudogyne\npseudogynous\npseudogyny\npseudogyrate\npseudohallucination\npseudohallucinatory\npseudohalogen\npseudohemal\npseudohermaphrodite\npseudohermaphroditic\npseudohermaphroditism\npseudoheroic\npseudohexagonal\npseudohistoric\npseudohistorical\npseudoholoptic\npseudohuman\npseudohydrophobia\npseudohyoscyamine\npseudohypertrophic\npseudohypertrophy\npseudoidentical\npseudoimpartial\npseudoindependent\npseudoinfluenza\npseudoinsane\npseudoinsoluble\npseudoisatin\npseudoism\npseudoisomer\npseudoisomeric\npseudoisomerism\npseudoisotropy\npseudojervine\npseudolabial\npseudolabium\npseudolalia\nPseudolamellibranchia\nPseudolamellibranchiata\npseudolamellibranchiate\npseudolaminated\nPseudolarix\npseudolateral\npseudolatry\npseudolegal\npseudolegendary\npseudoleucite\npseudoleucocyte\npseudoleukemia\npseudoleukemic\npseudoliberal\npseudolichen\npseudolinguistic\npseudoliterary\npseudolobar\npseudological\npseudologically\npseudologist\npseudologue\npseudology\npseudolunule\npseudomalachite\npseudomalaria\npseudomancy\npseudomania\npseudomaniac\npseudomantic\npseudomantist\npseudomasculine\npseudomedical\npseudomedieval\npseudomelanosis\npseudomembrane\npseudomembranous\npseudomeningitis\npseudomenstruation\npseudomer\npseudomeric\npseudomerism\npseudomery\npseudometallic\npseudometameric\npseudometamerism\npseudomica\npseudomilitarist\npseudomilitaristic\npseudomilitary\npseudoministerial\npseudomiraculous\npseudomitotic\npseudomnesia\npseudomodern\npseudomodest\nPseudomonas\npseudomonastic\npseudomonoclinic\npseudomonocotyledonous\npseudomonocyclic\npseudomonotropy\npseudomoral\npseudomorph\npseudomorphia\npseudomorphic\npseudomorphine\npseudomorphism\npseudomorphose\npseudomorphosis\npseudomorphous\npseudomorula\npseudomorular\npseudomucin\npseudomucoid\npseudomultilocular\npseudomultiseptate\npseudomythical\npseudonarcotic\npseudonational\npseudonavicella\npseudonavicellar\npseudonavicula\npseudonavicular\npseudoneuropter\nPseudoneuroptera\npseudoneuropteran\npseudoneuropterous\npseudonitrole\npseudonitrosite\npseudonuclein\npseudonucleolus\npseudonychium\npseudonym\npseudonymal\npseudonymic\npseudonymity\npseudonymous\npseudonymously\npseudonymousness\npseudonymuncle\npseudonymuncule\npseudopapaverine\npseudoparalysis\npseudoparalytic\npseudoparaplegia\npseudoparasitic\npseudoparasitism\npseudoparenchyma\npseudoparenchymatous\npseudoparenchyme\npseudoparesis\npseudoparthenogenesis\npseudopatriotic\npseudopediform\npseudopelletierine\npseudopercular\npseudoperculate\npseudoperculum\npseudoperianth\npseudoperidium\npseudoperiodic\npseudoperipteral\npseudopermanent\npseudoperoxide\npseudoperspective\nPseudopeziza\npseudophallic\npseudophellandrene\npseudophenanthrene\npseudophenanthroline\npseudophenocryst\npseudophilanthropic\npseudophilosophical\nPseudophoenix\npseudopionnotes\npseudopious\npseudoplasm\npseudoplasma\npseudoplasmodium\npseudopneumonia\npseudopod\npseudopodal\npseudopodia\npseudopodial\npseudopodian\npseudopodiospore\npseudopodium\npseudopoetic\npseudopoetical\npseudopolitic\npseudopolitical\npseudopopular\npseudopore\npseudoporphyritic\npseudopregnancy\npseudopregnant\npseudopriestly\npseudoprimitive\npseudoprimitivism\npseudoprincely\npseudoproboscis\npseudoprofessional\npseudoprofessorial\npseudoprophetic\npseudoprophetical\npseudoprosperous\npseudopsia\npseudopsychological\npseudoptics\npseudoptosis\npseudopupa\npseudopupal\npseudopurpurin\npseudopyriform\npseudoquinol\npseudorabies\npseudoracemic\npseudoracemism\npseudoramose\npseudoramulus\npseudorealistic\npseudoreduction\npseudoreformed\npseudoregal\npseudoreligious\npseudoreminiscence\npseudorganic\npseudorheumatic\npseudorhombohedral\npseudoromantic\npseudorunic\npseudosacred\npseudosacrilegious\npseudosalt\npseudosatirical\npseudoscarlatina\nPseudoscarus\npseudoscholarly\npseudoscholastic\npseudoscientific\nPseudoscines\npseudoscinine\npseudosclerosis\npseudoscope\npseudoscopic\npseudoscopically\npseudoscopy\npseudoscorpion\nPseudoscorpiones\nPseudoscorpionida\npseudoscutum\npseudosematic\npseudosensational\npseudoseptate\npseudoservile\npseudosessile\npseudosiphonal\npseudosiphuncal\npseudoskeletal\npseudoskeleton\npseudoskink\npseudosmia\npseudosocial\npseudosocialistic\npseudosolution\npseudosoph\npseudosopher\npseudosophical\npseudosophist\npseudosophy\npseudospectral\npseudosperm\npseudospermic\npseudospermium\npseudospermous\npseudosphere\npseudospherical\npseudospiracle\npseudospiritual\npseudosporangium\npseudospore\npseudosquamate\npseudostalactite\npseudostalactitical\npseudostalagmite\npseudostalagmitical\npseudostereoscope\npseudostereoscopic\npseudostereoscopism\npseudostigma\npseudostigmatic\npseudostoma\npseudostomatous\npseudostomous\npseudostratum\npseudosubtle\nPseudosuchia\npseudosuchian\npseudosweating\npseudosyllogism\npseudosymmetric\npseudosymmetrical\npseudosymmetry\npseudosymptomatic\npseudosyphilis\npseudosyphilitic\npseudotabes\npseudotachylite\npseudotetanus\npseudotetragonal\nPseudotetramera\npseudotetrameral\npseudotetramerous\npseudotrachea\npseudotracheal\npseudotribal\npseudotributary\nPseudotrimera\npseudotrimeral\npseudotrimerous\npseudotropine\nPseudotsuga\npseudotubercular\npseudotuberculosis\npseudotuberculous\npseudoturbinal\npseudotyphoid\npseudoval\npseudovarian\npseudovary\npseudovelar\npseudovelum\npseudoventricle\npseudoviaduct\npseudoviperine\npseudoviscosity\npseudoviscous\npseudovolcanic\npseudovolcano\npseudovum\npseudowhorl\npseudoxanthine\npseudoyohimbine\npseudozealot\npseudozoea\npseudozoogloeal\npsha\nPshav\npshaw\npsi\nPsidium\npsilanthropic\npsilanthropism\npsilanthropist\npsilanthropy\npsiloceran\nPsiloceras\npsiloceratan\npsiloceratid\nPsiloceratidae\npsiloi\npsilology\npsilomelane\npsilomelanic\nPsilophytales\npsilophyte\nPsilophyton\npsilosis\npsilosopher\npsilosophy\nPsilotaceae\npsilotaceous\npsilothrum\npsilotic\nPsilotum\npsithurism\nPsithyrus\npsittaceous\npsittaceously\nPsittaci\nPsittacidae\nPsittaciformes\nPsittacinae\npsittacine\npsittacinite\npsittacism\npsittacistic\nPsittacomorphae\npsittacomorphic\npsittacosis\nPsittacus\npsoadic\npsoas\npsoatic\npsocid\nPsocidae\npsocine\npsoitis\npsomophagic\npsomophagist\npsomophagy\npsora\nPsoralea\npsoriasic\npsoriasiform\npsoriasis\npsoriatic\npsoriatiform\npsoric\npsoroid\nPsorophora\npsorophthalmia\npsorophthalmic\nPsoroptes\npsoroptic\npsorosis\npsorosperm\npsorospermial\npsorospermiasis\npsorospermic\npsorospermiform\npsorospermosis\npsorous\npssimistical\npst\npsych\npsychagogic\npsychagogos\npsychagogue\npsychagogy\npsychal\npsychalgia\npsychanalysis\npsychanalysist\npsychanalytic\npsychasthenia\npsychasthenic\nPsyche\npsyche\nPsychean\npsycheometry\npsychesthesia\npsychesthetic\npsychiasis\npsychiater\npsychiatria\npsychiatric\npsychiatrical\npsychiatrically\npsychiatrist\npsychiatrize\npsychiatry\npsychic\npsychical\npsychically\nPsychichthys\npsychicism\npsychicist\npsychics\npsychid\nPsychidae\npsychism\npsychist\npsychoanalysis\npsychoanalyst\npsychoanalytic\npsychoanalytical\npsychoanalytically\npsychoanalyze\npsychoanalyzer\npsychoautomatic\npsychobiochemistry\npsychobiologic\npsychobiological\npsychobiology\npsychobiotic\npsychocatharsis\npsychoclinic\npsychoclinical\npsychoclinicist\nPsychoda\npsychodiagnostics\nPsychodidae\npsychodispositional\npsychodrama\npsychodynamic\npsychodynamics\npsychoeducational\npsychoepilepsy\npsychoethical\npsychofugal\npsychogalvanic\npsychogalvanometer\npsychogenesis\npsychogenetic\npsychogenetical\npsychogenetically\npsychogenetics\npsychogenic\npsychogeny\npsychognosis\npsychognostic\npsychognosy\npsychogonic\npsychogonical\npsychogony\npsychogram\npsychograph\npsychographer\npsychographic\npsychographist\npsychography\npsychoid\npsychokinesia\npsychokinesis\npsychokinetic\npsychokyme\npsycholepsy\npsycholeptic\npsychologer\npsychologian\npsychologic\npsychological\npsychologically\npsychologics\npsychologism\npsychologist\npsychologize\npsychologue\npsychology\npsychomachy\npsychomancy\npsychomantic\npsychometer\npsychometric\npsychometrical\npsychometrically\npsychometrician\npsychometrics\npsychometrist\npsychometrize\npsychometry\npsychomonism\npsychomoral\npsychomorphic\npsychomorphism\npsychomotility\npsychomotor\npsychon\npsychoneural\npsychoneurological\npsychoneurosis\npsychoneurotic\npsychonomic\npsychonomics\npsychonomy\npsychony\npsychoorganic\npsychopannychian\npsychopannychism\npsychopannychist\npsychopannychistic\npsychopannychy\npsychopanychite\npsychopath\npsychopathia\npsychopathic\npsychopathist\npsychopathologic\npsychopathological\npsychopathologist\npsychopathy\npsychopetal\npsychophobia\npsychophysic\npsychophysical\npsychophysically\npsychophysicist\npsychophysics\npsychophysiologic\npsychophysiological\npsychophysiologically\npsychophysiologist\npsychophysiology\npsychoplasm\npsychopomp\npsychopompos\npsychorealism\npsychorealist\npsychorealistic\npsychoreflex\npsychorhythm\npsychorhythmia\npsychorhythmic\npsychorhythmical\npsychorhythmically\npsychorrhagic\npsychorrhagy\npsychosarcous\npsychosensorial\npsychosensory\npsychoses\npsychosexual\npsychosexuality\npsychosexually\npsychosis\npsychosocial\npsychosomatic\npsychosomatics\npsychosome\npsychosophy\npsychostasy\npsychostatic\npsychostatical\npsychostatically\npsychostatics\npsychosurgeon\npsychosurgery\npsychosynthesis\npsychosynthetic\npsychotaxis\npsychotechnical\npsychotechnician\npsychotechnics\npsychotechnological\npsychotechnology\npsychotheism\npsychotherapeutic\npsychotherapeutical\npsychotherapeutics\npsychotherapeutist\npsychotherapist\npsychotherapy\npsychotic\nPsychotria\npsychotrine\npsychovital\nPsychozoic\npsychroesthesia\npsychrograph\npsychrometer\npsychrometric\npsychrometrical\npsychrometry\npsychrophile\npsychrophilic\npsychrophobia\npsychrophore\npsychrophyte\npsychurgy\npsykter\nPsylla\npsylla\npsyllid\nPsyllidae\npsyllium\nptarmic\nPtarmica\nptarmical\nptarmigan\nPtelea\nPtenoglossa\nptenoglossate\nPteranodon\npteranodont\nPteranodontidae\npteraspid\nPteraspidae\nPteraspis\nptereal\npterergate\nPterian\npteric\nPterichthyodes\nPterichthys\npterideous\npteridium\npteridography\npteridoid\npteridological\npteridologist\npteridology\npteridophilism\npteridophilist\npteridophilistic\nPteridophyta\npteridophyte\npteridophytic\npteridophytous\npteridosperm\nPteridospermae\nPteridospermaphyta\npteridospermaphytic\npteridospermous\npterion\nPteris\nPterobranchia\npterobranchiate\npterocarpous\nPterocarpus\nPterocarya\nPterocaulon\nPterocera\nPteroceras\nPterocles\nPterocletes\nPteroclidae\nPteroclomorphae\npteroclomorphic\npterodactyl\nPterodactyli\npterodactylian\npterodactylic\npterodactylid\nPterodactylidae\npterodactyloid\npterodactylous\nPterodactylus\npterographer\npterographic\npterographical\npterography\npteroid\npteroma\npteromalid\nPteromalidae\nPteromys\npteropaedes\npteropaedic\npteropegal\npteropegous\npteropegum\npterophorid\nPterophoridae\nPterophorus\nPterophryne\npteropid\nPteropidae\npteropine\npteropod\nPteropoda\npteropodal\npteropodan\npteropodial\nPteropodidae\npteropodium\npteropodous\nPteropsida\nPteropus\npterosaur\nPterosauri\nPterosauria\npterosaurian\npterospermous\nPterospora\nPterostemon\nPterostemonaceae\npterostigma\npterostigmal\npterostigmatic\npterostigmatical\npterotheca\npterothorax\npterotic\npteroylglutamic\npterygial\npterygiophore\npterygium\npterygobranchiate\npterygode\npterygodum\nPterygogenea\npterygoid\npterygoidal\npterygoidean\npterygomalar\npterygomandibular\npterygomaxillary\npterygopalatal\npterygopalatine\npterygopharyngeal\npterygopharyngean\npterygophore\npterygopodium\npterygoquadrate\npterygosphenoid\npterygospinous\npterygostaphyline\nPterygota\npterygote\npterygotous\npterygotrabecular\nPterygotus\npteryla\npterylographic\npterylographical\npterylography\npterylological\npterylology\npterylosis\nPtilichthyidae\nPtiliidae\nPtilimnium\nptilinal\nptilinum\nPtilocercus\nPtilonorhynchidae\nPtilonorhynchinae\nptilopaedes\nptilopaedic\nptilosis\nPtilota\nptinid\nPtinidae\nptinoid\nPtinus\nptisan\nptochocracy\nptochogony\nptochology\nPtolemaean\nPtolemaian\nPtolemaic\nPtolemaical\nPtolemaism\nPtolemaist\nPtolemean\nPtolemy\nptomain\nptomaine\nptomainic\nptomatropine\nptosis\nptotic\nptyalagogic\nptyalagogue\nptyalectasis\nptyalin\nptyalism\nptyalize\nptyalocele\nptyalogenic\nptyalolith\nptyalolithiasis\nptyalorrhea\nPtychoparia\nptychoparid\nptychopariid\nptychopterygial\nptychopterygium\nPtychosperma\nptysmagogue\nptyxis\npu\npua\npuan\npub\npubal\npubble\npuberal\npubertal\npubertic\npuberty\npuberulent\npuberulous\npubes\npubescence\npubescency\npubescent\npubian\npubic\npubigerous\npubiotomy\npubis\npublic\nPublican\npublican\npublicanism\npublication\npublichearted\npublicheartedness\npublicism\npublicist\npublicity\npublicize\npublicly\npublicness\nPublilian\npublish\npublishable\npublisher\npublisheress\npublishership\npublishment\npubococcygeal\npubofemoral\npuboiliac\npuboischiac\npuboischial\npuboischiatic\npuboprostatic\npuborectalis\npubotibial\npubourethral\npubovesical\nPuccinia\nPucciniaceae\npucciniaceous\npuccinoid\npuccoon\npuce\npucelage\npucellas\npucelle\nPuchanahua\npucherite\npuchero\npuck\npucka\npuckball\npucker\npuckerbush\npuckerel\npuckerer\npuckermouth\npuckery\npuckfist\npuckish\npuckishly\npuckishness\npuckle\npucklike\npuckling\npuckneedle\npuckrel\npuckster\npud\npuddee\npuddening\npudder\npudding\npuddingberry\npuddinghead\npuddingheaded\npuddinghouse\npuddinglike\npuddingwife\npuddingy\npuddle\npuddled\npuddlelike\npuddler\npuddling\npuddly\npuddock\npuddy\npudency\npudenda\npudendal\npudendous\npudendum\npudent\npudge\npudgily\npudginess\npudgy\npudiano\npudibund\npudibundity\npudic\npudical\npudicitia\npudicity\npudsey\npudsy\nPudu\npudu\npueblito\nPueblo\npueblo\nPuebloan\npuebloization\npuebloize\nPuelche\nPuelchean\nPueraria\npuerer\npuericulture\npuerile\npuerilely\npuerileness\npuerilism\npuerility\npuerman\npuerpera\npuerperal\npuerperalism\npuerperant\npuerperium\npuerperous\npuerpery\npuff\npuffback\npuffball\npuffbird\npuffed\npuffer\npuffery\npuffily\npuffin\npuffiness\npuffinet\npuffing\npuffingly\nPuffinus\npufflet\npuffwig\npuffy\npug\npugged\npugger\npuggi\npugginess\npugging\npuggish\npuggle\npuggree\npuggy\npugh\npugil\npugilant\npugilism\npugilist\npugilistic\npugilistical\npugilistically\npuglianite\npugman\npugmill\npugmiller\npugnacious\npugnaciously\npugnaciousness\npugnacity\nPuinavi\nPuinavian\nPuinavis\npuisne\npuissance\npuissant\npuissantly\npuissantness\npuist\npuistie\npuja\nPujunan\npuka\npukatea\npukateine\npuke\npukeko\npuker\npukeweed\nPukhtun\npukish\npukishness\npukras\npuku\npuky\npul\npulahan\npulahanism\npulasan\npulaskite\nPulaya\nPulayan\npulchrify\npulchritude\npulchritudinous\npule\npulegol\npulegone\npuler\nPulex\npulghere\npuli\nPulian\npulicarious\npulicat\npulicene\npulicid\nPulicidae\npulicidal\npulicide\npulicine\npulicoid\npulicose\npulicosity\npulicous\npuling\npulingly\npulish\npulk\npulka\npull\npullable\npullback\npullboat\npulldevil\npulldoo\npulldown\npulldrive\npullen\npuller\npullery\npullet\npulley\npulleyless\npulli\nPullman\nPullmanize\npullorum\npullulant\npullulate\npullulation\npullus\npulmobranchia\npulmobranchial\npulmobranchiate\npulmocardiac\npulmocutaneous\npulmogastric\npulmometer\npulmometry\npulmonal\npulmonar\nPulmonaria\npulmonarian\npulmonary\nPulmonata\npulmonate\npulmonated\npulmonectomy\npulmonic\npulmonifer\nPulmonifera\npulmoniferous\npulmonitis\nPulmotor\npulmotracheal\nPulmotrachearia\npulmotracheary\npulmotracheate\npulp\npulpaceous\npulpal\npulpalgia\npulpamenta\npulpboard\npulpectomy\npulpefaction\npulper\npulpifier\npulpify\npulpily\npulpiness\npulpit\npulpital\npulpitarian\npulpiteer\npulpiter\npulpitful\npulpitic\npulpitical\npulpitically\npulpitis\npulpitish\npulpitism\npulpitize\npulpitless\npulpitly\npulpitolatry\npulpitry\npulpless\npulplike\npulpotomy\npulpous\npulpousness\npulpstone\npulpwood\npulpy\npulque\npulsant\npulsatance\npulsate\npulsatile\npulsatility\nPulsatilla\npulsation\npulsational\npulsative\npulsatively\npulsator\npulsatory\npulse\npulseless\npulselessly\npulselessness\npulselike\npulsellum\npulsidge\npulsific\npulsimeter\npulsion\npulsive\npulsojet\npulsometer\npultaceous\npulton\npulu\npulveraceous\npulverant\npulverate\npulveration\npulvereous\npulverin\npulverizable\npulverizate\npulverization\npulverizator\npulverize\npulverizer\npulverous\npulverulence\npulverulent\npulverulently\npulvic\npulvil\npulvillar\npulvilliform\npulvillus\npulvinar\nPulvinaria\npulvinarian\npulvinate\npulvinated\npulvinately\npulvination\npulvinic\npulviniform\npulvino\npulvinule\npulvinulus\npulvinus\npulviplume\npulwar\npuly\npuma\nPume\npumicate\npumice\npumiced\npumiceous\npumicer\npumiciform\npumicose\npummel\npummice\npump\npumpable\npumpage\npumpellyite\npumper\npumpernickel\npumpkin\npumpkinification\npumpkinify\npumpkinish\npumpkinity\npumple\npumpless\npumplike\npumpman\npumpsman\npumpwright\npun\npuna\npunaise\npunalua\npunaluan\nPunan\npunatoo\npunch\npunchable\npunchboard\npuncheon\npuncher\npunchinello\npunching\npunchless\npunchlike\npunchproof\npunchy\npunct\npunctal\npunctate\npunctated\npunctation\npunctator\npuncticular\npuncticulate\npuncticulose\npunctiform\npunctiliar\npunctilio\npunctiliomonger\npunctiliosity\npunctilious\npunctiliously\npunctiliousness\npunctist\npunctographic\npunctual\npunctualist\npunctuality\npunctually\npunctualness\npunctuate\npunctuation\npunctuational\npunctuationist\npunctuative\npunctuator\npunctuist\npunctulate\npunctulated\npunctulation\npunctule\npunctulum\npunctum\npuncturation\npuncture\npunctured\npunctureless\npunctureproof\npuncturer\npundigrion\npundit\npundita\npunditic\npunditically\npunditry\npundonor\npundum\npuneca\npung\npunga\npungapung\npungar\npungence\npungency\npungent\npungently\npunger\npungey\npungi\npungle\npungled\nPunic\nPunica\nPunicaceae\npunicaceous\npuniceous\npunicial\npunicin\npunicine\npunily\npuniness\npunish\npunishability\npunishable\npunishableness\npunishably\npunisher\npunishment\npunishmentproof\npunition\npunitional\npunitionally\npunitive\npunitively\npunitiveness\npunitory\nPunjabi\npunjum\npunk\npunkah\npunketto\npunkie\npunkwood\npunky\npunless\npunlet\npunnable\npunnage\npunner\npunnet\npunnic\npunnical\npunnigram\npunningly\npunnology\nPuno\npunproof\npunster\npunstress\npunt\npunta\npuntabout\npuntal\npuntel\npunter\npunti\npuntil\npuntist\nPuntlatsh\npunto\npuntout\npuntsman\npunty\npuny\npunyish\npunyism\npup\npupa\npupahood\npupal\npuparial\npuparium\npupate\npupation\npupelo\nPupidae\npupiferous\npupiform\npupigenous\npupigerous\npupil\npupilability\npupilage\npupilar\npupilate\npupildom\npupiled\npupilize\npupillarity\npupillary\npupilless\nPupillidae\npupillometer\npupillometry\npupilloscope\npupilloscoptic\npupilloscopy\nPupipara\npupiparous\nPupivora\npupivore\npupivorous\npupoid\npuppet\npuppetdom\npuppeteer\npuppethood\npuppetish\npuppetism\npuppetize\npuppetlike\npuppetly\npuppetman\npuppetmaster\npuppetry\npuppify\npuppily\nPuppis\npuppy\npuppydom\npuppyfish\npuppyfoot\npuppyhood\npuppyish\npuppyism\npuppylike\npuppysnatch\npupulo\nPupuluca\npupunha\nPuquina\nPuquinan\npur\npurana\npuranic\npuraque\nPurasati\nPurbeck\nPurbeckian\npurblind\npurblindly\npurblindness\npurchasability\npurchasable\npurchase\npurchaser\npurchasery\npurdah\npurdy\npure\npureblood\npurebred\npured\npuree\npurehearted\npurely\npureness\npurer\npurfle\npurfled\npurfler\npurfling\npurfly\npurga\npurgation\npurgative\npurgatively\npurgatorial\npurgatorian\npurgatory\npurge\npurgeable\npurger\npurgery\npurging\npurificant\npurification\npurificative\npurificator\npurificatory\npurifier\npuriform\npurify\npurine\npuriri\npurism\npurist\npuristic\npuristical\nPuritan\npuritandom\nPuritaness\npuritanic\npuritanical\npuritanically\npuritanicalness\nPuritanism\npuritanism\nPuritanize\nPuritanizer\npuritanlike\nPuritanly\npuritano\npurity\nPurkinje\nPurkinjean\npurl\npurler\npurlhouse\npurlicue\npurlieu\npurlieuman\npurlin\npurlman\npurloin\npurloiner\npurohepatitis\npurolymph\npuromucous\npurpart\npurparty\npurple\npurplelip\npurplely\npurpleness\npurplescent\npurplewood\npurplewort\npurplish\npurplishness\npurply\npurport\npurportless\npurpose\npurposedly\npurposeful\npurposefully\npurposefulness\npurposeless\npurposelessly\npurposelessness\npurposelike\npurposely\npurposer\npurposive\npurposively\npurposiveness\npurposivism\npurposivist\npurposivistic\npurpresture\npurpura\npurpuraceous\npurpurate\npurpure\npurpureal\npurpurean\npurpureous\npurpurescent\npurpuric\npurpuriferous\npurpuriform\npurpurigenous\npurpurin\npurpurine\npurpuriparous\npurpurite\npurpurize\npurpurogallin\npurpurogenous\npurpuroid\npurpuroxanthin\npurr\npurre\npurree\npurreic\npurrel\npurrer\npurring\npurringly\npurrone\npurry\npurse\npursed\npurseful\npurseless\npurselike\npurser\npursership\nPurshia\npursily\npursiness\npurslane\npurslet\npursley\npursuable\npursual\npursuance\npursuant\npursuantly\npursue\npursuer\npursuit\npursuitmeter\npursuivant\npursy\npurtenance\nPuru\nPuruha\npurulence\npurulency\npurulent\npurulently\npuruloid\nPurupuru\npurusha\npurushartha\npurvey\npurveyable\npurveyal\npurveyance\npurveyancer\npurveyor\npurveyoress\npurview\npurvoe\npurwannah\npus\nPuschkinia\nPuseyism\nPuseyistical\nPuseyite\npush\npushball\npushcart\npusher\npushful\npushfully\npushfulness\npushing\npushingly\npushingness\npushmobile\npushover\npushpin\nPushtu\npushwainling\npusillanimity\npusillanimous\npusillanimously\npusillanimousness\npuss\npusscat\npussley\npusslike\npussy\npussycat\npussyfoot\npussyfooted\npussyfooter\npussyfooting\npussyfootism\npussytoe\npustulant\npustular\npustulate\npustulated\npustulation\npustulatous\npustule\npustuled\npustulelike\npustuliform\npustulose\npustulous\nput\nputage\nputamen\nputaminous\nputanism\nputation\nputationary\nputative\nputatively\nputback\nputchen\nputcher\nputeal\nputelee\nputher\nputhery\nputid\nputidly\nputidness\nputlog\nputois\nPutorius\nputredinal\nputredinous\nputrefacient\nputrefactible\nputrefaction\nputrefactive\nputrefactiveness\nputrefiable\nputrefier\nputrefy\nputresce\nputrescence\nputrescency\nputrescent\nputrescibility\nputrescible\nputrescine\nputricide\nputrid\nputridity\nputridly\nputridness\nputrifacted\nputriform\nputrilage\nputrilaginous\nputrilaginously\nputschism\nputschist\nputt\nputtee\nputter\nputterer\nputteringly\nputtier\nputtock\nputty\nputtyblower\nputtyhead\nputtyhearted\nputtylike\nputtyroot\nputtywork\nputure\npuxy\nPuya\nPuyallup\npuzzle\npuzzleation\npuzzled\npuzzledly\npuzzledness\npuzzledom\npuzzlehead\npuzzleheaded\npuzzleheadedly\npuzzleheadedness\npuzzleman\npuzzlement\npuzzlepate\npuzzlepated\npuzzlepatedness\npuzzler\npuzzling\npuzzlingly\npuzzlingness\npya\npyal\npyarthrosis\npyche\nPycnanthemum\npycnia\npycnial\npycnid\npycnidia\npycnidial\npycnidiophore\npycnidiospore\npycnidium\npycniospore\npycnite\npycnium\nPycnocoma\npycnoconidium\npycnodont\nPycnodonti\nPycnodontidae\npycnodontoid\nPycnodus\npycnogonid\nPycnogonida\npycnogonidium\npycnogonoid\npycnometer\npycnometochia\npycnometochic\npycnomorphic\npycnomorphous\nPycnonotidae\nPycnonotinae\npycnonotine\nPycnonotus\npycnosis\npycnospore\npycnosporic\npycnostyle\npycnotic\npyelectasis\npyelic\npyelitic\npyelitis\npyelocystitis\npyelogram\npyelograph\npyelographic\npyelography\npyelolithotomy\npyelometry\npyelonephritic\npyelonephritis\npyelonephrosis\npyeloplasty\npyeloscopy\npyelotomy\npyeloureterogram\npyemesis\npyemia\npyemic\npygal\npygalgia\npygarg\npygargus\npygidial\npygidid\nPygididae\nPygidium\npygidium\npygmaean\nPygmalion\npygmoid\nPygmy\npygmy\npygmydom\npygmyhood\npygmyish\npygmyism\npygmyship\npygmyweed\nPygobranchia\nPygobranchiata\npygobranchiate\npygofer\npygopagus\npygopod\nPygopodes\nPygopodidae\npygopodine\npygopodous\nPygopus\npygostyle\npygostyled\npygostylous\npyic\npyin\npyjama\npyjamaed\npyke\npyknatom\npyknic\npyknotic\npyla\nPylades\npylagore\npylangial\npylangium\npylar\npylephlebitic\npylephlebitis\npylethrombophlebitis\npylethrombosis\npylic\npylon\npyloralgia\npylorectomy\npyloric\npyloristenosis\npyloritis\npylorocleisis\npylorodilator\npylorogastrectomy\npyloroplasty\npyloroptosis\npyloroschesis\npyloroscirrhus\npyloroscopy\npylorospasm\npylorostenosis\npylorostomy\npylorus\npyobacillosis\npyocele\npyoctanin\npyocyanase\npyocyanin\npyocyst\npyocyte\npyodermatitis\npyodermatosis\npyodermia\npyodermic\npyogenesis\npyogenetic\npyogenic\npyogenin\npyogenous\npyohemothorax\npyoid\npyolabyrinthitis\npyolymph\npyometra\npyometritis\npyonephritis\npyonephrosis\npyonephrotic\npyopericarditis\npyopericardium\npyoperitoneum\npyoperitonitis\npyophagia\npyophthalmia\npyophylactic\npyoplania\npyopneumocholecystitis\npyopneumocyst\npyopneumopericardium\npyopneumoperitoneum\npyopneumoperitonitis\npyopneumothorax\npyopoiesis\npyopoietic\npyoptysis\npyorrhea\npyorrheal\npyorrheic\npyosalpingitis\npyosalpinx\npyosepticemia\npyosepticemic\npyosis\npyospermia\npyotherapy\npyothorax\npyotoxinemia\npyoureter\npyovesiculosis\npyoxanthose\npyr\npyracanth\nPyracantha\nPyraceae\npyracene\npyral\nPyrales\npyralid\nPyralidae\npyralidan\npyralidid\nPyralididae\npyralidiform\nPyralidoidea\npyralis\npyraloid\nPyrameis\npyramid\npyramidaire\npyramidal\npyramidale\npyramidalis\nPyramidalism\nPyramidalist\npyramidally\npyramidate\nPyramidella\npyramidellid\nPyramidellidae\npyramider\npyramides\npyramidia\npyramidic\npyramidical\npyramidically\npyramidicalness\npyramidion\nPyramidist\npyramidize\npyramidlike\npyramidoattenuate\npyramidoidal\npyramidologist\npyramidoprismatic\npyramidwise\npyramoidal\npyran\npyranometer\npyranyl\npyrargyrite\nPyrausta\nPyraustinae\npyrazine\npyrazole\npyrazoline\npyrazolone\npyrazolyl\npyre\npyrectic\npyrena\npyrene\nPyrenean\npyrenematous\npyrenic\npyrenin\npyrenocarp\npyrenocarpic\npyrenocarpous\nPyrenochaeta\npyrenodean\npyrenodeine\npyrenodeous\npyrenoid\npyrenolichen\nPyrenomycetales\npyrenomycete\nPyrenomycetes\nPyrenomycetineae\npyrenomycetous\nPyrenopeziza\npyrethrin\nPyrethrum\npyrethrum\npyretic\npyreticosis\npyretogenesis\npyretogenetic\npyretogenic\npyretogenous\npyretography\npyretology\npyretolysis\npyretotherapy\npyrewinkes\nPyrex\npyrex\npyrexia\npyrexial\npyrexic\npyrexical\npyrgeometer\npyrgocephalic\npyrgocephaly\npyrgoidal\npyrgologist\npyrgom\npyrheliometer\npyrheliometric\npyrheliometry\npyrheliophor\npyribole\npyridazine\npyridic\npyridine\npyridinium\npyridinize\npyridone\npyridoxine\npyridyl\npyriform\npyriformis\npyrimidine\npyrimidyl\npyritaceous\npyrite\npyrites\npyritic\npyritical\npyritiferous\npyritization\npyritize\npyritohedral\npyritohedron\npyritoid\npyritology\npyritous\npyro\npyroacetic\npyroacid\npyroantimonate\npyroantimonic\npyroarsenate\npyroarsenic\npyroarsenious\npyroarsenite\npyrobelonite\npyrobituminous\npyroborate\npyroboric\npyrocatechin\npyrocatechinol\npyrocatechol\npyrocatechuic\npyrocellulose\npyrochemical\npyrochemically\npyrochlore\npyrochromate\npyrochromic\npyrocinchonic\npyrocitric\npyroclastic\npyrocoll\npyrocollodion\npyrocomenic\npyrocondensation\npyroconductivity\npyrocotton\npyrocrystalline\nPyrocystis\nPyrodine\npyroelectric\npyroelectricity\npyrogallate\npyrogallic\npyrogallol\npyrogen\npyrogenation\npyrogenesia\npyrogenesis\npyrogenetic\npyrogenetically\npyrogenic\npyrogenous\npyroglutamic\npyrognomic\npyrognostic\npyrognostics\npyrograph\npyrographer\npyrographic\npyrography\npyrogravure\npyroguaiacin\npyroheliometer\npyroid\nPyrola\nPyrolaceae\npyrolaceous\npyrolater\npyrolatry\npyroligneous\npyrolignic\npyrolignite\npyrolignous\npyrolite\npyrollogical\npyrologist\npyrology\npyrolusite\npyrolysis\npyrolytic\npyrolyze\npyromachy\npyromagnetic\npyromancer\npyromancy\npyromania\npyromaniac\npyromaniacal\npyromantic\npyromeconic\npyromellitic\npyrometallurgy\npyrometamorphic\npyrometamorphism\npyrometer\npyrometric\npyrometrical\npyrometrically\npyrometry\nPyromorphidae\npyromorphism\npyromorphite\npyromorphous\npyromotor\npyromucate\npyromucic\npyromucyl\npyronaphtha\npyrone\nPyronema\npyronine\npyronomics\npyronyxis\npyrope\npyropen\npyrophanite\npyrophanous\npyrophile\npyrophilous\npyrophobia\npyrophone\npyrophoric\npyrophorous\npyrophorus\npyrophosphate\npyrophosphoric\npyrophosphorous\npyrophotograph\npyrophotography\npyrophotometer\npyrophyllite\npyrophysalite\npyropuncture\npyropus\npyroracemate\npyroracemic\npyroscope\npyroscopy\npyrosis\npyrosmalite\nPyrosoma\nPyrosomatidae\npyrosome\nPyrosomidae\npyrosomoid\npyrosphere\npyrostat\npyrostereotype\npyrostilpnite\npyrosulphate\npyrosulphite\npyrosulphuric\npyrosulphuryl\npyrotantalate\npyrotartaric\npyrotartrate\npyrotechnian\npyrotechnic\npyrotechnical\npyrotechnically\npyrotechnician\npyrotechnics\npyrotechnist\npyrotechny\npyroterebic\npyrotheology\nPyrotheria\nPyrotherium\npyrotic\npyrotoxin\npyrotritaric\npyrotritartric\npyrouric\npyrovanadate\npyrovanadic\npyroxanthin\npyroxene\npyroxenic\npyroxenite\npyroxmangite\npyroxonium\npyroxyle\npyroxylene\npyroxylic\npyroxylin\nPyrrhic\npyrrhic\npyrrhichian\npyrrhichius\npyrrhicist\nPyrrhocoridae\nPyrrhonean\nPyrrhonian\nPyrrhonic\nPyrrhonism\nPyrrhonist\nPyrrhonistic\nPyrrhonize\npyrrhotine\npyrrhotism\npyrrhotist\npyrrhotite\npyrrhous\nPyrrhuloxia\nPyrrhus\npyrrodiazole\npyrrol\npyrrole\npyrrolic\npyrrolidine\npyrrolidone\npyrrolidyl\npyrroline\npyrrolylene\npyrrophyllin\npyrroporphyrin\npyrrotriazole\npyrroyl\npyrryl\npyrrylene\nPyrula\nPyrularia\npyruline\npyruloid\nPyrus\npyruvaldehyde\npyruvate\npyruvic\npyruvil\npyruvyl\npyrylium\nPythagorean\nPythagoreanism\nPythagoreanize\nPythagoreanly\nPythagoric\nPythagorical\nPythagorically\nPythagorism\nPythagorist\nPythagorize\nPythagorizer\nPythia\nPythiaceae\nPythiacystis\nPythiad\nPythiambic\nPythian\nPythic\nPythios\nPythium\nPythius\npythogenesis\npythogenetic\npythogenic\npythogenous\npython\npythoness\npythonic\npythonical\npythonid\nPythonidae\npythoniform\nPythoninae\npythonine\npythonism\nPythonissa\npythonist\npythonize\npythonoid\npythonomorph\nPythonomorpha\npythonomorphic\npythonomorphous\npyuria\npyvuril\npyx\nPyxidanthera\npyxidate\npyxides\npyxidium\npyxie\nPyxis\npyxis\nQ\nq\nqasida\nqere\nqeri\nqintar\nQoheleth\nqoph\nqua\nquab\nquabird\nquachil\nquack\nquackery\nquackhood\nquackish\nquackishly\nquackishness\nquackism\nquackle\nquacksalver\nquackster\nquacky\nquad\nquadded\nquaddle\nQuader\nQuadi\nquadmeter\nquadra\nquadrable\nquadragenarian\nquadragenarious\nQuadragesima\nquadragesimal\nquadragintesimal\nquadral\nquadrangle\nquadrangled\nquadrangular\nquadrangularly\nquadrangularness\nquadrangulate\nquadrans\nquadrant\nquadrantal\nquadrantes\nQuadrantid\nquadrantile\nquadrantlike\nquadrantly\nquadrat\nquadrate\nquadrated\nquadrateness\nquadratic\nquadratical\nquadratically\nquadratics\nQuadratifera\nquadratiferous\nquadratojugal\nquadratomandibular\nquadratosquamosal\nquadratrix\nquadratum\nquadrature\nquadratus\nquadrauricular\nquadrennia\nquadrennial\nquadrennially\nquadrennium\nquadriad\nquadrialate\nquadriannulate\nquadriarticulate\nquadriarticulated\nquadribasic\nquadric\nquadricapsular\nquadricapsulate\nquadricarinate\nquadricellular\nquadricentennial\nquadriceps\nquadrichord\nquadriciliate\nquadricinium\nquadricipital\nquadricone\nquadricorn\nquadricornous\nquadricostate\nquadricotyledonous\nquadricovariant\nquadricrescentic\nquadricrescentoid\nquadricuspid\nquadricuspidal\nquadricuspidate\nquadricycle\nquadricycler\nquadricyclist\nquadridentate\nquadridentated\nquadriderivative\nquadridigitate\nquadriennial\nquadriennium\nquadrienniumutile\nquadrifarious\nquadrifariously\nquadrifid\nquadrifilar\nquadrifocal\nquadrifoil\nquadrifoliate\nquadrifoliolate\nquadrifolious\nquadrifolium\nquadriform\nquadrifrons\nquadrifrontal\nquadrifurcate\nquadrifurcated\nquadrifurcation\nquadriga\nquadrigabled\nquadrigamist\nquadrigate\nquadrigatus\nquadrigeminal\nquadrigeminate\nquadrigeminous\nquadrigeminum\nquadrigenarious\nquadriglandular\nquadrihybrid\nquadrijugal\nquadrijugate\nquadrijugous\nquadrilaminar\nquadrilaminate\nquadrilateral\nquadrilaterally\nquadrilateralness\nquadrilingual\nquadriliteral\nquadrille\nquadrilled\nquadrillion\nquadrillionth\nquadrilobate\nquadrilobed\nquadrilocular\nquadriloculate\nquadrilogue\nquadrilogy\nquadrimembral\nquadrimetallic\nquadrimolecular\nquadrimum\nquadrinodal\nquadrinomial\nquadrinomical\nquadrinominal\nquadrinucleate\nquadrioxalate\nquadriparous\nquadripartite\nquadripartitely\nquadripartition\nquadripennate\nquadriphosphate\nquadriphyllous\nquadripinnate\nquadriplanar\nquadriplegia\nquadriplicate\nquadriplicated\nquadripolar\nquadripole\nquadriportico\nquadriporticus\nquadripulmonary\nquadriquadric\nquadriradiate\nquadrireme\nquadrisect\nquadrisection\nquadriseptate\nquadriserial\nquadrisetose\nquadrispiral\nquadristearate\nquadrisulcate\nquadrisulcated\nquadrisulphide\nquadrisyllabic\nquadrisyllabical\nquadrisyllable\nquadrisyllabous\nquadriternate\nquadritubercular\nquadrituberculate\nquadriurate\nquadrivalence\nquadrivalency\nquadrivalent\nquadrivalently\nquadrivalve\nquadrivalvular\nquadrivial\nquadrivious\nquadrivium\nquadrivoltine\nquadroon\nquadrual\nQuadrula\nquadrum\nQuadrumana\nquadrumanal\nquadrumane\nquadrumanous\nquadruped\nquadrupedal\nquadrupedan\nquadrupedant\nquadrupedantic\nquadrupedantical\nquadrupedate\nquadrupedation\nquadrupedism\nquadrupedous\nquadruplane\nquadruplator\nquadruple\nquadrupleness\nquadruplet\nquadruplex\nquadruplicate\nquadruplication\nquadruplicature\nquadruplicity\nquadruply\nquadrupole\nquaedam\nQuaequae\nquaesitum\nquaestor\nquaestorial\nquaestorian\nquaestorship\nquaestuary\nquaff\nquaffer\nquaffingly\nquag\nquagga\nquagginess\nquaggle\nquaggy\nquagmire\nquagmiry\nquahog\nquail\nquailberry\nquailery\nquailhead\nquaillike\nquaily\nquaint\nquaintance\nquaintise\nquaintish\nquaintly\nquaintness\nQuaitso\nquake\nquakeful\nquakeproof\nQuaker\nquaker\nquakerbird\nQuakerdom\nQuakeress\nQuakeric\nQuakerish\nQuakerishly\nQuakerishness\nQuakerism\nQuakerization\nQuakerize\nQuakerlet\nQuakerlike\nQuakerly\nQuakership\nQuakery\nquaketail\nquakiness\nquaking\nquakingly\nquaky\nquale\nqualifiable\nqualification\nqualificative\nqualificator\nqualificatory\nqualified\nqualifiedly\nqualifiedness\nqualifier\nqualify\nqualifyingly\nqualimeter\nqualitative\nqualitatively\nqualitied\nquality\nqualityless\nqualityship\nqualm\nqualminess\nqualmish\nqualmishly\nqualmishness\nqualmproof\nqualmy\nqualmyish\nqualtagh\nQuamasia\nQuamoclit\nquan\nquandary\nquandong\nquandy\nquannet\nquant\nquanta\nquantic\nquantical\nquantifiable\nquantifiably\nquantification\nquantifier\nquantify\nquantimeter\nquantitate\nquantitative\nquantitatively\nquantitativeness\nquantitied\nquantitive\nquantitively\nquantity\nquantivalence\nquantivalency\nquantivalent\nquantization\nquantize\nquantometer\nquantulum\nquantum\nQuapaw\nquaquaversal\nquaquaversally\nquar\nquarantinable\nquarantine\nquarantiner\nquaranty\nquardeel\nquare\nquarenden\nquarender\nquarentene\nquark\nquarl\nquarle\nquarred\nquarrel\nquarreled\nquarreler\nquarreling\nquarrelingly\nquarrelproof\nquarrelsome\nquarrelsomely\nquarrelsomeness\nquarriable\nquarried\nquarrier\nquarry\nquarryable\nquarrying\nquarryman\nquarrystone\nquart\nquartan\nquartane\nquartation\nquartenylic\nquarter\nquarterage\nquarterback\nquarterdeckish\nquartered\nquarterer\nquartering\nquarterization\nquarterland\nquarterly\nquarterman\nquartermaster\nquartermasterlike\nquartermastership\nquartern\nquarterpace\nquarters\nquartersaw\nquartersawed\nquarterspace\nquarterstaff\nquarterstetch\nquartet\nquartette\nquartetto\nquartful\nquartic\nquartile\nquartine\nquartiparous\nquarto\nQuartodeciman\nquartodecimanism\nquartole\nquartz\nquartzic\nquartziferous\nquartzite\nquartzitic\nquartzless\nquartzoid\nquartzose\nquartzous\nquartzy\nquash\nQuashee\nquashey\nquashy\nquasi\nquasijudicial\nQuasimodo\nquasky\nquassation\nquassative\nQuassia\nquassiin\nquassin\nquat\nquata\nquatch\nquatercentenary\nquatern\nquaternal\nquaternarian\nquaternarius\nquaternary\nquaternate\nquaternion\nquaternionic\nquaternionist\nquaternitarian\nquaternity\nquaters\nquatertenses\nquatorzain\nquatorze\nquatrain\nquatral\nquatrayle\nquatre\nquatrefeuille\nquatrefoil\nquatrefoiled\nquatrefoliated\nquatrible\nquatrin\nquatrino\nquatrocentism\nquatrocentist\nquatrocento\nQuatsino\nquattie\nquattrini\nquatuor\nquatuorvirate\nquauk\nquave\nquaver\nquaverer\nquavering\nquaveringly\nquaverous\nquavery\nquaverymavery\nquaw\nquawk\nquay\nquayage\nquayful\nquaylike\nquayman\nquayside\nquaysider\nqubba\nqueach\nqueachy\nqueak\nqueal\nquean\nqueanish\nqueasily\nqueasiness\nqueasom\nqueasy\nquebrachamine\nquebrachine\nquebrachitol\nquebracho\nquebradilla\nQuechua\nQuechuan\nquedful\nqueechy\nqueen\nqueencake\nqueencraft\nqueencup\nqueendom\nqueenfish\nqueenhood\nqueening\nqueenite\nqueenless\nqueenlet\nqueenlike\nqueenliness\nqueenly\nqueenright\nqueenroot\nqueensberry\nqueenship\nqueenweed\nqueenwood\nqueer\nqueerer\nqueerish\nqueerishness\nqueerity\nqueerly\nqueerness\nqueersome\nqueery\nqueest\nqueesting\nqueet\nqueeve\nquegh\nquei\nqueintise\nquelch\nQuelea\nquell\nqueller\nquemado\nqueme\nquemeful\nquemefully\nquemely\nquench\nquenchable\nquenchableness\nquencher\nquenchless\nquenchlessly\nquenchlessness\nquenelle\nquenselite\nquercetagetin\nquercetic\nquercetin\nquercetum\nquercic\nQuerciflorae\nquercimeritrin\nquercin\nquercine\nquercinic\nquercitannic\nquercitannin\nquercite\nquercitin\nquercitol\nquercitrin\nquercitron\nquercivorous\nQuercus\nQuerecho\nQuerendi\nQuerendy\nquerent\nQueres\nquerier\nqueriman\nquerimonious\nquerimoniously\nquerimoniousness\nquerimony\nquerist\nquerken\nquerl\nquern\nquernal\nQuernales\nquernstone\nquerulent\nquerulential\nquerulist\nquerulity\nquerulosity\nquerulous\nquerulously\nquerulousness\nquery\nquerying\nqueryingly\nqueryist\nquesited\nquesitive\nquest\nquester\nquesteur\nquestful\nquestingly\nquestion\nquestionability\nquestionable\nquestionableness\nquestionably\nquestionary\nquestionee\nquestioner\nquestioningly\nquestionist\nquestionless\nquestionlessly\nquestionnaire\nquestionous\nquestionwise\nquestman\nquestor\nquestorial\nquestorship\nquet\nquetch\nquetenite\nquetzal\nqueue\nquey\nQuiangan\nquiapo\nquib\nquibble\nquibbleproof\nquibbler\nquibblingly\nquiblet\nquica\nQuiche\nquick\nquickbeam\nquickborn\nquicken\nquickenance\nquickenbeam\nquickener\nquickfoot\nquickhatch\nquickhearted\nquickie\nquicklime\nquickly\nquickness\nquicksand\nquicksandy\nquickset\nquicksilver\nquicksilvering\nquicksilverish\nquicksilverishness\nquicksilvery\nquickstep\nquickthorn\nquickwork\nquid\nQuidae\nquiddative\nquidder\nQuiddist\nquiddit\nquidditative\nquidditatively\nquiddity\nquiddle\nquiddler\nquidnunc\nquiesce\nquiescence\nquiescency\nquiescent\nquiescently\nquiet\nquietable\nquieten\nquietener\nquieter\nquieting\nquietism\nquietist\nquietistic\nquietive\nquietlike\nquietly\nquietness\nquietsome\nquietude\nquietus\nquiff\nquiffing\nQuiina\nQuiinaceae\nquiinaceous\nquila\nquiles\nQuileute\nquilkin\nquill\nQuillagua\nquillai\nquillaic\nQuillaja\nquillaja\nquillback\nquilled\nquiller\nquillet\nquilleted\nquillfish\nquilling\nquilltail\nquillwork\nquillwort\nquilly\nquilt\nquilted\nquilter\nquilting\nQuimbaya\nQuimper\nquin\nquina\nquinacrine\nQuinaielt\nquinaldic\nquinaldine\nquinaldinic\nquinaldinium\nquinaldyl\nquinamicine\nquinamidine\nquinamine\nquinanisole\nquinaquina\nquinarian\nquinarius\nquinary\nquinate\nquinatoxine\nQuinault\nquinazoline\nquinazolyl\nquince\nquincentenary\nquincentennial\nquincewort\nquinch\nquincubital\nquincubitalism\nquincuncial\nquincuncially\nquincunx\nquincunxial\nquindecad\nquindecagon\nquindecangle\nquindecasyllabic\nquindecemvir\nquindecemvirate\nquindecennial\nquindecim\nquindecima\nquindecylic\nquindene\nquinetum\nquingentenary\nquinhydrone\nquinia\nquinible\nquinic\nquinicine\nquinidia\nquinidine\nquinin\nquinina\nquinine\nquininiazation\nquininic\nquininism\nquininize\nquiniretin\nquinisext\nquinisextine\nquinism\nquinite\nquinitol\nquinizarin\nquinize\nquink\nquinnat\nquinnet\nQuinnipiac\nquinoa\nquinocarbonium\nquinoform\nquinogen\nquinoid\nquinoidal\nquinoidation\nquinoidine\nquinol\nquinoline\nquinolinic\nquinolinium\nquinolinyl\nquinologist\nquinology\nquinolyl\nquinometry\nquinone\nquinonediimine\nquinonic\nquinonimine\nquinonization\nquinonize\nquinonoid\nquinonyl\nquinopyrin\nquinotannic\nquinotoxine\nquinova\nquinovatannic\nquinovate\nquinovic\nquinovin\nquinovose\nquinoxaline\nquinoxalyl\nquinoyl\nquinquagenarian\nquinquagenary\nQuinquagesima\nquinquagesimal\nquinquarticular\nQuinquatria\nQuinquatrus\nquinquecapsular\nquinquecostate\nquinquedentate\nquinquedentated\nquinquefarious\nquinquefid\nquinquefoliate\nquinquefoliated\nquinquefoliolate\nquinquegrade\nquinquejugous\nquinquelateral\nquinqueliteral\nquinquelobate\nquinquelobated\nquinquelobed\nquinquelocular\nquinqueloculine\nquinquenary\nquinquenerval\nquinquenerved\nquinquennalia\nquinquennia\nquinquenniad\nquinquennial\nquinquennialist\nquinquennially\nquinquennium\nquinquepartite\nquinquepedal\nquinquepedalian\nquinquepetaloid\nquinquepunctal\nquinquepunctate\nquinqueradial\nquinqueradiate\nquinquereme\nquinquertium\nquinquesect\nquinquesection\nquinqueseptate\nquinqueserial\nquinqueseriate\nquinquesyllabic\nquinquesyllable\nquinquetubercular\nquinquetuberculate\nquinquevalence\nquinquevalency\nquinquevalent\nquinquevalve\nquinquevalvous\nquinquevalvular\nquinqueverbal\nquinqueverbial\nquinquevir\nquinquevirate\nquinquiliteral\nquinquina\nquinquino\nquinse\nquinsied\nquinsy\nquinsyberry\nquinsywort\nquint\nquintad\nquintadena\nquintadene\nquintain\nquintal\nquintan\nquintant\nquintary\nquintato\nquinte\nquintelement\nquintennial\nquinternion\nquinteron\nquinteroon\nquintessence\nquintessential\nquintessentiality\nquintessentially\nquintessentiate\nquintet\nquintette\nquintetto\nquintic\nquintile\nQuintilis\nQuintillian\nquintillion\nquintillionth\nQuintin\nquintin\nquintiped\nQuintius\nquinto\nquintocubital\nquintocubitalism\nquintole\nquinton\nquintroon\nquintuple\nquintuplet\nquintuplicate\nquintuplication\nquintuplinerved\nquintupliribbed\nquintus\nquinuclidine\nquinyl\nquinze\nquinzieme\nquip\nquipful\nquipo\nquipper\nquippish\nquippishness\nquippy\nquipsome\nquipsomeness\nquipster\nquipu\nquira\nquire\nquirewise\nQuirinal\nQuirinalia\nquirinca\nquiritarian\nquiritary\nQuirite\nQuirites\nquirk\nquirkiness\nquirkish\nquirksey\nquirksome\nquirky\nquirl\nquirquincho\nquirt\nquis\nquisby\nquiscos\nquisle\nquisling\nQuisqualis\nquisqueite\nquisquilian\nquisquiliary\nquisquilious\nquisquous\nquisutsch\nquit\nquitch\nquitclaim\nquite\nQuitemoca\nQuiteno\nquitrent\nquits\nquittable\nquittance\nquitted\nquitter\nquittor\nQuitu\nquiver\nquivered\nquiverer\nquiverful\nquivering\nquiveringly\nquiverish\nquiverleaf\nquivery\nQuixote\nquixotic\nquixotical\nquixotically\nquixotism\nquixotize\nquixotry\nquiz\nquizzability\nquizzable\nquizzacious\nquizzatorial\nquizzee\nquizzer\nquizzery\nquizzical\nquizzicality\nquizzically\nquizzicalness\nquizzification\nquizzify\nquizziness\nquizzingly\nquizzish\nquizzism\nquizzity\nquizzy\nQung\nquo\nquod\nquoddies\nquoddity\nquodlibet\nquodlibetal\nquodlibetarian\nquodlibetary\nquodlibetic\nquodlibetical\nquodlibetically\nquoilers\nquoin\nquoined\nquoining\nquoit\nquoiter\nquoitlike\nquoits\nquondam\nquondamly\nquondamship\nquoniam\nquop\nQuoratean\nquorum\nquot\nquota\nquotability\nquotable\nquotableness\nquotably\nquotation\nquotational\nquotationally\nquotationist\nquotative\nquote\nquotee\nquoteless\nquotennial\nquoter\nquoteworthy\nquoth\nquotha\nquotidian\nquotidianly\nquotidianness\nquotient\nquotiety\nquotingly\nquotity\nquotlibet\nquotum\nQurti\nR\nr\nra\nraad\nRaanan\nraash\nRab\nrab\nraband\nrabanna\nrabat\nrabatine\nrabatte\nrabattement\nrabbanist\nrabbanite\nrabbet\nrabbeting\nrabbi\nrabbin\nrabbinate\nrabbindom\nRabbinic\nrabbinic\nRabbinica\nrabbinical\nrabbinically\nrabbinism\nrabbinist\nrabbinistic\nrabbinistical\nrabbinite\nrabbinize\nrabbinship\nrabbiship\nrabbit\nrabbitberry\nrabbiter\nrabbithearted\nrabbitlike\nrabbitmouth\nrabbitproof\nrabbitroot\nrabbitry\nrabbitskin\nrabbitweed\nrabbitwise\nrabbitwood\nrabbity\nrabble\nrabblelike\nrabblement\nrabbleproof\nrabbler\nrabblesome\nrabboni\nrabbonim\nRabelaisian\nRabelaisianism\nRabelaism\nRabi\nrabic\nrabid\nrabidity\nrabidly\nrabidness\nrabies\nrabietic\nrabific\nrabiform\nrabigenic\nRabin\nrabinet\nrabirubia\nrabitic\nrabulistic\nrabulous\nraccoon\nraccoonberry\nraccroc\nrace\nraceabout\nracebrood\nracecourse\nracegoer\nracegoing\nracelike\nracemate\nracemation\nraceme\nracemed\nracemic\nracemiferous\nracemiform\nracemism\nracemization\nracemize\nracemocarbonate\nracemocarbonic\nracemomethylate\nracemose\nracemosely\nracemous\nracemously\nracemule\nracemulose\nracer\nraceway\nrach\nrache\nRachel\nrachial\nrachialgia\nrachialgic\nrachianalgesia\nRachianectes\nrachianesthesia\nrachicentesis\nrachides\nrachidial\nrachidian\nrachiform\nRachiglossa\nrachiglossate\nrachigraph\nrachilla\nrachiocentesis\nrachiococainize\nrachiocyphosis\nrachiodont\nrachiodynia\nrachiometer\nrachiomyelitis\nrachioparalysis\nrachioplegia\nrachioscoliosis\nrachiotome\nrachiotomy\nrachipagus\nrachis\nrachischisis\nrachitic\nrachitis\nrachitism\nrachitogenic\nrachitome\nrachitomous\nrachitomy\nRachycentridae\nRachycentron\nracial\nracialism\nracialist\nraciality\nracialization\nracialize\nracially\nracily\nraciness\nracing\nracinglike\nracism\nracist\nrack\nrackabones\nrackan\nrackboard\nracker\nracket\nracketeer\nracketeering\nracketer\nracketing\nracketlike\nracketproof\nracketry\nrackett\nrackettail\nrackety\nrackful\nracking\nrackingly\nrackle\nrackless\nrackmaster\nrackproof\nrackrentable\nrackway\nrackwork\nracloir\nracon\nraconteur\nracoon\nRacovian\nracy\nrad\nrada\nradar\nradarman\nradarscope\nraddle\nraddleman\nraddlings\nradectomy\nRadek\nradiability\nradiable\nradial\nradiale\nradialia\nradiality\nradialization\nradialize\nradially\nradian\nradiance\nradiancy\nradiant\nradiantly\nRadiata\nradiate\nradiated\nradiately\nradiateness\nradiatics\nradiatiform\nradiation\nradiational\nradiative\nradiatopatent\nradiatoporose\nradiatoporous\nradiator\nradiatory\nradiatostriate\nradiatosulcate\nradiature\nradical\nradicalism\nradicality\nradicalization\nradicalize\nradically\nradicalness\nradicand\nradicant\nradicate\nradicated\nradicating\nradication\nradicel\nradices\nradicicola\nradicicolous\nradiciferous\nradiciflorous\nradiciform\nradicivorous\nradicle\nradicolous\nradicose\nRadicula\nradicular\nradicule\nradiculectomy\nradiculitis\nradiculose\nradiectomy\nradiescent\nradiferous\nradii\nradio\nradioacoustics\nradioactinium\nradioactivate\nradioactive\nradioactively\nradioactivity\nradioamplifier\nradioanaphylaxis\nradioautograph\nradioautographic\nradioautography\nradiobicipital\nradiobroadcast\nradiobroadcaster\nradiobroadcasting\nradiobserver\nradiocarbon\nradiocarpal\nradiocast\nradiocaster\nradiochemical\nradiochemistry\nradiocinematograph\nradioconductor\nradiode\nradiodermatitis\nradiodetector\nradiodiagnosis\nradiodigital\nradiodontia\nradiodontic\nradiodontist\nradiodynamic\nradiodynamics\nradioelement\nradiogenic\nradiogoniometer\nradiogoniometric\nradiogoniometry\nradiogram\nradiograph\nradiographer\nradiographic\nradiographical\nradiographically\nradiography\nradiohumeral\nradioisotope\nRadiolaria\nradiolarian\nradiolead\nradiolite\nRadiolites\nradiolitic\nRadiolitidae\nradiolocation\nradiolocator\nradiologic\nradiological\nradiologist\nradiology\nradiolucency\nradiolucent\nradioluminescence\nradioluminescent\nradioman\nradiomedial\nradiometallography\nradiometeorograph\nradiometer\nradiometric\nradiometrically\nradiometry\nradiomicrometer\nradiomovies\nradiomuscular\nradionecrosis\nradioneuritis\nradionics\nradiopacity\nradiopalmar\nradiopaque\nradiopelvimetry\nradiophare\nradiophone\nradiophonic\nradiophony\nradiophosphorus\nradiophotograph\nradiophotography\nradiopraxis\nradioscope\nradioscopic\nradioscopical\nradioscopy\nradiosensibility\nradiosensitive\nradiosensitivity\nradiosonde\nradiosonic\nradiostereoscopy\nradiosurgery\nradiosurgical\nradiosymmetrical\nradiotechnology\nradiotelegram\nradiotelegraph\nradiotelegraphic\nradiotelegraphy\nradiotelephone\nradiotelephonic\nradiotelephony\nradioteria\nradiothallium\nradiotherapeutic\nradiotherapeutics\nradiotherapeutist\nradiotherapist\nradiotherapy\nradiothermy\nradiothorium\nradiotoxemia\nradiotransparency\nradiotransparent\nradiotrician\nRadiotron\nradiotropic\nradiotropism\nradiovision\nradish\nradishlike\nradium\nradiumization\nradiumize\nradiumlike\nradiumproof\nradiumtherapy\nradius\nradix\nradknight\nradman\nradome\nradon\nradsimir\nradula\nradulate\nraduliferous\nraduliform\nRafael\nRafe\nraff\nRaffaelesque\nraffe\nraffee\nraffery\nraffia\nraffinase\nraffinate\nraffing\nraffinose\nraffish\nraffishly\nraffishness\nraffle\nraffler\nRafflesia\nrafflesia\nRafflesiaceae\nrafflesiaceous\nRafik\nraft\nraftage\nrafter\nraftiness\nraftlike\nraftman\nraftsman\nrafty\nrag\nraga\nragabash\nragabrash\nragamuffin\nragamuffinism\nragamuffinly\nrage\nrageful\nragefully\nrageless\nrageous\nrageously\nrageousness\nrageproof\nrager\nragesome\nragfish\nragged\nraggedly\nraggedness\nraggedy\nraggee\nragger\nraggery\nraggety\nraggil\nraggily\nragging\nraggle\nraggled\nraggy\nraghouse\nRaghu\nraging\nragingly\nraglan\nraglanite\nraglet\nraglin\nragman\nRagnar\nragout\nragpicker\nragseller\nragshag\nragsorter\nragstone\nragtag\nragtime\nragtimer\nragtimey\nragule\nraguly\nragweed\nragwort\nrah\nRahanwin\nrahdar\nrahdaree\nRahul\nRaia\nraia\nRaiae\nraid\nraider\nraidproof\nRaif\nRaiidae\nraiiform\nrail\nrailage\nrailbird\nrailer\nrailhead\nrailing\nrailingly\nraillery\nrailless\nraillike\nrailly\nrailman\nrailroad\nrailroadana\nrailroader\nrailroadiana\nrailroading\nrailroadish\nrailroadship\nrailway\nrailwaydom\nrailwayless\nRaimannia\nraiment\nraimentless\nrain\nrainband\nrainbird\nrainbound\nrainbow\nrainbowlike\nrainbowweed\nrainbowy\nrainburst\nraincoat\nraindrop\nRainer\nrainer\nrainfall\nrainfowl\nrainful\nrainily\nraininess\nrainless\nrainlessness\nrainlight\nrainproof\nrainproofer\nrainspout\nrainstorm\nraintight\nrainwash\nrainworm\nrainy\nraioid\nRais\nrais\nraisable\nraise\nraised\nraiseman\nraiser\nraisin\nraising\nraisiny\nRaj\nraj\nRaja\nraja\nRajah\nrajah\nRajarshi\nrajaship\nRajasthani\nrajbansi\nRajeev\nRajendra\nRajesh\nRajidae\nRajiv\nRajput\nrakan\nrake\nrakeage\nrakeful\nrakehell\nrakehellish\nrakehelly\nraker\nrakery\nrakesteel\nrakestele\nrakh\nRakhal\nraki\nrakily\nraking\nrakish\nrakishly\nrakishness\nrakit\nrakshasa\nraku\nRalf\nrallentando\nralliance\nRallidae\nrallier\nralliform\nRallinae\nralline\nRallus\nrally\nRalph\nralph\nralstonite\nRam\nram\nRama\nramada\nRamadoss\nramage\nRamaism\nRamaite\nramal\nRaman\nRamanan\nramanas\nramarama\nramass\nramate\nrambeh\nramberge\nramble\nrambler\nrambling\nramblingly\nramblingness\nRambo\nrambong\nrambooze\nRambouillet\nrambunctious\nrambutan\nramdohrite\nrame\nrameal\nRamean\nramed\nramekin\nramellose\nrament\nramentaceous\nramental\nramentiferous\nramentum\nrameous\nramequin\nRameses\nRameseum\nRamesh\nRamessid\nRamesside\nramet\nramex\nramfeezled\nramgunshoch\nramhead\nramhood\nrami\nramicorn\nramie\nramiferous\nramificate\nramification\nramified\nramiflorous\nramiform\nramify\nramigerous\nRamillie\nRamillied\nramiparous\nRamiro\nramisection\nramisectomy\nRamism\nRamist\nRamistical\nramlike\nramline\nrammack\nrammel\nrammelsbergite\nrammer\nrammerman\nrammish\nrammishly\nrammishness\nrammy\nRamneek\nRamnenses\nRamnes\nRamon\nRamona\nRamoosii\nramose\nramosely\nramosity\nramosopalmate\nramosopinnate\nramososubdivided\nramous\nramp\nrampacious\nrampaciously\nrampage\nrampageous\nrampageously\nrampageousness\nrampager\nrampagious\nrampancy\nrampant\nrampantly\nrampart\nramped\nramper\nRamphastidae\nRamphastides\nRamphastos\nrampick\nrampike\nramping\nrampingly\nrampion\nrampire\nrampler\nramplor\nrampsman\nramrace\nramrod\nramroddy\nramscallion\nramsch\nRamsey\nramshackle\nramshackled\nramshackleness\nramshackly\nramson\nramstam\nramtil\nramular\nramule\nramuliferous\nramulose\nramulous\nramulus\nramus\nramuscule\nRamusi\nRan\nran\nRana\nrana\nranal\nRanales\nranarian\nranarium\nRanatra\nrance\nrancel\nrancellor\nrancelman\nrancer\nrancescent\nranch\nranche\nrancher\nrancheria\nranchero\nranchless\nranchman\nrancho\nranchwoman\nrancid\nrancidification\nrancidify\nrancidity\nrancidly\nrancidness\nrancor\nrancorous\nrancorously\nrancorousness\nrancorproof\nRand\nrand\nRandal\nRandall\nRandallite\nrandan\nrandannite\nRandell\nrandem\nrander\nRandia\nranding\nrandir\nRandite\nrandle\nRandolph\nrandom\nrandomish\nrandomization\nrandomize\nrandomly\nrandomness\nrandomwise\nRandy\nrandy\nrane\nRanella\nRanere\nrang\nrangatira\nrange\nranged\nrangeless\nrangeman\nranger\nrangership\nrangework\nrangey\nRangifer\nrangiferine\nranginess\nranging\nrangle\nrangler\nrangy\nrani\nranid\nRanidae\nraniferous\nraniform\nRanina\nRaninae\nranine\nraninian\nranivorous\nRanjit\nrank\nranked\nranker\nrankish\nrankle\nrankless\nranklingly\nrankly\nrankness\nranksman\nrankwise\nrann\nrannel\nrannigal\nranny\nRanquel\nransack\nransacker\nransackle\nransel\nranselman\nransom\nransomable\nransomer\nransomfree\nransomless\nranstead\nrant\nrantan\nrantankerous\nrantepole\nranter\nRanterism\nranting\nrantingly\nrantipole\nrantock\nranty\nranula\nranular\nRanunculaceae\nranunculaceous\nRanunculales\nranunculi\nRanunculus\nRanzania\nRaoulia\nrap\nRapaces\nrapaceus\nrapacious\nrapaciously\nrapaciousness\nrapacity\nrapakivi\nRapallo\nRapanea\nRapateaceae\nrapateaceous\nrape\nrapeful\nraper\nrapeseed\nRaphael\nRaphaelesque\nRaphaelic\nRaphaelism\nRaphaelite\nRaphaelitism\nraphania\nRaphanus\nraphany\nraphe\nRaphia\nraphide\nraphides\nraphidiferous\nraphidiid\nRaphidiidae\nRaphidodea\nRaphidoidea\nRaphiolepis\nraphis\nrapic\nrapid\nrapidity\nrapidly\nrapidness\nrapier\nrapiered\nrapillo\nrapine\nrapiner\nraping\nrapinic\nrapist\nraploch\nrappage\nrapparee\nrappe\nrappel\nrapper\nrapping\nRappist\nrappist\nRappite\nrapport\nrapscallion\nrapscallionism\nrapscallionly\nrapscallionry\nrapt\nraptatorial\nraptatory\nraptly\nraptness\nraptor\nRaptores\nraptorial\nraptorious\nraptril\nrapture\nraptured\nraptureless\nrapturist\nrapturize\nrapturous\nrapturously\nrapturousness\nraptury\nraptus\nrare\nrarebit\nrarefaction\nrarefactional\nrarefactive\nrarefiable\nrarefication\nrarefier\nrarefy\nrarely\nrareness\nrareripe\nRareyfy\nrariconstant\nrarish\nrarity\nRarotongan\nras\nrasa\nRasalas\nRasalhague\nrasamala\nrasant\nrascacio\nrascal\nrascaldom\nrascaless\nrascalion\nrascalism\nrascality\nrascalize\nrascallike\nrascallion\nrascally\nrascalry\nrascalship\nrasceta\nrascette\nrase\nrasen\nRasenna\nraser\nrasgado\nrash\nrasher\nrashful\nrashing\nrashlike\nrashly\nrashness\nRashti\nrasion\nRaskolnik\nRasores\nrasorial\nrasp\nraspatorium\nraspatory\nraspberriade\nraspberry\nraspberrylike\nrasped\nrasper\nrasping\nraspingly\nraspingness\nraspings\nraspish\nraspite\nraspy\nrasse\nRasselas\nrassle\nRastaban\nraster\nrastik\nrastle\nRastus\nrasure\nrat\nrata\nratability\nratable\nratableness\nratably\nratafee\nratafia\nratal\nratanhia\nrataplan\nratbite\nratcatcher\nratcatching\nratch\nratchel\nratchelly\nratcher\nratchet\nratchetlike\nratchety\nratching\nratchment\nrate\nrated\nratel\nrateless\nratement\nratepayer\nratepaying\nrater\nratfish\nrath\nrathe\nrathed\nrathely\nratheness\nrather\nratherest\nratheripe\nratherish\nratherly\nrathest\nrathite\nRathnakumar\nrathole\nrathskeller\nraticidal\nraticide\nratification\nratificationist\nratifier\nratify\nratihabition\nratine\nrating\nratio\nratiocinant\nratiocinate\nratiocination\nratiocinative\nratiocinator\nratiocinatory\nratiometer\nration\nrationable\nrationably\nrational\nrationale\nrationalism\nrationalist\nrationalistic\nrationalistical\nrationalistically\nrationalisticism\nrationality\nrationalizable\nrationalization\nrationalize\nrationalizer\nrationally\nrationalness\nrationate\nrationless\nrationment\nRatitae\nratite\nratitous\nratlike\nratline\nratliner\nratoon\nratooner\nratproof\nratsbane\nratskeller\nrattage\nrattail\nrattan\nratteen\nratten\nrattener\nratter\nrattery\nratti\nrattinet\nrattish\nrattle\nrattlebag\nrattlebones\nrattlebox\nrattlebrain\nrattlebrained\nrattlebush\nrattled\nrattlehead\nrattleheaded\nrattlejack\nrattlemouse\nrattlenut\nrattlepate\nrattlepated\nrattlepod\nrattleproof\nrattler\nrattleran\nrattleroot\nrattlertree\nrattles\nrattleskull\nrattleskulled\nrattlesnake\nrattlesome\nrattletrap\nrattleweed\nrattlewort\nrattling\nrattlingly\nrattlingness\nrattly\nratton\nrattoner\nrattrap\nRattus\nratty\nratwa\nratwood\nraucid\nraucidity\nraucity\nraucous\nraucously\nraucousness\nraught\nraugrave\nrauk\nraukle\nRaul\nrauli\nraun\nraunge\nraupo\nrauque\nRauraci\nRaurici\nRauwolfia\nravage\nravagement\nravager\nrave\nravehook\nraveinelike\nravel\nraveler\nravelin\nraveling\nravelly\nravelment\nravelproof\nraven\nRavenala\nravendom\nravenduck\nRavenelia\nravener\nravenhood\nravening\nravenish\nravenlike\nravenous\nravenously\nravenousness\nravenry\nravens\nRavensara\nravensara\nravenstone\nravenwise\nraver\nRavi\nravigote\nravin\nravinate\nRavindran\nRavindranath\nravine\nravined\nravinement\nraviney\nraving\nravingly\nravioli\nravish\nravishedly\nravisher\nravishing\nravishingly\nravishment\nravison\nravissant\nraw\nrawboned\nrawbones\nrawhead\nrawhide\nrawhider\nrawish\nrawishness\nrawness\nrax\nRay\nray\nraya\nrayage\nRayan\nrayed\nrayful\nrayless\nraylessness\nraylet\nRaymond\nrayon\nrayonnance\nrayonnant\nraze\nrazee\nrazer\nrazoo\nrazor\nrazorable\nrazorback\nrazorbill\nrazoredge\nrazorless\nrazormaker\nrazormaking\nrazorman\nrazorstrop\nRazoumofskya\nrazz\nrazzia\nrazzly\nre\nrea\nreaal\nreabandon\nreabolish\nreabolition\nreabridge\nreabsence\nreabsent\nreabsolve\nreabsorb\nreabsorption\nreabuse\nreacceptance\nreaccess\nreaccession\nreacclimatization\nreacclimatize\nreaccommodate\nreaccompany\nreaccomplish\nreaccomplishment\nreaccord\nreaccost\nreaccount\nreaccredit\nreaccrue\nreaccumulate\nreaccumulation\nreaccusation\nreaccuse\nreaccustom\nreacetylation\nreach\nreachable\nreacher\nreachieve\nreachievement\nreaching\nreachless\nreachy\nreacidification\nreacidify\nreacknowledge\nreacknowledgment\nreacquaint\nreacquaintance\nreacquire\nreacquisition\nreact\nreactance\nreactant\nreaction\nreactional\nreactionally\nreactionariness\nreactionarism\nreactionarist\nreactionary\nreactionaryism\nreactionism\nreactionist\nreactivate\nreactivation\nreactive\nreactively\nreactiveness\nreactivity\nreactological\nreactology\nreactor\nreactualization\nreactualize\nreactuate\nread\nreadability\nreadable\nreadableness\nreadably\nreadapt\nreadaptability\nreadaptable\nreadaptation\nreadaptive\nreadaptiveness\nreadd\nreaddition\nreaddress\nreader\nreaderdom\nreadership\nreadhere\nreadhesion\nreadily\nreadiness\nreading\nreadingdom\nreadjourn\nreadjournment\nreadjudicate\nreadjust\nreadjustable\nreadjuster\nreadjustment\nreadmeasurement\nreadminister\nreadmiration\nreadmire\nreadmission\nreadmit\nreadmittance\nreadopt\nreadoption\nreadorn\nreadvance\nreadvancement\nreadvent\nreadventure\nreadvertency\nreadvertise\nreadvertisement\nreadvise\nreadvocate\nready\nreaeration\nreaffect\nreaffection\nreaffiliate\nreaffiliation\nreaffirm\nreaffirmance\nreaffirmation\nreaffirmer\nreafflict\nreafford\nreafforest\nreafforestation\nreaffusion\nreagency\nreagent\nreaggravate\nreaggravation\nreaggregate\nreaggregation\nreaggressive\nreagin\nreagitate\nreagitation\nreagree\nreagreement\nreak\nReal\nreal\nrealarm\nreales\nrealest\nrealgar\nrealienate\nrealienation\nrealign\nrealignment\nrealism\nrealist\nrealistic\nrealistically\nrealisticize\nreality\nrealive\nrealizability\nrealizable\nrealizableness\nrealizably\nrealization\nrealize\nrealizer\nrealizing\nrealizingly\nreallegation\nreallege\nreallegorize\nrealliance\nreallocate\nreallocation\nreallot\nreallotment\nreallow\nreallowance\nreallude\nreallusion\nreally\nrealm\nrealmless\nrealmlet\nrealness\nrealter\nrealteration\nrealtor\nrealty\nream\nreamage\nreamalgamate\nreamalgamation\nreamass\nreambitious\nreamend\nreamendment\nreamer\nreamerer\nreaminess\nreamputation\nreamuse\nreamy\nreanalysis\nreanalyze\nreanchor\nreanimalize\nreanimate\nreanimation\nreanneal\nreannex\nreannexation\nreannotate\nreannounce\nreannouncement\nreannoy\nreannoyance\nreanoint\nreanswer\nreanvil\nreanxiety\nreap\nreapable\nreapdole\nreaper\nreapologize\nreapology\nreapparel\nreapparition\nreappeal\nreappear\nreappearance\nreappease\nreapplaud\nreapplause\nreappliance\nreapplicant\nreapplication\nreapplier\nreapply\nreappoint\nreappointment\nreapportion\nreapportionment\nreapposition\nreappraisal\nreappraise\nreappraisement\nreappreciate\nreappreciation\nreapprehend\nreapprehension\nreapproach\nreapprobation\nreappropriate\nreappropriation\nreapproval\nreapprove\nrear\nrearbitrate\nrearbitration\nrearer\nreargue\nreargument\nrearhorse\nrearisal\nrearise\nrearling\nrearm\nrearmament\nrearmost\nrearousal\nrearouse\nrearrange\nrearrangeable\nrearrangement\nrearranger\nrearray\nrearrest\nrearrival\nrearrive\nrearward\nrearwardly\nrearwardness\nrearwards\nreascend\nreascendancy\nreascendant\nreascendency\nreascendent\nreascension\nreascensional\nreascent\nreascertain\nreascertainment\nreashlar\nreasiness\nreask\nreason\nreasonability\nreasonable\nreasonableness\nreasonably\nreasoned\nreasonedly\nreasoner\nreasoning\nreasoningly\nreasonless\nreasonlessly\nreasonlessness\nreasonproof\nreaspire\nreassail\nreassault\nreassay\nreassemblage\nreassemble\nreassembly\nreassent\nreassert\nreassertion\nreassertor\nreassess\nreassessment\nreasseverate\nreassign\nreassignation\nreassignment\nreassimilate\nreassimilation\nreassist\nreassistance\nreassociate\nreassociation\nreassort\nreassortment\nreassume\nreassumption\nreassurance\nreassure\nreassured\nreassuredly\nreassurement\nreassurer\nreassuring\nreassuringly\nreastiness\nreastonish\nreastonishment\nreastray\nreasty\nreasy\nreattach\nreattachment\nreattack\nreattain\nreattainment\nreattempt\nreattend\nreattendance\nreattention\nreattentive\nreattest\nreattire\nreattract\nreattraction\nreattribute\nreattribution\nreatus\nreaudit\nreauthenticate\nreauthentication\nreauthorization\nreauthorize\nreavail\nreavailable\nreave\nreaver\nreavoid\nreavoidance\nreavouch\nreavow\nreawait\nreawake\nreawaken\nreawakening\nreawakenment\nreaward\nreaware\nreb\nrebab\nreback\nrebag\nrebait\nrebake\nrebalance\nrebale\nreballast\nreballot\nreban\nrebandage\nrebanish\nrebanishment\nrebankrupt\nrebankruptcy\nrebaptism\nrebaptismal\nrebaptization\nrebaptize\nrebaptizer\nrebar\nrebarbarization\nrebarbarize\nrebarbative\nrebargain\nrebase\nrebasis\nrebatable\nrebate\nrebateable\nrebatement\nrebater\nrebathe\nrebato\nrebawl\nrebeamer\nrebear\nrebeat\nrebeautify\nrebec\nRebecca\nRebeccaism\nRebeccaites\nrebeck\nrebecome\nrebed\nrebeg\nrebeget\nrebeggar\nrebegin\nrebeginner\nrebeginning\nrebeguile\nrebehold\nRebekah\nrebel\nrebeldom\nrebelief\nrebelieve\nrebeller\nrebellike\nrebellion\nrebellious\nrebelliously\nrebelliousness\nrebellow\nrebelly\nrebelong\nrebelove\nrebelproof\nrebemire\nrebend\nrebenediction\nrebenefit\nrebeset\nrebesiege\nrebestow\nrebestowal\nrebetake\nrebetray\nrebewail\nrebia\nrebias\nrebid\nrebill\nrebillet\nrebilling\nrebind\nrebirth\nrebite\nreblade\nreblame\nreblast\nrebleach\nreblend\nrebless\nreblock\nrebloom\nreblossom\nreblot\nreblow\nreblue\nrebluff\nreblunder\nreboant\nreboantic\nreboard\nreboast\nrebob\nreboil\nreboiler\nreboise\nreboisement\nrebold\nrebolt\nrebone\nrebook\nrebop\nrebore\nreborn\nreborrow\nrebottle\nReboulia\nrebounce\nrebound\nreboundable\nrebounder\nreboundingness\nrebourbonize\nrebox\nrebrace\nrebraid\nrebranch\nrebrand\nrebrandish\nrebreathe\nrebreed\nrebrew\nrebribe\nrebrick\nrebridge\nrebring\nrebringer\nrebroach\nrebroadcast\nrebronze\nrebrown\nrebrush\nrebrutalize\nrebubble\nrebuckle\nrebud\nrebudget\nrebuff\nrebuffable\nrebuffably\nrebuffet\nrebuffproof\nrebuild\nrebuilder\nrebuilt\nrebukable\nrebuke\nrebukeable\nrebukeful\nrebukefully\nrebukefulness\nrebukeproof\nrebuker\nrebukingly\nrebulk\nrebunch\nrebundle\nrebunker\nrebuoy\nrebuoyage\nreburden\nreburgeon\nreburial\nreburn\nreburnish\nreburst\nrebury\nrebus\nrebush\nrebusy\nrebut\nrebute\nrebutment\nrebuttable\nrebuttal\nrebutter\nrebutton\nrebuy\nrecable\nrecadency\nrecage\nrecalcination\nrecalcine\nrecalcitrance\nrecalcitrant\nrecalcitrate\nrecalcitration\nrecalculate\nrecalculation\nrecalesce\nrecalescence\nrecalescent\nrecalibrate\nrecalibration\nrecalk\nrecall\nrecallable\nrecallist\nrecallment\nrecampaign\nrecancel\nrecancellation\nrecandescence\nrecandidacy\nrecant\nrecantation\nrecanter\nrecantingly\nrecanvas\nrecap\nrecapacitate\nrecapitalization\nrecapitalize\nrecapitulate\nrecapitulation\nrecapitulationist\nrecapitulative\nrecapitulator\nrecapitulatory\nrecappable\nrecapper\nrecaption\nrecaptivate\nrecaptivation\nrecaptor\nrecapture\nrecapturer\nrecarbon\nrecarbonate\nrecarbonation\nrecarbonization\nrecarbonize\nrecarbonizer\nrecarburization\nrecarburize\nrecarburizer\nrecarnify\nrecarpet\nrecarriage\nrecarrier\nrecarry\nrecart\nrecarve\nrecase\nrecash\nrecasket\nrecast\nrecaster\nrecasting\nrecatalogue\nrecatch\nrecaulescence\nrecausticize\nrecce\nrecco\nreccy\nrecede\nrecedence\nrecedent\nreceder\nreceipt\nreceiptable\nreceiptless\nreceiptor\nreceipts\nreceivability\nreceivable\nreceivables\nreceivablness\nreceival\nreceive\nreceived\nreceivedness\nreceiver\nreceivership\nrecelebrate\nrecelebration\nrecement\nrecementation\nrecency\nrecense\nrecension\nrecensionist\nrecensor\nrecensure\nrecensus\nrecent\nrecenter\nrecently\nrecentness\nrecentralization\nrecentralize\nrecentre\nrecept\nreceptacle\nreceptacular\nreceptaculite\nReceptaculites\nreceptaculitid\nReceptaculitidae\nreceptaculitoid\nreceptaculum\nreceptant\nreceptibility\nreceptible\nreception\nreceptionism\nreceptionist\nreceptitious\nreceptive\nreceptively\nreceptiveness\nreceptivity\nreceptor\nreceptoral\nreceptorial\nreceptual\nreceptually\nrecercelee\nrecertificate\nrecertify\nrecess\nrecesser\nrecession\nrecessional\nrecessionary\nrecessive\nrecessively\nrecessiveness\nrecesslike\nrecessor\nRechabite\nRechabitism\nrechafe\nrechain\nrechal\nrechallenge\nrechamber\nrechange\nrechant\nrechaos\nrechar\nrecharge\nrecharter\nrechase\nrechaser\nrechasten\nrechaw\nrecheat\nrecheck\nrecheer\nrecherche\nrechew\nrechip\nrechisel\nrechoose\nrechristen\nrechuck\nrechurn\nrecidivation\nrecidive\nrecidivism\nrecidivist\nrecidivistic\nrecidivity\nrecidivous\nrecipe\nrecipiangle\nrecipience\nrecipiency\nrecipiend\nrecipiendary\nrecipient\nrecipiomotor\nreciprocable\nreciprocal\nreciprocality\nreciprocalize\nreciprocally\nreciprocalness\nreciprocate\nreciprocation\nreciprocative\nreciprocator\nreciprocatory\nreciprocitarian\nreciprocity\nrecircle\nrecirculate\nrecirculation\nrecision\nrecission\nrecissory\nrecitable\nrecital\nrecitalist\nrecitatif\nrecitation\nrecitationalism\nrecitationist\nrecitative\nrecitatively\nrecitativical\nrecitativo\nrecite\nrecitement\nreciter\nrecivilization\nrecivilize\nreck\nreckla\nreckless\nrecklessly\nrecklessness\nreckling\nreckon\nreckonable\nreckoner\nreckoning\nreclaim\nreclaimable\nreclaimableness\nreclaimably\nreclaimant\nreclaimer\nreclaimless\nreclaimment\nreclama\nreclamation\nreclang\nreclasp\nreclass\nreclassification\nreclassify\nreclean\nrecleaner\nrecleanse\nreclear\nreclearance\nreclimb\nreclinable\nreclinate\nreclinated\nreclination\nrecline\nrecliner\nreclose\nreclothe\nreclothing\nrecluse\nreclusely\nrecluseness\nreclusery\nreclusion\nreclusive\nreclusiveness\nreclusory\nrecoach\nrecoagulation\nrecoal\nrecoast\nrecoat\nrecock\nrecoct\nrecoction\nrecode\nrecodification\nrecodify\nrecogitate\nrecogitation\nrecognition\nrecognitive\nrecognitor\nrecognitory\nrecognizability\nrecognizable\nrecognizably\nrecognizance\nrecognizant\nrecognize\nrecognizedly\nrecognizee\nrecognizer\nrecognizingly\nrecognizor\nrecognosce\nrecohabitation\nrecoil\nrecoiler\nrecoilingly\nrecoilment\nrecoin\nrecoinage\nrecoiner\nrecoke\nrecollapse\nrecollate\nrecollation\nRecollect\nrecollectable\nrecollected\nrecollectedly\nrecollectedness\nrecollectible\nrecollection\nrecollective\nrecollectively\nrecollectiveness\nRecollet\nrecolonization\nrecolonize\nrecolor\nrecomb\nrecombination\nrecombine\nrecomember\nrecomfort\nrecommand\nrecommence\nrecommencement\nrecommencer\nrecommend\nrecommendability\nrecommendable\nrecommendableness\nrecommendably\nrecommendation\nrecommendatory\nrecommendee\nrecommender\nrecommission\nrecommit\nrecommitment\nrecommittal\nrecommunicate\nrecommunion\nrecompact\nrecompare\nrecomparison\nrecompass\nrecompel\nrecompensable\nrecompensate\nrecompensation\nrecompense\nrecompenser\nrecompensive\nrecompete\nrecompetition\nrecompetitor\nrecompilation\nrecompile\nrecompilement\nrecomplain\nrecomplaint\nrecomplete\nrecompletion\nrecompliance\nrecomplicate\nrecomplication\nrecomply\nrecompose\nrecomposer\nrecomposition\nrecompound\nrecomprehend\nrecomprehension\nrecompress\nrecompression\nrecomputation\nrecompute\nrecon\nreconceal\nreconcealment\nreconcede\nreconceive\nreconcentrate\nreconcentration\nreconception\nreconcert\nreconcession\nreconcilability\nreconcilable\nreconcilableness\nreconcilably\nreconcile\nreconcilee\nreconcileless\nreconcilement\nreconciler\nreconciliability\nreconciliable\nreconciliate\nreconciliation\nreconciliative\nreconciliator\nreconciliatory\nreconciling\nreconcilingly\nreconclude\nreconclusion\nreconcoct\nreconcrete\nreconcur\nrecondemn\nrecondemnation\nrecondensation\nrecondense\nrecondite\nreconditely\nreconditeness\nrecondition\nrecondole\nreconduct\nreconduction\nreconfer\nreconfess\nreconfide\nreconfine\nreconfinement\nreconfirm\nreconfirmation\nreconfiscate\nreconfiscation\nreconform\nreconfound\nreconfront\nreconfuse\nreconfusion\nrecongeal\nrecongelation\nrecongest\nrecongestion\nrecongratulate\nrecongratulation\nreconjoin\nreconjunction\nreconnaissance\nreconnect\nreconnection\nreconnoissance\nreconnoiter\nreconnoiterer\nreconnoiteringly\nreconnoitre\nreconnoitrer\nreconnoitringly\nreconquer\nreconqueror\nreconquest\nreconsecrate\nreconsecration\nreconsent\nreconsider\nreconsideration\nreconsign\nreconsignment\nreconsole\nreconsolidate\nreconsolidation\nreconstituent\nreconstitute\nreconstitution\nreconstruct\nreconstructed\nreconstruction\nreconstructional\nreconstructionary\nreconstructionist\nreconstructive\nreconstructiveness\nreconstructor\nreconstrue\nreconsult\nreconsultation\nrecontact\nrecontemplate\nrecontemplation\nrecontend\nrecontest\nrecontinuance\nrecontinue\nrecontract\nrecontraction\nrecontrast\nrecontribute\nrecontribution\nrecontrivance\nrecontrive\nrecontrol\nreconvalesce\nreconvalescence\nreconvalescent\nreconvene\nreconvention\nreconventional\nreconverge\nreconverse\nreconversion\nreconvert\nreconvertible\nreconvey\nreconveyance\nreconvict\nreconviction\nreconvince\nreconvoke\nrecook\nrecool\nrecooper\nrecopper\nrecopy\nrecopyright\nrecord\nrecordable\nrecordant\nrecordation\nrecordative\nrecordatively\nrecordatory\nrecordedly\nrecorder\nrecordership\nrecording\nrecordist\nrecordless\nrecork\nrecorporification\nrecorporify\nrecorrect\nrecorrection\nrecorrupt\nrecorruption\nrecostume\nrecounsel\nrecount\nrecountable\nrecountal\nrecountenance\nrecounter\nrecountless\nrecoup\nrecoupable\nrecouper\nrecouple\nrecoupment\nrecourse\nrecover\nrecoverability\nrecoverable\nrecoverableness\nrecoverance\nrecoveree\nrecoverer\nrecoveringly\nrecoverless\nrecoveror\nrecovery\nrecramp\nrecrank\nrecrate\nrecreance\nrecreancy\nrecreant\nrecreantly\nrecreantness\nrecrease\nrecreate\nrecreation\nrecreational\nrecreationist\nrecreative\nrecreatively\nrecreativeness\nrecreator\nrecreatory\nrecredit\nrecrement\nrecremental\nrecrementitial\nrecrementitious\nrecrescence\nrecrew\nrecriminate\nrecrimination\nrecriminative\nrecriminator\nrecriminatory\nrecriticize\nrecroon\nrecrop\nrecross\nrecrowd\nrecrown\nrecrucify\nrecrudency\nrecrudesce\nrecrudescence\nrecrudescency\nrecrudescent\nrecruit\nrecruitable\nrecruitage\nrecruital\nrecruitee\nrecruiter\nrecruithood\nrecruiting\nrecruitment\nrecruity\nrecrush\nrecrusher\nrecrystallization\nrecrystallize\nrect\nrecta\nrectal\nrectalgia\nrectally\nrectangle\nrectangled\nrectangular\nrectangularity\nrectangularly\nrectangularness\nrectangulate\nrectangulometer\nrectectomy\nrecti\nrectifiable\nrectification\nrectificative\nrectificator\nrectificatory\nrectified\nrectifier\nrectify\nrectigrade\nRectigraph\nrectilineal\nrectilineally\nrectilinear\nrectilinearism\nrectilinearity\nrectilinearly\nrectilinearness\nrectilineation\nrectinerved\nrection\nrectipetality\nrectirostral\nrectischiac\nrectiserial\nrectitic\nrectitis\nrectitude\nrectitudinous\nrecto\nrectoabdominal\nrectocele\nrectoclysis\nrectococcygeal\nrectococcygeus\nrectocolitic\nrectocolonic\nrectocystotomy\nrectogenital\nrectopexy\nrectoplasty\nrector\nrectoral\nrectorate\nrectoress\nrectorial\nrectorrhaphy\nrectorship\nrectory\nrectoscope\nrectoscopy\nrectosigmoid\nrectostenosis\nrectostomy\nrectotome\nrectotomy\nrectovaginal\nrectovesical\nrectress\nrectricial\nrectrix\nrectum\nrectus\nrecubant\nrecubate\nrecultivate\nrecultivation\nrecumbence\nrecumbency\nrecumbent\nrecumbently\nrecuperability\nrecuperance\nrecuperate\nrecuperation\nrecuperative\nrecuperativeness\nrecuperator\nrecuperatory\nrecur\nrecure\nrecureful\nrecureless\nrecurl\nrecurrence\nrecurrency\nrecurrent\nrecurrently\nrecurrer\nrecurring\nrecurringly\nrecurse\nrecursion\nrecursive\nrecurtain\nrecurvant\nrecurvate\nrecurvation\nrecurvature\nrecurve\nRecurvirostra\nrecurvirostral\nRecurvirostridae\nrecurvopatent\nrecurvoternate\nrecurvous\nrecusance\nrecusancy\nrecusant\nrecusation\nrecusative\nrecusator\nrecuse\nrecushion\nrecussion\nrecut\nrecycle\nRed\nred\nredact\nredaction\nredactional\nredactor\nredactorial\nredamage\nredamnation\nredan\nredare\nredargue\nredargution\nredargutive\nredargutory\nredarken\nredarn\nredart\nredate\nredaub\nredawn\nredback\nredbait\nredbeard\nredbelly\nredberry\nredbill\nredbird\nredbone\nredbreast\nredbrush\nredbuck\nredbud\nredcap\nredcoat\nredd\nredden\nreddendo\nreddendum\nreddening\nredder\nredding\nreddingite\nreddish\nreddishness\nreddition\nreddleman\nreddock\nreddsman\nreddy\nrede\nredeal\nredebate\nredebit\nredeceive\nredecide\nredecimate\nredecision\nredeck\nredeclaration\nredeclare\nredecline\nredecorate\nredecoration\nredecrease\nredecussate\nrededicate\nrededication\nrededicatory\nrededuct\nrededuction\nredeed\nredeem\nredeemability\nredeemable\nredeemableness\nredeemably\nredeemer\nredeemeress\nredeemership\nredeemless\nredefault\nredefeat\nredefecate\nredefer\nredefiance\nredefine\nredefinition\nredeflect\nredefy\nredeify\nredelay\nredelegate\nredelegation\nredeliberate\nredeliberation\nredeliver\nredeliverance\nredeliverer\nredelivery\nredemand\nredemandable\nredemise\nredemolish\nredemonstrate\nredemonstration\nredemptible\nRedemptine\nredemption\nredemptional\nredemptioner\nRedemptionist\nredemptionless\nredemptive\nredemptively\nredemptor\nredemptorial\nRedemptorist\nredemptory\nredemptress\nredemptrice\nredenigrate\nredeny\nredepend\nredeploy\nredeployment\nredeposit\nredeposition\nredepreciate\nredepreciation\nredeprive\nrederivation\nredescend\nredescent\nredescribe\nredescription\nredesertion\nredeserve\nredesign\nredesignate\nredesignation\nredesire\nredesirous\nredesman\nredespise\nredetect\nredetention\nredetermination\nredetermine\nredevelop\nredeveloper\nredevelopment\nredevise\nredevote\nredevotion\nredeye\nredfin\nredfinch\nredfish\nredfoot\nredhead\nredheaded\nredheadedly\nredheadedness\nredhearted\nredhibition\nredhibitory\nredhoop\nredia\nredictate\nredictation\nredient\nredifferentiate\nredifferentiation\nredig\nredigest\nredigestion\nrediminish\nredingote\nredintegrate\nredintegration\nredintegrative\nredintegrator\nredip\nredipper\nredirect\nredirection\nredisable\nredisappear\nredisburse\nredisbursement\nredischarge\nrediscipline\nrediscount\nrediscourage\nrediscover\nrediscoverer\nrediscovery\nrediscuss\nrediscussion\nredisembark\nredismiss\nredispatch\nredispel\nredisperse\nredisplay\nredispose\nredisposition\nredispute\nredissect\nredissection\nredisseise\nredisseisin\nredisseisor\nredisseize\nredisseizin\nredisseizor\nredissoluble\nredissolution\nredissolvable\nredissolve\nredistend\nredistill\nredistillation\nredistiller\nredistinguish\nredistrain\nredistrainer\nredistribute\nredistributer\nredistribution\nredistributive\nredistributor\nredistributory\nredistrict\nredisturb\nredive\nrediversion\nredivert\nredivertible\nredivide\nredivision\nredivive\nredivivous\nredivivus\nredivorce\nredivorcement\nredivulge\nredivulgence\nredjacket\nredknees\nredleg\nredlegs\nredly\nredmouth\nredness\nredo\nredock\nredocket\nredolence\nredolency\nredolent\nredolently\nredominate\nredondilla\nredoom\nredouble\nredoublement\nredoubler\nredoubling\nredoubt\nredoubtable\nredoubtableness\nredoubtably\nredoubted\nredound\nredowa\nredox\nredpoll\nredraft\nredrag\nredrape\nredraw\nredrawer\nredream\nredredge\nredress\nredressable\nredressal\nredresser\nredressible\nredressive\nredressless\nredressment\nredressor\nredrill\nredrive\nredroot\nredry\nredsear\nredshank\nredshirt\nredskin\nredstart\nredstreak\nredtab\nredtail\nredthroat\nredtop\nredub\nredubber\nreduce\nreduceable\nreduceableness\nreduced\nreducement\nreducent\nreducer\nreducibility\nreducible\nreducibleness\nreducibly\nreducing\nreduct\nreductant\nreductase\nreductibility\nreduction\nreductional\nreductionism\nreductionist\nreductionistic\nreductive\nreductively\nreductor\nreductorial\nredue\nRedunca\nredundance\nredundancy\nredundant\nredundantly\nreduplicate\nreduplication\nreduplicative\nreduplicatively\nreduplicatory\nreduplicature\nreduviid\nReduviidae\nreduvioid\nReduvius\nredux\nredward\nredware\nredweed\nredwing\nredwithe\nredwood\nredye\nRee\nree\nreechy\nreed\nreedbird\nreedbuck\nreedbush\nreeded\nreeden\nreeder\nreediemadeasy\nreedily\nreediness\nreeding\nreedish\nreedition\nreedless\nreedlike\nreedling\nreedmaker\nreedmaking\nreedman\nreedplot\nreedwork\nreedy\nreef\nreefable\nreefer\nreefing\nreefy\nreek\nreeker\nreekingly\nreeky\nreel\nreelable\nreeled\nreeler\nreelingly\nreelrall\nreem\nreeming\nreemish\nreen\nreenge\nreeper\nRees\nreese\nreeshle\nreesk\nreesle\nreest\nreester\nreestle\nreesty\nreet\nreetam\nreetle\nreeve\nreeveland\nreeveship\nref\nreface\nrefacilitate\nrefall\nrefallow\nrefan\nrefascinate\nrefascination\nrefashion\nrefashioner\nrefashionment\nrefasten\nrefathered\nrefavor\nrefect\nrefection\nrefectionary\nrefectioner\nrefective\nrefectorarian\nrefectorary\nrefectorer\nrefectorial\nrefectorian\nrefectory\nrefederate\nrefeed\nrefeel\nrefeign\nrefel\nrefence\nrefer\nreferable\nreferee\nreference\nreferenda\nreferendal\nreferendary\nreferendaryship\nreferendum\nreferent\nreferential\nreferentially\nreferently\nreferment\nreferral\nreferrer\nreferrible\nreferribleness\nrefertilization\nrefertilize\nrefetch\nrefight\nrefigure\nrefill\nrefillable\nrefilm\nrefilter\nrefinable\nrefinage\nrefinance\nrefind\nrefine\nrefined\nrefinedly\nrefinedness\nrefinement\nrefiner\nrefinery\nrefinger\nrefining\nrefiningly\nrefinish\nrefire\nrefit\nrefitment\nrefix\nrefixation\nrefixture\nreflag\nreflagellate\nreflame\nreflash\nreflate\nreflation\nreflationism\nreflect\nreflectance\nreflected\nreflectedly\nreflectedness\nreflectent\nreflecter\nreflectibility\nreflectible\nreflecting\nreflectingly\nreflection\nreflectional\nreflectionist\nreflectionless\nreflective\nreflectively\nreflectiveness\nreflectivity\nreflectometer\nreflectometry\nreflector\nreflectoscope\nrefledge\nreflee\nreflex\nreflexed\nreflexibility\nreflexible\nreflexism\nreflexive\nreflexively\nreflexiveness\nreflexivity\nreflexly\nreflexness\nreflexogenous\nreflexological\nreflexologist\nreflexology\nrefling\nrefloat\nrefloatation\nreflog\nreflood\nrefloor\nreflorescence\nreflorescent\nreflourish\nreflourishment\nreflow\nreflower\nrefluctuation\nrefluence\nrefluency\nrefluent\nreflush\nreflux\nrefluxed\nrefly\nrefocillate\nrefocillation\nrefocus\nrefold\nrefoment\nrefont\nrefool\nrefoot\nreforbid\nreforce\nreford\nreforecast\nreforest\nreforestation\nreforestization\nreforestize\nreforestment\nreforfeit\nreforfeiture\nreforge\nreforger\nreforget\nreforgive\nreform\nreformability\nreformable\nreformableness\nreformado\nreformandum\nReformati\nreformation\nreformational\nreformationary\nreformationist\nreformative\nreformatively\nreformatness\nreformatory\nreformed\nreformedly\nreformer\nreformeress\nreformingly\nreformism\nreformist\nreformistic\nreformproof\nreformulate\nreformulation\nreforsake\nrefortification\nrefortify\nreforward\nrefound\nrefoundation\nrefounder\nrefract\nrefractable\nrefracted\nrefractedly\nrefractedness\nrefractile\nrefractility\nrefracting\nrefraction\nrefractional\nrefractionate\nrefractionist\nrefractive\nrefractively\nrefractiveness\nrefractivity\nrefractometer\nrefractometric\nrefractometry\nrefractor\nrefractorily\nrefractoriness\nrefractory\nrefracture\nrefragability\nrefragable\nrefragableness\nrefrain\nrefrainer\nrefrainment\nreframe\nrefrangent\nrefrangibility\nrefrangible\nrefrangibleness\nrefreeze\nrefrenation\nrefrenzy\nrefresh\nrefreshant\nrefreshen\nrefreshener\nrefresher\nrefreshful\nrefreshfully\nrefreshing\nrefreshingly\nrefreshingness\nrefreshment\nrefrigerant\nrefrigerate\nrefrigerating\nrefrigeration\nrefrigerative\nrefrigerator\nrefrigeratory\nrefrighten\nrefringence\nrefringency\nrefringent\nrefront\nrefrustrate\nreft\nrefuel\nrefueling\nrefuge\nrefugee\nrefugeeism\nrefugeeship\nrefulge\nrefulgence\nrefulgency\nrefulgent\nrefulgently\nrefulgentness\nrefunction\nrefund\nrefunder\nrefundment\nrefurbish\nrefurbishment\nrefurl\nrefurnish\nrefurnishment\nrefusable\nrefusal\nrefuse\nrefuser\nrefusing\nrefusingly\nrefusion\nrefusive\nrefutability\nrefutable\nrefutably\nrefutal\nrefutation\nrefutative\nrefutatory\nrefute\nrefuter\nreg\nregain\nregainable\nregainer\nregainment\nregal\nregale\nRegalecidae\nRegalecus\nregalement\nregaler\nregalia\nregalian\nregalism\nregalist\nregality\nregalize\nregallop\nregally\nregalness\nregalvanization\nregalvanize\nregard\nregardable\nregardance\nregardancy\nregardant\nregarder\nregardful\nregardfully\nregardfulness\nregarding\nregardless\nregardlessly\nregardlessness\nregarment\nregarnish\nregarrison\nregather\nregatta\nregauge\nregelate\nregelation\nregency\nregeneracy\nregenerance\nregenerant\nregenerate\nregenerateness\nregeneration\nregenerative\nregeneratively\nregenerator\nregeneratory\nregeneratress\nregeneratrix\nregenesis\nregent\nregental\nregentess\nregentship\nregerminate\nregermination\nreges\nreget\nRegga\nReggie\nregia\nregicidal\nregicide\nregicidism\nregift\nregifuge\nregild\nregill\nregime\nregimen\nregimenal\nregiment\nregimental\nregimentaled\nregimentalled\nregimentally\nregimentals\nregimentary\nregimentation\nregiminal\nregin\nreginal\nReginald\nregion\nregional\nregionalism\nregionalist\nregionalistic\nregionalization\nregionalize\nregionally\nregionary\nregioned\nregister\nregistered\nregisterer\nregistership\nregistrability\nregistrable\nregistral\nregistrant\nregistrar\nregistrarship\nregistrary\nregistrate\nregistration\nregistrational\nregistrationist\nregistrator\nregistrer\nregistry\nregive\nregladden\nreglair\nreglaze\nregle\nreglement\nreglementary\nreglementation\nreglementist\nreglet\nreglorified\nregloss\nreglove\nreglow\nreglue\nregma\nregmacarp\nregnal\nregnancy\nregnant\nregnerable\nregolith\nregorge\nregovern\nregradation\nregrade\nregraduate\nregraduation\nregraft\nregrant\nregrasp\nregrass\nregrate\nregrater\nregratification\nregratify\nregrating\nregratingly\nregrator\nregratress\nregravel\nregrede\nregreen\nregreet\nregress\nregression\nregressionist\nregressive\nregressively\nregressiveness\nregressivity\nregressor\nregret\nregretful\nregretfully\nregretfulness\nregretless\nregrettable\nregrettableness\nregrettably\nregretter\nregrettingly\nregrind\nregrinder\nregrip\nregroup\nregroupment\nregrow\nregrowth\nreguarantee\nreguard\nreguardant\nreguide\nregula\nregulable\nregular\nRegulares\nRegularia\nregularity\nregularization\nregularize\nregularizer\nregularly\nregularness\nregulatable\nregulate\nregulated\nregulation\nregulationist\nregulative\nregulatively\nregulator\nregulatorship\nregulatory\nregulatress\nregulatris\nreguli\nreguline\nregulize\nRegulus\nregulus\nregur\nregurge\nregurgitant\nregurgitate\nregurgitation\nregush\nreh\nrehabilitate\nrehabilitation\nrehabilitative\nrehair\nrehale\nrehallow\nrehammer\nrehandicap\nrehandle\nrehandler\nrehandling\nrehang\nrehappen\nreharden\nreharm\nreharmonize\nreharness\nreharrow\nreharvest\nrehash\nrehaul\nrehazard\nrehead\nreheal\nreheap\nrehear\nrehearing\nrehearsal\nrehearse\nrehearser\nrehearten\nreheat\nreheater\nReheboth\nrehedge\nreheel\nreheighten\nRehoboam\nRehoboth\nRehobothan\nrehoe\nrehoist\nrehollow\nrehonor\nrehonour\nrehood\nrehook\nrehoop\nrehouse\nrehumanize\nrehumble\nrehumiliate\nrehumiliation\nrehung\nrehybridize\nrehydrate\nrehydration\nrehypothecate\nrehypothecation\nrehypothecator\nreichsgulden\nReichsland\nReichslander\nreichsmark\nreichspfennig\nreichstaler\nReid\nreidentification\nreidentify\nreif\nreification\nreify\nreign\nreignite\nreignition\nreignore\nreillume\nreilluminate\nreillumination\nreillumine\nreillustrate\nreillustration\nreim\nreimage\nreimagination\nreimagine\nreimbark\nreimbarkation\nreimbibe\nreimbody\nreimbursable\nreimburse\nreimbursement\nreimburser\nreimbush\nreimbushment\nreimkennar\nreimmerge\nreimmerse\nreimmersion\nreimmigrant\nreimmigration\nreimpact\nreimpark\nreimpart\nreimpatriate\nreimpatriation\nreimpel\nreimplant\nreimplantation\nreimply\nreimport\nreimportation\nreimportune\nreimpose\nreimposition\nreimposure\nreimpregnate\nreimpress\nreimpression\nreimprint\nreimprison\nreimprisonment\nreimprove\nreimprovement\nreimpulse\nrein\nreina\nreinability\nreinaugurate\nreinauguration\nreincapable\nreincarnadine\nreincarnate\nreincarnation\nreincarnationism\nreincarnationist\nreincense\nreincentive\nreincidence\nreincidency\nreincite\nreinclination\nreincline\nreinclude\nreinclusion\nreincorporate\nreincorporation\nreincrease\nreincrudate\nreincrudation\nreinculcate\nreincur\nreindebted\nreindebtedness\nreindeer\nreindependence\nreindicate\nreindication\nreindict\nreindictment\nreindifferent\nreindorse\nreinduce\nreinducement\nreindue\nreindulge\nreindulgence\nReiner\nreinette\nreinfect\nreinfection\nreinfectious\nreinfer\nreinfest\nreinfestation\nreinflame\nreinflate\nreinflation\nreinflict\nreinfliction\nreinfluence\nreinforce\nreinforcement\nreinforcer\nreinform\nreinfuse\nreinfusion\nreingraft\nreingratiate\nreingress\nreinhabit\nreinhabitation\nReinhard\nreinherit\nreinitiate\nreinitiation\nreinject\nreinjure\nreinless\nreinoculate\nreinoculation\nreinquire\nreinquiry\nreins\nreinsane\nreinsanity\nreinscribe\nreinsert\nreinsertion\nreinsist\nreinsman\nreinspect\nreinspection\nreinspector\nreinsphere\nreinspiration\nreinspire\nreinspirit\nreinstall\nreinstallation\nreinstallment\nreinstalment\nreinstate\nreinstatement\nreinstation\nreinstator\nreinstauration\nreinstil\nreinstill\nreinstitute\nreinstitution\nreinstruct\nreinstruction\nreinsult\nreinsurance\nreinsure\nreinsurer\nreintegrate\nreintegration\nreintend\nreinter\nreintercede\nreintercession\nreinterchange\nreinterest\nreinterfere\nreinterference\nreinterment\nreinterpret\nreinterpretation\nreinterrogate\nreinterrogation\nreinterrupt\nreinterruption\nreintervene\nreintervention\nreinterview\nreinthrone\nreintimate\nreintimation\nreintitule\nreintrench\nreintroduce\nreintroduction\nreintrude\nreintrusion\nreintuition\nreintuitive\nreinvade\nreinvasion\nreinvent\nreinvention\nreinventor\nreinversion\nreinvert\nreinvest\nreinvestigate\nreinvestigation\nreinvestiture\nreinvestment\nreinvigorate\nreinvigoration\nreinvitation\nreinvite\nreinvoice\nreinvolve\nReinwardtia\nreirrigate\nreirrigation\nreis\nreisolation\nreissuable\nreissue\nreissuement\nreissuer\nreit\nreitbok\nreitbuck\nreitemize\nreiter\nreiterable\nreiterance\nreiterant\nreiterate\nreiterated\nreiteratedly\nreiteratedness\nreiteration\nreiterative\nreiteratively\nreiver\nrejail\nRejang\nreject\nrejectable\nrejectableness\nrejectage\nrejectamenta\nrejecter\nrejectingly\nrejection\nrejective\nrejectment\nrejector\nrejerk\nrejoice\nrejoiceful\nrejoicement\nrejoicer\nrejoicing\nrejoicingly\nrejoin\nrejoinder\nrejolt\nrejourney\nrejudge\nrejumble\nrejunction\nrejustification\nrejustify\nrejuvenant\nrejuvenate\nrejuvenation\nrejuvenative\nrejuvenator\nrejuvenesce\nrejuvenescence\nrejuvenescent\nrejuvenize\nReki\nrekick\nrekill\nrekindle\nrekindlement\nrekindler\nreking\nrekiss\nreknit\nreknow\nrel\nrelabel\nrelace\nrelacquer\nrelade\nreladen\nrelais\nrelament\nrelamp\nreland\nrelap\nrelapper\nrelapsable\nrelapse\nrelapseproof\nrelapser\nrelapsing\nrelast\nrelaster\nrelata\nrelatability\nrelatable\nrelatch\nrelate\nrelated\nrelatedness\nrelater\nrelatinization\nrelation\nrelational\nrelationality\nrelationally\nrelationary\nrelationism\nrelationist\nrelationless\nrelationship\nrelatival\nrelative\nrelatively\nrelativeness\nrelativism\nrelativist\nrelativistic\nrelativity\nrelativization\nrelativize\nrelator\nrelatrix\nrelatum\nrelaunch\nrelax\nrelaxable\nrelaxant\nrelaxation\nrelaxative\nrelaxatory\nrelaxed\nrelaxedly\nrelaxedness\nrelaxer\nrelay\nrelayman\nrelbun\nrelead\nreleap\nrelearn\nreleasable\nrelease\nreleasee\nreleasement\nreleaser\nreleasor\nreleather\nrelection\nrelegable\nrelegate\nrelegation\nrelend\nrelent\nrelenting\nrelentingly\nrelentless\nrelentlessly\nrelentlessness\nrelentment\nrelessee\nrelessor\nrelet\nreletter\nrelevance\nrelevancy\nrelevant\nrelevantly\nrelevate\nrelevation\nrelevator\nrelevel\nrelevy\nreliability\nreliable\nreliableness\nreliably\nreliance\nreliant\nreliantly\nreliberate\nrelic\nrelicary\nrelicense\nrelick\nreliclike\nrelicmonger\nrelict\nrelicted\nreliction\nrelief\nreliefless\nrelier\nrelievable\nrelieve\nrelieved\nrelievedly\nreliever\nrelieving\nrelievingly\nrelievo\nrelift\nreligate\nreligation\nrelight\nrelightable\nrelighten\nrelightener\nrelighter\nreligion\nreligionary\nreligionate\nreligioner\nreligionism\nreligionist\nreligionistic\nreligionize\nreligionless\nreligiose\nreligiosity\nreligious\nreligiously\nreligiousness\nrelime\nrelimit\nrelimitation\nreline\nreliner\nrelink\nrelinquent\nrelinquish\nrelinquisher\nrelinquishment\nreliquaire\nreliquary\nreliquefy\nreliquiae\nreliquian\nreliquidate\nreliquidation\nreliquism\nrelish\nrelishable\nrelisher\nrelishing\nrelishingly\nrelishsome\nrelishy\nrelist\nrelisten\nrelitigate\nrelive\nRellyan\nRellyanism\nRellyanite\nreload\nreloan\nrelocable\nrelocate\nrelocation\nrelocator\nrelock\nrelodge\nrelook\nrelose\nrelost\nrelot\nrelove\nrelower\nrelucent\nreluct\nreluctance\nreluctancy\nreluctant\nreluctantly\nreluctate\nreluctation\nreluctivity\nrelume\nrelumine\nrely\nremade\nremagnetization\nremagnetize\nremagnification\nremagnify\nremail\nremain\nremainder\nremainderman\nremaindership\nremainer\nremains\nremaintain\nremaintenance\nremake\nremaker\nreman\nremanage\nremanagement\nremanation\nremancipate\nremancipation\nremand\nremandment\nremanence\nremanency\nremanent\nremanet\nremanipulate\nremanipulation\nremantle\nremanufacture\nremanure\nremap\nremarch\nremargin\nremark\nremarkability\nremarkable\nremarkableness\nremarkably\nremarkedly\nremarker\nremarket\nremarque\nremarriage\nremarry\nremarshal\nremask\nremass\nremast\nremasticate\nremastication\nrematch\nrematerialize\nremble\nRembrandt\nRembrandtesque\nRembrandtish\nRembrandtism\nremeant\nremeasure\nremeasurement\nremede\nremediable\nremediableness\nremediably\nremedial\nremedially\nremediation\nremediless\nremedilessly\nremedilessness\nremeditate\nremeditation\nremedy\nremeet\nremelt\nremember\nrememberability\nrememberable\nrememberably\nrememberer\nremembrance\nremembrancer\nremembrancership\nrememorize\nremenace\nremend\nremerge\nremetal\nremex\nRemi\nremica\nremicate\nremication\nremicle\nremiform\nremigate\nremigation\nremiges\nremigial\nremigrant\nremigrate\nremigration\nRemijia\nremilitarization\nremilitarize\nremill\nremimic\nremind\nremindal\nreminder\nremindful\nremindingly\nremineralization\nremineralize\nremingle\nreminisce\nreminiscence\nreminiscenceful\nreminiscencer\nreminiscency\nreminiscent\nreminiscential\nreminiscentially\nreminiscently\nreminiscer\nreminiscitory\nremint\nremiped\nremirror\nremise\nremisrepresent\nremisrepresentation\nremiss\nremissful\nremissibility\nremissible\nremissibleness\nremission\nremissive\nremissively\nremissiveness\nremissly\nremissness\nremissory\nremisunderstand\nremit\nremitment\nremittable\nremittal\nremittance\nremittancer\nremittee\nremittence\nremittency\nremittent\nremittently\nremitter\nremittitur\nremittor\nremix\nremixture\nremnant\nremnantal\nremobilization\nremobilize\nRemoboth\nremock\nremodel\nremodeler\nremodeller\nremodelment\nremodification\nremodify\nremolade\nremold\nremollient\nremonetization\nremonetize\nremonstrance\nremonstrant\nremonstrantly\nremonstrate\nremonstrating\nremonstratingly\nremonstration\nremonstrative\nremonstratively\nremonstrator\nremonstratory\nremontado\nremontant\nremontoir\nremop\nremora\nremord\nremorse\nremorseful\nremorsefully\nremorsefulness\nremorseless\nremorselessly\nremorselessness\nremorseproof\nremortgage\nremote\nremotely\nremoteness\nremotion\nremotive\nremould\nremount\nremovability\nremovable\nremovableness\nremovably\nremoval\nremove\nremoved\nremovedly\nremovedness\nremovement\nremover\nremoving\nremultiplication\nremultiply\nremunerability\nremunerable\nremunerably\nremunerate\nremuneration\nremunerative\nremuneratively\nremunerativeness\nremunerator\nremuneratory\nremurmur\nRemus\nremuster\nremutation\nrenable\nrenably\nrenail\nRenaissance\nrenaissance\nRenaissancist\nRenaissant\nrenal\nrename\nRenardine\nrenascence\nrenascency\nrenascent\nrenascible\nrenascibleness\nrenature\nrenavigate\nrenavigation\nrencontre\nrencounter\nrenculus\nrend\nrender\nrenderable\nrenderer\nrendering\nrenderset\nrendezvous\nrendibility\nrendible\nrendition\nrendlewood\nrendrock\nrendzina\nreneague\nRenealmia\nrenecessitate\nreneg\nrenegade\nrenegadism\nrenegado\nrenegation\nrenege\nreneger\nreneglect\nrenegotiable\nrenegotiate\nrenegotiation\nrenegotiations\nrenegue\nrenerve\nrenes\nrenet\nrenew\nrenewability\nrenewable\nrenewably\nrenewal\nrenewedly\nrenewedness\nrenewer\nrenewment\nrenicardiac\nrenickel\nrenidification\nrenidify\nreniform\nRenilla\nRenillidae\nrenin\nrenipericardial\nreniportal\nrenipuncture\nrenish\nrenishly\nrenitence\nrenitency\nrenitent\nrenk\nrenky\nrenne\nrennet\nrenneting\nrennin\nrenniogen\nrenocutaneous\nrenogastric\nrenography\nrenointestinal\nrenominate\nrenomination\nrenopericardial\nrenopulmonary\nrenormalize\nrenotation\nrenotice\nrenotification\nrenotify\nrenounce\nrenounceable\nrenouncement\nrenouncer\nrenourish\nrenovate\nrenovater\nrenovatingly\nrenovation\nrenovative\nrenovator\nrenovatory\nrenovize\nrenown\nrenowned\nrenownedly\nrenownedness\nrenowner\nrenownful\nrenownless\nrensselaerite\nrent\nrentability\nrentable\nrentage\nrental\nrentaler\nrentaller\nrented\nrentee\nrenter\nrentless\nrentrant\nrentrayeuse\nRenu\nrenumber\nrenumerate\nrenumeration\nrenunciable\nrenunciance\nrenunciant\nrenunciate\nrenunciation\nrenunciative\nrenunciator\nrenunciatory\nrenunculus\nrenverse\nrenvoi\nrenvoy\nreobject\nreobjectivization\nreobjectivize\nreobligate\nreobligation\nreoblige\nreobscure\nreobservation\nreobserve\nreobtain\nreobtainable\nreobtainment\nreoccasion\nreoccupation\nreoccupy\nreoccur\nreoccurrence\nreoffend\nreoffense\nreoffer\nreoffset\nreoil\nreometer\nreomission\nreomit\nreopen\nreoperate\nreoperation\nreoppose\nreopposition\nreoppress\nreoppression\nreorchestrate\nreordain\nreorder\nreordinate\nreordination\nreorganization\nreorganizationist\nreorganize\nreorganizer\nreorient\nreorientation\nreornament\nreoutfit\nreoutline\nreoutput\nreoutrage\nreovercharge\nreoverflow\nreovertake\nreoverwork\nreown\nreoxidation\nreoxidize\nreoxygenate\nreoxygenize\nrep\nrepace\nrepacification\nrepacify\nrepack\nrepackage\nrepacker\nrepaganization\nrepaganize\nrepaganizer\nrepage\nrepaint\nrepair\nrepairable\nrepairableness\nrepairer\nrepairman\nrepale\nrepand\nrepandly\nrepandodentate\nrepandodenticulate\nrepandolobate\nrepandous\nrepandousness\nrepanel\nrepaper\nreparability\nreparable\nreparably\nreparagraph\nreparate\nreparation\nreparative\nreparatory\nrepark\nrepartable\nrepartake\nrepartee\nreparticipate\nreparticipation\nrepartition\nrepartitionable\nrepass\nrepassable\nrepassage\nrepasser\nrepast\nrepaste\nrepasture\nrepatch\nrepatency\nrepatent\nrepatriable\nrepatriate\nrepatriation\nrepatronize\nrepattern\nrepave\nrepavement\nrepawn\nrepay\nrepayable\nrepayal\nrepaying\nrepayment\nrepeal\nrepealability\nrepealable\nrepealableness\nrepealer\nrepealist\nrepealless\nrepeat\nrepeatability\nrepeatable\nrepeatal\nrepeated\nrepeatedly\nrepeater\nrepeg\nrepel\nrepellance\nrepellant\nrepellence\nrepellency\nrepellent\nrepellently\nrepeller\nrepelling\nrepellingly\nrepellingness\nrepen\nrepenetrate\nrepension\nrepent\nrepentable\nrepentance\nrepentant\nrepentantly\nrepenter\nrepentingly\nrepeople\nreperceive\nrepercept\nreperception\nrepercolation\nrepercuss\nrepercussion\nrepercussive\nrepercussively\nrepercussiveness\nrepercutient\nreperform\nreperformance\nreperfume\nreperible\nrepermission\nrepermit\nreperplex\nrepersonalization\nrepersonalize\nrepersuade\nrepersuasion\nrepertoire\nrepertorial\nrepertorily\nrepertorium\nrepertory\nreperusal\nreperuse\nrepetend\nrepetition\nrepetitional\nrepetitionary\nrepetitious\nrepetitiously\nrepetitiousness\nrepetitive\nrepetitively\nrepetitiveness\nrepetitory\nrepetticoat\nrepew\nRephael\nrephase\nrephonate\nrephosphorization\nrephosphorize\nrephotograph\nrephrase\nrepic\nrepick\nrepicture\nrepiece\nrepile\nrepin\nrepine\nrepineful\nrepinement\nrepiner\nrepiningly\nrepipe\nrepique\nrepitch\nrepkie\nreplace\nreplaceability\nreplaceable\nreplacement\nreplacer\nreplait\nreplan\nreplane\nreplant\nreplantable\nreplantation\nreplanter\nreplaster\nreplate\nreplay\nreplead\nrepleader\nrepleat\nrepledge\nrepledger\nreplenish\nreplenisher\nreplenishingly\nreplenishment\nreplete\nrepletely\nrepleteness\nrepletion\nrepletive\nrepletively\nrepletory\nrepleviable\nreplevin\nreplevisable\nreplevisor\nreplevy\nrepliant\nreplica\nreplicate\nreplicated\nreplicatile\nreplication\nreplicative\nreplicatively\nreplicatory\nreplier\nreplight\nreplod\nreplot\nreplotment\nreplotter\nreplough\nreplow\nreplum\nreplume\nreplunder\nreplunge\nreply\nreplyingly\nrepocket\nrepoint\nrepolish\nrepoll\nrepollute\nrepolon\nrepolymerization\nrepolymerize\nreponder\nrepone\nrepope\nrepopulate\nrepopulation\nreport\nreportable\nreportage\nreportedly\nreporter\nreporteress\nreporterism\nreportership\nreportingly\nreportion\nreportorial\nreportorially\nreposal\nrepose\nreposed\nreposedly\nreposedness\nreposeful\nreposefully\nreposefulness\nreposer\nreposit\nrepositary\nreposition\nrepositor\nrepository\nrepossess\nrepossession\nrepossessor\nrepost\nrepostpone\nrepot\nrepound\nrepour\nrepowder\nrepp\nrepped\nrepractice\nrepray\nrepreach\nreprecipitate\nreprecipitation\nrepredict\nreprefer\nreprehend\nreprehendable\nreprehendatory\nreprehender\nreprehensibility\nreprehensible\nreprehensibleness\nreprehensibly\nreprehension\nreprehensive\nreprehensively\nreprehensory\nrepreparation\nreprepare\nreprescribe\nrepresent\nrepresentability\nrepresentable\nrepresentamen\nrepresentant\nrepresentation\nrepresentational\nrepresentationalism\nrepresentationalist\nrepresentationary\nrepresentationism\nrepresentationist\nrepresentative\nrepresentatively\nrepresentativeness\nrepresentativeship\nrepresentativity\nrepresenter\nrepresentment\nrepreside\nrepress\nrepressed\nrepressedly\nrepresser\nrepressible\nrepressibly\nrepression\nrepressionary\nrepressionist\nrepressive\nrepressively\nrepressiveness\nrepressment\nrepressor\nrepressory\nrepressure\nreprice\nreprieval\nreprieve\nrepriever\nreprimand\nreprimander\nreprimanding\nreprimandingly\nreprime\nreprimer\nreprint\nreprinter\nreprisal\nreprisalist\nreprise\nrepristinate\nrepristination\nreprivatization\nreprivatize\nreprivilege\nreproach\nreproachable\nreproachableness\nreproachably\nreproacher\nreproachful\nreproachfully\nreproachfulness\nreproachingly\nreproachless\nreproachlessness\nreprobacy\nreprobance\nreprobate\nreprobateness\nreprobater\nreprobation\nreprobationary\nreprobationer\nreprobative\nreprobatively\nreprobator\nreprobatory\nreproceed\nreprocess\nreproclaim\nreproclamation\nreprocurable\nreprocure\nreproduce\nreproduceable\nreproducer\nreproducibility\nreproducible\nreproduction\nreproductionist\nreproductive\nreproductively\nreproductiveness\nreproductivity\nreproductory\nreprofane\nreprofess\nreprohibit\nrepromise\nrepromulgate\nrepromulgation\nrepronounce\nrepronunciation\nreproof\nreproofless\nrepropagate\nrepropitiate\nrepropitiation\nreproportion\nreproposal\nrepropose\nreprosecute\nreprosecution\nreprosper\nreprotect\nreprotection\nreprotest\nreprovable\nreprovableness\nreprovably\nreproval\nreprove\nreprover\nreprovide\nreprovingly\nreprovision\nreprovocation\nreprovoke\nreprune\nreps\nreptant\nreptatorial\nreptatory\nreptile\nreptiledom\nreptilelike\nreptilferous\nReptilia\nreptilian\nreptiliary\nreptiliform\nreptilious\nreptiliousness\nreptilism\nreptility\nreptilivorous\nreptiloid\nrepublic\nrepublican\nrepublicanism\nrepublicanization\nrepublicanize\nrepublicanizer\nrepublication\nrepublish\nrepublisher\nrepublishment\nrepuddle\nrepudiable\nrepudiate\nrepudiation\nrepudiationist\nrepudiative\nrepudiator\nrepudiatory\nrepuff\nrepugn\nrepugnable\nrepugnance\nrepugnancy\nrepugnant\nrepugnantly\nrepugnantness\nrepugnate\nrepugnatorial\nrepugner\nrepullulate\nrepullulation\nrepullulative\nrepullulescent\nrepulpit\nrepulse\nrepulseless\nrepulseproof\nrepulser\nrepulsion\nrepulsive\nrepulsively\nrepulsiveness\nrepulsory\nrepulverize\nrepump\nrepunish\nrepunishment\nrepurchase\nrepurchaser\nrepurge\nrepurification\nrepurify\nrepurple\nrepurpose\nrepursue\nrepursuit\nreputability\nreputable\nreputableness\nreputably\nreputation\nreputationless\nreputative\nreputatively\nrepute\nreputed\nreputedly\nreputeless\nrequalification\nrequalify\nrequarantine\nrequeen\nrequench\nrequest\nrequester\nrequestion\nrequiem\nRequienia\nrequiescence\nrequin\nrequirable\nrequire\nrequirement\nrequirer\nrequisite\nrequisitely\nrequisiteness\nrequisition\nrequisitionary\nrequisitioner\nrequisitionist\nrequisitor\nrequisitorial\nrequisitory\nrequit\nrequitable\nrequital\nrequitative\nrequite\nrequiteful\nrequitement\nrequiter\nrequiz\nrequotation\nrequote\nrerack\nreracker\nreradiation\nrerail\nreraise\nrerake\nrerank\nrerate\nreread\nrereader\nrerebrace\nreredos\nreree\nrereel\nrereeve\nrerefief\nreregister\nreregistration\nreregulate\nreregulation\nrereign\nreremouse\nrerent\nrerental\nreresupper\nrerig\nrering\nrerise\nrerival\nrerivet\nrerob\nrerobe\nreroll\nreroof\nreroot\nrerope\nreroute\nrerow\nreroyalize\nrerub\nrerummage\nrerun\nresaca\nresack\nresacrifice\nresaddle\nresail\nresalable\nresale\nresalt\nresalutation\nresalute\nresalvage\nresample\nresanctify\nresanction\nresatisfaction\nresatisfy\nresaw\nresawer\nresawyer\nresay\nresazurin\nrescan\nreschedule\nrescind\nrescindable\nrescinder\nrescindment\nrescissible\nrescission\nrescissory\nrescore\nrescramble\nrescratch\nrescribe\nrescript\nrescription\nrescriptive\nrescriptively\nrescrub\nrescuable\nrescue\nrescueless\nrescuer\nreseal\nreseam\nresearch\nresearcher\nresearchful\nresearchist\nreseat\nresecrete\nresecretion\nresect\nresection\nresectional\nReseda\nreseda\nResedaceae\nresedaceous\nresee\nreseed\nreseek\nresegment\nresegmentation\nreseise\nreseiser\nreseize\nreseizer\nreseizure\nreselect\nreselection\nreself\nresell\nreseller\nresemblable\nresemblance\nresemblant\nresemble\nresembler\nresemblingly\nreseminate\nresend\nresene\nresensation\nresensitization\nresensitize\nresent\nresentationally\nresentence\nresenter\nresentful\nresentfullness\nresentfully\nresentience\nresentingly\nresentless\nresentment\nresepulcher\nresequent\nresequester\nresequestration\nreserene\nreservable\nreserval\nreservation\nreservationist\nreservatory\nreserve\nreserved\nreservedly\nreservedness\nreservee\nreserveful\nreserveless\nreserver\nreservery\nreservice\nreservist\nreservoir\nreservor\nreset\nresettable\nresetter\nresettle\nresettlement\nresever\nresew\nresex\nresh\nreshake\nreshape\nreshare\nresharpen\nreshave\nreshear\nreshearer\nresheathe\nreshelve\nreshift\nreshine\nreshingle\nreship\nreshipment\nreshipper\nreshoe\nreshoot\nreshoulder\nreshovel\nreshower\nreshrine\nreshuffle\nreshun\nreshunt\nreshut\nreshuttle\nresiccate\nreside\nresidence\nresidencer\nresidency\nresident\nresidental\nresidenter\nresidential\nresidentiality\nresidentially\nresidentiary\nresidentiaryship\nresidentship\nresider\nresidua\nresidual\nresiduary\nresiduation\nresidue\nresiduent\nresiduous\nresiduum\nresift\nresigh\nresign\nresignal\nresignatary\nresignation\nresignationism\nresigned\nresignedly\nresignedness\nresignee\nresigner\nresignful\nresignment\nresile\nresilement\nresilial\nresiliate\nresilience\nresiliency\nresilient\nresilifer\nresiliometer\nresilition\nresilium\nresilver\nresin\nresina\nresinaceous\nresinate\nresinbush\nresiner\nresinfiable\nresing\nresinic\nresiniferous\nresinification\nresinifluous\nresiniform\nresinify\nresinize\nresink\nresinlike\nresinoelectric\nresinoextractive\nresinogenous\nresinoid\nresinol\nresinolic\nresinophore\nresinosis\nresinous\nresinously\nresinousness\nresinovitreous\nresiny\nresipiscence\nresipiscent\nresist\nresistability\nresistable\nresistableness\nresistance\nresistant\nresistantly\nresister\nresistful\nresistibility\nresistible\nresistibleness\nresistibly\nresisting\nresistingly\nresistive\nresistively\nresistiveness\nresistivity\nresistless\nresistlessly\nresistlessness\nresistor\nresitting\nresize\nresizer\nresketch\nreskin\nreslash\nreslate\nreslay\nreslide\nreslot\nresmell\nresmelt\nresmile\nresmooth\nresnap\nresnatch\nresnatron\nresnub\nresoak\nresoap\nresoften\nresoil\nresojourn\nresolder\nresole\nresolemnize\nresolicit\nresolidification\nresolidify\nresolubility\nresoluble\nresolubleness\nresolute\nresolutely\nresoluteness\nresolution\nresolutioner\nresolutionist\nresolutory\nresolvability\nresolvable\nresolvableness\nresolvancy\nresolve\nresolved\nresolvedly\nresolvedness\nresolvent\nresolver\nresolvible\nresonance\nresonancy\nresonant\nresonantly\nresonate\nresonator\nresonatory\nresoothe\nresorb\nresorbence\nresorbent\nresorcin\nresorcine\nresorcinism\nresorcinol\nresorcinolphthalein\nresorcinum\nresorcylic\nresorption\nresorptive\nresort\nresorter\nresorufin\nresought\nresound\nresounder\nresounding\nresoundingly\nresource\nresourceful\nresourcefully\nresourcefulness\nresourceless\nresourcelessness\nresoutive\nresow\nresp\nrespace\nrespade\nrespan\nrespangle\nresparkle\nrespeak\nrespect\nrespectability\nrespectabilize\nrespectable\nrespectableness\nrespectably\nrespectant\nrespecter\nrespectful\nrespectfully\nrespectfulness\nrespecting\nrespective\nrespectively\nrespectiveness\nrespectless\nrespectlessly\nrespectlessness\nrespectworthy\nrespell\nrespersive\nrespin\nrespirability\nrespirable\nrespirableness\nrespiration\nrespirational\nrespirative\nrespirator\nrespiratored\nrespiratorium\nrespiratory\nrespire\nrespirit\nrespirometer\nrespite\nrespiteless\nresplend\nresplendence\nresplendency\nresplendent\nresplendently\nresplice\nresplit\nrespoke\nrespond\nresponde\nrespondence\nrespondency\nrespondent\nrespondentia\nresponder\nresponsal\nresponsary\nresponse\nresponseless\nresponser\nresponsibility\nresponsible\nresponsibleness\nresponsibly\nresponsion\nresponsive\nresponsively\nresponsiveness\nresponsivity\nresponsorial\nresponsory\nrespot\nrespray\nrespread\nrespring\nresprout\nrespue\nresquare\nresqueak\nressaidar\nressala\nressaldar\nressaut\nrest\nrestable\nrestack\nrestaff\nrestain\nrestainable\nrestake\nrestamp\nrestandardization\nrestandardize\nrestant\nrestart\nrestate\nrestatement\nrestaur\nrestaurant\nrestaurate\nrestaurateur\nrestauration\nrestbalk\nresteal\nresteel\nresteep\nrestem\nrestep\nrester\nresterilize\nrestes\nrestful\nrestfully\nrestfulness\nrestharrow\nresthouse\nRestiaceae\nrestiaceous\nrestiad\nrestibrachium\nrestiff\nrestiffen\nrestiffener\nrestiffness\nrestifle\nrestiform\nrestigmatize\nrestimulate\nrestimulation\nresting\nrestingly\nRestio\nRestionaceae\nrestionaceous\nrestipulate\nrestipulation\nrestipulatory\nrestir\nrestis\nrestitch\nrestitute\nrestitution\nrestitutionism\nrestitutionist\nrestitutive\nrestitutor\nrestitutory\nrestive\nrestively\nrestiveness\nrestless\nrestlessly\nrestlessness\nrestock\nrestopper\nrestorable\nrestorableness\nrestoral\nrestoration\nrestorationer\nrestorationism\nrestorationist\nrestorative\nrestoratively\nrestorativeness\nrestorator\nrestoratory\nrestore\nrestorer\nrestow\nrestowal\nrestproof\nrestraighten\nrestrain\nrestrainability\nrestrained\nrestrainedly\nrestrainedness\nrestrainer\nrestraining\nrestrainingly\nrestraint\nrestraintful\nrestrap\nrestratification\nrestream\nrestrengthen\nrestress\nrestretch\nrestrict\nrestricted\nrestrictedly\nrestrictedness\nrestriction\nrestrictionary\nrestrictionist\nrestrictive\nrestrictively\nrestrictiveness\nrestrike\nrestring\nrestringe\nrestringency\nrestringent\nrestrip\nrestrive\nrestroke\nrestudy\nrestuff\nrestward\nrestwards\nresty\nrestyle\nresubject\nresubjection\nresubjugate\nresublimation\nresublime\nresubmerge\nresubmission\nresubmit\nresubordinate\nresubscribe\nresubscriber\nresubscription\nresubstitute\nresubstitution\nresucceed\nresuck\nresudation\nresue\nresuffer\nresufferance\nresuggest\nresuggestion\nresuing\nresuit\nresult\nresultance\nresultancy\nresultant\nresultantly\nresultative\nresultful\nresultfully\nresulting\nresultingly\nresultive\nresultless\nresultlessly\nresultlessness\nresumability\nresumable\nresume\nresumer\nresummon\nresummons\nresumption\nresumptive\nresumptively\nresun\nresup\nresuperheat\nresupervise\nresupinate\nresupinated\nresupination\nresupine\nresupply\nresupport\nresuppose\nresupposition\nresuppress\nresuppression\nresurface\nresurge\nresurgence\nresurgency\nresurgent\nresurprise\nresurrect\nresurrectible\nresurrection\nresurrectional\nresurrectionary\nresurrectioner\nresurrectioning\nresurrectionism\nresurrectionist\nresurrectionize\nresurrective\nresurrector\nresurrender\nresurround\nresurvey\nresuscitable\nresuscitant\nresuscitate\nresuscitation\nresuscitative\nresuscitator\nresuspect\nresuspend\nresuspension\nreswage\nreswallow\nresward\nreswarm\nreswear\nresweat\nresweep\nreswell\nreswill\nreswim\nresyllabification\nresymbolization\nresymbolize\nresynthesis\nresynthesize\nret\nretable\nretack\nretackle\nretag\nretail\nretailer\nretailment\nretailor\nretain\nretainability\nretainable\nretainableness\nretainal\nretainder\nretainer\nretainership\nretaining\nretake\nretaker\nretaliate\nretaliation\nretaliationist\nretaliative\nretaliator\nretaliatory\nretalk\nretama\nretame\nretan\nretanner\nretape\nretard\nretardance\nretardant\nretardate\nretardation\nretardative\nretardatory\nretarded\nretardence\nretardent\nretarder\nretarding\nretardingly\nretardive\nretardment\nretardure\nretare\nretariff\nretaste\nretation\nretattle\nretax\nretaxation\nretch\nreteach\nretecious\nretelegraph\nretelephone\nretell\nretelling\nretem\nretemper\nretempt\nretemptation\nretenant\nretender\nretene\nretent\nretention\nretentionist\nretentive\nretentively\nretentiveness\nretentivity\nretentor\nRetepora\nretepore\nReteporidae\nretest\nretexture\nrethank\nrethatch\nrethaw\nrethe\nretheness\nrethicken\nrethink\nrethrash\nrethread\nrethreaten\nrethresh\nrethresher\nrethrill\nrethrive\nrethrone\nrethrow\nrethrust\nrethunder\nretia\nretial\nRetiariae\nretiarian\nretiarius\nretiary\nreticella\nreticello\nreticence\nreticency\nreticent\nreticently\nreticket\nreticle\nreticula\nreticular\nReticularia\nreticularian\nreticularly\nreticulary\nreticulate\nreticulated\nreticulately\nreticulation\nreticulatocoalescent\nreticulatogranulate\nreticulatoramose\nreticulatovenose\nreticule\nreticuled\nreticulin\nreticulitis\nreticulocyte\nreticulocytosis\nreticuloramose\nReticulosa\nreticulose\nreticulovenose\nreticulum\nretie\nretier\nretiform\nretighten\nretile\nretill\nretimber\nretime\nretin\nretina\nretinacular\nretinaculate\nretinaculum\nretinal\nretinalite\nretinasphalt\nretinasphaltum\nretincture\nretinene\nretinerved\nretinian\nretinispora\nretinite\nretinitis\nretinize\nretinker\nretinoblastoma\nretinochorioid\nretinochorioidal\nretinochorioiditis\nretinoid\nretinol\nretinopapilitis\nretinophoral\nretinophore\nretinoscope\nretinoscopic\nretinoscopically\nretinoscopist\nretinoscopy\nRetinospora\nretinue\nretinula\nretinular\nretinule\nretip\nretiracied\nretiracy\nretirade\nretiral\nretire\nretired\nretiredly\nretiredness\nretirement\nretirer\nretiring\nretiringly\nretiringness\nretistene\nretoast\nretold\nretolerate\nretoleration\nretomb\nretonation\nretook\nretool\nretooth\nretoother\nretort\nretortable\nretorted\nretorter\nretortion\nretortive\nretorture\nretoss\nretotal\nretouch\nretoucher\nretouching\nretouchment\nretour\nretourable\nretrace\nretraceable\nretracement\nretrack\nretract\nretractability\nretractable\nretractation\nretracted\nretractibility\nretractible\nretractile\nretractility\nretraction\nretractive\nretractively\nretractiveness\nretractor\nretrad\nretrade\nretradition\nretrahent\nretrain\nretral\nretrally\nretramp\nretrample\nretranquilize\nretranscribe\nretranscription\nretransfer\nretransference\nretransfigure\nretransform\nretransformation\nretransfuse\nretransit\nretranslate\nretranslation\nretransmission\nretransmissive\nretransmit\nretransmute\nretransplant\nretransport\nretransportation\nretravel\nretraverse\nretraxit\nretread\nretreat\nretreatal\nretreatant\nretreater\nretreatful\nretreating\nretreatingness\nretreative\nretreatment\nretree\nretrench\nretrenchable\nretrencher\nretrenchment\nretrial\nretribute\nretribution\nretributive\nretributively\nretributor\nretributory\nretricked\nretrievability\nretrievable\nretrievableness\nretrievably\nretrieval\nretrieve\nretrieveless\nretrievement\nretriever\nretrieverish\nretrim\nretrimmer\nretrip\nretroact\nretroaction\nretroactive\nretroactively\nretroactivity\nretroalveolar\nretroauricular\nretrobronchial\nretrobuccal\nretrobulbar\nretrocaecal\nretrocardiac\nretrocecal\nretrocede\nretrocedence\nretrocedent\nretrocervical\nretrocession\nretrocessional\nretrocessionist\nretrocessive\nretrochoir\nretroclavicular\nretroclusion\nretrocognition\nretrocognitive\nretrocolic\nretroconsciousness\nretrocopulant\nretrocopulation\nretrocostal\nretrocouple\nretrocoupler\nretrocurved\nretrodate\nretrodeviation\nretrodisplacement\nretroduction\nretrodural\nretroesophageal\nretroflected\nretroflection\nretroflex\nretroflexed\nretroflexion\nretroflux\nretroform\nretrofract\nretrofracted\nretrofrontal\nretrogastric\nretrogenerative\nretrogradation\nretrogradatory\nretrograde\nretrogradely\nretrogradient\nretrogradingly\nretrogradism\nretrogradist\nretrogress\nretrogression\nretrogressionist\nretrogressive\nretrogressively\nretrohepatic\nretroinfection\nretroinsular\nretroiridian\nretroject\nretrojection\nretrojugular\nretrolabyrinthine\nretrolaryngeal\nretrolingual\nretrolocation\nretromammary\nretromammillary\nretromandibular\nretromastoid\nretromaxillary\nretromigration\nretromingent\nretromingently\nretromorphosed\nretromorphosis\nretronasal\nretroperitoneal\nretroperitoneally\nretropharyngeal\nretropharyngitis\nretroplacental\nretroplexed\nretroposed\nretroposition\nretropresbyteral\nretropubic\nretropulmonary\nretropulsion\nretropulsive\nretroreception\nretrorectal\nretroreflective\nretrorenal\nretrorse\nretrorsely\nretroserrate\nretroserrulate\nretrospect\nretrospection\nretrospective\nretrospectively\nretrospectiveness\nretrospectivity\nretrosplenic\nretrostalsis\nretrostaltic\nretrosternal\nretrosusception\nretrot\nretrotarsal\nretrotemporal\nretrothyroid\nretrotracheal\nretrotransfer\nretrotransference\nretrotympanic\nretrousse\nretrovaccinate\nretrovaccination\nretrovaccine\nretroverse\nretroversion\nretrovert\nretrovision\nretroxiphoid\nretrude\nretrue\nretrusible\nretrusion\nretrust\nretry\nretted\nretter\nrettery\nretting\nrettory\nretube\nretuck\nretumble\nretumescence\nretune\nreturban\nreturf\nreturfer\nreturn\nreturnability\nreturnable\nreturned\nreturner\nreturnless\nreturnlessly\nretuse\nretwine\nretwist\nretying\nretype\nretzian\nReub\nReuben\nReubenites\nReuchlinian\nReuchlinism\nReuel\nreundercut\nreundergo\nreundertake\nreundulate\nreundulation\nreune\nreunfold\nreunification\nreunify\nreunion\nreunionism\nreunionist\nreunionistic\nreunitable\nreunite\nreunitedly\nreuniter\nreunition\nreunitive\nreunpack\nreuphold\nreupholster\nreuplift\nreurge\nreuse\nreutilization\nreutilize\nreutter\nreutterance\nrev\nrevacate\nrevaccinate\nrevaccination\nrevalenta\nrevalescence\nrevalescent\nrevalidate\nrevalidation\nrevalorization\nrevalorize\nrevaluate\nrevaluation\nrevalue\nrevamp\nrevamper\nrevampment\nrevaporization\nrevaporize\nrevarnish\nrevary\nreve\nreveal\nrevealability\nrevealable\nrevealableness\nrevealed\nrevealedly\nrevealer\nrevealing\nrevealingly\nrevealingness\nrevealment\nrevegetate\nrevegetation\nrevehent\nreveil\nreveille\nrevel\nrevelability\nrevelant\nrevelation\nrevelational\nrevelationer\nrevelationist\nrevelationize\nrevelative\nrevelator\nrevelatory\nreveler\nrevellent\nrevelly\nrevelment\nrevelrout\nrevelry\nrevenant\nrevend\nrevender\nrevendicate\nrevendication\nreveneer\nrevenge\nrevengeable\nrevengeful\nrevengefully\nrevengefulness\nrevengeless\nrevengement\nrevenger\nrevengingly\nrevent\nreventilate\nreventure\nrevenual\nrevenue\nrevenued\nrevenuer\nrever\nreverable\nreverb\nreverbatory\nreverberant\nreverberate\nreverberation\nreverberative\nreverberator\nreverberatory\nreverbrate\nreverdure\nrevere\nrevered\nreverence\nreverencer\nreverend\nreverendly\nreverendship\nreverent\nreverential\nreverentiality\nreverentially\nreverentialness\nreverently\nreverentness\nreverer\nreverie\nreverification\nreverify\nreverist\nrevers\nreversability\nreversable\nreversal\nreverse\nreversed\nreversedly\nreverseful\nreverseless\nreversely\nreversement\nreverser\nreverseways\nreversewise\nreversi\nreversibility\nreversible\nreversibleness\nreversibly\nreversification\nreversifier\nreversify\nreversing\nreversingly\nreversion\nreversionable\nreversional\nreversionally\nreversionary\nreversioner\nreversionist\nreversis\nreversist\nreversive\nreverso\nrevert\nrevertal\nreverter\nrevertibility\nrevertible\nrevertive\nrevertively\nrevery\nrevest\nrevestiary\nrevestry\nrevet\nrevete\nrevetement\nrevetment\nrevibrate\nrevibration\nrevibrational\nrevictorious\nrevictory\nrevictual\nrevictualment\nrevie\nreview\nreviewability\nreviewable\nreviewage\nreviewal\nreviewer\nrevieweress\nreviewish\nreviewless\nrevigorate\nrevigoration\nrevile\nrevilement\nreviler\nreviling\nrevilingly\nrevindicate\nrevindication\nreviolate\nreviolation\nrevirescence\nrevirescent\nRevisable\nrevisable\nrevisableness\nrevisal\nrevise\nRevised\nrevisee\nreviser\nrevisership\nrevisible\nrevision\nrevisional\nrevisionary\nrevisionism\nrevisionist\nrevisit\nrevisitant\nrevisitation\nrevisor\nrevisory\nrevisualization\nrevisualize\nrevitalization\nrevitalize\nrevitalizer\nrevivability\nrevivable\nrevivably\nrevival\nrevivalism\nrevivalist\nrevivalistic\nrevivalize\nrevivatory\nrevive\nrevivement\nreviver\nrevivification\nrevivifier\nrevivify\nreviving\nrevivingly\nreviviscence\nreviviscency\nreviviscent\nreviviscible\nrevivor\nrevocability\nrevocable\nrevocableness\nrevocably\nrevocation\nrevocative\nrevocatory\nrevoice\nrevokable\nrevoke\nrevokement\nrevoker\nrevokingly\nrevolant\nrevolatilize\nrevolt\nrevolter\nrevolting\nrevoltingly\nrevoltress\nrevolubility\nrevoluble\nrevolubly\nrevolunteer\nrevolute\nrevoluted\nrevolution\nrevolutional\nrevolutionally\nrevolutionarily\nrevolutionariness\nrevolutionary\nrevolutioneering\nrevolutioner\nrevolutionism\nrevolutionist\nrevolutionize\nrevolutionizement\nrevolutionizer\nrevolvable\nrevolvably\nrevolve\nrevolvement\nrevolvency\nrevolver\nrevolving\nrevolvingly\nrevomit\nrevote\nrevue\nrevuette\nrevuist\nrevulsed\nrevulsion\nrevulsionary\nrevulsive\nrevulsively\nrewade\nrewager\nrewake\nrewaken\nrewall\nrewallow\nreward\nrewardable\nrewardableness\nrewardably\nrewardedly\nrewarder\nrewardful\nrewardfulness\nrewarding\nrewardingly\nrewardless\nrewardproof\nrewarehouse\nrewarm\nrewarn\nrewash\nrewater\nrewave\nrewax\nrewaybill\nrewayle\nreweaken\nrewear\nreweave\nrewed\nreweigh\nreweigher\nreweight\nrewelcome\nreweld\nrewend\nrewet\nrewhelp\nrewhirl\nrewhisper\nrewhiten\nrewiden\nrewin\nrewind\nrewinder\nrewirable\nrewire\nrewish\nrewithdraw\nrewithdrawal\nrewood\nreword\nrework\nreworked\nrewound\nrewove\nrewoven\nrewrap\nrewrite\nrewriter\nRex\nrex\nrexen\nreyield\nReynard\nReynold\nreyoke\nreyouth\nrezbanyite\nrhabdite\nrhabditiform\nRhabditis\nrhabdium\nRhabdocarpum\nRhabdocoela\nrhabdocoelan\nrhabdocoele\nRhabdocoelida\nrhabdocoelidan\nrhabdocoelous\nrhabdoid\nrhabdoidal\nrhabdolith\nrhabdom\nrhabdomal\nrhabdomancer\nrhabdomancy\nrhabdomantic\nrhabdomantist\nRhabdomonas\nrhabdomyoma\nrhabdomyosarcoma\nrhabdomysarcoma\nrhabdophane\nrhabdophanite\nRhabdophora\nrhabdophoran\nRhabdopleura\nrhabdopod\nrhabdos\nrhabdosome\nrhabdosophy\nrhabdosphere\nrhabdus\nRhacianectes\nRhacomitrium\nRhacophorus\nRhadamanthine\nRhadamanthus\nRhadamanthys\nRhaetian\nRhaetic\nrhagades\nrhagadiform\nrhagiocrin\nrhagionid\nRhagionidae\nrhagite\nRhagodia\nrhagon\nrhagonate\nrhagose\nrhamn\nRhamnaceae\nrhamnaceous\nrhamnal\nRhamnales\nrhamnetin\nrhamninase\nrhamninose\nrhamnite\nrhamnitol\nrhamnohexite\nrhamnohexitol\nrhamnohexose\nrhamnonic\nrhamnose\nrhamnoside\nRhamnus\nrhamphoid\nRhamphorhynchus\nRhamphosuchus\nrhamphotheca\nRhapidophyllum\nRhapis\nrhapontic\nrhaponticin\nrhapontin\nrhapsode\nrhapsodic\nrhapsodical\nrhapsodically\nrhapsodie\nrhapsodism\nrhapsodist\nrhapsodistic\nrhapsodize\nrhapsodomancy\nrhapsody\nRhaptopetalaceae\nrhason\nrhasophore\nrhatania\nrhatany\nrhe\nRhea\nrhea\nrheadine\nRheae\nrhebok\nrhebosis\nrheeboc\nrheebok\nrheen\nrhegmatype\nrhegmatypy\nRhegnopteri\nrheic\nRheidae\nRheiformes\nrhein\nrheinic\nrhema\nrhematic\nrhematology\nrheme\nRhemish\nRhemist\nRhenish\nrhenium\nrheobase\nrheocrat\nrheologist\nrheology\nrheometer\nrheometric\nrheometry\nrheophile\nrheophore\nrheophoric\nrheoplankton\nrheoscope\nrheoscopic\nrheostat\nrheostatic\nrheostatics\nrheotactic\nrheotan\nrheotaxis\nrheotome\nrheotrope\nrheotropic\nrheotropism\nrhesian\nrhesus\nrhetor\nrhetoric\nrhetorical\nrhetorically\nrhetoricalness\nrhetoricals\nrhetorician\nrhetorize\nRheum\nrheum\nrheumarthritis\nrheumatalgia\nrheumatic\nrheumatical\nrheumatically\nrheumaticky\nrheumatism\nrheumatismal\nrheumatismoid\nrheumative\nrheumatiz\nrheumatize\nrheumatoid\nrheumatoidal\nrheumatoidally\nrheumed\nrheumic\nrheumily\nrheuminess\nrheumy\nRhexia\nrhexis\nrhigolene\nrhigosis\nrhigotic\nRhina\nrhinal\nrhinalgia\nRhinanthaceae\nRhinanthus\nrhinarium\nrhincospasm\nrhine\nRhineland\nRhinelander\nrhinencephalic\nrhinencephalon\nrhinencephalous\nrhinenchysis\nRhineodon\nRhineodontidae\nrhinestone\nRhineura\nrhineurynter\nRhinidae\nrhinion\nrhinitis\nrhino\nRhinobatidae\nRhinobatus\nrhinobyon\nrhinocaul\nrhinocele\nrhinocelian\nrhinocerial\nrhinocerian\nrhinocerine\nrhinoceroid\nrhinoceros\nrhinoceroslike\nrhinocerotic\nRhinocerotidae\nrhinocerotiform\nrhinocerotine\nrhinocerotoid\nrhinochiloplasty\nRhinoderma\nrhinodynia\nrhinogenous\nrhinolalia\nrhinolaryngology\nrhinolaryngoscope\nrhinolite\nrhinolith\nrhinolithic\nrhinological\nrhinologist\nrhinology\nrhinolophid\nRhinolophidae\nrhinolophine\nrhinopharyngeal\nrhinopharyngitis\nrhinopharynx\nRhinophidae\nRhinophis\nrhinophonia\nrhinophore\nrhinophyma\nrhinoplastic\nrhinoplasty\nrhinopolypus\nRhinoptera\nRhinopteridae\nrhinorrhagia\nrhinorrhea\nrhinorrheal\nrhinoscleroma\nrhinoscope\nrhinoscopic\nrhinoscopy\nrhinosporidiosis\nRhinosporidium\nrhinotheca\nrhinothecal\nRhinthonic\nRhinthonica\nrhipidate\nrhipidion\nRhipidistia\nrhipidistian\nrhipidium\nRhipidoglossa\nrhipidoglossal\nrhipidoglossate\nRhipidoptera\nrhipidopterous\nrhipiphorid\nRhipiphoridae\nRhipiptera\nrhipipteran\nrhipipterous\nRhipsalis\nRhiptoglossa\nrhizanthous\nrhizautoicous\nRhizina\nRhizinaceae\nrhizine\nrhizinous\nRhizobium\nrhizocarp\nRhizocarpeae\nrhizocarpean\nrhizocarpian\nrhizocarpic\nrhizocarpous\nrhizocaul\nrhizocaulus\nRhizocephala\nrhizocephalan\nrhizocephalous\nrhizocorm\nRhizoctonia\nrhizoctoniose\nrhizodermis\nRhizodus\nRhizoflagellata\nrhizoflagellate\nrhizogen\nrhizogenetic\nrhizogenic\nrhizogenous\nrhizoid\nrhizoidal\nrhizoma\nrhizomatic\nrhizomatous\nrhizome\nrhizomelic\nrhizomic\nrhizomorph\nrhizomorphic\nrhizomorphoid\nrhizomorphous\nrhizoneure\nrhizophagous\nrhizophilous\nRhizophora\nRhizophoraceae\nrhizophoraceous\nrhizophore\nrhizophorous\nrhizophyte\nrhizoplast\nrhizopod\nRhizopoda\nrhizopodal\nrhizopodan\nrhizopodist\nrhizopodous\nRhizopogon\nRhizopus\nrhizosphere\nRhizostomae\nRhizostomata\nrhizostomatous\nrhizostome\nrhizostomous\nRhizota\nrhizotaxis\nrhizotaxy\nrhizote\nrhizotic\nrhizotomi\nrhizotomy\nrho\nRhoda\nrhodaline\nRhodamine\nrhodamine\nrhodanate\nRhodanian\nrhodanic\nrhodanine\nrhodanthe\nrhodeose\nRhodes\nRhodesian\nRhodesoid\nrhodeswood\nRhodian\nrhodic\nrhoding\nrhodinol\nrhodite\nrhodium\nrhodizite\nrhodizonic\nRhodobacteriaceae\nRhodobacterioideae\nrhodochrosite\nRhodococcus\nRhodocystis\nrhodocyte\nrhododendron\nrhodolite\nRhodomelaceae\nrhodomelaceous\nrhodonite\nRhodope\nrhodophane\nRhodophyceae\nrhodophyceous\nrhodophyll\nRhodophyllidaceae\nRhodophyta\nrhodoplast\nrhodopsin\nRhodora\nRhodoraceae\nrhodorhiza\nrhodosperm\nRhodospermeae\nrhodospermin\nrhodospermous\nRhodospirillum\nRhodothece\nRhodotypos\nRhodymenia\nRhodymeniaceae\nrhodymeniaceous\nRhodymeniales\nRhoeadales\nRhoecus\nRhoeo\nrhomb\nrhombencephalon\nrhombenporphyr\nrhombic\nrhombical\nrhombiform\nrhomboclase\nrhomboganoid\nRhomboganoidei\nrhombogene\nrhombogenic\nrhombogenous\nrhombohedra\nrhombohedral\nrhombohedrally\nrhombohedric\nrhombohedron\nrhomboid\nrhomboidal\nrhomboidally\nrhomboideus\nrhomboidly\nrhomboquadratic\nrhomborectangular\nrhombos\nrhombovate\nRhombozoa\nrhombus\nrhonchal\nrhonchial\nrhonchus\nRhonda\nrhopalic\nrhopalism\nrhopalium\nRhopalocera\nrhopaloceral\nrhopalocerous\nRhopalura\nrhotacism\nrhotacismus\nrhotacistic\nrhotacize\nrhubarb\nrhubarby\nrhumb\nrhumba\nrhumbatron\nRhus\nrhyacolite\nrhyme\nrhymeless\nrhymelet\nrhymemaker\nrhymemaking\nrhymeproof\nrhymer\nrhymery\nrhymester\nrhymewise\nrhymic\nrhymist\nrhymy\nRhynchobdellae\nRhynchobdellida\nRhynchocephala\nRhynchocephali\nRhynchocephalia\nrhynchocephalian\nrhynchocephalic\nrhynchocephalous\nRhynchocoela\nrhynchocoelan\nrhynchocoelic\nrhynchocoelous\nrhyncholite\nRhynchonella\nRhynchonellacea\nRhynchonellidae\nrhynchonelloid\nRhynchophora\nrhynchophoran\nrhynchophore\nrhynchophorous\nRhynchopinae\nRhynchops\nRhynchosia\nRhynchospora\nRhynchota\nrhynchotal\nrhynchote\nrhynchotous\nrhynconellid\nRhyncostomi\nRhynia\nRhyniaceae\nRhynocheti\nRhynsburger\nrhyobasalt\nrhyodacite\nrhyolite\nrhyolitic\nrhyotaxitic\nrhyparographer\nrhyparographic\nrhyparographist\nrhyparography\nrhypography\nrhyptic\nrhyptical\nrhysimeter\nRhyssa\nrhythm\nrhythmal\nrhythmic\nrhythmical\nrhythmicality\nrhythmically\nrhythmicity\nrhythmicize\nrhythmics\nrhythmist\nrhythmizable\nrhythmization\nrhythmize\nrhythmless\nrhythmometer\nrhythmopoeia\nrhythmproof\nRhytidodon\nrhytidome\nrhytidosis\nRhytina\nRhytisma\nrhyton\nria\nrial\nriancy\nriant\nriantly\nriata\nrib\nribald\nribaldish\nribaldly\nribaldrous\nribaldry\nriband\nRibandism\nRibandist\nribandlike\nribandmaker\nribandry\nribat\nribaudequin\nribaudred\nribband\nribbandry\nribbed\nribber\nribbet\nribbidge\nribbing\nribble\nribbon\nribbonback\nribboner\nribbonfish\nRibbonism\nribbonlike\nribbonmaker\nRibbonman\nribbonry\nribbonweed\nribbonwood\nribbony\nribby\nribe\nRibes\nRibhus\nribless\nriblet\nriblike\nriboflavin\nribonic\nribonuclease\nribonucleic\nribose\nribroast\nribroaster\nribroasting\nribskin\nribspare\nRibston\nribwork\nribwort\nRic\nRicardian\nRicardianism\nRicardo\nRiccia\nRicciaceae\nricciaceous\nRicciales\nrice\nricebird\nriceland\nricer\nricey\nRich\nrich\nRichard\nRichardia\nRichardsonia\nrichdom\nRichebourg\nrichellite\nrichen\nriches\nrichesse\nrichling\nrichly\nRichmond\nRichmondena\nrichness\nricht\nrichterite\nrichweed\nricin\nricine\nricinelaidic\nricinelaidinic\nricinic\nricinine\nricininic\nricinium\nricinoleate\nricinoleic\nricinolein\nricinolic\nRicinulei\nRicinus\nricinus\nRick\nrick\nrickardite\nricker\nricketily\nricketiness\nricketish\nrickets\nRickettsia\nrickettsial\nRickettsiales\nrickettsialpox\nrickety\nrickey\nrickle\nrickmatic\nrickrack\nricksha\nrickshaw\nrickstaddle\nrickstand\nrickstick\nRicky\nrickyard\nricochet\nricolettaite\nricrac\nrictal\nrictus\nrid\nridable\nridableness\nridably\nriddam\nriddance\nriddel\nridden\nridder\nridding\nriddle\nriddlemeree\nriddler\nriddling\nriddlingly\nriddlings\nride\nrideable\nrideau\nriden\nrident\nrider\nridered\nrideress\nriderless\nridge\nridgeband\nridgeboard\nridgebone\nridged\nridgel\nridgelet\nridgelike\nridgeling\nridgepiece\nridgeplate\nridgepole\nridgepoled\nridger\nridgerope\nridgetree\nridgeway\nridgewise\nridgil\nridging\nridgingly\nridgling\nridgy\nridibund\nridicule\nridiculer\nridiculize\nridiculosity\nridiculous\nridiculously\nridiculousness\nriding\nridingman\nridotto\nrie\nriebeckite\nriem\nRiemannean\nRiemannian\nriempie\nrier\nRiesling\nrife\nrifely\nrifeness\nRiff\nriff\nRiffi\nRiffian\nriffle\nriffler\nriffraff\nRifi\nRifian\nrifle\nriflebird\nrifledom\nrifleman\nriflemanship\nrifleproof\nrifler\nriflery\nrifleshot\nrifling\nrift\nrifter\nriftless\nrifty\nrig\nrigadoon\nrigamajig\nrigamarole\nrigation\nrigbane\nRigel\nRigelian\nrigescence\nrigescent\nriggald\nrigger\nrigging\nriggish\nriggite\nriggot\nright\nrightabout\nrighten\nrighteous\nrighteously\nrighteousness\nrighter\nrightful\nrightfully\nrightfulness\nrightheaded\nrighthearted\nrightist\nrightle\nrightless\nrightlessness\nrightly\nrightmost\nrightness\nrighto\nrightship\nrightward\nrightwardly\nrightwards\nrighty\nrigid\nrigidify\nrigidist\nrigidity\nrigidly\nrigidness\nrigidulous\nrigling\nrigmaree\nrigmarole\nrigmarolery\nrigmarolic\nrigmarolish\nrigmarolishly\nrignum\nrigol\nrigolette\nrigor\nrigorism\nrigorist\nrigoristic\nrigorous\nrigorously\nrigorousness\nrigsby\nrigsdaler\nRigsmaal\nRigsmal\nrigwiddie\nrigwiddy\nRik\nRikari\nrikisha\nrikk\nriksha\nrikshaw\nRiksmaal\nRiksmal\nrilawa\nrile\nriley\nrill\nrillet\nrillett\nrillette\nrillock\nrillstone\nrilly\nrim\nrima\nrimal\nrimate\nrimbase\nrime\nrimeless\nrimer\nrimester\nrimfire\nrimiform\nrimland\nrimless\nrimmaker\nrimmaking\nrimmed\nrimmer\nrimose\nrimosely\nrimosity\nrimous\nrimpi\nrimple\nrimption\nrimrock\nrimu\nrimula\nrimulose\nrimy\nRinaldo\nrinceau\nrinch\nrincon\nRind\nrind\nRinde\nrinded\nrinderpest\nrindle\nrindless\nrindy\nrine\nring\nringable\nRingatu\nringbark\nringbarker\nringbill\nringbird\nringbolt\nringbone\nringboned\nringcraft\nringdove\nringe\nringed\nringent\nringer\nringeye\nringgiver\nringgiving\nringgoer\nringhals\nringhead\nringiness\nringing\nringingly\nringingness\nringite\nringle\nringlead\nringleader\nringleaderless\nringleadership\nringless\nringlet\nringleted\nringlety\nringlike\nringmaker\nringmaking\nringman\nringmaster\nringneck\nringsail\nringside\nringsider\nringster\nringtail\nringtaw\nringtime\nringtoss\nringwalk\nringwall\nringwise\nringworm\nringy\nrink\nrinka\nrinker\nrinkite\nrinncefada\nrinneite\nrinner\nrinsable\nrinse\nrinser\nrinsing\nrinthereout\nrintherout\nRio\nrio\nriot\nrioter\nrioting\nriotingly\nriotist\nriotistic\nriotocracy\nriotous\nriotously\nriotousness\nriotproof\nriotry\nrip\nripa\nripal\nriparial\nriparian\nRiparii\nriparious\nripcord\nripe\nripelike\nripely\nripen\nripener\nripeness\nripening\nripeningly\nriper\nripgut\nripicolous\nripidolite\nripienist\nripieno\nripier\nripost\nriposte\nrippable\nripper\nripperman\nrippet\nrippier\nripping\nrippingly\nrippingness\nrippit\nripple\nrippleless\nrippler\nripplet\nrippling\nripplingly\nripply\nrippon\nriprap\nriprapping\nripsack\nripsaw\nripsnorter\nripsnorting\nRipuarian\nripup\nriroriro\nrisala\nrisberm\nrise\nrisen\nriser\nrishi\nrishtadar\nrisibility\nrisible\nrisibleness\nrisibles\nrisibly\nrising\nrisk\nrisker\nriskful\nriskfulness\nriskily\nriskiness\nriskish\nriskless\nriskproof\nrisky\nrisorial\nrisorius\nrisp\nrisper\nrisque\nrisquee\nRiss\nrissel\nrisser\nRissian\nrissle\nRissoa\nrissoid\nRissoidae\nrist\nristori\nrit\nRita\nrita\nRitalynne\nritardando\nRitchey\nrite\nriteless\nritelessness\nritling\nritornel\nritornelle\nritornello\nRitschlian\nRitschlianism\nrittingerite\nritual\nritualism\nritualist\nritualistic\nritualistically\nrituality\nritualize\nritualless\nritually\nritzy\nriva\nrivage\nrival\nrivalable\nrivaless\nrivalism\nrivality\nrivalize\nrivalless\nrivalrous\nrivalry\nrivalship\nrive\nrivel\nrivell\nriven\nriver\nriverain\nriverbank\nriverbush\nriverdamp\nrivered\nriverhead\nriverhood\nriverine\nriverish\nriverless\nriverlet\nriverlike\nriverling\nriverly\nriverman\nriverscape\nriverside\nriversider\nriverward\nriverwards\nriverwash\nriverway\nriverweed\nriverwise\nrivery\nrivet\nriveter\nrivethead\nriveting\nrivetless\nrivetlike\nRivina\nriving\nrivingly\nRivinian\nrivose\nRivularia\nRivulariaceae\nrivulariaceous\nrivulation\nrivulet\nrivulose\nrix\nrixatrix\nrixy\nriyal\nriziform\nrizzar\nrizzle\nrizzom\nrizzomed\nrizzonite\nRo\nroach\nroachback\nroad\nroadability\nroadable\nroadbed\nroadblock\nroadbook\nroadcraft\nroaded\nroader\nroadfellow\nroadhead\nroadhouse\nroading\nroadite\nroadless\nroadlessness\nroadlike\nroadman\nroadmaster\nroadside\nroadsider\nroadsman\nroadstead\nroadster\nroadstone\nroadtrack\nroadway\nroadweed\nroadwise\nroadworthiness\nroadworthy\nroam\nroamage\nroamer\nroaming\nroamingly\nroan\nroanoke\nroar\nroarer\nroaring\nroaringly\nroast\nroastable\nroaster\nroasting\nroastingly\nRob\nrob\nrobalito\nrobalo\nroband\nrobber\nrobberproof\nrobbery\nRobbin\nrobbin\nrobbing\nrobe\nrobeless\nRobenhausian\nrober\nroberd\nRoberdsman\nRobert\nRoberta\nRoberto\nRobigalia\nRobigus\nRobin\nrobin\nrobinet\nrobing\nRobinia\nrobinin\nrobinoside\nroble\nrobomb\nroborant\nroborate\nroboration\nroborative\nroborean\nroboreous\nrobot\nrobotesque\nrobotian\nrobotism\nrobotistic\nrobotization\nrobotize\nrobotlike\nrobotry\nrobur\nroburite\nrobust\nrobustful\nrobustfully\nrobustfulness\nrobustic\nrobusticity\nrobustious\nrobustiously\nrobustiousness\nrobustity\nrobustly\nrobustness\nroc\nrocambole\nRoccella\nRoccellaceae\nroccellic\nroccellin\nroccelline\nRochea\nrochelime\nRochelle\nrocher\nrochet\nrocheted\nrock\nrockable\nrockably\nrockaby\nrockabye\nrockallite\nRockaway\nrockaway\nrockbell\nrockberry\nrockbird\nrockborn\nrockbrush\nrockcist\nrockcraft\nrockelay\nrocker\nrockery\nrocket\nrocketeer\nrocketer\nrocketlike\nrocketor\nrocketry\nrockety\nrockfall\nrockfish\nrockfoil\nrockhair\nrockhearted\nRockies\nrockiness\nrocking\nrockingly\nrockish\nrocklay\nrockless\nrocklet\nrocklike\nrockling\nrockman\nrockrose\nrockshaft\nrockslide\nrockstaff\nrocktree\nrockward\nrockwards\nrockweed\nrockwood\nrockwork\nrocky\nrococo\nRocouyenne\nrocta\nRod\nrod\nrodd\nroddikin\nroddin\nrodding\nrode\nRodent\nrodent\nRodentia\nrodential\nrodentially\nrodentian\nrodenticidal\nrodenticide\nrodentproof\nrodeo\nRoderic\nRoderick\nrodge\nRodger\nrodham\nRodinal\nRodinesque\nroding\nrodingite\nrodknight\nrodless\nrodlet\nrodlike\nrodmaker\nrodman\nRodney\nrodney\nRodolph\nRodolphus\nrodomont\nrodomontade\nrodomontadist\nrodomontador\nrodsman\nrodster\nrodwood\nroe\nroeblingite\nroebuck\nroed\nroelike\nroentgen\nroentgenism\nroentgenization\nroentgenize\nroentgenogram\nroentgenograph\nroentgenographic\nroentgenographically\nroentgenography\nroentgenologic\nroentgenological\nroentgenologically\nroentgenologist\nroentgenology\nroentgenometer\nroentgenometry\nroentgenoscope\nroentgenoscopic\nroentgenoscopy\nroentgenotherapy\nroentgentherapy\nroer\nroestone\nroey\nrog\nrogan\nrogation\nRogationtide\nrogative\nrogatory\nRoger\nroger\nRogero\nrogersite\nroggle\nRogue\nrogue\nroguedom\nrogueling\nroguery\nrogueship\nroguing\nroguish\nroguishly\nroguishness\nrohan\nRohilla\nrohob\nrohun\nrohuna\nroi\nroid\nroil\nroily\nRoist\nroister\nroisterer\nroistering\nroisteringly\nroisterly\nroisterous\nroisterously\nroit\nRok\nroka\nroke\nrokeage\nrokee\nrokelay\nroker\nrokey\nroky\nRoland\nRolandic\nrole\nroleo\nRolf\nRolfe\nroll\nrollable\nrollback\nrolled\nrollejee\nroller\nrollerer\nrollermaker\nrollermaking\nrollerman\nrollerskater\nrollerskating\nrolley\nrolleyway\nrolleywayman\nrolliche\nrollichie\nrollick\nrollicker\nrollicking\nrollickingly\nrollickingness\nrollicksome\nrollicksomeness\nrollicky\nrolling\nrollingly\nRollinia\nrollix\nrollmop\nRollo\nrollock\nrollway\nroloway\nRomaean\nRomagnese\nRomagnol\nRomagnole\nRomaic\nromaika\nRomain\nromaine\nRomaji\nromal\nRoman\nRomance\nromance\nromancealist\nromancean\nromanceful\nromanceish\nromanceishness\nromanceless\nromancelet\nromancelike\nromancemonger\nromanceproof\nromancer\nromanceress\nromancical\nromancing\nromancist\nromancy\nRomandom\nRomane\nRomanes\nRomanese\nRomanesque\nRomanhood\nRomanian\nRomanic\nRomaniform\nRomanish\nRomanism\nRomanist\nRomanistic\nRomanite\nRomanity\nromanium\nRomanization\nRomanize\nRomanizer\nRomanly\nRomansch\nRomansh\nromantic\nromantical\nromanticalism\nromanticality\nromantically\nromanticalness\nromanticism\nromanticist\nromanticistic\nromanticity\nromanticize\nromanticly\nromanticness\nromantism\nromantist\nRomany\nromanza\nromaunt\nrombos\nrombowline\nRome\nromeite\nRomeo\nromerillo\nromero\nRomescot\nRomeshot\nRomeward\nRomewards\nRomic\nRomipetal\nRomish\nRomishly\nRomishness\nrommack\nRommany\nRomney\nRomneya\nromp\nromper\nromping\nrompingly\nrompish\nrompishly\nrompishness\nrompu\nrompy\nRomulian\nRomulus\nRon\nRonald\nroncador\nRoncaglian\nroncet\nronco\nrond\nrondache\nrondacher\nrondawel\nronde\nrondeau\nrondel\nrondelet\nRondeletia\nrondelier\nrondelle\nrondellier\nrondino\nrondle\nrondo\nrondoletto\nrondure\nrone\nRong\nRonga\nrongeur\nRonni\nronquil\nRonsardian\nRonsardism\nRonsardist\nRonsardize\nRonsdorfer\nRonsdorfian\nrontgen\nronyon\nrood\nroodebok\nroodle\nroodstone\nroof\nroofage\nroofer\nroofing\nroofless\nrooflet\nrooflike\nroofman\nrooftree\nroofward\nroofwise\nroofy\nrooibok\nrooinek\nrook\nrooker\nrookeried\nrookery\nrookie\nrookish\nrooklet\nrooklike\nrooky\nrool\nroom\nroomage\nroomed\nroomer\nroomful\nroomie\nroomily\nroominess\nroomkeeper\nroomless\nroomlet\nroommate\nroomstead\nroomth\nroomthily\nroomthiness\nroomthy\nroomward\nroomy\nroon\nroorback\nroosa\nRoosevelt\nRooseveltian\nroost\nroosted\nrooster\nroosterfish\nroosterhood\nroosterless\nroosters\nroostership\nRoot\nroot\nrootage\nrootcap\nrooted\nrootedly\nrootedness\nrooter\nrootery\nrootfast\nrootfastness\nroothold\nrootiness\nrootle\nrootless\nrootlessness\nrootlet\nrootlike\nrootling\nrootstalk\nrootstock\nrootwalt\nrootward\nrootwise\nrootworm\nrooty\nroove\nropable\nrope\nropeable\nropeband\nropebark\nropedance\nropedancer\nropedancing\nropelayer\nropelaying\nropelike\nropemaker\nropemaking\nropeman\nroper\nroperipe\nropery\nropes\nropesmith\nropetrick\nropewalk\nropewalker\nropeway\nropework\nropily\nropiness\nroping\nropish\nropishness\nropp\nropy\nroque\nroquelaure\nroquer\nroquet\nroquette\nroquist\nroral\nroratorio\nRori\nroric\nRoridula\nRoridulaceae\nroriferous\nrorifluent\nRoripa\nRorippa\nroritorious\nrorqual\nrorty\nrorulent\nrory\nRosa\nRosabel\nRosabella\nRosaceae\nrosacean\nrosaceous\nrosal\nRosales\nRosalia\nRosalie\nRosalind\nRosaline\nRosamond\nrosanilin\nrosaniline\nrosarian\nrosario\nrosarium\nrosaruby\nrosary\nrosated\nRoschach\nroscherite\nroscid\nroscoelite\nrose\nroseal\nroseate\nroseately\nrosebay\nrosebud\nrosebush\nrosed\nrosedrop\nrosefish\nrosehead\nrosehill\nrosehiller\nroseine\nrosel\nroseless\nroselet\nroselike\nroselite\nrosella\nrosellate\nroselle\nRosellinia\nrosemary\nRosenbergia\nrosenbuschite\nroseola\nroseolar\nroseoliform\nroseolous\nroseous\nroseroot\nrosery\nroset\nrosetan\nrosetangle\nrosetime\nRosetta\nrosette\nrosetted\nrosetty\nrosetum\nrosety\nroseways\nrosewise\nrosewood\nrosewort\nRosicrucian\nRosicrucianism\nrosied\nrosier\nrosieresite\nrosilla\nrosillo\nrosily\nrosin\nrosinate\nrosinduline\nRosine\nrosiness\nrosinous\nrosinweed\nrosinwood\nrosiny\nrosland\nrosmarine\nRosmarinus\nRosminian\nRosminianism\nrosoli\nrosolic\nrosolio\nrosolite\nrosorial\nRoss\nross\nrosser\nrossite\nrostel\nrostellar\nRostellaria\nrostellarian\nrostellate\nrostelliform\nrostellum\nroster\nrostra\nrostral\nrostrally\nrostrate\nrostrated\nrostriferous\nrostriform\nrostroantennary\nrostrobranchial\nrostrocarinate\nrostrocaudal\nrostroid\nrostrolateral\nrostrular\nrostrulate\nrostrulum\nrostrum\nrosular\nrosulate\nrosy\nrot\nrota\nrotacism\nRotal\nrotal\nRotala\nRotalia\nrotalian\nrotaliform\nrotaliiform\nrotaman\nrotameter\nrotan\nRotanev\nrotang\nRotarian\nRotarianism\nrotarianize\nRotary\nrotary\nrotascope\nrotatable\nrotate\nrotated\nrotating\nrotation\nrotational\nrotative\nrotatively\nrotativism\nrotatodentate\nrotatoplane\nrotator\nRotatoria\nrotatorian\nrotatory\nrotch\nrote\nrotella\nrotenone\nroter\nrotge\nrotgut\nrother\nrothermuck\nrotifer\nRotifera\nrotiferal\nrotiferan\nrotiferous\nrotiform\nrotisserie\nroto\nrotograph\nrotogravure\nrotor\nrotorcraft\nrotproof\nRotse\nrottan\nrotten\nrottenish\nrottenly\nrottenness\nrottenstone\nrotter\nrotting\nrottle\nrottlera\nrottlerin\nrottock\nrottolo\nrotula\nrotulad\nrotular\nrotulet\nrotulian\nrotuliform\nrotulus\nrotund\nrotunda\nrotundate\nrotundifoliate\nrotundifolious\nrotundiform\nrotundify\nrotundity\nrotundly\nrotundness\nrotundo\nrotundotetragonal\nroub\nroucou\nroud\nroue\nrouelle\nrouge\nrougeau\nrougeberry\nrougelike\nrougemontite\nrougeot\nrough\nroughage\nroughcast\nroughcaster\nroughdraft\nroughdraw\nroughdress\nroughdry\nroughen\nroughener\nrougher\nroughet\nroughhearted\nroughheartedness\nroughhew\nroughhewer\nroughhewn\nroughhouse\nroughhouser\nroughhousing\nroughhousy\nroughie\nroughing\nroughings\nroughish\nroughishly\nroughishness\nroughleg\nroughly\nroughness\nroughometer\nroughride\nroughrider\nroughroot\nroughscuff\nroughsetter\nroughshod\nroughslant\nroughsome\nroughstring\nroughstuff\nroughtail\nroughtailed\nroughwork\nroughwrought\nroughy\nrougy\nrouille\nrouky\nroulade\nrouleau\nroulette\nRouman\nRoumeliote\nroun\nrounce\nrounceval\nrouncy\nround\nroundabout\nroundaboutly\nroundaboutness\nrounded\nroundedly\nroundedness\nroundel\nroundelay\nroundeleer\nrounder\nroundfish\nroundhead\nroundheaded\nroundheadedness\nroundhouse\nrounding\nroundish\nroundishness\nroundlet\nroundline\nroundly\nroundmouthed\nroundness\nroundnose\nroundnosed\nroundridge\nroundseam\nroundsman\nroundtail\nroundtop\nroundtree\nroundup\nroundwise\nroundwood\nroundworm\nroundy\nroup\nrouper\nroupet\nroupily\nroupingwife\nroupit\nroupy\nrouse\nrouseabout\nrousedness\nrousement\nrouser\nrousing\nrousingly\nRousseau\nRousseauan\nRousseauism\nRousseauist\nRousseauistic\nRousseauite\nRoussellian\nroussette\nRoussillon\nroust\nroustabout\nrouster\nrousting\nrout\nroute\nrouter\nrouth\nrouthercock\nrouthie\nrouthiness\nrouthy\nroutinary\nroutine\nroutineer\nroutinely\nrouting\nroutinish\nroutinism\nroutinist\nroutinization\nroutinize\nroutivarite\nroutous\nroutously\nrouvillite\nrove\nrover\nrovet\nrovetto\nroving\nrovingly\nrovingness\nrow\nrowable\nrowan\nrowanberry\nrowboat\nrowdily\nrowdiness\nrowdy\nrowdydow\nrowdydowdy\nrowdyish\nrowdyishly\nrowdyishness\nrowdyism\nrowdyproof\nrowed\nrowel\nrowelhead\nrowen\nRowena\nrower\nrowet\nrowiness\nrowing\nRowland\nrowlandite\nRowleian\nrowlet\nRowley\nRowleyan\nrowlock\nrowport\nrowty\nrowy\nrox\nRoxana\nRoxane\nRoxanne\nRoxburgh\nRoxburghiaceae\nRoxbury\nRoxie\nRoxolani\nRoxy\nroxy\nRoy\nroyal\nroyale\nroyalet\nroyalism\nroyalist\nroyalization\nroyalize\nroyally\nroyalty\nRoyena\nroyet\nroyetness\nroyetous\nroyetously\nRoystonea\nroyt\nrozum\nRua\nruach\nruana\nrub\nrubasse\nrubato\nrubbed\nrubber\nrubberer\nrubberize\nrubberless\nrubberneck\nrubbernecker\nrubbernose\nrubbers\nrubberstone\nrubberwise\nrubbery\nrubbing\nrubbingstone\nrubbish\nrubbishing\nrubbishingly\nrubbishly\nrubbishry\nrubbishy\nrubble\nrubbler\nrubblestone\nrubblework\nrubbly\nrubdown\nRube\nrubedinous\nrubedity\nrubefacient\nrubefaction\nrubelet\nrubella\nrubelle\nrubellite\nrubellosis\nRubensian\nrubeola\nrubeolar\nrubeoloid\nruberythric\nruberythrinic\nrubescence\nrubescent\nRubia\nRubiaceae\nrubiaceous\nRubiales\nrubianic\nrubiate\nrubiator\nrubican\nrubicelle\nRubicola\nRubicon\nrubiconed\nrubicund\nrubicundity\nrubidic\nrubidine\nrubidium\nrubied\nrubific\nrubification\nrubificative\nrubify\nrubiginous\nrubijervine\nrubine\nrubineous\nrubious\nruble\nrublis\nrubor\nrubric\nrubrica\nrubrical\nrubricality\nrubrically\nrubricate\nrubrication\nrubricator\nrubrician\nrubricism\nrubricist\nrubricity\nrubricize\nrubricose\nrubrific\nrubrification\nrubrify\nrubrisher\nrubrospinal\nrubstone\nRubus\nruby\nrubylike\nrubytail\nrubythroat\nrubywise\nrucervine\nRucervus\nRuchbah\nruche\nruching\nruck\nrucker\nruckle\nruckling\nrucksack\nrucksey\nruckus\nrucky\nructation\nruction\nrud\nrudas\nRudbeckia\nrudd\nrudder\nrudderhead\nrudderhole\nrudderless\nrudderlike\nrudderpost\nrudderstock\nruddied\nruddily\nruddiness\nruddle\nruddleman\nruddock\nruddy\nruddyish\nrude\nrudely\nrudeness\nrudented\nrudenture\nruderal\nrudesby\nRudesheimer\nrudge\nrudiment\nrudimental\nrudimentarily\nrudimentariness\nrudimentary\nrudimentation\nrudish\nRudista\nRudistae\nrudistan\nrudistid\nrudity\nRudmasday\nRudolf\nRudolph\nRudolphus\nRudy\nrue\nrueful\nruefully\nruefulness\nruelike\nruelle\nRuellia\nruen\nruer\nruesome\nruesomeness\nruewort\nrufescence\nrufescent\nruff\nruffable\nruffed\nruffer\nruffian\nruffianage\nruffiandom\nruffianhood\nruffianish\nruffianism\nruffianize\nruffianlike\nruffianly\nruffiano\nruffin\nruffle\nruffled\nruffleless\nrufflement\nruffler\nrufflike\nruffliness\nruffling\nruffly\nruficarpous\nruficaudate\nruficoccin\nruficornate\nrufigallic\nrufoferruginous\nrufofulvous\nrufofuscous\nrufopiceous\nrufotestaceous\nrufous\nrufter\nrufulous\nRufus\nrufus\nrug\nruga\nrugate\nRugbeian\nRugby\nrugged\nruggedly\nruggedness\nRugger\nrugging\nruggle\nruggy\nrugheaded\nruglike\nrugmaker\nrugmaking\nRugosa\nrugosa\nrugose\nrugosely\nrugosity\nrugous\nrugulose\nruin\nruinable\nruinate\nruination\nruinatious\nruinator\nruined\nruiner\nruing\nruiniform\nruinlike\nruinous\nruinously\nruinousness\nruinproof\nRukbat\nrukh\nrulable\nRulander\nrule\nruledom\nruleless\nrulemonger\nruler\nrulership\nruling\nrulingly\nrull\nruller\nrullion\nRum\nrum\nrumal\nRuman\nRumanian\nrumbelow\nrumble\nrumblegarie\nrumblegumption\nrumblement\nrumbler\nrumbling\nrumblingly\nrumbly\nrumbo\nrumbooze\nrumbowline\nrumbowling\nrumbullion\nrumbumptious\nrumbustical\nrumbustious\nrumbustiousness\nrumchunder\nRumelian\nrumen\nrumenitis\nrumenocentesis\nrumenotomy\nRumex\nrumfustian\nrumgumption\nrumgumptious\nruminal\nruminant\nRuminantia\nruminantly\nruminate\nruminating\nruminatingly\nrumination\nruminative\nruminatively\nruminator\nrumkin\nrumless\nrumly\nrummage\nrummager\nrummagy\nrummer\nrummily\nrumminess\nrummish\nrummy\nrumness\nrumney\nrumor\nrumorer\nrumormonger\nrumorous\nrumorproof\nrumourmonger\nrump\nrumpad\nrumpadder\nrumpade\nRumper\nrumple\nrumpless\nrumply\nrumpscuttle\nrumpuncheon\nrumpus\nrumrunner\nrumrunning\nrumshop\nrumswizzle\nrumtytoo\nrun\nrunabout\nrunagate\nrunaround\nrunaway\nrunback\nrunboard\nrunby\nrunch\nrunchweed\nruncinate\nrundale\nRundi\nrundle\nrundlet\nrune\nrunecraft\nruned\nrunefolk\nruneless\nrunelike\nruner\nrunesmith\nrunestaff\nruneword\nrunfish\nrung\nrunghead\nrungless\nrunholder\nrunic\nrunically\nruniform\nrunite\nrunkeeper\nrunkle\nrunkly\nrunless\nrunlet\nrunman\nrunnable\nrunnel\nrunner\nrunnet\nrunning\nrunningly\nrunny\nrunoff\nrunologist\nrunology\nrunout\nrunover\nrunproof\nrunrig\nrunround\nrunt\nrunted\nruntee\nruntiness\nruntish\nruntishly\nruntishness\nrunty\nrunway\nrupa\nrupee\nRupert\nrupestral\nrupestrian\nrupestrine\nrupia\nrupiah\nrupial\nRupicapra\nRupicaprinae\nrupicaprine\nRupicola\nRupicolinae\nrupicoline\nrupicolous\nrupie\nrupitic\nRuppia\nruptile\nruption\nruptive\nruptuary\nrupturable\nrupture\nruptured\nrupturewort\nrural\nruralism\nruralist\nruralite\nrurality\nruralization\nruralize\nrurally\nruralness\nrurban\nruridecanal\nrurigenous\nRuritania\nRuritanian\nruru\nRus\nRusa\nRuscus\nruse\nrush\nrushbush\nrushed\nrushen\nrusher\nrushiness\nrushing\nrushingly\nrushingness\nrushland\nrushlight\nrushlighted\nrushlike\nrushlit\nrushy\nRusin\nrusine\nrusk\nruskin\nRuskinian\nrusky\nrusma\nrusot\nruspone\nRuss\nrussel\nRusselia\nRussell\nRussellite\nRussene\nrusset\nrusseting\nrussetish\nrussetlike\nrussety\nRussia\nrussia\nRussian\nRussianism\nRussianist\nRussianization\nRussianize\nRussification\nRussificator\nRussifier\nRussify\nRussine\nRussism\nRussniak\nRussolatrous\nRussolatry\nRussomania\nRussomaniac\nRussomaniacal\nRussophile\nRussophilism\nRussophilist\nRussophobe\nRussophobia\nRussophobiac\nRussophobism\nRussophobist\nrussud\nRussula\nrust\nrustable\nrustful\nrustic\nrustical\nrustically\nrusticalness\nrusticate\nrustication\nrusticator\nrusticial\nrusticism\nrusticity\nrusticize\nrusticly\nrusticness\nrusticoat\nrustily\nrustiness\nrustle\nrustler\nrustless\nrustling\nrustlingly\nrustlingness\nrustly\nrustproof\nrustre\nrustred\nRusty\nrusty\nrustyback\nrustyish\nruswut\nrut\nRuta\nrutabaga\nRutaceae\nrutaceous\nrutaecarpine\nrutate\nrutch\nrutelian\nRutelinae\nRuth\nruth\nruthenate\nRuthene\nRuthenian\nruthenic\nruthenious\nruthenium\nruthenous\nruther\nrutherford\nrutherfordine\nrutherfordite\nruthful\nruthfully\nruthfulness\nruthless\nruthlessly\nruthlessness\nrutic\nrutidosis\nrutilant\nrutilated\nrutile\nrutilous\nrutin\nrutinose\nRutiodon\nruttee\nrutter\nruttiness\nruttish\nruttishly\nruttishness\nrutty\nRutuli\nrutyl\nrutylene\nruvid\nrux\nrvulsant\nryal\nryania\nrybat\nryder\nrye\nryen\nRymandra\nryme\nRynchospora\nrynchosporous\nrynd\nrynt\nryot\nryotwar\nryotwari\nrype\nrypeck\nrytidosis\nRytina\nRyukyu\nS\ns\nsa\nsaa\nSaad\nSaan\nSaarbrucken\nsab\nSaba\nsabadilla\nsabadine\nsabadinine\nSabaean\nSabaeanism\nSabaeism\nsabaigrass\nSabaism\nSabaist\nSabal\nSabalaceae\nsabalo\nSaban\nsabanut\nSabaoth\nSabathikos\nSabazian\nSabazianism\nSabazios\nsabbat\nSabbatarian\nSabbatarianism\nSabbatary\nSabbatean\nSabbath\nsabbath\nSabbathaian\nSabbathaic\nSabbathaist\nSabbathbreaker\nSabbathbreaking\nSabbathism\nSabbathize\nSabbathkeeper\nSabbathkeeping\nSabbathless\nSabbathlike\nSabbathly\nSabbatia\nsabbatia\nSabbatian\nSabbatic\nsabbatic\nSabbatical\nsabbatical\nSabbatically\nSabbaticalness\nsabbatine\nsabbatism\nSabbatist\nSabbatization\nSabbatize\nsabbaton\nsabbitha\nsabdariffa\nsabe\nsabeca\nSabella\nsabella\nsabellan\nSabellaria\nsabellarian\nSabelli\nSabellian\nSabellianism\nSabellianize\nsabellid\nSabellidae\nsabelloid\nsaber\nsaberbill\nsabered\nsaberleg\nsaberlike\nsaberproof\nsabertooth\nsaberwing\nSabia\nSabiaceae\nsabiaceous\nSabian\nSabianism\nsabicu\nSabik\nSabina\nsabina\nSabine\nsabine\nSabinian\nsabino\nSabir\nsable\nsablefish\nsableness\nsably\nsabora\nsaboraim\nsabot\nsabotage\nsaboted\nsaboteur\nsabotine\nSabra\nsabra\nsabretache\nSabrina\nSabromin\nsabromin\nSabuja\nsabuline\nsabulite\nsabulose\nsabulosity\nsabulous\nsabulum\nsaburra\nsaburral\nsaburration\nsabutan\nsabzi\nSac\nsac\nSacae\nsacalait\nsacaline\nsacaton\nsacatra\nsacbrood\nsaccade\nsaccadic\nSaccammina\nsaccate\nsaccated\nSaccha\nsaccharamide\nsaccharase\nsaccharate\nsaccharated\nsaccharephidrosis\nsaccharic\nsaccharide\nsacchariferous\nsaccharification\nsaccharifier\nsaccharify\nsaccharilla\nsaccharimeter\nsaccharimetric\nsaccharimetrical\nsaccharimetry\nsaccharin\nsaccharinate\nsaccharinated\nsaccharine\nsaccharineish\nsaccharinely\nsaccharinic\nsaccharinity\nsaccharization\nsaccharize\nsaccharobacillus\nsaccharobiose\nsaccharobutyric\nsaccharoceptive\nsaccharoceptor\nsaccharochemotropic\nsaccharocolloid\nsaccharofarinaceous\nsaccharogalactorrhea\nsaccharogenic\nsaccharohumic\nsaccharoid\nsaccharoidal\nsaccharolactonic\nsaccharolytic\nsaccharometabolic\nsaccharometabolism\nsaccharometer\nsaccharometric\nsaccharometry\nsaccharomucilaginous\nSaccharomyces\nsaccharomyces\nSaccharomycetaceae\nsaccharomycetaceous\nSaccharomycetales\nsaccharomycete\nSaccharomycetes\nsaccharomycetic\nsaccharomycosis\nsaccharon\nsaccharonate\nsaccharone\nsaccharonic\nsaccharophylly\nsaccharorrhea\nsaccharoscope\nsaccharose\nsaccharostarchy\nsaccharosuria\nsaccharotriose\nsaccharous\nsaccharulmic\nsaccharulmin\nSaccharum\nsaccharum\nsaccharuria\nsacciferous\nsacciform\nSaccobranchiata\nsaccobranchiate\nSaccobranchus\nsaccoderm\nSaccolabium\nsaccolabium\nsaccomyian\nsaccomyid\nSaccomyidae\nSaccomyina\nsaccomyine\nsaccomyoid\nSaccomyoidea\nsaccomyoidean\nSaccomys\nSaccopharyngidae\nSaccopharynx\nSaccorhiza\nsaccos\nsaccular\nsacculate\nsacculated\nsacculation\nsaccule\nSacculina\nsacculoutricular\nsacculus\nsaccus\nsacellum\nsacerdocy\nsacerdotage\nsacerdotal\nsacerdotalism\nsacerdotalist\nsacerdotalize\nsacerdotally\nsacerdotical\nsacerdotism\nsachamaker\nsachem\nsachemdom\nsachemic\nsachemship\nsachet\nSacheverell\nSacian\nsack\nsackage\nsackamaker\nsackbag\nsackbut\nsackcloth\nsackclothed\nsackdoudle\nsacked\nsacken\nsacker\nsackful\nsacking\nsackless\nsacklike\nsackmaker\nsackmaking\nsackman\nsacktime\nsaclike\nsaco\nsacope\nsacque\nsacra\nsacrad\nsacral\nsacralgia\nsacralization\nsacrament\nsacramental\nsacramentalism\nsacramentalist\nsacramentality\nsacramentally\nsacramentalness\nSacramentarian\nsacramentarian\nsacramentarianism\nsacramentarist\nSacramentary\nsacramentary\nsacramenter\nsacramentism\nsacramentize\nSacramento\nsacramentum\nsacraria\nsacrarial\nsacrarium\nsacrectomy\nsacred\nsacredly\nsacredness\nsacrificable\nsacrificant\nSacrificati\nsacrification\nsacrificator\nsacrificatory\nsacrificature\nsacrifice\nsacrificer\nsacrificial\nsacrificially\nsacrificing\nsacrilege\nsacrileger\nsacrilegious\nsacrilegiously\nsacrilegiousness\nsacrilegist\nsacrilumbal\nsacrilumbalis\nsacring\nSacripant\nsacrist\nsacristan\nsacristy\nsacro\nsacrocaudal\nsacrococcygeal\nsacrococcygean\nsacrococcygeus\nsacrococcyx\nsacrocostal\nsacrocotyloid\nsacrocotyloidean\nsacrocoxalgia\nsacrocoxitis\nsacrodorsal\nsacrodynia\nsacrofemoral\nsacroiliac\nsacroinguinal\nsacroischiac\nsacroischiadic\nsacroischiatic\nsacrolumbal\nsacrolumbalis\nsacrolumbar\nsacropectineal\nsacroperineal\nsacropictorial\nsacroposterior\nsacropubic\nsacrorectal\nsacrosanct\nsacrosanctity\nsacrosanctness\nsacrosciatic\nsacrosecular\nsacrospinal\nsacrospinalis\nsacrospinous\nsacrotomy\nsacrotuberous\nsacrovertebral\nsacrum\nsad\nSadachbia\nSadalmelik\nSadalsuud\nsadden\nsaddening\nsaddeningly\nsaddik\nsaddirham\nsaddish\nsaddle\nsaddleback\nsaddlebag\nsaddlebow\nsaddlecloth\nsaddled\nsaddleleaf\nsaddleless\nsaddlelike\nsaddlenose\nsaddler\nsaddlery\nsaddlesick\nsaddlesore\nsaddlesoreness\nsaddlestead\nsaddletree\nsaddlewise\nsaddling\nSadducaic\nSadducean\nSadducee\nSadduceeism\nSadduceeist\nSadducism\nSadducize\nsade\nsadh\nsadhe\nsadhearted\nsadhu\nsadic\nSadie\nsadiron\nsadism\nsadist\nsadistic\nsadistically\nSadite\nsadly\nsadness\nsado\nsadomasochism\nSadr\nsadr\nsaecula\nsaeculum\nSaeima\nsaernaite\nsaeter\nsaeume\nSafar\nsafari\nSafavi\nSafawid\nsafe\nsafeblower\nsafeblowing\nsafebreaker\nsafebreaking\nsafecracking\nsafeguard\nsafeguarder\nsafehold\nsafekeeper\nsafekeeping\nsafelight\nsafely\nsafemaker\nsafemaking\nsafen\nsafener\nsafeness\nsafety\nSaffarian\nSaffarid\nsaffian\nsafflor\nsafflorite\nsafflow\nsafflower\nsaffron\nsaffroned\nsaffrontree\nsaffronwood\nsaffrony\nSafi\nSafine\nSafini\nsafranin\nsafranine\nsafranophile\nsafrole\nsaft\nsag\nsaga\nsagaciate\nsagacious\nsagaciously\nsagaciousness\nsagacity\nSagai\nsagaie\nsagaman\nsagamite\nsagamore\nsagapenum\nsagathy\nsage\nsagebrush\nsagebrusher\nsagebush\nsageleaf\nsagely\nsagene\nsageness\nsagenite\nsagenitic\nSageretia\nsagerose\nsageship\nsagewood\nsagger\nsagging\nsaggon\nsaggy\nsaghavart\nSagina\nsaginate\nsagination\nsaging\nSagitarii\nsagitta\nsagittal\nsagittally\nSagittaria\nSagittariid\nSagittarius\nsagittarius\nSagittary\nsagittary\nsagittate\nSagittid\nsagittiferous\nsagittiform\nsagittocyst\nsagittoid\nsagless\nsago\nsagoin\nsagolike\nSagra\nsaguaro\nSaguerus\nsagum\nsaguran\nsagvandite\nsagwire\nsagy\nsah\nSahadeva\nSahaptin\nSahara\nSaharan\nSaharian\nSaharic\nsahh\nsahib\nSahibah\nSahidic\nsahme\nSaho\nsahoukar\nsahukar\nsai\nsaic\nsaid\nSaidi\nSaify\nsaiga\nSaiid\nsail\nsailable\nsailage\nsailboat\nsailcloth\nsailed\nsailer\nsailfish\nsailflying\nsailing\nsailingly\nsailless\nsailmaker\nsailmaking\nsailor\nsailoring\nsailorizing\nsailorless\nsailorlike\nsailorly\nsailorman\nsailorproof\nsailplane\nsailship\nsailsman\nsaily\nsaim\nsaimiri\nsaimy\nsain\nSainfoin\nsaint\nsaintdom\nsainted\nsaintess\nsainthood\nsaintish\nsaintism\nsaintless\nsaintlike\nsaintlily\nsaintliness\nsaintling\nsaintly\nsaintologist\nsaintology\nSaintpaulia\nsaintship\nsaip\nSaiph\nsair\nsairly\nsairve\nsairy\nSaite\nsaithe\nSaitic\nSaiva\nSaivism\nsaj\nsajou\nSak\nSaka\nSakai\nSakalava\nsake\nsakeber\nsakeen\nSakel\nSakelarides\nSakell\nSakellaridis\nsaker\nsakeret\nSakha\nsaki\nsakieh\nSakkara\nSaktism\nsakulya\nSakyamuni\nSal\nsal\nsalaam\nsalaamlike\nsalability\nsalable\nsalableness\nsalably\nsalaceta\nsalacious\nsalaciously\nsalaciousness\nsalacity\nsalacot\nsalad\nsalading\nsalago\nsalagrama\nsalal\nsalamandarin\nsalamander\nsalamanderlike\nSalamandra\nsalamandrian\nSalamandridae\nsalamandriform\nSalamandrina\nsalamandrine\nsalamandroid\nsalambao\nSalaminian\nsalamo\nsalampore\nsalangane\nsalangid\nSalangidae\nSalar\nsalar\nsalariat\nsalaried\nsalary\nsalaryless\nsalat\nsalay\nsale\nsalegoer\nsalele\nsalema\nsalenixon\nsalep\nsaleratus\nsaleroom\nsalesclerk\nSalesian\nsaleslady\nsalesman\nsalesmanship\nsalespeople\nsalesperson\nsalesroom\nsaleswoman\nsalework\nsaleyard\nsalfern\nSalian\nSaliaric\nSalic\nsalic\nSalicaceae\nsalicaceous\nSalicales\nSalicariaceae\nsalicetum\nsalicin\nsalicional\nsalicorn\nSalicornia\nsalicyl\nsalicylal\nsalicylaldehyde\nsalicylamide\nsalicylanilide\nsalicylase\nsalicylate\nsalicylic\nsalicylide\nsalicylidene\nsalicylism\nsalicylize\nsalicylous\nsalicyluric\nsalicylyl\nsalience\nsalient\nSalientia\nsalientian\nsaliently\nsaliferous\nsalifiable\nsalification\nsalify\nsaligenin\nsaligot\nsalimeter\nsalimetry\nSalina\nsalina\nSalinan\nsalination\nsaline\nSalinella\nsalinelle\nsalineness\nsaliniferous\nsalinification\nsaliniform\nsalinity\nsalinize\nsalinometer\nsalinometry\nsalinosulphureous\nsalinoterreous\nSalisburia\nSalish\nSalishan\nsalite\nsalited\nSaliva\nsaliva\nsalival\nSalivan\nsalivant\nsalivary\nsalivate\nsalivation\nsalivator\nsalivatory\nsalivous\nSalix\nsalix\nsalle\nsallee\nsalleeman\nsallenders\nsallet\nsallier\nsalloo\nsallow\nsallowish\nsallowness\nsallowy\nSally\nsally\nSallybloom\nsallyman\nsallywood\nSalm\nsalma\nsalmagundi\nsalmiac\nsalmine\nsalmis\nSalmo\nSalmon\nsalmon\nsalmonberry\nSalmonella\nsalmonella\nsalmonellae\nsalmonellosis\nsalmonet\nsalmonid\nSalmonidae\nsalmoniform\nsalmonlike\nsalmonoid\nSalmonoidea\nSalmonoidei\nsalmonsite\nsalmwood\nsalnatron\nSalol\nsalol\nSalome\nsalometer\nsalometry\nsalomon\nSalomonia\nSalomonian\nSalomonic\nsalon\nsaloon\nsaloonist\nsaloonkeeper\nsaloop\nSalopian\nsalopian\nsalp\nSalpa\nsalpa\nsalpacean\nsalpian\nsalpicon\nSalpidae\nsalpiform\nSalpiglossis\nsalpiglossis\nsalpingectomy\nsalpingemphraxis\nsalpinges\nsalpingian\nsalpingion\nsalpingitic\nsalpingitis\nsalpingocatheterism\nsalpingocele\nsalpingocyesis\nsalpingomalleus\nsalpingonasal\nsalpingopalatal\nsalpingopalatine\nsalpingoperitonitis\nsalpingopexy\nsalpingopharyngeal\nsalpingopharyngeus\nsalpingopterygoid\nsalpingorrhaphy\nsalpingoscope\nsalpingostaphyline\nsalpingostenochoria\nsalpingostomatomy\nsalpingostomy\nsalpingotomy\nsalpinx\nsalpoid\nsalse\nsalsifis\nsalsify\nsalsilla\nSalsola\nSalsolaceae\nsalsolaceous\nsalsuginous\nsalt\nsalta\nsaltant\nsaltarella\nsaltarello\nsaltary\nsaltate\nsaltation\nsaltativeness\nSaltator\nsaltator\nSaltatoria\nsaltatorial\nsaltatorian\nsaltatoric\nsaltatorious\nsaltatory\nsaltbush\nsaltcat\nsaltcatch\nsaltcellar\nsalted\nsaltee\nsalten\nsalter\nsaltern\nsaltery\nsaltfat\nsaltfoot\nsalthouse\nsaltier\nsaltierra\nsaltierwise\nSaltigradae\nsaltigrade\nsaltimbanco\nsaltimbank\nsaltimbankery\nsaltine\nsaltiness\nsalting\nsaltish\nsaltishly\nsaltishness\nsaltless\nsaltlessness\nsaltly\nsaltmaker\nsaltmaking\nsaltman\nsaltmouth\nsaltness\nsaltometer\nsaltorel\nsaltpan\nsaltpeter\nsaltpetrous\nsaltpond\nsaltspoon\nsaltspoonful\nsaltsprinkler\nsaltus\nsaltweed\nsaltwife\nsaltworker\nsaltworks\nsaltwort\nsalty\nsalubrify\nsalubrious\nsalubriously\nsalubriousness\nsalubrity\nsaluki\nsalung\nsalutarily\nsalutariness\nsalutary\nsalutation\nsalutational\nsalutationless\nsalutatious\nsalutatorian\nsalutatorily\nsalutatorium\nsalutatory\nsalute\nsaluter\nsalutiferous\nsalutiferously\nSalva\nsalvability\nsalvable\nsalvableness\nsalvably\nSalvadora\nsalvadora\nSalvadoraceae\nsalvadoraceous\nSalvadoran\nSalvadorian\nsalvage\nsalvageable\nsalvagee\nsalvageproof\nsalvager\nsalvaging\nSalvarsan\nsalvarsan\nsalvatella\nsalvation\nsalvational\nsalvationism\nsalvationist\nsalvatory\nsalve\nsalveline\nSalvelinus\nsalver\nsalverform\nSalvia\nsalvianin\nsalvific\nsalvifical\nsalvifically\nSalvinia\nSalviniaceae\nsalviniaceous\nSalviniales\nsalviol\nsalvo\nsalvor\nsalvy\nSalwey\nsalzfelle\nSam\nsam\nSamadera\nsamadh\nsamadhi\nsamaj\nSamal\nsaman\nSamandura\nSamani\nSamanid\nSamantha\nsamara\nsamaria\nsamariform\nSamaritan\nSamaritaness\nSamaritanism\nsamarium\nSamarkand\nsamaroid\nsamarra\nsamarskite\nSamas\nsamba\nSambal\nsambal\nsambaqui\nsambar\nSambara\nSambathe\nsambhogakaya\nSambo\nsambo\nSambucaceae\nSambucus\nsambuk\nsambuke\nsambunigrin\nSamburu\nsame\nsamekh\nsamel\nsameliness\nsamely\nsamen\nsameness\nsamesome\nSamgarnebo\nsamh\nSamhain\nsamhita\nSamian\nsamiel\nSamir\nsamiresite\nsamiri\nsamisen\nSamish\nsamite\nsamkara\nsamlet\nsammel\nsammer\nsammier\nSammy\nsammy\nSamnani\nSamnite\nSamoan\nSamogitian\nsamogonka\nSamolus\nSamosatenian\nsamothere\nSamotherium\nSamothracian\nsamovar\nSamoyed\nSamoyedic\nsamp\nsampaguita\nsampaloc\nsampan\nsamphire\nsampi\nsample\nsampleman\nsampler\nsamplery\nsampling\nSampsaean\nSamsam\nsamsara\nsamshu\nSamsien\nsamskara\nSamson\nsamson\nSamsoness\nSamsonian\nSamsonic\nSamsonistic\nsamsonite\nSamucan\nSamucu\nSamuel\nsamurai\nSamydaceae\nSan\nsan\nsanability\nsanable\nsanableness\nsanai\nSanand\nsanative\nsanativeness\nsanatoria\nsanatorium\nsanatory\nSanballat\nsanbenito\nSanche\nsancho\nsanct\nsancta\nsanctanimity\nsanctifiable\nsanctifiableness\nsanctifiably\nsanctificate\nsanctification\nsanctified\nsanctifiedly\nsanctifier\nsanctify\nsanctifyingly\nsanctilogy\nsanctiloquent\nsanctimonial\nsanctimonious\nsanctimoniously\nsanctimoniousness\nsanctimony\nsanction\nsanctionable\nsanctionary\nsanctionative\nsanctioner\nsanctionist\nsanctionless\nsanctionment\nsanctitude\nsanctity\nsanctologist\nSanctology\nsanctorium\nsanctuaried\nsanctuarize\nsanctuary\nsanctum\nSanctus\nSancy\nsancyite\nsand\nsandak\nsandal\nsandaled\nsandaliform\nsandaling\nsandalwood\nsandalwort\nsandan\nsandarac\nsandaracin\nsandastros\nSandawe\nsandbag\nsandbagger\nsandbank\nsandbin\nsandblast\nsandboard\nsandbox\nsandboy\nsandbur\nsandclub\nsandculture\nsanded\nSandeep\nSandemanian\nSandemanianism\nSandemanism\nSander\nsander\nsanderling\nsanders\nsandfish\nsandflower\nsandglass\nsandheat\nsandhi\nsandiferous\nsandiness\nsanding\nSandip\nsandiver\nsandix\nsandlapper\nsandless\nsandlike\nsandling\nsandman\nsandnatter\nsandnecker\nsandpaper\nsandpaperer\nsandpeep\nsandpiper\nsandproof\nSandra\nsandrock\nsandspit\nsandspur\nsandstay\nsandstone\nsandstorm\nsandust\nsandweed\nsandweld\nsandwich\nsandwood\nsandworm\nsandwort\nSandy\nsandy\nsandyish\nsane\nsanely\nsaneness\nSanetch\nSanford\nSanforized\nsang\nsanga\nSangamon\nsangar\nsangaree\nsangei\nsanger\nsangerbund\nsangerfest\nSanggil\nsangha\nSangho\nSangir\nSangirese\nsanglant\nsangley\nSangraal\nsangreeroot\nsangrel\nsangsue\nsanguicolous\nsanguifacient\nsanguiferous\nsanguification\nsanguifier\nsanguifluous\nsanguimotor\nsanguimotory\nsanguinaceous\nSanguinaria\nsanguinarily\nsanguinariness\nsanguinary\nsanguine\nsanguineless\nsanguinely\nsanguineness\nsanguineobilious\nsanguineophlegmatic\nsanguineous\nsanguineousness\nsanguineovascular\nsanguinicolous\nsanguiniferous\nsanguinification\nsanguinism\nsanguinity\nsanguinivorous\nsanguinocholeric\nsanguinolency\nsanguinolent\nsanguinopoietic\nsanguinous\nSanguisorba\nSanguisorbaceae\nsanguisuge\nsanguisugent\nsanguisugous\nsanguivorous\nSanhedrim\nSanhedrin\nSanhedrist\nSanhita\nsanicle\nSanicula\nsanidine\nsanidinic\nsanidinite\nsanies\nsanification\nsanify\nsanious\nsanipractic\nsanitarian\nsanitarily\nsanitarist\nsanitarium\nsanitary\nsanitate\nsanitation\nsanitationist\nsanitist\nsanitize\nSanity\nsanity\nsanjak\nsanjakate\nsanjakbeg\nsanjakship\nSanjay\nSanjeev\nSanjib\nsank\nsankha\nSankhya\nsannaite\nSannoisian\nsannup\nsannyasi\nsannyasin\nsanopurulent\nsanoserous\nSanpoil\nsans\nSansar\nsansei\nSansevieria\nsanshach\nsansi\nSanskrit\nSanskritic\nSanskritist\nSanskritization\nSanskritize\nsant\nSanta\nSantal\nsantal\nSantalaceae\nsantalaceous\nSantalales\nSantali\nsantalic\nsantalin\nsantalol\nSantalum\nsantalwood\nsantapee\nSantee\nsantene\nSantiago\nsantimi\nsantims\nsantir\nSanto\nSantolina\nsanton\nsantonica\nsantonin\nsantoninic\nsantorinite\nSantos\nsanukite\nSanvitalia\nSanyakoan\nsao\nSaoshyant\nsap\nsapa\nsapajou\nsapan\nsapanwood\nsapbush\nsapek\nSaperda\nsapful\nSapharensian\nsaphead\nsapheaded\nsapheadedness\nsaphena\nsaphenal\nsaphenous\nsaphie\nsapid\nsapidity\nsapidless\nsapidness\nsapience\nsapiency\nsapient\nsapiential\nsapientially\nsapientize\nsapiently\nsapin\nsapinda\nSapindaceae\nsapindaceous\nSapindales\nsapindaship\nSapindus\nSapium\nsapiutan\nsaple\nsapless\nsaplessness\nsapling\nsaplinghood\nsapo\nsapodilla\nsapogenin\nsaponaceous\nsaponaceousness\nsaponacity\nSaponaria\nsaponarin\nsaponary\nSaponi\nsaponifiable\nsaponification\nsaponifier\nsaponify\nsaponin\nsaponite\nsapophoric\nsapor\nsaporific\nsaporosity\nsaporous\nSapota\nsapota\nSapotaceae\nsapotaceous\nsapote\nsapotilha\nsapotilla\nsapotoxin\nsappanwood\nsappare\nsapper\nSapphic\nsapphic\nsapphire\nsapphireberry\nsapphired\nsapphirewing\nsapphiric\nsapphirine\nSapphism\nSapphist\nSappho\nsappiness\nsapping\nsapples\nsappy\nsapremia\nsapremic\nsaprine\nsaprocoll\nsaprodil\nsaprodontia\nsaprogenic\nsaprogenous\nSaprolegnia\nSaprolegniaceae\nsaprolegniaceous\nSaprolegniales\nsaprolegnious\nsaprolite\nsaprolitic\nsapropel\nsapropelic\nsapropelite\nsaprophagan\nsaprophagous\nsaprophile\nsaprophilous\nsaprophyte\nsaprophytic\nsaprophytically\nsaprophytism\nsaprostomous\nsaprozoic\nsapsago\nsapskull\nsapsuck\nsapsucker\nsapucaia\nsapucainha\nsapwood\nsapwort\nSaqib\nsar\nSara\nsaraad\nsarabacan\nSarabaite\nsaraband\nSaracen\nSaracenian\nSaracenic\nSaracenical\nSaracenism\nSaracenlike\nSarada\nsaraf\nSarah\nSarakolet\nSarakolle\nSaramaccaner\nSaran\nsarangi\nsarangousty\nSaratoga\nSaratogan\nSaravan\nSarawakese\nsarawakite\nSarawan\nsarbacane\nsarbican\nsarcasm\nsarcasmproof\nsarcast\nsarcastic\nsarcastical\nsarcastically\nsarcasticalness\nsarcasticness\nsarcelle\nsarcenet\nsarcilis\nSarcina\nsarcine\nsarcitis\nsarcle\nsarcler\nsarcoadenoma\nSarcobatus\nsarcoblast\nsarcocarcinoma\nsarcocarp\nsarcocele\nSarcococca\nSarcocolla\nsarcocollin\nsarcocyst\nSarcocystidea\nsarcocystidean\nsarcocystidian\nSarcocystis\nsarcocystoid\nsarcocyte\nsarcode\nsarcoderm\nSarcodes\nsarcodic\nsarcodictyum\nSarcodina\nsarcodous\nsarcoenchondroma\nsarcogenic\nsarcogenous\nsarcoglia\nSarcogyps\nsarcoid\nsarcolactic\nsarcolemma\nsarcolemmic\nsarcolemmous\nsarcoline\nsarcolite\nsarcologic\nsarcological\nsarcologist\nsarcology\nsarcolysis\nsarcolyte\nsarcolytic\nsarcoma\nsarcomatoid\nsarcomatosis\nsarcomatous\nsarcomere\nSarcophaga\nsarcophagal\nsarcophagi\nsarcophagic\nsarcophagid\nSarcophagidae\nsarcophagine\nsarcophagize\nsarcophagous\nsarcophagus\nsarcophagy\nsarcophile\nsarcophilous\nSarcophilus\nsarcoplasm\nsarcoplasma\nsarcoplasmatic\nsarcoplasmic\nsarcoplast\nsarcoplastic\nsarcopoietic\nSarcopsylla\nSarcopsyllidae\nSarcoptes\nsarcoptic\nsarcoptid\nSarcoptidae\nSarcorhamphus\nsarcosepsis\nsarcosepta\nsarcoseptum\nsarcosine\nsarcosis\nsarcosoma\nsarcosperm\nsarcosporid\nSarcosporida\nSarcosporidia\nsarcosporidial\nsarcosporidian\nsarcosporidiosis\nsarcostosis\nsarcostyle\nsarcotheca\nsarcotherapeutics\nsarcotherapy\nsarcotic\nsarcous\nSarcura\nSard\nsard\nsardachate\nSardanapalian\nSardanapalus\nsardel\nSardian\nsardine\nsardinewise\nSardinian\nsardius\nSardoin\nsardonic\nsardonical\nsardonically\nsardonicism\nsardonyx\nsare\nsargasso\nSargassum\nsargassum\nsargo\nSargonic\nSargonid\nSargonide\nsargus\nsari\nsarif\nSarigue\nsarigue\nsarinda\nsarip\nsark\nsarkar\nsarkful\nsarkical\nsarkine\nsarking\nsarkinite\nsarkit\nsarkless\nsarlak\nsarlyk\nSarmatian\nSarmatic\nsarmatier\nsarment\nsarmenta\nsarmentaceous\nsarmentiferous\nsarmentose\nsarmentous\nsarmentum\nsarna\nsarod\nsaron\nsarong\nsaronic\nsaronide\nsaros\nSarothamnus\nSarothra\nsarothrum\nsarpler\nsarpo\nsarra\nSarracenia\nsarracenia\nSarraceniaceae\nsarraceniaceous\nsarracenial\nSarraceniales\nsarraf\nsarrazin\nsarrusophone\nsarrusophonist\nsarsa\nsarsaparilla\nsarsaparillin\nSarsar\nSarsechim\nsarsen\nsarsenet\nSarsi\nSart\nsart\nsartage\nsartain\nSartish\nsartor\nsartoriad\nsartorial\nsartorially\nsartorian\nsartorite\nsartorius\nSaruk\nsarus\nSarvarthasiddha\nsarwan\nSarzan\nsasa\nsasan\nsasani\nsasanqua\nsash\nsashay\nsashery\nsashing\nsashless\nsasin\nsasine\nsaskatoon\nsassaby\nsassafac\nsassafrack\nsassafras\nSassak\nSassan\nSassanian\nSassanid\nSassanidae\nSassanide\nSassenach\nsassolite\nsassy\nsassywood\nSastean\nsat\nsatable\nSatan\nsatan\nSatanael\nSatanas\nsatang\nsatanic\nsatanical\nsatanically\nsatanicalness\nSatanism\nSatanist\nsatanist\nSatanistic\nSatanity\nsatanize\nSatanology\nSatanophany\nSatanophil\nSatanophobia\nSatanship\nsatara\nsatchel\nsatcheled\nsate\nsateen\nsateenwood\nsateless\nsatelles\nsatellitarian\nsatellite\nsatellited\nsatellitesimal\nsatellitian\nsatellitic\nsatellitious\nsatellitium\nsatellitoid\nsatellitory\nsatelloid\nsatiability\nsatiable\nsatiableness\nsatiably\nsatiate\nsatiation\nSatieno\nsatient\nsatiety\nsatin\nsatinbush\nsatine\nsatined\nsatinette\nsatinfin\nsatinflower\nsatinite\nsatinity\nsatinize\nsatinleaf\nsatinlike\nsatinpod\nsatinwood\nsatiny\nsatire\nsatireproof\nsatiric\nsatirical\nsatirically\nsatiricalness\nsatirist\nsatirizable\nsatirize\nsatirizer\nsatisdation\nsatisdiction\nsatisfaction\nsatisfactional\nsatisfactionist\nsatisfactionless\nsatisfactive\nsatisfactorily\nsatisfactoriness\nsatisfactorious\nsatisfactory\nsatisfiable\nsatisfice\nsatisfied\nsatisfiedly\nsatisfiedness\nsatisfier\nsatisfy\nsatisfying\nsatisfyingly\nsatisfyingness\nsatispassion\nsatlijk\nSatrae\nsatrap\nsatrapal\nsatrapess\nsatrapic\nsatrapical\nsatrapy\nsatron\nSatsuma\nsattle\nsattva\nsatura\nsaturability\nsaturable\nsaturant\nsaturate\nsaturated\nsaturater\nsaturation\nsaturator\nSaturday\nSatureia\nSaturn\nSaturnal\nSaturnale\nSaturnalia\nsaturnalia\nSaturnalian\nsaturnalian\nSaturnia\nSaturnian\nsaturnian\nSaturnicentric\nsaturniid\nSaturniidae\nSaturnine\nsaturnine\nsaturninely\nsaturnineness\nsaturninity\nsaturnism\nsaturnity\nsaturnize\nSaturnus\nsatyagrahi\nsatyashodak\nsatyr\nsatyresque\nsatyress\nsatyriasis\nsatyric\nSatyridae\nSatyrinae\nsatyrine\nsatyrion\nsatyrism\nsatyrlike\nsatyromaniac\nsauce\nsauceboat\nsaucebox\nsaucedish\nsauceless\nsauceline\nsaucemaker\nsaucemaking\nsauceman\nsaucepan\nsauceplate\nsaucer\nsaucerful\nsaucerleaf\nsaucerless\nsaucerlike\nsaucily\nsauciness\nsaucy\nSauerbraten\nsauerkraut\nsauf\nsauger\nsaugh\nsaughen\nSaul\nsauld\nsaulie\nsault\nsaulter\nSaulteur\nsaum\nsaumon\nsaumont\nSaumur\nSaumya\nsauna\nsaunders\nsaunderswood\nsaunter\nsaunterer\nsauntering\nsaunteringly\nsauqui\nsaur\nSaura\nSauraseni\nSaurauia\nSaurauiaceae\nsaurel\nSauria\nsaurian\nsauriasis\nsauriosis\nSaurischia\nsaurischian\nSauroctonos\nsaurodont\nSaurodontidae\nSaurognathae\nsaurognathism\nsaurognathous\nSauromatian\nsaurophagous\nsauropod\nSauropoda\nsauropodous\nsauropsid\nSauropsida\nsauropsidan\nsauropsidian\nSauropterygia\nsauropterygian\nSaurornithes\nsaurornithic\nSaururaceae\nsaururaceous\nSaururae\nsaururan\nsaururous\nSaururus\nsaury\nsausage\nsausagelike\nsausinger\nSaussurea\nsaussurite\nsaussuritic\nsaussuritization\nsaussuritize\nsaut\nsaute\nsauterelle\nsauterne\nsauternes\nsauteur\nsauty\nSauvagesia\nsauve\nsauvegarde\nsavable\nsavableness\nsavacu\nsavage\nsavagedom\nsavagely\nsavageness\nsavagerous\nsavagery\nsavagess\nsavagism\nsavagize\nsavanilla\nsavanna\nSavannah\nsavant\nSavara\nsavarin\nsavation\nsave\nsaved\nsaveloy\nsaver\nSavery\nsavin\nsaving\nsavingly\nsavingness\nsavior\nsavioress\nsaviorhood\nsaviorship\nSaviour\nSavitar\nSavitri\nsavola\nSavonarolist\nSavonnerie\nsavor\nsavored\nsavorer\nsavorily\nsavoriness\nsavoringly\nsavorless\nsavorous\nsavorsome\nsavory\nsavour\nsavoy\nSavoyard\nsavoyed\nsavoying\nsavssat\nsavvy\nsaw\nsawah\nSawaiori\nsawali\nSawan\nsawarra\nsawback\nsawbelly\nsawbill\nsawbones\nsawbuck\nsawbwa\nsawder\nsawdust\nsawdustish\nsawdustlike\nsawdusty\nsawed\nsawer\nsawfish\nsawfly\nsawhorse\nsawing\nsawish\nsawlike\nsawmaker\nsawmaking\nsawman\nsawmill\nsawmiller\nsawmilling\nsawmon\nsawmont\nsawn\nSawney\nsawney\nsawsetter\nsawsharper\nsawsmith\nsawt\nsawway\nsawworker\nsawwort\nsawyer\nsax\nsaxatile\nsaxboard\nsaxcornet\nSaxe\nsaxhorn\nSaxicava\nsaxicavous\nSaxicola\nsaxicole\nSaxicolidae\nSaxicolinae\nsaxicoline\nsaxicolous\nSaxifraga\nSaxifragaceae\nsaxifragaceous\nsaxifragant\nsaxifrage\nsaxifragous\nsaxifrax\nsaxigenous\nSaxish\nSaxon\nSaxondom\nSaxonian\nSaxonic\nSaxonical\nSaxonically\nSaxonish\nSaxonism\nSaxonist\nsaxonite\nSaxonization\nSaxonize\nSaxonly\nSaxony\nsaxophone\nsaxophonist\nsaxotromba\nsaxpence\nsaxten\nsaxtie\nsaxtuba\nsay\nsaya\nsayability\nsayable\nsayableness\nSayal\nsayer\nsayette\nsayid\nsaying\nsazen\nSbaikian\nsblood\nsbodikins\nscab\nscabbard\nscabbardless\nscabbed\nscabbedness\nscabbery\nscabbily\nscabbiness\nscabble\nscabbler\nscabbling\nscabby\nscabellum\nscaberulous\nscabid\nscabies\nscabietic\nscabinus\nScabiosa\nscabiosity\nscabious\nscabish\nscabland\nscabrate\nscabrescent\nscabrid\nscabridity\nscabridulous\nscabrities\nscabriusculose\nscabriusculous\nscabrosely\nscabrous\nscabrously\nscabrousness\nscabwort\nscacchic\nscacchite\nscad\nscaddle\nscads\nScaean\nscaff\nscaffer\nscaffery\nscaffie\nscaffle\nscaffold\nscaffoldage\nscaffolder\nscaffolding\nscaglia\nscagliola\nscagliolist\nscala\nscalable\nscalableness\nscalably\nscalage\nscalar\nscalare\nScalaria\nscalarian\nscalariform\nScalariidae\nscalarwise\nscalation\nscalawag\nscalawaggery\nscalawaggy\nscald\nscaldberry\nscalded\nscalder\nscaldfish\nscaldic\nscalding\nscaldweed\nscaldy\nscale\nscaleback\nscalebark\nscaleboard\nscaled\nscaledrake\nscalefish\nscaleful\nscaleless\nscalelet\nscalelike\nscaleman\nscalena\nscalene\nscalenohedral\nscalenohedron\nscalenon\nscalenous\nscalenum\nscalenus\nscalepan\nscaleproof\nscaler\nscales\nscalesman\nscalesmith\nscaletail\nscalewing\nscalewise\nscalework\nscalewort\nscaliger\nscaliness\nscaling\nscall\nscalled\nscallion\nscallola\nscallom\nscallop\nscalloper\nscalloping\nscallopwise\nscalma\nscaloni\nScalops\nScalopus\nscalp\nscalpeen\nscalpel\nscalpellar\nscalpellic\nscalpellum\nscalpellus\nscalper\nscalping\nscalpless\nscalpriform\nscalprum\nscalpture\nscalt\nscaly\nscalytail\nscam\nscamander\nScamandrius\nscamble\nscambler\nscambling\nscamell\nscamler\nscamles\nscammoniate\nscammonin\nscammony\nscammonyroot\nscamp\nscampavia\nscamper\nscamperer\nscamphood\nscamping\nscampingly\nscampish\nscampishly\nscampishness\nscampsman\nscan\nscandal\nscandalization\nscandalize\nscandalizer\nscandalmonger\nscandalmongering\nscandalmongery\nscandalmonging\nscandalous\nscandalously\nscandalousness\nscandalproof\nscandaroon\nscandent\nscandia\nScandian\nscandic\nscandicus\nScandinavia\nScandinavian\nScandinavianism\nscandium\nScandix\nScania\nScanian\nScanic\nscanmag\nscannable\nscanner\nscanning\nscanningly\nscansion\nscansionist\nScansores\nscansorial\nscansorious\nscant\nscanties\nscantily\nscantiness\nscantity\nscantle\nscantling\nscantlinged\nscantly\nscantness\nscanty\nscap\nscape\nscapegallows\nscapegoat\nscapegoatism\nscapegrace\nscapel\nscapeless\nscapement\nscapethrift\nscapha\nScaphander\nScaphandridae\nscaphion\nScaphiopodidae\nScaphiopus\nscaphism\nscaphite\nScaphites\nScaphitidae\nscaphitoid\nscaphocephalic\nscaphocephalism\nscaphocephalous\nscaphocephalus\nscaphocephaly\nscaphocerite\nscaphoceritic\nscaphognathite\nscaphognathitic\nscaphoid\nscapholunar\nscaphopod\nScaphopoda\nscaphopodous\nscapiform\nscapigerous\nscapoid\nscapolite\nscapolitization\nscapose\nscapple\nscappler\nscapula\nscapulalgia\nscapular\nscapulare\nscapulary\nscapulated\nscapulectomy\nscapulet\nscapulimancy\nscapuloaxillary\nscapulobrachial\nscapuloclavicular\nscapulocoracoid\nscapulodynia\nscapulohumeral\nscapulopexy\nscapuloradial\nscapulospinal\nscapulothoracic\nscapuloulnar\nscapulovertebral\nscapus\nscar\nscarab\nscarabaean\nscarabaei\nscarabaeid\nScarabaeidae\nscarabaeidoid\nscarabaeiform\nScarabaeinae\nscarabaeoid\nscarabaeus\nscarabee\nscaraboid\nScaramouch\nscaramouch\nscarce\nscarcelins\nscarcely\nscarcement\nscarcen\nscarceness\nscarcity\nscare\nscarebabe\nscarecrow\nscarecrowish\nscarecrowy\nscareful\nscarehead\nscaremonger\nscaremongering\nscareproof\nscarer\nscaresome\nscarf\nscarface\nscarfed\nscarfer\nscarflike\nscarfpin\nscarfskin\nscarfwise\nscarfy\nscarid\nScaridae\nscarification\nscarificator\nscarifier\nscarify\nscarily\nscariose\nscarious\nscarlatina\nscarlatinal\nscarlatiniform\nscarlatinoid\nscarlatinous\nscarless\nscarlet\nscarletberry\nscarletseed\nscarlety\nscarman\nscarn\nscaroid\nscarp\nscarpines\nscarping\nscarpment\nscarproof\nscarred\nscarrer\nscarring\nscarry\nscart\nscarth\nScarus\nscarus\nscarved\nscary\nscase\nscasely\nscat\nscatch\nscathe\nscatheful\nscatheless\nscathelessly\nscathing\nscathingly\nScaticook\nscatland\nscatologia\nscatologic\nscatological\nscatology\nscatomancy\nscatophagid\nScatophagidae\nscatophagoid\nscatophagous\nscatophagy\nscatoscopy\nscatter\nscatterable\nscatteration\nscatteraway\nscatterbrain\nscatterbrained\nscatterbrains\nscattered\nscatteredly\nscatteredness\nscatterer\nscattergood\nscattering\nscatteringly\nscatterling\nscattermouch\nscattery\nscatty\nscatula\nscaturient\nscaul\nscaum\nscaup\nscauper\nscaur\nscaurie\nscaut\nscavage\nscavel\nscavenage\nscavenge\nscavenger\nscavengerism\nscavengership\nscavengery\nscavenging\nscaw\nscawd\nscawl\nscazon\nscazontic\nsceat\nscelalgia\nscelerat\nscelidosaur\nscelidosaurian\nscelidosauroid\nScelidosaurus\nScelidotherium\nSceliphron\nsceloncus\nSceloporus\nscelotyrbe\nscena\nscenario\nscenarioist\nscenarioization\nscenarioize\nscenarist\nscenarization\nscenarize\nscenary\nscend\nscene\nscenecraft\nScenedesmus\nsceneful\nsceneman\nscenery\nsceneshifter\nscenewright\nscenic\nscenical\nscenically\nscenist\nscenite\nscenograph\nscenographer\nscenographic\nscenographical\nscenographically\nscenography\nScenopinidae\nscent\nscented\nscenter\nscentful\nscenting\nscentless\nscentlessness\nscentproof\nscentwood\nscepsis\nscepter\nscepterdom\nsceptered\nscepterless\nsceptic\nsceptral\nsceptropherous\nsceptrosophy\nsceptry\nscerne\nsceuophorion\nsceuophylacium\nsceuophylax\nschaapsteker\nSchaefferia\nschairerite\nschalmei\nschalmey\nschalstein\nschanz\nschapbachite\nschappe\nschapped\nschapping\nscharf\nScharlachberger\nschatchen\nScheat\nSchedar\nschediasm\nschediastic\nSchedius\nschedular\nschedulate\nschedule\nschedulize\nscheelite\nscheffel\nschefferite\nschelling\nSchellingian\nSchellingianism\nSchellingism\nschelly\nscheltopusik\nschema\nschemata\nschematic\nschematically\nschematism\nschematist\nschematization\nschematize\nschematizer\nschematogram\nschematograph\nschematologetically\nschematomancy\nschematonics\nscheme\nschemeful\nschemeless\nschemer\nschemery\nscheming\nschemingly\nschemist\nschemy\nschene\nschepel\nschepen\nscherm\nscherzando\nscherzi\nscherzo\nschesis\nScheuchzeria\nScheuchzeriaceae\nscheuchzeriaceous\nschiavone\nSchiedam\nschiffli\nschiller\nschillerfels\nschillerization\nschillerize\nschilling\nschimmel\nschindylesis\nschindyletic\nSchinus\nschipperke\nSchisandra\nSchisandraceae\nschism\nschisma\nschismatic\nschismatical\nschismatically\nschismaticalness\nschismatism\nschismatist\nschismatize\nschismic\nschismless\nschist\nschistaceous\nschistic\nschistocelia\nschistocephalus\nSchistocerca\nschistocoelia\nschistocormia\nschistocormus\nschistocyte\nschistocytosis\nschistoglossia\nschistoid\nschistomelia\nschistomelus\nschistoprosopia\nschistoprosopus\nschistorrhachis\nschistoscope\nschistose\nschistosity\nSchistosoma\nschistosome\nschistosomia\nschistosomiasis\nschistosomus\nschistosternia\nschistothorax\nschistous\nschistus\nSchizaea\nSchizaeaceae\nschizaeaceous\nSchizanthus\nschizanthus\nschizaxon\nschizocarp\nschizocarpic\nschizocarpous\nschizochroal\nschizocoele\nschizocoelic\nschizocoelous\nschizocyte\nschizocytosis\nschizodinic\nschizogamy\nschizogenesis\nschizogenetic\nschizogenetically\nschizogenic\nschizogenous\nschizogenously\nschizognath\nSchizognathae\nschizognathism\nschizognathous\nschizogonic\nschizogony\nSchizogregarinae\nschizogregarine\nSchizogregarinida\nschizoid\nschizoidism\nSchizolaenaceae\nschizolaenaceous\nschizolite\nschizolysigenous\nSchizomeria\nschizomycete\nSchizomycetes\nschizomycetic\nschizomycetous\nschizomycosis\nSchizonemertea\nschizonemertean\nschizonemertine\nSchizoneura\nSchizonotus\nschizont\nschizopelmous\nSchizopetalon\nschizophasia\nSchizophragma\nschizophrene\nschizophrenia\nschizophreniac\nschizophrenic\nSchizophyceae\nSchizophyllum\nSchizophyta\nschizophyte\nschizophytic\nschizopod\nSchizopoda\nschizopodal\nschizopodous\nschizorhinal\nschizospore\nschizostele\nschizostelic\nschizostely\nschizothecal\nschizothoracic\nschizothyme\nschizothymia\nschizothymic\nschizotrichia\nSchizotrypanum\nschiztic\nSchlauraffenland\nSchleichera\nschlemiel\nschlemihl\nschlenter\nschlieren\nschlieric\nschloop\nSchmalkaldic\nschmaltz\nschmelz\nschmelze\nschnabel\nSchnabelkanne\nschnapper\nschnapps\nschnauzer\nschneider\nSchneiderian\nschnitzel\nschnorchel\nschnorkel\nschnorrer\nscho\nschochat\nschochet\nschoenobatic\nschoenobatist\nSchoenocaulon\nSchoenus\nschoenus\nSchoharie\nschola\nscholae\nscholaptitude\nscholar\nscholarch\nscholardom\nscholarian\nscholarism\nscholarless\nscholarlike\nscholarliness\nscholarly\nscholarship\nscholasm\nscholastic\nscholastical\nscholastically\nscholasticate\nscholasticism\nscholasticly\nscholia\nscholiast\nscholiastic\nscholion\nscholium\nSchomburgkia\nschone\nschonfelsite\nSchoodic\nSchool\nschool\nschoolable\nschoolbag\nschoolbook\nschoolbookish\nschoolboy\nschoolboydom\nschoolboyhood\nschoolboyish\nschoolboyishly\nschoolboyishness\nschoolboyism\nschoolbutter\nschoolcraft\nschooldame\nschooldom\nschooled\nschoolery\nschoolfellow\nschoolfellowship\nschoolful\nschoolgirl\nschoolgirlhood\nschoolgirlish\nschoolgirlishly\nschoolgirlishness\nschoolgirlism\nschoolgirly\nschoolgoing\nschoolhouse\nschooling\nschoolingly\nschoolish\nschoolkeeper\nschoolkeeping\nschoolless\nschoollike\nschoolmaam\nschoolmaamish\nschoolmaid\nschoolman\nschoolmaster\nschoolmasterhood\nschoolmastering\nschoolmasterish\nschoolmasterishly\nschoolmasterishness\nschoolmasterism\nschoolmasterly\nschoolmastership\nschoolmastery\nschoolmate\nschoolmiss\nschoolmistress\nschoolmistressy\nschoolroom\nschoolteacher\nschoolteacherish\nschoolteacherly\nschoolteachery\nschoolteaching\nschooltide\nschooltime\nschoolward\nschoolwork\nschoolyard\nschoon\nschooner\nSchopenhauereanism\nSchopenhauerian\nSchopenhauerism\nschoppen\nschorenbergite\nschorl\nschorlaceous\nschorlomite\nschorlous\nschorly\nschottische\nschottish\nschout\nschraubthaler\nSchrebera\nschreiner\nschreinerize\nschriesheimite\nSchrund\nschtoff\nschuh\nschuhe\nschuit\nschule\nschultenite\nschungite\nschuss\nschute\nschwa\nschwabacher\nSchwalbea\nschwarz\nSchwarzian\nschweizer\nschweizerkase\nSchwendenerian\nSchwenkfelder\nSchwenkfeldian\nSciadopitys\nSciaena\nsciaenid\nSciaenidae\nsciaeniform\nSciaeniformes\nsciaenoid\nscialytic\nsciamachy\nScian\nsciapod\nsciapodous\nSciara\nsciarid\nSciaridae\nSciarinae\nsciatheric\nsciatherical\nsciatherically\nsciatic\nsciatica\nsciatical\nsciatically\nsciaticky\nscibile\nscience\nscienced\nscient\nsciential\nscientician\nscientific\nscientifical\nscientifically\nscientificalness\nscientificogeographical\nscientificohistorical\nscientificophilosophical\nscientificopoetic\nscientificoreligious\nscientificoromantic\nscientintically\nscientism\nScientist\nscientist\nscientistic\nscientistically\nscientize\nscientolism\nscilicet\nScilla\nscillain\nscillipicrin\nScillitan\nscillitin\nscillitoxin\nScillonian\nscimitar\nscimitared\nscimitarpod\nscincid\nScincidae\nscincidoid\nscinciform\nscincoid\nscincoidian\nScincomorpha\nScincus\nscind\nsciniph\nscintilla\nscintillant\nscintillantly\nscintillate\nscintillating\nscintillatingly\nscintillation\nscintillator\nscintillescent\nscintillize\nscintillometer\nscintilloscope\nscintillose\nscintillously\nscintle\nscintler\nscintling\nsciograph\nsciographic\nsciography\nsciolism\nsciolist\nsciolistic\nsciolous\nsciomachiology\nsciomachy\nsciomancy\nsciomantic\nscion\nsciophilous\nsciophyte\nscioptic\nsciopticon\nscioptics\nscioptric\nsciosophist\nsciosophy\nSciot\nscioterical\nscioterique\nsciotheism\nsciotheric\nsciotherical\nsciotherically\nscious\nscirenga\nScirophoria\nScirophorion\nScirpus\nscirrhi\nscirrhogastria\nscirrhoid\nscirrhoma\nscirrhosis\nscirrhous\nscirrhus\nscirrosity\nscirtopod\nScirtopoda\nscirtopodous\nscissel\nscissible\nscissile\nscission\nscissiparity\nscissor\nscissorbill\nscissorbird\nscissorer\nscissoring\nscissorium\nscissorlike\nscissorlikeness\nscissors\nscissorsbird\nscissorsmith\nscissorstail\nscissortail\nscissorwise\nscissura\nscissure\nScissurella\nscissurellid\nScissurellidae\nScitaminales\nScitamineae\nsciurid\nSciuridae\nsciurine\nsciuroid\nsciuromorph\nSciuromorpha\nsciuromorphic\nSciuropterus\nSciurus\nsclaff\nsclate\nsclater\nSclav\nSclavonian\nsclaw\nscler\nsclera\nscleral\nscleranth\nScleranthaceae\nScleranthus\nscleratogenous\nsclere\nsclerectasia\nsclerectomy\nscleredema\nsclereid\nsclerema\nsclerencephalia\nsclerenchyma\nsclerenchymatous\nsclerenchyme\nsclererythrin\nscleretinite\nScleria\nscleriasis\nsclerification\nsclerify\nsclerite\nscleritic\nscleritis\nsclerized\nsclerobase\nsclerobasic\nscleroblast\nscleroblastema\nscleroblastemic\nscleroblastic\nsclerocauly\nsclerochorioiditis\nsclerochoroiditis\nscleroconjunctival\nscleroconjunctivitis\nsclerocornea\nsclerocorneal\nsclerodactylia\nsclerodactyly\nscleroderm\nScleroderma\nscleroderma\nSclerodermaceae\nSclerodermata\nSclerodermatales\nsclerodermatitis\nsclerodermatous\nSclerodermi\nsclerodermia\nsclerodermic\nsclerodermite\nsclerodermitic\nsclerodermitis\nsclerodermous\nsclerogen\nSclerogeni\nsclerogenoid\nsclerogenous\nscleroid\nscleroiritis\nsclerokeratitis\nsclerokeratoiritis\nscleroma\nscleromata\nscleromeninx\nscleromere\nsclerometer\nsclerometric\nscleronychia\nscleronyxis\nScleropages\nScleroparei\nsclerophthalmia\nsclerophyll\nsclerophyllous\nsclerophylly\nscleroprotein\nsclerosal\nsclerosarcoma\nScleroscope\nscleroscope\nsclerose\nsclerosed\nscleroseptum\nsclerosis\nscleroskeletal\nscleroskeleton\nSclerospora\nsclerostenosis\nSclerostoma\nsclerostomiasis\nsclerotal\nsclerote\nsclerotia\nsclerotial\nsclerotic\nsclerotica\nsclerotical\nscleroticectomy\nscleroticochorioiditis\nscleroticochoroiditis\nscleroticonyxis\nscleroticotomy\nSclerotinia\nsclerotinial\nsclerotiniose\nsclerotioid\nsclerotitic\nsclerotitis\nsclerotium\nsclerotized\nsclerotoid\nsclerotome\nsclerotomic\nsclerotomy\nsclerous\nscleroxanthin\nsclerozone\nscliff\nsclim\nsclimb\nscoad\nscob\nscobby\nscobicular\nscobiform\nscobs\nscoff\nscoffer\nscoffery\nscoffing\nscoffingly\nscoffingstock\nscofflaw\nscog\nscoggan\nscogger\nscoggin\nscogginism\nscogginist\nscoinson\nscoke\nscolb\nscold\nscoldable\nscoldenore\nscolder\nscolding\nscoldingly\nscoleces\nscoleciasis\nscolecid\nScolecida\nscoleciform\nscolecite\nscolecoid\nscolecology\nscolecophagous\nscolecospore\nscoleryng\nscolex\nScolia\nscolia\nscolices\nscoliid\nScoliidae\nscoliograptic\nscoliokyposis\nscoliometer\nscolion\nscoliorachitic\nscoliosis\nscoliotic\nscoliotone\nscolite\nscollop\nscolog\nscolopaceous\nScolopacidae\nscolopacine\nScolopax\nScolopendra\nscolopendra\nScolopendrella\nScolopendrellidae\nscolopendrelloid\nscolopendrid\nScolopendridae\nscolopendriform\nscolopendrine\nScolopendrium\nscolopendroid\nscolophore\nscolopophore\nScolymus\nscolytid\nScolytidae\nscolytoid\nScolytus\nScomber\nscomberoid\nScombresocidae\nScombresox\nscombrid\nScombridae\nscombriform\nScombriformes\nscombrine\nscombroid\nScombroidea\nscombroidean\nscombrone\nsconce\nsconcer\nsconcheon\nsconcible\nscone\nscoon\nscoop\nscooped\nscooper\nscoopful\nscooping\nscoopingly\nscoot\nscooter\nscopa\nscoparin\nscoparius\nscopate\nscope\nscopeless\nscopelid\nScopelidae\nscopeliform\nscopelism\nscopeloid\nScopelus\nscopet\nscopic\nScopidae\nscopiferous\nscopiform\nscopiformly\nscopine\nscopiped\nscopola\nscopolamine\nscopoleine\nscopoletin\nscopoline\nscopperil\nscops\nscoptical\nscoptically\nscoptophilia\nscoptophiliac\nscoptophilic\nscoptophobia\nscopula\nScopularia\nscopularian\nscopulate\nscopuliferous\nscopuliform\nscopuliped\nScopulipedes\nscopulite\nscopulous\nscopulousness\nScopus\nscorbute\nscorbutic\nscorbutical\nscorbutically\nscorbutize\nscorbutus\nscorch\nscorched\nscorcher\nscorching\nscorchingly\nscorchingness\nscorchproof\nscore\nscoreboard\nscorebook\nscored\nscorekeeper\nscorekeeping\nscoreless\nscorer\nscoria\nscoriac\nscoriaceous\nscoriae\nscorification\nscorifier\nscoriform\nscorify\nscoring\nscorious\nscorn\nscorned\nscorner\nscornful\nscornfully\nscornfulness\nscorningly\nscornproof\nscorny\nscorodite\nScorpaena\nscorpaenid\nScorpaenidae\nscorpaenoid\nscorpene\nscorper\nScorpidae\nScorpididae\nScorpii\nScorpiid\nScorpio\nscorpioid\nscorpioidal\nScorpioidea\nscorpion\nScorpiones\nscorpionic\nscorpionid\nScorpionida\nScorpionidea\nScorpionis\nscorpionweed\nscorpionwort\nScorpiurus\nScorpius\nscorse\nscortation\nscortatory\nScorzonera\nScot\nscot\nscotale\nScotch\nscotch\nscotcher\nScotchery\nScotchification\nScotchify\nScotchiness\nscotching\nScotchman\nscotchman\nScotchness\nScotchwoman\nScotchy\nscote\nscoter\nscoterythrous\nScotia\nscotia\nScotic\nscotino\nScotism\nScotist\nScotistic\nScotistical\nScotize\nScotlandwards\nscotodinia\nscotogram\nscotograph\nscotographic\nscotography\nscotoma\nscotomata\nscotomatic\nscotomatical\nscotomatous\nscotomia\nscotomic\nscotomy\nscotophobia\nscotopia\nscotopic\nscotoscope\nscotosis\nScots\nScotsman\nScotswoman\nScott\nScotticism\nScotticize\nScottie\nScottification\nScottify\nScottish\nScottisher\nScottishly\nScottishman\nScottishness\nScotty\nscouch\nscouk\nscoundrel\nscoundreldom\nscoundrelish\nscoundrelism\nscoundrelly\nscoundrelship\nscoup\nscour\nscourage\nscoured\nscourer\nscouress\nscourfish\nscourge\nscourger\nscourging\nscourgingly\nscouriness\nscouring\nscourings\nscourway\nscourweed\nscourwort\nscoury\nscouse\nscout\nscoutcraft\nscoutdom\nscouter\nscouth\nscouther\nscouthood\nscouting\nscoutingly\nscoutish\nscoutmaster\nscoutwatch\nscove\nscovel\nscovillite\nscovy\nscow\nscowbank\nscowbanker\nscowder\nscowl\nscowler\nscowlful\nscowling\nscowlingly\nscowlproof\nscowman\nscrab\nscrabble\nscrabbled\nscrabbler\nscrabe\nscrae\nscraffle\nscrag\nscragged\nscraggedly\nscraggedness\nscragger\nscraggily\nscragginess\nscragging\nscraggled\nscraggling\nscraggly\nscraggy\nscraily\nscram\nscramasax\nscramble\nscramblement\nscrambler\nscrambling\nscramblingly\nscrambly\nscrampum\nscran\nscranch\nscrank\nscranky\nscrannel\nscranning\nscranny\nscrap\nscrapable\nscrapbook\nscrape\nscrapeage\nscraped\nscrapepenny\nscraper\nscrapie\nscraping\nscrapingly\nscrapler\nscraplet\nscrapling\nscrapman\nscrapmonger\nscrappage\nscrapped\nscrapper\nscrappet\nscrappily\nscrappiness\nscrapping\nscrappingly\nscrapple\nscrappler\nscrappy\nscrapworks\nscrapy\nscrat\nscratch\nscratchable\nscratchably\nscratchback\nscratchboard\nscratchbrush\nscratchcard\nscratchcarding\nscratchcat\nscratcher\nscratches\nscratchification\nscratchiness\nscratching\nscratchingly\nscratchless\nscratchlike\nscratchman\nscratchproof\nscratchweed\nscratchwork\nscratchy\nscrath\nscratter\nscrattle\nscrattling\nscrauch\nscrauchle\nscraunch\nscraw\nscrawk\nscrawl\nscrawler\nscrawliness\nscrawly\nscrawm\nscrawnily\nscrawniness\nscrawny\nscray\nscraze\nscreak\nscreaking\nscreaky\nscream\nscreamer\nscreaminess\nscreaming\nscreamingly\nscreamproof\nscreamy\nscree\nscreech\nscreechbird\nscreecher\nscreechily\nscreechiness\nscreeching\nscreechingly\nscreechy\nscreed\nscreek\nscreel\nscreeman\nscreen\nscreenable\nscreenage\nscreencraft\nscreendom\nscreened\nscreener\nscreening\nscreenless\nscreenlike\nscreenman\nscreenplay\nscreensman\nscreenwise\nscreenwork\nscreenwriter\nscreeny\nscreet\nscreeve\nscreeved\nscreever\nscreich\nscreigh\nscreve\nscrever\nscrew\nscrewable\nscrewage\nscrewball\nscrewbarrel\nscrewdrive\nscrewdriver\nscrewed\nscrewer\nscrewhead\nscrewiness\nscrewing\nscrewish\nscrewless\nscrewlike\nscrewman\nscrewmatics\nscrewship\nscrewsman\nscrewstem\nscrewstock\nscrewwise\nscrewworm\nscrewy\nscribable\nscribacious\nscribaciousness\nscribal\nscribatious\nscribatiousness\nscribblage\nscribblative\nscribblatory\nscribble\nscribbleable\nscribbled\nscribbledom\nscribbleism\nscribblemania\nscribblement\nscribbleomania\nscribbler\nscribbling\nscribblingly\nscribbly\nscribe\nscriber\nscribeship\nscribing\nscribism\nscribophilous\nscride\nscrieve\nscriever\nscriggle\nscriggler\nscriggly\nscrike\nscrim\nscrime\nscrimer\nscrimmage\nscrimmager\nscrimp\nscrimped\nscrimpily\nscrimpiness\nscrimpingly\nscrimply\nscrimpness\nscrimption\nscrimpy\nscrimshander\nscrimshandy\nscrimshank\nscrimshanker\nscrimshaw\nscrimshon\nscrimshorn\nscrin\nscrinch\nscrine\nscringe\nscriniary\nscrip\nscripee\nscripless\nscrippage\nscript\nscription\nscriptitious\nscriptitiously\nscriptitory\nscriptive\nscriptor\nscriptorial\nscriptorium\nscriptory\nscriptural\nScripturalism\nscripturalism\nScripturalist\nscripturalist\nScripturality\nscripturality\nscripturalize\nscripturally\nscripturalness\nScripturarian\nScripture\nscripture\nScriptured\nscriptured\nScriptureless\nscripturiency\nscripturient\nScripturism\nscripturism\nScripturist\nscripula\nscripulum\nscritch\nscritoire\nscrivaille\nscrive\nscrivello\nscriven\nscrivener\nscrivenership\nscrivenery\nscrivening\nscrivenly\nscriver\nscrob\nscrobble\nscrobe\nscrobicula\nscrobicular\nscrobiculate\nscrobiculated\nscrobicule\nscrobiculus\nscrobis\nscrod\nscrodgill\nscroff\nscrofula\nscrofularoot\nscrofulaweed\nscrofulide\nscrofulism\nscrofulitic\nscrofuloderm\nscrofuloderma\nscrofulorachitic\nscrofulosis\nscrofulotuberculous\nscrofulous\nscrofulously\nscrofulousness\nscrog\nscroggy\nscrolar\nscroll\nscrolled\nscrollery\nscrollhead\nscrollwise\nscrollwork\nscrolly\nscronach\nscroo\nscrooch\nscrooge\nscroop\nScrophularia\nScrophulariaceae\nscrophulariaceous\nscrota\nscrotal\nscrotectomy\nscrotiform\nscrotitis\nscrotocele\nscrotofemoral\nscrotum\nscrouge\nscrouger\nscrounge\nscrounger\nscrounging\nscrout\nscrow\nscroyle\nscrub\nscrubbable\nscrubbed\nscrubber\nscrubbery\nscrubbily\nscrubbiness\nscrubbird\nscrubbly\nscrubboard\nscrubby\nscrubgrass\nscrubland\nscrubwood\nscruf\nscruff\nscruffle\nscruffman\nscruffy\nscruft\nscrum\nscrummage\nscrummager\nscrump\nscrumple\nscrumption\nscrumptious\nscrumptiously\nscrumptiousness\nscrunch\nscrunchy\nscrunge\nscrunger\nscrunt\nscruple\nscrupleless\nscrupler\nscruplesome\nscruplesomeness\nscrupula\nscrupular\nscrupuli\nscrupulist\nscrupulosity\nscrupulous\nscrupulously\nscrupulousness\nscrupulum\nscrupulus\nscrush\nscrutability\nscrutable\nscrutate\nscrutation\nscrutator\nscrutatory\nscrutinant\nscrutinate\nscrutineer\nscrutinization\nscrutinize\nscrutinizer\nscrutinizingly\nscrutinous\nscrutinously\nscrutiny\nscruto\nscrutoire\nscruze\nscry\nscryer\nscud\nscuddaler\nscuddawn\nscudder\nscuddick\nscuddle\nscuddy\nscudi\nscudler\nscudo\nscuff\nscuffed\nscuffer\nscuffle\nscuffler\nscufflingly\nscuffly\nscuffy\nscuft\nscufter\nscug\nscuggery\nsculch\nsculduddery\nscull\nsculler\nscullery\nscullful\nscullion\nscullionish\nscullionize\nscullionship\nscullog\nsculp\nsculper\nsculpin\nsculpt\nsculptile\nsculptitory\nsculptograph\nsculptography\nSculptor\nsculptor\nSculptorid\nsculptress\nsculptural\nsculpturally\nsculpturation\nsculpture\nsculptured\nsculpturer\nsculpturesque\nsculpturesquely\nsculpturesqueness\nsculpturing\nsculsh\nscum\nscumber\nscumble\nscumbling\nscumboard\nscumfish\nscumless\nscumlike\nscummed\nscummer\nscumming\nscummy\nscumproof\nscun\nscuncheon\nscunder\nscunner\nscup\nscupful\nscuppaug\nscupper\nscuppernong\nscuppet\nscuppler\nscur\nscurdy\nscurf\nscurfer\nscurfily\nscurfiness\nscurflike\nscurfy\nscurrier\nscurrile\nscurrilist\nscurrility\nscurrilize\nscurrilous\nscurrilously\nscurrilousness\nscurry\nscurvied\nscurvily\nscurviness\nscurvish\nscurvy\nscurvyweed\nscusation\nscuse\nscut\nscuta\nscutage\nscutal\nscutate\nscutated\nscutatiform\nscutation\nscutch\nscutcheon\nscutcheoned\nscutcheonless\nscutcheonlike\nscutcheonwise\nscutcher\nscutching\nscute\nscutel\nscutella\nscutellae\nscutellar\nScutellaria\nscutellarin\nscutellate\nscutellated\nscutellation\nscutellerid\nScutelleridae\nscutelliform\nscutelligerous\nscutelliplantar\nscutelliplantation\nscutellum\nscutibranch\nScutibranchia\nscutibranchian\nscutibranchiate\nscutifer\nscutiferous\nscutiform\nscutiger\nScutigera\nscutigeral\nScutigeridae\nscutigerous\nscutiped\nscutter\nscuttle\nscuttlebutt\nscuttleful\nscuttleman\nscuttler\nscuttling\nscuttock\nscutty\nscutula\nscutular\nscutulate\nscutulated\nscutulum\nScutum\nscutum\nscybala\nscybalous\nscybalum\nscye\nscyelite\nScyld\nScylla\nScyllaea\nScyllaeidae\nscyllarian\nScyllaridae\nscyllaroid\nScyllarus\nScyllidae\nScylliidae\nscyllioid\nScylliorhinidae\nscylliorhinoid\nScylliorhinus\nscyllite\nscyllitol\nScyllium\nscypha\nscyphae\nscyphate\nscyphi\nscyphiferous\nscyphiform\nscyphiphorous\nscyphistoma\nscyphistomae\nscyphistomoid\nscyphistomous\nscyphoi\nscyphomancy\nScyphomedusae\nscyphomedusan\nscyphomedusoid\nscyphophore\nScyphophori\nscyphophorous\nscyphopolyp\nscyphose\nscyphostoma\nScyphozoa\nscyphozoan\nscyphula\nscyphulus\nscyphus\nscyt\nscytale\nScyth\nscythe\nscytheless\nscythelike\nscytheman\nscythesmith\nscythestone\nscythework\nScythian\nScythic\nScythize\nscytitis\nscytoblastema\nscytodepsic\nScytonema\nScytonemataceae\nscytonemataceous\nscytonematoid\nscytonematous\nScytopetalaceae\nscytopetalaceous\nScytopetalum\nsdeath\nsdrucciola\nse\nsea\nseabeach\nseabeard\nSeabee\nseaberry\nseaboard\nseaborderer\nseabound\nseacannie\nseacatch\nseacoast\nseaconny\nseacraft\nseacrafty\nseacunny\nseadog\nseadrome\nseafardinger\nseafare\nseafarer\nseafaring\nseaflood\nseaflower\nseafolk\nSeaforthia\nseafowl\nSeaghan\nseagirt\nseagoer\nseagoing\nseah\nseahound\nseak\nseal\nsealable\nsealant\nsealch\nsealed\nsealer\nsealery\nsealess\nsealet\nsealette\nsealflower\nsealike\nsealine\nsealing\nsealless\nseallike\nsealskin\nsealwort\nSealyham\nseam\nseaman\nseamancraft\nseamanite\nseamanlike\nseamanly\nseamanship\nseamark\nSeamas\nseambiter\nseamed\nseamer\nseaminess\nseaming\nseamless\nseamlessly\nseamlessness\nseamlet\nseamlike\nseamost\nseamrend\nseamrog\nseamster\nseamstress\nSeamus\nseamy\nSean\nseance\nseapiece\nseaplane\nseaport\nseaquake\nsear\nsearce\nsearcer\nsearch\nsearchable\nsearchableness\nsearchant\nsearcher\nsearcheress\nsearcherlike\nsearchership\nsearchful\nsearching\nsearchingly\nsearchingness\nsearchless\nsearchlight\nsearchment\nsearcloth\nseared\nsearedness\nsearer\nsearing\nsearlesite\nsearness\nseary\nSeasan\nseascape\nseascapist\nseascout\nseascouting\nseashine\nseashore\nseasick\nseasickness\nseaside\nseasider\nseason\nseasonable\nseasonableness\nseasonably\nseasonal\nseasonality\nseasonally\nseasonalness\nseasoned\nseasonedly\nseasoner\nseasoning\nseasoninglike\nseasonless\nseastrand\nseastroke\nseat\nseatang\nseated\nseater\nseathe\nseating\nseatless\nseatrain\nseatron\nseatsman\nseatwork\nseave\nseavy\nseawant\nseaward\nseawardly\nseaware\nseaway\nseaweed\nseaweedy\nseawife\nseawoman\nseaworn\nseaworthiness\nseaworthy\nseax\nSeba\nsebacate\nsebaceous\nsebacic\nsebait\nSebastian\nsebastianite\nSebastichthys\nSebastodes\nsebate\nsebesten\nsebiferous\nsebific\nsebilla\nsebiparous\nsebkha\nsebolith\nseborrhagia\nseborrhea\nseborrheal\nseborrheic\nseborrhoic\nSebright\nsebum\nsebundy\nsec\nsecability\nsecable\nSecale\nsecalin\nsecaline\nsecalose\nSecamone\nsecancy\nsecant\nsecantly\nsecateur\nsecede\nSeceder\nseceder\nsecern\nsecernent\nsecernment\nsecesh\nsecesher\nSecessia\nSecession\nsecession\nSecessional\nsecessional\nsecessionalist\nSecessiondom\nsecessioner\nsecessionism\nsecessionist\nsech\nSechium\nSechuana\nseck\nSeckel\nseclude\nsecluded\nsecludedly\nsecludedness\nsecluding\nsecluse\nseclusion\nseclusionist\nseclusive\nseclusively\nseclusiveness\nsecodont\nsecohm\nsecohmmeter\nsecond\nsecondar\nsecondarily\nsecondariness\nsecondary\nseconde\nseconder\nsecondhand\nsecondhanded\nsecondhandedly\nsecondhandedness\nsecondly\nsecondment\nsecondness\nsecos\nsecpar\nsecque\nsecre\nsecrecy\nsecret\nsecreta\nsecretage\nsecretagogue\nsecretarial\nsecretarian\nSecretariat\nsecretariat\nsecretariate\nsecretary\nsecretaryship\nsecrete\nsecretin\nsecretion\nsecretional\nsecretionary\nsecretitious\nsecretive\nsecretively\nsecretiveness\nsecretly\nsecretmonger\nsecretness\nsecreto\nsecretomotor\nsecretor\nsecretory\nsecretum\nsect\nsectarial\nsectarian\nsectarianism\nsectarianize\nsectarianly\nsectarism\nsectarist\nsectary\nsectator\nsectile\nsectility\nsection\nsectional\nsectionalism\nsectionalist\nsectionality\nsectionalization\nsectionalize\nsectionally\nsectionary\nsectionist\nsectionize\nsectioplanography\nsectism\nsectist\nsectiuncle\nsective\nsector\nsectoral\nsectored\nsectorial\nsectroid\nsectwise\nsecular\nsecularism\nsecularist\nsecularistic\nsecularity\nsecularization\nsecularize\nsecularizer\nsecularly\nsecularness\nsecund\nsecundate\nsecundation\nsecundiflorous\nsecundigravida\nsecundine\nsecundipara\nsecundiparity\nsecundiparous\nsecundly\nsecundogeniture\nsecundoprimary\nsecundus\nsecurable\nsecurance\nsecure\nsecurely\nsecurement\nsecureness\nsecurer\nsecuricornate\nsecurifer\nSecurifera\nsecuriferous\nsecuriform\nSecurigera\nsecurigerous\nsecuritan\nsecurity\nSedaceae\nSedan\nsedan\nSedang\nsedanier\nSedat\nsedate\nsedately\nsedateness\nsedation\nsedative\nsedent\nSedentaria\nsedentarily\nsedentariness\nsedentary\nsedentation\nSeder\nsederunt\nsedge\nsedged\nsedgelike\nsedging\nsedgy\nsedigitate\nsedigitated\nsedile\nsedilia\nsediment\nsedimental\nsedimentarily\nsedimentary\nsedimentate\nsedimentation\nsedimentous\nsedimetric\nsedimetrical\nsedition\nseditionary\nseditionist\nseditious\nseditiously\nseditiousness\nsedjadeh\nSedovic\nseduce\nseduceable\nseducee\nseducement\nseducer\nseducible\nseducing\nseducingly\nseducive\nseduct\nseduction\nseductionist\nseductive\nseductively\nseductiveness\nseductress\nsedulity\nsedulous\nsedulously\nsedulousness\nSedum\nsedum\nsee\nseeable\nseeableness\nSeebeck\nseecatch\nseech\nseed\nseedage\nseedbed\nseedbird\nseedbox\nseedcake\nseedcase\nseedeater\nseeded\nSeeder\nseeder\nseedful\nseedgall\nseedily\nseediness\nseedkin\nseedless\nseedlessness\nseedlet\nseedlike\nseedling\nseedlip\nseedman\nseedness\nseedsman\nseedstalk\nseedtime\nseedy\nseege\nseeing\nseeingly\nseeingness\nseek\nseeker\nSeekerism\nseeking\nseel\nseelful\nseely\nseem\nseemable\nseemably\nseemer\nseeming\nseemingly\nseemingness\nseemless\nseemlihead\nseemlily\nseemliness\nseemly\nseen\nseenie\nSeenu\nseep\nseepage\nseeped\nseepweed\nseepy\nseer\nseerband\nseercraft\nseeress\nseerfish\nseerhand\nseerhood\nseerlike\nseerpaw\nseership\nseersucker\nseesaw\nseesawiness\nseesee\nseethe\nseething\nseethingly\nseetulputty\nSefekhet\nseg\nseggar\nseggard\nsegged\nseggrom\nSeginus\nsegment\nsegmental\nsegmentally\nsegmentary\nsegmentate\nsegmentation\nsegmented\nsego\nsegol\nsegolate\nsegreant\nsegregable\nsegregant\nsegregate\nsegregateness\nsegregation\nsegregational\nsegregationist\nsegregative\nsegregator\nSehyo\nseiche\nSeid\nSeidel\nseidel\nSeidlitz\nseigneur\nseigneurage\nseigneuress\nseigneurial\nseigneury\nseignior\nseigniorage\nseignioral\nseignioralty\nseigniorial\nseigniority\nseigniorship\nseigniory\nseignorage\nseignoral\nseignorial\nseignorize\nseignory\nseilenoi\nseilenos\nseine\nseiner\nseirospore\nseirosporic\nseise\nseism\nseismal\nseismatical\nseismetic\nseismic\nseismically\nseismicity\nseismism\nseismochronograph\nseismogram\nseismograph\nseismographer\nseismographic\nseismographical\nseismography\nseismologic\nseismological\nseismologically\nseismologist\nseismologue\nseismology\nseismometer\nseismometric\nseismometrical\nseismometrograph\nseismometry\nseismomicrophone\nseismoscope\nseismoscopic\nseismotectonic\nseismotherapy\nseismotic\nseit\nseity\nSeiurus\nSeiyuhonto\nSeiyukai\nseizable\nseize\nseizer\nseizin\nseizing\nseizor\nseizure\nsejant\nsejoin\nsejoined\nsejugate\nsejugous\nsejunct\nsejunctive\nsejunctively\nsejunctly\nSekane\nSekani\nSekar\nSeker\nSekhwan\nsekos\nselachian\nSelachii\nselachoid\nSelachoidei\nSelachostome\nSelachostomi\nselachostomous\nseladang\nSelaginaceae\nSelaginella\nSelaginellaceae\nselaginellaceous\nselagite\nSelago\nselah\nselamin\nselamlik\nselbergite\nSelbornian\nseldom\nseldomcy\nseldomer\nseldomly\nseldomness\nseldor\nseldseen\nsele\nselect\nselectable\nselected\nselectedly\nselectee\nselection\nselectionism\nselectionist\nselective\nselectively\nselectiveness\nselectivity\nselectly\nselectman\nselectness\nselector\nSelena\nselenate\nSelene\nselenian\nseleniate\nselenic\nSelenicereus\nselenide\nSelenidera\nseleniferous\nselenigenous\nselenion\nselenious\nSelenipedium\nselenite\nselenitic\nselenitical\nselenitiferous\nselenitish\nselenium\nseleniuret\nselenobismuthite\nselenocentric\nselenodont\nSelenodonta\nselenodonty\nselenograph\nselenographer\nselenographic\nselenographical\nselenographically\nselenographist\nselenography\nselenolatry\nselenological\nselenologist\nselenology\nselenomancy\nselenoscope\nselenosis\nselenotropic\nselenotropism\nselenotropy\nselensilver\nselensulphur\nSeleucian\nSeleucid\nSeleucidae\nSeleucidan\nSeleucidean\nSeleucidian\nSeleucidic\nself\nselfcide\nselfdom\nselfful\nselffulness\nselfheal\nselfhood\nselfish\nselfishly\nselfishness\nselfism\nselfist\nselfless\nselflessly\nselflessness\nselfly\nselfness\nselfpreservatory\nselfsame\nselfsameness\nselfward\nselfwards\nselictar\nseligmannite\nselihoth\nSelina\nSelinuntine\nselion\nSeljuk\nSeljukian\nsell\nsella\nsellable\nsellably\nsellaite\nsellar\nsellate\nsellenders\nseller\nSelli\nsellie\nselliform\nselling\nsellout\nselly\nselsoviet\nselsyn\nselt\nSelter\nSeltzer\nseltzogene\nSelung\nselva\nselvage\nselvaged\nselvagee\nselvedge\nselzogene\nSemaeostomae\nSemaeostomata\nSemang\nsemanteme\nsemantic\nsemantical\nsemantically\nsemantician\nsemanticist\nsemantics\nsemantological\nsemantology\nsemantron\nsemaphore\nsemaphoric\nsemaphorical\nsemaphorically\nsemaphorist\nsemarum\nsemasiological\nsemasiologically\nsemasiologist\nsemasiology\nsemateme\nsematic\nsematographic\nsematography\nsematology\nsematrope\nsemball\nsemblable\nsemblably\nsemblance\nsemblant\nsemblative\nsemble\nseme\nSemecarpus\nsemeed\nsemeia\nsemeiography\nsemeiologic\nsemeiological\nsemeiologist\nsemeiology\nsemeion\nsemeiotic\nsemeiotical\nsemeiotics\nsemelfactive\nsemelincident\nsemen\nsemence\nSemeostoma\nsemese\nsemester\nsemestral\nsemestrial\nsemi\nsemiabstracted\nsemiaccomplishment\nsemiacid\nsemiacidified\nsemiacquaintance\nsemiadherent\nsemiadjectively\nsemiadnate\nsemiaerial\nsemiaffectionate\nsemiagricultural\nSemiahmoo\nsemialbinism\nsemialcoholic\nsemialien\nsemiallegiance\nsemialpine\nsemialuminous\nsemiamplexicaul\nsemiamplitude\nsemianarchist\nsemianatomical\nsemianatropal\nsemianatropous\nsemiangle\nsemiangular\nsemianimal\nsemianimate\nsemianimated\nsemiannealed\nsemiannual\nsemiannually\nsemiannular\nsemianthracite\nsemiantiministerial\nsemiantique\nsemiape\nsemiaperiodic\nsemiaperture\nsemiappressed\nsemiaquatic\nsemiarborescent\nsemiarc\nsemiarch\nsemiarchitectural\nsemiarid\nsemiaridity\nsemiarticulate\nsemiasphaltic\nsemiatheist\nsemiattached\nsemiautomatic\nsemiautomatically\nsemiautonomous\nsemiaxis\nsemibacchanalian\nsemibachelor\nsemibald\nsemibalked\nsemiball\nsemiballoon\nsemiband\nsemibarbarian\nsemibarbarianism\nsemibarbaric\nsemibarbarism\nsemibarbarous\nsemibaronial\nsemibarren\nsemibase\nsemibasement\nsemibastion\nsemibay\nsemibeam\nsemibejan\nsemibelted\nsemibifid\nsemibituminous\nsemibleached\nsemiblind\nsemiblunt\nsemibody\nsemiboiled\nsemibolshevist\nsemibolshevized\nsemibouffant\nsemibourgeois\nsemibreve\nsemibull\nsemiburrowing\nsemic\nsemicadence\nsemicalcareous\nsemicalcined\nsemicallipygian\nsemicanal\nsemicanalis\nsemicannibalic\nsemicantilever\nsemicarbazide\nsemicarbazone\nsemicarbonate\nsemicarbonize\nsemicardinal\nsemicartilaginous\nsemicastrate\nsemicastration\nsemicatholicism\nsemicaudate\nsemicelestial\nsemicell\nsemicellulose\nsemicentenarian\nsemicentenary\nsemicentennial\nsemicentury\nsemichannel\nsemichaotic\nsemichemical\nsemicheviot\nsemichevron\nsemichiffon\nsemichivalrous\nsemichoric\nsemichorus\nsemichrome\nsemicircle\nsemicircled\nsemicircular\nsemicircularity\nsemicircularly\nsemicircularness\nsemicircumference\nsemicircumferentor\nsemicircumvolution\nsemicirque\nsemicitizen\nsemicivilization\nsemicivilized\nsemiclassic\nsemiclassical\nsemiclause\nsemicleric\nsemiclerical\nsemiclimber\nsemiclimbing\nsemiclose\nsemiclosed\nsemiclosure\nsemicoagulated\nsemicoke\nsemicollapsible\nsemicollar\nsemicollegiate\nsemicolloid\nsemicolloquial\nsemicolon\nsemicolonial\nsemicolumn\nsemicolumnar\nsemicoma\nsemicomatose\nsemicombined\nsemicombust\nsemicomic\nsemicomical\nsemicommercial\nsemicompact\nsemicompacted\nsemicomplete\nsemicomplicated\nsemiconceal\nsemiconcrete\nsemiconducting\nsemiconductor\nsemicone\nsemiconfident\nsemiconfinement\nsemiconfluent\nsemiconformist\nsemiconformity\nsemiconic\nsemiconical\nsemiconnate\nsemiconnection\nsemiconoidal\nsemiconscious\nsemiconsciously\nsemiconsciousness\nsemiconservative\nsemiconsonant\nsemiconsonantal\nsemiconspicuous\nsemicontinent\nsemicontinuum\nsemicontraction\nsemicontradiction\nsemiconvergence\nsemiconvergent\nsemiconversion\nsemiconvert\nsemicordate\nsemicordated\nsemicoriaceous\nsemicorneous\nsemicoronate\nsemicoronated\nsemicoronet\nsemicostal\nsemicostiferous\nsemicotton\nsemicotyle\nsemicounterarch\nsemicountry\nsemicrepe\nsemicrescentic\nsemicretin\nsemicretinism\nsemicriminal\nsemicroma\nsemicrome\nsemicrustaceous\nsemicrystallinc\nsemicubical\nsemicubit\nsemicup\nsemicupium\nsemicupola\nsemicured\nsemicurl\nsemicursive\nsemicurvilinear\nsemicyclic\nsemicycloid\nsemicylinder\nsemicylindric\nsemicylindrical\nsemicynical\nsemidaily\nsemidangerous\nsemidark\nsemidarkness\nsemidead\nsemideaf\nsemidecay\nsemidecussation\nsemidefinite\nsemideific\nsemideification\nsemideistical\nsemideity\nsemidelight\nsemidelirious\nsemideltaic\nsemidemented\nsemidenatured\nsemidependence\nsemidependent\nsemideponent\nsemidesert\nsemidestructive\nsemidetached\nsemidetachment\nsemideveloped\nsemidiagrammatic\nsemidiameter\nsemidiapason\nsemidiapente\nsemidiaphaneity\nsemidiaphanous\nsemidiatessaron\nsemidifference\nsemidigested\nsemidigitigrade\nsemidigression\nsemidilapidation\nsemidine\nsemidirect\nsemidisabled\nsemidisk\nsemiditone\nsemidiurnal\nsemidivided\nsemidivine\nsemidocumentary\nsemidodecagon\nsemidole\nsemidome\nsemidomed\nsemidomestic\nsemidomesticated\nsemidomestication\nsemidomical\nsemidormant\nsemidouble\nsemidrachm\nsemidramatic\nsemidress\nsemidressy\nsemidried\nsemidry\nsemidrying\nsemiductile\nsemidull\nsemiduplex\nsemiduration\nsemieducated\nsemieffigy\nsemiegg\nsemiegret\nsemielastic\nsemielision\nsemiellipse\nsemiellipsis\nsemiellipsoidal\nsemielliptic\nsemielliptical\nsemienclosed\nsemiengaged\nsemiequitant\nsemierect\nsemieremitical\nsemiessay\nsemiexecutive\nsemiexpanded\nsemiexplanation\nsemiexposed\nsemiexternal\nsemiextinct\nsemiextinction\nsemifable\nsemifabulous\nsemifailure\nsemifamine\nsemifascia\nsemifasciated\nsemifashion\nsemifast\nsemifatalistic\nsemiferal\nsemiferous\nsemifeudal\nsemifeudalism\nsemifib\nsemifiction\nsemifictional\nsemifigurative\nsemifigure\nsemifinal\nsemifinalist\nsemifine\nsemifinish\nsemifinished\nsemifiscal\nsemifistular\nsemifit\nsemifitting\nsemifixed\nsemiflashproof\nsemiflex\nsemiflexed\nsemiflexible\nsemiflexion\nsemiflexure\nsemiflint\nsemifloating\nsemifloret\nsemifloscular\nsemifloscule\nsemiflosculose\nsemiflosculous\nsemifluctuant\nsemifluctuating\nsemifluid\nsemifluidic\nsemifluidity\nsemifoaming\nsemiforbidding\nsemiforeign\nsemiform\nsemiformal\nsemiformed\nsemifossil\nsemifossilized\nsemifrantic\nsemifriable\nsemifrontier\nsemifuddle\nsemifunctional\nsemifused\nsemifusion\nsemify\nsemigala\nsemigelatinous\nsemigentleman\nsemigenuflection\nsemigirder\nsemiglaze\nsemiglazed\nsemiglobe\nsemiglobose\nsemiglobular\nsemiglobularly\nsemiglorious\nsemiglutin\nsemigod\nsemigovernmental\nsemigrainy\nsemigranitic\nsemigranulate\nsemigravel\nsemigroove\nsemihand\nsemihard\nsemiharden\nsemihardy\nsemihastate\nsemihepatization\nsemiherbaceous\nsemiheterocercal\nsemihexagon\nsemihexagonal\nsemihiant\nsemihiatus\nsemihibernation\nsemihigh\nsemihistorical\nsemihobo\nsemihonor\nsemihoral\nsemihorny\nsemihostile\nsemihot\nsemihuman\nsemihumanitarian\nsemihumanized\nsemihumbug\nsemihumorous\nsemihumorously\nsemihyaline\nsemihydrate\nsemihydrobenzoinic\nsemihyperbola\nsemihyperbolic\nsemihyperbolical\nsemijealousy\nsemijubilee\nsemijudicial\nsemijuridical\nsemilanceolate\nsemilatent\nsemilatus\nsemileafless\nsemilegendary\nsemilegislative\nsemilens\nsemilenticular\nsemilethal\nsemiliberal\nsemilichen\nsemiligneous\nsemilimber\nsemilined\nsemiliquid\nsemiliquidity\nsemiliterate\nsemilocular\nsemilogarithmic\nsemilogical\nsemilong\nsemilooper\nsemiloose\nsemiloyalty\nsemilucent\nsemilunar\nsemilunare\nsemilunary\nsemilunate\nsemilunation\nsemilune\nsemiluxation\nsemiluxury\nsemimachine\nsemimade\nsemimadman\nsemimagical\nsemimagnetic\nsemimajor\nsemimalignant\nsemimanufacture\nsemimanufactured\nsemimarine\nsemimarking\nsemimathematical\nsemimature\nsemimechanical\nsemimedicinal\nsemimember\nsemimembranosus\nsemimembranous\nsemimenstrual\nsemimercerized\nsemimessianic\nsemimetal\nsemimetallic\nsemimetamorphosis\nsemimicrochemical\nsemimild\nsemimilitary\nsemimill\nsemimineral\nsemimineralized\nsemiminim\nsemiminor\nsemimolecule\nsemimonastic\nsemimonitor\nsemimonopoly\nsemimonster\nsemimonthly\nsemimoron\nsemimucous\nsemimute\nsemimystic\nsemimystical\nsemimythical\nseminaked\nseminal\nseminality\nseminally\nseminaphthalidine\nseminaphthylamine\nseminar\nseminarcosis\nseminarial\nseminarian\nseminarianism\nseminarist\nseminaristic\nseminarize\nseminary\nseminasal\nseminase\nseminatant\nseminate\nsemination\nseminationalization\nseminative\nseminebulous\nseminecessary\nseminegro\nseminervous\nseminiferal\nseminiferous\nseminific\nseminifical\nseminification\nseminist\nseminium\nseminivorous\nseminocturnal\nSeminole\nseminoma\nseminomad\nseminomadic\nseminomata\nseminonconformist\nseminonflammable\nseminonsensical\nseminormal\nseminose\nseminovel\nseminovelty\nseminude\nseminudity\nseminule\nseminuliferous\nseminuria\nseminvariant\nseminvariantive\nsemioblivion\nsemioblivious\nsemiobscurity\nsemioccasional\nsemioccasionally\nsemiocclusive\nsemioctagonal\nsemiofficial\nsemiofficially\nsemiography\nSemionotidae\nSemionotus\nsemiopacity\nsemiopacous\nsemiopal\nsemiopalescent\nsemiopaque\nsemiopened\nsemiorb\nsemiorbicular\nsemiorbicularis\nsemiorbiculate\nsemiordinate\nsemiorganized\nsemioriental\nsemioscillation\nsemiosseous\nsemiostracism\nsemiotic\nsemiotician\nsemioval\nsemiovaloid\nsemiovate\nsemioviparous\nsemiovoid\nsemiovoidal\nsemioxidated\nsemioxidized\nsemioxygenated\nsemioxygenized\nsemipagan\nsemipalmate\nsemipalmated\nsemipalmation\nsemipanic\nsemipapal\nsemipapist\nsemiparallel\nsemiparalysis\nsemiparameter\nsemiparasitic\nsemiparasitism\nsemipaste\nsemipastoral\nsemipasty\nsemipause\nsemipeace\nsemipectinate\nsemipectinated\nsemipectoral\nsemiped\nsemipedal\nsemipellucid\nsemipellucidity\nsemipendent\nsemipenniform\nsemiperfect\nsemiperimeter\nsemiperimetry\nsemiperiphery\nsemipermanent\nsemipermeability\nsemipermeable\nsemiperoid\nsemiperspicuous\nsemipertinent\nsemipervious\nsemipetaloid\nsemipetrified\nsemiphase\nsemiphilologist\nsemiphilosophic\nsemiphilosophical\nsemiphlogisticated\nsemiphonotypy\nsemiphosphorescent\nsemipinacolic\nsemipinacolin\nsemipinnate\nsemipiscine\nsemiplantigrade\nsemiplastic\nsemiplumaceous\nsemiplume\nsemipolar\nsemipolitical\nsemipolitician\nsemipoor\nsemipopish\nsemipopular\nsemiporcelain\nsemiporous\nsemiporphyritic\nsemiportable\nsemipostal\nsemipractical\nsemiprecious\nsemipreservation\nsemiprimigenous\nsemiprivacy\nsemiprivate\nsemipro\nsemiprofane\nsemiprofessional\nsemiprofessionalized\nsemipronation\nsemiprone\nsemipronominal\nsemiproof\nsemiproselyte\nsemiprosthetic\nsemiprostrate\nsemiprotectorate\nsemiproven\nsemipublic\nsemipupa\nsemipurulent\nsemiputrid\nsemipyramidal\nsemipyramidical\nsemipyritic\nsemiquadrangle\nsemiquadrantly\nsemiquadrate\nsemiquantitative\nsemiquantitatively\nsemiquartile\nsemiquaver\nsemiquietism\nsemiquietist\nsemiquinquefid\nsemiquintile\nsemiquote\nsemiradial\nsemiradiate\nSemiramis\nSemiramize\nsemirapacious\nsemirare\nsemirattlesnake\nsemiraw\nsemirebellion\nsemirecondite\nsemirecumbent\nsemirefined\nsemireflex\nsemiregular\nsemirelief\nsemireligious\nsemireniform\nsemirepublican\nsemiresinous\nsemiresolute\nsemirespectability\nsemirespectable\nsemireticulate\nsemiretirement\nsemiretractile\nsemireverberatory\nsemirevolute\nsemirevolution\nsemirevolutionist\nsemirhythm\nsemiriddle\nsemirigid\nsemiring\nsemiroll\nsemirotary\nsemirotating\nsemirotative\nsemirotatory\nsemirotund\nsemirotunda\nsemiround\nsemiroyal\nsemiruin\nsemirural\nsemirustic\nsemis\nsemisacerdotal\nsemisacred\nsemisagittate\nsemisaint\nsemisaline\nsemisaltire\nsemisaprophyte\nsemisaprophytic\nsemisarcodic\nsemisatiric\nsemisaturation\nsemisavage\nsemisavagedom\nsemisavagery\nsemiscenic\nsemischolastic\nsemiscientific\nsemiseafaring\nsemisecondary\nsemisecrecy\nsemisecret\nsemisection\nsemisedentary\nsemisegment\nsemisensuous\nsemisentient\nsemisentimental\nsemiseparatist\nsemiseptate\nsemiserf\nsemiserious\nsemiseriously\nsemiseriousness\nsemiservile\nsemisevere\nsemiseverely\nsemiseverity\nsemisextile\nsemishady\nsemishaft\nsemisheer\nsemishirker\nsemishrub\nsemishrubby\nsemisightseeing\nsemisilica\nsemisimious\nsemisimple\nsemisingle\nsemisixth\nsemiskilled\nsemislave\nsemismelting\nsemismile\nsemisocial\nsemisocialism\nsemisociative\nsemisocinian\nsemisoft\nsemisolemn\nsemisolemnity\nsemisolemnly\nsemisolid\nsemisolute\nsemisomnambulistic\nsemisomnolence\nsemisomnous\nsemisopor\nsemisovereignty\nsemispan\nsemispeculation\nsemisphere\nsemispheric\nsemispherical\nsemispheroidal\nsemispinalis\nsemispiral\nsemispiritous\nsemispontaneity\nsemispontaneous\nsemispontaneously\nsemispontaneousness\nsemisport\nsemisporting\nsemisquare\nsemistagnation\nsemistaminate\nsemistarvation\nsemistarved\nsemistate\nsemisteel\nsemistiff\nsemistill\nsemistock\nsemistory\nsemistratified\nsemistriate\nsemistriated\nsemistuporous\nsemisubterranean\nsemisuburban\nsemisuccess\nsemisuccessful\nsemisuccessfully\nsemisucculent\nsemisupernatural\nsemisupinated\nsemisupination\nsemisupine\nsemisuspension\nsemisymmetric\nsemita\nsemitact\nsemitae\nsemitailored\nsemital\nsemitandem\nsemitangent\nsemitaur\nSemite\nsemitechnical\nsemiteetotal\nsemitelic\nsemitendinosus\nsemitendinous\nsemiterete\nsemiterrestrial\nsemitertian\nsemitesseral\nsemitessular\nsemitheological\nsemithoroughfare\nSemitic\nSemiticism\nSemiticize\nSemitics\nsemitime\nSemitism\nSemitist\nSemitization\nSemitize\nsemitonal\nsemitonally\nsemitone\nsemitonic\nsemitonically\nsemitontine\nsemitorpid\nsemitour\nsemitrailer\nsemitrained\nsemitransept\nsemitranslucent\nsemitransparency\nsemitransparent\nsemitransverse\nsemitreasonable\nsemitrimmed\nsemitropic\nsemitropical\nsemitropics\nsemitruth\nsemituberous\nsemitubular\nsemiuncial\nsemiundressed\nsemiuniversalist\nsemiupright\nsemiurban\nsemiurn\nsemivalvate\nsemivault\nsemivector\nsemivegetable\nsemivertebral\nsemiverticillate\nsemivibration\nsemivirtue\nsemiviscid\nsemivital\nsemivitreous\nsemivitrification\nsemivitrified\nsemivocal\nsemivocalic\nsemivolatile\nsemivolcanic\nsemivoluntary\nsemivowel\nsemivulcanized\nsemiwaking\nsemiwarfare\nsemiweekly\nsemiwild\nsemiwoody\nsemiyearly\nsemmet\nsemmit\nSemnae\nSemnones\nSemnopithecinae\nsemnopithecine\nSemnopithecus\nsemola\nsemolella\nsemolina\nsemological\nsemology\nSemostomae\nsemostomeous\nsemostomous\nsemperannual\nsempergreen\nsemperidentical\nsemperjuvenescent\nsempervirent\nsempervirid\nSempervivum\nsempitern\nsempiternal\nsempiternally\nsempiternity\nsempiternize\nsempiternous\nsempstrywork\nsemsem\nsemuncia\nsemuncial\nsen\nSenaah\nsenaite\nsenam\nsenarian\nsenarius\nsenarmontite\nsenary\nsenate\nsenator\nsenatorial\nsenatorially\nsenatorian\nsenatorship\nsenatory\nsenatress\nsenatrices\nsenatrix\nsence\nSenci\nsencion\nsend\nsendable\nsendal\nsendee\nsender\nsending\nSeneca\nSenecan\nSenecio\nsenecioid\nsenecionine\nsenectitude\nsenectude\nsenectuous\nsenega\nSenegal\nSenegalese\nSenegambian\nsenegin\nsenesce\nsenescence\nsenescent\nseneschal\nseneschally\nseneschalship\nseneschalsy\nseneschalty\nsengreen\nsenicide\nSenijextee\nsenile\nsenilely\nsenilism\nsenility\nsenilize\nsenior\nseniority\nseniorship\nSenlac\nSenna\nsenna\nsennegrass\nsennet\nsennight\nsennit\nsennite\nsenocular\nSenones\nSenonian\nsensa\nsensable\nsensal\nsensate\nsensation\nsensational\nsensationalism\nsensationalist\nsensationalistic\nsensationalize\nsensationally\nsensationary\nsensationish\nsensationism\nsensationist\nsensationistic\nsensationless\nsensatorial\nsensatory\nsense\nsensed\nsenseful\nsenseless\nsenselessly\nsenselessness\nsensibilia\nsensibilisin\nsensibilitist\nsensibilitous\nsensibility\nsensibilium\nsensibilization\nsensibilize\nsensible\nsensibleness\nsensibly\nsensical\nsensifacient\nsensiferous\nsensific\nsensificatory\nsensifics\nsensify\nsensigenous\nsensile\nsensilia\nsensilla\nsensillum\nsension\nsensism\nsensist\nsensistic\nsensitive\nsensitively\nsensitiveness\nsensitivity\nsensitization\nsensitize\nsensitizer\nsensitometer\nsensitometric\nsensitometry\nsensitory\nsensive\nsensize\nsenso\nsensomobile\nsensomobility\nsensomotor\nsensoparalysis\nsensor\nsensoria\nsensorial\nsensoriglandular\nsensorimotor\nsensorimuscular\nsensorium\nsensorivascular\nsensorivasomotor\nsensorivolitional\nsensory\nsensual\nsensualism\nsensualist\nsensualistic\nsensuality\nsensualization\nsensualize\nsensually\nsensualness\nsensuism\nsensuist\nsensum\nsensuosity\nsensuous\nsensuously\nsensuousness\nsensyne\nsent\nsentence\nsentencer\nsentential\nsententially\nsententiarian\nsententiarist\nsententiary\nsententiosity\nsententious\nsententiously\nsententiousness\nsentience\nsentiendum\nsentient\nsentiently\nsentiment\nsentimental\nsentimentalism\nsentimentalist\nsentimentality\nsentimentalization\nsentimentalize\nsentimentalizer\nsentimentally\nsentimenter\nsentimentless\nsentinel\nsentinellike\nsentinelship\nsentinelwise\nsentisection\nsentition\nsentry\nSenusi\nSenusian\nSenusism\nsepad\nsepal\nsepaled\nsepaline\nsepalled\nsepalody\nsepaloid\nseparability\nseparable\nseparableness\nseparably\nseparata\nseparate\nseparatedly\nseparately\nseparateness\nseparates\nseparatical\nseparating\nseparation\nseparationism\nseparationist\nseparatism\nseparatist\nseparatistic\nseparative\nseparatively\nseparativeness\nseparator\nseparatory\nseparatress\nseparatrix\nseparatum\nSepharad\nSephardi\nSephardic\nSephardim\nSepharvites\nsephen\nsephiric\nsephirothic\nsepia\nsepiaceous\nsepialike\nsepian\nsepiarian\nsepiary\nsepic\nsepicolous\nSepiidae\nsepiment\nsepioid\nSepioidea\nSepiola\nSepiolidae\nsepiolite\nsepion\nsepiost\nsepiostaire\nsepium\nsepone\nsepoy\nseppuku\nseps\nSepsidae\nsepsine\nsepsis\nSept\nsept\nsepta\nseptal\nseptan\nseptane\nseptangle\nseptangled\nseptangular\nseptangularness\nseptarian\nseptariate\nseptarium\nseptate\nseptated\nseptation\nseptatoarticulate\nseptavalent\nseptave\nseptcentenary\nseptectomy\nSeptember\nSeptemberer\nSeptemberism\nSeptemberist\nSeptembral\nSeptembrian\nSeptembrist\nSeptembrize\nSeptembrizer\nseptemdecenary\nseptemfid\nseptemfluous\nseptemfoliate\nseptemfoliolate\nseptemia\nseptempartite\nseptemplicate\nseptemvious\nseptemvir\nseptemvirate\nseptemviri\nseptenar\nseptenarian\nseptenarius\nseptenary\nseptenate\nseptendecennial\nseptendecimal\nseptennary\nseptennate\nseptenniad\nseptennial\nseptennialist\nseptenniality\nseptennially\nseptennium\nseptenous\nSeptentrio\nSeptentrion\nseptentrional\nseptentrionality\nseptentrionally\nseptentrionate\nseptentrionic\nsepterium\nseptet\nseptfoil\nSepti\nSeptibranchia\nSeptibranchiata\nseptic\nseptical\nseptically\nsepticemia\nsepticemic\nsepticidal\nsepticidally\nsepticity\nsepticization\nsepticolored\nsepticopyemia\nsepticopyemic\nseptier\nseptifarious\nseptiferous\nseptifluous\nseptifolious\nseptiform\nseptifragal\nseptifragally\nseptilateral\nseptile\nseptillion\nseptillionth\nseptimal\nseptimanal\nseptimanarian\nseptime\nseptimetritis\nseptimole\nseptinsular\nseptipartite\nseptisyllabic\nseptisyllable\nseptivalent\nseptleva\nSeptobasidium\nseptocosta\nseptocylindrical\nSeptocylindrium\nseptodiarrhea\nseptogerm\nSeptogloeum\nseptoic\nseptole\nseptomarginal\nseptomaxillary\nseptonasal\nSeptoria\nseptotomy\nseptship\nseptuagenarian\nseptuagenarianism\nseptuagenary\nseptuagesima\nSeptuagint\nseptuagint\nSeptuagintal\nseptulate\nseptulum\nseptum\nseptuncial\nseptuor\nseptuple\nseptuplet\nseptuplicate\nseptuplication\nsepulcher\nsepulchral\nsepulchralize\nsepulchrally\nsepulchrous\nsepultural\nsepulture\nsequa\nsequacious\nsequaciously\nsequaciousness\nsequacity\nSequan\nSequani\nSequanian\nsequel\nsequela\nsequelae\nsequelant\nsequence\nsequencer\nsequency\nsequent\nsequential\nsequentiality\nsequentially\nsequently\nsequest\nsequester\nsequestered\nsequesterment\nsequestra\nsequestrable\nsequestral\nsequestrate\nsequestration\nsequestrator\nsequestratrices\nsequestratrix\nsequestrectomy\nsequestrotomy\nsequestrum\nsequin\nsequitur\nSequoia\nser\nsera\nserab\nSerabend\nseragli\nseraglio\nserai\nserail\nseral\nseralbumin\nseralbuminous\nserang\nserape\nSerapea\nSerapeum\nseraph\nseraphic\nseraphical\nseraphically\nseraphicalness\nseraphicism\nseraphicness\nseraphim\nseraphina\nseraphine\nseraphism\nseraphlike\nseraphtide\nSerapias\nSerapic\nSerapis\nSerapist\nserasker\nseraskerate\nseraskier\nseraskierat\nserau\nseraw\nSerb\nSerbdom\nSerbian\nSerbize\nSerbonian\nSerbophile\nSerbophobe\nsercial\nserdab\nSerdar\nSere\nsere\nSerean\nsereh\nSerena\nserenade\nserenader\nserenata\nserenate\nSerendib\nserendibite\nserendipity\nserendite\nserene\nserenely\nsereneness\nserenify\nserenissime\nserenissimi\nserenissimo\nserenity\nserenize\nSerenoa\nSerer\nSeres\nsereward\nserf\nserfage\nserfdom\nserfhood\nserfish\nserfishly\nserfishness\nserfism\nserflike\nserfship\nSerge\nserge\nsergeancy\nSergeant\nsergeant\nsergeantcy\nsergeantess\nsergeantry\nsergeantship\nsergeanty\nsergedesoy\nSergei\nserger\nsergette\nserging\nSergio\nSergiu\nSergius\nserglobulin\nSeri\nserial\nserialist\nseriality\nserialization\nserialize\nserially\nSerian\nseriary\nseriate\nseriately\nseriatim\nseriation\nSeric\nSericana\nsericate\nsericated\nsericea\nsericeotomentose\nsericeous\nsericicultural\nsericiculture\nsericiculturist\nsericin\nsericipary\nsericite\nsericitic\nsericitization\nSericocarpus\nsericteria\nsericterium\nserictery\nsericultural\nsericulture\nsericulturist\nseriema\nseries\nserif\nserific\nSeriform\nserigraph\nserigrapher\nserigraphy\nserimeter\nserin\nserine\nserinette\nseringa\nseringal\nseringhi\nSerinus\nserio\nseriocomedy\nseriocomic\nseriocomical\nseriocomically\nseriogrotesque\nSeriola\nSeriolidae\nserioline\nserioludicrous\nseriopantomimic\nserioridiculous\nseriosity\nserious\nseriously\nseriousness\nseripositor\nSerjania\nserjeant\nserment\nsermo\nsermocination\nsermocinatrix\nsermon\nsermoneer\nsermoner\nsermonesque\nsermonet\nsermonettino\nsermonic\nsermonically\nsermonics\nsermonish\nsermonism\nsermonist\nsermonize\nsermonizer\nsermonless\nsermonoid\nsermonolatry\nsermonology\nsermonproof\nsermonwise\nsermuncle\nsernamby\nsero\nseroalbumin\nseroalbuminuria\nseroanaphylaxis\nserobiological\nserocolitis\nserocyst\nserocystic\nserodermatosis\nserodermitis\nserodiagnosis\nserodiagnostic\nseroenteritis\nseroenzyme\nserofibrinous\nserofibrous\nserofluid\nserogelatinous\nserohemorrhagic\nserohepatitis\nseroimmunity\nserolactescent\nserolemma\nserolin\nserolipase\nserologic\nserological\nserologically\nserologist\nserology\nseromaniac\nseromembranous\nseromucous\nseromuscular\nseron\nseronegative\nseronegativity\nseroon\nseroot\nseroperitoneum\nserophthisis\nserophysiology\nseroplastic\nseropneumothorax\nseropositive\nseroprevention\nseroprognosis\nseroprophylaxis\nseroprotease\nseropuriform\nseropurulent\nseropus\nseroreaction\nserosa\nserosanguineous\nserosanguinolent\nseroscopy\nserositis\nserosity\nserosynovial\nserosynovitis\nserotherapeutic\nserotherapeutics\nserotherapist\nserotherapy\nserotina\nserotinal\nserotine\nserotinous\nserotoxin\nserous\nserousness\nserovaccine\nserow\nserozyme\nSerpari\nserpedinous\nSerpens\nSerpent\nserpent\nserpentaria\nSerpentarian\nSerpentarii\nserpentarium\nSerpentarius\nserpentary\nserpentcleide\nserpenteau\nSerpentes\nserpentess\nSerpentian\nserpenticidal\nserpenticide\nSerpentid\nserpentiferous\nserpentiform\nserpentina\nserpentine\nserpentinely\nSerpentinian\nserpentinic\nserpentiningly\nserpentinization\nserpentinize\nserpentinoid\nserpentinous\nSerpentis\nserpentivorous\nserpentize\nserpentlike\nserpently\nserpentoid\nserpentry\nserpentwood\nserphid\nSerphidae\nserphoid\nSerphoidea\nserpierite\nserpiginous\nserpiginously\nserpigo\nserpivolant\nserpolet\nSerpula\nserpula\nSerpulae\nserpulae\nserpulan\nserpulid\nSerpulidae\nserpulidan\nserpuline\nserpulite\nserpulitic\nserpuloid\nserra\nserradella\nserrage\nserran\nserrana\nserranid\nSerranidae\nSerrano\nserrano\nserranoid\nSerranus\nSerrasalmo\nserrate\nserrated\nserratic\nserratiform\nserratile\nserration\nserratirostral\nserratocrenate\nserratodentate\nserratodenticulate\nserratoglandulous\nserratospinose\nserrature\nserricorn\nSerricornia\nSerridentines\nSerridentinus\nserried\nserriedly\nserriedness\nSerrifera\nserriferous\nserriform\nserriped\nserrirostrate\nserrulate\nserrulated\nserrulation\nserry\nsert\nserta\nSertularia\nsertularian\nSertulariidae\nsertularioid\nsertule\nsertulum\nsertum\nserum\nserumal\nserut\nservable\nservage\nserval\nservaline\nservant\nservantcy\nservantdom\nservantess\nservantless\nservantlike\nservantry\nservantship\nservation\nserve\nservente\nserventism\nserver\nservery\nservet\nServetian\nServetianism\nServian\nservice\nserviceability\nserviceable\nserviceableness\nserviceably\nserviceberry\nserviceless\nservicelessness\nserviceman\nServidor\nservidor\nservient\nserviential\nserviette\nservile\nservilely\nservileness\nservilism\nservility\nservilize\nserving\nservingman\nservist\nServite\nservitor\nservitorial\nservitorship\nservitress\nservitrix\nservitude\nserviture\nServius\nservo\nservomechanism\nservomotor\nservulate\nserwamby\nsesame\nsesamoid\nsesamoidal\nsesamoiditis\nSesamum\nSesban\nSesbania\nsescuple\nSeseli\nSeshat\nSesia\nSesiidae\nsesma\nsesqui\nsesquialter\nsesquialtera\nsesquialteral\nsesquialteran\nsesquialterous\nsesquibasic\nsesquicarbonate\nsesquicentennial\nsesquichloride\nsesquiduplicate\nsesquihydrate\nsesquihydrated\nsesquinona\nsesquinonal\nsesquioctava\nsesquioctaval\nsesquioxide\nsesquipedal\nsesquipedalian\nsesquipedalianism\nsesquipedality\nsesquiplicate\nsesquiquadrate\nsesquiquarta\nsesquiquartal\nsesquiquartile\nsesquiquinta\nsesquiquintal\nsesquiquintile\nsesquisalt\nsesquiseptimal\nsesquisextal\nsesquisilicate\nsesquisquare\nsesquisulphate\nsesquisulphide\nsesquisulphuret\nsesquiterpene\nsesquitertia\nsesquitertial\nsesquitertian\nsesquitertianal\nsess\nsessile\nsessility\nSessiliventres\nsession\nsessional\nsessionary\nsessions\nsesterce\nsestertium\nsestet\nsesti\nsestiad\nSestian\nsestina\nsestine\nsestole\nsestuor\nSesuto\nSesuvium\nset\nseta\nsetaceous\nsetaceously\nsetae\nsetal\nSetaria\nsetarious\nsetback\nsetbolt\nsetdown\nsetfast\nSeth\nseth\nsethead\nSethian\nSethic\nSethite\nSetibo\nsetier\nSetifera\nsetiferous\nsetiform\nsetigerous\nsetiparous\nsetirostral\nsetline\nsetness\nsetoff\nseton\nSetophaga\nSetophaginae\nsetophagine\nsetose\nsetous\nsetout\nsetover\nsetscrew\nsetsman\nsett\nsettable\nsettaine\nsettee\nsetter\nsettergrass\nsetterwort\nsetting\nsettle\nsettleable\nsettled\nsettledly\nsettledness\nsettlement\nsettler\nsettlerdom\nsettling\nsettlings\nsettlor\nsettsman\nsetula\nsetule\nsetuliform\nsetulose\nsetulous\nsetup\nsetwall\nsetwise\nsetwork\nseugh\nSevastopol\nseven\nsevenbark\nsevener\nsevenfold\nsevenfolded\nsevenfoldness\nsevennight\nsevenpence\nsevenpenny\nsevenscore\nseventeen\nseventeenfold\nseventeenth\nseventeenthly\nseventh\nseventhly\nseventieth\nseventy\nseventyfold\nsever\nseverable\nseveral\nseveralfold\nseverality\nseveralize\nseverally\nseveralness\nseveralth\nseveralty\nseverance\nseveration\nsevere\nseveredly\nseverely\nsevereness\nseverer\nSeverian\nseveringly\nseverish\nseverity\nseverization\nseverize\nsevery\nSevillian\nsew\nsewable\nsewage\nsewan\nsewed\nsewellel\nsewen\nsewer\nsewerage\nsewered\nsewerless\nsewerlike\nsewerman\nsewery\nsewing\nsewless\nsewn\nsewround\nsex\nsexadecimal\nsexagenarian\nsexagenarianism\nsexagenary\nSexagesima\nsexagesimal\nsexagesimally\nsexagesimals\nsexagonal\nsexangle\nsexangled\nsexangular\nsexangularly\nsexannulate\nsexarticulate\nsexcentenary\nsexcuspidate\nsexdigital\nsexdigitate\nsexdigitated\nsexdigitism\nsexed\nsexenary\nsexennial\nsexennially\nsexennium\nsexern\nsexfarious\nsexfid\nsexfoil\nsexhood\nsexifid\nsexillion\nsexiped\nsexipolar\nsexisyllabic\nsexisyllable\nsexitubercular\nsexivalence\nsexivalency\nsexivalent\nsexless\nsexlessly\nsexlessness\nsexlike\nsexlocular\nsexly\nsexological\nsexologist\nsexology\nsexpartite\nsexradiate\nsext\nsextactic\nsextain\nsextan\nsextans\nSextant\nsextant\nsextantal\nsextar\nsextarii\nsextarius\nsextary\nsextennial\nsextern\nsextet\nsextic\nsextile\nSextilis\nsextillion\nsextillionth\nsextipara\nsextipartite\nsextipartition\nsextiply\nsextipolar\nsexto\nsextodecimo\nsextole\nsextolet\nsexton\nsextoness\nsextonship\nsextry\nsextubercular\nsextuberculate\nsextula\nsextulary\nsextumvirate\nsextuple\nsextuplet\nsextuplex\nsextuplicate\nsextuply\nsexual\nsexuale\nsexualism\nsexualist\nsexuality\nsexualization\nsexualize\nsexually\nsexuous\nsexupara\nsexuparous\nsexy\nsey\nseybertite\nSeymeria\nSeymour\nsfoot\nSgad\nsgraffiato\nsgraffito\nsh\nsha\nshaatnez\nshab\nShaban\nshabash\nShabbath\nshabbed\nshabbify\nshabbily\nshabbiness\nshabble\nshabby\nshabbyish\nshabrack\nshabunder\nShabuoth\nshachle\nshachly\nshack\nshackanite\nshackatory\nshackbolt\nshackland\nshackle\nshacklebone\nshackledom\nshackler\nshacklewise\nshackling\nshackly\nshacky\nshad\nshadbelly\nshadberry\nshadbird\nshadbush\nshadchan\nshaddock\nshade\nshaded\nshadeful\nshadeless\nshadelessness\nshader\nshadetail\nshadflower\nshadily\nshadine\nshadiness\nshading\nshadkan\nshadoof\nShadow\nshadow\nshadowable\nshadowbox\nshadowboxing\nshadowed\nshadower\nshadowfoot\nshadowgram\nshadowgraph\nshadowgraphic\nshadowgraphist\nshadowgraphy\nshadowily\nshadowiness\nshadowing\nshadowishly\nshadowist\nshadowland\nshadowless\nshadowlessness\nshadowlike\nshadowly\nshadowy\nshadrach\nshady\nshaffle\nShafiite\nshaft\nshafted\nshafter\nshaftfoot\nshafting\nshaftless\nshaftlike\nshaftman\nshaftment\nshaftsman\nshaftway\nshafty\nshag\nshaganappi\nshagbag\nshagbark\nshagged\nshaggedness\nshaggily\nshagginess\nshaggy\nShagia\nshaglet\nshaglike\nshagpate\nshagrag\nshagreen\nshagreened\nshagroon\nshagtail\nshah\nShahaptian\nshaharith\nshahdom\nshahi\nShahid\nshahin\nshahzada\nShai\nShaigia\nshaikh\nShaikiyeh\nshaitan\nShaiva\nShaivism\nShaka\nshakable\nshake\nshakeable\nshakebly\nshakedown\nshakefork\nshaken\nshakenly\nshakeout\nshakeproof\nShaker\nshaker\nshakerag\nShakerdom\nShakeress\nShakerism\nShakerlike\nshakers\nshakescene\nShakespearean\nShakespeareana\nShakespeareanism\nShakespeareanly\nShakespearize\nShakespearolater\nShakespearolatry\nshakha\nShakil\nshakily\nshakiness\nshaking\nshakingly\nshako\nshaksheer\nShakta\nShakti\nshakti\nShaktism\nshaku\nshaky\nShakyamuni\nShalako\nshale\nshalelike\nshaleman\nshall\nshallal\nshallon\nshalloon\nshallop\nshallopy\nshallot\nshallow\nshallowbrained\nshallowhearted\nshallowish\nshallowist\nshallowly\nshallowness\nshallowpate\nshallowpated\nshallows\nshallowy\nshallu\nshalom\nshalt\nshalwar\nshaly\nSham\nsham\nshama\nshamable\nshamableness\nshamably\nshamal\nshamalo\nshaman\nshamaness\nshamanic\nshamanism\nshamanist\nshamanistic\nshamanize\nshamateur\nshamba\nShambala\nshamble\nshambling\nshamblingly\nshambrier\nShambu\nshame\nshameable\nshamed\nshameface\nshamefaced\nshamefacedly\nshamefacedness\nshamefast\nshamefastly\nshamefastness\nshameful\nshamefully\nshamefulness\nshameless\nshamelessly\nshamelessness\nshameproof\nshamer\nshamesick\nshameworthy\nshamianah\nShamim\nshamir\nShammar\nshammed\nshammer\nshammick\nshamming\nshammish\nshammock\nshammocking\nshammocky\nshammy\nshampoo\nshampooer\nshamrock\nshamroot\nshamsheer\nShan\nshan\nshanachas\nshanachie\nShandean\nshandry\nshandrydan\nShandy\nshandy\nshandygaff\nShandyism\nShane\nShang\nShangalla\nshangan\nShanghai\nshanghai\nshanghaier\nshank\nShankar\nshanked\nshanker\nshankings\nshankpiece\nshanksman\nshanna\nShannon\nshanny\nshansa\nshant\nShantung\nshanty\nshantylike\nshantyman\nshantytown\nshap\nshapable\nShape\nshape\nshaped\nshapeful\nshapeless\nshapelessly\nshapelessness\nshapeliness\nshapely\nshapen\nshaper\nshapeshifter\nshapesmith\nshaping\nshapingly\nshapometer\nshaps\nShaptan\nshapy\nsharable\nSharada\nSharan\nshard\nShardana\nsharded\nshardy\nshare\nshareable\nsharebone\nsharebroker\nsharecrop\nsharecropper\nshareholder\nshareholdership\nshareman\nsharepenny\nsharer\nshareship\nsharesman\nsharewort\nSharezer\nshargar\nShari\nSharia\nSharira\nshark\nsharkful\nsharkish\nsharklet\nsharklike\nsharkship\nsharkskin\nsharky\nsharn\nsharnbud\nsharny\nSharon\nsharp\nsharpen\nsharpener\nsharper\nsharpie\nsharpish\nsharply\nsharpness\nsharps\nsharpsaw\nsharpshin\nsharpshod\nsharpshooter\nsharpshooting\nsharptail\nsharpware\nsharpy\nSharra\nsharrag\nsharry\nShasta\nshastaite\nShastan\nshaster\nshastra\nshastraik\nshastri\nshastrik\nshat\nshatan\nshathmont\nShatter\nshatter\nshatterbrain\nshatterbrained\nshatterer\nshatterheaded\nshattering\nshatteringly\nshatterment\nshatterpated\nshatterproof\nshatterwit\nshattery\nshattuckite\nshauchle\nshaugh\nshaul\nShaula\nshaup\nshauri\nshauwe\nshavable\nshave\nshaveable\nshaved\nshavee\nshaveling\nshaven\nshaver\nshavery\nShavese\nshavester\nshavetail\nshaveweed\nShavian\nShaviana\nShavianism\nshaving\nshavings\nShaw\nshaw\nShawanese\nShawano\nshawl\nshawled\nshawling\nshawlless\nshawllike\nshawlwise\nshawm\nShawn\nShawnee\nshawneewood\nshawny\nShawwal\nshawy\nshay\nShaysite\nshe\nshea\nsheading\nsheaf\nsheafage\nsheaflike\nsheafripe\nsheafy\nsheal\nshealing\nShean\nshear\nshearbill\nsheard\nshearer\nsheargrass\nshearhog\nshearing\nshearless\nshearling\nshearman\nshearmouse\nshears\nshearsman\nsheartail\nshearwater\nshearwaters\nsheat\nsheatfish\nsheath\nsheathbill\nsheathe\nsheathed\nsheather\nsheathery\nsheathing\nsheathless\nsheathlike\nsheathy\nsheave\nsheaved\nsheaveless\nsheaveman\nshebang\nShebat\nshebeen\nshebeener\nShechem\nShechemites\nshed\nshedded\nshedder\nshedding\nsheder\nshedhand\nshedlike\nshedman\nshedwise\nshee\nsheely\nsheen\nsheenful\nsheenless\nsheenly\nsheeny\nsheep\nsheepback\nsheepberry\nsheepbine\nsheepbiter\nsheepbiting\nsheepcote\nsheepcrook\nsheepfaced\nsheepfacedly\nsheepfacedness\nsheepfold\nsheepfoot\nsheepgate\nsheephead\nsheepheaded\nsheephearted\nsheepherder\nsheepherding\nsheephook\nsheephouse\nsheepify\nsheepish\nsheepishly\nsheepishness\nsheepkeeper\nsheepkeeping\nsheepkill\nsheepless\nsheeplet\nsheeplike\nsheepling\nsheepman\nsheepmaster\nsheepmonger\nsheepnose\nsheepnut\nsheeppen\nsheepshank\nsheepshead\nsheepsheadism\nsheepshear\nsheepshearer\nsheepshearing\nsheepshed\nsheepskin\nsheepsplit\nsheepsteal\nsheepstealer\nsheepstealing\nsheepwalk\nsheepwalker\nsheepweed\nsheepy\nsheer\nsheered\nsheering\nsheerly\nsheerness\nsheet\nsheetage\nsheeted\nsheeter\nsheetflood\nsheetful\nsheeting\nsheetless\nsheetlet\nsheetlike\nsheetling\nsheetways\nsheetwise\nsheetwork\nsheetwriting\nsheety\nSheffield\nshehitah\nsheik\nsheikdom\nsheikhlike\nsheikhly\nsheiklike\nsheikly\nSheila\nshekel\nShekinah\nShel\nshela\nsheld\nsheldapple\nshelder\nsheldfowl\nsheldrake\nshelduck\nshelf\nshelfback\nshelffellow\nshelfful\nshelflist\nshelfmate\nshelfpiece\nshelfroom\nshelfworn\nshelfy\nshell\nshellac\nshellacker\nshellacking\nshellapple\nshellback\nshellblow\nshellblowing\nshellbound\nshellburst\nshellcracker\nshelleater\nshelled\nsheller\nShelleyan\nShelleyana\nshellfire\nshellfish\nshellfishery\nshellflower\nshellful\nshellhead\nshelliness\nshelling\nshellman\nshellmonger\nshellproof\nshellshake\nshellum\nshellwork\nshellworker\nshelly\nshellycoat\nshelta\nshelter\nshelterage\nsheltered\nshelterer\nshelteringly\nshelterless\nshelterlessness\nshelterwood\nsheltery\nsheltron\nshelty\nshelve\nshelver\nshelving\nshelvingly\nshelvingness\nshelvy\nShelyak\nShemaka\nsheminith\nShemite\nShemitic\nShemitish\nShemu\nShen\nshenanigan\nshend\nsheng\nShenshai\nSheol\nsheolic\nshepherd\nshepherdage\nshepherddom\nshepherdess\nshepherdhood\nShepherdia\nshepherdish\nshepherdism\nshepherdize\nshepherdless\nshepherdlike\nshepherdling\nshepherdly\nshepherdry\nsheppeck\nsheppey\nshepstare\nsher\nSherani\nSherardia\nsherardize\nsherardizer\nSheratan\nSheraton\nsherbacha\nsherbet\nsherbetlee\nsherbetzide\nsheriat\nsherif\nsherifa\nsherifate\nsheriff\nsheriffalty\nsheriffdom\nsheriffess\nsheriffhood\nsheriffry\nsheriffship\nsheriffwick\nsherifi\nsherifian\nsherify\nsheristadar\nSheriyat\nsherlock\nSherman\nSherpa\nSherramoor\nSherri\nsherry\nSherrymoor\nsherryvallies\nShesha\nsheth\nShetland\nShetlander\nShetlandic\nsheugh\nsheva\nshevel\nsheveled\nshevri\nshewa\nshewbread\nshewel\nsheyle\nshi\nShiah\nshibah\nshibar\nshibboleth\nshibbolethic\nshibuichi\nshice\nshicer\nshicker\nshickered\nshide\nshied\nshiel\nshield\nshieldable\nshieldboard\nshielddrake\nshielded\nshielder\nshieldflower\nshielding\nshieldless\nshieldlessly\nshieldlessness\nshieldlike\nshieldling\nshieldmaker\nshieldmay\nshieldtail\nshieling\nshier\nshies\nshiest\nshift\nshiftable\nshiftage\nshifter\nshiftful\nshiftfulness\nshiftily\nshiftiness\nshifting\nshiftingly\nshiftingness\nshiftless\nshiftlessly\nshiftlessness\nshifty\nShigella\nshiggaion\nshigram\nshih\nShiism\nShiite\nShiitic\nShik\nshikar\nshikara\nshikargah\nshikari\nshikasta\nshikimi\nshikimic\nshikimole\nshikimotoxin\nshikken\nshiko\nshikra\nshilf\nshilfa\nShilh\nShilha\nshill\nshilla\nshillaber\nshillelagh\nshillet\nshillety\nshillhouse\nshillibeer\nshilling\nshillingless\nshillingsworth\nshilloo\nShilluh\nShilluk\nShiloh\nshilpit\nshim\nshimal\nShimei\nshimmer\nshimmering\nshimmeringly\nshimmery\nshimmy\nShimonoseki\nshimose\nshimper\nshin\nShina\nshinaniging\nshinarump\nshinbone\nshindig\nshindle\nshindy\nshine\nshineless\nshiner\nshingle\nshingled\nshingler\nshingles\nshinglewise\nshinglewood\nshingling\nshingly\nshinily\nshininess\nshining\nshiningly\nshiningness\nshinleaf\nShinnecock\nshinner\nshinnery\nshinning\nshinny\nshinplaster\nshintiyan\nShinto\nShintoism\nShintoist\nShintoistic\nShintoize\nshinty\nShinwari\nshinwood\nshiny\nshinza\nship\nshipboard\nshipbound\nshipboy\nshipbreaking\nshipbroken\nshipbuilder\nshipbuilding\nshipcraft\nshipentine\nshipful\nshipkeeper\nshiplap\nshipless\nshiplessly\nshiplet\nshipload\nshipman\nshipmanship\nshipmast\nshipmaster\nshipmate\nshipmatish\nshipment\nshipowner\nshipowning\nshippable\nshippage\nshipped\nshipper\nshipping\nshipplane\nshippo\nshippon\nshippy\nshipshape\nshipshapely\nshipside\nshipsmith\nshipward\nshipwards\nshipway\nshipwork\nshipworm\nshipwreck\nshipwrecky\nshipwright\nshipwrightery\nshipwrightry\nshipyard\nshirakashi\nshirallee\nShiraz\nshire\nshirehouse\nshireman\nshirewick\nshirk\nshirker\nshirky\nshirl\nshirlcock\nShirley\nshirpit\nshirr\nshirring\nshirt\nshirtband\nshirtiness\nshirting\nshirtless\nshirtlessness\nshirtlike\nshirtmaker\nshirtmaking\nshirtman\nshirttail\nshirtwaist\nshirty\nShirvan\nshish\nshisham\nshisn\nshita\nshitepoke\nshither\nshittah\nshittim\nshittimwood\nshiv\nShivaism\nShivaist\nShivaistic\nShivaite\nshivaree\nshive\nshiver\nshivereens\nshiverer\nshivering\nshiveringly\nshiverproof\nshiversome\nshiverweed\nshivery\nshivey\nshivoo\nshivy\nshivzoku\nShkupetar\nShlu\nShluh\nSho\nsho\nShoa\nshoad\nshoader\nshoal\nshoalbrain\nshoaler\nshoaliness\nshoalness\nshoalwise\nshoaly\nshoat\nshock\nshockability\nshockable\nshockedness\nshocker\nshockheaded\nshocking\nshockingly\nshockingness\nshocklike\nshockproof\nshod\nshodden\nshoddily\nshoddiness\nshoddy\nshoddydom\nshoddyism\nshoddyite\nshoddylike\nshoddyward\nshoddywards\nshode\nshoder\nshoe\nshoebill\nshoebinder\nshoebindery\nshoebinding\nshoebird\nshoeblack\nshoeboy\nshoebrush\nshoecraft\nshoeflower\nshoehorn\nshoeing\nshoeingsmith\nshoelace\nshoeless\nshoemaker\nshoemaking\nshoeman\nshoepack\nshoer\nshoescraper\nshoeshine\nshoeshop\nshoesmith\nshoestring\nshoewoman\nshoful\nshog\nshogaol\nshoggie\nshoggle\nshoggly\nshogi\nshogun\nshogunal\nshogunate\nshohet\nshoji\nShojo\nshola\nshole\nShona\nshone\nshoneen\nshonkinite\nshoo\nshood\nshoofa\nshoofly\nshooi\nshook\nshool\nshooldarry\nshooler\nshoop\nshoopiltie\nshoor\nshoot\nshootable\nshootboard\nshootee\nshooter\nshoother\nshooting\nshootist\nshootman\nshop\nshopboard\nshopbook\nshopboy\nshopbreaker\nshopbreaking\nshopfolk\nshopful\nshopgirl\nshopgirlish\nshophar\nshopkeeper\nshopkeeperess\nshopkeeperish\nshopkeeperism\nshopkeepery\nshopkeeping\nshopland\nshoplet\nshoplifter\nshoplifting\nshoplike\nshopmaid\nshopman\nshopmark\nshopmate\nshopocracy\nshopocrat\nshoppe\nshopper\nshopping\nshoppish\nshoppishness\nshoppy\nshopster\nshoptalk\nshopwalker\nshopwear\nshopwife\nshopwindow\nshopwoman\nshopwork\nshopworker\nshopworn\nshoq\nShor\nshor\nshoran\nshore\nShorea\nshoreberry\nshorebush\nshored\nshoregoing\nshoreland\nshoreless\nshoreman\nshorer\nshoreside\nshoresman\nshoreward\nshorewards\nshoreweed\nshoreyer\nshoring\nshorling\nshorn\nshort\nshortage\nshortbread\nshortcake\nshortchange\nshortchanger\nshortclothes\nshortcoat\nshortcomer\nshortcoming\nshorten\nshortener\nshortening\nshorter\nshortfall\nshorthand\nshorthanded\nshorthandedness\nshorthander\nshorthead\nshorthorn\nShortia\nshortish\nshortly\nshortness\nshorts\nshortschat\nshortsighted\nshortsightedly\nshortsightedness\nshortsome\nshortstaff\nshortstop\nshorttail\nShortzy\nShoshonean\nshoshonite\nshot\nshotbush\nshote\nshotgun\nshotless\nshotlike\nshotmaker\nshotman\nshotproof\nshotsman\nshotstar\nshott\nshotted\nshotten\nshotter\nshotty\nShotweld\nshou\nshould\nshoulder\nshouldered\nshoulderer\nshoulderette\nshouldering\nshouldna\nshouldnt\nshoupeltin\nshout\nshouter\nshouting\nshoutingly\nshoval\nshove\nshovegroat\nshovel\nshovelard\nshovelbill\nshovelboard\nshovelfish\nshovelful\nshovelhead\nshovelmaker\nshovelman\nshovelnose\nshovelweed\nshover\nshow\nshowable\nshowance\nshowbird\nshowboard\nshowboat\nshowboater\nshowboating\nshowcase\nshowdom\nshowdown\nshower\nshowerer\nshowerful\nshoweriness\nshowerless\nshowerlike\nshowerproof\nshowery\nshowily\nshowiness\nshowing\nshowish\nshowless\nshowman\nshowmanism\nshowmanry\nshowmanship\nshown\nshowpiece\nshowroom\nshowup\nshowworthy\nshowy\nshowyard\nshoya\nshrab\nshraddha\nshradh\nshraf\nshrag\nshram\nshrank\nshrap\nshrapnel\nshrave\nshravey\nshreadhead\nshred\nshredcock\nshredder\nshredding\nshreddy\nshredless\nshredlike\nShree\nshree\nshreeve\nshrend\nshrew\nshrewd\nshrewdish\nshrewdly\nshrewdness\nshrewdom\nshrewdy\nshrewish\nshrewishly\nshrewishness\nshrewlike\nshrewly\nshrewmouse\nshrewstruck\nshriek\nshrieker\nshriekery\nshriekily\nshriekiness\nshriekingly\nshriekproof\nshrieky\nshrieval\nshrievalty\nshrift\nshrike\nshrill\nshrilling\nshrillish\nshrillness\nshrilly\nshrimp\nshrimper\nshrimpfish\nshrimpi\nshrimpish\nshrimpishness\nshrimplike\nshrimpy\nshrinal\nShrine\nshrine\nshrineless\nshrinelet\nshrinelike\nShriner\nshrink\nshrinkable\nshrinkage\nshrinkageproof\nshrinker\nshrinkhead\nshrinking\nshrinkingly\nshrinkproof\nshrinky\nshrip\nshrite\nshrive\nshrivel\nshriven\nshriver\nshriving\nshroff\nshrog\nShropshire\nshroud\nshrouded\nshrouding\nshroudless\nshroudlike\nshroudy\nShrove\nshrove\nshrover\nShrovetide\nshrub\nshrubbed\nshrubbery\nshrubbiness\nshrubbish\nshrubby\nshrubland\nshrubless\nshrublet\nshrublike\nshrubwood\nshruff\nshrug\nshruggingly\nshrunk\nshrunken\nshrups\nShtokavski\nshtreimel\nShu\nshuba\nshubunkin\nshuck\nshucker\nshucking\nshuckins\nshuckpen\nshucks\nshudder\nshudderful\nshudderiness\nshudderingly\nshuddersome\nshuddery\nshuff\nshuffle\nshuffleboard\nshufflecap\nshuffler\nshufflewing\nshuffling\nshufflingly\nshug\nShuhali\nShukria\nShukulumbwe\nshul\nShulamite\nshuler\nshulwaurs\nshumac\nshun\nShunammite\nshune\nshunless\nshunnable\nshunner\nshunt\nshunter\nshunting\nshure\nshurf\nshush\nshusher\nShuswap\nshut\nshutdown\nshutness\nshutoff\nShutoku\nshutout\nshuttance\nshutten\nshutter\nshuttering\nshutterless\nshutterwise\nshutting\nshuttle\nshuttlecock\nshuttleheaded\nshuttlelike\nshuttlewise\nShuvra\nshwanpan\nshy\nShyam\nshydepoke\nshyer\nshyish\nShylock\nShylockism\nshyly\nshyness\nshyster\nsi\nSia\nsiak\nsial\nsialaden\nsialadenitis\nsialadenoncus\nsialagogic\nsialagogue\nsialagoguic\nsialemesis\nSialia\nsialic\nsialid\nSialidae\nsialidan\nSialis\nsialoangitis\nsialogenous\nsialoid\nsialolith\nsialolithiasis\nsialology\nsialorrhea\nsialoschesis\nsialosemeiology\nsialosis\nsialostenosis\nsialosyrinx\nsialozemia\nSiam\nsiamang\nSiamese\nsib\nSibbaldus\nsibbed\nsibbens\nsibber\nsibboleth\nsibby\nSiberian\nSiberic\nsiberite\nsibilance\nsibilancy\nsibilant\nsibilantly\nsibilate\nsibilatingly\nsibilator\nsibilatory\nsibilous\nsibilus\nSibiric\nsibling\nsibness\nsibrede\nsibship\nsibyl\nsibylesque\nsibylic\nsibylism\nsibylla\nsibylline\nsibyllist\nsic\nSicambri\nSicambrian\nSicana\nSicani\nSicanian\nsicarian\nsicarious\nsicarius\nsicca\nsiccaneous\nsiccant\nsiccate\nsiccation\nsiccative\nsiccimeter\nsiccity\nsice\nSicel\nSiceliot\nSicilian\nsicilian\nsiciliana\nSicilianism\nsicilica\nsicilicum\nsicilienne\nsicinnian\nsick\nsickbed\nsicken\nsickener\nsickening\nsickeningly\nsicker\nsickerly\nsickerness\nsickhearted\nsickish\nsickishly\nsickishness\nsickle\nsicklebill\nsickled\nsicklelike\nsickleman\nsicklemia\nsicklemic\nsicklepod\nsickler\nsicklerite\nsickless\nsickleweed\nsicklewise\nsicklewort\nsicklied\nsicklily\nsickliness\nsickling\nsickly\nsickness\nsicknessproof\nsickroom\nsicsac\nsicula\nsicular\nSiculi\nSiculian\nSicyonian\nSicyonic\nSicyos\nSid\nSida\nSidalcea\nsidder\nSiddha\nSiddhanta\nSiddhartha\nSiddhi\nsiddur\nside\nsideage\nsidearm\nsideboard\nsidebone\nsidebones\nsideburns\nsidecar\nsidecarist\nsidecheck\nsided\nsidedness\nsideflash\nsidehead\nsidehill\nsidekicker\nsidelang\nsideless\nsideline\nsideling\nsidelings\nsidelingwise\nsidelong\nsidenote\nsidepiece\nsider\nsideral\nsideration\nsiderealize\nsidereally\nsiderean\nsiderin\nsiderism\nsiderite\nsideritic\nSideritis\nsiderognost\nsiderographic\nsiderographical\nsiderographist\nsiderography\nsiderolite\nsiderology\nsideromagnetic\nsideromancy\nsideromelane\nsideronatrite\nsideronym\nsideroscope\nsiderose\nsiderosis\nsiderostat\nsiderostatic\nsiderotechny\nsiderous\nSideroxylon\nsidership\nsiderurgical\nsiderurgy\nsides\nsidesaddle\nsideshake\nsideslip\nsidesman\nsidesplitter\nsidesplitting\nsidesplittingly\nsidesway\nsideswipe\nsideswiper\nsidetrack\nsidewalk\nsideward\nsidewards\nsideway\nsideways\nsidewinder\nsidewipe\nsidewiper\nsidewise\nsidhe\nsidi\nsiding\nsidle\nsidler\nsidling\nsidlingly\nSidney\nSidonian\nSidrach\nsidth\nsidy\nsie\nsiege\nsiegeable\nsiegecraft\nsiegenite\nsieger\nsiegework\nSiegfried\nSieglingia\nSiegmund\nSiegurd\nSiena\nSienese\nsienna\nsier\nsiering\nsierozem\nSierra\nsierra\nsierran\nsiesta\nsiestaland\nSieva\nsieve\nsieveful\nsievelike\nsiever\nSieversia\nsievings\nsievy\nsifac\nsifaka\nSifatite\nsife\nsiffilate\nsiffle\nsifflement\nsifflet\nsifflot\nsift\nsiftage\nsifted\nsifter\nsifting\nsig\nSiganidae\nSiganus\nsigatoka\nSigaultian\nsigger\nsigh\nsigher\nsighful\nsighfully\nsighing\nsighingly\nsighingness\nsighless\nsighlike\nsight\nsightable\nsighted\nsighten\nsightening\nsighter\nsightful\nsightfulness\nsighthole\nsighting\nsightless\nsightlessly\nsightlessness\nsightlily\nsightliness\nsightly\nsightproof\nsightworthiness\nsightworthy\nsighty\nsigil\nsigilative\nSigillaria\nSigillariaceae\nsigillariaceous\nsigillarian\nsigillarid\nsigillarioid\nsigillarist\nsigillaroid\nsigillary\nsigillate\nsigillated\nsigillation\nsigillistic\nsigillographer\nsigillographical\nsigillography\nsigillum\nsigla\nsiglarian\nsiglos\nSigma\nsigma\nsigmaspire\nsigmate\nsigmatic\nsigmation\nsigmatism\nsigmodont\nSigmodontes\nsigmoid\nsigmoidal\nsigmoidally\nsigmoidectomy\nsigmoiditis\nsigmoidopexy\nsigmoidoproctostomy\nsigmoidorectostomy\nsigmoidoscope\nsigmoidoscopy\nsigmoidostomy\nSigmund\nsign\nsignable\nsignal\nsignalee\nsignaler\nsignalese\nsignaletic\nsignaletics\nsignalism\nsignalist\nsignality\nsignalize\nsignally\nsignalman\nsignalment\nsignary\nsignatary\nsignate\nsignation\nsignator\nsignatory\nsignatural\nsignature\nsignatureless\nsignaturist\nsignboard\nsignee\nsigner\nsignet\nsignetwise\nsignifer\nsignifiable\nsignifical\nsignificance\nsignificancy\nsignificant\nsignificantly\nsignificantness\nsignificate\nsignification\nsignificatist\nsignificative\nsignificatively\nsignificativeness\nsignificator\nsignificatory\nsignificatrix\nsignificature\nsignificavit\nsignifician\nsignifics\nsignifier\nsignify\nsignior\nsigniorship\nsignist\nsignless\nsignlike\nsignman\nsignorial\nsignorship\nsignory\nsignpost\nsignum\nsignwriter\nSigurd\nSihasapa\nSika\nsika\nsikar\nsikatch\nsike\nsikerly\nsikerness\nsiket\nSikh\nsikhara\nSikhism\nsikhra\nSikinnis\nSikkimese\nSiksika\nsil\nsilage\nsilaginoid\nsilane\nSilas\nsilbergroschen\nsilcrete\nsile\nsilen\nSilenaceae\nsilenaceous\nSilenales\nsilence\nsilenced\nsilencer\nsilency\nSilene\nsileni\nsilenic\nsilent\nsilential\nsilentiary\nsilentious\nsilentish\nsilently\nsilentness\nsilenus\nsilesia\nSilesian\nSiletz\nsilex\nsilexite\nsilhouette\nsilhouettist\nsilhouettograph\nsilica\nsilicam\nsilicane\nsilicate\nsilication\nsilicatization\nSilicea\nsilicean\nsiliceocalcareous\nsiliceofelspathic\nsiliceofluoric\nsiliceous\nsilicic\nsilicicalcareous\nsilicicolous\nsilicide\nsilicidize\nsiliciferous\nsilicification\nsilicifluoric\nsilicifluoride\nsilicify\nsiliciophite\nsilicious\nSilicispongiae\nsilicium\nsiliciuretted\nsilicize\nsilicle\nsilico\nsilicoacetic\nsilicoalkaline\nsilicoaluminate\nsilicoarsenide\nsilicocalcareous\nsilicochloroform\nsilicocyanide\nsilicoethane\nsilicoferruginous\nSilicoflagellata\nSilicoflagellatae\nsilicoflagellate\nSilicoflagellidae\nsilicofluoric\nsilicofluoride\nsilicohydrocarbon\nSilicoidea\nsilicomagnesian\nsilicomanganese\nsilicomethane\nsilicon\nsilicone\nsiliconize\nsilicononane\nsilicopropane\nsilicosis\nSilicospongiae\nsilicotalcose\nsilicotic\nsilicotitanate\nsilicotungstate\nsilicotungstic\nsilicula\nsilicular\nsilicule\nsiliculose\nsiliculous\nsilicyl\nSilipan\nsiliqua\nsiliquaceous\nsiliquae\nSiliquaria\nSiliquariidae\nsilique\nsiliquiferous\nsiliquiform\nsiliquose\nsiliquous\nsilk\nsilkalene\nsilkaline\nsilked\nsilken\nsilker\nsilkflower\nsilkgrower\nsilkie\nsilkily\nsilkiness\nsilklike\nsilkman\nsilkness\nsilksman\nsilktail\nsilkweed\nsilkwoman\nsilkwood\nsilkwork\nsilkworks\nsilkworm\nsilky\nsill\nsillabub\nsilladar\nSillaginidae\nSillago\nsillandar\nsillar\nsiller\nSillery\nsillibouk\nsillikin\nsillily\nsillimanite\nsilliness\nsillock\nsillograph\nsillographer\nsillographist\nsillometer\nsillon\nsilly\nsillyhood\nsillyhow\nsillyish\nsillyism\nsillyton\nsilo\nsiloist\nSilpha\nsilphid\nSilphidae\nsilphium\nsilt\nsiltage\nsiltation\nsilting\nsiltlike\nsilty\nsilundum\nSilures\nSilurian\nSiluric\nsilurid\nSiluridae\nSiluridan\nsiluroid\nSiluroidei\nSilurus\nsilva\nsilvan\nsilvanity\nsilvanry\nSilvanus\nsilvendy\nsilver\nsilverback\nsilverbeater\nsilverbelly\nsilverberry\nsilverbill\nsilverboom\nsilverbush\nsilvered\nsilverer\nsilvereye\nsilverfin\nsilverfish\nsilverhead\nsilverily\nsilveriness\nsilvering\nsilverish\nsilverite\nsilverize\nsilverizer\nsilverleaf\nsilverless\nsilverlike\nsilverling\nsilverly\nsilvern\nsilverness\nsilverpoint\nsilverrod\nsilverside\nsilversides\nsilverskin\nsilversmith\nsilversmithing\nsilverspot\nsilvertail\nsilvertip\nsilvertop\nsilvervine\nsilverware\nsilverweed\nsilverwing\nsilverwood\nsilverwork\nsilverworker\nsilvery\nSilvester\nSilvia\nsilvical\nsilvicolous\nsilvics\nsilvicultural\nsilviculturally\nsilviculture\nsilviculturist\nSilvius\nSilybum\nsilyl\nSim\nsima\nSimaba\nsimal\nsimar\nSimarouba\nSimaroubaceae\nsimaroubaceous\nsimball\nsimbil\nsimblin\nsimblot\nSimblum\nsime\nSimeon\nSimeonism\nSimeonite\nSimia\nsimiad\nsimial\nsimian\nsimianity\nsimiesque\nSimiidae\nSimiinae\nsimilar\nsimilarity\nsimilarize\nsimilarly\nsimilative\nsimile\nsimilimum\nsimiliter\nsimilitive\nsimilitude\nsimilitudinize\nsimility\nsimilize\nsimilor\nsimioid\nsimious\nsimiousness\nsimity\nsimkin\nsimlin\nsimling\nsimmer\nsimmeringly\nsimmon\nsimnel\nsimnelwise\nsimoleon\nSimon\nsimoniac\nsimoniacal\nsimoniacally\nSimonian\nSimonianism\nsimonious\nsimonism\nSimonist\nsimonist\nsimony\nsimool\nsimoom\nsimoon\nSimosaurus\nsimous\nsimp\nsimpai\nsimper\nsimperer\nsimperingly\nsimple\nsimplehearted\nsimpleheartedly\nsimpleheartedness\nsimpleness\nsimpler\nsimpleton\nsimpletonian\nsimpletonianism\nsimpletonic\nsimpletonish\nsimpletonism\nsimplex\nsimplexed\nsimplexity\nsimplicident\nSimplicidentata\nsimplicidentate\nsimplicist\nsimplicitarian\nsimplicity\nsimplicize\nsimplification\nsimplificative\nsimplificator\nsimplified\nsimplifiedly\nsimplifier\nsimplify\nsimplism\nsimplist\nsimplistic\nsimply\nsimsim\nsimson\nsimulacra\nsimulacral\nsimulacre\nsimulacrize\nsimulacrum\nsimulance\nsimulant\nsimular\nsimulate\nsimulation\nsimulative\nsimulatively\nsimulator\nsimulatory\nsimulcast\nsimuler\nsimuliid\nSimuliidae\nsimulioid\nSimulium\nsimultaneity\nsimultaneous\nsimultaneously\nsimultaneousness\nsin\nsina\nSinae\nSinaean\nSinaic\nsinaite\nSinaitic\nsinal\nsinalbin\nSinaloa\nsinamay\nsinamine\nsinapate\nsinapic\nsinapine\nsinapinic\nSinapis\nsinapis\nsinapism\nsinapize\nsinapoline\nsinarchism\nsinarchist\nsinarquism\nsinarquist\nsinarquista\nsinawa\nsincaline\nsince\nsincere\nsincerely\nsincereness\nsincerity\nsincipital\nsinciput\nsind\nsinder\nSindhi\nsindle\nsindoc\nsindon\nsindry\nsine\nsinecural\nsinecure\nsinecureship\nsinecurism\nsinecurist\nSinesian\nsinew\nsinewed\nsinewiness\nsinewless\nsinewous\nsinewy\nsinfonia\nsinfonie\nsinfonietta\nsinful\nsinfully\nsinfulness\nsing\nsingability\nsingable\nsingableness\nsingally\nsingarip\nsinge\nsinged\nsingeing\nsingeingly\nsinger\nsingey\nSingfo\nsingh\nSinghalese\nsingillatim\nsinging\nsingingly\nsingkamas\nsingle\nsinglebar\nsingled\nsinglehanded\nsinglehandedly\nsinglehandedness\nsinglehearted\nsingleheartedly\nsingleheartedness\nsinglehood\nsingleness\nsingler\nsingles\nsinglestick\nsinglesticker\nsinglet\nsingleton\nsingletree\nsinglings\nsingly\nSingpho\nSingsing\nsingsong\nsingsongy\nSingspiel\nsingspiel\nsingstress\nsingular\nsingularism\nsingularist\nsingularity\nsingularization\nsingularize\nsingularly\nsingularness\nsingult\nsingultous\nsingultus\nsinh\nSinhalese\nSinian\nSinic\nSinicism\nSinicization\nSinicize\nSinico\nSinification\nSinify\nsinigrin\nsinigrinase\nsinigrosid\nsinigroside\nSinisian\nSinism\nsinister\nsinisterly\nsinisterness\nsinisterwise\nsinistrad\nsinistral\nsinistrality\nsinistrally\nsinistration\nsinistrin\nsinistrocerebral\nsinistrocular\nsinistrodextral\nsinistrogyrate\nsinistrogyration\nsinistrogyric\nsinistromanual\nsinistrorsal\nsinistrorsally\nsinistrorse\nsinistrous\nsinistrously\nsinistruous\nSinite\nSinitic\nsink\nsinkable\nsinkage\nsinker\nsinkerless\nsinkfield\nsinkhead\nsinkhole\nsinking\nSinkiuse\nsinkless\nsinklike\nsinkroom\nsinkstone\nsinky\nsinless\nsinlessly\nsinlessness\nsinlike\nsinnable\nsinnableness\nsinnen\nsinner\nsinneress\nsinnership\nsinnet\nSinningia\nsinningly\nsinningness\nsinoatrial\nsinoauricular\nSinogram\nsinoidal\nSinolog\nSinologer\nSinological\nSinologist\nSinologue\nSinology\nsinomenine\nSinonism\nSinophile\nSinophilism\nsinopia\nSinopic\nsinopite\nsinople\nsinproof\nSinsiga\nsinsion\nsinsring\nsinsyne\nsinter\nSinto\nsintoc\nSintoism\nSintoist\nSintsink\nSintu\nsinuate\nsinuated\nsinuatedentate\nsinuately\nsinuation\nsinuatocontorted\nsinuatodentate\nsinuatodentated\nsinuatopinnatifid\nsinuatoserrated\nsinuatoundulate\nsinuatrial\nsinuauricular\nsinuitis\nsinuose\nsinuosely\nsinuosity\nsinuous\nsinuously\nsinuousness\nSinupallia\nsinupallial\nSinupallialia\nSinupalliata\nsinupalliate\nsinus\nsinusal\nsinusitis\nsinuslike\nsinusoid\nsinusoidal\nsinusoidally\nsinuventricular\nsinward\nsiol\nSion\nsion\nSionite\nSiouan\nSioux\nsip\nsipage\nsipe\nsiper\nsiphoid\nsiphon\nsiphonaceous\nsiphonage\nsiphonal\nSiphonales\nSiphonaptera\nsiphonapterous\nSiphonaria\nsiphonariid\nSiphonariidae\nSiphonata\nsiphonate\nSiphoneae\nsiphoneous\nsiphonet\nsiphonia\nsiphonial\nSiphoniata\nsiphonic\nSiphonifera\nsiphoniferous\nsiphoniform\nsiphonium\nsiphonless\nsiphonlike\nSiphonobranchiata\nsiphonobranchiate\nSiphonocladales\nSiphonocladiales\nsiphonogam\nSiphonogama\nsiphonogamic\nsiphonogamous\nsiphonogamy\nsiphonoglyph\nsiphonoglyphe\nsiphonognathid\nSiphonognathidae\nsiphonognathous\nSiphonognathus\nSiphonophora\nsiphonophoran\nsiphonophore\nsiphonophorous\nsiphonoplax\nsiphonopore\nsiphonorhinal\nsiphonorhine\nsiphonosome\nsiphonostele\nsiphonostelic\nsiphonostely\nSiphonostoma\nSiphonostomata\nsiphonostomatous\nsiphonostome\nsiphonostomous\nsiphonozooid\nsiphonula\nsiphorhinal\nsiphorhinian\nsiphosome\nsiphuncle\nsiphuncled\nsiphuncular\nSiphunculata\nsiphunculate\nsiphunculated\nSipibo\nsipid\nsipidity\nSiping\nsiping\nsipling\nsipper\nsippet\nsippingly\nsippio\nSipunculacea\nsipunculacean\nsipunculid\nSipunculida\nsipunculoid\nSipunculoidea\nSipunculus\nsipylite\nSir\nsir\nsircar\nsirdar\nsirdarship\nsire\nSiredon\nsireless\nsiren\nsirene\nSirenia\nsirenian\nsirenic\nsirenical\nsirenically\nSirenidae\nsirening\nsirenize\nsirenlike\nsirenoid\nSirenoidea\nSirenoidei\nsireny\nsireship\nsiress\nsirgang\nSirian\nsirian\nSirianian\nsiriasis\nsiricid\nSiricidae\nSiricoidea\nsirih\nsiriometer\nSirione\nsiris\nSirius\nsirkeer\nsirki\nsirky\nsirloin\nsirloiny\nSirmian\nSirmuellera\nsiroc\nsirocco\nsiroccoish\nsiroccoishly\nsirpea\nsirple\nsirpoon\nsirrah\nsirree\nsirship\nsiruaballi\nsiruelas\nsirup\nsiruped\nsiruper\nsirupy\nSiryan\nSis\nsis\nsisal\nsiscowet\nsise\nsisel\nsiserara\nsiserary\nsiserskite\nsish\nsisham\nsisi\nsiskin\nSisley\nsismotherapy\nsiss\nSisseton\nsissification\nsissify\nsissiness\nsissoo\nSissu\nsissy\nsissyish\nsissyism\nsist\nSistani\nsister\nsisterhood\nsisterin\nsistering\nsisterize\nsisterless\nsisterlike\nsisterliness\nsisterly\nsistern\nSistine\nsistle\nsistomensin\nsistrum\nSistrurus\nSisymbrium\nSisyphean\nSisyphian\nSisyphides\nSisyphism\nSisyphist\nSisyphus\nSisyrinchium\nsisyrinchium\nsit\nSita\nsitao\nsitar\nsitatunga\nsitch\nsite\nsitfast\nsith\nsithcund\nsithe\nsithement\nsithence\nsithens\nsitient\nsitio\nsitiology\nsitiomania\nsitiophobia\nSitka\nSitkan\nsitology\nsitomania\nSitophilus\nsitophobia\nsitophobic\nsitosterin\nsitosterol\nsitotoxism\nSitta\nsittee\nsitten\nsitter\nSittidae\nSittinae\nsittine\nsitting\nsittringy\nsitual\nsituate\nsituated\nsituation\nsituational\nsitula\nsitulae\nsitus\nSium\nSiusi\nSiuslaw\nSiva\nsiva\nSivaism\nSivaist\nSivaistic\nSivaite\nSivan\nSivapithecus\nsivathere\nSivatheriidae\nSivatheriinae\nsivatherioid\nSivatherium\nsiver\nsivvens\nSiwan\nSiwash\nsiwash\nsix\nsixain\nsixer\nsixfoil\nsixfold\nsixhaend\nsixhynde\nsixpence\nsixpenny\nsixpennyworth\nsixscore\nsixsome\nsixte\nsixteen\nsixteener\nsixteenfold\nsixteenmo\nsixteenth\nsixteenthly\nsixth\nsixthet\nsixthly\nsixtieth\nSixtowns\nSixtus\nsixty\nsixtyfold\nsixtypenny\nsizable\nsizableness\nsizably\nsizal\nsizar\nsizarship\nsize\nsizeable\nsizeableness\nsized\nsizeman\nsizer\nsizes\nsiziness\nsizing\nsizy\nsizygia\nsizygium\nsizz\nsizzard\nsizzing\nsizzle\nsizzling\nsizzlingly\nSjaak\nsjambok\nSjouke\nskaddle\nskaff\nskaffie\nskag\nskaillie\nskainsmate\nskair\nskaitbird\nskal\nskalawag\nskaldship\nskance\nSkanda\nskandhas\nskart\nskasely\nSkat\nskat\nskate\nskateable\nskater\nskatikas\nskatiku\nskating\nskatist\nskatole\nskatosine\nskatoxyl\nskaw\nskean\nskeanockle\nskedaddle\nskedaddler\nskedge\nskedgewith\nskedlock\nskee\nskeed\nskeeg\nskeel\nskeeling\nskeely\nskeen\nskeenyie\nskeer\nskeered\nskeery\nskeesicks\nskeet\nSkeeter\nskeeter\nskeezix\nSkef\nskeg\nskegger\nskeif\nskeigh\nskeily\nskein\nskeiner\nskeipp\nskel\nskelder\nskelderdrake\nskeldrake\nskeletal\nskeletin\nskeletogenous\nskeletogeny\nskeletomuscular\nskeleton\nskeletonian\nskeletonic\nskeletonization\nskeletonize\nskeletonizer\nskeletonless\nskeletonweed\nskeletony\nskelf\nskelgoose\nskelic\nskell\nskellat\nskeller\nskelloch\nskellum\nskelly\nskelp\nskelper\nskelpin\nskelping\nskelter\nSkeltonian\nSkeltonic\nSkeltonical\nSkeltonics\nskemmel\nskemp\nsken\nskene\nskeo\nskeough\nskep\nskepful\nskeppist\nskeppund\nskeptic\nskeptical\nskeptically\nskepticalness\nskepticism\nskepticize\nsker\nskere\nskerret\nskerrick\nskerry\nsketch\nsketchability\nsketchable\nsketchbook\nsketchee\nsketcher\nsketchily\nsketchiness\nsketching\nsketchingly\nsketchist\nsketchlike\nsketchy\nskete\nsketiotai\nskeuomorph\nskeuomorphic\nskevish\nskew\nskewback\nskewbacked\nskewbald\nskewed\nskewer\nskewerer\nskewerwood\nskewings\nskewl\nskewly\nskewness\nskewwhiff\nskewwise\nskewy\nskey\nskeyting\nski\nskiagram\nskiagraph\nskiagrapher\nskiagraphic\nskiagraphical\nskiagraphically\nskiagraphy\nskiameter\nskiametry\nskiapod\nskiapodous\nskiascope\nskiascopy\nskibby\nskibslast\nskice\nskid\nskidded\nskidder\nskidding\nskiddingly\nskiddoo\nskiddy\nSkidi\nskidpan\nskidproof\nskidway\nskied\nskieppe\nskiepper\nskier\nskies\nskiff\nskiffless\nskiffling\nskift\nskiing\nskijore\nskijorer\nskijoring\nskil\nskilder\nskildfel\nskilfish\nskill\nskillagalee\nskilled\nskillenton\nskillessness\nskillet\nskillful\nskillfully\nskillfulness\nskilligalee\nskilling\nskillion\nskilly\nskilpot\nskilts\nskim\nskimback\nskime\nskimmed\nskimmer\nskimmerton\nSkimmia\nskimming\nskimmingly\nskimmington\nskimmity\nskimp\nskimpily\nskimpiness\nskimpingly\nskimpy\nskin\nskinbound\nskinch\nskinflint\nskinflintily\nskinflintiness\nskinflinty\nskinful\nskink\nskinker\nskinking\nskinkle\nskinless\nskinlike\nskinned\nskinner\nskinnery\nskinniness\nskinning\nskinny\nskintight\nskinworm\nskiogram\nskiograph\nskiophyte\nSkip\nskip\nskipbrain\nSkipetar\nskipjack\nskipjackly\nskipkennel\nskipman\nskippable\nskippel\nskipper\nskippered\nskippership\nskippery\nskippet\nskipping\nskippingly\nskipple\nskippund\nskippy\nskiptail\nskirl\nskirlcock\nskirling\nskirmish\nskirmisher\nskirmishing\nskirmishingly\nskirp\nskirr\nskirreh\nskirret\nskirt\nskirtboard\nskirted\nskirter\nskirting\nskirtingly\nskirtless\nskirtlike\nskirty\nskirwhit\nskirwort\nskit\nskite\nskiter\nskither\nSkitswish\nSkittaget\nSkittagetan\nskitter\nskittish\nskittishly\nskittishness\nskittle\nskittled\nskittler\nskittles\nskitty\nskittyboot\nskiv\nskive\nskiver\nskiverwood\nskiving\nskivvies\nsklate\nsklater\nsklent\nskleropelite\nsklinter\nskoal\nSkodaic\nskogbolite\nSkoinolon\nskokiaan\nSkokomish\nskomerite\nskoo\nskookum\nSkopets\nskoptsy\nskout\nskraeling\nskraigh\nskrike\nskrimshander\nskrupul\nskua\nskulduggery\nskulk\nskulker\nskulking\nskulkingly\nskull\nskullbanker\nskullcap\nskulled\nskullery\nskullfish\nskullful\nskully\nskulp\nskun\nskunk\nskunkbill\nskunkbush\nskunkdom\nskunkery\nskunkhead\nskunkish\nskunklet\nskunktop\nskunkweed\nskunky\nSkupshtina\nskuse\nskutterudite\nsky\nskybal\nskycraft\nSkye\nskyey\nskyful\nskyish\nskylark\nskylarker\nskyless\nskylight\nskylike\nskylook\nskyman\nskyphoi\nskyphos\nskyplast\nskyre\nskyrgaliard\nskyrocket\nskyrockety\nskysail\nskyscape\nskyscraper\nskyscraping\nskyshine\nskyugle\nskyward\nskywards\nskyway\nskywrite\nskywriter\nskywriting\nsla\nslab\nslabbed\nslabber\nslabberer\nslabbery\nslabbiness\nslabbing\nslabby\nslabman\nslabness\nslabstone\nslack\nslackage\nslacked\nslacken\nslackener\nslacker\nslackerism\nslacking\nslackingly\nslackly\nslackness\nslad\nsladang\nslade\nslae\nslag\nslaggability\nslaggable\nslagger\nslagging\nslaggy\nslagless\nslaglessness\nslagman\nslain\nslainte\nslaister\nslaistery\nslait\nslake\nslakeable\nslakeless\nslaker\nslaking\nslaky\nslam\nslammakin\nslammerkin\nslammock\nslammocking\nslammocky\nslamp\nslampamp\nslampant\nslander\nslanderer\nslanderful\nslanderfully\nslandering\nslanderingly\nslanderous\nslanderously\nslanderousness\nslanderproof\nslane\nslang\nslangily\nslanginess\nslangish\nslangishly\nslangism\nslangkop\nslangous\nslangster\nslanguage\nslangular\nslangy\nslank\nslant\nslantindicular\nslantindicularly\nslanting\nslantingly\nslantingways\nslantly\nslantways\nslantwise\nslap\nslapdash\nslapdashery\nslape\nslaphappy\nslapjack\nslapper\nslapping\nslapstick\nslapsticky\nslare\nslart\nslarth\nSlartibartfast\nslash\nslashed\nslasher\nslashing\nslashingly\nslashy\nslat\nslatch\nslate\nslateful\nslatelike\nslatemaker\nslatemaking\nslater\nslateworks\nslateyard\nslath\nslather\nslatify\nslatiness\nslating\nslatish\nslatted\nslatter\nslattern\nslatternish\nslatternliness\nslatternly\nslatternness\nslattery\nslatting\nslaty\nslaughter\nslaughterer\nslaughterhouse\nslaughteringly\nslaughterman\nslaughterous\nslaughterously\nslaughteryard\nslaum\nSlav\nSlavdom\nSlave\nslave\nslaveborn\nslaved\nslaveholder\nslaveholding\nslaveland\nslaveless\nslavelet\nslavelike\nslaveling\nslavemonger\nslaveowner\nslaveownership\nslavepen\nslaver\nslaverer\nslavering\nslaveringly\nslavery\nSlavey\nslavey\nSlavi\nSlavian\nSlavic\nSlavicism\nSlavicize\nSlavification\nSlavify\nslavikite\nslaving\nSlavish\nslavish\nslavishly\nslavishness\nSlavism\nSlavist\nSlavistic\nSlavization\nSlavize\nslavocracy\nslavocrat\nslavocratic\nSlavonian\nSlavonianize\nSlavonic\nSlavonically\nSlavonicize\nSlavonish\nSlavonism\nSlavonization\nSlavonize\nSlavophile\nSlavophilism\nSlavophobe\nSlavophobist\nslaw\nslay\nslayable\nslayer\nslaying\nsleathy\nsleave\nsleaved\nsleaziness\nsleazy\nSleb\nsleck\nsled\nsledded\nsledder\nsledding\nsledful\nsledge\nsledgeless\nsledgemeter\nsledger\nsledging\nsledlike\nslee\nsleech\nsleechy\nsleek\nsleeken\nsleeker\nsleeking\nsleekit\nsleekly\nsleekness\nsleeky\nsleep\nsleeper\nsleepered\nsleepful\nsleepfulness\nsleepify\nsleepily\nsleepiness\nsleeping\nsleepingly\nsleepland\nsleepless\nsleeplessly\nsleeplessness\nsleeplike\nsleepmarken\nsleepproof\nsleepry\nsleepwaker\nsleepwaking\nsleepwalk\nsleepwalker\nsleepwalking\nsleepward\nsleepwort\nsleepy\nsleepyhead\nsleer\nsleet\nsleetiness\nsleeting\nsleetproof\nsleety\nsleeve\nsleeveband\nsleeveboard\nsleeved\nsleeveen\nsleevefish\nsleeveful\nsleeveless\nsleevelessness\nsleevelet\nsleevelike\nsleever\nsleigh\nsleigher\nsleighing\nsleight\nsleightful\nsleighty\nslendang\nslender\nslenderish\nslenderize\nslenderly\nslenderness\nslent\nslepez\nslept\nslete\nsleuth\nsleuthdog\nsleuthful\nsleuthhound\nsleuthlike\nslew\nslewed\nslewer\nslewing\nsley\nsleyer\nslice\nsliceable\nsliced\nslicer\nslich\nslicht\nslicing\nslicingly\nslick\nslicken\nslickens\nslickenside\nslicker\nslickered\nslickery\nslicking\nslickly\nslickness\nslid\nslidable\nslidableness\nslidably\nslidage\nslidden\nslidder\nsliddery\nslide\nslideable\nslideableness\nslideably\nslided\nslidehead\nslideman\nslideproof\nslider\nslideway\nsliding\nslidingly\nslidingness\nslidometer\nslifter\nslight\nslighted\nslighter\nslightily\nslightiness\nslighting\nslightingly\nslightish\nslightly\nslightness\nslighty\nslim\nslime\nslimeman\nslimer\nslimily\nsliminess\nslimish\nslimishness\nslimly\nslimmish\nslimness\nslimpsy\nslimsy\nslimy\nsline\nsling\nslingball\nslinge\nslinger\nslinging\nslingshot\nslingsman\nslingstone\nslink\nslinker\nslinkily\nslinkiness\nslinking\nslinkingly\nslinkskin\nslinkweed\nslinky\nslip\nslipback\nslipband\nslipboard\nslipbody\nslipcase\nslipcoach\nslipcoat\nslipe\nslipgibbet\nsliphorn\nsliphouse\nslipknot\nslipless\nslipman\nslipover\nslippage\nslipped\nslipper\nslippered\nslipperflower\nslipperily\nslipperiness\nslipperlike\nslipperweed\nslipperwort\nslippery\nslipperyback\nslipperyroot\nslippiness\nslipping\nslippingly\nslipproof\nslippy\nslipshod\nslipshoddiness\nslipshoddy\nslipshodness\nslipshoe\nslipslap\nslipslop\nslipsloppish\nslipsloppism\nslipsole\nslipstep\nslipstring\nsliptopped\nslipway\nslirt\nslish\nslit\nslitch\nslite\nslither\nslithering\nslitheroo\nslithers\nslithery\nslithy\nslitless\nslitlike\nslitshell\nslitted\nslitter\nslitting\nslitty\nslitwise\nslive\nsliver\nsliverer\nsliverlike\nsliverproof\nslivery\nsliving\nslivovitz\nsloan\nSloanea\nslob\nslobber\nslobberchops\nslobberer\nslobbers\nslobbery\nslobby\nslock\nslocken\nslod\nslodder\nslodge\nslodger\nsloe\nsloeberry\nsloebush\nsloetree\nslog\nslogan\nsloganeer\nsloganize\nslogger\nslogging\nslogwood\nsloka\nsloke\nslommock\nslon\nslone\nslonk\nsloo\nsloom\nsloomy\nsloop\nsloopman\nsloosh\nslop\nslopdash\nslope\nsloped\nslopely\nslopeness\nsloper\nslopeways\nslopewise\nsloping\nslopingly\nslopingness\nslopmaker\nslopmaking\nsloppage\nslopped\nsloppery\nsloppily\nsloppiness\nslopping\nsloppy\nslops\nslopseller\nslopselling\nslopshop\nslopstone\nslopwork\nslopworker\nslopy\nslorp\nslosh\nslosher\nsloshily\nsloshiness\nsloshy\nslot\nslote\nsloted\nsloth\nslothful\nslothfully\nslothfulness\nslothound\nslotted\nslotter\nslottery\nslotting\nslotwise\nslouch\nsloucher\nslouchily\nslouchiness\nslouching\nslouchingly\nslouchy\nslough\nsloughiness\nsloughy\nslour\nsloush\nSlovak\nSlovakian\nSlovakish\nsloven\nSlovene\nSlovenian\nSlovenish\nslovenlike\nslovenliness\nslovenly\nslovenwood\nSlovintzi\nslow\nslowbellied\nslowbelly\nslowdown\nslowgoing\nslowheaded\nslowhearted\nslowheartedness\nslowhound\nslowish\nslowly\nslowmouthed\nslowpoke\nslowrie\nslows\nslowworm\nsloyd\nslub\nslubber\nslubberdegullion\nslubberer\nslubbering\nslubberingly\nslubberly\nslubbery\nslubbing\nslubby\nslud\nsludder\nsluddery\nsludge\nsludged\nsludger\nsludgy\nslue\nsluer\nslug\nslugabed\nsluggard\nsluggarding\nsluggardize\nsluggardliness\nsluggardly\nsluggardness\nsluggardry\nslugged\nslugger\nslugging\nsluggingly\nsluggish\nsluggishly\nsluggishness\nsluggy\nsluglike\nslugwood\nsluice\nsluicelike\nsluicer\nsluiceway\nsluicing\nsluicy\nsluig\nsluit\nslum\nslumber\nslumberer\nslumberful\nslumbering\nslumberingly\nslumberland\nslumberless\nslumberous\nslumberously\nslumberousness\nslumberproof\nslumbersome\nslumbery\nslumbrous\nslumdom\nslumgullion\nslumgum\nslumland\nslummage\nslummer\nslumminess\nslumming\nslummock\nslummocky\nslummy\nslump\nslumpproof\nslumproof\nslumpwork\nslumpy\nslumward\nslumwise\nslung\nslungbody\nslunge\nslunk\nslunken\nslur\nslurbow\nslurp\nslurry\nslush\nslusher\nslushily\nslushiness\nslushy\nslut\nslutch\nslutchy\nsluther\nsluthood\nslutter\nsluttery\nsluttikin\nsluttish\nsluttishly\nsluttishness\nslutty\nsly\nslyboots\nslyish\nslyly\nslyness\nslype\nsma\nsmachrie\nsmack\nsmackee\nsmacker\nsmackful\nsmacking\nsmackingly\nsmacksman\nsmaik\nSmalcaldian\nSmalcaldic\nsmall\nsmallage\nsmallclothes\nsmallcoal\nsmallen\nsmaller\nsmallhearted\nsmallholder\nsmalling\nsmallish\nsmallmouth\nsmallmouthed\nsmallness\nsmallpox\nsmalls\nsmallsword\nsmalltime\nsmallware\nsmally\nsmalm\nsmalt\nsmalter\nsmaltine\nsmaltite\nsmalts\nsmaragd\nsmaragdine\nsmaragdite\nsmaragdus\nsmarm\nsmarmy\nsmart\nsmarten\nsmarting\nsmartingly\nsmartish\nsmartism\nsmartless\nsmartly\nsmartness\nsmartweed\nsmarty\nsmash\nsmashable\nsmashage\nsmashboard\nsmasher\nsmashery\nsmashing\nsmashingly\nsmashment\nsmashup\nsmatter\nsmatterer\nsmattering\nsmatteringly\nsmattery\nsmaze\nsmear\nsmearcase\nsmeared\nsmearer\nsmeariness\nsmearless\nsmeary\nsmectic\nsmectis\nsmectite\nSmectymnuan\nSmectymnuus\nsmeddum\nsmee\nsmeech\nsmeek\nsmeeky\nsmeer\nsmeeth\nsmegma\nsmell\nsmellable\nsmellage\nsmelled\nsmeller\nsmellful\nsmellfungi\nsmellfungus\nsmelliness\nsmelling\nsmellproof\nsmellsome\nsmelly\nsmelt\nsmelter\nsmelterman\nsmeltery\nsmeltman\nsmeth\nsmethe\nsmeuse\nsmew\nsmich\nsmicker\nsmicket\nsmiddie\nsmiddum\nsmidge\nsmidgen\nsmifligate\nsmifligation\nsmiggins\nSmilacaceae\nsmilacaceous\nSmilaceae\nsmilaceous\nsmilacin\nSmilacina\nSmilax\nsmilax\nsmile\nsmileable\nsmileage\nsmileful\nsmilefulness\nsmileless\nsmilelessly\nsmilelessness\nsmilemaker\nsmilemaking\nsmileproof\nsmiler\nsmilet\nsmiling\nsmilingly\nsmilingness\nSmilodon\nsmily\nSmintheus\nSminthian\nsminthurid\nSminthuridae\nSminthurus\nsmirch\nsmircher\nsmirchless\nsmirchy\nsmiris\nsmirk\nsmirker\nsmirking\nsmirkingly\nsmirkish\nsmirkle\nsmirkly\nsmirky\nsmirtle\nsmit\nsmitch\nsmite\nsmiter\nsmith\nsmitham\nsmithcraft\nsmither\nsmithereens\nsmithery\nSmithian\nSmithianism\nsmithing\nsmithite\nSmithsonian\nsmithsonite\nsmithwork\nsmithy\nsmithydander\nsmiting\nsmitten\nsmitting\nsmock\nsmocker\nsmockface\nsmocking\nsmockless\nsmocklike\nsmog\nsmokables\nsmoke\nsmokeable\nsmokebox\nsmokebush\nsmoked\nsmokefarthings\nsmokehouse\nsmokejack\nsmokeless\nsmokelessly\nsmokelessness\nsmokelike\nsmokeproof\nsmoker\nsmokery\nsmokestack\nsmokestone\nsmoketight\nsmokewood\nsmokily\nsmokiness\nsmoking\nsmokish\nsmoky\nsmokyseeming\nsmolder\nsmolderingness\nsmolt\nsmooch\nsmoochy\nsmoodge\nsmoodger\nsmook\nsmoorich\nSmoos\nsmoot\nsmooth\nsmoothable\nsmoothback\nsmoothbore\nsmoothbored\nsmoothcoat\nsmoothen\nsmoother\nsmoothification\nsmoothify\nsmoothing\nsmoothingly\nsmoothish\nsmoothly\nsmoothmouthed\nsmoothness\nsmoothpate\nsmopple\nsmore\nsmorgasbord\nsmote\nsmother\nsmotherable\nsmotheration\nsmothered\nsmotherer\nsmotheriness\nsmothering\nsmotheringly\nsmothery\nsmotter\nsmouch\nsmoucher\nsmous\nsmouse\nsmouser\nsmout\nsmriti\nsmudge\nsmudged\nsmudgedly\nsmudgeless\nsmudgeproof\nsmudger\nsmudgily\nsmudginess\nsmudgy\nsmug\nsmuggery\nsmuggish\nsmuggishly\nsmuggishness\nsmuggle\nsmuggleable\nsmuggler\nsmugglery\nsmuggling\nsmugism\nsmugly\nsmugness\nsmuisty\nsmur\nsmurr\nsmurry\nsmuse\nsmush\nsmut\nsmutch\nsmutchin\nsmutchless\nsmutchy\nsmutproof\nsmutted\nsmutter\nsmuttily\nsmuttiness\nsmutty\nSmyrna\nSmyrnaite\nSmyrnean\nSmyrniot\nSmyrniote\nsmyth\nsmytrie\nsnab\nsnabbie\nsnabble\nsnack\nsnackle\nsnackman\nsnaff\nsnaffle\nsnaffles\nsnafu\nsnag\nsnagbush\nsnagged\nsnagger\nsnaggled\nsnaggletooth\nsnaggy\nsnagrel\nsnail\nsnaileater\nsnailery\nsnailfish\nsnailflower\nsnailish\nsnailishly\nsnaillike\nsnails\nsnaily\nsnaith\nsnake\nsnakebark\nsnakeberry\nsnakebird\nsnakebite\nsnakefish\nsnakeflower\nsnakehead\nsnakeholing\nsnakeleaf\nsnakeless\nsnakelet\nsnakelike\nsnakeling\nsnakemouth\nsnakeneck\nsnakeology\nsnakephobia\nsnakepiece\nsnakepipe\nsnakeproof\nsnaker\nsnakeroot\nsnakery\nsnakeship\nsnakeskin\nsnakestone\nsnakeweed\nsnakewise\nsnakewood\nsnakeworm\nsnakewort\nsnakily\nsnakiness\nsnaking\nsnakish\nsnaky\nsnap\nsnapback\nsnapbag\nsnapberry\nsnapdragon\nsnape\nsnaper\nsnaphead\nsnapholder\nsnapjack\nsnapless\nsnappable\nsnapped\nsnapper\nsnappily\nsnappiness\nsnapping\nsnappingly\nsnappish\nsnappishly\nsnappishness\nsnapps\nsnappy\nsnaps\nsnapsack\nsnapshot\nsnapshotter\nsnapweed\nsnapwood\nsnapwort\nsnapy\nsnare\nsnareless\nsnarer\nsnaringly\nsnark\nsnarl\nsnarler\nsnarleyyow\nsnarlingly\nsnarlish\nsnarly\nsnary\nsnaste\nsnatch\nsnatchable\nsnatched\nsnatcher\nsnatchily\nsnatching\nsnatchingly\nsnatchproof\nsnatchy\nsnath\nsnathe\nsnavel\nsnavvle\nsnaw\nsnead\nsneak\nsneaker\nsneakiness\nsneaking\nsneakingly\nsneakingness\nsneakish\nsneakishly\nsneakishness\nsneaksby\nsneaksman\nsneaky\nsneap\nsneath\nsneathe\nsneb\nsneck\nsneckdraw\nsneckdrawing\nsneckdrawn\nsnecker\nsnecket\nsned\nsnee\nsneer\nsneerer\nsneerful\nsneerfulness\nsneering\nsneeringly\nsneerless\nsneery\nsneesh\nsneeshing\nsneest\nsneesty\nsneeze\nsneezeless\nsneezeproof\nsneezer\nsneezeweed\nsneezewood\nsneezewort\nsneezing\nsneezy\nsnell\nsnelly\nSnemovna\nsnerp\nsnew\nsnib\nsnibble\nsnibbled\nsnibbler\nsnibel\nsnicher\nsnick\nsnickdraw\nsnickdrawing\nsnicker\nsnickering\nsnickeringly\nsnickersnee\nsnicket\nsnickey\nsnickle\nsniddle\nsnide\nsnideness\nsniff\nsniffer\nsniffily\nsniffiness\nsniffing\nsniffingly\nsniffish\nsniffishness\nsniffle\nsniffler\nsniffly\nsniffy\nsnift\nsnifter\nsnifty\nsnig\nsnigger\nsniggerer\nsniggering\nsniggle\nsniggler\nsniggoringly\nsnip\nsnipe\nsnipebill\nsnipefish\nsnipelike\nsniper\nsniperscope\nsniping\nsnipish\nsnipjack\nsnipnose\nsnipocracy\nsnipper\nsnippersnapper\nsnipperty\nsnippet\nsnippetiness\nsnippety\nsnippiness\nsnipping\nsnippish\nsnippy\nsnipsnapsnorum\nsniptious\nsnipy\nsnirl\nsnirt\nsnirtle\nsnitch\nsnitcher\nsnite\nsnithe\nsnithy\nsnittle\nsnivel\nsniveled\nsniveler\nsniveling\nsnively\nsnivy\nsnob\nsnobber\nsnobbery\nsnobbess\nsnobbing\nsnobbish\nsnobbishly\nsnobbishness\nsnobbism\nsnobby\nsnobdom\nsnobling\nsnobocracy\nsnobocrat\nsnobographer\nsnobography\nsnobologist\nsnobonomer\nsnobscat\nsnocher\nsnock\nsnocker\nsnod\nsnodly\nsnoek\nsnoeking\nsnog\nsnoga\nSnohomish\nsnoke\nSnonowas\nsnood\nsnooded\nsnooding\nsnook\nsnooker\nsnookered\nsnoop\nsnooper\nsnooperscope\nsnoopy\nsnoose\nsnoot\nsnootily\nsnootiness\nsnooty\nsnoove\nsnooze\nsnoozer\nsnooziness\nsnoozle\nsnoozy\nsnop\nSnoqualmie\nSnoquamish\nsnore\nsnoreless\nsnorer\nsnoring\nsnoringly\nsnork\nsnorkel\nsnorker\nsnort\nsnorter\nsnorting\nsnortingly\nsnortle\nsnorty\nsnot\nsnotter\nsnottily\nsnottiness\nsnotty\nsnouch\nsnout\nsnouted\nsnouter\nsnoutish\nsnoutless\nsnoutlike\nsnouty\nSnow\nsnow\nSnowball\nsnowball\nsnowbank\nsnowbell\nsnowberg\nsnowberry\nsnowbird\nsnowblink\nsnowbound\nsnowbreak\nsnowbush\nsnowcap\nsnowcraft\nSnowdonian\nsnowdrift\nsnowdrop\nsnowfall\nsnowflake\nsnowflight\nsnowflower\nsnowfowl\nsnowhammer\nsnowhouse\nsnowie\nsnowily\nsnowiness\nsnowish\nsnowk\nsnowl\nsnowland\nsnowless\nsnowlike\nsnowmanship\nsnowmobile\nsnowplow\nsnowproof\nsnowscape\nsnowshade\nsnowshed\nsnowshine\nsnowshoe\nsnowshoed\nsnowshoeing\nsnowshoer\nsnowslide\nsnowslip\nsnowstorm\nsnowsuit\nsnowworm\nsnowy\nsnozzle\nsnub\nsnubbable\nsnubbed\nsnubbee\nsnubber\nsnubbiness\nsnubbing\nsnubbingly\nsnubbish\nsnubbishly\nsnubbishness\nsnubby\nsnubproof\nsnuck\nsnudge\nsnuff\nsnuffbox\nsnuffboxer\nsnuffcolored\nsnuffer\nsnuffers\nsnuffiness\nsnuffing\nsnuffingly\nsnuffish\nsnuffle\nsnuffler\nsnuffles\nsnuffless\nsnuffliness\nsnuffling\nsnufflingly\nsnuffly\nsnuffman\nsnuffy\nsnug\nsnugger\nsnuggery\nsnuggish\nsnuggle\nsnugify\nsnugly\nsnugness\nsnum\nsnup\nsnupper\nsnur\nsnurl\nsnurly\nsnurp\nsnurt\nsnuzzle\nsny\nsnying\nso\nsoak\nsoakage\nsoakaway\nsoaked\nsoaken\nsoaker\nsoaking\nsoakingly\nsoakman\nsoaky\nsoally\nsoam\nsoap\nsoapbark\nsoapberry\nsoapbox\nsoapboxer\nsoapbubbly\nsoapbush\nsoaper\nsoapery\nsoapfish\nsoapily\nsoapiness\nsoaplees\nsoapless\nsoaplike\nsoapmaker\nsoapmaking\nsoapmonger\nsoaprock\nsoaproot\nsoapstone\nsoapsud\nsoapsuddy\nsoapsuds\nsoapsudsy\nsoapweed\nsoapwood\nsoapwort\nsoapy\nsoar\nsoarability\nsoarable\nsoarer\nsoaring\nsoaringly\nsoary\nsob\nsobber\nsobbing\nsobbingly\nsobby\nsobeit\nsober\nsoberer\nsobering\nsoberingly\nsoberize\nsoberlike\nsoberly\nsoberness\nsobersault\nsobersided\nsobersides\nsoberwise\nsobful\nsoboles\nsoboliferous\nsobproof\nSobralia\nsobralite\nSobranje\nsobrevest\nsobriety\nsobriquet\nsobriquetical\nsoc\nsocage\nsocager\nsoccer\nsoccerist\nsoccerite\nsoce\nsocht\nsociability\nsociable\nsociableness\nsociably\nsocial\nSociales\nsocialism\nsocialist\nsocialistic\nsocialite\nsociality\nsocializable\nsocialization\nsocialize\nsocializer\nsocially\nsocialness\nsociation\nsociative\nsocietal\nsocietally\nsocietarian\nsocietarianism\nsocietary\nsocietified\nsocietism\nsocietist\nsocietologist\nsocietology\nsociety\nsocietyish\nsocietyless\nsocii\nSocinian\nSocinianism\nSocinianistic\nSocinianize\nsociobiological\nsociocentric\nsociocracy\nsociocrat\nsociocratic\nsociocultural\nsociodrama\nsociodramatic\nsocioeconomic\nsocioeducational\nsociogenesis\nsociogenetic\nsociogeny\nsociography\nsociolatry\nsociolegal\nsociologian\nsociologic\nsociological\nsociologically\nsociologism\nsociologist\nsociologistic\nsociologize\nsociologizer\nsociologizing\nsociology\nsociomedical\nsociometric\nsociometry\nsocionomic\nsocionomics\nsocionomy\nsociophagous\nsociopolitical\nsocioreligious\nsocioromantic\nsociostatic\nsociotechnical\nsocius\nsock\nsockdolager\nsocker\nsocket\nsocketful\nsocketless\nsockeye\nsockless\nsocklessness\nsockmaker\nsockmaking\nsocky\nsocle\nsocman\nsocmanry\nsoco\nSocorrito\nSocotran\nSocotri\nSocotrine\nSocratean\nSocratic\nSocratical\nSocratically\nSocraticism\nSocratism\nSocratist\nSocratize\nsod\nsoda\nsodaclase\nsodaic\nsodaless\nsodalist\nsodalite\nsodalithite\nsodality\nsodamide\nsodbuster\nsodded\nsodden\nsoddenly\nsoddenness\nsodding\nsoddite\nsoddy\nsodic\nsodio\nsodioaluminic\nsodioaurous\nsodiocitrate\nsodiohydric\nsodioplatinic\nsodiosalicylate\nsodiotartrate\nsodium\nsodless\nsodoku\nSodom\nsodomic\nSodomist\nSodomite\nsodomitess\nsodomitic\nsodomitical\nsodomitically\nSodomitish\nsodomy\nsodwork\nsody\nsoe\nsoekoe\nsoever\nsofa\nsofane\nsofar\nsoffit\nSofia\nSofoklis\nSofronia\nsoft\nsofta\nsoftball\nsoftbrained\nsoften\nsoftener\nsoftening\nsofthead\nsoftheaded\nsofthearted\nsoftheartedly\nsoftheartedness\nsofthorn\nsoftish\nsoftling\nsoftly\nsoftner\nsoftness\nsoftship\nsofttack\nsoftwood\nsofty\nsog\nSoga\nSogdian\nSogdianese\nSogdianian\nSogdoite\nsoger\nsoget\nsoggarth\nsoggendalite\nsoggily\nsogginess\nsogging\nsoggy\nsoh\nsoho\nSoiesette\nsoiesette\nsoil\nsoilage\nsoiled\nsoiling\nsoilless\nsoilproof\nsoilure\nsoily\nsoiree\nsoixantine\nSoja\nsoja\nsojourn\nsojourner\nsojourney\nsojournment\nsok\nsoka\nsoke\nsokeman\nsokemanemot\nsokemanry\nsoken\nSokoki\nSokotri\nSokulk\nSol\nsol\nsola\nsolace\nsolaceful\nsolacement\nsolaceproof\nsolacer\nsolacious\nsolaciously\nsolaciousness\nsolan\nSolanaceae\nsolanaceous\nsolanal\nSolanales\nsolander\nsolaneine\nsolaneous\nsolanidine\nsolanine\nSolanum\nsolanum\nsolar\nsolarism\nsolarist\nsolaristic\nsolaristically\nsolaristics\nSolarium\nsolarium\nsolarization\nsolarize\nsolarometer\nsolate\nsolatia\nsolation\nsolatium\nsolay\nsold\nsoldado\nSoldan\nsoldan\nsoldanel\nSoldanella\nsoldanelle\nsoldanrie\nsolder\nsolderer\nsoldering\nsolderless\nsoldi\nsoldier\nsoldierbird\nsoldierbush\nsoldierdom\nsoldieress\nsoldierfish\nsoldierhearted\nsoldierhood\nsoldiering\nsoldierize\nsoldierlike\nsoldierliness\nsoldierly\nsoldierproof\nsoldiership\nsoldierwise\nsoldierwood\nsoldiery\nsoldo\nsole\nSolea\nsolea\nsoleas\nsolecism\nsolecist\nsolecistic\nsolecistical\nsolecistically\nsolecize\nsolecizer\nSoleidae\nsoleiform\nsoleil\nsoleless\nsolely\nsolemn\nsolemncholy\nsolemnify\nsolemnitude\nsolemnity\nsolemnization\nsolemnize\nsolemnizer\nsolemnly\nsolemnness\nSolen\nsolen\nsolenacean\nsolenaceous\nsoleness\nsolenette\nsolenial\nSolenidae\nsolenite\nsolenitis\nsolenium\nsolenoconch\nSolenoconcha\nsolenocyte\nSolenodon\nsolenodont\nSolenodontidae\nsolenogaster\nSolenogastres\nsolenoglyph\nSolenoglypha\nsolenoglyphic\nsolenoid\nsolenoidal\nsolenoidally\nSolenopsis\nsolenostele\nsolenostelic\nsolenostomid\nSolenostomidae\nsolenostomoid\nsolenostomous\nSolenostomus\nsolent\nsolentine\nsolepiece\nsoleplate\nsoleprint\nsoler\nSolera\nsoles\nsoleus\nsoleyn\nsolfataric\nsolfeggio\nsolferino\nsoli\nsoliative\nsolicit\nsolicitant\nsolicitation\nsolicitationism\nsolicited\nsolicitee\nsoliciter\nsoliciting\nsolicitor\nsolicitorship\nsolicitous\nsolicitously\nsolicitousness\nsolicitress\nsolicitrix\nsolicitude\nsolicitudinous\nsolid\nSolidago\nsolidago\nsolidaric\nsolidarily\nsolidarism\nsolidarist\nsolidaristic\nsolidarity\nsolidarize\nsolidary\nsolidate\nsolidi\nsolidifiability\nsolidifiable\nsolidifiableness\nsolidification\nsolidifier\nsolidiform\nsolidify\nsolidish\nsolidism\nsolidist\nsolidistic\nsolidity\nsolidly\nsolidness\nsolidum\nSolidungula\nsolidungular\nsolidungulate\nsolidus\nsolifidian\nsolifidianism\nsolifluction\nsolifluctional\nsoliform\nSolifugae\nsolifuge\nsolifugean\nsolifugid\nsolifugous\nsoliloquacious\nsoliloquist\nsoliloquium\nsoliloquize\nsoliloquizer\nsoliloquizing\nsoliloquizingly\nsoliloquy\nsolilunar\nSolio\nsolio\nsoliped\nsolipedal\nsolipedous\nsolipsism\nsolipsismal\nsolipsist\nsolipsistic\nsolist\nsolitaire\nsolitarian\nsolitarily\nsolitariness\nsolitary\nsoliterraneous\nsolitidal\nsolitude\nsolitudinarian\nsolitudinize\nsolitudinous\nsolivagant\nsolivagous\nsollar\nsolleret\nSollya\nsolmizate\nsolmization\nsolo\nsolod\nsolodi\nsolodization\nsolodize\nsoloecophanes\nsoloist\nSolomon\nSolomonian\nSolomonic\nSolomonical\nSolomonitic\nSolon\nsolon\nsolonchak\nsolonetz\nsolonetzic\nsolonetzicity\nSolonian\nSolonic\nsolonist\nsoloth\nsolotink\nsolotnik\nsolpugid\nSolpugida\nSolpugidea\nSolpugides\nsolstice\nsolsticion\nsolstitia\nsolstitial\nsolstitially\nsolstitium\nsolubility\nsolubilization\nsolubilize\nsoluble\nsolubleness\nsolubly\nsolum\nsolute\nsolution\nsolutional\nsolutioner\nsolutionist\nsolutize\nsolutizer\nSolutrean\nsolvability\nsolvable\nsolvableness\nsolvate\nsolvation\nsolve\nsolvement\nsolvency\nsolvend\nsolvent\nsolvently\nsolventproof\nsolver\nsolvolysis\nsolvolytic\nsolvolyze\nsolvsbergite\nSolyma\nSolymaean\nsoma\nsomacule\nSomal\nsomal\nSomali\nsomaplasm\nSomaschian\nsomasthenia\nsomata\nsomatasthenia\nSomateria\nsomatic\nsomatical\nsomatically\nsomaticosplanchnic\nsomaticovisceral\nsomatics\nsomatism\nsomatist\nsomatization\nsomatochrome\nsomatocyst\nsomatocystic\nsomatoderm\nsomatogenetic\nsomatogenic\nsomatognosis\nsomatognostic\nsomatologic\nsomatological\nsomatologically\nsomatologist\nsomatology\nsomatome\nsomatomic\nsomatophyte\nsomatophytic\nsomatoplasm\nsomatopleural\nsomatopleure\nsomatopleuric\nsomatopsychic\nsomatosplanchnic\nsomatotonia\nsomatotonic\nsomatotropic\nsomatotropically\nsomatotropism\nsomatotype\nsomatotyper\nsomatotypy\nsomatous\nsomber\nsomberish\nsomberly\nsomberness\nsombre\nsombrerite\nsombrero\nsombreroed\nsombrous\nsombrously\nsombrousness\nsome\nsomebody\nsomeday\nsomedeal\nsomegate\nsomehow\nsomeone\nsomepart\nsomeplace\nsomers\nsomersault\nsomerset\nSomersetian\nsomervillite\nsomesthesia\nsomesthesis\nsomesthetic\nsomething\nsomethingness\nsometime\nsometimes\nsomeway\nsomeways\nsomewhat\nsomewhatly\nsomewhatness\nsomewhen\nsomewhence\nsomewhere\nsomewheres\nsomewhile\nsomewhiles\nsomewhither\nsomewhy\nsomewise\nsomital\nsomite\nsomitic\nsomma\nsommaite\nsommelier\nsomnambulance\nsomnambulancy\nsomnambulant\nsomnambular\nsomnambulary\nsomnambulate\nsomnambulation\nsomnambulator\nsomnambule\nsomnambulency\nsomnambulic\nsomnambulically\nsomnambulism\nsomnambulist\nsomnambulistic\nsomnambulize\nsomnambulous\nsomnial\nsomniative\nsomnifacient\nsomniferous\nsomniferously\nsomnific\nsomnifuge\nsomnify\nsomniloquacious\nsomniloquence\nsomniloquent\nsomniloquism\nsomniloquist\nsomniloquize\nsomniloquous\nsomniloquy\nSomniosus\nsomnipathist\nsomnipathy\nsomnivolency\nsomnivolent\nsomnolence\nsomnolency\nsomnolent\nsomnolently\nsomnolescence\nsomnolescent\nsomnolism\nsomnolize\nsomnopathy\nsomnorific\nsomnus\nsompay\nsompne\nsompner\nSon\nson\nsonable\nsonance\nsonancy\nsonant\nsonantal\nsonantic\nsonantina\nsonantized\nsonar\nsonata\nsonatina\nsonation\nSonchus\nsond\nsondation\nsondeli\nSonderbund\nsonderclass\nSondergotter\nSondylomorum\nsoneri\nsong\nsongbird\nsongbook\nsongcraft\nsongfest\nsongful\nsongfully\nsongfulness\nSonghai\nSongish\nsongish\nsongland\nsongle\nsongless\nsonglessly\nsonglessness\nsonglet\nsonglike\nsongman\nSongo\nSongoi\nsongster\nsongstress\nsongworthy\nsongwright\nsongy\nsonhood\nsonic\nsoniferous\nsonification\nsoniou\nSonja\nsonk\nsonless\nsonlike\nsonlikeness\nsonly\nSonneratia\nSonneratiaceae\nsonneratiaceous\nsonnet\nsonnetary\nsonneteer\nsonneteeress\nsonnetic\nsonneting\nsonnetish\nsonnetist\nsonnetize\nsonnetlike\nsonnetwise\nsonnikins\nSonny\nsonny\nsonobuoy\nsonometer\nSonoran\nsonorant\nsonorescence\nsonorescent\nsonoric\nsonoriferous\nsonoriferously\nsonorific\nsonority\nsonorophone\nsonorosity\nsonorous\nsonorously\nsonorousness\nSonrai\nsons\nsonship\nsonsy\nsontag\nsoodle\nsoodly\nSoohong\nsook\nSooke\nsooky\nsool\nsooloos\nsoon\nsooner\nsoonish\nsoonly\nSoorah\nsoorawn\nsoord\nsoorkee\nSoot\nsoot\nsooter\nsooterkin\nsooth\nsoothe\nsoother\nsootherer\nsoothful\nsoothing\nsoothingly\nsoothingness\nsoothless\nsoothsay\nsoothsayer\nsoothsayership\nsoothsaying\nsootily\nsootiness\nsootless\nsootlike\nsootproof\nsooty\nsootylike\nsop\nsope\nsoph\nSopheric\nSopherim\nSophia\nsophia\nSophian\nsophic\nsophical\nsophically\nsophiologic\nsophiology\nsophism\nSophist\nsophister\nsophistic\nsophistical\nsophistically\nsophisticalness\nsophisticant\nsophisticate\nsophisticated\nsophistication\nsophisticative\nsophisticator\nsophisticism\nSophistress\nsophistress\nsophistry\nSophoclean\nsophomore\nsophomoric\nsophomorical\nsophomorically\nSophora\nsophoria\nSophronia\nsophronize\nSophy\nsophy\nsopite\nsopition\nsopor\nsoporiferous\nsoporiferously\nsoporiferousness\nsoporific\nsoporifical\nsoporifically\nsoporose\nsopper\nsoppiness\nsopping\nsoppy\nsoprani\nsopranino\nsopranist\nsoprano\nsora\nSorabian\nsorage\nsoral\nSorb\nsorb\nSorbaria\nsorbate\nsorbefacient\nsorbent\nSorbian\nsorbic\nsorbile\nsorbin\nsorbinose\nSorbish\nsorbite\nsorbitic\nsorbitize\nsorbitol\nSorbonic\nSorbonical\nSorbonist\nSorbonne\nsorbose\nsorboside\nSorbus\nsorbus\nsorcer\nsorcerer\nsorceress\nsorcering\nsorcerous\nsorcerously\nsorcery\nsorchin\nsorda\nSordaria\nSordariaceae\nsordawalite\nsordellina\nSordello\nsordes\nsordid\nsordidity\nsordidly\nsordidness\nsordine\nsordino\nsordor\nsore\nsoredia\nsoredial\nsorediate\nsorediferous\nsorediform\nsoredioid\nsoredium\nsoree\nsorefalcon\nsorefoot\nsorehawk\nsorehead\nsoreheaded\nsoreheadedly\nsoreheadedness\nsorehearted\nsorehon\nsorely\nsorema\nsoreness\nSorex\nsorgho\nSorghum\nsorghum\nsorgo\nsori\nsoricid\nSoricidae\nsoricident\nSoricinae\nsoricine\nsoricoid\nSoricoidea\nsoriferous\nsorite\nsorites\nsoritical\nsorn\nsornare\nsornari\nsorner\nsorning\nsoroban\nSoroptimist\nsororal\nsororate\nsororial\nsororially\nsororicidal\nsororicide\nsorority\nsororize\nsorose\nsorosis\nsorosphere\nSorosporella\nSorosporium\nsorption\nsorra\nSorrel\nsorrel\nsorrento\nsorrily\nsorriness\nsorroa\nsorrow\nsorrower\nsorrowful\nsorrowfully\nsorrowfulness\nsorrowing\nsorrowingly\nsorrowless\nsorrowproof\nsorrowy\nsorry\nsorryhearted\nsorryish\nsort\nsortable\nsortably\nsortal\nsortation\nsorted\nsorter\nsortie\nsortilege\nsortileger\nsortilegic\nsortilegious\nsortilegus\nsortilegy\nsortiment\nsortition\nsortly\nsorty\nsorus\nsorva\nsory\nsosh\nsoshed\nSosia\nsoso\nsosoish\nSospita\nsoss\nsossle\nsostenuto\nsot\nSotadean\nSotadic\nSoter\nSoteres\nsoterial\nsoteriologic\nsoteriological\nsoteriology\nSothiac\nSothiacal\nSothic\nSothis\nSotho\nsotie\nSotik\nsotnia\nsotnik\nsotol\nsots\nsottage\nsotted\nsotter\nsottish\nsottishly\nsottishness\nsou\nsouari\nsoubise\nsoubrette\nsoubrettish\nsoucar\nsouchet\nSouchong\nsouchong\nsouchy\nsoud\nsoudagur\nsouffle\nsouffleed\nsough\nsougher\nsoughing\nsought\nSouhegan\nsoul\nsoulack\nsoulcake\nsouled\nSouletin\nsoulful\nsoulfully\nsoulfulness\nsoulical\nsoulish\nsoulless\nsoullessly\nsoullessness\nsoullike\nSoulmass\nsoulsaving\nsoulward\nsouly\nsoum\nsoumansite\nsoumarque\nsound\nsoundable\nsoundage\nsoundboard\nsounder\nsoundful\nsoundheaded\nsoundheadedness\nsoundhearted\nsoundheartednes\nsounding\nsoundingly\nsoundingness\nsoundless\nsoundlessly\nsoundlessness\nsoundly\nsoundness\nsoundproof\nsoundproofing\nsoup\nsoupbone\nsoupcon\nsouper\nsouple\nsoupless\nsouplike\nsoupspoon\nsoupy\nsour\nsourbelly\nsourberry\nsourbread\nsourbush\nsourcake\nsource\nsourceful\nsourcefulness\nsourceless\nsourcrout\nsourdeline\nsourdine\nsoured\nsouredness\nsouren\nsourer\nsourhearted\nsouring\nsourish\nsourishly\nsourishness\nsourjack\nsourling\nsourly\nsourness\nsourock\nsoursop\nsourtop\nsourweed\nsourwood\nsoury\nsousaphone\nsousaphonist\nsouse\nsouser\nsouslik\nsoutane\nsouter\nsouterrain\nSouth\nsouth\nsouthard\nsouthbound\nSouthcottian\nSouthdown\nsoutheast\nsoutheaster\nsoutheasterly\nsoutheastern\nsoutheasternmost\nsoutheastward\nsoutheastwardly\nsoutheastwards\nsouther\nsoutherland\nsoutherliness\nsoutherly\nsouthermost\nsouthern\nSoutherner\nsoutherner\nsouthernism\nsouthernize\nsouthernliness\nsouthernly\nsouthernmost\nsouthernness\nsouthernwood\nsouthing\nsouthland\nsouthlander\nsouthmost\nsouthness\nsouthpaw\nSouthron\nsouthron\nSouthronie\nSouthumbrian\nsouthward\nsouthwardly\nsouthwards\nsouthwest\nsouthwester\nsouthwesterly\nsouthwestern\nSouthwesterner\nsouthwesternmost\nsouthwestward\nsouthwestwardly\nsouvenir\nsouverain\nsouwester\nsov\nsovereign\nsovereigness\nsovereignly\nsovereignness\nsovereignship\nsovereignty\nsoviet\nsovietdom\nsovietic\nsovietism\nsovietist\nsovietization\nsovietize\nsovite\nsovkhose\nsovkhoz\nsovran\nsovranty\nsow\nsowable\nsowan\nsowans\nsowar\nsowarry\nsowback\nsowbacked\nsowbane\nsowbelly\nsowbread\nsowdones\nsowel\nsowens\nsower\nsowfoot\nsowing\nsowins\nsowl\nsowle\nsowlike\nsowlth\nsown\nsowse\nsowt\nsowte\nSoxhlet\nsoy\nsoya\nsoybean\nSoyot\nsozin\nsozolic\nsozzle\nsozzly\nspa\nSpace\nspace\nspaceband\nspaced\nspaceful\nspaceless\nspacer\nspacesaving\nspaceship\nspaciness\nspacing\nspaciosity\nspaciotemporal\nspacious\nspaciously\nspaciousness\nspack\nspacy\nspad\nspade\nspadebone\nspaded\nspadefish\nspadefoot\nspadeful\nspadelike\nspademan\nspader\nspadesman\nspadewise\nspadework\nspadger\nspadiceous\nspadices\nspadicifloral\nspadiciflorous\nspadiciform\nspadicose\nspadilla\nspadille\nspading\nspadix\nspadone\nspadonic\nspadonism\nspadrone\nspadroon\nspae\nspaebook\nspaecraft\nspaedom\nspaeman\nspaer\nspaewife\nspaewoman\nspaework\nspaewright\nspaghetti\nSpagnuoli\nspagyric\nspagyrical\nspagyrically\nspagyrist\nspahi\nspaid\nspaik\nspairge\nspak\nSpalacidae\nspalacine\nSpalax\nspald\nspalder\nspalding\nspale\nspall\nspallation\nspaller\nspalling\nspalpeen\nspalt\nspan\nspancel\nspandle\nspandrel\nspandy\nspane\nspanemia\nspanemy\nspang\nspanghew\nspangle\nspangled\nspangler\nspanglet\nspangly\nspangolite\nSpaniard\nSpaniardization\nSpaniardize\nSpaniardo\nspaniel\nspaniellike\nspanielship\nspaning\nSpaniol\nSpaniolate\nSpanioli\nSpaniolize\nspanipelagic\nSpanish\nSpanishize\nSpanishly\nspank\nspanker\nspankily\nspanking\nspankingly\nspanky\nspanless\nspann\nspannel\nspanner\nspannerman\nspanopnoea\nspanpiece\nspantoon\nspanule\nspanworm\nSpar\nspar\nsparable\nsparada\nsparadrap\nsparagrass\nsparagus\nSparassis\nsparassodont\nSparassodonta\nSparaxis\nsparaxis\nsparch\nspare\nspareable\nspareless\nsparely\nspareness\nsparer\nsparerib\nsparesome\nSparganiaceae\nSparganium\nsparganium\nsparganosis\nsparganum\nsparge\nsparger\nspargosis\nsparhawk\nsparid\nSparidae\nsparing\nsparingly\nsparingness\nspark\nsparkback\nsparked\nsparker\nsparkiness\nsparking\nsparkish\nsparkishly\nsparkishness\nsparkle\nsparkleberry\nsparkler\nsparkless\nsparklessly\nsparklet\nsparklike\nsparkliness\nsparkling\nsparklingly\nsparklingness\nsparkly\nsparkproof\nsparks\nsparky\nsparlike\nsparling\nsparm\nSparmannia\nSparnacian\nsparoid\nsparpiece\nsparred\nsparrer\nsparring\nsparringly\nsparrow\nsparrowbill\nsparrowcide\nsparrowdom\nsparrowgrass\nsparrowish\nsparrowless\nsparrowlike\nsparrowtail\nsparrowtongue\nsparrowwort\nsparrowy\nsparry\nsparse\nsparsedly\nsparsely\nsparsile\nsparsioplast\nsparsity\nspart\nSpartacan\nSpartacide\nSpartacism\nSpartacist\nspartacist\nSpartan\nSpartanhood\nSpartanic\nSpartanically\nSpartanism\nSpartanize\nSpartanlike\nSpartanly\nsparteine\nsparterie\nsparth\nSpartiate\nSpartina\nSpartium\nspartle\nSparus\nsparver\nspary\nspasm\nspasmatic\nspasmatical\nspasmatomancy\nspasmed\nspasmic\nspasmodic\nspasmodical\nspasmodically\nspasmodicalness\nspasmodism\nspasmodist\nspasmolytic\nspasmophilia\nspasmophilic\nspasmotin\nspasmotoxin\nspasmous\nSpass\nspastic\nspastically\nspasticity\nspat\nspatalamancy\nSpatangida\nSpatangina\nspatangoid\nSpatangoida\nSpatangoidea\nspatangoidean\nSpatangus\nspatchcock\nspate\nspatha\nspathaceous\nspathal\nspathe\nspathed\nspatheful\nspathic\nSpathiflorae\nspathilae\nspathilla\nspathose\nspathous\nspathulate\nSpathyema\nspatial\nspatiality\nspatialization\nspatialize\nspatially\nspatiate\nspatiation\nspatilomancy\nspatiotemporal\nspatling\nspatted\nspatter\nspatterdashed\nspatterdasher\nspatterdock\nspattering\nspatteringly\nspatterproof\nspatterwork\nspatting\nspattle\nspattlehoe\nSpatula\nspatula\nspatulamancy\nspatular\nspatulate\nspatulation\nspatule\nspatuliform\nspatulose\nspave\nspaver\nspavie\nspavied\nspaviet\nspavin\nspavindy\nspavined\nspawn\nspawneater\nspawner\nspawning\nspawny\nspay\nspayad\nspayard\nspaying\nspeak\nspeakable\nspeakableness\nspeakably\nspeaker\nspeakeress\nspeakership\nspeakhouse\nspeakies\nspeaking\nspeakingly\nspeakingness\nspeakless\nspeaklessly\nspeal\nspealbone\nspean\nspear\nspearcast\nspearer\nspearfish\nspearflower\nspearhead\nspearing\nspearman\nspearmanship\nspearmint\nspearproof\nspearsman\nspearwood\nspearwort\nspeary\nspec\nspecchie\nspece\nspecial\nspecialism\nspecialist\nspecialistic\nspeciality\nspecialization\nspecialize\nspecialized\nspecializer\nspecially\nspecialness\nspecialty\nspeciation\nspecie\nspecies\nspeciestaler\nspecifiable\nspecific\nspecifical\nspecificality\nspecifically\nspecificalness\nspecificate\nspecification\nspecificative\nspecificatively\nspecificity\nspecificize\nspecificly\nspecificness\nspecifier\nspecifist\nspecify\nspecillum\nspecimen\nspecimenize\nspeciology\nspeciosity\nspecious\nspeciously\nspeciousness\nspeck\nspecked\nspeckedness\nspeckfall\nspeckiness\nspecking\nspeckle\nspecklebelly\nspecklebreast\nspeckled\nspeckledbill\nspeckledness\nspeckless\nspecklessly\nspecklessness\nspeckling\nspeckly\nspeckproof\nspecks\nspecksioneer\nspecky\nspecs\nspectacle\nspectacled\nspectacleless\nspectaclelike\nspectaclemaker\nspectaclemaking\nspectacles\nspectacular\nspectacularism\nspectacularity\nspectacularly\nspectator\nspectatordom\nspectatorial\nspectatorship\nspectatory\nspectatress\nspectatrix\nspecter\nspectered\nspecterlike\nspectra\nspectral\nspectralism\nspectrality\nspectrally\nspectralness\nspectrobolograph\nspectrobolographic\nspectrobolometer\nspectrobolometric\nspectrochemical\nspectrochemistry\nspectrocolorimetry\nspectrocomparator\nspectroelectric\nspectrogram\nspectrograph\nspectrographic\nspectrographically\nspectrography\nspectroheliogram\nspectroheliograph\nspectroheliographic\nspectrohelioscope\nspectrological\nspectrologically\nspectrology\nspectrometer\nspectrometric\nspectrometry\nspectromicroscope\nspectromicroscopical\nspectrophobia\nspectrophone\nspectrophonic\nspectrophotoelectric\nspectrophotograph\nspectrophotography\nspectrophotometer\nspectrophotometric\nspectrophotometry\nspectropolarimeter\nspectropolariscope\nspectropyrheliometer\nspectropyrometer\nspectroradiometer\nspectroradiometric\nspectroradiometry\nspectroscope\nspectroscopic\nspectroscopically\nspectroscopist\nspectroscopy\nspectrotelescope\nspectrous\nspectrum\nspectry\nspecula\nspecular\nSpecularia\nspecularly\nspeculate\nspeculation\nspeculatist\nspeculative\nspeculatively\nspeculativeness\nspeculativism\nspeculator\nspeculatory\nspeculatrices\nspeculatrix\nspeculist\nspeculum\nspecus\nsped\nspeech\nspeechcraft\nspeecher\nspeechful\nspeechfulness\nspeechification\nspeechifier\nspeechify\nspeeching\nspeechless\nspeechlessly\nspeechlessness\nspeechlore\nspeechmaker\nspeechmaking\nspeechment\nspeed\nspeedaway\nspeedboat\nspeedboating\nspeedboatman\nspeeder\nspeedful\nspeedfully\nspeedfulness\nspeedily\nspeediness\nspeeding\nspeedingly\nspeedless\nspeedometer\nspeedster\nspeedway\nspeedwell\nspeedy\nspeel\nspeelken\nspeelless\nspeen\nspeer\nspeering\nspeerity\nspeiskobalt\nspeiss\nspekboom\nspelaean\nspelder\nspelding\nspeldring\nspeleological\nspeleologist\nspeleology\nspelk\nspell\nspellable\nspellbind\nspellbinder\nspellbinding\nspellbound\nspellcraft\nspelldown\nspeller\nspellful\nspelling\nspellingdown\nspellingly\nspellmonger\nspellproof\nspellword\nspellwork\nspelt\nspelter\nspelterman\nspeltoid\nspeltz\nspeluncar\nspeluncean\nspelunk\nspelunker\nspence\nSpencean\nSpencer\nspencer\nSpencerian\nSpencerianism\nSpencerism\nspencerite\nspend\nspendable\nspender\nspendful\nspendible\nspending\nspendless\nspendthrift\nspendthrifty\nSpenerism\nspense\nSpenserian\nspent\nspeos\nSpeotyto\nsperable\nSperanza\nsperate\nSpergula\nSpergularia\nsperity\nsperket\nsperling\nsperm\nsperma\nspermaceti\nspermacetilike\nspermaduct\nspermalist\nSpermaphyta\nspermaphyte\nspermaphytic\nspermarium\nspermary\nspermashion\nspermatangium\nspermatheca\nspermathecal\nspermatic\nspermatically\nspermatid\nspermatiferous\nspermatin\nspermatiogenous\nspermation\nspermatiophore\nspermatism\nspermatist\nspermatitis\nspermatium\nspermatize\nspermatoblast\nspermatoblastic\nspermatocele\nspermatocyst\nspermatocystic\nspermatocystitis\nspermatocytal\nspermatocyte\nspermatogemma\nspermatogenesis\nspermatogenetic\nspermatogenic\nspermatogenous\nspermatogeny\nspermatogonial\nspermatogonium\nspermatoid\nspermatolysis\nspermatolytic\nspermatophoral\nspermatophore\nspermatophorous\nSpermatophyta\nspermatophyte\nspermatophytic\nspermatoplasm\nspermatoplasmic\nspermatoplast\nspermatorrhea\nspermatospore\nspermatotheca\nspermatova\nspermatovum\nspermatoxin\nspermatozoa\nspermatozoal\nspermatozoan\nspermatozoic\nspermatozoid\nspermatozoon\nspermaturia\nspermic\nspermidine\nspermiducal\nspermiduct\nspermigerous\nspermine\nspermiogenesis\nspermism\nspermist\nspermoblast\nspermoblastic\nspermocarp\nspermocenter\nspermoderm\nspermoduct\nspermogenesis\nspermogenous\nspermogone\nspermogoniferous\nspermogonium\nspermogonous\nspermologer\nspermological\nspermologist\nspermology\nspermolysis\nspermolytic\nspermophile\nspermophiline\nSpermophilus\nspermophore\nspermophorium\nSpermophyta\nspermophyte\nspermophytic\nspermosphere\nspermotheca\nspermotoxin\nspermous\nspermoviduct\nspermy\nsperonara\nsperonaro\nsperone\nsperrylite\nspessartite\nspet\nspetch\nspetrophoby\nspeuchan\nspew\nspewer\nspewiness\nspewing\nspewy\nspex\nsphacel\nSphacelaria\nSphacelariaceae\nsphacelariaceous\nSphacelariales\nsphacelate\nsphacelated\nsphacelation\nsphacelia\nsphacelial\nsphacelism\nsphaceloderma\nSphaceloma\nsphacelotoxin\nsphacelous\nsphacelus\nSphaeralcea\nsphaeraphides\nSphaerella\nsphaerenchyma\nSphaeriaceae\nsphaeriaceous\nSphaeriales\nsphaeridia\nsphaeridial\nsphaeridium\nSphaeriidae\nSphaerioidaceae\nsphaeristerium\nsphaerite\nSphaerium\nsphaeroblast\nSphaerobolaceae\nSphaerobolus\nSphaerocarpaceae\nSphaerocarpales\nSphaerocarpus\nsphaerocobaltite\nSphaerococcaceae\nsphaerococcaceous\nSphaerococcus\nsphaerolite\nsphaerolitic\nSphaeroma\nSphaeromidae\nSphaerophoraceae\nSphaerophorus\nSphaeropsidaceae\nSphaeropsidales\nSphaeropsis\nsphaerosiderite\nsphaerosome\nsphaerospore\nSphaerostilbe\nSphaerotheca\nSphaerotilus\nsphagion\nSphagnaceae\nsphagnaceous\nSphagnales\nsphagnicolous\nsphagnologist\nsphagnology\nsphagnous\nSphagnum\nsphagnum\nSphakiot\nsphalerite\nSphargis\nsphecid\nSphecidae\nSphecina\nSphecoidea\nspheges\nsphegid\nSphegidae\nSphegoidea\nsphendone\nsphene\nsphenethmoid\nsphenethmoidal\nsphenic\nsphenion\nSphenisci\nSpheniscidae\nSphenisciformes\nspheniscine\nspheniscomorph\nSpheniscomorphae\nspheniscomorphic\nSpheniscus\nsphenobasilar\nsphenobasilic\nsphenocephalia\nsphenocephalic\nsphenocephalous\nsphenocephaly\nSphenodon\nsphenodon\nsphenodont\nSphenodontia\nSphenodontidae\nsphenoethmoid\nsphenoethmoidal\nsphenofrontal\nsphenogram\nsphenographic\nsphenographist\nsphenography\nsphenoid\nsphenoidal\nsphenoiditis\nsphenolith\nsphenomalar\nsphenomandibular\nsphenomaxillary\nsphenopalatine\nsphenoparietal\nsphenopetrosal\nSphenophorus\nSphenophyllaceae\nsphenophyllaceous\nSphenophyllales\nSphenophyllum\nSphenopteris\nsphenosquamosal\nsphenotemporal\nsphenotic\nsphenotribe\nsphenotripsy\nsphenoturbinal\nsphenovomerine\nsphenozygomatic\nspherable\nspheral\nspherality\nspheraster\nspheration\nsphere\nsphereless\nspheric\nspherical\nsphericality\nspherically\nsphericalness\nsphericist\nsphericity\nsphericle\nsphericocylindrical\nsphericotetrahedral\nsphericotriangular\nspherics\nspheriform\nspherify\nspheroconic\nspherocrystal\nspherograph\nspheroidal\nspheroidally\nspheroidic\nspheroidical\nspheroidically\nspheroidicity\nspheroidism\nspheroidity\nspheroidize\nspheromere\nspherometer\nspheroquartic\nspherula\nspherular\nspherulate\nspherule\nspherulite\nspherulitic\nspherulitize\nsphery\nspheterize\nSphex\nsphexide\nsphincter\nsphincteral\nsphincteralgia\nsphincterate\nsphincterectomy\nsphincterial\nsphincteric\nsphincterismus\nsphincteroscope\nsphincteroscopy\nsphincterotomy\nsphindid\nSphindidae\nSphindus\nsphingal\nsphinges\nsphingid\nSphingidae\nsphingiform\nsphingine\nsphingoid\nsphingometer\nsphingomyelin\nsphingosine\nSphingurinae\nSphingurus\nsphinx\nsphinxian\nsphinxianness\nsphinxlike\nSphoeroides\nsphragide\nsphragistic\nsphragistics\nsphygmia\nsphygmic\nsphygmochronograph\nsphygmodic\nsphygmogram\nsphygmograph\nsphygmographic\nsphygmography\nsphygmoid\nsphygmology\nsphygmomanometer\nsphygmomanometric\nsphygmomanometry\nsphygmometer\nsphygmometric\nsphygmophone\nsphygmophonic\nsphygmoscope\nsphygmus\nSphyraena\nsphyraenid\nSphyraenidae\nsphyraenoid\nSphyrapicus\nSphyrna\nSphyrnidae\nSpica\nspica\nspical\nspicant\nSpicaria\nspicate\nspicated\nspiccato\nspice\nspiceable\nspiceberry\nspicebush\nspicecake\nspiced\nspiceful\nspicehouse\nspiceland\nspiceless\nspicelike\nspicer\nspicery\nspicewood\nspiciferous\nspiciform\nspicigerous\nspicilege\nspicily\nspiciness\nspicing\nspick\nspicket\nspickle\nspicknel\nspicose\nspicosity\nspicous\nspicousness\nspicula\nspiculae\nspicular\nspiculate\nspiculated\nspiculation\nspicule\nspiculiferous\nspiculiform\nspiculigenous\nspiculigerous\nspiculofiber\nspiculose\nspiculous\nspiculum\nspiculumamoris\nspicy\nspider\nspidered\nspiderflower\nspiderish\nspiderless\nspiderlike\nspiderling\nspiderly\nspiderweb\nspiderwork\nspiderwort\nspidery\nspidger\nspied\nspiegel\nspiegeleisen\nspiel\nspieler\nspier\nspiff\nspiffed\nspiffily\nspiffiness\nspiffing\nspiffy\nspiflicate\nspiflicated\nspiflication\nspig\nSpigelia\nSpigeliaceae\nSpigelian\nspiggoty\nspignet\nspigot\nSpike\nspike\nspikebill\nspiked\nspikedness\nspikefish\nspikehorn\nspikelet\nspikelike\nspikenard\nspiker\nspiketail\nspiketop\nspikeweed\nspikewise\nspikily\nspikiness\nspiking\nspiky\nSpilanthes\nspile\nspilehole\nspiler\nspileworm\nspilikin\nspiling\nspilite\nspilitic\nspill\nspillage\nspiller\nspillet\nspillproof\nspillway\nspilly\nSpilogale\nspiloma\nspilosite\nspilt\nspilth\nspilus\nspin\nspina\nspinacene\nspinaceous\nspinach\nspinachlike\nSpinacia\nspinae\nspinage\nspinal\nspinales\nspinalis\nspinally\nspinate\nspinder\nspindlage\nspindle\nspindleage\nspindled\nspindleful\nspindlehead\nspindlelegs\nspindlelike\nspindler\nspindleshanks\nspindletail\nspindlewise\nspindlewood\nspindleworm\nspindliness\nspindling\nspindly\nspindrift\nspine\nspinebill\nspinebone\nspined\nspinel\nspineless\nspinelessly\nspinelessness\nspinelet\nspinelike\nspinescence\nspinescent\nspinet\nspinetail\nspingel\nspinibulbar\nspinicarpous\nspinicerebellar\nspinidentate\nspiniferous\nSpinifex\nspinifex\nspiniform\nspinifugal\nspinigerous\nspinigrade\nspininess\nspinipetal\nspinitis\nspinituberculate\nspink\nspinnable\nspinnaker\nspinner\nspinneret\nspinnerular\nspinnerule\nspinnery\nspinney\nspinning\nspinningly\nspinobulbar\nspinocarpous\nspinocerebellar\nspinogalvanization\nspinoglenoid\nspinoid\nspinomuscular\nspinoneural\nspinoperipheral\nspinose\nspinosely\nspinoseness\nspinosity\nspinosodentate\nspinosodenticulate\nspinosotubercular\nspinosotuberculate\nspinosympathetic\nspinotectal\nspinothalamic\nspinotuberculous\nspinous\nspinousness\nSpinozism\nSpinozist\nSpinozistic\nspinster\nspinsterdom\nspinsterhood\nspinsterial\nspinsterish\nspinsterishly\nspinsterism\nspinsterlike\nspinsterly\nspinsterous\nspinstership\nspinstress\nspintext\nspinthariscope\nspinthariscopic\nspintherism\nspinulate\nspinulation\nspinule\nspinulescent\nspinuliferous\nspinuliform\nSpinulosa\nspinulose\nspinulosely\nspinulosociliate\nspinulosodentate\nspinulosodenticulate\nspinulosogranulate\nspinulososerrate\nspinulous\nspiny\nspionid\nSpionidae\nSpioniformia\nspiracle\nspiracula\nspiracular\nspiraculate\nspiraculiferous\nspiraculiform\nspiraculum\nSpiraea\nSpiraeaceae\nspiral\nspirale\nspiraled\nspiraliform\nspiralism\nspirality\nspiralization\nspiralize\nspirally\nspiraloid\nspiraltail\nspiralwise\nspiran\nspirant\nSpiranthes\nspiranthic\nspiranthy\nspirantic\nspirantize\nspiraster\nspirate\nspirated\nspiration\nspire\nspirea\nspired\nspiregrass\nspireless\nspirelet\nspireme\nspirepole\nspireward\nspirewise\nspiricle\nSpirifer\nSpirifera\nSpiriferacea\nspiriferid\nSpiriferidae\nspiriferoid\nspiriferous\nspiriform\nspirignath\nspirignathous\nspirilla\nSpirillaceae\nspirillaceous\nspirillar\nspirillolysis\nspirillosis\nspirillotropic\nspirillotropism\nspirillum\nspiring\nspirit\nspiritally\nspiritdom\nspirited\nspiritedly\nspiritedness\nspiriter\nspiritful\nspiritfully\nspiritfulness\nspirithood\nspiriting\nspiritism\nspiritist\nspiritistic\nspiritize\nspiritland\nspiritleaf\nspiritless\nspiritlessly\nspiritlessness\nspiritlike\nspiritmonger\nspiritous\nspiritrompe\nspiritsome\nspiritual\nspiritualism\nspiritualist\nspiritualistic\nspiritualistically\nspirituality\nspiritualization\nspiritualize\nspiritualizer\nspiritually\nspiritualness\nspiritualship\nspiritualty\nspirituosity\nspirituous\nspirituously\nspirituousness\nspiritus\nspiritweed\nspirity\nspirivalve\nspirket\nspirketing\nspirling\nspiro\nSpirobranchia\nSpirobranchiata\nspirobranchiate\nSpirochaeta\nSpirochaetaceae\nspirochaetal\nSpirochaetales\nSpirochaete\nspirochetal\nspirochete\nspirochetemia\nspirochetic\nspirocheticidal\nspirocheticide\nspirochetosis\nspirochetotic\nSpirodela\nspirogram\nspirograph\nspirographidin\nspirographin\nSpirographis\nSpirogyra\nspiroid\nspiroloculine\nspirometer\nspirometric\nspirometrical\nspirometry\nSpironema\nspiropentane\nSpirophyton\nSpirorbis\nspiroscope\nSpirosoma\nspirous\nspirt\nSpirula\nspirulate\nspiry\nspise\nspissated\nspissitude\nSpisula\nspit\nspital\nspitball\nspitballer\nspitbox\nspitchcock\nspite\nspiteful\nspitefully\nspitefulness\nspiteless\nspiteproof\nspitfire\nspitful\nspithamai\nspithame\nspitish\nspitpoison\nspitscocked\nspitstick\nspitted\nspitten\nspitter\nspitting\nspittle\nspittlefork\nspittlestaff\nspittoon\nspitz\nSpitzenburg\nspitzkop\nspiv\nspivery\nSpizella\nspizzerinctum\nSplachnaceae\nsplachnaceous\nsplachnoid\nSplachnum\nsplacknuck\nsplairge\nsplanchnapophysial\nsplanchnapophysis\nsplanchnectopia\nsplanchnemphraxis\nsplanchnesthesia\nsplanchnesthetic\nsplanchnic\nsplanchnoblast\nsplanchnocoele\nsplanchnoderm\nsplanchnodiastasis\nsplanchnodynia\nsplanchnographer\nsplanchnographical\nsplanchnography\nsplanchnolith\nsplanchnological\nsplanchnologist\nsplanchnology\nsplanchnomegalia\nsplanchnomegaly\nsplanchnopathy\nsplanchnopleural\nsplanchnopleure\nsplanchnopleuric\nsplanchnoptosia\nsplanchnoptosis\nsplanchnosclerosis\nsplanchnoscopy\nsplanchnoskeletal\nsplanchnoskeleton\nsplanchnosomatic\nsplanchnotomical\nsplanchnotomy\nsplanchnotribe\nsplash\nsplashboard\nsplashed\nsplasher\nsplashiness\nsplashing\nsplashingly\nsplashproof\nsplashy\nsplat\nsplatch\nsplatcher\nsplatchy\nsplathering\nsplatter\nsplatterdash\nsplatterdock\nsplatterer\nsplatterfaced\nsplatterwork\nsplay\nsplayed\nsplayer\nsplayfoot\nsplayfooted\nsplaymouth\nsplaymouthed\nspleen\nspleenful\nspleenfully\nspleenish\nspleenishly\nspleenishness\nspleenless\nspleenwort\nspleeny\nspleet\nspleetnew\nsplenadenoma\nsplenalgia\nsplenalgic\nsplenalgy\nsplenatrophia\nsplenatrophy\nsplenauxe\nsplenculus\nsplendacious\nsplendaciously\nsplendaciousness\nsplendent\nsplendently\nsplender\nsplendescent\nsplendid\nsplendidly\nsplendidness\nsplendiferous\nsplendiferously\nsplendiferousness\nsplendor\nsplendorous\nsplendorproof\nsplendourproof\nsplenectama\nsplenectasis\nsplenectomist\nsplenectomize\nsplenectomy\nsplenectopia\nsplenectopy\nsplenelcosis\nsplenemia\nsplenemphraxis\nspleneolus\nsplenepatitis\nsplenetic\nsplenetical\nsplenetically\nsplenetive\nsplenial\nsplenic\nsplenical\nsplenicterus\nsplenification\nspleniform\nsplenitis\nsplenitive\nsplenium\nsplenius\nsplenization\nsplenoblast\nsplenocele\nsplenoceratosis\nsplenocleisis\nsplenocolic\nsplenocyte\nsplenodiagnosis\nsplenodynia\nsplenography\nsplenohemia\nsplenoid\nsplenolaparotomy\nsplenology\nsplenolymph\nsplenolymphatic\nsplenolysin\nsplenolysis\nsplenoma\nsplenomalacia\nsplenomedullary\nsplenomegalia\nsplenomegalic\nsplenomegaly\nsplenomyelogenous\nsplenoncus\nsplenonephric\nsplenopancreatic\nsplenoparectama\nsplenoparectasis\nsplenopathy\nsplenopexia\nsplenopexis\nsplenopexy\nsplenophrenic\nsplenopneumonia\nsplenoptosia\nsplenoptosis\nsplenorrhagia\nsplenorrhaphy\nsplenotomy\nsplenotoxin\nsplenotyphoid\nsplenulus\nsplenunculus\nsplet\nspleuchan\nsplice\nspliceable\nsplicer\nsplicing\nsplinder\nspline\nsplineway\nsplint\nsplintage\nsplinter\nsplinterd\nsplinterless\nsplinternew\nsplinterproof\nsplintery\nsplintwood\nsplinty\nsplit\nsplitbeak\nsplitfinger\nsplitfruit\nsplitmouth\nsplitnew\nsplitsaw\nsplittail\nsplitten\nsplitter\nsplitting\nsplitworm\nsplodge\nsplodgy\nsplore\nsplosh\nsplotch\nsplotchily\nsplotchiness\nsplotchy\nsplother\nsplunge\nsplurge\nsplurgily\nsplurgy\nsplurt\nspluther\nsplutter\nsplutterer\nspoach\nSpock\nspode\nspodiosite\nspodium\nspodogenic\nspodogenous\nspodomancy\nspodomantic\nspodumene\nspoffish\nspoffle\nspoffy\nspogel\nspoil\nspoilable\nspoilage\nspoilation\nspoiled\nspoiler\nspoilfive\nspoilful\nspoiling\nspoilless\nspoilment\nspoilsman\nspoilsmonger\nspoilsport\nspoilt\nSpokan\nspoke\nspokeless\nspoken\nspokeshave\nspokesman\nspokesmanship\nspokester\nspokeswoman\nspokeswomanship\nspokewise\nspoky\nspole\nspolia\nspoliarium\nspoliary\nspoliate\nspoliation\nspoliator\nspoliatory\nspolium\nspondaic\nspondaical\nspondaize\nspondean\nspondee\nspondiac\nSpondiaceae\nSpondias\nspondulics\nspondyl\nspondylalgia\nspondylarthritis\nspondylarthrocace\nspondylexarthrosis\nspondylic\nspondylid\nSpondylidae\nspondylioid\nspondylitic\nspondylitis\nspondylium\nspondylizema\nspondylocace\nSpondylocladium\nspondylodiagnosis\nspondylodidymia\nspondylodymus\nspondyloid\nspondylolisthesis\nspondylolisthetic\nspondylopathy\nspondylopyosis\nspondyloschisis\nspondylosis\nspondylosyndesis\nspondylotherapeutics\nspondylotherapist\nspondylotherapy\nspondylotomy\nspondylous\nSpondylus\nspondylus\nspong\nsponge\nspongecake\nsponged\nspongeful\nspongeless\nspongelet\nspongelike\nspongeous\nspongeproof\nsponger\nspongewood\nSpongiae\nspongian\nspongicolous\nspongiculture\nSpongida\nspongiferous\nspongiform\nSpongiidae\nSpongilla\nspongillid\nSpongillidae\nspongilline\nspongily\nspongin\nsponginblast\nsponginblastic\nsponginess\nsponging\nspongingly\nspongioblast\nspongioblastoma\nspongiocyte\nspongiolin\nspongiopilin\nspongioplasm\nspongioplasmic\nspongiose\nspongiosity\nspongiousness\nSpongiozoa\nspongiozoon\nspongoblast\nspongoblastic\nspongoid\nspongology\nspongophore\nSpongospora\nspongy\nsponsal\nsponsalia\nsponsibility\nsponsible\nsponsing\nsponsion\nsponsional\nsponson\nsponsor\nsponsorial\nsponsorship\nsponspeck\nspontaneity\nspontaneous\nspontaneously\nspontaneousness\nspontoon\nspoof\nspoofer\nspoofery\nspoofish\nspook\nspookdom\nspookery\nspookily\nspookiness\nspookish\nspookism\nspookist\nspookological\nspookologist\nspookology\nspooky\nspool\nspooler\nspoolful\nspoollike\nspoolwood\nspoom\nspoon\nspoonbill\nspoondrift\nspooner\nspoonerism\nspooneyism\nspooneyly\nspooneyness\nspoonflower\nspoonful\nspoonhutch\nspoonily\nspooniness\nspooning\nspoonism\nspoonless\nspoonlike\nspoonmaker\nspoonmaking\nspoonways\nspoonwood\nspoony\nspoonyism\nspoor\nspoorer\nspoot\nspor\nsporabola\nsporaceous\nsporades\nsporadial\nsporadic\nsporadical\nsporadically\nsporadicalness\nsporadicity\nsporadism\nsporadosiderite\nsporal\nsporange\nsporangia\nsporangial\nsporangidium\nsporangiferous\nsporangiform\nsporangioid\nsporangiola\nsporangiole\nsporangiolum\nsporangiophore\nsporangiospore\nsporangite\nSporangites\nsporangium\nsporation\nspore\nspored\nsporeformer\nsporeforming\nsporeling\nsporicide\nsporid\nsporidesm\nsporidia\nsporidial\nsporidiferous\nsporidiole\nsporidiolum\nsporidium\nsporiferous\nsporification\nsporiparity\nsporiparous\nsporoblast\nSporobolus\nsporocarp\nsporocarpium\nSporochnaceae\nSporochnus\nsporocyst\nsporocystic\nsporocystid\nsporocyte\nsporodochia\nsporodochium\nsporoduct\nsporogenesis\nsporogenic\nsporogenous\nsporogeny\nsporogone\nsporogonial\nsporogonic\nsporogonium\nsporogony\nsporoid\nsporologist\nsporomycosis\nsporont\nsporophore\nsporophoric\nsporophorous\nsporophydium\nsporophyll\nsporophyllary\nsporophyllum\nsporophyte\nsporophytic\nsporoplasm\nsporosac\nsporostegium\nsporostrote\nsporotrichosis\nsporotrichotic\nSporotrichum\nsporous\nSporozoa\nsporozoal\nsporozoan\nsporozoic\nsporozoite\nsporozoon\nsporran\nsport\nsportability\nsportable\nsportance\nsporter\nsportful\nsportfully\nsportfulness\nsportily\nsportiness\nsporting\nsportingly\nsportive\nsportively\nsportiveness\nsportless\nsportling\nsportly\nsports\nsportsman\nsportsmanlike\nsportsmanliness\nsportsmanly\nsportsmanship\nsportsome\nsportswear\nsportswoman\nsportswomanly\nsportswomanship\nsportula\nsportulae\nsporty\nsporular\nsporulate\nsporulation\nsporule\nsporuliferous\nsporuloid\nsposh\nsposhy\nspot\nspotless\nspotlessly\nspotlessness\nspotlight\nspotlighter\nspotlike\nspotrump\nspotsman\nspottable\nspotted\nspottedly\nspottedness\nspotteldy\nspotter\nspottily\nspottiness\nspotting\nspottle\nspotty\nspoucher\nspousage\nspousal\nspousally\nspouse\nspousehood\nspouseless\nspousy\nspout\nspouter\nspoutiness\nspouting\nspoutless\nspoutlike\nspoutman\nspouty\nsprachle\nsprack\nsprackish\nsprackle\nsprackly\nsprackness\nsprad\nspraddle\nsprag\nspragger\nspraggly\nspraich\nsprain\nspraint\nspraints\nsprang\nsprangle\nsprangly\nsprank\nsprat\nspratter\nspratty\nsprauchle\nsprawl\nsprawler\nsprawling\nsprawlingly\nsprawly\nspray\nsprayboard\nsprayer\nsprayey\nsprayful\nsprayfully\nsprayless\nspraylike\nsprayproof\nspread\nspreadation\nspreadboard\nspreaded\nspreader\nspreadhead\nspreading\nspreadingly\nspreadingness\nspreadover\nspready\nspreaghery\nspreath\nspreckle\nspree\nspreeuw\nSprekelia\nspreng\nsprent\nspret\nsprew\nsprewl\nspridhogue\nspried\nsprier\nspriest\nsprig\nsprigged\nsprigger\nspriggy\nsprightful\nsprightfully\nsprightfulness\nsprightlily\nsprightliness\nsprightly\nsprighty\nspriglet\nsprigtail\nSpring\nspring\nspringal\nspringald\nspringboard\nspringbok\nspringbuck\nspringe\nspringer\nspringerle\nspringfinger\nspringfish\nspringful\nspringhaas\nspringhalt\nspringhead\nspringhouse\nspringily\nspringiness\nspringing\nspringingly\nspringle\nspringless\nspringlet\nspringlike\nspringly\nspringmaker\nspringmaking\nspringtail\nspringtide\nspringtime\nspringtrap\nspringwood\nspringworm\nspringwort\nspringwurzel\nspringy\nsprink\nsprinkle\nsprinkled\nsprinkleproof\nsprinkler\nsprinklered\nsprinkling\nsprint\nsprinter\nsprit\nsprite\nspritehood\nspritsail\nsprittail\nsprittie\nspritty\nsproat\nsprocket\nsprod\nsprogue\nsproil\nsprong\nsprose\nsprottle\nsprout\nsproutage\nsprouter\nsproutful\nsprouting\nsproutland\nsproutling\nsprowsy\nspruce\nsprucely\nspruceness\nsprucery\nsprucification\nsprucify\nsprue\nspruer\nsprug\nspruiker\nspruit\nsprung\nsprunny\nsprunt\nspruntly\nspry\nspryly\nspryness\nspud\nSpudboy\nspudder\nspuddle\nspuddy\nspuffle\nspug\nspuilyie\nspuilzie\nspuke\nspume\nspumescence\nspumescent\nspumiferous\nspumification\nspumiform\nspumone\nspumose\nspumous\nspumy\nspun\nspung\nspunk\nspunkie\nspunkily\nspunkiness\nspunkless\nspunky\nspunny\nspur\nspurflower\nspurgall\nspurge\nspurgewort\nspuriae\nspuriosity\nspurious\nspuriously\nspuriousness\nSpurius\nspurl\nspurless\nspurlet\nspurlike\nspurling\nspurmaker\nspurmoney\nspurn\nspurner\nspurnpoint\nspurnwater\nspurproof\nspurred\nspurrer\nspurrial\nspurrier\nspurrings\nspurrite\nspurry\nspurt\nspurter\nspurtive\nspurtively\nspurtle\nspurway\nspurwing\nspurwinged\nspurwort\nsput\nsputa\nsputative\nsputter\nsputterer\nsputtering\nsputteringly\nsputtery\nsputum\nsputumary\nsputumose\nsputumous\nSpy\nspy\nspyboat\nspydom\nspyer\nspyfault\nspyglass\nspyhole\nspyism\nspyproof\nSpyros\nspyship\nspytower\nsquab\nsquabash\nsquabasher\nsquabbed\nsquabbish\nsquabble\nsquabbler\nsquabbling\nsquabblingly\nsquabbly\nsquabby\nsquacco\nsquad\nsquaddy\nsquadrate\nsquadrism\nsquadron\nsquadrone\nsquadroned\nsquail\nsquailer\nsqualene\nSquali\nsqualid\nSqualida\nSqualidae\nsqualidity\nsqualidly\nsqualidness\nsqualiform\nsquall\nsqualler\nsquallery\nsquallish\nsqually\nsqualm\nSqualodon\nsqualodont\nSqualodontidae\nsqualoid\nSqualoidei\nsqualor\nSqualus\nsquam\nsquama\nsquamaceous\nsquamae\nSquamariaceae\nSquamata\nsquamate\nsquamated\nsquamatine\nsquamation\nsquamatogranulous\nsquamatotuberculate\nsquame\nsquamella\nsquamellate\nsquamelliferous\nsquamelliform\nsquameous\nsquamiferous\nsquamiform\nsquamify\nsquamigerous\nsquamipennate\nSquamipennes\nsquamipinnate\nSquamipinnes\nsquamocellular\nsquamoepithelial\nsquamoid\nsquamomastoid\nsquamoparietal\nsquamopetrosal\nsquamosa\nsquamosal\nsquamose\nsquamosely\nsquamoseness\nsquamosis\nsquamosity\nsquamosodentated\nsquamosoimbricated\nsquamosomaxillary\nsquamosoparietal\nsquamosoradiate\nsquamosotemporal\nsquamosozygomatic\nsquamosphenoid\nsquamosphenoidal\nsquamotemporal\nsquamous\nsquamously\nsquamousness\nsquamozygomatic\nSquamscot\nsquamula\nsquamulae\nsquamulate\nsquamulation\nsquamule\nsquamuliform\nsquamulose\nsquander\nsquanderer\nsquanderingly\nsquandermania\nsquandermaniac\nsquantum\nsquarable\nsquare\nsquareage\nsquarecap\nsquared\nsquaredly\nsquareface\nsquareflipper\nsquarehead\nsquarelike\nsquarely\nsquareman\nsquaremouth\nsquareness\nsquarer\nsquaretail\nsquarewise\nsquaring\nsquarish\nsquarishly\nsquark\nsquarrose\nsquarrosely\nsquarrous\nsquarrulose\nsquarson\nsquarsonry\nsquary\nsquash\nsquashberry\nsquasher\nsquashily\nsquashiness\nsquashy\nsquat\nSquatarola\nsquatarole\nSquatina\nsquatina\nsquatinid\nSquatinidae\nsquatinoid\nSquatinoidei\nsquatly\nsquatment\nsquatmore\nsquatness\nsquattage\nsquatted\nsquatter\nsquatterarchy\nsquatterdom\nsquatterproof\nsquattily\nsquattiness\nsquatting\nsquattingly\nsquattish\nsquattocracy\nsquattocratic\nsquatty\nsquatwise\nsquaw\nsquawberry\nsquawbush\nsquawdom\nsquawfish\nsquawflower\nsquawk\nsquawker\nsquawkie\nsquawking\nsquawkingly\nsquawky\nSquawmish\nsquawroot\nSquawtits\nsquawweed\nSquaxon\nsqudge\nsqudgy\nsqueak\nsqueaker\nsqueakery\nsqueakily\nsqueakiness\nsqueaking\nsqueakingly\nsqueaklet\nsqueakproof\nsqueaky\nsqueakyish\nsqueal\nsqueald\nsquealer\nsquealing\nsqueam\nsqueamish\nsqueamishly\nsqueamishness\nsqueamous\nsqueamy\nSquedunk\nsqueege\nsqueegee\nsqueezability\nsqueezable\nsqueezableness\nsqueezably\nsqueeze\nsqueezeman\nsqueezer\nsqueezing\nsqueezingly\nsqueezy\nsquelch\nsquelcher\nsquelchily\nsquelchiness\nsquelching\nsquelchingly\nsquelchingness\nsquelchy\nsquench\nsquencher\nsqueteague\nsquib\nsquibber\nsquibbery\nsquibbish\nsquiblet\nsquibling\nsquid\nsquiddle\nsquidge\nsquidgereen\nsquidgy\nsquiffed\nsquiffer\nsquiffy\nsquiggle\nsquiggly\nsquilgee\nsquilgeer\nSquill\nSquilla\nsquilla\nsquillagee\nsquillery\nsquillian\nsquillid\nSquillidae\nsquilloid\nSquilloidea\nsquimmidge\nsquin\nsquinance\nsquinancy\nsquinch\nsquinny\nsquinsy\nsquint\nsquinted\nsquinter\nsquinting\nsquintingly\nsquintingness\nsquintly\nsquintness\nsquinty\nsquirage\nsquiralty\nsquire\nsquirearch\nsquirearchal\nsquirearchical\nsquirearchy\nsquiredom\nsquireen\nsquirehood\nsquireless\nsquirelet\nsquirelike\nsquireling\nsquirely\nsquireocracy\nsquireship\nsquiress\nsquiret\nsquirewise\nsquirish\nsquirism\nsquirk\nsquirm\nsquirminess\nsquirming\nsquirmingly\nsquirmy\nsquirr\nsquirrel\nsquirrelfish\nsquirrelian\nsquirreline\nsquirrelish\nsquirrellike\nsquirrelproof\nsquirreltail\nsquirt\nsquirter\nsquirtiness\nsquirting\nsquirtingly\nsquirtish\nsquirty\nsquish\nsquishy\nsquit\nsquitch\nsquitchy\nsquitter\nsquoze\nsquush\nsquushy\nsraddha\nsramana\nSri\nsri\nSridhar\nSridharan\nSrikanth\nSrinivas\nSrinivasan\nSriram\nSrivatsan\nsruti\nSsi\nssu\nst\nstaab\nStaatsrat\nstab\nstabber\nstabbing\nstabbingly\nstabile\nstabilify\nstabilist\nstabilitate\nstability\nstabilization\nstabilizator\nstabilize\nstabilizer\nstable\nstableboy\nstableful\nstablekeeper\nstablelike\nstableman\nstableness\nstabler\nstablestand\nstableward\nstablewards\nstabling\nstablishment\nstably\nstaboy\nstabproof\nstabulate\nstabulation\nstabwort\nstaccato\nStacey\nstacher\nstachydrin\nstachydrine\nstachyose\nStachys\nstachys\nStachytarpheta\nStachyuraceae\nstachyuraceous\nStachyurus\nstack\nstackage\nstackencloud\nstacker\nstackfreed\nstackful\nstackgarth\nStackhousia\nStackhousiaceae\nstackhousiaceous\nstackless\nstackman\nstackstand\nstackyard\nstacte\nstactometer\nStacy\nstadda\nstaddle\nstaddling\nstade\nstadholder\nstadholderate\nstadholdership\nstadhouse\nstadia\nstadic\nstadimeter\nstadiometer\nstadion\nstadium\nstafette\nstaff\nstaffed\nstaffelite\nstaffer\nstaffless\nstaffman\nstag\nstagbush\nstage\nstageability\nstageable\nstageableness\nstageably\nstagecoach\nstagecoaching\nstagecraft\nstaged\nstagedom\nstagehand\nstagehouse\nstageland\nstagelike\nstageman\nstager\nstagery\nstagese\nstagewise\nstageworthy\nstagewright\nstaggard\nstaggart\nstaggarth\nStagger\nstagger\nstaggerbush\nstaggerer\nstaggering\nstaggeringly\nstaggers\nstaggerweed\nstaggerwort\nstaggery\nstaggie\nstaggy\nstaghead\nstaghorn\nstaghound\nstaghunt\nstaghunter\nstaghunting\nstagiary\nstagily\nstaginess\nstaging\nStagirite\nStagiritic\nstaglike\nstagmometer\nstagnance\nstagnancy\nstagnant\nstagnantly\nstagnantness\nstagnate\nstagnation\nstagnatory\nstagnature\nstagnicolous\nstagnize\nstagnum\nStagonospora\nstagskin\nstagworm\nstagy\nStahlhelm\nStahlhelmer\nStahlhelmist\nStahlian\nStahlianism\nStahlism\nstaia\nstaid\nstaidly\nstaidness\nstain\nstainability\nstainable\nstainableness\nstainably\nstainer\nstainful\nstainierite\nstaining\nstainless\nstainlessly\nstainlessness\nstainproof\nstaio\nstair\nstairbeak\nstairbuilder\nstairbuilding\nstaircase\nstaired\nstairhead\nstairless\nstairlike\nstairstep\nstairway\nstairwise\nstairwork\nstairy\nstaith\nstaithman\nstaiver\nstake\nstakehead\nstakeholder\nstakemaster\nstaker\nstakerope\nStakhanovism\nStakhanovite\nstalactic\nstalactical\nstalactiform\nstalactital\nstalactite\nstalactited\nstalactitic\nstalactitical\nstalactitically\nstalactitiform\nstalactitious\nstalagma\nstalagmite\nstalagmitic\nstalagmitical\nstalagmitically\nstalagmometer\nstalagmometric\nstalagmometry\nstale\nstalely\nstalemate\nstaleness\nstaling\nStalinism\nStalinist\nStalinite\nstalk\nstalkable\nstalked\nstalker\nstalkily\nstalkiness\nstalking\nstalkingly\nstalkless\nstalklet\nstalklike\nstalko\nstalky\nstall\nstallage\nstallar\nstallboard\nstallenger\nstaller\nstallership\nstalling\nstallion\nstallionize\nstallman\nstallment\nstalwart\nstalwartism\nstalwartize\nstalwartly\nstalwartness\nstam\nstambha\nstambouline\nstamen\nstamened\nstamin\nstamina\nstaminal\nstaminate\nstamineal\nstamineous\nstaminiferous\nstaminigerous\nstaminode\nstaminodium\nstaminody\nstammel\nstammer\nstammerer\nstammering\nstammeringly\nstammeringness\nstammerwort\nstamnos\nstamp\nstampable\nstampage\nstampedable\nstampede\nstampeder\nstampedingly\nstampee\nstamper\nstampery\nstamphead\nStampian\nstamping\nstample\nstampless\nstampman\nstampsman\nstampweed\nStan\nstance\nstanch\nstanchable\nstanchel\nstancheled\nstancher\nstanchion\nstanchless\nstanchly\nstanchness\nstand\nstandage\nstandard\nstandardbred\nstandardizable\nstandardization\nstandardize\nstandardized\nstandardizer\nstandardwise\nstandee\nstandel\nstandelwelks\nstandelwort\nstander\nstandergrass\nstanderwort\nstandfast\nstanding\nstandish\nstandoff\nstandoffish\nstandoffishness\nstandout\nstandpat\nstandpatism\nstandpatter\nstandpipe\nstandpoint\nstandpost\nstandstill\nstane\nstanechat\nstang\nStangeria\nstanhope\nStanhopea\nstanine\nStanislaw\nstanjen\nstank\nstankie\nStanley\nStanly\nstannane\nstannary\nstannate\nstannator\nstannel\nstanner\nstannery\nstannic\nstannide\nstanniferous\nstannite\nstanno\nstannotype\nstannous\nstannoxyl\nstannum\nstannyl\nstanza\nstanzaed\nstanzaic\nstanzaical\nstanzaically\nstanze\nstap\nstapedectomy\nstapedial\nstapediform\nstapediovestibular\nstapedius\nStapelia\nstapelia\nstapes\nstaphisagria\nstaphyle\nStaphylea\nStaphyleaceae\nstaphyleaceous\nstaphylectomy\nstaphyledema\nstaphylematoma\nstaphylic\nstaphyline\nstaphylinic\nstaphylinid\nStaphylinidae\nstaphylinideous\nStaphylinoidea\nStaphylinus\nstaphylion\nstaphylitis\nstaphyloangina\nstaphylococcal\nstaphylococci\nstaphylococcic\nStaphylococcus\nstaphylococcus\nstaphylodermatitis\nstaphylodialysis\nstaphyloedema\nstaphylohemia\nstaphylolysin\nstaphyloma\nstaphylomatic\nstaphylomatous\nstaphylomycosis\nstaphyloncus\nstaphyloplastic\nstaphyloplasty\nstaphyloptosia\nstaphyloptosis\nstaphyloraphic\nstaphylorrhaphic\nstaphylorrhaphy\nstaphyloschisis\nstaphylosis\nstaphylotome\nstaphylotomy\nstaphylotoxin\nstaple\nstapled\nstapler\nstaplewise\nstapling\nStar\nstar\nstarblind\nstarbloom\nstarboard\nstarbolins\nstarbright\nStarbuck\nstarch\nstarchboard\nstarched\nstarchedly\nstarchedness\nstarcher\nstarchflower\nstarchily\nstarchiness\nstarchless\nstarchlike\nstarchly\nstarchmaker\nstarchmaking\nstarchman\nstarchness\nstarchroot\nstarchworks\nstarchwort\nstarchy\nstarcraft\nstardom\nstare\nstaree\nstarer\nstarets\nstarfish\nstarflower\nstarfruit\nstarful\nstargaze\nstargazer\nstargazing\nstaring\nstaringly\nstark\nstarken\nstarkly\nstarkness\nstarky\nstarless\nstarlessly\nstarlessness\nstarlet\nstarlight\nstarlighted\nstarlights\nstarlike\nstarling\nstarlit\nstarlite\nstarlitten\nstarmonger\nstarn\nstarnel\nstarnie\nstarnose\nStaroobriadtsi\nstarost\nstarosta\nstarosty\nstarred\nstarrily\nstarriness\nstarring\nstarringly\nstarry\nstarshake\nstarshine\nstarship\nstarshoot\nstarshot\nstarstone\nstarstroke\nstart\nstarter\nstartful\nstartfulness\nstarthroat\nstarting\nstartingly\nstartish\nstartle\nstartler\nstartling\nstartlingly\nstartlingness\nstartlish\nstartlishness\nstartly\nstartor\nstarty\nstarvation\nstarve\nstarveacre\nstarved\nstarvedly\nstarveling\nstarver\nstarvy\nstarward\nstarwise\nstarworm\nstarwort\nstary\nstases\nstash\nstashie\nstasidion\nstasimetric\nstasimon\nstasimorphy\nstasiphobia\nstasis\nstassfurtite\nstatable\nstatal\nstatant\nstatcoulomb\nState\nstate\nstatecraft\nstated\nstatedly\nstateful\nstatefully\nstatefulness\nstatehood\nStatehouse\nstateless\nstatelet\nstatelich\nstatelily\nstateliness\nstately\nstatement\nstatemonger\nstatequake\nstater\nstateroom\nstatesboy\nstateside\nstatesider\nstatesman\nstatesmanese\nstatesmanlike\nstatesmanly\nstatesmanship\nstatesmonger\nstateswoman\nstateway\nstatfarad\nstathmoi\nstathmos\nstatic\nstatical\nstatically\nStatice\nstaticproof\nstatics\nstation\nstational\nstationarily\nstationariness\nstationary\nstationer\nstationery\nstationman\nstationmaster\nstatiscope\nstatism\nstatist\nstatistic\nstatistical\nstatistically\nstatistician\nstatisticize\nstatistics\nstatistology\nstative\nstatoblast\nstatocracy\nstatocyst\nstatolatry\nstatolith\nstatolithic\nstatometer\nstator\nstatoreceptor\nstatorhab\nstatoscope\nstatospore\nstatuarism\nstatuarist\nstatuary\nstatue\nstatuecraft\nstatued\nstatueless\nstatuelike\nstatuesque\nstatuesquely\nstatuesqueness\nstatuette\nstature\nstatured\nstatus\nstatutable\nstatutableness\nstatutably\nstatutary\nstatute\nstatutorily\nstatutory\nstatvolt\nstaucher\nstauk\nstaumer\nstaun\nstaunch\nstaunchable\nstaunchly\nstaunchness\nstaup\nstauracin\nstauraxonia\nstauraxonial\nstaurion\nstaurolatry\nstaurolite\nstaurolitic\nstaurology\nStauromedusae\nstauromedusan\nstauropegial\nstauropegion\nstauroscope\nstauroscopic\nstauroscopically\nstaurotide\nstauter\nstave\nstaveable\nstaveless\nstaver\nstavers\nstaverwort\nstavesacre\nstavewise\nstavewood\nstaving\nstavrite\nstaw\nstawn\nstaxis\nstay\nstayable\nstayed\nstayer\nstaylace\nstayless\nstaylessness\nstaymaker\nstaymaking\nstaynil\nstays\nstaysail\nstayship\nstchi\nstead\nsteadfast\nsteadfastly\nsteadfastness\nsteadier\nsteadily\nsteadiment\nsteadiness\nsteading\nsteadman\nsteady\nsteadying\nsteadyingly\nsteadyish\nsteak\nsteal\nstealability\nstealable\nstealage\nstealed\nstealer\nstealing\nstealingly\nstealth\nstealthful\nstealthfully\nstealthily\nstealthiness\nstealthless\nstealthlike\nstealthwise\nstealthy\nstealy\nsteam\nsteamboat\nsteamboating\nsteamboatman\nsteamcar\nsteamer\nsteamerful\nsteamerless\nsteamerload\nsteamily\nsteaminess\nsteaming\nsteamless\nsteamlike\nsteampipe\nsteamproof\nsteamship\nsteamtight\nsteamtightness\nsteamy\nstean\nsteaning\nsteapsin\nstearate\nstearic\nsteariform\nstearin\nstearolactone\nstearone\nstearoptene\nstearrhea\nstearyl\nsteatin\nsteatite\nsteatitic\nsteatocele\nsteatogenous\nsteatolysis\nsteatolytic\nsteatoma\nsteatomatous\nsteatopathic\nsteatopyga\nsteatopygia\nsteatopygic\nsteatopygous\nSteatornis\nSteatornithes\nSteatornithidae\nsteatorrhea\nsteatosis\nstech\nstechados\nsteckling\nsteddle\nStedman\nsteed\nsteedless\nsteedlike\nsteek\nsteekkan\nsteekkannen\nsteel\nSteelboy\nsteeler\nsteelhead\nsteelhearted\nsteelification\nsteelify\nsteeliness\nsteeling\nsteelless\nsteellike\nsteelmaker\nsteelmaking\nsteelproof\nsteelware\nsteelwork\nsteelworker\nsteelworks\nsteely\nsteelyard\nSteen\nsteen\nsteenboc\nsteenbock\nsteenbok\nSteenie\nsteenkirk\nsteenstrupine\nsteenth\nsteep\nsteepdown\nsteepen\nsteeper\nsteepgrass\nsteepish\nsteeple\nsteeplebush\nsteeplechase\nsteeplechaser\nsteeplechasing\nsteepled\nsteepleless\nsteeplelike\nsteepletop\nsteeply\nsteepness\nsteepweed\nsteepwort\nsteepy\nsteer\nsteerability\nsteerable\nsteerage\nsteerageway\nsteerer\nsteering\nsteeringly\nsteerling\nsteerman\nsteermanship\nsteersman\nsteerswoman\nsteeve\nsteevely\nsteever\nsteeving\nStefan\nsteg\nsteganogram\nsteganographical\nsteganographist\nsteganography\nSteganophthalmata\nsteganophthalmate\nsteganophthalmatous\nSteganophthalmia\nsteganopod\nsteganopodan\nSteganopodes\nsteganopodous\nstegnosis\nstegnotic\nstegocarpous\nStegocephalia\nstegocephalian\nstegocephalous\nStegodon\nstegodont\nstegodontine\nStegomus\nStegomyia\nstegosaur\nStegosauria\nstegosaurian\nstegosauroid\nStegosaurus\nsteid\nsteigh\nStein\nstein\nSteinberger\nsteinbok\nSteinerian\nsteinful\nsteinkirk\nSteironema\nstekan\nstela\nstelae\nstelai\nstelar\nstele\nstell\nStella\nstella\nstellar\nStellaria\nstellary\nstellate\nstellated\nstellately\nstellature\nstelleridean\nstellerine\nstelliferous\nstellification\nstelliform\nstellify\nstelling\nstellionate\nstelliscript\nStellite\nstellite\nstellular\nstellularly\nstellulate\nstelography\nstem\nstema\nstemhead\nstemless\nstemlet\nstemlike\nstemma\nstemmata\nstemmatiform\nstemmatous\nstemmed\nstemmer\nstemmery\nstemming\nstemmy\nStemona\nStemonaceae\nstemonaceous\nstemple\nstempost\nstemson\nstemwards\nstemware\nsten\nstenar\nstench\nstenchel\nstenchful\nstenching\nstenchion\nstenchy\nstencil\nstenciler\nstencilmaker\nstencilmaking\nstend\nsteng\nstengah\nstenion\nsteno\nstenobathic\nstenobenthic\nstenobragmatic\nstenobregma\nstenocardia\nstenocardiac\nStenocarpus\nstenocephalia\nstenocephalic\nstenocephalous\nstenocephaly\nstenochoria\nstenochrome\nstenochromy\nstenocoriasis\nstenocranial\nstenocrotaphia\nStenofiber\nstenog\nstenogastric\nstenogastry\nStenoglossa\nstenograph\nstenographer\nstenographic\nstenographical\nstenographically\nstenographist\nstenography\nstenohaline\nstenometer\nstenopaic\nStenopelmatidae\nstenopetalous\nstenophile\nStenophragma\nstenophyllous\nstenorhyncous\nstenosed\nstenosepalous\nstenosis\nstenosphere\nstenostomatous\nstenostomia\nStenotaphrum\nstenotelegraphy\nstenothermal\nstenothorax\nstenotic\nstenotype\nstenotypic\nstenotypist\nstenotypy\nstent\nstenter\nstenterer\nstenton\nStentor\nstentorian\nstentorianly\nstentorine\nstentorious\nstentoriously\nstentoriousness\nstentoronic\nstentorophonic\nstentrel\nstep\nstepaunt\nstepbairn\nstepbrother\nstepbrotherhood\nstepchild\nstepdame\nstepdaughter\nstepfather\nstepfatherhood\nstepfatherly\nstepgrandchild\nstepgrandfather\nstepgrandmother\nstepgrandson\nStephan\nStephana\nstephane\nstephanial\nStephanian\nstephanic\nStephanie\nstephanion\nstephanite\nStephanoceros\nStephanokontae\nstephanome\nstephanos\nStephanotis\nstephanotis\nStephanurus\nStephe\nStephen\nstepladder\nstepless\nsteplike\nstepminnie\nstepmother\nstepmotherhood\nstepmotherless\nstepmotherliness\nstepmotherly\nstepnephew\nstepniece\nstepparent\nsteppe\nstepped\nsteppeland\nstepper\nstepping\nsteppingstone\nsteprelation\nsteprelationship\nstepsire\nstepsister\nstepson\nstepstone\nstept\nstepuncle\nstepway\nstepwise\nsteradian\nstercobilin\nstercolin\nstercophagic\nstercophagous\nstercoraceous\nstercoral\nStercoranism\nStercoranist\nStercorariidae\nStercorariinae\nstercorarious\nStercorarius\nstercorary\nstercorate\nstercoration\nstercorean\nstercoremia\nstercoreous\nStercorianism\nstercoricolous\nStercorist\nstercorite\nstercorol\nstercorous\nstercovorous\nSterculia\nSterculiaceae\nsterculiaceous\nsterculiad\nstere\nstereagnosis\nSterelmintha\nsterelminthic\nsterelminthous\nstereo\nstereobate\nstereobatic\nstereoblastula\nstereocamera\nstereocampimeter\nstereochemic\nstereochemical\nstereochemically\nstereochemistry\nstereochromatic\nstereochromatically\nstereochrome\nstereochromic\nstereochromically\nstereochromy\nstereocomparagraph\nstereocomparator\nstereoelectric\nstereofluoroscopic\nstereofluoroscopy\nstereogastrula\nstereognosis\nstereognostic\nstereogoniometer\nstereogram\nstereograph\nstereographer\nstereographic\nstereographical\nstereographically\nstereography\nstereoisomer\nstereoisomeric\nstereoisomerical\nstereoisomeride\nstereoisomerism\nstereomatrix\nstereome\nstereomer\nstereomeric\nstereomerical\nstereomerism\nstereometer\nstereometric\nstereometrical\nstereometrically\nstereometry\nstereomicrometer\nstereomonoscope\nstereoneural\nstereophantascope\nstereophonic\nstereophony\nstereophotogrammetry\nstereophotograph\nstereophotographic\nstereophotography\nstereophotomicrograph\nstereophotomicrography\nstereophysics\nstereopicture\nstereoplanigraph\nstereoplanula\nstereoplasm\nstereoplasma\nstereoplasmic\nstereopsis\nstereoptician\nstereopticon\nstereoradiograph\nstereoradiography\nStereornithes\nstereornithic\nstereoroentgenogram\nstereoroentgenography\nstereoscope\nstereoscopic\nstereoscopically\nstereoscopism\nstereoscopist\nstereoscopy\nStereospondyli\nstereospondylous\nstereostatic\nstereostatics\nstereotactic\nstereotactically\nstereotaxis\nstereotelemeter\nstereotelescope\nstereotomic\nstereotomical\nstereotomist\nstereotomy\nstereotropic\nstereotropism\nstereotypable\nstereotype\nstereotyped\nstereotyper\nstereotypery\nstereotypic\nstereotypical\nstereotyping\nstereotypist\nstereotypographer\nstereotypography\nstereotypy\nStereum\nsterhydraulic\nsteri\nsteric\nsterically\nsterics\nsteride\nsterigma\nsterigmata\nsterigmatic\nsterile\nsterilely\nsterileness\nsterilisable\nsterility\nsterilizability\nsterilizable\nsterilization\nsterilize\nsterilizer\nsterin\nsterk\nsterlet\nSterling\nsterling\nsterlingly\nsterlingness\nStern\nstern\nSterna\nsterna\nsternad\nsternage\nsternal\nsternalis\nsternbergite\nsterncastle\nsterneber\nsternebra\nsternebrae\nsternebral\nsterned\nsternforemost\nSterninae\nsternite\nsternitic\nsternly\nsternman\nsternmost\nsternness\nSterno\nsternoclavicular\nsternocleidomastoid\nsternoclidomastoid\nsternocoracoid\nsternocostal\nsternofacial\nsternofacialis\nsternoglossal\nsternohumeral\nsternohyoid\nsternohyoidean\nsternomancy\nsternomastoid\nsternomaxillary\nsternonuchal\nsternopericardiac\nsternopericardial\nsternoscapular\nsternothere\nSternotherus\nsternothyroid\nsternotracheal\nsternotribe\nsternovertebral\nsternoxiphoid\nsternpost\nsternson\nsternum\nsternutation\nsternutative\nsternutator\nsternutatory\nsternward\nsternway\nsternways\nsternworks\nstero\nsteroid\nsterol\nSterope\nsterrinck\nstert\nstertor\nstertorious\nstertoriously\nstertoriousness\nstertorous\nstertorously\nstertorousness\nsterve\nStesichorean\nstet\nstetch\nstetharteritis\nstethogoniometer\nstethograph\nstethographic\nstethokyrtograph\nstethometer\nstethometric\nstethometry\nstethoparalysis\nstethophone\nstethophonometer\nstethoscope\nstethoscopic\nstethoscopical\nstethoscopically\nstethoscopist\nstethoscopy\nstethospasm\nStevan\nSteve\nstevedorage\nstevedore\nstevedoring\nstevel\nSteven\nsteven\nStevensonian\nStevensoniana\nStevia\nstevia\nstew\nstewable\nsteward\nstewardess\nstewardly\nstewardry\nstewardship\nStewart\nStewartia\nstewartry\nstewarty\nstewed\nstewpan\nstewpond\nstewpot\nstewy\nstey\nsthenia\nsthenic\nsthenochire\nstib\nstibbler\nstibblerig\nstibethyl\nstibial\nstibialism\nstibiate\nstibiated\nstibic\nstibiconite\nstibine\nstibious\nstibium\nstibnite\nstibonium\nsticcado\nstich\nsticharion\nsticheron\nstichic\nstichically\nstichid\nstichidium\nstichomancy\nstichometric\nstichometrical\nstichometrically\nstichometry\nstichomythic\nstichomythy\nstick\nstickability\nstickable\nstickadore\nstickadove\nstickage\nstickball\nsticked\nsticker\nstickers\nstickfast\nstickful\nstickily\nstickiness\nsticking\nstickit\nstickle\nstickleaf\nstickleback\nstickler\nstickless\nsticklike\nstickling\nstickly\nstickpin\nsticks\nstickseed\nsticksmanship\nsticktail\nsticktight\nstickum\nstickwater\nstickweed\nstickwork\nsticky\nSticta\nStictaceae\nStictidaceae\nstictiform\nStictis\nstid\nstiddy\nstife\nstiff\nstiffen\nstiffener\nstiffening\nstiffhearted\nstiffish\nstiffleg\nstifflike\nstiffly\nstiffneck\nstiffness\nstiffrump\nstifftail\nstifle\nstifledly\nstifler\nstifling\nstiflingly\nstigma\nstigmai\nstigmal\nstigmaria\nstigmarian\nstigmarioid\nstigmasterol\nstigmata\nstigmatal\nstigmatic\nstigmatical\nstigmatically\nstigmaticalness\nstigmatiferous\nstigmatiform\nstigmatism\nstigmatist\nstigmatization\nstigmatize\nstigmatizer\nstigmatoid\nstigmatose\nstigme\nstigmeology\nstigmonose\nstigonomancy\nStikine\nStilbaceae\nStilbella\nstilbene\nstilbestrol\nstilbite\nstilboestrol\nStilbum\nstile\nstileman\nstilet\nstiletto\nstilettolike\nstill\nstillage\nstillatitious\nstillatory\nstillbirth\nstillborn\nstiller\nstillhouse\nstillicide\nstillicidium\nstilliform\nstilling\nStillingia\nstillion\nstillish\nstillman\nstillness\nstillroom\nstillstand\nStillwater\nstilly\nStilophora\nStilophoraceae\nstilpnomelane\nstilpnosiderite\nstilt\nstiltbird\nstilted\nstilter\nstiltify\nstiltiness\nstiltish\nstiltlike\nStilton\nstilty\nstim\nstime\nstimpart\nstimpert\nstimulability\nstimulable\nstimulance\nstimulancy\nstimulant\nstimulate\nstimulatingly\nstimulation\nstimulative\nstimulator\nstimulatory\nstimulatress\nstimulatrix\nstimuli\nstimulogenous\nstimulus\nstimy\nstine\nsting\nstingaree\nstingareeing\nstingbull\nstinge\nstinger\nstingfish\nstingily\nstinginess\nstinging\nstingingly\nstingingness\nstingless\nstingo\nstingproof\nstingray\nstingtail\nstingy\nstink\nstinkard\nstinkardly\nstinkball\nstinkberry\nstinkbird\nstinkbug\nstinkbush\nstinkdamp\nstinker\nstinkhorn\nstinking\nstinkingly\nstinkingness\nstinkpot\nstinkstone\nstinkweed\nstinkwood\nstinkwort\nstint\nstinted\nstintedly\nstintedness\nstinter\nstintingly\nstintless\nstinty\nstion\nstionic\nStipa\nstipe\nstiped\nstipel\nstipellate\nstipend\nstipendial\nstipendiarian\nstipendiary\nstipendiate\nstipendium\nstipendless\nstipes\nstipiform\nstipitate\nstipitiform\nstipiture\nStipiturus\nstippen\nstipple\nstippled\nstippler\nstippling\nstipply\nstipula\nstipulable\nstipulaceous\nstipulae\nstipular\nstipulary\nstipulate\nstipulation\nstipulator\nstipulatory\nstipule\nstipuled\nstipuliferous\nstipuliform\nstir\nstirabout\nstirk\nstirless\nstirlessly\nstirlessness\nstirp\nstirpicultural\nstirpiculture\nstirpiculturist\nstirps\nstirra\nstirrable\nstirrage\nstirrer\nstirring\nstirringly\nstirrup\nstirrupless\nstirruplike\nstirrupwise\nstitch\nstitchbird\nstitchdown\nstitcher\nstitchery\nstitching\nstitchlike\nstitchwhile\nstitchwork\nstitchwort\nstite\nstith\nstithy\nstive\nstiver\nstivy\nStizolobium\nstoa\nstoach\nstoat\nstoater\nstob\nstocah\nstoccado\nstoccata\nstochastic\nstochastical\nstochastically\nstock\nstockade\nstockannet\nstockbow\nstockbreeder\nstockbreeding\nStockbridge\nstockbroker\nstockbrokerage\nstockbroking\nstockcar\nstocker\nstockfather\nstockfish\nstockholder\nstockholding\nstockhouse\nstockily\nstockiness\nstockinet\nstocking\nstockinger\nstockingless\nstockish\nstockishly\nstockishness\nstockjobber\nstockjobbery\nstockjobbing\nstockjudging\nstockkeeper\nstockkeeping\nstockless\nstocklike\nstockmaker\nstockmaking\nstockman\nstockowner\nstockpile\nstockpot\nstockproof\nstockrider\nstockriding\nstocks\nstockstone\nstocktaker\nstocktaking\nStockton\nstockwork\nstockwright\nstocky\nstockyard\nstod\nstodge\nstodger\nstodgery\nstodgily\nstodginess\nstodgy\nstoechas\nstoep\nstof\nstoff\nstog\nstoga\nstogie\nstogy\nStoic\nstoic\nstoical\nstoically\nstoicalness\nstoicharion\nstoichiological\nstoichiology\nstoichiometric\nstoichiometrical\nstoichiometrically\nstoichiometry\nStoicism\nstoicism\nStokavci\nStokavian\nStokavski\nstoke\nstokehold\nstokehole\nstoker\nstokerless\nStokesia\nstokesite\nstola\nstolae\nstole\nstoled\nstolelike\nstolen\nstolenly\nstolenness\nstolenwise\nstolewise\nstolid\nstolidity\nstolidly\nstolidness\nstolist\nstolkjaerre\nstollen\nstolon\nstolonate\nstoloniferous\nstoloniferously\nstolonlike\nstolzite\nstoma\nstomacace\nstomach\nstomachable\nstomachal\nstomacher\nstomachful\nstomachfully\nstomachfulness\nstomachic\nstomachically\nstomachicness\nstomaching\nstomachless\nstomachlessness\nstomachy\nstomapod\nStomapoda\nstomapodiform\nstomapodous\nstomata\nstomatal\nstomatalgia\nstomate\nstomatic\nstomatiferous\nstomatitic\nstomatitis\nstomatocace\nStomatoda\nstomatodaeal\nstomatodaeum\nstomatode\nstomatodeum\nstomatodynia\nstomatogastric\nstomatograph\nstomatography\nstomatolalia\nstomatologic\nstomatological\nstomatologist\nstomatology\nstomatomalacia\nstomatomenia\nstomatomy\nstomatomycosis\nstomatonecrosis\nstomatopathy\nStomatophora\nstomatophorous\nstomatoplastic\nstomatoplasty\nstomatopod\nStomatopoda\nstomatopodous\nstomatorrhagia\nstomatoscope\nstomatoscopy\nstomatose\nstomatosepsis\nstomatotomy\nstomatotyphus\nstomatous\nstomenorrhagia\nstomium\nstomodaea\nstomodaeal\nstomodaeum\nStomoisia\nstomoxys\nstomp\nstomper\nstonable\nstond\nStone\nstone\nstoneable\nstonebird\nstonebiter\nstoneboat\nstonebow\nstonebrash\nstonebreak\nstonebrood\nstonecast\nstonechat\nstonecraft\nstonecrop\nstonecutter\nstoned\nstonedamp\nstonefish\nstonegale\nstonegall\nstonehand\nstonehatch\nstonehead\nstonehearted\nStonehenge\nstonelayer\nstonelaying\nstoneless\nstonelessness\nstonelike\nstoneman\nstonemason\nstonemasonry\nstonen\nstonepecker\nstoner\nstoneroot\nstoneseed\nstoneshot\nstonesmatch\nstonesmich\nstonesmitch\nstonesmith\nstonewall\nstonewaller\nstonewally\nstoneware\nstoneweed\nstonewise\nstonewood\nstonework\nstoneworker\nstonewort\nstoneyard\nstong\nstonied\nstonifiable\nstonify\nstonily\nstoniness\nstoning\nstonish\nstonishment\nstonker\nstony\nstonyhearted\nstonyheartedly\nstonyheartedness\nstood\nstooded\nstooden\nstoof\nstooge\nstook\nstooker\nstookie\nstool\nstoolball\nstoollike\nstoon\nstoond\nstoop\nstooper\nstoopgallant\nstooping\nstoopingly\nstoory\nstoot\nstoothing\nstop\nstopa\nstopback\nstopblock\nstopboard\nstopcock\nstope\nstoper\nstopgap\nstophound\nstoping\nstopless\nstoplessness\nstopover\nstoppability\nstoppable\nstoppableness\nstoppably\nstoppage\nstopped\nstopper\nstopperless\nstoppeur\nstopping\nstoppit\nstopple\nstopwater\nstopwork\nstorable\nstorage\nstorax\nstore\nstoreen\nstorehouse\nstorehouseman\nstorekeep\nstorekeeper\nstorekeeping\nstoreman\nstorer\nstoreroom\nstoreship\nstoresman\nstorge\nstoriate\nstoriation\nstoried\nstorier\nstoriette\nstorify\nstoriological\nstoriologist\nstoriology\nstork\nstorken\nstorkish\nstorklike\nstorkling\nstorkwise\nstorm\nstormable\nStormberg\nstormbird\nstormbound\nstormcock\nstormer\nstormful\nstormfully\nstormfulness\nstormily\nstorminess\nstorming\nstormingly\nstormish\nstormless\nstormlessness\nstormlike\nstormproof\nstormward\nstormwind\nstormwise\nstormy\nStorting\nstory\nstorybook\nstoryless\nstorymaker\nstorymonger\nstoryteller\nstorytelling\nstorywise\nstorywork\nstosh\nstoss\nstosston\nstot\nstotinka\nstotter\nstotterel\nstoun\nstound\nstoundmeal\nstoup\nstoupful\nstour\nstouring\nstourliness\nstourness\nstoury\nstoush\nstout\nstouten\nstouth\nstouthearted\nstoutheartedly\nstoutheartedness\nstoutish\nstoutly\nstoutness\nstoutwood\nstouty\nstove\nstovebrush\nstoveful\nstovehouse\nstoveless\nstovemaker\nstovemaking\nstoveman\nstoven\nstovepipe\nstover\nstovewood\nstow\nstowable\nstowage\nstowaway\nstowbord\nstowbordman\nstowce\nstowdown\nstower\nstowing\nstownlins\nstowwood\nstra\nstrabism\nstrabismal\nstrabismally\nstrabismic\nstrabismical\nstrabismometer\nstrabismometry\nstrabismus\nstrabometer\nstrabometry\nstrabotome\nstrabotomy\nstrack\nstrackling\nstract\nStrad\nstrad\nstradametrical\nstraddle\nstraddleback\nstraddlebug\nstraddler\nstraddleways\nstraddlewise\nstraddling\nstraddlingly\nstrade\nstradine\nstradiot\nStradivari\nStradivarius\nstradl\nstradld\nstradlings\nstrae\nstrafe\nstrafer\nStraffordian\nstrag\nstraggle\nstraggler\nstraggling\nstragglingly\nstraggly\nstragular\nstragulum\nstraight\nstraightabout\nstraightaway\nstraightedge\nstraighten\nstraightener\nstraightforward\nstraightforwardly\nstraightforwardness\nstraightforwards\nstraighthead\nstraightish\nstraightly\nstraightness\nstraighttail\nstraightup\nstraightwards\nstraightway\nstraightways\nstraightwise\nstraik\nstrain\nstrainable\nstrainableness\nstrainably\nstrained\nstrainedly\nstrainedness\nstrainer\nstrainerman\nstraining\nstrainingly\nstrainless\nstrainlessly\nstrainproof\nstrainslip\nstraint\nstrait\nstraiten\nstraitlacedness\nstraitlacing\nstraitly\nstraitness\nstraitsman\nstraitwork\nStraka\nstrake\nstraked\nstraky\nstram\nstramash\nstramazon\nstramineous\nstramineously\nstrammel\nstrammer\nstramonium\nstramony\nstramp\nstrand\nstrandage\nstrander\nstranding\nstrandless\nstrandward\nstrang\nstrange\nstrangeling\nstrangely\nstrangeness\nstranger\nstrangerdom\nstrangerhood\nstrangerlike\nstrangership\nstrangerwise\nstrangle\nstrangleable\nstranglement\nstrangler\nstrangles\nstrangletare\nstrangleweed\nstrangling\nstranglingly\nstrangulable\nstrangulate\nstrangulation\nstrangulative\nstrangulatory\nstrangullion\nstrangurious\nstrangury\nstranner\nstrany\nstrap\nstraphang\nstraphanger\nstraphead\nstrapless\nstraplike\nstrappable\nstrappado\nstrappan\nstrapped\nstrapper\nstrapping\nstrapple\nstrapwork\nstrapwort\nstrass\nstrata\nstratagem\nstratagematic\nstratagematical\nstratagematically\nstratagematist\nstratagemical\nstratagemically\nstratal\nstratameter\nstratege\nstrategetic\nstrategetics\nstrategi\nstrategian\nstrategic\nstrategical\nstrategically\nstrategics\nstrategist\nstrategize\nstrategos\nstrategy\nStratfordian\nstrath\nstrathspey\nstrati\nstratic\nstraticulate\nstraticulation\nstratification\nstratified\nstratiform\nstratify\nstratigrapher\nstratigraphic\nstratigraphical\nstratigraphically\nstratigraphist\nstratigraphy\nStratiomyiidae\nStratiotes\nstratlin\nstratochamber\nstratocracy\nstratocrat\nstratocratic\nstratographic\nstratographical\nstratographically\nstratography\nstratonic\nStratonical\nstratopedarch\nstratoplane\nstratose\nstratosphere\nstratospheric\nstratospherical\nstratotrainer\nstratous\nstratum\nstratus\nstraucht\nstrauchten\nstravage\nstrave\nstraw\nstrawberry\nstrawberrylike\nstrawbill\nstrawboard\nstrawbreadth\nstrawen\nstrawer\nstrawflower\nstrawfork\nstrawless\nstrawlike\nstrawman\nstrawmote\nstrawsmall\nstrawsmear\nstrawstack\nstrawstacker\nstrawwalker\nstrawwork\nstrawworm\nstrawy\nstrawyard\nstray\nstrayaway\nstrayer\nstrayling\nstre\nstreahte\nstreak\nstreaked\nstreakedly\nstreakedness\nstreaker\nstreakily\nstreakiness\nstreaklike\nstreakwise\nstreaky\nstream\nstreamer\nstreamful\nstreamhead\nstreaminess\nstreaming\nstreamingly\nstreamless\nstreamlet\nstreamlike\nstreamline\nstreamlined\nstreamliner\nstreamling\nstreamside\nstreamward\nstreamway\nstreamwort\nstreamy\nstreck\nstreckly\nstree\nstreek\nstreel\nstreeler\nstreen\nstreep\nstreet\nstreetage\nstreetcar\nstreetful\nstreetless\nstreetlet\nstreetlike\nstreets\nstreetside\nstreetwalker\nstreetwalking\nstreetward\nstreetway\nstreetwise\nstreite\nstreke\nStrelitz\nStrelitzi\nstrelitzi\nStrelitzia\nStreltzi\nstreltzi\nstremma\nstremmatograph\nstreng\nstrengite\nstrength\nstrengthen\nstrengthener\nstrengthening\nstrengtheningly\nstrengthful\nstrengthfulness\nstrengthily\nstrengthless\nstrengthlessly\nstrengthlessness\nstrengthy\nstrent\nstrenth\nstrenuity\nstrenuosity\nstrenuous\nstrenuously\nstrenuousness\nstrepen\nstrepent\nstrepera\nstreperous\nstrephonade\nstrephosymbolia\nstrepitant\nstrepitantly\nstrepitation\nstrepitous\nstrepor\nStrepsiceros\nstrepsiceros\nstrepsinema\nStrepsiptera\nstrepsipteral\nstrepsipteran\nstrepsipteron\nstrepsipterous\nstrepsis\nstrepsitene\nstreptaster\nstreptobacilli\nstreptobacillus\nStreptocarpus\nstreptococcal\nstreptococci\nstreptococcic\nStreptococcus\nstreptococcus\nstreptolysin\nStreptomyces\nstreptomycin\nStreptoneura\nstreptoneural\nstreptoneurous\nstreptosepticemia\nstreptothricial\nstreptothricin\nstreptothricosis\nStreptothrix\nstreptotrichal\nstreptotrichosis\nstress\nstresser\nstressful\nstressfully\nstressless\nstresslessness\nstret\nstretch\nstretchable\nstretchberry\nstretcher\nstretcherman\nstretchiness\nstretchneck\nstretchproof\nstretchy\nstretman\nstrette\nstretti\nstretto\nstrew\nstrewage\nstrewer\nstrewment\nstrewn\nstrey\nstreyne\nstria\nstriae\nstrial\nStriaria\nStriariaceae\nstriatal\nstriate\nstriated\nstriation\nstriatum\nstriature\nstrich\nstriche\nstrick\nstricken\nstrickenly\nstrickenness\nstricker\nstrickle\nstrickler\nstrickless\nstrict\nstriction\nstrictish\nstrictly\nstrictness\nstricture\nstrictured\nstrid\nstridden\nstriddle\nstride\nstrideleg\nstridelegs\nstridence\nstridency\nstrident\nstridently\nstrider\nstrideways\nstridhan\nstridhana\nstridhanum\nstridingly\nstridling\nstridlins\nstridor\nstridulant\nstridulate\nstridulation\nstridulator\nstridulatory\nstridulent\nstridulous\nstridulously\nstridulousness\nstrife\nstrifeful\nstrifeless\nstrifemaker\nstrifemaking\nstrifemonger\nstrifeproof\nstriffen\nstrig\nStriga\nstriga\nstrigae\nstrigal\nstrigate\nStriges\nstriggle\nstright\nStrigidae\nStrigiformes\nstrigil\nstrigilate\nstrigilation\nstrigilator\nstrigiles\nstrigilis\nstrigillose\nstrigilous\nStriginae\nstrigine\nstrigose\nstrigous\nstrigovite\nStrigula\nStrigulaceae\nstrigulose\nstrike\nstrikeboat\nstrikebreaker\nstrikebreaking\nstrikeless\nstriker\nstriking\nstrikingly\nstrikingness\nstrind\nstring\nstringboard\nstringcourse\nstringed\nstringency\nstringene\nstringent\nstringently\nstringentness\nstringer\nstringful\nstringhalt\nstringhalted\nstringhaltedness\nstringiness\nstringing\nstringless\nstringlike\nstringmaker\nstringmaking\nstringman\nstringpiece\nstringsman\nstringways\nstringwood\nstringy\nstringybark\nstrinkle\nstriola\nstriolae\nstriolate\nstriolated\nstriolet\nstrip\nstripe\nstriped\nstripeless\nstriper\nstriplet\nstripling\nstrippage\nstripped\nstripper\nstripping\nstrippit\nstrippler\nstript\nstripy\nstrit\nstrive\nstrived\nstriven\nstriver\nstriving\nstrivingly\nStrix\nstrix\nstroam\nstrobic\nstrobila\nstrobilaceous\nstrobilae\nstrobilate\nstrobilation\nstrobile\nstrobili\nstrobiliferous\nstrobiliform\nstrobiline\nstrobilization\nstrobiloid\nStrobilomyces\nStrobilophyta\nstrobilus\nstroboscope\nstroboscopic\nstroboscopical\nstroboscopy\nstrobotron\nstrockle\nstroddle\nstrode\nstroil\nstroke\nstroker\nstrokesman\nstroking\nstroky\nstrold\nstroll\nstrolld\nstroller\nstrom\nstroma\nstromal\nstromata\nStromateidae\nstromateoid\nstromatic\nstromatiform\nstromatology\nStromatopora\nStromatoporidae\nstromatoporoid\nStromatoporoidea\nstromatous\nstromb\nStrombidae\nstrombiform\nstrombite\nstromboid\nstrombolian\nstrombuliferous\nstrombuliform\nStrombus\nstrome\nstromeyerite\nstromming\nstrone\nstrong\nstrongback\nstrongbark\nstrongbox\nstrongbrained\nstrongfully\nstronghand\nstronghead\nstrongheadedly\nstrongheadedness\nstronghearted\nstronghold\nstrongish\nstronglike\nstrongly\nstrongness\nstrongylate\nstrongyle\nstrongyliasis\nstrongylid\nStrongylidae\nstrongylidosis\nstrongyloid\nStrongyloides\nstrongyloidosis\nstrongylon\nStrongyloplasmata\nStrongylosis\nstrongylosis\nStrongylus\nstrontia\nstrontian\nstrontianiferous\nstrontianite\nstrontic\nstrontion\nstrontitic\nstrontium\nstrook\nstrooken\nstroot\nstrop\nstrophaic\nstrophanhin\nStrophanthus\nStropharia\nstrophe\nstrophic\nstrophical\nstrophically\nstrophiolate\nstrophiolated\nstrophiole\nstrophoid\nStrophomena\nStrophomenacea\nstrophomenid\nStrophomenidae\nstrophomenoid\nstrophosis\nstrophotaxis\nstrophulus\nstropper\nstroppings\nstroth\nstroud\nstrouding\nstrounge\nstroup\nstrouthiocamel\nstrouthiocamelian\nstrouthocamelian\nstrove\nstrow\nstrowd\nstrown\nstroy\nstroyer\nstroygood\nstrub\nstrubbly\nstruck\nstrucken\nstructural\nstructuralism\nstructuralist\nstructuralization\nstructuralize\nstructurally\nstructuration\nstructure\nstructured\nstructureless\nstructurely\nstructurist\nstrudel\nstrue\nstruggle\nstruggler\nstruggling\nstrugglingly\nStruldbrug\nStruldbruggian\nStruldbruggism\nstrum\nstruma\nstrumae\nstrumatic\nstrumaticness\nstrumectomy\nStrumella\nstrumiferous\nstrumiform\nstrumiprivic\nstrumiprivous\nstrumitis\nstrummer\nstrumose\nstrumous\nstrumousness\nstrumpet\nstrumpetlike\nstrumpetry\nstrumstrum\nstrumulose\nstrung\nstrunt\nstrut\nstruth\nstruthian\nstruthiform\nStruthio\nstruthioid\nStruthiomimus\nStruthiones\nStruthionidae\nstruthioniform\nStruthioniformes\nStruthiopteris\nstruthious\nstruthonine\nstrutter\nstrutting\nstruttingly\nstruv\nstruvite\nstrych\nstrychnia\nstrychnic\nstrychnin\nstrychnine\nstrychninic\nstrychninism\nstrychninization\nstrychninize\nstrychnize\nstrychnol\nStrychnos\nStrymon\nStu\nStuart\nStuartia\nstub\nstubachite\nstubb\nstubbed\nstubbedness\nstubber\nstubbiness\nstubble\nstubbleberry\nstubbled\nstubbleward\nstubbly\nstubborn\nstubbornhearted\nstubbornly\nstubbornness\nstubboy\nstubby\nstubchen\nstuber\nstuboy\nstubrunner\nstucco\nstuccoer\nstuccowork\nstuccoworker\nstuccoyer\nstuck\nstuckling\nstucturelessness\nstud\nstudbook\nstudder\nstuddie\nstudding\nstuddle\nstude\nstudent\nstudenthood\nstudentless\nstudentlike\nstudentry\nstudentship\nstuderite\nstudfish\nstudflower\nstudhorse\nstudia\nstudiable\nstudied\nstudiedly\nstudiedness\nstudier\nstudio\nstudious\nstudiously\nstudiousness\nStudite\nStudium\nstudium\nstudwork\nstudy\nstue\nstuff\nstuffed\nstuffender\nstuffer\nstuffgownsman\nstuffily\nstuffiness\nstuffing\nstuffy\nstug\nstuggy\nstuiver\nstull\nstuller\nstulm\nstultification\nstultifier\nstultify\nstultiloquence\nstultiloquently\nstultiloquious\nstultioquy\nstultloquent\nstum\nstumble\nstumbler\nstumbling\nstumblingly\nstumbly\nstumer\nstummer\nstummy\nstump\nstumpage\nstumper\nstumpily\nstumpiness\nstumpish\nstumpless\nstumplike\nstumpling\nstumpnose\nstumpwise\nstumpy\nstun\nStundism\nStundist\nstung\nstunk\nstunkard\nstunner\nstunning\nstunningly\nstunpoll\nstunsail\nstunsle\nstunt\nstunted\nstuntedly\nstuntedness\nstunter\nstuntiness\nstuntness\nstunty\nstupa\nstupe\nstupefacient\nstupefaction\nstupefactive\nstupefactiveness\nstupefied\nstupefiedness\nstupefier\nstupefy\nstupend\nstupendly\nstupendous\nstupendously\nstupendousness\nstupent\nstupeous\nstupex\nstupid\nstupidhead\nstupidish\nstupidity\nstupidly\nstupidness\nstupor\nstuporific\nstuporose\nstuporous\nstupose\nstupp\nstuprate\nstupration\nstuprum\nstupulose\nsturdied\nsturdily\nsturdiness\nsturdy\nsturdyhearted\nsturgeon\nsturine\nSturiones\nsturionine\nsturk\nSturmian\nSturnella\nSturnidae\nsturniform\nSturninae\nsturnine\nsturnoid\nSturnus\nsturt\nsturtan\nsturtin\nsturtion\nsturtite\nstuss\nstut\nstutter\nstutterer\nstuttering\nstutteringly\nsty\nstyan\nstyca\nstyceric\nstycerin\nstycerinol\nstychomythia\nstyful\nstyfziekte\nStygial\nStygian\nstylar\nStylaster\nStylasteridae\nstylate\nstyle\nstylebook\nstyledom\nstyleless\nstylelessness\nstylelike\nstyler\nstylet\nstylewort\nStylidiaceae\nstylidiaceous\nStylidium\nstyliferous\nstyliform\nstyline\nstyling\nstylish\nstylishly\nstylishness\nstylist\nstylistic\nstylistical\nstylistically\nstylistics\nstylite\nstylitic\nstylitism\nstylization\nstylize\nstylizer\nstylo\nstyloauricularis\nstylobate\nStylochus\nstyloglossal\nstyloglossus\nstylogonidium\nstylograph\nstylographic\nstylographical\nstylographically\nstylography\nstylohyal\nstylohyoid\nstylohyoidean\nstylohyoideus\nstyloid\nstylolite\nstylolitic\nstylomandibular\nstylomastoid\nstylomaxillary\nstylometer\nStylommatophora\nstylommatophorous\nstylomyloid\nStylonurus\nStylonychia\nstylopharyngeal\nstylopharyngeus\nstylopid\nStylopidae\nstylopization\nstylopized\nstylopod\nstylopodium\nStylops\nstylops\nStylosanthes\nstylospore\nstylosporous\nstylostegium\nstylotypite\nstylus\nstymie\nStymphalian\nStymphalid\nStymphalides\nStyphelia\nstyphnate\nstyphnic\nstypsis\nstyptic\nstyptical\nstypticalness\nstypticity\nstypticness\nStyracaceae\nstyracaceous\nstyracin\nStyrax\nstyrax\nstyrene\nStyrian\nstyrogallol\nstyrol\nstyrolene\nstyrone\nstyryl\nstyrylic\nstythe\nstyward\nStyx\nStyxian\nsuability\nsuable\nsuably\nsuade\nSuaeda\nsuaharo\nSualocin\nSuanitian\nsuant\nsuantly\nsuasible\nsuasion\nsuasionist\nsuasive\nsuasively\nsuasiveness\nsuasory\nsuavastika\nsuave\nsuavely\nsuaveness\nsuaveolent\nsuavify\nsuaviloquence\nsuaviloquent\nsuavity\nsub\nsubabbot\nsubabdominal\nsubability\nsubabsolute\nsubacademic\nsubaccount\nsubacetate\nsubacid\nsubacidity\nsubacidly\nsubacidness\nsubacidulous\nsubacrid\nsubacrodrome\nsubacromial\nsubact\nsubacuminate\nsubacute\nsubacutely\nsubadditive\nsubadjacent\nsubadjutor\nsubadministrate\nsubadministration\nsubadministrator\nsubadult\nsubaduncate\nsubaerate\nsubaeration\nsubaerial\nsubaerially\nsubaetheric\nsubaffluent\nsubage\nsubagency\nsubagent\nsubaggregate\nsubah\nsubahdar\nsubahdary\nsubahship\nsubaid\nSubakhmimic\nsubalary\nsubalate\nsubalgebra\nsubalkaline\nsuballiance\nsubalmoner\nsubalpine\nsubaltern\nsubalternant\nsubalternate\nsubalternately\nsubalternating\nsubalternation\nsubalternity\nsubanal\nsubandean\nsubangled\nsubangular\nsubangulate\nsubangulated\nsubanniversary\nsubantarctic\nsubantichrist\nsubantique\nSubanun\nsubapical\nsubaponeurotic\nsubapostolic\nsubapparent\nsubappearance\nsubappressed\nsubapprobation\nsubapterous\nsubaquatic\nsubaquean\nsubaqueous\nsubarachnoid\nsubarachnoidal\nsubarachnoidean\nsubarboraceous\nsubarboreal\nsubarborescent\nsubarch\nsubarchesporial\nsubarchitect\nsubarctic\nsubarcuate\nsubarcuated\nsubarcuation\nsubarea\nsubareolar\nsubareolet\nSubarian\nsubarmor\nsubarouse\nsubarrhation\nsubartesian\nsubarticle\nsubarytenoid\nsubascending\nsubassemblage\nsubassembly\nsubassociation\nsubastragalar\nsubastragaloid\nsubastral\nsubastringent\nsubatom\nsubatomic\nsubattenuate\nsubattenuated\nsubattorney\nsubaud\nsubaudible\nsubaudition\nsubauditionist\nsubauditor\nsubauditur\nsubaural\nsubauricular\nsubautomatic\nsubaverage\nsubaxillar\nsubaxillary\nsubbailie\nsubbailiff\nsubbailiwick\nsubballast\nsubband\nsubbank\nsubbasal\nsubbasaltic\nsubbase\nsubbasement\nsubbass\nsubbeadle\nsubbeau\nsubbias\nsubbifid\nsubbing\nsubbituminous\nsubbookkeeper\nsubboreal\nsubbourdon\nsubbrachycephalic\nsubbrachycephaly\nsubbrachyskelic\nsubbranch\nsubbranched\nsubbranchial\nsubbreed\nsubbrigade\nsubbrigadier\nsubbroker\nsubbromid\nsubbromide\nsubbronchial\nsubbureau\nsubcaecal\nsubcalcareous\nsubcalcarine\nsubcaliber\nsubcallosal\nsubcampanulate\nsubcancellate\nsubcandid\nsubcantor\nsubcapsular\nsubcaptain\nsubcaption\nsubcarbide\nsubcarbonate\nSubcarboniferous\nsubcarbureted\nsubcarburetted\nsubcardinal\nsubcarinate\nsubcartilaginous\nsubcase\nsubcash\nsubcashier\nsubcasino\nsubcast\nsubcaste\nsubcategory\nsubcaudal\nsubcaudate\nsubcaulescent\nsubcause\nsubcavate\nsubcavity\nsubcelestial\nsubcell\nsubcellar\nsubcenter\nsubcentral\nsubcentrally\nsubchairman\nsubchamberer\nsubchancel\nsubchanter\nsubchapter\nsubchaser\nsubchela\nsubchelate\nsubcheliform\nsubchief\nsubchloride\nsubchondral\nsubchordal\nsubchorioid\nsubchorioidal\nsubchorionic\nsubchoroid\nsubchoroidal\nsubcinctorium\nsubcineritious\nsubcingulum\nsubcircuit\nsubcircular\nsubcision\nsubcity\nsubclaim\nSubclamatores\nsubclan\nsubclass\nsubclassify\nsubclause\nsubclavate\nsubclavia\nsubclavian\nsubclavicular\nsubclavioaxillary\nsubclaviojugular\nsubclavius\nsubclerk\nsubclimate\nsubclimax\nsubclinical\nsubclover\nsubcoastal\nsubcollateral\nsubcollector\nsubcollegiate\nsubcolumnar\nsubcommander\nsubcommendation\nsubcommended\nsubcommissary\nsubcommissaryship\nsubcommission\nsubcommissioner\nsubcommit\nsubcommittee\nsubcompany\nsubcompensate\nsubcompensation\nsubcompressed\nsubconcave\nsubconcession\nsubconcessionaire\nsubconchoidal\nsubconference\nsubconformable\nsubconical\nsubconjunctival\nsubconjunctively\nsubconnate\nsubconnect\nsubconnivent\nsubconscience\nsubconscious\nsubconsciously\nsubconsciousness\nsubconservator\nsubconsideration\nsubconstable\nsubconstellation\nsubconsul\nsubcontained\nsubcontest\nsubcontiguous\nsubcontinent\nsubcontinental\nsubcontinual\nsubcontinued\nsubcontinuous\nsubcontract\nsubcontracted\nsubcontractor\nsubcontraoctave\nsubcontrariety\nsubcontrarily\nsubcontrary\nsubcontrol\nsubconvex\nsubconvolute\nsubcool\nsubcoracoid\nsubcordate\nsubcordiform\nsubcoriaceous\nsubcorneous\nsubcorporation\nsubcortex\nsubcortical\nsubcortically\nsubcorymbose\nsubcosta\nsubcostal\nsubcostalis\nsubcouncil\nsubcranial\nsubcreative\nsubcreek\nsubcrenate\nsubcrepitant\nsubcrepitation\nsubcrescentic\nsubcrest\nsubcriminal\nsubcrossing\nsubcrureal\nsubcrureus\nsubcrust\nsubcrustaceous\nsubcrustal\nsubcrystalline\nsubcubical\nsubcuboidal\nsubcultrate\nsubcultural\nsubculture\nsubcurate\nsubcurator\nsubcuratorship\nsubcurrent\nsubcutaneous\nsubcutaneously\nsubcutaneousness\nsubcuticular\nsubcutis\nsubcyaneous\nsubcyanide\nsubcylindric\nsubcylindrical\nsubdatary\nsubdate\nsubdeacon\nsubdeaconate\nsubdeaconess\nsubdeaconry\nsubdeaconship\nsubdealer\nsubdean\nsubdeanery\nsubdeb\nsubdebutante\nsubdecanal\nsubdecimal\nsubdecuple\nsubdeducible\nsubdefinition\nsubdelegate\nsubdelegation\nsubdelirium\nsubdeltaic\nsubdeltoid\nsubdeltoidal\nsubdemonstrate\nsubdemonstration\nsubdenomination\nsubdentate\nsubdentated\nsubdented\nsubdenticulate\nsubdepartment\nsubdeposit\nsubdepository\nsubdepot\nsubdepressed\nsubdeputy\nsubderivative\nsubdermal\nsubdeterminant\nsubdevil\nsubdiaconal\nsubdiaconate\nsubdial\nsubdialect\nsubdialectal\nsubdialectally\nsubdiapason\nsubdiapente\nsubdiaphragmatic\nsubdichotomize\nsubdichotomous\nsubdichotomously\nsubdichotomy\nsubdie\nsubdilated\nsubdirector\nsubdiscoidal\nsubdisjunctive\nsubdistich\nsubdistichous\nsubdistinction\nsubdistinguish\nsubdistinguished\nsubdistrict\nsubdititious\nsubdititiously\nsubdivecious\nsubdiversify\nsubdividable\nsubdivide\nsubdivider\nsubdividing\nsubdividingly\nsubdivine\nsubdivisible\nsubdivision\nsubdivisional\nsubdivisive\nsubdoctor\nsubdolent\nsubdolichocephalic\nsubdolichocephaly\nsubdolous\nsubdolously\nsubdolousness\nsubdominant\nsubdorsal\nsubdorsally\nsubdouble\nsubdrain\nsubdrainage\nsubdrill\nsubdruid\nsubduable\nsubduableness\nsubduably\nsubdual\nsubduce\nsubduct\nsubduction\nsubdue\nsubdued\nsubduedly\nsubduedness\nsubduement\nsubduer\nsubduing\nsubduingly\nsubduple\nsubduplicate\nsubdural\nsubdurally\nsubecho\nsubectodermal\nsubedit\nsubeditor\nsubeditorial\nsubeditorship\nsubeffective\nsubelection\nsubelectron\nsubelement\nsubelementary\nsubelliptic\nsubelliptical\nsubelongate\nsubemarginate\nsubencephalon\nsubencephaltic\nsubendocardial\nsubendorse\nsubendorsement\nsubendothelial\nsubendymal\nsubenfeoff\nsubengineer\nsubentire\nsubentitle\nsubentry\nsubepidermal\nsubepiglottic\nsubepithelial\nsubepoch\nsubequal\nsubequality\nsubequally\nsubequatorial\nsubequilateral\nsubequivalve\nsuber\nsuberane\nsuberate\nsuberect\nsubereous\nsuberic\nsuberiferous\nsuberification\nsuberiform\nsuberin\nsuberinization\nsuberinize\nSuberites\nSuberitidae\nsuberization\nsuberize\nsuberone\nsuberose\nsuberous\nsubescheator\nsubesophageal\nsubessential\nsubetheric\nsubexaminer\nsubexcitation\nsubexcite\nsubexecutor\nsubexternal\nsubface\nsubfacies\nsubfactor\nsubfactorial\nsubfactory\nsubfalcate\nsubfalcial\nsubfalciform\nsubfamily\nsubfascial\nsubfastigiate\nsubfebrile\nsubferryman\nsubfestive\nsubfeu\nsubfeudation\nsubfeudatory\nsubfibrous\nsubfief\nsubfigure\nsubfissure\nsubfix\nsubflavor\nsubflexuose\nsubfloor\nsubflooring\nsubflora\nsubflush\nsubfluvial\nsubfocal\nsubfoliar\nsubforeman\nsubform\nsubformation\nsubfossil\nsubfossorial\nsubfoundation\nsubfraction\nsubframe\nsubfreshman\nsubfrontal\nsubfulgent\nsubfumigation\nsubfumose\nsubfunctional\nsubfusc\nsubfuscous\nsubfusiform\nsubfusk\nsubgalea\nsubgallate\nsubganger\nsubgape\nsubgelatinous\nsubgeneric\nsubgenerical\nsubgenerically\nsubgeniculate\nsubgenital\nsubgens\nsubgenual\nsubgenus\nsubgeometric\nsubget\nsubgit\nsubglabrous\nsubglacial\nsubglacially\nsubglenoid\nsubglobose\nsubglobosely\nsubglobular\nsubglobulose\nsubglossal\nsubglossitis\nsubglottic\nsubglumaceous\nsubgod\nsubgoverness\nsubgovernor\nsubgrade\nsubgranular\nsubgrin\nsubgroup\nsubgular\nsubgwely\nsubgyre\nsubgyrus\nsubhalid\nsubhalide\nsubhall\nsubharmonic\nsubhastation\nsubhatchery\nsubhead\nsubheading\nsubheadquarters\nsubheadwaiter\nsubhealth\nsubhedral\nsubhemispherical\nsubhepatic\nsubherd\nsubhero\nsubhexagonal\nsubhirsute\nsubhooked\nsubhorizontal\nsubhornblendic\nsubhouse\nsubhuman\nsubhumid\nsubhyaline\nsubhyaloid\nsubhymenial\nsubhymenium\nsubhyoid\nsubhyoidean\nsubhypothesis\nsubhysteria\nsubicle\nsubicteric\nsubicular\nsubiculum\nsubidar\nsubidea\nsubideal\nsubimaginal\nsubimago\nsubimbricate\nsubimbricated\nsubimposed\nsubimpressed\nsubincandescent\nsubincident\nsubincise\nsubincision\nsubincomplete\nsubindex\nsubindicate\nsubindication\nsubindicative\nsubindices\nsubindividual\nsubinduce\nsubinfer\nsubinfeud\nsubinfeudate\nsubinfeudation\nsubinfeudatory\nsubinflammation\nsubinflammatory\nsubinform\nsubingression\nsubinguinal\nsubinitial\nsubinoculate\nsubinoculation\nsubinsert\nsubinsertion\nsubinspector\nsubinspectorship\nsubintegumental\nsubintellection\nsubintelligential\nsubintelligitur\nsubintent\nsubintention\nsubintercessor\nsubinternal\nsubinterval\nsubintestinal\nsubintroduce\nsubintroduction\nsubintroductory\nsubinvoluted\nsubinvolution\nsubiodide\nsubirrigate\nsubirrigation\nsubitane\nsubitaneous\nsubitem\nSubiya\nsubjacency\nsubjacent\nsubjacently\nsubjack\nsubject\nsubjectability\nsubjectable\nsubjectdom\nsubjected\nsubjectedly\nsubjectedness\nsubjecthood\nsubjectibility\nsubjectible\nsubjectification\nsubjectify\nsubjectile\nsubjection\nsubjectional\nsubjectist\nsubjective\nsubjectively\nsubjectiveness\nsubjectivism\nsubjectivist\nsubjectivistic\nsubjectivistically\nsubjectivity\nsubjectivize\nsubjectivoidealistic\nsubjectless\nsubjectlike\nsubjectness\nsubjectship\nsubjee\nsubjicible\nsubjoin\nsubjoinder\nsubjoint\nsubjudge\nsubjudiciary\nsubjugable\nsubjugal\nsubjugate\nsubjugation\nsubjugator\nsubjugular\nsubjunct\nsubjunction\nsubjunctive\nsubjunctively\nsubjunior\nsubking\nsubkingdom\nsublabial\nsublaciniate\nsublacustrine\nsublanate\nsublanceolate\nsublanguage\nsublapsarian\nsublapsarianism\nsublapsary\nsublaryngeal\nsublate\nsublateral\nsublation\nsublative\nsubleader\nsublease\nsublecturer\nsublegislation\nsublegislature\nsublenticular\nsublessee\nsublessor\nsublet\nsublethal\nsublettable\nsubletter\nsublevaminous\nsublevate\nsublevation\nsublevel\nsublibrarian\nsublicense\nsublicensee\nsublid\nsublieutenancy\nsublieutenant\nsubligation\nsublighted\nsublimable\nsublimableness\nsublimant\nsublimate\nsublimation\nsublimational\nsublimationist\nsublimator\nsublimatory\nsublime\nsublimed\nsublimely\nsublimeness\nsublimer\nsubliminal\nsubliminally\nsublimish\nsublimitation\nsublimity\nsublimize\nsublinear\nsublineation\nsublingua\nsublinguae\nsublingual\nsublinguate\nsublittoral\nsublobular\nsublong\nsubloral\nsubloreal\nsublot\nsublumbar\nsublunar\nsublunary\nsublunate\nsublustrous\nsubluxate\nsubluxation\nsubmaid\nsubmain\nsubmakroskelic\nsubmammary\nsubman\nsubmanager\nsubmania\nsubmanic\nsubmanor\nsubmarginal\nsubmarginally\nsubmarginate\nsubmargined\nsubmarine\nsubmariner\nsubmarinism\nsubmarinist\nsubmarshal\nsubmaster\nsubmaxilla\nsubmaxillary\nsubmaximal\nsubmeaning\nsubmedial\nsubmedian\nsubmediant\nsubmediation\nsubmediocre\nsubmeeting\nsubmember\nsubmembranaceous\nsubmembranous\nsubmeningeal\nsubmental\nsubmentum\nsubmerge\nsubmerged\nsubmergement\nsubmergence\nsubmergibility\nsubmergible\nsubmerse\nsubmersed\nsubmersibility\nsubmersible\nsubmersion\nsubmetallic\nsubmeter\nsubmetering\nsubmicron\nsubmicroscopic\nsubmicroscopically\nsubmiliary\nsubmind\nsubminimal\nsubminister\nsubmiss\nsubmissible\nsubmission\nsubmissionist\nsubmissive\nsubmissively\nsubmissiveness\nsubmissly\nsubmissness\nsubmit\nsubmittal\nsubmittance\nsubmitter\nsubmittingly\nsubmolecule\nsubmonition\nsubmontagne\nsubmontane\nsubmontanely\nsubmontaneous\nsubmorphous\nsubmortgage\nsubmotive\nsubmountain\nsubmucosa\nsubmucosal\nsubmucous\nsubmucronate\nsubmultiple\nsubmundane\nsubmuriate\nsubmuscular\nSubmytilacea\nsubnarcotic\nsubnasal\nsubnascent\nsubnatural\nsubnect\nsubnervian\nsubness\nsubneural\nsubnex\nsubnitrate\nsubnitrated\nsubniveal\nsubnivean\nsubnormal\nsubnormality\nsubnotation\nsubnote\nsubnotochordal\nsubnubilar\nsubnucleus\nsubnude\nsubnumber\nsubnuvolar\nsuboblique\nsubobscure\nsubobscurely\nsubobtuse\nsuboccipital\nsubocean\nsuboceanic\nsuboctave\nsuboctile\nsuboctuple\nsubocular\nsuboesophageal\nsuboffice\nsubofficer\nsubofficial\nsubolive\nsubopaque\nsubopercle\nsubopercular\nsuboperculum\nsubopposite\nsuboptic\nsuboptimal\nsuboptimum\nsuboral\nsuborbicular\nsuborbiculate\nsuborbiculated\nsuborbital\nsuborbitar\nsuborbitary\nsubordain\nsuborder\nsubordinacy\nsubordinal\nsubordinary\nsubordinate\nsubordinately\nsubordinateness\nsubordinating\nsubordinatingly\nsubordination\nsubordinationism\nsubordinationist\nsubordinative\nsuborganic\nsuborn\nsubornation\nsubornative\nsuborner\nSuboscines\nsuboval\nsubovate\nsubovated\nsuboverseer\nsubovoid\nsuboxidation\nsuboxide\nsubpackage\nsubpagoda\nsubpallial\nsubpalmate\nsubpanel\nsubparagraph\nsubparallel\nsubpart\nsubpartition\nsubpartitioned\nsubpartitionment\nsubparty\nsubpass\nsubpassage\nsubpastor\nsubpatron\nsubpattern\nsubpavement\nsubpectinate\nsubpectoral\nsubpeduncle\nsubpeduncular\nsubpedunculate\nsubpellucid\nsubpeltate\nsubpeltated\nsubpentagonal\nsubpentangular\nsubpericardial\nsubperiod\nsubperiosteal\nsubperiosteally\nsubperitoneal\nsubperitoneally\nsubpermanent\nsubpermanently\nsubperpendicular\nsubpetiolar\nsubpetiolate\nsubpharyngeal\nsubphosphate\nsubphratry\nsubphrenic\nsubphylar\nsubphylum\nsubpial\nsubpilose\nsubpimp\nsubpiston\nsubplacenta\nsubplant\nsubplantigrade\nsubplat\nsubpleural\nsubplinth\nsubplot\nsubplow\nsubpodophyllous\nsubpoena\nsubpoenal\nsubpolar\nsubpolygonal\nsubpool\nsubpopular\nsubpopulation\nsubporphyritic\nsubport\nsubpostmaster\nsubpostmastership\nsubpostscript\nsubpotency\nsubpotent\nsubpreceptor\nsubpreceptorial\nsubpredicate\nsubpredication\nsubprefect\nsubprefectorial\nsubprefecture\nsubprehensile\nsubpress\nsubprimary\nsubprincipal\nsubprior\nsubprioress\nsubproblem\nsubproctor\nsubproduct\nsubprofessional\nsubprofessor\nsubprofessoriate\nsubprofitable\nsubproportional\nsubprotector\nsubprovince\nsubprovincial\nsubpubescent\nsubpubic\nsubpulmonary\nsubpulverizer\nsubpunch\nsubpunctuation\nsubpurchaser\nsubpurlin\nsubputation\nsubpyramidal\nsubpyriform\nsubquadrangular\nsubquadrate\nsubquality\nsubquestion\nsubquinquefid\nsubquintuple\nSubra\nsubrace\nsubradial\nsubradiance\nsubradiate\nsubradical\nsubradius\nsubradular\nsubrailway\nsubrameal\nsubramose\nsubramous\nsubrange\nsubrational\nsubreader\nsubreason\nsubrebellion\nsubrectangular\nsubrector\nsubreference\nsubregent\nsubregion\nsubregional\nsubregular\nsubreguli\nsubregulus\nsubrelation\nsubreligion\nsubreniform\nsubrent\nsubrepand\nsubrepent\nsubreport\nsubreptary\nsubreption\nsubreptitious\nsubreputable\nsubresin\nsubretinal\nsubrhombic\nsubrhomboid\nsubrhomboidal\nsubrictal\nsubrident\nsubridently\nsubrigid\nsubrision\nsubrisive\nsubrisory\nsubrogate\nsubrogation\nsubroot\nsubrostral\nsubround\nsubrule\nsubruler\nsubsacral\nsubsale\nsubsaline\nsubsalt\nsubsample\nsubsartorial\nsubsatiric\nsubsatirical\nsubsaturated\nsubsaturation\nsubscapular\nsubscapularis\nsubscapulary\nsubschedule\nsubscheme\nsubschool\nsubscience\nsubscleral\nsubsclerotic\nsubscribable\nsubscribe\nsubscriber\nsubscribership\nsubscript\nsubscription\nsubscriptionist\nsubscriptive\nsubscriptively\nsubscripture\nsubscrive\nsubscriver\nsubsea\nsubsecive\nsubsecretarial\nsubsecretary\nsubsect\nsubsection\nsubsecurity\nsubsecute\nsubsecutive\nsubsegment\nsubsemifusa\nsubsemitone\nsubsensation\nsubsensible\nsubsensual\nsubsensuous\nsubsept\nsubseptuple\nsubsequence\nsubsequency\nsubsequent\nsubsequential\nsubsequentially\nsubsequently\nsubsequentness\nsubseries\nsubserosa\nsubserous\nsubserrate\nsubserve\nsubserviate\nsubservience\nsubserviency\nsubservient\nsubserviently\nsubservientness\nsubsessile\nsubset\nsubsewer\nsubsextuple\nsubshaft\nsubsheriff\nsubshire\nsubshrub\nsubshrubby\nsubside\nsubsidence\nsubsidency\nsubsident\nsubsider\nsubsidiarie\nsubsidiarily\nsubsidiariness\nsubsidiary\nsubsiding\nsubsidist\nsubsidizable\nsubsidization\nsubsidize\nsubsidizer\nsubsidy\nsubsilicate\nsubsilicic\nsubsill\nsubsimilation\nsubsimious\nsubsimple\nsubsinuous\nsubsist\nsubsistence\nsubsistency\nsubsistent\nsubsistential\nsubsistingly\nsubsizar\nsubsizarship\nsubsmile\nsubsneer\nsubsocial\nsubsoil\nsubsoiler\nsubsolar\nsubsolid\nsubsonic\nsubsorter\nsubsovereign\nsubspace\nsubspatulate\nsubspecialist\nsubspecialize\nsubspecialty\nsubspecies\nsubspecific\nsubspecifically\nsubsphenoidal\nsubsphere\nsubspherical\nsubspherically\nsubspinous\nsubspiral\nsubspontaneous\nsubsquadron\nsubstage\nsubstalagmite\nsubstalagmitic\nsubstance\nsubstanceless\nsubstanch\nsubstandard\nsubstandardize\nsubstant\nsubstantiability\nsubstantial\nsubstantialia\nsubstantialism\nsubstantialist\nsubstantiality\nsubstantialize\nsubstantially\nsubstantialness\nsubstantiate\nsubstantiation\nsubstantiative\nsubstantiator\nsubstantify\nsubstantious\nsubstantival\nsubstantivally\nsubstantive\nsubstantively\nsubstantiveness\nsubstantivity\nsubstantivize\nsubstantize\nsubstation\nsubsternal\nsubstituent\nsubstitutable\nsubstitute\nsubstituted\nsubstituter\nsubstituting\nsubstitutingly\nsubstitution\nsubstitutional\nsubstitutionally\nsubstitutionary\nsubstitutive\nsubstitutively\nsubstock\nsubstoreroom\nsubstory\nsubstract\nsubstraction\nsubstratal\nsubstrate\nsubstrati\nsubstrative\nsubstrator\nsubstratose\nsubstratosphere\nsubstratospheric\nsubstratum\nsubstriate\nsubstruct\nsubstruction\nsubstructional\nsubstructural\nsubstructure\nsubstylar\nsubstyle\nsubsulfid\nsubsulfide\nsubsulphate\nsubsulphid\nsubsulphide\nsubsult\nsubsultive\nsubsultorily\nsubsultorious\nsubsultory\nsubsultus\nsubsumable\nsubsume\nsubsumption\nsubsumptive\nsubsuperficial\nsubsurety\nsubsurface\nsubsyndicate\nsubsynod\nsubsynodical\nsubsystem\nsubtack\nsubtacksman\nsubtangent\nsubtarget\nsubtartarean\nsubtectal\nsubtegminal\nsubtegulaneous\nsubtemperate\nsubtenancy\nsubtenant\nsubtend\nsubtense\nsubtenure\nsubtepid\nsubteraqueous\nsubterbrutish\nsubtercelestial\nsubterconscious\nsubtercutaneous\nsubterethereal\nsubterfluent\nsubterfluous\nsubterfuge\nsubterhuman\nsubterjacent\nsubtermarine\nsubterminal\nsubternatural\nsubterpose\nsubterposition\nsubterrane\nsubterraneal\nsubterranean\nsubterraneanize\nsubterraneanly\nsubterraneous\nsubterraneously\nsubterraneousness\nsubterranity\nsubterraqueous\nsubterrene\nsubterrestrial\nsubterritorial\nsubterritory\nsubtersensual\nsubtersensuous\nsubtersuperlative\nsubtersurface\nsubtertian\nsubtext\nsubthalamic\nsubthalamus\nsubthoracic\nsubthrill\nsubtile\nsubtilely\nsubtileness\nsubtilin\nsubtilism\nsubtilist\nsubtility\nsubtilization\nsubtilize\nsubtilizer\nsubtill\nsubtillage\nsubtilty\nsubtitle\nsubtitular\nsubtle\nsubtleness\nsubtlety\nsubtlist\nsubtly\nsubtone\nsubtonic\nsubtorrid\nsubtotal\nsubtotem\nsubtower\nsubtract\nsubtracter\nsubtraction\nsubtractive\nsubtrahend\nsubtranslucent\nsubtransparent\nsubtransverse\nsubtrapezoidal\nsubtread\nsubtreasurer\nsubtreasurership\nsubtreasury\nsubtrench\nsubtriangular\nsubtriangulate\nsubtribal\nsubtribe\nsubtribual\nsubtrifid\nsubtrigonal\nsubtrihedral\nsubtriplicate\nsubtriplicated\nsubtriquetrous\nsubtrist\nsubtrochanteric\nsubtrochlear\nsubtropic\nsubtropical\nsubtropics\nsubtrousers\nsubtrude\nsubtruncate\nsubtrunk\nsubtuberant\nsubtunic\nsubtunnel\nsubturbary\nsubturriculate\nsubturriculated\nsubtutor\nsubtwined\nsubtype\nsubtypical\nsubulate\nsubulated\nsubulicorn\nSubulicornia\nsubuliform\nsubultimate\nsubumbellate\nsubumbonal\nsubumbral\nsubumbrella\nsubumbrellar\nsubuncinate\nsubunequal\nsubungual\nsubunguial\nSubungulata\nsubungulate\nsubunit\nsubuniverse\nsuburb\nsuburban\nsuburbandom\nsuburbanhood\nsuburbanism\nsuburbanite\nsuburbanity\nsuburbanization\nsuburbanize\nsuburbanly\nsuburbed\nsuburbia\nsuburbican\nsuburbicarian\nsuburbicary\nsuburethral\nsubursine\nsubvaginal\nsubvaluation\nsubvarietal\nsubvariety\nsubvassal\nsubvassalage\nsubvein\nsubvendee\nsubvene\nsubvention\nsubventionary\nsubventioned\nsubventionize\nsubventitious\nsubventive\nsubventral\nsubventricose\nsubvermiform\nsubversal\nsubverse\nsubversed\nsubversion\nsubversionary\nsubversive\nsubversivism\nsubvert\nsubvertebral\nsubverter\nsubvertible\nsubvertical\nsubverticillate\nsubvesicular\nsubvestment\nsubvicar\nsubvicarship\nsubvillain\nsubvirate\nsubvirile\nsubvisible\nsubvitalized\nsubvitreous\nsubvocal\nsubvola\nsubwarden\nsubwater\nsubway\nsubwealthy\nsubweight\nsubwink\nsubworker\nsubworkman\nsubzonal\nsubzone\nsubzygomatic\nsuccade\nsuccedanea\nsuccedaneous\nsuccedaneum\nsuccedent\nsucceed\nsucceedable\nsucceeder\nsucceeding\nsucceedingly\nsuccent\nsuccentor\nsuccenturiate\nsuccenturiation\nsuccess\nsuccessful\nsuccessfully\nsuccessfulness\nsuccession\nsuccessional\nsuccessionally\nsuccessionist\nsuccessionless\nsuccessive\nsuccessively\nsuccessiveness\nsuccessivity\nsuccessless\nsuccesslessly\nsuccesslessness\nsuccessor\nsuccessoral\nsuccessorship\nsuccessory\nsucci\nsuccin\nsuccinamate\nsuccinamic\nsuccinamide\nsuccinanil\nsuccinate\nsuccinct\nsuccinctly\nsuccinctness\nsuccinctorium\nsuccinctory\nsuccincture\nsuccinic\nsucciniferous\nsuccinimide\nsuccinite\nsuccinoresinol\nsuccinosulphuric\nsuccinous\nsuccinyl\nSuccisa\nsuccise\nsuccivorous\nsuccor\nsuccorable\nsuccorer\nsuccorful\nsuccorless\nsuccorrhea\nsuccory\nsuccotash\nsuccourful\nsuccourless\nsuccous\nsuccub\nsuccuba\nsuccubae\nsuccube\nsuccubine\nsuccubous\nsuccubus\nsuccula\nsucculence\nsucculency\nsucculent\nsucculently\nsucculentness\nsucculous\nsuccumb\nsuccumbence\nsuccumbency\nsuccumbent\nsuccumber\nsuccursal\nsuccuss\nsuccussation\nsuccussatory\nsuccussion\nsuccussive\nsuch\nsuchlike\nsuchness\nSuchos\nsuchwise\nsucivilized\nsuck\nsuckable\nsuckabob\nsuckage\nsuckauhock\nsucken\nsuckener\nsucker\nsuckerel\nsuckerfish\nsuckerlike\nsuckfish\nsuckhole\nsucking\nsuckle\nsuckler\nsuckless\nsuckling\nsuckstone\nsuclat\nsucramine\nsucrate\nsucre\nsucroacid\nsucrose\nsuction\nsuctional\nSuctoria\nsuctorial\nsuctorian\nsuctorious\nsucupira\nsucuri\nsucuriu\nsucuruju\nsud\nsudadero\nsudamen\nsudamina\nsudaminal\nSudan\nSudanese\nSudani\nSudanian\nSudanic\nsudarium\nsudary\nsudate\nsudation\nsudatorium\nsudatory\nSudburian\nsudburite\nsudd\nsudden\nsuddenly\nsuddenness\nsuddenty\nSudder\nsudder\nsuddle\nsuddy\nSudic\nsudiform\nsudoral\nsudoresis\nsudoric\nsudoriferous\nsudoriferousness\nsudorific\nsudoriparous\nsudorous\nSudra\nsuds\nsudsman\nsudsy\nSue\nsue\nSuecism\nsuede\nsuer\nSuerre\nSuessiones\nsuet\nsuety\nSueve\nSuevi\nSuevian\nSuevic\nSufeism\nsuff\nsuffect\nsuffection\nsuffer\nsufferable\nsufferableness\nsufferably\nsufferance\nsufferer\nsuffering\nsufferingly\nsuffete\nsuffice\nsufficeable\nsufficer\nsufficiency\nsufficient\nsufficiently\nsufficientness\nsufficing\nsufficingly\nsufficingness\nsuffiction\nsuffix\nsuffixal\nsuffixation\nsuffixion\nsuffixment\nsufflaminate\nsufflamination\nsufflate\nsufflation\nsufflue\nsuffocate\nsuffocating\nsuffocatingly\nsuffocation\nsuffocative\nSuffolk\nsuffragan\nsuffraganal\nsuffraganate\nsuffragancy\nsuffraganeous\nsuffragatory\nsuffrage\nsuffragette\nsuffragettism\nsuffragial\nsuffragism\nsuffragist\nsuffragistic\nsuffragistically\nsuffragitis\nsuffrago\nsuffrutescent\nsuffrutex\nsuffruticose\nsuffruticous\nsuffruticulose\nsuffumigate\nsuffumigation\nsuffusable\nsuffuse\nsuffused\nsuffusedly\nsuffusion\nsuffusive\nSufi\nSufiism\nSufiistic\nSufism\nSufistic\nsugamo\nsugan\nsugar\nsugarberry\nsugarbird\nsugarbush\nsugared\nsugarelly\nsugarer\nsugarhouse\nsugariness\nsugarless\nsugarlike\nsugarplum\nsugarsweet\nsugarworks\nsugary\nsugent\nsugescent\nsuggest\nsuggestable\nsuggestedness\nsuggester\nsuggestibility\nsuggestible\nsuggestibleness\nsuggestibly\nsuggesting\nsuggestingly\nsuggestion\nsuggestionability\nsuggestionable\nsuggestionism\nsuggestionist\nsuggestionize\nsuggestive\nsuggestively\nsuggestiveness\nsuggestivity\nsuggestment\nsuggestress\nsuggestum\nsuggillate\nsuggillation\nsugh\nsugi\nSugih\nsuguaro\nsuhuaro\nSui\nsuicidal\nsuicidalism\nsuicidally\nsuicidalwise\nsuicide\nsuicidical\nsuicidism\nsuicidist\nsuid\nSuidae\nsuidian\nsuiform\nsuilline\nsuimate\nSuina\nsuine\nsuing\nsuingly\nsuint\nSuiogoth\nSuiogothic\nSuiones\nsuisimilar\nsuist\nsuit\nsuitability\nsuitable\nsuitableness\nsuitably\nsuitcase\nsuite\nsuithold\nsuiting\nsuitor\nsuitoress\nsuitorship\nsuity\nsuji\nSuk\nSukey\nsukiyaki\nsukkenye\nSuku\nSula\nSulaba\nSulafat\nSulaib\nsulbasutra\nsulcal\nsulcalization\nsulcalize\nsulcar\nsulcate\nsulcated\nsulcation\nsulcatoareolate\nsulcatocostate\nsulcatorimose\nsulciform\nsulcomarginal\nsulcular\nsulculate\nsulculus\nsulcus\nsuld\nsulea\nsulfa\nsulfacid\nsulfadiazine\nsulfaguanidine\nsulfamate\nsulfamerazin\nsulfamerazine\nsulfamethazine\nsulfamethylthiazole\nsulfamic\nsulfamidate\nsulfamide\nsulfamidic\nsulfamine\nsulfaminic\nsulfamyl\nsulfanilamide\nsulfanilic\nsulfanilylguanidine\nsulfantimonide\nsulfapyrazine\nsulfapyridine\nsulfaquinoxaline\nsulfarsenide\nsulfarsenite\nsulfarseniuret\nsulfarsphenamine\nSulfasuxidine\nsulfatase\nsulfathiazole\nsulfatic\nsulfatize\nsulfato\nsulfazide\nsulfhydrate\nsulfhydric\nsulfhydryl\nsulfindigotate\nsulfindigotic\nsulfindylic\nsulfion\nsulfionide\nsulfoacid\nsulfoamide\nsulfobenzide\nsulfobenzoate\nsulfobenzoic\nsulfobismuthite\nsulfoborite\nsulfocarbamide\nsulfocarbimide\nsulfocarbolate\nsulfocarbolic\nsulfochloride\nsulfocyan\nsulfocyanide\nsulfofication\nsulfogermanate\nsulfohalite\nsulfohydrate\nsulfoindigotate\nsulfoleic\nsulfolysis\nsulfomethylic\nsulfonamic\nsulfonamide\nsulfonate\nsulfonation\nsulfonator\nsulfonephthalein\nsulfonethylmethane\nsulfonic\nsulfonium\nsulfonmethane\nsulfonyl\nsulfophthalein\nsulfopurpurate\nsulfopurpuric\nsulforicinate\nsulforicinic\nsulforicinoleate\nsulforicinoleic\nsulfoselenide\nsulfosilicide\nsulfostannide\nsulfotelluride\nsulfourea\nsulfovinate\nsulfovinic\nsulfowolframic\nsulfoxide\nsulfoxism\nsulfoxylate\nsulfoxylic\nsulfurage\nsulfuran\nsulfurate\nsulfuration\nsulfurator\nsulfurea\nsulfureous\nsulfureously\nsulfureousness\nsulfuret\nsulfuric\nsulfurization\nsulfurize\nsulfurosyl\nsulfurous\nsulfury\nsulfuryl\nSulidae\nSulides\nSuliote\nsulk\nsulka\nsulker\nsulkily\nsulkiness\nsulky\nsulkylike\nsull\nsulla\nsullage\nSullan\nsullen\nsullenhearted\nsullenly\nsullenness\nsulliable\nsullow\nsully\nsulpha\nsulphacid\nsulphaldehyde\nsulphamate\nsulphamic\nsulphamidate\nsulphamide\nsulphamidic\nsulphamine\nsulphaminic\nsulphamino\nsulphammonium\nsulphamyl\nsulphanilate\nsulphanilic\nsulphantimonate\nsulphantimonial\nsulphantimonic\nsulphantimonide\nsulphantimonious\nsulphantimonite\nsulpharsenate\nsulpharseniate\nsulpharsenic\nsulpharsenide\nsulpharsenious\nsulpharsenite\nsulpharseniuret\nsulpharsphenamine\nsulphatase\nsulphate\nsulphated\nsulphatic\nsulphation\nsulphatization\nsulphatize\nsulphato\nsulphatoacetic\nsulphatocarbonic\nsulphazide\nsulphazotize\nsulphbismuthite\nsulphethylate\nsulphethylic\nsulphhemoglobin\nsulphichthyolate\nsulphidation\nsulphide\nsulphidic\nsulphidize\nsulphimide\nsulphinate\nsulphindigotate\nsulphine\nsulphinic\nsulphinide\nsulphinyl\nsulphitation\nsulphite\nsulphitic\nsulphmethemoglobin\nsulpho\nsulphoacetic\nsulphoamid\nsulphoamide\nsulphoantimonate\nsulphoantimonic\nsulphoantimonious\nsulphoantimonite\nsulphoarsenic\nsulphoarsenious\nsulphoarsenite\nsulphoazotize\nsulphobenzide\nsulphobenzoate\nsulphobenzoic\nsulphobismuthite\nsulphoborite\nsulphobutyric\nsulphocarbamic\nsulphocarbamide\nsulphocarbanilide\nsulphocarbimide\nsulphocarbolate\nsulphocarbolic\nsulphocarbonate\nsulphocarbonic\nsulphochloride\nsulphochromic\nsulphocinnamic\nsulphocyan\nsulphocyanate\nsulphocyanic\nsulphocyanide\nsulphocyanogen\nsulphodichloramine\nsulphofication\nsulphofy\nsulphogallic\nsulphogel\nsulphogermanate\nsulphogermanic\nsulphohalite\nsulphohaloid\nsulphohydrate\nsulphoichthyolate\nsulphoichthyolic\nsulphoindigotate\nsulphoindigotic\nsulpholeate\nsulpholeic\nsulpholipin\nsulpholysis\nsulphonal\nsulphonalism\nsulphonamic\nsulphonamide\nsulphonamido\nsulphonamine\nsulphonaphthoic\nsulphonate\nsulphonated\nsulphonation\nsulphonator\nsulphoncyanine\nsulphone\nsulphonephthalein\nsulphonethylmethane\nsulphonic\nsulphonium\nsulphonmethane\nsulphonphthalein\nsulphonyl\nsulphoparaldehyde\nsulphophosphate\nsulphophosphite\nsulphophosphoric\nsulphophosphorous\nsulphophthalein\nsulphophthalic\nsulphopropionic\nsulphoproteid\nsulphopupuric\nsulphopurpurate\nsulphoricinate\nsulphoricinic\nsulphoricinoleate\nsulphoricinoleic\nsulphosalicylic\nsulphoselenide\nsulphoselenium\nsulphosilicide\nsulphosol\nsulphostannate\nsulphostannic\nsulphostannide\nsulphostannite\nsulphostannous\nsulphosuccinic\nsulphosulphurous\nsulphotannic\nsulphotelluride\nsulphoterephthalic\nsulphothionyl\nsulphotoluic\nsulphotungstate\nsulphotungstic\nsulphourea\nsulphovanadate\nsulphovinate\nsulphovinic\nsulphowolframic\nsulphoxide\nsulphoxism\nsulphoxylate\nsulphoxylic\nsulphoxyphosphate\nsulphozincate\nsulphur\nsulphurage\nsulphuran\nsulphurate\nsulphuration\nsulphurator\nsulphurea\nsulphurean\nsulphureity\nsulphureonitrous\nsulphureosaline\nsulphureosuffused\nsulphureous\nsulphureously\nsulphureousness\nsulphureovirescent\nsulphuret\nsulphureted\nsulphuric\nsulphuriferous\nsulphurity\nsulphurization\nsulphurize\nsulphurless\nsulphurlike\nsulphurosyl\nsulphurous\nsulphurously\nsulphurousness\nsulphurproof\nsulphurweed\nsulphurwort\nsulphury\nsulphuryl\nsulphydrate\nsulphydric\nsulphydryl\nSulpician\nsultam\nsultan\nsultana\nsultanaship\nsultanate\nsultane\nsultanesque\nsultaness\nsultanian\nsultanic\nsultanin\nsultanism\nsultanist\nsultanize\nsultanlike\nsultanry\nsultanship\nsultone\nsultrily\nsultriness\nsultry\nSulu\nSuluan\nsulung\nsulvanite\nsulvasutra\nsum\nsumac\nSumak\nSumass\nSumatra\nsumatra\nSumatran\nsumbul\nsumbulic\nSumdum\nSumerian\nSumerology\nSumitro\nsumless\nsumlessness\nsummability\nsummable\nsummage\nsummand\nsummar\nsummarily\nsummariness\nsummarist\nsummarization\nsummarize\nsummarizer\nsummary\nsummate\nsummation\nsummational\nsummative\nsummatory\nsummed\nsummer\nsummerbird\nsummercastle\nsummerer\nsummerhead\nsummeriness\nsummering\nsummerings\nsummerish\nsummerite\nsummerize\nsummerland\nsummerlay\nsummerless\nsummerlike\nsummerliness\nsummerling\nsummerly\nsummerproof\nsummertide\nsummertime\nsummertree\nsummerward\nsummerwood\nsummery\nsummist\nsummit\nsummital\nsummitless\nsummity\nsummon\nsummonable\nsummoner\nsummoningly\nsummons\nsummula\nsummulist\nsummut\nsumner\nSumo\nsump\nsumpage\nsumper\nsumph\nsumphish\nsumphishly\nsumphishness\nsumphy\nsumpit\nsumpitan\nsumple\nsumpman\nsumpsimus\nsumpter\nsumption\nsumptuary\nsumptuosity\nsumptuous\nsumptuously\nsumptuousness\nsun\nsunbeam\nsunbeamed\nsunbeamy\nsunberry\nsunbird\nsunblink\nsunbonnet\nsunbonneted\nsunbow\nsunbreak\nsunburn\nsunburned\nsunburnedness\nsunburnproof\nsunburnt\nsunburntness\nsunburst\nsuncherchor\nsuncup\nsundae\nSundanese\nSundanesian\nsundang\nSundar\nSundaresan\nsundari\nSunday\nSundayfied\nSundayish\nSundayism\nSundaylike\nSundayness\nSundayproof\nsundek\nsunder\nsunderable\nsunderance\nsunderer\nsunderment\nsunderwise\nsundew\nsundial\nsundik\nsundog\nsundown\nsundowner\nsundowning\nsundra\nsundri\nsundries\nsundriesman\nsundrily\nsundriness\nsundrops\nsundry\nsundryman\nsune\nsunfall\nsunfast\nsunfish\nsunfisher\nsunfishery\nsunflower\nSung\nsung\nsungha\nsunglade\nsunglass\nsunglo\nsunglow\nSunil\nsunk\nsunken\nsunket\nsunkland\nsunlamp\nsunland\nsunless\nsunlessly\nsunlessness\nsunlet\nsunlight\nsunlighted\nsunlike\nsunlit\nsunn\nSunna\nSunni\nSunniah\nsunnily\nsunniness\nSunnism\nSunnite\nsunnud\nsunny\nsunnyhearted\nsunnyheartedness\nsunproof\nsunquake\nsunray\nsunrise\nsunrising\nsunroom\nsunscald\nsunset\nsunsetting\nsunsetty\nsunshade\nsunshine\nsunshineless\nsunshining\nsunshiny\nsunsmit\nsunsmitten\nsunspot\nsunspotted\nsunspottedness\nsunspottery\nsunspotty\nsunsquall\nsunstone\nsunstricken\nsunstroke\nsunt\nsunup\nsunward\nsunwards\nsunway\nsunways\nsunweed\nsunwise\nsunyie\nSuomi\nSuomic\nsuovetaurilia\nsup\nsupa\nSupai\nsupari\nsupawn\nsupe\nsupellex\nsuper\nsuperabduction\nsuperabhor\nsuperability\nsuperable\nsuperableness\nsuperably\nsuperabnormal\nsuperabominable\nsuperabomination\nsuperabound\nsuperabstract\nsuperabsurd\nsuperabundance\nsuperabundancy\nsuperabundant\nsuperabundantly\nsuperaccession\nsuperaccessory\nsuperaccommodating\nsuperaccomplished\nsuperaccrue\nsuperaccumulate\nsuperaccumulation\nsuperaccurate\nsuperacetate\nsuperachievement\nsuperacid\nsuperacidulated\nsuperacknowledgment\nsuperacquisition\nsuperacromial\nsuperactive\nsuperactivity\nsuperacute\nsuperadaptable\nsuperadd\nsuperaddition\nsuperadditional\nsuperadequate\nsuperadequately\nsuperadjacent\nsuperadministration\nsuperadmirable\nsuperadmiration\nsuperadorn\nsuperadornment\nsuperaerial\nsuperaesthetical\nsuperaffiliation\nsuperaffiuence\nsuperagency\nsuperaggravation\nsuperagitation\nsuperagrarian\nsuperalbal\nsuperalbuminosis\nsuperalimentation\nsuperalkaline\nsuperalkalinity\nsuperallowance\nsuperaltar\nsuperaltern\nsuperambitious\nsuperambulacral\nsuperanal\nsuperangelic\nsuperangelical\nsuperanimal\nsuperannuate\nsuperannuation\nsuperannuitant\nsuperannuity\nsuperapology\nsuperappreciation\nsuperaqueous\nsuperarbiter\nsuperarbitrary\nsuperarctic\nsuperarduous\nsuperarrogant\nsuperarseniate\nsuperartificial\nsuperartificially\nsuperaspiration\nsuperassertion\nsuperassociate\nsuperassume\nsuperastonish\nsuperastonishment\nsuperattachment\nsuperattainable\nsuperattendant\nsuperattraction\nsuperattractive\nsuperauditor\nsuperaural\nsuperaverage\nsuperavit\nsuperaward\nsuperaxillary\nsuperazotation\nsuperb\nsuperbelief\nsuperbeloved\nsuperbenefit\nsuperbenevolent\nsuperbenign\nsuperbias\nsuperbious\nsuperbity\nsuperblessed\nsuperblunder\nsuperbly\nsuperbness\nsuperbold\nsuperborrow\nsuperbrain\nsuperbrave\nsuperbrute\nsuperbuild\nsuperbungalow\nsuperbusy\nsupercabinet\nsupercalender\nsupercallosal\nsupercandid\nsupercanine\nsupercanonical\nsupercanonization\nsupercanopy\nsupercapable\nsupercaption\nsupercarbonate\nsupercarbonization\nsupercarbonize\nsupercarbureted\nsupercargo\nsupercargoship\nsupercarpal\nsupercatastrophe\nsupercatholic\nsupercausal\nsupercaution\nsupercelestial\nsupercensure\nsupercentral\nsupercentrifuge\nsupercerebellar\nsupercerebral\nsuperceremonious\nsupercharge\nsupercharged\nsupercharger\nsuperchemical\nsuperchivalrous\nsuperciliary\nsuperciliosity\nsupercilious\nsuperciliously\nsuperciliousness\nsupercilium\nsupercivil\nsupercivilization\nsupercivilized\nsuperclaim\nsuperclass\nsuperclassified\nsupercloth\nsupercoincidence\nsupercolossal\nsupercolumnar\nsupercolumniation\nsupercombination\nsupercombing\nsupercommendation\nsupercommentary\nsupercommentator\nsupercommercial\nsupercompetition\nsupercomplete\nsupercomplex\nsupercomprehension\nsupercompression\nsuperconception\nsuperconductive\nsuperconductivity\nsuperconductor\nsuperconfident\nsuperconfirmation\nsuperconformable\nsuperconformist\nsuperconformity\nsuperconfusion\nsupercongestion\nsuperconscious\nsuperconsciousness\nsuperconsecrated\nsuperconsequency\nsuperconservative\nsuperconstitutional\nsupercontest\nsupercontribution\nsupercontrol\nsupercool\nsupercordial\nsupercorporation\nsupercow\nsupercredit\nsupercrescence\nsupercrescent\nsupercrime\nsupercritic\nsupercritical\nsupercrowned\nsupercrust\nsupercube\nsupercultivated\nsupercurious\nsupercycle\nsupercynical\nsuperdainty\nsuperdanger\nsuperdebt\nsuperdeclamatory\nsuperdecoration\nsuperdeficit\nsuperdeity\nsuperdejection\nsuperdelegate\nsuperdelicate\nsuperdemand\nsuperdemocratic\nsuperdemonic\nsuperdemonstration\nsuperdensity\nsuperdeposit\nsuperdesirous\nsuperdevelopment\nsuperdevilish\nsuperdevotion\nsuperdiabolical\nsuperdiabolically\nsuperdicrotic\nsuperdifficult\nsuperdiplomacy\nsuperdirection\nsuperdiscount\nsuperdistention\nsuperdistribution\nsuperdividend\nsuperdivine\nsuperdivision\nsuperdoctor\nsuperdominant\nsuperdomineering\nsuperdonation\nsuperdose\nsuperdramatist\nsuperdreadnought\nsuperdubious\nsuperduplication\nsuperdural\nsuperdying\nsuperearthly\nsupereconomy\nsuperedification\nsuperedify\nsupereducation\nsupereffective\nsupereffluence\nsupereffluently\nsuperego\nsuperelaborate\nsuperelastic\nsuperelated\nsuperelegance\nsuperelementary\nsuperelevated\nsuperelevation\nsupereligible\nsupereloquent\nsupereminence\nsupereminency\nsupereminent\nsupereminently\nsuperemphasis\nsuperemphasize\nsuperendorse\nsuperendorsement\nsuperendow\nsuperenergetic\nsuperenforcement\nsuperengrave\nsuperenrollment\nsuperepic\nsuperepoch\nsuperequivalent\nsupererogant\nsupererogantly\nsupererogate\nsupererogation\nsupererogative\nsupererogator\nsupererogatorily\nsupererogatory\nsuperespecial\nsuperessential\nsuperessentially\nsuperestablish\nsuperestablishment\nsupereternity\nsuperether\nsuperethical\nsuperethmoidal\nsuperevangelical\nsuperevident\nsuperexacting\nsuperexalt\nsuperexaltation\nsuperexaminer\nsuperexceed\nsuperexceeding\nsuperexcellence\nsuperexcellency\nsuperexcellent\nsuperexcellently\nsuperexceptional\nsuperexcitation\nsuperexcited\nsuperexcitement\nsuperexcrescence\nsuperexert\nsuperexertion\nsuperexiguity\nsuperexist\nsuperexistent\nsuperexpand\nsuperexpansion\nsuperexpectation\nsuperexpenditure\nsuperexplicit\nsuperexport\nsuperexpressive\nsuperexquisite\nsuperexquisitely\nsuperexquisiteness\nsuperextend\nsuperextension\nsuperextol\nsuperextreme\nsuperfamily\nsuperfantastic\nsuperfarm\nsuperfat\nsuperfecundation\nsuperfecundity\nsuperfee\nsuperfeminine\nsuperfervent\nsuperfetate\nsuperfetation\nsuperfeudation\nsuperfibrination\nsuperficial\nsuperficialism\nsuperficialist\nsuperficiality\nsuperficialize\nsuperficially\nsuperficialness\nsuperficiary\nsuperficies\nsuperfidel\nsuperfinance\nsuperfine\nsuperfinical\nsuperfinish\nsuperfinite\nsuperfissure\nsuperfit\nsuperfix\nsuperfleet\nsuperflexion\nsuperfluent\nsuperfluid\nsuperfluitance\nsuperfluity\nsuperfluous\nsuperfluously\nsuperfluousness\nsuperflux\nsuperfoliaceous\nsuperfoliation\nsuperfolly\nsuperformal\nsuperformation\nsuperformidable\nsuperfortunate\nsuperfriendly\nsuperfrontal\nsuperfructified\nsuperfulfill\nsuperfulfillment\nsuperfunction\nsuperfunctional\nsuperfuse\nsuperfusibility\nsuperfusible\nsuperfusion\nsupergaiety\nsupergallant\nsupergene\nsupergeneric\nsupergenerosity\nsupergenerous\nsupergenual\nsupergiant\nsuperglacial\nsuperglorious\nsuperglottal\nsupergoddess\nsupergoodness\nsupergovern\nsupergovernment\nsupergraduate\nsupergrant\nsupergratification\nsupergratify\nsupergravitate\nsupergravitation\nsuperguarantee\nsupergun\nsuperhandsome\nsuperhearty\nsuperheat\nsuperheater\nsuperheresy\nsuperhero\nsuperheroic\nsuperhet\nsuperheterodyne\nsuperhighway\nsuperhirudine\nsuperhistoric\nsuperhistorical\nsuperhive\nsuperhuman\nsuperhumanity\nsuperhumanize\nsuperhumanly\nsuperhumanness\nsuperhumeral\nsuperhypocrite\nsuperideal\nsuperignorant\nsuperillustrate\nsuperillustration\nsuperimpend\nsuperimpending\nsuperimpersonal\nsuperimply\nsuperimportant\nsuperimposable\nsuperimpose\nsuperimposed\nsuperimposition\nsuperimposure\nsuperimpregnated\nsuperimpregnation\nsuperimprobable\nsuperimproved\nsuperincentive\nsuperinclination\nsuperinclusive\nsuperincomprehensible\nsuperincrease\nsuperincumbence\nsuperincumbency\nsuperincumbent\nsuperincumbently\nsuperindependent\nsuperindiction\nsuperindifference\nsuperindifferent\nsuperindignant\nsuperindividual\nsuperindividualism\nsuperindividualist\nsuperinduce\nsuperinducement\nsuperinduct\nsuperinduction\nsuperindulgence\nsuperindulgent\nsuperindustrious\nsuperindustry\nsuperinenarrable\nsuperinfection\nsuperinfer\nsuperinference\nsuperinfeudation\nsuperinfinite\nsuperinfinitely\nsuperinfirmity\nsuperinfluence\nsuperinformal\nsuperinfuse\nsuperinfusion\nsuperingenious\nsuperingenuity\nsuperinitiative\nsuperinjustice\nsuperinnocent\nsuperinquisitive\nsuperinsaniated\nsuperinscription\nsuperinsist\nsuperinsistence\nsuperinsistent\nsuperinstitute\nsuperinstitution\nsuperintellectual\nsuperintend\nsuperintendence\nsuperintendency\nsuperintendent\nsuperintendential\nsuperintendentship\nsuperintender\nsuperintense\nsuperintolerable\nsuperinundation\nsuperior\nsuperioress\nsuperiority\nsuperiorly\nsuperiorness\nsuperiorship\nsuperirritability\nsuperius\nsuperjacent\nsuperjudicial\nsuperjurisdiction\nsuperjustification\nsuperknowledge\nsuperlabial\nsuperlaborious\nsuperlactation\nsuperlapsarian\nsuperlaryngeal\nsuperlation\nsuperlative\nsuperlatively\nsuperlativeness\nsuperlenient\nsuperlie\nsuperlikelihood\nsuperline\nsuperlocal\nsuperlogical\nsuperloyal\nsuperlucky\nsuperlunary\nsuperlunatical\nsuperluxurious\nsupermagnificent\nsupermagnificently\nsupermalate\nsuperman\nsupermanhood\nsupermanifest\nsupermanism\nsupermanliness\nsupermanly\nsupermannish\nsupermarginal\nsupermarine\nsupermarket\nsupermarvelous\nsupermasculine\nsupermaterial\nsupermathematical\nsupermaxilla\nsupermaxillary\nsupermechanical\nsupermedial\nsupermedicine\nsupermediocre\nsupermental\nsupermentality\nsupermetropolitan\nsupermilitary\nsupermishap\nsupermixture\nsupermodest\nsupermoisten\nsupermolten\nsupermoral\nsupermorose\nsupermunicipal\nsupermuscan\nsupermystery\nsupernacular\nsupernaculum\nsupernal\nsupernalize\nsupernally\nsupernatant\nsupernatation\nsupernation\nsupernational\nsupernationalism\nsupernatural\nsupernaturaldom\nsupernaturalism\nsupernaturalist\nsupernaturality\nsupernaturalize\nsupernaturally\nsupernaturalness\nsupernature\nsupernecessity\nsupernegligent\nsupernormal\nsupernormally\nsupernormalness\nsupernotable\nsupernova\nsupernumeral\nsupernumerariness\nsupernumerary\nsupernumeraryship\nsupernumerous\nsupernutrition\nsuperoanterior\nsuperobedience\nsuperobedient\nsuperobese\nsuperobject\nsuperobjection\nsuperobjectionable\nsuperobligation\nsuperobstinate\nsuperoccipital\nsuperoctave\nsuperocular\nsuperodorsal\nsuperoexternal\nsuperoffensive\nsuperofficious\nsuperofficiousness\nsuperofrontal\nsuperointernal\nsuperolateral\nsuperomedial\nsuperoposterior\nsuperopposition\nsuperoptimal\nsuperoptimist\nsuperoratorical\nsuperorbital\nsuperordain\nsuperorder\nsuperordinal\nsuperordinary\nsuperordinate\nsuperordination\nsuperorganic\nsuperorganism\nsuperorganization\nsuperorganize\nsuperornament\nsuperornamental\nsuperosculate\nsuperoutput\nsuperoxalate\nsuperoxide\nsuperoxygenate\nsuperoxygenation\nsuperparamount\nsuperparasite\nsuperparasitic\nsuperparasitism\nsuperparliamentary\nsuperpassage\nsuperpatient\nsuperpatriotic\nsuperpatriotism\nsuperperfect\nsuperperfection\nsuperperson\nsuperpersonal\nsuperpersonalism\nsuperpetrosal\nsuperphlogisticate\nsuperphlogistication\nsuperphosphate\nsuperphysical\nsuperpigmentation\nsuperpious\nsuperplausible\nsuperplease\nsuperplus\nsuperpolite\nsuperpolitic\nsuperponderance\nsuperponderancy\nsuperponderant\nsuperpopulation\nsuperposable\nsuperpose\nsuperposed\nsuperposition\nsuperpositive\nsuperpower\nsuperpowered\nsuperpraise\nsuperprecarious\nsuperprecise\nsuperprelatical\nsuperpreparation\nsuperprinting\nsuperprobability\nsuperproduce\nsuperproduction\nsuperproportion\nsuperprosperous\nsuperpublicity\nsuperpure\nsuperpurgation\nsuperquadrupetal\nsuperqualify\nsuperquote\nsuperradical\nsuperrational\nsuperrationally\nsuperreaction\nsuperrealism\nsuperrealist\nsuperrefine\nsuperrefined\nsuperrefinement\nsuperreflection\nsuperreform\nsuperreformation\nsuperregal\nsuperregeneration\nsuperregenerative\nsuperregistration\nsuperregulation\nsuperreliance\nsuperremuneration\nsuperrenal\nsuperrequirement\nsuperrespectable\nsuperresponsible\nsuperrestriction\nsuperreward\nsuperrheumatized\nsuperrighteous\nsuperromantic\nsuperroyal\nsupersacerdotal\nsupersacral\nsupersacred\nsupersacrifice\nsupersafe\nsupersagacious\nsupersaint\nsupersaintly\nsupersalesman\nsupersaliency\nsupersalient\nsupersalt\nsupersanction\nsupersanguine\nsupersanity\nsupersarcastic\nsupersatisfaction\nsupersatisfy\nsupersaturate\nsupersaturation\nsuperscandal\nsuperscholarly\nsuperscientific\nsuperscribe\nsuperscript\nsuperscription\nsuperscrive\nsuperseaman\nsupersecret\nsupersecretion\nsupersecular\nsupersecure\nsupersedable\nsupersede\nsupersedeas\nsupersedence\nsuperseder\nsupersedure\nsuperselect\nsuperseminate\nsupersemination\nsuperseminator\nsupersensible\nsupersensibly\nsupersensitive\nsupersensitiveness\nsupersensitization\nsupersensory\nsupersensual\nsupersensualism\nsupersensualist\nsupersensualistic\nsupersensuality\nsupersensually\nsupersensuous\nsupersensuousness\nsupersentimental\nsuperseptal\nsuperseptuaginarian\nsuperseraphical\nsuperserious\nsuperservice\nsuperserviceable\nsuperserviceableness\nsuperserviceably\nsupersesquitertial\nsupersession\nsupersessive\nsupersevere\nsupershipment\nsupersignificant\nsupersilent\nsupersimplicity\nsupersimplify\nsupersincerity\nsupersingular\nsupersistent\nsupersize\nsupersmart\nsupersocial\nsupersoil\nsupersolar\nsupersolemn\nsupersolemness\nsupersolemnity\nsupersolemnly\nsupersolicit\nsupersolicitation\nsupersolid\nsupersonant\nsupersonic\nsupersovereign\nsupersovereignty\nsuperspecialize\nsuperspecies\nsuperspecification\nsupersphenoid\nsupersphenoidal\nsuperspinous\nsuperspiritual\nsuperspirituality\nsupersquamosal\nsuperstage\nsuperstamp\nsuperstandard\nsuperstate\nsuperstatesman\nsuperstimulate\nsuperstimulation\nsuperstition\nsuperstitionist\nsuperstitionless\nsuperstitious\nsuperstitiously\nsuperstitiousness\nsuperstoical\nsuperstrain\nsuperstrata\nsuperstratum\nsuperstrenuous\nsuperstrict\nsuperstrong\nsuperstruct\nsuperstruction\nsuperstructor\nsuperstructory\nsuperstructural\nsuperstructure\nsuperstuff\nsuperstylish\nsupersublimated\nsupersuborder\nsupersubsist\nsupersubstantial\nsupersubstantiality\nsupersubstantiate\nsupersubtilized\nsupersubtle\nsupersufficiency\nsupersufficient\nsupersulcus\nsupersulphate\nsupersulphuret\nsupersulphureted\nsupersulphurize\nsupersuperabundance\nsupersuperabundant\nsupersuperabundantly\nsupersuperb\nsupersuperior\nsupersupremacy\nsupersupreme\nsupersurprise\nsupersuspicious\nsupersweet\nsupersympathy\nsupersyndicate\nsupersystem\nsupertare\nsupertartrate\nsupertax\nsupertaxation\nsupertemporal\nsupertempt\nsupertemptation\nsupertension\nsuperterranean\nsuperterraneous\nsuperterrene\nsuperterrestrial\nsuperthankful\nsuperthorough\nsuperthyroidism\nsupertoleration\nsupertonic\nsupertotal\nsupertower\nsupertragic\nsupertragical\nsupertrain\nsupertramp\nsupertranscendent\nsupertranscendently\nsupertreason\nsupertrivial\nsupertuchun\nsupertunic\nsupertutelary\nsuperugly\nsuperultrafrostified\nsuperunfit\nsuperunit\nsuperunity\nsuperuniversal\nsuperuniverse\nsuperurgent\nsupervalue\nsupervast\nsupervene\nsupervenience\nsupervenient\nsupervenosity\nsupervention\nsupervestment\nsupervexation\nsupervictorious\nsupervigilant\nsupervigorous\nsupervirulent\nsupervisal\nsupervisance\nsupervise\nsupervision\nsupervisionary\nsupervisive\nsupervisor\nsupervisorial\nsupervisorship\nsupervisory\nsupervisual\nsupervisure\nsupervital\nsupervive\nsupervolition\nsupervoluminous\nsupervolute\nsuperwager\nsuperwealthy\nsuperweening\nsuperwise\nsuperwoman\nsuperworldly\nsuperwrought\nsuperyacht\nsuperzealous\nsupinate\nsupination\nsupinator\nsupine\nsupinely\nsupineness\nsuppedaneum\nsupper\nsuppering\nsupperless\nsuppertime\nsupperwards\nsupping\nsupplace\nsupplant\nsupplantation\nsupplanter\nsupplantment\nsupple\nsupplejack\nsupplely\nsupplement\nsupplemental\nsupplementally\nsupplementarily\nsupplementary\nsupplementation\nsupplementer\nsuppleness\nsuppletion\nsuppletive\nsuppletively\nsuppletorily\nsuppletory\nsuppliable\nsupplial\nsuppliance\nsuppliancy\nsuppliant\nsuppliantly\nsuppliantness\nsupplicancy\nsupplicant\nsupplicantly\nsupplicat\nsupplicate\nsupplicating\nsupplicatingly\nsupplication\nsupplicationer\nsupplicative\nsupplicator\nsupplicatory\nsupplicavit\nsupplice\nsupplier\nsuppling\nsupply\nsupport\nsupportability\nsupportable\nsupportableness\nsupportably\nsupportance\nsupporter\nsupportful\nsupporting\nsupportingly\nsupportive\nsupportless\nsupportlessly\nsupportress\nsupposable\nsupposableness\nsupposably\nsupposal\nsuppose\nsupposed\nsupposedly\nsupposer\nsupposing\nsupposition\nsuppositional\nsuppositionally\nsuppositionary\nsuppositionless\nsuppositious\nsupposititious\nsupposititiously\nsupposititiousness\nsuppositive\nsuppositively\nsuppository\nsuppositum\nsuppost\nsuppress\nsuppressal\nsuppressed\nsuppressedly\nsuppresser\nsuppressible\nsuppression\nsuppressionist\nsuppressive\nsuppressively\nsuppressor\nsupprise\nsuppurant\nsuppurate\nsuppuration\nsuppurative\nsuppuratory\nsuprabasidorsal\nsuprabranchial\nsuprabuccal\nsupracaecal\nsupracargo\nsupracaudal\nsupracensorious\nsupracentenarian\nsuprachorioid\nsuprachorioidal\nsuprachorioidea\nsuprachoroid\nsuprachoroidal\nsuprachoroidea\nsupraciliary\nsupraclavicle\nsupraclavicular\nsupraclusion\nsupracommissure\nsupraconduction\nsupraconductor\nsupracondylar\nsupracondyloid\nsupraconscious\nsupraconsciousness\nsupracoralline\nsupracostal\nsupracoxal\nsupracranial\nsupracretaceous\nsupradecompound\nsupradental\nsupradorsal\nsupradural\nsuprafeminine\nsuprafine\nsuprafoliaceous\nsuprafoliar\nsupraglacial\nsupraglenoid\nsupraglottic\nsupragovernmental\nsuprahepatic\nsuprahistorical\nsuprahuman\nsuprahumanity\nsuprahyoid\nsuprailiac\nsuprailium\nsupraintellectual\nsuprainterdorsal\nsuprajural\nsupralabial\nsupralapsarian\nsupralapsarianism\nsupralateral\nsupralegal\nsupraliminal\nsupraliminally\nsupralineal\nsupralinear\nsupralocal\nsupralocally\nsupraloral\nsupralunar\nsupralunary\nsupramammary\nsupramarginal\nsupramarine\nsupramastoid\nsupramaxilla\nsupramaxillary\nsupramaximal\nsuprameatal\nsupramechanical\nsupramedial\nsupramental\nsupramolecular\nsupramoral\nsupramortal\nsupramundane\nsupranasal\nsupranational\nsupranatural\nsupranaturalism\nsupranaturalist\nsupranaturalistic\nsupranature\nsupranervian\nsupraneural\nsupranormal\nsupranuclear\nsupraoccipital\nsupraocclusion\nsupraocular\nsupraoesophagal\nsupraoesophageal\nsupraoptimal\nsupraoptional\nsupraoral\nsupraorbital\nsupraorbitar\nsupraordinary\nsupraordinate\nsupraordination\nsuprapapillary\nsuprapedal\nsuprapharyngeal\nsupraposition\nsupraprotest\nsuprapubian\nsuprapubic\nsuprapygal\nsupraquantivalence\nsupraquantivalent\nsuprarational\nsuprarationalism\nsuprarationality\nsuprarenal\nsuprarenalectomize\nsuprarenalectomy\nsuprarenalin\nsuprarenine\nsuprarimal\nsuprasaturate\nsuprascapula\nsuprascapular\nsuprascapulary\nsuprascript\nsuprasegmental\nsuprasensible\nsuprasensitive\nsuprasensual\nsuprasensuous\nsupraseptal\nsuprasolar\nsuprasoriferous\nsuprasphanoidal\nsupraspinal\nsupraspinate\nsupraspinatus\nsupraspinous\nsuprasquamosal\nsuprastandard\nsuprastapedial\nsuprastate\nsuprasternal\nsuprastigmal\nsuprasubtle\nsupratemporal\nsupraterraneous\nsupraterrestrial\nsuprathoracic\nsupratonsillar\nsupratrochlear\nsupratropical\nsupratympanic\nsupravaginal\nsupraventricular\nsupraversion\nsupravital\nsupraworld\nsupremacy\nsuprematism\nsupreme\nsupremely\nsupremeness\nsupremity\nsur\nsura\nsuraddition\nsurah\nsurahi\nsural\nsuralimentation\nsuranal\nsurangular\nsurat\nsurbase\nsurbased\nsurbasement\nsurbate\nsurbater\nsurbed\nsurcease\nsurcharge\nsurcharger\nsurcingle\nsurcoat\nsurcrue\nsurculi\nsurculigerous\nsurculose\nsurculous\nsurculus\nsurd\nsurdation\nsurdeline\nsurdent\nsurdimutism\nsurdity\nsurdomute\nsure\nsurely\nsureness\nsures\nSuresh\nsurette\nsurety\nsuretyship\nsurexcitation\nsurf\nsurface\nsurfaced\nsurfacedly\nsurfaceless\nsurfacely\nsurfaceman\nsurfacer\nsurfacing\nsurfactant\nsurfacy\nsurfbird\nsurfboard\nsurfboarding\nsurfboat\nsurfboatman\nsurfeit\nsurfeiter\nsurfer\nsurficial\nsurfle\nsurflike\nsurfman\nsurfmanship\nsurfrappe\nsurfuse\nsurfusion\nsurfy\nsurge\nsurgeful\nsurgeless\nsurgent\nsurgeon\nsurgeoncy\nsurgeoness\nsurgeonfish\nsurgeonless\nsurgeonship\nsurgeproof\nsurgerize\nsurgery\nsurgical\nsurgically\nsurginess\nsurging\nsurgy\nSuriana\nSurianaceae\nSuricata\nsuricate\nsuriga\nSurinam\nsurinamine\nsurlily\nsurliness\nsurly\nsurma\nsurmark\nsurmaster\nsurmisable\nsurmisal\nsurmisant\nsurmise\nsurmised\nsurmisedly\nsurmiser\nsurmount\nsurmountable\nsurmountableness\nsurmountal\nsurmounted\nsurmounter\nsurmullet\nsurname\nsurnamer\nsurnap\nsurnay\nsurnominal\nsurpass\nsurpassable\nsurpasser\nsurpassing\nsurpassingly\nsurpassingness\nsurpeopled\nsurplice\nsurpliced\nsurplicewise\nsurplician\nsurplus\nsurplusage\nsurpreciation\nsurprint\nsurprisable\nsurprisal\nsurprise\nsurprisedly\nsurprisement\nsurpriseproof\nsurpriser\nsurprising\nsurprisingly\nsurprisingness\nsurquedry\nsurquidry\nsurquidy\nsurra\nsurrealism\nsurrealist\nsurrealistic\nsurrealistically\nsurrebound\nsurrebut\nsurrebuttal\nsurrebutter\nsurrection\nsurrejoin\nsurrejoinder\nsurrenal\nsurrender\nsurrenderee\nsurrenderer\nsurrenderor\nsurreption\nsurreptitious\nsurreptitiously\nsurreptitiousness\nsurreverence\nsurreverently\nsurrey\nsurrogacy\nsurrogate\nsurrogateship\nsurrogation\nsurrosion\nsurround\nsurrounded\nsurroundedly\nsurrounder\nsurrounding\nsurroundings\nsursaturation\nsursolid\nsursumduction\nsursumvergence\nsursumversion\nsurtax\nsurtout\nsurturbrand\nsurveillance\nsurveillant\nsurvey\nsurveyable\nsurveyage\nsurveyal\nsurveyance\nsurveying\nsurveyor\nsurveyorship\nsurvigrous\nsurvivability\nsurvivable\nsurvival\nsurvivalism\nsurvivalist\nsurvivance\nsurvivancy\nsurvive\nsurviver\nsurviving\nsurvivor\nsurvivoress\nsurvivorship\nSurya\nSus\nSusan\nSusanchite\nSusanna\nSusanne\nsusannite\nsuscept\nsusceptance\nsusceptibility\nsusceptible\nsusceptibleness\nsusceptibly\nsusception\nsusceptive\nsusceptiveness\nsusceptivity\nsusceptor\nsuscitate\nsuscitation\nsusi\nSusian\nSusianian\nSusie\nsuslik\nsusotoxin\nsuspect\nsuspectable\nsuspected\nsuspectedness\nsuspecter\nsuspectful\nsuspectfulness\nsuspectible\nsuspectless\nsuspector\nsuspend\nsuspended\nsuspender\nsuspenderless\nsuspenders\nsuspendibility\nsuspendible\nsuspensation\nsuspense\nsuspenseful\nsuspensely\nsuspensibility\nsuspensible\nsuspension\nsuspensive\nsuspensively\nsuspensiveness\nsuspensoid\nsuspensor\nsuspensorial\nsuspensorium\nsuspensory\nsuspercollate\nsuspicion\nsuspicionable\nsuspicional\nsuspicionful\nsuspicionless\nsuspicious\nsuspiciously\nsuspiciousness\nsuspiration\nsuspiratious\nsuspirative\nsuspire\nsuspirious\nSusquehanna\nSussex\nsussexite\nSussexman\nsussultatory\nsussultorial\nsustain\nsustainable\nsustained\nsustainer\nsustaining\nsustainingly\nsustainment\nsustanedly\nsustenance\nsustenanceless\nsustentacula\nsustentacular\nsustentaculum\nsustentation\nsustentational\nsustentative\nsustentator\nsustention\nsustentive\nsustentor\nSusu\nsusu\nSusuhunan\nSusuidae\nSusumu\nsusurr\nsusurrant\nsusurrate\nsusurration\nsusurringly\nsusurrous\nsusurrus\nSutaio\nsuterbery\nsuther\nSutherlandia\nsutile\nsutler\nsutlerage\nsutleress\nsutlership\nsutlery\nSuto\nsutor\nsutorial\nsutorian\nsutorious\nsutra\nSuttapitaka\nsuttee\nsutteeism\nsutten\nsuttin\nsuttle\nSutu\nsutural\nsuturally\nsuturation\nsuture\nSuu\nsuum\nSuwandi\nsuwarro\nsuwe\nSuyog\nsuz\nSuzan\nSuzanne\nsuzerain\nsuzeraine\nsuzerainship\nsuzerainty\nSuzy\nSvan\nSvanetian\nSvanish\nSvante\nSvantovit\nsvarabhakti\nsvarabhaktic\nSvarloka\nsvelte\nSvetambara\nsviatonosite\nswa\nSwab\nswab\nswabber\nswabberly\nswabble\nSwabian\nswack\nswacken\nswacking\nswad\nswaddle\nswaddlebill\nswaddler\nswaddling\nswaddy\nSwadeshi\nSwadeshism\nswag\nswagbellied\nswagbelly\nswage\nswager\nswagger\nswaggerer\nswaggering\nswaggeringly\nswaggie\nswaggy\nswaglike\nswagman\nswagsman\nSwahilese\nSwahili\nSwahilian\nSwahilize\nswaimous\nswain\nswainish\nswainishness\nswainship\nSwainsona\nswainsona\nswaird\nswale\nswaler\nswaling\nswalingly\nswallet\nswallo\nswallow\nswallowable\nswallower\nswallowlike\nswallowling\nswallowpipe\nswallowtail\nswallowwort\nswam\nswami\nswamp\nswampable\nswampberry\nswamper\nswampish\nswampishness\nswampland\nswampside\nswampweed\nswampwood\nswampy\nSwamy\nswan\nswandown\nswanflower\nswang\nswangy\nswanherd\nswanhood\nswanimote\nswank\nswanker\nswankily\nswankiness\nswanking\nswanky\nswanlike\nswanmark\nswanmarker\nswanmarking\nswanneck\nswannecked\nswanner\nswannery\nswannish\nswanny\nswanskin\nSwantevit\nswanweed\nswanwort\nswap\nswape\nswapper\nswapping\nswaraj\nswarajism\nswarajist\nswarbie\nsward\nswardy\nsware\nswarf\nswarfer\nswarm\nswarmer\nswarming\nswarmy\nswarry\nswart\nswartback\nswarth\nswarthily\nswarthiness\nswarthness\nswarthy\nswartish\nswartly\nswartness\nswartrutter\nswartrutting\nswarty\nSwartzbois\nSwartzia\nswarve\nswash\nswashbuckle\nswashbuckler\nswashbucklerdom\nswashbucklering\nswashbucklery\nswashbuckling\nswasher\nswashing\nswashway\nswashwork\nswashy\nswastika\nswastikaed\nSwat\nswat\nswatch\nSwatchel\nswatcher\nswatchway\nswath\nswathable\nswathband\nswathe\nswatheable\nswather\nswathy\nSwati\nSwatow\nswatter\nswattle\nswaver\nsway\nswayable\nswayed\nswayer\nswayful\nswaying\nswayingly\nswayless\nSwazi\nSwaziland\nsweal\nsweamish\nswear\nswearer\nswearingly\nswearword\nsweat\nsweatband\nsweatbox\nsweated\nsweater\nsweatful\nsweath\nsweatily\nsweatiness\nsweating\nsweatless\nsweatproof\nsweatshop\nsweatweed\nsweaty\nSwede\nSwedenborgian\nSwedenborgianism\nSwedenborgism\nswedge\nSwedish\nsweeny\nsweep\nsweepable\nsweepage\nsweepback\nsweepboard\nsweepdom\nsweeper\nsweeperess\nsweepforward\nsweeping\nsweepingly\nsweepingness\nsweepings\nsweepstake\nsweepwasher\nsweepwashings\nsweepy\nsweer\nsweered\nsweet\nsweetberry\nsweetbread\nsweetbrier\nsweetbriery\nsweeten\nsweetener\nsweetening\nsweetfish\nsweetful\nsweetheart\nsweetheartdom\nsweethearted\nsweetheartedness\nsweethearting\nsweetheartship\nsweetie\nsweeting\nsweetish\nsweetishly\nsweetishness\nsweetleaf\nsweetless\nsweetlike\nsweetling\nsweetly\nsweetmaker\nsweetmeat\nsweetmouthed\nsweetness\nsweetroot\nsweetshop\nsweetsome\nsweetsop\nsweetwater\nsweetweed\nsweetwood\nsweetwort\nsweety\nswego\nswelchie\nswell\nswellage\nswelldom\nswelldoodle\nswelled\nsweller\nswellfish\nswelling\nswellish\nswellishness\nswellmobsman\nswellness\nswelltoad\nswelly\nswelp\nswelt\nswelter\nsweltering\nswelteringly\nswelth\nsweltry\nswelty\nswep\nswept\nswerd\nSwertia\nswerve\nswerveless\nswerver\nswervily\nswick\nswidge\nSwietenia\nswift\nswiften\nswifter\nswiftfoot\nswiftlet\nswiftlike\nswiftness\nswifty\nswig\nswigger\nswiggle\nswile\nswill\nswillbowl\nswiller\nswilltub\nswim\nswimmable\nswimmer\nswimmeret\nswimmily\nswimminess\nswimming\nswimmingly\nswimmingness\nswimmist\nswimmy\nswimsuit\nswimy\nSwinburnesque\nSwinburnian\nswindle\nswindleable\nswindledom\nswindler\nswindlership\nswindlery\nswindling\nswindlingly\nswine\nswinebread\nswinecote\nswinehead\nswineherd\nswineherdship\nswinehood\nswinehull\nswinelike\nswinely\nswinepipe\nswinery\nswinestone\nswinesty\nswiney\nswing\nswingable\nswingback\nswingdevil\nswingdingle\nswinge\nswingeing\nswinger\nswinging\nswingingly\nSwingism\nswingle\nswinglebar\nswingletail\nswingletree\nswingstock\nswingtree\nswingy\nswinish\nswinishly\nswinishness\nswink\nswinney\nswipe\nswiper\nswipes\nswiple\nswipper\nswipy\nswird\nswire\nswirl\nswirlingly\nswirly\nswirring\nswish\nswisher\nswishing\nswishingly\nswishy\nSwiss\nswiss\nSwissess\nswissing\nswitch\nswitchback\nswitchbacker\nswitchboard\nswitched\nswitchel\nswitcher\nswitchgear\nswitching\nswitchkeeper\nswitchlike\nswitchman\nswitchy\nswitchyard\nswith\nswithe\nswithen\nswither\nSwithin\nSwitzer\nSwitzeress\nswivel\nswiveled\nswiveleye\nswiveleyed\nswivellike\nswivet\nswivetty\nswiz\nswizzle\nswizzler\nswob\nswollen\nswollenly\nswollenness\nswom\nswonken\nswoon\nswooned\nswooning\nswooningly\nswoony\nswoop\nswooper\nswoosh\nsword\nswordbill\nswordcraft\nswordfish\nswordfisherman\nswordfishery\nswordfishing\nswordick\nswording\nswordless\nswordlet\nswordlike\nswordmaker\nswordmaking\nswordman\nswordmanship\nswordplay\nswordplayer\nswordproof\nswordsman\nswordsmanship\nswordsmith\nswordster\nswordstick\nswordswoman\nswordtail\nswordweed\nswore\nsworn\nswosh\nswot\nswotter\nswounds\nswow\nswum\nswung\nswungen\nswure\nsyagush\nsybarism\nsybarist\nSybarital\nSybaritan\nSybarite\nSybaritic\nSybaritical\nSybaritically\nSybaritish\nsybaritism\nSybil\nsybotic\nsybotism\nsycamine\nsycamore\nsyce\nsycee\nsychnocarpous\nsycock\nsycoma\nsycomancy\nSycon\nSyconaria\nsyconarian\nsyconate\nSycones\nsyconid\nSyconidae\nsyconium\nsyconoid\nsyconus\nsycophancy\nsycophant\nsycophantic\nsycophantical\nsycophantically\nsycophantish\nsycophantishly\nsycophantism\nsycophantize\nsycophantry\nsycosiform\nsycosis\nSyd\nSydneian\nSydneyite\nsye\nSyed\nsyenite\nsyenitic\nsyenodiorite\nsyenogabbro\nsylid\nsyllab\nsyllabarium\nsyllabary\nsyllabatim\nsyllabation\nsyllabe\nsyllabi\nsyllabic\nsyllabical\nsyllabically\nsyllabicate\nsyllabication\nsyllabicness\nsyllabification\nsyllabify\nsyllabism\nsyllabize\nsyllable\nsyllabled\nsyllabus\nsyllepsis\nsylleptic\nsylleptical\nsylleptically\nSyllidae\nsyllidian\nSyllis\nsylloge\nsyllogism\nsyllogist\nsyllogistic\nsyllogistical\nsyllogistically\nsyllogistics\nsyllogization\nsyllogize\nsyllogizer\nsylph\nsylphic\nsylphid\nsylphidine\nsylphish\nsylphize\nsylphlike\nSylphon\nsylphy\nsylva\nsylvae\nsylvage\nSylvan\nsylvan\nsylvanesque\nsylvanite\nsylvanitic\nsylvanity\nsylvanize\nsylvanly\nsylvanry\nsylvate\nsylvatic\nSylvester\nsylvester\nsylvestral\nsylvestrene\nSylvestrian\nsylvestrian\nSylvestrine\nSylvia\nSylvian\nsylvic\nSylvicolidae\nsylvicoline\nSylviidae\nSylviinae\nsylviine\nsylvine\nsylvinite\nsylvite\nsymbasic\nsymbasical\nsymbasically\nsymbasis\nsymbiogenesis\nsymbiogenetic\nsymbiogenetically\nsymbion\nsymbiont\nsymbiontic\nsymbionticism\nsymbiosis\nsymbiot\nsymbiote\nsymbiotic\nsymbiotically\nsymbiotics\nsymbiotism\nsymbiotrophic\nsymblepharon\nsymbol\nsymbolaeography\nsymbolater\nsymbolatrous\nsymbolatry\nsymbolic\nsymbolical\nsymbolically\nsymbolicalness\nsymbolicly\nsymbolics\nsymbolism\nsymbolist\nsymbolistic\nsymbolistical\nsymbolistically\nsymbolization\nsymbolize\nsymbolizer\nsymbolofideism\nsymbological\nsymbologist\nsymbolography\nsymbology\nsymbololatry\nsymbolology\nsymbolry\nsymbouleutic\nsymbranch\nSymbranchia\nsymbranchiate\nsymbranchoid\nsymbranchous\nsymmachy\nsymmedian\nsymmelia\nsymmelian\nsymmelus\nsymmetalism\nsymmetral\nsymmetric\nsymmetrical\nsymmetricality\nsymmetrically\nsymmetricalness\nsymmetrist\nsymmetrization\nsymmetrize\nsymmetroid\nsymmetrophobia\nsymmetry\nsymmorphic\nsymmorphism\nsympalmograph\nsympathectomize\nsympathectomy\nsympathetectomy\nsympathetic\nsympathetical\nsympathetically\nsympatheticism\nsympatheticity\nsympatheticness\nsympatheticotonia\nsympatheticotonic\nsympathetoblast\nsympathicoblast\nsympathicotonia\nsympathicotonic\nsympathicotripsy\nsympathism\nsympathist\nsympathize\nsympathizer\nsympathizing\nsympathizingly\nsympathoblast\nsympatholysis\nsympatholytic\nsympathomimetic\nsympathy\nsympatric\nsympatry\nSympetalae\nsympetalous\nSymphalangus\nsymphenomena\nsymphenomenal\nsymphile\nsymphilic\nsymphilism\nsymphilous\nsymphily\nsymphogenous\nsymphonetic\nsymphonia\nsymphonic\nsymphonically\nsymphonion\nsymphonious\nsymphoniously\nsymphonist\nsymphonize\nsymphonous\nsymphony\nSymphoricarpos\nsymphoricarpous\nsymphrase\nsymphronistic\nsymphyantherous\nsymphycarpous\nSymphyla\nsymphylan\nsymphyllous\nsymphylous\nsymphynote\nsymphyogenesis\nsymphyogenetic\nsymphyostemonous\nsymphyseal\nsymphyseotomy\nsymphysial\nsymphysian\nsymphysic\nsymphysion\nsymphysiotomy\nsymphysis\nsymphysodactylia\nsymphysotomy\nsymphysy\nSymphyta\nsymphytic\nsymphytically\nsymphytism\nsymphytize\nSymphytum\nsympiesometer\nsymplasm\nsymplectic\nSymplegades\nsymplesite\nSymplocaceae\nsymplocaceous\nSymplocarpus\nsymploce\nSymplocos\nsympode\nsympodia\nsympodial\nsympodially\nsympodium\nsympolity\nsymposia\nsymposiac\nsymposiacal\nsymposial\nsymposiarch\nsymposiast\nsymposiastic\nsymposion\nsymposium\nsymptom\nsymptomatic\nsymptomatical\nsymptomatically\nsymptomatics\nsymptomatize\nsymptomatography\nsymptomatological\nsymptomatologically\nsymptomatology\nsymptomical\nsymptomize\nsymptomless\nsymptosis\nsymtomology\nsynacme\nsynacmic\nsynacmy\nsynactic\nsynadelphite\nsynaeresis\nsynagogal\nsynagogian\nsynagogical\nsynagogism\nsynagogist\nsynagogue\nsynalgia\nsynalgic\nsynallactic\nsynallagmatic\nsynaloepha\nsynanastomosis\nsynange\nsynangia\nsynangial\nsynangic\nsynangium\nsynanthema\nsynantherological\nsynantherologist\nsynantherology\nsynantherous\nsynanthesis\nsynanthetic\nsynanthic\nsynanthous\nsynanthrose\nsynanthy\nsynaphea\nsynaposematic\nsynapse\nsynapses\nSynapsida\nsynapsidan\nsynapsis\nsynaptai\nsynaptase\nsynapte\nsynaptene\nSynaptera\nsynapterous\nsynaptic\nsynaptical\nsynaptically\nsynapticula\nsynapticulae\nsynapticular\nsynapticulate\nsynapticulum\nSynaptosauria\nsynaptychus\nsynarchical\nsynarchism\nsynarchy\nsynarmogoid\nSynarmogoidea\nsynarquism\nsynartesis\nsynartete\nsynartetic\nsynarthrodia\nsynarthrodial\nsynarthrodially\nsynarthrosis\nSynascidiae\nsynascidian\nsynastry\nsynaxar\nsynaxarion\nsynaxarist\nsynaxarium\nsynaxary\nsynaxis\nsync\nSyncarida\nsyncarp\nsyncarpia\nsyncarpium\nsyncarpous\nsyncarpy\nsyncategorematic\nsyncategorematical\nsyncategorematically\nsyncategoreme\nsyncephalic\nsyncephalus\nsyncerebral\nsyncerebrum\nsynch\nsynchitic\nsynchondoses\nsynchondrosial\nsynchondrosially\nsynchondrosis\nsynchondrotomy\nsynchoresis\nsynchro\nsynchroflash\nsynchromesh\nsynchronal\nsynchrone\nsynchronic\nsynchronical\nsynchronically\nsynchronism\nsynchronistic\nsynchronistical\nsynchronistically\nsynchronizable\nsynchronization\nsynchronize\nsynchronized\nsynchronizer\nsynchronograph\nsynchronological\nsynchronology\nsynchronous\nsynchronously\nsynchronousness\nsynchrony\nsynchroscope\nsynchrotron\nsynchysis\nSynchytriaceae\nSynchytrium\nsyncladous\nsynclastic\nsynclinal\nsynclinally\nsyncline\nsynclinical\nsynclinore\nsynclinorial\nsynclinorian\nsynclinorium\nsynclitic\nsyncliticism\nsynclitism\nsyncoelom\nsyncopal\nsyncopate\nsyncopated\nsyncopation\nsyncopator\nsyncope\nsyncopic\nsyncopism\nsyncopist\nsyncopize\nsyncotyledonous\nsyncracy\nsyncraniate\nsyncranterian\nsyncranteric\nsyncrasy\nsyncretic\nsyncretical\nsyncreticism\nsyncretion\nsyncretism\nsyncretist\nsyncretistic\nsyncretistical\nsyncretize\nsyncrisis\nSyncrypta\nsyncryptic\nsyncytia\nsyncytial\nsyncytioma\nsyncytiomata\nsyncytium\nsyndactyl\nsyndactylia\nsyndactylic\nsyndactylism\nsyndactylous\nsyndactyly\nsyndectomy\nsynderesis\nsyndesis\nsyndesmectopia\nsyndesmitis\nsyndesmography\nsyndesmology\nsyndesmoma\nSyndesmon\nsyndesmoplasty\nsyndesmorrhaphy\nsyndesmosis\nsyndesmotic\nsyndesmotomy\nsyndetic\nsyndetical\nsyndetically\nsyndic\nsyndical\nsyndicalism\nsyndicalist\nsyndicalistic\nsyndicalize\nsyndicate\nsyndicateer\nsyndication\nsyndicator\nsyndicship\nsyndoc\nsyndrome\nsyndromic\nsyndyasmian\nSyndyoceras\nsyne\nsynecdoche\nsynecdochic\nsynecdochical\nsynecdochically\nsynecdochism\nsynechia\nsynechiological\nsynechiology\nsynechological\nsynechology\nsynechotomy\nsynechthran\nsynechthry\nsynecology\nsynecphonesis\nsynectic\nsynecticity\nSynedra\nsynedral\nSynedria\nsynedria\nsynedrial\nsynedrian\nSynedrion\nsynedrion\nSynedrium\nsynedrium\nsynedrous\nsyneidesis\nsynema\nsynemmenon\nsynenergistic\nsynenergistical\nsynenergistically\nsynentognath\nSynentognathi\nsynentognathous\nsyneresis\nsynergastic\nsynergetic\nsynergia\nsynergic\nsynergically\nsynergid\nsynergidae\nsynergidal\nsynergism\nsynergist\nsynergistic\nsynergistical\nsynergistically\nsynergize\nsynergy\nsynerize\nsynesis\nsynesthesia\nsynesthetic\nsynethnic\nsyngamic\nsyngamous\nsyngamy\nSyngenesia\nsyngenesian\nsyngenesious\nsyngenesis\nsyngenetic\nsyngenic\nsyngenism\nsyngenite\nSyngnatha\nSyngnathi\nsyngnathid\nSyngnathidae\nsyngnathoid\nsyngnathous\nSyngnathus\nsyngraph\nsynizesis\nsynkaryon\nsynkatathesis\nsynkinesia\nsynkinesis\nsynkinetic\nsynneurosis\nsynneusis\nsynochoid\nsynochus\nsynocreate\nsynod\nsynodal\nsynodalian\nsynodalist\nsynodally\nsynodical\nsynodically\nsynodist\nsynodite\nsynodontid\nSynodontidae\nsynodontoid\nsynodsman\nSynodus\nsynoecete\nsynoeciosis\nsynoecious\nsynoeciously\nsynoeciousness\nsynoecism\nsynoecize\nsynoecy\nsynoicous\nsynomosy\nsynonym\nsynonymatic\nsynonymic\nsynonymical\nsynonymicon\nsynonymics\nsynonymist\nsynonymity\nsynonymize\nsynonymous\nsynonymously\nsynonymousness\nsynonymy\nsynophthalmus\nsynopses\nsynopsis\nsynopsize\nsynopsy\nsynoptic\nsynoptical\nsynoptically\nSynoptist\nsynoptist\nSynoptistic\nsynorchidism\nsynorchism\nsynorthographic\nsynosteology\nsynosteosis\nsynostose\nsynostosis\nsynostotic\nsynostotical\nsynostotically\nsynousiacs\nsynovectomy\nsynovia\nsynovial\nsynovially\nsynoviparous\nsynovitic\nsynovitis\nsynpelmous\nsynrhabdosome\nsynsacral\nsynsacrum\nsynsepalous\nsynspermous\nsynsporous\nsyntactic\nsyntactical\nsyntactically\nsyntactician\nsyntactics\nsyntagma\nsyntan\nsyntasis\nsyntax\nsyntaxis\nsyntaxist\nsyntechnic\nsyntectic\nsyntelome\nsyntenosis\nsynteresis\nsyntexis\nsyntheme\nsynthermal\nsyntheses\nsynthesis\nsynthesism\nsynthesist\nsynthesization\nsynthesize\nsynthesizer\nsynthete\nsynthetic\nsynthetical\nsynthetically\nsyntheticism\nsynthetism\nsynthetist\nsynthetization\nsynthetize\nsynthetizer\nsynthol\nsynthroni\nsynthronoi\nsynthronos\nsynthronus\nsyntomia\nsyntomy\nsyntone\nsyntonic\nsyntonical\nsyntonically\nsyntonin\nsyntonization\nsyntonize\nsyntonizer\nsyntonolydian\nsyntonous\nsyntony\nsyntripsis\nsyntrope\nsyntrophic\nsyntropic\nsyntropical\nsyntropy\nsyntype\nsyntypic\nsyntypicism\nSynura\nsynusia\nsynusiast\nsyodicon\nsypher\nsyphilide\nsyphilidography\nsyphilidologist\nsyphiliphobia\nsyphilis\nsyphilitic\nsyphilitically\nsyphilization\nsyphilize\nsyphiloderm\nsyphilodermatous\nsyphilogenesis\nsyphilogeny\nsyphilographer\nsyphilography\nsyphiloid\nsyphilologist\nsyphilology\nsyphiloma\nsyphilomatous\nsyphilophobe\nsyphilophobia\nsyphilophobic\nsyphilopsychosis\nsyphilosis\nsyphilous\nSyracusan\nsyre\nSyriac\nSyriacism\nSyriacist\nSyrian\nSyrianic\nSyrianism\nSyrianize\nSyriarch\nSyriasm\nsyringa\nsyringadenous\nsyringe\nsyringeal\nsyringeful\nsyringes\nsyringin\nsyringitis\nsyringium\nsyringocoele\nsyringomyelia\nsyringomyelic\nsyringotome\nsyringotomy\nsyrinx\nSyriologist\nSyrma\nsyrma\nSyrmian\nSyrnium\nSyrophoenician\nsyrphian\nsyrphid\nSyrphidae\nsyrt\nsyrtic\nSyrtis\nsyrup\nsyruped\nsyruper\nsyruplike\nsyrupy\nSyryenian\nsyssarcosis\nsyssel\nsysselman\nsyssiderite\nsyssitia\nsyssition\nsystaltic\nsystasis\nsystatic\nsystem\nsystematic\nsystematical\nsystematicality\nsystematically\nsystematician\nsystematicness\nsystematics\nsystematism\nsystematist\nsystematization\nsystematize\nsystematizer\nsystematology\nsystemed\nsystemic\nsystemically\nsystemist\nsystemizable\nsystemization\nsystemize\nsystemizer\nsystemless\nsystemproof\nsystemwise\nsystilius\nsystolated\nsystole\nsystolic\nsystyle\nsystylous\nSyun\nsyzygetic\nsyzygetically\nsyzygial\nsyzygium\nsyzygy\nszaibelyite\nSzekler\nszlachta\nszopelka\nT\nt\nta\ntaa\nTaal\nTaalbond\ntaar\nTab\ntab\ntabacin\ntabacosis\ntabacum\ntabanid\nTabanidae\ntabaniform\ntabanuco\nTabanus\ntabard\ntabarded\ntabaret\nTabasco\ntabasheer\ntabashir\ntabaxir\ntabbarea\ntabber\ntabbinet\nTabby\ntabby\nTabebuia\ntabefaction\ntabefy\ntabella\nTabellaria\nTabellariaceae\ntabellion\ntaberdar\ntaberna\ntabernacle\ntabernacler\ntabernacular\nTabernaemontana\ntabernariae\ntabes\ntabescence\ntabescent\ntabet\ntabetic\ntabetiform\ntabetless\ntabic\ntabid\ntabidly\ntabidness\ntabific\ntabifical\ntabinet\nTabira\nTabitha\ntabitude\ntabla\ntablature\ntable\ntableau\ntableaux\ntablecloth\ntableclothwise\ntableclothy\ntabled\ntablefellow\ntablefellowship\ntableful\ntableity\ntableland\ntableless\ntablelike\ntablemaid\ntablemaker\ntablemaking\ntableman\ntablemate\ntabler\ntables\ntablespoon\ntablespoonful\ntablet\ntabletary\ntableware\ntablewise\ntabling\ntablinum\nTabloid\ntabloid\ntabog\ntaboo\ntabooism\ntabooist\ntaboot\ntaboparalysis\ntaboparesis\ntaboparetic\ntabophobia\ntabor\ntaborer\ntaboret\ntaborin\nTaborite\ntabour\ntabourer\ntabouret\ntabret\nTabriz\ntabu\ntabula\ntabulable\ntabular\ntabulare\ntabularium\ntabularization\ntabularize\ntabularly\ntabulary\nTabulata\ntabulate\ntabulated\ntabulation\ntabulator\ntabulatory\ntabule\ntabuliform\ntabut\ntacahout\ntacamahac\nTacana\nTacanan\nTacca\nTaccaceae\ntaccaceous\ntaccada\ntach\nTachardia\nTachardiinae\ntache\ntacheless\ntacheography\ntacheometer\ntacheometric\ntacheometry\ntacheture\ntachhydrite\ntachibana\nTachina\nTachinaria\ntachinarian\ntachinid\nTachinidae\ntachiol\ntachistoscope\ntachistoscopic\ntachogram\ntachograph\ntachometer\ntachometry\ntachoscope\ntachycardia\ntachycardiac\ntachygen\ntachygenesis\ntachygenetic\ntachygenic\ntachyglossal\ntachyglossate\nTachyglossidae\nTachyglossus\ntachygraph\ntachygrapher\ntachygraphic\ntachygraphical\ntachygraphically\ntachygraphist\ntachygraphometer\ntachygraphometry\ntachygraphy\ntachyhydrite\ntachyiatry\ntachylalia\ntachylite\ntachylyte\ntachylytic\ntachymeter\ntachymetric\ntachymetry\ntachyphagia\ntachyphasia\ntachyphemia\ntachyphrasia\ntachyphrenia\ntachypnea\ntachyscope\ntachyseism\ntachysterol\ntachysystole\ntachythanatous\ntachytomy\ntachytype\ntacit\nTacitean\ntacitly\ntacitness\ntaciturn\ntaciturnist\ntaciturnity\ntaciturnly\ntack\ntacker\ntacket\ntackety\ntackey\ntackiness\ntacking\ntackingly\ntackle\ntackled\ntackleless\ntackleman\ntackler\ntackless\ntackling\ntackproof\ntacksman\ntacky\ntaclocus\ntacmahack\ntacnode\nTaconian\nTaconic\ntaconite\ntacso\nTacsonia\ntact\ntactable\ntactful\ntactfully\ntactfulness\ntactic\ntactical\ntactically\ntactician\ntactics\ntactile\ntactilist\ntactility\ntactilogical\ntactinvariant\ntaction\ntactite\ntactive\ntactless\ntactlessly\ntactlessness\ntactometer\ntactor\ntactosol\ntactual\ntactualist\ntactuality\ntactually\ntactus\ntacuacine\nTaculli\nTad\ntad\ntade\nTadjik\nTadousac\ntadpole\ntadpoledom\ntadpolehood\ntadpolelike\ntadpolism\ntae\ntael\ntaen\ntaenia\ntaeniacidal\ntaeniacide\nTaeniada\ntaeniafuge\ntaenial\ntaenian\ntaeniasis\nTaeniata\ntaeniate\ntaenicide\nTaenidia\ntaenidium\ntaeniform\ntaenifuge\ntaeniiform\nTaeniobranchia\ntaeniobranchiate\nTaeniodonta\nTaeniodontia\nTaeniodontidae\nTaenioglossa\ntaenioglossate\ntaenioid\ntaeniosome\nTaeniosomi\ntaeniosomous\ntaenite\ntaennin\nTaetsia\ntaffarel\ntafferel\ntaffeta\ntaffety\ntaffle\ntaffrail\nTaffy\ntaffy\ntaffylike\ntaffymaker\ntaffymaking\ntaffywise\ntafia\ntafinagh\ntaft\ntafwiz\ntag\nTagabilis\nTagakaolo\nTagal\nTagala\nTagalize\nTagalo\nTagalog\ntagasaste\nTagassu\nTagassuidae\ntagatose\nTagaur\nTagbanua\ntagboard\nTagetes\ntagetol\ntagetone\ntagged\ntagger\ntaggle\ntaggy\nTaghlik\ntagilite\nTagish\ntaglet\nTagliacotian\nTagliacozzian\ntaglike\ntaglock\ntagrag\ntagraggery\ntagsore\ntagtail\ntagua\ntaguan\nTagula\ntagwerk\ntaha\nTahami\ntaheen\ntahil\ntahin\nTahiti\nTahitian\ntahkhana\nTahltan\ntahr\ntahseeldar\ntahsil\ntahsildar\nTahsin\ntahua\nTai\ntai\ntaiaha\ntaich\ntaiga\ntaigle\ntaiglesome\ntaihoa\ntaikhana\ntail\ntailage\ntailband\ntailboard\ntailed\ntailender\ntailer\ntailet\ntailfirst\ntailflower\ntailforemost\ntailge\ntailhead\ntailing\ntailings\ntaille\ntailless\ntaillessly\ntaillessness\ntaillie\ntaillight\ntaillike\ntailor\ntailorage\ntailorbird\ntailorcraft\ntailordom\ntailoress\ntailorhood\ntailoring\ntailorism\ntailorization\ntailorize\ntailorless\ntailorlike\ntailorly\ntailorman\ntailorship\ntailorwise\ntailory\ntailpiece\ntailpin\ntailpipe\ntailrace\ntailsman\ntailstock\nTailte\ntailward\ntailwards\ntailwise\ntaily\ntailzee\ntailzie\ntaimen\ntaimyrite\ntain\nTainan\nTaino\ntaint\ntaintable\ntaintless\ntaintlessly\ntaintlessness\ntaintment\ntaintor\ntaintproof\ntainture\ntaintworm\nTainui\ntaipan\nTaipi\nTaiping\ntaipo\ntairge\ntairger\ntairn\ntaisch\ntaise\nTaisho\ntaissle\ntaistrel\ntaistril\nTait\ntait\ntaiver\ntaivers\ntaivert\nTaiwanhemp\nTaiyal\ntaj\nTajik\ntakable\ntakamaka\nTakao\ntakar\nTakayuki\ntake\ntakedown\ntakedownable\ntakeful\nTakelma\ntaken\ntaker\nTakeuchi\nTakhaar\nTakhtadjy\nTakilman\ntakin\ntaking\ntakingly\ntakingness\ntakings\nTakitumu\ntakosis\ntakt\nTaku\ntaky\ntakyr\nTal\ntal\ntala\ntalabon\ntalahib\nTalaing\ntalaje\ntalak\ntalalgia\nTalamanca\nTalamancan\ntalanton\ntalao\ntalapoin\ntalar\ntalari\ntalaria\ntalaric\ntalayot\ntalbot\ntalbotype\ntalc\ntalcer\nTalcher\ntalcky\ntalclike\ntalcochlorite\ntalcoid\ntalcomicaceous\ntalcose\ntalcous\ntalcum\ntald\ntale\ntalebearer\ntalebearing\ntalebook\ntalecarrier\ntalecarrying\ntaled\ntaleful\nTalegallinae\nTalegallus\ntalemaster\ntalemonger\ntalemongering\ntalent\ntalented\ntalentless\ntalepyet\ntaler\ntales\ntalesman\ntaleteller\ntaletelling\ntali\nTaliacotian\ntaliage\ntaliation\ntaliera\ntaligrade\nTalinum\ntalion\ntalionic\ntalipat\ntaliped\ntalipedic\ntalipes\ntalipomanus\ntalipot\ntalis\ntalisay\nTalishi\ntalisman\ntalismanic\ntalismanical\ntalismanically\ntalismanist\ntalite\nTalitha\ntalitol\ntalk\ntalkability\ntalkable\ntalkathon\ntalkative\ntalkatively\ntalkativeness\ntalker\ntalkfest\ntalkful\ntalkie\ntalkiness\ntalking\ntalkworthy\ntalky\ntall\ntallage\ntallageability\ntallageable\ntallboy\ntallegalane\ntaller\ntallero\ntalles\ntallet\ntalliable\ntalliage\ntalliar\ntalliate\ntallier\ntallis\ntallish\ntallit\ntallith\ntallness\ntalloel\ntallote\ntallow\ntallowberry\ntallower\ntallowiness\ntallowing\ntallowish\ntallowlike\ntallowmaker\ntallowmaking\ntallowman\ntallowroot\ntallowweed\ntallowwood\ntallowy\ntallwood\ntally\ntallyho\ntallyman\ntallymanship\ntallywag\ntallywalka\ntallywoman\ntalma\ntalmouse\nTalmud\nTalmudic\nTalmudical\nTalmudism\nTalmudist\nTalmudistic\nTalmudistical\nTalmudization\nTalmudize\ntalocalcaneal\ntalocalcanean\ntalocrural\ntalofibular\ntalon\ntalonavicular\ntaloned\ntalonic\ntalonid\ntaloscaphoid\ntalose\ntalotibial\nTalpa\ntalpacoti\ntalpatate\ntalpetate\ntalpicide\ntalpid\nTalpidae\ntalpiform\ntalpify\ntalpine\ntalpoid\ntalthib\nTaltushtuntude\nTaluche\nTaluhet\ntaluk\ntaluka\ntalukdar\ntalukdari\ntalus\ntaluto\ntalwar\ntalwood\nTalyshin\ntam\nTama\ntamability\ntamable\ntamableness\ntamably\nTamaceae\nTamachek\ntamacoare\ntamale\nTamanac\nTamanaca\nTamanaco\ntamandu\ntamandua\ntamanoas\ntamanoir\ntamanowus\ntamanu\nTamara\ntamara\ntamarack\ntamaraite\ntamarao\nTamaricaceae\ntamaricaceous\ntamarin\ntamarind\nTamarindus\ntamarisk\nTamarix\nTamaroa\ntamas\ntamasha\nTamashek\nTamaulipecan\ntambac\ntambaroora\ntamber\ntambo\ntamboo\nTambookie\ntambookie\ntambor\nTambouki\ntambour\ntamboura\ntambourer\ntambouret\ntambourgi\ntambourin\ntambourinade\ntambourine\ntambourist\ntambreet\nTambuki\ntamburan\ntamburello\nTame\ntame\ntamehearted\ntameheartedness\ntamein\ntameless\ntamelessly\ntamelessness\ntamely\ntameness\ntamer\nTamerlanism\nTamias\ntamidine\nTamil\nTamilian\nTamilic\ntamis\ntamise\ntamlung\nTammanial\nTammanize\nTammany\nTammanyism\nTammanyite\nTammanyize\ntammie\ntammock\nTammy\ntammy\nTamonea\nTamoyo\ntamp\ntampala\ntampan\ntampang\ntamper\ntamperer\ntamperproof\ntampin\ntamping\ntampion\ntampioned\ntampon\ntamponade\ntamponage\ntamponment\ntampoon\nTamul\nTamulian\nTamulic\nTamus\nTamworth\nTamzine\ntan\ntana\ntanacetin\ntanacetone\nTanacetum\ntanacetyl\ntanach\ntanager\nTanagra\nTanagraean\nTanagridae\ntanagrine\ntanagroid\nTanaidacea\ntanaist\ntanak\nTanaka\nTanala\ntanan\ntanbark\ntanbur\ntancel\nTanchelmian\ntanchoir\ntandan\ntandem\ntandemer\ntandemist\ntandemize\ntandemwise\ntandle\ntandour\nTandy\ntane\ntanekaha\nTang\ntang\ntanga\nTangaloa\ntangalung\ntangantangan\nTangaridae\nTangaroa\nTangaroan\ntanged\ntangeite\ntangelo\ntangence\ntangency\ntangent\ntangental\ntangentally\ntangential\ntangentiality\ntangentially\ntangently\ntanger\nTangerine\ntangfish\ntangham\ntanghan\ntanghin\nTanghinia\ntanghinin\ntangi\ntangibile\ntangibility\ntangible\ntangibleness\ntangibly\ntangie\nTangier\ntangilin\nTangipahoa\ntangka\ntanglad\ntangle\ntangleberry\ntanglefish\ntanglefoot\ntanglement\ntangleproof\ntangler\ntangleroot\ntanglesome\ntangless\ntanglewrack\ntangling\ntanglingly\ntangly\ntango\ntangoreceptor\ntangram\ntangs\ntangue\ntanguile\ntangum\ntangun\nTangut\ntangy\ntanh\ntanha\ntanhouse\ntania\ntanica\ntanier\ntanist\ntanistic\ntanistry\ntanistship\nTanite\nTanitic\ntanjib\ntanjong\ntank\ntanka\ntankage\ntankah\ntankard\ntanked\ntanker\ntankerabogus\ntankert\ntankette\ntankful\ntankle\ntankless\ntanklike\ntankmaker\ntankmaking\ntankman\ntankodrome\ntankroom\ntankwise\ntanling\ntannable\ntannage\ntannaic\ntannaim\ntannaitic\ntannalbin\ntannase\ntannate\ntanned\ntanner\ntannery\ntannic\ntannide\ntanniferous\ntannin\ntannined\ntanning\ntanninlike\ntannocaffeic\ntannogallate\ntannogallic\ntannogelatin\ntannogen\ntannoid\ntannometer\ntannyl\nTano\ntanoa\nTanoan\ntanproof\ntanquam\nTanquelinian\ntanquen\ntanrec\ntanstuff\ntansy\ntantadlin\ntantafflin\ntantalate\nTantalean\nTantalian\nTantalic\ntantalic\ntantaliferous\ntantalifluoride\ntantalite\ntantalization\ntantalize\ntantalizer\ntantalizingly\ntantalizingness\ntantalofluoride\ntantalum\nTantalus\ntantamount\ntantara\ntantarabobus\ntantarara\ntanti\ntantivy\ntantle\nTantony\ntantra\ntantric\ntantrik\ntantrism\ntantrist\ntantrum\ntantum\ntanwood\ntanworks\nTanya\ntanyard\nTanyoan\nTanystomata\ntanystomatous\ntanystome\ntanzeb\ntanzib\nTanzine\ntanzy\nTao\ntao\nTaoism\nTaoist\nTaoistic\nTaonurus\nTaos\ntaotai\ntaoyin\ntap\nTapa\ntapa\nTapachula\nTapachulteca\ntapacolo\ntapaculo\nTapacura\ntapadera\ntapadero\nTapajo\ntapalo\ntapamaker\ntapamaking\ntapas\ntapasvi\nTape\ntape\nTapeats\ntapeinocephalic\ntapeinocephalism\ntapeinocephaly\ntapeless\ntapelike\ntapeline\ntapemaker\ntapemaking\ntapeman\ntapen\ntaper\ntaperbearer\ntapered\ntaperer\ntapering\ntaperingly\ntaperly\ntapermaker\ntapermaking\ntaperness\ntaperwise\ntapesium\ntapestring\ntapestry\ntapestrylike\ntapet\ntapetal\ntapete\ntapeti\ntapetless\ntapetum\ntapework\ntapeworm\ntaphephobia\ntaphole\ntaphouse\nTaphria\nTaphrina\nTaphrinaceae\ntapia\nTapijulapane\ntapinceophalism\ntapinocephalic\ntapinocephaly\nTapinoma\ntapinophobia\ntapinophoby\ntapinosis\ntapioca\ntapir\nTapiridae\ntapiridian\ntapirine\nTapiro\ntapiroid\nTapirus\ntapis\ntapism\ntapist\ntaplash\ntaplet\nTapleyism\ntapmost\ntapnet\ntapoa\nTaposa\ntapoun\ntappa\ntappable\ntappableness\ntappall\ntappaul\ntappen\ntapper\ntapperer\nTappertitian\ntappet\ntappietoorie\ntapping\ntappoon\nTaprobane\ntaproom\ntaproot\ntaprooted\ntaps\ntapster\ntapsterlike\ntapsterly\ntapstress\ntapu\ntapul\nTapuya\nTapuyan\nTapuyo\ntaqua\ntar\ntara\ntarabooka\ntaraf\ntarafdar\ntarage\nTarahumar\nTarahumara\nTarahumare\nTarahumari\nTarai\ntarairi\ntarakihi\nTaraktogenos\ntaramellite\nTaramembe\nTaranchi\ntarand\nTarandean\nTarandian\ntarantara\ntarantass\ntarantella\ntarantism\ntarantist\ntarantula\ntarantular\ntarantulary\ntarantulated\ntarantulid\nTarantulidae\ntarantulism\ntarantulite\ntarantulous\ntarapatch\ntaraph\ntarapin\nTarapon\nTarasc\nTarascan\nTarasco\ntarassis\ntarata\ntaratah\ntaratantara\ntaratantarize\ntarau\ntaraxacerin\ntaraxacin\nTaraxacum\nTarazed\ntarbadillo\ntarbet\ntarboard\ntarbogan\ntarboggin\ntarboosh\ntarbooshed\ntarboy\ntarbrush\ntarbush\ntarbuttite\nTardenoisian\nTardigrada\ntardigrade\ntardigradous\ntardily\ntardiness\ntarditude\ntardive\ntardle\ntardy\ntare\ntarea\ntarefa\ntarefitch\ntarentala\ntarente\nTarentine\ntarentism\ntarentola\ntarepatch\nTareq\ntarfa\ntarflower\ntarge\ntargeman\ntarger\ntarget\ntargeted\ntargeteer\ntargetlike\ntargetman\nTargum\nTargumic\nTargumical\nTargumist\nTargumistic\nTargumize\nTarheel\nTarheeler\ntarhood\ntari\nTariana\ntarie\ntariff\ntariffable\ntariffication\ntariffism\ntariffist\ntariffite\ntariffize\ntariffless\ntarin\nTariri\ntariric\ntaririnic\ntarish\nTarkalani\nTarkani\ntarkashi\ntarkeean\ntarkhan\ntarlatan\ntarlataned\ntarletan\ntarlike\ntarltonize\nTarmac\ntarmac\ntarman\nTarmi\ntarmined\ntarn\ntarnal\ntarnally\ntarnation\ntarnish\ntarnishable\ntarnisher\ntarnishment\ntarnishproof\ntarnlike\ntarnside\ntaro\ntaroc\ntarocco\ntarok\ntaropatch\ntarot\ntarp\ntarpan\ntarpaulin\ntarpaulinmaker\nTarpeia\nTarpeian\ntarpon\ntarpot\ntarpum\nTarquin\nTarquinish\ntarr\ntarrack\ntarradiddle\ntarradiddler\ntarragon\ntarragona\ntarras\ntarrass\nTarrateen\nTarratine\ntarred\ntarrer\ntarri\ntarriance\ntarrie\ntarrier\ntarrify\ntarrily\ntarriness\ntarrish\ntarrock\ntarrow\ntarry\ntarrying\ntarryingly\ntarryingness\ntars\ntarsadenitis\ntarsal\ntarsale\ntarsalgia\ntarse\ntarsectomy\ntarsectopia\ntarsi\ntarsia\ntarsier\nTarsiidae\ntarsioid\nTarsipedidae\nTarsipedinae\nTarsipes\ntarsitis\nTarsius\ntarsochiloplasty\ntarsoclasis\ntarsomalacia\ntarsome\ntarsometatarsal\ntarsometatarsus\ntarsonemid\nTarsonemidae\nTarsonemus\ntarsophalangeal\ntarsophyma\ntarsoplasia\ntarsoplasty\ntarsoptosis\ntarsorrhaphy\ntarsotarsal\ntarsotibal\ntarsotomy\ntarsus\ntart\ntartago\nTartan\ntartan\ntartana\ntartane\nTartar\ntartar\ntartarated\nTartarean\nTartareous\ntartareous\ntartaret\nTartarian\nTartaric\ntartaric\nTartarin\ntartarish\nTartarism\nTartarization\ntartarization\nTartarize\ntartarize\nTartarized\nTartarlike\ntartarly\nTartarology\ntartarous\ntartarproof\ntartarum\nTartarus\nTartary\ntartemorion\ntarten\ntartish\ntartishly\ntartle\ntartlet\ntartly\ntartness\ntartramate\ntartramic\ntartramide\ntartrate\ntartrated\ntartratoferric\ntartrazine\ntartrazinic\ntartro\ntartronate\ntartronic\ntartronyl\ntartronylurea\ntartrous\ntartryl\ntartrylic\nTartufe\ntartufery\ntartufian\ntartufish\ntartufishly\ntartufism\ntartwoman\nTaruma\nTarumari\ntarve\nTarvia\ntarweed\ntarwhine\ntarwood\ntarworks\ntaryard\nTaryba\nTarzan\nTarzanish\ntasajo\ntascal\ntasco\ntaseometer\ntash\ntasheriff\ntashie\ntashlik\nTashnagist\nTashnakist\ntashreef\ntashrif\nTasian\ntasimeter\ntasimetric\ntasimetry\ntask\ntaskage\ntasker\ntaskit\ntaskless\ntasklike\ntaskmaster\ntaskmastership\ntaskmistress\ntasksetter\ntasksetting\ntaskwork\ntaslet\nTasmanian\ntasmanite\nTass\ntass\ntassago\ntassah\ntassal\ntassard\ntasse\ntassel\ntasseler\ntasselet\ntasselfish\ntassellus\ntasselmaker\ntasselmaking\ntassely\ntasser\ntasset\ntassie\ntassoo\ntastable\ntastableness\ntastably\ntaste\ntasteable\ntasteableness\ntasteably\ntasted\ntasteful\ntastefully\ntastefulness\ntastekin\ntasteless\ntastelessly\ntastelessness\ntasten\ntaster\ntastily\ntastiness\ntasting\ntastingly\ntasty\ntasu\nTat\ntat\nTatar\nTatarian\nTataric\nTatarization\nTatarize\nTatary\ntataupa\ntatbeb\ntatchy\ntate\ntater\nTates\ntath\nTatian\nTatianist\ntatie\ntatinek\ntatler\ntatou\ntatouay\ntatpurusha\nTatsanottine\ntatsman\ntatta\ntatter\ntatterdemalion\ntatterdemalionism\ntatterdemalionry\ntattered\ntatteredly\ntatteredness\ntatterly\ntatterwallop\ntattery\ntatther\ntattied\ntatting\ntattle\ntattlement\ntattler\ntattlery\ntattletale\ntattling\ntattlingly\ntattoo\ntattooage\ntattooer\ntattooing\ntattooist\ntattooment\ntattva\ntatty\nTatu\ntatu\ntatukira\nTatusia\nTatusiidae\ntau\nTaube\nTauchnitz\ntaught\ntaula\nTauli\ntaum\ntaun\nTaungthu\ntaunt\ntaunter\ntaunting\ntauntingly\ntauntingness\nTaunton\ntauntress\ntaupe\ntaupo\ntaupou\ntaur\ntauranga\ntaurean\nTauri\nTaurian\ntaurian\nTauric\ntauric\ntauricide\ntauricornous\nTaurid\nTauridian\ntauriferous\ntauriform\ntaurine\nTaurini\ntaurite\ntaurobolium\ntauroboly\ntaurocephalous\ntaurocholate\ntaurocholic\ntaurocol\ntaurocolla\nTauroctonus\ntaurodont\ntauroesque\ntaurokathapsia\ntaurolatry\ntauromachian\ntauromachic\ntauromachy\ntauromorphic\ntauromorphous\ntaurophile\ntaurophobe\nTauropolos\nTaurotragus\nTaurus\ntauryl\ntaut\ntautaug\ntauted\ntautegorical\ntautegory\ntauten\ntautirite\ntautit\ntautly\ntautness\ntautochrone\ntautochronism\ntautochronous\ntautog\ntautologic\ntautological\ntautologically\ntautologicalness\ntautologism\ntautologist\ntautologize\ntautologizer\ntautologous\ntautologously\ntautology\ntautomer\ntautomeral\ntautomeric\ntautomerism\ntautomerizable\ntautomerization\ntautomerize\ntautomery\ntautometer\ntautometric\ntautometrical\ntautomorphous\ntautonym\ntautonymic\ntautonymy\ntautoousian\ntautoousious\ntautophonic\ntautophonical\ntautophony\ntautopodic\ntautopody\ntautosyllabic\ntautotype\ntautourea\ntautousian\ntautousious\ntautozonal\ntautozonality\ntav\nTavast\nTavastian\nTave\ntave\ntavell\ntaver\ntavern\ntaverner\ntavernize\ntavernless\ntavernlike\ntavernly\ntavernous\ntavernry\ntavernwards\ntavers\ntavert\nTavghi\ntavistockite\ntavola\ntavolatite\nTavy\ntaw\ntawa\ntawdered\ntawdrily\ntawdriness\ntawdry\ntawer\ntawery\nTawgi\ntawie\ntawite\ntawkee\ntawkin\ntawn\ntawney\ntawnily\ntawniness\ntawnle\ntawny\ntawpi\ntawpie\ntaws\ntawse\ntawtie\ntax\ntaxability\ntaxable\ntaxableness\ntaxably\nTaxaceae\ntaxaceous\ntaxameter\ntaxaspidean\ntaxation\ntaxational\ntaxative\ntaxatively\ntaxator\ntaxeater\ntaxeating\ntaxed\ntaxeme\ntaxemic\ntaxeopod\nTaxeopoda\ntaxeopodous\ntaxeopody\ntaxer\ntaxgatherer\ntaxgathering\ntaxi\ntaxiable\ntaxiarch\ntaxiauto\ntaxibus\ntaxicab\nTaxidea\ntaxidermal\ntaxidermic\ntaxidermist\ntaxidermize\ntaxidermy\ntaximan\ntaximeter\ntaximetered\ntaxine\ntaxing\ntaxingly\ntaxinomic\ntaxinomist\ntaxinomy\ntaxiplane\ntaxis\ntaxite\ntaxitic\ntaxless\ntaxlessly\ntaxlessness\ntaxman\nTaxodiaceae\nTaxodium\ntaxodont\ntaxology\ntaxometer\ntaxon\ntaxonomer\ntaxonomic\ntaxonomical\ntaxonomically\ntaxonomist\ntaxonomy\ntaxor\ntaxpaid\ntaxpayer\ntaxpaying\nTaxus\ntaxwax\ntaxy\ntay\nTayassu\nTayassuidae\ntayer\nTaygeta\ntayir\nTaylor\nTaylorism\nTaylorite\ntaylorite\nTaylorize\ntayra\nTayrona\ntaysaam\ntazia\nTcawi\ntch\ntchai\ntcharik\ntchast\ntche\ntcheirek\nTcheka\nTcherkess\ntchervonets\ntchervonetz\nTchetchentsish\nTchetnitsi\nTchi\ntchick\ntchu\nTchwi\ntck\nTd\nte\ntea\nteaberry\nteaboard\nteabox\nteaboy\nteacake\nteacart\nteach\nteachability\nteachable\nteachableness\nteachably\nteache\nteacher\nteacherage\nteacherdom\nteacheress\nteacherhood\nteacherless\nteacherlike\nteacherly\nteachership\nteachery\nteaching\nteachingly\nteachless\nteachment\nteachy\nteacup\nteacupful\ntead\nteadish\nteaer\nteaey\nteagardeny\nteagle\nTeague\nTeagueland\nTeaguelander\nteahouse\nteaish\nteaism\nteak\nteakettle\nteakwood\nteal\ntealeafy\ntealery\ntealess\nteallite\nteam\nteamaker\nteamaking\nteaman\nteameo\nteamer\nteaming\nteamland\nteamless\nteamman\nteammate\nteamsman\nteamster\nteamwise\nteamwork\ntean\nteanal\nteap\nteapot\nteapotful\nteapottykin\nteapoy\ntear\ntearable\ntearableness\ntearably\ntearage\ntearcat\nteardown\nteardrop\ntearer\ntearful\ntearfully\ntearfulness\ntearing\ntearless\ntearlessly\ntearlessness\ntearlet\ntearlike\ntearoom\ntearpit\ntearproof\ntearstain\nteart\ntearthroat\ntearthumb\nteary\nteasable\nteasableness\nteasably\ntease\nteaseable\nteaseableness\nteaseably\nteasehole\nteasel\nteaseler\nteaseller\nteasellike\nteaselwort\nteasement\nteaser\nteashop\nteasiness\nteasing\nteasingly\nteasler\nteaspoon\nteaspoonful\nteasy\nteat\nteataster\nteated\nteatfish\nteathe\nteather\nteatime\nteatlike\nteatling\nteatman\nteaty\nteave\nteaware\nteaze\nteazer\ntebbet\nTebet\nTebeth\nTebu\ntec\nTeca\nteca\ntecali\nTech\ntech\ntechily\ntechiness\ntechnetium\ntechnic\ntechnica\ntechnical\ntechnicalism\ntechnicalist\ntechnicality\ntechnicalize\ntechnically\ntechnicalness\ntechnician\ntechnicism\ntechnicist\ntechnicological\ntechnicology\nTechnicolor\ntechnicon\ntechnics\ntechniphone\ntechnique\ntechniquer\ntechnism\ntechnist\ntechnocausis\ntechnochemical\ntechnochemistry\ntechnocracy\ntechnocrat\ntechnocratic\ntechnographer\ntechnographic\ntechnographical\ntechnographically\ntechnography\ntechnolithic\ntechnologic\ntechnological\ntechnologically\ntechnologist\ntechnologue\ntechnology\ntechnonomic\ntechnonomy\ntechnopsychology\ntechous\ntechy\nteck\nTecla\ntecnoctonia\ntecnology\nTeco\nTecoma\ntecomin\ntecon\nTecpanec\ntectal\ntectibranch\nTectibranchia\ntectibranchian\nTectibranchiata\ntectibranchiate\ntectiform\ntectocephalic\ntectocephaly\ntectological\ntectology\nTectona\ntectonic\ntectonics\ntectorial\ntectorium\nTectosages\ntectosphere\ntectospinal\nTectospondyli\ntectospondylic\ntectospondylous\ntectrices\ntectricial\ntectum\ntecum\ntecuma\nTecuna\nTed\nted\nTeda\ntedder\nTeddy\ntedescan\ntedge\ntediosity\ntedious\ntediously\ntediousness\ntediousome\ntedisome\ntedium\ntee\nteedle\nteel\nteem\nteemer\nteemful\nteemfulness\nteeming\nteemingly\nteemingness\nteemless\nteems\nteen\nteenage\nteenet\nteens\nteensy\nteenty\nteeny\nteer\nteerer\nteest\nTeeswater\nteet\nteetaller\nteetan\nteeter\nteeterboard\nteeterer\nteetertail\nteeth\nteethache\nteethbrush\nteethe\nteethful\nteethily\nteething\nteethless\nteethlike\nteethridge\nteethy\nteeting\nteetotal\nteetotaler\nteetotalism\nteetotalist\nteetotally\nteetotum\nteetotumism\nteetotumize\nteetotumwise\nteety\nteevee\nteewhaap\nteff\nteg\nTegean\nTegeticula\ntegmen\ntegmental\ntegmentum\ntegmina\ntegminal\nTegmine\ntegua\nteguexin\nTeguima\ntegula\ntegular\ntegularly\ntegulated\ntegumen\ntegument\ntegumental\ntegumentary\ntegumentum\ntegurium\nTeheran\ntehseel\ntehseeldar\ntehsil\ntehsildar\nTehuantepecan\nTehueco\nTehuelche\nTehuelchean\nTehuelet\nTeian\nteicher\nteiglech\nTeiidae\nteil\nteind\nteindable\nteinder\nteinland\nteinoscope\nteioid\nTeiresias\nTejon\ntejon\nteju\ntekiah\nTekintsi\nTekke\ntekke\ntekken\nTekkintzi\nteknonymous\nteknonymy\ntektite\ntekya\ntelacoustic\ntelakucha\ntelamon\ntelang\ntelangiectasia\ntelangiectasis\ntelangiectasy\ntelangiectatic\ntelangiosis\nTelanthera\ntelar\ntelarian\ntelary\ntelautogram\ntelautograph\ntelautographic\ntelautographist\ntelautography\ntelautomatic\ntelautomatically\ntelautomatics\nTelchines\nTelchinic\ntele\nteleanemograph\nteleangiectasia\ntelebarograph\ntelebarometer\ntelecast\ntelecaster\ntelechemic\ntelechirograph\ntelecinematography\ntelecode\ntelecommunication\ntelecryptograph\ntelectroscope\nteledendrion\nteledendrite\nteledendron\nteledu\ntelega\ntelegenic\nTelegn\ntelegnosis\ntelegnostic\ntelegonic\ntelegonous\ntelegony\ntelegram\ntelegrammatic\ntelegrammic\ntelegraph\ntelegraphee\ntelegrapheme\ntelegrapher\ntelegraphese\ntelegraphic\ntelegraphical\ntelegraphically\ntelegraphist\ntelegraphone\ntelegraphophone\ntelegraphoscope\ntelegraphy\nTelegu\ntelehydrobarometer\nTelei\nTeleia\nteleianthous\nteleiosis\ntelekinematography\ntelekinesis\ntelekinetic\ntelelectric\ntelelectrograph\ntelelectroscope\ntelemanometer\nTelemark\ntelemark\nTelembi\ntelemechanic\ntelemechanics\ntelemechanism\ntelemetacarpal\ntelemeteorograph\ntelemeteorographic\ntelemeteorography\ntelemeter\ntelemetric\ntelemetrical\ntelemetrist\ntelemetrograph\ntelemetrographic\ntelemetrography\ntelemetry\ntelemotor\ntelencephal\ntelencephalic\ntelencephalon\ntelenergic\ntelenergy\nteleneurite\nteleneuron\nTelenget\ntelengiscope\nTelenomus\nteleobjective\nTeleocephali\nteleocephalous\nTeleoceras\nTeleodesmacea\nteleodesmacean\nteleodesmaceous\nteleodont\nteleologic\nteleological\nteleologically\nteleologism\nteleologist\nteleology\nteleometer\nteleophobia\nteleophore\nteleophyte\nteleoptile\nteleorganic\nteleoroentgenogram\nteleoroentgenography\nteleosaur\nteleosaurian\nTeleosauridae\nTeleosaurus\nteleost\nteleostean\nTeleostei\nteleosteous\nteleostomate\nteleostome\nTeleostomi\nteleostomian\nteleostomous\nteleotemporal\nteleotrocha\nteleozoic\nteleozoon\ntelepathic\ntelepathically\ntelepathist\ntelepathize\ntelepathy\ntelepheme\ntelephone\ntelephoner\ntelephonic\ntelephonical\ntelephonically\ntelephonist\ntelephonograph\ntelephonographic\ntelephony\ntelephote\ntelephoto\ntelephotograph\ntelephotographic\ntelephotography\nTelephus\ntelepicture\nteleplasm\nteleplasmic\nteleplastic\ntelepost\nteleprinter\nteleradiophone\nteleran\ntelergic\ntelergical\ntelergically\ntelergy\ntelescope\ntelescopic\ntelescopical\ntelescopically\ntelescopiform\ntelescopist\nTelescopium\ntelescopy\ntelescriptor\nteleseism\nteleseismic\nteleseismology\nteleseme\ntelesia\ntelesis\ntelesmeter\ntelesomatic\ntelespectroscope\ntelestereograph\ntelestereography\ntelestereoscope\ntelesterion\ntelesthesia\ntelesthetic\ntelestial\ntelestic\ntelestich\nteletactile\nteletactor\nteletape\nteletherapy\ntelethermogram\ntelethermograph\ntelethermometer\ntelethermometry\ntelethon\nteletopometer\nteletranscription\nTeletype\nteletype\nteletyper\nteletypesetter\nteletypewriter\nteletyping\nTeleut\nteleuto\nteleutoform\nteleutosorus\nteleutospore\nteleutosporic\nteleutosporiferous\nteleview\nteleviewer\ntelevise\ntelevision\ntelevisional\ntelevisionary\ntelevisor\ntelevisual\ntelevocal\ntelevox\ntelewriter\nTelfairia\ntelfairic\ntelfer\ntelferage\ntelford\ntelfordize\ntelharmonic\ntelharmonium\ntelharmony\nteli\ntelial\ntelic\ntelical\ntelically\nteliferous\nTelinga\nteliosorus\nteliospore\nteliosporic\nteliosporiferous\nteliostage\ntelium\ntell\ntellable\ntellach\ntellee\nteller\ntellership\ntelligraph\nTellima\nTellina\nTellinacea\ntellinacean\ntellinaceous\ntelling\ntellingly\nTellinidae\ntellinoid\ntellsome\ntellt\ntelltale\ntelltalely\ntelltruth\ntellural\ntellurate\ntelluret\ntellureted\ntellurethyl\ntelluretted\ntellurhydric\ntellurian\ntelluric\ntelluride\ntelluriferous\ntellurion\ntellurism\ntellurist\ntellurite\ntellurium\ntellurize\ntelluronium\ntellurous\ntelmatological\ntelmatology\nteloblast\nteloblastic\ntelocentric\ntelodendrion\ntelodendron\ntelodynamic\ntelokinesis\ntelolecithal\ntelolemma\ntelome\ntelomic\ntelomitic\ntelonism\nTeloogoo\nTelopea\ntelophase\ntelophragma\ntelopsis\nteloptic\ntelosynapsis\ntelosynaptic\ntelosynaptist\nteloteropathic\nteloteropathically\nteloteropathy\nTelotremata\ntelotrematous\ntelotroch\ntelotrocha\ntelotrochal\ntelotrochous\ntelotrophic\ntelotype\ntelpath\ntelpher\ntelpherage\ntelpherman\ntelpherway\ntelson\ntelsonic\ntelt\nTelugu\ntelurgy\ntelyn\nTema\ntemacha\ntemalacatl\nTeman\nteman\nTemanite\ntembe\ntemblor\nTembu\ntemenos\ntemerarious\ntemerariously\ntemerariousness\ntemeritous\ntemerity\ntemerous\ntemerously\ntemerousness\ntemiak\ntemin\nTemiskaming\nTemne\nTemnospondyli\ntemnospondylous\ntemp\nTempe\nTempean\ntemper\ntempera\ntemperability\ntemperable\ntemperably\ntemperality\ntemperament\ntemperamental\ntemperamentalist\ntemperamentally\ntemperamented\ntemperance\ntemperate\ntemperately\ntemperateness\ntemperative\ntemperature\ntempered\ntemperedly\ntemperedness\ntemperer\ntemperish\ntemperless\ntempersome\ntempery\ntempest\ntempestical\ntempestive\ntempestively\ntempestivity\ntempestuous\ntempestuously\ntempestuousness\ntempesty\ntempi\nTemplar\ntemplar\ntemplardom\ntemplarism\ntemplarlike\ntemplarlikeness\ntemplary\ntemplate\ntemplater\ntemple\ntempled\ntempleful\ntempleless\ntemplelike\ntemplet\nTempletonia\ntempleward\ntemplize\ntempo\ntempora\ntemporal\ntemporale\ntemporalism\ntemporalist\ntemporality\ntemporalize\ntemporally\ntemporalness\ntemporalty\ntemporaneous\ntemporaneously\ntemporaneousness\ntemporarily\ntemporariness\ntemporary\ntemporator\ntemporization\ntemporizer\ntemporizing\ntemporizingly\ntemporoalar\ntemporoauricular\ntemporocentral\ntemporocerebellar\ntemporofacial\ntemporofrontal\ntemporohyoid\ntemporomalar\ntemporomandibular\ntemporomastoid\ntemporomaxillary\ntemporooccipital\ntemporoparietal\ntemporopontine\ntemporosphenoid\ntemporosphenoidal\ntemporozygomatic\ntempre\ntemprely\ntempt\ntemptability\ntemptable\ntemptableness\ntemptation\ntemptational\ntemptationless\ntemptatious\ntemptatory\ntempter\ntempting\ntemptingly\ntemptingness\ntemptress\nTempyo\ntemse\ntemser\ntemulence\ntemulency\ntemulent\ntemulentive\ntemulently\nten\ntenability\ntenable\ntenableness\ntenably\ntenace\ntenacious\ntenaciously\ntenaciousness\ntenacity\ntenaculum\ntenai\ntenaille\ntenaillon\nTenaktak\ntenancy\ntenant\ntenantable\ntenantableness\ntenanter\ntenantism\ntenantless\ntenantlike\ntenantry\ntenantship\ntench\ntenchweed\nTencteri\ntend\ntendance\ntendant\ntendence\ntendency\ntendent\ntendential\ntendentious\ntendentiously\ntendentiousness\ntender\ntenderability\ntenderable\ntenderably\ntenderee\ntenderer\ntenderfoot\ntenderfootish\ntenderful\ntenderfully\ntenderheart\ntenderhearted\ntenderheartedly\ntenderheartedness\ntenderish\ntenderize\ntenderling\ntenderloin\ntenderly\ntenderness\ntenderometer\ntendersome\ntendinal\ntending\ntendingly\ntendinitis\ntendinous\ntendinousness\ntendomucoid\ntendon\ntendonous\ntendoplasty\ntendosynovitis\ntendotome\ntendotomy\ntendour\ntendovaginal\ntendovaginitis\ntendresse\ntendril\ntendriled\ntendriliferous\ntendrillar\ntendrilly\ntendrilous\ntendron\ntenebra\nTenebrae\ntenebricose\ntenebrific\ntenebrificate\nTenebrio\ntenebrionid\nTenebrionidae\ntenebrious\ntenebriously\ntenebrity\ntenebrose\ntenebrosity\ntenebrous\ntenebrously\ntenebrousness\ntenectomy\ntenement\ntenemental\ntenementary\ntenementer\ntenementization\ntenementize\ntenendas\ntenendum\ntenent\nteneral\nTeneriffe\ntenesmic\ntenesmus\ntenet\ntenfold\ntenfoldness\nteng\ntengere\ntengerite\nTenggerese\ntengu\nteniacidal\nteniacide\ntenible\nTenino\ntenio\ntenline\ntenmantale\ntennantite\ntenne\ntenner\nTennessean\ntennis\ntennisdom\ntennisy\nTennysonian\nTennysonianism\nTenochtitlan\ntenodesis\ntenodynia\ntenography\ntenology\ntenomyoplasty\ntenomyotomy\ntenon\ntenonectomy\ntenoner\nTenonian\ntenonitis\ntenonostosis\ntenontagra\ntenontitis\ntenontodynia\ntenontography\ntenontolemmitis\ntenontology\ntenontomyoplasty\ntenontomyotomy\ntenontophyma\ntenontoplasty\ntenontothecitis\ntenontotomy\ntenophony\ntenophyte\ntenoplastic\ntenoplasty\ntenor\ntenorist\ntenorister\ntenorite\ntenorless\ntenoroon\ntenorrhaphy\ntenositis\ntenostosis\ntenosuture\ntenotome\ntenotomist\ntenotomize\ntenotomy\ntenovaginitis\ntenpence\ntenpenny\ntenpin\ntenrec\nTenrecidae\ntense\ntenseless\ntenselessness\ntensely\ntenseness\ntensibility\ntensible\ntensibleness\ntensibly\ntensify\ntensile\ntensilely\ntensileness\ntensility\ntensimeter\ntensiometer\ntension\ntensional\ntensionless\ntensity\ntensive\ntenson\ntensor\ntent\ntentability\ntentable\ntentacle\ntentacled\ntentaclelike\ntentacula\ntentacular\nTentaculata\ntentaculate\ntentaculated\nTentaculifera\ntentaculite\nTentaculites\nTentaculitidae\ntentaculocyst\ntentaculoid\ntentaculum\ntentage\ntentamen\ntentation\ntentative\ntentatively\ntentativeness\ntented\ntenter\ntenterbelly\ntenterer\ntenterhook\ntentful\ntenth\ntenthly\ntenthmeter\ntenthredinid\nTenthredinidae\ntenthredinoid\nTenthredinoidea\nTenthredo\ntentiform\ntentigo\ntentillum\ntention\ntentless\ntentlet\ntentlike\ntentmaker\ntentmaking\ntentmate\ntentorial\ntentorium\ntenture\ntentwards\ntentwise\ntentwork\ntentwort\ntenty\ntenuate\ntenues\ntenuicostate\ntenuifasciate\ntenuiflorous\ntenuifolious\ntenuious\ntenuiroster\ntenuirostral\ntenuirostrate\nTenuirostres\ntenuis\ntenuistriate\ntenuity\ntenuous\ntenuously\ntenuousness\ntenure\ntenurial\ntenurially\nteocalli\nteopan\nteosinte\nTeotihuacan\ntepache\ntepal\nTepanec\nTepecano\ntepee\ntepefaction\ntepefy\nTepehua\nTepehuane\ntepetate\nTephillah\ntephillin\ntephramancy\ntephrite\ntephritic\ntephroite\ntephromalacia\ntephromyelitic\nTephrosia\ntephrosis\ntepid\ntepidarium\ntepidity\ntepidly\ntepidness\ntepomporize\nteponaztli\ntepor\ntequila\nTequistlateca\nTequistlatecan\ntera\nteraglin\nterakihi\nteramorphous\nterap\nteraphim\nteras\nteratical\nteratism\nteratoblastoma\nteratogenesis\nteratogenetic\nteratogenic\nteratogenous\nteratogeny\nteratoid\nteratological\nteratologist\nteratology\nteratoma\nteratomatous\nteratoscopy\nteratosis\nterbia\nterbic\nterbium\ntercel\ntercelet\ntercentenarian\ntercentenarize\ntercentenary\ntercentennial\ntercer\nterceron\ntercet\nterchloride\ntercia\ntercine\ntercio\nterdiurnal\nterebate\nterebella\nterebellid\nTerebellidae\nterebelloid\nterebellum\nterebene\nterebenic\nterebenthene\nterebic\nterebilic\nterebinic\nterebinth\nTerebinthaceae\nterebinthial\nterebinthian\nterebinthic\nterebinthina\nterebinthinate\nterebinthine\nterebinthinous\nTerebinthus\nterebra\nterebral\nterebrant\nTerebrantia\nterebrate\nterebration\nTerebratula\nterebratular\nterebratulid\nTerebratulidae\nterebratuliform\nterebratuline\nterebratulite\nterebratuloid\nTerebridae\nTeredinidae\nteredo\nterek\nTerence\nTerentian\nterephthalate\nterephthalic\nTeresa\nTeresian\nTeresina\nterete\nteretial\ntereticaudate\nteretifolious\nteretipronator\nteretiscapular\nteretiscapularis\nteretish\ntereu\nTereus\nterfez\nTerfezia\nTerfeziaceae\ntergal\ntergant\ntergeminate\ntergeminous\ntergiferous\ntergite\ntergitic\ntergiversant\ntergiversate\ntergiversation\ntergiversator\ntergiversatory\ntergiverse\ntergolateral\ntergum\nTeri\nTeriann\nterlinguaite\nterm\nterma\ntermagancy\nTermagant\ntermagant\ntermagantish\ntermagantism\ntermagantly\ntermage\ntermatic\ntermen\ntermer\nTermes\ntermillenary\ntermin\nterminability\nterminable\nterminableness\nterminably\nterminal\nTerminalia\nTerminaliaceae\nterminalization\nterminalized\nterminally\nterminant\nterminate\ntermination\nterminational\nterminative\nterminatively\nterminator\nterminatory\ntermine\nterminer\ntermini\nterminine\nterminism\nterminist\nterministic\nterminize\ntermino\nterminological\nterminologically\nterminologist\nterminology\nterminus\ntermital\ntermitarium\ntermitary\ntermite\ntermitic\ntermitid\nTermitidae\ntermitophagous\ntermitophile\ntermitophilous\ntermless\ntermlessly\ntermlessness\ntermly\ntermolecular\ntermon\ntermor\ntermtime\ntern\nterna\nternal\nternar\nternariant\nternarious\nternary\nternate\nternately\nternatipinnate\nternatisect\nternatopinnate\nterne\nterneplate\nternery\nternion\nternize\nternlet\nTernstroemia\nTernstroemiaceae\nteroxide\nterp\nterpadiene\nterpane\nterpene\nterpeneless\nterphenyl\nterpilene\nterpin\nterpine\nterpinene\nterpineol\nterpinol\nterpinolene\nterpodion\nTerpsichore\nterpsichoreal\nterpsichoreally\nTerpsichorean\nterpsichorean\nTerraba\nterrace\nterraceous\nterracer\nterracette\nterracewards\nterracewise\nterracework\nterraciform\nterracing\nterraculture\nterraefilial\nterraefilian\nterrage\nterrain\nterral\nterramara\nterramare\nTerrance\nterrane\nterranean\nterraneous\nTerrapene\nterrapin\nterraquean\nterraqueous\nterraqueousness\nterrar\nterrarium\nterrazzo\nterrella\nterremotive\nTerrence\nterrene\nterrenely\nterreneness\nterreplein\nterrestrial\nterrestrialism\nterrestriality\nterrestrialize\nterrestrially\nterrestrialness\nterrestricity\nterrestrious\nterret\nterreted\nTerri\nterribility\nterrible\nterribleness\nterribly\nterricole\nterricoline\nterricolous\nterrier\nterrierlike\nterrific\nterrifical\nterrifically\nterrification\nterrificly\nterrificness\nterrifiedly\nterrifier\nterrify\nterrifying\nterrifyingly\nterrigenous\nterrine\nTerritelae\nterritelarian\nterritorial\nterritorialism\nterritorialist\nterritoriality\nterritorialization\nterritorialize\nterritorially\nterritorian\nterritoried\nterritory\nterron\nterror\nterrorful\nterrorific\nterrorism\nterrorist\nterroristic\nterroristical\nterrorization\nterrorize\nterrorizer\nterrorless\nterrorproof\nterrorsome\nTerry\nterry\nterse\ntersely\nterseness\ntersion\ntersulphate\ntersulphide\ntersulphuret\ntertenant\ntertia\ntertial\ntertian\ntertiana\ntertianship\ntertiarian\ntertiary\ntertiate\ntertius\nterton\ntertrinal\nTertullianism\nTertullianist\nteruncius\nterutero\nTeruyuki\ntervalence\ntervalency\ntervalent\ntervariant\ntervee\nterzetto\nterzina\nterzo\ntesack\ntesarovitch\nteschenite\nteschermacherite\nteskere\nteskeria\nTess\ntessara\ntessarace\ntessaraconter\ntessaradecad\ntessaraglot\ntessaraphthong\ntessarescaedecahedron\ntessel\ntessella\ntessellar\ntessellate\ntessellated\ntessellation\ntessera\ntesseract\ntesseradecade\ntesseraic\ntesseral\nTesserants\ntesserarian\ntesserate\ntesserated\ntesseratomic\ntesseratomy\ntessular\ntest\ntesta\ntestable\nTestacea\ntestacean\ntestaceography\ntestaceology\ntestaceous\ntestaceousness\ntestacy\ntestament\ntestamental\ntestamentally\ntestamentalness\ntestamentarily\ntestamentary\ntestamentate\ntestamentation\ntestamentum\ntestamur\ntestar\ntestata\ntestate\ntestation\ntestator\ntestatorship\ntestatory\ntestatrices\ntestatrix\ntestatum\nteste\ntested\ntestee\ntester\ntestes\ntestibrachial\ntestibrachium\ntesticardinate\ntesticardine\nTesticardines\ntesticle\ntesticond\ntesticular\ntesticulate\ntesticulated\ntestiere\ntestificate\ntestification\ntestificator\ntestificatory\ntestifier\ntestify\ntestily\ntestimonial\ntestimonialist\ntestimonialization\ntestimonialize\ntestimonializer\ntestimonium\ntestimony\ntestiness\ntesting\ntestingly\ntestis\nteston\ntestone\ntestoon\ntestor\ntestosterone\ntestril\ntestudinal\nTestudinaria\ntestudinarious\nTestudinata\ntestudinate\ntestudinated\ntestudineal\ntestudineous\nTestudinidae\ntestudinous\ntestudo\ntesty\nTesuque\ntetanic\ntetanical\ntetanically\ntetaniform\ntetanigenous\ntetanilla\ntetanine\ntetanism\ntetanization\ntetanize\ntetanoid\ntetanolysin\ntetanomotor\ntetanospasmin\ntetanotoxin\ntetanus\ntetany\ntetarcone\ntetarconid\ntetard\ntetartemorion\ntetartocone\ntetartoconid\ntetartohedral\ntetartohedrally\ntetartohedrism\ntetartohedron\ntetartoid\ntetartosymmetry\ntetch\ntetchy\ntete\ntetel\nteterrimous\nteth\ntethelin\ntether\ntetherball\ntethery\ntethydan\nTethys\nTeton\ntetra\ntetraamylose\ntetrabasic\ntetrabasicity\nTetrabelodon\ntetrabelodont\ntetrabiblos\ntetraborate\ntetraboric\ntetrabrach\ntetrabranch\nTetrabranchia\ntetrabranchiate\ntetrabromid\ntetrabromide\ntetrabromo\ntetrabromoethane\ntetracadactylity\ntetracarboxylate\ntetracarboxylic\ntetracarpellary\ntetraceratous\ntetracerous\nTetracerus\ntetrachical\ntetrachlorid\ntetrachloride\ntetrachloro\ntetrachloroethane\ntetrachloroethylene\ntetrachloromethane\ntetrachord\ntetrachordal\ntetrachordon\ntetrachoric\ntetrachotomous\ntetrachromatic\ntetrachromic\ntetrachronous\ntetracid\ntetracoccous\ntetracoccus\ntetracolic\ntetracolon\ntetracoral\nTetracoralla\ntetracoralline\ntetracosane\ntetract\ntetractinal\ntetractine\ntetractinellid\nTetractinellida\ntetractinellidan\ntetractinelline\ntetractinose\ntetracyclic\ntetrad\ntetradactyl\ntetradactylous\ntetradactyly\ntetradarchy\ntetradecane\ntetradecanoic\ntetradecapod\nTetradecapoda\ntetradecapodan\ntetradecapodous\ntetradecyl\nTetradesmus\ntetradiapason\ntetradic\nTetradite\ntetradrachma\ntetradrachmal\ntetradrachmon\ntetradymite\nTetradynamia\ntetradynamian\ntetradynamious\ntetradynamous\ntetraedron\ntetraedrum\ntetraethylsilane\ntetrafluoride\ntetrafolious\ntetragamy\ntetragenous\ntetraglot\ntetraglottic\ntetragon\ntetragonal\ntetragonally\ntetragonalness\nTetragonia\nTetragoniaceae\ntetragonidium\ntetragonous\ntetragonus\ntetragram\ntetragrammatic\nTetragrammaton\ntetragrammatonic\ntetragyn\nTetragynia\ntetragynian\ntetragynous\ntetrahedral\ntetrahedrally\ntetrahedric\ntetrahedrite\ntetrahedroid\ntetrahedron\ntetrahexahedral\ntetrahexahedron\ntetrahydrate\ntetrahydrated\ntetrahydric\ntetrahydride\ntetrahydro\ntetrahydroxy\ntetraiodid\ntetraiodide\ntetraiodo\ntetraiodophenolphthalein\ntetrakaidecahedron\ntetraketone\ntetrakisazo\ntetrakishexahedron\ntetralemma\nTetralin\ntetralogic\ntetralogue\ntetralogy\ntetralophodont\ntetramastia\ntetramastigote\nTetramera\ntetrameral\ntetrameralian\ntetrameric\ntetramerism\ntetramerous\ntetrameter\ntetramethyl\ntetramethylammonium\ntetramethylene\ntetramethylium\ntetramin\ntetramine\ntetrammine\ntetramorph\ntetramorphic\ntetramorphism\ntetramorphous\ntetrander\nTetrandria\ntetrandrian\ntetrandrous\ntetrane\ntetranitrate\ntetranitro\ntetranitroaniline\ntetranuclear\nTetranychus\nTetrao\nTetraodon\ntetraodont\nTetraodontidae\ntetraonid\nTetraonidae\nTetraoninae\ntetraonine\nTetrapanax\ntetrapartite\ntetrapetalous\ntetraphalangeate\ntetrapharmacal\ntetrapharmacon\ntetraphenol\ntetraphony\ntetraphosphate\ntetraphyllous\ntetrapla\ntetraplegia\ntetrapleuron\ntetraploid\ntetraploidic\ntetraploidy\ntetraplous\nTetrapneumona\nTetrapneumones\ntetrapneumonian\ntetrapneumonous\ntetrapod\nTetrapoda\ntetrapodic\ntetrapody\ntetrapolar\ntetrapolis\ntetrapolitan\ntetrapous\ntetraprostyle\ntetrapteran\ntetrapteron\ntetrapterous\ntetraptote\nTetrapturus\ntetraptych\ntetrapylon\ntetrapyramid\ntetrapyrenous\ntetraquetrous\ntetrarch\ntetrarchate\ntetrarchic\ntetrarchy\ntetrasaccharide\ntetrasalicylide\ntetraselenodont\ntetraseme\ntetrasemic\ntetrasepalous\ntetraskelion\ntetrasome\ntetrasomic\ntetrasomy\ntetraspermal\ntetraspermatous\ntetraspermous\ntetraspheric\ntetrasporange\ntetrasporangiate\ntetrasporangium\ntetraspore\ntetrasporic\ntetrasporiferous\ntetrasporous\ntetraster\ntetrastich\ntetrastichal\ntetrastichic\nTetrastichidae\ntetrastichous\nTetrastichus\ntetrastoon\ntetrastyle\ntetrastylic\ntetrastylos\ntetrastylous\ntetrasubstituted\ntetrasubstitution\ntetrasulphide\ntetrasyllabic\ntetrasyllable\ntetrasymmetry\ntetrathecal\ntetratheism\ntetratheite\ntetrathionates\ntetrathionic\ntetratomic\ntetratone\ntetravalence\ntetravalency\ntetravalent\ntetraxial\ntetraxon\nTetraxonia\ntetraxonian\ntetraxonid\nTetraxonida\ntetrazane\ntetrazene\ntetrazin\ntetrazine\ntetrazo\ntetrazole\ntetrazolium\ntetrazolyl\ntetrazone\ntetrazotization\ntetrazotize\ntetrazyl\ntetremimeral\ntetrevangelium\ntetric\ntetrical\ntetricity\ntetricous\ntetrigid\nTetrigidae\ntetriodide\nTetrix\ntetrobol\ntetrobolon\ntetrode\nTetrodon\ntetrodont\nTetrodontidae\ntetrole\ntetrolic\ntetronic\ntetronymal\ntetrose\ntetroxalate\ntetroxide\ntetrsyllabical\ntetryl\ntetrylene\ntetter\ntetterish\ntetterous\ntetterwort\ntettery\nTettigidae\ntettigoniid\nTettigoniidae\ntettix\nTetum\nTeucer\nTeucri\nTeucrian\nteucrin\nTeucrium\nteufit\nteuk\nTeutolatry\nTeutomania\nTeutomaniac\nTeuton\nTeutondom\nTeutonesque\nTeutonia\nTeutonic\nTeutonically\nTeutonicism\nTeutonism\nTeutonist\nTeutonity\nTeutonization\nTeutonize\nTeutonomania\nTeutonophobe\nTeutonophobia\nTeutophil\nTeutophile\nTeutophilism\nTeutophobe\nTeutophobia\nTeutophobism\nteviss\ntew\nTewa\ntewel\ntewer\ntewit\ntewly\ntewsome\nTexan\nTexas\nTexcocan\ntexguino\ntext\ntextarian\ntextbook\ntextbookless\ntextiferous\ntextile\ntextilist\ntextlet\ntextman\ntextorial\ntextrine\ntextual\ntextualism\ntextualist\ntextuality\ntextually\ntextuarist\ntextuary\ntextural\ntexturally\ntexture\ntextureless\ntez\nTezcatlipoca\nTezcatzoncatl\nTezcucan\ntezkere\nth\ntha\nthack\nthacker\nThackerayan\nThackerayana\nThackerayesque\nthackless\nThad\nThai\nThais\nthakur\nthakurate\nthalamencephalic\nthalamencephalon\nthalami\nthalamic\nThalamiflorae\nthalamifloral\nthalamiflorous\nthalamite\nthalamium\nthalamocele\nthalamocoele\nthalamocortical\nthalamocrural\nthalamolenticular\nthalamomammillary\nthalamopeduncular\nThalamophora\nthalamotegmental\nthalamotomy\nthalamus\nThalarctos\nthalassal\nThalassarctos\nthalassian\nthalassic\nthalassinid\nThalassinidea\nthalassinidian\nthalassinoid\nthalassiophyte\nthalassiophytous\nthalasso\nThalassochelys\nthalassocracy\nthalassocrat\nthalassographer\nthalassographic\nthalassographical\nthalassography\nthalassometer\nthalassophilous\nthalassophobia\nthalassotherapy\nthalattology\nthalenite\nthaler\nThalesia\nThalesian\nThalessa\nThalia\nThaliacea\nthaliacean\nThalian\nThaliard\nThalictrum\nthalli\nthallic\nthalliferous\nthalliform\nthalline\nthallious\nthallium\nthallochlore\nthallodal\nthallogen\nthallogenic\nthallogenous\nthalloid\nthallome\nThallophyta\nthallophyte\nthallophytic\nthallose\nthallous\nthallus\nthalposis\nthalpotic\nthalthan\nthameng\nThamesis\nThamnidium\nthamnium\nthamnophile\nThamnophilinae\nthamnophiline\nThamnophilus\nThamnophis\nThamudean\nThamudene\nThamudic\nthamuria\nThamus\nThamyras\nthan\nthana\nthanadar\nthanage\nthanan\nthanatism\nthanatist\nthanatobiologic\nthanatognomonic\nthanatographer\nthanatography\nthanatoid\nthanatological\nthanatologist\nthanatology\nthanatomantic\nthanatometer\nthanatophidia\nthanatophidian\nthanatophobe\nthanatophobia\nthanatophobiac\nthanatophoby\nthanatopsis\nThanatos\nthanatosis\nthanatotic\nthanatousia\nthane\nthanedom\nthanehood\nthaneland\nthaneship\nthank\nthankee\nthanker\nthankful\nthankfully\nthankfulness\nthankless\nthanklessly\nthanklessness\nthanks\nthanksgiver\nthanksgiving\nthankworthily\nthankworthiness\nthankworthy\nthapes\nThapsia\nthapsia\nthar\nTharen\ntharf\ntharfcake\nThargelion\ntharginyah\ntharm\nThasian\nThaspium\nthat\nthatch\nthatcher\nthatching\nthatchless\nthatchwood\nthatchwork\nthatchy\nthatn\nthatness\nthats\nthaught\nThaumantian\nThaumantias\nthaumasite\nthaumatogeny\nthaumatography\nthaumatolatry\nthaumatology\nthaumatrope\nthaumatropical\nthaumaturge\nthaumaturgia\nthaumaturgic\nthaumaturgical\nthaumaturgics\nthaumaturgism\nthaumaturgist\nthaumaturgy\nthaumoscopic\nthave\nthaw\nthawer\nthawless\nthawn\nthawy\nThe\nthe\nThea\nTheaceae\ntheaceous\ntheah\ntheandric\ntheanthropic\ntheanthropical\ntheanthropism\ntheanthropist\ntheanthropology\ntheanthropophagy\ntheanthropos\ntheanthroposophy\ntheanthropy\nthearchic\nthearchy\ntheasum\ntheat\ntheater\ntheatergoer\ntheatergoing\ntheaterless\ntheaterlike\ntheaterward\ntheaterwards\ntheaterwise\nTheatine\ntheatral\ntheatric\ntheatricable\ntheatrical\ntheatricalism\ntheatricality\ntheatricalization\ntheatricalize\ntheatrically\ntheatricalness\ntheatricals\ntheatrician\ntheatricism\ntheatricize\ntheatrics\ntheatrize\ntheatrocracy\ntheatrograph\ntheatromania\ntheatromaniac\ntheatron\ntheatrophile\ntheatrophobia\ntheatrophone\ntheatrophonic\ntheatropolis\ntheatroscope\ntheatry\ntheave\ntheb\nThebaic\nThebaid\nthebaine\nThebais\nthebaism\nTheban\nThebesian\ntheca\nthecae\nthecal\nThecamoebae\nthecaphore\nthecasporal\nthecaspore\nthecaspored\nthecasporous\nThecata\nthecate\nthecia\nthecitis\nthecium\nThecla\nthecla\ntheclan\nthecodont\nthecoglossate\nthecoid\nThecoidea\nThecophora\nThecosomata\nthecosomatous\nthee\ntheek\ntheeker\ntheelin\ntheelol\nTheemim\ntheer\ntheet\ntheetsee\ntheezan\ntheft\ntheftbote\ntheftdom\ntheftless\ntheftproof\ntheftuous\ntheftuously\nthegether\nthegidder\nthegither\nthegn\nthegndom\nthegnhood\nthegnland\nthegnlike\nthegnly\nthegnship\nthegnworthy\ntheiform\nTheileria\ntheine\ntheinism\ntheir\ntheirn\ntheirs\ntheirselves\ntheirsens\ntheism\ntheist\ntheistic\ntheistical\ntheistically\nthelalgia\nThelemite\nthelemite\nThelephora\nThelephoraceae\nTheligonaceae\ntheligonaceous\nTheligonum\nthelitis\nthelium\nThelodontidae\nThelodus\ntheloncus\nthelorrhagia\nThelphusa\nthelphusian\nThelphusidae\nthelyblast\nthelyblastic\nthelyotokous\nthelyotoky\nThelyphonidae\nThelyphonus\nthelyplasty\nthelytocia\nthelytoky\nthelytonic\nthem\nthema\nthemata\nthematic\nthematical\nthematically\nthematist\ntheme\nthemeless\nthemelet\nthemer\nThemis\nthemis\nThemistian\nthemsel\nthemselves\nthen\nthenabouts\nthenadays\nthenal\nthenar\nthenardite\nthence\nthenceafter\nthenceforth\nthenceforward\nthenceforwards\nthencefrom\nthenceward\nthenness\nTheo\ntheoanthropomorphic\ntheoanthropomorphism\ntheoastrological\nTheobald\nTheobroma\ntheobromic\ntheobromine\ntheocentric\ntheocentricism\ntheocentrism\ntheochristic\ntheocollectivism\ntheocollectivist\ntheocracy\ntheocrasia\ntheocrasical\ntheocrasy\ntheocrat\ntheocratic\ntheocratical\ntheocratically\ntheocratist\nTheocritan\nTheocritean\ntheodemocracy\ntheodicaea\ntheodicean\ntheodicy\ntheodidact\ntheodolite\ntheodolitic\nTheodora\nTheodore\nTheodoric\nTheodosia\nTheodosian\nTheodotian\ntheodrama\ntheody\ntheogamy\ntheogeological\ntheognostic\ntheogonal\ntheogonic\ntheogonism\ntheogonist\ntheogony\ntheohuman\ntheokrasia\ntheoktonic\ntheoktony\ntheolatrous\ntheolatry\ntheolepsy\ntheoleptic\ntheologal\ntheologaster\ntheologastric\ntheologate\ntheologeion\ntheologer\ntheologi\ntheologian\ntheologic\ntheological\ntheologically\ntheologician\ntheologicoastronomical\ntheologicoethical\ntheologicohistorical\ntheologicometaphysical\ntheologicomilitary\ntheologicomoral\ntheologiconatural\ntheologicopolitical\ntheologics\ntheologism\ntheologist\ntheologium\ntheologization\ntheologize\ntheologizer\ntheologoumena\ntheologoumenon\ntheologue\ntheologus\ntheology\ntheomachia\ntheomachist\ntheomachy\ntheomammomist\ntheomancy\ntheomania\ntheomaniac\ntheomantic\ntheomastix\ntheomicrist\ntheomisanthropist\ntheomorphic\ntheomorphism\ntheomorphize\ntheomythologer\ntheomythology\ntheonomy\ntheopantism\nTheopaschist\nTheopaschitally\nTheopaschite\nTheopaschitic\nTheopaschitism\ntheopathetic\ntheopathic\ntheopathy\ntheophagic\ntheophagite\ntheophagous\ntheophagy\nTheophania\ntheophania\ntheophanic\ntheophanism\ntheophanous\ntheophany\nTheophila\ntheophilanthrope\ntheophilanthropic\ntheophilanthropism\ntheophilanthropist\ntheophilanthropy\ntheophile\ntheophilist\ntheophilosophic\nTheophilus\ntheophobia\ntheophoric\ntheophorous\nTheophrastaceae\ntheophrastaceous\nTheophrastan\nTheophrastean\ntheophylline\ntheophysical\ntheopneust\ntheopneusted\ntheopneustia\ntheopneustic\ntheopneusty\ntheopolitician\ntheopolitics\ntheopolity\ntheopsychism\ntheorbist\ntheorbo\ntheorem\ntheorematic\ntheorematical\ntheorematically\ntheorematist\ntheoremic\ntheoretic\ntheoretical\ntheoreticalism\ntheoretically\ntheoretician\ntheoreticopractical\ntheoretics\ntheoria\ntheoriai\ntheoric\ntheorical\ntheorically\ntheorician\ntheoricon\ntheorics\ntheorism\ntheorist\ntheorization\ntheorize\ntheorizer\ntheorum\ntheory\ntheoryless\ntheorymonger\ntheosoph\ntheosopheme\ntheosophic\ntheosophical\ntheosophically\ntheosophism\ntheosophist\ntheosophistic\ntheosophistical\ntheosophize\ntheosophy\ntheotechnic\ntheotechnist\ntheotechny\ntheoteleological\ntheoteleology\ntheotherapy\nTheotokos\ntheow\ntheowdom\ntheowman\nTheraean\ntheralite\ntherapeusis\nTherapeutae\nTherapeutic\ntherapeutic\ntherapeutical\ntherapeutically\ntherapeutics\ntherapeutism\ntherapeutist\nTheraphosa\ntheraphose\ntheraphosid\nTheraphosidae\ntheraphosoid\ntherapist\ntherapsid\nTherapsida\ntherapy\ntherblig\nthere\nthereabouts\nthereabove\nthereacross\nthereafter\nthereafterward\nthereagainst\nthereamong\nthereamongst\nthereanent\nthereanents\ntherearound\nthereas\nthereat\nthereaway\nthereaways\ntherebeside\ntherebesides\ntherebetween\nthereby\nthereckly\ntherefor\ntherefore\ntherefrom\ntherehence\ntherein\nthereinafter\nthereinbefore\nthereinto\ntherence\nthereness\nthereof\nthereoid\nthereologist\nthereology\nthereon\nthereout\nthereover\nthereright\ntheres\nTheresa\ntherese\ntherethrough\ntheretill\nthereto\ntheretofore\ntheretoward\nthereunder\nthereuntil\nthereunto\nthereup\nthereupon\nThereva\ntherevid\nTherevidae\ntherewhile\ntherewith\ntherewithal\ntherewithin\nTheria\ntheriac\ntheriaca\ntheriacal\ntherial\ntherianthropic\ntherianthropism\ntheriatrics\ntheridiid\nTheridiidae\nTheridion\ntheriodic\ntheriodont\nTheriodonta\nTheriodontia\ntheriolatry\ntheriomancy\ntheriomaniac\ntheriomimicry\ntheriomorph\ntheriomorphic\ntheriomorphism\ntheriomorphosis\ntheriomorphous\ntheriotheism\ntheriotrophical\ntheriozoic\ntherm\nthermacogenesis\nthermae\nthermal\nthermalgesia\nthermality\nthermally\nthermanalgesia\nthermanesthesia\nthermantic\nthermantidote\nthermatologic\nthermatologist\nthermatology\nthermesthesia\nthermesthesiometer\nthermetograph\nthermetrograph\nthermic\nthermically\nThermidorian\nthermion\nthermionic\nthermionically\nthermionics\nthermistor\nThermit\nthermit\nthermite\nthermo\nthermoammeter\nthermoanalgesia\nthermoanesthesia\nthermobarograph\nthermobarometer\nthermobattery\nthermocautery\nthermochemic\nthermochemical\nthermochemically\nthermochemist\nthermochemistry\nthermochroic\nthermochrosy\nthermocline\nthermocouple\nthermocurrent\nthermodiffusion\nthermoduric\nthermodynamic\nthermodynamical\nthermodynamically\nthermodynamician\nthermodynamicist\nthermodynamics\nthermodynamist\nthermoelectric\nthermoelectrical\nthermoelectrically\nthermoelectricity\nthermoelectrometer\nthermoelectromotive\nthermoelement\nthermoesthesia\nthermoexcitory\nthermogalvanometer\nthermogen\nthermogenerator\nthermogenesis\nthermogenetic\nthermogenic\nthermogenous\nthermogeny\nthermogeographical\nthermogeography\nthermogram\nthermograph\nthermography\nthermohyperesthesia\nthermojunction\nthermokinematics\nthermolabile\nthermolability\nthermological\nthermology\nthermoluminescence\nthermoluminescent\nthermolysis\nthermolytic\nthermolyze\nthermomagnetic\nthermomagnetism\nthermometamorphic\nthermometamorphism\nthermometer\nthermometerize\nthermometric\nthermometrical\nthermometrically\nthermometrograph\nthermometry\nthermomotive\nthermomotor\nthermomultiplier\nthermonastic\nthermonasty\nthermonatrite\nthermoneurosis\nthermoneutrality\nthermonous\nthermonuclear\nthermopair\nthermopalpation\nthermopenetration\nthermoperiod\nthermoperiodic\nthermoperiodicity\nthermoperiodism\nthermophile\nthermophilic\nthermophilous\nthermophobous\nthermophone\nthermophore\nthermophosphor\nthermophosphorescence\nthermopile\nthermoplastic\nthermoplasticity\nthermoplegia\nthermopleion\nthermopolymerization\nthermopolypnea\nthermopolypneic\nThermopsis\nthermoradiotherapy\nthermoreduction\nthermoregulation\nthermoregulator\nthermoresistance\nthermoresistant\nthermos\nthermoscope\nthermoscopic\nthermoscopical\nthermoscopically\nthermosetting\nthermosiphon\nthermostability\nthermostable\nthermostat\nthermostatic\nthermostatically\nthermostatics\nthermostimulation\nthermosynthesis\nthermosystaltic\nthermosystaltism\nthermotactic\nthermotank\nthermotaxic\nthermotaxis\nthermotelephone\nthermotensile\nthermotension\nthermotherapeutics\nthermotherapy\nthermotic\nthermotical\nthermotically\nthermotics\nthermotropic\nthermotropism\nthermotropy\nthermotype\nthermotypic\nthermotypy\nthermovoltaic\ntherodont\ntheroid\ntherolatry\ntherologic\ntherological\ntherologist\ntherology\nTheromora\nTheromores\ntheromorph\nTheromorpha\ntheromorphia\ntheromorphic\ntheromorphism\ntheromorphological\ntheromorphology\ntheromorphous\nTheron\ntheropod\nTheropoda\ntheropodous\nthersitean\nThersites\nthersitical\nthesauri\nthesaurus\nthese\nThesean\ntheses\nTheseum\nTheseus\nthesial\nthesicle\nthesis\nThesium\nThesmophoria\nThesmophorian\nThesmophoric\nthesmothetae\nthesmothete\nthesmothetes\nthesocyte\nThespesia\nThespesius\nThespian\nThessalian\nThessalonian\nthestreen\ntheta\nthetch\nthetic\nthetical\nthetically\nthetics\nthetin\nthetine\nThetis\ntheurgic\ntheurgical\ntheurgically\ntheurgist\ntheurgy\nThevetia\nthevetin\nthew\nthewed\nthewless\nthewness\nthewy\nthey\ntheyll\ntheyre\nthiacetic\nthiadiazole\nthialdine\nthiamide\nthiamin\nthiamine\nthianthrene\nthiasi\nthiasine\nthiasite\nthiasoi\nthiasos\nthiasote\nthiasus\nthiazine\nthiazole\nthiazoline\nthick\nthickbrained\nthicken\nthickener\nthickening\nthicket\nthicketed\nthicketful\nthickety\nthickhead\nthickheaded\nthickheadedly\nthickheadedness\nthickish\nthickleaf\nthicklips\nthickly\nthickneck\nthickness\nthicknessing\nthickset\nthickskin\nthickskull\nthickskulled\nthickwind\nthickwit\nthief\nthiefcraft\nthiefdom\nthiefland\nthiefmaker\nthiefmaking\nthiefproof\nthieftaker\nthiefwise\nThielavia\nThielaviopsis\nthienone\nthienyl\nThierry\nthievable\nthieve\nthieveless\nthiever\nthievery\nthieving\nthievingly\nthievish\nthievishly\nthievishness\nthig\nthigger\nthigging\nthigh\nthighbone\nthighed\nthight\nthightness\nthigmonegative\nthigmopositive\nthigmotactic\nthigmotactically\nthigmotaxis\nthigmotropic\nthigmotropically\nthigmotropism\nThilanottine\nthilk\nthill\nthiller\nthilly\nthimber\nthimble\nthimbleberry\nthimbled\nthimbleflower\nthimbleful\nthimblelike\nthimblemaker\nthimblemaking\nthimbleman\nthimblerig\nthimblerigger\nthimbleriggery\nthimblerigging\nthimbleweed\nthin\nthinbrained\nthine\nthing\nthingal\nthingamabob\nthinghood\nthinginess\nthingish\nthingless\nthinglet\nthinglike\nthinglikeness\nthingliness\nthingly\nthingman\nthingness\nthingstead\nthingum\nthingumajig\nthingumbob\nthingummy\nthingy\nThink\nthink\nthinkable\nthinkableness\nthinkably\nthinker\nthinkful\nthinking\nthinkingly\nthinkingpart\nthinkling\nthinly\nthinner\nthinness\nthinning\nthinnish\nThinocoridae\nThinocorus\nthinolite\nthio\nthioacetal\nthioacetic\nthioalcohol\nthioaldehyde\nthioamide\nthioantimonate\nthioantimoniate\nthioantimonious\nthioantimonite\nthioarsenate\nthioarseniate\nthioarsenic\nthioarsenious\nthioarsenite\nThiobacillus\nThiobacteria\nthiobacteria\nThiobacteriales\nthiobismuthite\nthiocarbamic\nthiocarbamide\nthiocarbamyl\nthiocarbanilide\nthiocarbimide\nthiocarbonate\nthiocarbonic\nthiocarbonyl\nthiochloride\nthiochrome\nthiocresol\nthiocyanate\nthiocyanation\nthiocyanic\nthiocyanide\nthiocyano\nthiocyanogen\nthiodiazole\nthiodiphenylamine\nthiofuran\nthiofurane\nthiofurfuran\nthiofurfurane\nthiogycolic\nthiohydrate\nthiohydrolysis\nthiohydrolyze\nthioindigo\nthioketone\nthiol\nthiolacetic\nthiolactic\nthiolic\nthionamic\nthionaphthene\nthionate\nthionation\nthioneine\nthionic\nthionine\nthionitrite\nthionium\nthionobenzoic\nthionthiolic\nthionurate\nthionyl\nthionylamine\nthiophen\nthiophene\nthiophenic\nthiophenol\nthiophosgene\nthiophosphate\nthiophosphite\nthiophosphoric\nthiophosphoryl\nthiophthene\nthiopyran\nthioresorcinol\nthiosinamine\nThiospira\nthiostannate\nthiostannic\nthiostannite\nthiostannous\nthiosulphate\nthiosulphonic\nthiosulphuric\nThiothrix\nthiotolene\nthiotungstate\nthiotungstic\nthiouracil\nthiourea\nthiourethan\nthiourethane\nthioxene\nthiozone\nthiozonide\nthir\nthird\nthirdborough\nthirdings\nthirdling\nthirdly\nthirdness\nthirdsman\nthirl\nthirlage\nthirling\nthirst\nthirster\nthirstful\nthirstily\nthirstiness\nthirsting\nthirstingly\nthirstland\nthirstle\nthirstless\nthirstlessness\nthirstproof\nthirsty\nthirt\nthirteen\nthirteener\nthirteenfold\nthirteenth\nthirteenthly\nthirtieth\nthirty\nthirtyfold\nthirtyish\nthis\nthishow\nthislike\nthisn\nthisness\nthissen\nthistle\nthistlebird\nthistled\nthistledown\nthistlelike\nthistleproof\nthistlery\nthistlish\nthistly\nthiswise\nthither\nthitherto\nthitherward\nthitsiol\nthiuram\nthivel\nthixle\nthixolabile\nthixotropic\nthixotropy\nThlaspi\nThlingchadinne\nThlinget\nthlipsis\nTho\ntho\nthob\nthocht\nthof\nthoft\nthoftfellow\nthoke\nthokish\nthole\ntholeiite\ntholepin\ntholi\ntholoi\ntholos\ntholus\nThomaean\nThomas\nThomasa\nThomasine\nthomasing\nThomasite\nthomisid\nThomisidae\nThomism\nThomist\nThomistic\nThomistical\nThomite\nThomomys\nthomsenolite\nThomsonian\nThomsonianism\nthomsonite\nthon\nthonder\nThondracians\nThondraki\nThondrakians\nthone\nthong\nThonga\nthonged\nthongman\nthongy\nthoo\nthooid\nthoom\nthoracalgia\nthoracaorta\nthoracectomy\nthoracentesis\nthoraces\nthoracic\nThoracica\nthoracical\nthoracicoabdominal\nthoracicoacromial\nthoracicohumeral\nthoracicolumbar\nthoraciform\nthoracispinal\nthoracoabdominal\nthoracoacromial\nthoracobronchotomy\nthoracoceloschisis\nthoracocentesis\nthoracocyllosis\nthoracocyrtosis\nthoracodelphus\nthoracodidymus\nthoracodorsal\nthoracodynia\nthoracogastroschisis\nthoracograph\nthoracohumeral\nthoracolumbar\nthoracolysis\nthoracomelus\nthoracometer\nthoracometry\nthoracomyodynia\nthoracopagus\nthoracoplasty\nthoracoschisis\nthoracoscope\nthoracoscopy\nThoracostei\nthoracostenosis\nthoracostomy\nThoracostraca\nthoracostracan\nthoracostracous\nthoracotomy\nthoral\nthorascope\nthorax\nthore\nthoria\nthorianite\nthoriate\nthoric\nthoriferous\nthorina\nthorite\nthorium\nthorn\nthornback\nthornbill\nthornbush\nthorned\nthornen\nthornhead\nthornily\nthorniness\nthornless\nthornlessness\nthornlet\nthornlike\nthornproof\nthornstone\nthorntail\nthorny\nthoro\nthorocopagous\nthorogummite\nthoron\nthorough\nThoroughbred\nthoroughbred\nthoroughbredness\nthoroughfare\nthoroughfarer\nthoroughfaresome\nthoroughfoot\nthoroughgoing\nthoroughgoingly\nthoroughgoingness\nthoroughgrowth\nthoroughly\nthoroughness\nthoroughpaced\nthoroughpin\nthoroughsped\nthoroughstem\nthoroughstitch\nthoroughstitched\nthoroughwax\nthoroughwort\nthorp\nthort\nthorter\nthortveitite\nThos\nThose\nthose\nthou\nthough\nthought\nthoughted\nthoughten\nthoughtful\nthoughtfully\nthoughtfulness\nthoughtkin\nthoughtless\nthoughtlessly\nthoughtlessness\nthoughtlet\nthoughtness\nthoughtsick\nthoughty\nthousand\nthousandfold\nthousandfoldly\nthousandth\nthousandweight\nthouse\nthow\nthowel\nthowless\nthowt\nThraces\nThracian\nthrack\nthraep\nthrail\nthrain\nthrall\nthrallborn\nthralldom\nthram\nthrammle\nthrang\nthrangity\nthranite\nthranitic\nthrap\nthrapple\nthrash\nthrashel\nthrasher\nthrasherman\nthrashing\nthrasonic\nthrasonical\nthrasonically\nthrast\nThraupidae\nthrave\nthraver\nthraw\nthrawcrook\nthrawn\nthrawneen\nThrax\nthread\nthreadbare\nthreadbareness\nthreadbarity\nthreaded\nthreaden\nthreader\nthreadfin\nthreadfish\nthreadflower\nthreadfoot\nthreadiness\nthreadle\nthreadless\nthreadlet\nthreadlike\nthreadmaker\nthreadmaking\nthreadway\nthreadweed\nthreadworm\nthready\nthreap\nthreaper\nthreat\nthreaten\nthreatenable\nthreatener\nthreatening\nthreateningly\nthreatful\nthreatfully\nthreatless\nthreatproof\nthree\nthreefold\nthreefolded\nthreefoldedness\nthreefoldly\nthreefoldness\nthreeling\nthreeness\nthreepence\nthreepenny\nthreepennyworth\nthreescore\nthreesome\nthremmatology\nthrene\nthrenetic\nthrenetical\nthrenode\nthrenodial\nthrenodian\nthrenodic\nthrenodical\nthrenodist\nthrenody\nthrenos\nthreonin\nthreonine\nthreose\nthrepsology\nthreptic\nthresh\nthreshel\nthresher\nthresherman\nthreshingtime\nthreshold\nThreskiornithidae\nThreskiornithinae\nthrew\nthribble\nthrice\nthricecock\nthridacium\nthrift\nthriftbox\nthriftily\nthriftiness\nthriftless\nthriftlessly\nthriftlessness\nthriftlike\nthrifty\nthrill\nthriller\nthrillful\nthrillfully\nthrilling\nthrillingly\nthrillingness\nthrillproof\nthrillsome\nthrilly\nthrimble\nthrimp\nThrinax\nthring\nthrinter\nthrioboly\nthrip\nthripel\nThripidae\nthripple\nthrips\nthrive\nthriveless\nthriven\nthriver\nthriving\nthrivingly\nthrivingness\nthro\nthroat\nthroatal\nthroatband\nthroated\nthroatful\nthroatily\nthroatiness\nthroating\nthroatlash\nthroatlatch\nthroatless\nthroatlet\nthroatroot\nthroatstrap\nthroatwort\nthroaty\nthrob\nthrobber\nthrobbingly\nthrobless\nthrock\nthrodden\nthroddy\nthroe\nthrombase\nthrombin\nthromboangiitis\nthromboarteritis\nthrombocyst\nthrombocyte\nthrombocytopenia\nthrombogen\nthrombogenic\nthromboid\nthrombokinase\nthrombolymphangitis\nthrombopenia\nthrombophlebitis\nthromboplastic\nthromboplastin\nthrombose\nthrombosis\nthrombostasis\nthrombotic\nthrombus\nthronal\nthrone\nthronedom\nthroneless\nthronelet\nthronelike\nthroneward\nthrong\nthronger\nthrongful\nthrongingly\nthronize\nthropple\nthrostle\nthrostlelike\nthrottle\nthrottler\nthrottling\nthrottlingly\nthrou\nthrouch\nthroucht\nthrough\nthroughbear\nthroughbred\nthroughcome\nthroughgang\nthroughganging\nthroughgoing\nthroughgrow\nthroughknow\nthroughout\nthroughput\nthrove\nthrow\nthrowaway\nthrowback\nthrowdown\nthrower\nthrowing\nthrown\nthrowoff\nthrowout\nthrowster\nthrowwort\nthrum\nthrummer\nthrummers\nthrummy\nthrumwort\nthrush\nthrushel\nthrushlike\nthrushy\nthrust\nthruster\nthrustful\nthrustfulness\nthrusting\nthrustings\nthrutch\nthrutchings\nThruthvang\nthruv\nthrymsa\nThryonomys\nThuan\nThuban\nThucydidean\nthud\nthudding\nthuddingly\nthug\nthugdom\nthuggee\nthuggeeism\nthuggery\nthuggess\nthuggish\nthuggism\nThuidium\nThuja\nthujene\nthujin\nthujone\nThujopsis\nthujyl\nThule\nthulia\nthulir\nthulite\nthulium\nthulr\nthuluth\nthumb\nthumbbird\nthumbed\nthumber\nthumbkin\nthumble\nthumbless\nthumblike\nthumbmark\nthumbnail\nthumbpiece\nthumbprint\nthumbrope\nthumbscrew\nthumbstall\nthumbstring\nthumbtack\nthumby\nthumlungur\nthump\nthumper\nthumping\nthumpingly\nThunar\nThunbergia\nthunbergilene\nthunder\nthunderation\nthunderball\nthunderbearer\nthunderbearing\nthunderbird\nthunderblast\nthunderbolt\nthunderburst\nthunderclap\nthundercloud\nthundercrack\nthunderer\nthunderfish\nthunderflower\nthunderful\nthunderhead\nthunderheaded\nthundering\nthunderingly\nthunderless\nthunderlike\nthunderous\nthunderously\nthunderousness\nthunderpeal\nthunderplump\nthunderproof\nthundershower\nthundersmite\nthundersquall\nthunderstick\nthunderstone\nthunderstorm\nthunderstrike\nthunderstroke\nthunderstruck\nthunderwood\nthunderworm\nthunderwort\nthundery\nthundrous\nthundrously\nthung\nthunge\nThunnidae\nThunnus\nThunor\nthuoc\nThurberia\nthurible\nthuribuler\nthuribulum\nthurifer\nthuriferous\nthurificate\nthurificati\nthurification\nthurify\nThuringian\nthuringite\nThurio\nthurl\nthurm\nthurmus\nThurnia\nThurniaceae\nthurrock\nThursday\nthurse\nthurt\nthus\nthusgate\nThushi\nthusly\nthusness\nthuswise\nthutter\nThuyopsis\nthwack\nthwacker\nthwacking\nthwackingly\nthwackstave\nthwaite\nthwart\nthwartedly\nthwarteous\nthwarter\nthwarting\nthwartingly\nthwartly\nthwartman\nthwartness\nthwartover\nthwartsaw\nthwartship\nthwartships\nthwartways\nthwartwise\nthwite\nthwittle\nthy\nThyestean\nThyestes\nthyine\nthylacine\nthylacitis\nThylacoleo\nThylacynus\nthymacetin\nThymallidae\nThymallus\nthymate\nthyme\nthymectomize\nthymectomy\nthymegol\nThymelaea\nThymelaeaceae\nthymelaeaceous\nThymelaeales\nthymelcosis\nthymele\nthymelic\nthymelical\nthymelici\nthymene\nthymetic\nthymic\nthymicolymphatic\nthymine\nthymiosis\nthymitis\nthymocyte\nthymogenic\nthymol\nthymolate\nthymolize\nthymolphthalein\nthymolsulphonephthalein\nthymoma\nthymonucleic\nthymopathy\nthymoprivic\nthymoprivous\nthymopsyche\nthymoquinone\nthymotactic\nthymotic\nThymus\nthymus\nthymy\nthymyl\nthymylic\nthynnid\nThynnidae\nThyraden\nthyratron\nthyreoadenitis\nthyreoantitoxin\nthyreoarytenoid\nthyreoarytenoideus\nthyreocervical\nthyreocolloid\nThyreocoridae\nthyreoepiglottic\nthyreogenic\nthyreogenous\nthyreoglobulin\nthyreoglossal\nthyreohyal\nthyreohyoid\nthyreoid\nthyreoidal\nthyreoideal\nthyreoidean\nthyreoidectomy\nthyreoiditis\nthyreoitis\nthyreolingual\nthyreoprotein\nthyreosis\nthyreotomy\nthyreotoxicosis\nthyreotropic\nthyridial\nThyrididae\nthyridium\nThyris\nthyrisiferous\nthyroadenitis\nthyroantitoxin\nthyroarytenoid\nthyroarytenoideus\nthyrocardiac\nthyrocele\nthyrocervical\nthyrocolloid\nthyrocricoid\nthyroepiglottic\nthyroepiglottidean\nthyrogenic\nthyroglobulin\nthyroglossal\nthyrohyal\nthyrohyoid\nthyrohyoidean\nthyroid\nthyroidal\nthyroidea\nthyroideal\nthyroidean\nthyroidectomize\nthyroidectomy\nthyroidism\nthyroiditis\nthyroidization\nthyroidless\nthyroidotomy\nthyroiodin\nthyrolingual\nthyronine\nthyroparathyroidectomize\nthyroparathyroidectomy\nthyroprival\nthyroprivia\nthyroprivic\nthyroprivous\nthyroprotein\nThyrostraca\nthyrostracan\nthyrotherapy\nthyrotomy\nthyrotoxic\nthyrotoxicosis\nthyrotropic\nthyroxine\nthyrse\nthyrsiflorous\nthyrsiform\nthyrsoid\nthyrsoidal\nthyrsus\nThysanocarpus\nthysanopter\nThysanoptera\nthysanopteran\nthysanopteron\nthysanopterous\nThysanoura\nthysanouran\nthysanourous\nThysanura\nthysanuran\nthysanurian\nthysanuriform\nthysanurous\nthysel\nthyself\nthysen\nTi\nti\nTiahuanacan\nTiam\ntiang\ntiao\ntiar\ntiara\ntiaralike\ntiarella\nTiatinagua\ntib\nTibbie\nTibbu\ntibby\nTiberian\nTiberine\nTiberius\ntibet\nTibetan\ntibey\ntibia\ntibiad\ntibiae\ntibial\ntibiale\ntibicinist\ntibiocalcanean\ntibiofemoral\ntibiofibula\ntibiofibular\ntibiometatarsal\ntibionavicular\ntibiopopliteal\ntibioscaphoid\ntibiotarsal\ntibiotarsus\nTibouchina\ntibourbou\ntiburon\nTiburtine\ntic\ntical\nticca\ntice\nticement\nticer\nTichodroma\ntichodrome\ntichorrhine\ntick\ntickbean\ntickbird\ntickeater\nticked\nticken\nticker\nticket\nticketer\nticketing\nticketless\nticketmonger\ntickey\ntickicide\ntickie\nticking\ntickle\ntickleback\nticklebrain\ntickled\nticklely\nticklenburg\ntickleness\ntickleproof\ntickler\nticklesome\ntickless\ntickleweed\ntickling\nticklingly\nticklish\nticklishly\nticklishness\ntickly\ntickney\ntickproof\ntickseed\ntickseeded\nticktack\nticktacker\nticktacktoe\nticktick\nticktock\ntickweed\nticky\nticul\nTicuna\nTicunan\ntid\ntidal\ntidally\ntidbit\ntiddle\ntiddledywinks\ntiddler\ntiddley\ntiddling\ntiddlywink\ntiddlywinking\ntiddy\ntide\ntided\ntideful\ntidehead\ntideland\ntideless\ntidelessness\ntidelike\ntidely\ntidemaker\ntidemaking\ntidemark\ntiderace\ntidesman\ntidesurveyor\nTideswell\ntidewaiter\ntidewaitership\ntideward\ntidewater\ntideway\ntidiable\ntidily\ntidiness\ntiding\ntidingless\ntidings\ntidley\ntidological\ntidology\ntidy\ntidyism\ntidytips\ntie\ntieback\ntied\nTiefenthal\ntiemaker\ntiemaking\ntiemannite\ntien\ntiepin\ntier\ntierce\ntierced\ntierceron\ntiered\ntierer\ntierlike\ntiersman\ntietick\ntiewig\ntiewigged\ntiff\ntiffany\ntiffanyite\ntiffie\ntiffin\ntiffish\ntiffle\ntiffy\ntifinagh\ntift\ntifter\ntig\ntige\ntigella\ntigellate\ntigelle\ntigellum\ntigellus\ntiger\ntigerbird\ntigereye\ntigerflower\ntigerfoot\ntigerhearted\ntigerhood\ntigerish\ntigerishly\ntigerishness\ntigerism\ntigerkin\ntigerlike\ntigerling\ntigerly\ntigernut\ntigerproof\ntigerwood\ntigery\nTigger\ntigger\ntight\ntighten\ntightener\ntightfisted\ntightish\ntightly\ntightness\ntightrope\ntights\ntightwad\ntightwire\ntiglaldehyde\ntiglic\ntiglinic\ntignum\nTigrai\nTigre\nTigrean\ntigress\ntigresslike\nTigridia\nTigrina\ntigrine\nTigris\ntigroid\ntigrolysis\ntigrolytic\ntigtag\nTigua\nTigurine\nTiki\ntikitiki\ntikka\ntikker\ntiklin\ntikolosh\ntikor\ntikur\ntil\ntilaite\ntilaka\ntilasite\ntilbury\nTilda\ntilde\ntile\ntiled\ntilefish\ntilelike\ntilemaker\ntilemaking\ntiler\ntileroot\ntilery\ntileseed\ntilestone\ntileways\ntilework\ntileworks\ntilewright\ntileyard\nTilia\nTiliaceae\ntiliaceous\ntilikum\ntiling\ntill\ntillable\nTillaea\nTillaeastrum\ntillage\nTillamook\nTillandsia\ntiller\ntillering\ntillerless\ntillerman\nTilletia\nTilletiaceae\ntilletiaceous\ntilley\ntillite\ntillodont\nTillodontia\nTillodontidae\ntillot\ntillotter\ntilly\ntilmus\ntilpah\nTilsit\ntilt\ntiltable\ntiltboard\ntilter\ntilth\ntilting\ntiltlike\ntiltmaker\ntiltmaking\ntiltup\ntilty\ntiltyard\ntilyer\nTim\ntimable\nTimaeus\nTimalia\nTimaliidae\nTimaliinae\ntimaliine\ntimaline\nTimani\ntimar\ntimarau\ntimawa\ntimazite\ntimbal\ntimbale\ntimbang\ntimbe\ntimber\ntimbered\ntimberer\ntimberhead\ntimbering\ntimberjack\ntimberland\ntimberless\ntimberlike\ntimberling\ntimberman\ntimbermonger\ntimbern\ntimbersome\ntimbertuned\ntimberwood\ntimberwork\ntimberwright\ntimbery\ntimberyard\nTimbira\ntimbo\ntimbre\ntimbrel\ntimbreled\ntimbreler\ntimbrologist\ntimbrology\ntimbromania\ntimbromaniac\ntimbromanist\ntimbrophilic\ntimbrophilism\ntimbrophilist\ntimbrophily\ntime\ntimeable\ntimecard\ntimed\ntimeful\ntimefully\ntimefulness\ntimekeep\ntimekeeper\ntimekeepership\ntimeless\ntimelessly\ntimelessness\nTimelia\nTimeliidae\ntimeliine\ntimelily\ntimeliness\ntimeling\ntimely\ntimenoguy\ntimeous\ntimeously\ntimepiece\ntimepleaser\ntimeproof\ntimer\ntimes\ntimesaver\ntimesaving\ntimeserver\ntimeserving\ntimeservingness\ntimetable\ntimetaker\ntimetaking\ntimeward\ntimework\ntimeworker\ntimeworn\nTimias\ntimid\ntimidity\ntimidly\ntimidness\ntiming\ntimish\ntimist\nTimne\nTimo\ntimocracy\ntimocratic\ntimocratical\nTimon\ntimon\ntimoneer\nTimonian\nTimonism\nTimonist\nTimonize\ntimor\nTimorese\ntimorous\ntimorously\ntimorousness\nTimote\nTimotean\nTimothean\nTimothy\ntimothy\ntimpani\ntimpanist\ntimpano\nTimucua\nTimucuan\nTimuquan\nTimuquanan\ntin\nTina\nTinamidae\ntinamine\ntinamou\ntinampipi\ntincal\ntinchel\ntinchill\ntinclad\ntinct\ntinction\ntinctorial\ntinctorially\ntinctorious\ntinctumutation\ntincture\ntind\ntindal\ntindalo\ntinder\ntinderbox\ntindered\ntinderish\ntinderlike\ntinderous\ntindery\ntine\ntinea\ntineal\ntinean\ntined\ntinegrass\ntineid\nTineidae\nTineina\ntineine\ntineman\ntineoid\nTineoidea\ntinetare\ntinety\ntineweed\ntinful\nTing\nting\ntinge\ntinged\ntinger\nTinggian\ntingi\ntingibility\ntingible\ntingid\nTingidae\nTingis\ntingitid\nTingitidae\ntinglass\ntingle\ntingler\ntingletangle\ntingling\ntinglingly\ntinglish\ntingly\ntingtang\ntinguaite\ntinguaitic\nTinguian\ntinguy\ntinhorn\ntinhouse\ntinily\ntininess\ntining\ntink\ntinker\ntinkerbird\ntinkerdom\ntinkerer\ntinkerlike\ntinkerly\ntinkershire\ntinkershue\ntinkerwise\ntinkle\ntinkler\ntinklerman\ntinkling\ntinklingly\ntinkly\ntinlet\ntinlike\ntinman\nTinne\ntinned\ntinner\ntinnery\ntinnet\nTinni\ntinnified\ntinnily\ntinniness\ntinning\ntinnitus\ntinnock\ntinny\nTino\nTinoceras\ntinosa\ntinsel\ntinsellike\ntinselly\ntinselmaker\ntinselmaking\ntinselry\ntinselweaver\ntinselwork\ntinsman\ntinsmith\ntinsmithing\ntinsmithy\ntinstone\ntinstuff\ntint\ntinta\ntintage\ntintamarre\ntintarron\ntinted\ntinter\ntintie\ntintiness\ntinting\ntintingly\ntintinnabula\ntintinnabulant\ntintinnabular\ntintinnabulary\ntintinnabulate\ntintinnabulation\ntintinnabulatory\ntintinnabulism\ntintinnabulist\ntintinnabulous\ntintinnabulum\ntintist\ntintless\ntintometer\ntintometric\ntintometry\ntinty\ntintype\ntintyper\ntinwald\ntinware\ntinwoman\ntinwork\ntinworker\ntinworking\ntiny\ntinzenite\nTionontates\nTionontati\nTiou\ntip\ntipburn\ntipcart\ntipcat\ntipe\ntipful\ntiphead\nTiphia\nTiphiidae\ntipiti\ntiple\ntipless\ntiplet\ntipman\ntipmost\ntiponi\ntippable\ntipped\ntippee\ntipper\ntippet\ntipping\ntipple\ntippleman\ntippler\ntipply\ntipproof\ntippy\ntipsification\ntipsifier\ntipsify\ntipsily\ntipsiness\ntipstaff\ntipster\ntipstock\ntipsy\ntiptail\ntipteerer\ntiptilt\ntiptoe\ntiptoeing\ntiptoeingly\ntiptop\ntiptopness\ntiptopper\ntiptoppish\ntiptoppishness\ntiptopsome\nTipula\nTipularia\ntipulid\nTipulidae\ntipuloid\nTipuloidea\ntipup\nTipura\ntirade\ntiralee\ntire\ntired\ntiredly\ntiredness\ntiredom\ntirehouse\ntireless\ntirelessly\ntirelessness\ntiremaid\ntiremaker\ntiremaking\ntireman\ntirer\ntireroom\ntiresmith\ntiresome\ntiresomely\ntiresomeness\ntiresomeweed\ntirewoman\nTirhutia\ntiriba\ntiring\ntiringly\ntirl\ntirma\ntirocinium\nTirolean\nTirolese\nTironian\ntirr\ntirralirra\ntirret\nTirribi\ntirrivee\ntirrlie\ntirrwirr\ntirthankara\nTirurai\ntirve\ntirwit\ntisane\ntisar\nTishiya\nTishri\nTisiphone\ntissual\ntissue\ntissued\ntissueless\ntissuelike\ntissuey\ntisswood\ntiswin\ntit\nTitan\ntitanate\ntitanaugite\nTitanesque\nTitaness\ntitania\nTitanian\nTitanic\ntitanic\nTitanical\nTitanically\nTitanichthyidae\nTitanichthys\ntitaniferous\ntitanifluoride\nTitanism\ntitanite\ntitanitic\ntitanium\nTitanlike\ntitano\ntitanocolumbate\ntitanocyanide\ntitanofluoride\nTitanolater\nTitanolatry\nTitanomachia\nTitanomachy\ntitanomagnetite\ntitanoniobate\ntitanosaur\nTitanosaurus\ntitanosilicate\ntitanothere\nTitanotheridae\nTitanotherium\ntitanous\ntitanyl\ntitar\ntitbit\ntitbitty\ntite\ntiter\ntiteration\ntitfish\ntithable\ntithal\ntithe\ntithebook\ntitheless\ntithemonger\ntithepayer\ntither\ntitheright\ntithing\ntithingman\ntithingpenny\ntithonic\ntithonicity\ntithonographic\ntithonometer\nTithymalopsis\nTithymalus\ntiti\nTitian\ntitian\nTitianesque\nTitianic\ntitien\nTities\ntitilate\ntitillability\ntitillant\ntitillater\ntitillating\ntitillatingly\ntitillation\ntitillative\ntitillator\ntitillatory\ntitivate\ntitivation\ntitivator\ntitlark\ntitle\ntitleboard\ntitled\ntitledom\ntitleholder\ntitleless\ntitleproof\ntitler\ntitleship\ntitlike\ntitling\ntitlist\ntitmal\ntitman\nTitmarsh\nTitmarshian\ntitmouse\nTitoism\nTitoist\ntitoki\ntitrable\ntitratable\ntitrate\ntitration\ntitre\ntitrimetric\ntitrimetry\ntitter\ntitterel\ntitterer\ntittering\ntitteringly\ntittery\ntittie\ntittle\ntittlebat\ntittler\ntittup\ntittupy\ntitty\ntittymouse\ntitubancy\ntitubant\ntitubantly\ntitubate\ntitubation\ntitular\ntitularity\ntitularly\ntitulary\ntitulation\ntitule\ntitulus\nTiturel\nTitus\ntiver\nTivoli\ntivoli\ntivy\nTiwaz\ntiza\ntizeur\ntizzy\ntjanting\ntji\ntjosite\ntlaco\nTlakluit\nTlapallan\nTlascalan\nTlingit\ntmema\nTmesipteris\ntmesis\nto\ntoa\ntoad\ntoadback\ntoadeat\ntoadeater\ntoader\ntoadery\ntoadess\ntoadfish\ntoadflax\ntoadflower\ntoadhead\ntoadier\ntoadish\ntoadless\ntoadlet\ntoadlike\ntoadlikeness\ntoadling\ntoadpipe\ntoadroot\ntoadship\ntoadstone\ntoadstool\ntoadstoollike\ntoadwise\ntoady\ntoadyish\ntoadyism\ntoadyship\nToag\ntoast\ntoastable\ntoastee\ntoaster\ntoastiness\ntoastmaster\ntoastmastery\ntoastmistress\ntoasty\ntoat\ntoatoa\nToba\ntobacco\ntobaccofied\ntobaccoism\ntobaccoite\ntobaccoless\ntobaccolike\ntobaccoman\ntobacconalian\ntobacconist\ntobacconistical\ntobacconize\ntobaccophil\ntobaccoroot\ntobaccoweed\ntobaccowood\ntobaccoy\ntobe\nTobiah\nTobias\nTobikhar\ntobine\ntobira\ntoboggan\ntobogganeer\ntobogganer\ntobogganist\nToby\ntoby\ntobyman\ntocalote\ntoccata\nTocharese\nTocharian\nTocharic\nTocharish\ntocher\ntocherless\ntock\ntoco\nTocobaga\ntocodynamometer\ntocogenetic\ntocogony\ntocokinin\ntocological\ntocologist\ntocology\ntocome\ntocometer\ntocopherol\ntocororo\ntocsin\ntocusso\nTod\ntod\nToda\ntoday\ntodayish\nTodd\ntodder\ntoddick\ntoddite\ntoddle\ntoddlekins\ntoddler\ntoddy\ntoddyize\ntoddyman\ntode\nTodea\nTodidae\nTodus\ntody\ntoe\ntoeboard\ntoecap\ntoecapped\ntoed\ntoeless\ntoelike\ntoellite\ntoenail\ntoeplate\nToerless\ntoernebohmite\ntoetoe\ntoff\ntoffee\ntoffeeman\ntoffing\ntoffish\ntoffy\ntoffyman\nTofieldia\nToft\ntoft\ntofter\ntoftman\ntoftstead\ntofu\ntog\ntoga\ntogaed\ntogalike\ntogata\ntogate\ntogated\ntogawise\ntogether\ntogetherhood\ntogetheriness\ntogetherness\ntoggel\ntoggery\ntoggle\ntoggler\ntogless\ntogs\ntogt\ntogue\ntoher\ntoheroa\ntoho\nTohome\ntohubohu\ntohunga\ntoi\ntoil\ntoiled\ntoiler\ntoilet\ntoileted\ntoiletry\ntoilette\ntoiletted\ntoiletware\ntoilful\ntoilfully\ntoilinet\ntoiling\ntoilingly\ntoilless\ntoillessness\ntoilsome\ntoilsomely\ntoilsomeness\ntoilworn\ntoise\ntoit\ntoitish\ntoity\nTokay\ntokay\ntoke\nTokelau\ntoken\ntokened\ntokenless\ntoko\ntokology\ntokonoma\ntokopat\ntol\ntolamine\ntolan\ntolane\ntolbooth\ntold\ntoldo\ntole\nToledan\nToledo\nToledoan\ntolerability\ntolerable\ntolerableness\ntolerablish\ntolerably\ntolerance\ntolerancy\nTolerant\ntolerant\ntolerantism\ntolerantly\ntolerate\ntoleration\ntolerationism\ntolerationist\ntolerative\ntolerator\ntolerism\nToletan\ntolfraedic\ntolguacha\ntolidine\ntolite\ntoll\ntollable\ntollage\ntollbooth\nTollefsen\ntoller\ntollery\ntollgate\ntollgatherer\ntollhouse\ntolliker\ntolling\ntollkeeper\ntollman\ntollmaster\ntollpenny\ntolltaker\ntolly\nTolowa\ntolpatch\ntolpatchery\ntolsester\ntolsey\nTolstoyan\nTolstoyism\nTolstoyist\ntolt\nToltec\nToltecan\ntolter\ntolu\ntolualdehyde\ntoluate\ntoluene\ntoluic\ntoluide\ntoluidide\ntoluidine\ntoluidino\ntoluido\nToluifera\ntolunitrile\ntoluol\ntoluquinaldine\ntolusafranine\ntoluyl\ntoluylene\ntoluylenediamine\ntoluylic\ntolyl\ntolylene\ntolylenediamine\nTolypeutes\ntolypeutine\nTom\nToma\ntomahawk\ntomahawker\ntomalley\ntoman\nTomas\ntomatillo\ntomato\ntomb\ntombac\ntombal\ntombe\ntombic\ntombless\ntomblet\ntomblike\ntombola\ntombolo\ntomboy\ntomboyful\ntomboyish\ntomboyishly\ntomboyishness\ntomboyism\ntombstone\ntomcat\ntomcod\ntome\ntomeful\ntomelet\ntoment\ntomentose\ntomentous\ntomentulose\ntomentum\ntomfool\ntomfoolery\ntomfoolish\ntomfoolishness\ntomial\ntomin\ntomish\nTomistoma\ntomium\ntomjohn\nTomkin\ntomkin\nTommer\nTomming\nTommy\ntommy\ntommybag\ntommycod\ntommyrot\ntomnoddy\ntomnoup\ntomogram\ntomographic\ntomography\nTomopteridae\nTomopteris\ntomorn\ntomorrow\ntomorrower\ntomorrowing\ntomorrowness\ntomosis\nTompion\ntompiper\ntompon\ntomtate\ntomtit\nTomtitmouse\nton\ntonal\ntonalamatl\ntonalist\ntonalite\ntonalitive\ntonality\ntonally\ntonant\ntonation\ntondino\ntone\ntoned\ntoneless\ntonelessly\ntonelessness\ntoneme\ntoneproof\ntoner\ntonetic\ntonetically\ntonetician\ntonetics\ntong\nTonga\ntonga\nTongan\nTongas\ntonger\ntongkang\ntongman\nTongrian\ntongs\ntongsman\ntongue\ntonguecraft\ntongued\ntonguedoughty\ntonguefence\ntonguefencer\ntongueflower\ntongueful\ntongueless\ntonguelet\ntonguelike\ntongueman\ntonguemanship\ntongueplay\ntongueproof\ntonguer\ntongueshot\ntonguesman\ntonguesore\ntonguester\ntonguetip\ntonguey\ntonguiness\ntonguing\ntonic\ntonically\ntonicity\ntonicize\ntonicobalsamic\ntonicoclonic\ntonicostimulant\ntonify\ntonight\nTonikan\ntonish\ntonishly\ntonishness\ntonite\ntonitrocirrus\ntonitruant\ntonitruone\ntonitruous\ntonjon\ntonk\nTonkawa\nTonkawan\ntonkin\nTonkinese\ntonlet\nTonna\ntonnage\ntonneau\ntonneaued\ntonner\ntonnish\ntonnishly\ntonnishness\ntonoclonic\ntonogram\ntonograph\ntonological\ntonology\ntonometer\ntonometric\ntonometry\ntonophant\ntonoplast\ntonoscope\ntonotactic\ntonotaxis\ntonous\ntonsbergite\ntonsil\ntonsilectomy\ntonsilitic\ntonsillar\ntonsillary\ntonsillectome\ntonsillectomic\ntonsillectomize\ntonsillectomy\ntonsillith\ntonsillitic\ntonsillitis\ntonsillolith\ntonsillotome\ntonsillotomy\ntonsilomycosis\ntonsor\ntonsorial\ntonsurate\ntonsure\ntonsured\ntontine\ntontiner\nTonto\ntonus\nTony\ntony\ntonyhoop\ntoo\ntoodle\ntoodleloodle\ntook\ntooken\ntool\ntoolbox\ntoolbuilder\ntoolbuilding\ntooler\ntoolhead\ntoolholder\ntoolholding\ntooling\ntoolless\ntoolmaker\ntoolmaking\ntoolman\ntoolmark\ntoolmarking\ntoolplate\ntoolroom\ntoolsetter\ntoolslide\ntoolsmith\ntoolstock\ntoolstone\ntoom\ntoomly\ntoon\nToona\ntoonwood\ntoop\ntoorie\ntoorock\ntooroo\ntoosh\ntoot\ntooter\ntooth\ntoothache\ntoothaching\ntoothachy\ntoothbill\ntoothbrush\ntoothbrushy\ntoothchiseled\ntoothcomb\ntoothcup\ntoothdrawer\ntoothdrawing\ntoothed\ntoother\ntoothflower\ntoothful\ntoothill\ntoothing\ntoothless\ntoothlessly\ntoothlessness\ntoothlet\ntoothleted\ntoothlike\ntoothpick\ntoothplate\ntoothproof\ntoothsome\ntoothsomely\ntoothsomeness\ntoothstick\ntoothwash\ntoothwork\ntoothwort\ntoothy\ntootle\ntootler\ntootlish\ntootsy\ntoozle\ntoozoo\ntop\ntopalgia\ntoparch\ntoparchia\ntoparchical\ntoparchy\ntopass\nTopatopa\ntopaz\ntopazfels\ntopazine\ntopazite\ntopazolite\ntopazy\ntopcap\ntopcast\ntopchrome\ntopcoat\ntopcoating\ntope\ntopectomy\ntopee\ntopeewallah\ntopeng\ntopepo\ntoper\ntoperdom\ntopesthesia\ntopflight\ntopfull\ntopgallant\ntoph\ntophaceous\ntophaike\nTophet\ntophetic\ntophetize\ntophus\ntophyperidrosis\ntopi\ntopia\ntopiarian\ntopiarist\ntopiarius\ntopiary\ntopic\ntopical\ntopicality\ntopically\ntopinambou\nTopinish\ntopknot\ntopknotted\ntopless\ntoplighted\ntoplike\ntopline\ntoploftical\ntoploftily\ntoploftiness\ntoplofty\ntopmaker\ntopmaking\ntopman\ntopmast\ntopmost\ntopmostly\ntopnotch\ntopnotcher\ntopo\ntopoalgia\ntopochemical\ntopognosia\ntopognosis\ntopograph\ntopographer\ntopographic\ntopographical\ntopographically\ntopographics\ntopographist\ntopographize\ntopographometric\ntopography\ntopolatry\ntopologic\ntopological\ntopologist\ntopology\ntoponarcosis\ntoponym\ntoponymal\ntoponymic\ntoponymical\ntoponymics\ntoponymist\ntoponymy\ntopophobia\ntopophone\ntopotactic\ntopotaxis\ntopotype\ntopotypic\ntopotypical\ntopped\ntopper\ntoppiece\ntopping\ntoppingly\ntoppingness\ntopple\ntoppler\ntopply\ntoppy\ntoprail\ntoprope\ntops\ntopsail\ntopsailite\ntopside\ntopsl\ntopsman\ntopsoil\ntopstone\ntopswarm\nTopsy\ntopsyturn\ntoptail\ntopwise\ntoque\nTor\ntor\ntora\ntorah\nToraja\ntoral\ntoran\ntorbanite\ntorbanitic\ntorbernite\ntorc\ntorcel\ntorch\ntorchbearer\ntorchbearing\ntorcher\ntorchless\ntorchlight\ntorchlighted\ntorchlike\ntorchman\ntorchon\ntorchweed\ntorchwood\ntorchwort\ntorcular\ntorculus\ntordrillite\ntore\ntoreador\ntored\nTorenia\ntorero\ntoreumatography\ntoreumatology\ntoreutic\ntoreutics\ntorfaceous\ntorfel\ntorgoch\nTorgot\ntoric\nToriest\nTorified\ntorii\nTorilis\nTorinese\nToriness\ntorma\ntormen\ntorment\ntormenta\ntormentable\ntormentation\ntormentative\ntormented\ntormentedly\ntormentful\ntormentil\ntormentilla\ntormenting\ntormentingly\ntormentingness\ntormentive\ntormentor\ntormentous\ntormentress\ntormentry\ntormentum\ntormina\ntorminal\ntorminous\ntormodont\ntorn\ntornachile\ntornade\ntornadic\ntornado\ntornadoesque\ntornadoproof\ntornal\ntornaria\ntornarian\ntornese\ntorney\ntornillo\nTornit\ntornote\ntornus\ntoro\ntoroid\ntoroidal\ntorolillo\nToromona\nTorontonian\ntororokombu\nTorosaurus\ntorose\ntorosity\ntorotoro\ntorous\ntorpedineer\nTorpedinidae\ntorpedinous\ntorpedo\ntorpedoer\ntorpedoist\ntorpedolike\ntorpedoplane\ntorpedoproof\ntorpent\ntorpescence\ntorpescent\ntorpid\ntorpidity\ntorpidly\ntorpidness\ntorpify\ntorpitude\ntorpor\ntorporific\ntorporize\ntorquate\ntorquated\ntorque\ntorqued\ntorques\ntorrefaction\ntorrefication\ntorrefy\ntorrent\ntorrentful\ntorrentfulness\ntorrential\ntorrentiality\ntorrentially\ntorrentine\ntorrentless\ntorrentlike\ntorrentuous\ntorrentwise\nTorreya\nTorricellian\ntorrid\ntorridity\ntorridly\ntorridness\nTorridonian\nTorrubia\ntorsade\ntorse\ntorsel\ntorsibility\ntorsigraph\ntorsile\ntorsimeter\ntorsiogram\ntorsiograph\ntorsiometer\ntorsion\ntorsional\ntorsionally\ntorsioning\ntorsionless\ntorsive\ntorsk\ntorso\ntorsoclusion\ntorsometer\ntorsoocclusion\nTorsten\ntort\ntorta\ntorteau\ntorticollar\ntorticollis\ntorticone\ntortile\ntortility\ntortilla\ntortille\ntortious\ntortiously\ntortive\ntortoise\ntortoiselike\nTortonian\ntortrices\ntortricid\nTortricidae\nTortricina\ntortricine\ntortricoid\nTortricoidea\nTortrix\ntortula\nTortulaceae\ntortulaceous\ntortulous\ntortuose\ntortuosity\ntortuous\ntortuously\ntortuousness\ntorturable\ntorturableness\ntorture\ntortured\ntorturedly\ntortureproof\ntorturer\ntorturesome\ntorturing\ntorturingly\ntorturous\ntorturously\ntoru\ntorula\ntorulaceous\ntorulaform\ntoruliform\ntorulin\ntoruloid\ntorulose\ntorulosis\ntorulous\ntorulus\ntorus\ntorve\ntorvid\ntorvity\ntorvous\nTory\ntory\nTorydom\nToryess\nToryfication\nToryfy\ntoryhillite\nToryish\nToryism\nToryistic\nToryize\nToryship\ntoryweed\ntosaphist\ntosaphoth\ntoscanite\nTosephta\nTosephtas\ntosh\ntoshakhana\ntosher\ntoshery\ntoshly\ntoshnail\ntoshy\ntosily\nTosk\nToskish\ntoss\ntosser\ntossicated\ntossily\ntossing\ntossingly\ntossment\ntosspot\ntossup\ntossy\ntost\ntosticate\ntostication\ntoston\ntosy\ntot\ntotal\ntotalitarian\ntotalitarianism\ntotality\ntotalization\ntotalizator\ntotalize\ntotalizer\ntotally\ntotalness\ntotanine\nTotanus\ntotaquin\ntotaquina\ntotaquine\ntotara\ntotchka\ntote\ntoteload\ntotem\ntotemic\ntotemically\ntotemism\ntotemist\ntotemistic\ntotemite\ntotemization\ntotemy\ntoter\ntother\ntotient\nTotipalmatae\ntotipalmate\ntotipalmation\ntotipotence\ntotipotency\ntotipotent\ntotipotential\ntotipotentiality\ntotitive\ntoto\nTotonac\nTotonacan\nTotonaco\ntotora\nTotoro\ntotquot\ntotter\ntotterer\ntottergrass\ntottering\ntotteringly\ntotterish\ntottery\nTottie\ntotting\ntottle\ntottlish\ntotty\ntottyhead\ntotuava\ntotum\ntoty\ntotyman\ntou\ntoucan\ntoucanet\nToucanid\ntouch\ntouchable\ntouchableness\ntouchback\ntouchbell\ntouchbox\ntouchdown\ntouched\ntouchedness\ntoucher\ntouchhole\ntouchily\ntouchiness\ntouching\ntouchingly\ntouchingness\ntouchless\ntouchline\ntouchous\ntouchpan\ntouchpiece\ntouchstone\ntouchwood\ntouchy\nToufic\ntoug\ntough\ntoughen\ntoughener\ntoughhead\ntoughhearted\ntoughish\ntoughly\ntoughness\ntought\ntould\ntoumnah\nTounatea\ntoup\ntoupee\ntoupeed\ntoupet\ntour\ntouraco\ntourbillion\ntourer\ntourette\ntouring\ntourism\ntourist\ntouristdom\ntouristic\ntouristproof\ntouristry\ntouristship\ntouristy\ntourize\ntourmaline\ntourmalinic\ntourmaliniferous\ntourmalinization\ntourmalinize\ntourmalite\ntourn\ntournament\ntournamental\ntournant\ntournasin\ntournay\ntournee\nTournefortia\nTournefortian\ntourney\ntourneyer\ntourniquet\ntourte\ntousche\ntouse\ntouser\ntousle\ntously\ntousy\ntout\ntouter\nTovah\ntovar\nTovaria\nTovariaceae\ntovariaceous\ntovarish\ntow\ntowable\ntowage\ntowai\ntowan\ntoward\ntowardliness\ntowardly\ntowardness\ntowards\ntowboat\ntowcock\ntowd\ntowel\ntowelette\ntoweling\ntowelry\ntower\ntowered\ntowering\ntoweringly\ntowerless\ntowerlet\ntowerlike\ntowerman\ntowerproof\ntowerwise\ntowerwork\ntowerwort\ntowery\ntowght\ntowhead\ntowheaded\ntowhee\ntowing\ntowkay\ntowlike\ntowline\ntowmast\ntown\ntowned\ntownee\ntowner\ntownet\ntownfaring\ntownfolk\ntownful\ntowngate\ntownhood\ntownify\ntowniness\ntownish\ntownishly\ntownishness\ntownist\ntownland\ntownless\ntownlet\ntownlike\ntownling\ntownly\ntownman\ntownsboy\ntownscape\nTownsendia\nTownsendite\ntownsfellow\ntownsfolk\ntownship\ntownside\ntownsite\ntownsman\ntownspeople\ntownswoman\ntownward\ntownwards\ntownwear\ntowny\ntowpath\ntowrope\ntowser\ntowy\ntox\ntoxa\ntoxalbumic\ntoxalbumin\ntoxalbumose\ntoxamin\ntoxanemia\ntoxaphene\ntoxcatl\ntoxemia\ntoxemic\ntoxic\ntoxicaemia\ntoxical\ntoxically\ntoxicant\ntoxicarol\ntoxication\ntoxicemia\ntoxicity\ntoxicodendrol\nToxicodendron\ntoxicoderma\ntoxicodermatitis\ntoxicodermatosis\ntoxicodermia\ntoxicodermitis\ntoxicogenic\ntoxicognath\ntoxicohaemia\ntoxicohemia\ntoxicoid\ntoxicologic\ntoxicological\ntoxicologically\ntoxicologist\ntoxicology\ntoxicomania\ntoxicopathic\ntoxicopathy\ntoxicophagous\ntoxicophagy\ntoxicophidia\ntoxicophobia\ntoxicosis\ntoxicotraumatic\ntoxicum\ntoxidermic\ntoxidermitis\ntoxifer\nToxifera\ntoxiferous\ntoxigenic\ntoxihaemia\ntoxihemia\ntoxiinfection\ntoxiinfectious\ntoxin\ntoxinemia\ntoxinfection\ntoxinfectious\ntoxinosis\ntoxiphobia\ntoxiphobiac\ntoxiphoric\ntoxitabellae\ntoxity\nToxodon\ntoxodont\nToxodontia\ntoxogenesis\nToxoglossa\ntoxoglossate\ntoxoid\ntoxology\ntoxolysis\ntoxon\ntoxone\ntoxonosis\ntoxophil\ntoxophile\ntoxophilism\ntoxophilite\ntoxophilitic\ntoxophilitism\ntoxophilous\ntoxophily\ntoxophoric\ntoxophorous\ntoxoplasmosis\ntoxosis\ntoxosozin\nToxostoma\ntoxotae\nToxotes\nToxotidae\nToxylon\ntoy\ntoydom\ntoyer\ntoyful\ntoyfulness\ntoyhouse\ntoying\ntoyingly\ntoyish\ntoyishly\ntoyishness\ntoyland\ntoyless\ntoylike\ntoymaker\ntoymaking\ntoyman\ntoyon\ntoyshop\ntoysome\ntoytown\ntoywoman\ntoywort\ntoze\ntozee\ntozer\ntra\ntrabacolo\ntrabal\ntrabant\ntrabascolo\ntrabea\ntrabeae\ntrabeatae\ntrabeated\ntrabeation\ntrabecula\ntrabecular\ntrabecularism\ntrabeculate\ntrabeculated\ntrabeculation\ntrabecule\ntrabuch\ntrabucho\nTracaulon\ntrace\ntraceability\ntraceable\ntraceableness\ntraceably\ntraceless\ntracelessly\ntracer\ntraceried\ntracery\nTracey\ntrachea\ntracheaectasy\ntracheal\ntrachealgia\ntrachealis\ntrachean\nTrachearia\ntrachearian\ntracheary\nTracheata\ntracheate\ntracheation\ntracheid\ntracheidal\ntracheitis\ntrachelagra\ntrachelate\ntrachelectomopexia\ntrachelectomy\ntrachelismus\ntrachelitis\ntrachelium\ntracheloacromialis\ntrachelobregmatic\ntracheloclavicular\ntrachelocyllosis\ntrachelodynia\ntrachelology\ntrachelomastoid\ntrachelopexia\ntracheloplasty\ntrachelorrhaphy\ntracheloscapular\nTrachelospermum\ntrachelotomy\ntrachenchyma\ntracheobronchial\ntracheobronchitis\ntracheocele\ntracheochromatic\ntracheoesophageal\ntracheofissure\ntracheolar\ntracheolaryngeal\ntracheolaryngotomy\ntracheole\ntracheolingual\ntracheopathia\ntracheopathy\ntracheopharyngeal\nTracheophonae\ntracheophone\ntracheophonesis\ntracheophonine\ntracheophony\ntracheoplasty\ntracheopyosis\ntracheorrhagia\ntracheoschisis\ntracheoscopic\ntracheoscopist\ntracheoscopy\ntracheostenosis\ntracheostomy\ntracheotome\ntracheotomist\ntracheotomize\ntracheotomy\nTrachinidae\ntrachinoid\nTrachinus\ntrachitis\ntrachle\nTrachodon\ntrachodont\ntrachodontid\nTrachodontidae\nTrachoma\ntrachomatous\nTrachomedusae\ntrachomedusan\ntrachyandesite\ntrachybasalt\ntrachycarpous\nTrachycarpus\ntrachychromatic\ntrachydolerite\ntrachyglossate\nTrachylinae\ntrachyline\nTrachymedusae\ntrachymedusan\ntrachyphonia\ntrachyphonous\nTrachypteridae\ntrachypteroid\nTrachypterus\ntrachyspermous\ntrachyte\ntrachytic\ntrachytoid\ntracing\ntracingly\ntrack\ntrackable\ntrackage\ntrackbarrow\ntracked\ntracker\ntrackhound\ntrackingscout\ntracklayer\ntracklaying\ntrackless\ntracklessly\ntracklessness\ntrackman\ntrackmanship\ntrackmaster\ntrackscout\ntrackshifter\ntracksick\ntrackside\ntrackwalker\ntrackway\ntrackwork\ntract\ntractability\ntractable\ntractableness\ntractably\ntractarian\nTractarianism\ntractarianize\ntractate\ntractator\ntractatule\ntractellate\ntractellum\ntractiferous\ntractile\ntractility\ntraction\ntractional\ntractioneering\nTractite\ntractlet\ntractor\ntractoration\ntractorism\ntractorist\ntractorization\ntractorize\ntractory\ntractrix\nTracy\ntradable\ntradal\ntrade\ntradecraft\ntradeful\ntradeless\ntrademaster\ntrader\ntradership\nTradescantia\ntradesfolk\ntradesman\ntradesmanlike\ntradesmanship\ntradesmanwise\ntradespeople\ntradesperson\ntradeswoman\ntradiment\ntrading\ntradite\ntradition\ntraditional\ntraditionalism\ntraditionalist\ntraditionalistic\ntraditionality\ntraditionalize\ntraditionally\ntraditionarily\ntraditionary\ntraditionate\ntraditionately\ntraditioner\ntraditionism\ntraditionist\ntraditionitis\ntraditionize\ntraditionless\ntraditionmonger\ntraditious\ntraditive\ntraditor\ntraditores\ntraditorship\ntraduce\ntraducement\ntraducent\ntraducer\ntraducian\ntraducianism\ntraducianist\ntraducianistic\ntraducible\ntraducing\ntraducingly\ntraduction\ntraductionist\ntrady\ntraffic\ntrafficability\ntrafficable\ntrafficableness\ntrafficless\ntrafficway\ntrafflicker\ntrafflike\ntrag\ntragacanth\ntragacantha\ntragacanthin\ntragal\nTragasol\ntragedial\ntragedian\ntragedianess\ntragedical\ntragedienne\ntragedietta\ntragedist\ntragedization\ntragedize\ntragedy\ntragelaph\ntragelaphine\nTragelaphus\ntragi\ntragic\ntragical\ntragicality\ntragically\ntragicalness\ntragicaster\ntragicize\ntragicly\ntragicness\ntragicofarcical\ntragicoheroicomic\ntragicolored\ntragicomedian\ntragicomedy\ntragicomic\ntragicomical\ntragicomicality\ntragicomically\ntragicomipastoral\ntragicoromantic\ntragicose\ntragopan\nTragopogon\nTragulidae\nTragulina\ntraguline\ntraguloid\nTraguloidea\nTragulus\ntragus\ntrah\ntraheen\ntraik\ntrail\ntrailer\ntrailery\ntrailiness\ntrailing\ntrailingly\ntrailless\ntrailmaker\ntrailmaking\ntrailman\ntrailside\ntrailsman\ntraily\ntrain\ntrainable\ntrainage\ntrainagraph\ntrainband\ntrainbearer\ntrainbolt\ntrainboy\ntrained\ntrainee\ntrainer\ntrainful\ntraining\ntrainless\ntrainload\ntrainman\ntrainmaster\ntrainsick\ntrainster\ntraintime\ntrainway\ntrainy\ntraipse\ntrait\ntraitless\ntraitor\ntraitorhood\ntraitorism\ntraitorize\ntraitorlike\ntraitorling\ntraitorous\ntraitorously\ntraitorousness\ntraitorship\ntraitorwise\ntraitress\ntraject\ntrajectile\ntrajection\ntrajectitious\ntrajectory\ntrajet\ntralatician\ntralaticiary\ntralatition\ntralatitious\ntralatitiously\ntralira\nTrallian\ntram\ntrama\ntramal\ntramcar\ntrame\nTrametes\ntramful\ntramless\ntramline\ntramman\ntrammel\ntrammeled\ntrammeler\ntrammelhead\ntrammeling\ntrammelingly\ntrammelled\ntrammellingly\ntrammer\ntramming\ntrammon\ntramontane\ntramp\ntrampage\ntrampdom\ntramper\ntrampess\ntramphood\ntrampish\ntrampishly\ntrampism\ntrample\ntrampler\ntramplike\ntrampolin\ntrampoline\ntrampoose\ntrampot\ntramroad\ntramsmith\ntramway\ntramwayman\ntramyard\nTran\ntrance\ntranced\ntrancedly\ntranceful\ntrancelike\ntranchefer\ntranchet\ntrancoidal\ntraneen\ntrank\ntranka\ntranker\ntrankum\ntranky\ntranquil\ntranquility\ntranquilization\ntranquilize\ntranquilizer\ntranquilizing\ntranquilizingly\ntranquillity\ntranquillization\ntranquillize\ntranquilly\ntranquilness\ntransaccidentation\ntransact\ntransaction\ntransactional\ntransactionally\ntransactioneer\ntransactor\ntransalpine\ntransalpinely\ntransalpiner\ntransamination\ntransanimate\ntransanimation\ntransannular\ntransapical\ntransappalachian\ntransaquatic\ntransarctic\ntransatlantic\ntransatlantically\ntransatlantican\ntransatlanticism\ntransaudient\ntransbaikal\ntransbaikalian\ntransbay\ntransboard\ntransborder\ntranscalency\ntranscalent\ntranscalescency\ntranscalescent\nTranscaucasian\ntransceiver\ntranscend\ntranscendence\ntranscendency\ntranscendent\ntranscendental\ntranscendentalism\ntranscendentalist\ntranscendentalistic\ntranscendentality\ntranscendentalize\ntranscendentally\ntranscendently\ntranscendentness\ntranscendible\ntranscending\ntranscendingly\ntranscendingness\ntranscension\ntranschannel\ntranscolor\ntranscoloration\ntransconductance\ntranscondylar\ntranscondyloid\ntransconscious\ntranscontinental\ntranscorporate\ntranscorporeal\ntranscortical\ntranscreate\ntranscribable\ntranscribble\ntranscribbler\ntranscribe\ntranscriber\ntranscript\ntranscription\ntranscriptional\ntranscriptionally\ntranscriptitious\ntranscriptive\ntranscriptively\ntranscriptural\ntranscrystalline\ntranscurrent\ntranscurrently\ntranscurvation\ntransdermic\ntransdesert\ntransdialect\ntransdiaphragmatic\ntransdiurnal\ntransducer\ntransduction\ntransect\ntransection\ntranselement\ntranselementate\ntranselementation\ntransempirical\ntransenna\ntransept\ntranseptal\ntranseptally\ntransequatorial\ntransessentiate\ntranseunt\ntransexperiential\ntransfashion\ntransfeature\ntransfer\ntransferability\ntransferable\ntransferableness\ntransferably\ntransferal\ntransferee\ntransference\ntransferent\ntransferential\ntransferography\ntransferor\ntransferotype\ntransferred\ntransferrer\ntransferribility\ntransferring\ntransferror\ntransferrotype\ntransfigurate\ntransfiguration\ntransfigurative\ntransfigure\ntransfigurement\ntransfiltration\ntransfinite\ntransfix\ntransfixation\ntransfixion\ntransfixture\ntransfluent\ntransfluvial\ntransflux\ntransforation\ntransform\ntransformability\ntransformable\ntransformance\ntransformation\ntransformationist\ntransformative\ntransformator\ntransformer\ntransforming\ntransformingly\ntransformism\ntransformist\ntransformistic\ntransfrontal\ntransfrontier\ntransfuge\ntransfugitive\ntransfuse\ntransfuser\ntransfusible\ntransfusion\ntransfusionist\ntransfusive\ntransfusively\ntransgredient\ntransgress\ntransgressible\ntransgressing\ntransgressingly\ntransgression\ntransgressional\ntransgressive\ntransgressively\ntransgressor\ntranshape\ntranshuman\ntranshumanate\ntranshumanation\ntranshumance\ntranshumanize\ntranshumant\ntransience\ntransiency\ntransient\ntransiently\ntransientness\ntransigence\ntransigent\ntransiliac\ntransilience\ntransiliency\ntransilient\ntransilluminate\ntransillumination\ntransilluminator\ntransimpression\ntransincorporation\ntransindividual\ntransinsular\ntransire\ntransischiac\ntransisthmian\ntransistor\ntransit\ntransitable\ntransiter\ntransition\ntransitional\ntransitionally\ntransitionalness\ntransitionary\ntransitionist\ntransitival\ntransitive\ntransitively\ntransitiveness\ntransitivism\ntransitivity\ntransitman\ntransitorily\ntransitoriness\ntransitory\ntransitus\nTransjordanian\ntranslade\ntranslatable\ntranslatableness\ntranslate\ntranslater\ntranslation\ntranslational\ntranslationally\ntranslative\ntranslator\ntranslatorese\ntranslatorial\ntranslatorship\ntranslatory\ntranslatress\ntranslatrix\ntranslay\ntransleithan\ntransletter\ntranslinguate\ntransliterate\ntransliteration\ntransliterator\ntranslocalization\ntranslocate\ntranslocation\ntranslocatory\ntranslucence\ntranslucency\ntranslucent\ntranslucently\ntranslucid\ntransmarginal\ntransmarine\ntransmaterial\ntransmateriation\ntransmedial\ntransmedian\ntransmental\ntransmentation\ntransmeridional\ntransmethylation\ntransmigrant\ntransmigrate\ntransmigration\ntransmigrationism\ntransmigrationist\ntransmigrative\ntransmigratively\ntransmigrator\ntransmigratory\ntransmissibility\ntransmissible\ntransmission\ntransmissional\ntransmissionist\ntransmissive\ntransmissively\ntransmissiveness\ntransmissivity\ntransmissometer\ntransmissory\ntransmit\ntransmittable\ntransmittal\ntransmittance\ntransmittancy\ntransmittant\ntransmitter\ntransmittible\ntransmogrification\ntransmogrifier\ntransmogrify\ntransmold\ntransmontane\ntransmorphism\ntransmundane\ntransmural\ntransmuscle\ntransmutability\ntransmutable\ntransmutableness\ntransmutably\ntransmutation\ntransmutational\ntransmutationist\ntransmutative\ntransmutatory\ntransmute\ntransmuter\ntransmuting\ntransmutive\ntransmutual\ntransnatation\ntransnational\ntransnatural\ntransnaturation\ntransnature\ntransnihilation\ntransnormal\ntransocean\ntransoceanic\ntransocular\ntransom\ntransomed\ntransonic\ntransorbital\ntranspacific\ntranspadane\ntranspalatine\ntranspalmar\ntranspanamic\ntransparence\ntransparency\ntransparent\ntransparentize\ntransparently\ntransparentness\ntransparietal\ntransparish\ntranspeciate\ntranspeciation\ntranspeer\ntranspenetrable\ntranspeninsular\ntransperitoneal\ntransperitoneally\ntranspersonal\ntransphenomenal\ntransphysical\ntranspicuity\ntranspicuous\ntranspicuously\ntranspierce\ntranspirability\ntranspirable\ntranspiration\ntranspirative\ntranspiratory\ntranspire\ntranspirometer\ntransplace\ntransplant\ntransplantability\ntransplantable\ntransplantar\ntransplantation\ntransplantee\ntransplanter\ntransplendency\ntransplendent\ntransplendently\ntranspleural\ntranspleurally\ntranspolar\ntransponibility\ntransponible\ntranspontine\ntransport\ntransportability\ntransportable\ntransportableness\ntransportal\ntransportance\ntransportation\ntransportational\ntransportationist\ntransportative\ntransported\ntransportedly\ntransportedness\ntransportee\ntransporter\ntransporting\ntransportingly\ntransportive\ntransportment\ntransposability\ntransposable\ntransposableness\ntransposal\ntranspose\ntransposer\ntransposition\ntranspositional\ntranspositive\ntranspositively\ntranspositor\ntranspository\ntranspour\ntransprint\ntransprocess\ntransprose\ntransproser\ntranspulmonary\ntranspyloric\ntransradiable\ntransrational\ntransreal\ntransrectification\ntransrhenane\ntransrhodanian\ntransriverine\ntranssegmental\ntranssensual\ntransseptal\ntranssepulchral\ntransshape\ntransshift\ntransship\ntransshipment\ntranssolid\ntransstellar\ntranssubjective\ntranstemporal\nTransteverine\ntransthalamic\ntransthoracic\ntransubstantial\ntransubstantially\ntransubstantiate\ntransubstantiation\ntransubstantiationalist\ntransubstantiationite\ntransubstantiative\ntransubstantiatively\ntransubstantiatory\ntransudate\ntransudation\ntransudative\ntransudatory\ntransude\ntransumpt\ntransumption\ntransumptive\ntransuranian\ntransuranic\ntransuranium\ntransuterine\ntransvaal\nTransvaaler\nTransvaalian\ntransvaluate\ntransvaluation\ntransvalue\ntransvasate\ntransvasation\ntransvase\ntransvectant\ntransvection\ntransvenom\ntransverbate\ntransverbation\ntransverberate\ntransverberation\ntransversal\ntransversale\ntransversalis\ntransversality\ntransversally\ntransversan\ntransversary\ntransverse\ntransversely\ntransverseness\ntransverser\ntransversion\ntransversive\ntransversocubital\ntransversomedial\ntransversospinal\ntransversovertical\ntransversum\ntransversus\ntransvert\ntransverter\ntransvest\ntransvestism\ntransvestite\ntransvestitism\ntransvolation\ntranswritten\nTransylvanian\ntrant\ntranter\ntrantlum\nTranzschelia\ntrap\nTrapa\nTrapaceae\ntrapaceous\ntrapball\ntrapes\ntrapezate\ntrapeze\ntrapezia\ntrapezial\ntrapezian\ntrapeziform\ntrapezing\ntrapeziometacarpal\ntrapezist\ntrapezium\ntrapezius\ntrapezohedral\ntrapezohedron\ntrapezoid\ntrapezoidal\ntrapezoidiform\ntrapfall\ntraphole\ntrapiferous\ntraplight\ntraplike\ntrapmaker\ntrapmaking\ntrappean\ntrapped\ntrapper\ntrapperlike\ntrappiness\ntrapping\ntrappingly\nTrappist\ntrappist\nTrappistine\ntrappoid\ntrappose\ntrappous\ntrappy\ntraprock\ntraps\ntrapshoot\ntrapshooter\ntrapshooting\ntrapstick\ntrapunto\ntrasformism\ntrash\ntrashery\ntrashify\ntrashily\ntrashiness\ntraship\ntrashless\ntrashrack\ntrashy\ntrass\nTrastevere\nTrasteverine\ntrasy\ntraulism\ntrauma\ntraumasthenia\ntraumatic\ntraumatically\ntraumaticin\ntraumaticine\ntraumatism\ntraumatize\ntraumatology\ntraumatonesis\ntraumatopnea\ntraumatopyra\ntraumatosis\ntraumatotactic\ntraumatotaxis\ntraumatropic\ntraumatropism\nTrautvetteria\ntravail\ntravale\ntravally\ntravated\ntrave\ntravel\ntravelability\ntravelable\ntraveldom\ntraveled\ntraveler\ntraveleress\ntravelerlike\ntraveling\ntravellability\ntravellable\ntravelled\ntraveller\ntravelogue\ntraveloguer\ntraveltime\ntraversable\ntraversal\ntraversary\ntraverse\ntraversed\ntraversely\ntraverser\ntraversewise\ntraversework\ntraversing\ntraversion\ntravertin\ntravertine\ntravestier\ntravestiment\ntravesty\nTravis\ntravis\ntravois\ntravoy\ntrawl\ntrawlboat\ntrawler\ntrawlerman\ntrawlnet\ntray\ntrayful\ntraylike\ntreacher\ntreacherous\ntreacherously\ntreacherousness\ntreachery\ntreacle\ntreaclelike\ntreaclewort\ntreacliness\ntreacly\ntread\ntreadboard\ntreader\ntreading\ntreadle\ntreadler\ntreadmill\ntreadwheel\ntreason\ntreasonable\ntreasonableness\ntreasonably\ntreasonful\ntreasonish\ntreasonist\ntreasonless\ntreasonmonger\ntreasonous\ntreasonously\ntreasonproof\ntreasurable\ntreasure\ntreasureless\ntreasurer\ntreasurership\ntreasuress\ntreasurous\ntreasury\ntreasuryship\ntreat\ntreatable\ntreatableness\ntreatably\ntreatee\ntreater\ntreating\ntreatise\ntreatiser\ntreatment\ntreator\ntreaty\ntreatyist\ntreatyite\ntreatyless\nTrebellian\ntreble\ntrebleness\ntrebletree\ntrebly\ntrebuchet\ntrecentist\ntrechmannite\ntreckschuyt\nTreculia\ntreddle\ntredecile\ntredille\ntree\ntreebeard\ntreebine\ntreed\ntreefish\ntreeful\ntreehair\ntreehood\ntreeify\ntreeiness\ntreeless\ntreelessness\ntreelet\ntreelike\ntreeling\ntreemaker\ntreemaking\ntreeman\ntreen\ntreenail\ntreescape\ntreeship\ntreespeeler\ntreetop\ntreeward\ntreewards\ntreey\ntref\ntrefgordd\ntrefle\ntrefoil\ntrefoiled\ntrefoillike\ntrefoilwise\ntregadyne\ntregerg\ntregohm\ntrehala\ntrehalase\ntrehalose\ntreillage\ntrek\ntrekker\ntrekometer\ntrekpath\ntrellis\ntrellised\ntrellislike\ntrelliswork\nTrema\nTremandra\nTremandraceae\ntremandraceous\nTrematoda\ntrematode\nTrematodea\nTrematodes\ntrematoid\nTrematosaurus\ntremble\ntremblement\ntrembler\ntrembling\ntremblingly\ntremblingness\ntremblor\ntrembly\nTremella\nTremellaceae\ntremellaceous\nTremellales\ntremelliform\ntremelline\ntremellineous\ntremelloid\ntremellose\ntremendous\ntremendously\ntremendousness\ntremetol\ntremie\ntremolando\ntremolant\ntremolist\ntremolite\ntremolitic\ntremolo\ntremor\ntremorless\ntremorlessly\ntremulant\ntremulate\ntremulation\ntremulous\ntremulously\ntremulousness\ntrenail\ntrench\ntrenchancy\ntrenchant\ntrenchantly\ntrenchantness\ntrenchboard\ntrenched\ntrencher\ntrencherless\ntrencherlike\ntrenchermaker\ntrenchermaking\ntrencherman\ntrencherside\ntrencherwise\ntrencherwoman\ntrenchful\ntrenchlet\ntrenchlike\ntrenchmaster\ntrenchmore\ntrenchward\ntrenchwise\ntrenchwork\ntrend\ntrendle\nTrent\ntrental\nTrentepohlia\nTrentepohliaceae\ntrentepohliaceous\nTrentine\nTrenton\ntrepan\ntrepanation\ntrepang\ntrepanize\ntrepanner\ntrepanning\ntrepanningly\ntrephination\ntrephine\ntrephiner\ntrephocyte\ntrephone\ntrepid\ntrepidancy\ntrepidant\ntrepidate\ntrepidation\ntrepidatory\ntrepidity\ntrepidly\ntrepidness\nTreponema\ntreponematous\ntreponemiasis\ntreponemiatic\ntreponemicidal\ntreponemicide\nTrepostomata\ntrepostomatous\nTreron\nTreronidae\nTreroninae\ntresaiel\ntrespass\ntrespassage\ntrespasser\ntrespassory\ntress\ntressed\ntressful\ntressilate\ntressilation\ntressless\ntresslet\ntresslike\ntresson\ntressour\ntressure\ntressured\ntressy\ntrest\ntrestle\ntrestletree\ntrestlewise\ntrestlework\ntrestling\ntret\ntrevally\ntrevet\nTrevor\ntrews\ntrewsman\nTrey\ntrey\ntri\ntriable\ntriableness\ntriace\ntriacetamide\ntriacetate\ntriacetonamine\ntriachenium\ntriacid\ntriacontaeterid\ntriacontane\ntriaconter\ntriact\ntriactinal\ntriactine\ntriad\ntriadelphous\nTriadenum\ntriadic\ntriadical\ntriadically\ntriadism\ntriadist\ntriaene\ntriaenose\ntriage\ntriagonal\ntriakisicosahedral\ntriakisicosahedron\ntriakisoctahedral\ntriakisoctahedrid\ntriakisoctahedron\ntriakistetrahedral\ntriakistetrahedron\ntrial\ntrialate\ntrialism\ntrialist\ntriality\ntrialogue\ntriamid\ntriamide\ntriamine\ntriamino\ntriammonium\ntriamylose\ntriander\nTriandria\ntriandrian\ntriandrous\ntriangle\ntriangled\ntriangler\ntriangleways\ntrianglewise\ntrianglework\nTriangula\ntriangular\ntriangularity\ntriangularly\ntriangulate\ntriangulately\ntriangulation\ntriangulator\nTriangulid\ntrianguloid\ntriangulopyramidal\ntriangulotriangular\nTriangulum\ntriannual\ntriannulate\nTrianon\nTriantaphyllos\ntriantelope\ntrianthous\ntriapsal\ntriapsidal\ntriarch\ntriarchate\ntriarchy\ntriarctic\ntriarcuated\ntriareal\ntriarii\nTriarthrus\ntriarticulate\nTrias\nTriassic\ntriaster\ntriatic\nTriatoma\ntriatomic\ntriatomicity\ntriaxial\ntriaxon\ntriaxonian\ntriazane\ntriazin\ntriazine\ntriazo\ntriazoic\ntriazole\ntriazolic\ntribade\ntribadism\ntribady\ntribal\ntribalism\ntribalist\ntribally\ntribarred\ntribase\ntribasic\ntribasicity\ntribasilar\ntribble\ntribe\ntribeless\ntribelet\ntribelike\ntribesfolk\ntribeship\ntribesman\ntribesmanship\ntribespeople\ntribeswoman\ntriblastic\ntriblet\ntriboelectric\ntriboelectricity\ntribofluorescence\ntribofluorescent\nTribolium\ntriboluminescence\ntriboluminescent\ntribometer\nTribonema\nTribonemaceae\ntribophosphorescence\ntribophosphorescent\ntribophosphoroscope\ntriborough\ntribrac\ntribrach\ntribrachial\ntribrachic\ntribracteate\ntribracteolate\ntribromacetic\ntribromide\ntribromoethanol\ntribromophenol\ntribromphenate\ntribromphenol\ntribual\ntribually\ntribular\ntribulate\ntribulation\ntribuloid\nTribulus\ntribuna\ntribunal\ntribunate\ntribune\ntribuneship\ntribunitial\ntribunitian\ntribunitiary\ntribunitive\ntributable\ntributarily\ntributariness\ntributary\ntribute\ntributer\ntributist\ntributorian\ntributyrin\ntrica\ntricae\ntricalcic\ntricalcium\ntricapsular\ntricar\ntricarballylic\ntricarbimide\ntricarbon\ntricarboxylic\ntricarinate\ntricarinated\ntricarpellary\ntricarpellate\ntricarpous\ntricaudal\ntricaudate\ntrice\ntricellular\ntricenarious\ntricenarium\ntricenary\ntricennial\ntricentenarian\ntricentenary\ntricentennial\ntricentral\ntricephal\ntricephalic\ntricephalous\ntricephalus\ntriceps\nTriceratops\ntriceria\ntricerion\ntricerium\ntrichatrophia\ntrichauxis\nTrichechidae\ntrichechine\ntrichechodont\nTrichechus\ntrichevron\ntrichi\ntrichia\ntrichiasis\nTrichilia\nTrichina\ntrichina\ntrichinae\ntrichinal\nTrichinella\ntrichiniasis\ntrichiniferous\ntrichinization\ntrichinize\ntrichinoid\ntrichinopoly\ntrichinoscope\ntrichinoscopy\ntrichinosed\ntrichinosis\ntrichinotic\ntrichinous\ntrichite\ntrichitic\ntrichitis\ntrichiurid\nTrichiuridae\ntrichiuroid\nTrichiurus\ntrichloride\ntrichlormethane\ntrichloro\ntrichloroacetic\ntrichloroethylene\ntrichloromethane\ntrichloromethyl\ntrichobacteria\ntrichobezoar\ntrichoblast\ntrichobranchia\ntrichobranchiate\ntrichocarpous\ntrichocephaliasis\nTrichocephalus\ntrichoclasia\ntrichoclasis\ntrichocyst\ntrichocystic\ntrichode\nTrichoderma\nTrichodesmium\nTrichodontidae\ntrichoepithelioma\ntrichogen\ntrichogenous\ntrichoglossia\nTrichoglossidae\nTrichoglossinae\ntrichoglossine\nTrichogramma\nTrichogrammatidae\ntrichogyne\ntrichogynial\ntrichogynic\ntrichoid\nTricholaena\ntrichological\ntrichologist\ntrichology\nTricholoma\ntrichoma\nTrichomanes\ntrichomaphyte\ntrichomatose\ntrichomatosis\ntrichomatous\ntrichome\ntrichomic\ntrichomonad\nTrichomonadidae\nTrichomonas\ntrichomoniasis\ntrichomycosis\ntrichonosus\ntrichopathic\ntrichopathy\ntrichophore\ntrichophoric\ntrichophyllous\ntrichophyte\ntrichophytia\ntrichophytic\nTrichophyton\ntrichophytosis\nTrichoplax\ntrichopore\ntrichopter\nTrichoptera\ntrichoptera\ntrichopteran\ntrichopteron\ntrichopterous\ntrichopterygid\nTrichopterygidae\ntrichord\ntrichorrhea\ntrichorrhexic\ntrichorrhexis\nTrichosanthes\ntrichoschisis\ntrichosis\ntrichosporange\ntrichosporangial\ntrichosporangium\nTrichosporum\ntrichostasis\nTrichostema\ntrichostrongyle\ntrichostrongylid\nTrichostrongylus\ntrichothallic\ntrichotillomania\ntrichotomic\ntrichotomism\ntrichotomist\ntrichotomize\ntrichotomous\ntrichotomously\ntrichotomy\ntrichroic\ntrichroism\ntrichromat\ntrichromate\ntrichromatic\ntrichromatism\ntrichromatist\ntrichrome\ntrichromic\ntrichronous\ntrichuriasis\nTrichuris\ntrichy\nTricia\ntricinium\ntricipital\ntricircular\ntrick\ntricker\ntrickery\ntrickful\ntrickily\ntrickiness\ntricking\ntrickingly\ntrickish\ntrickishly\ntrickishness\ntrickle\ntrickless\ntricklet\ntricklike\ntrickling\ntricklingly\ntrickly\ntrickment\ntrickproof\ntricksical\ntricksily\ntricksiness\ntricksome\ntrickster\ntrickstering\ntrickstress\ntricksy\ntricktrack\ntricky\ntriclad\nTricladida\ntriclinate\ntriclinia\ntriclinial\ntricliniarch\ntricliniary\ntriclinic\ntriclinium\ntriclinohedric\ntricoccose\ntricoccous\ntricolette\ntricolic\ntricolon\ntricolor\ntricolored\ntricolumnar\ntricompound\ntriconch\nTriconodon\ntriconodont\nTriconodonta\ntriconodontid\ntriconodontoid\ntriconodonty\ntriconsonantal\ntriconsonantalism\ntricophorous\ntricorn\ntricornered\ntricornute\ntricorporal\ntricorporate\ntricoryphean\ntricosane\ntricosanone\ntricostate\ntricosyl\ntricosylic\ntricot\ntricotine\ntricotyledonous\ntricresol\ntricrotic\ntricrotism\ntricrotous\ntricrural\ntricurvate\ntricuspal\ntricuspid\ntricuspidal\ntricuspidate\ntricuspidated\ntricussate\ntricyanide\ntricycle\ntricyclene\ntricycler\ntricyclic\ntricyclist\nTricyrtis\nTridacna\nTridacnidae\ntridactyl\ntridactylous\ntridaily\ntriddler\ntridecane\ntridecene\ntridecilateral\ntridecoic\ntridecyl\ntridecylene\ntridecylic\ntrident\ntridental\ntridentate\ntridentated\ntridentiferous\nTridentine\nTridentinian\ntridepside\ntridermic\ntridiametral\ntridiapason\ntridigitate\ntridimensional\ntridimensionality\ntridimensioned\ntridiurnal\ntridominium\ntridrachm\ntriduan\ntriduum\ntridymite\ntridynamous\ntried\ntriedly\ntrielaidin\ntriene\ntriennial\ntrienniality\ntriennially\ntriennium\ntriens\ntriental\nTrientalis\ntriequal\ntrier\ntrierarch\ntrierarchal\ntrierarchic\ntrierarchy\ntrierucin\ntrieteric\ntrieterics\ntriethanolamine\ntriethyl\ntriethylamine\ntriethylstibine\ntrifa\ntrifacial\ntrifarious\ntrifasciated\ntriferous\ntrifid\ntrifilar\ntrifistulary\ntriflagellate\ntrifle\ntrifledom\ntrifler\ntriflet\ntrifling\ntriflingly\ntriflingness\ntrifloral\ntriflorate\ntriflorous\ntrifluoride\ntrifocal\ntrifoil\ntrifold\ntrifoliate\ntrifoliated\ntrifoliolate\ntrifoliosis\nTrifolium\ntrifolium\ntrifoly\ntriforial\ntriforium\ntriform\ntriformed\ntriformin\ntriformity\ntriformous\ntrifoveolate\ntrifuran\ntrifurcal\ntrifurcate\ntrifurcation\ntrig\ntrigamist\ntrigamous\ntrigamy\ntrigeminal\ntrigeminous\ntrigeneric\ntrigesimal\ntrigger\ntriggered\ntriggerfish\ntriggerless\ntrigintal\ntrigintennial\nTrigla\ntriglandular\ntriglid\nTriglidae\ntriglochid\nTriglochin\ntriglochin\ntriglot\ntrigly\ntriglyceride\ntriglyceryl\ntriglyph\ntriglyphal\ntriglyphed\ntriglyphic\ntriglyphical\ntrigness\ntrigon\nTrigona\ntrigonal\ntrigonally\ntrigone\nTrigonella\ntrigonelline\ntrigoneutic\ntrigoneutism\nTrigonia\nTrigoniaceae\ntrigoniacean\ntrigoniaceous\ntrigonic\ntrigonid\nTrigoniidae\ntrigonite\ntrigonitis\ntrigonocephalic\ntrigonocephalous\nTrigonocephalus\ntrigonocephaly\ntrigonocerous\ntrigonododecahedron\ntrigonodont\ntrigonoid\ntrigonometer\ntrigonometric\ntrigonometrical\ntrigonometrician\ntrigonometry\ntrigonon\ntrigonotype\ntrigonous\ntrigonum\ntrigram\ntrigrammatic\ntrigrammatism\ntrigrammic\ntrigraph\ntrigraphic\ntriguttulate\ntrigyn\nTrigynia\ntrigynian\ntrigynous\ntrihalide\ntrihedral\ntrihedron\ntrihemeral\ntrihemimer\ntrihemimeral\ntrihemimeris\ntrihemiobol\ntrihemiobolion\ntrihemitetartemorion\ntrihoral\ntrihourly\ntrihybrid\ntrihydrate\ntrihydrated\ntrihydric\ntrihydride\ntrihydrol\ntrihydroxy\ntrihypostatic\ntrijugate\ntrijugous\ntrijunction\ntrikaya\ntrike\ntriker\ntrikeria\ntrikerion\ntriketo\ntriketone\ntrikir\ntrilabe\ntrilabiate\ntrilamellar\ntrilamellated\ntrilaminar\ntrilaminate\ntrilarcenous\ntrilateral\ntrilaterality\ntrilaterally\ntrilateralness\ntrilaurin\ntrilby\ntrilemma\ntrilinear\ntrilineate\ntrilineated\ntrilingual\ntrilinguar\ntrilinolate\ntrilinoleate\ntrilinolenate\ntrilinolenin\nTrilisa\ntrilit\ntrilite\ntriliteral\ntriliteralism\ntriliterality\ntriliterally\ntriliteralness\ntrilith\ntrilithic\ntrilithon\ntrill\ntrillachan\ntrillet\ntrilli\nTrilliaceae\ntrilliaceous\ntrillibub\ntrilliin\ntrilling\ntrillion\ntrillionaire\ntrillionize\ntrillionth\nTrillium\ntrillium\ntrillo\ntrilobate\ntrilobated\ntrilobation\ntrilobe\ntrilobed\nTrilobita\ntrilobite\ntrilobitic\ntrilocular\ntriloculate\ntrilogic\ntrilogical\ntrilogist\ntrilogy\nTrilophodon\ntrilophodont\ntriluminar\ntriluminous\ntrim\ntrimacer\ntrimacular\ntrimargarate\ntrimargarin\ntrimastigate\ntrimellitic\ntrimembral\ntrimensual\ntrimer\nTrimera\ntrimercuric\nTrimeresurus\ntrimeric\ntrimeride\ntrimerite\ntrimerization\ntrimerous\ntrimesic\ntrimesinic\ntrimesitic\ntrimesitinic\ntrimester\ntrimestral\ntrimestrial\ntrimesyl\ntrimetalism\ntrimetallic\ntrimeter\ntrimethoxy\ntrimethyl\ntrimethylacetic\ntrimethylamine\ntrimethylbenzene\ntrimethylene\ntrimethylmethane\ntrimethylstibine\ntrimetric\ntrimetrical\ntrimetrogon\ntrimly\ntrimmer\ntrimming\ntrimmingly\ntrimness\ntrimodal\ntrimodality\ntrimolecular\ntrimonthly\ntrimoric\ntrimorph\ntrimorphic\ntrimorphism\ntrimorphous\ntrimotor\ntrimotored\ntrimstone\ntrimtram\ntrimuscular\ntrimyristate\ntrimyristin\ntrin\nTrinacrian\ntrinal\ntrinality\ntrinalize\ntrinary\ntrinational\ntrindle\ntrine\ntrinely\ntrinervate\ntrinerve\ntrinerved\ntrineural\nTringa\ntringine\ntringle\ntringoid\nTrinidadian\ntrinidado\nTrinil\nTrinitarian\ntrinitarian\nTrinitarianism\ntrinitrate\ntrinitration\ntrinitride\ntrinitrin\ntrinitro\ntrinitrocarbolic\ntrinitrocellulose\ntrinitrocresol\ntrinitroglycerin\ntrinitromethane\ntrinitrophenol\ntrinitroresorcin\ntrinitrotoluene\ntrinitroxylene\ntrinitroxylol\nTrinity\ntrinity\ntrinityhood\ntrink\ntrinkerman\ntrinket\ntrinketer\ntrinketry\ntrinkety\ntrinkle\ntrinklement\ntrinklet\ntrinkums\nTrinobantes\ntrinoctial\ntrinodal\ntrinode\ntrinodine\ntrinol\ntrinomial\ntrinomialism\ntrinomialist\ntrinomiality\ntrinomially\ntrinopticon\nTrinorantum\nTrinovant\nTrinovantes\ntrintle\ntrinucleate\nTrinucleus\nTrio\ntrio\ntriobol\ntriobolon\ntrioctile\ntriocular\ntriode\ntriodia\ntriodion\nTriodon\nTriodontes\nTriodontidae\ntriodontoid\nTriodontoidea\nTriodontoidei\nTriodontophorus\nTrioecia\ntrioecious\ntrioeciously\ntrioecism\ntriolcous\ntriole\ntrioleate\ntriolefin\ntrioleic\ntriolein\ntriolet\ntriology\nTrionychidae\ntrionychoid\nTrionychoideachid\ntrionychoidean\ntrionym\ntrionymal\nTrionyx\ntrioperculate\nTriopidae\nTriops\ntrior\ntriorchis\ntriorchism\ntriorthogonal\ntriose\nTriosteum\ntriovulate\ntrioxazine\ntrioxide\ntrioxymethylene\ntriozonide\ntrip\ntripal\ntripaleolate\ntripalmitate\ntripalmitin\ntripara\ntripart\ntriparted\ntripartedly\ntripartible\ntripartient\ntripartite\ntripartitely\ntripartition\ntripaschal\ntripe\ntripedal\ntripel\ntripelike\ntripeman\ntripemonger\ntripennate\ntripenny\ntripeptide\ntripersonal\ntripersonalism\ntripersonalist\ntripersonality\ntripersonally\ntripery\ntripeshop\ntripestone\ntripetaloid\ntripetalous\ntripewife\ntripewoman\ntriphammer\ntriphane\ntriphase\ntriphaser\nTriphasia\ntriphasic\ntriphenyl\ntriphenylamine\ntriphenylated\ntriphenylcarbinol\ntriphenylmethane\ntriphenylmethyl\ntriphenylphosphine\ntriphibian\ntriphibious\ntriphony\nTriphora\ntriphthong\ntriphyletic\ntriphyline\ntriphylite\ntriphyllous\nTriphysite\ntripinnate\ntripinnated\ntripinnately\ntripinnatifid\ntripinnatisect\nTripitaka\ntriplane\nTriplaris\ntriplasian\ntriplasic\ntriple\ntripleback\ntriplefold\ntriplegia\ntripleness\ntriplet\ntripletail\ntripletree\ntriplewise\ntriplex\ntriplexity\ntriplicate\ntriplication\ntriplicative\ntriplicature\nTriplice\nTriplicist\ntriplicity\ntriplicostate\ntripliform\ntriplinerved\ntripling\ntriplite\ntriploblastic\ntriplocaulescent\ntriplocaulous\nTriplochitonaceae\ntriploid\ntriploidic\ntriploidite\ntriploidy\ntriplopia\ntriplopy\ntriplum\ntriplumbic\ntriply\ntripmadam\ntripod\ntripodal\ntripodial\ntripodian\ntripodic\ntripodical\ntripody\ntripointed\ntripolar\ntripoli\nTripoline\ntripoline\nTripolitan\ntripolite\ntripos\ntripotassium\ntrippant\ntripper\ntrippet\ntripping\ntrippingly\ntrippingness\ntrippist\ntripple\ntrippler\nTripsacum\ntripsill\ntripsis\ntripsome\ntripsomely\ntriptane\ntripterous\ntriptote\ntriptych\ntriptyque\ntripudial\ntripudiant\ntripudiary\ntripudiate\ntripudiation\ntripudist\ntripudium\ntripunctal\ntripunctate\ntripy\nTripylaea\ntripylaean\nTripylarian\ntripylarian\ntripyrenous\ntriquadrantal\ntriquetra\ntriquetral\ntriquetric\ntriquetrous\ntriquetrously\ntriquetrum\ntriquinate\ntriquinoyl\ntriradial\ntriradially\ntriradiate\ntriradiated\ntriradiately\ntriradiation\nTriratna\ntrirectangular\ntriregnum\ntrireme\ntrirhombohedral\ntrirhomboidal\ntriricinolein\ntrisaccharide\ntrisaccharose\ntrisacramentarian\nTrisagion\ntrisalt\ntrisazo\ntrisceptral\ntrisect\ntrisected\ntrisection\ntrisector\ntrisectrix\ntriseme\ntrisemic\ntrisensory\ntrisepalous\ntriseptate\ntriserial\ntriserially\ntriseriate\ntriseriatim\ntrisetose\nTrisetum\ntrishna\ntrisilane\ntrisilicane\ntrisilicate\ntrisilicic\ntrisinuate\ntrisinuated\ntriskele\ntriskelion\ntrismegist\ntrismegistic\ntrismic\ntrismus\ntrisoctahedral\ntrisoctahedron\ntrisodium\ntrisome\ntrisomic\ntrisomy\ntrisonant\nTrisotropis\ntrispast\ntrispaston\ntrispermous\ntrispinose\ntrisplanchnic\ntrisporic\ntrisporous\ntrisquare\ntrist\ntristachyous\nTristam\nTristan\nTristania\ntristate\ntristearate\ntristearin\ntristeness\ntristetrahedron\ntristeza\ntristful\ntristfully\ntristfulness\ntristich\nTristichaceae\ntristichic\ntristichous\ntristigmatic\ntristigmatose\ntristiloquy\ntristisonous\nTristram\ntristylous\ntrisubstituted\ntrisubstitution\ntrisul\ntrisula\ntrisulcate\ntrisulcated\ntrisulphate\ntrisulphide\ntrisulphone\ntrisulphonic\ntrisulphoxide\ntrisylabic\ntrisyllabical\ntrisyllabically\ntrisyllabism\ntrisyllabity\ntrisyllable\ntritactic\ntritagonist\ntritangent\ntritangential\ntritanope\ntritanopia\ntritanopic\ntritaph\ntrite\nTriteleia\ntritely\ntritemorion\ntritencephalon\ntriteness\ntriternate\ntriternately\ntriterpene\ntritetartemorion\ntritheism\ntritheist\ntritheistic\ntritheistical\ntritheite\ntritheocracy\ntrithing\ntrithioaldehyde\ntrithiocarbonate\ntrithiocarbonic\ntrithionate\ntrithionic\nTrithrinax\ntritical\ntriticality\ntritically\ntriticalness\ntriticeous\ntriticeum\ntriticin\ntriticism\ntriticoid\nTriticum\ntriticum\ntritish\ntritium\ntritocerebral\ntritocerebrum\ntritocone\ntritoconid\nTritogeneia\ntritolo\nTritoma\ntritomite\nTriton\ntriton\ntritonal\ntritonality\ntritone\nTritoness\nTritonia\nTritonic\nTritonidae\ntritonoid\ntritonous\ntritonymph\ntritonymphal\ntritopatores\ntritopine\ntritor\ntritoral\ntritorium\ntritoxide\ntritozooid\ntritriacontane\ntrittichan\ntritubercular\nTrituberculata\ntrituberculism\ntrituberculy\ntriturable\ntritural\ntriturate\ntrituration\ntriturator\ntriturature\ntriturium\nTriturus\ntrityl\nTritylodon\nTriumfetta\nTriumph\ntriumph\ntriumphal\ntriumphance\ntriumphancy\ntriumphant\ntriumphantly\ntriumphator\ntriumpher\ntriumphing\ntriumphwise\ntriumvir\ntriumviral\ntriumvirate\ntriumviri\ntriumvirship\ntriunal\ntriune\ntriungulin\ntriunification\ntriunion\ntriunitarian\ntriunity\ntriunsaturated\ntriurid\nTriuridaceae\nTriuridales\nTriuris\ntrivalence\ntrivalency\ntrivalent\ntrivalerin\ntrivalve\ntrivalvular\ntrivant\ntrivantly\ntrivariant\ntriverbal\ntriverbial\ntrivet\ntrivetwise\ntrivia\ntrivial\ntrivialism\ntrivialist\ntriviality\ntrivialize\ntrivially\ntrivialness\ntrivirga\ntrivirgate\ntrivium\ntrivoltine\ntrivvet\ntriweekly\nTrix\nTrixie\nTrixy\ntrizoic\ntrizomal\ntrizonal\ntrizone\nTrizonia\nTroad\ntroat\ntroca\ntrocaical\ntrocar\nTrochaic\ntrochaic\ntrochaicality\ntrochal\ntrochalopod\nTrochalopoda\ntrochalopodous\ntrochanter\ntrochanteric\ntrochanterion\ntrochantin\ntrochantinian\ntrochart\ntrochate\ntroche\ntrocheameter\ntrochee\ntrocheeize\ntrochelminth\nTrochelminthes\ntrochi\ntrochid\nTrochidae\ntrochiferous\ntrochiform\nTrochila\nTrochili\ntrochili\ntrochilic\ntrochilics\ntrochilidae\ntrochilidine\ntrochilidist\ntrochiline\ntrochilopodous\nTrochilus\ntrochilus\ntroching\ntrochiscation\ntrochiscus\ntrochite\ntrochitic\nTrochius\ntrochlea\ntrochlear\ntrochleariform\ntrochlearis\ntrochleary\ntrochleate\ntrochleiform\ntrochocephalia\ntrochocephalic\ntrochocephalus\ntrochocephaly\nTrochodendraceae\ntrochodendraceous\nTrochodendron\ntrochoid\ntrochoidal\ntrochoidally\ntrochoides\ntrochometer\ntrochophore\nTrochosphaera\nTrochosphaerida\ntrochosphere\ntrochospherical\nTrochozoa\ntrochozoic\ntrochozoon\nTrochus\ntrochus\ntrock\ntroco\ntroctolite\ntrod\ntrodden\ntrode\ntroegerite\nTroezenian\ntroft\ntrog\ntrogger\ntroggin\ntroglodytal\ntroglodyte\nTroglodytes\ntroglodytic\ntroglodytical\nTroglodytidae\nTroglodytinae\ntroglodytish\ntroglodytism\ntrogon\nTrogones\nTrogonidae\nTrogoniformes\ntrogonoid\ntrogs\ntrogue\nTroiades\nTroic\ntroika\ntroilite\nTrojan\ntroke\ntroker\ntroll\ntrolldom\ntrolleite\ntroller\ntrolley\ntrolleyer\ntrolleyful\ntrolleyman\ntrollflower\ntrollimog\ntrolling\nTrollius\ntrollman\ntrollol\ntrollop\nTrollopean\nTrollopeanism\ntrollopish\ntrollops\ntrollopy\ntrolly\ntromba\ntrombe\ntrombiculid\ntrombidiasis\nTrombidiidae\nTrombidium\ntrombone\ntrombonist\ntrombony\ntrommel\ntromometer\ntromometric\ntromometrical\ntromometry\ntromp\ntrompe\ntrompil\ntrompillo\ntromple\ntron\ntrona\ntronador\ntronage\ntronc\ntrondhjemite\ntrone\ntroner\ntroolie\ntroop\ntrooper\ntrooperess\ntroopfowl\ntroopship\ntroopwise\ntroostite\ntroostitic\ntroot\ntropacocaine\ntropaeolaceae\ntropaeolaceous\ntropaeolin\nTropaeolum\ntropaion\ntropal\ntroparia\ntroparion\ntropary\ntropate\ntrope\ntropeic\ntropeine\ntroper\ntropesis\ntrophaea\ntrophaeum\ntrophal\ntrophallactic\ntrophallaxis\ntrophectoderm\ntrophedema\ntrophema\ntrophesial\ntrophesy\ntrophi\ntrophic\ntrophical\ntrophically\ntrophicity\ntrophied\nTrophis\ntrophism\ntrophobiont\ntrophobiosis\ntrophobiotic\ntrophoblast\ntrophoblastic\ntrophochromatin\ntrophocyte\ntrophoderm\ntrophodisc\ntrophodynamic\ntrophodynamics\ntrophogenesis\ntrophogenic\ntrophogeny\ntrophology\ntrophonema\ntrophoneurosis\ntrophoneurotic\nTrophonian\ntrophonucleus\ntrophopathy\ntrophophore\ntrophophorous\ntrophophyte\ntrophoplasm\ntrophoplasmatic\ntrophoplasmic\ntrophoplast\ntrophosomal\ntrophosome\ntrophosperm\ntrophosphere\ntrophospongia\ntrophospongial\ntrophospongium\ntrophospore\ntrophotaxis\ntrophotherapy\ntrophothylax\ntrophotropic\ntrophotropism\ntrophozoite\ntrophozooid\ntrophy\ntrophyless\ntrophywort\ntropic\ntropical\nTropicalia\nTropicalian\ntropicality\ntropicalization\ntropicalize\ntropically\ntropicopolitan\ntropidine\nTropidoleptus\ntropine\ntropism\ntropismatic\ntropist\ntropistic\ntropocaine\ntropologic\ntropological\ntropologically\ntropologize\ntropology\ntropometer\ntropopause\ntropophil\ntropophilous\ntropophyte\ntropophytic\ntroposphere\ntropostereoscope\ntropoyl\ntroptometer\ntropyl\ntrostera\ntrot\ntrotcozy\ntroth\ntrothful\ntrothless\ntrothlike\ntrothplight\ntrotlet\ntrotline\ntrotol\ntrotter\ntrottie\ntrottles\ntrottoir\ntrottoired\ntrotty\ntrotyl\ntroubadour\ntroubadourish\ntroubadourism\ntroubadourist\ntrouble\ntroubledly\ntroubledness\ntroublemaker\ntroublemaking\ntroublement\ntroubleproof\ntroubler\ntroublesome\ntroublesomely\ntroublesomeness\ntroubling\ntroublingly\ntroublous\ntroublously\ntroublousness\ntroubly\ntrough\ntroughful\ntroughing\ntroughlike\ntroughster\ntroughway\ntroughwise\ntroughy\ntrounce\ntrouncer\ntroupand\ntroupe\ntrouper\ntroupial\ntrouse\ntrouser\ntrouserdom\ntrousered\ntrouserettes\ntrouserian\ntrousering\ntrouserless\ntrousers\ntrousseau\ntrousseaux\ntrout\ntroutbird\ntrouter\ntroutflower\ntroutful\ntroutiness\ntroutless\ntroutlet\ntroutlike\ntrouty\ntrouvere\ntrouveur\ntrove\ntroveless\ntrover\ntrow\ntrowel\ntrowelbeak\ntroweler\ntrowelful\ntrowelman\ntrowing\ntrowlesworthite\ntrowman\ntrowth\nTroy\ntroy\nTroynovant\nTroytown\ntruancy\ntruandise\ntruant\ntruantcy\ntruantism\ntruantlike\ntruantly\ntruantness\ntruantry\ntruantship\ntrub\ntrubu\ntruce\ntrucebreaker\ntrucebreaking\ntruceless\ntrucemaker\ntrucemaking\ntrucial\ntrucidation\ntruck\ntruckage\ntrucker\ntruckful\ntrucking\ntruckle\ntruckler\ntrucklike\ntruckling\ntrucklingly\ntruckload\ntruckman\ntruckmaster\ntrucks\ntruckster\ntruckway\ntruculence\ntruculency\ntruculent\ntruculental\ntruculently\ntruculentness\ntruddo\ntrudellite\ntrudge\ntrudgen\ntrudger\nTrudy\ntrue\ntrueborn\ntruebred\ntruehearted\ntrueheartedly\ntrueheartedness\ntruelike\ntruelove\ntrueness\ntruepenny\ntruer\ntruff\ntruffle\ntruffled\ntrufflelike\ntruffler\ntrufflesque\ntrug\ntruish\ntruism\ntruismatic\ntruistic\ntruistical\ntrull\nTrullan\ntruller\ntrullization\ntrullo\ntruly\ntrumbash\ntrummel\ntrump\ntrumper\ntrumperiness\ntrumpery\ntrumpet\ntrumpetbush\ntrumpeter\ntrumpeting\ntrumpetless\ntrumpetlike\ntrumpetry\ntrumpetweed\ntrumpetwood\ntrumpety\ntrumph\ntrumpie\ntrumpless\ntrumplike\ntrun\ntruncage\ntruncal\ntruncate\ntruncated\nTruncatella\nTruncatellidae\ntruncately\ntruncation\ntruncator\ntruncatorotund\ntruncatosinuate\ntruncature\ntrunch\ntrunched\ntruncheon\ntruncheoned\ntruncher\ntrunchman\ntrundle\ntrundlehead\ntrundler\ntrundleshot\ntrundletail\ntrundling\ntrunk\ntrunkback\ntrunked\ntrunkfish\ntrunkful\ntrunking\ntrunkless\ntrunkmaker\ntrunknose\ntrunkway\ntrunkwork\ntrunnel\ntrunnion\ntrunnioned\ntrunnionless\ntrush\ntrusion\ntruss\ntrussed\ntrussell\ntrusser\ntrussing\ntrussmaker\ntrussmaking\ntrusswork\ntrust\ntrustability\ntrustable\ntrustableness\ntrustably\ntrustee\ntrusteeism\ntrusteeship\ntrusten\ntruster\ntrustful\ntrustfully\ntrustfulness\ntrustification\ntrustify\ntrustihood\ntrustily\ntrustiness\ntrusting\ntrustingly\ntrustingness\ntrustle\ntrustless\ntrustlessly\ntrustlessness\ntrustman\ntrustmonger\ntrustwoman\ntrustworthily\ntrustworthiness\ntrustworthy\ntrusty\ntruth\ntruthable\ntruthful\ntruthfully\ntruthfulness\ntruthify\ntruthiness\ntruthless\ntruthlessly\ntruthlessness\ntruthlike\ntruthlikeness\ntruthsman\ntruthteller\ntruthtelling\ntruthy\nTrutta\ntruttaceous\ntruvat\ntruxillic\ntruxilline\ntry\ntrygon\nTrygonidae\ntryhouse\nTrying\ntrying\ntryingly\ntryingness\ntryma\ntryout\ntryp\ntrypa\ntrypan\ntrypaneid\nTrypaneidae\ntrypanocidal\ntrypanocide\ntrypanolysin\ntrypanolysis\ntrypanolytic\nTrypanosoma\ntrypanosoma\ntrypanosomacidal\ntrypanosomacide\ntrypanosomal\ntrypanosomatic\nTrypanosomatidae\ntrypanosomatosis\ntrypanosomatous\ntrypanosome\ntrypanosomiasis\ntrypanosomic\nTryparsamide\nTrypeta\ntrypetid\nTrypetidae\nTryphena\nTryphosa\ntrypiate\ntrypograph\ntrypographic\ntrypsin\ntrypsinize\ntrypsinogen\ntryptase\ntryptic\ntryptogen\ntryptone\ntryptonize\ntryptophan\ntrysail\ntryst\ntryster\ntrysting\ntryt\ntryworks\ntsadik\ntsamba\ntsantsa\ntsar\ntsardom\ntsarevitch\ntsarina\ntsaritza\ntsarship\ntsatlee\nTsattine\ntscharik\ntscheffkinite\nTscherkess\ntsere\ntsessebe\ntsetse\nTshi\ntsia\nTsiltaden\nTsimshian\ntsine\ntsingtauite\ntsiology\nTsoneca\nTsonecan\ntst\ntsuba\ntsubo\nTsuga\nTsuma\ntsumebite\ntsun\ntsunami\ntsungtu\nTsutsutsi\ntu\ntua\nTualati\nTuamotu\nTuamotuan\nTuan\ntuan\nTuareg\ntuarn\ntuart\ntuatara\ntuatera\ntuath\ntub\nTuba\ntuba\ntubae\ntubage\ntubal\ntubaphone\ntubar\ntubate\ntubatoxin\nTubatulabal\ntubba\ntubbable\ntubbal\ntubbeck\ntubber\ntubbie\ntubbiness\ntubbing\ntubbish\ntubboe\ntubby\ntube\ntubeflower\ntubeform\ntubeful\ntubehead\ntubehearted\ntubeless\ntubelet\ntubelike\ntubemaker\ntubemaking\ntubeman\ntuber\nTuberaceae\ntuberaceous\nTuberales\ntuberation\ntubercle\ntubercled\ntuberclelike\ntubercula\ntubercular\nTubercularia\nTuberculariaceae\ntuberculariaceous\ntubercularization\ntubercularize\ntubercularly\ntubercularness\ntuberculate\ntuberculated\ntuberculatedly\ntuberculately\ntuberculation\ntuberculatogibbous\ntuberculatonodose\ntuberculatoradiate\ntuberculatospinous\ntubercule\ntuberculed\ntuberculid\ntuberculide\ntuberculiferous\ntuberculiform\ntuberculin\ntuberculinic\ntuberculinization\ntuberculinize\ntuberculization\ntuberculize\ntuberculocele\ntuberculocidin\ntuberculoderma\ntuberculoid\ntuberculoma\ntuberculomania\ntuberculomata\ntuberculophobia\ntuberculoprotein\ntuberculose\ntuberculosectorial\ntuberculosed\ntuberculosis\ntuberculotherapist\ntuberculotherapy\ntuberculotoxin\ntuberculotrophic\ntuberculous\ntuberculously\ntuberculousness\ntuberculum\ntuberiferous\ntuberiform\ntuberin\ntuberization\ntuberize\ntuberless\ntuberoid\ntuberose\ntuberosity\ntuberous\ntuberously\ntuberousness\ntubesmith\ntubework\ntubeworks\ntubfish\ntubful\ntubicen\ntubicinate\ntubicination\nTubicola\nTubicolae\ntubicolar\ntubicolous\ntubicorn\ntubicornous\ntubifacient\ntubifer\ntubiferous\nTubifex\nTubificidae\nTubiflorales\ntubiflorous\ntubiform\ntubig\ntubik\ntubilingual\nTubinares\ntubinarial\ntubinarine\ntubing\nTubingen\ntubiparous\nTubipora\ntubipore\ntubiporid\nTubiporidae\ntubiporoid\ntubiporous\ntublet\ntublike\ntubmaker\ntubmaking\ntubman\ntuboabdominal\ntubocurarine\ntubolabellate\ntuboligamentous\ntuboovarial\ntuboovarian\ntuboperitoneal\ntuborrhea\ntubotympanal\ntubovaginal\ntubular\nTubularia\ntubularia\nTubulariae\ntubularian\nTubularida\ntubularidan\nTubulariidae\ntubularity\ntubularly\ntubulate\ntubulated\ntubulation\ntubulator\ntubulature\ntubule\ntubulet\ntubuli\ntubulibranch\ntubulibranchian\nTubulibranchiata\ntubulibranchiate\nTubulidentata\ntubulidentate\nTubulifera\ntubuliferan\ntubuliferous\ntubulifloral\ntubuliflorous\ntubuliform\nTubulipora\ntubulipore\ntubuliporid\nTubuliporidae\ntubuliporoid\ntubulization\ntubulodermoid\ntubuloracemose\ntubulosaccular\ntubulose\ntubulostriato\ntubulous\ntubulously\ntubulousness\ntubulure\ntubulus\ntubwoman\nTucana\nTucanae\ntucandera\nTucano\ntuchit\ntuchun\ntuchunate\ntuchunism\ntuchunize\ntuck\nTuckahoe\ntuckahoe\ntucker\ntuckermanity\ntucket\ntucking\ntuckner\ntuckshop\ntucktoo\ntucky\ntucum\ntucuma\ntucuman\nTucuna\ntudel\nTudesque\nTudor\nTudoresque\ntue\ntueiron\nTuesday\ntufa\ntufaceous\ntufalike\ntufan\ntuff\ntuffaceous\ntuffet\ntuffing\ntuft\ntuftaffeta\ntufted\ntufter\ntufthunter\ntufthunting\ntuftily\ntufting\ntuftlet\ntufty\ntug\ntugboat\ntugboatman\ntugger\ntuggery\ntugging\ntuggingly\ntughra\ntugless\ntuglike\ntugman\ntugrik\ntugui\ntugurium\ntui\ntuik\ntuille\ntuillette\ntuilyie\ntuism\ntuition\ntuitional\ntuitionary\ntuitive\ntuke\ntukra\nTukuler\nTukulor\ntula\nTulalip\ntulare\ntularemia\ntulasi\nTulbaghia\ntulchan\ntulchin\ntule\ntuliac\ntulip\nTulipa\ntulipflower\ntulipiferous\ntulipist\ntuliplike\ntulipomania\ntulipomaniac\ntulipwood\ntulipy\ntulisan\nTulkepaia\ntulle\nTullian\ntullibee\nTulostoma\ntulsi\nTulu\ntulwar\ntum\ntumasha\ntumatakuru\ntumatukuru\ntumbak\ntumbester\ntumble\ntumblebug\ntumbled\ntumbledung\ntumbler\ntumblerful\ntumblerlike\ntumblerwise\ntumbleweed\ntumblification\ntumbling\ntumblingly\ntumbly\nTumboa\ntumbrel\ntume\ntumefacient\ntumefaction\ntumefy\ntumescence\ntumescent\ntumid\ntumidity\ntumidly\ntumidness\nTumion\ntummals\ntummel\ntummer\ntummock\ntummy\ntumor\ntumored\ntumorlike\ntumorous\ntump\ntumpline\ntumtum\ntumular\ntumulary\ntumulate\ntumulation\ntumuli\ntumulose\ntumulosity\ntumulous\ntumult\ntumultuarily\ntumultuariness\ntumultuary\ntumultuate\ntumultuation\ntumultuous\ntumultuously\ntumultuousness\ntumulus\nTumupasa\ntun\nTuna\ntuna\ntunable\ntunableness\ntunably\ntunbellied\ntunbelly\ntunca\ntund\ntundagslatta\ntunder\ntundish\ntundra\ntundun\ntune\nTunebo\ntuned\ntuneful\ntunefully\ntunefulness\ntuneless\ntunelessly\ntunelessness\ntunemaker\ntunemaking\ntuner\ntunesome\ntunester\ntunful\ntung\nTunga\nTungan\ntungate\ntungo\ntungstate\ntungsten\ntungstenic\ntungsteniferous\ntungstenite\ntungstic\ntungstite\ntungstosilicate\ntungstosilicic\nTungus\nTungusian\nTungusic\ntunhoof\ntunic\nTunica\nTunican\ntunicary\nTunicata\ntunicate\ntunicated\ntunicin\ntunicked\ntunicle\ntunicless\ntuniness\ntuning\ntunish\nTunisian\ntunist\ntunk\nTunker\ntunket\ntunlike\ntunmoot\ntunna\ntunnel\ntunneled\ntunneler\ntunneling\ntunnelist\ntunnelite\ntunnellike\ntunnelly\ntunnelmaker\ntunnelmaking\ntunnelman\ntunnelway\ntunner\ntunnery\nTunnit\ntunnland\ntunnor\ntunny\ntuno\ntunu\ntuny\ntup\nTupaia\nTupaiidae\ntupakihi\ntupanship\ntupara\ntupek\ntupelo\nTupi\nTupian\ntupik\nTupinamba\nTupinaqui\ntupman\ntuppence\ntuppenny\nTupperian\nTupperish\nTupperism\nTupperize\ntupuna\ntuque\ntur\nturacin\nTuracus\nTuranian\nTuranianism\nTuranism\nturanose\nturb\nturban\nturbaned\nturbanesque\nturbanette\nturbanless\nturbanlike\nturbantop\nturbanwise\nturbary\nturbeh\nTurbellaria\nturbellarian\nturbellariform\nturbescency\nturbid\nturbidimeter\nturbidimetric\nturbidimetry\nturbidity\nturbidly\nturbidness\nturbinaceous\nturbinage\nturbinal\nturbinate\nturbinated\nturbination\nturbinatoconcave\nturbinatocylindrical\nturbinatoglobose\nturbinatostipitate\nturbine\nturbinectomy\nturbined\nturbinelike\nTurbinella\nTurbinellidae\nturbinelloid\nturbiner\nturbines\nTurbinidae\nturbiniform\nturbinoid\nturbinotome\nturbinotomy\nturbit\nturbith\nturbitteen\nTurbo\nturbo\nturboalternator\nturboblower\nturbocompressor\nturbodynamo\nturboexciter\nturbofan\nturbogenerator\nturbomachine\nturbomotor\nturbopump\nturbosupercharge\nturbosupercharger\nturbot\nturbotlike\nturboventilator\nturbulence\nturbulency\nturbulent\nturbulently\nturbulentness\nTurcian\nTurcic\nTurcification\nTurcism\nTurcize\nTurco\nturco\nTurcoman\nTurcophilism\nturcopole\nturcopolier\nturd\nTurdetan\nTurdidae\nturdiform\nTurdinae\nturdine\nturdoid\nTurdus\ntureen\ntureenful\nturf\nturfage\nturfdom\nturfed\nturfen\nturfiness\nturfing\nturfite\nturfless\nturflike\nturfman\nturfwise\nturfy\nturgency\nturgent\nturgently\nturgesce\nturgescence\nturgescency\nturgescent\nturgescible\nturgid\nturgidity\nturgidly\nturgidness\nturgite\nturgoid\nturgor\nturgy\nTuri\nturicata\nturio\nturion\nturioniferous\nturjaite\nturjite\nTurk\nturk\nTurkana\nTurkdom\nTurkeer\nturken\nTurkery\nTurkess\nTurkey\nturkey\nturkeyback\nturkeyberry\nturkeybush\nTurkeydom\nturkeyfoot\nTurkeyism\nturkeylike\nTurki\nTurkic\nTurkicize\nTurkification\nTurkify\nturkis\nTurkish\nTurkishly\nTurkishness\nTurkism\nTurkize\nturkle\nTurklike\nTurkman\nTurkmen\nTurkmenian\nTurkologist\nTurkology\nTurkoman\nTurkomania\nTurkomanic\nTurkomanize\nTurkophil\nTurkophile\nTurkophilia\nTurkophilism\nTurkophobe\nTurkophobist\nturlough\nTurlupin\nturm\nturma\nturment\nturmeric\nturmit\nturmoil\nturmoiler\nturn\nturnable\nturnabout\nturnagain\nturnaround\nturnaway\nturnback\nturnbout\nturnbuckle\nturncap\nturncoat\nturncoatism\nturncock\nturndown\nturndun\nturned\nturnel\nturner\nTurnera\nTurneraceae\nturneraceous\nTurneresque\nTurnerian\nTurnerism\nturnerite\nturnery\nturney\nturngate\nturnhall\nTurnhalle\nTurnices\nTurnicidae\nturnicine\nTurnicomorphae\nturnicomorphic\nturning\nturningness\nturnip\nturniplike\nturnipweed\nturnipwise\nturnipwood\nturnipy\nTurnix\nturnix\nturnkey\nturnoff\nturnout\nturnover\nturnpike\nturnpiker\nturnpin\nturnplate\nturnplow\nturnrow\nturns\nturnscrew\nturnsheet\nturnskin\nturnsole\nturnspit\nturnstile\nturnstone\nturntable\nturntail\nturnup\nturnwrest\nturnwrist\nTuronian\nturp\nturpantineweed\nturpentine\nturpentineweed\nturpentinic\nturpeth\nturpethin\nturpid\nturpidly\nturpitude\nturps\nturquoise\nturquoiseberry\nturquoiselike\nturr\nturret\nturreted\nturrethead\nturretlike\nturrical\nturricle\nturricula\nturriculae\nturricular\nturriculate\nturriferous\nturriform\nturrigerous\nTurrilepas\nturrilite\nTurrilites\nturriliticone\nTurrilitidae\nTurritella\nturritella\nturritellid\nTurritellidae\nturritelloid\nturse\nTursenoi\nTursha\ntursio\nTursiops\nTurtan\nturtle\nturtleback\nturtlebloom\nturtledom\nturtledove\nturtlehead\nturtleize\nturtlelike\nturtler\nturtlet\nturtling\nturtosa\ntururi\nturus\nTurveydrop\nTurveydropdom\nTurveydropian\nturwar\nTusayan\nTuscan\nTuscanism\nTuscanize\nTuscanlike\nTuscany\nTuscarora\ntusche\nTusculan\nTush\ntush\ntushed\nTushepaw\ntusher\ntushery\ntusk\ntuskar\ntusked\nTuskegee\ntusker\ntuskish\ntuskless\ntusklike\ntuskwise\ntusky\ntussah\ntussal\ntusser\ntussicular\nTussilago\ntussis\ntussive\ntussle\ntussock\ntussocked\ntussocker\ntussocky\ntussore\ntussur\ntut\ntutania\ntutball\ntute\ntutee\ntutela\ntutelage\ntutelar\ntutelary\nTutelo\ntutenag\ntuth\ntutin\ntutiorism\ntutiorist\ntutly\ntutman\ntutor\ntutorage\ntutorer\ntutoress\ntutorhood\ntutorial\ntutorially\ntutoriate\ntutorism\ntutorization\ntutorize\ntutorless\ntutorly\ntutorship\ntutory\ntutoyer\ntutress\ntutrice\ntutrix\ntuts\ntutsan\ntutster\ntutti\ntuttiman\ntutty\ntutu\ntutulus\nTututni\ntutwork\ntutworker\ntutworkman\ntuwi\ntux\ntuxedo\ntuyere\nTuyuneiri\ntuza\nTuzla\ntuzzle\ntwa\nTwaddell\ntwaddle\ntwaddledom\ntwaddleize\ntwaddlement\ntwaddlemonger\ntwaddler\ntwaddlesome\ntwaddling\ntwaddlingly\ntwaddly\ntwaddy\ntwae\ntwaesome\ntwafauld\ntwagger\ntwain\ntwaite\ntwal\ntwale\ntwalpenny\ntwalpennyworth\ntwalt\nTwana\ntwang\ntwanger\ntwanginess\ntwangle\ntwangler\ntwangy\ntwank\ntwanker\ntwanking\ntwankingly\ntwankle\ntwanky\ntwant\ntwarly\ntwas\ntwasome\ntwat\ntwatchel\ntwatterlight\ntwattle\ntwattler\ntwattling\ntway\ntwayblade\ntwazzy\ntweag\ntweak\ntweaker\ntweaky\ntwee\ntweed\ntweeded\ntweedle\ntweedledee\ntweedledum\ntweedy\ntweeg\ntweel\ntween\ntweenlight\ntweeny\ntweesh\ntweesht\ntweest\ntweet\ntweeter\ntweeze\ntweezer\ntweezers\ntweil\ntwelfhynde\ntwelfhyndeman\ntwelfth\ntwelfthly\nTwelfthtide\ntwelve\ntwelvefold\ntwelvehynde\ntwelvehyndeman\ntwelvemo\ntwelvemonth\ntwelvepence\ntwelvepenny\ntwelvescore\ntwentieth\ntwentiethly\ntwenty\ntwentyfold\ntwentymo\ntwere\ntwerp\nTwi\ntwibil\ntwibilled\ntwice\ntwicer\ntwicet\ntwichild\ntwick\ntwiddle\ntwiddler\ntwiddling\ntwiddly\ntwifoil\ntwifold\ntwifoldly\ntwig\ntwigful\ntwigged\ntwiggen\ntwigger\ntwiggy\ntwigless\ntwiglet\ntwiglike\ntwigsome\ntwigwithy\ntwilight\ntwilightless\ntwilightlike\ntwilighty\ntwilit\ntwill\ntwilled\ntwiller\ntwilling\ntwilly\ntwilt\ntwin\ntwinable\ntwinberry\ntwinborn\ntwindle\ntwine\ntwineable\ntwinebush\ntwineless\ntwinelike\ntwinemaker\ntwinemaking\ntwiner\ntwinflower\ntwinfold\ntwinge\ntwingle\ntwinhood\ntwiningly\ntwinism\ntwink\ntwinkle\ntwinkledum\ntwinkleproof\ntwinkler\ntwinkles\ntwinkless\ntwinkling\ntwinklingly\ntwinkly\ntwinleaf\ntwinlike\ntwinling\ntwinly\ntwinned\ntwinner\ntwinness\ntwinning\ntwinship\ntwinsomeness\ntwinter\ntwiny\ntwire\ntwirk\ntwirl\ntwirler\ntwirligig\ntwirly\ntwiscar\ntwisel\ntwist\ntwistable\ntwisted\ntwistedly\ntwistened\ntwister\ntwisterer\ntwistical\ntwistification\ntwistily\ntwistiness\ntwisting\ntwistingly\ntwistiways\ntwistiwise\ntwistle\ntwistless\ntwisty\ntwit\ntwitch\ntwitchel\ntwitcheling\ntwitcher\ntwitchet\ntwitchety\ntwitchfire\ntwitchily\ntwitchiness\ntwitchingly\ntwitchy\ntwite\ntwitlark\ntwitten\ntwitter\ntwitteration\ntwitterboned\ntwitterer\ntwittering\ntwitteringly\ntwitterly\ntwittery\ntwittingly\ntwitty\ntwixt\ntwixtbrain\ntwizzened\ntwizzle\ntwo\ntwodecker\ntwofold\ntwofoldly\ntwofoldness\ntwoling\ntwoness\ntwopence\ntwopenny\ntwosome\ntwyblade\ntwyhynde\nTybalt\nTyburn\nTyburnian\nTyche\ntychism\ntychite\nTychonian\nTychonic\ntychoparthenogenesis\ntychopotamic\ntycoon\ntycoonate\ntyddyn\ntydie\ntye\ntyee\ntyg\nTyigh\ntying\ntyke\ntyken\ntykhana\ntyking\ntylarus\ntyleberry\nTylenchus\nTyler\nTylerism\nTylerite\nTylerize\ntylion\ntyloma\ntylopod\nTylopoda\ntylopodous\nTylosaurus\ntylose\ntylosis\ntylosteresis\nTylostoma\nTylostomaceae\ntylostylar\ntylostyle\ntylostylote\ntylostylus\nTylosurus\ntylotate\ntylote\ntylotic\ntylotoxea\ntylotoxeate\ntylotus\ntylus\ntymbalon\ntymp\ntympan\ntympana\ntympanal\ntympanectomy\ntympani\ntympanic\ntympanichord\ntympanichordal\ntympanicity\ntympaniform\ntympaning\ntympanism\ntympanist\ntympanites\ntympanitic\ntympanitis\ntympanocervical\ntympanohyal\ntympanomalleal\ntympanomandibular\ntympanomastoid\ntympanomaxillary\ntympanon\ntympanoperiotic\ntympanosis\ntympanosquamosal\ntympanostapedial\ntympanotemporal\ntympanotomy\nTympanuchus\ntympanum\ntympany\ntynd\nTyndallization\nTyndallize\ntyndallmeter\nTynwald\ntypal\ntyparchical\ntype\ntypecast\nTypees\ntypeholder\ntyper\ntypescript\ntypeset\ntypesetter\ntypesetting\ntypewrite\ntypewriter\ntypewriting\nTypha\nTyphaceae\ntyphaceous\ntyphemia\ntyphia\ntyphic\ntyphinia\ntyphization\ntyphlatonia\ntyphlatony\ntyphlectasis\ntyphlectomy\ntyphlenteritis\ntyphlitic\ntyphlitis\ntyphloalbuminuria\ntyphlocele\ntyphloempyema\ntyphloenteritis\ntyphlohepatitis\ntyphlolexia\ntyphlolithiasis\ntyphlology\ntyphlomegaly\nTyphlomolge\ntyphlon\ntyphlopexia\ntyphlopexy\ntyphlophile\ntyphlopid\nTyphlopidae\nTyphlops\ntyphloptosis\ntyphlosis\ntyphlosolar\ntyphlosole\ntyphlostenosis\ntyphlostomy\ntyphlotomy\ntyphobacillosis\nTyphoean\ntyphoemia\ntyphogenic\ntyphoid\ntyphoidal\ntyphoidin\ntyphoidlike\ntypholysin\ntyphomalaria\ntyphomalarial\ntyphomania\ntyphonia\nTyphonian\nTyphonic\ntyphonic\ntyphoon\ntyphoonish\ntyphopneumonia\ntyphose\ntyphosepsis\ntyphosis\ntyphotoxine\ntyphous\nTyphula\ntyphus\ntypic\ntypica\ntypical\ntypicality\ntypically\ntypicalness\ntypicon\ntypicum\ntypification\ntypifier\ntypify\ntypist\ntypo\ntypobar\ntypocosmy\ntypographer\ntypographia\ntypographic\ntypographical\ntypographically\ntypographist\ntypography\ntypolithographic\ntypolithography\ntypologic\ntypological\ntypologically\ntypologist\ntypology\ntypomania\ntypometry\ntyponym\ntyponymal\ntyponymic\ntyponymous\ntypophile\ntyporama\ntyposcript\ntypotelegraph\ntypotelegraphy\ntypothere\nTypotheria\nTypotheriidae\ntypothetae\ntypp\ntyptological\ntyptologist\ntyptology\ntypy\ntyramine\ntyranness\nTyranni\ntyrannial\ntyrannic\ntyrannical\ntyrannically\ntyrannicalness\ntyrannicidal\ntyrannicide\ntyrannicly\nTyrannidae\nTyrannides\nTyranninae\ntyrannine\ntyrannism\ntyrannize\ntyrannizer\ntyrannizing\ntyrannizingly\ntyrannoid\ntyrannophobia\ntyrannosaur\nTyrannosaurus\ntyrannous\ntyrannously\ntyrannousness\nTyrannus\ntyranny\ntyrant\ntyrantcraft\ntyrantlike\ntyrantship\ntyre\ntyremesis\nTyrian\ntyriasis\ntyro\ntyrocidin\ntyrocidine\ntyroglyphid\nTyroglyphidae\nTyroglyphus\nTyrolean\nTyrolese\nTyrolienne\ntyrolite\ntyrology\ntyroma\ntyromancy\ntyromatous\ntyrone\ntyronic\ntyronism\ntyrosinase\ntyrosine\ntyrosinuria\ntyrosyl\ntyrotoxicon\ntyrotoxine\nTyrr\nTyrrhene\nTyrrheni\nTyrrhenian\nTyrsenoi\nTyrtaean\ntysonite\ntyste\ntyt\nTyto\nTytonidae\nTzaam\nTzapotec\ntzaritza\nTzendal\nTzental\ntzolkin\ntzontle\nTzotzil\nTzutuhil\nU\nu\nuang\nUaraycu\nUarekena\nUaupe\nuayeb\nUbbenite\nUbbonite\nuberant\nuberous\nuberously\nuberousness\nuberty\nubi\nubication\nubiety\nUbii\nUbiquarian\nubiquarian\nubiquious\nUbiquist\nubiquit\nUbiquitarian\nubiquitarian\nUbiquitarianism\nubiquitariness\nubiquitary\nUbiquitism\nUbiquitist\nubiquitous\nubiquitously\nubiquitousness\nubiquity\nubussu\nUca\nUcal\nUcayale\nUchean\nUchee\nuckia\nUd\nudal\nudaler\nudaller\nudalman\nudasi\nudder\nuddered\nudderful\nudderless\nudderlike\nudell\nUdi\nUdic\nUdish\nudo\nUdolphoish\nudometer\nudometric\nudometry\nudomograph\nUds\nUeueteotl\nug\nUgandan\nUgarono\nugh\nuglification\nuglifier\nuglify\nuglily\nugliness\nuglisome\nugly\nUgrian\nUgric\nUgroid\nugsome\nugsomely\nugsomeness\nuhlan\nuhllo\nuhtensang\nuhtsong\nUigur\nUigurian\nUiguric\nuily\nuinal\nUinta\nuintaite\nuintathere\nUintatheriidae\nUintatherium\nuintjie\nUirina\nUitotan\nuitspan\nuji\nukase\nuke\nukiyoye\nUkrainer\nUkrainian\nukulele\nula\nulatrophia\nulcer\nulcerable\nulcerate\nulceration\nulcerative\nulcered\nulceromembranous\nulcerous\nulcerously\nulcerousness\nulcery\nulcuscle\nulcuscule\nule\nulema\nulemorrhagia\nulerythema\nuletic\nUlex\nulex\nulexine\nulexite\nUlidia\nUlidian\nuliginose\nuliginous\nulitis\null\nulla\nullage\nullaged\nullagone\nuller\nulling\nullmannite\nulluco\nUlmaceae\nulmaceous\nUlmaria\nulmic\nulmin\nulminic\nulmo\nulmous\nUlmus\nulna\nulnad\nulnae\nulnar\nulnare\nulnaria\nulnocarpal\nulnocondylar\nulnometacarpal\nulnoradial\nuloborid\nUloboridae\nUloborus\nulocarcinoma\nuloid\nUlonata\nuloncus\nUlophocinae\nulorrhagia\nulorrhagy\nulorrhea\nUlothrix\nUlotrichaceae\nulotrichaceous\nUlotrichales\nulotrichan\nUlotriches\nUlotrichi\nulotrichous\nulotrichy\nulrichite\nulster\nulstered\nulsterette\nUlsterian\nulstering\nUlsterite\nUlsterman\nulterior\nulteriorly\nultima\nultimacy\nultimata\nultimate\nultimately\nultimateness\nultimation\nultimatum\nultimity\nultimo\nultimobranchial\nultimogenitary\nultimogeniture\nultimum\nUltonian\nultra\nultrabasic\nultrabasite\nultrabelieving\nultrabenevolent\nultrabrachycephalic\nultrabrachycephaly\nultrabrilliant\nultracentenarian\nultracentenarianism\nultracentralizer\nultracentrifuge\nultraceremonious\nultrachurchism\nultracivil\nultracomplex\nultraconcomitant\nultracondenser\nultraconfident\nultraconscientious\nultraconservatism\nultraconservative\nultracordial\nultracosmopolitan\nultracredulous\nultracrepidarian\nultracrepidarianism\nultracrepidate\nultracritical\nultradandyism\nultradeclamatory\nultrademocratic\nultradespotic\nultradignified\nultradiscipline\nultradolichocephalic\nultradolichocephaly\nultradolichocranial\nultraeducationist\nultraeligible\nultraelliptic\nultraemphasis\nultraenergetic\nultraenforcement\nultraenthusiasm\nultraenthusiastic\nultraepiscopal\nultraevangelical\nultraexcessive\nultraexclusive\nultraexpeditious\nultrafantastic\nultrafashionable\nultrafastidious\nultrafederalist\nultrafeudal\nultrafidian\nultrafidianism\nultrafilter\nultrafilterability\nultrafilterable\nultrafiltrate\nultrafiltration\nultraformal\nultrafrivolous\nultragallant\nultragaseous\nultragenteel\nultragood\nultragrave\nultraheroic\nultrahonorable\nultrahuman\nultraimperialism\nultraimperialist\nultraimpersonal\nultrainclusive\nultraindifferent\nultraindulgent\nultraingenious\nultrainsistent\nultraintimate\nultrainvolved\nultraism\nultraist\nultraistic\nultralaborious\nultralegality\nultralenient\nultraliberal\nultraliberalism\nultralogical\nultraloyal\nultraluxurious\nultramarine\nultramaternal\nultramaximal\nultramelancholy\nultramicrochemical\nultramicrochemist\nultramicrochemistry\nultramicrometer\nultramicron\nultramicroscope\nultramicroscopic\nultramicroscopical\nultramicroscopy\nultraminute\nultramoderate\nultramodern\nultramodernism\nultramodernist\nultramodernistic\nultramodest\nultramontane\nultramontanism\nultramontanist\nultramorose\nultramulish\nultramundane\nultranational\nultranationalism\nultranationalist\nultranatural\nultranegligent\nultranice\nultranonsensical\nultraobscure\nultraobstinate\nultraofficious\nultraoptimistic\nultraornate\nultraorthodox\nultraorthodoxy\nultraoutrageous\nultrapapist\nultraparallel\nultraperfect\nultrapersuasive\nultraphotomicrograph\nultrapious\nultraplanetary\nultraplausible\nultrapopish\nultraproud\nultraprudent\nultraradical\nultraradicalism\nultrarapid\nultrareactionary\nultrared\nultrarefined\nultrarefinement\nultrareligious\nultraremuneration\nultrarepublican\nultrarevolutionary\nultrarevolutionist\nultraritualism\nultraromantic\nultraroyalism\nultraroyalist\nultrasanguine\nultrascholastic\nultraselect\nultraservile\nultrasevere\nultrashrewd\nultrasimian\nultrasolemn\nultrasonic\nultrasonics\nultraspartan\nultraspecialization\nultraspiritualism\nultrasplendid\nultrastandardization\nultrastellar\nultrasterile\nultrastrenuous\nultrastrict\nultrasubtle\nultrasystematic\nultratechnical\nultratense\nultraterrene\nultraterrestrial\nultratotal\nultratrivial\nultratropical\nultraugly\nultrauncommon\nultraurgent\nultravicious\nultraviolent\nultraviolet\nultravirtuous\nultravirus\nultravisible\nultrawealthy\nultrawise\nultrayoung\nultrazealous\nultrazodiacal\nultroneous\nultroneously\nultroneousness\nulu\nUlua\nulua\nuluhi\nululant\nululate\nululation\nululative\nululatory\nululu\nUlva\nUlvaceae\nulvaceous\nUlvales\nUlvan\nUlyssean\nUlysses\num\numangite\nUmatilla\nUmaua\numbeclad\numbel\numbeled\numbella\nUmbellales\numbellar\numbellate\numbellated\numbellately\numbellet\numbellic\numbellifer\nUmbelliferae\numbelliferone\numbelliferous\numbelliflorous\numbelliform\numbelloid\nUmbellula\nUmbellularia\numbellulate\numbellule\nUmbellulidae\numbelluliferous\numbelwort\number\numbethink\numbilectomy\numbilic\numbilical\numbilically\numbilicar\nUmbilicaria\numbilicate\numbilicated\numbilication\numbilici\numbiliciform\numbilicus\numbiliform\numbilroot\numble\numbo\numbolateral\numbonal\numbonate\numbonated\numbonation\numbone\numbones\numbonial\numbonic\numbonulate\numbonule\nUmbra\numbra\numbracious\numbraciousness\numbraculate\numbraculiferous\numbraculiform\numbraculum\numbrae\numbrage\numbrageous\numbrageously\numbrageousness\numbral\numbrally\numbratile\numbrel\numbrella\numbrellaed\numbrellaless\numbrellalike\numbrellawise\numbrellawort\numbrette\nUmbrian\nUmbriel\numbriferous\numbriferously\numbriferousness\numbril\numbrine\numbrose\numbrosity\numbrous\nUmbundu\nume\numiak\numiri\numlaut\nump\numph\numpirage\numpire\numpirer\numpireship\numpiress\numpirism\nUmpqua\numpteen\numpteenth\numptekite\numptieth\numpty\numquhile\numu\nun\nUna\nunabandoned\nunabased\nunabasedly\nunabashable\nunabashed\nunabashedly\nunabatable\nunabated\nunabatedly\nunabating\nunabatingly\nunabbreviated\nunabetted\nunabettedness\nunabhorred\nunabiding\nunabidingly\nunabidingness\nunability\nunabject\nunabjured\nunable\nunableness\nunably\nunabolishable\nunabolished\nunabraded\nunabrased\nunabridgable\nunabridged\nunabrogated\nunabrupt\nunabsent\nunabsolute\nunabsolvable\nunabsolved\nunabsolvedness\nunabsorb\nunabsorbable\nunabsorbed\nunabsorbent\nunabstract\nunabsurd\nunabundance\nunabundant\nunabundantly\nunabused\nunacademic\nunacademical\nunaccelerated\nunaccent\nunaccented\nunaccentuated\nunaccept\nunacceptability\nunacceptable\nunacceptableness\nunacceptably\nunacceptance\nunacceptant\nunaccepted\nunaccessibility\nunaccessible\nunaccessibleness\nunaccessibly\nunaccessional\nunaccessory\nunaccidental\nunaccidentally\nunaccidented\nunacclimated\nunacclimation\nunacclimatization\nunacclimatized\nunaccommodable\nunaccommodated\nunaccommodatedness\nunaccommodating\nunaccommodatingly\nunaccommodatingness\nunaccompanable\nunaccompanied\nunaccompanying\nunaccomplishable\nunaccomplished\nunaccomplishedness\nunaccord\nunaccordable\nunaccordance\nunaccordant\nunaccorded\nunaccording\nunaccordingly\nunaccostable\nunaccosted\nunaccountability\nunaccountable\nunaccountableness\nunaccountably\nunaccounted\nunaccoutered\nunaccoutred\nunaccreditated\nunaccredited\nunaccrued\nunaccumulable\nunaccumulate\nunaccumulated\nunaccumulation\nunaccuracy\nunaccurate\nunaccurately\nunaccurateness\nunaccursed\nunaccusable\nunaccusably\nunaccuse\nunaccusing\nunaccustom\nunaccustomed\nunaccustomedly\nunaccustomedness\nunachievable\nunachieved\nunaching\nunacidulated\nunacknowledged\nunacknowledgedness\nunacknowledging\nunacknowledgment\nunacoustic\nunacquaint\nunacquaintable\nunacquaintance\nunacquainted\nunacquaintedly\nunacquaintedness\nunacquiescent\nunacquirable\nunacquirableness\nunacquirably\nunacquired\nunacquit\nunacquittable\nunacquitted\nunacquittedness\nunact\nunactability\nunactable\nunacted\nunacting\nunactinic\nunaction\nunactivated\nunactive\nunactively\nunactiveness\nunactivity\nunactorlike\nunactual\nunactuality\nunactually\nunactuated\nunacute\nunacutely\nunadapt\nunadaptability\nunadaptable\nunadaptableness\nunadaptably\nunadapted\nunadaptedly\nunadaptedness\nunadaptive\nunadd\nunaddable\nunadded\nunaddicted\nunaddictedness\nunadditional\nunaddress\nunaddressed\nunadequate\nunadequately\nunadequateness\nunadherence\nunadherent\nunadherently\nunadhesive\nunadjacent\nunadjacently\nunadjectived\nunadjourned\nunadjournment\nunadjudged\nunadjust\nunadjustably\nunadjusted\nunadjustment\nunadministered\nunadmirable\nunadmire\nunadmired\nunadmiring\nunadmissible\nunadmissibly\nunadmission\nunadmittable\nunadmittableness\nunadmittably\nunadmitted\nunadmittedly\nunadmitting\nunadmonished\nunadopt\nunadoptable\nunadoptably\nunadopted\nunadoption\nunadorable\nunadoration\nunadored\nunadoring\nunadorn\nunadornable\nunadorned\nunadornedly\nunadornedness\nunadornment\nunadult\nunadulterate\nunadulterated\nunadulteratedly\nunadulteratedness\nunadulterately\nunadulterous\nunadulterously\nunadvanced\nunadvancedly\nunadvancedness\nunadvancement\nunadvancing\nunadvantaged\nunadvantageous\nunadventured\nunadventuring\nunadventurous\nunadventurously\nunadverse\nunadversely\nunadverseness\nunadvertency\nunadvertised\nunadvertisement\nunadvertising\nunadvisability\nunadvisable\nunadvisableness\nunadvisably\nunadvised\nunadvisedly\nunadvisedness\nunadvocated\nunaerated\nunaesthetic\nunaesthetical\nunafeard\nunafeared\nunaffable\nunaffably\nunaffected\nunaffectedly\nunaffectedness\nunaffecting\nunaffectionate\nunaffectionately\nunaffectioned\nunaffianced\nunaffied\nunaffiliated\nunaffiliation\nunaffirmation\nunaffirmed\nunaffixed\nunafflicted\nunafflictedly\nunafflicting\nunaffliction\nunaffordable\nunafforded\nunaffranchised\nunaffrighted\nunaffrightedly\nunaffronted\nunafire\nunafloat\nunaflow\nunafraid\nunaged\nunaggravated\nunaggravating\nunaggregated\nunaggression\nunaggressive\nunaggressively\nunaggressiveness\nunaghast\nunagile\nunagility\nunaging\nunagitated\nunagitatedly\nunagitatedness\nunagitation\nunagonize\nunagrarian\nunagreeable\nunagreeableness\nunagreeably\nunagreed\nunagreeing\nunagreement\nunagricultural\nunaidable\nunaided\nunaidedly\nunaiding\nunailing\nunaimed\nunaiming\nunaired\nunaisled\nUnakhotana\nunakin\nunakite\nunal\nUnalachtigo\nunalarm\nunalarmed\nunalarming\nUnalaska\nunalcoholized\nunaldermanly\nunalert\nunalertly\nunalertness\nunalgebraical\nunalienable\nunalienableness\nunalienably\nunalienated\nunalignable\nunaligned\nunalike\nunalimentary\nunalist\nunalive\nunallayable\nunallayably\nunallayed\nunalleged\nunallegorical\nunalleviably\nunalleviated\nunalleviation\nunalliable\nunallied\nunalliedly\nunalliedness\nunallotment\nunallotted\nunallow\nunallowable\nunallowed\nunallowedly\nunallowing\nunalloyed\nunallurable\nunallured\nunalluring\nunalluringly\nunalmsed\nunalone\nunaloud\nunalphabeted\nunalphabetic\nunalphabetical\nunalterability\nunalterable\nunalterableness\nunalterably\nunalteration\nunaltered\nunaltering\nunalternated\nunamalgamable\nunamalgamated\nunamalgamating\nunamassed\nunamazed\nunamazedly\nunambiguity\nunambiguous\nunambiguously\nunambiguousness\nunambition\nunambitious\nunambitiously\nunambitiousness\nunambrosial\nunambush\nunamenability\nunamenable\nunamenableness\nunamenably\nunamend\nunamendable\nunamended\nunamendedly\nunamending\nunamendment\nunamerced\nUnami\nunamiability\nunamiable\nunamiableness\nunamiably\nunamicable\nunamicably\nunamiss\nunamo\nunamortization\nunamortized\nunample\nunamplifiable\nunamplified\nunamply\nunamputated\nunamusable\nunamusably\nunamused\nunamusement\nunamusing\nunamusingly\nunamusive\nunanalogical\nunanalogous\nunanalogously\nunanalogousness\nunanalytic\nunanalytical\nunanalyzable\nunanalyzed\nunanalyzing\nunanatomizable\nunanatomized\nunancestored\nunancestried\nunanchor\nunanchored\nunanchylosed\nunancient\nunaneled\nunangelic\nunangelical\nunangrily\nunangry\nunangular\nunanimalized\nunanimate\nunanimated\nunanimatedly\nunanimatedness\nunanimately\nunanimism\nunanimist\nunanimistic\nunanimistically\nunanimity\nunanimous\nunanimously\nunanimousness\nunannealed\nunannex\nunannexed\nunannexedly\nunannexedness\nunannihilable\nunannihilated\nunannotated\nunannounced\nunannoyed\nunannoying\nunannullable\nunannulled\nunanointed\nunanswerability\nunanswerable\nunanswerableness\nunanswerably\nunanswered\nunanswering\nunantagonistic\nunantagonizable\nunantagonized\nunantagonizing\nunanticipated\nunanticipating\nunanticipatingly\nunanticipation\nunanticipative\nunantiquated\nunantiquatedness\nunantique\nunantiquity\nunanxiety\nunanxious\nunanxiously\nunanxiousness\nunapart\nunapocryphal\nunapologetic\nunapologizing\nunapostatized\nunapostolic\nunapostolical\nunapostolically\nunapostrophized\nunappalled\nunappareled\nunapparent\nunapparently\nunapparentness\nunappealable\nunappealableness\nunappealably\nunappealed\nunappealing\nunappeasable\nunappeasableness\nunappeasably\nunappeased\nunappeasedly\nunappeasedness\nunappendaged\nunapperceived\nunappertaining\nunappetizing\nunapplauded\nunapplauding\nunapplausive\nunappliable\nunappliableness\nunappliably\nunapplianced\nunapplicable\nunapplicableness\nunapplicably\nunapplied\nunapplying\nunappoint\nunappointable\nunappointableness\nunappointed\nunapportioned\nunapposite\nunappositely\nunappraised\nunappreciable\nunappreciableness\nunappreciably\nunappreciated\nunappreciating\nunappreciation\nunappreciative\nunappreciatively\nunappreciativeness\nunapprehendable\nunapprehendableness\nunapprehendably\nunapprehended\nunapprehending\nunapprehensible\nunapprehensibleness\nunapprehension\nunapprehensive\nunapprehensively\nunapprehensiveness\nunapprenticed\nunapprised\nunapprisedly\nunapprisedness\nunapproachability\nunapproachable\nunapproachableness\nunapproached\nunapproaching\nunapprobation\nunappropriable\nunappropriate\nunappropriated\nunappropriately\nunappropriateness\nunappropriation\nunapprovable\nunapprovableness\nunapprovably\nunapproved\nunapproving\nunapprovingly\nunapproximate\nunapproximately\nunaproned\nunapropos\nunapt\nunaptitude\nunaptly\nunaptness\nunarbitrarily\nunarbitrariness\nunarbitrary\nunarbitrated\nunarch\nunarchdeacon\nunarched\nunarchitectural\nunarduous\nunarguable\nunarguableness\nunarguably\nunargued\nunarguing\nunargumentative\nunargumentatively\nunarisen\nunarising\nunaristocratic\nunaristocratically\nunarithmetical\nunarithmetically\nunark\nunarm\nunarmed\nunarmedly\nunarmedness\nunarmored\nunarmorial\nunaromatized\nunarousable\nunaroused\nunarousing\nunarraignable\nunarraigned\nunarranged\nunarray\nunarrayed\nunarrestable\nunarrested\nunarresting\nunarrival\nunarrived\nunarriving\nunarrogance\nunarrogant\nunarrogating\nunarted\nunartful\nunartfully\nunartfulness\nunarticled\nunarticulate\nunarticulated\nunartificial\nunartificiality\nunartificially\nunartistic\nunartistical\nunartistically\nunartistlike\nunary\nunascendable\nunascendableness\nunascended\nunascertainable\nunascertainableness\nunascertainably\nunascertained\nunashamed\nunashamedly\nunashamedness\nunasinous\nunaskable\nunasked\nunasking\nunasleep\nunaspersed\nunasphalted\nunaspirated\nunaspiring\nunaspiringly\nunaspiringness\nunassailable\nunassailableness\nunassailably\nunassailed\nunassailing\nunassassinated\nunassaultable\nunassaulted\nunassayed\nunassaying\nunassembled\nunassented\nunassenting\nunasserted\nunassertive\nunassertiveness\nunassessable\nunassessableness\nunassessed\nunassibilated\nunassiduous\nunassignable\nunassignably\nunassigned\nunassimilable\nunassimilated\nunassimilating\nunassimilative\nunassisted\nunassisting\nunassociable\nunassociably\nunassociated\nunassociative\nunassociativeness\nunassoiled\nunassorted\nunassuageable\nunassuaged\nunassuaging\nunassuetude\nunassumable\nunassumed\nunassuming\nunassumingly\nunassumingness\nunassured\nunassuredly\nunassuredness\nunassuring\nunasterisk\nunastonish\nunastonished\nunastonishment\nunastray\nunathirst\nunathletically\nunatmospheric\nunatonable\nunatoned\nunatoning\nunattach\nunattachable\nunattached\nunattackable\nunattackableness\nunattackably\nunattacked\nunattainability\nunattainable\nunattainableness\nunattainably\nunattained\nunattaining\nunattainment\nunattaint\nunattainted\nunattaintedly\nunattempered\nunattemptable\nunattempted\nunattempting\nunattendance\nunattendant\nunattended\nunattentive\nunattenuated\nunattested\nunattestedness\nunattire\nunattired\nunattractable\nunattractableness\nunattracted\nunattracting\nunattractive\nunattractively\nunattractiveness\nunattributable\nunattributed\nunattuned\nunau\nunauctioned\nunaudible\nunaudibleness\nunaudibly\nunaudienced\nunaudited\nunaugmentable\nunaugmented\nunauspicious\nunauspiciously\nunauspiciousness\nunaustere\nunauthentic\nunauthentical\nunauthentically\nunauthenticated\nunauthenticity\nunauthorish\nunauthoritative\nunauthoritatively\nunauthoritativeness\nunauthoritied\nunauthoritiveness\nunauthorizable\nunauthorize\nunauthorized\nunauthorizedly\nunauthorizedness\nunautomatic\nunautumnal\nunavailability\nunavailable\nunavailableness\nunavailably\nunavailed\nunavailful\nunavailing\nunavailingly\nunavengeable\nunavenged\nunavenging\nunavenued\nunaveraged\nunaverred\nunaverted\nunavertible\nunavertibleness\nunavertibly\nunavian\nunavoidable\nunavoidableness\nunavoidably\nunavoidal\nunavoided\nunavoiding\nunavouchable\nunavouchableness\nunavouchably\nunavouched\nunavowable\nunavowableness\nunavowably\nunavowed\nunavowedly\nunawakable\nunawakableness\nunawake\nunawaked\nunawakened\nunawakenedness\nunawakening\nunawaking\nunawardable\nunawardableness\nunawardably\nunawarded\nunaware\nunawared\nunawaredly\nunawareness\nunawares\nunaway\nunawed\nunawful\nunawfully\nunawkward\nunawned\nunaxled\nunazotized\nunbackboarded\nunbacked\nunbackward\nunbadged\nunbaffled\nunbaffling\nunbag\nunbagged\nunbailable\nunbailableness\nunbailed\nunbain\nunbait\nunbaited\nunbaized\nunbaked\nunbalance\nunbalanceable\nunbalanceably\nunbalanced\nunbalancement\nunbalancing\nunbalconied\nunbale\nunbalked\nunballast\nunballasted\nunballoted\nunbandage\nunbandaged\nunbanded\nunbanished\nunbank\nunbankable\nunbankableness\nunbankably\nunbanked\nunbankrupt\nunbannered\nunbaptize\nunbaptized\nunbar\nunbarb\nunbarbarize\nunbarbarous\nunbarbed\nunbarbered\nunbare\nunbargained\nunbark\nunbarking\nunbaronet\nunbarrable\nunbarred\nunbarrel\nunbarreled\nunbarren\nunbarrenness\nunbarricade\nunbarricaded\nunbarricadoed\nunbase\nunbased\nunbasedness\nunbashful\nunbashfully\nunbashfulness\nunbasket\nunbastardized\nunbaste\nunbasted\nunbastilled\nunbastinadoed\nunbated\nunbathed\nunbating\nunbatted\nunbatten\nunbatterable\nunbattered\nunbattling\nunbay\nunbe\nunbeached\nunbeaconed\nunbeaded\nunbear\nunbearable\nunbearableness\nunbearably\nunbeard\nunbearded\nunbearing\nunbeast\nunbeatable\nunbeatableness\nunbeatably\nunbeaten\nunbeaued\nunbeauteous\nunbeauteously\nunbeauteousness\nunbeautified\nunbeautiful\nunbeautifully\nunbeautifulness\nunbeautify\nunbeavered\nunbeclogged\nunbeclouded\nunbecome\nunbecoming\nunbecomingly\nunbecomingness\nunbed\nunbedabbled\nunbedaggled\nunbedashed\nunbedaubed\nunbedded\nunbedecked\nunbedewed\nunbedimmed\nunbedinned\nunbedizened\nunbedraggled\nunbefit\nunbefitting\nunbefittingly\nunbefittingness\nunbefool\nunbefriend\nunbefriended\nunbefringed\nunbeget\nunbeggar\nunbegged\nunbegilt\nunbeginning\nunbeginningly\nunbeginningness\nunbegirded\nunbegirt\nunbegot\nunbegotten\nunbegottenly\nunbegottenness\nunbegreased\nunbegrimed\nunbegrudged\nunbeguile\nunbeguiled\nunbeguileful\nunbegun\nunbehaving\nunbeheaded\nunbeheld\nunbeholdable\nunbeholden\nunbeholdenness\nunbeholding\nunbehoveful\nunbehoving\nunbeing\nunbejuggled\nunbeknown\nunbeknownst\nunbelied\nunbelief\nunbeliefful\nunbelieffulness\nunbelievability\nunbelievable\nunbelievableness\nunbelievably\nunbelieve\nunbelieved\nunbeliever\nunbelieving\nunbelievingly\nunbelievingness\nunbell\nunbellicose\nunbelligerent\nunbelonging\nunbeloved\nunbelt\nunbemoaned\nunbemourned\nunbench\nunbend\nunbendable\nunbendableness\nunbendably\nunbended\nunbending\nunbendingly\nunbendingness\nunbendsome\nunbeneficed\nunbeneficent\nunbeneficial\nunbenefitable\nunbenefited\nunbenefiting\nunbenetted\nunbenevolence\nunbenevolent\nunbenevolently\nunbenight\nunbenighted\nunbenign\nunbenignant\nunbenignantly\nunbenignity\nunbenignly\nunbent\nunbenumb\nunbenumbed\nunbequeathable\nunbequeathed\nunbereaved\nunbereft\nunberouged\nunberth\nunberufen\nunbeseem\nunbeseeming\nunbeseemingly\nunbeseemingness\nunbeseemly\nunbeset\nunbesieged\nunbesmeared\nunbesmirched\nunbesmutted\nunbesot\nunbesought\nunbespeak\nunbespoke\nunbespoken\nunbesprinkled\nunbestarred\nunbestowed\nunbet\nunbeteared\nunbethink\nunbethought\nunbetide\nunbetoken\nunbetray\nunbetrayed\nunbetraying\nunbetrothed\nunbetterable\nunbettered\nunbeveled\nunbewailed\nunbewailing\nunbewilder\nunbewildered\nunbewilled\nunbewitch\nunbewitched\nunbewitching\nunbewrayed\nunbewritten\nunbias\nunbiasable\nunbiased\nunbiasedly\nunbiasedness\nunbibulous\nunbickered\nunbickering\nunbid\nunbidable\nunbiddable\nunbidden\nunbigged\nunbigoted\nunbilled\nunbillet\nunbilleted\nunbind\nunbindable\nunbinding\nunbiographical\nunbiological\nunbirdlike\nunbirdlimed\nunbirdly\nunbirthday\nunbishop\nunbishoply\nunbit\nunbiting\nunbitt\nunbitted\nunbitten\nunbitter\nunblacked\nunblackened\nunblade\nunblamable\nunblamableness\nunblamably\nunblamed\nunblaming\nunblanched\nunblanketed\nunblasphemed\nunblasted\nunblazoned\nunbleached\nunbleaching\nunbled\nunbleeding\nunblemishable\nunblemished\nunblemishedness\nunblemishing\nunblenched\nunblenching\nunblenchingly\nunblendable\nunblended\nunblent\nunbless\nunblessed\nunblessedness\nunblest\nunblighted\nunblightedly\nunblightedness\nunblind\nunblindfold\nunblinking\nunblinkingly\nunbliss\nunblissful\nunblistered\nunblithe\nunblithely\nunblock\nunblockaded\nunblocked\nunblooded\nunbloodied\nunbloodily\nunbloodiness\nunbloody\nunbloom\nunbloomed\nunblooming\nunblossomed\nunblossoming\nunblotted\nunbloused\nunblown\nunblued\nunbluestockingish\nunbluffed\nunbluffing\nunblunder\nunblundered\nunblundering\nunblunted\nunblurred\nunblush\nunblushing\nunblushingly\nunblushingness\nunboarded\nunboasted\nunboastful\nunboastfully\nunboasting\nunboat\nunbodied\nunbodiliness\nunbodily\nunboding\nunbodkined\nunbody\nunbodylike\nunbog\nunboggy\nunbohemianize\nunboiled\nunboisterous\nunbokel\nunbold\nunbolden\nunboldly\nunboldness\nunbolled\nunbolster\nunbolstered\nunbolt\nunbolted\nunbombast\nunbondable\nunbondableness\nunbonded\nunbone\nunboned\nunbonnet\nunbonneted\nunbonny\nunbooked\nunbookish\nunbooklearned\nunboot\nunbooted\nunboraxed\nunborder\nunbordered\nunbored\nunboring\nunborn\nunborne\nunborough\nunborrowed\nunborrowing\nunbosom\nunbosomer\nunbossed\nunbotanical\nunbothered\nunbothering\nunbottle\nunbottom\nunbottomed\nunbought\nunbound\nunboundable\nunboundableness\nunboundably\nunbounded\nunboundedly\nunboundedness\nunboundless\nunbounteous\nunbountiful\nunbountifully\nunbountifulness\nunbow\nunbowable\nunbowdlerized\nunbowed\nunbowel\nunboweled\nunbowered\nunbowing\nunbowingness\nunbowled\nunbowsome\nunbox\nunboxed\nunboy\nunboyish\nunboylike\nunbrace\nunbraced\nunbracedness\nunbracelet\nunbraceleted\nunbracing\nunbragged\nunbragging\nunbraid\nunbraided\nunbrailed\nunbrained\nunbran\nunbranched\nunbranching\nunbrand\nunbranded\nunbrandied\nunbrave\nunbraved\nunbravely\nunbraze\nunbreachable\nunbreached\nunbreaded\nunbreakable\nunbreakableness\nunbreakably\nunbreakfasted\nunbreaking\nunbreast\nunbreath\nunbreathable\nunbreathableness\nunbreathed\nunbreathing\nunbred\nunbreech\nunbreeched\nunbreezy\nunbrent\nunbrewed\nunbribable\nunbribableness\nunbribably\nunbribed\nunbribing\nunbrick\nunbridegroomlike\nunbridgeable\nunbridged\nunbridle\nunbridled\nunbridledly\nunbridledness\nunbridling\nunbrief\nunbriefed\nunbriefly\nunbright\nunbrightened\nunbrilliant\nunbrimming\nunbrined\nunbrittle\nunbroached\nunbroad\nunbroadcasted\nunbroidered\nunbroiled\nunbroke\nunbroken\nunbrokenly\nunbrokenness\nunbronzed\nunbrooch\nunbrooded\nunbrookable\nunbrookably\nunbrothered\nunbrotherlike\nunbrotherliness\nunbrotherly\nunbrought\nunbrown\nunbrowned\nunbruised\nunbrushed\nunbrutalize\nunbrutalized\nunbrute\nunbrutelike\nunbrutify\nunbrutize\nunbuckle\nunbuckramed\nunbud\nunbudded\nunbudgeability\nunbudgeable\nunbudgeableness\nunbudgeably\nunbudged\nunbudgeted\nunbudging\nunbuffed\nunbuffered\nunbuffeted\nunbuild\nunbuilded\nunbuilt\nunbulky\nunbulled\nunbulletined\nunbumped\nunbumptious\nunbunched\nunbundle\nunbundled\nunbung\nunbungling\nunbuoyant\nunbuoyed\nunburden\nunburdened\nunburdenment\nunburdensome\nunburdensomeness\nunburgessed\nunburiable\nunburial\nunburied\nunburlesqued\nunburly\nunburn\nunburnable\nunburned\nunburning\nunburnished\nunburnt\nunburrow\nunburrowed\nunburst\nunburstable\nunburstableness\nunburthen\nunbury\nunbush\nunbusied\nunbusily\nunbusiness\nunbusinesslike\nunbusk\nunbuskin\nunbuskined\nunbustling\nunbusy\nunbutchered\nunbutcherlike\nunbuttered\nunbutton\nunbuttoned\nunbuttonment\nunbuttressed\nunbuxom\nunbuxomly\nunbuxomness\nunbuyable\nunbuyableness\nunbuying\nunca\nuncabined\nuncabled\nuncadenced\nuncage\nuncaged\nuncake\nuncalcareous\nuncalcified\nuncalcined\nuncalculable\nuncalculableness\nuncalculably\nuncalculated\nuncalculating\nuncalculatingly\nuncalendered\nuncalk\nuncalked\nuncall\nuncalled\nuncallow\nuncallower\nuncalm\nuncalmed\nuncalmly\nuncalumniated\nuncambered\nuncamerated\nuncamouflaged\nuncanceled\nuncancellable\nuncancelled\nuncandid\nuncandidly\nuncandidness\nuncandied\nuncandor\nuncaned\nuncankered\nuncanned\nuncannily\nuncanniness\nuncanny\nuncanonic\nuncanonical\nuncanonically\nuncanonicalness\nuncanonize\nuncanonized\nuncanopied\nuncantoned\nuncantonized\nuncanvassably\nuncanvassed\nuncap\nuncapable\nuncapableness\nuncapably\nuncapacious\nuncapacitate\nuncaparisoned\nuncapitalized\nuncapped\nuncapper\nuncapsizable\nuncapsized\nuncaptained\nuncaptioned\nuncaptious\nuncaptiously\nuncaptivate\nuncaptivated\nuncaptivating\nuncaptived\nuncapturable\nuncaptured\nuncarbonated\nuncarboned\nuncarbureted\nuncarded\nuncardinal\nuncardinally\nuncareful\nuncarefully\nuncarefulness\nuncaressed\nuncargoed\nUncaria\nuncaricatured\nuncaring\nuncarnate\nuncarnivorous\nuncaroled\nuncarpentered\nuncarpeted\nuncarriageable\nuncarried\nuncart\nuncarted\nuncartooned\nuncarved\nuncase\nuncased\nuncasemated\nuncask\nuncasked\nuncasketed\nuncasque\nuncassock\nuncast\nuncaste\nuncastigated\nuncastle\nuncastled\nuncastrated\nuncasual\nuncatalogued\nuncatchable\nuncate\nuncatechised\nuncatechisedness\nuncatechized\nuncatechizedness\nuncategorized\nuncathedraled\nuncatholcity\nuncatholic\nuncatholical\nuncatholicalness\nuncatholicize\nuncatholicly\nuncaucusable\nuncaught\nuncausatively\nuncaused\nuncauterized\nuncautious\nuncautiously\nuncautiousness\nuncavalier\nuncavalierly\nuncave\nunceasable\nunceased\nunceasing\nunceasingly\nunceasingness\nunceded\nunceiled\nunceilinged\nuncelebrated\nuncelebrating\nuncelestial\nuncelestialized\nuncellar\nuncement\nuncemented\nuncementing\nuncensorable\nuncensored\nuncensorious\nuncensoriously\nuncensoriousness\nuncensurable\nuncensured\nuncensuring\nuncenter\nuncentered\nuncentral\nuncentrality\nuncentrally\nuncentred\nuncentury\nuncereclothed\nunceremented\nunceremonial\nunceremonious\nunceremoniously\nunceremoniousness\nuncertain\nuncertainly\nuncertainness\nuncertainty\nuncertifiable\nuncertifiableness\nuncertificated\nuncertified\nuncertifying\nuncertitude\nuncessant\nuncessantly\nuncessantness\nunchafed\nunchain\nunchainable\nunchained\nunchair\nunchaired\nunchalked\nunchallengeable\nunchallengeableness\nunchallengeably\nunchallenged\nunchallenging\nunchambered\nunchamfered\nunchampioned\nunchance\nunchancellor\nunchancy\nunchange\nunchangeability\nunchangeable\nunchangeableness\nunchangeably\nunchanged\nunchangedness\nunchangeful\nunchangefulness\nunchanging\nunchangingly\nunchangingness\nunchanneled\nunchannelled\nunchanted\nunchaperoned\nunchaplain\nunchapleted\nunchapter\nunchaptered\nuncharacter\nuncharactered\nuncharacteristic\nuncharacteristically\nuncharacterized\nuncharge\nunchargeable\nuncharged\nuncharging\nuncharily\nunchariness\nunchariot\nuncharitable\nuncharitableness\nuncharitably\nuncharity\nuncharm\nuncharmable\nuncharmed\nuncharming\nuncharnel\nuncharred\nuncharted\nunchartered\nunchary\nunchased\nunchaste\nunchastely\nunchastened\nunchasteness\nunchastisable\nunchastised\nunchastising\nunchastity\nunchatteled\nunchauffeured\nunchawed\nuncheat\nuncheated\nuncheating\nuncheck\nuncheckable\nunchecked\nuncheckered\nuncheerable\nuncheered\nuncheerful\nuncheerfully\nuncheerfulness\nuncheerily\nuncheeriness\nuncheering\nuncheery\nunchemical\nunchemically\nuncherished\nuncherishing\nunchested\nunchevroned\nunchewable\nunchewableness\nunchewed\nunchid\nunchidden\nunchided\nunchiding\nunchidingly\nunchild\nunchildish\nunchildishly\nunchildishness\nunchildlike\nunchilled\nunchiming\nunchinked\nunchipped\nunchiseled\nunchiselled\nunchivalric\nunchivalrous\nunchivalrously\nunchivalrousness\nunchivalry\nunchloridized\nunchoicely\nunchokable\nunchoked\nuncholeric\nunchoosable\nunchopped\nunchoral\nunchorded\nunchosen\nunchrisom\nunchristen\nunchristened\nunchristian\nunchristianity\nunchristianize\nunchristianized\nunchristianlike\nunchristianly\nunchristianness\nunchronicled\nunchronological\nunchronologically\nunchurch\nunchurched\nunchurchlike\nunchurchly\nunchurn\nunci\nuncia\nuncial\nuncialize\nuncially\nuncicatrized\nunciferous\nunciform\nunciliated\nuncinal\nUncinaria\nuncinariasis\nuncinariatic\nUncinata\nuncinate\nuncinated\nuncinatum\nuncinch\nuncinct\nuncinctured\nuncini\nUncinula\nuncinus\nuncipher\nuncircular\nuncircularized\nuncirculated\nuncircumcised\nuncircumcisedness\nuncircumcision\nuncircumlocutory\nuncircumscribable\nuncircumscribed\nuncircumscribedness\nuncircumscript\nuncircumscriptible\nuncircumscription\nuncircumspect\nuncircumspection\nuncircumspectly\nuncircumspectness\nuncircumstanced\nuncircumstantial\nuncirostrate\nuncite\nuncited\nuncitied\nuncitizen\nuncitizenlike\nuncitizenly\nuncity\nuncivic\nuncivil\nuncivilish\nuncivility\nuncivilizable\nuncivilization\nuncivilize\nuncivilized\nuncivilizedly\nuncivilizedness\nuncivilly\nuncivilness\nunclad\nunclaimed\nunclaiming\nunclamorous\nunclamp\nunclamped\nunclarified\nunclarifying\nunclarity\nunclashing\nunclasp\nunclasped\nunclassable\nunclassableness\nunclassably\nunclassed\nunclassible\nunclassical\nunclassically\nunclassifiable\nunclassifiableness\nunclassification\nunclassified\nunclassify\nunclassifying\nunclawed\nunclay\nunclayed\nuncle\nunclead\nunclean\nuncleanable\nuncleaned\nuncleanlily\nuncleanliness\nuncleanly\nuncleanness\nuncleansable\nuncleanse\nuncleansed\nuncleansedness\nunclear\nuncleared\nunclearing\nuncleavable\nuncleave\nuncledom\nuncleft\nunclehood\nunclement\nunclemently\nunclementness\nunclench\nunclergy\nunclergyable\nunclerical\nunclericalize\nunclerically\nunclericalness\nunclerklike\nunclerkly\nuncleship\nunclever\nuncleverly\nuncleverness\nunclew\nunclick\nuncliented\nunclify\nunclimaxed\nunclimb\nunclimbable\nunclimbableness\nunclimbably\nunclimbed\nunclimbing\nunclinch\nuncling\nunclinical\nunclip\nunclipped\nunclipper\nuncloak\nuncloakable\nuncloaked\nunclog\nunclogged\nuncloister\nuncloistered\nuncloistral\nunclosable\nunclose\nunclosed\nuncloseted\nunclothe\nunclothed\nunclothedly\nunclothedness\nunclotted\nuncloud\nunclouded\nuncloudedly\nuncloudedness\nuncloudy\nunclout\nuncloven\nuncloyable\nuncloyed\nuncloying\nunclub\nunclubbable\nunclubby\nunclustered\nunclustering\nunclutch\nunclutchable\nunclutched\nunclutter\nuncluttered\nunco\nuncoach\nuncoachable\nuncoachableness\nuncoached\nuncoacted\nuncoagulable\nuncoagulated\nuncoagulating\nuncoat\nuncoated\nuncoatedness\nuncoaxable\nuncoaxed\nuncoaxing\nuncock\nuncocked\nuncockneyfy\nuncocted\nuncodded\nuncoddled\nuncoded\nuncodified\nuncoerced\nuncoffer\nuncoffin\nuncoffined\nuncoffle\nuncogent\nuncogged\nuncogitable\nuncognizable\nuncognizant\nuncognized\nuncognoscibility\nuncognoscible\nuncoguidism\nuncoherent\nuncoherently\nuncoherentness\nuncohesive\nuncoif\nuncoifed\nuncoil\nuncoiled\nuncoin\nuncoined\nuncoked\nuncoking\nuncollapsed\nuncollapsible\nuncollar\nuncollared\nuncollated\nuncollatedness\nuncollected\nuncollectedly\nuncollectedness\nuncollectible\nuncollectibleness\nuncollectibly\nuncolleged\nuncollegian\nuncollegiate\nuncolloquial\nuncolloquially\nuncolonellike\nuncolonial\nuncolonize\nuncolonized\nuncolorable\nuncolorably\nuncolored\nuncoloredly\nuncoloredness\nuncoloured\nuncolouredly\nuncolouredness\nuncolt\nuncoly\nuncombable\nuncombatable\nuncombated\nuncombed\nuncombinable\nuncombinableness\nuncombinably\nuncombine\nuncombined\nuncombining\nuncombiningness\nuncombustible\nuncome\nuncomelily\nuncomeliness\nuncomely\nuncomfort\nuncomfortable\nuncomfortableness\nuncomfortably\nuncomforted\nuncomforting\nuncomfy\nuncomic\nuncommanded\nuncommandedness\nuncommanderlike\nuncommemorated\nuncommenced\nuncommendable\nuncommendableness\nuncommendably\nuncommended\nuncommensurability\nuncommensurable\nuncommensurableness\nuncommensurate\nuncommented\nuncommenting\nuncommerciable\nuncommercial\nuncommercially\nuncommercialness\nuncommingled\nuncomminuted\nuncommiserated\nuncommiserating\nuncommissioned\nuncommitted\nuncommitting\nuncommixed\nuncommodious\nuncommodiously\nuncommodiousness\nuncommon\nuncommonable\nuncommonly\nuncommonness\nuncommonplace\nuncommunicable\nuncommunicableness\nuncommunicably\nuncommunicated\nuncommunicating\nuncommunicative\nuncommunicatively\nuncommunicativeness\nuncommutable\nuncommutative\nuncommuted\nuncompact\nuncompacted\nUncompahgre\nuncompahgrite\nuncompaniable\nuncompanied\nuncompanioned\nuncomparable\nuncomparably\nuncompared\nuncompass\nuncompassable\nuncompassed\nuncompassion\nuncompassionate\nuncompassionated\nuncompassionately\nuncompassionateness\nuncompassionating\nuncompassioned\nuncompatible\nuncompatibly\nuncompellable\nuncompelled\nuncompelling\nuncompensable\nuncompensated\nuncompetent\nuncompetitive\nuncompiled\nuncomplacent\nuncomplained\nuncomplaining\nuncomplainingly\nuncomplainingness\nuncomplaint\nuncomplaisance\nuncomplaisant\nuncomplaisantly\nuncomplemental\nuncompletable\nuncomplete\nuncompleted\nuncompletely\nuncompleteness\nuncomplex\nuncompliability\nuncompliable\nuncompliableness\nuncompliance\nuncompliant\nuncomplicated\nuncomplimentary\nuncomplimented\nuncomplimenting\nuncomplying\nuncomposable\nuncomposeable\nuncomposed\nuncompoundable\nuncompounded\nuncompoundedly\nuncompoundedness\nuncompounding\nuncomprehended\nuncomprehending\nuncomprehendingly\nuncomprehendingness\nuncomprehensible\nuncomprehension\nuncomprehensive\nuncomprehensively\nuncomprehensiveness\nuncompressed\nuncompressible\nuncomprised\nuncomprising\nuncomprisingly\nuncompromised\nuncompromising\nuncompromisingly\nuncompromisingness\nuncompulsive\nuncompulsory\nuncomputable\nuncomputableness\nuncomputably\nuncomputed\nuncomraded\nunconcatenated\nunconcatenating\nunconcealable\nunconcealableness\nunconcealably\nunconcealed\nunconcealing\nunconcealingly\nunconcealment\nunconceded\nunconceited\nunconceivable\nunconceivableness\nunconceivably\nunconceived\nunconceiving\nunconcern\nunconcerned\nunconcernedly\nunconcernedness\nunconcerning\nunconcernment\nunconcertable\nunconcerted\nunconcertedly\nunconcertedness\nunconcessible\nunconciliable\nunconciliated\nunconciliatedness\nunconciliating\nunconciliatory\nunconcludable\nunconcluded\nunconcluding\nunconcludingness\nunconclusive\nunconclusively\nunconclusiveness\nunconcocted\nunconcordant\nunconcrete\nunconcreted\nunconcurrent\nunconcurring\nuncondemnable\nuncondemned\nuncondensable\nuncondensableness\nuncondensed\nuncondensing\nuncondescending\nuncondescension\nuncondition\nunconditional\nunconditionality\nunconditionally\nunconditionalness\nunconditionate\nunconditionated\nunconditionately\nunconditioned\nunconditionedly\nunconditionedness\nuncondoled\nuncondoling\nunconducing\nunconducive\nunconduciveness\nunconducted\nunconductive\nunconductiveness\nunconfected\nunconfederated\nunconferred\nunconfess\nunconfessed\nunconfessing\nunconfided\nunconfidence\nunconfident\nunconfidential\nunconfidentialness\nunconfidently\nunconfiding\nunconfinable\nunconfine\nunconfined\nunconfinedly\nunconfinedness\nunconfinement\nunconfining\nunconfirm\nunconfirmative\nunconfirmed\nunconfirming\nunconfiscable\nunconfiscated\nunconflicting\nunconflictingly\nunconflictingness\nunconformability\nunconformable\nunconformableness\nunconformably\nunconformed\nunconformedly\nunconforming\nunconformist\nunconformity\nunconfound\nunconfounded\nunconfoundedly\nunconfrontable\nunconfronted\nunconfusable\nunconfusably\nunconfused\nunconfusedly\nunconfutable\nunconfuted\nunconfuting\nuncongeal\nuncongealable\nuncongealed\nuncongenial\nuncongeniality\nuncongenially\nuncongested\nunconglobated\nunconglomerated\nunconglutinated\nuncongratulate\nuncongratulated\nuncongratulating\nuncongregated\nuncongregational\nuncongressional\nuncongruous\nunconjecturable\nunconjectured\nunconjoined\nunconjugal\nunconjugated\nunconjunctive\nunconjured\nunconnected\nunconnectedly\nunconnectedness\nunconned\nunconnived\nunconniving\nunconquerable\nunconquerableness\nunconquerably\nunconquered\nunconscienced\nunconscient\nunconscientious\nunconscientiously\nunconscientiousness\nunconscionable\nunconscionableness\nunconscionably\nunconscious\nunconsciously\nunconsciousness\nunconsecrate\nunconsecrated\nunconsecratedly\nunconsecratedness\nunconsecration\nunconsecutive\nunconsent\nunconsentaneous\nunconsented\nunconsenting\nunconsequential\nunconsequentially\nunconsequentialness\nunconservable\nunconservative\nunconserved\nunconserving\nunconsiderable\nunconsiderate\nunconsiderately\nunconsiderateness\nunconsidered\nunconsideredly\nunconsideredness\nunconsidering\nunconsideringly\nunconsignable\nunconsigned\nunconsistent\nunconsociable\nunconsociated\nunconsolable\nunconsolably\nunconsolatory\nunconsoled\nunconsolidated\nunconsolidating\nunconsolidation\nunconsoling\nunconsonancy\nunconsonant\nunconsonantly\nunconsonous\nunconspicuous\nunconspicuously\nunconspicuousness\nunconspired\nunconspiring\nunconspiringly\nunconspiringness\nunconstancy\nunconstant\nunconstantly\nunconstantness\nunconstellated\nunconstipated\nunconstituted\nunconstitutional\nunconstitutionalism\nunconstitutionality\nunconstitutionally\nunconstrainable\nunconstrained\nunconstrainedly\nunconstrainedness\nunconstraining\nunconstraint\nunconstricted\nunconstruable\nunconstructed\nunconstructive\nunconstructural\nunconstrued\nunconsular\nunconsult\nunconsultable\nunconsulted\nunconsulting\nunconsumable\nunconsumed\nunconsuming\nunconsummate\nunconsummated\nunconsumptive\nuncontagious\nuncontainable\nuncontainableness\nuncontainably\nuncontained\nuncontaminable\nuncontaminate\nuncontaminated\nuncontemned\nuncontemnedly\nuncontemplated\nuncontemporaneous\nuncontemporary\nuncontemptuous\nuncontended\nuncontending\nuncontent\nuncontentable\nuncontented\nuncontentedly\nuncontentedness\nuncontenting\nuncontentingness\nuncontentious\nuncontentiously\nuncontentiousness\nuncontestable\nuncontestableness\nuncontestably\nuncontested\nuncontestedly\nuncontestedness\nuncontinence\nuncontinent\nuncontinental\nuncontinented\nuncontinently\nuncontinual\nuncontinued\nuncontinuous\nuncontorted\nuncontract\nuncontracted\nuncontractedness\nuncontractile\nuncontradictable\nuncontradictableness\nuncontradictably\nuncontradicted\nuncontradictedly\nuncontradictious\nuncontradictory\nuncontrastable\nuncontrasted\nuncontrasting\nuncontributed\nuncontributing\nuncontributory\nuncontrite\nuncontrived\nuncontriving\nuncontrol\nuncontrollability\nuncontrollable\nuncontrollableness\nuncontrollably\nuncontrolled\nuncontrolledly\nuncontrolledness\nuncontrolling\nuncontroversial\nuncontroversially\nuncontrovertable\nuncontrovertableness\nuncontrovertably\nuncontroverted\nuncontrovertedly\nuncontrovertible\nuncontrovertibleness\nuncontrovertibly\nunconvenable\nunconvened\nunconvenience\nunconvenient\nunconveniently\nunconventional\nunconventionalism\nunconventionality\nunconventionalize\nunconventionally\nunconventioned\nunconversable\nunconversableness\nunconversably\nunconversant\nunconversational\nunconversion\nunconvert\nunconverted\nunconvertedly\nunconvertedness\nunconvertibility\nunconvertible\nunconveyable\nunconveyed\nunconvicted\nunconvicting\nunconvince\nunconvinced\nunconvincedly\nunconvincedness\nunconvincibility\nunconvincible\nunconvincing\nunconvincingly\nunconvincingness\nunconvoluted\nunconvoyed\nunconvulsed\nuncookable\nuncooked\nuncooled\nuncoop\nuncooped\nuncoopered\nuncooping\nuncope\nuncopiable\nuncopied\nuncopious\nuncopyrighted\nuncoquettish\nuncoquettishly\nuncord\nuncorded\nuncordial\nuncordiality\nuncordially\nuncording\nuncore\nuncored\nuncork\nuncorked\nuncorker\nuncorking\nuncorned\nuncorner\nuncoronated\nuncoroneted\nuncorporal\nuncorpulent\nuncorrect\nuncorrectable\nuncorrected\nuncorrectible\nuncorrectly\nuncorrectness\nuncorrelated\nuncorrespondency\nuncorrespondent\nuncorresponding\nuncorrigible\nuncorrigibleness\nuncorrigibly\nuncorroborated\nuncorroded\nuncorrugated\nuncorrupt\nuncorrupted\nuncorruptedly\nuncorruptedness\nuncorruptibility\nuncorruptible\nuncorruptibleness\nuncorruptibly\nuncorrupting\nuncorruption\nuncorruptive\nuncorruptly\nuncorruptness\nuncorseted\nuncosseted\nuncost\nuncostliness\nuncostly\nuncostumed\nuncottoned\nuncouch\nuncouched\nuncouching\nuncounselable\nuncounseled\nuncounsellable\nuncounselled\nuncountable\nuncountableness\nuncountably\nuncounted\nuncountenanced\nuncounteracted\nuncounterbalanced\nuncounterfeit\nuncounterfeited\nuncountermandable\nuncountermanded\nuncountervailed\nuncountess\nuncountrified\nuncouple\nuncoupled\nuncoupler\nuncourageous\nuncoursed\nuncourted\nuncourteous\nuncourteously\nuncourteousness\nuncourtierlike\nuncourting\nuncourtlike\nuncourtliness\nuncourtly\nuncous\nuncousinly\nuncouth\nuncouthie\nuncouthly\nuncouthness\nuncouthsome\nuncovenant\nuncovenanted\nuncover\nuncoverable\nuncovered\nuncoveredly\nuncoveted\nuncoveting\nuncovetingly\nuncovetous\nuncowed\nuncowl\nuncoy\nuncracked\nuncradled\nuncraftily\nuncraftiness\nuncrafty\nuncram\nuncramp\nuncramped\nuncrampedness\nuncranked\nuncrannied\nuncrated\nuncravatted\nuncraven\nuncraving\nuncravingly\nuncrazed\nuncream\nuncreased\nuncreatability\nuncreatable\nuncreatableness\nuncreate\nuncreated\nuncreatedness\nuncreating\nuncreation\nuncreative\nuncreativeness\nuncreaturely\nuncredentialed\nuncredentialled\nuncredibility\nuncredible\nuncredibly\nuncreditable\nuncreditableness\nuncreditably\nuncredited\nuncrediting\nuncredulous\nuncreeping\nuncreosoted\nuncrest\nuncrested\nuncrevassed\nuncrib\nuncried\nuncrime\nuncriminal\nuncriminally\nuncrinkle\nuncrinkled\nuncrinkling\nuncrippled\nuncrisp\nuncritical\nuncritically\nuncriticisable\nuncriticised\nuncriticising\nuncriticisingly\nuncriticism\nuncriticizable\nuncriticized\nuncriticizing\nuncriticizingly\nuncrochety\nuncrook\nuncrooked\nuncrooking\nuncropped\nuncropt\nuncross\nuncrossable\nuncrossableness\nuncrossed\nuncrossexaminable\nuncrossexamined\nuncrossly\nuncrowded\nuncrown\nuncrowned\nuncrowning\nuncrucified\nuncrudded\nuncrude\nuncruel\nuncrumbled\nuncrumple\nuncrumpling\nuncrushable\nuncrushed\nuncrusted\nuncrying\nuncrystaled\nuncrystalled\nuncrystalline\nuncrystallizability\nuncrystallizable\nuncrystallized\nunction\nunctional\nunctioneer\nunctionless\nunctious\nunctiousness\nunctorium\nunctuose\nunctuosity\nunctuous\nunctuously\nunctuousness\nuncubbed\nuncubic\nuncuckold\nuncuckolded\nuncudgelled\nuncuffed\nuncular\nunculled\nuncultivability\nuncultivable\nuncultivate\nuncultivated\nuncultivation\nunculturable\nunculture\nuncultured\nuncumber\nuncumbered\nuncumbrous\nuncunning\nuncunningly\nuncunningness\nuncupped\nuncurable\nuncurableness\nuncurably\nuncurb\nuncurbable\nuncurbed\nuncurbedly\nuncurbing\nuncurd\nuncurdled\nuncurdling\nuncured\nuncurious\nuncuriously\nuncurl\nuncurled\nuncurling\nuncurrent\nuncurrently\nuncurrentness\nuncurricularized\nuncurried\nuncurse\nuncursed\nuncursing\nuncurst\nuncurtailed\nuncurtain\nuncurtained\nuncus\nuncushioned\nuncusped\nuncustomable\nuncustomarily\nuncustomariness\nuncustomary\nuncustomed\nuncut\nuncuth\nuncuticulate\nuncuttable\nuncynical\nuncynically\nuncypress\nundabbled\nundaggled\nundaily\nundaintiness\nundainty\nundallying\nundam\nundamageable\nundamaged\nundamaging\nundamasked\nundammed\nundamming\nundamn\nundamped\nundancing\nundandiacal\nundandled\nundangered\nundangerous\nundangerousness\nundared\nundaring\nundark\nundarken\nundarkened\nundarned\nundashed\nundatable\nundate\nundateable\nundated\nundatedness\nundaub\nundaubed\nundaughter\nundaughterliness\nundaughterly\nundauntable\nundaunted\nundauntedly\nundauntedness\nundaunting\nundawned\nundawning\nundazed\nundazing\nundazzle\nundazzled\nundazzling\nunde\nundead\nundeadened\nundeaf\nundealable\nundealt\nundean\nundear\nundebarred\nundebased\nundebatable\nundebated\nundebating\nundebauched\nundebilitated\nundebilitating\nundecagon\nundecanaphthene\nundecane\nundecatoic\nundecayable\nundecayableness\nundecayed\nundecayedness\nundecaying\nundeceased\nundeceitful\nundeceivable\nundeceivableness\nundeceivably\nundeceive\nundeceived\nundeceiver\nundeceiving\nundecency\nundecennary\nundecennial\nundecent\nundecently\nundeception\nundeceptious\nundeceptitious\nundeceptive\nundecidable\nundecide\nundecided\nundecidedly\nundecidedness\nundeciding\nundecimal\nundeciman\nundecimole\nundecipher\nundecipherability\nundecipherable\nundecipherably\nundeciphered\nundecision\nundecisive\nundecisively\nundecisiveness\nundeck\nundecked\nundeclaimed\nundeclaiming\nundeclamatory\nundeclarable\nundeclare\nundeclared\nundeclinable\nundeclinableness\nundeclinably\nundeclined\nundeclining\nundecocted\nundecoic\nundecolic\nundecomposable\nundecomposed\nundecompounded\nundecorated\nundecorative\nundecorous\nundecorously\nundecorousness\nundecorticated\nundecoyed\nundecreased\nundecreasing\nundecree\nundecreed\nundecried\nundecyl\nundecylenic\nundecylic\nundedicate\nundedicated\nundeducible\nundeducted\nundeeded\nundeemed\nundeemous\nundeemously\nundeep\nundefaceable\nundefaced\nundefalcated\nundefamed\nundefaming\nundefatigable\nundefaulted\nundefaulting\nundefeasible\nundefeat\nundefeatable\nundefeated\nundefeatedly\nundefeatedness\nundefecated\nundefectible\nundefective\nundefectiveness\nundefendable\nundefendableness\nundefendably\nundefended\nundefending\nundefense\nundefensed\nundefensible\nundeferential\nundeferentially\nundeferred\nundefiant\nundeficient\nundefied\nundefilable\nundefiled\nundefiledly\nundefiledness\nundefinable\nundefinableness\nundefinably\nundefine\nundefined\nundefinedly\nundefinedness\nundeflected\nundeflowered\nundeformed\nundeformedness\nundefrauded\nundefrayed\nundeft\nundegeneracy\nundegenerate\nundegenerated\nundegenerating\nundegraded\nundegrading\nundeification\nundeified\nundeify\nundeistical\nundejected\nundelated\nundelayable\nundelayed\nundelayedly\nundelaying\nundelayingly\nundelectable\nundelectably\nundelegated\nundeleted\nundeliberate\nundeliberated\nundeliberately\nundeliberateness\nundeliberating\nundeliberatingly\nundeliberative\nundeliberativeness\nundelible\nundelicious\nundelight\nundelighted\nundelightful\nundelightfully\nundelightfulness\nundelighting\nundelightsome\nundelimited\nundelineated\nundeliverable\nundeliverableness\nundelivered\nundelivery\nundeludable\nundelude\nundeluded\nundeluding\nundeluged\nundelusive\nundelusively\nundelve\nundelved\nundelylene\nundemagnetizable\nundemanded\nundemised\nundemocratic\nundemocratically\nundemocratize\nundemolishable\nundemolished\nundemonstrable\nundemonstrably\nundemonstratable\nundemonstrated\nundemonstrative\nundemonstratively\nundemonstrativeness\nundemure\nundemurring\nunden\nundeniable\nundeniableness\nundeniably\nundenied\nundeniedly\nundenizened\nundenominated\nundenominational\nundenominationalism\nundenominationalist\nundenominationalize\nundenominationally\nundenoted\nundenounced\nundenuded\nundepartableness\nundepartably\nundeparted\nundeparting\nundependable\nundependableness\nundependably\nundependent\nundepending\nundephlegmated\nundepicted\nundepleted\nundeplored\nundeported\nundeposable\nundeposed\nundeposited\nundepraved\nundepravedness\nundeprecated\nundepreciated\nundepressed\nundepressible\nundepressing\nundeprivable\nundeprived\nundepurated\nundeputed\nunder\nunderabyss\nunderaccident\nunderaccommodated\nunderact\nunderacted\nunderacting\nunderaction\nunderactor\nunderadjustment\nunderadmiral\nunderadventurer\nunderage\nunderagency\nunderagent\nunderagitation\nunderaid\nunderaim\nunderair\nunderalderman\nunderanged\nunderarch\nunderargue\nunderarm\nunderaverage\nunderback\nunderbailiff\nunderbake\nunderbalance\nunderballast\nunderbank\nunderbarber\nunderbarring\nunderbasal\nunderbeadle\nunderbeak\nunderbeam\nunderbear\nunderbearer\nunderbearing\nunderbeat\nunderbeaten\nunderbed\nunderbelly\nunderbeveling\nunderbid\nunderbidder\nunderbill\nunderbillow\nunderbishop\nunderbishopric\nunderbit\nunderbite\nunderbitted\nunderbitten\nunderboard\nunderboated\nunderbodice\nunderbody\nunderboil\nunderboom\nunderborn\nunderborne\nunderbottom\nunderbough\nunderbought\nunderbound\nunderbowed\nunderbowser\nunderbox\nunderboy\nunderbrace\nunderbraced\nunderbranch\nunderbreath\nunderbreathing\nunderbred\nunderbreeding\nunderbrew\nunderbridge\nunderbrigadier\nunderbright\nunderbrim\nunderbrush\nunderbubble\nunderbud\nunderbuild\nunderbuilder\nunderbuilding\nunderbuoy\nunderburn\nunderburned\nunderburnt\nunderbursar\nunderbury\nunderbush\nunderbutler\nunderbuy\nundercanopy\nundercanvass\nundercap\nundercapitaled\nundercapitalization\nundercapitalize\nundercaptain\nundercarder\nundercarriage\nundercarry\nundercarter\nundercarve\nundercarved\nundercase\nundercasing\nundercast\nundercause\nunderceiling\nundercellar\nundercellarer\nunderchamber\nunderchamberlain\nunderchancellor\nunderchanter\nunderchap\nundercharge\nundercharged\nunderchief\nunderchime\nunderchin\nunderchord\nunderchurched\nundercircle\nundercitizen\nunderclad\nunderclass\nunderclassman\nunderclay\nunderclearer\nunderclerk\nunderclerkship\nundercliff\nunderclift\nundercloak\nundercloth\nunderclothe\nunderclothed\nunderclothes\nunderclothing\nunderclub\nunderclutch\nundercoachman\nundercoat\nundercoated\nundercoater\nundercoating\nundercollector\nundercolor\nundercolored\nundercoloring\nundercommander\nundercomment\nundercompounded\nunderconcerned\nundercondition\nunderconsciousness\nunderconstable\nunderconsume\nunderconsumption\nundercook\nundercool\nundercooper\nundercorrect\nundercountenance\nundercourse\nundercourtier\nundercover\nundercovering\nundercovert\nundercrawl\nundercreep\nundercrest\nundercrier\nundercroft\nundercrop\nundercrust\nundercry\nundercrypt\nundercup\nundercurl\nundercurrent\nundercurve\nundercut\nundercutter\nundercutting\nunderdauber\nunderdeacon\nunderdead\nunderdebauchee\nunderdeck\nunderdepth\nunderdevelop\nunderdevelopment\nunderdevil\nunderdialogue\nunderdig\nunderdip\nunderdish\nunderdistinction\nunderdistributor\nunderditch\nunderdive\nunderdo\nunderdoctor\nunderdoer\nunderdog\nunderdoing\nunderdone\nunderdose\nunderdot\nunderdown\nunderdraft\nunderdrag\nunderdrain\nunderdrainage\nunderdrainer\nunderdraught\nunderdraw\nunderdrawers\nunderdrawn\nunderdress\nunderdressed\nunderdrift\nunderdrive\nunderdriven\nunderdrudgery\nunderdrumming\nunderdry\nunderdunged\nunderearth\nundereat\nundereaten\nunderedge\nundereducated\nunderemployment\nunderengraver\nunderenter\nunderer\nunderescheator\nunderestimate\nunderestimation\nunderexcited\nunderexercise\nunderexpose\nunderexposure\nundereye\nunderface\nunderfaction\nunderfactor\nunderfaculty\nunderfalconer\nunderfall\nunderfarmer\nunderfeathering\nunderfeature\nunderfed\nunderfeed\nunderfeeder\nunderfeeling\nunderfeet\nunderfellow\nunderfiend\nunderfill\nunderfilling\nunderfinance\nunderfind\nunderfire\nunderfitting\nunderflame\nunderflannel\nunderfleece\nunderflood\nunderfloor\nunderflooring\nunderflow\nunderfold\nunderfolded\nunderfong\nunderfoot\nunderfootage\nunderfootman\nunderforebody\nunderform\nunderfortify\nunderframe\nunderframework\nunderframing\nunderfreight\nunderfrequency\nunderfringe\nunderfrock\nunderfur\nunderfurnish\nunderfurnisher\nunderfurrow\nundergabble\nundergamekeeper\nundergaoler\nundergarb\nundergardener\nundergarment\nundergarnish\nundergauge\nundergear\nundergeneral\nundergentleman\nundergird\nundergirder\nundergirding\nundergirdle\nundergirth\nunderglaze\nundergloom\nunderglow\nundergnaw\nundergo\nundergod\nundergoer\nundergoing\nundergore\nundergoverness\nundergovernment\nundergovernor\nundergown\nundergrad\nundergrade\nundergraduate\nundergraduatedom\nundergraduateness\nundergraduateship\nundergraduatish\nundergraduette\nundergraining\nundergrass\nundergreen\nundergrieve\nundergroan\nunderground\nundergrounder\nundergroundling\nundergrove\nundergrow\nundergrowl\nundergrown\nundergrowth\nundergrub\nunderguard\nunderguardian\nundergunner\nunderhabit\nunderhammer\nunderhand\nunderhanded\nunderhandedly\nunderhandedness\nunderhang\nunderhanging\nunderhangman\nunderhatch\nunderhead\nunderheat\nunderheaven\nunderhelp\nunderhew\nunderhid\nunderhill\nunderhint\nunderhistory\nunderhive\nunderhold\nunderhole\nunderhonest\nunderhorse\nunderhorsed\nunderhousemaid\nunderhum\nunderhung\nunderided\nunderinstrument\nunderisive\nunderissue\nunderivable\nunderivative\nunderived\nunderivedly\nunderivedness\nunderjacket\nunderjailer\nunderjanitor\nunderjaw\nunderjawed\nunderjobbing\nunderjudge\nunderjungle\nunderkeel\nunderkeeper\nunderkind\nunderking\nunderkingdom\nunderlaborer\nunderlaid\nunderlain\nunderland\nunderlanguaged\nunderlap\nunderlapper\nunderlash\nunderlaundress\nunderlawyer\nunderlay\nunderlayer\nunderlaying\nunderleaf\nunderlease\nunderleather\nunderlegate\nunderlessee\nunderlet\nunderletter\nunderlevel\nunderlever\nunderlid\nunderlie\nunderlier\nunderlieutenant\nunderlife\nunderlift\nunderlight\nunderliking\nunderlimbed\nunderlimit\nunderline\nunderlineation\nunderlineman\nunderlinement\nunderlinen\nunderliner\nunderling\nunderlining\nunderlip\nunderlive\nunderload\nunderlock\nunderlodging\nunderloft\nunderlook\nunderlooker\nunderlout\nunderlunged\nunderly\nunderlye\nunderlying\nundermade\nundermaid\nundermaker\nunderman\nundermanager\nundermanned\nundermanning\nundermark\nundermarshal\nundermarshalman\nundermasted\nundermaster\nundermatch\nundermatched\nundermate\nundermath\nundermeal\nundermeaning\nundermeasure\nundermediator\nundermelody\nundermentioned\nundermiller\nundermimic\nunderminable\nundermine\nunderminer\nundermining\nunderminingly\nunderminister\nunderministry\nundermist\nundermoated\nundermoney\nundermoral\nundermost\nundermotion\nundermount\nundermountain\nundermusic\nundermuslin\nundern\nundername\nundernatural\nunderneath\nunderness\nunderniceness\nundernote\nundernoted\nundernourish\nundernourished\nundernourishment\nundernsong\nunderntide\nunderntime\nundernurse\nundernutrition\nunderoccupied\nunderofficer\nunderofficered\nunderofficial\nunderogating\nunderogatory\nunderopinion\nunderorb\nunderorganization\nunderorseman\nunderoverlooker\nunderoxidize\nunderpacking\nunderpaid\nunderpain\nunderpainting\nunderpan\nunderpants\nunderparticipation\nunderpartner\nunderpass\nunderpassion\nunderpay\nunderpayment\nunderpeep\nunderpeer\nunderpen\nunderpeopled\nunderpetticoat\nunderpetticoated\nunderpick\nunderpier\nunderpilaster\nunderpile\nunderpin\nunderpinner\nunderpinning\nunderpitch\nunderpitched\nunderplain\nunderplan\nunderplant\nunderplate\nunderplay\nunderplot\nunderplotter\nunderply\nunderpoint\nunderpole\nunderpopulate\nunderpopulation\nunderporch\nunderporter\nunderpose\nunderpossessor\nunderpot\nunderpower\nunderpraise\nunderprefect\nunderprentice\nunderpresence\nunderpresser\nunderpressure\nunderprice\nunderpriest\nunderprincipal\nunderprint\nunderprior\nunderprivileged\nunderprize\nunderproduce\nunderproduction\nunderproductive\nunderproficient\nunderprompt\nunderprompter\nunderproof\nunderprop\nunderproportion\nunderproportioned\nunderproposition\nunderpropped\nunderpropper\nunderpropping\nunderprospect\nunderpry\nunderpuke\nunderqualified\nunderqueen\nunderquote\nunderranger\nunderrate\nunderratement\nunderrating\nunderreach\nunderread\nunderreader\nunderrealize\nunderrealm\nunderream\nunderreamer\nunderreceiver\nunderreckon\nunderrecompense\nunderregion\nunderregistration\nunderrent\nunderrented\nunderrenting\nunderrepresent\nunderrepresentation\nunderrespected\nunderriddle\nunderriding\nunderrigged\nunderring\nunderripe\nunderripened\nunderriver\nunderroarer\nunderroast\nunderrobe\nunderrogue\nunderroll\nunderroller\nunderroof\nunderroom\nunderroot\nunderrooted\nunderrower\nunderrule\nunderruler\nunderrun\nunderrunning\nundersacristan\nundersailed\nundersally\nundersap\nundersatisfaction\nundersaturate\nundersaturation\nundersavior\nundersaw\nundersawyer\nunderscale\nunderscheme\nunderschool\nunderscoop\nunderscore\nunderscribe\nunderscript\nunderscrub\nunderscrupulous\nundersea\nunderseam\nunderseaman\nundersearch\nunderseas\nunderseated\nundersecretary\nundersecretaryship\nundersect\nundersee\nunderseeded\nunderseedman\nundersell\nunderseller\nunderselling\nundersense\nundersequence\nunderservant\nunderserve\nunderservice\nunderset\nundersetter\nundersetting\nundersettle\nundersettler\nundersettling\nundersexton\nundershapen\nundersharp\nundersheathing\nundershepherd\nundersheriff\nundersheriffry\nundersheriffship\nundersheriffwick\nundershield\nundershine\nundershining\nundershire\nundershirt\nundershoe\nundershoot\nundershore\nundershorten\nundershot\nundershrievalty\nundershrieve\nundershrievery\nundershrub\nundershrubbiness\nundershrubby\nundershunter\nundershut\nunderside\nundersight\nundersighted\nundersign\nundersignalman\nundersigner\nundersill\nundersinging\nundersitter\nundersize\nundersized\nunderskin\nunderskirt\nundersky\nundersleep\nundersleeve\nunderslip\nunderslope\nundersluice\nunderslung\nundersneer\nundersociety\nundersoil\nundersole\nundersomething\nundersong\nundersorcerer\nundersort\nundersoul\nundersound\nundersovereign\nundersow\nunderspar\nundersparred\nunderspecies\nunderspecified\nunderspend\nundersphere\nunderspin\nunderspinner\nundersplice\nunderspore\nunderspread\nunderspring\nundersprout\nunderspurleather\nundersquare\nunderstaff\nunderstage\nunderstain\nunderstairs\nunderstamp\nunderstand\nunderstandability\nunderstandable\nunderstandableness\nunderstandably\nunderstander\nunderstanding\nunderstandingly\nunderstandingness\nunderstate\nunderstatement\nunderstay\nundersteer\nunderstem\nunderstep\nundersteward\nunderstewardship\nunderstimulus\nunderstock\nunderstocking\nunderstood\nunderstory\nunderstrain\nunderstrap\nunderstrapper\nunderstrapping\nunderstratum\nunderstream\nunderstress\nunderstrew\nunderstride\nunderstriding\nunderstrife\nunderstrike\nunderstring\nunderstroke\nunderstrung\nunderstudy\nunderstuff\nunderstuffing\nundersuck\nundersuggestion\nundersuit\nundersupply\nundersupport\nundersurface\nunderswain\nunderswamp\nundersward\nunderswearer\nundersweat\nundersweep\nunderswell\nundertakable\nundertake\nundertakement\nundertaker\nundertakerish\nundertakerlike\nundertakerly\nundertakery\nundertaking\nundertakingly\nundertalk\nundertapster\nundertaxed\nunderteacher\nunderteamed\nunderteller\nundertenancy\nundertenant\nundertenter\nundertenure\nunderterrestrial\nundertest\nunderthane\nunderthaw\nunderthief\nunderthing\nunderthink\nunderthirst\nunderthought\nunderthroating\nunderthrob\nunderthrust\nundertide\nundertided\nundertie\nundertime\nundertimed\nundertint\nundertitle\nundertone\nundertoned\nundertook\nundertow\nundertrader\nundertrained\nundertread\nundertreasurer\nundertreat\nundertribe\nundertrick\nundertrodden\nundertruck\nundertrump\nundertruss\nundertub\nundertune\nundertunic\nunderturf\nunderturn\nunderturnkey\nundertutor\nundertwig\nundertype\nundertyrant\nunderusher\nundervaluation\nundervalue\nundervaluement\nundervaluer\nundervaluing\nundervaluinglike\nundervaluingly\nundervalve\nundervassal\nundervaulted\nundervaulting\nundervegetation\nunderventilation\nunderverse\nundervest\nundervicar\nunderviewer\nundervillain\nundervinedresser\nundervitalized\nundervocabularied\nundervoice\nundervoltage\nunderwage\nunderwaist\nunderwaistcoat\nunderwalk\nunderward\nunderwarden\nunderwarmth\nunderwarp\nunderwash\nunderwatch\nunderwatcher\nunderwater\nunderwave\nunderway\nunderweapon\nunderwear\nunderweft\nunderweigh\nunderweight\nunderweighted\nunderwent\nunderwheel\nunderwhistle\nunderwind\nunderwing\nunderwit\nunderwitch\nunderwitted\nunderwood\nunderwooded\nunderwork\nunderworker\nunderworking\nunderworkman\nunderworld\nunderwrap\nunderwrite\nunderwriter\nunderwriting\nunderwrought\nunderyield\nunderyoke\nunderzeal\nunderzealot\nundescendable\nundescended\nundescendible\nundescribable\nundescribably\nundescribed\nundescried\nundescript\nundescriptive\nundescrying\nundesert\nundeserted\nundeserting\nundeserve\nundeserved\nundeservedly\nundeservedness\nundeserver\nundeserving\nundeservingly\nundeservingness\nundesign\nundesignated\nundesigned\nundesignedly\nundesignedness\nundesigning\nundesigningly\nundesigningness\nundesirability\nundesirable\nundesirableness\nundesirably\nundesire\nundesired\nundesiredly\nundesiring\nundesirous\nundesirously\nundesirousness\nundesisting\nundespaired\nundespairing\nundespairingly\nundespatched\nundespised\nundespising\nundespoiled\nundespondent\nundespondently\nundesponding\nundespotic\nundestined\nundestroyable\nundestroyed\nundestructible\nundestructive\nundetachable\nundetached\nundetailed\nundetainable\nundetained\nundetectable\nundetected\nundetectible\nundeteriorated\nundeteriorating\nundeterminable\nundeterminate\nundetermination\nundetermined\nundetermining\nundeterred\nundeterring\nundetested\nundetesting\nundethronable\nundethroned\nundetracting\nundetractingly\nundetrimental\nundevelopable\nundeveloped\nundeveloping\nundeviated\nundeviating\nundeviatingly\nundevil\nundevious\nundeviously\nundevisable\nundevised\nundevoted\nundevotion\nundevotional\nundevoured\nundevout\nundevoutly\nundevoutness\nundewed\nundewy\nundexterous\nundexterously\nundextrous\nundextrously\nundiademed\nundiagnosable\nundiagnosed\nundialed\nundialyzed\nundiametric\nundiamonded\nundiapered\nundiaphanous\nundiatonic\nundichotomous\nundictated\nundid\nundidactic\nundies\nundieted\nundifferenced\nundifferent\nundifferential\nundifferentiated\nundifficult\nundiffident\nundiffracted\nundiffused\nundiffusible\nundiffusive\nundig\nundigenous\nundigest\nundigestable\nundigested\nundigestible\nundigesting\nundigestion\nundigged\nundight\nundighted\nundigitated\nundignified\nundignifiedly\nundignifiedness\nundignify\nundiked\nundilapidated\nundilatable\nundilated\nundilatory\nundiligent\nundiligently\nundilute\nundiluted\nundilution\nundiluvial\nundim\nundimensioned\nundimerous\nundimidiate\nundiminishable\nundiminishableness\nundiminishably\nundiminished\nundiminishing\nundiminutive\nundimmed\nundimpled\nUndine\nundine\nundined\nundinted\nundiocesed\nundiphthongize\nundiplomaed\nundiplomatic\nundipped\nundirect\nundirected\nundirectional\nundirectly\nundirectness\nundirk\nundisabled\nundisadvantageous\nundisagreeable\nundisappearing\nundisappointable\nundisappointed\nundisappointing\nundisarmed\nundisastrous\nundisbanded\nundisbarred\nundisburdened\nundisbursed\nundiscardable\nundiscarded\nundiscerned\nundiscernedly\nundiscernible\nundiscernibleness\nundiscernibly\nundiscerning\nundiscerningly\nundischargeable\nundischarged\nundiscipled\nundisciplinable\nundiscipline\nundisciplined\nundisciplinedness\nundisclaimed\nundisclosed\nundiscolored\nundiscomfitable\nundiscomfited\nundiscomposed\nundisconcerted\nundisconnected\nundiscontinued\nundiscordant\nundiscording\nundiscounted\nundiscourageable\nundiscouraged\nundiscouraging\nundiscoursed\nundiscoverable\nundiscoverableness\nundiscoverably\nundiscovered\nundiscreditable\nundiscredited\nundiscreet\nundiscreetly\nundiscreetness\nundiscretion\nundiscriminated\nundiscriminating\nundiscriminatingly\nundiscriminatingness\nundiscriminative\nundiscursive\nundiscussable\nundiscussed\nundisdained\nundisdaining\nundiseased\nundisestablished\nundisfigured\nundisfranchised\nundisfulfilled\nundisgorged\nundisgraced\nundisguisable\nundisguise\nundisguised\nundisguisedly\nundisguisedness\nundisgusted\nundisheartened\nundished\nundisheveled\nundishonored\nundisillusioned\nundisinfected\nundisinheritable\nundisinherited\nundisintegrated\nundisinterested\nundisjoined\nundisjointed\nundisliked\nundislocated\nundislodgeable\nundislodged\nundismantled\nundismay\nundismayable\nundismayed\nundismayedly\nundismembered\nundismissed\nundismounted\nundisobedient\nundisobeyed\nundisobliging\nundisordered\nundisorderly\nundisorganized\nundisowned\nundisowning\nundisparaged\nundisparity\nundispassionate\nundispatchable\nundispatched\nundispatching\nundispellable\nundispelled\nundispensable\nundispensed\nundispensing\nundispersed\nundispersing\nundisplaced\nundisplanted\nundisplay\nundisplayable\nundisplayed\nundisplaying\nundispleased\nundispose\nundisposed\nundisposedness\nundisprivacied\nundisprovable\nundisproved\nundisproving\nundisputable\nundisputableness\nundisputably\nundisputatious\nundisputatiously\nundisputed\nundisputedly\nundisputedness\nundisputing\nundisqualifiable\nundisqualified\nundisquieted\nundisreputable\nundisrobed\nundisrupted\nundissected\nundissembled\nundissembledness\nundissembling\nundissemblingly\nundisseminated\nundissenting\nundissevered\nundissimulated\nundissipated\nundissociated\nundissoluble\nundissolute\nundissolvable\nundissolved\nundissolving\nundissonant\nundissuadable\nundissuadably\nundissuade\nundistanced\nundistant\nundistantly\nundistasted\nundistasteful\nundistempered\nundistend\nundistended\nundistilled\nundistinct\nundistinctive\nundistinctly\nundistinctness\nundistinguish\nundistinguishable\nundistinguishableness\nundistinguishably\nundistinguished\nundistinguishing\nundistinguishingly\nundistorted\nundistorting\nundistracted\nundistractedly\nundistractedness\nundistracting\nundistractingly\nundistrained\nundistraught\nundistress\nundistressed\nundistributed\nundistrusted\nundistrustful\nundisturbable\nundisturbance\nundisturbed\nundisturbedly\nundisturbedness\nundisturbing\nundisturbingly\nunditched\nundithyrambic\nundittoed\nundiuretic\nundiurnal\nundivable\nundivergent\nundiverging\nundiverse\nundiversified\nundiverted\nundivertible\nundivertibly\nundiverting\nundivested\nundivestedly\nundividable\nundividableness\nundividably\nundivided\nundividedly\nundividedness\nundividing\nundivinable\nundivined\nundivinelike\nundivinely\nundivining\nundivisible\nundivisive\nundivorceable\nundivorced\nundivorcedness\nundivorcing\nundivulged\nundivulging\nundizened\nundizzied\nundo\nundoable\nundock\nundocked\nundoctor\nundoctored\nundoctrinal\nundoctrined\nundocumentary\nundocumented\nundocumentedness\nundodged\nundoer\nundoffed\nundog\nundogmatic\nundogmatical\nundoing\nundoingness\nundolled\nundolorous\nundomed\nundomestic\nundomesticate\nundomesticated\nundomestication\nundomicilable\nundomiciled\nundominated\nundomineering\nundominical\nundominoed\nundon\nundonated\nundonating\nundone\nundoneness\nundonkey\nundonnish\nundoomed\nundoped\nundormant\nundose\nundosed\nundoting\nundotted\nundouble\nundoubled\nundoubtable\nundoubtableness\nundoubtably\nundoubted\nundoubtedly\nundoubtedness\nundoubtful\nundoubtfully\nundoubtfulness\nundoubting\nundoubtingly\nundoubtingness\nundouched\nundoughty\nundovelike\nundoweled\nundowered\nundowned\nundowny\nundrab\nundraftable\nundrafted\nundrag\nundragoned\nundragooned\nundrainable\nundrained\nundramatic\nundramatical\nundramatically\nundramatizable\nundramatized\nundrape\nundraped\nundraperied\nundraw\nundrawable\nundrawn\nundreaded\nundreadful\nundreadfully\nundreading\nundreamed\nundreaming\nundreamlike\nundreamt\nundreamy\nundredged\nundreggy\nundrenched\nundress\nundressed\nundried\nundrillable\nundrilled\nundrinkable\nundrinkableness\nundrinkably\nundrinking\nundripping\nundrivable\nundrivableness\nundriven\nundronelike\nundrooping\nundropped\nundropsical\nundrossy\nundrowned\nundrubbed\nundrugged\nundrunk\nundrunken\nundry\nundryable\nundrying\nundualize\nundub\nundubbed\nundubitable\nundubitably\nunducal\nunduchess\nundue\nunduelling\nundueness\nundug\nunduke\nundulant\nundular\nundularly\nundulatance\nundulate\nundulated\nundulately\nundulating\nundulatingly\nundulation\nundulationist\nundulative\nundulatory\nundull\nundulled\nundullness\nunduloid\nundulose\nundulous\nunduly\nundumped\nunduncelike\nundunged\nundupable\nunduped\nunduplicability\nunduplicable\nunduplicity\nundurable\nundurableness\nundurably\nundust\nundusted\nunduteous\nundutiable\nundutiful\nundutifully\nundutifulness\nunduty\nundwarfed\nundwelt\nundwindling\nundy\nundye\nundyeable\nundyed\nundying\nundyingly\nundyingness\nuneager\nuneagerly\nuneagerness\nuneagled\nunearly\nunearned\nunearnest\nunearth\nunearthed\nunearthliness\nunearthly\nunease\nuneaseful\nuneasefulness\nuneasily\nuneasiness\nuneastern\nuneasy\nuneatable\nuneatableness\nuneaten\nuneath\nuneating\nunebbed\nunebbing\nunebriate\nuneccentric\nunecclesiastical\nunechoed\nunechoing\nuneclectic\nuneclipsed\nuneconomic\nuneconomical\nuneconomically\nuneconomicalness\nuneconomizing\nunecstatic\nunedge\nunedged\nunedible\nunedibleness\nunedibly\nunedified\nunedifying\nuneditable\nunedited\nuneducable\nuneducableness\nuneducably\nuneducate\nuneducated\nuneducatedly\nuneducatedness\nuneducative\nuneduced\nuneffaceable\nuneffaceably\nuneffaced\nuneffected\nuneffectible\nuneffective\nuneffectless\nuneffectual\nuneffectually\nuneffectualness\nuneffectuated\nuneffeminate\nuneffeminated\nuneffervescent\nuneffete\nunefficacious\nunefficient\nuneffigiated\nuneffused\nuneffusing\nuneffusive\nunegoist\nunegoistical\nunegoistically\nunegregious\nunejaculated\nunejected\nunelaborate\nunelaborated\nunelaborately\nunelaborateness\nunelapsed\nunelastic\nunelasticity\nunelated\nunelating\nunelbowed\nunelderly\nunelect\nunelectable\nunelected\nunelective\nunelectric\nunelectrical\nunelectrified\nunelectrify\nunelectrifying\nunelectrized\nunelectronic\nuneleemosynary\nunelegant\nunelegantly\nunelegantness\nunelemental\nunelementary\nunelevated\nunelicited\nunelided\nunelidible\nuneligibility\nuneligible\nuneligibly\nuneliminated\nunelongated\nuneloped\nuneloping\nuneloquent\nuneloquently\nunelucidated\nunelucidating\nuneluded\nunelusive\nunemaciated\nunemancipable\nunemancipated\nunemasculated\nunembalmed\nunembanked\nunembarrassed\nunembarrassedly\nunembarrassedness\nunembarrassing\nunembarrassment\nunembased\nunembattled\nunembayed\nunembellished\nunembezzled\nunembittered\nunemblazoned\nunembodied\nunembodiment\nunembossed\nunembowelled\nunembowered\nunembraceable\nunembraced\nunembroidered\nunembroiled\nunembryonic\nunemendable\nunemended\nunemerged\nunemerging\nunemigrating\nuneminent\nuneminently\nunemitted\nunemolumentary\nunemolumented\nunemotional\nunemotionalism\nunemotionally\nunemotionalness\nunemotioned\nunempaneled\nunemphatic\nunemphatical\nunemphatically\nunempirical\nunempirically\nunemploy\nunemployability\nunemployable\nunemployableness\nunemployably\nunemployed\nunemployment\nunempoisoned\nunempowered\nunempt\nunemptiable\nunemptied\nunempty\nunemulative\nunemulous\nunemulsified\nunenabled\nunenacted\nunenameled\nunenamored\nunencamped\nunenchafed\nunenchant\nunenchanted\nunencircled\nunenclosed\nunencompassed\nunencored\nunencounterable\nunencountered\nunencouraged\nunencouraging\nunencroached\nunencroaching\nunencumber\nunencumbered\nunencumberedly\nunencumberedness\nunencumbering\nunencysted\nunendable\nunendamaged\nunendangered\nunendeared\nunendeavored\nunended\nunending\nunendingly\nunendingness\nunendorsable\nunendorsed\nunendowed\nunendowing\nunendued\nunendurability\nunendurable\nunendurably\nunendured\nunenduring\nunenduringly\nunenergetic\nunenergized\nunenervated\nunenfeebled\nunenfiladed\nunenforceable\nunenforced\nunenforcedly\nunenforcedness\nunenforcibility\nunenfranchised\nunengaged\nunengaging\nunengendered\nunengineered\nunenglish\nunengraved\nunengraven\nunengrossed\nunenhanced\nunenjoined\nunenjoyable\nunenjoyed\nunenjoying\nunenjoyingly\nunenkindled\nunenlarged\nunenlightened\nunenlightening\nunenlisted\nunenlivened\nunenlivening\nunennobled\nunennobling\nunenounced\nunenquired\nunenquiring\nunenraged\nunenraptured\nunenrichable\nunenrichableness\nunenriched\nunenriching\nunenrobed\nunenrolled\nunenshrined\nunenslave\nunenslaved\nunensnared\nunensouled\nunensured\nunentailed\nunentangle\nunentangleable\nunentangled\nunentanglement\nunentangler\nunenterable\nunentered\nunentering\nunenterprise\nunenterprised\nunenterprising\nunenterprisingly\nunenterprisingness\nunentertainable\nunentertained\nunentertaining\nunentertainingly\nunentertainingness\nunenthralled\nunenthralling\nunenthroned\nunenthusiasm\nunenthusiastic\nunenthusiastically\nunenticed\nunenticing\nunentire\nunentitled\nunentombed\nunentomological\nunentrance\nunentranced\nunentrapped\nunentreated\nunentreating\nunentrenched\nunentwined\nunenumerable\nunenumerated\nunenveloped\nunenvenomed\nunenviable\nunenviably\nunenvied\nunenviedly\nunenvious\nunenviously\nunenvironed\nunenvying\nunenwoven\nunepauleted\nunephemeral\nunepic\nunepicurean\nunepigrammatic\nunepilogued\nunepiscopal\nunepiscopally\nunepistolary\nunepitaphed\nunepithelial\nunepitomized\nunequable\nunequableness\nunequably\nunequal\nunequalable\nunequaled\nunequality\nunequalize\nunequalized\nunequally\nunequalness\nunequated\nunequatorial\nunequestrian\nunequiangular\nunequiaxed\nunequilateral\nunequilibrated\nunequine\nunequipped\nunequitable\nunequitableness\nunequitably\nunequivalent\nunequivalve\nunequivalved\nunequivocal\nunequivocally\nunequivocalness\nuneradicable\nuneradicated\nunerasable\nunerased\nunerasing\nunerect\nunerected\nunermined\nuneroded\nunerrable\nunerrableness\nunerrably\nunerrancy\nunerrant\nunerratic\nunerring\nunerringly\nunerringness\nunerroneous\nunerroneously\nunerudite\nunerupted\nuneruptive\nunescaladed\nunescalloped\nunescapable\nunescapableness\nunescapably\nunescaped\nunescheated\nuneschewable\nuneschewably\nuneschewed\nUnesco\nunescorted\nunescutcheoned\nunesoteric\nunespied\nunespousable\nunespoused\nunessayed\nunessence\nunessential\nunessentially\nunessentialness\nunestablish\nunestablishable\nunestablished\nunestablishment\nunesteemed\nunestimable\nunestimableness\nunestimably\nunestimated\nunestopped\nunestranged\nunetched\nuneternal\nuneternized\nunethereal\nunethic\nunethical\nunethically\nunethicalness\nunethnological\nunethylated\nunetymological\nunetymologizable\nuneucharistical\nuneugenic\nuneulogized\nuneuphemistical\nuneuphonic\nuneuphonious\nuneuphoniously\nuneuphoniousness\nunevacuated\nunevadable\nunevaded\nunevaluated\nunevanescent\nunevangelic\nunevangelical\nunevangelized\nunevaporate\nunevaporated\nunevasive\nuneven\nunevenly\nunevenness\nuneventful\nuneventfully\nuneventfulness\nuneverted\nunevicted\nunevidenced\nunevident\nunevidential\nunevil\nunevinced\nunevirated\nuneviscerated\nunevitable\nunevitably\nunevokable\nunevoked\nunevolutionary\nunevolved\nunexacerbated\nunexact\nunexacted\nunexactedly\nunexacting\nunexactingly\nunexactly\nunexactness\nunexaggerable\nunexaggerated\nunexaggerating\nunexalted\nunexaminable\nunexamined\nunexamining\nunexampled\nunexampledness\nunexasperated\nunexasperating\nunexcavated\nunexceedable\nunexceeded\nunexcelled\nunexcellent\nunexcelling\nunexceptable\nunexcepted\nunexcepting\nunexceptionability\nunexceptionable\nunexceptionableness\nunexceptionably\nunexceptional\nunexceptionally\nunexceptionalness\nunexceptive\nunexcerpted\nunexcessive\nunexchangeable\nunexchangeableness\nunexchanged\nunexcised\nunexcitability\nunexcitable\nunexcited\nunexciting\nunexclaiming\nunexcludable\nunexcluded\nunexcluding\nunexclusive\nunexclusively\nunexclusiveness\nunexcogitable\nunexcogitated\nunexcommunicated\nunexcoriated\nunexcorticated\nunexcrescent\nunexcreted\nunexcruciating\nunexculpable\nunexculpably\nunexculpated\nunexcursive\nunexcusable\nunexcusableness\nunexcusably\nunexcused\nunexcusedly\nunexcusedness\nunexcusing\nunexecrated\nunexecutable\nunexecuted\nunexecuting\nunexecutorial\nunexemplary\nunexemplifiable\nunexemplified\nunexempt\nunexempted\nunexemptible\nunexempting\nunexercisable\nunexercise\nunexercised\nunexerted\nunexhalable\nunexhaled\nunexhausted\nunexhaustedly\nunexhaustedness\nunexhaustible\nunexhaustibleness\nunexhaustibly\nunexhaustion\nunexhaustive\nunexhaustiveness\nunexhibitable\nunexhibitableness\nunexhibited\nunexhilarated\nunexhilarating\nunexhorted\nunexhumed\nunexigent\nunexilable\nunexiled\nunexistence\nunexistent\nunexisting\nunexonerable\nunexonerated\nunexorable\nunexorableness\nunexorbitant\nunexorcisable\nunexorcisably\nunexorcised\nunexotic\nunexpandable\nunexpanded\nunexpanding\nunexpansive\nunexpectable\nunexpectant\nunexpected\nunexpectedly\nunexpectedness\nunexpecting\nunexpectingly\nunexpectorated\nunexpedient\nunexpeditated\nunexpedited\nunexpeditious\nunexpelled\nunexpendable\nunexpended\nunexpensive\nunexpensively\nunexpensiveness\nunexperience\nunexperienced\nunexperiencedness\nunexperient\nunexperiential\nunexperimental\nunexperimented\nunexpert\nunexpertly\nunexpertness\nunexpiable\nunexpiated\nunexpired\nunexpiring\nunexplainable\nunexplainableness\nunexplainably\nunexplained\nunexplainedly\nunexplainedness\nunexplaining\nunexplanatory\nunexplicable\nunexplicableness\nunexplicably\nunexplicated\nunexplicit\nunexplicitly\nunexplicitness\nunexploded\nunexploitation\nunexploited\nunexplorable\nunexplorative\nunexplored\nunexplosive\nunexportable\nunexported\nunexporting\nunexposable\nunexposed\nunexpostulating\nunexpoundable\nunexpounded\nunexpress\nunexpressable\nunexpressableness\nunexpressably\nunexpressed\nunexpressedly\nunexpressible\nunexpressibleness\nunexpressibly\nunexpressive\nunexpressively\nunexpressiveness\nunexpressly\nunexpropriable\nunexpropriated\nunexpugnable\nunexpunged\nunexpurgated\nunexpurgatedly\nunexpurgatedness\nunextended\nunextendedly\nunextendedness\nunextendible\nunextensible\nunextenuable\nunextenuated\nunextenuating\nunexterminable\nunexterminated\nunexternal\nunexternality\nunexterritoriality\nunextinct\nunextinctness\nunextinguishable\nunextinguishableness\nunextinguishably\nunextinguished\nunextirpated\nunextolled\nunextortable\nunextorted\nunextractable\nunextracted\nunextradited\nunextraneous\nunextraordinary\nunextravagance\nunextravagant\nunextravagating\nunextravasated\nunextreme\nunextricable\nunextricated\nunextrinsic\nunextruded\nunexuberant\nunexuded\nunexultant\nuneye\nuneyeable\nuneyed\nunfabled\nunfabling\nunfabricated\nunfabulous\nunfacaded\nunface\nunfaceable\nunfaced\nunfaceted\nunfacetious\nunfacile\nunfacilitated\nunfact\nunfactional\nunfactious\nunfactitious\nunfactorable\nunfactored\nunfactual\nunfadable\nunfaded\nunfading\nunfadingly\nunfadingness\nunfagged\nunfagoted\nunfailable\nunfailableness\nunfailably\nunfailed\nunfailing\nunfailingly\nunfailingness\nunfain\nunfaint\nunfainting\nunfaintly\nunfair\nunfairly\nunfairminded\nunfairness\nunfairylike\nunfaith\nunfaithful\nunfaithfully\nunfaithfulness\nunfaked\nunfallacious\nunfallaciously\nunfallen\nunfallenness\nunfallible\nunfallibleness\nunfallibly\nunfalling\nunfallowed\nunfalse\nunfalsifiable\nunfalsified\nunfalsifiedness\nunfalsity\nunfaltering\nunfalteringly\nunfamed\nunfamiliar\nunfamiliarity\nunfamiliarized\nunfamiliarly\nunfanatical\nunfanciable\nunfancied\nunfanciful\nunfancy\nunfanged\nunfanned\nunfantastic\nunfantastical\nunfantastically\nunfar\nunfarced\nunfarcical\nunfarewelled\nunfarmed\nunfarming\nunfarrowed\nunfarsighted\nunfasciated\nunfascinate\nunfascinated\nunfascinating\nunfashion\nunfashionable\nunfashionableness\nunfashionably\nunfashioned\nunfast\nunfasten\nunfastenable\nunfastened\nunfastener\nunfastidious\nunfastidiously\nunfastidiousness\nunfasting\nunfather\nunfathered\nunfatherlike\nunfatherliness\nunfatherly\nunfathomability\nunfathomable\nunfathomableness\nunfathomably\nunfathomed\nunfatigue\nunfatigueable\nunfatigued\nunfatiguing\nunfattable\nunfatted\nunfatten\nunfauceted\nunfaultfinding\nunfaulty\nunfavorable\nunfavorableness\nunfavorably\nunfavored\nunfavoring\nunfavorite\nunfawning\nunfealty\nunfeared\nunfearful\nunfearfully\nunfearing\nunfearingly\nunfeary\nunfeasable\nunfeasableness\nunfeasably\nunfeasibility\nunfeasible\nunfeasibleness\nunfeasibly\nunfeasted\nunfeather\nunfeathered\nunfeatured\nunfecund\nunfecundated\nunfed\nunfederal\nunfederated\nunfeeble\nunfeed\nunfeedable\nunfeeding\nunfeeing\nunfeelable\nunfeeling\nunfeelingly\nunfeelingness\nunfeignable\nunfeignableness\nunfeignably\nunfeigned\nunfeignedly\nunfeignedness\nunfeigning\nunfeigningly\nunfeigningness\nunfele\nunfelicitated\nunfelicitating\nunfelicitous\nunfelicitously\nunfelicitousness\nunfeline\nunfellable\nunfelled\nunfellied\nunfellow\nunfellowed\nunfellowlike\nunfellowly\nunfellowshiped\nunfelon\nunfelonious\nunfeloniously\nunfelony\nunfelt\nunfelted\nunfemale\nunfeminine\nunfemininely\nunfeminineness\nunfemininity\nunfeminist\nunfeminize\nunfence\nunfenced\nunfendered\nunfenestrated\nunfeoffed\nunfermentable\nunfermentableness\nunfermentably\nunfermented\nunfermenting\nunfernlike\nunferocious\nunferreted\nunferried\nunfertile\nunfertileness\nunfertility\nunfertilizable\nunfertilized\nunfervent\nunfervid\nunfester\nunfestered\nunfestival\nunfestive\nunfestively\nunfestooned\nunfetchable\nunfetched\nunfeted\nunfetter\nunfettered\nunfettled\nunfeudal\nunfeudalize\nunfeudalized\nunfeued\nunfevered\nunfeverish\nunfew\nunfibbed\nunfibbing\nunfiber\nunfibered\nunfibrous\nunfickle\nunfictitious\nunfidelity\nunfidgeting\nunfielded\nunfiend\nunfiendlike\nunfierce\nunfiery\nunfight\nunfightable\nunfighting\nunfigurable\nunfigurative\nunfigured\nunfilamentous\nunfilched\nunfile\nunfiled\nunfilial\nunfilially\nunfilialness\nunfill\nunfillable\nunfilled\nunfilleted\nunfilling\nunfilm\nunfilmed\nunfiltered\nunfiltrated\nunfinable\nunfinancial\nunfine\nunfined\nunfinessed\nunfingered\nunfinical\nunfinish\nunfinishable\nunfinished\nunfinishedly\nunfinishedness\nunfinite\nunfired\nunfireproof\nunfiring\nunfirm\nunfirmamented\nunfirmly\nunfirmness\nunfiscal\nunfishable\nunfished\nunfishing\nunfishlike\nunfissile\nunfistulous\nunfit\nunfitly\nunfitness\nunfittable\nunfitted\nunfittedness\nunfitten\nunfitting\nunfittingly\nunfittingness\nunfitty\nunfix\nunfixable\nunfixated\nunfixed\nunfixedness\nunfixing\nunfixity\nunflag\nunflagged\nunflagging\nunflaggingly\nunflaggingness\nunflagitious\nunflagrant\nunflaky\nunflamboyant\nunflaming\nunflanged\nunflank\nunflanked\nunflapping\nunflashing\nunflat\nunflated\nunflattened\nunflatterable\nunflattered\nunflattering\nunflatteringly\nunflaunted\nunflavored\nunflawed\nunflayed\nunflead\nunflecked\nunfledge\nunfledged\nunfledgedness\nunfleece\nunfleeced\nunfleeing\nunfleeting\nunflesh\nunfleshed\nunfleshliness\nunfleshly\nunfleshy\nunfletched\nunflexed\nunflexible\nunflexibleness\nunflexibly\nunflickering\nunflickeringly\nunflighty\nunflinching\nunflinchingly\nunflinchingness\nunflintify\nunflippant\nunflirtatious\nunflitched\nunfloatable\nunfloating\nunflock\nunfloggable\nunflogged\nunflooded\nunfloor\nunfloored\nunflorid\nunflossy\nunflounced\nunfloured\nunflourished\nunflourishing\nunflouted\nunflower\nunflowered\nunflowing\nunflown\nunfluctuating\nunfluent\nunfluid\nunfluked\nunflunked\nunfluorescent\nunflurried\nunflush\nunflushed\nunflustered\nunfluted\nunflutterable\nunfluttered\nunfluttering\nunfluvial\nunfluxile\nunflying\nunfoaled\nunfoaming\nunfocused\nunfoggy\nunfoilable\nunfoiled\nunfoisted\nunfold\nunfoldable\nunfolded\nunfolder\nunfolding\nunfoldment\nunfoldure\nunfoliaged\nunfoliated\nunfollowable\nunfollowed\nunfollowing\nunfomented\nunfond\nunfondled\nunfondness\nunfoodful\nunfool\nunfoolable\nunfooled\nunfooling\nunfoolish\nunfooted\nunfootsore\nunfoppish\nunforaged\nunforbade\nunforbearance\nunforbearing\nunforbid\nunforbidden\nunforbiddenly\nunforbiddenness\nunforbidding\nunforceable\nunforced\nunforcedly\nunforcedness\nunforceful\nunforcible\nunforcibleness\nunforcibly\nunfordable\nunfordableness\nunforded\nunforeboded\nunforeboding\nunforecasted\nunforegone\nunforeign\nunforeknowable\nunforeknown\nunforensic\nunforeordained\nunforesee\nunforeseeable\nunforeseeableness\nunforeseeably\nunforeseeing\nunforeseeingly\nunforeseen\nunforeseenly\nunforeseenness\nunforeshortened\nunforest\nunforestallable\nunforestalled\nunforested\nunforetellable\nunforethought\nunforethoughtful\nunforetold\nunforewarned\nunforewarnedness\nunforfeit\nunforfeitable\nunforfeited\nunforgeability\nunforgeable\nunforged\nunforget\nunforgetful\nunforgettable\nunforgettableness\nunforgettably\nunforgetting\nunforgettingly\nunforgivable\nunforgivableness\nunforgivably\nunforgiven\nunforgiveness\nunforgiver\nunforgiving\nunforgivingly\nunforgivingness\nunforgone\nunforgot\nunforgotten\nunfork\nunforked\nunforkedness\nunforlorn\nunform\nunformal\nunformality\nunformalized\nunformally\nunformalness\nunformative\nunformed\nunformidable\nunformulable\nunformularizable\nunformularize\nunformulated\nunformulistic\nunforsaken\nunforsaking\nunforsook\nunforsworn\nunforthright\nunfortifiable\nunfortified\nunfortify\nunfortuitous\nunfortunate\nunfortunately\nunfortunateness\nunfortune\nunforward\nunforwarded\nunfossiliferous\nunfossilized\nunfostered\nunfought\nunfoughten\nunfoul\nunfoulable\nunfouled\nunfound\nunfounded\nunfoundedly\nunfoundedness\nunfoundered\nunfountained\nunfowllike\nunfoxy\nunfractured\nunfragrance\nunfragrant\nunfragrantly\nunfrail\nunframable\nunframableness\nunframably\nunframe\nunframed\nunfranchised\nunfrank\nunfrankable\nunfranked\nunfrankly\nunfrankness\nunfraternal\nunfraternizing\nunfraudulent\nunfraught\nunfrayed\nunfreckled\nunfree\nunfreed\nunfreedom\nunfreehold\nunfreely\nunfreeman\nunfreeness\nunfreezable\nunfreeze\nunfreezing\nunfreighted\nunfrenchified\nunfrenzied\nunfrequency\nunfrequent\nunfrequented\nunfrequentedness\nunfrequently\nunfrequentness\nunfret\nunfretful\nunfretting\nunfriable\nunfriarlike\nunfricative\nunfrictioned\nunfried\nunfriend\nunfriended\nunfriendedness\nunfriending\nunfriendlike\nunfriendlily\nunfriendliness\nunfriendly\nunfriendship\nunfrighted\nunfrightenable\nunfrightened\nunfrightenedness\nunfrightful\nunfrigid\nunfrill\nunfrilled\nunfringe\nunfringed\nunfrisky\nunfrivolous\nunfrizz\nunfrizzled\nunfrizzy\nunfrock\nunfrocked\nunfroglike\nunfrolicsome\nunfronted\nunfrost\nunfrosted\nunfrosty\nunfrounced\nunfroward\nunfrowardly\nunfrowning\nunfroze\nunfrozen\nunfructed\nunfructified\nunfructify\nunfructuous\nunfructuously\nunfrugal\nunfrugally\nunfrugalness\nunfruitful\nunfruitfully\nunfruitfulness\nunfruity\nunfrustrable\nunfrustrably\nunfrustratable\nunfrustrated\nunfrutuosity\nunfuddled\nunfueled\nunfulfill\nunfulfillable\nunfulfilled\nunfulfilling\nunfulfillment\nunfull\nunfulled\nunfully\nunfulminated\nunfulsome\nunfumbled\nunfumbling\nunfumed\nunfumigated\nunfunctional\nunfundamental\nunfunded\nunfunnily\nunfunniness\nunfunny\nunfur\nunfurbelowed\nunfurbished\nunfurcate\nunfurious\nunfurl\nunfurlable\nunfurnish\nunfurnished\nunfurnishedness\nunfurnitured\nunfurred\nunfurrow\nunfurrowable\nunfurrowed\nunfurthersome\nunfused\nunfusible\nunfusibleness\nunfusibly\nunfussed\nunfussing\nunfussy\nunfutile\nunfuturistic\nungabled\nungag\nungaged\nungagged\nungain\nungainable\nungained\nungainful\nungainfully\nungainfulness\nungaining\nungainlike\nungainliness\nungainly\nungainness\nungainsaid\nungainsayable\nungainsayably\nungainsaying\nungainsome\nungainsomely\nungaite\nungallant\nungallantly\nungallantness\nungalling\nungalvanized\nungamboling\nungamelike\nunganged\nungangrened\nungarbed\nungarbled\nungardened\nungargled\nungarland\nungarlanded\nungarment\nungarmented\nungarnered\nungarnish\nungarnished\nungaro\nungarrisoned\nungarter\nungartered\nungashed\nungassed\nungastric\nungathered\nungaudy\nungauged\nungauntlet\nungauntleted\nungazetted\nungazing\nungear\nungeared\nungelatinizable\nungelatinized\nungelded\nungelt\nungeminated\nungenerable\nungeneral\nungeneraled\nungeneralized\nungenerate\nungenerated\nungenerative\nungeneric\nungenerical\nungenerosity\nungenerous\nungenerously\nungenerousness\nungenial\nungeniality\nungenially\nungenialness\nungenitured\nungenius\nungenteel\nungenteelly\nungenteelness\nungentile\nungentility\nungentilize\nungentle\nungentled\nungentleman\nungentlemanize\nungentlemanlike\nungentlemanlikeness\nungentlemanliness\nungentlemanly\nungentleness\nungentlewomanlike\nungently\nungenuine\nungenuinely\nungenuineness\nungeodetical\nungeographic\nungeographical\nungeographically\nungeological\nungeometric\nungeometrical\nungeometrically\nungeometricalness\nungerminated\nungerminating\nungermlike\nungerontic\nungesting\nungesturing\nunget\nungettable\nunghostlike\nunghostly\nungiant\nungibbet\nungiddy\nungifted\nungiftedness\nungild\nungilded\nungill\nungilt\nungingled\nunginned\nungird\nungirded\nungirdle\nungirdled\nungirlish\nungirt\nungirth\nungirthed\nungive\nungiveable\nungiven\nungiving\nungka\nunglaciated\nunglad\nungladden\nungladdened\nungladly\nungladness\nungladsome\nunglamorous\nunglandular\nunglassed\nunglaze\nunglazed\nungleaned\nunglee\nungleeful\nunglimpsed\nunglistening\nunglittering\nungloating\nunglobe\nunglobular\nungloom\nungloomed\nungloomy\nunglorified\nunglorify\nunglorifying\nunglorious\nungloriously\nungloriousness\nunglory\nunglosed\nungloss\nunglossaried\nunglossed\nunglossily\nunglossiness\nunglossy\nunglove\nungloved\nunglowing\nunglozed\nunglue\nunglued\nunglutinate\nunglutted\nungluttonous\nungnarred\nungnaw\nungnawn\nungnostic\nungoaded\nungoatlike\nungod\nungoddess\nungodlike\nungodlily\nungodliness\nungodly\nungodmothered\nungold\nungolden\nungone\nungood\nungoodliness\nungoodly\nungored\nungorge\nungorged\nungorgeous\nungospel\nungospelized\nungospelled\nungospellike\nungossiping\nungot\nungothic\nungotten\nungouged\nungouty\nungovernable\nungovernableness\nungovernably\nungoverned\nungovernedness\nungoverning\nungown\nungowned\nungrace\nungraced\nungraceful\nungracefully\nungracefulness\nungracious\nungraciously\nungraciousness\nungradated\nungraded\nungradual\nungradually\nungraduated\nungraduating\nungraft\nungrafted\nungrain\nungrainable\nungrained\nungrammar\nungrammared\nungrammatic\nungrammatical\nungrammatically\nungrammaticalness\nungrammaticism\nungrand\nungrantable\nungranted\nungranulated\nungraphic\nungraphitized\nungrapple\nungrappled\nungrappler\nungrasp\nungraspable\nungrasped\nungrasping\nungrassed\nungrassy\nungrated\nungrateful\nungratefully\nungratefulness\nungratifiable\nungratified\nungratifying\nungrating\nungrave\nungraved\nungraveled\nungravelly\nungravely\nungraven\nungrayed\nungrazed\nungreased\nungreat\nungreatly\nungreatness\nungreeable\nungreedy\nungreen\nungreenable\nungreened\nungreeted\nungregarious\nungrieve\nungrieved\nungrieving\nungrilled\nungrimed\nungrindable\nungrip\nungripe\nungrizzled\nungroaning\nungroined\nungroomed\nungrooved\nungropeable\nungross\nungrotesque\nunground\nungroundable\nungroundably\nungrounded\nungroundedly\nungroundedness\nungroupable\nungrouped\nungrow\nungrowing\nungrown\nungrubbed\nungrudged\nungrudging\nungrudgingly\nungrudgingness\nungruesome\nungruff\nungrumbling\nungual\nunguaranteed\nunguard\nunguardable\nunguarded\nunguardedly\nunguardedness\nungueal\nunguent\nunguentaria\nunguentarium\nunguentary\nunguentiferous\nunguentous\nunguentum\nunguerdoned\nungues\nunguessable\nunguessableness\nunguessed\nunguical\nunguicorn\nunguicular\nUnguiculata\nunguiculate\nunguiculated\nunguidable\nunguidableness\nunguidably\nunguided\nunguidedly\nunguiferous\nunguiform\nunguiled\nunguileful\nunguilefully\nunguilefulness\nunguillotined\nunguiltily\nunguiltiness\nunguilty\nunguinal\nunguinous\nunguirostral\nunguis\nungula\nungulae\nungular\nUngulata\nungulate\nungulated\nunguled\nunguligrade\nungull\nungulous\nungulp\nungum\nungummed\nungushing\nungutted\nunguttural\nunguyed\nunguzzled\nungymnastic\nungypsylike\nungyve\nungyved\nunhabit\nunhabitable\nunhabitableness\nunhabited\nunhabitual\nunhabitually\nunhabituate\nunhabituated\nunhacked\nunhackled\nunhackneyed\nunhackneyedness\nunhad\nunhaft\nunhafted\nunhaggled\nunhaggling\nunhailable\nunhailed\nunhair\nunhaired\nunhairer\nunhairily\nunhairiness\nunhairing\nunhairy\nunhallooed\nunhallow\nunhallowed\nunhallowedness\nunhaloed\nunhalsed\nunhalted\nunhalter\nunhaltered\nunhalting\nunhalved\nunhammered\nunhamper\nunhampered\nunhand\nunhandcuff\nunhandcuffed\nunhandicapped\nunhandily\nunhandiness\nunhandled\nunhandseled\nunhandsome\nunhandsomely\nunhandsomeness\nunhandy\nunhang\nunhanged\nunhap\nunhappen\nunhappily\nunhappiness\nunhappy\nunharangued\nunharassed\nunharbor\nunharbored\nunhard\nunharden\nunhardenable\nunhardened\nunhardihood\nunhardily\nunhardiness\nunhardness\nunhardy\nunharked\nunharmable\nunharmed\nunharmful\nunharmfully\nunharming\nunharmonic\nunharmonical\nunharmonious\nunharmoniously\nunharmoniousness\nunharmonize\nunharmonized\nunharmony\nunharness\nunharnessed\nunharped\nunharried\nunharrowed\nunharsh\nunharvested\nunhashed\nunhasp\nunhasped\nunhaste\nunhasted\nunhastened\nunhastily\nunhastiness\nunhasting\nunhasty\nunhat\nunhatchability\nunhatchable\nunhatched\nunhatcheled\nunhate\nunhated\nunhateful\nunhating\nunhatingly\nunhatted\nunhauled\nunhaunt\nunhaunted\nunhave\nunhawked\nunhayed\nunhazarded\nunhazarding\nunhazardous\nunhazardousness\nunhazed\nunhead\nunheaded\nunheader\nunheady\nunheal\nunhealable\nunhealableness\nunhealably\nunhealed\nunhealing\nunhealth\nunhealthful\nunhealthfully\nunhealthfulness\nunhealthily\nunhealthiness\nunhealthsome\nunhealthsomeness\nunhealthy\nunheaped\nunhearable\nunheard\nunhearing\nunhearsed\nunheart\nunhearten\nunheartsome\nunhearty\nunheatable\nunheated\nunheathen\nunheaved\nunheaven\nunheavenly\nunheavily\nunheaviness\nunheavy\nunhectored\nunhedge\nunhedged\nunheed\nunheeded\nunheededly\nunheedful\nunheedfully\nunheedfulness\nunheeding\nunheedingly\nunheedy\nunheeled\nunheelpieced\nunhefted\nunheightened\nunheired\nunheld\nunhele\nunheler\nunhelm\nunhelmed\nunhelmet\nunhelmeted\nunhelpable\nunhelpableness\nunhelped\nunhelpful\nunhelpfully\nunhelpfulness\nunhelping\nunhelved\nunhemmed\nunheppen\nunheralded\nunheraldic\nunherd\nunherded\nunhereditary\nunheretical\nunheritable\nunhermetic\nunhero\nunheroic\nunheroical\nunheroically\nunheroism\nunheroize\nunherolike\nunhesitant\nunhesitating\nunhesitatingly\nunhesitatingness\nunheuristic\nunhewable\nunhewed\nunhewn\nunhex\nunhid\nunhidable\nunhidableness\nunhidably\nunhidated\nunhidden\nunhide\nunhidebound\nunhideous\nunhieratic\nunhigh\nunhilarious\nunhinderable\nunhinderably\nunhindered\nunhindering\nunhinge\nunhingement\nunhinted\nunhipped\nunhired\nunhissed\nunhistoric\nunhistorical\nunhistorically\nunhistory\nunhistrionic\nunhit\nunhitch\nunhitched\nunhittable\nunhive\nunhoard\nunhoarded\nunhoarding\nunhoary\nunhoaxed\nunhobble\nunhocked\nunhoed\nunhogged\nunhoist\nunhoisted\nunhold\nunholiday\nunholily\nunholiness\nunhollow\nunhollowed\nunholy\nunhome\nunhomelike\nunhomelikeness\nunhomeliness\nunhomely\nunhomish\nunhomogeneity\nunhomogeneous\nunhomogeneously\nunhomologous\nunhoned\nunhonest\nunhonestly\nunhoneyed\nunhonied\nunhonorable\nunhonorably\nunhonored\nunhonoured\nunhood\nunhooded\nunhoodwink\nunhoodwinked\nunhoofed\nunhook\nunhooked\nunhoop\nunhooped\nunhooper\nunhooted\nunhoped\nunhopedly\nunhopedness\nunhopeful\nunhopefully\nunhopefulness\nunhoping\nunhopingly\nunhopped\nunhoppled\nunhorizoned\nunhorizontal\nunhorned\nunhorny\nunhoroscopic\nunhorse\nunhose\nunhosed\nunhospitable\nunhospitableness\nunhospitably\nunhostile\nunhostilely\nunhostileness\nunhostility\nunhot\nunhoundlike\nunhouse\nunhoused\nunhouseled\nunhouselike\nunhousewifely\nunhuddle\nunhugged\nunhull\nunhulled\nunhuman\nunhumanize\nunhumanized\nunhumanly\nunhumanness\nunhumble\nunhumbled\nunhumbledness\nunhumbleness\nunhumbly\nunhumbugged\nunhumid\nunhumiliated\nunhumored\nunhumorous\nunhumorously\nunhumorousness\nunhumoured\nunhung\nunhuntable\nunhunted\nunhurdled\nunhurled\nunhurried\nunhurriedly\nunhurriedness\nunhurrying\nunhurryingly\nunhurt\nunhurted\nunhurtful\nunhurtfully\nunhurtfulness\nunhurting\nunhusbanded\nunhusbandly\nunhushable\nunhushed\nunhushing\nunhusk\nunhusked\nunhustled\nunhustling\nunhutched\nunhuzzaed\nunhydraulic\nunhydrolyzed\nunhygienic\nunhygienically\nunhygrometric\nunhymeneal\nunhymned\nunhyphenated\nunhyphened\nunhypnotic\nunhypnotizable\nunhypnotize\nunhypocritical\nunhypocritically\nunhypothecated\nunhypothetical\nunhysterical\nuniambic\nuniambically\nuniangulate\nuniarticular\nuniarticulate\nUniat\nuniat\nUniate\nuniate\nuniauriculate\nuniauriculated\nuniaxal\nuniaxally\nuniaxial\nuniaxially\nunibasal\nunibivalent\nunible\nunibracteate\nunibracteolate\nunibranchiate\nunicalcarate\nunicameral\nunicameralism\nunicameralist\nunicamerate\nunicapsular\nunicarinate\nunicarinated\nunice\nuniced\nunicell\nunicellate\nunicelled\nunicellular\nunicellularity\nunicentral\nunichord\nuniciliate\nunicism\nunicist\nunicity\nuniclinal\nunicolor\nunicolorate\nunicolored\nunicolorous\nuniconstant\nunicorn\nunicorneal\nunicornic\nunicornlike\nunicornous\nunicornuted\nunicostate\nunicotyledonous\nunicum\nunicursal\nunicursality\nunicursally\nunicuspid\nunicuspidate\nunicycle\nunicyclist\nunidactyl\nunidactyle\nunidactylous\nunideaed\nunideal\nunidealism\nunidealist\nunidealistic\nunidealized\nunidentate\nunidentated\nunidenticulate\nunidentifiable\nunidentifiableness\nunidentifiably\nunidentified\nunidentifiedly\nunidentifying\nunideographic\nunidextral\nunidextrality\nunidigitate\nunidimensional\nunidiomatic\nunidiomatically\nunidirect\nunidirected\nunidirection\nunidirectional\nunidle\nunidleness\nunidly\nunidolatrous\nunidolized\nunidyllic\nunie\nuniembryonate\nuniequivalent\nuniface\nunifaced\nunifacial\nunifactorial\nunifarious\nunifiable\nunific\nunification\nunificationist\nunificator\nunified\nunifiedly\nunifiedness\nunifier\nunifilar\nuniflagellate\nunifloral\nuniflorate\nuniflorous\nuniflow\nuniflowered\nunifocal\nunifoliar\nunifoliate\nunifoliolate\nUnifolium\nuniform\nuniformal\nuniformalization\nuniformalize\nuniformally\nuniformation\nuniformed\nuniformist\nuniformitarian\nuniformitarianism\nuniformity\nuniformization\nuniformize\nuniformless\nuniformly\nuniformness\nunify\nunigenesis\nunigenetic\nunigenist\nunigenistic\nunigenital\nunigeniture\nunigenous\nuniglandular\nuniglobular\nunignitable\nunignited\nunignitible\nunignominious\nunignorant\nunignored\nunigravida\nuniguttulate\nunijugate\nunijugous\nunilabiate\nunilabiated\nunilamellar\nunilamellate\nunilaminar\nunilaminate\nunilateral\nunilateralism\nunilateralist\nunilaterality\nunilateralization\nunilateralize\nunilaterally\nunilinear\nunilingual\nunilingualism\nuniliteral\nunilludedly\nunillumed\nunilluminated\nunilluminating\nunillumination\nunillumined\nunillusioned\nunillusory\nunillustrated\nunillustrative\nunillustrious\nunilobal\nunilobar\nunilobate\nunilobe\nunilobed\nunilobular\nunilocular\nunilocularity\nuniloculate\nunimacular\nunimaged\nunimaginable\nunimaginableness\nunimaginably\nunimaginary\nunimaginative\nunimaginatively\nunimaginativeness\nunimagine\nunimagined\nunimanual\nunimbanked\nunimbellished\nunimbezzled\nunimbibed\nunimbibing\nunimbittered\nunimbodied\nunimboldened\nunimbordered\nunimbosomed\nunimbowed\nunimbowered\nunimbroiled\nunimbrowned\nunimbrued\nunimbued\nunimedial\nunimitable\nunimitableness\nunimitably\nunimitated\nunimitating\nunimitative\nunimmaculate\nunimmanent\nunimmediate\nunimmerged\nunimmergible\nunimmersed\nunimmigrating\nunimmolated\nunimmortal\nunimmortalize\nunimmortalized\nunimmovable\nunimmured\nunimodal\nunimodality\nunimodular\nunimolecular\nunimolecularity\nunimpair\nunimpairable\nunimpaired\nunimpartable\nunimparted\nunimpartial\nunimpassionate\nunimpassioned\nunimpassionedly\nunimpassionedness\nunimpatient\nunimpawned\nunimpeachability\nunimpeachable\nunimpeachableness\nunimpeachably\nunimpeached\nunimpearled\nunimped\nunimpeded\nunimpededly\nunimpedible\nunimpedness\nunimpelled\nunimpenetrable\nunimperative\nunimperial\nunimperialistic\nunimperious\nunimpertinent\nunimpinging\nunimplanted\nunimplicable\nunimplicate\nunimplicated\nunimplicit\nunimplicitly\nunimplied\nunimplorable\nunimplored\nunimpoisoned\nunimportance\nunimportant\nunimportantly\nunimported\nunimporting\nunimportunate\nunimportunately\nunimportuned\nunimposed\nunimposedly\nunimposing\nunimpostrous\nunimpounded\nunimpoverished\nunimpowered\nunimprecated\nunimpregnable\nunimpregnate\nunimpregnated\nunimpressed\nunimpressibility\nunimpressible\nunimpressibleness\nunimpressibly\nunimpressionability\nunimpressionable\nunimpressive\nunimpressively\nunimpressiveness\nunimprinted\nunimprison\nunimprisonable\nunimprisoned\nunimpropriated\nunimprovable\nunimprovableness\nunimprovably\nunimproved\nunimprovedly\nunimprovedness\nunimprovement\nunimproving\nunimprovised\nunimpugnable\nunimpugned\nunimpulsive\nunimpurpled\nunimputable\nunimputed\nunimucronate\nunimultiplex\nunimuscular\nuninaugurated\nunincantoned\nunincarcerated\nunincarnate\nunincarnated\nunincensed\nuninchoative\nunincidental\nunincised\nunincisive\nunincited\nuninclinable\nuninclined\nuninclining\nuninclosed\nuninclosedness\nunincludable\nunincluded\nuninclusive\nuninclusiveness\nuninconvenienced\nunincorporate\nunincorporated\nunincorporatedly\nunincorporatedness\nunincreasable\nunincreased\nunincreasing\nunincubated\nuninculcated\nunincumbered\nunindebted\nunindebtedly\nunindebtedness\nunindemnified\nunindentable\nunindented\nunindentured\nunindexed\nunindicable\nunindicated\nunindicative\nunindictable\nunindicted\nunindifference\nunindifferency\nunindifferent\nunindifferently\nunindigent\nunindignant\nunindividual\nunindividualize\nunindividualized\nunindividuated\nunindorsed\nuninduced\nuninductive\nunindulged\nunindulgent\nunindulgently\nunindurated\nunindustrial\nunindustrialized\nunindustrious\nunindustriously\nunindwellable\nuninebriated\nuninebriating\nuninervate\nuninerved\nuninfallibility\nuninfallible\nuninfatuated\nuninfectable\nuninfected\nuninfectious\nuninfectiousness\nuninfeft\nuninferred\nuninfested\nuninfiltrated\nuninfinite\nuninfiniteness\nuninfixed\nuninflamed\nuninflammability\nuninflammable\nuninflated\nuninflected\nuninflectedness\nuninflicted\nuninfluenceable\nuninfluenced\nuninfluencing\nuninfluencive\nuninfluential\nuninfluentiality\nuninfolded\nuninformed\nuninforming\nuninfracted\nuninfringeable\nuninfringed\nuninfringible\nuninfuriated\nuninfused\nuningenious\nuningeniously\nuningeniousness\nuningenuity\nuningenuous\nuningenuously\nuningenuousness\nuningested\nuningrafted\nuningrained\nuninhabitability\nuninhabitable\nuninhabitableness\nuninhabitably\nuninhabited\nuninhabitedness\nuninhaled\nuninheritability\nuninheritable\nuninherited\nuninhibited\nuninhibitive\nuninhumed\nuninimical\nuniniquitous\nuninitialed\nuninitialled\nuninitiate\nuninitiated\nuninitiatedness\nuninitiation\nuninjectable\nuninjected\nuninjurable\nuninjured\nuninjuredness\nuninjuring\nuninjurious\nuninjuriously\nuninjuriousness\nuninked\nuninlaid\nuninn\nuninnate\nuninnocence\nuninnocent\nuninnocently\nuninnocuous\nuninnovating\nuninoculable\nuninoculated\nuninodal\nuninominal\nuninquired\nuninquiring\nuninquisitive\nuninquisitively\nuninquisitiveness\nuninquisitorial\nuninsane\nuninsatiable\nuninscribed\nuninserted\nuninshrined\nuninsinuated\nuninsistent\nuninsolvent\nuninspected\nuninspirable\nuninspired\nuninspiring\nuninspiringly\nuninspirited\nuninspissated\nuninstalled\nuninstanced\nuninstated\nuninstigated\nuninstilled\nuninstituted\nuninstructed\nuninstructedly\nuninstructedness\nuninstructible\nuninstructing\nuninstructive\nuninstructively\nuninstructiveness\nuninstrumental\nuninsular\nuninsulate\nuninsulated\nuninsultable\nuninsulted\nuninsulting\nuninsurability\nuninsurable\nuninsured\nunintegrated\nunintellective\nunintellectual\nunintellectualism\nunintellectuality\nunintellectually\nunintelligence\nunintelligent\nunintelligently\nunintelligentsia\nunintelligibility\nunintelligible\nunintelligibleness\nunintelligibly\nunintended\nunintendedly\nunintensive\nunintent\nunintentional\nunintentionality\nunintentionally\nunintentionalness\nunintently\nunintentness\nunintercalated\nunintercepted\nuninterchangeable\nuninterdicted\nuninterested\nuninterestedly\nuninterestedness\nuninteresting\nuninterestingly\nuninterestingness\nuninterferedwith\nuninterjected\nuninterlaced\nuninterlarded\nuninterleave\nuninterleaved\nuninterlined\nuninterlinked\nuninterlocked\nunintermarrying\nunintermediate\nunintermingled\nunintermission\nunintermissive\nunintermitted\nunintermittedly\nunintermittedness\nunintermittent\nunintermitting\nunintermittingly\nunintermittingness\nunintermixed\nuninternational\nuninterpleaded\nuninterpolated\nuninterposed\nuninterposing\nuninterpretable\nuninterpreted\nuninterred\nuninterrogable\nuninterrogated\nuninterrupted\nuninterruptedly\nuninterruptedness\nuninterruptible\nuninterruptibleness\nuninterrupting\nuninterruption\nunintersected\nuninterspersed\nunintervening\nuninterviewed\nunintervolved\nuninterwoven\nuninthroned\nunintimate\nunintimated\nunintimidated\nunintitled\nunintombed\nunintoned\nunintoxicated\nunintoxicatedness\nunintoxicating\nunintrenchable\nunintrenched\nunintricate\nunintrigued\nunintriguing\nunintroduced\nunintroducible\nunintroitive\nunintromitted\nunintrospective\nunintruded\nunintruding\nunintrusive\nunintrusively\nunintrusted\nunintuitive\nunintwined\nuninuclear\nuninucleate\nuninucleated\nuninundated\nuninured\nuninurned\nuninvadable\nuninvaded\nuninvaginated\nuninvalidated\nuninveighing\nuninveigled\nuninvented\nuninventful\nuninventibleness\nuninventive\nuninventively\nuninventiveness\nuninverted\nuninvested\nuninvestigable\nuninvestigated\nuninvestigating\nuninvestigative\nuninvidious\nuninvidiously\nuninvigorated\nuninvincible\nuninvite\nuninvited\nuninvitedly\nuninviting\nuninvoiced\nuninvoked\nuninvolved\nuninweaved\nuninwoven\nuninwrapped\nuninwreathed\nUnio\nunio\nuniocular\nunioid\nUniola\nunion\nunioned\nunionic\nunionid\nUnionidae\nunioniform\nunionism\nunionist\nunionistic\nunionization\nunionize\nunionoid\nunioval\nuniovular\nuniovulate\nunipara\nuniparental\nuniparient\nuniparous\nunipartite\nuniped\nunipeltate\nuniperiodic\nunipersonal\nunipersonalist\nunipersonality\nunipetalous\nuniphase\nuniphaser\nuniphonous\nuniplanar\nuniplicate\nunipod\nunipolar\nunipolarity\nuniporous\nunipotence\nunipotent\nunipotential\nunipulse\nuniquantic\nunique\nuniquely\nuniqueness\nuniquity\nuniradial\nuniradiate\nuniradiated\nuniradical\nuniramose\nuniramous\nunirascible\nunireme\nunirenic\nunirhyme\nuniridescent\nunironed\nunironical\nunirradiated\nunirrigated\nunirritable\nunirritant\nunirritated\nunirritatedly\nunirritating\nunisepalous\nuniseptate\nuniserial\nuniserially\nuniseriate\nuniseriately\nuniserrate\nuniserrulate\nunisexed\nunisexual\nunisexuality\nunisexually\nunisilicate\nunisoil\nunisolable\nunisolate\nunisolated\nunisomeric\nunisometrical\nunisomorphic\nunison\nunisonal\nunisonally\nunisonance\nunisonant\nunisonous\nunisotropic\nunisparker\nunispiculate\nunispinose\nunispiral\nunissuable\nunissued\nunistylist\nunisulcate\nunit\nunitage\nunital\nunitalicized\nUnitarian\nunitarian\nUnitarianism\nUnitarianize\nunitarily\nunitariness\nunitarism\nunitarist\nunitary\nunite\nuniteability\nuniteable\nuniteably\nunited\nunitedly\nunitedness\nunitemized\nunitentacular\nuniter\nuniting\nunitingly\nunition\nunitism\nunitistic\nunitive\nunitively\nunitiveness\nunitize\nunitooth\nunitrivalent\nunitrope\nunituberculate\nunitude\nunity\nuniunguiculate\nuniungulate\nunivalence\nunivalency\nunivalent\nunivalvate\nunivalve\nunivalvular\nunivariant\nuniverbal\nuniversal\nuniversalia\nUniversalian\nUniversalism\nuniversalism\nUniversalist\nuniversalist\nUniversalistic\nuniversalistic\nuniversality\nuniversalization\nuniversalize\nuniversalizer\nuniversally\nuniversalness\nuniversanimous\nuniverse\nuniverseful\nuniversitarian\nuniversitarianism\nuniversitary\nuniversitize\nuniversity\nuniversityless\nuniversitylike\nuniversityship\nuniversological\nuniversologist\nuniversology\nunivied\nunivocability\nunivocacy\nunivocal\nunivocalized\nunivocally\nunivocity\nunivoltine\nunivorous\nunjacketed\nunjaded\nunjagged\nunjailed\nunjam\nunjapanned\nunjarred\nunjarring\nunjaundiced\nunjaunty\nunjealous\nunjealoused\nunjellied\nunjesting\nunjesuited\nunjesuitical\nunjesuitically\nunjewel\nunjeweled\nunjewelled\nUnjewish\nunjilted\nunjocose\nunjocund\nunjogged\nunjogging\nunjoin\nunjoinable\nunjoint\nunjointed\nunjointedness\nunjointured\nunjoking\nunjokingly\nunjolly\nunjolted\nunjostled\nunjournalized\nunjovial\nunjovially\nunjoyed\nunjoyful\nunjoyfully\nunjoyfulness\nunjoyous\nunjoyously\nunjoyousness\nunjudgable\nunjudge\nunjudged\nunjudgelike\nunjudging\nunjudicable\nunjudicial\nunjudicially\nunjudicious\nunjudiciously\nunjudiciousness\nunjuggled\nunjuiced\nunjuicy\nunjumbled\nunjumpable\nunjust\nunjustice\nunjusticiable\nunjustifiable\nunjustifiableness\nunjustifiably\nunjustified\nunjustifiedly\nunjustifiedness\nunjustify\nunjustled\nunjustly\nunjustness\nunjuvenile\nunkaiserlike\nunkamed\nunked\nunkeeled\nunkembed\nunkempt\nunkemptly\nunkemptness\nunken\nunkenned\nunkennedness\nunkennel\nunkenneled\nunkenning\nunkensome\nunkept\nunkerchiefed\nunket\nunkey\nunkeyed\nunkicked\nunkid\nunkill\nunkillability\nunkillable\nunkilled\nunkilling\nunkilned\nunkin\nunkind\nunkindhearted\nunkindled\nunkindledness\nunkindlily\nunkindliness\nunkindling\nunkindly\nunkindness\nunkindred\nunkindredly\nunking\nunkingdom\nunkinged\nunkinger\nunkinglike\nunkingly\nunkink\nunkinlike\nunkirk\nunkiss\nunkissed\nunkist\nunknave\nunkneaded\nunkneeling\nunknelled\nunknew\nunknight\nunknighted\nunknightlike\nunknit\nunknittable\nunknitted\nunknitting\nunknocked\nunknocking\nunknot\nunknotted\nunknotty\nunknow\nunknowability\nunknowable\nunknowableness\nunknowably\nunknowing\nunknowingly\nunknowingness\nunknowledgeable\nunknown\nunknownly\nunknownness\nunknownst\nunkodaked\nunkoshered\nunlabeled\nunlabialize\nunlabiate\nunlaborable\nunlabored\nunlaboring\nunlaborious\nunlaboriously\nunlaboriousness\nunlace\nunlaced\nunlacerated\nunlackeyed\nunlacquered\nunlade\nunladen\nunladled\nunladyfied\nunladylike\nunlagging\nunlaid\nunlame\nunlamed\nunlamented\nunlampooned\nunlanced\nunland\nunlanded\nunlandmarked\nunlanguaged\nunlanguid\nunlanguishing\nunlanterned\nunlap\nunlapped\nunlapsed\nunlapsing\nunlarded\nunlarge\nunlash\nunlashed\nunlasher\nunlassoed\nunlasting\nunlatch\nunlath\nunlathed\nunlathered\nunlatinized\nunlatticed\nunlaudable\nunlaudableness\nunlaudably\nunlauded\nunlaugh\nunlaughing\nunlaunched\nunlaundered\nunlaureled\nunlaved\nunlaving\nunlavish\nunlavished\nunlaw\nunlawed\nunlawful\nunlawfully\nunlawfulness\nunlawlearned\nunlawlike\nunlawly\nunlawyered\nunlawyerlike\nunlay\nunlayable\nunleached\nunlead\nunleaded\nunleaderly\nunleaf\nunleafed\nunleagued\nunleaguer\nunleakable\nunleaky\nunleal\nunlean\nunleared\nunlearn\nunlearnability\nunlearnable\nunlearnableness\nunlearned\nunlearnedly\nunlearnedness\nunlearning\nunlearnt\nunleasable\nunleased\nunleash\nunleashed\nunleathered\nunleave\nunleaved\nunleavenable\nunleavened\nunlectured\nunled\nunleft\nunlegacied\nunlegal\nunlegalized\nunlegally\nunlegalness\nunlegate\nunlegislative\nunleisured\nunleisuredness\nunleisurely\nunlenient\nunlensed\nunlent\nunless\nunlessened\nunlessoned\nunlet\nunlettable\nunletted\nunlettered\nunletteredly\nunletteredness\nunlettering\nunletterlike\nunlevel\nunleveled\nunlevelly\nunlevelness\nunlevied\nunlevigated\nunlexicographical\nunliability\nunliable\nunlibeled\nunliberal\nunliberalized\nunliberated\nunlibidinous\nunlicensed\nunlicentiated\nunlicentious\nunlichened\nunlickable\nunlicked\nunlid\nunlidded\nunlie\nunlifelike\nunliftable\nunlifted\nunlifting\nunligable\nunligatured\nunlight\nunlighted\nunlightedly\nunlightedness\nunlightened\nunlignified\nunlikable\nunlikableness\nunlikably\nunlike\nunlikeable\nunlikeableness\nunlikeably\nunliked\nunlikelihood\nunlikeliness\nunlikely\nunliken\nunlikeness\nunliking\nunlimb\nunlimber\nunlime\nunlimed\nunlimitable\nunlimitableness\nunlimitably\nunlimited\nunlimitedly\nunlimitedness\nunlimitless\nunlimned\nunlimp\nunline\nunlineal\nunlined\nunlingering\nunlink\nunlinked\nunlionlike\nunliquefiable\nunliquefied\nunliquid\nunliquidatable\nunliquidated\nunliquidating\nunliquidation\nunliquored\nunlisping\nunlist\nunlisted\nunlistened\nunlistening\nunlisty\nunlit\nunliteral\nunliterally\nunliteralness\nunliterary\nunliterate\nunlitigated\nunlitten\nunlittered\nunliturgical\nunliturgize\nunlivable\nunlivableness\nunlivably\nunlive\nunliveable\nunliveableness\nunliveably\nunliveliness\nunlively\nunliveried\nunlivery\nunliving\nunlizardlike\nunload\nunloaded\nunloaden\nunloader\nunloafing\nunloanably\nunloaned\nunloaning\nunloath\nunloathed\nunloathful\nunloathly\nunloathsome\nunlobed\nunlocal\nunlocalizable\nunlocalize\nunlocalized\nunlocally\nunlocated\nunlock\nunlockable\nunlocked\nunlocker\nunlocking\nunlocomotive\nunlodge\nunlodged\nunlofty\nunlogged\nunlogic\nunlogical\nunlogically\nunlogicalness\nunlonely\nunlook\nunlooked\nunloop\nunlooped\nunloosable\nunloosably\nunloose\nunloosen\nunloosening\nunloosing\nunlooted\nunlopped\nunloquacious\nunlord\nunlorded\nunlordly\nunlosable\nunlosableness\nunlost\nunlotted\nunlousy\nunlovable\nunlovableness\nunlovably\nunlove\nunloveable\nunloveableness\nunloveably\nunloved\nunlovelily\nunloveliness\nunlovely\nunloverlike\nunloverly\nunloving\nunlovingly\nunlovingness\nunlowered\nunlowly\nunloyal\nunloyally\nunloyalty\nunlubricated\nunlucent\nunlucid\nunluck\nunluckful\nunluckily\nunluckiness\nunlucky\nunlucrative\nunludicrous\nunluffed\nunlugged\nunlugubrious\nunluminous\nunlumped\nunlunar\nunlured\nunlust\nunlustily\nunlustiness\nunlustrous\nunlusty\nunlute\nunluted\nunluxated\nunluxuriant\nunluxurious\nunlycanthropize\nunlying\nunlyrical\nunlyrically\nunmacadamized\nunmacerated\nunmachinable\nunmackly\nunmad\nunmadded\nunmaddened\nunmade\nunmagic\nunmagical\nunmagisterial\nunmagistratelike\nunmagnanimous\nunmagnetic\nunmagnetical\nunmagnetized\nunmagnified\nunmagnify\nunmaid\nunmaidenlike\nunmaidenliness\nunmaidenly\nunmail\nunmailable\nunmailableness\nunmailed\nunmaimable\nunmaimed\nunmaintainable\nunmaintained\nunmajestic\nunmakable\nunmake\nunmaker\nunmalevolent\nunmalicious\nunmalignant\nunmaligned\nunmalleability\nunmalleable\nunmalleableness\nunmalled\nunmaltable\nunmalted\nunmammalian\nunmammonized\nunman\nunmanacle\nunmanacled\nunmanageable\nunmanageableness\nunmanageably\nunmanaged\nunmancipated\nunmandated\nunmanducated\nunmaned\nunmaneged\nunmanful\nunmanfully\nunmangled\nunmaniable\nunmaniac\nunmaniacal\nunmanicured\nunmanifest\nunmanifested\nunmanipulatable\nunmanipulated\nunmanlike\nunmanlily\nunmanliness\nunmanly\nunmanned\nunmanner\nunmannered\nunmanneredly\nunmannerliness\nunmannerly\nunmannish\nunmanored\nunmantle\nunmantled\nunmanufacturable\nunmanufactured\nunmanumissible\nunmanumitted\nunmanurable\nunmanured\nunmappable\nunmapped\nunmarbled\nunmarch\nunmarching\nunmarginal\nunmarginated\nunmarine\nunmaritime\nunmarkable\nunmarked\nunmarketable\nunmarketed\nunmarled\nunmarred\nunmarriable\nunmarriageability\nunmarriageable\nunmarried\nunmarring\nunmarry\nunmarrying\nunmarshaled\nunmartial\nunmartyr\nunmartyred\nunmarvelous\nunmasculine\nunmashed\nunmask\nunmasked\nunmasker\nunmasking\nunmasquerade\nunmassacred\nunmassed\nunmast\nunmaster\nunmasterable\nunmastered\nunmasterful\nunmasticable\nunmasticated\nunmatchable\nunmatchableness\nunmatchably\nunmatched\nunmatchedness\nunmate\nunmated\nunmaterial\nunmaterialistic\nunmateriate\nunmaternal\nunmathematical\nunmathematically\nunmating\nunmatriculated\nunmatrimonial\nunmatronlike\nunmatted\nunmature\nunmatured\nunmaturely\nunmatureness\nunmaturing\nunmaturity\nunmauled\nunmaze\nunmeaning\nunmeaningly\nunmeaningness\nunmeant\nunmeasurable\nunmeasurableness\nunmeasurably\nunmeasured\nunmeasuredly\nunmeasuredness\nunmeated\nunmechanic\nunmechanical\nunmechanically\nunmechanistic\nunmechanize\nunmechanized\nunmedaled\nunmedalled\nunmeddle\nunmeddled\nunmeddlesome\nunmeddling\nunmeddlingly\nunmeddlingness\nunmediaeval\nunmediated\nunmediatized\nunmedicable\nunmedical\nunmedicated\nunmedicative\nunmedicinable\nunmedicinal\nunmeditated\nunmeditative\nunmediumistic\nunmedullated\nunmeek\nunmeekly\nunmeekness\nunmeet\nunmeetable\nunmeetly\nunmeetness\nunmelancholy\nunmeliorated\nunmellow\nunmellowed\nunmelodic\nunmelodious\nunmelodiously\nunmelodiousness\nunmelodized\nunmelodramatic\nunmeltable\nunmeltableness\nunmeltably\nunmelted\nunmeltedness\nunmelting\nunmember\nunmemoired\nunmemorable\nunmemorialized\nunmemoried\nunmemorized\nunmenaced\nunmenacing\nunmendable\nunmendableness\nunmendably\nunmendacious\nunmended\nunmenial\nunmenseful\nunmenstruating\nunmensurable\nunmental\nunmentionability\nunmentionable\nunmentionableness\nunmentionables\nunmentionably\nunmentioned\nunmercantile\nunmercenariness\nunmercenary\nunmercerized\nunmerchantable\nunmerchantlike\nunmerchantly\nunmerciful\nunmercifully\nunmercifulness\nunmercurial\nunmeretricious\nunmerge\nunmerged\nunmeridional\nunmerited\nunmeritedly\nunmeritedness\nunmeriting\nunmeritorious\nunmeritoriously\nunmeritoriousness\nunmerry\nunmesh\nunmesmeric\nunmesmerize\nunmesmerized\nunmet\nunmetaled\nunmetalized\nunmetalled\nunmetallic\nunmetallurgical\nunmetamorphosed\nunmetaphorical\nunmetaphysic\nunmetaphysical\nunmeted\nunmeteorological\nunmetered\nunmethodical\nunmethodically\nunmethodicalness\nunmethodized\nunmethodizing\nunmethylated\nunmeticulous\nunmetric\nunmetrical\nunmetrically\nunmetricalness\nunmetropolitan\nunmettle\nunmew\nunmewed\nunmicaceous\nunmicrobic\nunmicroscopic\nunmidwifed\nunmighty\nunmigrating\nunmildewed\nunmilitant\nunmilitarily\nunmilitariness\nunmilitaristic\nunmilitarized\nunmilitary\nunmilked\nunmilled\nunmillinered\nunmilted\nunmimicked\nunminable\nunminced\nunmincing\nunmind\nunminded\nunmindful\nunmindfully\nunmindfulness\nunminding\nunmined\nunmineralized\nunmingle\nunmingleable\nunmingled\nunmingling\nunminimized\nunminished\nunminister\nunministered\nunministerial\nunministerially\nunminted\nunminuted\nunmiracled\nunmiraculous\nunmiraculously\nunmired\nunmirrored\nunmirthful\nunmirthfully\nunmirthfulness\nunmiry\nunmisanthropic\nunmiscarrying\nunmischievous\nunmiscible\nunmisconceivable\nunmiserly\nunmisgiving\nunmisgivingly\nunmisguided\nunmisinterpretable\nunmisled\nunmissable\nunmissed\nunmissionary\nunmissionized\nunmist\nunmistakable\nunmistakableness\nunmistakably\nunmistakedly\nunmistaken\nunmistakingly\nunmistressed\nunmistrusted\nunmistrustful\nunmistrusting\nunmisunderstandable\nunmisunderstanding\nunmisunderstood\nunmiter\nunmitigable\nunmitigated\nunmitigatedly\nunmitigatedness\nunmitigative\nunmittened\nunmix\nunmixable\nunmixableness\nunmixed\nunmixedly\nunmixedness\nunmoaned\nunmoated\nunmobbed\nunmobilized\nunmocked\nunmocking\nunmockingly\nunmodel\nunmodeled\nunmodelled\nunmoderate\nunmoderately\nunmoderateness\nunmoderating\nunmodern\nunmodernity\nunmodernize\nunmodernized\nunmodest\nunmodifiable\nunmodifiableness\nunmodifiably\nunmodified\nunmodifiedness\nunmodish\nunmodulated\nunmoiled\nunmoist\nunmoisten\nunmold\nunmoldable\nunmolded\nunmoldered\nunmoldering\nunmoldy\nunmolested\nunmolestedly\nunmolesting\nunmollifiable\nunmollifiably\nunmollified\nunmollifying\nunmolten\nunmomentary\nunmomentous\nunmomentously\nunmonarch\nunmonarchical\nunmonastic\nunmonetary\nunmoneyed\nunmonistic\nunmonitored\nunmonkish\nunmonkly\nunmonopolize\nunmonopolized\nunmonopolizing\nunmonotonous\nunmonumented\nunmoor\nunmoored\nunmooted\nunmopped\nunmoral\nunmoralist\nunmorality\nunmoralize\nunmoralized\nunmoralizing\nunmorally\nunmoralness\nunmorbid\nunmordanted\nunmoribund\nunmorose\nunmorphological\nunmortal\nunmortared\nunmortgage\nunmortgageable\nunmortgaged\nunmortified\nunmortifiedly\nunmortifiedness\nunmortise\nunmortised\nunmossed\nunmothered\nunmotherly\nunmotionable\nunmotivated\nunmotivatedly\nunmotivatedness\nunmotived\nunmotorized\nunmottled\nunmounded\nunmount\nunmountable\nunmountainous\nunmounted\nunmounting\nunmourned\nunmournful\nunmourning\nunmouthable\nunmouthed\nunmouthpieced\nunmovability\nunmovable\nunmovableness\nunmovably\nunmoved\nunmovedly\nunmoving\nunmovingly\nunmovingness\nunmowed\nunmown\nunmucilaged\nunmudded\nunmuddied\nunmuddle\nunmuddled\nunmuddy\nunmuffle\nunmuffled\nunmulcted\nunmulish\nunmulled\nunmullioned\nunmultipliable\nunmultiplied\nunmultipliedly\nunmultiply\nunmummied\nunmummify\nunmunched\nunmundane\nunmundified\nunmunicipalized\nunmunificent\nunmunitioned\nunmurmured\nunmurmuring\nunmurmuringly\nunmurmurous\nunmuscled\nunmuscular\nunmusical\nunmusicality\nunmusically\nunmusicalness\nunmusicianly\nunmusked\nunmussed\nunmusted\nunmusterable\nunmustered\nunmutated\nunmutation\nunmuted\nunmutilated\nunmutinous\nunmuttered\nunmutual\nunmutualized\nunmuzzle\nunmuzzled\nunmuzzling\nunmyelinated\nunmysterious\nunmysteriously\nunmystery\nunmystical\nunmysticize\nunmystified\nunmythical\nunnabbed\nunnagged\nunnagging\nunnail\nunnailed\nunnaked\nunnamability\nunnamable\nunnamableness\nunnamably\nunname\nunnameability\nunnameable\nunnameableness\nunnameably\nunnamed\nunnapkined\nunnapped\nunnarcotic\nunnarrated\nunnarrow\nunnation\nunnational\nunnationalized\nunnative\nunnatural\nunnaturalism\nunnaturalist\nunnaturalistic\nunnaturality\nunnaturalizable\nunnaturalize\nunnaturalized\nunnaturally\nunnaturalness\nunnature\nunnautical\nunnavigability\nunnavigable\nunnavigableness\nunnavigably\nunnavigated\nunneaped\nunnearable\nunneared\nunnearly\nunnearness\nunneat\nunneatly\nunneatness\nunnebulous\nunnecessarily\nunnecessariness\nunnecessary\nunnecessitated\nunnecessitating\nunnecessity\nunneeded\nunneedful\nunneedfully\nunneedfulness\nunneedy\nunnefarious\nunnegated\nunneglected\nunnegligent\nunnegotiable\nunnegotiableness\nunnegotiably\nunnegotiated\nunnegro\nunneighbored\nunneighborlike\nunneighborliness\nunneighborly\nunnephritic\nunnerve\nunnerved\nunnervous\nunnest\nunnestle\nunnestled\nunneth\nunnethe\nunnethes\nunnethis\nunnetted\nunnettled\nunneurotic\nunneutral\nunneutralized\nunneutrally\nunnew\nunnewly\nunnewness\nunnibbed\nunnibbied\nunnice\nunnicely\nunniceness\nunniched\nunnicked\nunnickeled\nunnickelled\nunnicknamed\nunniggard\nunniggardly\nunnigh\nunnimbed\nunnimble\nunnimbleness\nunnimbly\nunnipped\nunnitrogenized\nunnobilitated\nunnobility\nunnoble\nunnobleness\nunnobly\nunnoised\nunnomadic\nunnominated\nunnonsensical\nunnoosed\nunnormal\nunnorthern\nunnose\nunnosed\nunnotable\nunnotched\nunnoted\nunnoteworthy\nunnoticeable\nunnoticeableness\nunnoticeably\nunnoticed\nunnoticing\nunnotified\nunnotify\nunnoting\nunnourishable\nunnourished\nunnourishing\nunnovel\nunnovercal\nunnucleated\nunnullified\nunnumberable\nunnumberableness\nunnumberably\nunnumbered\nunnumberedness\nunnumerical\nunnumerous\nunnurtured\nunnutritious\nunnutritive\nunnuzzled\nunnymphlike\nunoared\nunobdurate\nunobedience\nunobedient\nunobediently\nunobese\nunobeyed\nunobeying\nunobjected\nunobjectionable\nunobjectionableness\nunobjectionably\nunobjectional\nunobjective\nunobligated\nunobligatory\nunobliged\nunobliging\nunobligingly\nunobligingness\nunobliterable\nunobliterated\nunoblivious\nunobnoxious\nunobscene\nunobscure\nunobscured\nunobsequious\nunobsequiously\nunobsequiousness\nunobservable\nunobservance\nunobservant\nunobservantly\nunobservantness\nunobserved\nunobservedly\nunobserving\nunobservingly\nunobsessed\nunobsolete\nunobstinate\nunobstruct\nunobstructed\nunobstructedly\nunobstructedness\nunobstructive\nunobstruent\nunobtainable\nunobtainableness\nunobtainably\nunobtained\nunobtruded\nunobtruding\nunobtrusive\nunobtrusively\nunobtrusiveness\nunobtunded\nunobumbrated\nunobverted\nunobviated\nunobvious\nunoccasional\nunoccasioned\nunoccidental\nunoccluded\nunoccupancy\nunoccupation\nunoccupied\nunoccupiedly\nunoccupiedness\nunoccurring\nunoceanic\nunocular\nunode\nunodious\nunodoriferous\nunoecumenic\nunoecumenical\nunoffendable\nunoffended\nunoffendedly\nunoffender\nunoffending\nunoffendingly\nunoffensive\nunoffensively\nunoffensiveness\nunoffered\nunofficed\nunofficered\nunofficerlike\nunofficial\nunofficialdom\nunofficially\nunofficialness\nunofficiating\nunofficinal\nunofficious\nunofficiously\nunofficiousness\nunoffset\nunoften\nunogled\nunoil\nunoiled\nunoiling\nunoily\nunold\nunomened\nunominous\nunomitted\nunomnipotent\nunomniscient\nUnona\nunonerous\nunontological\nunopaque\nunoped\nunopen\nunopenable\nunopened\nunopening\nunopenly\nunopenness\nunoperably\nunoperated\nunoperatic\nunoperating\nunoperative\nunoperculate\nunoperculated\nunopined\nunopinionated\nunoppignorated\nunopportune\nunopportunely\nunopportuneness\nunopposable\nunopposed\nunopposedly\nunopposedness\nunopposite\nunoppressed\nunoppressive\nunoppressively\nunoppressiveness\nunopprobrious\nunoppugned\nunopulence\nunopulent\nunoratorial\nunoratorical\nunorbed\nunorbital\nunorchestrated\nunordain\nunordainable\nunordained\nunorder\nunorderable\nunordered\nunorderly\nunordinarily\nunordinariness\nunordinary\nunordinate\nunordinately\nunordinateness\nunordnanced\nunorganic\nunorganical\nunorganically\nunorganicalness\nunorganizable\nunorganized\nunorganizedly\nunorganizedness\nunoriental\nunorientalness\nunoriented\nunoriginal\nunoriginality\nunoriginally\nunoriginalness\nunoriginate\nunoriginated\nunoriginatedness\nunoriginately\nunoriginateness\nunorigination\nunoriginative\nunoriginatively\nunoriginativeness\nunorn\nunornamental\nunornamentally\nunornamentalness\nunornamented\nunornate\nunornithological\nunornly\nunorphaned\nunorthodox\nunorthodoxically\nunorthodoxly\nunorthodoxness\nunorthodoxy\nunorthographical\nunorthographically\nunoscillating\nunosculated\nunossified\nunostensible\nunostentation\nunostentatious\nunostentatiously\nunostentatiousness\nunoutgrown\nunoutlawed\nunoutraged\nunoutspeakable\nunoutspoken\nunoutworn\nunoverclouded\nunovercome\nunoverdone\nunoverdrawn\nunoverflowing\nunoverhauled\nunoverleaped\nunoverlooked\nunoverpaid\nunoverpowered\nunoverruled\nunovert\nunovertaken\nunoverthrown\nunovervalued\nunoverwhelmed\nunowed\nunowing\nunown\nunowned\nunoxidable\nunoxidated\nunoxidizable\nunoxidized\nunoxygenated\nunoxygenized\nunpacable\nunpaced\nunpacifiable\nunpacific\nunpacified\nunpacifiedly\nunpacifiedness\nunpacifist\nunpack\nunpacked\nunpacker\nunpadded\nunpadlocked\nunpagan\nunpaganize\nunpaged\nunpaginal\nunpaid\nunpained\nunpainful\nunpaining\nunpainstaking\nunpaint\nunpaintability\nunpaintable\nunpaintableness\nunpaintably\nunpainted\nunpaintedly\nunpaintedness\nunpaired\nunpalatability\nunpalatable\nunpalatableness\nunpalatably\nunpalatal\nunpalatial\nunpale\nunpaled\nunpalisaded\nunpalisadoed\nunpalled\nunpalliable\nunpalliated\nunpalpable\nunpalped\nunpalpitating\nunpalsied\nunpampered\nunpanegyrized\nunpanel\nunpaneled\nunpanelled\nunpanged\nunpanniered\nunpanoplied\nunpantheistic\nunpanting\nunpapal\nunpapaverous\nunpaper\nunpapered\nunparaded\nunparadise\nunparadox\nunparagoned\nunparagonized\nunparagraphed\nunparallel\nunparallelable\nunparalleled\nunparalleledly\nunparalleledness\nunparallelness\nunparalyzed\nunparaphrased\nunparasitical\nunparcel\nunparceled\nunparceling\nunparcelled\nunparcelling\nunparch\nunparched\nunparching\nunpardon\nunpardonable\nunpardonableness\nunpardonably\nunpardoned\nunpardonedness\nunpardoning\nunpared\nunparented\nunparfit\nunpargeted\nunpark\nunparked\nunparking\nunparliamentary\nunparliamented\nunparodied\nunparrel\nunparriable\nunparried\nunparroted\nunparrying\nunparsed\nunparsimonious\nunparsonic\nunparsonical\nunpartable\nunpartableness\nunpartably\nunpartaken\nunpartaking\nunparted\nunpartial\nunpartiality\nunpartially\nunpartialness\nunparticipant\nunparticipated\nunparticipating\nunparticipative\nunparticular\nunparticularized\nunparticularizing\nunpartisan\nunpartitioned\nunpartizan\nunpartnered\nunpartook\nunparty\nunpass\nunpassable\nunpassableness\nunpassably\nunpassed\nunpassing\nunpassionate\nunpassionately\nunpassionateness\nunpassioned\nunpassive\nunpaste\nunpasted\nunpasteurized\nunpasting\nunpastor\nunpastoral\nunpastured\nunpatched\nunpatent\nunpatentable\nunpatented\nunpaternal\nunpathed\nunpathetic\nunpathwayed\nunpatient\nunpatiently\nunpatientness\nunpatriarchal\nunpatrician\nunpatriotic\nunpatriotically\nunpatriotism\nunpatristic\nunpatrolled\nunpatronizable\nunpatronized\nunpatronizing\nunpatted\nunpatterned\nunpaunch\nunpaunched\nunpauperized\nunpausing\nunpausingly\nunpave\nunpaved\nunpavilioned\nunpaving\nunpawed\nunpawn\nunpawned\nunpayable\nunpayableness\nunpayably\nunpaying\nunpayment\nunpeace\nunpeaceable\nunpeaceableness\nunpeaceably\nunpeaceful\nunpeacefully\nunpeacefulness\nunpealed\nunpearled\nunpebbled\nunpeccable\nunpecked\nunpecuniarily\nunpedagogical\nunpedantic\nunpeddled\nunpedestal\nunpedigreed\nunpeel\nunpeelable\nunpeelableness\nunpeeled\nunpeerable\nunpeered\nunpeg\nunpejorative\nunpelagic\nunpelted\nunpen\nunpenal\nunpenalized\nunpenanced\nunpenciled\nunpencilled\nunpenetrable\nunpenetrated\nunpenetrating\nunpenitent\nunpenitently\nunpenitentness\nunpenned\nunpennied\nunpennoned\nunpensionable\nunpensionableness\nunpensioned\nunpensioning\nunpent\nunpenurious\nunpeople\nunpeopled\nunpeopling\nunperceived\nunperceivedly\nunperceptible\nunperceptibly\nunperceptive\nunperch\nunperched\nunpercipient\nunpercolated\nunpercussed\nunperfect\nunperfected\nunperfectedly\nunperfectedness\nunperfectly\nunperfectness\nunperfidious\nunperflated\nunperforate\nunperforated\nunperformable\nunperformance\nunperformed\nunperforming\nunperfumed\nunperilous\nunperiodic\nunperiodical\nunperiphrased\nunperishable\nunperishableness\nunperishably\nunperished\nunperishing\nunperjured\nunpermanency\nunpermanent\nunpermanently\nunpermeable\nunpermeated\nunpermissible\nunpermissive\nunpermitted\nunpermitting\nunpermixed\nunpernicious\nunperpendicular\nunperpetrated\nunperpetuated\nunperplex\nunperplexed\nunperplexing\nunpersecuted\nunpersecutive\nunperseverance\nunpersevering\nunperseveringly\nunperseveringness\nunpersonable\nunpersonableness\nunpersonal\nunpersonality\nunpersonified\nunpersonify\nunperspicuous\nunperspirable\nunperspiring\nunpersuadable\nunpersuadableness\nunpersuadably\nunpersuaded\nunpersuadedness\nunpersuasibleness\nunpersuasion\nunpersuasive\nunpersuasively\nunpersuasiveness\nunpertaining\nunpertinent\nunpertinently\nunperturbed\nunperturbedly\nunperturbedness\nunperuked\nunperused\nunpervaded\nunperverse\nunpervert\nunperverted\nunpervious\nunpessimistic\nunpestered\nunpestilential\nunpetal\nunpetitioned\nunpetrified\nunpetrify\nunpetticoated\nunpetulant\nunpharasaic\nunpharasaical\nunphased\nunphenomenal\nunphilanthropic\nunphilanthropically\nunphilological\nunphilosophic\nunphilosophically\nunphilosophicalness\nunphilosophize\nunphilosophized\nunphilosophy\nunphlegmatic\nunphonetic\nunphoneticness\nunphonographed\nunphosphatized\nunphotographed\nunphrasable\nunphrasableness\nunphrased\nunphrenological\nunphysical\nunphysically\nunphysicianlike\nunphysicked\nunphysiological\nunpicaresque\nunpick\nunpickable\nunpicked\nunpicketed\nunpickled\nunpictorial\nunpictorially\nunpicturability\nunpicturable\nunpictured\nunpicturesque\nunpicturesquely\nunpicturesqueness\nunpiece\nunpieced\nunpierceable\nunpierced\nunpiercing\nunpiety\nunpigmented\nunpile\nunpiled\nunpilfered\nunpilgrimlike\nunpillaged\nunpillared\nunpilled\nunpilloried\nunpillowed\nunpiloted\nunpimpled\nunpin\nunpinched\nunpining\nunpinion\nunpinioned\nunpinked\nunpinned\nunpious\nunpiped\nunpiqued\nunpirated\nunpitched\nunpiteous\nunpiteously\nunpiteousness\nunpitiable\nunpitiably\nunpitied\nunpitiedly\nunpitiedness\nunpitiful\nunpitifully\nunpitifulness\nunpitted\nunpitying\nunpityingly\nunpityingness\nunplacable\nunplacably\nunplacated\nunplace\nunplaced\nunplacid\nunplagiarized\nunplagued\nunplaid\nunplain\nunplained\nunplainly\nunplainness\nunplait\nunplaited\nunplan\nunplaned\nunplanished\nunplank\nunplanked\nunplanned\nunplannedly\nunplannedness\nunplant\nunplantable\nunplanted\nunplantlike\nunplashed\nunplaster\nunplastered\nunplastic\nunplat\nunplated\nunplatted\nunplausible\nunplausibleness\nunplausibly\nunplayable\nunplayed\nunplayful\nunplaying\nunpleached\nunpleadable\nunpleaded\nunpleading\nunpleasable\nunpleasant\nunpleasantish\nunpleasantly\nunpleasantness\nunpleasantry\nunpleased\nunpleasing\nunpleasingly\nunpleasingness\nunpleasurable\nunpleasurably\nunpleasure\nunpleat\nunpleated\nunplebeian\nunpledged\nunplenished\nunplenteous\nunplentiful\nunplentifulness\nunpliable\nunpliableness\nunpliably\nunpliancy\nunpliant\nunpliantly\nunplied\nunplighted\nunplodding\nunplotted\nunplotting\nunplough\nunploughed\nunplow\nunplowed\nunplucked\nunplug\nunplugged\nunplugging\nunplumb\nunplumbed\nunplume\nunplumed\nunplummeted\nunplump\nunplundered\nunplunge\nunplunged\nunplutocratic\nunplutocratically\nunpoached\nunpocket\nunpocketed\nunpodded\nunpoetic\nunpoetically\nunpoeticalness\nunpoeticized\nunpoetize\nunpoetized\nunpoignard\nunpointed\nunpointing\nunpoise\nunpoised\nunpoison\nunpoisonable\nunpoisoned\nunpoisonous\nunpolarizable\nunpolarized\nunpoled\nunpolemical\nunpolemically\nunpoliced\nunpolicied\nunpolish\nunpolishable\nunpolished\nunpolishedness\nunpolite\nunpolitely\nunpoliteness\nunpolitic\nunpolitical\nunpolitically\nunpoliticly\nunpollarded\nunpolled\nunpollutable\nunpolluted\nunpollutedly\nunpolluting\nunpolymerized\nunpompous\nunpondered\nunpontifical\nunpooled\nunpope\nunpopular\nunpopularity\nunpopularize\nunpopularly\nunpopularness\nunpopulate\nunpopulated\nunpopulous\nunpopulousness\nunporous\nunportable\nunportended\nunportentous\nunportioned\nunportly\nunportmanteaued\nunportraited\nunportrayable\nunportrayed\nunportuous\nunposed\nunposing\nunpositive\nunpossessable\nunpossessed\nunpossessedness\nunpossessing\nunpossibility\nunpossible\nunpossibleness\nunpossibly\nunposted\nunpostered\nunposthumous\nunpostmarked\nunpostponable\nunpostponed\nunpostulated\nunpot\nunpotted\nunpouched\nunpoulticed\nunpounced\nunpounded\nunpoured\nunpowdered\nunpower\nunpowerful\nunpowerfulness\nunpracticability\nunpracticable\nunpracticableness\nunpracticably\nunpractical\nunpracticality\nunpractically\nunpracticalness\nunpractice\nunpracticed\nunpragmatical\nunpraisable\nunpraise\nunpraised\nunpraiseful\nunpraiseworthy\nunpranked\nunpray\nunprayable\nunprayed\nunprayerful\nunpraying\nunpreach\nunpreached\nunpreaching\nunprecarious\nunprecautioned\nunpreceded\nunprecedented\nunprecedentedly\nunprecedentedness\nunprecedential\nunprecedently\nunprecious\nunprecipitate\nunprecipitated\nunprecise\nunprecisely\nunpreciseness\nunprecluded\nunprecludible\nunprecocious\nunpredacious\nunpredestinated\nunpredestined\nunpredicable\nunpredicated\nunpredict\nunpredictable\nunpredictableness\nunpredictably\nunpredicted\nunpredictedness\nunpredicting\nunpredisposed\nunpredisposing\nunpreened\nunprefaced\nunpreferable\nunpreferred\nunprefigured\nunprefined\nunprefixed\nunpregnant\nunprejudged\nunprejudicated\nunprejudice\nunprejudiced\nunprejudicedly\nunprejudicedness\nunprejudiciable\nunprejudicial\nunprejudicially\nunprejudicialness\nunprelatic\nunprelatical\nunpreluded\nunpremature\nunpremeditate\nunpremeditated\nunpremeditatedly\nunpremeditatedness\nunpremeditately\nunpremeditation\nunpremonished\nunpremonstrated\nunprenominated\nunprenticed\nunpreoccupied\nunpreordained\nunpreparation\nunprepare\nunprepared\nunpreparedly\nunpreparedness\nunpreparing\nunpreponderated\nunpreponderating\nunprepossessedly\nunprepossessing\nunprepossessingly\nunprepossessingness\nunpreposterous\nunpresaged\nunpresageful\nunpresaging\nunpresbyterated\nunprescient\nunprescinded\nunprescribed\nunpresentability\nunpresentable\nunpresentableness\nunpresentably\nunpresented\nunpreservable\nunpreserved\nunpresidential\nunpresiding\nunpressed\nunpresumable\nunpresumed\nunpresuming\nunpresumingness\nunpresumptuous\nunpresumptuously\nunpresupposed\nunpretended\nunpretending\nunpretendingly\nunpretendingness\nunpretentious\nunpretentiously\nunpretentiousness\nunpretermitted\nunpreternatural\nunprettiness\nunpretty\nunprevailing\nunprevalent\nunprevaricating\nunpreventable\nunpreventableness\nunpreventably\nunprevented\nunpreventible\nunpreventive\nunpriceably\nunpriced\nunpricked\nunprickled\nunprickly\nunpriest\nunpriestlike\nunpriestly\nunpriggish\nunprim\nunprime\nunprimed\nunprimitive\nunprimmed\nunprince\nunprincelike\nunprinceliness\nunprincely\nunprincess\nunprincipal\nunprinciple\nunprincipled\nunprincipledly\nunprincipledness\nunprint\nunprintable\nunprintableness\nunprintably\nunprinted\nunpriority\nunprismatic\nunprison\nunprisonable\nunprisoned\nunprivate\nunprivileged\nunprizable\nunprized\nunprobated\nunprobationary\nunprobed\nunprobity\nunproblematic\nunproblematical\nunprocessed\nunproclaimed\nunprocrastinated\nunprocreant\nunprocreated\nunproctored\nunprocurable\nunprocurableness\nunprocure\nunprocured\nunproded\nunproduceable\nunproduceableness\nunproduceably\nunproduced\nunproducedness\nunproducible\nunproducibleness\nunproducibly\nunproductive\nunproductively\nunproductiveness\nunproductivity\nunprofanable\nunprofane\nunprofaned\nunprofessed\nunprofessing\nunprofessional\nunprofessionalism\nunprofessionally\nunprofessorial\nunproffered\nunproficiency\nunproficient\nunproficiently\nunprofit\nunprofitable\nunprofitableness\nunprofitably\nunprofited\nunprofiteering\nunprofiting\nunprofound\nunprofuse\nunprofusely\nunprofuseness\nunprognosticated\nunprogressed\nunprogressive\nunprogressively\nunprogressiveness\nunprohibited\nunprohibitedness\nunprohibitive\nunprojected\nunprojecting\nunproliferous\nunprolific\nunprolix\nunprologued\nunprolonged\nunpromiscuous\nunpromise\nunpromised\nunpromising\nunpromisingly\nunpromisingness\nunpromotable\nunpromoted\nunprompted\nunpromptly\nunpromulgated\nunpronounce\nunpronounceable\nunpronounced\nunpronouncing\nunproofread\nunprop\nunpropagated\nunpropelled\nunpropense\nunproper\nunproperly\nunproperness\nunpropertied\nunprophesiable\nunprophesied\nunprophetic\nunprophetical\nunprophetically\nunprophetlike\nunpropitiable\nunpropitiated\nunpropitiatedness\nunpropitiatory\nunpropitious\nunpropitiously\nunpropitiousness\nunproportion\nunproportionable\nunproportionableness\nunproportionably\nunproportional\nunproportionality\nunproportionally\nunproportionate\nunproportionately\nunproportionateness\nunproportioned\nunproportionedly\nunproportionedness\nunproposed\nunproposing\nunpropounded\nunpropped\nunpropriety\nunprorogued\nunprosaic\nunproscribable\nunproscribed\nunprosecutable\nunprosecuted\nunprosecuting\nunproselyte\nunproselyted\nunprosodic\nunprospected\nunprospective\nunprosperably\nunprospered\nunprosperity\nunprosperous\nunprosperously\nunprosperousness\nunprostitute\nunprostituted\nunprostrated\nunprotectable\nunprotected\nunprotectedly\nunprotectedness\nunprotective\nunprotestant\nunprotestantize\nunprotested\nunprotesting\nunprotruded\nunprotruding\nunprotrusive\nunproud\nunprovability\nunprovable\nunprovableness\nunprovably\nunproved\nunprovedness\nunproven\nunproverbial\nunprovidable\nunprovide\nunprovided\nunprovidedly\nunprovidedness\nunprovidenced\nunprovident\nunprovidential\nunprovidently\nunprovincial\nunproving\nunprovision\nunprovisioned\nunprovocative\nunprovokable\nunprovoke\nunprovoked\nunprovokedly\nunprovokedness\nunprovoking\nunproximity\nunprudence\nunprudent\nunprudently\nunpruned\nunprying\nunpsychic\nunpsychological\nunpublic\nunpublicity\nunpublishable\nunpublishableness\nunpublishably\nunpublished\nunpucker\nunpuckered\nunpuddled\nunpuffed\nunpuffing\nunpugilistic\nunpugnacious\nunpulled\nunpulleyed\nunpulped\nunpulverable\nunpulverize\nunpulverized\nunpulvinate\nunpulvinated\nunpumicated\nunpummeled\nunpummelled\nunpumpable\nunpumped\nunpunched\nunpunctated\nunpunctilious\nunpunctual\nunpunctuality\nunpunctually\nunpunctuated\nunpunctuating\nunpunishable\nunpunishably\nunpunished\nunpunishedly\nunpunishedness\nunpunishing\nunpunishingly\nunpurchasable\nunpurchased\nunpure\nunpurely\nunpureness\nunpurgeable\nunpurged\nunpurifiable\nunpurified\nunpurifying\nunpuritan\nunpurled\nunpurloined\nunpurpled\nunpurported\nunpurposed\nunpurposelike\nunpurposely\nunpurposing\nunpurse\nunpursed\nunpursuable\nunpursued\nunpursuing\nunpurveyed\nunpushed\nunput\nunputrefiable\nunputrefied\nunputrid\nunputtied\nunpuzzle\nunquadded\nunquaffed\nunquailed\nunquailing\nunquailingly\nunquakerlike\nunquakerly\nunquaking\nunqualifiable\nunqualification\nunqualified\nunqualifiedly\nunqualifiedness\nunqualify\nunqualifying\nunqualifyingly\nunqualitied\nunquality\nunquantified\nunquantitative\nunquarantined\nunquarreled\nunquarreling\nunquarrelled\nunquarrelling\nunquarrelsome\nunquarried\nunquartered\nunquashed\nunquayed\nunqueen\nunqueened\nunqueening\nunqueenlike\nunqueenly\nunquellable\nunquelled\nunquenchable\nunquenchableness\nunquenchably\nunquenched\nunqueried\nunquested\nunquestionability\nunquestionable\nunquestionableness\nunquestionably\nunquestionate\nunquestioned\nunquestionedly\nunquestionedness\nunquestioning\nunquestioningly\nunquestioningness\nunquibbled\nunquibbling\nunquick\nunquickened\nunquickly\nunquicksilvered\nunquiescence\nunquiescent\nunquiescently\nunquiet\nunquietable\nunquieted\nunquieting\nunquietly\nunquietness\nunquietude\nunquilleted\nunquilted\nunquit\nunquittable\nunquitted\nunquivered\nunquivering\nunquizzable\nunquizzed\nunquotable\nunquote\nunquoted\nunrabbeted\nunrabbinical\nunraced\nunrack\nunracked\nunracking\nunradiated\nunradical\nunradicalize\nunraffled\nunraftered\nunraided\nunrailed\nunrailroaded\nunrailwayed\nunrainy\nunraised\nunrake\nunraked\nunraking\nunrallied\nunram\nunrambling\nunramified\nunrammed\nunramped\nunranched\nunrancid\nunrancored\nunrandom\nunrank\nunranked\nunransacked\nunransomable\nunransomed\nunrapacious\nunraped\nunraptured\nunrare\nunrarefied\nunrash\nunrasped\nunratable\nunrated\nunratified\nunrational\nunrattled\nunravaged\nunravel\nunravelable\nunraveled\nunraveler\nunraveling\nunravellable\nunravelled\nunraveller\nunravelling\nunravelment\nunraving\nunravished\nunravishing\nunray\nunrayed\nunrazed\nunrazored\nunreachable\nunreachably\nunreached\nunreactive\nunread\nunreadability\nunreadable\nunreadableness\nunreadably\nunreadily\nunreadiness\nunready\nunreal\nunrealism\nunrealist\nunrealistic\nunreality\nunrealizable\nunrealize\nunrealized\nunrealizing\nunreally\nunrealmed\nunrealness\nunreaped\nunreared\nunreason\nunreasonability\nunreasonable\nunreasonableness\nunreasonably\nunreasoned\nunreasoning\nunreasoningly\nunreassuring\nunreassuringly\nunreave\nunreaving\nunrebated\nunrebel\nunrebellious\nunrebuffable\nunrebuffably\nunrebuilt\nunrebukable\nunrebukably\nunrebuked\nunrebuttable\nunrebuttableness\nunrebutted\nunrecallable\nunrecallably\nunrecalled\nunrecalling\nunrecantable\nunrecanted\nunrecaptured\nunreceding\nunreceipted\nunreceivable\nunreceived\nunreceiving\nunrecent\nunreceptant\nunreceptive\nunreceptivity\nunreciprocal\nunreciprocated\nunrecited\nunrecked\nunrecking\nunreckingness\nunreckon\nunreckonable\nunreckoned\nunreclaimable\nunreclaimably\nunreclaimed\nunreclaimedness\nunreclaiming\nunreclined\nunreclining\nunrecognition\nunrecognizable\nunrecognizableness\nunrecognizably\nunrecognized\nunrecognizing\nunrecognizingly\nunrecoined\nunrecollected\nunrecommendable\nunrecompensable\nunrecompensed\nunreconcilable\nunreconcilableness\nunreconcilably\nunreconciled\nunrecondite\nunreconnoitered\nunreconsidered\nunreconstructed\nunrecordable\nunrecorded\nunrecordedness\nunrecording\nunrecountable\nunrecounted\nunrecoverable\nunrecoverableness\nunrecoverably\nunrecovered\nunrecreant\nunrecreated\nunrecreating\nunrecriminative\nunrecruitable\nunrecruited\nunrectangular\nunrectifiable\nunrectifiably\nunrectified\nunrecumbent\nunrecuperated\nunrecurrent\nunrecurring\nunrecusant\nunred\nunredacted\nunredeemable\nunredeemableness\nunredeemably\nunredeemed\nunredeemedly\nunredeemedness\nunredeeming\nunredressable\nunredressed\nunreduceable\nunreduced\nunreducible\nunreducibleness\nunreducibly\nunreduct\nunreefed\nunreel\nunreelable\nunreeled\nunreeling\nunreeve\nunreeving\nunreferenced\nunreferred\nunrefilled\nunrefine\nunrefined\nunrefinedly\nunrefinedness\nunrefinement\nunrefining\nunrefitted\nunreflected\nunreflecting\nunreflectingly\nunreflectingness\nunreflective\nunreflectively\nunreformable\nunreformed\nunreformedness\nunreforming\nunrefracted\nunrefracting\nunrefrainable\nunrefrained\nunrefraining\nunrefreshed\nunrefreshful\nunrefreshing\nunrefreshingly\nunrefrigerated\nunrefulgent\nunrefunded\nunrefunding\nunrefusable\nunrefusably\nunrefused\nunrefusing\nunrefusingly\nunrefutable\nunrefuted\nunrefuting\nunregainable\nunregained\nunregal\nunregaled\nunregality\nunregally\nunregard\nunregardable\nunregardant\nunregarded\nunregardedly\nunregardful\nunregeneracy\nunregenerate\nunregenerately\nunregenerateness\nunregenerating\nunregeneration\nunregimented\nunregistered\nunregressive\nunregretful\nunregretfully\nunregretfulness\nunregrettable\nunregretted\nunregretting\nunregular\nunregulated\nunregulative\nunregurgitated\nunrehabilitated\nunrehearsable\nunrehearsed\nunrehearsing\nunreigning\nunreimbodied\nunrein\nunreined\nunreinstated\nunreiterable\nunreiterated\nunrejectable\nunrejoiced\nunrejoicing\nunrejuvenated\nunrelapsing\nunrelated\nunrelatedness\nunrelating\nunrelational\nunrelative\nunrelatively\nunrelaxable\nunrelaxed\nunrelaxing\nunrelaxingly\nunreleasable\nunreleased\nunreleasing\nunrelegated\nunrelentance\nunrelented\nunrelenting\nunrelentingly\nunrelentingness\nunrelentor\nunrelevant\nunreliability\nunreliable\nunreliableness\nunreliably\nunreliance\nunrelievable\nunrelievableness\nunrelieved\nunrelievedly\nunreligion\nunreligioned\nunreligious\nunreligiously\nunreligiousness\nunrelinquishable\nunrelinquishably\nunrelinquished\nunrelinquishing\nunrelishable\nunrelished\nunrelishing\nunreluctant\nunreluctantly\nunremaining\nunremanded\nunremarkable\nunremarked\nunremarried\nunremediable\nunremedied\nunremember\nunrememberable\nunremembered\nunremembering\nunremembrance\nunreminded\nunremissible\nunremittable\nunremitted\nunremittedly\nunremittent\nunremittently\nunremitting\nunremittingly\nunremittingness\nunremonstrant\nunremonstrated\nunremonstrating\nunremorseful\nunremorsefully\nunremote\nunremotely\nunremounted\nunremovable\nunremovableness\nunremovably\nunremoved\nunremunerated\nunremunerating\nunremunerative\nunremuneratively\nunremunerativeness\nunrenderable\nunrendered\nunrenewable\nunrenewed\nunrenounceable\nunrenounced\nunrenouncing\nunrenovated\nunrenowned\nunrenownedly\nunrenownedness\nunrent\nunrentable\nunrented\nunreorganized\nunrepaid\nunrepair\nunrepairable\nunrepaired\nunrepartable\nunreparted\nunrepealability\nunrepealable\nunrepealableness\nunrepealably\nunrepealed\nunrepeatable\nunrepeated\nunrepellable\nunrepelled\nunrepellent\nunrepent\nunrepentable\nunrepentance\nunrepentant\nunrepentantly\nunrepentantness\nunrepented\nunrepenting\nunrepentingly\nunrepentingness\nunrepetitive\nunrepined\nunrepining\nunrepiningly\nunrepiqued\nunreplaceable\nunreplaced\nunreplenished\nunrepleviable\nunreplevined\nunrepliable\nunrepliably\nunreplied\nunreplying\nunreportable\nunreported\nunreportedly\nunreportedness\nunrepose\nunreposed\nunreposeful\nunreposefulness\nunreposing\nunrepossessed\nunreprehended\nunrepresentable\nunrepresentation\nunrepresentative\nunrepresented\nunrepresentedness\nunrepressed\nunrepressible\nunreprievable\nunreprievably\nunreprieved\nunreprimanded\nunreprinted\nunreproachable\nunreproachableness\nunreproachably\nunreproached\nunreproachful\nunreproachfully\nunreproaching\nunreproachingly\nunreprobated\nunreproducible\nunreprovable\nunreprovableness\nunreprovably\nunreproved\nunreprovedly\nunreprovedness\nunreproving\nunrepublican\nunrepudiable\nunrepudiated\nunrepugnant\nunrepulsable\nunrepulsed\nunrepulsing\nunrepulsive\nunreputable\nunreputed\nunrequalified\nunrequested\nunrequickened\nunrequired\nunrequisite\nunrequitable\nunrequital\nunrequited\nunrequitedly\nunrequitedness\nunrequitement\nunrequiter\nunrequiting\nunrescinded\nunrescued\nunresemblant\nunresembling\nunresented\nunresentful\nunresenting\nunreserve\nunreserved\nunreservedly\nunreservedness\nunresifted\nunresigned\nunresistable\nunresistably\nunresistance\nunresistant\nunresistantly\nunresisted\nunresistedly\nunresistedness\nunresistible\nunresistibleness\nunresistibly\nunresisting\nunresistingly\nunresistingness\nunresolute\nunresolvable\nunresolve\nunresolved\nunresolvedly\nunresolvedness\nunresolving\nunresonant\nunresounded\nunresounding\nunresourceful\nunresourcefulness\nunrespect\nunrespectability\nunrespectable\nunrespected\nunrespectful\nunrespectfully\nunrespectfulness\nunrespective\nunrespectively\nunrespectiveness\nunrespirable\nunrespired\nunrespited\nunresplendent\nunresponding\nunresponsible\nunresponsibleness\nunresponsive\nunresponsively\nunresponsiveness\nunrest\nunrestable\nunrested\nunrestful\nunrestfully\nunrestfulness\nunresting\nunrestingly\nunrestingness\nunrestorable\nunrestored\nunrestrainable\nunrestrainably\nunrestrained\nunrestrainedly\nunrestrainedness\nunrestraint\nunrestrictable\nunrestricted\nunrestrictedly\nunrestrictedness\nunrestrictive\nunresty\nunresultive\nunresumed\nunresumptive\nunretainable\nunretained\nunretaliated\nunretaliating\nunretardable\nunretarded\nunretentive\nunreticent\nunretinued\nunretired\nunretiring\nunretorted\nunretouched\nunretractable\nunretracted\nunretreating\nunretrenchable\nunretrenched\nunretrievable\nunretrieved\nunretrievingly\nunretted\nunreturnable\nunreturnably\nunreturned\nunreturning\nunreturningly\nunrevealable\nunrevealed\nunrevealedness\nunrevealing\nunrevealingly\nunrevelationize\nunrevenged\nunrevengeful\nunrevengefulness\nunrevenging\nunrevengingly\nunrevenue\nunrevenued\nunreverberated\nunrevered\nunreverence\nunreverenced\nunreverend\nunreverendly\nunreverent\nunreverential\nunreverently\nunreverentness\nunreversable\nunreversed\nunreversible\nunreverted\nunrevertible\nunreverting\nunrevested\nunrevetted\nunreviewable\nunreviewed\nunreviled\nunrevised\nunrevivable\nunrevived\nunrevocable\nunrevocableness\nunrevocably\nunrevoked\nunrevolted\nunrevolting\nunrevolutionary\nunrevolutionized\nunrevolved\nunrevolving\nunrewardable\nunrewarded\nunrewardedly\nunrewarding\nunreworded\nunrhetorical\nunrhetorically\nunrhetoricalness\nunrhyme\nunrhymed\nunrhythmic\nunrhythmical\nunrhythmically\nunribbed\nunribboned\nunrich\nunriched\nunricht\nunricked\nunrid\nunridable\nunridableness\nunridably\nunridden\nunriddle\nunriddleable\nunriddled\nunriddler\nunriddling\nunride\nunridely\nunridered\nunridged\nunridiculed\nunridiculous\nunrife\nunriffled\nunrifled\nunrifted\nunrig\nunrigged\nunrigging\nunright\nunrightable\nunrighted\nunrighteous\nunrighteously\nunrighteousness\nunrightful\nunrightfully\nunrightfulness\nunrightly\nunrightwise\nunrigid\nunrigorous\nunrimpled\nunrind\nunring\nunringable\nunringed\nunringing\nunrinsed\nunrioted\nunrioting\nunriotous\nunrip\nunripe\nunriped\nunripely\nunripened\nunripeness\nunripening\nunrippable\nunripped\nunripping\nunrippled\nunrippling\nunripplingly\nunrisen\nunrising\nunriskable\nunrisked\nunrisky\nunritual\nunritualistic\nunrivalable\nunrivaled\nunrivaledly\nunrivaledness\nunrived\nunriven\nunrivet\nunriveted\nunriveting\nunroaded\nunroadworthy\nunroaming\nunroast\nunroasted\nunrobbed\nunrobe\nunrobed\nunrobust\nunrocked\nunrococo\nunrodded\nunroiled\nunroll\nunrollable\nunrolled\nunroller\nunrolling\nunrollment\nunromantic\nunromantical\nunromantically\nunromanticalness\nunromanticized\nunroof\nunroofed\nunroofing\nunroomy\nunroost\nunroosted\nunroosting\nunroot\nunrooted\nunrooting\nunrope\nunroped\nunrosed\nunrosined\nunrostrated\nunrotated\nunrotating\nunroted\nunrotted\nunrotten\nunrotund\nunrouged\nunrough\nunroughened\nunround\nunrounded\nunrounding\nunrousable\nunroused\nunroutable\nunrouted\nunrove\nunroved\nunroving\nunrow\nunrowed\nunroweled\nunroyal\nunroyalist\nunroyalized\nunroyally\nunroyalness\nUnrra\nunrubbed\nunrubbish\nunrubified\nunrubrical\nunrubricated\nunruddered\nunruddled\nunrueful\nunruffable\nunruffed\nunruffle\nunruffled\nunruffling\nunrugged\nunruinable\nunruinated\nunruined\nunrulable\nunrulableness\nunrule\nunruled\nunruledly\nunruledness\nunruleful\nunrulily\nunruliness\nunruly\nunruminated\nunruminating\nunruminatingly\nunrummaged\nunrumored\nunrumple\nunrumpled\nunrun\nunrung\nunruptured\nunrural\nunrushed\nUnrussian\nunrust\nunrusted\nunrustic\nunrusticated\nunrustling\nunruth\nunsabbatical\nunsabered\nunsabled\nunsabred\nunsaccharic\nunsacerdotal\nunsacerdotally\nunsack\nunsacked\nunsacramental\nunsacramentally\nunsacramentarian\nunsacred\nunsacredly\nunsacrificeable\nunsacrificeably\nunsacrificed\nunsacrificial\nunsacrificing\nunsacrilegious\nunsad\nunsadden\nunsaddened\nunsaddle\nunsaddled\nunsaddling\nunsafe\nunsafeguarded\nunsafely\nunsafeness\nunsafety\nunsagacious\nunsage\nunsagging\nunsaid\nunsailable\nunsailed\nunsailorlike\nunsaint\nunsainted\nunsaintlike\nunsaintly\nunsalability\nunsalable\nunsalableness\nunsalably\nunsalaried\nunsalesmanlike\nunsaline\nunsalivated\nunsallying\nunsalmonlike\nunsalt\nunsaltable\nunsaltatory\nunsalted\nunsalubrious\nunsalutary\nunsaluted\nunsaluting\nunsalvability\nunsalvable\nunsalvableness\nunsalvaged\nunsalved\nunsampled\nunsanctification\nunsanctified\nunsanctifiedly\nunsanctifiedness\nunsanctify\nunsanctifying\nunsanctimonious\nunsanctimoniously\nunsanctimoniousness\nunsanction\nunsanctionable\nunsanctioned\nunsanctioning\nunsanctitude\nunsanctity\nunsanctuaried\nunsandaled\nunsanded\nunsane\nunsanguinary\nunsanguine\nunsanguinely\nunsanguineness\nunsanguineous\nunsanguineously\nunsanitariness\nunsanitary\nunsanitated\nunsanitation\nunsanity\nunsaponifiable\nunsaponified\nunsapped\nunsappy\nunsarcastic\nunsardonic\nunsartorial\nunsash\nunsashed\nunsatable\nunsatanic\nunsated\nunsatedly\nunsatedness\nunsatiability\nunsatiable\nunsatiableness\nunsatiably\nunsatiate\nunsatiated\nunsatiating\nunsatin\nunsatire\nunsatirical\nunsatirically\nunsatirize\nunsatirized\nunsatisfaction\nunsatisfactorily\nunsatisfactoriness\nunsatisfactory\nunsatisfiable\nunsatisfiableness\nunsatisfiably\nunsatisfied\nunsatisfiedly\nunsatisfiedness\nunsatisfying\nunsatisfyingly\nunsatisfyingness\nunsaturable\nunsaturated\nunsaturatedly\nunsaturatedness\nunsaturation\nunsatyrlike\nunsauced\nunsaurian\nunsavable\nunsaveable\nunsaved\nunsaving\nunsavored\nunsavoredly\nunsavoredness\nunsavorily\nunsavoriness\nunsavory\nunsawed\nunsawn\nunsay\nunsayability\nunsayable\nunscabbard\nunscabbarded\nunscabbed\nunscaffolded\nunscalable\nunscalableness\nunscalably\nunscale\nunscaled\nunscaledness\nunscalloped\nunscaly\nunscamped\nunscandalize\nunscandalized\nunscandalous\nunscannable\nunscanned\nunscanted\nunscanty\nunscarb\nunscarce\nunscared\nunscarfed\nunscarified\nunscarred\nunscathed\nunscathedly\nunscathedness\nunscattered\nunscavengered\nunscenic\nunscent\nunscented\nunscepter\nunsceptered\nunsceptical\nunsceptre\nunsceptred\nunscheduled\nunschematic\nunschematized\nunscholar\nunscholarlike\nunscholarly\nunscholastic\nunschool\nunschooled\nunschooledly\nunschooledness\nunscienced\nunscientific\nunscientifical\nunscientifically\nunscintillating\nunscioned\nunscissored\nunscoffed\nunscoffing\nunscolded\nunsconced\nunscooped\nunscorched\nunscored\nunscorified\nunscoring\nunscorned\nunscornful\nunscornfully\nunscornfulness\nunscotch\nunscotched\nunscottify\nunscoured\nunscourged\nunscowling\nunscramble\nunscrambling\nunscraped\nunscratchable\nunscratched\nunscratching\nunscratchingly\nunscrawled\nunscreen\nunscreenable\nunscreenably\nunscreened\nunscrew\nunscrewable\nunscrewed\nunscrewing\nunscribal\nunscribbled\nunscribed\nunscrimped\nunscriptural\nunscripturally\nunscripturalness\nunscrubbed\nunscrupled\nunscrupulosity\nunscrupulous\nunscrupulously\nunscrupulousness\nunscrutable\nunscrutinized\nunscrutinizing\nunscrutinizingly\nunsculptural\nunsculptured\nunscummed\nunscutcheoned\nunseafaring\nunseal\nunsealable\nunsealed\nunsealer\nunsealing\nunseam\nunseamanlike\nunseamanship\nunseamed\nunseaming\nunsearchable\nunsearchableness\nunsearchably\nunsearched\nunsearcherlike\nunsearching\nunseared\nunseason\nunseasonable\nunseasonableness\nunseasonably\nunseasoned\nunseat\nunseated\nunseaworthiness\nunseaworthy\nunseceding\nunsecluded\nunseclusive\nunseconded\nunsecrecy\nunsecret\nunsecretarylike\nunsecreted\nunsecreting\nunsecretly\nunsecretness\nunsectarian\nunsectarianism\nunsectarianize\nunsectional\nunsecular\nunsecularize\nunsecularized\nunsecure\nunsecured\nunsecuredly\nunsecuredness\nunsecurely\nunsecureness\nunsecurity\nunsedate\nunsedentary\nunseditious\nunseduce\nunseduced\nunseducible\nunseductive\nunsedulous\nunsee\nunseeable\nunseeded\nunseeing\nunseeingly\nunseeking\nunseeming\nunseemingly\nunseemlily\nunseemliness\nunseemly\nunseen\nunseethed\nunsegmented\nunsegregable\nunsegregated\nunsegregatedness\nunseignorial\nunseismic\nunseizable\nunseized\nunseldom\nunselect\nunselected\nunselecting\nunselective\nunself\nunselfish\nunselfishly\nunselfishness\nunselflike\nunselfness\nunselling\nunsenatorial\nunsenescent\nunsensational\nunsense\nunsensed\nunsensibility\nunsensible\nunsensibleness\nunsensibly\nunsensitive\nunsensitize\nunsensitized\nunsensory\nunsensual\nunsensualize\nunsensualized\nunsensually\nunsensuous\nunsensuousness\nunsent\nunsentenced\nunsententious\nunsentient\nunsentimental\nunsentimentalist\nunsentimentality\nunsentimentalize\nunsentimentally\nunsentineled\nunsentinelled\nunseparable\nunseparableness\nunseparably\nunseparate\nunseparated\nunseptate\nunseptated\nunsepulcher\nunsepulchered\nunsepulchral\nunsepulchre\nunsepulchred\nunsepultured\nunsequenced\nunsequential\nunsequestered\nunseraphical\nunserenaded\nunserene\nunserflike\nunserious\nunseriousness\nunserrated\nunserried\nunservable\nunserved\nunserviceability\nunserviceable\nunserviceableness\nunserviceably\nunservicelike\nunservile\nunsesquipedalian\nunset\nunsetting\nunsettle\nunsettleable\nunsettled\nunsettledness\nunsettlement\nunsettling\nunseverable\nunseverableness\nunsevere\nunsevered\nunseveredly\nunseveredness\nunsew\nunsewed\nunsewered\nunsewing\nunsewn\nunsex\nunsexed\nunsexing\nunsexlike\nunsexual\nunshackle\nunshackled\nunshackling\nunshade\nunshaded\nunshadow\nunshadowable\nunshadowed\nunshady\nunshafted\nunshakable\nunshakably\nunshakeable\nunshakeably\nunshaken\nunshakenly\nunshakenness\nunshaking\nunshakingness\nunshaled\nunshamable\nunshamableness\nunshamably\nunshameable\nunshameableness\nunshameably\nunshamed\nunshamefaced\nunshamefacedness\nunshameful\nunshamefully\nunshamefulness\nunshammed\nunshanked\nunshapable\nunshape\nunshapeable\nunshaped\nunshapedness\nunshapeliness\nunshapely\nunshapen\nunshapenly\nunshapenness\nunsharable\nunshared\nunsharedness\nunsharing\nunsharp\nunsharped\nunsharpen\nunsharpened\nunsharpening\nunsharping\nunshattered\nunshavable\nunshaveable\nunshaved\nunshavedly\nunshavedness\nunshaven\nunshavenly\nunshavenness\nunshawl\nunsheaf\nunsheared\nunsheathe\nunsheathed\nunsheathing\nunshed\nunsheet\nunsheeted\nunsheeting\nunshell\nunshelled\nunshelling\nunshelterable\nunsheltered\nunsheltering\nunshelve\nunshepherded\nunshepherding\nunsheriff\nunshewed\nunshieldable\nunshielded\nunshielding\nunshiftable\nunshifted\nunshiftiness\nunshifting\nunshifty\nunshimmering\nunshingled\nunshining\nunship\nunshiplike\nunshipment\nunshipped\nunshipping\nunshipshape\nunshipwrecked\nunshirking\nunshirted\nunshivered\nunshivering\nunshockable\nunshocked\nunshod\nunshodden\nunshoe\nunshoed\nunshoeing\nunshop\nunshore\nunshored\nunshorn\nunshort\nunshortened\nunshot\nunshotted\nunshoulder\nunshouted\nunshouting\nunshoved\nunshoveled\nunshowable\nunshowed\nunshowmanlike\nunshown\nunshowy\nunshredded\nunshrew\nunshrewd\nunshrewish\nunshrill\nunshrine\nunshrined\nunshrinement\nunshrink\nunshrinkability\nunshrinkable\nunshrinking\nunshrinkingly\nunshrived\nunshriveled\nunshrivelled\nunshriven\nunshroud\nunshrouded\nunshrubbed\nunshrugging\nunshrunk\nunshrunken\nunshuddering\nunshuffle\nunshuffled\nunshunnable\nunshunned\nunshunted\nunshut\nunshutter\nunshuttered\nunshy\nunshyly\nunshyness\nunsibilant\nunsiccated\nunsick\nunsickened\nunsicker\nunsickerly\nunsickerness\nunsickled\nunsickly\nunsided\nunsiding\nunsiege\nunsifted\nunsighing\nunsight\nunsightable\nunsighted\nunsighting\nunsightliness\nunsightly\nunsigmatic\nunsignable\nunsignaled\nunsignalized\nunsignalled\nunsignatured\nunsigned\nunsigneted\nunsignificancy\nunsignificant\nunsignificantly\nunsignificative\nunsignified\nunsignifying\nunsilenceable\nunsilenceably\nunsilenced\nunsilent\nunsilentious\nunsilently\nunsilicified\nunsilly\nunsilvered\nunsimilar\nunsimilarity\nunsimilarly\nunsimple\nunsimplicity\nunsimplified\nunsimplify\nunsimulated\nunsimultaneous\nunsin\nunsincere\nunsincerely\nunsincereness\nunsincerity\nunsinew\nunsinewed\nunsinewing\nunsinewy\nunsinful\nunsinfully\nunsinfulness\nunsing\nunsingability\nunsingable\nunsingableness\nunsinged\nunsingle\nunsingled\nunsingleness\nunsingular\nunsinister\nunsinkability\nunsinkable\nunsinking\nunsinnable\nunsinning\nunsinningness\nunsiphon\nunsipped\nunsister\nunsistered\nunsisterliness\nunsisterly\nunsizable\nunsizableness\nunsizeable\nunsizeableness\nunsized\nunskaithd\nunskeptical\nunsketchable\nunsketched\nunskewed\nunskewered\nunskilful\nunskilfully\nunskilled\nunskilledly\nunskilledness\nunskillful\nunskillfully\nunskillfulness\nunskimmed\nunskin\nunskinned\nunskirted\nunslack\nunslacked\nunslackened\nunslackening\nunslacking\nunslagged\nunslain\nunslakable\nunslakeable\nunslaked\nunslammed\nunslandered\nunslanderous\nunslapped\nunslashed\nunslate\nunslated\nunslating\nunslaughtered\nunslave\nunslayable\nunsleaved\nunsleek\nunsleepably\nunsleeping\nunsleepingly\nunsleepy\nunsleeve\nunsleeved\nunslender\nunslept\nunsliced\nunsliding\nunslighted\nunsling\nunslip\nunslipped\nunslippery\nunslipping\nunslit\nunslockened\nunsloped\nunslopped\nunslot\nunslothful\nunslothfully\nunslothfulness\nunslotted\nunsloughed\nunsloughing\nunslow\nunsluggish\nunsluice\nunsluiced\nunslumbering\nunslumberous\nunslumbrous\nunslung\nunslurred\nunsly\nunsmacked\nunsmart\nunsmartly\nunsmartness\nunsmeared\nunsmelled\nunsmelling\nunsmelted\nunsmiled\nunsmiling\nunsmilingly\nunsmilingness\nunsmirched\nunsmirking\nunsmitten\nunsmokable\nunsmokeable\nunsmoked\nunsmokified\nunsmoking\nunsmoky\nunsmooth\nunsmoothed\nunsmoothly\nunsmoothness\nunsmote\nunsmotherable\nunsmothered\nunsmudged\nunsmuggled\nunsmutched\nunsmutted\nunsmutty\nunsnaffled\nunsnagged\nunsnaggled\nunsnaky\nunsnap\nunsnapped\nunsnare\nunsnared\nunsnarl\nunsnatch\nunsnatched\nunsneck\nunsneering\nunsnib\nunsnipped\nunsnobbish\nunsnoring\nunsnouted\nunsnow\nunsnubbable\nunsnubbed\nunsnuffed\nunsoaked\nunsoaped\nunsoarable\nunsober\nunsoberly\nunsoberness\nunsobriety\nunsociability\nunsociable\nunsociableness\nunsociably\nunsocial\nunsocialism\nunsocialistic\nunsociality\nunsocializable\nunsocialized\nunsocially\nunsocialness\nunsociological\nunsocket\nunsodden\nunsoft\nunsoftened\nunsoftening\nunsoggy\nunsoil\nunsoiled\nunsoiledness\nunsolaced\nunsolacing\nunsolar\nunsold\nunsolder\nunsoldered\nunsoldering\nunsoldier\nunsoldiered\nunsoldierlike\nunsoldierly\nunsole\nunsoled\nunsolemn\nunsolemness\nunsolemnize\nunsolemnized\nunsolemnly\nunsolicitated\nunsolicited\nunsolicitedly\nunsolicitous\nunsolicitously\nunsolicitousness\nunsolid\nunsolidarity\nunsolidifiable\nunsolidified\nunsolidity\nunsolidly\nunsolidness\nunsolitary\nunsolubility\nunsoluble\nunsolvable\nunsolvableness\nunsolvably\nunsolved\nunsomatic\nunsomber\nunsombre\nunsome\nunson\nunsonable\nunsonant\nunsonlike\nunsonneted\nunsonorous\nunsonsy\nunsoothable\nunsoothed\nunsoothfast\nunsoothing\nunsooty\nunsophistical\nunsophistically\nunsophisticate\nunsophisticated\nunsophisticatedly\nunsophisticatedness\nunsophistication\nunsophomoric\nunsordid\nunsore\nunsorrowed\nunsorrowing\nunsorry\nunsort\nunsortable\nunsorted\nunsorting\nunsotted\nunsought\nunsoul\nunsoulful\nunsoulfully\nunsoulish\nunsound\nunsoundable\nunsoundableness\nunsounded\nunsounding\nunsoundly\nunsoundness\nunsour\nunsoured\nunsoused\nunsovereign\nunsowed\nunsown\nunspaced\nunspacious\nunspaded\nunspan\nunspangled\nunspanked\nunspanned\nunspar\nunsparable\nunspared\nunsparing\nunsparingly\nunsparingness\nunsparkling\nunsparred\nunsparse\nunspatial\nunspatiality\nunspattered\nunspawned\nunspayed\nunspeak\nunspeakability\nunspeakable\nunspeakableness\nunspeakably\nunspeaking\nunspeared\nunspecialized\nunspecializing\nunspecific\nunspecified\nunspecifiedly\nunspecious\nunspecked\nunspeckled\nunspectacled\nunspectacular\nunspectacularly\nunspecterlike\nunspectrelike\nunspeculating\nunspeculative\nunspeculatively\nunsped\nunspeed\nunspeedy\nunspeered\nunspell\nunspellable\nunspelled\nunspelt\nunspendable\nunspending\nunspent\nunspewed\nunsphere\nunsphered\nunsphering\nunspiable\nunspiced\nunspicy\nunspied\nunspike\nunspillable\nunspin\nunspinsterlike\nunspinsterlikeness\nunspiral\nunspired\nunspirit\nunspirited\nunspiritedly\nunspiriting\nunspiritual\nunspirituality\nunspiritualize\nunspiritualized\nunspiritually\nunspiritualness\nunspissated\nunspit\nunspited\nunspiteful\nunspitted\nunsplashed\nunsplattered\nunsplayed\nunspleened\nunspleenish\nunspleenishly\nunsplendid\nunspliced\nunsplinted\nunsplintered\nunsplit\nunspoil\nunspoilable\nunspoilableness\nunspoilably\nunspoiled\nunspoken\nunspokenly\nunsponged\nunspongy\nunsponsored\nunspontaneous\nunspontaneously\nunspookish\nunsported\nunsportful\nunsporting\nunsportive\nunsportsmanlike\nunsportsmanly\nunspot\nunspotlighted\nunspottable\nunspotted\nunspottedly\nunspottedness\nunspoused\nunspouselike\nunspouted\nunsprained\nunsprayed\nunspread\nunsprightliness\nunsprightly\nunspring\nunspringing\nunspringlike\nunsprinkled\nunsprinklered\nunsprouted\nunsproutful\nunsprouting\nunspruced\nunsprung\nunspun\nunspurned\nunspurred\nunspying\nunsquandered\nunsquarable\nunsquare\nunsquared\nunsquashed\nunsqueamish\nunsqueezable\nunsqueezed\nunsquelched\nunsquinting\nunsquire\nunsquired\nunsquirelike\nunsquirted\nunstabbed\nunstability\nunstable\nunstabled\nunstableness\nunstablished\nunstably\nunstack\nunstacked\nunstacker\nunstaffed\nunstaged\nunstaggered\nunstaggering\nunstagnating\nunstagy\nunstaid\nunstaidly\nunstaidness\nunstain\nunstainable\nunstainableness\nunstained\nunstainedly\nunstainedness\nunstaled\nunstalked\nunstalled\nunstammering\nunstamped\nunstampeded\nunstanch\nunstanchable\nunstandard\nunstandardized\nunstanzaic\nunstar\nunstarch\nunstarched\nunstarlike\nunstarred\nunstarted\nunstarting\nunstartled\nunstarved\nunstatable\nunstate\nunstateable\nunstated\nunstately\nunstatesmanlike\nunstatic\nunstating\nunstation\nunstationary\nunstationed\nunstatistic\nunstatistical\nunstatued\nunstatuesque\nunstatutable\nunstatutably\nunstaunch\nunstaunchable\nunstaunched\nunstavable\nunstaveable\nunstaved\nunstayable\nunstayed\nunstayedness\nunstaying\nunsteadfast\nunsteadfastly\nunsteadfastness\nunsteadied\nunsteadily\nunsteadiness\nunsteady\nunsteadying\nunstealthy\nunsteamed\nunsteaming\nunsteck\nunstecked\nunsteel\nunsteeled\nunsteep\nunsteeped\nunsteepled\nunsteered\nunstemmable\nunstemmed\nunstentorian\nunstep\nunstercorated\nunstereotyped\nunsterile\nunsterilized\nunstern\nunstethoscoped\nunstewardlike\nunstewed\nunstick\nunsticking\nunstickingness\nunsticky\nunstiffen\nunstiffened\nunstifled\nunstigmatized\nunstill\nunstilled\nunstillness\nunstilted\nunstimulated\nunstimulating\nunsting\nunstinged\nunstinging\nunstinted\nunstintedly\nunstinting\nunstintingly\nunstippled\nunstipulated\nunstirrable\nunstirred\nunstirring\nunstitch\nunstitched\nunstitching\nunstock\nunstocked\nunstocking\nunstockinged\nunstoic\nunstoical\nunstoically\nunstoicize\nunstoked\nunstoken\nunstolen\nunstonable\nunstone\nunstoned\nunstoniness\nunstony\nunstooping\nunstop\nunstoppable\nunstopped\nunstopper\nunstoppered\nunstopple\nunstore\nunstored\nunstoried\nunstormed\nunstormy\nunstout\nunstoved\nunstow\nunstowed\nunstraddled\nunstrafed\nunstraight\nunstraightened\nunstraightforward\nunstraightness\nunstrain\nunstrained\nunstraitened\nunstrand\nunstranded\nunstrange\nunstrangered\nunstrangled\nunstrangulable\nunstrap\nunstrapped\nunstrategic\nunstrategically\nunstratified\nunstraying\nunstreaked\nunstrength\nunstrengthen\nunstrengthened\nunstrenuous\nunstressed\nunstressedly\nunstressedness\nunstretch\nunstretched\nunstrewed\nunstrewn\nunstriated\nunstricken\nunstrictured\nunstridulous\nunstrike\nunstriking\nunstring\nunstringed\nunstringing\nunstrip\nunstriped\nunstripped\nunstriving\nunstroked\nunstrong\nunstructural\nunstruggling\nunstrung\nunstubbed\nunstubborn\nunstuccoed\nunstuck\nunstudded\nunstudied\nunstudious\nunstuff\nunstuffed\nunstuffing\nunstultified\nunstumbling\nunstung\nunstunned\nunstunted\nunstupefied\nunstupid\nunstuttered\nunstuttering\nunsty\nunstyled\nunstylish\nunstylishly\nunstylishness\nunsubdivided\nunsubduable\nunsubduableness\nunsubduably\nunsubducted\nunsubdued\nunsubduedly\nunsubduedness\nunsubject\nunsubjectable\nunsubjected\nunsubjectedness\nunsubjection\nunsubjective\nunsubjectlike\nunsubjugate\nunsubjugated\nunsublimable\nunsublimated\nunsublimed\nunsubmerged\nunsubmergible\nunsubmerging\nunsubmission\nunsubmissive\nunsubmissively\nunsubmissiveness\nunsubmitted\nunsubmitting\nunsubordinate\nunsubordinated\nunsuborned\nunsubpoenaed\nunsubscribed\nunsubscribing\nunsubservient\nunsubsided\nunsubsidiary\nunsubsiding\nunsubsidized\nunsubstanced\nunsubstantial\nunsubstantiality\nunsubstantialize\nunsubstantially\nunsubstantialness\nunsubstantiate\nunsubstantiated\nunsubstantiation\nunsubstituted\nunsubtle\nunsubtleness\nunsubtlety\nunsubtly\nunsubtracted\nunsubventioned\nunsubventionized\nunsubversive\nunsubvertable\nunsubverted\nunsubvertive\nunsucceedable\nunsucceeded\nunsucceeding\nunsuccess\nunsuccessful\nunsuccessfully\nunsuccessfulness\nunsuccessive\nunsuccessively\nunsuccessiveness\nunsuccinct\nunsuccorable\nunsuccored\nunsucculent\nunsuccumbing\nunsucked\nunsuckled\nunsued\nunsufferable\nunsufferableness\nunsufferably\nunsuffered\nunsuffering\nunsufficed\nunsufficience\nunsufficiency\nunsufficient\nunsufficiently\nunsufficing\nunsufficingness\nunsufflated\nunsuffocate\nunsuffocated\nunsuffocative\nunsuffused\nunsugared\nunsugary\nunsuggested\nunsuggestedness\nunsuggestive\nunsuggestiveness\nunsuit\nunsuitability\nunsuitable\nunsuitableness\nunsuitably\nunsuited\nunsuiting\nunsulky\nunsullen\nunsulliable\nunsullied\nunsulliedly\nunsulliedness\nunsulphonated\nunsulphureous\nunsulphurized\nunsultry\nunsummable\nunsummarized\nunsummed\nunsummered\nunsummerlike\nunsummerly\nunsummonable\nunsummoned\nunsumptuary\nunsumptuous\nunsun\nunsunburned\nunsundered\nunsung\nunsunk\nunsunken\nunsunned\nunsunny\nunsuperable\nunsuperannuated\nunsupercilious\nunsuperficial\nunsuperfluous\nunsuperior\nunsuperlative\nunsupernatural\nunsupernaturalize\nunsupernaturalized\nunsuperscribed\nunsuperseded\nunsuperstitious\nunsupervised\nunsupervisedly\nunsupped\nunsupplantable\nunsupplanted\nunsupple\nunsuppled\nunsupplemented\nunsuppliable\nunsupplicated\nunsupplied\nunsupportable\nunsupportableness\nunsupportably\nunsupported\nunsupportedly\nunsupportedness\nunsupporting\nunsupposable\nunsupposed\nunsuppressed\nunsuppressible\nunsuppressibly\nunsuppurated\nunsuppurative\nunsupreme\nunsurcharge\nunsurcharged\nunsure\nunsurfaced\nunsurfeited\nunsurfeiting\nunsurgical\nunsurging\nunsurmised\nunsurmising\nunsurmountable\nunsurmountableness\nunsurmountably\nunsurmounted\nunsurnamed\nunsurpassable\nunsurpassableness\nunsurpassably\nunsurpassed\nunsurplice\nunsurpliced\nunsurprised\nunsurprising\nunsurrendered\nunsurrendering\nunsurrounded\nunsurveyable\nunsurveyed\nunsurvived\nunsurviving\nunsusceptibility\nunsusceptible\nunsusceptibleness\nunsusceptibly\nunsusceptive\nunsuspectable\nunsuspectably\nunsuspected\nunsuspectedly\nunsuspectedness\nunsuspectful\nunsuspectfulness\nunsuspectible\nunsuspecting\nunsuspectingly\nunsuspectingness\nunsuspective\nunsuspended\nunsuspicion\nunsuspicious\nunsuspiciously\nunsuspiciousness\nunsustainable\nunsustained\nunsustaining\nunsutured\nunswabbed\nunswaddle\nunswaddled\nunswaddling\nunswallowable\nunswallowed\nunswanlike\nunswapped\nunswarming\nunswathable\nunswathe\nunswathed\nunswathing\nunswayable\nunswayed\nunswayedness\nunswaying\nunswear\nunswearing\nunsweat\nunsweated\nunsweating\nunsweepable\nunsweet\nunsweeten\nunsweetened\nunsweetenedness\nunsweetly\nunsweetness\nunswell\nunswelled\nunswelling\nunsweltered\nunswept\nunswervable\nunswerved\nunswerving\nunswervingly\nunswilled\nunswing\nunswingled\nunswitched\nunswivel\nunswollen\nunswooning\nunsworn\nunswung\nunsyllabic\nunsyllabled\nunsyllogistical\nunsymbolic\nunsymbolical\nunsymbolically\nunsymbolicalness\nunsymbolized\nunsymmetrical\nunsymmetrically\nunsymmetricalness\nunsymmetrized\nunsymmetry\nunsympathetic\nunsympathetically\nunsympathizability\nunsympathizable\nunsympathized\nunsympathizing\nunsympathizingly\nunsympathy\nunsymphonious\nunsymptomatic\nunsynchronized\nunsynchronous\nunsyncopated\nunsyndicated\nunsynonymous\nunsyntactical\nunsynthetic\nunsyringed\nunsystematic\nunsystematical\nunsystematically\nunsystematized\nunsystematizedly\nunsystematizing\nunsystemizable\nuntabernacled\nuntabled\nuntabulated\nuntack\nuntacked\nuntacking\nuntackle\nuntackled\nuntactful\nuntactfully\nuntactfulness\nuntagged\nuntailed\nuntailorlike\nuntailorly\nuntaint\nuntaintable\nuntainted\nuntaintedly\nuntaintedness\nuntainting\nuntakable\nuntakableness\nuntakeable\nuntakeableness\nuntaken\nuntaking\nuntalented\nuntalkative\nuntalked\nuntalking\nuntall\nuntallied\nuntallowed\nuntamable\nuntamableness\nuntame\nuntamed\nuntamedly\nuntamedness\nuntamely\nuntameness\nuntampered\nuntangential\nuntangibility\nuntangible\nuntangibleness\nuntangibly\nuntangle\nuntangled\nuntangling\nuntanned\nuntantalized\nuntantalizing\nuntap\nuntaped\nuntapered\nuntapering\nuntapestried\nuntappable\nuntapped\nuntar\nuntarnishable\nuntarnished\nuntarred\nuntarried\nuntarrying\nuntartarized\nuntasked\nuntasseled\nuntastable\nuntaste\nuntasteable\nuntasted\nuntasteful\nuntastefully\nuntastefulness\nuntasting\nuntasty\nuntattered\nuntattooed\nuntaught\nuntaughtness\nuntaunted\nuntaut\nuntautological\nuntawdry\nuntawed\nuntax\nuntaxable\nuntaxed\nuntaxing\nunteach\nunteachable\nunteachableness\nunteachably\nunteacherlike\nunteaching\nunteam\nunteamed\nunteaming\nuntearable\nunteased\nunteasled\nuntechnical\nuntechnicalize\nuntechnically\nuntedded\nuntedious\nunteem\nunteeming\nunteethed\nuntelegraphed\nuntell\nuntellable\nuntellably\nuntelling\nuntemper\nuntemperamental\nuntemperate\nuntemperately\nuntemperateness\nuntempered\nuntempering\nuntempested\nuntempestuous\nuntempled\nuntemporal\nuntemporary\nuntemporizing\nuntemptability\nuntemptable\nuntemptably\nuntempted\nuntemptible\nuntemptibly\nuntempting\nuntemptingly\nuntemptingness\nuntenability\nuntenable\nuntenableness\nuntenably\nuntenacious\nuntenacity\nuntenant\nuntenantable\nuntenantableness\nuntenanted\nuntended\nuntender\nuntendered\nuntenderly\nuntenderness\nuntenible\nuntenibleness\nuntenibly\nuntense\nuntent\nuntentaculate\nuntented\nuntentered\nuntenty\nunterminable\nunterminableness\nunterminably\nunterminated\nunterminating\nunterraced\nunterrestrial\nunterrible\nunterribly\nunterrifiable\nunterrific\nunterrified\nunterrifying\nunterrorized\nuntessellated\nuntestable\nuntestamentary\nuntested\nuntestifying\nuntether\nuntethered\nuntethering\nuntewed\nuntextual\nunthank\nunthanked\nunthankful\nunthankfully\nunthankfulness\nunthanking\nunthatch\nunthatched\nunthaw\nunthawed\nunthawing\nuntheatric\nuntheatrical\nuntheatrically\nuntheistic\nunthematic\nuntheological\nuntheologically\nuntheologize\nuntheoretic\nuntheoretical\nuntheorizable\nuntherapeutical\nunthick\nunthicken\nunthickened\nunthievish\nunthink\nunthinkability\nunthinkable\nunthinkableness\nunthinkably\nunthinker\nunthinking\nunthinkingly\nunthinkingness\nunthinned\nunthinning\nunthirsting\nunthirsty\nunthistle\nuntholeable\nuntholeably\nunthorn\nunthorny\nunthorough\nunthought\nunthoughted\nunthoughtedly\nunthoughtful\nunthoughtfully\nunthoughtfulness\nunthoughtlike\nunthrall\nunthralled\nunthrashed\nunthread\nunthreadable\nunthreaded\nunthreading\nunthreatened\nunthreatening\nunthreshed\nunthrid\nunthridden\nunthrift\nunthriftihood\nunthriftily\nunthriftiness\nunthriftlike\nunthrifty\nunthrilled\nunthrilling\nunthriven\nunthriving\nunthrivingly\nunthrivingness\nunthrob\nunthrone\nunthroned\nunthronged\nunthroning\nunthrottled\nunthrowable\nunthrown\nunthrushlike\nunthrust\nunthumbed\nunthumped\nunthundered\nunthwacked\nunthwarted\nuntiaraed\nunticketed\nuntickled\nuntidal\nuntidily\nuntidiness\nuntidy\nuntie\nuntied\nuntight\nuntighten\nuntightness\nuntil\nuntile\nuntiled\nuntill\nuntillable\nuntilled\nuntilling\nuntilt\nuntilted\nuntilting\nuntimbered\nuntimed\nuntimedness\nuntimeliness\nuntimely\nuntimeous\nuntimeously\nuntimesome\nuntimorous\nuntin\nuntinct\nuntinctured\nuntine\nuntinged\nuntinkered\nuntinned\nuntinseled\nuntinted\nuntippable\nuntipped\nuntippled\nuntipt\nuntirability\nuntirable\nuntire\nuntired\nuntiredly\nuntiring\nuntiringly\nuntissued\nuntithability\nuntithable\nuntithed\nuntitled\nuntittering\nuntitular\nunto\nuntoadying\nuntoasted\nuntogaed\nuntoggle\nuntoggler\nuntoiled\nuntoileted\nuntoiling\nuntold\nuntolerable\nuntolerableness\nuntolerably\nuntolerated\nuntomb\nuntombed\nuntonality\nuntone\nuntoned\nuntongued\nuntonsured\nuntooled\nuntooth\nuntoothed\nuntoothsome\nuntoothsomeness\nuntop\nuntopographical\nuntopped\nuntopping\nuntormented\nuntorn\nuntorpedoed\nuntorpid\nuntorrid\nuntortuous\nuntorture\nuntortured\nuntossed\nuntotaled\nuntotalled\nuntottering\nuntouch\nuntouchability\nuntouchable\nuntouchableness\nuntouchably\nuntouched\nuntouchedness\nuntouching\nuntough\nuntoured\nuntouristed\nuntoward\nuntowardliness\nuntowardly\nuntowardness\nuntowered\nuntown\nuntownlike\nuntrace\nuntraceable\nuntraceableness\nuntraceably\nuntraced\nuntraceried\nuntracked\nuntractability\nuntractable\nuntractableness\nuntractably\nuntractarian\nuntractible\nuntractibleness\nuntradeable\nuntraded\nuntradesmanlike\nuntrading\nuntraditional\nuntraduced\nuntraffickable\nuntrafficked\nuntragic\nuntragical\nuntrailed\nuntrain\nuntrainable\nuntrained\nuntrainedly\nuntrainedness\nuntraitored\nuntraitorous\nuntrammed\nuntrammeled\nuntrammeledness\nuntramped\nuntrampled\nuntrance\nuntranquil\nuntranquilized\nuntranquillize\nuntranquillized\nuntransacted\nuntranscended\nuntranscendental\nuntranscribable\nuntranscribed\nuntransferable\nuntransferred\nuntransfigured\nuntransfixed\nuntransformable\nuntransformed\nuntransforming\nuntransfused\nuntransfusible\nuntransgressed\nuntransient\nuntransitable\nuntransitive\nuntransitory\nuntranslatability\nuntranslatable\nuntranslatableness\nuntranslatably\nuntranslated\nuntransmigrated\nuntransmissible\nuntransmitted\nuntransmutable\nuntransmuted\nuntransparent\nuntranspassable\nuntranspired\nuntranspiring\nuntransplanted\nuntransportable\nuntransported\nuntransposed\nuntransubstantiated\nuntrappable\nuntrapped\nuntrashed\nuntravelable\nuntraveled\nuntraveling\nuntravellable\nuntravelling\nuntraversable\nuntraversed\nuntravestied\nuntreacherous\nuntread\nuntreadable\nuntreading\nuntreasonable\nuntreasure\nuntreasured\nuntreatable\nuntreatableness\nuntreatably\nuntreated\nuntreed\nuntrekked\nuntrellised\nuntrembling\nuntremblingly\nuntremendous\nuntremulous\nuntrenched\nuntrepanned\nuntrespassed\nuntrespassing\nuntress\nuntressed\nuntriable\nuntribal\nuntributary\nuntriced\nuntrickable\nuntricked\nuntried\nuntrifling\nuntrig\nuntrigonometrical\nuntrill\nuntrim\nuntrimmable\nuntrimmed\nuntrimmedness\nuntrinitarian\nuntripe\nuntrippable\nuntripped\nuntripping\nuntrite\nuntriturated\nuntriumphable\nuntriumphant\nuntriumphed\nuntrochaic\nuntrod\nuntrodden\nuntroddenness\nuntrolled\nuntrophied\nuntropical\nuntrotted\nuntroublable\nuntrouble\nuntroubled\nuntroubledly\nuntroubledness\nuntroublesome\nuntroublesomeness\nuntrounced\nuntrowed\nuntruant\nuntruck\nuntruckled\nuntruckling\nuntrue\nuntrueness\nuntruism\nuntruly\nuntrumped\nuntrumpeted\nuntrumping\nuntrundled\nuntrunked\nuntruss\nuntrussed\nuntrusser\nuntrussing\nuntrust\nuntrustably\nuntrusted\nuntrustful\nuntrustiness\nuntrusting\nuntrustworthily\nuntrustworthiness\nuntrustworthy\nuntrusty\nuntruth\nuntruther\nuntruthful\nuntruthfully\nuntruthfulness\nuntrying\nuntubbed\nuntuck\nuntucked\nuntuckered\nuntucking\nuntufted\nuntugged\nuntumbled\nuntumefied\nuntumid\nuntumultuous\nuntunable\nuntunableness\nuntunably\nuntune\nuntuneable\nuntuneableness\nuntuneably\nuntuned\nuntuneful\nuntunefully\nuntunefulness\nuntuning\nuntunneled\nuntupped\nunturbaned\nunturbid\nunturbulent\nunturf\nunturfed\nunturgid\nunturn\nunturnable\nunturned\nunturning\nunturpentined\nunturreted\nuntusked\nuntutelar\nuntutored\nuntutoredly\nuntutoredness\nuntwilled\nuntwinable\nuntwine\nuntwineable\nuntwined\nuntwining\nuntwinkling\nuntwinned\nuntwirl\nuntwirled\nuntwirling\nuntwist\nuntwisted\nuntwister\nuntwisting\nuntwitched\nuntying\nuntypical\nuntypically\nuntyrannic\nuntyrannical\nuntyrantlike\nuntz\nunubiquitous\nunugly\nunulcerated\nunultra\nunumpired\nununanimity\nununanimous\nununanimously\nununderstandable\nununderstandably\nununderstanding\nununderstood\nunundertaken\nunundulatory\nUnungun\nununifiable\nununified\nununiform\nununiformed\nununiformity\nununiformly\nununiformness\nununitable\nununitableness\nununitably\nununited\nununiting\nununiversity\nununiversitylike\nunupbraiding\nunupbraidingly\nunupholstered\nunupright\nunuprightly\nunuprightness\nunupset\nunupsettable\nunurban\nunurbane\nunurged\nunurgent\nunurging\nunurn\nunurned\nunusable\nunusableness\nunusably\nunuse\nunused\nunusedness\nunuseful\nunusefully\nunusefulness\nunushered\nunusual\nunusuality\nunusually\nunusualness\nunusurious\nunusurped\nunusurping\nunutilizable\nunutterability\nunutterable\nunutterableness\nunutterably\nunuttered\nunuxorial\nunuxorious\nunvacant\nunvaccinated\nunvacillating\nunvailable\nunvain\nunvaleted\nunvaletudinary\nunvaliant\nunvalid\nunvalidated\nunvalidating\nunvalidity\nunvalidly\nunvalidness\nunvalorous\nunvaluable\nunvaluableness\nunvaluably\nunvalue\nunvalued\nunvamped\nunvanishing\nunvanquishable\nunvanquished\nunvantaged\nunvaporized\nunvariable\nunvariableness\nunvariably\nunvariant\nunvaried\nunvariedly\nunvariegated\nunvarnished\nunvarnishedly\nunvarnishedness\nunvarying\nunvaryingly\nunvaryingness\nunvascular\nunvassal\nunvatted\nunvaulted\nunvaulting\nunvaunted\nunvaunting\nunvauntingly\nunveering\nunveil\nunveiled\nunveiledly\nunveiledness\nunveiler\nunveiling\nunveilment\nunveined\nunvelvety\nunvendable\nunvendableness\nunvended\nunvendible\nunvendibleness\nunveneered\nunvenerable\nunvenerated\nunvenereal\nunvenged\nunveniable\nunvenial\nunvenom\nunvenomed\nunvenomous\nunventable\nunvented\nunventilated\nunventured\nunventurous\nunvenued\nunveracious\nunveracity\nunverbalized\nunverdant\nunverdured\nunveridical\nunverifiable\nunverifiableness\nunverifiably\nunverified\nunverifiedness\nunveritable\nunverity\nunvermiculated\nunverminous\nunvernicular\nunversatile\nunversed\nunversedly\nunversedness\nunversified\nunvertical\nunvessel\nunvesseled\nunvest\nunvested\nunvetoed\nunvexed\nunviable\nunvibrated\nunvibrating\nunvicar\nunvicarious\nunvicariously\nunvicious\nunvictimized\nunvictorious\nunvictualed\nunvictualled\nunviewable\nunviewed\nunvigilant\nunvigorous\nunvigorously\nunvilified\nunvillaged\nunvindicated\nunvindictive\nunvindictively\nunvindictiveness\nunvinous\nunvintaged\nunviolable\nunviolated\nunviolenced\nunviolent\nunviolined\nunvirgin\nunvirginal\nunvirginlike\nunvirile\nunvirility\nunvirtue\nunvirtuous\nunvirtuously\nunvirtuousness\nunvirulent\nunvisible\nunvisibleness\nunvisibly\nunvision\nunvisionary\nunvisioned\nunvisitable\nunvisited\nunvisor\nunvisored\nunvisualized\nunvital\nunvitalized\nunvitalness\nunvitiated\nunvitiatedly\nunvitiatedness\nunvitrescibility\nunvitrescible\nunvitrifiable\nunvitrified\nunvitriolized\nunvituperated\nunvivacious\nunvivid\nunvivified\nunvizard\nunvizarded\nunvocal\nunvocalized\nunvociferous\nunvoice\nunvoiced\nunvoiceful\nunvoicing\nunvoidable\nunvoided\nunvolatile\nunvolatilize\nunvolatilized\nunvolcanic\nunvolitioned\nunvoluminous\nunvoluntarily\nunvoluntariness\nunvoluntary\nunvolunteering\nunvoluptuous\nunvomited\nunvoracious\nunvote\nunvoted\nunvoting\nunvouched\nunvouchedly\nunvouchedness\nunvouchsafed\nunvowed\nunvoweled\nunvoyageable\nunvoyaging\nunvulcanized\nunvulgar\nunvulgarize\nunvulgarized\nunvulgarly\nunvulnerable\nunwadable\nunwadded\nunwadeable\nunwaded\nunwading\nunwafted\nunwaged\nunwagered\nunwaggable\nunwaggably\nunwagged\nunwailed\nunwailing\nunwainscoted\nunwaited\nunwaiting\nunwaked\nunwakeful\nunwakefulness\nunwakened\nunwakening\nunwaking\nunwalkable\nunwalked\nunwalking\nunwall\nunwalled\nunwallet\nunwallowed\nunwan\nunwandered\nunwandering\nunwaning\nunwanted\nunwanton\nunwarbled\nunware\nunwarely\nunwareness\nunwarily\nunwariness\nunwarlike\nunwarlikeness\nunwarm\nunwarmable\nunwarmed\nunwarming\nunwarn\nunwarned\nunwarnedly\nunwarnedness\nunwarnished\nunwarp\nunwarpable\nunwarped\nunwarping\nunwarrant\nunwarrantability\nunwarrantable\nunwarrantableness\nunwarrantably\nunwarranted\nunwarrantedly\nunwarrantedness\nunwary\nunwashable\nunwashed\nunwashedness\nunwassailing\nunwastable\nunwasted\nunwasteful\nunwastefully\nunwasting\nunwastingly\nunwatchable\nunwatched\nunwatchful\nunwatchfully\nunwatchfulness\nunwatching\nunwater\nunwatered\nunwaterlike\nunwatermarked\nunwatery\nunwattled\nunwaved\nunwaverable\nunwavered\nunwavering\nunwaveringly\nunwaving\nunwax\nunwaxed\nunwayed\nunwayward\nunweaken\nunweakened\nunweal\nunwealsomeness\nunwealthy\nunweaned\nunweapon\nunweaponed\nunwearable\nunweariability\nunweariable\nunweariableness\nunweariably\nunwearied\nunweariedly\nunweariedness\nunwearily\nunweariness\nunwearing\nunwearisome\nunwearisomeness\nunweary\nunwearying\nunwearyingly\nunweathered\nunweatherly\nunweatherwise\nunweave\nunweaving\nunweb\nunwebbed\nunwebbing\nunwed\nunwedded\nunweddedly\nunweddedness\nunwedge\nunwedgeable\nunwedged\nunweeded\nunweel\nunweelness\nunweened\nunweeping\nunweeting\nunweetingly\nunweft\nunweighable\nunweighed\nunweighing\nunweight\nunweighted\nunweighty\nunwelcome\nunwelcomed\nunwelcomely\nunwelcomeness\nunweld\nunweldable\nunwelded\nunwell\nunwellness\nunwelted\nunwept\nunwestern\nunwesternized\nunwet\nunwettable\nunwetted\nunwheedled\nunwheel\nunwheeled\nunwhelmed\nunwhelped\nunwhetted\nunwhig\nunwhiglike\nunwhimsical\nunwhining\nunwhip\nunwhipped\nunwhirled\nunwhisked\nunwhiskered\nunwhisperable\nunwhispered\nunwhispering\nunwhistled\nunwhite\nunwhited\nunwhitened\nunwhitewashed\nunwholesome\nunwholesomely\nunwholesomeness\nunwidened\nunwidowed\nunwield\nunwieldable\nunwieldily\nunwieldiness\nunwieldly\nunwieldy\nunwifed\nunwifelike\nunwifely\nunwig\nunwigged\nunwild\nunwilily\nunwiliness\nunwill\nunwilled\nunwillful\nunwillfully\nunwillfulness\nunwilling\nunwillingly\nunwillingness\nunwilted\nunwilting\nunwily\nunwincing\nunwincingly\nunwind\nunwindable\nunwinding\nunwindingly\nunwindowed\nunwindy\nunwingable\nunwinged\nunwinking\nunwinkingly\nunwinnable\nunwinning\nunwinnowed\nunwinsome\nunwinter\nunwintry\nunwiped\nunwire\nunwired\nunwisdom\nunwise\nunwisely\nunwiseness\nunwish\nunwished\nunwishful\nunwishing\nunwist\nunwistful\nunwitch\nunwitched\nunwithdrawable\nunwithdrawing\nunwithdrawn\nunwitherable\nunwithered\nunwithering\nunwithheld\nunwithholden\nunwithholding\nunwithstanding\nunwithstood\nunwitless\nunwitnessed\nunwitted\nunwittily\nunwitting\nunwittingly\nunwittingness\nunwitty\nunwive\nunwived\nunwoeful\nunwoful\nunwoman\nunwomanish\nunwomanize\nunwomanized\nunwomanlike\nunwomanliness\nunwomanly\nunwomb\nunwon\nunwonder\nunwonderful\nunwondering\nunwonted\nunwontedly\nunwontedness\nunwooded\nunwooed\nunwoof\nunwooly\nunwordable\nunwordably\nunwordily\nunwordy\nunwork\nunworkability\nunworkable\nunworkableness\nunworkably\nunworked\nunworkedness\nunworker\nunworking\nunworkmanlike\nunworkmanly\nunworld\nunworldliness\nunworldly\nunwormed\nunwormy\nunworn\nunworried\nunworriedly\nunworriedness\nunworshiped\nunworshipful\nunworshiping\nunworshipped\nunworshipping\nunworth\nunworthily\nunworthiness\nunworthy\nunwotting\nunwound\nunwoundable\nunwoundableness\nunwounded\nunwoven\nunwrangling\nunwrap\nunwrapped\nunwrapper\nunwrapping\nunwrathful\nunwrathfully\nunwreaked\nunwreathe\nunwreathed\nunwreathing\nunwrecked\nunwrench\nunwrenched\nunwrested\nunwrestedly\nunwresting\nunwrestled\nunwretched\nunwriggled\nunwrinkle\nunwrinkleable\nunwrinkled\nunwrit\nunwritable\nunwrite\nunwriting\nunwritten\nunwronged\nunwrongful\nunwrought\nunwrung\nunyachtsmanlike\nunyeaned\nunyearned\nunyearning\nunyielded\nunyielding\nunyieldingly\nunyieldingness\nunyoke\nunyoked\nunyoking\nunyoung\nunyouthful\nunyouthfully\nunze\nunzealous\nunzealously\nunzealousness\nunzen\nunzephyrlike\nunzone\nunzoned\nup\nupaisle\nupaithric\nupalley\nupalong\nupanishadic\nupapurana\nuparch\nuparching\nuparise\nuparm\nuparna\nupas\nupattic\nupavenue\nupbank\nupbar\nupbay\nupbear\nupbearer\nupbeat\nupbelch\nupbelt\nupbend\nupbid\nupbind\nupblacken\nupblast\nupblaze\nupblow\nupboil\nupbolster\nupbolt\nupboost\nupborne\nupbotch\nupboulevard\nupbound\nupbrace\nupbraid\nupbraider\nupbraiding\nupbraidingly\nupbray\nupbreak\nupbred\nupbreed\nupbreeze\nupbrighten\nupbrim\nupbring\nupbristle\nupbroken\nupbrook\nupbrought\nupbrow\nupbubble\nupbuild\nupbuilder\nupbulging\nupbuoy\nupbuoyance\nupburn\nupburst\nupbuy\nupcall\nupcanal\nupcanyon\nupcarry\nupcast\nupcatch\nupcaught\nupchamber\nupchannel\nupchariot\nupchimney\nupchoke\nupchuck\nupcity\nupclimb\nupclose\nupcloser\nupcoast\nupcock\nupcoil\nupcolumn\nupcome\nupcoming\nupconjure\nupcountry\nupcourse\nupcover\nupcrane\nupcrawl\nupcreek\nupcreep\nupcrop\nupcrowd\nupcry\nupcurl\nupcurrent\nupcurve\nupcushion\nupcut\nupdart\nupdate\nupdeck\nupdelve\nupdive\nupdo\nupdome\nupdraft\nupdrag\nupdraw\nupdrink\nupdry\nupeat\nupend\nupeygan\nupfeed\nupfield\nupfill\nupfingered\nupflame\nupflare\nupflash\nupflee\nupflicker\nupfling\nupfloat\nupflood\nupflow\nupflower\nupflung\nupfly\nupfold\nupfollow\nupframe\nupfurl\nupgale\nupgang\nupgape\nupgather\nupgaze\nupget\nupgird\nupgirt\nupgive\nupglean\nupglide\nupgo\nupgorge\nupgrade\nupgrave\nupgrow\nupgrowth\nupgully\nupgush\nuphand\nuphang\nupharbor\nupharrow\nuphasp\nupheal\nupheap\nuphearted\nupheaval\nupheavalist\nupheave\nupheaven\nupheld\nuphelm\nuphelya\nupher\nuphill\nuphillward\nuphoard\nuphoist\nuphold\nupholden\nupholder\nupholster\nupholstered\nupholsterer\nupholsteress\nupholsterous\nupholstery\nupholsterydom\nupholstress\nuphung\nuphurl\nupisland\nupjerk\nupjet\nupkeep\nupkindle\nupknell\nupknit\nupla\nupladder\nuplaid\nuplake\nupland\nuplander\nuplandish\nuplane\nuplay\nuplead\nupleap\nupleg\nuplick\nuplift\nupliftable\nuplifted\nupliftedly\nupliftedness\nuplifter\nuplifting\nupliftingly\nupliftingness\nupliftitis\nupliftment\nuplight\nuplimb\nuplimber\nupline\nuplock\nuplong\nuplook\nuplooker\nuploom\nuploop\nuplying\nupmaking\nupmast\nupmix\nupmost\nupmount\nupmountain\nupmove\nupness\nupo\nupon\nuppard\nuppent\nupper\nupperch\nuppercut\nupperer\nupperest\nupperhandism\nuppermore\nuppermost\nuppers\nuppertendom\nuppile\nupping\nuppish\nuppishly\nuppishness\nuppity\nupplough\nupplow\nuppluck\nuppoint\nuppoise\nuppop\nuppour\nuppowoc\nupprick\nupprop\nuppuff\nuppull\nuppush\nupquiver\nupraisal\nupraise\nupraiser\nupreach\nuprear\nuprein\nuprend\nuprender\nuprest\nuprestore\nuprid\nupridge\nupright\nuprighteous\nuprighteously\nuprighteousness\nuprighting\nuprightish\nuprightly\nuprightness\nuprights\nuprip\nuprisal\nuprise\nuprisement\nuprisen\nupriser\nuprising\nuprist\nuprive\nupriver\nuproad\nuproar\nuproariness\nuproarious\nuproariously\nuproariousness\nuproom\nuproot\nuprootal\nuprooter\nuprose\nuprouse\nuproute\nuprun\nuprush\nupsaddle\nupscale\nupscrew\nupscuddle\nupseal\nupseek\nupseize\nupsend\nupset\nupsetment\nupsettable\nupsettal\nupsetted\nupsetter\nupsetting\nupsettingly\nupsey\nupshaft\nupshear\nupsheath\nupshoot\nupshore\nupshot\nupshoulder\nupshove\nupshut\nupside\nupsides\nupsighted\nupsiloid\nupsilon\nupsilonism\nupsit\nupsitten\nupsitting\nupslant\nupslip\nupslope\nupsmite\nupsnatch\nupsoak\nupsoar\nupsolve\nupspeak\nupspear\nupspeed\nupspew\nupspin\nupspire\nupsplash\nupspout\nupspread\nupspring\nupsprinkle\nupsprout\nupspurt\nupstaff\nupstage\nupstair\nupstairs\nupstamp\nupstand\nupstander\nupstanding\nupstare\nupstart\nupstartism\nupstartle\nupstartness\nupstate\nupstater\nupstaunch\nupstay\nupsteal\nupsteam\nupstem\nupstep\nupstick\nupstir\nupstraight\nupstream\nupstreamward\nupstreet\nupstretch\nupstrike\nupstrive\nupstroke\nupstruggle\nupsuck\nupsun\nupsup\nupsurge\nupsurgence\nupswallow\nupswarm\nupsway\nupsweep\nupswell\nupswing\nuptable\nuptake\nuptaker\nuptear\nuptemper\nuptend\nupthrow\nupthrust\nupthunder\nuptide\nuptie\nuptill\nuptilt\nuptorn\nuptoss\nuptower\nuptown\nuptowner\nuptrace\nuptrack\nuptrail\nuptrain\nuptree\nuptrend\nuptrill\nuptrunk\nuptruss\nuptube\nuptuck\nupturn\nuptwined\nuptwist\nUpupa\nUpupidae\nupupoid\nupvalley\nupvomit\nupwaft\nupwall\nupward\nupwardly\nupwardness\nupwards\nupwarp\nupwax\nupway\nupways\nupwell\nupwent\nupwheel\nupwhelm\nupwhir\nupwhirl\nupwind\nupwith\nupwork\nupwound\nupwrap\nupwreathe\nupwrench\nupwring\nupwrought\nupyard\nupyoke\nur\nura\nurachal\nurachovesical\nurachus\nuracil\nuraemic\nuraeus\nUragoga\nUral\nural\nurali\nUralian\nUralic\nuraline\nuralite\nuralitic\nuralitization\nuralitize\nuralium\nuramido\nuramil\nuramilic\nuramino\nUran\nuran\nuranalysis\nuranate\nUrania\nUranian\nuranic\nUranicentric\nuranidine\nuraniferous\nuraniid\nUraniidae\nuranin\nuranine\nuraninite\nuranion\nuraniscochasma\nuraniscoplasty\nuraniscoraphy\nuraniscorrhaphy\nuranism\nuranist\nuranite\nuranitic\nuranium\nuranocircite\nuranographer\nuranographic\nuranographical\nuranographist\nuranography\nuranolatry\nuranolite\nuranological\nuranology\nuranometria\nuranometrical\nuranometry\nuranophane\nuranophotography\nuranoplastic\nuranoplasty\nuranoplegia\nuranorrhaphia\nuranorrhaphy\nuranoschisis\nuranoschism\nuranoscope\nuranoscopia\nuranoscopic\nUranoscopidae\nUranoscopus\nuranoscopy\nuranospathite\nuranosphaerite\nuranospinite\nuranostaphyloplasty\nuranostaphylorrhaphy\nuranotantalite\nuranothallite\nuranothorite\nuranotil\nuranous\nUranus\nuranyl\nuranylic\nurao\nurare\nurari\nUrartaean\nUrartic\nurase\nurataemia\nurate\nuratemia\nuratic\nuratoma\nuratosis\nuraturia\nurazine\nurazole\nurbacity\nurbainite\nUrban\nurban\nurbane\nurbanely\nurbaneness\nurbanism\nUrbanist\nurbanist\nurbanite\nurbanity\nurbanization\nurbanize\nurbarial\nurbian\nurbic\nUrbicolae\nurbicolous\nurbification\nurbify\nurbinate\nurceiform\nurceolar\nurceolate\nurceole\nurceoli\nUrceolina\nurceolus\nurceus\nurchin\nurchiness\nurchinlike\nurchinly\nurd\nurde\nurdee\nUrdu\nure\nurea\nureal\nureameter\nureametry\nurease\nurechitin\nurechitoxin\nuredema\nUredinales\nuredine\nUredineae\nuredineal\nuredineous\nuredinia\nuredinial\nUrediniopsis\nurediniospore\nurediniosporic\nuredinium\nuredinoid\nuredinologist\nuredinology\nuredinous\nUredo\nuredo\nuredosorus\nuredospore\nuredosporic\nuredosporiferous\nuredosporous\nuredostage\nureic\nureid\nureide\nureido\nuremia\nuremic\nUrena\nurent\nureometer\nureometry\nureosecretory\nuresis\nuretal\nureter\nureteral\nureteralgia\nuretercystoscope\nureterectasia\nureterectasis\nureterectomy\nureteric\nureteritis\nureterocele\nureterocervical\nureterocolostomy\nureterocystanastomosis\nureterocystoscope\nureterocystostomy\nureterodialysis\nureteroenteric\nureteroenterostomy\nureterogenital\nureterogram\nureterograph\nureterography\nureterointestinal\nureterolith\nureterolithiasis\nureterolithic\nureterolithotomy\nureterolysis\nureteronephrectomy\nureterophlegma\nureteroplasty\nureteroproctostomy\nureteropyelitis\nureteropyelogram\nureteropyelography\nureteropyelonephritis\nureteropyelostomy\nureteropyosis\nureteroradiography\nureterorectostomy\nureterorrhagia\nureterorrhaphy\nureterosalpingostomy\nureterosigmoidostomy\nureterostegnosis\nureterostenoma\nureterostenosis\nureterostoma\nureterostomy\nureterotomy\nureterouteral\nureterovaginal\nureterovesical\nurethan\nurethane\nurethra\nurethrae\nurethragraph\nurethral\nurethralgia\nurethrameter\nurethrascope\nurethratome\nurethratresia\nurethrectomy\nurethremphraxis\nurethreurynter\nurethrism\nurethritic\nurethritis\nurethroblennorrhea\nurethrobulbar\nurethrocele\nurethrocystitis\nurethrogenital\nurethrogram\nurethrograph\nurethrometer\nurethropenile\nurethroperineal\nurethrophyma\nurethroplastic\nurethroplasty\nurethroprostatic\nurethrorectal\nurethrorrhagia\nurethrorrhaphy\nurethrorrhea\nurethrorrhoea\nurethroscope\nurethroscopic\nurethroscopical\nurethroscopy\nurethrosexual\nurethrospasm\nurethrostaxis\nurethrostenosis\nurethrostomy\nurethrotome\nurethrotomic\nurethrotomy\nurethrovaginal\nurethrovesical\nurethylan\nuretic\nureylene\nurf\nurfirnis\nurge\nurgence\nurgency\nurgent\nurgently\nurgentness\nurger\nUrginea\nurging\nurgingly\nUrgonian\nurheen\nUri\nUria\nUriah\nurial\nUrian\nuric\nuricacidemia\nuricaciduria\nuricaemia\nuricaemic\nuricemia\nuricemic\nuricolysis\nuricolytic\nuridrosis\nUriel\nurinaemia\nurinal\nurinalist\nurinalysis\nurinant\nurinarium\nurinary\nurinate\nurination\nurinative\nurinator\nurine\nurinemia\nuriniferous\nuriniparous\nurinocryoscopy\nurinogenital\nurinogenitary\nurinogenous\nurinologist\nurinology\nurinomancy\nurinometer\nurinometric\nurinometry\nurinoscopic\nurinoscopist\nurinoscopy\nurinose\nurinosexual\nurinous\nurinousness\nurite\nurlar\nurled\nurling\nurluch\nurman\nurn\nurna\nurnae\nurnal\nurnflower\nurnful\nurning\nurningism\nurnism\nurnlike\nurnmaker\nUro\nuroacidimeter\nuroazotometer\nurobenzoic\nurobilin\nurobilinemia\nurobilinogen\nurobilinogenuria\nurobilinuria\nurocanic\nurocele\nUrocerata\nurocerid\nUroceridae\nurochloralic\nurochord\nUrochorda\nurochordal\nurochordate\nurochrome\nurochromogen\nUrocoptidae\nUrocoptis\nurocyanogen\nUrocyon\nurocyst\nurocystic\nUrocystis\nurocystitis\nurodaeum\nUrodela\nurodelan\nurodele\nurodelous\nurodialysis\nurodynia\nuroedema\nuroerythrin\nurofuscohematin\nurogaster\nurogastric\nurogenic\nurogenital\nurogenitary\nurogenous\nuroglaucin\nUroglena\nurogram\nurography\nurogravimeter\nurohematin\nurohyal\nurolagnia\nuroleucic\nuroleucinic\nurolith\nurolithiasis\nurolithic\nurolithology\nurologic\nurological\nurologist\nurology\nurolutein\nurolytic\nuromancy\nuromantia\nuromantist\nUromastix\nuromelanin\nuromelus\nuromere\nuromeric\nurometer\nUromyces\nUromycladium\nuronephrosis\nuronic\nuronology\nuropatagium\nUropeltidae\nurophanic\nurophanous\nurophein\nUrophlyctis\nurophthisis\nuroplania\nuropod\nuropodal\nuropodous\nuropoetic\nuropoiesis\nuropoietic\nuroporphyrin\nuropsile\nUropsilus\nuroptysis\nUropygi\nuropygial\nuropygium\nuropyloric\nurorosein\nurorrhagia\nurorrhea\nurorubin\nurosaccharometry\nurosacral\nuroschesis\nuroscopic\nuroscopist\nuroscopy\nurosepsis\nuroseptic\nurosis\nurosomatic\nurosome\nurosomite\nurosomitic\nurostea\nurostealith\nurostegal\nurostege\nurostegite\nurosteon\nurosternite\nurosthene\nurosthenic\nurostylar\nurostyle\nurotoxia\nurotoxic\nurotoxicity\nurotoxin\nurotoxy\nuroxanate\nuroxanic\nuroxanthin\nuroxin\nurradhus\nurrhodin\nurrhodinic\nUrs\nUrsa\nursal\nursicidal\nursicide\nUrsid\nUrsidae\nursiform\nursigram\nursine\nursoid\nursolic\nurson\nursone\nursuk\nUrsula\nUrsuline\nUrsus\nUrtica\nurtica\nUrticaceae\nurticaceous\nUrticales\nurticant\nurticaria\nurticarial\nurticarious\nUrticastrum\nurticate\nurticating\nurtication\nurticose\nurtite\nUru\nurubu\nurucu\nurucuri\nUruguayan\nuruisg\nUrukuena\nurunday\nurus\nurushi\nurushic\nurushinic\nurushiol\nurushiye\nurva\nus\nusability\nusable\nusableness\nusage\nusager\nusance\nusar\nusara\nusaron\nusation\nuse\nused\nusedly\nusedness\nusednt\nusee\nuseful\nusefullish\nusefully\nusefulness\nusehold\nuseless\nuselessly\nuselessness\nusent\nuser\nush\nushabti\nushabtiu\nUshak\nUsheen\nusher\nusherance\nusherdom\nusherer\nusheress\nusherette\nUsherian\nusherian\nusherism\nusherless\nushership\nusings\nUsipetes\nusitate\nusitative\nUskara\nUskok\nUsnea\nusnea\nUsneaceae\nusneaceous\nusneoid\nusnic\nusninic\nUspanteca\nusque\nusquebaugh\nusself\nussels\nusselven\nussingite\nust\nUstarana\nuster\nUstilaginaceae\nustilaginaceous\nUstilaginales\nustilagineous\nUstilaginoidea\nUstilago\nustion\nustorious\nustulate\nustulation\nUstulina\nusual\nusualism\nusually\nusualness\nusuary\nusucapient\nusucapion\nusucapionary\nusucapt\nusucaptable\nusucaption\nusucaptor\nusufruct\nusufructuary\nUsun\nusure\nusurer\nusurerlike\nusuress\nusurious\nusuriously\nusuriousness\nusurp\nusurpation\nusurpative\nusurpatively\nusurpatory\nusurpature\nusurpedly\nusurper\nusurpership\nusurping\nusurpingly\nusurpment\nusurpor\nusurpress\nusury\nusward\nuswards\nut\nUta\nuta\nUtah\nUtahan\nutahite\nutai\nutas\nutch\nutchy\nUte\nutees\nutensil\nuteralgia\nuterectomy\nuteri\nuterine\nuteritis\nuteroabdominal\nuterocele\nuterocervical\nuterocystotomy\nuterofixation\nuterogestation\nuterogram\nuterography\nuterointestinal\nuterolith\nuterology\nuteromania\nuterometer\nuteroovarian\nuteroparietal\nuteropelvic\nuteroperitoneal\nuteropexia\nuteropexy\nuteroplacental\nuteroplasty\nuterosacral\nuterosclerosis\nuteroscope\nuterotomy\nuterotonic\nuterotubal\nuterovaginal\nuteroventral\nuterovesical\nuterus\nutfangenethef\nutfangethef\nutfangthef\nutfangthief\nutick\nutile\nutilitarian\nutilitarianism\nutilitarianist\nutilitarianize\nutilitarianly\nutility\nutilizable\nutilization\nutilize\nutilizer\nutinam\nutmost\nutmostness\nUtopia\nutopia\nUtopian\nutopian\nutopianism\nutopianist\nUtopianize\nUtopianizer\nutopianizer\nutopiast\nutopism\nutopist\nutopistic\nutopographer\nUtraquism\nutraquist\nutraquistic\nUtrecht\nutricle\nutricul\nutricular\nUtricularia\nUtriculariaceae\nutriculate\nutriculiferous\nutriculiform\nutriculitis\nutriculoid\nutriculoplastic\nutriculoplasty\nutriculosaccular\nutriculose\nutriculus\nutriform\nutrubi\nutrum\nutsuk\nutter\nutterability\nutterable\nutterableness\nutterance\nutterancy\nutterer\nutterless\nutterly\nuttermost\nutterness\nutu\nutum\nuturuncu\nuva\nuval\nuvalha\nuvanite\nuvarovite\nuvate\nuvea\nuveal\nuveitic\nuveitis\nUvella\nuveous\nuvic\nuvid\nuviol\nuvitic\nuvitinic\nuvito\nuvitonic\nuvrou\nuvula\nuvulae\nuvular\nUvularia\nuvularly\nuvulitis\nuvuloptosis\nuvulotome\nuvulotomy\nuvver\nuxorial\nuxoriality\nuxorially\nuxoricidal\nuxoricide\nuxorious\nuxoriously\nuxoriousness\nuzan\nuzara\nuzarin\nuzaron\nUzbak\nUzbeg\nUzbek\nV\nv\nvaagmer\nvaalite\nVaalpens\nvacabond\nvacancy\nvacant\nvacanthearted\nvacantheartedness\nvacantly\nvacantness\nvacantry\nvacatable\nvacate\nvacation\nvacational\nvacationer\nvacationist\nvacationless\nvacatur\nVaccaria\nvaccary\nvaccenic\nvaccicide\nvaccigenous\nvaccina\nvaccinable\nvaccinal\nvaccinate\nvaccination\nvaccinationist\nvaccinator\nvaccinatory\nvaccine\nvaccinee\nvaccinella\nvaccinia\nVacciniaceae\nvacciniaceous\nvaccinial\nvaccinifer\nvacciniform\nvacciniola\nvaccinist\nVaccinium\nvaccinium\nvaccinization\nvaccinogenic\nvaccinogenous\nvaccinoid\nvaccinophobia\nvaccinotherapy\nvache\nVachellia\nvachette\nvacillancy\nvacillant\nvacillate\nvacillating\nvacillatingly\nvacillation\nvacillator\nvacillatory\nvacoa\nvacona\nvacoua\nvacouf\nvacual\nvacuate\nvacuation\nvacuefy\nvacuist\nvacuity\nvacuolar\nvacuolary\nvacuolate\nvacuolated\nvacuolation\nvacuole\nvacuolization\nvacuome\nvacuometer\nvacuous\nvacuously\nvacuousness\nvacuum\nvacuuma\nvacuumize\nvade\nVadim\nvadimonium\nvadimony\nvadium\nvadose\nvady\nvag\nvagabond\nvagabondage\nvagabondager\nvagabondia\nvagabondish\nvagabondism\nvagabondismus\nvagabondize\nvagabondizer\nvagabondry\nvagal\nvagarian\nvagarious\nvagariously\nvagarish\nvagarisome\nvagarist\nvagaristic\nvagarity\nvagary\nvagas\nvage\nvagiform\nvagile\nvagina\nvaginal\nvaginalectomy\nvaginaless\nvaginalitis\nvaginant\nvaginate\nvaginated\nvaginectomy\nvaginervose\nVaginicola\nvaginicoline\nvaginicolous\nvaginiferous\nvaginipennate\nvaginismus\nvaginitis\nvaginoabdominal\nvaginocele\nvaginodynia\nvaginofixation\nvaginolabial\nvaginometer\nvaginomycosis\nvaginoperineal\nvaginoperitoneal\nvaginopexy\nvaginoplasty\nvaginoscope\nvaginoscopy\nvaginotome\nvaginotomy\nvaginovesical\nvaginovulvar\nvaginula\nvaginulate\nvaginule\nvagitus\nVagnera\nvagoaccessorius\nvagodepressor\nvagoglossopharyngeal\nvagogram\nvagolysis\nvagosympathetic\nvagotomize\nvagotomy\nvagotonia\nvagotonic\nvagotropic\nvagotropism\nvagrance\nvagrancy\nvagrant\nvagrantism\nvagrantize\nvagrantlike\nvagrantly\nvagrantness\nvagrate\nvagrom\nvague\nvaguely\nvagueness\nvaguish\nvaguity\nvagulous\nvagus\nvahine\nVai\nVaidic\nvail\nvailable\nvain\nvainful\nvainglorious\nvaingloriously\nvaingloriousness\nvainglory\nvainly\nvainness\nvair\nvairagi\nvaire\nvairy\nVaishnava\nVaishnavism\nvaivode\nvajra\nvajrasana\nvakass\nvakia\nvakil\nvakkaliga\nVal\nvalance\nvalanced\nvalanche\nvalbellite\nvale\nvalediction\nvaledictorian\nvaledictorily\nvaledictory\nvalence\nValencia\nValencian\nvalencianite\nValenciennes\nvalency\nvalent\nValentide\nValentin\nValentine\nvalentine\nValentinian\nValentinianism\nvalentinite\nvaleral\nvaleraldehyde\nvaleramide\nvalerate\nValeria\nvalerian\nValeriana\nValerianaceae\nvalerianaceous\nValerianales\nvalerianate\nValerianella\nValerianoides\nvaleric\nValerie\nvalerin\nvalerolactone\nvalerone\nvaleryl\nvalerylene\nvalet\nvaleta\nvaletage\nvaletdom\nvalethood\nvaletism\nvaletry\nvaletudinarian\nvaletudinarianism\nvaletudinariness\nvaletudinarist\nvaletudinarium\nvaletudinary\nvaleur\nvaleward\nvalgoid\nvalgus\nvalhall\nValhalla\nVali\nvali\nvaliance\nvaliancy\nvaliant\nvaliantly\nvaliantness\nvalid\nvalidate\nvalidation\nvalidatory\nvalidification\nvalidity\nvalidly\nvalidness\nvaline\nvalise\nvaliseful\nvaliship\nValkyr\nValkyria\nValkyrian\nValkyrie\nvall\nvallancy\nvallar\nvallary\nvallate\nvallated\nvallation\nvallecula\nvallecular\nvalleculate\nvallevarite\nvalley\nvalleyful\nvalleyite\nvalleylet\nvalleylike\nvalleyward\nvalleywise\nvallicula\nvallicular\nvallidom\nvallis\nValliscaulian\nVallisneria\nVallisneriaceae\nvallisneriaceous\nVallombrosan\nVallota\nvallum\nValmy\nValois\nvalonia\nValoniaceae\nvaloniaceous\nvalor\nvalorization\nvalorize\nvalorous\nvalorously\nvalorousness\nValsa\nValsaceae\nValsalvan\nvalse\nvalsoid\nvaluable\nvaluableness\nvaluably\nvaluate\nvaluation\nvaluational\nvaluator\nvalue\nvalued\nvalueless\nvaluelessness\nvaluer\nvaluta\nvalva\nvalval\nValvata\nvalvate\nValvatidae\nvalve\nvalved\nvalveless\nvalvelet\nvalvelike\nvalveman\nvalviferous\nvalviform\nvalvotomy\nvalvula\nvalvular\nvalvulate\nvalvule\nvalvulitis\nvalvulotome\nvalvulotomy\nvalyl\nvalylene\nvambrace\nvambraced\nvamfont\nvammazsa\nvamoose\nvamp\nvamped\nvamper\nvamphorn\nvampire\nvampireproof\nvampiric\nvampirish\nvampirism\nvampirize\nvamplate\nvampproof\nVampyrella\nVampyrellidae\nVampyrum\nVan\nvan\nvanadate\nvanadiate\nvanadic\nvanadiferous\nvanadinite\nvanadium\nvanadosilicate\nvanadous\nvanadyl\nVanaheim\nvanaprastha\nVance\nvancourier\nVancouveria\nVanda\nVandal\nVandalic\nvandalish\nvandalism\nvandalistic\nvandalization\nvandalize\nvandalroot\nVandemonian\nVandemonianism\nVandiemenian\nVandyke\nvane\nvaned\nvaneless\nvanelike\nVanellus\nVanessa\nvanessian\nvanfoss\nvang\nvangee\nvangeli\nvanglo\nvanguard\nVanguardist\nVangueria\nvanilla\nvanillal\nvanillaldehyde\nvanillate\nvanille\nvanillery\nvanillic\nvanillin\nvanillinic\nvanillism\nvanilloes\nvanillon\nvanilloyl\nvanillyl\nVanir\nvanish\nvanisher\nvanishing\nvanishingly\nvanishment\nVanist\nvanitarianism\nvanitied\nvanity\nvanjarrah\nvanman\nvanmost\nVannai\nvanner\nvannerman\nvannet\nVannic\nvanquish\nvanquishable\nvanquisher\nvanquishment\nvansire\nvantage\nvantageless\nvantbrace\nvantbrass\nvanward\nvapid\nvapidism\nvapidity\nvapidly\nvapidness\nvapocauterization\nvapographic\nvapography\nvapor\nvaporability\nvaporable\nvaporarium\nvaporary\nvaporate\nvapored\nvaporer\nvaporescence\nvaporescent\nvaporiferous\nvaporiferousness\nvaporific\nvaporiform\nvaporimeter\nvaporing\nvaporingly\nvaporish\nvaporishness\nvaporium\nvaporizable\nvaporization\nvaporize\nvaporizer\nvaporless\nvaporlike\nvaporograph\nvaporographic\nvaporose\nvaporoseness\nvaporosity\nvaporous\nvaporously\nvaporousness\nvaportight\nvapory\nvapulary\nvapulate\nvapulation\nvapulatory\nvara\nvarahan\nvaran\nVaranger\nVarangi\nVarangian\nvaranid\nVaranidae\nVaranoid\nVaranus\nVarda\nvardapet\nvardy\nvare\nvarec\nvareheaded\nvareuse\nvargueno\nvari\nvariability\nvariable\nvariableness\nvariably\nVariag\nvariance\nvariancy\nvariant\nvariate\nvariation\nvariational\nvariationist\nvariatious\nvariative\nvariatively\nvariator\nvarical\nvaricated\nvarication\nvaricella\nvaricellar\nvaricellate\nvaricellation\nvaricelliform\nvaricelloid\nvaricellous\nvarices\nvariciform\nvaricoblepharon\nvaricocele\nvaricoid\nvaricolored\nvaricolorous\nvaricose\nvaricosed\nvaricoseness\nvaricosis\nvaricosity\nvaricotomy\nvaricula\nvaried\nvariedly\nvariegate\nvariegated\nvariegation\nvariegator\nvarier\nvarietal\nvarietally\nvarietism\nvarietist\nvariety\nvariform\nvariformed\nvariformity\nvariformly\nvarigradation\nvariocoupler\nvariola\nvariolar\nVariolaria\nvariolate\nvariolation\nvariole\nvariolic\nvarioliform\nvariolite\nvariolitic\nvariolitization\nvariolization\nvarioloid\nvariolous\nvariolovaccine\nvariolovaccinia\nvariometer\nvariorum\nvariotinted\nvarious\nvariously\nvariousness\nvariscite\nvarisse\nvarix\nvarlet\nvarletaille\nvarletess\nvarletry\nvarletto\nvarment\nvarna\nvarnashrama\nvarnish\nvarnished\nvarnisher\nvarnishing\nvarnishlike\nvarnishment\nvarnishy\nvarnpliktige\nvarnsingite\nVarolian\nVarronia\nVarronian\nvarsha\nvarsity\nVarsovian\nvarsoviana\nVaruna\nvarus\nvarve\nvarved\nvary\nvaryingly\nvas\nVasa\nvasa\nvasal\nVascons\nvascular\nvascularity\nvascularization\nvascularize\nvascularly\nvasculated\nvasculature\nvasculiferous\nvasculiform\nvasculitis\nvasculogenesis\nvasculolymphatic\nvasculomotor\nvasculose\nvasculum\nvase\nvasectomize\nvasectomy\nvaseful\nvaselet\nvaselike\nVaseline\nvasemaker\nvasemaking\nvasewise\nvasework\nvashegyite\nvasicentric\nvasicine\nvasifactive\nvasiferous\nvasiform\nvasoconstricting\nvasoconstriction\nvasoconstrictive\nvasoconstrictor\nvasocorona\nvasodentinal\nvasodentine\nvasodilatation\nvasodilatin\nvasodilating\nvasodilation\nvasodilator\nvasoepididymostomy\nvasofactive\nvasoformative\nvasoganglion\nvasohypertonic\nvasohypotonic\nvasoinhibitor\nvasoinhibitory\nvasoligation\nvasoligature\nvasomotion\nvasomotor\nvasomotorial\nvasomotoric\nvasomotory\nvasoneurosis\nvasoparesis\nvasopressor\nvasopuncture\nvasoreflex\nvasorrhaphy\nvasosection\nvasospasm\nvasospastic\nvasostimulant\nvasostomy\nvasotomy\nvasotonic\nvasotribe\nvasotripsy\nvasotrophic\nvasovesiculectomy\nvasquine\nvassal\nvassalage\nvassaldom\nvassaless\nvassalic\nvassalism\nvassality\nvassalize\nvassalless\nvassalry\nvassalship\nVassos\nvast\nvastate\nvastation\nvastidity\nvastily\nvastiness\nvastitude\nvastity\nvastly\nvastness\nvasty\nvasu\nVasudeva\nVasundhara\nvat\nVateria\nvatful\nvatic\nvatically\nVatican\nvaticanal\nvaticanic\nvaticanical\nVaticanism\nVaticanist\nVaticanization\nVaticanize\nvaticide\nvaticinal\nvaticinant\nvaticinate\nvaticination\nvaticinator\nvaticinatory\nvaticinatress\nvaticinatrix\nvatmaker\nvatmaking\nvatman\nVatteluttu\nvatter\nvau\nVaucheria\nVaucheriaceae\nvaucheriaceous\nvaudeville\nvaudevillian\nvaudevillist\nVaudism\nVaudois\nvaudy\nVaughn\nvaugnerite\nvault\nvaulted\nvaultedly\nvaulter\nvaulting\nvaultlike\nvaulty\nvaunt\nvauntage\nvaunted\nvaunter\nvauntery\nvauntful\nvauntiness\nvaunting\nvauntingly\nvauntmure\nvaunty\nvauquelinite\nVauxhall\nVauxhallian\nvauxite\nvavasor\nvavasory\nvaward\nVayu\nVazimba\nVeadar\nveal\nvealer\nvealiness\nveallike\nvealskin\nvealy\nvectigal\nvection\nvectis\nvectograph\nvectographic\nvector\nvectorial\nvectorially\nvecture\nVeda\nVedaic\nVedaism\nVedalia\nvedana\nVedanga\nVedanta\nVedantic\nVedantism\nVedantist\nVedda\nVeddoid\nvedette\nVedic\nvedika\nVediovis\nVedism\nVedist\nvedro\nVeduis\nveduis\nvee\nveen\nveep\nveer\nveerable\nveeringly\nveery\nVega\nvegasite\nvegeculture\nvegetability\nvegetable\nvegetablelike\nvegetablewise\nvegetablize\nvegetably\nvegetal\nvegetalcule\nvegetality\nvegetant\nvegetarian\nvegetarianism\nvegetate\nvegetation\nvegetational\nvegetationless\nvegetative\nvegetatively\nvegetativeness\nvegete\nvegeteness\nvegetism\nvegetive\nvegetivorous\nvegetoalkali\nvegetoalkaline\nvegetoalkaloid\nvegetoanimal\nvegetobituminous\nvegetocarbonaceous\nvegetomineral\nvehemence\nvehemency\nvehement\nvehemently\nvehicle\nvehicular\nvehicularly\nvehiculary\nvehiculate\nvehiculation\nvehiculatory\nVehmic\nvei\nveigle\nveil\nveiled\nveiledly\nveiledness\nveiler\nveiling\nveilless\nveillike\nveilmaker\nveilmaking\nVeiltail\nveily\nvein\nveinage\nveinal\nveinbanding\nveined\nveiner\nveinery\nveininess\nveining\nveinless\nveinlet\nveinous\nveinstone\nveinstuff\nveinule\nveinulet\nveinwise\nveinwork\nveiny\nVejoces\nvejoces\nVejovis\nVejoz\nvela\nvelal\nvelamen\nvelamentous\nvelamentum\nvelar\nvelardenite\nvelaric\nvelarium\nvelarize\nvelary\nvelate\nvelated\nvelation\nvelatura\nVelchanos\nveldcraft\nveldman\nveldschoen\nveldt\nveldtschoen\nVelella\nvelellidous\nvelic\nveliferous\nveliform\nveliger\nveligerous\nVelika\nvelitation\nvell\nvellala\nvelleda\nvelleity\nvellicate\nvellication\nvellicative\nvellinch\nvellon\nvellosine\nVellozia\nVelloziaceae\nvelloziaceous\nvellum\nvellumy\nvelo\nvelociman\nvelocimeter\nvelocious\nvelociously\nvelocipedal\nvelocipede\nvelocipedean\nvelocipedic\nvelocitous\nvelocity\nvelodrome\nvelometer\nvelours\nveloutine\nvelte\nvelum\nvelumen\nvelure\nVelutina\nvelutinous\nvelveret\nvelvet\nvelvetbreast\nvelveted\nvelveteen\nvelveteened\nvelvetiness\nvelveting\nvelvetleaf\nvelvetlike\nvelvetry\nvelvetseed\nvelvetweed\nvelvetwork\nvelvety\nvenada\nvenal\nvenality\nvenalization\nvenalize\nvenally\nvenalness\nVenantes\nvenanzite\nvenatic\nvenatical\nvenatically\nvenation\nvenational\nvenator\nvenatorial\nvenatorious\nvenatory\nvencola\nVend\nvend\nvendace\nVendean\nvendee\nvender\nvendetta\nvendettist\nvendibility\nvendible\nvendibleness\nvendibly\nvendicate\nVendidad\nvending\nvenditate\nvenditation\nvendition\nvenditor\nvendor\nvendue\nVened\nVenedotian\nveneer\nveneerer\nveneering\nvenefical\nveneficious\nveneficness\nveneficous\nvenenate\nvenenation\nvenene\nveneniferous\nvenenific\nvenenosalivary\nvenenous\nvenenousness\nvenepuncture\nvenerability\nvenerable\nvenerableness\nvenerably\nVeneracea\nveneracean\nveneraceous\nveneral\nVeneralia\nvenerance\nvenerant\nvenerate\nveneration\nvenerational\nvenerative\nveneratively\nvenerativeness\nvenerator\nvenereal\nvenerealness\nvenereologist\nvenereology\nvenerer\nVeneres\nvenerial\nVeneridae\nveneriform\nvenery\nvenesect\nvenesection\nvenesector\nvenesia\nVenetes\nVeneti\nVenetian\nVenetianed\nVenetic\nvenezolano\nVenezuelan\nvengeable\nvengeance\nvengeant\nvengeful\nvengefully\nvengefulness\nvengeously\nvenger\nvenial\nveniality\nvenially\nvenialness\nVenice\nvenie\nvenin\nveniplex\nvenipuncture\nvenireman\nvenison\nvenisonivorous\nvenisonlike\nvenisuture\nVenite\nVenizelist\nVenkata\nvennel\nvenner\nvenoatrial\nvenoauricular\nvenom\nvenomed\nvenomer\nvenomization\nvenomize\nvenomly\nvenomness\nvenomosalivary\nvenomous\nvenomously\nvenomousness\nvenomproof\nvenomsome\nvenomy\nvenosal\nvenosclerosis\nvenose\nvenosinal\nvenosity\nvenostasis\nvenous\nvenously\nvenousness\nvent\nventage\nventail\nventer\nVentersdorp\nventhole\nventiduct\nventifact\nventil\nventilable\nventilagin\nventilate\nventilating\nventilation\nventilative\nventilator\nventilatory\nventless\nventometer\nventose\nventoseness\nventosity\nventpiece\nventrad\nventral\nventrally\nventralmost\nventralward\nventric\nventricle\nventricolumna\nventricolumnar\nventricornu\nventricornual\nventricose\nventricoseness\nventricosity\nventricous\nventricular\nventricularis\nventriculite\nVentriculites\nventriculitic\nVentriculitidae\nventriculogram\nventriculography\nventriculoscopy\nventriculose\nventriculous\nventriculus\nventricumbent\nventriduct\nventrifixation\nventrilateral\nventrilocution\nventriloqual\nventriloqually\nventriloque\nventriloquial\nventriloquially\nventriloquism\nventriloquist\nventriloquistic\nventriloquize\nventriloquous\nventriloquously\nventriloquy\nventrimesal\nventrimeson\nventrine\nventripotency\nventripotent\nventripotential\nventripyramid\nventroaxial\nventroaxillary\nventrocaudal\nventrocystorrhaphy\nventrodorsad\nventrodorsal\nventrodorsally\nventrofixation\nventrohysteropexy\nventroinguinal\nventrolateral\nventrolaterally\nventromedial\nventromedian\nventromesal\nventromesial\nventromyel\nventroposterior\nventroptosia\nventroptosis\nventroscopy\nventrose\nventrosity\nventrosuspension\nventrotomy\nventure\nventurer\nventuresome\nventuresomely\nventuresomeness\nVenturia\nventurine\nventurous\nventurously\nventurousness\nvenue\nvenula\nvenular\nvenule\nvenulose\nVenus\nVenusian\nvenust\nVenutian\nvenville\nVeps\nVepse\nVepsish\nvera\nveracious\nveraciously\nveraciousness\nveracity\nveranda\nverandaed\nverascope\nveratral\nveratralbine\nveratraldehyde\nveratrate\nveratria\nveratric\nveratridine\nveratrine\nveratrinize\nveratrize\nveratroidine\nveratrole\nveratroyl\nVeratrum\nveratryl\nveratrylidene\nverb\nverbal\nverbalism\nverbalist\nverbality\nverbalization\nverbalize\nverbalizer\nverbally\nverbarian\nverbarium\nverbasco\nverbascose\nVerbascum\nverbate\nverbatim\nverbena\nVerbenaceae\nverbenaceous\nverbenalike\nverbenalin\nVerbenarius\nverbenate\nverbene\nverbenone\nverberate\nverberation\nverberative\nVerbesina\nverbiage\nverbicide\nverbiculture\nverbid\nverbification\nverbify\nverbigerate\nverbigeration\nverbigerative\nverbile\nverbless\nverbolatry\nverbomania\nverbomaniac\nverbomotor\nverbose\nverbosely\nverboseness\nverbosity\nverbous\nverby\nverchok\nverd\nverdancy\nverdant\nverdantly\nverdantness\nverdea\nverdelho\nverderer\nverderership\nverdet\nverdict\nverdigris\nverdigrisy\nverdin\nverditer\nverdoy\nverdugoship\nverdun\nverdure\nverdured\nverdureless\nverdurous\nverdurousness\nverecund\nverecundity\nverecundness\nverek\nveretilliform\nVeretillum\nveretillum\nverge\nvergeboard\nvergence\nvergency\nvergent\nvergentness\nverger\nvergeress\nvergerism\nvergerless\nvergership\nvergery\nvergi\nvergiform\nVergilianism\nverglas\nvergobret\nveri\nveridic\nveridical\nveridicality\nveridically\nveridicalness\nveridicous\nveridity\nverifiability\nverifiable\nverifiableness\nverifiably\nverificate\nverification\nverificative\nverificatory\nverifier\nverify\nverily\nverine\nverisimilar\nverisimilarly\nverisimilitude\nverisimilitudinous\nverisimility\nverism\nverist\nveristic\nveritability\nveritable\nveritableness\nveritably\nverite\nveritism\nveritist\nveritistic\nverity\nverjuice\nvermeil\nvermeologist\nvermeology\nVermes\nvermetid\nVermetidae\nvermetidae\nVermetus\nvermian\nvermicelli\nvermicidal\nvermicide\nvermicious\nvermicle\nvermicular\nVermicularia\nvermicularly\nvermiculate\nvermiculated\nvermiculation\nvermicule\nvermiculite\nvermiculose\nvermiculosity\nvermiculous\nvermiform\nVermiformia\nvermiformis\nvermiformity\nvermiformous\nvermifugal\nvermifuge\nvermifugous\nvermigerous\nvermigrade\nVermilingues\nVermilinguia\nvermilinguial\nvermilion\nvermilionette\nvermilionize\nvermin\nverminal\nverminate\nvermination\nverminer\nverminicidal\nverminicide\nverminiferous\nverminlike\nverminly\nverminosis\nverminous\nverminously\nverminousness\nverminproof\nverminy\nvermiparous\nvermiparousness\nvermis\nvermivorous\nvermivorousness\nvermix\nVermont\nVermonter\nVermontese\nvermorel\nvermouth\nVern\nvernacle\nvernacular\nvernacularism\nvernacularist\nvernacularity\nvernacularization\nvernacularize\nvernacularly\nvernacularness\nvernaculate\nvernal\nvernality\nvernalization\nvernalize\nvernally\nvernant\nvernation\nvernicose\nvernier\nvernile\nvernility\nvernin\nvernine\nvernition\nVernon\nVernonia\nvernoniaceous\nVernonieae\nvernonin\nVerona\nVeronal\nveronalism\nVeronese\nVeronica\nVeronicella\nVeronicellidae\nVerpa\nverre\nverrel\nverriculate\nverriculated\nverricule\nverruca\nverrucano\nVerrucaria\nVerrucariaceae\nverrucariaceous\nverrucarioid\nverrucated\nverruciferous\nverruciform\nverrucose\nverrucoseness\nverrucosis\nverrucosity\nverrucous\nverruculose\nverruga\nversability\nversable\nversableness\nversal\nversant\nversate\nversatile\nversatilely\nversatileness\nversatility\nversation\nversative\nverse\nversecraft\nversed\nverseless\nverselet\nversemaker\nversemaking\nverseman\nversemanship\nversemonger\nversemongering\nversemongery\nverser\nversesmith\nverset\nversette\nverseward\nversewright\nversicle\nversicler\nversicolor\nversicolorate\nversicolored\nversicolorous\nversicular\nversicule\nversifiable\nversifiaster\nversification\nversificator\nversificatory\nversificatrix\nversifier\nversiform\nversify\nversiloquy\nversine\nversion\nversional\nversioner\nversionist\nversionize\nversipel\nverso\nversor\nverst\nversta\nversual\nversus\nvert\nvertebra\nvertebrae\nvertebral\nvertebraless\nvertebrally\nVertebraria\nvertebrarium\nvertebrarterial\nVertebrata\nvertebrate\nvertebrated\nvertebration\nvertebre\nvertebrectomy\nvertebriform\nvertebroarterial\nvertebrobasilar\nvertebrochondral\nvertebrocostal\nvertebrodymus\nvertebrofemoral\nvertebroiliac\nvertebromammary\nvertebrosacral\nvertebrosternal\nvertex\nvertibility\nvertible\nvertibleness\nvertical\nverticalism\nverticality\nvertically\nverticalness\nvertices\nverticil\nverticillary\nverticillaster\nverticillastrate\nverticillate\nverticillated\nverticillately\nverticillation\nverticilliaceous\nverticilliose\nVerticillium\nverticillus\nverticity\nverticomental\nverticordious\nvertiginate\nvertigines\nvertiginous\nvertigo\nvertilinear\nvertimeter\nVertumnus\nVerulamian\nveruled\nverumontanum\nvervain\nvervainlike\nverve\nvervecine\nvervel\nverveled\nvervelle\nvervenia\nvervet\nvery\nVesalian\nvesania\nvesanic\nvesbite\nvesicae\nvesical\nvesicant\nvesicate\nvesication\nvesicatory\nvesicle\nvesicoabdominal\nvesicocavernous\nvesicocele\nvesicocervical\nvesicoclysis\nvesicofixation\nvesicointestinal\nvesicoprostatic\nvesicopubic\nvesicorectal\nvesicosigmoid\nvesicospinal\nvesicotomy\nvesicovaginal\nvesicular\nVesicularia\nvesicularly\nvesiculary\nvesiculase\nVesiculata\nVesiculatae\nvesiculate\nvesiculation\nvesicule\nvesiculectomy\nvesiculiferous\nvesiculiform\nvesiculigerous\nvesiculitis\nvesiculobronchial\nvesiculocavernous\nvesiculopustular\nvesiculose\nvesiculotomy\nvesiculotubular\nvesiculotympanic\nvesiculotympanitic\nvesiculous\nvesiculus\nvesicupapular\nveskit\nVespa\nvespacide\nvespal\nvesper\nvesperal\nvesperian\nvespering\nvespers\nvespertide\nvespertilian\nVespertilio\nvespertilio\nVespertiliones\nvespertilionid\nVespertilionidae\nVespertilioninae\nvespertilionine\nvespertinal\nvespertine\nvespery\nvespiary\nvespid\nVespidae\nvespiform\nVespina\nvespine\nvespoid\nVespoidea\nvessel\nvesseled\nvesselful\nvessignon\nvest\nVesta\nvestal\nVestalia\nvestalia\nvestalship\nVestas\nvestee\nvester\nvestiarian\nvestiarium\nvestiary\nvestibula\nvestibular\nvestibulary\nvestibulate\nvestibule\nvestibuled\nvestibulospinal\nvestibulum\nvestige\nvestigial\nvestigially\nVestigian\nvestigiary\nvestigium\nvestiment\nvestimental\nvestimentary\nvesting\nVestini\nVestinian\nvestiture\nvestlet\nvestment\nvestmental\nvestmented\nvestral\nvestralization\nvestrical\nvestrification\nvestrify\nvestry\nvestrydom\nvestryhood\nvestryish\nvestryism\nvestryize\nvestryman\nvestrymanly\nvestrymanship\nvestuary\nvestural\nvesture\nvesturer\nVesuvian\nvesuvian\nvesuvianite\nvesuviate\nvesuvite\nvesuvius\nveszelyite\nvet\nveta\nvetanda\nvetch\nvetchling\nvetchy\nveteran\nveterancy\nveteraness\nveteranize\nveterinarian\nveterinarianism\nveterinary\nvetitive\nvetivene\nvetivenol\nvetiver\nVetiveria\nvetiveria\nvetivert\nvetkousie\nveto\nvetoer\nvetoism\nvetoist\nvetoistic\nvetoistical\nvetust\nvetusty\nveuglaire\nveuve\nvex\nvexable\nvexation\nvexatious\nvexatiously\nvexatiousness\nvexatory\nvexed\nvexedly\nvexedness\nvexer\nvexful\nvexil\nvexillar\nvexillarious\nvexillary\nvexillate\nvexillation\nvexillum\nvexingly\nvexingness\nvext\nvia\nviability\nviable\nviaduct\nviaggiatory\nviagram\nviagraph\nviajaca\nvial\nvialful\nvialmaker\nvialmaking\nvialogue\nviameter\nviand\nviander\nviatic\nviatica\nviatical\nviaticum\nviatometer\nviator\nviatorial\nviatorially\nvibetoite\nvibex\nvibgyor\nvibix\nvibracular\nvibracularium\nvibraculoid\nvibraculum\nvibrance\nvibrancy\nvibrant\nvibrantly\nvibraphone\nvibrate\nvibratile\nvibratility\nvibrating\nvibratingly\nvibration\nvibrational\nvibrationless\nvibratiuncle\nvibratiunculation\nvibrative\nvibrato\nvibrator\nvibratory\nVibrio\nvibrioid\nvibrion\nvibrionic\nvibrissa\nvibrissae\nvibrissal\nvibrograph\nvibromassage\nvibrometer\nvibromotive\nvibronic\nvibrophone\nvibroscope\nvibroscopic\nvibrotherapeutics\nviburnic\nviburnin\nViburnum\nVic\nvicar\nvicarage\nvicarate\nvicaress\nvicarial\nvicarian\nvicarianism\nvicariate\nvicariateship\nvicarious\nvicariously\nvicariousness\nvicarly\nvicarship\nVice\nvice\nvicecomes\nvicecomital\nvicegeral\nvicegerency\nvicegerent\nvicegerentship\nviceless\nvicelike\nvicenary\nvicennial\nviceregal\nviceregally\nvicereine\nviceroy\nviceroyal\nviceroyalty\nviceroydom\nviceroyship\nvicety\nviceversally\nVichyite\nvichyssoise\nVicia\nvicianin\nvicianose\nvicilin\nvicinage\nvicinal\nvicine\nvicinity\nviciosity\nvicious\nviciously\nviciousness\nvicissitous\nvicissitude\nvicissitudinary\nvicissitudinous\nvicissitudinousness\nVick\nVicki\nVickie\nVicky\nvicoite\nvicontiel\nvictim\nvictimhood\nvictimizable\nvictimization\nvictimize\nvictimizer\nvictless\nVictor\nvictor\nvictordom\nvictorfish\nVictoria\nVictorian\nVictorianism\nVictorianize\nVictorianly\nvictoriate\nvictoriatus\nvictorine\nvictorious\nvictoriously\nvictoriousness\nvictorium\nvictory\nvictoryless\nvictress\nvictrix\nVictrola\nvictrola\nvictual\nvictualage\nvictualer\nvictualing\nvictuallership\nvictualless\nvictualry\nvictuals\nvicuna\nViddhal\nviddui\nvidendum\nvideo\nvideogenic\nvidette\nVidhyanath\nVidian\nvidonia\nvidry\nVidua\nviduage\nvidual\nvidually\nviduate\nviduated\nviduation\nViduinae\nviduine\nviduity\nviduous\nvidya\nvie\nvielle\nVienna\nViennese\nvier\nvierling\nviertel\nviertelein\nVietminh\nVietnamese\nview\nviewable\nviewably\nviewer\nviewiness\nviewless\nviewlessly\nviewly\nviewpoint\nviewsome\nviewster\nviewworthy\nviewy\nvifda\nviga\nvigentennial\nvigesimal\nvigesimation\nvigia\nvigil\nvigilance\nvigilancy\nvigilant\nvigilante\nvigilantism\nvigilantly\nvigilantness\nvigilate\nvigilation\nvigintiangular\nvigneron\nvignette\nvignetter\nvignettist\nvignin\nvigonia\nvigor\nvigorist\nvigorless\nvigorous\nvigorously\nvigorousness\nvihara\nvihuela\nvijao\nVijay\nviking\nvikingism\nvikinglike\nvikingship\nvila\nvilayet\nvile\nvilehearted\nVilela\nvilely\nvileness\nVilhelm\nVili\nvilicate\nvilification\nvilifier\nvilify\nvilifyingly\nvilipend\nvilipender\nvilipenditory\nvility\nvill\nvilla\nvilladom\nvillaette\nvillage\nvillageful\nvillagehood\nvillageless\nvillagelet\nvillagelike\nvillageous\nvillager\nvillageress\nvillagery\nvillaget\nvillageward\nvillagey\nvillagism\nvillain\nvillainage\nvillaindom\nvillainess\nvillainist\nvillainous\nvillainously\nvillainousness\nvillainproof\nvillainy\nvillakin\nvillaless\nvillalike\nvillanage\nvillanella\nvillanelle\nvillanette\nvillanous\nvillanously\nVillanova\nVillanovan\nvillar\nvillate\nvillatic\nville\nvillein\nvilleinage\nvilleiness\nvilleinhold\nvillenage\nvilliaumite\nvilliferous\nvilliform\nvilliplacental\nVilliplacentalia\nvillitis\nvilloid\nvillose\nvillosity\nvillous\nvillously\nvillus\nvim\nvimana\nvimen\nvimful\nViminal\nviminal\nvimineous\nvina\nvinaceous\nvinaconic\nvinage\nvinagron\nvinaigrette\nvinaigretted\nvinaigrier\nvinaigrous\nvinal\nVinalia\nvinasse\nvinata\nVince\nVincent\nvincent\nVincentian\nVincenzo\nVincetoxicum\nvincetoxin\nvincibility\nvincible\nvincibleness\nvincibly\nvincular\nvinculate\nvinculation\nvinculum\nVindelici\nvindemial\nvindemiate\nvindemiation\nvindemiatory\nVindemiatrix\nvindex\nvindhyan\nvindicability\nvindicable\nvindicableness\nvindicably\nvindicate\nvindication\nvindicative\nvindicatively\nvindicativeness\nvindicator\nvindicatorily\nvindicatorship\nvindicatory\nvindicatress\nvindictive\nvindictively\nvindictiveness\nvindictivolence\nvindresser\nvine\nvinea\nvineal\nvineatic\nvined\nvinegar\nvinegarer\nvinegarette\nvinegarish\nvinegarist\nvinegarroon\nvinegarweed\nvinegary\nvinegerone\nvinegrower\nvineity\nvineland\nvineless\nvinelet\nvinelike\nviner\nvinery\nvinestalk\nvinewise\nvineyard\nVineyarder\nvineyarding\nvineyardist\nvingerhoed\nVingolf\nvinhatico\nvinic\nvinicultural\nviniculture\nviniculturist\nvinifera\nviniferous\nvinification\nvinificator\nVinland\nvinny\nvino\nvinoacetous\nVinod\nvinolence\nvinolent\nvinologist\nvinology\nvinometer\nvinomethylic\nvinose\nvinosity\nvinosulphureous\nvinous\nvinously\nvinousness\nvinquish\nvint\nvinta\nvintage\nvintager\nvintaging\nvintem\nvintener\nvintlite\nvintner\nvintneress\nvintnership\nvintnery\nvintress\nvintry\nviny\nvinyl\nvinylbenzene\nvinylene\nvinylic\nvinylidene\nviol\nviola\nviolability\nviolable\nviolableness\nviolably\nViolaceae\nviolacean\nviolaceous\nviolaceously\nviolal\nViolales\nviolanin\nviolaquercitrin\nviolate\nviolater\nviolation\nviolational\nviolative\nviolator\nviolatory\nviolature\nviolence\nviolent\nviolently\nviolentness\nvioler\nviolescent\nviolet\nvioletish\nvioletlike\nviolette\nvioletwise\nviolety\nviolin\nviolina\nvioline\nviolinette\nviolinist\nviolinistic\nviolinlike\nviolinmaker\nviolinmaking\nviolist\nviolmaker\nviolmaking\nviolon\nvioloncellist\nvioloncello\nviolone\nviolotta\nvioluric\nviosterol\nVip\nviper\nVipera\nviperan\nviperess\nviperfish\nviperian\nviperid\nViperidae\nviperiform\nViperina\nViperinae\nviperine\nviperish\nviperishly\nviperlike\nviperling\nviperoid\nViperoidea\nviperous\nviperously\nviperousness\nvipery\nvipolitic\nvipresident\nviqueen\nVira\nviragin\nviraginian\nviraginity\nviraginous\nvirago\nviragoish\nviragolike\nviragoship\nviral\nVirales\nVirbius\nvire\nvirelay\nviremia\nviremic\nvirent\nvireo\nvireonine\nvirescence\nvirescent\nvirga\nvirgal\nvirgate\nvirgated\nvirgater\nvirgation\nvirgilia\nVirgilism\nvirgin\nvirginal\nVirginale\nvirginalist\nvirginality\nvirginally\nvirgineous\nvirginhead\nVirginia\nVirginian\nVirginid\nvirginitis\nvirginity\nvirginityship\nvirginium\nvirginlike\nvirginly\nvirginship\nVirgo\nvirgula\nvirgular\nVirgularia\nvirgularian\nVirgulariidae\nvirgulate\nvirgule\nvirgultum\nvirial\nviricide\nvirid\nviridene\nviridescence\nviridescent\nviridian\nviridigenous\nviridine\nviridite\nviridity\nvirific\nvirify\nvirile\nvirilely\nvirileness\nvirilescence\nvirilescent\nvirilify\nviriliously\nvirilism\nvirilist\nvirility\nviripotent\nviritrate\nvirl\nvirole\nviroled\nvirological\nvirologist\nvirology\nviron\nvirose\nvirosis\nvirous\nvirtu\nvirtual\nvirtualism\nvirtualist\nvirtuality\nvirtualize\nvirtually\nvirtue\nvirtued\nvirtuefy\nvirtuelessness\nvirtueproof\nvirtuless\nvirtuosa\nvirtuose\nvirtuosi\nvirtuosic\nvirtuosity\nvirtuoso\nvirtuosoship\nvirtuous\nvirtuouslike\nvirtuously\nvirtuousness\nvirucidal\nvirucide\nviruela\nvirulence\nvirulency\nvirulent\nvirulented\nvirulently\nvirulentness\nviruliferous\nvirus\nviruscidal\nviruscide\nvirusemic\nvis\nvisa\nvisage\nvisaged\nvisagraph\nvisarga\nVisaya\nVisayan\nviscacha\nviscera\nvisceral\nvisceralgia\nviscerally\nviscerate\nvisceration\nvisceripericardial\nvisceroinhibitory\nvisceromotor\nvisceroparietal\nvisceroperitioneal\nvisceropleural\nvisceroptosis\nvisceroptotic\nviscerosensory\nvisceroskeletal\nviscerosomatic\nviscerotomy\nviscerotonia\nviscerotonic\nviscerotrophic\nviscerotropic\nviscerous\nviscid\nviscidity\nviscidize\nviscidly\nviscidness\nviscidulous\nviscin\nviscoidal\nviscolize\nviscometer\nviscometrical\nviscometrically\nviscometry\nviscontal\nviscoscope\nviscose\nviscosimeter\nviscosimetry\nviscosity\nviscount\nviscountcy\nviscountess\nviscountship\nviscounty\nviscous\nviscously\nviscousness\nviscus\nvise\nviseman\nVishal\nVishnavite\nVishnu\nVishnuism\nVishnuite\nVishnuvite\nvisibility\nvisibilize\nvisible\nvisibleness\nvisibly\nvisie\nVisigoth\nVisigothic\nvisile\nvision\nvisional\nvisionally\nvisionarily\nvisionariness\nvisionary\nvisioned\nvisioner\nvisionic\nvisionist\nvisionize\nvisionless\nvisionlike\nvisionmonger\nvisionproof\nvisit\nvisita\nvisitable\nVisitandine\nvisitant\nvisitation\nvisitational\nvisitative\nvisitator\nvisitatorial\nvisite\nvisitee\nvisiter\nvisiting\nvisitment\nvisitor\nvisitoress\nvisitorial\nvisitorship\nvisitress\nvisitrix\nvisive\nvisne\nvison\nvisor\nvisorless\nvisorlike\nvista\nvistaed\nvistal\nvistaless\nvistamente\nVistlik\nvisto\nVistulian\nvisual\nvisualist\nvisuality\nvisualization\nvisualize\nvisualizer\nvisually\nvisuoauditory\nvisuokinesthetic\nvisuometer\nvisuopsychic\nvisuosensory\nvita\nVitaceae\nVitaglass\nvital\nvitalic\nvitalism\nvitalist\nvitalistic\nvitalistically\nvitality\nvitalization\nvitalize\nvitalizer\nvitalizing\nvitalizingly\nVitallium\nvitally\nvitalness\nvitals\nvitamer\nvitameric\nvitamin\nvitaminic\nvitaminize\nvitaminology\nvitapath\nvitapathy\nvitaphone\nvitascope\nvitascopic\nvitasti\nvitativeness\nvitellarian\nvitellarium\nvitellary\nvitellicle\nvitelliferous\nvitelligenous\nvitelligerous\nvitellin\nvitelline\nvitellogene\nvitellogenous\nvitellose\nvitellus\nviterbite\nViti\nvitiable\nvitiate\nvitiated\nvitiation\nvitiator\nviticetum\nviticulose\nviticultural\nviticulture\nviticulturer\nviticulturist\nvitiferous\nvitiliginous\nvitiligo\nvitiligoidea\nvitiosity\nVitis\nvitium\nvitochemic\nvitochemical\nvitrage\nvitrail\nvitrailed\nvitrailist\nvitrain\nvitraux\nvitreal\nvitrean\nvitrella\nvitremyte\nvitreodentinal\nvitreodentine\nvitreoelectric\nvitreosity\nvitreous\nvitreouslike\nvitreously\nvitreousness\nvitrescence\nvitrescency\nvitrescent\nvitrescibility\nvitrescible\nvitreum\nvitric\nvitrics\nvitrifaction\nvitrifacture\nvitrifiability\nvitrifiable\nvitrification\nvitriform\nvitrify\nVitrina\nvitrine\nvitrinoid\nvitriol\nvitriolate\nvitriolation\nvitriolic\nvitrioline\nvitriolizable\nvitriolization\nvitriolize\nvitriolizer\nvitrite\nvitrobasalt\nvitrophyre\nvitrophyric\nvitrotype\nvitrous\nVitruvian\nVitruvianism\nvitta\nvittate\nvitular\nvituline\nvituperable\nvituperate\nvituperation\nvituperative\nvituperatively\nvituperator\nvituperatory\nvituperious\nviuva\nviva\nvivacious\nvivaciously\nvivaciousness\nvivacity\nvivandiere\nvivarium\nvivary\nvivax\nvive\nVivek\nvively\nvivency\nviver\nViverridae\nviverriform\nViverrinae\nviverrine\nvivers\nvives\nvivianite\nvivicremation\nvivid\nvividialysis\nvividiffusion\nvividissection\nvividity\nvividly\nvividness\nvivific\nvivificate\nvivification\nvivificative\nvivificator\nvivifier\nvivify\nviviparism\nviviparity\nviviparous\nviviparously\nviviparousness\nvivipary\nviviperfuse\nvivisect\nvivisection\nvivisectional\nvivisectionally\nvivisectionist\nvivisective\nvivisector\nvivisectorium\nvivisepulture\nvixen\nvixenish\nvixenishly\nvixenishness\nvixenlike\nvixenly\nvizard\nvizarded\nvizardless\nvizardlike\nvizardmonger\nvizier\nvizierate\nviziercraft\nvizierial\nviziership\nvizircraft\nVlach\nVladimir\nVladislav\nvlei\nvoar\nvocability\nvocable\nvocably\nvocabular\nvocabularian\nvocabularied\nvocabulary\nvocabulation\nvocabulist\nvocal\nvocalic\nvocalion\nvocalise\nvocalism\nvocalist\nvocalistic\nvocality\nvocalization\nvocalize\nvocalizer\nvocaller\nvocally\nvocalness\nvocate\nvocation\nvocational\nvocationalism\nvocationalization\nvocationalize\nvocationally\nvocative\nvocatively\nVochysiaceae\nvochysiaceous\nvocicultural\nvociferance\nvociferant\nvociferate\nvociferation\nvociferative\nvociferator\nvociferize\nvociferosity\nvociferous\nvociferously\nvociferousness\nvocification\nvocimotor\nvocular\nvocule\nVod\nvodka\nvoe\nvoet\nvoeten\nVoetian\nvog\nvogesite\nvoglite\nvogue\nvoguey\nvoguish\nVogul\nvoice\nvoiced\nvoiceful\nvoicefulness\nvoiceless\nvoicelessly\nvoicelessness\nvoicelet\nvoicelike\nvoicer\nvoicing\nvoid\nvoidable\nvoidableness\nvoidance\nvoided\nvoidee\nvoider\nvoiding\nvoidless\nvoidly\nvoidness\nvoile\nvoiturette\nvoivode\nvoivodeship\nvol\nvolable\nvolage\nVolans\nvolant\nvolantly\nVolapuk\nVolapuker\nVolapukism\nVolapukist\nvolar\nvolata\nvolatic\nvolatile\nvolatilely\nvolatileness\nvolatility\nvolatilizable\nvolatilization\nvolatilize\nvolatilizer\nvolation\nvolational\nvolborthite\nVolcae\nvolcan\nVolcanalia\nvolcanian\nvolcanic\nvolcanically\nvolcanicity\nvolcanism\nvolcanist\nvolcanite\nvolcanity\nvolcanization\nvolcanize\nvolcano\nvolcanoism\nvolcanological\nvolcanologist\nvolcanologize\nvolcanology\nVolcanus\nvole\nvolemitol\nvolency\nvolent\nvolently\nvolery\nvolet\nvolhynite\nvolipresence\nvolipresent\nvolitant\nvolitate\nvolitation\nvolitational\nvolitiency\nvolitient\nvolition\nvolitional\nvolitionalist\nvolitionality\nvolitionally\nvolitionary\nvolitionate\nvolitionless\nvolitive\nvolitorial\nVolkerwanderung\nvolley\nvolleyball\nvolleyer\nvolleying\nvolleyingly\nvolost\nvolplane\nvolplanist\nVolsci\nVolscian\nvolsella\nvolsellum\nVolstead\nVolsteadism\nvolt\nVolta\nvoltaelectric\nvoltaelectricity\nvoltaelectrometer\nvoltaelectrometric\nvoltage\nvoltagraphy\nvoltaic\nVoltairian\nVoltairianize\nVoltairish\nVoltairism\nvoltaism\nvoltaite\nvoltameter\nvoltametric\nvoltammeter\nvoltaplast\nvoltatype\nvoltinism\nvoltivity\nvoltize\nvoltmeter\nvoltzite\nvolubilate\nvolubility\nvoluble\nvolubleness\nvolubly\nvolucrine\nvolume\nvolumed\nvolumenometer\nvolumenometry\nvolumescope\nvolumeter\nvolumetric\nvolumetrical\nvolumetrically\nvolumetry\nvolumette\nvoluminal\nvoluminosity\nvoluminous\nvoluminously\nvoluminousness\nvolumist\nvolumometer\nvolumometrical\nvolumometry\nvoluntariate\nvoluntarily\nvoluntariness\nvoluntarism\nvoluntarist\nvoluntaristic\nvoluntarity\nvoluntary\nvoluntaryism\nvoluntaryist\nvoluntative\nvolunteer\nvolunteerism\nvolunteerly\nvolunteership\nvolupt\nvoluptary\nvoluptas\nvoluptuarian\nvoluptuary\nvoluptuate\nvoluptuosity\nvoluptuous\nvoluptuously\nvoluptuousness\nvolupty\nVoluspa\nvoluta\nvolutate\nvolutation\nvolute\nvoluted\nVolutidae\nvolutiform\nvolutin\nvolution\nvolutoid\nvolva\nvolvate\nvolvelle\nvolvent\nVolvocaceae\nvolvocaceous\nvolvulus\nvomer\nvomerine\nvomerobasilar\nvomeronasal\nvomeropalatine\nvomica\nvomicine\nvomit\nvomitable\nvomiter\nvomiting\nvomitingly\nvomition\nvomitive\nvomitiveness\nvomito\nvomitory\nvomiture\nvomiturition\nvomitus\nvomitwort\nvondsira\nvonsenite\nvoodoo\nvoodooism\nvoodooist\nvoodooistic\nvoracious\nvoraciously\nvoraciousness\nvoracity\nvoraginous\nvorago\nvorant\nvorhand\nvorlooper\nvorondreo\nvorpal\nvortex\nvortical\nvortically\nvorticel\nVorticella\nvorticellid\nVorticellidae\nvortices\nvorticial\nvorticiform\nvorticism\nvorticist\nvorticity\nvorticose\nvorticosely\nvorticular\nvorticularly\nvortiginous\nVortumnus\nVosgian\nvota\nvotable\nvotal\nvotally\nvotaress\nvotarist\nvotary\nvotation\nVote\nvote\nvoteen\nvoteless\nvoter\nvoting\nVotish\nvotive\nvotively\nvotiveness\nvotometer\nvotress\nVotyak\nvouch\nvouchable\nvouchee\nvoucher\nvoucheress\nvouchment\nvouchsafe\nvouchsafement\nvouge\nVougeot\nVouli\nvoussoir\nvow\nvowed\nvowel\nvowelish\nvowelism\nvowelist\nvowelization\nvowelize\nvowelless\nvowellessness\nvowellike\nvowely\nvower\nvowess\nvowless\nvowmaker\nvowmaking\nvoyage\nvoyageable\nvoyager\nvoyance\nvoyeur\nvoyeurism\nvraic\nvraicker\nvraicking\nvrbaite\nvriddhi\nvrother\nVu\nvug\nvuggy\nVulcan\nVulcanalia\nVulcanalial\nVulcanalian\nVulcanian\nVulcanic\nvulcanicity\nvulcanism\nvulcanist\nvulcanite\nvulcanizable\nvulcanizate\nvulcanization\nvulcanize\nvulcanizer\nvulcanological\nvulcanologist\nvulcanology\nvulgar\nvulgare\nvulgarian\nvulgarish\nvulgarism\nvulgarist\nvulgarity\nvulgarization\nvulgarize\nvulgarizer\nvulgarlike\nvulgarly\nvulgarness\nvulgarwise\nVulgate\nvulgate\nvulgus\nvuln\nvulnerability\nvulnerable\nvulnerableness\nvulnerably\nvulnerary\nvulnerate\nvulneration\nvulnerative\nvulnerose\nvulnific\nvulnose\nVulpecula\nvulpecular\nVulpeculid\nVulpes\nvulpic\nvulpicidal\nvulpicide\nvulpicidism\nVulpinae\nvulpine\nvulpinism\nvulpinite\nvulsella\nvulsellum\nvulsinite\nVultur\nvulture\nvulturelike\nvulturewise\nVulturidae\nVulturinae\nvulturine\nvulturish\nvulturism\nvulturn\nvulturous\nvulva\nvulval\nvulvar\nvulvate\nvulviform\nvulvitis\nvulvocrural\nvulvouterine\nvulvovaginal\nvulvovaginitis\nvum\nvying\nvyingly\nW\nw\nWa\nwa\nWaac\nwaag\nwaapa\nwaar\nWaasi\nwab\nwabber\nwabble\nwabbly\nwabby\nwabe\nWabena\nwabeno\nWabi\nwabster\nWabuma\nWabunga\nWac\nwacago\nwace\nWachaga\nWachenheimer\nwachna\nWachuset\nwack\nwacke\nwacken\nwacker\nwackiness\nwacky\nWaco\nwad\nwaddent\nwadder\nwadding\nwaddler\nwaddlesome\nwaddling\nwaddlingly\nwaddly\nwaddy\nwaddywood\nWade\nwade\nwadeable\nwader\nwadi\nwading\nwadingly\nwadlike\nwadmaker\nwadmaking\nwadmal\nwadmeal\nwadna\nwadset\nwadsetter\nwae\nwaeg\nwaer\nwaesome\nwaesuck\nWaf\nWafd\nWafdist\nwafer\nwaferer\nwaferish\nwafermaker\nwafermaking\nwaferwoman\nwaferwork\nwafery\nwaff\nwaffle\nwafflike\nwaffly\nwaft\nwaftage\nwafter\nwafture\nwafty\nwag\nWaganda\nwaganging\nwagaun\nwagbeard\nwage\nwaged\nwagedom\nwageless\nwagelessness\nwagenboom\nWagener\nwager\nwagerer\nwagering\nwages\nwagesman\nwagework\nwageworker\nwageworking\nwaggable\nwaggably\nwaggel\nwagger\nwaggery\nwaggie\nwaggish\nwaggishly\nwaggishness\nwaggle\nwaggling\nwagglingly\nwaggly\nWaggumbura\nwaggy\nwaglike\nwagling\nWagneresque\nWagnerian\nWagneriana\nWagnerianism\nWagnerism\nWagnerist\nWagnerite\nwagnerite\nWagnerize\nWagogo\nWagoma\nwagon\nwagonable\nwagonage\nwagoner\nwagoness\nwagonette\nwagonful\nwagonload\nwagonmaker\nwagonmaking\nwagonman\nwagonry\nwagonsmith\nwagonway\nwagonwayman\nwagonwork\nwagonwright\nwagsome\nwagtail\nWaguha\nwagwag\nwagwants\nWagweno\nwagwit\nwah\nWahabi\nWahabiism\nWahabit\nWahabitism\nwahahe\nWahehe\nWahima\nwahine\nWahlenbergia\nwahoo\nwahpekute\nWahpeton\nwaiata\nWaibling\nWaicuri\nWaicurian\nwaif\nWaiguli\nWaiilatpuan\nwaik\nwaikly\nwaikness\nwail\nWailaki\nwailer\nwailful\nwailfully\nwailingly\nwailsome\nwaily\nwain\nwainage\nwainbote\nwainer\nwainful\nwainman\nwainrope\nwainscot\nwainscoting\nwainwright\nwaipiro\nwairch\nwaird\nwairepo\nwairsh\nwaise\nwaist\nwaistband\nwaistcloth\nwaistcoat\nwaistcoated\nwaistcoateer\nwaistcoathole\nwaistcoating\nwaistcoatless\nwaisted\nwaister\nwaisting\nwaistless\nwaistline\nwait\nwaiter\nwaiterage\nwaiterdom\nwaiterhood\nwaitering\nwaiterlike\nwaitership\nwaiting\nwaitingly\nwaitress\nwaivatua\nwaive\nwaiver\nwaivery\nwaivod\nWaiwai\nwaiwode\nwajang\nwaka\nWakamba\nwakan\nWakashan\nwake\nwakeel\nwakeful\nwakefully\nwakefulness\nwakeless\nwaken\nwakener\nwakening\nwaker\nwakes\nwaketime\nwakf\nWakhi\nwakif\nwakiki\nwaking\nwakingly\nwakiup\nwakken\nwakon\nwakonda\nWakore\nWakwafi\nwaky\nWalach\nWalachian\nwalahee\nWalapai\nWalchia\nWaldenses\nWaldensian\nwaldflute\nwaldgrave\nwaldgravine\nWaldheimia\nwaldhorn\nwaldmeister\nWaldsteinia\nwale\nwaled\nwalepiece\nWaler\nwaler\nwalewort\nwali\nwaling\nwalk\nwalkable\nwalkaway\nwalker\nwalking\nwalkist\nwalkmill\nwalkmiller\nwalkout\nwalkover\nwalkrife\nwalkside\nwalksman\nwalkway\nwalkyrie\nwall\nwallaba\nwallaby\nWallach\nwallah\nwallaroo\nWallawalla\nwallbird\nwallboard\nwalled\nwaller\nWallerian\nwallet\nwalletful\nwalleye\nwalleyed\nwallflower\nwallful\nwallhick\nwalling\nwallise\nwallless\nwallman\nWallon\nWallonian\nWalloon\nwalloon\nwallop\nwalloper\nwalloping\nwallow\nwallower\nwallowish\nwallowishly\nwallowishness\nwallpaper\nwallpapering\nwallpiece\nWallsend\nwallwise\nwallwork\nwallwort\nwally\nwalnut\nWalpapi\nWalpolean\nWalpurgis\nwalpurgite\nwalrus\nwalsh\nWalt\nwalt\nWalter\nwalter\nwalth\nWaltonian\nwaltz\nwaltzer\nwaltzlike\nwalycoat\nwamara\nwambais\nwamble\nwambliness\nwambling\nwamblingly\nwambly\nWambuba\nWambugu\nWambutti\nwame\nwamefou\nwamel\nwammikin\nwamp\nWampanoag\nwampee\nwample\nwampum\nwampumpeag\nwampus\nwamus\nwan\nWanapum\nwanchancy\nwand\nwander\nwanderable\nwanderer\nwandering\nwanderingly\nwanderingness\nWanderjahr\nwanderlust\nwanderluster\nwanderlustful\nwanderoo\nwandery\nwanderyear\nwandflower\nwandle\nwandlike\nwandoo\nWandorobo\nwandsman\nwandy\nwane\nWaneatta\nwaned\nwaneless\nwang\nwanga\nwangala\nwangan\nWangara\nwangateur\nwanghee\nwangle\nwangler\nWangoni\nwangrace\nwangtooth\nwanhope\nwanhorn\nwanigan\nwaning\nwankapin\nwankle\nwankliness\nwankly\nwanle\nwanly\nwanner\nwanness\nwannish\nwanny\nwanrufe\nwansonsy\nwant\nwantage\nwanter\nwantful\nwanthill\nwanthrift\nwanting\nwantingly\nwantingness\nwantless\nwantlessness\nwanton\nwantoner\nwantonlike\nwantonly\nwantonness\nwantwit\nwanty\nwanwordy\nwanworth\nwany\nWanyakyusa\nWanyamwezi\nWanyasa\nWanyoro\nwap\nwapacut\nWapato\nwapatoo\nwapentake\nWapisiana\nwapiti\nWapogoro\nWapokomo\nwapp\nWappato\nwappenschaw\nwappenschawing\nwapper\nwapping\nWappinger\nWappo\nwar\nwarabi\nwaratah\nwarble\nwarbled\nwarblelike\nwarbler\nwarblerlike\nwarblet\nwarbling\nwarblingly\nwarbly\nwarch\nwarcraft\nward\nwardable\nwardage\nwardapet\nwarday\nwarded\nWarden\nwarden\nwardency\nwardenry\nwardenship\nwarder\nwarderer\nwardership\nwardholding\nwarding\nwardite\nwardless\nwardlike\nwardmaid\nwardman\nwardmote\nwardress\nwardrobe\nwardrober\nwardroom\nwardship\nwardsmaid\nwardsman\nwardswoman\nwardwite\nwardwoman\nware\nWaregga\nwarehou\nwarehouse\nwarehouseage\nwarehoused\nwarehouseful\nwarehouseman\nwarehouser\nwareless\nwaremaker\nwaremaking\nwareman\nwareroom\nwarf\nwarfare\nwarfarer\nwarfaring\nwarful\nwarily\nwariness\nWaring\nwaringin\nwarish\nwarison\nwark\nwarkamoowee\nwarl\nwarless\nwarlessly\nwarlike\nwarlikely\nwarlikeness\nwarlock\nwarluck\nwarly\nwarm\nwarmable\nwarman\nwarmed\nwarmedly\nwarmer\nwarmful\nwarmhearted\nwarmheartedly\nwarmheartedness\nwarmhouse\nwarming\nwarmish\nwarmly\nwarmness\nwarmonger\nwarmongering\nwarmouth\nwarmth\nwarmthless\nwarmus\nwarn\nwarnel\nwarner\nwarning\nwarningly\nwarningproof\nwarnish\nwarnoth\nwarnt\nWarori\nwarp\nwarpable\nwarpage\nwarped\nwarper\nwarping\nwarplane\nwarple\nwarplike\nwarproof\nwarpwise\nwarragal\nwarrambool\nwarran\nwarrand\nwarrandice\nwarrant\nwarrantable\nwarrantableness\nwarrantably\nwarranted\nwarrantee\nwarranter\nwarrantise\nwarrantless\nwarrantor\nwarranty\nwarratau\nWarrau\nwarree\nWarren\nwarren\nwarrener\nwarrenlike\nwarrer\nWarri\nwarrin\nwarrior\nwarrioress\nwarriorhood\nwarriorism\nwarriorlike\nwarriorship\nwarriorwise\nwarrok\nWarsaw\nwarsaw\nwarse\nwarsel\nwarship\nwarsle\nwarsler\nwarst\nwart\nwarted\nwartern\nwartflower\nwarth\nwartime\nwartless\nwartlet\nwartlike\nwartproof\nwartweed\nwartwort\nwarty\nwartyback\nWarua\nWarundi\nwarve\nwarwards\nWarwick\nwarwickite\nwarwolf\nwarworn\nwary\nwas\nwasabi\nWasagara\nWasandawi\nWasango\nWasat\nWasatch\nWasco\nwase\nWasegua\nwasel\nwash\nwashability\nwashable\nwashableness\nWashaki\nwashaway\nwashbasin\nwashbasket\nwashboard\nwashbowl\nwashbrew\nwashcloth\nwashday\nwashdish\nwashdown\nwashed\nwashen\nwasher\nwasherless\nwasherman\nwasherwife\nwasherwoman\nwashery\nwasheryman\nwashhand\nwashhouse\nwashin\nwashiness\nwashing\nWashington\nWashingtonia\nWashingtonian\nWashingtoniana\nWashita\nwashland\nwashmaid\nwashman\nWasho\nWashoan\nwashoff\nwashout\nwashpot\nwashproof\nwashrag\nwashroad\nwashroom\nwashshed\nwashstand\nwashtail\nwashtray\nwashtrough\nwashtub\nwashway\nwashwoman\nwashwork\nwashy\nWasir\nwasnt\nWasoga\nWasp\nwasp\nwaspen\nwasphood\nwaspily\nwaspish\nwaspishly\nwaspishness\nwasplike\nwaspling\nwaspnesting\nwaspy\nwassail\nwassailer\nwassailous\nwassailry\nwassie\nwast\nwastable\nwastage\nwaste\nwastebasket\nwasteboard\nwasted\nwasteful\nwastefully\nwastefulness\nwastel\nwasteland\nwastelbread\nwasteless\nwasteman\nwastement\nwasteness\nwastepaper\nwasteproof\nwaster\nwasterful\nwasterfully\nwasterfulness\nwastethrift\nwasteword\nwasteyard\nwasting\nwastingly\nwastingness\nwastland\nwastrel\nwastrife\nwasty\nWasukuma\nWaswahili\nWat\nwat\nWatala\nwatap\nwatch\nwatchable\nwatchboat\nwatchcase\nwatchcry\nwatchdog\nwatched\nwatcher\nwatchfree\nwatchful\nwatchfully\nwatchfulness\nwatchglassful\nwatchhouse\nwatching\nwatchingly\nwatchkeeper\nwatchless\nwatchlessness\nwatchmaker\nwatchmaking\nwatchman\nwatchmanly\nwatchmanship\nwatchmate\nwatchment\nwatchout\nwatchtower\nwatchwise\nwatchwoman\nwatchword\nwatchwork\nwater\nwaterage\nwaterbailage\nwaterbelly\nWaterberg\nwaterboard\nwaterbok\nwaterbosh\nwaterbrain\nwaterchat\nwatercup\nwaterdoe\nwaterdrop\nwatered\nwaterer\nwaterfall\nwaterfinder\nwaterflood\nwaterfowl\nwaterfront\nwaterhead\nwaterhorse\nwaterie\nwaterily\nwateriness\nwatering\nwateringly\nwateringman\nwaterish\nwaterishly\nwaterishness\nWaterlander\nWaterlandian\nwaterleave\nwaterless\nwaterlessly\nwaterlessness\nwaterlike\nwaterline\nwaterlog\nwaterlogged\nwaterloggedness\nwaterlogger\nwaterlogging\nWaterloo\nwaterman\nwatermanship\nwatermark\nwatermaster\nwatermelon\nwatermonger\nwaterphone\nwaterpot\nwaterproof\nwaterproofer\nwaterproofing\nwaterproofness\nwaterquake\nwaterscape\nwatershed\nwatershoot\nwaterside\nwatersider\nwaterskin\nwatersmeet\nwaterspout\nwaterstead\nwatertight\nwatertightal\nwatertightness\nwaterward\nwaterwards\nwaterway\nwaterweed\nwaterwise\nwaterwoman\nwaterwood\nwaterwork\nwaterworker\nwaterworm\nwaterworn\nwaterwort\nwatery\nwath\nwathstead\nWatsonia\nwatt\nwattage\nwattape\nwattle\nwattlebird\nwattled\nwattless\nwattlework\nwattling\nwattman\nwattmeter\nWatusi\nwauble\nwauch\nwauchle\nwaucht\nwauf\nwaugh\nwaughy\nwauken\nwaukit\nwaukrife\nwaul\nwaumle\nwauner\nwauns\nwaup\nwaur\nWaura\nwauregan\nwauve\nwavable\nwavably\nWave\nwave\nwaved\nwaveless\nwavelessly\nwavelessness\nwavelet\nwavelike\nwavellite\nwavemark\nwavement\nwavemeter\nwaveproof\nwaver\nwaverable\nwaverer\nwavering\nwaveringly\nwaveringness\nwaverous\nwavery\nwaveson\nwaveward\nwavewise\nwavey\nwavicle\nwavily\nwaviness\nwaving\nwavingly\nWavira\nwavy\nwaw\nwawa\nwawah\nwawaskeesh\nwax\nwaxberry\nwaxbill\nwaxbird\nwaxbush\nwaxchandler\nwaxchandlery\nwaxen\nwaxer\nwaxflower\nWaxhaw\nwaxhearted\nwaxily\nwaxiness\nwaxing\nwaxingly\nwaxlike\nwaxmaker\nwaxmaking\nwaxman\nwaxweed\nwaxwing\nwaxwork\nwaxworker\nwaxworking\nwaxy\nway\nwayaka\nwayang\nWayao\nwayback\nwayberry\nwaybill\nwaybird\nwaybook\nwaybread\nwaybung\nwayfare\nwayfarer\nwayfaring\nwayfaringly\nwayfellow\nwaygang\nwaygate\nwaygoing\nwaygone\nwaygoose\nwayhouse\nwaying\nwaylaid\nwaylaidlessness\nwaylay\nwaylayer\nwayleave\nwayless\nwaymaker\nwayman\nwaymark\nwaymate\nWayne\nwaypost\nways\nwayside\nwaysider\nwaysliding\nwaythorn\nwayward\nwaywarden\nwaywardly\nwaywardness\nwaywiser\nwaywode\nwaywodeship\nwayworn\nwaywort\nwayzgoose\nWazir\nwe\nWea\nweak\nweakbrained\nweaken\nweakener\nweakening\nweakfish\nweakhanded\nweakhearted\nweakheartedly\nweakheartedness\nweakish\nweakishly\nweakishness\nweakliness\nweakling\nweakly\nweakmouthed\nweakness\nweaky\nweal\nweald\nWealden\nwealdsman\nwealth\nwealthily\nwealthiness\nwealthless\nwealthmaker\nwealthmaking\nwealthmonger\nWealthy\nwealthy\nweam\nwean\nweanable\nweanedness\nweanel\nweaner\nweanling\nWeanoc\nweanyer\nWeapemeoc\nweapon\nweaponed\nweaponeer\nweaponless\nweaponmaker\nweaponmaking\nweaponproof\nweaponry\nweaponshaw\nweaponshow\nweaponshowing\nweaponsmith\nweaponsmithy\nwear\nwearability\nwearable\nwearer\nweariable\nweariableness\nwearied\nweariedly\nweariedness\nwearier\nweariful\nwearifully\nwearifulness\nweariless\nwearilessly\nwearily\nweariness\nwearing\nwearingly\nwearish\nwearishly\nwearishness\nwearisome\nwearisomely\nwearisomeness\nwearproof\nweary\nwearying\nwearyingly\nweasand\nweasel\nweaselfish\nweasellike\nweaselly\nweaselship\nweaselskin\nweaselsnout\nweaselwise\nweaser\nweason\nweather\nweatherboard\nweatherboarding\nweatherbreak\nweathercock\nweathercockish\nweathercockism\nweathercocky\nweathered\nweatherer\nweatherfish\nweatherglass\nweathergleam\nweatherhead\nweatherheaded\nweathering\nweatherliness\nweatherly\nweathermaker\nweathermaking\nweatherman\nweathermost\nweatherology\nweatherproof\nweatherproofed\nweatherproofing\nweatherproofness\nweatherward\nweatherworn\nweathery\nweavable\nweave\nweaveable\nweaved\nweavement\nweaver\nweaverbird\nweaveress\nweaving\nweazen\nweazened\nweazeny\nweb\nwebbed\nwebber\nwebbing\nwebby\nweber\nWeberian\nwebeye\nwebfoot\nwebfooter\nwebless\nweblike\nwebmaker\nwebmaking\nwebster\nWebsterian\nwebsterite\nwebwork\nwebworm\nwecht\nwed\nwedana\nwedbed\nwedbedrip\nwedded\nweddedly\nweddedness\nwedder\nwedding\nweddinger\nwede\nwedge\nwedgeable\nwedgebill\nwedged\nwedgelike\nwedger\nwedgewise\nWedgie\nwedging\nWedgwood\nwedgy\nwedlock\nWednesday\nwedset\nwee\nweeble\nweed\nweeda\nweedable\nweedage\nweeded\nweeder\nweedery\nweedful\nweedhook\nweediness\nweedingtime\nweedish\nweedless\nweedlike\nweedling\nweedow\nweedproof\nweedy\nweek\nweekday\nweekend\nweekender\nweekly\nweekwam\nweel\nweelfard\nweelfaured\nweemen\nween\nweendigo\nweeness\nweening\nweenong\nweeny\nweep\nweepable\nweeper\nweepered\nweepful\nweeping\nweepingly\nweeps\nweepy\nweesh\nweeshy\nweet\nweetbird\nweetless\nweever\nweevil\nweeviled\nweevillike\nweevilproof\nweevily\nweewow\nweeze\nweft\nweftage\nwefted\nwefty\nWega\nwegenerian\nwegotism\nwehrlite\nWei\nweibyeite\nweichselwood\nWeierstrassian\nWeigela\nweigelite\nweigh\nweighable\nweighage\nweighbar\nweighbauk\nweighbridge\nweighbridgeman\nweighed\nweigher\nweighership\nweighhouse\nweighin\nweighing\nweighman\nweighment\nweighshaft\nweight\nweightchaser\nweighted\nweightedly\nweightedness\nweightily\nweightiness\nweighting\nweightless\nweightlessly\nweightlessness\nweightometer\nweighty\nweinbergerite\nWeinmannia\nweinschenkite\nweir\nweirangle\nweird\nweirdful\nweirdish\nweirdless\nweirdlessness\nweirdlike\nweirdliness\nweirdly\nweirdness\nweirdsome\nweirdward\nweirdwoman\nweiring\nweisbachite\nweiselbergite\nweism\nWeismannian\nWeismannism\nweissite\nWeissnichtwo\nWeitspekan\nwejack\nweka\nwekau\nwekeen\nweki\nwelcome\nwelcomeless\nwelcomely\nwelcomeness\nwelcomer\nwelcoming\nwelcomingly\nweld\nweldability\nweldable\nwelder\nwelding\nweldless\nweldment\nweldor\nWelf\nwelfare\nwelfaring\nWelfic\nwelk\nwelkin\nwelkinlike\nwell\nwellat\nwellaway\nwellborn\nwellcurb\nwellhead\nwellhole\nwelling\nwellington\nWellingtonia\nwellish\nwellmaker\nwellmaking\nwellman\nwellnear\nwellness\nwellring\nWellsian\nwellside\nwellsite\nwellspring\nwellstead\nwellstrand\nwelly\nwellyard\nwels\nWelsh\nwelsh\nwelsher\nWelshery\nWelshism\nWelshland\nWelshlike\nWelshman\nWelshness\nWelshry\nWelshwoman\nWelshy\nwelsium\nwelt\nwelted\nwelter\nwelterweight\nwelting\nWelwitschia\nwem\nwemless\nwen\nwench\nwencher\nwenchless\nwenchlike\nWenchow\nWenchowese\nWend\nwend\nwende\nWendell\nWendi\nWendic\nWendish\nWendy\nwene\nWenlock\nWenlockian\nwennebergite\nwennish\nwenny\nWenonah\nWenrohronon\nwent\nwentletrap\nwenzel\nwept\nwer\nWerchowinci\nwere\nwerebear\nwerecalf\nwerefolk\nwerefox\nwerehyena\nwerejaguar\nwereleopard\nwerent\nweretiger\nwerewolf\nwerewolfish\nwerewolfism\nwerf\nwergil\nweri\nWerner\nWernerian\nWernerism\nwernerite\nwerowance\nwert\nWerther\nWertherian\nWertherism\nwervel\nWes\nwese\nweskit\nWesleyan\nWesleyanism\nWesleyism\nwesselton\nWessexman\nwest\nwestaway\nwestbound\nweste\nwester\nwestering\nwesterliness\nwesterly\nwestermost\nwestern\nwesterner\nwesternism\nwesternization\nwesternize\nwesternly\nwesternmost\nwesterwards\nwestfalite\nwesting\nwestland\nWestlander\nwestlandways\nwestmost\nwestness\nWestphalian\nWestralian\nWestralianism\nwestward\nwestwardly\nwestwardmost\nwestwards\nwesty\nwet\nweta\nwetback\nwetbird\nwetched\nwetchet\nwether\nwetherhog\nwetherteg\nwetly\nwetness\nwettability\nwettable\nwetted\nwetter\nwetting\nwettish\nWetumpka\nweve\nwevet\nWewenoc\nwey\nWezen\nWezn\nwha\nwhabby\nwhack\nwhacker\nwhacking\nwhacky\nwhafabout\nwhale\nwhaleback\nwhalebacker\nwhalebird\nwhaleboat\nwhalebone\nwhaleboned\nwhaledom\nwhalehead\nwhalelike\nwhaleman\nwhaler\nwhaleroad\nwhalery\nwhaleship\nwhaling\nwhalish\nwhally\nwhalm\nwhalp\nwhaly\nwham\nwhamble\nwhame\nwhammle\nwhamp\nwhampee\nwhample\nwhan\nwhand\nwhang\nwhangable\nwhangam\nwhangdoodle\nwhangee\nwhanghee\nwhank\nwhap\nwhappet\nwhapuka\nwhapukee\nwhapuku\nwhar\nwhare\nwhareer\nwharf\nwharfage\nwharfhead\nwharfholder\nwharfing\nwharfinger\nwharfland\nwharfless\nwharfman\nwharfmaster\nwharfrae\nwharfside\nwharl\nwharp\nwharry\nwhart\nwharve\nwhase\nwhasle\nwhat\nwhata\nwhatabouts\nwhatever\nwhatkin\nwhatlike\nwhatna\nwhatness\nwhatnot\nwhatreck\nwhats\nwhatso\nwhatsoeer\nwhatsoever\nwhatsomever\nwhatten\nwhau\nwhauk\nwhaup\nwhaur\nwhauve\nwheal\nwhealworm\nwhealy\nwheam\nwheat\nwheatbird\nwheatear\nwheateared\nwheaten\nwheatgrower\nwheatland\nwheatless\nwheatlike\nwheatstalk\nwheatworm\nwheaty\nwhedder\nwhee\nwheedle\nwheedler\nwheedlesome\nwheedling\nwheedlingly\nwheel\nwheelage\nwheelband\nwheelbarrow\nwheelbarrowful\nwheelbird\nwheelbox\nwheeldom\nwheeled\nwheeler\nwheelery\nwheelhouse\nwheeling\nwheelingly\nwheelless\nwheellike\nwheelmaker\nwheelmaking\nwheelman\nwheelrace\nwheelroad\nwheelsman\nwheelsmith\nwheelspin\nwheelswarf\nwheelway\nwheelwise\nwheelwork\nwheelwright\nwheelwrighting\nwheely\nwheem\nwheen\nwheencat\nwheenge\nwheep\nwheeple\nwheer\nwheerikins\nwheesht\nwheetle\nwheeze\nwheezer\nwheezily\nwheeziness\nwheezingly\nwheezle\nwheezy\nwheft\nwhein\nwhekau\nwheki\nwhelk\nwhelked\nwhelker\nwhelklike\nwhelky\nwhelm\nwhelp\nwhelphood\nwhelpish\nwhelpless\nwhelpling\nwhelve\nwhemmel\nwhen\nwhenabouts\nwhenas\nwhence\nwhenceeer\nwhenceforth\nwhenceforward\nwhencesoeer\nwhencesoever\nwhencever\nwheneer\nwhenever\nwhenness\nwhenso\nwhensoever\nwhensomever\nwhere\nwhereabout\nwhereabouts\nwhereafter\nwhereanent\nwhereas\nwhereat\nwhereaway\nwhereby\nwhereer\nwherefor\nwherefore\nwherefrom\nwherein\nwhereinsoever\nwhereinto\nwhereness\nwhereof\nwhereon\nwhereout\nwhereover\nwhereso\nwheresoeer\nwheresoever\nwheresomever\nwherethrough\nwheretill\nwhereto\nwheretoever\nwheretosoever\nwhereunder\nwhereuntil\nwhereunto\nwhereup\nwhereupon\nwherever\nwherewith\nwherewithal\nwherret\nwherrit\nwherry\nwherryman\nwhet\nwhether\nwhetile\nwhetrock\nwhetstone\nwhetter\nwhew\nwhewellite\nwhewer\nwhewl\nwhewt\nwhey\nwheybeard\nwheyey\nwheyeyness\nwheyface\nwheyfaced\nwheyish\nwheyishness\nwheylike\nwheyness\nwhiba\nwhich\nwhichever\nwhichsoever\nwhichway\nwhichways\nwhick\nwhicken\nwhicker\nwhid\nwhidah\nwhidder\nwhiff\nwhiffenpoof\nwhiffer\nwhiffet\nwhiffle\nwhiffler\nwhifflery\nwhiffletree\nwhiffling\nwhifflingly\nwhiffy\nwhift\nWhig\nwhig\nWhiggamore\nwhiggamore\nWhiggarchy\nWhiggery\nWhiggess\nWhiggification\nWhiggify\nWhiggish\nWhiggishly\nWhiggishness\nWhiggism\nWhiglet\nWhigling\nwhigmaleerie\nwhigship\nwhikerby\nwhile\nwhileen\nwhilere\nwhiles\nwhilie\nwhilk\nWhilkut\nwhill\nwhillaballoo\nwhillaloo\nwhillilew\nwhilly\nwhillywha\nwhilock\nwhilom\nwhils\nwhilst\nwhilter\nwhim\nwhimberry\nwhimble\nwhimbrel\nwhimling\nwhimmy\nwhimper\nwhimperer\nwhimpering\nwhimperingly\nwhimsey\nwhimsic\nwhimsical\nwhimsicality\nwhimsically\nwhimsicalness\nwhimsied\nwhimstone\nwhimwham\nwhin\nwhinberry\nwhinchacker\nwhinchat\nwhincheck\nwhincow\nwhindle\nwhine\nwhiner\nwhinestone\nwhing\nwhinge\nwhinger\nwhininess\nwhiningly\nwhinnel\nwhinner\nwhinnock\nwhinny\nwhinstone\nwhiny\nwhinyard\nwhip\nwhipbelly\nwhipbird\nwhipcat\nwhipcord\nwhipcordy\nwhipcrack\nwhipcracker\nwhipcraft\nwhipgraft\nwhipjack\nwhipking\nwhiplash\nwhiplike\nwhipmaker\nwhipmaking\nwhipman\nwhipmanship\nwhipmaster\nwhippa\nwhippable\nwhipparee\nwhipped\nwhipper\nwhippersnapper\nwhippertail\nwhippet\nwhippeter\nwhippiness\nwhipping\nwhippingly\nwhippletree\nwhippoorwill\nwhippost\nwhippowill\nwhippy\nwhipsaw\nwhipsawyer\nwhipship\nwhipsocket\nwhipstaff\nwhipstalk\nwhipstall\nwhipster\nwhipstick\nwhipstitch\nwhipstock\nwhipt\nwhiptail\nwhiptree\nwhipwise\nwhipworm\nwhir\nwhirken\nwhirl\nwhirlabout\nwhirlblast\nwhirlbone\nwhirlbrain\nwhirled\nwhirler\nwhirley\nwhirlgig\nwhirlicane\nwhirligig\nwhirlimagig\nwhirling\nwhirlingly\nwhirlmagee\nwhirlpool\nwhirlpuff\nwhirlwig\nwhirlwind\nwhirlwindish\nwhirlwindy\nwhirly\nwhirlygigum\nwhirret\nwhirrey\nwhirroo\nwhirry\nwhirtle\nwhish\nwhisk\nwhisker\nwhiskerage\nwhiskerando\nwhiskerandoed\nwhiskered\nwhiskerer\nwhiskerette\nwhiskerless\nwhiskerlike\nwhiskery\nwhiskey\nwhiskful\nwhiskied\nwhiskified\nwhisking\nwhiskingly\nwhisky\nwhiskyfied\nwhiskylike\nwhisp\nwhisper\nwhisperable\nwhisperation\nwhispered\nwhisperer\nwhisperhood\nwhispering\nwhisperingly\nwhisperingness\nwhisperless\nwhisperous\nwhisperously\nwhisperproof\nwhispery\nwhissle\nWhisson\nwhist\nwhister\nwhisterpoop\nwhistle\nwhistlebelly\nwhistlefish\nwhistlelike\nwhistler\nWhistlerian\nwhistlerism\nwhistlewing\nwhistlewood\nwhistlike\nwhistling\nwhistlingly\nwhistly\nwhistness\nWhistonian\nWhit\nwhit\nwhite\nwhiteback\nwhitebait\nwhitebark\nwhitebeard\nwhitebelly\nwhitebill\nwhitebird\nwhiteblaze\nwhiteblow\nwhitebottle\nWhiteboy\nWhiteboyism\nwhitecap\nwhitecapper\nWhitechapel\nwhitecoat\nwhitecomb\nwhitecorn\nwhitecup\nwhited\nwhiteface\nWhitefieldian\nWhitefieldism\nWhitefieldite\nwhitefish\nwhitefisher\nwhitefishery\nWhitefoot\nwhitefoot\nwhitefootism\nwhitehanded\nwhitehass\nwhitehawse\nwhitehead\nwhiteheart\nwhitehearted\nwhitelike\nwhitely\nwhiten\nwhitener\nwhiteness\nwhitening\nwhitenose\nwhitepot\nwhiteroot\nwhiterump\nwhites\nwhitesark\nwhiteseam\nwhiteshank\nwhiteside\nwhitesmith\nwhitestone\nwhitetail\nwhitethorn\nwhitethroat\nwhitetip\nwhitetop\nwhitevein\nwhitewall\nwhitewards\nwhiteware\nwhitewash\nwhitewasher\nwhiteweed\nwhitewing\nwhitewood\nwhiteworm\nwhitewort\nwhitfinch\nwhither\nwhitherso\nwhithersoever\nwhitherto\nwhitherward\nwhiting\nwhitish\nwhitishness\nwhitleather\nWhitleyism\nwhitling\nwhitlow\nwhitlowwort\nWhitmanese\nWhitmanesque\nWhitmanism\nWhitmanize\nWhitmonday\nwhitneyite\nwhitrack\nwhits\nwhitster\nWhitsun\nWhitsunday\nWhitsuntide\nwhittaw\nwhitten\nwhittener\nwhitter\nwhitterick\nwhittle\nwhittler\nwhittling\nwhittret\nwhittrick\nwhity\nwhiz\nwhizgig\nwhizzer\nwhizzerman\nwhizziness\nwhizzing\nwhizzingly\nwhizzle\nwho\nwhoa\nwhodunit\nwhoever\nwhole\nwholehearted\nwholeheartedly\nwholeheartedness\nwholeness\nwholesale\nwholesalely\nwholesaleness\nwholesaler\nwholesome\nwholesomely\nwholesomeness\nwholewise\nwholly\nwhom\nwhomble\nwhomever\nwhomso\nwhomsoever\nwhone\nwhoo\nwhoof\nwhoop\nwhoopee\nwhooper\nwhooping\nwhoopingly\nwhooplike\nwhoops\nwhoosh\nwhop\nwhopper\nwhopping\nwhorage\nwhore\nwhoredom\nwhorelike\nwhoremaster\nwhoremasterly\nwhoremastery\nwhoremonger\nwhoremonging\nwhoreship\nwhoreson\nwhorish\nwhorishly\nwhorishness\nwhorl\nwhorled\nwhorlflower\nwhorly\nwhorlywort\nwhort\nwhortle\nwhortleberry\nwhose\nwhosen\nwhosesoever\nwhosever\nwhosomever\nwhosumdever\nwhud\nwhuff\nwhuffle\nwhulk\nwhulter\nwhummle\nwhun\nwhunstane\nwhup\nwhush\nwhuskie\nwhussle\nwhute\nwhuther\nwhutter\nwhuttering\nwhuz\nwhy\nwhyever\nwhyfor\nwhyness\nwhyo\nwi\nwice\nWichita\nwicht\nwichtisite\nwichtje\nwick\nwickawee\nwicked\nwickedish\nwickedlike\nwickedly\nwickedness\nwicken\nwicker\nwickerby\nwickerware\nwickerwork\nwickerworked\nwickerworker\nwicket\nwicketkeep\nwicketkeeper\nwicketkeeping\nwicketwork\nwicking\nwickiup\nwickless\nwickup\nwicky\nwicopy\nwid\nwidbin\nwiddendream\nwidder\nwiddershins\nwiddifow\nwiddle\nwiddy\nwide\nwidegab\nwidehearted\nwidely\nwidemouthed\nwiden\nwidener\nwideness\nwidespread\nwidespreadedly\nwidespreadly\nwidespreadness\nwidewhere\nwidework\nwidgeon\nwidish\nwidow\nwidowed\nwidower\nwidowered\nwidowerhood\nwidowership\nwidowery\nwidowhood\nwidowish\nwidowlike\nwidowly\nwidowman\nwidowy\nwidth\nwidthless\nwidthway\nwidthways\nwidthwise\nwidu\nwield\nwieldable\nwielder\nwieldiness\nwieldy\nwiener\nwienerwurst\nwienie\nwierangle\nwiesenboden\nwife\nwifecarl\nwifedom\nwifehood\nwifeism\nwifekin\nwifeless\nwifelessness\nwifelet\nwifelike\nwifeling\nwifelkin\nwifely\nwifeship\nwifeward\nwifie\nwifiekie\nwifish\nwifock\nwig\nwigan\nwigdom\nwigful\nwigged\nwiggen\nwigger\nwiggery\nwigging\nwiggish\nwiggishness\nwiggism\nwiggle\nwiggler\nwiggly\nwiggy\nwight\nwightly\nwightness\nwigless\nwiglet\nwiglike\nwigmaker\nwigmaking\nwigtail\nwigwag\nwigwagger\nwigwam\nwiikite\nWikeno\nWikstroemia\nWilbur\nWilburite\nwild\nwildbore\nwildcat\nwildcatter\nwildcatting\nwildebeest\nwilded\nwilder\nwilderedly\nwildering\nwilderment\nwilderness\nwildfire\nwildfowl\nwildgrave\nwilding\nwildish\nwildishly\nwildishness\nwildlife\nwildlike\nwildling\nwildly\nwildness\nwildsome\nwildwind\nwile\nwileful\nwileless\nwileproof\nWilfred\nwilga\nwilgers\nWilhelm\nWilhelmina\nWilhelmine\nwilily\nwiliness\nwilk\nwilkeite\nwilkin\nWilkinson\nWill\nwill\nwillable\nwillawa\nwilled\nwilledness\nwillemite\nwiller\nwillet\nwilley\nwilleyer\nwillful\nwillfully\nwillfulness\nWilliam\nwilliamsite\nWilliamsonia\nWilliamsoniaceae\nWillie\nwillie\nwillier\nwillies\nwilling\nwillinghearted\nwillinghood\nwillingly\nwillingness\nwilliwaw\nwillmaker\nwillmaking\nwillness\nwillock\nwillow\nwillowbiter\nwillowed\nwillower\nwillowish\nwillowlike\nwillowware\nwillowweed\nwillowworm\nwillowwort\nwillowy\nWillugbaeya\nWilly\nwilly\nwillyard\nwillyart\nwillyer\nWilmer\nwilsome\nwilsomely\nwilsomeness\nWilson\nWilsonian\nwilt\nwilter\nWilton\nwiltproof\nWiltshire\nwily\nwim\nwimberry\nwimble\nwimblelike\nwimbrel\nwime\nwimick\nwimple\nwimpleless\nwimplelike\nWin\nwin\nwinberry\nwince\nwincer\nwincey\nwinch\nwincher\nWinchester\nwinchman\nwincing\nwincingly\nWind\nwind\nwindable\nwindage\nwindbag\nwindbagged\nwindbaggery\nwindball\nwindberry\nwindbibber\nwindbore\nwindbracing\nwindbreak\nWindbreaker\nwindbreaker\nwindbroach\nwindclothes\nwindcuffer\nwinddog\nwinded\nwindedly\nwindedness\nwinder\nwindermost\nWindesheimer\nwindfall\nwindfallen\nwindfanner\nwindfirm\nwindfish\nwindflaw\nwindflower\nwindgall\nwindgalled\nwindhole\nwindhover\nwindigo\nwindily\nwindiness\nwinding\nwindingly\nwindingness\nwindjammer\nwindjamming\nwindlass\nwindlasser\nwindle\nwindles\nwindless\nwindlessly\nwindlessness\nwindlestrae\nwindlestraw\nwindlike\nwindlin\nwindling\nwindmill\nwindmilly\nwindock\nwindore\nwindow\nwindowful\nwindowless\nwindowlessness\nwindowlet\nwindowlight\nwindowlike\nwindowmaker\nwindowmaking\nwindowman\nwindowpane\nwindowpeeper\nwindowshut\nwindowward\nwindowwards\nwindowwise\nwindowy\nwindpipe\nwindplayer\nwindproof\nwindring\nwindroad\nwindroot\nwindrow\nwindrower\nwindscreen\nwindshield\nwindshock\nWindsor\nwindsorite\nwindstorm\nwindsucker\nwindtight\nwindup\nwindward\nwindwardly\nwindwardmost\nwindwardness\nwindwards\nwindway\nwindwayward\nwindwaywardly\nwindy\nwine\nwineball\nwineberry\nwinebibber\nwinebibbery\nwinebibbing\nWinebrennerian\nwineconner\nwined\nwineglass\nwineglassful\nwinegrower\nwinegrowing\nwinehouse\nwineless\nwinelike\nwinemay\nwinepot\nwiner\nwinery\nWinesap\nwineshop\nwineskin\nwinesop\nwinetaster\nwinetree\nwinevat\nWinfred\nwinful\nwing\nwingable\nwingbeat\nwingcut\nwinged\nwingedly\nwingedness\nwinger\nwingfish\nwinghanded\nwingle\nwingless\nwinglessness\nwinglet\nwinglike\nwingman\nwingmanship\nwingpiece\nwingpost\nwingseed\nwingspread\nwingstem\nwingy\nWinifred\nwinish\nwink\nwinkel\nwinkelman\nwinker\nwinkered\nwinking\nwinkingly\nwinkle\nwinklehawk\nwinklehole\nwinklet\nwinly\nwinna\nwinnable\nwinnard\nWinnebago\nWinnecowet\nwinnel\nwinnelstrae\nwinner\nWinnie\nwinning\nwinningly\nwinningness\nwinnings\nwinninish\nWinnipesaukee\nwinnle\nwinnonish\nwinnow\nwinnower\nwinnowing\nwinnowingly\nWinona\nwinrace\nwinrow\nwinsome\nwinsomely\nwinsomeness\nWinston\nwint\nwinter\nWinteraceae\nwinterage\nWinteranaceae\nwinterberry\nwinterbloom\nwinterbourne\nwinterdykes\nwintered\nwinterer\nwinterfeed\nwintergreen\nwinterhain\nwintering\nwinterish\nwinterishly\nwinterishness\nwinterization\nwinterize\nwinterkill\nwinterkilling\nwinterless\nwinterlike\nwinterliness\nwinterling\nwinterly\nwinterproof\nwintersome\nwintertide\nwintertime\nwinterward\nwinterwards\nwinterweed\nwintle\nwintrify\nwintrily\nwintriness\nwintrish\nwintrous\nwintry\nWintun\nwiny\nwinze\nwinzeman\nwipe\nwiper\nwippen\nwips\nwir\nwirable\nwirble\nwird\nwire\nwirebar\nwirebird\nwired\nwiredancer\nwiredancing\nwiredraw\nwiredrawer\nwiredrawn\nwirehair\nwireless\nwirelessly\nwirelessness\nwirelike\nwiremaker\nwiremaking\nwireman\nwiremonger\nWirephoto\nwirepull\nwirepuller\nwirepulling\nwirer\nwiresmith\nwirespun\nwiretail\nwireway\nwireweed\nwirework\nwireworker\nwireworking\nwireworks\nwireworm\nwirily\nwiriness\nwiring\nwirl\nwirling\nWiros\nwirr\nwirra\nwirrah\nwirrasthru\nwiry\nwis\nWisconsinite\nwisdom\nwisdomful\nwisdomless\nwisdomproof\nwisdomship\nwise\nwiseacre\nwiseacred\nwiseacredness\nwiseacredom\nwiseacreish\nwiseacreishness\nwiseacreism\nwisecrack\nwisecracker\nwisecrackery\nwisehead\nwisehearted\nwiseheartedly\nwiseheimer\nwiselike\nwiseling\nwisely\nwiseman\nwisen\nwiseness\nwisenheimer\nwisent\nwiser\nwiseweed\nwisewoman\nwish\nwisha\nwishable\nwishbone\nwished\nwishedly\nwisher\nwishful\nwishfully\nwishfulness\nwishing\nwishingly\nwishless\nwishly\nwishmay\nwishness\nWishoskan\nWishram\nwisht\nwishtonwish\nWisigothic\nwisket\nwiskinky\nwisp\nwispish\nwisplike\nwispy\nwiss\nwisse\nwissel\nwist\nWistaria\nwistaria\nwiste\nwistened\nWisteria\nwisteria\nwistful\nwistfully\nwistfulness\nwistit\nwistiti\nwistless\nwistlessness\nwistonwish\nwit\nwitan\nWitbooi\nwitch\nwitchbells\nwitchcraft\nwitched\nwitchedly\nwitchen\nwitchering\nwitchery\nwitchet\nwitchetty\nwitchhood\nwitching\nwitchingly\nwitchleaf\nwitchlike\nwitchman\nwitchmonger\nwitchuck\nwitchweed\nwitchwife\nwitchwoman\nwitchwood\nwitchwork\nwitchy\nwitcraft\nwite\nwiteless\nwitenagemot\nwitepenny\nwitess\nwitful\nwith\nwithal\nwithamite\nWithania\nwithdraught\nwithdraw\nwithdrawable\nwithdrawal\nwithdrawer\nwithdrawing\nwithdrawingness\nwithdrawment\nwithdrawn\nwithdrawnness\nwithe\nwithen\nwither\nwitherband\nwithered\nwitheredly\nwitheredness\nwitherer\nwithergloom\nwithering\nwitheringly\nwitherite\nwitherly\nwithernam\nwithers\nwithershins\nwithertip\nwitherwards\nwitherweight\nwithery\nwithewood\nwithheld\nwithhold\nwithholdable\nwithholdal\nwithholder\nwithholdment\nwithin\nwithindoors\nwithinside\nwithinsides\nwithinward\nwithinwards\nwithness\nwitholden\nwithout\nwithoutdoors\nwithouten\nwithoutforth\nwithoutside\nwithoutwards\nwithsave\nwithstand\nwithstander\nwithstandingness\nwithstay\nwithstood\nwithstrain\nwithvine\nwithwind\nwithy\nwithypot\nwithywind\nwitjar\nwitless\nwitlessly\nwitlessness\nwitlet\nwitling\nwitloof\nwitmonger\nwitness\nwitnessable\nwitnessdom\nwitnesser\nwitney\nwitneyer\nWitoto\nwitship\nwittal\nwittawer\nwitteboom\nwitted\nwitter\nwittering\nwitticaster\nwittichenite\nwitticism\nwitticize\nwittified\nwittily\nwittiness\nwitting\nwittingly\nwittol\nwittolly\nwitty\nWitumki\nwitwall\nwitzchoura\nwive\nwiver\nwivern\nWiyat\nWiyot\nwiz\nwizard\nwizardess\nwizardism\nwizardlike\nwizardly\nwizardry\nwizardship\nwizen\nwizened\nwizenedness\nwizier\nwizzen\nwloka\nwo\nwoad\nwoader\nwoadman\nwoadwaxen\nwoady\nwoak\nwoald\nwoan\nwob\nwobbegong\nwobble\nwobbler\nwobbliness\nwobbling\nwobblingly\nwobbly\nwobster\nwocheinite\nWochua\nwod\nwoddie\nwode\nWodenism\nwodge\nwodgy\nwoe\nwoebegone\nwoebegoneness\nwoebegonish\nwoeful\nwoefully\nwoefulness\nwoehlerite\nwoesome\nwoevine\nwoeworn\nwoffler\nwoft\nwog\nwogiet\nWogulian\nwoibe\nwokas\nwoke\nwokowi\nwold\nwoldlike\nwoldsman\nwoldy\nWolf\nwolf\nwolfachite\nwolfberry\nwolfdom\nwolfen\nwolfer\nWolffia\nWolffian\nWolffianism\nWolfgang\nwolfhood\nwolfhound\nWolfian\nwolfish\nwolfishly\nwolfishness\nwolfkin\nwolfless\nwolflike\nwolfling\nwolfram\nwolframate\nwolframic\nwolframine\nwolframinium\nwolframite\nwolfsbane\nwolfsbergite\nwolfskin\nwolfward\nwolfwards\nwollastonite\nwollomai\nwollop\nWolof\nwolter\nwolve\nwolveboon\nwolver\nwolverine\nwoman\nwomanbody\nwomandom\nwomanfolk\nwomanfully\nwomanhead\nwomanhearted\nwomanhood\nwomanhouse\nwomanish\nwomanishly\nwomanishness\nwomanism\nwomanist\nwomanity\nwomanization\nwomanize\nwomanizer\nwomankind\nwomanless\nwomanlike\nwomanliness\nwomanly\nwomanmuckle\nwomanness\nwomanpost\nwomanproof\nwomanship\nwomanways\nwomanwise\nwomb\nwombat\nwombed\nwomble\nwombstone\nwomby\nwomenfolk\nwomenfolks\nwomenkind\nwomera\nwommerala\nwon\nwonder\nwonderberry\nwonderbright\nwondercraft\nwonderer\nwonderful\nwonderfully\nwonderfulness\nwondering\nwonderingly\nwonderland\nwonderlandish\nwonderless\nwonderment\nwondermonger\nwondermongering\nwondersmith\nwondersome\nwonderstrong\nwonderwell\nwonderwork\nwonderworthy\nwondrous\nwondrously\nwondrousness\nwone\nwonegan\nwong\nwonga\nWongara\nwongen\nwongshy\nwongsky\nwoning\nwonky\nwonna\nwonned\nwonner\nwonning\nwonnot\nwont\nwonted\nwontedly\nwontedness\nwonting\nwoo\nwooable\nwood\nwoodagate\nwoodbark\nwoodbin\nwoodbind\nwoodbine\nwoodbined\nwoodbound\nwoodburytype\nwoodbush\nwoodchat\nwoodchuck\nwoodcock\nwoodcockize\nwoodcracker\nwoodcraft\nwoodcrafter\nwoodcraftiness\nwoodcraftsman\nwoodcrafty\nwoodcut\nwoodcutter\nwoodcutting\nwooded\nwooden\nwoodendite\nwoodenhead\nwoodenheaded\nwoodenheadedness\nwoodenly\nwoodenness\nwoodenware\nwoodenweary\nwoodeny\nwoodfish\nwoodgeld\nwoodgrub\nwoodhack\nwoodhacker\nwoodhole\nwoodhorse\nwoodhouse\nwoodhung\nwoodine\nwoodiness\nwooding\nwoodish\nwoodjobber\nwoodkern\nwoodknacker\nwoodland\nwoodlander\nwoodless\nwoodlessness\nwoodlet\nwoodlike\nwoodlocked\nwoodly\nwoodman\nwoodmancraft\nwoodmanship\nwoodmonger\nwoodmote\nwoodness\nwoodpeck\nwoodpecker\nwoodpenny\nwoodpile\nwoodprint\nwoodranger\nwoodreeve\nwoodrick\nwoodrock\nwoodroof\nwoodrow\nwoodrowel\nWoodruff\nwoodruff\nwoodsere\nwoodshed\nwoodshop\nWoodsia\nwoodside\nwoodsilver\nwoodskin\nwoodsman\nwoodspite\nwoodstone\nwoodsy\nwoodwall\nwoodward\nWoodwardia\nwoodwardship\nwoodware\nwoodwax\nwoodwaxen\nwoodwise\nwoodwork\nwoodworker\nwoodworking\nwoodworm\nwoodwose\nwoodwright\nWoody\nwoody\nwoodyard\nwooer\nwoof\nwoofed\nwoofell\nwoofer\nwoofy\nwoohoo\nwooing\nwooingly\nwool\nwoold\nwoolder\nwoolding\nwooled\nwoolen\nwoolenet\nwoolenization\nwoolenize\nwooler\nwoolert\nwoolfell\nwoolgatherer\nwoolgathering\nwoolgrower\nwoolgrowing\nwoolhead\nwooliness\nwoollike\nwoolly\nwoollyhead\nwoollyish\nwoolman\nwoolpack\nwoolpress\nwoolsack\nwoolsey\nwoolshearer\nwoolshearing\nwoolshears\nwoolshed\nwoolskin\nwoolsorter\nwoolsorting\nwoolsower\nwoolstock\nwoolulose\nWoolwa\nwoolwasher\nwoolweed\nwoolwheel\nwoolwinder\nwoolwork\nwoolworker\nwoolworking\nwoom\nwoomer\nwoomerang\nwoon\nwoons\nwoorali\nwoorari\nwoosh\nwootz\nwoozle\nwoozy\nwop\nwoppish\nwops\nworble\nworcester\nword\nwordable\nwordably\nwordage\nwordbook\nwordbuilding\nwordcraft\nwordcraftsman\nworded\nWorden\nworder\nwordily\nwordiness\nwording\nwordish\nwordishly\nwordishness\nwordle\nwordless\nwordlessly\nwordlessness\nwordlike\nwordlorist\nwordmaker\nwordmaking\nwordman\nwordmanship\nwordmonger\nwordmongering\nwordmongery\nwordplay\nwordsman\nwordsmanship\nwordsmith\nwordspite\nwordster\nWordsworthian\nWordsworthianism\nwordy\nwore\nwork\nworkability\nworkable\nworkableness\nworkaday\nworkaway\nworkbag\nworkbasket\nworkbench\nworkbook\nworkbox\nworkbrittle\nworkday\nworked\nworker\nworkfellow\nworkfolk\nworkfolks\nworkgirl\nworkhand\nworkhouse\nworkhoused\nworking\nworkingly\nworkingman\nworkingwoman\nworkless\nworklessness\nworkloom\nworkman\nworkmanlike\nworkmanlikeness\nworkmanliness\nworkmanly\nworkmanship\nworkmaster\nworkmistress\nworkout\nworkpan\nworkpeople\nworkpiece\nworkplace\nworkroom\nworks\nworkship\nworkshop\nworksome\nworkstand\nworktable\nworktime\nworkways\nworkwise\nworkwoman\nworkwomanlike\nworkwomanly\nworky\nworkyard\nworld\nworlded\nworldful\nworldish\nworldless\nworldlet\nworldlike\nworldlily\nworldliness\nworldling\nworldly\nworldmaker\nworldmaking\nworldproof\nworldquake\nworldward\nworldwards\nworldway\nworldy\nworm\nwormed\nwormer\nwormhole\nwormholed\nwormhood\nWormian\nwormil\nworming\nwormless\nwormlike\nwormling\nwormproof\nwormroot\nwormseed\nwormship\nwormweed\nwormwood\nwormy\nworn\nwornil\nwornness\nworral\nworriable\nworricow\nworried\nworriedly\nworriedness\nworrier\nworriless\nworriment\nworrisome\nworrisomely\nworrisomeness\nworrit\nworriter\nworry\nworrying\nworryingly\nworryproof\nworrywart\nworse\nworsement\nworsen\nworseness\nworsening\nworser\nworserment\nworset\nworship\nworshipability\nworshipable\nworshiper\nworshipful\nworshipfully\nworshipfulness\nworshipingly\nworshipless\nworshipworth\nworshipworthy\nworst\nworsted\nwort\nworth\nworthful\nworthfulness\nworthiest\nworthily\nworthiness\nworthless\nworthlessly\nworthlessness\nworthship\nworthward\nworthy\nwosbird\nwot\nwote\nwots\nwottest\nwotteth\nwoubit\nwouch\nwouf\nwough\nwould\nwouldest\nwouldnt\nwouldst\nwound\nwoundability\nwoundable\nwoundableness\nwounded\nwoundedly\nwounder\nwoundily\nwounding\nwoundingly\nwoundless\nwounds\nwoundwort\nwoundworth\nwoundy\nwourali\nwourari\nwournil\nwove\nwoven\nWovoka\nwow\nwowser\nwowserdom\nwowserian\nwowserish\nwowserism\nwowsery\nwowt\nwoy\nWoyaway\nwrack\nwracker\nwrackful\nWraf\nwraggle\nwrainbolt\nwrainstaff\nwrainstave\nwraith\nwraithe\nwraithlike\nwraithy\nwraitly\nwramp\nwran\nwrang\nwrangle\nwrangler\nwranglership\nwranglesome\nwranglingly\nwrannock\nwranny\nwrap\nwrappage\nwrapped\nwrapper\nwrapperer\nwrappering\nwrapping\nwraprascal\nwrasse\nwrastle\nwrastler\nwrath\nwrathful\nwrathfully\nwrathfulness\nwrathily\nwrathiness\nwrathlike\nwrathy\nwraw\nwrawl\nwrawler\nwraxle\nwreak\nwreakful\nwreakless\nwreat\nwreath\nwreathage\nwreathe\nwreathed\nwreathen\nwreather\nwreathingly\nwreathless\nwreathlet\nwreathlike\nwreathmaker\nwreathmaking\nwreathwise\nwreathwork\nwreathwort\nwreathy\nwreck\nwreckage\nwrecker\nwreckfish\nwreckful\nwrecking\nwrecky\nWren\nwren\nwrench\nwrenched\nwrencher\nwrenchingly\nwrenlet\nwrenlike\nwrentail\nwrest\nwrestable\nwrester\nwresting\nwrestingly\nwrestle\nwrestler\nwrestlerlike\nwrestling\nwretch\nwretched\nwretchedly\nwretchedness\nwretchless\nwretchlessly\nwretchlessness\nwretchock\nwricht\nwrick\nwride\nwried\nwrier\nwriest\nwrig\nwriggle\nwriggler\nwrigglesome\nwrigglingly\nwriggly\nwright\nwrightine\nwring\nwringbolt\nwringer\nwringman\nwringstaff\nwrinkle\nwrinkleable\nwrinkled\nwrinkledness\nwrinkledy\nwrinkleful\nwrinkleless\nwrinkleproof\nwrinklet\nwrinkly\nwrist\nwristband\nwristbone\nwristed\nwrister\nwristfall\nwristikin\nwristlet\nwristlock\nwristwork\nwrit\nwritability\nwritable\nwritation\nwritative\nwrite\nwriteable\nwritee\nwriter\nwriteress\nwriterling\nwritership\nwrith\nwrithe\nwrithed\nwrithedly\nwrithedness\nwrithen\nwritheneck\nwrither\nwrithing\nwrithingly\nwrithy\nwriting\nwritinger\nwritmaker\nwritmaking\nwritproof\nwritten\nwritter\nwrive\nwrizzled\nwro\nwrocht\nwroke\nwroken\nwrong\nwrongdoer\nwrongdoing\nwronged\nwronger\nwrongful\nwrongfully\nwrongfulness\nwronghead\nwrongheaded\nwrongheadedly\nwrongheadedness\nwronghearted\nwrongheartedly\nwrongheartedness\nwrongish\nwrongless\nwronglessly\nwrongly\nwrongness\nwrongous\nwrongously\nwrongousness\nwrongwise\nWronskian\nwrossle\nwrote\nwroth\nwrothful\nwrothfully\nwrothily\nwrothiness\nwrothly\nwrothsome\nwrothy\nwrought\nwrox\nwrung\nwrungness\nwry\nwrybill\nwryly\nwrymouth\nwryneck\nwryness\nwrytail\nWu\nWuchereria\nwud\nwuddie\nwudge\nwudu\nwugg\nwulfenite\nwulk\nwull\nwullawins\nwullcat\nWullie\nwulliwa\nwumble\nwumman\nwummel\nwun\nWundtian\nwungee\nwunna\nwunner\nwunsome\nwup\nwur\nwurley\nwurmal\nWurmian\nwurrus\nwurset\nwurtzilite\nwurtzite\nWurzburger\nwurzel\nwush\nwusp\nwuss\nwusser\nwust\nwut\nwuther\nwuzu\nwuzzer\nwuzzle\nwuzzy\nwy\nWyandot\nWyandotte\nWycliffian\nWycliffism\nWycliffist\nWycliffite\nwyde\nwye\nWyethia\nwyke\nWykehamical\nWykehamist\nwyle\nwyliecoat\nwymote\nwyn\nwynd\nwyne\nwynkernel\nwynn\nWyomingite\nwyomingite\nwype\nwyson\nwyss\nwyve\nwyver\nX\nx\nxanthaline\nxanthamic\nxanthamide\nxanthane\nxanthate\nxanthation\nxanthein\nxanthelasma\nxanthelasmic\nxanthelasmoidea\nxanthene\nXanthian\nxanthic\nxanthide\nXanthidium\nxanthin\nxanthine\nxanthinuria\nxanthione\nXanthisma\nxanthite\nXanthium\nxanthiuria\nxanthocarpous\nXanthocephalus\nXanthoceras\nXanthochroi\nxanthochroia\nXanthochroic\nxanthochroid\nxanthochroism\nxanthochromia\nxanthochromic\nxanthochroous\nxanthocobaltic\nxanthocone\nxanthoconite\nxanthocreatinine\nxanthocyanopsia\nxanthocyanopsy\nxanthocyanopy\nxanthoderm\nxanthoderma\nxanthodont\nxanthodontous\nxanthogen\nxanthogenamic\nxanthogenamide\nxanthogenate\nxanthogenic\nxantholeucophore\nxanthoma\nxanthomata\nxanthomatosis\nxanthomatous\nXanthomelanoi\nxanthomelanous\nxanthometer\nXanthomonas\nxanthomyeloma\nxanthone\nxanthophane\nxanthophore\nxanthophose\nXanthophyceae\nxanthophyll\nxanthophyllite\nxanthophyllous\nXanthopia\nxanthopia\nxanthopicrin\nxanthopicrite\nxanthoproteic\nxanthoprotein\nxanthoproteinic\nxanthopsia\nxanthopsin\nxanthopsydracia\nxanthopterin\nxanthopurpurin\nxanthorhamnin\nXanthorrhiza\nXanthorrhoea\nxanthorrhoea\nxanthosiderite\nxanthosis\nXanthosoma\nxanthospermous\nxanthotic\nXanthoura\nxanthous\nXanthoxalis\nxanthoxenite\nxanthoxylin\nxanthuria\nxanthydrol\nxanthyl\nxarque\nXaverian\nxebec\nXema\nxenacanthine\nXenacanthini\nxenagogue\nxenagogy\nXenarchi\nXenarthra\nxenarthral\nxenarthrous\nxenelasia\nxenelasy\nxenia\nxenial\nxenian\nXenicidae\nXenicus\nxenium\nxenobiosis\nxenoblast\nXenocratean\nXenocratic\nxenocryst\nxenodochium\nxenogamous\nxenogamy\nxenogenesis\nxenogenetic\nxenogenic\nxenogenous\nxenogeny\nxenolite\nxenolith\nxenolithic\nxenomania\nxenomaniac\nXenomi\nXenomorpha\nxenomorphic\nxenomorphosis\nxenon\nxenoparasite\nxenoparasitism\nxenopeltid\nXenopeltidae\nXenophanean\nxenophile\nxenophilism\nxenophobe\nxenophobia\nxenophobian\nxenophobism\nxenophoby\nXenophonic\nXenophontean\nXenophontian\nXenophontic\nXenophontine\nXenophora\nxenophoran\nXenophoridae\nxenophthalmia\nxenophya\nxenopodid\nXenopodidae\nxenopodoid\nXenopsylla\nxenopteran\nXenopteri\nxenopterygian\nXenopterygii\nXenopus\nXenorhynchus\nXenos\nxenosaurid\nXenosauridae\nxenosauroid\nXenosaurus\nxenotime\nXenurus\nxenyl\nxenylamine\nxerafin\nxeransis\nXeranthemum\nxeranthemum\nxerantic\nxerarch\nxerasia\nXeres\nxeric\nxerically\nxeriff\nxerocline\nxeroderma\nxerodermatic\nxerodermatous\nxerodermia\nxerodermic\nxerogel\nxerography\nxeroma\nxeromata\nxeromenia\nxeromorph\nxeromorphic\nxeromorphous\nxeromorphy\nxeromyron\nxeromyrum\nxeronate\nxeronic\nxerophagia\nxerophagy\nxerophil\nxerophile\nxerophilous\nxerophily\nxerophobous\nxerophthalmia\nxerophthalmos\nxerophthalmy\nXerophyllum\nxerophyte\nxerophytic\nxerophytically\nxerophytism\nxeroprinting\nxerosis\nxerostoma\nxerostomia\nxerotes\nxerotherm\nxerotic\nxerotocia\nxerotripsis\nXerus\nxi\nXicak\nXicaque\nXimenia\nXina\nXinca\nXipe\nXiphias\nxiphias\nxiphihumeralis\nxiphiid\nXiphiidae\nxiphiiform\nxiphioid\nxiphiplastra\nxiphiplastral\nxiphiplastron\nxiphisterna\nxiphisternal\nxiphisternum\nXiphisura\nxiphisuran\nXiphiura\nXiphius\nxiphocostal\nXiphodon\nXiphodontidae\nxiphodynia\nxiphoid\nxiphoidal\nxiphoidian\nxiphopagic\nxiphopagous\nxiphopagus\nxiphophyllous\nxiphosterna\nxiphosternum\nXiphosura\nxiphosuran\nxiphosure\nXiphosuridae\nxiphosurous\nXiphosurus\nxiphuous\nXiphura\nXiphydria\nxiphydriid\nXiphydriidae\nXiraxara\nXmas\nxoana\nxoanon\nXosa\nxurel\nxyla\nxylan\nXylaria\nXylariaceae\nxylate\nXyleborus\nxylem\nxylene\nxylenol\nxylenyl\nxyletic\nXylia\nxylic\nxylidic\nxylidine\nXylina\nxylindein\nxylinid\nxylite\nxylitol\nxylitone\nxylobalsamum\nxylocarp\nxylocarpous\nXylocopa\nxylocopid\nXylocopidae\nxylogen\nxyloglyphy\nxylograph\nxylographer\nxylographic\nxylographical\nxylographically\nxylography\nxyloid\nxyloidin\nxylol\nxylology\nxyloma\nxylomancy\nxylometer\nxylon\nxylonic\nXylonite\nxylonitrile\nXylophaga\nxylophagan\nxylophage\nxylophagid\nXylophagidae\nxylophagous\nXylophagus\nxylophilous\nxylophone\nxylophonic\nxylophonist\nXylopia\nxyloplastic\nxylopyrography\nxyloquinone\nxylorcin\nxylorcinol\nxylose\nxyloside\nXylosma\nxylostroma\nxylostromata\nxylostromatoid\nxylotile\nxylotomist\nxylotomous\nxylotomy\nXylotrya\nxylotypographic\nxylotypography\nxyloyl\nxylyl\nxylylene\nxylylic\nxyphoid\nXyrichthys\nxyrid\nXyridaceae\nxyridaceous\nXyridales\nXyris\nxyst\nxyster\nxysti\nxystos\nxystum\nxystus\nY\ny\nya\nyaba\nyabber\nyabbi\nyabble\nyabby\nyabu\nyacal\nyacca\nyachan\nyacht\nyachtdom\nyachter\nyachting\nyachtist\nyachtman\nyachtmanship\nyachtsman\nyachtsmanlike\nyachtsmanship\nyachtswoman\nyachty\nyad\nYadava\nyade\nyaff\nyaffingale\nyaffle\nyagger\nyaghourt\nyagi\nYagnob\nyagourundi\nYagua\nyagua\nyaguarundi\nyaguaza\nyah\nyahan\nYahgan\nYahganan\nYahoo\nyahoo\nYahoodom\nYahooish\nYahooism\nYahuna\nYahuskin\nYahweh\nYahwism\nYahwist\nYahwistic\nyair\nyaird\nyaje\nyajeine\nyajenine\nYajna\nYajnavalkya\nyajnopavita\nyak\nYaka\nYakala\nyakalo\nyakamik\nYakan\nyakattalo\nYakima\nyakin\nyakka\nyakman\nYakona\nYakonan\nYakut\nYakutat\nyalb\nYale\nyale\nYalensian\nyali\nyalla\nyallaer\nyallow\nyam\nYamacraw\nYamamadi\nyamamai\nyamanai\nyamaskite\nYamassee\nYamato\nYamel\nyamen\nYameo\nyamilke\nyammadji\nyammer\nyamp\nyampa\nyamph\nyamshik\nyamstchik\nyan\nYana\nYanan\nyancopin\nyander\nyang\nyangtao\nyank\nYankee\nYankeedom\nYankeefy\nYankeeism\nYankeeist\nYankeeize\nYankeeland\nYankeeness\nyanking\nYankton\nYanktonai\nyanky\nYannigan\nYao\nyaoort\nyaourti\nyap\nyapa\nyaply\nYapman\nyapness\nyapok\nyapp\nyapped\nyapper\nyappiness\nyapping\nyappingly\nyappish\nyappy\nyapster\nYaqui\nYaquina\nyar\nyarak\nyaray\nyarb\nYarborough\nyard\nyardage\nyardang\nyardarm\nyarder\nyardful\nyarding\nyardkeep\nyardland\nyardman\nyardmaster\nyardsman\nyardstick\nyardwand\nyare\nyareta\nyark\nYarkand\nyarke\nyarl\nyarly\nyarm\nyarn\nyarnen\nyarner\nyarnwindle\nyarpha\nyarr\nyarraman\nyarran\nyarringle\nyarrow\nyarth\nyarthen\nYaru\nYarura\nYaruran\nYaruro\nyarwhelp\nyarwhip\nyas\nyashiro\nyashmak\nYasht\nYasna\nyat\nyataghan\nyatalite\nyate\nyati\nYatigan\nyatter\nYatvyag\nYauapery\nyaud\nyauld\nyaupon\nyautia\nyava\nYavapai\nyaw\nyawl\nyawler\nyawlsman\nyawmeter\nyawn\nyawner\nyawney\nyawnful\nyawnfully\nyawnily\nyawniness\nyawning\nyawningly\nyawnproof\nyawnups\nyawny\nyawp\nyawper\nyawroot\nyaws\nyawweed\nyawy\nyaxche\nyaya\nYazdegerdian\nYazoo\nycie\nyday\nye\nyea\nyeah\nyealing\nyean\nyeanling\nyear\nyeara\nyearbird\nyearbook\nyeard\nyearday\nyearful\nyearling\nyearlong\nyearly\nyearn\nyearnful\nyearnfully\nyearnfulness\nyearning\nyearnling\nyearock\nyearth\nyeast\nyeastily\nyeastiness\nyeasting\nyeastlike\nyeasty\nyeat\nyeather\nyed\nyede\nyee\nyeel\nyeelaman\nyees\nyegg\nyeggman\nyeguita\nyeld\nyeldrin\nyeldrock\nyelk\nyell\nyeller\nyelling\nyelloch\nyellow\nyellowammer\nyellowback\nyellowbelly\nyellowberry\nyellowbill\nyellowbird\nyellowcrown\nyellowcup\nyellowfin\nyellowfish\nyellowhammer\nyellowhead\nyellowing\nyellowish\nyellowishness\nYellowknife\nyellowlegs\nyellowly\nyellowness\nyellowroot\nyellowrump\nyellows\nyellowseed\nyellowshank\nyellowshanks\nyellowshins\nyellowtail\nyellowthorn\nyellowthroat\nyellowtop\nyellowware\nyellowweed\nyellowwood\nyellowwort\nyellowy\nyelm\nyelmer\nyelp\nyelper\nyelt\nYemen\nYemeni\nYemenic\nYemenite\nyen\nyender\nYengee\nYengeese\nyeni\nYenisei\nYeniseian\nyenite\nyentnite\nyeo\nyeoman\nyeomaness\nyeomanette\nyeomanhood\nyeomanlike\nyeomanly\nyeomanry\nyeomanwise\nyeorling\nyeowoman\nyep\nyer\nYerava\nYeraver\nyerb\nyerba\nyercum\nyerd\nyere\nyerga\nyerk\nyern\nyerth\nyes\nyese\nYeshibah\nYeshiva\nyeso\nyesso\nyest\nyester\nyesterday\nyestereve\nyestereven\nyesterevening\nyestermorn\nyestermorning\nyestern\nyesternight\nyesternoon\nyesterweek\nyesteryear\nyestreen\nyesty\nyet\nyeta\nyetapa\nyeth\nyether\nyetlin\nyeuk\nyeukieness\nyeuky\nyeven\nyew\nyex\nyez\nYezdi\nYezidi\nyezzy\nygapo\nYid\nYiddish\nYiddisher\nYiddishism\nYiddishist\nyield\nyieldable\nyieldableness\nyieldance\nyielden\nyielder\nyielding\nyieldingly\nyieldingness\nyieldy\nyigh\nYikirgaulit\nYildun\nyill\nyilt\nYin\nyin\nyince\nyinst\nyip\nyird\nyirk\nyirm\nyirmilik\nyirn\nyirr\nyirth\nyis\nyite\nym\nyn\nynambu\nyo\nyobi\nyocco\nyochel\nyock\nyockel\nyodel\nyodeler\nyodelist\nyodh\nyoe\nyoga\nyogasana\nyogh\nyoghurt\nyogi\nyogin\nyogism\nyogist\nyogoite\nyohimbe\nyohimbi\nyohimbine\nyohimbinization\nyohimbinize\nyoi\nyoick\nyoicks\nyojan\nyojana\nYojuane\nyok\nyoke\nyokeable\nyokeableness\nyokeage\nyokefellow\nyokel\nyokeldom\nyokeless\nyokelish\nyokelism\nyokelry\nyokemate\nyokemating\nyoker\nyokewise\nyokewood\nyoking\nYokuts\nyoky\nyolden\nYoldia\nyoldring\nyolk\nyolked\nyolkiness\nyolkless\nyolky\nyom\nyomer\nYomud\nyon\nyoncopin\nyond\nyonder\nYonkalla\nyonner\nyonside\nyont\nyook\nyoop\nyor\nyore\nyoretime\nyork\nYorker\nyorker\nYorkish\nYorkist\nYorkshire\nYorkshireism\nYorkshireman\nYoruba\nYoruban\nyot\nyotacism\nyotacize\nyote\nyou\nyoud\nyouden\nyoudendrift\nyoudith\nyouff\nyoul\nyoung\nyoungberry\nyounger\nyounghearted\nyoungish\nyounglet\nyoungling\nyoungly\nyoungness\nyoungster\nyoungun\nyounker\nyoup\nyour\nyourn\nyours\nyoursel\nyourself\nyourselves\nyouse\nyouth\nyouthen\nyouthful\nyouthfullity\nyouthfully\nyouthfulness\nyouthhead\nyouthheid\nyouthhood\nyouthily\nyouthless\nyouthlessness\nyouthlike\nyouthlikeness\nyouthsome\nyouthtide\nyouthwort\nyouthy\nyouve\nyouward\nyouwards\nyouze\nyoven\nyow\nyowie\nyowl\nyowler\nyowley\nyowlring\nyowt\nyox\nyoy\nyperite\nYponomeuta\nYponomeutid\nYponomeutidae\nypsiliform\nypsiloid\nYpurinan\nYquem\nyr\nytterbia\nytterbic\nytterbium\nyttria\nyttrialite\nyttric\nyttriferous\nyttrious\nyttrium\nyttrocerite\nyttrocolumbite\nyttrocrasite\nyttrofluorite\nyttrogummite\nyttrotantalite\nYuan\nyuan\nYuapin\nyuca\nYucatec\nYucatecan\nYucateco\nYucca\nyucca\nYuchi\nyuck\nyuckel\nyucker\nyuckle\nyucky\nYuechi\nyuft\nYuga\nyugada\nYugoslav\nYugoslavian\nYugoslavic\nyuh\nYuit\nYukaghir\nYuki\nYukian\nyukkel\nyulan\nyule\nyuleblock\nyuletide\nYuma\nYuman\nyummy\nYun\nYunca\nYuncan\nyungan\nYunnanese\nYurak\nYurok\nyurt\nyurta\nYurucare\nYurucarean\nYurucari\nYurujure\nYuruk\nYuruna\nYurupary\nyus\nyusdrum\nYustaga\nyutu\nyuzlik\nyuzluk\nYvonne\nZ\nz\nza\nZabaean\nzabaglione\nZabaism\nZaberma\nzabeta\nZabian\nZabism\nzabra\nzabti\nzabtie\nzac\nzacate\nZacatec\nZacateco\nzacaton\nZach\nZachariah\nzachun\nzad\nZadokite\nzadruga\nzaffar\nzaffer\nzafree\nzag\nzagged\nZaglossus\nzaibatsu\nzain\nZaitha\nzak\nzakkeu\nZaklohpakap\nzalambdodont\nZalambdodonta\nZalophus\nzaman\nzamang\nzamarra\nzamarro\nZambal\nZambezian\nzambo\nzamboorak\nZamenis\nZamia\nZamiaceae\nZamicrus\nzamindar\nzamindari\nzamorin\nzamouse\nZan\nZanclidae\nZanclodon\nZanclodontidae\nZande\nzander\nzandmole\nzanella\nZaniah\nZannichellia\nZannichelliaceae\nZanonia\nzant\nzante\nZantedeschia\nzantewood\nZanthorrhiza\nZanthoxylaceae\nZanthoxylum\nzanthoxylum\nZantiot\nzantiote\nzany\nzanyish\nzanyism\nzanyship\nZanzalian\nzanze\nZanzibari\nZapara\nZaparan\nZaparo\nZaparoan\nzapas\nzapatero\nzaphara\nZaphetic\nzaphrentid\nZaphrentidae\nZaphrentis\nzaphrentoid\nZapodidae\nZapodinae\nZaporogian\nZaporogue\nzapota\nZapotec\nZapotecan\nZapoteco\nzaptiah\nzaptieh\nZaptoeca\nzapupe\nZapus\nzaqqum\nZaque\nzar\nzarabanda\nZaramo\nZarathustrian\nZarathustrianism\nZarathustrism\nzaratite\nZardushti\nzareba\nZarema\nzarf\nzarnich\nzarp\nzarzuela\nzat\nzati\nzattare\nZaurak\nZauschneria\nZavijava\nzax\nzayat\nzayin\nZea\nzeal\nZealander\nzealful\nzealless\nzeallessness\nzealot\nzealotic\nzealotical\nzealotism\nzealotist\nzealotry\nzealous\nzealously\nzealousness\nzealousy\nzealproof\nzebra\nzebraic\nzebralike\nzebrass\nzebrawood\nZebrina\nzebrine\nzebrinny\nzebroid\nzebrula\nzebrule\nzebu\nzebub\nZebulunite\nzeburro\nzecchini\nzecchino\nzechin\nZechstein\nzed\nzedoary\nzee\nzeed\nZeelander\nZeguha\nzehner\nZeidae\nzein\nzeism\nzeist\nZeke\nzel\nZelanian\nzelator\nzelatrice\nzelatrix\nZelkova\nZeltinger\nzemeism\nzemi\nzemimdari\nzemindar\nzemmi\nzemni\nzemstroist\nzemstvo\nZen\nZenaga\nZenaida\nZenaidinae\nZenaidura\nzenana\nZend\nZendic\nzendician\nzendik\nzendikite\nZenelophon\nzenick\nzenith\nzenithal\nzenithward\nzenithwards\nZenobia\nzenocentric\nzenographic\nzenographical\nzenography\nZenonian\nZenonic\nzenu\nZeoidei\nzeolite\nzeolitic\nzeolitization\nzeolitize\nzeoscope\nZep\nzepharovichite\nzephyr\nZephyranthes\nzephyrean\nzephyrless\nzephyrlike\nzephyrous\nzephyrus\nzephyry\nZeppelin\nzeppelin\nzequin\nzer\nzerda\nZerma\nzermahbub\nzero\nzeroaxial\nzeroize\nzerumbet\nzest\nzestful\nzestfully\nzestfulness\nzesty\nzeta\nzetacism\nzetetic\nZeuctocoelomata\nzeuctocoelomatic\nzeuctocoelomic\nZeuglodon\nzeuglodon\nzeuglodont\nZeuglodonta\nZeuglodontia\nZeuglodontidae\nzeuglodontoid\nzeugma\nzeugmatic\nzeugmatically\nZeugobranchia\nZeugobranchiata\nzeunerite\nZeus\nZeuxian\nZeuzera\nzeuzerian\nZeuzeridae\nZhmud\nziamet\nziara\nziarat\nzibeline\nzibet\nzibethone\nzibetone\nzibetum\nziega\nzieger\nzietrisikite\nziffs\nzig\nziganka\nziggurat\nzigzag\nzigzagged\nzigzaggedly\nzigzaggedness\nzigzagger\nzigzaggery\nzigzaggy\nzigzagwise\nzihar\nzikurat\nZilla\nzillah\nzimarra\nzimb\nzimbabwe\nzimbalon\nzimbaloon\nzimbi\nzimentwater\nzimme\nZimmerwaldian\nZimmerwaldist\nzimmi\nzimmis\nzimocca\nzinc\nZincalo\nzincate\nzincic\nzincide\nzinciferous\nzincification\nzincify\nzincing\nzincite\nzincize\nzincke\nzincky\nzinco\nzincograph\nzincographer\nzincographic\nzincographical\nzincography\nzincotype\nzincous\nzincum\nzincuret\nzinfandel\nzing\nzingaresca\nzingel\nzingerone\nZingiber\nZingiberaceae\nzingiberaceous\nzingiberene\nzingiberol\nzingiberone\nzink\nzinkenite\nZinnia\nzinnwaldite\nzinsang\nzinyamunga\nZinzar\nZinziberaceae\nzinziberaceous\nZion\nZionism\nZionist\nZionistic\nZionite\nZionless\nZionward\nzip\nZipa\nziphian\nZiphiidae\nZiphiinae\nziphioid\nZiphius\nZipper\nzipper\nzipping\nzippingly\nzippy\nZips\nzira\nzirai\nZirak\nZirbanit\nzircite\nzircofluoride\nzircon\nzirconate\nzirconia\nzirconian\nzirconic\nzirconiferous\nzirconifluoride\nzirconium\nzirconofluoride\nzirconoid\nzirconyl\nZirian\nZirianian\nzirkelite\nzither\nzitherist\nZizania\nZizia\nZizyphus\nzizz\nzloty\nZmudz\nzo\nZoa\nzoa\nzoacum\nZoanthacea\nzoanthacean\nZoantharia\nzoantharian\nzoanthid\nZoanthidae\nZoanthidea\nzoanthodeme\nzoanthodemic\nzoanthoid\nzoanthropy\nZoanthus\nZoarces\nzoarcidae\nzoaria\nzoarial\nZoarite\nzoarium\nzobo\nzobtenite\nzocco\nzoccolo\nzodiac\nzodiacal\nzodiophilous\nzoea\nzoeaform\nzoeal\nzoeform\nzoehemera\nzoehemerae\nzoetic\nzoetrope\nzoetropic\nzogan\nzogo\nZohak\nZoharist\nZoharite\nzoiatria\nzoiatrics\nzoic\nzoid\nzoidiophilous\nzoidogamous\nZoilean\nZoilism\nZoilist\nzoisite\nzoisitization\nzoism\nzoist\nzoistic\nzokor\nZolaesque\nZolaism\nZolaist\nZolaistic\nZolaize\nzoll\nzolle\nZollernia\nzollpfund\nzolotink\nzolotnik\nzombi\nzombie\nzombiism\nzomotherapeutic\nzomotherapy\nzonal\nzonality\nzonally\nzonar\nZonaria\nzonary\nzonate\nzonated\nzonation\nzone\nzoned\nzoneless\nzonelet\nzonelike\nzonesthesia\nZongora\nzonic\nzoniferous\nzoning\nzonite\nZonites\nzonitid\nZonitidae\nZonitoides\nzonochlorite\nzonociliate\nzonoid\nzonolimnetic\nzonoplacental\nZonoplacentalia\nzonoskeleton\nZonotrichia\nZonta\nZontian\nzonular\nzonule\nzonulet\nzonure\nzonurid\nZonuridae\nzonuroid\nZonurus\nzoo\nzoobenthos\nzooblast\nzoocarp\nzoocecidium\nzoochemical\nzoochemistry\nzoochemy\nZoochlorella\nzoochore\nzoocoenocyte\nzoocultural\nzooculture\nzoocurrent\nzoocyst\nzoocystic\nzoocytial\nzoocytium\nzoodendria\nzoodendrium\nzoodynamic\nzoodynamics\nzooecia\nzooecial\nzooecium\nzooerastia\nzooerythrin\nzoofulvin\nzoogamete\nzoogamous\nzoogamy\nzoogene\nzoogenesis\nzoogenic\nzoogenous\nzoogeny\nzoogeographer\nzoogeographic\nzoogeographical\nzoogeographically\nzoogeography\nzoogeological\nzoogeologist\nzoogeology\nzoogloea\nzoogloeal\nzoogloeic\nzoogonic\nzoogonidium\nzoogonous\nzoogony\nzoograft\nzoografting\nzoographer\nzoographic\nzoographical\nzoographically\nzoographist\nzoography\nzooid\nzooidal\nzooidiophilous\nzooks\nzoolater\nzoolatria\nzoolatrous\nzoolatry\nzoolite\nzoolith\nzoolithic\nzoolitic\nzoologer\nzoologic\nzoological\nzoologically\nzoologicoarchaeologist\nzoologicobotanical\nzoologist\nzoologize\nzoology\nzoom\nzoomagnetic\nzoomagnetism\nzoomancy\nzoomania\nzoomantic\nzoomantist\nZoomastigina\nZoomastigoda\nzoomechanical\nzoomechanics\nzoomelanin\nzoometric\nzoometry\nzoomimetic\nzoomimic\nzoomorph\nzoomorphic\nzoomorphism\nzoomorphize\nzoomorphy\nzoon\nzoonal\nzoonerythrin\nzoonic\nzoonist\nzoonite\nzoonitic\nzoonomia\nzoonomic\nzoonomical\nzoonomist\nzoonomy\nzoonosis\nzoonosologist\nzoonosology\nzoonotic\nzoons\nzoonule\nzoopaleontology\nzoopantheon\nzooparasite\nzooparasitic\nzoopathological\nzoopathologist\nzoopathology\nzoopathy\nzooperal\nzooperist\nzoopery\nZoophaga\nzoophagan\nZoophagineae\nzoophagous\nzoopharmacological\nzoopharmacy\nzoophile\nzoophilia\nzoophilic\nzoophilism\nzoophilist\nzoophilite\nzoophilitic\nzoophilous\nzoophily\nzoophobia\nzoophobous\nzoophoric\nzoophorus\nzoophysical\nzoophysics\nzoophysiology\nZoophyta\nzoophytal\nzoophyte\nzoophytic\nzoophytical\nzoophytish\nzoophytography\nzoophytoid\nzoophytological\nzoophytologist\nzoophytology\nzooplankton\nzooplanktonic\nzooplastic\nzooplasty\nzoopraxiscope\nzoopsia\nzoopsychological\nzoopsychologist\nzoopsychology\nzooscopic\nzooscopy\nzoosis\nzoosmosis\nzoosperm\nzoospermatic\nzoospermia\nzoospermium\nzoosphere\nzoosporange\nzoosporangia\nzoosporangial\nzoosporangiophore\nzoosporangium\nzoospore\nzoosporic\nzoosporiferous\nzoosporocyst\nzoosporous\nzootaxy\nzootechnic\nzootechnics\nzootechny\nzooter\nzoothecia\nzoothecial\nzoothecium\nzootheism\nzootheist\nzootheistic\nzootherapy\nzoothome\nzootic\nZootoca\nzootomic\nzootomical\nzootomically\nzootomist\nzootomy\nzoototemism\nzootoxin\nzootrophic\nzootrophy\nzootype\nzootypic\nzooxanthella\nzooxanthellae\nzooxanthin\nzoozoo\nzopilote\nZoque\nZoquean\nZoraptera\nzorgite\nzoril\nzorilla\nZorillinae\nzorillo\nZoroastrian\nZoroastrianism\nZoroastrism\nZorotypus\nzorrillo\nzorro\nZosma\nzoster\nZostera\nZosteraceae\nzosteriform\nZosteropinae\nZosterops\nZouave\nzounds\nzowie\nZoysia\nZubeneschamali\nzuccarino\nzucchetto\nzucchini\nzudda\nzugtierlast\nzugtierlaster\nzuisin\nZuleika\nZulhijjah\nZulinde\nZulkadah\nZulu\nZuludom\nZuluize\nzumatic\nzumbooruk\nZuni\nZunian\nzunyite\nzupanate\nZutugil\nzuurveldt\nzuza\nzwanziger\nZwieback\nzwieback\nZwinglian\nZwinglianism\nZwinglianist\nzwitter\nzwitterion\nzwitterionic\nzyga\nzygadenine\nZygadenus\nZygaena\nzygaenid\nZygaenidae\nzygal\nzygantra\nzygantrum\nzygapophyseal\nzygapophysis\nzygion\nzygite\nZygnema\nZygnemaceae\nZygnemales\nZygnemataceae\nzygnemataceous\nZygnematales\nzygobranch\nZygobranchia\nZygobranchiata\nzygobranchiate\nZygocactus\nzygodactyl\nZygodactylae\nZygodactyli\nzygodactylic\nzygodactylism\nzygodactylous\nzygodont\nzygolabialis\nzygoma\nzygomata\nzygomatic\nzygomaticoauricular\nzygomaticoauricularis\nzygomaticofacial\nzygomaticofrontal\nzygomaticomaxillary\nzygomaticoorbital\nzygomaticosphenoid\nzygomaticotemporal\nzygomaticum\nzygomaticus\nzygomaxillare\nzygomaxillary\nzygomorphic\nzygomorphism\nzygomorphous\nzygomycete\nZygomycetes\nzygomycetous\nzygon\nzygoneure\nzygophore\nzygophoric\nZygophyceae\nzygophyceous\nZygophyllaceae\nzygophyllaceous\nZygophyllum\nzygophyte\nzygopleural\nZygoptera\nZygopteraceae\nzygopteran\nzygopterid\nZygopterides\nZygopteris\nzygopteron\nzygopterous\nZygosaccharomyces\nzygose\nzygosis\nzygosperm\nzygosphenal\nzygosphene\nzygosphere\nzygosporange\nzygosporangium\nzygospore\nzygosporic\nzygosporophore\nzygostyle\nzygotactic\nzygotaxis\nzygote\nzygotene\nzygotic\nzygotoblast\nzygotoid\nzygotomere\nzygous\nzygozoospore\nzymase\nzyme\nzymic\nzymin\nzymite\nzymogen\nzymogene\nzymogenesis\nzymogenic\nzymogenous\nzymoid\nzymologic\nzymological\nzymologist\nzymology\nzymolyis\nzymolysis\nzymolytic\nzymome\nzymometer\nzymomin\nzymophore\nzymophoric\nzymophosphate\nzymophyte\nzymoplastic\nzymoscope\nzymosimeter\nzymosis\nzymosterol\nzymosthenic\nzymotechnic\nzymotechnical\nzymotechnics\nzymotechny\nzymotic\nzymotically\nzymotize\nzymotoxic\nzymurgy\nZyrenian\nZyrian\nZyryan\nzythem\nZythia\nzythum\nZyzomys\nZyzzogeton\n"
  },
  {
    "path": "strings/z_function.py",
    "content": "\"\"\"\nhttps://cp-algorithms.com/string/z-function.html\n\nZ-function or Z algorithm\n\nEfficient algorithm for pattern occurrence in a string\n\nTime Complexity: O(n) - where n is the length of the string\n\n\"\"\"\n\n\ndef z_function(input_str: str) -> list[int]:\n    \"\"\"\n    For the given string this function computes value for each index,\n    which represents the maximal length substring starting from the index\n    and is the same as the prefix of the same size\n\n    e.x.  for string 'abab' for second index value would be 2\n\n    For the value of the first element the algorithm always returns 0\n\n    >>> z_function(\"abracadabra\")\n    [0, 0, 0, 1, 0, 1, 0, 4, 0, 0, 1]\n    >>> z_function(\"aaaa\")\n    [0, 3, 2, 1]\n    >>> z_function(\"zxxzxxz\")\n    [0, 0, 0, 4, 0, 0, 1]\n    \"\"\"\n    z_result = [0 for i in range(len(input_str))]\n\n    # initialize interval's left pointer and right pointer\n    left_pointer, right_pointer = 0, 0\n\n    for i in range(1, len(input_str)):\n        # case when current index is inside the interval\n        if i <= right_pointer:\n            min_edge = min(right_pointer - i + 1, z_result[i - left_pointer])\n            z_result[i] = min_edge\n\n        while go_next(i, z_result, input_str):\n            z_result[i] += 1\n\n        # if new index's result gives us more right interval,\n        # we've to update left_pointer and right_pointer\n        if i + z_result[i] - 1 > right_pointer:\n            left_pointer, right_pointer = i, i + z_result[i] - 1\n\n    return z_result\n\n\ndef go_next(i: int, z_result: list[int], s: str) -> bool:\n    \"\"\"\n    Check if we have to move forward to the next characters or not\n    \"\"\"\n    return i + z_result[i] < len(s) and s[z_result[i]] == s[i + z_result[i]]\n\n\ndef find_pattern(pattern: str, input_str: str) -> int:\n    \"\"\"\n    Example of using z-function for pattern occurrence\n    Given function returns the number of times 'pattern'\n    appears in 'input_str' as a substring\n\n    >>> find_pattern(\"abr\", \"abracadabra\")\n    2\n    >>> find_pattern(\"a\", \"aaaa\")\n    4\n    >>> find_pattern(\"xz\", \"zxxzxxz\")\n    2\n    \"\"\"\n    answer = 0\n    # concatenate 'pattern' and 'input_str' and call z_function\n    # with concatenated string\n    z_result = z_function(pattern + input_str)\n\n    for val in z_result:\n        # if value is greater then length of the pattern string\n        # that means this index is starting position of substring\n        # which is equal to pattern string\n        if val >= len(pattern):\n            answer += 1\n\n    return answer\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n"
  },
  {
    "path": "web_programming/__init__.py",
    "content": ""
  },
  {
    "path": "web_programming/co2_emission.py",
    "content": "\"\"\"\nGet CO2 emission data from the UK CarbonIntensity API\n\"\"\"\n\n# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"httpx\",\n# ]\n# ///\n\nfrom datetime import date\n\nimport httpx\n\nBASE_URL = \"https://api.carbonintensity.org.uk/intensity\"\n\n\n# Emission in the last half hour\ndef fetch_last_half_hour() -> str:\n    last_half_hour = httpx.get(BASE_URL, timeout=10).json()[\"data\"][0]\n    return last_half_hour[\"intensity\"][\"actual\"]\n\n\n# Emissions in a specific date range\ndef fetch_from_to(start, end) -> list:\n    return httpx.get(f\"{BASE_URL}/{start}/{end}\", timeout=10).json()[\"data\"]\n\n\nif __name__ == \"__main__\":\n    for entry in fetch_from_to(start=date(2020, 10, 1), end=date(2020, 10, 3)):\n        print(\"from {from} to {to}: {intensity[actual]}\".format(**entry))\n    print(f\"{fetch_last_half_hour() = }\")\n"
  },
  {
    "path": "web_programming/covid_stats_via_xpath.py",
    "content": "\"\"\"\nThis script demonstrates fetching simple COVID-19 statistics from the\nWorldometers archive site using lxml. lxml is chosen over BeautifulSoup\nfor its speed and convenience in Python web projects (such as Django or\nFlask).\n\"\"\"\n\n# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"httpx\",\n#     \"lxml\",\n# ]\n# ///\n\nfrom typing import NamedTuple\n\nimport httpx\nfrom lxml import html\n\n\nclass CovidData(NamedTuple):\n    cases: str\n    deaths: str\n    recovered: str\n\n\ndef covid_stats(\n    url: str = (\n        \"https://web.archive.org/web/20250825095350/\"\n        \"https://www.worldometers.info/coronavirus/\"\n    ),\n) -> CovidData:\n    xpath_str = '//div[@class = \"maincounter-number\"]/span/text()'\n    try:\n        response = httpx.get(url, timeout=10).raise_for_status()\n    except httpx.TimeoutException:\n        print(\n            \"Request timed out. Please check your network connection \"\n            \"or try again later.\"\n        )\n        return CovidData(\"N/A\", \"N/A\", \"N/A\")\n    except httpx.HTTPStatusError as e:\n        print(f\"HTTP error occurred: {e}\")\n        return CovidData(\"N/A\", \"N/A\", \"N/A\")\n    data = html.fromstring(response.content).xpath(xpath_str)\n    if len(data) != 3:\n        print(\"Unexpected data format. The page structure may have changed.\")\n        data = \"N/A\", \"N/A\", \"N/A\"\n    return CovidData(*data)\n\n\nif __name__ == \"__main__\":\n    fmt = (\n        \"Total COVID-19 cases in the world: {}\\n\"\n        \"Total deaths due to COVID-19 in the world: {}\\n\"\n        \"Total COVID-19 patients recovered in the world: {}\"\n    )\n    print(fmt.format(*covid_stats()))\n"
  },
  {
    "path": "web_programming/crawl_google_results.py",
    "content": "# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"beautifulsoup4\",\n#     \"fake-useragent\",\n#     \"httpx\",\n# ]\n# ///\n\nimport sys\nimport webbrowser\n\nimport httpx\nfrom bs4 import BeautifulSoup\nfrom fake_useragent import UserAgent\n\nif __name__ == \"__main__\":\n    print(\"Googling.....\")\n    url = \"https://www.google.com/search?q=\" + \" \".join(sys.argv[1:])\n    res = httpx.get(\n        url,\n        headers={\"UserAgent\": UserAgent().random},\n        timeout=10,\n        follow_redirects=True,\n    )\n    # res.raise_for_status()\n    with open(\"project1a.html\", \"wb\") as out_file:  # only for knowing the class\n        for data in res.iter_content(10000):\n            out_file.write(data)\n    soup = BeautifulSoup(res.text, \"html.parser\")\n    links = list(soup.select(\".eZt8xd\"))[:5]\n\n    print(len(links))\n    for link in links:\n        if link.text == \"Maps\":\n            webbrowser.open(link.get(\"href\"))\n        else:\n            webbrowser.open(f\"https://google.com{link.get('href')}\")\n"
  },
  {
    "path": "web_programming/crawl_google_scholar_citation.py",
    "content": "\"\"\"\nGet the citation from google scholar\nusing title and year of publication, and volume and pages of journal.\n\"\"\"\n\n# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"beautifulsoup4\",\n#     \"httpx\",\n# ]\n# ///\n\nimport httpx\nfrom bs4 import BeautifulSoup\n\n\ndef get_citation(base_url: str, params: dict) -> str:\n    \"\"\"\n    Return the citation number.\n    \"\"\"\n    soup = BeautifulSoup(\n        httpx.get(base_url, params=params, timeout=10).content, \"html.parser\"\n    )\n    div = soup.find(\"div\", attrs={\"class\": \"gs_ri\"})\n    anchors = div.find(\"div\", attrs={\"class\": \"gs_fl\"}).find_all(\"a\")\n    return anchors[2].get_text()\n\n\nif __name__ == \"__main__\":\n    params = {\n        \"title\": (\n            \"Precisely geometry controlled microsupercapacitors for ultrahigh areal \"\n            \"capacitance, volumetric capacitance, and energy density\"\n        ),\n        \"journal\": \"Chem. Mater.\",\n        \"volume\": 30,\n        \"pages\": \"3979-3990\",\n        \"year\": 2018,\n        \"hl\": \"en\",\n    }\n    print(get_citation(\"https://scholar.google.com/scholar_lookup\", params=params))\n"
  },
  {
    "path": "web_programming/currency_converter.py",
    "content": "\"\"\"\nThis is used to convert the currency using the Amdoren Currency API\nhttps://www.amdoren.com\n\"\"\"\n\n# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"httpx\",\n# ]\n# ///\n\nimport os\n\nimport httpx\n\nURL_BASE = \"https://www.amdoren.com/api/currency.php\"\n\n\n# Currency and their description\nlist_of_currencies = \"\"\"\nAED\tUnited Arab Emirates Dirham\nAFN\tAfghan Afghani\nALL\tAlbanian Lek\nAMD\tArmenian Dram\nANG\tNetherlands Antillean Guilder\nAOA\tAngolan Kwanza\nARS\tArgentine Peso\nAUD\tAustralian Dollar\nAWG\tAruban Florin\nAZN\tAzerbaijani Manat\nBAM\tBosnia & Herzegovina Convertible Mark\nBBD\tBarbadian Dollar\nBDT\tBangladeshi Taka\nBGN\tBulgarian Lev\nBHD\tBahraini Dinar\nBIF\tBurundian Franc\nBMD\tBermudian Dollar\nBND\tBrunei Dollar\nBOB\tBolivian Boliviano\nBRL\tBrazilian Real\nBSD\tBahamian Dollar\nBTN\tBhutanese Ngultrum\nBWP\tBotswana Pula\nBYN\tBelarus Ruble\nBZD\tBelize Dollar\nCAD\tCanadian Dollar\nCDF\tCongolese Franc\nCHF\tSwiss Franc\nCLP\tChilean Peso\nCNY\tChinese Yuan\nCOP\tColombian Peso\nCRC\tCosta Rican Colon\nCUC\tCuban Convertible Peso\nCVE\tCape Verdean Escudo\nCZK\tCzech Republic Koruna\nDJF\tDjiboutian Franc\nDKK\tDanish Krone\nDOP\tDominican Peso\nDZD\tAlgerian Dinar\nEGP\tEgyptian Pound\nERN\tEritrean Nakfa\nETB\tEthiopian Birr\nEUR\tEuro\nFJD\tFiji Dollar\nGBP\tBritish Pound Sterling\nGEL\tGeorgian Lari\nGHS\tGhanaian Cedi\nGIP\tGibraltar Pound\nGMD\tGambian Dalasi\nGNF\tGuinea Franc\nGTQ\tGuatemalan Quetzal\nGYD\tGuyanaese Dollar\nHKD\tHong Kong Dollar\nHNL\tHonduran Lempira\nHRK\tCroatian Kuna\nHTG\tHaiti Gourde\nHUF\tHungarian Forint\nIDR\tIndonesian Rupiah\nILS\tIsraeli Shekel\nINR\tIndian Rupee\nIQD\tIraqi Dinar\nIRR\tIranian Rial\nISK\tIcelandic Krona\nJMD\tJamaican Dollar\nJOD\tJordanian Dinar\nJPY\tJapanese Yen\nKES\tKenyan Shilling\nKGS\tKyrgystani Som\nKHR\tCambodian Riel\nKMF\tComorian Franc\nKPW\tNorth Korean Won\nKRW\tSouth Korean Won\nKWD\tKuwaiti Dinar\nKYD\tCayman Islands Dollar\nKZT\tKazakhstan Tenge\nLAK\tLaotian Kip\nLBP\tLebanese Pound\nLKR\tSri Lankan Rupee\nLRD\tLiberian Dollar\nLSL\tLesotho Loti\nLYD\tLibyan Dinar\nMAD\tMoroccan Dirham\nMDL\tMoldovan Leu\nMGA\tMalagasy Ariary\nMKD\tMacedonian Denar\nMMK\tMyanma Kyat\nMNT\tMongolian Tugrik\nMOP\tMacau Pataca\nMRO\tMauritanian Ouguiya\nMUR\tMauritian Rupee\nMVR\tMaldivian Rufiyaa\nMWK\tMalawi Kwacha\nMXN\tMexican Peso\nMYR\tMalaysian Ringgit\nMZN\tMozambican Metical\nNAD\tNamibian Dollar\nNGN\tNigerian Naira\nNIO\tNicaragua Cordoba\nNOK\tNorwegian Krone\nNPR\tNepalese Rupee\nNZD\tNew Zealand Dollar\nOMR\tOmani Rial\nPAB\tPanamanian Balboa\nPEN\tPeruvian Nuevo Sol\nPGK\tPapua New Guinean Kina\nPHP\tPhilippine Peso\nPKR\tPakistani Rupee\nPLN\tPolish Zloty\nPYG\tParaguayan Guarani\nQAR\tQatari Riyal\nRON\tRomanian Leu\nRSD\tSerbian Dinar\nRUB\tRussian Ruble\nRWF\tRwanda Franc\nSAR\tSaudi Riyal\nSBD\tSolomon Islands Dollar\nSCR\tSeychellois Rupee\nSDG\tSudanese Pound\nSEK\tSwedish Krona\nSGD\tSingapore Dollar\nSHP\tSaint Helena Pound\nSLL\tSierra Leonean Leone\nSOS\tSomali Shilling\nSRD\tSurinamese Dollar\nSSP\tSouth Sudanese Pound\nSTD\tSao Tome and Principe Dobra\nSYP\tSyrian Pound\nSZL\tSwazi Lilangeni\nTHB\tThai Baht\nTJS\tTajikistan Somoni\nTMT\tTurkmenistani Manat\nTND\tTunisian Dinar\nTOP\tTonga Paanga\nTRY\tTurkish Lira\nTTD\tTrinidad and Tobago Dollar\nTWD\tNew Taiwan Dollar\nTZS\tTanzanian Shilling\nUAH\tUkrainian Hryvnia\nUGX\tUgandan Shilling\nUSD\tUnited States Dollar\nUYU\tUruguayan Peso\nUZS\tUzbekistan Som\nVEF\tVenezuelan Bolivar\nVND\tVietnamese Dong\nVUV\tVanuatu Vatu\nWST\tSamoan Tala\nXAF\tCentral African CFA franc\nXCD\tEast Caribbean Dollar\nXOF\tWest African CFA franc\nXPF\tCFP Franc\nYER\tYemeni Rial\nZAR\tSouth African Rand\nZMW\tZambian Kwacha\n\"\"\"\n\n\ndef convert_currency(\n    from_: str = \"USD\", to: str = \"INR\", amount: float = 1.0, api_key: str = \"\"\n) -> str:\n    \"\"\"https://www.amdoren.com/currency-api/\"\"\"\n    # Instead of manually generating parameters\n    params = locals()\n    # from is a reserved keyword\n    params[\"from\"] = params.pop(\"from_\")\n    res = httpx.get(URL_BASE, params=params, timeout=10).json()\n    return str(res[\"amount\"]) if res[\"error\"] == 0 else res[\"error_message\"]\n\n\nif __name__ == \"__main__\":\n    TESTING = os.getenv(\"CI\", \"\")\n    API_KEY = os.getenv(\"AMDOREN_API_KEY\", \"\")\n\n    if not API_KEY and not TESTING:\n        raise KeyError(\n            \"API key must be provided in the 'AMDOREN_API_KEY' environment variable.\"\n        )\n\n    print(\n        convert_currency(\n            input(\"Enter from currency: \").strip(),\n            input(\"Enter to currency: \").strip(),\n            float(input(\"Enter the amount: \").strip()),\n            API_KEY,\n        )\n    )\n"
  },
  {
    "path": "web_programming/current_stock_price.py",
    "content": "# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"beautifulsoup4\",\n#     \"httpx\",\n# ]\n# ///\n\nimport httpx\nfrom bs4 import BeautifulSoup\n\n\"\"\"\nGet the HTML code of finance yahoo and select the current qsp-price\nCurrent AAPL stock price is   228.43\nCurrent AMZN stock price is   201.85\nCurrent IBM  stock price is   210.30\nCurrent GOOG stock price is   177.86\nCurrent MSFT stock price is   414.82\nCurrent ORCL stock price is   188.87\n\"\"\"\n\n\ndef stock_price(symbol: str = \"AAPL\") -> str:\n    \"\"\"\n    >>> stock_price(\"EEEE\")\n    'No <fin-streamer> tag with the specified data-testid attribute found.'\n    >>> isinstance(float(stock_price(\"GOOG\")),float)\n    True\n    \"\"\"\n    url = f\"https://finance.yahoo.com/quote/{symbol}?p={symbol}\"\n    yahoo_finance_source = httpx.get(\n        url, headers={\"USER-AGENT\": \"Mozilla/5.0\"}, timeout=10, follow_redirects=True\n    ).text\n    soup = BeautifulSoup(yahoo_finance_source, \"html.parser\")\n\n    if specific_fin_streamer_tag := soup.find(\"span\", {\"data-testid\": \"qsp-price\"}):\n        return specific_fin_streamer_tag.get_text()\n    return \"No <fin-streamer> tag with the specified data-testid attribute found.\"\n\n\n# Search for the symbol at https://finance.yahoo.com/lookup\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n\n    for symbol in \"AAPL AMZN IBM GOOG MSFT ORCL\".split():\n        print(f\"Current {symbol:<4} stock price is {stock_price(symbol):>8}\")\n"
  },
  {
    "path": "web_programming/current_weather.py",
    "content": "# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"httpx\",\n# ]\n# ///\n\nimport httpx\n\n# Put your API key(s) here\nOPENWEATHERMAP_API_KEY = \"\"\nWEATHERSTACK_API_KEY = \"\"\n\n# Define the URL for the APIs with placeholders\nOPENWEATHERMAP_URL_BASE = \"https://api.openweathermap.org/data/2.5/weather\"\nWEATHERSTACK_URL_BASE = \"http://api.weatherstack.com/current\"\n\n\ndef current_weather(location: str) -> list[dict]:\n    \"\"\"\n    >>> current_weather(\"location\")\n    Traceback (most recent call last):\n        ...\n    ValueError: No API keys provided or no valid data returned.\n    \"\"\"\n    weather_data = []\n    if OPENWEATHERMAP_API_KEY:\n        params_openweathermap = {\"q\": location, \"appid\": OPENWEATHERMAP_API_KEY}\n        response_openweathermap = httpx.get(\n            OPENWEATHERMAP_URL_BASE, params=params_openweathermap, timeout=10\n        )\n        weather_data.append({\"OpenWeatherMap\": response_openweathermap.json()})\n    if WEATHERSTACK_API_KEY:\n        params_weatherstack = {\"query\": location, \"access_key\": WEATHERSTACK_API_KEY}\n        response_weatherstack = httpx.get(\n            WEATHERSTACK_URL_BASE, params=params_weatherstack, timeout=10\n        )\n        weather_data.append({\"Weatherstack\": response_weatherstack.json()})\n    if not weather_data:\n        raise ValueError(\"No API keys provided or no valid data returned.\")\n    return weather_data\n\n\nif __name__ == \"__main__\":\n    from pprint import pprint\n\n    location = \"to be determined...\"\n    while location:\n        location = input(\"Enter a location (city name or latitude,longitude): \").strip()\n        if location:\n            try:\n                weather_data = current_weather(location)\n                for forecast in weather_data:\n                    pprint(forecast)\n            except ValueError as e:\n                print(repr(e))\n                location = \"\"\n"
  },
  {
    "path": "web_programming/daily_horoscope.py",
    "content": "# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"beautifulsoup4\",\n#     \"httpx\",\n# ]\n# ///\n\nimport httpx\nfrom bs4 import BeautifulSoup\n\n\ndef horoscope(zodiac_sign: int, day: str) -> str:\n    url = (\n        \"https://www.horoscope.com/us/horoscopes/general/\"\n        f\"horoscope-general-daily-{day}.aspx?sign={zodiac_sign}\"\n    )\n    soup = BeautifulSoup(httpx.get(url, timeout=10).content, \"html.parser\")\n    return soup.find(\"div\", class_=\"main-horoscope\").p.text\n\n\nif __name__ == \"__main__\":\n    print(\"Daily Horoscope. \\n\")\n    print(\n        \"enter your Zodiac sign number:\\n\",\n        \"1. Aries\\n\",\n        \"2. Taurus\\n\",\n        \"3. Gemini\\n\",\n        \"4. Cancer\\n\",\n        \"5. Leo\\n\",\n        \"6. Virgo\\n\",\n        \"7. Libra\\n\",\n        \"8. Scorpio\\n\",\n        \"9. Sagittarius\\n\",\n        \"10. Capricorn\\n\",\n        \"11. Aquarius\\n\",\n        \"12. Pisces\\n\",\n    )\n    zodiac_sign = int(input(\"number> \").strip())\n    print(\"choose some day:\\n\", \"yesterday\\n\", \"today\\n\", \"tomorrow\\n\")\n    day = input(\"enter the day> \")\n    horoscope_text = horoscope(zodiac_sign, day)\n    print(horoscope_text)\n"
  },
  {
    "path": "web_programming/download_images_from_google_query.py",
    "content": "# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"beautifulsoup4\",\n#     \"httpx\",\n# ]\n# ///\n\nimport json\nimport os\nimport re\nimport sys\nimport urllib.request\n\nimport httpx\nfrom bs4 import BeautifulSoup\n\nheaders = {\n    \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36\"\n    \" (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582\"\n}\n\n\ndef download_images_from_google_query(query: str = \"dhaka\", max_images: int = 5) -> int:\n    \"\"\"\n    Searches google using the provided query term and downloads the images in a folder.\n\n    Args:\n         query : The image search term to be provided by the user. Defaults to\n        \"dhaka\".\n        image_numbers : [description]. Defaults to 5.\n\n    Returns:\n        The number of images successfully downloaded.\n\n    # Comment out slow (4.20s call) doctests\n    # >>> download_images_from_google_query()\n    5\n    # >>> download_images_from_google_query(\"potato\")\n    5\n    \"\"\"\n    max_images = min(max_images, 50)  # Prevent abuse!\n    params = {\n        \"q\": query,\n        \"tbm\": \"isch\",\n        \"hl\": \"en\",\n        \"ijn\": \"0\",\n    }\n\n    html = httpx.get(\n        \"https://www.google.com/search\", params=params, headers=headers, timeout=10\n    )\n    soup = BeautifulSoup(html.text, \"html.parser\")\n    matched_images_data = \"\".join(\n        re.findall(r\"AF_initDataCallback\\(([^<]+)\\);\", str(soup.select(\"script\")))\n    )\n\n    matched_images_data_fix = json.dumps(matched_images_data)\n    matched_images_data_json = json.loads(matched_images_data_fix)\n\n    matched_google_image_data = re.findall(\n        r\"\\[\\\"GRID_STATE0\\\",null,\\[\\[1,\\[0,\\\".*?\\\",(.*),\\\"All\\\",\",\n        matched_images_data_json,\n    )\n    if not matched_google_image_data:\n        return 0\n\n    removed_matched_google_images_thumbnails = re.sub(\n        r\"\\[\\\"(https\\:\\/\\/encrypted-tbn0\\.gstatic\\.com\\/images\\?.*?)\\\",\\d+,\\d+\\]\",\n        \"\",\n        str(matched_google_image_data),\n    )\n\n    matched_google_full_resolution_images = re.findall(\n        r\"(?:'|,),\\[\\\"(https:|http.*?)\\\",\\d+,\\d+\\]\",\n        removed_matched_google_images_thumbnails,\n    )\n    for index, fixed_full_res_image in enumerate(matched_google_full_resolution_images):\n        if index >= max_images:\n            return index\n        original_size_img_not_fixed = bytes(fixed_full_res_image, \"ascii\").decode(\n            \"unicode-escape\"\n        )\n        original_size_img = bytes(original_size_img_not_fixed, \"ascii\").decode(\n            \"unicode-escape\"\n        )\n        opener = urllib.request.build_opener()\n        opener.addheaders = [\n            (\n                \"User-Agent\",\n                \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36\"\n                \" (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582\",\n            )\n        ]\n        urllib.request.install_opener(opener)\n        path_name = f\"query_{query.replace(' ', '_')}\"\n        if not os.path.exists(path_name):\n            os.makedirs(path_name)\n        urllib.request.urlretrieve(  # noqa: S310\n            original_size_img, f\"{path_name}/original_size_img_{index}.jpg\"\n        )\n    return index\n\n\nif __name__ == \"__main__\":\n    try:\n        image_count = download_images_from_google_query(sys.argv[1])\n        print(f\"{image_count} images were downloaded to disk.\")\n    except IndexError:\n        print(\"Please provide a search term.\")\n        raise\n"
  },
  {
    "path": "web_programming/emails_from_url.py",
    "content": "\"\"\"Get the site emails from URL.\"\"\"\n\n# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"httpx\",\n# ]\n# ///\n\nfrom __future__ import annotations\n\n__author__ = \"Muhammad Umer Farooq\"\n__license__ = \"MIT\"\n__version__ = \"1.0.0\"\n__maintainer__ = \"Muhammad Umer Farooq\"\n__email__ = \"contact@muhammadumerfarooq.me\"\n__status__ = \"Alpha\"\n\nimport re\nfrom html.parser import HTMLParser\nfrom urllib import parse\n\nimport httpx\n\n\nclass Parser(HTMLParser):\n    def __init__(self, domain: str) -> None:\n        super().__init__()\n        self.urls: list[str] = []\n        self.domain = domain\n\n    def handle_starttag(self, tag: str, attrs: list[tuple[str, str | None]]) -> None:\n        \"\"\"\n        This function parse html to take takes url from tags\n        \"\"\"\n        # Only parse the 'anchor' tag.\n        if tag == \"a\":\n            # Check the list of defined attributes.\n            for name, value in attrs:\n                # If href is defined, not empty nor # print it and not already in urls.\n                if name == \"href\" and value not in (*self.urls, \"\", \"#\"):\n                    url = parse.urljoin(self.domain, value)\n                    self.urls.append(url)\n\n\n# Get main domain name (example.com)\ndef get_domain_name(url: str) -> str:\n    \"\"\"\n    This function get the main domain name\n\n    >>> get_domain_name(\"https://a.b.c.d/e/f?g=h,i=j#k\")\n    'c.d'\n    >>> get_domain_name(\"Not a URL!\")\n    ''\n    \"\"\"\n    return \".\".join(get_sub_domain_name(url).split(\".\")[-2:])\n\n\n# Get sub domain name (sub.example.com)\ndef get_sub_domain_name(url: str) -> str:\n    \"\"\"\n    >>> get_sub_domain_name(\"https://a.b.c.d/e/f?g=h,i=j#k\")\n    'a.b.c.d'\n    >>> get_sub_domain_name(\"Not a URL!\")\n    ''\n    \"\"\"\n    return parse.urlparse(url).netloc\n\n\ndef emails_from_url(url: str = \"https://github.com\") -> list[str]:\n    \"\"\"\n    This function takes url and return all valid urls\n    \"\"\"\n    # Get the base domain from the url\n    domain = get_domain_name(url)\n\n    # Initialize the parser\n    parser = Parser(domain)\n\n    try:\n        # Open URL\n        r = httpx.get(url, timeout=10, follow_redirects=True)\n\n        # pass the raw HTML to the parser to get links\n        parser.feed(r.text)\n\n        # Get links and loop through\n        valid_emails = set()\n        for link in parser.urls:\n            # open URL.\n            # Check if the link is already absolute\n            if not link.startswith(\"http://\") and not link.startswith(\"https://\"):\n                # Prepend protocol only if link starts with domain, normalize otherwise\n                if link.startswith(domain):\n                    link = f\"https://{link}\"\n                else:\n                    link = parse.urljoin(f\"https://{domain}\", link)\n            try:\n                read = httpx.get(link, timeout=10, follow_redirects=True)\n                # Get the valid email.\n                emails = re.findall(\"[a-zA-Z0-9]+@\" + domain, read.text)\n                # If not in list then append it.\n                for email in emails:\n                    valid_emails.add(email)\n            except ValueError:\n                pass\n    except ValueError:\n        raise SystemExit(1)\n\n    # Finally return a sorted list of email addresses with no duplicates.\n    return sorted(valid_emails)\n\n\nif __name__ == \"__main__\":\n    emails = emails_from_url(\"https://github.com\")\n    print(f\"{len(emails)} emails found:\")\n    print(\"\\n\".join(sorted(emails)))\n"
  },
  {
    "path": "web_programming/fetch_anime_and_play.py",
    "content": "# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"beautifulsoup4\",\n#     \"fake-useragent\",\n#     \"httpx\",\n# ]\n# ///\n\nimport httpx\nfrom bs4 import BeautifulSoup, NavigableString, Tag\nfrom fake_useragent import UserAgent\n\nBASE_URL = \"https://ww7.gogoanime2.org\"\n\n\ndef search_scraper(anime_name: str) -> list:\n    \"\"\"[summary]\n\n    Take an url and\n    return list of anime after scraping the site.\n\n    >>> type(search_scraper(\"demon_slayer\"))\n    <class 'list'>\n\n    Args:\n        anime_name (str): [Name of anime]\n\n    Raises:\n        e: [Raises exception on failure]\n\n    Returns:\n        [list]: [List of animes]\n    \"\"\"\n\n    # concat the name to form the search url.\n    search_url = f\"{BASE_URL}/search?keyword={anime_name}\"\n\n    response = httpx.get(\n        search_url, headers={\"UserAgent\": UserAgent().chrome}, timeout=10\n    )  # request the url.\n\n    # Is the response ok?\n    response.raise_for_status()\n\n    # parse with soup.\n    soup = BeautifulSoup(response.text, \"html.parser\")\n\n    # get list of anime\n    anime_ul = soup.find(\"ul\", {\"class\": \"items\"})\n    if anime_ul is None or isinstance(anime_ul, NavigableString):\n        msg = f\"Could not find and anime with name {anime_name}\"\n        raise ValueError(msg)\n    anime_li = anime_ul.children\n\n    # for each anime, insert to list. the name and url.\n    anime_list = []\n    for anime in anime_li:\n        if isinstance(anime, Tag):\n            anime_url = anime.find(\"a\")\n            if anime_url is None or isinstance(anime_url, NavigableString):\n                continue\n            anime_title = anime.find(\"a\")\n            if anime_title is None or isinstance(anime_title, NavigableString):\n                continue\n\n            anime_list.append({\"title\": anime_title[\"title\"], \"url\": anime_url[\"href\"]})\n\n    return anime_list\n\n\ndef search_anime_episode_list(episode_endpoint: str) -> list:\n    \"\"\"[summary]\n\n    Take an url and\n    return list of episodes after scraping the site\n    for an url.\n\n    >>> type(search_anime_episode_list(\"/anime/kimetsu-no-yaiba\"))\n    <class 'list'>\n\n    Args:\n        episode_endpoint (str): [Endpoint of episode]\n\n    Raises:\n        e: [description]\n\n    Returns:\n        [list]: [List of episodes]\n    \"\"\"\n\n    request_url = f\"{BASE_URL}{episode_endpoint}\"\n\n    response = httpx.get(\n        url=request_url, headers={\"UserAgent\": UserAgent().chrome}, timeout=10\n    )\n    response.raise_for_status()\n\n    soup = BeautifulSoup(response.text, \"html.parser\")\n\n    # With this id. get the episode list.\n    episode_page_ul = soup.find(\"ul\", {\"id\": \"episode_related\"})\n    if episode_page_ul is None or isinstance(episode_page_ul, NavigableString):\n        msg = f\"Could not find any anime eposiodes with name {anime_name}\"\n        raise ValueError(msg)\n    episode_page_li = episode_page_ul.children\n\n    episode_list = []\n    for episode in episode_page_li:\n        if isinstance(episode, Tag):\n            url = episode.find(\"a\")\n            if url is None or isinstance(url, NavigableString):\n                continue\n            title = episode.find(\"div\", {\"class\": \"name\"})\n            if title is None or isinstance(title, NavigableString):\n                continue\n\n            episode_list.append(\n                {\"title\": title.text.replace(\" \", \"\"), \"url\": url[\"href\"]}\n            )\n\n    return episode_list\n\n\ndef get_anime_episode(episode_endpoint: str) -> list:\n    \"\"\"[summary]\n\n    Get click url and download url from episode url\n\n    >>> type(get_anime_episode(\"/watch/kimetsu-no-yaiba/1\"))\n    <class 'list'>\n\n    Args:\n        episode_endpoint (str): [Endpoint of episode]\n\n    Raises:\n        e: [description]\n\n    Returns:\n        [list]: [List of download and watch url]\n    \"\"\"\n\n    episode_page_url = f\"{BASE_URL}{episode_endpoint}\"\n\n    response = httpx.get(\n        url=episode_page_url, headers={\"User-Agent\": UserAgent().chrome}, timeout=10\n    )\n    response.raise_for_status()\n\n    soup = BeautifulSoup(response.text, \"html.parser\")\n\n    url = soup.find(\"iframe\", {\"id\": \"playerframe\"})\n    if url is None or isinstance(url, NavigableString):\n        msg = f\"Could not find url and download url from {episode_endpoint}\"\n        raise RuntimeError(msg)\n\n    episode_url = url[\"src\"]\n    if not isinstance(episode_url, str):\n        msg = f\"Could not find url and download url from {episode_endpoint}\"\n        raise RuntimeError(msg)\n    download_url = episode_url.replace(\"/embed/\", \"/playlist/\") + \".m3u8\"\n\n    return [f\"{BASE_URL}{episode_url}\", f\"{BASE_URL}{download_url}\"]\n\n\nif __name__ == \"__main__\":\n    anime_name = input(\"Enter anime name: \").strip()\n    anime_list = search_scraper(anime_name)\n    print(\"\\n\")\n\n    if len(anime_list) == 0:\n        print(\"No anime found with this name\")\n    else:\n        print(f\"Found {len(anime_list)} results: \")\n        for i, anime in enumerate(anime_list):\n            anime_title = anime[\"title\"]\n            print(f\"{i + 1}. {anime_title}\")\n\n        anime_choice = int(input(\"\\nPlease choose from the following list: \").strip())\n        chosen_anime = anime_list[anime_choice - 1]\n        print(f\"You chose {chosen_anime['title']}. Searching for episodes...\")\n\n        episode_list = search_anime_episode_list(chosen_anime[\"url\"])\n        if len(episode_list) == 0:\n            print(\"No episode found for this anime\")\n        else:\n            print(f\"Found {len(episode_list)} results: \")\n            for i, episode in enumerate(episode_list):\n                print(f\"{i + 1}. {episode['title']}\")\n\n            episode_choice = int(input(\"\\nChoose an episode by serial no: \").strip())\n            chosen_episode = episode_list[episode_choice - 1]\n            print(f\"You chose {chosen_episode['title']}. Searching...\")\n\n            episode_url, download_url = get_anime_episode(chosen_episode[\"url\"])\n            print(f\"\\nTo watch, ctrl+click on {episode_url}.\")\n            print(f\"To download, ctrl+click on {download_url}.\")\n"
  },
  {
    "path": "web_programming/fetch_bbc_news.py",
    "content": "# Created by sarathkaul on 12/11/19\n\n# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"httpx\",\n# ]\n# ///\n\nimport httpx\n\n_NEWS_API = \"https://newsapi.org/v1/articles?source=bbc-news&sortBy=top&apiKey=\"\n\n\ndef fetch_bbc_news(bbc_news_api_key: str) -> None:\n    # fetching a list of articles in json format\n    bbc_news_page = httpx.get(_NEWS_API + bbc_news_api_key, timeout=10).json()\n    # each article in the list is a dict\n    for i, article in enumerate(bbc_news_page[\"articles\"], 1):\n        print(f\"{i}.) {article['title']}\")\n\n\nif __name__ == \"__main__\":\n    fetch_bbc_news(bbc_news_api_key=\"<Your BBC News API key goes here>\")\n"
  },
  {
    "path": "web_programming/fetch_github_info.py",
    "content": "#!/usr/bin/env python3\n\"\"\"\nCreated by sarathkaul on 14/11/19\nUpdated by lawric1 on 24/11/20\n\nAuthentication will be made via access token.\nTo generate your personal access token visit https://github.com/settings/tokens.\n\nNOTE:\nNever hardcode any credential information in the code. Always use an environment\nfile to store the private information and use the `os` module to get the information\nduring runtime.\n\nCreate a \".env\" file in the root directory and write these two lines in that file\nwith your token::\n\n#!/usr/bin/env bash\nexport USER_TOKEN=\"\"\n\"\"\"\n\n# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"httpx\",\n# ]\n# ///\n\nfrom __future__ import annotations\n\nimport os\nfrom typing import Any\n\nimport httpx\n\nBASE_URL = \"https://api.github.com\"\n\n# https://docs.github.com/en/free-pro-team@latest/rest/reference/users#get-the-authenticated-user\nAUTHENTICATED_USER_ENDPOINT = BASE_URL + \"/user\"\n\n# https://github.com/settings/tokens\nUSER_TOKEN = os.environ.get(\"USER_TOKEN\", \"\")\n\n\ndef fetch_github_info(auth_token: str) -> dict[Any, Any]:\n    \"\"\"\n    Fetch GitHub info of a user using the httpx module\n    \"\"\"\n    headers = {\n        \"Authorization\": f\"token {auth_token}\",\n        \"Accept\": \"application/vnd.github.v3+json\",\n    }\n    return httpx.get(AUTHENTICATED_USER_ENDPOINT, headers=headers, timeout=10).json()\n\n\nif __name__ == \"__main__\":  # pragma: no cover\n    if USER_TOKEN:\n        for key, value in fetch_github_info(USER_TOKEN).items():\n            print(f\"{key}: {value}\")\n    else:\n        raise ValueError(\"'USER_TOKEN' field cannot be empty.\")\n"
  },
  {
    "path": "web_programming/fetch_jobs.py",
    "content": "\"\"\"\nScraping jobs given job title and location from indeed website\n\"\"\"\n\n# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"beautifulsoup4\",\n#     \"httpx\",\n# ]\n# ///\n\nfrom __future__ import annotations\n\nfrom collections.abc import Generator\n\nimport httpx\nfrom bs4 import BeautifulSoup\n\nurl = \"https://www.indeed.co.in/jobs?q=mobile+app+development&l=\"\n\n\ndef fetch_jobs(location: str = \"mumbai\") -> Generator[tuple[str, str]]:\n    soup = BeautifulSoup(httpx.get(url + location, timeout=10).content, \"html.parser\")\n    # This attribute finds out all the specifics listed in a job\n    for job in soup.find_all(\"div\", attrs={\"data-tn-component\": \"organicJob\"}):\n        job_title = job.find(\"a\", attrs={\"data-tn-element\": \"jobTitle\"}).text.strip()\n        company_name = job.find(\"span\", {\"class\": \"company\"}).text.strip()\n        yield job_title, company_name\n\n\nif __name__ == \"__main__\":\n    for i, job in enumerate(fetch_jobs(\"Bangalore\"), 1):\n        print(f\"Job {i:>2} is {job[0]} at {job[1]}\")\n"
  },
  {
    "path": "web_programming/fetch_quotes.py",
    "content": "\"\"\"\nThis file fetches quotes from the \" ZenQuotes API \".\nIt does not require any API key as it uses free tier.\n\nFor more details and premium features visit:\n    https://zenquotes.io/\n\"\"\"\n\n# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"httpx\",\n# ]\n# ///\n\nimport pprint\n\nimport httpx\n\nAPI_ENDPOINT_URL = \"https://zenquotes.io/api\"\n\n\ndef quote_of_the_day() -> list:\n    return httpx.get(API_ENDPOINT_URL + \"/today\", timeout=10).json()\n\n\ndef random_quotes() -> list:\n    return httpx.get(API_ENDPOINT_URL + \"/random\", timeout=10).json()\n\n\nif __name__ == \"__main__\":\n    \"\"\"\n    response object has all the info with the quote\n    To retrieve the actual quote access the response.json() object as below\n    response.json() is a list of json object\n        response.json()[0]['q'] = actual quote.\n        response.json()[0]['a'] = author name.\n        response.json()[0]['h'] = in html format.\n    \"\"\"\n    response = random_quotes()\n    pprint.pprint(response)\n"
  },
  {
    "path": "web_programming/fetch_well_rx_price.py",
    "content": "\"\"\"\n\nScrape the price and pharmacy name for a prescription drug from rx site\nafter providing the drug name and zipcode.\n\n\"\"\"\n\nimport httpx\nfrom bs4 import BeautifulSoup\n\nBASE_URL = \"https://www.wellrx.com/prescriptions/{}/{}/?freshSearch=true\"\n\n\ndef fetch_pharmacy_and_price_list(drug_name: str, zip_code: str) -> list | None:\n    \"\"\"[summary]\n\n    This function will take input of drug name and zipcode,\n    then request to the BASE_URL site.\n    Get the page data and scrape it to generate the\n    list of the lowest prices for the prescription drug.\n\n    Args:\n        drug_name (str): [Drug name]\n        zip_code(str): [Zip code]\n\n    Returns:\n        list: [List of pharmacy name and price]\n\n    >>> print(fetch_pharmacy_and_price_list(None, None))\n    None\n    >>> print(fetch_pharmacy_and_price_list(None, 30303))\n    None\n    >>> print(fetch_pharmacy_and_price_list(\"eliquis\", None))\n    None\n    \"\"\"\n\n    try:\n        # Has user provided both inputs?\n        if not drug_name or not zip_code:\n            return None\n\n        request_url = BASE_URL.format(drug_name, zip_code)\n        response = httpx.get(request_url, timeout=10).raise_for_status()\n\n        # Scrape the data using bs4\n        soup = BeautifulSoup(response.text, \"html.parser\")\n\n        # This list will store the name and price.\n        pharmacy_price_list = []\n\n        # Fetch all the grids that contain the items.\n        grid_list = soup.find_all(\"div\", {\"class\": \"grid-x pharmCard\"})\n        if grid_list and len(grid_list) > 0:\n            for grid in grid_list:\n                # Get the pharmacy price.\n                pharmacy_name = grid.find(\"p\", {\"class\": \"list-title\"}).text\n\n                # Get the price of the drug.\n                price = grid.find(\"span\", {\"p\", \"price price-large\"}).text\n\n                pharmacy_price_list.append(\n                    {\n                        \"pharmacy_name\": pharmacy_name,\n                        \"price\": price,\n                    }\n                )\n\n        return pharmacy_price_list\n\n    except (httpx.HTTPError, ValueError):\n        return None\n\n\nif __name__ == \"__main__\":\n    # Enter a drug name and a zip code\n    drug_name = input(\"Enter drug name: \").strip()\n    zip_code = input(\"Enter zip code: \").strip()\n\n    pharmacy_price_list: list | None = fetch_pharmacy_and_price_list(\n        drug_name, zip_code\n    )\n\n    if pharmacy_price_list:\n        print(f\"\\nSearch results for {drug_name} at location {zip_code}:\")\n        for pharmacy_price in pharmacy_price_list:\n            name = pharmacy_price[\"pharmacy_name\"]\n            price = pharmacy_price[\"price\"]\n\n            print(f\"Pharmacy: {name} Price: {price}\")\n    else:\n        print(f\"No results found for {drug_name}\")\n"
  },
  {
    "path": "web_programming/get_amazon_product_data.py",
    "content": "\"\"\"\nThis file provides a function which will take a product name as input from the user,\nand fetch from Amazon information about products of this name or category.  The product\ninformation will include title, URL, price, ratings, and the discount available.\n\"\"\"\n\n# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"beautifulsoup4\",\n#     \"httpx\",\n#     \"pandas\",\n# ]\n# ///\n\nfrom itertools import zip_longest\n\nimport httpx\nfrom bs4 import BeautifulSoup\nfrom pandas import DataFrame\n\n\ndef get_amazon_product_data(product: str = \"laptop\") -> DataFrame:\n    \"\"\"\n    Take a product name or category as input and return product information from Amazon\n    including title, URL, price, ratings, and the discount available.\n    \"\"\"\n    url = f\"https://www.amazon.in/laptop/s?k={product}\"\n    header = {\n        \"User-Agent\": (\n            \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36\"\n            \"(KHTML, like Gecko)Chrome/44.0.2403.157 Safari/537.36\"\n        ),\n        \"Accept-Language\": \"en-US, en;q=0.5\",\n    }\n    soup = BeautifulSoup(\n        httpx.get(url, headers=header, timeout=10).text, features=\"lxml\"\n    )\n    # Initialize a Pandas dataframe with the column titles\n    data_frame = DataFrame(\n        columns=[\n            \"Product Title\",\n            \"Product Link\",\n            \"Current Price of the product\",\n            \"Product Rating\",\n            \"MRP of the product\",\n            \"Discount\",\n        ]\n    )\n    # Loop through each entry and store them in the dataframe\n    for item, _ in zip_longest(\n        soup.find_all(\n            \"div\",\n            attrs={\"class\": \"s-result-item\", \"data-component-type\": \"s-search-result\"},\n        ),\n        soup.find_all(\"div\", attrs={\"class\": \"a-row a-size-base a-color-base\"}),\n    ):\n        try:\n            product_title = item.h2.text\n            product_link = \"https://www.amazon.in/\" + item.h2.a[\"href\"]\n            product_price = item.find(\"span\", attrs={\"class\": \"a-offscreen\"}).text\n            try:\n                product_rating = item.find(\"span\", attrs={\"class\": \"a-icon-alt\"}).text\n            except AttributeError:\n                product_rating = \"Not available\"\n            try:\n                product_mrp = (\n                    \"₹\"\n                    + item.find(\n                        \"span\", attrs={\"class\": \"a-price a-text-price\"}\n                    ).text.split(\"₹\")[1]\n                )\n            except AttributeError:\n                product_mrp = \"\"\n            try:\n                discount = float(\n                    (\n                        (\n                            float(product_mrp.strip(\"₹\").replace(\",\", \"\"))\n                            - float(product_price.strip(\"₹\").replace(\",\", \"\"))\n                        )\n                        / float(product_mrp.strip(\"₹\").replace(\",\", \"\"))\n                    )\n                    * 100\n                )\n            except ValueError:\n                discount = float(\"nan\")\n        except AttributeError:\n            continue\n        data_frame.loc[str(len(data_frame.index))] = [\n            product_title,\n            product_link,\n            product_price,\n            product_rating,\n            product_mrp,\n            discount,\n        ]\n    data_frame.loc[\n        data_frame[\"Current Price of the product\"] > data_frame[\"MRP of the product\"],\n        \"MRP of the product\",\n    ] = \" \"\n    data_frame.loc[\n        data_frame[\"Current Price of the product\"] > data_frame[\"MRP of the product\"],\n        \"Discount\",\n    ] = \" \"\n    data_frame.index += 1\n    return data_frame\n\n\nif __name__ == \"__main__\":\n    product = \"headphones\"\n    get_amazon_product_data(product).to_csv(f\"Amazon Product Data for {product}.csv\")\n"
  },
  {
    "path": "web_programming/get_imdb_top_250_movies_csv.py",
    "content": "# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"beautifulsoup4\",\n#     \"httpx\",\n# ]\n# ///\n\nfrom __future__ import annotations\n\nimport csv\n\nimport httpx\nfrom bs4 import BeautifulSoup\n\n\ndef get_imdb_top_250_movies(url: str = \"\") -> dict[str, float]:\n    url = url or \"https://www.imdb.com/chart/top/?ref_=nv_mv_250\"\n    soup = BeautifulSoup(httpx.get(url, timeout=10).text, \"html.parser\")\n    titles = soup.find_all(\"h3\", class_=\"ipc-title__text\")\n    ratings = soup.find_all(\"span\", class_=\"ipc-rating-star--rating\")\n    return {\n        title.a.text: float(rating.strong.text)\n        for title, rating in zip(titles, ratings)\n    }\n\n\ndef write_movies(filename: str = \"IMDb_Top_250_Movies.csv\") -> None:\n    movies = get_imdb_top_250_movies()\n    with open(filename, \"w\", newline=\"\") as out_file:\n        writer = csv.writer(out_file)\n        writer.writerow([\"Movie title\", \"IMDb rating\"])\n        for title, rating in movies.items():\n            writer.writerow([title, rating])\n\n\nif __name__ == \"__main__\":\n    write_movies()\n"
  },
  {
    "path": "web_programming/get_imdbtop.py.DISABLED",
    "content": "import bs4\nimport requests\n\n\ndef get_movie_data_from_soup(soup: bs4.element.ResultSet) -> dict[str, str]:\n    return {\n        \"name\": soup.h3.a.text,\n        \"genre\": soup.find(\"span\", class_=\"genre\").text.strip(),\n        \"rating\": soup.strong.text,\n        \"page_link\": f\"https://www.imdb.com{soup.a.get('href')}\",\n    }\n\n\ndef get_imdb_top_movies(num_movies: int = 5) -> tuple:\n    \"\"\"Get the top num_movies most highly rated movies from IMDB and\n    return a tuple of dicts describing each movie's name, genre, rating, and URL.\n\n    Args:\n        num_movies: The number of movies to get. Defaults to 5.\n\n    Returns:\n        A list of tuples containing information about the top n movies.\n\n    >>> len(get_imdb_top_movies(5))\n    5\n    >>> len(get_imdb_top_movies(-3))\n    0\n    >>> len(get_imdb_top_movies(4.99999))\n    4\n    \"\"\"\n    num_movies = int(float(num_movies))\n    if num_movies < 1:\n        return ()\n    base_url = (\n        \"https://www.imdb.com/search/title?title_type=\"\n        f\"feature&sort=num_votes,desc&count={num_movies}\"\n    )\n    source = bs4.BeautifulSoup(requests.get(base_url).content, \"html.parser\")\n    return tuple(\n        get_movie_data_from_soup(movie)\n        for movie in source.find_all(\"div\", class_=\"lister-item mode-advanced\")\n    )\n\n\nif __name__ == \"__main__\":\n    import json\n\n    num_movies = int(input(\"How many movies would you like to see? \"))\n    print(\n        \", \".join(\n            json.dumps(movie, indent=4) for movie in get_imdb_top_movies(num_movies)\n        )\n    )\n"
  },
  {
    "path": "web_programming/get_ip_geolocation.py",
    "content": "# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"httpx\",\n# ]\n# ///\n\nimport httpx\n\n\n# Function to get geolocation data for an IP address\ndef get_ip_geolocation(ip_address: str) -> str:\n    try:\n        # Construct the URL for the IP geolocation API\n        url = f\"https://ipinfo.io/{ip_address}/json\"\n\n        # Send a GET request to the API\n        response = httpx.get(url, timeout=10)\n\n        # Check if the HTTP request was successful\n        response.raise_for_status()\n\n        # Parse the response as JSON\n        data = response.json()\n\n        # Check if city, region, and country information is available\n        if \"city\" in data and \"region\" in data and \"country\" in data:\n            location = f\"Location: {data['city']}, {data['region']}, {data['country']}\"\n        else:\n            location = \"Location data not found.\"\n\n        return location\n    except httpx.RequestError as e:\n        # Handle network-related exceptions\n        return f\"Request error: {e}\"\n    except ValueError as e:\n        # Handle JSON parsing errors\n        return f\"JSON parsing error: {e}\"\n\n\nif __name__ == \"__main__\":\n    # Prompt the user to enter an IP address\n    ip_address = input(\"Enter an IP address: \")\n\n    # Get the geolocation data and print it\n    location = get_ip_geolocation(ip_address)\n    print(location)\n"
  },
  {
    "path": "web_programming/get_top_billionaires.py",
    "content": "\"\"\"\nCAUTION: You may get a json.decoding error.\nThis works for some of us but fails for others.\n\"\"\"\n\n# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"httpx\",\n#     \"rich\",\n# ]\n# ///\n\nfrom datetime import UTC, date, datetime\n\nimport httpx\nfrom rich import box\nfrom rich import console as rich_console\nfrom rich import table as rich_table\n\nLIMIT = 10\nTODAY = datetime.now(tz=UTC)\nAPI_URL = (\n    \"https://www.forbes.com/forbesapi/person/rtb/0/position/true.json\"\n    \"?fields=personName,gender,source,countryOfCitizenship,birthDate,finalWorth\"\n    f\"&limit={LIMIT}\"\n)\n\n\ndef years_old(birth_timestamp: int, today: date | None = None) -> int:\n    \"\"\"\n    Calculate the age in years based on the given birth date.  Only the year, month,\n    and day are used in the calculation.  The time of day is ignored.\n\n    Args:\n        birth_timestamp: The date of birth.\n        today: (useful for writing tests) or if None then datetime.date.today().\n\n    Returns:\n        int: The age in years.\n\n    Examples:\n    >>> today = date(2024, 1, 12)\n    >>> years_old(birth_timestamp=datetime(1959, 11, 20).timestamp(), today=today)\n    64\n    >>> years_old(birth_timestamp=datetime(1970, 2, 13).timestamp(), today=today)\n    53\n    >>> all(\n    ...     years_old(datetime(today.year - i, 1, 12).timestamp(), today=today) == i\n    ...     for i in range(1, 111)\n    ... )\n    True\n    \"\"\"\n    today = today or TODAY.date()\n    birth_date = datetime.fromtimestamp(birth_timestamp, tz=UTC).date()\n    return (today.year - birth_date.year) - (\n        (today.month, today.day) < (birth_date.month, birth_date.day)\n    )\n\n\ndef get_forbes_real_time_billionaires() -> list[dict[str, int | str]]:\n    \"\"\"\n    Get the top 10 real-time billionaires using Forbes API.\n\n    Returns:\n        List of top 10 realtime billionaires data.\n    \"\"\"\n    response_json = httpx.get(API_URL, timeout=10).json()\n    return [\n        {\n            \"Name\": person[\"personName\"],\n            \"Source\": person[\"source\"],\n            \"Country\": person[\"countryOfCitizenship\"],\n            \"Gender\": person[\"gender\"],\n            \"Worth ($)\": f\"{person['finalWorth'] / 1000:.1f} Billion\",\n            \"Age\": str(years_old(person[\"birthDate\"] / 1000)),\n        }\n        for person in response_json[\"personList\"][\"personsLists\"]\n    ]\n\n\ndef display_billionaires(forbes_billionaires: list[dict[str, int | str]]) -> None:\n    \"\"\"\n    Display Forbes real-time billionaires in a rich table.\n\n    Args:\n        forbes_billionaires (list): Forbes top 10 real-time billionaires\n    \"\"\"\n\n    table = rich_table.Table(\n        title=f\"Forbes Top {LIMIT} Real-Time Billionaires at {TODAY:%Y-%m-%d %H:%M}\",\n        style=\"green\",\n        highlight=True,\n        box=box.SQUARE,\n    )\n    for key in forbes_billionaires[0]:\n        table.add_column(key)\n\n    for billionaire in forbes_billionaires:\n        table.add_row(*billionaire.values())\n\n    rich_console.Console().print(table)\n\n\nif __name__ == \"__main__\":\n    from doctest import testmod\n\n    testmod()\n    display_billionaires(get_forbes_real_time_billionaires())\n"
  },
  {
    "path": "web_programming/get_top_hn_posts.py",
    "content": "# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"httpx\",\n# ]\n# ///\n\nfrom __future__ import annotations\n\nimport httpx\n\n\ndef get_hackernews_story(story_id: str) -> dict:\n    url = f\"https://hacker-news.firebaseio.com/v0/item/{story_id}.json?print=pretty\"\n    return httpx.get(url, timeout=10).json()\n\n\ndef hackernews_top_stories(max_stories: int = 10) -> list[dict]:\n    \"\"\"\n    Get the top max_stories posts from HackerNews - https://news.ycombinator.com/\n    \"\"\"\n    url = \"https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty\"\n    story_ids = httpx.get(url, timeout=10).json()[:max_stories]\n    return [get_hackernews_story(story_id) for story_id in story_ids]\n\n\ndef hackernews_top_stories_as_markdown(max_stories: int = 10) -> str:\n    stories = hackernews_top_stories(max_stories)\n    return \"\\n\".join(\"* [{title}]({url})\".format(**story) for story in stories)\n\n\nif __name__ == \"__main__\":\n    print(hackernews_top_stories_as_markdown())\n"
  },
  {
    "path": "web_programming/get_user_tweets.py.DISABLED",
    "content": "import csv\n\nimport tweepy\n\n# Twitter API credentials\nconsumer_key = \"\"\nconsumer_secret = \"\"\naccess_key = \"\"\naccess_secret = \"\"\n\n\ndef get_all_tweets(screen_name: str) -> None:\n    # authorize twitter, initialize tweepy\n    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)\n    auth.set_access_token(access_key, access_secret)\n    api = tweepy.API(auth)\n\n    # initialize a list to hold all the tweepy Tweets\n    alltweets = []\n\n    # make initial request for most recent tweets (200 is the maximum allowed count)\n    new_tweets = api.user_timeline(screen_name=screen_name, count=200)\n\n    # save most recent tweets\n    alltweets.extend(new_tweets)\n\n    # save the id of the oldest tweet less one\n    oldest = alltweets[-1].id - 1\n\n    # keep grabbing tweets until there are no tweets left to grab\n    while len(new_tweets) > 0:\n        print(f\"getting tweets before {oldest}\")\n\n        # all subsequent requests use the max_id param to prevent duplicates\n        new_tweets = api.user_timeline(\n            screen_name=screen_name, count=200, max_id=oldest\n        )\n\n        # save most recent tweets\n        alltweets.extend(new_tweets)\n\n        # update the id of the oldest tweet less one\n        oldest = alltweets[-1].id - 1\n\n        print(f\"...{len(alltweets)} tweets downloaded so far\")\n\n    # transform the tweepy tweets into a 2D array that will populate the csv\n    outtweets = [[tweet.id_str, tweet.created_at, tweet.text] for tweet in alltweets]\n\n    # write the csv\n    with open(f\"new_{screen_name}_tweets.csv\", \"w\") as f:\n        writer = csv.writer(f)\n        writer.writerow([\"id\", \"created_at\", \"text\"])\n        writer.writerows(outtweets)\n\n\nif __name__ == \"__main__\":\n    # pass in the username of the account you want to download\n    get_all_tweets(\"FirePing32\")\n"
  },
  {
    "path": "web_programming/giphy.py",
    "content": "#!/usr/bin/env python3\n\n# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"httpx\",\n# ]\n# ///\n\nimport httpx\n\ngiphy_api_key = \"YOUR API KEY\"\n# Can be fetched from https://developers.giphy.com/dashboard/\n\n\ndef get_gifs(query: str, api_key: str = giphy_api_key) -> list:\n    \"\"\"\n    Get a list of URLs of GIFs based on a given query..\n    \"\"\"\n    formatted_query = \"+\".join(query.split())\n    url = f\"https://api.giphy.com/v1/gifs/search?q={formatted_query}&api_key={api_key}\"\n    gifs = httpx.get(url, timeout=10).json()[\"data\"]\n    return [gif[\"url\"] for gif in gifs]\n\n\nif __name__ == \"__main__\":\n    print(\"\\n\".join(get_gifs(\"space ship\")))\n"
  },
  {
    "path": "web_programming/instagram_crawler.py",
    "content": "#!/usr/bin/env python3\n\n# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"beautifulsoup4\",\n#     \"fake-useragent\",\n#     \"httpx\",\n# ]\n# ///\n\nfrom __future__ import annotations\n\nimport json\n\nimport httpx\nfrom bs4 import BeautifulSoup\nfrom fake_useragent import UserAgent\n\nheaders = {\"UserAgent\": UserAgent().random}\n\n\ndef extract_user_profile(script) -> dict:\n    \"\"\"\n    May raise json.decoder.JSONDecodeError\n    \"\"\"\n    data = script.contents[0]\n    info = json.loads(data[data.find('{\"config\"') : -1])\n    return info[\"entry_data\"][\"ProfilePage\"][0][\"graphql\"][\"user\"]\n\n\nclass InstagramUser:\n    \"\"\"\n    Class Instagram crawl instagram user information\n\n    Usage: (doctest failing on GitHub Actions)\n    # >>> instagram_user = InstagramUser(\"github\")\n    # >>> instagram_user.is_verified\n    True\n    # >>> instagram_user.biography\n    'Built for developers.'\n    \"\"\"\n\n    def __init__(self, username):\n        self.url = f\"https://www.instagram.com/{username}/\"\n        self.user_data = self.get_json()\n\n    def get_json(self) -> dict:\n        \"\"\"\n        Return a dict of user information\n        \"\"\"\n        html = httpx.get(self.url, headers=headers, timeout=10).text\n        scripts = BeautifulSoup(html, \"html.parser\").find_all(\"script\")\n        try:\n            return extract_user_profile(scripts[4])\n        except (json.decoder.JSONDecodeError, KeyError):\n            return extract_user_profile(scripts[3])\n\n    def __repr__(self) -> str:\n        return f\"{self.__class__.__name__}('{self.username}')\"\n\n    def __str__(self) -> str:\n        return f\"{self.fullname} ({self.username}) is {self.biography}\"\n\n    @property\n    def username(self) -> str:\n        return self.user_data[\"username\"]\n\n    @property\n    def fullname(self) -> str:\n        return self.user_data[\"full_name\"]\n\n    @property\n    def biography(self) -> str:\n        return self.user_data[\"biography\"]\n\n    @property\n    def email(self) -> str:\n        return self.user_data[\"business_email\"]\n\n    @property\n    def website(self) -> str:\n        return self.user_data[\"external_url\"]\n\n    @property\n    def number_of_followers(self) -> int:\n        return self.user_data[\"edge_followed_by\"][\"count\"]\n\n    @property\n    def number_of_followings(self) -> int:\n        return self.user_data[\"edge_follow\"][\"count\"]\n\n    @property\n    def number_of_posts(self) -> int:\n        return self.user_data[\"edge_owner_to_timeline_media\"][\"count\"]\n\n    @property\n    def profile_picture_url(self) -> str:\n        return self.user_data[\"profile_pic_url_hd\"]\n\n    @property\n    def is_verified(self) -> bool:\n        return self.user_data[\"is_verified\"]\n\n    @property\n    def is_private(self) -> bool:\n        return self.user_data[\"is_private\"]\n\n\ndef test_instagram_user(username: str = \"github\") -> None:\n    \"\"\"\n    A self running doctest\n    >>> test_instagram_user()\n    \"\"\"\n    import os\n\n    if os.environ.get(\"CI\"):\n        return  # test failing on GitHub Actions\n    instagram_user = InstagramUser(username)\n    assert instagram_user.user_data\n    assert isinstance(instagram_user.user_data, dict)\n    assert instagram_user.username == username\n    if username != \"github\":\n        return\n    assert instagram_user.fullname == \"GitHub\"\n    assert instagram_user.biography == \"Built for developers.\"\n    assert instagram_user.number_of_posts > 150\n    assert instagram_user.number_of_followers > 120000\n    assert instagram_user.number_of_followings > 15\n    assert instagram_user.email == \"support@github.com\"\n    assert instagram_user.website == \"https://github.com/readme\"\n    assert instagram_user.profile_picture_url.startswith(\"https://instagram.\")\n    assert instagram_user.is_verified is True\n    assert instagram_user.is_private is False\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    instagram_user = InstagramUser(\"github\")\n    print(instagram_user)\n    print(f\"{instagram_user.number_of_posts = }\")\n    print(f\"{instagram_user.number_of_followers = }\")\n    print(f\"{instagram_user.number_of_followings = }\")\n    print(f\"{instagram_user.email = }\")\n    print(f\"{instagram_user.website = }\")\n    print(f\"{instagram_user.profile_picture_url = }\")\n    print(f\"{instagram_user.is_verified = }\")\n    print(f\"{instagram_user.is_private = }\")\n"
  },
  {
    "path": "web_programming/instagram_pic.py",
    "content": "# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"beautifulsoup4\",\n#     \"httpx\",\n# ]\n# ///\n\nfrom datetime import UTC, datetime\n\nimport httpx\nfrom bs4 import BeautifulSoup\n\n\ndef download_image(url: str) -> str:\n    \"\"\"\n    Download an image from a given URL by scraping the 'og:image' meta tag.\n\n    Parameters:\n        url: The URL to scrape.\n\n    Returns:\n        A message indicating the result of the operation.\n    \"\"\"\n    try:\n        response = httpx.get(url, timeout=10)\n        response.raise_for_status()\n    except httpx.RequestError as e:\n        return f\"An error occurred during the HTTP request to {url}: {e!r}\"\n\n    soup = BeautifulSoup(response.text, \"html.parser\")\n    image_meta_tag = soup.find(\"meta\", {\"property\": \"og:image\"})\n    if not image_meta_tag:\n        return \"No meta tag with property 'og:image' was found.\"\n\n    image_url = image_meta_tag.get(\"content\")\n    if not image_url:\n        return f\"Image URL not found in meta tag {image_meta_tag}.\"\n\n    try:\n        image_data = httpx.get(image_url, timeout=10).content\n    except httpx.RequestError as e:\n        return f\"An error occurred during the HTTP request to {image_url}: {e!r}\"\n    if not image_data:\n        return f\"Failed to download the image from {image_url}.\"\n\n    file_name = f\"{datetime.now(tz=UTC).astimezone():%Y-%m-%d_%H-%M-%S}.jpg\"\n    with open(file_name, \"wb\") as out_file:\n        out_file.write(image_data)\n    return f\"Image downloaded and saved in the file {file_name}\"\n\n\nif __name__ == \"__main__\":\n    url = input(\"Enter image URL: \").strip() or \"https://www.instagram.com\"\n    print(f\"download_image({url}): {download_image(url)}\")\n"
  },
  {
    "path": "web_programming/instagram_video.py",
    "content": "# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"httpx\",\n# ]\n# ///\n\nfrom datetime import UTC, datetime\n\nimport httpx\n\n\ndef download_video(url: str) -> bytes:\n    base_url = \"https://downloadgram.net/wp-json/wppress/video-downloader/video?url=\"\n    video_url = httpx.get(base_url + url, timeout=10)\n    return httpx.get(video_url, timeout=10).content\n\n\nif __name__ == \"__main__\":\n    url = input(\"Enter Video/IGTV url: \").strip()\n    file_name = f\"{datetime.now(tz=UTC).astimezone():%Y-%m-%d_%H-%M-%S}.mp4\"\n    with open(file_name, \"wb\") as fp:\n        fp.write(download_video(url))\n    print(f\"Done. Video saved to disk as {file_name}.\")\n"
  },
  {
    "path": "web_programming/nasa_data.py",
    "content": "# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"httpx\",\n# ]\n# ///\n\nimport httpx\n\n\ndef get_apod_data(api_key: str) -> dict:\n    \"\"\"\n    Get the APOD(Astronomical Picture of the day) data\n    Get your API Key from: https://api.nasa.gov/\n    \"\"\"\n    url = \"https://api.nasa.gov/planetary/apod\"\n    return httpx.get(url, params={\"api_key\": api_key}, timeout=10).json()\n\n\ndef save_apod(api_key: str, path: str = \".\") -> dict:\n    apod_data = get_apod_data(api_key)\n    img_url = apod_data[\"url\"]\n    img_name = img_url.split(\"/\")[-1]\n    response = httpx.get(img_url, timeout=10)\n\n    with open(f\"{path}/{img_name}\", \"wb+\") as img_file:\n        img_file.write(response.content)\n    del response\n    return apod_data\n\n\ndef get_archive_data(query: str) -> dict:\n    \"\"\"\n    Get the data of a particular query from NASA archives\n    \"\"\"\n    url = \"https://images-api.nasa.gov/search\"\n    return httpx.get(url, params={\"q\": query}, timeout=10).json()\n\n\nif __name__ == \"__main__\":\n    print(save_apod(\"YOUR API KEY\"))\n    apollo_2011_items = get_archive_data(\"apollo 2011\")[\"collection\"][\"items\"]\n    print(apollo_2011_items[0][\"data\"][0][\"description\"])\n"
  },
  {
    "path": "web_programming/open_google_results.py",
    "content": "# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"beautifulsoup4\",\n#     \"fake-useragent\",\n#     \"httpx\",\n# ]\n# ///\n\nimport webbrowser\nfrom sys import argv\nfrom urllib.parse import parse_qs, quote\n\nimport httpx\nfrom bs4 import BeautifulSoup\nfrom fake_useragent import UserAgent\n\nif __name__ == \"__main__\":\n    query = \"%20\".join(argv[1:]) if len(argv) > 1 else quote(str(input(\"Search: \")))\n\n    print(\"Googling.....\")\n\n    url = f\"https://www.google.com/search?q={query}&num=100\"\n\n    res = httpx.get(\n        url,\n        headers={\"User-Agent\": str(UserAgent().random)},\n        timeout=10,\n    )\n\n    try:\n        link = BeautifulSoup(res.text, \"html.parser\").find(\"div\").find(\"a\").get(\"href\")\n\n    except AttributeError:\n        link = parse_qs(\n            BeautifulSoup(res.text, \"html.parser\").find(\"div\").find(\"a\").get(\"href\")\n        )[\"url\"][0]\n\n    webbrowser.open(link)\n"
  },
  {
    "path": "web_programming/random_anime_character.py",
    "content": "# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"beautifulsoup4\",\n#     \"fake-useragent\",\n#     \"httpx\",\n# ]\n# ///\n\nimport os\n\nimport httpx\nfrom bs4 import BeautifulSoup\nfrom fake_useragent import UserAgent\n\nheaders = {\"UserAgent\": UserAgent().random}\nURL = \"https://www.mywaifulist.moe/random\"\n\n\ndef save_image(image_url: str, image_title: str) -> None:\n    \"\"\"\n    Saves the image of anime character\n    \"\"\"\n    image = httpx.get(image_url, headers=headers, timeout=10)\n    with open(image_title, \"wb\") as file:\n        file.write(image.content)\n\n\ndef random_anime_character() -> tuple[str, str, str]:\n    \"\"\"\n    Returns the Title, Description, and Image Title of a random anime character .\n    \"\"\"\n    soup = BeautifulSoup(\n        httpx.get(URL, headers=headers, timeout=10).text, \"html.parser\"\n    )\n    title = soup.find(\"meta\", attrs={\"property\": \"og:title\"}).attrs[\"content\"]\n    image_url = soup.find(\"meta\", attrs={\"property\": \"og:image\"}).attrs[\"content\"]\n    description = soup.find(\"p\", id=\"description\").get_text()\n    _, image_extension = os.path.splitext(os.path.basename(image_url))\n    image_title = title.strip().replace(\" \", \"_\")\n    image_title = f\"{image_title}{image_extension}\"\n    save_image(image_url, image_title)\n    return (title, description, image_title)\n\n\nif __name__ == \"__main__\":\n    title, desc, image_title = random_anime_character()\n    print(f\"{title}\\n\\n{desc}\\n\\nImage saved : {image_title}\")\n"
  },
  {
    "path": "web_programming/recaptcha_verification.py",
    "content": "\"\"\"\nRecaptcha is a free captcha service offered by Google in order to secure websites and\nforms.  At https://www.google.com/recaptcha/admin/create you can create new recaptcha\nkeys and see the keys that your have already created.\n* Keep in mind that recaptcha doesn't work with localhost\nWhen you create a recaptcha key, your will get two separate keys: ClientKey & SecretKey.\nClientKey should be kept in your site's front end\nSecretKey should be kept in your site's  back end\n\n# An example HTML login form with recaptcha tag is shown below\n\n    <form action=\"\" method=\"post\">\n        <h2 class=\"text-center\">Log in</h2>\n        {% csrf_token %}\n        <div class=\"form-group\">\n            <input type=\"text\" name=\"username\" required=\"required\">\n        </div>\n        <div class=\"form-group\">\n            <input type=\"password\" name=\"password\" required=\"required\">\n        </div>\n        <div class=\"form-group\">\n            <button type=\"submit\">Log in</button>\n        </div>\n        <!-- Below is the recaptcha tag of html -->\n        <div class=\"g-recaptcha\" data-sitekey=\"ClientKey\"></div>\n    </form>\n\n    <!-- Below is the recaptcha script to be kept inside html tag -->\n    <script src=\"https://www.google.com/recaptcha/api.js\" async defer></script>\n\nBelow a Django function for the views.py file contains a login form for demonstrating\nrecaptcha verification.\n\"\"\"\n\n# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"httpx\",\n# ]\n# ///\n\nimport httpx\n\ntry:\n    from django.contrib.auth import authenticate, login\n    from django.shortcuts import redirect, render\nexcept ImportError:\n    authenticate = login = render = redirect = print\n\n\ndef login_using_recaptcha(request):\n    # Enter your recaptcha secret key here\n    secret_key = \"secretKey\"  # noqa: S105\n    url = \"https://www.google.com/recaptcha/api/siteverify\"\n\n    # when method is not POST, direct user to login page\n    if request.method != \"POST\":\n        return render(request, \"login.html\")\n\n    # from the frontend, get username, password, and client_key\n    username = request.POST.get(\"username\")\n    password = request.POST.get(\"password\")\n    client_key = request.POST.get(\"g-recaptcha-response\")\n\n    # post recaptcha response to Google's recaptcha api\n    response = httpx.post(\n        url, data={\"secret\": secret_key, \"response\": client_key}, timeout=10\n    )\n    # if the recaptcha api verified our keys\n    if response.json().get(\"success\", False):\n        # authenticate the user\n        user_in_database = authenticate(request, username=username, password=password)\n        if user_in_database:\n            login(request, user_in_database)\n            return redirect(\"/your-webpage\")\n    return render(request, \"login.html\")\n"
  },
  {
    "path": "web_programming/reddit.py",
    "content": "# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"httpx\",\n# ]\n# ///\n\nfrom __future__ import annotations\n\nimport httpx\n\nvalid_terms = set(\n    \"\"\"approved_at_utc approved_by author_flair_background_color\nauthor_flair_css_class author_flair_richtext author_flair_template_id author_fullname\nauthor_premium can_mod_post category clicked content_categories created_utc downs\nedited gilded gildings hidden hide_score is_created_from_ads_ui is_meta\nis_original_content is_reddit_media_domain is_video link_flair_css_class\nlink_flair_richtext link_flair_text link_flair_text_color media_embed mod_reason_title\nname permalink pwls quarantine saved score secure_media secure_media_embed selftext\nsubreddit subreddit_name_prefixed subreddit_type thumbnail title top_awarded_type\ntotal_awards_received ups upvote_ratio url user_reports\"\"\".split()\n)\n\n\ndef get_subreddit_data(\n    subreddit: str, limit: int = 1, age: str = \"new\", wanted_data: list | None = None\n) -> dict:\n    \"\"\"\n    subreddit : Subreddit to query\n    limit : Number of posts to fetch\n    age : [\"new\", \"top\", \"hot\"]\n    wanted_data : Get only the required data in the list\n    \"\"\"\n    wanted_data = wanted_data or []\n    if invalid_search_terms := \", \".join(sorted(set(wanted_data) - valid_terms)):\n        msg = f\"Invalid search term: {invalid_search_terms}\"\n        raise ValueError(msg)\n    response = httpx.get(\n        f\"https://www.reddit.com/r/{subreddit}/{age}.json?limit={limit}\",\n        headers={\"User-agent\": \"A random string\"},\n        timeout=10,\n    )\n    response.raise_for_status()\n    if response.status_code == 429:\n        raise httpx.HTTPError(response=response)\n\n    data = response.json()\n    if not wanted_data:\n        return {id_: data[\"data\"][\"children\"][id_] for id_ in range(limit)}\n\n    data_dict = {}\n    for id_ in range(limit):\n        data_dict[id_] = {\n            item: data[\"data\"][\"children\"][id_][\"data\"][item] for item in wanted_data\n        }\n    return data_dict\n\n\nif __name__ == \"__main__\":\n    # If you get Error 429, that means you are rate limited.Try after some time\n    print(get_subreddit_data(\"learnpython\", wanted_data=[\"title\", \"url\", \"selftext\"]))\n"
  },
  {
    "path": "web_programming/search_books_by_isbn.py",
    "content": "\"\"\"\nGet book and author data from https://openlibrary.org\n\nISBN: https://en.wikipedia.org/wiki/International_Standard_Book_Number\n\"\"\"\n\n# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"httpx\",\n# ]\n# ///\n\nfrom json import JSONDecodeError\n\nimport httpx\n\n\ndef get_openlibrary_data(olid: str = \"isbn/0140328726\") -> dict:\n    \"\"\"\n    Given an 'isbn/0140328726', return book data from Open Library as a Python dict.\n    Given an '/authors/OL34184A', return authors data as a Python dict.\n    This code must work for olids with or without a leading slash ('/').\n\n    # Comment out doctests if they take too long or have results that may change\n    # >>> get_openlibrary_data(olid='isbn/0140328726')  # doctest: +ELLIPSIS\n    {'publishers': ['Puffin'], 'number_of_pages': 96, 'isbn_10': ['0140328726'], ...\n    # >>> get_openlibrary_data(olid='/authors/OL7353617A')  # doctest: +ELLIPSIS\n    {'name': 'Adrian Brisku', 'created': {'type': '/type/datetime', ...\n    \"\"\"\n    new_olid = olid.strip().strip(\"/\")  # Remove leading/trailing whitespace & slashes\n    if new_olid.count(\"/\") != 1:\n        msg = f\"{olid} is not a valid Open Library olid\"\n        raise ValueError(msg)\n    return httpx.get(\n        f\"https://openlibrary.org/{new_olid}.json\", timeout=10, follow_redirects=True\n    ).json()\n\n\ndef summarize_book(ol_book_data: dict) -> dict:\n    \"\"\"\n    Given Open Library book data, return a summary as a Python dict.\n    \"\"\"\n    desired_keys = {\n        \"title\": \"Title\",\n        \"publish_date\": \"Publish date\",\n        \"authors\": \"Authors\",\n        \"number_of_pages\": \"Number of pages\",\n        \"isbn_10\": \"ISBN (10)\",\n        \"isbn_13\": \"ISBN (13)\",\n    }\n    data = {better_key: ol_book_data[key] for key, better_key in desired_keys.items()}\n    data[\"Authors\"] = [\n        get_openlibrary_data(author[\"key\"])[\"name\"] for author in data[\"Authors\"]\n    ]\n    for key, value in data.items():\n        if isinstance(value, list):\n            data[key] = \", \".join(value)\n    return data\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n\n    while True:\n        isbn = input(\"\\nEnter the ISBN code to search (or 'quit' to stop): \").strip()\n        if isbn.lower() in (\"\", \"q\", \"quit\", \"exit\", \"stop\"):\n            break\n\n        if len(isbn) not in (10, 13) or not isbn.isdigit():\n            print(f\"Sorry, {isbn} is not a valid ISBN.  Please, input a valid ISBN.\")\n            continue\n\n        print(f\"\\nSearching Open Library for ISBN: {isbn}...\\n\")\n\n        try:\n            book_summary = summarize_book(get_openlibrary_data(f\"isbn/{isbn}\"))\n            print(\"\\n\".join(f\"{key}: {value}\" for key, value in book_summary.items()))\n        except JSONDecodeError:\n            print(f\"Sorry, there are no results for ISBN: {isbn}.\")\n"
  },
  {
    "path": "web_programming/slack_message.py",
    "content": "# Created by sarathkaul on 12/11/19\n\n# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"httpx\",\n# ]\n# ///\n\nimport httpx\n\n\ndef send_slack_message(message_body: str, slack_url: str) -> None:\n    headers = {\"Content-Type\": \"application/json\"}\n    response = httpx.post(\n        slack_url, json={\"text\": message_body}, headers=headers, timeout=10\n    )\n    if response.status_code != 200:\n        msg = (\n            \"Request to slack returned an error \"\n            f\"{response.status_code}, the response is:\\n{response.text}\"\n        )\n        raise ValueError(msg)\n\n\nif __name__ == \"__main__\":\n    # Set the slack url to the one provided by Slack when you create the webhook at\n    # https://my.slack.com/services/new/incoming-webhook/\n    send_slack_message(\"<YOUR MESSAGE BODY>\", \"<SLACK CHANNEL URL>\")\n"
  },
  {
    "path": "web_programming/test_fetch_github_info.py",
    "content": "import json\n\nimport httpx\n\nfrom .fetch_github_info import AUTHENTICATED_USER_ENDPOINT, fetch_github_info\n\n\ndef test_fetch_github_info(monkeypatch):\n    class FakeResponse:\n        def __init__(self, content) -> None:\n            assert isinstance(content, (bytes, str))\n            self.content = content\n\n        def json(self):\n            return json.loads(self.content)\n\n    def mock_response(*args, **kwargs):\n        assert args[0] == AUTHENTICATED_USER_ENDPOINT\n        assert \"Authorization\" in kwargs[\"headers\"]\n        assert kwargs[\"headers\"][\"Authorization\"].startswith(\"token \")\n        assert \"Accept\" in kwargs[\"headers\"]\n        return FakeResponse(b'{\"login\":\"test\",\"id\":1}')\n\n    monkeypatch.setattr(httpx, \"get\", mock_response)\n    result = fetch_github_info(\"token\")\n    assert result[\"login\"] == \"test\"\n    assert result[\"id\"] == 1\n"
  },
  {
    "path": "web_programming/world_covid19_stats.py",
    "content": "#!/usr/bin/env python3\n\n\"\"\"\nProvide the current worldwide COVID-19 statistics.\nThis data is being scrapped from 'https://www.worldometers.info/coronavirus/'.\n\"\"\"\n\n# /// script\n# requires-python = \">=3.13\"\n# dependencies = [\n#     \"beautifulsoup4\",\n#     \"httpx\",\n# ]\n# ///\n\nimport httpx\nfrom bs4 import BeautifulSoup\n\n\ndef world_covid19_stats(\n    url: str = \"https://www.worldometers.info/coronavirus/\",\n) -> dict:\n    \"\"\"\n    Return a dict of current worldwide COVID-19 statistics\n    \"\"\"\n    soup = BeautifulSoup(\n        httpx.get(url, timeout=10, follow_redirects=True).text, \"html.parser\"\n    )\n    keys = soup.find_all(\"h1\")\n    values = soup.find_all(\"div\", {\"class\": \"maincounter-number\"})\n    keys += soup.find_all(\"span\", {\"class\": \"panel-title\"})\n    values += soup.find_all(\"div\", {\"class\": \"number-table-main\"})\n    return {key.text.strip(): value.text.strip() for key, value in zip(keys, values)}\n\n\nif __name__ == \"__main__\":\n    print(\"\\033[1m COVID-19 Status of the World \\033[0m\\n\")\n    print(\"\\n\".join(f\"{key}\\n{value}\" for key, value in world_covid19_stats().items()))\n"
  }
]